# 2.11BSD#431 - /usr/src/games/rogue/ring.c

##### Functions

    do_put_on         X
    gr_ring           X
    inv_rings         X
    put_on_ring       X
    remove_ring       X
    ring_stats        X
    un_put_on         X

##### Variables

    add_strength      X
    auto_search       X
    e_rings           X
    left_or_right     X
    no_ring           X
    r_rings           X
    regeneration      X
    ring_exp          X
    stealthy          X

       1: /*
       2:  * ring.c
       3:  *
       4:  * This source herein may be modified and/or distributed by anybody who
       5:  * so desires, with the following restrictions:
       6:  *    1.)  No portion of this notice shall be removed.
       7:  *    2.)  Credit shall not be taken for the creation of this source.
       8:  *    3.)  This code is not to be traded, sold, or used for personal
       9:  *         gain or profit.
      10:  *
      11:  */
      12:
      13: #ifndef lint
      14: static char sccsid[] = "@(#)ring.c	5.1 (Berkeley) 11/25/87";
      15: #endif /* not lint */
      16:
      17: #include "rogue.h"
      18:
      19: char *left_or_right = "left or right hand?";
      20: char *no_ring = "there's no ring on that hand";
      21: short stealthy;
      22: short r_rings;
      23: short add_strength;
      24: short e_rings;
      25: short regeneration;
      26: short ring_exp;
      27: short auto_search;
      28: boolean r_teleport;
      29: boolean r_see_invisible;
      30: boolean sustain_strength;
      31: boolean maintain_armor;
      32:
      33: extern char *curse_message;
      34: extern boolean wizard;
      35:
      36: put_on_ring()
      37: {
      38:     short ch;
      39:     char desc[DCOLS];
      40:     object *ring;
      41:
      42:     if (r_rings == 2) {
      43:         message("wearing two rings already", 0);
      44:         return;
      45:     }
      46:     if ((ch = pack_letter("put on what?", RING)) == CANCEL) {
      47:         return;
      48:     }
      49:     if (!(ring = get_letter_object(ch))) {
      50:         message("no such item.", 0);
      51:         return;
      52:     }
      53:     if (!(ring->what_is & RING)) {
      54:         message("that's not a ring", 0);
      55:         return;
      56:     }
      57:     if (ring->in_use_flags & (ON_LEFT_HAND | ON_RIGHT_HAND)) {
      58:         message("that ring is already being worn", 0);
      59:         return;
      60:     }
      61:     if (r_rings == 1) {
      62:         ch = (rogue.left_ring ? 'r' : 'l');
      63:     } else {
      64:         message(left_or_right, 0);
      65:         do {
      66:             ch = rgetchar();
      67:         } while ((ch != CANCEL) && (ch != 'l') && (ch != 'r') && (ch != '\n') &&
      68:                 (ch != '\r'));
      69:     }
      70:     if ((ch != 'l') && (ch != 'r')) {
      71:         check_message();
      72:         return;
      73:     }
      74:     if (((ch == 'l') && rogue.left_ring)||((ch == 'r') && rogue.right_ring)) {
      75:         check_message();
      76:         message("there's already a ring on that hand", 0);
      77:         return;
      78:     }
      79:     if (ch == 'l') {
      80:         do_put_on(ring, 1);
      81:     } else {
      82:         do_put_on(ring, 0);
      83:     }
      84:     ring_stats(1);
      85:     check_message();
      86:     get_desc(ring, desc);
      87:     message(desc, 0);
      88:     (void) reg_move();
      89: }
      90:
      91: /*
      92:  * Do not call ring_stats() from within do_put_on().  It will cause
      93:  * serious problems when do_put_on() is called from read_pack() in restore().
      94:  */
      95:
      96: do_put_on(ring, on_left)
      97: object *ring;
      98: boolean on_left;
      99: {
     100:     if (on_left) {
     101:         ring->in_use_flags |= ON_LEFT_HAND;
     102:         rogue.left_ring = ring;
     103:     } else {
     104:         ring->in_use_flags |= ON_RIGHT_HAND;
     105:         rogue.right_ring = ring;
     106:     }
     107: }
     108:
     109: remove_ring()
     110: {
     111:     boolean left = 0, right = 0;
     112:     short ch;
     113:     char buf[DCOLS];
     114:     object *ring;
     115:
     116:     if (r_rings == 0) {
     117:         inv_rings();
     118:     } else if (rogue.left_ring && !rogue.right_ring) {
     119:         left = 1;
     120:     } else if (!rogue.left_ring && rogue.right_ring) {
     121:         right = 1;
     122:     } else {
     123:         message(left_or_right, 0);
     124:         do {
     125:             ch = rgetchar();
     126:         } while ((ch != CANCEL) && (ch != 'l') && (ch != 'r') &&
     127:             (ch != '\n') && (ch != '\r'));
     128:         left = (ch == 'l');
     129:         right = (ch == 'r');
     130:         check_message();
     131:     }
     132:     if (left || right) {
     133:         if (left) {
     134:             if (rogue.left_ring) {
     135:                 ring = rogue.left_ring;
     136:             } else {
     137:                 message(no_ring, 0);
     138:             }
     139:         } else {
     140:             if (rogue.right_ring) {
     141:                 ring = rogue.right_ring;
     142:             } else {
     143:                 message(no_ring, 0);
     144:             }
     145:         }
     146:         if (ring->is_cursed) {
     147:             message(curse_message, 0);
     148:         } else {
     149:             un_put_on(ring);
     150:             (void) strcpy(buf, "removed ");
     151:             get_desc(ring, buf + 8);
     152:             message(buf, 0);
     153:             (void) reg_move();
     154:         }
     155:     }
     156: }
     157:
     158: un_put_on(ring)
     159: object *ring;
     160: {
     161:     if (ring && (ring->in_use_flags & ON_LEFT_HAND)) {
     162:         ring->in_use_flags &= (~ON_LEFT_HAND);
     163:         rogue.left_ring = 0;
     164:     } else if (ring && (ring->in_use_flags & ON_RIGHT_HAND)) {
     165:         ring->in_use_flags &= (~ON_RIGHT_HAND);
     166:         rogue.right_ring = 0;
     167:     }
     168:     ring_stats(1);
     169: }
     170:
     171: gr_ring(ring, assign_wk)
     172: object *ring;
     173: boolean assign_wk;
     174: {
     175:     ring->what_is = RING;
     176:     if (assign_wk) {
     177:         ring->which_kind = get_rand(0, (RINGS - 1));
     178:     }
     179:     ring->class = 0;
     180:
     181:     switch(ring->which_kind) {
     182:     /*
     183: 	case STEALTH:
     184: 		break;
     185: 	case SLOW_DIGEST:
     186: 		break;
     187: 	case REGENERATION:
     188: 		break;
     189: 	case R_SEE_INVISIBLE:
     190: 		break;
     191: 	case SUSTAIN_STRENGTH:
     192: 		break;
     193: 	case R_MAINTAIN_ARMOR:
     194: 		break;
     195: 	case SEARCHING:
     196: 		break;
     197: 	*/
     198:     case R_TELEPORT:
     199:         ring->is_cursed = 1;
     200:         break;
     201:     case ADD_STRENGTH:
     202:     case DEXTERITY:
     203:         while ((ring->class = (get_rand(0, 4) - 2)) == 0) ;
     204:         ring->is_cursed = (ring->class < 0);
     205:         break;
     206:     case ADORNMENT:
     207:         ring->is_cursed = coin_toss();
     208:         break;
     209:     }
     210: }
     211:
     212: inv_rings()
     213: {
     214:     char buf[DCOLS];
     215:
     216:     if (r_rings == 0) {
     217:         message("not wearing any rings", 0);
     218:     } else {
     219:         if (rogue.left_ring) {
     220:             get_desc(rogue.left_ring, buf);
     221:             message(buf, 0);
     222:         }
     223:         if (rogue.right_ring) {
     224:             get_desc(rogue.right_ring, buf);
     225:             message(buf, 0);
     226:         }
     227:     }
     228:     if (wizard) {
     229:         sprintf(buf, "ste %d, r_r %d, e_r %d, r_t %d, s_s %d, a_s %d, reg %d, r_e %d, s_i %d, m_a %d, aus %d",
     230:             stealthy, r_rings, e_rings, r_teleport, sustain_strength,
     231:             add_strength, regeneration, ring_exp, r_see_invisible,
     232:             maintain_armor, auto_search);
     233:         message(buf, 0);
     234:     }
     235: }
     236:
     237: ring_stats(pr)
     238: boolean pr;
     239: {
     240:     short i;
     241:     object *ring;
     242:
     243:     stealthy = 0;
     244:     r_rings = 0;
     245:     e_rings = 0;
     246:     r_teleport = 0;
     247:     sustain_strength = 0;
     248:     add_strength = 0;
     249:     regeneration = 0;
     250:     ring_exp = 0;
     251:     r_see_invisible = 0;
     252:     maintain_armor = 0;
     253:     auto_search = 0;
     254:
     255:     for (i = 0; i < 2; i++) {
     256:         if (!(ring = ((i == 0) ? rogue.left_ring : rogue.right_ring))) {
     257:             continue;
     258:         }
     259:         r_rings++;
     260:         e_rings++;
     261:         switch(ring->which_kind) {
     262:         case STEALTH:
     263:             stealthy++;
     264:             break;
     265:         case R_TELEPORT:
     266:             r_teleport = 1;
     267:             break;
     268:         case REGENERATION:
     269:             regeneration++;
     270:             break;
     271:         case SLOW_DIGEST:
     272:             e_rings -= 2;
     273:             break;
     274:         case ADD_STRENGTH:
     275:             add_strength += ring->class;
     276:             break;
     277:         case SUSTAIN_STRENGTH:
     278:             sustain_strength = 1;
     279:             break;
     280:         case DEXTERITY:
     281:             ring_exp += ring->class;
     282:             break;
     283:         case ADORNMENT:
     284:             break;
     285:         case R_SEE_INVISIBLE:
     286:             r_see_invisible = 1;
     287:             break;
     288:         case MAINTAIN_ARMOR:
     289:             maintain_armor = 1;
     290:             break;
     291:         case SEARCHING:
     292:             auto_search += 2;
     293:             break;
     294:         }
     295:     }
     296:     if (pr) {
     297:         print_stats(STAT_STRENGTH);
     298:         relight();
     299:     }
     300: }

