comparison rogue4/daemons.c @ 12:9535a08ddc39

Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
author edwarj4
date Sat, 24 Oct 2009 16:52:52 +0000
parents
children f2951c4e28d9
comparison
equal deleted inserted replaced
11:949d558c2162 12:9535a08ddc39
1 /*
2 * All the daemon and fuse functions are in here
3 *
4 * @(#)daemons.c 4.10 (Berkeley) 4/6/82
5 *
6 * Rogue: Exploring the Dungeons of Doom
7 * Copyright (C) 1980, 1981, 1982 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 int between = 0;
17
18 /*
19 * doctor:
20 * A healing daemon that restors hit points after rest
21 */
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 + (lv << 1) > 20)
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 swander()
54 {
55 daemon(rollwand, 0, BEFORE);
56 }
57
58 /*
59 * rollwand:
60 * Called to roll to see if a wandering monster starts up
61 */
62 rollwand()
63 {
64 if (++between >= 4)
65 {
66 if (roll(1, 6) == 4)
67 {
68 wanderer();
69 kill_daemon(rollwand);
70 fuse(swander, 0, WANDERTIME, BEFORE);
71 }
72 between = 0;
73 }
74 }
75
76 /*
77 * unconfuse:
78 * Release the poor player from his confusion
79 */
80 unconfuse()
81 {
82 player.t_flags &= ~ISHUH;
83 msg("you feel less confused now");
84 }
85
86 /*
87 * unsee:
88 * Turn off the ability to see invisible
89 */
90 unsee()
91 {
92 register THING *th;
93
94 for (th = mlist; th != NULL; th = next(th))
95 if (on(*th, ISINVIS) && see_monst(th))
96 {
97 move(th->t_pos.y, th->t_pos.x);
98 addch(th->t_oldch);
99 }
100 player.t_flags &= ~CANSEE;
101 }
102
103 /*
104 * sight:
105 * He gets his sight back
106 */
107 sight()
108 {
109 if (on(player, ISBLIND))
110 {
111 extinguish(sight);
112 player.t_flags &= ~ISBLIND;
113 if (!(proom->r_flags & ISGONE))
114 enter_room(&hero);
115 msg("the veil of darkness lifts");
116 }
117 }
118
119 /*
120 * nohaste:
121 * End the hasting
122 */
123 nohaste()
124 {
125 player.t_flags &= ~ISHASTE;
126 msg("you feel yourself slowing down");
127 }
128
129 /*
130 * stomach:
131 * Digest the hero's food
132 */
133 stomach()
134 {
135 register int oldfood;
136
137 if (food_left <= 0)
138 {
139 if (food_left-- < -STARVETIME)
140 death('s');
141 /*
142 * the hero is fainting
143 */
144 if (no_command || rnd(5) != 0)
145 return;
146 no_command += rnd(8) + 4;
147 player.t_flags &= ~ISRUN;
148 running = FALSE;
149 count = 0;
150 hungry_state = 3;
151 if (!terse)
152 addmsg("you feel too weak from lack of food. ");
153 msg("You faint");
154 }
155 else
156 {
157 oldfood = food_left;
158 food_left -= ring_eat(LEFT) + ring_eat(RIGHT) + 1 - amulet;
159
160 if (food_left < MORETIME && oldfood >= MORETIME)
161 {
162 hungry_state = 2;
163 msg("you are starting to feel weak");
164 }
165 else if (food_left < 2 * MORETIME && oldfood >= 2 * MORETIME)
166 {
167 hungry_state = 1;
168 if (!terse)
169 msg("you are starting to get hungry");
170 else
171 msg("getting hungry");
172 }
173 }
174 }