diff options
-rwxr-xr-x | devtools/tasmrecover/tasm-recover | 1 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 47 | ||||
-rw-r--r-- | engines/dreamweb/dreamgen.h | 1 | ||||
-rw-r--r-- | engines/dreamweb/stubs.h | 1 | ||||
-rw-r--r-- | engines/dreamweb/use.cpp | 27 |
5 files changed, 29 insertions, 48 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index 6efa0c03f5..f9863a661b 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -802,6 +802,7 @@ generator = cpp(context, "DreamGen", blacklist = [ 'usemenu', 'usemon', 'useobject', + 'usepipe', 'useplate', 'useplinth', 'usepoolreader', diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index a2d8c2c70f..0a0aa7a91c 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -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); diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index 6e8400b58e..bbdd70e455 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -511,7 +511,6 @@ public: void useAltar(); void startTalk(); void getAnyAd(); - void usePipe(); void reminders(); void runTap(); void dumpDiaryKeys(); diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index ff7c1106a6..2946327699 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -332,6 +332,7 @@ void useHatch(); void useLighter(); void useSLab(); + void usePipe(); void wheelSound(); void callHotelLift(); void useShield(); diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp index f6d6b2f494..b8d7b7ca75 100644 --- a/engines/dreamweb/use.cpp +++ b/engines/dreamweb/use.cpp @@ -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 |