DREAMWEB: Port 'usepipe' to C++

This commit is contained in:
Filippos Karapetis 2011-12-12 23:51:40 +02:00
parent 27f5661dfc
commit ef94b2d15a
5 changed files with 29 additions and 48 deletions

View file

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

View file

@ -3590,53 +3590,6 @@ void DreamGenContext::notHeldError() {
putBackObStuff();
}
void DreamGenContext::usePipe() {
STACK_CHECK;
_cmp(data.byte(kWithobject), 255);
if (!flags.z())
goto pipewith;
withWhat();
return;
pipewith:
al = data.byte(kWithobject);
ah = data.byte(kWithtype);
cl = 'C';
ch = 'U';
dl = 'P';
dh = 'E';
compare();
if (flags.z())
goto fillcup;
al = data.byte(kWithobject);
ah = data.byte(kWithtype);
cl = 'C';
ch = 'U';
dl = 'P';
dh = 'F';
compare();
if (flags.z())
goto alreadyfull;
cx = 300;
al = 14;
showPuzText();
putBackObStuff();
return;
fillcup:
cx = 300;
al = 36;
showPuzText();
putBackObStuff();
al = data.byte(kWithobject);
getExAd();
es.byte(bx+15) = 'F'-'A';
return;
alreadyfull:
cx = 300;
al = 35;
showPuzText();
putBackObStuff();
}
void DreamGenContext::useOpenBox() {
STACK_CHECK;
_cmp(data.byte(kWithobject), 255);

View file

@ -511,7 +511,6 @@ public:
void useAltar();
void startTalk();
void getAnyAd();
void usePipe();
void reminders();
void runTap();
void dumpDiaryKeys();

View file

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

View file

@ -1314,4 +1314,31 @@ void DreamGenContext::useSLab() {
data.byte(kGetback) = 1;
}
void DreamGenContext::usePipe() {
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), cupEmpty)) {
// Fill cup
showPuzText(36, 300);
putBackObStuff();
DynObject *exObject = getExAd(data.byte(kWithobject));
exObject->id[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup)
return;
} else if (compare(data.byte(kWithobject), data.byte(kWithtype), cupFull)) {
// Already full
showPuzText(14, 300);
showPuzText();
putBackObStuff();
} else {
showPuzText(35, 300);
putBackObStuff();
}
}
} // End of namespace DreamGen