[Scummvm-cvs-logs] SF.net SVN: scummvm: [26164] scummvm/trunk/engines/parallaction
peres001 at users.sourceforge.net
peres001 at users.sourceforge.net
Sat Mar 17 14:14:51 CET 2007
Revision: 26164
http://scummvm.svn.sourceforge.net/scummvm/?rev=26164&view=rev
Author: peres001
Date: 2007-03-17 06:14:50 -0700 (Sat, 17 Mar 2007)
Log Message:
-----------
- Made Node a superclass for Zone, WalkNode, Command, Instruction, Program and Job.
- Moved Job list management inside Parallaction (because constructors for global variables are not always invoked on some platforms)
Modified Paths:
--------------
scummvm/trunk/engines/parallaction/animation.cpp
scummvm/trunk/engines/parallaction/callables.cpp
scummvm/trunk/engines/parallaction/commands.cpp
scummvm/trunk/engines/parallaction/defs.h
scummvm/trunk/engines/parallaction/inventory.cpp
scummvm/trunk/engines/parallaction/location.cpp
scummvm/trunk/engines/parallaction/parallaction.cpp
scummvm/trunk/engines/parallaction/parallaction.h
scummvm/trunk/engines/parallaction/walk.cpp
scummvm/trunk/engines/parallaction/zone.cpp
scummvm/trunk/engines/parallaction/zone.h
Modified: scummvm/trunk/engines/parallaction/animation.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/animation.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/animation.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -67,7 +67,7 @@
while (v4) {
if (!scumm_stricmp(name, v4->_zone._label._text)) return v4;
- v4 = (Animation*)v4->_zone._node._next;
+ v4 = (Animation*)v4->_zone._next;
}
return NULL;
@@ -83,7 +83,7 @@
vD0->_zone._label._text = (char*)malloc(strlen(name)+1);
strcpy(vD0->_zone._label._text, name);
- addNode(list, &vD0->_zone._node);
+ addNode(list, &vD0->_zone);
fillBuffers(script, true);
while (scumm_stricmp(_tokens[0], "endanimation")) {
@@ -160,7 +160,7 @@
if (!program) return;
free(program->_locals);
- freeNodeList(&program->_node);
+ freeNodeList(program);
return;
}
@@ -172,7 +172,7 @@
while (v4) {
freeScript(v4->_program);
_vm->_gfx->freeCnv(&v4->_cnv);
- v4 = (Animation*)v4->_zone._node._next;
+ v4 = (Animation*)v4->_zone._next;
}
return;
@@ -188,7 +188,7 @@
uint16 _si = 0;
- for ( ; v18; v18 = (Animation*)v18->_zone._node._next) {
+ for ( ; v18; v18 = (Animation*)v18->_zone._next) {
if ((v18->_zone._flags & kFlagsActive) && ((v18->_zone._flags & kFlagsRemove) == 0)) {
v14._width = v18->_cnv._width;
@@ -229,7 +229,7 @@
Animation *a = (Animation*)_animations._next;
- for (; a; a=(Animation*)a->_zone._node._next) {
+ for (; a; a=(Animation*)a->_zone._next) {
if (((a->_zone._flags & kFlagsActive) == 0) && ((a->_zone._flags & kFlagsRemove) == 0)) continue;
@@ -262,7 +262,7 @@
a->_program = (Program*)malloc(sizeof(Program));
memset(a->_program, 0, sizeof(Program));
a->_program->_locals = (LocalVariable*)malloc(sizeof(LocalVariable)*10);
- Node *vD0 = &a->_program->_node;
+ Node *vD0 = a->_program;
Instruction *vCC = (Instruction*)malloc(sizeof(Instruction));
memset(vCC, 0, sizeof(Instruction));
@@ -270,8 +270,8 @@
while (scumm_stricmp(_tokens[0], "endscript")) {
parseScriptLine(vCC, a, a->_program->_locals);
- addNode(vD0, &vCC->_node);
- vD0 = &vCC->_node;
+ addNode(vD0, vCC);
+ vD0 = vCC;
vCC = (Instruction*)malloc(sizeof(Instruction));
memset(vCC, 0, sizeof(Instruction));
@@ -279,11 +279,11 @@
}
vCC->_index = INST_END;
- addNode(vD0, &vCC->_node);
+ addNode(vD0, vCC);
delete script;
- a->_program->_ip = (Instruction*)a->_program->_node._next;
+ a->_program->_ip = (Instruction*)a->_program->_next;
return;
}
@@ -490,7 +490,7 @@
WalkNode *v4 = NULL;
if (a->_zone._flags & kFlagsCharacter) a->_z = a->_zone.pos._position._y + a->_cnv._height;
- for ( ; a; a = (Animation*)a->_zone._node._next) {
+ for ( ; a; a = (Animation*)a->_zone._next) {
if ((a->_zone._flags & kFlagsActing) == 0) continue;
Instruction *inst = a->_program->_ip;
@@ -566,7 +566,7 @@
case INST_MOVE: // move
v4 = buildWalkPath(*inst->_opA._pvalue, *inst->_opB._pvalue);
- addJob(jobWalk, v4, kPriority19 );
+ _vm->addJob(jobWalk, v4, kPriority19 );
_engineFlags |= kEngineWalking;
break;
@@ -591,7 +591,7 @@
a->_zone._flags &= ~kFlagsActing;
runCommands(a->_zone._commands, (Zone*)&a->_zone);
}
- a->_program->_ip = (Instruction*)a->_program->_node._next;
+ a->_program->_ip = (Instruction*)a->_program->_next;
goto label1;
@@ -625,10 +625,10 @@
}
- inst = (Instruction*)inst->_node._next;
+ inst = (Instruction*)inst->_next;
}
- a->_program->_ip = (Instruction*)inst->_node._next;
+ a->_program->_ip = (Instruction*)inst->_next;
label1:
if (a->_zone._flags & kFlagsCharacter)
@@ -672,9 +672,9 @@
v8 = v8->_next;
}
- v4 = (Animation*)vC->_zone._node._next;
+ v4 = (Animation*)vC->_zone._next;
- addNode(v8, &vC->_zone._node);
+ addNode(v8, &vC->_zone);
vC = v4;
}
Modified: scummvm/trunk/engines/parallaction/callables.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/callables.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/callables.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -322,7 +322,7 @@
_vm->_menu->selectCharacter();
}
- removeNode(&_vm->_char._ani._zone._node);
+ removeNode(&_vm->_char._ani._zone);
_vm->_locationNames[0][0] = '\0';
_vm->_numLocations = 0;
_commandFlags = 0;
@@ -339,7 +339,7 @@
_engineFlags &= ~kEngineQuit;
- addNode(&_animations, &_vm->_char._ani._zone._node);
+ addNode(&_animations, &_vm->_char._ani._zone);
_score = 0;
return;
Modified: scummvm/trunk/engines/parallaction/commands.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/commands.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/commands.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -286,7 +286,7 @@
case CMD_OPEN: // open
u->_zone->_flags &= ~kFlagsClosed;
if (u->_zone->u.door->_cnv._count != 0) {
- addJob(&jobToggleDoor, (void*)u->_zone, kPriority18 );
+ _vm->addJob(&jobToggleDoor, (void*)u->_zone, kPriority18 );
}
break;
@@ -305,7 +305,7 @@
u->_zone->_flags &= ~kFlagsRemove;
u->_zone->_flags |= kFlagsActive;
if ((u->_zone->_type & 0xFFFF) == kZoneGet) {
- addJob(&jobDisplayDroppedItem, u->_zone, kPriority17 );
+ _vm->addJob(&jobDisplayDroppedItem, u->_zone, kPriority17 );
}
}
break;
@@ -334,7 +334,7 @@
WalkNode *vC = buildWalkPath(u->_move._x, u->_move._y);
- addJob(&jobWalk, vC, kPriority19 );
+ _vm->addJob(&jobWalk, vC, kPriority19 );
_engineFlags |= kEngineWalking;
}
break;
Modified: scummvm/trunk/engines/parallaction/defs.h
===================================================================
--- scummvm/trunk/engines/parallaction/defs.h 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/defs.h 2007-03-17 13:14:50 UTC (rev 26164)
@@ -38,10 +38,17 @@
Node* _next;
};
-struct WalkNode {
- Node _node;
+struct WalkNode : public Node {
+// Node _node;
int32 _x;
int32 _y;
+
+public:
+ WalkNode() : _x(0), _y(0) {
+ }
+
+ WalkNode(int32 x, int32 y) : _x(x), _y(y) {
+ }
};
struct Point {
Modified: scummvm/trunk/engines/parallaction/inventory.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/inventory.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/inventory.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -125,7 +125,7 @@
_inventory[_si]._id = MAKE_INVENTORY_ID(z->u.get->_icon);
_inventory[_si]._index = z->u.get->_icon;
- addJob(jobRemovePickedItem, z, kPriority17 );
+ _vm->addJob(jobRemovePickedItem, z, kPriority17 );
if (_inventory[_si]._id == 0) return 0;
Modified: scummvm/trunk/engines/parallaction/location.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/location.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/location.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -240,7 +240,7 @@
v4->_x = atoi(_tokens[1]) - _vm->_char._ani._cnv._width/2;
v4->_y = atoi(_tokens[2]) - _vm->_char._ani._cnv._height;
- addNode(list, &v4->_node);
+ addNode(list, v4);
}
@@ -342,7 +342,7 @@
debugC(2, kDebugLocation, "changeLocation: changed cursor");
}
- removeNode(&_vm->_char._ani._zone._node);
+ removeNode(&_vm->_char._ani._zone);
debugC(2, kDebugLocation, "changeLocation: removed character from the animation list");
freeLocation();
@@ -375,7 +375,7 @@
}
}
- addNode(&_animations, &_vm->_char._ani._zone._node);
+ addNode(&_animations, &_vm->_char._ani._zone);
debugC(2, kDebugLocation, "changeLocation: new character added to the animation list");
strcpy(_saveData1, list[0].c_str());
Modified: scummvm/trunk/engines/parallaction/parallaction.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/parallaction.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -136,9 +136,6 @@
// private stuff
-
-
-
static Job *_jDrawInventory = NULL;
Job *_jDrawLabel = NULL;
Job *_jEraseLabel = NULL;
@@ -146,12 +143,6 @@
static Job *_jRunScripts = NULL;
-
-static Job _jobs = { { NULL, NULL }, 0, 0, 0, NULL, 0 };
-
-
-
-
Parallaction::Parallaction(OSystem *syst) :
Engine(syst) {
@@ -248,7 +239,7 @@
_vm->_char._ani._zone._label._cnv._data0 = NULL;
_vm->_char._ani._zone._label._text = strdup("yourself");
- addNode(&_animations, &_vm->_char._ani._zone._node);
+ addNode(&_animations, &_vm->_char._ani._zone);
_gfx = new Gfx(this);
int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);
@@ -902,7 +893,7 @@
}
-Job *addJob(JobFn fn, void *parm, uint16 tag) {
+Job *Parallaction::addJob(JobFn fn, void *parm, uint16 tag) {
Job *v8 = (Job*)malloc(sizeof(Job));
@@ -914,41 +905,41 @@
Job *v4 = &_jobs;
- while (v4->_node._next && ((Job*)(v4->_node._next))->_tag > tag) {
- v4 = (Job*)v4->_node._next;
+ while (v4->_next && ((Job*)(v4->_next))->_tag > tag) {
+ v4 = (Job*)v4->_next;
}
- addNode(&v4->_node, &v8->_node);
+ addNode(v4, v8);
return v8;
}
-void removeJob(Job *j) {
+void Parallaction::removeJob(Job *j) {
- removeNode(&j->_node);
+ removeNode(j);
free(j);
return;
}
-void pauseJobs() {
+void Parallaction::pauseJobs() {
_engineFlags |= kEnginePauseJobs;
return;
}
-void resumeJobs() {
+void Parallaction::resumeJobs() {
_engineFlags &= ~kEnginePauseJobs;
return;
}
-void runJobs() {
+void Parallaction::runJobs() {
if (_engineFlags & kEnginePauseJobs) return;
- Job *j = (Job*)_jobs._node._next;
+ Job *j = (Job*)_jobs._next;
while (j) {
debugC(3, kDebugJobs, "runJobs: %i", j->_tag);
(*j->_fn)(j->_parm, j);
- Job *v4 = (Job*)j->_node._next;
+ Job *v4 = (Job*)j->_next;
if (j->_finished == 1)
removeJob(j);
@@ -974,7 +965,7 @@
count++;
if (count == 2) {
count = 0;
- removeJob(arg);
+ _vm->removeJob(arg);
_engineFlags &= ~kEngineMouse;
j->_finished = 1;
}
Modified: scummvm/trunk/engines/parallaction/parallaction.h
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.h 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/parallaction.h 2007-03-17 13:14:50 UTC (rev 26164)
@@ -87,13 +87,17 @@
struct Job;
typedef void (*JobFn)(void*, Job*);
-struct Job {
- Node _node;
+struct Job : public Node {
+// Node _node;
uint16 _count; // # of executions left
uint16 _tag; // used for ordering
uint16 _finished;
void * _parm;
JobFn _fn;
+
+public:
+ Job() : _count(0), _tag(0), _finished(0), _parm(NULL), _fn(NULL) {
+ }
};
extern Point _mousePos;
@@ -166,12 +170,8 @@
WalkNode *buildWalkPath(uint16 x, uint16 y);
-Job *addJob(JobFn fn, void *parm, uint16 tag);
-void removeJob(Job *j);
-void runJobs();
-void pauseJobs();
-void resumeJobs();
+
void jobRemovePickedItem(void*, Job *j);
void jobDisplayDroppedItem(void*, Job *j);
void jobToggleDoor(void*, Job *j);
@@ -275,6 +275,11 @@
char *parseDialogueString(Script &script);
Dialogue *parseDialogue(Script &script);
+ Job *addJob(JobFn fn, void *parm, uint16 tag);
+ void removeJob(Job *j);
+ void pauseJobs();
+ void resumeJobs();
+ void runJobs();
public:
int getGameType() const;
@@ -334,6 +339,8 @@
int16 _keyDown;
+ Job _jobs;
+
protected: // members
bool detectGame(void);
Modified: scummvm/trunk/engines/parallaction/walk.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/walk.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/walk.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -32,7 +32,7 @@
uint16 walkFunc1(int16, int16, WalkNode *);
-WalkNode _NULL_WALKNODE = { {NULL, NULL}, 0, 0 };
+WalkNode _NULL_WALKNODE();
static byte *_buffer;
@@ -117,7 +117,7 @@
v48->_x = to_x - _vm->_char._ani._cnv._width / 2; // target top left coordinates
v48->_y = to_y - _vm->_char._ani._cnv._height;
- v48->_node._next = NULL;
+ v48->_next = NULL;
memcpy(v44, v48, sizeof(WalkNode));
uint16 v38 = walkFunc1(to_x, to_y, v44);
@@ -136,7 +136,7 @@
int16 _si = v48->_x; // _si, _di: target top left coordinates
int16 _di = v48->_y;
- addNode(&v58._node, &v48->_node);
+ addNode(&v58, v48);
WalkNode *_closest_node = NULL;
@@ -182,7 +182,7 @@
_closest_node = location_node;
}
- location_node = (WalkNode*)location_node->_node._next;
+ location_node = (WalkNode*)location_node->_next;
}
if (_closest_node_found == 0) break;
@@ -197,7 +197,7 @@
debugC(1, kDebugWalk, "adding walk node (%i, %i) to path", _newnode->_x, _newnode->_y);
- addNode(&v48->_node, &_newnode->_node);
+ addNode(v48, _newnode);
v48 = _newnode;
}
@@ -205,12 +205,12 @@
if (v38 != 0 && v34 > v38) {
// no alternative path (gap?)
- freeNodeList(v58._node._next);
+ freeNodeList(v58._next);
debugC(1, kDebugWalk, "can't find a path node: rejecting partial path");
return v44;
} else {
- _si = ((WalkNode*)(v58._node._next))->_x;
- _di = ((WalkNode*)(v58._node._next))->_y;
+ _si = ((WalkNode*)(v58._next))->_x;
+ _di = ((WalkNode*)(v58._next))->_y;
emptyList = false;
_closest_node_found = 1;
}
@@ -221,15 +221,15 @@
WalkNode* tmp = &v58;
uint16 i = 1;
- while (tmp->_node._next) {
+ while (tmp->_next) {
debugC(1, kDebugWalk, "node %i: %i, %i", i, tmp->_x, tmp->_y);
- tmp = (WalkNode*)tmp->_node._next;
+ tmp = (WalkNode*)tmp->_next;
i++;
}
free(v44);
- return (WalkNode*)v58._node._next;
+ return (WalkNode*)v58._next;
}
@@ -325,7 +325,7 @@
_vm->_char._ani._zone.pos._oldposition._y = _di;
if ((node->_x == _si) && (node->_y == _di)) {
- if (node->_node._next == NULL) {
+ if (node->_next == NULL) {
debugC(1, kDebugWalk, "jobWalk reached last node");
@@ -336,8 +336,8 @@
}
- WalkNode *tmp = (WalkNode*)node->_node._next;
- j->_parm = node->_node._next;
+ WalkNode *tmp = (WalkNode*)node->_next;
+ j->_parm = node->_next;
free(node);
debugC(1, kDebugWalk, "jobWalk moving to next node (%i, %i)", tmp->_x, tmp->_y);
@@ -419,7 +419,7 @@
j->_finished = 1;
checkDoor();
- freeNodeList(&node->_node);
+ freeNodeList(node);
} else {
Modified: scummvm/trunk/engines/parallaction/zone.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/zone.cpp 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/zone.cpp 2007-03-17 13:14:50 UTC (rev 26164)
@@ -44,7 +44,7 @@
while (v4) {
if (!scumm_stricmp(name, v4->_label._text)) return v4;
- v4 = (Zone*)v4->_node._next;
+ v4 = (Zone*)v4->_next;
}
Animation *a = findAnimation(name);
@@ -70,7 +70,7 @@
z->_label._text = (char*)malloc(strlen(name)+1);
strcpy(z->_label._text, name);
- addNode(list, &z->_node);
+ addNode(list, z);
fillBuffers(script, true);
while (scumm_stricmp(_tokens[0], "endzone")) {
@@ -140,9 +140,9 @@
debugC(1, kDebugLocation, "freeZones preserving zone '%s'", z->_label._text);
- v8 = (Zone*)z->_node._next;
- removeNode(&z->_node);
- addNode(&helperNode, &z->_node);
+ v8 = (Zone*)z->_next;
+ removeNode(z);
+ addNode(&helperNode, z);
z = v8;
continue;
}
@@ -190,7 +190,7 @@
_vm->_gfx->freeStaticCnv(&z->_label._cnv);
freeCommands(z->_commands);
- z=(Zone*)z->_node._next;
+ z=(Zone*)z->_next;
}
@@ -456,7 +456,7 @@
if (z->_flags & kFlagsLocked) break;
z->_flags ^= kFlagsClosed;
if (z->u.door->_cnv._count == 0) break;
- addJob(jobToggleDoor, z, kPriority18 );
+ _vm->addJob(jobToggleDoor, z, kPriority18 );
break;
case kZoneHear:
@@ -576,7 +576,7 @@
uint16 _si = x;
Zone *z = (Zone*)_zones._next;
- for (; z; z = (Zone*)z->_node._next) {
+ for (; z; z = (Zone*)z->_next) {
// printf("Zone name: %s", z->_name);
if (z->_flags & kFlagsRemove) continue;
@@ -632,7 +632,7 @@
Animation *a = (Animation*)_animations._next;
int16 _a, _b, _c, _d, _e, _f;
- for (; a; a = (Animation*)a->_zone._node._next) {
+ for (; a; a = (Animation*)a->_zone._next) {
// printf("Animation name: %s", a->_zone._name);
_a = (a->_zone._flags & kFlagsActive) ? 1 : 0; // _a: active Animation
Modified: scummvm/trunk/engines/parallaction/zone.h
===================================================================
--- scummvm/trunk/engines/parallaction/zone.h 2007-03-17 10:36:14 UTC (rev 26163)
+++ scummvm/trunk/engines/parallaction/zone.h 2007-03-17 13:14:50 UTC (rev 26164)
@@ -123,8 +123,8 @@
StaticCnv _cnv;
};
-struct Zone {
- Node _node;
+struct Zone : public Node {
+// Node _node;
union {
Rect _limits; // for zones
struct { // for animations
@@ -163,8 +163,8 @@
kInstMaskedPut = 8
};
-struct Instruction {
- Node _node;
+struct Instruction : public Node {
+// Node _node;
uint32 _index;
uint32 _flags;
union {
@@ -178,8 +178,8 @@
};
-struct Program {
- Node _node;
+struct Program : public Node {
+// Node _node;
LocalVariable *_locals;
uint16 _loopCounter;
Instruction *_ip;
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