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

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

1.1     ! rubenllo    1: /*
        !             2:  * rings.c  -  routines dealing specifically with rings
        !             3:  * Advanced Rogue
        !             4:  * Copyright (C) 1984, 1985, 1986 Michael Morgan, Ken Dalka and AT&T
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Based on "Rogue: Exploring the Dungeons of Doom"
        !             8:  * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
        !             9:  * All rights reserved.
        !            10:  *
        !            11:  * See the file LICENSE.TXT for full copyright and licensing information.
        !            12:  */
        !            13:
        !            14: #include <stdlib.h>
        !            15: #include <string.h>
        !            16: #include "curses.h"
        !            17: #include "rogue.h"
        !            18:
        !            19: /*
        !            20:  * routines dealing specifically with rings
        !            21:  */
        !            22:
        !            23:
        !            24: /*
        !            25:  * how much food does this ring use up?
        !            26:  */
        !            27: int
        !            28: ring_eat(int hand)
        !            29: {
        !            30:     if (cur_ring[hand] == NULL)
        !            31:        return 0;
        !            32:     switch (cur_ring[hand]->o_which) {
        !            33:        case R_VAMPREGEN:
        !            34:            return 3;
        !            35:        case R_REGEN:
        !            36:            return 2;
        !            37:        case R_HEALTH:
        !            38:        case R_SUSABILITY:
        !            39:            return 1;
        !            40:        case R_SEARCH:
        !            41:        case R_SEEINVIS:
        !            42:            return (rnd(100) < 33);
        !            43:        case R_DIGEST:
        !            44:            if (cur_ring[hand]->o_ac >= 0)
        !            45:                return (-(cur_ring[hand]->o_ac)-1);
        !            46:            else
        !            47:                return (-(cur_ring[hand]->o_ac));
        !            48:     }
        !            49:     return 0;
        !            50: }
        !            51: 
        !            52: void
        !            53: ring_on(struct linked_list *item)
        !            54: {
        !            55:     register struct object *obj;
        !            56:     register int save_max;
        !            57:
        !            58:     obj = OBJPTR(item);
        !            59:
        !            60:     /*
        !            61:      * Calculate the effect it has on the poor guy.
        !            62:      */
        !            63:     switch (obj->o_which)
        !            64:     {
        !            65:        case R_ADDSTR:
        !            66:            save_max = max_stats.s_str;
        !            67:            chg_str(obj->o_ac);
        !            68:            max_stats.s_str = save_max;
        !            69:        when R_ADDHIT:
        !            70:            pstats.s_dext += obj->o_ac;
        !            71:        when R_ADDINTEL:
        !            72:            pstats.s_intel += obj->o_ac;
        !            73:        when R_ADDWISDOM:
        !            74:            pstats.s_wisdom += obj->o_ac;
        !            75:        when R_SEEINVIS:
        !            76:            turn_on(player, CANSEE);
        !            77:            msg("Your eyes begin to tingle");
        !            78:            light(&hero);
        !            79:            mvwaddch(cw, hero.y, hero.x, PLAYER);
        !            80:        when R_AGGR:
        !            81:            aggravate(TRUE, TRUE);
        !            82:        when R_WARMTH:
        !            83:            turn_on(player, NOCOLD);
        !            84:        when R_FIRE:
        !            85:            turn_on(player, NOFIRE);
        !            86:        when R_LIGHT: {
        !            87:                if(roomin(&hero) != NULL) {
        !            88:                        light(&hero);
        !            89:                        mvwaddch(cw, hero.y, hero.x, PLAYER);
        !            90:                }
        !            91:            }
        !            92:        when R_SEARCH:
        !            93:                start_daemon(ring_search, NULL, AFTER);
        !            94:        when R_TELEPORT:
        !            95:                start_daemon(ring_teleport, NULL, AFTER);
        !            96:     }
        !            97:     status(FALSE);
        !            98:     if (r_know[obj->o_which] && r_guess[obj->o_which])
        !            99:     {
        !           100:        free(r_guess[obj->o_which]);
        !           101:        r_guess[obj->o_which] = NULL;
        !           102:     }
        !           103:     else if (!r_know[obj->o_which] &&
        !           104:             askme &&
        !           105:             (obj->o_flags & ISKNOW) == 0 &&
        !           106:             r_guess[obj->o_which] == NULL) {
        !           107:        nameitem(item, FALSE);
        !           108:     }
        !           109: }
        !           110: 
        !           111: /*
        !           112:  * print ring bonuses
        !           113:  */
        !           114: char *
        !           115: ring_num(struct object *obj)
        !           116: {
        !           117:     static char buf[5];
        !           118:
        !           119:     if (!(obj->o_flags & ISKNOW))
        !           120:        return "";
        !           121:     switch (obj->o_which)
        !           122:     {
        !           123:        case R_PROTECT:
        !           124:        case R_ADDSTR:
        !           125:        case R_ADDDAM:
        !           126:        case R_ADDHIT:
        !           127:        case R_ADDINTEL:
        !           128:        case R_ADDWISDOM:
        !           129:        case R_DIGEST:
        !           130:            buf[0] = ' ';
        !           131:            strcpy(&buf[1], num(obj->o_ac, 0));
        !           132:        when R_AGGR:
        !           133:        case R_LIGHT:
        !           134:        case R_CARRY:
        !           135:        case R_TELEPORT:
        !           136:            if (obj->o_flags & ISCURSED)
        !           137:                return " cursed";
        !           138:            else
        !           139:                return "";
        !           140:        otherwise:
        !           141:            return "";
        !           142:     }
        !           143:     return buf;
        !           144: }
        !           145: 
        !           146: /*
        !           147:  * Return the effect of the specified ring
        !           148:  */
        !           149: int
        !           150: ring_value(int type)
        !           151: {
        !           152:     int result = 0;
        !           153:
        !           154:     if (ISRING(LEFT_1, type))  result += cur_ring[LEFT_1]->o_ac;
        !           155:     if (ISRING(LEFT_2, type)) result += cur_ring[LEFT_2]->o_ac;
        !           156:     if (ISRING(LEFT_3, type)) result += cur_ring[LEFT_3]->o_ac;
        !           157:     if (ISRING(LEFT_4, type)) result += cur_ring[LEFT_4]->o_ac;
        !           158:     if (ISRING(RIGHT_1, type)) result += cur_ring[RIGHT_1]->o_ac;
        !           159:     if (ISRING(RIGHT_2, type))  result += cur_ring[RIGHT_2]->o_ac;
        !           160:     if (ISRING(RIGHT_3, type)) result += cur_ring[RIGHT_3]->o_ac;
        !           161:     if (ISRING(RIGHT_4, type))  result += cur_ring[RIGHT_4]->o_ac;
        !           162:     return(result);
        !           163: }

CVSweb