diff options
-rw-r--r-- | engines/dreamweb/dreambase.h | 35 | ||||
-rw-r--r-- | engines/dreamweb/monitor.cpp | 12 | ||||
-rw-r--r-- | engines/dreamweb/object.cpp | 10 | ||||
-rw-r--r-- | engines/dreamweb/print.cpp | 11 | ||||
-rw-r--r-- | engines/dreamweb/stubs.cpp | 54 | ||||
-rw-r--r-- | engines/dreamweb/stubs.h | 95 | ||||
-rw-r--r-- | engines/dreamweb/use.cpp | 3 | ||||
-rw-r--r-- | engines/dreamweb/vgagrafx.cpp | 21 |
8 files changed, 162 insertions, 79 deletions
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h index a4e3adfe42..c17a15e34a 100644 --- a/engines/dreamweb/dreambase.h +++ b/engines/dreamweb/dreambase.h @@ -595,41 +595,6 @@ public: void errorMessage2(); void errorMessage3(); void decide(); - void screenUpdate(); - void mainScreen(); - void walkAndExamine(); - void autoLook(); - void dumpWatch(); - void watchCount(); - void afterNewRoom(); - void examineOb(bool examineAgain = true); - void walkIntoRoom(); - void doLook(); - void startup1(); - void quickQuit(); - void readOneBlock(); - void seeCommandTail(); - void quickQuit2(); - void width160(); - bool checkIfPerson(uint8 x, uint8 y); - bool checkIfFree(uint8 x, uint8 y); - bool checkIfEx(uint8 x, uint8 y); - void obName(uint8 command, uint8 commandType); - bool checkIfSet(uint8 x, uint8 y); - void readSetData(); - void look(); - void useKey(); - void inventory(); - void zoomOnOff(); - void initialInv(); - void allPointer(); - void madmanRun(); - void showGun(); - void triggerMessage(uint16 index); - void processTrigger(); - void identifyOb(); - void signOn(); - void searchForFiles(uint16 segment); // from talk.cpp void talk(); diff --git a/engines/dreamweb/monitor.cpp b/engines/dreamweb/monitor.cpp index 5e84c82962..0caf4b7c25 100644 --- a/engines/dreamweb/monitor.cpp +++ b/engines/dreamweb/monitor.cpp @@ -233,7 +233,7 @@ void DreamBase::input() { } void DreamGenContext::makeCaps() { - al = DreamBase::makeCaps(al); + al = makeCaps(al); } byte DreamBase::makeCaps(byte c) { @@ -312,6 +312,10 @@ void DreamBase::accessLightOff() { multiDump(74, 182, 12, 8); } +void DreamGenContext::randomAccess() { + randomAccess(cx); +} + void DreamBase::randomAccess(uint16 count) { for (uint16 i = 0; i < count; ++i) { vSync(); @@ -326,7 +330,7 @@ void DreamBase::randomAccess(uint16 count) { } void DreamGenContext::monMessage() { - DreamBase::monMessage(al); + monMessage(al); } void DreamBase::monMessage(uint8 index) { @@ -547,7 +551,7 @@ void DreamGenContext::read() { } } -void DreamBase::signOn() { +void DreamGenContext::signOn() { const char *name = parser(); int8 foundIndex = -1; @@ -605,7 +609,7 @@ void DreamBase::signOn() { } } -void DreamBase::searchForFiles(uint16 segment) { +void DreamGenContext::searchForFiles(uint16 segment) { const char *filesString = (const char *)getSegment(segment).ptr(kTextstart, 0); byte curChar; diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 124a4f908d..4fa21e7618 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -78,6 +78,10 @@ void DreamBase::makeWorn(DynObject *object) { object->id[1] = 'E'-'A'; } +void DreamGenContext::obToInv() { + obToInv(al, ah, di, bx); +} + void DreamBase::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { showFrame(engine->icons1(), x - 2, y - 1, 10, 0); if (index == 0xff) @@ -116,7 +120,7 @@ void DreamBase::obIcons() { showFrame(engine->icons2(), 260, 1, 1, 0); } -void DreamBase::examineOb(bool examineAgain) { +void DreamGenContext::examineOb(bool examineAgain) { data.byte(kPointermode) = 0; data.word(kTimecount) = 0; @@ -213,7 +217,7 @@ void DreamBase::examineOb(bool examineAgain) { data.byte(kOpenedob) = 255; } -void DreamBase::inventory() { +void DreamGenContext::inventory() { if (data.byte(kMandead) == 1 || data.word(kWatchingtime) != 0) { blank(); return; @@ -308,7 +312,7 @@ void DreamBase::openOb() { _openChangeSize = getOpenedSlotCount() * kItempicsize + kInventx; } -void DreamBase::identifyOb() { +void DreamGenContext::identifyOb() { if (data.word(kWatchingtime) != 0) { blank(); return; diff --git a/engines/dreamweb/print.cpp b/engines/dreamweb/print.cpp index d19a1931d2..0191aa8860 100644 --- a/engines/dreamweb/print.cpp +++ b/engines/dreamweb/print.cpp @@ -120,6 +120,15 @@ uint8 DreamBase::printSlow(const uint8 *string, uint16 x, uint16 y, uint8 maxWid } while (true); } +void DreamGenContext::printDirect() { + uint16 y = bx; + const uint8 *initialString = es.ptr(si, 0); + const uint8 *string = initialString; + al = DreamBase::printDirect(&string, di, &y, dl, (bool)(dl & 1)); + si += (string - initialString); + bx = y; +} + uint8 DreamBase::printDirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered) { return printDirect(&string, x, &y, maxWidth, centered); } @@ -207,7 +216,7 @@ uint16 DreamBase::waitFrames() { void DreamGenContext::monPrint() { uint16 originalBx = bx; const char *string = (const char *)es.ptr(bx, 0); - const char *nextString = DreamBase::monPrint(string); + const char *nextString = monPrint(string); bx = originalBx + (nextString - string); } diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index 759f608cb3..ca98337261 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -651,7 +651,7 @@ bool DreamBase::quitRequested() { return data.byte(kQuitrequested); } -void DreamBase::screenUpdate() { +void DreamGenContext::screenUpdate() { newPlace(); mainScreen(); if (quitRequested()) @@ -722,7 +722,7 @@ void DreamBase::startup() { atmospheres(); } -void DreamBase::startup1() { +void DreamGenContext::startup1() { clearPalette(); data.byte(kThroughdoor) = 0; @@ -789,15 +789,15 @@ void DreamBase::hangOnCurs(uint16 frameCount) { } } -void DreamBase::seeCommandTail() { +void DreamGenContext::seeCommandTail() { data.byte(kBrightness) = 1; } -void DreamBase::quickQuit() { +void DreamGenContext::quickQuit() { engine->quit(); } -void DreamBase::quickQuit2() { +void DreamGenContext::quickQuit2() { engine->quit(); } @@ -842,7 +842,7 @@ void DreamBase::putUnderTimed() { multiPut(_underTimedText, data.byte(kTimedx), data.byte(kTimedy), 240, kUnderTimedTextSizeY); } -void DreamBase::triggerMessage(uint16 index) { +void DreamGenContext::triggerMessage(uint16 index) { multiGet(mapStore(), 174, 153, 200, 63); uint16 offset = kTextstart + getSegment(data.word(kPuzzletext)).word(index * 2); const uint8 *string = getSegment(data.word(kPuzzletext)).ptr(offset, 0); @@ -856,7 +856,7 @@ void DreamBase::triggerMessage(uint16 index) { data.byte(kLasttrigger) = 0; } -void DreamBase::processTrigger() { +void DreamGenContext::processTrigger() { if (data.byte(kLasttrigger) == '1') { setLocation(8); triggerMessage(45); @@ -1145,7 +1145,7 @@ void DreamBase::commandOnly(uint8 command) { data.byte(kNewtextline) = 1; } -bool DreamBase::checkIfPerson(uint8 x, uint8 y) { +bool DreamGenContext::checkIfPerson(uint8 x, uint8 y) { Common::List<People>::iterator i; for (i = _peopleList.begin(); i != _peopleList.end(); ++i) { People &people = *i; @@ -1172,7 +1172,7 @@ bool DreamBase::checkIfPerson(uint8 x, uint8 y) { return false; } -bool DreamBase::checkIfFree(uint8 x, uint8 y) { +bool DreamGenContext::checkIfFree(uint8 x, uint8 y) { Common::List<ObjPos>::const_iterator i; for (i = _freeList.reverse_begin(); i != _freeList.end(); --i) { const ObjPos &pos = *i; @@ -1185,7 +1185,7 @@ bool DreamBase::checkIfFree(uint8 x, uint8 y) { return false; } -bool DreamBase::checkIfEx(uint8 x, uint8 y) { +bool DreamGenContext::checkIfEx(uint8 x, uint8 y) { Common::List<ObjPos>::const_iterator i; for (i = _exList.reverse_begin(); i != _exList.end(); --i) { const ObjPos &pos = *i; @@ -1393,7 +1393,7 @@ void DreamBase::getFlagUnderP(uint8 *flag, uint8 *flagEx) { data.byte(kLastflag) = *flag; } -void DreamBase::walkAndExamine() { +void DreamGenContext::walkAndExamine() { if (!finishedWalking()) return; data.byte(kCommandtype) = data.byte(kWalkexamtype); @@ -1403,7 +1403,7 @@ void DreamBase::walkAndExamine() { examineOb(); } -void DreamBase::obName(uint8 command, uint8 commandType) { +void DreamGenContext::obName(uint8 command, uint8 commandType) { if (data.byte(kReasseschanges) == 0) { if ((commandType == data.byte(kCommandtype)) && (command == data.byte(kCommand))) { if (data.byte(kWalkandexam) == 1) { @@ -1723,7 +1723,7 @@ void DreamBase::showIcon() { } } -bool DreamBase::checkIfSet(uint8 x, uint8 y) { +bool DreamGenContext::checkIfSet(uint8 x, uint8 y) { Common::List<ObjPos>::const_iterator i; for (i = _setList.reverse_begin(); i != _setList.end(); --i) { const ObjPos &pos = *i; @@ -1862,7 +1862,7 @@ void DreamBase::enterSymbol() { } } -void DreamBase::zoomOnOff() { +void DreamGenContext::zoomOnOff() { if (data.word(kWatchingtime) != 0 || data.byte(kPointermode) == 2) { blank(); return; @@ -1900,7 +1900,7 @@ void DreamBase::sortOutMap() { } } -void DreamBase::mainScreen() { +void DreamGenContext::mainScreen() { data.byte(kInmaparea) = 0; if (data.byte(kWatchon) == 1) { RectWithCallback<DreamGenContext> mainList[] = { @@ -1937,7 +1937,7 @@ void DreamBase::showWatch() { } } -void DreamBase::dumpWatch() { +void DreamGenContext::dumpWatch() { if (data.byte(kWatchdump) != 1) return; multiDump(256, 21, 40, 12); @@ -1965,7 +1965,7 @@ void DreamBase::showTime() { showFrame(charset, 267+5, 21, 91*3+20, 0); } -void DreamBase::watchCount() { +void DreamGenContext::watchCount() { if (data.byte(kWatchon) == 0) return; ++data.byte(kTimercount); @@ -2031,7 +2031,7 @@ void DreamBase::loadRoom() { getDimension(&mapXstart, &mapYstart, &mapXsize, &mapYsize); } -void DreamBase::readSetData() { +void DreamGenContext::readSetData() { data.word(kCharset1) = standardLoad("DREAMWEB.C00"); void *icons1Buffer = standardLoadCPP("DREAMWEB.G00"); @@ -2070,7 +2070,7 @@ void DreamBase::findRoomInLoc() { data.byte(kRoomnum) = roomNum; } -void DreamBase::autoLook() { +void DreamGenContext::autoLook() { if ((data.word(kMousex) != data.word(kOldx)) || (data.word(kMousey) != data.word(kOldy))) { data.word(kLookcounter) = 1000; return; @@ -2084,7 +2084,7 @@ void DreamBase::autoLook() { doLook(); } -void DreamBase::look() { +void DreamGenContext::look() { if (data.word(kWatchingtime) || (data.byte(kPointermode) == 2)) { blank(); return; @@ -2097,7 +2097,7 @@ void DreamBase::look() { doLook(); } -void DreamBase::doLook() { +void DreamGenContext::doLook() { createPanel(); showIcon(); underTextLine(); @@ -2721,7 +2721,7 @@ void DreamBase::pickupOb(uint8 command, uint8 pos) { transferToEx(command); } -void DreamBase::initialInv() { +void DreamGenContext::initialInv() { if (data.byte(kReallocation) != 24) return; @@ -2741,7 +2741,7 @@ void DreamBase::initialInv() { switchRyanOff(); } -void DreamBase::walkIntoRoom() { +void DreamGenContext::walkIntoRoom() { if (data.byte(kLocation) == 14 && data.byte(kMapx) == 22) { data.byte(kDestination) = 1; data.byte(kFinaldest) = 1; @@ -2785,7 +2785,7 @@ void DreamBase::blank() { } } -void DreamBase::allPointer() { +void DreamGenContext::allPointer() { readMouse(); showPointer(); dumpPointer(); @@ -3050,7 +3050,7 @@ void DreamBase::watchReel() { plotReel(reelPointer); } -void DreamBase::afterNewRoom() { +void DreamGenContext::afterNewRoom() { if (data.byte(kNowinnewroom) == 0) return; // notnew @@ -3081,7 +3081,7 @@ void DreamBase::afterNewRoom() { atmospheres(); } -void DreamBase::madmanRun() { +void DreamGenContext::madmanRun() { if (data.byte(kLocation) != 14 || data.byte(kMapx) != 22 || data.byte(kPointermode) != 2 || @@ -3147,7 +3147,7 @@ void DreamBase::decide() { data.byte(kTextlen) = 240; } -void DreamBase::showGun() { +void DreamGenContext::showGun() { data.byte(kAddtored) = 0; data.byte(kAddtogreen) = 0; data.byte(kAddtoblue) = 0; diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index c464163f68..7fa403bbb7 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -22,22 +22,101 @@ #ifndef DREAMWEB_STUBS_H #define DREAMWEB_STUBS_H - void monMessage(); - void monMessage(uint8 index) { - DreamBase::monMessage(index); + void screenUpdate(); + void startup1(); + void multiGet(); + void multiGet(uint8 *dst, uint16 x, uint16 y, uint8 width, uint8 height) { + DreamBase::multiGet(dst, x, y, width, height); + } + void multiPut(); + void multiPut(const uint8 *src, uint16 x, uint16 y, uint8 width, uint8 height) { + DreamBase::multiPut(src, x, y, width, height); + } + void multiDump(); + void multiDump(uint16 x, uint16 y, uint8 width, uint8 height) { + DreamBase::multiDump(x, y, width, height); + } + void quickQuit(); + void readOneBlock(); + void seeCommandTail(); + void quickQuit2(); + void printDirect(); + uint8 printDirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered) { + return DreamBase::printDirect(string, x, y, maxWidth, centered); + } + uint8 printDirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered) { + return DreamBase::printDirect(string, x, y, maxWidth, centered); + } + void width160(); + bool checkIfPerson(uint8 x, uint8 y); + bool checkIfFree(uint8 x, uint8 y); + bool checkIfEx(uint8 x, uint8 y); + DynObject *getFreeAd(uint8 index) { + return DreamBase::getFreeAd(index); + } + DynObject *getExAd(uint8 index) { + return DreamBase::getExAd(index); + } + void *getAnyAd(uint8 *slotSize, uint8 *slotCount) { + return DreamBase::getAnyAd(slotSize, slotCount); + } + SetObject *getSetAd(uint8 index) { + return DreamBase::getSetAd(index); + } + void walkAndExamine(); + void obName(uint8 command, uint8 commandType); + + bool checkIfSet(uint8 x, uint8 y); + void obToInv(); + void obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { + DreamBase::obToInv(index, flag, x, y); + } + void useRoutine(); + void examineOb(bool examineAgain = true); + void dumpWatch(); + void watchCount(); + void readSetData(); + void useMon(); + void makeCaps(); + byte makeCaps(byte c) { + return DreamBase::makeCaps(c); } void monPrint(); const char *monPrint(const char *string) { return DreamBase::monPrint(string); } - void useRoutine(); + void randomAccess(); + void randomAccess(uint16 count) { + DreamBase::randomAccess(count); + } + void monMessage(); + void monMessage(uint8 index) { + DreamBase::monMessage(index); + } + void look(); + void autoLook(); + void doLook(); + void useKey(); void useObject(); - void makeCaps(); - void useMon(); - void selectOb(); + void singleKey(uint8 key, uint16 x, uint16 y); + void inventory(); + void mainScreen(); + void zoomOnOff(); + void initialInv(); + void walkIntoRoom(); + void allPointer(); + void afterNewRoom(); + void madmanRun(); + void showGun(); + void triggerMessage(uint16 index); + void processTrigger(); bool execCommand(); + void identifyOb(); + void selectOb(); + void getKeyAndLogo(); + void signOn(); + void searchForFiles(uint16 segment); void read(); void dirCom(); - void getKeyAndLogo(); #endif diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp index 0f31c766b5..25ed8d50e5 100644 --- a/engines/dreamweb/use.cpp +++ b/engines/dreamweb/use.cpp @@ -1494,7 +1494,7 @@ void DreamBase::useAxe() { removeObFromInv(); } -void DreamBase::useKey() { +void DreamGenContext::useKey() { switch(data.byte(kLocation)) { case 5: case 30: @@ -1512,6 +1512,7 @@ void DreamBase::useKey() { if (data.byte(kMapx) == 11 && data.byte(kMapy) == 10) { showPuzText(3, 300); data.byte(kNewlocation) = 30; + al = 2; fadeScreenDown(); showFirstUse(); putBackObStuff(); diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp index 06743ed3bb..ecb295a353 100644 --- a/engines/dreamweb/vgagrafx.cpp +++ b/engines/dreamweb/vgagrafx.cpp @@ -27,6 +27,13 @@ namespace DreamGen { +void DreamGenContext::multiGet() { + multiGet(ds.ptr(si, 0), di, bx, cl, ch); + si += cl * ch; + di += bx * kScreenwidth + kScreenwidth * ch; + cx = 0; +} + void DreamBase::multiGet(uint8 *dst, uint16 x, uint16 y, uint8 w, uint8 h) { assert(x < 320); assert(y < 200); @@ -43,6 +50,13 @@ void DreamBase::multiGet(uint8 *dst, uint16 x, uint16 y, uint8 w, uint8 h) { } } +void DreamGenContext::multiPut() { + multiPut(ds.ptr(si, 0), di, bx, cl, ch); + si += cl * ch; + di += bx * kScreenwidth + kScreenwidth * ch; + cx = 0; +} + void DreamBase::multiPut(const uint8 *src, uint16 x, uint16 y, uint8 w, uint8 h) { assert(x < 320); assert(y < 200); @@ -59,6 +73,13 @@ void DreamBase::multiPut(const uint8 *src, uint16 x, uint16 y, uint8 w, uint8 h) } } +void DreamGenContext::multiDump() { + multiDump(di, bx, cl, ch); + unsigned offset = di + bx * kScreenwidth; + si = di = offset + ch * kScreenwidth; + cx = 0; +} + void DreamBase::multiDump(uint16 x, uint16 y, uint8 width, uint8 height) { unsigned offset = x + y * kScreenwidth; //debug(1, "multiDump %ux%u(segment: %04x) -> %d,%d(address: %d)", w, h, (uint16)ds, x, y, offset); |