Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}