mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-10 21:03:31 +00:00
PRINCE: some opcodes in script added
This commit is contained in:
parent
30ad6df5fc
commit
e63b902def
@ -35,7 +35,7 @@ Font::Font() {
|
||||
}
|
||||
|
||||
Font::~Font() {
|
||||
delete _fontData;
|
||||
delete [] _fontData;
|
||||
}
|
||||
|
||||
bool Font::load(Common::SeekableReadStream &stream) {
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "graphics/font.h"
|
||||
|
||||
namespace Graphics {
|
||||
class Surface;
|
||||
struct Surface;
|
||||
}
|
||||
|
||||
namespace Common {
|
||||
|
@ -29,7 +29,7 @@
|
||||
namespace Prince {
|
||||
|
||||
MhwanhDecoder::MhwanhDecoder()
|
||||
: _surface(0), _palette(0), _paletteColorCount(0) {
|
||||
: _surface(NULL), _palette(0), _paletteColorCount(0) {
|
||||
}
|
||||
|
||||
MhwanhDecoder::~MhwanhDecoder() {
|
||||
@ -39,7 +39,7 @@ MhwanhDecoder::~MhwanhDecoder() {
|
||||
void MhwanhDecoder::destroy() {
|
||||
if (_surface) {
|
||||
_surface->free();
|
||||
_surface = 0;
|
||||
delete _surface; _surface = 0;
|
||||
}
|
||||
|
||||
delete [] _palette; _palette = 0;
|
||||
@ -47,6 +47,7 @@ void MhwanhDecoder::destroy() {
|
||||
}
|
||||
|
||||
bool MhwanhDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
destroy();
|
||||
_paletteColorCount = 256;
|
||||
stream.seek(0);
|
||||
stream.skip(0x20);
|
||||
@ -61,7 +62,7 @@ bool MhwanhDecoder::loadStream(Common::SeekableReadStream &stream) {
|
||||
_surface = new Graphics::Surface();
|
||||
_surface->create(640, 480, Graphics::PixelFormat::createFormatCLUT8());
|
||||
for (int h = 0; h < 480; ++h) {
|
||||
stream.read(_surface->getBasePtr(0, h - 1), 640);
|
||||
stream.read(_surface->getBasePtr(0, h), 640);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -47,10 +47,12 @@
|
||||
#include "prince/font.h"
|
||||
#include "prince/mhwanh.h"
|
||||
#include "prince/graphics.h"
|
||||
#include "prince/script.h"
|
||||
|
||||
namespace Prince {
|
||||
|
||||
PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
|
||||
PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc) :
|
||||
Engine(syst), _gameDescription(gameDesc), _graph(NULL), _script(NULL) {
|
||||
_rnd = new Common::RandomSource("prince");
|
||||
|
||||
}
|
||||
@ -96,22 +98,33 @@ Common::Error PrinceEngine::run() {
|
||||
_system->getPaletteManager()->setPalette(roomBmp.getPalette(), 0, 256);
|
||||
|
||||
//font1.drawString(_frontScreen, "Hello World", 10, 10, 640, 1);
|
||||
|
||||
MhwanhDecoder walizkaBmp;
|
||||
//
|
||||
_graph->_roomBackground = roomBmp.getSurface();
|
||||
#if 1
|
||||
MhwanhDecoder *walizkaBmp = new MhwanhDecoder();
|
||||
if (walizka) {
|
||||
debug("Loading walizka");
|
||||
if (walizkaBmp.loadStream(*walizka)) {
|
||||
_graph->_roomBackground = walizkaBmp.getSurface();
|
||||
_graph->setPalette(walizkaBmp.getPalette());
|
||||
if (walizkaBmp->loadStream(*walizka)) {
|
||||
_graph->_roomBackground = walizkaBmp->getSurface();
|
||||
_graph->setPalette(walizkaBmp->getPalette());
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
_graph->change();
|
||||
|
||||
Common::SeekableReadStream * skryptStream = SearchMan.createReadStreamForMember("skrypt.dat");
|
||||
if (!skryptStream)
|
||||
return Common::kPathNotFile;
|
||||
|
||||
_script = new Script(this);
|
||||
_script->loadFromStream(*skryptStream);
|
||||
|
||||
delete skryptStream;
|
||||
|
||||
mainLoop();
|
||||
delete room;
|
||||
delete walizkaBmp;
|
||||
}
|
||||
delete room;
|
||||
|
||||
return Common::kNoError;
|
||||
}
|
||||
@ -145,6 +158,8 @@ void PrinceEngine::mainLoop() {
|
||||
if (shouldQuit())
|
||||
return;
|
||||
|
||||
_script->step();
|
||||
|
||||
_graph->update();
|
||||
|
||||
_system->delayMillis(40);
|
||||
|
@ -41,6 +41,7 @@ struct PrinceGameDescription;
|
||||
|
||||
class PrinceEngine;
|
||||
class GraphicsMan;
|
||||
class Script;
|
||||
|
||||
class PrinceEngine : public Engine {
|
||||
protected:
|
||||
@ -62,6 +63,7 @@ public:
|
||||
private:
|
||||
Common::RandomSource *_rnd;
|
||||
GraphicsMan *_graph;
|
||||
Script *_script;
|
||||
|
||||
void mainLoop();
|
||||
|
||||
|
@ -1,15 +1,19 @@
|
||||
#include "prince/script.h"
|
||||
|
||||
#include "common/debug.h"
|
||||
#include "common/debug-channels.h"
|
||||
#include "common/stream.h"
|
||||
|
||||
namespace Prince {
|
||||
|
||||
static const uint16 NUM_OPCODES = 144;
|
||||
|
||||
Script::Script(PrinceEngine *vm) :
|
||||
_code(NULL), _stacktop(0), _vm(vm), _random("GroovieScripts") {
|
||||
}
|
||||
|
||||
Script::~Script() {
|
||||
delete[] _code;
|
||||
}
|
||||
|
||||
bool Script::loadFromStream(Common::SeekableReadStream &stream) {
|
||||
@ -21,12 +25,43 @@ bool Script::loadFromStream(Common::SeekableReadStream &stream) {
|
||||
|
||||
stream.read(_code, _codeSize);
|
||||
// Initialize the script
|
||||
_currentInstruction = 0;
|
||||
_currentInstruction = READ_LE_UINT32(_code + 4);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Script::debugScript(const char *s, ...) {
|
||||
char buf[STRINGBUFLEN];
|
||||
va_list va;
|
||||
|
||||
va_start(va, s);
|
||||
vsnprintf(buf, STRINGBUFLEN, s, va);
|
||||
va_end(va);
|
||||
|
||||
Common::String str = Common::String::format("@0x%04X: ", _lastInstruction);
|
||||
str += Common::String::format("op 0x%02X: ", _lastOpcode);
|
||||
debug("%s %s", str.c_str(), buf);
|
||||
}
|
||||
|
||||
void Script::step() {
|
||||
_lastInstruction = _currentInstruction;
|
||||
// Prepare the base debug string
|
||||
Common::String dstr = Common::String::format("@0x%04X: ", _currentInstruction);
|
||||
|
||||
// Get the current opcode
|
||||
_lastOpcode = readScript16bits();
|
||||
|
||||
dstr += Common::String::format("op 0x%02X: ", _lastOpcode);
|
||||
|
||||
if (_lastOpcode > NUM_OPCODES)
|
||||
error("Trying to execute unknown opcode %s", dstr.c_str());
|
||||
|
||||
|
||||
//debug("%s", _debugString.c_str());
|
||||
|
||||
// Execute the current opcode
|
||||
OpcodeFunc op = _opcodes[_lastOpcode];
|
||||
(this->*op)();
|
||||
}
|
||||
|
||||
uint8 Script::getCodeByte(uint16 address) {
|
||||
@ -54,5 +89,334 @@ uint32 Script::readScript32bits() {
|
||||
return lower | (upper << 16);
|
||||
}
|
||||
|
||||
void Script::O_WAITFOREVER() {
|
||||
debugScript("O_WAITFOREVER");
|
||||
}
|
||||
void Script::O_BLACKPALETTE() {
|
||||
debugScript("O_BLACKPALETTE");
|
||||
}
|
||||
void Script::O_SETUPPALETTE() {
|
||||
debugScript("O_SETUPPALETTE");
|
||||
}
|
||||
void Script::O_INITROOM() {
|
||||
uint16 roomId = readScript16bits();
|
||||
debugScript("O_INITROOM %d", roomId);
|
||||
}
|
||||
void Script::O_SETSAMPLE() {}
|
||||
void Script::O_FREESAMPLE() {}
|
||||
void Script::O_PLAYSAMPLE() {}
|
||||
void Script::O_PUTOBJECT() {}
|
||||
void Script::O_REMOBJECT() {}
|
||||
void Script::O_SHOWANIM() {}
|
||||
void Script::O_CHECKANIMEND() {}
|
||||
void Script::O_FREEANIM() {}
|
||||
void Script::O_CHECKANIMFRAME() {}
|
||||
void Script::O_PUTBACKANIM() {}
|
||||
void Script::O_REMBACKANIM() {}
|
||||
void Script::O_CHECKBACKANIMFRAME() {}
|
||||
void Script::O_FREEALLSAMPLES() {}
|
||||
void Script::O_SETMUSIC() {}
|
||||
void Script::O_STOPMUSIC() {}
|
||||
void Script::O__WAIT() {}
|
||||
void Script::O_UPDATEOFF() {}
|
||||
void Script::O_UPDATEON() {}
|
||||
void Script::O_UPDATE () {}
|
||||
void Script::O_CLS() {}
|
||||
void Script::O__CALL() {
|
||||
int32 address = readScript32bits();
|
||||
_stack[_stacktop] = _currentInstruction;
|
||||
_stacktop++;
|
||||
_currentInstruction += address - 4;
|
||||
debugScript("O__CALL 0x%04X", _currentInstruction);
|
||||
}
|
||||
void Script::O_RETURN() {
|
||||
// Get the return address
|
||||
if (_stacktop > 0) {
|
||||
_stacktop--;
|
||||
_currentInstruction = _stack[_stacktop];
|
||||
} else {
|
||||
error("Return: Stack is empty");
|
||||
}
|
||||
}
|
||||
void Script::O_GO() {
|
||||
uint32 opPC = readScript32bits();
|
||||
debugScript("O_GO 0x%04X", opPC);
|
||||
_currentInstruction += opPC - 4;
|
||||
}
|
||||
void Script::O_BACKANIMUPDATEOFF() {}
|
||||
void Script::O_BACKANIMUPDATEON() {}
|
||||
void Script::O_CHANGECURSOR() {
|
||||
uint16 cursorId = readScript16bits();
|
||||
debugScript("O_CHANGECURSOR %x", cursorId);
|
||||
}
|
||||
void Script::O_CHANGEANIMTYPE() {}
|
||||
void Script::O__SETFLAG() {
|
||||
uint16 flagId = readScript16bits();
|
||||
uint16 value = readScript16bits();
|
||||
debugScript("O__SETFLAG 0x%04X %d", flagId, value);
|
||||
}
|
||||
void Script::O_COMPARE() {}
|
||||
void Script::O_JUMPZ() {}
|
||||
void Script::O_JUMPNZ() {}
|
||||
void Script::O_EXIT() {}
|
||||
void Script::O_ADDFLAG() {}
|
||||
void Script::O_TALKANIM() {}
|
||||
void Script::O_SUBFLAG() {}
|
||||
void Script::O_SETSTRING() {}
|
||||
void Script::O_ANDFLAG() {}
|
||||
void Script::O_GETMOBDATA() {}
|
||||
void Script::O_ORFLAG() {}
|
||||
void Script::O_SETMOBDATA() {}
|
||||
void Script::O_XORFLAG() {}
|
||||
void Script::O_GETMOBTEXT() {}
|
||||
void Script::O_MOVEHERO() {}
|
||||
void Script::O_WALKHERO() {}
|
||||
void Script::O_SETHERO() {}
|
||||
void Script::O_HEROOFF() {
|
||||
uint16 heroId = readScript16bits();
|
||||
debugScript("O_HEROOFF %d", heroId);
|
||||
}
|
||||
void Script::O_HEROON() {}
|
||||
void Script::O_CLSTEXT() {}
|
||||
void Script::O_CALLTABLE() {}
|
||||
void Script::O_CHANGEMOB() {}
|
||||
void Script::O_ADDINV() {}
|
||||
void Script::O_REMINV() {}
|
||||
void Script::O_REPINV() {}
|
||||
void Script::O_OBSOLETE_GETACTION() {}
|
||||
void Script::O_ADDWALKAREA() {}
|
||||
void Script::O_REMWALKAREA() {}
|
||||
void Script::O_RESTOREWALKAREA() {}
|
||||
void Script::O_WAITFRAME() {}
|
||||
void Script::O_SETFRAME() {}
|
||||
void Script::O_RUNACTION() {}
|
||||
void Script::O_COMPAREHI() {}
|
||||
void Script::O_COMPARELO() {}
|
||||
void Script::O_PRELOADSET() {}
|
||||
void Script::O_FREEPRELOAD() {}
|
||||
void Script::O_CHECKINV() {}
|
||||
void Script::O_TALKHERO() {}
|
||||
void Script::O_WAITTEXT() {}
|
||||
void Script::O_SETHEROANIM() {}
|
||||
void Script::O_WAITHEROANIM() {}
|
||||
void Script::O_GETHERODATA() {}
|
||||
void Script::O_GETMOUSEBUTTON() {}
|
||||
void Script::O_CHANGEFRAMES() {}
|
||||
void Script::O_CHANGEBACKFRAMES() {}
|
||||
void Script::O_GETBACKANIMDATA() {}
|
||||
void Script::O_GETANIMDATA() {}
|
||||
void Script::O_SETBGCODE() {}
|
||||
void Script::O_SETBACKFRAME() {}
|
||||
void Script::O_GETRND() {}
|
||||
void Script::O_TALKBACKANIM() {}
|
||||
void Script::O_LOADPATH() {}
|
||||
void Script::O_GETCHAR() {}
|
||||
void Script::O_SETDFLAG() {}
|
||||
void Script::O_CALLDFLAG() {}
|
||||
void Script::O_PRINTAT() {}
|
||||
void Script::O_ZOOMIN() {}
|
||||
void Script::O_ZOOMOUT() {}
|
||||
void Script::O_SETSTRINGOFFSET() {}
|
||||
void Script::O_GETOBJDATA() {}
|
||||
void Script::O_SETOBJDATA() {}
|
||||
void Script::O_SWAPOBJECTS() {}
|
||||
void Script::O_CHANGEHEROSET() {}
|
||||
void Script::O_ADDSTRING() {}
|
||||
void Script::O_SUBSTRING() {}
|
||||
void Script::O_INITDIALOG() {}
|
||||
void Script::O_ENABLEDIALOGOPT() {}
|
||||
void Script::O_DISABLEDIALOGOPT() {}
|
||||
void Script::O_SHOWDIALOGBOX() {}
|
||||
void Script::O_STOPSAMPLE() {}
|
||||
void Script::O_BACKANIMRANGE() {}
|
||||
void Script::O_CLEARPATH() {}
|
||||
void Script::O_SETPATH() {}
|
||||
void Script::O_GETHEROX() {}
|
||||
void Script::O_GETHEROY() {}
|
||||
void Script::O_GETHEROD() {}
|
||||
void Script::O_PUSHSTRING() {}
|
||||
void Script::O_POPSTRING() {}
|
||||
void Script::O_SETFGCODE() {}
|
||||
void Script::O_STOPHERO() {}
|
||||
void Script::O_ANIMUPDATEOFF() {}
|
||||
void Script::O_ANIMUPDATEON() {}
|
||||
void Script::O_FREECURSOR() {}
|
||||
void Script::O_ADDINVQUIET() {}
|
||||
void Script::O_RUNHERO() {}
|
||||
void Script::O_SETBACKANIMDATA() {}
|
||||
void Script::O_VIEWFLC() {}
|
||||
void Script::O_CHECKFLCFRAME() {}
|
||||
void Script::O_CHECKFLCEND() {}
|
||||
void Script::O_FREEFLC() {}
|
||||
void Script::O_TALKHEROSTOP() {}
|
||||
void Script::O_HEROCOLOR() {}
|
||||
void Script::O_GRABMAPA() {}
|
||||
void Script::O_ENABLENAK() {}
|
||||
void Script::O_DISABLENAK() {}
|
||||
void Script::O_GETMOBNAME() {}
|
||||
void Script::O_SWAPINVENTORY() {}
|
||||
void Script::O_CLEARINVENTORY() {}
|
||||
void Script::O_SKIPTEXT() {}
|
||||
void Script::O_SETVOICEH() {}
|
||||
void Script::O_SETVOICEA() {}
|
||||
void Script::O_SETVOICEB() {}
|
||||
void Script::O_SETVOICEC() {}
|
||||
void Script::O_VIEWFLCLOOP() {}
|
||||
void Script::O_FLCSPEED() {}
|
||||
void Script::O_OPENINVENTORY() {}
|
||||
void Script::O_KRZYWA() {}
|
||||
void Script::O_GETKRZYWA() {}
|
||||
void Script::O_GETMOB() {}
|
||||
void Script::O_INPUTLINE() {}
|
||||
void Script::O_SETVOICED() {}
|
||||
void Script::O_BREAK_POINT() {}
|
||||
|
||||
Script::OpcodeFunc Script::_opcodes[NUM_OPCODES] = {
|
||||
&Script::O_WAITFOREVER,
|
||||
&Script::O_BLACKPALETTE,
|
||||
&Script::O_SETUPPALETTE,
|
||||
&Script::O_INITROOM,
|
||||
&Script::O_SETSAMPLE,
|
||||
&Script::O_FREESAMPLE,
|
||||
&Script::O_PLAYSAMPLE,
|
||||
&Script::O_PUTOBJECT,
|
||||
&Script::O_REMOBJECT,
|
||||
&Script::O_SHOWANIM,
|
||||
&Script::O_CHECKANIMEND,
|
||||
&Script::O_FREEANIM,
|
||||
&Script::O_CHECKANIMFRAME,
|
||||
&Script::O_PUTBACKANIM,
|
||||
&Script::O_REMBACKANIM,
|
||||
&Script::O_CHECKBACKANIMFRAME,
|
||||
&Script::O_FREEALLSAMPLES,
|
||||
&Script::O_SETMUSIC,
|
||||
&Script::O_STOPMUSIC,
|
||||
&Script::O__WAIT,
|
||||
&Script::O_UPDATEOFF,
|
||||
&Script::O_UPDATEON,
|
||||
&Script::O_UPDATE ,
|
||||
&Script::O_CLS,
|
||||
&Script::O__CALL,
|
||||
&Script::O_RETURN,
|
||||
&Script::O_GO,
|
||||
&Script::O_BACKANIMUPDATEOFF,
|
||||
&Script::O_BACKANIMUPDATEON,
|
||||
&Script::O_CHANGECURSOR,
|
||||
&Script::O_CHANGEANIMTYPE,
|
||||
&Script::O__SETFLAG,
|
||||
&Script::O_COMPARE,
|
||||
&Script::O_JUMPZ,
|
||||
&Script::O_JUMPNZ,
|
||||
&Script::O_EXIT,
|
||||
&Script::O_ADDFLAG,
|
||||
&Script::O_TALKANIM,
|
||||
&Script::O_SUBFLAG,
|
||||
&Script::O_SETSTRING,
|
||||
&Script::O_ANDFLAG,
|
||||
&Script::O_GETMOBDATA,
|
||||
&Script::O_ORFLAG,
|
||||
&Script::O_SETMOBDATA,
|
||||
&Script::O_XORFLAG,
|
||||
&Script::O_GETMOBTEXT,
|
||||
&Script::O_MOVEHERO,
|
||||
&Script::O_WALKHERO,
|
||||
&Script::O_SETHERO,
|
||||
&Script::O_HEROOFF,
|
||||
&Script::O_HEROON,
|
||||
&Script::O_CLSTEXT,
|
||||
&Script::O_CALLTABLE,
|
||||
&Script::O_CHANGEMOB,
|
||||
&Script::O_ADDINV,
|
||||
&Script::O_REMINV,
|
||||
&Script::O_REPINV,
|
||||
&Script::O_OBSOLETE_GETACTION,
|
||||
&Script::O_ADDWALKAREA,
|
||||
&Script::O_REMWALKAREA,
|
||||
&Script::O_RESTOREWALKAREA,
|
||||
&Script::O_WAITFRAME,
|
||||
&Script::O_SETFRAME,
|
||||
&Script::O_RUNACTION,
|
||||
&Script::O_COMPAREHI,
|
||||
&Script::O_COMPARELO,
|
||||
&Script::O_PRELOADSET,
|
||||
&Script::O_FREEPRELOAD,
|
||||
&Script::O_CHECKINV,
|
||||
&Script::O_TALKHERO,
|
||||
&Script::O_WAITTEXT,
|
||||
&Script::O_SETHEROANIM,
|
||||
&Script::O_WAITHEROANIM,
|
||||
&Script::O_GETHERODATA,
|
||||
&Script::O_GETMOUSEBUTTON,
|
||||
&Script::O_CHANGEFRAMES,
|
||||
&Script::O_CHANGEBACKFRAMES,
|
||||
&Script::O_GETBACKANIMDATA,
|
||||
&Script::O_GETANIMDATA,
|
||||
&Script::O_SETBGCODE,
|
||||
&Script::O_SETBACKFRAME,
|
||||
&Script::O_GETRND,
|
||||
&Script::O_TALKBACKANIM,
|
||||
&Script::O_LOADPATH,
|
||||
&Script::O_GETCHAR,
|
||||
&Script::O_SETDFLAG,
|
||||
&Script::O_CALLDFLAG,
|
||||
&Script::O_PRINTAT,
|
||||
&Script::O_ZOOMIN,
|
||||
&Script::O_ZOOMOUT,
|
||||
&Script::O_SETSTRINGOFFSET,
|
||||
&Script::O_GETOBJDATA,
|
||||
&Script::O_SETOBJDATA,
|
||||
&Script::O_SWAPOBJECTS,
|
||||
&Script::O_CHANGEHEROSET,
|
||||
&Script::O_ADDSTRING,
|
||||
&Script::O_SUBSTRING,
|
||||
&Script::O_INITDIALOG,
|
||||
&Script::O_ENABLEDIALOGOPT,
|
||||
&Script::O_DISABLEDIALOGOPT,
|
||||
&Script::O_SHOWDIALOGBOX,
|
||||
&Script::O_STOPSAMPLE,
|
||||
&Script::O_BACKANIMRANGE,
|
||||
&Script::O_CLEARPATH,
|
||||
&Script::O_SETPATH,
|
||||
&Script::O_GETHEROX,
|
||||
&Script::O_GETHEROY,
|
||||
&Script::O_GETHEROD,
|
||||
&Script::O_PUSHSTRING,
|
||||
&Script::O_POPSTRING,
|
||||
&Script::O_SETFGCODE,
|
||||
&Script::O_STOPHERO,
|
||||
&Script::O_ANIMUPDATEOFF,
|
||||
&Script::O_ANIMUPDATEON,
|
||||
&Script::O_FREECURSOR,
|
||||
&Script::O_ADDINVQUIET,
|
||||
&Script::O_RUNHERO,
|
||||
&Script::O_SETBACKANIMDATA,
|
||||
&Script::O_VIEWFLC,
|
||||
&Script::O_CHECKFLCFRAME,
|
||||
&Script::O_CHECKFLCEND,
|
||||
&Script::O_FREEFLC,
|
||||
&Script::O_TALKHEROSTOP,
|
||||
&Script::O_HEROCOLOR,
|
||||
&Script::O_GRABMAPA,
|
||||
&Script::O_ENABLENAK,
|
||||
&Script::O_DISABLENAK,
|
||||
&Script::O_GETMOBNAME,
|
||||
&Script::O_SWAPINVENTORY,
|
||||
&Script::O_CLEARINVENTORY,
|
||||
&Script::O_SKIPTEXT,
|
||||
&Script::O_SETVOICEH,
|
||||
&Script::O_SETVOICEA,
|
||||
&Script::O_SETVOICEB,
|
||||
&Script::O_SETVOICEC,
|
||||
&Script::O_VIEWFLCLOOP,
|
||||
&Script::O_FLCSPEED,
|
||||
&Script::O_OPENINVENTORY,
|
||||
&Script::O_KRZYWA,
|
||||
&Script::O_GETKRZYWA,
|
||||
&Script::O_GETMOB,
|
||||
&Script::O_INPUTLINE,
|
||||
&Script::O_SETVOICED,
|
||||
&Script::O_BREAK_POINT,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
@ -46,26 +46,322 @@ public:
|
||||
private:
|
||||
PrinceEngine *_vm;
|
||||
|
||||
Common::RandomSource _random;
|
||||
Common::RandomSource _random;
|
||||
|
||||
byte *_code;
|
||||
uint16 _codeSize;
|
||||
uint16 _currentInstruction;
|
||||
byte *_code;
|
||||
uint16 _codeSize;
|
||||
uint32 _currentInstruction;
|
||||
uint16 _lastOpcode;
|
||||
uint32 _lastInstruction;
|
||||
|
||||
// Stack
|
||||
uint16 _stack[0x20];
|
||||
uint8 _stacktop;
|
||||
uint8 _savedStacktop;
|
||||
// Stack
|
||||
uint16 _stack[500];
|
||||
uint8 _stacktop;
|
||||
uint8 _savedStacktop;
|
||||
|
||||
// Helper functions
|
||||
uint8 getCodeByte(uint16 address);
|
||||
uint8 readScript8bits();
|
||||
uint16 readScript16bits();
|
||||
uint32 readScript32bits();
|
||||
uint16 readScript8or16bits();
|
||||
// Helper functions
|
||||
uint8 getCodeByte(uint16 address);
|
||||
uint8 readScript8bits();
|
||||
uint16 readScript16bits();
|
||||
uint32 readScript32bits();
|
||||
uint16 readScript8or16bits();
|
||||
void debugScript(const char *s, ...);
|
||||
|
||||
typedef void (Script::*OpcodeFunc)();
|
||||
static OpcodeFunc _opcodes[];
|
||||
typedef void (Script::*OpcodeFunc)();
|
||||
static OpcodeFunc _opcodes[];
|
||||
|
||||
void O_WAITFOREVER();
|
||||
void O_BLACKPALETTE();
|
||||
void O_SETUPPALETTE();
|
||||
void O_INITROOM();
|
||||
void O_SETSAMPLE();
|
||||
void O_FREESAMPLE();
|
||||
void O_PLAYSAMPLE();
|
||||
void O_PUTOBJECT();
|
||||
void O_REMOBJECT();
|
||||
void O_SHOWANIM();
|
||||
void O_CHECKANIMEND();
|
||||
void O_FREEANIM();
|
||||
void O_CHECKANIMFRAME();
|
||||
void O_PUTBACKANIM();
|
||||
void O_REMBACKANIM();
|
||||
void O_CHECKBACKANIMFRAME();
|
||||
void O_FREEALLSAMPLES();
|
||||
void O_SETMUSIC();
|
||||
void O_STOPMUSIC();
|
||||
void O__WAIT();
|
||||
void O_UPDATEOFF();
|
||||
void O_UPDATEON();
|
||||
void O_UPDATE ();
|
||||
void O_CLS();
|
||||
void O__CALL();
|
||||
void O_RETURN();
|
||||
void O_GO();
|
||||
void O_BACKANIMUPDATEOFF();
|
||||
void O_BACKANIMUPDATEON();
|
||||
void O_CHANGECURSOR();
|
||||
void O_CHANGEANIMTYPE();
|
||||
void O__SETFLAG();
|
||||
void O_COMPARE();
|
||||
void O_JUMPZ();
|
||||
void O_JUMPNZ();
|
||||
void O_EXIT();
|
||||
void O_ADDFLAG();
|
||||
void O_TALKANIM();
|
||||
void O_SUBFLAG();
|
||||
void O_SETSTRING();
|
||||
void O_ANDFLAG();
|
||||
void O_GETMOBDATA();
|
||||
void O_ORFLAG();
|
||||
void O_SETMOBDATA();
|
||||
void O_XORFLAG();
|
||||
void O_GETMOBTEXT();
|
||||
void O_MOVEHERO();
|
||||
void O_WALKHERO();
|
||||
void O_SETHERO();
|
||||
void O_HEROOFF();
|
||||
void O_HEROON();
|
||||
void O_CLSTEXT();
|
||||
void O_CALLTABLE();
|
||||
void O_CHANGEMOB();
|
||||
void O_ADDINV();
|
||||
void O_REMINV();
|
||||
void O_REPINV();
|
||||
void O_OBSOLETE_GETACTION();
|
||||
void O_ADDWALKAREA();
|
||||
void O_REMWALKAREA();
|
||||
void O_RESTOREWALKAREA();
|
||||
void O_WAITFRAME();
|
||||
void O_SETFRAME();
|
||||
void O_RUNACTION();
|
||||
void O_COMPAREHI();
|
||||
void O_COMPARELO();
|
||||
void O_PRELOADSET();
|
||||
void O_FREEPRELOAD();
|
||||
void O_CHECKINV();
|
||||
void O_TALKHERO();
|
||||
void O_WAITTEXT();
|
||||
void O_SETHEROANIM();
|
||||
void O_WAITHEROANIM();
|
||||
void O_GETHERODATA();
|
||||
void O_GETMOUSEBUTTON();
|
||||
void O_CHANGEFRAMES();
|
||||
void O_CHANGEBACKFRAMES();
|
||||
void O_GETBACKANIMDATA();
|
||||
void O_GETANIMDATA();
|
||||
void O_SETBGCODE();
|
||||
void O_SETBACKFRAME();
|
||||
void O_GETRND();
|
||||
void O_TALKBACKANIM();
|
||||
void O_LOADPATH();
|
||||
void O_GETCHAR();
|
||||
void O_SETDFLAG();
|
||||
void O_CALLDFLAG();
|
||||
void O_PRINTAT();
|
||||
void O_ZOOMIN();
|
||||
void O_ZOOMOUT();
|
||||
void O_SETSTRINGOFFSET();
|
||||
void O_GETOBJDATA();
|
||||
void O_SETOBJDATA();
|
||||
void O_SWAPOBJECTS();
|
||||
void O_CHANGEHEROSET();
|
||||
void O_ADDSTRING();
|
||||
void O_SUBSTRING();
|
||||
void O_INITDIALOG();
|
||||
void O_ENABLEDIALOGOPT();
|
||||
void O_DISABLEDIALOGOPT();
|
||||
void O_SHOWDIALOGBOX();
|
||||
void O_STOPSAMPLE();
|
||||
void O_BACKANIMRANGE();
|
||||
void O_CLEARPATH();
|
||||
void O_SETPATH();
|
||||
void O_GETHEROX();
|
||||
void O_GETHEROY();
|
||||
void O_GETHEROD();
|
||||
void O_PUSHSTRING();
|
||||
void O_POPSTRING();
|
||||
void O_SETFGCODE();
|
||||
void O_STOPHERO();
|
||||
void O_ANIMUPDATEOFF();
|
||||
void O_ANIMUPDATEON();
|
||||
void O_FREECURSOR();
|
||||
void O_ADDINVQUIET();
|
||||
void O_RUNHERO();
|
||||
void O_SETBACKANIMDATA();
|
||||
void O_VIEWFLC();
|
||||
void O_CHECKFLCFRAME();
|
||||
void O_CHECKFLCEND();
|
||||
void O_FREEFLC();
|
||||
void O_TALKHEROSTOP();
|
||||
void O_HEROCOLOR();
|
||||
void O_GRABMAPA();
|
||||
void O_ENABLENAK();
|
||||
void O_DISABLENAK();
|
||||
void O_GETMOBNAME();
|
||||
void O_SWAPINVENTORY();
|
||||
void O_CLEARINVENTORY();
|
||||
void O_SKIPTEXT();
|
||||
void O_SETVOICEH();
|
||||
void O_SETVOICEA();
|
||||
void O_SETVOICEB();
|
||||
void O_SETVOICEC();
|
||||
void O_VIEWFLCLOOP();
|
||||
void O_FLCSPEED();
|
||||
void O_OPENINVENTORY();
|
||||
void O_KRZYWA();
|
||||
void O_GETKRZYWA();
|
||||
void O_GETMOB();
|
||||
void O_INPUTLINE();
|
||||
void O_SETVOICED();
|
||||
void O_BREAK_POINT();
|
||||
|
||||
|
||||
#if 0
|
||||
O_WAITFOREVER ;00
|
||||
O_BLACKPALETTE ;01
|
||||
O_SETUPPALETTE ;02
|
||||
O_INITROOM ;03
|
||||
O_SETSAMPLE ;04
|
||||
O_FREESAMPLE ;05
|
||||
O_PLAYSAMPLE ;06
|
||||
O_PUTOBJECT ;07
|
||||
O_REMOBJECT ;08
|
||||
O_SHOWANIM ;09
|
||||
O_CHECKANIMEND ;10
|
||||
O_FREEANIM ;11
|
||||
O_CHECKANIMFRAME ;12
|
||||
O_PUTBACKANIM ;13
|
||||
O_REMBACKANIM ;14
|
||||
O_CHECKBACKANIMFRAME ;15
|
||||
O_FREEALLSAMPLES ;16
|
||||
O_SETMUSIC ;17
|
||||
O_STOPMUSIC ;18
|
||||
O__WAIT ;19
|
||||
O_UPDATEOFF ;20
|
||||
O_UPDATEON ;21
|
||||
O_UPDATE ;22
|
||||
O_CLS ;23
|
||||
O__CALL ;24
|
||||
O_RETURN ;25
|
||||
O_GO ;26
|
||||
O_BACKANIMUPDATEOFF ;27
|
||||
O_BACKANIMUPDATEON ;28
|
||||
O_CHANGECURSOR ;29
|
||||
O_CHANGEANIMTYPE ;30
|
||||
O__SETFLAG ;31
|
||||
O_COMPARE ;32
|
||||
O_JUMPZ ;33
|
||||
O_JUMPNZ ;34
|
||||
O_EXIT ;35
|
||||
O_ADDFLAG ;36
|
||||
O_TALKANIM ;37
|
||||
O_SUBFLAG ;38
|
||||
O_SETSTRING ;39
|
||||
O_ANDFLAG ;40
|
||||
O_GETMOBDATA ;41
|
||||
O_ORFLAG ;42
|
||||
O_SETMOBDATA ;43
|
||||
O_XORFLAG ;44
|
||||
O_GETMOBTEXT ;45
|
||||
O_MOVEHERO ;46
|
||||
O_WALKHERO ;47
|
||||
O_SETHERO ;48
|
||||
O_HEROOFF ;49
|
||||
O_HEROON ;50
|
||||
O_CLSTEXT ;51
|
||||
O_CALLTABLE ;52
|
||||
O_CHANGEMOB ;53
|
||||
O_ADDINV ;54
|
||||
O_REMINV ;55
|
||||
O_REPINV ;56
|
||||
O_OBSOLETE_GETACTION ;57
|
||||
O_ADDWALKAREA ;58
|
||||
O_REMWALKAREA ;59
|
||||
O_RESTOREWALKAREA ;60
|
||||
O_WAITFRAME ;61
|
||||
O_SETFRAME ;62
|
||||
O_RUNACTION ;63
|
||||
O_COMPAREHI ;64
|
||||
O_COMPARELO ;65
|
||||
O_PRELOADSET ;66
|
||||
O_FREEPRELOAD ;67
|
||||
O_CHECKINV ;68
|
||||
O_TALKHERO ;69
|
||||
O_WAITTEXT ;70
|
||||
O_SETHEROANIM ;71
|
||||
O_WAITHEROANIM ;72
|
||||
O_GETHERODATA ;73
|
||||
O_GETMOUSEBUTTON ;74
|
||||
O_CHANGEFRAMES ;75
|
||||
O_CHANGEBACKFRAMES ;76
|
||||
O_GETBACKANIMDATA ;77
|
||||
O_GETANIMDATA ;78
|
||||
O_SETBGCODE ;79
|
||||
O_SETBACKFRAME ;80
|
||||
O_GETRND ;81
|
||||
O_TALKBACKANIM ;82
|
||||
O_LOADPATH ;83
|
||||
O_GETCHAR ;84
|
||||
O_SETDFLAG ;85
|
||||
O_CALLDFLAG ;86
|
||||
O_PRINTAT ;87
|
||||
O_ZOOMIN ;88
|
||||
O_ZOOMOUT ;89
|
||||
O_SETSTRINGOFFSET ;90
|
||||
O_GETOBJDATA ;91
|
||||
O_SETOBJDATA ;92
|
||||
O_SWAPOBJECTS ;93
|
||||
O_CHANGEHEROSET ;94
|
||||
O_ADDSTRING ;95
|
||||
O_SUBSTRING ;96
|
||||
O_INITDIALOG ;97
|
||||
O_ENABLEDIALOGOPT ;98
|
||||
O_DISABLEDIALOGOPT ;99
|
||||
O_SHOWDIALOGBOX ;100
|
||||
O_STOPSAMPLE ;101
|
||||
O_BACKANIMRANGE ;102
|
||||
O_CLEARPATH ;103
|
||||
O_SETPATH ;104
|
||||
O_GETHEROX ;105
|
||||
O_GETHEROY ;106
|
||||
O_GETHEROD ;107
|
||||
O_PUSHSTRING ;108
|
||||
O_POPSTRING ;109
|
||||
O_SETFGCODE ;110
|
||||
O_STOPHERO ;111
|
||||
O_ANIMUPDATEOFF ;112
|
||||
O_ANIMUPDATEON ;113
|
||||
O_FREECURSOR ;114
|
||||
O_ADDINVQUIET ;115
|
||||
O_RUNHERO ;116
|
||||
O_SETBACKANIMDATA ;117
|
||||
O_VIEWFLC ;118
|
||||
O_CHECKFLCFRAME ;119
|
||||
O_CHECKFLCEND ;120
|
||||
O_FREEFLC ;121
|
||||
O_TALKHEROSTOP ;122
|
||||
O_HEROCOLOR ;123
|
||||
O_GRABMAPA ;124
|
||||
O_ENABLENAK ;125
|
||||
O_DISABLENAK ;126
|
||||
O_GETMOBNAME ;127
|
||||
O_SWAPINVENTORY ;128
|
||||
O_CLEARINVENTORY ;129
|
||||
O_SKIPTEXT ;130
|
||||
O_SETVOICEH ;131
|
||||
O_SETVOICEA ;132
|
||||
O_SETVOICEB ;133
|
||||
O_SETVOICEC ;134
|
||||
O_VIEWFLCLOOP ;135
|
||||
O_FLCSPEED ;136
|
||||
O_OPENINVENTORY ;137
|
||||
O_KRZYWA ;138
|
||||
O_GETKRZYWA ;139
|
||||
O_GETMOB ;140
|
||||
O_INPUTLINE ;141
|
||||
O_SETVOICED ;142
|
||||
O_BREAK_POINT ;143
|
||||
#endif
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user