aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2014-08-09 15:38:40 +0200
committerStrangerke2014-08-09 15:38:40 +0200
commitc930c7e6ed0128ea012d7cc09ce855e7a06b6c3c (patch)
treea0d854e2fcba0830e68f9fbdc61c16f524a15c52
parenta9b8369274c74e2364e40b8ac3e0fb735443ae51 (diff)
downloadscummvm-rg350-c930c7e6ed0128ea012d7cc09ce855e7a06b6c3c.tar.gz
scummvm-rg350-c930c7e6ed0128ea012d7cc09ce855e7a06b6c3c.tar.bz2
scummvm-rg350-c930c7e6ed0128ea012d7cc09ce855e7a06b6c3c.zip
ACCESS: Implement some script opcodes
-rw-r--r--engines/access/scripts.cpp45
-rw-r--r--engines/access/scripts.h10
2 files changed, 42 insertions, 13 deletions
diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp
index 38f9f92329..c78ecf573d 100644
--- a/engines/access/scripts.cpp
+++ b/engines/access/scripts.cpp
@@ -79,10 +79,10 @@ int Scripts::executeScript() {
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::cmdJumpUse, &Scripts::cmdJumpTalk, &Scripts::cmdNull, &Scripts::CMDPRINT, &Scripts::cmdRetPos, &Scripts::CMDANIM,
&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::CMDCHECKANIM, &Scripts::CMDSND, &Scripts::CMDRETNEG, &Scripts::cmdRetPos, &Scripts::cmdCheckLoc, &Scripts::CMDSETANIM,
&Scripts::CMDDISPINV, &Scripts::CMDSETTIMER, &Scripts::CMDSETTIMER, &Scripts::CMDCHECKTIMER, &Scripts::CMDSETTRAVEL,
&Scripts::CMDSETTRAVEL, &Scripts::CMDSETVID, &Scripts::CMDPLAYVID, &Scripts::CMDPLOTIMAGE, &Scripts::CMDSETDISPLAY,
&Scripts::CMDSETBUFFER, &Scripts::CMDSETSCROLL, &Scripts::CMDSAVERECT, &Scripts::CMDSAVERECT, &Scripts::CMDSETBUFVID,
@@ -91,7 +91,7 @@ void Scripts::executeCommand(int commandIndex, const byte *&pScript) {
&Scripts::CMDWAIT, &Scripts::CMDSETCONPOS, &Scripts::CMDCHECKVFRAME, &Scripts::CMDJUMPCHOICE, &Scripts::CMDRETURNCHOICE,
&Scripts::CMDCLEARBLOCK, &Scripts::CMDLOADSOUND, &Scripts::CMDFREESOUND, &Scripts::CMDSETVIDSND, &Scripts::CMDPLAYVIDSND,
&Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION,
- &Scripts::CMDPUSHLOCATION, &Scripts::CMDPLAYEROFF, &Scripts::CMDPLAYERON, &Scripts::CMDDEAD, &Scripts::CMDFADEOUT,
+ &Scripts::CMDPUSHLOCATION, &Scripts::cmdPlayerOff, &Scripts::cmdPlayerOn, &Scripts::CMDDEAD, &Scripts::CMDFADEOUT,
&Scripts::CMDENDVID, &Scripts::CMDHELP, &Scripts::CMDCYCLEBACK, &Scripts::CMDCHAPTER, &Scripts::CMDSETHELP, &Scripts::CMDCENTERPANEL,
&Scripts::CMDMAINPANEL, &Scripts::CMDRETFLASH
};
@@ -143,9 +143,16 @@ void Scripts::cmdJumpTalk(const byte *&pScript) {
pScript += 2;
}
-void Scripts::CMDNULL(const byte *&pScript) { }
+void Scripts::cmdNull(const byte *&pScript) {
+}
+
void Scripts::CMDPRINT(const byte *&pScript) { }
-void Scripts::CMDRETPOS(const byte *&pScript) { }
+
+void Scripts::cmdRetPos(const byte *&pScript) {
+ _endFlag = true;
+ _returnCode = 0;
+}
+
void Scripts::CMDANIM(const byte *&pScript) { }
void Scripts::cmdSetFlag(const byte *&pScript) {
@@ -181,7 +188,22 @@ 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::cmdCheckLoc(const byte *&pScript) {
+ int minX = READ_LE_UINT16(pScript);
+ int minY = READ_LE_UINT16(pScript);
+ int maxX = READ_LE_UINT16(pScript);
+ int maxY = READ_LE_UINT16(pScript);
+
+ int curX = _vm->_player->_rawPlayer.x + _vm->_player->_playerOffset.x;
+ int curY = _vm->_player->_rawPlayer.y;
+
+ if ((curX > minX) && (curX < maxX) && (curY > minY) && (curY < maxY))
+ cmdGoto(pScript);
+ else
+ pScript += 2;
+}
+
void Scripts::CMDSETANIM(const byte *&pScript) { }
void Scripts::CMDDISPINV(const byte *&pScript) { }
void Scripts::CMDSETTIMER(const byte *&pScript) { }
@@ -214,8 +236,15 @@ 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::cmdPlayerOff(const byte *&pScript) {
+ _vm->_player->_playerOff = true;
+}
+
+void Scripts::cmdPlayerOn(const byte *&pScript) {
+ _vm->_player->_playerOff = false;
+}
+
void Scripts::CMDDEAD(const byte *&pScript) { }
void Scripts::CMDFADEOUT(const byte *&pScript) { }
void Scripts::CMDENDVID(const byte *&pScript) { }
diff --git a/engines/access/scripts.h b/engines/access/scripts.h
index 5e733dbd47..a65c36530f 100644
--- a/engines/access/scripts.h
+++ b/engines/access/scripts.h
@@ -44,9 +44,9 @@ protected:
void cmdJumpMove(const byte *&pScript);
void cmdJumpUse(const byte *&pScript);
void cmdJumpTalk(const byte *&pScript);
- void CMDNULL(const byte *&pScript);
+ void cmdNull(const byte *&pScript);
void CMDPRINT(const byte *&pScript);
- void CMDRETPOS(const byte *&pScript);
+ void cmdRetPos(const byte *&pScript);
void CMDANIM(const byte *&pScript);
void cmdSetFlag(const byte *&pScript);
void CMDCHECKFLAG(const byte *&pScript);
@@ -65,7 +65,7 @@ protected:
void CMDCHECKANIM(const byte *&pScript);
void CMDSND(const byte *&pScript);
void CMDRETNEG(const byte *&pScript);
- void CMDCHECKLOC(const byte *&pScript);
+ void cmdCheckLoc(const byte *&pScript);
void CMDSETANIM(const byte *&pScript);
void CMDDISPINV(const byte *&pScript);
void CMDSETTIMER(const byte *&pScript);
@@ -98,8 +98,8 @@ protected:
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 cmdPlayerOff(const byte *&pScript);
+ void cmdPlayerOn(const byte *&pScript);
void CMDDEAD(const byte *&pScript);
void CMDFADEOUT(const byte *&pScript);
void CMDENDVID(const byte *&pScript);