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

mduggan noreply at scummvm.org
Tue Dec 24 03:11:48 UTC 2024


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

Summary:
3db6e1344b DGDS: Small rendering fixes for Willy Beamish
dd82dd285c DGDS: Start implementation of willy-beamish ADS opcodes
36d75b8abe DGDS: Also report patch resources as available
eefe7686fe DGDS: Fix more small Willy Beamish issues


Commit: 3db6e1344b3da29ee79bc0043d96870a327703eb
    https://github.com/scummvm/scummvm/commit/3db6e1344b3da29ee79bc0043d96870a327703eb
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2024-12-24T14:08:42+11:00

Commit Message:
DGDS: Small rendering fixes for Willy Beamish

Changed paths:
    engines/dgds/dialog.cpp
    engines/dgds/inventory.cpp
    engines/dgds/request.cpp


diff --git a/engines/dgds/dialog.cpp b/engines/dgds/dialog.cpp
index aa471c75cd8..b269b2510cd 100644
--- a/engines/dgds/dialog.cpp
+++ b/engines/dgds/dialog.cpp
@@ -146,7 +146,7 @@ void Dialog::drawType2BackgroundBeamish(Graphics::ManagedSurface *dst, const Com
 	// TODO: This needs updating.
 	_state->_loc = DgdsRect(_rect.x + 12, _rect.y + 10, _rect.width - 24, _rect.height - 20);
 	if (title.empty()) {
-		RequestData::fillBackground(dst, _rect.x, _rect.y, _rect.width, _rect.height, 0);
+		dst->fillRect(Common::Rect(Common::Point(_rect.x + 2, _rect.y + 2), _rect.width - 4, _rect.height - 4), 0);
 		RequestData::drawCorners(dst, 54, _rect.x, _rect.y, _rect.width, _rect.height);
 	} else {
 		dst->fillRect(Common::Rect(Common::Point(_rect.x + 2, _rect.y + 2), _rect.width - 4, _rect.height - 4), 0);
diff --git a/engines/dgds/inventory.cpp b/engines/dgds/inventory.cpp
index ecab7d84aab..defabceea98 100644
--- a/engines/dgds/inventory.cpp
+++ b/engines/dgds/inventory.cpp
@@ -129,18 +129,20 @@ void Inventory::drawHeader(Graphics::ManagedSurface &surf) {
 	byte txtColor = (gameId == GID_HOC ? 25 : 0);
 
 	int titleWidth = font->getStringWidth(title);
-	int y1 = r._rect.y + (gameId == GID_DRAGON ? 7 : 11);
 	// Dragon always draws the header in the same spot; HoC centers it.
-	int x1;
+	int x1, y1;
 	if (gameId == GID_DRAGON) {
 		// Constant offset
 		x1 = r._rect.x + 112;
+		y1 = r._rect.y + 7;
 	} else if (gameId == GID_HOC) {
 		// Centered on window
 		x1 = r._rect.x + (r._rect.width - font->getStringWidth(title)) / 2 - 3;
+		y1 = r._rect.y + 11;
 	} else { // GID_WILLY
 		// Constant offset
-		x1 = r._rect.x + 155;
+		x1 = r._rect.x + 154;
+		y1 = r._rect.y + 8;
 	}
 
 	// Draw the border around the text
@@ -171,9 +173,11 @@ void Inventory::draw(Graphics::ManagedSurface &surf, int itemCount) {
 			_itemZoomBox->setVisible(true);
 		boxreq._rect.width = _fullWidth;
 	} else {
-		if (gameId != GID_WILLY)
-			_itemZoomBox->setVisible(false);
 		boxreq._rect.width = _itemBox->_width + _itemBox->_x * 2;
+		if (gameId != GID_WILLY) {
+			_itemZoomBox->setVisible(false);
+			boxreq._rect.width--;
+		}
 	}
 
 	//
@@ -254,7 +258,7 @@ void Inventory::drawTime(Graphics::ManagedSurface &surf) {
 void Inventory::drawItems(Graphics::ManagedSurface &surf) {
 	DgdsEngine *engine = DgdsEngine::getInstance();
 	const Common::SharedPtr<Image> &icons = engine->getIcons();
-	int x = 0;
+	int x = (engine->getGameId() == GID_WILLY ? -2 : 0);
 	int y = 0;
 
 	const int xstep = _itemArea->_xStep;
diff --git a/engines/dgds/request.cpp b/engines/dgds/request.cpp
index 9ac8c6ed545..f57ac69853a 100644
--- a/engines/dgds/request.cpp
+++ b/engines/dgds/request.cpp
@@ -475,7 +475,7 @@ void ButtonGadget::draw(Graphics::ManagedSurface *dst) const {
 
 		yoffset = y + yoffset / 2;
 		if (gameId == GID_WILLY)
-			yoffset--;
+			yoffset -= 2;
 
 		int lineWidth = font->getStringWidth(line1);
 		font->drawString(dst, line1, x + (_width - lineWidth) / 2 + 1, yoffset + 2, lineWidth, textCol);


Commit: dd82dd285c106bfd093210984b694cf5a56d0c44
    https://github.com/scummvm/scummvm/commit/dd82dd285c106bfd093210984b694cf5a56d0c44
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2024-12-24T14:08:42+11:00

Commit Message:
DGDS: Start implementation of willy-beamish ADS opcodes

Changed paths:
    engines/dgds/ads.cpp
    engines/dgds/ads.h


diff --git a/engines/dgds/ads.cpp b/engines/dgds/ads.cpp
index a10fadfeb5f..dc4bf2b0611 100644
--- a/engines/dgds/ads.cpp
+++ b/engines/dgds/ads.cpp
@@ -342,7 +342,7 @@ bool ADSInterpreter::logicOpResult(uint16 code, const TTMEnviro *env, const TTMS
 	int16 seqNum = seq ? seq->_seqNum : 0;
 	const char *optype = (code < 0x1300 ? "while" : "if");
 
-	assert(seq || code == 0x1380 || code == 0x1390);
+	assert(seq || (code & 0xFF) >= 0x80);
 
 	switch (code) {
 	case 0x1010: // WHILE paused
@@ -390,6 +390,24 @@ bool ADSInterpreter::logicOpResult(uint16 code, const TTMEnviro *env, const TTMS
 		debugN(10, "ADS 0x%04x: if detail >= %d", code, arg);
 		return true;
 		//return ((int)DgdsEngine::getInstance()->getDetailLevel() >= arg);
+	case 0x13A0: // IF _adsVariable[0] <=
+		debugN(10, "ADS 0x%04x: if adsVariable[0] <= %d", code, arg);
+		return _adsData->_adsVariable[0] <= arg;
+	case 0x13A1: // IF some_ads_variable[1] <=
+		debugN(10, "ADS 0x%04x: if adsVariable[1] <= %d", code, arg);
+		return _adsData->_adsVariable[1] <= arg;
+	case 0x13B0: // IF some_ads_variable[0] >
+		debugN(10, "ADS 0x%04x: if adsVariable[0] > %d", code, arg);
+		return _adsData->_adsVariable[0] > arg;
+	case 0x13B1: // IF some_ads_variable[1] >
+		debugN(10, "ADS 0x%04x: if adsVariable[1] > %d", code, arg);
+		return _adsData->_adsVariable[1] > arg;
+	case 0x13C0: // IF some_ads_variable[0] ==
+		debugN(10, "ADS 0x%04x: if adsVariable[0] == %d", code, arg);
+		return _adsData->_adsVariable[0] == arg;
+	case 0x13C1: // IF some_ads_variable[1] ==
+		debugN(10, "ADS 0x%04x: if adsVariable[1] == %d", code, arg);
+		return _adsData->_adsVariable[1] == arg;
 	default:
 		error("Not an ADS logic op: %04x, how did we get here?", code);
 	}
@@ -405,7 +423,7 @@ bool ADSInterpreter::handleLogicOp(uint16 code, Common::SeekableReadStream *scr)
 		Common::SharedPtr<TTMSeq> seq;
 		TTMEnviro *env = nullptr;
 
-		if (code != 0x1380 && code != 0x1390) {
+		if ((code & 0xFF) < 0x80) {
 			enviro = scr->readUint16LE();
 			seqnum = scr->readUint16LE();
 			seq = findTTMSeq(enviro, seqnum);
@@ -415,7 +433,7 @@ bool ADSInterpreter::handleLogicOp(uint16 code, Common::SeekableReadStream *scr)
 				return false;
 			}
 		} else {
-			// TODO: this value is not actually enviro? for now just read it.
+			// We load this into "enviro" but it's just the parameter of the op.
 			enviro = scr->readUint16LE();
 		}
 
@@ -544,6 +562,13 @@ bool ADSInterpreter::handleOperation(uint16 code, Common::SeekableReadStream *sc
 	case 0x1370: // IF RUNNING, 2 params
 	case 0x1380: // IF DETAIL LEVEL <= x, 1 param (HOC+ only)
 	case 0x1390: // IF DETAIL LEVEL >= x, 1 param (HOC+ only)
+	// The next 6 are in HoC code but maybe never used?
+	case 0x13A0: // IF _adsVariable[0] <=
+	case 0x13A1: // IF _adsVariable[1] <=
+	case 0x13B0: // IF _adsVariable[0] >
+	case 0x13B1: // IF _adsVariable[1] >
+	case 0x13C0: // IF _adsVariable[0] ==
+	case 0x13C1: // IF _adsVariable[1] ==
 		return handleLogicOp(code, scr);
 	case 0x1500: // ELSE / Skip to end-if, 0 params
 		debug(10, "ADS 0x%04x: else (skip to end if)", code);
@@ -738,19 +763,11 @@ bool ADSInterpreter::handleOperation(uint16 code, Common::SeekableReadStream *sc
 		return true;
 	}
 
-	case 0xffff:	// END
+	case 0xFFFF:	// END
 		debug(10, "ADS 0xFFFF: end");
 		return false;
 
 	//// unknown / to-be-implemented
-	// The next 6 are in HoC code but maybe never used?
-	case 0x13A0: // IF some_ads_variable[0] <=
-	case 0x13A1: // IF some_ads_variable[1] <=
-	case 0x13B0: // IF some_ads_variable[0] >
-	case 0x13B1: // IF some_ads_variable[1] >
-	case 0x13C0: // IF some_ads_variable[0] ==
-	case 0x13C1: // IF some_ads_variable[1] ==
-
 	case 0xFF10:
 	case 0xFFF0: // END_IF, 0 params
 	default: {
diff --git a/engines/dgds/ads.h b/engines/dgds/ads.h
index 9115c46f213..6ecc0c91123 100644
--- a/engines/dgds/ads.h
+++ b/engines/dgds/ads.h
@@ -37,6 +37,7 @@ public:
 		for (int i = 0; i < ARRAYSIZE(_segments); i++)
 			_segments[i] = -1;
 
+		ARRAYCLEAR(_adsVariable);
 		ARRAYCLEAR(_countdown);
 		ARRAYCLEAR(_charWhile);
 	}
@@ -56,6 +57,7 @@ public:
 	bool _hitTTMOp0110;
 	bool _hitBranchOp;
 	int16 _runningSegmentIdx;
+	int16 _adsVariable[2];
 
 	Common::Error syncState(Common::Serializer &s);
 };


Commit: 36d75b8abeb105122d9893fef27072822789d5f7
    https://github.com/scummvm/scummvm/commit/36d75b8abeb105122d9893fef27072822789d5f7
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2024-12-24T14:08:42+11:00

Commit Message:
DGDS: Also report patch resources as available

Local files can be opened by the resource manager, so we can say they are
available so various checks will pass.

Changed paths:
    engines/dgds/resource.cpp


diff --git a/engines/dgds/resource.cpp b/engines/dgds/resource.cpp
index 22de4099f77..5176e31d74a 100644
--- a/engines/dgds/resource.cpp
+++ b/engines/dgds/resource.cpp
@@ -141,7 +141,7 @@ Resource ResourceManager::getResourceInfo(Common::String name) {
 
 bool ResourceManager::hasResource(Common::String name) const {
 	name.toLowercase();
-	return _resources.contains(name);
+	return _resources.contains(name) || Common::File::exists(Common::Path(name));
 }
 
 DgdsChunkReader::DgdsChunkReader(Common::SeekableReadStream *stream)


Commit: eefe7686fe8fd898e70d4eb6cd11ca32f66ffa32
    https://github.com/scummvm/scummvm/commit/eefe7686fe8fd898e70d4eb6cd11ca32f66ffa32
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2024-12-24T14:08:42+11:00

Commit Message:
DGDS: Fix more small Willy Beamish issues

* Looking at items in inventory now works
* Time skip buttons rendered correctly in inventory
* Scene trigger fixes (countdown and scene num now correct)

Changed paths:
    engines/dgds/console.cpp
    engines/dgds/request.cpp
    engines/dgds/scene.cpp
    engines/dgds/scene.h
    engines/dgds/scene_op.cpp
    engines/dgds/scene_op.h


diff --git a/engines/dgds/console.cpp b/engines/dgds/console.cpp
index 709aa7bcc17..4b7b117ecf6 100644
--- a/engines/dgds/console.cpp
+++ b/engines/dgds/console.cpp
@@ -306,7 +306,7 @@ bool Console::cmdTrigger(int argc, const char **argv) {
 		debugPrintf("Trigger %d is %d\n", num, val);
 	} else if (argc == 3) {
 		bool enable = atoi(argv[2]);
-		scene->enableTrigger(num, enable);
+		scene->enableTrigger(0, num, enable);
 		debugPrintf("Trigger %d set to %d\n", num, enable);
 	}
 
diff --git a/engines/dgds/request.cpp b/engines/dgds/request.cpp
index f57ac69853a..a8a769e12e0 100644
--- a/engines/dgds/request.cpp
+++ b/engines/dgds/request.cpp
@@ -432,7 +432,8 @@ byte ButtonGadget::drawWillyBg(Graphics::ManagedSurface *dst, bool enabled) cons
 	uint16 cornerFrame = enabled ? 8 : 16;
 	RequestData::drawCorners(dst, cornerFrame, pt.x, pt.y, _width, _height);
 	int16 fillHeight = enabled ? _height - 8 : _height - 6;
-	dst->fillRect(Common::Rect(Common::Point(pt.x + 8, pt.y + 3), _width - 16, fillHeight), WillyButtonColor);
+	if (_width > 16 && fillHeight > 0)
+		dst->fillRect(Common::Rect(Common::Point(pt.x + 8, pt.y + 3), _width - 16, fillHeight), WillyButtonColor);
 	return 0;
 }
 
diff --git a/engines/dgds/scene.cpp b/engines/dgds/scene.cpp
index 6f7122e1fd3..5144382d981 100644
--- a/engines/dgds/scene.cpp
+++ b/engines/dgds/scene.cpp
@@ -349,7 +349,9 @@ bool Scene::readConditionalSceneOpList(Common::SeekableReadStream *s, Common::Ar
 	list.resize(num);
 
 	for (ConditionalSceneOp &dst : list) {
-		dst._opCode = s->readUint16LE();
+		dst._opCode = static_cast<SceneOpCode>(s->readUint16LE());
+		if (dst._opCode > kSceneOpMaxCode || dst._opCode == kSceneOpNone)
+			error("Unexpected scene opcode %d", (int)dst._opCode);
 		readConditionList(s, dst._conditionList);
 		readOpList(s, dst._opList);
 	}
@@ -651,12 +653,13 @@ void SDSScene::unload() {
 	_talkData.clear();
 	_dynamicRects.clear();
 	_conversation.unload();
+	_conditionalOps.clear();
 	_sceneDialogFlags = kDlgFlagNone;
 }
 
 
 Common::String SDSScene::dump(const Common::String &indent) const {
-	Common::String str = Common::String::format("%sSDSScene<num %d %d ads %s", indent.c_str(), _num, _field6_0x14, _adsFile.c_str());
+	Common::String str = Common::String::format("%sSDSScene<ver %s num %d %d ads %s", indent.c_str(), _version.c_str(), _num, _field6_0x14, _adsFile.c_str());
 	str += DebugUtil::dumpStructList(indent, "enterSceneOps", _enterSceneOps);
 	str += DebugUtil::dumpStructList(indent, "leaveSceneOps", _leaveSceneOps);
 	str += DebugUtil::dumpStructList(indent, "preTickOps", _preTickOps);
@@ -666,6 +669,7 @@ Common::String SDSScene::dump(const Common::String &indent) const {
 	str += DebugUtil::dumpStructList(indent, "objInteractions2", _objInteractions2);
 	str += DebugUtil::dumpStructList(indent, "dialogues", _dialogs);
 	str += DebugUtil::dumpStructList(indent, "triggers", _triggers);
+	str += DebugUtil::dumpStructList(indent, "conditionalOps", _conditionalOps);
 
 	str += "\n";
 	str += indent + ">";
@@ -673,10 +677,15 @@ Common::String SDSScene::dump(const Common::String &indent) const {
 }
 
 
-void SDSScene::enableTrigger(uint16 num, bool enable /* = true */) {
+void SDSScene::enableTrigger(uint16 sceneNum, uint16 num, bool enable /* = true */) {
+	if (sceneNum && sceneNum != _num)
+		return;
+
 	for (auto &trigger : _triggers) {
 		if (trigger.getNum() == num) {
 			trigger._enabled = enable;
+			if (enable)
+				trigger._checksUntilRun = trigger._timesToCheckBeforeRunning;
 			return;
 		}
 	}
@@ -700,8 +709,8 @@ void SDSScene::checkTriggers() {
 		if (!trigger._enabled)
 			continue;
 
-		if (trigger._timesToCheckBeforeRunning) {
-			trigger._timesToCheckBeforeRunning--;
+		if (trigger._checksUntilRun) {
+			trigger._checksUntilRun--;
 			continue;
 		}
 
@@ -989,7 +998,7 @@ void SDSScene::showDialog(uint16 fileNum, uint16 dlgNum) {
 		loadDialogData(fileNum);
 
 	for (auto &dialog : _dialogs) {
-		if (dialog._num == dlgNum) {
+		if (dialog._num == dlgNum && fileNum == dialog._fileNum) {
 			dialog.clearFlag(kDlgFlagHiFinished);
 			dialog.clearFlag(kDlgFlagRedrawSelectedActionChanged);
 			dialog.clearFlag(kDlgFlagHi10);
@@ -1757,7 +1766,7 @@ bool GDSScene::loadRestart(const Common::String &filename, ResourceManager *reso
 	num = triggers[t++];
 	while (num) {
 		uint16 val = triggers[t++];
-		scene->enableTrigger(num, (bool)val);
+		scene->enableTrigger(0, num, (bool)val);
 		num = triggers[t++];
 	}
 
@@ -1830,7 +1839,7 @@ bool GDSScene::parse(Common::SeekableReadStream *stream) {
 }
 
 Common::String GDSScene::dump(const Common::String &indent) const {
-	Common::String str = Common::String::format("%sGDSScene<icons %s", indent.c_str(), _iconFile.c_str());
+	Common::String str = Common::String::format("%sGDSScene<ver %s icons %s", indent.c_str(), _version.c_str(), _iconFile.c_str());
 	str += DebugUtil::dumpStructList(indent, "gameItems", _gameItems);
 	str += DebugUtil::dumpStructList(indent, "startGameOps", _startGameOps);
 	str += DebugUtil::dumpStructList(indent, "quitGameOps", _quitGameOps);
diff --git a/engines/dgds/scene.h b/engines/dgds/scene.h
index 944e84aa411..3f7b0b94a91 100644
--- a/engines/dgds/scene.h
+++ b/engines/dgds/scene.h
@@ -120,13 +120,14 @@ private:
 
 class SceneTrigger {
 public:
-	SceneTrigger(uint16 num) : _num(num), _enabled(false), _timesToCheckBeforeRunning(0) {}
+	SceneTrigger(uint16 num) : _num(num), _enabled(false), _timesToCheckBeforeRunning(0), _checksUntilRun(0) {}
 	Common::String dump(const Common::String &indent) const;
 
 	Common::Array<SceneConditions> conditionList;
 	Common::Array<SceneOp> sceneOpList;
 
 	uint16 _timesToCheckBeforeRunning; // Only used in Beamish.
+	uint16 _checksUntilRun;
 	bool _enabled;
 	uint16 getNum() const { return _num; }
 
@@ -309,7 +310,7 @@ public:
 	Common::Error syncState(Common::Serializer &s) override;
 
 	void onDragFinish(const Common::Point &pt);
-	void enableTrigger(uint16 num, bool enable = true);
+	void enableTrigger(uint16 sceneNum, uint16 num, bool enable = true);
 
 	Dialog *loadDialogData(uint16 num);
 	void freeDialogData(uint16 num);
diff --git a/engines/dgds/scene_op.cpp b/engines/dgds/scene_op.cpp
index b8878bc1471..684a31428f0 100644
--- a/engines/dgds/scene_op.cpp
+++ b/engines/dgds/scene_op.cpp
@@ -36,6 +36,7 @@
 namespace Dgds {
 
 static Common::String _sceneOpCodeName(SceneOpCode code) {
+	code = static_cast<SceneOpCode>(code & ~kSceneOpHasConditionalOpsFlag);
 	switch (code) {
 	case kSceneOpNone: 		  	return "none";
 	case kSceneOpChangeScene: 	return "changeScene";
@@ -53,16 +54,16 @@ static Common::String _sceneOpCodeName(SceneOpCode code) {
 	case kSceneOpAddFlagToDragItem:		return "addFlagToDragItem";
 	case kSceneOpMoveItemsBetweenScenes: return "moveItemsBetweenScenes";
 	case kSceneOpOpenInventoryZoom:   	return "openInventoryZoom";
-	case kSceneOpShowClock:		return "sceneOpShowClock";
-	case kSceneOpHideClock:		return "sceneOpHideClock";
-	case kSceneOpShowMouse:		return "sceneOpShowMouse";
-	case kSceneOpHideMouse:		return "sceneOpHideMouse";
-	case kSceneOpLoadTalkDataAndSetFlags: return "sceneOpLoadTalkDataAndSetFlags";
-	case kSceneOpDrawVisibleTalkHeads: return "sceneOpDrawVisibleTalksHeads";
-	case kSceneOpLoadTalkData: 	return "sceneOpLoadTalkData";
-	case kSceneOpLoadDDSData: 	return "sceneOpLoadDDSData";
-	case kSceneOpFreeDDSData: 	return "sceneOpFreeDDSData";
-	case kSceneOpFreeTalkData: 	return "sceneOpFreeTalkData";
+	case kSceneOpShowClock:		return "showClock";
+	case kSceneOpHideClock:		return "hideClock";
+	case kSceneOpShowMouse:		return "showMouse";
+	case kSceneOpHideMouse:		return "hideMouse";
+	case kSceneOpLoadTalkDataAndSetFlags: return "loadTalkDataAndSetFlags";
+	case kSceneOpDrawVisibleTalkHeads: return "drawVisibleTalksHeads";
+	case kSceneOpLoadTalkData: 	return "loadTalkData";
+	case kSceneOpLoadDDSData: 	return "loadDDSData";
+	case kSceneOpFreeDDSData: 	return "freeDDSData";
+	case kSceneOpFreeTalkData: 	return "freeTalkData";
 
 	default:
 		break;
@@ -126,7 +127,10 @@ Common::String SceneOp::dump(const Common::String &indent) const {
 			argsStr += Common::String::format("%d ", i);
 		argsStr.setChar(']', argsStr.size() - 1);
 	}
-	Common::String str = Common::String::format("%sSceneOp<op: %s args: %s", indent.c_str(), _sceneOpCodeName(_opCode).c_str(), argsStr.c_str());
+
+	const Common::String opName = _sceneOpCodeName(_opCode);
+	const char *isConditional = (_opCode & kSceneOpHasConditionalOpsFlag) ? "(cond)": "";
+	Common::String str = Common::String::format("%sSceneOp<op: %s%s args: %s", indent.c_str(), opName.c_str(), isConditional, argsStr.c_str());
 
 	str += DebugUtil::dumpStructList(indent, "conditionList", _conditionList);
 	if (!_conditionList.empty()) {
@@ -200,7 +204,10 @@ bool SceneOp::runCommonOp() const {
 		engine->getScene()->removeInvButtonFromHotAreaList();
 		break;
 	case kSceneOpEnableTrigger:
-		engine->getScene()->enableTrigger(_args[0]);
+		if (_args.size() == 1)
+			engine->getScene()->enableTrigger(0, _args[0]);
+		else if (_args.size() > 1)
+			engine->getScene()->enableTrigger(_args[1], _args[0]);
 		break;
 	case kSceneOpChangeSceneToStored: {
 		int16 sceneNo = engine->getGameGlobals()->getGlobal(0x61);
@@ -396,4 +403,23 @@ bool SceneOp::runBeamishOp() const {
 	return false;
 }
 
+
+Common::String ConditionalSceneOp::dump(const Common::String &indent) const {
+	const Common::String opName = _sceneOpCodeName(static_cast<SceneOpCode>(_opCode));
+	Common::String str = Common::String::format("%sConditionalSceneOp<op: %s", indent.c_str(), opName.c_str());
+
+	str += DebugUtil::dumpStructList(indent, "conditionList", _conditionList);
+	if (!_conditionList.empty()) {
+		str += "\n";
+		str += indent;
+	}
+	str += DebugUtil::dumpStructList(indent, "opList", _opList);
+	if (!_opList.empty()) {
+		str += "\n";
+		str += indent;
+	}
+	str += ">";
+	return str;
+}
+
 } // end namespace Dgds
diff --git a/engines/dgds/scene_op.h b/engines/dgds/scene_op.h
index d7e0a0f3b3f..086ef7214c6 100644
--- a/engines/dgds/scene_op.h
+++ b/engines/dgds/scene_op.h
@@ -117,7 +117,7 @@ private:
 
 class ConditionalSceneOp {
 public:
-	uint _opCode;
+	SceneOpCode _opCode;
 	Common::Array<SceneConditions> _conditionList;
 	Common::Array<SceneOp> _opList;
 




More information about the Scummvm-git-logs mailing list