#base robot_standard_vanilla_kai.pop #base robot_standard_custom_kai.pop #base robot_standard_custom_rafmod_kai.pop #base robot_standard_supercharged_kai.pop #base robot_standard_supercharged_rafmod_kai.pop #base robot_giant_vanilla_kai.pop #base robot_giant_custom_kai.pop #base robot_giant_custom_rafmod_kai.pop #base robot_giant_supercharged_kai.pop #base robot_giant_supercharged_rafmod_kai.pop #base robot_tank_custom_rafmod_kai.pop WaveSchedule { StartingCurrency 1200 RespawnWaveTime 1 CanBotsAttackWhileInSpawnRoom No EventPopfile Halloween AddSentryBusterWhenDamageDealtExceeds 3000 AddSentryBusterWhenKillCountExceeds 10 AllowBotExtraSlots 1 RobotLimit 25 BodyPartScaleSpeed 10 ForceHoliday 2 ZombiesNoWave666 1 MissionUnloadOutput { Target BigNet Action RunScriptCode Param " Convars.SetValue(`tf_playergib`, 1) " Delay -1 } //// PRECACHES //// //// CUSTOM WEAPONS //// CustomWeapon { "PickaxeAttack" { OriginalItemName "The Iron Bomber" "faster reload rate" 0 "projectile speed decreased" 0.65 "mult projectile scale" 0.5 "custom projectile size" 24 "custom projectile model" "models/props_forest/cliff_wall_09c.mdl" "projectile trail particle" "electrocuted_blue" "projectile spread angle penalty" 4 "mult projectile count" 3 } "RocketAttack" { OriginalItemName "TF_WEAPON_ROCKETLAUNCHER" "damage bonus" 1 "projectile speed decreased" 0.4 "mod projectile heat seek power" 180 "mod projectile heat aim error" 360 "mod projectile heat aim time" 0.5 "mod projectile heat no predict target speed" 1 "projectile trail particle" "eyeboss_projectile" } "FrankensteinRocket" { OriginalItemName "Highland High Heels" "custom item model" "models/weapons/c_models/c_rocketlauncher/c_rocketlauncher.mdl" "attachment name" "flag" "attachment angles" "0 270 0" "attachment offset" "25 0 0" } "FrankensteinRocket2" { OriginalItemName "Potato of Labor" "custom item model" "models/weapons/c_models/c_rocketlauncher/c_rocketlauncher.mdl" "attachment name" "flag" "attachment angles" "0 270 0" "attachment offset" "-25 0 0" } } //// POINT TEMPLATES //// PointTemplates { CorePT { OnSpawnOutput { Target BigNet Action RunScriptCode Param " NetProps.SetPropString(Entities.FindByClassname(null, `tf_objective_resource`), `m_iszMvMPopfileName`, `(Master) Shoot the Moon`) Convars.SetValue(`tf_playergib`, 0) PrecacheSound(`vo/soldier_sf12_zombie02.mp3`) PrecacheSound(`vo/soldier_sf12_zombie04.mp3`) IncludeScript(`tankextensions_main`) IncludeScript(`tankextensions/combattank`) IncludeScript(`tankextensions/combattank_weapons/rocketpod`) " } } FrankensteinSoldierPT { // Pickaxe Attack // OnSpawnOutput { Target "PickaxeAttackMain" Action "$SetOwner" Param "!activator" Delay 0.02 } OnSpawnOutput { Target "PickaxeAttackMain" Action "$RotateTowards" Param "!activator" Delay 0.02 } tf_point_weapon_mimic { "spawnflags" "1" "targetname" "PickaxeAttackMain" "$weaponname" "PickaxeAttack" "origin" "40 0 80" "angles" "-40 0 0" "$preventshootparent" "1" "teamnum" "3" "Crits" "false" "modelscale" "1" "$modules" "rotator" "$lookat" "aim" "$rotationspeedx" "300" "$rotationspeedy" "300" "$rotationlimitx" "180" "$rotationlimity" "180" } // Rocket Attack // OnSpawnOutput { Target "RocketAttackLeft" Action "$SetOwner" Param "!activator" Delay 0.02 } OnSpawnOutput { Target "RocketAttackRight" Action "$SetOwner" Param "!activator" Delay 0.02 } logic_relay { "targetname" "RocketBarrageRelay" "OnTrigger" "RocketAttack*,FireOnce,,0,-1" "OnTrigger" "RocketAttack*,FireOnce,,0.5,-1" "OnTrigger" "RocketAttack*,FireOnce,,1,-1" "OnTrigger" "RocketAttack*,FireOnce,,1.5,-1" } logic_relay { "targetname" "RocketBarrageRageRelay" "OnTrigger" "RocketAttack*,FireOnce,,0,-1" "OnTrigger" "RocketAttack*,FireOnce,,0.25,-1" "OnTrigger" "RocketAttack*,FireOnce,,0.5,-1" "OnTrigger" "RocketAttack*,FireOnce,,0.75,-1" "OnTrigger" "RocketAttack*,FireOnce,,1,-1" "OnTrigger" "RocketAttack*,FireOnce,,1.25,-1" "OnTrigger" "RocketAttack*,FireOnce,,1.5,-1" "OnTrigger" "RocketAttack*,FireOnce,,1.75,-1" } tf_point_weapon_mimic { "targetname" "RocketAttackLeft" "origin" "25 50 150" "angles" "315 0 0" "$weaponname" "RocketAttack" "teamnum" "3" "crits" "false" "$preventshootparent" "1" "spawnflags" "1" } tf_point_weapon_mimic { "targetname" "RocketAttackRight" "origin" "25 -50 150" "angles" "315 0 0" "$weaponname" "RocketAttack" "teamnum" "3" "crits" "false" "$preventshootparent" "1" "spawnflags" "1" } } } //// SPAWNED POINT TEMPLATES //// SpawnTemplate "CorePT" //// ROBOT TEMPLATES //// Templates { T_TFBot_Miniboss_Frankenstein_Soldier { Name "Frankenstein's Soldier" Class Soldier ClassIcon soldier_pickaxe_escape_explode Skill Expert Health 25000 Scale 1.9 Attributes MiniBoss Attributes SuppressFire Attributes UseBossHealthBar WeaponRestrictions MeleeOnly SpawnTemplate "FrankensteinSoldierPT" Item "The Escape Plan" Item "Potato Hat" Item "FrankensteinRocket" Item "FrankensteinRocket2" CharacterAttributes { "move speed bonus" 0.4 "damage force reduction" 0 "airblast vulnerability multiplier" 0 "mult stun resistance" 0 "mod weapon blocks healing" 1 "override footstep sound set" 3 "voice pitch scale" 0.75 } ItemAttributes { ItemName "The Escape Plan" "fire input on attack" "PickaxeAttackMain^FireOnce" "melee cleave attack" 1 "mod shovel speed boost" 0 "self mark for death" 0 } AddAttribute { Item "FrankensteinRocket" Name "attachment scale" Value "2.35" Delay 0.1 Repeats 1 Cooldown -1 } AddAttribute { Item "FrankensteinRocket2" Name "attachment scale" Value "2.35" Delay 0.1 Repeats 1 Cooldown -1 } ChangeAttributes { Name "FrankensteinPhase1" Delay 0 Repeats 1 } ChangeAttributes { Name "FrankensteinPhase2" Delay 0 Repeats 1 IfHealthBelow 12501 } EventChangeAttributes { FrankensteinPhase1 { FireInput { Target !activator Action RunScriptCode Param " EmitSoundEx({ sound_name = `vo/soldier_sf12_zombie04.mp3` channel = 6 pitch = 85 sound_level = 120 special_dsp = 25 entity = self }) " } FireWeapon { Type "Primary" Delay 0 Duration 0.5 Cooldown 2.5 IfSeeTarget 1 IfLeftSpawn 1 } FireInput { Target "RocketBarrageRelay" Action "Trigger" Delay 0 Repeats 0 Cooldown 7 IfSeeTarget 1 IfLeftSpawn 1 } } FrankensteinPhase2 { FireInput { Target !activator Action RunScriptCode Param " EmitSoundEx({ sound_name = `vo/soldier_sf12_zombie02.mp3` channel = 6 pitch = 85 sound_level = 120 special_dsp = 25 entity = self }) " } FireWeapon { Type "Primary" Delay 0 Duration 0.5 Cooldown 1.5 IfSeeTarget 1 IfLeftSpawn 1 } FireInput { Target "RocketBarrageRageRelay" Action "Trigger" Delay 0 Repeats 0 Cooldown 7 IfSeeTarget 1 IfLeftSpawn 1 } } } } } //// MISSION BOTS //// Mission // Sentry Buster { Objective DestroySentries Where spawnbot BeginAtWave 1 RunForThisManyWaves 7 InitialCooldown 30 CooldownTime 30 DesiredCount 1 TFBot { Template T_TFBot_SentryBuster } } Mission // Sniper (Wave 2) { Objective Sniper Where spawnbot_invasion BeginAtWave 2 RunForThisManyWaves 1 InitialCooldown 60 CooldownTime 45 DesiredCount 3 TFBot { Template T_TFBot_Sniper } } //// WAVES //// Wave { InitWaveOutput { Target BigNet Action RunScriptCode Param " EntFire(`init_wave_relay_main`, `Trigger`) " } StartWaveOutput { Target BigNet Action RunScriptCode Param " EntFire(`wave_start_relay`, `Trigger`) " } DoneOutput { Target BigNet Action RunScriptCode Param " EntFire(`wave_finished_relay`, `Trigger`) " } // Subwave 1 WaveSpawn // Frankenstein's Soldier { Name "Wave1_Subwave1_FrankensteinSoldier" Where spawnbot_boss TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 400 TFBot { Template T_TFBot_Miniboss_Frankenstein_Soldier } } WaveSpawn // Support Scouts { Name "Wave1_Subwave1_Scouts" WaitForAllSpawned "Wave1_Subwave1_FrankensteinSoldier" Where spawnbot_boss Support 1 TotalCount 60 MaxActive 4 SpawnCount 3 WaitBeforeStarting 5 WaitBetweenSpawns 0 TotalCurrency 100 TFBot { Class Scout Skill Easy } } WaveSpawn // Support Demomen and Big-Heal Medics { Name "Wave1_Subwave1_Demomen" WaitForAllSpawned "Wave1_Subwave1_FrankensteinSoldier" Where spawnbot Support 1 TotalCount 20 MaxActive 2 SpawnCount 2 WaitBeforeStarting 10 WaitBetweenSpawns 0 TotalCurrency 100 Squad { TFBot { Class Demoman Skill Expert } TFBot { Template T_TFBot_Medic_BigHeal } } } } Wave { InitWaveOutput { Target BigNet Action RunScriptCode Param " EntFire(`init_wave_relay_main`, `Trigger`) " } StartWaveOutput { Target BigNet Action RunScriptCode Param " EntFire(`wave_start_relay`, `Trigger`) " } DoneOutput { Target BigNet Action RunScriptCode Param " EntFire(`wave_finished_relay`, `Trigger`) " } // Subwave 1 WaveSpawn // 1 GBurst Charged Soldier and 4 Quick-Uber Medics { Name "Wave2_Subwave1_GBurstChargedSoldier" Where spawnbot TotalCount 5 MaxActive 5 SpawnCount 5 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 60 Squad { TFBot { Template T_TFBot_Giant_Soldier_Burst_Crit } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } } } WaveSpawn // 10 Direct Hit Soldiers { Name "Wave2_Subwave1_DirectHitSoldiers" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier" Where spawnbot_right TotalCount 10 MaxActive 4 SpawnCount 2 WaitBeforeStarting 2 WaitBetweenSpawns 3 TotalCurrency 40 TFBot { Template T_TFBot_Soldier_DirectHit Skill Expert AimAt Feet } } WaveSpawn // 9 Heavies { Name "Wave2_Subwave1_Heavies" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier" Where spawnbot_flank TotalCount 9 MaxActive 6 SpawnCount 3 WaitBeforeStarting 2 WaitBetweenSpawns 6 TotalCurrency 40 TFBot { Class Heavy Skill Easy } } WaveSpawn // 1 GBurst Charged Soldier and 4 Quick-Uber Medics { Name "Wave2_Subwave1_GBurstChargedSoldier2" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier" Where spawnbot TotalCount 5 MaxActive 5 SpawnCount 5 WaitBeforeStarting 18 WaitBetweenSpawns 0 TotalCurrency 60 Squad { TFBot { Template T_TFBot_Giant_Soldier_Burst_Crit } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } } } WaveSpawn // 10 Direct Hit Soldiers { Name "Wave2_Subwave1_DirectHitSoldiers2" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier2" Where spawnbot_right TotalCount 10 MaxActive 4 SpawnCount 2 WaitBeforeStarting 2 WaitBetweenSpawns 3 TotalCurrency 40 TFBot { Template T_TFBot_Soldier_DirectHit Skill Expert AimAt Feet } } WaveSpawn // 9 Heavies { Name "Wave2_Subwave1_Heavies2" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier2" Where spawnbot_flank TotalCount 9 MaxActive 6 SpawnCount 3 WaitBeforeStarting 2 WaitBetweenSpawns 6 TotalCurrency 40 TFBot { Class Heavy Skill Easy } } WaveSpawn // 1 GBurst Charged Soldier and 4 Quick-Uber Medics { Name "Wave2_Subwave1_GBurstChargedSoldier3" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier2" Where spawnbot TotalCount 5 MaxActive 5 SpawnCount 5 WaitBeforeStarting 18 WaitBetweenSpawns 0 TotalCurrency 60 Squad { TFBot { Template T_TFBot_Giant_Soldier_Burst_Crit } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } } } WaveSpawn // 9 Homewrecker Knights { Name "Wave2_Subwave1_HomewreckerKnights" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier3" Where spawnbot_boss TotalCount 9 MaxActive 9 SpawnCount 9 WaitBeforeStarting 2 WaitBetweenSpawns 0 TotalCurrency 100 TFBot { Template T_TFBot_Demoman_Knight_Homewrecker } } WaveSpawn // 9 Heavies { Name "Wave2_Subwave1_Heavies3" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier3" Where spawnbot_flank TotalCount 9 MaxActive 6 SpawnCount 3 WaitBeforeStarting 2 WaitBetweenSpawns 6 TotalCurrency 40 TFBot { Class Heavy Skill Easy } } // Subwave 2 WaveSpawn // 1 GPyro and 4 Burst Demos { Name "Wave2_Subwave2_GPyro" WaitForAllSpawned "Wave2_Subwave1_GBurstChargedSoldier3" Where spawnbot TotalCount 5 MaxActive 5 SpawnCount 5 WaitBeforeStarting 18 WaitBetweenSpawns 0 TotalCurrency 60 Squad { NoWaitForFormation 1 TFBot { Template T_TFBot_Giant_Pyro ItemAttributes { ItemName "TF_WEAPON_FLAMETHROWER" "airblast disabled" 1 } } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } } } WaveSpawn // 1 GRapid Shotgun Soldier { Name "Wave2_Subwave2_GRapidShotgunSoldier" WaitForAllSpawned "Wave2_Subwave2_GPyro" Where spawnbot_boss TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 2 WaitBetweenSpawns 0 TotalCurrency 40 TFBot { Template T_TFBot_Giant_Soldier_Shotgun_Spammer Skill Normal } } WaveSpawn // 16 Soldiers { Name "Wave2_Subwave2_Soldiers" WaitForAllSpawned "Wave2_Subwave2_GPyro" Where spawnbot_left Where spawnbot_right TotalCount 16 MaxActive 8 SpawnCount 4 WaitBeforeStarting 2 WaitBetweenSpawns 4 TotalCurrency 60 TFBot { Class Soldier Skill Easy } } WaveSpawn // 1 GPyro and 4 Burst Demos { Name "Wave2_Subwave2_GPyro2" WaitForAllSpawned "Wave2_Subwave2_GPyro" Where spawnbot TotalCount 5 MaxActive 5 SpawnCount 5 WaitBeforeStarting 20 WaitBetweenSpawns 0 TotalCurrency 60 Squad { NoWaitForFormation 1 TFBot { Template T_TFBot_Giant_Pyro ItemAttributes { ItemName "TF_WEAPON_FLAMETHROWER" "airblast disabled" 1 } } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } } } WaveSpawn // 1 GRapid Shotgun Soldier { Name "Wave2_Subwave2_GRapidShotgunSoldier2" WaitForAllSpawned "Wave2_Subwave2_GPyro2" Where spawnbot_boss TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 2 WaitBetweenSpawns 0 TotalCurrency 40 TFBot { Template T_TFBot_Giant_Soldier_Shotgun_Spammer Skill Normal } } WaveSpawn // 16 Soldiers { Name "Wave2_Subwave2_Soldiers2" WaitForAllSpawned "Wave2_Subwave2_GPyro2" Where spawnbot_left Where spawnbot_right TotalCount 16 MaxActive 8 SpawnCount 4 WaitBeforeStarting 2 WaitBetweenSpawns 4 TotalCurrency 60 TFBot { Class Soldier Skill Easy } } WaveSpawn // 1 GPyro, 4 Burst Demos and 2 Quick-Uber Medics { Name "Wave2_Subwave2_GPyro3" WaitForAllSpawned "Wave2_Subwave2_GPyro2" Where spawnbot TotalCount 7 MaxActive 7 SpawnCount 7 WaitBeforeStarting 20 WaitBetweenSpawns 0 TotalCurrency 60 Squad { NoWaitForFormation 1 TFBot { Template T_TFBot_Giant_Pyro ItemAttributes { ItemName "TF_WEAPON_FLAMETHROWER" "airblast disabled" 1 } } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Medic_QuickUber } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } TFBot { Template T_TFBot_Demoman_Burst } } } WaveSpawn // 1 GRapid Shotgun Soldier { Name "Wave2_Subwave2_GRapidShotgunSoldier3" WaitForAllSpawned "Wave2_Subwave2_GPyro3" Where spawnbot_boss TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 2 WaitBetweenSpawns 0 TotalCurrency 40 TFBot { Template T_TFBot_Giant_Soldier_Shotgun_Spammer Skill Normal } } WaveSpawn // 9 Homewrecker Knights { Name "Wave2_Subwave2_HomewreckerKnights" WaitForAllSpawned "Wave2_Subwave2_GPyro3" Where spawnbot_boss TotalCount 9 MaxActive 9 SpawnCount 9 WaitBeforeStarting 2 WaitBetweenSpawns 0 TotalCurrency 100 TFBot { Template T_TFBot_Demoman_Knight_Homewrecker } } } Wave { InitWaveOutput { Target BigNet Action RunScriptCode Param " EntFire(`init_wave_relay_alt`, `Trigger`) TankExt.SetValueOverrides({COMBATTANK_MAX_RANGE = 0}) " } StartWaveOutput { Target BigNet Action RunScriptCode Param " EntFire(`wave_start_relay`, `Trigger`) " } DoneOutput { Target BigNet Action RunScriptCode Param " EntFire(`wave_finished_relay`, `Trigger`) " } // Subwave 1 WaveSpawn { Name "Wave3_Subwave1_RocketBarrageTank" TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 100 FirstSpawnWarningSound "mvm/mvm_tank_start.wav" LastSpawnWarningSound "ambient/alarms/manhack_alert_pass1.wav" Tank { Template Tank_Combat_Rocket_Barrage Health 35000 Speed 50 StartingPathTrackNode "boss_path_2" OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } } }