diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index f9863a661b7..4eafce7743f 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -802,6 +802,7 @@ generator = cpp(context, "DreamGen", blacklist = [ 'usemenu', 'usemon', 'useobject', + 'useopenbox', 'usepipe', 'useplate', 'useplinth', diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 0a0aa7a91c7..851cca77fe5 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -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'; diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index bbdd70e455a..7be848813ef 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -488,7 +488,6 @@ public: void identifyOb(); void runEndSeq(); - void useOpenBox(); void clearBuffers(); void getObTextStart(); void checkObjectSize(); diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index 2946327699d..18d90ff4993 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -333,6 +333,7 @@ void useLighter(); void useSLab(); void usePipe(); + void useOpenBox(); void wheelSound(); void callHotelLift(); void useShield(); diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp index b8d7b7ca751..0ede2f485a3 100644 --- a/engines/dreamweb/use.cpp +++ b/engines/dreamweb/use.cpp @@ -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