[Scummvm-cvs-logs] SF.net SVN: scummvm: [26991] scummvm/trunk/engines/lure

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Mon May 28 13:36:13 CEST 2007


Revision: 26991
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26991&view=rev
Author:   dreammaster
Date:     2007-05-28 04:36:08 -0700 (Mon, 28 May 2007)

Log Message:
-----------
Added saving of scheduled scripts, and set script activation times to match original game

Modified Paths:
--------------
    scummvm/trunk/engines/lure/res_struct.cpp
    scummvm/trunk/engines/lure/res_struct.h

Modified: scummvm/trunk/engines/lure/res_struct.cpp
===================================================================
--- scummvm/trunk/engines/lure/res_struct.cpp	2007-05-28 11:31:31 UTC (rev 26990)
+++ scummvm/trunk/engines/lure/res_struct.cpp	2007-05-28 11:36:08 UTC (rev 26991)
@@ -67,6 +67,12 @@
 		&ewanExtraGraphic1[0], &ewanExtraGraphic2[0]}, 16, NULL}
 };
 
+RoomTranslationRecord roomTranslations[] = {
+	{0x1E, 0x13}, {0x07, 0x08}, {0x1C, 0x12}, {0x26, 0x0F}, 
+	{0x27, 0x0F}, {0x28, 0x0F}, {0x29, 0x0F}, {0x22, 0x0A}, 
+	{0x23, 0x13}, {0x24, 0x14}, {0x31, 0x2C}, {0x2F, 0x2C},
+	{0, 0}};
+
 // Room data holding class
 
 RoomData::RoomData(RoomResource *rec, MemoryBlock *pathData) { 
@@ -701,12 +707,20 @@
 SequenceDelayData::SequenceDelayData(uint16 delay, uint16 seqOffset, bool canClearFlag) {
 	OSystem &system = *g_system;
 
-	// The delay is in number of ticks (1/18th of a second) - convert to milliseconds
-	timeoutCtr = system.getMillis() + (delay * 1000 / 18);
+	// The delay is in number of seconds
+	timeoutCtr = system.getMillis() + delay * 1000;
 	sequenceOffset = seqOffset;
 	canClear = canClearFlag;
 }
 
+SequenceDelayData *SequenceDelayData::load(uint32 delay, uint16 seqOffset, bool canClearFlag) {
+	SequenceDelayData *result = new SequenceDelayData();
+	result->sequenceOffset = seqOffset;
+	result->timeoutCtr = delay;
+	result->canClear = canClearFlag;
+	return result;
+}
+
 void SequenceDelayList::add(uint16 delay, uint16 seqOffset, bool canClear) {
 	SequenceDelayData *entry = new SequenceDelayData(delay, seqOffset, canClear);
 	push_front(entry);
@@ -728,18 +742,45 @@
 	}
 }
 
-void SequenceDelayList::clear() {
+void SequenceDelayList::clear(bool forceClear) {
 	SequenceDelayList::iterator i = begin();
 
 	while (i != end()) {
 		SequenceDelayData *entry = *i;
-		if (entry->canClear)
+		if (entry->canClear || forceClear)
 			i = erase(i);
 		else
 			++i;
 	}
 }
 
+void SequenceDelayList::saveToStream(WriteStream *stream) {
+	uint32 currTime = g_system->getMillis();
+	SequenceDelayList::iterator i;
+
+	for (i = begin(); i != end(); ++i) {
+		SequenceDelayData *entry = *i;
+		stream->writeUint16LE(entry->sequenceOffset);
+		stream->writeUint32LE((currTime > entry->timeoutCtr ) ? 0 : 
+			entry->timeoutCtr - currTime);
+		stream->writeByte(entry->canClear);
+	}
+
+	stream->writeUint16LE(0);
+}
+
+void SequenceDelayList::loadFromStream(ReadStream *stream) {
+	clear(true);
+	uint16 seqOffset;
+	uint32 currTime = g_system->getMillis();
+
+	while ((seqOffset = stream->readUint16LE()) != 0) {
+		uint32 delay = currTime + stream->readUint32LE();
+		bool canClear = stream->readByte() != 0;
+		push_back(SequenceDelayData::load(delay, seqOffset, canClear));
+	}
+}
+
 // The following classes hold the NPC schedule classes
 
 CharacterScheduleEntry::CharacterScheduleEntry(Action theAction, ...) {

Modified: scummvm/trunk/engines/lure/res_struct.h
===================================================================
--- scummvm/trunk/engines/lure/res_struct.h	2007-05-28 11:31:31 UTC (rev 26990)
+++ scummvm/trunk/engines/lure/res_struct.h	2007-05-28 11:36:08 UTC (rev 26991)
@@ -589,8 +589,11 @@
 // The following classes hold any sequence offsets that are being delayed
 
 class SequenceDelayData {
+private:
+	SequenceDelayData() {};
 public:
 	SequenceDelayData(uint16 delay, uint16 seqOffset, bool canClearFlag);
+	static SequenceDelayData *load(uint32 delay, uint16 seqOffset, bool canClearFlag);
 
 	uint32 timeoutCtr;
 	uint16 sequenceOffset;
@@ -601,7 +604,10 @@
 public:
 	void add(uint16 delay, uint16 seqOffset, bool canClear);
 	void tick();
-	void clear();
+	void clear(bool forceClear = false);
+
+	void saveToStream(WriteStream *stream);
+	void loadFromStream(ReadStream *stream);
 };
 
 // The following classes holds the data for NPC schedules
@@ -732,6 +738,13 @@
 
 enum BarmanAction {WALK_AROUND = 1, POLISH_BAR = 2, WAIT = 3, WAIT_DIALOG = 4, SERVE_BEER = 5};
 
+struct RoomTranslationRecord {
+	uint8 srcRoom;
+	uint8 destRoom;
+};
+
+extern RoomTranslationRecord roomTranslations[];
+
 enum StringEnum {S_CREDITS = 25, S_RESTART_GAME = 26, S_SAVE_GAME = 27, S_RESTORE_GAME = 28, 
 	S_QUIT = 29, S_FAST_TEXT = 30, S_SLOW_TEXT = 31, S_SOUND_ON = 32, S_SOUND_OFF = 33, 
 	S_NOTHING = 34, S_FOR = 35, S_TO = 36, S_ON = 37, S_AND_THEN = 38,


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list