diff options
author | D G Turner | 2011-12-25 23:33:11 +0000 |
---|---|---|
committer | D G Turner | 2011-12-25 23:33:11 +0000 |
commit | c7b1ec21980d622c138fa2dcac5a03f80aa415e1 (patch) | |
tree | 05e5ec95a789277c02b2a328595b07a5ab1a929f /engines | |
parent | 1f346baa92064388de2958110d93006ac96a5479 (diff) | |
download | scummvm-rg350-c7b1ec21980d622c138fa2dcac5a03f80aa415e1.tar.gz scummvm-rg350-c7b1ec21980d622c138fa2dcac5a03f80aa415e1.tar.bz2 scummvm-rg350-c7b1ec21980d622c138fa2dcac5a03f80aa415e1.zip |
DREAMWEB: Ported 'findfirstpath' to C++.
This conversion could do with a bit more work to remove the es/ax/cx
temp usage and clean up the code.
Diffstat (limited to 'engines')
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 43 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.h | 1 | ||||
-rw-r--r-- | engines/dreamweb/object.cpp | 29 | ||||
-rw-r--r-- | engines/dreamweb/stubs.h | 1 |
4 files changed, 28 insertions, 46 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 32bb520b18..e92291178c 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -790,49 +790,6 @@ flunkedit: dl = 255; } -void DreamGenContext::findFirstPath() { - STACK_CHECK; - push(ax); - bx = (0); - es = data.word(kReels); - al = data.byte(kRoomnum); - ah = 0; - cx = 144; - _mul(cx); - _add(bx, ax); - cx = pop(); - dl = 0; -fpathloop: - ax = es.word(bx+2); - _cmp(ax, 0x0ffff); - if (flags.z()) - goto nofirst; - _cmp(cl, al); - if (flags.c()) - goto nofirst; - _cmp(ch, ah); - if (flags.c()) - goto nofirst; - ax = es.word(bx+4); - _cmp(cl, al); - if (!flags.c()) - goto nofirst; - _cmp(ch, ah); - if (!flags.c()) - goto nofirst; - goto gotfirst; -nofirst: - _add(bx, 8); - _inc(dl); - _cmp(dl, 12); - if (!flags.z()) - goto fpathloop; - al = 0; - return; -gotfirst: - al = es.byte(bx+6); -} - void DreamGenContext::__start() { static const uint8 src[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index 45589cab07..4d6946e8ab 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -454,7 +454,6 @@ public: #include "stubs.h" // Allow hand-reversed functions to have a signature different than void f() void dirCom(); - void findFirstPath(); void getAnyAd(); void getFreeAd(); void dirFile(); diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index c202ac765c..84829bf440 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -341,6 +341,32 @@ void DreamGenContext::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } +uint8 DreamGenContext::findFirstPath(uint16 param) { + es = data.word(kReels); + uint16 ptr = 144 * data.byte(kRoomnum); + // TODO: Replace ax, cx usage with temporary uint8/16 variables... + cx = param; + + for (uint8 pathLoop = 0; pathLoop < 12; pathLoop++, ptr += 8) { + ax = es.word(ptr+2); + + if (ax == 0x0ffff) + continue; // "nofirst" + + if (cl < al || ch < ah) + continue; // "nofirst" + + ax = es.word(ptr+4); + + if (cl > al || ch > ah) + continue; // "nofirst" + + return es.byte(ptr+6); // "gotfirst" + } + + return 0; +} + void DreamGenContext::identifyOb() { if (data.word(kWatchingtime) != 0) { blank(); @@ -362,8 +388,7 @@ void DreamGenContext::identifyOb() { data.byte(kPointerspath) = dl; ax = pop(); push(ax); - findFirstPath(); - data.byte(kPointerfirstpath) = al; + data.byte(kPointerfirstpath) = findFirstPath(ax); ax = pop(); byte x = al; diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index 148436e8a8..62259a16a5 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -172,6 +172,7 @@ void checkObjectSize(); bool checkObjectSizeCPP(); void openOb(); + uint8 findFirstPath(uint16 param); void identifyOb(); void selectOb(); void findInvPos(); |