DRAGONS: Implementing opcode 15

This commit is contained in:
Edu Garcia 2019-03-16 23:08:53 +00:00 committed by Eugene Sandulenko
parent 28a75525fd
commit deecd24582
2 changed files with 21 additions and 7 deletions

View File

@ -108,6 +108,7 @@ void ScriptOpcodes::initOpcodes() {
OPCODE(0x12, opUnk12LoadScene);
OPCODE(0x13, opUnk13PropertiesRelated);
OPCODE(0x14, opUnk14PropertiesRelated);
OPCODE(0x15, opUnk15PropertiesRelated);
OPCODE(0x16, opUnk16);
OPCODE(0x17, opUnk17);
@ -292,8 +293,7 @@ void ScriptOpcodes::opUnk13PropertiesRelated(ScriptOpCall &scriptOpCall) {
void ScriptOpcodes::opUnk14PropertiesRelated(ScriptOpCall &scriptOpCall) {
if (checkPropertyFlag(scriptOpCall)) {
ScriptOpCall localScriptOpCall;
byte *codePtrOffset2 = scriptOpCall._code + 4;
localScriptOpCall._code = codePtrOffset2;
localScriptOpCall._code = scriptOpCall._code + 4;
localScriptOpCall._codeEnd = localScriptOpCall._code + READ_LE_UINT32(scriptOpCall._code);
localScriptOpCall._field8 = scriptOpCall._field8;
localScriptOpCall._result = 0;
@ -314,6 +314,24 @@ void ScriptOpcodes::opUnk14PropertiesRelated(ScriptOpCall &scriptOpCall) {
}
}
void ScriptOpcodes::opUnk15PropertiesRelated(ScriptOpCall &scriptOpCall) {
while (true) {
if (checkPropertyFlag(scriptOpCall)) {
ScriptOpCall localScriptOpCall;
localScriptOpCall._code = scriptOpCall._code + 4;
localScriptOpCall._codeEnd = localScriptOpCall._code + READ_LE_UINT32(scriptOpCall._code);
runScript(localScriptOpCall);
scriptOpCall._code = (scriptOpCall._code - ((uint)*(scriptOpCall._code + 2) + 2));
} else {
break;
}
}
scriptOpCall._code += 4 + READ_LE_UINT16(scriptOpCall._code);
}
bool ScriptOpcodes::checkPropertyFlag(ScriptOpCall &scriptOpCall) {
byte *codePtrOffsetA = scriptOpCall._code + 0xA;
byte *codePtrOffset2 = scriptOpCall._code + 2;
@ -839,10 +857,6 @@ void ScriptOpcodes::setINIField(uint32 iniIndex, uint16 fieldOffset, uint16 valu
}
void ScriptOpcodes::opUnk15(ScriptOpCall &scriptOpCall) {
}
void ScriptOpcodes::opUnk16(ScriptOpCall &scriptOpCall) {
if (scriptOpCall._field8 == 4) {
scriptOpCall._result |= 1;

View File

@ -97,7 +97,7 @@ protected:
void opUnk12LoadScene(ScriptOpCall &scriptOpCall);
void opUnk13PropertiesRelated(ScriptOpCall &scriptOpCall);
void opUnk14PropertiesRelated(ScriptOpCall &scriptOpCall);
void opUnk15(ScriptOpCall &scriptOpCall);
void opUnk15PropertiesRelated(ScriptOpCall &scriptOpCall);
void opUnk16(ScriptOpCall &scriptOpCall);
void opUnk17(ScriptOpCall &scriptOpCall);
void opPlayMusic(ScriptOpCall &scriptOpCall);