aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdevtools/tasmrecover/tasm-recover2
-rw-r--r--engines/dreamweb/dreambase.h29
-rw-r--r--engines/dreamweb/dreamgen.cpp82
-rw-r--r--engines/dreamweb/dreamgen.h2
-rw-r--r--engines/dreamweb/module.mk2
-rw-r--r--engines/dreamweb/newplace.cpp274
-rw-r--r--engines/dreamweb/object.cpp10
-rw-r--r--engines/dreamweb/saveload.cpp23
-rw-r--r--engines/dreamweb/stubs.cpp807
-rw-r--r--engines/dreamweb/stubs.h13
-rw-r--r--engines/dreamweb/talk.cpp153
-rw-r--r--engines/dreamweb/titles.cpp426
-rw-r--r--engines/dreamweb/use.cpp3
-rw-r--r--engines/dreamweb/vgafades.cpp1
14 files changed, 923 insertions, 904 deletions
diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 916c3b8a80..bebdc1446e 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -687,6 +687,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'printsprites',
'printundermon',
'processtrigger',
+ 'purgealocation',
'putbackobstuff',
'putundercentre',
'putundermenu',
@@ -727,6 +728,7 @@ generator = cpp(context, "DreamGen", blacklist = [
'removesetobject',
'removeobfrominv',
'resetkeyboard',
+ 'resetlocation',
'restoreall',
'restoreems',
'restorereels',
diff --git a/engines/dreamweb/dreambase.h b/engines/dreamweb/dreambase.h
index 3c2283636e..e20ee83bac 100644
--- a/engines/dreamweb/dreambase.h
+++ b/engines/dreamweb/dreambase.h
@@ -139,6 +139,14 @@ public:
void loadNews();
void loadCart();
+ // from newplace.cpp
+ void getUnderCentre();
+ void putUnderCentre();
+ void showArrows();
+ uint8 getLocation(uint8 index);
+ void setLocation(uint8 index);
+ void resetLocation(uint8 index);
+
// from object.cpp
void obIcons();
void fillRyan();
@@ -149,6 +157,7 @@ public:
void deleteExObject(uint8 index);
void deleteExFrame(uint8 frameNum);
void deleteExText(uint8 textNum);
+ void purgeALocation(uint8 index);
// from pathfind.cpp
void turnPathOn(uint8 param);
@@ -236,14 +245,22 @@ public:
void delCurs();
// from saveload.cpp
- void oldToNames();
+ void loadGame();
+ void doLoad(int slot);
+ void saveGame();
void namesToOld();
+ void oldToNames();
+ void saveLoad();
+ void doSaveLoad();
void showMainOps();
void showDiscOps();
+ void discOps();
void actualSave();
void actualLoad();
void loadPosition(unsigned int slot);
void savePosition(unsigned int slot, const char *descbuf);
+ uint scanForNames();
+ void loadOld();
void showDecisions();
void loadSaveBox();
void showNames();
@@ -331,7 +348,6 @@ public:
Frame *tempGraphics();
Frame *tempGraphics2();
Frame *tempGraphics3();
- void showArrows();
void middlePanel();
void showDiary();
void readMouse();
@@ -463,6 +479,11 @@ public:
template <class T> void checkCoords(const RectWithCallback<T> *rectWithCallbacks);
void newGame();
void deleteTaken();
+ void autoAppear();
+ void loadRoom();
+ void startLoading(const Room &room);
+ void startup();
+ void atmospheres();
// from use.cpp
void placeFreeObject(uint8 index);
@@ -505,10 +526,6 @@ public:
inline uint8 *workspace() { return _workspace; }
void clearWork();
- uint8 getLocation(uint8 index);
- void setLocation(uint8 index);
- void getUnderCentre();
- void putUnderCentre();
uint8 *mapStore();
void panelToMap();
void mapToPanel();
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 6a68e7c2b9..265b215af6 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -1130,37 +1130,6 @@ void DreamGenContext::transferConToEx() {
ds.byte(si+2) = 255;
}
-void DreamGenContext::purgeALocation() {
- STACK_CHECK;
- push(ax);
- es = data.word(kExtras);
- di = (0+2080+30000);
- bx = pop();
- cx = 0;
-purgeloc:
- _cmp(bl, es.byte(di+0));
- if (!flags.z())
- goto dontpurge;
- _cmp(es.byte(di+2), 0);
- if (!flags.z())
- goto dontpurge;
- push(di);
- push(es);
- push(bx);
- push(cx);
- deleteExObject();
- cx = pop();
- bx = pop();
- es = pop();
- di = pop();
-dontpurge:
- _add(di, 16);
- _inc(cx);
- _cmp(cx, (114));
- if (!flags.z())
- goto purgeloc;
-}
-
void DreamGenContext::emergencyPurge() {
STACK_CHECK;
checkpurgeagain:
@@ -1491,57 +1460,6 @@ void DreamGenContext::getDestInfo() {
ax = pop();
}
-void DreamGenContext::resetLocation() {
- STACK_CHECK;
- push(ax);
- _cmp(al, 5);
- if (!flags.z())
- goto notdelhotel;
- purgeALocation();
- al = 21;
- purgeALocation();
- al = 22;
- purgeALocation();
- al = 27;
- purgeALocation();
- goto clearedlocations;
-notdelhotel:
- _cmp(al, 8);
- if (!flags.z())
- goto notdeltvstud;
- purgeALocation();
- al = 28;
- purgeALocation();
- goto clearedlocations;
-notdeltvstud:
- _cmp(al, 6);
- if (!flags.z())
- goto notdelsarters;
- purgeALocation();
- al = 20;
- purgeALocation();
- al = 25;
- purgeALocation();
- goto clearedlocations;
-notdelsarters:
- _cmp(al, 13);
- if (!flags.z())
- goto notdelboathouse;
- purgeALocation();
- al = 29;
- purgeALocation();
- goto clearedlocations;
-notdelboathouse:
-clearedlocations:
- ax = pop();
- ah = 0;
- bx = ax;
- dx = data;
- es = dx;
- _add(bx, 537);
- es.byte(bx) = 0;
-}
-
void DreamGenContext::dirCom() {
STACK_CHECK;
cx = 30;
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index d7f754afe9..f836b58577 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -458,7 +458,6 @@ public:
void getObTextStart();
void checkObjectSize();
void doSomeTalk();
- void resetLocation();
void outOfOpen();
void dirCom();
void findFirstPath();
@@ -470,7 +469,6 @@ public:
void reExFromInv();
void transferMap();
void purgeAnItem();
- void purgeALocation();
void getSetAd();
void findOpenPos();
void searchForSame();
diff --git a/engines/dreamweb/module.mk b/engines/dreamweb/module.mk
index 398f0b8db0..88dfdeea53 100644
--- a/engines/dreamweb/module.mk
+++ b/engines/dreamweb/module.mk
@@ -8,6 +8,7 @@ MODULE_OBJS := \
dreamgen.o \
keypad.o \
monitor.o \
+ newplace.o \
object.o \
pathfind.o \
people.o \
@@ -17,6 +18,7 @@ MODULE_OBJS := \
sprite.o \
stubs.o \
talk.o \
+ titles.o \
use.o \
vgafades.o \
vgagrafx.o
diff --git a/engines/dreamweb/newplace.cpp b/engines/dreamweb/newplace.cpp
new file mode 100644
index 0000000000..f1743f0e6d
--- /dev/null
+++ b/engines/dreamweb/newplace.cpp
@@ -0,0 +1,274 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "dreamweb/dreamweb.h"
+
+namespace DreamGen {
+
+void DreamGenContext::newPlace() {
+ if (data.byte(kNeedtotravel) == 1) {
+ data.byte(kNeedtotravel) = 0;
+ selectLocation();
+ } else if (data.byte(kAutolocation) != 0xFF) {
+ data.byte(kNewlocation) = data.byte(kAutolocation);
+ data.byte(kAutolocation) = 0xFF;
+ }
+}
+
+void DreamGenContext::selectLocation() {
+ data.byte(kInmaparea) = 0;
+ clearBeforeLoad();
+ data.byte(kGetback) = 0;
+ data.byte(kPointerframe) = 22;
+ readCityPic();
+ showCity();
+ getRidOfTemp();
+ readDestIcon();
+ loadTravelText();
+ showPanel();
+ showMan();
+ showArrows();
+ showExit();
+ locationPic();
+ underTextLine();
+ data.byte(kCommandtype) = 255;
+ readMouse();
+ data.byte(kPointerframe) = 0;
+ showPointer();
+ workToScreenCPP();
+ playChannel0(9, 255);
+ data.byte(kNewlocation) = 255;
+
+ while (data.byte(kNewlocation) == 255) {
+ if (quitRequested())
+ break;
+
+ delPointer();
+ readMouse();
+ showPointer();
+ vSync();
+ dumpPointer();
+ dumpTextLine();
+
+ if (data.byte(kGetback) == 1)
+ break;
+
+ RectWithCallback<DreamGenContext> destList[] = {
+ { 238,258,4,44,&DreamGenContext::nextDest },
+ { 104,124,4,44,&DreamGenContext::lastDest },
+ { 280,308,4,44,&DreamGenContext::lookAtPlace },
+ { 104,216,138,192,&DreamGenContext::destSelect },
+ { 273,320,157,198,&DreamBase::getBack1 },
+ { 0,320,0,200,&DreamBase::blank },
+ { 0xFFFF,0,0,0,0 }
+ };
+ checkCoords(destList);
+ }
+
+ if (quitRequested() || data.byte(kGetback) == 1 || data.byte(kNewlocation) == data.byte(kLocation)) {
+ data.byte(kNewlocation) = data.byte(kReallocation);
+ data.byte(kGetback) = 0;
+ }
+
+ getRidOfTemp();
+ getRidOfTemp2();
+ getRidOfTemp3();
+ deallocateMem(data.word(kTraveltext));
+}
+
+void DreamGenContext::showCity() {
+ clearWork();
+ showFrame(tempGraphics(), 57, 32, 0, 0);
+ showFrame(tempGraphics(), 120+57, 32, 1, 0);
+}
+
+void DreamGenContext::lookAtPlace() {
+ if (data.byte(kCommandtype) != 224) {
+ data.byte(kCommandtype) = 224;
+ commandOnly(27);
+ }
+
+ if (!(data.word(kMousebutton) & 1) ||
+ data.word(kMousebutton) == data.word(kOldbutton) ||
+ data.byte(kDestpos) >= 15)
+ return; // noinfo
+
+ delPointer();
+ delTextLine();
+ getUnderCentre();
+ showFrame(tempGraphics3(), 60, 72, 0, 0);
+ showFrame(tempGraphics3(), 60, 72 + 55, 4, 0);
+ if (data.byte(kForeignrelease))
+ showFrame(tempGraphics3(), 60, 72+55+21, 4, 0);
+
+ uint16 offset = kTextstart + getSegment(data.word(kTraveltext)).word(data.byte(kDestpos) * 2);
+ const uint8 *string = getSegment(data.word(kTraveltext)).ptr(offset, 0);
+ findNextColon(&string);
+ uint16 y = (data.byte(kForeignrelease)) ? 84 + 4 : 84;
+ printDirect(&string, 63, &y, 191, 191 & 1);
+ workToScreenM();
+ hangOnP(500);
+ data.byte(kPointermode) = 0;
+ data.byte(kPointerframe) = 0;
+ putUnderCentre();
+ workToScreenM();
+}
+
+void DreamBase::getUnderCentre() {
+ multiGet(mapStore(), 58, 72, 254, 110);
+}
+
+void DreamBase::putUnderCentre() {
+ multiPut(mapStore(), 58, 72, 254, 110);
+}
+
+// TODO: put Locationpic here
+
+// TODO: put Getdestinfo here
+
+void DreamBase::showArrows() {
+ showFrame(tempGraphics(), 116 - 12, 16, 0, 0);
+ showFrame(tempGraphics(), 226 + 12, 16, 1, 0);
+ showFrame(tempGraphics(), 280, 14, 2, 0);
+}
+
+void DreamGenContext::nextDest() {
+ if (data.byte(kCommandtype) != 218) {
+ data.byte(kCommandtype) = 218;
+ commandOnly(28);
+ }
+
+ if (!(data.word(kMousebutton) & 1) || data.word(kOldbutton) == 1)
+ return; // nodu
+
+ do {
+ data.byte(kDestpos)++;
+ if (data.byte(kDestpos) == 15)
+ data.byte(kDestpos) = 0; // last destination
+
+ getDestInfo();
+ } while (al == 0);
+
+ data.byte(kNewtextline) = 1;
+ delTextLine();
+ delPointer();
+ showPanel();
+ showMan();
+ showArrows();
+ locationPic();
+ underTextLine();
+ readMouse();
+ showPointer();
+ workToScreenCPP();
+ delPointer();
+}
+
+void DreamGenContext::lastDest() {
+ if (data.byte(kCommandtype) != 219) {
+ data.byte(kCommandtype) = 219;
+ commandOnly(29);
+ }
+
+ if (!(data.word(kMousebutton) & 1) || data.word(kOldbutton) == 1)
+ return; // nodd
+
+ do {
+ data.byte(kDestpos)--;
+ if (data.byte(kDestpos) == 0xFF)
+ data.byte(kDestpos) = 15; // first destination
+
+ getDestInfo();
+ } while (al == 0);
+
+ data.byte(kNewtextline) = 1;
+ delTextLine();
+ delPointer();
+ showPanel();
+ showMan();
+ showArrows();
+ locationPic();
+ underTextLine();
+ readMouse();
+ showPointer();
+ workToScreenCPP();
+ delPointer();
+}
+
+void DreamGenContext::destSelect() {
+ if (data.byte(kCommandtype) != 222) {
+ data.byte(kCommandtype) = 222;
+ commandOnly(30);
+ }
+
+ if (!(data.word(kMousebutton) & 1) || data.word(kOldbutton) == 1)
+ return; // notrav
+
+ getDestInfo();
+ data.byte(kNewlocation) = data.byte(kDestpos);
+}
+
+uint8 DreamBase::getLocation(uint8 index) {
+ return data.byte(kRoomscango + index);
+}
+
+void DreamBase::setLocation(uint8 index) {
+ data.byte(kRoomscango + index) = 1;
+}
+
+void DreamBase::resetLocation(uint8 index) {
+ if (index == 5) {
+ // delete hotel
+ purgeALocation(5);
+ purgeALocation(21);
+ purgeALocation(22);
+ purgeALocation(27);
+ } else if (index == 8) {
+ // delete TV studio
+ purgeALocation(8);
+ purgeALocation(28);
+ } else if (index == 6) {
+ // delete sarters
+ purgeALocation(6);
+ purgeALocation(20);
+ purgeALocation(25);
+ } else if (index == 13) {
+ // delete boathouse
+ purgeALocation(13);
+ purgeALocation(29);
+ }
+
+ data.byte(kRoomscango + index) = 0;
+}
+
+void DreamGenContext::readDestIcon() {
+ loadIntoTemp("DREAMWEB.G05");
+ loadIntoTemp2("DREAMWEB.G06");
+ loadIntoTemp3("DREAMWEB.G08");
+}
+
+void DreamGenContext::readCityPic() {
+ loadIntoTemp("DREAMWEB.G04");
+}
+
+
+
+} // End of namespace DreamGen
diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp
index 8553f41ee8..207f4889db 100644
--- a/engines/dreamweb/object.cpp
+++ b/engines/dreamweb/object.cpp
@@ -631,4 +631,14 @@ void DreamGenContext::outOfInv() {
delPointer();
}
+void DreamBase::purgeALocation(uint8 index) {
+ // index == al
+ for (uint8 i = 0; i < kNumexobjects; ++i) {
+ DynObject *t = getExAd(i);
+ if (t->currentLocation == index && t->mapad[0] == 0) {
+ deleteExObject(i);
+ }
+ }
+}
+
} // End of namespace DreamGen
diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp
index a0309e1ee0..b12c668d82 100644
--- a/engines/dreamweb/saveload.cpp
+++ b/engines/dreamweb/saveload.cpp
@@ -44,7 +44,7 @@ void syncReelRoutine(Common::Serializer &s, ReelRoutine *reel) {
s.syncAsByte(reel->b7);
}
-void DreamGenContext::loadGame() {
+void DreamBase::loadGame() {
if (data.byte(kCommandtype) != 246) {
data.byte(kCommandtype) = 246;
commandOnly(41);
@@ -57,7 +57,7 @@ void DreamGenContext::loadGame() {
// if -1, open menu to ask for slot to load
// if >= 0, directly load from that slot
-void DreamGenContext::doLoad(int savegameId) {
+void DreamBase::doLoad(int savegameId) {
data.byte(kLoadingorsave) = 1;
if (ConfMan.getBool("dreamweb_originalsaveload") && savegameId == -1) {
@@ -138,7 +138,7 @@ void DreamGenContext::doLoad(int savegameId) {
}
-void DreamGenContext::saveGame() {
+void DreamBase::saveGame() {
if (data.byte(kMandead) == 2) {
blank();
return;
@@ -239,7 +239,7 @@ void DreamBase::oldToNames() {
memcpy(_saveNames, _saveNamesOld, 17*7);
}
-void DreamGenContext::saveLoad() {
+void DreamBase::saveLoad() {
if (data.word(kWatchingtime) || (data.byte(kPointermode) == 2)) {
blank();
return;
@@ -252,7 +252,7 @@ void DreamGenContext::saveLoad() {
doSaveLoad();
}
-void DreamGenContext::doSaveLoad() {
+void DreamBase::doSaveLoad() {
data.byte(kPointerframe) = 0;
data.word(kTextaddressx) = 70;
data.word(kTextaddressy) = 182-8;
@@ -350,7 +350,7 @@ void DreamBase::showDiscOps() {
showFrame(tempGraphics(), kOpsx+176+2, kOpsy+60-4, 5, 0);
}
-void DreamGenContext::discOps() {
+void DreamBase::discOps() {
if (data.byte(kCommandtype) != 249) {
data.byte(kCommandtype) = 249;
commandOnly(43);
@@ -368,8 +368,8 @@ void DreamGenContext::discOps() {
data.byte(kGetback) = 0;
RectWithCallback<DreamGenContext> discOpsList[] = {
- { kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamGenContext::loadGame },
- { kOpsx+10,kOpsx+79,kOpsy+10,kOpsy+59,&DreamGenContext::saveGame },
+ { kOpsx+59,kOpsx+114,kOpsy+30,kOpsy+76,&DreamBase::loadGame },
+ { kOpsx+10,kOpsx+79,kOpsy+10,kOpsy+59,&DreamBase::saveGame },
{ kOpsx+176,kOpsx+192,kOpsy+60,kOpsy+76,&DreamBase::getBackToOps },
{ 0,320,0,200,&DreamBase::blank },
{ 0xFFFF,0,0,0,0 }
@@ -589,7 +589,7 @@ void DreamBase::loadPosition(unsigned int slot) {
}
// Count number of save files, and load their descriptions into _saveNames
-unsigned int DreamGenContext::scanForNames() {
+uint DreamBase::scanForNames() {
// Initialize the first 7 slots (like the original code expects)
for (unsigned int slot = 0; slot < 7; ++slot) {
_saveNames[17 * slot + 0] = 2;
@@ -620,12 +620,13 @@ unsigned int DreamGenContext::scanForNames() {
Common::strlcpy(&_saveNames[17 * slotNum + 1], name, 16); // the first character is unused
}
- al = saveList.size() <= 7 ? (uint8)saveList.size() : 7;
+ // FIXME: Can the following be safely removed?
+// al = saveList.size() <= 7 ? (uint8)saveList.size() : 7;
return saveList.size();
}
-void DreamGenContext::loadOld() {
+void DreamBase::loadOld() {
if (data.byte(kCommandtype) != 252) {
data.byte(kCommandtype) = 252;
commandOnly(48);
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index f3c908aad2..9969ac775a 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -21,7 +21,6 @@
*/
#include "dreamweb/dreamweb.h"
-#include "engines/util.h"
#include "common/config-manager.h"
namespace DreamGen {
@@ -329,23 +328,23 @@ static const Atmosphere g_atmosphereList[] = {
{ 10,33,30,6,255 },
{ 10,22,30,6,255 },
-
+
{ 9,22,10,6,255 },
{ 9,22,20,16,255 },
{ 9,22,30,16,255 },
{ 9,22,40,16,255 },
{ 9,22,50,16,255 },
-
+
{ 6,11,30,6,255 },
{ 6,0,10,15,255 },
{ 6,0,20,15,255 },
{ 6,11,20,15,255 },
{ 6,22,20,15,255 },
-
+
{ 7,11,20,6,255 },
{ 7,0,20,6,255 },
{ 7,0,30,6,255 },
-
+
{ 55,44,0,5,255 },
{ 55,44,10,5,255 },
@@ -367,12 +366,12 @@ static const Atmosphere g_atmosphereList[] = {
{ 8,33,40,6,255 },
{ 8,22,40,6,255 },
{ 8,11,40,6,255 },
-
+
{ 11,11,20,12,255 },
{ 11,11,30,12,255 },
{ 11,22,20,12,255 },
{ 11,22,30,12,255 },
-
+
{ 12,22,20,12,255 },
{ 13,22,20,12,255 },
{ 13,33,20,12,255 },
@@ -384,7 +383,7 @@ static const Atmosphere g_atmosphereList[] = {
{ 14,33,30,12,255 },
{ 14,33,40,12,255 },
{ 14,22,0,16,255 },
-
+
{ 19,0,0,12,255 },
{ 20,0,20,16,255 },
@@ -495,7 +494,7 @@ void DreamGenContext::dreamweb() {
while (true) {
- unsigned int count = scanForNames();
+ uint count = scanForNames();
bool startNewGame = true;
@@ -544,6 +543,7 @@ void DreamGenContext::dreamweb() {
// "playGame"
// "titles"
+ // TODO: In the demo version, titles() did nothing
clearPalette();
bibleQuote();
if (!quitRequested()) // "titlesearly"
@@ -707,7 +707,7 @@ void DreamGenContext::screenUpdate() {
delPointer();
}
-void DreamGenContext::startup() {
+void DreamBase::startup() {
data.byte(kCurrentkey) = 0;
data.byte(kMainmode) = 0;
createPanel();
@@ -846,14 +846,6 @@ void DreamBase::putUnderTimed() {
multiPut(getSegment(data.word(kBuffers)).ptr(kUndertimedtext, 0), data.byte(kTimedx), y, 240, kUndertimedysize);
}
-void DreamBase::getUnderCentre() {
- multiGet(mapStore(), 58, 72, 254, 110);
-}
-
-void DreamBase::putUnderCentre() {
- multiPut(mapStore(), 58, 72, 254, 110);
-}
-
void DreamGenContext::triggerMessage(uint16 index) {
multiGet(mapStore(), 174, 153, 200, 63);
uint16 offset = kTextstart + getSegment(data.word(kPuzzletext)).word(index * 2);
@@ -989,9 +981,6 @@ void DreamBase::DOSReturn() {
}
}
-void DreamGenContext::set16ColPalette() {
-}
-
void DreamBase::eraseOldObs() {
if (data.byte(kNewobs) == 0)
return;
@@ -1052,7 +1041,7 @@ void DreamBase::clearAndLoad(uint16 seg, uint8 c,
clearAndLoad(buf, c, size, maxSize);
}
-void DreamGenContext::startLoading(const Room &room) {
+void DreamBase::startLoading(const Room &room) {
data.byte(kCombatcount) = 0;
data.byte(kRoomssample) = room.roomsSample;
data.byte(kMapx) = room.mapX;
@@ -1249,7 +1238,7 @@ const uint8 *DreamBase::findObName(uint8 type, uint8 index) {
void DreamBase::copyName(uint8 type, uint8 index, uint8 *dst) {
const uint8 *src = findObName(type, index);
size_t i;
- for (i = 0; i < 28; ++i) {
+ for (i = 0; i < 28; ++i) {
char c = src[i];
if (c == ':')
break;
@@ -1261,7 +1250,7 @@ void DreamBase::copyName(uint8 type, uint8 index, uint8 *dst) {
}
void DreamGenContext::commandWithOb() {
- commandWithOb(al, bh, bl);
+ commandWithOb(al, bh, bl);
}
void DreamBase::commandWithOb(uint8 command, uint8 type, uint8 index) {
@@ -1988,12 +1977,6 @@ void DreamBase::sortOutMap() {
}
}
-void DreamGenContext::showCity() {
- clearWork();
- showFrame(tempGraphics(), 57, 32, 0, 0);
- showFrame(tempGraphics(), 120+57, 32, 1, 0);
-}
-
void DreamGenContext::mainScreen() {
data.byte(kInmaparea) = 0;
if (data.byte(kWatchon) == 1) {
@@ -2104,7 +2087,7 @@ void DreamBase::zoomIcon() {
showFrame(engine->icons1(), kZoomx, kZoomy-1, 8, 0);
}
-void DreamGenContext::loadRoom() {
+void DreamBase::loadRoom() {
data.byte(kRoomloaded) = 1;
data.word(kTimecount) = 0;
data.word(kMaintimer) = 0;
@@ -2123,10 +2106,6 @@ void DreamGenContext::loadRoom() {
uint8 mapXstart, mapYstart;
uint8 mapXsize, mapYsize;
getDimension(&mapXstart, &mapYstart, &mapXsize, &mapYsize);
- cl = mapXstart;
- ch = mapYstart;
- dl = mapXsize;
- dh = mapYsize;
}
void DreamGenContext::readSetData() {
@@ -2459,14 +2438,6 @@ void DreamBase::examIcon() {
showFrame(engine->icons2(), 254, 5, 3, 0);
}
-uint8 DreamBase::getLocation(uint8 index) {
- return data.byte(kRoomscango + index);
-}
-
-void DreamBase::setLocation(uint8 index) {
- data.byte(kRoomscango + index) = 1;
-}
-
const uint8 *DreamBase::getTextInFile1(uint16 index) {
SegmentRef text = getSegment(data.word(kTextfile1));
uint16 offset = text.word(index * 2) + kTextstart;
@@ -2647,7 +2618,7 @@ void DreamGenContext::useMenu() {
workToScreenM();
}
-void DreamGenContext::atmospheres() {
+void DreamBase::atmospheres() {
const Atmosphere *a = &g_atmosphereList[0];
@@ -2671,8 +2642,8 @@ void DreamGenContext::atmospheres() {
// I'm interpreting this as if the cmp reallocation is below the jz
if (data.byte(kMapy) == 0) {
- data.byte(kVolume) = 0; // "fullvol"
- return;
+ data.byte(kVolume) = 0; // "fullvol"
+ return;
}
if (data.byte(kReallocation) == 2 && data.byte(kMapx) == 22 && data.byte(kMapy) == 10)
@@ -2709,16 +2680,6 @@ void DreamGenContext::atmospheres() {
cancelCh0();
}
-void DreamGenContext::readCityPic() {
- loadIntoTemp("DREAMWEB.G04");
-}
-
-void DreamGenContext::readDestIcon() {
- loadIntoTemp("DREAMWEB.G05");
- loadIntoTemp2("DREAMWEB.G06");
- loadIntoTemp3("DREAMWEB.G08");
-}
-
uint8 DreamGenContext::nextSymbol(uint8 symbol) {
uint8 result = symbol + 1;
if (result == 6)
@@ -2758,308 +2719,6 @@ void DreamBase::readKey() {
data.word(kBufferout) = bufOut;
}
-void DreamGenContext::hangOne(uint16 delay) {
- do {
- vSync();
- if (data.byte(kLasthardkey) == 1)
- return; // "hangonearly"
- } while (--delay);
-}
-
-void DreamGenContext::hangOne() {
- hangOne(cx);
-}
-
-void DreamGenContext::bibleQuote() {
- initGraphics(640, 480, true);
-
- showPCX("DREAMWEB.I00");
- fadeScreenUps();
-
- hangOne(80);
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "biblequotearly"
- }
-
- hangOne(560);
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "biblequotearly"
- }
-
- fadeScreenDowns();
-
- hangOne(200);
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "biblequotearly"
- }
-
- cancelCh0();
-
- data.byte(kLasthardkey) = 0;
-}
-
-void DreamGenContext::realCredits() {
- data.byte(kRoomssample) = 33;
- loadRoomsSample();
- data.byte(kVolume) = 0;
-
- initGraphics(640, 480, true);
- hangOn(35);
-
- showPCX("DREAMWEB.I01");
- playChannel0(12, 0);
-
- hangOne(2);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- allPalette();
- hangOne(80);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- fadeScreenDowns();
- hangOne(256);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- showPCX("DREAMWEB.I02");
- playChannel0(12, 0);
- hangOne(2);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- allPalette();
- hangOne(80);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- fadeScreenDowns();
- hangOne(256);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- showPCX("DREAMWEB.I03");
- playChannel0(12, 0);
- hangOne(2);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- allPalette();
- hangOne(80);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- fadeScreenDowns();
- hangOne(256);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- showPCX("DREAMWEB.I04");
- playChannel0(12, 0);
- hangOne(2);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- allPalette();
- hangOne(80);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- fadeScreenDowns();
- hangOne(256);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- showPCX("DREAMWEB.I05");
- playChannel0(12, 0);
- hangOne(2);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- allPalette();
- hangOne(80);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- fadeScreenDowns();
- hangOne(256);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- showPCX("DREAMWEB.I06");
- fadeScreenUps();
- hangOne(60);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- playChannel0(13, 0);
- hangOne(350);
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "realcreditsearly"
- }
-
- fadeScreenDowns();
- hangOne(256);
-
- data.byte(kLasthardkey) = 0;
-}
-
-void DreamGenContext::runIntroSeq() {
- data.byte(kGetback) = 0;
-
- do {
- vSync();
-
- if (data.byte(kLasthardkey) == 1)
- break;
-
- spriteUpdate();
- vSync();
-
- if (data.byte(kLasthardkey) == 1)
- break;
-
- delEverything();
- printSprites();
- reelsOnScreen();
- afterIntroRoom();
- useTimedText();
- vSync();
-
- if (data.byte(kLasthardkey) == 1)
- break;
-
- dumpMap();
- dumpTimedText();
- vSync();
-
- if (data.byte(kLasthardkey) == 1)
- break;
-
- } while (data.byte(kGetback) != 1);
-
-
- if (data.byte(kLasthardkey) == 1) {
- getRidOfTempText();
- clearBeforeLoad();
- }
-
- // These were not called in this program arc
- // in the original code.. Bug?
- //getRidOfTempText();
- //clearBeforeLoad();
-}
-
-void DreamGenContext::intro() {
- loadTempText("DREAMWEB.T82");
- loadPalFromIFF();
- setMode();
- data.byte(kNewlocation) = 50;
- clearPalette();
- loadIntroRoom();
- data.byte(kVolume) = 7;
- data.byte(kVolumedirection) = (byte)-1;
- data.byte(kVolumeto) = 4;
- playChannel0(12, 255);
- fadeScreenUps();
- runIntroSeq();
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "introearly"
- }
-
- clearBeforeLoad();
- data.byte(kNewlocation) = 52;
- loadIntroRoom();
- runIntroSeq();
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "introearly"
- }
-
- clearBeforeLoad();
- data.byte(kNewlocation) = 53;
- loadIntroRoom();
- runIntroSeq();
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "introearly"
- }
-
- clearBeforeLoad();
- allPalette();
- data.byte(kNewlocation) = 54;
- loadIntroRoom();
- runIntroSeq();
-
- if (data.byte(kLasthardkey) == 1) {
- data.byte(kLasthardkey) = 0;
- return; // "introearly"
- }
-
- getRidOfTempText();
- clearBeforeLoad();
-
- data.byte(kLasthardkey) = 0;
-}
-
void DreamBase::setTopLeft() {
if (data.byte(kSymboltopdir) != 0) {
blank();
@@ -3167,25 +2826,6 @@ void DreamGenContext::walkIntoRoom() {
}
}
-void DreamGenContext::loadIntroRoom() {
- data.byte(kIntrocount) = 0;
- data.byte(kLocation) = 255;
- loadRoom();
- data.word(kMapoffsetx) = 72;
- data.word(kMapoffsety) = 16;
- clearSprites();
- data.byte(kThroughdoor) = 0;
- data.byte(kCurrentkey) = '0';
- data.byte(kMainmode) = 0;
- clearWork();
- data.byte(kNewobs) = 1;
- drawFloor();
- reelsOnScreen();
- spriteUpdate();
- printSprites();
- workToScreenCPP();
-}
-
void DreamGenContext::afterIntroRoom() {
if (data.byte(kNowinnewroom) == 0)
return; // notnewintro
@@ -3201,17 +2841,6 @@ void DreamGenContext::afterIntroRoom() {
data.byte(kNowinnewroom) = 0;
}
-void DreamGenContext::gettingShot() {
- data.byte(kNewlocation) = 55;
- clearPalette();
- loadIntroRoom();
- fadeScreenUps();
- data.byte(kVolumeto) = 0;
- data.byte(kVolumedirection) = (byte)-1;
- runEndSeq();
- clearBeforeLoad();
-}
-
void DreamBase::redrawMainScrn() {
data.word(kTimecount) = 0;
createPanel();
@@ -3368,81 +2997,6 @@ void DreamGenContext::reExFromOpen() {
}
-void DreamGenContext::nextDest() {
- if (data.byte(kCommandtype) != 218) {
- data.byte(kCommandtype) = 218;
- commandOnly(28);
- }
-
- if (!(data.word(kMousebutton) & 1) || data.word(kOldbutton) == 1)
- return; // nodu
-
- do {
- data.byte(kDestpos)++;
- if (data.byte(kDestpos) == 15)
- data.byte(kDestpos) = 0; // last destination
-
- getDestInfo();
- } while (al == 0);
-
- data.byte(kNewtextline) = 1;
- delTextLine();
- delPointer();
- showPanel();
- showMan();
- showArrows();
- locationPic();
- underTextLine();
- readMouse();
- showPointer();
- workToScreenCPP();
- delPointer();
-}
-
-void DreamGenContext::lastDest() {
- if (data.byte(kCommandtype) != 219) {
- data.byte(kCommandtype) = 219;
- commandOnly(29);
- }
-
- if (!(data.word(kMousebutton) & 1) || data.word(kOldbutton) == 1)
- return; // nodd
-
- do {
- data.byte(kDestpos)--;
- if (data.byte(kDestpos) == 0xFF)
- data.byte(kDestpos) = 15; // first destination
-
- getDestInfo();
- } while (al == 0);
-
- data.byte(kNewtextline) = 1;
- delTextLine();
- delPointer();
- showPanel();
- showMan();
- showArrows();
- locationPic();
- underTextLine();
- readMouse();
- showPointer();
- workToScreenCPP();
- delPointer();
-}
-
-void DreamGenContext::destSelect() {
- if (data.byte(kCommandtype) != 222) {
- data.byte(kCommandtype) = 222;
- commandOnly(30);
- }
-
- if (!(data.word(kMousebutton) & 1) || data.word(kOldbutton) == 1)
- return; // notrav
-
- getDestInfo();
- data.byte(kNewlocation) = data.byte(kDestpos);
-}
-
void DreamGenContext::putBackObStuff() {
createPanel();
showPanel();
@@ -3459,58 +3013,6 @@ void DreamGenContext::putBackObStuff() {
delPointer();
}
-void DreamGenContext::redes() {
- if (data.byte(kCh1playing) != 255 || data.byte(kTalkmode) != 2) {
- blank();
- return;
- }
-
- if (data.byte(kCommandtype) != 217) {
- data.byte(kCommandtype) = 217;
- commandOnly(50);
- }
-
- if (!(data.word(kMousebutton) & 1))
- return;
-
- delPointer();
- createPanel();
- showPanel();
- showMan();
- showExit();
- convIcons();
- startTalk();
- readMouse();
- showPointer();
- workToScreenCPP();
- delPointer();
-}
-
-void DreamGenContext::moreTalk() {
- if (data.byte(kTalkmode) != 0) {
- redes();
- return;
- }
-
- if (data.byte(kCommandtype) != 215) {
- data.byte(kCommandtype) = 215;
- commandOnly(49);
- }
-
- if (data.word(kMousebutton) == data.word(kOldbutton))
- return; // nomore
-
- if (!(data.word(kMousebutton) & 1))
- return;
-
- data.byte(kTalkmode) = 2;
- data.byte(kTalkpos) = 4;
-
- if (data.byte(kCharacter) >= 100)
- data.byte(kTalkpos) = 48; // second part
- doSomeTalk();
-}
-
bool DreamBase::isSetObOnMap(uint8 index) {
return (getSetAd(index)->mapad[0] == 0);
}
@@ -3520,68 +3022,6 @@ void DreamBase::dumpZoom() {
multiDump(kZoomx + 5, kZoomy + 4, 46, 40);
}
-void DreamGenContext::selectLocation() {
- data.byte(kInmaparea) = 0;
- clearBeforeLoad();
- data.byte(kGetback) = 0;
- data.byte(kPointerframe) = 22;
- readCityPic();
- showCity();
- getRidOfTemp();
- readDestIcon();
- loadTravelText();
- showPanel();
- showMan();
- showArrows();
- showExit();
- locationPic();
- underTextLine();
- data.byte(kCommandtype) = 255;
- readMouse();
- data.byte(kPointerframe) = 0;
- showPointer();
- workToScreenCPP();
- playChannel0(9, 255);
- data.byte(kNewlocation) = 255;
-
- while (data.byte(kNewlocation) == 255) {
- if (quitRequested())
- break;
-
- delPointer();
- readMouse();
- showPointer();
- vSync();
- dumpPointer();
- dumpTextLine();
-
- if (data.byte(kGetback) == 1)
- break;
-
- RectWithCallback<DreamGenContext> destList[] = {
- { 238,258,4,44,&DreamGenContext::nextDest },
- { 104,124,4,44,&DreamGenContext::lastDest },
- { 280,308,4,44,&DreamGenContext::lookAtPlace },
- { 104,216,138,192,&DreamGenContext::destSelect },
- { 273,320,157,198,&DreamBase::getBack1 },
- { 0,320,0,200,&DreamBase::blank },
- { 0xFFFF,0,0,0,0 }
- };
- checkCoords(destList);
- }
-
- if (quitRequested() || data.byte(kGetback) == 1 || data.byte(kNewlocation) == data.byte(kLocation)) {
- data.byte(kNewlocation) = data.byte(kReallocation);
- data.byte(kGetback) = 0;
- }
-
- getRidOfTemp();
- getRidOfTemp2();
- getRidOfTemp3();
- deallocateMem(data.word(kTraveltext));
-}
-
-
void DreamBase::examineInventory() {
if (data.byte(kCommandtype) != 249) {
data.byte(kCommandtype) = 249;
@@ -3602,12 +3042,6 @@ void DreamBase::examineInventory() {
workToScreenM();
}
-void DreamBase::showArrows() {
- showFrame(tempGraphics(), 116 - 12, 16, 0, 0);
- showFrame(tempGraphics(), 226 + 12, 16, 1, 0);
- showFrame(tempGraphics(), 280, 14, 2, 0);
-}
-
void DreamBase::middlePanel() {
Frame *tempSprites = (Frame *)getSegment(data.word(kTempsprites)).ptr(0, 0);
showFrame(tempSprites, 72 + 47 + 20, 0, 48, 0);
@@ -3793,107 +3227,6 @@ void DreamGenContext::decide() {
data.byte(kTextlen) = 240;
}
-void DreamGenContext::talk() {
- data.byte(kTalkpos) = 0;
- data.byte(kInmaparea) = 0;
- data.byte(kCharacter) = data.byte(kCommand);
- createPanel();
- showPanel();
- showMan();
- showExit();
- underTextLine();
- convIcons();
- startTalk();
- data.byte(kCommandtype) = 255;
- readMouse();
- showPointer();
- workToScreenCPP();
-
- RectWithCallback<DreamGenContext> talkList[] = {
- { 273,320,157,198,&DreamBase::getBack1 },
- { 240,290,2,44,&DreamGenContext::moreTalk },
- { 0,320,0,200,&DreamBase::blank },
- { 0xFFFF,0,0,0,0 }
- };
-
- do {
- delPointer();
- readMouse();
- animPointer();
- showPointer();
- vSync();
- dumpPointer();
- dumpTextLine();
- data.byte(kGetback) = 0;
- checkCoords(talkList);
- if (data.byte(kQuitrequested))
- break;
- } while (!data.byte(kGetback));
-
- if (data.byte(kTalkpos) >= 4)
- _personData->b7 |= 128;
-
- redrawMainScrn();
- workToScreenM();
- if (data.byte(kSpeechloaded) == 1) {
- cancelCh1();
- data.byte(kVolumedirection) = (byte)-1;
- data.byte(kVolumeto) = 0;
- }
-}
-
-void DreamGenContext::hangOnPQ() {
- data.byte(kGetback) = 0;
-
- RectWithCallback<DreamBase> quitList[] = {
- { 273,320,157,198,&DreamBase::getBack1 },
- { 0,320,0,200,&DreamBase::blank },
- { 0xFFFF,0,0,0,0 }
- };
-
- uint16 speechFlag = 0;
-
- do {
- delPointer();
- readMouse();
- animPointer();
- showPointer();
- vSync();
- dumpPointer();
- dumpTextLine();
- checkCoords(quitList);
-
- if (data.byte(kGetback) == 1 || data.byte(kQuitrequested)) {
- // Quit conversation
- delPointer();
- data.byte(kPointermode) = 0;
- cancelCh1();
- flags._c = true;
- return;
- }
-
- if (data.byte(kSpeechloaded) == 1 && data.byte(kCh1playing) == 255) {
- speechFlag++;
- if (speechFlag == 40)
- break;
- }
- } while (!data.word(kMousebutton) || data.word(kOldbutton));
-
- delPointer();
- data.byte(kPointermode) = 0;
- flags._c = false;
- }
-
-void DreamGenContext::endGame() {
- loadTempText("DREAMWEB.T83");
- monkSpeaking();
- gettingShot();
- getRidOfTempText();
- data.byte(kVolumeto) = 7;
- data.byte(kVolumedirection) = 1;
- hangOn(200);
-}
-
void DreamGenContext::showGun() {
data.byte(kAddtored) = 0;
data.byte(kAddtogreen) = 0;
@@ -4018,49 +3351,6 @@ void DreamBase::getBack1() {
}
}
-void DreamGenContext::newPlace() {
- if (data.byte(kNeedtotravel) == 1) {
- data.byte(kNeedtotravel) = 0;
- selectLocation();
- } else if (data.byte(kAutolocation) != 0xFF) {
- data.byte(kNewlocation) = data.byte(kAutolocation);
- data.byte(kAutolocation) = 0xFF;
- }
-}
-
-void DreamGenContext::monkSpeaking() {
- // FIXME: This is the CD version only.
-
- data.byte(kRoomssample) = 35;
- loadRoomsSample();
- loadIntoTemp("DREAMWEB.G15");
- clearWork();
- showFrame(tempGraphics(), 160, 72, 0, 128); // show monk
- workToScreen();
- data.byte(kVolume) = 7;
- data.byte(kVolumedirection) = (byte)-1;
- data.byte(kVolumeto) = 5;
- playChannel0(12, 255);
- fadeScreenUps();
- hangOn(300);
-
- for (int i = 40; i <= 48; i++) {
- loadSpeech('T', 83, 'T', i);
-
- playChannel1(50 + 12);
-
- do {
- engine->waitForVSync();
- } while (data.byte(kCh1playing) != 255);
- }
-
- data.byte(kVolumedirection) = 1;
- data.byte(kVolumeto) = 7;
- fadeScreenDowns();
- hangOn(300);
- getRidOfTemp();
-}
-
void DreamGenContext::useButtonA() {
if (!isSetObOnMap(95)) {
showFirstUse();
@@ -4081,11 +3371,10 @@ void DreamGenContext::useButtonA() {
}
}
-void DreamGenContext::autoAppear() {
+void DreamBase::autoAppear() {
if (data.byte(kLocation) == 32) {
// In alley
- al = 5;
- resetLocation();
+ resetLocation(5);
setLocation(10);
data.byte(kDestpos) = 10;
return;
@@ -4115,8 +3404,7 @@ void DreamGenContext::autoAppear() {
if (data.byte(kReallocation) == 25) {
// Sart roof
data.byte(kNewsitem) = 3;
- al = 6;
- resetLocation();
+ resetLocation(6);
setLocation(11);
data.byte(kDestpos) = 11;
} else {
@@ -4196,8 +3484,7 @@ void DreamGenContext::entryAnims() {
data.byte(kSpeedcount) = 1;
break;
case 44: // Sparky's
- al = 8;
- resetLocation();
+ resetLocation(8);
data.word(kWatchingtime) = 50*2;
data.word(kReeltowatch) = 247;
data.word(kEndwatchreel) = 297;
@@ -4377,26 +3664,6 @@ void DreamGenContext::dumpDiaryKeys() {
multiDump(kDiaryx + 151, kDiaryy + 71, 16, 16);
}
-void DreamGenContext::runEndSeq() {
- atmospheres();
- data.byte(kGetback) = 0;
-
- do {
- vSync();
- spriteUpdate();
- vSync();
- delEverything();
- printSprites();
- reelsOnScreen();
- afterIntroRoom();
- useTimedText();
- vSync();
- dumpMap();
- dumpTimedText();
- vSync();
- } while (data.byte(kGetback) != 1);
-}
-
void DreamGenContext::lookAtCard() {
data.byte(kManisoffscreen) = 1;
getRidOfReels();
@@ -4471,38 +3738,6 @@ void DreamGenContext::showDiaryKeys() {
showDiaryPage();
}
-void DreamGenContext::lookAtPlace() {
- if (data.byte(kCommandtype) != 224) {
- data.byte(kCommandtype) = 224;
- commandOnly(27);
- }
-
- if (!(data.word(kMousebutton) & 1) ||
- data.word(kMousebutton) == data.word(kOldbutton) ||
- data.byte(kDestpos) >= 15)
- return; // noinfo
-
- delPointer();
- delTextLine();
- getUnderCentre();
- showFrame(tempGraphics3(), 60, 72, 0, 0);
- showFrame(tempGraphics3(), 60, 72 + 55, 4, 0);
- if (data.byte(kForeignrelease))
- showFrame(tempGraphics3(), 60, 72+55+21, 4, 0);
-
- uint16 offset = kTextstart + getSegment(data.word(kTraveltext)).word(data.byte(kDestpos) * 2);
- const uint8 *string = getSegment(data.word(kTraveltext)).ptr(offset, 0);
- findNextColon(&string);
- uint16 y = (data.byte(kForeignrelease)) ? 84 + 4 : 84;
- printDirect(&string, 63, &y, 191, 191 & 1);
- workToScreenM();
- hangOnP(500);
- data.byte(kPointermode) = 0;
- data.byte(kPointerframe) = 0;
- putUnderCentre();
- workToScreenM();
-}
-
void DreamGenContext::edensFlatReminders() {
if (data.byte(kReallocation) != 24 || data.byte(kMapx) != 44)
return; // not in Eden's lift
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 61697e828e..c94cb02a3c 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -23,9 +23,7 @@
#define DREAMWEB_STUBS_H
void screenUpdate();
- void startup();
void startup1();
- void saveLoad();
void workToScreen();
void multiGet();
void multiGet(uint8 *dst, uint16 x, uint16 y, uint8 width, uint8 height) {
@@ -52,7 +50,6 @@
uint8 printDirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered) {
return DreamBase::printDirect(string, x, y, maxWidth, centered);
}
- void startLoading(const Room &room);
void showFrame();
void showFrame(const Frame *frameData, uint16 x, uint16 y, uint16 frameNumber, uint8 effectsFlag, uint8 *width, uint8 *height) {
DreamBase::showFrame(frameData, x, y, frameNumber, effectsFlag, width, height);
@@ -131,7 +128,6 @@
void dumpWatch();
void transferText();
void watchCount();
- void loadRoom();
void readSetData();
void useMenu();
void useMon();
@@ -219,15 +215,9 @@
uint8 nextSymbol(uint8 symbol);
void showSymbol();
void enterCode(uint8 digit0, uint8 digit1, uint8 digit2, uint8 digit3);
- unsigned int scanForNames();
- void doLoad(int slot);
- void loadOld();
void inventory();
void mainScreen();
- void loadGame();
- void saveGame();
void zoomOnOff();
- void atmospheres();
void hangOne(uint16 delay);
void hangOne();
void bibleQuote();
@@ -287,8 +277,6 @@
void madmanRun();
void decide();
void talk();
- void discOps();
- void doSaveLoad();
void useDiary();
void hangOnPQ();
void showGun();
@@ -299,7 +287,6 @@
void monkSpeaking();
void rollEndCredits2();
void useButtonA();
- void autoAppear();
void setupTimedUse();
void entryAnims();
void triggerMessage(uint16 index);
diff --git a/engines/dreamweb/talk.cpp b/engines/dreamweb/talk.cpp
index 86d1b886ef..fac75be6cf 100644
--- a/engines/dreamweb/talk.cpp
+++ b/engines/dreamweb/talk.cpp
@@ -24,8 +24,53 @@
namespace DreamGen {
-uint16 DreamGenContext::getPersFrame(uint8 index) {
- return getSegment(data.word(kPeople)).word(kPersonframes + index * 2);
+void DreamGenContext::talk() {
+ data.byte(kTalkpos) = 0;
+ data.byte(kInmaparea) = 0;
+ data.byte(kCharacter) = data.byte(kCommand);
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+ underTextLine();
+ convIcons();
+ startTalk();
+ data.byte(kCommandtype) = 255;
+ readMouse();
+ showPointer();
+ workToScreenCPP();
+
+ RectWithCallback<DreamGenContext> talkList[] = {
+ { 273,320,157,198,&DreamBase::getBack1 },
+ { 240,290,2,44,&DreamGenContext::moreTalk },
+ { 0,320,0,200,&DreamBase::blank },
+ { 0xFFFF,0,0,0,0 }
+ };
+
+ do {
+ delPointer();
+ readMouse();
+ animPointer();
+ showPointer();
+ vSync();
+ dumpPointer();
+ dumpTextLine();
+ data.byte(kGetback) = 0;
+ checkCoords(talkList);
+ if (data.byte(kQuitrequested))
+ break;
+ } while (!data.byte(kGetback));
+
+ if (data.byte(kTalkpos) >= 4)
+ data.byte(data.word(kPersondata)+7) |= 128;
+
+ redrawMainScrn();
+ workToScreenM();
+ if (data.byte(kSpeechloaded) == 1) {
+ cancelCh1();
+ data.byte(kVolumedirection) = (byte)-1;
+ data.byte(kVolumeto) = 0;
+ }
}
void DreamGenContext::convIcons() {
@@ -35,4 +80,108 @@ void DreamGenContext::convIcons() {
showFrame(base, 234, 2, frame, 0);
}
+uint16 DreamGenContext::getPersFrame(uint8 index) {
+ return getSegment(data.word(kPeople)).word(kPersonframes + index * 2);
+}
+
+// TODO: put Starttalk here
+
+// TODO: put Getpersontext here
+
+void DreamGenContext::moreTalk() {
+ if (data.byte(kTalkmode) != 0) {
+ redes();
+ return;
+ }
+
+ if (data.byte(kCommandtype) != 215) {
+ data.byte(kCommandtype) = 215;
+ commandOnly(49);
+ }
+
+ if (data.word(kMousebutton) == data.word(kOldbutton))
+ return; // nomore
+
+ if (!(data.word(kMousebutton) & 1))
+ return;
+
+ data.byte(kTalkmode) = 2;
+ data.byte(kTalkpos) = 4;
+
+ if (data.byte(kCharacter) >= 100)
+ data.byte(kTalkpos) = 48; // second part
+ doSomeTalk();
+}
+
+// TODO: put Dosometalk here
+
+void DreamGenContext::hangOnPQ() {
+ data.byte(kGetback) = 0;
+
+ RectWithCallback<DreamBase> quitList[] = {
+ { 273,320,157,198,&DreamBase::getBack1 },
+ { 0,320,0,200,&DreamBase::blank },
+ { 0xFFFF,0,0,0,0 }
+ };
+
+ uint16 speechFlag = 0;
+
+ do {
+ delPointer();
+ readMouse();
+ animPointer();
+ showPointer();
+ vSync();
+ dumpPointer();
+ dumpTextLine();
+ checkCoords(quitList);
+
+ if (data.byte(kGetback) == 1 || data.byte(kQuitrequested)) {
+ // Quit conversation
+ delPointer();
+ data.byte(kPointermode) = 0;
+ cancelCh1();
+ flags._c = true;
+ return;
+ }
+
+ if (data.byte(kSpeechloaded) == 1 && data.byte(kCh1playing) == 255) {
+ speechFlag++;
+ if (speechFlag == 40)
+ break;
+ }
+ } while (!data.word(kMousebutton) || data.word(kOldbutton));
+
+ delPointer();
+ data.byte(kPointermode) = 0;
+ flags._c = false;
+}
+
+void DreamGenContext::redes() {
+ if (data.byte(kCh1playing) != 255 || data.byte(kTalkmode) != 2) {
+ blank();
+ return;
+ }
+
+ if (data.byte(kCommandtype) != 217) {
+ data.byte(kCommandtype) = 217;
+ commandOnly(50);
+ }
+
+ if (!(data.word(kMousebutton) & 1))
+ return;
+
+ delPointer();
+ createPanel();
+ showPanel();
+ showMan();
+ showExit();
+ convIcons();
+ startTalk();
+ readMouse();
+ showPointer();
+ workToScreenCPP();
+ delPointer();
+}
+
} // End of namespace DreamGen
diff --git a/engines/dreamweb/titles.cpp b/engines/dreamweb/titles.cpp
new file mode 100644
index 0000000000..b653c2cf27
--- /dev/null
+++ b/engines/dreamweb/titles.cpp
@@ -0,0 +1,426 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "dreamweb/dreamweb.h"
+#include "engines/util.h"
+
+namespace DreamGen {
+
+void DreamGenContext::endGame() {
+ loadTempText("DREAMWEB.T83");
+ monkSpeaking();
+ gettingShot();
+ getRidOfTempText();
+ data.byte(kVolumeto) = 7;
+ data.byte(kVolumedirection) = 1;
+ hangOn(200);
+}
+
+void DreamGenContext::monkSpeaking() {
+ // FIXME: This is the CD version only.
+
+ data.byte(kRoomssample) = 35;
+ loadRoomsSample();
+ loadIntoTemp("DREAMWEB.G15");
+ clearWork();
+ showFrame(tempGraphics(), 160, 72, 0, 128); // show monk
+ workToScreen();
+ data.byte(kVolume) = 7;
+ data.byte(kVolumedirection) = (byte)-1;
+ data.byte(kVolumeto) = 5;
+ playChannel0(12, 255);
+ fadeScreenUps();
+ hangOn(300);
+
+ for (int i = 40; i <= 48; i++) {
+ loadSpeech('T', 83, 'T', i);
+
+ playChannel1(50 + 12);
+
+ do {
+ engine->waitForVSync();
+ } while (data.byte(kCh1playing) != 255);
+ }
+
+ data.byte(kVolumedirection) = 1;
+ data.byte(kVolumeto) = 7;
+ fadeScreenDowns();
+ hangOn(300);
+ getRidOfTemp();
+}
+
+void DreamGenContext::gettingShot() {
+ data.byte(kNewlocation) = 55;
+ clearPalette();
+ loadIntroRoom();
+ fadeScreenUps();
+ data.byte(kVolumeto) = 0;
+ data.byte(kVolumedirection) = (byte)-1;
+ runEndSeq();
+ clearBeforeLoad();
+}
+
+void DreamGenContext::bibleQuote() {
+ initGraphics(640, 480, true);
+
+ showPCX("DREAMWEB.I00");
+ fadeScreenUps();
+
+ hangOne(80);
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "biblequotearly"
+ }
+
+ hangOne(560);
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "biblequotearly"
+ }
+
+ fadeScreenDowns();
+
+ hangOne(200);
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "biblequotearly"
+ }
+
+ cancelCh0();
+
+ data.byte(kLasthardkey) = 0;
+}
+
+void DreamGenContext::hangOne(uint16 delay) {
+ do {
+ vSync();
+ if (data.byte(kLasthardkey) == 1)
+ return; // "hangonearly"
+ } while (--delay);
+}
+
+void DreamGenContext::hangOne() {
+ hangOne(cx);
+}
+
+void DreamGenContext::intro() {
+ loadTempText("DREAMWEB.T82");
+ loadPalFromIFF();
+ setMode();
+ data.byte(kNewlocation) = 50;
+ clearPalette();
+ loadIntroRoom();
+ data.byte(kVolume) = 7;
+ data.byte(kVolumedirection) = (byte)-1;
+ data.byte(kVolumeto) = 4;
+ playChannel0(12, 255);
+ fadeScreenUps();
+ runIntroSeq();
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "introearly"
+ }
+
+ clearBeforeLoad();
+ data.byte(kNewlocation) = 52;
+ loadIntroRoom();
+ runIntroSeq();
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "introearly"
+ }
+
+ clearBeforeLoad();
+ data.byte(kNewlocation) = 53;
+ loadIntroRoom();
+ runIntroSeq();
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "introearly"
+ }
+
+ clearBeforeLoad();
+ allPalette();
+ data.byte(kNewlocation) = 54;
+ loadIntroRoom();
+ runIntroSeq();
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "introearly"
+ }
+
+ getRidOfTempText();
+ clearBeforeLoad();
+
+ data.byte(kLasthardkey) = 0;
+}
+
+void DreamGenContext::runIntroSeq() {
+ data.byte(kGetback) = 0;
+
+ do {
+ vSync();
+
+ if (data.byte(kLasthardkey) == 1)
+ break;
+
+ spriteUpdate();
+ vSync();
+
+ if (data.byte(kLasthardkey) == 1)
+ break;
+
+ delEverything();
+ printSprites();
+ reelsOnScreen();
+ afterIntroRoom();
+ useTimedText();
+ vSync();
+
+ if (data.byte(kLasthardkey) == 1)
+ break;
+
+ dumpMap();
+ dumpTimedText();
+ vSync();
+
+ if (data.byte(kLasthardkey) == 1)
+ break;
+
+ } while (data.byte(kGetback) != 1);
+
+
+ if (data.byte(kLasthardkey) == 1) {
+ getRidOfTempText();
+ clearBeforeLoad();
+ }
+
+ // These were not called in this program arc
+ // in the original code.. Bug?
+ //getRidOfTempText();
+ //clearBeforeLoad();
+}
+
+void DreamGenContext::runEndSeq() {
+ atmospheres();
+ data.byte(kGetback) = 0;
+
+ do {
+ vSync();
+ spriteUpdate();
+ vSync();
+ delEverything();
+ printSprites();
+ reelsOnScreen();
+ afterIntroRoom();
+ useTimedText();
+ vSync();
+ dumpMap();
+ dumpTimedText();
+ vSync();
+ } while (data.byte(kGetback) != 1);
+}
+
+void DreamGenContext::loadIntroRoom() {
+ data.byte(kIntrocount) = 0;
+ data.byte(kLocation) = 255;
+ loadRoom();
+ data.word(kMapoffsetx) = 72;
+ data.word(kMapoffsety) = 16;
+ clearSprites();
+ data.byte(kThroughdoor) = 0;
+ data.byte(kCurrentkey) = '0';
+ data.byte(kMainmode) = 0;
+ clearWork();
+ data.byte(kNewobs) = 1;
+ drawFloor();
+ reelsOnScreen();
+ spriteUpdate();
+ printSprites();
+ workToScreenCPP();
+}
+
+void DreamGenContext::set16ColPalette() {
+}
+
+void DreamGenContext::realCredits() {
+ data.byte(kRoomssample) = 33;
+ loadRoomsSample();
+ data.byte(kVolume) = 0;
+
+ initGraphics(640, 480, true);
+ hangOn(35);
+
+ showPCX("DREAMWEB.I01");
+ playChannel0(12, 0);
+
+ hangOne(2);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ allPalette();
+ hangOne(80);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ fadeScreenDowns();
+ hangOne(256);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ showPCX("DREAMWEB.I02");
+ playChannel0(12, 0);
+ hangOne(2);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ allPalette();
+ hangOne(80);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ fadeScreenDowns();
+ hangOne(256);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ showPCX("DREAMWEB.I03");
+ playChannel0(12, 0);
+ hangOne(2);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ allPalette();
+ hangOne(80);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ fadeScreenDowns();
+ hangOne(256);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ showPCX("DREAMWEB.I04");
+ playChannel0(12, 0);
+ hangOne(2);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ allPalette();
+ hangOne(80);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ fadeScreenDowns();
+ hangOne(256);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ showPCX("DREAMWEB.I05");
+ playChannel0(12, 0);
+ hangOne(2);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ allPalette();
+ hangOne(80);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ fadeScreenDowns();
+ hangOne(256);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ showPCX("DREAMWEB.I06");
+ fadeScreenUps();
+ hangOne(60);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ playChannel0(13, 0);
+ hangOne(350);
+
+ if (data.byte(kLasthardkey) == 1) {
+ data.byte(kLasthardkey) = 0;
+ return; // "realcreditsearly"
+ }
+
+ fadeScreenDowns();
+ hangOne(256);
+
+ data.byte(kLasthardkey) = 0;
+}
+
+} // End of namespace DreamGen
diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp
index f6406dc773..d3dda0e0a0 100644
--- a/engines/dreamweb/use.cpp
+++ b/engines/dreamweb/use.cpp
@@ -823,8 +823,7 @@ void DreamGenContext::useGun() {
} else if (data.byte(kReallocation) == 29) {
// aide
data.byte(kGetback) = 1;
- al = 13;
- resetLocation();
+ resetLocation(13);
setLocation(12);
data.byte(kDestpos) = 12;
data.byte(kDestination) = 2;
diff --git a/engines/dreamweb/vgafades.cpp b/engines/dreamweb/vgafades.cpp
index d975d303c9..adbc158c84 100644
--- a/engines/dreamweb/vgafades.cpp
+++ b/engines/dreamweb/vgafades.cpp
@@ -25,6 +25,7 @@
namespace DreamGen {
uint8 *DreamBase::mainPalette() {
+// TODO: Turn these into plain C arrays
return getSegment(data.word(kBuffers)).ptr(kMaingamepal, 256 * 3);
}