aboutsummaryrefslogtreecommitdiff
path: root/engines/lure/res_struct.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2007-06-22 12:36:04 +0000
committerPaul Gilbert2007-06-22 12:36:04 +0000
commit8b3821e9ff5b60ee75d180514ca8b067bd5a0105 (patch)
tree2e07798aec37da5ec665ac09e08ee6eca231e8f7 /engines/lure/res_struct.cpp
parent707e62e669b227e0baf7a8c976283b32cef20b9d (diff)
downloadscummvm-rg350-8b3821e9ff5b60ee75d180514ca8b067bd5a0105.tar.gz
scummvm-rg350-8b3821e9ff5b60ee75d180514ca8b067bd5a0105.tar.bz2
scummvm-rg350-8b3821e9ff5b60ee75d180514ca8b067bd5a0105.zip
Lots of bugfixes - game is now completable
svn-id: r27606
Diffstat (limited to 'engines/lure/res_struct.cpp')
-rw-r--r--engines/lure/res_struct.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/engines/lure/res_struct.cpp b/engines/lure/res_struct.cpp
index 1ca4394ad3..79bf0dfe6e 100644
--- a/engines/lure/res_struct.cpp
+++ b/engines/lure/res_struct.cpp
@@ -94,6 +94,8 @@ RoomData::RoomData(RoomResource *rec, MemoryBlock *pathData) {
clippingXStart = FROM_LE_16(rec->clippingXStart);
clippingXEnd = FROM_LE_16(rec->clippingXEnd);
+ exitTime = FROM_LE_32(rec->exitTime);
+ areaFlag = rec->areaFlag;
walkBounds.left = FROM_LE_16(rec->walkBounds.xs);
walkBounds.right = FROM_LE_16(rec->walkBounds.xe);
walkBounds.top = FROM_LE_16(rec->walkBounds.ys);
@@ -285,6 +287,7 @@ void RoomDataList::saveToStream(WriteStream *stream) {
for (i = begin(); i != end(); ++i) {
RoomData *rec = *i;
+ stream->writeByte(rec->flags);
const byte *pathData = rec->paths.data();
stream->write(pathData, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH);
}
@@ -296,6 +299,7 @@ void RoomDataList::loadFromStream(ReadStream *stream) {
for (i = begin(); i != end(); ++i) {
RoomData *rec = *i;
+ rec->flags = stream->readByte();
stream->read(data, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH);
rec->paths.load(data);
}
@@ -730,6 +734,7 @@ void SequenceDelayList::add(uint16 delay, uint16 seqOffset, bool canClear) {
}
void SequenceDelayList::tick() {
+ Resources &res = Resources::getReference();
uint32 currTime = g_system->getMillis();
SequenceDelayList::iterator i;
@@ -738,6 +743,15 @@ void SequenceDelayList::tick() {
if (currTime >= entry->timeoutCtr) {
// Timeout reached - delete entry from list and execute the sequence
uint16 seqOffset = entry->sequenceOffset;
+
+ // FIXME: At current speed the player can enter the cave a bit too quickly ahead of Goewin.
+ // Use a hard-coded check to make sure Goewin is in the room
+ if (seqOffset == 0xebd) {
+ Hotspot *goewinHotspot = res.getActiveHotspot(GOEWIN_ID);
+ if (goewinHotspot->roomNumber() != 38)
+ return;
+ }
+
erase(i);
Script::execute(seqOffset);
return;