fsm SlaughterBot : integer; //------------------------------------------------------------------ // UberBot: Level 8 // Intended to display the maximum amount of challenge that the game can provide. //------------------------------------------------------------------ //------------------------------------------------------------------ // Constants //------------------------------------------------------------------ const #include_ //------------------------------------------------------------------ // Types //------------------------------------------------------------------ type #include_ //------------------------------------------------------------------ // Variables //------------------------------------------------------------------ var static integer attackRange; // At what range do I start shooting? static integer withdrawRange; // At what range do I withdraw? static integer bot_activated_timer; // How long to wait before startup? //------------------------------------------------------------------ // Init: my initialization function //------------------------------------------------------------------ function Init; code // script-specific variables attackRange = 9999; withdrawRange = 9999; // driver settings SetFiringDelay (ME,0.0,0.0); SetIgnoreFriendlyFire (ME,true); SetIsShotRadius (ME,200); // SetEntropyMood (ME,AGRESSIVE_END); // SetCurMood (ME,AGRESSIVE_END); SetEntropyMood (ME,BRUTAL_START); SetCurMood (ME,BRUTAL_START); SetSkillLevel (ME,100,999,100); SetAttackThrottle (ME,100); // SetMinSpeed (ME,100); EnablePerWeaponRayCasting (ME,TRUE); bot_activated_timer = gti_Timer_1; endfunction; //------------------------------------------------------------------ // StartState: my initial state //------------------------------------------------------------------ state StartState; code StartTimer(bot_activated_timer); trans CheckTimer; endstate; state CheckTimer; code //--------------------------------------------- // Time before Bot Wakes up and starts Shooting //--------------------------------------------- if (TimeGreater(bot_activated_timer,5.0)) then trans WaitToAmbushState; endif; //--------------------------------------------- // Firing upon/near before timer up lets the bot go play //--------------------------------------------- if (IsShot(ME) == TRUE) then SetTarget(ME,WhoShot(ME)); trans WaitToAmbushState; endif; trans CheckTimer; endstate; //------------------------------------------------------------------ // WaitInAmbushState: wait for someone to come close enough to attack //------------------------------------------------------------------ state WaitToAmbushState; code if (Bot_FindEnemy(attackrange)) then trans AttackState; endif; OrderMoveLookOut; endstate; //------------------------------------------------------------------ // AttackState: the ambush is over -- let's kick some ass! //------------------------------------------------------------------ state AttackState; code if (LeaveAttackState(withdrawRange)) then trans WaitToAmbushState; endif; // OrderAttackTactic(TACTIC_FAST_CIRCLE,TRUE); OrderAttackTactic(TACTIC_CIRCLE,TRUE); endstate; //------------------------------------------------------------------ // DeadState: OK, I kicked the bucket. //------------------------------------------------------------------ state DeadState; code orderDie; endstate; endfsm.