/******************************************************************
Just slightly edited the original Goldrush waypoints and script.
Credits go to the maker of the original Goldrush files.
Editors of the Goldrush-GA release are =VOC= Naerling and crapshoot.
*******************************************************************/
/******************************************************************
UPDATED BY: BubbaG1 & **DRC**Stunner
UPDATED: August 16, 2011
- Added waypoints along ledges and routes to use them
- Added tank barrier 1 & 2 plant positions with updated routing
- Once bank doors are blown, at least half of allied bots will
  change to original spawn.
*******************************************************************/
/******************************************************************
UPDATED BY: BubbaG1 & **DRC**Stunner
UPDATED: July 16, 2012
- Disabled CP Defuse goals so bots will focus on main objectives.
  Regular players can focus on the CP, if they want to.
*******************************************************************/

global Map =
{
	Ammo_Cabinet_north_ammocabinet = "AMMOCAB_north_ammocabinet",
	Ammo_Cabinet_south_ammocabinet = "AMMOCAB_south_ammocabinet",
	Health_Cabinet_north_healthcabinet = "HEALTHCAB_north_healthcabinet",
	Health_Cabinet_south_healthcabinet = "HEALTHCAB_south_healthcabinet",
	Flag_gold_crate = "FLAG_gold_crate",
	Cappoint_Gold_Dropoff = "CAPPOINT_Gold_Dropoff",
	Build_Command_Post = "BUILD_Command_Post",
	Build_Tank = "BUILD_Tank",
	Build_Tank_Barrier_1 = "BUILD_Tank_Barrier_1",
	Build_Tank_Barrier_2 = "BUILD_Tank_Barrier_2",
	Build_Truck = "BUILD_Truck",
	Build_Truck_Barrier_1 = "BUILD_Truck_Barrier_1",
	Build_Truck_Barrier_2 = "BUILD_Truck_Barrier_2",
	Plant_Bank_Wall_Breach = "PLANT_Bank_Wall_Breach",
	Plant_Command_Post = "PLANT_Command_Post",
	Plant_Tank_Barrier_1 = "PLANT_Tank_Barrier_1",
	Plant_Tank_Barrier_2 = "PLANT_Tank_Barrier_2",
	Plant_Truck_Barrier_1 = "PLANT_Truck_Barrier_1",
	Plant_Truck_Barrier_2 = "PLANT_Truck_Barrier_2",
	Mount_mg42_allied = "MOUNTMG42_mg42_allied",
	Mount_mg42_bank = "MOUNTMG42_mg42_bank",
	Mount_mg42_bridge = "MOUNTMG42_mg42_bridge",
	Mount_mg42_secret = "MOUNTMG42_mg42_secret",
	Repair_mg42_allied = "REPAIRMG42_mg42_allied",
	Repair_mg42_bank = "REPAIRMG42_mg42_bank",
	Repair_mg42_bridge = "REPAIRMG42_mg42_bridge",
	Repair_mg42_secret = "REPAIRMG42_mg42_secret",
	Snipe_246 = "SNIPE_246",
	Snipe_349 = "SNIPE_349",
	Snipe_362 = "SNIPE_362",
	Snipe_825 = "SNIPE_825",
	Snipe_826 = "SNIPE_826",
	Snipe_829 = "SNIPE_829",
	Snipe_830 = "SNIPE_830",
	Snipe_870 = "SNIPE_870",
	Mover_tank = "MOVER_tank",
	Mover_truck = "MOVER_truck",

	Allied_CP_Built = false,
	Axis_CP_Built = false,
	EndTankRun = false,
	Escorting = false,
	start_of_map = true,
	TruckLoaded = false,

	//set status' for conditionals
	barrierone = 0, //not constructed
	barriertwo = 0,
	barrierthree = 0,
	barrierfour = 0,

	//vehicle positions
	near_defense_one = false,
	near_defense_two = false,
	near_defense_three = false,
	near_defense_four = false,

	// region triggers
	iw1 = 0,
	iw2 = 0,
	iw3 = 0,
	DefendingTeam = TEAM.AXIS,

	//dyno counters
	bOneDyno = 0,
	bTwoDyno = 0,
	bThreeDyno = 0,
	bFourDyno = 0,

	Switches =
	{
		e1_top1 =
		{
			Enabled = true,
			Priority = 0.0,
			WaypointName = "e1_top1",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator1Pos == "top" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		e1_top2 =
		{
			Enabled = false,
			Priority = 0.0,
			WaypointName = "e1_top2",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator1Pos == "bottom" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		e1_bot1 =
		{
			Enabled = false,
			Priority = 0.0,
			WaypointName = "e1_bot1",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator1Pos == "bottom" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		e1_bot2 =
		{
			Enabled = true,
			Priority = 0.0,
			WaypointName = "e1_bot2",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator1Pos == "top" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		e2_top1 =
		{
			Enabled = true,
			Priority = 0.0,
			WaypointName = "e2_top1",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator2Pos == "top" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		e2_top2 =
		{
			Enabled = false,
			Priority = 0.0,
			WaypointName = "e2_top2",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator2Pos == "bottom" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		e2_bot1 =
		{
			Enabled = false,
			Priority = 0.0,
			WaypointName = "e2_bot1",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator2Pos == "bottom" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		e2_bot2 =
		{
			Enabled = true,
			Priority = 0.0,
			WaypointName = "e2_bot2",
			Timeout = 10000,

			Wait = function()
			{
				if ( Map.Elevator2Pos == "top" )
				{
					sleep(1);
					return true;
				}
				return false;
			},
		},
		window =
		{
			Enabled = true,
			Priority = 0.0,
			WaypointName = "window",
			AimPosition = Vector3(729, 2294, 475),
		},
	},

	Elevator1Pos = "bottom",
	Elevator1 = function(trigger)
	{
		Map.Elevator1Pos = "moving";
		Util.MapDebugPrint("Elevator1 moving", true);

		Map.Switches.e1_top1.Enabled = false;
		Map.Switches.e1_top2.Enabled = false;
		Map.Switches.e1_bot1.Enabled = false;
		Map.Switches.e1_bot2.Enabled = false;

		sleep(7);

		vel = ToVector(trigger.Action);

		if (vel.z < 0)
		{
			Map.Elevator1Pos = "bottom";
			Map.Switches.e1_top1.Enabled = true;
			Map.Switches.e1_bot2.Enabled = true;
			Util.MapDebugPrint("Elevator1 at bottom", true);
		}
		else
		{
			Map.Elevator1Pos = "top";
			Map.Switches.e1_bot1.Enabled = true;
			Map.Switches.e1_top2.Enabled = true;
			Util.MapDebugPrint("Elevator1 at top", true);
		}
	},

	Elevator2Pos = "bottom",
	Elevator2 = function(trigger)
	{
		Map.Elevator2Pos = "moving";
		Util.MapDebugPrint("Elevator1 moving", true);

		Map.Switches.e2_top1.Enabled = false;
		Map.Switches.e2_top2.Enabled = false;
		Map.Switches.e2_bot1.Enabled = false;
		Map.Switches.e2_bot2.Enabled = false;

		sleep(7);

		vel = ToVector(trigger.Action);

		if (vel.z < 0)
		{
			Map.Elevator2Pos = "bottom";
			Map.Switches.e2_top1.Enabled = true;
			Map.Switches.e2_bot2.Enabled = true;
			Util.MapDebugPrint("Elevator2 at bottom", true);
		}
		else
		{
			Map.Elevator2Pos = "top";
			Map.Switches.e2_bot1.Enabled = true;
			Map.Switches.e2_top2.Enabled = true;
			Util.MapDebugPrint("Elevator2 at top", true);
		}
	},

	Allied_Command_Post_Built = function( trigger )
	{
		Map.Allied_CP_Built = true;

	Util.MapDebugPrint( "Command_Post_Built" );
	},

	Axis_Command_Post_Built = function( trigger )
	{
		Map.Axis_CP_Built = true;

		Util.MapDebugPrint( "Command_Post_Built" );
	},

	Tank_Built = function( trigger )
	{
		// Allied goals
		if ( Map.start_of_map )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Command_Post );
			Map.start_of_map = false;
		}

		if ( !Map.EndTankRun )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "MOUNT_tank" );
		}

		Util.MapDebugPrint( "Tank_Built" );
	},

	Tank_Barrier_1_Built = function( trigger )
	{
		Map.barrierone = 1;

		if ( Map.near_defense_one )
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Tank ); }

		Util.MapDebugPrint( "Tank_Barrier_1_Built" );
	},

	Tank_Barrier_2_Built = function( trigger )
	{
		Map.barriertwo = 1;

		if ( Map.near_defense_two )
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Tank ); }

		Util.MapDebugPrint( "Tank_Barrier_2_Built" );
	},

	Truck_Built = function( trigger )
	{

		if ( Map.TruckLoaded )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
		}

		Util.MapDebugPrint( "Truck_Built" );
	},

	Truck_Barrier_1_Built = function( trigger )
	{
		Map.barrierthree = 1;

		if ( Map.near_defense_three )
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Truck ); }

		Util.MapDebugPrint( "Truck_Barrier_1_Built" );
	},

	Truck_Barrier_2_Built = function( trigger )
	{
		Map.barrierfour = 1;

		if ( Map.near_defense_four )
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Truck ); }

		Util.MapDebugPrint( "Truck_Barrier_2_Built" );
	},

	Command_Post_Planted = function( trigger )
	{

		if ( Map.Axis_CP_Built )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Command_Post_.*" );
		}
		if ( Map.Allied_CP_Built )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Command_Post_.*" );
		}

		Util.MapDebugPrint( "Command_Post_Planted" );
	},

	Axis_Command_Post_Destroyed = function( trigger )
	{
		Map.Axis_CP_Built = false;

		Util.MapDebugPrint( "Command_Post_Destroyed" );
	},

	Allied_Command_Post_Destroyed = function( trigger )
	{
		Map.Allied_CP_Built = false;

		Util.MapDebugPrint( "Command_Post_Destroyed" );
	},

	Tank_Barrier_1_Destroyed = function( trigger )
	{
		Map.barrierone = 0;

		//reset the dyno counter
		Map.bOneDyno = 0;

		Util.MapDebugPrint( "Tank_Barrier_1_Destroyed" );
	},

	Tank_Barrier_2_Destroyed = function( trigger )
	{
		Map.barriertwo = 0;

		//reset the dyno counter
		Map.bTwoDyno = 0;

		Util.MapDebugPrint( "Tank_Barrier_2_Destroyed" );
	},

	Truck_Barrier_1_Destroyed = function( trigger )
	{
		Map.barrierthree = 0;

		//reset the dyno counter
		Map.bThreeDyno = 0;

		Util.MapDebugPrint( "Truck_Barrier_1_Destroyed" );
	},

	Truck_Barrier_2_Destroyed = function( trigger )
	{
		Map.barrierfour = 0;

		//reset the dyno counter
		Map.bFourDyno = 0;

		Util.MapDebugPrint( "Truck_Barrier_2_Destroyed" );
	},

	gold_crate_Taken = function( trigger )
	{
		Wp.SetWaypointFlag("rail1", "closed", false);
		Wp.SetWaypointFlag("rail2", "closed", false);
		Wp.SetWaypointFlag("rail3", "closed", false);

		Util.MapDebugPrint( "gold_crate_Taken" );
	},

	gold_crate_Returned = function( trigger )
	{
		Wp.SetWaypointFlag("rail1", "closed", true);
		Wp.SetWaypointFlag("rail2", "closed", true);
		Wp.SetWaypointFlag("rail3", "closed", true);

		Util.MapDebugPrint( "gold_crate_Returned" );
	},

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

	allies_steal_tank = function( trigger )
	{

		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker1", 200.0,
			Map.tank_at_barrier1 );

		// Allied goals
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Depot_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ATTACK_Tank_Barrier1_.*",
			Map.Mount_mg42_secret,
			Map.Repair_mg42_secret,
		});

		// Axis goals
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Depot_.*",
			"PLANTMINE_depot_.*",
			Map.Build_Command_Post,
			Map.Plant_Command_Post,
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"BUILD_Tank_Barrier_1",
			"DEFEND_Tank_Barrier1_.*",
			"PLANTMINE_tb1_.*",
		});

		Util.MapDebugPrint( "allies_steal_tank" );
	},

	tank_past_barrier1 = function( trigger )
	{
		Map.near_defense_one = false;

		Util.OnTriggerPosition( Map.Mover_tank, "tank_at_bridge", 200.0, Map.tank_at_bridge );

		// Allied goals
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Ammo_Cabinet_north_ammocabinet,
			"ATTACK_Tank_Barrier1_.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ATTACK_Tank_Barrier2_.*",
			"ATTACK_newbarrier2_.*",
			Map.Plant_Tank_Barrier_2,
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Build_Command_Post,
			Map.Plant_Command_Post,
			Map.Plant_Tank_Barrier_1,
			Map.Health_Cabinet_north_healthcabinet,
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.Mount_mg42_bridge,
			Map.Repair_mg42_bridge,
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Mount_mg42_secret,
			Map.Repair_mg42_secret,
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "AIRSTRIKE_Tank_Barrier2_.*" );

		// Axis goals
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Tank_Barrier1_.*",
			"PLANTMINE_tb1_.*",
			Map.Build_Tank_Barrier_1,
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_bridge_.*",
			Map.Ammo_Cabinet_south_ammocabinet,
			Map.Build_Tank_Barrier_2,
			Map.Health_Cabinet_south_healthcabinet,
			Map.Mount_mg42_bridge,
			Map.Repair_mg42_bridge,
			"PLANTMINE_bridge_.*",
		});

		//make sure the tank repair goal is active
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Tank );

		Util.MapDebugPrint( "tank_past_barrier1" );
	},

	tank_at_bridge = function()
	{
		Util.OnTriggerPosition( Map.Mover_tank, "tank_at_corner", 200.0, Map.tank_at_corner );

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_bridge_.*",
			"PLANTMINE_bridge_.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_corner_.*",
			"PLANTMINE_corner_.*",
		});

		Util.MapDebugPrint("tank_at_bridge");
	},

	tank_at_corner = function()
	{
		Util.OnTriggerPosition( Map.Mover_tank, "tank_at_intersection", 200.0, Map.tank_at_intersection );

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_corner_.*",
			"PLANTMINE_corner_.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_int_.*",
			"PLANTMINE_int_.*",
		});

		Util.MapDebugPrint("tank_at_corner");
	},

	tank_at_intersection = function()
	{
		Util.OnTriggerPosition( Map.Mover_tank, "At Bridge MG", 200.0, Map.tank_at_bridge_mg );

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_int_.*",
			"PLANTMINE_int_.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_Tank_Barrier2_.*",
			"PLANTMINE_tb2_.*",
		});

		Util.MapDebugPrint("tank_at_intersection");
	},

	tank_at_bridge_mg = function()
	{
		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker2", 200.0, Map.tank_at_barrier2 );

		Util.MapDebugPrint("tank_at_bridge_mg");
	},

	tank_past_barrier2 = function( trigger )
	{
		Map.near_defense_two = false;
		Map.tank_past_b2 = true; // for secret window

		// Allied goals
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"ATTACK_Tank_Barrier2_.*",
			"ATTACK_newbarrier2_.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Bank_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Plant_Tank_Barrier_2,
			Map.Mount_mg42_bridge,
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Mount_mg42_bank );
		SetAvailableMapGoals( TEAM.ALLIES, false, Map.Repair_mg42_bridge );
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Repair_mg42_bank );
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Mount_mg42_secret,
			Map.Repair_mg42_secret,
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "GRENADE_bank_mg" );

		// Axis goals
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Tank_Barrier2_.*",
			"PLANTMINE_tb2_.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Bank_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Bank_8",
			"DEFEND_Bank_9",
			Map.Build_Tank_Barrier_2,
			Map.Mount_mg42_bridge,
		});
		SetAvailableMapGoals( TEAM.AXIS, true, Map.Mount_mg42_bank );
		SetAvailableMapGoals( TEAM.AXIS, false, Map.Repair_mg42_bridge );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			Map.Repair_mg42_bank,
			Map.Build_Truck_Barrier_1,
		});

		//make sure the tank repair goal is active
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Tank );

		// only use the back stairs for the repair
		Util.DisableGoal("ROUTE_repair_route_bridge.*");

		Util.MapDebugPrint( "tank_past_barrier2" );
	},

	blow_doors = function( trigger )
	{
		sleep( 2 );

		Map.EndTankRun = true;

		numAlliedBots = 0;
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.ALLIES )
			{
				numAllies += 1;
				if ( numAlliedBots % 2 == 0 )
				{
					bot.ChangeSpawnPoint( 3 );
				}
			}
		}


		// Allied goals
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"AIRSTRIKE_Tank_Barrier2_.*",
			Map.Build_Tank,
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.Build_Truck,
			Map.Flag_gold_crate,
			Map.Cappoint_Gold_Dropoff,
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, Map.Mover_tank );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.Plant_Bank_Wall_Breach,
			"SMOKEBOMB_bank.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNT_tank" );

		// Axis goals
		SetAvailableMapGoals( TEAM.AXIS, false, {
			Map.Mount_mg42_bridge,
			Map.Mount_mg42_secret,
			Map.Repair_mg42_bridge,
			Map.Repair_mg42_secret,
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			Map.Mount_mg42_bank,
			Map.Repair_mg42_bank,
			"DEFEND_Bank_8",
			"DEFEND_Bank_9",
		});

		// intrusion warning region triggers
		Map.iw1 = OnTriggerRegion( AABB(1480.742,-2466.167,-403.870,1605.773,-2403.699,-235.466), RegionTrigger.IntrusionWarning );
		Map.iw2 = OnTriggerRegion( AABB(1470.405,-2041.986,-359.106,1696.767,-1951.906,-206.108), RegionTrigger.IntrusionWarning );
		Map.iw3 = OnTriggerRegion( AABB(1854.647,-2344.672,-406.225,1942.472,-2162.907,-187.716), RegionTrigger.IntrusionWarning );

		Wp.SetWaypointFlag("closeddoor1", "closed", false);
		Wp.SetWaypointFlag("closeddoor2", "closed", false);
		Wp.SetWaypointFlag("closeddoor3", "closed", false);

		Util.MapDebugPrint( "blow_doors" );
	},

	allies_taking_gold = function( trigger )
	{
		Util.OnTriggerPosition( Map.Mover_truck, "truckmarker1", 200.0,
			Map.truck_at_barrier1 );

		// Allied goals
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"GRENADE_bank_mg",
			"ATTACK_Bank_.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ATTACK_Truck_Barrier1_.*",
			Map.Plant_Truck_Barrier_1,
			Map.Plant_Truck_Barrier_2,
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, Map.Mount_mg42_bank );
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Mount_mg42_allied );
		SetAvailableMapGoals( TEAM.ALLIES, false, Map.Repair_mg42_bank );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.Repair_mg42_allied,
			Map.Mover_truck,
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Plant_Bank_Wall_Breach,
			"SMOKEBOMB_bank.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );

		Map.TruckLoaded = true;

		// Axis goals
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Bank_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Truck_Barrier1_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, Map.Mount_mg42_bank );
		SetAvailableMapGoals( TEAM.AXIS, true, Map.Mount_mg42_allied );
		SetAvailableMapGoals( TEAM.AXIS, false, Map.Repair_mg42_bank );
		SetAvailableMapGoals( TEAM.AXIS, true, Map.Repair_mg42_allied );

		DeleteTriggerRegion( Map.iw1 );
		DeleteTriggerRegion( Map.iw2 );
		DeleteTriggerRegion( Map.iw3 );

		Util.MapDebugPrint( "allies_taking_gold" );
	},

	truck_past_barrier1 = function( trigger )
	{
		Map.near_defense_three = false;

		Util.OnTriggerPosition( Map.Mover_truck, "truckmarker2", 200.0,
			Map.tank_at_barrier2 );

		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.ALLIES )
				{ bot.ChangeSpawnPoint( 3 ); }
		}

		// Allied goals
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Truck_Barrier1_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Truck_Barrier2_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, Map.Plant_Truck_Barrier_1 );

		// Axis goals
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Truck_Barrier1_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Truck_Barrier2_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, Map.Build_Truck_Barrier_1 );
		SetAvailableMapGoals( TEAM.AXIS, true, Map.Build_Truck_Barrier_2 );

		//make sure the truck repair goal is active
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Truck );

		Util.MapDebugPrint( "truck_past_barrier1" );
	},

	truck_past_barrier2 = function( trigger )
	{
		Map.near_defense_four = false;

		// Allied goals
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Truck_Barrier2_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Escape_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Mount_mg42_allied,
			Map.Repair_mg42_allied,
			Map.Plant_Truck_Barrier_2,
		});

		// Axis goals
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Truck_Barrier2_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Truck_Escape_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, {
			Map.Mount_mg42_allied,
			Map.Repair_mg42_allied,
			Map.Build_Truck_Barrier_2,
		});

		//make sure the truck repair goal is active
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Truck );

		Util.MapDebugPrint( "truck_past_barrier2" );
	},

	Tank_Destroyed = function ( trigger )
	{
		Util.SetPositionGoal( Map.Build_Tank, Map.Mover_tank );
		SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNT_tank" );

		Util.MapDebugPrint( "Tank_Destroyed" );
	},

	Truck_Destroyed = function ( trigger )
	{
		Util.SetPositionGoal( Map.Build_Truck, Map.Mover_truck );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );

		Util.MapDebugPrint( "Truck_Destroyed" );
	},

	tank_at_barrier1 = function()
	{
		Map.near_defense_one = true;

		//technically shouldn't need the 'else', but just to be sure
		if ( Map.barrierone > 0 && Map.bOneDyno < 1)
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Tank ); }
		else
			{ SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Tank ); }

		Util.MapDebugPrint("tank_at_barrier1");
	},

	tank_at_barrier2 = function()
	{
		Map.near_defense_two = true;

		if ( Map.barriertwo > 0 && Map.bTwoDyno < 1 )
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Tank ); }
		else
			{ SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Tank ); }

		// enable the repair routes
		Util.EnableGoal("ROUTE_repair_route.*");

		Util.MapDebugPrint("tank_at_barrier2");
	},

	truck_at_barrier1 = function()
	{
		Map.near_defense_three = true;

		if ( Map.barrierthree > 0 && Map.bThreeDyno < 1 )
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Truck ); }
		else
			{ SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Truck ); }

		Util.MapDebugPrint("truck_at_barrier1");
	},

	truck_at_barrier2 = function()
	{
		Map.near_defense_four = true;

		if ( Map.barrierfour > 0 && Map.bFourDyno < 1 )
			{ SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Truck ); }
		else
			{ SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Truck ); }

		Util.MapDebugPrint("truck_at_barrier2");
	},

	planted_at_Tank_Barrier_1 = function ( trigger )
	{
		//got a dyno down, build the tank if needed
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Tank );

		Map.bOneDyno += 1;

		//engineers already have two plants, save charge for tank
		if ( Map.bOneDyno >= 2 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, Map.Plant_Tank_Barrier_1 );
		}

		Util.MapDebugPrint("planted_at_Tank_Barrier_1");
	},

	defused_at_Tank_Barrier_1 = function ( trigger )
	{
		Map.bOneDyno -= 1;

		//focus back on planting dyno
		if ( Map.bOneDyno < 1 && Map.near_defense_one )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Tank );
		}

		//allow engineers to plant twice
		if ( Map.bOneDyno < 2 && Map.near_defense_one )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.Plant_Tank_Barrier_1 );
		}

		Util.MapDebugPrint("defused_at_Tank_Barrier_1");
	},

	planted_at_Tank_Barrier_2 = function ( trigger )
	{
		Map.bTwoDyno += 1;

		if ( Map.near_defense_two )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Tank );
		}

		//engineers already have two plants, save charge for tank
		if ( Map.bTwoDyno >= 2 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, Map.Plant_Tank_Barrier_2 );
		}

		Util.MapDebugPrint("planted_at_Tank_Barrier_2");
	},

	defused_at_Tank_Barrier_2 = function ( trigger )
	{
		Map.bTwoDyno -= 1;

		if ( Map.bTwoDyno < 1 && Map.near_defense_two )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Tank );
		}

		//allow engineers to plant twice
		if ( Map.bTwoDyno < 2 && Map.near_defense_two )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.Plant_Tank_Barrier_2 );
		}

		Util.MapDebugPrint("defused_at_Tank_Barrier_2");
	},

	planted_at_Truck_Barrier_1 = function ( trigger )
	{
		Map.bThreeDyno += 1;

		if ( Map.near_defense_three )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Truck );
		}

		Util.MapDebugPrint("planted_at_Truck_Barrier_1");
	},

	defused_at_Truck_Barrier_1 = function ( trigger )
	{
		Map.bThreeDyno -= 1;

		if ( Map.bThreeDyno < 1 && Map.near_defense_three )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Truck );
		}

		Util.MapDebugPrint("defused_at_Truck_Barrier_1");
	},

	planted_at_Truck_Barrier_2 = function ( trigger )
	{
		Map.bFourDyno += 1;

		if ( Map.near_defense_four )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Truck );
		}

		Util.MapDebugPrint("planted_at_Truck_Barrier_2");
	},

	defused_at_Truck_Barrier_2 = function ( trigger )
	{
		Map.bFourDyno -= 1;

		if ( Map.bFourDyno < 1 && Map.near_defense_four )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Truck );
		}

		Util.MapDebugPrint("defused_at_Truck_Barrier_2");
	},

	Bank_Wall_Breach_Destroyed = function( trigger )
	{
			Wp.SetWaypointFlag("wallbreach", "closed", false);

		Util.MapDebugPrint( "Bank_Wall_Breach_Destroyed" );
	},

	Bankdoor1 = function(trigger)
	{
		vel = ToVector(trigger.Action);

		if (vel.y > 0)
		{
			Wp.SetWaypointFlag("onewaydoor1", "door", false);
			Wp.SetWaypointFlag("onewaydoor2", "door", false);
			Util.MapDebugPrint("BankDoor1 opening");
		}
		else
		{
			Wp.SetWaypointFlag("onewaydoor1", "door", true);
			Wp.SetWaypointFlag("onewaydoor2", "door", true);
			Util.MapDebugPrint("BankDoor1 closing");
		}
	},

	Bankdoor2 = function(trigger)
	{
		vel = ToVector(trigger.Action);

		if (vel.y > 0)
		{
			Wp.SetWaypointFlag("onewaydoor3", "door", true);
			Wp.SetWaypointFlag("onewaydoor4", "door", true);
			Util.MapDebugPrint("BankDoor2 closing");
		}
		else
		{
			Wp.SetWaypointFlag("onewaydoor3", "door", false);
			Wp.SetWaypointFlag("onewaydoor4", "door", false);
			Util.MapDebugPrint("BankDoor2 opening");
		}
	},

	Bankdoor3 = function(trigger)
	{
		vel = ToVector(trigger.Action);

		if (vel.y > 0)
		{
			Wp.SetWaypointFlag("onewaydoor5", "door", false);
			Wp.SetWaypointFlag("onewaydoor6", "door", false);
			Util.MapDebugPrint("BankDoor3 opening");
		}
		else
		{
			Wp.SetWaypointFlag("onewaydoor5", "door", true);
			Wp.SetWaypointFlag("onewaydoor6", "door", true);
			Util.MapDebugPrint("BankDoor3 closing");
		}
	},

	Secret_Window = function(trigger)
	{
		Map.Switches.window.Enabled = false;

		vel = ToVector(trigger.Action);

		// disable mg42 when it is closed. note that paththrough is used for the window
		// so if the bot is mounted and it was closed, it should dismount and open it
		// it doesn't handle case of closed when no bot is there, but this mg is a bit
		// useless anyway
		if (vel.y > 0) // closed
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNTMG42_mg42_secret" );
			Map.Switches.window.Enabled = true;
			Util.MapDebugPrint("window closed", true);
		}
		else
		{
			if ( !Map.start_of_map && !Map.tank_past_b2 ) {
				SetAvailableMapGoals( TEAM.ALLIES, true, "MOUNTMG42_mg42_secret" );
			}

			Util.MapDebugPrint("window opened", true);
		}
	},

	secdoor1a = function( trigger )
	{
		vec = ToVector(trigger.Action);
		if ( vec.y > 0)
		{
			// remove door flag once it's open
			Util.MapDebugPrint( "secdoor open" );
			Wp.SetWaypointFlag( "onewaydoor7", "door", false );
			Wp.SetWaypointFlag( "onewaydoor8", "door", false );
		}
		else
		{
			Util.MapDebugPrint( "secdoor closed" );
			Wp.SetWaypointFlag( "onewaydoor7", "door", true );
			Wp.SetWaypointFlag( "onewaydoor8", "door", true );
		}
	}
};

