aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2014-08-19 07:48:00 +0200
committerStrangerke2014-08-19 07:48:00 +0200
commit992ea95cd796aafeb1a1c61fcf29d57c7ecba8db (patch)
tree33630566b3f2f3544d5ff49dda4bec7046cbdb83
parent8d45ad265d0da07a1d2541cb74140185a8847417 (diff)
downloadscummvm-rg350-992ea95cd796aafeb1a1c61fcf29d57c7ecba8db.tar.gz
scummvm-rg350-992ea95cd796aafeb1a1c61fcf29d57c7ecba8db.tar.bz2
scummvm-rg350-992ea95cd796aafeb1a1c61fcf29d57c7ecba8db.zip
ACCESS: Implement two opcodes
-rw-r--r--engines/access/data.h2
-rw-r--r--engines/access/scripts.cpp33
-rw-r--r--engines/access/scripts.h4
3 files changed, 32 insertions, 7 deletions
diff --git a/engines/access/data.h b/engines/access/data.h
index 8ba3c58c82..1d1f85966a 100644
--- a/engines/access/data.h
+++ b/engines/access/data.h
@@ -43,7 +43,7 @@ public:
struct TimerEntry {
int _initTm;
int _timer;
- bool _flag;
+ byte _flag;
TimerEntry() {
_initTm = _timer = 0;
diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp
index 1e5bbc8982..b4a231c784 100644
--- a/engines/access/scripts.cpp
+++ b/engines/access/scripts.cpp
@@ -102,8 +102,8 @@ void Scripts::executeCommand(int commandIndex) {
&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,
+ &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,
@@ -355,8 +355,33 @@ void Scripts::cmdDispInv() {
_vm->_inventory->newDisplayInv();
}
-void Scripts::CMDSETTIMER() { error("TODO CMDSETTIMER"); }
-void Scripts::CMDCHECKTIMER() { error("TODO CMDCHECKTIMER"); }
+void Scripts::cmdSetTimer() {
+ int idx = _data->readUint16LE();
+ int val = _data->readUint16LE();
+
+ ++_vm->_timers[idx]._flag;
+ _vm->_timers[idx]._timer = val;
+ _vm->_timers[idx]._initTm = val;
+
+ _vm->_events->debounceLeft();
+ _vm->_events->zeroKeys();
+}
+
+void Scripts::cmdCheckTimer() {
+ int idx = _data->readUint16LE();
+
+ if ((idx == 9) && (_vm->_events->_keypresses.size() > 0)) {
+ _vm->_events->zeroKeys();
+ _vm->_timers[9]._timer = 0;
+ _vm->_timers[9]._flag = 0;
+ }
+
+ int val = _data->readUint16LE() & 0xFF;
+ if (_vm->_timers[idx]._flag == val)
+ cmdGoto();
+ else
+ _data->skip(2);
+}
void Scripts::cmdSetTravel() {
if (_vm->_room->_selectCommand == 5)
diff --git a/engines/access/scripts.h b/engines/access/scripts.h
index 6941c047d1..40f667a2f1 100644
--- a/engines/access/scripts.h
+++ b/engines/access/scripts.h
@@ -87,8 +87,8 @@ protected:
void cmdCheckLoc();
void cmdSetAnim();
void cmdDispInv();
- void CMDSETTIMER();
- void CMDCHECKTIMER();
+ void cmdSetTimer();
+ void cmdCheckTimer();
void cmdSetTravel();
void CMDSETVID();
void CMDPLAYVID();