Mercurial > hg > early-roguelike
annotate urogue/chase.c @ 256:c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
| author | John "Elwin" Edwards | 
|---|---|
| date | Tue, 31 Jan 2017 19:56:04 -0500 | 
| parents | |
| children | 0250220d8cdd | 
| rev | line source | 
|---|---|
| 
256
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
2 chase.c - Code for one creature to chase another | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
3 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
4 UltraRogue: The Ultimate Adventure in the Dungeons of Doom | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
5 Copyright (C) 1985, 1986, 1992, 1993, 1995 Herb Chong | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
6 All rights reserved. | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
7 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
8 Based on "Advanced Rogue" | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
9 Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
10 All rights reserved. | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
11 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
12 Based on "Rogue: Exploring the Dungeons of Doom" | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
13 Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
14 All rights reserved. | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
15 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
16 See the file LICENSE.TXT for full copyright and licensing information. | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
17 */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
18 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
19 #include <stdlib.h> | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
20 #include <ctype.h> | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
21 #include <limits.h> | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
22 #include "rogue.h" | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
23 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
24 /* | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
25 do_chase() | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
26 Make one thing chase another. | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
27 */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
28 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
29 void | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
30 do_chase(struct thing *th, int flee) | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
31 { | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
32 struct room *rer; /* room of chaser */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
33 struct room *ree; /* room of chasee */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
34 struct room *old_room; /* old room of monster */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
35 struct room *new_room; /* new room of monster */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
36 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
37 int i, mindist = INT_MAX, maxdist = INT_MIN, dist = INT_MIN; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
38 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
39 int last_door = -1; /* Door we just came from */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
40 int stoprun = FALSE; /* TRUE means we are there */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
41 int rundoor; /* TRUE means run to a door */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
42 int hit_bad = FALSE; /* TRUE means hit bad monster */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
43 int mon_attack; /* TRUE means find a monster to hit */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
44 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
45 char sch; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
46 struct linked_list *item; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
47 coord this; /* Temporary destination for chaser */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
48 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
49 if (!th->t_ischasing) | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
50 return; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
51 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
52 /* Make sure the monster can move */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
53 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
54 if (th->t_no_move != 0) | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
55 { | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
56 th->t_no_move--; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
57 return; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
58 } | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
59 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
60 /* | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
61 * Bad monsters check for a good monster to hit, friendly monsters | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
62 * check for a bad monster to hit. | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
63 */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
64 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
65 mon_attack = FALSE; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
66 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
67 if (good_monster(*th)) | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
68 { | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
69 hit_bad = TRUE; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
70 mon_attack = TRUE; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
71 } | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
72 else if (on(*th, ISMEAN)) | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
73 { | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
74 hit_bad = FALSE; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
75 mon_attack = TRUE; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
76 } | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
77 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
78 if (mon_attack) | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
79 { | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
80 struct linked_list *mon_to_hit; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
81 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
82 mon_to_hit = f_mons_a(th->t_pos.y, th->t_pos.x, hit_bad); | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
83 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
84 if (mon_to_hit) | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
85 { | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
86 mon_mon_attack(th, mon_to_hit, pick_weap(th), NOTHROWN); | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
87 return; | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
88 } | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
89 } | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
90 | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
changeset
 | 
91 /* no nearby monster to hit */ | 
| 
 
c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
 
John "Elwin" Edwards 
parents:  
diff
 | 
