[Scummvm-git-logs] scummvm master -> ea269e31f55077cd3e49cb662fe0f1bad31ab426

OMGPizzaGuy noreply at scummvm.org
Thu May 9 22:01:24 UTC 2024


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

Summary:
a31745f70b ULTIMA8: Add backpack to equipment types
ea269e31f5 ULTIMA8: Target gump no longer pauses game.


Commit: a31745f70b9ef5a0dba3830c47983897580e5e14
    https://github.com/scummvm/scummvm/commit/a31745f70b9ef5a0dba3830c47983897580e5e14
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-05-09T17:00:31-05:00

Commit Message:
ULTIMA8: Add backpack to equipment types

Changed paths:
    engines/ultima/ultima8/graphics/shape_info.h
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/gumps/paperdoll_gump.cpp
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/world/container.cpp


diff --git a/engines/ultima/ultima8/graphics/shape_info.h b/engines/ultima/ultima8/graphics/shape_info.h
index 6ad8a2324ed..3aeba60bf01 100644
--- a/engines/ultima/ultima8/graphics/shape_info.h
+++ b/engines/ultima/ultima8/graphics/shape_info.h
@@ -80,13 +80,14 @@ public:
 	};
 
 	enum SEquipType {
-		SE_NONE   = 0,
-		SE_SHIELD = 1,
-		SE_ARM    = 2,
-		SE_HEAD   = 3,
-		SE_BODY   = 4,
-		SE_LEGS   = 5,
-		SE_WEAPON = 6
+		SE_NONE     = 0,
+		SE_SHIELD   = 1,
+		SE_ARM      = 2,
+		SE_HEAD     = 3,
+		SE_BODY     = 4,
+		SE_LEGS     = 5,
+		SE_WEAPON   = 6,
+		SE_BACKPACK = 7
 	};
 
 	uint32 _flags;
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 94e1ac52317..6fd3b4837de 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -414,7 +414,7 @@ bool GameMapGump::DraggingItem(Item *item, int mx, int my) {
 
 	MainActor *avatar = getMainActor();
 	if (trace == 1) { // dropping on self
-		ObjId bp = avatar->getEquip(7); // !! constant
+		ObjId bp = avatar->getEquip(ShapeInfo::SE_BACKPACK);
 		Container *backpack = getContainer(bp);
 		return  backpack->CanAddItem(item, true);
 	}
@@ -474,7 +474,7 @@ void GameMapGump::DropItem(Item *item, int mx, int my) {
 
 	ObjId trace = TraceCoordinates(mx, my, _draggingPos, dox, doy, item);
 	if (trace == 1) { // dropping on self
-		ObjId bp = avatar->getEquip(7); // !! constant
+		ObjId bp = avatar->getEquip(ShapeInfo::SE_BACKPACK);
 		Container *backpack = getContainer(bp);
 		if (backpack && item->moveToContainer(backpack)) {
 			debugC(kDebugObject, "Dropped item in backpack");
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
index 3861a3c531a..837eb662f33 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
@@ -250,8 +250,9 @@ uint16 PaperdollGump::TraceObjId(int32 mx, int32 my) {
 
 	// try backpack
 	if (_backpackRect.contains(mx - _itemArea.left, my - _itemArea.top)) {
-		if (a->getEquip(7)) // constants
-			return a->getEquip(7);
+		ObjId bp = a->getEquip(ShapeInfo::SE_BACKPACK);
+		if (bp)
+			return bp;
 	}
 
 	// didn't find anything, so return self
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 39910717f9c..01901cee019 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -1056,7 +1056,7 @@ bool Debugger::cmdUseBackpack(int argc, const char **argv) {
 		return false;
 	}
 	MainActor *av = getMainActor();
-	Item *backpack = getItem(av->getEquip(7));
+	Item *backpack = getItem(av->getEquip(ShapeInfo::SE_BACKPACK));
 	if (backpack)
 		backpack->callUsecodeEvent_use();
 	return false;
diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index bd7bce260e3..4377ebc7212 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -109,7 +109,7 @@ bool Container::CanAddItem(Item *item, bool checkwghtvol) {
 		                   || shapeid == 78 || shapeid == 117 /*Chests*/)) {
 			// TODO: make this off by default, but can enable it through config
 			MainActor *avatar = getMainActor();
-			ObjId bp = avatar->getEquip(7); // !! constant
+			ObjId bp = avatar->getEquip(ShapeInfo::SE_BACKPACK);
 			Container *avatarbackpack = getContainer(bp);
 			if (avatarbackpack == this) {
 				capacity = 500;


Commit: ea269e31f55077cd3e49cb662fe0f1bad31ab426
    https://github.com/scummvm/scummvm/commit/ea269e31f55077cd3e49cb662fe0f1bad31ab426
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-05-09T17:00:32-05:00

Commit Message:
ULTIMA8: Target gump no longer pauses game.
This better matches behavior of orginal game, and fixes usecode behavior for closing item gumps.
Fixes #14032

Changed paths:
    engines/ultima/ultima8/gumps/modal_gump.cpp
    engines/ultima/ultima8/gumps/modal_gump.h
    engines/ultima/ultima8/gumps/target_gump.cpp
    engines/ultima/ultima8/gumps/target_gump.h


diff --git a/engines/ultima/ultima8/gumps/modal_gump.cpp b/engines/ultima/ultima8/gumps/modal_gump.cpp
index 59320447df9..7c66e7f671d 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.cpp
+++ b/engines/ultima/ultima8/gumps/modal_gump.cpp
@@ -35,9 +35,9 @@ ModalGump::ModalGump() : Gump() {
 }
 
 
-ModalGump::ModalGump(int x, int y, int width, int height, uint16 owner,
-					 uint32 flags, int32 layer)
-	: Gump(x, y, width, height, owner, flags, layer) {
+ModalGump::ModalGump(int x, int y, int width, int height, bool pauseGame,
+					 uint16 owner, uint32 flags, int32 layer)
+	: Gump(x, y, width, height, owner, flags, layer), _pauseGame(pauseGame) {
 
 }
 
@@ -47,10 +47,13 @@ ModalGump::~ModalGump() {
 void ModalGump::InitGump(Gump *newparent, bool take_focus) {
 	Gump::InitGump(newparent, take_focus);
 
-	Kernel::get_instance()->pause();
+	if (_pauseGame) {
+		Kernel::get_instance()->pause();
 
-	AudioProcess *ap = AudioProcess::get_instance();
-	if (ap) ap->pauseAllSamples();
+		AudioProcess *ap = AudioProcess::get_instance();
+		if (ap)
+			ap->pauseAllSamples();
+	}
 }
 
 Gump *ModalGump::FindGump(int mx, int my) {
@@ -72,10 +75,13 @@ uint16 ModalGump::TraceObjId(int32 mx, int32 my) {
 }
 
 void ModalGump::Close(bool no_del) {
-	Kernel::get_instance()->unpause();
+	if (_pauseGame) {
+		Kernel::get_instance()->unpause();
 
-	AudioProcess *ap = AudioProcess::get_instance();
-	if (ap) ap->unpauseAllSamples();
+		AudioProcess *ap = AudioProcess::get_instance();
+		if (ap)
+			ap->unpauseAllSamples();
+	}
 
 	Gump::Close(no_del);
 }
diff --git a/engines/ultima/ultima8/gumps/modal_gump.h b/engines/ultima/ultima8/gumps/modal_gump.h
index 45509bc7d8f..6ec1557225d 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.h
+++ b/engines/ultima/ultima8/gumps/modal_gump.h
@@ -32,11 +32,14 @@ namespace Ultima8 {
  * Base class for any gump which blocks the game (menu, credits, movie, etc)
  */
 class ModalGump : public Gump {
+protected:
+	bool _pauseGame;
+
 public:
 	ENABLE_RUNTIME_CLASSTYPE()
 
 	ModalGump();
-	ModalGump(int x, int y, int width, int height, uint16 owner = 0,
+	ModalGump(int x, int y, int width, int height, bool pauseGame = true, uint16 owner = 0,
 			  uint32 flags = FLAG_DONT_SAVE | FLAG_PREVENT_SAVE, int32 layer = LAYER_MODAL);
 
 	~ModalGump() override;
diff --git a/engines/ultima/ultima8/gumps/target_gump.cpp b/engines/ultima/ultima8/gumps/target_gump.cpp
index caad8730c65..c509cde5b4a 100644
--- a/engines/ultima/ultima8/gumps/target_gump.cpp
+++ b/engines/ultima/ultima8/gumps/target_gump.cpp
@@ -36,9 +36,9 @@ TargetGump::TargetGump() : ModalGump(), _targetTracing(false) {
 
 }
 
-
+// Skip pause as usecode processes need to complete & matches orginal game
 TargetGump::TargetGump(int x, int y)
-	: ModalGump(x, y, 0, 0), _targetTracing(false) {
+	: ModalGump(x, y, 0, 0, false), _targetTracing(false) {
 
 }
 
@@ -75,23 +75,37 @@ bool TargetGump::PointOnGump(int mx, int my) {
 }
 
 void TargetGump::onMouseUp(int button, int32 mx, int32 my) {
-	_targetTracing = true;
+	if (button == Mouse::BUTTON_LEFT) {
+		_targetTracing = true;
+
+		_parent->GumpToScreenSpace(mx, my);
 
-	_parent->GumpToScreenSpace(mx, my);
+		Gump *desktopgump = _parent;
+		ObjId objId = desktopgump->TraceObjId(mx, my);
+		Item *item = getItem(objId);
 
-	Gump *desktopgump = _parent;
-	ObjId objId = desktopgump->TraceObjId(mx, my);
-	Item *item = getItem(objId);
+		if (item) {
+			// done
+			debugC(kDebugObject, "Target result: %s", item->dumpInfo().c_str());
 
-	if (item) {
-		// done
-		debugC(kDebugObject, "Target result: %s", item->dumpInfo().c_str());
+			_processResult = objId;
+			Close();
+		}
 
-		_processResult = objId;
+		_targetTracing = false;
+	}
+}
+
+bool TargetGump::OnKeyDown(int key, int mod) {
+	switch (key) {
+	case Common::KEYCODE_ESCAPE: {
 		Close();
+	} break;
+	default:
+		break;
 	}
 
-	_targetTracing = false;
+	return true;
 }
 
 uint32 TargetGump::I_target(const uint8 * /*args*/, unsigned int /*argsize*/) {
@@ -101,8 +115,6 @@ uint32 TargetGump::I_target(const uint8 * /*args*/, unsigned int /*argsize*/) {
 	return targetgump->GetNotifyProcess()->getPid();
 }
 
-
-
 void TargetGump::saveData(Common::WriteStream *ws) {
 	warning("Trying to save ModalGump");
 }
diff --git a/engines/ultima/ultima8/gumps/target_gump.h b/engines/ultima/ultima8/gumps/target_gump.h
index 6377cc17f80..e85f4f8a0da 100644
--- a/engines/ultima/ultima8/gumps/target_gump.h
+++ b/engines/ultima/ultima8/gumps/target_gump.h
@@ -45,6 +45,7 @@ public:
 	void Close(bool no_del = false) override;
 	void PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) override;
 	void onMouseUp(int button, int32 mx, int32 my) override;
+	bool OnKeyDown(int key, int mod) override;
 
 	INTRINSIC(I_target);
 




More information about the Scummvm-git-logs mailing list