mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-20 17:03:05 +00:00
DREAMWEB: Port 'usecontrol' to C++
This commit is contained in:
parent
28be34a05a
commit
47c4b2b7de
@ -782,6 +782,7 @@ generator = cpp(context, "DreamGen", blacklist = [
|
||||
'usechurchgate',
|
||||
'usechurchhole',
|
||||
'useclearbox',
|
||||
'usecontrol',
|
||||
'usecooker',
|
||||
'usecoveredbox',
|
||||
'usediary',
|
||||
|
@ -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';
|
||||
|
@ -593,7 +593,6 @@ public:
|
||||
void updateSymbolBot();
|
||||
void findPuzText();
|
||||
void swapWithInv();
|
||||
void useControl();
|
||||
void adjustRight();
|
||||
void transferToEx();
|
||||
void updateSymbolTop();
|
||||
|
@ -349,6 +349,7 @@
|
||||
void usePoolReader();
|
||||
void useCooker();
|
||||
void useWire();
|
||||
void useControl();
|
||||
bool defaultUseHandler(const char *id);
|
||||
void openTVDoor();
|
||||
void wearWatch();
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user