[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