Mercurial > hg > early-roguelike
comparison srogue/daemons.c @ 36:2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
author | elwin |
---|---|
date | Thu, 25 Nov 2010 12:21:41 +0000 |
parents | |
children | d7d45e980791 |
comparison
equal
deleted
inserted
replaced
35:05018c63a721 | 36:2128c7dc8a40 |
---|---|
1 /* | |
2 * All the daemon and fuse functions are in here | |
3 * | |
4 * @(#)daemons.c 9.0 (rdk) 7/17/84 | |
5 * | |
6 * Super-Rogue | |
7 * Copyright (C) 1984 Robert D. Kindelberger | |
8 * All rights reserved. | |
9 * | |
10 * Based on "Rogue: Exploring the Dungeons of Doom" | |
11 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | |
12 * All rights reserved. | |
13 * | |
14 * See the file LICENSE.TXT for full copyright and licensing information. | |
15 */ | |
16 | |
17 #include "rogue.h" | |
18 #include "rogue.ext" | |
19 | |
20 int between = 0; | |
21 | |
22 /* | |
23 * doctor: | |
24 * A healing daemon that restores hit points after rest | |
25 */ | |
26 doctor(fromfuse) | |
27 int fromfuse; | |
28 { | |
29 reg int *thp, lv, ohp, ccon; | |
30 | |
31 lv = him->s_lvl; | |
32 thp = &him->s_hpt; | |
33 ohp = *thp; | |
34 quiet += 1; | |
35 | |
36 ccon = him->s_ef.a_con; | |
37 if (ccon > 16 && !isfight) | |
38 *thp += rnd(ccon - 15); | |
39 if (lv < 8) { | |
40 if (quiet > 20 - lv * 2) | |
41 *thp += 1; | |
42 } | |
43 else { | |
44 if (quiet >= 3) | |
45 *thp += rnd(lv - 7) + 1; | |
46 } | |
47 if (isring(LEFT, R_REGEN)) | |
48 *thp += 1; | |
49 if (isring(RIGHT, R_REGEN)) | |
50 *thp += 1; | |
51 if (pl_on(ISREGEN)) | |
52 *thp += 1; | |
53 if (ohp != *thp) { | |
54 nochange = FALSE; | |
55 if (*thp > him->s_maxhp) | |
56 *thp = him->s_maxhp; | |
57 quiet = 0; | |
58 } | |
59 } | |
60 | |
61 | |
62 /* | |
63 * Swander: | |
64 * Called when it is time to start rolling for wandering monsters | |
65 */ | |
66 swander(fromfuse) | |
67 int fromfuse; | |
68 { | |
69 daemon(rollwand, TRUE, BEFORE); | |
70 } | |
71 | |
72 | |
73 /* | |
74 * rollwand: | |
75 * Called to roll to see if a wandering monster starts up | |
76 */ | |
77 rollwand(fromfuse) | |
78 int fromfuse; | |
79 { | |
80 | |
81 if (++between >= 4) { | |
82 if (roll(1, 6) == 4) { | |
83 if (levtype != POSTLEV) /* no monsters for posts */ | |
84 wanderer(); | |
85 extinguish(rollwand); | |
86 fuse(swander, TRUE, WANDERTIME); | |
87 } | |
88 between = 0; | |
89 } | |
90 } | |
91 | |
92 | |
93 /* | |
94 * unconfuse: | |
95 * Release the poor player from his confusion | |
96 */ | |
97 unconfuse(fromfuse) | |
98 int fromfuse; | |
99 { | |
100 if (pl_on(ISHUH)) | |
101 msg("You feel less confused now."); | |
102 player.t_flags &= ~ISHUH; | |
103 } | |
104 | |
105 /* | |
106 * unsee: | |
107 * He lost his see invisible power | |
108 */ | |
109 unsee(fromfuse) | |
110 int fromfuse; | |
111 { | |
112 player.t_flags &= ~CANSEE; | |
113 } | |
114 | |
115 /* | |
116 * sight: | |
117 * He gets his sight back | |
118 */ | |
119 sight(fromfuse) | |
120 int fromfuse; | |
121 { | |
122 if (pl_on(ISBLIND)) | |
123 msg("The veil of darkness lifts."); | |
124 player.t_flags &= ~ISBLIND; | |
125 light(&hero); | |
126 } | |
127 | |
128 /* | |
129 * nohaste: | |
130 * End the hasting | |
131 */ | |
132 nohaste(fromfuse) | |
133 int fromfuse; | |
134 { | |
135 if (pl_on(ISHASTE)) | |
136 msg("You feel yourself slowing down."); | |
137 player.t_flags &= ~ISHASTE; | |
138 } | |
139 | |
140 | |
141 /* | |
142 * stomach: | |
143 * Digest the hero's food | |
144 */ | |
145 stomach(fromfuse) | |
146 int fromfuse; | |
147 { | |
148 reg int oldfood, old_hunger; | |
149 | |
150 old_hunger = hungry_state; | |
151 if (food_left <= 0) { /* the hero is fainting */ | |
152 if (--food_left == -150) { | |
153 msg("Your stomach writhes with hunger pains."); | |
154 } | |
155 else if (food_left < -350) { | |
156 msg("You starve to death !!"); | |
157 msg(" "); | |
158 death(K_STARVE); | |
159 } | |
160 if (player.t_nocmd > 0 || rnd(100) > 20) | |
161 return; | |
162 player.t_nocmd = rnd(8)+4; | |
163 msg("You faint."); | |
164 running = FALSE; | |
165 count = 0; | |
166 hungry_state = F_FAINT; | |
167 } | |
168 else { | |
169 oldfood = food_left; | |
170 food_left -= ringfood + foodlev - amulet; | |
171 if (player.t_nocmd > 0) /* wait till he can move */ | |
172 return; | |
173 if (food_left < WEAKTIME && oldfood >= WEAKTIME) { | |
174 msg("You are starting to feel weak."); | |
175 hungry_state = F_WEAK; | |
176 } | |
177 else if(food_left < HUNGTIME && oldfood >= HUNGTIME) { | |
178 msg("Getting hungry."); | |
179 hungry_state = F_HUNGRY; | |
180 } | |
181 } | |
182 if (old_hunger != hungry_state) | |
183 updpack(); /* new pack weight */ | |
184 wghtchk(FALSE); | |
185 } | |
186 | |
187 /* | |
188 * noteth: | |
189 * Hero is no longer etherereal | |
190 */ | |
191 noteth(fromfuse) | |
192 int fromfuse; | |
193 { | |
194 int ch; | |
195 | |
196 if (pl_on(ISETHER)) { | |
197 msg("You begin to feel more corporeal."); | |
198 ch = player.t_oldch; | |
199 if (dead_end(ch)) { | |
200 msg("You materialize in %s.",identify(ch)); | |
201 msg(" "); | |
202 death(K_STONE); /* can't materialize in walls */ | |
203 } | |
204 } | |
205 player.t_flags &= ~ISETHER; | |
206 } | |
207 | |
208 /* | |
209 * sapem: | |
210 * Sap the hero's life away | |
211 */ | |
212 sapem(fromfuse) | |
213 int fromfuse; | |
214 { | |
215 chg_abil(rnd(4) + 1, -1, TRUE); | |
216 fuse(sapem, TRUE, 150); | |
217 nochange = FALSE; | |
218 } | |
219 | |
220 /* | |
221 * notslow: | |
222 * Restore the hero's normal speed | |
223 */ | |
224 notslow(fromfuse) | |
225 int fromfuse; | |
226 { | |
227 if (pl_on(ISSLOW)) | |
228 msg("You no longer feel hindered."); | |
229 player.t_flags &= ~ISSLOW; | |
230 } | |
231 | |
232 /* | |
233 * notregen: | |
234 * Hero is no longer regenerative | |
235 */ | |
236 notregen(fromfuse) | |
237 int fromfuse; | |
238 { | |
239 if (pl_on(ISREGEN)) | |
240 msg("You no longer feel bolstered."); | |
241 player.t_flags &= ~ISREGEN; | |
242 } | |
243 | |
244 /* | |
245 * notinvinc: | |
246 * Hero not invincible any more | |
247 */ | |
248 notinvinc(fromfuse) | |
249 int fromfuse; | |
250 { | |
251 if (pl_on(ISINVINC)) | |
252 msg("You no longer feel invincible."); | |
253 player.t_flags &= ~ISINVINC; | |
254 } |