DREAMWEB: Convert useGun to C++

This commit is contained in:
Max Horn 2011-12-16 16:24:41 +01:00
parent 86c3c8b462
commit f878f0453a
5 changed files with 114 additions and 178 deletions

View File

@ -840,6 +840,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'useelevator5',
'useelvdoor',
'usefullcart',
'usegun',
'usehandle',
'usehole',
'usekey',

View File

@ -3026,183 +3026,6 @@ notfoundinside:
goto insideloop;
}
void DreamGenContext::useGun() {
STACK_CHECK;
_cmp(data.byte(kObjecttype), 4);
if (flags.z())
goto istakengun;
showSecondUse();
putBackObStuff();
return;
istakengun:
_cmp(data.byte(kReallocation), 22);
if (!flags.z())
goto notinpoolroom;
cx = 300;
al = 34;
showPuzText();
data.byte(kLastweapon) = 1;
data.byte(kCombatcount) = 39;
data.byte(kGetback) = 1;
_inc(data.byte(kProgresspoints));
return;
notinpoolroom:
_cmp(data.byte(kReallocation), 25);
if (!flags.z())
goto nothelicopter;
cx = 300;
al = 34;
showPuzText();
data.byte(kLastweapon) = 1;
data.byte(kCombatcount) = 19;
data.byte(kGetback) = 1;
data.byte(kDreamnumber) = 2;
data.byte(kRoomafterdream) = 38;
data.byte(kSartaindead) = 1;
_inc(data.byte(kProgresspoints));
return;
nothelicopter:
_cmp(data.byte(kReallocation), 27);
if (!flags.z())
goto notinrockroom;
cx = 300;
al = 46;
showPuzText();
data.byte(kPointermode) = 2;
data.byte(kRockstardead) = 1;
data.byte(kLastweapon) = 1;
data.byte(kNewsitem) = 1;
data.byte(kGetback) = 1;
data.byte(kRoomafterdream) = 32;
data.byte(kDreamnumber) = 0;
_inc(data.byte(kProgresspoints));
return;
notinrockroom:
_cmp(data.byte(kReallocation), 8);
if (!flags.z())
goto notbystudio;
_cmp(data.byte(kMapx), 22);
if (!flags.z())
goto notbystudio;
_cmp(data.byte(kMapy), 40);
if (!flags.z())
goto notbystudio;
al = 92;
isSetObOnMap();
if (flags.z())
goto notbystudio;
_cmp(data.byte(kManspath), 9);
if (flags.z())
goto notbystudio;
data.byte(kDestination) = 9;
data.byte(kFinaldest) = 9;
autoSetWalk();
data.byte(kLastweapon) = 1;
data.byte(kGetback) = 1;
_inc(data.byte(kProgresspoints));
return;
notbystudio:
_cmp(data.byte(kReallocation), 6);
if (!flags.z())
goto notsarters;
_cmp(data.byte(kMapx), 11);
if (!flags.z())
goto notsarters;
_cmp(data.byte(kMapy), 20);
if (!flags.z())
goto notsarters;
al = 5;
isSetObOnMap();
if (!flags.z())
goto notsarters;
data.byte(kDestination) = 1;
data.byte(kFinaldest) = 1;
autoSetWalk();
al = 5;
removeSetObject();
al = 6;
placeSetObject();
al = 1;
ah = data.byte(kRoomnum);
_dec(ah);
turnAnyPathOn();
data.byte(kLiftflag) = 1;
data.word(kWatchingtime) = 40*2;
data.word(kReeltowatch) = 4;
data.word(kEndwatchreel) = 43;
data.byte(kWatchspeed) = 1;
data.byte(kSpeedcount) = 1;
data.byte(kGetback) = 1;
_inc(data.byte(kProgresspoints));
return;
notsarters:
_cmp(data.byte(kReallocation), 29);
if (!flags.z())
goto notaide;
data.byte(kGetback) = 1;
al = 13;
resetLocation();
al = 12;
setLocation();
data.byte(kDestpos) = 12;
data.byte(kDestination) = 2;
data.byte(kFinaldest) = 2;
autoSetWalk();
data.word(kWatchingtime) = 164*2;
data.word(kReeltowatch) = 3;
data.word(kEndwatchreel) = 164;
data.byte(kWatchspeed) = 1;
data.byte(kSpeedcount) = 1;
data.byte(kAidedead) = 1;
data.byte(kDreamnumber) = 3;
data.byte(kRoomafterdream) = 33;
_inc(data.byte(kProgresspoints));
return;
notaide:
_cmp(data.byte(kReallocation), 23);
if (!flags.z())
goto notwithboss;
_cmp(data.byte(kMapx), 0);
if (!flags.z())
goto notwithboss;
_cmp(data.byte(kMapy), 50);
if (!flags.z())
goto notwithboss;
_cmp(data.byte(kManspath), 5);
if (flags.z())
goto pathokboss;
data.byte(kDestination) = 5;
data.byte(kFinaldest) = 5;
autoSetWalk();
pathokboss:
data.byte(kLastweapon) = 1;
data.byte(kGetback) = 1;
return;
notwithboss:
_cmp(data.byte(kReallocation), 8);
if (!flags.z())
goto nottvsoldier;
_cmp(data.byte(kMapx), 11);
if (!flags.z())
goto nottvsoldier;
_cmp(data.byte(kMapy), 10);
if (!flags.z())
goto nottvsoldier;
_cmp(data.byte(kManspath), 2);
if (flags.z())
goto pathoktv;
data.byte(kDestination) = 2;
data.byte(kFinaldest) = 2;
autoSetWalk();
pathoktv:
data.byte(kLastweapon) = 1;
data.byte(kGetback) = 1;
return;
nottvsoldier:
showFirstUse();
putBackObStuff();
}
void DreamGenContext::showDiaryKeys() {
STACK_CHECK;
_cmp(data.byte(kPresscount), 0);

View File

@ -539,7 +539,6 @@ public:
void read();
void searchForString();
void selectOpenOb();
void useGun();
void incRyanPage();
void clearChanges();
void searchForFiles();

View File

@ -519,5 +519,6 @@
void openOb();
void withWhat();
void notHeldError();
void useGun();
#endif

View File

@ -764,6 +764,118 @@ void DreamGenContext::useChurchGate() {
turnPathOn(2); // Open church
}
void DreamGenContext::useGun() {
if (data.byte(kObjecttype) != 4) {
// gun is not taken
showSecondUse();
putBackObStuff();
} else if (data.byte(kReallocation) == 22) {
// in pool room
showPuzText(34, 300);
data.byte(kLastweapon) = 1;
data.byte(kCombatcount) = 39;
data.byte(kGetback) = 1;
data.byte(kProgresspoints)++;
} else if (data.byte(kReallocation) == 25) {
// helicopter
showPuzText(34, 300);
data.byte(kLastweapon) = 1;
data.byte(kCombatcount) = 19;
data.byte(kGetback) = 1;
data.byte(kDreamnumber) = 2;
data.byte(kRoomafterdream) = 38;
data.byte(kSartaindead) = 1;
data.byte(kProgresspoints)++;
} else if (data.byte(kReallocation) == 27) {
// in rock room
showPuzText(46, 300);
data.byte(kPointermode) = 2;
data.byte(kRockstardead) = 1;
data.byte(kLastweapon) = 1;
data.byte(kNewsitem) = 1;
data.byte(kGetback) = 1;
data.byte(kRoomafterdream) = 32;
data.byte(kDreamnumber) = 0;
data.byte(kProgresspoints)++;
} else if (data.byte(kReallocation) == 8 && data.byte(kMapx) == 22 && data.byte(kMapy) == 40
&& !isSetObOnMap(92) && data.byte(kManspath) != 9) {
// by studio
data.byte(kDestination) = 9;
data.byte(kFinaldest) = 9;
autoSetWalk();
data.byte(kLastweapon) = 1;
data.byte(kGetback) = 1;
data.byte(kProgresspoints)++;
} else if (data.byte(kReallocation) == 6 && data.byte(kMapx) == 11 && data.byte(kMapy) == 20
&& isSetObOnMap(5)) {
// sarters
data.byte(kDestination) = 1;
data.byte(kFinaldest) = 1;
autoSetWalk();
removeSetObject(5);
placeSetObject(6);
turnAnyPathOn(1, data.byte(kRoomnum) - 1);
data.byte(kLiftflag) = 1;
data.word(kWatchingtime) = 40*2;
data.word(kReeltowatch) = 4;
data.word(kEndwatchreel) = 43;
data.byte(kWatchspeed) = 1;
data.byte(kSpeedcount) = 1;
data.byte(kGetback) = 1;
data.byte(kProgresspoints)++;
} else if (data.byte(kReallocation) == 29) {
// aide
data.byte(kGetback) = 1;
al = 13;
resetLocation();
setLocation(12);
data.byte(kDestpos) = 12;
data.byte(kDestination) = 2;
data.byte(kFinaldest) = 2;
autoSetWalk();
data.word(kWatchingtime) = 164*2;
data.word(kReeltowatch) = 3;
data.word(kEndwatchreel) = 164;
data.byte(kWatchspeed) = 1;
data.byte(kSpeedcount) = 1;
data.byte(kAidedead) = 1;
data.byte(kDreamnumber) = 3;
data.byte(kRoomafterdream) = 33;
data.byte(kProgresspoints)++;
} else if (data.byte(kReallocation) == 23 && data.byte(kMapx) == 0 && data.byte(kMapy) == 50) {
// with boss
if (data.byte(kManspath) != 5) {
data.byte(kDestination) = 5;
data.byte(kFinaldest) = 5;
autoSetWalk();
}
data.byte(kLastweapon) = 1;
data.byte(kGetback) = 1;
} else if (data.byte(kReallocation) == 8 && data.byte(kMapx) == 11 && data.byte(kMapy) == 10) {
// tv soldier
if (data.byte(kManspath) != 2) {
data.byte(kDestination) = 2;
data.byte(kFinaldest) = 2;
autoSetWalk();
}
data.byte(kLastweapon) = 1;
data.byte(kGetback) = 1;
} else {
showFirstUse();
putBackObStuff();
}
}
void DreamGenContext::useFullCart() {
data.byte(kProgresspoints)++;
turnAnyPathOn(2, data.byte(kRoomnum) + 6);