//==========================================================================================
//  Kerkyra FP5
//	kerkyra.gm
//
//	Who       	When		What
//------------------------------------------------------------------------------------------
//	^1[UJE]^3Niek	06 March 2016	Initial Script
//	^1[UJE]^3Captain  30 March 2016	Add Defense/Attack/Stuckage
//	^1[UJE]^3Captain  15 December 2016	Fix/Clean
//	^1[UJE]^3Captain  21 December 2016	Add Route/Fix for new version Kerkyra B1
//  ^1[UJE]^3Captain  13 March    2017	Small correct
//==========================================================================================
//
global Map =
{
	Tankatb1 = false,
	Tankatb2 = false,
	Tankatposition = false,
	SwordTaken = false,
	CrownTaken = false,
	ChaliceTaken = false,
	ArtifactsSecured = false,


	axis_cp_Build = function()
	{
    SetAvailableMapGoals( TEAM.AXIS, false, {"BUILD_axis_cp","ROUTE_backdoor"} );

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

		Util.MapDebugPrint( "axis_cp_Build" );
	},

	axis_cp_Destroyed = function()
	{
    if ( Map.ArtifactsSecured == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, false, {"BUILD_axis_cp","ROUTE_backdoor"} );
	}
	if ( Map.ArtifactsSecured == false )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, {"BUILD_axis_cp","ROUTE_backdoor"} );
	}
	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_axis_cp" );

		Util.MapDebugPrint( "axis_cp_Destroyed" );
	},

	SdKfz_234_Built = function()
	{
    if ( Map.Tankatb1 == true && Map.Tankatb2 == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_SdKfz_234" );
	}
	if ( Map.Tankatb1 == false && Map.Tankatb2 == false )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "ESCORT_SdKfz_234" );
	}
	if ( Map.Tankatposition == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_SdKfz_234" );
	}
	SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_SdKfz_234" );

		Util.MapDebugPrint( "SdKfz_234_Built" );
	},

	SdKfz_234_Destroyed = function()
	{
	if ( Map.Tankatb1 == true && Map.Tankatb2 == false )
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_SdKfz_234" );
	}
	if ( Map.Tankatb1 == false && Map.Tankatb2 == true )
	{
    SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_SdKfz_234" );
	}
	if ( Map.Tankatb1 == false && Map.Tankatb2 == false )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_SdKfz_234" );
	}
	SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_SdKfz_234" );

		Util.MapDebugPrint( "SdKfz_234_Destroyed" );
	},

	Tank_Barrier_1_Built = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank_Barrier_1" );

	if ( Map.Tankatb1 == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Tank_Barrier_1" );
	SetAvailableMapGoals( TEAM.AXIS, false, {"ESCORT_SdKfz_234","BUILD_SdKfz_234"} );
	}
		Util.MapDebugPrint( "Tank_Barrier_1_Built" );
	},

	Tank_Barrier_1_Destroyed = function()
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Tank_Barrier_1" );

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

	if ( Map.Tankatb1 == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, {"ESCORT_SdKfz_234","BUILD_SdKfz_234"} );
	}
		Util.MapDebugPrint( "Tank_Barrier_1_Destroyed" );
	},

	Tank_at_Barrier_1 = function()
	{
	Map.Tankatb1 = true;

    SetAvailableMapGoals( TEAM.AXIS, true, {"PLANT_Tank_Barrier_1","SMOKEBOMB_tb1"} );
	SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_SdKfz_234" );

		Util.MapDebugPrint( "Tank_at_Barrier_1" );
	},

	Tank_Pass_Barrier_1 = function()
	{
	Map.Tankatb1 = false;
	SetAvailableMapGoals( TEAM.AXIS, false, {"PLANT_Tank_Barrier_1","SMOKEBOMB_tb1"} );

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

		Util.MapDebugPrint( "Tank_Pass_Barrier_1" );
	},

	Axis_Taken_over_City  = function()
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_tb1_.*" );
	SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_tb2_.*" );

	SetAvailableMapGoals( TEAM.ALLIES, false, {"CALLARTILLERY_tb1","ARTILLERY_S_barrier_1","DEFEND_tb1_.*"} );
	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_tb2_.*" );

		Util.MapDebugPrint( "Axis_Taken_over_City" );
	},

	Tank_Barrier_2_Built = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank_Barrier_2" );

	if ( Map.Tankatb2 == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Tank_Barrier_2" );
	SetAvailableMapGoals( TEAM.AXIS, false, {"ESCORT_SdKfz_234","BUILD_SdKfz_234"} );
	}
		Util.MapDebugPrint( "Tank_Barrier_2_Built" );
	},

	Tank_Barrier_2_Destroyed = function()
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Tank_Barrier_2" );

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

	if ( Map.Tankatb2 == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, {"ESCORT_SdKfz_234","BUILD_SdKfz_234"} );
	}
		Util.MapDebugPrint( "Tank_Barrier_2_Destroyed" );
	},

	Tank_at_Barrier_2 = function()
	{
	Map.Tankatb2 = true;

    SetAvailableMapGoals( TEAM.AXIS, true, {"PLANT_Tank_Barrier_2","SMOKEBOMB_tb2"} );
	SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_SdKfz_234" );

		Util.MapDebugPrint( "Tank_at_Barrier_2" );
	},

	Tank_Pass_Barrier_2 = function()
	{
	Map.Tankatb2 = false;

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

	SetAvailableMapGoals( TEAM.ALLIES, true, {"DEFEND_palace_gate_.*","MOUNTMG42_.*"} );
	SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_tb2_.*","BUILD_Tank_Barrier_2"} );

		Util.MapDebugPrint( "Tank_Pass_Barrier_2" );
	},

	Palace_Gates_Destroyed = function()
	{

	SetAvailableMapGoals( TEAM.AXIS, true, {"BUILD_axis_cp",".*CAB.*","ROUTE_backdoor","ATTACK_palace_.*"} );
	SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_tb2_.*" );

	SetAvailableMapGoals( TEAM.ALLIES, false, {".*CAB_base.*","ROUTE_backdoor"} );
	SetAvailableMapGoals( TEAM.ALLIES, true, ".*CAB_first.*");

		Util.MapDebugPrint( "Palace_Gates_Destroyed" );
	},

	Tunnel_Door_Built = function()
	{
	if ( Map.ArtifactsSecured == false )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Tunnel_Door" );
	}
    if ( Map.ArtifactsSecured == true )
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Tunnel_Door" );
	}
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tunnel_Door" );

	    Util.DisableGoal("ROUTE_tunnel");

		Util.MapDebugPrint( "Tunnel_Door_Built" );
	},

	Tunnel_Door_Destroyed = function()
	{
	if ( Map.ArtifactsSecured == false )
	{

	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Tunnel_Door" );
	}
    if ( Map.ArtifactsSecured == true )
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tunnel_Door" );
	}
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Tunnel_Door" );

	    Util.EnableGoal("ROUTE_tunnel");

		Util.MapDebugPrint( "Tunnel_Door_Destroyed" );
	},

	Wall_Destroyed = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, {"DEFEND_chapel_.*","DEFEND_hall_.*"} );

		Util.MapDebugPrint( "Wall_Destroyed" );
	},

	SdKfz_in_position = function()
	{
	Map.Tankatposition = true;
	SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_palace_gate_.*" );

	SetAvailableMapGoals( TEAM.AXIS, true, {"FLAG_.*","FLAG_chalice","PLANT_Tunnel_Door"} );
	SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_SdKfz_234" );

		Util.MapDebugPrint( "SdKfz_in_position" );
	},

	chalice_Taken = function()
	{
	Map.ChaliceTaken = true;
	SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_chalice" );
	SetAvailableMapGoals( TEAM.AXIS, false, "FLAG_chalice" );

	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_palace_gate_.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_chapel_.*" );

		Util.MapDebugPrint( "chalice_Taken" );
	},

	crown_Taken = function()
	{
	Map.CrownTaken = true;
	SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_crown" );
	SetAvailableMapGoals( TEAM.AXIS, false, "FLAG_crown" );

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

	if ( Map.sword_Secured )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_hall_.*" );
	}
		Util.MapDebugPrint( "crown_Taken" );
	},

	sword_Taken = function()
	{
	Map.SwordTaken = true;
	SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_sword" );
	SetAvailableMapGoals( TEAM.AXIS, false, "FLAG_sword" );

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

	if ( Map.crown_Secured )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_hall_.*" );
	}
		Util.MapDebugPrint( "sword_Taken" );
	},

	chalice_Returned = function()
	{
	Map.ChaliceTaken = false;
	SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_chalice" );
	SetAvailableMapGoals( TEAM.AXIS, true, "FLAG_chalice" );

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

	if ( Map.SwordTaken == true && Map.CrownTaken == true )
	{
    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_palace_gate_.*" );
	}
	if ( Map.SwordTaken == false && Map.CrownTaken == false )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_palace_gate_.*" );
	}
		Util.MapDebugPrint( "chalice_Returned" );
	},

	crown_Returned = function()
	{
	Map.CrownTaken = false;
	SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_crown" );
	SetAvailableMapGoals( TEAM.AXIS, true, "FLAG_crown" );

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

	if ( Map.SwordTaken == true && Map.Chalice == true )
	{
    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_palace_gate_.*" );
	}
	if ( Map.SwordTaken == false && Map.Chalice == false )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_palace_gate_.*" );
	}
		Util.MapDebugPrint( "crown_Returned" );
	},

	sword_Returned = function()
	{
	Map.SwordTaken = false;
	SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_sword" );
	SetAvailableMapGoals( TEAM.AXIS, true, "FLAG_sword" );

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

	if ( Map.CrownTaken == true && Map.Chalice == true )
	{
    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_palace_gate_.*" );
	}
	if ( Map.CrownTaken == false && Map.Chalice == false )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_palace_gate_.*" );
	}
		Util.MapDebugPrint( "sword_Returned" );
	},

	chalice_Secured = function()
	{
	Map.ChaliceTaken = false;
	SetAvailableMapGoals( TEAM.AXIS, false, {"CAPPOINT_chalice","FLAG_chalice"} );

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

	if ( Map.SwordTaken == true && Map.CrownTaken == true )
	{
    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_palace_gate_.*" );
	}
	if ( Map.SwordTaken == false && Map.CrownTaken == false )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_palace_gate_.*" );
	}
		Util.MapDebugPrint( "chalice_Secured" );
	},

	crown_Secured = function()
	{
	Map.CrownTaken = false;
	SetAvailableMapGoals( TEAM.AXIS, false, {"CAPPOINT_crown","FLAG_crown"} );

	if ( Map.sword_Secured )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_hall_.*" );
	}
	if ( Map.SwordTaken == true && Map.ChaliceTaken == true )
	{
    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_palace_gate_.*" );
	}
	if ( Map.SwordTaken == false && Map.ChaliceTaken == false )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_palace_gate_.*" );
	}
		Util.MapDebugPrint( "crown_Secured" );
	},

	sword_Secured = function()
	{
	Map.SwordTaken = false;
	SetAvailableMapGoals( TEAM.AXIS, false, {"CAPPOINT_sword","FLAG_sword"} );

	if ( Map.crown_Secured )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_hall_.*" );
	}
	if ( Map.CrownTaken == true && Map.ChaliceTaken == true )
	{
    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_palace_gate_.*" );
	}
	if ( Map.CrownTaken == false && Map.ChaliceTaken == false )
	{
    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_palace_gate_.*" );
	}
		Util.MapDebugPrint( "sword_Secured" );
	},

	The_Artifacts_Secured = function()
	{
	Map.Tankatposition = false;
	Map.ArtifactsSecured = true;

	SetAvailableMapGoals( TEAM.AXIS, true, "ESCORT_SdKfz_234" );
	SetAvailableMapGoals( TEAM.AXIS, false, {"PLANT_Tunnel_Door",".*CAB.*","ROUTE_backdoor"} );

	SetAvailableMapGoals( TEAM.ALLIES, true, {".*CAB.*","ROUTE_backdoor","DEFEND_palace_.*"} );

		Util.MapDebugPrint( "The Artifacts_Secured" );
	},

	Tank_pass_palace_wall = function()
	{

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

		Util.MapDebugPrint( "Tank_pass_palace_wall" );
	},

	Tank_escape_at_tb2 = function()
	{

	SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_tb2_.*" );
	SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_palace_.*" );

	SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_palace_gate_.*","MOUNTMG42_.*"} );
	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_tb2.*" );

		Util.MapDebugPrint( "Tank_escape_at_tb2" );
	},

    vehicle_at_location = function()
	{
		switch(Map.VehicleLocation)
		{
			case 1:
			{
            Map.Tank_at_Barrier_1();
			}
			case 2:
			{
			Map.Tank_at_Barrier_2();
			}
			case 3:
			{
			Map.Tank_Pass_Barrier_2();
			}
			case 4:
			{
			Map.Tank_pass_palace_wall();
			}
			case 5:
			{
			Map.Tank_escape_at_tb2();
			}
		}
		Util.MapDebugPrint("vehicle at location " + Map.VehicleLocation, true);
	},
};
global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "The SdKfz 234 has been damaged!", Map.SdKfz_234_Destroyed );
	OnTrigger( "The SdKfz 234 has been repaired!", Map.SdKfz_234_Built );
	OnTrigger( "Tank Barrier #1 has been constructed.", Map.Tank_Barrier_1_Built );
	OnTrigger( "Tank Barrier #1 has been destroyed.", Map.Tank_Barrier_1_Destroyed );
	OnTrigger( "Axis team has passed the First Barrier!", Map.Tank_Pass_Barrier_1 );
	OnTrigger( "Axis team has passed the Second Barrier!", Map.Tank_Pass_Barrier_2 );
	OnTrigger( "Axis team has taken over The City!", Map.Axis_Taken_over_City );
	OnTrigger( "Tank Barrier #2 has been constructed.", Map.Tank_Barrier_2_Built );
	OnTrigger( "Tank Barrier #2 has been destroyed.", Map.Tank_Barrier_2_Destroyed );
	OnTrigger( "Axis have breached the Palace Gates!", Map.Palace_Gates_Destroyed );
	OnTrigger( "The Tunnel Door has been constructed.", Map.Tunnel_Door_Built );
	OnTrigger( "The Tunnel Door has been destroyed.", Map.Tunnel_Door_Destroyed );
	OnTrigger( "Axis have breached a hole in the wall!", Map.Wall_Destroyed );
	OnTrigger( "The SdKfz 234 is in position to take the artifacts!", Map.SdKfz_in_position );
	OnTrigger( "Axis have stolen The Emperor's Chalice!", Map.chalice_Taken );
	OnTrigger( "Axis have stolen The King's Crown!", Map.crown_Taken );
	OnTrigger( "Axis have stolen The Achilles' Sword!", Map.sword_Taken );
	OnTrigger( "Flag returned chalice!", Map.chalice_Returned );
	OnTrigger( "Flag returned crown!", Map.crown_Returned );
	OnTrigger( "Flag returned sword!", Map.sword_Returned );
	OnTrigger( "Axis have secured The Emperor's chalice!", Map.chalice_Secured );
	OnTrigger( "Axis have secured The King's Crown!", Map.crown_Secured );
	OnTrigger( "Axis have secured The Achilles' sword!", Map.sword_Secured );
	OnTrigger( "Axis team has stolen all the artifacts!", Map.The_Artifacts_Secured );
	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.axis_cp_Build );
	OnTrigger( "Allied team has destroyed the Axis Command Post! Spawning changed!", Map.axis_cp_Destroyed );
	OnTrigger( "tank at location", Map.vehicle_at_location );

	TankatB1 = OnTriggerRegion(AABB(-2121.093,110.942,1.125,-1826.827,333.952,75.125), RegionTrigger.VehicleTrigger);
	TankatB2 = OnTriggerRegion(AABB(2627.607,896.144,-39.422,2700.874,1023.255,36.883), RegionTrigger.VehicleTrigger);
	TankpassB2 = OnTriggerRegion(AABB(3141.755,1174.243,-62.276,3227.052,1237.319,18.739), RegionTrigger.VehicleTrigger);
	TankPassTheWall = OnTriggerRegion(AABB(3481.890,2810.562,-94.875,3535.273,3019.033,-20.875), RegionTrigger.VehicleTrigger);

	Util.DisableGoal( ".*", true ); // all but routes
	Util.DisableGoal("ROUTE_tunnel");

	//Axis activation
	SetAvailableMapGoals( TEAM.AXIS, true, {
    "ESCORT_SdKfz_234",
	"MOVER_tank",
	"ATTACK_tb1_.*",
	});

	//Allied activation
	SetAvailableMapGoals( TEAM.ALLIES, true, {
    "DEFEND_tb1_.*",
	"CALLARTILLERY_tb1",
	"ARTILLERY_S_barrier_1",
	".*CAB_base.*",
	});

    //Priority goals
	SetGoalPriority( "CALLARTILLERY_tb1", 0.93 );
	SetGoalPriority( "ARTILLERY_S_barrier_1", 0.93 );
	SetGoalPriority( "DEFEND_.*", 0.83 );
	SetGoalPriority( "ATTACK_.*", 0.82 );
	SetGoalPriority( "PLANT_.*", 0.92 );
	SetGoalPriority( "ESCORT_SdKfz_234", 0.95 );
	SetGoalPriority( "FLAG_.*", 0.92 );
	//SetGoalPriority( "ROUTE_axis_cp", 0.93 );
	SetGoalPriority( "SMOKEBOMB_tb.*", 0.93 );
	SetGoalPriority( ".*_balcony_mg", 0.93 );
	SetGoalPriority( "BUILD_axis_cp", 0.93 );

	// Max users per goal
	Util.SetMaxUsersInProgress( 1, "ATTACK_.*" );
	Util.SetMaxUsersInProgress( 1, "DEFEND_.*" );
	Util.SetMaxUsersInProgress( 1, "BUILD_.*" );
	Util.SetMaxUsersInProgress( 1, "PLANT_.*" );
	Util.SetMaxUsersInProgress( 1, "ESCORT_.*" );
	Util.SetMaxUsersInProgress( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsersInProgress( 4, "FLAG_.*" );

	// Camp times
	SetMapGoalProperties( "DEFEND_.*", {MinCampTime=15, MaxCampTime=45} );
    SetMapGoalProperties( "ATTACK_.*", {MinCampTime=15, MaxCampTime=45} );
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=45, MaxCampTime=90} );

	Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." );
};

