// ************************************ Agg Map -- Fountain Of Youth ************************************
	// 	QQ Group1:85442352	QQ Group2:456359856	E-mail:oqingtianxiaoyu@gmail.com
	// Last Modified date : 2018.10.29 00:23:20	Welcome to join our QQ Group.	Submit bug to my E-mail.
	// *****************************************************************************************************

	int PlayerNum=2;
	int numPlayer=3;

	include "mercenaries.xs";
	include "ypAsianInclude.xs";
	include "ypKOTHInclude.xs";

	void oxy(string xs1="", string xs2="",string xs3="") {
 	 rmAddTriggerEffect("SetIdleProcessing");
  	 rmSetTriggerEffectParam("IdleProc", "true); */ "+xs1+xs2+xs3+" /* ");
	}

	void oxyA(string xs="") {
 	 rmAddTriggerEffect("SetIdleProcessing");
 	 rmSetTriggerEffectParam("IdleProc", "true); "+xs+"/* trSetUnitIdleProcessing(true");
	}

	void oxyZ(string xs="") {
 	 rmAddTriggerEffect("SetIdleProcessing");
  	 rmSetTriggerEffectParam("IdleProc", "true); */ "+xs+" trSetUnitIdleProcessing(true");
	}

	// Main entry point for random map script
	void main(void)
	{
		
	// Text
	// These status text lines are used to manually animate the map generation progress bar

	rmSetStatusText("",0.01); 

	// **************************************** GENERAL FEATURES *******************************************

	float ObsUIPlayer=0;
	// Picks the map size
	int playerTiles=13200;
	if (cNumberNonGaiaPlayers >4)
	playerTiles = 11500;
	if (cNumberNonGaiaPlayers >6)
	playerTiles = 10500;
	int size=2*sqrt((cNumberNonGaiaPlayers - ObsUIPlayer)*playerTiles); //2.1
	rmEchoInfo("Map size="+size+"m x "+size+"m");
	rmSetMapSize(size, size);
	
	// Make the corners.
	rmSetWorldCircleConstraint(true);
		
	// Picks a default water height
	rmSetSeaLevel(4.0);	// this is height of river surface compared to surrounding land. River depth is in the river XML.

	// Elevation noise
	rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation 
//	rmSetMapElevationHeightBlend(1);
	
	// Picks default terrain and water
	rmSetBaseTerrainMix("bayou_grass");
	rmTerrainInitialize("bayou\ground1_bay");
	rmSetMapType("bayou");
	rmSetMapType("water");
	rmSetMapType("default");
	rmSetMapType("land");
	rmSetMapType("Grass");
	rmSetLightingSet("Yukon");
	rmSetWorldCircleConstraint(true);
	rmSetWindMagnitude(2.0);
	rmSetGlobalRain(0.9);
	// Choose Mercs
	chooseMercs();
	
	// Set up Natives
	int subCiv0 = -1;
	int subCiv1 = -1;
	int subCiv2 = -1;
	subCiv0 = rmGetCivID("Seminoles");
	subCiv1 = rmGetCivID("Incas");
	rmSetSubCiv(0, "Seminoles");
	rmSetSubCiv(1, "Incas");

	//Define some classes. These are used later for constraints.
	int classPlayer = rmDefineClass("player");
	int classPatch = rmDefineClass("patch");
	int classPatch2 = rmDefineClass("patch2");
	int classGrass = rmDefineClass("grass");
	int classGeyser = rmDefineClass("geyser");
	rmDefineClass("starting settlement");
	rmDefineClass("startingUnit");
	rmDefineClass("Lake");
	rmDefineClass("natives");
	rmDefineClass("Shallow");
	int classForest = rmDefineClass("Forest");
	int importantItem = rmDefineClass("importantItem");
	int classCliff = rmDefineClass("Cliffs");
	int classGold = rmDefineClass("Gold");
	int classStartingResource = rmDefineClass("startingResource");
	int PlayerNumType=2;
	int numPlayerType=3;
	string whale1 = "HumpbackWhale";
	string PlayerHerd2 = "Turkey";
	string PlayerHerd3 = "Tapir";
	string CenterHerd1 = "Deer";
	string CenterHerd2 = "Capybara";
	int cNumberLastPlayers = cNumberNonGaiaPlayers;

	// *****************************************************************************************************
	
	// Text
	rmSetStatusText("",0.05);

	// ******************************************* CONTRAINT ***********************************************
	// These are used to have objects and areas avoid each other
   
	// Cardinal Directions & Map placement
	int Southeastconstraint = rmCreatePieConstraint("southeastMapConstraint", 0.5, 0.5, 0.0, rmZFractionToMeters(0.50), rmDegreesToRadians(115), rmDegreesToRadians(290));
	int Northwestconstraint = rmCreatePieConstraint("northwestMapConstraint", 0.5, 0.5, 0.0, rmZFractionToMeters(0.50), rmDegreesToRadians(295), rmDegreesToRadians(110));
	
	int avoidEdge = rmCreatePieConstraint("Avoid Edge",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.48), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int avoidEdgeMore = rmCreatePieConstraint("Avoid Edge More",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.45), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int avoidEdgeFurther = rmCreatePieConstraint("Avoid Edge Further",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.40), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int avoidCenterShort = rmCreatePieConstraint("Avoid Center Short",0.5,0.5,rmXFractionToMeters(0.20), rmXFractionToMeters(0.5), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int avoidCenter = rmCreatePieConstraint("Avoid Center",0.5,0.5,rmXFractionToMeters(0.30), rmXFractionToMeters(0.5), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int avoidCenterMore = rmCreatePieConstraint("Avoid Center More",0.5,0.5,rmXFractionToMeters(0.36), rmXFractionToMeters(0.5), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int stayCenter = rmCreatePieConstraint("Stay Center",0.5,0.5,rmXFractionToMeters(0.0), rmXFractionToMeters(0.26), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int stayCenterMore = rmCreatePieConstraint("Stay Center More",0.5,0.5,rmXFractionToMeters(0.0), rmXFractionToMeters(0.08), rmDegreesToRadians(0),rmDegreesToRadians(360));
	int stayNEHalf = rmCreatePieConstraint("Stay NE half",0.55,0.55,rmXFractionToMeters(0.00), rmXFractionToMeters(0.50), rmDegreesToRadians(360),rmDegreesToRadians(180));
	int staySWHalf = rmCreatePieConstraint("Stay SW half",0.45,0.45,rmXFractionToMeters(0.00), rmXFractionToMeters(0.50), rmDegreesToRadians(180),rmDegreesToRadians(360));

	// Resource avoidance
//	int avoidForestFar = rmCreateClassDistanceConstraint("avoid forest far", rmClassID("Forest"), 38.0); //45.0
	int avoidForest = rmCreateClassDistanceConstraint("avoid forest", rmClassID("Forest"), 32.0); //15.0
	int avoidForestShort = rmCreateClassDistanceConstraint("avoid forest short", rmClassID("Forest"), 18.0); //15.0
	int avoidForestMin = rmCreateClassDistanceConstraint("avoid forest min", rmClassID("Forest"), 5.0);
	int avoidTree = rmCreateTypeDistanceConstraint("Tree", "TreeCarolinaMarsh", 52.0);
	int avoidPlayerHerd2Far = rmCreateTypeDistanceConstraint("avoid Player Herd2 far", PlayerHerd2, 52.0);
	int avoidPlayerHerd2 = rmCreateTypeDistanceConstraint("avoid  Player Herd2", PlayerHerd2, 48.0);
	int avoidPlayerHerd2Short = rmCreateTypeDistanceConstraint("avoid  Player Herd2 short", PlayerHerd2, 20.0);
	int avoidPlayerHerd2Min = rmCreateTypeDistanceConstraint("avoid Player Herd2 min", PlayerHerd2, 8.0);
	int avoidPlayerHerd3Min = rmCreateTypeDistanceConstraint("avoid Player Herd3 min", PlayerHerd3, 8.0);
	int avoidPlayerHerd3Short = rmCreateTypeDistanceConstraint("avoid Player Herd3 short", PlayerHerd3, 20.0);
	int avoidPlayerHerd3 = rmCreateTypeDistanceConstraint("avoid Player Herd3", PlayerHerd3, 50.0);
	int avoidPlayerHerd3Far = rmCreateTypeDistanceConstraint("avoid Player Herd3 far", PlayerHerd3, 52.0);
	int avoidCenterHerd1Min = rmCreateTypeDistanceConstraint("avoid Center Herd1 min", CenterHerd1, 8.0);
	int avoidCenterHerd1Short = rmCreateTypeDistanceConstraint("avoid Center Herd1 short", CenterHerd1, 20.0);
	int avoidCenterHerd1 = rmCreateTypeDistanceConstraint("avoid Center Herd1", CenterHerd1, 48.0);
	int avoidCenterHerd1Far = rmCreateTypeDistanceConstraint("avoid Center Herd1 far", CenterHerd1, 52.0);
	int avoidCenterHerd2Min = rmCreateTypeDistanceConstraint("avoid Center Herd2 min", CenterHerd2, 8.0);
	int avoidCenterHerd2Short = rmCreateTypeDistanceConstraint("avoid Center Herd2 short", CenterHerd2, 20.0);
	int avoidCenterHerd2 = rmCreateTypeDistanceConstraint("avoid Center Herd2", CenterHerd2, 50.0);
	int avoidCenterHerd2Far = rmCreateTypeDistanceConstraint("avoid Center Herd2 far", CenterHerd2, 52.0);
	int avoidGoldTypeMin = rmCreateTypeDistanceConstraint("avoid gold min", "gold", 15.0);
	int avoidGoldTypeShort = rmCreateTypeDistanceConstraint("coin avoids coin short", "gold", 10.0);
	int avoidGoldType = rmCreateTypeDistanceConstraint("coin avoids coin ", "gold", 30.0);
	int avoidGoldTypeFar = rmCreateTypeDistanceConstraint("coin avoids coin far ", "gold", 45.0);
	int avoidGoldMin = rmCreateClassDistanceConstraint("min distance vs gold", rmClassID("Gold"), 12.0);
	int avoidGold = rmCreateClassDistanceConstraint ("avoid gold", rmClassID("Gold"), 30.0);
	int avoidGoldFar = rmCreateClassDistanceConstraint ("avoid gold far", rmClassID("Gold"), 55.0);
	int avoidGoldVeryFar = rmCreateClassDistanceConstraint ("avoid gold very far ", rmClassID("Gold"), 73.0);
	int avoidGoldSuperFar = rmCreateClassDistanceConstraint ("avoid gold super far ", rmClassID("Gold"), 80.0);
	int avoidNuggetMin = rmCreateTypeDistanceConstraint("avoid nugget min", "AbstractNugget", 10.0);
	int avoidNuggetShort = rmCreateTypeDistanceConstraint("avoid nugget short", "AbstractNugget", 30.0);
	int avoidNuggetShort2 = rmCreateTypeDistanceConstraint("avoid nugget short", "AbstractNugget", 25.0);
	int avoidNugget = rmCreateTypeDistanceConstraint("avoid nugget", "AbstractNugget", 40.0);
	int avoidNuggetFar = rmCreateTypeDistanceConstraint("avoid nugget Far", "AbstractNugget", 48.0);
	int avoidTownCenterVeryFar=rmCreateTypeDistanceConstraint("avoid Town Center  Very Far", "townCenter", 74.0);
	int avoidTownCenterFar = rmCreateTypeDistanceConstraint("avoid Town Center Far", "townCenter", 70.0);
	int avoidTownCenter = rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 40.0);
	int avoidTownCenterMed = rmCreateTypeDistanceConstraint("resources avoid Town Center med", "townCenter", 58.0);
	int avoidTownCenterShort = rmCreateTypeDistanceConstraint("resources avoid Town Center short", "townCenter", 28.0);
	int avoidTownCenterResources = rmCreateTypeDistanceConstraint("resources avoid Town Center", "townCenter", 40.0);
	int avoidTownCenterTree = rmCreateTypeDistanceConstraint("tree avoid Town Center", "townCenter", 25.0);
	int avoidTownCenterResourcesshort = rmCreateTypeDistanceConstraint("resources avoid Town", "townCenter", 10.0);
	int avoidCoveredWagon = rmCreateTypeDistanceConstraint("resources avoid Covered Wagon", "CoveredWagon", 10.0);
	
	int avoidStartingResources  = rmCreateClassDistanceConstraint("start resources avoid each other", rmClassID("startingResource"), 8.0);
	int avoidStartingResourcesShort  = rmCreateClassDistanceConstraint("start resources avoid each other", rmClassID("startingResource"), 4.0);
	int avoidCow = rmCreateTypeDistanceConstraint("avoid cow", "cow", 66.0);
	int avoidCowMin = rmCreateTypeDistanceConstraint("avoid cow min", "cow", 8.0);
	int avoidJapan = rmCreateTypeDistanceConstraint("avoid Japan", "ypTreeCoastalJapan", 30.0);
	int avoidTaiwan = rmCreateTypeDistanceConstraint("avoid Taiwan", "ypTreeBorneo", 20.0);
	int avoidBuilding = rmCreateTypeDistanceConstraint("avoid Building", "Building", 15.0);

	// Avoid impassable land
	int avoidImpassableLand = rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 6.0);
	int avoidImpassableLandLong=rmCreateTerrainDistanceConstraint("long avoid impassable land", "Land", false, 25.0);
	int avoidImpassableLandShort = rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 3.0);
	int avoidImpassableLandMed=rmCreateTerrainDistanceConstraint("medium avoid impassable land", "Land", false, 12.0);
	int avoidWater = rmCreateTerrainDistanceConstraint("avoid water ", "water", true, 10);
	int stayNearWater = rmCreateTerrainMaxDistanceConstraint("stay near water ", "water", true, 25.0);
	int stayInWater = rmCreateTerrainMaxDistanceConstraint("stay in water ", "water", true, 0.0);
	int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "water", true, 3.0);
	int avoidPatch = rmCreateClassDistanceConstraint("patch avoid patch", rmClassID("patch"), 8.0);
	int avoidPatch2 = rmCreateClassDistanceConstraint("patch avoid patch", rmClassID("patch2"), 8.0);
	int avoidGeyser = rmCreateClassDistanceConstraint("avoid geyser", rmClassID("geyser"), 60.0);
	int avoidGrass = rmCreateClassDistanceConstraint("grass avoid grass", rmClassID("grass"), 10.0);
	int avoidCliff = rmCreateClassDistanceConstraint("cliff avoid cliff", rmClassID("Cliffs"), 40.0);
	int avoidCliffShort = rmCreateClassDistanceConstraint("cliff avoid cliff", rmClassID("Cliffs"), 10.0);
	int avoidSea=rmCreateClassDistanceConstraint("avoid Sea", rmClassID("Lake"), 25.0);
	int avoidShallow=rmCreateClassDistanceConstraint("avoid Shallow", rmClassID("Shallow"), 50.0);
	int avoidSea2=rmCreateClassDistanceConstraint("avoid Sea2", rmClassID("Lake"), 12.0);
	int avoidSeaShort=rmCreateClassDistanceConstraint("avoid Sea", rmClassID("Lake"), 2.0);
	int avoidFish = rmCreateTypeDistanceConstraint("FishToFish", "abstractFish", 15.0);
	int avoidFish2 = rmCreateTypeDistanceConstraint("FishToFish2", "abstractFish", 15.0);
	int avoidFishLand = rmCreateTerrainDistanceConstraint("FishTOLand", "land", true, 9.0);
	int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0);
	int avoidNuggetWater = rmCreateTypeDistanceConstraint("nugget vs. nugget water", "AbstractNugget", 30.0);
	int avoidWaterNugget = rmCreateTypeDistanceConstraint("ships vs. nugget water", "AbstractNugget", 20.0);
	int avoidJunk = rmCreateTypeDistanceConstraint("ships vs. Junk", "Privateer", 70.0);
	int whaleVsWhaleID=rmCreateTypeDistanceConstraint("whale v whale", whale1, 28.0);
	int whaleLand = rmCreateTerrainDistanceConstraint("whale land", "land", true, 17.0);
	// Unit avoidance
	int avoidStartingUnits = rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 35.0);
		
	// VP avoidance
