//==========================================================================================
//
//	siwa_teuthonia.gm
//
//	Who      	When			What
//------------------------------------------------------------------------------------------
//	Qiki		06 March 2016		Initial Script
//	Native12	01.06.2016		Script for incomplete version of map
//	Native12	06.08.2016		Released for the current version of the map, fixed stuckages
//
//==========================================================================================
//

global Map =
{
	DontDispenseAmmo = true,

	WaterPump_Dyno = 0,
	Siwa_Wall_Dyno = 0,
	Siwa_Side_Entrance_Dyno = 0,
	DropzoneFenceLowered = false,
	SiwaSideEntranceDestroyed = false,
	SiwaWallDestroyed = false,
	AmmoLanded = false,
	AmmoTaken = false,
	WaterTunnelReady = false,
	Water_Level = 1,
	ArtilleryGunDestroyed = true,
	AlliedCPBuilt = false,
	AmmoSecured = false,
	AlliesDestroyedGate = false,

	Roles =
	{
		AXIS =
		{
			AllBots = true, // each bot is considered for a role
			DEFENDER =
			{
				numbots = 5,
				crucialClass = CLASS.ENGINEER,
			},
			DEFENDER1 =
			{
				numbots = 5,
				crucialClass = CLASS.FIELDOPS,
			},
			DEFENDER2 =
			{
				numbots = 5,
				crucialClass = CLASS.ENGINEER,
			},
			DEFENDER3 =
			{
				numbots = 5,
				crucialClass = CLASS.FIELDOPS,
			},
		},

		ALLIES =
		{
			AllBots = true, // each bot is considered for a role
			ATTACKER =
			{
				numbots = 5,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER1 =
			{
				numbots = 5,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER2 =
			{
				numbots = 5,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER3 =
			{
				numbots = 5,
				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);
			},
		},
	},

	SetSpawn1 = function(bot)
	{
		if (bot.GetTeam() == TEAM.ALLIES)
		{
			if ( Map.AlliedCPBuilt )
			{
				bot.ChangeSpawnPoint(4);
			}
			else
			{
				bot.ChangeSpawnPoint(0);
			}
		}
		if (bot.GetTeam() == TEAM.AXIS)
		{
			if ( !Map.SiwaWallDestroyed and Map.SiwaSideEntranceDestroyed )
			{
				if ( bot.HasRole(ROLE.DEFENDER) or bot.HasRole(ROLE.DEFENDER1) )
				{
					bot.ChangeSpawnPoint(5);
				}
			}
		}
	},

	SetSpawn = function()
	{
		foreach(bot in BotTable)
		{
			Map.SetSpawn1(bot);
		}
	},

	oldcityflag_Allies_Captured = function()
	{
		if ( !Map.SiwaWallDestroyed and Map.SiwaSideEntranceDestroyed )
		{
			SetGoalRole( "CHECKPOINT_oldcityflag", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
		}

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

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

		Util.MapDebugPrint( "oldcityflag_Allies_Captured" );
	},

	oldcityflag_Axis_Captured = function()
	{
		if ( !Map.SiwaWallDestroyed and Map.SiwaSideEntranceDestroyed )
		{
			SetGoalRole( "CHECKPOINT_oldcityflag", { ROLE.ATTACKER2, ROLE.ATTACKER3 } );
		}

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

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

		Util.MapDebugPrint( "oldcityflag_Axis_Captured" );
	},

	Dropzone_fence_lowered = function()
	{
		Map.DropzoneFenceLowered = true;

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

		Wp.SetWaypointFlag( "Drop_Zone_0", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_1", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_2", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_3", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_4", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_5", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_6", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_7", "closed", false );
		Wp.SetWaypointFlag( "Drop_Zone_8", "closed", false );
		Wp.SetWaypointFlag( "Drop-Zone_9", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_10", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_11", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_12", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_13", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_14", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_15", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_16", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_17", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_18", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_19", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_20", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_21", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_22", "blockwall", false );
		Wp.SetWaypointFlag( "Drop-Zone_23", "blockwall", false );

		if ( ( Map.SiwaWallDestroyed or Map.SiwaSideEntranceDestroyed ) and !Map.AmmoLanded )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allies_DropZonePlace" );
		}

		Util.MapDebugPrint( "Dropzone_fence_lowered" );
	},

	Water_Pump_Built = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Water_Pump" );

		if ( !Map.AmmoSecured )		//Focus on defend
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Water_Pump" );
		}

		Util.MapDebugPrint( "Water_Pump_Built" );
	},

	Water_Pump_Planted = function()
	{
		Map.WaterPump_Dyno += 1;

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

		if ( Map.AmmoSecured )		//Focus on attack
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Water_Pump_.*" );
		}

		Util.MapDebugPrint( "Water_Pump_Planted" );
	},

	Water_Pump_Defused = function()
	{
		Map.WaterPump_Dyno -= 1;

		Util.MapDebugPrint( "Water_Pump_Defused" );
	},

	Water_Pump_Destroyed = function()
	{
		Map.WaterPump_Dyno = 0;

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

		if ( !Map.AmmoSecured )		//Focus on attack
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Water_Pump" );
		}

		Util.MapDebugPrint( "Water_Pump_Destroyed" );
	},

	Siwa_Wall_Planted = function()
	{
		Map.Siwa_Wall_Dyno += 1;

		SetGoalPriority( "DEFUSE_Siwa_Wall_.*", 1.05, TEAM.AXIS, CLASS.ENGINEER );

		Util.MapDebugPrint( "Siwa_Wall_Planted" );
	},

	Siwa_Wall_Defused = function()
	{
		Map.Siwa_Wall_Dyno -= 1;

		Util.MapDebugPrint( "Siwa_Wall_Defused" );
	},

	Siwa_Wall_Destroyed = function()
	{
		if ( Map.Siwa_Wall_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Siwa_Wall_.*" );
		}

		Map.Siwa_Wall_Dyno = 0;

		Map.SiwaWallDestroyed = true;

		Util.EnableGoal( "ROUTE_SiwaWall_1" );

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

		//Setting Axis autospawn to Axis Siwa
		Util.DisableGoal( {
			"CHECKPOINT_oldcityflag",
			".*_OldCity_.*",
		});

		SetGoalPriority( "DEFEND_Axis_DropZone_.*", 0.51, TEAM.AXIS, 0 );
		ClearGoalRole( "MOBILEMG42_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
		ClearGoalRole( "CALLARTILLERY_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
		ClearGoalRole( "ARTILLERY_S_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
		ClearGoalRole( "PLANTMINE_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );

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

		if ( !Map.AmmoTaken )
		{
			SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_DropZone_.*" );
		}

		Util.MapDebugPrint( "Siwa_Wall_Destroyed" );

		sleep(2);

		ClearGoalRole( "FLAG_box_obj2", { ROLE.ATTACKER, ROLE.ATTACKER1} );
		ClearGoalRole( "ATTACK_Allies_DropZonePlace", { ROLE.ATTACKER, ROLE.ATTACKER1 } );
		ClearGoalRole( "BUILD_artillery_gun", { ROLE.ATTACKER, ROLE.ATTACKER1 } );
		ClearGoalRole( "BUILD_Allied_CP", { ROLE.ATTACKER, ROLE.ATTACKER1 } );

		Util.SetMaxUsers( 4, "BUILD_artillery_gun" );

		if ( Map.DropzoneFenceLowered and !Map.AmmoLanded )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"ATTACK_Allies_DropZonePlace",
				".*_Allies_DropZone_.*",
			});
		}

		if ( Map.AmmoLanded and !Map.AmmoTaken )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_box_obj2" );
		}

		if ( Map.ArtilleryGunDestroyed )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_artillery_gun" );
		}

		if ( !Map.AlliedCPBuilt )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_CP" );
		}
	},

	siwa_side_entrance_Planted = function()
	{
		Map.Siwa_Side_Entrance_Dyno += 1;

		Util.MapDebugPrint( "siwa_side_entrance_Planted" );
	},

	siwa_side_entrance_Defused = function()
	{
		Map.Siwa_Side_Entrance_Dyno -= 1;

		Util.MapDebugPrint( "siwa_side_entrance_Defused" );
	},

	siwa_side_entrance_Destroyed = function()
	{
		if ( Map.Siwa_Side_Entrance_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_siwa_side_entrance_.*" );
		}

		Map.Siwa_Side_Entrance_Dyno = 0;

		Map.SiwaSideEntranceDestroyed = true;

		Map.SetSpawn();

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

		Util.EnableGoal( "ROUTE_SiwaSideEntrance" );

		if ( !Map.SiwaWallDestroyed )
		{
			ClearGoalRole( "DEFEND_Axis_OldCity_1.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
			SetGoalRole( "DEFEND_Axis_OldCity_1.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			SetGoalRole( "CALLARTILLERY_Axis_OldCity_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			SetGoalRole( "ARTILLERY_S_Axis_OldCity_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			SetGoalRole( "MOBILEMG42_Axis_OldCity_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			SetGoalRole( "PLANTMINE_Axis_OldCity_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );

			SetGoalPriority( "DEFEND_Axis_DropZone_.*", 0.6, TEAM.AXIS, 0 );
			SetGoalRole( "MOBILEMG42_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
			SetGoalRole( "CALLARTILLERY_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
			SetGoalRole( "ARTILLERY_S_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
			SetGoalRole( "PLANTMINE_Axis_DropZone_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_Axis_DropZone_2.*",
				"MOBILEMG42_Axis_DropZone_.*",
				"CALLARTILLERY_Axis_DropZone_.*",
				"ARTILLERY_S_Axis_DropZone_.*",
				"PLANTMINE_Axis_DropZone_.*",
			});
		}

		Util.MapDebugPrint( "siwa_side_entrance_Destroyed" );

		sleep(2);

		if ( !Map.SiwaWallDestroyed )
		{
			SetGoalRole( "ATTACK_Allies_DropZonePlace", { ROLE.ATTACKER, ROLE.ATTACKER1 } );
			SetGoalRole( "FLAG_box_obj2", { ROLE.ATTACKER, ROLE.ATTACKER1 } );
			SetGoalRole( "BUILD_artillery_gun", { ROLE.ATTACKER, ROLE.ATTACKER1 } );
			SetGoalRole( "BUILD_Allied_CP", { ROLE.ATTACKER, ROLE.ATTACKER1 } );

			if ( Map.DropzoneFenceLowered and !Map.AmmoLanded )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"ATTACK_Allies_DropZonePlace",
					".*_Allies_DropZone_0.*",
				});
			}

			if ( Map.AmmoLanded and !Map.AmmoTaken )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_box_obj2" );
			}

			if ( Map.ArtilleryGunDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_artillery_gun" );
			}

			if ( !Map.AlliedCPBuilt )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_CP" );
			}
		}
	},

	Allied_CP_Built = function()
	{
		Map.AlliedCPBuilt = true;

		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Allied_CP" );
		Map.SetSpawn();

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

		Util.MapDebugPrint( "Allied_CP_Built" );
	},

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

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

	Allied_CP_Destroyed = function()
	{
		Map.AlliedCPBuilt = false;

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

		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_CP" );
		Map.SetSpawn();

		Util.MapDebugPrint( "Allied_CP_Destroyed" );
	},

	Axis_CP_Built = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Axis_CP" );

		Util.MapDebugPrint( "Axis_CP_Built" );
	},

	Axis_CP_Planted = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Axis_CP_.*" );

		Util.MapDebugPrint( "Axis_CP_Planted" );
	},

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

	Axis_CP_Destroyed = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_CP" );

		Util.MapDebugPrint( "Axis_CP_Destroyed" );
	},

	artillery_gun_Built = function()
	{
		Map.ArtilleryGunDestroyed = false;

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

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

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

		if ( Map.AmmoSecured )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_GunRotateControl" );
		}

		Util.MapDebugPrint( "artillery_gun_Built" );
	},

	artillery_gun_Planted = function()
	{
		Util.SetMaxUsers( 2, "DEFUSE_artillery_gun_.*" );

		Util.MapDebugPrint( "artillery_gun_Planted" );
	},

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

	artillery_gun_Destroyed = function()
	{
		Map.ArtilleryGunDestroyed = true;

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

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

		if ( Map.AmmoSecured )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_GunRotateControl" );
		}

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

		Util.MapDebugPrint( "artillery_gun_Destroyed" );
	},

	Ammo_landed = function()
	{
		Map.AmmoLanded = true;

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

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

		Util.MapDebugPrint( "Ammo_landed" );
	},

	box_obj2_Taken = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Axis_DropZone_.*",
			"PLANTMINE_Axis_DropZone_.*",
			"CALLARTILLERY_Axis_DropZone_.*",
		});

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			".*_Allies_DropZone_.*",
			"FLAG_box_obj2",
		});

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

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"CAPPOINT_Artillery_Gun",
			".*_Allies_Gun_.*",
		});

		if ( !Map.AmmoTaken )
		{
			Map.AmmoTaken = true;

			Util.MapDebugPrint( "box_obj2_Taken" );

			sleep(4);

			if ( Map.AmmoTaken )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_DropZone_.*" );
			}
		}
	},

	box_obj2_Returned = function()
	{
		Map.AmmoTaken = false;

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

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"CAPPOINT_Artillery_Gun",
			".*_Allies_Gun_.*",
		});

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

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			".*_Allies_DropZone_.*",
			"FLAG_box_obj2",
		});

		Util.MapDebugPrint( "box_obj2_Returned" );
	},

	box_obj2_Secured = function()
	{
		Map.AmmoSecured = true;

		Util.SetMaxUsers( 1, "PLANT_Water_Pump" );
		SetGoalPriority( "PLANT_Water_Pump", 0.78, TEAM.AXIS, 0 );

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

		if ( !Map.ArtilleryGunDestroyed )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_GunRotateControl" );
		}

		Util.MapDebugPrint( "box_obj2_Secured" );
	},

	Gun_Ready = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_artillery_gun" );

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

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

		Util.MapDebugPrint( "Gun_Ready" );
	},

	Allies_win = function()
	{
		Map.AlliesDestroyedGate = true;

		ETUtil.WinningChat( TEAM.ALLIES );
		ETUtil.LosingChat( TEAM.AXIS );

		Util.MapDebugPrint( "Allies_win" );
	},

	Thirty_second = function()
	{

		Util.MapDebugPrint( "^5Thirty_second" );

		sleep(30);

		if ( !Map.AlliesDestroyedGate )
		{
			Util.MapDebugPrint( "^5Axis_Win" );

			ETUtil.WinningChat( TEAM.AXIS );
			ETUtil.LosingChat( TEAM.ALLIES );
		}
	},

	Water_Level_Thread = function()
	{
		start = Vector3(4542.152, -1894.459, -80);
		end = Vector3(4544.021, -1830.742, -80);
		Util.MapDebugPrint("^5Water_Level_Thread started");
		while (1)
		{
			tr = TraceLine(start, end, null, TRACE.ALL, 0, false);
			if(tr.fraction < 1)
			{
				if ( Map.Water_Level == 1 )
				{
					Map.Water_Level = 0;

					Wp.SetWaypointFlag( "Water_Tunnel_1", "closed", true );
					Wp.SetWaypointFlag( "Water_Tunnel_2", "closed", true );

					Util.DisableGoal( "ROUTE_WaterTunnel_1" );
					Util.DisableGoal( "ROUTE_WaterTunnel_2" );
					Util.DisableGoal( "ROUTE_WaterTunnel_3" );

					Util.MapDebugPrint("THREAD - Tunnel flooded");
				}

				Map.WaterTunnelReady = false;

				if ( Map.Debug )
				{
					DrawDebugLine( start, end, COLOR.RED, 1 );
				}
			}
			else
			{
				if ( Map.Water_Level == 0 )
				{
					Map.Water_Level = 1;

					Wp.SetWaypointFlag( "Water_Tunnel_1", "closed", false );
					Wp.SetWaypointFlag( "Water_Tunnel_2", "closed", false );

					Util.EnableGoal( "ROUTE_WaterTunnel_1" );
					Util.EnableGoal( "ROUTE_WaterTunnel_2" );
					Util.EnableGoal( "ROUTE_WaterTunnel_3" );

					Util.MapDebugPrint("THREAD - Tunnel drained");
				}

				Map.WaterTunnelReady = true;

				if ( Map.Debug )
				{
					DrawDebugLine( start, end, COLOR.GREEN, 1 );
				}
			}
			yield();
		}
	},

};

