aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdevtools/tasmrecover/tasm-recover1
-rw-r--r--engines/dreamweb/dreamgen.cpp28
-rw-r--r--engines/dreamweb/dreamgen.h3
-rw-r--r--engines/dreamweb/stubs.cpp46
-rw-r--r--engines/dreamweb/stubs.h5
5 files changed, 35 insertions, 48 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index d0cbae8fe5..f75a4aa82b 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -108,6 +108,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'checkifperson',
'getreelstart',
'findobname',
+ 'copyname',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index b72c83b40c..42a6a64fa0 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -17395,33 +17395,6 @@ success:
data.byte(kTurndirection) = 0;
}
-void DreamGenContext::copyname() {
- STACK_CHECK;
- push(di);
- findobname();
- di = pop();
- es = cs;
- cx = 28;
-make:
- _lodsb();
- _cmp(al, ':');
- if (flags.z())
- goto finishmakename;
- _cmp(al, 0);
- if (flags.z())
- goto finishmakename;
- _stosb();
- if (--cx)
- goto make;
-finishmakename:
- _inc(cx);
- al = 0;
- _stosb();
- return;
- al = 255;
- _stosb(cx, true);
-}
-
void DreamGenContext::showicon() {
STACK_CHECK;
_cmp(data.byte(kReallocation), 50);
@@ -19842,7 +19815,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_setwalk: setwalk(); break;
case addr_bresenhams: bresenhams(); break;
case addr_workoutframes: workoutframes(); break;
- case addr_copyname: copyname(); break;
case addr_showicon: showicon(); break;
case addr_middlepanel: middlepanel(); break;
case addr_showman: showman(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 4a8bcbd1a1..9c08a335c9 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -115,7 +115,6 @@ public:
static const uint16 addr_showman = 0xca6c;
static const uint16 addr_middlepanel = 0xca68;
static const uint16 addr_showicon = 0xca64;
- static const uint16 addr_copyname = 0xca5c;
static const uint16 addr_workoutframes = 0xca54;
static const uint16 addr_bresenhams = 0xca50;
static const uint16 addr_setwalk = 0xca44;
@@ -1784,7 +1783,7 @@ public:
void drawitall();
void usestereo();
void showcurrentfile();
- void copyname();
+ //void copyname();
void look();
void setmouse();
void checkone();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 4fcc1e4698..e15bc2aab9 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1000,28 +1000,42 @@ bool DreamGenContext::checkifperson(uint8 x, uint8 y) {
return false;
}
-void DreamGenContext::findobname() {
- findobname(ah, al);
-}
-
-void DreamGenContext::findobname(uint8 type, uint8 index) {
+const uint8 *DreamGenContext::findobname(uint8 type, uint8 index) {
if (type == 5) {
- uint16 offset = 64 * 2 * (index & 127);
- ds = data.word(kPeople);
- si = ds.word(kPersontxtdat + offset) + kPersontext;
+ uint16 i = 64 * 2 * (index & 127);
+ uint16 offset = segRef(data.word(kPeople)).word(kPersontxtdat + i) + kPersontext;
+ return segRef(data.word(kPeople)).ptr(offset, 0);
} else if (type == 4) {
- ds = data.word(kExtras);
- si = ds.word(kExtextdat + index * 2) + kExtext;
+ uint16 offset = segRef(data.word(kExtras)).word(kExtextdat + index * 2) + kExtext;
+ return segRef(data.word(kExtras)).ptr(offset, 0);
} else if (type == 2) {
- ds = data.word(kFreedesc);
- si = ds.word(kFreetextdat + index * 2) + kFreetext;
+ uint16 offset = segRef(data.word(kFreedesc)).word(kFreetextdat + index * 2) + kFreetext;
+ return segRef(data.word(kFreedesc)).ptr(offset, 0);
} else if (type == 1) {
- ds = data.word(kSetdesc);
- si = ds.word(kSettextdat + index * 2) + kSettext;
+ uint16 offset = segRef(data.word(kSetdesc)).word(kSettextdat + index * 2) + kSettext;
+ return segRef(data.word(kSetdesc)).ptr(offset, 0);
} else {
- ds = data.word(kBlockdesc);
- si = ds.word(kBlocktextdat + index * 2) + kBlocktext;
+ uint16 offset = segRef(data.word(kBlockdesc)).word(kBlocktextdat + index * 2) + kBlocktext;
+ return segRef(data.word(kBlockdesc)).ptr(offset, 0);
+ }
+}
+
+void DreamGenContext::copyname() {
+ copyname(ah, al, cs.ptr(di, 0));
+}
+
+void DreamGenContext::copyname(uint8 type, uint8 index, uint8 *dst) {
+ const uint8 *src = findobname(type, index);
+ size_t i;
+ for (i = 0; i < 28; ++i) {
+ char c = src[i];
+ if (c == ':')
+ break;
+ if (c == 0)
+ break;
+ dst[i] = c;
}
+ dst[i] = 0;
}
} /*namespace dreamgen */
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index b9d22c25c5..27250b7451 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -121,6 +121,7 @@
void doblocks();
void checkifperson();
bool checkifperson(uint8 x, uint8 y);
- void findobname();
- void findobname(uint8 type, uint8 index);
+ const uint8 *findobname(uint8 type, uint8 index);
+ void copyname();
+ void copyname(uint8 type, uint8 index, uint8 *dst);