Annotation of early-roguelike/rogue5/daemons.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: * All the daemon and fuse functions are in here
! 3: *
! 4: * @(#)daemons.c 4.24 (Berkeley) 02/05/99
! 5: *
! 6: * Rogue: Exploring the Dungeons of Doom
! 7: * Copyright (C) 1980-1983, 1985, 1999 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: void
! 21: doctor(void)
! 22: {
! 23: int lv, ohp;
! 24:
! 25: lv = pstats.s_lvl;
! 26: ohp = pstats.s_hpt;
! 27: quiet++;
! 28: if (lv < 8)
! 29: {
! 30: if (quiet + (lv << 1) > 20)
! 31: pstats.s_hpt++;
! 32: }
! 33: else
! 34: if (quiet >= 3)
! 35: pstats.s_hpt += rnd(lv - 7) + 1;
! 36: if (ISRING(LEFT, R_REGEN))
! 37: pstats.s_hpt++;
! 38: if (ISRING(RIGHT, R_REGEN))
! 39: pstats.s_hpt++;
! 40: if (ohp != pstats.s_hpt)
! 41: {
! 42: if (pstats.s_hpt > max_hp)
! 43: pstats.s_hpt = max_hp;
! 44: quiet = 0;
! 45: }
! 46: }
! 47:
! 48: /*
! 49: * Swander:
! 50: * Called when it is time to start rolling for wandering monsters
! 51: */
! 52: void
! 53: swander(void)
! 54: {
! 55: start_daemon(rollwand, 0, BEFORE);
! 56: }
! 57:
! 58: /*
! 59: * rollwand:
! 60: * Called to roll to see if a wandering monster starts up
! 61: */
! 62:
! 63: void
! 64: rollwand(void)
! 65: {
! 66:
! 67: if (++between >= 4)
! 68: {
! 69: if (roll(1, 6) == 4)
! 70: {
! 71: wanderer();
! 72: kill_daemon(rollwand);
! 73: fuse(swander, 0, WANDERTIME, BEFORE);
! 74: }
! 75: between = 0;
! 76: }
! 77: }
! 78:
! 79: /*
! 80: * unconfuse:
! 81: * Release the poor player from his confusion
! 82: */
! 83: void
! 84: unconfuse(void)
! 85: {
! 86: player.t_flags &= ~ISHUH;
! 87: msg("you feel less %s now", choose_str("trippy", "confused"));
! 88: }
! 89:
! 90: /*
! 91: * unsee:
! 92: * Turn off the ability to see invisible
! 93: */
! 94: void
! 95: unsee(void)
! 96: {
! 97: THING *th;
! 98:
! 99: for (th = mlist; th != NULL; th = next(th))
! 100: if (on(*th, ISINVIS) && see_monst(th))
! 101: mvaddch(th->t_pos.y, th->t_pos.x, th->t_oldch);
! 102: player.t_flags &= ~CANSEE;
! 103: }
! 104:
! 105: /*
! 106: * sight:
! 107: * He gets his sight back
! 108: */
! 109: void
! 110: sight(void)
! 111: {
! 112: if (on(player, ISBLIND))
! 113: {
! 114: extinguish(sight);
! 115: player.t_flags &= ~ISBLIND;
! 116: if (!(proom->r_flags & ISGONE))
! 117: enter_room(&hero);
! 118: msg(choose_str("far out! Everything is all cosmic again",
! 119: "the veil of darkness lifts"));
! 120: }
! 121: }
! 122:
! 123: /*
! 124: * nohaste:
! 125: * End the hasting
! 126: */
! 127: void
! 128: nohaste(void)
! 129: {
! 130: player.t_flags &= ~ISHASTE;
! 131: msg("you feel yourself slowing down");
! 132: }
! 133:
! 134: /*
! 135: * stomach:
! 136: * Digest the hero's food
! 137: */
! 138: void
! 139: stomach(void)
! 140: {
! 141: int oldfood;
! 142: int orig_hungry = hungry_state;
! 143:
! 144: if (food_left <= 0)
! 145: {
! 146: if (food_left-- < -STARVETIME)
! 147: death('s');
! 148: /*
! 149: * the hero is fainting
! 150: */
! 151: if (no_command || rnd(5) != 0)
! 152: return;
! 153: no_command += rnd(8) + 4;
! 154: hungry_state = 3;
! 155: if (!terse)
! 156: addmsg(choose_str("the munchies overpower your motor capabilities. ",
! 157: "you feel too weak from lack of food. "));
! 158: msg(choose_str("You freak out", "You faint"));
! 159: }
! 160: else
! 161: {
! 162: oldfood = food_left;
! 163: food_left -= ring_eat(LEFT) + ring_eat(RIGHT) + 1 - amulet;
! 164:
! 165: if (food_left < MORETIME && oldfood >= MORETIME)
! 166: {
! 167: hungry_state = 2;
! 168: msg(choose_str("the munchies are interfering with your motor capabilites",
! 169: "you are starting to feel weak"));
! 170: }
! 171: else if (food_left < 2 * MORETIME && oldfood >= 2 * MORETIME)
! 172: {
! 173: hungry_state = 1;
! 174: if (terse)
! 175: msg(choose_str("getting the munchies", "getting hungry"));
! 176: else
! 177: msg(choose_str("you are getting the munchies",
! 178: "you are starting to get hungry"));
! 179: }
! 180: }
! 181: if (hungry_state != orig_hungry) {
! 182: player.t_flags &= ~ISRUN;
! 183: running = FALSE;
! 184: to_death = FALSE;
! 185: count = 0;
! 186: }
! 187: }
! 188:
! 189: /*
! 190: * come_down:
! 191: * Take the hero down off her acid trip.
! 192: */
! 193: void
! 194: come_down(void)
! 195: {
! 196: THING *tp;
! 197: int seemonst;
! 198:
! 199: if (!on(player, ISHALU))
! 200: return;
! 201:
! 202: kill_daemon(visuals);
! 203: player.t_flags &= ~ISHALU;
! 204:
! 205: if (on(player, ISBLIND))
! 206: return;
! 207:
! 208: /*
! 209: * undo the things
! 210: */
! 211: for (tp = lvl_obj; tp != NULL; tp = next(tp))
! 212: if (cansee(tp->o_pos.y, tp->o_pos.x))
! 213: mvaddch(tp->o_pos.y, tp->o_pos.x, tp->o_type);
! 214:
! 215: /*
! 216: * undo the monsters
! 217: */
! 218: seemonst = on(player, SEEMONST);
! 219: for (tp = mlist; tp != NULL; tp = next(tp))
! 220: {
! 221: move(tp->t_pos.y, tp->t_pos.x);
! 222: if (cansee(tp->t_pos.y, tp->t_pos.x))
! 223: if (!on(*tp, ISINVIS) || on(player, CANSEE))
! 224: addch(tp->t_disguise);
! 225: else
! 226: addch(chat(tp->t_pos.y, tp->t_pos.x));
! 227: else if (seemonst)
! 228: {
! 229: standout();
! 230: addch(tp->t_type);
! 231: standend();
! 232: }
! 233: }
! 234: msg("Everything looks SO boring now.");
! 235: }
! 236:
! 237: /*
! 238: * visuals:
! 239: * change the characters for the player
! 240: */
! 241: void
! 242: visuals(void)
! 243: {
! 244: THING *tp;
! 245: int seemonst;
! 246:
! 247: if (!after || (running && jump))
! 248: return;
! 249: /*
! 250: * change the things
! 251: */
! 252: for (tp = lvl_obj; tp != NULL; tp = next(tp))
! 253: if (cansee(tp->o_pos.y, tp->o_pos.x))
! 254: mvaddch(tp->o_pos.y, tp->o_pos.x, rnd_thing());
! 255:
! 256: /*
! 257: * change the stairs
! 258: */
! 259: if (!seenstairs && cansee(stairs.y, stairs.x))
! 260: mvaddch(stairs.y, stairs.x, rnd_thing());
! 261:
! 262: /*
! 263: * change the monsters
! 264: */
! 265: seemonst = on(player, SEEMONST);
! 266: for (tp = mlist; tp != NULL; tp = next(tp))
! 267: {
! 268: move(tp->t_pos.y, tp->t_pos.x);
! 269: if (see_monst(tp))
! 270: {
! 271: if (tp->t_type == 'X' && tp->t_disguise != 'X')
! 272: addch(rnd_thing());
! 273: else
! 274: addch(rnd(26) + 'A');
! 275: }
! 276: else if (seemonst)
! 277: {
! 278: standout();
! 279: addch(rnd(26) + 'A');
! 280: standend();
! 281: }
! 282: }
! 283: }
! 284:
! 285: /*
! 286: * land:
! 287: * Land from a levitation potion
! 288: */
! 289: void
! 290: land(void)
! 291: {
! 292: player.t_flags &= ~ISLEVIT;
! 293: msg(choose_str("bummer! You've hit the ground",
! 294: "you float gently to the ground"));
! 295: }
CVSweb