aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb
diff options
context:
space:
mode:
authorBertrand Augereau2011-06-28 05:10:35 +0200
committerBertrand Augereau2011-07-18 22:59:15 +0200
commit40e5e03e32f08562738abde8a22ce4b0c98264f0 (patch)
treec1423791b9216009e67d6cacc90361d57ed372a2 /engines/dreamweb
parent25528a56e854795afa7eeda92a338aafee124eb4 (diff)
downloadscummvm-rg350-40e5e03e32f08562738abde8a22ce4b0c98264f0.tar.gz
scummvm-rg350-40e5e03e32f08562738abde8a22ce4b0c98264f0.tar.bz2
scummvm-rg350-40e5e03e32f08562738abde8a22ce4b0c98264f0.zip
DREAMWEB: Blacklisted liftsprite
Diffstat (limited to 'engines/dreamweb')
-rw-r--r--engines/dreamweb/dreamgen.cpp93
-rw-r--r--engines/dreamweb/dreamgen.h3
-rw-r--r--engines/dreamweb/stubs.cpp76
-rw-r--r--engines/dreamweb/stubs.h4
4 files changed, 80 insertions, 96 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 478a7380e7..ce978b223d 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -2955,98 +2955,6 @@ steadyob:
steady();
}
-void DreamGenContext::liftsprite() {
- STACK_CHECK;
- al = data.byte(kLiftflag);
- _cmp(al, 0);
- if (flags.z())
- goto liftclosed;
- _cmp(al, 1);
- if (flags.z())
- goto liftopen;
- _cmp(al, 3);
- if (flags.z())
- goto openlift;
- al = es.byte(bx+19);
- _cmp(al, 0);
- if (flags.z())
- goto finishclose;
- _dec(al);
- _cmp(al, 11);
- if (!flags.z())
- goto pokelift;
- push(ax);
- al = 3;
- liftnoise();
- ax = pop();
- goto pokelift;
-finishclose:
- data.byte(kLiftflag) = 0;
- return;
-openlift:
- al = es.byte(bx+19);
- _cmp(al, 12);
- if (flags.z())
- goto endoflist;
- _inc(al);
- _cmp(al, 1);
- if (!flags.z())
- goto pokelift;
- push(ax);
- al = 2;
- liftnoise();
- ax = pop();
-pokelift:
- es.byte(bx+19) = al;
- ah = 0;
- push(di);
- _add(di, ax);
- al = ds.byte(di+18);
- di = pop();
- es.byte(bx+15) = al;
- ds.byte(di+17) = al;
- return;
-endoflist:
- data.byte(kLiftflag) = 1;
- return;
-liftopen:
- al = data.byte(kLiftpath);
- push(es);
- push(bx);
- turnpathon();
- bx = pop();
- es = pop();
- _cmp(data.byte(kCounttoclose), 0);
- if (flags.z())
- goto nocountclose;
- _dec(data.byte(kCounttoclose));
- _cmp(data.byte(kCounttoclose), 0);
- if (!flags.z())
- goto nocountclose;
- data.byte(kLiftflag) = 2;
-nocountclose:
- al = 12;
- goto pokelift;
-liftclosed:
- al = data.byte(kLiftpath);
- push(es);
- push(bx);
- turnpathoff();
- bx = pop();
- es = pop();
- _cmp(data.byte(kCounttoopen), 0);
- if (flags.z())
- goto nocountopen;
- _dec(data.byte(kCounttoopen));
- _cmp(data.byte(kCounttoopen), 0);
- if (!flags.z())
- goto nocountopen;
- data.byte(kLiftflag) = 3;
-nocountopen:
- al = 0;
- goto pokelift;
-}
-
void DreamGenContext::liftnoise() {
STACK_CHECK;
_cmp(data.byte(kReallocation), 5);
@@ -21687,7 +21595,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
case addr_getblockofpixel: getblockofpixel(); break;
case addr_showrain: showrain(); break;
case addr_backobject: backobject(); break;
- case addr_liftsprite: liftsprite(); break;
case addr_liftnoise: liftnoise(); break;
case addr_random: random(); break;
case addr_steady: steady(); break;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index f7e19f2eec..d924c62c3c 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -653,7 +653,6 @@ public:
static const uint16 addr_steady = 0xc180;
static const uint16 addr_random = 0xc17c;
static const uint16 addr_liftnoise = 0xc178;
- static const uint16 addr_liftsprite = 0xc174;
static const uint16 addr_backobject = 0xc170;
static const uint16 addr_showrain = 0xc16c;
static const uint16 addr_getblockofpixel = 0xc168;
@@ -1455,7 +1454,7 @@ public:
void dealwithspecial();
//void eraseoldobs();
void dircom();
- void liftsprite();
+ //void liftsprite();
void dumpkeypad();
void dumpzoom();
void endgameseq();
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index d0fdf6fd42..3271b701d6 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -825,7 +825,7 @@ void DreamGenContext::backobject(Sprite* sprite) {
else if (objData->type == 4)
lockeddoorway();
else if (objData->type == 3)
- liftsprite();
+ liftsprite(sprite, objData);
else if (objData->type == 2)
doorway();
else if (objData->type == 1)
@@ -913,6 +913,80 @@ void DreamGenContext::steady(Sprite* sprite, ObjData* objData) {
sprite->b15 = b18;
}
+void DreamGenContext::turnpathonCPP(uint8 param) {
+ al = param;
+ push(es);
+ push(bx);
+ turnpathon();
+ bx = pop();
+ es = pop();
+}
+
+void DreamGenContext::turnpathoffCPP(uint8 param) {
+ al = param;
+ push(es);
+ push(bx);
+ turnpathoff();
+ bx = pop();
+ es = pop();
+}
+
+void DreamGenContext::liftsprite() {
+ Sprite *sprite = (Sprite*)es.ptr(bx, sizeof(Sprite));
+ ObjData *objData = (ObjData*)ds.ptr(di, 0);
+ liftsprite(sprite, objData);
+}
+
+void DreamGenContext::liftsprite(Sprite* sprite, ObjData* objData) {
+ uint8 liftFlag = data.byte(kLiftflag);
+ if (liftFlag == 0) { //liftclosed
+ turnpathoffCPP(data.byte(kLiftpath));
+
+ if (data.byte(kCounttoopen) != 0) {
+ _dec(data.byte(kCounttoopen));
+ if (data.byte(kCounttoopen) == 0)
+ data.byte(kLiftflag) = 3;
+ }
+ sprite->frame = 0;
+ sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ }
+ else if (liftFlag == 1) { //liftopen
+ turnpathonCPP(data.byte(kLiftpath));
+
+ if (data.byte(kCounttoclose) != 0) {
+ _dec(data.byte(kCounttoclose));
+ if (data.byte(kCounttoclose) == 0)
+ data.byte(kLiftflag) = 2;
+ }
+ sprite->frame = 12;
+ sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ }
+ else if (liftFlag == 3) { //openlift
+ if (sprite->frame == 12) {
+ data.byte(kLiftflag) = 1;
+ return;
+ }
+ ++sprite->frame;
+ if (sprite->frame == 1) {
+ al = 2;
+ liftnoise();
+ }
+ sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ } else { //closeLift
+ assert(liftFlag == 2);
+ if (sprite->frame == 0) {
+ data.byte(kLiftflag) = 0;
+ return;
+ }
+ --sprite->frame;
+ if (sprite->frame == 11) {
+ al = 3;
+ liftnoise();
+ }
+ sprite->b15 = objData->b17 = objData->b18[sprite->frame];
+ }
+}
+
void DreamGenContext::modifychar() {
al = engine->modifyChar(al);
}
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index d840a8c8fa..461cef7419 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -31,6 +31,10 @@
void steady(Sprite* sprite, ObjData* objData);
void dodoor();
void dodoor(Sprite* sprite, ObjData* objData);
+ void liftsprite();
+ void liftsprite(Sprite* sprite, ObjData* objData);
+ void turnpathonCPP(uint8 param);
+ void turnpathoffCPP(uint8 param);
void modifychar();
void lockmon();