From 6eb5be2c51de3f366add0e2cc4e485b2ce1bf7d2 Mon Sep 17 00:00:00 2001 From: fracturehill Date: Fri, 12 Mar 2021 18:20:58 +0200 Subject: [PATCH] NANCY: Action record reading changes Action records are no longer expected to return how much data they've read, which will be helpful with supporting different versions in the same class. Also added a much more helpful error message on a bad read. --- engines/nancy/action/actionmanager.cpp | 6 +- engines/nancy/action/actionrecord.h | 10 +- engines/nancy/action/arfactory_v1.cpp | 4 +- engines/nancy/action/leverpuzzle.cpp | 4 +- engines/nancy/action/leverpuzzle.h | 2 +- engines/nancy/action/orderingpuzzle.cpp | 4 +- engines/nancy/action/orderingpuzzle.h | 2 +- engines/nancy/action/passwordpuzzle.cpp | 4 +- engines/nancy/action/passwordpuzzle.h | 2 +- engines/nancy/action/primaryvideo.cpp | 9 +- engines/nancy/action/primaryvideo.h | 2 +- engines/nancy/action/recordtypes.cpp | 153 ++++++++------------ engines/nancy/action/recordtypes.h | 84 +++++------ engines/nancy/action/rotatinglockpuzzle.cpp | 4 +- engines/nancy/action/rotatinglockpuzzle.h | 2 +- engines/nancy/action/secondarymovie.cpp | 4 +- engines/nancy/action/secondarymovie.h | 2 +- engines/nancy/action/secondaryvideo.cpp | 4 +- engines/nancy/action/secondaryvideo.h | 8 +- engines/nancy/action/sliderpuzzle.cpp | 4 +- engines/nancy/action/sliderpuzzle.h | 2 +- engines/nancy/action/staticbitmapanim.cpp | 8 +- engines/nancy/action/staticbitmapanim.h | 2 +- engines/nancy/action/telephone.cpp | 4 +- engines/nancy/action/telephone.h | 2 +- engines/nancy/graphics.cpp | 7 - 26 files changed, 128 insertions(+), 211 deletions(-) diff --git a/engines/nancy/action/actionmanager.cpp b/engines/nancy/action/actionmanager.cpp index 9707e584d4a..2bbdcd28a87 100644 --- a/engines/nancy/action/actionmanager.cpp +++ b/engines/nancy/action/actionmanager.cpp @@ -111,7 +111,9 @@ bool ActionManager::addNewActionRecord(Common::SeekableReadStream &inputData) { newRecord->type = inputData.readByte(); // redundant newRecord->execType = (ActionRecord::ExecutionType)inputData.readByte(); - uint16 localChunkSize = newRecord->readData(inputData); + uint16 localChunkSize = inputData.pos(); + newRecord->readData(inputData); + localChunkSize = inputData.pos() - localChunkSize; localChunkSize += 0x32; // If the localChunkSize is less than the total data, there must be dependencies at the end of the chunk @@ -120,7 +122,7 @@ bool ActionManager::addNewActionRecord(Common::SeekableReadStream &inputData) { // Each dependency is 0x0C bytes long (in v1) uint numDependencies = depsDataSize / 0xC; if (depsDataSize % 0xC) { - error("Invalid dependency data size!"); + error("Action record type %s has incorrect read size", newRecord->getRecordTypeName().c_str());; } // Initialize the dependencies data diff --git a/engines/nancy/action/actionrecord.h b/engines/nancy/action/actionrecord.h index 3c88bb7a822..ad49259c997 100644 --- a/engines/nancy/action/actionrecord.h +++ b/engines/nancy/action/actionrecord.h @@ -93,20 +93,14 @@ public: itemRequired(-1) {} virtual ~ActionRecord() {} - virtual uint16 readData(Common::SeekableReadStream &stream) =0; + virtual void readData(Common::SeekableReadStream &stream) =0; virtual void execute() {} virtual void onPause(bool pause) {} virtual CursorManager::CursorType getHoverCursor() const { return CursorManager::kHotspot; } virtual void handleInput(NancyInput &input) {} -protected: - // TODO this is temporary until every record type is figured out - uint16 readRaw(Common::SeekableReadStream &stream, uint16 bytes) { - stream.skip(bytes); - return bytes; - } - +protected: void finishExecution() { switch (execType) { case kOneShot: diff --git a/engines/nancy/action/arfactory_v1.cpp b/engines/nancy/action/arfactory_v1.cpp index d5afa51d40b..8a34dbc6760 100644 --- a/engines/nancy/action/arfactory_v1.cpp +++ b/engines/nancy/action/arfactory_v1.cpp @@ -64,9 +64,9 @@ ActionRecord *ActionManager::createActionRecord(uint16 type) { case 0x28: return new PlayPrimaryVideoChan0(NancySceneState.getViewport()); case 0x29: - return new PlaySecondaryVideo('0', NancySceneState.getViewport()); + return new PlaySecondaryVideo(0, NancySceneState.getViewport()); case 0x2A: - return new PlaySecondaryVideo('1', NancySceneState.getViewport()); + return new PlaySecondaryVideo(1, NancySceneState.getViewport()); case 0x2B: return new PlaySecondaryMovie(NancySceneState.getViewport()); case 0x2C: diff --git a/engines/nancy/action/leverpuzzle.cpp b/engines/nancy/action/leverpuzzle.cpp index f8ae2b84ad1..3265f91bd8b 100644 --- a/engines/nancy/action/leverpuzzle.cpp +++ b/engines/nancy/action/leverpuzzle.cpp @@ -39,7 +39,7 @@ void LeverPuzzle::init() { NanEngine.resource->loadImage(imageName, image); } -uint16 LeverPuzzle::readData(Common::SeekableReadStream &stream) { +void LeverPuzzle::readData(Common::SeekableReadStream &stream) { char buf[10]; stream.read(buf, 10); imageName = buf; @@ -85,8 +85,6 @@ uint16 LeverPuzzle::readData(Common::SeekableReadStream &stream) { flagOnExit.label = stream.readSint16LE(); flagOnExit.flag = (NancyFlag)stream.readByte(); readRect(stream, exitHotspot); - - return 0x192; } void LeverPuzzle::execute() { diff --git a/engines/nancy/action/leverpuzzle.h b/engines/nancy/action/leverpuzzle.h index 5b35d9b6333..8aba5c63c1b 100644 --- a/engines/nancy/action/leverpuzzle.h +++ b/engines/nancy/action/leverpuzzle.h @@ -44,7 +44,7 @@ public: virtual void init() override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual void handleInput(NancyInput &input) override; virtual void onPause(bool pause) override; diff --git a/engines/nancy/action/orderingpuzzle.cpp b/engines/nancy/action/orderingpuzzle.cpp index e56e0e644fb..e5e3197527a 100644 --- a/engines/nancy/action/orderingpuzzle.cpp +++ b/engines/nancy/action/orderingpuzzle.cpp @@ -50,7 +50,7 @@ void OrderingPuzzle::init() { RenderObject::init(); } -uint16 OrderingPuzzle::readData(Common::SeekableReadStream &stream) { +void OrderingPuzzle::readData(Common::SeekableReadStream &stream) { char buf[10]; stream.read(buf, 10); @@ -97,8 +97,6 @@ uint16 OrderingPuzzle::readData(Common::SeekableReadStream &stream) { flagOnExit.label = stream.readSint16LE(); flagOnExit.flag = (NancyFlag)stream.readByte(); readRect(stream, exitHotspot); - - return 0x26D; } void OrderingPuzzle::execute() { diff --git a/engines/nancy/action/orderingpuzzle.h b/engines/nancy/action/orderingpuzzle.h index 40d90a8a7aa..e35a88a7499 100644 --- a/engines/nancy/action/orderingpuzzle.h +++ b/engines/nancy/action/orderingpuzzle.h @@ -45,7 +45,7 @@ public: virtual void init() override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual void handleInput(NancyInput &input) override; virtual void onPause(bool pause) override; diff --git a/engines/nancy/action/passwordpuzzle.cpp b/engines/nancy/action/passwordpuzzle.cpp index 9f8a1d4818f..23600a391e7 100644 --- a/engines/nancy/action/passwordpuzzle.cpp +++ b/engines/nancy/action/passwordpuzzle.cpp @@ -41,7 +41,7 @@ void PasswordPuzzle::init() { RenderObject::init(); } -uint16 PasswordPuzzle::readData(Common::SeekableReadStream &stream) { +void PasswordPuzzle::readData(Common::SeekableReadStream &stream) { fontID = stream.readUint16LE(); cursorBlinkTime = stream.readUint16LE(); readRect(stream, nameBounds); @@ -68,8 +68,6 @@ uint16 PasswordPuzzle::readData(Common::SeekableReadStream &stream) { flagOnExit.label = stream.readSint16LE(); flagOnExit.flag = (NancyFlag)stream.readByte(); readRect(stream, exitHotspot); - - return 0xD7; } void PasswordPuzzle::execute() { diff --git a/engines/nancy/action/passwordpuzzle.h b/engines/nancy/action/passwordpuzzle.h index 8ed0132cbc5..53150a75cf8 100644 --- a/engines/nancy/action/passwordpuzzle.h +++ b/engines/nancy/action/passwordpuzzle.h @@ -47,7 +47,7 @@ public: virtual void init() override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual void handleInput(NancyInput &input) override; virtual void onPause(bool pause) override; diff --git a/engines/nancy/action/primaryvideo.cpp b/engines/nancy/action/primaryvideo.cpp index 58b8a6836f2..c8edf82b11e 100644 --- a/engines/nancy/action/primaryvideo.cpp +++ b/engines/nancy/action/primaryvideo.cpp @@ -151,8 +151,8 @@ void PlayPrimaryVideoChan0::onPause(bool pause) { } } -uint16 PlayPrimaryVideoChan0::readData(Common::SeekableReadStream &stream) { - uint16 bytesRead = stream.pos(); +void PlayPrimaryVideoChan0::readData(Common::SeekableReadStream &stream) { + uint16 beginOffset = stream.pos(); char name[10]; stream.read(name, 10); @@ -177,7 +177,7 @@ uint16 PlayPrimaryVideoChan0::readData(Common::SeekableReadStream &stream) { doNotPop = (NancyFlag)stream.readByte(); sceneChange.readData(stream); - stream.seek(bytesRead + 0x69C); + stream.seek(beginOffset + 0x69C); uint16 numResponses = stream.readUint16LE(); if (numResponses > 0) { @@ -217,9 +217,6 @@ uint16 PlayPrimaryVideoChan0::readData(Common::SeekableReadStream &stream) { flagsStruct.flagToSet.flag.flag = (NancyFlag)stream.readByte(); } } - - bytesRead = stream.pos() - bytesRead; - return bytesRead; } void PlayPrimaryVideoChan0::execute() { diff --git a/engines/nancy/action/primaryvideo.h b/engines/nancy/action/primaryvideo.h index 3bf8be6c913..794afec13a4 100644 --- a/engines/nancy/action/primaryvideo.h +++ b/engines/nancy/action/primaryvideo.h @@ -81,7 +81,7 @@ public: virtual void updateGraphics() override; virtual void onPause(bool pause) override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; // Functions for handling the built-in dialogue responses found in the executable diff --git a/engines/nancy/action/recordtypes.cpp b/engines/nancy/action/recordtypes.cpp index fa35920dcaf..e431f839af0 100644 --- a/engines/nancy/action/recordtypes.cpp +++ b/engines/nancy/action/recordtypes.cpp @@ -40,9 +40,8 @@ namespace Nancy { namespace Action { -uint16 SceneChange::readData(Common::SeekableReadStream &stream) { +void SceneChange::readData(Common::SeekableReadStream &stream) { sceneChange.readData(stream); - return 8; } void SceneChange::execute() { @@ -50,8 +49,8 @@ void SceneChange::execute() { isDone = true; } -uint16 HotMultiframeSceneChange::readData(Common::SeekableReadStream &stream) { - uint16 ret = SceneChange::readData(stream); +void HotMultiframeSceneChange::readData(Common::SeekableReadStream &stream) { + SceneChange::readData(stream); uint16 numHotspots = stream.readUint16LE(); for (uint i = 0; i < numHotspots; ++i) { @@ -59,8 +58,6 @@ uint16 HotMultiframeSceneChange::readData(Common::SeekableReadStream &stream) { HotspotDescription &newDesc = hotspots[i]; newDesc.readData(stream); } - - return ret + (numHotspots * 0x12) + 2; } void HotMultiframeSceneChange::execute() { @@ -84,10 +81,9 @@ void HotMultiframeSceneChange::execute() { } } -uint16 Hot1FrSceneChange::readData(Common::SeekableReadStream &stream) { +void Hot1FrSceneChange::readData(Common::SeekableReadStream &stream) { SceneChange::readData(stream); hotspotDesc.readData(stream); - return 0x1A; } void Hot1FrSceneChange::execute() { @@ -109,26 +105,22 @@ void Hot1FrSceneChange::execute() { } } -uint16 HotMultiframeMultisceneChange::readData(Common::SeekableReadStream &stream) { +void HotMultiframeMultisceneChange::readData(Common::SeekableReadStream &stream) { stream.seek(0x14, SEEK_CUR); - uint size = stream.readUint16LE() * 0x12 + 0x16; - stream.seek(-0x16, SEEK_CUR); - - return readRaw(stream, size); // TODO + uint size = stream.readUint16LE() * 0x12; + stream.skip(size); } -uint16 StartFrameNextScene::readData(Common::SeekableReadStream &stream) { - return readRaw(stream, 0x4); // TODO +void StartFrameNextScene::readData(Common::SeekableReadStream &stream) { + stream.skip(4); } -uint16 StartStopPlayerScrolling::readData(Common::SeekableReadStream &stream) { - type = stream.readByte(); - return 1; +void StartStopPlayerScrolling::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 MapCall::readData(Common::SeekableReadStream &stream) { +void MapCall::readData(Common::SeekableReadStream &stream) { stream.skip(1); - return 1; } void MapCall::execute() { @@ -137,9 +129,8 @@ void MapCall::execute() { finishExecution(); } -uint16 MapCallHot1Fr::readData(Common::SeekableReadStream &stream) { - hotspotDesc.readData(stream); - return 0x12; +void MapCallHot1Fr::readData(Common::SeekableReadStream &stream) { + stream.skip(0x12); } void MapCallHot1Fr::execute() { @@ -159,14 +150,12 @@ void MapCallHot1Fr::execute() { } } -uint16 MapCallHotMultiframe::readData(Common::SeekableReadStream &stream) { +void MapCallHotMultiframe::readData(Common::SeekableReadStream &stream) { uint16 numDescs = stream.readUint16LE(); for (uint i = 0; i < numDescs; ++i) { hotspots.push_back(HotspotDescription()); hotspots[i].readData(stream); } - - return 2 + numDescs * 0x12; } void MapCallHotMultiframe::execute() { @@ -189,61 +178,53 @@ void MapCallHotMultiframe::execute() { } } -uint16 MapLocationAccess::readData(Common::SeekableReadStream &stream) { - return readRaw(stream, 0x4); // TODO +void MapLocationAccess::readData(Common::SeekableReadStream &stream) { + stream.skip(4); } -uint16 MapSound::readData(Common::SeekableReadStream &stream) { - return readRaw(stream, 0x10); // TODO +void MapSound::readData(Common::SeekableReadStream &stream) { + stream.skip(0x10); } -uint16 MapAviOverride::readData(Common::SeekableReadStream &stream) { - return readRaw(stream, 0x2); // TODO +void MapAviOverride::readData(Common::SeekableReadStream &stream) { + stream.skip(2); } -uint16 MapAviOverrideOff::readData(Common::SeekableReadStream &stream) { - overrideOffData = stream.readByte(); - return 1; +void MapAviOverrideOff::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 TextBoxWrite::readData(Common::SeekableReadStream &stream) { +void TextBoxWrite::readData(Common::SeekableReadStream &stream) { uint16 size = stream.readUint16LE(); - stream.seek(-2, SEEK_CUR); + stream.skip(size); - if (size > 0x2710) { + if (size > 10000) { error("Action Record atTextboxWrite has too many text box chars: %d", size);; } - - return readRaw(stream, size+2); // TODO } -uint16 TextBoxClear::readData(Common::SeekableReadStream &stream) { - clearData = stream.readByte(); - return 1; +void TextBoxClear::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 BumpPlayerClock::readData(Common::SeekableReadStream &stream) { - return readRaw(stream, 0x5); // TODO +void BumpPlayerClock::readData(Common::SeekableReadStream &stream) { + stream.skip(5); } -uint16 SaveContinueGame::readData(Common::SeekableReadStream &stream) { - saveContinueData = stream.readByte(); - return 1; +void SaveContinueGame::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 TurnOffMainRendering::readData(Common::SeekableReadStream &stream) { - turnOffData = stream.readByte(); - return 1; +void TurnOffMainRendering::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 TurnOnMainRendering::readData(Common::SeekableReadStream &stream) { - turnOnData = stream.readByte(); - return 1; +void TurnOnMainRendering::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 ResetAndStartTimer::readData(Common::SeekableReadStream &stream) { +void ResetAndStartTimer::readData(Common::SeekableReadStream &stream) { stream.skip(1); - return 1; } void ResetAndStartTimer::execute() { @@ -251,9 +232,8 @@ void ResetAndStartTimer::execute() { isDone = true; } -uint16 StopTimer::readData(Common::SeekableReadStream &stream) { +void StopTimer::readData(Common::SeekableReadStream &stream) { stream.skip(1); - return 1; } void StopTimer::execute() { @@ -261,9 +241,8 @@ void StopTimer::execute() { isDone = true; } -uint16 EventFlags::readData(Common::SeekableReadStream &stream) { +void EventFlags::readData(Common::SeekableReadStream &stream) { flags.readData(stream); - return 0x28; } void EventFlags::execute() { @@ -271,8 +250,8 @@ void EventFlags::execute() { isDone = true; } -uint16 EventFlagsMultiHS::readData(Common::SeekableReadStream &stream) { - uint16 returnSize = EventFlags::readData(stream); +void EventFlagsMultiHS::readData(Common::SeekableReadStream &stream) { + EventFlags::readData(stream); uint16 numHotspots = stream.readUint16LE(); for (uint16 i = 0; i < numHotspots; ++i) { @@ -280,10 +259,6 @@ uint16 EventFlagsMultiHS::readData(Common::SeekableReadStream &stream) { HotspotDescription &newDesc = hotspots[i]; newDesc.readData(stream); } - - returnSize += numHotspots * 0x12 + 0x2; - - return returnSize; } void EventFlagsMultiHS::execute() { @@ -311,9 +286,8 @@ void EventFlagsMultiHS::execute() { } } -uint16 LoseGame::readData(Common::SeekableReadStream &stream) { +void LoseGame::readData(Common::SeekableReadStream &stream) { stream.skip(1); - return 1; } void LoseGame::execute() { @@ -323,19 +297,16 @@ void LoseGame::execute() { isDone = true; } -uint16 PushScene::readData(Common::SeekableReadStream &stream) { - pushData = stream.readByte(); - return 1; +void PushScene::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 PopScene::readData(Common::SeekableReadStream &stream) { - popData = stream.readByte(); - return 1; +void PopScene::readData(Common::SeekableReadStream &stream) { + stream.skip(1); } -uint16 WinGame::readData(Common::SeekableReadStream &stream) { +void WinGame::readData(Common::SeekableReadStream &stream) { stream.skip(1); - return 1; } void WinGame::execute() { @@ -347,9 +318,8 @@ void WinGame::execute() { isDone = true; } -uint16 AddInventoryNoHS::readData(Common::SeekableReadStream &stream) { +void AddInventoryNoHS::readData(Common::SeekableReadStream &stream) { itemID = stream.readUint16LE(); - return 2; } void AddInventoryNoHS::execute() { @@ -360,15 +330,14 @@ void AddInventoryNoHS::execute() { isDone = true; } -uint16 RemoveInventoryNoHS::readData(Common::SeekableReadStream &stream) { - return readRaw(stream, 0x2); // TODO +void RemoveInventoryNoHS::readData(Common::SeekableReadStream &stream) { + stream.skip(2); } -uint16 DifficultyLevel::readData(Common::SeekableReadStream &stream) { +void DifficultyLevel::readData(Common::SeekableReadStream &stream) { difficulty = stream.readUint16LE(); flag.label = stream.readSint16LE(); flag.flag = (NancyFlag)stream.readUint16LE(); - return 6; } void DifficultyLevel::execute() { @@ -385,7 +354,7 @@ void ShowInventoryItem::init() { RenderObject::init(); } -uint16 ShowInventoryItem::readData(Common::SeekableReadStream &stream) { +void ShowInventoryItem::readData(Common::SeekableReadStream &stream) { objectID = stream.readUint16LE(); char name[10]; stream.read(name, 10); @@ -397,8 +366,6 @@ uint16 ShowInventoryItem::readData(Common::SeekableReadStream &stream) { bitmaps.push_back(BitmapDescription()); bitmaps[i].readData(stream); } - - return 0xE + 0x22 * numFrames; } void ShowInventoryItem::execute() { @@ -451,13 +418,12 @@ void ShowInventoryItem::onPause(bool pause) { } } -uint16 PlayDigiSoundAndDie::readData(Common::SeekableReadStream &stream) { +void PlayDigiSoundAndDie::readData(Common::SeekableReadStream &stream) { sound.read(stream, SoundDescription::kDIGI); sceneChange.readData(stream); flagOnTrigger.label = stream.readSint16LE(); flagOnTrigger.flag = (NancyFlag)stream.readByte(); - stream.skip(1); - return 0x2B; + stream.skip(2); } void PlayDigiSoundAndDie::execute() { @@ -486,11 +452,11 @@ void PlayDigiSoundAndDie::execute() { } } -uint16 PlaySoundPanFrameAnchorAndDie::readData(Common::SeekableReadStream &stream) { - return readRaw(stream, 0x20); // TODO +void PlaySoundPanFrameAnchorAndDie::readData(Common::SeekableReadStream &stream) { + stream.skip(0x20); } -uint16 PlaySoundMultiHS::readData(Common::SeekableReadStream &stream) { +void PlaySoundMultiHS::readData(Common::SeekableReadStream &stream) { sound.read(stream, SoundDescription::kNormal); sceneChange.readData(stream); flag.label = stream.readSint16LE(); @@ -503,8 +469,6 @@ uint16 PlaySoundMultiHS::readData(Common::SeekableReadStream &stream) { hotspots.back().frameID = stream.readUint16LE(); readRect(stream, hotspots.back().coords); } - - return 0x31 + numHotspots * 0x12; } void PlaySoundMultiHS::execute() { @@ -536,10 +500,9 @@ void PlaySoundMultiHS::execute() { } } -uint16 HintSystem::readData(Common::SeekableReadStream &stream) { +void HintSystem::readData(Common::SeekableReadStream &stream) { characterID = stream.readByte(); genericSound.read(stream, SoundDescription::kNormal); - return 0x23; } void HintSystem::execute() { diff --git a/engines/nancy/action/recordtypes.h b/engines/nancy/action/recordtypes.h index 8b8bff60ed0..980c5fd5778 100644 --- a/engines/nancy/action/recordtypes.h +++ b/engines/nancy/action/recordtypes.h @@ -41,7 +41,7 @@ namespace Action { class SceneChange : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; SceneChangeDescription sceneChange; @@ -52,7 +52,7 @@ protected: class HotMultiframeSceneChange : public SceneChange { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; Common::Array hotspots; @@ -63,7 +63,7 @@ protected: class Hot1FrSceneChange : public SceneChange { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; HotspotDescription hotspotDesc; @@ -81,7 +81,7 @@ protected: class HotMultiframeMultisceneChange : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "HotMultiframeMultisceneChange"; } @@ -89,7 +89,7 @@ protected: class StartFrameNextScene : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "StartFrameNextScene"; } @@ -97,7 +97,7 @@ protected: class StartStopPlayerScrolling : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; // TODO add a Start and Stop subclass byte type = 0; @@ -108,7 +108,7 @@ protected: class MapCall : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual CursorManager::CursorType getHoverCursor() const override { return CursorManager::kExitArrow; } @@ -119,7 +119,7 @@ protected: class MapCallHot1Fr : public MapCall { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; HotspotDescription hotspotDesc; @@ -130,7 +130,7 @@ protected: class MapCallHotMultiframe : public MapCall { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; Common::Array hotspots; @@ -141,7 +141,7 @@ protected: class MapLocationAccess : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "MapLocationAccess"; } @@ -149,7 +149,7 @@ protected: class MapSound : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "MapSound"; } @@ -157,7 +157,7 @@ protected: class MapAviOverride : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "MapAviOverride"; } @@ -165,9 +165,7 @@ protected: class MapAviOverrideOff : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; - - byte overrideOffData = 0; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "MapAviOverrideOff"; } @@ -175,7 +173,7 @@ protected: class TextBoxWrite : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "TextBoxWrite"; } @@ -183,9 +181,7 @@ protected: class TextBoxClear : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; - - byte clearData = 0; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "TextBoxClear"; } @@ -193,7 +189,7 @@ protected: class BumpPlayerClock : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "BumpPlayerClock"; } @@ -201,9 +197,7 @@ protected: class SaveContinueGame : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; - - byte saveContinueData = 0; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "SaveContinueGame"; } @@ -211,9 +205,7 @@ protected: class TurnOffMainRendering : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; - - byte turnOffData = 0; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "TurnOffMainRendering"; } @@ -221,9 +213,7 @@ protected: class TurnOnMainRendering : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; - - byte turnOnData = 0; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "TurnOnMainRendering"; } @@ -231,7 +221,7 @@ protected: class ResetAndStartTimer : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; protected: @@ -240,7 +230,7 @@ protected: class StopTimer : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; protected: @@ -249,7 +239,7 @@ protected: class EventFlags : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; MultiEventFlagDescription flags; @@ -260,7 +250,7 @@ protected: class EventFlagsMultiHS : public EventFlags { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; Common::Array hotspots; @@ -271,7 +261,7 @@ protected: class LoseGame : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; protected: @@ -280,9 +270,7 @@ protected: class PushScene : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; - - byte pushData = 0; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "PushScene"; } @@ -290,9 +278,7 @@ protected: class PopScene : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; - - byte popData = 0; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "PopScene"; } @@ -300,7 +286,7 @@ protected: class WinGame : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; protected: @@ -309,7 +295,7 @@ protected: class AddInventoryNoHS : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; uint itemID; @@ -320,7 +306,7 @@ protected: class RemoveInventoryNoHS : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "RemoveInventoryNoHS"; } @@ -328,7 +314,7 @@ protected: class DifficultyLevel : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; uint16 difficulty = 0; @@ -340,7 +326,7 @@ protected: class ShowInventoryItem : public ActionRecord, public RenderObject { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; ShowInventoryItem(RenderObject &redrawFrom) : RenderObject(redrawFrom) {} @@ -366,7 +352,7 @@ protected: class PlayDigiSoundAndDie : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; // TODO subclass into Play and Stop (?) @@ -380,7 +366,7 @@ protected: class PlaySoundPanFrameAnchorAndDie : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; protected: virtual Common::String getRecordTypeName() const override { return "PlaySoundPanFrameAnchorAndDie"; } @@ -388,7 +374,7 @@ protected: class PlaySoundMultiHS : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; SoundDescription sound; // 0x0 @@ -402,7 +388,7 @@ protected: class HintSystem : public ActionRecord { public: - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; byte characterID; // 0x00 diff --git a/engines/nancy/action/rotatinglockpuzzle.cpp b/engines/nancy/action/rotatinglockpuzzle.cpp index 3befb05c907..8d93949c7a2 100644 --- a/engines/nancy/action/rotatinglockpuzzle.cpp +++ b/engines/nancy/action/rotatinglockpuzzle.cpp @@ -41,7 +41,7 @@ void RotatingLockPuzzle::init() { NanEngine.resource->loadImage(imageName, image); } -uint16 RotatingLockPuzzle::readData(Common::SeekableReadStream &stream) { +void RotatingLockPuzzle::readData(Common::SeekableReadStream &stream) { char buf[10]; stream.read(buf, 10); imageName = buf; @@ -98,8 +98,6 @@ uint16 RotatingLockPuzzle::readData(Common::SeekableReadStream &stream) { flagOnExit.label = stream.readSint16LE(); flagOnExit.flag = (NancyFlag)stream.readByte(); readRect(stream, exitHotspot); - - return 0x2A4; } void RotatingLockPuzzle::execute() { diff --git a/engines/nancy/action/rotatinglockpuzzle.h b/engines/nancy/action/rotatinglockpuzzle.h index 0633cc8b0b3..24e49fa7f6d 100644 --- a/engines/nancy/action/rotatinglockpuzzle.h +++ b/engines/nancy/action/rotatinglockpuzzle.h @@ -44,7 +44,7 @@ public: virtual void init() override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual void handleInput(NancyInput &input) override; virtual void onPause(bool pause) override; diff --git a/engines/nancy/action/secondarymovie.cpp b/engines/nancy/action/secondarymovie.cpp index 8ef6988ed7b..92d6abff7a6 100644 --- a/engines/nancy/action/secondarymovie.cpp +++ b/engines/nancy/action/secondarymovie.cpp @@ -37,7 +37,7 @@ PlaySecondaryMovie::~PlaySecondaryMovie() { } } -uint16 PlaySecondaryMovie::readData(Common::SeekableReadStream &stream) { +void PlaySecondaryMovie::readData(Common::SeekableReadStream &stream) { char name[10]; stream.read(name, 10); videoName = name; @@ -64,8 +64,6 @@ uint16 PlaySecondaryMovie::readData(Common::SeekableReadStream &stream) { videoDescs.push_back(SecondaryVideoDescription()); videoDescs[i].readData(stream); } - - return 0xD4 + numVideoDescs * 0x42; // TODO } void PlaySecondaryMovie::init() { diff --git a/engines/nancy/action/secondarymovie.h b/engines/nancy/action/secondarymovie.h index 8155e17a2ca..8a760d5b169 100644 --- a/engines/nancy/action/secondarymovie.h +++ b/engines/nancy/action/secondarymovie.h @@ -52,7 +52,7 @@ public: virtual void updateGraphics() override; virtual void onPause(bool pause) override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; Common::String videoName; // 0x00 diff --git a/engines/nancy/action/secondaryvideo.cpp b/engines/nancy/action/secondaryvideo.cpp index 9c5beff30da..bd285be696c 100644 --- a/engines/nancy/action/secondaryvideo.cpp +++ b/engines/nancy/action/secondaryvideo.cpp @@ -140,7 +140,7 @@ void PlaySecondaryVideo::handleInput(NancyInput &input) { } } -uint16 PlaySecondaryVideo::readData(Common::SeekableReadStream &stream) { +void PlaySecondaryVideo::readData(Common::SeekableReadStream &stream) { char buf[10]; stream.read(buf, 10); filename = buf; @@ -159,8 +159,6 @@ uint16 PlaySecondaryVideo::readData(Common::SeekableReadStream &stream) { videoDescs.push_back(SecondaryVideoDescription()); videoDescs[i].readData(stream); } - - return 0x35 + (numVideoDescs * 0x42); } void PlaySecondaryVideo::execute() { diff --git a/engines/nancy/action/secondaryvideo.h b/engines/nancy/action/secondaryvideo.h index 690634d1fe4..5fa73480ec3 100644 --- a/engines/nancy/action/secondaryvideo.h +++ b/engines/nancy/action/secondaryvideo.h @@ -41,7 +41,7 @@ class PlaySecondaryVideo : public ActionRecord, public RenderObject { public: enum HoverState { kNoHover, kHover, kEndHover }; - PlaySecondaryVideo(char chan, RenderObject &redrawFrom) : RenderObject(redrawFrom), channel(chan) {} + PlaySecondaryVideo(uint chan, RenderObject &redrawFrom) : RenderObject(redrawFrom), channel(chan) {} virtual ~PlaySecondaryVideo() { _decoder.close(); } virtual void init() override; @@ -49,7 +49,7 @@ public: virtual void onPause(bool pause) override; virtual void handleInput(NancyInput &input) override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; Common::String filename; @@ -65,7 +65,7 @@ public: Common::Array videoDescs; // 0x35 protected: - virtual Common::String getRecordTypeName() const override { return Common::String("PlaySecondaryVideoChan" + channel); } + virtual Common::String getRecordTypeName() const override { return Common::String::format("PlaySecondaryVideoChan%i", channel); } virtual uint16 getZOrder() const override { return 8; } virtual BlitType getBlitType() const override { return kTrans; } @@ -77,7 +77,7 @@ protected: bool _isPlaying = false; bool _isHovered = false; - char channel; + uint channel; }; } // End of namespace Action diff --git a/engines/nancy/action/sliderpuzzle.cpp b/engines/nancy/action/sliderpuzzle.cpp index bd1c2348b1f..31e6ef9ca48 100644 --- a/engines/nancy/action/sliderpuzzle.cpp +++ b/engines/nancy/action/sliderpuzzle.cpp @@ -44,7 +44,7 @@ void SliderPuzzle::init() { NanEngine.resource->loadImage(imageName, image); } -uint16 SliderPuzzle::readData(Common::SeekableReadStream &stream) { +void SliderPuzzle::readData(Common::SeekableReadStream &stream) { char buf[10]; stream.read(buf, 10); imageName = buf; @@ -101,8 +101,6 @@ uint16 SliderPuzzle::readData(Common::SeekableReadStream &stream) { flagOnExit.label = stream.readSint16LE(); flagOnExit.flag = (NancyFlag)stream.readByte(); readRect(stream, exitHotspot); - - return 0x544; } void SliderPuzzle::execute() { diff --git a/engines/nancy/action/sliderpuzzle.h b/engines/nancy/action/sliderpuzzle.h index 0105fbc66e3..b941754932f 100644 --- a/engines/nancy/action/sliderpuzzle.h +++ b/engines/nancy/action/sliderpuzzle.h @@ -49,7 +49,7 @@ public: virtual void init() override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual void handleInput(NancyInput &input) override; virtual void onPause(bool pause) override; diff --git a/engines/nancy/action/staticbitmapanim.cpp b/engines/nancy/action/staticbitmapanim.cpp index cf6c54f416c..9a7de966dc5 100644 --- a/engines/nancy/action/staticbitmapanim.cpp +++ b/engines/nancy/action/staticbitmapanim.cpp @@ -42,7 +42,7 @@ void PlayStaticBitmapAnimation::init() { RenderObject::init(); } -uint16 PlayStaticBitmapAnimation::readData(Common::SeekableReadStream &stream) { +void PlayStaticBitmapAnimation::readData(Common::SeekableReadStream &stream) { char name[10]; stream.read(name, 10); imageName = Common::String(name); @@ -57,6 +57,7 @@ uint16 PlayStaticBitmapAnimation::readData(Common::SeekableReadStream &stream) { loopLastFrame = stream.readUint16LE(); frameTime = Common::Rational(1000, stream.readUint16LE()).toInt(); zOrder = stream.readUint16LE(); + if (isInterruptible) { interruptCondition.label = stream.readSint16LE(); interruptCondition.flag = (NancyFlag)stream.readUint16LE(); @@ -64,6 +65,7 @@ uint16 PlayStaticBitmapAnimation::readData(Common::SeekableReadStream &stream) { interruptCondition.label = -1; interruptCondition.flag = kFalse; } + sceneChange.readData(stream); triggerFlags.readData(stream); sound.read(stream, SoundDescription::kNormal); @@ -81,10 +83,6 @@ uint16 PlayStaticBitmapAnimation::readData(Common::SeekableReadStream &stream) { readRect(stream, rects.src); readRect(stream, rects.dest); } - - uint baseSize = isInterruptible ? 0x76 : 0x72; - - return baseSize + numViewportFrames * 0x22 + (loopLastFrame - firstFrame + 1) * 16; } void PlayStaticBitmapAnimation::execute() { diff --git a/engines/nancy/action/staticbitmapanim.h b/engines/nancy/action/staticbitmapanim.h index ab222d65c98..da0535abe73 100644 --- a/engines/nancy/action/staticbitmapanim.h +++ b/engines/nancy/action/staticbitmapanim.h @@ -45,7 +45,7 @@ public: virtual void init() override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual void onPause(bool pause) override; diff --git a/engines/nancy/action/telephone.cpp b/engines/nancy/action/telephone.cpp index 92ad6b81e59..42f42b4cc01 100644 --- a/engines/nancy/action/telephone.cpp +++ b/engines/nancy/action/telephone.cpp @@ -45,7 +45,7 @@ void Telephone::init() { NancySceneState.setShouldClearTextbox(false); } -uint16 Telephone::readData(Common::SeekableReadStream &stream) { +void Telephone::readData(Common::SeekableReadStream &stream) { char buf[10]; stream.read(buf, 10); imageName = buf; @@ -112,8 +112,6 @@ uint16 Telephone::readData(Common::SeekableReadStream &stream) { call.flag.label = stream.readSint16LE(); call.flag.flag = (NancyFlag)stream.readUint16LE(); } - - return numCalls * 0xEB + 0x48C; } void Telephone::execute() { diff --git a/engines/nancy/action/telephone.h b/engines/nancy/action/telephone.h index a0223c3a852..4e7ae39c3a5 100644 --- a/engines/nancy/action/telephone.h +++ b/engines/nancy/action/telephone.h @@ -58,7 +58,7 @@ public: virtual void init() override; - virtual uint16 readData(Common::SeekableReadStream &stream) override; + virtual void readData(Common::SeekableReadStream &stream) override; virtual void execute() override; virtual void handleInput(NancyInput &input) override; diff --git a/engines/nancy/graphics.cpp b/engines/nancy/graphics.cpp index 014e31921fa..78deb41117c 100644 --- a/engines/nancy/graphics.cpp +++ b/engines/nancy/graphics.cpp @@ -49,13 +49,6 @@ void GraphicsManager::init() { _screen.create(640, 480, screenPixelFormat); _screen.setTransparentColor(getTransColor()); - auto formats = NanEngine._system->getSupportedFormats(); - - for (auto f : formats) { - debug(f.toString().c_str()); - - } - Common::SeekableReadStream *ob = NanEngine.getBootChunkStream("OB0"); ob->seek(0);