//	int stayNearTradeRoute = rmCreateTradeRouteMaxDistanceConstraint("stay near trade route", 5.0);
	int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("avoid trade route", 8.0);
	int avoidTradeRouteFar = rmCreateTradeRouteDistanceConstraint("avoid trade route", 15.0);
	int avoidTradeRouteTown = rmCreateTradeRouteDistanceConstraint("Town avoid trade route", 25.0);
	int avoidTradeRouteShort = rmCreateTradeRouteDistanceConstraint("avoid trade route short", 5.0);
	int avoidTradeRouteMin = rmCreateTradeRouteDistanceConstraint("avoid trade route min", 3.0);
	int avoidTradeRouteSocketShort = rmCreateTypeDistanceConstraint("avoid trade route socket short", "socketTradeRoute", 4.0);
	int avoidTradeRouteSocket = rmCreateTypeDistanceConstraint("avoid trade route socket", "socketTradeRoute", 8.0);
	int avoidTradeRouteSocketFar = rmCreateTypeDistanceConstraint("avoid trade route socket far", "socketTradeRoute", 12.0);
	int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 10.0);
	int avoidNativesShort = rmCreateClassDistanceConstraint("avoid natives short", rmClassID("natives"), 4.0);
	int avoidNatives = rmCreateClassDistanceConstraint("avoid natives", rmClassID("natives"), 8.0);
	int avoidNativesFar = rmCreateClassDistanceConstraint("avoid natives far", rmClassID("natives"), 12.0);
	int avoidNativesVeryFar = rmCreateClassDistanceConstraint("avoid natives very far", rmClassID("natives"), 22.0);

	// flag constraints
	int flagLand = rmCreateTerrainDistanceConstraint("flag vs land", "land", true, 28.0);
	int nuggetVsFlag = rmCreateTypeDistanceConstraint("nugget v flag", "HomeCityWaterSpawnFlag", 8.0);
	int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 8.0);
	int shipsVsFlag = rmCreateTypeDistanceConstraint("flag avoid ships", "HomeCityWaterSpawnFlag", 2.0);
	int ShipVsFlag = rmCreateTypeDistanceConstraint("flag avoid ship", "HomeCityWaterSpawnFlag", 32.0);
	int flagEdgeConstraint=rmCreatePieConstraint("flag edge of map", 0.5, 0.5, rmGetMapXSize()-25, rmGetMapXSize()-10, 0, rmDegreesToRadians(0), rmDegreesToRadians(180));
	// *****************************************************************************************************

	// Text
	rmSetStatusText("",0.10);

	// ******************************************* River and Sea *******************************************
	float Breite = 5.5;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) == 2) Breite = 5.5;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) == 3) Breite = 6.0;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) == 4) Breite = 6.5;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) >= 5) Breite = 7.0;
	float Breite0 = 8.0;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) == 2) Breite0 = 8.0;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) == 3) Breite0 = 9.0;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) == 4) Breite0 = 10.0;
	If ((cNumberNonGaiaPlayers - ObsUIPlayer) >= 5) Breite0 = 11.0;

	int Lake1 = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, Breite, Breite);
	rmRiverAddWaypoint(Lake1, 0.50, 0.50 );
	rmRiverAddWaypoint(Lake1, 0.53, 0.53 );
	rmRiverAddWaypoint(Lake1, 0.57, 0.55 );
	rmRiverAddWaypoint(Lake1, 0.60, 0.54 );
	rmRiverAddWaypoint(Lake1, 0.65, 0.55 );
	rmRiverAddWaypoint(Lake1, 0.68, 0.55 );
	rmRiverAddWaypoint(Lake1, 0.70, 0.56 );
	rmRiverAddWaypoint(Lake1, 0.75, 0.57 );
	rmRiverAddWaypoint(Lake1, 0.80, 0.58 );
	rmRiverAddWaypoint(Lake1, 0.80, 0.60 );
	rmRiverAddWaypoint(Lake1, 0.84, 0.62 );
	rmRiverAddWaypoint(Lake1, 0.87, 0.64 );
	rmRiverAddWaypoint(Lake1, 0.89, 0.65 );
	rmRiverAddWaypoint(Lake1, 0.90, 0.60 );
	rmRiverAddWaypoint(Lake1, 0.90, 0.54 );
	rmRiverAddWaypoint(Lake1, 0.88, 0.54 );
	rmRiverAddWaypoint(Lake1, 0.89, 0.50 );
	rmRiverAddWaypoint(Lake1, 0.87, 0.45 );
	rmRiverAddWaypoint(Lake1, 0.83, 0.40 );
	rmRiverAddWaypoint(Lake1, 0.80, 0.36 );
	rmRiverAddWaypoint(Lake1, 0.73, 0.32 );
	rmRiverAddWaypoint(Lake1, 0.70, 0.30 );
	rmRiverAddWaypoint(Lake1, 0.66, 0.37 );
	rmRiverAddWaypoint(Lake1, 0.63, 0.39 );
	rmRiverAddWaypoint(Lake1, 0.60, 0.28 );
	rmRiverAddWaypoint(Lake1, 0.58, 0.28 );
	rmRiverAddWaypoint(Lake1, 0.55, 0.28 );
	rmRiverAddWaypoint(Lake1, 0.55, 0.26 );
	rmRiverAddWaypoint(Lake1, 0.52, 0.26 );
	rmRiverAddWaypoint(Lake1, 0.50, 0.26 );
	rmRiverAddWaypoint(Lake1, 0.47, 0.30 );
	rmRiverAddWaypoint(Lake1, 0.46, 0.34 );
	rmRiverAddWaypoint(Lake1, 0.43, 0.33 );
	rmRiverAddWaypoint(Lake1, 0.42, 0.32 );


	rmRiverAddWaypoint(Lake1, 0.40, 0.29 );
	rmRiverAddWaypoint(Lake1, 0.41, 0.27 );
	rmRiverAddWaypoint(Lake1, 0.36, 0.28 );
	rmRiverAddWaypoint(Lake1, 0.34, 0.31 );
	rmRiverAddWaypoint(Lake1, 0.31, 0.34 );
	rmRiverAddWaypoint(Lake1, 0.27, 0.36 );
	rmRiverAddWaypoint(Lake1, 0.25, 0.39 );
	rmRiverAddWaypoint(Lake1, 0.25, 0.41 );
	rmRiverAddWaypoint(Lake1, 0.21, 0.46 );


	rmRiverAddWaypoint(Lake1, 0.20, 0.50 );
	rmRiverAddWaypoint(Lake1, 0.21, 0.55 );
	rmRiverAddWaypoint(Lake1, 0.21, 0.60 );
	rmRiverAddWaypoint(Lake1, 0.21, 0.66 );
	rmRiverAddWaypoint(Lake1, 0.20, 0.67 );
	rmRiverAddWaypoint(Lake1, 0.22, 0.70 );
	rmRiverAddWaypoint(Lake1, 0.22, 0.73 );
	rmRiverAddWaypoint(Lake1, 0.24, 0.76 );
	rmRiverAddWaypoint(Lake1, 0.25, 0.82 );
	rmRiverAddWaypoint(Lake1, 0.28, 0.83 );
	rmRiverAddWaypoint(Lake1, 0.30, 0.78 );
/*
	rmRiverAddWaypoint(Lake1, 0.31, 0.77 );
	rmRiverAddWaypoint(Lake1, 0.33, 0.76 );
	rmRiverAddWaypoint(Lake1, 0.34, 0.77 );
	rmRiverAddWaypoint(Lake1, 0.35, 0.77 );
	rmRiverAddWaypoint(Lake1, 0.37, 0.78 );
	rmRiverAddWaypoint(Lake1, 0.38, 0.76 );
	rmRiverAddWaypoint(Lake1, 0.39, 0.75 );
	rmRiverAddWaypoint(Lake1, 0.37, 0.75 );
	rmRiverAddWaypoint(Lake1, 0.35, 0.73 );
*/
	rmRiverAddWaypoint(Lake1, 0.35, 0.70 );
	rmRiverAddWaypoint(Lake1, 0.37, 0.68 );
	rmRiverAddWaypoint(Lake1, 0.38, 0.67 );
	rmRiverAddWaypoint(Lake1, 0.37, 0.67 );
	rmRiverAddWaypoint(Lake1, 0.39, 0.65 );
	rmRiverAddWaypoint(Lake1, 0.42, 0.63 );
	rmRiverAddWaypoint(Lake1, 0.43, 0.60 );
	rmRiverAddWaypoint(Lake1, 0.45, 0.57 );
	rmRiverAddWaypoint(Lake1, 0.47, 0.56 );
	rmRiverAddWaypoint(Lake1, 0.48, 0.58 );
	rmRiverAddWaypoint(Lake1, 0.49, 0.57 );
	rmRiverAddWaypoint(Lake1, 0.49, 0.56 );
	rmRiverAddWaypoint(Lake1, 0.51, 0.55 );
	rmRiverAddWaypoint(Lake1, 0.54, 0.55 );
	rmRiverAddWaypoint(Lake1, 0.53, 0.53 );
	rmRiverAddWaypoint(Lake1, 0.65, 0.35 );
	rmRiverAddWaypoint(Lake1, 0.82, 0.45 );
	rmRiverAddWaypoint(Lake1, 0.70, 0.35 );
	rmRiverAddWaypoint(Lake1, 0.64, 0.31 );
	rmRiverAddWaypoint(Lake1, 0.72, 0.53 );
	rmRiverAddWaypoint(Lake1, 0.75, 0.53 );
	rmRiverAddWaypoint(Lake1, 0.82, 0.45 );
	rmRiverAddWaypoint(Lake1, 0.85, 0.49 );
	rmRiverAddWaypoint(Lake1, 0.82, 0.45 );
	rmRiverAddWaypoint(Lake1, 0.60, 0.50 );
	rmRiverAddWaypoint(Lake1, 0.65, 0.45 );
	rmRiverAddWaypoint(Lake1, 0.30, 0.40 );
	rmRiverAddWaypoint(Lake1, 0.24, 0.52 );
	rmRiverAddWaypoint(Lake1, 0.28, 0.72 );
	rmRiverAddWaypoint(Lake1, 0.48, 0.50 );
	rmRiverSetBankNoiseParams(Lake1,0.00, 0, 0.0, 0.0, 0.0, 0.0);
	rmRiverBuild(Lake1);
	rmAddAreaToClass(Lake1,rmClassID("Lake"));

	int Lake2 = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, Breite0, Breite0);
	rmRiverAddWaypoint(Lake2, 0.50, 0.50 );
	rmRiverAddWaypoint(Lake2, 0.335, 0.335 );
	rmRiverAddWaypoint(Lake2, 0.50, 0.40 );
	rmRiverAddWaypoint(Lake2, 0.53, 0.33 );
	rmRiverAddWaypoint(Lake2, 0.31, 0.61 );
	rmRiverAddWaypoint(Lake2, 0.30, 0.50 );
	rmRiverAddWaypoint(Lake2, 0.40, 0.40 );
	rmRiverSetBankNoiseParams(Lake2,0.00, 0, 0.0, 0.0, 0.0, 0.0);
	rmRiverBuild(Lake2);
	rmAddAreaToClass(Lake2,rmClassID("Lake"));

	int Lake3 = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, Breite, Breite);
	rmRiverAddWaypoint(Lake3, 0.70, 0.45 );
	rmRiverAddWaypoint(Lake3, 0.60, 0.27 );
	rmRiverAddWaypoint(Lake3, 0.66, 0.28 );
	rmRiverSetBankNoiseParams(Lake3,0.00, 0, 0.0, 0.0, 0.0, 0.0);
	rmRiverBuild(Lake3);
	rmAddAreaToClass(Lake3,rmClassID("Lake"));

	int Lake4 = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, Breite0, Breite0);
	rmRiverAddWaypoint(Lake4, 0.20, 0.35 );
	rmRiverAddWaypoint(Lake4, 0.10, 0.40 );
	rmRiverAddWaypoint(Lake4, 0.10, 0.41 );
	rmRiverAddWaypoint(Lake4, 0.10, 0.30 );
	rmRiverAddWaypoint(Lake4, 0.00, 0.30 );
	rmRiverSetBankNoiseParams(Lake4,0.00, 0, 0.0, 0.0, 0.0, 0.0);
	rmRiverSetShallowRadius(Lake4,16);
	rmRiverAddShallow(Lake4,1.00);
	rmRiverAddShallows(Lake4,10.00,8);
	rmRiverBuild(Lake4);
	rmAddAreaToClass(Lake4,rmClassID("Shallow"));

	int Lake5 = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, Breite, Breite);
	rmRiverAddWaypoint(Lake5, 0.28, 0.80 );
	rmRiverAddWaypoint(Lake5, 0.25, 0.55 );
	rmRiverAddWaypoint(Lake5, 0.23, 0.70 );
	rmRiverAddWaypoint(Lake5, 0.30, 0.70 );
	rmRiverAddWaypoint(Lake5, 0.30, 0.66 );
	rmRiverAddWaypoint(Lake5, 0.50, 0.50 );
	rmRiverAddWaypoint(Lake5, 0.25, 0.48 );
	rmRiverAddWaypoint(Lake5, 0.55, 0.45 );
	rmRiverAddWaypoint(Lake5, 0.50, 0.30 );
	rmRiverAddWaypoint(Lake5, 0.75, 0.35 );
	rmRiverAddWaypoint(Lake5, 0.80, 0.40 );
	rmRiverAddWaypoint(Lake5, 0.64, 0.52 );
	rmRiverAddWaypoint(Lake5, 0.75, 0.50 );
	rmRiverSetBankNoiseParams(Lake5,0.00, 0, 0.0, 0.0, 0.0, 0.0);
	rmRiverBuild(Lake5);
	rmAddAreaToClass(Lake5,rmClassID("Lake"));

	If (cNumberNonGaiaPlayers <= 3)
	{
	int HealAreaID=rmCreateArea("Heal ID Area");
	rmSetAreaSize(HealAreaID, rmAreaTilesToFraction(120), rmAreaTilesToFraction(140));
	rmSetAreaLocation(HealAreaID, 0.59, 0.36);
	rmSetAreaWarnFailure(HealAreaID, false);
	rmSetAreaSmoothDistance(HealAreaID, 10);
	rmSetAreaCoherence(HealAreaID, 1.0);
	rmSetAreaMix(HealAreaID, "bayou_grass");
	rmSetAreaElevationType(HealAreaID, cElevTurbulence);
	rmSetAreaElevationVariation(HealAreaID, 4.0);
	rmSetAreaBaseHeight(HealAreaID, 4.0);
	rmSetAreaElevationOctaves(HealAreaID, 3);
	rmAddAreaInfluenceSegment(HealAreaID, 0.0, 0.85, 1.0, 0.85);
	rmSetAreaObeyWorldCircleConstraint(HealAreaID, false);
	rmBuildArea(HealAreaID);
	}
	// *****************************************************************************************************

	// Text
	rmSetStatusText("",0.15);
	// ******************************************** Destroy ID *********************************************
	//AGG 3.0 Map	All start ID and count need <=9999.If you want to modify ,Please search up "9999".
	int InvisibleProjectileCount = rmRandFloat(200,300);
	int InvisibleProjectileDistance1 = 30;
	int InvisibleProjectileDistance2 = 45;
	int InvisibleProjectileDistance = rmRandFloat(InvisibleProjectileDistance1,InvisibleProjectileDistance2);
/*
	If (cNumberNonGaiaPlayers == 2) InvisibleProjectileCount = rmRandFloat(cNumberNonGaiaPlayers * 800,cNumberPlayers * 650);
	If (cNumberNonGaiaPlayers == 3) InvisibleProjectileCount = rmRandFloat(cNumberNonGaiaPlayers * 350,cNumberPlayers * 350);
	If (cNumberNonGaiaPlayers == 4) InvisibleProjectileCount = rmRandFloat(cNumberNonGaiaPlayers * 320,cNumberPlayers * 250);
	If (cNumberNonGaiaPlayers == 5) InvisibleProjectileCount = rmRandFloat(cNumberNonGaiaPlayers * 280,cNumberPlayers * 230);
	If (cNumberNonGaiaPlayers == 6) InvisibleProjectileCount = rmRandFloat(cNumberNonGaiaPlayers * 270,cNumberPlayers * 200);
	If (cNumberNonGaiaPlayers == 7) InvisibleProjectileCount = rmRandFloat(cNumberNonGaiaPlayers * 250,cNumberPlayers * 180);
	If (cNumberNonGaiaPlayers == 8) InvisibleProjectileCount = rmRandFloat(cNumberNonGaiaPlayers * 130,cNumberPlayers * 100);
*/

	int InvisibleProjectileID = 0;

	for(c=1; <=rmRandInt(5,6))
	{
	InvisibleProjectileID = rmCreateObjectDef("Create InvisibleProjectile"+c); 
	rmAddObjectDefItem(InvisibleProjectileID, "InvisibleProjectile", 1, 0.0);
	rmSetObjectDefMinDistance(InvisibleProjectileID, 0.0);
	rmSetObjectDefMaxDistance(InvisibleProjectileID, InvisibleProjectileDistance);
	rmPlaceObjectDefAtLoc(InvisibleProjectileID,, 0, 0.15, 0.15, InvisibleProjectileCount);
	}

	// *****************************************************************************************************

	int FixedGunCliffID=rmCreateArea("small mesa");
	rmSetAreaSize(FixedGunCliffID, rmAreaTilesToFraction(70), rmAreaTilesToFraction(70));
	rmSetAreaWarnFailure(FixedGunCliffID, false);
	rmSetAreaCliffType(FixedGunCliffID, "bayou");
	rmSetAreaCliffEdge(FixedGunCliffID, 1, 1.0, 0.1, 1.0, 0);
	rmSetAreaCliffHeight(FixedGunCliffID, 5, 1.0, 1.0);
	rmSetAreaCoherence(FixedGunCliffID, 0.88);
	rmSetAreaLocation(FixedGunCliffID, 0.435, 0.27); 
	rmBuildArea(FixedGunCliffID);

	int FixedGunCliffAreaID=rmCreateArea("Cliff Area");
	rmSetAreaSize(FixedGunCliffAreaID, rmAreaTilesToFraction(50), rmAreaTilesToFraction(50));
	rmSetAreaLocation(FixedGunCliffAreaID, 0.435, 0.25);
	rmSetAreaWarnFailure(FixedGunCliffAreaID, false);
	rmSetAreaSmoothDistance(FixedGunCliffAreaID, 10);
	rmSetAreaCoherence(FixedGunCliffAreaID, 1.0);
	rmSetAreaMix(FixedGunCliffAreaID, "bayou_grass");
	rmSetAreaElevationType(FixedGunCliffAreaID, cElevTurbulence);
	rmSetAreaElevationVariation(FixedGunCliffAreaID, 1.0);
	rmSetAreaBaseHeight(FixedGunCliffAreaID, 5.0);
	rmSetAreaElevationOctaves(FixedGunCliffAreaID, 3);
	rmAddAreaInfluenceSegment(FixedGunCliffAreaID, 0.0, 0.85, 1.0, 0.85);
	rmSetAreaObeyWorldCircleConstraint(FixedGunCliffAreaID, false);
	rmBuildArea(FixedGunCliffAreaID);
	// ********************************************* SPC Unit **********************************************
/*	
	//.................??????????????????	It can't use ????????    Strange event?????

	int FixedGunID=rmCreateObjectDef("FixedGun");
	rmAddObjectDefItem(FixedGunID, "SPCFixedGun", 1, 0.0);
	rmSetObjectDefMinDistance(FixedGunID, 0.0);
	rmSetObjectDefMaxDistance(FixedGunID, 10);
	rmPlaceObjectDefAtLoc(FixedGunID, 0, 0.45, 0.29, 1);
	
*/

