|
|
1.1 root 1: /*
2: * All the daemon and fuse functions are in here
3: *
4: * @(#)daemons.c 3.7 (Berkeley) 6/15/81
5: */
6:
7: #include <curses.h>
8: #include "rogue.h"
9:
10: /*
11: * doctor:
12: * A healing daemon that restors hit points after rest
13: */
14:
15: doctor()
16: {
17: register int lv, ohp;
18:
19: lv = pstats.s_lvl;
20: ohp = pstats.s_hpt;
21: quiet++;
22: if (lv < 8)
23: {
24: if (quiet > 20 - lv*2)
25: pstats.s_hpt++;
26: }
27: else
28: if (quiet >= 3)
29: pstats.s_hpt += rnd(lv - 7)+1;
30: if (ISRING(LEFT, R_REGEN))
31: pstats.s_hpt++;
32: if (ISRING(RIGHT, R_REGEN))
33: pstats.s_hpt++;
34: if (ohp != pstats.s_hpt)
35: {
36: if (pstats.s_hpt > max_hp)
37: pstats.s_hpt = max_hp;
38: quiet = 0;
39: }
40: }
41:
42: /*
43: * Swander:
44: * Called when it is time to start rolling for wandering monsters
45: */
46:
47: swander()
48: {
49: daemon(rollwand, 0, BEFORE);
50: }
51:
52: /*
53: * rollwand:
54: * Called to roll to see if a wandering monster starts up
55: */
56:
57: rollwand()
58: {
59: static int between = 0;
60:
61: if (++between >= 4)
62: {
63: if (roll(1, 6) == 4)
64: {
65: wanderer();
66: kill_daemon(rollwand);
67: fuse(swander, 0, WANDERTIME, BEFORE);
68: }
69: between = 0;
70: }
71: }
72:
73: /*
74: * unconfuse:
75: * Release the poor player from his confusion
76: */
77:
78: unconfuse()
79: {
80: player.t_flags &= ~ISHUH;
81: msg("You feel less confused now");
82: }
83:
84:
85: /*
86: * unsee:
87: * He lost his see invisible power
88: */
89:
90: unsee()
91: {
92: player.t_flags &= ~CANSEE;
93: }
94:
95: /*
96: * sight:
97: * He gets his sight back
98: */
99:
100: sight()
101: {
102: if (on(player, ISBLIND))
103: {
104: extinguish(sight);
105: player.t_flags &= ~ISBLIND;
106: light(&hero);
107: msg("The veil of darkness lifts");
108: }
109: }
110:
111: /*
112: * nohaste:
113: * End the hasting
114: */
115:
116: nohaste()
117: {
118: player.t_flags &= ~ISHASTE;
119: msg("You feel yourself slowing down.");
120: }
121:
122: /*
123: * digest the hero's food
124: */
125: stomach()
126: {
127: register int oldfood;
128:
129: if (food_left <= 0)
130: {
131: /*
132: * the hero is fainting
133: */
134: if (no_command || rnd(100) > 20)
135: return;
136: no_command = rnd(8)+4;
137: if (!terse)
138: addmsg("You feel too weak from lack of food. ");
139: msg("You faint");
140: running = FALSE;
141: count = 0;
142: hungry_state = 3;
143: }
144: else
145: {
146: oldfood = food_left;
147: food_left -= ring_eat(LEFT) + ring_eat(RIGHT) + 1 - amulet;
148:
149: if (food_left < MORETIME && oldfood >= MORETIME)
150: {
151: msg("You are starting to feel weak");
152: hungry_state = 2;
153: }
154: else if (food_left < 2 * MORETIME && oldfood >= 2 * MORETIME)
155: {
156: if (!terse)
157: msg("You are starting to get hungry");
158: else
159: msg("Getting hungry");
160: hungry_state = 1;
161: }
162: }
163: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.