[Scummvm-cvs-logs] SF.net SVN: scummvm: [30125] scummvm/trunk/engines/cine

sev at users.sourceforge.net sev at users.sourceforge.net
Tue Jan 1 17:57:05 CET 2008


Revision: 30125
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30125&view=rev
Author:   sev
Date:     2008-01-01 08:57:03 -0800 (Tue, 01 Jan 2008)

Log Message:
-----------
Slightly modified patch #1848173: "ScriptVars class implementation for CinE"

Modified Paths:
--------------
    scummvm/trunk/engines/cine/cine.cpp
    scummvm/trunk/engines/cine/object.cpp
    scummvm/trunk/engines/cine/object.h
    scummvm/trunk/engines/cine/prc.h
    scummvm/trunk/engines/cine/script.cpp
    scummvm/trunk/engines/cine/script.h
    scummvm/trunk/engines/cine/various.cpp

Modified: scummvm/trunk/engines/cine/cine.cpp
===================================================================
--- scummvm/trunk/engines/cine/cine.cpp	2008-01-01 16:42:05 UTC (rev 30124)
+++ scummvm/trunk/engines/cine/cine.cpp	2008-01-01 16:57:03 UTC (rev 30125)
@@ -129,7 +129,6 @@
 	}
 
 	memset(objectTable, 0, sizeof(objectTable));
-	memset(globalVars, 0, sizeof(globalVars));
 	memset(scriptTable, 0, sizeof(scriptTable));
 	memset(messageTable, 0, sizeof(messageTable));
 	memset(relTable, 0, sizeof(relTable));

