Annotation of early-roguelike/rogue4/wizard.c, Revision 1.1
1.1 ! rubenllo 1:
! 2: /*
! 3: * Special wizard commands (some of which are also non-wizard commands
! 4: * under strange circumstances)
! 5: *
! 6: * @(#)wizard.c 4.14 (Berkeley) 1/26/82
! 7: */
! 8:
! 9: #include <curses.h>
! 10: #include <ctype.h>
! 11: #include <stdlib.h>
! 12: #include <string.h>
! 13: #include "rogue.h"
! 14:
! 15: /*
! 16: * whatis:
! 17: * What a certin object is
! 18: */
! 19: void
! 20: whatis(bool insist)
! 21: {
! 22: register THING *obj;
! 23:
! 24: if (pack == NULL)
! 25: {
! 26: msg("You don't have anything in your pack to identify");
! 27: return;
! 28: }
! 29:
! 30: for (;;)
! 31: if ((obj = get_item("identify", 0)) == NULL && insist)
! 32: msg("You must identify something");
! 33: else
! 34: break;
! 35:
! 36: if (!insist && obj == NULL)
! 37: return;
! 38:
! 39: switch (obj->o_type)
! 40: {
! 41: case SCROLL:
! 42: s_know[obj->o_which] = TRUE;
! 43: if (s_guess[obj->o_which])
! 44: {
! 45: free(s_guess[obj->o_which]);
! 46: s_guess[obj->o_which] = NULL;
! 47: }
! 48: when POTION:
! 49: p_know[obj->o_which] = TRUE;
! 50: if (p_guess[obj->o_which])
! 51: {
! 52: free(p_guess[obj->o_which]);
! 53: p_guess[obj->o_which] = NULL;
! 54: }
! 55: when STICK:
! 56: ws_know[obj->o_which] = TRUE;
! 57: obj->o_flags |= ISKNOW;
! 58: if (ws_guess[obj->o_which])
! 59: {
! 60: free(ws_guess[obj->o_which]);
! 61: ws_guess[obj->o_which] = NULL;
! 62: }
! 63: when WEAPON:
! 64: case ARMOR:
! 65: obj->o_flags |= ISKNOW;
! 66: when RING:
! 67: r_know[obj->o_which] = TRUE;
! 68: obj->o_flags |= ISKNOW;
! 69: if (r_guess[obj->o_which])
! 70: {
! 71: free(r_guess[obj->o_which]);
! 72: r_guess[obj->o_which] = NULL;
! 73: }
! 74: }
! 75: msg(inv_name(obj, FALSE));
! 76: }
! 77:
! 78: #ifdef WIZARD
! 79: /*
! 80: * create_obj:
! 81: * Wizard command for getting anything he wants
! 82: */
! 83: void
! 84: create_obj(void)
! 85: {
! 86: register THING *obj;
! 87: register char ch, bless;
! 88:
! 89: obj = new_item();
! 90: msg("type of item: ");
! 91: obj->o_type = readchar();
! 92: mpos = 0;
! 93: msg("which %c do you want? (0-f)", obj->o_type);
! 94: obj->o_which = (isdigit((ch = readchar())) ? ch - '0' : ch - 'a' + 10);
! 95: obj->o_group = 0;
! 96: obj->o_count = 1;
! 97: mpos = 0;
! 98: if (obj->o_type == WEAPON || obj->o_type == ARMOR)
! 99: {
! 100: msg("blessing? (+,-,n)");
! 101: bless = readchar();
! 102: mpos = 0;
! 103: if (bless == '-')
! 104: obj->o_flags |= ISCURSED;
! 105: if (obj->o_type == WEAPON)
! 106: {
! 107: init_weapon(obj, obj->o_which);
! 108: if (bless == '-')
! 109: obj->o_hplus -= rnd(3)+1;
! 110: if (bless == '+')
! 111: obj->o_hplus += rnd(3)+1;
! 112: }
! 113: else
! 114: {
! 115: obj->o_ac = a_class[obj->o_which];
! 116: if (bless == '-')
! 117: obj->o_ac += rnd(3)+1;
! 118: if (bless == '+')
! 119: obj->o_ac -= rnd(3)+1;
! 120: }
! 121: }
! 122: else if (obj->o_type == RING)
! 123: switch (obj->o_which)
! 124: {
! 125: case R_PROTECT:
! 126: case R_ADDSTR:
! 127: case R_ADDHIT:
! 128: case R_ADDDAM:
! 129: msg("blessing? (+,-,n)");
! 130: bless = readchar();
! 131: mpos = 0;
! 132: if (bless == '-')
! 133: obj->o_flags |= ISCURSED;
! 134: obj->o_ac = (bless == '-' ? -1 : rnd(2) + 1);
! 135: when R_AGGR:
! 136: case R_TELEPORT:
! 137: obj->o_flags |= ISCURSED;
! 138: }
! 139: else if (obj->o_type == STICK)
! 140: fix_stick(obj);
! 141: else if (obj->o_type == GOLD)
! 142: {
! 143: msg("how much?");
! 144: get_num(&obj->o_goldval, stdscr);
! 145: }
! 146: add_pack(obj, FALSE);
! 147: }
! 148: #endif
! 149:
! 150: /*
! 151: * telport:
! 152: * Bamf the hero someplace else
! 153: */
! 154: int
! 155: teleport(void)
! 156: {
! 157: register int rm;
! 158: coord c;
! 159:
! 160: mvaddch(hero.y, hero.x, chat(hero.y, hero.x));
! 161: do
! 162: {
! 163: rm = rnd_room();
! 164: rnd_pos(&rooms[rm], &c);
! 165: } until (step_ok(winat(c.y, c.x)));
! 166: if (&rooms[rm] != proom)
! 167: {
! 168: leave_room(&hero);
! 169: hero = c;
! 170: enter_room(&hero);
! 171: }
! 172: else
! 173: {
! 174: hero = c;
! 175: look(TRUE);
! 176: }
! 177: mvaddch(hero.y, hero.x, PLAYER);
! 178: /*
! 179: * turn off ISHELD in case teleportation was done while fighting
! 180: * a Fungi
! 181: */
! 182: if (on(player, ISHELD)) {
! 183: THING *mon;
! 184:
! 185: player.t_flags &= ~ISHELD;
! 186: fung_hit = 0;
! 187: for (mon = mlist; mon != NULL; mon = next(mon)) {
! 188: if (mon->t_type == 'F')
! 189: strcpy(mon->t_stats.s_dmg, "0d0");
! 190: }
! 191: }
! 192: no_move = 0;
! 193: count = 0;
! 194: running = FALSE;
! 195: flush_type();
! 196: return rm;
! 197: }
! 198:
! 199: #ifdef WIZARD
! 200: /*
! 201: * passwd:
! 202: * See if user knows password
! 203: */
! 204: bool
! 205: passwd(void)
! 206: {
! 207: register char *sp, c;
! 208: char buf[MAXSTR], *xcrypt();
! 209:
! 210: msg("wizard's Password:");
! 211: mpos = 0;
! 212: sp = buf;
! 213: while ((c = readchar()) != '\n' && c != '\r' && c != ESCAPE)
! 214: if (c == md_killchar())
! 215: sp = buf;
! 216: else if (c == md_erasechar() && sp > buf)
! 217: sp--;
! 218: else
! 219: *sp++ = c;
! 220: if (sp == buf)
! 221: return FALSE;
! 222: *sp = '\0';
! 223: return (strcmp(PASSWD, xcrypt(buf, "mT")) == 0);
! 224: }
! 225:
! 226: /*
! 227: * show_map:
! 228: * Print out the map for the wizard
! 229: */
! 230: void
! 231: show_map(void)
! 232: {
! 233: register int y, x, real;
! 234:
! 235: wclear(hw);
! 236: for (y = 1; y < LINES - 1; y++)
! 237: for (x = 0; x < COLS; x++)
! 238: {
! 239: if (!(real = flat(y, x) & F_REAL))
! 240: wstandout(hw);
! 241: wmove(hw, y, x);
! 242: waddch(hw, chat(y, x));
! 243: if (!real)
! 244: wstandend(hw);
! 245: }
! 246: show_win(hw, "---More (level map)---");
! 247: }
! 248: #endif
CVSweb