|
|
1.1 ! root 1: #include <curses.h> ! 2: #include "rogue.h" ! 3: ! 4: /* ! 5: * routines dealing specifically with rings ! 6: * ! 7: * @(#)rings.c 3.17 (Berkeley) 6/15/81 ! 8: */ ! 9: ! 10: char *malloc(); ! 11: ! 12: ring_on() ! 13: { ! 14: register struct object *obj; ! 15: register struct linked_list *item; ! 16: register int ring; ! 17: str_t save_max; ! 18: char buf[80]; ! 19: ! 20: item = get_item("put on", RING); ! 21: /* ! 22: * Make certain that it is somethings that we want to wear ! 23: */ ! 24: if (item == NULL) ! 25: return; ! 26: obj = (struct object *) ldata(item); ! 27: if (obj->o_type != RING) ! 28: { ! 29: if (!terse) ! 30: msg("It would be difficult to wrap that around a finger"); ! 31: else ! 32: msg("Not a ring"); ! 33: return; ! 34: } ! 35: ! 36: /* ! 37: * find out which hand to put it on ! 38: */ ! 39: if (is_current(obj)) ! 40: return; ! 41: ! 42: if (cur_ring[LEFT] == NULL && cur_ring[RIGHT] == NULL) ! 43: { ! 44: if ((ring = gethand()) < 0) ! 45: return; ! 46: } ! 47: else if (cur_ring[LEFT] == NULL) ! 48: ring = LEFT; ! 49: else if (cur_ring[RIGHT] == NULL) ! 50: ring = RIGHT; ! 51: else ! 52: { ! 53: if (!terse) ! 54: msg("You already have a ring on each hand"); ! 55: else ! 56: msg("Wearing two"); ! 57: return; ! 58: } ! 59: cur_ring[ring] = obj; ! 60: ! 61: /* ! 62: * Calculate the effect it has on the poor guy. ! 63: */ ! 64: switch (obj->o_which) ! 65: { ! 66: case R_ADDSTR: ! 67: save_max = max_stats.s_str; ! 68: chg_str(obj->o_ac); ! 69: max_stats.s_str = save_max; ! 70: break; ! 71: case R_SEEINVIS: ! 72: player.t_flags |= CANSEE; ! 73: light(&hero); ! 74: mvwaddch(cw, hero.y, hero.x, PLAYER); ! 75: break; ! 76: case R_AGGR: ! 77: aggravate(); ! 78: break; ! 79: } ! 80: status(); ! 81: if (r_know[obj->o_which] && r_guess[obj->o_which]) ! 82: { ! 83: cfree(r_guess[obj->o_which]); ! 84: r_guess[obj->o_which] = NULL; ! 85: } ! 86: else if (!r_know[obj->o_which] && askme && r_guess[obj->o_which] == NULL) ! 87: { ! 88: mpos = 0; ! 89: msg(terse ? "Call it: " : "What do you want to call it? "); ! 90: if (get_str(buf, cw) == NORM) ! 91: { ! 92: r_guess[obj->o_which] = malloc((unsigned int) strlen(buf) + 1); ! 93: strcpy(r_guess[obj->o_which], buf); ! 94: } ! 95: msg(""); ! 96: } ! 97: } ! 98: ! 99: ring_off() ! 100: { ! 101: register int ring; ! 102: register struct object *obj; ! 103: ! 104: if (cur_ring[LEFT] == NULL && cur_ring[RIGHT] == NULL) ! 105: { ! 106: if (terse) ! 107: msg("No rings"); ! 108: else ! 109: msg("You aren't wearing any rings"); ! 110: return; ! 111: } ! 112: else if (cur_ring[LEFT] == NULL) ! 113: ring = RIGHT; ! 114: else if (cur_ring[RIGHT] == NULL) ! 115: ring = LEFT; ! 116: else ! 117: if ((ring = gethand()) < 0) ! 118: return; ! 119: mpos = 0; ! 120: obj = cur_ring[ring]; ! 121: if (obj == NULL) ! 122: { ! 123: msg("Not wearing such a ring"); ! 124: return; ! 125: } ! 126: if (dropcheck(obj)) ! 127: msg("Was wearing %s", inv_name(obj, TRUE)); ! 128: } ! 129: ! 130: gethand() ! 131: { ! 132: register 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()) == 'l' || c == 'L') ! 141: return LEFT; ! 142: else if (c == 'r' || c == 'R') ! 143: return RIGHT; ! 144: else if (c == ESCAPE) ! 145: return -1; ! 146: mpos = 0; ! 147: if (terse) ! 148: msg("L or R"); ! 149: else ! 150: msg("Please type L or R"); ! 151: } ! 152: } ! 153: ! 154: /* ! 155: * how much food does this ring use up? ! 156: */ ! 157: ring_eat(hand) ! 158: register int hand; ! 159: { ! 160: if (cur_ring[hand] == NULL) ! 161: return 0; ! 162: switch (cur_ring[hand]->o_which) ! 163: { ! 164: case R_REGEN: ! 165: return 2; ! 166: case R_SUSTSTR: ! 167: return 1; ! 168: case R_SEARCH: ! 169: return (rnd(100) < 33); ! 170: case R_DIGEST: ! 171: return -(rnd(100) < 50); ! 172: default: ! 173: return 0; ! 174: } ! 175: } ! 176: ! 177: /* ! 178: * print ring bonuses ! 179: */ ! 180: char * ! 181: ring_num(obj) ! 182: register struct object *obj; ! 183: { ! 184: static char buf[5]; ! 185: ! 186: if (!(obj->o_flags & ISKNOW)) ! 187: return ""; ! 188: switch (obj->o_which) ! 189: { ! 190: when R_PROTECT: ! 191: case R_ADDSTR: ! 192: case R_ADDDAM: ! 193: case R_ADDHIT: ! 194: buf[0] = ' '; ! 195: strcpy(&buf[1], num(obj->o_ac, 0)); ! 196: otherwise: ! 197: return ""; ! 198: } ! 199: return buf; ! 200: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.