diff --git a/dat/oracles.txt b/dat/oracles.txt index d4d5ae250..cbaeb5d3b 100644 --- a/dat/oracles.txt +++ b/dat/oracles.txt @@ -100,5 +100,6 @@ be old and miserly. The name of Elbereth may strike fear into the hearts of thine enemies, if thou dost write it upon the ground at thy feet. If thou maintainest the utmost calm, thy safety will be aided greatly, but beware lest thy clumsy -feet scuff the inscription, cancelling its potence. +feet scuff the inscription, cancelling its potence, or thy wayward +sword-arm break the truce. ----- diff --git a/dat/rumors.tru b/dat/rumors.tru index 97d66495a..432b220de 100644 --- a/dat/rumors.tru +++ b/dat/rumors.tru @@ -2,6 +2,7 @@ A blindfold can be very useful if you're telepathic. A candelabrum affixed with seven candles shows the way with a magical light. A cream pie has two uses: food... and entertainment. A crystal plate mail will not rust. +A dead body may protect your live body. But only an item can protect an item. A katana might slice a worm in two. A magic vomit pump could be useful for gourmands. A nymph knows how to unlock chains. @@ -29,7 +30,6 @@ Bandaging wounds helps keep up appearances. Bashing monsters with a bow is not such a good idea. Be careful! The Wizard may plan an ambush! Be nice to a nurse: Put away your weapon and take off your clothes. -Being digested is a painfully slow process. Blank scrolls make more interesting reading. Blind? Catch a floating eye! Booksellers never read scrolls; they might get carried away. @@ -45,6 +45,7 @@ Don't forget! Large dogs are MUCH harder to kill than little dogs. Don't lash out at people while blinded. Don't mess with shopkeepers, or you'll get the Guild after you. Dragons never whip their children; they wouldn't feel it! +Dwarves use their cloaks to keep their drinks cool. Eat your carrots. They're good for your eyes. Eating a freezing sphere is like eating a yeti. Eating a killer bee is like eating a scorpion. @@ -56,9 +57,10 @@ Elf corpses are incompatible with the sandman, and at times the gods as well. Elven cloaks cannot rust. Elves can help you feel less tired. Even evil players have a guardian angel. +Even the most powerful heroes sometimes need to quaff away their injuries. Ever fought with an enchanted tooth? Ever tried reading while confused? -Ever tried to put a troll into a large box? +Ever tried to lock a troll inside a large box? Ever wondered why one would want to dip something in a potion? Expensive cameras have penetrating flash lights. Extra staircases lead to extra levels. @@ -74,6 +76,7 @@ Got a question? Try rec.games.roguelike.nethack. Grave robbers sometimes get rich. Guy Montag keeps his scrolls in a bag. Handle your flasks carefully -- there might be a ghost inside! +Heavy-duty boots can protect more than just your feet. Holy water has many uses. Horses trust their riders, even when not so deserved. Hunger is a confusing experience for a dog! @@ -90,6 +93,7 @@ If you want to hit, use a dagger. If you want to rob a shop, train your dog. If you're lost, try buying a map next time you're in a shop. If your hands are greasy, why not wash them? +If your items get destroyed, you weren't wearing the right ring. Inside a shop you better take a look at the price tags before buying anything. It is bad manners to use a wand in a shop. It is dangerous to visit a graveyard at midnight. @@ -98,7 +102,7 @@ It is rumored that the Wizard has hired some help. It is the letter 'c' and not 'e' that changes status to statue. It might be a good idea to offer the unicorn a ruby. It would be peculiarly sad were your dog turned to stone. -It's a `d' eats `d' world. +It's a 'd' eats 'd' world. Just because it says READ ME doesn't mean you should. Keep your armors away from rust. Keep your weaponry away from acids. @@ -119,6 +123,7 @@ Nurses are trained to touch naked persons: they don't harm them. Nymphs can unlink more than your chain mail. Once your little dog will be a big dog, and you will be proud of it. Only female monsters can lay eggs. +Only the most confused adventurers would read cursed destroy armor scrolls. Opening a tin is difficult, especially when you attempt it bare handed! Orcs and killer bees share their lifestyle. Orcs do not procreate in dark rooms. @@ -155,12 +160,14 @@ Sometimes monsters are more likely to fight each other than attack you. Spinach, carrot, and jelly -- a meal fit for a nurse! Surviving the full extent of the mines could mean that your luck is changing. Tainted meat is even more sickening than poison! +Take your healing potions to the next level! Telepathy is just a trick: once you know how to do it, it's easy. The Leprechaun Gold Tru$t is no division of the Magic Memory Vault. The Wizard finds death to be quite an experience. The best equipment for your work is, of course, the most expensive. The gods don't appreciate pesky priesthood. The gods will get angry if you kill your dog. +The less magic in your armor, the more you can add. The magic marker is mightier than the sword. The moon is not the only heavenly body to influence this game. The orc swings his orcish broadsword named Elfrist at you. You die... @@ -173,10 +180,10 @@ There is no harm in praising a large dog. There is nothing like eating a mimic. There once was a Knight named Lancelot who liked to ride with his lance a lot. They say a gelatinous cube can paralyze you... -They say that Juiblex is afraid of a wand of digging. +They say that Juiblex is somewhat afraid of a wand of digging. They say that Medusa would like to put you on a pedestal. -They say that Vlad lives!!! ... in the mazes. -They say that `Elbereth' is often written about. +They say that Vlad lives!!! ... near the mazes. +They say that 'Elbereth' is often written about. They say that a bag of holding can't hold everything. They say that a blessed tin of quasit meat is a quick meal. They say that a cat avoids traps. @@ -205,6 +212,7 @@ They say that a unicorn might bring you luck. They say that a wand of cancellation is like a wand of polymorph. They say that a wand of locking can close more than just doors. They say that a wand of polymorph can change your game. +They say that a wise choice of donations lets you choose your blessings. They say that a wizard is even more powerful the second time around. They say that a xorn knows of no obstacles when pursuing you. They say that abusing a credit card could shock you sooner or later. @@ -216,7 +224,6 @@ They say that antique dealers are always interested in precious stones. They say that bandaging one's wounds helps to keep up one's appearance. They say that booze can be diluted but not cancelled. They say that by listening carefully, you can hear a secret door! -They say that calculating your donations lets you choose your blessings. They say that carrots and carrot juice may improve your vision. They say that cave spiders are not considered expensive health food. They say that demigods must leave behind their prized earthly possessions. @@ -227,11 +234,12 @@ They say that dwarves lawfully mind their own business. They say that eating a bat corpse will make you batty, for a while. They say that eating a cram ration is a smart move. They say that eating blue jelly is cool if you don't fight the feeling. +They say that elven armor can hold the most magic. They say that escaping a dungeon is only the beginning of the end. They say that feeling an unexpected draft of air is sort of a breakthrough. They say that finding a cursed gray stone is always bad luck. They say that gaining a level is an experience that can raise your sights. -They say that garter snake meat rarely tastes good but it's still healthy. +They say that garter snake meat may not taste good but it's still healthy. They say that gauntlets of dexterity have a hidden enchanted touch. They say that going to heaven is just another way of escaping the dungeon. They say that golden nagas are law-abiding denizens as long as you are too. @@ -239,6 +247,7 @@ They say that gremlins can make you feel cooler than you are now. They say that grid bugs only exist in a strictly Cartesian sense. They say that hackers often feel jumpy about eating nymphs. They say that having polymorph control won't shock you. +They say that healing potions often come in pairs. They say that if it's hard getting your food down another bite could kill. They say that if you don't wear glasses why bother with carrots? They say that if you notice a loose board beneath you, don't step on it. @@ -271,6 +280,7 @@ They say that only chaotics can kill shopkeepers and get away with it. They say that only female monsters can lay eggs. They say that playing a horn really bad is really good. They say that prayer at an altar can sometimes make the water there holy. +They say that the right wand may help you chase a nymph. They say that rubbing a glowing potion does not make it a magic lamp. They say that scalpels become dull because they're not athames. They say that shopkeepers don't like pick-axes. @@ -280,6 +290,7 @@ They say that shopkeepers often have a large amount of money in their purses. They say that shopkeepers often remember things that you might forget. They say that sinks and armor don't mix, take your cloak off now! They say that sinks run hot and cold and many flavors in between. +They say that sitting on a vampire's throne is worth the danger. They say that snake charmers aren't charismatic, just musical. They say that soldiers are always prepared and usually protected. They say that some eggs could hatch in your pack, lucky or not. @@ -296,6 +307,7 @@ They say that teleport traps are the devil's work. They say that tengu don't wear rings, why should you? They say that tengu never steal gold although they would be good at it. They say that that which was stolen once can be stolen again, ask any nymph. +They say that the best way to fix your injuries is a potion. They say that the Delphic Oracle knows that lizard corpses aren't confusing. They say that the Hand of Elbereth can hold up your prayers. They say that the Leprechaun King is rich as Croesus. @@ -313,6 +325,7 @@ They say that the view from a fog cloud is really very moving. They say that the walls in shops are made of extra hard material. They say that there are at least 15 ways to lose a pair of levitation boots. They say that throwing glass gems is the same as throwing rocks. +They say that to block a shocking sphere, you need the right shield. They say that trespassing a boulder is probably beneath you. They say that true power comes from within...except when it doesn't. They say that unicorns are fond of precious gems. @@ -324,6 +337,7 @@ They say that with a floating eye you could see in the dark. They say that you are lucky if you can get a unicorn to catch a ruby. They say that you are what you eat. They say that you can find named weapons at an altar if you're lucky. +They say that you can give potions of extra healing new energy. They say that you can safely touch cockatrice eggs but why bother? They say that you can't break an amulet of reflection. They say that you don't always get what you wish for. @@ -351,6 +365,7 @@ Vampires hate garlic. Vault guards never disturb their Lords. Vegetarians enjoy lichen and seaweed. Visitors are requested not to apply genocide to shopkeepers. +Want to heal faster? Dip your potions of healing in a potion of speed! Watch out, the Wizard might come back. Water traps have no effect on dragons. What is a cockatrice going to eat when it gets hungry? @@ -361,6 +376,7 @@ Why would anybody in his sane mind engrave "Elbereth"? Wishing too much may bring you too little. You can't bribe soldier ants. You can't leave a shop through the back door: there isn't one! +You can't reflect explosions. But you might resist them. You may discover a fine spirit inside a potion bottle. You may want to dip into a potion of bottled blessings. You might be able to bribe a demon lord. diff --git a/dat/soko1-1.lua b/dat/soko1-1.lua index ba5a9dfd7..ac9bcdf31 100644 --- a/dat/soko1-1.lua +++ b/dat/soko1-1.lua @@ -60,9 +60,10 @@ des.object("boulder", 09, 12); des.object("boulder", 03, 14); -- prevent monster generation over the (filled) holes -des.exclusion({ type = "monster-generation", region = { 08,01, 23,01 } }); +des.exclusion({ type = "monster-generation", region = { 07,01, 23,01 } }); -- Traps -des.trap("hole", 08, 01); +des.trap("hole", 07, 01); +des.trap("rolling boulder", 08, 01); des.trap("hole", 09, 01); des.trap("hole", 10, 01); des.trap("hole", 11, 01); diff --git a/dat/soko1-2.lua b/dat/soko1-2.lua index 2ff3a9feb..36ab90721 100644 --- a/dat/soko1-2.lua +++ b/dat/soko1-2.lua @@ -61,9 +61,9 @@ des.object("boulder",12,09); des.object("boulder",11,10); -- prevent monster generation over the (filled) holes -des.exclusion({ type = "monster-generation", region = { 05,01, 22,01 } }); +des.exclusion({ type = "monster-generation", region = { 05,01, 23,01 } }); -- Traps -des.trap("hole",05,01) +des.trap("rolling boulder",05,01) des.trap("hole",06,01) des.trap("hole",07,01) des.trap("hole",08,01) @@ -81,6 +81,7 @@ des.trap("hole",19,01) des.trap("hole",20,01) des.trap("hole",21,01) des.trap("hole",22,01) +des.trap("hole",23,01) des.monster({ id = "giant mimic", appear_as = "obj:boulder" }); des.monster({ id = "giant mimic", appear_as = "obj:boulder" }); diff --git a/dat/soko2-1.lua b/dat/soko2-1.lua index eb66e0fbf..e8b56efef 100644 --- a/dat/soko2-1.lua +++ b/dat/soko2-1.lua @@ -49,6 +49,7 @@ des.object("boulder",06,06) -- prevent monster generation over the (filled) holes des.exclusion({ type = "monster-generation", region = { 07,09, 18,09 } }); -- Traps +des.trap("rolling boulder",07,09) des.trap("hole",08,09) des.trap("hole",09,09) des.trap("hole",10,09) diff --git a/dat/soko2-2.lua b/dat/soko2-2.lua index 1302a1b5e..f11702c1e 100644 --- a/dat/soko2-2.lua +++ b/dat/soko2-2.lua @@ -7,26 +7,27 @@ des.level_init({ style = "solidfill", fg = " " }); des.level_flags("mazelevel", "noteleport", "premapped", "sokoban", "solidify"); des.map([[ - -------- ---|.|....| -|........|---------- -|.-...-..|.|.......| -|...-......|.......| -|.-....|...|.......| -|....-.--.-|.......| -|..........|.......| -|.--...|...|.......| -|....-.|---|.......| ---|....|----------+| - |................| - ------------------ + -------- +--|.|....| +|........|---------- +|.-...-..|.|.......| +|...-......|.......| +|.-....|...|.......| +|....-.--.-|.......| +|..........|.......| +|.--...|...|.......--- +|....-.|---|.......+.| +--|....|------------.| + |................+.| + -------------------- ]]); des.stair("down", 06,11) des.stair("up", 15,06) -des.door("locked",18,10) -des.region(selection.area(00,00,19,12), "lit"); -des.non_diggable(selection.area(00,00,19,12)); -des.non_passwall(selection.area(00,00,19,12)); +des.door("locked",19,09) +des.door("locked",19,11) +des.region(selection.area(00,00,21,12), "lit"); +des.non_diggable(selection.area(00,00,21,12)); +des.non_passwall(selection.area(00,00,21,12)); -- Boulders des.object("boulder",04,02) @@ -49,7 +50,7 @@ des.object("boulder",05,11) -- prevent monster generation over the (filled) holes des.exclusion({ type = "monster-generation", region = { 06,11, 18,11 } }); -- Traps -des.trap("hole",07,11) +des.trap("rolling boulder",07,11) des.trap("hole",08,11) des.trap("hole",09,11) des.trap("hole",10,11) @@ -60,6 +61,7 @@ des.trap("hole",14,11) des.trap("hole",15,11) des.trap("hole",16,11) des.trap("hole",17,11) +des.trap("hole",18,11) -- Random objects des.object({ class = "%" }); diff --git a/dat/soko3-1.lua b/dat/soko3-1.lua index 2515ffca1..1c7715858 100644 --- a/dat/soko3-1.lua +++ b/dat/soko3-1.lua @@ -55,6 +55,7 @@ des.object("boulder",10,10) -- prevent monster generation over the (filled) holes des.exclusion({ type = "monster-generation", region = { 11,10, 27,10 } }); -- Traps +des.trap("rolling boulder",11,10) des.trap("hole",12,10) des.trap("hole",13,10) des.trap("hole",14,10) diff --git a/dat/soko3-2.lua b/dat/soko3-2.lua index 1015125d6..24236efe2 100644 --- a/dat/soko3-2.lua +++ b/dat/soko3-2.lua @@ -48,8 +48,9 @@ des.object("boulder",10,10) des.object("boulder",03,11) -- prevent monster generation over the (filled) holes -des.exclusion({ type = "monster-generation", region = { 12,10, 24,10 } }); +des.exclusion({ type = "monster-generation", region = { 11,10, 24,10 } }); -- Traps +des.trap("rolling boulder",11,10) des.trap("hole",12,10) des.trap("hole",13,10) des.trap("hole",14,10) diff --git a/dat/soko4-1.lua b/dat/soko4-1.lua index 4c8f6d162..3768c1cf7 100644 --- a/dat/soko4-1.lua +++ b/dat/soko4-1.lua @@ -74,16 +74,21 @@ des.object("boulder",10,10) -- prevent monster generation over the (filled) pits des.exclusion({ type = "monster-generation", region = { 01,06, 07,11 } }); + -- Traps -des.trap("pit",03,06) des.trap("pit",04,06) -des.trap("pit",05,06) + +des.trap("pit",02,06) +des.trap("pit",02,07) des.trap("pit",02,08) -des.trap("pit",02,09) +des.trap("rolling boulder",02,09) + +des.trap("pit",02,10) +des.trap("pit",03,10) des.trap("pit",04,10) des.trap("pit",05,10) des.trap("pit",06,10) -des.trap("pit",07,10) +des.trap("rolling boulder",07,10) -- A little help des.object("scroll of earth",02,11) diff --git a/dat/soko4-2.lua b/dat/soko4-2.lua index de749ad37..d0606dc6a 100644 --- a/dat/soko4-2.lua +++ b/dat/soko4-2.lua @@ -50,11 +50,14 @@ des.trap("pit",01,03) des.trap("pit",01,04) des.trap("pit",01,05) des.trap("pit",01,06) -des.trap("pit",01,07) +des.trap("rolling boulder",01,07) + +des.trap("pit",01,08) +des.trap("pit",02,08) des.trap("pit",03,08) des.trap("pit",04,08) des.trap("pit",05,08) -des.trap("pit",06,08) +des.trap("rolling boulder",06,08) -- A little help des.object("scroll of earth",01,09) diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 4a0bb71e4..b4078d700 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1583,8 +1583,8 @@ allow rogues to also backstab sleeping or paralyzed monsters rogues cannot backstab monsters that have no backside give experience if opening Schroedinger's Box causes death of the cat inside priest donation amounts are explicitly stated, randomized slightly, based on - peak rather than current level, and allow for bulk donations (buying - larger amounts of clairvoyance/protection) if you have a lot of gold + peak rather than current level, and allow for bulk donations (buying + larger amounts of clairvoyance/protection) if you have a lot of gold amulet of magical breathing increases power regeneration change some command keys, 'v' is now chronicle, 'V' is versionshort, m-prefix 'V' is longer version, remove key binding of #history @@ -1596,6 +1596,8 @@ prevent phaseable monsters hiding deep inside nondiggable walls blessed potion of see invisible does not guarantee the intrinsic prevent selecting all options in #optionsfull menu shapeshifters change shape less +rolling boulder traps aren't removed when stepped on and move boulders + pushed onto them Fixes to 3.7.0-x General Problems Exposed Via git Repository @@ -2915,7 +2917,7 @@ add "make fetch-docs" to download pre-formatted documentation monsters will use throw-and-return weapons such as an aklys archeologists can identify scrolls by deciphering their labels monster destroy armor -spell first erodes armor -iron shoes protect the wearer against certain floor-based traps +iron footwear protects the wearer against certain floor-based traps ring of stealth prevents hero from leaving tracks the game now automatically tracks which sell prices and buy prices you have seen for each type of item; these are visible in the discoveries list, diff --git a/include/extern.h b/include/extern.h index d3c295a23..a65703238 100644 --- a/include/extern.h +++ b/include/extern.h @@ -3292,6 +3292,7 @@ extern struct monst *activate_statue_trap(struct trap *, coordxy, coordxy, extern int immune_to_trap(struct monst *, unsigned) NO_NNARGS; /* revisit */ extern void set_utrap(unsigned, unsigned); extern void reset_utrap(boolean); +extern boolean wearing_iron_shoes(struct monst *); extern boolean m_harmless_trap(struct monst *, struct trap *) NONNULLPTRS; extern void dotrap(struct trap *, unsigned) NONNULLARG1; extern void seetrap(struct trap *) NONNULLARG1; diff --git a/src/hack.c b/src/hack.c index ebdc126c2..38a24c6a7 100644 --- a/src/hack.c +++ b/src/hack.c @@ -592,6 +592,26 @@ moverock_core(coordxy sx, coordxy sy) } seetrap(ttmp); return sobj_at(BOULDER, sx, sy) ? -1 : 0; + case ROLLING_BOULDER_TRAP: + { + int tox = rx; + int toy = ry; + /* the boulder continues until it reaches one of + the trap's launch spots or hits a wall / out-of-bounds */ + while (isok(tox + u.dx, toy + u.dy)) { + tox += u.dx; + toy += u.dy; + if (tox == ttmp->launch.x && toy == ttmp->launch.y) + break; + if (tox == ttmp->launch2.x && toy == ttmp->launch2.y) + break; + } + pline("%s away from you!", + Tobjnam(otmp, "suddenly roll")); + feeltrap(ttmp); + launch_obj(BOULDER, sx, sy, tox, toy, ROLL | LAUNCH_KNOWN); + return sobj_at(BOULDER, sx, sy) ? -1 : 0; + } default: break; /* boulder not affected by this trap */ } diff --git a/src/muse.c b/src/muse.c index 2d5e82bd4..78b61c10b 100644 --- a/src/muse.c +++ b/src/muse.c @@ -2131,8 +2131,10 @@ find_misc(struct monst *mtmp) if ((t = t_at(xx, yy)) != 0 && (ignore_boulders || !sobj_at(BOULDER, xx, yy)) && !onscary(xx, yy, mtmp)) { - /* use trap if it's the correct type */ - if (t->ttyp == POLY_TRAP) { + /* use trap if it's the correct type and will + polymorph the monster */ + if (t->ttyp == POLY_TRAP && + !wearing_iron_shoes(mtmp)) { gt.trapx = xx; gt.trapy = yy; gm.m.has_misc = MUSE_POLY_TRAP; diff --git a/src/polyself.c b/src/polyself.c index 973cc053b..43c76cf40 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -1176,9 +1176,20 @@ break_armor(void) if ((otmp = uarmc) != 0 /* mummy wrapping adapts to small and very big sizes */ && (otmp->otyp != MUMMY_WRAPPING || !WrappingAllowed(uptr))) { - pline_The("clasp on your %s breaks open!", cloak_simple_name(otmp)); - (void) Cloak_off(); - dropp(otmp); + if (otmp->otyp == MUMMY_WRAPPING) { + /* doesn't have a clasp to break open */ + Your("%s tears apart!", cloak_simple_name(otmp)); + (void) Cloak_off(); + useup(otmp); + } else if (otmp->otyp == ALCHEMY_SMOCK) { + pline_The("knot on your %s is pulled apart!", cloak_simple_name(otmp)); + (void) Cloak_off(); + dropp(otmp); + } else { + pline_The("clasp on your %s breaks open!", cloak_simple_name(otmp)); + (void) Cloak_off(); + dropp(otmp); + } } if (uarmu) { Your("shirt rips to shreds!"); diff --git a/src/sit.c b/src/sit.c index 6ae51fdec..15c16dbdf 100644 --- a/src/sit.c +++ b/src/sit.c @@ -325,9 +325,13 @@ special_throne_effect(int effect) { case 11: /* polymorph effect (not blocked by magic resistance, but other things that protect from polymorphs work) */ - pline("This throne was not meant for those such as you!"); - You_feel("a change coming over you."); - polyself(POLY_NOFLAGS); + if (is_vampire(gy.youmonst.data)) { + You_feel("unworthy."); + } else { + pline("This throne was not meant for those such as you!"); + You_feel("a change coming over you."); + polyself(POLY_NOFLAGS); + } break; case 12: /* acid damage */ diff --git a/src/trap.c b/src/trap.c index 8444e9b30..630334228 100644 --- a/src/trap.c +++ b/src/trap.c @@ -16,7 +16,6 @@ staticfn boolean mu_maybe_destroy_web(struct monst *, boolean, struct trap *); staticfn struct obj *t_missile(int, struct trap *); staticfn boolean floor_trigger(int); staticfn boolean check_in_air(struct monst *, unsigned); -staticfn boolean wearing_iron_shoes(struct monst *); staticfn int trapeffect_arrow_trap(struct monst *, struct trap *, unsigned); staticfn int trapeffect_dart_trap(struct monst *, struct trap *, unsigned); staticfn int trapeffect_rocktrap(struct monst *, struct trap *, unsigned); @@ -1094,12 +1093,12 @@ check_in_air(struct monst *mtmp, unsigned trflags) || ((is_you ? Flying : is_flyer(mtmp->data)) && !plunged)); } -/* return TRUE if mtmp is wearing iron shoes */ -staticfn boolean +/* return TRUE if mtmp is wearing shoes made of iron (iron/kicking) */ +boolean wearing_iron_shoes(struct monst *mtmp) { struct obj *armf = which_armor(mtmp, W_ARMF); - return armf && armf->otyp == IRON_SHOES; + return armf && objects[armf->otyp].oc_material == IRON; } /* is trap ttmp harmless to monster mtmp? */ @@ -2453,10 +2452,6 @@ trapeffect_poly_trap( struct trap *trap, unsigned int trflags) { - static int possible_boots[] = { - ELVEN_BOOTS, KICKING_BOOTS, FUMBLE_BOOTS, LEVITATION_BOOTS, - JUMPING_BOOTS, SPEED_BOOTS, WATER_WALKING_BOOTS }; - if (mtmp == &gy.youmonst) { boolean viasitting = (trflags & VIASITTING) != 0; int steed_article = ARTICLE_THE; @@ -2480,7 +2475,8 @@ trapeffect_poly_trap( if (wearing_iron_shoes(mtmp)) { deltrap(trap); pline("%s warps strangely.", Yname2(uarmf)); - poly_obj(uarmf, ROLL_FROM(possible_boots)); + poly_obj( + uarmf, uarmf->otyp == IRON_SHOES ? KICKING_BOOTS : IRON_SHOES); update_inventory(); if (uarmf) prinv(NULL, uarmf, 0); @@ -2506,7 +2502,8 @@ trapeffect_poly_trap( impossible("re-equipping iron shoes destroyed them?"); return Trap_Effect_Finished; } - shoes = poly_obj(shoes, ROLL_FROM(possible_boots)); + shoes = poly_obj( + shoes, shoes->otyp == IRON_SHOES ? KICKING_BOOTS : IRON_SHOES); /* now equip them again */ if (shoes) { mtmp->misc_worn_check |= W_ARMF; @@ -2671,9 +2668,13 @@ trapeffect_rolling_boulder_trap( !Deaf ? "Click! " : ""); if (!launch_obj(BOULDER, trap->launch.x, trap->launch.y, trap->launch2.x, trap->launch2.y, style)) { - deltrap(trap); - newsym(u.ux, u.uy); /* get rid of trap symbol */ - pline("Fortunately for you, no boulder was released."); + /* if this is a known trap, the player may have known there wasn't + a lined up boulder, so use a shorter message to avoid --More-- + spam */ + if (style & LAUNCH_KNOWN) + pline("No boulder was released."); + else + pline("Fortunately for you, no boulder was released."); } } else { if (!m_in_air(mtmp)) { @@ -2816,6 +2817,8 @@ immune_to_trap(struct monst *mon, unsigned ttype) hanging to the ceiling */ if (Sokoban && (is_pit(ttype) || is_hole(ttype))) return TRAP_NOT_IMMUNE; + if (In_sokoban(&u.uz) && ttype == ROLLING_BOULDER_TRAP) + return TRAP_CLEARLY_IMMUNE; /* not dangerous in Sokoban */ if (is_floater(pm) || is_flyer(pm) || (is_clinger(pm) && has_ceiling(&u.uz))) return TRAP_CLEARLY_IMMUNE; @@ -3585,7 +3588,7 @@ find_random_launch_coord(struct trap *ttmp, coord *cc) coordxy dx, dy; coordxy x, y; - if (!ttmp || !cc) + if (!ttmp || !cc || Sokoban) return FALSE; x = ttmp->tx;