GOB: Fix TOT text resources loading when no sprite resources are present

This fixes the missing text in Bargon Attack/Atari intro scene.
This commit is contained in:
Simon Delamarre 2023-11-21 12:51:18 +01:00
parent 8983b1c791
commit 6c3d960a90

View File

@ -240,42 +240,43 @@ bool Resources::loadTOTResourceTable() {
_totResStart = totProps.scriptEnd;
if ((totProps.resourcesOffset == 0xFFFFFFFF) ||
(totProps.resourcesOffset == 0))
// No resources here
return false;
if (totProps.resourcesOffset != 0xFFFFFFFF && totProps.resourcesOffset != 0) {
_totResourceTable = new TOTResourceTable;
_totResourceTable = new TOTResourceTable;
stream->seek(totProps.resourcesOffset);
_totResourceTable->itemsCount = stream->readSint16LE();
stream->seek(totProps.resourcesOffset);
_totResourceTable->itemsCount = stream->readSint16LE();
uint32 resSize = _totResourceTable->itemsCount * kTOTResItemSize +
kTOTResTableSize;
uint32 resSize = _totResourceTable->itemsCount * kTOTResItemSize +
kTOTResTableSize;
_totResourceTable->dataOffset = totProps.resourcesOffset + resSize;
_totResourceTable->dataOffset = totProps.resourcesOffset + resSize;
// Would the table actually fit into the TOT?
if ((totProps.resourcesOffset + resSize) > ((uint32) stream->size()))
return false;
// Would the table actually fit into the TOT?
if ((totProps.resourcesOffset + resSize) > ((uint32) stream->size()))
return false;
_totResourceTable->unknown = stream->readByte();
_totResourceTable->items = new TOTResourceItem[_totResourceTable->itemsCount];
_totResourceTable->unknown = stream->readByte();
_totResourceTable->items = new TOTResourceItem[_totResourceTable->itemsCount];
for (int i = 0; i < _totResourceTable->itemsCount; ++i) {
TOTResourceItem &item = _totResourceTable->items[i];
for (int i = 0; i < _totResourceTable->itemsCount; ++i) {
TOTResourceItem &item = _totResourceTable->items[i];
item.offset = stream->readSint32LE();
item.size = stream->readUint16LE();
item.width = stream->readSint16LE();
item.height = stream->readSint16LE();
item.offset = stream->readSint32LE();
item.size = stream->readUint16LE();
item.width = stream->readSint16LE();
item.height = stream->readSint16LE();
if (item.offset < 0) {
item.type = kResourceIM;
item.index = -item.offset - 1;
} else
item.type = kResourceTOT;
if (item.offset < 0) {
item.type = kResourceIM;
item.index = -item.offset - 1;
} else
item.type = kResourceTOT;
}
} else {
_totResourceTable = nullptr;
// Do not return yet: although there is no *sprite* resource table,
// a text table may still be present.
}
_totSize = stream->size() - _totResStart;