//==========================================================================================
//
//	ds_bunkers_b2.gm
//	ds_bunkers_b2_goals.gm
//	ds_bunkers_b2.way
//
//	Who      	When		What
//------------------------------------------------------------------------------------------
//	Qiki		24.06.2013	Script and waypoints
//	Native12	01.02.2014	Finished
//
//==========================================================================================
//

global Map =
{
	Debug = 0,

	Allied_Command_Post_Dyno = 0,
	Allied_Defensive_Barrier_Dyno = 0,
	Allied_MG42_Dyno = 0,
	Allied_Main_Hatch_Dyno = 0,
	First_Allied_Supply_Stash_Dyno = 0,
	Second_Allied_Supply_Stash_Dyno = 0,
	Axis_Command_Post_Dyno = 0,
	Axis_Defensive_Barrier_Dyno = 0,
	Axis_MG42_Dyno = 0,
	Axis_Main_Hatch_Dyno = 0,
	First_Axis_Secret_Weapon_Dyno = 0,
	Second_Axis_Secret_Weapon_Dyno = 0,
	Window_1 = true,
	Window_2 = true,
	Allied_Command_Post = false,
	Allied_Defensive_Barrier = false,
	Allied_MG42 = false,
	Axis_Command_Post = false,
	Axis_Defensive_Barrier = false,
	Axis_MG42 = false,
	Allied_Main_Hatch = true,
	Axis_Main_Hatch = true,
	First_Allied_Supply_Stash = true,
	First_Axis_Secret_Weapon = true,
	Second_Allied_Supply_Stash = true,
	Second_Axis_Secret_Weapon = true,
	forwardflag_Axis = false,
	forwardflag_Allies = false,
	Axis_Engs_Inside = 0,
	Allied_Engs_Inside = 0,

	Roles =
	{
		/*
		Axis spawns:	1 - First spawn
				0 - CP spawn
		*/
		AXIS =
		{
			AllBots = true, // each bot is considered for a role
			DEFENDER =
			{
				spawnpt = 1,
				numbots = 6,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER =
			{
				numbots = 6,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER2 =
			{
				numbots = 2,
				crucialClass = CLASS.ENGINEER,
			},
		},
		/*
		Alied spawns:	2 - First spawn
				0 - CP spawn
		*/
		ALLIES =
		{
			AllBots = true, // each bot is considered for a role
			DEFENDER1 =
			{
				spawnpt = 2,
				numbots = 6,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER1 =
			{
				numbots = 6,
				crucialClass = CLASS.ENGINEER,
			},
			DEFENDER2 =
			{
				numbots = 2,
				crucialClass = CLASS.ENGINEER,
			},
		},
	},

	Navigation =
	{
		//	/bot waypoint_setproperty paththrough Navigation_PT:jump
		jump =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.JUMP, 0.55);
				sleep(0.55);
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:window_1
		window_1 =
		{
			gotowp = "Allied_Window",
			EvalFunc = function()
			{
				return Map.Window_1;
			},

			navigate = function(_this)
			{
				if ( !Map.Window_1 )
				{
					yield();
					return;
				}

				_this.AddWeaponRequest( WEAPON.KNIFE );
				_this.AddAimRequest(Priority.VeryHigh, "facing", Vector3(-0.999655,-0.021376,0.015243));

				while( Map.Window_1 )
				{
					_this.Bot.HoldButton(BTN.ATTACK1, 0.5);
					yield();
				}

				_this.ReleaseAimRequest();
				_this.ReleaseWeaponRequest();
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:window_2
		window_2 =
		{
			gotowp = "Axis_Window",
			EvalFunc = function()
			{
				return Map.Window_2;
			},

			navigate = function(_this)
			{
				if ( !Map.Window_2 )
				{
					yield();
					return;
				}

				_this.AddWeaponRequest( WEAPON.KNIFE );
				_this.AddAimRequest(Priority.VeryHigh, "facing", Vector3(0.999368,-0.035466,0.002493));

				while( Map.Window_2 )
				{
					_this.Bot.HoldButton(BTN.ATTACK1, 0.5);
					yield();
				}

				_this.ReleaseAimRequest();
				_this.ReleaseWeaponRequest();
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:ladder_1
		ladder_1 =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("Ladder_1", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.BACKWARD, 1.5);
					sleep(1.5);
				}
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:ladder_3
		ladder_3 =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("Ladder_3", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.BACKWARD, 1.5);
					sleep(1.5);
				}
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:ladder_2
		ladder_2 =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("Ladder_2", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.BACKWARD, 0.3);
					sleep(0.3);
					_this.Bot.HoldButton(BTN.FORWARD, 0.5);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.BACKWARD, 2.5);
					sleep(2.5);
				}
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:ladder_4
		ladder_4 =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("Ladder_4", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.BACKWARD, 0.3);
					sleep(0.3);
					_this.Bot.HoldButton(BTN.FORWARD, 0.5);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.BACKWARD, 2);
					sleep(2);
				}
			},
		},
	},

	Allied_Command_Post_Built = function( trigger )
	{

		Map.Allied_Command_Post = true;

		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Allied_Command_Post" );

		SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Allied_Command_Post" );

		Util.MapDebugPrint( "^5Allied_Command_Post_Built" );
	},

	Allied_Command_Post_Planted = function( trigger )
	{

		Map.Allied_Command_Post_Dyno += 1;

		SetGoalRole("DEFUSE_Allied_Command_Post_.*", { ROLE.ATTACKER1, ROLE.DEFENDER2 });

		if ( Map.First_Allied_Supply_Stash_Dyno > 0 or Map.Second_Allied_Supply_Stash_Dyno > 0 or Map.Allied_Defensive_Barrier_Dyno > 0 or Map.Allied_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Command_Post_.*" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
		}

		Util.MapDebugPrint( "^5Allied_Command_Post_Planted" );
	},

	Allied_Command_Post_Defused = function( trigger )
	{

		Map.Allied_Command_Post_Dyno -= 1;

		Util.MapDebugPrint( "^5Allied_Command_Post_Defused" );
	},

	Allied_Command_Post_Destroyed = function( trigger )
	{

		Map.Allied_Command_Post = false;

		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_Command_Post" );

		SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Allied_Command_Post" );

		if ( Map.Allied_Command_Post_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Command_Post.*" );
		}

		Map.Allied_Command_Post_Dyno = 0;

		Util.MapDebugPrint( "^5Allied_Command_Post_Destroyed" );
	},

	Allied_Defensive_Barrier_Built = function( trigger )
	{

		Map.Allied_Defensive_Barrier = true;

		if ( Map.Allied_Main_Hatch )
		{
			SetGoalPriority( "PLANT_Allied_Main_Hatch", 0.84, TEAM.AXIS, CLASS.ENGINEER );
		}

		SetGoalPriority( "ATTACK_Allied_Base_.*", 0.5, TEAM.AXIS, 0 );

		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Allied_Defensive_Barrier" );

		SetAvailableMapGoals( TEAM.AXIS, true, {
			"PLANT_Allied_Defensive_Barrier",
			"PLANT_Allied_defensive_barrier_disg",
		});

		if ( Map.Axis_Engs_Inside == 0 )
		{
			if ( Map.First_Allied_Supply_Stash )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_First_Allied_Supply_Stash" );
			}

			if ( Map.Second_Allied_Supply_Stash )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Second_Allied_Supply_Stash" );
			}
		}

		Util.MapDebugPrint( "^5Allied_Defensive_Barrier_Built" );
	},

	Allied_Defensive_Barrier_Planted = function( trigger )
	{

		Map.Allied_Defensive_Barrier_Dyno += 1;

		if ( Map.First_Allied_Supply_Stash_Dyno > 0 or Map.Second_Allied_Supply_Stash_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Defensive_Barrier_.*" );
		}
		else
		{
			if ( Map.Allied_Main_Hatch_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Main_Hatch_.*" );
			}
			if ( Map.Allied_Command_Post_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Command_Post_.*" );
			}

			if ( Map.Allied_MG42_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_MG42_.*" );
			}

			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Defensive_Barrier_.*" );
		}

		Util.MapDebugPrint( "^5Allied_Defensive_Barrier_Planted" );
	},

	Allied_Defensive_Barrier_Defused = function( trigger )
	{

		Map.Allied_Defensive_Barrier_Dyno -= 1;

		if ( Map.Allied_Defensive_Barrier_Dyno == 0 )
		{
			if ( Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 )
			{
				if ( Map.Allied_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Allied_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
					}

					if ( Map.Allied_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5Allied_Defensive_Barrier_Defused" );
	},

	Allied_Defensive_Barrier_Destroyed = function( trigger )
	{

		Map.Allied_Defensive_Barrier = false;

		if ( Map.Allied_Main_Hatch )
		{
			SetGoalPriority( "PLANT_Allied_Main_Hatch", 0.81, TEAM.AXIS, CLASS.ENGINEER );	//default
		}

		if ( !Map.Axis_Defensive_Barrier )
		{
			SetGoalPriority( "ATTACK_Allied_Base_.*", 0.5, TEAM.AXIS, 0 );
		}
		else
		{
			SetGoalPriority( "ATTACK_Allied_Base_.*", 0.55, TEAM.AXIS, 0 );
		}

		if ( Map.Axis_Engs_Inside == 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_Defensive_Barrier" );
		}

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"PLANT_Allied_Defensive_Barrier",
			"PLANT_Allied_defensive_barrier_disg",
		});

		if ( Map.Allied_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DUFUSE_Allied_Defensive_Barrier.*" );
		}

		Map.Allied_Defensive_Barrier_Dyno = 0;

		if ( Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 )
		{
			if ( Map.Allied_Main_Hatch_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Main_Hatch_.*" );
			}
			else
			{
				if ( Map.Allied_Command_Post_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
				}

				if ( Map.Allied_MG42_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
				}
			}
		}

		Util.MapDebugPrint( "^5Allied_Defensive_Barrier_Destroyed" );

		sleep(1);	//time when blockwall switching from red to green

		if ( Map.First_Allied_Supply_Stash )
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_First_Allied_Supply_Stash" );
		}

		if ( Map.Second_Allied_Supply_Stash )
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Second_Allied_Supply_Stash" );
		}
	},

	Allied_MG42_Built = function( trigger )
	{

		Map.Allied_MG42 = true;

		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Allied_MG42" );

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"MOUNTMG42_Allied_MG42",
			"REPAIRMG42_Allied_MG42",
		});

		SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Allied_MG42" );

		Util.MapDebugPrint( "^5Allied_MG42_Built" );
	},

	Allied_MG42_Planted = function( trigger )
	{

		Map.Allied_MG42_Dyno += 1;

		SetGoalRole("DEFUSE_Allied_MG42_.*", ROLE.DEFENDER1);

		if ( Map.First_Allied_Supply_Stash_Dyno > 0 or Map.Second_Allied_Supply_Stash_Dyno > 0 or Map.Allied_Defensive_Barrier_Dyno > 0 or Map.Allied_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_MG42_.*" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
		}

		Util.MapDebugPrint( "^5Allied_MG42_Planted" );
	},

	Allied_MG42_Defused = function( trigger )
	{

		Map.Allied_MG42_Dyno -= 1;

		Util.MapDebugPrint( "^5Allied_MG42_Defused" );
	},

	Allied_MG42_Destroyed = function( trigger )
	{

		Map.Allied_MG42 = false;

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"MOUNTMG42_Allied_MG42",
			"REPAIRMG42_Allied_MG42",
		});

		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_MG42" );

		SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Allied_MG42" );

		if ( Map.Allied_MG42_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_MG42.*" );
		}

		Map.Allied_MG42_Dyno = 0;

		Util.MapDebugPrint( "^5Allied_MG42_Destroyed" );
	},

	Allied_Main_Hatch_Planted = function( trigger )
	{

		Map.Allied_Main_Hatch_Dyno += 1;

		if ( Map.First_Allied_Supply_Stash_Dyno > 0 or Map.Second_Allied_Supply_Stash_Dyno > 0 or Map.Allied_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Main_Hatch_.*" );
		}
		else
		{
			if ( Map.Allied_Command_Post_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Command_Post_.*" );
			}

			if ( Map.Allied_MG42_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_MG42_.*" );
			}

			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Main_Hatch_.*" );
		}

		Util.MapDebugPrint( "^5Allied_Main_Hatch_Planted" );
	},

	Allied_Main_Hatch_Defused = function( trigger )
	{

		Map.Allied_Main_Hatch_Dyno -= 1;

		if ( Map.Allied_Main_Hatch_Dyno == 0 )
		{
			if ( Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 and Map.Allied_Defensive_Barrier_Dyno == 0 )
			{
				if ( Map.Allied_Command_Post_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
				}

				if ( Map.Allied_MG42_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
				}
			}
		}

		Util.MapDebugPrint( "^5Allied_Main_Hatch_Defused" );
	},

	Allied_Main_Hatch_Destroyed = function( trigger )
	{

		Map.Allied_Main_Hatch = false;

		Wp.SetWaypointFlag( "Ally_Hatch", "closed", true );
		Wp.SetWaypointFlag( "Ally_Hatch_1", "climb", true );

		Util.EnableGoal( "ROUTE_Allied_Main_Hatch" );
		Util.EnableGoal( "ROUTE_Allied_Underground" );

		if ( !Map.Axis_Main_Hatch )
		{
			Util.EnableGoal( "ROUTE_Axis_Main_Hatch_1" );
			Util.EnableGoal( "ROUTE_Allied_Main_Hatch_1" );
			Util.EnableGoal( "ROUTE_Axis_Underground_1" );
			Util.EnableGoal( "ROUTE_Allied_Underground_1" );
		}

		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANTMINE_Allied_Base_.*" );

		if ( Map.Allied_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Main_Hatch.*" );
		}

		Map.Allied_Main_Hatch_Dyno = 0;

		if ( Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 and Map.Allied_Defensive_Barrier_Dyno == 0 )
		{
			if ( Map.Allied_Command_Post_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
			}

			if ( Map.Allied_MG42_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
			}
		}

		sleep(1);

		SetAvailableMapGoals( TEAM.AXIS, true, "SMOKEBOMB_Allied_Base_1" );

		Util.MapDebugPrint( "^5Allied_Main_Hatch_Destroyed" );
	},

	First_Allied_Supply_Stash_Planted = function( trigger )
	{

		Map.First_Allied_Supply_Stash_Dyno += 1;

		foreach ( id and bot in BotTable )
		{
			if ( bot.HasRole(ROLE.ATTACKER1) and bot.GetClass () == CLASS.ENGINEER and Map.forwardflag_Allies )
			{
				bot.ChangeSpawnPoint(2);
			}
		}

		if ( Map.Allied_Command_Post_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Command_Post_.*" );
		}

		if ( Map.Allied_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Defensive_Barrier_.*" );
		}

		if ( Map.Allied_MG42_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_MG42_.*" );
		}

		if ( Map.Allied_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Main_Hatch_.*" );
		}

		Util.MapDebugPrint( "^5First_Allied_Supply_Stash_Planted" );
	},

	First_Allied_Supply_Stash_Defused = function( trigger )
	{

		Map.First_Allied_Supply_Stash_Dyno -= 1;

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Allies and Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER1) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		if ( Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 )
		{
			if ( Map.Allied_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Allied_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Allied_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
					}

					if ( Map.Allied_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5First_Allied_Supply_Stash_Defused" );
	},

	First_Allied_Supply_Stash_Destroyed = function( trigger )
	{

		Map.First_Allied_Supply_Stash = false;

		Wp.SetWaypointFlag( "FASS_1", "jump", false );
		Wp.SetWaypointFlag( "FASS_2", "jump", false );
		Wp.SetWaypointFlag( "FASS_2", "sneak", false );
		Wp.SetWaypointFlag( "FASS_3", "jump", false );
		Wp.SetWaypointFlag( "FASS_4", "closed", true );
		Wp.SetWaypointFlag( "FASS_5", "closed", true );

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Allies and Map.Second_Allied_Supply_Stash_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER1) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		if ( Map.First_Allied_Supply_Stash_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_First_Allied_Supply_Stash.*" );
		}

		Map.First_Allied_Supply_Stash_Dyno = 0;

		if ( Map.Second_Allied_Supply_Stash_Dyno == 0 )
		{
			if ( Map.Allied_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Allied_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Allied_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
					}

					if ( Map.Allied_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5First_Allied_Supply_Stash_Destroyed" );
	},

	Second_Allied_Supply_Stash_Planted = function( trigger )
	{

		Map.Second_Allied_Supply_Stash_Dyno += 1;

		foreach ( id and bot in BotTable )
		{
			if ( bot.HasRole(ROLE.ATTACKER1) and bot.GetClass () == CLASS.ENGINEER and Map.forwardflag_Allies )
			{
				bot.ChangeSpawnPoint(2);
			}
		}

		if ( Map.Allied_Command_Post_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Command_Post_.*" );
		}

		if ( Map.Allied_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Defensive_Barrier_.*" );
		}

		if ( Map.Allied_MG42_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_MG42_.*" );
		}

		if ( Map.Allied_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Allied_Main_Hatch_.*" );
		}

		Util.MapDebugPrint( "^5Second_Allied_Supply_Stash_Planted" );
	},

	Second_Allied_Supply_Stash_Defused = function( trigger )
	{

		Map.Second_Allied_Supply_Stash_Dyno -= 1;

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Allies and Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER1) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		if ( Map.First_Allied_Supply_Stash_Dyno == 0 and Map.Second_Allied_Supply_Stash_Dyno == 0 )
		{
			if ( Map.Allied_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Allied_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Allied_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
					}

					if ( Map.Allied_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5Second_Allied_Supply_Stash_Defused" );
	},

	Second_Allied_Supply_Stash_Destroyed = function( trigger )
	{

		Map.Second_Allied_Supply_Stash = false;

		Wp.SetWaypointFlag( "SASS_1", "jump", false );
		Wp.SetWaypointFlag( "SASS_2", "closed", true );
		Wp.SetWaypointFlag( "SASS_3", "jump", false );
		Wp.SetWaypointFlag( "SASS_4", "closed", true );

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Allies and Map.First_Allied_Supply_Stash_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER1) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		if ( Map.Second_Allied_Supply_Stash_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Second_Allied_Supply_Stash.*" );
		}

		Map.Second_Allied_Supply_Stash_Dyno = 0;

		if ( Map.First_Allied_Supply_Stash_Dyno == 0 )
		{
			if ( Map.Allied_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Allied_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Allied_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_Command_Post_.*" );
					}

					if ( Map.Allied_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Allied_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5Second_Allied_Supply_Stash_Destroyed" );
	},

	Allied_Window_Exploded = function( trigger )
	{

		Map.Window_1 = false;

		Util.MapDebugPrint( "^5Allied_Window_Exploded" );
	},

	AxisEngsInside =
	{
		Name = "AxisEngsInside",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.Axis_Engs_Inside += 1;

					if ( Map.First_Allied_Supply_Stash )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_First_Allied_Supply_Stash" );
					}

					if ( Map.Second_Allied_Supply_Stash )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Second_Allied_Supply_Stash" );
					}

					if ( !Map.Allied_Defensive_Barrier )
					{
						SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Allied_Defensive_Barrier" );
					}

					SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Supply_Stash_.*" );

					Util.MapDebugPrint( "^5Axis engineer entered" );
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.Axis_Engs_Inside -= 1;

					Util.MapDebugPrint( "^5Axis engineer left" );

					if ( Map.Axis_Engs_Inside == 0 )
					{
						if ( !Map.Allied_Defensive_Barrier )
						{
							SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_Defensive_Barrier" );
						}
						else
						{
							if ( Map.First_Allied_Supply_Stash )
							{
								SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_First_Allied_Supply_Stash" );
							}

							if ( Map.Second_Allied_Supply_Stash )
							{
								SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Second_Allied_Supply_Stash" );
							}
						}

						SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Supply_Stash_.*" );

						Util.MapDebugPrint( "^5Axis engineers are not inside" );
					}
				}
			}
		},
	},

	Axis_Command_Post_Built = function( trigger )
	{

		Map.Axis_Command_Post = true;

		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Axis_Command_Post" );

		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Axis_Command_Post" );

		Util.MapDebugPrint( "^5Axis_Command_Post_Built" );
	},

	Axis_Command_Post_Planted = function( trigger )
	{

		Map.Axis_Command_Post_Dyno += 1;

		SetGoalRole("DEFUSE_Axis_Command_Post_.*", { ROLE.ATTACKER, ROLE.ATTACKER2 });

		if ( Map.First_Axis_Secret_Weapon_Dyno > 0 or Map.Second_Axis_Secret_Weapon_Dyno > 0 or Map.Axis_Defensive_Barrier_Dyno > 0 or Map.Axis_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Command_Post_.*" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
		}

		Util.MapDebugPrint( "^5Axis_Command_Post_Planted" );
	},

	Axis_Command_Post_Defused = function( trigger )
	{

		Map.Axis_Command_Post_Dyno -= 1;

		Util.MapDebugPrint( "^5Axis_Command_Post_Defused" );
	},

	Axis_Command_Post_Destroyed = function( trigger )
	{

		Map.Axis_Command_Post = false;

		SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_Command_Post" );

		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Axis_Command_Post" );

		if ( Map.Axis_Command_Post_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Command_Post.*" );
		}

		Map.Axis_Command_Post_Dyno = 0;

		Util.MapDebugPrint( "^5Axis_Command_Post_Destroyed" );
	},

	Axis_Defensive_Barrier_Built = function( trigger )
	{

		Map.Axis_Defensive_Barrier = true;

		if ( Map.Axis_Main_Hatch )
		{
			SetGoalPriority( "PLANT_Axis_Main_Hatch", 0.84, TEAM.ALLIES, CLASS.ENGINEER );
		}

		SetGoalPriority( "ATTACK_Axis_Base_.*", 0.5, TEAM.ALLIES, 0 );

		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Axis_Defensive_Barrier" );

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"PLANT_Axis_Defensive_Barrier",
			"PLANT_Axis_defensive_barrier_disg",
		});

		if ( Map.Allied_Engs_Inside == 0 )
		{
			if ( Map.First_Axis_Secret_Weapon )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_First_Axis_Secret_Weapon" );
			}

			if ( Map.Second_Axis_Secret_Weapon )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Second_Axis_Secret_Weapon" );
			}
		}

		Util.MapDebugPrint( "^5Axis_Defensive_Barrier_Built" );
	},

	Axis_Defensive_Barrier_Planted = function( trigger )
	{

		Map.Axis_Defensive_Barrier_Dyno += 1;

		if ( Map.First_Axis_Secret_Weapon_Dyno > 0 or Map.Second_Axis_Secret_Weapon_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Defensive_Barrier_.*" );
		}
		else
		{
			if ( Map.Axis_Main_Hatch_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Main_Hatch_.*" );
			}
			if ( Map.Axis_Command_Post_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Command_Post_.*" );
			}

			if ( Map.Axis_MG42_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_MG42_.*" );
			}

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

		Util.MapDebugPrint( "^5Axis_Defensive_Barrier_Planted" );
	},

	Axis_Defensive_Barrier_Defused = function( trigger )
	{

		Map.Axis_Defensive_Barrier_Dyno -= 1;

		if ( Map.Allied_Defensive_Barrier_Dyno == 0 )
		{
			if ( Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 )
			{
				if ( Map.Axis_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Axis_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
					}

					if ( Map.Axis_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5Axis_Defensive_Barrier_Defused" );
	},

	Axis_Defensive_Barrier_Destroyed = function( trigger )
	{

		Map.Axis_Defensive_Barrier = false;

		if ( Map.Axis_Main_Hatch )
		{
			SetGoalPriority( "PLANT_Axis_Main_Hatch", 0.81, TEAM.ALLIES, CLASS.ENGINEER );	//default
		}

		if ( !Map.Allied_Defensive_Barrier )
		{
			SetGoalPriority( "ATTACK_Axis_Base_.*", 0.5, TEAM.ALLIES, 0 );
		}
		else
		{
			SetGoalPriority( "ATTACK_Axis_Base_.*", 0.55, TEAM.ALLIES, 0 );
		}

		if ( Map.Allied_Engs_Inside == 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_Defensive_Barrier" );
		}

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"PLANT_Axis_Defensive_Barrier",
			"PLANT_Axis_defensive_barrier_disg",
		});

		if ( Map.Axis_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Defensive_Barrier.*" );
		}

		Map.Axis_Defensive_Barrier_Dyno = 0;

		if ( Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 )
		{
			if ( Map.Axis_Main_Hatch_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Main_Hatch_.*" );
			}
			else
			{
				if ( Map.Axis_Command_Post_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
				}

				if ( Map.Axis_MG42_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
				}
			}
		}

		Util.MapDebugPrint( "^5Axis_Defensive_Barrier_Destroyed" );

		sleep(1);	//time when blockwall switching from red to green

		if ( Map.First_Axis_Secret_Weapon )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_First_Axis_Secret_Weapon" );
		}

		if ( Map.Second_Axis_Secret_Weapon )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Second_Axis_Secret_Weapon" );
		}
	},

	Axis_MG42_Built = function( trigger )
	{

		Map.Axis_MG42 = true;

		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Axis_MG42" );

		SetAvailableMapGoals( TEAM.AXIS, true, {
			"MOUNTMG42_Axis_MG42",
			"REPAIRMG42_Axis_MG42",
		});

		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Axis_MG42" );

		Util.MapDebugPrint( "^5Axis_MG42_Built" );
	},

	Axis_MG42_Planted = function( trigger )
	{

		Map.Axis_MG42_Dyno += 1;

		SetGoalRole("DEFUSE_Axis_MG42_.*", ROLE.DEFENDER);

		if ( Map.First_Axis_Secret_Weapon_Dyno > 0 or Map.Second_Axis_Secret_Weapon_Dyno > 0 or Map.Axis_Defensive_Barrier_Dyno > 0 or Map.Axis_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_MG42_.*" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
		}

		Util.MapDebugPrint( "^5Axis_MG42_Planted" );
	},

	Axis_MG42_Defused = function( trigger )
	{

		Map.Axis_MG42_Dyno -= 1;

		Util.MapDebugPrint( "^5Axis_MG42_Defused" );
	},

	Axis_MG42_Destroyed = function( trigger )
	{

		Map.Axis_MG42 = false;

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"MOUNTMG42_Axis_MG42",
			"REPAIRMG42_Axis_MG42",
		});

		SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_MG42" );

		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Axis_MG42" );

		if ( Map.Axis_MG42_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_MG42.*" );
		}

		Map.Axis_MG42_Dyno = 0;

		Util.MapDebugPrint( "^5Axis_MG42_Destroyed" );
	},

	Axis_Main_Hatch_Planted = function( trigger )
	{

		Map.Axis_Main_Hatch_Dyno += 1;

		if ( Map.First_Axis_Secret_Weapon_Dyno > 0 or Map.Second_Axis_Secret_Weapon_Dyno > 0 or Map.Axis_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Main_Hatch_.*" );
		}
		else
		{
			if ( Map.Axis_Command_Post_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Command_Post_.*" );
			}

			if ( Map.Axis_MG42_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_MG42_.*" );
			}

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

		Util.MapDebugPrint( "^5Axis_Main_Hatch_Planted" );
	},

	Axis_Main_Hatch_Defused = function( trigger )
	{

		Map.Axis_Main_Hatch_Dyno -= 1;

		if ( Map.Axis_Main_Hatch_Dyno == 0 )
		{
			if ( Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 and Map.Axis_Defensive_Barrier_Dyno == 0 )
			{
				if ( Map.Axis_Command_Post_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
				}

				if ( Map.Axis_MG42_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
				}
			}
		}

		Util.MapDebugPrint( "^5Axis_Main_Hatch_Defused" );
	},

	Axis_Main_Hatch_Destroyed = function( trigger )
	{

		Map.Axis_Main_Hatch = false;

		Wp.SetWaypointFlag( "Axis_Hatch", "closed", true );
		Wp.SetWaypointFlag( "Axis_Hatch_1", "climb", true );

		Util.EnableGoal( "ROUTE_Axis_Main_Hatch" );
		Util.EnableGoal( "ROUTE_Axis_Underground" );

		if ( !Map.Allied_Main_Hatch )
		{
			Util.EnableGoal( "ROUTE_Axis_Main_Hatch_1" );
			Util.EnableGoal( "ROUTE_Allied_Main_Hatch_1" );
			Util.EnableGoal( "ROUTE_Axis_Underground_1" );
			Util.EnableGoal( "ROUTE_Allied_Underground_1" );
		}

		SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_Axis_Base_.*" );

		if ( Map.Axis_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Main_Hatch.*" );
		}

		Map.Axis_Main_Hatch_Dyno = 0;

		if ( Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 and Map.Axis_Defensive_Barrier_Dyno == 0 )
		{
			if ( Map.Axis_Command_Post_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
			}

			if ( Map.Axis_MG42_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
			}
		}

		sleep(1);

		SetAvailableMapGoals( TEAM.ALLIES, true, "SMOKEBOMB_Axis_Base_1" );

		Util.MapDebugPrint( "^5Axis_Main_Hatch_Destroyed" );
	},

	First_Axis_Secret_Weapon_Planted = function( trigger )
	{

		Map.First_Axis_Secret_Weapon_Dyno += 1;

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Axis and bot.HasRole(ROLE.ATTACKER) and bot.GetClass () == CLASS.ENGINEER )
			{
				bot.ChangeSpawnPoint(1);
			}
		}

		if ( Map.Axis_Command_Post_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Command_Post_.*" );
		}

		if ( Map.Axis_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Defensive_Barrier_.*" );
		}

		if ( Map.Axis_MG42_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_MG42_.*" );
		}

		if ( Map.Axis_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Main_Hatch_.*" );
		}

		Util.MapDebugPrint( "^5First_Axis_Secret_Weapon_Planted" );
	},

	First_Axis_Secret_Weapon_Defused = function( trigger )
	{

		Map.First_Axis_Secret_Weapon_Dyno -= 1;

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Axis and Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		if ( Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 )
		{
			if ( Map.Axis_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Axis_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Axis_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
					}

					if ( Map.Axis_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5First_Axis_Secret_Weapon_Defused" );
	},

	First_Axis_Secret_Weapon_Destroyed = function( trigger )
	{

		Map.First_Axis_Secret_Weapon = false;

		if ( Map.First_Axis_Secret_Weapon_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_First_Axis_Secret_Weapon.*" );
		}

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Axis and Map.Second_Axis_Secret_Weapon_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		Map.First_Axis_Secret_Weapon_Dyno = 0;

		if ( Map.Second_Axis_Secret_Weapon_Dyno == 0 )
		{
			if ( Map.Axis_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Axis_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Axis_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
					}

					if ( Map.Axis_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5First_Axis_Secret_Weapon_Destroyed" );
	},

	Second_Axis_Secret_Weapon_Planted = function( trigger )
	{

		Map.Second_Axis_Secret_Weapon_Dyno += 1;

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Axis and bot.HasRole(ROLE.ATTACKER) and bot.GetClass () == CLASS.ENGINEER )
			{
				bot.ChangeSpawnPoint(1);
			}
		}

		if ( Map.Axis_Command_Post_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Command_Post_.*" );
		}

		if ( Map.Axis_Defensive_Barrier_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Defensive_Barrier_.*" );
		}

		if ( Map.Axis_MG42_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_MG42_.*" );
		}

		if ( Map.Axis_Main_Hatch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_Main_Hatch_.*" );
		}

		Util.MapDebugPrint( "^5Second_Axis_Secret_Weapon_Planted" );
	},

	Second_Axis_Secret_Weapon_Defused = function( trigger )
	{

		Map.Second_Axis_Secret_Weapon_Dyno -= 1;

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Axis and Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		if ( Map.First_Axis_Secret_Weapon_Dyno == 0 and Map.Second_Axis_Secret_Weapon_Dyno == 0 )
		{
			if ( Map.Axis_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Axis_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Axis_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
					}

					if ( Map.Axis_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5Second_Axis_Secret_Weapon_Defused" );
	},

	Second_Axis_Secret_Weapon_Destroyed = function( trigger )
	{

		Map.Second_Axis_Secret_Weapon = false;

		Wp.SetWaypointFlag( "SASW", "closed", true );

		if ( Map.Second_Axis_Secret_Weapon_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Second_Axis_Secret_Weapon.*" );
		}

		foreach ( id and bot in BotTable )
		{
			if ( Map.forwardflag_Axis and Map.First_Axis_Secret_Weapon_Dyno == 0 )
			{
				if ( bot.HasRole(ROLE.ATTACKER) and bot.GetClass () == CLASS.ENGINEER )
				{
					bot.ChangeSpawnPoint(0);
				}
			}
		}

		Map.Second_Axis_Secret_Weapon_Dyno = 0;

		if ( Map.First_Axis_Secret_Weapon_Dyno == 0 )
		{
			if ( Map.Axis_Defensive_Barrier_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Defensive_Barrier_.*" );
			}
			else
			{
				if ( Map.Axis_Main_Hatch_Dyno > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Main_Hatch_.*" );
				}
				else
				{
					if ( Map.Axis_Command_Post_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_Command_Post_.*" );
					}

					if ( Map.Axis_MG42_Dyno > 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Axis_MG42_.*" );
					}
				}
			}
		}

		Util.MapDebugPrint( "^5Second_Axis_Secret_Weapon_Destroyed" );
	},

	Axis_Window_Exploded = function( trigger )
	{

		Map.Window_2 = false;

		Util.MapDebugPrint( "^5Axis_Window_Exploded" );
	},

	AlliedEngsInside =
	{
		Name = "AlliedEngsInside",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.Allied_Engs_Inside += 1;

					if ( Map.First_Axis_Secret_Weapon )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_First_Axis_Secret_Weapon" );
					}

					if ( Map.Second_Axis_Secret_Weapon )
					{
						SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Second_Axis_Secret_Weapon" );
					}

					if ( !Map.Axis_Defensive_Barrier )
					{
						SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Axis_Defensive_Barrier" );
					}

					SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Secret_Weapon_.*" );

					Util.MapDebugPrint( "^5Allied engineer entered" );
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.Allied_Engs_Inside -= 1;

					Util.MapDebugPrint( "^5Allied engineer left" );

					if ( Map.Allied_Engs_Inside == 0 )
					{
						if ( !Map.Axis_Defensive_Barrier )
						{
							SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_Defensive_Barrier" );
						}
						else
						{
							if ( Map.First_Axis_Secret_Weapon )
							{
								SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_First_Axis_Secret_Weapon" );
							}

							if ( Map.Second_Axis_Secret_Weapon )
							{
								SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Second_Axis_Secret_Weapon" );
							}
						}

						SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Secret_Weapon_.*" );

						Util.MapDebugPrint( "^5Allied engineers are not inside" );
					}
				}
			}
		},
	},

	forwardflag_Axis_Captured = function( trigger )
	{

		Map.forwardflag_Axis = true;
		Map.forwardflag_Allies = false;

		Util.SetMaxUsers( 1, "CHECKPOINT_.*" );

		foreach ( id and bot in BotTable )
		{
			if ( bot.HasRole(ROLE.ATTACKER) or bot.HasRole(ROLE.ATTACKER2) )
			{
				bot.ChangeSpawnPoint(0);
			}

			if ( bot.GetClass () == CLASS.ENGINEER )
			{
				if ( Map.First_Axis_Secret_Weapon_Dyno != 0 or Map.Second_Axis_Secret_Weapon_Dyno != 0 )
				{
					bot.ChangeSpawnPoint(1);
				}
			}
		}

		Util.MapDebugPrint( "^5forwardflag_Axis_Captured" );
	},

	forwardflag_Allies_Captured = function( trigger )
	{

		Map.forwardflag_Axis = false;
		Map.forwardflag_Allies = true;

		Util.SetMaxUsers( 1, "CHECKPOINT_.*" );

		foreach ( id and bot in BotTable )
		{
			if ( bot.HasRole(ROLE.ATTACKER1) or bot.HasRole(ROLE.DEFENDER2) )
			{
				bot.ChangeSpawnPoint(0);
			}

			if ( bot.GetClass () == CLASS.ENGINEER )
			{
				if ( Map.First_Allied_Supply_Stash_Dyno != 0 or Map.Second_Allied_Supply_Stash_Dyno != 0 )
				{
					bot.ChangeSpawnPoint(2);
				}
			}
		}

		Util.MapDebugPrint( "^5forwardflag_Allies_Captured" );
	},
};

