diff options
-rw-r--r-- | engines/lure/luredefs.h | 2 | ||||
-rw-r--r-- | engines/lure/res.cpp | 18 | ||||
-rw-r--r-- | engines/lure/res_struct.cpp | 28 | ||||
-rw-r--r-- | engines/lure/res_struct.h | 6 |
4 files changed, 46 insertions, 8 deletions
diff --git a/engines/lure/luredefs.h b/engines/lure/luredefs.h index 9d248d6f1a..5940c1ea41 100644 --- a/engines/lure/luredefs.h +++ b/engines/lure/luredefs.h @@ -36,7 +36,7 @@ namespace Lure { #define LURE_DAT_MAJOR 1 #define LURE_DAT_MINOR 29 #define LURE_MIN_SAVEGAME_MINOR 25 -#define LURE_SAVEGAME_MINOR 31 +#define LURE_SAVEGAME_MINOR 32 #define LURE_DEBUG 1 diff --git a/engines/lure/res.cpp b/engines/lure/res.cpp index a3eb33660d..78ae7ec87f 100644 --- a/engines/lure/res.cpp +++ b/engines/lure/res.cpp @@ -731,15 +731,16 @@ void Resources::saveToStream(Common::WriteStream *stream) { stream->writeUint16LE(_talkingCharacter); // Save sublist data + _hotspotSchedules.saveToStream(stream); _hotspotData.saveToStream(stream); _activeHotspots.saveToStream(stream); - _hotspotSchedules.saveToStream(stream); _fieldList.saveToStream(stream); _randomActions.saveToStream(stream); _barmanLists.saveToStream(stream); _exitJoins.saveToStream(stream); _roomData.saveToStream(stream); _delayList.saveToStream(stream); + _talkData.saveToStream(stream); } void Resources::loadFromStream(Common::ReadStream *stream) { @@ -755,17 +756,16 @@ void Resources::loadFromStream(Common::ReadStream *stream) { _talkState = TALK_NONE; _activeTalkData = NULL; - debugC(ERROR_DETAILED, kLureDebugScripts, "Loading hotspot data"); - _hotspotData.loadFromStream(stream); - debugC(ERROR_DETAILED, kLureDebugScripts, "Loading active hotspots"); - _activeHotspots.loadFromStream(stream); - _hotspotSchedules.clear(); if (saveVersion >= 31) { _hotspotSchedules.loadFromStream(stream); debugC(ERROR_DETAILED, kLureDebugScripts, "Loading hotspot schedules"); } + debugC(ERROR_DETAILED, kLureDebugScripts, "Loading hotspot data"); + _hotspotData.loadFromStream(stream); + debugC(ERROR_DETAILED, kLureDebugScripts, "Loading active hotspots"); + _activeHotspots.loadFromStream(stream); debugC(ERROR_DETAILED, kLureDebugScripts, "Loading fields"); _fieldList.loadFromStream(stream); debugC(ERROR_DETAILED, kLureDebugScripts, "Loading random actions"); @@ -778,6 +778,12 @@ void Resources::loadFromStream(Common::ReadStream *stream) { _roomData.loadFromStream(stream); debugC(ERROR_DETAILED, kLureDebugScripts, "Loading delay list"); _delayList.loadFromStream(stream); + + if (saveVersion >= 32) { + debugC(ERROR_DETAILED, kLureDebugScripts, "Loading talk data"); + _talkData.loadFromStream(stream); + } + debugC(ERROR_DETAILED, kLureDebugScripts, "Finished loading"); } diff --git a/engines/lure/res_struct.cpp b/engines/lure/res_struct.cpp index af13135f61..1123712811 100644 --- a/engines/lure/res_struct.cpp +++ b/engines/lure/res_struct.cpp @@ -692,6 +692,34 @@ TalkEntryData *TalkData::getResponse(int index) { return *i; } +// The following class acts as a container for all the NPC conversations + +void TalkDataList::saveToStream(WriteStream *stream) { + TalkDataList::iterator i; + for (i = begin(); i != end(); ++i) { + TalkData *rec = *i; + TalkEntryList::iterator i; + + for (i = rec->entries.begin(); i != rec->entries.end(); ++i) { + TalkEntryData *entry = *i; + stream->writeUint16LE(entry->descId); + } + } +} + +void TalkDataList::loadFromStream(ReadStream *stream) { + TalkDataList::iterator i; + for (i = begin(); i != end(); ++i) { + TalkData *rec = *i; + TalkEntryList::iterator i; + + for (i = rec->entries.begin(); i != rec->entries.end(); ++i) { + TalkEntryData *entry = *i; + entry->descId = stream->readUint16LE(); + } + } +} + // The following class handles a set of coordinates a character should walk to // if they're to exit a room to a designated secondary room diff --git a/engines/lure/res_struct.h b/engines/lure/res_struct.h index 9469fa939e..b53b254ad4 100644 --- a/engines/lure/res_struct.h +++ b/engines/lure/res_struct.h @@ -589,7 +589,11 @@ public: TalkEntryData *getResponse(int index); }; -typedef ManagedList<TalkData *> TalkDataList; +class TalkDataList: public ManagedList<TalkData *> { +public: + void saveToStream(WriteStream *stream); + void loadFromStream(ReadStream *stream); +}; struct RoomExitCoordinateData { int16 x; |