comparison rogue3/daemons.c @ 0:527e2150eaf0

Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
author edwarj4
date Tue, 13 Oct 2009 13:33:34 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:527e2150eaf0
1 /*
2 * All the daemon and fuse functions are in here
3 *
4 * @(#)daemons.c 3.7 (Berkeley) 6/15/81
5 *
6 * Rogue: Exploring the Dungeons of Doom
7 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
8 * All rights reserved.
9 *
10 * See the file LICENSE.TXT for full copyright and licensing information.
11 */
12
13 #include "curses.h"
14 #include "rogue.h"
15
16 /*
17 * doctor:
18 * A healing daemon that restors hit points after rest
19 */
20
21 void
22 doctor()
23 {
24 register int lv, ohp;
25
26 lv = pstats.s_lvl;
27 ohp = pstats.s_hpt;
28 quiet++;
29 if (lv < 8)
30 {
31 if (quiet > 20 - lv*2)
32 pstats.s_hpt++;
33 }
34 else
35 if (quiet >= 3)
36 pstats.s_hpt += rnd(lv - 7)+1;
37 if (ISRING(LEFT, R_REGEN))
38 pstats.s_hpt++;
39 if (ISRING(RIGHT, R_REGEN))
40 pstats.s_hpt++;
41 if (ohp != pstats.s_hpt)
42 {
43 if (pstats.s_hpt > max_hp)
44 pstats.s_hpt = max_hp;
45 quiet = 0;
46 }
47 }
48
49 /*
50 * Swander:
51 * Called when it is time to start rolling for wandering monsters
52 */
53
54 void
55 swander()
56 {
57 start_daemon(rollwand, 0, BEFORE);
58 }
59
60 /*
61 * rollwand:
62 * Called to roll to see if a wandering monster starts up
63 */
64
65 int between = 0;
66
67 void
68 rollwand()
69 {
70 if (++between >= 4)
71 {
72 if (roll(1, 6) == 4)
73 {
74 wanderer();
75 kill_daemon(rollwand);
76 fuse(swander, 0, WANDERTIME, BEFORE);
77 }
78 between = 0;
79 }
80 }
81
82 /*
83 * unconfuse:
84 * Release the poor player from his confusion
85 */
86
87 void
88 unconfuse()
89 {
90 player.t_flags &= ~ISHUH;
91 msg("You feel less confused now");
92 }
93
94
95 /*
96 * unsee:
97 * He lost his see invisible power
98 */
99
100 void
101 unsee()
102 {
103 player.t_flags &= ~CANSEE;
104 }
105
106 /*
107 * sight:
108 * He gets his sight back
109 */
110
111 void
112 sight()
113 {
114 if (on(player, ISBLIND))
115 {
116 extinguish(sight);
117 player.t_flags &= ~ISBLIND;
118 light(&hero);
119 msg("The veil of darkness lifts");
120 }
121 }
122
123 /*
124 * nohaste:
125 * End the hasting
126 */
127
128 void
129 nohaste()
130 {
131 player.t_flags &= ~ISHASTE;
132 msg("You feel yourself slowing down.");
133 }
134
135 /*
136 * digest the hero's food
137 */
138 void
139 stomach()
140 {
141 register int oldfood;
142
143 if (food_left <= 0)
144 {
145 /*
146 * the hero is fainting
147 */
148 if (no_command || rnd(100) > 20)
149 return;
150 no_command = rnd(8)+4;
151 if (!terse)
152 addmsg("You feel too weak from lack of food. ");
153 msg("You faint");
154 running = FALSE;
155 count = 0;
156 hungry_state = 3;
157 }
158 else
159 {
160 oldfood = food_left;
161 food_left -= ring_eat(LEFT) + ring_eat(RIGHT) + 1 - amulet;
162
163 if (food_left < MORETIME && oldfood >= MORETIME)
164 {
165 msg("You are starting to feel weak");
166 hungry_state = 2;
167 }
168 else if (food_left < 2 * MORETIME && oldfood >= 2 * MORETIME)
169 {
170 if (!terse)
171 msg("You are starting to get hungry");
172 else
173 msg("Getting hungry");
174 hungry_state = 1;
175 }
176 }
177 }