Annotation of early-roguelike/xrogue/help.c, Revision 1.1.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