[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