DREAMWEB: Port 'useopenbox' to C++

This commit is contained in:
Filippos Karapetis 2011-12-12 23:58:20 +02:00
parent ef94b2d15a
commit 9480b21840
5 changed files with 37 additions and 53 deletions

View File

@ -802,6 +802,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'usemenu',
'usemon',
'useobject',
'useopenbox',
'usepipe',
'useplate',
'useplinth',

View File

@ -3590,58 +3590,6 @@ void DreamGenContext::notHeldError() {
putBackObStuff();
}
void DreamGenContext::useOpenBox() {
STACK_CHECK;
_cmp(data.byte(kWithobject), 255);
if (!flags.z())
goto openboxwith;
withWhat();
return;
openboxwith:
al = data.byte(kWithobject);
ah = data.byte(kWithtype);
cl = 'C';
ch = 'U';
dl = 'P';
dh = 'F';
compare();
if (flags.z())
goto destoryopenbox;
al = data.byte(kWithobject);
ah = data.byte(kWithtype);
cl = 'C';
ch = 'U';
dl = 'P';
dh = 'E';
compare();
if (flags.z())
goto openboxwrong;
showFirstUse();
return;
destoryopenbox:
_inc(data.byte(kProgresspoints));
cx = 300;
al = 37;
showPuzText();
al = data.byte(kWithobject);
getExAd();
es.byte(bx+15) = 'E'-'A';
data.word(kWatchingtime) = 140;
data.word(kReeltowatch) = 105;
data.word(kEndwatchreel) = 181;
data.byte(kWatchspeed) = 1;
data.byte(kSpeedcount) = 1;
al = 4;
turnPathOn();
data.byte(kGetback) = 1;
return;
openboxwrong:
cx = 300;
al = 38;
showPuzText();
putBackObStuff();
}
void DreamGenContext::useAltar() {
STACK_CHECK;
al = 'C';

View File

@ -488,7 +488,6 @@ public:
void identifyOb();
void runEndSeq();
void useOpenBox();
void clearBuffers();
void getObTextStart();
void checkObjectSize();

View File

@ -333,6 +333,7 @@
void useLighter();
void useSLab();
void usePipe();
void useOpenBox();
void wheelSound();
void callHotelLift();
void useShield();

View File

@ -1341,4 +1341,39 @@ void DreamGenContext::usePipe() {
}
}
void DreamGenContext::useOpenBox() {
if (data.byte(kWithobject) == 255) {
withWhat();
return;
}
char cupEmpty[4] = { 'C', 'U', 'P', 'E' }; // TODO: convert to string with trailing zero
char cupFull[4] = { 'C', 'U', 'P', 'F' }; // TODO: convert to string with trailing zero
if (compare(data.byte(kWithobject), data.byte(kWithtype), cupFull)) {
// Destroy open box
data.byte(kProgresspoints)++;
showPuzText(37, 300);
DynObject *exObject = getExAd(data.byte(kWithobject));
exObject->id[3] = 'E'-'A'; // CUPF (full cup) -> CUPE (empty cup)
data.word(kWatchingtime) = 140;
data.word(kReeltowatch) = 105;
data.word(kEndwatchreel) = 181;
data.byte(kWatchspeed) = 1;
data.byte(kSpeedcount) = 1;
turnPathOn(4);
data.byte(kGetback) = 1;
return;
}
if (compare(data.byte(kWithobject), data.byte(kWithtype), cupEmpty)) {
// Open box wrong
showPuzText(38, 300);
putBackObStuff();
return;
}
showFirstUse();
}
} // End of namespace DreamGen