[Scummvm-git-logs] scummvm master -> bf9af9abc1ef3658aee2c0f4854a03e5b9af98e4
mduggan
mgithub at guarana.org
Tue May 4 13:52:23 UTC 2021
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:
92fe6afa24 ULTIMA8: Check bytes read when loading savegames
878331b074 ULTIMA8: Tweak process start order for Crusader
fab43f51a4 ULTIMA8: Destroy contents earlier in Cru death
bf9af9abc1 ULTIMA8: Ignore invalid parent objects on destruction
Commit: 92fe6afa24ef0c05cd2ecea513ab1165e3747f8c
https://github.com/scummvm/scummvm/commit/92fe6afa24ef0c05cd2ecea513ab1165e3747f8c
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-04T22:42:44+09:00
Commit Message:
ULTIMA8: Check bytes read when loading savegames
Changed paths:
engines/ultima/ultima8/ultima8.cpp
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 799e3abf3e..86f8c86cca 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1247,6 +1247,8 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
setupCoreGumps();
// and load everything back (order matters)
+ // for each entry, check that we read exactly the number of bytes
+ // expected - anything else suggests a corrupt save (or a bug)
bool totalok = true;
Std::string message;
@@ -1255,6 +1257,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
// so load these first
ds = sg->getDataSource("UCSTRINGS");
ok = _ucMachine->loadStrings(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "UCSTRINGS: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "UCSTRINGS: failed\n";
@@ -1262,6 +1265,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
ds = sg->getDataSource("UCGLOBALS");
ok = _ucMachine->loadGlobals(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "UCGLOBALS: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "UCGLOBALS: failed\n";
@@ -1269,6 +1273,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
ds = sg->getDataSource("UCLISTS");
ok = _ucMachine->loadLists(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "UCLISTS: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "UCLISTS: failed\n";
@@ -1278,6 +1283,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
// KERNEL must be before APP, for the _avatarMoverProcess
ds = sg->getDataSource("KERNEL");
ok = _kernel->load(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "KERNEL: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "KERNEL: failed\n";
@@ -1285,6 +1291,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
ds = sg->getDataSource("APP");
ok = load(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "APP: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "APP: failed\n";
@@ -1293,6 +1300,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
// WORLD must be before OBJECTS, for the egghatcher
ds = sg->getDataSource("WORLD");
ok = _world->load(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "WORLD: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "WORLD: failed\n";
@@ -1300,6 +1308,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
ds = sg->getDataSource("CURRENTMAP");
ok = _world->getCurrentMap()->load(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "CURRENTMAP: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "CURRENTMAP: failed\n";
@@ -1307,6 +1316,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
ds = sg->getDataSource("OBJECTS");
ok = _objectManager->load(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "OBJECTS: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "OBJECTS: failed\n";
@@ -1314,6 +1324,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
ds = sg->getDataSource("MAPS");
ok = _world->loadMaps(ds, version);
+ ok &= (ds->pos() == ds->size() && !ds->eos());
totalok &= ok;
pout << "MAPS: " << (ok ? "ok" : "failed") << Std::endl;
if (!ok) message += "MAPS: failed\n";
Commit: 878331b074319c614d44468eabc0079238676875
https://github.com/scummvm/scummvm/commit/878331b074319c614d44468eabc0079238676875
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-04T22:50:09+09:00
Commit Message:
ULTIMA8: Tweak process start order for Crusader
Changed paths:
engines/ultima/ultima8/games/start_crusader_process.cpp
diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index 0c82274f33..53a1c68ad9 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -64,18 +64,18 @@ void StartCrusaderProcess::run() {
}
}
- Gump *statusGump = new CruStatusGump(true);
- statusGump->InitGump(nullptr, false);
-
- Gump *cruPickupAreaGump = new CruPickupAreaGump(true);
- cruPickupAreaGump->InitGump(nullptr, false);
-
// Try to load the save game, if succeeded this pointer will no longer be valid
if (_saveSlot >= 0 && Ultima8Engine::get_instance()->loadGameState(_saveSlot).getCode() == Common::kNoError) {
//PaletteFaderProcess::I_fadeFromBlack(0, 0);
return;
}
+ Gump *statusGump = new CruStatusGump(true);
+ statusGump->InitGump(nullptr, false);
+
+ Gump *cruPickupAreaGump = new CruPickupAreaGump(true);
+ cruPickupAreaGump->InitGump(nullptr, false);
+
Ultima8Engine::get_instance()->setCheatMode(true);
if (!_skipStart) {
Commit: fab43f51a4e9243c335021c1b4daa87ab0bd09a6
https://github.com/scummvm/scummvm/commit/fab43f51a4e9243c335021c1b4daa87ab0bd09a6
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-04T22:50:49+09:00
Commit Message:
ULTIMA8: Destroy contents earlier in Cru death
Changed paths:
engines/ultima/ultima8/world/actors/actor.cpp
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 60665ff80c..244e253898 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -1324,6 +1324,10 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
ProcId lastanim = 0;
Kernel::get_instance()->killProcesses(_objId, Kernel::PROC_TYPE_ALL, true);
+
+ destroyContents();
+ giveTreasure();
+
if (damageType == 3 || damageType == 4 || damageType == 10 || damageType == 12) {
if (!is_robot /* && violence enabled */) {
const FireType *ft = GameData::get_instance()->getFireType(damageType);
@@ -1449,9 +1453,6 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
}
}
- destroyContents();
- giveTreasure();
-
return lastanim;
}
Commit: bf9af9abc1ef3658aee2c0f4854a03e5b9af98e4
https://github.com/scummvm/scummvm/commit/bf9af9abc1ef3658aee2c0f4854a03e5b9af98e4
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-04T22:50:59+09:00
Commit Message:
ULTIMA8: Ignore invalid parent objects on destruction
This probably shouldn't happen, but if it does then handle it gracefully for
now.
Changed paths:
engines/ultima/ultima8/world/item.cpp
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 4baa99aa72..1b611e6364 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -118,7 +118,7 @@ void Item::dumpInfo() const {
Container *Item::getParentAsContainer() const {
// No parent, no container
- if (!_parent)
+ if (!_parent || getObject(_parent) == nullptr)
return nullptr;
Container *p = getContainer(_parent);
More information about the Scummvm-git-logs
mailing list