ACCESS: Implemented cmdGoto script command

This commit is contained in:
Paul Gilbert 2014-08-08 09:30:16 -04:00
parent 80c8fbe024
commit fb0a1f5597
2 changed files with 159 additions and 148 deletions

View File

@ -45,9 +45,9 @@ void Scripts::freeScriptData() {
_script = nullptr;
}
void Scripts::searchForSequence() {
const byte *Scripts::searchForSequence() {
assert(_script);
byte *pSrc = _script;
const byte *pSrc = _script;
int sequenceId;
do {
while (*pSrc++ != SCRIPT_START_BYTE) ;
@ -56,6 +56,7 @@ void Scripts::searchForSequence() {
} while (sequenceId != _sequence);
_scriptLoc = pSrc;
return pSrc;
}
int Scripts::executeScript() {
@ -64,22 +65,22 @@ int Scripts::executeScript() {
_returnCode = 0;
do {
byte *pSrc = _scriptLoc;
const byte *pSrc = _scriptLoc;
for (pSrc = _scriptLoc; *pSrc == SCRIPT_START_BYTE; pSrc += 3) ;
_scriptCommand = *pSrc++;
executeCommand(_scriptCommand - 0x80);
executeCommand(_scriptCommand - 0x80, pSrc);
_scriptLoc = pSrc;
} while (!_endFlag);
return _returnCode;
}
void Scripts::executeCommand(int commandIndex) {
void Scripts::executeCommand(int commandIndex, const byte *&pScript) {
static const ScriptMethodPtr COMMAND_LIST[] = {
&Scripts::CMDENDOBJECT, &Scripts::CMDJUMPLOOK, &Scripts::CMDJUMPHELP, &Scripts::CMDJUMPGET, &Scripts::CMDJUMPMOVE,
&Scripts::CMDJUMPUSE, &Scripts::CMDJUMPTALK, &Scripts::CMDNULL, &Scripts::CMDPRINT, &Scripts::CMDRETPOS, &Scripts::CMDANIM,
&Scripts::CMDSETFLAG, &Scripts::CMDCHECKFLAG, &Scripts::CMDGOTO, &Scripts::CMDSETINV, &Scripts::CMDSETINV,
&Scripts::CMDSETFLAG, &Scripts::CMDCHECKFLAG, &Scripts::cmdGoto, &Scripts::CMDSETINV, &Scripts::CMDSETINV,
&Scripts::CMDCHECKINV, &Scripts::CMDSETTEX, &Scripts::CMDNEWROOM, &Scripts::CMDCONVERSE, &Scripts::CMDCHECKFRAME,
&Scripts::CMDCHECKANIM, &Scripts::CMDSND, &Scripts::CMDRETNEG, &Scripts::CMDRETPOS, &Scripts::CMDCHECKLOC, &Scripts::CMDSETANIM,
&Scripts::CMDDISPINV, &Scripts::CMDSETTIMER, &Scripts::CMDSETTIMER, &Scripts::CMDCHECKTIMER, &Scripts::CMDSETTRAVEL,
@ -95,77 +96,82 @@ void Scripts::executeCommand(int commandIndex) {
&Scripts::CMDMAINPANEL, &Scripts::CMDRETFLASH
};
(this->*COMMAND_LIST[commandIndex])();
(this->*COMMAND_LIST[commandIndex])(pScript);
}
void Scripts::CMDENDOBJECT() { }
void Scripts::CMDJUMPLOOK() { }
void Scripts::CMDJUMPHELP() { }
void Scripts::CMDJUMPGET() { }
void Scripts::CMDJUMPMOVE() { }
void Scripts::CMDJUMPUSE() { }
void Scripts::CMDJUMPTALK() { }
void Scripts::CMDNULL() { }
void Scripts::CMDPRINT() { }
void Scripts::CMDRETPOS() { }
void Scripts::CMDANIM() { }
void Scripts::CMDSETFLAG() { }
void Scripts::CMDCHECKFLAG() { }
void Scripts::CMDGOTO() { }
void Scripts::CMDSETINV() { }
void Scripts::CMDCHECKINV() { }
void Scripts::CMDSETTEX() { }
void Scripts::CMDNEWROOM() { }
void Scripts::CMDCONVERSE() { }
void Scripts::CMDCHECKFRAME() { }
void Scripts::CMDCHECKANIM() { }
void Scripts::CMDSND() { }
void Scripts::CMDRETNEG() { }
void Scripts::CMDCHECKLOC() { }
void Scripts::CMDSETANIM() { }
void Scripts::CMDDISPINV() { }
void Scripts::CMDSETTIMER() { }
void Scripts::CMDCHECKTIMER() { }
void Scripts::CMDSETTRAVEL() { }
void Scripts::CMDSETVID() { }
void Scripts::CMDPLAYVID() { }
void Scripts::CMDPLOTIMAGE() { }
void Scripts::CMDSETDISPLAY() { }
void Scripts::CMDSETBUFFER() { }
void Scripts::CMDSETSCROLL() { }
void Scripts::CMDSAVERECT() { }
void Scripts::CMDSETBUFVID() { }
void Scripts::CMDPLAYBUFVID() { }
void Scripts::CMDREMOVELAST() { }
void Scripts::CMDSPECIAL() { }
void Scripts::CMDSETCYCLE() { }
void Scripts::CMDCYCLE() { }
void Scripts::CMDCHARSPEAK() { }
void Scripts::CMDTEXSPEAK() { }
void Scripts::CMDTEXCHOICE() { }
void Scripts::CMDWAIT() { }
void Scripts::CMDSETCONPOS() { }
void Scripts::CMDCHECKVFRAME() { }
void Scripts::CMDJUMPCHOICE() { }
void Scripts::CMDRETURNCHOICE() { }
void Scripts::CMDCLEARBLOCK() { }
void Scripts::CMDLOADSOUND() { }
void Scripts::CMDFREESOUND() { }
void Scripts::CMDSETVIDSND() { }
void Scripts::CMDPLAYVIDSND() { }
void Scripts::CMDPUSHLOCATION() { }
void Scripts::CMDPLAYEROFF() { }
void Scripts::CMDPLAYERON() { }
void Scripts::CMDDEAD() { }
void Scripts::CMDFADEOUT() { }
void Scripts::CMDENDVID() { }
void Scripts::CMDHELP() { }
void Scripts::CMDCYCLEBACK() { }
void Scripts::CMDCHAPTER() { }
void Scripts::CMDSETHELP() { }
void Scripts::CMDCENTERPANEL() { }
void Scripts::CMDMAINPANEL() { }
void Scripts::CMDRETFLASH() { }
void Scripts::CMDENDOBJECT(const byte *&pScript) { }
void Scripts::CMDJUMPLOOK(const byte *&pScript) { }
void Scripts::CMDJUMPHELP(const byte *&pScript) { }
void Scripts::CMDJUMPGET(const byte *&pScript) { }
void Scripts::CMDJUMPMOVE(const byte *&pScript) { }
void Scripts::CMDJUMPUSE(const byte *&pScript) { }
void Scripts::CMDJUMPTALK(const byte *&pScript) { }
void Scripts::CMDNULL(const byte *&pScript) { }
void Scripts::CMDPRINT(const byte *&pScript) { }
void Scripts::CMDRETPOS(const byte *&pScript) { }
void Scripts::CMDANIM(const byte *&pScript) { }
void Scripts::CMDSETFLAG(const byte *&pScript) { }
void Scripts::CMDCHECKFLAG(const byte *&pScript) { }
void Scripts::cmdGoto(const byte *&pScript) {
_sequence = READ_LE_UINT16(pScript);
pScript = searchForSequence();
}
void Scripts::CMDSETINV(const byte *&pScript) { }
void Scripts::CMDCHECKINV(const byte *&pScript) { }
void Scripts::CMDSETTEX(const byte *&pScript) { }
void Scripts::CMDNEWROOM(const byte *&pScript) { }
void Scripts::CMDCONVERSE(const byte *&pScript) { }
void Scripts::CMDCHECKFRAME(const byte *&pScript) { }
void Scripts::CMDCHECKANIM(const byte *&pScript) { }
void Scripts::CMDSND(const byte *&pScript) { }
void Scripts::CMDRETNEG(const byte *&pScript) { }
void Scripts::CMDCHECKLOC(const byte *&pScript) { }
void Scripts::CMDSETANIM(const byte *&pScript) { }
void Scripts::CMDDISPINV(const byte *&pScript) { }
void Scripts::CMDSETTIMER(const byte *&pScript) { }
void Scripts::CMDCHECKTIMER(const byte *&pScript) { }
void Scripts::CMDSETTRAVEL(const byte *&pScript) { }
void Scripts::CMDSETVID(const byte *&pScript) { }
void Scripts::CMDPLAYVID(const byte *&pScript) { }
void Scripts::CMDPLOTIMAGE(const byte *&pScript) { }
void Scripts::CMDSETDISPLAY(const byte *&pScript) { }
void Scripts::CMDSETBUFFER(const byte *&pScript) { }
void Scripts::CMDSETSCROLL(const byte *&pScript) { }
void Scripts::CMDSAVERECT(const byte *&pScript) { }
void Scripts::CMDSETBUFVID(const byte *&pScript) { }
void Scripts::CMDPLAYBUFVID(const byte *&pScript) { }
void Scripts::CMDREMOVELAST(const byte *&pScript) { }
void Scripts::CMDSPECIAL(const byte *&pScript) { }
void Scripts::CMDSETCYCLE(const byte *&pScript) { }
void Scripts::CMDCYCLE(const byte *&pScript) { }
void Scripts::CMDCHARSPEAK(const byte *&pScript) { }
void Scripts::CMDTEXSPEAK(const byte *&pScript) { }
void Scripts::CMDTEXCHOICE(const byte *&pScript) { }
void Scripts::CMDWAIT(const byte *&pScript) { }
void Scripts::CMDSETCONPOS(const byte *&pScript) { }
void Scripts::CMDCHECKVFRAME(const byte *&pScript) { }
void Scripts::CMDJUMPCHOICE(const byte *&pScript) { }
void Scripts::CMDRETURNCHOICE(const byte *&pScript) { }
void Scripts::CMDCLEARBLOCK(const byte *&pScript) { }
void Scripts::CMDLOADSOUND(const byte *&pScript) { }
void Scripts::CMDFREESOUND(const byte *&pScript) { }
void Scripts::CMDSETVIDSND(const byte *&pScript) { }
void Scripts::CMDPLAYVIDSND(const byte *&pScript) { }
void Scripts::CMDPUSHLOCATION(const byte *&pScript) { }
void Scripts::CMDPLAYEROFF(const byte *&pScript) { }
void Scripts::CMDPLAYERON(const byte *&pScript) { }
void Scripts::CMDDEAD(const byte *&pScript) { }
void Scripts::CMDFADEOUT(const byte *&pScript) { }
void Scripts::CMDENDVID(const byte *&pScript) { }
void Scripts::CMDHELP(const byte *&pScript) { }
void Scripts::CMDCYCLEBACK(const byte *&pScript) { }
void Scripts::CMDCHAPTER(const byte *&pScript) { }
void Scripts::CMDSETHELP(const byte *&pScript) { }
void Scripts::CMDCENTERPANEL(const byte *&pScript) { }
void Scripts::CMDMAINPANEL(const byte *&pScript) { }
void Scripts::CMDRETFLASH(const byte *&pScript) { }
} // End of namespace Access

View File

@ -30,84 +30,89 @@ namespace Access {
class AccessEngine;
class Scripts;
typedef void(Scripts::*ScriptMethodPtr)();
typedef void(Scripts::*ScriptMethodPtr)(const byte *&pScript);
class Scripts {
protected:
AccessEngine *_vm;
virtual void executeCommand(int commandIndex);
void CMDENDOBJECT();
void CMDJUMPLOOK();
void CMDJUMPHELP();
void CMDJUMPGET();
void CMDJUMPMOVE();
void CMDJUMPUSE();
void CMDJUMPTALK();
void CMDNULL();
void CMDPRINT();
void CMDRETPOS();
void CMDANIM();
void CMDSETFLAG();
void CMDCHECKFLAG();
void CMDGOTO();
void CMDSETINV();
void CMDCHECKINV();
void CMDSETTEX();
void CMDNEWROOM();
void CMDCONVERSE();
void CMDCHECKFRAME();
void CMDCHECKANIM();
void CMDSND();
void CMDRETNEG();
void CMDCHECKLOC();
void CMDSETANIM();
void CMDDISPINV();
void CMDSETTIMER();
void CMDCHECKTIMER();
void CMDSETTRAVEL();
void CMDSETVID();
void CMDPLAYVID();
void CMDPLOTIMAGE();
void CMDSETDISPLAY();
void CMDSETBUFFER();
void CMDSETSCROLL();
void CMDSAVERECT();
void CMDSETBUFVID();
void CMDPLAYBUFVID();
void CMDREMOVELAST();
void CMDSPECIAL();
void CMDSETCYCLE();
void CMDCYCLE();
void CMDCHARSPEAK();
void CMDTEXSPEAK();
void CMDTEXCHOICE();
void CMDWAIT();
void CMDSETCONPOS();
void CMDCHECKVFRAME();
void CMDJUMPCHOICE();
void CMDRETURNCHOICE();
void CMDCLEARBLOCK();
void CMDLOADSOUND();
void CMDFREESOUND();
void CMDSETVIDSND();
void CMDPLAYVIDSND();
void CMDPUSHLOCATION();
void CMDPLAYEROFF();
void CMDPLAYERON();
void CMDDEAD();
void CMDFADEOUT();
void CMDENDVID();
void CMDHELP();
void CMDCYCLEBACK();
void CMDCHAPTER();
void CMDSETHELP();
void CMDCENTERPANEL();
void CMDMAINPANEL();
void CMDRETFLASH();
virtual void executeCommand(int commandIndex, const byte *&pScript);
void CMDENDOBJECT(const byte *&pScript);
void CMDJUMPLOOK(const byte *&pScript);
void CMDJUMPHELP(const byte *&pScript);
void CMDJUMPGET(const byte *&pScript);
void CMDJUMPMOVE(const byte *&pScript);
void CMDJUMPUSE(const byte *&pScript);
void CMDJUMPTALK(const byte *&pScript);
void CMDNULL(const byte *&pScript);
void CMDPRINT(const byte *&pScript);
void CMDRETPOS(const byte *&pScript);
void CMDANIM(const byte *&pScript);
void CMDSETFLAG(const byte *&pScript);
void CMDCHECKFLAG(const byte *&pScript);
/**
* Jump to another script
*/
void cmdGoto(const byte *&pScript);
void CMDSETINV(const byte *&pScript);
void CMDCHECKINV(const byte *&pScript);
void CMDSETTEX(const byte *&pScript);
void CMDNEWROOM(const byte *&pScript);
void CMDCONVERSE(const byte *&pScript);
void CMDCHECKFRAME(const byte *&pScript);
void CMDCHECKANIM(const byte *&pScript);
void CMDSND(const byte *&pScript);
void CMDRETNEG(const byte *&pScript);
void CMDCHECKLOC(const byte *&pScript);
void CMDSETANIM(const byte *&pScript);
void CMDDISPINV(const byte *&pScript);
void CMDSETTIMER(const byte *&pScript);
void CMDCHECKTIMER(const byte *&pScript);
void CMDSETTRAVEL(const byte *&pScript);
void CMDSETVID(const byte *&pScript);
void CMDPLAYVID(const byte *&pScript);
void CMDPLOTIMAGE(const byte *&pScript);
void CMDSETDISPLAY(const byte *&pScript);
void CMDSETBUFFER(const byte *&pScript);
void CMDSETSCROLL(const byte *&pScript);
void CMDSAVERECT(const byte *&pScript);
void CMDSETBUFVID(const byte *&pScript);
void CMDPLAYBUFVID(const byte *&pScript);
void CMDREMOVELAST(const byte *&pScript);
void CMDSPECIAL(const byte *&pScript);
void CMDSETCYCLE(const byte *&pScript);
void CMDCYCLE(const byte *&pScript);
void CMDCHARSPEAK(const byte *&pScript);
void CMDTEXSPEAK(const byte *&pScript);
void CMDTEXCHOICE(const byte *&pScript);
void CMDWAIT(const byte *&pScript);
void CMDSETCONPOS(const byte *&pScript);
void CMDCHECKVFRAME(const byte *&pScript);
void CMDJUMPCHOICE(const byte *&pScript);
void CMDRETURNCHOICE(const byte *&pScript);
void CMDCLEARBLOCK(const byte *&pScript);
void CMDLOADSOUND(const byte *&pScript);
void CMDFREESOUND(const byte *&pScript);
void CMDSETVIDSND(const byte *&pScript);
void CMDPLAYVIDSND(const byte *&pScript);
void CMDPUSHLOCATION(const byte *&pScript);
void CMDPLAYEROFF(const byte *&pScript);
void CMDPLAYERON(const byte *&pScript);
void CMDDEAD(const byte *&pScript);
void CMDFADEOUT(const byte *&pScript);
void CMDENDVID(const byte *&pScript);
void CMDHELP(const byte *&pScript);
void CMDCYCLEBACK(const byte *&pScript);
void CMDCHAPTER(const byte *&pScript);
void CMDSETHELP(const byte *&pScript);
void CMDCENTERPANEL(const byte *&pScript);
void CMDMAINPANEL(const byte *&pScript);
void CMDRETFLASH(const byte *&pScript);
public:
byte *_script;
byte *_scriptLoc;
const byte *_script;
const byte *_scriptLoc;
int _sequence;
bool _endFlag;
int _returnCode;
@ -119,7 +124,7 @@ public:
void freeScriptData();
void searchForSequence();
const byte *searchForSequence();
int executeScript();
};