global OnMapLoad = function()
{
	OnTrigger( "^2Allied Command Post constructed. Alternative Spawn created!", Map.Allied_CP_Built );
	OnTrigger( "Planted at the Allied CP.", Map.Allied_CP_Planted );
	OnTrigger( "Planted at Allied CP.", Map.Allied_CP_Planted );	//Nitmod
	OnTrigger( "Defused at the Allied CP.", Map.Allied_CP_Defused );
	OnTrigger( "Defused at Allied CP.", Map.Allied_CP_Defused );	//Nitmod
	OnTrigger( "^1 The Axis have destroyed the Allied Command Post!", Map.Allied_CP_Destroyed );
	OnTrigger( "axis_hq_compost_constructed", Map.Axis_CP_Built );
	OnTrigger( "Planted at the Axis CP.", Map.Axis_CP_Planted );
	OnTrigger( "Planted at Axis CP.", Map.Axis_CP_Planted );	//Nitmod
	OnTrigger( "Defused at the Axis CP.", Map.Axis_CP_Defused );
	OnTrigger( "Defused at Axis CP.", Map.Axis_CP_Defused );	//Nitmod
	OnTrigger( "^2Allies have destroyed the Axis Command Post!", Map.Axis_CP_Destroyed );
	OnTrigger( "^2Water Pump constructed", Map.Water_Pump_Built );
	OnTrigger( "Planted at the Water Pump.", Map.Water_Pump_Planted );
	OnTrigger( "Planted at Water Pump.", Map.Water_Pump_Planted );	//Nitmod
	OnTrigger( "Defused at the Water Pump.", Map.Water_Pump_Defused );
	OnTrigger( "Defused at Water Pump.", Map.Water_Pump_Defused );	//Nitmod
	OnTrigger( "^1Water Pump destroyed!", Map.Water_Pump_Destroyed );
	OnTrigger( "^2the gun has been repaired", Map.artillery_gun_Built );
	OnTrigger( "Planted at the artillery gun.", Map.artillery_gun_Planted );
	OnTrigger( "Planted at artillery gun.", Map.artillery_gun_Planted );	//Nitmod
	OnTrigger( "Defused at the artillery gun.", Map.artillery_gun_Defused );
	OnTrigger( "Defused at artillery gun.", Map.artillery_gun_Defused );	//Nitmod
	OnTrigger( "^1the gun has been destroyed", Map.artillery_gun_Destroyed );
	OnTrigger( "Planted at the Siwa Wall.", Map.Siwa_Wall_Planted );
	OnTrigger( "Planted at Siwa Wall.", Map.Siwa_Wall_Planted );	//Nitmod
	OnTrigger( "Defused at the Siwa Wall.", Map.Siwa_Wall_Defused );
	OnTrigger( "Defused at Siwa Wall.", Map.Siwa_Wall_Defused );	//Nitmod
	OnTrigger( "^2Allies have breached the Siwa wall", Map.Siwa_Wall_Destroyed );
	OnTrigger( "Planted at the siwa side entrance.", Map.siwa_side_entrance_Planted );
	OnTrigger( "Planted at siwa side entrance.", Map.siwa_side_entrance_Planted );	//Nitmod
	OnTrigger( "Defused at the siwa side entrance.", Map.siwa_side_entrance_Defused );
	OnTrigger( "Defused at siwa side entrance.", Map.siwa_side_entrance_Defused );	//Nitmod
	OnTrigger( "^2Allies have breached the siwa side entrance", Map.siwa_side_entrance_Destroyed );
	OnTrigger( "teuthonia_allies_ammo_ld", Map.Ammo_landed );
	OnTrigger( "^2Allies picked up the ammo box", Map.box_obj2_Taken );
	OnTrigger( "^1Axis returned the ammo box", Map.box_obj2_Returned );
	OnTrigger( "^2Ammo box delivered - Gun has been loaded", Map.box_obj2_Secured );
	OnTrigger( "^1Axis re-captured siwa spawn", Map.oldcityflag_Axis_Captured );
	OnTrigger( "^2Allies captured the siwa spawn", Map.oldcityflag_Allies_Captured );
	OnTrigger( "^2Dropzone fence lowered", Map.Dropzone_fence_lowered );
	OnTrigger( "^2the gun is ready to be fired", Map.Gun_Ready );
	OnTrigger( "^1Allies destroyed the gate to Teuthonia", Map.Allies_win );
	OnTrigger( "thirty second warning.", Map.Thirty_second );

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

	Util.DisableGoal( "ROUTE_WaterTunnel_1" );
	Util.DisableGoal( "ROUTE_WaterTunnel_2" );
	Util.DisableGoal( "ROUTE_WaterTunnel_3" );
	Util.DisableGoal( "ROUTE_SiwaSideEntrance" );
	Util.DisableGoal( "ROUTE_SiwaWall_1" );


	Util.SetGoalRange("HEALTHCAB_south_healthcabinet.*", 2000);
	Util.SetGoalRange("AMMOCAB_south_ammocabinet.*", 2000);

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

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"CHECKPOINT_oldcityflag",
		"SWITCH_Dropzone_Fence",
		"BUILD_Water_Pump",
		"PLANT_Siwa_Wall",
		"PLANT_siwa_side_entrance",
		".*_Allies_OldCity_.*",
	});

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

	Wp.SetWaypointFlag( "GRC_WP", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_0", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_1", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_2", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_3", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_4", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_5", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_6", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_7", "closed", true );
	Wp.SetWaypointFlag( "Drop_Zone_8", "closed", true );
	Wp.SetWaypointFlag( "Drop-Zone_9", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_10", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_11", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_12", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_13", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_14", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_15", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_16", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_17", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_18", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_19", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_20", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_21", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_22", "blockwall", true );
	Wp.SetWaypointFlag( "Drop-Zone_23", "blockwall", true );

	SetGoalRole( "PLANT_.*_CP", ROLE.INFILTRATOR );

	SetGoalRole( "DEFEND_Axis_OldCity_1.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
	SetGoalRole( "DEFEND_Axis_OldCity_2.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
	SetGoalRole( "DEFEND_Axis_DropZone_2.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
	SetGoalRole( "DEFEND_Axis_DropZone_3.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
	SetGoalRole( "DEFEND_Axis_Gun_2.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
	SetGoalRole( "DEFEND_Axis_Gun_3.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );

	SetGoalRole( "ATTACK_Allies_DropZone_0.*", { ROLE.ATTACKER, ROLE.ATTACKER1 } );
	SetGoalRole( "FLAG_box_obj2", { ROLE.ATTACKER, ROLE.ATTACKER1 } );
	SetGoalRole( "ATTACK_Allies_DropZone_1.*", { ROLE.ATTACKER2, ROLE.ATTACKER3 } );

	SetGoalPriority( "DEFEND_Axis_DropZone_.*", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_Gun_.*", 0.52, TEAM.AXIS, 0 );
	SetGoalPriority( "CALLARTILLERY_Axis_.*", 0.69, TEAM.AXIS, 0 );
	SetGoalPriority( "ARTILLERY_S_Axis_.*", 0.69, TEAM.AXIS, 0 );

	SetGoalPriority( "BUILD_Water_Pump", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_siwa_side_entrance", 0.83, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Siwa_Wall", 0.84, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "ATTACK_Allies_DropZone_.*", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_Allies_DropZonePlace", 0.55, TEAM.ALLIES, 0 );

	Util.AddUseWp( "PLANT_Water_Pump", "Plant_WaterPump_WP" );
	Util.AddUseWp( "BUILD_Water_Pump", "Water_Pump_Build_WP" );
	Util.AddUseWp( "PLANT_Siwa_Wall", "SiwaWallFront_WP" );
	Util.AddUseWp( "PLANT_Siwa_Wall", "SiwaWallBack_WP" );
	Util.AddUseWp( "PLANT_siwa_side_entrance", "SiwaSideEntranceFront_WP" );
	Util.AddUseWp( "PLANT_siwa_side_entrance", "SiwaSideEntranceBack_WP" );
	Util.AddUseWp( "PLANT_artillery_gun", "Plant_Gun_WP1" );
	Util.AddUseWp( "PLANT_artillery_gun", "Plant_Gun_WP2" );

	Util.AddUseWp( "BUILD_artillery_gun", "Plant_Gun_WP1" );
	Util.AddUseWp( "BUILD_artillery_gun", "Plant_Gun_WP2" );

	Util.SetMaxUsers( 1, "ATTACK_.*" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "SWITCH_Dropzone_Fence" );
	Util.SetMaxUsers( 1, "BUILD_.*_CP" );
	Util.SetMaxUsers( 4, "SWITCH_Gun.*" );
	Util.SetMaxUsers( 2, "BUILD_Water_Pump" );
	Util.SetMaxUsers( 2, "PLANT_Siwa_Wall" );
	Util.SetMaxUsers( 2, "PLANT_Water_Pump" );
	Util.SetMaxUsers( 2, "PLANT_siwa_side_entrance" );
	Util.SetMaxUsers( 2, "BUILD_artillery_gun" );
	Util.SetMaxUsers( 4, "CHECKPOINT_oldcityflag" );
	Util.SetMaxUsers( 4, "ATTACK_Allies_DropZonePlace" );

	RegionTrigger.Create(AABB(783.137,-4078.442,245.128,830.512,-3863.130,320.495 ), "DisableCombatMovement", "Window_1");
	RegionTrigger.Create(AABB(216.963,-3632.867,245.125,413.727,-3580.708,331.249 ), "DisableCombatMovement", "Window_2");
	RegionTrigger.Create(AABB(-190.597,-4087.271,245.126,-143.131,-3866.306,326.037 ), "DisableCombatMovement", "Window_3");
	RegionTrigger.Create(AABB(-188.129,-4836.604,245.126,-143.126,-4631.304,321.167 ), "DisableCombatMovement", "Window_4");
	RegionTrigger.Create(AABB(-165.133,-5623.069,353.127,38.451,-5584.476,427.157 ), "DisableCombatMovement", "Window_5");
	RegionTrigger.Create(AABB(-3141.415,-4474.750,65.125,-3007.371,-4342.874,232.255 ), "DisableCombatMovement", "Jump_On_Truck");
	RegionTrigger.Create(AABB(4628.393,-2808.835,169.125,5201.651,-2675.202,575.017 ), "DisableCombatMovement", "Siwa_Wall");
	RegionTrigger.Create(AABB(5035.125,-583.194,425.314,5162.856,-417.212,608.547 ), "DisableCombatMovement", "Wooden_Crates");

	WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.MORTAR, false );
	WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.FLAMETHROWER, false );

	WeaponTable.SetWeaponTeamAvailability ( TEAM.ALLIES, CLASS.SOLDIER, WEAPON.MOBILE_MG42, false );

	thread(Map.Water_Level_Thread);

	print( "^3Omni-bot map script by ^3by ^1Q^2i^3k^4i ^3and ^1n^2a^4t^8i^3v^5e12^3 ^3for map: ^7" + GetMapName() );

	Util.BotChat( 0, "say", "^3Omni-bot map script ^3by ^1Q^2i^3k^4i ^3and ^1n^2a^4t^8i^3v^5e12 ^3for ^3map ^7" + GetMapName(), 1 );
};

global OnBotJoin = function( bot )
{
	Map.SetSpawn1(bot);
};

global InitializeRoutes = function()
{
	MapRoutes =
	{
		FLAG_box_obj2 =
		{
			ROUTE_OldCity_Spawn =
			{
				ROUTE_WaterTunnel_3 =
				{
					ROUTE_WaterTunnel_2 =
					{
						ROUTE_WaterTunnel_1 =
						{
						},
					},
				},
				ROUTE_SiwaSideEntrance =
				{
					ROUTE_AlliedCP =
					{
						ROUTE_SideWay_2 =
						{
							ROUTE_SideWay_1 =
							{
							},
						},
						ROUTE_FrontWay =
						{
						},
						ROUTE_SideWayLeft_1 =
						{
							ROUTE_SideWayLeft_2 =
							{
							},
						},
					},
				},
				ROUTE_SiwaWall_1 =
				{
					ROUTE_AroundCabinets_3 =
					{
						ROUTE_AroundCabinets_2 =
						{
							ROUTE_AroundCabinets_1 =
							{
								ROUTE_SideWay_2 =
								{
									ROUTE_SideWay_1 =
									{
									},
								},
								ROUTE_FrontWay =
								{
								},
								ROUTE_SideWayLeft_1 =
								{
									ROUTE_SideWayLeft_2 =
									{
									},
								},
							},
						},
					},
				},
			},
			ROUTE_AlliedCP_Spawn =
			{
				ROUTE_AlliedCP =
				{
					ROUTE_SideWay_2 =
					{
						ROUTE_SideWay_1 =
						{
						},
					},
					ROUTE_FrontWay =
					{
					},
					ROUTE_SideWayLeft_1 =
					{
						ROUTE_SideWayLeft_2 =
						{
						},
					},
				},
			},
		},
		SWITCH_GunFireControl =
		{
			ROUTE_OldCity_Spawn =
			{
				ROUTE_SideWay_2 =
				{
					ROUTE_CappointWay_1 =
					{
					},
				},
				ROUTE_SideWayLeft_1 =
				{
					ROUTE_SideWayLeft_2 =
					{
						ROUTE_CappointWay_9 =
						{
							ROUTE_CappointWay_10 =
							{
							},
						},
					},
					ROUTE_FireSwitch_1 =
					{
						ROUTE_FireSwitch_2 =
						{
							ROUTE_CappointWay_10 =
							{
							},
						},
					},
				},
			},
			ROUTE_AlliedCP_Spawn =
			{
				ROUTE_SideWay_2 =
				{
					ROUTE_CappointWay_1 =
					{
					},
				},
				ROUTE_SideWayLeft_1 =
				{
					ROUTE_SideWayLeft_2 =
					{
						ROUTE_CappointWay_9 =
						{
							ROUTE_CappointWay_10 =
							{
							},
						},
					},
					ROUTE_FireSwitch_1 =
					{
						ROUTE_FireSwitch_2 =
						{
							ROUTE_CappointWay_10 =
							{
							},
						},
					},
				},
			},
		},
		CHECKPOINT_oldcityflag =
		{
			ROUTE_AlliedCamp_1 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_OldCitySpawn1 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
			ROUTE_AlliedCamp_2 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_OldCitySpawn1 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
			ROUTE_AlliedCamp_3 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_OldCitySpawn1 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
			ROUTE_AlliedCamp_4 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_OldCitySpawn1 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
		},
		PLANT_Siwa_Wall =
		{
			ROUTE_AlliedCamp_1 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_LeftUpperWay_5 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
			ROUTE_AlliedCamp_2 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_LeftUpperWay_5 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
			ROUTE_AlliedCamp_3 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_LeftUpperWay_5 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
			ROUTE_AlliedCamp_4 =
			{
				ROUTE_LowerWay_1 =
				{
					ROUTE_LowerWay_2 =
					{
						ROUTE_OldCitySpawn =
						{
						},
					},
					ROUTE_LowerRuins_1 =
					{
					},
				},
				ROUTE_LeftUpperWay_1 =
				{
					ROUTE_LeftUpperWay_2 =
					{
						ROUTE_LeftUpperWay_3 =
						{
							ROUTE_LeftUpperWay_4 =
							{
								ROUTE_LeftUpperWay_5 =
								{
								},
							},
						},
					},
				},
				ROUTE_RightUpperWay_1 =
				{
					ROUTE_RightUpperWay_2 =
					{
						ROUTE_RightUpperWay_3 =
						{
							ROUTE_OldCitySpawn =
							{
							},
						},
					},
				},
			},
		},
		CAPPOINT_Artillery_Gun =
		{
			ROUTE_DropzoneArea =
			{
				ROUTE_SideWay_1 =
				{
					ROUTE_CappointWay_1 =
					{
						ROUTE_CappointWay_2 =
						{
						},
					},
					ROUTE_CappointWay_3 =
					{
						ROUTE_CappointWay_4 =
						{
						},
					},
				},
				ROUTE_CappointWay_5 =
				{
					ROUTE_CappointWay_6 =
					{
						ROUTE_CappointWay_7 =
						{
						},
					},
				},
				ROUTE_CappointWay_8 =
				{
					ROUTE_CappointWay_9 =
					{
						ROUTE_CappointWay_10 =
						{
							ROUTE_CappointWay_11 =
							{
							},
						},
					},
				},
			},
		},
		PLANT_Water_Pump =
		{
			ROUTE_AxisSiwa =
			{
				ROUTE_SideWay_1 =
				{
					ROUTE_SideWay_2 =
					{
						ROUTE_WaterTunnel_1 =
						{
							ROUTE_WaterTunnel_2 =
							{
								ROUTE_WaterTunnel_3 =
								{
								},
							},
						},
						ROUTE_AroundCabinets_1 =
						{
							ROUTE_AroundCabinets_2 =
							{
								ROUTE_AroundCabinets_3 =
								{
								},
							},
						},
					},
				},
			},
			ROUTE_DropzoneArea =
			{
				ROUTE_SideWay_1 =
				{
					ROUTE_SideWay_2 =
					{
						ROUTE_WaterTunnel_1 =
						{
							ROUTE_WaterTunnel_2 =
							{
								ROUTE_WaterTunnel_3 =
								{
								},
							},
						},
						ROUTE_AroundCabinets_1 =
						{
							ROUTE_AroundCabinets_2 =
							{
								ROUTE_AroundCabinets_3 =
								{
								},
							},
						},
					},
				},
			},
		},
	};

	MapRoutes[".*_Axis_OldCity_.*"] =
	{
		ROUTE_AxisGarrison =
		{
			ROUTE_SiwaSideEntrance =
			{

			},
			ROUTE_AroundSiwaWall =
			{
				ROUTE_SiwaWallDoor =
				{

				},
			},
		},
	};

	MapRoutes["ATTACK_Allies_Gun_.*"] =
	{
		ROUTE_OldCity_Spawn =
		{
			ROUTE_SiwaSideEntrance =
			{
				ROUTE_SideWay_2 =
				{
					ROUTE_CappointWay_1 =
					{
						ROUTE_CappointWay_2 =
						{
						},
					},
				},
				ROUTE_CappointWay_3 =
				{
					ROUTE_CappointWay_4 =
					{
					},
				},
				ROUTE_CappointWay_5 =
				{
					ROUTE_CappointWay_6 =
					{
						ROUTE_CappointWay_7 =
						{
						},
					},
				},
				ROUTE_SideWayLeft_1 =
				{
					ROUTE_CappointWay_9 =
					{
						ROUTE_CappointWay_10 =
						{
							ROUTE_CappointWay_11 =
							{
							},
						},
					},
				},
			},
			ROUTE_SiwaWall_1 =
			{
				ROUTE_SideWay_2 =
				{
					ROUTE_CappointWay_1 =
					{
						ROUTE_CappointWay_2 =
						{
						},
					},
				},
				ROUTE_CappointWay_3 =
				{
					ROUTE_CappointWay_4 =
					{
					},
				},
				ROUTE_CappointWay_5 =
				{
					ROUTE_CappointWay_6 =
					{
						ROUTE_CappointWay_7 =
						{
						},
					},
				},
				ROUTE_SideWayLeft_1 =
				{
					ROUTE_CappointWay_9 =
					{
						ROUTE_CappointWay_10 =
						{
							ROUTE_CappointWay_11 =
							{
							},
						},
					},
				},
			},
			ROUTE_WaterTunnel_3 =
			{
				ROUTE_WaterTunnel_2 =
				{
					ROUTE_WaterTunnel_1 =
					{
						ROUTE_SideWay_2 =
						{
							ROUTE_CappointWay_1 =
							{
								ROUTE_CappointWay_2 =
								{
								},
							},
						},
						ROUTE_CappointWay_3 =
						{
							ROUTE_CappointWay_4 =
							{
							},
						},
						ROUTE_CappointWay_5 =
						{
							ROUTE_CappointWay_6 =
							{
								ROUTE_CappointWay_7 =
								{
								},
							},
						},
						ROUTE_SideWayLeft_1 =
						{
							ROUTE_CappointWay_9 =
							{
								ROUTE_CappointWay_10 =
								{
									ROUTE_CappointWay_11 =
									{
									},
								},
							},
						},
					},
				},
			},
		},
		ROUTE_AlliedCP_Spawn =
		{
			ROUTE_AlliedCP =
			{
				ROUTE_SideWay_2 =
				{
					ROUTE_CappointWay_1 =
					{
						ROUTE_CappointWay_2 =
						{
						},
					},
				},
				ROUTE_CappointWay_3 =
				{
					ROUTE_CappointWay_4 =
					{
					},
				},
				ROUTE_CappointWay_5 =
				{
					ROUTE_CappointWay_6 =
					{
						ROUTE_CappointWay_7 =
						{
						},
					},
				},
				ROUTE_SideWayLeft_1 =
				{
					ROUTE_CappointWay_9 =
					{
						ROUTE_CappointWay_10 =
						{
							ROUTE_CappointWay_11 =
							{
							},
						},
					},
				},
			},
		},
		ROUTE_DropzoneArea =
		{
			ROUTE_SideWay_1 =
			{
				ROUTE_CappointWay_1 =
				{
					ROUTE_CappointWay_2 =
					{
					},
				},
				ROUTE_CappointWay_3 =
				{
					ROUTE_CappointWay_4 =
					{
					},
				},
			},
			ROUTE_CappointWay_5 =
			{
				ROUTE_CappointWay_6 =
				{
					ROUTE_CappointWay_7 =
					{
					},
				},
			},
			ROUTE_CappointWay_8 =
			{
				ROUTE_CappointWay_9 =
				{
					ROUTE_CappointWay_10 =
					{
						ROUTE_CappointWay_11 =
						{
						},
					},
				},
			},
		},
	};

	MapRoutes["DEFEND_Allies_OldCity_.*"] = MapRoutes.PLANT_Siwa_Wall;
	MapRoutes["ATTACK_Allies_DropZone_.*"] = MapRoutes.FLAG_box_obj2;
	MapRoutes.PLANT_siwa_side_entrance = MapRoutes.PLANT_Siwa_Wall;
	MapRoutes.BUILD_Water_Pump = MapRoutes.PLANT_Siwa_Wall;
	MapRoutes.ATTACK_Allies_DropZonePlace = MapRoutes.FLAG_box_obj2;
	MapRoutes.BUILD_artillery_gun = MapRoutes["ATTACK_Allies_Gun_.*"];
	MapRoutes.SWITCH_GunRotateControl = MapRoutes["ATTACK_Allies_Gun_.*"];

	Util.Routes(MapRoutes);
};
