aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/dreamweb/dreamgen.cpp43
-rw-r--r--engines/dreamweb/dreamgen.h1
-rw-r--r--engines/dreamweb/object.cpp29
-rw-r--r--engines/dreamweb/stubs.h1
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();