Mercurial > hg > early-roguelike
annotate rogue4/chase.c @ 232:bac2c81fec78
Makefiles: don't rely on built-in implicit rules.
Not all make implementations will use CPPFLAGS when compiling C files.
| author | John "Elwin" Edwards | 
|---|---|
| date | Tue, 08 Mar 2016 19:45:41 -0500 | 
| parents | 1b73a8641b37 | 
| children | e52a8a7ad4c5 | 
| rev | line source | 
|---|---|
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
2 * Code for one creature to chase another | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
3 * | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
4 * @(#)chase.c 4.25 (Berkeley) 5/5/82 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
5 * | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
6 * Rogue: Exploring the Dungeons of Doom | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
7 * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
8 * All rights reserved. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
9 * | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
10 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
11 */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
12 | 
| 215 | 13 #include <stdlib.h> | 
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
14 #include <curses.h> | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
15 #include "rogue.h" | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
16 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
17 #define DRAGONSHOT 5 /* one chance in DRAGONSHOT that a dragon will flame */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
18 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
19 coord ch_ret; /* Where chasing takes you */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
20 | 
| 215 | 21 bool chase(THING *tp, coord *ee); | 
| 22 int do_chase(THING *th); | |
| 23 coord *find_dest(THING *tp); | |
| 24 | |
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
25 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
26 * runners: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
27 * Make all the running monsters move. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
28 */ | 
| 215 | 29 void | 
| 30 runners(void) | |
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
31 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
32 register THING *tp; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
33 register THING *ntp; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
34 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
35 for (tp = mlist; tp != NULL; tp = ntp) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
36 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
37 ntp = next(tp); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
38 if (!on(*tp, ISHELD) && on(*tp, ISRUN)) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
39 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
40 if (!on(*tp, ISSLOW) || tp->t_turn) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
41 if (do_chase(tp) == -1) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
42 continue; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
43 if (on(*tp, ISHASTE)) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
44 if (do_chase(tp) == -1) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
45 continue; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
46 tp->t_turn ^= TRUE; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
47 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
48 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
49 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
50 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
51 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
52 * do_chase: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
53 * Make one thing chase another. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
54 */ | 
| 215 | 55 int | 
| 56 do_chase(THING *th) | |
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
57 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
58 register struct room *rer, *ree; /* room of chaser, room of chasee */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
59 register int mindist = 32767, i, dist; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
60 register bool stoprun = FALSE; /* TRUE means we are there */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
61 register char sch; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
62 register bool door; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
63 register THING *obj; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
64 register struct room *oroom; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
65 coord this; /* Temporary destination for chaser */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
66 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
67 rer = th->t_room; /* Find room of chaser */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
68 if (on(*th, ISGREED) && rer->r_goldval == 0) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
69 th->t_dest = &hero; /* If gold has been taken, run after hero */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
70 if (th->t_dest == &hero) /* Find room of chasee */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
71 ree = proom; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
72 else | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
73 ree = roomin(th->t_dest); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
74 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
75 * We don't count doors as inside rooms for this routine | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
76 */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
77 door = (chat(th->t_pos.y, th->t_pos.x) == DOOR); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
78 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
79 * If the object of our desire is in a different room, | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
80 * and we are not in a corridor, run to the door nearest to | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
81 * our goal. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
82 */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
83 over: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
84 if (rer != ree) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
85 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
86 for (i = 0; i < rer->r_nexits; i++) /* loop through doors */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
87 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
88 dist = DISTANCE(th->t_dest->y, th->t_dest->x, | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
89 rer->r_exit[i].y, rer->r_exit[i].x); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
90 if (dist < mindist) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
91 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
92 this = rer->r_exit[i]; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
93 mindist = dist; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
94 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
95 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
96 if (door) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
97 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
98 rer = &passages[flat(th->t_pos.y, th->t_pos.x) & F_PNUM]; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
99 door = FALSE; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
100 goto over; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
101 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
102 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
103 else | 
