[Scummvm-git-logs] scummvm master -> 6cc34e9173797ffcef9be3f36115adba1deca5e3

scemino noreply at scummvm.org
Tue Apr 23 20:20:28 UTC 2024


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

Summary:
3f45582d41 TWP: Add shortcuts for verbs
0bccc0bef9 TWP: Add verb instant
37d7e14d38 TWP: JANITORIAL: Remove unused screen
00de7eabcb TWP: Fix wrong use of debug method
6cc34e9173 TWP: Improve dialog choices drawing


Commit: 3f45582d41984081d60985b17dbcc1f06e50102a
    https://github.com/scummvm/scummvm/commit/3f45582d41984081d60985b17dbcc1f06e50102a
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-23T22:20:11+02:00

Commit Message:
TWP: Add shortcuts for verbs

Changed paths:
    engines/twp/actions.h
    engines/twp/metaengine.cpp
    engines/twp/twp.cpp


diff --git a/engines/twp/actions.h b/engines/twp/actions.h
index 58a92e8e5f6..e53ce5c0742 100644
--- a/engines/twp/actions.h
+++ b/engines/twp/actions.h
@@ -41,7 +41,16 @@ enum TwpAction {
 	kSelectPreviousActor,
 	kSelectNextActor,
 	kSkipText,
-	kShowHotspots
+	kShowHotspots,
+	kOpenAction,
+	kCloseAction,
+	kGiveAction,
+	kPickUpAction,
+	kLookAtAction,
+	kTalkToAction,
+	kPushAction,
+	kPullAction,
+	kUseAction
 };
 
 }
diff --git a/engines/twp/metaengine.cpp b/engines/twp/metaengine.cpp
index 269fea8b02f..6c30c8a26a4 100644
--- a/engines/twp/metaengine.cpp
+++ b/engines/twp/metaengine.cpp
@@ -161,8 +161,16 @@ Common::Array<Common::Keymap *> TwpMetaEngine::initKeymaps(const char *target) c
 		{"SELECTPREVACTOR", _s("Select Previous Actor"), Twp::kSelectPreviousActor, "9"},
 		{"SKIPTEXT", _s("Skip Text"), Twp::kSkipText, "PERIOD"},
 		{"SHOWHOTSPOTS", _s("Show hotspots"), Twp::kShowHotspots, "TAB"},
