[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