aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/dreamweb/dreambase.h35
-rw-r--r--engines/dreamweb/monitor.cpp12
-rw-r--r--engines/dreamweb/object.cpp10
-rw-r--r--engines/dreamweb/print.cpp11
-rw-r--r--engines/dreamweb/stubs.cpp54
-rw-r--r--engines/dreamweb/stubs.h95
-rw-r--r--engines/dreamweb/use.cpp3
-rw-r--r--engines/dreamweb/vgagrafx.cpp21
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);