[Scummvm-git-logs] scummvm master -> 61ab4902fb64098f32266c2320225423ebd4ee27

mduggan noreply at scummvm.org
Mon Jul 8 11:31:17 UTC 2024


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

Summary:
61ab4902fb DGDS: Fix willy scene and dialog parsing slightly


Commit: 61ab4902fb64098f32266c2320225423ebd4ee27
    https://github.com/scummvm/scummvm/commit/61ab4902fb64098f32266c2320225423ebd4ee27
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2024-07-08T20:54:00+10:00

Commit Message:
DGDS: Fix willy scene and dialog parsing slightly

First scene now sort of works, still quite buggy.

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


diff --git a/engines/dgds/ads.cpp b/engines/dgds/ads.cpp
index 1c5fd08ecc0..83ce852fcce 100644
--- a/engines/dgds/ads.cpp
+++ b/engines/dgds/ads.cpp
@@ -140,7 +140,7 @@ bool ADSInterpreter::updateSeqTimeAndFrame(const TTMEnviro *env, TTMSeq &seq) {
 		uint32 now = g_engine->getTotalPlayTime();
 		if (now < seq._timeNext) {
 			debug(10, "env %d seq %d (%s) not advancing from frame %d (now %d timeNext %d interval %d)", seq._enviro,
-					seq._seqNum, env->_tags[seq._seqNum].c_str(), seq._currentFrame, now, seq._timeNext, seq._timeInterval);
+					seq._seqNum, env->_tags.getValOrDefault(seq._seqNum).c_str(), seq._currentFrame, now, seq._timeNext, seq._timeInterval);
 			return false;
 		}
 		seq._timeNext = now + seq._timeInterval;
@@ -149,11 +149,11 @@ bool ADSInterpreter::updateSeqTimeAndFrame(const TTMEnviro *env, TTMSeq &seq) {
 	seq._executed = false;
 	if (seq._gotoFrame == -1) {
 		debug(10, "env %d seq %d (%s) advance to frame %d->%d (start %d last %d)", seq._enviro, seq._seqNum,
-				env->_tags[seq._seqNum].c_str(), seq._currentFrame, seq._currentFrame + 1, seq._startFrame, seq._lastFrame);
+				env->_tags.getValOrDefault(seq._seqNum).c_str(), seq._currentFrame, seq._currentFrame + 1, seq._startFrame, seq._lastFrame);
 		seq._currentFrame++;
 	} else {
 		debug(10, "env %d seq %d (%s) goto to frame %d->%d (start %d last %d)", seq._enviro, seq._seqNum,
-				env->_tags[seq._seqNum].c_str(), seq._currentFrame, seq._gotoFrame, seq._startFrame, seq._lastFrame);
+				env->_tags.getValOrDefault(seq._seqNum).c_str(), seq._currentFrame, seq._gotoFrame, seq._startFrame, seq._lastFrame);
 		seq._currentFrame = seq._gotoFrame;
 		seq._gotoFrame = -1;
 	}
@@ -566,7 +566,7 @@ bool ADSInterpreter::handleOperation(uint16 code, Common::SeekableReadStream *sc
 			error("ADS invalid seq requested %d %d", enviro, seqnum);
 
 		debug(10, "ADS 0x%04x: add scene - env %d seq %d (%s) runCount %d prop %d", code,
-					enviro, seqnum, env->_tags[seqnum].c_str(), runCount, unk);
+					enviro, seqnum, env->_tags.getValOrDefault(seqnum).c_str(), runCount, unk);
 
 		if (code == 0x2000)
 			seq->_currentFrame = seq->_startFrame;
