ACCESS: Implemented chapter debug command
This commit is contained in:
parent
e7818639af
commit
aea906f7d3
8 changed files with 72 additions and 11 deletions
|
@ -164,7 +164,7 @@ void AccessEngine::initialize() {
|
|||
_animation = new AnimationManager(this);
|
||||
_bubbleBox = new BubbleBox(this);
|
||||
_char = new CharManager(this);
|
||||
_debugger = new Debugger(this);
|
||||
_debugger = Debugger::init(this);
|
||||
_events = new EventsManager(this);
|
||||
_files = new FileManager(this);
|
||||
_inventory = new InventoryManager(this);
|
||||
|
|
|
@ -23,14 +23,10 @@
|
|||
#include "common/file.h"
|
||||
#include "access/access.h"
|
||||
#include "access/debugger.h"
|
||||
#include "access/amazon/amazon_game.h"
|
||||
|
||||
namespace Access {
|
||||
|
||||
Debugger::Debugger(AccessEngine *vm) : GUI::Debugger(), _vm(vm) {
|
||||
registerCmd("continue", WRAP_METHOD(Debugger, cmdExit));
|
||||
registerCmd("scene", WRAP_METHOD(Debugger, Cmd_LoadScene));
|
||||
}
|
||||
|
||||
static int strToInt(const char *s) {
|
||||
if (!*s)
|
||||
// No string at all
|
||||
|
@ -47,6 +43,22 @@ static int strToInt(const char *s) {
|
|||
return (int)tmp;
|
||||
}
|
||||
|
||||
Debugger *Debugger::init(AccessEngine *vm) {
|
||||
switch (vm->getGameID()) {
|
||||
case GType_Amazon:
|
||||
return new Amazon::AmazonDebugger(vm);
|
||||
default:
|
||||
return new Debugger(vm);
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
Debugger::Debugger(AccessEngine *vm) : GUI::Debugger(), _vm(vm) {
|
||||
registerCmd("continue", WRAP_METHOD(Debugger, cmdExit));
|
||||
registerCmd("scene", WRAP_METHOD(Debugger, Cmd_LoadScene));
|
||||
}
|
||||
|
||||
bool Debugger::Cmd_LoadScene(int argc, const char **argv) {
|
||||
if (argc != 2) {
|
||||
debugPrintf("Current scene is: %d\n", _vm->_player->_roomNumber);
|
||||
|
@ -66,4 +78,32 @@ bool Debugger::Cmd_LoadScene(int argc, const char **argv) {
|
|||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
namespace Amazon {
|
||||
|
||||
AmazonDebugger::AmazonDebugger(AccessEngine *vm): Debugger(vm) {
|
||||
registerCmd("chapter", WRAP_METHOD(AmazonDebugger, Cmd_StartChapter));
|
||||
}
|
||||
|
||||
bool AmazonDebugger::Cmd_StartChapter(int argc, const char **argv) {
|
||||
if (argc != 2) {
|
||||
debugPrintf("Usage: %s <chapter number>\n", argv[0]);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Build up a simple one line script to start the given chapter
|
||||
byte *chapterScript = (byte *)malloc(5);
|
||||
chapterScript[0] = SCRIPT_START_BYTE;
|
||||
chapterScript[1] = ROOM_SCRIPT % 256;
|
||||
chapterScript[2] = ROOM_SCRIPT / 256;
|
||||
chapterScript[3] = 0x80 + 75; // cmdChapter
|
||||
chapterScript[4] = strToInt(argv[1]); // chapter number
|
||||
_vm->_scripts->setScript(new Resource(chapterScript, 5));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} // End of namespace Amazon
|
||||
|
||||
} // End of namespace Access
|
||||
|
|
|
@ -31,16 +31,29 @@ namespace Access {
|
|||
class AccessEngine;
|
||||
|
||||
class Debugger : public GUI::Debugger {
|
||||
private:
|
||||
AccessEngine *_vm;
|
||||
protected:
|
||||
AccessEngine *_vm;
|
||||
|
||||
bool Cmd_LoadScene(int argc, const char **argv);
|
||||
public:
|
||||
static Debugger *init(AccessEngine *vm);
|
||||
public:
|
||||
Debugger(AccessEngine *vm);
|
||||
virtual ~Debugger() {}
|
||||
};
|
||||
|
||||
namespace Amazon {
|
||||
|
||||
class AmazonDebugger : public Debugger {
|
||||
protected:
|
||||
bool Cmd_StartChapter(int argc, const char **argv);
|
||||
public:
|
||||
AmazonDebugger(AccessEngine *vm);
|
||||
virtual ~AmazonDebugger() {}
|
||||
};
|
||||
|
||||
} // End of namespace Amazon
|
||||
|
||||
} // End of namespace Access
|
||||
|
||||
#endif /* ACCESS_DEBUGGER_H */
|
||||
|
|
|
@ -59,6 +59,12 @@ Resource::~Resource() {
|
|||
delete _stream;
|
||||
}
|
||||
|
||||
Resource::Resource(byte *data, int size) {
|
||||
_data = data;
|
||||
_size = size;
|
||||
_stream = new Common::MemoryReadStream(data, size);
|
||||
}
|
||||
|
||||
byte *Resource::data() {
|
||||
if (_data == nullptr) {
|
||||
_data = new byte[_size];
|
||||
|
|
|
@ -62,6 +62,7 @@ public:
|
|||
int _size;
|
||||
|
||||
Resource();
|
||||
Resource::Resource(byte *data, int size);
|
||||
~Resource();
|
||||
byte *data();
|
||||
};
|
||||
|
|
|
@ -235,7 +235,7 @@ void Room::loadRoomData(const byte *roomData) {
|
|||
}
|
||||
|
||||
void Room::roomLoop() {
|
||||
_vm->_scripts->_sequence = 2000;
|
||||
_vm->_scripts->_sequence = ROOM_SCRIPT;
|
||||
_vm->_scripts->searchForSequence();
|
||||
_vm->_scripts->executeScript();
|
||||
}
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
#include "access/resources.h"
|
||||
#include "access/scripts.h"
|
||||
|
||||
#define SCRIPT_START_BYTE 0xE0
|
||||
|
||||
namespace Access {
|
||||
|
||||
Scripts::Scripts(AccessEngine *vm) : Manager(vm) {
|
||||
|
|
|
@ -32,6 +32,9 @@ namespace Access {
|
|||
class AccessEngine;
|
||||
class Scripts;
|
||||
|
||||
#define SCRIPT_START_BYTE 0xE0
|
||||
#define ROOM_SCRIPT 2000
|
||||
|
||||
class Scripts: public Manager {
|
||||
private:
|
||||
Resource *_resource;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue