DREAMWEB: Port 'useopened' to C++
This commit is contained in:
parent
e322d6257d
commit
0fff97b4b0
5 changed files with 70 additions and 95 deletions
|
@ -919,6 +919,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||||
'usemon',
|
'usemon',
|
||||||
'useobject',
|
'useobject',
|
||||||
'useopenbox',
|
'useopenbox',
|
||||||
|
'useopened',
|
||||||
'usepipe',
|
'usepipe',
|
||||||
'useplate',
|
'useplate',
|
||||||
'useplinth',
|
'useplinth',
|
||||||
|
|
|
@ -527,100 +527,6 @@ findopenp1:
|
||||||
_add(bx, (0+(228*13)));
|
_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() {
|
void DreamGenContext::outOfOpen() {
|
||||||
STACK_CHECK;
|
STACK_CHECK;
|
||||||
_cmp(data.byte(kOpenedob), 255);
|
_cmp(data.byte(kOpenedob), 255);
|
||||||
|
|
|
@ -469,7 +469,6 @@ public:
|
||||||
void findAllOpen();
|
void findAllOpen();
|
||||||
void fillOpen();
|
void fillOpen();
|
||||||
void getEitherAd();
|
void getEitherAd();
|
||||||
void useOpened();
|
|
||||||
void swapWithOpen();
|
void swapWithOpen();
|
||||||
void dreamweb();
|
void dreamweb();
|
||||||
void findPathOfPoint();
|
void findPathOfPoint();
|
||||||
|
|
|
@ -834,4 +834,72 @@ void DreamGenContext::reExFromInv() {
|
||||||
data.byte(kPointermode) = 0;
|
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
|
} // End of namespace DreamGen
|
||||||
|
|
|
@ -195,5 +195,6 @@
|
||||||
void selectLocation();
|
void selectLocation();
|
||||||
void reExFromInv();
|
void reExFromInv();
|
||||||
void locationPic();
|
void locationPic();
|
||||||
|
void useOpened();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue