bool Debug::execute(aithread &thread) const { // Perform independant behaviours if ( this->getOpcode() == AISCRIPT::Enum::FATAL_ERROR ) { // Message Broodwar->sendText("Illegal AI script executed."); // Debug thread.saveDebug(Text::Green, this->getOpcode()); // Kill the script thread.killThread(); thread.noretry(); return false; } else if ( this->getOpcode() == AISCRIPT::Enum::DEBUG ) { // Read parameters WORD wJump; thread.readTuple( std::tie( wJump) ); // Send the message Broodwar->sendText("%s", &pbAIScriptBinary[thread.getScriptOffset()] ); // Jump to offset thread.setScriptOffset(wJump); thread.saveDebug(Text::Green, this->getOpcode(), "p_%X %s", wJump, &pbAIScriptBinary[thread.getScriptOffset()]); } return true; }
bool Random_Jump::execute(aithread &thread) const { // Retrieve parameters BYTE bChance; WORD wOffset; thread.readTuple( std::tie(bChance, wOffset) ); /// Set the new script offset if ( (BYTE)rand() <= bChance ) thread.setScriptOffset( wOffset ); // Save debug info and return thread.saveDebug(Text::Green, this->getOpcode(), "%u p_%04X", bChance, wOffset); return true; }
bool If_Dif::execute(aithread &thread) const { // Parameters BYTE bModifier, bValue; WORD wBlock; thread.readTuple( std::tie( bModifier, bValue, wBlock ) ); // Compare diff value BYTE bDiff = MainController.bIfDif; if ( bModifier ? (bDiff > bValue) : (bDiff < bValue) ) thread.setScriptOffset( wBlock ); // Save debug info and return thread.saveDebug(Text::Green, this->getOpcode(), "%u %u %04X", bModifier, bValue, wBlock); return true; }