aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrand Augereau2011-08-30 02:26:28 +0200
committerBertrand Augereau2011-08-30 02:37:48 +0200
commit7624083cdcb80c044bd34391a4d536e12bb2320d (patch)
treecad31c5675b9dc375cf6b71b7cee89e3388248b1
parent081bdece0c66aa900935e5bff9ed8f3eb70eb4ec (diff)
downloadscummvm-rg350-7624083cdcb80c044bd34391a4d536e12bb2320d.tar.gz
scummvm-rg350-7624083cdcb80c044bd34391a4d536e12bb2320d.tar.bz2
scummvm-rg350-7624083cdcb80c044bd34391a4d536e12bb2320d.zip
DREAMWEB: 'getexpos' ported to C++
-rwxr-xr-xdevtools/tasmrecover/tasm-recover1
-rw-r--r--engines/dreamweb/dreamgen.cpp19
-rw-r--r--engines/dreamweb/dreamgen.h3
-rw-r--r--engines/dreamweb/stubs.cpp11
-rw-r--r--engines/dreamweb/stubs.h2
5 files changed, 15 insertions, 21 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 85a1b4b478..b76edfe351 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -165,6 +165,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'waitframes',
'drawflags',
'addtopeoplelist',
+ 'getexpos',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 5b1e30fddb..d2a9651267 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -6026,24 +6026,6 @@ moretext:
goto moretext;
}
-void DreamGenContext::getexpos() {
- STACK_CHECK;
- es = data.word(kExtras);
- al = 0;
- di = (0+2080+30000);
-tryanotherex:
- _cmp(es.byte(di+2), 255);
- if (flags.z())
- goto foundnewex;
- _add(di, 16);
- _inc(al);
- _cmp(al, (114));
- if (!flags.z())
- goto tryanotherex;
-foundnewex:
- data.byte(kExpos) = al;
-}
-
void DreamGenContext::purgealocation() {
STACK_CHECK;
push(ax);
@@ -17981,7 +17963,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_pickupconts: pickupconts(); break;
case addr_transfercontoex: transfercontoex(); break;
case addr_transfertext: transfertext(); break;
- case addr_getexpos: getexpos(); break;
case addr_purgealocation: purgealocation(); break;
case addr_emergencypurge: emergencypurge(); break;
case addr_purgeanitem: purgeanitem(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index cc777f4e82..f80c2ebaf2 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -455,7 +455,6 @@ public:
static const uint16 addr_purgeanitem = 0xc414;
static const uint16 addr_emergencypurge = 0xc410;
static const uint16 addr_purgealocation = 0xc40c;
- static const uint16 addr_getexpos = 0xc408;
static const uint16 addr_transfertext = 0xc404;
static const uint16 addr_transfercontoex = 0xc400;
static const uint16 addr_pickupconts = 0xc3fc;
@@ -1336,7 +1335,7 @@ public:
//void clearwork();
void loadtraveltext();
//void worktoscreen();
- void getexpos();
+ //void getexpos();
void fadedos();
//void fillspace();
void selectlocation();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 3c4c228471..1ffe3295ef 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1198,6 +1198,17 @@ void DreamGenContext::deletetaken() {
}
}
+void DreamGenContext::getexpos() {
+ const DynObject *objects = (const DynObject *)segRef(data.word(kExtras)).ptr(kExdata, sizeof(DynObject));
+ for (size_t i = 0; i < kNumexobjects; ++i) {
+ if (objects[i].b2[0] == 0xff) {
+ data.byte(kExpos) = i;
+ return;
+ }
+ }
+ data.byte(kExpos) = kNumexobjects;
+}
+
void DreamGenContext::placesetobject() {
placesetobject(al);
}
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 0be9c793cf..c5a1742a9b 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -197,4 +197,6 @@
void drawflags();
void addtopeoplelist();
void addtopeoplelist(ReelRoutine *routine);
+ void getexpos();
+