Make rolling boulders hit walls and trees

While testing something else, I noticed rolling boulders
just ignored walls and trees; in normal play this isn't
a problem - but should probably make boulders handle other
terrain too.  Lava and water is already handled correctly.
This commit is contained in:
Pasi Kallinen
2023-10-21 18:42:40 +03:00
parent 9ea4a3a329
commit ff4f81af1b
2 changed files with 19 additions and 9 deletions

View File

@@ -1262,6 +1262,7 @@ buff scroll of confuse monster and blessed potion of monster detection
if a temple was entered while blind, #overview could show a line of just "." if a temple was entered while blind, #overview could show a line of just "."
when describing altars if no other interesting features on that level when describing altars if no other interesting features on that level
were known were known
rolling boulders ignored walls and trees
Fixes to 3.7.0-x General Problems Exposed Via git Repository Fixes to 3.7.0-x General Problems Exposed Via git Repository

View File

@@ -3294,16 +3294,25 @@ launch_obj(
unblock_point(gb.bhitpos.x, gb.bhitpos.y); unblock_point(gb.bhitpos.x, gb.bhitpos.y);
} }
/* if about to hit iron bars, do so now */ /* if about to hit something, do so now */
if (dist > 0 && isok(gb.bhitpos.x + dx, gb.bhitpos.y + dy) if (dist > 0 && isok(gb.bhitpos.x + dx, gb.bhitpos.y + dy)) {
&& levl[gb.bhitpos.x + dx][gb.bhitpos.y + dy].typ == IRONBARS) { coordxy fx = gb.bhitpos.x + dx, fy = gb.bhitpos.y + dy;
x2 = gb.bhitpos.x, y2 = gb.bhitpos.y; /* object stops here */ uchar typ = levl[fx][fy].typ;
if (hits_bars(&singleobj, x2, y2, x2 + dx, y2 + dy, !rn2(20), 0)) {
if (!singleobj) { if (typ == IRONBARS) {
used_up = TRUE; x2 = gb.bhitpos.x, y2 = gb.bhitpos.y; /* object stops here */
launch_drop_spot((struct obj *) 0, 0, 0); if (hits_bars(&singleobj, x2, y2, fx, fy, !rn2(20), 0)) {
if (!singleobj) {
used_up = TRUE;
launch_drop_spot((struct obj *) 0, 0, 0);
}
break;
} }
break; } else if (IS_STWALL(typ) || IS_TREE(typ)) {
x2 = gb.bhitpos.x, y2 = gb.bhitpos.y; /* object stops here */
if (!Deaf)
pline("Thump!");
wake_nearto(x2, y2, 16);
} }
} }
} }