mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-07 11:27:44 +00:00
DREAMWEB: Port 'useopened' to C++
This commit is contained in:
parent
e322d6257d
commit
0fff97b4b0
@ -919,6 +919,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'usemon',
|
||||
'useobject',
|
||||
'useopenbox',
|
||||
'useopened',
|
||||
'usepipe',
|
||||
'useplate',
|
||||
'useplinth',
|
||||
|
@ -527,100 +527,6 @@ findopenp1:
|
||||
_add(bx, (0+(228*13)));
|
||||
}
|
||||
|
||||
void DreamGenContext::useOpened() {
|
||||
STACK_CHECK;
|
||||
_cmp(data.byte(kOpenedob), 255);
|
||||
if (flags.z())
|
||||
return /* (cannotuseopen) */;
|
||||
_cmp(data.byte(kPickup), 0);
|
||||
if (!flags.z())
|
||||
goto notout2;
|
||||
outOfOpen();
|
||||
return;
|
||||
notout2:
|
||||
findOpenPos();
|
||||
ax = es.word(bx);
|
||||
_cmp(al, 255);
|
||||
if (flags.z())
|
||||
goto canplace3;
|
||||
swapWithOpen();
|
||||
return;
|
||||
canplace3:
|
||||
_cmp(data.byte(kPickup), 1);
|
||||
if (flags.z())
|
||||
goto intoopen;
|
||||
blank();
|
||||
return;
|
||||
intoopen:
|
||||
al = data.byte(kItemframe);
|
||||
ah = data.byte(kObjecttype);
|
||||
_cmp(ax, data.word(kOldsubject));
|
||||
if (!flags.z())
|
||||
goto difsub2;
|
||||
_cmp(data.byte(kCommandtype), 227);
|
||||
if (flags.z())
|
||||
goto alreadyplc2;
|
||||
data.byte(kCommandtype) = 227;
|
||||
difsub2:
|
||||
data.word(kOldsubject) = ax;
|
||||
bx = ax;
|
||||
al = 35;
|
||||
commandWithOb();
|
||||
alreadyplc2:
|
||||
ax = data.word(kMousebutton);
|
||||
_cmp(ax, data.word(kOldbutton));
|
||||
if (flags.z())
|
||||
return /* (notletgo3) */;
|
||||
_cmp(ax, 1);
|
||||
if (flags.z())
|
||||
goto doplace2;
|
||||
return;
|
||||
doplace2:
|
||||
getEitherAd();
|
||||
isItWorn();
|
||||
if (!flags.z())
|
||||
goto notworntoopen;
|
||||
wornError();
|
||||
return;
|
||||
notworntoopen:
|
||||
delPointer();
|
||||
al = data.byte(kItemframe);
|
||||
_cmp(al, data.byte(kOpenedob));
|
||||
if (!flags.z())
|
||||
goto isntsame;
|
||||
al = data.byte(kObjecttype);
|
||||
_cmp(al, data.byte(kOpenedtype));
|
||||
if (!flags.z())
|
||||
goto isntsame;
|
||||
errorMessage1();
|
||||
return;
|
||||
isntsame:
|
||||
checkObjectSize();
|
||||
_cmp(al, 0);
|
||||
if (flags.z())
|
||||
goto sizeok1;
|
||||
return;
|
||||
sizeok1:
|
||||
data.byte(kPickup) = 0;
|
||||
al = data.byte(kItemframe);
|
||||
getEitherAd();
|
||||
al = data.byte(kOpenedtype);
|
||||
es.byte(bx+2) = al;
|
||||
al = data.byte(kOpenedob);
|
||||
es.byte(bx+3) = al;
|
||||
al = data.byte(kLastinvpos);
|
||||
es.byte(bx+4) = al;
|
||||
al = data.byte(kReallocation);
|
||||
es.byte(bx+5) = al;
|
||||
fillOpen();
|
||||
underTextLine();
|
||||
readMouse();
|
||||
useOpened();
|
||||
showPointer();
|
||||
workToScreen();
|
||||
delPointer();
|
||||
}
|
||||
|
||||
void DreamGenContext::outOfOpen() {
|
||||
STACK_CHECK;
|
||||
_cmp(data.byte(kOpenedob), 255);
|
||||
|
@ -469,7 +469,6 @@ public:
|
||||
void findAllOpen();
|
||||
void fillOpen();
|
||||
void getEitherAd();
|
||||
void useOpened();
|
||||
void swapWithOpen();
|
||||
void dreamweb();
|
||||
void findPathOfPoint();
|
||||
|
@ -834,4 +834,72 @@ void DreamGenContext::reExFromInv() {
|
||||
data.byte(kPointermode) = 0;
|
||||
}
|
||||
|
||||
void DreamGenContext::useOpened() {
|
||||
if (data.byte(kOpenedob) == 255)
|
||||
return; // cannot use opened object
|
||||
|
||||
if (!data.byte(kPickup)) {
|
||||
outOfOpen();
|
||||
return;
|
||||
}
|
||||
|
||||
findOpenPos();
|
||||
ax = es.word(bx);
|
||||
|
||||
if (al != 255) {
|
||||
swapWithOpen();
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.byte(kPickup) != 1) {
|
||||
blank();
|
||||
return;
|
||||
}
|
||||
|
||||
uint16 subject = (data.byte(kObjecttype) << 8) | data.byte(kItemframe);
|
||||
if (subject == data.word(kOldsubject)) {
|
||||
if (data.byte(kCommandtype) != 227) {
|
||||
data.byte(kCommandtype) = 227;
|
||||
data.word(kOldsubject) = subject;
|
||||
commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe));
|
||||
}
|
||||
} else {
|
||||
data.word(kOldsubject) = subject;
|
||||
commandWithOb(35, data.byte(kObjecttype), data.byte(kItemframe));
|
||||
}
|
||||
|
||||
if (data.word(kMousebutton) == data.word(kOldbutton) || !(data.word(kMousebutton) & 1))
|
||||
return;
|
||||
|
||||
if (isItWorn(getEitherAdCPP())) {
|
||||
wornError();
|
||||
return;
|
||||
}
|
||||
|
||||
delPointer();
|
||||
|
||||
if (data.byte(kItemframe) == data.byte(kOpenedob) &&
|
||||
data.byte(kObjecttype) == data.byte(kOpenedtype)) {
|
||||
errorMessage1();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!checkObjectSizeCPP())
|
||||
return;
|
||||
|
||||
data.byte(kPickup) = 0;
|
||||
DynObject *object = getEitherAdCPP();
|
||||
object->mapad[0] = data.byte(kOpenedtype);
|
||||
object->mapad[1] = data.byte(kOpenedob);
|
||||
object->mapad[2] = data.byte(kLastinvpos);
|
||||
object->mapad[3] = data.byte(kReallocation);
|
||||
fillOpen();
|
||||
underTextLine();
|
||||
readMouse();
|
||||
useOpened();
|
||||
showPointer();
|
||||
workToScreenCPP();
|
||||
delPointer();
|
||||
}
|
||||
|
||||
} // End of namespace DreamGen
|
||||
|
@ -195,5 +195,6 @@
|
||||
void selectLocation();
|
||||
void reExFromInv();
|
||||
void locationPic();
|
||||
void useOpened();
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user