X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcommon%2FScriptRunner.cpp;h=98fd4fbdc9a3dfec83b812e0d662377a5e600706;hb=8060b9ee74a24fe33a874732035dc8b74003439f;hp=c1022c4c1ed98c62047096ddc1c252ea273e9546;hpb=238da3a706448d4c592460684e2a5a2c0eb81a04;p=l2e.git diff --git a/src/common/ScriptRunner.cpp b/src/common/ScriptRunner.cpp index c1022c4..98fd4fb 100644 --- a/src/common/ScriptRunner.cpp +++ b/src/common/ScriptRunner.cpp @@ -25,7 +25,8 @@ ScriptRunner::ScriptRunner() , integer0(0) , integer1(0) , vector0(0, 0) -, vector1(0, 0) { +, vector1(0, 0) +, compare(0) { } @@ -105,6 +106,60 @@ void ScriptRunner::Exec(unsigned char code) { case Script::CODE_RAND_I1: integer1 = std::rand(); break; + case Script::CODE_CMP_I0: + Compare(integer0, PopInt()); + break; + case Script::CODE_CMP_I1: + Compare(integer1, PopInt()); + break; + case Script::CODE_CMP_I0_I1: + Compare(integer0, integer1); + break; + case Script::CODE_JUMP: + cursor = PopInt(); + break; + case Script::CODE_JUMP_EQUAL: { + int addr(PopInt()); + if (compare == COMPARE_EQUAL) { + cursor = addr; + } + break; + } + case Script::CODE_JUMP_NOT_EQUAL: { + int addr(PopInt()); + if (compare != COMPARE_EQUAL) { + cursor = addr; + } + break; + } + case Script::CODE_JUMP_LESS: { + int addr(PopInt()); + if (compare == COMPARE_LESS) { + cursor = addr; + } + break; + } + case Script::CODE_JUMP_LESS_EQUAL: { + int addr(PopInt()); + if (compare != COMPARE_GREATER) { + cursor = addr; + } + break; + } + case Script::CODE_JUMP_GREATER: { + int addr(PopInt()); + if (compare == COMPARE_GREATER) { + cursor = addr; + } + break; + } + case Script::CODE_JUMP_GREATER_EQUAL: { + int addr(PopInt()); + if (compare != COMPARE_LESS) { + cursor = addr; + } + break; + } case Script::CODE_SYSCALL: host->HandleSyscall(*this); break; @@ -129,4 +184,14 @@ const Vector &ScriptRunner::PopVector() { return *vec; } +void ScriptRunner::Compare(int lhs, int rhs) { + if (lhs < rhs) { + compare = COMPARE_LESS; + } else if (lhs > rhs) { + compare = COMPARE_GREATER; + } else { + compare = COMPARE_EQUAL; + } +} + }