aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdevtools/tasmrecover/tasm-recover1
-rw-r--r--engines/dreamweb/dreamgen.cpp23
-rw-r--r--engines/dreamweb/dreamgen.h5
-rw-r--r--engines/dreamweb/structs.h5
-rw-r--r--engines/dreamweb/stubs.cpp21
-rw-r--r--engines/dreamweb/stubs.h3
6 files changed, 22 insertions, 36 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 658ff74aed..29d24a5e59 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -173,6 +173,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'obpicture',
'delthisone',
'transferinv',
+ 'obicons',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index b239842222..58c461963f 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -4338,28 +4338,6 @@ void DreamGenContext::openob() {
cs.word(bx) = ax;
}
-void DreamGenContext::obicons() {
- STACK_CHECK;
- al = data.byte(kCommand);
- getanyad();
- _cmp(al, 255);
- if (flags.z())
- goto cantopenit;
- ds = data.word(kIcons2);
- di = 210;
- bx = 1;
- al = 4;
- ah = 0;
- showframe();
-cantopenit:
- ds = data.word(kIcons2);
- di = 260;
- bx = 1;
- al = 1;
- ah = 0;
- showframe();
-}
-
void DreamGenContext::examicon() {
STACK_CHECK;
ds = data.word(kIcons2);
@@ -17718,7 +17696,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_openinv: openinv(); break;
case addr_showryanpage: showryanpage(); break;
case addr_openob: openob(); break;
- case addr_obicons: obicons(); break;
case addr_examicon: examicon(); break;
case addr_describeob: describeob(); break;
case addr_additionaltext: additionaltext(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 2eb0b93c6a..04bef1670d 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -495,7 +495,6 @@ public:
static const uint16 addr_additionaltext = 0xc368;
static const uint16 addr_describeob = 0xc364;
static const uint16 addr_examicon = 0xc35c;
- static const uint16 addr_obicons = 0xc358;
static const uint16 addr_openob = 0xc354;
static const uint16 addr_showryanpage = 0xc350;
static const uint16 addr_openinv = 0xc34c;
@@ -1292,6 +1291,7 @@ public:
//void multidump();
void channel0only();
void worktoscreenm();
+ //void obicons();
void removeemm();
//void frameoutbh();
void getobtextstart();
@@ -1634,7 +1634,7 @@ public:
//void readabyte();
//void showframe();
void random();
- void obicons();
+ void mainman();
void mansatstill();
void channel1only();
void checkbasemem();
@@ -2019,7 +2019,6 @@ public:
void accesslightoff();
void usehole();
void useobject();
- void mainman();
void volumeadjust();
//void checkiffree();
};
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index 9f7c23181c..9b8d823491 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -77,8 +77,6 @@ struct SetObject {
uint8 b3;
uint8 b4;
uint8 priority;
- uint16 w4() const { return READ_LE_UINT16(&b4); }
- void setW4(uint16 v) { WRITE_LE_UINT16(&b4, v); }
uint8 b6;
uint8 delay;
uint8 type;
@@ -126,9 +124,6 @@ struct DynObject {
uint8 mapad[5];
uint8 b7;
uint8 b8;
- uint16 w7() const { return READ_LE_UINT16(&b7); }
- void setW7(uint16 v) { WRITE_LE_UINT16(&b7, v); }
-
uint8 b9;
uint8 b10;
uint8 initialLocation;
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 88e590f4a3..e400a5bbf3 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1188,18 +1188,21 @@ DynObject *DreamGenContext::geteitheradCPP() {
return getfreead(data.byte(kItemframe));
}
-void *DreamGenContext::getanyad(uint16 *value) {
+void *DreamGenContext::getanyad(uint8 *value1, uint8 *value2) {
if (data.byte(kObjecttype) == 4) {
DynObject *exObject = getexad(data.byte(kCommand));
- *value = exObject->w7();
+ *value1 = exObject->b7;
+ *value2 = exObject->b8;
return exObject;
} else if (data.byte(kObjecttype) == 2) {
DynObject *freeObject = getfreead(data.byte(kCommand));
- *value = freeObject->w7();
+ *value1 = freeObject->b7;
+ *value2 = freeObject->b8;
return freeObject;
} else {
SetObject *setObject = getsetad(data.byte(kCommand));
- *value = setObject->w4(); // Suspicious : conflicts with priority being a byte?
+ *value1 = setObject->b4;
+ *value2 = setObject->priority;
return setObject;
}
}
@@ -1695,6 +1698,16 @@ void DreamGenContext::obpicture() {
showframe(frames, 160, 68, frame, 0x80);
}
+void DreamGenContext::obicons() {
+ uint8 value1, value2;
+ getanyad(&value1, &value2);
+ if (value1 == 0xff) {
+ showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 260, 1, 1, 0);
+ } else {
+ showframe((Frame *)segRef(data.word(kIcons2)).ptr(0, 0), 210, 1, 4, 0);
+ }
+}
+
bool DreamGenContext::isCD() {
// The original sources has two codepaths depending if the game is 'if cd' or not
// This is a hack to guess which version to use with the assumption that if we have a cd version
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index ac68da850a..7bba6a9d52 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -162,7 +162,7 @@
DynObject *getexad(uint8 index);
DynObject *geteitheradCPP();
SetObject *getsetad(uint8 index);
- void *getanyad(uint16 *value);
+ void *getanyad(uint8 *value1, uint8 *value2);
void setallchanges();
void dochange();
void dochange(uint8 index, uint8 value, uint8 type);
@@ -206,4 +206,5 @@
void dumpmap();
void obpicture();
void transferinv();
+ void obicons();