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

Annotation of early-roguelike/rogue5/rings.c, Revision 1.1

1.1     ! rubenllo    1: /*
        !             2:  * Routines dealing specifically with rings
        !             3:  *
        !             4:  * @(#)rings.c 4.19 (Berkeley) 05/29/83
        !             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:  * ring_on:
        !            18:  *     Put a ring on a hand
        !            19:  */
        !            20:
        !            21: void
        !            22: ring_on(void)
        !            23: {
        !            24:     THING *obj;
        !            25:     int ring;
        !            26:
        !            27:     obj = get_item("put on", RING);
        !            28:     /*
        !            29:      * Make certain that it is somethings that we want to wear
        !            30:      */
        !            31:     if (obj == NULL)
        !            32:        return;
        !            33:     if (obj->o_type != RING)
        !            34:     {
        !            35:        if (!terse)
        !            36:            msg("it would be difficult to wrap that around a finger");
        !            37:        else
        !            38:            msg("not a ring");
        !            39:        return;
        !            40:     }
        !            41:
        !            42:     /*
        !            43:      * find out which hand to put it on
        !            44:      */
        !            45:     if (is_current(obj))
        !            46:        return;
        !            47:
        !            48:     if (cur_ring[LEFT] == NULL && cur_ring[RIGHT] == NULL)
        !            49:     {
        !            50:        if ((ring = gethand()) < 0)
        !            51:            return;
        !            52:     }
        !            53:     else if (cur_ring[LEFT] == NULL)
        !            54:        ring = LEFT;
        !            55:     else if (cur_ring[RIGHT] == NULL)
        !            56:        ring = RIGHT;
        !            57:     else
        !            58:     {
        !            59:        if (!terse)
        !            60:            msg("you already have a ring on each hand");
        !            61:        else
        !            62:            msg("wearing two");
        !            63:        return;
        !            64:     }
        !            65:     cur_ring[ring] = obj;
        !            66:
        !            67:     /*
        !            68:      * Calculate the effect it has on the poor guy.
        !            69:      */
        !            70:     switch (obj->o_which)
        !            71:     {
        !            72:        case R_ADDSTR:
        !            73:            chg_str(obj->o_arm);
        !            74:            break;
        !            75:        case R_SEEINVIS:
        !            76:            invis_on();
        !            77:            break;
        !            78:        case R_AGGR:
        !            79:            aggravate();
        !            80:            break;
        !            81:     }
        !            82:
        !            83:     if (!terse)
        !            84:        addmsg("you are now wearing ");
        !            85:     msg("%s (%c)", inv_name(obj, TRUE), obj->o_packch);
        !            86: }
        !            87:
        !            88: /*
        !            89:  * ring_off:
        !            90:  *     take off a ring
        !            91:  */
        !            92:
        !            93: void
        !            94: ring_off(void)
        !            95: {
        !            96:     int ring;
        !            97:     THING *obj;
        !            98:
        !            99:     if (cur_ring[LEFT] == NULL && cur_ring[RIGHT] == NULL)
        !           100:     {
        !           101:        if (terse)
        !           102:            msg("no rings");
        !           103:        else
        !           104:            msg("you aren't wearing any rings");
        !           105:        return;
        !           106:     }
        !           107:     else if (cur_ring[LEFT] == NULL)
        !           108:        ring = RIGHT;
        !           109:     else if (cur_ring[RIGHT] == NULL)
        !           110:        ring = LEFT;
        !           111:     else
        !           112:        if ((ring = gethand()) < 0)
        !           113:            return;
        !           114:     mpos = 0;
        !           115:     obj = cur_ring[ring];
        !           116:     if (obj == NULL)
        !           117:     {
        !           118:        msg("not wearing such a ring");
        !           119:        return;
        !           120:     }
        !           121:     if (dropcheck(obj))
        !           122:        msg("was wearing %s(%c)", inv_name(obj, TRUE), obj->o_packch);
        !           123: }
        !           124:
        !           125: /*
        !           126:  * gethand:
        !           127:  *     Which hand is the hero interested in?
        !           128:  */
        !           129: int
        !           130: gethand(void)
        !           131: {
        !           132:     int c;
        !           133:
        !           134:     for (;;)
        !           135:     {
        !           136:        if (terse)
        !           137:            msg("left or right ring? ");
        !           138:        else
        !           139:            msg("left hand or right hand? ");
        !           140:        if ((c = readchar()) == ESCAPE)
        !           141:            return -1;
        !           142:        mpos = 0;
        !           143:        if (c == 'l' || c == 'L')
        !           144:            return LEFT;
        !           145:        else if (c == 'r' || c == 'R')
        !           146:            return RIGHT;
        !           147:        if (terse)
        !           148:            msg("L or R");
        !           149:        else
        !           150:            msg("please type L or R");
        !           151:     }
        !           152: }
        !           153:
        !           154: /*
        !           155:  * ring_eat:
        !           156:  *     How much food does this ring use up?
        !           157:  */
        !           158: int
        !           159: ring_eat(int hand)
        !           160: {
        !           161:     THING *ring;
        !           162:     int eat;
        !           163:     int uses[] = {
        !           164:         1,     /* R_PROTECT */          1,     /* R_ADDSTR */
        !           165:         1,     /* R_SUSTSTR */         -3,     /* R_SEARCH */
        !           166:        -5,     /* R_SEEINVIS */         0,     /* R_NOP */
        !           167:         0,     /* R_AGGR */            -3,     /* R_ADDHIT */
        !           168:        -3,     /* R_ADDDAM */           2,     /* R_REGEN */
        !           169:        -2,     /* R_DIGEST */           0,     /* R_TELEPORT */
        !           170:         1,     /* R_STEALTH */          1      /* R_SUSTARM */
        !           171:     };
        !           172:
        !           173:     if ((ring = cur_ring[hand]) == NULL)
        !           174:        return 0;
        !           175:     if ((eat = uses[ring->o_which]) < 0)
        !           176:        eat = (rnd(-eat) == 0);
        !           177:     if (ring->o_which == R_DIGEST)
        !           178:        eat = -eat;
        !           179:     return eat;
        !           180: }
        !           181:
        !           182: /*
        !           183:  * ring_num:
        !           184:  *     Print ring bonuses
        !           185:  */
        !           186: const char *
        !           187: ring_num(const THING *obj)
        !           188: {
        !           189:     static char buf[10];
        !           190:
        !           191:     if (!(obj->o_flags & ISKNOW))
        !           192:        return "";
        !           193:     switch (obj->o_which)
        !           194:     {
        !           195:        case R_PROTECT:
        !           196:        case R_ADDSTR:
        !           197:        case R_ADDDAM:
        !           198:        case R_ADDHIT:
        !           199:            sprintf(buf, " [%s]", num(obj->o_arm, 0, RING));
        !           200:        otherwise:
        !           201:            return "";
        !           202:     }
        !           203:     return buf;
        !           204: }

CVSweb