//==========================================================================================
//
//	tits_b2.gm
//    Thud in the Sand B2
//	Who			     When		           What
//----------------------------------------------------------------------------------------------------
//	[UJE]Niek		14 April 2016	       Initial Script
//	d00d			26 November 2016	       Added Triggers
//	[UJE]Captain	06 April 2017            Added Attack/Defence/Routes and Moore Improvements
//
//====================================================================================================

global Map =
{
	stolenObjectives = 0,
	DynaSecured = false,
	DynaPlaced = false,
	TruckatBarrier = false,
	TruckBarrierBuild = false,
	TruckBuilt = true,
	Roles =
	{
		AXIS = // Team
		{
			AllBots = true,
			DEFENDER = //DEFEND Key
			{
				numbots = 3,
				crucialClass = CLASS.ENGINEER,
			},
			DEFENDER1 = //DEFEND Chevy
			{
				numbots = 4,
				crucialClass = CLASS.ENGINEER,
			},
		},
	},
	Truck_Barrier_Built = function()
	{
	Map.TruckBarrierBuilt = true;

	SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Truck_Barrier");
	if ( Map.TruckatBarrier == true )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Truck_Barrier");
	SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Truck_Barrier");
	}
		Util.MapDebugPrint( "Truck_Barrier_Built" );
	},

	Truck_Barrier_Destroyed = function()
	{
	Map.TruckBarrierBuilt = false;
	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Truck_Barrier");

	if ( Map.TruckatBarrier == true && Map.TruckBuilt == true )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );

	}
		Util.MapDebugPrint( "Truck_Barrier_Destroyed" );
	},

	Hovel_Wall_Destroyed = function()
	{
	      Util.EnableGoal( "ROUTE_ladder" );
		Util.MapDebugPrint( "Hovel_Wall_Destroyed" );
	},

	Truck_Damaged = function()
	{
	Map.TruckBuilt = false;
	SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
	if ( Map.DynaSecured == true && Map.DynaPlaced == false )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Truck");
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Truck" );
	}
		Util.MapDebugPrint( "Truck_Damaged" );
	},

	Truck_Repaired = function()
	{
	Map.TruckBuilt = true;
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Truck" );
	if ( Map.DynaSecured == true && Map.DynaPlaced == false && Map.TruckatBarrier == false )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
	}
		Util.MapDebugPrint( "Truck_Repaired" );
	},

	dynamite1_Taken = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_dynamite1");
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Truck");

		Util.MapDebugPrint( "dynamite1_Taken" );
	},

	dynamite1_Dropped = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Truck");

		Util.MapDebugPrint( "dynamite1_Dropped" );
	},

	dynamite1_Returned = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_dynamite1");
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Truck");

		Util.MapDebugPrint( "dynamite1_Returned" );
	},

	dynamite1_Secured = function()
	{
      Map.DynaSecured = true;
	if ( Map.TruckBuilt == true )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Truck" );
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Truck" );
	}
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Truck");

		Util.MapDebugPrint( "dynamite1_Secured" );
	},

	Dynamite_Placed = function()
	{
	      Map.DynaPlaced = true;
		SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck");
		SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_dynamite");
		Util.MapDebugPrint( "Dynamite_Placed" );
	},

	Gate_Destroyed = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, {"PLANT_Tunnel_Gate","PLANT_Broken.*","ATTACK_tunnel.*"} );
	SetAvailableMapGoals( TEAM.ALLIES, false, {"SWITCH_dynamite","ATTACK_barrier.*"} );

	SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_tunnel.*");
	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_barrier.*");


		Util.MapDebugPrint( "Gate_Destroyed" );
	},

	Broken_Tunnel_Entrance_Destroyed = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_hall.*");
	SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_tunnel.*");

      SetAvailableMapGoals( TEAM.AXIS, true, {"DEFEND_key.*","DEFEND_hall.*"} );
      SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_tunnel.*");

		Util.MapDebugPrint( "Broken_Tunnel_Entrance_Destroyed" );
	},

	Tunnel_Gate_Destroyed = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, {"SWITCH_Anterwinde","ATTACK_hall.*"} );
	SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_tunnel.*");

	SetAvailableMapGoals( TEAM.AXIS, true, {"DEFEND_key.*","DEFEND_hall.*"} );
      SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_tunnel.*");

		Util.MapDebugPrint( "Tunnel_Gate_Destroyed" );
	},

	Rockets_Moving = function()
	{
      SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_Anterwinde");
	SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_key");

		Util.MapDebugPrint( "Rockets_Moving" );
	},

	key_Taken = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_key");
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Flag_key");

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

		Util.MapDebugPrint( "key_Taken" );
	},

	key_Returned = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_key");
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Flag_key");

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

		Util.MapDebugPrint( "key_Returned" );
	},

	key_Secured = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Flag_key");
	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_key.*" );
	sleep(4);
	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"FLAG_money1",
		"FLAG_money2",
		"FLAG_case",
	});
	      ClearGoalRole( "DEFEND_key.*", ROLE.DEFENDER );
		Util.MapDebugPrint( "key_Secured" );
	},

	money1_Taken = function()
	{
	Map.stolenObjectives += 1;
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_money1" );

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

	      Util.MapDebugPrint( "money1_Taken" );
	},

	money1_Returned = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_money1" );
	Map.stolenObjectives -= 1;
	if (Map.stolenObjectives < 1)
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_chevy.*");
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_chevy.*");
	}
		Util.MapDebugPrint( "money1_Returned" );
	},

	money1_Secured = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_money1" );
	Map.stolenObjectives -= 1;
	if (Map.stolenObjectives < 1)
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_chevy.*");
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_chevy.*");
	}
		Util.MapDebugPrint( "money1_Secured" );
	},

	money2_Taken = function()
	{
	Map.stolenObjectives += 1;
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_money2" );

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

	      Util.MapDebugPrint( "money2_Taken" );
	},

	money2_Returned = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_money2" );
	Map.stolenObjectives -= 1;
	if (Map.stolenObjectives < 1)
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_chevy.*");
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_chevy.*");
	}
		Util.MapDebugPrint( "money2_Returned" );
	},

	money2_Secured = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_money2" );
	Map.stolenObjectives -= 1;
	if (Map.stolenObjectives < 1)
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_chevy.*");
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_chevy.*");
	}
		Util.MapDebugPrint( "money2_Secured" );
	},

	case_Taken = function()
	{
	Map.stolenObjectives += 1;
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_chevy" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_case" );

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

		Util.MapDebugPrint( "case_Taken" );
	},

	case_Returned = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_case" );
	Map.stolenObjectives -= 1;
	if (Map.stolenObjectives < 1)
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_chevy.*");
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );

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

		Util.MapDebugPrint( "case_Returned" );
	},

	case_Secured = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_case" );
	Map.stolenObjectives -= 1;
	if (Map.stolenObjectives < 1)
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_chevy.*");
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Chevy" );

	SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_chevy.*");
	}
		Util.MapDebugPrint( "case_Secured" );
	},

	truck_at_corner1 = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_cappoint.*");
	SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_corner.*");

		Util.MapDebugPrint( "truck_at_corner1" );
	},

	truck_at_corner2 = function()
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_barrier.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_corner.*" );

	SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_dyna.*");
	SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_barrier.*" );

		Util.MapDebugPrint( "truck_at_corner2" );
	},
	truck_at_barrier = function()
	{
	Map.TruckatBarrier = true;
	if ( Map.TruckBarrierBuilt == true )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Truck_Barrier" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
	}
	else
	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Truck_Barrier" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
	}
		Util.MapDebugPrint( "truck_at_barrier" );
	},

	Truck_Pass_Barrier = function()
	{
	Map.TruckatBarrier = false;
	SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Truck_Barrier" );

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

		Util.MapDebugPrint( "Truck_Pass_Barrier" );
	},
	 vehicle_at_location = function()
	{
		switch(Map.VehicleLocation)
		{
			case 1:
			{
                  Map.truck_at_corner1();
			}
			case 2:
			{
			Map.truck_at_corner2();
			}
			case 3:
			{
			Map.truck_at_barrier();
			}
		}
		Util.MapDebugPrint("vehicle at location " + Map.VehicleLocation, true);
	},

};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "Allies have stolen Dynamite!", Map.dynamite1_Taken );
	OnTrigger( "^oDynamite has been dropped!", Map.dynamite1_Dropped );
	OnTrigger( "^oDynamite has been returned!", Map.dynamite1_Returned );
	OnTrigger( "^oDynamite has been captured!", Map.dynamite1_Secured );
	OnTrigger( "^oDynamite has been placed into the case!", Map.Dynamite_Placed );
	OnTrigger( "^oThe truck has been repaired!", Map.Truck_Repaired );
	OnTrigger( "^oThe truck has been damaged.", Map.Truck_Damaged );
	OnTrigger( 	"^oThe Allies have destroyed the Hovel Wall!", Map.Hovel_Wall_Destroyed );
      OnTrigger( 	"^oThe Truck has passed the Barrier.", Map.Truck_Pass_Barrier );
	OnTrigger( "^oTruck Barrier has been constructed.", Map.Truck_Barrier_Built );
	OnTrigger( "^oTruck Barrier has been destroyed.", Map.Truck_Barrier_Destroyed );
	OnTrigger( "^oThe Gate has been destroyed!", Map.Gate_Destroyed );
	OnTrigger( "^oThe Allies have destroyed the Tunnel Gate!", Map.Tunnel_Gate_Destroyed );
	OnTrigger( "^oThe Allies have destroyed the Broken Tunnel Entrance!", Map.Broken_Tunnel_Entrance_Destroyed );
	OnTrigger( "^oAllies have started to move rockets.", Map.Rockets_Moving );
	OnTrigger( "^oThe Case has been stolen!", Map.case_Taken );
	OnTrigger( "^oThe Key has been stolen!", Map.key_Taken );
	OnTrigger( "^oMoney Pack 1 has been stolen!", Map.money1_Taken );
	OnTrigger( "^oMoney Pack 2 has been stolen!", Map.money2_Taken );
	OnTrigger( "^oThe Case has been returned!", Map.case_Returned );
	OnTrigger( "^oThe Key has been returned!", Map.key_Returned );
	OnTrigger( "^oMoney Pack 1 has been returned!", Map.money1_Returned );
	OnTrigger( "^oMoney Pack 2 has been returned!", Map.money2_Returned );
	OnTrigger( "^oThe Case has been captured", Map.case_Secured );
	OnTrigger( "^oThe Key has unlocked the Safe!", Map.key_Secured );
	OnTrigger( "^oMoney Pack 1 has been captured!", Map.money1_Secured );
	OnTrigger( "^oMoney Pack 2 has been captured!", Map.money2_Secured );
	TruckatCorner1 = OnTriggerRegion(AABB(407.383,2641.834,209.125,924.053,2690.890,283.125), RegionTrigger.VehicleTrigger);
	TruckatCorner2 = OnTriggerRegion(AABB(3048.156,2654.137,-54.875,3471.283,2701.803,19.127), RegionTrigger.VehicleTrigger);
	TruckatBarrier = OnTriggerRegion(AABB(2804.340,-100.602,-54.875,2860.852,149.970,19.136), RegionTrigger.VehicleTrigger);
	OnTrigger( "truck at location", Map.vehicle_at_location );


	Util.DisableGoal( ".*", true ); // all but routes
	//activation ALLIES
	SetAvailableMapGoals( TEAM.ALLIES, true, {
	"PLANT_Hovel_Wall",
	"ATTACK_cappoint.*",
	"FLAG_dynamite1",
	".*CAB.*",
	});

	//activation AXIS
	SetAvailableMapGoals( TEAM.AXIS, true, {
	"DEFEND_dyna.*",
	"BUILD_Truck_Barrier",
	".*CAB.*",
	});


	// Max users per goal
	//Util.SetMaxUsers( 1, ".*MG42.*" );
	Util.SetMaxUsers( 1, "ATTACK_.*" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 2, "FLAG.*" );
	Util.SetMaxUsers( 1, "CAPPOINT.*" );
	Util.SetMaxUsers( 1, "PLANT.*" );
	Util.SetMaxUsers( 1, "BUILD.*" );
	Util.SetMaxUsers( 1, "SWITCH.*" );
	Util.SetMaxUsers( 1, "ESCORT_truck" );

	// Camp times
	//SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
	SetMapGoalProperties( "DEFEND.*", {MinCampTime=45, MaxCampTime=60} );
      SetMapGoalProperties( "ATTACK.*", {MinCampTime=40, MaxCampTime=60} );

	// Priority
	SetGoalPriority( "PLANT_Hovel_Wall", 0.92 );
	SetGoalPriority( "BUILD_Truck", 0.93 );
	SetGoalPriority( "ESCORT_truck", 0.93 );
	SetGoalPriority( "DEFEND_key.*", 0.95 );
	SetGoalPriority( "DEFEND_chevy.*", 0.95 );
	SetGoalRole("DEFEND_chevy.*", ROLE.DEFENDER1);
	SetGoalRole("DEFEND_key.*", ROLE.DEFENDER);

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

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

