diff options
author | D G Turner | 2012-09-02 04:56:20 +0100 |
---|---|---|
committer | D G Turner | 2012-09-02 04:56:20 +0100 |
commit | 31cb5ce3f1e970699318e1c7cbfe1ae57804a14c (patch) | |
tree | 140ffd579624f891024659540fa28bccc58efa4e | |
parent | 7f8d15d008b8b5a97294ba37e7a62220cb49af0b (diff) | |
download | scummvm-rg350-31cb5ce3f1e970699318e1c7cbfe1ae57804a14c.tar.gz scummvm-rg350-31cb5ce3f1e970699318e1c7cbfe1ae57804a14c.tar.bz2 scummvm-rg350-31cb5ce3f1e970699318e1c7cbfe1ae57804a14c.zip |
TEENAGENT: Remove final usages of code segment blob.
The loading of cseg is now replaced by skipping, so that the external
dat file remains the same, but RAM usage is reduced.
The callbacks code will now error on unknown callback addresses, which
should not happen as all cases should now be covered, though the
callback tables need to be checked to ensure this is guaranteed.
-rw-r--r-- | engines/teenagent/callbacks.cpp | 38 | ||||
-rw-r--r-- | engines/teenagent/resources.cpp | 2 | ||||
-rw-r--r-- | engines/teenagent/resources.h | 2 |
3 files changed, 3 insertions, 39 deletions
diff --git a/engines/teenagent/callbacks.cpp b/engines/teenagent/callbacks.cpp index cc1f5091f3..9261e26d9e 100644 --- a/engines/teenagent/callbacks.cpp +++ b/engines/teenagent/callbacks.cpp @@ -4926,43 +4926,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) { break; default: - warning("unknown callback %04x called", addr); - - // try decoding trivial callbacks by cseg if not in switch - byte *code = res->cseg.ptr(addr); - if (code[0] == 0xbb && code[3] == 0xe8 && code[6] == 0xc3) { - // call display_message, r - uint16 msg = READ_LE_UINT16(code + 1); - uint16 func = 6 + addr + READ_LE_UINT16(code + 4); - warning("call %04x and return (csAddr_displayMsg = 0x%04x) msg:0x%04x", func, csAddr_displayMsg, msg); - if (func == csAddr_displayMsg) { - warning("trivial callback, showing message \"%s\"", (const char *)res->dseg.ptr(msg)); - displayMessage(msg); - return true; - } - } - - if (code[0] == 0xe8 && code[3] == 0xc3) { - uint func = 3 + addr + READ_LE_UINT16(code + 1); - warning("call %04x and return (csAddr_rejectMsg = 0x%04x)", func, csAddr_rejectMsg); - if (func == csAddr_rejectMsg) { - rejectMessage(); - return true; - } - } - - if (code[0] == 0xc7 && code[1] == 0x06 && code[2] == 0xf3 && code[3] == 0xb4 && - code[6] == 0xb8 && code[9] == 0xbb && code[12] == 0xbf && - code[22] == 0xe8 && code[25] == 0xc3) { - warning("callback -> loadScene(%d, Common::Point(%d, %d)); scene->setOrientation(%d)", code[4], - (READ_LE_UINT16(code + 7) + READ_LE_UINT16(code + 13) + 1) / 2, - READ_LE_UINT16(code + 10), code[21]); - loadScene(code[4], Common::Point( - (READ_LE_UINT16(code + 7) + READ_LE_UINT16(code + 13) + 1) / 2 , - READ_LE_UINT16(code + 10))); - scene->setOrientation(code[21]); - return true; - } + error("unknown callback 0x%04x called", addr); break; } diff --git a/engines/teenagent/resources.cpp b/engines/teenagent/resources.cpp index 278aad8c4e..3a497f7a69 100644 --- a/engines/teenagent/resources.cpp +++ b/engines/teenagent/resources.cpp @@ -119,7 +119,7 @@ bool Resources::loadArchives(const ADGameDescription *gd) { } #endif - cseg.read(dat, CSEG_SIZE); + dat->skip(CSEG_SIZE); dseg.read(dat, DSEG_SIZE); eseg.read(dat, ESEG_SIZE); delete dat; diff --git a/engines/teenagent/resources.h b/engines/teenagent/resources.h index c448736cda..364d683d8c 100644 --- a/engines/teenagent/resources.h +++ b/engines/teenagent/resources.h @@ -1164,7 +1164,7 @@ public: FilePack off, on, ons, lan000, lan500, sam_mmm, sam_sam, mmm, voices; #endif - Segment cseg, dseg; + Segment dseg; Font font7, font8; //const byte *getDialog(uint16 dialogNum) { return eseg.ptr(dialogOffsets[dialogNum]); } |