Modified: scummvm/trunk/engines/cine/object.cpp
===================================================================
--- scummvm/trunk/engines/cine/object.cpp	2008-01-01 16:42:05 UTC (rev 30124)
+++ scummvm/trunk/engines/cine/object.cpp	2008-01-01 16:57:03 UTC (rev 30125)
@@ -36,7 +36,7 @@
 namespace Cine {
 
 objectStruct objectTable[NUM_MAX_OBJECT];
-uint16 globalVars[NUM_MAX_VAR];
+ScriptVars globalVars(NUM_MAX_VAR);
 overlayHeadElement overlayHead;
 
 void unloadAllMasks(void) {

Modified: scummvm/trunk/engines/cine/object.h
===================================================================
--- scummvm/trunk/engines/cine/object.h	2008-01-01 16:42:05 UTC (rev 30124)
+++ scummvm/trunk/engines/cine/object.h	2008-01-01 16:57:03 UTC (rev 30125)
@@ -26,6 +26,8 @@
 #ifndef CINE_OBJECT_H
 #define CINE_OBJECT_H
 
+#include "script.h"
+
 namespace Cine {
 
 struct objectStruct {
@@ -53,7 +55,7 @@
 #define NUM_MAX_VAR 256
 
 extern objectStruct objectTable[NUM_MAX_OBJECT];
-extern uint16 globalVars[NUM_MAX_VAR];
+extern ScriptVars globalVars;
 
 extern overlayHeadElement overlayHead;
 

Modified: scummvm/trunk/engines/cine/prc.h
===================================================================
--- scummvm/trunk/engines/cine/prc.h	2008-01-01 16:42:05 UTC (rev 30124)
+++ scummvm/trunk/engines/cine/prc.h	2008-01-01 16:57:03 UTC (rev 30125)
@@ -31,7 +31,7 @@
 struct prcLinkedListStruct {
 	struct prcLinkedListStruct *next;
 	int16 stack[SCRIPT_STACK_SIZE];
-	int16 localVars[50];
+	ScriptVars localVars;
 	uint16 compareResult;
 	uint16 scriptPosition;
 	byte *scriptPtr;

Modified: scummvm/trunk/engines/cine/script.cpp
===================================================================
--- scummvm/trunk/engines/cine/script.cpp	2008-01-01 16:42:05 UTC (rev 30124)
+++ scummvm/trunk/engines/cine/script.cpp	2008-01-01 16:57:03 UTC (rev 30125)
@@ -453,6 +453,86 @@
 	return val;
 }
 
+// empty array
+ScriptVars::ScriptVars(unsigned int len) : _size(len), _vars(new int16[len]) {
+	assert(_vars);
+	reset();
+}
+
+// read game save, for later use
+ScriptVars::ScriptVars(Common::InSaveFile &fHandle, unsigned int len)
+	: _size(len), _vars(new int16[len]) {
+
+	assert(_vars);
+
+	load(fHandle);
+}
+
+// copy constructor
+ScriptVars::ScriptVars(const ScriptVars &src) : _size(src._size), _vars(new int16[_size]) {
+	assert(_vars);
+	memcpy(_vars, src._vars, _size * sizeof(int16));
+}
+
+ScriptVars::~ScriptVars(void) {
+	delete[] _vars;
+}
+
+ScriptVars &ScriptVars::operator=(const ScriptVars &src) {
+	ScriptVars tmp(src);
+	int16 *tmpvars = _vars;
+
+	_vars = tmp._vars;
+	tmp._vars = tmpvars;
+	_size = src._size;
+
+	return *this;
+}
+
+// array access
+int16 &ScriptVars::operator[](unsigned int idx) {
+	debugN(5, "assert(%d < %d)", idx, _size);
+	assert(idx < _size);
+	return _vars[idx];
+}
+
+int16 ScriptVars::operator[](unsigned int idx) const {
+	debugN(5, "assert(%d < %d)\n", idx, _size);
+	assert(idx < _size);
+	return _vars[idx];
+}
+
+// dump to savefile
+void ScriptVars::save(Common::OutSaveFile &fHandle) {
+	save(fHandle, _size);
+}
+
+// globalVars[255] is not written to savefiles...
+void ScriptVars::save(Common::OutSaveFile &fHandle, unsigned int len) {
+	debugN(5, "assert(%d <= %d)\n", len, _size);
+	assert(len <= _size);
+	for (unsigned int i = 0; i < len; i++) {
+		fHandle.writeUint16BE(_vars[i]);
+	}
+}
+
+// read from savefile
+void ScriptVars::load(Common::InSaveFile &fHandle) {
+	load(fHandle, _size);
+}
+
+void ScriptVars::load(Common::InSaveFile &fHandle, unsigned int len) {
+	debugN(5, "assert(%d <= %d)\n", len, _size);
+	assert(len <= _size);
+	for (unsigned int i = 0; i < len; i++) {
+		_vars[i] = fHandle.readUint16BE();
+	}
+}
+
+void ScriptVars::reset(void) {
+	memset( _vars, 0, _size * sizeof(int16));
+}
+
 void addGfxElementA0(int16 param1, int16 param2) {
 	overlayHeadElement *currentHead = &overlayHead;
 	overlayHeadElement *tempHead = currentHead;
@@ -661,10 +741,6 @@
 		pNewElement->stack[i] = scriptTable[idx].stack[i];
 	}
 
-	for (i = 0; i < 50; i++) {
-		pNewElement->localVars[i] = 0;
-	}
-
 	pNewElement->compareResult = 0;
 	pNewElement->scriptPosition = 0;
 

Modified: scummvm/trunk/engines/cine/script.h
===================================================================
--- scummvm/trunk/engines/cine/script.h	2008-01-01 16:42:05 UTC (rev 30124)
+++ scummvm/trunk/engines/cine/script.h	2008-01-01 16:57:03 UTC (rev 30125)
@@ -26,10 +26,34 @@
 #ifndef CINE_SCRIPT_H
 #define CINE_SCRIPT_H
 
+#include "common/savefile.h"
+
 namespace Cine {
 
 #define SCRIPT_STACK_SIZE 50
 
+class ScriptVars {
+private:
+	unsigned int _size;
+	int16 *_vars;
+
+public:
+	explicit ScriptVars(unsigned int len = 50);
+	ScriptVars(Common::InSaveFile &fHandle, unsigned int len = 50);
+	ScriptVars(const ScriptVars &src);
+	~ScriptVars(void);
+
+	ScriptVars &operator=(const ScriptVars &src);
+	int16 &operator[](unsigned int idx);
+	int16 operator[](unsigned int idx) const;
+
+	void save(Common::OutSaveFile &fHandle);
+	void save(Common::OutSaveFile &fHandle, unsigned int len);
+	void load(Common::InSaveFile &fHandle);
+	void load(Common::InSaveFile &fHandle, unsigned int len);
+	void reset(void);
+};
+
 struct ScriptStruct {
 	byte *ptr;
 	uint16 size;

Modified: scummvm/trunk/engines/cine/various.cpp
===================================================================
--- scummvm/trunk/engines/cine/various.cpp	2008-01-01 16:42:05 UTC (rev 30124)
+++ scummvm/trunk/engines/cine/various.cpp	2008-01-01 16:57:03 UTC (rev 30125)
@@ -170,10 +170,6 @@
 		pNewElement->stack[i] = 0;
 	}
 
-	for (i = 0; i < 50; i++) {
-		pNewElement->localVars[i] = 0;
-	}
-
 	pNewElement->compareResult = 0;
 	pNewElement->scriptPosition = 0;
 
@@ -328,8 +324,7 @@
 	for (i = 0; i < SCRIPT_STACK_SIZE; i++)
 		newElement->stack[i] = fHandle->readUint16BE();
 
-	for (i = 0; i < 50; i++)
-		newElement->localVars[i] = fHandle->readUint16BE();
+	newElement->localVars.load(*fHandle);
 
 	newElement->compareResult = fHandle->readUint16BE();
 	newElement->scriptPosition = fHandle->readUint16BE();
@@ -454,9 +449,7 @@
 		objectTable[i].costume = 0;
 	}
 
-	for (i = 0; i < 255; i++) {
-		globalVars[i] = 0;
-	}
+	globalVars.reset();
 
 	var2 = var3 = var4 = var5 = 0;
 
@@ -519,9 +512,7 @@
 		tempPalette[i] = fHandle->readUint16BE();
 	}
 
-	for (i = 0; i < 255; i++) {
-		globalVars[i] = fHandle->readUint16BE();
-	}
+	globalVars.load(*fHandle, NUM_MAX_VAR - 1);
 
 	for (i = 0; i < 16; i++) {
 		zoneData[i] = fHandle->readUint16BE();
@@ -682,9 +673,7 @@
 		fHandle->writeUint16BE(tempPalette[i]);
 	}
 
-	for (i = 0; i < 255; i++) {
-		fHandle->writeUint16BE(globalVars[i]);
-	}
+	globalVars.save(*fHandle, NUM_MAX_VAR - 1);
 
 	for (i = 0; i < 16; i++) {
 		fHandle->writeUint16BE(zoneData[i]);
@@ -756,9 +745,7 @@
 				fHandle->writeUint16BE(currentHead->stack[i]);
 			}
 
-			for (i = 0; i < 50; i++) {
-				fHandle->writeUint16BE(currentHead->localVars[i]);
-			}
+			currentHead->localVars.save(*fHandle);
 
 			fHandle->writeUint16BE(currentHead->compareResult);
 			fHandle->writeUint16BE(currentHead->scriptPosition);
@@ -787,9 +774,7 @@
 				fHandle->writeUint16BE(currentHead->stack[i]);
 			}
 
-			for (i = 0; i < 50; i++) {
-				fHandle->writeUint16BE(currentHead->localVars[i]);
-			}
+			currentHead->localVars.save(*fHandle);
 
 			fHandle->writeUint16BE(currentHead->compareResult);
 			fHandle->writeUint16BE(currentHead->scriptPosition);


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