mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-01 08:23:15 +00:00
DREAMWEB: Blacklisted liftsprite
This commit is contained in:
parent
25528a56e8
commit
40e5e03e32
@ -33,6 +33,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'showframe',
|
||||
'spriteupdate',
|
||||
'dodoor',
|
||||
'liftsprite',
|
||||
'frameoutv',
|
||||
'modifychar',
|
||||
'lockmon'
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user