//==========================================================================================
//
//	the_port_b1.gm
//
//	Who		When			What
//------------------------------------------------------------------------------------------
//	MickyP		15 September 2010	Initial Script
//	palota		22 May 2011	fixed goal names
//
//==========================================================================================
//
// To Do:
// Routing
//
global Map =
{
	Debug = 0,
	truckstatus = true,  //true = built; false = damaged
	barrier1built = false,
	barrier2built = false,
	truckatbarrier1 = false,
	truckatbarrier2 = false,
	goldsecured = false,
	escort = false,

	// for compat with 'old' versions
	BUILD_Neutral_Command_Post = "BUILD_Neutral_Command_Post",
	BUILD_Sewer_Gate = "BUILD_Sewer_Gate",
	BUILD_Truck = "BUILD_Truck",
	BUILD_Truck_Barrier_1 = "BUILD_Truck_Barrier_1",
	BUILD_Truck_Barrier_2 = "BUILD_Truck_Barrier_2",
	PLANT_Neutral_Command_Post = "PLANT_Neutral_Command_Post",
	PLANT_Port_gate = "PLANT_Port_gate",
	PLANT_Sewer_Gate = "PLANT_Sewer_Gate",
	PLANT_Train_gate = "PLANT_Train_gate",
	PLANT_Truck_Barrier_1 = "PLANT_Truck_Barrier_1",
	PLANT_Truck_Barrier_2 = "PLANT_Truck_Barrier_2",


	Switches =
	{
		outside =
		{
			Enabled = true,
			Priority = 0,
			WaypointName = "outside",
			Timeout = 2000,
			//AimPosition = Vec3(10829.165, 12304.125, 54.814),
			LimitBots = 1,
		},
		inside =
		{
			Enabled = true,
			Priority = 0,
			WaypointName = "inside",
			Timeout = 2000,
			//AimPosition = Vec3(-2037.579, 1107.875, 39.673),
			LimitBots = 1,
		},
		biggate =
		{
			Enabled = true,
			Priority = 0,
			WaypointName = "biggate",
			Timeout = 2000,
			//AimPosition = Vec3(-738.781, 3219.875, 64.059),
			LimitBots = 1,
		},
	},

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

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

	flag_Axis_Captured = function( trigger )
	{
		Util.LimitToTeam(TEAM.AXIS, Map.PLANT_Neutral_Command_Post);
		Util.LimitToTeam(TEAM.AXIS, Map.BUILD_Neutral_Command_Post);
		Util.SetMaxUsers( 4, "CHECKPOINT_flag" );
		Util.MapDebugPrint( "flag_Axis_Captured" );
	},

	flag_Allies_Captured = function( trigger )
	{
		Util.LimitToTeam(TEAM.ALLIES, Map.PLANT_Neutral_Command_Post);
		Util.LimitToTeam(TEAM.ALLIES, Map.BUILD_Neutral_Command_Post);
		Util.SetMaxUsers( 1, "CHECKPOINT_flag" );
		Util.MapDebugPrint( "flag_Allies_Captured" );
	},

	Port_gate_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"FLAG_keycard_flag",
			"CHECKPOINT_flag",
			"CAPPOINT_Keycard",
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Port_Gate.*" );

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Port_Gate.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			Map.BUILD_Truck_Barrier_1,
			Map.BUILD_Truck_Barrier_2,
			"CHECKPOINT_flag",
			"DEFEND_Yard.*",
			"MOUNTMG42_mg42_bank",
			"REPAIRMG42_mg42_bank",
		});

		Util.EnableGoal( Map.BUILD_Neutral_Command_Post );
		Util.EnableGoal( Map.PLANT_Neutral_Command_Post );

		Util.MapDebugPrint( "Port_gate_Destroyed" );
	},

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

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

	keycard_flag_Taken = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Key.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Key.*" );
		Map.cardtaken = true;
		Util.MapDebugPrint( "keycard_flag_Taken" );
	},

	keycard_flag_Returned = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Key.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Key.*" );
		Map.cardtaken = false;
		Util.MapDebugPrint( "keycard_flag_Returned" );
	},

	keycard_flag_Secured = function( trigger )
	{
		sleep(2.8); // Small delay while door opens
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"ATTACK_Key.*",
			"CAPPOINT_Keycard",
			"FLAG_keycard_flag",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"SWITCH_Train_Doors",
			"DEFEND_Truck.*",
		});

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Key.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Truck.*" );

		Util.MapDebugPrint( "keycard_flag_Secured" );
	},

	train_doors_opening = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"SWITCH_Train_Doors",
			"DEFEND_Truck.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.PLANT_Train_gate,
			"ATTACK_Train.*",
		});

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Train.*" );

		Util.MapDebugPrint( "train_doors_opening" );
	},

	Train_gate_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"CAPPOINT_Gold_Battery",
			"FLAG_Gold_Bar",
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Train.*" );

		Util.MapDebugPrint( "Train_gate_Destroyed" );
	},

	Gold_Bar_Taken = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Truck.*" );

		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Train.*" );

		Util.MapDebugPrint( "Gold_Bar_Taken" );
	},

	Gold_Bar_Returned = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Train.*" );

		Util.MapDebugPrint( "Gold_Bar_Returned" );
	},

	Gold_Bar_Secured = function( trigger )
	{
		if ( Map.goldsecured == true)
			{ return; }

		SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_Gold_Bar" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_Radar_Door" );
		Wp.SetWaypointFlag( "train", "closed", true );
		Map.goldsecured = true;
		Util.MapDebugPrint( "Gold_Bar_Secured" );
	},

	Radar_doors_opening = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"DEFEND_Truck.*",
			"SWITCH_Radar_Door",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_radarbox1" );

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Radar.*" );

		Util.MapDebugPrint( "Radar_doors_opening" );
	},

	radarbox1_Taken = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Radar.*" );
		Util.MapDebugPrint( "radarbox1_Taken" );
	},

	radarbox1_Returned = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Radar.*" );
		Util.MapDebugPrint( "radarbox1_Returned" );
	},

	radarbox1_Secured = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"DEFEND_Truck.*",
			"FLAG_radarbox1",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ATTACK_Barrier_1.*",
			Map.BUILD_Truck,
			"ESCORT_Truck",
			Map.PLANT_Truck_Barrier_1,
			Map.PLANT_Truck_Barrier_2,
		});

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Truck.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Barrier_1.*" );
		SetGoalPriority( Map.BUILD_Truck_Barrier_1, 0.91, TEAM.AXIS);
		Map.escort = true;
		Util.MapDebugPrint( "radarbox1_Secured" );
	},

	Truck_Barrier_1_Built = function( trigger )
	{
		if ( Map.truckatbarrier1 == true )
		{
			Map.escort = false;
			SetAvailableMapGoals( TEAM.ALLIES, false, {
				"ESCORT_Truck",
				Map.BUILD_Truck,
			});
		}

		Map.barrier1built = true;
		Util.MapDebugPrint( "Truck_Barrier_1_Built" );
	},

	Truck_Barrier_2_Built = function( trigger )
	{
		if ( Map.truckatbarrier2 == true )
		{
			Map.escort = false;
			SetAvailableMapGoals( TEAM.ALLIES, false, {
				"ESCORT_Truck",
				Map.BUILD_Truck,
			});
		}
		Map.barrier2built = true;
		Util.MapDebugPrint( "Truck_Barrier_2_Built" );
	},

	Truck_Barrier_1_Destroyed = function( trigger )
	{
		if ( Map.truckatbarrier1 == true )
		{
			Map.escort = true;
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.BUILD_Truck );
		}

		if ( Map.truckstatus == true )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_Truck" );
		}

		Map.barrier1built = false;
		Util.MapDebugPrint( "Truck_Barrier_1_Destroyed" );
	},

	Truck_Barrier_2_Destroyed = function( trigger )
	{
		if ( Map.truckatbarrier2 == true )
		{
			Map.escort = true;
			SetAvailableMapGoals( TEAM.ALLIES, true, Map.BUILD_Truck );
		}

		if ( Map.truckstatus == true )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_Truck" );
		}
		Map.barrier2built = false;
		Util.MapDebugPrint( "Truck_Barrier_2_Destroyed" );
	},

	truck_repaired = function( trigger )
	{
		Map.truckstatus = true;

		if ( Map.escort == true )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_Truck" );
		}
		Util.MapDebugPrint( "truck_repaired" );
	},

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

	truck_at_barrier1 = function( trigger )
	{
		if ( Map.barrier1built == true )
		{
			Map.escort = false;
			SetAvailableMapGoals( TEAM.ALLIES, false, {
				"ESCORT_Truck",
				Map.BUILD_Truck,
			});
		}
		Map.truckatbarrier1 = true;
		Util.MapDebugPrint( "truck_at_barrier1" );
	},

	truck_at_barrier2 = function( trigger )
	{
		if ( Map.barrier2built == true )
		{
			Map.escort = false;
			SetAvailableMapGoals( TEAM.ALLIES, false, {
				"ESCORT_Truck",
				Map.BUILD_Truck,
			});
		}
		Map.truckatbarrier2 = true;
		Util.MapDebugPrint( "truck_at_barrier2" );
	},

	truck_past_barrier1 = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"ATTACK_Barrier_1.*",
			Map.PLANT_Truck_Barrier_1,
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Barrier_2.*" );

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Yard.*",
			"DEFEND_Barrier_1.*",
			Map.BUILD_Truck_Barrier_1,
			"MOUNTMG42_mg42_bank",
			"REPAIRMG42_mg42_bank",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Barrier_2.*" );
		SetGoalPriority( Map.BUILD_Truck_Barrier_2, 0.91, TEAM.AXIS);
		Map.truckatbarrier1 = false;
		Util.MapDebugPrint( "truck_past_barrier1" );
	},

	truck_past_barrier2 = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"DEFEND_Barrier_2.*",
			Map.PLANT_Truck_Barrier_2,
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_End.*" );

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Barrier_2.*",
			Map.BUILD_Truck_Barrier_2,
		});
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_End.*" );
		Map.truckatbarrier1 = false;
		Util.MapDebugPrint( "truck_past_barrier2" );
	},

	vehicle_at_location = function( trigger )
	{
		switch(Map.VehicleLocation)
		{
			case 1:
			{
				Map.truck_at_barrier1();
			}
			case 2:
			{
				Map.truck_at_barrier2();
			}
		}
		Util.MapDebugPrint("vehicle at location " + Map.VehicleLocation, true);
	},

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

		if ( vel.z > 0 )
		{
			sleep(1.5);
			Map.Switches.outside.Enabled = true;
			Map.Switches.inside.Enabled = true;
			Map.DoorStatus = 0;
			Util.MapDebugPrint( "side door closed", true );
		}
		else if ( vel.z < 0 )
		{
			Map.Switches.outside.Enabled = false;
			Map.Switches.inside.Enabled = false;
			Map.DoorStatus = 1;
			Util.MapDebugPrint( "side door open", true );
		}
	},

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

		if ( vel.x > 0 )
		{
			sleep(1.5);
			Map.Switches.biggate.Enabled = true;
			Map.DoorStatus = 0;
			Util.MapDebugPrint( "big door closed", true );
		}
		else if ( vel.x < 0 )
		{
			Map.Switches.biggate.Enabled = false;
			Map.DoorStatus = 1;
			Util.MapDebugPrint( "big_door open", true );
		}
	},
};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "^4Allied Command Post constructed. Charge speed increased!", Map.Neutral_Command_Post_Built );
	OnTrigger( "^1Axis Command Post constructed. Charge speed increased!", Map.Neutral_Command_Post_Built );
	OnTrigger( "^1Axis team has destroyed the Allied Command Post!", Map.Neutral_Command_Post_Destroyed );
	OnTrigger( "^4Allied team has destroyed the Axis Command Post!", Map.Neutral_Command_Post_Destroyed );

	OnTrigger( "^1Axis captured the forward spawn!", Map.flag_Axis_Captured );
	OnTrigger( "^4Allies captured the forward spawn!", Map.flag_Allies_Captured );

	OnTrigger( "^4The Allies have destroyed the Port gate!", Map.Port_gate_Destroyed );

	OnTrigger( "Allies have stolen the Keycard!", Map.keycard_flag_Taken );
	OnTrigger( "Flag returned keycard_flag!", Map.keycard_flag_Returned );
	OnTrigger( "^4Allied team has used the keycard!", Map.keycard_flag_Secured );

	OnTrigger( "^3The train doors are opening!", Map.train_doors_opening );
	OnTrigger( "^4The Allies have destroyed the Train gate!", Map.Train_gate_Destroyed );
	OnTrigger( "Allies have stolen The Gold Bar!", Map.Gold_Bar_Taken );
	OnTrigger( "goldrush_axis_gold1_returned", Map.Gold_Bar_Returned );
	OnTrigger( "^4Allied team has secured the first Gold Crate!", Map.Gold_Bar_Secured );

	OnTrigger( "^3The Radar gate are opening!", Map.Radar_doors_opening );
	OnTrigger( "radar_allies_radarw_taken", Map.radarbox1_Taken );
	OnTrigger( "radar_allies_radarw_returned", Map.radarbox1_Returned );
	OnTrigger( "^4Allied team is escaping with the Gold Crate and radar part!", Map.radarbox1_Secured );

	OnTrigger( "^1Axis team have constructed The Sewer Gate", Map.Sewer_Gate_Built );
	OnTrigger( "^4Allied team have destroyed The Sewer Gate", Map.Sewer_Gate_Destroyed );

	OnTrigger( "^1Truck Barrier #1 has been constructed.", Map.Truck_Barrier_1_Built );
	OnTrigger( "^4Truck Barrier #1 has been destroyed.", Map.Truck_Barrier_1_Destroyed );

	OnTrigger( "^1Truck Barrier #2 has been constructed.", Map.Truck_Barrier_2_Built );
	OnTrigger( "^4Truck Barrier #2 has been destroyed.", Map.Truck_Barrier_2_Destroyed );

	OnTrigger( "^4The Truck has been repaired!", Map.truck_repaired );
	OnTrigger( "^1The Truck has been damaged!", Map.truck_damaged );

	OnTrigger( "truck at location", Map.vehicle_at_location );

	OnTrigger( "goldrush_allies_truck_barrier1", Map.truck_past_barrier1 );
	OnTrigger( "goldrush_allies_truck_barrier2", Map.truck_past_barrier2 );

	OnTrigger( "rightdoor_lever1_goto", Map.side_door_trigger );
	OnTrigger( "door_2_goto", Map.big_door_trigger );

	barrier1 = OnTriggerRegion(AABB(-1791.296,-1854.212,1.125,-1525.994,-1785.886,97.373), RegionTrigger.VehicleTrigger);
	barrier2 = OnTriggerRegion(AABB(-2887.417,-685.607,7.125,-2640.125,-623.803,84.741), RegionTrigger.VehicleTrigger);

	// cs: need to detect if these goals exist since color strings have been completely stripped in the latest version
	if (GetGoal(Map.PLANT_Port_gate)==null) {
		Map.BUILD_Neutral_Command_Post = "BUILD_3Neutral_Command_Post";
		Map.BUILD_Sewer_Gate = "BUILD_3Sewer_Gate";
		Map.BUILD_Truck = "BUILD_3Truck";
		Map.BUILD_Truck_Barrier_1 = "BUILD_3Truck_Barrier_1";
		Map.BUILD_Truck_Barrier_2 = "BUILD_3Truck_Barrier_2";
		Map.PLANT_Neutral_Command_Post = "PLANT_3Neutral_Command_Post";
		Map.PLANT_Port_gate = "PLANT_3Port_gate";
		Map.PLANT_Sewer_Gate = "PLANT_3Sewer_Gate";
		Map.PLANT_Train_gate = "PLANT_3Train_gate";
		Map.PLANT_Truck_Barrier_1 = "PLANT_3Truck_Barrier_1";
		Map.PLANT_Truck_Barrier_2 = "PLANT_3Truck_Barrier_2";
	}

	Util.DisableGoal( ".*", true ); // all but routes
	Util.EnableGoal( "AMMOCAB.*" );
	Util.EnableGoal( "HEALTHCAB.*" );

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		Map.PLANT_Port_gate,
		"ATTACK_Port_Gate.*",
	});

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

	// Max users per goal
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );

	Util.SetGoalOffset( 100, 0, 0, Map.PLANT_Train_gate );

	SetGoalPriority( "DEFEND_Yard.*", 0.49, TEAM.AXIS);

	Wp.SetWaypointFlag( "train", "closed", false );


	// Camp times
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=10, MaxCampTime=60} );

	Util.UpdateSwitchData();

	MapRoutes =
	{
		DEFEND_Port_Gate_1 =
		{
			ROUTE_Axis_Top_Spawn  =
			{
				ROUTE_Spiril_Stairs  =
				{
				},
				ROUTE_Boat_Beam  =
				{
				},
				ROUTE_Port_Wood_Stairs  =
				{
					ROUTE_Boat_Side  =
					{
					},
					ROUTE_Port_Gate_Entry  =
					{
					},
				},
			},
		},
		CHECKPOINT_flag =
		{
			ROUTE_Gate_Spawn  =
			{
				ROUTE_Lever_Door  =
				{
				},
				ROUTE_Crane_Exit  =
				{
				},
			},
			ROUTE_Axis_Yard_Spawn  =
			{
				ROUTE_Yard_South_Door  =
				{
				},
				ROUTE_Yard_North_Exit  =
				{
				},
			},
		},
		CAPPOINT_Keycard =
		{
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Flag_East  =
				{
				},
				ROUTE_West_Flag  =
				{
				},
			},
		},
		DEFEND_Radar_1 =
		{
			ROUTE_Axis_Yard_Spawn  =
			{
				ROUTE_Yard_South_Door  =
				{
					ROUTE_Yard_South_Ladder  =
					{
					},
				},
				ROUTE_Yard_North_Exit  =
				{
					ROUTE_Yard_North_Ladder  =
					{
					},
				},
			},
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Flag_East  =
				{
				},
				ROUTE_West_Flag  =
				{
				},
			},
		},
		DEFEND_Barrier_1_1 =
		{
			ROUTE_Axis_Yard_Spawn  =
			{
				ROUTE_Yard_North_Exit  =
				{
				},
				ROUTE_Yard_South_Door  =
				{
				},
			},
		},
		ATTACK_Barrier_1_1 =
		{
			ROUTE_Flag_Spawn  =
			{
			},
			ROUTE_Flag_East  =
			{
			},
			ROUTE_Flag_Side  =
			{
			},
		},
		DEFEND_Barrier_2_1 =
		{
			ROUTE_Axis_Yard_Spawn  =
			{
				ROUTE_Yard_North_Exit  =
				{
				},
				ROUTE_Yard_South_Door  =
				{
				},
			},
			ROUTE_Flag_Spawn  =
			{
				ROUTE_West_Flag  =
				{
				},
				ROUTE_Flag_East  =
				{
				},
				ROUTE_Flag_Side  =
				{
				},
			},
		},
		DEFEND_Truck_1 =
		{
			ROUTE_Axis_Yard_Spawn  =
			{
				ROUTE_Yard_North_Exit  =
				{
				},
				ROUTE_Yard_South_Door  =
				{
				},
			},
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Flag_East  =
				{
				},
				ROUTE_West_Flag  =
				{
				},
			},
		},
		FLAG_radarbox1 =
		{
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Flag_East  =
				{
					ROUTE_Yard_North_Ladder  =
					{
					},
					ROUTE_Yard_South_Ladder  =
					{
					},
				},
				ROUTE_West_Flag  =
				{
					ROUTE_Yard_North_Ladder  =
					{
					},
					ROUTE_Yard_South_Ladder  =
					{
					},
				},
			},
			ROUTE_Switches  =
			{
				ROUTE_Yard_South_Ladder  =
				{
				},
				ROUTE_Yard_North_Ladder  =
				{
				},
			},
		},
		DEFEND_End_1 =
		{
			ROUTE_Axis_Yard_Spawn  =
			{
				ROUTE_Yard_North_Exit  =
				{
				},
				ROUTE_Yard_South_Door  =
				{
				},
			},
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Flag_Side  =
				{
				},
				ROUTE_West_Flag  =
				{
				},
				ROUTE_Flag_East  =
				{
				},
			},
		},
		CAPPOINT_Gold_Battery =
		{
			ROUTE_Gold_Bar  =
			{
				ROUTE_Truck_Front  =
				{
				},
				ROUTE_Main_Yard_Path  =
				{
				},
			},
			ROUTE_Radar_Parts  =
			{
				ROUTE_North_Wall_Drop  =
				{
					ROUTE_Truck_Front  =
					{
					},
					ROUTE_Main_Yard_Path  =
					{
					},
				},
				ROUTE_Empty_Train_Top  =
				{
					ROUTE_Truck_Front  =
					{
					},
					ROUTE_Main_Yard_Path  =
					{
					},
				},
			},
		},
	};

	portGate =
	{
		ROUTE_Allies_1st_Spawn  =
		{
			ROUTE_Port_Gate_Passage  =
			{
			},
			ROUTE_Wire_Reels  =
			{
				ROUTE_Boat_Side  =
				{
				},
				ROUTE_Port_Gate_Entry  =
				{
				},
			},
			ROUTE_Lighthouse_Path  =
			{
				ROUTE_Port_Gate_Entry  =
				{
				},
				ROUTE_Boat_Side  =
				{
				},
			},
		},
	};
	MapRoutes[Map.PLANT_Port_gate] = portGate;
	MapRoutes.ATTACK_Port_Gate_1 = portGate;
	MapRoutes.ATTACK_Port_Gate_2 = portGate;
	MapRoutes.ATTACK_Port_Gate_3 = portGate;
	MapRoutes.ATTACK_Port_Gate_4 = portGate;
	MapRoutes.ATTACK_Port_Gate_5 = portGate;
	MapRoutes.ATTACK_Port_Gate_6 = portGate;
	MapRoutes.DEFEND_Port_Gate_2 = MapRoutes.DEFEND_Port_Gate_1;
	MapRoutes.DEFEND_Port_Gate_3 = MapRoutes.DEFEND_Port_Gate_1;
	MapRoutes.DEFEND_Port_Gate_4 = MapRoutes.DEFEND_Port_Gate_1;
	MapRoutes.DEFEND_Port_Gate_5 = MapRoutes.DEFEND_Port_Gate_1;
	MapRoutes.DEFEND_Port_Gate_6 = MapRoutes.DEFEND_Port_Gate_1;
	MapRoutes.DEFEND_Port_Gate_7 = MapRoutes.DEFEND_Port_Gate_1;
	MapRoutes.DEFEND_Port_Gate_8 = MapRoutes.DEFEND_Port_Gate_1;
	MapRoutes.ATTACK_Barrier_1_2 = MapRoutes.ATTACK_Barrier_1_1;
	MapRoutes.ATTACK_Barrier_1_3 = MapRoutes.ATTACK_Barrier_1_1;
	MapRoutes.ATTACK_Barrier_1_4 = MapRoutes.ATTACK_Barrier_1_1;
	MapRoutes.ATTACK_Barrier_1_5 = MapRoutes.ATTACK_Barrier_1_1;
	MapRoutes.ATTACK_Barrier_1_6 = MapRoutes.ATTACK_Barrier_1_1;
	MapRoutes.DEFEND_Barrier_1_2 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Barrier_1_3 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Barrier_1_4 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Barrier_1_5 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Barrier_1_6 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Key_1 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Key_2 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Key_3 = MapRoutes.DEFEND_Barrier_1_1;
	MapRoutes.DEFEND_Barrier_2_2 = MapRoutes.DEFEND_Barrier_2_1;
	MapRoutes.DEFEND_Barrier_2_3 = MapRoutes.DEFEND_Barrier_2_1;
	MapRoutes.DEFEND_Barrier_2_4 = MapRoutes.DEFEND_Barrier_2_1;
	MapRoutes.DEFEND_Barrier_2_5 = MapRoutes.DEFEND_Barrier_2_1;
	MapRoutes.DEFEND_Barrier_2_6 = MapRoutes.DEFEND_Barrier_2_1;
	MapRoutes.DEFEND_Barrier_2_7 = MapRoutes.DEFEND_Barrier_2_1;
	MapRoutes.DEFEND_Truck_2 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.DEFEND_Truck_3 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.DEFEND_Truck_4 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.ATTACK_Key_1 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.ATTACK_Key_2 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.ATTACK_Key_3 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.ATTACK_Key_4 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.ATTACK_Key_5 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.ATTACK_Key_6 = MapRoutes.DEFEND_Truck_1;
	MapRoutes.DEFEND_End_2 = MapRoutes.DEFEND_End_1;
	MapRoutes.DEFEND_End_3 = MapRoutes.DEFEND_End_1;
	MapRoutes.DEFEND_End_4 = MapRoutes.DEFEND_End_1;
	MapRoutes.DEFEND_End_5 = MapRoutes.DEFEND_End_1;
	MapRoutes.DEFEND_End_6 = MapRoutes.DEFEND_End_1;
	MapRoutes.DEFEND_End_7 = MapRoutes.DEFEND_End_1;
	MapRoutes.SWITCH_Train_Doors = MapRoutes.DEFEND_Truck_1;
	MapRoutes.SWITCH_Radar_Door = MapRoutes.DEFEND_Truck_1;

	Util.Routes(MapRoutes);

	Util.FixMoverPos("truck", Vec3(-1643.000, -3546.500, -54.500), Vec3(-1642.000, -3692.000, -111.000));

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

global OnBotJoin = function( bot )
{
};
