Annotation of early-roguelike/rogue5/command.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: * Read and execute the user commands
! 3: *
! 4: * @(#)command.c 4.73 (Berkeley) 08/06/83
! 5: *
! 6: * Rogue: Exploring the Dungeons of Doom
! 7: * Copyright (C) 1980-1983, 1985, 1999 Michael Toy, Ken Arnold and Glenn Wichman
! 8: * All rights reserved.
! 9: *
! 10: * See the file LICENSE.TXT for full copyright and licensing information.
! 11: */
! 12:
! 13: #include <stdlib.h>
! 14: #include <string.h>
! 15: #include <curses.h>
! 16: #include <ctype.h>
! 17: #include "rogue.h"
! 18:
! 19: /*
! 20: * command:
! 21: * Process the user commands
! 22: */
! 23: void
! 24: command(void)
! 25: {
! 26: int ch;
! 27: int ntimes = 1; /* Number of player moves */
! 28: int *fp;
! 29: THING *mp;
! 30: static int countch, direction, newcount = FALSE;
! 31:
! 32: if (on(player, ISHASTE))
! 33: ntimes++;
! 34: /*
! 35: * Let the daemons start up
! 36: */
! 37: do_daemons(BEFORE);
! 38: do_fuses(BEFORE);
! 39: while (ntimes--)
! 40: {
! 41: again = FALSE;
! 42: if (has_hit)
! 43: {
! 44: endmsg();
! 45: has_hit = FALSE;
! 46: }
! 47: /*
! 48: * these are illegal things for the player to be, so if any are
! 49: * set, someone's been poking in memeory
! 50: */
! 51: if (on(player, ISSLOW|ISGREED|ISINVIS|ISREGEN|ISTARGET))
! 52: exit(1);
! 53:
! 54: look(TRUE);
! 55: if (!running)
! 56: door_stop = FALSE;
! 57: status();
! 58: lastscore = purse;
! 59: move(hero.y, hero.x);
! 60: if (!((running || count) && jump))
! 61: refresh(); /* Draw screen */
! 62: take = 0;
! 63: after = TRUE;
! 64: /*
! 65: * Read command or continue run
! 66: */
! 67: #ifdef MASTER
! 68: if (wizard)
! 69: noscore = TRUE;
! 70: #endif
! 71: if (!no_command)
! 72: {
! 73: if (running || to_death)
! 74: ch = runch;
! 75: else if (count)
! 76: ch = countch;
! 77: else
! 78: {
! 79: ch = readchar();
! 80: move_on = FALSE;
! 81: if (mpos != 0) /* Erase message if its there */
! 82: {
! 83: if (ch != '.')
! 84: msg("");
! 85: }
! 86: }
! 87: }
! 88: else
! 89: ch = '.';
! 90: if (no_command)
! 91: {
! 92: if (--no_command == 0)
! 93: {
! 94: msg("you can move again");
! 95: }
! 96: }
! 97: else
! 98: {
! 99: /*
! 100: * check for prefixes
! 101: */
! 102: newcount = FALSE;
! 103: if (isdigit(ch))
! 104: {
! 105: count = 0;
! 106: newcount = TRUE;
! 107: while (isdigit(ch))
! 108: {
! 109: count = count * 10 + (ch - '0');
! 110: if (count > 255)
! 111: count = 255;
! 112: ch = readchar();
! 113: }
! 114: countch = ch;
! 115: /*
! 116: * turn off count for commands which don't make sense
! 117: * to repeat
! 118: */
! 119: switch (ch)
! 120: {
! 121: case CTRL('B'): case CTRL('H'): case CTRL('J'):
! 122: case CTRL('K'): case CTRL('L'): case CTRL('N'):
! 123: case CTRL('U'): case CTRL('Y'):
! 124: case '.': case 'a': case 'b': case 'h': case 'j':
! 125: case 'k': case 'l': case 'm': case 'n': case 'q':
! 126: case 'r': case 's': case 't': case 'u': case 'y':
! 127: case 'z': case 'B': case 'C': case 'H': case 'I':
! 128: case 'J': case 'K': case 'L': case 'N': case 'U':
! 129: case 'Y':
! 130: #ifdef MASTER
! 131: case CTRL('D'): case CTRL('A'):
! 132: #endif
! 133: break;
! 134: default:
! 135: count = 0;
! 136: }
! 137: }
! 138: /*
! 139: * execute a command
! 140: */
! 141: if (count && !running)
! 142: count--;
! 143: if (ch != 'a' && ch != ESCAPE && !(running || count || to_death))
! 144: {
! 145: l_last_comm = last_comm;
! 146: l_last_dir = last_dir;
! 147: l_last_pick = last_pick;
! 148: last_comm = ch;
! 149: last_dir = '\0';
! 150: last_pick = NULL;
! 151: }
! 152: over:
! 153: switch (ch)
! 154: {
! 155: case ',': {
! 156: THING *obj = NULL;
! 157: int found = 0;
! 158: for (obj = lvl_obj; obj != NULL; obj = next(obj))
! 159: {
! 160: if (obj->o_pos.y == hero.y && obj->o_pos.x == hero.x)
! 161: {
! 162: found=1;
! 163: break;
! 164: }
! 165: }
! 166:
! 167: if (found) {
! 168: if (levit_check())
! 169: ;
! 170: else
! 171: pick_up(obj->o_type);
! 172: }
! 173: else {
! 174: if (!terse)
! 175: addmsg("there is ");
! 176: addmsg("nothing here");
! 177: if (!terse)
! 178: addmsg(" to pick up");
! 179: endmsg();
! 180: }
! 181: }
! 182: when '!': shell();
! 183: when 'h': do_move(0, -1);
! 184: when 'j': do_move(1, 0);
! 185: when 'k': do_move(-1, 0);
! 186: when 'l': do_move(0, 1);
! 187: when 'y': do_move(-1, -1);
! 188: when 'u': do_move(-1, 1);
! 189: when 'b': do_move(1, -1);
! 190: when 'n': do_move(1, 1);
! 191: when 'H': do_run('h');
! 192: when 'J': do_run('j');
! 193: when 'K': do_run('k');
! 194: when 'L': do_run('l');
! 195: when 'Y': do_run('y');
! 196: when 'U': do_run('u');
! 197: when 'B': do_run('b');
! 198: when 'N': do_run('n');
! 199: when CTRL('H'): case CTRL('J'): case CTRL('K'): case CTRL('L'):
! 200: case CTRL('Y'): case CTRL('U'): case CTRL('B'): case CTRL('N'):
! 201: {
! 202: if (!on(player, ISBLIND))
! 203: {
! 204: door_stop = TRUE;
! 205: firstmove = TRUE;
! 206: }
! 207: if (count && !newcount)
! 208: ch = direction;
! 209: else
! 210: {
! 211: ch += ('A' - CTRL('A'));
! 212: direction = ch;
! 213: }
! 214: goto over;
! 215: }
! 216: when 'F':
! 217: kamikaze = TRUE;
! 218: /* FALLTHROUGH */
! 219: case 'f':
! 220: if (!get_dir())
! 221: {
! 222: after = FALSE;
! 223: break;
! 224: }
! 225: delta.y += hero.y;
! 226: delta.x += hero.x;
! 227: if ( ((mp = moat(delta.y, delta.x)) == NULL)
! 228: || ((!see_monst(mp)) && !on(player, SEEMONST)))
! 229: {
! 230: if (!terse)
! 231: addmsg("I see ");
! 232: msg("no monster there");
! 233: after = FALSE;
! 234: }
! 235: else if (diag_ok(&hero, &delta))
! 236: {
! 237: to_death = TRUE;
! 238: max_hit = 0;
! 239: mp->t_flags |= ISTARGET;
! 240: runch = ch = dir_ch;
! 241: goto over;
! 242: }
! 243: when 't':
! 244: if (!get_dir())
! 245: after = FALSE;
! 246: else
! 247: missile(delta.y, delta.x);
! 248: when 'a':
! 249: if (last_comm == '\0')
! 250: {
! 251: msg("you haven't typed a command yet");
! 252: after = FALSE;
! 253: }
! 254: else
! 255: {
! 256: ch = last_comm;
! 257: again = TRUE;
! 258: goto over;
! 259: }
! 260: when 'q': quaff();
! 261: when 'Q':
! 262: after = FALSE;
! 263: q_comm = TRUE;
! 264: quit(0);
! 265: q_comm = FALSE;
! 266: when 'i': after = FALSE; inventory(pack, 0);
! 267: when 'I': after = FALSE; picky_inven();
! 268: when 'd': drop();
! 269: when 'r': read_scroll();
! 270: when 'e': eat();
! 271: when 'w': wield();
! 272: when 'W': wear();
! 273: when 'T': take_off();
! 274: when 'P': ring_on();
! 275: when 'R': ring_off();
! 276: when 'o': option(); after = FALSE;
! 277: when 'c': call(); after = FALSE;
! 278: when '>': after = FALSE; d_level();
! 279: when '<': after = FALSE; u_level();
! 280: when '?': after = FALSE; help();
! 281: when '/': after = FALSE; identify();
! 282: when 's': search();
! 283: when 'z':
! 284: if (get_dir())
! 285: do_zap();
! 286: else
! 287: after = FALSE;
! 288: when 'D': after = FALSE; discovered();
! 289: when CTRL('P'): after = FALSE; msg(huh);
! 290: when CTRL('R'):
! 291: after = FALSE;
! 292: clearok(curscr,TRUE);
! 293: wrefresh(curscr);
! 294: when 'v':
! 295: after = FALSE;
! 296: msg("version %s. (mctesq was here)", release);
! 297: when 'S':
! 298: after = FALSE;
! 299: save_game();
! 300: when '.': ; /* Rest command */
! 301: when ' ': after = FALSE; /* "Legal" illegal command */
! 302: when '^':
! 303: after = FALSE;
! 304: if (get_dir()) {
! 305: delta.y += hero.y;
! 306: delta.x += hero.x;
! 307: fp = &flat(delta.y, delta.x);
! 308: if (!terse)
! 309: addmsg("You have found ");
! 310: if (chat(delta.y, delta.x) != TRAP)
! 311: msg("no trap there");
! 312: else if (on(player, ISHALU))
! 313: msg(tr_name[rnd(NTRAPS)]);
! 314: else {
! 315: msg(tr_name[*fp & F_TMASK]);
! 316: *fp |= F_SEEN;
! 317: }
! 318: }
! 319: #ifdef MASTER
! 320: when '+':
! 321: after = FALSE;
! 322: if (wizard)
! 323: {
! 324: wizard = FALSE;
! 325: turn_see(TRUE);
! 326: msg("not wizard any more");
! 327: }
! 328: else
! 329: {
! 330: wizard = passwd();
! 331: if (wizard)
! 332: {
! 333: noscore = TRUE;
! 334: turn_see(FALSE);
! 335: msg("you are suddenly as smart as Ken Arnold in dungeon #%d", dnum);
! 336: }
! 337: else
! 338: msg("sorry");
! 339: }
! 340: #endif
! 341: when ESCAPE: /* Escape */
! 342: door_stop = FALSE;
! 343: count = 0;
! 344: after = FALSE;
! 345: again = FALSE;
! 346: when 'm':
! 347: move_on = TRUE;
! 348: if (!get_dir())
! 349: after = FALSE;
! 350: else
! 351: {
! 352: ch = dir_ch;
! 353: countch = dir_ch;
! 354: goto over;
! 355: }
! 356: when ')': current(cur_weapon, "wielding", NULL);
! 357: when ']': current(cur_armor, "wearing", NULL);
! 358: when '=':
! 359: current(cur_ring[LEFT], "wearing",
! 360: terse ? "(L)" : "on left hand");
! 361: current(cur_ring[RIGHT], "wearing",
! 362: terse ? "(R)" : "on right hand");
! 363: when '@':
! 364: stat_msg = TRUE;
! 365: status();
! 366: stat_msg = FALSE;
! 367: after = FALSE;
! 368: otherwise:
! 369: after = FALSE;
! 370: #ifdef MASTER
! 371: if (wizard) switch (ch)
! 372: {
! 373: case '|': msg("@ %d,%d", hero.y, hero.x);
! 374: when 'C': create_obj();
! 375: when '$': msg("inpack = %d", inpack);
! 376: when CTRL('G'): inventory(lvl_obj, 0);
! 377: when CTRL('W'): whatis(FALSE, 0);
! 378: when CTRL('D'): level++; new_level();
! 379: when CTRL('A'): level--; new_level();
! 380: when CTRL('F'): show_map();
! 381: when CTRL('T'): teleport();
! 382: when CTRL('E'): msg("food left: %d", food_left);
! 383: when CTRL('Q'): add_pass();
! 384: when CTRL('X'): turn_see(on(player, SEEMONST));
! 385: when '~':
! 386: {
! 387: THING *item;
! 388:
! 389: if ((item = get_item("charge", STICK)) != NULL)
! 390: item->o_charges = 10000;
! 391: }
! 392: when CTRL('I'):
! 393: {
! 394: int i;
! 395: THING *obj;
! 396:
! 397: for (i = 0; i < 9; i++)
! 398: raise_level();
! 399: /*
! 400: * Give him a sword (+1,+1)
! 401: */
! 402: obj = new_item();
! 403: init_weapon(obj, TWOSWORD);
! 404: obj->o_hplus = 1;
! 405: obj->o_dplus = 1;
! 406: add_pack(obj, TRUE);
! 407: cur_weapon = obj;
! 408: /*
! 409: * And his suit of armor
! 410: */
! 411: obj = new_item();
! 412: obj->o_type = ARMOR;
! 413: obj->o_which = PLATE_MAIL;
! 414: obj->o_arm = -5;
! 415: obj->o_flags |= ISKNOW;
! 416: obj->o_count = 1;
! 417: obj->o_group = 0;
! 418: cur_armor = obj;
! 419: add_pack(obj, TRUE);
! 420: }
! 421: when '*' :
! 422: pr_list();
! 423: otherwise:
! 424: illcom(ch);
! 425: }
! 426: else
! 427: #endif
! 428: illcom(ch);
! 429: }
! 430: /*
! 431: * turn off flags if no longer needed
! 432: */
! 433: if (!running)
! 434: door_stop = FALSE;
! 435: }
! 436: /*
! 437: * If he ran into something to take, let him pick it up.
! 438: */
! 439: if (take != 0)
! 440: pick_up(take);
! 441: if (!running)
! 442: door_stop = FALSE;
! 443: if (!after)
! 444: ntimes++;
! 445: }
! 446: do_daemons(AFTER);
! 447: do_fuses(AFTER);
! 448: if (ISRING(LEFT, R_SEARCH))
! 449: search();
! 450: else if (ISRING(LEFT, R_TELEPORT) && rnd(50) == 0)
! 451: teleport();
! 452: if (ISRING(RIGHT, R_SEARCH))
! 453: search();
! 454: else if (ISRING(RIGHT, R_TELEPORT) && rnd(50) == 0)
! 455: teleport();
! 456: }
! 457:
! 458: /*
! 459: * illcom:
! 460: * What to do with an illegal command
! 461: */
! 462: void
! 463: illcom(int ch)
! 464: {
! 465: save_msg = FALSE;
! 466: count = 0;
! 467: msg("illegal command '%s'", unctrl(ch));
! 468: save_msg = TRUE;
! 469: }
! 470:
! 471: /*
! 472: * search:
! 473: * player gropes about him to find hidden things.
! 474: */
! 475: void
! 476: search(void)
! 477: {
! 478: int y, x;
! 479: int *fp;
! 480: int ey, ex;
! 481: int probinc;
! 482: int found;
! 483:
! 484: ey = hero.y + 1;
! 485: ex = hero.x + 1;
! 486: probinc = (on(player, ISHALU) ? 3 : 0);
! 487: probinc += (on(player, ISBLIND) ? 2 : 0);
! 488: found = FALSE;
! 489: for (y = hero.y - 1; y <= ey; y++)
! 490: for (x = hero.x - 1; x <= ex; x++)
! 491: {
! 492: if (y == hero.y && x == hero.x)
! 493: continue;
! 494: fp = &flat(y, x);
! 495: if (!(*fp & F_REAL))
! 496: switch (chat(y, x))
! 497: {
! 498: case '|':
! 499: case '-':
! 500: if (rnd(5 + probinc) != 0)
! 501: break;
! 502: chat(y, x) = DOOR;
! 503: msg("a secret door");
! 504: foundone:
! 505: found = TRUE;
! 506: *fp |= F_REAL;
! 507: count = FALSE;
! 508: running = FALSE;
! 509: break;
! 510: case FLOOR:
! 511: if (rnd(2 + probinc) != 0)
! 512: break;
! 513: chat(y, x) = TRAP;
! 514: if (!terse)
! 515: addmsg("you found ");
! 516: if (on(player, ISHALU))
! 517: msg(tr_name[rnd(NTRAPS)]);
! 518: else {
! 519: msg(tr_name[*fp & F_TMASK]);
! 520: *fp |= F_SEEN;
! 521: }
! 522: goto foundone;
! 523: break;
! 524: case ' ':
! 525: if (rnd(3 + probinc) != 0)
! 526: break;
! 527: chat(y, x) = PASSAGE;
! 528: goto foundone;
! 529: }
! 530: }
! 531: if (found)
! 532: look(FALSE);
! 533: }
! 534:
! 535: /*
! 536: * help:
! 537: * Give single character help, or the whole mess if he wants it
! 538: */
! 539: void
! 540: help(void)
! 541: {
! 542: const struct h_list *strp;
! 543: int helpch;
! 544: int numprint, cnt;
! 545: msg("character you want help for (* for all): ");
! 546: helpch = readchar();
! 547: mpos = 0;
! 548: /*
! 549: * If its not a *, print the right help string
! 550: * or an error if he typed a funny character.
! 551: */
! 552: if (helpch != '*')
! 553: {
! 554: move(0, 0);
! 555: for (strp = helpstr; strp->h_desc != NULL; strp++)
! 556: if (strp->h_ch == helpch)
! 557: {
! 558: lower_msg = TRUE;
! 559: msg("%s%s", unctrl(strp->h_ch), strp->h_desc);
! 560: lower_msg = FALSE;
! 561: return;
! 562: }
! 563: msg("unknown character '%s'", unctrl(helpch));
! 564: return;
! 565: }
! 566: /*
! 567: * Here we print help for everything.
! 568: * Then wait before we return to command mode
! 569: */
! 570: numprint = 0;
! 571: for (strp = helpstr; strp->h_desc != NULL; strp++)
! 572: if (strp->h_print)
! 573: numprint++;
! 574: if (numprint & 01) /* round odd numbers up */
! 575: numprint++;
! 576: numprint /= 2;
! 577: if (numprint > LINES - 1)
! 578: numprint = LINES - 1;
! 579:
! 580: wclear(hw);
! 581: cnt = 0;
! 582: for (strp = helpstr; strp->h_desc != NULL; strp++)
! 583: if (strp->h_print)
! 584: {
! 585: wmove(hw, cnt % numprint, cnt >= numprint ? COLS / 2 : 0);
! 586: if (strp->h_ch)
! 587: waddstr(hw, unctrl(strp->h_ch));
! 588: waddstr(hw, strp->h_desc);
! 589: if (++cnt >= numprint * 2)
! 590: break;
! 591: }
! 592: wmove(hw, LINES - 1, 0);
! 593: waddstr(hw, "--Press space to continue--");
! 594: wrefresh(hw);
! 595: wait_for(hw, ' ');
! 596: clearok(stdscr, TRUE);
! 597: /*
! 598: refresh();
! 599: */
! 600: msg("");
! 601: touchwin(stdscr);
! 602: wrefresh(stdscr);
! 603: }
! 604:
! 605: /*
! 606: * identify:
! 607: * Tell the player what a certain thing is.
! 608: */
! 609: void
! 610: identify(void)
! 611: {
! 612: int ch;
! 613: const struct h_list *hp;
! 614: const char *str;
! 615: const struct h_list ident_list[] = {
! 616: {'|', "wall of a room", FALSE},
! 617: {'-', "wall of a room", FALSE},
! 618: {GOLD, "gold", FALSE},
! 619: {STAIRS, "a staircase", FALSE},
! 620: {DOOR, "door", FALSE},
! 621: {FLOOR, "room floor", FALSE},
! 622: {PLAYER, "you", FALSE},
! 623: {PASSAGE, "passage", FALSE},
! 624: {TRAP, "trap", FALSE},
! 625: {POTION, "potion", FALSE},
! 626: {SCROLL, "scroll", FALSE},
! 627: {FOOD, "food", FALSE},
! 628: {WEAPON, "weapon", FALSE},
! 629: {' ', "solid rock", FALSE},
! 630: {ARMOR, "armor", FALSE},
! 631: {AMULET, "the Amulet of Yendor", FALSE},
! 632: {RING, "ring", FALSE},
! 633: {STICK, "wand or staff", FALSE},
! 634: {'\0'}
! 635: };
! 636:
! 637: msg("what do you want identified? ");
! 638: ch = readchar();
! 639: mpos = 0;
! 640: if (ch == ESCAPE)
! 641: {
! 642: msg("");
! 643: return;
! 644: }
! 645: if (isupper(ch))
! 646: str = monsters[ch-'A'].m_name;
! 647: else
! 648: {
! 649: str = "unknown character";
! 650: for (hp = ident_list; hp->h_ch != '\0'; hp++)
! 651: if (hp->h_ch == ch)
! 652: {
! 653: str = hp->h_desc;
! 654: break;
! 655: }
! 656: }
! 657: msg("'%s': %s", unctrl(ch), str);
! 658: }
! 659:
! 660: /*
! 661: * d_level:
! 662: * He wants to go down a level
! 663: */
! 664: void
! 665: d_level(void)
! 666: {
! 667: if (levit_check())
! 668: return;
! 669: if (chat(hero.y, hero.x) != STAIRS)
! 670: msg("I see no way down");
! 671: else
! 672: {
! 673: level++;
! 674: seenstairs = FALSE;
! 675: new_level();
! 676: }
! 677: }
! 678:
! 679: /*
! 680: * u_level:
! 681: * He wants to go up a level
! 682: */
! 683: void
! 684: u_level(void)
! 685: {
! 686: if (levit_check())
! 687: return;
! 688: if (chat(hero.y, hero.x) == STAIRS)
! 689: if (amulet)
! 690: {
! 691: level--;
! 692: if (level == 0)
! 693: total_winner();
! 694: new_level();
! 695: msg("you feel a wrenching sensation in your gut");
! 696: }
! 697: else
! 698: msg("your way is magically blocked");
! 699: else
! 700: msg("I see no way up");
! 701: }
! 702:
! 703: /*
! 704: * levit_check:
! 705: * Check to see if she's levitating, and if she is, print an
! 706: * appropriate message.
! 707: */
! 708: int
! 709: levit_check(void)
! 710: {
! 711: if (!on(player, ISLEVIT))
! 712: return FALSE;
! 713: msg("You can't. You're floating off the ground!");
! 714: return TRUE;
! 715: }
! 716:
! 717: /*
! 718: * call:
! 719: * Allow a user to call a potion, scroll, or ring something
! 720: */
! 721: void
! 722: call(void)
! 723: {
! 724: THING *obj;
! 725: struct obj_info *op = NULL;
! 726: char **guess;
! 727: const char *elsewise = NULL;
! 728: int *know;
! 729:
! 730: obj = get_item("call", CALLABLE);
! 731: /*
! 732: * Make certain that it is somethings that we want to wear
! 733: */
! 734: if (obj == NULL)
! 735: return;
! 736: switch (obj->o_type)
! 737: {
! 738: case RING:
! 739: op = &ring_info[obj->o_which];
! 740: elsewise = r_stones[obj->o_which];
! 741: goto norm;
! 742: when POTION:
! 743: op = &pot_info[obj->o_which];
! 744: elsewise = p_colors[obj->o_which];
! 745: goto norm;
! 746: when SCROLL:
! 747: op = &scr_info[obj->o_which];
! 748: elsewise = s_names[obj->o_which];
! 749: goto norm;
! 750: when STICK:
! 751: op = &ws_info[obj->o_which];
! 752: elsewise = ws_made[obj->o_which];
! 753: norm:
! 754: know = &op->oi_know;
! 755: guess = &op->oi_guess;
! 756: if (*guess != NULL)
! 757: elsewise = *guess;
! 758: when FOOD:
! 759: msg("you can't call that anything");
! 760: return;
! 761: otherwise:
! 762: guess = &obj->o_label;
! 763: know = NULL;
! 764: elsewise = obj->o_label;
! 765: }
! 766: if (know != NULL && *know)
! 767: {
! 768: msg("that has already been identified");
! 769: return;
! 770: }
! 771: if (elsewise != NULL && elsewise == *guess)
! 772: {
! 773: if (!terse)
! 774: addmsg("Was ");
! 775: msg("called \"%s\"", elsewise);
! 776: }
! 777: if (terse)
! 778: msg("call it: ");
! 779: else
! 780: msg("what do you want to call it? ");
! 781:
! 782: if (elsewise == NULL)
! 783: strcpy(prbuf, "");
! 784: else
! 785: strcpy(prbuf, elsewise);
! 786: if (get_str(prbuf, stdscr) == NORM)
! 787: {
! 788: if (*guess != NULL)
! 789: free(*guess);
! 790: *guess = malloc(strlen(prbuf) + 1);
! 791: if (*guess != NULL)
! 792: strcpy(*guess, prbuf);
! 793: }
! 794:
! 795: msg("");
! 796: }
! 797:
! 798: /*
! 799: * current:
! 800: * Print the current weapon/armor
! 801: */
! 802: void
! 803: current(const THING *cur, const char *how, const char *where)
! 804: {
! 805: after = FALSE;
! 806: if (cur != NULL)
! 807: {
! 808: if (!terse)
! 809: addmsg("you are %s (", how);
! 810: inv_describe = FALSE;
! 811: addmsg("%c) %s", cur->o_packch, inv_name(cur, TRUE));
! 812: inv_describe = TRUE;
! 813: if (where)
! 814: addmsg(" %s", where);
! 815: endmsg();
! 816: }
! 817: else
! 818: {
! 819: if (!terse)
! 820: addmsg("you are ");
! 821: addmsg("%s nothing", how);
! 822: if (where)
! 823: addmsg(" %s", where);
! 824: endmsg();
! 825: }
! 826: }
CVSweb