[BACK]Return to daemons.c CVS log [TXT][DIR] Up to [contributed] / early-roguelike / rogue5

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