From 25130e394c712c25d23abab76a54105a7921d5d4 Mon Sep 17 00:00:00 2001 From: David Cohrs Date: Wed, 10 Feb 2016 13:47:43 -0800 Subject: [PATCH] fix H2766 - jumping while punished could leave ball in wrong place Affected both intrinsic and spell-based jumping. hurtle_step now drags the ball. --- doc/fixes36.1 | 1 + src/apply.c | 8 ++++++-- src/dothrow.c | 13 ++++++++++++- src/teleport.c | 4 ++-- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 7a2467d09..1d53499b3 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -151,6 +151,7 @@ when two or more shopkeepers were visible at once, 'p' command could be used vortexes and other unsolid monsters need not avoid webs barbarian and samurai can achieve basic in their special spell's skill scalpel and tsurugi can now split puddings; bashing with darts or arrows can't +jumping while punished could leave ball and chain in the wrong place Platform- and/or Interface-Specific Fixes diff --git a/src/apply.c b/src/apply.c index 339f7f6d0..e993db834 100644 --- a/src/apply.c +++ b/src/apply.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 apply.c $NHDT-Date: 1452660177 2016/01/13 04:42:57 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.219 $ */ +/* NetHack 3.6 apply.c $NHDT-Date: 1455140802 2016/02/10 21:46:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.220 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1645,7 +1645,11 @@ int magic; /* 0=Physical, otherwise skill level */ if (range < temp) range = temp; (void) walk_path(&uc, &cc, hurtle_step, (genericptr_t) &range); - teleds(cc.x, cc.y, TRUE); + /* hurtle_step results in (u.ux, u.uy) == (cc.x, cc.y) and usually + * moves the ball if punished, but does not handle all the effects + * of landing on the final position. + */ + teleds(cc.x, cc.y, FALSE); sokoban_guilt(); nomul(-1); multi_reason = "jumping around"; diff --git a/src/dothrow.c b/src/dothrow.c index ca558c7e6..bfec1303b 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 dothrow.c $NHDT-Date: 1446975465 2015/11/08 09:37:45 $ $NHDT-Branch: master $:$NHDT-Revision: 1.113 $ */ +/* NetHack 3.6 dothrow.c $NHDT-Date: 1455140444 2016/02/10 21:40:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.118 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -615,6 +615,17 @@ int x, y; } } + /* Caller has already determined that dragging the ball is allowed */ + if (Punished && uball->where == OBJ_FLOOR) { + int bc_control; + xchar ballx, bally, chainx, chainy; + boolean cause_delay; + + if (drag_ball(x, y, &bc_control, &ballx, &bally, &chainx, + &chainy, &cause_delay, TRUE)) + move_bc(0, bc_control, ballx, bally, chainx, chainy); + } + ox = u.ux; oy = u.uy; u_on_newpos(x, y); /* set u., u.usteed->; cliparound(); */ diff --git a/src/teleport.c b/src/teleport.c index 43e97da63..1c9b38872 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 teleport.c $NHDT-Date: 1446887535 2015/11/07 09:12:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.62 $ */ +/* NetHack 3.6 teleport.c $NHDT-Date: 1455140444 2016/02/10 21:40:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.66 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -252,7 +252,7 @@ boolean allow_drag; /* unearth it */ buried_ball_to_punishment(); } - ball_active = (Punished && uball->where != OBJ_FREE), + ball_active = (Punished && uball->where != OBJ_FREE); ball_still_in_range = FALSE; /* If they have to move the ball, then drag if allow_drag is true; -- 2.40.0