Ticket #745: fixgroupmove

File fixgroupmove, 1.3 KB (added by tigen, 12 years ago)

Patch for the group movement AI code. Check adjacency and randomize the square selection.

Line 
1Index: melee2.c
2===================================================================
3--- melee2.c    (revision 1121)
4+++ melee2.c    (working copy)
5@@ -2853,32 +2853,26 @@
6        /* Monster groups try to surround the player */
7        if (!done && adult_ai_packs && (r_ptr->flags[0] & RF0_FRIENDS))
8        {
9-               int i;
10+               int i, tmp;
11 
12-               /* Find an empty square near the player to fill */
13-               for (i = 0; i < 8; i++)
14+               /* If we are not already adjacent */
15+               if (m_ptr->cdis > 1)
16                {
17-                       /* Pick squares near player (semi-randomly) */
18-                       y2 = py + ddy_ddd[(m_idx + i) & 7];
19-                       x2 = px + ddx_ddd[(m_idx + i) & 7];
20-
21-                       /* Already there? */
22-                       if ((m_ptr->fy == y2) && (m_ptr->fx == x2))
23+                       /* Find an empty square near the player to fill */
24+                       int tmp = randint0(8);
25+                       for (i = 0; i < 8; i++)
26                        {
27-                               /* Attack the player */
28-                               y2 = py;
29-                               x2 = px;
30-
31+                               /* Pick squares near player (pseudo-randomly) */
32+                               y2 = py + ddy_ddd[(tmp + i) & 7];
33+                               x2 = px + ddx_ddd[(tmp + i) & 7];
34+                               
35+                               /* Ignore filled grids */
36+                               if (!cave_empty_bold(y2, x2)) continue;
37+                               
38+                               /* Try to fill this hole */
39                                break;
40                        }
41-
42-                       /* Ignore filled grids */
43-                       if (!cave_empty_bold(y2, x2)) continue;
44-
45-                       /* Try to fill this hole */
46-                       break;
47                }
48-
49                /* Extract the new "pseudo-direction" */
50                y = m_ptr->fy - y2;
51                x = m_ptr->fx - x2;