[Scummvm-git-logs] scummvm master -> 3054d7d58a967dd8a144a5a1d5d0f27223a97e2e

OMGPizzaGuy noreply at scummvm.org
Sat Jan 7 21:48:59 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3054d7d58a ULTIMA8: Allow keyboard jump to climb when hanging


Commit: 3054d7d58a967dd8a144a5a1d5d0f27223a97e2e
    https://github.com/scummvm/scummvm/commit/3054d7d58a967dd8a144a5a1d5d0f27223a97e2e
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-01-07T15:48:13-06:00

Commit Message:
ULTIMA8: Allow keyboard jump to climb when hanging

Changed paths:
    engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
    engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
    engines/ultima/ultima8/world/item_sorter.cpp


diff --git a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
index 3223a8da291..267f995aab5 100644
--- a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "ultima/ultima8/world/actors/avatar_gravity_process.h"
+#include "ultima/ultima8/world/actors/avatar_mover_process.h"
 #include "ultima/ultima8/world/actors/main_actor.h"
 #include "ultima/ultima8/ultima8.h"
 #include "ultima/ultima8/kernel/mouse.h"
@@ -41,34 +42,26 @@ AvatarGravityProcess::AvatarGravityProcess(MainActor *avatar, int gravity)
 }
 
 void AvatarGravityProcess::run() {
-	if (!Mouse::get_instance()->isMouseDownEvent(Mouse::BUTTON_RIGHT)) {
-		// right mouse button not down, so fall normally
-
-		GravityProcess::run();
-		return;
+	AvatarMoverProcess *amp = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+	if (amp && amp->hasMovementFlags(AvatarMoverProcess::MOVE_ANY_DIRECTION)) {
+		// See if we can cling to a ledge
+		MainActor *avatar = getMainActor();
+		if (avatar->tryAnim(Animation::climb40, dir_current) == Animation::SUCCESS) {
+
+			// We can climb, so perform a hang animation
+			// CHECKME: do we need to perform any other checks?
+			if (avatar->getLastAnim() != Animation::hang)
+				avatar->doAnim(Animation::hang, dir_current);
+
+			return;
+		}
 	}
 
-	// right mouse button down, so see if we can cling to a ledge
-	MainActor *avatar = getMainActor();
-	Direction direction = avatar->getDir();
-	if (avatar->tryAnim(Animation::climb40, direction) == Animation::SUCCESS) {
-
-		// we can, so perform a hang animation
-		// CHECKME: do we need to perform any other checks?
-
-		if (avatar->getLastAnim() != Animation::hang)
-			avatar->doAnim(Animation::hang, dir_current);
-
-		return;
-	} else {
-
-		// fall normally
-		GravityProcess::run();
-		return;
-	}
+	// fall normally
+	GravityProcess::run();
+	return;
 }
 
-
 void AvatarGravityProcess::saveData(Common::WriteStream *ws) {
 	GravityProcess::saveData(ws);
 }
diff --git a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
index 61c9affecfe..ba42463950b 100644
--- a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
@@ -66,13 +66,17 @@ void U8AvatarMoverProcess::handleHangingMode() {
 	}
 
 	// if left mouse is down, try to climb up
-
 	if (_mouseButton[0].isState(MBS_DOWN) &&
 			(!_mouseButton[0].isState(MBS_HANDLED) || m0clicked)) {
 		_mouseButton[0].setState(MBS_HANDLED);
 		_mouseButton[0]._lastDown = 0;
-		MainActor *avatar = getMainActor();
+		setMovementFlag(MOVE_JUMP);
+	}
 
+	if (hasMovementFlags(MOVE_JUMP)) {
+		clearMovementFlag(MOVE_JUMP);
+
+		MainActor *avatar = getMainActor();
 		if (avatar->tryAnim(Animation::climb40, dir_current) == Animation::SUCCESS) {
 			avatar->ensureGravityProcess()->terminate();
 			waitFor(avatar->doAnim(Animation::climb40, dir_current));
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index d16d508684f..079ee409fe9 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -254,9 +254,7 @@ void ItemSorter::AddItem(const Item *add) {
 void ItemSorter::PaintDisplayList(RenderSurface *surf, bool item_highlight) {
 	if (_sortLimit) {
 		// Clear the surface when debugging the sorter
-		Rect r;
-		surf->GetClippingRect(r);
-		surf->Fill32(0, r);
+		surf->Fill32(0, _clipWindow);
 	}
 
 	SortItem *it = _items;




More information about the Scummvm-git-logs mailing list