aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorD G Turner2012-09-02 04:56:20 +0100
committerD G Turner2012-09-02 04:56:20 +0100
commit31cb5ce3f1e970699318e1c7cbfe1ae57804a14c (patch)
tree140ffd579624f891024659540fa28bccc58efa4e
parent7f8d15d008b8b5a97294ba37e7a62220cb49af0b (diff)
downloadscummvm-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.cpp38
-rw-r--r--engines/teenagent/resources.cpp2
-rw-r--r--engines/teenagent/resources.h2
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]); }