diff options
author | D G Turner | 2012-07-11 13:03:32 +0100 |
---|---|---|
committer | D G Turner | 2012-07-11 13:03:32 +0100 |
commit | c05dfddec32e2eabc49c6bc0ca4bd2d3e90e3e2c (patch) | |
tree | 490a5dccb96d1ccbe1e3ca322f79492817aa2314 /engines/teenagent | |
parent | 78312544a612a3ff339a96ae00eeb15363e031e3 (diff) | |
download | scummvm-rg350-c05dfddec32e2eabc49c6bc0ca4bd2d3e90e3e2c.tar.gz scummvm-rg350-c05dfddec32e2eabc49c6bc0ca4bd2d3e90e3e2c.tar.bz2 scummvm-rg350-c05dfddec32e2eabc49c6bc0ca4bd2d3e90e3e2c.zip |
TEENAGENT: Add Resource code to precompute Dialog Offsets.
This should allow the removal of most/all of the hardcoded eseg
addresses in the Dialog calls.
Diffstat (limited to 'engines/teenagent')
-rw-r--r-- | engines/teenagent/resources.cpp | 28 | ||||
-rw-r--r-- | engines/teenagent/resources.h | 10 |
2 files changed, 37 insertions, 1 deletions
diff --git a/engines/teenagent/resources.cpp b/engines/teenagent/resources.cpp index 623b44c81b..93e8c45c26 100644 --- a/engines/teenagent/resources.cpp +++ b/engines/teenagent/resources.cpp @@ -57,6 +57,32 @@ quick note on varia resources: #define DSEG_SIZE 59280 // 0xe790 #define ESEG_SIZE 35810 // 0x8be2 +void Resources::precomputeDialogOffsets() { + dialogOffsets.push_back(0); + int n = 0; + uint8 current, last = 0xff; + for (uint i = 0; i < eseg.size(); i++) { + current = eseg.get_byte(i); + + if (n == 4) { + dialogOffsets.push_back(i); + n = 0; + } + + if (current != 0x00 && last == 0x00) + n = 0; + + if (current == 0x00) + n++; + + last = current; + } + + debug(1, "Resources::precomputeDialogOffsets() - Found %d dialogs", dialogOffsets.size()); + for (uint i = 0; i < dialogOffsets.size(); i++) + debug(1, "\tDialog #%d: Offset 0x%04x", i, dialogOffsets[i]); +} + bool Resources::loadArchives(const ADGameDescription *gd) { Common::File *dat_file = new Common::File(); if (!dat_file->open("teenagent.dat")) { @@ -73,6 +99,8 @@ bool Resources::loadArchives(const ADGameDescription *gd) { delete dat; + precomputeDialogOffsets(); + FilePack varia; varia.open("varia.res"); font7.load(varia, 7); diff --git a/engines/teenagent/resources.h b/engines/teenagent/resources.h index 88bc3ea94d..d4cde18db8 100644 --- a/engines/teenagent/resources.h +++ b/engines/teenagent/resources.h @@ -52,8 +52,16 @@ public: FilePack off, on, ons, lan000, lan500, sam_mmm, sam_sam, mmm, voices; #endif - Segment cseg, dseg, eseg; + Segment cseg, dseg; Font font7, font8; + + const byte *getDialog(uint16 dialogNum) { return eseg.ptr(dialogOffsets[dialogNum]); } + + Segment eseg; +private: + void precomputeDialogOffsets(); + + Common::Array<uint16> dialogOffsets; }; } // End of namespace TeenAgent |