diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 4a0bb71e4..8861dc69f 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 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/trap.c b/src/trap.c index 8444e9b30..e44da9133 100644 --- a/src/trap.c +++ b/src/trap.c @@ -2671,9 +2671,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)) {