Annotation of early-roguelike/urogue/wizard.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: wizard.c - Special wizard commands
! 3:
! 4: UltraRogue: The Ultimate Adventure in the Dungeons of Doom
! 5: Copyright (C) 1985, 1986, 1992, 1993, 1995 Herb Chong
! 6: All rights reserved.
! 7:
! 8: Based on "Advanced Rogue"
! 9: Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka
! 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 <string.h>
! 20: #include <stdlib.h>
! 21: #include "rogue.h"
! 22:
! 23: /*
! 24: whatis()
! 25: What a certain object is
! 26: */
! 27:
! 28: void
! 29: whatis(struct linked_list *what)
! 30: {
! 31: struct object *obj;
! 32: int kludge;
! 33: int print_message = FALSE;
! 34:
! 35: if (what == NULL)
! 36: {
! 37: print_message = TRUE;
! 38:
! 39: while ((what = get_item("identify", 0)) == NULL)
! 40: ;
! 41: }
! 42:
! 43: obj = OBJPTR(what);
! 44: obj->o_flags |= ISKNOW;
! 45:
! 46: switch (obj->o_type)
! 47: {
! 48: case SCROLL: kludge = TYP_SCROLL; break;
! 49: case POTION: kludge = TYP_POTION; break;
! 50: case STICK: kludge = TYP_STICK; break;
! 51: case RING: kludge = TYP_RING; break;
! 52: case WEAPON:
! 53: case ARMOR:
! 54: default: kludge = -1; break;
! 55: }
! 56:
! 57: if (kludge != -1)
! 58: {
! 59: know_items[kludge][obj->o_which] = TRUE;
! 60:
! 61: if (guess_items[kludge][obj->o_which])
! 62: {
! 63: ur_free(guess_items[kludge][obj->o_which]);
! 64: guess_items[kludge][obj->o_which] = NULL;
! 65: }
! 66: }
! 67:
! 68: if (print_message)
! 69: msg(inv_name(obj, UPPERCASE));
! 70: }
! 71:
! 72: /*
! 73: teleport()
! 74: Bamf the hero someplace else
! 75: */
! 76:
! 77: void
! 78: teleport(void)
! 79: {
! 80: struct room *new_rp = NULL, *old_rp = roomin(hero);
! 81:
! 82: int rm, which;
! 83: coord c;
! 84: int is_lit = FALSE; /* For saving room light state */
! 85: int rand_position = TRUE;
! 86:
! 87: c = hero;
! 88:
! 89: mvwaddch(cw, hero.y, hero.x, mvwinch(stdscr, hero.y, hero.x));
! 90:
! 91: if (is_wearing(R_TELCONTROL))
! 92: {
! 93: msg("Where do you wish to teleport to? (* for help)");
! 94: wmove(cw, hero.y, hero.x);
! 95: wrefresh(cw);
! 96:
! 97: which = (short) (readchar() & 0177);
! 98:
! 99: while (which != (short) ESCAPE && which != (short) LINEFEED
! 100: && which != (short) CARRIAGE_RETURN)
! 101: {
! 102: switch(which)
! 103: {
! 104: case 'h': c.x--; break;
! 105: case 'j': c.y++; break;
! 106: case 'k': c.y--; break;
! 107: case 'l': c.x++; break;
! 108: case 'y': c.x--;
! 109: c.y--; break;
! 110: case 'u': c.x++;
! 111: c.y--; break;
! 112: case 'b': c.x--;
! 113: c.y++; break;
! 114: case 'n': c.x++;
! 115: c.y++; break;
! 116: case '*':
! 117: msg("Use h,j,k,l,y,u,b,n to position cursor, then hit"
! 118: "return.");
! 119: }
! 120:
! 121: c.y = max(c.y, 1);
! 122: c.y = min(c.y, LINES - 3);
! 123: c.x = max(c.x, 1);
! 124: c.x = min(c.x, COLS - 1);
! 125: wmove(cw, c.y, c.x);
! 126: wrefresh(cw);
! 127: which = (short) (readchar() & 0177);
! 128: }
! 129:
! 130: which = winat(c.y, c.x);
! 131:
! 132: if ((which == FLOOR || which == PASSAGE || which == DOOR) &&
! 133: ((ring_value(R_TELCONTROL) == 0 && rnd(10) < 6)
! 134: || (ring_value(R_TELCONTROL) > 0 && rnd(10) < 9)))
! 135: {
! 136: rand_position = FALSE;
! 137: msg("You attempt succeeds.");
! 138: hero = c;
! 139: new_rp = roomin(hero);
! 140: }
! 141: else
! 142: msg("Your attempt fails.");
! 143: }
! 144:
! 145: if (rand_position)
! 146: {
! 147: do
! 148: {
! 149: rm = rnd_room();
! 150: rnd_pos(&rooms[rm], &hero);
! 151: }
! 152: while (winat(hero.y, hero.x) != FLOOR);
! 153:
! 154: new_rp = &rooms[rm];
! 155: }
! 156:
! 157: /* If hero gets moved, darken old room */
! 158:
! 159: if (old_rp && old_rp != new_rp)
! 160: {
! 161: if (!(old_rp->r_flags & ISDARK))
! 162: is_lit = TRUE;
! 163:
! 164: old_rp->r_flags |= ISDARK; /* Fake darkness */
! 165: light(&c);
! 166:
! 167: if (is_lit)
! 168: old_rp->r_flags &= ~ISDARK; /* Restore light state */
! 169: }
! 170:
! 171: light(&hero);
! 172: mvwaddch(cw, hero.y, hero.x, PLAYER);
! 173:
! 174: /* turn off ISHELD in case teleportation was done while fighting */
! 175:
! 176: if (on(player, ISHELD))
! 177: {
! 178: struct linked_list *ip, *nip;
! 179: struct thing *mp;
! 180:
! 181: turn_off(player, ISHELD);
! 182: hold_count = 0;
! 183:
! 184: for (ip = mlist; ip; ip = nip)
! 185: {
! 186: mp = THINGPTR(ip);
! 187: nip = next(ip);
! 188:
! 189: if (on(*mp, DIDHOLD))
! 190: {
! 191: turn_off(*mp, DIDHOLD);
! 192: turn_on(*mp, CANHOLD);
! 193: }
! 194:
! 195: turn_off(*mp, DIDSUFFOCATE);
! 196: }
! 197: }
! 198:
! 199: extinguish_fuse(FUSE_SUFFOCATE);
! 200: player.t_no_move = 0; /* not trapped anymore */
! 201: count = 0;
! 202: running = FALSE;
! 203:
! 204: return;
! 205: }
! 206:
! 207: /*
! 208: passwd()
! 209: see if user knows password
! 210: */
! 211:
! 212: int
! 213: passwd(void)
! 214: {
! 215: char *sp, c;
! 216: char buf[2 * LINELEN];
! 217:
! 218: msg("Wizard's Password:");
! 219: mpos = 0;
! 220: sp = buf;
! 221:
! 222: while ((c = (readchar() & 0177)) != '\n' && c != '\r' && c != '\033')
! 223: {
! 224: if (c == '\0')
! 225: sp = buf;
! 226: else if (c == '\b' && sp > buf)
! 227: sp--;
! 228: else
! 229: *sp++ = c;
! 230: }
! 231:
! 232: if (sp == buf)
! 233: return(FALSE);
! 234:
! 235: *sp = '\0';
! 236:
! 237: return(TRUE);
! 238: }
CVSweb