diff options
-rwxr-xr-x | devtools/tasmrecover/tasm-recover | 1 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 79 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.h | 10 | ||||
-rw-r--r-- | engines/dreamweb/stubs.cpp | 54 | ||||
-rw-r--r-- | engines/dreamweb/stubs.h | 1 |
5 files changed, 60 insertions, 85 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 86b789bb4c..68312eca45 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -153,6 +153,7 @@ generator = cpp(context, "DreamGen", blacklist = [ 'dumpblink', 'dumppointer', 'showpointer', + 'animpointer', 'checkcoords', ], skip_output = [ # These functions are processed but not output diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index ffe8d81c3a..01de5fc7a8 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -16352,84 +16352,6 @@ _tmp1: multiget(); } -void DreamGenContext::animpointer() { - STACK_CHECK; - _cmp(data.byte(kPointermode), 2); - if (flags.z()) - goto combathand; - _cmp(data.byte(kPointermode), 3); - if (flags.z()) - goto mousehand; - _cmp(data.word(kWatchingtime), 0); - if (flags.z()) - goto notwatchpoint; - data.byte(kPointerframe) = 11; - return; -notwatchpoint: - data.byte(kPointerframe) = 0; - _cmp(data.byte(kInmaparea), 0); - if (flags.z()) - return /* (gothand) */; - _cmp(data.byte(kPointerfirstpath), 0); - if (flags.z()) - return /* (gothand) */; - getflagunderp(); - _cmp(cl, 2); - if (flags.c()) - return /* (gothand) */; - _cmp(cl, 128); - if (!flags.c()) - return /* (gothand) */; - data.byte(kPointerframe) = 3; - _test(cl, 4); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 4; - _test(cl, 16); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 5; - _test(cl, 2); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 6; - _test(cl, 8); - if (!flags.z()) - return /* (gothand) */; - data.byte(kPointerframe) = 8; - return; -mousehand: - _cmp(data.byte(kPointerspeed), 0); - if (flags.z()) - goto rightspeed3; - _dec(data.byte(kPointerspeed)); - goto finflashmouse; -rightspeed3: - data.byte(kPointerspeed) = 5; - _inc(data.byte(kPointercount)); - _cmp(data.byte(kPointercount), 16); - if (!flags.z()) - goto finflashmouse; - data.byte(kPointercount) = 0; -finflashmouse: - al = data.byte(kPointercount); - ah = 0; - bx = offset_flashmousetab; - _add(bx, ax); - al = cs.byte(bx); - data.byte(kPointerframe) = al; - return; -combathand: - data.byte(kPointerframe) = 0; - _cmp(data.byte(kReallocation), 14); - if (!flags.z()) - return /* (notarrow) */; - _cmp(data.byte(kCommandtype), 211); - if (!flags.z()) - return /* (notarrow) */; - data.byte(kPointerframe) = 5; -} - void DreamGenContext::readmouse() { STACK_CHECK; ax = data.word(kMousebutton); @@ -18692,7 +18614,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_dumpzoom: dumpzoom(); break; case addr_putunderzoom: putunderzoom(); break; case addr_undertextline: undertextline(); break; - case addr_animpointer: animpointer(); break; case addr_setmouse: setmouse(); break; case addr_readmouse: readmouse(); break; case addr_mousecall: mousecall(); break; diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index a6a32c22ac..d92ce478d1 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -85,7 +85,6 @@ public: static const uint16 addr_mousecall = 0xcae8; static const uint16 addr_readmouse = 0xcae4; static const uint16 addr_setmouse = 0xcae0; - static const uint16 addr_animpointer = 0xcadc; static const uint16 addr_undertextline = 0xcad0; static const uint16 addr_putunderzoom = 0xcabc; static const uint16 addr_dumpzoom = 0xcab8; @@ -683,14 +682,13 @@ public: static const uint16 offset_gameerror2 = 0x0fb2; static const uint16 offset_loadlist = 0x0ef0; static const uint16 offset_gameerror6 = 0x10be; - static const uint16 offset_flashmousetab = 0x1707; static const uint16 offset_speechfile = 0x13f1; static const uint16 offset_atmospherelist = 0x147e; static const uint16 offset_gameerror4 = 0x1037; static const uint16 offset_gameerror1 = 0x0f6e; static const uint16 offset_examlist = 0x09be; static const uint16 offset_gameinfo = 0x1170; - static const uint16 offset_decidelist = 0x13c1; + static const uint16 offset_opslist = 0x0ec6; static const uint16 offset_invlist1 = 0x09fc; static const uint16 offset_money2poke = 0x0d97; static const uint16 offset_talklist = 0x0a64; @@ -710,7 +708,7 @@ public: static const uint16 offset_gameerror3 = 0x1003; static const uint16 offset_rainlocations = 0x0459; static const uint16 offset_diarylist = 0x0e9c; - static const uint16 offset_opslist = 0x0ec6; + static const uint16 offset_decidelist = 0x13c1; static const uint16 offset_symbollist = 0x0e5e; static const uint16 offset_folderlist = 0x0e34; static const uint16 offset_facelist = 0x0451; @@ -1368,7 +1366,7 @@ public: //void findobname(); //void makename(); void buttonfour(); - void animpointer(); + void dosometalk(); //void lockmon(); //void dochange(); void getanyaddir(); @@ -1685,6 +1683,7 @@ public: void textformonk(); void reconstruct(); void soldier1(); + //void animpointer(); void getundercentre(); void checkforexit(); void loadseg(); @@ -2015,7 +2014,6 @@ public: void emergencypurge(); void usemenu(); void alleybarksound(); - void dosometalk(); void usecart(); void intromusic(); void quitkey(); diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 94d7a74d11..d1928072cb 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -1508,6 +1508,60 @@ void DreamGenContext::showpointer() { } } +void DreamGenContext::animpointer() { + + if (data.byte(kPointermode) == 2) { + data.byte(kPointerframe) = 0; + if ((data.byte(kReallocation) == 14) && (data.byte(kCommandtype) == 211)) + data.byte(kPointerframe) = 5; + return; + } else if (data.byte(kPointermode) == 3) { + if (data.byte(kPointerspeed) != 0) { + --data.byte(kPointerspeed); + } else { + data.byte(kPointerspeed) = 5; + ++data.byte(kPointercount); + if (data.byte(kPointercount) == 16) + data.byte(kPointercount) = 0; + } + static const uint8 flashMouseTab[] = { 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2 }; + data.byte(kPointerframe) = flashMouseTab[data.byte(kPointercount)]; + return; + } + if (data.word(kWatchingtime) != 0) { + data.byte(kPointerframe) = 11; + return; + } + data.byte(kPointerframe) = 0; + if (data.byte(kInmaparea) == 0) + return; + if (data.byte(kPointerfirstpath) == 0) + return; + uint8 flag, flagEx; + getflagunderp(&flag, &flagEx); + if (flag < 2) + return; + if (flag >= 128) + return; + if (flag & 4) { + data.byte(kPointerframe) = 3; + return; + } + if (flag & 16) { + data.byte(kPointerframe) = 4; + return; + } + if (flag & 2) { + data.byte(kPointerframe) = 5; + return; + } + if (flag & 8) { + data.byte(kPointerframe) = 6; + return; + } + data.byte(kPointerframe) = 8; +} + bool DreamGenContext::isCD() { // The original sources has two codepaths depending if the game is 'if cd' or not // This is a hack to guess which version to use with the assumption that if we have a cd version diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index dcd715a01d..0409c3a9cd 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -182,6 +182,7 @@ void dumpblink(); void dumppointer(); void showpointer(); + void animpointer(); void checkcoords(); void checkcoords(const RectWithCallback *rectWithCallbacks); |