From 274904f9be5931c692fc50ec63ee1cccbf511e6b Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 1 May 2015 18:01:12 -0700 Subject: [PATCH 1/9] stabilize loss of gold When gold is stolen by a leprechaun or lost when being "overwhelmed by an urge to take a bath" while dipping in a fountain, if you had 99 gold pieces or less, you'd lose all of it (in the bath case, only if it was at least 10 to start with), but if you had 100 or more, you would lose a random amount which could be as little as 1. And in the bath case, if the random amount was less than 10, you would lose nothing but be told that "you lost some of your money in the fountain". After this change, it is still possible to lose less when starting with more, but not as likely and not as extreme a case as maybe losing only 1 when starting with thousands. The fountain-dip bath case has code to handle mutiple denominations of coins, possibly the only place in the program where that exists. I've left that alone although it should probably be taken out.... --- src/steal.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/steal.c b/src/steal.c index f803ae4da..e3f09f524 100644 --- a/src/steal.c +++ b/src/steal.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 steal.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 steal.c $NHDT-Date: 1430528463 2015/05/02 01:01:03 $ $NHDT-Branch: master $:$NHDT-Revision: 1.53 $ */ /* NetHack 3.5 steal.c $Date: 2012/02/05 04:26:48 $ $Revision: 1.41 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -23,15 +23,31 @@ register struct obj *otmp; } long /* actually returns something that fits in an int */ -somegold(umoney) -long umoney; +somegold(lmoney) +long lmoney; { #ifdef LINT /* long conv. ok */ - return(0L); + int igold = 0; #else - return (long)( (umoney < 100) ? umoney : - (umoney > 10000) ? rnd(10000) : rnd((int) umoney) ); + int igold = (lmoney >= (long)LARGEST_INT) ? LARGEST_INT : (int)lmoney; #endif + + if (igold < 50) + ; /* all gold */ + else if (igold < 100) + igold = rn1(igold - 25 + 1, 25); + else if (igold < 500) + igold = rn1(igold - 50 + 1, 50); + else if (igold < 1000) + igold = rn1(igold - 100 + 1, 100); + else if (igold < 5000) + igold = rn1(igold - 500 + 1, 500); + else if (igold < 10000) + igold = rn1(igold - 1000 + 1, 1000); + else + igold = rn1(igold - 5000 + 1, 5000); + + return (long)igold; } /* From 40fdbccf84a5c745dd76c03088c8890039610c1f Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 1 May 2015 19:44:56 -0700 Subject: [PATCH 2/9] enlightenment for polymorph & lycanthropy Fine-tune lycanthropy feedback by combining "you are a werecritter" and "you are in beast form" into one message. Also, add some new feedback when lycanthropy and intrinsic polymorph are blocked by intrinsic unchanging. --- src/cmd.c | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/cmd.c b/src/cmd.c index 24b1791c5..973a447cd 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 cmd.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ +/* NetHack 3.5 cmd.c $NHDT-Date: 1430534601 2015/05/02 02:43:21 $ $NHDT-Branch: master $:$NHDT-Revision: 1.186 $ */ /* NetHack 3.5 cmd.c $Date: 2013/03/16 01:44:28 $ $Revision: 1.162 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1935,27 +1935,54 @@ int final; } if (Half_physical_damage) enlght_halfdmg(HALF_PHDAM, final); if (Half_spell_damage) enlght_halfdmg(HALF_SPDAM, final); + /* polymorph and other shape change */ if (Protection_from_shape_changers) you_are("protected from shape changers", from_what(PROT_FROM_SHAPE_CHANGERS)); - if (Polymorph) you_are("polymorphing", from_what(POLYMORPH)); + if (Unchanging) { + const char *what = 0; + + if (!Upolyd) /* Upolyd handled below after current form */ + you_can("not change from your current form", + from_what(UNCHANGING)); + /* blocked shape changes */ + if (Polymorph) + what = !final ? "polymorph" : "have polymorphed"; + else if (u.ulycn >= LOW_PM) + what = !final ? "change shape" : "have changed shape"; + if (what) { + Sprintf(buf, "would %s periodically", what); + /* omit from_what(UNCHANGING); too verbose */ + enl_msg(You_, buf, buf, + " if not locked into your current form", ""); + } + } else if (Polymorph) { + you_are("polymorphing periodically", from_what(POLYMORPH)); + } if (Polymorph_control) you_have("polymorph control",from_what(POLYMORPH_CONTROL)); - if (u.ulycn >= LOW_PM) { - Strcpy(buf, an(mons[u.ulycn].mname)); + if (Upolyd && u.umonnum != u.ulycn) { + /* foreign shape (except were-form which is handled below) */ + Sprintf(buf, "polymorphed into %s", an(youmonst.data->mname)); + if (wizard) Sprintf(eos(buf), " (%d)", u.mtimedone); you_are(buf,""); } - if (Upolyd) { - if (u.umonnum == u.ulycn) Strcpy(buf, "in beast form"); - else Sprintf(buf, "polymorphed into %s", an(youmonst.data->mname)); - if (wizard) Sprintf(eos(buf), " (%d)", u.mtimedone); - you_are(buf,""); - if (lays_eggs(youmonst.data) && flags.female) + if (lays_eggs(youmonst.data) && flags.female) /* Upolyd */ you_can("lay eggs", ""); + if (u.ulycn >= LOW_PM) { + /* "you are a werecreature [in beast form]" */ + Strcpy(buf, an(mons[u.ulycn].mname)); + if (u.umonnum == u.ulycn) { + Strcat(buf, " in beast form"); + if (wizard) Sprintf(eos(buf), " (%d)", u.mtimedone); + } + you_are(buf,""); } - if (Unchanging) you_can("not change from your current form", - from_what(UNCHANGING)); + if (Unchanging && Upolyd) /* !Upolyd handled above */ + you_can("not change from your current form", + from_what(UNCHANGING)); if (Hate_silver) you_are("harmed by silver",""); + /* movement and non-armor-based protection */ if (Fast) you_are(Very_fast ? "very fast" : "fast",from_what(FAST)); if (Reflecting) you_have("reflection",from_what(REFLECTING)); if (Free_action) you_have("free action",from_what(FREE_ACTION)); From ee854e5c7685edd89a2ee2826db361c9461809f1 Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 2 May 2015 02:44:57 -0700 Subject: [PATCH 3/9] more owornmask sanity_check Fix the problem with erroneously detecting wielded or quivered chained ball which legitimately has more than one mask bit set. Add an additional check for valid wornmask of an item somehow worn in an invalid slot (such as an amulet in one of the ring slots). Only lightly tested; it really needs debugger assistance to force various invalid situations but I don't know gdb well enough for that. --- src/mkobj.c | 58 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/src/mkobj.c b/src/mkobj.c index 50f2b5b7e..899581128 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 mkobj.c $NHDT-Date: 1430472720 2015/05/01 09:32:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.95 $ */ +/* NetHack 3.5 mkobj.c $NHDT-Date: 1430559882 2015/05/02 09:44:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.96 $ */ /* NetHack 3.5 mkobj.c $Date: 2012/03/10 02:49:08 $ $Revision: 1.70 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2180,32 +2180,44 @@ struct obj *obj; /* [W_ART,W_ARTI are property bits for items which aren't worn] */ }; char maskbuf[60]; - unsigned long allmask = 0L; + unsigned long owornmask, allmask = 0L; int i, n = 0; + /* use owornmask for testing and bit twiddling, but use original + obj->owornmask for printing */ + owornmask = obj->owornmask; + /* figure out how many bits are set, and also which are viable */ for (i = 0; wearbits[i]; ++i) { + if ((owornmask & wearbits[i]) != 0L) ++n; allmask |= wearbits[i]; - if ((obj->owornmask & wearbits[i]) != 0L) ++n; + } + if (n == 2 && carried(obj) && obj == uball && (owornmask & W_BALL) != 0L + && (owornmask & (W_WEP|W_SWAPWEP|W_QUIVER)) != 0L) { + /* chained ball can be wielded/alt-wielded/quivered; if so, + pretend it's not chained in order to check the weapon pointer + (we've already verified the ball pointer by successfully passing + the if-condition to get here...) */ + owornmask &= ~W_BALL; + n = 1; } if (n > 1) { /* multiple bits set */ Sprintf(maskbuf, "worn mask (multiple) 0x%08lx", obj->owornmask); insane_object(obj, ofmt0, maskbuf, (struct monst *)0); } - if ((obj->owornmask & ~allmask) != 0L - || (carried(obj) && (obj->owornmask & W_SADDLE) != 0L)) { + if ((owornmask & ~allmask) != 0L + || (carried(obj) && (owornmask & W_SADDLE) != 0L)) { /* non-wearable bit(s) set */ Sprintf(maskbuf, "worn mask (bogus)) 0x%08lx", obj->owornmask); insane_object(obj, ofmt0, maskbuf, (struct monst *)0); } - if (n == 1 && (carried(obj) - || (obj->owornmask & (W_BALL|W_CHAIN)) != 0L)) { + if (n == 1 && (carried(obj) || (owornmask & (W_BALL|W_CHAIN)) != 0L)) { const char *what = 0; /* verify that obj in hero's invent (or ball/chain elsewhere) with owornmask of W_foo is the object pointed to by ufoo */ - switch (obj->owornmask) { - case W_ARM: if (obj != uarm) what = "armor"; /* suit */ + switch (owornmask) { + case W_ARM: if (obj != uarm) what = "suit"; break; case W_ARMC: if (obj != uarmc) what = "cloak"; break; @@ -2245,6 +2257,34 @@ struct obj *obj; Sprintf(maskbuf, "worn mask 0x%08lx != %s", obj->owornmask, what); insane_object(obj, ofmt0, maskbuf, (struct monst *)0); } + /* check for items worn in invalid slots; practically anything can + be wielded/alt-wielded/quivered, so skip obj if it's one of those */ + what = 0; + if (owornmask & W_ARMOR) { + if (obj->oclass != ARMOR_CLASS) what = "armor"; + } else if (owornmask & W_AMUL) { + if (obj->oclass != AMULET_CLASS) what = "amulet"; + } else if (owornmask & W_RING) { + if (obj->oclass != RING_CLASS && obj->otyp != MEAT_RING) + what = "ring"; + } else if (owornmask & W_TOOL) { + if (obj->otyp != BLINDFOLD && obj->otyp != TOWEL + && obj->otyp != LENSES) what = "blindfold"; + } else if (owornmask & W_BALL) { + if (obj->oclass != BALL_CLASS) what = "chained ball"; + } else if (owornmask & W_CHAIN) { + if (obj->oclass != CHAIN_CLASS) what = "chain"; + } + if (what) { + char oclassname[30]; + + /* if we've found a potion worn in the amulet slot, + this yields "worn (potion amulet)" */ + Strcpy(oclassname, def_oc_syms[(uchar)obj->oclass].name); + Sprintf(maskbuf, "worn (%s %s)", + makesingular(oclassname), what); + insane_object(obj, ofmt0, maskbuf, (struct monst *)0); + } } #else /* not (BETA || DEBUG) */ /* dummy use of obj to avoid "arg not used" complaint */ From b234c7032f5b1a19c756997b2907e2ca131a285a Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 2 May 2015 18:29:31 +0300 Subject: [PATCH 4/9] Make the Valley have slight variations --- dat/gehennom.des | 18 ++++++++++++++++++ util/lev_comp.y | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dat/gehennom.des b/dat/gehennom.des index 470d0dea0..8d4c72445 100644 --- a/dat/gehennom.des +++ b/dat/gehennom.des @@ -31,6 +31,24 @@ MAP | |..|..B...........| |.|..........|.| |.|........| | ---------------------------------------------------------------------------- ENDMAP + +# Make the path somewhat unpredictable +# If you get "lucky", you may have to go through all three graveyards. +IF [50%] { + TERRAIN:line (50,8),(53,8), '-' + TERRAIN:line (40,8),(43,8), 'B' +} +IF [50%] { + TERRAIN:(27,12),'|' + TERRAIN:line (27,3),(29,3), 'B' + TERRAIN:(28,2), '-' +} +IF [50%] { + TERRAIN:line (16,10),(16,11),'|' + TERRAIN:line (9,13),(14,13), 'B' +} + + # Dungeon Description # The shrine to Moloch. REGION:(01,06,05,14),lit,"temple" diff --git a/util/lev_comp.y b/util/lev_comp.y index 0a153bef2..9b7ed7c47 100644 --- a/util/lev_comp.y +++ b/util/lev_comp.y @@ -2450,11 +2450,11 @@ ter_selection_x : coord_or_var { add_opvars(splev, "o", VA_PASS1(SPO_SEL_FILLRECT)); } - | line_ID coord_or_var '-' coord_or_var + | line_ID coord_or_var ',' coord_or_var { add_opvars(splev, "o", VA_PASS1(SPO_SEL_LINE)); } - | randline_ID coord_or_var '-' coord_or_var ',' math_expr_var + | randline_ID coord_or_var ',' coord_or_var ',' math_expr_var { /* randline (x1,y1),(x2,y2), roughness */ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDLINE)); From 537acc98dc28de9a5a0165e33fd92449cac8e6b7 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 2 May 2015 18:33:14 +0300 Subject: [PATCH 5/9] Update pregenerated levcomp lex and yacc files --- sys/share/lev_yacc.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/sys/share/lev_yacc.c b/sys/share/lev_yacc.c index d2280994c..88aebc857 100644 --- a/sys/share/lev_yacc.c +++ b/sys/share/lev_yacc.c @@ -895,7 +895,7 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1031 +#define YYLAST 1033 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 194 @@ -1176,9 +1176,9 @@ static const yytype_int16 yypact[] = -654, 309, 387, 555, 556, 558, 733, 733, -654, -654, 66, -31, 671, 46, 698, 571, 567, 672, 573, 66, 215, 700, 566, 581, 66, 587, 359, 589, 66, 359, - -18, -18, 672, 663, 664, -654, -654, 541, 544, 521, - -654, -18, -18, 307, -654, 595, 590, 672, 597, 66, - 67, 186, 659, 730, 604, 669, -1, 8, -654, 606, + -18, -18, 672, 663, 664, -654, -654, 592, 593, 521, + -654, -18, -18, 307, -654, 598, 596, 672, 597, 66, + 67, 186, 660, 730, 604, 669, -1, 8, -654, 606, 607, -1, -1, -1, 66, 609, 89, -18, 141, 12, 57, 665, -654, 52, 52, -654, 156, 605, -38, 697, -654, -654, 331, 347, 168, 168, -654, -654, -654, 56, @@ -1339,9 +1339,9 @@ static const yytype_int16 yypgoto[] = -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, 421, -653, 200, -654, -385, -492, -654, -654, -654, 369, 682, -168, -136, - -312, 583, 150, -308, -386, -485, -418, -473, 596, -459, - -132, -55, -654, 396, -654, -654, 610, -654, -654, 781, - -135, 576, -392, -654, -654, -654, -654, -654, -124, -654 + -312, 583, 150, -308, -386, -485, -418, -473, 602, -459, + -132, -55, -654, 396, -654, -654, 610, -654, -654, 778, + -135, 575, -392, -654, -654, -654, -654, -654, -124, -654 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -1442,8 +1442,8 @@ static const yytype_int16 yytable[] = 433, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 442, 443, 444, 446, 451, 452, 310, 311, 312, 313, 314, 453, 310, 311, 312, 313, 314, 455, 857, - 457, 463, 464, 480, 481, 864, 493, 465, 483, 819, - 466, 202, 203, 193, 494, 495, 496, 501, 502, 16, + 457, 463, 464, 465, 466, 864, 480, 493, 483, 819, + 481, 202, 203, 193, 494, 495, 496, 501, 502, 16, 507, 526, -159, 537, 194, 195, 554, 17, 845, 552, 18, 19, 20, 21, 22, 23, 24, 25, 26, 555, 557, 853, 27, 28, 29, 558, 561, 586, 30, 31, @@ -1472,8 +1472,8 @@ static const yytype_int16 yytable[] = 839, 840, 833, 841, 843, 846, 848, 850, 849, 10, 851, 172, 855, 856, 434, 861, 863, 339, 166, 865, 508, 807, 560, 292, 796, 802, 753, 299, 826, 222, - 847, 838, 731, 437, 668, 698, 556, 547, 0, 535, - 374, 581 + 847, 838, 731, 437, 668, 698, 556, 374, 0, 535, + 581, 0, 0, 547 }; static const yytype_int16 yycheck[] = @@ -1550,8 +1550,8 @@ static const yytype_int16 yycheck[] = 132, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 3, 131, 136, 131, 5, 140, 185, 186, 187, 188, 189, 131, 185, 186, 187, 188, 189, 131, 855, - 131, 58, 58, 128, 134, 861, 67, 186, 131, 784, - 186, 59, 60, 139, 4, 131, 67, 131, 131, 6, + 131, 58, 58, 131, 131, 861, 128, 67, 131, 784, + 134, 59, 60, 139, 4, 131, 67, 131, 131, 6, 131, 136, 77, 131, 150, 151, 3, 14, 831, 138, 17, 18, 19, 20, 21, 22, 23, 24, 25, 131, 134, 844, 29, 30, 31, 4, 139, 131, 35, 36, @@ -1580,8 +1580,8 @@ static const yytype_int16 yycheck[] = 4, 134, 192, 134, 134, 131, 134, 134, 129, 5, 134, 55, 131, 131, 336, 131, 860, 192, 49, 134, 396, 767, 450, 164, 754, 762, 678, 169, 795, 139, - 833, 821, 653, 341, 603, 629, 443, 431, -1, 419, - 249, 455 + 833, 821, 653, 341, 603, 629, 443, 249, -1, 419, + 455, -1, -1, 431 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1634,7 +1634,7 @@ static const yytype_uint16 yystos[] = 335, 132, 132, 132, 209, 207, 335, 321, 3, 3, 133, 297, 3, 131, 136, 344, 131, 335, 64, 65, 271, 5, 140, 131, 335, 131, 208, 131, 335, 208, - 323, 323, 344, 58, 58, 186, 186, 58, 267, 344, + 323, 323, 344, 58, 58, 131, 131, 58, 267, 344, 323, 323, 3, 7, 133, 158, 159, 328, 329, 344, 128, 134, 344, 131, 335, 55, 59, 316, 59, 61, 62, 317, 320, 67, 4, 131, 67, 352, 59, 133, From 03a1fcfc56d50c71f1a49f026db5b2d5841726dc Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 2 May 2015 19:27:05 +0300 Subject: [PATCH 6/9] Put Rogue quest home monsters on the "streets" --- dat/Rogue.des | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/dat/Rogue.des b/dat/Rogue.des index 38921c371..f8231baf6 100644 --- a/dat/Rogue.des +++ b/dat/Rogue.des @@ -39,6 +39,10 @@ MAP ENDMAP # Dungeon Description #REGION:(00,00,75,20),lit,"ordinary" + +$streets = selection: floodfill(0,12) + + # The down stairs is at one of the 4 "exits". The others are mimics, # mimicing stairwells. $place = { (33,0), (0,12), (25,20), (75,05) } @@ -149,26 +153,14 @@ MONSTER: ('l',"leprechaun"),(74,04),hostile # South exit MONSTER: ('l',"leprechaun"),(25,19),hostile MONSTER: ('n',"water nymph"),(25,18),hostile -# Wandering the streets. What I'd really like for this is a random -# location, but make sure we're on a given type, e.g. street (if they -# existed, of course). -MONSTER: ('n',"water nymph"),(07,05),hostile -MONSTER: ('l',"leprechaun"),(28,06),hostile -MONSTER: ('n',"water nymph"),(38,07),hostile -MONSTER: ('l',"leprechaun"),(45,01),hostile -MONSTER: ('n',"water nymph"),(59,07),hostile -MONSTER: ('l',"leprechaun"),(62,14),hostile -MONSTER: ('n',"water nymph"),(71,14),hostile -MONSTER: ('l',"leprechaun"),(39,13),hostile -MONSTER: ('n',"water nymph"),(18,14),hostile -MONSTER: (':',"chameleon"),(19,08),hostile -MONSTER: (':',"chameleon"),(22,08),hostile -MONSTER: (':',"chameleon"),(16,08),hostile -MONSTER: (':',"chameleon"),random,hostile -MONSTER: (':',"chameleon"),random,hostile -MONSTER: (':',"chameleon"),random,hostile -MONSTER: (':',"chameleon"),random,hostile -MONSTER: (':',"chameleon"),random,hostile +# Wandering the streets. +LOOP [ 4 + 1d3 ] { + MONSTER: ('n',"water nymph"),rndcoord($streets),hostile + MONSTER: ('l',"leprechaun"),rndcoord($streets),hostile +} +LOOP [ 7 + 1d3 ] { + MONSTER: (':',"chameleon"),rndcoord($streets),hostile +} # # The "locate" level for the quest. From 37d76d1ea5846f0cb56d49779d0eba173778eef5 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 2 May 2015 19:54:45 +0300 Subject: [PATCH 7/9] Add trees to Priest quest home level --- dat/Priest.des | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dat/Priest.des b/dat/Priest.des index f8d3d4b75..0312698bc 100644 --- a/dat/Priest.des +++ b/dat/Priest.des @@ -38,6 +38,11 @@ ENDMAP # Dungeon Description REGION:(00,00,75,19),lit,"ordinary" REGION:(24,06,33,13),lit,"temple" + +REPLACE_TERRAIN:(0,0,10,19),'.','T',10% +REPLACE_TERRAIN:(65,0,75,19),'.','T',10% +TERRAIN:(05,04),'.' + # Portal arrival point BRANCH:(05,04,05,04),(0,0,0,0) # Stairs @@ -77,7 +82,7 @@ MONSTER:('@',"acolyte"),(33,08) MONSTER:('@',"acolyte"),(33,11) MONSTER:('@',"acolyte"),(33,12) # Non diggable walls -NON_DIGGABLE:(00,00,75,19) +NON_DIGGABLE:(18,03,55,16) # Random traps TRAP:"dart",(20,09) TRAP:"dart",(20,10) From 1b0e806f7259c3bc00aec575d7f23385913b86d3 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 2 May 2015 20:29:15 +0300 Subject: [PATCH 8/9] Add some clouds to the Wiz quest --- dat/Wizard.des | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/dat/Wizard.des b/dat/Wizard.des index d70be72d6..1b4ed5d86 100644 --- a/dat/Wizard.des +++ b/dat/Wizard.des @@ -34,6 +34,12 @@ MAP ..........C.C.........................C............C...........}}}}}........ ......................CCC.C................................................. ENDMAP + +# first do cloud everywhere +REPLACE_TERRAIN:(0,0, 75,19), '.', 'C', 10% +# then replace clouds inside the tower back to floor +REPLACE_TERRAIN:(13,5, 33,15), 'C', '.', 100% + # Dungeon Description REGION:(00,00,75,19),lit,"ordinary" REGION:(35,00,49,03),unlit,"ordinary" @@ -43,6 +49,7 @@ REGION:(30,10,31,10),unlit,"ordinary" # Stairs STAIR:(30,10),down # Portal arrival point +TERRAIN:(63,06),'.' BRANCH:(63,06,63,06),(0,0,0,0) # Doors DOOR:closed,(31,09) @@ -129,6 +136,11 @@ MAP ............. .............}}}}}}}.}}}}}}}}}}}}}}}}}}}.}}}}}}}....... ............. ....................................................... ENDMAP + +REPLACE_TERRAIN:(0,0,30,20), '.', 'C', 15% +REPLACE_TERRAIN:(68,0,75,20), '.', '}', 25% +REPLACE_TERRAIN:(34,1,68,19), '}', '.', 2% + # Dungeon Description REGION:(00,00,75,20),lit,"ordinary" REGION:(37,04,65,16),unlit,"ordinary" @@ -148,6 +160,7 @@ DOOR:locked,(55,12) DOOR:locked,(47,08) DOOR:locked,(47,12) # Stairs +TERRAIN:(03,17),'.' STAIR:(03,17),up STAIR:(48,10),down # Non diggable walls From 04bea1029806de32d0772a339dcfb989ec74c922 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sat, 2 May 2015 20:47:02 +0300 Subject: [PATCH 9/9] Random melted spots in Valk quest home --- dat/Valkyrie.des | 53 ++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/dat/Valkyrie.des b/dat/Valkyrie.des index ad9c942bf..f9a9f2213 100644 --- a/dat/Valkyrie.des +++ b/dat/Valkyrie.des @@ -12,28 +12,41 @@ # MAZE: "Val-strt",' ' FLAGS: noteleport,hardfloor,icedpools +INIT_MAP:solidfill,'I' + +$pools = selection: random & random & random & random & random & + random & random & random & random & random & random & + random & random & + grow(west, random) & + grow(north, random) & + grow(random & random) +# This works because the random coordinates in $pools are evaluated once, +# when the variable is initialized. +TERRAIN:grow($pools), 'P' +TERRAIN:$pools, 'L' + GEOMETRY:center,center MAP -IIIIIIPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII -IIIIPPPPPIIIIIIII..IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...IIIIIIIIIIIIIIIIIIIII -IIIIPLLPPIIIIIII..IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII..{..IIIIIIIIIIIIIIIIIIII -IIIIPLPPIIIIIII..IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.....IIIIIIPPPIIIIIIIIII -IIIPPPPPIIIIII..IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.IIIIIPPLPIIIIIIIIII -IIIIPIIIIIIII..IIIIPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.IIIIIPLPPIIIIIIIIII -IIIIIIIIIIII..IIIIIPLPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII..IIIIIPPPIIIIIIIIIII -IIIIIIII.....IIIIIIPPPIIII|----------------|IIIIIPPPIII.IIIIIIIIIIIIIIIIIIII -IIIIIII..III...IIIIIIIIIII|................|IIIIIPLPII..IIIIIIIIIIIIIIIIIIII -IIIIII..IIIIII......IIIII.|................|.IIIIPPPII.IIIIIIIIIIIIIIIIIIIII -IIIII..IIIIIIIIIIII.......+................+...IIIIIII.IIIIIIIIIIIIIIIIIIIII -IIII..IIIIIIIII.....IIIII.|................|.I...IIIII.IIIIIIIIIIIIIIIIIIIII -III..IIIIIIIII..IIIIIIIIII|................|IIII.......IIIIIIIIIIIIIIIIIIIII -IIII..IIIIIII..IIIIIIIIIII|----------------|IIIIIIIIII...IIIIIIIIIIIIIIIIIII -IIIIII..IIII..IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPPPPIIII...IIIIIIIIIIIIIIIII -IIIIIII......IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPLLPPIIIII...IIIIIIIIIIIIIII -IIIIPPPIP...IIIIIIIIIIIPIIIIIIIIIIIIIIIIIIIIIIIIPPPPIIIIIIII...I......IIIIII -IIIPPLPPIIIIIIIIIIIIIIPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.........IIIII -IIIIPPPIIIIIIIIIIIIIIPPLPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.......IIIIII -IIIIIIIIIIIIIIIIIIIIIIPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..{..xxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.....xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxx +xxxxxxxx.....xxxxxxxxxxxxx|----------------|xxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx +xxxxxxx..xxx...xxxxxxxxxxx|................|xxxxxxxxxx..xxxxxxxxxxxxxxxxxxxx +xxxxxx..xxxxxx......xxxxx.|................|.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxx +xxxxx..xxxxxxxxxxxx.......+................+...xxxxxxx.xxxxxxxxxxxxxxxxxxxxx +xxxx..xxxxxxxxx.....xxxxx.|................|.x...xxxxx.xxxxxxxxxxxxxxxxxxxxx +xxx..xxxxxxxxx..xxxxxxxxxx|................|xxxx.......xxxxxxxxxxxxxxxxxxxxx +xxxx..xxxxxxx..xxxxxxxxxxx|----------------|xxxxxxxxxx...xxxxxxxxxxxxxxxxxxx +xxxxxx..xxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxx +xxxxxxx......xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxx +xxxxxxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...x......xxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.........xxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.......xxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ENDMAP # Dungeon Description REGION:(00,00,75,19),lit,"ordinary"