aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/stubs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dreamweb/stubs.cpp')
-rw-r--r--engines/dreamweb/stubs.cpp81
1 files changed, 28 insertions, 53 deletions
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index e9f1ea4f51..994111df04 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -658,6 +658,11 @@ done: // The engine will need some cleaner finalization, let's put it here for n
_reel1.clear();
_reel2.clear();
_reel3.clear();
+ _setDesc.clear();
+ _blockDesc.clear();
+ _roomDesc.clear();
+ _freeDesc.clear();
+ _personText.clear();
_textFile1.clear();
_textFile2.clear();
@@ -773,31 +778,6 @@ void DreamBase::switchRyanOff() {
data.byte(kRyanon) = 1;
}
-uint16 DreamBase::standardLoad(const char *fileName, uint16 *outSizeInBytes) {
- FileHeader header;
-
- Common::File file;
- file.open(fileName);
- file.read((uint8 *)&header, sizeof(FileHeader));
- uint16 sizeInBytes = header.len(0);
- if (outSizeInBytes)
- *outSizeInBytes = sizeInBytes;
- uint16 result = allocateMem((sizeInBytes + 15) / 16);
- file.read(getSegment(result).ptr(0, 0), sizeInBytes);
- return result;
-}
-
-void *DreamBase::standardLoadCPP(const char *fileName, uint16 *outSizeInBytes) {
- uint16 sizeInBytes;
- uint16 seg = standardLoad(fileName, &sizeInBytes);
- void *buffer = malloc(sizeInBytes);
- memcpy(buffer, getSegment(seg).ptr(0, 0), sizeInBytes);
- deallocateMem(seg);
- if (outSizeInBytes)
- *outSizeInBytes = sizeInBytes;
- return buffer;
-}
-
void DreamBase::loadGraphicsFile(GraphicsFile &file, const char *fileName) {
FileHeader header;
@@ -1248,20 +1228,16 @@ bool DreamBase::checkIfEx(uint8 x, uint8 y) {
const uint8 *DreamBase::findObName(uint8 type, uint8 index) {
if (type == 5) {
- uint16 i = 64 * 2 * (index & 127);
- uint16 offset = getSegment(data.word(kPeople)).word(kPersontxtdat + i) + kPersontext;
- return getSegment(data.word(kPeople)).ptr(offset, 0);
+ uint16 i = 64 * (index & 127);
+ return (const uint8 *)_personText.getString(i);
} else if (type == 4) {
return (const uint8 *)_exText.getString(index);
} else if (type == 2) {
- uint16 offset = getSegment(data.word(kFreedesc)).word(kFreetextdat + index * 2) + kFreetext;
- return getSegment(data.word(kFreedesc)).ptr(offset, 0);
+ return (const uint8 *)_freeDesc.getString(index);
} else if (type == 1) {
- uint16 offset = getSegment(data.word(kSetdesc)).word(kSettextdat + index * 2) + kSettext;
- return getSegment(data.word(kSetdesc)).ptr(offset, 0);
+ return (const uint8 *)_setDesc.getString(index);
} else {
- uint16 offset = getSegment(data.word(kBlockdesc)).word(kBlocktextdat + index * 2) + kBlocktext;
- return getSegment(data.word(kBlockdesc)).ptr(offset, 0);
+ return (const uint8 *)_blockDesc.getString(index);
}
}
@@ -1736,9 +1712,8 @@ bool DreamBase::isRyanHolding(const char *id) {
}
bool DreamBase::isItDescribed(const ObjPos *pos) {
- uint16 offset = getSegment(data.word(kSetdesc)).word(kSettextdat + pos->index * 2);
- uint8 result = getSegment(data.word(kSetdesc)).byte(kSettext + offset);
- return result != 0;
+ const char *string = _setDesc.getString(pos->index);
+ return string[0] != 0;
}
bool DreamBase::isCD() {
@@ -2050,8 +2025,7 @@ void DreamBase::roomName() {
textIndex -= 32;
data.word(kLinespacing) = 7;
uint8 maxWidth = (data.byte(kWatchon) == 1) ? 120 : 160;
- uint16 descOffset = getSegment(data.word(kRoomdesc)).word(kIntextdat + textIndex * 2);
- const uint8 *string = getSegment(data.word(kRoomdesc)).ptr(kIntext + descOffset, 0);
+ const uint8 *string = (const uint8 *)_roomDesc.getString(textIndex);
printDirect(string, 88, 25, maxWidth, false);
data.word(kLinespacing) = 10;
useCharset1();
@@ -2142,8 +2116,7 @@ void DreamBase::doLook() {
data.byte(kCommandtype) = 255;
dumpTextLine();
uint8 index = data.byte(kRoomnum) & 31;
- uint16 offset = getSegment(data.word(kRoomdesc)).word(kIntextdat + index * 2);
- const uint8 *string = getSegment(data.word(kRoomdesc)).ptr(kIntext, 0) + offset;
+ const uint8 *string = (const uint8 *)_roomDesc.getString(index);
findNextColon(&string);
uint16 x;
if (data.byte(kReallocation) < 50)
@@ -2196,12 +2169,12 @@ void DreamBase::getRidOfAll() {
_reel2.clear();
_reel3.clear();
deallocateMem(data.word(kReels));
- deallocateMem(data.word(kPeople));
- deallocateMem(data.word(kSetdesc));
- deallocateMem(data.word(kBlockdesc));
- deallocateMem(data.word(kRoomdesc));
+ _personText.clear();
+ _setDesc.clear();
+ _blockDesc.clear();
+ _roomDesc.clear();
_freeFrames.clear();
- deallocateMem(data.word(kFreedesc));
+ _freeDesc.clear();
}
// if skipDat, skip clearing and loading Setdat and Freedat
@@ -2236,18 +2209,20 @@ void DreamBase::loadRoomData(const Room &room, bool skipDat) {
loadGraphicsSegment(_reel2, len[5]);
loadGraphicsSegment(_reel3, len[6]);
data.word(kReels) = allocateAndLoad(len[7]);
- data.word(kPeople) = allocateAndLoad(len[8]);
- // TODO: kSetdesc, kBlockdesc, kRoomdesc are also TextFiles?
- data.word(kSetdesc) = allocateAndLoad(len[9]);
- data.word(kBlockdesc) = allocateAndLoad(len[10]);
- data.word(kRoomdesc) = allocateAndLoad(len[11]);
+
+ // segment 8 consists of 12 personFrames followed by a TextFile
+ engine->readFromFile((uint8 *)_personFramesLE, 24);
+ loadTextSegment(_personText, len[8] - 24);
+
+ loadTextSegment(_setDesc, len[9]);
+ loadTextSegment(_blockDesc, len[10]);
+ loadTextSegment(_roomDesc, len[11]);
loadGraphicsSegment(_freeFrames, len[12]);
if (!skipDat)
clearAndLoad(data.word(kFreedat), 255, len[13], kFreedatlen);
else
engine->skipBytes(len[13]);
- // TODO: kFreedesc is also a TextFile?
- data.word(kFreedesc) = allocateAndLoad(len[14]);
+ loadTextSegment(_freeDesc, len[14]);
engine->closeFile();
}