aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdevtools/tasmrecover/tasm-recover1
-rw-r--r--engines/dreamweb/backdrop.cpp2
-rw-r--r--engines/dreamweb/dreamgen.cpp41
-rw-r--r--engines/dreamweb/dreamgen.h3
-rw-r--r--engines/dreamweb/sprite.cpp20
-rw-r--r--engines/dreamweb/structs.h2
-rw-r--r--engines/dreamweb/stubs.h3
-rw-r--r--engines/dreamweb/vgagrafx.cpp16
8 files changed, 33 insertions, 55 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 75da6715ba..a962d65e2f 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -175,6 +175,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'transferinv',
'obicons',
'compare',
+ 'pixelcheckset',
], skip_output = [
# These functions are processed but not output
'dreamweb',
diff --git a/engines/dreamweb/backdrop.cpp b/engines/dreamweb/backdrop.cpp
index 2c399af3c4..f0e03502dd 100644
--- a/engines/dreamweb/backdrop.cpp
+++ b/engines/dreamweb/backdrop.cpp
@@ -162,7 +162,7 @@ void DreamGenContext::showallobs() {
calcfrframe();
uint16 x, y;
finalframe(&x, &y);
- setEntry->b17 = setEntry->b18[0];
+ setEntry->index = setEntry->b18[0];
if ((setEntry->type == 0) && (setEntry->priority != 5) && (setEntry->priority != 6)) {
x += data.word(kMapadx);
y += data.word(kMapady);
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index a426cedb73..9c584bea90 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -2657,46 +2657,6 @@ nought:
goto palloop;
}
-void DreamGenContext::pixelcheckset() {
- STACK_CHECK;
- push(ax);
- _sub(al, es.byte(bx));
- _sub(ah, es.byte(bx+1));
- push(es);
- push(bx);
- push(cx);
- push(ax);
- al = es.byte(bx+4);
- getsetad();
- al = es.byte(bx+17);
- es = data.word(kSetframes);
- bx = (0);
- ah = 0;
- cx = 6;
- _mul(cx);
- _add(bx, ax);
- ax = pop();
- push(ax);
- al = ah;
- ah = 0;
- cl = es.byte(bx);
- ch = 0;
- _mul(cx);
- cx = pop();
- ch = 0;
- _add(ax, cx);
- _add(ax, es.word(bx+2));
- bx = ax;
- _add(bx, (0+2080));
- al = es.byte(bx);
- dl = al;
- cx = pop();
- bx = pop();
- es = pop();
- ax = pop();
- _cmp(dl, 0);
-}
-
void DreamGenContext::createpanel() {
STACK_CHECK;
di = 0;
@@ -17613,7 +17573,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_showpcx: showpcx(); break;
case addr_loadpalfromiff: loadpalfromiff(); break;
case addr_setmode: setmode(); break;
- case addr_pixelcheckset: pixelcheckset(); break;
case addr_createpanel: createpanel(); break;
case addr_createpanel2: createpanel2(); break;
case addr_vsync: vsync(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 3b680025cd..2b8174cc79 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -559,7 +559,6 @@ public:
static const uint16 addr_vsync = 0xc208;
static const uint16 addr_createpanel2 = 0xc200;
static const uint16 addr_createpanel = 0xc1fc;
- static const uint16 addr_pixelcheckset = 0xc1f8;
static const uint16 addr_setmode = 0xc1dc;
static const uint16 addr_loadpalfromiff = 0xc1d8;
static const uint16 addr_showpcx = 0xc1cc;
@@ -1618,7 +1617,7 @@ public:
void playchannel0();
void usemon();
void steady();
- void pixelcheckset();
+ //void pixelcheckset();
void reexfrominv();
void examinventory();
void talk();
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index c2ec27739c..7b41bbddab 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -297,7 +297,7 @@ void DreamGenContext::constant(Sprite *sprite, SetObject *objData) {
sprite->frame = 0;
}
uint8 b18 = objData->b18[sprite->frame];
- objData->b17 = b18;
+ objData->index = b18;
sprite->b15 = b18;
}
@@ -361,7 +361,7 @@ void DreamGenContext::dodoor(Sprite *sprite, SetObject *objData) {
if (objData->b18[sprite->frame] == 255) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
data.byte(kThroughdoor) = 1;
return;
shutdoor:
@@ -375,14 +375,14 @@ shutdoor:
if (sprite->frame != 0) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 5) //nearly
data.byte(kThroughdoor) = 0;
}
void DreamGenContext::steady(Sprite *sprite, SetObject *objData) {
uint8 b18 = objData->b18[0];
- objData->b17 = b18;
+ objData->index = b18;
sprite->b15 = b18;
}
@@ -426,7 +426,7 @@ void DreamGenContext::lockeddoorway(Sprite *sprite, SetObject *objData) {
--sprite->frame;
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 5)
data.byte(kThroughdoor) = 1;
return;
@@ -442,7 +442,7 @@ shutdoor2:
}
data.byte(kThroughdoor) = 0;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
if (sprite->frame == 0) {
turnpathoffCPP(data.byte(kDoorpath));
@@ -461,7 +461,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
data.byte(kLiftflag) = 3;
}
sprite->frame = 0;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
else if (liftFlag == 1) { //liftopen
turnpathonCPP(data.byte(kLiftpath));
@@ -472,7 +472,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
data.byte(kLiftflag) = 2;
}
sprite->frame = 12;
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
else if (liftFlag == 3) { //openlift
if (sprite->frame == 12) {
@@ -484,7 +484,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
al = 2;
liftnoise();
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
} else { //closeLift
assert(liftFlag == 2);
if (sprite->frame == 0) {
@@ -496,7 +496,7 @@ void DreamGenContext::liftsprite(Sprite *sprite, SetObject *objData) {
al = 3;
liftnoise();
}
- sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ sprite->b15 = objData->index = objData->b18[sprite->frame];
}
}
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index 9b8d823491..07419459a6 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -85,7 +85,7 @@ struct SetObject {
uint8 b11;
uint8 name[4];
uint8 b16;
- uint8 b17;
+ uint8 index;
uint8 b18[13]; // NB: Don't know the size yet
uint8 b31;
uint8 b32;
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index ede60259a4..d085fb880b 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -210,4 +210,7 @@
void obicons();
void compare();
bool compare(uint8 index, uint8 flag, const char id[4]);
+ void pixelcheckset();
+ bool pixelcheckset(ObjPos *pos, uint8 x, uint8 y);
+
diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp
index ee05ebfc15..8d437c2c73 100644
--- a/engines/dreamweb/vgagrafx.cpp
+++ b/engines/dreamweb/vgagrafx.cpp
@@ -455,5 +455,21 @@ void DreamGenContext::transferinv() {
data.word(kExframepos) += byteCount;
}
+void DreamGenContext::pixelcheckset() {
+ uint8 x = al;
+ uint8 y = ah;
+ ObjPos *pos = (ObjPos *)es.ptr(bx, sizeof(ObjPos));
+ flags._z = !pixelcheckset(pos, x, y);
+}
+
+bool DreamGenContext::pixelcheckset(ObjPos *pos, uint8 x, uint8 y) {
+ x -= pos->xMin;
+ y -= pos->yMin;
+ SetObject *setObject = getsetad(pos->index);
+ Frame *frame = (Frame *)segRef(data.word(kSetframes)).ptr(kFramedata, 0) + setObject->index;
+ const uint8 *ptr = segRef(data.word(kSetframes)).ptr(kFrames, 0) + frame->ptr() + y * frame->width + x;
+ return *ptr != 0;
+}
+
} /*namespace dreamgen */