Skip to content

Commit

Permalink
DREAMWEB: Ported 'findfirstpath' to C++.
Browse files Browse the repository at this point in the history
This conversion could do with a bit more work to remove the es/ax/cx
temp usage and clean up the code.
  • Loading branch information
digitall committed Dec 25, 2011
1 parent 1f346ba commit c7b1ec2
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 46 deletions.
1 change: 1 addition & 0 deletions devtools/tasmrecover/tasm-recover
Expand Up @@ -447,6 +447,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'finalframe',
'findallryan',
'findexobject',
'findfirstpath',
'findinvpos',
'findlen',
'findnextcolon',
Expand Down
43 changes: 0 additions & 43 deletions engines/dreamweb/dreamgen.cpp
Expand Up @@ -790,49 +790,6 @@ void DreamGenContext::findPathOfPoint() {
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,
Expand Down
1 change: 0 additions & 1 deletion engines/dreamweb/dreamgen.h
Expand Up @@ -454,7 +454,6 @@ class DreamGenContext : public DreamBase, public Context {
#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();
Expand Down
29 changes: 27 additions & 2 deletions engines/dreamweb/object.cpp
Expand Up @@ -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();
Expand All @@ -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;
Expand Down
1 change: 1 addition & 0 deletions engines/dreamweb/stubs.h
Expand Up @@ -172,6 +172,7 @@
void checkObjectSize();
bool checkObjectSizeCPP();
void openOb();
uint8 findFirstPath(uint16 param);
void identifyOb();
void selectOb();
void findInvPos();
Expand Down

0 comments on commit c7b1ec2

Please sign in to comment.