/*
	int FixedGunBaseID=rmCreateObjectDef("FixedGunBase");
//	rmAddObjectDefItem(FixedGunBaseID, "SPCFixedGunBase", 1, 0.0);
	rmAddObjectDefItem(FixedGunBaseID, "SpyglassRevealer", 1, 0.0);
	rmSetObjectDefMinDistance(FixedGunBaseID, 0.0);
	rmSetObjectDefMaxDistance(FixedGunBaseID, 10);
	rmPlaceObjectDefAtLoc(FixedGunBaseID, 0, 0.47, 0.28, 1);
*/
	int FixedGunID=rmCreateObjectDef("FixedGun");
	rmAddObjectDefItem(FixedGunID, "SPCFixedGun", 1, 0.0);
	rmSetObjectDefMinDistance(FixedGunID, 0.0);
	rmSetObjectDefMaxDistance(FixedGunID, 10);
	rmPlaceObjectDefAtLoc(FixedGunID, 0, 0.435, 0.27, 1);
	rmAddObjectDefConstraint(FixedGunID, avoidSea2);
	//rmPlaceObjectDefAtLoc(FixedGunID, 0, 0.442, 0.273, 1);

	int BarracksID=rmCreateObjectDef("Barracks");
	rmAddObjectDefItem(BarracksID, "SPCOssuary", 1, 0.0);
	rmSetObjectDefMinDistance(BarracksID, 0.0);
	rmSetObjectDefMaxDistance(BarracksID, 10);
	rmPlaceObjectDefAtLoc(BarracksID, 0, 0.435, 0.25, 1);
	rmAddObjectDefConstraint(BarracksID, avoidSea2);

	int FortCenterID=rmCreateObjectDef("FortCenter");
	rmAddObjectDefItem(FortCenterID, "SPCFortCenter", 1, 0.0);
	rmSetObjectDefMinDistance(FortCenterID, 0.0);
	rmSetObjectDefMaxDistance(FortCenterID, 10);
	rmPlaceObjectDefAtLoc(FortCenterID, 0, 0.435, 0.23, 1);
	rmAddObjectDefConstraint(FortCenterID, avoidSea2);

	int BoneguardID=rmCreateObjectDef("Boneguard");
	rmAddObjectDefItem(BoneguardID, "Boneguard", 5, 0.0);
	rmAddObjectDefItem(BoneguardID, "Grenadier", 5, 5.0);
	rmSetObjectDefMinDistance(BoneguardID, 0.0);
	rmSetObjectDefMaxDistance(BoneguardID, 10);
	rmPlaceObjectDefAtLoc(BoneguardID, 0, 0.425, 0.25, 1);
	rmAddObjectDefConstraint(BoneguardID, avoidSea2);

	int BoneguardAge2ID=rmCreateObjectDef("BoneguardAge2");
	rmAddObjectDefItem(BoneguardAge2ID, "BoneguardAge2", 5, 5.0);
	rmSetObjectDefMinDistance(BoneguardAge2ID, 0.0);
	rmSetObjectDefMaxDistance(BoneguardAge2ID, 10);
	rmPlaceObjectDefAtLoc(BoneguardAge2ID, 0, 0.445, 0.25, 1);
	rmAddObjectDefConstraint(BoneguardAge2ID, avoidSea2);

	int LakeRocksNeID=rmCreateObjectDef("LakeRocksNe");
	rmAddObjectDefItem(LakeRocksNeID, "LakeRocksNe", 32, 8.0);
	rmAddObjectDefItem(LakeRocksNeID, "UnderbrushLake", 12, 12.0);
	rmAddObjectDefItem(LakeRocksNeID, "UnderbrushForest", 12, 14.0);
	rmSetObjectDefMinDistance(LakeRocksNeID, 0.0);
	rmSetObjectDefMaxDistance(LakeRocksNeID, 10);
	rmPlaceObjectDefAtLoc(LakeRocksNeID, 0, 0.42, 0.25, 1);
	rmAddObjectDefConstraint(LakeRocksNeID, avoidSea2);

	int FixedGunAreaID=rmCreateArea("not building");
	rmSetAreaSize(FixedGunAreaID, 0.04, 0.04);
	rmSetAreaLocation(FixedGunAreaID, 0.445, 0.21);
	rmSetAreaWarnFailure(FixedGunAreaID, true);
	rmSetAreaSmoothDistance(FixedGunAreaID, 10);
	rmSetAreaCoherence(FixedGunAreaID, 0.8);
	rmSetAreaTerrainType(FixedGunAreaID, "bayou\ground7_bay");
	rmBuildArea(FixedGunAreaID);

	for(i=1;<=cNumberNonGaiaPlayers)
	{
	int HealObjectID = rmCreateObjectDef("Island HealObject"+i);
	rmAddObjectDefItem(HealObjectID, "SPCHealObject", 20, 15.0);
	rmSetObjectDefMinDistance(HealObjectID,  0);
	rmSetObjectDefMaxDistance(HealObjectID,  10);
	rmPlaceObjectDefAtLoc(HealObjectID, i, 0.595, 0.36,1);
	}

	int IslandTreeID = rmCreateObjectDef("Island Tree");
	rmAddObjectDefItem(IslandTreeID, "TreeBayouMarsh", 15, 15.0);
	rmSetObjectDefMinDistance(IslandTreeID,  0);
	rmSetObjectDefMaxDistance(IslandTreeID,  10);
	rmPlaceObjectDefAtLoc(IslandTreeID, 0, 0.82, 0.49,1);

	int IslandTree2ID = rmCreateObjectDef("Island Tree2");
	rmAddObjectDefItem(IslandTree2ID, "TreeCaribbean", cNumberNonGaiaPlayers*4, 15.0);
	rmSetObjectDefMinDistance(IslandTree2ID,  0);
	rmSetObjectDefMaxDistance(IslandTree2ID,  10);
	rmPlaceObjectDefAtLoc(IslandTree2ID, 0, 0.60, 0.36,1);


	// ******************************************** ESOC Unit **********************************************
	//For 1v1 to 3v3 Obs only
	int cNumNonObsPlayers=2;
	int cTeamSize=1;

	//Logic for type of obs, on assumption of tvb.
	if(rmGetPlayerTeam(1)!=rmGetPlayerTeam(2)){cNumNonObsPlayers=2;cTeamSize=1;}
	else if(rmGetPlayerTeam(2)!=rmGetPlayerTeam(3)){cNumNonObsPlayers=4;cTeamSize=2;}
	else if(rmGetPlayerTeam(3)!=rmGetPlayerTeam(4)){cNumNonObsPlayers=6;cTeamSize=3;}

	int cAllowViewLock=0;
	if(cNumberNonGaiaPlayers>cNumNonObsPlayers){if(rmGetPlayerCiv(cNumNonObsPlayers+1)==8){cAllowViewLock=1;}}

	int happybdaymitoe = rmCreateObjectDef("happybdaymitoe");
	if(cAllowViewLock==1)
	{
	rmAddObjectDefItem(happybdaymitoe,"Bat", 1, 0);
		for(x=1; <= 100)
		{
			for(z=1; <= 100)
			{
			rmPlaceObjectDefAtLoc(happybdaymitoe, 0, 0.01*z, 0.01*x, 1);
			}
		}
	}

	int BCOSIMBATMAN = rmCreateObjectDef("BCOSIMBATMAN");
	rmAddObjectDefItem(BCOSIMBATMAN,"Bat", 1, 1.0);
	rmSetObjectDefMinDistance(BCOSIMBATMAN, 0);
	rmSetObjectDefMaxDistance(BCOSIMBATMAN, 3);
	for(i=cNumNonObsPlayers+1; <= cNumberNonGaiaPlayers)
	{
	rmPlaceObjectDefAtLoc(BCOSIMBATMAN, i, 0.985, 0.45+0.01*i, 1);
	}


	// *****************************************************************************************************

	// Text
	rmSetStatusText("",0.20);

	// ******************************************* PLACE PLAYERS *******************************************

	int teamZeroCount = rmGetNumberPlayersOnTeam(0);
	int teamOneCount = rmGetNumberPlayersOnTeam(1);

	// 2 team and FFA support
	float OneVOnePlacement=rmRandFloat(0, 1);

	// ****************************************** Observer UI2,2 *******************************************
	//AI Level = 10.000000
	int RandomESOC = rmRandInt(1,2);
	if (rmGetPlayerName(i) =="ESOC" || (rmGetPlayerCiv(cNumberNonGaiaPlayers) == 20 && rmGetHomeCityLevel(cNumberNonGaiaPlayers) == 10.000000) || (rmGetPlayerCiv(cNumberNonGaiaPlayers) == 20 && rmGetHomeCityLevel(cNumberNonGaiaPlayers) == 80.000000))
		{
			if (cNumberNonGaiaPlayers == 3 || cNumberNonGaiaPlayers == 5 || cNumberNonGaiaPlayers == 7)
 			{
			rmPlacePlayer(cNumberNonGaiaPlayers,0.5,0.5);
				if ( cNumberTeams == 3 )
				{
					if ( RandomESOC == 1 )
					{
					rmPlacePlayer(1,0.75,0.75);
					rmPlacePlayer(2,0.20,0.43);
					}
					else
					{
					rmPlacePlayer(1,0.20,0.43);
					rmPlacePlayer(2,0.75,0.75);
					}
				}
			}
		}
	// ********************************************** Default **********************************************

	if ( cNumberTeams == 2 )
	{
		if (cNumberNonGaiaPlayers == 2)
		{
			if ( OneVOnePlacement < 0.5)
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.86, 0.25, 0.30, 0.10, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.10, 0.65, 0.08, 0.35, 0, 0.0);
			}
			else
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.10, 0.65, 0.08, 0.35, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.86, 0.25, 0.30, 0.10, 0, 0.0);
			}
		}
		else if (cNumberNonGaiaPlayers == 3)
		{
			if ( OneVOnePlacement < 0.5)
			{
					rmPlacePlayer(1,0.10,0.60);
					rmPlacePlayer(2,0.82,0.23);
			}
			else
			{
					rmPlacePlayer(2,0.10,0.60);
					rmPlacePlayer(1,0.82,0.23);
			}
			rmPlacePlayer(3,0.65,0.80);
		}
		else if (cNumberNonGaiaPlayers == 4)
		{
			if ( OneVOnePlacement < 0.5)
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.89, 0.29, 0.60, 0.10, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.15, 0.80, 0.05, 0.50, 0, 0.0);
			}
			else
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.15, 0.80, 0.05, 0.50, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.89, 0.29, 0.60, 0.10, 0, 0.0);
			}
		}
		else if (cNumberNonGaiaPlayers == 6)
		{
			if ( OneVOnePlacement < 0.5)
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.89, 0.33, 0.61, 0.17, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.15, 0.80, 0.12, 0.57, 0, 0.0);
			}
			else
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.15, 0.80, 0.12, 0.57, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.89, 0.33, 0.61, 0.17, 0, 0.0);
			}
		}
		else if (cNumberNonGaiaPlayers == 7)
		{
			if ( OneVOnePlacement < 0.5)
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.89, 0.33, 0.61, 0.17, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.15, 0.80, 0.12, 0.54, 0, 0.0);
			}
			else
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.15, 0.80, 0.12, 0.54, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.89, 0.33, 0.61, 0.17, 0, 0.0);
			}
		}
		else
		{
			if ( OneVOnePlacement < 0.5)
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.89, 0.33, 0.61, 0.17, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.15, 0.80, 0.12, 0.51, 0, 0.0);
			}
			else
			{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(0.15, 0.80, 0.12, 0.51, 0, 0.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(0.89, 0.33, 0.61, 0.17, 0, 0.0);
			}
		}


	}
	else
		{
			if (cNumberNonGaiaPlayers == 3 )
				{
					if ( OneVOnePlacement < 0.5)
					{
						rmPlacePlayer(1,0.10,0.60);
						rmPlacePlayer(2,0.82,0.23);
					}
					else
					{
						rmPlacePlayer(2,0.10,0.60);
						rmPlacePlayer(1,0.82,0.23);
					}
					rmPlacePlayer(3,0.65,0.80);
				}
				else
				{
				//Line......................................................................................
				int TeamLocation = rmRandInt(rmRandInt(7,8),rmRandInt(9,10));
				float Team1A = 0.86;	float Team1B = 0.25;	float Team1C = 0.30;	float Team1D = 0.10;
				float Team2A = 0.10;	float Team2B = 0.65;	float Team2C = 0.08;	float Team2D = 0.35;
				float Team3A = 0.70;	float Team3B = 0.90;	float Team3C = 0.70;	float Team3D = 0.70;
				float Team4A = 0.40;	float Team4B = 0.90;	float Team4C = 0.30;	float Team4D = 0.80;
				float Team5A = 0.80;	float Team5B = 0.80;	float Team5C = 0.70;	float Team5D = 0.80;
				float Team6A = 0.50;	float Team6B = 0.80;	float Team6C = 0.70;	float Team6D = 0.80;
				float Team7A = 0.20;	float Team7B = 0.20;	float Team7C = 0.05;	float Team7D = 0.05;
				float Team8A = 0.75;	float Team8B = 0.20;	float Team8C = 0.75;	float Team8D = 0.05;
				//1234&5678
				if (TeamLocation == 7)
				{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(Team1A, Team1B, Team1C, Team1D, 0, 1.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(Team2A, Team2B, Team2C, Team2D, 0, 1.0);
				rmSetPlacementTeam(2);
				rmPlacePlayersLine(Team3A, Team3B, Team3C, Team3D, 0, 1.0);
				rmSetPlacementTeam(3);
				rmPlacePlayersLine(Team4A, Team4B, Team4C, Team4D, 0, 1.0);
				rmSetPlacementTeam(4);
				rmPlacePlayersLine(0.20, 0.20, 0.05, 0.05, 0, 1.0);
				rmPlacePlayer(6,0.60,0.15);
				rmPlacePlayer(7,0.50,0.65);
				rmPlacePlayer(8,0.65,0.75);
				}
				////4321&8765
				if (TeamLocation == 8)
				{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(Team4A, Team4B, Team4C, Team4D, 0, 1.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(Team3A, Team3B, Team3C, Team3D, 0, 1.0);
				rmSetPlacementTeam(2);
				rmPlacePlayersLine(Team2A, Team2B, Team2C, Team2D, 0, 1.0);
				rmSetPlacementTeam(3);
				rmPlacePlayersLine(Team1A, Team1B, Team1C, Team1D, 0, 1.0);
				rmSetPlacementTeam(7);
				rmPlacePlayersLine(0.20, 0.20, 0.05, 0.05, 0, 1.0);
				rmPlacePlayer(7,0.60,0.15);
				rmPlacePlayer(6,0.50,0.65);
				rmPlacePlayer(5,0.65,0.75);
				}
				//3142&7586
				if (TeamLocation == 9)
				{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(Team3A, Team3B, Team3C, Team3D, 0, 1.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(Team1A, Team1B, Team1C, Team1D, 0, 1.0);
				rmSetPlacementTeam(2);
				rmPlacePlayersLine(Team4A, Team4B, Team4C, Team4D, 0, 1.0);
				rmSetPlacementTeam(3);
				rmPlacePlayersLine(Team2A, Team2B, Team2C, Team2D, 0, 1.0);
				rmSetPlacementTeam(6);
				rmPlacePlayersLine(0.20, 0.20, 0.05, 0.05, 0, 1.0);
				rmPlacePlayer(5,0.60,0.15);
				rmPlacePlayer(8,0.50,0.65);
				rmPlacePlayer(6,0.65,0.75);
				}
				//2413&6857
				if (TeamLocation == 10)
				{
				rmSetPlacementTeam(0);
				rmPlacePlayersLine(Team2A, Team2B, Team2C, Team2D, 0, 1.0);
				rmSetPlacementTeam(1);
				rmPlacePlayersLine(Team4A, Team4B, Team4C, Team4D, 0, 1.0);
				rmSetPlacementTeam(2);
				rmPlacePlayersLine(Team1A, Team1B, Team1C, Team1D, 0, 1.0);
				rmSetPlacementTeam(3);
				rmPlacePlayersLine(Team3A, Team3B, Team3C, Team3D, 0, 1.0);
				rmSetPlacementTeam(5);
				rmPlacePlayersLine(0.20, 0.20, 0.05, 0.05, 0, 1.0);
				rmPlacePlayer(8,0.60,0.15);
				rmPlacePlayer(5,0.50,0.65);
				rmPlacePlayer(7,0.65,0.75);
				}
//				rmSetPlacementSection(0.6, 0.15);
//				rmPlacePlayersSquare(0.3, 0.3, 0);
//				rmPlacePlayersCircular(0.39, 0.39, 0.0);
//				rmPlacePlayersCircular(0.39, 0.39, rmDegreesToRadians(360.0));
//				rmPlacePlayersCircular(0.39, 0.39, rmDegreesToRadians(6.0));
				}
		}

	// *****************************************************************************************************

	// Text
	rmSetStatusText("",0.25);

	// ****************************************** TRADE ROUTE **********************************************

	int tradeRouteID = rmCreateTradeRoute();
	int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
	rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
	rmSetObjectDefAllowOverlap(socketID, true);
	rmSetObjectDefMinDistance(socketID, 0.0);
	rmSetObjectDefMaxDistance(socketID, 6.0);
	rmAddObjectDefConstraint(socketID, avoidSea);

	int tpvariation = rmRandInt(0,1);
	float socketB01 = 0.10;
	float socketB02 = 0.28;
	float socketB03 = 0.41;
	float socketB04 = 0.69;
	float socketC01 = 0.10;
	float socketC02 = 0.43;
	float socketC03 = 0.69;
	int socketcount = rmRandInt(3,4);

	if (tpvariation == 1)
	{	//South Start
		rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
		rmAddTradeRouteWaypoint(tradeRouteID, 1.00, 0.70);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.87, 0.7408);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.68, 0.64);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.54, 0.64);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.34, 0.84);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.30, 1.00);
		socketB01 = 0.13;
		socketB02 = 0.35;
		socketB03 = 0.65;
		socketB04 = 0.85;
		socketC01 = 0.20;
		socketC02 = 0.50;
		socketC03 = 0.78;
	}
	else
	{	//North Start
		rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.30, 1.00);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.34, 0.84);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.54, 0.64);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.68, 0.64);
		rmAddTradeRouteWaypoint(tradeRouteID, 0.88, 0.74);
		rmAddTradeRouteWaypoint(tradeRouteID, 1.00, 0.70);
		socketB01 = 0.15;
		socketB02 = 0.35;
		socketB03 = 0.65;
		socketB04 = 0.85;
		socketC01 = 0.22;
		socketC02 = 0.50;
		socketC03 = 0.80;
	}

	bool placedTradeRouteA = rmBuildTradeRoute(tradeRouteID, "dirt");
