[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