global OnBotJoin = function( bot )
{
	bot.TargetBreakableDist = 90.0;
};

global InitializeRoutes = function()
{
	MapRoutes =
	{
		FLAG_crown =
		{
			ROUTE_axis_palace_spawn  =
			{
				ROUTE_cp_exit_east  = {Weight = 3,},
				ROUTE_main_stairs  = {Weight = 2,},
				ROUTE_strair_right  = {Weight = 3,},
				ROUTE_tunnel  = {Weight = 2,},
			},
			ROUTE_main_palace  =
			{
				ROUTE_cp_exit_east  = {Weight = 3,},
				ROUTE_main_stairs  = {Weight = 2,},
				ROUTE_strair_right  = {Weight = 3,},
				ROUTE_tunnel  = {Weight = 2,},
			},
			ROUTE_city_spawn  =
			{
				ROUTE_split_city  = {ROUTE_main_palace  = {},},
				ROUTE_backdoor  = {ROUTE_cp_exit_east  = {},
				ROUTE_tunnel  = {Weight = 3,},
				},
			},
			ROUTE_cp_exit_east  =
			{
				ROUTE_east_door  =
				{
					ROUTE_back_stairs_0  =
					{
						ROUTE_back_stairs_1  =
						{
							ROUTE_back_stairs_2  =
							{
								ROUTE_south_door  =
								{
									ROUTE_split_stairs  = {},
								},
								ROUTE_west_door  =
								{
									ROUTE_split_stairs  = {},
								},
							},
						},
					},
				},
			},
			ROUTE_main_stairs  =
			{
				ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
				ROUTE_split_mainstairs  =
				{
					ROUTE_split_base  =
					{
						ROUTE_base  =
						{
							ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
						},
					},
				},
			},
			ROUTE_strair_right  =
			{
				ROUTE_south_door  =
				{
					ROUTE_split_stairs  = {},
				},
				ROUTE_west_door  = {},
			},
            ROUTE_tunnel  =
			{
				ROUTE_axis_cp  =
				{
					ROUTE_split_base  =
					{
						ROUTE_base  =
						{
							ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
						},
						ROUTE_split_mainstairs  =
						{
							ROUTE_main_stairs  =
							{
								ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
							},
						},
					},
				},
			},
		},
		FLAG_sword =
		{
			ROUTE_axis_palace_spawn  =
			{
				ROUTE_cp_exit_east  = {Weight = 3,},
				ROUTE_main_stairs  = {Weight = 2,},
				ROUTE_strair_right  = {Weight = 3,},
				ROUTE_tunnel  = {Weight = 2,},
			},
			ROUTE_main_palace  =
			{
				ROUTE_cp_exit_east  = {Weight = 3,},
				ROUTE_main_stairs  = {Weight = 2,},
				ROUTE_strair_right  = {Weight = 3,},
				ROUTE_tunnel  = {Weight = 2,},
			},
			ROUTE_city_spawn  =
			{
				ROUTE_split_city  =
				{
					ROUTE_main_palace  = {},
				},
				ROUTE_backdoor  =
				{
					ROUTE_cp_exit_east  = {},
					ROUTE_tunnel  = {},},
			},
			ROUTE_cp_exit_east  =
			{
				ROUTE_east_door  =
				{
					ROUTE_back_stairs_0  =
					{
						ROUTE_back_stairs_1  =
						{
							ROUTE_back_stairs_2  =
							{
								ROUTE_south_door  = {ROUTE_split_stairs  = {},},
								ROUTE_west_door  = {ROUTE_split_stairs  = {},},
							},
						},
					},
				},
			},
			ROUTE_main_stairs  =
			{
				ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
				ROUTE_split_mainstairs  =
				{
					ROUTE_split_base  =
					{
						ROUTE_base  =
						{
							ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
						},
					},
				},
			},
			ROUTE_strair_right  =
			{
				ROUTE_south_door  = {ROUTE_split_stairs  = {},},
				ROUTE_west_door  = {},
			},
            ROUTE_tunnel  =
			{
				ROUTE_axis_cp  =
				{
					ROUTE_split_base  =
					{
						ROUTE_base  =
						{
							ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
						},
						ROUTE_split_mainstairs  =
						{
							ROUTE_main_stairs  =
							{
								ROUTE_split_chapel  = {ROUTE_split_stairs  = {},},
							},
						},
					},
				},
			},
		},
		PLANT_Tank_Barrier_1 =
		{
			ROUTE_first_axis  =
			{
				ROUTE_split_s1  =
				{
					ROUTE_split_b1  =
					{
						ROUTE_split_bl1  = {},
						ROUTE_split_bl2  = {},
					},
				},
				ROUTE_split_s2  =
				{
					ROUTE_split_b1  =
					{
						ROUTE_split_bl1  = {},
						ROUTE_split_bl2  = {},
					},
					ROUTE_split_b2  =
					{
						ROUTE_split_br1  = {},
						ROUTE_split_br2  = {},
						ROUTE_split_bl2  = {},
					},
				},
				ROUTE_split_s3  =
				{
					ROUTE_split_s2  = {},
					ROUTE_split_br1  = {},
					ROUTE_split_br2  = {},
					ROUTE_split_b2  = {ROUTE_split_b1  = {},},
				},
			},
		},
		DEFEND_tb2_0 =
		{
			ROUTE_axis_cp  =
			{
				ROUTE_backdoor  =
				{
					ROUTE_split_corner_city  = {ROUTE_split_city  = {},},
				},
			},
		},
		FLAG_chalice =
		{
			ROUTE_axis_palace_spawn  =
			{
				ROUTE_cp_exit_east  = {Weight = 3,},
				ROUTE_main_stairs  = {Weight = 2,},
				ROUTE_strair_right  = {Weight = 3,},
			},
			ROUTE_main_palace  =
			{
				ROUTE_cp_exit_east  = {Weight = 3,},
				ROUTE_main_stairs  = {Weight = 2,},
				ROUTE_strair_right  = {Weight = 3,},
			},
			ROUTE_city_spawn  =
			{
				ROUTE_split_city  = {ROUTE_main_palace  = {},},
				ROUTE_backdoor  = {ROUTE_cp_exit_east  = {},},
			},
			ROUTE_cp_exit_east  =
			{
				ROUTE_east_door  =
				{
					ROUTE_back_stairs_0  =
					{
						ROUTE_back_stairs_1  =
						{
							ROUTE_back_stairs_2  =
							{
								ROUTE_south_door  =
								{
									ROUTE_split_stairs  = {ROUTE_split_chapel  = {},},
								},
								ROUTE_west_door  =
								{
									ROUTE_split_stairs  = {ROUTE_split_chapel  = {},},
								},
							},
						},
					},
				},
			},
            ROUTE_main_stairs  =
			{
				ROUTE_split_chapel  = {},
				ROUTE_split_mainstairs  =
				{
					ROUTE_split_base  =
					{
						ROUTE_base  = {ROUTE_split_chapel  = {},},
					},
				},
			},
			ROUTE_strair_right  =
			{
				ROUTE_south_door  =
				{
					ROUTE_split_stairs  = {ROUTE_split_chapel  = {},},
				},
				ROUTE_west_door  =
				{
					ROUTE_split_stairs  = {ROUTE_split_chapel  = {},},
				},
			},
		},
	};
	MapRoutes["ATTACK_tb1_.*"] = MapRoutes.PLANT_Tank_Barrier_1;
	MapRoutes["DEFEND_tb2_.*"] = MapRoutes.DEFEND_tb2_0;
	Util.Routes(MapRoutes);
};
