//==========================================================================================
//	baserace_b3c.gm
//
//	Who  	When		What
//------------------------------------------------------------------------------------------
//	^4Tardis	04 November 2010	Copy Script - 0.8 (Bace Race)
//------------------------------------------------------------------------------------------

// cs: todo: replace trigger regions for cappoints with the new cappoint triggers (if possible)
global Map =
{
	Quiet = true,
	Debug = 0,

	// Set the Bot Strategy for the map based on the 10 point systems found at
	// http://battlefield.planetwolfenstein.gamespy.com/baseraceguide/baseconfigurations.htm
	// optionally, you can define your own by adding to the table
	// 1 - Random ( randomly choose from all available )
	// 2 - PCR - from PatheticCockroach @ omni-bot.de forum
	// 3 - The Best Attack is the Best Defense
	// 4 - Ultimate Steals
	// 5 - the best base configuration ever
	// 6 - rapid invasions
	// 7 - Rocket Insanity!
	// 8 - defense strategy
	// 9 - Away From Home Configuration
	AlliedBotStrategy = 1,
	AxisBotStrategy = 1,

	BaseStrats =
	{
		// valid keywords
		// armory
		// assault
		// engineering
		// gatebunker
		// forwardwall
		// leftwall
		// ops
		// med
		// rightwall
		// spawn

		// do not use
		{
			// reserved
		},

		// do not use - list of keywords
		{
			// reserved
		},

		// 2 - PCR - from PatheticCockroach
		{
			Name = "PCR",

			spawn = 14, // first do all 4 spawn
			engineering = 10, // second do these 4
			med = 6, // med and assault next
			assault = 6,
			armory = 4, //after med and assault at lvl 2, also work on armory & ops
			ops = 4,
		},

		// 3 - The Best Attack is the Best Defense
		{
			Name = "The Best Attack is the Best Defense",

			spawn = 4,
			med = 2,
			armory = 2,
			ops = 2,
		},

		// 4 - Ultimate Steals
		{
			Name = "Ultimate Steals",

			med = 4,
			engineering = 4,
			spawn = 2,
		},

		// 5 - the best base configuration ever
		{
			Name = "the best base configuration ever ",

			engineering = 4,
			spawn = 4,
			med = 2,
		},

		// 6 - rapid invasions
		{
			Name = "rapid invasions",

			engineering = 4,
			spawn = 2,
			ops = 4,
		},

		// 7 - Rocket Insanity!
		{
			Name = "Rocket Insanity!",

			armory = 4,
			med = 2,
			assault = 2,
			gatebunker = 2,
		},

		// 8 - defense strategy
		{
			Name = "defense strategy",

			engineering = 2,
			spawn = 2,
			rightwall = 2,
			forwardwall = 2,
			leftwall = 2,
		},

		// 9 - Away From Home Configuration
		{
			Name = "Away From Home Configuration",

			engineering = 4,
			spawn = 2,
			assault = 2,
			gatebunker = 2,
		},
	},

	Ammo_Cabinet_ammobox1_allied_giveammo = "AMMOCAB_ammobox1_allied_giveammo",
	Ammo_Cabinet_ammobox1_axis_giveammo = "AMMOCAB_ammobox1_axis_giveammo",
	Ammo_Cabinet_ammobox2_allied_giveammo = "AMMOCAB_ammobox2_allied_giveammo",
	Ammo_Cabinet_ammobox2_axis_giveammo = "AMMOCAB_ammobox2_axis_giveammo",
	Ammo_Cabinet_ammobox3_allied_giveammo = "AMMOCAB_ammobox3_allied_giveammo",
	Ammo_Cabinet_ammobox3_axis_giveammo = "AMMOCAB_ammobox3_axis_giveammo",
	Ammo_Cabinet_armory_allied_ammostand = "AMMOCAB_armory_allied_ammostand",
	Ammo_Cabinet_armory_axis_ammostand = "AMMOCAB_armory_axis_ammostand",
	Health_Cabinet_healthbox1_allied_giveammo = "HEALTHCAB_healthbox1_allied_giveammo",
	Health_Cabinet_healthbox1_axis_giveammo = "HEALTHCAB_healthbox1_axis_giveammo",
	Health_Cabinet_healthbox2_allied_giveammo = "HEALTHCAB_healthbox2_allied_giveammo",
	Health_Cabinet_healthbox2_axis_giveammo = "HEALTHCAB_healthbox2_axis_giveammo",
	Health_Cabinet_healthbox3_allied_giveammo = "HEALTHCAB_healthbox3_allied_giveammo",
	Health_Cabinet_healthbox3_axis_giveammo = "HEALTHCAB_healthbox3_axis_giveammo",
	Health_Cabinet_medical_allied_healthstand = "HEALTHCAB_medical_allied_healthstand",
	Health_Cabinet_medical_axis_healthstand = "HEALTHCAB_medical_axis_healthstand",
	Flag_Construction_Materials = "FLAG_Construction_Materials",
	Flag_Construction_Materials_1 = "FLAG_Construction_Materials_1",
	Flag_Construction_Materials_2 = "FLAG_Construction_Materials_2",
	Flag_Construction_Materials_3 = "FLAG_Construction_Materials_3",
	Flag_Construction_Materials_4 = "FLAG_Construction_Materials_4",
	Flag_Construction_Materials_5 = "FLAG_Construction_Materials_5",
	Flag_Construction_Materials_6 = "FLAG_Construction_Materials_6",
	Flag_Construction_Materials_7 = "FLAG_Construction_Materials_7",
	Cappoint_blue_pad_armory = "CAPPOINT_blue_pad_armory",
	Cappoint_blue_pad_assault = "CAPPOINT_blue_pad_assault",
	Cappoint_blue_pad_engineering = "CAPPOINT_blue_pad_engineering",
	Cappoint_blue_pad_forwardwall = "CAPPOINT_blue_pad_forwardwall",
	Cappoint_blue_pad_gatebunker = "CAPPOINT_blue_pad_gatebunker",
	Cappoint_blue_pad_leftwall = "CAPPOINT_blue_pad_leftwall",
	Cappoint_blue_pad_med = "CAPPOINT_blue_pad_med",
	Cappoint_blue_pad_ops = "CAPPOINT_blue_pad_ops",
	Cappoint_blue_pad_rightwall = "CAPPOINT_blue_pad_rightwall",
	Cappoint_blue_pad_spawn = "CAPPOINT_blue_pad_spawn",
	Cappoint_red_pad_armory = "CAPPOINT_red_pad_armory",
	Cappoint_red_pad_assault = "CAPPOINT_red_pad_assault",
	Cappoint_red_pad_engineering = "CAPPOINT_red_pad_engineering",
	Cappoint_red_pad_forwardwall = "CAPPOINT_red_pad_forwardwall",
	Cappoint_red_pad_gatebunker = "CAPPOINT_red_pad_gatebunker",
	Cappoint_red_pad_leftwall = "CAPPOINT_red_pad_leftwall",
	Cappoint_red_pad_med = "CAPPOINT_red_pad_med",
	Cappoint_red_pad_ops = "CAPPOINT_red_pad_ops",
	Cappoint_red_pad_rightwall = "CAPPOINT_red_pad_rightwall",
	Cappoint_red_pad_spawn = "CAPPOINT_red_pad_spawn",
	Build_Allied_Outpost = "BUILD_Allied_Outpost",
	Build_Axis_Outpost = "BUILD_Axis_Outpost",
	Build_Gate_Rocketgun = "BUILD_Gate_Rocketgun",
	Build_Gate_Rocketgun_1 = "BUILD_Gate_Rocketgun_1",
	Build_Tower_Rocketgun = "BUILD_Tower_Rocketgun",
	Build_Tower_Rocketgun_1 = "BUILD_Tower_Rocketgun_1",
	Plant_Allied_Outpost = "PLANT_Allied_Outpost",
	Plant_Allied_Underbase_Door = "PLANT_Allied_Underbase_Door",
	Plant_Allied_Underbase_Wall = "PLANT_Allied_Underbase_Wall",
	Plant_Axis_Outpost = "PLANT_Axis_Outpost",
	Plant_Axis_Underbase_Door = "PLANT_Axis_Underbase_Door",
	Plant_Axis_Underbase_Wall = "PLANT_Axis_Underbase_Wall",
	Explode_Gate_Rocketgun = "EXPLODE_Gate_Rocketgun",
	Explode_Gate_Rocketgun_1 = "EXPLODE_Gate_Rocketgun_1",
	Explode_Tower_Rocketgun = "EXPLODE_Tower_Rocketgun",
	Explode_Tower_Rocketgun_1 = "EXPLODE_Tower_Rocketgun_1",
	Mount_assaultmg_allied_gun = "MOUNTMG42_assaultmg_allied_gun",
	Mount_assaultmg_axis_gun = "MOUNTMG42_assaultmg_axis_gun",
	Mount_asstower_allied_supermg = "MOUNTMG42_asstower_allied_supermg",
	Mount_asstower_allied_ubermg = "MOUNTMG42_asstower_allied_ubermg",
	Mount_asstower_allied_ubermg_1 = "MOUNTMG42_asstower_allied_ubermg_1",
	Mount_asstower_allied_woodenmg = "MOUNTMG42_asstower_allied_woodenmg",
	Mount_asstower_axis_supermg = "MOUNTMG42_asstower_axis_supermg",
	Mount_asstower_axis_ubermg = "MOUNTMG42_asstower_axis_ubermg",
	Mount_asstower_axis_ubermg_1 = "MOUNTMG42_asstower_axis_ubermg_1",
	Mount_asstower_axis_woodenmg = "MOUNTMG42_asstower_axis_woodenmg",
	Mount_gate_allied_mg = "MOUNTMG42_gate_allied_mg",
	Mount_gate_allied_ubermg = "MOUNTMG42_gate_allied_ubermg",
	Mount_gate_axis_mg = "MOUNTMG42_gate_axis_mg",
	Mount_gate_axis_ubermg = "MOUNTMG42_gate_axis_ubermg",
	Repair_assaultmg_allied_gun = "REPAIRMG42_assaultmg_allied_gun",
	Repair_assaultmg_axis_gun = "REPAIRMG42_assaultmg_axis_gun",
	Repair_asstower_allied_supermg = "REPAIRMG42_asstower_allied_supermg",
	Repair_asstower_allied_ubermg = "REPAIRMG42_asstower_allied_ubermg",
	Repair_asstower_allied_ubermg_1 = "REPAIRMG42_asstower_allied_ubermg_1",
	Repair_asstower_allied_woodenmg = "REPAIRMG42_asstower_allied_woodenmg",
	Repair_asstower_axis_supermg = "REPAIRMG42_asstower_axis_supermg",
	Repair_asstower_axis_ubermg = "REPAIRMG42_asstower_axis_ubermg",
	Repair_asstower_axis_ubermg_1 = "REPAIRMG42_asstower_axis_ubermg_1",
	Repair_asstower_axis_woodenmg = "REPAIRMG42_asstower_axis_woodenmg",
	Repair_gate_allied_mg = "REPAIRMG42_gate_allied_mg",
	Repair_gate_allied_ubermg = "REPAIRMG42_gate_allied_ubermg",
	Repair_gate_axis_mg = "REPAIRMG42_gate_axis_mg",
	Repair_gate_axis_ubermg = "REPAIRMG42_gate_axis_ubermg",

	InitStrat = function(team, strat)
	{
		tc = tableCount(Map.BaseStrats);

		// randomly pick a strat if set to 1 or invalid
		if ( strat <= 1 || strat > tc )
		{
			strat = RandInt( 2, tc - 1 );
		}

		if ( team == TEAM.ALLIES )
		{
			// store in case of random so bots can announce correct strat
			Map.AlliedBotStrategy = strat;

			if ( Map.BaseStrats[ strat ].armory )
			{
				SetGoalPriority("CAPPOINT_blue_pad_armory", 1.0
					+ (Map.BaseStrats[ strat ].armory * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].assault  )
			{
				SetGoalPriority("CAPPOINT_blue_pad_assault", 1.0
					+ (Map.BaseStrats[ strat ].assault * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].engineering )
			{
				SetGoalPriority("CAPPOINT_blue_pad_engineering", 1.0
					+ (Map.BaseStrats[ strat ].engineering * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].forwardwall  )
			{
				SetGoalPriority("CAPPOINT_blue_pad_forwardwall", 1.0
					+ (Map.BaseStrats[ strat ].forwardwall * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].gatebunker )
			{
				SetGoalPriority("CAPPOINT_blue_pad_gatebunker", 1.0
					+ (Map.BaseStrats[ strat ].gatebunker * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].leftwall )
			{
				SetGoalPriority("CAPPOINT_blue_pad_leftwall", 1.0
					+ (Map.BaseStrats[ strat ].leftwall * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].med )
			{
				SetGoalPriority("CAPPOINT_blue_pad_med", 1.0
					+ (Map.BaseStrats[ strat ].med * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].ops )
			{
				SetGoalPriority("CAPPOINT_blue_pad_ops", 1.0
					+ (Map.BaseStrats[ strat ].ops * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].rightwall )
			{
				SetGoalPriority("CAPPOINT_blue_pad_rightwall", 1.0
					+ (Map.BaseStrats[ strat ].rightwall * .05), TEAM.ALLIES);
			}

			if ( Map.BaseStrats[ strat ].spawn )
			{
				SetGoalPriority("CAPPOINT_blue_pad_spawn", 1.0
					+ (Map.BaseStrats[ strat ].spawn * .05), TEAM.ALLIES);
			}

			SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_blue.*" );
		}
		else // TEAM.AXIS
		{
			// store in case of random so bots can announce correct strat
			Map.AxisBotStrategy = strat;

			if ( Map.BaseStrats[ strat ].armory )
			{
				SetGoalPriority("CAPPOINT_red_pad_armory", 1.0
					+ (Map.BaseStrats[ strat ].armory * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].assault  )
			{
				SetGoalPriority("CAPPOINT_red_pad_assault", 1.0
					+ (Map.BaseStrats[ strat ].assault * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].engineering )
			{
				SetGoalPriority("CAPPOINT_red_pad_engineering", 1.0
					+ (Map.BaseStrats[ strat ].engineering * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].forwardwall  )
			{
				SetGoalPriority("CAPPOINT_red_pad_forwardwall", 1.0
					+ (Map.BaseStrats[ strat ].forwardwall * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].gatebunker )
			{
				SetGoalPriority("CAPPOINT_red_pad_gatebunker", 1.0
					+ (Map.BaseStrats[ strat ].gatebunker * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].leftwall )
			{
				SetGoalPriority("CAPPOINT_red_pad_leftwall", 1.0
					+ (Map.BaseStrats[ strat ].leftwall * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].med )
			{
				SetGoalPriority("CAPPOINT_red_pad_med", 1.0
					+ (Map.BaseStrats[ strat ].med * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].ops )
			{
				SetGoalPriority("CAPPOINT_red_pad_ops", 1.0
					+ (Map.BaseStrats[ strat ].ops * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].rightwall )
			{
				SetGoalPriority("CAPPOINT_red_pad_rightwall", 1.0
					+ (Map.BaseStrats[ strat ].rightwall * .05), TEAM.AXIS);
			}

			if ( Map.BaseStrats[ strat ].spawn )
			{
				SetGoalPriority("CAPPOINT_red_pad_spawn", 1.0
					+ (Map.BaseStrats[ strat ].spawn * .05), TEAM.AXIS);
			}

			SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_red.*" );
		}
	},

	ProcessStrat = function( team, goalname )
	{
		g = GetGoal(goalname);
		p = g.GetGoalPriority(team,1);

		if ( p > 1.0 )
		{
			SetGoalPriority( goalname, p - .05, team );
		}
	},

	Defend =
	{
		Priority = 0.86,
		MaxBots = 4, // maximum number of bots to use the scripted camps
		AxisSpawnPt = 0, // axis defenders will choose this spawn point
		AlliesSpawnPt = 0, // allied defenders will choose this spawn point

		// table of goals to set ROLE.DEFENDER on
		Axis = { "CAMP_rDefense1", "CAMP_rDefense2", "CAMP_rDefense3", "CAMP_rDefense4", "CAMP_rDefense5", },
		Allies = { "CAMP_bDefense1", "CAMP_bDefense2", "CAMP_bDefense3", "CAMP_bDefense4", "CAMP_bDefense5", },
	},

	Navigation =
	{
		ladders =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 3);
				sleep(3);
			},
		},
	},

	Allied_Outpost_Destroyed = function( trigger )
	{
		Util.MapDebugPrint("Allied_Outpost_Destroyed");
	},

	Allied_Underbase_Door_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_r_cover_door" );
		Util.EnableGoal( "ROUTE_b_w_underbase" );

		Util.MapDebugPrint("Allied_Underbase_Door_Destroyed");
	},

	Allied_Underbase_Wall_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_r_cover_wall" );
		Util.EnableGoal( "ROUTE_b_e_underbase" );

		Util.MapDebugPrint("Allied_Underbase_Wall_Destroyed");
	},

	Axis_Door_Planted = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_b_cover_door" );
		Util.MapDebugPrint("Axis_Door_Planted");
	},

	Axis_Wall_Planted = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_b_cover_wall" );
		Util.MapDebugPrint("Axis_Wall_Planted");
	},

	Axis_Door_Defused = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_b_cover_door" );
		Util.MapDebugPrint("Axis_Door_Defused");
	},

	Axis_Wall_Defused = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_b_cover_wall" );
		Util.MapDebugPrint("Axis_Wall_Defused");
	},

	Allied_Door_Planted = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_r_cover_door" );
		Util.MapDebugPrint("Allied_Door_Planted");
	},

	Allied_Wall_Planted = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_r_cover_wall" );
		Util.MapDebugPrint("Allied_Wall_Planted");
	},

	Allied_Door_Defused = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_r_cover_door" );
		Util.MapDebugPrint("Allied_Door_Defused");
	},

	Allied_Wall_Defused = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_r_cover_wall" );
		Util.MapDebugPrint("Allied_Wall_Defused");
	},

	Axis_Outpost_Destroyed = function( trigger )
	{
		Util.MapDebugPrint("Axis_Outpost_Destroyed");
	},

	Axis_Underbase_Door_Destroyed = function( trigger )
	{
		Util.EnableGoal( "ROUTE_r_e_underbase" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_b_cover_door" );

		Util.MapDebugPrint("Axis_Underbase_Door_Destroyed");
	},

	Axis_Underbase_Wall_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_b_cover_wall" );
		Util.EnableGoal( "ROUTE_r_w_underbase" );

		Util.MapDebugPrint("Axis_Underbase_Wall_Destroyed");
	},

	Axis_Med_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_med" );
		Util.MapDebugPrint("Axis_Med_L1");
	},

	Axis_Med_L2  = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "HEALTHCAB_medical_axis_healthstand" );

		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_med" );
		Util.MapDebugPrint("Axis_Med_L2");
	},

	Axis_Med_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_med" );
		Util.MapDebugPrint("Axis_Med_L3");
	},

	Axis_Med_L4  = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_red_pad_med");

		Util.MapDebugPrint("Axis_Med_L4");
	},

	Axis_Ops_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_ops" );
		Util.MapDebugPrint("Axis_Ops_L1");
	},

	Axis_Ops_L2  = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_ops" );
		Util.MapDebugPrint("Axis_Ops_L2");
	},

	Axis_Ops_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_ops" );
		Util.MapDebugPrint("Axis_Ops_L3");
	},

	Axis_Ops_L4  = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_red_pad_ops");

		// open up the team doors
		Wp.SetWaypointFlag( "bRightdoor", "allies", false );
		Wp.SetWaypointFlag( "bLeftdoor", "allies", false );

		Util.MapDebugPrint("Axis_Ops_L4");
	},

	Axis_Armory_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_armory" );
		Util.MapDebugPrint("Axis_Armory_L1");
	},

	Axis_Armory_L2= function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "AMMOCAB_armory_axis_ammostand" );

		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_armory" );
		Util.MapDebugPrint("Axis_Armory_L2");
	},

	Axis_Armory_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_armory" );
		Util.MapDebugPrint("Axis_Armory_L3");
	},

	Axis_Armory_L4 = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_red_pad_armory");

		Util.MapDebugPrint("Axis_Armory_L4");
	},

	Axis_Eng_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_engineering" );
		Util.MapDebugPrint("Axis_Eng_L1");
	},

	Axis_Eng_L2= function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_engineering" );
		Util.MapDebugPrint("Axis_Eng_L2");
	},

	Axis_Eng_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_engineering" );
		Util.MapDebugPrint("Axis_Eng_L3");
	},

	Axis_Eng_L4 = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_red_pad_engineering");

		Util.MapDebugPrint("Axis_Eng_L4");
	},

	Axis_Spawn_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_spawn" );
		Util.MapDebugPrint("Axis_Spawn_L1");
	},

	Axis_Spawn_L2  = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_spawn" );
		Util.MapDebugPrint("Axis_Spawn_L2");
	},

	Axis_Spawn_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_spawn" );
		Util.MapDebugPrint("Axis_Spawn_L3");
	},

	Axis_Spawn_L4  = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_red_pad_spawn");

		Util.MapDebugPrint("Axis_Spawn_L4");
	},

	Allies_Med_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_med" );
		Util.MapDebugPrint("Allies_Med_L1");
	},

	Allies_Med_L2  = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "HEALTHCAB_medical_allied_healthstand" );

		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_med" );
		Util.MapDebugPrint("Allies_Med_L2");
	},

	Allies_Med_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_med" );
		Util.MapDebugPrint("Allies_Med_L3");
	},

	Allies_Med_L4  = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_blue_pad_med");

		Util.MapDebugPrint("Allies_Med_L4");
	},

	Allies_Ops_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_ops" );
		Util.MapDebugPrint("Allies_Ops_L1");
	},

	Allies_Ops_L2  = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_ops" );
		Util.MapDebugPrint("Allies_Ops_L2");
	},

	Allies_Ops_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_ops" );
		Util.MapDebugPrint("Allies_Ops_L3");
	},

	Allies_Ops_L4  = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_blue_pad_ops");

		// open up the team doors
		Wp.SetWaypointFlag( "rRightdoor", "axis", false );
		Wp.SetWaypointFlag( "rLeftdoor", "axis", false );

		Util.MapDebugPrint("Allies_Ops_L4");
	},

	Allies_Armory_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_armory" );
		Util.MapDebugPrint("Allies_Armory_L1");
	},

	Allies_Armory_L2= function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "AMMOCAB_armory_allied_ammostand" );

		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_armory" );
		Util.MapDebugPrint("Allies_Armory_L2");
	},

	Allies_Armory_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_armory" );
		Util.MapDebugPrint("Allies_Armory_L3");
	},

	Allies_Armory_L4 = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_blue_pad_armory");

		Util.MapDebugPrint("Allies_Armory_L4");
	},

	Allies_Eng_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_engineering" );
		Util.MapDebugPrint("Allies_Eng_L1");
	},

	Allies_Eng_L2= function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_engineering" );
		Util.MapDebugPrint("Allies_Eng_L2");
	},

	Allies_Eng_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_engineering" );
		Util.MapDebugPrint("Allies_Eng_L3");
	},

	Allies_Eng_L4 = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_blue_pad_engineering");

		Util.MapDebugPrint("Allies_Eng_L4");
	},

	Allies_Spawn_L1 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_spawn" );
		Util.MapDebugPrint("Allies_Spawn_L1");
	},

	Allies_Spawn_L2  = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_spawn" );
		Util.MapDebugPrint("Allies_Spawn_L2");
	},

	Allies_Spawn_L3 = function( trigger )
	{
		Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_spawn" );
		Util.MapDebugPrint("Allies_Spawn_L3");
	},

	Allies_Spawn_L4  = function( trigger )
	{
		Util.RemoveGoal("CAPPOINT_blue_pad_spawn");

		Util.MapDebugPrint("Allies_Spawn_L4");
	},

	Red_Leftwall_Count = 0,
	Red_Leftwall =
	{
		Name = "Red_Leftwall",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Red_Leftwall_Count += 1;

					if ( Map.Red_Leftwall_Count == 1 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_leftwall" );
						Util.MapDebugPrint("^1Axis built left chain fence");
					}
					else if ( Map.Red_Leftwall_Count == 2 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_leftwall" );
						Util.MapDebugPrint("^1Axis built left barbed fence");
					}
					else if ( Map.Red_Leftwall_Count == 3 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_leftwall" );
						Util.MapDebugPrint("^1Axis built left wall");
					}
					else if ( Map.Red_Leftwall_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_red_pad_leftwall");

						if ( Map.Red_Leftwall_Count == 4 )
							{ Util.MapDebugPrint("^1Axis built left fortified wall"); }
					}
				}
			}
		},
	},

	Red_Rightwall_Count = 0,
	Red_Rightwall =
	{
		Name = "Red_Rightwall",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Red_Rightwall_Count += 1;

					if ( Map.Red_Rightwall_Count == 1 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_rightwall" );
						Util.MapDebugPrint("^1Axis built right chain fence");
					}
					else if ( Map.Red_Rightwall_Count == 2 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_rightwall" );
						Util.MapDebugPrint("^1Axis built right barbed fence");
					}
					else if ( Map.Red_Rightwall_Count == 3 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_rightwall" );
						Util.MapDebugPrint("^1Axis built right wall");
					}
					else if ( Map.Red_Rightwall_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_red_pad_rightwall");

						if ( Map.Red_Rightwall_Count == 4 )
							{ Util.MapDebugPrint("^1Axis built right fortified wall"); }
					}
				}
			}
		},
	},

	Red_Forwardwall_Count = 0,
	Red_Forwardwall =
	{
		Name = "Red_Forwardwall",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Red_Forwardwall_Count += 1;

					if ( Map.Red_Forwardwall_Count == 1 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_forwardwall" );
						Util.MapDebugPrint("^1Axis built forward chain fence");
					}
					else if ( Map.Red_Forwardwall_Count == 2 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_forwardwall" );
						Util.MapDebugPrint("^1Axis built forward barbed fence");
					}
					else if ( Map.Red_Forwardwall_Count == 3 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_forwardwall" );
						Util.MapDebugPrint("^1Axis built forward wall");
					}
					else if ( Map.Red_Forwardwall_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_red_pad_forwardwall");

						if ( Map.Red_Forwardwall_Count == 4 )
							{ Util.MapDebugPrint("^1Axis built forward fortified wall"); }
					}
				}
			}
		},
	},

	Red_Assault_Count = 0,
	Red_Assault =
	{
		Name = "Red_Assault",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Red_Assault_Count += 1;

					if ( Map.Red_Assault_Count == 1 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_assault" );
						Util.MapDebugPrint("^1Axis built a Wooden Tower");
					}
					else if ( Map.Red_Assault_Count == 2 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_assault" );
						Util.MapDebugPrint("^1Axis mounted a Tower Rocketgun");
					}
					else if ( Map.Red_Assault_Count == 3 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_assault" );
						Util.MapDebugPrint("^1Axis built a Super Assault Tower");
					}
					else if ( Map.Red_Assault_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_red_pad_assault");

						if ( Map.Red_Assault_Count == 4 )
							{ Util.MapDebugPrint("^1Axis mounted Upgraded Tower Machine Guns"); }
					}
				}
			}
		},
	},

	Red_Bunker_Count = 0,
	Red_Bunker =
	{
		Name = "Red_Bunker",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Red_Bunker_Count += 1;

					if ( Map.Red_Bunker_Count == 1 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_gatebunker" );
						Util.MapDebugPrint("^1Axis have built a Bunker");
					}
					else if ( Map.Red_Bunker_Count == 2 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_gatebunker" );
						Util.MapDebugPrint("^1Axis mounted a Bunker Rocketgun");
					}
					else if ( Map.Red_Bunker_Count == 3 )
					{
						Map.ProcessStrat( TEAM.AXIS, "CAPPOINT_red_pad_gatebunker" );
						Util.MapDebugPrint("^1Axis built a Super Assault Tower");
					}
					else if ( Map.Red_Bunker_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_red_pad_gatebunker");

						if ( Map.Red_Bunker_Count == 4 )
							{ Util.MapDebugPrint("^1Axis mounted Upgraded Bunker Machine Guns"); }
					}
				}
			}
		},
	},

	Blue_Leftwall_Count = 0,
	Blue_Leftwall =
	{
		Name = "Blue_Leftwall",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Blue_Leftwall_Count += 1;

					if ( Map.Blue_Leftwall_Count == 1 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_leftwall" );
						Util.MapDebugPrint("^DAllies built left chain fence");
					}
					else if ( Map.Blue_Leftwall_Count == 2 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_leftwall" );
						Util.MapDebugPrint("^DAllies built left barbed fence");
					}
					else if ( Map.Blue_Leftwall_Count == 3 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_leftwall" );
						Util.MapDebugPrint("^DAllies built left wall");
					}
					else if ( Map.Blue_Leftwall_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_blue_pad_leftwall");

						if ( Map.Blue_Leftwall_Count == 4 )
							{ Util.MapDebugPrint("^DAllies built left fortified wall"); }
					}
				}
			}
		},
	},

	Blue_Rightwall_Count = 0,
	Blue_Rightwall =
	{
		Name = "Blue_Rightwall",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Blue_Rightwall_Count += 1;

					if ( Map.Blue_Rightwall_Count == 1 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_rightwall" );
						Util.MapDebugPrint("^DAllies built right chain fence");
					}
					else if ( Map.Blue_Rightwall_Count == 2 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_rightwall" );
						Util.MapDebugPrint("^DAllies built right barbed fence");
					}
					else if ( Map.Blue_Rightwall_Count == 3 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_rightwall" );
						Util.MapDebugPrint("^DAllies built right wall");
					}
					else if ( Map.Blue_Rightwall_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_blue_pad_rightwall");

						if ( Map.Blue_Rightwall_Count == 4 )
							{ Util.MapDebugPrint("^DAllies built right fortified wall"); }
					}
				}
			}
		},
	},

	Blue_Forwardwall_Count = 0,
	Blue_Forwardwall =
	{
		Name = "Blue_Forwardwall",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Blue_Forwardwall_Count += 1;

					if ( Map.Blue_Forwardwall_Count == 1 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_forwardwall" );
						Util.MapDebugPrint("^DAllies built forward chain fence");
					}
					else if ( Map.Blue_Forwardwall_Count == 2 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_forwardwall" );
						Util.MapDebugPrint("^DAllies built forward barbed fence");
					}
					else if ( Map.Blue_Forwardwall_Count == 3 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_forwardwall" );
						Util.MapDebugPrint("^DAllies built forward wall");
					}
					else if ( Map.Blue_Forwardwall_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_blue_pad_forwardwall");

						if ( Map.Blue_Forwardwall_Count == 4 )
							{ Util.MapDebugPrint("^DAllies built forward fortified wall"); }
					}
				}
			}
		},
	},

	Blue_Assault_Count = 0,
	Blue_Assault =
	{
		Name = "Blue_Assault",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Blue_Assault_Count += 1;

					if ( Map.Blue_Assault_Count == 1 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_assault" );
						Util.MapDebugPrint("^DAllies built a Wooden Tower");
					}
					else if ( Map.Blue_Assault_Count == 2 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_assault" );
						Util.MapDebugPrint("^DAllies mounted a Tower Rocketgun");
					}
					else if ( Map.Blue_Assault_Count == 3 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_assault" );
						Util.MapDebugPrint("^DAllies built a Super Assault Tower");
					}
					else if ( Map.Blue_Assault_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_blue_pad_assault");

						if ( Map.Blue_Assault_Count == 4 )
							{ Util.MapDebugPrint("^DAllies mounted Upgraded Tower Machine Guns"); }
					}
				}
			}
		},
	},

	Blue_Bunker_Count = 0,
	Blue_Bunker =
	{
		Name = "Blue_Bunker",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( GetEntFlags( ent, ENTFLAG.CARRYINGGOAL ) )
				{
					Map.Blue_Bunker_Count += 1;

					if ( Map.Blue_Bunker_Count == 1 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_gatebunker" );
						Util.MapDebugPrint("^DAllies have built a Bunker");
					}
					else if ( Map.Blue_Bunker_Count == 2 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_gatebunker" );
						Util.MapDebugPrint("^DAllies mounted a Bunker Rocketgun");
					}
					else if ( Map.Blue_Bunker_Count == 3 )
					{
						Map.ProcessStrat( TEAM.ALLIES, "CAPPOINT_blue_pad_gatebunker" );
						Util.MapDebugPrint("^DAllies built a Super Assault Tower");
					}
					else if ( Map.Blue_Bunker_Count >= 4 )
					{
						Util.DisableGoal("CAPPOINT_blue_pad_gatebunker");

						if ( Map.Blue_Bunker_Count == 4 )
							{ Util.MapDebugPrint("^DAllies mounted Upgraded Bunker Machine Guns"); }
					}
				}
			}
		},
	},

	Axis_Announced = false,
	Axis_Announce_Strat = function( trigger )
	{
		if ( Map.Axis_Announced )
			{ return; }

		Map.InitStrat(TEAM.AXIS, Map.AxisBotStrategy);
		Map.Axis_Announced = true;
		yield();
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.AXIS )
			{
				bot.SayTeam( "We are using the ^1", Map.BaseStrats[ Map.AxisBotStrategy ].Name, " ^5strategy" );
				break;
			}
		}
	},

	Allies_Announced = false,
	Allies_Announce_Strat = function( trigger )
	{
		if ( Map.Allies_Announced )
			{ return; }

		Map.InitStrat(TEAM.ALLIES, Map.AlliedBotStrategy);
		Map.Allies_Announced = true;
		yield();
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.ALLIES )
			{
				bot.SayTeam( "We are using the ^1", Map.BaseStrats[ Map.AlliedBotStrategy ].Name, " ^5strategy" );
				break;
			}
		}
	},
};

