[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