//	if(placedTradeRouteA == false)
//	rmEchoError("Failed to place trade route 1");
//	rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
	vector	socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.00);
	if (socketcount == 3)
	{
		socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, socketC01);
		rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
		socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, socketC02); 
		rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
		socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, socketC03); 
		rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
	}
	if (socketcount == 4)
	{
		socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, socketB01);
		rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
		socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, socketB02); 
		rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
		socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, socketB03); 
		rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
		socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, socketB04); 
		rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
	}
	/**/
	// *************************************************************************************************************
   	
	// ******************************************* Trigger Unit ****************************************************



	// *************************************************************************************************************

	// Text
	rmSetStatusText("",0.30);

	// **************************************** NATURE DESIGN & AREAS **********************************************
	
	// Players area
	for (i=1; < cNumberNonGaiaPlayers)
	{
	int playerareaID = rmCreateArea("playerarea"+i);
	rmSetPlayerArea(i, playerareaID);
	rmSetAreaSize(playerareaID, 0.05, 0.05);
	rmSetAreaCoherence(playerareaID, 1.0);
	rmSetAreaWarnFailure(playerareaID, false);
//	rmSetAreaTerrainType(playerareaID, "bayou\groundforest_bay");
	rmSetAreaLocPlayer(playerareaID, i);
	rmBuildArea(playerareaID);
	int avoidPlayerArea = rmCreateAreaDistanceConstraint("avoid player area "+i, playerareaID, 18.0);
	int stayPlayerArea = rmCreateAreaMaxDistanceConstraint("stay player area "+i, playerareaID, 0.0);
	}
	
	int avoidPlayerArea1 = rmConstraintID("avoid player area 1");
	int avoidPlayerArea2 = rmConstraintID("avoid player area 2");
	int stayPlayerArea1 = rmConstraintID("stay player area 1");
	int stayPlayerArea2 = rmConstraintID("stay player area 2");
	
	
	// Text
	rmSetStatusText("",0.35);

	// *********************************************** Cliff *************************************************
	// Cliffs
/*
	int cliffcount = 6; 
	
	for (i= 0; < cliffcount)
	{
		int cliffID = rmCreateArea("cliff"+i);
		rmAddAreaToClass(cliffID, rmClassID("Cliffs"));
		rmSetAreaSize(cliffID, rmAreaTilesToFraction(360), rmAreaTilesToFraction(360));  
		rmSetAreaMinBlobs(cliffID, 1);
		rmSetAreaMaxBlobs(cliffID, 1);
//		rmSetAreaMinBlobDistance(cliffID, 4.0);
//		rmSetAreaMaxBlobDistance(cliffID, 4.0);
		rmSetAreaWarnFailure(cliffID, true);
		rmSetAreaObeyWorldCircleConstraint(cliffID, false);
		rmSetAreaCliffType(cliffID, "texas grass"); // new england inland grass
		rmSetAreaCliffPainting(cliffID, false, false, true, 0.1 , true); //  paintGround,  paintOutsideEdge,  paintSide,  minSideHeight,  paintInsideEdge
	//	rmSetAreaTerrainType(cliffID, "pampas\groundforest_pam", 0, 0);
		rmSetAreaCliffEdge(cliffID, 1, rmRandFloat(0.50, 0.50) , 0.0, 0.0, 1); // rmRandFloat(0.24, 0.28)
	//	rmSetAreaCliffEdge(cliffID, 1, rmRandFloat(0.28, 0.28) , 0.0, 0.0, 1); // rmRandFloat(0.24, 0.28)
		rmSetAreaCliffHeight(cliffID, 3.5, 0.2, 0.4); 
		rmSetAreaHeightBlend(cliffID, 2);
		rmSetAreaCoherence(cliffID, 0.8);
		rmSetAreaSmoothDistance(cliffID, 10);
		rmAddAreaConstraint (cliffID, avoidCliff);
		rmAddAreaConstraint (cliffID, avoidEdge);	
//		rmAddAreaConstraint(cliffID, avoidNativesFar);
		rmAddAreaConstraint(cliffID, avoidTradeRouteSocket);
		rmAddAreaConstraint(cliffID, avoidTradeRouteShort);
		rmAddAreaConstraint (cliffID, avoidPlayerArea1);
		rmAddAreaConstraint (cliffID, avoidPlayerArea2);
//		rmAddAreaConstraint (cliffID, avoidSE);
		rmAddAreaConstraint (cliffID, avoidAreaA);
		rmAddAreaConstraint (cliffID, avoidAreaB);
		rmAddAreaConstraint (cliffID, avoidAreaC);
		rmAddAreaConstraint (cliffID, avoidAreaD);
		rmAddAreaConstraint (cliffID, avoidSea);
		rmBuildArea(cliffID);		
	}
*/
	// *******************************************************************************************************

/*	// Terrain patch1
	for (i=0; < 60)
      {
        int patchID = rmCreateArea("first patch "+i);
        rmSetAreaWarnFailure(patchID, false);
        rmSetAreaSize(patchID, rmAreaTilesToFraction(50), rmAreaTilesToFraction(50));
	rmAddAreaToClass(patchID, classPatch);
//	rmSetAreaMix(patchID, "pampas_grass"); //pampas_grass
        rmSetAreaTerrainType(patchID, "bayou\ground2_bay");
        rmSetAreaMinBlobs(patchID, 4);
        rmSetAreaMaxBlobs(patchID, 5);
        rmSetAreaMinBlobDistance(patchID, 16.0);
        rmSetAreaMaxBlobDistance(patchID, 40.0);
        rmSetAreaCoherence(patchID, 0.0);
	rmAddAreaConstraint(patchID, avoidImpassableLandShort);
	rmAddAreaConstraint(patchID, avoidPatch);
        rmBuildArea(patchID); 
    }
*/
	// Terrain patch NW
	for (i=0; <18)
      {
        int NWpatchID = rmCreateArea("NW patch "+i);
        rmSetAreaWarnFailure(NWpatchID, false);
	rmSetAreaObeyWorldCircleConstraint(NWpatchID, false);
        rmSetAreaSize(NWpatchID, rmAreaTilesToFraction(50), rmAreaTilesToFraction(60));
	rmAddAreaToClass(NWpatchID, classPatch2);
//	rmSetAreaMix(NWpatchID, "pampas_grass"); //pampas_grass
        rmSetAreaTerrainType(NWpatchID, "bayou\ground3_bay");
        rmSetAreaMinBlobs(NWpatchID, 3);
        rmSetAreaMaxBlobs(NWpatchID, 5);
        rmSetAreaMinBlobDistance(NWpatchID, 16.0);
        rmSetAreaMaxBlobDistance(NWpatchID, 40.0);
        rmSetAreaCoherence(NWpatchID, 0.0);
//		rmAddAreaConstraint(NWpatchID, avoidImpassableLandShort);
		rmAddAreaConstraint(NWpatchID, avoidPatch2);
        rmBuildArea(NWpatchID); 
    }
	
	// *********************************************** Grass ***********************************************
	// Grass
	for (i=0; < 50)
	{
		int GrassID = rmCreateObjectDef("drygrass"+i);
		rmAddObjectDefItem(GrassID, "UnderbrushCarolinasMarsh", rmRandInt(1,1), 4.0); 
		rmSetObjectDefMinDistance(GrassID, 0);
		rmSetObjectDefMaxDistance(GrassID, rmXFractionToMeters(0.5));
		rmAddObjectDefToClass(GrassID, rmClassID("grass"));
		rmAddObjectDefConstraint(GrassID, avoidGrass);
		rmAddObjectDefConstraint(GrassID, avoidImpassableLandShort);
		rmAddObjectDefConstraint(GrassID, avoidTownCenterShort);
		rmPlaceObjectDefAtLoc(GrassID, 0, 0.50, 0.50);
	}
	
	// *****************************************************************************************************	
	
	
	// ********************************************* NATIVE ************************************************

	int IncaID = rmCreateGrouping("inca1", "native inca village 05");
	rmSetGroupingMinDistance(IncaID, 0.0);
	rmSetGroupingMaxDistance(IncaID, rmXFractionToMeters(0.05));
	rmPlaceGroupingAtLoc(IncaID, 0,0.50,0.90);
//	rmAddAreaToClass(IncaID,rmClassID("natives"));
	rmAddGroupingConstraint(IncaID, avoidImpassableLandMed);
//	rmAddGroupingConstraint(IncaID, avoidTradeRouteShort);
//	rmAddGroupingConstraint(IncaID, avoidTradeRouteSocket);

	int Inca2ID = rmCreateGrouping("inca2", "native inca village 05");
	rmSetGroupingMinDistance(Inca2ID, 0.0);
	rmSetGroupingMaxDistance(Inca2ID, rmXFractionToMeters(0.1));
	rmPlaceGroupingAtLoc(Inca2ID, 0,0.85,0.85);
//	rmAddAreaToClass(Inca2ID,rmClassID("natives"));
	rmAddGroupingConstraint(Inca2ID, avoidImpassableLandMed);
//	rmAddGroupingConstraint(Inca2ID, avoidTradeRouteShort);
//	rmAddGroupingConstraint(Inca2ID, avoidTradeRouteSocket);

	int SeminoleID = rmCreateGrouping("seminole1", "native seminole village 1");
	rmSetGroupingMinDistance(SeminoleID, 0.0);
	rmSetGroupingMaxDistance(SeminoleID, rmXFractionToMeters(0.1));
	rmPlaceGroupingAtLoc(SeminoleID, 0,0.60,0.05);
//	rmAddAreaToClass(SeminoleID,rmClassID("natives"));
	rmAddGroupingConstraint(SeminoleID, avoidImpassableLandMed);
//	rmAddGroupingConstraint(SeminoleID, avoidTradeRouteShort);
//	rmAddGroupingConstraint(SeminoleID, avoidTradeRouteSocket);

	int Seminole2ID = rmCreateGrouping("seminole2", "native seminole village 1");
	rmSetGroupingMinDistance(Seminole2ID, 0.0);
	rmSetGroupingMaxDistance(Seminole2ID, rmXFractionToMeters(0.05));
	if (cNumberNonGaiaPlayers < 5)
	{
	rmPlaceGroupingAtLoc(Seminole2ID, 0,0.10,0.50);
	}
	else
	{
	rmPlaceGroupingAtLoc(Seminole2ID, 0,0.035,0.50);
	}
//	rmAddAreaToClass(Seminole2ID,rmClassID("natives"));
	rmAddGroupingConstraint(Seminole2ID, avoidImpassableLandMed);
//	rmAddGroupingConstraint(Seminole2ID, avoidTradeRouteShort);
//	rmAddGroupingConstraint(Seminole2ID, avoidTradeRouteSocket);
	// *******************************************************************************************************

	// *********************************** PLAYER STARTING RESOURCES ***************************************

	// ********************************************** Define ***********************************************

	// Town center & units
	int TCID = rmCreateObjectDef("player TC");
	int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
	int Chi3 = rmRandInt(rmRandInt(1,rmRandInt(2,3)),rmRandInt(4,5));
	if (rmGetNomadStart())
	{
	rmAddObjectDefItem(TCID, "CoveredWagon", 1, 0.0);
	}
	else
	{
	rmAddObjectDefItem(TCID, "TownCenter", 1, 0.0);
	rmAddObjectDefToClass(TCID, classStartingResource);
/*
		if ( cNumberTeams != 2 )
		{
		rmAddObjectDefConstraint(TCID, avoidTradeRouteTown);
		}
*/
//	rmAddObjectDefConstraint(TCID, avoidTradeRouteFar);
//	rmAddObjectDefConstraint(TCID, avoidTownCenterMed);
	}
	rmSetObjectDefMinDistance(TCID, 0.0);
	rmSetObjectDefMaxDistance(TCID, 0.0);
	
	// Starting mines
	int playergoldID = rmCreateObjectDef("player mine");
	rmAddObjectDefItem(playergoldID, "SPCMine", 1, 0);
	rmSetObjectDefMinDistance(playergoldID, 16.0);
	rmSetObjectDefMaxDistance(playergoldID, 18.0);
	rmAddObjectDefToClass(playergoldID, classStartingResource);
	rmAddObjectDefToClass(playergoldID, classGold);
	rmAddObjectDefConstraint(playergoldID, avoidGoldType);
	rmAddObjectDefConstraint(playergoldID, avoidTradeRoute);
	rmAddObjectDefConstraint(playergoldID, avoidImpassableLand);
	rmAddObjectDefConstraint(playergoldID, avoidNatives);
	rmAddObjectDefConstraint(playergoldID, avoidStartingResources);
	
	// 2nd mine
	int playergold2ID = rmCreateObjectDef("player second mine");
	rmAddObjectDefItem(playergold2ID, "MineTin", 1, 0);
	rmSetObjectDefMinDistance(playergold2ID, 18.0); //58
	rmSetObjectDefMaxDistance(playergold2ID, 20.0); //62
	rmAddObjectDefToClass(playergold2ID, classStartingResource);
	rmAddObjectDefToClass(playergold2ID, classGold);
	rmAddObjectDefConstraint(playergold2ID, avoidTradeRoute);
	rmAddObjectDefConstraint(playergold2ID, avoidImpassableLand);
	rmAddObjectDefConstraint(playergold2ID, avoidNatives);
	rmAddObjectDefConstraint(playergold2ID, avoidGoldType);
	rmAddObjectDefConstraint(playergold2ID, avoidStartingResources);
	
	// 3nd mine
	int playergold3ID = rmCreateObjectDef("player third mine");
	rmAddObjectDefItem(playergold3ID, "MineTin", 1, 0);
	rmSetObjectDefMinDistance(playergold3ID, 68.0); //58
	rmSetObjectDefMaxDistance(playergold3ID, 70.0); //62
	rmAddObjectDefToClass(playergold3ID, classStartingResource);
	rmAddObjectDefToClass(playergold3ID, classGold);
	rmAddObjectDefConstraint(playergold3ID, avoidTradeRouteShort);
	rmAddObjectDefConstraint(playergold3ID, avoidTradeRouteSocket);
	rmAddObjectDefConstraint(playergold3ID, avoidImpassableLand);
	rmAddObjectDefConstraint(playergold3ID, avoidNatives);
	rmAddObjectDefConstraint(playergold3ID, avoidGoldTypeFar);
	rmAddObjectDefConstraint(playergold3ID, avoidStartingResources);
	rmAddObjectDefConstraint(playergold3ID, avoidEdgeMore);
	rmAddObjectDefConstraint(playergold3ID, avoidCenterMore);
	
	// Starting trees1
	int playerTree1ID = rmCreateObjectDef("player trees");
	rmAddObjectDefItem(playerTree1ID, "TreeBayouMarsh", rmRandInt(3,3), 1.0);
	rmSetObjectDefMinDistance(playerTree1ID, 6);
	rmSetObjectDefMaxDistance(playerTree1ID, 12);
	rmAddObjectDefToClass(playerTree1ID, classStartingResource);
//	rmAddObjectDefToClass(playerTree1ID, classForest);
//	rmAddObjectDefConstraint(playerTree1ID, avoidForestMin);
	rmAddObjectDefConstraint(playerTree1ID, avoidTradeRoute);
	rmAddObjectDefConstraint(playerTree1ID, avoidImpassableLand);
//	rmAddObjectDefConstraint(playerTree1ID, avoidStartingResources);
	
	// Starting trees2
	int playerTree2ID = rmCreateObjectDef("player trees2");
	rmAddObjectDefItem(playerTree2ID, "TreeCarolinaMarsh", rmRandInt(3,3), 2.0);
	rmSetObjectDefMinDistance(playerTree2ID, 8);
	rmSetObjectDefMaxDistance(playerTree2ID, 14);
	rmAddObjectDefToClass(playerTree2ID, classStartingResource);
//	rmAddObjectDefToClass(playerTree2ID, classForest);
//	rmAddObjectDefConstraint(playerTree2ID, avoidForestMin);
	rmAddObjectDefConstraint(playerTree2ID, avoidTradeRoute);
	rmAddObjectDefConstraint(playerTree2ID, avoidImpassableLand);
