ASYLUM: Removed the actionarray class and rolled it into actionlist (which makes way more sense).
git-svn-id: http://asylumengine.googlecode.com/svn/trunk@394 0bfb4aae-4ea4-11de-8d8d-752d95cf3e3c
This commit is contained in:
parent
a33b9e677a
commit
d9aaf26c18
8 changed files with 80 additions and 176 deletions
|
@ -1,76 +0,0 @@
|
||||||
/* ScummVM - Graphic Adventure Engine
|
|
||||||
*
|
|
||||||
* ScummVM is the legal property of its developers, whose names
|
|
||||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
||||||
* file distributed with this source distribution.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*
|
|
||||||
* $URL$
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "asylum/actionarray.h"
|
|
||||||
|
|
||||||
namespace Asylum {
|
|
||||||
|
|
||||||
ActionArray::ActionArray(AsylumEngine *engine): _vm(engine) {
|
|
||||||
_actionFlag = false;
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
ActionArray::~ActionArray() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ActionArray::reset() {
|
|
||||||
memset(&_items, 0, sizeof(ActionStruct));
|
|
||||||
for (int i = 0; i < 10; i++)
|
|
||||||
_items.entries[i].actionListIndex = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ActionArray::initItem(ActionDefinitions *command, int actionIndex, int actorIndex) {
|
|
||||||
// TODO properly define what actionFlag is actually for.
|
|
||||||
// It appears to remain false 99% of the time, so I'm guessing
|
|
||||||
// it's a "skip processing" flag.
|
|
||||||
if (!_actionFlag) {
|
|
||||||
int i;
|
|
||||||
// iterate through the availble entry slots to determine
|
|
||||||
// the next available slot
|
|
||||||
for (i = 1; i < 10; i++) {
|
|
||||||
if (_items.entries[i].actionListIndex == -1)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
command->counter = 0;
|
|
||||||
|
|
||||||
_items.entries[i].field_10 = 0;
|
|
||||||
_items.entries[i].field_C = 0;
|
|
||||||
|
|
||||||
if (_items.count) {
|
|
||||||
_items.entries[_items.field_CC].field_C = i ;
|
|
||||||
_items.entries[0].field_10 = _items.field_CC;
|
|
||||||
} else {
|
|
||||||
_items.count = i;
|
|
||||||
}
|
|
||||||
_items.field_CC = i;
|
|
||||||
_items.entries[0].actionListIndex = actionIndex;
|
|
||||||
_items.entries[0].actionListItemIndex = 0;
|
|
||||||
_items.entries[0].actorIndex = actorIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end of namespace Asylum
|
|
|
@ -1,83 +0,0 @@
|
||||||
/* ScummVM - Graphic Adventure Engine
|
|
||||||
*
|
|
||||||
* ScummVM is the legal property of its developers, whose names
|
|
||||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
||||||
* file distributed with this source distribution.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*
|
|
||||||
* $URL$
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ASYLUM_ACTIONARRAY_H_
|
|
||||||
#define ASYLUM_ACTIONARRAY_H_
|
|
||||||
|
|
||||||
#include "asylum/asylum.h"
|
|
||||||
#include "common/array.h"
|
|
||||||
|
|
||||||
namespace Asylum {
|
|
||||||
|
|
||||||
typedef struct ActionItem {
|
|
||||||
int actionListIndex;
|
|
||||||
int actionListItemIndex;
|
|
||||||
int actorIndex;
|
|
||||||
int field_C;
|
|
||||||
int field_10;
|
|
||||||
|
|
||||||
} ActionItem;
|
|
||||||
|
|
||||||
typedef struct ActionStruct {
|
|
||||||
ActionItem entries[10];
|
|
||||||
int count;
|
|
||||||
int field_CC;
|
|
||||||
|
|
||||||
} ActionStruct;
|
|
||||||
|
|
||||||
struct ActionDefinitions;
|
|
||||||
|
|
||||||
class ActionArray {
|
|
||||||
public:
|
|
||||||
ActionArray(AsylumEngine *engine);
|
|
||||||
virtual ~ActionArray();
|
|
||||||
|
|
||||||
/** .text:00401020
|
|
||||||
* Reset the _actionArray entries to their
|
|
||||||
* default values
|
|
||||||
*/
|
|
||||||
void reset();
|
|
||||||
|
|
||||||
/** .text:00401050
|
|
||||||
* Initialize the script element at actionIndex to
|
|
||||||
* the actor at actorIndex
|
|
||||||
*
|
|
||||||
* FIXME passing in a reference to the command at actionIndex
|
|
||||||
* to do a quick update.
|
|
||||||
*/
|
|
||||||
void initItem(ActionDefinitions *command, int actionIndex, int actorIndex);
|
|
||||||
|
|
||||||
void setActionFlag(bool value) { _actionFlag = value; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool _actionFlag;
|
|
||||||
ActionStruct _items;
|
|
||||||
AsylumEngine *_vm;
|
|
||||||
|
|
||||||
}; // end of class ActionArray
|
|
||||||
|
|
||||||
} // end of namespace Asylum
|
|
||||||
|
|
||||||
#endif /* ASYLUM_ACTIONARRAY_H_ */
|
|
|
@ -38,6 +38,8 @@ ActionList::ActionList(Common::SeekableReadStream *stream, Scene *scene)
|
||||||
delayedSceneIndex = -1;
|
delayedSceneIndex = -1;
|
||||||
delayedVideoIndex = -1;
|
delayedVideoIndex = -1;
|
||||||
allowInput = true;
|
allowInput = true;
|
||||||
|
_actionFlag = false;
|
||||||
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
ActionList::~ActionList() {
|
ActionList::~ActionList() {
|
||||||
|
@ -185,6 +187,43 @@ void ActionList::setScriptByIndex(uint32 index) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ActionList::reset() {
|
||||||
|
memset(&_items, 0, sizeof(ActionStruct));
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
_items.entries[i].actionListIndex = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionList::initItem(int actionIndex, int actorIndex) {
|
||||||
|
// TODO properly define what actionFlag is actually for.
|
||||||
|
// It appears to remain false 99% of the time, so I'm guessing
|
||||||
|
// it's a "skip processing" flag.
|
||||||
|
if (!_actionFlag) {
|
||||||
|
int i;
|
||||||
|
// iterate through the availble entry slots to determine
|
||||||
|
// the next available slot
|
||||||
|
for (i = 1; i < 10; i++) {
|
||||||
|
if (_items.entries[i].actionListIndex == -1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
_scene->actions()->entries[actionIndex].counter = 0;
|
||||||
|
|
||||||
|
_items.entries[i].field_10 = 0;
|
||||||
|
_items.entries[i].field_C = 0;
|
||||||
|
|
||||||
|
if (_items.count) {
|
||||||
|
_items.entries[_items.field_CC].field_C = i ;
|
||||||
|
_items.entries[0].field_10 = _items.field_CC;
|
||||||
|
} else {
|
||||||
|
_items.count = i;
|
||||||
|
}
|
||||||
|
_items.field_CC = i;
|
||||||
|
_items.entries[0].actionListIndex = actionIndex;
|
||||||
|
_items.entries[0].actionListItemIndex = 0;
|
||||||
|
_items.entries[0].actorIndex = actorIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ActionList::processActionListSub02(ActionDefinitions* script, ActionCommand *command, int a4) {
|
void ActionList::processActionListSub02(ActionDefinitions* script, ActionCommand *command, int a4) {
|
||||||
//int v4 = 0;
|
//int v4 = 0;
|
||||||
int result;
|
int result;
|
||||||
|
@ -809,11 +848,11 @@ int kStopAllBarriersSounds(ActionCommand *cmd, Scene *scn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int kSetActionFlag(ActionCommand *cmd, Scene *scn) {
|
int kSetActionFlag(ActionCommand *cmd, Scene *scn) {
|
||||||
scn->vm()->actionarray()->setActionFlag(true);
|
scn->actions()->setActionFlag(true);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int kClearActionFlag(ActionCommand *cmd, Scene *scn) {
|
int kClearActionFlag(ActionCommand *cmd, Scene *scn) {
|
||||||
scn->vm()->actionarray()->setActionFlag(false);
|
scn->actions()->setActionFlag(false);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int kResetSceneRect(ActionCommand *cmd, Scene *scn) {
|
int kResetSceneRect(ActionCommand *cmd, Scene *scn) {
|
||||||
|
|
|
@ -59,6 +59,22 @@ typedef struct ActionDefinitions {
|
||||||
uint32 counter;
|
uint32 counter;
|
||||||
} ActionDefinitions;
|
} ActionDefinitions;
|
||||||
|
|
||||||
|
typedef struct ActionItem {
|
||||||
|
int actionListIndex;
|
||||||
|
int actionListItemIndex;
|
||||||
|
int actorIndex;
|
||||||
|
int field_C;
|
||||||
|
int field_10;
|
||||||
|
|
||||||
|
} ActionItem;
|
||||||
|
|
||||||
|
typedef struct ActionStruct {
|
||||||
|
ActionItem entries[10];
|
||||||
|
int count;
|
||||||
|
int field_CC;
|
||||||
|
|
||||||
|
} ActionStruct;
|
||||||
|
|
||||||
class ActionList {
|
class ActionList {
|
||||||
public:
|
public:
|
||||||
ActionList(Common::SeekableReadStream *stream, Scene *scene);
|
ActionList(Common::SeekableReadStream *stream, Scene *scene);
|
||||||
|
@ -83,15 +99,30 @@ public:
|
||||||
bool done;
|
bool done;
|
||||||
bool waitCycle;
|
bool waitCycle;
|
||||||
|
|
||||||
|
// TODO depreciate
|
||||||
void setScriptByIndex(uint32 index);
|
void setScriptByIndex(uint32 index);
|
||||||
ActionDefinitions* getScript() {
|
// TODO depreciate
|
||||||
return _currentScript;
|
ActionDefinitions* getScript() { return _currentScript; }
|
||||||
}
|
|
||||||
|
|
||||||
/** .text:00402120
|
/** .text:00402120
|
||||||
* Process the current script
|
* Process the current script
|
||||||
*/
|
*/
|
||||||
int process();
|
int process();
|
||||||
|
/** .text:00401020
|
||||||
|
* Reset the _actionArray entries to their
|
||||||
|
* default values
|
||||||
|
*/
|
||||||
|
void reset();
|
||||||
|
/** .text:00401050
|
||||||
|
* Initialize the script element at actionIndex to
|
||||||
|
* the actor at actorIndex
|
||||||
|
*/
|
||||||
|
void initItem(int actionIndex, int actorIndex);
|
||||||
|
/**
|
||||||
|
* Toggle the action queue processing flag
|
||||||
|
*/
|
||||||
|
void setActionFlag(bool value) { _actionFlag = value; }
|
||||||
|
|
||||||
|
|
||||||
void processActionListSub02(ActionDefinitions* script, ActionCommand* command, int a4);
|
void processActionListSub02(ActionDefinitions* script, ActionCommand* command, int a4);
|
||||||
void enableActorSub(int actorIndex, int condition);
|
void enableActorSub(int actorIndex, int condition);
|
||||||
|
@ -99,9 +130,10 @@ public:
|
||||||
private:
|
private:
|
||||||
Scene *_scene;
|
Scene *_scene;
|
||||||
ActionDefinitions *_currentScript;
|
ActionDefinitions *_currentScript;
|
||||||
|
bool _actionFlag;
|
||||||
|
ActionStruct _items;
|
||||||
|
|
||||||
void load(Common::SeekableReadStream *stream);
|
void load(Common::SeekableReadStream *stream);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// opcode functions
|
// opcode functions
|
||||||
|
|
|
@ -68,7 +68,6 @@ AsylumEngine::~AsylumEngine() {
|
||||||
delete _screen;
|
delete _screen;
|
||||||
delete _encounter;
|
delete _encounter;
|
||||||
delete _text;
|
delete _text;
|
||||||
delete _actionArray;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::Error AsylumEngine::run() {
|
Common::Error AsylumEngine::run() {
|
||||||
|
@ -95,7 +94,6 @@ Common::Error AsylumEngine::init() {
|
||||||
_introPlaying = false;
|
_introPlaying = false;
|
||||||
|
|
||||||
memset(_gameFlags, 0, 1512);
|
memset(_gameFlags, 0, 1512);
|
||||||
_actionArray = new ActionArray(this);
|
|
||||||
|
|
||||||
return Common::kNoError;
|
return Common::kNoError;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "asylum/video.h"
|
#include "asylum/video.h"
|
||||||
#include "asylum/blowuppuzzle.h"
|
#include "asylum/blowuppuzzle.h"
|
||||||
#include "asylum/encounters.h"
|
#include "asylum/encounters.h"
|
||||||
#include "asylum/actionarray.h"
|
|
||||||
|
|
||||||
namespace Asylum {
|
namespace Asylum {
|
||||||
|
|
||||||
|
@ -67,7 +66,6 @@ class Screen;
|
||||||
class Sound;
|
class Sound;
|
||||||
class Video;
|
class Video;
|
||||||
class Encounter;
|
class Encounter;
|
||||||
class ActionArray;
|
|
||||||
|
|
||||||
enum kDebugLevels {
|
enum kDebugLevels {
|
||||||
kDebugLevelMain = 1 << 0,
|
kDebugLevelMain = 1 << 0,
|
||||||
|
@ -118,7 +116,6 @@ public:
|
||||||
Screen* screen() { return _screen; }
|
Screen* screen() { return _screen; }
|
||||||
Scene* scene() { return _scene;}
|
Scene* scene() { return _scene;}
|
||||||
Text* text() { return _text; }
|
Text* text() { return _text; }
|
||||||
ActionArray *actionarray() { return _actionArray; }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void checkForEvent(bool doUpdate);
|
void checkForEvent(bool doUpdate);
|
||||||
|
@ -141,8 +138,6 @@ private:
|
||||||
Text *_text;
|
Text *_text;
|
||||||
Encounter *_encounter;
|
Encounter *_encounter;
|
||||||
|
|
||||||
ActionArray *_actionArray;
|
|
||||||
|
|
||||||
int _gameFlags[1512];
|
int _gameFlags[1512];
|
||||||
|
|
||||||
friend class Console;
|
friend class Console;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
MODULE := engines/asylum
|
MODULE := engines/asylum
|
||||||
|
|
||||||
MODULE_OBJS := \
|
MODULE_OBJS := \
|
||||||
actionarray.o \
|
|
||||||
actionlist.o \
|
actionlist.o \
|
||||||
actor.o \
|
actor.o \
|
||||||
asylum.o \
|
asylum.o \
|
||||||
|
|
|
@ -170,7 +170,7 @@ void Scene::initialize() {
|
||||||
|
|
||||||
uint32 actionIdx = _ws->actionListIdx;
|
uint32 actionIdx = _ws->actionListIdx;
|
||||||
if (actionIdx)
|
if (actionIdx)
|
||||||
_vm->actionarray()->initItem(&_actions->entries[actionIdx], actionIdx, 0);
|
_actions->initItem(actionIdx, 0);
|
||||||
|
|
||||||
// TODO initActionListArrayItem(idx, 0) .text:00401050
|
// TODO initActionListArrayItem(idx, 0) .text:00401050
|
||||||
// XXX not sure why we need to do this again
|
// XXX not sure why we need to do this again
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue