ACCESS: Implement some more opcodes

This commit is contained in:
Strangerke 2014-08-17 21:49:07 +02:00
parent 77626b72a5
commit 1b69da3d17
2 changed files with 55 additions and 9 deletions

View file

@ -36,6 +36,8 @@ Scripts::Scripts(AccessEngine *vm) : _vm(vm) {
_returnCode = 0; _returnCode = 0;
_choice = 0; _choice = 0;
_choiceStart = 0; _choiceStart = 0;
_charsOrg = Common::Point(0, 0);
_texsOrg = Common::Point(0, 0);
} }
Scripts::~Scripts() { Scripts::~Scripts() {
@ -65,6 +67,10 @@ void Scripts::searchForSequence() {
} while (sequenceId != _sequence); } while (sequenceId != _sequence);
} }
void Scripts::findNull() {
// No implementation required in ScummVM, the strings in the script files are already skipped by the use of readByte()
}
int Scripts::executeScript() { int Scripts::executeScript() {
assert(_data); assert(_data);
_endFlag = false; _endFlag = false;
@ -100,9 +106,9 @@ void Scripts::executeCommand(int commandIndex) {
&Scripts::cmdSetScroll, &Scripts::CMDSAVERECT, &Scripts::CMDSAVERECT, &Scripts::cmdSetScroll, &Scripts::CMDSAVERECT, &Scripts::CMDSAVERECT,
&Scripts::CMDSETBUFVID, &Scripts::CMDPLAYBUFVID, &Scripts::cmdRemoveLast, &Scripts::CMDSETBUFVID, &Scripts::CMDPLAYBUFVID, &Scripts::cmdRemoveLast,
&Scripts::CMDSPECIAL, &Scripts::CMDSPECIAL, &Scripts::CMDSPECIAL, &Scripts::CMDSPECIAL, &Scripts::CMDSPECIAL, &Scripts::CMDSPECIAL,
&Scripts::CMDSETCYCLE, &Scripts::CMDCYCLE, &Scripts::CMDCHARSPEAK, &Scripts::CMDSETCYCLE, &Scripts::CMDCYCLE, &Scripts::cmdCharSpeak,
&Scripts::CMDTEXSPEAK, &Scripts::CMDTEXCHOICE, &Scripts::CMDWAIT, &Scripts::cmdTexSpeak, &Scripts::CMDTEXCHOICE, &Scripts::CMDWAIT,
&Scripts::CMDSETCONPOS, &Scripts::CMDCHECKVFRAME, &Scripts::cmdJumpChoice, &Scripts::cmdSetConPos, &Scripts::CMDCHECKVFRAME, &Scripts::cmdJumpChoice,
&Scripts::cmdReturnChoice, &Scripts::cmdClearBlock, &Scripts::CMDLOADSOUND, &Scripts::cmdReturnChoice, &Scripts::cmdClearBlock, &Scripts::CMDLOADSOUND,
&Scripts::CMDFREESOUND, &Scripts::CMDSETVIDSND, &Scripts::CMDPLAYVIDSND, &Scripts::CMDFREESOUND, &Scripts::CMDSETVIDSND, &Scripts::CMDPLAYVIDSND,
&Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION, &Scripts::CMDPUSHLOCATION,
@ -379,11 +385,48 @@ void Scripts::CMDSPECIAL() {
void Scripts::CMDSETCYCLE() { error("TODO CMDSETCYCLE"); } void Scripts::CMDSETCYCLE() { error("TODO CMDSETCYCLE"); }
void Scripts::CMDCYCLE() { error("TODO CMDCYCLE"); } void Scripts::CMDCYCLE() { error("TODO CMDCYCLE"); }
void Scripts::CMDCHARSPEAK() { error("TODO CMDCHARSPEAK"); }
void Scripts::CMDTEXSPEAK() { error("TODO CMDTEXSPEAK"); } void Scripts::cmdCharSpeak() {
_vm->_fonts._printOrg = _charsOrg;
_vm->_fonts._printStart = _charsOrg;
byte v;
Common::String tmpStr = "";
while ((v = _data->readByte()) != 0)
tmpStr += (char)v;
_vm->_bubbleBox->placeBubble(tmpStr);
findNull();
}
void Scripts::cmdTexSpeak() {
_vm->_fonts._printOrg = _texsOrg;
_vm->_fonts._printStart = _texsOrg;
_vm->_bubbleBox->_maxChars = 20;
byte v;
Common::String tmpStr = "";
while ((v = _data->readByte()) != 0)
tmpStr += (char)v;
_vm->_bubbleBox->_bubblePtr = Common::String("JASON").c_str();
_vm->_bubbleBox->placeBubble1(tmpStr);
findNull();
}
void Scripts::CMDTEXCHOICE() { error("TODO CMDTEXCHOICE"); } // _choiceStart = _data->pos() - 1; void Scripts::CMDTEXCHOICE() { error("TODO CMDTEXCHOICE"); } // _choiceStart = _data->pos() - 1;
void Scripts::CMDWAIT() { error("TODO CMDWAIT"); } void Scripts::CMDWAIT() { error("TODO CMDWAIT"); }
void Scripts::CMDSETCONPOS() { error("TODO CMDSETCONPOS"); }
void Scripts::cmdSetConPos() {
int x = _data->readSint16LE();
int y = _data->readSint16LE();
_charsOrg = Common::Point(x, y);
x = _data->readSint16LE();
y = _data->readSint16LE();
_texsOrg = Common::Point(x, y);
}
void Scripts::CMDCHECKVFRAME() { error("TODO CMDCHECKVFRAME"); } void Scripts::CMDCHECKVFRAME() { error("TODO CMDCHECKVFRAME"); }
void Scripts::cmdJumpChoice() { void Scripts::cmdJumpChoice() {

View file

@ -91,11 +91,11 @@ protected:
void CMDSPECIAL(); void CMDSPECIAL();
void CMDSETCYCLE(); void CMDSETCYCLE();
void CMDCYCLE(); void CMDCYCLE();
void CMDCHARSPEAK(); void cmdCharSpeak();
void CMDTEXSPEAK(); void cmdTexSpeak();
void CMDTEXCHOICE(); void CMDTEXCHOICE();
void CMDWAIT(); void CMDWAIT();
void CMDSETCONPOS(); void cmdSetConPos();
void CMDCHECKVFRAME(); void CMDCHECKVFRAME();
void cmdJumpChoice(); void cmdJumpChoice();
void cmdReturnChoice(); void cmdReturnChoice();
@ -124,6 +124,7 @@ public:
int _scriptCommand; int _scriptCommand;
int _choice; int _choice;
int32 _choiceStart; int32 _choiceStart;
Common::Point _charsOrg, _texsOrg;
public: public:
Scripts(AccessEngine *vm); Scripts(AccessEngine *vm);
@ -136,6 +137,8 @@ public:
void searchForSequence(); void searchForSequence();
int executeScript(); int executeScript();
void findNull();
}; };
} // End of namespace Access } // End of namespace Access