[Scummvm-git-logs] scummvm master -> b683bf7b7aeafed06966924e153a7da4b62ae7b0
elasota
noreply at scummvm.org
Tue Jun 13 04:44:49 UTC 2023
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:
b683bf7b7a MTROPOLIS: Add hack to fix failed integrity check when disembarking the Hispaniola
Commit: b683bf7b7aeafed06966924e153a7da4b62ae7b0
https://github.com/scummvm/scummvm/commit/b683bf7b7aeafed06966924e153a7da4b62ae7b0
Author: elasota (ejlasota at gmail.com)
Date: 2023-06-13T00:44:23-04:00
Commit Message:
MTROPOLIS: Add hack to fix failed integrity check when disembarking the Hispaniola
Changed paths:
engines/mtropolis/assets.h
engines/mtropolis/data.cpp
engines/mtropolis/data.h
engines/mtropolis/elements.cpp
engines/mtropolis/hacks.cpp
engines/mtropolis/hacks.h
engines/mtropolis/modifiers.cpp
engines/mtropolis/runtime.cpp
diff --git a/engines/mtropolis/assets.h b/engines/mtropolis/assets.h
index 85e17331eb3..a18b0f0f27d 100644
--- a/engines/mtropolis/assets.h
+++ b/engines/mtropolis/assets.h
@@ -59,14 +59,6 @@ private:
Common::Array<uint8> _data;
};
-namespace MToonHackFlags {
-
-enum MToonHackFlag {
- kMTIHispaniolaMPZHack = 1,
-};
-
-} // End of namespace MToonHackFlags
-
struct MToonMetadata {
enum ImageFormat {
kImageFormatMac,
diff --git a/engines/mtropolis/data.cpp b/engines/mtropolis/data.cpp
index aebe8d02650..64bf22ccda5 100644
--- a/engines/mtropolis/data.cpp
+++ b/engines/mtropolis/data.cpp
@@ -154,7 +154,7 @@ bool isAsset(DataObjectType type) {
} // End of namespace DataObjectTypes
DataReader::DataReader(int64 globalPosition, Common::SeekableReadStreamEndian &stream, ProjectFormat projectFormat)
- : _globalPosition(globalPosition), _stream(stream), _projectFormat(projectFormat) {
+ : _globalPosition(globalPosition), _stream(stream), _projectFormat(projectFormat), _permitDamagedStrings(false) {
}
bool DataReader::readU8(uint8 &value) {
@@ -249,7 +249,10 @@ bool DataReader::readTerminatedStr(Common::String& value, size_t size) {
return false;
}
if (strChars[size - 1] != 0) {
- return false;
+ if (_permitDamagedStrings)
+ strChars[size - 1] = 0;
+ else
+ return false;
}
value = Common::String(&strChars[0], size - 1);
} else {
@@ -300,6 +303,10 @@ bool DataReader::isBigEndian() const {
return _stream.isBE();
}
+void DataReader::setPermitDamagedStrings(bool permit) {
+ _permitDamagedStrings = permit;
+}
+
bool DataReader::checkErrorAndReset() {
const bool isFault = _stream.err() || _stream.eos();
if (isFault) {
diff --git a/engines/mtropolis/data.h b/engines/mtropolis/data.h
index e6e6303e1b7..05a0431607b 100644
--- a/engines/mtropolis/data.h
+++ b/engines/mtropolis/data.h
@@ -208,12 +208,16 @@ public:
ProjectFormat getProjectFormat() const;
bool isBigEndian() const;
+ void setPermitDamagedStrings(bool permit);
+
private:
bool checkErrorAndReset();
Common::SeekableReadStreamEndian &_stream;
ProjectFormat _projectFormat;
int64 _globalPosition;
+
+ bool _permitDamagedStrings;
};
struct Rect {
diff --git a/engines/mtropolis/elements.cpp b/engines/mtropolis/elements.cpp
index 7a3a477ddc3..8a8be4ffa9b 100644
--- a/engines/mtropolis/elements.cpp
+++ b/engines/mtropolis/elements.cpp
@@ -1347,9 +1347,6 @@ void MToonElement::activate() {
}
uint hackFlags = 0;
- if (getRuntime()->getHacks().mtiHispaniolaMToonHack && project->getAssetNameByID(_assetID) == "G00_HispaniolaMPZ.TUN") {
- hackFlags |= MToonHackFlags::kMTIHispaniolaMPZHack;
- }
_cachedMToon = static_cast<MToonAsset *>(asset.get())->loadAndCacheMToon(getRuntime(), hackFlags);
_metadata = _cachedMToon->getMetadata();
diff --git a/engines/mtropolis/hacks.cpp b/engines/mtropolis/hacks.cpp
index 751d484934f..ef7609d1a3a 100644
--- a/engines/mtropolis/hacks.cpp
+++ b/engines/mtropolis/hacks.cpp
@@ -44,7 +44,7 @@ Hacks::Hacks() {
allowAssetsFromOtherScenes = false;
mtiVariableReferencesHack = false;
mtiSceneReturnHack = false;
- mtiHispaniolaMToonHack = false;
+ mtiHispaniolaDamagedStringHack = false;
}
Hacks::~Hacks() {
@@ -1056,9 +1056,9 @@ void addMTIQuirks(const MTropolisGameDescription &desc, Hacks &hacks) {
// This doesn't work because the modifier is gone when the scene is unloaded.
hacks.mtiSceneReturnHack = true;
- // Weird rendering bug in the MTZ-1000 Hispaniola mToon, it has a skip code that would normally skip 127 rows but
- // doing that causes a big hole in the image.
- hacks.mtiHispaniolaMToonHack = true;
+ // Modifier "Scene Started => helmSteered? => Play Character, else Play Char" has a non-null-terminated name,
+ // which causes an integrity check failure when disembarking the Hispaniola.
+ hacks.mtiHispaniolaDamagedStringHack = true;
}
} // End of namespace HackSuites
diff --git a/engines/mtropolis/hacks.h b/engines/mtropolis/hacks.h
index 743c0a32f7d..025889f8b20 100644
--- a/engines/mtropolis/hacks.h
+++ b/engines/mtropolis/hacks.h
@@ -54,7 +54,7 @@ struct Hacks {
bool allowAssetsFromOtherScenes;
bool mtiVariableReferencesHack;
bool mtiSceneReturnHack;
- bool mtiHispaniolaMToonHack;
+ bool mtiHispaniolaDamagedStringHack;
uint midiVolumeScale; // 256 = 1.0
diff --git a/engines/mtropolis/modifiers.cpp b/engines/mtropolis/modifiers.cpp
index cc92919274e..bf156a209ea 100644
--- a/engines/mtropolis/modifiers.cpp
+++ b/engines/mtropolis/modifiers.cpp
@@ -2824,7 +2824,6 @@ CompoundVariableModifier::SaveLoad::SaveLoad(Runtime *runtime, CompoundVariableM
break;
}
}
-
}
for (const Common::SharedPtr<Modifier> &child : modifier->_children) {
diff --git a/engines/mtropolis/runtime.cpp b/engines/mtropolis/runtime.cpp
index 4c4fb84a85f..67187f91e39 100644
--- a/engines/mtropolis/runtime.cpp
+++ b/engines/mtropolis/runtime.cpp
@@ -7046,6 +7046,9 @@ void Project::loadSceneFromStream(const Common::SharedPtr<Structural> &scene, ui
Common::SeekableSubReadStreamEndian stream(_segments[segmentIndex].weakStream, streamDesc.pos, streamDesc.pos + streamDesc.size, _isBigEndian);
Data::DataReader reader(streamDesc.pos, stream, _projectFormat);
+ if (getRuntime()->getHacks().mtiHispaniolaDamagedStringHack && scene->getName() == "C01b : Main Deck Helm Kidnap")
+ reader.setPermitDamagedStrings(true);
+
const Data::PlugInModifierRegistry &plugInDataLoaderRegistry = _plugInRegistry.getDataLoaderRegistry();
{
More information about the Scummvm-git-logs
mailing list