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

Annotation of early-roguelike/srogue/daemons.c, Revision 1.1.1.1

1.1       rubenllo    1: /*
                      2:  * All the daemon and fuse functions are in here
                      3:  *
                      4:  * @(#)daemons.c       9.0     (rdk)    7/17/84
                      5:  *
                      6:  * Super-Rogue
                      7:  * Copyright (C) 1984 Robert D. Kindelberger
                      8:  * All rights reserved.
                      9:  *
                     10:  * Based on "Rogue: Exploring the Dungeons of Doom"
                     11:  * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
                     12:  * All rights reserved.
                     13:  *
                     14:  * See the file LICENSE.TXT for full copyright and licensing information.
                     15:  */
                     16:
                     17: #include "rogue.h"
                     18: #include "rogue.ext"
                     19:
                     20: int between = 0;
                     21:
                     22: /*
                     23:  * doctor:
                     24:  *     A healing daemon that restores hit points after rest
                     25:  */
                     26: void
                     27: doctor(int fromfuse)
                     28: {
                     29:        reg int *thp, lv, ohp, ccon;
                     30:
                     31:        lv = him->s_lvl;
                     32:        thp = &him->s_hpt;
                     33:        ohp = *thp;
                     34:        quiet += 1;
                     35:
                     36:        ccon = him->s_ef.a_con;
                     37:        if (ccon > 16 && !isfight)
                     38:                *thp += rnd(ccon - 15);
                     39:        if (lv < 8) {
                     40:                if (quiet > 20 - lv * 2)
                     41:                        *thp += 1;
                     42:        }
                     43:        else {
                     44:                if (quiet >= 3)
                     45:                        *thp += rnd(lv - 7) + 1;
                     46:        }
                     47:        if (isring(LEFT, R_REGEN))
                     48:                *thp += 1;
                     49:        if (isring(RIGHT, R_REGEN))
                     50:                *thp += 1;
                     51:        if (pl_on(ISREGEN))
                     52:                *thp += 1;
                     53:        if (ohp != *thp) {
                     54:                nochange = FALSE;
                     55:                if (*thp > him->s_maxhp)
                     56:                        *thp = him->s_maxhp;
                     57:                quiet = 0;
                     58:        }
                     59: }
                     60:
                     61:
                     62: /*
                     63:  * Swander:
                     64:  *     Called when it is time to start rolling for wandering monsters
                     65:  */
                     66: void
                     67: swander(int fromfuse)
                     68: {
                     69:        start_daemon(rollwand, TRUE, AFTER);
                     70: }
                     71:
                     72:
                     73: /*
                     74:  * rollwand:
                     75:  *     Called to roll to see if a wandering monster starts up
                     76:  */
                     77: void
                     78: rollwand(int fromfuse)
                     79: {
                     80:
                     81:        if (++between >= 4) {
                     82:                if (roll(1, 6) == 4) {
                     83:                        if (levtype != POSTLEV)         /* no monsters for posts */
                     84:                                wanderer();
                     85:                        extinguish(rollwand);
                     86:                        fuse(swander, TRUE, WANDERTIME);
                     87:                }
                     88:                between = 0;
                     89:        }
                     90: }
                     91:
                     92:
                     93: /*
                     94:  * unconfuse:
                     95:  *     Release the poor player from his confusion
                     96:  */
                     97: void
                     98: unconfuse(int fromfuse)
                     99: {
                    100:        if (pl_on(ISHUH))
                    101:                msg("You feel less confused now.");
                    102:        player.t_flags &= ~ISHUH;
                    103: }
                    104:
                    105: /*
                    106:  * unsee:
                    107:  *     He lost his see invisible power
                    108:  */
                    109: void
                    110: unsee(int fromfuse)
                    111: {
                    112:        player.t_flags &= ~CANSEE;
                    113: }
                    114:
                    115: /*
                    116:  * sight:
                    117:  *     He gets his sight back
                    118:  */
                    119: void
                    120: sight(int fromfuse)
                    121: {
                    122:        if (pl_on(ISBLIND))
                    123:                msg("The veil of darkness lifts.");
                    124:        player.t_flags &= ~ISBLIND;
                    125:        light(&hero);
                    126: }
                    127:
                    128: /*
                    129:  * nohaste:
                    130:  *     End the hasting
                    131:  */
                    132: void
                    133: nohaste(int fromfuse)
                    134: {
                    135:        if (pl_on(ISHASTE))
                    136:                msg("You feel yourself slowing down.");
                    137:        player.t_flags &= ~ISHASTE;
                    138: }
                    139:
                    140:
                    141: /*
                    142:  * stomach:
                    143:  *     Digest the hero's food
                    144:  */
                    145: void
                    146: stomach(int fromfuse)
                    147: {
                    148:        reg int oldfood, old_hunger;
                    149:
                    150:        old_hunger = hungry_state;
                    151:        if (food_left <= 0) {            /* the hero is fainting */
                    152:                if (--food_left == -150) {
                    153:                        msg("Your stomach writhes with hunger pains.");
                    154:                }
                    155:                else if (food_left < -350) {
                    156:                        msg("You starve to death !!");
                    157:                        msg(" ");
                    158:                        death(K_STARVE);
                    159:                }
                    160:                if (player.t_nocmd > 0 || rnd(100) > 20)
                    161:                        return;
                    162:                player.t_nocmd = rnd(8)+4;
                    163:                msg("You faint.");
                    164:                running = FALSE;
                    165:                count = 0;
                    166:                hungry_state = F_FAINT;
                    167:        }
                    168:        else {
                    169:                oldfood = food_left;
                    170:                food_left -= ringfood + foodlev - amulet;
                    171:                if (player.t_nocmd > 0)         /* wait till he can move */
                    172:                        return;
                    173:                if (food_left < WEAKTIME && oldfood >= WEAKTIME) {
                    174:                        msg("You are starting to feel weak.");
                    175:                        hungry_state = F_WEAK;
                    176:                }
                    177:                else if(food_left < HUNGTIME && oldfood >= HUNGTIME) {
                    178:                        msg("Getting hungry.");
                    179:                        hungry_state = F_HUNGRY;
                    180:                }
                    181:        }
                    182:        if (old_hunger != hungry_state)
                    183:            updpack();                          /* new pack weight */
                    184:        wghtchk(FALSE);
                    185: }
                    186:
                    187: /*
                    188:  * noteth:
                    189:  *     Hero is no longer etherereal
                    190:  */
                    191: void
                    192: noteth(int fromfuse)
                    193: {
                    194:        int ch;
                    195:
                    196:        if (pl_on(ISETHER)) {
                    197:                msg("You begin to feel more corporeal.");
                    198:                ch = player.t_oldch;
                    199:                if (dead_end(ch)) {
                    200:                        msg("You materialize in %s.",identify(ch));
                    201:                        msg(" ");
                    202:                        death(K_STONE); /* can't materialize in walls */
                    203:                }
                    204:        }
                    205:        player.t_flags &= ~ISETHER;
                    206: }
                    207:
                    208: /*
                    209:  * sapem:
                    210:  *     Sap the hero's life away
                    211:  */
                    212: void
                    213: sapem(int fromfuse)
                    214: {
                    215:        chg_abil(rnd(4) + 1, -1, TRUE);
                    216:        fuse(sapem, TRUE, 150);
                    217:        nochange = FALSE;
                    218: }
                    219:
                    220: /*
                    221:  * notslow:
                    222:  *     Restore the hero's normal speed
                    223:  */
                    224: void
                    225: notslow(int fromfuse)
                    226: {
                    227:        if (pl_on(ISSLOW))
                    228:                msg("You no longer feel hindered.");
                    229:        player.t_flags &= ~ISSLOW;
                    230: }
                    231:
                    232: /*
                    233:  * notregen:
                    234:  *     Hero is no longer regenerative
                    235:  */
                    236: void
                    237: notregen(int fromfuse)
                    238: {
                    239:        if (pl_on(ISREGEN))
                    240:                msg("You no longer feel bolstered.");
                    241:        player.t_flags &= ~ISREGEN;
                    242: }
                    243:
                    244: /*
                    245:  * notinvinc:
                    246:  *     Hero not invincible any more
                    247:  */
                    248: void
                    249: notinvinc(int fromfuse)
                    250: {
                    251:        if (pl_on(ISINVINC))
                    252:                msg("You no longer feel invincible.");
                    253:        player.t_flags &= ~ISINVINC;
                    254: }

CVSweb