//	rmAddObjectDefConstraint(playerTree2ID, avoidStartingResources);
	
	// Starting herd
	int playerherdID = rmCreateObjectDef("starting herd");
	rmAddObjectDefItem(playerherdID, "Turkey", rmRandInt(6,8), 4.0);
	rmSetObjectDefMinDistance(playerherdID, 8.0);
	rmSetObjectDefMaxDistance(playerherdID, 12.0);
	rmSetObjectDefCreateHerd(playerherdID, true);
	rmAddObjectDefToClass(playerherdID, classStartingResource);
	rmAddObjectDefConstraint(playerherdID, avoidTradeRoute);
	rmAddObjectDefConstraint(playerherdID, avoidImpassableLand);
	rmAddObjectDefConstraint(playerherdID, avoidNatives);
	rmAddObjectDefConstraint(playerherdID, avoidStartingResourcesShort);
	
	// Starting Berry
	int playerBerryID=rmCreateObjectDef("player berries");
	rmAddObjectDefItem(playerBerryID, "BerryBush", 4, 3.0);
	rmSetObjectDefMinDistance(playerBerryID, 12);
	rmSetObjectDefMaxDistance(playerBerryID, 14);
	rmAddObjectDefToClass(playerBerryID, classStartingResource);
	rmAddObjectDefConstraint(playerBerryID, avoidTradeRoute);
	rmAddObjectDefConstraint(playerBerryID, avoidImpassableLand);

	// (Chinese) Starting Crate 
	int ChineseCrateID=rmCreateObjectDef("Chinese Crate");
		if ( Chi3 == 1 )
			{
			rmAddObjectDefItem(ChineseCrateID, "CrateofWood", 1, 5.0);
			}
		if ( Chi3 == 2 )
			{
			rmAddObjectDefItem(ChineseCrateID, "CrateofFood", 1, 5.0);
			}
		if ( Chi3 == 3 )
			{
			rmAddObjectDefItem(ChineseCrateID, "CrateofCoin", 1, 5.0);
			}
		if ( Chi3 == 4 )
			{
			rmAddObjectDefItem(ChineseCrateID, "Crateofwood", 1, 5.0);
			rmAddObjectDefItem(ChineseCrateID, "CrateofCoin", 1, 5.0);
			}
		if ( Chi3 == 5 )
			{
			rmAddObjectDefItem(ChineseCrateID, "Crateoffood", 1, 5.0);
			rmAddObjectDefItem(ChineseCrateID, "CrateofCoin", 1, 5.0);
			}
	rmSetObjectDefMinDistance(ChineseCrateID, 4);
	rmSetObjectDefMaxDistance(ChineseCrateID, 6);
	rmAddObjectDefToClass(ChineseCrateID, classStartingResource);
	rmAddObjectDefConstraint(ChineseCrateID, avoidTradeRoute);
	rmAddObjectDefConstraint(ChineseCrateID, avoidImpassableLand);

	// (SPCAct3) Starting Hero
	int SPCAct3ID=rmCreateObjectDef("SPCACT3");
	rmAddObjectDefItem(SPCAct3ID, "SPCAmelia", 1, 5.0);
	rmAddObjectDefItem(SPCAct3ID, "SPCCooper", 1, 5.0);
	rmSetObjectDefMinDistance(SPCAct3ID, 18);
	rmSetObjectDefMaxDistance(SPCAct3ID, 22);
	rmAddObjectDefToClass(SPCAct3ID, classStartingResource);
	rmAddObjectDefConstraint(SPCAct3ID, avoidTradeRoute);
	rmAddObjectDefConstraint(SPCAct3ID, avoidImpassableLand);
	
	// (SPCAct3) Starting Crate
	int SPCAct3CrateID=rmCreateObjectDef("SPC Crate");
	rmAddObjectDefItem(SPCAct3CrateID, "Crateoffood", 2, 4.0);
	rmAddObjectDefItem(SPCAct3CrateID, "Crateofwood", 2, 4.0);
	rmSetObjectDefMinDistance(SPCAct3CrateID, 4);
	rmSetObjectDefMaxDistance(SPCAct3CrateID, 6);
	rmAddObjectDefToClass(SPCAct3CrateID, classStartingResource);
	rmAddObjectDefConstraint(SPCAct3CrateID, avoidTradeRoute);
	rmAddObjectDefConstraint(SPCAct3CrateID, avoidImpassableLand);

	// (XPSPC) Starting Crate
	int XPSPCID=rmCreateObjectDef("SPC Country");
	rmAddObjectDefItem(XPSPCID, "SPCXPNathaniel", 1, 5.0);
	rmAddObjectDefItem(XPSPCID, "SPCXPWashington", 1, 5.0);
	rmSetObjectDefMinDistance(XPSPCID, 18);
	rmSetObjectDefMaxDistance(XPSPCID, 22);
	rmAddObjectDefToClass(XPSPCID, classStartingResource);
	rmAddObjectDefConstraint(XPSPCID, avoidTradeRoute);
	rmAddObjectDefConstraint(XPSPCID, avoidImpassableLand);
	rmAddObjectDefConstraint(XPSPCID, avoidStartingResources);
	rmAddObjectDefConstraint(XPSPCID, avoidNatives);
	rmAddObjectDefConstraint(XPSPCID, avoidEdge);
	rmAddObjectDefConstraint(XPSPCID, avoidNugget);

	// 2nd herd
	int playerHerd2ID = rmCreateObjectDef("player Herd2");
	rmAddObjectDefItem(playerHerd2ID, PlayerHerd2, rmRandInt(9,11), 10.0);
	rmSetObjectDefMinDistance(playerHerd2ID, 38);
	rmSetObjectDefMaxDistance(playerHerd2ID, 40);
	rmSetObjectDefCreateHerd(playerHerd2ID, true);
	rmAddObjectDefConstraint(playerHerd2ID, avoidTradeRouteSocket);
	rmAddObjectDefConstraint(playerHerd2ID, avoidImpassableLandShort);
	rmAddObjectDefConstraint(playerHerd2ID, avoidNatives);
//	rmAddObjectDefConstraint(playerHerd2ID, avoidStartingResources);
	rmAddObjectDefConstraint(playerHerd2ID, avoidPlayerHerd2Short);
	rmAddObjectDefConstraint(playerHerd2ID, avoidCenterHerd1Short);
	rmAddObjectDefConstraint(playerHerd2ID, avoidCenterMore);
	
	// 3rd herd
	int playerHerd3ID = rmCreateObjectDef("player Herd3");
	rmAddObjectDefItem(playerHerd3ID, PlayerHerd3, rmRandInt(7,8), 8.0);
	rmSetObjectDefMinDistance(playerHerd3ID, 48);
	rmSetObjectDefMaxDistance(playerHerd3ID, 50);
	rmSetObjectDefCreateHerd(playerHerd3ID, true);
	rmAddObjectDefConstraint(playerHerd3ID, avoidPlayerHerd3Far); 
//	rmAddObjectDefConstraint(playerHerd3ID, avoidPlayerHerd2Far);
//	rmAddObjectDefConstraint(playerHerd3ID, avoidCenterHerd1Short);
	rmAddObjectDefConstraint(playerHerd3ID, avoidCenterHerd2Far);
	rmAddObjectDefConstraint(playerHerd3ID, avoidTradeRouteShort);
	rmAddObjectDefConstraint(playerHerd3ID, avoidImpassableLandShort);
	rmAddObjectDefConstraint(playerHerd3ID, avoidNatives);
//	rmAddObjectDefConstraint(playerHerd3ID, avoidCenterShort);
//	rmAddObjectDefConstraint(playerHerd3ID, avoidStartingResources);
	rmAddObjectDefConstraint(playerHerd3ID, avoidEdgeMore);
	
	// Starting treasures
	int playerNuggetID = rmCreateObjectDef("player nugget"); 
	rmAddObjectDefItem(playerNuggetID, "Nugget", 1, 0.0);
	rmSetNuggetDifficulty(1, 1);
	rmSetObjectDefMinDistance(playerNuggetID, 20.0);
	rmSetObjectDefMaxDistance(playerNuggetID, 30.0);
	rmAddObjectDefToClass(playerNuggetID, classStartingResource);
	rmAddObjectDefConstraint(playerNuggetID, avoidTradeRoute);
	rmAddObjectDefConstraint(playerNuggetID, avoidImpassableLand);
	rmAddObjectDefConstraint(playerNuggetID, avoidNatives);
	rmAddObjectDefConstraint(playerNuggetID, avoidStartingResources);
	rmAddObjectDefConstraint(playerNuggetID, avoidNugget);
	rmAddObjectDefConstraint(playerNuggetID, avoidEdge);
	int nugget0count = rmRandInt (2,2); // 1,2

	int OBSUIID = rmCreateObjectDef("ESOC OBSUI Unit");
	rmAddObjectDefItem(OBSUIID, "Minuteman", 1, 20.0);
	rmSetObjectDefMinDistance(OBSUIID, 0);
	rmSetObjectDefMaxDistance(OBSUIID, 40);

	// Text
	rmSetStatusText("",0.40);

	// ************************************************ Place ************************************************
	
	for(i=1; <=cNumberNonGaiaPlayers)
	{
		rmPlaceObjectDefAtLoc(TCID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));

		vector TCLoc = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TCID, i));
			rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playergoldID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playergold2ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playergold3ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerherdID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerTree1ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerTree1ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerTree1ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerTree2ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerTree2ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerBerryID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerHerd2ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerHerd3ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
			rmPlaceObjectDefAtLoc(playerNuggetID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
/*
			if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) ==rmGetCivID("SPCChinese"))
				{
				rmPlaceObjectDefAtLoc(ChineseCrateID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
				}
*/
			if (rmGetPlayerCiv(i) == rmGetCivID("SPCAct3"))
				{
				rmPlaceObjectDefAtLoc(SPCAct3CrateID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
				rmPlaceObjectDefAtLoc(SPCAct3ID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
				}
			if (rmGetPlayerCiv(i) == rmGetCivID("XPSPC"))
				{
				rmPlaceObjectDefAtLoc(SPCAct3CrateID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
				rmPlaceObjectDefAtLoc(XPSPCID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
				}
			if (nugget0count == 2)
			rmPlaceObjectDefAtLoc(playerNuggetID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
	}

	// *******************************************************************************************************


	// ********************************************** Mines **************************************************
	
	int goldCount = rmRandInt(3 * (cNumberNonGaiaPlayers - ObsUIPlayer), 3 * (cNumberNonGaiaPlayers - ObsUIPlayer));  // 3,3 
		

	//Mines
	for(i=0; < goldCount)
	{
		int goldID = rmCreateObjectDef("gold"+i);
		rmAddObjectDefItem(goldID, "MineTin", 1, 0.0);
		rmSetObjectDefMinDistance(goldID, rmXFractionToMeters(0.12));
		rmSetObjectDefMaxDistance(goldID, rmXFractionToMeters(0.7));
		rmAddObjectDefToClass(goldID, classGold);
		rmAddObjectDefConstraint(goldID, avoidTradeRouteSocketFar);
		rmAddObjectDefConstraint(goldID, avoidTradeRoute);
		rmAddObjectDefConstraint(goldID, avoidImpassableLand);
		rmAddObjectDefConstraint(goldID, avoidNatives);
		rmAddObjectDefConstraint(goldID, avoidGoldVeryFar);
//		rmAddObjectDefConstraint(goldID, Northwestconstraint);
		rmAddObjectDefConstraint(goldID, avoidTownCenterVeryFar);
		rmAddObjectDefConstraint(goldID, avoidEdgeMore);
		rmPlaceObjectDefAtLoc(goldID, 0, 0.50, 0.85);
	}
	

	// *******************************************************************************************************	


	// *********************************************** Forest ************************************************

	int dirtforestcount = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 4);
	if(cNumberNonGaiaPlayers >=4) dirtforestcount = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 3);
	if(cNumberNonGaiaPlayers >=6) dirtforestcount = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 2);
	int greenforestcount = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 6);
	if(cNumberNonGaiaPlayers >=4) greenforestcount = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 4);
	if(cNumberNonGaiaPlayers >=6) greenforestcount = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 2);
	int dirtforesttreecount = rmRandInt(5,6);
	
	// Green forests big

	
	// Green forests small
	for (i=1; < greenforestcount)
	{


			int greenforesttreeID = rmCreateObjectDef("dirt forest trees"+i);
			rmAddObjectDefItem(greenforesttreeID, "TreeCarolinaMarsh", 4, 5.0);
			rmAddObjectDefItem(greenforesttreeID, "TreeBayouMarsh", 2, 8.0);
			rmAddObjectDefItem(greenforesttreeID, "TreeBayou", 2, 3.0);
			rmSetObjectDefMinDistance(greenforesttreeID,  rmXFractionToMeters(0.0));
			rmSetObjectDefMaxDistance(greenforesttreeID,  rmXFractionToMeters(0.5));
			rmAddObjectDefToClass(greenforesttreeID, classForest);
		//	rmAddObjectDefConstraint(greenforesttreeID, avoidForestShort);
			rmAddObjectDefConstraint(greenforesttreeID, avoidImpassableLandShort);
			rmAddObjectDefConstraint(greenforesttreeID, avoidTownCenterTree);
			rmAddAreaConstraint(greenforesttreeID, avoidJapan);
			rmAddAreaConstraint(greenforesttreeID, avoidTree);
			rmAddAreaConstraint(greenforesttreeID, avoidTownCenterVeryFar);
			rmAddAreaConstraint(greenforesttreeID, avoidBuilding);
			rmAddAreaConstraint(greenforesttreeID, avoidTownCenterTree);
			rmAddAreaConstraint(greenforesttreeID, avoidCoveredWagon);
		rmAddObjectDefConstraint(greenforesttreeID, avoidNatives);
			rmPlaceObjectDefAtLoc(greenforesttreeID, 0, 0.50, 0.50,7);
	}
			

	for (i=1; < greenforestcount)
	{
			int dirtforesttreeID = rmCreateObjectDef("dirt forest trees"+i);
			rmAddObjectDefItem(dirtforesttreeID, "TreeBayouMarsh", 5, 2.0);
			rmSetObjectDefMinDistance(dirtforesttreeID,  rmXFractionToMeters(0.0));
			rmSetObjectDefMaxDistance(dirtforesttreeID,  rmXFractionToMeters(0.5));
			rmAddObjectDefToClass(dirtforesttreeID, classForest);
		//	rmAddObjectDefConstraint(dirtforesttreeID, avoidForestShort);
			rmAddObjectDefConstraint(dirtforesttreeID, avoidTownCenterTree);
			rmAddObjectDefConstraint(dirtforesttreeID, avoidImpassableLandShort);
			rmAddAreaConstraint(dirtforesttreeID, avoidJapan);
			rmAddAreaConstraint(dirtforesttreeID, avoidTree);
			rmAddAreaConstraint(dirtforesttreeID, avoidBuilding);
			rmAddAreaConstraint(dirtforesttreeID, avoidTownCenterTree);
			rmAddAreaConstraint(dirtforesttreeID, avoidCoveredWagon);
		rmAddObjectDefConstraint(dirtforesttreeID, avoidNatives);
			rmPlaceObjectDefAtLoc(dirtforesttreeID, 0, 0.50, 0.50,5);
	}

	// *******************************************************************************************************


	
	// Text
	rmSetStatusText("",0.45);

	// ************************************************ Herd *************************************************

	int herdcount = (cNumberPlayers - ObsUIPlayer);
	
	for(i=0; < herdcount)
	{
	
		//Center Herd1
		int CenterHerd1ID = rmCreateObjectDef("Herd1"+i);
		rmAddObjectDefItem(CenterHerd1ID, CenterHerd1, rmRandInt(11,11), 10.0);
		rmSetObjectDefMinDistance(CenterHerd1ID, rmXFractionToMeters(0.0));
		rmSetObjectDefMaxDistance(CenterHerd1ID, rmXFractionToMeters(0.5));
		rmSetObjectDefCreateHerd(CenterHerd1ID, true);
		rmAddObjectDefConstraint(CenterHerd1ID, avoidImpassableLandShort);
		rmAddObjectDefConstraint(CenterHerd1ID, avoidNativesShort);
		rmAddObjectDefConstraint(CenterHerd1ID, avoidTradeRouteSocket);
		rmAddObjectDefConstraint(CenterHerd1ID, avoidGoldMin);
		rmAddObjectDefConstraint(CenterHerd1ID, avoidForestMin); 
		rmAddObjectDefConstraint(CenterHerd1ID, avoidTownCenterFar);
		rmAddObjectDefConstraint(CenterHerd1ID, avoidPlayerHerd2Far); 
		rmAddObjectDefConstraint(CenterHerd1ID, avoidPlayerHerd3Far); 
		rmAddObjectDefConstraint(CenterHerd1ID, avoidCenterHerd1Far); 
		rmAddObjectDefConstraint(CenterHerd1ID, avoidCenterHerd2Far); 
		rmAddObjectDefConstraint(CenterHerd1ID, avoidJapan); 
		rmAddObjectDefConstraint(CenterHerd1ID, avoidTaiwan); 
	//	rmAddObjectDefConstraint(CenterHerd1ID, avoidEdge);
		
		//Center Herd2
		int CenterHerd2ID = rmCreateObjectDef("Herd2"+i);
		rmAddObjectDefItem(CenterHerd2ID, CenterHerd2, rmRandInt(8,8), 8.0);
		rmSetObjectDefMinDistance(CenterHerd2ID, rmXFractionToMeters(0.0));
		rmSetObjectDefMaxDistance(CenterHerd2ID, rmXFractionToMeters(0.5));
		rmSetObjectDefCreateHerd(CenterHerd2ID, true);
		rmAddObjectDefConstraint(CenterHerd2ID, avoidImpassableLandShort);
		rmAddObjectDefConstraint(CenterHerd2ID, avoidNativesShort);
		rmAddObjectDefConstraint(CenterHerd2ID, avoidTradeRouteSocket);
		rmAddObjectDefConstraint(CenterHerd2ID, avoidGoldMin);
		rmAddObjectDefConstraint(CenterHerd2ID, avoidForestMin);
		rmAddObjectDefConstraint(CenterHerd2ID, avoidTownCenterFar);
		rmAddObjectDefConstraint(CenterHerd2ID, avoidPlayerHerd2Far); 
		rmAddObjectDefConstraint(CenterHerd2ID, avoidPlayerHerd3Far); 
		rmAddObjectDefConstraint(CenterHerd2ID, avoidCenterHerd1Far); 
		rmAddObjectDefConstraint(CenterHerd2ID, avoidCenterHerd2Far); 
		rmAddObjectDefConstraint(CenterHerd2ID, avoidJapan); 
		rmAddObjectDefConstraint(CenterHerd2ID, avoidTaiwan); 
	//	rmAddObjectDefConstraint(CenterHerd2ID, avoidEdge);

		if (i == 0 )
		{
			rmAddObjectDefConstraint(CenterHerd1ID, staySWHalf);
			rmAddObjectDefConstraint(CenterHerd2ID, staySWHalf);
		}
		else if (i == 1)
		{
			rmAddObjectDefConstraint(CenterHerd1ID, stayNEHalf);
			rmAddObjectDefConstraint(CenterHerd2ID, stayNEHalf);
		}
		if (i < 2)
			rmPlaceObjectDefAtLoc(CenterHerd1ID, 0, 0.50, 0.50);
		rmPlaceObjectDefAtLoc(CenterHerd1ID, 0, 0.50, 0.50);
		rmPlaceObjectDefAtLoc(CenterHerd2ID, 0, 0.50, 0.50);
	}
	
	// *******************************************************************************************************
	
	// Text
	rmSetStatusText("",0.46);

	// ********************************************** Treasure ***********************************************
	
	int nuggetLV4count = (cNumberPlayers - ObsUIPlayer);
	int nuggetLV3count = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 2);
	int nuggetLV2count = ((cNumberNonGaiaPlayers - ObsUIPlayer) * 5);
	
	// Treasures center	

	int Nugget4ID = rmCreateObjectDef("nugget4"); 
	rmAddObjectDefItem(Nugget4ID, "Nugget", 1, 0.0);
	rmSetObjectDefMinDistance(Nugget4ID, 0);
	rmSetObjectDefMaxDistance(Nugget4ID, rmXFractionToMeters(0.6));
	rmAddObjectDefConstraint(Nugget4ID, avoidNuggetFar);
	rmAddObjectDefConstraint(Nugget4ID, avoidNatives);
	rmAddObjectDefConstraint(Nugget4ID, avoidTradeRouteShort);
	rmAddObjectDefConstraint(Nugget4ID, avoidTradeRouteSocket);
	rmAddObjectDefConstraint(Nugget4ID, avoidImpassableLand);
	rmAddObjectDefConstraint(Nugget4ID, avoidGoldTypeMin);
	rmAddObjectDefConstraint(Nugget4ID, avoidTownCenterFar);
	rmAddObjectDefConstraint(Nugget4ID, avoidPlayerHerd2Min); 
	rmAddObjectDefConstraint(Nugget4ID, avoidPlayerHerd3Min);
	rmAddObjectDefConstraint(Nugget4ID, avoidCenterHerd1Min); 
	rmAddObjectDefConstraint(Nugget4ID, avoidCenterHerd2Min);
	rmAddObjectDefConstraint(Nugget4ID, avoidForestMin);	
	rmAddObjectDefConstraint(Nugget4ID, avoidEdgeMore);
		
	for (i=0; <= nuggetLV4count)
	{
	rmSetNuggetDifficulty(4,4);
	rmPlaceObjectDefAtLoc(Nugget4ID, 0, 0.50, 0.50);
	}

	int HardID = rmCreateObjectDef("nugget3"); 
	rmAddObjectDefItem(HardID, "Nugget", 1, 0.0);
	rmSetObjectDefMinDistance(HardID, 0);
	rmSetObjectDefMaxDistance(HardID, rmXFractionToMeters(0.6));
	rmAddObjectDefConstraint(HardID, avoidNuggetShort);
	rmAddObjectDefConstraint(HardID, avoidNatives);
	rmAddObjectDefConstraint(HardID, avoidTradeRouteShort);
	rmAddObjectDefConstraint(HardID, avoidTradeRouteSocket);
	rmAddObjectDefConstraint(HardID, avoidImpassableLand);
	rmAddObjectDefConstraint(HardID, avoidGoldTypeMin);
	rmAddObjectDefConstraint(HardID, avoidTownCenterFar);
	rmAddObjectDefConstraint(HardID, avoidPlayerHerd2Min); 
	rmAddObjectDefConstraint(HardID, avoidPlayerHerd3Min);
	rmAddObjectDefConstraint(HardID, avoidCenterHerd1Min); 
	rmAddObjectDefConstraint(HardID, avoidCenterHerd2Min);
	rmAddObjectDefConstraint(HardID, avoidForestMin);	
	rmAddObjectDefConstraint(HardID, avoidEdgeMore);
		
	for (i=0; <= nuggetLV3count)
	{
	rmSetNuggetDifficulty(3,3);
	rmPlaceObjectDefAtLoc(HardID, 0, 0.50, 0.50);
	}

	int NuggetID = rmCreateObjectDef("nugget2"); 
	rmAddObjectDefItem(NuggetID, "Nugget", 1, 0.0);
	rmSetObjectDefMinDistance(NuggetID, 0);
	rmSetObjectDefMaxDistance(NuggetID, rmXFractionToMeters(0.6));
	rmAddObjectDefConstraint(NuggetID, avoidNuggetShort);
	rmAddObjectDefConstraint(NuggetID, avoidNatives);
	rmAddObjectDefConstraint(NuggetID, avoidTradeRouteShort);
	rmAddObjectDefConstraint(NuggetID, avoidTradeRouteSocket);
	rmAddObjectDefConstraint(NuggetID, avoidImpassableLand);
	rmAddObjectDefConstraint(NuggetID, avoidGoldTypeMin);
	rmAddObjectDefConstraint(NuggetID, avoidTownCenterFar);
	rmAddObjectDefConstraint(NuggetID, avoidPlayerHerd2Min); 
	rmAddObjectDefConstraint(NuggetID, avoidPlayerHerd3Min);
	rmAddObjectDefConstraint(NuggetID, avoidCenterHerd1Min); 
	rmAddObjectDefConstraint(NuggetID, avoidCenterHerd2Min);
	rmAddObjectDefConstraint(NuggetID, avoidForestMin);	
	rmAddObjectDefConstraint(NuggetID, avoidEdgeMore);
		
	for (i=0; <= nuggetLV2count)
	{
	rmSetNuggetDifficulty(2,2);
	rmPlaceObjectDefAtLoc(NuggetID, 0, 0.50, 0.50);
	}

	// *******************************************************************************************************
	