global OnMapLoad = function()
{
	Util.SetGoalOffset( 0, 160, 0, Map.Plant_Tank_Barrier_1 );
	Util.SetGoalOffset( 0, 174, 0, Map.Plant_Tank_Barrier_2 );

	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built );
	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
	OnTrigger( "The Tank has been repaired!", Map.Tank_Built );
	OnTrigger( "Tank Barrier #1 has been constructed.", Map.Tank_Barrier_1_Built );
	OnTrigger( "Tank Barrier #2 has been constructed.", Map.Tank_Barrier_2_Built );
	OnTrigger( "The Truck has been repaired!", Map.Truck_Built );
	OnTrigger( "Truck Barrier #1 has been constructed.", Map.Truck_Barrier_1_Built );
	OnTrigger( "Truck Barrier #2 has been constructed.", Map.Truck_Barrier_2_Built );
	OnTrigger( "Planted at the Command Post.", Map.Command_Post_Planted );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "The Tank has been damaged!", Map.Tank_Destroyed );
	OnTrigger( "Tank Barrier #1 has been destroyed.", Map.Tank_Barrier_1_Destroyed );
	OnTrigger( "Tank Barrier #2 has been destroyed.", Map.Tank_Barrier_2_Destroyed );
	OnTrigger( "The Truck has been damaged!", Map.Truck_Destroyed );
	OnTrigger( "Truck Barrier #1 has been destroyed.", Map.Truck_Barrier_1_Destroyed );
	OnTrigger( "Truck Barrier #2 has been destroyed.", Map.Truck_Barrier_2_Destroyed );
	OnTrigger( "goldrush_allies_gold1_taken", Map.gold_crate_Taken );
	OnTrigger( "goldrush_allies_gold2_taken", Map.gold_crate_Taken );
	OnTrigger( "goldrush_allies_gold1_returned", Map.gold_crate_Returned );
	OnTrigger( "goldrush_allies_gold2_returned", Map.gold_crate_Returned );
	OnTrigger( "Allied team has secured the first Gold Crate!", Map.Gold_Dropoff_Captured );
	OnTrigger( "Allied team has secured the second Gold Crate!", Map.Gold_Dropoff_Captured );
	OnTrigger( "Allied team has stolen the Tank!", Map.allies_steal_tank );
	OnTrigger( "Allied team is escaping with the Gold Crates!", Map.allies_taking_gold );
	OnTrigger( "goldrush_allies_tank_barrier1", Map.tank_past_barrier1 );
	OnTrigger( "goldrush_allies_tank_barrier2", Map.tank_past_barrier2 );
	OnTrigger( "goldrush_allies_truck_barrier1", Map.truck_past_barrier1 );
	OnTrigger( "goldrush_allies_truck_barrier2", Map.truck_past_barrier2 );
	OnTrigger( "Allied team has destroyed the Bank Doors!", Map.blow_doors );
	OnTrigger( "Planted at Tank Barrier #1.", Map.planted_at_Tank_Barrier_1 );
	OnTrigger( "Defused at Tank Barrier #1.", Map.defused_at_Tank_Barrier_1 );
	OnTrigger( "Planted at Tank Barrier #2.", Map.planted_at_Tank_Barrier_2 );
	OnTrigger( "Defused at Tank Barrier #2.", Map.defused_at_Tank_Barrier_2 );
	OnTrigger( "Planted at Truck Barrier #1.", Map.planted_at_Truck_Barrier_1 );
	OnTrigger( "Defused at Truck Barrier #1.", Map.defused_at_Truck_Barrier_1 );
	OnTrigger( "Planted at Truck Barrier #2.", Map.planted_at_Truck_Barrier_2 );
	OnTrigger( "Defused at Truck Barrier #2.", Map.defused_at_Truck_Barrier_2 );
	OnTrigger( "Allied team has destroyed the bank wall breach!", Map.Bank_Wall_Breach_Destroyed );
	OnTrigger( "bankdoorfloor2_start", Map.Bankdoor1 );
	OnTrigger( "bankdoorfloor2b_start", Map.Bankdoor2 );
	OnTrigger( "bankdoorfloor1a_start", Map.Bankdoor3 );
	OnTrigger( "elevator1_goto", Map.Elevator1 );
	OnTrigger( "elevator2_goto", Map.Elevator2 );
	OnTrigger( "secdoor3a_start", Map.Secret_Window );
	OnTrigger( "secdoor1a_start", Map.secdoor1a );

	// Adjust tank goal for rebuild
	Util.SetPositionGoal( Map.Build_Tank, Map.Mover_tank );
	Util.SetPositionGoal( Map.Build_Truck, Map.Mover_truck ); //truck too

	//Additional plant positions for Tank Barrier 1
	Util.AddUsePoint( "PLANT_Tank_Barrier_1", { Vec3(935, 611, 8), Vec3(628, 524, -1), Vec3(545, 465, 3), Vec3(647, 613, 8) } );

	//Additional plant positions for Tank Barrier 2
	Util.AddUsePoint( "PLANT_Tank_Barrier_2", { Vec3(2030, 253, -401), Vec3(1631, 251, -413), Vec3(1653, 304, -285), Vec3(1581, -130, -183), Vec3(2042, 480, -403) } );

	// Max users per goal
	Util.SetMaxUsersInProgress( 1, "ATTACK_Depot_.*" );
	Util.SetMaxUsersInProgress( 1, "ATTACK_Tank_Barrier1_.*" );
	Util.SetMaxUsersInProgress( 1, "ATTACK_Tank_Barrier2_.*" );
	Util.SetMaxUsersInProgress( 1, "ATTACK_Truck_Barrier1_.*" );
	Util.SetMaxUsersInProgress( 1, "ATTACK_Truck_Barrier2_.*" );
	Util.SetMaxUsersInProgress( 1, "ATTACK_Escape_.*" );
	Util.SetMaxUsersInProgress( 1, "DEFEND_Depot_.*" );
	Util.SetMaxUsersInProgress( 1, "DEFEND_Tank_Barrier1_.*" );
	Util.SetMaxUsersInProgress( 1, "DEFEND_Tank_Barrier2_.*" );
	Util.SetMaxUsersInProgress( 1, "DEFEND_Truck_Barrier1_.*" );
	Util.SetMaxUsersInProgress( 1, "DEFEND_Truck_Barrier2_.*" );
	Util.SetMaxUsersInProgress( 1, "DEFEND_Escape_.*" );
	Util.SetMaxUsersInProgress( 1, "MOUNTMG42_.*" );

	SetMapGoalProperties( "ATTACK_.*", {MinCampTime=5, MaxCampTime=10} );
	SetMapGoalProperties( "DEFEND_.*", {MinCampTime=5, MaxCampTime=20} );
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=60, MaxCampTime=120} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=120, MaxCampTime=120}  );
	SetMapGoalProperties( "SNIPE_.*", {MinCampTime=120, MaxCampTime=120} );

	SetGoalPriority( "MOUNTMG42_.*", 0.0, 0, CLASS.MEDIC );
	SetGoalPriority( "MOUNTMG42_.*", 0.0, 0, CLASS.ENGINEER );


	// Allied goals
	SetGoalPriority( Map.Flag_gold_crate, 0.92, TEAM.ALLIES );
	SetGoalPriority( Map.Cappoint_Gold_Dropoff, 0.92, TEAM.ALLIES );
	SetGoalPriority( "BUILD.*", 0.88, TEAM.ALLIES );
	SetGoalPriority( Map.Build_Tank, 0.90, TEAM.ALLIES );
	SetGoalPriority( Map.Build_Truck, 0.89, TEAM.ALLIES );
	SetGoalPriority( Map.Plant_Command_Post, 0.0, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( Map.Plant_Tank_Barrier_1, 0.84, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( Map.Plant_Tank_Barrier_2, 0.83, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( Map.Plant_Truck_Barrier_1, 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( Map.Plant_Truck_Barrier_2, 0.81, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "SMOKEBOMB_bank.*", 0.95, TEAM.ALLIES, CLASS.COVERTOPS );

	SetAvailableMapGoals( TEAM.ALLIES, false, {
		Map.Ammo_Cabinet_south_ammocabinet,
		"ATTACK.*",
	});
	SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Depot_.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, {
		"DEFEND.*",
		Map.Health_Cabinet_south_healthcabinet,
		Map.Build_Command_Post,
		Map.Build_Truck,
		Map.Plant_Bank_Wall_Breach,
		Map.Plant_Tank_Barrier_2,
		Map.Plant_Truck_Barrier_1,
		Map.Plant_Truck_Barrier_2,
		Map.Flag_gold_crate,
		Map.Cappoint_Gold_Dropoff,
		Map.Mount_mg42_bridge,
		Map.Mount_mg42_bank,
		Map.Mount_mg42_allied,
		Map.Repair_mg42_bridge,
		Map.Repair_mg42_bank,
		Map.Repair_mg42_allied,
		"SNIPE.*",
		"PLANTMINE.*",
		Map.Mover_truck,
		"MOUNTMG42_mg42_secret",
		"REPAIRMG42_mg42_secret",
		"SMOKEBOMB_.*",
		"AIRSTRIKE_.*",
		"GRENADE_bank_mg",
		"ESCORT_truck",
		"MOUNT_tank",
	});

	// Axis goals
	SetGoalPriority( "BUILD_.*", 0.88, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( Map.Build_Tank_Barrier_1, 0.90, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( Map.Build_Tank_Barrier_2, 0.90, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( Map.Build_Truck_Barrier_1, 0.90, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( Map.Build_Truck_Barrier_2, 0.90, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( Map.Build_Command_Post, 0.89, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( Map.Plant_Command_Post, 0.0, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "DEFEND_Depot_[14]", 0.6, TEAM.AXIS ); //try and keep these two occupied
	SetGoalPriority( "DEFUSE_Tank_Barrier_1_.*", 1.25, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "DEFUSE_Tank_Barrier_2_.*", 1.20, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "DEFUSE_Truck_Barrier_1_.*", 1.15, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "DEFUSE_Truck_Barrier_2_.*", 1.10, TEAM.AXIS, CLASS.ENGINEER, true );

	SetAvailableMapGoals( TEAM.AXIS, false, {
		Map.Ammo_Cabinet_north_ammocabinet,
		Map.Ammo_Cabinet_south_ammocabinet,
		"ATTACK.*",
		"DEFEND.*",
		Map.Health_Cabinet_north_healthcabinet,
		Map.Health_Cabinet_south_healthcabinet,
		Map.Build_Tank_Barrier_1,
		Map.Build_Tank_Barrier_2,
		Map.Build_Truck_Barrier_1,
		Map.Build_Truck_Barrier_2,
		Map.Mount_mg42_bridge,
		Map.Mount_mg42_bank,
		Map.Mount_mg42_allied,
		Map.Repair_mg42_bridge,
		Map.Repair_mg42_bank,
		Map.Repair_mg42_allied,
		"SNIPE.*",
		"PLANTMINE.*",
		"AIRSTRIKE_.*",
		"GRENADE_bank_mg",
	});
	SetAvailableMapGoals( TEAM.AXIS, true, {
		"DEFEND_Depot_.*",
		"PLANTMINE_depot_.*",
	});

	Wp.SetWaypointFlag("closeddoor1", "closed", true);
	Wp.SetWaypointFlag("closeddoor2", "closed", true);
	Wp.SetWaypointFlag("closeddoor3", "closed", true);
	Wp.SetWaypointFlag("rail1", "closed", true);
	Wp.SetWaypointFlag("rail2", "closed", true);
	Wp.SetWaypointFlag("rail3", "closed", true);
	Wp.SetWaypointFlag("wallbreach", "closed", true);
	Wp.SetWaypointFlag("onewaydoor1", "door", true);
	Wp.SetWaypointFlag("onewaydoor2", "door", true);
	Wp.SetWaypointFlag("onewaydoor3", "door", true);
	Wp.SetWaypointFlag("onewaydoor4", "door", true);
	Wp.SetWaypointFlag("onewaydoor5", "door", true);
	Wp.SetWaypointFlag("onewaydoor6", "door", true);
	Wp.SetWaypointFlag("onewaydoor7", "door", true);
	Wp.SetWaypointFlag("onewaydoor8", "door", true);

	SetGoalPriority( "PLANT_Bank_Wall_Breach", 0.95 );

	// disable combat movement
	secretwindow = OnTriggerRegion(AABB(2175,-1087,-30, 2320,-700,97), RegionTrigger.DisableBotPush);
	sill1 = OnTriggerRegion(AABB(-65,-620,123, 1628,-164,407), RegionTrigger.DisableBotPush);

	//routes for tank build at barrier 2
	Util.DisableGoal("ROUTE_repair_route.*");

	//set up some routing
	MapRoutes =
	{
		BUILD_Tank =
		{
			ROUTE_AllySpawn =
			{
				ROUTE_depotgate =
				{
					ROUTE_depotgate2 =
					{
					},
					ROUTE_depotgatesplit =
					{
						ROUTE_as_rightsplit1 =
						{
						},
					},
					ROUTE_cproute =
					{
					},
				},
				ROUTE_as_right =
				{
					ROUTE_as_rightsplit1 =
					{
					},
					ROUTE_as_rightsplit2 =
					{
						ROUTE_depotflank =
						{
						},
					},
				},
			},
			ROUTE_AllySpawn2 =
			{
				ROUTE_depotgate =
				{
					ROUTE_depotgate2 =
					{
					},
					ROUTE_depotgatesplit =
					{
						ROUTE_as_rightsplit1 =
						{
						},
					},
					ROUTE_cproute =
					{
					},
				},
				ROUTE_as_right =
				{
					ROUTE_as_rightsplit1 =
					{
					},
					ROUTE_as_rightsplit2 =
					{
						ROUTE_depotflank =
						{
						},
					},
				},
			},

			ROUTE_TankYardSpawn =
			{
				ROUTE_repair_route_stairs =
				{
				},
				ROUTE_repair_route_bridge1 =
				{
					ROUTE_repair_route_bridge2 =
					{
						ROUTE_repair_route_bridge3 =
						{
						},
					},
				},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_repair_route_stairs =
				{
				},
				ROUTE_repair_route_bridge1 =
				{
					ROUTE_repair_route_bridge2 =
					{
						ROUTE_repair_route_bridge3 =
						{
						},
					},
				},
			},
		},
		PLANT_Tank_Barrier_1 =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_depotflank =
				{
					ROUTE_tank_barrier_1a = {},
					ROUTE_tank_barrier_1b = {},
					ROUTE_tank_barrier_1c = {},
					ROUTE_tank_barrier_1d = {},
				},
				ROUTE_depotflank2 =
				{
					ROUTE_tank_barrier_1a = {},
					ROUTE_tank_barrier_1b = {},
					ROUTE_tank_barrier_1c = {},
					ROUTE_tank_barrier_1d = {},
				},
				ROUTE_as_rightsplit1 =
				{
					ROUTE_tank_barrier_1a = {},
					ROUTE_tank_barrier_1b = {},
					ROUTE_tank_barrier_1c = {},
					ROUTE_tank_barrier_1d = {},
				},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_depotflank =
				{
					ROUTE_tank_barrier_1a = {},
					ROUTE_tank_barrier_1b = {},
					ROUTE_tank_barrier_1c = {},
					ROUTE_tank_barrier_1d = {},
				},
				ROUTE_depotflank2 =
				{
					ROUTE_tank_barrier_1a = {},
					ROUTE_tank_barrier_1b = {},
					ROUTE_tank_barrier_1c = {},
					ROUTE_tank_barrier_1d = {},
				},
				ROUTE_as_rightsplit1 =
				{
					ROUTE_tank_barrier_1a = {},
					ROUTE_tank_barrier_1b = {},
					ROUTE_tank_barrier_1c = {},
					ROUTE_tank_barrier_1d = {},
				},
			},
		},
		ATTACK_Tank_Barrier1_3 =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_hidden_passage =
				{
				},
			},
		},
		PLANT_Tank_Barrier_2 =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_bridgeroute =
				{
					ROUTE_tank_barrier_2a = {},
					ROUTE_bridgeroute2 =
					{
						ROUTE_tank_barrier_2b = {},
						ROUTE_tank_barrier_2c = {},
						ROUTE_tank_barrier_2d = {},
					},
				},
				ROUTE_cp_stairs =
				{
					Weight = 2,
					ROUTE_tank_barrier_2b = {},
					ROUTE_tank_barrier_2c = {},
					ROUTE_tank_barrier_2d = {},
				},
				ROUTE_repair_route_bridge1 =
				{
					ROUTE_tank_barrier_2a = {},
				},
				ROUTE_tank_barrier_2e = {},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_bridgeroute =
				{
					ROUTE_tank_barrier_2a = {},
					ROUTE_bridgeroute2 =
					{
						ROUTE_tank_barrier_2b = {},
						ROUTE_tank_barrier_2c = {},
						ROUTE_tank_barrier_2d = {},
					},
				},
				ROUTE_cp_stairs =
				{
					Weight = 2,
					ROUTE_tank_barrier_2b = {},
					ROUTE_tank_barrier_2c = {},
					ROUTE_tank_barrier_2d = {},
				},
				ROUTE_repair_route_bridge1 =
				{
					ROUTE_tank_barrier_2a = {},
				},
				ROUTE_tank_barrier_2e = {},
			},
		},
		ATTACK_Tank_Barrier2_1 =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_bridgeroute =
				{
					ROUTE_bridgeroute2 = {},
				},
				ROUTE_trb1_stairs =
				{
					Weight = 2,
					ROUTE_b2flank =
					{
					},
				},
				ROUTE_cp_stairs = {},
				ROUTE_bridge_mg_ledge1 =
				{
					ROUTE_bridge_mg_ledge2 =
					{
						ROUTE_bridge_mg_ledge3 = {},
					},
				},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_bridgeroute =
				{
					ROUTE_bridgeroute2 =
					{
					},
				},
				ROUTE_trb1_stairs =
				{
					Weight = 2,
					ROUTE_b2flank =
					{
					},
				},
				ROUTE_cp_stairs =
				{
				},
				ROUTE_bridge_mg_ledge1 =
				{
					ROUTE_bridge_mg_ledge2 =
					{
						ROUTE_bridge_mg_ledge3 =
						{
						},
					},
				},
			},
		},
		ATTACK_newbarrier2_1 =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_trb1_stairs =
				{
					Weight = 3,
					ROUTE_b2flank =
					{
					},
				},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_trb1_stairs =
				{
					Weight = 3,
					ROUTE_b2flank =
					{
					},
				},
			},
		},
		ATTACK_Bank_1 =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_trb1_stairs =
				{
				},
				ROUTE_cp_stairs =
				{
					ROUTE_cp_stairs2 =
					{
					},
				},
				ROUTE_southstairs =
				{
				},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_trb1_stairs =
				{
				},
				ROUTE_cp_stairs =
				{
					ROUTE_cp_stairs2 =
					{
					},
				},
				ROUTE_southstairs =
				{
				},
			},
		},
		BUILD_Truck =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_trb1_stairs =
				{
				},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_trb1_stairs =
				{
				},
			},
			ROUTE_AllySpawn =
			{
				ROUTE_SouthStairsLedge =
				{
					ROUTE_TruckLedge =
					{
						ROUTE_AxisMGLedge =
						{
						},
					},
				},
			},
			ROUTE_AllySpawn2 =
			{
				ROUTE_SouthStairsLedge =
				{
					ROUTE_TruckLedge =
					{
						ROUTE_AxisMGLedge = {},
					},
				},
			},
		},
		FLAG_gold_crate =
		{
			ROUTE_AllySpawn =
			{
				ROUTE_bankback =
				{
					ROUTE_bankback3 =
					{
						ROUTE_elevator = {},
					},
				},
				ROUTE_SouthStairsLedge =
				{
					ROUTE_TruckLedge =
					{
						ROUTE_AxisMGLedge =
						{
							ROUTE_bankback =
							{
							},
							ROUTE_bankfront =
							{
							},
						},
					},
				},
				ROUTE_wallbreach =
				{
				},
			},
			ROUTE_AllySpawn2 =
			{
				ROUTE_bankback =
				{
					ROUTE_bankback3 =
					{
						ROUTE_elevator = {},
					},
				},
				ROUTE_SouthStairsLedge =
				{
					ROUTE_TruckLedge =
					{
						ROUTE_AxisMGLedge =
						{
							ROUTE_bankback =
							{
							},
							ROUTE_bankfront =
							{
							},
						},
					},
				},
				ROUTE_wallbreach =
				{
				},
			},
			ROUTE_TankYardSpawn =
			{
				ROUTE_bankback =
				{
					ROUTE_bankback3 =
					{
						ROUTE_elevator =
						{
						},
					},
				},
				ROUTE_TankYardSpawn2 =
				{
					ROUTE_trb1_stairs =
					{
						Weight = 2,
						ROUTE_westbank =
						{
							ROUTE_bankfront =
							{
							},
							ROUTE_westbank2 =
							{
								ROUTE_bankback =
								{
								},
							},
						},
					},
					ROUTE_cp_stairs =
					{
						ROUTE_cp_stairs2 =
						{
						},
					},
					ROUTE_southstairs =
					{
					},
					ROUTE_southstairs2 =
					{
						ROUTE_wallbreach =
						{
						},
					},
				},
				ROUTE_TankYardSpawn3 =
				{
					ROUTE_trb1_stairs =
					{
						Weight = 2,
						ROUTE_westbank =
						{
							ROUTE_bankfront =
							{
							},
							ROUTE_westbank2 =
							{
								ROUTE_bankback = {},
							},
						},
					},
					ROUTE_cp_stairs =
					{
						ROUTE_cp_stairs2 = {},
					},
					ROUTE_southstairs =
					{
					},
					ROUTE_southstairs2 =
					{
						ROUTE_wallbreach =
						{
						},
					},
				},
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_trb1_stairs =
				{
					Weight = 2,
					ROUTE_westbank =
					{
						ROUTE_bankfront =
						{
						},
						ROUTE_westbank2 =
						{
							ROUTE_bankback = {},
						},
					},
				},
				ROUTE_cp_stairs =
				{
					ROUTE_cp_stairs2 =
					{
					},
				},
				ROUTE_southstairs =
				{
				},
			},
		},
		CAPPOINT_Gold_Dropoff =
		{
			ROUTE_goldgrab =
			{
				ROUTE_bankback =
				{
					Weight = 2,
					ROUTE_westbank2 =
					{
					},
				},
				ROUTE_bankfront =
				{
				},
			},
		},
		ATTACK_Truck_Barrier1_1 =
		{
			ROUTE_TankYardSpawn =
			{
				ROUTE_trb1_stairs = {},
				ROUTE_longalley = { Weight = 2, ROUTE_longstairs = {}, },
			},
			ROUTE_TankYardSpawn2 =
			{
				ROUTE_trb1_stairs = {},
				ROUTE_longalley = { Weight = 2, ROUTE_longstairs = {}, },
			},
		},
		DEFEND_Tank_Barrier1_6 =
		{
			ROUTE_AxisSpawn =
			{
				ROUTE_trb1_stairs = {},
				ROUTE_cp_stairs2 =
				{
					Weight = 2,
					ROUTE_cp_stairs = {},
				},
				ROUTE_southstairs = {},
			},
		},
		DEFEND_Tank_Barrier2_6 =
		{
			ROUTE_AxisSpawn =
			{
				ROUTE_axisspawn_r = {},
				ROUTE_axisspawn_l = {},
			},
		},
		DEFEND_Bank_6 =
		{
			ROUTE_AxisSpawn =
			{
				ROUTE_axisspawn_r = {},
				ROUTE_axisspawn_l = {},
				ROUTE_bankback3 =
				{
					ROUTE_bankback2 = { ROUTE_bankback = {}, },
				},
			},
		},
		DEFEND_Truck_Barrier1_6 =
		{
			ROUTE_AxisSpawn =
			{
				ROUTE_axisspawn_r =
				{
					Weight = 3,
					ROUTE_b2flank = {},
					ROUTE_southstairs = { ROUTE_southstairs2 = {}, },
					ROUTE_trb1_stairs = {},
				},
				ROUTE_axisspawn_l = {},
				ROUTE_bankback3 = {},
			},
		},
	};
	// copy some routes
	MapRoutes.ATTACK_Depot_6 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Depot_7 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Depot_8 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Depot_9 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Depot_10 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Tank_Barrier1_1 = MapRoutes.PLANT_Tank_Barrier_1;
	MapRoutes.ATTACK_Tank_Barrier1_2 = MapRoutes.PLANT_Tank_Barrier_1;
	MapRoutes.ATTACK_Tank_Barrier1_4 = MapRoutes.PLANT_Tank_Barrier_1;
	MapRoutes.ATTACK_Tank_Barrier1_5 = MapRoutes.PLANT_Tank_Barrier_1;
	MapRoutes.MOUNTMG42_mg42_bridge = MapRoutes.ATTACK_Tank_Barrier2_1;
	MapRoutes.ATTACK_Tank_Barrier2_2 = MapRoutes.ATTACK_Tank_Barrier2_1;
	MapRoutes.ATTACK_Tank_Barrier2_3 = MapRoutes.ATTACK_Tank_Barrier2_1;
	MapRoutes.ATTACK_Tank_Barrier2_4 = MapRoutes.ATTACK_Tank_Barrier2_1;
	MapRoutes.ATTACK_Tank_Barrier2_5 = MapRoutes.ATTACK_Tank_Barrier2_1;
	MapRoutes.ATTACK_newbarrier2_2 = MapRoutes.ATTACK_newbarrier2_1;
	MapRoutes.ATTACK_newbarrier2_3 = MapRoutes.ATTACK_newbarrier2_1;
	MapRoutes.ATTACK_Bank_2 = MapRoutes.ATTACK_Bank_1;
	MapRoutes.ATTACK_Bank_3 = MapRoutes.ATTACK_Bank_1;
	MapRoutes.ATTACK_Bank_4 = MapRoutes.ATTACK_Bank_1;
	MapRoutes.ATTACK_Bank_5 = MapRoutes.ATTACK_Bank_1;
	MapRoutes.MOUNTMG42_mg42_bank = MapRoutes.ATTACK_Bank_1;
	MapRoutes.MOUNTMG42_mg42_allied = MapRoutes.ATTACK_Truck_Barrier1_1;
	MapRoutes.PLANT_Truck_Barrier_1 = MapRoutes.ATTACK_Truck_Barrier1_1;
	MapRoutes.ATTACK_Truck_Barrier1_2 = MapRoutes.ATTACK_Truck_Barrier1_1;
	MapRoutes.ATTACK_Truck_Barrier1_3 = MapRoutes.ATTACK_Truck_Barrier1_1;
	MapRoutes.ATTACK_Truck_Barrier1_4 = MapRoutes.ATTACK_Truck_Barrier1_1;
	MapRoutes.ATTACK_Truck_Barrier1_5 = MapRoutes.ATTACK_Truck_Barrier1_1;
	MapRoutes.DEFEND_Tank_Barrier1_7 = MapRoutes.DEFEND_Tank_Barrier1_6;
	MapRoutes.DEFEND_Tank_Barrier1_8 = MapRoutes.DEFEND_Tank_Barrier1_6;
	MapRoutes.DEFEND_Tank_Barrier1_9 = MapRoutes.DEFEND_Tank_Barrier1_6;
	MapRoutes.DEFEND_Tank_Barrier1_10 = MapRoutes.DEFEND_Tank_Barrier1_6;
	MapRoutes.DEFEND_Tank_Barrier2_7 = MapRoutes.DEFEND_Tank_Barrier2_6;
	MapRoutes.DEFEND_Tank_Barrier2_8 = MapRoutes.DEFEND_Tank_Barrier2_6;
	MapRoutes.DEFEND_Tank_Barrier2_9 = MapRoutes.DEFEND_Tank_Barrier2_6;
	MapRoutes.DEFEND_Tank_Barrier2_10 = MapRoutes.DEFEND_Tank_Barrier2_6;
	MapRoutes.MOUNTMG42_mg42_bridge = MapRoutes.DEFEND_Tank_Barrier2_6;
	MapRoutes.MOUNTMG42_mg42_bank = MapRoutes.DEFEND_Tank_Barrier2_6;
	MapRoutes.DEFEND_Bank_4 = MapRoutes.DEFEND_Bank_6;
	MapRoutes.DEFEND_Bank_5 = MapRoutes.DEFEND_Bank_6;
	MapRoutes.DEFEND_Bank_7 = MapRoutes.DEFEND_Bank_6;
	MapRoutes.DEFEND_Bank_8 = MapRoutes.DEFEND_Bank_6;
	MapRoutes.DEFEND_Bank_9 = MapRoutes.DEFEND_Bank_6;
	MapRoutes.DEFEND_Bank_10 = MapRoutes.DEFEND_Bank_6;
	MapRoutes.DEFEND_Truck_Barrier1_7 = MapRoutes.DEFEND_Truck_Barrier1_6;
	MapRoutes.DEFEND_Truck_Barrier1_8 = MapRoutes.DEFEND_Truck_Barrier1_6;
	MapRoutes.DEFEND_Truck_Barrier1_9 = MapRoutes.DEFEND_Truck_Barrier1_6;
	MapRoutes.DEFEND_Truck_Barrier1_10 = MapRoutes.DEFEND_Truck_Barrier1_6;

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