[Scummvm-cvs-logs] SF.net SVN: scummvm: [26295] scummvm/trunk/engines/parallaction

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sat Mar 24 22:18:09 CET 2007


Revision: 26295
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26295&view=rev
Author:   peres001
Date:     2007-03-24 14:18:08 -0700 (Sat, 24 Mar 2007)

Log Message:
-----------
Added new class Table, and updated Disk accordingly. Tables can be populated after their creation or wrapped around existing arrays. Thus, the old functions (initTable, freeTable and searchTable) have been removed.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/animation.cpp
    scummvm/trunk/engines/parallaction/commands.cpp
    scummvm/trunk/engines/parallaction/dialogue.cpp
    scummvm/trunk/engines/parallaction/disk.cpp
    scummvm/trunk/engines/parallaction/disk.h
    scummvm/trunk/engines/parallaction/location.cpp
    scummvm/trunk/engines/parallaction/parallaction.cpp
    scummvm/trunk/engines/parallaction/parallaction.h
    scummvm/trunk/engines/parallaction/staticres.cpp
    scummvm/trunk/engines/parallaction/zone.cpp

Modified: scummvm/trunk/engines/parallaction/animation.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/animation.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/animation.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -97,9 +97,9 @@
 		}
 		if (!scumm_stricmp(_tokens[0], "type")) {
 			if (_tokens[2][0] != '\0') {
-				vD0->_type = ((4 + searchTable(_tokens[2], const_cast<const char **>(_objectsNames))) << 16) & 0xFFFF0000;
+				vD0->_type = ((4 + _objectsNames->lookup(_tokens[2])) << 16) & 0xFFFF0000;
 			}
-			int16 _si = searchTable(_tokens[1], _zoneTypeNames);
+			int16 _si = _zoneTypeNames->lookup(_tokens[1]);
 			if (_si != -1) {
 				vD0->_type |= 1 << (_si-1);
 				if (((vD0->_type & 0xFFFF) != kZoneNone) && ((vD0->_type & 0xFFFF) != kZoneCommand)) {
@@ -114,7 +114,7 @@
 			uint16 _si = 1;
 
 			do {
-				byte _al = searchTable(_tokens[_si], _zoneFlagNames);
+				byte _al = _zoneFlagNames->lookup(_tokens[_si]);
 				_si++;
 				vD0->_flags |= 1 << (_al - 1);
 			} while (!scumm_stricmp(_tokens[_si++], "|"));
@@ -304,7 +304,7 @@
 		a = findAnimation(&_tokens[1][2]);
 	}
 
-	int16 _si = searchTable(_tokens[0], _instructionNames);
+	int16 _si = _instructionNames->lookup(_tokens[0]);
 	inst->_index = _si;
 
 //	printf("token[0] = %s (%i)\n", _tokens[0], inst->_index);
@@ -395,7 +395,7 @@
 		break;
 
 	case INST_CALL: {	// call
-		int16 _ax = searchTable(_tokens[1], _callableNames);
+		int16 _ax = _callableNames->lookup(_tokens[1]);
 		inst->_opBase._index = _ax - 1;
 		if (_ax - 1 < 0) exit(0);
 	}
@@ -497,7 +497,7 @@
 
 		while ((inst->_index != INST_SHOW) && (a->_flags & kFlagsActing)) {
 
-			debugC(1, kDebugJobs, "Animation: %s, instruction: %s", a->_label._text, inst->_index == INST_END ? "end" : _instructionNames[inst->_index - 1]);
+			debugC(1, kDebugJobs, "Animation: %s, instruction: %s", a->_label._text, inst->_index == INST_END ? "end" : _instructionNamesRes[inst->_index - 1]);
 
 			switch (inst->_index) {
 			case INST_ENDLOOP:	// endloop

Modified: scummvm/trunk/engines/parallaction/commands.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/commands.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/commands.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -59,7 +59,7 @@
 
 		Command *cmd = new Command;
 
-		cmd->_id = _vm->searchTable(_tokens[0], commands_names);
+		cmd->_id = _commandsNames->lookup(_tokens[0]);
 		uint16 _si = 1;
 
 //		printf("cmd id = %i", cmd->_id);
@@ -68,9 +68,9 @@
 		case CMD_SET:	// set
 		case CMD_CLEAR: // clear
 		case CMD_TOGGLE:	// toggle
-			if (_vm->searchTable(_tokens[1], const_cast<const char **>(_globalTable)) == -1) {
+			if (_globalTable->lookup(_tokens[1]) == -1) {
 				do {
-					char _al = _vm->searchTable(_tokens[_si], const_cast<const char **>(_localFlagNames));
+					char _al = _localFlagNames->lookup(_tokens[_si]);
 					_si++;
 					cmd->u._flags |= 1 << (_al - 1);
 				} while (!scumm_stricmp(_tokens[_si++], "|"));
@@ -78,7 +78,7 @@
 			} else {
 				cmd->u._flags |= kFlagsGlobal;
 				do {
-					char _al = _vm->searchTable(_tokens[1], const_cast<const char **>(_globalTable));
+					char _al = _globalTable->lookup(_tokens[1]);
 					_si++;
 					cmd->u._flags |= 1 << (_al - 1);
 				} while (!scumm_stricmp(_tokens[_si++], "|"));
@@ -114,12 +114,12 @@
 			break;
 
 		case CMD_CALL:	// call
-			cmd->u._callable = _vm->searchTable(_tokens[_si], _callableNames) - 1;
+			cmd->u._callable = _callableNames->lookup(_tokens[_si]) - 1;
 			_si++;
 			break;
 
 		case CMD_DROP:	// drop
-			cmd->u._object = _vm->searchTable(_tokens[_si], const_cast<const char **>(_objectsNames));
+			cmd->u._object = _objectsNames->lookup(_tokens[_si]);
 			_si++;
 			break;
 
@@ -146,10 +146,10 @@
 					cmd->_flagsOn |= kFlagsEnter;
 				} else
 				if (!scumm_strnicmp(_tokens[_si], "no", 2)) {
-					byte _al = _vm->searchTable(&_tokens[_si][2], const_cast<const char **>(_localFlagNames));
+					byte _al = _localFlagNames->lookup(&_tokens[_si][2]);
 					cmd->_flagsOff |= 1 << (_al - 1);
 				} else {
-					byte _al = _vm->searchTable(_tokens[_si], const_cast<const char **>(_localFlagNames));
+					byte _al = _localFlagNames->lookup(_tokens[_si]);
 					cmd->_flagsOn |= 1 << (_al - 1);
 				}
 
@@ -171,10 +171,10 @@
 					cmd->_flagsOn |= kFlagsEnter;
 				} else
 				if (!scumm_strnicmp(_tokens[_si], "no", 2)) {
-					byte _al = _vm->searchTable(&_tokens[_si][2], const_cast<const char **>(_globalTable));
+					byte _al = _globalTable->lookup(&_tokens[_si][2]);
 					cmd->_flagsOff |= 1 << (_al - 1);
 				} else {
-					byte _al = _vm->searchTable(_tokens[_si], const_cast<const char **>(_globalTable));
+					byte _al = _globalTable->lookup(_tokens[_si]);
 					cmd->_flagsOn |= 1 << (_al - 1);
 				}
 
@@ -229,7 +229,7 @@
 		if ((cmd->_flagsOn & v8) != cmd->_flagsOn) continue;
 		if ((cmd->_flagsOff & ~v8) != cmd->_flagsOff) continue;
 
-		debugC(1, kDebugLocation, "runCommands: %s (on: %x, off: %x)", commands_names[cmd->_id-1], cmd->_flagsOn, cmd->_flagsOff);
+		debugC(1, kDebugLocation, "runCommands: %s (on: %x, off: %x)", _commandsNamesRes[cmd->_id-1], cmd->_flagsOn, cmd->_flagsOff);
 
 		switch (cmd->_id) {
 

Modified: scummvm/trunk/engines/parallaction/dialogue.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/dialogue.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/dialogue.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -64,7 +64,7 @@
 //	printf("parseDialogue()\n");
 	uint16 num_questions = 0;
 	uint16 v50[20];
-	char *_questions_names[20];
+	Table _questions_names(20);
 	Question *_questions[20];
 
 	for (uint16 _si = 0; _si < 20; _si++) {
@@ -79,8 +79,7 @@
 		_questions[num_questions] = new Dialogue;
 		Dialogue *vB4 = _questions[num_questions];
 
-		_questions_names[num_questions] = (char*)malloc(strlen(_tokens[1])+1);
-		strcpy(_questions_names[num_questions], _tokens[1]);
+		_questions_names.addData(_tokens[1]);
 
 		vB4->_text = parseDialogueString(script);
 //		printf("Question: '%s'\n", vB4->_text);
@@ -93,24 +92,24 @@
 		fillBuffers(script, true);
 		while (scumm_stricmp(_tokens[0], "endquestion")) {	// parse answers
 
-			const char** v60 = const_cast<const char **>(_localFlagNames);
-			uint16 v56 = 1;
-
 			if (_tokens[1][0]) {
 
+				Table* v60 = _localFlagNames;
+				uint16 v56 = 1;
+
 				if (!scumm_stricmp(_tokens[1], "global")) {
 					v56 = 2;
-					v60 = const_cast<const char **>(_globalTable);
+					v60 = _globalTable;
 					vB4->_yesFlags[_di] |= kFlagsGlobal;
 				}
 
 				do {
 
 					if (!scumm_strnicmp(_tokens[v56], "no", 2)) {
-						byte _al = _vm->searchTable(_tokens[v56]+2, v60);
+						byte _al = v60->lookup(_tokens[v56]+2);
 						vB4->_noFlags[_di] |= 1 << (_al - 1);
 					} else {
-						byte _al = _vm->searchTable(_tokens[v56], v60);
+						byte _al = v60->lookup(_tokens[v56]);
 						vB4->_yesFlags[_di] |= 1 << (_al - 1);
 					}
 
@@ -142,14 +141,12 @@
 
 	}
 
-	_questions_names[num_questions] = NULL;
-
 	for (uint16 _si = 0; _si <num_questions; _si++) {
 
 		for (uint16 v5A = 0; v5A < 5; v5A++) {
 			if (_questions[_si]->_answers[v5A] == 0) continue;
 
-			int16 v58 = _vm->searchTable(_questions[_si]->_following._names[v5A], const_cast<const char **>(_questions_names));
+			int16 v58 = _questions_names.lookup(_questions[_si]->_following._names[v5A]);
 			free(_questions[_si]->_following._names[v5A]);
 
 			if (v58 == -1) {
@@ -166,9 +163,6 @@
 		}
 	}
 
-	for (uint16 _si = 0; _si < num_questions; _si++)
-		free(_questions_names[_si]);
-
 	return _questions[0];
 }
 

Modified: scummvm/trunk/engines/parallaction/disk.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/disk.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -68,8 +68,6 @@
 	return;
 }
 
-
-
 #pragma mark -
 
 
@@ -532,8 +530,28 @@
 
 }
 
+Table* DosDisk::loadTable(const char* name) {
+	char path[PATH_LEN];
+	sprintf(path, "%s.tab", name);
 
+	Common::File	stream;
+	if (!stream.open(path))
+		errorFileNotFound(path);
 
+	Table *t = new Table(100);
+
+	fillBuffers(stream);
+	while (scumm_stricmp(_tokens[0], "ENDTABLE")) {
+		t->addData(_tokens[0]);
+		fillBuffers(stream);
+	}
+
+	stream.close();
+
+	return t;
+}
+
+
 #pragma mark -
 
 
@@ -591,7 +609,23 @@
 	return;
 }
 
+Table* AmigaDisk::loadTable(const char* name) {
 
+	char path[PATH_LEN];
+	sprintf(path, "%s.table", name);
 
+	_archive.openArchivedFile(path);
 
+	Table *t = new Table(100);
+
+	fillBuffers(_archive);
+	while (scumm_stricmp(_tokens[0], "ENDTABLE")) {
+		t->addData(_tokens[0]);
+		fillBuffers(_archive);
+	}
+
+	return t;
+}
+
+
 } // namespace Parallaction

Modified: scummvm/trunk/engines/parallaction/disk.h
===================================================================
--- scummvm/trunk/engines/parallaction/disk.h	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/disk.h	2007-03-24 21:18:08 UTC (rev 26295)
@@ -35,6 +35,7 @@
 
 #define MAX_ARCHIVE_ENTRIES 		384
 
+class Table;
 class Parallaction;
 class Gfx;
 class Script;
@@ -101,8 +102,8 @@
 	virtual Cnv* loadFrames(const char* name) = 0;
 	virtual void loadSlide(const char *filename) = 0;
 	virtual void loadScenery(const char* background, const char* mask) = 0;
+	virtual Table* loadTable(const char* name) = 0;
 
-
 };
 
 class DosDisk : public Disk {
@@ -136,6 +137,7 @@
 	Cnv* loadFrames(const char* name);
 	void loadSlide(const char *filename);
 	void loadScenery(const char* background, const char* mask);
+	Table* loadTable(const char* name);
 };
 
 class AmigaDisk : public Disk {
@@ -155,6 +157,7 @@
 	Cnv* loadFrames(const char* name);
 	void loadSlide(const char *filename);
 	void loadScenery(const char* background, const char* mask);
+	Table* loadTable(const char* name);
 };
 
 } // namespace Parallaction

Modified: scummvm/trunk/engines/parallaction/location.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/location.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/location.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -38,7 +38,7 @@
 
 
 void Parallaction::parseLocation(const char *filename) {
-	printf("parseLocation(%s)", filename);
+//	printf("parseLocation(%s)", filename);
     debugC(1, kDebugLocation, "parseLocation('%s')", filename);
 
 	uint16 _si = 1;
@@ -49,7 +49,7 @@
 
 	fillBuffers(*_locationScript, true);
 	while (scumm_stricmp(_tokens[0], "ENDLOCATION")) {
-		printf("token[0] = %s", _tokens[0]);
+//		printf("token[0] = %s", _tokens[0]);
 
 		if (!scumm_stricmp(_tokens[0], "LOCATION")) {
 			// The parameter for location is 'location.mask'.
@@ -106,11 +106,9 @@
 		if (!scumm_stricmp(_tokens[0], "LOCALFLAGS")) {
 			_si = 1;	// _localFlagNames[0] = 'visited'
 			while (_tokens[_si][0] != '\0') {
-				_localFlagNames[_si] = (char*)malloc(strlen(_tokens[_si])+1);
-				strcpy(_localFlagNames[_si], _tokens[_si]);
+				_localFlagNames->addData(_tokens[_si]);
 				_si++;
 			}
-			_localFlagNames[_si] = 0;
 		}
 		if (!scumm_stricmp(_tokens[0], "COMMANDS")) {
 			_location._commands = parseCommands(*_locationScript);
@@ -125,7 +123,7 @@
 				_si = 1;
 
 				do {
-					byte _al = searchTable(_tokens[_si], const_cast<const char **>(_localFlagNames));
+					byte _al = _localFlagNames->lookup(_tokens[_si]);
 					_localFlags[_currentLocationIndex] |= 1 << (_al - 1);
 
 					_si++;
@@ -180,15 +178,13 @@
 void Parallaction::freeLocation() {
 	debugC(7, kDebugLocation, "freeLocation");
 
-	uint16 _si = 1;
-	while (_localFlagNames[_si] != 0) {
-		free(_localFlagNames[_si]);
-		_localFlagNames[_si] = NULL;
-		_si++;
-	}
+	if (_localFlagNames)
+		delete _localFlagNames;
+	_localFlagNames = new Table(120);
+	_localFlagNames->addData("visited");
+
 	debugC(7, kDebugLocation, "freeLocation: localflags names freed");
 
-
 	freeNodeList(_vm->_location._walkNodes._next);
 	_vm->_location._walkNodes._next = NULL;
 	debugC(7, kDebugLocation, "freeLocation: walk nodes freed");

Modified: scummvm/trunk/engines/parallaction/parallaction.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/parallaction.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -55,50 +55,11 @@
 uint16		_language = 0;
 char		_slideText[2][40];
 uint32		_engineFlags = 0;
-char	   *_objectsNames[100];
 Zone	   *_activeZone = NULL;
 
 uint16		_score = 1;
 
 uint32		_localFlags[120] = { 0 };
-
-static char tmp_visited_str[] = "visited";
-
-char *_localFlagNames[32] = {
-	tmp_visited_str, // "visited",
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0
-};
-
 Command *	_forwardedCommands[20] = {
 	NULL,
 	NULL,
@@ -126,8 +87,6 @@
 uint16		_numForwards = 0;
 char		_soundFile[20];
 
-char	   *_globalTable[32];
-
 byte		_mouseHidden = 0;
 
 uint32		_commandFlags = 0;
@@ -167,6 +126,19 @@
 Parallaction::~Parallaction() {
 	delete _midiPlayer;
 	delete _disk;
+	delete _globalTable;
+
+	if (_objectsNames)
+		delete _objectsNames;
+
+	delete _callableNames;
+	delete _commandsNames;
+	delete _instructionNames;
+	delete _zoneTypeNames;
+	delete _zoneFlagNames;
+
+	if (_localFlagNames)
+		delete _localFlagNames;
 }
 
 
@@ -178,6 +150,11 @@
 		return -1;
 	}
 
+	_objectsNames = NULL;
+	_globalTable = NULL;
+	_localFlagNames = NULL;
+	initResources();
+
 	_skipMenu = false;
 
 	_transCurrentHoverItem = 0;
@@ -278,8 +255,7 @@
 }
 
 void Parallaction::initGlobals() {
-
-	initTable("global.tab", _globalTable);
+	_globalTable = _disk->loadTable("global");
 }
 
 // FIXME: the engine has 3 event loops. The following routine hosts the main one,
@@ -721,7 +697,7 @@
 
 
 
-void freeCharacter() {
+void Parallaction::freeCharacter() {
 
 	_vm->_gfx->freeCnv(_vm->_char._normalFrames);
 	if (_vm->_char._normalFrames) delete _vm->_char._normalFrames;
@@ -730,7 +706,8 @@
 		_vm->_gfx->freeCnv(_vm->_char._miniFrames);
 		if (_vm->_char._miniFrames) delete _vm->_char._miniFrames;
 
-		_vm->freeTable(_objectsNames);
+		if (_objectsNames) delete _objectsNames;
+		_objectsNames = NULL;
 
 		_vm->_gfx->freeCnv(_vm->_char._talk);
 		if (_vm->_char._talk) delete _vm->_char._talk;
@@ -829,8 +806,7 @@
 			sprintf(path, "mini%s", v32);
 			_vm->_char._miniFrames = _disk->loadFrames(path);
 
-			sprintf(path, "%s.tab", name);
-			initTable(path, _objectsNames);
+			_objectsNames = _disk->loadTable(name);
 
 			refreshInventory(name);
 
@@ -970,64 +946,42 @@
 }
 
 
-void Parallaction::initTable(const char *path, char** table) {
-//	printf("initTable(%s)\n", path);
 
-	Common::File	stream;
+Table::Table(uint32 size) : _size(size), _used(0), _disposeMemory(true) {
+	_data = (char**)malloc(sizeof(char*)*size);
+}
 
-	if (!stream.open(path))
-		errorFileNotFound(path);
+Table::Table(uint32 size, const char **data) : _size(size), _used(size), _disposeMemory(false) {
+	_data = const_cast<char**>(data);
+}
 
-	uint16 count = 0;
+Table::~Table() {
 
-	fillBuffers(stream);
+	if (!_disposeMemory) return;
 
-	while (scumm_stricmp(_tokens[0], "ENDTABLE")) {
+	for (uint32 i = 0; i < _used; i++)
+		free(_data[i]);
 
-		table[count] = (char*)malloc(strlen(_tokens[0])+1);
-		strcpy(table[count], _tokens[0]);
+	free(_data);
 
-		count++;
-		fillBuffers(stream);
-	}
-
-	table[count] = NULL;
-
-	stream.close();
-
-	return;
-
 }
 
-void Parallaction::freeTable(char** table) {
+void Table::addData(const char* s) {
 
-	uint16 count = 0;
+	if (!(_used < _size))
+		error("Table overflow");
 
-	while (table[count]) {
+	_data[_used++] = strdup(s);
 
-		free(table[count]);
-		table[count] = NULL;
-
-		count++;
-	}
-
-	return;
-
 }
 
-int16 Parallaction::searchTable(const char *s, const char **table) {
+int16 Table::lookup(const char* s) {
 
-	int16 count = 0;
-
-	if (!s) return 0;
-
-	while (table[count]) {
-		if (!scumm_stricmp(table[count], s)) return count + 1;
-		count++;
+	for (uint16 i = 0; i < _used; i++) {
+		if (!scumm_stricmp(_data[i], s)) return i + 1;
 	}
 
 	return -1;
 }
 
-
 } // namespace Parallaction

Modified: scummvm/trunk/engines/parallaction/parallaction.h
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.h	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/parallaction.h	2007-03-24 21:18:08 UTC (rev 26295)
@@ -118,20 +118,13 @@
 extern uint16 _introSarcData3;		 // sarcophagus stuff to be saved
 extern uint16 _introSarcData2;		 // sarcophagus stuff to be saved
 
-extern char *_globalTable[];
 extern char _saveData1[];
 extern byte _mouseHidden;
 extern uint32 _commandFlags;
 
-extern char *_objectsNames[];
-extern const char *_zoneTypeNames[];
-extern const char *_zoneFlagNames[];
-extern char *_localFlagNames[];
-extern const char *commands_names[];
+extern const char *_instructionNamesRes[];
+extern const char *_commandsNamesRes[];
 
-extern const char *_instructionNames[];
-extern const char *_callableNames[];
-
 extern const char *_dinoName;
 extern const char *_donnaName;
 extern const char *_doughName;
@@ -264,6 +257,26 @@
 
 };
 
+
+class Table {
+
+	char	**_data;
+	uint16	_size;
+	uint16	_used;
+	bool	_disposeMemory;
+
+public:
+	Table(uint32 size);
+	Table(uint32 size, const char** data);
+
+	~Table();
+
+	void addData(const char* s);
+
+	int16 lookup(const char* s);
+};
+
+
 class Parallaction : public Engine {
 
 public:
@@ -283,9 +296,9 @@
 
 	void waitTime(uint32 t);
 
-	static void initTable(const char *path, char **table);
-	static void freeTable(char** table);
-	static int16 searchTable(const char *s, const char **table);
+//	static void initTable(const char *path, char **table);
+//	static void freeTable(char** table);
+//	static int16 searchTable(const char *s, const char **table);
 
 	void parseLocation(const char *filename);
 	void changeCursor(int32 index);
@@ -301,6 +314,15 @@
 	void resumeJobs();
 	void runJobs();
 
+	Table		*_globalTable;
+	Table		*_objectsNames;
+	Table		*_zoneTypeNames;
+	Table		*_zoneFlagNames;
+	Table		*_commandsNames;
+	Table		*_callableNames;
+	Table		*_instructionNames;
+	Table		*_localFlagNames;
+
 	void 		freeZones(Node *list);
 	Animation  	*findAnimation(const char *name);
 	Zone 		*findZone(const char *name);
@@ -418,7 +440,10 @@
 
 	Command 	*parseCommands(Script &script);
 	void 		freeCommands(Command*);
+	void 		freeCharacter();
 
+	void 		initResources();
+
 };
 
 // FIXME: remove global

Modified: scummvm/trunk/engines/parallaction/staticres.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/staticres.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/staticres.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -20,8 +20,10 @@
  *
  */
 
+#include "parallaction/parallaction.h"
 #include "parallaction/graphics.h"
 
+
 namespace Parallaction {
 
 byte Gfx::_mouseArrow[256] = {
@@ -45,7 +47,7 @@
 
 
 
-const char *_zoneFlagNames[] = {
+const char *_zoneFlagNamesRes[] = {
 	"closed",
 	"active",
 	"remove",
@@ -57,11 +59,10 @@
 	"looping",
 	"added",
 	"character",
-	"nowalk",
-	0
+	"nowalk"
 };
 
-const char *_zoneTypeNames[] = {
+const char *_zoneTypeNamesRes[] = {
 	"examine",
 	"door",
 	"get",
@@ -73,8 +74,7 @@
 	"none",
 	"trap",
 	"yourself",
-	"Command",
-	0
+	"Command"
 };
 
 const char _gameNames[10][20] = {
@@ -90,7 +90,7 @@
 	"GAME10"
 };
 
-const char *commands_names[] = {
+const char *_commandsNamesRes[] = {
 	"set",
 	"clear",
 	"start",
@@ -106,11 +106,10 @@
 	"drop",
 	"quit",
 	"move",
-	"stop",
-	0
+	"stop"
 };
 
-const char *_instructionNames[] = {
+const char *_instructionNamesRes[] = {
 	"on",
 	"off",
 	"x",
@@ -128,11 +127,10 @@
 	"wait",
 	"start",
 	"sound",
-	"move",
-	0
+	"move"
 };
 
-const char *_callableNames[] = {
+const char *_callableNamesRes[] = {
 	"HBOff",
 	"Projector",
 	"StartIntro",
@@ -157,8 +155,7 @@
 	"Frankenstain",
 	"Finito",
 	"Ridux",
-	"TestResult",
-	0
+	"TestResult"
 };
 
 
@@ -238,4 +235,18 @@
 const char *_minidrkiName = "minidrki";
 
 
+void Parallaction::initResources() {
+
+	_callableNames = new Table(ARRAYSIZE(_callableNamesRes), _callableNamesRes);
+	_instructionNames = new Table(ARRAYSIZE(_instructionNamesRes), _instructionNamesRes);
+	_zoneFlagNames = new Table(ARRAYSIZE(_zoneFlagNamesRes), _zoneFlagNamesRes);
+	_zoneTypeNames = new Table(ARRAYSIZE(_zoneTypeNamesRes), _zoneTypeNamesRes);
+	_commandsNames = new Table(ARRAYSIZE(_commandsNamesRes), _commandsNamesRes);
+
+	_localFlagNames = new Table(120);
+	_localFlagNames->addData("visited");
+
+}
+
+
 } // namespace Parallaction

Modified: scummvm/trunk/engines/parallaction/zone.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/zone.cpp	2007-03-24 19:55:34 UTC (rev 26294)
+++ scummvm/trunk/engines/parallaction/zone.cpp	2007-03-24 21:18:08 UTC (rev 26295)
@@ -80,9 +80,9 @@
 		}
 		if (!scumm_stricmp(_tokens[0], "type")) {
 			if (_tokens[2][0] != '\0') {
-				z->_type = (4 + searchTable(_tokens[2], const_cast<const char **>(_objectsNames))) << 16;
+				z->_type = (4 + _objectsNames->lookup(_tokens[2])) << 16;
 			}
-			int16 _si = searchTable(_tokens[1], _zoneTypeNames);
+			int16 _si = _zoneTypeNames->lookup(_tokens[1]);
 			if (_si != -1) {
 				z->_type |= 1 << (_si - 1);
 				parseZoneTypeBlock(script, z);
@@ -100,7 +100,7 @@
 			uint16 _si = 1;
 
 			do {
-				char _al = searchTable(_tokens[_si], _zoneFlagNames);
+				char _al = _zoneFlagNames->lookup(_tokens[_si]);
 				_si++;
 				z->_flags |= 1 << (_al - 1);
 			} while (!scumm_stricmp(_tokens[_si++], "|"));
@@ -307,19 +307,19 @@
 			}
 
 			if (!scumm_stricmp(_tokens[0], "icon")) {
-				u->get->_icon = 4 + searchTable(_tokens[1], const_cast<const char **>(_objectsNames));
+				u->get->_icon = 4 + _objectsNames->lookup(_tokens[1]);
 			}
 			break;
 
 		case kZoneMerge: // merge Zone init
 			if (!scumm_stricmp(_tokens[0], "obj1")) {
-				u->merge->_obj1 = 4 + searchTable(_tokens[1], const_cast<const char **>(_objectsNames));
+				u->merge->_obj1 = 4 + _objectsNames->lookup(_tokens[1]);
 			}
 			if (!scumm_stricmp(_tokens[0], "obj2")) {
-				u->merge->_obj2 = 4 + searchTable(_tokens[1], const_cast<const char **>(_objectsNames));
+				u->merge->_obj2 = 4 + _objectsNames->lookup(_tokens[1]);
 			}
 			if (!scumm_stricmp(_tokens[0], "newobj")) {
-				u->merge->_obj3 = 4 + searchTable(_tokens[1], const_cast<const char **>(_objectsNames));
+				u->merge->_obj3 = 4 + _objectsNames->lookup(_tokens[1]);
 			}
 			break;
 


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