-		{0, 0, Twp::kSkipCutscene, 0},
-	};
+		{"OPEN", _s("Open action"), Twp::kOpenAction, "q"},
+		{"CLOSE", _s("Close action"), Twp::kCloseAction, "a"},
+		{"GIVE", _s("Give action"), Twp::kGiveAction, "z"},
+		{"PICKUP", _s("Pick up action"), Twp::kPickUpAction, "w"},
+		{"LOOKAT", _s("Look at action"), Twp::kLookAtAction, "s"},
+		{"TALKTO", _s("Talk to action"), Twp::kTalkToAction, "x"},
+		{"PUSH", _s("Push action"), Twp::kPushAction, "e"},
+		{"PULL", _s("Pull action"), Twp::kPullAction, "d"},
+		{"USE", _s("Use action"), Twp::kUseAction, "c"},
+		{0, 0, Twp::kSkipCutscene, 0}};
 
 	Common::Action *act;
 	for (int i = 0; actions[i].name; i++) {
diff --git a/engines/twp/twp.cpp b/engines/twp/twp.cpp
index 4a4dbbb8ee3..7b522d1da93 100644
--- a/engines/twp/twp.cpp
+++ b/engines/twp/twp.cpp
@@ -797,6 +797,13 @@ void TwpEngine::updateSettingVars() {
 	sqcall("setSettingVar", "ransome_unbeeped", ConfMan.getBool("ransomeUnbeeped") && _pack->containsDLC());
 }
 
+static void setVerbAction(int verbSlot) {
+	ActorSlot *slot = g_twp->_hud->actorSlot(g_twp->_actor);
+	if (!slot)
+		return;
+	g_twp->_hud->_verb = slot->verbs[verbSlot];
+}
+
 Common::Error TwpEngine::run() {
 	const Common::String &gameTarget = ConfMan.getActiveDomainName();
 	AchMan.setActiveDomain(getMetaEngine()->getAchievementsInfo(gameTarget));
@@ -949,6 +956,17 @@ Common::Error TwpEngine::run() {
 				case TwpAction::kShowHotspots:
 					_hotspotMarker->setVisible(!_hotspotMarker->isVisible());
 					break;
+				case TwpAction::kOpenAction:
+				case TwpAction::kCloseAction:
+				case TwpAction::kGiveAction:
+				case TwpAction::kPickUpAction:
+				case TwpAction::kLookAtAction:
+				case TwpAction::kTalkToAction:
+				case TwpAction::kPushAction:
+				case TwpAction::kPullAction:
+				case TwpAction::kUseAction:
+					setVerbAction(1 + (int)e.customType - (int)TwpAction::kOpenAction);
+					break;
 				}
 				break;
 			} break;


Commit: 0bccc0bef9440728576c56586b591e4bcbf1e352
    https://github.com/scummvm/scummvm/commit/0bccc0bef9440728576c56586b591e4bcbf1e352
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-23T22:20:11+02:00

Commit Message:
TWP: Add verb instant

Changed paths:
    engines/twp/hud.cpp
    engines/twp/hud.h
    engines/twp/twp.cpp


diff --git a/engines/twp/hud.cpp b/engines/twp/hud.cpp
index c1e89ba7410..cf260579f85 100644
--- a/engines/twp/hud.cpp
+++ b/engines/twp/hud.cpp
@@ -136,6 +136,15 @@ void Hud::drawSprite(const SpriteSheetFrame &sf, Texture *texture, const Color &
 	g_twp->getGfx().drawSprite(sf.frame, *texture, color, trsf);
 }
 
+void Hud::selectVerb(const Verb &verb) {
+	if (_verb.id.id == verb.id.id)
+		return;
+	_verb = verb;
+	if (_verb.flags & VERBFLAG_INSTANT) {
+		g_twp->callVerb(g_twp->_actor, _verb.id, nullptr);
+	}
+}
+
 void Hud::drawCore(const Math::Matrix4 &trsf) {
 	ActorSlot *slot = actorSlot(_actor);
 	if (!slot)
@@ -175,7 +184,7 @@ void Hud::drawCore(const Math::Matrix4 &trsf) {
 			isOver |= over;
 			Color color = (over || (verb.id.id == _defaultVerbId)) ? verbHighlight : verbColor;
 			if (_mouseClick && over) {
-				_verb = verb;
+				selectVerb(verb);
 			}
 			drawSprite(verbFrame, verbTexture, Color::withAlpha(color, getAlpha()), trsf);
 		}
diff --git a/engines/twp/hud.h b/engines/twp/hud.h
index 2a4db7a7402..5c8c28186b6 100644
--- a/engines/twp/hud.h
+++ b/engines/twp/hud.h
@@ -54,7 +54,7 @@ struct Verb {
 	Common::String fun;
 	Common::String text;
 	Common::String key;
-	int flags{};
+	int flags = 0;
 
 	Verb();
 	Verb(VerbId id, const Common::String &image, const Common::String &fun, const Common::String &text, const Common::String &key, int flags = 0);
@@ -112,6 +112,7 @@ public:
 	void update(float elapsed, const Math::Vector2d &pos, Common::SharedPtr<Object> hotspot, bool mouseClick);
 
 	void setVisible(bool visible) override;
+	void selectVerb(const Verb &verb);
 
 private:
 	void drawCore(const Math::Matrix4 &trsf) final;
diff --git a/engines/twp/twp.cpp b/engines/twp/twp.cpp
index 7b522d1da93..5770e2f7ced 100644
--- a/engines/twp/twp.cpp
+++ b/engines/twp/twp.cpp
@@ -256,7 +256,7 @@ void TwpEngine::clickedAt(const Math::Vector2d &scrPos) {
 				cancelSentence(_actor);
 				if (_actor->_room == _room)
 					Object::walk(_actor, roomPos);
-				_hud->_verb = _hud->actorSlot(_actor)->verbs[0];
+				_hud->selectVerb(_hud->actorSlot(_actor)->verbs[0]);
 				_holdToMove = true;
 			}
 
@@ -801,7 +801,7 @@ static void setVerbAction(int verbSlot) {
 	ActorSlot *slot = g_twp->_hud->actorSlot(g_twp->_actor);
 	if (!slot)
 		return;
-	g_twp->_hud->_verb = slot->verbs[verbSlot];
+	g_twp->_hud->selectVerb(slot->verbs[verbSlot]);
 }
 
 Common::Error TwpEngine::run() {
@@ -1330,7 +1330,7 @@ void TwpEngine::enterRoom(Common::SharedPtr<Room> room, Common::SharedPtr<Object
 	_room->setOverlay(Color(0.f, 0.f, 0.f, 0.f));
 	_camera->setBounds(Rectf::fromMinMax(Math::Vector2d(), _room->_roomSize));
 	if (_actor && _hud->actorSlot(_actor))
-		_hud->_verb = _hud->actorSlot(_actor)->verbs[0];
+		_hud->selectVerb(_hud->actorSlot(_actor)->verbs[0]);
 
 	// move current actor to the new room
 	Math::Vector2d camPos;
@@ -1620,7 +1620,9 @@ void TwpEngine::resetVerb() {
 }
 
 bool TwpEngine::callVerb(Common::SharedPtr<Object> actor, VerbId verbId, Common::SharedPtr<Object> noun1, Common::SharedPtr<Object> noun2) {
-	sqcall("onObjectClick", noun1->_table);
+	if (noun1) {
+		sqcall("onObjectClick", noun1->_table);
+	}
 
 	// Called after the actor has walked to the object.
 	Common::String name = !actor ? "currentActor" : actor->_key;
@@ -1632,13 +1634,13 @@ bool TwpEngine::callVerb(Common::SharedPtr<Object> actor, VerbId verbId, Common:
 	debugC(kDebugGame, "callVerb(%s,%s,%s,%s)", name.c_str(), verbFuncName.c_str(), noun1name.c_str(), noun2name.c_str());
 
 	// test if object became untouchable
-	if (!noun1->inInventory() && !noun1->isTouchable())
+	if (noun1 && !noun1->inInventory() && !noun1->isTouchable())
 		return false;
 	if (noun2 && !noun2->inInventory() && !noun2->isTouchable())
 		return false;
 
 	// check if verb is use and object can be used with or in or on
-	if ((verbId.id == VERB_USE) && !noun2) {
+	if (noun1 && (verbId.id == VERB_USE) && !noun2) {
 		_useFlag = noun1->useFlag();
 		if (_useFlag != UseFlag::ufNone) {
 			_noun1 = noun1;
@@ -1651,7 +1653,7 @@ bool TwpEngine::callVerb(Common::SharedPtr<Object> actor, VerbId verbId, Common:
 			debugC(kDebugGame, "set use flag to ufGiveTo");
 			_useFlag = UseFlag::ufGiveTo;
 			_noun1 = noun1;
-		} else {
+		} else if (noun1) {
 			bool handled = false;
 			if (sqrawexists(noun2->_table, verbFuncName)) {
 				debugC(kDebugGame, "call %s on %s", verbFuncName.c_str(), noun2->_key.c_str());
@@ -1673,7 +1675,12 @@ bool TwpEngine::callVerb(Common::SharedPtr<Object> actor, VerbId verbId, Common:
 		return false;
 	}
 
-	if (!noun2) {
+	if (!noun1) {
+		HSQOBJECT emptyTable;
+		sq_resetobject(&emptyTable);
+		debugC(kDebugGame, "call defaultObject.%s", verbFuncName.c_str());
+		sqcall(_defaultObj, verbFuncName.c_str(), emptyTable, emptyTable);
+	} else if (!noun2) {
 		if (sqrawexists(noun1->_table, verbFuncName)) {
 			int count = sqparamCount(getVm(), noun1->_table, verbFuncName);
 			debugC(kDebugGame, "call %s.%s", noun1->_key.c_str(), verbFuncName.c_str());


Commit: 37d7e14d38deae8260449db9d84b83e6c9790380
    https://github.com/scummvm/scummvm/commit/37d7e14d38deae8260449db9d84b83e6c9790380
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-23T22:20:11+02:00

Commit Message:
TWP: JANITORIAL: Remove unused screen

Changed paths:
    engines/twp/twp.cpp
    engines/twp/twp.h


diff --git a/engines/twp/twp.cpp b/engines/twp/twp.cpp
index 5770e2f7ced..e08d6a9fc1d 100644
--- a/engines/twp/twp.cpp
+++ b/engines/twp/twp.cpp
@@ -103,7 +103,6 @@ TwpEngine::~TwpEngine() {
 #endif
 
 	_mixer->stopAll();
-	delete _screen;
 }
 
 Math::Vector2d TwpEngine::winToScreen(const Math::Vector2d &pos) {
@@ -809,7 +808,6 @@ Common::Error TwpEngine::run() {
 	AchMan.setActiveDomain(getMetaEngine()->getAchievementsInfo(gameTarget));
 
 	initGraphics3d(SCREEN_WIDTH, SCREEN_HEIGHT);
-	_screen = new Graphics::Screen(SCREEN_WIDTH, SCREEN_HEIGHT);
 
 	// Set the engine's debugger console
 	setDebugger(new Console());
diff --git a/engines/twp/twp.h b/engines/twp/twp.h
index 834d1720cfc..fb90a1fd73e 100644
--- a/engines/twp/twp.h
+++ b/engines/twp/twp.h
@@ -191,7 +191,6 @@ private:
 	unique_ptr<Vm> _vm;
 
 public:
-	Graphics::Screen *_screen = nullptr;
 	unique_ptr<GGPackSet> _pack;
 	unique_ptr<ResManager> _resManager;
 	Common::Array<Common::SharedPtr<Room> > _rooms;


Commit: 00de7eabcb79f66160989e8dd3caad50b57d844f
    https://github.com/scummvm/scummvm/commit/00de7eabcb79f66160989e8dd3caad50b57d844f
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-23T22:20:11+02:00

Commit Message:
TWP: Fix wrong use of debug method

Changed paths:
    engines/twp/ggpack.cpp


diff --git a/engines/twp/ggpack.cpp b/engines/twp/ggpack.cpp
index 577ca5c149c..2ab42fac652 100644
--- a/engines/twp/ggpack.cpp
+++ b/engines/twp/ggpack.cpp
@@ -656,7 +656,7 @@ bool GGPackDecoder::open(Common::SeekableReadStream *s, const XorKey &key) {
 		int offset = (int)file["offset"]->asIntegerNumber();
 		int size = (int)file["size"]->asIntegerNumber();
 		_entries[filename] = GGPackEntry{offset, size};
-		debug(kDebugGGPack, "filename: %s, off: %d, size: %d", filename.c_str(), offset, size);
+		debugC(kDebugGGPack, "filename: %s, off: %d, size: %d", filename.c_str(), offset, size);
 	}
 
 	return true;


Commit: 6cc34e9173797ffcef9be3f36115adba1deca5e3
    https://github.com/scummvm/scummvm/commit/6cc34e9173797ffcef9be3f36115adba1deca5e3
Author: scemino (scemino74 at gmail.com)
Date: 2024-04-23T22:20:11+02:00

Commit Message:
TWP: Improve dialog choices drawing

Changed paths:
    engines/twp/dialog.cpp
    engines/twp/dialog.h
    engines/twp/hud.cpp
    engines/twp/scenegraph.cpp


diff --git a/engines/twp/dialog.cpp b/engines/twp/dialog.cpp
index 6c8f96a8ccc..bf172bc6087 100644
--- a/engines/twp/dialog.cpp
+++ b/engines/twp/dialog.cpp
@@ -19,10 +19,12 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "twp/twp.h"
 #include "twp/detection.h"
 #include "twp/dialog.h"
 #include "twp/motor.h"
+#include "twp/resmanager.h"
 #include "twp/squtil.h"
 #include "twp/tsv.h"
 
@@ -243,7 +245,7 @@ void Dialog::update(float dt) {
 		for (size_t i = 0; i < MAXDIALOGSLOTS; i++) {
 			DialogSlot *slot = &_slots[i];
 			if (slot->_isValid) {
-				Rectf rect = Rectf::fromPosAndSize(slot->getPos() - Math::Vector2d(0.f, -slot->_text.getBounds().getY() / 2.f), slot->_text.getBounds());
+				Rectf rect = Rectf::fromPosAndSize(slot->getPos() - Math::Vector2d(0.f, -slot->getSize().getY() / 2.f), slot->getSize());
 				bool over = rect.contains(_mousePos);
 				if (rect.r.w > (SCREEN_WIDTH - SLOTMARGIN)) {
 					if (over) {
@@ -445,7 +447,11 @@ void Dialog::addSlot(Common::SharedPtr<YStatement> stmt) {
 		slot->_text.setText(Common::String::format("● %s", text(choice->_text).c_str()));
 		slot->_stmt = stmt;
 		slot->_dlg = this;
-		slot->setPos(Math::Vector2d(SLOTMARGIN, SLOTMARGIN + slot->_text.getBounds().getY() * (MAXCHOICES - numSlots())));
+		Math::Vector2d slotSize(slot->_text.getBounds());
+		float slotHeight = slotSize.getY() - 3.f;
+		slot->setSize({slotSize.getX(), slotHeight});
+		const float y = slotHeight * (MAXCHOICES - numSlots() - 2);
+		slot->setPos(Math::Vector2d(SLOTMARGIN, y));
 		slot->_isValid = true;
 	}
 }
@@ -466,6 +472,15 @@ void Dialog::clearSlots() {
 }
 
 void Dialog::drawCore(const Math::Matrix4 &trsf) {
+	if (_state == WaitingForChoice) {
+		// draw HUD background
+		SpriteSheet *gameSheet = g_twp->_resManager->spriteSheet("GameSheet");
+		const SpriteSheetFrame &backingFrame = gameSheet->getFrame("ui_backing_tall");
+		Texture *gameTexture = g_twp->_resManager->texture(gameSheet->meta.image);
+		float alpha = 0.33f; // prefs(UiBackingAlpha);
+		g_twp->getGfx().drawSprite(backingFrame.frame, *gameTexture, Color(0, 0, 0, alpha * getAlpha()), trsf);
+	}
+
 	for (auto &_slot : _slots) {
 		DialogSlot *slot = &_slot;
 		if (slot->_isValid) {
diff --git a/engines/twp/dialog.h b/engines/twp/dialog.h
index 4f56efce516..e2dc7e57779 100644
--- a/engines/twp/dialog.h
+++ b/engines/twp/dialog.h
@@ -32,7 +32,7 @@
 #define MAXDIALOGSLOTS 9
 #define MAXCHOICES 6
 #define SLIDINGSPEED 25.f
-#define SLOTMARGIN 8.f
+#define SLOTMARGIN 4.f
 
 namespace Twp {
 
@@ -53,7 +53,7 @@ struct DialogContext {
 	Common::String actor;
 	Common::String dialogName;
 	bool parrot = true;
-	int limit = MAXDIALOGSLOTS;
+	int limit = MAXCHOICES;
 };
 
 enum DialogState {
diff --git a/engines/twp/hud.cpp b/engines/twp/hud.cpp
index cf260579f85..87c52e417ab 100644
--- a/engines/twp/hud.cpp
+++ b/engines/twp/hud.cpp
@@ -204,26 +204,18 @@ void Hud::update(float elapsed, const Math::Vector2d &pos, Common::SharedPtr<Obj
 
 	if (_fadeTime > 2.f) {
 		_fadeTime = 2.f;
-		if (!_fadeIn) {
-			setVisible(false);
-		}
 	}
 
 	if (_fadeIn) {
 		float alpha = MIN(_fadeTime, 2.0f) / 2.0f;
 		setAlpha(alpha);
-	} else {
-		float alpha = MAX(2.0f - _fadeTime, 0.0f) / 2.0f;
-		setAlpha(alpha);
 	}
 }
 
 void Hud::setVisible(bool visible) {
 	if (_fadeIn != visible) {
 		_fadeIn = visible;
-		if (visible) {
-			Node::setVisible(visible);
-		}
+		Node::setVisible(visible);
 		_fadeTime = 0;
 	}
 }
diff --git a/engines/twp/scenegraph.cpp b/engines/twp/scenegraph.cpp
index 04b0ef6c6d8..ed11f3a3a7e 100644
--- a/engines/twp/scenegraph.cpp
+++ b/engines/twp/scenegraph.cpp
@@ -680,17 +680,11 @@ void Inventory::update(float elapsed, Common::SharedPtr<Object> actor, const Col
 
 	if (_fadeTime > 2.f) {
 		_fadeTime = 2.f;
-		if (!_fadeIn) {
-			setVisible(false);
-		}
 	}
 
 	if (_fadeIn) {
 		float alpha = MIN(_fadeTime, 2.0f) / 2.0f;
 		setAlpha(alpha);
-	} else {
-		float alpha = MAX(2.0f - _fadeTime, 0.0f) / 2.0f;
-		setAlpha(alpha);
 	}
 
 	// udate colors
@@ -736,9 +730,7 @@ void Inventory::update(float elapsed, Common::SharedPtr<Object> actor, const Col
 void Inventory::setVisible(bool visible) {
 	if (_fadeIn != visible) {
 		_fadeIn = visible;
-		if (visible) {
-			Node::setVisible(visible);
-		}
+		Node::setVisible(visible);
 		_fadeTime = 0;
 	}
 }




More information about the Scummvm-git-logs mailing list