////////////////////////////////////////////////// //Mission: Ghost Gallery // //Author: Yakibomb // //Released: October 24, 2019 // //Version: Alpha 6 // ////////////////////////////////////////////////// //Mission Details //s1a1 = defeat mobs! //s1a2 = defeat platforming challenge! //s1a3 = defeat capture point! //s1boss = defeat the boss! //Tags for Bots //bot_jarated = bot has piss on them //bot_milked = bot has milk on them //bot_bonked = bot is 100% invulnerable (a la Bonk! Atomic Punch) //bot_disciplinaryaction = bot has 40% speed boost //bot_rune_reflect = bot has Mann Power's reflect rune //bot_invisible = bot is cloaked //bot_crits = bot has 100% crits //bot_ubered = bot is Ubercharged //bot_stunned = bot is stunned, like Mannhattan's GateBots. Note: Seems to not work when used with bot_healing (Uber Heal) or bot_bonked (Bonk! invuln). //bot_healing = bot is healed from the Medigun to 200% HP (with restrictions for pre-set Health for the robot) //bot_healer = bot heals other bots around itself (like the Amputator) //bot_chargin = bot charges like the Demoknight //drop_random = on death, bot will drop a small treasure chest (100% chance) //drop_random_chance = on death, bot will drop a small treasure chest (6.25% chance) //drop_key_basic = dying drops a basic dungeon key //drop_rare_trap = bot drops big chest with 5 live pipe bombs (that are meant to kill the player..!) //drop_rare_cash = bot drops big chest with $125 cold hard cash //bot_boss = for bosses only. Use with bot_boss_mod_* to change forms every few seconds (specified below) //bot_boss_mod_behavior1 = changes boss' to behavior1 in 1 second //bot_boss_mod_behavior1_at_4 = changes boss' to behavior1 in 4 seconds //bot_boss_mod_behavior1_at_8 = changes boss' to behavior1 in 8 seconds //bot_boss_mod_behavior1_at_12 = changes boss' to behavior1 in 12 seconds //bot_boss_mod_behavior1_at_16 = changes boss' to behavior1 in 16 seconds // -!- Use up to behavior1 to behavior9 // -!- Can also use bot_boss_mod_default (and up to 4 to 16 seconds) #base robot_berserker_a6.pop WaveSchedule { StartingCurrency 1000 RespawnWaveTime 0 CanBotsAttackWhileInSpawnRoom Yes FixedRespawnWaveTime Yes //STAGE 1 /////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { InitWaveOutput { Target wave_init_relay_s1 Action Trigger } StartWaveOutput { Target wave_start_relay //Universal. The only important one is the InitWaveOutput. Action Trigger } DoneOutput { Target wave_finished_relay //Universal. The only important one is the InitWaveOutput. Action trigger } //Example // WaveSpawn // { // Name "dummy1" // // StartWaveOutput // { // Target setup_sXaY_dummy // Action Trigger // } // WaitBeforeStarting 3 // FirstSpawnOutput // { // Target event_sXaY_dummy // Action Enable // } // DoneOutput // { // Target setup_sXaY_dummy // Action Trigger // } // } //Setting up the stage events (bomb teleports) WaveSpawn { FirstSpawnWarningSound "\vo\announcer_attack_controlpoints.mp3" Name "s1a1_cp1" StartWaveOutput { Target setup_pause_botspawn_auto Action Trigger } Where spawnbot_bomb WaitBeforeStarting 4 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_Bersk_Event_Bomb } } //This spawns the collectible treasure chests on the map all over Stage 1 WaveSpawn { StartWaveOutput { Target setup_chest_spawn_s1 Action Trigger } } //This enables the Universal Trigger event relay, which the first door in the map uses to trigger all "event_*" events enabled (in this case, only event_unpause_botspawn is enabled). //Unlocks spawn doors in 5 seconds WaveSpawn { StartWaveOutput { Target event_universal_trigger Action Enable } WaitBeforeStarting 5 FirstSpawnOutput { Target setup_s1a1_unlockspawndoor Action Trigger } } WaveSpawn { WaitForAllSpawned "s1a1_cp1" Name "s1a1_mob" Where spawnbot_s1a1_frontdoor_staircase TotalCount 4 MaxActive 4 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 20 Support Limited TFBot { Class Scout Skill Easy WeaponRestrictions MeleeOnly Item "The Candy Cane" ClassIcon enemy } } WaveSpawn { WaitForAllSpawned "s1a1_cp1" Name "s1a1_mob" Where spawnbot_s1a1_frontdoor_staircase TotalCount 4 MaxActive 4 SpawnCount 1 WaitBeforeStarting 2 WaitBetweenSpawns 1 TotalCurrency 20 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Scout_Bat Item "The Candy Cane" } } WaveSpawn { WaitForAllSpawned "s1a1_cp1" Name "s1a1_mob" Where spawnbot_s1a1_frontdoor_side TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 25 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Scout_Pistol Item "The Candy Cane" Attributes IgnoreFlag } } WaveSpawn { WaitForAllSpawned "s1a1_cp1" Name "s1a1_mob" Where spawnbot_s1a1_ledge_side TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 4 WaitBetweenSpawns 1 TotalCurrency 50 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Scout_Scattergun Item "The Candy Cane" Attributes IgnoreFlag MaxVisionRange 1900 } } WaveSpawn { WaitForAllSpawned "s1a1_cp1" Name "s1a1_mob" Where spawnbot_s1a1_cp1_back TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 2 WaitBetweenSpawns 1 TotalCurrency 20 Support Limited TFBot { Template T_Bersk_Soldier_Big_Liberty Tag drop_random Attributes AlwaysFireWeapon Attributes IgnoreFlag } } //After the mob has been defeated, CP1 Unlocks WaveSpawn { WaitForAllDead "s1a1_mob" StartWaveWarningSound "\vo\announcer_we_secured_control.mp3" StartWaveOutput { Target event_universal_trigger Action Enable } FirstSpawnOutput { Target event_bomb Action Enable } WaitBeforeStarting 3 DoneOutput { Target setup_s1a1_cp1_unlock Action Trigger } } //When CP1 is captured, kills "s1a1_cp1" to trigger: //the relay to close the spawn door (killing anyone inside) //unlocks the next door to area2. //event_bomb triggers the events by killing the bot "s1a1_closing"... WaveSpawn { WaitForAllDead "s1a1_cp1" // FirstSpawnOutput // { // Target setup_s1a1_lockspawndoor // Action Trigger // } StartWaveOutput { Target setup_s1a1_unlockcp1door Action Trigger } DoneOutput { Target event_bomb Action Enable } } //Setting up the stage events (key trigger) //Stops any bots from spawning until the new area is opened. //When this bot dies, spawns area2 mobs WaveSpawn { WaitForAllDead "s1a1_cp1" Name "s1a1_closing" StartWaveOutput { Target event_universal_trigger Action Enable } Where spawnbot_bomb WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_Bersk_Event_Bomb } } //Begins to spawn enemies behind the door. //This first mob will enable the event_bomb, which will be triggered by the key touching the lock at the end of this area. //Notice it is "FirstSpawnOutput", not "StartWaveOutput". This ensures the event_bomb is enabled after the s1a1 exit door is opened. WaveSpawn { WaitForAllDead "s1a1_closing" FirstSpawnOutput { Target event_bomb Action Enable } Where spawnbot_s1a2_tunnel TotalCount 10 MaxActive 5 SpawnCount 2 WaitBeforeStarting 1 WaitBetweenSpawns 2 TotalCurrency 50 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Scout_Bat } } WaveSpawn { WaitForAllDead "s1a1_closing" FirstSpawnOutput { Target event_universal_trigger Action Enable } Where spawnbot_s1a2_front TotalCount 2 MaxActive 2 SpawnCount 2 WaitBeforeStarting 1 WaitBetweenSpawns 0 TotalCurrency 40 Support Limited Squad { ShouldPreserveSquad 1 FormationSize 120 TFBot { Template T_Bersk_Heavyweapons_SteelGauntlet Tag drop_random } TFBot { Template T_Bersk_Medic_QF_ShortShield Tag drop_random } } } WaveSpawn { WaitForAllDead "s1a1_closing" Where spawnbot_s1a2_upperbalcony1 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 20 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Pyro_Secondary Attributes IgnoreFlag Attributes HoldFireUntilFullReload } } WaveSpawn { WaitForAllDead "s1a1_closing" Where spawnbot_s1a2_upperbalcony2 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 0 TotalCurrency 20 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Pyro_Secondary Attributes IgnoreFlag Attributes HoldFireUntilFullReload } } WaveSpawn { WaitForAllDead "s1a1_closing" Where spawnbot_s1a2_upperbalcony3 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 0 TotalCurrency 20 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Pyro_Secondary Attributes IgnoreFlag Attributes HoldFireUntilFullReload } } //Setting up the stage events (ghosts in this mission) //When this bot dies, starts the next mobs for area3. WaveSpawn { WaitForAllDead "s1a1_closing" Name "s1a2_key" StartWaveOutput { Target event_universal_trigger Action Enable } FirstSpawnOutput { Target event_bomb Action Enable } Where spawnbot_bomb WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_Bersk_Event_Bomb } } //Engineer bot spawns for the Shop area //Use Target kill_blu Action Trigger to kill ALL enemies (including Ubered) at any time in the map. //Or, use "Target event_kill_blu" "Action Enable" to kill them when an Event occurs. WaveSpawn { WaitForAllDead "s1a1_closing" Where spawnbot_s1_shop WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 Support Limited TFBot { Template T_Bersk_Shopkeeper_1 } } //Notice "event_*" is set to Action Enable, while "setup_*" is set to Action Trigger. WaveSpawn { WaitForAllDead "s1a1_closing" StartWaveOutput { Target event_s1a3_cp2_ghostchase Action Enable } FirstSpawnOutput { Target setup_s1a3_ghosts Action Trigger } DoneOutput { Target setup_s1a3_ghosts_roam Action Trigger } } //These are the area3 mobs WaveSpawn { WaitForAllDead "s1a2_key" Name "s1a3_mobs" Where spawnbot_s1a3_entrance_path5 TotalCount 8 MaxActive 8 SpawnCount 1 WaitBeforeStarting 5 WaitBetweenSpawns 0 TotalCurrency 40 Support Limited TFBot { Template T_Bersk_Scout_Bat MaxVisionRange 200 Tag bot_invisible CharacterAttributes { "no_duck" 1 "no_jump" 1 } } } WaveSpawn { WaitForAllDead "s1a2_key" Name "s1a3_mobs" Where spawnbot_s1a3_entrance_path TotalCount 3 MaxActive 3 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 60 Support Limited TFBot { Tag drop_random_chance Class Heavyweapons Skill Normal ClassIcon enemy Attributes IgnoreFlag WeaponRestrictions PrimaryOnly Attributes AlwaysFireWeapon } } //Unlocks CP2 when all enemies are eliminated in area 3 WaveSpawn { WaitForAllDead "s1a3_mobs" DoneOutput { Target setup_s1a3_cp2_unlock Action Trigger } } //Setting up the stage events (s1a3_cp2) WaveSpawn { WaitForAllDead "s1a3_mobs" StartWaveOutput { Target event_bomb Action Enable } Name "s1a3_cp2" FirstSpawnOutput { Target event_universal_trigger Action Enable } Where spawnbot_bomb WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_Bersk_Event_Bomb } } WaveSpawn { WaitForAllDead "s1a3_cp2" Where spawnbot_s1a3_crypt1 TotalCount 4 MaxActive 4 SpawnCount 2 WaitBeforeStarting 2 WaitBetweenSpawns 1 TotalCurrency 40 Support Limited TFBot { Tag drop_random_chance Template T_Bersk_Pyro_VolcanoFragment Item "Honest Halo" } } WaveSpawn { WaitForAllDead "s1a3_cp2" Where spawnbot_s1a3_7 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 0 TotalCurrency 5 Support Limited TFBot { Template T_Bersk_Pyro_Secondary Item "The Detonator" Attributes IgnoreFlag Item "Honest Halo" } } WaveSpawn { WaitForAllDead "s1a3_cp2" Where spawnbot_s1a3_2 TotalCount 3 MaxActive 3 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 15 Support Limited TFBot { Template T_Bersk_Pyro_Secondary Item "The Detonator" Attributes IgnoreFlag Item "Honest Halo" } } WaveSpawn { WaitForAllDead "s1a3_cp2" Where spawnbot_s1a3_3 TotalCount 3 MaxActive 3 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 15 Support Limited TFBot { Template T_Bersk_Pyro_Secondary Item "The Detonator" Attributes IgnoreFlag Item "Honest Halo" } } WaveSpawn { WaitForAllDead "s1a3_cp2" Where spawnbot_s1a3_crypt3 TotalCount 4 MaxActive 4 SpawnCount 1 WaitBeforeStarting 5 WaitBetweenSpawns 2 TotalCurrency 40 Support Limited TFBot { Template T_Bersk_Pyro_VolcanoFragment Item "Honest Halo" } } WaveSpawn { WaitForAllDead "s1a3_cp2" StartWaveOutput { Target event_s1a3_openenemygates Action Enable } DoneOutput { Target setup_onstarttouch_s1a3_underbelly Action Enable } } WaveSpawn { WaitForAllDead "s1a3_cp2" Name "s1a3_underbelly" Where spawnbot_s1a3_underbelly TotalCount 4 MaxActive 4 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 0 TotalCurrency 80 Support Limited RandomChoice { TFBot { Class Heavyweapons Skill Expert Health 350 Scale 1.1 ClassIcon enemy Attributes AlwaysFireWeapon WeaponRestrictions MeleeOnly } TFBot { Class Demoman Skill Expert Health 250 Scale 1.1 ClassIcon enemy Attributes AlwaysFireWeapon WeaponRestrictions MeleeOnly } TFBot { Class Soldier Skill Expert Health 250 Scale 1.1 ClassIcon enemy Attributes AlwaysFireWeapon WeaponRestrictions MeleeOnly } } DoneOutput { Target setup_s1a3_openkeygate Action Trigger } } //Enemy drops Boss Key immediately in cell upon defeat //BUG: For now it's bugged to where it doesn't spawn if the wave has progressed too far? Nav problem?? WaveSpawn { WaitForAllSpawned "s1a1_cp1" Where spawnbot_s1a3_underbelly_key TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 0 TotalCurrency 0 Support Limited TFBot { Tag drop_key_basic Template T_Bersk_AutoDie } } //Setting up event: stage 1 boss WaveSpawn { WaitForAllDead "s1a3_underbelly" Name "s1a3_closing" StartWaveOutput { Target event_bomb Action Enable } Where spawnbot_bomb WaitBeforeStarting 2 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_Bersk_Event_Bomb } DoneOutput { Target kill_blu Action Trigger } } //BOSS STAGE 1 WaveSpawn { StartWaveWarningSound "\music\mvm_start_last_wave.wav" WaitForAllDead "s1a3_closing" Name "s1a3_boss" Where spawnbot_s1_boss TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 200 TFBot { Template T_Bersk_Boss_Giant_Heavy_3Forms_8KGB_8GRU_4Sandvich Name "Stage 1 Boss" } } } //STAGE 2 /////////////////////////////////////////////////////////////////////////////////////////////////////// // Wave // { // InitWaveOutput // { // Target wave_init_relay_stage2 // Action Trigger // } // StartWaveOutput // { // Target wave_start_relay // Action Trigger // } // DoneOutput // { // Target wave_finished_relay // Action trigger // } // // WaveSpawn // { // Where spawnbot_bomb // TotalCount 8 // MaxActive 1 // SpawnCount 1 // WaitBeforeStarting 0 // WaitBetweenSpawns 0 // TotalCurrency 0 // // TFBot // { // Class Heavyweapons // Skill Expert // ClassIcon enemy // Attributes SuppressFire // Attributes IgnoreEnemies // CharacterAttributes // { // "damage penalty" 0 // } // } // } // } }