#### Defined functions

do_put_on defined in line 96; used 3 times

- in line 80-82(2)
- in /usr/src/games/rogue/save.c line 242

gr_ring defined in line 171; used 2 times

- in /usr/src/games/rogue/object.c line 338, 733

inv_rings defined in line 212; used 2 times

- in line 117
- in /usr/src/games/rogue/play.c line 142

put_on_ring defined in line 36; used 1 times

- in /usr/src/games/rogue/play.c line 112

remove_ring defined in line 109; used 1 times

- in /usr/src/games/rogue/play.c line 115

ring_stats defined in line 237; used 4 times

- in line 84, 168
- in /usr/src/games/rogue/init.c line 86
- in /usr/src/games/rogue/save.c line 204

un_put_on defined in line 158; used 6 times

- in line 149
- in /usr/src/games/rogue/pack.c line 151
- in /usr/src/games/rogue/score.c line 98-99(2)
- in /usr/src/games/rogue/throw.c line 64
- in /usr/src/games/rogue/use.c line 276

#### Defined variables

add_strength defined in line 23; used 5 times

- in line 231, 248, 275
- in /usr/src/games/rogue/hit.c line 226
- in /usr/src/games/rogue/message.c line 233

auto_search defined in line 27; used 6 times

- in line 232, 253, 292
- in /usr/src/games/rogue/move.c line 456-457(3)

e_rings defined in line 24; used 5 times

- in line 230, 245, 260, 272
- in /usr/src/games/rogue/move.c line 381

left_or_right defined in line 19; used 2 times

- in line 64, 123

no_ring defined in line 20; used 2 times

- in line 137, 143

r_rings defined in line 22; used 10 times

- in line 42, 61, 116, 216, 230, 244, 259
- in /usr/src/games/rogue/hit.c line 41, 396, 407

regeneration defined in line 25; used 4 times

- in line 231, 249, 269
- in /usr/src/games/rogue/move.c line 568

ring_exp defined in line 26; used 11 times

- in line 231, 250, 281
- in /usr/src/games/rogue/hit.c line 41, 396, 407
- in /usr/src/games/rogue/spec_hit.c line 88, 362-363(2)
- in /usr/src/games/rogue/trap.c line 67, 225

sccsid defined in line 14; never used
stealthy defined in line 21; used 7 times

- in line 230, 243, 263
- in /usr/src/games/rogue/monster.c line 270-271(2), 513-514(2)

Last modified: 1987-11-26 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1503 |