/*	// ************************************************ Cows *************************************************
	
	int cowcount = 4;
	for (i=0; <cowcount)
	{
	int CowID = rmCreateObjectDef("cow"+i);
	rmAddObjectDefItem(CowID, "cow", 2, 4.0);
	rmSetObjectDefMinDistance(CowID, 0.0);
	rmSetObjectDefMaxDistance(CowID, rmXFractionToMeters(0.6));
	rmAddObjectDefConstraint(CowID, avoidTradeRouteSocket);
	rmAddObjectDefConstraint(CowID, avoidImpassableLandShort);
	rmAddObjectDefConstraint(CowID, avoidNatives);
	rmAddObjectDefConstraint(CowID, avoidEdge);
	rmAddObjectDefConstraint(CowID, avoidNuggetMin);
//	rmAddObjectDefConstraint(CowID, avoidCow);
	rmAddObjectDefConstraint(CowID, avoidTownCenterMed);
	rmAddObjectDefConstraint(CowID, avoidForestMin);
	if (i==0)
		rmAddObjectDefConstraint(CowID, stayInAreaA);
	else if (i==1)
		rmAddObjectDefConstraint(CowID, stayInAreaB);
	else if (i==2)
		rmAddObjectDefConstraint(CowID, stayInAreaC);
	else
		rmAddObjectDefConstraint(CowID, stayInAreaD);
	rmPlaceObjectDefAtLoc(CowID, 0, 0.5, 0.5);
	}
	
*/
	// *******************************************************************************************************

	// Text
	rmSetStatusText("",0.47);


	// Text
	rmSetStatusText("",0.48);
	// ******************************************* Sea Resource ********************************************
	int FishSalmoncount = (cNumberPlayers - ObsUIPlayer) * 5;
	int FishSardinecount = (cNumberPlayers - ObsUIPlayer) * 5;
//	int waternuggetcount = (cNumberNonGaiaPlayers - ObsUIPlayer) * 4;
	int whalecount = (((cNumberNonGaiaPlayers - ObsUIPlayer) * 3) + rmRandInt(1,2));
	int Junkcount = (cNumberPlayers - ObsUIPlayer) * 1;
	int RandomJunk = rmRandInt(0,1);

	int waterSpawnPointID = rmCreateObjectDef("Flag");
	rmAddObjectDefItem(waterSpawnPointID, "HomeCityWaterSpawnFlag", 1, 0.0);
	rmAddClosestPointConstraint(flagVsFlag);
	rmAddClosestPointConstraint(flagLand);
	rmAddClosestPointConstraint(avoidShallow);
//	rmAddClosestPointConstraint(flagEdgeConstraint);

	for(i=1; <cNumberPlayers - ObsUIPlayer)
	{

	int ShipsID = rmCreateObjectDef("Ships"+i);
	if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		rmAddObjectDefItem(ShipsID,"Canoe", 2, 10.0);
		}
	else if (rmGetPlayerCiv(i) == 8)
		{
		rmAddObjectDefItem(ShipsID,"Canoe", 2, 10.0);
		}
	else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		rmAddObjectDefItem(ShipsID,"Canoe", 2, 10.0);
		}
	else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		rmAddObjectDefItem(ShipsID,"Canoe", 2, 10.0);
		}
	else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		rmAddObjectDefItem(ShipsID,"Canoe", 2, 10.0);
		}
	else
		{
		rmAddObjectDefItem(ShipsID,"Canoe", 2, 10.0);
		}
	rmAddClosestPointConstraint(shipsVsFlag);
	rmAddClosestPointConstraint(flagLand);

	vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TCID, i));
	vector closestPoint = rmFindClosestPointVector(TCLocation, rmXFractionToMeters(1.0));
	rmPlaceObjectDefAtLoc(waterSpawnPointID, i, rmXMetersToFraction(xsVectorGetX(closestPoint)), rmZMetersToFraction(xsVectorGetZ(closestPoint)));
	if(rmGetIsFFA() != true ||cNumberNonGaiaPlayers == 2)
		{
		rmPlaceObjectDefAtLoc(ShipsID, i, rmXMetersToFraction(xsVectorGetX(closestPoint)), rmZMetersToFraction(xsVectorGetZ(closestPoint)));
		}

	}
	rmClearClosestPointConstraints();

	int FountainID=rmCreateObjectDef("FountainOfYouth");
	rmAddObjectDefItem(FountainID, "SPCFountainOfYouth", 1, 0.0);
	rmSetObjectDefMinDistance(FountainID, 0.0);
	rmSetObjectDefMaxDistance(FountainID, 10);
	rmAddObjectDefConstraint(FountainID, avoidFishLand);
	rmPlaceObjectDefAtLoc(FountainID, 0, 0.55, 0.45, 1);

	int Fisch1=rmCreateObjectDef("Fish 1");
	rmAddObjectDefItem(Fisch1, "FishMoonBass", 1, 0.0);
	rmSetObjectDefMinDistance(Fisch1, 0.3);
	rmSetObjectDefMaxDistance(Fisch1, rmXFractionToMeters(0.5));
	rmAddObjectDefConstraint(Fisch1, avoidFish);
	rmAddObjectDefConstraint(Fisch1, avoidFishLand);
	rmPlaceObjectDefAtLoc(Fisch1, 0, 0.5, 0.5, FishSalmoncount);

	int Fisch2=rmCreateObjectDef("Fish 2");
	rmAddObjectDefItem(Fisch2, "FishMoonBass", 1, 0.0);
	rmSetObjectDefMinDistance(Fisch2, 0.3);
	rmSetObjectDefMaxDistance(Fisch2, rmXFractionToMeters(0.5));
	rmAddObjectDefConstraint(Fisch2, avoidFish);
	rmAddObjectDefConstraint(Fisch2, avoidFishLand);
	rmPlaceObjectDefAtLoc(Fisch2, 0, 0.5, 0.5, FishSardinecount);