global InitializeRoutes = function()
{
	MapRoutes =
	{
		SWITCH_Anterwinde =
		{
			ROUTE_last_spawn_allied  =
			{
				ROUTE_broken_tunnel  =
				{
					ROUTE_hall_windows  =
					{
					},
				},
				ROUTE_tunnel_gate  =
				{
					ROUTE_hall_front  =
					{
					},
					ROUTE_key  =
					{
						ROUTE_spawn_axis_hall  =
						{
						},
					},
				},
			},
		},
		FLAG_key =
		{
			ROUTE_last_spawn_allied  =
			{
				ROUTE_broken_tunnel  =
				{
					ROUTE_hall_windows  =
					{
						ROUTE_spawn_axis_hall  =
						{
							ROUTE_key  =
							{
							},
						},
					},
				},
				ROUTE_tunnel_gate  =
				{
					ROUTE_key  =
					{
					},
					ROUTE_hall_front  =
					{
						ROUTE_spawn_axis_hall  =
						{
							ROUTE_key  =
							{
							},
						},
					},
				},
			},
		},
		FLAG_case =
		{
			ROUTE_last_spawn_allied  =
			{
				ROUTE_broken_tunnel  =
				{
					ROUTE_hall_windows  =
					{
					},
				},
				ROUTE_tunnel_gate  =
				{
					ROUTE_hall_front  =
					{
					},
					ROUTE_key  =
					{
						ROUTE_spawn_axis_hall  =
						{
						},
					},
				},
			},
		},
		FLAG_money1 =
		{
			ROUTE_last_spawn_allied  =
			{
				ROUTE_broken_tunnel  =
				{
					ROUTE_hall_windows  =
					{
					},
				},
				ROUTE_tunnel_gate  =
				{
					ROUTE_hall_front  =
					{
					},
					ROUTE_key  =
					{
						ROUTE_spawn_axis_hall  =
						{
						},
					},
				},
			},
		},
		FLAG_money2 =
		{
			ROUTE_last_spawn_allied  =
			{
				ROUTE_broken_tunnel  =
				{
					ROUTE_hall_windows  =
					{
					},
				},
				ROUTE_tunnel_gate  =
				{
					ROUTE_hall_front  =
					{
					},
					ROUTE_key  =
					{
						ROUTE_spawn_axis_hall  =
						{
						},
					},
				},
			},
		},
		BUILD_Truck =
		{
		      ROUTE_first_spawn_allied  =
			{
				ROUTE_barrier  = {},
				ROUTE_ladder  = {},
				ROUTE_truck  = {},
			},
		},
		FLAG_dynamite1 =
		{
			ROUTE_first_spawn_allied  =
			{
				ROUTE_barrier  = {Weight=3},
				ROUTE_ladder  = {Weight=2},
				ROUTE_truck  = {Weight=1},
			},
		},
		CAPPOINT_Truck =
		{
			ROUTE_dyna  =
			{
			      ROUTE_truck  = {Weight=1},
				ROUTE_barrier  = {Weight=2},
			},
		},
		CAPPOINT_Chevy =
		{
			ROUTE_tree_flags  =
			{
				ROUTE_hall_front  =
				{
					ROUTE_broken_tunnel  =
					{
						ROUTE_chevy  =
						{
						},
					},
					ROUTE_tunnel_gate  =
					{
						ROUTE_key  =
						{
							ROUTE_spawn_axis_hall  =
							{
								ROUTE_hall_windows  =
								{
								},
							},
						},
					},
				},
				ROUTE_hall_windows  =
				{
					ROUTE_chevy  =
					{
					},
				},
			},
		},
		CAPPOINT_Flag_key =
		{
			ROUTE_last_spawn_axis  =
			{
				ROUTE_hall_windows  =
				{
					ROUTE_chevy  =
					{
					},
				},
			},
			ROUTE_tree_flags  =
			{
				ROUTE_hall_front  =
				{
					ROUTE_tunnel_gate  =
					{
						ROUTE_broken_tunnel  =
						{
							ROUTE_chevy  =
							{
							},
						},
					},
				},
				ROUTE_hall_windows  =
				{
					ROUTE_chevy  =
					{
					},
				},
			},
		},
      };
		MapRoutes["DEFEND_tunnel.*"] = {
			ROUTE_last_spawn_axis  =
			{
				ROUTE_spawn_axis_hall  =
				{
					ROUTE_key  =
					{Weight=1,
						ROUTE_tunnel_gate  =
						{
						},
					},
					ROUTE_hall_front  =
					{Weight=3,
						ROUTE_tunnel_gate  =
						{
						},
					},
				},
				ROUTE_hall_windows  =
				{Weight=3,
					ROUTE_broken_tunnel  =
					{
					},
				},
			},
		};
		MapRoutes["DEFEND_dyna.*"] = {
			ROUTE_first_spawn_axis = {
				ROUTE_west = {Weight=3},
				ROUTE_east = {Weight=2},
	     },
	};
	MapRoutes["ATTACK_corner.*"] = MapRoutes.FLAG_dynamite1;

	Util.Routes(MapRoutes);
};