global OnMapLoad = function()
{

	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built );
	OnTrigger( "Allied team has built the Allied Defensive Barrier!", Map.Allied_Defensive_Barrier_Built );
	OnTrigger( "The Allied team has built the Allied MG-42!", Map.Allied_MG42_Built );
	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
	OnTrigger( "Axis team has built the Axis Defensive Barrier!", Map.Axis_Defensive_Barrier_Built );
	OnTrigger( "The Axis team has built the Axis MG-42!", Map.Axis_MG42_Built );

	OnTrigger( "Planted at the Allied Command Post.", Map.Allied_Command_Post_Planted );
	OnTrigger( "Planted at Allied Command Post.", Map.Allied_Command_Post_Planted );	//Nitmod
	OnTrigger( "Planted at the Allied Defensive Barrier.", Map.Allied_Defensive_Barrier_Planted );
	OnTrigger( "Planted at Allied Defensive Barrier.", Map.Allied_Defensive_Barrier_Planted );	//Nitmod
	OnTrigger( "Planted at the Allied MG42.", Map.Allied_MG42_Planted );
	OnTrigger( "Planted at Allied MG42.", Map.Allied_MG42_Planted );	//Nitmod
	OnTrigger( "Planted at the Allied Main Hatch.", Map.Allied_Main_Hatch_Planted );
	OnTrigger( "Planted at Allied Main Hatch.", Map.Allied_Main_Hatch_Planted );	//Nitmod
	OnTrigger( "Planted at the Axis Command Post.", Map.Axis_Command_Post_Planted );
	OnTrigger( "Planted at Axis Command Post.", Map.Axis_Command_Post_Planted );	//Nitmod
	OnTrigger( "Planted at the Axis Defensive Barrier.", Map.Axis_Defensive_Barrier_Planted );
	OnTrigger( "Planted at Axis Defensive Barrier.", Map.Axis_Defensive_Barrier_Planted );	//Nitmod
	OnTrigger( "Planted at the Axis MG42.", Map.Axis_MG42_Planted );
	OnTrigger( "Planted at Axis MG42.", Map.Axis_MG42_Planted );	//Nitmod
	OnTrigger( "Planted at the Axis Main Hatch.", Map.Axis_Main_Hatch_Planted );
	OnTrigger( "Planted at Axis Main Hatch.", Map.Axis_Main_Hatch_Planted );	//Nitmod
	OnTrigger( "Planted at the First Allied Supply Stash.", Map.First_Allied_Supply_Stash_Planted );
	OnTrigger( "Planted at First Allied Supply Stash.", Map.First_Allied_Supply_Stash_Planted );	//Nitmod
	OnTrigger( "Planted at the First Axis Secret Weapon.", Map.First_Axis_Secret_Weapon_Planted );
	OnTrigger( "Planted at First Axis Secret Weapon.", Map.First_Axis_Secret_Weapon_Planted );	//Nitmod
	OnTrigger( "Planted at the Second Allied Supply Stash.", Map.Second_Allied_Supply_Stash_Planted );
	OnTrigger( "Planted at Second Allied Supply Stash.", Map.Second_Allied_Supply_Stash_Planted );	//Nitmod
	OnTrigger( "Planted at the Second Axis Secret Weapon.", Map.Second_Axis_Secret_Weapon_Planted );
	OnTrigger( "Planted at Second Axis Secret Weapon.", Map.Second_Axis_Secret_Weapon_Planted );	//Nitmod

	OnTrigger( "Defused at the Allied Command Post.", Map.Allied_Command_Post_Defused );
	OnTrigger( "Defused at Allied Command Post.", Map.Allied_Command_Post_Defused );	//Nitmod
	OnTrigger( "Defused at the Allied Defensive Barrier.", Map.Allied_Defensive_Barrier_Defused );
	OnTrigger( " Defused at Allied Defensive Barrier.", Map.Allied_Defensive_Barrier_Defused );	//Nitmod
	OnTrigger( "Defused at the Allied MG42.", Map.Allied_MG42_Defused );
	OnTrigger( "Defused at Allied MG42.", Map.Allied_MG42_Defused );	//Nitmod
	OnTrigger( "Defused at the Allied Main Hatch.", Map.Allied_Main_Hatch_Defused );
	OnTrigger( "Defused at Allied Main Hatch.", Map.Allied_Main_Hatch_Defused );	//Nitmod
	OnTrigger( "Defused at the Axis Command Post.", Map.Axis_Command_Post_Defused );
	OnTrigger( "Defused at Axis Command Post.", Map.Axis_Command_Post_Defused );	//Nitmod
	OnTrigger( "Defused at the Axis Defensive Barrier.", Map.Axis_Defensive_Barrier_Defused );
	OnTrigger( "Defused at Axis Defensive Barrier.", Map.Axis_Defensive_Barrier_Defused );	//Nitmod
	OnTrigger( "Defused at the Axis MG42.", Map.Axis_MG42_Defused );
	OnTrigger( "Defused at Axis MG42.", Map.Axis_MG42_Defused );	//Nitmod
	OnTrigger( "Defused at the Axis Main Hatch.", Map.Axis_Main_Hatch_Defused );
	OnTrigger( "Defused at Axis Main Hatch.", Map.Axis_Main_Hatch_Defused );	//Nitmod
	OnTrigger( "Defused at the First Allied Supply Stash.", Map.First_Allied_Supply_Stash_Defused );
	OnTrigger( "Defused at First Allied Supply Stash.", Map.First_Allied_Supply_Stash_Defused );	//Nitmod
	OnTrigger( "Defused at the First Axis Secret Weapon.", Map.First_Axis_Secret_Weapon_Defused );
	OnTrigger( "Defused at First Axis Secret Weapon.", Map.First_Axis_Secret_Weapon_Defused );	//Nitmod
	OnTrigger( "Defused at the Second Allied Supply Stash.", Map.Second_Allied_Supply_Stash_Defused );
	OnTrigger( "Defused at Second Allied Supply Stash.", Map.Second_Allied_Supply_Stash_Defused );	//Nitmod
	OnTrigger( "Defused at the Second Axis Secret Weapon.", Map.Second_Axis_Secret_Weapon_Defused );
	OnTrigger( "Defused at Second Axis Secret Weapon.", Map.Second_Axis_Secret_Weapon_Defused );	//Nitmod

	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "Axis team has destroyed the Allied Defensive Barrier!", Map.Allied_Defensive_Barrier_Destroyed );
	OnTrigger( "The Axis team has destroyed the Allied MG-42!", Map.Allied_MG42_Destroyed );
	OnTrigger( "Axis have destroyed the Allied Main Hatch!", Map.Allied_Main_Hatch_Destroyed );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
	OnTrigger( "Allied team has destroyed the Axis Defensive Barrier!", Map.Axis_Defensive_Barrier_Destroyed );
	OnTrigger( "The Allied team has destroyed the Axis MG-42!", Map.Axis_MG42_Destroyed );
	OnTrigger( "Allies have destroyed the Axis Main Hatch!", Map.Axis_Main_Hatch_Destroyed );
	OnTrigger( "Axis have destroyed the First Allied Supply Stash!", Map.First_Allied_Supply_Stash_Destroyed );
	OnTrigger( "Allies have destroyed the First Axis Secret Weapon!", Map.First_Axis_Secret_Weapon_Destroyed );
	OnTrigger( "Axis have destroyed the Second Allied Supply Stash!", Map.Second_Allied_Supply_Stash_Destroyed );
	OnTrigger( "Allies have destroyed the Second Axis Secret Weapon!", Map.Second_Axis_Secret_Weapon_Destroyed );

	OnTrigger( "Axis have captured the Forward Spawn!", Map.forwardflag_Axis_Captured );
	OnTrigger( "Allies have captured the Forward Spawn!", Map.forwardflag_Allies_Captured );

	OnTrigger( "GRENADE_Allied_Window Exploded.", Map.Allied_Window_Exploded );
	OnTrigger( "GRENADE_Axis_Window Exploded.", Map.Axis_Window_Exploded );

	Util.DisableGoal( ".*", true );

	Util.EnableGoal( {
		"ROUTE_.*",
		"CHECKPOINT_forwardflag",
		"AMMOCAB_.*",
		"HEALTHCAB_.*",
	});

	Util.DisableGoal( "ROUTE_Axis_Main_Hatch" );
	Util.DisableGoal( "ROUTE_Allied_Main_Hatch" );
	Util.DisableGoal( "ROUTE_Axis_Main_Hatch_1" );
	Util.DisableGoal( "ROUTE_Allied_Main_Hatch_1" );
	Util.DisableGoal( "ROUTE_Axis_Underground_1" );
	Util.DisableGoal( "ROUTE_Allied_Underground_1" );

	ClearGoalRole(".*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2 });

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"BUILD_Allied_MG42",
		"BUILD_Allied_Defensive_Barrier",
		"BUILD_Allied_Command_Post",
		"PLANT_Axis_Main_Hatch",
		"PLANT_First_Axis_Secret_Weapon",
		"PLANT_Second_Axis_Secret_Weapon",
		"MOUNTMG42_Allied_Main_Hatch",
		"REPAIRMG42_Allied_Main_Hatch",
		"DEFEND_Allied_Base_.*",
		"ATTACK_Axis_Base_.*",
		"CALLARTILLERY_Allied_Bunker",
		"ARTILLERY_S_Axis_Bunker",
	});

	SetAvailableMapGoals( TEAM.AXIS, true, {
		"BUILD_Axis_MG42",
		"BUILD_Axis_Defensive_Barrier",
		"BUILD_Axis_Command_Post",
		"PLANT_Allied_Main_Hatch",
		"PLANT_First_Allied_Supply_Stash",
		"PLANT_Second_Allied_Supply_Stash",
		"MOUNTMG42_Axis_Main_Hatch",
		"REPAIRMG42_Axis_Main_Hatch",
		"ATTACK_Allied_Base_.*",
		"DEFEND_Axis_Base_.*",
		"CALLARTILLERY_Axis_Bunker",
		"ARTILLERY_S_Allied_Bunker",
	});

	SetGoalPriority( "PLANT_Allied_Defensive_Barrier", 0.83, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Allied_Defensive_Barrier", 0.82, TEAM.AXIS, CLASS.COVERTOPS );
	SetGoalPriority( "PLANT_Allied_defensive_barrier_disg", 0.83, TEAM.AXIS, CLASS.COVERTOPS );
	SetGoalPriority( "PLANT_First_Allied_Supply_Stash", 0.82, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Second_Allied_Supply_Stash", 0.82, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Axis_Command_Post", 0.81, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Axis_MG42", 0.89, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Allied_MG42", 0.8, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Allied_Command_Post", 0.8, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "MOUNTMG42_Axis_Main_Hatch", 0.5, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Secret_Weapon_.*", 0.75, TEAM.AXIS, 0 );
	SetGoalPriority( "PLANT_Allied_Main_Hatch", 0.84, TEAM.AXIS, CLASS.ENGINEER );

	SetGoalPriority( "PLANT_Axis_Defensive_Barrier", 0.83, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Axis_Defensive_Barrier", 0.82, TEAM.ALLIES, CLASS.COVERTOPS );
	SetGoalPriority( "PLANT_Axis_defensive_barrier_disg", 0.83, TEAM.ALLIES, CLASS.COVERTOPS );
	SetGoalPriority( "PLANT_First_Axis_Secret_Weapon", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Second_Axis_Secret_Weapon", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Allied_Command_Post", 0.81, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Allied_MG42", 0.89, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Axis_MG42", 0.8, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Axis_Command_Post", 0.8, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "MOUNTMG42_Allied_Main_Hatch", 0.5, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Supply_Stash_.*", 0.75, TEAM.ALLIES, 0 );
	SetGoalPriority( "PLANT_Axis_Main_Hatch", 0.84, TEAM.ALLIES, CLASS.ENGINEER );

	SetGoalPriority( "PLANTMINE_.*", 0.82, 0, CLASS.ENGINEER );
	SetGoalPriority( "REPAIRMG42_.*", 0.8, 0, CLASS.ENGINEER );
	SetGoalPriority( "SMOKEBOMB_.*", 0.83, 0, CLASS.COVERTOPS );
	SetGoalPriority( "ATTACK_.*", 0.55, 0, 0 );

	Util.SetGoalPosition(-573.147, -331.182, 168.264, "BUILD_Allied_Command_Post");
	Util.SetGoalPosition(577.072, 351.855, 168.125, "BUILD_Axis_Command_Post");


	Util.LimitToClass("PLANT_Axis_defensive_barrier_disg", TEAM.ALLIES, CLASS.COVERTOPS);
	SetGoalRole("PLANT_Axis_defensive_barrier_disg", ROLE.INFILTRATOR);

	Util.LimitToClass("PLANT_Allied_defensive_barrier_disg", TEAM.AXIS, CLASS.COVERTOPS);
	SetGoalRole("PLANT_Allied_defensive_barrier_disg", ROLE.INFILTRATOR);

	Util.AddUseWp( "BUILD_Axis_Defensive_Barrier", "Axis_Defensive_Barrier_Build_WP" );
	Util.AddUseWp( "PLANT_First_Axis_Secret_Weapon", "First_Axis_Secret_Weapon_Plant_WP" );
	Util.AddUseWp( "PLANT_Second_Axis_Secret_Weapon", "Second_Axis_Secret_Weapon_Plant_WP" );
	Util.AddUseWp( "PLANT_First_Allied_Supply_Stash", "First_Allied_Supply_Stash_Plant_WP" );
	Util.AddUseWp( "PLANT_Second_Allied_Supply_Stash", "Second_Allied_Supply_Stash_Plant_WP" );

	//Both teams roles
	SetGoalRole(".*_Command_Post", ROLE.ATTACKER2);
	SetGoalRole(".*_Command_Post", ROLE.DEFENDER2);
	SetGoalRole("CHECKPOINT_forwardflag", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.DEFENDER2 });

	//Allied roles
	SetGoalRole("ATTACK_Axis_Base_.*", { ROLE.ATTACKER1, ROLE.DEFENDER2 });
	SetGoalRole("PLANT_Axis_Defensive_Barrier", { ROLE.ATTACKER1, ROLE.DEFENDER2 });
	SetGoalRole("PLANT_First_Axis_Secret_Weapon", { ROLE.ATTACKER1, ROLE.DEFENDER2 });
	SetGoalRole("PLANT_Second_Axis_Secret_Weapon", { ROLE.ATTACKER1, ROLE.DEFENDER2 });
	SetGoalRole("PLANT_Axis_MG42", { ROLE.ATTACKER1, ROLE.DEFENDER2 });
	SetGoalRole("SMOKEBOMB_Axis_Base_1", { ROLE.ATTACKER1, ROLE.DEFENDER2 });
	SetGoalRole("PLANT_Axis_Main_Hatch", { ROLE.ATTACKER1, ROLE.DEFENDER2 });

	SetGoalRole("DEFEND_Allied_Base_.*", ROLE.DEFENDER1);
	SetGoalRole("PLANTMINE_Allied_Base_.*", ROLE.DEFENDER1);
	SetGoalRole("MOUNTMG42_Allied_MG42", ROLE.DEFENDER1);
	SetGoalRole("REPAIRMG42_Allied_MG42", ROLE.DEFENDER1);
	SetGoalRole("MOUNTMG42_Allied_Main_Hatch", ROLE.DEFENDER1);
	SetGoalRole("REPAIRMG42_Allied_Main_Hatch", ROLE.DEFENDER1);
	SetGoalRole("CALLARTILLERY_Allied_Bunker", ROLE.DEFENDER1);
	SetGoalRole("ARTILLERY_S_Axis_Bunker", ROLE.DEFENDER1);
	SetGoalRole("DEFEND_Supply_Stash_.*", ROLE.DEFENDER1);
	SetGoalRole("BUILD_Allied_Defensive_Barrier", { ROLE.DEFENDER1, ROLE.DEFENDER2 });
	SetGoalRole("BUILD_Allied_MG42", { ROLE.DEFENDER1, ROLE.DEFENDER2 });

	//Axis roles
	SetGoalRole("ATTACK_Allied_Base_.*", { ROLE.ATTACKER, ROLE.ATTACKER2 });
	SetGoalRole("PLANT_Allied_Defensive_Barrier", { ROLE.ATTACKER, ROLE.ATTACKER2 });
	SetGoalRole("PLANT_First_Allied_Supply_Stash", { ROLE.ATTACKER, ROLE.ATTACKER2 });
	SetGoalRole("PLANT_Second_Allied_Supply_Stash", { ROLE.ATTACKER, ROLE.ATTACKER2 });
	SetGoalRole("PLANT_Allied_MG42", { ROLE.ATTACKER, ROLE.ATTACKER2 });
	SetGoalRole("SMOKEBOMB_Allied_Base_1", { ROLE.ATTACKER, ROLE.ATTACKER2 });
	SetGoalRole("PLANT_Allied_Main_Hatch", { ROLE.ATTACKER, ROLE.ATTACKER2 });

	SetGoalRole("DEFEND_Axis_Base_.*", ROLE.DEFENDER);
	SetGoalRole("PLANTMINE_Axis_Base.*", ROLE.DEFENDER);
	SetGoalRole("MOUNTMG42_Axis_MG42", ROLE.DEFENDER);
	SetGoalRole("REPAIRMG42_Axis_MG42", ROLE.DEFENDER);
	SetGoalRole("MOUNTMG42_Axis_Main_Hatch", ROLE.DEFENDER);
	SetGoalRole("REPAIRMG42_Axis_Main_Hatch", ROLE.DEFENDER);
	SetGoalRole("CALLARTILLERY_Axis_Bunker", ROLE.DEFENDER);
	SetGoalRole("ARTILLERY_S_Allied_Bunker", ROLE.DEFENDER);
	SetGoalRole("DEFEND_Secret_Weapon_.*", ROLE.DEFENDER);
	SetGoalRole("BUILD_Axis_Defensive_Barrier", { ROLE.DEFENDER, ROLE.ATTACKER2 });
	SetGoalRole("BUILD_Axis_MG42", { ROLE.DEFENDER, ROLE.ATTACKER2 });

	DCM1 = OnTriggerRegion(AABB(-535.689,-2540.303,-6.875,-325.262,-2355.125,75.288), RegionTrigger.DisableCombatMovement);	//Allied_entrence_to_underground
	DCM2 = OnTriggerRegion(AABB(-733.802,-3484.605,169.125,-414.579,-2601.128,301.125), RegionTrigger.DisableCombatMovement);	//Allied_basic_spawn_roofs
	DCM3 = OnTriggerRegion(AABB(100.742,-4344.875,-6.862,320.875,-3902.092,227.416), RegionTrigger.DisableCombatMovement);	//Allied_basic_spawn_barrack_with_windows
	DCM4 = OnTriggerRegion(AABB(-832.875,-4352.875,1.125,122.875,-3818.339,272.823), RegionTrigger.DisableCombatMovement);	//Allied_basic_spawn_main_storage
	DCM5 = OnTriggerRegion(AABB(-816.875,-2383.817,-6.875,816.875,2391.594,267.125), RegionTrigger.DisableCombatMovement);	//Main_battlefield
	DCM6 = OnTriggerRegion(AABB(-132.391,-284.196,129.125,137.932,255.650,480.782), RegionTrigger.DisableCombatMovement);	//Ramp_for_checkpoint
	DCM7 = OnTriggerRegion(AABB(-640.875,-1782.662,183.818,184.874,-1207.044,417.770), RegionTrigger.DisableCombatMovement);	//Allied_outside_MG42
	DCM8 = OnTriggerRegion(AABB(317.731,2346.847,-6.875,546.067,2529.860,89.687), RegionTrigger.DisableCombatMovement);	//Axis_entrence_to_underground
	DCM9 = OnTriggerRegion(AABB(416.035,2591.896,169.125,734.579,3486.876,301.125), RegionTrigger.DisableCombatMovement);	//Axis_basic_spawn_roofs
	DCM10 = OnTriggerRegion(AABB(-320.875,3920.144,-6.875,-103.377,4344.875,226.820), RegionTrigger.DisableCombatMovement);	//Axis_basic_spawn_barrack_with_windows
	DCM11 = OnTriggerRegion(AABB(-120.875,3818.787,1.125,830.289,4352.875,305.538), RegionTrigger.DisableCombatMovement);	//Axis_basic_spawn_main_storage
	DCM12 = OnTriggerRegion(AABB(-184.875,1198.967,236.811,640.875,1778.143,428.193), RegionTrigger.DisableCombatMovement);	//Axis_outside_MG42
	BD1 = OnTriggerRegion(AABB(126.564,-4344.875,137.125,256.875,-4017.408,242.019), RegionTrigger.BreakableDistance);	//Allied_windows_near_storage
	BD2 = OnTriggerRegion(AABB(-256.875,4017.546,137.125,-124.685,4344.875,238.083), RegionTrigger.BreakableDistance);	//Axis_windows_near_storage

	Allied_Trigger = OnTriggerRegion( AABB(-832.875,-4352.875,1.125,122.875,-3847.125,367.776), Map.AxisEngsInside );
	Axis_Trigger = OnTriggerRegion( AABB(-122.875,3845.125,1.125,832.875,4352.875,368.840), Map.AlliedEngsInside );

	RegionTrigger.Create(AABB(212.307,-2364.096,41.125,320.875,-2259.454,196.023), "DisableBotPush", "DEFEND_Allied_Base_2");
	RegionTrigger.Create(AABB(-690.626,-3448.841,183.492,-547.437,-3321.103,287.405), "DisableBotPush", "DEFEND_Allied_Base_3");
	RegionTrigger.Create(AABB(-575.802,-2935.942,183.792,-438.592,-2795.060,292.087), "DisableBotPush", "DEFEND_Allied_Base_10");
	RegionTrigger.Create(AABB(-320.875,2247.125,41.297,-188.805,2370.149,163.125), "DisableBotPush", "DEFEND_Axis_Base_1");
	RegionTrigger.Create(AABB(560.661,3312.706,181.548,697.210,3455.114,290.351), "DisableBotPush", "DEFEND_Axis_Base_3");
	RegionTrigger.Create(AABB(442.273,2819.172,182.727,572.157,2939.138,284.049), "DisableBotPush", "DEFEND_Axis_Base_10");
	RegionTrigger.Create(AABB(-64.875,1159.125,-127.680,64.875,1232.504,83.125), "DisableBotPush", "Axis_Main_hatch_ladder");
	RegionTrigger.Create(AABB(-64.875,-1253.108,-167.653,64.875,-1159.126,83.125), "DisableBotPush", "Allied_Main_hatch_ladder");

	Wp.SetWaypointFlag( "Ally_Hatch", "closed", false );
	Wp.SetWaypointFlag( "Ally_Hatch_1", "climb", false );
	Wp.SetWaypointFlag( "Axis_Hatch", "closed", false );
	Wp.SetWaypointFlag( "Axis_Hatch_1", "climb", false );
	Wp.SetWaypointFlag( "SASW", "closed", false );

	Wp.SetWaypointFlag( "FASS_1", "jump", true );
	Wp.SetWaypointFlag( "FASS_2", "jump", true );
	Wp.SetWaypointFlag( "FASS_2", "sneak", true );
	Wp.SetWaypointFlag( "FASS_3", "jump", true );
	Wp.SetWaypointFlag( "FASS_4", "closed", false );
	Wp.SetWaypointFlag( "FASS_5", "closed", false );

	Wp.SetWaypointFlag( "SASS_1", "jump", true );
	Wp.SetWaypointFlag( "SASS_2", "closed", false );
	Wp.SetWaypointFlag( "SASS_3", "jump", true );
	Wp.SetWaypointFlag( "SASS_4", "closed", false );

	Util.SetMaxUsers( 1, "ATTACK_.*" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 4, "CHECKPOINT_.*" );
	Util.SetMaxUsers( 2, "PLANT_.*" );
	Util.SetMaxUsers( 2, "BUILD_.*" );

	print( "^3Omni-bot map script by ^1Q^2i^3k^4i^1 ^3and ^1n^2a^4t^8i^3v^5e12 ^3for ^1D^4S ^7Bunkers ^2beta 2 ^3executed." );

	while(1)
	{
		Util.BotChat(  0, "say", "^3Script for ^1D^4S ^7Bunkers ^2beta 2 ^3by ^1Q^2i^3k^4i^1 ^3& ^1n^2a^4t^8i^3v^5e12", 1 );
		sleep(180);
	}
};