@@ -592,7 +592,7 @@ bool ADSInterpreter::handleOperation(uint16 code, Common::SeekableReadStream *sc
 		_currentTTMSeq = findTTMSeq(enviro, seqnum);
 		const TTMEnviro *env = findTTMEnviro(enviro);
 		debug(10, "ADS 0x2010: stop seq env %d seq %d (%s) prop %d", enviro, seqnum,
-				env->_tags[seqnum].c_str(), unk);
+				env->_tags.getValOrDefault(seqnum).c_str(), unk);
 		if (_currentTTMSeq)
 			_currentTTMSeq->_runFlag = kRunTypeStopped;
 		break;
@@ -604,7 +604,7 @@ bool ADSInterpreter::handleOperation(uint16 code, Common::SeekableReadStream *sc
 		_currentTTMSeq = findTTMSeq(enviro, seqnum);
 		const TTMEnviro *env = findTTMEnviro(enviro);
 		debug(10, "ADS 0x2015: set runflag5 env %d seq %d (%s) prop %d", enviro, seqnum,
-				env->_tags[seqnum].c_str(), unk);
+				env->_tags.getValOrDefault(seqnum).c_str(), unk);
 		if (_currentTTMSeq)
 			_currentTTMSeq->_runFlag = kRunType5;
 		break;
@@ -616,7 +616,7 @@ bool ADSInterpreter::handleOperation(uint16 code, Common::SeekableReadStream *sc
 		_currentTTMSeq = findTTMSeq(enviro, seqnum);
 		const TTMEnviro *env = findTTMEnviro(enviro);
 		debug(10, "ADS 0x2020: reset scene env %d seq %d (%s) prop %d", enviro, seqnum,
-				env->_tags[seqnum].c_str(), unk);
+				env->_tags.getValOrDefault(seqnum).c_str(), unk);
 		if (_currentTTMSeq)
 			_currentTTMSeq->reset();
 		break;
diff --git a/engines/dgds/dialog.cpp b/engines/dgds/dialog.cpp
index a040ef38bda..bb82e283fd4 100644
--- a/engines/dgds/dialog.cpp
+++ b/engines/dgds/dialog.cpp
@@ -59,7 +59,7 @@ Dialog *Dialog::_lastDialogSelectionChangedFor = nullptr;
 
 Dialog::Dialog() : _num(0), _bgColor(0), _fontColor(0), _selectionBgCol(0), _selectonFontCol(0),
 	_fontSize(0), _flags(kDlgFlagNone), _frameType(kDlgFramePlain), _time(0), _nextDialogDlgNum(0),
-	_nextDialogFileNum(0), _fileNum(0)
+	_nextDialogFileNum(0), _fileNum(0), _unk1(0), _unk2(0)
 {}
 
 
diff --git a/engines/dgds/dialog.h b/engines/dgds/dialog.h
index 8c62cae335a..1a9f586235b 100644
--- a/engines/dgds/dialog.h
+++ b/engines/dgds/dialog.h
@@ -114,6 +114,8 @@ public:
 	uint16 _time;
 	uint16 _nextDialogFileNum; // HOC onward, always set 0 in dragon.
 	uint16 _nextDialogDlgNum;
+	uint16 _unk1; // Willy onward, always set 0 in dragon and HoC
+	uint16 _unk2; // Willy onward, always set 0 in dragon and HoC
 	Common::Array<DialogAction> _action;
 	Common::String _str;
 
diff --git a/engines/dgds/scene.cpp b/engines/dgds/scene.cpp
index 292e6fed723..563504f4ab5 100644
--- a/engines/dgds/scene.cpp
+++ b/engines/dgds/scene.cpp
@@ -421,6 +421,11 @@ bool Scene::readDialogList(Common::SeekableReadStream *s, Common::Array<Dialog>
 			dst._nextDialogDlgNum = s->readUint16LE();
 		}
 
+		if (isVersionOver(" 1.216")) {
+			dst._unk1 = s->readUint16LE();
+			dst._unk2 = s->readUint16LE();
+		}
+
 		uint16 nbytes = s->readUint16LE();
 		if (nbytes > 0) {
 			dst._str = s->readString('\0', nbytes);




More information about the Scummvm-git-logs mailing list