diff options
Diffstat (limited to 'engines/agi/preagi_troll.cpp')
-rw-r--r-- | engines/agi/preagi_troll.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/engines/agi/preagi_troll.cpp b/engines/agi/preagi_troll.cpp index ddb3d3de2e..f8fc581112 100644 --- a/engines/agi/preagi_troll.cpp +++ b/engines/agi/preagi_troll.cpp @@ -726,13 +726,38 @@ void Troll::init() { _vm->_picture->setPictureVersion(AGIPIC_V15); //SetScreenPar(320, 200, (char*)ibm_fontdata); + const int gaps[] = { 0x3A40, 0x4600, 0x4800, 0x5800, 0x5a00, 0x6a00, + 0x6c00, 0x7400, 0x7600, 0x7c00, 0x7e00, 0x8e00, + 0x9000, 0xa000, 0xa200, 0xb200, 0xb400, 0xc400, + 0xc600, 0xd600, 0xd800, 0xe800, 0xea00, 0xfa00, + 0xfc00, 0x10c00, 0x10e00, 0x11e00, 0x12000, 0x13000 }; + Common::File infile; if (!infile.open(IDA_TRO_BINNAME)) return; - _gameData = (byte *)malloc(infile.size()); - infile.seek(IDO_TRO_DATA_START); - infile.read(_gameData, infile.size() - IDO_TRO_DATA_START); + _gameData = (byte *)malloc(0xD9C0); + + bool flip = true; + byte *ptr = _gameData; + int diff; + + for (int i = 0; i < ARRAYSIZE(gaps) - 1; i++) { + diff = gaps[i + 1] - gaps[i]; + + if (flip) { + infile.seek(gaps[i]); + infile.read(ptr, diff); + ptr += diff; + } else { + } + flip = !flip; + } + + // One sector is off + infile.seek(0x18470); + infile.read(_gameData + 15632, 592); + infile.close(); fillOffsets(); |