diff -urN nethack-3.4.0/dat/data.base nethack-3.4.0-sanctuary/dat/data.base --- nethack-3.4.0/dat/data.base Thu Mar 21 01:42:28 2002 +++ nethack-3.4.0-sanctuary/dat/data.base Wed Apr 3 16:09:17 2002 @@ -1002,6 +1002,15 @@ offspring of elf and mortal, Earendil, and Elwing, and Elrond their child. [ The Silmarillion, by J.R.R. Tolkien ] + + Earendil and Elwing were the Quest Leaders for male and female + Elves, respectively, back when Elf was still a character class + and not merely a race. They were retired along with High-elves, + the Elf Quest guardians, in version 3.3.0 when Elf ceased to + exist as a role. Nowadays they sit quietly in their little orchard + in the Sanctuary, content to live in peace after long years of + preparing Elven warriors for the ultimate Quest of retrieving + the Amulet of Yendor. eel giant eel The behaviour of eels in fresh water extends the air of @@ -1054,6 +1063,7 @@ water, and earth. Some mystics have postulated the necessity for a fifth type, the spirit elemental, but none have ever been encountered, at least on this plane of existence. +~high-elf ~elf ??m* *elf* elvenking @@ -1111,6 +1121,13 @@ What matter, so there is but fire In you, in me?' [ The Mask, by W.B. Yeats ] +erevan ilesere +aerdrie faenya +solonor thelandira + Erevan Ilesere, Aerdrie Faenya and Solonor Thelandira were the + three Gods [or perhaps Goddesses] [Chaotic, Neutral and Lawful, + in that order] of the Elves, when they still were a class rather + than a race. erinys erinyes These female-seeming devils named after the Furies of mythology @@ -1414,6 +1431,16 @@ coin and jewelry. [ Webster's New International Dictionary of the English Language, Second Edition ] +goblin king + [ see also Orcrist ] + + The Goblin King was the Quest Nemesis for the Elf role. He was + retired in version 3.3.0 along with the rest of the Elf Quest + and its inhabitants. He does not like the current situation one + bit and makes extensive plans for his grand return to active + duty. Fortunately he no longer directs his anger at the heroes; + rather, he wants to eliminate Scorpius and Master Kaen, whom he + considers to be sneaky usurpers of his old power. gold golem The bellows he set away from the fire, and gathered all the tools wherewith he wrought into a silver chest; and with a sponge wiped @@ -1574,6 +1601,10 @@ hezrou "Hezrou" is the common name for the type II demon. It is among the weaker of demons, but still quite formidable. +high-elf + High-elves were the Quest Guardians back when Elf was a role, + rather than a race. These days they roam free in the Sanctuary, + keeping guard over their old masters Earendil and Elwing. hippocrates Greek physician, recognized as the father of medicine. He is believed to have been born on the island of Cos, to have @@ -2813,7 +2844,6 @@ warning, and damage, both spell and physical, is partially absorbed by the orb itself. When invoked it has the power to teleport the invoker between levels. -goblin king orcrist The Great Goblin gave a truly awful howl of rage when he looked at it, and all his soldiers gnashed their teeth, @@ -2877,6 +2907,15 @@ the name might already suggest, owlbears are a cross between a giant owl and a bear. They are covered with fur and feathers. +the palantir of westernesse + The elves of long ago created this powerful crystal ball. + When carried, it granted ESP, regeneration, and reduced all + damage caused by spells to one-half of what it would have + normally been. When invoked, it tamed creatures in its + vicinity. + + Nowadays all special powers have been removed from this relic + and it gathers dust in the Museum of the Sanctuary. panther And lo! almost where the ascent began, A panther light and swift exceedingly, @@ -3132,6 +3171,13 @@ On the morrow *he* will leave me, as my hopes have flown before.' Then the bird said, 'Nevermore.' [ The Raven - Edgar Allan Poe ] +retired apprentice + The few apprentices who refused to leave their master, the Wizard + of Balance, when he was retired in version 3.4.0, have found a + new home in the Sanctuary. Here they guard the Wizard's new + tower and keep him company. The bottles of booze that the Wizard + of Balance likes to conjure up every now and then probably play + a major role in that decision. *ring ring of * Three Rings for the Elven-kings under the sky, @@ -4078,6 +4124,16 @@ flat on his back upon a cold stone with his hands on his breast. [ The Fellowship of the Ring, by J.R.R. Tolkien ] +wizard of balance + The Wizard of Balance held office in his hidden tower, only + reachable by magical means, where he taught his apprentices + the enigmatic skills of occultism. He considers himself a + guardian of the equilibrium of the universe, and goes out of + his way to promote stability. The Wizard of Balance was + retired in version 3.4.0 due to numerous complaints from + lawful and chaotic wizards who refused to go on quests for + a guardian of neutrality. He now spends his days drinking beer + with the few apprentices who refused to leave their old master. wizard of yendor No one knows how old this mighty wizard is, or from whence he came. It is known that, having lived a span far greater than diff -urN nethack-3.4.0/dat/dungeon.def nethack-3.4.0-sanctuary/dat/dungeon.def --- nethack-3.4.0/dat/dungeon.def Thu Mar 21 01:42:28 2002 +++ nethack-3.4.0-sanctuary/dat/dungeon.def Wed Apr 3 16:09:17 2002 @@ -29,6 +29,7 @@ LEVEL: "castle" "none" @ (-1, 0) CHAINBRANCH: "Gehennom" "castle" + (0, 0) no_down BRANCH: "The Elemental Planes" @ (1, 0) no_down up +CHAINBRANCH: "The Sanctuary" "medusa" + (-2, 1) portal # # Gehennom @@ -136,3 +137,11 @@ LEVEL: "air" "none" @ (4, 0) LEVEL: "earth" "none" @ (5, 0) LEVEL: "dummy" "none" @ (6, 0) + +# +# The Sanctuary +# +DUNGEON: "The Sanctuary" "none" (1, 0) +DESCRIPTION: mazelike +ALIGNMENT: unaligned +LEVEL: "sanct" "none" @ (-1, 0) diff -urN nethack-3.4.0/dat/sanct.des nethack-3.4.0-sanctuary/dat/sanct.des --- nethack-3.4.0/dat/sanct.des Thu Jan 1 03:00:00 1970 +++ nethack-3.4.0-sanctuary/dat/sanct.des Wed Apr 3 16:09:17 2002 @@ -0,0 +1,82 @@ +# SCCS Id: @(#)sanct.des 3.4 1996/10/20 +# Copyright (c) 1989 by Jean-Christophe Collet +# Copyright (c) 1992 by M. Stephenson and Izchak Miller +# NetHack may be freely redistributed. See license for details. +# +# The Sanctuary for old Quest folk. +MAZE:"sanct",'-' +FLAGS:noteleport,hardfloor +GEOMETRY:center,center +# 1 2 3 4 5 6 7 +#123456789012345678901234567890123456789012345678901234567890123456789012345 +MAP + ---------------------------------------------------------------------- + |.....T.......T..PP..T.|........| .... . . . ... .......---| + |.....T..T..T...PPPP...|........| . . . ....... . ... ----..| + |TTT.TT........PPPPPP..|............ . ... ...... ....|.....| + |.T......T..T...PPPP...|........| . ...... . . ... .....\.| + |.....T..T....T..PP...T|........| ......... . . . ... . .. |.....| + |.T.T......T........T..|........---------------.... . . ----..| +----- |.......T.....T..T....T|......................| ............ ---| +|...|------------.------------...........}}}.}}}....-----------------------| +|......................................}}}--+--}}}.........................| +|...|--...............................}}---...---}}.............-----------| +----- |...............................}---.....---}.............|..........| + |...............................}|.........|}.............|..FFFFFFFF| + |.......----.----...............}|.........|}.............|..F.......| + |.......|.......|...............}--.......--}.............|..FFF.....| + |.......|.......|...............}}---...---}}..................F.....| + |.......|.......|................}}}--.--}}}..............|..FFF.....| + |.......|.......|..................}|...|}................|..F.......| + ---------------------------------------------------------------------- +ENDMAP +WALLIFY + +# Non diggable and non-passwall-able walls, lit area +NON_DIGGABLE:(00,00,75,18) +NON_PASSWALL:(00,00,75,18) +REGION:(00,00,75,18),lit,"ordinary" +REGION:(39,00,75,06),unlit,"ordinary" +REGION:(53,06,75,07),unlit,"ordinary" + +# Portal arrival point +BRANCH:(02,09,02,09),(0,0,0,0) + +# Engravings +ENGRAVING:(04,09),engrave,"Welcome, traveller, to the Sanctuary." +ENGRAVING:(64,15),engrave,"You have entered the Museum. Please read additional information about our exhibits using the '/' command." +ENGRAVING:(38,03),engrave,"Goblin King's lair. Go away!" +ENGRAVING:(18,13),engrave,"You are entering last known temple of Erevan Ilesere. Please leave your donation with the resident priest." +ENGRAVING:(17,08),engrave,"Leave your anger and hatred behind, as you step into the sacred grove of the Elves." + +# The following engraving produces a warning with lev_comp. Pay no heed; +# the error shows up because the engraving is located at the closed door. +ENGRAVING:(44,09),engrave,"Beware! Thou art entering the tower of a mighty wizard!" + +# Dungeon features +ALTAR:(18,16),chaos,shrine +REGION:(14,14,22,18),lit,"temple" +DOOR:closed,(44,09) + +# Objects +OBJECT:'(',"crystal ball",(72,15),blessed,"",0,"the Palantir of Westernesse" + +# Monsters +# Old Quest leaders and nemesises +MONSTER: '@', "Earendil", (08,01) +MONSTER: '@', "Elwing", (09,01) +MONSTER: 'o', "Goblin King", (73,04) +MONSTER: '@', "Wizard of Balance", (44,13) + +# Old Quest guardians +MONSTER: '@', "High-elf", (15,01) +MONSTER: '@', "High-elf", (28,03) +MONSTER: '@', "High-elf", (09,04) +MONSTER: '@', "High-elf", (16,07) +MONSTER: '@', "High-elf", (21,07) +MONSTER: '@', "High-elf", (66,09) +MONSTER: '@', "High-elf", (66,17) +MONSTER: '@', "High-elf", (64,04) + +MONSTER: '@', "retired apprentice", (42,13) +MONSTER: '@', "retired apprentice", (46,13) diff -urN nethack-3.4.0/include/decl.h nethack-3.4.0-sanctuary/include/decl.h --- nethack-3.4.0/include/decl.h Thu Mar 21 01:42:44 2002 +++ nethack-3.4.0-sanctuary/include/decl.h Wed Apr 3 16:09:17 2002 @@ -72,6 +72,7 @@ xchar d_mines_dnum, d_quest_dnum; d_level d_qstart_level, d_qlocate_level, d_nemesis_level; d_level d_knox_level; + d_level d_sanctuary_level; } dungeon_topology; /* macros for accesing the dungeon levels by their old names */ #define oracle_level (dungeon_topology.d_oracle_level) @@ -104,6 +105,7 @@ #define qlocate_level (dungeon_topology.d_qlocate_level) #define nemesis_level (dungeon_topology.d_nemesis_level) #define knox_level (dungeon_topology.d_knox_level) +#define sanctuary_level (dungeon_topology.d_sanctuary_level) E NEARDATA stairway dnstair, upstair; /* stairs up and down */ #define xdnstair (dnstair.sx) diff -urN nethack-3.4.0/include/dungeon.h nethack-3.4.0-sanctuary/include/dungeon.h --- nethack-3.4.0/include/dungeon.h Thu Mar 21 01:42:45 2002 +++ nethack-3.4.0-sanctuary/include/dungeon.h Wed Apr 3 16:09:17 2002 @@ -120,10 +120,12 @@ #define Is_qlocate(x) (on_level(x, &qlocate_level)) #define Is_nemesis(x) (on_level(x, &nemesis_level)) #define Is_knox(x) (on_level(x, &knox_level)) +#define Is_sanctuary(x) (on_level(x, &sanctuary_level)) #define In_sokoban(x) ((x)->dnum == sokoban_dnum) #define Inhell In_hell(&u.uz) /* now gehennom */ #define In_endgame(x) ((x)->dnum == astral_level.dnum) +#define In_sanctuary Is_sanctuary(&u.uz) #define within_bounded_area(X,Y,LX,LY,HX,HY) \ ((X) >= (LX) && (X) <= (HX) && (Y) >= (LY) && (Y) <= (HY)) diff -urN nethack-3.4.0/include/monflag.h nethack-3.4.0-sanctuary/include/monflag.h --- nethack-3.4.0/include/monflag.h Thu Mar 21 01:42:49 2002 +++ nethack-3.4.0-sanctuary/include/monflag.h Wed Apr 3 16:09:17 2002 @@ -48,6 +48,9 @@ #define MS_SPELL 37 /* spellcaster not matching any of the above */ #define MS_WERE 38 /* lycanthrope in human form */ #define MS_BOAST 39 /* giants */ +#define MS_SANCT_L 40 /* old Quest leaders */ +#define MS_SANCT_N 41 /* old Quest nemesises */ +#define MS_SANCT_G 42 /* old Quest guardians */ #define MR_FIRE 0x01 /* resists fire */ diff -urN nethack-3.4.0/src/do.c nethack-3.4.0-sanctuary/src/do.c --- nethack-3.4.0/src/do.c Thu Mar 21 01:43:02 2002 +++ nethack-3.4.0-sanctuary/src/do.c Wed Apr 3 16:12:00 2002 @@ -983,7 +983,8 @@ fill_pit(u.ux, u.uy); u.ustuck = 0; /* idem */ u.uinwater = 0; - keepdogs(FALSE); + if (!Is_sanctuary(newlevel) && !In_sanctuary) + keepdogs(FALSE); if (u.uswallow) /* idem */ u.uswldtim = u.uswallow = 0; /* diff -urN nethack-3.4.0/src/dungeon.c nethack-3.4.0-sanctuary/src/dungeon.c --- nethack-3.4.0/src/dungeon.c Thu Mar 21 01:43:04 2002 +++ nethack-3.4.0-sanctuary/src/dungeon.c Wed Apr 3 16:09:17 2002 @@ -616,6 +616,7 @@ { "rogue", &rogue_level }, #endif { "sanctum", &sanctum_level }, + { "sanct", &sanctuary_level }, { "valley", &valley_level }, { "water", &water_level }, { "wizard1", &wiz1_level }, diff -urN nethack-3.4.0/src/makemon.c nethack-3.4.0-sanctuary/src/makemon.c --- nethack-3.4.0/src/makemon.c Thu Mar 21 01:43:08 2002 +++ nethack-3.4.0-sanctuary/src/makemon.c Wed Apr 3 16:09:17 2002 @@ -1146,6 +1146,9 @@ register struct permonst *ptr; register int mndx, ct; +/* NO MONSTERS are generated in the Sanctuary. */ + if (In_sanctuary) return (struct permonst *)0; + if (u.uz.dnum == quest_dnum && rn2(7) && (ptr = qt_montype()) != 0) return ptr; diff -urN nethack-3.4.0/src/monst.c nethack-3.4.0-sanctuary/src/monst.c --- nethack-3.4.0/src/monst.c Thu Mar 21 01:43:11 2002 +++ nethack-3.4.0-sanctuary/src/monst.c Wed Apr 3 16:09:17 2002 @@ -3450,6 +3450,65 @@ M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, HI_DOMESTIC), /* + * sanctuary for deprecated Quest folk + */ + +/* 3.2.2 -> 3.3.0 - Elf Quest */ + MON("Earendil", S_HUMAN, + LVL(20, 15, 0, 50, -20), (G_NOGEN|G_UNIQ), + A(ATTK(AT_WEAP, AD_PHYS, 1, 8), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(WT_ELF, 350, 0, MS_SANCT_L, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, + M2_NOPOLY|M2_ELF|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG| + M2_MALE|M2_COLLECT|M2_MAGIC, + M3_CLOSE|M3_INFRAVISIBLE, HI_LORD), + MON("Elwing", S_HUMAN, + LVL(20, 15, 0, 50, -20), (G_NOGEN|G_UNIQ), + A(ATTK(AT_WEAP, AD_PHYS, 1, 8), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(WT_ELF, 350, 0, MS_SANCT_L, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, + M2_NOPOLY|M2_ELF|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG| + M2_FEMALE|M2_COLLECT|M2_MAGIC, + M3_CLOSE|M3_INFRAVISIBLE, HI_LORD), + MON("Goblin King", S_ORC, + LVL(15, 10, 10, 0, -15), (G_NOGEN|G_UNIQ), + A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), + ATTK(AT_CLAW, AD_SAMU, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(750, 350, 0, MS_SANCT_N, MZ_HUMAN), 0, 0, + M1_HUMANOID|M1_OMNIVORE, + M2_NOPOLY|M2_ORC|M2_PEACEFUL|M2_STRONG|M2_MALE| + M2_GREEDY|M2_JEWELS|M2_COLLECT|M2_MAGIC, + M3_CLOSE|M3_INFRAVISIBLE, HI_LORD), + MON("High-elf", S_HUMAN, + LVL(5, 12, 10, 10, -7), G_NOGEN, + A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_MAGC, AD_CLRC, 0, 0), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(WT_ELF, 350, 0, MS_SANCT_G, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, + M2_NOPOLY|M2_ELF|M2_PEACEFUL|M2_COLLECT, M3_INFRAVISIBLE, + HI_DOMESTIC), + +/* 3.3.1 -> 3.4.0 - Wizard Quest */ + MON("Wizard of Balance", S_HUMAN, + LVL(20, 12, 0, 60, 0), (G_NOGEN|G_UNIQ), + A(ATTK(AT_WEAP, AD_PHYS, 1, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(WT_HUMAN, 400, 0, MS_SANCT_L, MZ_HUMAN), 0, 0, + M1_HUMANOID|M1_OMNIVORE, + M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, + M3_CLOSE|M3_INFRAVISIBLE, HI_LORD), + MON("retired apprentice", S_HUMAN, + LVL(5, 12, 10, 30, 0), G_NOGEN, + A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(WT_HUMAN, 400, 0, MS_SANCT_G, MZ_HUMAN), 0, 0, + M1_HUMANOID|M1_OMNIVORE, + M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, + M3_INFRAVISIBLE, HI_DOMESTIC), + +/* * array terminator */ MON("", 0, diff -urN nethack-3.4.0/src/objnam.c nethack-3.4.0-sanctuary/src/objnam.c --- nethack-3.4.0/src/objnam.c Thu Mar 21 01:43:12 2002 +++ nethack-3.4.0-sanctuary/src/objnam.c Wed Apr 3 16:09:17 2002 @@ -203,7 +203,17 @@ char *str; long save_Blinded = Blinded; - Blinded = 1; + +/* Kludge? You think the current function is a kludge? You haven't seen + * a kludge yet! Now _this_ is a kludge! + * We only want to set dknown if the object is the Palantir of Westernesse + * on the Sanctuary level. + */ + if (In_sanctuary && !strcmp(ONAME(obj), "the Palantir of Westernesse")) { + Blinded = 0; + } else { + Blinded = 1; + } str = (*func)(obj); Blinded = save_Blinded; return str; diff -urN nethack-3.4.0/src/pray.c nethack-3.4.0-sanctuary/src/pray.c --- nethack-3.4.0/src/pray.c Thu Mar 21 01:43:14 2002 +++ nethack-3.4.0-sanctuary/src/pray.c Wed Apr 3 17:40:53 2002 @@ -33,6 +33,7 @@ * accept your allegiance, after which they are your god. If rejected, * your god takes over with your punishment. * + if you're in Gehennom, all messages come from Moloch + * + if you're in the Sanctuary, all messages come from Erevan Ilesere */ /* @@ -1261,12 +1262,13 @@ int saved_luck = u.uluck; /* Sacrificing at an altar of a different alignment */ - if (u.ualign.type != altaralign) { + if ((u.ualign.type != altaralign) || In_sanctuary) { /* Is this a conversion ? */ /* An unaligned altar in Gehennom will always elicit rejection. */ - if (ugod_is_angry() || (altaralign == A_NONE && Inhell)) { + /* So will the altar in the Sanctuary */ + if (ugod_is_angry() || (altaralign == A_NONE && Inhell) || In_sanctuary) { if(u.ualignbase[A_CURRENT] == u.ualignbase[A_ORIGINAL] && - altaralign != A_NONE) { + altaralign != A_NONE && !In_sanctuary) { You("have a strong feeling that %s is angry...", u_gname()); consume_offering(otmp); pline("%s accepts your allegiance.", a_gname()); @@ -1291,7 +1293,7 @@ godvoice(altaralign, "Suffer, infidel!"); change_luck(-5); (void) adjattrib(A_WIS, -2, TRUE); - if (!Inhell) angrygods(u.ualign.type); + if (!Inhell && !In_sanctuary) angrygods(u.ualign.type); } return(1); } else { @@ -1504,7 +1506,7 @@ nomovemsg = "You finish your prayer."; afternmv = prayer_done; - if(p_type == 3 && !Inhell) { + if(p_type == 3 && !Inhell && !In_sanctuary) { /* if you've been true to your god you can't die while you pray */ if (!Blind) You("are surrounded by a shimmering light."); @@ -1534,12 +1536,16 @@ } if (Inhell) { pline("Since you are in Gehennom, %s won't help you.", - align_gname(alignment)); + align_gname(alignment)); /* haltingly aligned is least likely to anger */ if (u.ualign.record <= 0 || rnl(u.ualign.record)) angrygods(u.ualign.type); return(0); } + if (In_sanctuary) { + angrygods(u.ualign.type); + return(0); + } if (p_type == 0) { if(on_altar() && u.ualign.type != alignment) @@ -1602,8 +1608,9 @@ return(0); } - if (Inhell) { - pline("Since you are in Gehennom, %s won't help you.", u_gname()); + if (Inhell || In_sanctuary) { + pline("Since you are in %s, %s won't help you.", + Inhell ? "Gehennom" : "the Sanctuary", u_gname()); aggravate(); return(0); } @@ -1690,6 +1697,11 @@ aligntyp alignment; { const char *gnam; + +/* Only one god in the Sanctuary */ + if (In_sanctuary) { + return "Erevan Ilesere"; + } switch (alignment) { case A_NONE: gnam = Moloch; break; diff -urN nethack-3.4.0/src/priest.c nethack-3.4.0-sanctuary/src/priest.c --- nethack-3.4.0/src/priest.c Thu Mar 21 01:43:14 2002 +++ nethack-3.4.0-sanctuary/src/priest.c Wed Apr 3 17:42:37 2002 @@ -364,7 +364,7 @@ if(!sanctum) { /* !tended -> !shrined */ if (!shrined || !p_coaligned(priest) || - u.ualign.record <= ALGN_SINNED) + u.ualign.record <= ALGN_SINNED || In_sanctuary) You("have a%s forbidding feeling...", (!shrined) ? "" : " strange"); else You("experience a strange sense of peace."); diff -urN nethack-3.4.0/src/sounds.c nethack-3.4.0-sanctuary/src/sounds.c --- nethack-3.4.0/src/sounds.c Thu Mar 21 01:43:17 2002 +++ nethack-3.4.0-sanctuary/src/sounds.c Wed Apr 3 16:09:18 2002 @@ -256,6 +256,43 @@ } } +const char * +sanctuary_sounds(type) + uchar type; +{ + static const char *s_l_sounds[] = { + "I have watched many brave men and women throw away their lives for my cause.", + "The Goblin King seems rather unhappy, don't you think?", + "You can read more info about most of us using the '/' command.", + "In time they might find that they should not have retired us. But then it will be too late.", + "It appears that everything good must one day come to an end.", + "Tell me about YOUR quest for the Amulet." + }; + static const char *s_n_sounds[] = { + "Master Kaen! Hah! A wimpy upstart! One of these days I'm gonna go and show him the real meaning of fear.", + "Back in the old days _I_ was the deadliest Nemesis!", + "I'd like to get my hands on those responsible for this sacrilege!", + "Me and my pal Demogorgon, one day we'll clean the place out!", + "With my brains and a few orcish wizards and warriors we can make the Dungeons ours!", + "They dared to replace a mighty Goblin with a lousy scorpion?!" + }; + static const char *s_g_sounds[] = { + "What's the news in the Dungeons? We don't seem to get out much anymore.", + "Sometimes I kind of like this tranquility.", + "Have you visited the Museum already?", + "We will always stay beside our old masters.", + "It's strange to see Quest Leaders peacefully co-exist with a Quest Nemesis." + }; + switch (type) { + case MS_SANCT_L: + return s_l_sounds[rn2(SIZE(s_l_sounds))]; + case MS_SANCT_N: + return s_n_sounds[rn2(SIZE(s_n_sounds))]; + case MS_SANCT_G: + return s_g_sounds[rn2(SIZE(s_g_sounds))]; + } +} + #endif /* OVL0 */ #ifdef OVLB @@ -804,6 +841,11 @@ if (ptr == &mons[PM_DEATH] && !rn2(10)) pline_msg = "is busy reading a copy of Sandman #8."; else verbl_msg = "Who do you think you are, War?"; + break; + case MS_SANCT_L: + case MS_SANCT_N: + case MS_SANCT_G: + verbl_msg = sanctuary_sounds(mtmp->data->msound); break; } diff -urN nethack-3.4.0/src/teleport.c nethack-3.4.0-sanctuary/src/teleport.c --- nethack-3.4.0/src/teleport.c Thu Mar 21 01:43:18 2002 +++ nethack-3.4.0-sanctuary/src/teleport.c Wed Apr 3 16:12:49 2002 @@ -1026,6 +1026,8 @@ get_level(&tolevel, nlev); } +/* No monsters can/should be able to move in or out of the Sanctuary */ + if (Is_sanctuary(&tolevel) && In_sanctuary) return 0; if (in_sight) { pline("Suddenly, %s disappears out of sight.", mon_nam(mtmp)); seetrap(trap); diff -urN nethack-3.4.0/sys/msdos/Makefile.BC nethack-3.4.0-sanctuary/sys/msdos/Makefile.BC --- nethack-3.4.0/sys/msdos/Makefile.BC Thu Mar 21 01:43:38 2002 +++ nethack-3.4.0-sanctuary/sys/msdos/Makefile.BC Wed Apr 3 16:09:18 2002 @@ -716,7 +716,7 @@ $(DAT)\mines.des $(DAT)\oracle.des $(DAT)\Priest.des \ $(DAT)\Ranger.des $(DAT)\Rogue.des $(DAT)\Samurai.des \ $(DAT)\Tourist.des $(DAT)\tower.des $(DAT)\Valkyrie.des \ - $(DAT)\Wizard.des $(DAT)\yendor.des + $(DAT)\Wizard.des $(DAT)\yendor.des $(DAT)\sanct.des # # Utility Objects. @@ -986,6 +986,7 @@ $(U)lev_comp tourist.des $(U)lev_comp valkyrie.des $(U)lev_comp wizard.des + $(U)lev_comp sanct.des cd $(SRC) echo sp_levs done > $(DAT)\sp_lev.tag diff -urN nethack-3.4.0/sys/msdos/Makefile.GCC nethack-3.4.0-sanctuary/sys/msdos/Makefile.GCC --- nethack-3.4.0/sys/msdos/Makefile.GCC Thu Mar 21 01:43:38 2002 +++ nethack-3.4.0-sanctuary/sys/msdos/Makefile.GCC Wed Apr 3 16:09:18 2002 @@ -880,7 +880,7 @@ $(DAT)\caveman.des $(DAT)\healer.des $(DAT)\knight.des \ $(DAT)\monk.des $(DAT)\priest.des $(DAT)\ranger.des \ $(DAT)\rogue.des $(DAT)\samurai.des $(DAT)\tourist.des \ - $(DAT)\valkyrie.des $(DAT)\wizard.des + $(DAT)\valkyrie.des $(DAT)\wizard.des $(DAT)\sanct.des copy $(SRC)\lev_comp.exe $(DAT)\lev_comp.exe cd $(DAT) lev_comp bigroom.des @@ -907,6 +907,7 @@ lev_comp tourist.des lev_comp valkyrie.des lev_comp wizard.des + lev_comp sanct.des cd $(SRC) echo sp_levs done > sp_lev.tag diff -urN nethack-3.4.0/sys/msdos/Makefile.MSC nethack-3.4.0-sanctuary/sys/msdos/Makefile.MSC --- nethack-3.4.0/sys/msdos/Makefile.MSC Thu Mar 21 01:43:39 2002 +++ nethack-3.4.0-sanctuary/sys/msdos/Makefile.MSC Wed Apr 3 16:09:18 2002 @@ -144,7 +144,7 @@ $(DAT)\mines.des $(DAT)\oracle.des $(DAT)\Priest.des \ $(DAT)\Ranger.des $(DAT)\Rogue.des $(DAT)\Samurai.des \ $(DAT)\Tourist.des $(DAT)\tower.des $(DAT)\Valkyrie.des \ - $(DAT)\Wizard.des $(DAT)\yendor.des + $(DAT)\Wizard.des $(DAT)\yendor.des $(DAT)\sanct.des VGAOBJ = vidvga.o @@ -436,6 +436,7 @@ $(U)lev_comp tourist.des $(U)lev_comp valkyrie.des $(U)lev_comp wizard.des + $(U)lev_comp sanct.des cd $(SRC) # -@if exist $(O)sp_lev.tag del $(O)sp_lev.tag @echo sp_levs done >$(O)sp_lev.tag diff -urN nethack-3.4.0/sys/unix/Makefile.dat nethack-3.4.0-sanctuary/sys/unix/Makefile.dat --- nethack-3.4.0/sys/unix/Makefile.dat Thu Mar 21 01:43:53 2002 +++ nethack-3.4.0-sanctuary/sys/unix/Makefile.dat Wed Apr 3 16:09:18 2002 @@ -85,7 +85,7 @@ spec_levs: ../util/lev_comp \ bigroom.des castle.des endgame.des gehennom.des knox.des medusa.des \ - mines.des oracle.des sokoban.des tower.des yendor.des + mines.des oracle.des sokoban.des tower.des yendor.des sanct.des ../util/lev_comp bigroom.des ../util/lev_comp castle.des ../util/lev_comp endgame.des @@ -97,6 +97,7 @@ ../util/lev_comp sokoban.des ../util/lev_comp tower.des ../util/lev_comp yendor.des + ../util/lev_comp sanct.des touch spec_levs quest_levs: ../util/lev_comp \ diff -urN nethack-3.4.0/sys/winnt/Makefile.bcc nethack-3.4.0-sanctuary/sys/winnt/Makefile.bcc --- nethack-3.4.0/sys/winnt/Makefile.bcc Thu Mar 21 01:44:01 2002 +++ nethack-3.4.0-sanctuary/sys/winnt/Makefile.bcc Wed Apr 3 16:09:18 2002 @@ -543,7 +543,8 @@ $(DAT)\caveman.des $(DAT)\healer.des $(DAT)\knight.des \ $(DAT)\monk.des $(DAT)\priest.des $(DAT)\ranger.des \ $(DAT)\rogue.des $(DAT)\samurai.des $(DAT)\sokoban.des \ - $(DAT)\tourist.des $(DAT)\valkyrie.des $(DAT)\wizard.des + $(DAT)\tourist.des $(DAT)\valkyrie.des $(DAT)\wizard.des \ + $(DAT)\sanct.des cd $(DAT) $(U)lev_comp bigroom.des $(U)lev_comp castle.des @@ -569,6 +570,7 @@ $(U)lev_comp tourist.des $(U)lev_comp valkyrie.des $(U)lev_comp wizard.des + $(U)lev_comp sanct.des cd $(SRC) echo sp_levs done > $(O)sp_lev.tag diff -urN nethack-3.4.0/sys/winnt/Makefile.gcc nethack-3.4.0-sanctuary/sys/winnt/Makefile.gcc --- nethack-3.4.0/sys/winnt/Makefile.gcc Thu Mar 21 01:44:01 2002 +++ nethack-3.4.0-sanctuary/sys/winnt/Makefile.gcc Wed Apr 3 16:09:18 2002 @@ -515,7 +515,8 @@ $(DAT)/caveman.des $(DAT)/healer.des $(DAT)/knight.des \ $(DAT)/monk.des $(DAT)/priest.des $(DAT)/ranger.des \ $(DAT)/rogue.des $(DAT)/samurai.des $(DAT)/sokoban.des \ - $(DAT)/tourist.des $(DAT)/valkyrie.des $(DAT)/wizard.des + $(DAT)/tourist.des $(DAT)/valkyrie.des $(DAT)/wizard.des \ + $(DAT)\sanct.des $(subst /,\,cd $(DAT)) & \ $(subst /,\,$(U)lev_comp bigroom.des) & \ $(subst /,\,$(U)lev_comp castle.des) & \ @@ -541,6 +542,7 @@ $(subst /,\,$(U)lev_comp tourist.des) & \ $(subst /,\,$(U)lev_comp valkyrie.des) & \ $(subst /,\,$(U)lev_comp wizard.des) & \ + $(subst /,\,$(U)lev_comp sanct.des) & \ $(subst /,\,cd $(SRC)) $(subst /,\,echo sp_levs done > $(O)sp_lev.tag) diff -urN nethack-3.4.0/sys/winnt/Makefile.msc nethack-3.4.0-sanctuary/sys/winnt/Makefile.msc --- nethack-3.4.0/sys/winnt/Makefile.msc Thu Mar 21 01:44:01 2002 +++ nethack-3.4.0-sanctuary/sys/winnt/Makefile.msc Wed Apr 3 16:09:18 2002 @@ -491,7 +491,8 @@ $(DAT)\caveman.des $(DAT)\healer.des $(DAT)\knight.des \ $(DAT)\monk.des $(DAT)\priest.des $(DAT)\ranger.des \ $(DAT)\rogue.des $(DAT)\samurai.des $(DAT)\sokoban.des \ - $(DAT)\tourist.des $(DAT)\valkyrie.des $(DAT)\wizard.des + $(DAT)\tourist.des $(DAT)\valkyrie.des $(DAT)\wizard.des \ + $(DAT)\sanct.des cd $(DAT) $(U)lev_comp bigroom.des $(U)lev_comp castle.des @@ -517,6 +518,7 @@ $(U)lev_comp tourist.des $(U)lev_comp valkyrie.des $(U)lev_comp wizard.des + $(U)lev_comp sanct.des cd $(SRC) echo sp_levs done > $(O)sp_lev.tag diff -urN nethack-3.4.0/win/share/monsters.txt nethack-3.4.0-sanctuary/win/share/monsters.txt --- nethack-3.4.0/win/share/monsters.txt Thu Mar 21 01:44:16 2002 +++ nethack-3.4.0-sanctuary/win/share/monsters.txt Wed Apr 3 16:09:18 2002 @@ -7481,7 +7481,121 @@ MMMMBPPPPPPEMMMM MMMMMMMMMMMMMMMM } -# tile 393 (invisible monster) +# tile 393 (Earendil) +{ + MMMMMMMMMGMMMMMM + MMMMBMMGGFMMBMMM + MMMBBMGGGGABBMMM + MMBPBPLELEABPBMM + MMBBBPLLLLABBBMM + MMPBPPALLAPPPMMM + MMMPPBGAAGBBBMMM + MMMBBLGGGFLBBBMM + MMBBLAAGFAALBBMM + MMMBLAGGGFALBMMM + MMMMMMGFAFMMMMMM + MMMMMMLMMLMAAAMM + MMMMMMAAAAAAAAMM + MMMMAAAAAAAAMMMM + MMMMMAAAAAAMMMMM + MMMMMMMMMMMMMMMM +} +# tile 394 (Elwing) +{ + MMMMMMMMMGMMMMMM + MMMMBMMGGFMMBMMM + MMMBBMGGGGABBMMM + MMBPBHLELEHBPBMM + MMBBBHLLLLHBBBMM + MMPBHHALLAHHPMMM + MMMPHHGAAGHHBMMM + MMMBBLGGGFLBBBMM + MMBBLAAGFAALBBMM + MMMBLAGGGFALBMMM + MMMMMMGFAFMMMMMM + MMMMMMLMMLMAAAMM + MMMMMMAAAAAAAAMM + MMMMAAAAAAAAMMMM + MMMMMAAAAAAMMMMM + MMMMMMMMMMMMMMMM +} +# tile 395 (Goblin King) +{ + MMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMM + MHMMHMMMHMMMMMMM + CLCMHCHCHMMMMMMM + CLCMHHHHHMMMMMMM + MHMMIIIIIMMMMMMM + MHKMIHIHIMIMMMMM + MHICKIIIJKKMMMMM + MHMIIJJJKMAAMMMM + MHMMJICJJAAAAAMM + MHMMIIIIJAAAAAMM + MMMMJIIJJAAMMMMM + MMMMIJKJJAMMMMMM + MMMIKAAMIKMMMMMM + MMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMM +} +# tile 396 (High-elf) +{ + MMMMMMMMMGMMMMMM + MMMMMMMGGFMMMMMM + MMMMMMGGGGAMMMMM + MMMMMMLILIAMMMMM + MMMMMMLLLLAMMMMM + MMMMMMALLAMMMMMM + MMMMMMGAAGMMAAMM + MMMMMLGGGFLAAAAM + MMMMLAAGFAALAAAM + MMMMLAMGFAALAAMM + MMMMLAMGFAALAAMM + MMMMLAGGGFALMAMM + MMMMMMGFAFAAMAMM + MMMMMMGFAFAAMMMM + MMMMMMGFAFAAMMMM + MMMMMKLAMLKAMMMM +} +# tile 397 (Wizard of Balance) +{ + MMMMMMMMMBPMMMMM + MMMMMMBBBPEMMMMM + MMMMMBPPPEAMMMMM + MMMMMBAAAEAMMMMM + MMMHMPAAAEAMMMMM + MMMHBPLLLEAMMMMM + MHHHHHPLLEMMMMMM + MCMLMCBAAEAMAAAM + PCPHPCPBBEEAAAAM + CHCHCHCPPEEEAAMM + MMMHMEEPPEALAAMM + MMHHHEPPPEAAAAMM + MMMMMBPPPEAAMAMM + MMMMBPPPPPEAMMMM + MMMBPPPPPPPEMMMM + MMMMMMMMMMMMMMMM +} +# tile 398 (retired apprentice) +{ + MMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMM + MMMMMMJJJMMMMMMM + MMMMMJLLLJMMMMMM + MMMMMMGLGMMMMMMM + MMMMMBLLLEMMMMMM + MMMMMBBEEEAMAAAM + MMMMMBBPBEEAAAAM + MMMMPPPBEEEEAAMM + MMMMLABPPEALAAMM + MMMMMMBPPEAAAAMM + MMMMMBPPPEAAMAMM + MMMMMBPPPPEAMMMM + MMMMBPPPPPPEMMMM + MMMMMMMMMMMMMMMM +} +# tile 399 (invisible monster) { MMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMM