mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-08 03:47:32 +00:00
DREAMWEB: Blacklisted liftsprite
This commit is contained in:
parent
25528a56e8
commit
40e5e03e32
@ -33,6 +33,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
|||||||
'showframe',
|
'showframe',
|
||||||
'spriteupdate',
|
'spriteupdate',
|
||||||
'dodoor',
|
'dodoor',
|
||||||
|
'liftsprite',
|
||||||
'frameoutv',
|
'frameoutv',
|
||||||
'modifychar',
|
'modifychar',
|
||||||
'lockmon'
|
'lockmon'
|
||||||
|
@ -2955,98 +2955,6 @@ steadyob:
|
|||||||
steady();
|
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() {
|
void DreamGenContext::liftnoise() {
|
||||||
STACK_CHECK;
|
STACK_CHECK;
|
||||||
_cmp(data.byte(kReallocation), 5);
|
_cmp(data.byte(kReallocation), 5);
|
||||||
@ -21687,7 +21595,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) {
|
|||||||
case addr_getblockofpixel: getblockofpixel(); break;
|
case addr_getblockofpixel: getblockofpixel(); break;
|
||||||
case addr_showrain: showrain(); break;
|
case addr_showrain: showrain(); break;
|
||||||
case addr_backobject: backobject(); break;
|
case addr_backobject: backobject(); break;
|
||||||
case addr_liftsprite: liftsprite(); break;
|
|
||||||
case addr_liftnoise: liftnoise(); break;
|
case addr_liftnoise: liftnoise(); break;
|
||||||
case addr_random: random(); break;
|
case addr_random: random(); break;
|
||||||
case addr_steady: steady(); break;
|
case addr_steady: steady(); break;
|
||||||
|
@ -653,7 +653,6 @@ public:
|
|||||||
static const uint16 addr_steady = 0xc180;
|
static const uint16 addr_steady = 0xc180;
|
||||||
static const uint16 addr_random = 0xc17c;
|
static const uint16 addr_random = 0xc17c;
|
||||||
static const uint16 addr_liftnoise = 0xc178;
|
static const uint16 addr_liftnoise = 0xc178;
|
||||||
static const uint16 addr_liftsprite = 0xc174;
|
|
||||||
static const uint16 addr_backobject = 0xc170;
|
static const uint16 addr_backobject = 0xc170;
|
||||||
static const uint16 addr_showrain = 0xc16c;
|
static const uint16 addr_showrain = 0xc16c;
|
||||||
static const uint16 addr_getblockofpixel = 0xc168;
|
static const uint16 addr_getblockofpixel = 0xc168;
|
||||||
@ -1455,7 +1454,7 @@ public:
|
|||||||
void dealwithspecial();
|
void dealwithspecial();
|
||||||
//void eraseoldobs();
|
//void eraseoldobs();
|
||||||
void dircom();
|
void dircom();
|
||||||
void liftsprite();
|
//void liftsprite();
|
||||||
void dumpkeypad();
|
void dumpkeypad();
|
||||||
void dumpzoom();
|
void dumpzoom();
|
||||||
void endgameseq();
|
void endgameseq();
|
||||||
|
@ -825,7 +825,7 @@ void DreamGenContext::backobject(Sprite* sprite) {
|
|||||||
else if (objData->type == 4)
|
else if (objData->type == 4)
|
||||||
lockeddoorway();
|
lockeddoorway();
|
||||||
else if (objData->type == 3)
|
else if (objData->type == 3)
|
||||||
liftsprite();
|
liftsprite(sprite, objData);
|
||||||
else if (objData->type == 2)
|
else if (objData->type == 2)
|
||||||
doorway();
|
doorway();
|
||||||
else if (objData->type == 1)
|
else if (objData->type == 1)
|
||||||
@ -913,6 +913,80 @@ void DreamGenContext::steady(Sprite* sprite, ObjData* objData) {
|
|||||||
sprite->b15 = b18;
|
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() {
|
void DreamGenContext::modifychar() {
|
||||||
al = engine->modifyChar(al);
|
al = engine->modifyChar(al);
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,10 @@
|
|||||||
void steady(Sprite* sprite, ObjData* objData);
|
void steady(Sprite* sprite, ObjData* objData);
|
||||||
void dodoor();
|
void dodoor();
|
||||||
void dodoor(Sprite* sprite, ObjData* objData);
|
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 modifychar();
|
||||||
void lockmon();
|
void lockmon();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user