aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/use.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dreamweb/use.cpp')
-rw-r--r--engines/dreamweb/use.cpp1659
1 files changed, 1540 insertions, 119 deletions
diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp
index d6648b556e..e59843539f 100644
--- a/engines/dreamweb/use.cpp
+++ b/engines/dreamweb/use.cpp
@@ -22,157 +22,1578 @@
#include "dreamweb/dreamweb.h"
-namespace DreamGen {
+namespace DreamWeb {
-typedef void (DreamGenContext::*UseCallback)(void);
+typedef void (DreamWebEngine::*UseCallback)(void);
+// Note: The callback pointer has been placed before the
+// ID to keep MSVC happy (otherwise, it throws warnings
+// that alignment of a member was sensitive to packing)
struct UseListEntry {
- uint8 id[5]; // 0-terminal because it is easier syntatically to initialize the array
UseCallback callback;
+ const char *id;
};
-void DreamGenContext::useroutine() {
+void DreamWebEngine::useRoutine() {
static const UseListEntry kUseList[] = {
- { "NETW", &DreamGenContext::usemon },
- { "ELVA", &DreamGenContext::useelevator1 },
- { "ELVB", &DreamGenContext::useelevator2 },
- { "ELVC", &DreamGenContext::useelevator3 },
- { "ELVE", &DreamGenContext::useelevator4 },
- { "ELVF", &DreamGenContext::useelevator5 },
- { "CGAT", &DreamGenContext::usechurchgate },
- { "REMO", &DreamGenContext::usestereo },
- { "BUTA", &DreamGenContext::usebuttona },
- { "CBOX", &DreamGenContext::usewinch },
- { "LITE", &DreamGenContext::uselighter },
- { "PLAT", &DreamGenContext::useplate },
- { "LIFT", &DreamGenContext::usecontrol },
- { "WIRE", &DreamGenContext::usewire },
- { "HNDL", &DreamGenContext::usehandle },
- { "HACH", &DreamGenContext::usehatch },
- { "DOOR", &DreamGenContext::useelvdoor },
- { "CSHR", &DreamGenContext::usecashcard },
- { "GUNA", &DreamGenContext::usegun },
- { "CRAA", &DreamGenContext::usecardreader1 },
- { "CRBB", &DreamGenContext::usecardreader2 },
- { "CRCC", &DreamGenContext::usecardreader3 },
- { "SEAT", &DreamGenContext::sitdowninbar },
- { "MENU", &DreamGenContext::usemenu },
- { "COOK", &DreamGenContext::usecooker },
- { "ELCA", &DreamGenContext::callhotellift },
- { "EDCA", &DreamGenContext::calledenslift },
- { "DDCA", &DreamGenContext::calledensdlift },
- { "ALTR", &DreamGenContext::usealtar },
- { "LOKA", &DreamGenContext::openhoteldoor },
- { "LOKB", &DreamGenContext::openhoteldoor2 },
- { "ENTA", &DreamGenContext::openlouis },
- { "ENTB", &DreamGenContext::openryan },
- { "ENTE", &DreamGenContext::openpoolboss },
- { "ENTC", &DreamGenContext::openyourneighbour },
- { "ENTD", &DreamGenContext::openeden },
- { "ENTH", &DreamGenContext::opensarters },
- { "WWAT", &DreamGenContext::wearwatch },
- { "POOL", &DreamGenContext::usepoolreader },
- { "WSHD", &DreamGenContext::wearshades },
- { "GRAF", &DreamGenContext::grafittidoor },
- { "TRAP", &DreamGenContext::trapdoor },
- { "CDPE", &DreamGenContext::edenscdplayer },
- { "DLOK", &DreamGenContext::opentvdoor },
- { "HOLE", &DreamGenContext::usehole },
- { "DRYR", &DreamGenContext::usedryer },
- { "HOLY", &DreamGenContext::usechurchhole },
- { "WALL", &DreamGenContext::usewall },
- { "BOOK", &DreamGenContext::usediary },
- { "AXED", &DreamGenContext::useaxe },
- { "SHLD", &DreamGenContext::useshield },
- { "BCNY", &DreamGenContext::userailing },
- { "LIDC", &DreamGenContext::usecoveredbox },
- { "LIDU", &DreamGenContext::useclearbox },
- { "LIDO", &DreamGenContext::useopenbox },
- { "PIPE", &DreamGenContext::usepipe },
- { "BALC", &DreamGenContext::usebalcony },
- { "WIND", &DreamGenContext::usewindow },
- { "PAPR", &DreamGenContext::viewfolder },
- { "UWTA", &DreamGenContext::usetrainer },
- { "UWTB", &DreamGenContext::usetrainer },
- { "STAT", &DreamGenContext::entersymbol },
- { "TLID", &DreamGenContext::opentomb },
- { "SLAB", &DreamGenContext::useslab },
- { "CART", &DreamGenContext::usecart },
- { "FCAR", &DreamGenContext::usefullcart },
- { "SLBA", &DreamGenContext::slabdoora },
- { "SLBB", &DreamGenContext::slabdoorb },
- { "SLBC", &DreamGenContext::slabdoorc },
- { "SLBD", &DreamGenContext::slabdoord },
- { "SLBE", &DreamGenContext::slabdoore },
- { "SLBF", &DreamGenContext::slabdoorf },
- { "PLIN", &DreamGenContext::useplinth },
- { "LADD", &DreamGenContext::useladder },
- { "LADB", &DreamGenContext::useladderb },
- { "GUMA", &DreamGenContext::chewy },
- { "SQEE", &DreamGenContext::wheelsound },
- { "TAPP", &DreamGenContext::runtap },
- { "GUIT", &DreamGenContext::playguitar },
- { "CONT", &DreamGenContext::hotelcontrol },
- { "BELL", &DreamGenContext::hotelbell },
+ { &DreamWebEngine::useMon, "NETW" },
+ { &DreamWebEngine::useElevator1, "ELVA" },
+ { &DreamWebEngine::useElevator2, "ELVB" },
+ { &DreamWebEngine::useElevator3, "ELVC" },
+ { &DreamWebEngine::useElevator4, "ELVE" },
+ { &DreamWebEngine::useElevator5, "ELVF" },
+ { &DreamWebEngine::useChurchGate, "CGAT" },
+ { &DreamWebEngine::useStereo, "REMO" },
+ { &DreamWebEngine::useButtonA, "BUTA" },
+ { &DreamWebEngine::useWinch, "CBOX" },
+ { &DreamWebEngine::useLighter, "LITE" },
+ { &DreamWebEngine::usePlate, "PLAT" },
+ { &DreamWebEngine::useControl, "LIFT" },
+ { &DreamWebEngine::useWire, "WIRE" },
+ { &DreamWebEngine::useHandle, "HNDL" },
+ { &DreamWebEngine::useHatch, "HACH" },
+ { &DreamWebEngine::useElvDoor, "DOOR" },
+ { &DreamWebEngine::useCashCard, "CSHR" },
+ { &DreamWebEngine::useGun, "GUNA" },
+ { &DreamWebEngine::useCardReader1, "CRAA" },
+ { &DreamWebEngine::useCardReader2, "CRBB" },
+ { &DreamWebEngine::useCardReader3, "CRCC" },
+ { &DreamWebEngine::sitDownInBar, "SEAT" },
+ { &DreamWebEngine::useMenu, "MENU" },
+ { &DreamWebEngine::useCooker, "COOK" },
+ { &DreamWebEngine::callHotelLift, "ELCA" },
+ { &DreamWebEngine::callEdensLift, "EDCA" },
+ { &DreamWebEngine::callEdensDLift, "DDCA" },
+ { &DreamWebEngine::useAltar, "ALTR" },
+ { &DreamWebEngine::openHotelDoor, "LOKA" },
+ { &DreamWebEngine::openHotelDoor2, "LOKB" },
+ { &DreamWebEngine::openLouis, "ENTA" },
+ { &DreamWebEngine::openRyan, "ENTB" },
+ { &DreamWebEngine::openPoolBoss, "ENTE" },
+ { &DreamWebEngine::openYourNeighbour, "ENTC" },
+ { &DreamWebEngine::openEden, "ENTD" },
+ { &DreamWebEngine::openSarters, "ENTH" },
+ { &DreamWebEngine::wearWatch, "WWAT" },
+ { &DreamWebEngine::usePoolReader, "POOL" },
+ { &DreamWebEngine::wearShades, "WSHD" },
+ { &DreamWebEngine::grafittiDoor, "GRAF" },
+ { &DreamWebEngine::trapDoor, "TRAP" },
+ { &DreamWebEngine::edensCDPlayer, "CDPE" },
+ { &DreamWebEngine::openTVDoor, "DLOK" },
+ { &DreamWebEngine::useHole, "HOLE" },
+ { &DreamWebEngine::useDryer, "DRYR" },
+ { &DreamWebEngine::useChurchHole, "HOLY" },
+ { &DreamWebEngine::useWall, "WALL" },
+ { &DreamWebEngine::useDiary, "BOOK" },
+ { &DreamWebEngine::useAxe, "AXED" },
+ { &DreamWebEngine::useShield, "SHLD" },
+ { &DreamWebEngine::useRailing, "BCNY" },
+ { &DreamWebEngine::useCoveredBox, "LIDC" },
+ { &DreamWebEngine::useClearBox, "LIDU" },
+ { &DreamWebEngine::useOpenBox, "LIDO" },
+ { &DreamWebEngine::usePipe, "PIPE" },
+ { &DreamWebEngine::useBalcony, "BALC" },
+ { &DreamWebEngine::useWindow, "WIND" },
+ { &DreamWebEngine::viewFolder, "PAPR" },
+ { &DreamWebEngine::useTrainer, "UWTA" },
+ { &DreamWebEngine::useTrainer, "UWTB" },
+ { &DreamWebEngine::enterSymbol, "STAT" },
+ { &DreamWebEngine::openTomb, "TLID" },
+ { &DreamWebEngine::useSlab, "SLAB" },
+ { &DreamWebEngine::useCart, "CART" },
+ { &DreamWebEngine::useFullCart, "FCAR" },
+ { &DreamWebEngine::slabDoorA, "SLBA" },
+ { &DreamWebEngine::slabDoorB, "SLBB" },
+ { &DreamWebEngine::slabDoorC, "SLBC" },
+ { &DreamWebEngine::slabDoorD, "SLBD" },
+ { &DreamWebEngine::slabDoorE, "SLBE" },
+ { &DreamWebEngine::slabDoorF, "SLBF" },
+ { &DreamWebEngine::usePlinth, "PLIN" },
+ { &DreamWebEngine::useLadder, "LADD" },
+ { &DreamWebEngine::useLadderB, "LADB" },
+ { &DreamWebEngine::chewy, "GUMA" },
+ { &DreamWebEngine::wheelSound, "SQEE" },
+ { &DreamWebEngine::runTap, "TAPP" },
+ { &DreamWebEngine::playGuitar, "GUIT" },
+ { &DreamWebEngine::hotelControl, "CONT" },
+ { &DreamWebEngine::hotelBell, "BELL" },
};
- if (data.byte(kReallocation) >= 50) {
- if (data.byte(kPointerpower) == 0)
+ if (_realLocation >= 50) {
+ if (_pointerPower == 0)
return;
- data.byte(kPointerpower) = 0;
+ _pointerPower = 0;
}
- getanyad();
- const uint8 *id = es.ptr(bx + 12, 4);
+ uint8 dummy;
+ void *obj = getAnyAd(&dummy, &dummy);
for (size_t i = 0; i < sizeof(kUseList)/sizeof(UseListEntry); ++i) {
const UseListEntry &entry = kUseList[i];
- if (('A' + id[0] == entry.id[0]) && ('A' + id[1] == entry.id[1]) && ('A' + id[2] == entry.id[2]) && ('A' + id[3] == entry.id[3])) {
+ if (objectMatches(obj, entry.id)) {
(this->*entry.callback)();
return;
}
}
- delpointer();
- uint8 *obText = getobtextstartCPP();
- if (findnextcolon(&obText) != 0) {
- if (findnextcolon(&obText) != 0) {
+ delPointer();
+ const uint8 *obText = getObTextStart();
+ if (findNextColon(&obText) != 0) {
+ if (findNextColon(&obText) != 0) {
if (*obText != 0) {
- usetext(obText);
- hangonp(400);
- putbackobstuff();
+ useText(obText);
+ hangOnP(400);
+ putBackObStuff();
return;
}
}
}
- createpanel();
- showpanel();
- showman();
- showexit();
- obicons();
- printmessage(33, 100, 63, 241, true);
- worktoscreenm();
- hangonp(50);
- putbackobstuff();
- data.byte(kCommandtype) = 255;
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+ obIcons();
+ printMessage(33, 100, 63, 241, true);
+ workToScreenM();
+ hangOnP(50);
+ putBackObStuff();
+ _commandType = 255;
}
-void DreamGenContext::usetext() {
- usetext(es.ptr(si, 0));
+void DreamWebEngine::useText(const uint8 *string) {
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+ obIcons();
+ printDirect(string, 36, 104, 241, true);
+ workToScreenM();
}
-void DreamGenContext::usetext(const uint8 *string) {
- createpanel();
- showpanel();
- showman();
- showexit();
- obicons();
- printdirect(string, 36, 104, 241, true);
- worktoscreenm();
+void DreamWebEngine::showFirstUse() {
+ const uint8 *obText = getObTextStart();
+ findNextColon(&obText);
+ findNextColon(&obText);
+ useText(obText);
+ hangOnP(400);
+}
+
+void DreamWebEngine::showSecondUse() {
+ const uint8 *obText = getObTextStart();
+ findNextColon(&obText);
+ findNextColon(&obText);
+ findNextColon(&obText);
+ useText(obText);
+ hangOnP(400);
+}
+
+void DreamWebEngine::edensCDPlayer() {
+ showFirstUse();
+ _vars._watchingTime = 18 * 2;
+ _vars._reelToWatch = 25;
+ _vars._endWatchReel = 42;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::hotelBell() {
+ playChannel1(12);
+ showFirstUse();
+ putBackObStuff();
+}
+
+void DreamWebEngine::playGuitar() {
+ playChannel1(14);
+ showFirstUse();
+ putBackObStuff();
+}
+
+void DreamWebEngine::useElevator1() {
+ showFirstUse();
+ selectLocation();
+ _getBack = 1;
+}
+
+void DreamWebEngine::useElevator2() {
+ showFirstUse();
+
+ if (_vars._location == 23) // In pool hall
+ _newLocation = 31;
+ else
+ _newLocation = 23;
+
+ _vars._countToClose = 20;
+ _vars._countToOpen = 0;
+ _vars._watchingTime = 80;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useElevator3() {
+ showFirstUse();
+ _vars._countToClose = 20;
+ _newLocation = 34;
+ _vars._reelToWatch = 46;
+ _vars._endWatchReel = 63;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._watchingTime = 80;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useElevator4() {
+ showFirstUse();
+ _vars._reelToWatch = 0;
+ _vars._endWatchReel = 11;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._countToClose = 20;
+ _vars._watchingTime = 80;
+ _getBack = 1;
+ _newLocation = 24;
+}
+
+void DreamWebEngine::useElevator5() {
+ placeSetObject(4);
+ removeSetObject(0);
+ _newLocation = 20;
+ _vars._watchingTime = 80;
+ _vars._liftFlag = 1;
+ _vars._countToClose = 8;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useHatch() {
+ showFirstUse();
+ _newLocation = 40;
+ _getBack = 1;
+}
+
+void DreamWebEngine::wheelSound() {
+ playChannel1(17);
+ showFirstUse();
+ putBackObStuff();
+}
+
+void DreamWebEngine::callHotelLift() {
+ playChannel1(12);
+ showFirstUse();
+ _vars._countToOpen = 8;
+ _getBack = 1;
+ _destination = 5;
+ _finalDest = 5;
+ autoSetWalk();
+ turnPathOn(4);
+}
+
+void DreamWebEngine::useShield() {
+ if (_realLocation != 20 || _vars._combatCount == 0) {
+ // Not in Sart room
+ showFirstUse();
+ putBackObStuff();
+ } else {
+ _vars._lastWeapon = 3;
+ showSecondUse();
+ _getBack = 1;
+ _vars._progressPoints++;
+ removeObFromInv();
+ }
+}
+
+void DreamWebEngine::useCoveredBox() {
+ _vars._progressPoints++;
+ showFirstUse();
+ _vars._watchingTime = 50;
+ _vars._reelToWatch = 41;
+ _vars._endWatchReel = 66;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useRailing() {
+ showFirstUse();
+ _vars._watchingTime = 80;
+ _vars._reelToWatch = 0;
+ _vars._endWatchReel = 30;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ _vars._manDead = 4;
+}
+
+void DreamWebEngine::wearWatch() {
+ if (_vars._watchOn == 1) {
+ // Already wearing watch
+ showSecondUse();
+ putBackObStuff();
+ } else {
+ showFirstUse();
+ _vars._watchOn = 1;
+ _getBack = 1;
+ uint8 dummy;
+ makeWorn((DynObject *)getAnyAd(&dummy, &dummy));
+ }
+}
+
+void DreamWebEngine::wearShades() {
+ if (_vars._shadesOn == 1) {
+ // Already wearing shades
+ showSecondUse();
+ putBackObStuff();
+ } else {
+ _vars._shadesOn = 1;
+ showFirstUse();
+ _getBack = 1;
+ uint8 dummy;
+ makeWorn((DynObject *)getAnyAd(&dummy, &dummy));
+ }
+}
+
+void DreamWebEngine::useChurchHole() {
+ showFirstUse();
+ _getBack = 1;
+ _vars._watchingTime = 28;
+ _vars._reelToWatch = 13;
+ _vars._endWatchReel = 26;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+}
+
+void DreamWebEngine::sitDownInBar() {
+ if (_vars._watchMode != 0xFF) {
+ // Sat down
+ showSecondUse();
+ putBackObStuff();
+ } else {
+ showFirstUse();
+ _vars._watchingTime = 50;
+ _vars._reelToWatch = 55;
+ _vars._endWatchReel = 71;
+ _vars._reelToHold = 73;
+ _vars._endOfHoldReel = 83;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::useDryer() {
+ playChannel1(12);
+ showFirstUse();
+ _getBack = 1;
+}
+
+void DreamWebEngine::useBalcony() {
+ showFirstUse();
+ turnPathOn(6);
+ turnPathOff(0);
+ turnPathOff(1);
+ turnPathOff(2);
+ turnPathOff(3);
+ turnPathOff(4);
+ turnPathOff(5);
+ _vars._progressPoints++;
+ _mansPath = 6;
+ _destination = 6;
+ _finalDest = 6;
+ findXYFromPath();
+ switchRyanOff();
+ _resetManXY = 1;
+ _vars._watchingTime = 30 * 2;
+ _vars._reelToWatch = 183;
+ _vars._endWatchReel = 212;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useWindow() {
+ if (_mansPath != 6) {
+ // Not on balcony
+ showSecondUse();
+ putBackObStuff();
+ } else {
+ _vars._progressPoints++;
+ showFirstUse();
+ _newLocation = 29;
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::trapDoor() {
+ _vars._progressPoints++;
+ showFirstUse();
+ switchRyanOff();
+ _vars._watchingTime = 20 * 2;
+ _vars._reelToWatch = 181;
+ _vars._endWatchReel = 197;
+ _newLocation = 26;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::callEdensLift() {
+ showFirstUse();
+ _vars._countToOpen = 8;
+ _getBack = 1;
+ turnPathOn(2);
+}
+
+void DreamWebEngine::callEdensDLift() {
+ if (_vars._liftFlag == 1) {
+ // Eden's D here
+ showSecondUse();
+ putBackObStuff();
+ } else {
+ showFirstUse();
+ _vars._countToOpen = 8;
+ _getBack = 1;
+ turnPathOn(2);
+ }
+}
+
+void DreamWebEngine::openYourNeighbour() {
+ enterCode(255, 255, 255, 255);
+ _getBack = 1;
+}
+
+void DreamWebEngine::openRyan() {
+ enterCode(5, 1, 0, 6);
+ _getBack = 1;
+}
+
+void DreamWebEngine::openPoolBoss() {
+ enterCode(5, 2, 2, 2);
+ _getBack = 1;
+}
+
+void DreamWebEngine::openEden() {
+ enterCode(2, 8, 6, 5);
+ _getBack = 1;
+}
+
+void DreamWebEngine::openSarters() {
+ enterCode(7, 8, 3, 3);
+ _getBack = 1;
+}
+
+void DreamWebEngine::openLouis() {
+ enterCode(5, 2, 3, 8);
+ _getBack = 1;
+}
+
+
+void DreamWebEngine::useWall() {
+ showFirstUse();
+
+ if (_mansPath != 3) {
+ _vars._watchingTime = 30*2;
+ _vars._reelToWatch = 2;
+ _vars._endWatchReel = 31;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ turnPathOn(3);
+ turnPathOn(4);
+ turnPathOff(0);
+ turnPathOff(1);
+ turnPathOff(2);
+ turnPathOff(5);
+ _mansPath = 3;
+ _finalDest = 3;
+ findXYFromPath();
+ _resetManXY = 1;
+ switchRyanOff();
+ } else {
+ // Go back over
+ _vars._watchingTime = 30 * 2;
+ _vars._reelToWatch = 34;
+ _vars._endWatchReel = 60;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ turnPathOff(3);
+ turnPathOff(4);
+ turnPathOn(0);
+ turnPathOn(1);
+ turnPathOn(2);
+ turnPathOn(5);
+ _mansPath = 5;
+ _finalDest = 5;
+ findXYFromPath();
+ _resetManXY = 1;
+ switchRyanOff();
+ }
+}
+
+void DreamWebEngine::useLadder() {
+ showFirstUse();
+ _mapX = _mapX - 11;
+ findRoomInLoc();
+ _facing = 6;
+ _turnToFace = 6;
+ _mansPath = 0;
+ _destination = 0;
+ _finalDest = 0;
+ findXYFromPath();
+ _resetManXY = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useLadderB() {
+ showFirstUse();
+ _mapX = _mapX + 11;
+ findRoomInLoc();
+ _facing = 2;
+ _turnToFace = 2;
+ _mansPath = 1;
+ _destination = 1;
+ _finalDest = 1;
+ findXYFromPath();
+ _resetManXY = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::slabDoorA() {
+ showFirstUse();
+ _getBack = 1;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._reelToWatch = 13;
+ if (_vars._dreamNumber != 3) {
+ // Wrong
+ _vars._watchingTime = 40;
+ _vars._endWatchReel = 34;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ } else {
+ _vars._progressPoints++;
+ _vars._watchingTime = 60;
+ _vars._endWatchReel = 42;
+ _newLocation = 47;
+ }
+}
+
+void DreamWebEngine::slabDoorB() {
+ if (_vars._dreamNumber != 1) {
+ // Wrong
+ showFirstUse();
+ _getBack = 1;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._reelToWatch = 44;
+ _vars._watchingTime = 40;
+ _vars._endWatchReel = 63;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ } else {
+ if (!isRyanHolding("SHLD")) {
+ // No crystal
+ showPuzText(44, 200);
+ putBackObStuff();
+ } else {
+ // Got crystal
+ showFirstUse();
+ _vars._progressPoints++;
+ _getBack = 1;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._reelToWatch = 44;
+ _vars._watchingTime = 60;
+ _vars._endWatchReel = 71;
+ _newLocation = 47;
+ }
+ }
+}
+
+void DreamWebEngine::slabDoorC() {
+ showFirstUse();
+ _getBack = 1;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._reelToWatch = 108;
+ if (_vars._dreamNumber != 4) {
+ // Wrong
+ _vars._watchingTime = 40;
+ _vars._endWatchReel = 127;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ } else {
+ _vars._progressPoints++;
+ _vars._watchingTime = 60;
+ _vars._endWatchReel = 135;
+ _newLocation = 47;
+ }
+}
+
+void DreamWebEngine::slabDoorD() {
+ showFirstUse();
+ _getBack = 1;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._reelToWatch = 75;
+ if (_vars._dreamNumber != 0) {
+ // Wrong
+ _vars._watchingTime = 40;
+ _vars._endWatchReel = 94;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ } else {
+ _vars._progressPoints++;
+ _vars._watchingTime = 60;
+ _vars._endWatchReel = 102;
+ _newLocation = 47;
+ }
+}
+
+void DreamWebEngine::slabDoorE() {
+ showFirstUse();
+ _getBack = 1;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._reelToWatch = 141;
+ if (_vars._dreamNumber != 5) {
+ // Wrong
+ _vars._watchingTime = 40;
+ _vars._endWatchReel = 160;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ } else {
+ _vars._progressPoints++;
+ _vars._watchingTime = 60;
+ _vars._endWatchReel = 168;
+ _newLocation = 47;
+ }
+}
+
+void DreamWebEngine::slabDoorF() {
+ showFirstUse();
+ _getBack = 1;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._reelToWatch = 171;
+ if (_vars._dreamNumber != 2) {
+ // Wrong
+ _vars._watchingTime = 40;
+ _vars._endWatchReel = 189;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ } else {
+ _vars._progressPoints++;
+ _vars._watchingTime = 60;
+ _vars._endWatchReel = 197;
+ _newLocation = 47;
+ }
+}
+
+bool DreamWebEngine::defaultUseHandler(const char *id) {
+ if (_withObject == 255) {
+ withWhat();
+ return true; // event handled
+ }
+
+ if (!compare(_withObject, _withType, id)) {
+ // Wrong item
+ showPuzText(14, 300);
+ putBackObStuff();
+ return true; // event handled
+ }
+
+ return false; // continue with the original event
+}
+
+void DreamWebEngine::useChurchGate() {
+ if (defaultUseHandler("CUTT"))
+ return;
+
+ // Cut gate
+ showFirstUse();
+ _vars._watchingTime = 64 * 2;
+ _vars._reelToWatch = 4;
+ _vars._endWatchReel = 70;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ _vars._progressPoints++;
+ turnPathOn(3);
+ if (_vars._aideDead != 0)
+ turnPathOn(2); // Open church
+}
+
+void DreamWebEngine::useGun() {
+
+ if (_objectType != kExObjectType) {
+ // gun is not taken
+ showSecondUse();
+ putBackObStuff();
+
+ } else if (_realLocation == 22) {
+ // in pool room
+ showPuzText(34, 300);
+ _vars._lastWeapon = 1;
+ _vars._combatCount = 39;
+ _getBack = 1;
+ _vars._progressPoints++;
+
+ } else if (_realLocation == 25) {
+ // helicopter
+ showPuzText(34, 300);
+ _vars._lastWeapon = 1;
+ _vars._combatCount = 19;
+ _getBack = 1;
+ _vars._dreamNumber = 2;
+ _vars._roomAfterDream = 38;
+ _vars._sartainDead = 1;
+ _vars._progressPoints++;
+
+ } else if (_realLocation == 27) {
+ // in rock room
+ showPuzText(46, 300);
+ _pointerMode = 2;
+ _vars._rockstarDead = 1;
+ _vars._lastWeapon = 1;
+ _vars._newsItem = 1;
+ _getBack = 1;
+ _vars._roomAfterDream = 32;
+ _vars._dreamNumber = 0;
+ _vars._progressPoints++;
+
+ } else if (_realLocation == 8 && _mapX == 22 && _mapY == 40
+ && !isSetObOnMap(92) && _mansPath != 9) {
+ // by studio
+ _destination = 9;
+ _finalDest = 9;
+ autoSetWalk();
+ _vars._lastWeapon = 1;
+ _getBack = 1;
+ _vars._progressPoints++;
+
+ } else if (_realLocation == 6 && _mapX == 11 && _mapY == 20
+ && isSetObOnMap(5)) {
+ // sarters
+ _destination = 1;
+ _finalDest = 1;
+ autoSetWalk();
+ removeSetObject(5);
+ placeSetObject(6);
+ turnAnyPathOn(1, _roomNum - 1);
+ _vars._liftFlag = 1;
+ _vars._watchingTime = 40*2;
+ _vars._reelToWatch = 4;
+ _vars._endWatchReel = 43;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ _vars._progressPoints++;
+
+ } else if (_realLocation == 29) {
+ // aide
+ _getBack = 1;
+ resetLocation(13);
+ setLocation(12);
+ _destPos = 12;
+ _destination = 2;
+ _finalDest = 2;
+ autoSetWalk();
+ _vars._watchingTime = 164*2;
+ _vars._reelToWatch = 3;
+ _vars._endWatchReel = 164;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _vars._aideDead = 1;
+ _vars._dreamNumber = 3;
+ _vars._roomAfterDream = 33;
+ _vars._progressPoints++;
+
+ } else if (_realLocation == 23 && _mapX == 0 && _mapY == 50) {
+ // with boss
+ if (_mansPath != 5) {
+ _destination = 5;
+ _finalDest = 5;
+ autoSetWalk();
+ }
+ _vars._lastWeapon = 1;
+ _getBack = 1;
+
+ } else if (_realLocation == 8 && _mapX == 11 && _mapY == 10) {
+ // tv soldier
+ if (_mansPath != 2) {
+ _destination = 2;
+ _finalDest = 2;
+ autoSetWalk();
+ }
+ _vars._lastWeapon = 1;
+ _getBack = 1;
+
+ } else {
+ showFirstUse();
+ putBackObStuff();
+ }
+}
+
+void DreamWebEngine::useFullCart() {
+ _vars._progressPoints++;
+ turnAnyPathOn(2, _roomNum + 6);
+ _mansPath = 4;
+ _facing = 4;
+ _turnToFace = 4;
+ _finalDest = 4;
+ findXYFromPath();
+ _resetManXY = 1;
+ showFirstUse();
+ _vars._watchingTime = 72 * 2;
+ _vars._reelToWatch = 58;
+ _vars._endWatchReel = 142;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useClearBox() {
+ if (defaultUseHandler("RAIL"))
+ return;
+
+ // Open box
+ _vars._progressPoints++;
+ showFirstUse();
+ _vars._watchingTime = 80;
+ _vars._reelToWatch = 67;
+ _vars._endWatchReel = 105;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::openTVDoor() {
+ if (defaultUseHandler("ULOK"))
+ return;
+
+ // Key on TV
+ showFirstUse();
+ _vars._lockStatus = 0;
+ _getBack = 1;
+}
+
+void DreamWebEngine::usePlate() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (compare(_withObject, _withType, "SCRW")) {
+ // Unscrew plate
+ playChannel1(20);
+ showFirstUse();
+ placeSetObject(28);
+ placeSetObject(24);
+ removeSetObject(25);
+ placeFreeObject(0);
+ _vars._progressPoints++;
+ _getBack = 1;
+ } else if (compare(_withObject, _withType, "KNFE")) {
+ // Tried knife
+ showPuzText(54, 300);
+ putBackObStuff();
+ } else {
+ // Wrong item
+ showPuzText(14, 300);
+ putBackObStuff();
+ }
+}
+
+void DreamWebEngine::usePlinth() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (!compare(_withObject, _withType, "DKEY")) {
+ // Wrong key
+ showFirstUse();
+ putBackObStuff();
+ } else {
+ _vars._progressPoints++;
+ showSecondUse();
+ _vars._watchingTime = 220;
+ _vars._reelToWatch = 0;
+ _vars._endWatchReel = 104;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ _newLocation = _vars._roomAfterDream;
+ }
+}
+
+void DreamWebEngine::useElvDoor() {
+ if (defaultUseHandler("AXED"))
+ return;
+
+ // Axe on door
+ showPuzText(15, 300);
+ _vars._progressPoints++;
+ _vars._watchingTime = 46 * 2;
+ _vars._reelToWatch = 31;
+ _vars._endWatchReel = 77;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useObject() {
+ _withObject = 255;
+
+ if (_commandType != 229) {
+ _commandType = 229;
+ commandWithOb(51, _objectType, _command);
+ }
+
+ if (_mouseButton == _oldButton)
+ return; // nouse
+
+ if (_mouseButton & 1)
+ useRoutine();
+}
+
+void DreamWebEngine::useWinch() {
+ uint16 contentIndex = checkInside(40, 1);
+ if (contentIndex == kNumexobjects || !compare(contentIndex, kExObjectType, "FUSE")) {
+ // No winch
+ showFirstUse();
+ putBackObStuff();
+ return;
+ }
+
+ _vars._watchingTime = 217 * 2;
+ _vars._reelToWatch = 0;
+ _vars._endWatchReel = 217;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _destPos = 1;
+ _newLocation = 45;
+ _vars._dreamNumber = 1;
+ _vars._roomAfterDream = 44;
+ _vars._generalDead = 1;
+ _vars._newsItem = 2;
+ _getBack = 1;
+ _vars._progressPoints++;
+}
+
+void DreamWebEngine::useCart() {
+ if (defaultUseHandler("ROCK"))
+ return;
+
+ DynObject *exObject = getExAd(_withObject);
+ exObject->mapad[0] = 0;
+ removeSetObject(_command);
+ placeSetObject(_command + 1);
+ _vars._progressPoints++;
+ playChannel1(17);
+ showFirstUse();
+ _getBack = 1;
+}
+
+void DreamWebEngine::useTrainer() {
+ uint8 dummy;
+ DynObject *object = (DynObject *)getAnyAd(&dummy, &dummy);
+ if (object->mapad[0] != 4) {
+ notHeldError();
+ } else {
+ _vars._progressPoints++;
+ makeWorn(object);
+ showSecondUse();
+ putBackObStuff();
+ }
+}
+
+void DreamWebEngine::chewy() {
+ // Chewing a gum
+ showFirstUse();
+ uint8 dummy;
+ DynObject *object = (DynObject *)getAnyAd(&dummy, &dummy);
+ object->mapad[0] = 255;
+ _getBack = 1;
+}
+
+void DreamWebEngine::useHole() {
+ if (defaultUseHandler("HNDA"))
+ return;
+
+ showFirstUse();
+ removeSetObject(86);
+ DynObject *exObject = getExAd(_withObject);
+ exObject->mapad[0] = 255;
+ _vars._canMoveAltar = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::openHotelDoor() {
+ if (defaultUseHandler("KEYA"))
+ return;
+
+ playChannel1(16);
+ showFirstUse();
+ _vars._lockStatus = 0;
+ _getBack = 1;
+}
+
+void DreamWebEngine::openHotelDoor2() {
+ if (defaultUseHandler("KEYA"))
+ return;
+
+ playChannel1(16);
+ showFirstUse();
+ putBackObStuff();
+}
+
+void DreamWebEngine::grafittiDoor() {
+ if (defaultUseHandler("APEN"))
+ return;
+
+ showFirstUse();
+ putBackObStuff();
+}
+
+void DreamWebEngine::usePoolReader() {
+ if (defaultUseHandler("MEMB"))
+ return;
+
+ if (_vars._talkedToAttendant != 1) {
+ // Can't open pool
+ showSecondUse();
+ putBackObStuff();
+ } else {
+ playChannel1(17);
+ showFirstUse();
+ _vars._countToOpen = 6;
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::useCardReader1() {
+ if (defaultUseHandler("CSHR"))
+ return;
+
+ if (_vars._talkedToSparky == 0) {
+ // Not yet
+ showFirstUse();
+ putBackObStuff();
+ } else if (_vars._card1Money != 0) {
+ // No cash
+ showPuzText(17, 300);
+ putBackObStuff();
+ } else {
+ // Get cash
+ playChannel1(16);
+ showPuzText(18, 300);
+ _vars._progressPoints++;
+ _vars._card1Money = 12432;
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::useCardReader2() {
+ if (defaultUseHandler("CSHR"))
+ return;
+
+ if (_vars._talkedToBoss == 0) {
+ // Haven't talked to boss
+ showFirstUse();
+ putBackObStuff();
+ } else if (_vars._card1Money == 0) {
+ // No cash
+ showPuzText(20, 300);
+ putBackObStuff();
+ } else if (_vars._gunPassFlag == 2) {
+ // Already got new
+ showPuzText(22, 300);
+ putBackObStuff();
+ } else {
+ playChannel1(18);
+ showPuzText(19, 300);
+ placeSetObject(94);
+ _vars._gunPassFlag = 1;
+ _vars._card1Money -= 2000;
+ _vars._progressPoints++;
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::useCardReader3() {
+ if (defaultUseHandler("CSHR"))
+ return;
+
+ if (_vars._talkedToRecep == 0) {
+ // Haven't talked to receptionist
+ showFirstUse();
+ putBackObStuff();
+ } else if (_vars._cardPassFlag != 0) {
+ // Already used it
+ showPuzText(26, 300);
+ putBackObStuff();
+ } else {
+ playChannel1(16);
+ showPuzText(25, 300);
+ _vars._progressPoints++;
+ _vars._card1Money -= 8300;
+ _vars._cardPassFlag = 1;
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::useLighter() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (!compare(_withObject, _withType, "SMKE")) {
+ showFirstUse();
+ putBackObStuff();
+ } else {
+ showPuzText(9, 300);
+ DynObject *withObj = getExAd(_withObject);
+ withObj->mapad[0] = 255;
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::useWire() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (compare(_withObject, _withType, "KNFE")) {
+ removeSetObject(51);
+ placeSetObject(52);
+ showPuzText(11, 300);
+ _vars._progressPoints++;
+ _getBack = 1;
+ return;
+ }
+
+ if (compare(_withObject, _withType, "AXED")) {
+ showPuzText(16, 300);
+ putBackObStuff();
+ return;
+ }
+
+ showPuzText(14, 300);
+ putBackObStuff();
+}
+
+void DreamWebEngine::openTomb() {
+ _vars._progressPoints++;
+ showFirstUse();
+ _vars._watchingTime = 35 * 2;
+ _vars._reelToWatch = 1;
+ _vars._endWatchReel = 33;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+}
+
+void DreamWebEngine::hotelControl() {
+ if (_realLocation != 21 || _mapX != 33)
+ showSecondUse(); // Not right control
+ else
+ showFirstUse();
+
+ putBackObStuff();
+}
+
+void DreamWebEngine::useCooker() {
+ if (checkInside(_command, _objectType) == kNumexobjects)
+ showFirstUse();
+ else
+ showSecondUse(); // Food inside
+
+ putBackObStuff();
+}
+
+void DreamWebEngine::placeFreeObject(uint8 index) {
+ findOrMake(index, 0, 1);
+ getFreeAd(index)->mapad[0] = 0;
+}
+
+void DreamWebEngine::removeFreeObject(uint8 index) {
+ getFreeAd(index)->mapad[0] = 0xFF;
+}
+
+void DreamWebEngine::useControl() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (compare(_withObject, _withType, "KEYA")) { // Right key
+ playChannel1(16);
+ if (_vars._location == 21) { // Going down
+ showPuzText(3, 300);
+ _newLocation = 30;
+ } else {
+ showPuzText(0, 300);
+ _newLocation = 21;
+ }
+
+ _vars._countToClose = 8;
+ _vars._countToOpen = 0;
+ _vars._watchingTime = 80;
+ _getBack = 1;
+ return;
+ }
+
+ if (_realLocation == 21) {
+ if (compare(_withObject, _withType, "KNFE")) {
+ // Jimmy controls
+ placeSetObject(50);
+ placeSetObject(51);
+ placeSetObject(26);
+ placeSetObject(30);
+ removeSetObject(16);
+ removeSetObject(17);
+ playChannel1(14);
+ showPuzText(10, 300);
+ _vars._progressPoints++;
+ _getBack = 1;
+ } else if (compare(_withObject, _withType, "AXED")) {
+ // Axe on controls
+ showPuzText(16, 300);
+ _vars._progressPoints++;
+ putBackObStuff();
+ } else {
+ // Balls
+ showFirstUse();
+ putBackObStuff();
+ }
+ } else {
+ // Balls
+ showFirstUse();
+ putBackObStuff();
+ }
+}
+
+void DreamWebEngine::useSlab() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (!compare(_withObject, _withType, "JEWL")) {
+ showPuzText(14, 300);
+ putBackObStuff();
+ return;
+ }
+
+ DynObject *exObject = getExAd(_withObject);
+ exObject->mapad[0] = 0;
+
+ removeSetObject(_command);
+ placeSetObject(_command + 1);
+ if (_command + 1 == 54) {
+ // Last slab
+ turnPathOn(0);
+ _vars._watchingTime = 22;
+ _vars._reelToWatch = 35;
+ _vars._endWatchReel = 48;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ }
+
+ _vars._progressPoints++;
+ showFirstUse();
+ _getBack = 1;
+}
+
+void DreamWebEngine::usePipe() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (compare(_withObject, _withType, "CUPE")) {
+ // Fill cup
+ showPuzText(36, 300);
+ putBackObStuff();
+ DynObject *exObject = getExAd(_withObject);
+ exObject->objId[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup)
+ return;
+ } else if (compare(_withObject, _withType, "CUPF")) {
+ // Already full
+ showPuzText(35, 300);
+ putBackObStuff();
+ } else {
+ showPuzText(14, 300);
+ putBackObStuff();
+ }
+}
+
+void DreamWebEngine::useOpenBox() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (compare(_withObject, _withType, "CUPF")) {
+ // Destroy open box
+ _vars._progressPoints++;
+ showPuzText(37, 300);
+ DynObject *exObject = getExAd(_withObject);
+ exObject->objId[3] = 'E'-'A'; // CUPF (full cup) -> CUPE (empty cup)
+ _vars._watchingTime = 140;
+ _vars._reelToWatch = 105;
+ _vars._endWatchReel = 181;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ turnPathOn(4);
+ _getBack = 1;
+ return;
+ }
+
+ if (compare(_withObject, _withType, "CUPE")) {
+ // Open box wrong
+ showPuzText(38, 300);
+ putBackObStuff();
+ return;
+ }
+
+ showFirstUse();
+}
+
+void DreamWebEngine::runTap() {
+ if (_withObject == 255) {
+ withWhat();
+ return;
+ }
+
+ if (compare(_withObject, _withType, "CUPE")) {
+ // Fill cup from tap
+ DynObject *exObject = getExAd(_withObject);
+ exObject->objId[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup)
+ playChannel1(8);
+ showPuzText(57, 300);
+ putBackObStuff();
+ return;
+ }
+
+ if (compare(_withObject, _withType, "CUPF")) {
+ // Cup from tap full
+ showPuzText(58, 300);
+ putBackObStuff();
+ return;
+ }
+
+ showPuzText(56, 300);
+ putBackObStuff();
+}
+
+void DreamWebEngine::useAxe() {
+ if (_realLocation != 22) {
+ // Not in pool
+ showFirstUse();
+ return;
+ }
+
+ if (_mapY == 10) {
+ // Axe on door
+ showPuzText(15, 300);
+ _vars._progressPoints++;
+ _vars._watchingTime = 46*2;
+ _vars._reelToWatch = 31;
+ _vars._endWatchReel = 77;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ return;
+ }
+
+ showSecondUse();
+ _vars._progressPoints++;
+ _vars._lastWeapon = 2;
+ _getBack = 1;
+ removeObFromInv();
+}
+
+void DreamWebEngine::useHandle() {
+ SetObject *object = getSetAd(findSetObject("CUTW"));
+ if (object->mapad[0] == 255) {
+ // Wire not cut
+ showPuzText(12, 300);
+ } else {
+ // Wire has been cut
+ showPuzText(13, 300);
+ _newLocation = 22;
+ }
+
+ _getBack = 1;
+}
+
+void DreamWebEngine::useAltar() {
+ if (findExObject("CNDA") == 114 || findExObject("CNDB") == 114) {
+ // Things on altar
+ showFirstUse();
+ _getBack = 1;
+ return;
+ }
+
+ if (_vars._canMoveAltar == 1) {
+ // Move altar
+ _vars._progressPoints++;
+ showSecondUse();
+ _vars._watchingTime = 160;
+ _vars._reelToWatch = 81;
+ _vars._endWatchReel = 174;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ setupTimedUse(47, 32, 98, 52, 76);
+ _getBack = 1;
+ } else {
+ showPuzText(23, 300);
+ _getBack = 1;
+ }
+}
+
+void DreamWebEngine::withWhat() {
+ uint8 commandLine[64] = "OBJECT NAME ONE ";
+
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+
+ copyName(_objectType, _command, commandLine);
+ printMessage2(100, 21, 63, 200, false, 2);
+ uint16 x = _lastXPos + 5;
+ printDirect(commandLine, x, 21, 220, false);
+ printMessage2(_lastXPos + 5, 21, 63, 200, false, 3);
+
+ fillRyan();
+ _commandType = 255;
+ readMouse();
+ showPointer();
+ workToScreen();
+ delPointer();
+ _invOpen = 2;
+}
+
+void DreamWebEngine::notHeldError() {
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+ obIcons();
+ printMessage2(64, 100, 63, 200 + 1, true, 1);
+ workToScreenM();
+ hangOnP(50);
+ putBackObStuff();
+}
+
+void DreamWebEngine::useCashCard() {
+ getRidOfReels();
+ loadKeypad();
+ createPanel();
+ showPanel();
+ showExit();
+ showMan();
+ uint16 y = (!_foreignRelease) ? 120 : 120 - 3;
+ showFrame(_keypadGraphics, 114, y, 39, 0);
+ const uint8 *obText = getObTextStart();
+ findNextColon(&obText);
+ findNextColon(&obText);
+ y = 98;
+ printDirect(&obText, 36, &y, 36, 36 & 1);
+ char amountStr[10];
+ sprintf(amountStr, "%04d", _vars._card1Money / 10);
+ _charShift = 91 * 2 + 75;
+ printDirect((const uint8 *)amountStr, 160, 155, 240, 240 & 1);
+ sprintf(amountStr, "%02d", (_vars._card1Money % 10) * 10);
+ _charShift = 91 * 2 + 85;
+ printDirect((const uint8 *)amountStr, 187, 155, 240, 240 & 1);
+ _charShift = 0;
+ workToScreenM();
+ hangOnP(400);
+ _keypadGraphics.clear();
+ restoreReels();
+ putBackObStuff();
+}
+
+void DreamWebEngine::useStereo() {
+ // Handles the stereo in Ryan's apartment (accessible from the remote on
+ // the couch)
+
+ if (_vars._location != 0) {
+ showPuzText(4, 400);
+ putBackObStuff();
+ } else if (_mapX != 11) {
+ showPuzText(5, 400);
+ putBackObStuff();
+ } else if (checkInside(findSetObject("CDPL"), 1) == kNumexobjects) {
+ // No CD inside
+ showPuzText(6, 400);
+ putBackObStuff();
+ uint8 dummy;
+ DynObject *object = (DynObject *)getAnyAd(&dummy, &dummy);
+ object->turnedOn = 255;
+ } else {
+ // CD inside
+ uint8 dummy;
+ DynObject *object = (DynObject *)getAnyAd(&dummy, &dummy);
+ object->turnedOn ^= 1;
+ if (object->turnedOn != 255)
+ showPuzText(7, 400); // Stereo off
+ else
+ showPuzText(8, 400); // Stereo on
+
+ putBackObStuff();
+ }
+}
+
+uint16 DreamWebEngine::checkInside(uint16 command, uint16 type) {
+ for (uint16 index = 0; index < kNumexobjects; index++) {
+ DynObject *object = getExAd(index);
+ if (object->mapad[1] == command && object->mapad[0] == type)
+ return index;
+ }
+
+ return kNumexobjects;
+}
+
+void DreamWebEngine::showPuzText(uint16 command, uint16 count) {
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+ obIcons();
+ const uint8 *string = (const uint8 *)_puzzleText.getString(command);
+ printDirect(string, 36, 104, 241, 241 & 1);
+ workToScreenM();
+ hangOnP(count);
+}
+
+void DreamWebEngine::useButtonA() {
+ if (!isSetObOnMap(95)) {
+ showFirstUse();
+ turnAnyPathOn(0, _roomNum - 1);
+ removeSetObject(9);
+ placeSetObject(95);
+ _vars._watchingTime = 15 * 2;
+ _vars._reelToWatch = 71;
+ _vars._endWatchReel = 85;
+ _vars._watchSpeed = 1;
+ _vars._speedCount = 1;
+ _getBack = 1;
+ _vars._progressPoints++;
+ } else {
+ // Done this bit
+ showSecondUse();
+ putBackObStuff();
+ }
}
-} /*namespace dreamgen */
+} // End of namespace DreamWeb