global OnBotJoin = function( bot )
{
	WeaponTable.SetWeaponAvailability ( CLASS.SOLDIER, WEAPON.FLAMETHROWER, false );
	WeaponTable.SetWeaponAvailability ( CLASS.SOLDIER, WEAPON.MORTAR, false );
	WeaponTable.SetWeaponAvailability ( CLASS.SOLDIER, WEAPON.MOBILE_MG42, false );
};

global InitializeRoutes = function()
{
	MapRoutes =
	{
		PLANT_Allied_Main_Hatch =
		{
			ROUTE_Axis_Spawn =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{

					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{

					},
				},
				ROUTE_Axis_Main_Hatch =
				{

				},
			},
			ROUTE_Axis_Spawn_1 =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{

					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{

					},
				},
				ROUTE_Axis_Main_Hatch =
				{

				},
			},
		},
		PLANT_Axis_Main_Hatch =
		{
			ROUTE_Allied_Spawn =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{

					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{

					},
				},
				ROUTE_Allied_Main_Hatch =
				{

				},
			},
			ROUTE_Allied_Spawn_1 =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{

					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{

					},
				},
				ROUTE_Allied_Main_Hatch =
				{

				},
			},
		},
		PLANT_First_Axis_Secret_Weapon =
		{
			ROUTE_Allied_Spawn =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{

					},
					ROUTE_Axis_Left =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{

					},
					ROUTE_Axis_Right =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Main_Hatch_1 =
				{
					ROUTE_Axis_Main_Hatch_1 =
					{
						ROUTE_Axis_Underground_1 =
						{

						},
					},
				},
			},

			ROUTE_Allied_Spawn_1 =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{

					},
					ROUTE_Axis_Left =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{

					},
					ROUTE_Axis_Right =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Main_Hatch_1 =
				{
					ROUTE_Axis_Main_Hatch_1 =
					{
						ROUTE_Axis_Underground_1 =
						{

						},
					},
				},
			},
			ROUTE_Allied_Forward_Spawn =
			{
				ROUTE_Axis_Right =
				{

				},
				ROUTE_Axis_Left =
				{

				},
				ROUTE_Axis_Right =
				{
					ROUTE_Axis_Main_Hatch =
					{
						ROUTE_Axis_Underground =
						{

						},
					},
				},
			},
		},
		PLANT_First_Allied_Supply_Stash =
		{
			ROUTE_Axis_Spawn =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{

					},
					ROUTE_Allied_Left =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{

					},
					ROUTE_Allied_Right =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Main_Hatch_1 =
				{
					ROUTE_Allied_Main_Hatch_1 =
					{
						ROUTE_Allied_Underground_1 =
						{

						},
					},
				},
			},

			ROUTE_Axis_Spawn_1 =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{

					},
					ROUTE_Allied_Left =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{

					},
					ROUTE_Allied_Right =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Main_Hatch_1 =
				{
					ROUTE_Allied_Main_Hatch_1 =
					{
						ROUTE_Allied_Underground_1 =
						{

						},
					},
				},
			},

			ROUTE_Axis_Forward_Spawn =
			{
				ROUTE_Allied_Right =
				{

				},
				ROUTE_Allied_Left =
				{

				},
				ROUTE_Allied_Right =
				{
					ROUTE_Allied_Main_Hatch =
					{
						ROUTE_Allied_Underground =
						{

						},
					},
				},
			},
		},
		SMOKEBOMB_Axis_Base_1 =
		{
			ROUTE_Allied_Spawn =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Main_Hatch_1 =
				{
					ROUTE_Axis_Main_Hatch_1 =
					{
						ROUTE_Axis_Underground_1 =
						{

						},
					},
				},
			},

			ROUTE_Allied_Spawn_1 =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{
						ROUTE_Axis_Main_Hatch =
						{
							ROUTE_Axis_Underground =
							{

							},
						},
					},
				},
				ROUTE_Allied_Main_Hatch_1 =
				{
					ROUTE_Axis_Main_Hatch_1 =
					{
						ROUTE_Axis_Underground_1 =
						{

						},
					},
				},
			},
			ROUTE_Allied_Forward_Spawn =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Axis_Main_Hatch =
					{
						ROUTE_Axis_Underground =
						{

						},
					},
				},
			},
		},
		PLANT_Axis_defensive_barrier_disg =
		{
			ROUTE_Allied_Spawn =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{
						ROUTE_Axis_Right =
						{
							ROUTE_Thru_Axis_Door =
							{

							},
						},
					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{
						ROUTE_Thru_Axis_Door =
						{

						},
					},
				},
			},

			ROUTE_Allied_Spawn_1 =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{
						ROUTE_Axis_Right =
						{
							ROUTE_Thru_Axis_Door =
							{

							},
						},
					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{
						ROUTE_Thru_Axis_Door =
						{

						},
					},
				},
			},
			ROUTE_Allied_battlefield_1 =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Axis_Left =
					{
						ROUTE_Axis_Right =
						{
							ROUTE_Thru_Axis_Door =
							{

							},
						},
					},
				},
				ROUTE_Allied_Left =
				{
					ROUTE_Axis_Right =
					{
						ROUTE_Thru_Axis_Door =
						{

						},
					},
				},
			},
			ROUTE_Allied_Forward_Spawn =
			{
				ROUTE_Around_Allied_CP =
				{
					ROUTE_Thru_Axis_Door =
					{

					},
				},
			},
			ROUTE_Allied_battlefield_2 =
			{
				ROUTE_Around_Allied_CP =
				{
					ROUTE_Thru_Axis_Door =
					{

					},
				},
			},
			ROUTE_Axis_battlefield_2 =
			{
				ROUTE_Thru_Axis_Door =
				{

				},
			},
		},
		SMOKEBOMB_Allied_Base_1 =
		{
			ROUTE_Axis_Spawn =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Main_Hatch_1 =
				{
					ROUTE_Allied_Main_Hatch_1 =
					{
						ROUTE_Allied_Underground_1 =
						{

						},
					},
				},
			},

			ROUTE_Axis_Spawn_1 =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{
						ROUTE_Allied_Main_Hatch =
						{
							ROUTE_Allied_Underground =
							{

							},
						},
					},
				},
				ROUTE_Axis_Main_Hatch_1 =
				{
					ROUTE_Allied_Main_Hatch_1 =
					{
						ROUTE_Allied_Underground_1 =
						{

						},
					},
				},
			},

			ROUTE_Axis_Forward_Spawn =
			{
				ROUTE_Allied_Right =
				{
					ROUTE_Allied_Main_Hatch =
					{
						ROUTE_Allied_Underground =
						{

						},
					},
				},
			},
		},
		PLANT_Allied_defensive_barrier_disg =
		{
			ROUTE_Axis_Spawn =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{
						ROUTE_Allied_Right =
						{
							ROUTE_Thru_Allied_Door =
							{

							},
						},
					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{
						ROUTE_Thru_Allied_Door =
						{

						},
					},
				},
			},

			ROUTE_Axis_Spawn_1 =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{
						ROUTE_Allied_Right =
						{
							ROUTE_Thru_Allied_Door =
							{

							},
						},
					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{
						ROUTE_Thru_Allied_Door =
						{

						},
					},
				},
			},
			ROUTE_Axis_battlefield_1 =
			{
				ROUTE_Axis_Right =
				{
					ROUTE_Allied_Left =
					{
						ROUTE_Allied_Right =
						{
							ROUTE_Thru_Allied_Door =
							{

							},
						},
					},
				},
				ROUTE_Axis_Left =
				{
					ROUTE_Allied_Right =
					{
						ROUTE_Thru_Allied_Door =
						{

						},
					},
				},
			},

			ROUTE_Axis_Forward_Spawn =
			{
				ROUTE_Around_Axis_CP =
				{
					ROUTE_Thru_Allied_Door =
					{

					},
				},
			},
			ROUTE_Axis_battlefield_2 =
			{
				ROUTE_Around_Axis_CP =
				{
					ROUTE_Thru_Allied_Door =
					{

					},
				},
			},
			ROUTE_Allied_battlefield_2 =
			{
				ROUTE_Thru_Allied_Door =
				{

				},
			},
		},
		CHECKPOINT_forwardflag =
		{
			ROUTE_Axis_Spawn =
			{
				ROUTE_Axis_Bunker_2 =
				{

				},
				ROUTE_Axis_Right =
				{

				},
				ROUTE_Axis_Left =
				{

				},
				ROUTE_Axis_Main_Hatch =
				{

				},
			},
			ROUTE_Axis_Spawn_1 =
			{
				ROUTE_Axis_Bunker_2 =
				{

				},
				ROUTE_Axis_Right =
				{

				},
				ROUTE_Axis_Left =
				{

				},
				ROUTE_Axis_Main_Hatch =
				{

				},
			},

			ROUTE_Allied_Spawn =
			{
				ROUTE_Allied_Bunker_2 =
				{

				},
				ROUTE_Allied_Right =
				{

				},
				ROUTE_Allied_Left =
				{

				},
				ROUTE_Allied_Main_Hatch =
				{

				},
			},
			ROUTE_Axis_Spawn_1 =
			{
				ROUTE_Allied_Bunker_2 =
				{

				},
				ROUTE_Allied_Right =
				{

				},
				ROUTE_Allied_Left =
				{

				},
				ROUTE_Allied_Main_Hatch =
				{

				},
			},
		},
	};

	MapRoutes.PLANT_Second_Allied_Supply_Stash = MapRoutes.PLANT_First_Allied_Supply_Stash;
	MapRoutes.PLANT_Allied_Defensive_Barrier = MapRoutes.PLANT_First_Allied_Supply_Stash;
	MapRoutes.PLANT_Allied_MG42 = MapRoutes.PLANT_First_Allied_Supply_Stash;
	MapRoutes.ATTACK_Allied_Base_1 = MapRoutes.PLANT_First_Allied_Supply_Stash;
	MapRoutes.ATTACK_Allied_Base_2 = MapRoutes.PLANT_First_Allied_Supply_Stash;
	MapRoutes.ATTACK_Allied_Base_3 = MapRoutes.PLANT_First_Allied_Supply_Stash;

	MapRoutes.PLANT_Second_Axis_Secret_Weapon = MapRoutes.PLANT_First_Axis_Secret_Weapon;
	MapRoutes.PLANT_Axis_Defensive_Barrier = MapRoutes.PLANT_First_Axis_Secret_Weapon;
	MapRoutes.PLANT_Axis_MG42 = MapRoutes.PLANT_First_Axis_Secret_Weapon;
	MapRoutes.ATTACK_Axis_Base_1 = MapRoutes.PLANT_First_Axis_Secret_Weapon;
	MapRoutes.ATTACK_Axis_Base_2 = MapRoutes.PLANT_First_Axis_Secret_Weapon;
	MapRoutes.ATTACK_Axis_Base_3 = MapRoutes.PLANT_First_Axis_Secret_Weapon;

	Util.Routes(MapRoutes);
};