global OnMapLoad = function()
{
	Util.SetGoalPosition( 726.646, 2426.764, -119.875, "PLANT_Allied_Underbase_Wall" );
	Util.SetGoalPosition( -1210.916, 2525.277, -111.875, "PLANT_Allied_Underbase_Door" );
	Util.SetGoalPosition( -496.490, -1907.657, -119.680, "PLANT_Axis_Underbase_Wall" );
	Util.SetGoalPosition( 1451.430, -2013.612, -111.875, "PLANT_Axis_Underbase_Door" );

	OnTrigger( "^1The Axis have built an Infirmary! ^JFirst Aid available!", Map.Axis_Med_L1 );
	OnTrigger( "^1The Axis Infirmary has been upgraded to ^kLevel 2^1! ^JHealth Stand a", Map.Axis_Med_L2 );
	OnTrigger( "^1The Axis Infirmary has been upgraded to ^zLevel 3^1! ^JMedical Chests", Map.Axis_Med_L3 );
	OnTrigger( "^1The Axis Infirmary has been upgraded to ^lLevel 4^1! ^JDefensive supp", Map.Axis_Med_L4 );
	OnTrigger( "^1The Axis have built an Tactical Shack! ^JLandmine notification active", Map.Axis_Ops_L1 );
	OnTrigger( "^1The Axis Tactical Shack has been upgraded to ^kLevel 2^1! ^JEnemy int", Map.Axis_Ops_L2 );
	OnTrigger( "^1The Axis Tactical Shack has been upgraded to ^zLevel 3^1! ^JWall Jump", Map.Axis_Ops_L3 );
	OnTrigger( "^1The Axis Tactical Shack has been upgraded to ^lLevel 4^1! ^JEnemy tea", Map.Axis_Ops_L4 );
	OnTrigger( "^1The Axis have built an Armory! ^jHeavy Weapons stocked!", Map.Axis_Armory_L1 );
	OnTrigger( "^1The Axis Armory has been upgraded to ^kLevel 2^1! ^jAmmunition stocke", Map.Axis_Armory_L2 );
	OnTrigger( "^1The Axis Armory has been upgraded to ^zLevel 3^1! ^jAmmunition chests", Map.Axis_Armory_L3 );
	OnTrigger( "^1The Axis Armory has been upgraded to ^lLevel 4^1! ^jRocketguns carry ", Map.Axis_Armory_L4 );
	OnTrigger( "^1The Axis have built an Engineering Shack! ^jBase defenses improved!", Map.Axis_Eng_L1 );
	OnTrigger( "^1The Axis Engineering Shack has been upgraded to ^kLevel 2^1! ^jBase d", Map.Axis_Eng_L2 );
	OnTrigger( "^1The Axis Engineering Shack has been upgraded to ^zLevel 3^1! ^jRocket", Map.Axis_Eng_L3 );
	OnTrigger( "^1The Axis Engineering Shack has been upgraded to ^lLevel 4^1! ^jLandmi", Map.Axis_Eng_L4 );
	OnTrigger( "^1The Axis Spawn has been upgraded to Level 1!", Map.Axis_Spawn_L1 );
	OnTrigger( "^1The Axis Spawn has been upgraded to ^kLevel 2^1!", Map.Axis_Spawn_L2 );
	OnTrigger( "^1The Axis Spawn has been upgraded to ^zLevel 3^1!", Map.Axis_Spawn_L3 );
	OnTrigger( "^1The Axis Spawn has been upgraded to ^lLevel 4^1!", Map.Axis_Spawn_L4 );
	OnTrigger( "the Axis Underbase Door Destroyed.", Map.Axis_Underbase_Door_Destroyed );
	OnTrigger( "the Axis Underbase Wall Destroyed.", Map.Axis_Underbase_Wall_Destroyed );
	OnTrigger( "Axis have stolen Construction Materials!", Map.Axis_Announce_Strat );
	OnTrigger( "Planted at the Allied Underbase Door.", Map.Allied_Door_Planted );
	OnTrigger( "Planted at the Allied Underbase Wall.", Map.Allied_Wall_Planted );
	OnTrigger( "Defused at the Allied Underbase Door.", Map.Allied_Door_Defused );
	OnTrigger( "Defused at the Allied Underbase Wall.", Map.Allied_Wall_Defused );

	OnTrigger( "^DThe Allies have built an Infirmary! ^fFirst Aid available!", Map.Allies_Med_L1 );
	OnTrigger( "^DThe Allied Infirmary has been upgraded to ^kLevel 2^D! ^fHealth Stand", Map.Allies_Med_L2 );
	OnTrigger( "^DThe Allied Infirmary has been upgraded to ^zLevel 3^D! ^fMedical Ches", Map.Allies_Med_L3 );
	OnTrigger( "^DThe Allied Infirmary has been upgraded to ^lLevel 4^D! ^fDefensive su", Map.Allies_Med_L4 );
	OnTrigger( "^DThe Allies have built an Tactical Shack! ^fLandmine notification acti", Map.Allies_Ops_L1 );
	OnTrigger( "^DThe Allied Tactical Shack has been upgraded to ^kLevel 2^D! ^fEnemy i", Map.Allies_Ops_L2 );
	OnTrigger( "^DThe Allied Tactical Shack has been upgraded to ^zLevel 3^D! ^fWall Ju", Map.Allies_Ops_L3 );
	OnTrigger( "^DThe Allied Tactical Shack has been upgraded to ^lLevel 4^D! ^fEnemy t", Map.Allies_Ops_L4 );
	OnTrigger( "^DThe Allies have built an Armory! ^fHeavy Weapons stocked!", Map.Allies_Armory_L1 );
	OnTrigger( "^DThe Allied Armory has been upgraded to ^kLevel 2^D! ^fAmmunition stoc", Map.Allies_Armory_L2 );
	OnTrigger( "^DThe Allied Armory has been upgraded to ^zLevel 3^D! ^fAmmunition ches", Map.Allies_Armory_L3 );
	OnTrigger( "^DThe Allied Armory has been upgraded to ^lLevel 4^D! ^fRocketguns carr", Map.Allies_Armory_L4 );
	OnTrigger( "^DThe Allies have built an Engineering Shack! ^fBase defenses improved!", Map.Allies_Eng_L1 );
	OnTrigger( "^DThe Allied Engineering Shack has been upgraded to ^kLevel 2^D! ^fBase", Map.Allies_Eng_L2 );
	OnTrigger( "^DThe Allied Engineering Shack has been upgraded to ^zLevel 3^D! ^fRock", Map.Allies_Eng_L3 );
	OnTrigger( "^DThe Allied Engineering Shack has been upgraded to ^lLevel 4^D! ^fLand", Map.Allies_Eng_L4 );
	OnTrigger( "^DThe Allied Spawn has been upgraded to Level 1!", Map.Allies_Spawn_L1 );
	OnTrigger( "^DThe Allied Spawn has been upgraded to ^kLevel 2^D!", Map.Allies_Spawn_L2 );
	OnTrigger( "^DThe Allied Spawn has been upgraded to ^zLevel 3^D!", Map.Allies_Spawn_L3 );
	OnTrigger( "^DThe Allied Spawn has been upgraded to ^lLevel 4^D!", Map.Allies_Spawn_L4 );
	OnTrigger( "the Allied Underbase Door Destroyed.", Map.Allied_Underbase_Door_Destroyed );
	OnTrigger( "the Allied Underbase Wall Destroyed.", Map.Allied_Underbase_Wall_Destroyed );
	OnTrigger( "Allies have stolen Construction Materials!", Map.Allies_Announce_Strat );
	OnTrigger( "Planted at the Axis Underbase Door.", Map.Axis_Door_Planted );
	OnTrigger( "Planted at the Axis Underbase Wall.", Map.Axis_Wall_Planted );
	OnTrigger( "Defused at the Axis Underbase Door.", Map.Axis_Door_Defused );
	OnTrigger( "Defused at the Axis Underbase Wall.", Map.Axis_Wall_Defused );

	//duplicate triggers for some ... using trigger regions
	red_pad_leftwall = OnTriggerRegion(AABB(-1408.385,-2816.695,4.125,-1279.727,-2690.010,78.125), Map.Red_Leftwall);
	red_pad_rightwall = OnTriggerRegion(AABB(1290.663,-3182.572,4.125,1412.532,-3058.490,78.125), Map.Red_Rightwall);
	red_pad_forwardwall = OnTriggerRegion(AABB(779.320,-2300.631,4.125,899.655,-2182.057,78.125), Map.Red_Forwardwall);
	blue_pad_leftwall = OnTriggerRegion(AABB(1524.877,3204.998,4.125,1644.631,3320.503,78.125), Map.Blue_Leftwall);
	blue_pad_rightwall = OnTriggerRegion(AABB(-1172.535,3572.043,4.125,-1049.249,3688.849,78.125), Map.Blue_Rightwall);
	blue_pad_forwardwall = OnTriggerRegion(AABB(-656.862,2691.736,4.125,-544.474,2809.071,78.125), Map.Blue_Forwardwall);
	red_pad_assault = OnTriggerRegion(AABB(952.927,-2575.944,4.125,1079.854,-2448.402,78.125), Map.Red_Assault);
	red_pad_gatebunker = OnTriggerRegion(AABB(-510.204,-2293.800,4.125,-383.071,-2172.045,78.125), Map.Red_Bunker);
	blue_pad_assault = OnTriggerRegion(AABB(-843.543,2960.235,4.125,-709.884,3088.429,78.125), Map.Blue_Assault);
	blue_pad_gatebunker = OnTriggerRegion(AABB(622.582,2678.962,4.125,750.359,2804.604,78.125), Map.Blue_Bunker);

	// these doors are no longer team only after tactical ops level 4
	Wp.SetWaypointFlag( "rRightdoor", "axis", true );
	Wp.SetWaypointFlag( "rLeftdoor", "axis", true );
	Wp.SetWaypointFlag( "bRightdoor", "allies", true );
	Wp.SetWaypointFlag( "bLeftdoor", "allies", true );

	// draw trigger regions if debugging
	if ( Map.Debug > 0 )
		{ ExecCommand("drawtriggers"); }

	SetGoalPriority( "FLAG_Construction_Materials.*", 0.85, TEAM.ALLIES );
	SetGoalPriority( "FLAG_Construction_Materials_2", 1.5, TEAM.AXIS );
	SetGoalPriority( "FLAG_Construction_Materials_3", 1.5, TEAM.ALLIES );
	SetGoalPriority( "FLAG_Construction_Materials_6", 0.9, TEAM.AXIS );
	SetGoalPriority( "FLAG_Construction_Materials_7", 0.9, TEAM.ALLIES );
	SetGoalPriority( "FLAG_Construction_Materials_drop.*", 0.9, 0, 0, true );
	SetGoalPriority( "FLAGRETURN.*", 0.9, 0, 0, true );
	SetGoalPriority( "CAMP.*", 0.86, 0, 0, true );
	// engineer camps to cover dyno
	SetGoalPriority( "DEFEND_r_cover.*", 0.0 );
	SetGoalPriority( "DEFEND_b_cover.*", 0.0 );
	SetGoalPriority( "DEFEND_r_cover.*", 1.0, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "DEFEND_b_cover.*", 1.0, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_.*", 1.1, 0, CLASS.ENGINEER );

	Util.DisableGoal( ".*", true ); //all but routes
	Util.DisableGoal( "ROUTE_r_e_underbase" );
	Util.DisableGoal( "ROUTE_r_w_underbase" );
	Util.DisableGoal( "ROUTE_b_e_underbase" );
	Util.DisableGoal( "ROUTE_b_w_underbase" );

	Util.SetMaxUsersInProgress( 2, "FLAG_Construction_Materials_drop.*" );
	Util.SetMaxUsersInProgress( 2, "FLAGRETURN.*" );
	Util.SetMaxUsers( 1, "CAMP.*" );

	SetMapGoalProperties( "CAMP_.*", {MinCampTime=15, MaxCampTime=30});

	//allies goals
	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"PLANT_Axis_Underbase_Door",
		"PLANT_Axis_Underbase_Wall",
		"FLAG_Construction_Materials_3",
		"FLAG_Construction_Materials_4",
		"FLAG_Construction_Materials_5",
	});
	//SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_Construction_Materials_8" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAMP_bDefense.*" );
	SetGoalRole( Map.Defend.Allies, ROLE.DEFENDER );

	//axis goals
	SetAvailableMapGoals( TEAM.AXIS, true, {
		"PLANT_Allied_Underbase_Door",
		"PLANT_Allied_Underbase_Wall",
		"FLAG_Construction_Materials",
		"FLAG_Construction_Materials_1",
		"FLAG_Construction_Materials_2",
		"CAMP_rDefense.*",
	});
	SetGoalRole( Map.Defend.Axis, ROLE.DEFENDER );

	MapRoutes =
	{
		FLAG_Construction_Materials_4 =
		{
			ROUTE_bSpawn =
			{
				ROUTE_ne_trench =
				{
					ROUTE_e_trench =
					{
						ROUTE_se_trench = {},
					},
				},
				ROUTE_nw_trench =
				{
					ROUTE_w_trench =
					{
						ROUTE_sw_trench = {},
					},
				},
				ROUTE_ne_upper =
				{
					ROUTE_e_upper =
					{
						ROUTE_se_upper = {},
					},
				},
				ROUTE_nw_upper =
				{
					ROUTE_w_upper =
					{
						ROUTE_sw_upper = {},
					},
				},
				ROUTE_n_tunnel =
				{
					Weight = 2,
					ROUTE_n_midtunnel =
					{
						ROUTE_s_midtunnel =
						{
							ROUTE_s_tunnel = {},
						},
					},
				},
				ROUTE_e_uppermid = {},
				ROUTE_w_uppermid = {},
			},
			ROUTE_bOutpostSpawn =
			{
				ROUTE_ne_trench = {},
				ROUTE_e_trench = {},
				ROUTE_ne_upper = {},
				ROUTE_b_e_underbase = {},
			},
		},

		FLAG_Construction_Materials =
		{
			ROUTE_rSpawn =
			{
				ROUTE_se_trench =
				{
					ROUTE_e_trench =
					{
						ROUTE_ne_trench = {},
					},
				},
				ROUTE_sw_trench =
				{
					ROUTE_w_trench =
					{
						ROUTE_nw_trench = {},
					},
				},
				ROUTE_se_upper =
				{
					ROUTE_e_upper =
					{
						ROUTE_ne_upper = {},
					},
				},
				ROUTE_sw_upper =
				{
					ROUTE_w_upper =
					{
						ROUTE_nw_upper = {},
					},
				},
				ROUTE_s_tunnel =
				{
					Weight = 2,
					ROUTE_s_midtunnel =
					{
						ROUTE_n_midtunnel =
						{
							ROUTE_n_tunnel = {},
						},
					},
				},
				ROUTE_e_uppermid = {},
				ROUTE_w_uppermid = {},
			},
			ROUTE_rOutpostSpawn =
			{
				ROUTE_sw_trench = {},
				ROUTE_w_trench = {},
				ROUTE_sw_upper = {},
				ROUTE_r_w_underbase = {},
			},
		},

		PLANT_Axis_Underbase_Door =
		{
			ROUTE_bSpawn =
			{
				ROUTE_ne_trench =
				{
					ROUTE_e_trench =
					{
						ROUTE_se_trench = {},
					},
				},
				ROUTE_nw_upper =
				{
					ROUTE_e_upper =
					{
						ROUTE_se_upper = {},
					},
				},
				ROUTE_e_uppermid = {},
			},
		},

		PLANT_Allied_Underbase_Door =
		{
			ROUTE_rSpawn =
			{
				ROUTE_sw_trench =
				{
					ROUTE_w_trench =
					{
						ROUTE_nw_trench = {},
					},
				},
				ROUTE_sw_upper =
				{
					ROUTE_w_upper =
					{
						ROUTE_nw_upper = {},
					},
				},
				ROUTE_w_uppermid = {},
			},
		},

		PLANT_Axis_Underbase_Wall =
		{
			ROUTE_bSpawn =
			{
				ROUTE_nw_trench =
				{
					ROUTE_w_trench =
					{
						ROUTE_sw_trench = {},
					},
				},
				ROUTE_nw_upper =
				{
					ROUTE_w_upper =
					{
						ROUTE_sw_upper = {},
					},
				},
				ROUTE_n_tunnel =
				{
					Weight = 2,
					ROUTE_n_midtunnel =
					{
						ROUTE_s_midtunnel =
						{
							ROUTE_s_tunnel = {},
						},
					},
				},
				ROUTE_w_uppermid = {},
			},
		},

		PLANT_Allied_Underbase_Wall =
		{
			ROUTE_rSpawn =
			{
				ROUTE_se_trench =
				{
					ROUTE_e_trench =
					{
						ROUTE_ne_trench = {},
					},
				},
				ROUTE_se_upper =
				{
					ROUTE_e_upper =
					{
						ROUTE_ne_upper = {},
					},
				},
				ROUTE_s_tunnel =
				{
					Weight = 2,
					ROUTE_s_midtunnel =
					{
						ROUTE_n_midtunnel =
						{
							ROUTE_n_tunnel = {},
						},
					},
				},
				ROUTE_e_uppermid = {},
			},
		},

		CAPPOINT_blue_pad_armory =
		{
			ROUTE_bWestGrab =
			{
				ROUTE_sw_trench =
				{
					ROUTE_w_trench =
					{
						ROUTE_nw_trench = {},
					},
				},
				ROUTE_sw_upper =
				{
					ROUTE_w_upper =
					{
						ROUTE_nw_upper = {},
					},
				},
				ROUTE_s_tunnel =
				{
					Weight = 2,
					ROUTE_s_midtunnel =
					{
						ROUTE_n_midtunnel =
						{
							ROUTE_n_tunnel = {},
						},
					},
				},
			},
			ROUTE_bEastGrab =
			{
				ROUTE_r_e_underbase =
				{
					Weight = 3,
					ROUTE_se_trench =
					{
						ROUTE_e_trench =
						{
							ROUTE_ne_trench = {},
						},
					},
				},
				ROUTE_se_trench =
				{
					ROUTE_e_trench =
					{
						ROUTE_ne_trench = {},
					},
				},
				ROUTE_se_upper =
				{
					ROUTE_e_upper =
					{
						ROUTE_ne_upper = {},
					},
				},
			},
		},

		CAPPOINT_red_pad_armory =
		{
			ROUTE_rWestGrab =
			{
				ROUTE_b_w_underbase =
				{
					Weight = 3,
					ROUTE_sw_trench =
					{
						ROUTE_w_trench =
						{
							ROUTE_nw_trench = {},
						},
					},
				},
				ROUTE_nw_trench =
				{
					ROUTE_w_trench =
					{
						ROUTE_sw_trench = {},
					},
				},
				ROUTE_nw_upper =
				{
					ROUTE_w_upper =
					{
						ROUTE_sw_upper = {},
					},
				},
			},
			ROUTE_rEastGrab =
			{
				ROUTE_ne_trench =
				{
					ROUTE_e_trench =
					{
						ROUTE_se_trench = {},
					},
				},
				ROUTE_ne_upper =
				{
					ROUTE_e_upper =
					{
						ROUTE_se_upper = {},
					},
				},
				ROUTE_n_tunnel =
				{
					Weight = 2,
					ROUTE_n_midtunnel =
					{
						ROUTE_s_midtunnel =
						{
							ROUTE_s_tunnel = {},
						},
					},
				},
			},
		},
	};

	MapRoutes.FLAG_Construction_Materials_5 = MapRoutes.FLAG_Construction_Materials_4;
	MapRoutes.FLAG_Construction_Materials_1 = MapRoutes.FLAG_Construction_Materials;
	MapRoutes.CAPPOINT_blue_pad_assault = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_engineering = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_forwardwall = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_gatebunker = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_leftwall = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_med = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_ops = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_rightwall = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_blue_pad_spawn = MapRoutes.CAPPOINT_blue_pad_armory;
	MapRoutes.CAPPOINT_red_pad_assault = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_engineering = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_forwardwall = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_gatebunker = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_leftwall = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_med = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_ops = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_rightwall = MapRoutes.CAPPOINT_red_pad_armory;
	MapRoutes.CAPPOINT_red_pad_spawn = MapRoutes.CAPPOINT_red_pad_armory;

	Util.Routes(MapRoutes);
	Util.MapDebugPrint( "OnMapLoad" );
};

global OnBotJoin = function( bot )
{
	bot.MaxViewDistance = 2400;
	ETUtil.SetDualObjective(bot);
};