/*
	int nuggetW= rmCreateObjectDef("nugget water"); 
	rmAddObjectDefItem(nuggetW, "ypNuggetBoat", 1, 0.0);
	rmSetNuggetDifficulty(5, 5);
	rmSetObjectDefMinDistance(nuggetW, rmXFractionToMeters(0.0));
	rmSetObjectDefMaxDistance(nuggetW, rmXFractionToMeters(0.5));
	rmAddObjectDefConstraint(nuggetW, nuggetVsFlag);
	rmAddObjectDefConstraint(nuggetW, avoidLand);
	rmAddObjectDefConstraint(nuggetW, avoidNuggetWater);
	rmPlaceObjectDefAtLoc(nuggetW, 0, 0.5, 0.5, waternuggetcount);

	int whaleID=rmCreateObjectDef("whale");
	rmAddObjectDefItem(whaleID, "HumpbackWhale", 1, 0.0);
	rmSetObjectDefMinDistance(whaleID, 0.0);
	rmSetObjectDefMaxDistance(whaleID, rmXFractionToMeters(0.5));
	rmAddObjectDefConstraint(whaleID, whaleVsWhaleID);
	rmAddObjectDefConstraint(whaleID, whaleLand);
	rmPlaceObjectDefAtLoc(whaleID, 0, 0.5, 0.5, whalecount);
*/
/*
	if (RandomJunk == 1)
	{
	int JunkID=rmCreateObjectDef("Wokou Junk");
	rmAddObjectDefItem(JunkID, "Privateer", 1, 0.0);
	rmSetObjectDefMinDistance(JunkID, 0.0);
	rmSetObjectDefMaxDistance(JunkID, rmXFractionToMeters(0.5));
	rmAddObjectDefConstraint(JunkID, ShipVsFlag);
	rmAddObjectDefConstraint(JunkID, avoidLand);
	rmAddObjectDefConstraint(JunkID, avoidJunk);
//	rmAddObjectDefConstraint(JunkID, avoidWaterNugget);
	rmPlaceObjectDefAtLoc(JunkID, 0, 0.5, 0.5, Junkcount);
	}
*/
	// *****************************************************************************************************

	// Text
	rmSetStatusText("",0.50);

	// ****************************************** Advance Trigger ******************************************
	// 	QQ Group1:85442352	QQ Group2:456359856	E-mail:oqingtianxiaoyu@gmail.com

	int PlayerType = rmRandInt(1,2);
	int Chi1 = rmRandInt(1,2);
	int Chi2 = rmRandInt(3,4);

	// ***************************************** Installation Path *****************************************

	rmCreateTrigger("GameStart");
	rmSetTriggerRunImmediately(true);
	rmSetTriggerPriority(5);
	rmSetTriggerEffectParam("IdleProc","true);trQuestVarSet(\"Path\",1);xsDisableSelf();}}/*");
	rmCreateTrigger("Path	active	runImmediately{if(trQuestVarGet(\"Path\")!=1){"+"showSPCNote(\"Error!\",\"<color=0,255,255>Use-the-English-path-to-install-the-Age-of-Empires-III,please.\");"+"uiMessageBox2(20948);trEndGame();trYouWin(true);xsDisableRule(\"_Path\");}}/*");
	rmSetTriggerActive(false);
	rmSetTriggerPriority(5);

	rmCreateTrigger("GamestartInit");
	rmSwitchToTrigger(rmTriggerID("GamestartInit"));
	rmSetTriggerRunImmediately(true);
	oxyA("}}");

	// ********************************************** Trigger **********************************************

	// Text
	rmSetStatusText("",0.60);

	oxy("rule _0start active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 1.00000000){");
	oxy("trSetLighting(\"spcCC5b\", 420.00000000);");
	oxy("xsDisableRule(\"_0start\");");
	oxy("xsEnableRule(\"_revolutionLighting\");");
	oxyZ("}} /*");

	oxy("rule _revolutionLighting inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 419.00000000){");
	oxy("trSetLighting(\"hc_revolution\", 250.00000000);");
	oxy("xsDisableRule(\"_revolutionLighting\");");
	oxy("xsEnableRule(\"_6lISBOM\");");
	oxyZ("}} /*");

	oxy("rule _6lISBOM inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 250.00000000){");
	oxy("trSetLighting(\"Lisbon Storm\", 50.00000000);");
	oxy("xsDisableRule(\"_6lISBOM\");");
	oxy("xsEnableRule(\"_7spcJC4aflashback\");");
	oxyZ("}} /*");

	oxy("rule _7spcJC4aflashback inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 50.00000000){");
	oxy("trSetLighting(\"spcJC4aflashback\", 120.00000000);");
	oxy("xsDisableRule(\"_7spcJC4aflashback\");");
	oxy("xsEnableRule(\"_8minescent\");");
	oxyZ("}} /*");

	oxy("rule _8minescent inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 420.00000000){");
	oxy("trSetLighting(\"minescene\", 300.00000000);");
	oxy("xsDisableRule(\"_8minescent\");");
	oxy("xsEnableRule(\"_1start\");");
	oxyZ("}} /*");

	oxy("rule _1start inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 300.00000000){");
	oxy("trSetLighting(\"New England Start\", 130.00000000);");
	oxy("xsDisableRule(\"_1start\");");
	oxy("xsEnableRule(\"_2start\");");
	oxyZ("}} /*");

	oxy("rule _2start inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 130.00000000){");
		If ( PlayerType == 1 )
			{
			oxy("trSetLighting(\"yellow_river\", 140.00000000);");
			}
		If ( PlayerType == 2 )
			{
			oxy("trSetLighting(\"yukon\", 140.00000000);");
			}
	oxy("xsDisableRule(\"_2start\");");
	oxy("xsEnableRule(\"_3patagonia\");");
	oxyZ("}} /*");

	oxy("rule _3patagonia inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 140.00000000){");
	oxy("trSetLighting(\"spcCC5b\", 150.00000000);");
	oxy("xsDisableRule(\"_3patagonia\");");
	oxy("xsEnableRule(\"_4hcrevolution4\");");
	oxyZ("}} /*");

	oxy("rule _4hcrevolution4 inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 150.00000000){");
	oxy("trSetLighting(\"hc_revolution\", 250.00000000);");
	oxy("xsDisableRule(\"_4hcrevolution4\");");
	oxy("xsEnableRule(\"_6lISBOM\");");
	oxyZ("}} /*");

	//This Map Trigger
	oxy("rule _StartTech active runImmediately { ");
	oxy("if((trTime()-cActivationTime) == 0.00000000){");
	oxy("trModifyProtounit(\"IGCTownCenter\", 0, 2, -34);");
	oxy("trModifyProtounit(\"Privateer\", 0, 0, -700);");
	oxy("trModifyProtounit(\"Privateer\", 0, 2, -14);");
	oxy("trModifyProtounit(\"ypJunk\", 0, 2, -6);");
	oxy("trModifyProtounit(\"ypCatamaran\", 0, 2, -2);");
	oxy("trModifyProtounit(\"Explorer\", 0, 0, -400);");
	oxy("trModifyProtounit(\"Explorer\", 0, 0, 400);");
	oxy("trModifyProtounit(\"SPCFountainOfYouth\", 0, 0, 40000);");
	oxy("trModifyProtounit(\"FishMoonBass\", 0, 25, 499);");
	oxy("trModifyProtounit(\"SPCFixedGun\", 0, 2, -45);");
	//Explorer Nugget
		for(p=1;<=cNumberNonGaiaPlayers)
		{
		oxy("trTechSetStatus("+p+", 351, 0);");
		oxy("trTechSetStatus("+p+", 864, 0);");
		oxy("trTechSetStatus("+p+", 446, 0);");
		oxy("trTechSetStatus("+p+", 1539, 0);");
		oxy("trModifyProtounit(\"SPCFixedGun\", "+p+", 2, -38);");
		oxy("trModifyProtounit(\"SPCHealObject\", "+p+", 2, -38);");
			if (rmGetPlayerCiv(p) == 11)
				{
				oxy("trUnforbidProtounit("+p+",\"xpColonialMilitia\");");
				oxy("trUnforbidProtounit("+p+",\"xpGatlingGun\");");
				oxy("trModifyProtounit(\"SPCAmelia\", "+p+", 0, -650);");
				oxy("trModifyProtounit(\"SPCCooper\", "+p+", 0, -700);");
				}
			if (rmGetPlayerCiv(p) == 18)
				{
				oxy("trPlayerOverrideArtCulture("+p+",\"WesternEurope\");");
				oxy("trTechSetStatus("+p+", 72, 2);");
				oxy("trTechSetStatus("+p+", 1572, 2);");
				oxy("trTechSetStatus("+p+", 1384, 0);");
				oxy("trTechSetStatus("+p+", 1385, 0);");
				oxy("trTechSetStatus("+p+", 1386, 0);");
				oxy("trTechSetStatus("+p+", 1520, 1);");
				oxy("trTechSetStatus("+p+", 409, 1);");
				oxy("trTechSetStatus("+p+", 449, 1);");
				oxy("trTechSetStatus("+p+", 260, 1);");
				oxy("trTechSetStatus("+p+", 264, 1);");
				oxy("trTechSetStatus("+p+", 450, 1);");
				oxy("trTechSetStatus("+p+", 269, 1);");
				oxy("trTechSetStatus("+p+", 270, 1);");
				oxy("trTechSetStatus("+p+", 275, 1);");
				oxy("trTechSetStatus("+p+", 300, 1);");
				oxy("trTechSetStatus("+p+", 461, 1);");
				oxy("trTechSetStatus("+p+", 464, 1);");
				oxy("trTechSetStatus("+p+", 522, 1);");
				oxy("trTechSetStatus("+p+", 523, 1);");
				oxy("trTechSetStatus("+p+", 537, 1);");
				oxy("trTechSetStatus("+p+", 579, 1);");
				oxy("trTechSetStatus("+p+", 665, 1);");
				oxy("trTechSetStatus("+p+", 1098, 1);");
				oxy("trTechSetStatus("+p+", 1099, 1);");
				oxy("trTechSetStatus("+p+", 525, 1);");
				oxy("trTechSetStatus("+p+", 527, 1);");
				oxy("trTechSetStatus("+p+", 1426, 1);");
				oxy("trTechSetStatus("+p+", 1427, 1);");
				oxy("trTechSetStatus("+p+", 1108, 1);");
				oxy("trTechSetStatus("+p+", 1116, 1);");
				//oxy("trTechSetStatus("+p+", 1125, 1);");
				oxy("trTechSetStatus("+p+", 1126, 1);");
				oxy("trTechSetStatus("+p+", 1127, 1);");
				oxy("trTechSetStatus("+p+", 278, 1);");
				oxy("trTechSetStatus("+p+", 279, 1);");
				oxy("trTechSetStatus("+p+", 280, 1);");
				oxy("trTechSetStatus("+p+", 281, 1);");
				//oxy("trTechSetStatus("+p+", 282, 1);");
				oxy("trTechSetStatus("+p+", 283, 1);");
				oxy("trTechSetStatus("+p+", 284, 1);");
				//oxy("trTechSetStatus("+p+", 285, 1);");
				//oxy("trTechSetStatus("+p+", 286, 1);");
				oxy("trTechSetStatus("+p+", 287, 1);");
				oxy("trTechSetStatus("+p+", 288, 1);");
				oxy("trTechSetStatus("+p+", 1069, 1);");
				oxy("trTechSetStatus("+p+", 1664, 1);");
				oxy("trTechSetStatus("+p+", 292, 1);");
				oxy("trTechSetStatus("+p+", 341, 1);");
				oxy("trTechSetStatus("+p+", 389, 1);");
				oxy("trTechSetStatus("+p+", 1662, 1);");
				oxy("trTechSetStatus("+p+", 272, 1);");
				oxy("trTechSetStatus("+p+", 407, 1);");
				oxy("trTechSetStatus("+p+", 462, 1);");
				oxy("trTechSetStatus("+p+", 416, 1);");
				oxy("trTechSetStatus("+p+", 417, 1);");
				oxy("trTechSetStatus("+p+", 418, 1);");
				oxy("trTechSetStatus("+p+", 289, 1);");
				oxy("trTechSetStatus("+p+", 290, 1);");
				oxy("trTechSetStatus("+p+", 479, 1);");
				oxy("trTechSetStatus("+p+", 480, 1);");
				oxy("trTechSetStatus("+p+", 428, 1);");
				oxy("trTechSetStatus("+p+", 429, 1);");
				oxy("trTechSetStatus("+p+", 1110, 1);");
				oxy("trTechSetStatus("+p+", 1122, 1);");
				oxy("trTechSetStatus("+p+", 451, 1);");
				oxy("trTechSetStatus("+p+", 505, 1);");
				oxy("trTechSetStatus("+p+", 504, 1);");
				oxy("trTechSetStatus("+p+", 507, 1);");
				oxy("trTechSetStatus("+p+", 506, 1);");
				oxy("trTechSetStatus("+p+", 509, 1);");
				oxy("trTechSetStatus("+p+", 519, 1);");
				oxy("trTechSetStatus("+p+", 520, 1);");
				oxy("trTechSetStatus("+p+", 399, 1);");
				oxy("trTechSetStatus("+p+", 397, 1);");
				oxy("trTechSetStatus("+p+", 398, 1);");
				oxy("trTechSetStatus("+p+", 485, 1);");
				oxy("trTechSetStatus("+p+", 495, 1);");
				oxy("trTechSetStatus("+p+", 400, 1);");
				oxy("trTechSetStatus("+p+", 142, 1);");
				oxy("trTechSetStatus("+p+", 1140, 1);");
				oxy("trTechSetStatus("+p+", 1557, 1);");
				oxy("trTechSetStatus("+p+", 1519, 1);");
				oxy("trTechSetStatus("+p+", 1128, 1);");
				oxy("trTechSetStatus("+p+", 1129, 1);");
				oxy("trTechSetStatus("+p+", 1522, 1);");
				oxy("trTechSetStatus("+p+", 1523, 1);");
				oxy("trForbidProtounit("+p+",\"SettlerNative\");");
				oxy("trForbidProtounit("+p+",\"Corral\");");
				oxy("trUnforbidProtounit("+p+",\"xpColonialMilitia\");");
				oxy("trUnforbidProtounit("+p+",\"xpGatlingGun\");");
				oxy("trUnforbidProtounit("+p+",\"xpSPCColonialMilitia\");");
				oxy("trUnforbidProtounit("+p+",\"Settler\");");
				oxy("trUnforbidProtounit("+p+",\"Factory\");");
				oxy("trUnforbidProtounit("+p+",\"FortFrontier\");");
				oxy("trUnforbidProtounit("+p+",\"SPCXPFortWagon\");");
				oxy("trUnforbidProtounit("+p+",\"Church\");");
				oxy("trUnforbidProtounit("+p+",\"Arsenal\");");
				oxy("trUnforbidProtounit("+p+",\"Sheep\");");
				oxy("trUnforbidProtounit("+p+",\"Stable\");");
				oxy("trUnforbidProtounit("+p+",\"FieldHospital\");");
				oxy("trUnforbidProtounit("+p+",\"Hussar\");");
				oxy("trUnforbidProtounit("+p+",\"WallStraight5\");");
				oxy("trUnforbidProtounit("+p+",\"WallStraight2\");");
				oxy("trUnforbidProtounit("+p+",\"WallConnector\");");
				oxy("trUnforbidProtounit("+p+",\"House\");");
				oxy("trUnforbidProtounit("+p+",\"WallConnector\");");
				oxy("trUnforbidProtounit("+p+",\"Dragoon\");");
				oxy("trUnforbidProtounit("+p+",\"xpTomahawk\");");
				oxy("trUnforbidProtounit("+p+",\"Saloon\");");
				oxy("trUnforbidProtounit("+p+",\"Outpost\");");
				oxy("trUnforbidProtounit("+p+",\"Caravel\");");
				oxy("trUnforbidProtounit("+p+",\"Frigate\");");
				oxy("trUnforbidProtounit("+p+",\"Monitor\");");
				oxy("trUnforbidProtounit("+p+",\"Capitol\");");
				oxy("trUnforbidProtounit("+p+",\"Priest\");");
				oxy("trUnforbidProtounit("+p+",\"Surgeon\");");
				oxy("trUnforbidProtounit("+p+",\"Grenadier\");");
				oxy("trUnforbidProtounit("+p+",\"Falconet\");");
				oxy("trUnforbidProtounit("+p+",\"Culverin\");");
				oxy("trUnforbidProtounit("+p+",\"Mortar\");");
				oxy("trUnforbidProtounit("+p+",\"xpMantlet\");");
				oxy("trUnforbidProtounit("+p+",\"ArtilleryDepot\");");
				oxy("trUnforbidProtounit("+p+",\"xpPetard\");");
				oxy("trModifyProtounit(\"SPCXPWashington\", "+p+", 0, -1050);");
				oxy("trModifyProtounit(\"SPCXPNathaniel\", "+p+", 0, -850);");
				}
		}
	oxy("xsDisableRule(\"_StartTech\");");
	oxyZ("}} /*");

	// Text
	rmSetStatusText("",0.65);

	for(i=1;<=cNumberNonGaiaPlayers)
	{//For i Start.
	if (rmGetPlayerCiv(i) == 18)
	{//XPSPC
	oxy("rule _Colonialize"+i+" active runImmediately { ");
	oxy("if(trTechStatusCheck("+i+",522,2) || trTechStatusCheck("+i+",523,2) || trTechStatusCheck("+i+",537,2)){");
	oxy("trModifyProtounit(\"SPCXPWashington\", "+i+", 0, 200);");
	oxy("trModifyProtounit(\"SPCXPNathaniel\", "+i+", 0, 200);");
	oxy("xsDisableRule(\"_Colonialize"+i+"\");");
	oxyZ("}} /*");

	oxy("rule _Fortressize"+i+" active runImmediately { ");
	oxy("if(trTechStatusCheck("+i+",579,2) || trTechStatusCheck("+i+",665,2)){");
	oxy("trModifyProtounit(\"SPCXPWashington\", "+i+", 0, 200);");
	oxy("trModifyProtounit(\"SPCXPNathaniel\", "+i+", 0, 200);");
	oxy("xsDisableRule(\"_Fortressize"+i+"\");");
	oxyZ("}} /*");

	oxy("rule _Industrialize"+i+" active runImmediately { ");
	oxy("if(trTechStatusCheck("+i+",685,2) || trTechStatusCheck("+i+",1098,2) || trTechStatusCheck("+i+",1099,2)){");
	oxy("trModifyProtounit(\"SPCXPWashington\", "+i+", 0, 200);");
	oxy("trModifyProtounit(\"SPCXPNathaniel\", "+i+", 0, 200);");
	oxy("trModifyProtounit(\"xpColonialMilitia\", "+i+", 0, 70);");
	oxy("trModifyProtounit(\"xpSPCColonialMilitia\", "+i+", 0, 42);");
	oxy("trTechSetStatus("+i+", 314, 2);");
	oxy("trTechSetStatus("+i+", 291, 2);");
	oxy("xsDisableRule(\"_Industrialize"+i+"\");");
	oxyZ("}} /*");

	oxy("rule _Imperialize"+i+" active runImmediately { ");
	if (rmGetPlayerCiv(i) == rmGetCivID("XPSPC"))
	oxy("if(trTechStatusCheck("+i+",525,2)){");
	oxy("trModifyProtounit(\"SPCXPWashington\", "+i+", 0, 250);");
	oxy("trModifyProtounit(\"SPCXPNathaniel\", "+i+", 0, 250);");
	oxy("trModifyProtounit(\"xpColonialMilitia\", "+i+", 0, 100);");
	oxy("trModifyProtounit(\"xpSPCColonialMilitia\", "+i+", 0, 60);");
	oxy("trTechSetStatus("+i+", 1817, 2);");
	oxy("trTechSetStatus("+i+", 1004, 2);");
	oxy("trTechSetStatus("+i+", 481, 2);");
	oxy("xsDisableRule(\"_Imperialize"+i+"\");");
	oxyZ("}} /*");
	}//XPSPC

	}//For i End.

	// *****************************************************************************************************

	// Text
	rmSetStatusText("",0.70);


	rmSetStatusText("",0.90);

	// *********************************************** TEST ************************************************

	rmSetStatusText("",0.95);

	oxy("rule _DisableFixedGunConvert active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 0.00000000){");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(FixedGunID, 0)+");");
	oxy("trUnitSuspendAction(\"AutoConvert\",True);");
	oxy("xsDisableRule(\"_DisableFixedGunConvert\");");
	oxyZ("}} /*");

	oxy("rule _EnableFixedGunConvert inactive runImmediately { ");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(BarracksID, 0)+");");
	oxy("if(trUnitDead()==true){");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(BoneguardID, 0)+");");
	oxy("if(trUnitDead()==true){");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(BoneguardAge2ID, 0)+");");
	oxy("if(trUnitDead()==true){");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(BoneguardAge2ID, 0)+"+1);");
	oxy("if(trUnitDead()==true){");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(BoneguardAge2ID, 0)+"+1);");
	oxy("if(trUnitDead()==true){");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(FixedGunID, 0)+");");
	oxy("trUnitSuspendAction(\"AutoConvert\",False);");
	oxy("xsDisableRule(\"_EnableFixedGunConvert\");");
	oxy("xsEnableRule(\"_DisableFixedGunTrigger\");");
	oxy("}}}}}");
	oxy("xsDisableRule(\"_EnableFixedGunConvert\");");
	oxy("xsEnableRule(\"_EnableFixedGunConvert20Second\");");
	oxyZ("} /*");

	oxy("rule _EnableFixedGunConvert20Second active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 20.00000000){");
	oxy("xsDisableRule(\"_EnableFixedGunConvert20Second\");");
	oxy("xsEnableRule(\"_EnableFixedGunConvert\");");
	oxyZ("}} /*");

	oxy("rule _DisableFixedGunTrigger inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 5.00000000){");
	oxy("xsDisableRule(\"_EnableFixedGunConvert20Second\");");
	oxy("xsDisableRule(\"_DisableFixedGunTrigger\");");
	oxy("xsDisableRule(\"_EnableFixedGunConvert\");");
	oxyZ("}} /*");


	oxy("rule _SetUnitID active runImmediately { ");
	oxy("for(UnittypeID=3000;>-1){if(kbGetUnitTypeName(UnittypeID) ==\"Unit\") Break;}");
	oxy("for(WarShipsID=3000;>-1){if(kbGetUnitTypeName(WarShipsID) ==\"AbstractWarShip\") Break;}");
	oxy("if((trTime()-cActivationTime) == 0.00000000){");
	oxy("trQuestVarSet(\"cUnittypeUnit\",UnittypeID);");
	oxy("trQuestVarSet(\"cUnittypeAbstractWarShip\",WarShipsID);");
	oxy("xsDisableRule(\"_SetUnitID\");");
	oxyZ("}} /*");

