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.cpp23
1 files changed, 11 insertions, 12 deletions
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 994111df04..0137fd2f85 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -1049,13 +1049,6 @@ void DreamBase::lockMon() {
}
}
-uint16 DreamBase::allocateAndLoad(unsigned int size) {
- // allocatemem adds 32 bytes, so it doesn't matter that size/16 rounds down
- uint16 result = allocateMem(size / 16);
- engine->readFromFile(getSegment(result).ptr(0, size), size);
- return result;
-}
-
void DreamBase::clearAndLoad(uint8 *buf, uint8 c,
unsigned int size, unsigned int maxSize) {
assert(size <= maxSize);
@@ -1368,9 +1361,7 @@ void DreamBase::doChange(uint8 index, uint8 value, uint8 type) {
if (freeObject->mapad[0] == 0xff)
freeObject->mapad[0] = value;
} else { //path
-// getSegment(data.word(kReels)).byte(kPathdata + (type - 100) * 144 + index * 8 + 6) = value;
- PathNode *paths = (PathNode *)getSegment(data.word(kReels)).ptr(kPathdata + 144 * (type - 100), 0);
- paths[index].on = value;
+ _pathData[type - 100].nodes[index].on = value;
}
}
@@ -2168,7 +2159,8 @@ void DreamBase::getRidOfAll() {
_reel1.clear();
_reel2.clear();
_reel3.clear();
- deallocateMem(data.word(kReels));
+ delete[] _reelList;
+ _reelList = 0;
_personText.clear();
_setDesc.clear();
_blockDesc.clear();
@@ -2208,7 +2200,14 @@ void DreamBase::loadRoomData(const Room &room, bool skipDat) {
loadGraphicsSegment(_reel1, len[4]);
loadGraphicsSegment(_reel2, len[5]);
loadGraphicsSegment(_reel3, len[6]);
- data.word(kReels) = allocateAndLoad(len[7]);
+
+ // segment 7 consists of 36*38 pathNodes followed by 'reelList'
+ engine->readFromFile((uint8 *)_pathData, 36*sizeof(RoomPaths));
+ unsigned int reelLen = len[7] - 36*sizeof(RoomPaths);
+ unsigned int reelCount = (reelLen + sizeof(Reel) - 1) / sizeof(Reel);
+ delete[] _reelList;
+ _reelList = new Reel[reelCount];
+ engine->readFromFile((uint8 *)_reelList, reelLen);
// segment 8 consists of 12 personFrames followed by a TextFile
engine->readFromFile((uint8 *)_personFramesLE, 24);