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

Annotation of early-roguelike/xrogue/rings.c, Revision 1.1.1.1

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

CVSweb