Annotation of early-roguelike/xrogue/help.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: help.c - Routines having to do with help
! 3:
! 4: XRogue: Expeditions into the Dungeons of Doom
! 5: Copyright (C) 1991 Robert Pietkivitch
! 6: All rights reserved.
! 7:
! 8: Based on "Advanced Rogue"
! 9: Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
! 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 <curses.h>
! 20: #include <ctype.h>
! 21: #include "mach_dep.h"
! 22: #include "rogue.h"
! 23:
! 24: /*
! 25: * Give character descripts
! 26: */
! 27:
! 28: static char *game_fighter = "Strength is the main attribute of the Fighter. \
! 29: He can wield any weapon and the two-handed sword is his weapon of choice. He \
! 30: can also wear any type of armor. Plate armor being the best choice and \
! 31: leather armor the worst. The Fighter is able to sense both traps and gold \
! 32: at higher experience levels. His natural quest item is the Axe of Aklad. \
! 33: Due to his superior form, the Fighter usually receives more hit-points per \
! 34: new experience level than the other characters. The Fighter is neither good \
! 35: or evil; he is a neutral character. The default attribute values of the \
! 36: Fighter are: Int=7, Str=16, Wis=7, Dxt=16, Con=17, and Chr=11. Default gold \
! 37: amount is 2000 pieces and default hit-points are 24.";
! 38:
! 39: static char *game_thief = "Dexterity is the main attribute of the Thief. His \
! 40: stealth allows him to move quietly, thus disturbing less monsters. He can \
! 41: sense traps and gold and can take (steal) things from the monsters. The \
! 42: Thief can not wield the two-handed sword so the bastard sword is his weapon \
! 43: of choice. He can only wear studded leather armor. The Thief's natural \
! 44: quest item is the Daggers of Musty Doit. With higher dexterity the Thief \
! 45: is able to \"backstab\" monsters, thereby killing them with a single blow. \
! 46: His character type fluctuates between that of good, neutral, and evil. The \
! 47: default attribute values of the Thief are: Int=7, Str=14, Wis=7, Dxt=18, \
! 48: Con=17, and Chr=11. Default gold amount is 2000 pieces and default \
! 49: hit-points are 23.";
! 50:
! 51: static char *game_assassin = "Dexterity is the main attribute of the \
! 52: Assassin. Like the Thief, he moves with an extra degree of stealth. He can \
! 53: sense gold and steal things from monsters. The ability to sense traps comes \
! 54: at higher experience levels. The Assassin can not wield the two-handed sword \
! 55: and he can only wear studded leather armor. The natural quest item of the \
! 56: Assassin is the Eye of Vecna. He is also skilled in the use of poison. \
! 57: Higher dexterity enables him to \"assassinate\" monsters with a single blow. \
! 58: The Assassin is aligned with the powers of evil. The default attribute \
! 59: values of the Assassin are: Int=7, Str=14, Wis=7, Dxt=18, Con=17, and \
! 60: Chr=11. Default gold amount is 2000 pieces and default hit-points are 23.";
! 61:
! 62: static char *game_ranger = "Charisma is the main attribute of the Ranger who \
! 63: also has a secondary attribute of Intelligence. Like the Magician, this \
! 64: gives him the ability to cast spells which increases as he attains higher \
! 65: experience levels. Like the Fighter, he can wield any weapon and wear any \
! 66: armor. The Ranger's natural quest item is the Mandolin of Brian. He is \
! 67: aligned with the powers of good. Therefore, he can be made to suffer and \
! 68: even become cursed by the very powers that allow him to cast spells if he \
! 69: happens to cause the demise of a likewise good creature. The default \
! 70: attribute values of the Ranger are: Int=11, Str=11, Wis=7, Dxt=16, Con=16, \
! 71: and Chr=13. Default gold amount is 2000 pieces and default hit-points \
! 72: are 22.";
! 73:
! 74: static char *game_paladin = "Charisma is the main attribute of the Paladin \
! 75: who has a secondary attribute of Wisdom. Like the Cleric, this gives him \
! 76: the ability to offer prayers, receive what his heart desires, and an ability \
! 77: to turn the undead. This ability will increase as he gains higher \
! 78: experience levels. Like the Fighter, he can wield any weapon and wear any \
! 79: armor. The Ankh of Heil is the Paladin's natural quest item. Like the \
! 80: Ranger, the Paladin is aligned with the powers of good. This can cause \
! 81: him to suffer and become cursed if he brings ruin to a likewise good \
! 82: creature. The default attribute values of the Paladin are: Int=7, \
! 83: Str=11, Wis=11, Dxt=16, Con=16, and Chr=13. Default gold amount is \
! 84: 2000 pieces and default hit-points are 22.";
! 85:
! 86: static char *game_druid = "Wisdom is the main attribute of the Druid. This \
! 87: gives him the ability to chant secret words and mantras, which is much \
! 88: greater than that of the Monk. The Druid can not wield the two-handed or \
! 89: bastard swords but he can wear any armor. His natural quest item is the Quill \
! 90: of Nagrom. Like the Magician and Cleric, the Druid is aligned neutral. He \
! 91: therefore, must rely upon his Wisdom and his chanting ability in order to \
! 92: remain alive. Likewise, he does not receive as many new hit-points per \
! 93: new experience level. The default attribute values of the Druid are: Int=7, \
! 94: Str=10, Wis=14, Dxt=16, Con=15, and Chr=12. Default gold amount is 2000 \
! 95: pieces and default hit-points are 21.";
! 96:
! 97: static char *game_monk = "Constitution is the main attribute of the Monk who \
! 98: has a secondary aspect of Wisdom. Like the Druid, this gives him the \
! 99: ability to chant mantras which will increase as he gains higher experience. \
! 100: The Monk can not wield the two-handed sword and he can not wear any armor. \
! 101: The Cloak of Emori is the Monk's natural quest item. The Monk can also \
! 102: sense traps, though much less than the Thief or Assassin. He is the most \
! 103: healthy character. Like the Ranger and Paladin, he is aligned with the \
! 104: powers of good. Therefore, he is made to suffer and can become cursed if \
! 105: he kills a likewise good creature. The default attribute values of the \
! 106: Monk are: Int=7, Str=11, Wis=11, Dxt=16, Con=18, and Chr=11. Default \
! 107: gold amount is 2000 pieces and default hit-points are 22.";
! 108:
! 109: static char *game_magician = "Intelligence is the main attribute of the \
! 110: Magician. The Magician's ability to cast spells is much greater than that \
! 111: of the Ranger. He can not wield the two- handed or bastard swords, but he \
! 112: can wear any kind of armor. His natural quest item is the Amulet of \
! 113: Stonebones. The Magician is aligned neutral. He must rely upon his \
! 114: Intelligence and spell casting abilities to remain alive. There- fore, he \
! 115: does not receive as many new hit-points per new experience level. The \
! 116: default attribute values of the Magician are: Int=14, Str=10, Wis=7, \
! 117: Dxt=16, Con=15, and Chr=12. Default gold amount is 2000 pieces and \
! 118: default hit-points are 21.";
! 119:
! 120: static char *game_cleric = "Wisdom is the main attribute of the Cleric. The \
! 121: Cleric's ability to give or offer prayers, receive their due, and affect \
! 122: the undead are much greater than that of the Paladin. Like the Magician, \
! 123: the Cleric can not wield the two- handed or bastard swords, but he can \
! 124: wear any armor. His natural quest item is the Horn of Geryon. The Cleric \
! 125: is aligned neutral and he must rely upon his Wisdom and prayer ability to \
! 126: remain alive. He therefore, does not receive as many new hit-points per \
! 127: new experience level. The default attribute values of the Cleric are: Int=7, \
! 128: Str=10, Wis=14, Dxt=16, Con=15, and Chr=12. The default gold amount is 2000 \
! 129: pieces and default hit-points are 21.";
! 130:
! 131:
! 132: static char *game_food ="There are three types of food, regular food rations, \
! 133: various fruits, and slime- molds. Eating regular food will add 750 points to \
! 134: your current food level [see the CTRL(E) command]. Eating fruit adds \
! 135: 300 points. Certain fruits also cure you, add an attribute point, add a \
! 136: hit-point, increase your armor, give you additional prayer, chant, or spell \
! 137: casting abilities, or add experience points. Eating slime-mold (monster \
! 138: food) can make you ill, but they will add 100 points to your current food \
! 139: level. If your food level points drop below 100 you will become weak. You \
! 140: will faint and might die if they drop to 0 or below. At the other extreme, \
! 141: if your food level points reach 2000 (and above) you will become satiated. \
! 142: Risk eating more and you could choke to death.";
! 143:
! 144: /*
! 145: static char *game_monst ="To be updated.";
! 146: static char *game_potion ="To be updated...";
! 147: static char *game_scroll ="To be updated...";
! 148: static char *game_ring ="To be updated...";
! 149: static char *game_stick ="To be updated...";
! 150: static char *game_weapon ="To be updated...";
! 151: static char *game_armor ="To be updated...";
! 152: static char *game_miscm ="To be updated...";
! 153: static char *game_qitems ="To be updated...";
! 154: static char *game_dungeon ="To be updated...";
! 155: static char *game_traps ="To be updated...";
! 156: static char *game_mazes ="To be updated...";
! 157: static char *game_option ="To be updated...";
! 158: static char *game_begin ="To be updated...";
! 159: */
! 160:
! 161: /* help list */
! 162: static struct h_list helpstr[] = {
! 163: { '?', " Print help" },
! 164: { '/', " Identify object" },
! 165: { '=', " Identify a screen character" },
! 166: { ' ', "" },
! 167: { 'h', " Move left" },
! 168: { 'j', " Move down" },
! 169: { 'k', " Move up" },
! 170: { 'l', " Move right" },
! 171: { 'y', " Move up and left" },
! 172: { 'u', " Move up and right" },
! 173: { 'b', " Move down and left" },
! 174: { 'n', " Move down and right" },
! 175: { 'H', " Run left" },
! 176: { 'J', " Run down" },
! 177: { 'K', " Run up" },
! 178: { 'L', " Run right" },
! 179: { 'Y', " Run up & left" },
! 180: { 'U', " Run up & right" },
! 181: { 'B', " Run down & left" },
! 182: { 'N', " Run down & right" },
! 183: { ' ', "" },
! 184: { '>', " Go down a staircase" },
! 185: { '<', " Go up a staircase" },
! 186: { '\\', " Game descriptions" },
! 187: { '.', " Rest for a while" },
! 188: { '*', " Count gold pieces" },
! 189: { 'a', " Affect the undead" },
! 190: { 'A', " Choose artifact (equipage)" },
! 191: { 'c', " Chant a mantra" },
! 192: { 'C', " Cast a spell" },
! 193: { 'd', " Drop something" },
! 194: { 'D', " Dip something (into a pool)" },
! 195: { 'e', " Eat food or fruit" },
! 196: { 'f', "<dir> Forward until find something" },
! 197: { 'F', " Frighten a monster" },
! 198: { 'g', " Give food to monster" },
! 199: { 'G', " Sense for gold" },
! 200: { 'i', " Inventory" },
! 201: { 'I', " Inventory (single item)" },
! 202: { 'm', " Mark an object (specific)" },
! 203: { 'o', " Examine and/or set options" },
! 204: { 'O', " Character type and quest item" },
! 205: { 'p', " Pray to the powers that be" },
! 206: { 'P', " Pick up object(s)" },
! 207: { 'q', " Quaff a potion" },
! 208: { 'Q', " Quit the game" },
! 209: { 'r', " Read a scroll" },
! 210: { 's', " Search for a trap/secret door" },
! 211: { 'S', " Save your game" },
! 212: { 't', "<dir> Throw something" },
! 213: { 'T', " Take off something" },
! 214: { 'v', " Print program version" },
! 215: { 'w', " Wield a weapon" },
! 216: { 'W', " Wear something" },
! 217: { 'X', " Sense for traps" },
! 218: { 'z', "<dir> Zap a wand or staff" },
! 219: { ' ', "" },
! 220: { '^', " Set a trap" },
! 221: { '$', " Price an item (trading post)" },
! 222: { '#', " Buy an item (trading post)" },
! 223: { '%', " Sell an item (trading post)" },
! 224: { '!', " Shell escape" },
! 225: { ESC, " Cancel command (Esc)" },
! 226: { ' ', "" },
! 227: { CTRL('B'), " Current score (if you win)" },
! 228: { CTRL('E'), " Current food level" },
! 229: { CTRL('L'), " Redraw the screen" },
! 230: { CTRL('N'), " Name an object or a monster" },
! 231: { CTRL('O'), " Character affect status" },
! 232: { CTRL('R'), " Repeat last message" },
! 233: { CTRL('T'), "<dir> Take (steal) from (direction)" },
! 234: { CTRL('U'), " Use a magic item" },
! 235: { 0, "" }
! 236: } ;
! 237:
! 238: /* wizard help list */
! 239: static struct h_list wiz_help[] = {
! 240: { ' ', "" },
! 241: { '+', " Random fortunes" },
! 242: { 'M', " Make an object" },
! 243: { 'V', " Display vlevel and turns" },
! 244: { CTRL('A'), " System activity" },
! 245: { CTRL('C'), " Move to another dungeon level" },
! 246: { CTRL('D'), " Go down 1 dungeon level" },
! 247: { CTRL('F'), " Display the entire level" },
! 248: { CTRL('G'), " Charge wands and staffs" },
! 249: { CTRL('H'), " Jump 9 experience levels" },
! 250: { CTRL('I'), " Inventory of level" },
! 251: { CTRL('J'), " Teleport somewhere" },
! 252: { CTRL('K'), " Identify an object" },
! 253: { CTRL('M'), " Recharge wand or staff" },
! 254: { CTRL('P'), " Toggle wizard status" },
! 255: { CTRL('X'), " Detect monsters" },
! 256: { CTRL('Y'), " Display food levels" },
! 257: { 0, "" }
! 258: };
! 259:
! 260: /* item help list */
! 261: static struct item_list item_help[] = {
! 262: { '@', " You (visible)" },
! 263: { '_', " You (invisible)" },
! 264: { ' ', "" },
! 265: { ':', " Food ration or fruit (eat)" },
! 266: { '!', " Potion (quaff)" },
! 267: { '?', " Scroll (read)" },
! 268: { '=', " Ring (wear)" },
! 269: { ')', " Weapon (wield)" },
! 270: { ']', " Armor (wear)" },
! 271: { '/', " Wand or staff (zap)" },
! 272: { ';', " Magic item (use)" },
! 273: { ',', " Artifact (quest item)" },
! 274: { '*', " Gold or zapped missile" },
! 275: { ' ', "" },
! 276: { '$', " Magical item in room" },
! 277: { '>', " Blessed magical item" },
! 278: { '<', " Cursed magical item" },
! 279: { ' ', " " },
! 280: { '`', " Dart trap" },
! 281: { '{', " Arrow trap" },
! 282: { '}', " Bear trap" },
! 283: { '~', " Teleport trap" },
! 284: { '$', " Sleeping gas trap" },
! 285: { '>', " Trap door" },
! 286: { '<', " Outer region entrance" },
! 287: { '\'', " Maze entrance" },
! 288: { '^', " Trading post entrance" },
! 289: { '"', " Magic pool or lake" },
! 290: { ' ', " Solid rock or mountain" },
! 291: { '.', " Floor of a room or meadow" },
! 292: { '%', " Stairs (up or down)" },
! 293: { '+', " Doorway" },
! 294: { '&', " Secret doorway" },
! 295: { '#', " Passage between rooms" },
! 296: { '\\', " Forest" },
! 297: { HORZWALL, " Horizontal wall of a room" },
! 298: { VERTWALL, " Vertical wall of a room" },
! 299: { 0, "" }
! 300: };
! 301:
! 302: void
! 303: ident_hero(void)
! 304: {
! 305: bool doit = TRUE;
! 306:
! 307: wclear(hw);
! 308: wprintw(hw, "Characters, Items, and Game Descriptions:\n");
! 309: wprintw(hw, "-----------------------------------------\n");
! 310: wprintw(hw, "a) Fighter m) Scrolls\n");
! 311: wprintw(hw, "b) Thief n) Rings\n");
! 312: wprintw(hw, "c) Assassin o) Wands and Staffs\n");
! 313: wprintw(hw, "d) Ranger p) Weapons\n");
! 314: wprintw(hw, "e) Paladin q) Armors\n");
! 315: wprintw(hw, "f) Monk r) Miscellaneous Magic Items\n");
! 316: wprintw(hw, "g) Magician s) Quest Items (Artifacts and Relics)\n");
! 317: wprintw(hw, "h) Cleric t) The Dungeon\n");
! 318: wprintw(hw, "i) Druid u) Traps\n");
! 319: wprintw(hw, "j) Monsters v) Mazes and Outer Regions\n");
! 320: wprintw(hw, "k) Foods w) Setting game options\n");
! 321: wprintw(hw, "l) Potions x) Starting out\n");
! 322: wprintw(hw, "\nEnter a letter: ");
! 323: draw(hw);
! 324: while (doit) {
! 325: switch (wgetch(cw)) {
! 326: case EOF:
! 327: case ESC:
! 328: doit = FALSE;
! 329: when 'a':
! 330: wclear(hw);
! 331: wprintw(hw, "Fighter Characteristics:");
! 332: mvwaddstr(hw, 2, 0, game_fighter);
! 333: draw(hw);
! 334: doit = FALSE;
! 335: when 'b':
! 336: wclear(hw);
! 337: wprintw(hw, "Thief Characteristics:");
! 338: mvwaddstr(hw, 2, 0, game_thief);
! 339: draw(hw);
! 340: doit = FALSE;
! 341: when 'c':
! 342: wclear(hw);
! 343: wprintw(hw, "Assassin Characteristics:");
! 344: mvwaddstr(hw, 2, 0, game_assassin);
! 345: draw(hw);
! 346: doit = FALSE;
! 347: when 'd':
! 348: wclear(hw);
! 349: wprintw(hw, "Ranger Characteristics:");
! 350: mvwaddstr(hw, 2, 0, game_ranger);
! 351: draw(hw);
! 352: doit = FALSE;
! 353: when 'e':
! 354: wclear(hw);
! 355: wprintw(hw, "Paladin Characteristics:");
! 356: mvwaddstr(hw, 2, 0, game_paladin);
! 357: draw(hw);
! 358: doit = FALSE;
! 359: when 'f':
! 360: wclear(hw);
! 361: wprintw(hw, "Monk Characteristics:");
! 362: mvwaddstr(hw, 2, 0, game_monk);
! 363: draw(hw);
! 364: doit = FALSE;
! 365: when 'g':
! 366: wclear(hw);
! 367: wprintw(hw, "Magician Characteristics:");
! 368: mvwaddstr(hw, 2, 0, game_magician);
! 369: draw(hw);
! 370: doit = FALSE;
! 371: when 'h':
! 372: wclear(hw);
! 373: wprintw(hw, "Cleric Characteristics:");
! 374: mvwaddstr(hw, 2, 0, game_cleric);
! 375: draw(hw);
! 376: doit = FALSE;
! 377: when 'i':
! 378: wclear(hw);
! 379: wprintw(hw, "Druid Characteristics:");
! 380: mvwaddstr(hw, 2, 0, game_druid);
! 381: draw(hw);
! 382: doit = FALSE;
! 383: when 'j':
! 384: wclear(hw);
! 385: wprintw(hw, "Monster Characteristics:");
! 386: draw(hw);
! 387: doit = FALSE;
! 388: when 'k':
! 389: wclear(hw);
! 390: wprintw(hw, "Foods:");
! 391: mvwaddstr(hw, 2, 0, game_food);
! 392: draw(hw);
! 393: doit = FALSE;
! 394: when 'l':
! 395: wclear(hw);
! 396: wprintw(hw, "Potions:");
! 397: draw(hw);
! 398: doit = FALSE;
! 399: when 'm':
! 400: wclear(hw);
! 401: wprintw(hw, "Scrolls:");
! 402: draw(hw);
! 403: doit = FALSE;
! 404: when 'n':
! 405: wclear(hw);
! 406: wprintw(hw, "Rings:");
! 407: draw(hw);
! 408: doit = FALSE;
! 409: when 'o':
! 410: wclear(hw);
! 411: wprintw(hw, "Wands and Staffs:");
! 412: draw(hw);
! 413: doit = FALSE;
! 414: when 'p':
! 415: wclear(hw);
! 416: wprintw(hw, "Weapons:");
! 417: draw(hw);
! 418: doit = FALSE;
! 419: when 'q':
! 420: wclear(hw);
! 421: wprintw(hw, "Armors:");
! 422: draw(hw);
! 423: doit = FALSE;
! 424: when 'r':
! 425: wclear(hw);
! 426: wprintw(hw, "Miscellaneous Magic Items:");
! 427: draw(hw);
! 428: doit = FALSE;
! 429: when 's':
! 430: wclear(hw);
! 431: wprintw(hw, "Quest Items (Artifacts and Relics):");
! 432: draw(hw);
! 433: doit = FALSE;
! 434: when 't':
! 435: wclear(hw);
! 436: wprintw(hw, "The Dungeon:");
! 437: draw(hw);
! 438: doit = FALSE;
! 439: when 'u':
! 440: wclear(hw);
! 441: wprintw(hw, "Traps:");
! 442: draw(hw);
! 443: doit = FALSE;
! 444: when 'v':
! 445: wclear(hw);
! 446: wprintw(hw, "Mazes and Outer Regions:");
! 447: draw(hw);
! 448: doit = FALSE;
! 449: when 'w':
! 450: wclear(hw);
! 451: wprintw(hw, "Setting game options:");
! 452: draw(hw);
! 453: doit = FALSE;
! 454: when 'x':
! 455: wclear(hw);
! 456: wprintw(hw, "Starting out:");
! 457: draw(hw);
! 458: doit = FALSE;
! 459: otherwise:
! 460: doit = TRUE;
! 461: }
! 462: }
! 463: wmove(hw, lines-1, 0);
! 464: wprintw(hw, spacemsg);
! 465: draw(hw);
! 466: wait_for(' ');
! 467: wclear(hw);
! 468: draw(hw);
! 469: wmove(cw, 0, 0);
! 470: wclrtoeol(cw);
! 471: status(FALSE);
! 472: touchwin(cw);
! 473: }
! 474:
! 475: /*
! 476: * Real Help
! 477: */
! 478:
! 479: void
! 480: help(void)
! 481: {
! 482: register struct h_list *strp = helpstr;
! 483: register struct item_list *itemp = item_help;
! 484: struct h_list *wizp = wiz_help;
! 485: register char helpch;
! 486: register int cnt;
! 487:
! 488: msg("Character you want help for (* for commands, @ for items): ");
! 489: helpch = wgetch(cw);
! 490: mpos = 0;
! 491: /*
! 492: * If it's not a *, @, or +, then just print help string
! 493: * for the character entered.
! 494: */
! 495: if (helpch != '*' && helpch != '@' && helpch != '+') {
! 496: wmove(msgw, 0, 0);
! 497: while (strp->h_ch) {
! 498: if (strp->h_ch == helpch) {
! 499: msg("%s%s", unctrl(strp->h_ch), strp->h_desc);
! 500: return;
! 501: }
! 502: strp++;
! 503: }
! 504: if (wizard) {
! 505: while (wizp->h_ch) {
! 506: if (wizp->h_ch == helpch) {
! 507: msg("%s%s", unctrl(wizp->h_ch), wizp->h_desc);
! 508: return;
! 509: }
! 510: wizp++;
! 511: }
! 512: }
! 513: msg("Unknown command '%s'", unctrl(helpch));
! 514: return;
! 515: }
! 516:
! 517: /* fortunes - but let's not say so - explicitly */
! 518: if (helpch == '+') {
! 519: msg("Meaningless command '+'");
! 520: return;
! 521: }
! 522:
! 523: /*
! 524: * Print help for everything else
! 525: */
! 526: if (helpch == '*') {
! 527: wclear(hw);
! 528: cnt = 0;
! 529: while (strp->h_ch) {
! 530: mvwaddstr(hw, cnt % 23, cnt > 22 ? 40 : 0, unctrl(strp->h_ch));
! 531: waddstr(hw, strp->h_desc);
! 532: strp++;
! 533: if (++cnt >= 46 && strp->h_ch) {
! 534: wmove(hw, lines-1, 0);
! 535: wprintw(hw, morestr);
! 536: draw(hw);
! 537: wait_for(' ');
! 538: wclear(hw);
! 539: cnt = 0;
! 540: }
! 541: }
! 542: if (wizard) {
! 543: while (wizp->h_ch) {
! 544: mvwaddstr(hw, cnt % 23, cnt > 22 ? 40 : 0, unctrl(wizp->h_ch));
! 545: waddstr(hw, wizp->h_desc);
! 546: wizp++;
! 547: if (++cnt >= 46 && wizp->h_ch) {
! 548: wmove(hw, lines-1, 0);
! 549: wprintw(hw, morestr);
! 550: draw(hw);
! 551: wait_for(' ');
! 552: wclear(hw);
! 553: cnt = 0;
! 554: }
! 555: }
! 556: }
! 557: }
! 558: if (helpch == '@') {
! 559: wclear(hw);
! 560: cnt = 0;
! 561: while (itemp->item_ch) {
! 562: mvwaddstr(hw, cnt % 23, cnt > 22 ? 40 : 0, unctrl(itemp->item_ch));
! 563: waddstr(hw, itemp->item_desc);
! 564: itemp++;
! 565: if (++cnt >= 46 && itemp->item_ch) {
! 566: wmove(hw, lines-1, 0);
! 567: wprintw(hw, morestr);
! 568: draw(hw);
! 569: wait_for(' ');
! 570: wclear(hw);
! 571: cnt = 0;
! 572: }
! 573: }
! 574: }
! 575: wmove(hw, lines-1, 0);
! 576: wprintw(hw, spacemsg);
! 577: draw(hw);
! 578: wait_for(' ');
! 579: wclear(hw);
! 580: draw(hw);
! 581: wmove(cw, 0, 0);
! 582: wclrtoeol(cw);
! 583: status(FALSE);
! 584: touchwin(cw);
! 585: }
! 586:
! 587: /*
! 588: * identify:
! 589: * Tell the player what a certain thing is.
! 590: */
! 591:
! 592: void
! 593: identify(unsigned char ch)
! 594: {
! 595: register char *str = NULL;
! 596:
! 597: if (ch == 0) {
! 598: msg("What do you want identified? ");
! 599: ch = wgetch(cw);
! 600: mpos = 0;
! 601: if (ch == ESC)
! 602: {
! 603: msg("");
! 604: return;
! 605: }
! 606: }
! 607: if (isalpha(ch))
! 608: msg("Use the \"=\" command to identify monsters. ");
! 609: else switch(ch)
! 610: {
! 611: case VPLAYER: str = "You (visibly)";
! 612: when IPLAYER: str = "You (invisibly)";
! 613: when GOLD: str = "Gold";
! 614: when STAIRS: str = (levtype == OUTSIDE) ? "Entrance to the dungeon"
! 615: : "Stairway";
! 616: when DOOR: str = "Doorway";
! 617: when SECRETDOOR:str = "Secret door";
! 618: when FLOOR: str = (levtype == OUTSIDE) ? "Meadow" : "Room floor";
! 619: when PASSAGE: str = "Passage";
! 620: when VERTWALL:
! 621: case HORZWALL:
! 622: str = (levtype == OUTSIDE) ? "Boundary of sector"
! 623: : "Wall of a room";
! 624: when POST: str = "Trading post";
! 625: when POOL: str = (levtype == OUTSIDE) ? "Lake"
! 626: : "A shimmering pool";
! 627: when TRAPDOOR: str = "Trap door";
! 628: when ARROWTRAP: str = "Arrow trap";
! 629: when SLEEPTRAP: str = "Sleeping gas trap";
! 630: when BEARTRAP: str = "Bear trap";
! 631: when TELTRAP: str = "Teleport trap";
! 632: when DARTTRAP: str = "Dart trap";
! 633: when MAZETRAP: str = "Entrance to a maze";
! 634: when WORMHOLE: str = "Entrance to a worm hole";
! 635: when FOREST: str = "Forest";
! 636: when ' ' : str = (levtype == OUTSIDE) ? "Mountain"
! 637: : "Solid rock";
! 638: when FOOD: str = "Food";
! 639: when POTION: str = "Potion";
! 640: when SCROLL: str = "Scroll";
! 641: when RING: str = "Ring";
! 642: when WEAPON: str = "Weapon";
! 643: when ARMOR: str = "Armor";
! 644: when MM: str = "Miscellaneous magic";
! 645: when STICK: str = "Wand or staff";
! 646: when RELIC: str = "Artifact";
! 647: otherwise: str = "Unknown character";
! 648: }
! 649: if (!isalpha(ch))
! 650: msg("%s %s", unctrl(ch), str);
! 651: }
! 652:
! 653:
CVSweb