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

Annotation of early-roguelike/arogue5/potions.c, Revision 1.1.1.1

1.1       rubenllo    1: /*
                      2:  * Function(s) for dealing with potions
                      3:  *
                      4:  * Advanced Rogue
                      5:  * Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
                      6:  * All rights reserved.
                      7:  *
                      8:  * Based on "Rogue: Exploring the Dungeons of Doom"
                      9:  * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
                     10:  * All rights reserved.
                     11:  *
                     12:  * See the file LICENSE.TXT for full copyright and licensing information.
                     13:  */
                     14:
                     15: #include "curses.h"
                     16: #include "rogue.h"
                     17: #include <stdlib.h>
                     18: #include <string.h>
                     19:
                     20: void res_intelligence(void);
                     21: void res_wisdom(void);
                     22:
                     23: 
                     24: /*
                     25:  * Increase player's constitution
                     26:  */
                     27:
                     28: void
                     29: add_const(bool cursed)
                     30: {
                     31:     /* Do the potion */
                     32:     if (cursed) {
                     33:        msg("You feel less healthy now.");
                     34:        pstats.s_const--;
                     35:        if (pstats.s_const <= 0)
                     36:            death(D_CONSTITUTION);
                     37:     }
                     38:     else {
                     39:        msg("You feel healthier now.");
                     40:        pstats.s_const = min(pstats.s_const + 1, 25);
                     41:     }
                     42:
                     43:     /* Adjust the maximum */
                     44:     if (max_stats.s_const < pstats.s_const)
                     45:        max_stats.s_const = pstats.s_const;
                     46: }
                     47: 
                     48: /*
                     49:  * Increase player's dexterity
                     50:  */
                     51:
                     52: void
                     53: add_dexterity(bool cursed)
                     54: {
                     55:     int ring_str;      /* Value of ring strengths */
                     56:
                     57:     /* Undo any ring changes */
                     58:     ring_str = ring_value(R_ADDHIT);
                     59:     pstats.s_dext -= ring_str;
                     60:
                     61:     /* Now do the potion */
                     62:     if (cursed) {
                     63:        msg("You feel less dextrous now.");
                     64:        pstats.s_dext--;
                     65:     }
                     66:     else {
                     67:        msg("You feel more dextrous now.  Watch those hands!");
                     68:        pstats.s_dext = min(pstats.s_dext + 1, 25);
                     69:     }
                     70:
                     71:     /* Adjust the maximum */
                     72:     if (max_stats.s_dext < pstats.s_dext)
                     73:        max_stats.s_dext = pstats.s_dext;
                     74:
                     75:     /* Now put back the ring changes */
                     76:     if (ring_str)
                     77:        pstats.s_dext += ring_str;
                     78: }
                     79: 
                     80: /*
                     81:  * add_haste:
                     82:  *     add a haste to the player
                     83:  */
                     84:
                     85: void
                     86: add_haste(bool blessed)
                     87: {
                     88:     int hasttime;
                     89:
                     90:     if (blessed) hasttime = HASTETIME*2;
                     91:     else hasttime = HASTETIME;
                     92:
                     93:     if (on(player, ISSLOW)) { /* Is person slow? */
                     94:        extinguish(noslow);
                     95:        noslow();
                     96:
                     97:        if (blessed) hasttime = HASTETIME/2;
                     98:        else return;
                     99:     }
                    100:
                    101:     if (on(player, ISHASTE)) {
                    102:        msg("You faint from exhaustion.");
                    103:        no_command += rnd(hasttime);
                    104:        lengthen(nohaste, roll(hasttime,hasttime));
                    105:     }
                    106:     else {
                    107:        turn_on(player, ISHASTE);
                    108:        fuse(nohaste, 0, roll(hasttime, hasttime), AFTER);
                    109:     }
                    110: }
                    111: 
                    112: /*
                    113:  * Increase player's intelligence
                    114:  */
                    115: void
                    116: add_intelligence(bool cursed)
                    117: {
                    118:     int ring_str;      /* Value of ring strengths */
                    119:
                    120:     /* Undo any ring changes */
                    121:     ring_str = ring_value(R_ADDINTEL);
                    122:     pstats.s_intel -= ring_str;
                    123:
                    124:     /* Now do the potion */
                    125:     if (cursed) {
                    126:        msg("You feel slightly less intelligent now.");
                    127:        pstats.s_intel--;
                    128:     }
                    129:     else {
                    130:        msg("You feel more intelligent now.  What a mind!");
                    131:        pstats.s_intel = min(pstats.s_intel + 1, 25);
                    132:     }
                    133:
                    134:     /* Adjust the maximum */
                    135:     if (max_stats.s_intel < pstats.s_intel)
                    136:            max_stats.s_intel = pstats.s_intel;
                    137:
                    138:     /* Now put back the ring changes */
                    139:     if (ring_str)
                    140:        pstats.s_intel += ring_str;
                    141: }
                    142: 
                    143: /*
                    144:  * this routine makes the hero move slower
                    145:  */
                    146: void
                    147: add_slow(void)
                    148: {
                    149:     if (on(player, ISHASTE)) { /* Already sped up */
                    150:        extinguish(nohaste);
                    151:        nohaste();
                    152:     }
                    153:     else {
                    154:        msg("You feel yourself moving %sslower.",
                    155:                on(player, ISSLOW) ? "even " : "");
                    156:        if (on(player, ISSLOW))
                    157:            lengthen(noslow, roll(HASTETIME,HASTETIME));
                    158:        else {
                    159:            turn_on(player, ISSLOW);
                    160:            player.t_turn = TRUE;
                    161:            fuse(noslow, 0, roll(HASTETIME,HASTETIME), AFTER);
                    162:        }
                    163:     }
                    164: }
                    165: 
                    166: /*
                    167:  * Increase player's strength
                    168:  */
                    169:
                    170: void
                    171: add_strength(bool cursed)
                    172: {
                    173:
                    174:     if (cursed) {
                    175:        msg("You feel slightly weaker now.");
                    176:        chg_str(-1);
                    177:     }
                    178:     else {
                    179:        msg("You feel stronger now.  What bulging muscles!");
                    180:        chg_str(1);
                    181:     }
                    182: }
                    183: 
                    184: /*
                    185:  * Increase player's wisdom
                    186:  */
                    187:
                    188: void
                    189: add_wisdom(bool cursed)
                    190: {
                    191:     int ring_str;      /* Value of ring strengths */
                    192:
                    193:     /* Undo any ring changes */
                    194:     ring_str = ring_value(R_ADDWISDOM);
                    195:     pstats.s_wisdom -= ring_str;
                    196:
                    197:     /* Now do the potion */
                    198:     if (cursed) {
                    199:        msg("You feel slightly less wise now.");
                    200:        pstats.s_wisdom--;
                    201:     }
                    202:     else {
                    203:        msg("You feel wiser now.  What a sage!");
                    204:        pstats.s_wisdom = min(pstats.s_wisdom + 1, 25);
                    205:     }
                    206:
                    207:     /* Adjust the maximum */
                    208:     if (max_stats.s_wisdom < pstats.s_wisdom)
                    209:        max_stats.s_wisdom = pstats.s_wisdom;
                    210:
                    211:     /* Now put back the ring changes */
                    212:     if (ring_str)
                    213:        pstats.s_wisdom += ring_str;
                    214: }
                    215:
                    216: 
                    217: /*
                    218:  * Lower a level of experience
                    219:  */
                    220:
                    221: void
                    222: lower_level(short who)
                    223: {
                    224:     int fewer, nsides = 0;
                    225:
                    226:     if (--pstats.s_lvl == 0)
                    227:        death(who);             /* All levels gone */
                    228:     msg("You suddenly feel less skillful.");
                    229:     pstats.s_exp /= 2;
                    230:     switch (player.t_ctype) {
                    231:        case C_FIGHTER: nsides = HIT_FIGHTER;
                    232:        when C_MAGICIAN:nsides = HIT_MAGICIAN;
                    233:        when C_CLERIC:  nsides = HIT_CLERIC;
                    234:        when C_THIEF:   nsides = HIT_THIEF;
                    235:     }
                    236:     fewer = max(1, roll(1,nsides) + const_bonus());
                    237:     pstats.s_hpt -= fewer;
                    238:     max_stats.s_hpt -= fewer;
                    239:     if (pstats.s_hpt < 1)
                    240:        pstats.s_hpt = 1;
                    241:     if (max_stats.s_hpt < 1)
                    242:        death(who);
                    243: }
                    244: 
                    245: void
                    246: quaff(int which, int flag, bool is_potion)
                    247: {
                    248:     register struct object *obj = NULL;
                    249:     register struct linked_list *item, *titem;
                    250:     register struct thing *th;
                    251:     bool cursed, blessed;
                    252:     char buf[LINELEN];
                    253:
                    254:     blessed = FALSE;
                    255:     cursed = FALSE;
                    256:     item = NULL;
                    257:
                    258:     if (which < 0) {   /* figure out which ourselves */
                    259:        item = get_item(pack, "quaff", POTION);
                    260:        /*
                    261:         * Make certain that it is somethings that we want to drink
                    262:         */
                    263:        if (item == NULL)
                    264:            return;
                    265:
                    266:        obj = OBJPTR(item);
                    267:        /* remove it from the pack */
                    268:        inpack--;
                    269:        detach(pack, item);
                    270:
                    271:        /*
                    272:         * Calculate the effect it has on the poor guy.
                    273:         */
                    274:        cursed = (obj->o_flags & ISCURSED) != 0;
                    275:        blessed = (obj->o_flags & ISBLESSED) != 0;
                    276:
                    277:        which = obj->o_which;
                    278:     }
                    279:     else {
                    280:        cursed = flag & ISCURSED;
                    281:        blessed = flag & ISBLESSED;
                    282:     }
                    283:
                    284:     switch(which)
                    285:     {
                    286:        case P_CLEAR:
                    287:            if (cursed) {
                    288:                if (off(player, ISCLEAR))
                    289:                {
                    290:                    msg("Wait, what's going on here. Huh? What? Who?");
                    291:                    if (find_slot(unconfuse))
                    292:                        lengthen(unconfuse, rnd(8)+HUHDURATION);
                    293:                    else
                    294:                        fuse(unconfuse, 0, rnd(8)+HUHDURATION, AFTER);
                    295:                    turn_on(player, ISHUH);
                    296:                }
                    297:                else msg("You feel dizzy for a moment, but it quickly passes.");
                    298:            }
                    299:            else {
                    300:                if (blessed) {  /* Make player immune for the whole game */
                    301:                    extinguish(unclrhead);  /* If we have a fuse, put it out */
                    302:                    msg("A strong blue aura surrounds your head.");
                    303:                }
                    304:                else {  /* Just light a fuse for how long player is safe */
                    305:                    if (off(player, ISCLEAR)) {
                    306:                        fuse(unclrhead, 0, CLRDURATION, AFTER);
                    307:                        msg("A faint blue aura surrounds your head.");
                    308:                    }
                    309:                    else {  /* If we have a fuse lengthen it, else we
                    310:                             * are permanently clear.
                    311:                             */
                    312:                        if (find_slot(unclrhead) == FALSE)
                    313:                            msg("Your blue aura continues to glow strongly.");
                    314:                        else {
                    315:                            lengthen(unclrhead, CLRDURATION);
                    316:                            msg("Your blue aura brightens for a moment.");
                    317:                        }
                    318:                    }
                    319:                }
                    320:                turn_on(player, ISCLEAR);
                    321:                /* If player is confused, unconfuse him */
                    322:                if (on(player, ISHUH)) {
                    323:                    extinguish(unconfuse);
                    324:                    unconfuse();
                    325:                }
                    326:            }
                    327:        when P_HEALING:
                    328:            if (cursed) {
                    329:                if (!save(VS_POISON, &player, 0)) {
                    330:                    msg("You feel very sick now.");
                    331:                    pstats.s_hpt /= 2;
                    332:                    pstats.s_const--;
                    333:                    if (pstats.s_const <= 0 || pstats.s_hpt <= 0)
                    334:                        death(D_POISON);
                    335:                }
                    336:                else msg("You feel momentarily sick.");
                    337:            }
                    338:            else {
                    339:                if (blessed) {
                    340:                    if ((pstats.s_hpt += roll(pstats.s_lvl, 8)) > max_stats.s_hpt)
                    341:                        pstats.s_hpt = ++max_stats.s_hpt;
                    342:                    if (on(player, ISHUH)) {
                    343:                        extinguish(unconfuse);
                    344:                        unconfuse();
                    345:                    }
                    346:                }
                    347:                else {
                    348:                    if ((pstats.s_hpt += roll(pstats.s_lvl, 4)) > max_stats.s_hpt)
                    349:                    pstats.s_hpt = ++max_stats.s_hpt;
                    350:                }
                    351:                msg("You begin to feel %sbetter.",
                    352:                        blessed ? "much " : "");
                    353:                sight();
                    354:                if (is_potion) p_know[P_HEALING] = TRUE;
                    355:            }
                    356:        when P_ABIL:
                    357:            {
                    358:                int ctype;
                    359:
                    360:                /*
                    361:                 * if blessed then fix all attributes
                    362:                 */
                    363:                if (blessed) {
                    364:                    add_intelligence(FALSE);
                    365:                    add_dexterity(FALSE);
                    366:                    add_strength(FALSE);
                    367:                    add_wisdom(FALSE);
                    368:                    add_const(FALSE);
                    369:                }
                    370:                /* probably will be own ability */
                    371:                else {
                    372:                    if (rnd(100) < 70)
                    373:                        ctype = player.t_ctype;
                    374:                    else do {
                    375:                        ctype = rnd(4);
                    376:                        } while (ctype == player.t_ctype);
                    377:
                    378:                    /* Small chance of doing constitution instead */
                    379:                    if (rnd(100) < 10)
                    380:                        add_const(cursed);
                    381:                    else switch (ctype) {
                    382:                        case C_FIGHTER: add_strength(cursed);
                    383:                        when C_MAGICIAN: add_intelligence(cursed);
                    384:                        when C_CLERIC:  add_wisdom(cursed);
                    385:                        when C_THIEF:   add_dexterity(cursed);
                    386:                        otherwise:      msg("You're a strange type!");
                    387:                    }
                    388:                }
                    389:                if (is_potion) p_know[P_ABIL] = TRUE;
                    390:            }
                    391:        when P_MFIND:
                    392:            /*
                    393:             * Potion of monster detection, if there are monters, detect them
                    394:             */
                    395:            if (mlist != NULL)
                    396:            {
                    397:                overlay(mw, cw);
                    398:                draw(cw);
                    399:                msg("You begin to sense the presence of monsters.%s", morestr);
                    400:                draw(msgw);
                    401:                wait_for(cw,' ');
                    402:                msg("");
                    403:                if (is_potion) p_know[P_MFIND] = TRUE;
                    404:            }
                    405:            else
                    406:                msg("You have a strange feeling for a moment, then it passes.");
                    407:        when P_TFIND:
                    408:            /*
                    409:             * Potion of magic detection.  Show the potions and scrolls
                    410:             */
                    411:            if (lvl_obj != NULL)
                    412:            {
                    413:                register struct linked_list *mobj;
                    414:                register struct object *tp;
                    415:                bool show;
                    416:
                    417:                show = FALSE;
                    418:                wclear(hw);
                    419:                for (mobj = lvl_obj; mobj != NULL; mobj = next(mobj)) {
                    420:                    tp = OBJPTR(mobj);
                    421:                    if (is_magic(tp)) {
                    422:                        char mag_type=MAGIC;
                    423:
                    424:                        /* Mark cursed items or bad weapons */
                    425:                        if ((tp->o_flags & ISCURSED) ||
                    426:                            (tp->o_type == WEAPON &&
                    427:                             (tp->o_hplus < 0 || tp->o_dplus < 0)))
                    428:                                mag_type = CMAGIC;
                    429:                        else if ((tp->o_flags & ISBLESSED) ||
                    430:                                 (tp->o_type == WEAPON &&
                    431:                                  (tp->o_hplus > 0 || tp->o_dplus > 0)))
                    432:                                        mag_type = BMAGIC;
                    433:                        show = TRUE;
                    434:                        mvwaddch(hw, tp->o_pos.y, tp->o_pos.x, mag_type);
                    435:                    }
                    436:                    if (is_potion) p_know[P_TFIND] = TRUE;
                    437:                }
                    438:                for (titem = mlist; titem != NULL; titem = next(titem)) {
                    439:                    register struct linked_list *pitem;
                    440:
                    441:                    th = THINGPTR(titem);
                    442:                    for(pitem = th->t_pack; pitem != NULL; pitem = next(pitem)){
                    443:                        tp = OBJPTR(pitem);
                    444:                        if (is_magic(tp)) {
                    445:                            char mag_type=MAGIC;
                    446:
                    447:                            /* Mark cursed items or bad weapons */
                    448:                            if ((tp->o_flags & ISCURSED) ||
                    449:                                (tp->o_type == WEAPON &&
                    450:                                 (tp->o_hplus < 0 || tp->o_dplus < 0)))
                    451:                                    mag_type = CMAGIC;
                    452:                            else if ((tp->o_flags & ISBLESSED) ||
                    453:                                     (tp->o_type == WEAPON &&
                    454:                                      (tp->o_hplus > 0 || tp->o_dplus > 0)))
                    455:                                            mag_type = BMAGIC;
                    456:                            show = TRUE;
                    457:                            mvwaddch(hw, th->t_pos.y, th->t_pos.x, mag_type);
                    458:                        }
                    459:                        if (is_potion) p_know[P_TFIND] = TRUE;
                    460:                    }
                    461:                }
                    462:                if (show) {
                    463:                    overlay(hw,cw);
                    464:                    draw(cw);
                    465:                    msg("You sense the presence of magic on this level.%s",
                    466:                        morestr);
                    467:                    draw(msgw);
                    468:                    wait_for(cw,' ');
                    469:                    msg("");
                    470:                    break;
                    471:                }
                    472:            }
                    473:            msg("You have a strange feeling for a moment, then it passes.");
                    474:        when P_SEEINVIS:
                    475:            if (cursed) {
                    476:                if (!find_slot(sight))
                    477:                {
                    478:                    msg("A cloak of darkness falls around you.");
                    479:                    turn_on(player, ISBLIND);
                    480:                    fuse(sight, 0, SEEDURATION, AFTER);
                    481:                    light(&hero);
                    482:                }
                    483:                else
                    484:                    lengthen(sight, SEEDURATION);
                    485:            }
                    486:            else {
                    487:                if (off(player, CANSEE)) {
                    488:                    turn_on(player, CANSEE);
                    489:                    msg("Your eyes begin to tingle.");
                    490:                    fuse(unsee, 0, blessed ? SEEDURATION*3 :SEEDURATION, AFTER);
                    491:                    light(&hero);
                    492:                }
                    493:                else if (find_slot(unsee) != FALSE)
                    494:                    lengthen(unsee, blessed ? SEEDURATION*3 : SEEDURATION);
                    495:                sight();
                    496:            }
                    497:        when P_PHASE:
                    498:            if (cursed) {
                    499:                msg("You can't move.");
                    500:                no_command = FREEZETIME;
                    501:            }
                    502:            else {
                    503:                int duration;
                    504:
                    505:                if (blessed) duration = 3;
                    506:                else duration = 1;
                    507:
                    508:                if (on(player, CANINWALL))
                    509:                    lengthen(unphase, duration*PHASEDURATION);
                    510:                else {
                    511:                    fuse(unphase, 0, duration*PHASEDURATION, AFTER);
                    512:                    turn_on(player, CANINWALL);
                    513:                }
                    514:                msg("You feel %slight-headed!",
                    515:                    blessed ? "very " : "");
                    516:            }
                    517:        when P_FLY: {
                    518:            int duration;
                    519:            bool say_message;
                    520:
                    521:            say_message = TRUE;
                    522:
                    523:            if (blessed) duration = 3;
                    524:            else duration = 1;
                    525:
                    526:            if (on(player, ISFLY)) {
                    527:                if (find_slot(land))
                    528:                    lengthen(land, duration*FLYTIME);
                    529:                else {
                    530:                    msg("Nothing happens.");    /* Flying by cloak */
                    531:                    say_message = FALSE;
                    532:                }
                    533:            }
                    534:            else {
                    535:                fuse(land, 0, duration*FLYTIME, AFTER);
                    536:                turn_on(player, ISFLY);
                    537:            }
                    538:            if (say_message)
                    539:                msg("You feel %slighter than air!", blessed ? "much " : "");
                    540:        }
                    541:        when P_RAISE:
                    542:            if (cursed) lower_level(D_POTION);
                    543:            else {
                    544:                msg("You suddenly feel %smore skillful",
                    545:                        blessed ? "much " : "");
                    546:                p_know[P_RAISE] = TRUE;
                    547:                raise_level(TRUE);
                    548:                if (blessed) raise_level(TRUE);
                    549:            }
                    550:        when P_HASTE:
                    551:            if (cursed) {       /* Slow player down */
                    552:                add_slow();
                    553:            }
                    554:            else {
                    555:                if (off(player, ISSLOW))
                    556:                    msg("You feel yourself moving %sfaster.",
                    557:                        blessed ? "much " : "");
                    558:                add_haste(blessed);
                    559:                if (is_potion) p_know[P_HASTE] = TRUE;
                    560:            }
                    561:        when P_RESTORE: {
                    562:            register int i;
                    563:
                    564:            msg("Hey, this tastes great.  It make you feel warm all over.");
                    565:            if (lost_str) {
                    566:                extinguish(res_strength);
                    567:                lost_str = 0;
                    568:            }
                    569:            for (i=0; i<lost_dext; i++)
                    570:                extinguish(un_itch);
                    571:            lost_dext = 0;
                    572:            res_strength();
                    573:            res_wisdom();
                    574:            res_dexterity(0);
                    575:            res_intelligence();
                    576:            pstats.s_const = max_stats.s_const;
                    577:        }
                    578:        when P_INVIS:
                    579:            if (off(player, ISINVIS)) {
                    580:                turn_on(player, ISINVIS);
                    581:                msg("You have a tingling feeling all over your body");
                    582:                fuse(appear, 0, blessed ? GONETIME*3 : GONETIME, AFTER);
                    583:                PLAYER = IPLAYER;
                    584:                light(&hero);
                    585:            }
                    586:            else {
                    587:                if (find_slot(appear)) {
                    588:                    msg("Your tingling feeling surges.");
                    589:                    lengthen(appear, blessed ? GONETIME*3 : GONETIME);
                    590:                }
                    591:                else msg("Nothing happens.");   /* Using cloak */
                    592:            }
                    593:
                    594:        otherwise:
                    595:            msg("What an odd tasting potion!");
                    596:            return;
                    597:     }
                    598:     status(FALSE);
                    599:     if (is_potion && p_know[which] && p_guess[which])
                    600:     {
                    601:        free(p_guess[which]);
                    602:        p_guess[which] = NULL;
                    603:     }
                    604:     else if (is_potion &&
                    605:             !p_know[which] &&
                    606:             askme &&
                    607:             (obj->o_flags & ISKNOW) == 0 &&
                    608:             (obj->o_flags & ISPOST) == 0 &&
                    609:             p_guess[which] == NULL)
                    610:     {
                    611:        msg(terse ? "Call it: " : "What do you want to call it? ");
                    612:        if (get_str(buf, msgw) == NORM)
                    613:        {
                    614:            p_guess[which] = new((unsigned int) strlen(buf) + 1);
                    615:            strcpy(p_guess[which], buf);
                    616:        }
                    617:     }
                    618:     if (item != NULL) o_discard(item);
                    619:     updpack(TRUE);
                    620: }
                    621:
                    622: 
                    623: /*
                    624:  * res_dexterity:
                    625:  *     Restore player's dexterity
                    626:  *     if called with zero the restore fully
                    627:  */
                    628:
                    629: void
                    630: res_dexterity(int howmuch)
                    631: {
                    632:     short save_max;
                    633:     int ring_str;
                    634:
                    635:     /* Discount the ring value */
                    636:     ring_str = ring_value(R_ADDHIT);
                    637:     pstats.s_dext -= ring_str;
                    638:
                    639:     if (pstats.s_dext < max_stats.s_dext ) {
                    640:        if (howmuch == 0)
                    641:            pstats.s_dext = max_stats.s_dext;
                    642:        else
                    643:            pstats.s_dext = min(pstats.s_dext+howmuch, max_stats.s_dext);
                    644:     }
                    645:
                    646:     /* Redo the rings */
                    647:     if (ring_str) {
                    648:        save_max = max_stats.s_dext;
                    649:        pstats.s_dext += ring_str;
                    650:        max_stats.s_dext = save_max;
                    651:     }
                    652: }
                    653:
                    654: 
                    655: /*
                    656:  * res_intelligence:
                    657:  *     Restore player's intelligence
                    658:  */
                    659:
                    660: void
                    661: res_intelligence(void)
                    662: {
                    663:     short save_max;
                    664:     int ring_str;
                    665:
                    666:     /* Discount the ring value */
                    667:     ring_str = ring_value(R_ADDINTEL);
                    668:     pstats.s_intel -= ring_str;
                    669:
                    670:     if (pstats.s_intel < max_stats.s_intel ) pstats.s_intel = max_stats.s_intel;
                    671:
                    672:     /* Redo the rings */
                    673:     if (ring_str) {
                    674:        save_max = max_stats.s_intel;
                    675:        pstats.s_intel += ring_str;
                    676:        max_stats.s_intel = save_max;
                    677:     }
                    678: }
                    679: 
                    680: /*
                    681:  * res_wisdom:
                    682:  *     Restore player's wisdom
                    683:  */
                    684:
                    685: void
                    686: res_wisdom(void)
                    687: {
                    688:     short save_max;
                    689:     int ring_str;
                    690:
                    691:     /* Discount the ring value */
                    692:     ring_str = ring_value(R_ADDWISDOM);
                    693:     pstats.s_wisdom -= ring_str;
                    694:
                    695:     if (pstats.s_wisdom < max_stats.s_wisdom )
                    696:        pstats.s_wisdom = max_stats.s_wisdom;
                    697:
                    698:     /* Redo the rings */
                    699:     if (ring_str) {
                    700:        save_max = max_stats.s_wisdom;
                    701:        pstats.s_wisdom += ring_str;
                    702:        max_stats.s_wisdom = save_max;
                    703:     }
                    704: }

CVSweb