Annotation of early-roguelike/urogue/artifact.c, Revision 1.1.1.1
1.1 rubenllo 1: /*
2: artifact.c - functions for dealing with artifacts
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: See the file LICENSE.TXT for full copyright and licensing information.
9: */
10:
11: #include <stdlib.h>
12: #include <ctype.h>
13: #include "rogue.h"
14:
15: /*
16: apply()
17: apply an artifact
18: */
19:
20: void
21: apply(void)
22: {
23: struct linked_list *item;
24: struct object *obj;
25: int which;
26: int chance;
27:
28: if ((item = get_item("activate", ARTIFACT)) == NULL)
29: return;
30:
31: obj = OBJPTR(item);
32: which = obj->o_which;
33:
34: if (!(obj->ar_flags & ISACTIVE))
35: {
36: chance = rnd(100) - 10 * rnd(luck);
37: debug("Rolled %d.", chance);
38: if (chance < 5)
39: do_major();
40: else if (chance < 50)
41: do_minor(obj);
42: else
43: obj->ar_flags |= ISACTIVE;
44: }
45:
46: if (obj->ar_flags & ISACTIVE)
47: {
48: switch (which)
49: {
50: case TR_PURSE: do_bag(obj);
51: break;
52: case TR_PHIAL: do_phial();
53: break;
54: case TR_AMULET: do_amulet();
55: break;
56: case TR_PALANTIR: do_palantir();
57: break;
58: case TR_CROWN: do_crown();
59: break;
60: case TR_SCEPTRE: do_sceptre();
61: break;
62: case TR_SILMARIL: do_silmaril();
63: break;
64: case TR_WAND: do_wand();
65: break;
66: default: nothing_message(ISCURSED);
67: return;
68: }
69: }
70:
71: if (rnd(pstats.s_lvl) < 6)
72: do_minor(obj);
73:
74: turn_on(player, POWEREAT);
75: }
76:
77: /*
78: possessed(int artifact)
79: was the hero carrying a particular artifact
80: */
81:
82: int
83: possessed(int artifact)
84: {
85: return (picked_artifact >> artifact) & 1;
86: }
87:
88: /*
89: is_carrying(int artifact)
90: is the hero carrying a particular artifact
91: */
92:
93: int
94: is_carrying(int artifact)
95: {
96: return (has_artifact >> artifact) & 1;
97: }
98:
99: /*
100: make_artifact()
101: is it time to make a new artifact?
102: */
103:
104: int
105: make_artifact(void)
106: {
107: int i;
108:
109: mpos = 0;
110:
111: debug("Artifact possession and picked flags : %x %x.",
112: has_artifact, picked_artifact);
113:
114: for(i = 0; i < maxartifact; i++)
115: {
116: if (!is_carrying(i) && arts[i].ar_level <= level)
117: return TRUE;
118: }
119:
120: return FALSE;
121: }
122:
123: /*
124: new_artifact(int which, struct object *cur)
125: make a specified artifact
126: */
127:
128: struct object *
129: new_artifact(int which, struct object *cur)
130: {
131: if (which >= maxartifact)
132: {
133: debug("Bad artifact %d. Random one created.", which);
134: which = rnd(maxartifact);
135: }
136:
137: if (which < 0)
138: {
139: for (which = 0; which < maxartifact; which++)
140: if (!is_carrying(which) && arts[which].ar_level <= level)
141: break;
142: }
143:
144: debug("Artifact number: %d.", which);
145:
146: cur->o_hplus = cur->o_dplus = 0;
147: cur->o_damage = cur->o_hurldmg = "0d0";
148: cur->o_ac = 11;
149: cur->o_mark[0] = '\0';
150: cur->o_type = ARTIFACT;
151: cur->o_which = which;
152: cur->o_weight = arts[which].ar_weight;
153: cur->o_flags = 0;
154: cur->o_group = 0;
155: cur->o_count = 1;
156: cur->o_bag = NULL;
157: cur->ar_flags = 0;
158:
159: return(cur);
160: }
161:
162: /*
163: do_minor(struct object *tr)
164: side effects and minor malevolent effects of artifacts
165: */
166:
167: void
168: do_minor(struct object *tr)
169: {
170: int which;
171: long loss;
172:
173: which = rnd(110);
174:
175: debug("Rolled %d.", which);
176:
177: switch (which)
178: {
179: case 0:
180: seemsg("You develop some acne on your face.");
181: break;
182:
183: case 1:
184: if (on(player, CANSCENT))
185: {
186: msg("A sudden whiff of BO causes you to faint.");
187: no_command = STONETIME;
188: }
189: else if (off(player, ISUNSMELL))
190: msg("You begin to smell funny.");
191: break;
192:
193: case 2:
194: seemsg("A wart grows on the end of your nose.");
195: break;
196:
197: case 3:
198: hearmsg("Your hear strange noises in the distance.");
199: break;
200:
201: case 4:
202: hearmsg("You hear shuffling in the distance.");
203: break;
204:
205: case 5:
206: hearmsg("You hear clanking in the distance.");
207: break;
208:
209: case 6:
210: hearmsg("You hear water dripping onto the floor.");
211: break;
212:
213: case 7:
214: hearmsg("The dungeon goes strangely silent.");
215: break;
216:
217: case 8:
218: msg("You suddenly feel very warm.");
219: break;
220:
221: case 9:
222: msg("You feel very hot.");
223: break;
224:
225: case 10:
226: msg("A blast of heat hits you.");
227: break;
228:
229: case 11:
230: {
231: struct room *rp;
232:
233: if (off(player, ISBLIND))
234: msg("A pillar of flame leaps up beside you.");
235: else
236: msg("You feel something very hot nearby.");
237:
238: if (ntraps + 1 < 2 * MAXTRAPS &&
239: fallpos(hero, &traps[ntraps].tr_pos))
240: {
241: mvaddch(traps[ntraps].tr_pos.y, traps[ntraps].tr_pos.x,
242: FIRETRAP);
243: traps[ntraps].tr_type = FIRETRAP;
244: traps[ntraps].tr_flags = ISFOUND;
245: traps[ntraps].tr_show = FIRETRAP;
246: ntraps++;
247:
248: if ((rp = roomin(hero)) != NULL)
249: {
250: rp->r_flags &= ~ISDARK;
251: light(&hero);
252: mvwaddch(cw, hero.y, hero.x, PLAYER);
253: }
254: }
255: }
256: break;
257:
258: case 12:
259: msg("You feel a blast of hot air.");
260: break;
261:
262: case 13:
263: msg("You feel very cold.");
264: break;
265:
266: case 14:
267: msg("You break out in a cold sweat.");
268: break;
269:
270: case 15:
271: if (off(player, ISBLIND) && cur_armor == NULL)
272: msg("You are covered with frost.");
273: else if (off(player, ISBLIND))
274: msg("Your armor is covered with frost.");
275: else if (cur_armor == NULL)
276: msg("Your body feels very cold and you begin to shiver.");
277: else
278: msg("Your armor feels very cold. You hear cracking ice.");
279: break;
280:
281: case 16:
282: msg("A cold wind whistles through the dungeon.");
283: break;
284:
285: case 17:
286: {
287: int change;
288:
289: change = 18 - pstats.s_str;
290: chg_str(change, TRUE, FALSE);
291: chg_dext(-change, TRUE, FALSE);
292:
293: if (change > 0)
294: msg("You feel stronger and clumsier now.");
295: else if (change < 0)
296: msg("You feel weaker and more dextrous now.");
297: else
298: nothing_message(ISCURSED);
299: }
300: break;
301:
302: case 18:
303: msg("You begin to itch all over.");
304: break;
305:
306: case 19:
307: msg("You begin to feel hot and itchy.");
308: break;
309:
310: case 20:
311: msg("You feel a burning itch.");
312: chg_dext(-1, FALSE, TRUE);
313:
314: if (off(player, HASITCH))
315: {
316: turn_on(player, HASITCH);
317: light_fuse(FUSE_UNITCH, 0, roll(4,6), AFTER);
318: }
319: else
320: lengthen_fuse(FUSE_UNITCH, roll(4,6));
321: break;
322:
323: case 21:
324: if (off(player, ISBLIND))
325: msg("Your skin begins to flake and peel.");
326: else
327: msg("You feel an urge to scratch an itch.");
328: break;
329:
330:
331: case 22:
332: seemsg("Your hair begins to turn grey.");
333: break;
334:
335: case 23:
336: seemsg("Your hair begins to turn white.");
337: break;
338:
339: case 24:
340: seemsg("Some of your hair instantly turns white.");
341: break;
342:
343: case 25:
344: seemsg("You are covered with long white hair.");
345: break;
346:
347: case 26:
348: seemsg("You are covered with long red hair.");
349: break;
350:
351: case 27:
352: msg("You grow a beard.");
353: break;
354:
355: case 28:
356: msg("Your hair falls out.");
357: break;
358:
359: case 29:
360: msg("You feel a burning down below.");
361: break;
362:
363: case 30:
364: msg("Your toes fall off.");
365: break;
366:
367: case 31:
368: msg("You grow some extra toes.");
369: break;
370:
371: case 32:
372: msg("You grow some extra fingers.");
373: break;
374:
375: case 33:
376: msg("You grow an extra thumb.");
377: break;
378:
379: case 34:
380: msg("Your nose falls off.");
381: break;
382:
383: case 35:
384: msg("Your nose gets bigger.");
385: break;
386:
387: case 36:
388: msg("Your nose shrinks.");
389: break;
390:
391: case 37:
392: msg("An eye grows on your forehead.");
393: break;
394:
395: case 38:
396: seemsg("You see beady eyes watching from a distance.");
397: break;
398:
399: case 39:
400: msg("The dungeon rumbles for a moment.");
401: break;
402:
403: case 40:
404: seemsg("A flower grows on the floor next to you.");
405: break;
406:
407: case 41:
408: msg("You are stunned by a psionic blast.");
409:
410: if (on(player, ISHUH))
411: lengthen_fuse(FUSE_UNCONFUSE, rnd(40) + (HUHDURATION * 3));
412: else
413: {
414: light_fuse(FUSE_UNCONFUSE,0,rnd(40)+(HUHDURATION * 3), AFTER);
415: turn_on(player, ISHUH);
416: }
417: break;
418:
419: case 42:
420: msg("You are confused by thousands of voices in your head.");
421:
422: if (on(player, ISHUH))
423: lengthen_fuse(FUSE_UNCONFUSE, rnd(10) + (HUHDURATION * 2));
424: else
425: {
426: light_fuse(FUSE_UNCONFUSE,0,rnd(10)+(HUHDURATION * 2), AFTER);
427: turn_on(player, ISHUH);
428: }
429: break;
430:
431: case 43:
432: hearmsg("You hear voices in the distance.");
433: break;
434:
435: case 44:
436: msg("You feel a strange pull.");
437: teleport();
438:
439: if (off(player, ISCLEAR))
440: {
441: if (on(player, ISHUH))
442: lengthen_fuse(FUSE_UNCONFUSE, rnd(8) + HUHDURATION);
443: else
444: {
445: light_fuse(FUSE_UNCONFUSE, 0, rnd(8) + HUHDURATION, AFTER);
446: turn_on(player, ISHUH);
447: }
448: }
449: break;
450:
451: case 45:
452: msg("You feel less healthy now.");
453: pstats.s_const = max(pstats.s_const - 1, 3);
454: max_stats.s_const = max(max_stats.s_const - 1, 3);
455: break;
456:
457: case 46:
458: msg("You feel weaker now.");
459: chg_str(-1, TRUE, FALSE);
460: break;
461:
462: case 47:
463: msg("You feel less wise now.");
464: pstats.s_wisdom = max(pstats.s_wisdom - 1, 3);
465: max_stats.s_wisdom = max(max_stats.s_wisdom - 1, 3);
466: break;
467:
468: case 48:
469: msg("You feel less dextrous now.");
470: chg_dext(-1, TRUE, FALSE);
471: break;
472:
473: case 49:
474: msg("You feel less intelligent now.");
475: pstats.s_intel = max(pstats.s_intel - 1, 3);
476: max_stats.s_intel = max(max_stats.s_intel - 1, 3);
477: break;
478:
479: case 50:
480: msg("A trap door opens underneath your feet.");
481: mpos = 0;
482: level++;
483: new_level(NORMLEV,0);
484:
485: if (rnd(4) < 2)
486: {
487: addmsg("You are damaged by the fall");
488:
489: if ((pstats.s_hpt -= roll(1, 6)) <= 0)
490: {
491: addmsg("! The fall killed you.");
492: endmsg();
493: death(D_FALL);
494: return;
495: }
496: }
497:
498: addmsg("!");
499: endmsg();
500:
501: if (off(player, ISCLEAR) && rnd(4) < 3)
502: {
503: if (on(player, ISHUH))
504: lengthen_fuse(FUSE_UNCONFUSE, rnd(8) + HUHDURATION);
505: else
506: light_fuse(FUSE_UNCONFUSE, 0, rnd(8) + HUHDURATION, AFTER);
507:
508: turn_on(player, ISHUH);
509: }
510: else
511: msg("You feel dizzy for a moment, but it quickly passes.");
512:
513: break;
514:
515: case 51:
516: msg("A maze entrance opens underneath your feet.");
517: mpos = 0;
518: level++;
519: new_level(MAZELEV,0);
520:
521: if (rnd(4) < 2)
522: {
523: addmsg("You are damaged by the fall");
524:
525: if ((pstats.s_hpt -= roll(1, 6)) <= 0)
526: {
527: addmsg("! The fall killed you.");
528: endmsg();
529: death(D_FALL);
530: return;
531: }
532: }
533: addmsg("!");
534: endmsg();
535:
536: if (off(player, ISCLEAR) && rnd(4) < 3)
537: {
538: if (on(player, ISHUH))
539: lengthen_fuse(FUSE_UNCONFUSE, rnd(8) + HUHDURATION);
540: else
541: light_fuse(FUSE_UNCONFUSE,0, rnd(8) + HUHDURATION, AFTER);
542:
543: turn_on(player, ISHUH);
544: }
545: else
546: msg("You feel dizzy for a moment, but it quickly passes.");
547:
548: break;
549:
550: case 52:
551: hearmsg("You hear a wailing sound in the distance.");
552: aggravate();
553: break;
554:
555: case 53:
556: read_scroll(&player, S_HOLD, ISCURSED);
557: break;
558:
559: case 54:
560: msg("You can't move.");
561: no_command = 3 * HOLDTIME;
562: break;
563:
564: case 55:
565: hearmsg("You hear a buzzing sound.");
566: aggravate();
567: break;
568:
569: case 56:
570: msg("Your limbs stiffen.");
571: no_command = 3 * STONETIME;
572: break;
573:
574: case 57:
575: msg("You feel a rock in your shoe hurting your foot.");
576: turn_on(player, STUMBLER);
577: break;
578:
579: case 58:
580: msg("You get a hollow feeling in your stomach.");
581: food_left -= 500;
582: break;
583:
584: case 59:
585: msg("Your purse feels lighter.");
586:
587: loss = 50L + ulrnd(purse / 2L);
588: purse = (purse > loss) ? purse - loss : 0L;
589: break;
590:
591: case 60:
592: msg("A pixie appears and grabs gold from your purse.");
593:
594: loss = 50L + rnd(50);
595: purse = (purse > loss) ? purse - loss : 0L;
596: break;
597:
598: case 61:
599: msg("You feel a tingling sensation all over.");
600: pstats.s_hpt -= ulrnd(pstats.s_hpt / 3L);
601: break;
602:
603: case 62:
604: msg("You feel a pull downwards.");
605: break;
606:
607: case 63:
608: msg("You feel a strange pull downwards.");
609: break;
610:
611: case 64:
612: msg("You feel a peculiar pull downwards.");
613: break;
614:
615: case 65:
616: msg("You have a strange urge to go down.");
617: break;
618:
619: case 66:
620: msg("You feel a pull upwards.");
621: break;
622:
623: case 67:
624: msg("You feel a strange pull upwards.");
625: break;
626:
627: case 68:
628: msg("You have a strange feeling for a moment.");
629: break;
630:
631: case 69:
632: msg("You float in the air for a moment.");
633: break;
634:
635: case 70:
636: msg("You feel very heavy for a moment.");
637: break;
638:
639: case 71:
640: msg("You feel a strange sense of loss.");
641: break;
642:
643: case 72:
644: msg("You feel the earth spinning underneath your feet.");
645: break;
646:
647: case 73:
648: msg("You feel in touch with a Universal Oneness.");
649: break;
650:
651: case 74:
652: hearmsg("You hear voices in the distance.");
653: break;
654:
655: case 75:
656: msg("A strange feeling of power comes over you.");
657: break;
658:
659: case 76:
660: msg("You feel a strange sense of unease.");
661: break;
662:
663: case 77:
664: msg("You feel Lady Luck is looking the other way.");
665: luck++;
666: break;
667:
668: case 78:
669: msg("You feel your pack vibrate for a moment.");
670: break;
671:
672: case 79:
673: msg("You feel someone is watching you.");
674: break;
675:
676: case 80:
677: msg("You feel your hair standing on end.");
678: break;
679:
680: case 81:
681: msg("Wait! The walls are moving!");
682: new_level(NORMLEV,0);
683: break;
684:
685: case 82:
686: msg("Wait! Walls are appearing out of nowhere!");
687: new_level(MAZELEV,0);
688: break;
689:
690: case 83:
691: blue_light(ISCURSED);
692: break;
693:
694: case 84:
695: msg("Your mind goes blank for a moment.");
696: wclear(cw);
697: light(&hero);
698: status(TRUE);
699: break;
700:
701: case 85:
702: if (on(player, ISDEAF))
703: {
704: msg("You feel your ears burn for a moment.");
705: lengthen_fuse(FUSE_HEAR, 2 * PHASEDURATION);
706: }
707: else
708: {
709: msg("You are suddenly surrounded by silence.");
710: turn_on(player, ISDEAF);
711: light_fuse(FUSE_HEAR, 0, 2 * PHASEDURATION, AFTER);
712: }
713: break;
714:
715: case 86:
716: {
717: apply_to_bag(pack, 0, NULL, baf_curse, NULL);
718:
719: if (off(player, ISUNSMELL))
720: msg("You smell a faint trace of burning sulfur.");
721: }
722: break;
723:
724: case 87:
725: msg("You have contracted a parasitic infestation.");
726: infest_dam++;
727: turn_on(player, HASINFEST);
728: break;
729:
730: case 88:
731: msg("You suddenly feel a chill run up and down your spine.");
732: turn_on(player, ISFLEE);
733: player.t_ischasing = FALSE;
734: player.t_chasee = &player;
735: break;
736:
737: case 89:
738: if (cur_weapon != NULL)
739: msg("You feel your %s get very hot.",
740: inv_name(cur_weapon, LOWERCASE));
741: break;
742:
743: case 90:
744: if (cur_weapon != NULL)
745: msg("Your %s glows white for an instant.",
746: inv_name(cur_weapon, LOWERCASE));
747: break;
748:
749: case 91:
750: if (cur_armor != NULL)
751: msg("Your %s gets very hot.", inv_name(cur_armor, LOWERCASE));
752: break;
753:
754: case 92:
755: if (cur_weapon != NULL)
756: msg("Your %s suddenly feels very cold.",
757: inv_name(cur_weapon, LOWERCASE));
758: break;
759:
760: case 93:
761: if (cur_armor != NULL)
762: msg("Your armor is covered by an oily film.");
763: break;
764:
765: case 94:
766: read_scroll(&player, S_CREATE, ISNORMAL);
767: break;
768:
769: case 95:
770: lower_level(D_POTION);
771: break;
772:
773: case 96:
774: {
775: int x, y;
776:
777: for (x = -1; x <= 1; x++)
778: {
779: for (y = -1; y <= 1; y++)
780: {
781: if (x == 0 && y == 0)
782: continue;
783:
784: delta.x = x;
785: delta.y = y;
786:
787: do_zap(&player, WS_POLYMORPH, rnd(2)
788: ? ISCURSED : ISNORMAL);
789: }
790: }
791: }
792: break;
793:
794: case 97:
795: {
796: int x, y;
797:
798: for (x = -1; x <= 1; x++)
799: {
800: for (y = -1; y <= 1; y++)
801: {
802: if (x == 0 && y == 0)
803: continue;
804:
805: delta.x = x;
806: delta.y = y;
807:
808: do_zap(&player, WS_INVIS, ISNORMAL);
809: }
810: }
811: }
812: break;
813:
814: default:
815: tr->ar_flags &= ~ISACTIVE;
816: hearmsg("You hear a click coming from %s.",inv_name(tr,LOWERCASE));
817: break;
818:
819: }
820: }
821:
822: /*
823: do_major()
824:
825: major malevolent effects
826:
827: 0. read_scroll(S_SELFTELEPORT, ISCURSED)
828: 1. PERMBLIND for twice normal duration
829: 2. new_level(THRONE);
830: 3. turn_on(player, SUPEREAT);
831: 4. lengthen(noslow, 20 + rnd(20));
832: 5. lower_level(D_POTION) * roll(1,4)
833: 6. change stats
834: 7. FIRETRAP
835: 8. armor crumbles
836: 9. weapon crumbles
837: 10. weapon crumbles
838: 11. curse weapon
839: */
840:
841: void
842: do_major(void)
843: {
844: int which;
845:
846: which = rnd(12);
847:
848: debug("Rolled %d.", which);
849:
850: switch (which)
851: {
852: case 0:
853: read_scroll(&player, S_SELFTELEP, ISCURSED);
854: break;
855:
856: case 1:
857: quaff(&player, P_TRUESEE, ISCURSED);
858: quaff(&player, P_TRUESEE, ISCURSED);
859: break;
860:
861: case 2:
862: new_level(THRONE,0);
863: break;
864:
865: case 3: /* Turn off other body-affecting spells */
866:
867: if (on(player, ISREGEN))
868: {
869: extinguish_fuse(FUSE_UNREGEN);
870: turn_off(player, ISREGEN);
871: unregen(NULL);
872: }
873:
874: if (on(player, NOCOLD))
875: {
876: extinguish_fuse(FUSE_UNCOLD);
877: turn_off(player, NOCOLD);
878: uncold(NULL);
879: }
880:
881: if (on(player, NOFIRE))
882: {
883: extinguish_fuse(FUSE_UNHOT);
884: turn_off(player, NOFIRE);
885: unhot(NULL);
886: }
887:
888: if (on(player, SUPEREAT))
889: {
890: lengthen_fuse(FUSE_UNSUPEREAT, 2 * PHASEDURATION);
891: msg("Your body temperature rises still further.");
892: }
893: else
894: {
895: msg("You feel very warm all over.");
896: light_fuse(FUSE_UNSUPEREAT, 0, 2 * PHASEDURATION, AFTER);
897: turn_on(player, SUPEREAT);
898: }
899: break;
900:
901: case 4:
902: msg("You feel yourself moving %sslower.",
903: on(player, ISSLOW) ? "even " : "");
904:
905: if (on(player, ISSLOW))
906: lengthen_fuse(FUSE_NOSLOW, PHASEDURATION);
907: else
908: {
909: turn_on(player, ISSLOW);
910: player.t_turn = TRUE;
911: light_fuse(FUSE_NOSLOW, 0, PHASEDURATION, AFTER);
912: }
913: break;
914:
915: case 5:
916: {
917: int i, n = roll(1, 4);
918:
919: for (i = 1; i < n; i++)
920: lower_level(D_POTION);
921: }
922: break;
923:
924: case 6:
925: if (rnd(2))
926: add_intelligence(TRUE);
927:
928: if (rnd(2))
929: chg_dext(-1, TRUE, FALSE);
930:
931: if (rnd(2))
932: chg_str(-1, TRUE, FALSE);
933:
934: if (rnd(2))
935: add_wisdom(TRUE);
936:
937: if (rnd(2))
938: add_const(TRUE);
939:
940: break;
941:
942: case 7:
943: {
944: struct room *rp;
945:
946: if (ntraps + 1 >= MAXTRAPS)
947: {
948: msg("You feel a puff of hot air.");
949: return;
950: }
951:
952: for (; ntraps < 2 * MAXTRAPS; ntraps++)
953: {
954: if (!fallpos(hero, &traps[ntraps].tr_pos))
955: break;
956:
957: mvaddch(traps[ntraps].tr_pos.y, traps[ntraps].tr_pos.x,
958: FIRETRAP);
959: traps[ntraps].tr_type = FIRETRAP;
960: traps[ntraps].tr_flags |= ISFOUND;
961: traps[ntraps].tr_show = FIRETRAP;
962:
963: if ((rp = roomin(hero)) != NULL)
964: rp->r_flags &= ~ISDARK;
965: }
966: }
967: break;
968:
969: case 8:
970: {
971: object *obj;
972:
973: if (cur_weapon == NULL)
974: {
975: msg("You feel your hands tingle a moment.");
976: pstats.s_dmg = "1d2";
977: return;
978: }
979:
980: obj = apply_to_bag(pack, 0, NULL, bafcweapon, NULL);
981:
982: if (obj->o_flags & ISMETAL)
983: msg("Your %s melts and disappears.",
984: inv_name(obj,LOWERCASE));
985: else
986: msg("Your %s crumbles in your hands.",
987: inv_name(obj, LOWERCASE));
988:
989: obj->o_flags &= ~ISCURSED;
990: dropcheck(obj);
991: del_bag(pack, obj);
992:
993: }
994: break;
995:
996: case 9:
997: {
998: object *obj;
999:
1000: if (cur_armor == NULL)
1001: {
1002: msg("Your body tingles a moment.");
1003: return;
1004: }
1005:
1006: obj = apply_to_bag(pack, 0, NULL, bafcarmor, NULL);
1007:
1008: msg("Your %s crumbles into small black powdery dust.",
1009: inv_name(obj, LOWERCASE));
1010:
1011: obj->o_flags &= ~ISCURSED;
1012: dropcheck(obj);
1013: del_bag(pack, obj);
1014: }
1015: break;
1016:
1017: default:
1018:
1019: if (cur_weapon == NULL)
1020: {
1021: seemsg("Your hand glows yellow for an instant.");
1022: pstats.s_dmg = "1d3";
1023: return;
1024: }
1025:
1026: seemsg("Your %s glows bright red for a moment.",
1027: weaps[cur_weapon->o_which].w_name);
1028:
1029: if (cur_weapon->o_hplus > 0)
1030: cur_weapon->o_hplus = -rnd(3);
1031: else
1032: cur_weapon->o_hplus -= rnd(3);
1033:
1034: if (cur_weapon->o_dplus > 0)
1035: cur_weapon->o_dplus = -rnd(3);
1036: else
1037: cur_weapon->o_dplus -= rnd(3);
1038:
1039: cur_weapon->o_flags = ISCURSED | ISLOST;
1040: cur_weapon->o_ac = 0;
1041:
1042: break;
1043: }
1044: }
1045:
1046: /*
1047: do_phial()
1048: handle powers of the Phial of Galadriel
1049: */
1050:
1051: void
1052: do_phial(void)
1053: {
1054: int which;
1055:
1056: /* Prompt for action */
1057:
1058: msg("How do you wish to apply the Phial of Galadriel (* for list)? ");
1059:
1060: which = (short) ((readchar() & 0177) - 'a');
1061:
1062: if (which == (short) ESCAPE - (short) 'a')
1063: {
1064: after = FALSE;
1065: return;
1066: }
1067:
1068: if (which < 0 || which > 1)
1069: {
1070: add_line("[a] total healing");
1071: add_line("[b] total monster confusion");
1072: end_line();
1073: msg("");
1074: msg("Which power do you wish to use? ");
1075:
1076: which = (short) ((readchar() & 0177) - 'a');
1077:
1078: while (which < 0 || which > 1)
1079: {
1080: if (which == (short) ESCAPE - (short) 'a')
1081: {
1082: after = FALSE;
1083: return;
1084: }
1085:
1086: msg("");
1087: msg("Please enter one of the listed powers: ");
1088:
1089: which = (short) ((readchar() & 0177) - 'a');
1090: }
1091: msg("Your attempt is successful.");
1092: }
1093: else
1094: msg("Your attempt is successsful.");
1095:
1096: switch (which)
1097: {
1098: case 0:
1099: pstats.s_hpt = max_stats.s_hpt += rnd(pstats.s_lvl) + 1;
1100: pstats.s_power = max_stats.s_power += rnd(pstats.s_lvl) + 1;
1101: break;
1102:
1103: case 1:
1104: {
1105: struct linked_list *mi;
1106: struct thing *tp;
1107:
1108: for (mi = mlist; mi != NULL; mi = next(mi))
1109: {
1110: tp = THINGPTR(mi);
1111:
1112: if (off(*tp, ISUNIQUE) || !save_throw(VS_MAGIC, tp))
1113: turn_on(*tp, ISHUH);
1114: }
1115: }
1116: break;
1117:
1118: default:
1119: msg("What a strange thing to do!!");
1120: break;
1121:
1122: }
1123: }
1124:
1125: /*
1126: do_palantir()
1127: handle powers of the Palantir of Might
1128: */
1129:
1130: void
1131: do_palantir(void)
1132: {
1133: int which, limit;
1134:
1135: /* Prompt for action */
1136:
1137: msg("How do you wish to apply the Palantir of Might? (* for list): ");
1138:
1139: limit = 3;
1140:
1141: if (is_carrying(TR_SCEPTRE))
1142: limit += 1;
1143:
1144: if (is_carrying(TR_CROWN))
1145: limit += 1;
1146:
1147: which = (short) ((readchar() & 0177) - 'a');
1148:
1149: if (which == (short) ESCAPE - (short) 'a')
1150: {
1151: after = FALSE;
1152: return;
1153: }
1154:
1155: if (which < 0 || which > limit)
1156: {
1157: msg("");
1158: add_line("[a] monster detection");
1159: add_line("[b] gold detection");
1160: add_line("[c] magic detection");
1161: add_line("[d] food detection");
1162:
1163: if (limit >= 4)
1164: add_line("[e] teleportation");
1165:
1166: if (limit >= 5)
1167: add_line("[f] clear thought");
1168:
1169: end_line();
1170:
1171: msg("Which power do you wish to use?");
1172:
1173: which = (short) ((readchar() & 0177) - 'a');
1174:
1175: while (which < 0 || which > limit)
1176: {
1177: if (which == (short) ESCAPE - (short) 'a')
1178: {
1179: after = FALSE;
1180: return;
1181: }
1182:
1183: msg("Please enter one of the listed powers: ");
1184: which = (short) ((readchar() & 0177) - 'a');
1185: }
1186:
1187: msg("Your attempt is successful.");
1188: }
1189: else
1190: msg("Your attempt is successful.");
1191:
1192: switch (which)
1193: {
1194: case 0: quaff(&player, P_MONSTDET, ISNORMAL);
1195: break;
1196: case 1: read_scroll(&player, S_GFIND, ISNORMAL);
1197: break;
1198: case 2: quaff(&player, P_TREASDET, ISNORMAL);
1199: break;
1200: case 3: read_scroll(&player, S_FOODDET, ISNORMAL);
1201: break;
1202: case 4: read_scroll(&player, S_SELFTELEP, ISNORMAL);
1203: break;
1204: case 5: quaff(&player, P_CLEAR, ISNORMAL);
1205: break;
1206: default:
1207: msg("What a strange thing to do!!");
1208: break;
1209: }
1210: }
1211:
1212: /*
1213: do_silmaril()
1214: handle powers of the Silamril of Ea
1215: */
1216:
1217: void
1218: do_silmaril(void)
1219: {
1220: int which;
1221:
1222: /* Prompt for action */
1223: msg("How do you wish to apply the Silamril of Ea (* for list)? ");
1224:
1225: which = (short) ((readchar() & 0177) - 'a');
1226:
1227: if (which == (short) ESCAPE - (short) 'a')
1228: {
1229: after = FALSE;
1230: return;
1231: }
1232:
1233: if (which < 0 || which > 2)
1234: {
1235: msg("");
1236: add_line("[a] magic mapping");
1237: add_line("[b] petrification");
1238: add_line("[c] stairwell downwards");
1239: end_line();
1240:
1241: msg("Which power do you wish to use?");
1242:
1243: which = (short) ((readchar() & 0177) - 'a');
1244:
1245: while (which < 0 || which > 2)
1246: {
1247: if (which == (short) ESCAPE - (short) 'a')
1248: {
1249: after = FALSE;
1250: return;
1251: }
1252: msg("");
1253: msg("Please enter one of the listed powers: ");
1254: which = (short) ((readchar() & 0177) - 'a');
1255: }
1256: msg("Your attempt is successful.");
1257: }
1258: else
1259: msg("Your attempt is successful.");
1260:
1261: switch (which)
1262: {
1263: case 0: read_scroll(&player, S_MAP, ISNORMAL);
1264: break;
1265: case 1: read_scroll(&player, S_PETRIFY, ISNORMAL);
1266: break;
1267: case 2: msg("A stairwell opens beneath your feet and you go down.");
1268: level++;
1269: new_level(NORMLEV,0);
1270: break;
1271: default:msg("What a strange thing to do!!");
1272: break;
1273: }
1274: }
1275:
1276: /*
1277: do_amulet()
1278: handle powers of the Amulet of Yendor
1279: */
1280:
1281: void
1282: do_amulet(void)
1283: {
1284: int which, limit;
1285:
1286: /* Prompt for action */
1287: msg("How do you wish to apply the Amulet of Yendor (* for list)? ");
1288:
1289: limit = 0;
1290:
1291: if (is_carrying(TR_PURSE))
1292: limit += 1;
1293:
1294: which = (short) ((readchar() & 0177) - 'a');
1295:
1296: if (which == (short) ESCAPE - (short) 'a')
1297: {
1298: after = FALSE;
1299: return;
1300: }
1301:
1302: if (which < 0 || which > limit)
1303: {
1304: msg("");
1305: add_line("[a] level evaluation");
1306:
1307: if (limit >= 1)
1308: add_line("[b] invisibility");
1309:
1310: end_line();
1311: msg("Which power do you wish to use?");
1312:
1313: which = (short) ((readchar() & 0177) - 'a');
1314:
1315: while (which < 0 || which > limit)
1316: {
1317: if (which == (short) ESCAPE - (short) 'a')
1318: {
1319: after = FALSE;
1320: return;
1321: }
1322:
1323: msg("");
1324: msg("Please enter one of the listed powers: ");
1325: which = (short) ((readchar() & 0177) - 'a');
1326: }
1327:
1328: msg("Your attempt is successful.");
1329: }
1330: else
1331: msg("Your attempt is successful.");
1332:
1333: switch (which)
1334: {
1335: case 0: level_eval();
1336: break;
1337: case 1: quaff(&player, P_INVIS, ISNORMAL);
1338: break;
1339: default:msg("What a strange thing to do!!");
1340: break;
1341: }
1342: }
1343:
1344: /*
1345: do_bag()
1346: handle powers of the Magic Purse of Yendor as a bag of holding
1347: */
1348:
1349: void
1350: do_bag(struct object *obj)
1351: {
1352: int which, limit;
1353:
1354: /* Prompt for action */
1355: msg("How do you wish to apply the Magic Purse of Yendor (* for list)? ");
1356:
1357: which = (short) ((readchar() & 0177) - 'a');
1358:
1359: if (which == (short) ESCAPE - (short) 'a')
1360: {
1361: after = FALSE;
1362: return;
1363: }
1364:
1365: limit = 2;
1366:
1367: if (is_carrying(TR_AMULET))
1368: limit += 1;
1369:
1370: if (which < 0 || which > limit)
1371: {
1372: msg("");
1373: add_line("[a] inventory");
1374: add_line("[b] add to bag");
1375: add_line("[c] remove from bag");
1376:
1377: if (limit >= 3)
1378: add_line("[d] see invisible");
1379:
1380: end_line();
1381:
1382: msg("Which power do you wish to use?");
1383:
1384: which = (short) ((readchar() & 0177) - 'a');
1385:
1386: while (which < 0 || which > limit)
1387: {
1388: if (which == (short) ESCAPE - (short) 'a')
1389: {
1390: after = FALSE;
1391: return;
1392: }
1393:
1394: msg("");
1395: msg("Please enter one of the listed powers: ");
1396: which = (short) ((readchar() & 0177) - 'a');
1397: }
1398:
1399: msg("Your attempt is successful.");
1400: }
1401: else
1402: msg("Your attempt is successful.");
1403:
1404: switch (which)
1405: {
1406: case 0:
1407: inventory(obj->o_bag, 0);
1408: break;
1409:
1410: case 1:
1411: {
1412: object *new_obj_p; /* what the user selected */
1413:
1414: if ((new_obj_p = get_object(pack, "add", 0, NULL)) != NULL)
1415: {
1416: rem_pack(new_obj_p); /* free up pack slot */
1417: push_bag(&obj->o_bag, new_obj_p);
1418: pack_report(new_obj_p, MESSAGE, "You just added ");
1419: }
1420: }
1421: break;
1422:
1423: case 2:
1424: {
1425: object *obj_p;
1426: linked_list *item_p;
1427:
1428: if ((obj_p=get_object(obj->o_bag,"remove",0,NULL)) != NULL)
1429: {
1430: item_p = make_item(obj_p); /* attach upper structure */
1431:
1432: if (add_pack(item_p, MESSAGE) != FALSE)
1433: pop_bag(&obj->o_bag, obj_p);
1434: }
1435: }
1436: break;
1437:
1438: case 3:
1439: quaff(&player, P_TRUESEE, ISBLESSED);
1440: break;
1441:
1442: default:
1443: msg("What a strange thing to do!!");
1444: }
1445: }
1446:
1447: /*
1448: do_sceptre()
1449: handle powers of the Sceptre of Might
1450: */
1451:
1452: void
1453: do_sceptre(void)
1454: {
1455: int which, limit;
1456:
1457: /* Prompt for action */
1458: msg("How do you wish to apply the Sceptre of Might (* for list)? ");
1459:
1460: which = (short) ((readchar() & 0177) - 'a');
1461:
1462: if (which == (short) ESCAPE - (short) 'a')
1463: {
1464: after = FALSE;
1465: return;
1466: }
1467:
1468: limit = 5;
1469:
1470: if (is_carrying(TR_CROWN))
1471: limit += 1;
1472:
1473: if (is_carrying(TR_PALANTIR))
1474: limit += 1;
1475:
1476: if (which < 0 || which > limit)
1477: {
1478: msg("");
1479: add_line("[a] cancellation");
1480: add_line("[b] polymorph monster");
1481: add_line("[c] slow monster");
1482: add_line("[d] teleport monster");
1483: add_line("[e] monster confusion");
1484: add_line("[f] paralyze monster");
1485:
1486: if (limit >= 6)
1487: add_line("[g] drain life");
1488:
1489: if (limit >= 7)
1490: add_line("[h] smell monster");
1491:
1492: end_line();
1493:
1494: msg("Which power do you wish to use?");
1495:
1496: which = (short) ((readchar() & 0177) - 'a');
1497:
1498: while (which < 0 || which > limit)
1499: {
1500: if (which == (short) ESCAPE - (short) 'a')
1501: {
1502: after = FALSE;
1503: return;
1504: }
1505:
1506: msg("");
1507: msg("Please enter one of the listed powers: ");
1508: which = (short) ((readchar() & 0177) - 'a');
1509: }
1510:
1511: msg("Your attempt is successful.");
1512: }
1513: else
1514: msg("Your attempt is successful.");
1515:
1516: if (rnd(pstats.s_lvl) < 7)
1517: {
1518: msg("Your finger slips.");
1519: which = rnd(6);
1520: if (wizard)
1521: {
1522: msg("What wand? (%d)", which);
1523:
1524: if (get_string(prbuf, cw) == NORM)
1525: {
1526: which = atoi(prbuf);
1527: if (which < 0 || which > 5)
1528: {
1529: msg("Invalid selection.");
1530: which = rnd(6);
1531: msg("Rolled %d.", which);
1532: }
1533: }
1534: }
1535: }
1536:
1537: switch (which)
1538: {
1539: case 0:
1540: if (get_dir())
1541: do_zap(&player, WS_CANCEL, ISBLESSED);
1542: break;
1543:
1544: case 1:
1545: if (get_dir())
1546: do_zap(&player, WS_POLYMORPH, ISBLESSED);
1547: break;
1548:
1549: case 2:
1550: if (get_dir())
1551: do_zap(&player, WS_SLOW_M, ISBLESSED);
1552: break;
1553:
1554: case 3:
1555: if (get_dir())
1556: do_zap(&player, WS_MONSTELEP, ISBLESSED);
1557: break;
1558:
1559: case 4:
1560: if (get_dir())
1561: do_zap(&player, WS_CONFMON, ISBLESSED);
1562: break;
1563:
1564: case 5:
1565: if (get_dir())
1566: do_zap(&player, WS_PARALYZE, ISBLESSED);
1567: break;
1568:
1569: case 6:
1570: if (get_dir())
1571: do_zap(&player, WS_DRAIN, ISBLESSED);
1572: break;
1573:
1574: case 7:
1575: quaff(&player, P_SMELL, ISBLESSED);
1576: break;
1577:
1578: default:
1579: msg("What a strange thing to do!!");
1580: break;
1581: }
1582: }
1583:
1584: /*
1585: do_wand()
1586: handle powers of the Wand of Yendor
1587: */
1588:
1589: void
1590: do_wand(void)
1591: {
1592: int which, i;
1593:
1594: /* Prompt for action */
1595: msg("How do you wish to apply the Wand of Yendor (* for list)? ");
1596:
1597: which = (short) ((readchar() & 0177) - 'a');
1598:
1599: if (which == (short) ESCAPE - (short) 'a')
1600: {
1601: after = FALSE;
1602: return;
1603: }
1604:
1605: if (which < 0 || which >= maxsticks)
1606: {
1607: msg("");
1608:
1609: for (i = 0; i < maxsticks; i++)
1610: {
1611: sprintf(prbuf, "[%c] %s", i + 'a', ws_magic[i].mi_name);
1612: add_line(prbuf);
1613: }
1614:
1615: end_line();
1616:
1617: msg("Which power do you wish to use?");
1618:
1619: which = (short) ((readchar() & 0177) - 'a');
1620:
1621: while (which < 0 || which >= maxsticks)
1622: {
1623: if (which == (short) ESCAPE - (short) 'a')
1624: {
1625: after = FALSE;
1626: return;
1627: }
1628:
1629: msg("");
1630: msg("Please enter one of the listed powers: ");
1631: which = (short) ((readchar() & 0177) - 'a');
1632: }
1633: msg("Your attempt is successful.");
1634: }
1635: else
1636: msg("Your attempt is successful.");
1637:
1638: if (rnd(pstats.s_lvl) < 12)
1639: {
1640: msg("Your finger slips.");
1641: which = rnd(maxsticks);
1642:
1643: if (wizard)
1644: {
1645: msg("What wand? (%d)", which);
1646:
1647: if (get_string(prbuf, cw) == NORM)
1648: {
1649: which = atoi(prbuf);
1650:
1651: if (which < 0 || which >= maxsticks)
1652: {
1653: msg("Invalid selection.");
1654: which = rnd(maxsticks);
1655: msg("Rolled %d.", which);
1656: }
1657: }
1658: }
1659: }
1660:
1661: if (get_dir())
1662: do_zap(&player, which, ISBLESSED);
1663: }
1664:
1665: /*
1666: do_crown()
1667: handle powers of the Crown of Might
1668: */
1669:
1670: void
1671: do_crown(void)
1672: {
1673: int which, limit;
1674:
1675: /* Prompt for action */
1676: msg("How do you wish to apply the Crown of Might (* for list)? ");
1677:
1678: which = (short) ((readchar() & 0177) - 'a');
1679:
1680: if (which == (short) ESCAPE - (short) 'a')
1681: {
1682: after = FALSE;
1683: return;
1684: }
1685:
1686: limit = 9;
1687:
1688: if (is_carrying(TR_PALANTIR))
1689: limit += 1;
1690:
1691: if (is_carrying(TR_SCEPTRE))
1692: limit += 1;
1693:
1694: if (which < 0 || which > limit)
1695: {
1696: msg("");
1697: add_line("[a] add strength");
1698: add_line("[b] add intelligence");
1699: add_line("[c] add wisdom");
1700: add_line("[d] add dexterity");
1701: add_line("[e] add constitution");
1702: add_line("[f] normal strength");
1703: add_line("[g] normal intelligence");
1704: add_line("[h] normal wisdom");
1705: add_line("[i] normal dexterity");
1706: add_line("[j] normal constitution");
1707:
1708: if (limit >= 10)
1709: add_line("[k] disguise");
1710:
1711: if (limit >= 11)
1712: add_line("[l] super heroism");
1713:
1714: end_line();
1715:
1716: msg("Which power do you wish to use?");
1717:
1718: which = (short) ((readchar() & 0177) - 'a');
1719:
1720: while (which < 0 || which > limit)
1721: {
1722: if (which == (short) ESCAPE - (short) 'a')
1723: {
1724: after = FALSE;
1725: return;
1726: }
1727: msg("");
1728: msg("Please enter one of the listed powers: ");
1729: which = (short) ((readchar() & 0177) - 'a');
1730: }
1731:
1732: msg("Your attempt is successful.");
1733: }
1734: else
1735: msg("Your attempt is successful.");
1736:
1737: switch (which)
1738: {
1739: case 0:
1740: if (off(player, POWERSTR))
1741: {
1742: turn_on(player, POWERSTR);
1743: chg_str(10, FALSE, FALSE);
1744: msg("You feel much stronger now.");
1745: }
1746: else
1747: nothing_message(ISCURSED);
1748: break;
1749:
1750: case 1:
1751: if (off(player, POWERINTEL))
1752: {
1753: pstats.s_intel += 10;
1754: turn_on(player, POWERINTEL);
1755: msg("You feel much more intelligent now.");
1756: }
1757: else
1758: nothing_message(ISCURSED);
1759: break;
1760:
1761: case 2:
1762: if (off(player, POWERWISDOM))
1763: {
1764: pstats.s_wisdom += 10;
1765: turn_on(player, POWERWISDOM);
1766: msg("Your feel much wiser know.");
1767: }
1768: else
1769: nothing_message(ISCURSED);
1770: break;
1771:
1772: case 3:
1773: if (off(player, POWERDEXT))
1774: {
1775: turn_on(player, POWERDEXT);
1776: chg_dext(10, FALSE, FALSE);
1777: msg("You feel much more dextrous now.");
1778: }
1779: else
1780: nothing_message(ISCURSED);
1781: break;
1782:
1783: case 4:
1784: if (off(player, POWERCONST))
1785: {
1786: pstats.s_const += 10;
1787: turn_on(player, POWERCONST);
1788: msg("You feel much healthier now.");
1789: }
1790: else
1791: nothing_message(ISCURSED);
1792: break;
1793:
1794: case 5:
1795: if (on(player, POWERSTR))
1796: {
1797: turn_off(player, POWERSTR);
1798: chg_str(-10, FALSE, FALSE);
1799: msg("Your muscles bulge less now.");
1800: }
1801: else
1802: nothing_message(ISCURSED);
1803: break;
1804:
1805: case 6:
1806: if (on(player, POWERINTEL))
1807: {
1808: pstats.s_intel = max(pstats.s_intel - 10,
1809: 3 + ring_value(R_ADDINTEL));
1810: turn_off(player, POWERINTEL);
1811: msg("You feel less intelligent now.");
1812: }
1813: else
1814: nothing_message(ISCURSED);
1815: break;
1816:
1817: case 7:
1818: if (on(player, POWERWISDOM))
1819: {
1820: pstats.s_wisdom = max(pstats.s_wisdom - 10,
1821: 3 + ring_value(R_ADDWISDOM));
1822: turn_off(player, POWERWISDOM);
1823: msg("You feel less wise now.");
1824: }
1825: else
1826: nothing_message(ISCURSED);
1827: break;
1828:
1829: case 8:
1830: if (on(player, POWERDEXT))
1831: {
1832: turn_off(player, POWERDEXT);
1833: chg_dext(-10, FALSE, FALSE);
1834: msg("You feel less dextrous now.");
1835: }
1836: else
1837: nothing_message(ISCURSED);
1838: break;
1839:
1840: case 9:
1841: if (on(player, POWERCONST))
1842: {
1843: pstats.s_const -= 10;
1844: turn_off(player, POWERCONST);
1845: msg("You feel less healthy now.");
1846: }
1847: else
1848: nothing_message(ISCURSED);
1849: break;
1850:
1851: case 10: quaff(&player, P_DISGUISE, ISNORMAL);
1852: break;
1853:
1854: case 11: quaff(&player, P_SHERO, ISNORMAL);
1855: break;
1856:
1857: default:
1858: msg("What a strange thing to do!!");
1859: break;
1860:
1861: }
1862: }
1863:
1864: /*
1865: level_eval()
1866: have amulet evaluate danger on this level
1867: */
1868:
1869: void
1870: level_eval(void)
1871: {
1872: int cnt = 0;
1873: long max_nasty = 0;
1874: struct linked_list *item;
1875: struct thing *tp;
1876: char *colour, *temp;
1877:
1878: for (item = mlist; item != NULL; item = next(item))
1879: {
1880: tp = THINGPTR(item);
1881: cnt++;
1882: max_nasty = max(max_nasty,(10L-tp->t_stats.s_arm) * tp->t_stats.s_hpt);
1883: }
1884:
1885: if (cnt < 3)
1886: colour = "black";
1887: else if (cnt < 6)
1888: colour = "red";
1889: else if (cnt < 9)
1890: colour = "orange";
1891: else if (cnt < 12)
1892: colour = "yellow";
1893: else if (cnt < 15)
1894: colour = "green";
1895: else if (cnt < 18)
1896: colour = "blue";
1897: else if (cnt < 25)
1898: colour = "violet";
1899: else
1900: colour = "pink with purple polka dots";
1901:
1902: if (max_nasty < 10)
1903: temp = "feels cold and lifeless";
1904: else if (max_nasty < 30)
1905: temp = "feels cool";
1906: else if (max_nasty < 200)
1907: temp = "feels warm and soft";
1908: else if (max_nasty < 1000)
1909: temp = "feels warm and slippery";
1910: else if (max_nasty < 5000)
1911: temp = "feels hot and dry";
1912: else if (max_nasty < 10000)
1913: temp = "feels too hot to hold";
1914: else if (max_nasty < 20000)
1915: temp = "burns your hand";
1916: else
1917: temp = "jumps up and down shrieking 'DANGER! DANGER'";
1918:
1919: msg("The amulet glows %s and %s.", colour, temp);
1920:
1921: return;
1922: }
CVSweb