/*
	oxy("rule _SetUnitID active runImmediately { ");
	oxy("if((trTime()-cActivationTime) == 0.00000000){");
	oxy("trQuestVarSet(\"Unit\",0);");
	oxy("while(kbGetUnitTypeName(trQuestVarGet(\"Unit\"))!=\"Unit\"){");
	oxy("trQuestVarSet(\"Unit\",trQuestVarGet(\"Unit\")+1);}");
	oxy("xsDisableRule(\"_SetUnitID\");");
	oxyZ("}} /*");
*/
/*
	oxy("rule _GetUnitID active runImmediately { ");
		oxy("xsSetContextPlayer(1);");
	oxy("if((trTime()-cActivationTime) == 10.00000000){");
	oxy("trChatSendSpoofed(0,\"GetUnitID:\"+trQuestVarGet(\"cUnittypeUnit\"));");
	oxy("for(u=trQuestVarGet(\"cUnittypeUnit\");>1)");
	oxy("{");
	oxy("if(kbProtoUnitIsType(1, u,trQuestVarGet(\"cUnittypeUnit\")))");
	oxy("trModifyProtounit(\"\"+kbGetProtoUnitName(u), 1, 0, 1000.0);");
	oxy("xsDisableRule(\"_GetUnitID\");");
	oxy("}");
	oxyZ("}} /*");
*/

	oxy("rule _DisableFountainHeal inactive runImmediately { ");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(FountainID, 0)+");");
	oxy("if(trUnitDead()==true){");
	for(p=1;<=cNumberNonGaiaPlayers)
		{
		oxy("trModifyProtounit(\"SPCHealObject\", "+p+", 0, -50000);");
		}
	oxy("xsEnableRule(\"_UnitReduceHP\");");
	oxy("xsEnableRule(\"_UnitLifespan1200Second\");");
	oxy("trSoundPlayPaused(\"xpack\UI\StrategyWarning.wav\");");
	oxy("trCounterAddTime(\"Punishing\",2400,0,\"God's punishing hands\",);");
	oxy("}");
	oxy("else");
	oxy("{");
	oxy("xsEnableRule(\"_CheckFountainHeal\");");
	oxy("}");
	oxy("xsDisableRule(\"_DisableFountainHeal\");");
	oxyZ("} /*");

	oxy("rule _CheckFountainHeal active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 120.00000000){");
	oxy("xsDisableRule(\"_CheckFountainHeal\");");
	oxy("xsEnableRule(\"_DisableFountainHeal\");");
	oxyZ("}} /*");

	oxy("rule _UnitLifespan1200Second inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 1200.00000000){");
	oxy("trSoundPlayPaused(\"xpack\UI\StrategyWarning.wav\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>Your people have a lifespan of a 20 minute from now on.\");");
	oxy("xsDisableRule(\"_UnitLifespan1200Second\");");
	oxy("xsEnableRule(\"_UnitLifespan\");");
	oxyZ("}} /*");

	oxy("rule _UnitAddHP active runImmediately { ");
	oxy("if((trTime()-cActivationTime) == 0.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("xsSetContextPlayer("+p+");");
	oxy("for(unitID"+p+"=trQuestVarGet(\"cUnittypeUnit\");>1)");
	oxy("{");
	oxy("if(kbProtoUnitIsType("+p+", unitID"+p+",trQuestVarGet(\"cUnittypeUnit\")))");
	oxy("trModifyProtounit(\"\"+kbGetProtoUnitName(unitID"+p+"), "+p+", 0, 31.0);");
	oxy("}");
	}
	oxy("xsDisableRule(\"_UnitAddHP\");");
	oxyZ("}} /*");

	oxy("rule _UnitReduceHP inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 0.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("xsSetContextPlayer("+p+");");
	oxy("for(unitID"+p+"=trQuestVarGet(\"cUnittypeUnit\");>1)");
	oxy("{");
	oxy("if(kbProtoUnitIsType("+p+", unitID"+p+",trQuestVarGet(\"cUnittypeUnit\")))");
	oxy("trModifyProtounit(\"\"+kbGetProtoUnitName(unitID"+p+"), "+p+", 0, -50.0);");
	oxy("}");
	}
	oxy("xsDisableRule(\"_UnitReduceHP\");");
	oxyZ("}} /*");

	oxy("rule _UnitLifespan inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 0.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("xsSetContextPlayer("+p+");");
	oxy("for(unitID"+p+"=trQuestVarGet(\"cUnittypeUnit\");>1)");
	oxy("{");
	oxy("if(kbProtoUnitIsType("+p+", unitID"+p+",trQuestVarGet(\"cUnittypeUnit\")))");
	oxy("trModifyProtounit(\"\"+kbGetProtoUnitName(unitID"+p+"), "+p+", 8, 1200.0);");
	oxy("}");
	}
	oxy("xsEnableRule(\"_Warning\");");
	oxy("xsEnableRule(\"_Power\");");
	oxy("xsDisableRule(\"_UnitLifespan\");");
	oxyZ("}} /*");

	oxy("rule _Warning inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 1196.00000000){");
	oxy("trSoundPlayPaused(\"xpack\UI\StrategyWarning.wav\");");
	oxy("xsDisableRule(\"_Warning\");");
	oxyZ("}} /*");

	oxy("rule _Power inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 1200.00000000){");
	oxy("trSoundPlayPaused(\"xpack\UI\Lose.wav\");");
	oxy("trSoundPlayPaused(\"ypack\UI\Stomp.wav\");");
	oxy("trOverlayText(\"The Wrath of the Gods ! \",3.0);");
	oxy("trChatSendSpoofed(0,\"<color=255,0,0>The Wrath of the Gods !\");");
	oxy("xsEnableRule(\"_Life\");");
	oxy("xsDisableRule(\"_Power\");");
	oxyZ("}} /*");

	oxy("rule _Life inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 1200.00000000){");
	oxy("trOverlayText(\"The Unit Lifespan returns to normal.\",3.0);");
	oxy("xsEnableRule(\"_UnitLife\");");
	oxy("xsDisableRule(\"_Life\");");
	oxyZ("}} /*");

	oxy("rule _UnitLife inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 0.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("xsSetContextPlayer("+p+");");
	oxy("for(unitID"+p+"=trQuestVarGet(\"cUnittypeUnit\");>1)");
	oxy("{");
	oxy("if(kbProtoUnitIsType("+p+", unitID"+p+",trQuestVarGet(\"cUnittypeUnit\")))");
	oxy("trModifyProtounit(\"\"+kbGetProtoUnitName(unitID"+p+"), "+p+", 8, -1200.0);");
	oxy("}");
	}
	oxy("xsDisableRule(\"_UnitLife\");");
	oxyZ("}} /*");

	vector LocFlag1 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 1));
	float LOCXFlag1 = xsVectorGetX(LocFlag1);
	float LOCYFlag1 = xsVectorGetY(LocFlag1);
	float LOCZFlag1 = xsVectorGetZ(LocFlag1);

	vector LocFlag2 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 2));
	float LOCXFlag2 = xsVectorGetX(LocFlag2);
	float LOCYFlag2 = xsVectorGetY(LocFlag2);
	float LOCZFlag2 = xsVectorGetZ(LocFlag2);

	if(cNumberNonGaiaPlayers >=3)
	{
	vector LocFlag3 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 3));
	float LOCXFlag3 = xsVectorGetX(LocFlag3);
	float LOCYFlag3 = xsVectorGetY(LocFlag3);
	float LOCZFlag3 = xsVectorGetZ(LocFlag3);
	}

	if(cNumberNonGaiaPlayers >=4)
	{
	vector LocFlag4 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 4));
	float LOCXFlag4 = xsVectorGetX(LocFlag4);
	float LOCYFlag4 = xsVectorGetY(LocFlag4);
	float LOCZFlag4 = xsVectorGetZ(LocFlag4);
	}
	
	if(cNumberNonGaiaPlayers >=5)
	{
	vector LocFlag5 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 5));
	float LOCXFlag5 = xsVectorGetX(LocFlag5);
	float LOCYFlag5 = xsVectorGetY(LocFlag5);
	float LOCZFlag5 = xsVectorGetZ(LocFlag5);
	}

	if(cNumberNonGaiaPlayers >=6)
	{
	vector LocFlag6 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 6));
	float LOCXFlag6 = xsVectorGetX(LocFlag6);
	float LOCYFlag6 = xsVectorGetY(LocFlag6);
	float LOCZFlag6 = xsVectorGetZ(LocFlag6);
	}

	if(cNumberNonGaiaPlayers >=7)
	{
	vector LocFlag7 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 7));
	float LOCXFlag7 = xsVectorGetX(LocFlag7);
	float LOCYFlag7 = xsVectorGetY(LocFlag7);
	float LOCZFlag7 = xsVectorGetZ(LocFlag7);
	}

	if(cNumberNonGaiaPlayers >=8)
	{
	vector LocFlag8 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(waterSpawnPointID, 8));
	float LOCXFlag8 = xsVectorGetX(LocFlag8);
	float LOCYFlag8 = xsVectorGetY(LocFlag8);
	float LOCZFlag8 = xsVectorGetZ(LocFlag8);
	}

	oxy("rule _Sent1Ships active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 240.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("if(kbIsPlayerHuman("+p+") != true){");
	oxy("xsEnableRule(\"_AIShips"+p+"\");");
	oxy("}");
	}
	oxy("xsEnableRule(\"_Sent2Ships\");");
	oxy("xsDisableRule(\"_Sent1Ships\");");
	oxy("}");
	oxyZ("} /*");

	oxy("rule _Sent2Ships inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 240.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("if(kbIsPlayerHuman("+p+") != true){");
	oxy("xsEnableRule(\"_AIShips"+p+"\");");
	oxy("}");
	}
	oxy("xsEnableRule(\"_Sent1Ships\");");
	oxy("xsDisableRule(\"_Sent2Ships\");");
	oxy("}");
	oxyZ("} /*");

	oxy("rule _Sent3Ships active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 420.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("if(kbIsPlayerHuman("+p+") != true){");
	oxy("xsEnableRule(\"_AI2Ships"+p+"\");");
	oxy("}");
	}
	oxy("xsEnableRule(\"_Sent4Ships\");");
	oxy("xsDisableRule(\"_Sent3Ships\");");
	oxy("}");
	oxyZ("} /*");

	oxy("rule _Sent4Ships inactive runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 420.00000000){");
	for(p=1;<=cNumberNonGaiaPlayers)
	{
	oxy("if(kbIsPlayerHuman("+p+") != true){");
	oxy("xsEnableRule(\"_AI2Ships"+p+"\");");
	oxy("}");
	}
	oxy("xsEnableRule(\"_Sent3Ships\");");
	oxy("xsDisableRule(\"_Sent4Ships\");");
	oxy("}");
	oxyZ("} /*");

	for(i=1;<=cNumberNonGaiaPlayers)
	{

	oxy("rule _AIShips"+i+" inactive runImmediately { ");
	oxy("xsSetContextPlayer("+i+");");
	oxy("if((trTime()-cActivationTime) >= 0.00000000){");
	oxy("if(trPlayerActive("+i+")){");
	oxy("if(kbUnitCount("+i+",trQuestVarGet(\"cUnittypeAbstractWarShip\"),cUnitStateAlive) <= 15){");
	if(i==2)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 8)
		{
		oxy("trUnitCreate(\"Galley\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpWarCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		oxy("trUnitCreate(\"Canoe\",\"AIShips"+i+"B\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypFune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypWarJunk\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
	}
	else if(i==3)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 8)
		{
		oxy("trUnitCreate(\"Galley\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpWarCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		oxy("trUnitCreate(\"Canoe\",\"AIShips"+i+"B\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypFune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypWarJunk\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
	}
	else if(i==4)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 8)
		{
		oxy("trUnitCreate(\"Galley\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpWarCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		oxy("trUnitCreate(\"Canoe\",\"AIShips"+i+"B\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypFune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypWarJunk\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
	}
	else if(i==5)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 8)
		{
		oxy("trUnitCreate(\"Galley\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpWarCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		oxy("trUnitCreate(\"Canoe\",\"AIShips"+i+"B\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypFune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypWarJunk\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
	}
	else if(i==6)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 8)
		{
		oxy("trUnitCreate(\"Galley\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpWarCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		oxy("trUnitCreate(\"Canoe\",\"AIShips"+i+"B\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypFune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypWarJunk\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
	}
	else if(i==7)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 8)
		{
		oxy("trUnitCreate(\"Galley\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpWarCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		oxy("trUnitCreate(\"Canoe\",\"AIShips"+i+"B\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypFune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypWarJunk\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
	}
	else
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8)
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 8)
		{
		oxy("trUnitCreate(\"Galley\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpWarCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		oxy("trUnitCreate(\"Canoe\",\"AIShips"+i+"B\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypFune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypWarJunk\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Caravel\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
	}
	oxy("}}");
	oxy("xsDisableRule(\"_AIShips"+i+"\");");
	oxyZ("}} /*");


	oxy("rule _AI2Ships"+i+" inactive runImmediately { ");
	oxy("xsSetContextPlayer("+i+");");
	oxy("if((trTime()-cActivationTime) >= 0.00000000){");
	oxy("if(trPlayerActive("+i+")){");
	oxy("if(kbUnitCount("+i+",trQuestVarGet(\"cUnittypeAbstractWarShip\"),cUnitStateAlive) <= 15){");
	if(i==2)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 7)
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 7)
		{
		oxy("trUnitCreate(\"Fluyt\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpTlalocCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypAtakabune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypFuchuan\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+",0,"+i+");");
		}
	}
	else if(i==3)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 7)
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 7)
		{
		oxy("trUnitCreate(\"Fluyt\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpTlalocCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypAtakabune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypFuchuan\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+",0,"+i+");");
		}
	}
	else if(i==4)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 7)
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 7)
		{
		oxy("trUnitCreate(\"Fluyt\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpTlalocCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypAtakabune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypFuchuan\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+",0,"+i+");");
		}
	}
	else if(i==5)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 7)
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 7)
		{
		oxy("trUnitCreate(\"Fluyt\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpTlalocCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypAtakabune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypFuchuan\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+",0,"+i+");");
		}
	}
	else if(i==6)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 7)
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 7)
		{
		oxy("trUnitCreate(\"Fluyt\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpTlalocCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypAtakabune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypFuchuan\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+",0,"+i+");");
		}
	}
	else if(i==7)
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 7)
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 7)
		{
		oxy("trUnitCreate(\"Fluyt\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpTlalocCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypAtakabune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypFuchuan\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+",0,"+i+");");
		}
	}
	else
	{
		if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 7)
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 7)
		{
		oxy("trUnitCreate(\"Fluyt\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17)
		{
		oxy("trUnitCreate(\"xpTlalocCanoe\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26)
		{
		oxy("trUnitCreate(\"ypAtakabune\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23)
		{
		oxy("trUnitCreate(\"ypFuchuan\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
		else
		{
		oxy("trUnitCreate(\"Galleon\",\"AIShips"+i+"A\"+trTime(),"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+",0,"+i+");");
		}
	}
	oxy("}}");
	oxy("xsDisableRule(\"_AI2Ships"+i+"\");");
	oxyZ("}} /*");
	}

	float Debug1 = rmGetHomeCityLevel(cNumberNonGaiaPlayers);
	oxy("rule _Debug active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 1.00000000){");
	oxy("trChatSendSpoofed(0,\"<color=0,254,254>Debug Mode\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>ObsUIPlayer:<color=0,255,255>"+ObsUIPlayer+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>Breite:<color=0,255,255>"+Breite+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>Breite0:<color=0,255,255>"+Breite0+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>Chi3:<color=0,255,255>"+Chi3+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>playerTiles:<color=0,255,255>"+playerTiles+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>size=2*sqrt(cNumberNonGaiaPlayers*playerTiles):<color=0,255,255>"+size+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>InvisibleProjectileCount:<color=0,255,255>"+InvisibleProjectileCount+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>InvisibleProjectileDistance:<color=0,255,255>"+InvisibleProjectileDistance+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>OneVOnePlacement:<color=0,255,255>"+OneVOnePlacement+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>(FFA)TeamLocation:<color=0,255,255>"+TeamLocation+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>tpvariation:<color=0,255,255>"+tpvariation+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>socketcount:<color=0,255,255>"+socketcount+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>RandomJunk:<color=0,255,255>"+RandomJunk+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>rmGetHomeCityLevel(Last Player):<color=0,255,255>"+Debug1+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>Unittype1463:<color=0,255,255>\"+kbGetUnitTypeName(1463));");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>Unittype1480:<color=0,255,255>\"+kbGetUnitTypeName(1480));");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>Unittype1666:<color=0,255,255>\"+kbGetUnitTypeName(1666));");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag1:<color=0,255,255>,"+xsVectorGetX(LocFlag1)+","+xsVectorGetY(LocFlag1)+","+xsVectorGetZ(LocFlag1)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag2:<color=0,255,255>,"+xsVectorGetX(LocFlag2)+","+xsVectorGetY(LocFlag2)+","+xsVectorGetZ(LocFlag2)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag3:<color=0,255,255>,"+xsVectorGetX(LocFlag3)+","+xsVectorGetY(LocFlag3)+","+xsVectorGetZ(LocFlag3)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag4:<color=0,255,255>,"+xsVectorGetX(LocFlag4)+","+xsVectorGetY(LocFlag4)+","+xsVectorGetZ(LocFlag4)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag5:<color=0,255,255>,"+xsVectorGetX(LocFlag5)+","+xsVectorGetY(LocFlag5)+","+xsVectorGetZ(LocFlag5)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag6:<color=0,255,255>,"+xsVectorGetX(LocFlag6)+","+xsVectorGetY(LocFlag6)+","+xsVectorGetZ(LocFlag6)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag7:<color=0,255,255>,"+xsVectorGetX(LocFlag7)+","+xsVectorGetY(LocFlag7)+","+xsVectorGetZ(LocFlag7)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>LocFlag8:<color=0,255,255>,"+xsVectorGetX(LocFlag8)+","+xsVectorGetY(LocFlag8)+","+xsVectorGetZ(LocFlag8)+"\");");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>cUnittypeUnit:<color=0,2"+"55,255>\"+trQuestVarGet(\"cUnittypeUnit\"));");
	oxy("trChatSendSpoofed(0,\"<color=0,255,0>cUnittypeAbstractWarShip:<color=0,2"+"55,255>\"+trQuestVarGet(\"cUnittypeAbstractWarShip\"));");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>AGG Map : <color=0,254,255>The Fountain of Youth?(Made by XiaoYu)\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>Last modified date : <color=0,254,255>2018.10.29 00:23:20\");");
	oxy("trChatSendSpoofed(0,\"<color=0,254,0>Welcome to our QQ Group : <color=0,254,255>85442352\");");
	if (rmGetNomadStart()!=true)
		{
		for(p=1;<=cNumberNonGaiaPlayers)
			{
			if (rmGetPlayerCiv(p) >= 14 && rmGetPlayerCiv(p) <= 18 )
				{
				oxy("trChatSendToPlayer(0,"+p+",\"{63974}\");");
				}
			else if (rmGetPlayerCiv(p) >= 19 && rmGetPlayerCiv(p) <= 26 )
				{
				oxy("trChatSendToPlayer(0,"+p+",\"{63973}\");");
				}
			else
				{
				oxy("trChatSendToPlayer(0,"+p+",\"{31536}\");");
				}
			}
		}
	oxy("xsDisableRule(\"_Debug\");");
	oxyZ("}} /*");

/*
	oxy("rule _FixedGun active runImmediately { ");
	oxy("if((trTime()-cActivationTime) >= 0.00000000){");
	oxy("trUnitSelectClear();");
	oxy("trUnitSelectByID("+rmGetUnitPlaced(FixedGunBaseID, 0)+");");
	oxy("trUnitChangeProtoUnit(\"SPCFixedGunBase\");");
	oxy("xsDisableRule(\"_FixedGun\");");
	oxyZ("}} /*");
*/
	// ******************************************** Trigger End ********************************************
	oxy("rule _Temp inactive { if(true){");
	oxyZ("xsDisableSelf();");
	// *****************************************************************************************************

	// Text


	// Text
	rmSetStatusText("",1.00);


	} //END
	
	
	
/* */