DREAMWEB: Port 'usecontrol' to C++

This commit is contained in:
Filippos Karapetis 2011-12-12 23:30:08 +02:00
parent 28be34a05a
commit 47c4b2b7de
5 changed files with 59 additions and 97 deletions

View File

@ -782,6 +782,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'usechurchgate',
'usechurchhole',
'useclearbox',
'usecontrol',
'usecooker',
'usecoveredbox',
'usediary',

View File

@ -3955,102 +3955,6 @@ numberpoke3:
cs.byte(bx) = al;
}
void DreamGenContext::useControl() {
STACK_CHECK;
_cmp(data.byte(kWithobject), 255);
if (!flags.z())
goto gotcontrolwith;
withWhat();
return;
gotcontrolwith:
al = data.byte(kWithobject);
ah = data.byte(kWithtype);
cl = 'K';
ch = 'E';
dl = 'Y';
dh = 'A';
compare();
if (flags.z())
goto rightkey;
_cmp(data.byte(kReallocation), 21);
if (!flags.z())
goto balls;
al = data.byte(kWithobject);
ah = data.byte(kWithtype);
cl = 'K';
ch = 'N';
dl = 'F';
dh = 'E';
compare();
if (flags.z())
goto jimmycontrols;
al = data.byte(kWithobject);
ah = data.byte(kWithtype);
cl = 'A';
ch = 'X';
dl = 'E';
dh = 'D';
compare();
if (flags.z())
goto axeoncontrols;
balls:
showFirstUse();
putBackObStuff();
return;
rightkey:
al = 16;
playChannel1();
_cmp(data.byte(kLocation), 21);
if (flags.z())
goto goingdown;
cx = 300;
al = 0;
showPuzText();
data.byte(kNewlocation) = 21;
data.byte(kCounttoclose) = 8;
data.byte(kCounttoopen) = 0;
data.word(kWatchingtime) = 80;
data.byte(kGetback) = 1;
return;
goingdown:
cx = 300;
al = 3;
showPuzText();
data.byte(kNewlocation) = 30;
data.byte(kCounttoclose) = 8;
data.byte(kCounttoopen) = 0;
data.word(kWatchingtime) = 80;
data.byte(kGetback) = 1;
return;
jimmycontrols:
al = 50;
placeSetObject();
al = 51;
placeSetObject();
al = 26;
placeSetObject();
al = 30;
placeSetObject();
al = 16;
removeSetObject();
al = 17;
removeSetObject();
al = 14;
playChannel1();
cx = 300;
al = 10;
showPuzText();
_inc(data.byte(kProgresspoints));
data.byte(kGetback) = 1;
return;
axeoncontrols:
cx = 300;
al = 16;
showPuzText();
_inc(data.byte(kProgresspoints));
putBackObStuff();
}
void DreamGenContext::useHandle() {
STACK_CHECK;
al = 'C';

View File

@ -593,7 +593,6 @@ public:
void updateSymbolBot();
void findPuzText();
void swapWithInv();
void useControl();
void adjustRight();
void transferToEx();
void updateSymbolTop();

View File

@ -349,6 +349,7 @@
void usePoolReader();
void useCooker();
void useWire();
void useControl();
bool defaultUseHandler(const char *id);
void openTVDoor();
void wearWatch();

View File

@ -1224,4 +1224,61 @@ void DreamGenContext::useDiary() {
workToScreenM();
}
void DreamGenContext::useControl() {
if (data.byte(kWithobject) == 255) {
withWhat();
return;
}
char key[4] = { 'K', 'E', 'Y', 'A' }; // TODO: convert to string with trailing zero
if (compare(data.byte(kWithobject), data.byte(kWithtype), key)) { // Right key
playChannel1(16);
if (data.byte(kLocation) == 21) { // Going down
showPuzText(3, 300);
data.byte(kNewlocation) = 30;
} else {
showPuzText(0, 300);
data.byte(kNewlocation) = 21;
}
data.byte(kCounttoclose) = 8;
data.byte(kCounttoopen) = 0;
data.word(kWatchingtime) = 80;
data.byte(kGetback) = 1;
return;
}
if (data.byte(kReallocation) == 21) {
char knife[4] = { 'K', 'N', 'F', 'E' }; // TODO: convert to string with trailing zero
char axe[4] = { 'A', 'X', 'E', 'D' }; // TODO: convert to string with trailing zero
if (compare(data.byte(kWithobject), data.byte(kWithtype), knife)) {
// Jimmy controls
placeSetObject(50);
placeSetObject(51);
placeSetObject(26);
placeSetObject(30);
removeSetObject(16);
removeSetObject(17);
playChannel1(14);
showPuzText(10, 300);
data.byte(kProgresspoints)++;
data.byte(kGetback) = 1;
} else if (compare(data.byte(kWithobject), data.byte(kWithtype), axe)) {
// Axe on controls
showPuzText(16, 300);
data.byte(kProgresspoints)++;
putBackObStuff();
} else {
// Balls
showFirstUse();
putBackObStuff();
}
} else {
// Balls
showFirstUse();
putBackObStuff();
}
}
} // End of namespace DreamGen