ACCESS: Implement two opcodes

This commit is contained in:
Strangerke 2014-08-19 07:48:00 +02:00
parent 8d45ad265d
commit 992ea95cd7
3 changed files with 32 additions and 7 deletions

View file

@ -43,7 +43,7 @@ public:
struct TimerEntry { struct TimerEntry {
int _initTm; int _initTm;
int _timer; int _timer;
bool _flag; byte _flag;
TimerEntry() { TimerEntry() {
_initTm = _timer = 0; _initTm = _timer = 0;

View file

@ -102,8 +102,8 @@ void Scripts::executeCommand(int commandIndex) {
&Scripts::cmdSetTex, &Scripts::CMDNEWROOM, &Scripts::CMDCONVERSE, &Scripts::cmdSetTex, &Scripts::CMDNEWROOM, &Scripts::CMDCONVERSE,
&Scripts::cmdCheckFrame, &Scripts::cmdCheckAnim, &Scripts::cmdSnd, &Scripts::cmdCheckFrame, &Scripts::cmdCheckAnim, &Scripts::cmdSnd,
&Scripts::cmdRetNeg, &Scripts::cmdRetPos, &Scripts::cmdCheckLoc, &Scripts::cmdRetNeg, &Scripts::cmdRetPos, &Scripts::cmdCheckLoc,
&Scripts::cmdSetAnim, &Scripts::cmdDispInv, &Scripts::CMDSETTIMER, &Scripts::cmdSetAnim, &Scripts::cmdDispInv, &Scripts::cmdSetTimer,
&Scripts::CMDSETTIMER, &Scripts::CMDCHECKTIMER, &Scripts::cmdSetTravel, &Scripts::cmdSetTimer, &Scripts::cmdCheckTimer, &Scripts::cmdSetTravel,
&Scripts::cmdSetTravel, &Scripts::CMDSETVID, &Scripts::CMDPLAYVID, &Scripts::cmdSetTravel, &Scripts::CMDSETVID, &Scripts::CMDPLAYVID,
&Scripts::cmdPlotImage, &Scripts::cmdSetDisplay, &Scripts::cmdSetBuffer, &Scripts::cmdPlotImage, &Scripts::cmdSetDisplay, &Scripts::cmdSetBuffer,
&Scripts::cmdSetScroll, &Scripts::CMDSAVERECT, &Scripts::CMDSAVERECT, &Scripts::cmdSetScroll, &Scripts::CMDSAVERECT, &Scripts::CMDSAVERECT,
@ -355,8 +355,33 @@ void Scripts::cmdDispInv() {
_vm->_inventory->newDisplayInv(); _vm->_inventory->newDisplayInv();
} }
void Scripts::CMDSETTIMER() { error("TODO CMDSETTIMER"); } void Scripts::cmdSetTimer() {
void Scripts::CMDCHECKTIMER() { error("TODO CMDCHECKTIMER"); } 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() { void Scripts::cmdSetTravel() {
if (_vm->_room->_selectCommand == 5) if (_vm->_room->_selectCommand == 5)

View file

@ -87,8 +87,8 @@ protected:
void cmdCheckLoc(); void cmdCheckLoc();
void cmdSetAnim(); void cmdSetAnim();
void cmdDispInv(); void cmdDispInv();
void CMDSETTIMER(); void cmdSetTimer();
void CMDCHECKTIMER(); void cmdCheckTimer();
void cmdSetTravel(); void cmdSetTravel();
void CMDSETVID(); void CMDSETVID();
void CMDPLAYVID(); void CMDPLAYVID();