diff --git a/AIM/Christina.personality b/AIM/Christina.personality
new file mode 100644
index 0000000..0741d74
--- /dev/null
+++ b/AIM/Christina.personality
@@ -0,0 +1,13 @@
+
+ 2
+
+ 781270
+ 781271
+ swedish
+ 0
+ ui\\singleplayer\\cpai_avatar_swedish
+ elizabeth
+
+ 781270Swedish
+
+
\ No newline at end of file
diff --git a/AIM/aiMain.xs b/AIM/aiMain.xs
index e03ab38..0c15f86 100644
--- a/AIM/aiMain.xs
+++ b/AIM/aiMain.xs
@@ -1424,9 +1424,9 @@ extern int gMostRecentTriggerOpportunityID = -1; // Which opportunity (if any)
extern int gLastClaimMissionTime = -1;
extern int gLastAttackMissionTime = -1;
extern int gLastDefendMissionTime = -1;
-extern int gClaimMissionInterval = 600000; // 10 minutes. This variable indicates how long it takes for claim opportunities to score their maximum. Typically, a new one will launch before this time.
+extern int gClaimMissionInterval = 300000; // 10 minutes. This variable indicates how long it takes for claim opportunities to score their maximum. Typically, a new one will launch before this time.
extern int gAttackMissionInterval = 180000; // 3 minutes. Suppresses attack scores (linearly) for 3 minutes after one launches. Attacks will usually happen before this period is over.
-extern int gDefendMissionInterval = 300000; // 5 minutes. Makes the AI less likely to do another defend right after doing one.
+extern int gDefendMissionInterval = 180000; // 5 minutes. Makes the AI less likely to do another defend right after doing one.
extern bool gDelayAttacks = false; // Can be used on low difficulty levels to prevent attacks before the AI is attacked. (AI is defend-only until this variable is
// set false.
@@ -1591,7 +1591,7 @@ void initArrays(void)
gTargetSettlerCounts = xsArrayCreateInt(cAge5+1, 0, "Target Settler Counts");
xsArraySetInt(gTargetSettlerCounts, cAge1, 25);
xsArraySetInt(gTargetSettlerCounts, cAge2, 50);
- xsArraySetInt(gTargetSettlerCounts, cAge3, 70);
+ xsArraySetInt(gTargetSettlerCounts, cAge3, 75);
xsArraySetInt(gTargetSettlerCounts, cAge4, 90);
xsArraySetInt(gTargetSettlerCounts, cAge5, 100);
@@ -2984,12 +2984,97 @@ void setConsulateArmyPreference() {
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyOttoman2, 0.6);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyOttoman3, 0.6);
}
+
if (kbTechGetStatus(cTechypBigConsulateJapanese) == cTechStatusActive) {
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeUSColonialMarines, 0.6);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeUSRiflemenRegiment, 0.6);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeUSSaberSquad, 0.6);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeUSGatlingGuns, 0.6);
}
+
+ if (kbTechGetStatus(cTechypBigConsulateSPCChina) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyItalians1, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyItalians2, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyItalians3, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechypBigConsulateSPCIndia) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeSwedishArmy1, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeSwedishArmy2, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeSwedishArmy3, 0.6);
+ }
+
+}
+
+
+void setCapitolArmyPreference() {
+ if (kbUnitCount(cMyID, cUnitTypeCapitol, cUnitStateAlive) < 1) {
+ return;
+ }
+ if (kbTechGetStatus(cTechAge0Portuguese) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyPortuguese11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyPortuguese22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyPortuguese33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0Dutch) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyDutch11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyDutch22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyDutch33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0Russian) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyRussian11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyRussian22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyRussian33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0Spanish) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmySpanish11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmySpanish22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmySpanish33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0British) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyBritish11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyBritish22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyBritish33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0French) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyFrench11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyFrench22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyFrench33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0German) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyGerman11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyGerman22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyGerman33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0Ottoman) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyOttoman11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyOttoman22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyOttoman33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0USA) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeUSColonialMarines2, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeUSSaberSquad2, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeUSGatlingGuns2, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0Italians) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyItalians11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyItalians22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypConsulateArmyItalians33, 0.6);
+ }
+
+ if (kbTechGetStatus(cTechAge0Swedish) == cTechStatusActive) {
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeSwedishArmy11, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeSwedishArmy22, 0.6);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeSwedishArmy33, 0.6);
+ }
}
@@ -3309,7 +3394,7 @@ int createMainBase(vector mainVec=cInvalidVector)
kbUnitQuerySetUnitType(unitQueryID, cUnitTypeBuilding);
kbUnitQuerySetState(unitQueryID, cUnitStateABQ);
kbUnitQuerySetPosition(unitQueryID, mainVec); // Checking new base vector
- kbUnitQuerySetMaximumDistance(unitQueryID, 50.0);
+ kbUnitQuerySetMaximumDistance(unitQueryID, 55.0);
}
kbUnitQueryResetResults(unitQueryID);
@@ -5615,7 +5700,7 @@ minInterval 10
int attempt = 0;
vector testVec = cInvalidVector;
- float spacingDistance = 22.0; // Mid- and corner-spots on a square with 'radius' spacingDistance, i.e. each side is 2 * spacingDistance.
+ float spacingDistance = 25.0; // Mid- and corner-spots on a square with 'radius' spacingDistance, i.e. each side is 2 * spacingDistance.
float exclusionRadius = spacingDistance / 2.0;
float dx = spacingDistance;
float dz = spacingDistance;
@@ -5731,7 +5816,7 @@ minInterval 10
if (success == true)
aiPlanSetVariableFloat(buildPlan, cBuildPlanCenterPositionDistance, 0, exclusionRadius);
else
- aiPlanSetVariableFloat(buildPlan, cBuildPlanCenterPositionDistance, 0, 50.0);
+ aiPlanSetVariableFloat(buildPlan, cBuildPlanCenterPositionDistance, 0, 55.0);
// Add position influence for nearby towers
aiPlanSetVariableInt(buildPlan, cBuildPlanInfluenceUnitTypeID, 0, gTowerUnit); // Russian's won't notice ally towers and vice versa...oh well.
@@ -6009,8 +6094,8 @@ void deathMatchSetup(void)
rule moreDMHouses
inactive
-minInterval 90
-{ // After 90 seconds, make 10 more houses
+minInterval 60
+{ // After 60 seconds, make 10 more houses
if (cMyCiv != cCivXPSioux)
createSimpleBuildPlan(gHouseUnit, 10, 99, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
// 1 each of the main military buildings, ASAP.
@@ -6053,7 +6138,7 @@ minInterval 90
rule finalDMHouses
inactive
-minInterval 120
+minInterval 100
{
int count = kbUnitCount(cMyID, gHouseUnit, cUnitStateAlive);
int max = kbGetBuildLimit(cMyID, gHouseUnit);
@@ -6715,6 +6800,14 @@ minInterval 5
xsEnableRule("stageCoachMonitor");
xsEnableRule("healerMonitor");
+ //Enable Mill Upgrades
+ xsEnableRule("MillUpgradeMonitor");
+ xsEnableRule("MarketUpgradeMonitor");
+
+ //Enable Hanami Upgrade for japanese to improve gathering strawberries
+ xsEnableRule("MarketBerryDogsUpgradeMonitor");
+ xsEnableRule("MarketBerryTrapsUpgradeMonitor");
+
// Enable settler hitpoint and attack upgrades (research to be started about 3 minutes later)
xsEnableRule("settlerUpgradeMonitor");
@@ -6749,7 +6842,7 @@ minInterval 5
setUnitPickerPreference(gLandUnitPicker);
gLastAttackMissionTime = xsGetTime() - 180000; // Pretend they all fired 3 minutes ago, even if that's a negative number.
- gLastDefendMissionTime = xsGetTime() - 300000; // Actually, start defense ratings at 100% charge, i.e. 5 minutes since last one.
+ gLastDefendMissionTime = xsGetTime() - 180000; // Actually, start defense ratings at 100% charge, i.e. 5 minutes since last one.
gLastClaimMissionTime = xsGetTime() - 180000;
aiEcho("*** We're in age 2.");
@@ -6802,6 +6895,11 @@ minInterval 10
aiEcho("Starting build plan for an additional Ottoman town center");
}
+ //Enable Rice Paddy and Farm Upgrades
+ xsEnableRule("RicePaddyUpgradeMonitor");
+
+ xsEnableRule("FarmUpgradeMonitor");
+
// Enable basic church upgrades
xsEnableRule("churchUpgradeMonitor");
xsEnableRule("churchUpgradeAsianMonitor");
@@ -6872,6 +6970,8 @@ minInterval 10
xsEnableRule("balloonMonitor");
+ xsEnableRule("morebanks");
+
// Enable advanced arsenal upgrades
xsEnableRule("advancedArsenalUpgradeMonitor");
@@ -7016,15 +7116,15 @@ mininterval 15
return; // Don't burn wood before we have a mosque.
}
- gNumFishBoats = ((btRushBoom * -1.0) + 0.7) * 5.0; // At max boom, that's 8. At balance, it's 3.
+ gNumFishBoats = ((btRushBoom * -1.0) + 0.7) * 7.0; // At max boom, that's 8. At balance, it's 3.
if (gNumFishBoats < 2)
{
gNumFishBoats = 0; // Rushers generally shouldn't fish.
}
if ( (cRandomMapName == "amazonia") || (cRandomMapName == "caribbean") || (cRandomMapName == "Ceylon") || (cRandomMapName == "Borneo") || (cRandomMapName == "Honshu") )
{
- if (gNumFishBoats < 3)
- gNumFishBoats = 3; // Always fish on those maps.
+ if (gNumFishBoats < 4)
+ gNumFishBoats = 4; // Always fish on those maps.
}
if ( (givenFishingBoats == false) && (gNumFishBoats <= 0) )
return; //We weren't given any, and don't plan on making any, so quit.
@@ -7519,15 +7619,15 @@ void initEcon(void)
gHouseUnit = cUnitTypeManor;
gLivestockPenUnit = cUnitTypeManor;
- if ( (kbGetCiv() == cCivFrench) || (kbGetCiv() == cCivDutch) )
+ if ( (kbGetCiv() == cCivFrench) || (kbGetCiv() == cCivUSA) || (kbGetCiv() == cCivDutch) )
gHouseUnit = cUnitTypeHouse;
gLivestockPenUnit = cUnitTypeHouse;
- if ( (kbGetCiv() == cCivGermans) || (kbGetCiv() == cCivTheCircle) || (kbGetCiv() == cCivRussians) )
+ if ( (kbGetCiv() == cCivGermans) || (kbGetCiv() == cCivTheCircle) || (kbGetCiv() == cCivSwedish) || (kbGetCiv() == cCivRussians) )
gHouseUnit = cUnitTypeHouseEast;
gLivestockPenUnit = cUnitTypeHouseEast;
- if ( (kbGetCiv() == cCivSpanish) || (kbGetCiv() == cCivPortuguese) || (kbGetCiv() == cCivOttomans) )
+ if ( (kbGetCiv() == cCivSpanish) || (kbGetCiv() == cCivPortuguese) || (kbGetCiv() == cCivItalians) || (kbGetCiv() == cCivOttomans) )
gHouseUnit = cUnitTypeHouseMed;
gLivestockPenUnit = cUnitTypeHouseMed;
@@ -8119,6 +8219,10 @@ void updateForecasts()
{
addTechToForecasts(cTechChurchTopkapi);
}
+ if (kbTechGetStatus(cTechChurchTanzimat) == cTechStatusObtainable)
+ {
+ addTechToForecasts(cTechChurchTanzimat);
+ }
}
else if ((civIsNative() == false) && (civIsAsian() == false)) // Other non-native/non-Asian civs - just the church
{
@@ -9264,7 +9368,7 @@ rule delayWalls
inactive
minInterval 10
{
- if ( (kbGetPopCap()-kbGetPop()) < 60 )
+ if ( (kbGetPopCap()-kbGetPop()) < 70 )
return; // Don't start walls until we have pop room
int wallPlanID=aiPlanCreate("WallInBase", cPlanBuildWall);
if (wallPlanID != -1)
@@ -9272,8 +9376,8 @@ minInterval 10
aiPlanSetVariableInt(wallPlanID, cBuildWallPlanWallType, 0, cBuildWallPlanWallTypeRing);
aiPlanAddUnitType(wallPlanID, gEconUnit, 0, 1, 1);
aiPlanSetVariableVector(wallPlanID, cBuildWallPlanWallRingCenterPoint, 0, kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID)));
- aiPlanSetVariableFloat(wallPlanID, cBuildWallPlanWallRingRadius, 0, 50.0);
- aiPlanSetVariableInt(wallPlanID, cBuildWallPlanNumberOfGates, 0, 6);
+ aiPlanSetVariableFloat(wallPlanID, cBuildWallPlanWallRingRadius, 0, 55.0);
+ aiPlanSetVariableInt(wallPlanID, cBuildWallPlanNumberOfGates, 0, 8);
aiPlanSetBaseID(wallPlanID, kbBaseGetMainID(cMyID));
aiPlanSetEscrowID(wallPlanID, cEconomyEscrowID);
aiPlanSetDesiredPriority(wallPlanID, 40);
@@ -9305,9 +9409,10 @@ minInterval 10
int needToRoll = 100.0 * odds; // Range -50 to +150
if ( (aiRandInt(100) < needToRoll) && (cvOkToBuildWalls == true) )
{
- //aiEcho("Decided to do walls.");
- //gBuildWalls = true;
- //xsEnableRule("delayWalls"); // Start walls once we have housing room
+ aiEcho("Decided to do walls.");
+ gBuildWalls = true;
+ xsEnableRule("delayWalls"); // Start walls once we have housing room
+ xsEnableRule("BastionUpgradeMonitor");
}
if (gNumTowers < 0)
@@ -9371,13 +9476,13 @@ void setUnitPickerPreference(int upID = -1)
return; // This should never happen, it should be set when the unitPickSource is set.
kbUnitPickResetAll(gLandUnitPicker);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.4); // Range 0.0 to 1.0
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.4 );
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.5); // Range 0.0 to 1.0
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.5 );
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractNativeWarrior, 0.2);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeCoureur, 0.0); // Avoid coureurs, they mess up econ/mil calcs.
if (cMyCiv == cCivXPAztec)
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpWarrior, 0.0); // Never pick xpWarrior or xpDogSoldier, available via dance only
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpDogSoldier, 0.0);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpMedicineManAztec, 0.0);
@@ -9387,10 +9492,9 @@ void setUnitPickerPreference(int upID = -1)
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpPetard, 0.0);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMortar, 0.2);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpSpy, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyMin, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyIre, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyAsi, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.0);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeEnvoy, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypMongolScout, 0.1);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMercenary, 0.2);
if ( (kbGetCiv() == cCivIndians) || (kbGetCiv() == cCivSPCIndians) ) // Avoid mansabdar units
@@ -9418,12 +9522,12 @@ void setUnitPickerPreference(int upID = -1)
// See if 1, 2, or 3 lines set. If 1, score 0.8 vs. 0.2. If 2, score 1.0, 0.5 and 0.0. If 3, score 0.8, 0.4 and 0.2.
if (cvSecondaryArmyUnit < 0) // Only one line selected
{
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.4); // Range 0.0 to 1.0
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.4 );
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.5); // Range 0.0 to 1.0
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.5 );
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractNativeWarrior, 0.2);
if (cMyCiv == cCivXPAztec)
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeCoureur, 0.0); // Avoid coureurs, they mess up econ/mil calcs.
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpWarrior, 0.0); // Never pick xpWarrior or xpDogSoldier, available via dance only
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpDogSoldier, 0.0);
@@ -9434,10 +9538,9 @@ void setUnitPickerPreference(int upID = -1)
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpPetard, 0.0);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMortar, 0.2);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpSpy, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyMin, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyIre, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyAsi, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.0);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeEnvoy, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypMongolScout, 0.1);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMercenary, 0.2);
if ( (kbGetCiv() == cCivIndians) || (kbGetCiv() == cCivSPCIndians) ) // Avoid mansabdar units
@@ -9457,12 +9560,12 @@ void setUnitPickerPreference(int upID = -1)
}
else if (cvTertiaryArmyUnit < 0) // Two lines selected
{
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.4); // Range 0.0 to 1.0
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.4 );
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.5); // Range 0.0 to 1.0
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.5 );
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractNativeWarrior, 0.2);
if (cMyCiv == cCivXPAztec)
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeCoureur, 0.0); // Avoid coureurs, they mess up econ/mil calcs.
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpWarrior, 0.0); // Never pick xpWarrior or xpDogSoldier, available via dance only
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpDogSoldier, 0.0);
@@ -9473,10 +9576,9 @@ void setUnitPickerPreference(int upID = -1)
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpPetard, 0.0);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMortar, 0.2);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpSpy, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyMin, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyIre, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyAsi, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.0);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeEnvoy, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypMongolScout, 0.1);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMercenary, 0.2);
if ( (kbGetCiv() == cCivIndians) || (kbGetCiv() == cCivSPCIndians) ) // Avoid mansabdar units
@@ -9497,12 +9599,12 @@ void setUnitPickerPreference(int upID = -1)
}
else // Three lines selected
{
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.4); // Range 0.0 to 1.0
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.4 );
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractInfantry, 0.5); // Range 0.0 to 1.0
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractArtillery, 0.5 );
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractCavalry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractNativeWarrior, 0.2);
if (cMyCiv == cCivXPAztec)
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.4);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractLightInfantry, 0.5);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeCoureur, 0.0); // Avoid coureurs, they mess up econ/mil calcs.
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpWarrior, 0.0); // Never pick xpWarrior or xpDogSoldier, available via dance only
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpDogSoldier, 0.0);
@@ -9513,10 +9615,9 @@ void setUnitPickerPreference(int upID = -1)
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpPetard, 0.0);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMortar, 0.2);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpSpy, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyMin, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyIre, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyAsi, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.0);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeEnvoy, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypMongolScout, 0.1);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMercenary, 0.2);
if ( (kbGetCiv() == cCivIndians) || (kbGetCiv() == cCivSPCIndians) ) // Avoid mansabdar units
@@ -9584,6 +9685,9 @@ void setUnitPickerPreference(int upID = -1)
if (cMyCiv == cCivBritish)
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeHalberdier, 0.1);
+ if (cMyCiv == cCivFrench)
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeFlatbowman, 0.1);
+
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeAbstractNativeWarrior, 0.5 + (btBiasNative / 2.0));
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeCoureur, 0.0); // Avoid coureurs, they mess up econ/mil calcs.
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpWarrior, 0.0); // Never pick xpWarrior or xpDogSoldier, available via dance only
@@ -9593,13 +9697,12 @@ void setUnitPickerPreference(int upID = -1)
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpRam, 0.0); // Avoid units the AI cannot handle properly
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpPetard, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMortar, 0.0);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMortar, 0.2);
kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypexpSpy, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyMin, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyIre, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyAsi, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.0);
- kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMercenary, 0.0);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeNativeScout, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeEnvoy, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeypMongolScout, 0.1);
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeMercenary, 0.2);
if ( (kbGetCiv() == cCivChinese) || (kbGetCiv() == cCivSPCChinese) )
{
@@ -9639,6 +9742,12 @@ void setUnitPickerPreference(int upID = -1)
setConsulateArmyPreference();
}
+ if (civIsAsian() == false)
+ {
+ // Set preferences for capitol units
+ setCapitolArmyPreference();
+ }
+
if (civIsNative() == true)
{
// Natives and Europeans need to stop trying to build consulate and monastery units
@@ -9970,7 +10079,7 @@ active
//==============================================================================
void initMil(void)
{
- aiSetAttackResponseDistance(65.0);
+ aiSetAttackResponseDistance(70.0);
// Choose a most-hated player
xsEnableRule("mostHatedEnemy");
@@ -11081,6 +11190,17 @@ minInterval 3
}
}
+ // At least one basilica for Italians
+ if (cMyCiv == cCivItalians)
+ {
+ planID = aiPlanGetIDByTypeAndVariableType(cPlanBuild, cBuildPlanBuildingTypeID, cUnitTypeBasilicaIt);
+ if ( (planID < 0) && (kbUnitCount(cMyID, cUnitTypeBasilicaIt, cUnitStateAlive) < 1) )
+ { // Start a new one
+ createSimpleBuildPlan(cUnitTypeBasilicaIt, 1, 60, true, cEconomyEscrowID, kbBaseGetMainID(cMyID), 1);
+ aiEcho("Starting a new basilica build plan.");
+ }
+ }
+
// At least one native embassy (natives only)
if (civIsNative() == true) {
planID = aiPlanGetIDByTypeAndVariableType(cPlanBuild, cBuildPlanBuildingTypeID, cUnitTypeNativeEmbassy);
@@ -13022,7 +13142,8 @@ minInterval 1
{ // First, set maximum priority for the "best" cards
// 'Advanced Trading Post', 'Royal Decree', 'Advanced Arsenal', 'New Ways' & 'Advanced Balloon',
// plus '2 Grove Rickshaws' & 'Shogun Tokugawa'
- if ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedTradingPost") ||
+ if ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCImprovedBuildings") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCImprovedBuildingsGerman") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreeBritish") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreeDutch") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreeFrench") ||
@@ -13031,12 +13152,152 @@ minInterval 1
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreePortuguese") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreeRussian") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreeSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreeSwedish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalDecreeItalians") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedArsenal") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedArsenalGerman") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPNewWaysIroquois") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPNewWaysSioux") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPAdvancedBalloon") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipGroveWagonIndians2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCUnlockFactory") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRobberBarons") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCUnlockFactoryGerman") && (kbGetCiv() != cCivGermans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRobberBaronsGerman") && (kbGetCiv() != cCivGermans)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPIndustrialRevolution") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCExoticHardwoods") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCGrainMarket") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRefrigeration") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalMint") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCTextileMills") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRoyalMintGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRefrigerationGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCRoyalMintIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCFencingSchoolIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCRidingSchoolIndians") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCGermanTownFarmers") && (kbGetCiv() != cCivGermans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCGuildArtisans") && (kbGetCiv() != cCivGermans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCTeamTeutonTownCenter") && (kbGetCiv() != cCivGermans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCUhlanCombatGerman") && (kbGetCiv() != cCivGermans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCDutchEastIndiaCompany") && (kbGetCiv() != cCivDutch)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCBetterBanks") && (kbGetCiv() != cCivDutch)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCBanks1") && (kbGetCiv() != cCivDutch)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCBanks2") && (kbGetCiv() != cCivDutch)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRansack") && (kbGetCiv() != cCivRussians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCGurkhaAid") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSustainableAgricultureIndians") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCIncreasedTribute") && (kbGetCiv() != cCivJapanese)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCMughalArchitecture") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCEastIndiaCompany") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCCamelDamageIndians") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRumDistillery") && (kbGetCiv() != cCivXPIroquois)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSustainableAgriculture") && (kbGetCiv() != cCivXPIroquois)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFencingSchool") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFencingSchoolGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRidingSchool") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRidingSchoolGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCJanissaryCombatOttoman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCJanissaryCost") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipGroveWagonIndians2") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCElephantTrampling") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCElephantCombatIndians") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCElephantLimit") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCCamelFrightening") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf4Indians") && (kbGetCiv() != cCivIndians)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCoyoteCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPKnightDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPKnightHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPKnightCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPInfantryCombatIroquois") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiegeCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPConservativeTactics") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPInfantryHitpointsIroquois") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCommandSkill") && (kbGetCiv() != cCivXPSioux)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPMustangs") && (kbGetCiv() != cCivXPSioux)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSpiceTrade") && (kbGetCiv() != cCivBritish)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCPioneers") && (kbGetCiv() != cCivFrench)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCLightArtilleryHitpointsOttoman") && (kbGetCiv() != cCivOttomans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCArtilleryDamageOttoman") && (kbGetCiv() != cCivOttomans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCArtilleryHitpointsOttomanTeam") && (kbGetCiv() != cCivOttomans)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCNativeCombat") && (kbGetCiv() != cCivFrench)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCNativeWarriors") && (kbGetCiv() != cCivFrench)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandCavalryHitpointsFrench") && (kbGetCiv() != cCivFrench)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPAdoption") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPBuffalo4") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCavalryDamageSioux") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCavalryHitpointsSioux") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCavalryCombatSioux") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPMedicineTeam") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFoodSilos") && (kbGetCiv() != cCivXPSioux)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPEarthBounty") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPWindRunner") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPNomadicExpansion") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryCombatFrench") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRangedInfantryDamageFrenchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryDamageGermanTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCDragoonCombatPortuguese") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryCombatRussian") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCStreletsCombatRussian") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryCombatGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxTwoKettleSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxSanteeSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxYanktonSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandInfantryCombatGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandCavalryCombatSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCMusketeerGrenadierCombatBritish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCHanAntiCavalryBonus") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAccupuncture") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCBannerSchool") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSamuraiDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCNobleCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCNaginataHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCNaginataAntiInfantryDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCYumiDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCYumiRange") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAshigaruDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSamuraiSpeed") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCaballeros") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandInfantryHitpointsSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandInfantryCombatSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCInfantryCombatDutch") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryCombatDutch") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryCombatOttoman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPExoticHardwoodsTeam") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCPioneers") && (kbGetCiv() != cCivRussians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSpiceTrade") && (kbGetCiv() != cCivRussians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCMedicine") && (kbGetCiv() != cCivRussians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCPioneers") && (kbGetCiv() != cCivXPSioux)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSpiceTrade") && (kbGetCiv() != cCivXPSioux)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCPioneers") && (kbGetCiv() != cCivPortuguese)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRangedInfantryCombatPortuguese") && (kbGetCiv() != cCivPortuguese)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRangedInfantryHitpointsPortugueseTeam") && (kbGetCiv() != cCivPortuguese)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCPioneers") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPChinampa1") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPChinampa2") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleCenteotl") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleXipeTotec") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleXolotl") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleCoatlicue") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleTlaloc") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPGreatTempleQuetzalcoatl") && (kbGetCiv() != cCivXPAztec)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCMusketeerGrenadierHitpointsBritishTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCImprovedBuildingsTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCWildernessWarfare") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCInfantryHitpointsDutchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandCavalryDamageFrenchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryCombatBritish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCForbiddenArmyArmor") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCTerritorialArmyCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCMongolianScourge") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCStandardArmyHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCArtilleryCombatChinese") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipWoodCrates4") && (kbGetCiv() != cCivXPSioux)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCImprovedLongbows") && (kbGetCiv() != cCivBritish)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFrontierDefenses2") && (kbGetCiv() != cCivDutch)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipWoodCrates3") && (kbGetCiv() != cCivDutch)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPWarHutTraining") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTownDance") && (kbGetCiv() != cCivXPAztec)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTownDance") && (kbGetCiv() != cCivXPIroquois)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTownDance") && (kbGetCiv() != cCivXPSioux)) ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipShogunate"))
xsArraySetInt(gCardPriorities, i, 10); // "Best" cards, pri 10
@@ -13057,9 +13318,38 @@ minInterval 1
}
if (kbResourceGet(cResourceSkillPoints) >= 15)
{ // Prerequisites for 'Royal Decree', 'Advanced Arsenal', 'New Ways' and 'Shogun Tokugawa', only for HC level >= 15.
- if (((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCColonialMilitia") && (kbGetCiv() != cCivPortuguese)) ||
+ if ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCColonialMilitia") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCMosqueConstruction") ||
- ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTownDance") && (kbGetCiv() != cCivXPAztec)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFoodSilos") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFoodSilosTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRumDistillery") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCExtensiveFortifications") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTownDance") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipCoyoteMen3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCStreletsCombatRussian") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCJanissaryCombatOttoman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedConsulateIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCGurkhaAid") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCPioneers") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCImprovedWallsTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedIrregulars") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCCheapWarAcademyTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCNativeLearningIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCNativeIncorporationIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCNativeTradeTaxIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCheapStablesTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryHitpointsGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPWarchiefSioux1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipAxeRiders2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipAxeRiders3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipRifleRiders2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxDakotaSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxSanteeSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxYanktonSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipIndianHandCavalry3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipSamurai2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipShrineWagon2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCIncreasedTribute") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipDaimyoAizu") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipDaimyoSatsuma"))
xsArraySetInt(gCardPriorities, i, 10); // Prerequisite cards, pri 10
@@ -13073,12 +13363,110 @@ minInterval 1
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCNativeWarriors") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCNativeWarriorsGerman") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCNativeChampionsDutchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRangedInfantryHitpointsFrench") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCuirassiers3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandCavalryHitpointsFrench") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCavalryArchers2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCavalryArchers3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSawmills") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSawmillsTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSustainableAgriculture") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipHowdahs1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCIronmongerIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCFoodSilosIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSustainableAgricultureIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCIronmonger") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSilversmith") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRumDistillery") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCigarRoller") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedMillGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSustainableAgricultureGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCIronmongerGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSilversmithGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCRumDistilleryGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCigarRollerGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCIronmongerTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPChinampa1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipJaguarKnights2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipJaguarKnights3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPKnightDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPKnightHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPWarchiefSioux2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPWarchiefSioux3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCavalryDamageSioux") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCavalryHitpointsSioux") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipWarRifles1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipWarRifles2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCMedicine") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCSpiceTrade") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPGreatHunter") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPBuffalo2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPBuffalo3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCImprovedBuildings") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHeavyFortifications") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipTomahawk3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPInfantryDamageIroquois") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPInfantryHitpointsIroquois") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipYumi2") && (kbGetCiv() != cCivJapanese)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCYumiDamage") && (kbGetCiv() != cCivJapanese)) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipShogunate") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCBakufu") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandCavalryHitpointsSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandCavalryDamageSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCMusketeerGrenadierDamageBritish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCMusketeerGrenadierHitpointsBritishTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipHussars1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandInfantryDamageSpanishTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandInfantryHitpointsSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipSkirmishers2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipRuyters2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCInfantryDamageDutch") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCInfantryHitpointsDutchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipDopplesoldners2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandInfantryDamageGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCHandInfantryHitpointsGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryDamageBritish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCCavalryHitpointsBritish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCavArchers1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCavArchers2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCavArchers3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipIronFlail1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipIronFlail2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipSteppeRider2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipSteppeRider3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipChangdao2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipChoKoNu2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipFlyingCrows1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCArtilleryHitpointsChinese") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCArtilleryDamageChinese") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipIndianRangedCavalry2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipIndianRangedCavalry3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCPioneersIndians") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSawmillsIndians"))
xsArraySetInt(gCardPriorities, i, 10); // Prerequisite cards, pri 10
}
if (kbResourceGet(cResourceSkillPoints) >= 40)
{ // Prerequisites for 'Advanced Balloon', only for HC level >= 40.
- if (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipBalloons")
+ if ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipBalloons") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCuirassiers4") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCuirassiers5") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPUnlockFort2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipMantlets2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipMantlets3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiegeHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiegeDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCEnlistIrregularsIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCPioneersIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCTheRaj") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCImprovedBuildingsTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCMughalArchitecture") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipMusketeers3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipDragoons3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipDragoons4") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPGenitours") ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf1Indians") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf3Indians") && (kbGetCiv() != cCivIndians)) ||
+ ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf2Indians") && (kbGetCiv() != cCivIndians)))
xsArraySetInt(gCardPriorities, i, 10); // Prerequisite card, pri 10
}
@@ -13087,16 +13475,16 @@ minInterval 1
int unit = aiHCCardsGetCardUnitType(i);
int tech = aiHCCardsGetCardTechID(i);
if ( (unit == cUnitTypeSettler) || (unit == cUnitTypeCoureur) || (unit == cUnitTypeSettlerWagon) || (unit == cUnitTypeSettlerNative) || (unit == cUnitTypeypSettlerAsian) || (unit == cUnitTypeypSettlerJapanese) )
- xsArraySetInt(gCardPriorities, i, 9); // Settler card, pri 9
+ xsArraySetInt(gCardPriorities, i, 7); // Settler card, pri 9
if ( (xsArrayGetInt(gCardPriorities, i) == 0) && (aiHCCardsGetCardCount(i) > 2) )
- xsArraySetInt(gCardPriorities, i, 8); // Infinite cards, pri 8
+ xsArraySetInt(gCardPriorities, i, 6); // Infinite cards, pri 8
if (xsArrayGetInt(gCardPriorities, i) == 0)
{
if ( (unit == cUnitTypeFortWagon) ||
(unit == cUnitTypeFactoryWagon) ||
(unit == cUnitTypeCoveredWagon) ||
(unit == cUnitTypeYPDojoWagon) )
- xsArraySetInt(gCardPriorities, i, 7); // Fort, Factory, Dojo and Covered Wagons, pri 7
+ xsArraySetInt(gCardPriorities, i, 8); // Fort, Factory, Dojo and Covered Wagons, pri 7
if ( (unit == cUnitTypeOutpostWagon) || (unit == cUnitTypeYPCastleWagon) )
{
if (btRushBoom <= 0) // Outpost and castle wagon, pri 0 for rushers, pri 7 otherwise
@@ -13128,13 +13516,59 @@ minInterval 1
// Set priority to 0 for cards to be avoided if possible
if ((kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFrontierDefenses2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCoveredWagons2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFrontierDefenses1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCoveredWagons2") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCConestogaWagonsTeam") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCBastionsTeam") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCUnlockFortVauban") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPUnlockFort2") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPUnlockFort2German") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipFalconets1German") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedMarket") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedMarketGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedDock") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedDockGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedPlantations") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCAdvancedPlantationsGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipSettlers1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCoureurs1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipSettlersNative1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipSettlerWagons1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipFoodCrates1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipWoodCrates1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipCoinCrates1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipMixedCrates1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipFoodCrates1Indians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCrates1Indians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCoinCrates1Indians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf1Indians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCastleWagons1Indians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCastleWagons2Indians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipTigers1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipLions1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMonitorLizard1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMonitorLizard2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCastleWagons1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCastleWagons2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCastleWagons3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipRajputs2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipRajputs3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipIndianRangedCavalry2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipIndianRangedCavalry3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMongolScoutTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipEnvoyTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMercsTigerClaw1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCPioneersTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCMercsNinja2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCEnlistIrregulars") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCCallToArms1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCDojoGenbukan") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipGroveWagonIndians1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipFalconets2German") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipHorseArtillery1German") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipMortars1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipMortars2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipMortars1German") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipMortars2German") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCShipMortarsTeam") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipPetards1") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipDemolitionSquadGerman") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipRams1") ||
@@ -13157,93 +13591,48 @@ minInterval 1
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipJaguars3") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipJaguarsTeam") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipWolves") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCoinCratesAztec4") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCoinCratesAztec5") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipMixedCrates4") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipCoupRiders1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipCoupRiders2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipCoupRiders3") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipCoupRiders4") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipDogsoldiersTeam1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPShipDogsoldiersTeam2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPRanching") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPRanchingLlama") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFishMarket") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCFishMarketGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCFishMarket") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf1Indians") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf2Indians") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf3Indians") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipWoodCratesInf4Indians") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCExpandedTradingPost") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCExpandedTradingPostIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedDockIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedRicePaddyIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedWondersIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedConsulate") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCFishMarketIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSchoonersIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSchoonersJapanese") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipRicePaddyWagon1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCArmedFishermenIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipDisciple1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCIndianMonkCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipShrineWagon1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCoveredWagonsAsian") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCoveredWagonsChina") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCoveredWagonsIndians") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipCoveredWagons2Indians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCIndianMonkFrighten") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCSacredFieldHealing") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCBazaar") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCGoraksha") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCExpandedMarket") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCCommoditiesMarket") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedMonastery") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCAdvancedMonasteryIndians") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipBerryWagon1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipBerryWagon2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMonitorLizard1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMonitorLizard2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipTigers1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipLions1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipRhino1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPZapotecAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPZapotecAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPZapotecAlliesRepeat") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPMayanAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPMayanAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPMayanAlliesRepeat") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSpanishAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSpanishAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleCenteotl") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleCoatlicue") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPGreatTempleHuitzilopochtli") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleXipeTotec") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleXolotl") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPGreatTempleQuetzalcoatl") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleXochipilli") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPTempleTlaloc") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPGreatTempleTezcatlipoca") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPIroquoisMohawkSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPIroquoisOnondagaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPIroquoisOneidaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPIroquoisTuscaroraSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPIroquoisSenecaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPIroquoisCayugaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCherokeeAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCherokeeAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCherokeeAlliesRepeat") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCreeAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCreeAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCreeAlliesTeam") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPHuronAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPHuronAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPHuronAlliesRepeat") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPFrenchAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPFrenchAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPDutchAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPDutchAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPComancheAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPComancheAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxNakotaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCheyenneAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCheyenneAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCheyenneAlliesTeam") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCreeAllies1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCreeAllies2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPCreeAlliesTeam") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxSansArcSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxHunkpapaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxLakotaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxBurntThighSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxOglalaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxDakotaSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxSanteeSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxYanktonSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPSiouxTwoKettleSupport") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPRenegadoAllies") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPPistoleroAllies") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPComancheroAllies") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPBanditGang") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "HCXPBanditGangRepeat") ||
(kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipRicePaddyWagon1") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipRicePaddyWagon2") ||
- (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipRicePaddyWagon3"))
-
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMorutaru1") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(i)) == "YPHCShipMorutaru2"))
xsArraySetInt(gCardPriorities, i, 0); // Cards to be avoided, pri 0
// Set priority to 0 for castle wagon cards to be specifically avoided for Japanese,
@@ -13298,6 +13687,7 @@ minInterval 1
(aiHCCardsGetCardUnitType(i) == cUnitTypeLongbowman) ||
(aiHCCardsGetCardUnitType(i) == cUnitTypeStrelet) ||
(aiHCCardsGetCardUnitType(i) == cUnitTypeypYumi) ||
+ (aiHCCardsGetCardUnitType(i) == cUnitTypeFlatbowman) ||
(aiHCCardsGetCardUnitType(i) == cUnitTypeypQiangPikeman) ||
(aiHCCardsGetCardUnitType(i) == cUnitTypeypChuKoNu))
xsArraySetInt(gCardPriorities, i, 0); // Units to be to be avoided, pri 0
@@ -13398,7 +13788,7 @@ minInterval 1
result = aiHCCardsBuyCard(cardIndex);
aiEcho("Buying econ card "+xsArrayGetString(gCardNames, cardIndex));
boughtCardIndex = index;
- xsArraySetInt(gCardPriorities, cardIndex, 3); // Pri 3, econ card
+ xsArraySetInt(gCardPriorities, cardIndex, 4); // Pri 4, econ card
break;
}
cardIndex = aiHCCardsFindBestCard(cHCCardTypeMilitary, myLevel);
@@ -13470,12 +13860,13 @@ minInterval 1
aiEcho("Building Deck");
int cardsRemaining = 25;
- int toPick = 2;
+ int toPick = 5;
// First, "best" cards (if available).
for (card=0; < maxCards)
{
- if ((kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCAdvancedTradingPost") ||
+ if ((kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCImprovedBuildings") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCImprovedBuildingsGerman") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRoyalDecreeBritish") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRoyalDecreeDutch") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRoyalDecreeFrench") ||
@@ -13486,10 +13877,150 @@ minInterval 1
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRoyalDecreeSpanish") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCAdvancedArsenal") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCAdvancedArsenalGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCAdvancedArsenalGerman") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPNewWaysIroquois") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPNewWaysSioux") ||
- (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCShipGroveWagonIndians2") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCUnlockFactory") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRobberBarons") ||
+ ((kbGetCiv() == cCivGermans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCUnlockFactoryGerman")) ||
+ ((kbGetCiv() == cCivGermans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRobberBaronsGerman")) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPIndustrialRevolution") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCExoticHardwoods") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCGrainMarket") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRefrigeration") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRoyalMint") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCTextileMills") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRoyalMintGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRefrigerationGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCRoyalMintIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCFencingSchoolIndians") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCRidingSchoolIndians") ||
+ ((kbGetCiv() == cCivGermans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCGermanTownFarmers")) ||
+ ((kbGetCiv() == cCivGermans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCGuildArtisans")) ||
+ ((kbGetCiv() == cCivGermans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCTeamTeutonTownCenter")) ||
+ ((kbGetCiv() == cCivGermans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCUhlanCombatGerman")) ||
+ ((kbGetCiv() == cCivDutch) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCDutchEastIndiaCompany")) ||
+ ((kbGetCiv() == cCivDutch) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCBetterBanks")) ||
+ ((kbGetCiv() == cCivDutch) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCBanks1")) ||
+ ((kbGetCiv() == cCivDutch) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCBanks2")) ||
+ ((kbGetCiv() == cCivRussians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRansack")) ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCGurkhaAid")) ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCSustainableAgricultureIndians")) ||
+ ((kbGetCiv() == cCivJapanese) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCIncreasedTribute")) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCMughalArchitecture") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCEastIndiaCompany") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCCamelDamageIndians") ||
+ ((kbGetCiv() == cCivXPIroquois) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRumDistillery")) ||
+ ((kbGetCiv() == cCivXPIroquois) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCSustainableAgriculture")) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCFencingSchool") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCFencingSchoolGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRidingSchool") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRidingSchoolGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCJanissaryCombatOttoman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCJanissaryCost") ||
(kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCShipShogunate") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPCoyoteCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPKnightDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPKnightHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPKnightCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPInfantryCombatIroquois") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPSiegeCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPConservativeTactics") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPInfantryHitpointsIroquois") ||
+ ((kbGetCiv() == cCivXPSioux) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPCommandSkill")) ||
+ ((kbGetCiv() == cCivXPSioux) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPMustangs")) ||
+ ((kbGetCiv() == cCivBritish) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCSpiceTrade")) ||
+ ((kbGetCiv() == cCivFrench) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCPioneers")) ||
+ ((kbGetCiv() == cCivOttomans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCLightArtilleryHitpointsOttoman")) ||
+ ((kbGetCiv() == cCivOttomans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCArtilleryDamageOttoman")) ||
+ ((kbGetCiv() == cCivOttomans) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCArtilleryHitpointsOttomanTeam")) ||
+ ((kbGetCiv() == cCivFrench) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCNativeCombat")) ||
+ ((kbGetCiv() == cCivFrench) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCNativeWarriors")) ||
+ ((kbGetCiv() == cCivFrench) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCHandCavalryHitpointsFrench")) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPAdoption") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPBuffalo4") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPCavalryDamageSioux") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPCavalryHitpointsSioux") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPCavalryCombatSioux") ||
+ ((kbGetCiv() == cCivXPSioux) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCFoodSilos")) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPMedicineTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPEarthBounty") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPWindRunner") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPNomadicExpansion") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCavalryCombatFrench") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRangedInfantryDamageFrenchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCavalryDamageGermanTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCDragoonCombatPortuguese") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCavalryCombatRussian") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCStreletsCombatRussian") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCavalryCombatGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPSiouxTwoKettleSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPSiouxSanteeSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPSiouxYanktonSupport") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCHandInfantryCombatGerman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCHandCavalryCombatSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCMusketeerGrenadierCombatBritish") ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCShipGroveWagonIndians2")) ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCElephantTrampling")) ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCElephantCombatIndians")) ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCElephantLimit")) ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCShipWoodCratesInf4Indians")) ||
+ ((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCCamelFrightening")) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCHanAntiCavalryBonus") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCAccupuncture") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCBannerSchool") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCSamuraiDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCNobleCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCNaginataHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCNaginataAntiInfantryDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCYumiDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCYumiRange") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCAshigaruDamage") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCSamuraiSpeed") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCaballeros") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCHandInfantryHitpointsSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCHandInfantryCombatSpanish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCInfantryCombatDutch") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCavalryCombatDutch") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCavalryCombatOttoman") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPExoticHardwoodsTeam") ||
+ ((kbGetCiv() == cCivRussians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCPioneers")) ||
+ ((kbGetCiv() == cCivRussians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCSpiceTrade")) ||
+ ((kbGetCiv() == cCivRussians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCMedicine")) ||
+ ((kbGetCiv() == cCivXPSioux) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCPioneers")) ||
+ ((kbGetCiv() == cCivXPSioux) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCSpiceTrade")) ||
+ ((kbGetCiv() == cCivPortuguese) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCPioneers")) ||
+ ((kbGetCiv() == cCivPortuguese) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRangedInfantryCombatPortuguese")) ||
+ ((kbGetCiv() == cCivPortuguese) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRangedInfantryHitpointsPortugueseTeam")) ||
+ ((kbGetCiv() == cCivPortuguese) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCRangedInfantryDamagePortuguese")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCPioneers")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPChinampa1")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPChinampa2")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTempleCenteotl")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTempleXipeTotec")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTempleXolotl")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTempleCoatlicue")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTempleTlaloc")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPGreatTempleQuetzalcoatl")) ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCMusketeerGrenadierHitpointsBritishTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCImprovedBuildingsTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCWildernessWarfare") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCInfantryHitpointsDutchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCHandCavalryDamageFrenchTeam") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCCavalryCombatBritish") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCForbiddenArmyArmor") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCTerritorialArmyCombat") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCMongolianScourge") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCStandardArmyHitpoints") ||
+ (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCArtilleryCombatChinese") ||
+ ((kbGetCiv() == cCivXPSioux) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCShipWoodCrates4")) ||
+ ((kbGetCiv() == cCivBritish) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCImprovedLongbows")) ||
+ ((kbGetCiv() == cCivDutch) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCFrontierDefenses2")) ||
+ ((kbGetCiv() == cCivDutch) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCShipWoodCrates3")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPWarHutTraining")) ||
+ ((kbGetCiv() == cCivXPAztec) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTownDance")) ||
+ ((kbGetCiv() == cCivXPIroquois) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTownDance")) ||
+ ((kbGetCiv() == cCivXPSioux) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "HCXPTownDance")) ||
((kbGetCiv() == cCivIndians) && (kbGetTechName(aiHCCardsGetCardTechID(card)) == "YPHCAgrarianism") ))
{
aiHCDeckAddCardToDeck(gDefaultDeck, card);
@@ -13610,8 +14141,6 @@ minInterval 1
continue; // Ignore everything except military cards
if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercenary) == true)
continue; // Ignore any mercenary cards
- if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeypMercArsonist) == true)
- continue; // Ignore any arsonist cards (wrongly not classified as mercenary)
if (((civIsNative() == true) || (civIsAsian() == true)) && (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercType1) == true))
continue; // For natives and Asians, ignore any native allies cards (to be added later)
if ((civIsNative() == true) && ((kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeRodelero) == true) ||
@@ -13662,8 +14191,6 @@ minInterval 1
continue;
if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercenary) == true)
continue; // Ignore any mercenary cards
- if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeypMercArsonist) == true)
- continue; // Ignore any arsonist cards (wrongly not classified as mercenary)
if (((civIsNative() == true) || (civIsAsian() == true)) && (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercType1) == true))
continue; // For natives and Asians, ignore any native allies cards (to be added later)
if ((civIsNative() == true) && ((kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeRodelero) == true) ||
@@ -13714,8 +14241,6 @@ minInterval 1
continue;
if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercenary) == true)
continue; // Ignore any mercenary cards
- if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeypMercArsonist) == true)
- continue; // Ignore any arsonist cards (wrongly not classified as mercenary)
if (((civIsNative() == true) || (civIsAsian() == true)) && (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercType1) == true))
continue; // For natives and Asians, ignore any native allies cards (to be added later)
if ((civIsNative() == true) && ((kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeRodelero) == true) ||
@@ -13777,8 +14302,6 @@ minInterval 1
continue; // Ignore resource cards
if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercenary) == true)
continue; // Ignore any mercenary cards
- if (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeypMercArsonist) == true)
- continue; // Ignore any arsonist cards (wrongly not classified as mercenary)
if (((civIsNative() == true) || (civIsAsian() == true)) && (kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypeMercType1) == true) &&
(kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypexpSkullKnight) == false) &&
(kbProtoUnitIsType(cMyID, aiHCCardsGetCardUnitType(card), cUnitTypexpDogSoldier) == false))
@@ -14327,7 +14850,8 @@ minInterval 30
(kbTechGetStatus(cTechChurchKopruluViziers) == cTechStatusActive) &&
(kbTechGetStatus(cTechChurchAbbassidMarket) == cTechStatusActive) &&
(kbTechGetStatus(cTechChurchGalataTowerDistrict) == cTechStatusActive) &&
- (kbTechGetStatus(cTechChurchTopkapi) == cTechStatusActive))
+ (kbTechGetStatus(cTechChurchTopkapi) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechChurchTanzimat) == cTechStatusActive))
{
xsDisableSelf();
}
@@ -14385,6 +14909,13 @@ minInterval 30
if (capPlanID < 0)
createSimpleResearchPlan(cTechChurchTopkapi, getUnit(cUnitTypeChurch),cEconomyEscrowID, 91);
}
+
+ if ((kbTechGetStatus(cTechChurchTanzimat) == cTechStatusObtainable) && (kbUnitCount(cMyID, gEconUnit, cUnitStateAlive) >= 33))
+ {
+ capPlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechChurchTopkapi);
+ if (capPlanID < 0)
+ createSimpleResearchPlan(cTechChurchTanzimat, getUnit(cUnitTypeChurch),cEconomyEscrowID, 91);
+ }
}
@@ -15311,14 +15842,6 @@ void shipGrantedHandler(int parm=-1) // Event handler
if ( (age == cAge4) && (kbProtoUnitIsType(cMyID, unitType, cUnitTypeMercenary) == true) && (kbResourceGet(cResourceGold) < 2500) )
totalValue = 1.0; // No Age 4 mercenaries if less than 2500 coin is available.
- // Adjust score for arsonists (wrongly not classified as mercenaries) if not enough coin is available.
- if ( (age == cAge2) && (kbProtoUnitIsType(cMyID, unitType, cUnitTypeypMercArsonist) == true) && (kbResourceGet(cResourceGold) < 500) )
- totalValue = 1.0; // No Age 2 mercenaries if less than 500 coin is available.
- if ( (age == cAge3) && (kbProtoUnitIsType(cMyID, unitType, cUnitTypeypMercArsonist) == true) && (kbResourceGet(cResourceGold) < 1500) )
- totalValue = 1.0; // No Age 3 mercenaries if less than 1500 coin is available.
- if ( (age == cAge4) && (kbProtoUnitIsType(cMyID, unitType, cUnitTypeypMercArsonist) == true) && (kbResourceGet(cResourceGold) < 2500) )
- totalValue = 1.0; // No Age 4 mercenaries if less than 2500 coin is available.
-
aiEcho(" "+i+" "+kbGetProtoUnitName(unitType)+": "+qtyAvail+" total value: "+totalValue);
if (totalValue > bestUnitScore)
{
@@ -17397,7 +17920,7 @@ float getBaseEnemyStrength(int baseID = -1)
{ // Ally base, we're considering defending. Count enemy units present
kbUnitQuerySetUnitType(allyBaseQuery, cUnitTypeLogicalTypeLandMilitary);
kbUnitQuerySetPosition(allyBaseQuery, kbBaseGetLocation(owner, baseID));
- kbUnitQuerySetMaximumDistance(allyBaseQuery, 50.0);
+ kbUnitQuerySetMaximumDistance(allyBaseQuery, 55.0);
kbUnitQueryResetResults(allyBaseQuery);
retVal = kbUnitQueryExecute(allyBaseQuery);
}
@@ -18141,6 +18664,35 @@ void scoreOpportunity(int oppID = -1)
// aiEcho(" Class "+classRating+", Instance "+instance+", affordable "+affordable);
// aiEcho(" Final Score: "+score);
+ switch(oppType)
+ {
+ case cOpportunityTypeDestroy: // Aggressive AIs attack more often
+ {
+ score = score + (0.2 * btOffenseDefense); // If -0.5 -> score - 0.1. If -1.0 -> score - 0.2. If 0.5 -> score + 0.1. If 1.0 -> score + 0.2
+ }
+ }
+ switch(oppType)
+ {
+ case cOpportunityTypeDefend: // Defensive AIs defend ally bases
+ {
+ score = score + (0.2 * btOffenseDefense); // If -0.5 -> score + 0.1. If -1.0 -> score + 0.2. If 0.5 -> score - 0.1. If 1.0 -> score - 0.2
+ }
+ }
+ switch(oppType)
+ {
+ case cOpportunityTypeClaim: // Claiming AIs build more Trading Posts
+ {
+ if (kbVPSiteGetType(target) == cVPTrade)
+ {
+ score = score + (0.2 * btBiasTrade); // If -0.5 -> score - 0.1. If -1.0 -> score - 0.2. If 0.5 -> score + 0.1. If 1.0 -> score + 0.2
+ }
+ if (kbVPSiteGetType(target) == cVPNative)
+ {
+ score = score + (0.2 * btBiasNative); // If -0.5 -> score - 0.1. If -1.0 -> score - 0.2. If 0.5 -> score + 0.1. If 1.0 -> score + 0.2
+ }
+ }
+ }
+
if (score > 1.0)
score = 1.0;
if (score < 0.0)
@@ -19046,7 +19598,7 @@ void main(void)
}
case cDifficultyHard: // Hard
{
- kbSetPlayerHandicap( cMyID, startingHandicap * baselineHandicap * 1.0 ); // 1.0 handicap at hard, i.e. no bonus
+ kbSetPlayerHandicap( cMyID, startingHandicap * baselineHandicap * 1.15 ); // 15% bonus
break;
}
case cDifficultyExpert: // Expert
@@ -19202,8 +19754,8 @@ rule fillInWallGaps
aiPlanSetVariableInt(wallPlanID, cBuildWallPlanWallType, 0, cBuildWallPlanWallTypeRing);
aiPlanAddUnitType(wallPlanID, gEconUnit, 1, 1, 1);
aiPlanSetVariableVector(wallPlanID, cBuildWallPlanWallRingCenterPoint, 0, kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID)));
- aiPlanSetVariableFloat(wallPlanID, cBuildWallPlanWallRingRadius, 0, 50.0);
- aiPlanSetVariableInt(wallPlanID, cBuildWallPlanNumberOfGates, 0, 6);
+ aiPlanSetVariableFloat(wallPlanID, cBuildWallPlanWallRingRadius, 0, 55.0);
+ aiPlanSetVariableInt(wallPlanID, cBuildWallPlanNumberOfGates, 0, 8);
aiPlanSetBaseID(wallPlanID, kbBaseGetMainID(cMyID));
aiPlanSetEscrowID(wallPlanID, cEconomyEscrowID);
aiPlanSetDesiredPriority(wallPlanID,40);
@@ -19659,7 +20211,7 @@ minInterval 45
decreePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechChurchCodeNapoleon);
if (decreePlanID >= 0)
aiPlanDestroy(decreePlanID);
- createSimpleResearchPlan(cTechChurchCodeNapoleon, getUnit(cUnitTypeChurch), cMilitaryEscrowID, 50);
+ createSimpleResearchPlan(cTechChurchCodeNapoleon, getUnit(cUnitTypeChurch), cEconomyEscrowID, 50);
}
if (kbTechGetStatus(cTechChurchGardeImperial1) == cTechStatusObtainable)
{
@@ -19974,6 +20526,10 @@ minInterval 60
int baseDefensePop = 0;
int ownMilitaryCount = 0;
+ xsEnableRule("useLevyMin");
+ xsEnableRule("useLevyIre");
+ xsEnableRule("useLevyAsi");
+
// Number of units for base defend plan, 25% of army
ownMilitaryCount = kbUnitCount(cMyID, cUnitTypeLogicalTypeLandMilitary, cUnitStateAlive);
if (ownMilitaryCount > 0)
@@ -24148,6 +24704,106 @@ minInterval 30
}
+rule useLevyMin
+inactive
+minInterval 10
+{
+ // Check to see if town is being overrun. If so, generate a plan
+ // to call levy.
+
+ int levyPlan = -1;
+ vector mainBaseVec = cInvalidVector;
+
+ mainBaseVec = kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID));
+ int enemyCount = getUnitCountByLocation(cUnitTypeLogicalTypeLandMilitary, cPlayerRelationEnemyNotGaia, cUnitStateAlive, mainBaseVec, 40.0);
+ int allyCount = getUnitCountByLocation(cUnitTypeLogicalTypeLandMilitary, cPlayerRelationAlly, cUnitStateAlive, mainBaseVec, 40.0);
+
+ if (enemyCount >= (allyCount+6)) // We're behind by 6 or more
+ {
+ aiEcho("***** Starting levy plan, there are "+enemyCount+" enemy units in my base against "+allyCount+" friendlies.");
+ if (civIsAsian() == false)
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyMin, 0.2);
+ }
+
+ // Disable rule
+ xsDisableSelf();
+
+}
+
+
+rule useLevyIre
+inactive
+minInterval 10
+{
+ // Check to see if town is being overrun. If so, generate a plan
+ // to call levy.
+
+ int levyPlan = -1;
+ vector mainBaseVec = cInvalidVector;
+
+ mainBaseVec = kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID));
+ int enemyCount = getUnitCountByLocation(cUnitTypeLogicalTypeLandMilitary, cPlayerRelationEnemyNotGaia, cUnitStateAlive, mainBaseVec, 40.0);
+ int allyCount = getUnitCountByLocation(cUnitTypeLogicalTypeLandMilitary, cPlayerRelationAlly, cUnitStateAlive, mainBaseVec, 40.0);
+
+ if (enemyCount >= (allyCount+6)) // We're behind by 6 or more
+ {
+ aiEcho("***** Starting levy plan, there are "+enemyCount+" enemy units in my base against "+allyCount+" friendlies.");
+ if (cMyCiv == cCivIndians)
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyIre, 0.2);
+ }
+
+ // Disable rule
+ xsDisableSelf();
+
+}
+
+
+rule useLevyAsi
+inactive
+minInterval 10
+{
+ // Check to see if town is being overrun. If so, generate a plan
+ // to call levy.
+
+ int levyPlan = -1;
+ vector mainBaseVec = cInvalidVector;
+
+ mainBaseVec = kbBaseGetLocation(cMyID, kbBaseGetMainID(cMyID));
+ int enemyCount = getUnitCountByLocation(cUnitTypeLogicalTypeLandMilitary, cPlayerRelationEnemyNotGaia, cUnitStateAlive, mainBaseVec, 40.0);
+ int allyCount = getUnitCountByLocation(cUnitTypeLogicalTypeLandMilitary, cPlayerRelationAlly, cUnitStateAlive, mainBaseVec, 40.0);
+
+ if (enemyCount >= (allyCount+6)) // We're behind by 6 or more
+ {
+ aiEcho("***** Starting levy plan, there are "+enemyCount+" enemy units in my base against "+allyCount+" friendlies.");
+ if (civIsAsian() == true)
+ kbUnitPickSetPreferenceFactor(gLandUnitPicker, cUnitTypeLevyAsi, 0.2);
+ }
+
+ // Disable rule
+ xsDisableSelf();
+
+}
+
+
+rule morebanks
+inactive
+minInterval 30
+{
+ if (kbTechGetStatus(cTechImpExcessiveTaxationD) == cTechStatusActive)
+ {
+ xsDisableSelf();
+ return;
+ }
+ int Bank = getUnit(cUnitTypeBank, cMyID, cUnitStateAlive);
+ if (Bank >= 0)
+ {
+ createSimpleResearchPlan(cTechImpExcessiveTaxationD,Bank,cEconomyEscrowID, 80);
+ xsDisableSelf();
+
+ }
+}
+
+
rule brigadeMonitor
inactive
minInterval 120
@@ -24729,3 +25385,291 @@ minInterval 10
}
}
}
+
+
+rule MercantilismMonitor
+inactive
+minInterval 10
+{
+ if (kbTechGetStatus(cTechChurchMercantilism) == cTechStatusActive)
+ {
+ xsDisableSelf();
+ return;
+ }
+ int Church = getUnit(cUnitTypeChurch, cMyID, cUnitStateAlive);
+ if (Church >= 0)
+ {
+ createSimpleResearchPlan(cTechChurchMercantilism,Church,cEconomyEscrowID, 99);
+ xsDisableSelf();
+ }
+}
+
+rule MarketUpgradeMonitor
+inactive
+minInterval 15
+{
+ int upgradePlanID = -1;
+
+ if ((kbTechGetStatus(cTechHuntingDogs) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechSteelTraps) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechGangsaw) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechLogFlume) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechPlacerMines) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechAmalgamation) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechCircularSaw) == cTechStatusActive))
+ {
+ xsDisableSelf();
+ return;
+ }
+
+
+ // Get upgrades one at a time
+ if (kbTechGetStatus(cTechHuntingDogs) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechHuntingDogs);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechHuntingDogs, getUnit(cUnitTypeMarket), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechSteelTraps) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechSteelTraps);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechSteelTraps, getUnit(cUnitTypeMarket), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechGangsaw) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechGangsaw);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechGangsaw, getUnit(cUnitTypeMarket), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechLogFlume) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechLogFlume);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechLogFlume, getUnit(cUnitTypeMarket), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechPlacerMines) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechPlacerMines);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechPlacerMines, getUnit(cUnitTypeMarket), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechAmalgamation) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechAmalgamation);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechAmalgamation, getUnit(cUnitTypeMarket), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechCircularSaw) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechCircularSaw);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechCircularSaw, getUnit(cUnitTypeMarket), cEconomyEscrowID, 50);
+ return;
+ }
+}
+
+
+rule MillUpgradeMonitor
+inactive
+minInterval 5
+{
+ int upgradePlanID = -1;
+
+ if ((kbTechGetStatus(cTechSeedDrill) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechHomesteading) == cTechStatusActive))
+ {
+ xsDisableSelf();
+ return;
+ }
+
+ // Get upgrades one at a time
+ if (kbTechGetStatus(cTechSeedDrill) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechSeedDrill);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechSeedDrill, getUnit(cUnitTypeMill), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechArtificialFertilizer) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechArtificialFertilizer);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechArtificialFertilizer, getUnit(cUnitTypeMill), cEconomyEscrowID, 50);
+ return;
+ }
+}
+
+rule FarmUpgradeMonitor
+inactive
+minInterval 5
+{
+ int upgradePlanID = -1;
+
+
+ if ((kbTechGetStatus(cTechGreatFeast) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechHarvestCeremony) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechGreenCornCeremony) == cTechStatusActive))
+ {
+ xsDisableSelf();
+ return;
+ }
+
+ // Get upgrades one at a time
+ if (kbTechGetStatus(cTechGreatFeast) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechGreatFeast);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechGreatFeast, getUnit(cUnitTypeFarm), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechHarvestCeremony) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechHarvestCeremony);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechHarvestCeremony, getUnit(cUnitTypeFarm), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechGreenCornCeremony) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechGreenCornCeremony);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechGreenCornCeremony, getUnit(cUnitTypeFarm), cEconomyEscrowID, 50);
+ return;
+ }
+}
+
+rule RicePaddyUpgradeMonitor
+inactive
+minInterval 5
+{
+ int upgradePlanID = -1;
+
+
+ if ((kbTechGetStatus(cTechypCropMarket) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechypSharecropping) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechypCultivateWasteland) == cTechStatusActive) &&
+ (kbTechGetStatus(cTechypWaterConservancy) == cTechStatusActive))
+ {
+ xsDisableSelf();
+ return;
+ }
+
+ // Get upgrades one at a time
+ if (kbTechGetStatus(cTechypCropMarket) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechypCropMarket);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechypCropMarket, getUnit(cUnitTypeypRicePaddy), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechypSharecropping) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechypSharecropping);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechypSharecropping, getUnit(cUnitTypeypRicePaddy), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechypCultivateWasteland) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechypCultivateWasteland);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechypCultivateWasteland, getUnit(cUnitTypeypRicePaddy), cEconomyEscrowID, 50);
+ return;
+ }
+ if (kbTechGetStatus(cTechypWaterConservancy) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechypWaterConservancy);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechypWaterConservancy, getUnit(cUnitTypeypRicePaddy), cEconomyEscrowID, 50);
+ return;
+ }
+}
+
+rule MarketBerryDogsUpgradeMonitor
+inactive
+minInterval 10
+{
+ int upgradePlanID = -1;
+
+ // Disable rule once upgrade are available
+ if (kbTechGetStatus(cTechypMarketBerryDogs) == cTechStatusActive)
+ {
+ xsDisableSelf();
+ return;
+ }
+
+ // Get upgrades one at a time as they become available
+ if (kbTechGetStatus(cTechypMarketBerryDogs) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechypMarketBerryDogs);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechypMarketBerryDogs, getUnit(cUnitTypeypTradeMarketAsian), cMilitaryEscrowID, 50);
+ return;
+ }
+}
+
+
+rule MarketBerryTrapsUpgradeMonitor
+inactive
+minInterval 10
+{
+ int upgradePlanID = -1;
+
+ // Disable rule once upgrade are available
+ if (kbTechGetStatus(cTechypMarketBerryTraps) == cTechStatusActive)
+ {
+ xsDisableSelf();
+ return;
+ }
+
+ // Get upgrades one at a time as they become available
+ if (kbTechGetStatus(cTechypMarketBerryTraps) == cTechStatusObtainable)
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechypMarketBerryTraps);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechypMarketBerryTraps, getUnit(cUnitTypeypTradeMarketAsian), cMilitaryEscrowID, 50);
+ return;
+ }
+}
+
+
+rule BastionUpgradeMonitor
+inactive
+minInterval 90
+{
+ int upgradePlanID = -1;
+
+ if ((kbTechGetStatus(cTechBastion) == cTechStatusObtainable) && (kbUnitCount(cMyID, cUnitTypeAbstractWall, cUnitStateAlive) >= 20))
+ {
+ upgradePlanID = aiPlanGetIDByTypeAndVariableType(cPlanResearch, cResearchPlanTechID, cTechBastion);
+ if (upgradePlanID >= 0)
+ aiPlanDestroy(upgradePlanID);
+ createSimpleResearchPlan(cTechBastion, getUnit(cUnitTypeWallConnector), cMilitaryEscrowID, 50);
+ return;
+ }
+}
diff --git a/AoE3ImpModPatcher.exe b/AoE3ImpModPatcher.exe
index 6d51c24..b5cdee6 100644
Binary files a/AoE3ImpModPatcher.exe and b/AoE3ImpModPatcher.exe differ
diff --git a/Data/homecityitalians.xml b/Data/homecityitalians.xml
index 174dca1..0e2d7fc 100644
--- a/Data/homecityitalians.xml
+++ b/Data/homecityitalians.xml
@@ -17,7 +17,7 @@
20
Lisbon
Lisbon
- 2
+ 5
homecity\spanishambientsounds.xml
generic_city
@@ -41,6 +41,27 @@
+
+ HCFameGold
+ 1
+ 25
+ -1
+ 1
+
+
+ HCCavalryDamageGermanTeam
+ 1
+ 10
+ HCShipHussars2
+ 1
+
+
+ HCSacraments
+ 1
+ 25
+ -1
+ 1
+
HCShipMusketeers1
1
@@ -73,7 +94,7 @@
1
10
HCShipSaker
- 1
+ 2
6
1
@@ -127,14 +148,14 @@
1
25
ArchaicInfantryHitpoints
- 1
+ 2
ArchaicInfantryHitpoints
1
25
ArchaicInfantryAttack
- 2
+ 1
HCShipPikemenIt
@@ -164,7 +185,7 @@
1
25
HCShipCrossbowmen3
- 1
+ 2
PaviseShield
@@ -213,7 +234,7 @@
HCMercsHolyRoman
1
25
- HCMercsLandsknecht2German
+ -1
3
19
1
@@ -325,8 +346,8 @@
1
0
HCShipSettlers4
- 0
- 2
+ 1
+ 3
1
@@ -491,6 +512,14 @@
1
1
+
+ HCShipInquisitors
+ 1
+ 10
+ -1
+ 1
+ 3
+
HCShipSurgeons
1
@@ -723,14 +752,14 @@
HCHandCavalryHitpointsIt
1
10
- HCShipHussars2
+ HCCavalryDamageGermanTeam
1
HCHandCavalryCombatIt
1
25
- HCHandCavalryDamageIt
+ HCHandCavalryHitpointsIt
2
@@ -970,7 +999,7 @@
HCFencingSchool
1
10
- HCCheapBarracksTeam
+ -1
1
@@ -1389,7 +1418,7 @@
HCMercsMediterranean
1
25
- HCMercsStradiots
+ -1
3
13
1
@@ -1507,6 +1536,24 @@
1
+
+ HCREVPowder
+ -1
+ 0
+ XPRevolution
+ 2
+ 3
+
+
+
+ HCREVFireShips
+ -1
+ 0
+ XPRevolution
+ 2
+ 3
+
+
@@ -1527,7 +1574,7 @@
HCFrontierDefenses
HCUnlockFort
HCRoyalDecreeItalians
- HCMercsMaghrabi
+ HCXPMercsElmeti
@@ -1549,7 +1596,7 @@
HCFrontierDefenses
HCUnlockFort
HCRoyalDecreeItalians
- HCMercsMaghrabi
+ HCXPMercsElmeti
@@ -1560,6 +1607,8 @@
HCREVShipIronclads
HCREVShipFortWagon
HCREVShipFactory
+ HCREVPowder
+ HCREVFireShips
@@ -1628,6 +1677,7 @@
HCShipBalloons
HCXPAdvancedBalloon
TreasurySup
+ HCShipInquisitors
HCShipSettlers1
@@ -1674,8 +1724,8 @@
HCShipHussars2
HCShipHussars3
HCShipHussars4
- HCHandCavalryHitpointsIt
- HCHandCavalryDamageIt
+ HCHandCavalryHitpointsIt
+ HCCavalryDamageGermanTeam
HCHandCavalryCombatIt
ArtilleryCombat
HCShipSaker
@@ -1725,9 +1775,9 @@
HCNativeWarriors
HCXPBloodBrothers
HCAdvancedTradingPost
- HCFencingSchool
- HCRidingSchool
- HCEngineeringSchool
+ HCFencingSchool
+ HCRidingSchool
+ HCEngineeringSchool
HCFrontierDefenses
HCColonialMilitia
HCPioneers
@@ -1737,8 +1787,8 @@
HCFrontierDefenses2
HCUnlockFort
HCExtensiveFortifications
- HCXPAssassins
- HCXPShipSpies1
+ HCXPAssassins
+ HCXPShipSpies1
HCXPRanching
HCRoyalDecreeItalians
HCAdvancedMill
@@ -1749,6 +1799,7 @@
HCRobberBarons
CheaperAgeUp
HCXPUnction
+ HCSacraments
CheaperAgeUp
@@ -1778,6 +1829,7 @@
HCStonemasons
HCXPLandGrab
HCFishMarket
+ HCFameGold
HCRenderingPlant
HCSchooners
HCSawmills
@@ -1840,7 +1892,7 @@
HCMercsMaghrabi
- HCMercsMaghrabi
+ HCXPMercsElmeti
@@ -2177,5 +2229,6 @@
Italians_DockTexture5
Italians_DockTexture6
Italians_DockTexture7
+ RussianWolf
\ No newline at end of file
diff --git a/Data/homecityswedish.xml b/Data/homecityswedish.xml
new file mode 100644
index 0000000..86b17fe
--- /dev/null
+++ b/Data/homecityswedish.xml
@@ -0,0 +1,2017 @@
+
+
+
+ Swedish
+ Stockholm
+ Ragnar Lothbrok
+ HomeCityGatherFlag
+ russian\russian_homecity2.xml
+ russian\russian_homecity_water.xml
+ russian\russian_background.xml
+ russian\pathable_area_object.gr2
+ german\germany_homecity_academy_camera.cam
+ german\germany_homecity_academy_widescreencamera.cam
+ 1
+ 0
+ 25
+ 20
+ st_petersburg
+ Berlin
+ 5
+ homecity\blackestateambientsounds.xml
+ generic_city
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ -1
+ -1
+
+
+
+
+ HCXPComancheroAllies
+ 1
+ 10
+ -1
+ 2
+ 7
+ 1
+
+
+ HCREVShipFactory
+ -1
+ 0
+ XPRevolution
+ 2
+ 1
+
+
+
+ TreasurySup
+ 1
+ 40
+ -1
+ 3
+
+
+ HCXPComancheroAllies
+ 1
+ 10
+ -1
+ 2
+ 7
+ 1
+
+
+ HCMercsStradiots
+ 1
+ 10
+ -1
+ 2
+ 6
+ 1
+
+
+ HCShipAxemenR
+ 1
+ 0
+ -1
+ 1
+ 6
+ 1
+
+
+ HCShipAxemenR2
+ 1
+ 10
+ HCShipAxemenR
+ 2
+ 7
+ 1
+
+
+ HCExtensiveFortifications
+ 1
+ 10
+ HCBlockhouseCannon
+ 1
+
+
+ HCShipSettlers1
+ 1
+ 0
+ -1
+ 0
+ 2
+ 1
+
+
+ HCShipSettlers3
+ 1
+ 0
+ HCShipSettlers1
+ 1
+ 3
+ 1
+
+
+ HCShipFoodCrates1
+ -1
+ 0
+ -1
+ 0
+ 300
+ 1
+
+
+ HCShipFoodCrates2
+ 1
+ 0
+ HCShipFoodCrates1
+ 1
+ 600
+ 1
+
+
+ HCShipFoodCrates3
+ 1
+ 10
+ HCShipFoodCrates2
+ 1
+ 700
+ 1
+
+
+ HCShipFoodCrates4
+ 1
+ 10
+ HCShipFoodCrates3
+ 2
+ 1000
+ 1
+
+
+ HCShipFoodCrates5
+ 1
+ 25
+ HCShipFoodCrates4
+ 3
+ 1600
+ 1
+
+
+ HCShipWoodCrates1
+ -1
+ 0
+ -1
+ 0
+ 300
+ 1
+
+
+ HCShipWoodCrates2
+ 1
+ 0
+ HCShipWoodCrates1
+ 1
+ 600
+ 1
+
+
+ HCShipWoodCrates3
+ 1
+ 10
+ HCShipwoodCrates2
+ 1
+ 700
+ 1
+
+
+ HCShipWoodCrates4
+ 1
+ 10
+ HCShipWoodCrates3
+ 2
+ 1000
+ 1
+
+
+ HCShipWoodCrates5
+ 1
+ 25
+ HCShipWoodCrates4
+ 3
+ 1600
+ 1
+
+
+ HCShipCoinCrates1
+ -1
+ 0
+ -1
+ 0
+ 300
+ 1
+
+
+ HCShipCoinCrates2
+ 1
+ 0
+ HCShipCoinCrates1
+ 1
+ 600
+ 1
+
+
+ HCShipCoinCrates3
+ 1
+ 10
+ HCShipCoinCrates2
+ 1
+ 700
+ 1
+
+
+ HCShipCoinCrates4
+ 1
+ 10
+ HCShipCoinCrates3
+ 2
+ 1000
+ 1
+
+
+ HCShipCoinCrates5
+ 1
+ 25
+ HCShipCoinCrates4
+ 3
+ 1600
+ 1
+
+
+ HCShipSheep1
+ 1
+ 0
+ -1
+ 0
+ 7
+ 1
+
+
+ HCShipSheep2
+ 1
+ 0
+ HCShipSheep1
+ 2
+ 15
+ 1
+
+
+ HCShipSheep3
+ 1
+ 10
+ HCShipSheep2
+ 2
+ 20
+ 1
+
+
+ HCShipCows
+ 1
+ 0
+ HCShipSheep1
+ 1
+ 7
+ 1
+
+
+ HCShipCoveredWagons
+ 1
+ 0
+ -1
+ 2
+ 1
+ 1
+
+
+ HCShipSurgeons
+ 1
+ 0
+ -1
+ 1
+ 2
+
+
+ HCCheapHealersTeam
+ 1
+ 10
+ HCShipSurgeons
+ 1
+
+
+ HCXPMasterSurgeons
+ 1
+ 10
+ HCShipSurgeons
+ 1
+
+
+ HCExplorerRussian
+ 1
+ 0
+ -1
+ 0
+
+
+ HCShipBalloons
+ 1
+ 10
+ -1
+ 1
+
+
+ HCXPAdvancedBalloon
+ 1
+ 40
+ HCShipBalloons
+ 3
+
+
+ HCShipStrelets1
+ 1
+ 0
+ -1
+ 1
+ 13
+ 1
+
+
+ HCShipStrelets2
+ 1
+ 0
+ HCShipStrelets1
+ 2
+ 1
+ 17
+
+
+ HCShipStrelets3
+ 1
+ 10
+ HCShipStrelets2
+ 3
+ 24
+ 1
+
+
+ HCShipStrelets4
+ 1
+ 10
+ HCShipStrelets3
+ 3
+ 28
+ 1
+
+
+ HCSpawnStrelet
+ 1
+ 25
+ HCShipStrelets4
+ 3
+
+
+ HCXPSuvorovReforms
+ 1
+ 40
+ HCSpawnStrelet
+ 2
+
+
+ HCStreletsCombatRussian
+ 1
+ 25
+ HCSpawnStrelet
+ 2
+
+
+ HCShipHalberdiersRussian1
+ 1
+ 0
+ -1
+ 2
+ 9
+ 1
+
+
+ HCShipHalberdiersRussian2
+ 1
+ 0
+ HCShipHalberdiersRussian1
+ 3
+ 13
+ 1
+
+
+ HCShipHalberdiersRussian3
+ 1
+ 10
+ HCShipHalberdiersRussian2
+ 3
+ 15
+ 1
+
+
+ HCRansack
+ 1
+ 25
+ HCShipHalberdiersRussian3
+ 2
+
+
+ HCShipMusketeersRussian2
+ 1
+ 0
+ -1
+ 2
+ 11
+ 1
+
+
+ HCShipMusketeersRussian3
+ 1
+ 0
+ HCShipMusketeersRussian2
+ 3
+ 16
+ 1
+
+
+ HCShipCossacks1
+ 1
+ 0
+ -1
+ 1
+ 4
+ 1
+
+
+ HCShipCossacks2
+ 1
+ 0
+ HCShipCossacks1
+ 2
+ 6
+ 1
+
+
+ HCShipCossacks3
+ 1
+ 10
+ HCShipCossacks2
+ 3
+ 9
+ 1
+
+
+ HCShipCossacks4
+ 1
+ 10
+ HCShipCossacks3
+ 1
+ 5
+ 1
+
+
+ HCUniqueCombatRussian
+ 1
+ 25
+ HCShipCossacks4
+ 2
+
+
+ HCCavalryLOSTeam
+ 1
+ 0
+ -1
+ 0
+
+
+ HCBarracksHPTeam
+ 1
+ 0
+ -1
+ 1
+
+
+ HCBlockhouseCannon
+ 1
+ 10
+ HCBarracksHPTeam
+ 2
+
+
+ HCShipOprichniks1
+ 1
+ 0
+ -1
+ 2
+ 5
+ 1
+
+
+ HCShipOprichniks2
+ 1
+ 10
+ HCShipOprichniks1
+ 2
+ 6
+ 1
+
+
+ HCShipOprichniks3
+ 1
+ 10
+ HCShipOprichniks2
+ 3
+ 9
+ 1
+
+
+ HCXPShipOprichniks4
+ 1
+ 40
+ HCShipOprichniks3
+ 3
+ 12
+ 1
+
+
+ HCCavalryCombatRussian
+ 1
+ 10
+ HCShipCavArchers3
+ 2
+
+
+ HCXPShipCavArchersRepeat
+ -1
+ 10
+ HCShipCavArchers3
+ 3
+ 7
+
+
+ HCShipCavArchers1
+ 1
+ 0
+ -1
+ 2
+ 5
+ 1
+
+
+ HCShipCavArchers2
+ 1
+ 0
+ HCShipCavArchers1
+ 3
+ 8
+ 1
+
+
+ HCShipCavArchers3
+ 1
+ 10
+ HCShipCavArchers2
+ 3
+ 9
+ 1
+
+
+ HCShipGrenadiers1
+ 1
+ 0
+ -1
+ 2
+ 4
+ 1
+
+
+ HCShipGrenadiers2
+ 1
+ 0
+ HCShipGrenadiers1
+ 3
+ 7
+ 1
+
+
+ HCShipGrenadiers3
+ 1
+ 10
+ HCShipGrenadiers2
+ 2
+ 5
+ 1
+
+
+ HCShipGrenadiers4
+ 1
+ 25
+ HCShipGrenadiers3
+ 3
+ 9
+ 1
+
+
+ HCShipFalconets1
+ 1
+ 0
+ -1
+ 2
+ 1
+ 1
+
+
+ HCShipFalconets2
+ 1
+ 0
+ HCShipFalconets1
+ 3
+ 2
+ 1
+
+
+ HCShipFalconets3
+ 1
+ 10
+ HCShipFalconets2
+ 2
+ 2
+ 1
+
+
+ HCAdvancedArtillery
+ 1
+ 0
+ -1
+ 3
+
+
+ HCShipMortars1
+ 1
+ 0
+ -1
+ 3
+ 2
+ 1
+
+
+ HCShipMortars2
+ 1
+ 10
+ HCShipMortars1
+ 3
+ 3
+ 1
+
+
+ HCUnicorne
+ 1
+ 10
+ HCShipMortars2
+ 3
+
+
+ HCXPShipMortarsTeam
+ 1
+ 40
+ HCUnicorne
+ 3
+ 2
+
+
+ HCShipGreatCannons1
+ 1
+ 10
+ HCShipFalconets3
+ 3
+ 2
+ 1
+
+
+ HCShipGreatCannons2
+ 1
+ 25
+ HCShipGreatCannons1
+ 3
+ 2
+ 1
+
+
+ HCNativeLore
+ 1
+ 0
+ -1
+ 1
+
+
+ HCNativeTreaties
+ 1
+ 0
+ HCNativeLore
+ 1
+
+
+ HCNativeWarriors
+ 1
+ 10
+ HCNativeTreaties
+ 2
+
+
+ HCXPBloodBrothers
+ 1
+ 25
+ HCAdvancedTradingPost
+ 3
+
+
+ HCAdvancedTradingPost
+ 1
+ 25
+ HCNativeWarriors
+ 0
+
+
+ HCColonialMilitia
+ 1
+ 0
+ -1
+ 0
+
+
+ HCPioneers
+ 1
+ 0
+ HCColonialMilitia
+ 0
+
+
+ HCImprovedBuildings
+ 1
+ 10
+ HCFrontierDefenses
+ 0
+
+
+ HCFrontierDefenses
+ 1
+ 0
+ HCColonialMilitia
+ 2
+ 2
+ 1
+
+
+ HCHeavyFortifications
+ 1
+ 25
+ HCImprovedBuildings
+ 3
+
+
+ HCAdvancedArsenal
+ 1
+ 10
+ HCFrontierDefenses
+ 1
+
+
+ HCFrontierDefenses2
+ 1
+ 10
+ HCAdvancedArsenal
+ 3
+ 4
+
+
+ HCUnlockFort
+ 1
+ 0
+ -1
+ 2
+ 1
+ 1
+
+
+ HCXPUnlockFort2
+ 1
+ 10
+ HCUnlockFort
+ 3
+ 1
+
+
+ HCXPSevastopol
+ 1
+ 40
+ HCXPUnlockFort2
+ 1
+
+
+ HCFencingSchool
+ 1
+ 10
+ -1
+ 1
+
+
+ HCDuelingSchoolTeam
+ 1
+ 25
+ HCFencingSchool
+ 2
+
+
+ HCRidingSchool
+ 1
+ 10
+ -1
+ 1
+
+
+ HCRoyalDecreeSwedish
+ 1
+ 10
+ -1
+ 1
+
+
+ HCXPNationalRedoubt
+ 1
+ 40
+ HCRoyalDecreeSwedish
+ 3
+
+
+ HCAdvancedMill
+ 1
+ 0
+ -1
+ 0
+
+
+ HCAdvancedMarket
+ 1
+ 0
+ -1
+ 0
+
+
+ HCAdvancedPlantations
+ 1
+ 25
+ -1
+ 0
+
+
+ HCAdvancedDock
+ 1
+ 10
+ -1
+ 0
+
+
+ HCUnlockFactory
+ 1
+ 0
+ -1
+ 3
+ 1
+ 1
+
+
+ HCXPIndustrialRevolution
+ 1
+ 25
+ HCUnlockFactory
+ 3
+ 1
+
+
+ HCXPRanching
+ 1
+ 0
+ -1
+ 0
+
+
+ HCXPShipSpies1
+ 1
+ 0
+ -1
+ 1
+ 5
+ 1
+
+
+ HCXPShipSpies2
+ 1
+ 10
+ HCXPShipSpies1
+ 2
+ 8
+ 1
+
+
+ HCXPShipSpiesTeam
+ 1
+ 40
+ HCXPShipSpies2
+ 3
+ 8
+ 1
+
+
+ HCXPAssassins
+ 1
+ 40
+ -1
+ 2
+
+
+ HCFishMarket
+ 1
+ 0
+ -1
+ 0
+
+
+ HCRenderingPlant
+ 1
+ 10
+ HCFishMarket
+ 1
+
+
+ HCSchooners
+ 1
+ 10
+ HCFishMarket
+ 0
+
+
+ HCSawmills
+ 1
+ 10
+ -1
+ 0
+
+
+ HCExoticHardwoods
+ 1
+ 25
+ HCSawmills
+ 0
+
+
+ HCXPDistributivism
+ 1
+ 25
+ HCExoticHardwoods
+ 0
+
+
+ HCSilversmith
+ 1
+ 10
+ -1
+ 1
+
+
+ HCRoyalMint
+ 1
+ 25
+ HCSilversmith
+ 2
+
+
+ HCFoodSilos
+ 1
+ 0
+ -1
+ 0
+
+
+ HCSustainableAgriculture
+ 1
+ 10
+ HCFoodSilos
+ 1
+
+
+ HCRefrigeration
+ 1
+ 25
+ HCSustainableAgriculture
+ 2
+
+
+ HCStockyards
+ 1
+ 0
+ -1
+ 0
+
+
+ HCFurrierTeam
+ 1
+ 0
+ -1
+ 0
+
+
+ HCSpiceTrade
+ 1
+ 10
+ HCFurrierTeam
+ 1
+
+
+ HCMedicine
+ 1
+ 25
+ -1
+ 1
+
+
+ HCRumDistillery
+ 1
+ 0
+ -1
+ 0
+
+
+ HCCigarRoller
+ 1
+ 0
+ HCRumDistillery
+ 1
+
+
+ HCTextileMills
+ 1
+ 10
+ HCCigarRoller
+ 2
+
+
+ HCStonemasons
+ 1
+ 10
+ -1
+ 1
+
+
+ HCXPLandGrab
+ 1
+ 25
+ HCStonemasons
+ 0
+
+
+ HCXPEconomicTheory
+ 1
+ 40
+ HCStonemasons
+ 0
+
+
+ HCShipCaravels1
+ 1
+ 0
+ -1
+ 1
+ 1
+ 1
+
+
+ HCShipCaravels2
+ 1
+ 0
+ HCShipCaravels1
+ 1
+ 2
+ 1
+
+
+ HCShipGalleons
+ 1
+ 0
+ HCShipCaravels1
+ 1
+ 1
+ 1
+
+
+ HCCoastalDefensesTeam
+ 1
+ 10
+ -1
+ 0
+
+
+ HCShipFrigates
+ 1
+ 10
+ HCShipGalleons
+ 2
+ 1
+ 1
+
+
+ HCShipRussianFleet
+ 1
+ 25
+ HCShipFrigates
+ 3
+ 2
+ 1
+
+
+ HCNavalCombat
+ 1
+ 10
+ HCShipFrigates
+ 1
+
+
+ HCShipMonitors
+ 1
+ 10
+ HCShipFrigates
+ 3
+ 1
+ 1
+
+
+ HCXPShipMonitorsTeam
+ 1
+ 40
+ HCShipMonitors
+ 3
+ 1
+
+
+ HCAdmirality
+ 1
+ 0
+ -1
+ 1
+
+
+ HCColdWaterPortTeam
+ 1
+ 10
+ HCAdmirality
+ 1
+
+
+ HCMercsHolyRoman
+ 1
+ 25
+ -1
+ 3
+ 16
+ 1
+
+
+ HCMercsHighland
+ 1
+ 25
+ HCMercsHighlanders
+ 3
+ 18
+ 1
+
+
+ HCMercsHackapells
+ 1
+ 10
+ HCMercsHighlanders
+ 2
+ 6
+ 1
+
+
+ HCMercsHighlanders
+ 1
+ 10
+ -1
+ 2
+ 9
+ 1
+
+
+ HCMercsManchu
+ 1
+ 10
+ -1
+ 2
+ 9
+ 1
+
+
+ HCXPMercsNinja
+ 1
+ 10
+ HCMercsManchu
+ 3
+ 12
+ 1
+
+
+ HCXPMercsFusiliers
+ 1
+ 10
+ -1
+ 3
+ 8
+ 1
+
+
+ HCMercenaryLoyalty
+ 1
+ 25
+ HCXPDanceHallRu
+ 2
+
+
+ HCXPDanceHallRu
+ 1
+ 0
+ -1
+ 1
+
+
+ HCXPNootkaAlliesRepeat
+ -1
+ 40
+ -1
+ 3
+ 30
+
+
+ HCPrivateers
+ 1
+ 0
+ -1
+ 1
+ 2
+ 1
+
+
+ HCREVShipGatlingGuns
+ -1
+ 0
+ XPRevolution
+ 2
+ 4
+
+
+
+ HCREVShipColonialMilitia
+ -1
+ 0
+ XPRevolution
+ 2
+ 16
+
+
+
+ HCREVShipIronclads
+ -1
+ 0
+ XPRevolution
+ 2
+ 2
+
+
+
+ HCREVShipFortWagon
+ -1
+ 0
+ XPRevolution
+ 2
+ 1
+
+
+
+ HCREVPowder
+ -1
+ 0
+ XPRevolution
+ 2
+ 3
+
+
+
+ HCREVFireShips
+ -1
+ 0
+ XPRevolution
+ 2
+ 3
+
+
+
+
+
+ $$41681$$
+
+ HCShipFoodCrates1
+ HCShipCoveredWagons
+ HCShipStrelets1
+ HCShipStrelets2
+ HCShipCossacks1
+ HCShipCossacks2
+ HCShipCavArchers1
+ HCShipCavArchers2
+ HCShipAxemenR
+ HCShipAxemenR2
+ HCShipFalconets1
+ HCExplorerRussian
+ HCFurrierTeam
+ HCAdvancedArtillery
+ HCUnlockFort
+ HCRoyalDecreeSwedish
+
+
+
+ $$41682$$
+
+
+ HCShipFoodCrates1
+ HCShipCoveredWagons
+ HCShipStrelets1
+ HCShipStrelets2
+ HCShipCossacks1
+ HCShipCossacks2
+ HCShipCavArchers1
+ HCShipCavArchers2
+ HCShipAxemenR
+ HCShipAxemenR2
+ HCShipFalconets1
+ HCExplorerRussian
+ HCFurrierTeam
+ HCAdvancedArtillery
+ HCUnlockFort
+ HCRoyalDecreeSwedish
+
+
+
+ $$45518$$
+
+ HCREVShipFortWagon
+ HCREVShipFactory
+ HCREVShipColonialMilitia
+ HCREVShipGatlingGuns
+ HCREVShipIronclads
+ HCREVShipPrivateers
+ HCREVPowder
+ HCREVFireShips
+
+
+
+
+ Estate
+
+ russian\russian estate.xml
+ bone_estate
+
+ 150
+ 200
+ russian\russian_homecity_estate_camera.cam
+ russian\russian_homecity_estate_camera.cam
+ 0
+ homecity\buildings_west\estate_icon
+ 24968
+ 25537
+
+
+
+
+ 1
+ 1
+
+
+ Market
+
+ russian\russian_tradecenter2.xml
+ bone_market
+
+ 250
+ 375
+ russian\russian_homecity_market_camera.cam
+ russian\russian_homecity_market_widescreencamera.cam
+ 0
+ homecity\buildings_west\market_icon
+ 24970
+ 25536
+
+ HCShipSettlers1
+ HCShipSettlers3
+ HCShipFoodCrates1
+ HCShipWoodCrates1
+ HCShipCoinCrates1
+ HCShipFoodCrates2
+ HCShipWoodCrates2
+ HCShipCoinCrates2
+ HCShipFoodCrates3
+ HCShipWoodCrates3
+ HCShipCoinCrates3
+ HCShipFoodCrates4
+ HCShipWoodCrates4
+ HCShipCoinCrates4
+ HCShipFoodCrates5
+ HCShipWoodCrates5
+ HCShipCoinCrates5
+ HCShipSheep1
+ HCShipSheep2
+ HCShipSheep3
+ HCShipCows
+ HCShipCoveredWagons
+ HCShipSurgeons
+ HCCheapHealersTeam
+ HCXPMasterSurgeons
+ HCExplorerRussian
+ HCShipBalloons
+ HCXPAdvancedBalloon
+ TreasurySup
+
+
+ HCShipFoodCrates1
+ HCShipCoveredWagons
+ HCExplorerRussian
+
+
+
+ 1
+
+
+ Academy
+
+ russian\russian_academy2.xml
+ bone_academy
+
+ 460
+ 125
+ russian\russian_homecity_academy_camera.cam
+ russian\russian_homecity_academy_widescreencamera.cam
+ 0
+ homecity\buildings_west\academy_icon
+ 24965
+ 25533
+
+ HCStreletsCombatRussian
+ HCShipStrelets1
+ HCShipStrelets2
+ HCShipStrelets3
+ HCShipStrelets4
+ HCSpawnStrelet
+ HCXPSuvorovReforms
+ HCShipHalberdiersRussian1
+ HCShipHalberdiersRussian2
+ HCShipHalberdiersRussian3
+ HCRansack
+ HCShipMusketeersRussian2
+ HCShipMusketeersRussian3
+ HCShipCossacks1
+ HCShipCossacks2
+ HCShipCossacks3
+ HCShipCossacks4
+ HCUniqueCombatRussian
+ HCShipCavArchers1
+ HCShipCavArchers2
+ HCShipCavArchers3
+ HCXPShipCavArchersRepeat
+ HCCavalryCombatRussian
+ HCCavalryLOSTeam
+ HCShipOprichniks1
+ HCShipOprichniks2
+ HCShipOprichniks3
+ HCXPShipOprichniks4
+ HCShipGrenadiers1
+ HCShipGrenadiers2
+ HCShipGrenadiers3
+ HCShipGrenadiers4
+ HCShipFalconets1
+ HCShipFalconets2
+ HCShipFalconets3
+ HCShipGreatCannons1
+ HCShipGreatCannons2
+ HCAdvancedArtillery
+ HCShipMortars1
+ HCShipMortars2
+ HCUnicorne
+ HCXPShipMortarsTeam
+
+
+ HCShipStrelets1
+ HCShipStrelets2
+ HCShipCossacks1
+ HCShipCossacks2
+ HCShipCavArchers1
+ HCShipCavArchers2
+ HCShipAxemenR
+ HCShipAxemenR2
+ HCShipFalconets1
+ HCAdvancedArtillery
+
+
+
+ 1
+
+
+ Cathedral
+
+ russian\russian_cathedral2.xml
+ bone_cathedral
+
+ 80
+ 475
+ russian\russian_homecity_cathedral_camera.cam
+ russian\russian_homecity_cathedral_widescreencamera.cam
+ 0
+ homecity\buildings_west\cathedral_icon
+ 28989
+ 25538
+
+ HCExtensiveFortifications
+ HCNativeLore
+ HCNativeTreaties
+ HCNativeWarriors
+ HCAdvancedTradingPost
+ HCXPBloodBrothers
+ HCFencingSchool
+ HCDuelingSchoolTeam
+ HCXPRanching
+ HCRidingSchool
+ HCColonialMilitia
+ HCPioneers
+ HCFrontierDefenses
+ HCImprovedBuildings
+ HCAdvancedArsenal
+ HCFrontierDefenses2
+ HCHeavyFortifications
+ HCUnlockFort
+ HCXPUnlockFort2
+ HCXPSevastopol
+ HCBarracksHPTeam
+ HCBlockhouseCannon
+ HCRoyalDecreeSwedish
+ HCXPNationalRedoubt
+ HCAdvancedMill
+ HCAdvancedMarket
+ HCAdvancedDock
+ HCAdvancedPlantations
+ HCXPAssassins
+ HCXPShipSpies1
+ HCXPShipSpies2
+ HCXPShipSpiesTeam
+ HCUnlockFactory
+ HCXPIndustrialRevolution
+
+
+ HCUnlockFort
+ HCRoyalDecreeSwedish
+
+
+
+ 1
+
+
+ ManufacturingPlant
+
+ russian\russian_manufacturingplant2.xml
+ bone_plant
+
+ 450
+ 275
+ russian\russian_homecity_manufacturing_plant_camera.cam
+ russian\russian_homecity_plant_widescreencamera.cam
+ 0
+ homecity\buildings_west\manufacturing_plant_icon
+ 24972
+ 25535
+
+ HCStonemasons
+ HCXPEconomicTheory
+ HCXPLandGrab
+ HCFishMarket
+ HCRenderingPlant
+ HCSchooners
+ HCSawmills
+ HCExoticHardwoods
+ HCXPDistributivism
+ HCSilversmith
+ HCRoyalMint
+ HCFoodSilos
+ HCSustainableAgriculture
+ HCRefrigeration
+ HCStockyards
+ HCFurrierTeam
+ HCSpiceTrade
+ HCMedicine
+ HCRumDistillery
+ HCCigarRoller
+ HCTextileMills
+
+
+ HCFurrierTeam
+
+
+ 1
+
+
+ Dock
+
+ russian\russian_dock2.xml
+ bone_dock
+
+ 200
+ 250
+ russian\russian_homecity_dock_camera.cam
+ russian\russian_homecity_dock_widescreencamera.cam
+ 0
+ homecity\buildings_west\dock_icon
+ 35745
+ 35746
+
+ HCShipCaravels1
+ HCShipCaravels2
+ HCCoastalDefensesTeam
+ HCShipGalleons
+ HCShipFrigates
+ HCShipRussianFleet
+ HCNavalCombat
+ HCShipMonitors
+ HCXPShipMonitorsTeam
+ HCAdmirality
+ HCColdWaterPortTeam
+ HCXPMercsFusiliers
+ HCXPComancheroAllies
+ HCMercsManchu
+ HCXPMercsNinja
+ HCMercsHighlanders
+ HCMercsHackapells
+ HCMercsHolyRoman
+ HCXPNootkaAlliesRepeat
+ HCMercsHighland
+ HCPrivateers
+ HCMercsStradiots
+ HCXPDanceHallRu
+ HCMercenaryLoyalty
+
+
+
+
+ 1
+
+
+ Customization
+ russian\russian_homecity_camera.cam
+ russian\russian_homecity_widescreencamera.cam
+ 0
+ homecity\buildings_west\dock_icon
+ 24966
+ 25540
+ 1
+
+
+
+ bone_pathnode_01
+
+
+ bone_pathnode_03
+ 1
+
+
+ bone_pathnode_04
+ 1
+
+
+ bone_pathnode_05
+ 1
+
+
+ bone_pathnode_06
+ 1
+
+
+ bone_pathnode_07
+
+
+ bone_pathnode_08
+ 1
+
+
+ bone_pathnode_09
+ 1
+ 1
+
+
+ bone_pathnode_10
+ 1
+ 1
+
+
+ bone_pathnode_11
+ 1
+
+
+ bone_pathnode_12
+ 1
+
+
+ bone_pathnode_13
+ 1
+
+
+ bone_pathnode_14
+
+
+ bone_pathnode_15
+ 1
+
+
+ bone_pathnode_16
+ 1
+
+
+ bone_pathnode_17
+
+
+ bone_pathnode_18
+
+
+ bone_pathnode_19
+
+
+ bone_pathnode_20
+ 1
+
+
+ bone_pathnode_21
+
+
+ bone_pathnode_22
+
+
+ bone_pathnode_23
+ 1
+
+
+ bone_pathnode_24
+ 1
+ 1
+
+
+ bone_pathnode_26
+ 1
+ 1
+
+
+ bone_pathnode_27
+
+
+ bone_pathnode_28
+ 1
+
+
+ bone_pathnode_29
+ 1
+
+
+ bone_pathnode_30
+
+
+ bone_pathnode_31
+ 1
+
+
+ bone_academy_doorway
+ 1
+
+
+ bone_plant_doorway
+ 1
+
+
+ bone_cathedral_doorway
+ 1
+
+
+ bone_dock_doorway
+ 1
+
+
+ bone_shipment_start
+ 1
+
+
+ bone_shipment_end
+ 1
+
+
+ bone_dregs01
+
+ ]]>
+
+
+ bone_dregs02
+
+ ]]>
+
+
+ bone_dregs03
+
+ ]]>
+
+
+ bone_dregs04
+
+ ]]>
+
+
+ bone_dregs06
+
+ ]]>
+
+
+ bone_vendor01
+
+ ]]>
+
+
+ bone_vendor02
+
+ ]]>
+
+
+ bone_vendor03
+
+ ]]>
+
+
+ bone_vendor04
+
+ ]]>
+
+
+ bone_vendor05
+
+ ]]>
+
+
+ bone_vendor06
+
+ ]]>
+
+
+ bone_vendor07
+
+ ]]>
+
+
+ bone_vendor08
+
+ ]]>
+
+
+ bone_firework01
+ 1
+
+
+ bone_firework02
+ 1
+
+
+ bone_firework03
+ 1
+
+
+ bone_firework04
+ 1
+
+
+ bone_firework05
+ 1
+
+
+ bone_firework06
+ 1
+
+
+
+ Russian_LightSet1
+ Russian_LightSet2
+ NobleClassFrenchMale
+ NobleClassFrenchFemale
+ RussianPoliceman1
+ RussianPoliceman2
+ StageCoachRoyal
+ Torchy
+ Juggler
+ PeasantVendor
+ MiddleClassMusician
+ MiddleClassPreacher
+ PeasantPainter
+ Drunk
+ NiceLady
+ Thug
+ UnitChats
+ Russian_CathProp01
+ Russian_Market_Prop01
+ EE_Market_Prop01
+ EE_Market_Prop02
+ EE_Market_Prop03
+ Russian_Market_IcyRider
+ Russian_DockProp01
+ German_DockProp01
+ German_DockProp02
+ German_DockProp04
+ Russian_PlantProp01
+ Tsars_Cannon
+ Rus_Street_Lamps
+ Rus_Pillar_Lamps
+ ee_PlantProp01
+ ee_PlantProp02
+ EE_PlantProp03
+ Russian_AcadProp01
+ Russian_NWTCTexture0
+ Russian_NWTCTexture1
+ Russian_NWTCTexture2
+ Russian_NWTCTexture3
+ Russian_NWTCTexture4
+ Russian_NWTCTexture5
+ Russian_NWTCTexture6
+ Russian_NWTCTexture7
+ Russian_AcademyTexture0
+ Russian_AcademyTexture1
+ Russian_AcademyTexture2
+ Russian_AcademyTexture3
+ Russian_AcademyTexture4
+ Russian_AcademyTexture5
+ Russian_AcademyTexture6
+ Russian_AcademyTexture7
+ Russian_ManuPlantTexture0
+ Russian_ManuPlantTexture1
+ Russian_ManuPlantTexture2
+ Russian_ManuPlantTexture3
+ Russian_ManuPlantTexture4
+ Russian_ManuPlantTexture5
+ Russian_ManuPlantTexture6
+ Russian_ManuPlantTexture7
+ Russian_CathedralTexture0
+ Russian_CathedralTexture1
+ Russian_CathedralTexture2
+ Russian_CathedralTexture3
+ Russian_DockTexture0
+ Russian_DockTexture1
+ Russian_DockTexture2
+ Russian_DockTexture3
+ Russian_DockTexture4
+ Russian_DockTexture5
+ Russian_DockTexture6
+ Russian_DockTexture7
+
+
\ No newline at end of file
diff --git a/Data/protom.xml b/Data/protom.xml
index 4d81f4a..985f8da 100644
--- a/Data/protom.xml
+++ b/Data/protom.xml
@@ -6943,8 +6943,8 @@
HasBountyValue
CountsTowardEconomicScore
ValidIdleVillager
- ConvertsHerds
AbstractWagon
+ ConvertsHerds
CannotConvertHill
Bank
ypBankAsian
@@ -9319,6 +9319,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -9528,9 +9529,9 @@
0.670000
0.340000
0.500000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
HandAttack
@@ -9906,7 +9907,6 @@
AbstractRangedInfantry
AbstractCanSeeStealth
AbstractMonk
- CannotConvertHill
Outpost
TradingPost
TownCenter
@@ -10033,9 +10033,9 @@
18.0000
30.0000
5
- 40.0000
- 40.0000
- 300.0000
+ 30.0000
+ 30.0000
+ 200.0000
100.0000
1.0000
1.0000
@@ -10093,7 +10093,7 @@
20.000000
0.050000
80.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -10110,6 +10110,14 @@
2.000000
120.000000
0.500000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
1.000000
GAIAEnemy
@@ -10352,87 +10360,93 @@
ypNatConquistador
ypNatChakram
ypNatSohei
+ CamelArcher
NatBowyery
- NatMorningWars
- NatTanning
- NatXPKlamathStrategy
- NatXPNavajoWeaving
- NatAnimalLore
- NatMetalworking
- NatPotlatch
- NatCalendar
- NatChocolateRecipes
- NatCeremonialFeast
- NatTradeLanguage
- NatHorseTrading
- NatXPApacheCactus
- NatXPHuronSunCeremony
- NatXPHuronTradeMonopoly
- NatXPKlamathHuckleberryFeast
- NatXPMapucheAdMapu
- NatXPMapucheTactics
- NatXPNavajoCraftsmanship
- NatXPZapotecCloudPeople
- NatXPZapotecCultOfTheDead
- YPNatBhaktiVegetarianism
- YPNatBhaktiYoga
- NatXPApacheEndurance
- NatXPMapucheTreatyOfQuillin
- NatXPNavajoShepherds
- NatIroquoisLeague
- NatGarifunaDrums
- NatChasquisMessengers
- NatBarkClothing
- NatHorseBreeding
- NatBasketweaving
- NatKinship
- NatLacrosse
- NatGuerillaWars
- NatMustangs
- NatChinampa
- NatCottonArmor
- NatWarDance
- NatTextileCraftsmanship
- NatRoadbuilding
- NatHuntingGrounds
- NatPoisonArrowFrogs
- NatKasiriBeer
- NatAztecInitiation
- NatXPApacheRaiding
- NatXPCheyenneFury
- NatXPCheyenneHorseTrading
- NatXPCheyenneHuntingGrounds
- NatXPHuronFishWedding
- NatForestBurning
- NatXPKlamathWorkEthos
- NatXPZapotecFoodOfTheGods
- NatGarlandWars
- NatSequoyahSyllabary
- NatDogSoldier
- NatLoyalClubman
- NatBlowgunnerAmbush
- YPNatZenMeritocracy
- YPNatZenMeditation
- YPNatUdasiGurus
- YPNatSufiSharia
- YPNatShaolinDimMak
- YPNatShaolinClenchedFist
- YPNatJesuitSmokelessPowder
- YPNatJesuitFlyingButtress
- YPNatBhaktiReinforcedGuantlets
- YPNatZenMasterLessons
- YPNatSufiPilgramage
- YPNatSufiFasting
- YPNatShaolinWoodClearing
- YPNatJesuitSchools
- YPNatUdasiNewYear
- YPNatUdasiArmyOfThePure
+ NatMorningWars
+ NatTanning
+ NatXPKlamathStrategy
+ NatXPNavajoWeaving
+ NatAnimalLore
+ NatMetalworking
+ NatPotlatch
+ NatCalendar
+ NatChocolateRecipes
+ NatCeremonialFeast
+ NatTradeLanguage
+ NatHorseTrading
+ NatXPApacheCactus
+ NatXPHuronSunCeremony
+ NatXPHuronTradeMonopoly
+ NatXPKlamathHuckleberryFeast
+ NatXPMapucheAdMapu
+ NatXPMapucheTactics
+ NatXPNavajoCraftsmanship
+ NatXPZapotecCloudPeople
+ NatXPZapotecCultOfTheDead
+ YPNatBhaktiVegetarianism
+ YPNatBhaktiYoga
+ NatXPApacheEndurance
+ NatXPMapucheTreatyOfQuillin
+ NatXPNavajoShepherds
+ NatIroquoisLeague
+ NatGarifunaDrums
+ NatChasquisMessengers
+ NatBarkClothing
+ NatHorseBreeding
+ NatBasketweaving
+ NatKinship
+ NatLacrosse
+ NatGuerillaWars
+ NatMustangs
+ NatChinampa
+ NatCottonArmor
+ NatWarDance
+ NatTextileCraftsmanship
+ NatRoadbuilding
+ NatHuntingGrounds
+ NatPoisonArrowFrogs
+ NatKasiriBeer
+ NatAztecInitiation
+ NatXPApacheRaiding
+ NatXPCheyenneFury
+ NatXPCheyenneHorseTrading
+ NatXPCheyenneHuntingGrounds
+ NatXPHuronFishWedding
+ NatForestBurning
+ NatXPKlamathWorkEthos
+ NatXPZapotecFoodOfTheGods
+ NatGarlandWars
+ NatSequoyahSyllabary
+ NatDogSoldier
+ NatLoyalClubman
+ NatBlowgunnerAmbush
+ YPNatZenMeritocracy
+ YPNatZenMeditation
+ YPNatUdasiGurus
+ YPNatSufiSharia
+ YPNatShaolinDimMak
+ YPNatShaolinClenchedFist
+ YPNatJesuitSmokelessPowder
+ YPNatJesuitFlyingButtress
+ YPNatBhaktiReinforcedGuantlets
+ YPNatZenMasterLessons
+ YPNatSufiPilgramage
+ YPNatSufiFasting
+ YPNatShaolinWoodClearing
+ YPNatJesuitSchools
+ YPNatUdasiNewYear
+ YPNatUdasiArmyOfThePure
+ MercArmy
+ MercArmyNat
+ VenomExtract
+ NatFinePowder
+ NatElephants
TradeRouteUpgrade1
TradeRouteUpgrade2
ypTradeRouteUpgrade1
ypTradeRouteUpgrade2
- ypTradeRouteUpgradeIndia1
- ypTradeRouteUpgradeIndia2
+ ypTradeRouteUpgradeIndia1
+ ypTradeRouteUpgradeIndia2
WarriorSocietyApache
WarriorSocietyCherokee
WarriorSocietyCaribs
@@ -10479,8 +10493,8 @@
ypNatHonoredShaolin
ypNatHonoredSufi
ypNatHonoredUdasi
- MercArmy
- MercArmyNat
+ ypNatHonoredSaltpeter
+ ypNatDisciplinedSaltpeter
AllowAutoGarrison
HasGatherPoint
CollidesWithProjectiles
@@ -10942,6 +10956,7 @@
ypPeasantIndians
xpWarrior
Envoy
+ Architect
NativeScout
ypMongolScout
TownBell
@@ -11081,6 +11096,7 @@
AbstractBarracks2
CountsTowardMilitaryScore
HasBountyValue
+ SharpshooterS
USColonialMilitia
xpColonialMilitia
Marine
@@ -11094,6 +11110,8 @@
xpSPCColonialMilitia
GuardColonialMilitia
VeteranColonialMilitia
+ GuardSharpshooter
+ ImperialSharpshooter
Crossbowman
Longbowman
Flatbowman
@@ -11356,6 +11374,7 @@
Building
BuildingClass
MilitaryBuilding
+ PistolS
ypSowar
BlackPowderWagon
Saber
@@ -11373,6 +11392,9 @@
Cuirassier
Cossack
MountedCrossbowman
+ GuardPistolS
+ VeteranPistolS
+ ImperialPistolS
GuardCamel
VeteranCamel
ImperialCamel
@@ -11655,6 +11677,7 @@
29
22928
+ 22928
4.5000
4.5000
0
@@ -11756,6 +11779,9 @@
SacredDecree
VenetianGothic
FameArmies
+ ChurchFortifiedWalls
+ ChurchLumberCamp
+ ChurchAxe
CollidesWithProjectiles
StartsAtFullEfficiency
Immoveable
@@ -11799,8 +11825,8 @@
0.4900
BloodSplat
Body
- 6.0000
- 8.0000
+ 5.5000
+ 7.5000
land
18.0000
units\infantry\redolero\redolero.xml
@@ -11810,8 +11836,8 @@
units\infantry\redolero\redolero_portrait
22934
25702
- 135.0000
- 135.0000
+ 145.0000
+ 145.0000
12.0000
HandCombative
30.0000
@@ -11974,7 +12000,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -11987,10 +12013,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
+ 1.000000
MeleeHandAttack
@@ -11998,7 +12025,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -12009,7 +12036,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -12022,10 +12049,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
+ 1.000000
VolleyHandAttack
@@ -12033,7 +12061,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -12046,10 +12074,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
+ 1.000000
@@ -12437,9 +12466,9 @@
6.500000
Hand
1.500000
- 3.000000
+ 4.500000
2.000000
- 1.750000
+ 3.500000
@@ -12862,9 +12891,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -12875,9 +12904,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -12886,8 +12915,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -12897,8 +12926,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -12910,8 +12939,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -12921,9 +12950,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -12934,8 +12963,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -13100,8 +13129,8 @@
units\cavalry\dragoon\dragoon_portrait
22959
25629
- 210.0000
- 210.0000
+ 200.0000
+ 200.0000
16.0000
InvisibleProjectile
RangedCombative
@@ -13166,7 +13195,7 @@
3.000000
3.000000
2.000000
- 2.750000
+ 2.500000
MeleeHandAttack
@@ -13175,7 +13204,7 @@
1.500000
3.000000
2.000000
- 2.750000
+ 2.500000
StaggerRangedAttack
@@ -13187,7 +13216,7 @@
Ranged
0.500000
2.000000
- 2.750000
+ 2.500000
@@ -13244,8 +13273,6 @@
ValidIdleVillager
AbstractFishingBoat
ConvertsHerds
- Dock
- YPDockAsian
TieToWaterSurface
CollidesWithProjectiles
ApplyHandicapTraining
@@ -13313,6 +13340,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -13441,7 +13469,7 @@
44.0000
MortarShell
RangedCombative
- 45.0000
+ 50.0000
50.0000
50.0000
100.0000
@@ -13495,7 +13523,6 @@
2.500000
2.000000
GAIAEnemy
- 1.500000
0.500000
@@ -13580,10 +13607,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -13593,10 +13620,10 @@
22.000000
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -13604,9 +13631,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -13615,9 +13642,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -13628,9 +13655,9 @@
22.000000
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -13639,10 +13666,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -13652,9 +13679,9 @@
22.000000
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -13813,6 +13840,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -13874,6 +13902,7 @@
Tracked
NotSelectable
VisibleUnderFog
+ NonCollideable
Delete
titan.tactics
@@ -14487,9 +14516,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -14499,9 +14528,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -14510,8 +14539,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -14521,8 +14550,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -14533,8 +14562,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -14544,9 +14573,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -14556,8 +14585,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -14800,7 +14829,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.500000
@@ -15054,9 +15083,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -15067,9 +15096,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -15078,9 +15107,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
StaggerHandAttack
@@ -15089,9 +15118,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
StaggerRangedAttack
@@ -15102,9 +15131,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyHandAttack
@@ -15113,9 +15142,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -15126,9 +15155,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
@@ -15240,15 +15269,15 @@
ui\units\native_canoe_icon
ui\units\native_canoe_portrait
23693
- 25617
+ 25618
220.0000
220.0000
24.0000
Civilian
20.0000
14
- 10.0000
- 10.0000
+ 12.0000
+ 12.0000
125.0000
1.0000
1.0000
@@ -15321,6 +15350,14 @@
2.000000
40.000000
ArrowCanoe
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
@@ -15744,7 +15781,7 @@
200.0000
200.0000
15.0000
- 20
+ 24
InvisibleProjectile
RangedCombative
2.0000
@@ -16307,9 +16344,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -16320,9 +16357,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -16331,8 +16368,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -16342,8 +16379,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -16355,8 +16392,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -16366,9 +16403,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -16379,8 +16416,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -16578,10 +16615,10 @@
25748
500.0000
500.0000
- 20.0000
+ 18.0000
InvisibleProjectile
RangedCombative
- 60.0000
+ 55.0000
30.0000
30.0000
150.0000
@@ -16636,8 +16673,8 @@
DefendRangedAttack
42.000000
Ranged
- 16.000000
- 3.000000
+ 14.000000
+ 2.500000
3.000000
0.500000
2.000000
@@ -16658,8 +16695,8 @@
StaggerRangedAttack
42.000000
Ranged
- 16.000000
- 3.000000
+ 14.000000
+ 2.500000
3.000000
0.500000
2.000000
@@ -16977,8 +17014,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -16989,10 +17026,10 @@
3.000000
2.000000
Blowdart
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
@@ -17081,9 +17118,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -17094,9 +17131,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -17105,8 +17142,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17116,8 +17153,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17129,8 +17166,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17140,9 +17177,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -17153,8 +17190,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17244,9 +17281,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -17257,9 +17294,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -17268,8 +17305,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17279,8 +17316,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17292,8 +17329,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17303,9 +17340,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -17316,8 +17353,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17521,8 +17558,8 @@
1.500000
2.000000
1.500000
- 1.500000
- 0.750000
+ 1.500000
+ 0.750000
0.750000
@@ -17537,10 +17574,10 @@
3.000000
GAIAEnemy
Bola
- 1.500000
+ 1.500000
1.500000
0.750000
- 0.750000
+ 0.750000
0.000000
0.000000
@@ -17955,9 +17992,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -17967,9 +18004,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -17978,8 +18015,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -17989,8 +18026,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -18001,8 +18038,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -18012,9 +18049,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -18024,8 +18061,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -18834,10 +18871,11 @@
CountsTowardMilitaryScore
ConvertsHerds
Bastion
- StoneFortifiedWalls
- AsianFortifiedWalls
- ImprovedWallsNative
- ImprovedWallsNativeSx
+ Redoubt
+ StoneFortifiedWalls
+ AsianFortifiedWalls
+ ImprovedWallsNative
+ ImprovedWallsNativeSx
FlattenGround
SelectWithObstruction
Doppled
@@ -18898,10 +18936,11 @@
CountsTowardMilitaryScore
ConvertsHerds
Bastion
- StoneFortifiedWalls
- AsianFortifiedWalls
- ImprovedWallsNative
- ImprovedWallsNativeSx
+ Redoubt
+ StoneFortifiedWalls
+ AsianFortifiedWalls
+ ImprovedWallsNative
+ ImprovedWallsNativeSx
SelectWithObstruction
Doppled
CollidesWithProjectiles
@@ -19203,6 +19242,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -19407,9 +19447,9 @@
0.670000
0.430000
0.620000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
Hunting
@@ -20187,9 +20227,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -20200,9 +20240,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -20211,8 +20251,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -20222,8 +20262,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -20235,8 +20275,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -20246,9 +20286,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -20259,8 +20299,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -20525,6 +20565,8 @@
CountsTowardMilitaryScore
HasBountyValue
AbstractFort
+ PistolS
+ SharpshooterS
Lancer
Saker
xpWarBow
@@ -20632,6 +20674,7 @@
ypMonkJapanese2
Hero
Envoy
+ Architect
NativeScout
Delete
SetUnitAsHomeCityGatherPoint
@@ -21424,10 +21467,11 @@
CountsTowardMilitaryScore
ConvertsHerds
Bastion
- StoneFortifiedWalls
- AsianFortifiedWalls
- ImprovedWallsNative
- ImprovedWallsNativeSx
+ Redoubt
+ StoneFortifiedWalls
+ AsianFortifiedWalls
+ ImprovedWallsNative
+ ImprovedWallsNativeSx
FlattenGround
SelectWithObstruction
Doppled
@@ -21488,10 +21532,11 @@
CountsTowardMilitaryScore
ConvertsHerds
Bastion
- StoneFortifiedWalls
- AsianFortifiedWalls
- ImprovedWallsNative
- ImprovedWallsNativeSx
+ Redoubt
+ StoneFortifiedWalls
+ AsianFortifiedWalls
+ ImprovedWallsNative
+ ImprovedWallsNativeSx
SelectWithObstruction
Doppled
CollidesWithProjectiles
@@ -21552,10 +21597,11 @@
CountsTowardMilitaryScore
ConvertsHerds
Bastion
- StoneFortifiedWalls
- AsianFortifiedWalls
- ImprovedWallsNative
- ImprovedWallsNativeSx
+ Redoubt
+ StoneFortifiedWalls
+ AsianFortifiedWalls
+ ImprovedWallsNative
+ ImprovedWallsNativeSx
FlattenGround
SelectWithObstruction
Doppled
@@ -22870,6 +22916,7 @@
NatMedicineMan
Imam
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -22910,7 +22957,7 @@
GAIAEnemy
1.500000
0.500000
- 1.500000
+ 1.250000
RangedAttack
@@ -22922,7 +22969,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -23665,10 +23712,10 @@
RangedCombative
40.0000
3
- 100.0000
- 100.0000
- 500.0000
- 500.0000
+ 80.0000
+ 80.0000
+ 400.0000
+ 400.0000
50
2
@@ -23722,7 +23769,7 @@
30.000000
0.050000
80.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -23734,6 +23781,7 @@
2.000000
180.000000
0.500000
+ 1.250000
1.000000
GAIAEnemy
@@ -23764,10 +23812,10 @@
RangedCombative
30.0000
4
- 60.0000
- 60.0000
- 300.0000
- 300.0000
+ 40.0000
+ 40.0000
+ 200.0000
+ 200.0000
50
1
@@ -23834,6 +23882,7 @@
2.000000
140.000000
0.500000
+ 1.250000
1.000000
GAIAEnemy
@@ -23864,10 +23913,10 @@
RangedCombative
30.0000
4
- 80.0000
- 80.0000
+ 65.0000
+ 65.0000
300.0000
- 500.0000
+ 350.0000
50
1
@@ -23893,6 +23942,8 @@
Ranged
CountsTowardMilitaryScore
ConvertsHerds
+ PistolS
+ SharpshooterS
USColonialMilitia
xpColonialMilitia
MountedCrossbowman
@@ -23965,6 +24016,7 @@
2.000000
100.000000
0.500000
+ 1.250000
1.000000
GAIAEnemy
@@ -23995,9 +24047,9 @@
RangedCombative
40.0000
5
- 40.0000
- 40.0000
- 300.0000
+ 30.0000
+ 30.0000
+ 200.0000
100.0000
1.0000
1.0000
@@ -24055,7 +24107,7 @@
20.000000
0.050000
80.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -24072,6 +24124,14 @@
2.000000
170.000000
0.500000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
1.000000
GAIAEnemy
@@ -24093,7 +24153,7 @@
units\naval\privateer\privateer_icon_64x64
units\naval\privateer\privateer_icon_portrait
27725
- 27724
+ 25618
900.0000
900.0000
34.0000
@@ -24101,7 +24161,7 @@
28.0000
RangedCombative
50.0000
- 450.0000
+ 350.0000
1.0000
50
1
@@ -24160,7 +24220,7 @@
30.000000
0.050000
60.000000
- 3.000000
+ 3.000000
1.000000
GAIAEnemy
@@ -24172,6 +24232,14 @@
2.000000
140.000000
0.500000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
1.000000
GAIAEnemy
@@ -25064,7 +25132,7 @@
28576
28575
18.0000
- 2500.0000
+ 3000.0000
Gold
1.0000
@@ -25783,6 +25851,9 @@
ypGoat
Cow
Llama
+ BigBisons
+ BigDeer
+ BigTurkey
SelectiveBreeding
Ranching
RanchingM
@@ -26471,6 +26542,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -26532,6 +26604,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -26593,6 +26666,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -26654,6 +26728,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -26961,7 +27036,6 @@
AbstractNativeWarrior
AbstractInfantry
VisibleUnderFogIfGaia
- HeroName2
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -27685,18 +27759,19 @@
564
- 29954
- 29987
+ 69783
+ 69784
Aztecs
4.0000
4.0000
0.0000
land
- buildings\trading_post\native_outpost_socket.xml
- ui\minimap\n
- units\natives\jaguar_warrior_portrait
- 32930
- 38258
+ buildings\asian_civs\spc\saltpeter_site\saltpeter_socket.xml
+ buildings\native_settlement\indian_native_site_icon_64
+ ui\minimap\asian_native_site
+ buildings\native_settlement\indian_native_site_icon_portrait
+ 69782
+ 69781
0.0000
LogicalTypeHandUnitsAutoAttack
LogicalTypeBuildingsNotWalls
@@ -28392,6 +28467,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -28600,9 +28676,9 @@
1.000000
0.680000
1.000000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
HandAttack
@@ -28636,7 +28712,7 @@
30921
1200.0000
1200.0000
- 38.0000
+ 40.0000
Cannonball
12.0000
RangedCombative
@@ -28644,9 +28720,9 @@
2
100.0000
100.0000
- 800.0000
- 200.0000
- 50
+ 600.0000
+ 400.0000
+ 25
3
LogicalTypeNavalMilitary
@@ -28697,11 +28773,11 @@
LongRangeAttack
200.000000
Siege
- 14.000000
+ 12.000000
80.000000
20.000000
400.000000
- 10.000000
+ 8.000000
10.000000
GAIAEnemy
0.100000
@@ -28712,8 +28788,8 @@
MortarAttack
80.000000
Siege
- 14.000000
- 36.000000
+ 16.000000
+ 40.000000
5.000000
160.000000
8.000000
@@ -29080,7 +29156,7 @@
1.500000
0.750000
1.500000
- 1.500000
+ 1.500000
DefendRangedAttack
@@ -29096,7 +29172,7 @@
1.500000
0.750000
1.500000
- 1.500000
+ 1.500000
MeleeHandAttack
@@ -29108,7 +29184,7 @@
1.500000
0.750000
1.500000
- 1.500000
+ 1.500000
StaggerHandAttack
@@ -29120,7 +29196,7 @@
1.500000
0.750000
1.500000
- 1.500000
+ 1.500000
StaggerRangedAttack
@@ -29136,7 +29212,7 @@
1.500000
0.750000
1.500000
- 1.500000
+ 1.500000
VolleyHandAttack
@@ -29148,7 +29224,7 @@
1.500000
0.750000
1.500000
- 1.500000
+ 1.500000
VolleyRangedAttack
@@ -29162,7 +29238,7 @@
0.250000
0.500000
1.500000
- 1.500000
+ 1.500000
1.500000
0.750000
@@ -29241,7 +29317,7 @@
UniversityI
SPCCherokeeWarHut
SPCFortCenterUS
- SPCOssuary
+ BasilicaIt
SPCFortCenter
SPCXPBaker
HuariStronghold
@@ -29472,9 +29548,9 @@
0.670000
0.430000
0.620000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
Hunting
@@ -32649,10 +32725,10 @@
54.0000
HandCombative
5
- 40.0000
- 40.0000
- 200.0000
- 200.0000
+ 30.0000
+ 30.0000
+ 150.0000
+ 150.0000
1
LogicalTypeValidSabotage
@@ -32813,6 +32889,7 @@
ImprovedWallsNative
SpiesNative
ImpLegendaryNativesNatives
+ BigTurkey
CollidesWithProjectiles
StartsAtFullEfficiency
Immoveable
@@ -33732,6 +33809,7 @@
NatMedicineMan
Imam
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -33858,8 +33936,8 @@
2.000000
2.000000
Blowdart
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -33871,8 +33949,8 @@
2.000000
Blowdart
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -34001,8 +34079,8 @@
841
34097
34098
- 0.9000
- 0.9000
+ 0.8000
+ 0.8000
0.0000
water
homecity\homecity_gatherpoint_naval.xml
@@ -34010,7 +34088,7 @@
homecity\gatherpoint_flags\homecity_waterspawn_flag_icon
34099
34100
- 2.0000
+ 3.0000
1.0000
LogicalTypeMinimapFilterEconomic
Unattackable
@@ -34023,6 +34101,7 @@
SelectWithObstruction
NoHPBar
HasGatherPoint
+ VisibleOwnerOnly
NotDeleteable
Invulnerable
NonCollideable
@@ -35112,6 +35191,7 @@
HasBountyValue
AbstractFort
CountsTowardMilitaryScore
+ Maghrabi
LevyMin
Axeman
MercDove
@@ -35180,6 +35260,7 @@
NatMedicineMan
Imam
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -35215,7 +35296,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -35265,6 +35346,7 @@
HasBountyValue
AbstractFort
CountsTowardMilitaryScore
+ Maghrabi
ypConsulateArmyFrench3US
ypConsulateArmyDutch2US
ypConsulateArmyBritish1US
@@ -35338,6 +35420,7 @@
NatMedicineMan
Imam
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -35373,7 +35456,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -35423,6 +35506,7 @@
HasBountyValue
AbstractFort
CountsTowardMilitaryScore
+ Maghrabi
Axeman
MercDove
General
@@ -35494,6 +35578,7 @@
NatMedicineMan
Imam
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -35529,7 +35614,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -36134,10 +36219,11 @@
CountsTowardMilitaryScore
ConvertsHerds
Bastion
- StoneFortifiedWalls
- AsianFortifiedWalls
- ImprovedWallsNative
- ImprovedWallsNativeSx
+ Redoubt
+ StoneFortifiedWalls
+ AsianFortifiedWalls
+ ImprovedWallsNative
+ ImprovedWallsNativeSx
CollidesWithProjectiles
StartsAtFullEfficiency
Immoveable
@@ -37182,6 +37268,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -37925,6 +38012,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -37986,6 +38074,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -38047,6 +38136,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -42141,9 +42231,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -42153,11 +42243,10 @@
16.000000
1.500000
2.000000
- 0.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -42166,8 +42255,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42177,8 +42266,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42189,10 +42278,9 @@
16.000000
1.500000
2.000000
- 0.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42202,9 +42290,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -42214,10 +42302,9 @@
16.000000
1.500000
2.000000
- 0.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42303,9 +42390,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -42316,9 +42403,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -42327,8 +42414,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42338,8 +42425,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42351,8 +42438,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42362,9 +42449,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -42375,8 +42462,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -42909,7 +42996,6 @@
Military
UnitClass
AbstractMonk
- CannotConvertHill
TradingPost
TownCenter
Lookout
@@ -43105,6 +43191,7 @@
xpMedicineManAztec
ypDaimyoRegicide
Envoy
+ Architect
NativeScout
SetGatherPointMilitary
Eject
@@ -43143,7 +43230,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -43446,7 +43533,7 @@
ui\units\az_war_canoe_icon
ui\units\az_war_canoe_portrait
43508
- 43507
+ 27682
400.0000
400.0000
34.0000
@@ -43545,6 +43632,7 @@
80.000000
1.000000
GAIAEnemy
+ 1.250000
@@ -43736,7 +43824,7 @@
longhouse.tactics
RangedAttack
- 10.000000
+ 15.000000
Ranged
0.000000
12.000000
@@ -43845,6 +43933,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -44057,9 +44146,9 @@
0.670000
0.340000
0.500000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
HandAttack
@@ -44575,7 +44664,7 @@
43843
43842
18.0000
- 2000.0000
+ 2500.0000
Gold
1.0000
@@ -44693,9 +44782,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -44706,9 +44795,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -44717,8 +44806,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -44728,8 +44817,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -44741,8 +44830,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -44752,9 +44841,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -44765,8 +44854,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45383,9 +45472,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -45396,9 +45485,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -45407,8 +45496,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45418,8 +45507,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45431,8 +45520,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45442,9 +45531,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -45455,8 +45544,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45707,9 +45796,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -45719,9 +45808,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -45730,8 +45819,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45741,8 +45830,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45753,8 +45842,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45764,9 +45853,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -45776,8 +45865,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -45885,7 +45974,6 @@
Ranged
HasBountyValue
AbstractMonk
- CannotConvertHill
TradingPost
TownCenter
Lookout
@@ -46358,9 +46446,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -46372,9 +46460,9 @@
Bola
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -46383,8 +46471,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46394,8 +46482,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46408,8 +46496,8 @@
Bola
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46419,9 +46507,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -46433,8 +46521,8 @@
Bola
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46519,9 +46607,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -46532,9 +46620,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -46543,8 +46631,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46554,8 +46642,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46567,8 +46655,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46578,9 +46666,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -46591,8 +46679,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -46819,7 +46907,7 @@
ui\units\tlaloc_canoe_icon
ui\units\tlaloc_canoe_portrait
44046
- 44045
+ 27682
750.0000
750.0000
34.0000
@@ -46827,9 +46915,9 @@
RangedCombative
40.0000
4
- 50.0000
- 50.0000
- 400.0000
+ 40.0000
+ 40.0000
+ 300.0000
100.0000
1.0000
1.0000
@@ -46918,6 +47006,7 @@
100.000000
1.000000
GAIAEnemy
+ 1.250000
@@ -47160,6 +47249,7 @@
Surgeon
Priest
Envoy
+ Architect
NativeScout
SetGatherPointMilitary
Eject
@@ -47198,7 +47288,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -47256,6 +47346,7 @@
Military
AbstractArcher
AbstractLightInfantry
+ AbstractJunk
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -47862,7 +47953,6 @@
AbstractCavalryInfantry
HasBountyValue
AbstractMonk
- CannotConvertHill
TradingPost
TownCenter
Lookout
@@ -47957,7 +48047,7 @@
44163
44162
18.0000
- 1500.0000
+ 2000.0000
Gold
1.0000
@@ -48342,7 +48432,7 @@
1.0000
0.0000
land
- terrain\tree_grandcanyonbase.xml
+ terrain\tree_painted.xml
Wood
terrain\trees\tree_icon_64
terrain\trees\tree_icon_portrait
@@ -50964,6 +51054,7 @@
AbstractWagon
ConvertsHerds
CannotConvertHill
+ ValidIdleVillager
WarHut
Barracks
ArtilleryDepot
@@ -51513,7 +51604,7 @@
Arrow
RangedCombative
2.0000
- 25
+ 26
75.0000
0
@@ -51705,11 +51796,11 @@
ConvertsHerds
HasBountyValue
CountsTowardMilitaryScore
+ Maghrabi
Axeman
MercDove
General
GeneralBr
- GoldMiner
MercHoopThrowers
SaloonOutlawPistol
SaloonOutlawRifleman
@@ -51742,7 +51833,6 @@
ypMercIronTroop
BoneguardSwordsman
BoneguardRifleman
- Surgeon
SaloonWildWest
CollidesWithProjectiles
StartsAtFullEfficiency
@@ -51844,7 +51934,7 @@
1.500000
1.500000
1.250000
- 1.500000
+ 1.500000
RangedAttack
@@ -52032,7 +52122,7 @@
Hand
1.500000
1.500000
- 1.500000
+ 1.500000
1.500000
@@ -52046,7 +52136,7 @@
0.000000
0.000000
1.500000
- 1.500000
+ 1.500000
1.500000
@@ -52553,6 +52643,7 @@
Pillage
Rifling
BigHouseCoatlicue
+ BigWarrior
CollidesWithProjectiles
StartsAtFullEfficiency
Immoveable
@@ -52819,7 +52910,7 @@
bowCavalry.tactics
BowAttack
- 20.000000
+ 18.000000
Ranged
12.000000
1.500000
@@ -52838,7 +52929,7 @@
ChargeAttack
2.000000
- 10.000000
+ 9.000000
Hand
1.500000
4.000000
@@ -54816,6 +54907,7 @@
NatSharktoothBowman
NatTracker
ypNatSohei
+ CamelArcher
SaloonWildWest
SaloonOutlawPistol
SaloonOutlawRifleman
@@ -55654,6 +55746,7 @@
AbstractWagon
ConvertsHerds
CannotConvertHill
+ ValidIdleVillager
TradingPost
CollidesWithProjectiles
ApplyHandicapTraining
@@ -56249,9 +56342,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -56262,9 +56355,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -56273,8 +56366,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56284,8 +56377,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56297,8 +56390,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56308,9 +56401,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -56321,8 +56414,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56412,9 +56505,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -56425,9 +56518,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -56436,8 +56529,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56447,8 +56540,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56460,8 +56553,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56471,9 +56564,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -56484,8 +56577,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56575,9 +56668,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -56587,9 +56680,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -56598,8 +56691,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56609,8 +56702,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56621,8 +56714,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -56632,9 +56725,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -56644,8 +56737,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -57349,9 +57442,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -57363,9 +57456,9 @@
2.000000
Blowdart
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
@@ -57394,7 +57487,7 @@
14.0000
InvisibleProjectile
Civilian
- 30.0000
+ 45.0000
10
11.0000
11.0000
@@ -57471,6 +57564,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -57679,9 +57773,9 @@
0.440000
0.600000
0.600000
- 1.700000
- 1.700000
- 1.700000
+ 2.300000
+ 2.300000
+ 2.300000
HandAttack
@@ -58600,9 +58694,9 @@
1.500000
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -58612,10 +58706,10 @@
18.000000
1.500000
1.500000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -58623,9 +58717,9 @@
Hand
1.500000
1.500000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -58634,9 +58728,9 @@
Hand
1.500000
1.500000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -58648,8 +58742,8 @@
1.500000
1.500000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -58659,9 +58753,9 @@
1.500000
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -58671,9 +58765,9 @@
18.000000
1.500000
1.500000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -59190,7 +59284,6 @@
ConvertsHerds
AbstractMonk
AbstractJapaneseMonk
- CannotConvertHill
WarTent
TradingPost
TownCenter
@@ -59234,6 +59327,7 @@
4.000000
Hand
1.500000
+ 30.000000
3.000000
Hand
0.250000
@@ -59245,7 +59339,8 @@
DefendRangedAttack
8.000000
Ranged
- 1.500000
+ 3.000000
+ 30.000000
16.000000
3.000000
Ranged
@@ -59259,6 +59354,7 @@
4.000000
Hand
1.500000
+ 30.000000
3.000000
25.000000
KillingBlow
@@ -59283,6 +59379,7 @@
4.000000
Hand
1.500000
+ 30.000000
3.000000
25.000000
KillingBlow
@@ -59294,7 +59391,8 @@
8.000000
Ranged
16.000000
- 1.500000
+ 3.000000
+ 30.000000
0.250000
25.000000
KillingBlow
@@ -59313,6 +59411,7 @@
4.000000
Hand
1.500000
+ 30.000000
3.000000
25.000000
KillingBlow
@@ -59325,7 +59424,8 @@
8.000000
Ranged
16.000000
- 1.500000
+ 3.000000
+ 30.000000
0.250000
25.000000
KillingBlow
@@ -60136,9 +60236,9 @@
1.000000
GAIAEnemy
0.750000
- 0.750000
+ 0.750000
2.000000
- 1.500000
+ 1.500000
0.000000
0.000000
@@ -60153,9 +60253,9 @@
1.000000
GAIAEnemy
0.750000
- 0.750000
+ 0.750000
2.000000
- 1.500000
+ 1.500000
0.000000
0.000000
@@ -60177,9 +60277,9 @@
1.000000
GAIAEnemy
0.750000
- 0.750000
+ 0.750000
2.000000
- 1.500000
+ 1.500000
0.000000
0.000000
@@ -60240,7 +60340,6 @@
ConvertsHerds
AbstractMonk
AbstractIndianMonk
- CannotConvertHill
WarTent
TradingPost
TownCenter
@@ -60419,10 +60518,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -60432,10 +60531,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
+ 1.000000
MeleeHandAttack
@@ -60443,9 +60543,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -60454,9 +60554,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -60467,10 +60567,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
+ 1.000000
VolleyHandAttack
@@ -60478,10 +60579,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -60491,10 +60592,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
+ 1.000000
@@ -60576,10 +60678,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -60589,9 +60691,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -60600,8 +60702,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -60610,9 +60712,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -60623,8 +60725,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -60633,10 +60735,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -60646,8 +60748,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -61215,7 +61317,7 @@
30.0000
14.0000
14.0000
- 60.0000
+ 50.0000
100.0000
2
@@ -61259,16 +61361,15 @@
CannonAttack
10.000000
Siege
- 8.000000
+ 6.000000
34.000000
4.000000
20.000000
- 12.000000
+ 8.000000
1.000000
GAIAEnemy
- 12.000000
- 2.000000
- 6.000000
+ 6.000000
+ 2.500000
@@ -61408,7 +61509,6 @@
AbstractHandInfantry
AbstractChineseMonk
AbstractMonk
- CannotConvertHill
WarTent
TradingPost
TownCenter
@@ -61650,6 +61750,7 @@
CountsTowardMilitaryScore
HasBountyValue
ConvertsHerds
+ Maghrabi
Axeman
MercDove
General
@@ -61872,7 +61973,7 @@
50.0000
200.0000
1.0000
- 0
+ 1
LogicalTypeValidSabotage
LogicalTypeHandUnitsAutoAttack
@@ -62079,7 +62180,7 @@
ypNaginataRider
ypYabusame
xpArrowKnight
- xpEagleKnight
+ AbstractJunk
xpJaguarKnight
YPExaltedYabusame
YPDisciplinedNaginataRider
@@ -62661,6 +62762,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -62872,9 +62974,9 @@
0.340000
0.670000
0.500000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
HandAttack
@@ -63485,6 +63587,7 @@
NatMedicineMan
Imam
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -63522,7 +63625,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -63998,10 +64101,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -64010,10 +64113,10 @@
18.000000
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -64021,10 +64124,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
StaggerHandAttack
@@ -64032,10 +64135,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
StaggerRangedAttack
@@ -64045,9 +64148,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyHandAttack
@@ -64056,9 +64159,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -64067,10 +64170,10 @@
18.000000
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
@@ -64450,7 +64553,6 @@
HasBountyValue
AbstractHandInfantry
ConvertsHerds
- AbstractCoyoteMan
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -64855,7 +64957,7 @@
60815
60816
0
- Sufi
+ Aztecs
0.8900
0.8900
Mobile
@@ -65042,7 +65144,6 @@
AbstractRangedInfantry
AbstractCanSeeStealth
ConvertsHerds
- AbstractLightInfantry
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -65330,7 +65431,7 @@
units\asians\naval\atakabune\atakebune_icon_64
units\asians\naval\atakabune\atakebune_icon_portrait
61063
- 61062
+ 27682
2000.0000
2000.0000
24.0000
@@ -65339,10 +65440,10 @@
RangedCombative
30.0000
5
- 60.0000
- 60.0000
+ 65.0000
+ 65.0000
300.0000
- 300.0000
+ 350.0000
50
1
@@ -65405,12 +65506,13 @@
fluyt.tactics
RangedAttack
- 35.000000
+ 40.000000
Siege
20.000000
2.000000
- 70.000000
+ 80.000000
0.500000
+ 1.250000
1.000000
GAIAEnemy
@@ -65432,7 +65534,7 @@
units\asians\naval\fune\fune_icon_64
units\naval\fune_portrait
61071
- 61070
+ 25618
800.0000
800.0000
24.0000
@@ -65441,9 +65543,9 @@
RangedCombative
30.0000
5
- 40.0000
- 40.0000
- 300.0000
+ 30.0000
+ 30.0000
+ 200.0000
100.0000
1.0000
1.0000
@@ -65496,12 +65598,12 @@
caravel.tactics
BroadsideAttack
- 25.000000
+ 30.000000
Siege
20.000000
0.050000
- 50.000000
- 2.000000
+ 60.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -65512,12 +65614,20 @@
RangedAttack
- 40.000000
+ 50.000000
Siege
20.000000
1.000000
- 80.000000
+ 100.000000
0.500000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
1.000000
GAIAEnemy
@@ -65546,9 +65656,9 @@
HandCombative
10.0000
5
- 20.0000
- 20.0000
- 100.0000
+ 25.0000
+ 25.0000
+ 150.0000
100.0000
1
@@ -65929,10 +66039,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -65942,10 +66052,10 @@
20.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -65953,9 +66063,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -65964,9 +66074,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -65978,8 +66088,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -65989,9 +66099,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -66001,9 +66111,9 @@
20.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -66259,6 +66369,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -67048,7 +67159,7 @@
units\asians\naval\wokou_junk\wokou_junk_icon
units\asians\naval\wokou_junk\wokou_junk_icon_portrait
61665
- 61664
+ 25618
1500.0000
1500.0000
34.0000
@@ -67057,8 +67168,8 @@
RangedCombative
40.0000
4
- 80.0000
- 80.0000
+ 60.0000
+ 60.0000
400.0000
50
1
@@ -67118,7 +67229,7 @@
30.000000
0.050000
80.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -67130,9 +67241,16 @@
2.000000
140.000000
0.500000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
1.000000
GAIAEnemy
- 3.000000
@@ -67491,7 +67609,7 @@
1.500000
2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -67502,7 +67620,7 @@
1.500000
2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -67511,7 +67629,7 @@
Hand
1.500000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -67521,7 +67639,7 @@
Hand
1.500000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -67532,7 +67650,7 @@
18.000000
1.500000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -67543,7 +67661,7 @@
2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -67553,7 +67671,7 @@
1.500000
2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -68167,7 +68285,6 @@
HasBountyValue
Ranged
AbstractSiegeTrooper
- AbstractLightInfantry
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -69121,7 +69238,7 @@
units\asians\naval\war_junk\war_junk_icon_64
units\asians\naval\war_junk\war_junk_icon_portrait
62204
- 62203
+ 27710
800.0000
800.0000
26.0000
@@ -69130,9 +69247,9 @@
RangedCombative
30.0000
5
- 40.0000
- 40.0000
- 300.0000
+ 30.0000
+ 30.0000
+ 200.0000
100.0000
1.0000
1.0000
@@ -69190,7 +69307,7 @@
20.000000
0.050000
70.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -69207,6 +69324,14 @@
1.500000
100.000000
0.500000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
1.000000
GAIAEnemy
@@ -69454,6 +69579,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
titan.tactics
@@ -70218,8 +70344,8 @@
1512
62645
- 2.0000
- 2.0000
+ 1.0000
+ 1.0000
5.0000
2.0000
4.0000
@@ -72185,6 +72311,7 @@
xpMedicineManAztec
ypDaimyoRegicide
Envoy
+ Architect
NativeScout
SetGatherPointMilitary
Eject
@@ -72225,7 +72352,7 @@
GAIAEnemy
1.500000
0.500000
- 1.500000
+ 1.250000
RangedAttack
@@ -72237,7 +72364,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -72359,7 +72486,6 @@
AbstractCanSeeStealth
AbstractMonk
AbstractIndianMonk
- CannotConvertHill
WarTent
TradingPost
TownCenter
@@ -72515,7 +72641,6 @@
Hero
AbstractInfantry
AbstractArcher
- CannotConvertHill
WarTent
TradingPost
TownCenter
@@ -72558,6 +72683,7 @@
4.000000
Hand
1.500000
+ 30.000000
3.000000
Hand
0.250000
@@ -72569,7 +72695,8 @@
DefendRangedAttack
8.000000
Ranged
- 1.500000
+ 3.000000
+ 30.000000
16.000000
3.000000
Ranged
@@ -72583,6 +72710,7 @@
4.000000
Hand
1.500000
+ 30.000000
3.000000
25.000000
KillingBlow
@@ -72607,6 +72735,7 @@
4.000000
Hand
1.500000
+ 30.000000
3.000000
25.000000
KillingBlow
@@ -72615,14 +72744,15 @@
StaggerRangedAttack
- 3.000000
8.000000
Ranged
16.000000
- 1.500000
+ 3.000000
+ 30.000000
0.250000
25.000000
KillingBlow
+ 3.000000
0.800000
@@ -72634,26 +72764,28 @@
VolleyHandAttack
- 0.800000
4.000000
Hand
1.500000
+ 30.000000
3.000000
25.000000
KillingBlow
0.250000
+ 0.800000
VolleyRangedAttack
- 0.800000
3.000000
8.000000
Ranged
16.000000
- 1.500000
+ 3.000000
+ 30.000000
0.250000
25.000000
KillingBlow
+ 0.800000
@@ -72759,6 +72891,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -72968,9 +73101,9 @@
0.340000
0.670000
0.500000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
HandAttack
@@ -73050,7 +73183,7 @@
6.0000
6.0000
0.0000
- 150.0000
+ 250.0000
Wood
8
@@ -73324,8 +73457,8 @@
units\cavalry\dragoon\dragoon_portrait
63503
63502
- 210.0000
- 210.0000
+ 200.0000
+ 200.0000
16.0000
InvisibleProjectile
RangedCombative
@@ -73390,12 +73523,12 @@
12.000000
3.000000
3.000000
- 2.750000
+ 2.500000
2.000000
MeleeHandAttack
- 2.750000
+ 2.500000
11.000000
Hand
1.500000
@@ -73404,7 +73537,7 @@
StaggerRangedAttack
- 2.750000
+ 2.500000
22.000000
Ranged
12.000000
@@ -74726,7 +74859,7 @@
units\asians\naval\fuchuan\fuchuan_icon_64
units\asians\naval\fuchuan\fuchuan_icon_portrait
63613
- 63612
+ 27682
2500.0000
2500.0000
34.0000
@@ -74735,10 +74868,10 @@
RangedCombative
40.0000
3
- 120.0000
- 120.0000
- 450.0000
- 750.0000
+ 100.0000
+ 100.0000
+ 400.0000
+ 600.0000
75
2
@@ -74798,7 +74931,7 @@
28.000000
0.050000
100.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -74810,6 +74943,7 @@
2.000000
180.000000
0.500000
+ 1.250000
1.000000
GAIAEnemy
@@ -75323,9 +75457,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -75336,9 +75470,9 @@
3.000000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -75347,8 +75481,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -75358,8 +75492,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -75371,8 +75505,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -75382,9 +75516,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -75395,8 +75529,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -77355,9 +77489,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -77367,9 +77501,9 @@
18.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
@@ -77509,8 +77643,6 @@
ValidIdleVillager
AbstractFishingBoat
ConvertsHerds
- Dock
- YPDockAsian
TieToWaterSurface
CollidesWithProjectiles
ApplyHandicapTraining
@@ -77988,7 +78120,7 @@
units\asians\naval\catamaran\catamaran_icon
units\asians\naval\catamaran\catamaran_icon_portrait
64514
- 64513
+ 25618
220.0000
220.0000
24.0000
@@ -77996,8 +78128,8 @@
Civilian
10.0000
15
- 10.0000
- 10.0000
+ 12.0000
+ 12.0000
125.0000
1.0000
20
@@ -78820,6 +78952,7 @@
WallConnector
Bank
Church
+ BasilicaIt
WarHut
Barracks
Stable
@@ -79028,9 +79161,9 @@
0.500000
0.670000
0.500000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
HandAttack
@@ -83742,6 +83875,7 @@
Surgeon
Priest
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -83777,12 +83911,12 @@
24.000000
3.000000
160.000000
- 0.250000
+ 0.300000
3.000000
GAIAEnemy
1.500000
0.500000
- 1.500000
+ 1.250000
RangedAttack
@@ -83792,9 +83926,9 @@
24.000000
2.000000
0.300000
- 1.700000
+ 1.500000
0.500000
- 1.700000
+ 1.250000
@@ -86013,9 +86147,9 @@
1.750000
1.000000
GAIAEnemy
- 1.500000
+ 1.500000
0.750000
- 0.750000
+ 0.750000
2.000000
20.000000
2.000000
@@ -86033,9 +86167,9 @@
1.750000
1.000000
GAIAEnemy
- 1.500000
+ 1.500000
0.750000
- 0.750000
+ 0.750000
2.000000
20.000000
2.000000
@@ -86063,9 +86197,9 @@
1.750000
1.000000
GAIAEnemy
- 1.500000
+ 1.500000
0.750000
- 0.750000
+ 0.750000
2.000000
20.000000
2.000000
@@ -86637,7 +86771,7 @@
44.0000
MortarShell
RangedCombative
- 45.0000
+ 50.0000
50.0000
50.0000
100.0000
@@ -86692,20 +86826,8 @@
2.500000
2.000000
GAIAEnemy
- 1.500000
0.500000
-
- HandAttack
- 10.000000
- Hand
- 1.500000
- 1.500000
- 20.000000
- 1.000000
- Enemy
- 0.000000
-
1815
@@ -87381,7 +87503,7 @@
1824
780762
65431
- 8
+ 6
0.4900
0.4900
Body
@@ -87390,8 +87512,8 @@
land
18.0000
units\infantry_ranged\skirmisher\skirmisher.xml
- units\asians\consulate\french_armies\french_company_icon_64
- units\asians\consulate\french_armies\french_company_icon_64
+ ui\french_1
+ ui\french_1
780750
65428
400.0000
@@ -87531,7 +87653,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -87544,10 +87666,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
+ 1.000000
MeleeHandAttack
@@ -87555,7 +87678,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -87566,7 +87689,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -87579,10 +87702,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
+ 1.000000
VolleyHandAttack
@@ -87590,7 +87714,7 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
@@ -87603,10 +87727,11 @@
16.000000
3.000000
2.000000
- 2.000000
+ 2.000000
0.750000
0.750000
1.250000
+ 1.000000
@@ -88125,8 +88250,8 @@
0.7900
Mobile
BloodSplat
- 6.5000
- 8.5000
+ 6.2500
+ 8.2500
land
18.0000
units\asians\japanese\daimyo_Kiyomasa\daimyo_kiyomasa_horse.xml
@@ -88247,8 +88372,8 @@
0.7900
Mobile
BloodSplat
- 6.5000
- 8.5000
+ 6.2500
+ 8.2500
land
18.0000
units\asians\japanese\daimyo_mototada\daimyo_mototada_horse.xml
@@ -88369,8 +88494,8 @@
0.7900
Mobile
BloodSplat
- 6.5000
- 8.5000
+ 6.2500
+ 8.2500
land
18.0000
units\asians\japanese\daimyo_Masamune\daimyo_masamune_horse.xml
@@ -88593,7 +88718,7 @@
units\asians\naval\tekkousen\tekkousen_icon_64
units\asians\naval\tekkousen\tekkousen_icon_portrait
65599
- 65598
+ 27682
2000.0000
2000.0000
34.0000
@@ -88602,10 +88727,10 @@
RangedCombative
40.0000
3
- 100.0000
- 100.0000
- 500.0000
- 500.0000
+ 80.0000
+ 80.0000
+ 400.0000
+ 400.0000
50
2
@@ -88659,7 +88784,7 @@
28.000000
0.050000
70.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -88671,6 +88796,7 @@
2.000000
180.000000
0.500000
+ 1.250000
1.000000
GAIAEnemy
@@ -88684,8 +88810,8 @@
0.4900
Body
BloodSplat
- 6.0000
- 8.0000
+ 5.5000
+ 7.5000
land
18.0000
units\asians\consulate\redolero\redolero.xml
@@ -88695,8 +88821,8 @@
units\infantry\redolero\redolero_portrait
65769
65768
- 135.0000
- 135.0000
+ 145.0000
+ 145.0000
12.0000
HandCombative
30.0000
@@ -88799,8 +88925,8 @@
units\infantry_ranged\schutze\schutze_portrait
77908
25669
- 160.0000
- 160.0000
+ 165.0000
+ 165.0000
16.0000
InvisibleProjectile
RangedCombative
@@ -89472,8 +89598,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -89485,8 +89611,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -89496,8 +89622,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -89507,8 +89633,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -89520,8 +89646,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -89531,8 +89657,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -89544,8 +89670,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -92007,7 +92133,7 @@
1864
780761
65855
- 18
+ 16
0.4900
0.4900
Body
@@ -92016,8 +92142,8 @@
land
18.0000
units\infantry_ranged\skirmisher\skirmisher.xml
- units\asians\consulate\french_armies\french_force_icon_64
- units\asians\consulate\french_armies\french_force_icon_64
+ ui\french_2
+ ui\french_2
780751
65852
800.0000
@@ -92077,7 +92203,7 @@
1865
780763
65859
- 27
+ 20
0.4900
0.4900
Body
@@ -92086,8 +92212,8 @@
land
18.0000
units\infantry_ranged\skirmisher\skirmisher.xml
- units\asians\consulate\french_armies\french_army_icon_64
- units\asians\consulate\french_armies\french_army_icon_64
+ ui\french_3
+ ui\french_3
65857
65856
1200.0000
@@ -92785,8 +92911,8 @@
units\cavalry\dragoon\dragoon_portrait
65887
65886
- 210.0000
- 210.0000
+ 200.0000
+ 200.0000
16.0000
InvisibleProjectile
RangedCombative
@@ -92851,12 +92977,12 @@
12.000000
3.000000
3.000000
- 2.750000
+ 2.500000
2.000000
MeleeHandAttack
- 2.750000
+ 2.500000
11.000000
Hand
1.500000
@@ -92865,7 +92991,7 @@
StaggerRangedAttack
- 2.750000
+ 2.500000
22.000000
Ranged
12.000000
@@ -93063,8 +93189,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -93076,8 +93202,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -93087,8 +93213,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -93098,8 +93224,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -93111,8 +93237,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -93122,8 +93248,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -93135,8 +93261,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -94020,7 +94146,7 @@
44.0000
MortarShell
RangedCombative
- 38.0000
+ 40.0000
40.0000
40.0000
100.0000
@@ -94071,7 +94197,7 @@
40.000000
6.000000
200.000000
- 2.000000
+ 1.750000
3.750000
0.750000
2.000000
@@ -95853,9 +95979,9 @@
0.600000
0.500000
1.500000
- 1.500000
- 1.500000
- 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
HandAttack
@@ -99680,6 +99806,7 @@
UnitClass
Military
Unit
+ Mercenary
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -100287,7 +100414,6 @@
AbstractRangedInfantry
AbstractCanSeeStealth
ConvertsHerds
- AbstractLightInfantry
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -102571,7 +102697,6 @@
Unit
Hero
AbstractInfantry
- CannotConvertHill
WarTent
TradingPost
TownCenter
@@ -102891,7 +103016,7 @@
6.0000
6.0000
0.0000
- 150.0000
+ 300.0000
Wood
8
@@ -102940,7 +103065,7 @@
6.0000
6.0000
0.0000
- 150.0000
+ 300.0000
Wood
8
@@ -102989,7 +103114,7 @@
6.0000
6.0000
0.0000
- 150.0000
+ 250.0000
Wood
8
@@ -103038,7 +103163,7 @@
6.0000
6.0000
0.0000
- 150.0000
+ 300.0000
Wood
8
@@ -103087,7 +103212,7 @@
6.0000
6.0000
0.0000
- 150.0000
+ 300.0000
Wood
8
@@ -103136,7 +103261,7 @@
6.0000
6.0000
0.0000
- 150.0000
+ 250.0000
Wood
8
@@ -104591,10 +104716,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
20.000000
2.000000
CriticalAttack
@@ -104607,10 +104732,10 @@
20.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
0.750000
- 0.750000
+ 0.750000
20.000000
2.000000
CriticalAttack
@@ -104621,9 +104746,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
20.000000
2.000000
@@ -104635,9 +104760,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
20.000000
2.000000
@@ -104652,8 +104777,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
20.000000
2.000000
@@ -104666,9 +104791,9 @@
1.500000
2.000000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
20.000000
2.000000
CriticalAttack
@@ -104681,9 +104806,9 @@
20.000000
3.000000
2.000000
- 2.000000
+ 2.000000
2.000000
- 0.750000
+ 0.750000
0.750000
20.000000
2.000000
@@ -106556,7 +106681,7 @@
DefendHandAttack
1.500000
- 1.500000
+ 1.500000
15.000000
Hand
1.500000
@@ -106564,7 +106689,7 @@
DefendRangedAttack
- 1.500000
+ 1.500000
30.000000
Ranged
2.000000
@@ -106575,7 +106700,7 @@
MeleeHandAttack
- 1.500000
+ 1.500000
15.000000
Hand
1.500000
@@ -106584,7 +106709,7 @@
StaggerHandAttack
- 1.500000
+ 1.500000
15.000000
Hand
1.500000
@@ -106600,7 +106725,7 @@
20.000000
3.000000
2.000000
- 1.500000
+ 1.500000
VolleyHandAttack
@@ -106609,11 +106734,11 @@
Hand
1.500000
2.000000
- 1.500000
+ 1.500000
VolleyRangedAttack
- 1.500000
+ 1.500000
30.000000
Ranged
2.000000
@@ -107441,6 +107566,7 @@
Military
UnitClass
Unit
+ Mercenary
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -107610,7 +107736,7 @@
Hand
1.500000
2.000000
- 1.500000
+ 1.500000
1.500000
@@ -107620,7 +107746,7 @@
18.000000
1.500000
2.000000
- 1.500000
+ 1.500000
1.500000
@@ -107629,7 +107755,7 @@
Hand
1.500000
2.000000
- 1.500000
+ 1.500000
1.500000
@@ -107638,7 +107764,7 @@
Hand
1.500000
2.000000
- 1.500000
+ 1.500000
1.500000
@@ -107649,7 +107775,7 @@
1.500000
2.000000
1.500000
- 1.500000
+ 1.500000
VolleyHandAttack
@@ -107658,7 +107784,7 @@
1.500000
2.000000
1.500000
- 1.500000
+ 1.500000
VolleyRangedAttack
@@ -107667,7 +107793,7 @@
18.000000
1.500000
2.000000
- 1.500000
+ 1.500000
1.500000
@@ -107836,7 +107962,6 @@
Ranged
AbstractRangedInfantry
AbstractCanSeeStealth
- AbstractLightInfantry
ConvertsHerds
CollidesWithProjectiles
ApplyHandicapTraining
@@ -108030,7 +108155,7 @@
1.500000
1.500000
1.250000
- 1.500000
+ 1.500000
RangedAttack
@@ -108218,7 +108343,7 @@
Hand
1.500000
1.500000
- 1.500000
+ 1.500000
1.500000
@@ -108232,7 +108357,7 @@
0.000000
0.000000
1.500000
- 1.500000
+ 1.500000
1.500000
@@ -108499,7 +108624,7 @@
Hand
1.500000
1.500000
- 1.500000
+ 1.500000
1.500000
@@ -108509,7 +108634,7 @@
18.000000
3.000000
1.500000
- 1.500000
+ 1.500000
1.500000
@@ -109273,6 +109398,7 @@
CannotConvertHill
CountsTowardEconomicScore
HasBountyValue
+ ValidIdleVillager
WarHut
Barracks
ArtilleryDepot
@@ -111369,6 +111495,7 @@
Tracked
VisibleUnderFog
NotSelectable
+ NonCollideable
Delete
TrampleHandAttack
@@ -112312,7 +112439,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -112342,7 +112469,7 @@
20.0000
20.0000
10
- 100.0000
+ 50.0000
Dynamite
RangedCombative
1.0000
@@ -112450,8 +112577,8 @@
HandCombative
10.0000
5
- 20.0000
- 20.0000
+ 25.0000
+ 25.0000
150.0000
100.0000
2
@@ -112855,6 +112982,8 @@
Unit
UnitClass
Economic
+ ConvertsHerds
+ CannotConvertHill
CollidesWithProjectiles
ApplyHandicapTraining
ObscuredByUnits
@@ -112882,9 +113011,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_default.xml
@@ -112893,15 +113022,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
25.0000
- 5
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
100.0000
0
@@ -113355,6 +113484,7 @@
NatMedicineMan
Imam
Envoy
+ Architect
NativeScout
SetUnitAsHomeCityGatherPoint
Delete
@@ -113451,6 +113581,8 @@
Economic
Resource
Food
+ ConvertsHerds
+ CannotConvertHill
ShowTactics
CollidesWithProjectiles
ApplyHandicapTraining
@@ -113522,6 +113654,8 @@
Economic
Resource
Food
+ ConvertsHerds
+ CannotConvertHill
ShowTactics
CollidesWithProjectiles
ApplyHandicapTraining
@@ -113591,6 +113725,8 @@
Economic
Resource
Food
+ ConvertsHerds
+ CannotConvertHill
ShowTactics
CollidesWithProjectiles
ApplyHandicapTraining
@@ -113661,6 +113797,8 @@
Economic
Resource
Food
+ ConvertsHerds
+ CannotConvertHill
ShowTactics
CollidesWithProjectiles
ApplyHandicapTraining
@@ -114720,8 +114858,8 @@
units\infantry_ranged\schutze\schutze_portrait
77908
25669
- 160.0000
- 160.0000
+ 165.0000
+ 165.0000
16.0000
InvisibleProjectile
RangedCombative
@@ -114906,9 +115044,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultb.xml
@@ -114917,14 +115055,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -114967,9 +115106,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultf.xml
@@ -114978,14 +115117,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -115028,9 +115168,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultd.xml
@@ -115039,14 +115179,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -115089,9 +115230,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultg.xml
@@ -115100,14 +115241,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -115150,9 +115292,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaulto.xml
@@ -115161,14 +115303,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -115211,9 +115354,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultr.xml
@@ -115222,14 +115365,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -115272,9 +115416,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaults.xml
@@ -115283,14 +115427,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -115333,9 +115478,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultp.xml
@@ -115344,14 +115489,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -115842,9 +115988,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultus.xml
@@ -115853,15 +115999,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
25.0000
- 5
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
100.0000
0
@@ -115905,9 +116051,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_default.xml
@@ -115916,15 +116062,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
25.0000
- 5
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
100.0000
0
@@ -116508,9 +116654,9 @@
1.500000
2.250000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -116521,9 +116667,9 @@
3.000000
2.250000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -116532,8 +116678,8 @@
1.500000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -116543,8 +116689,8 @@
1.500000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -116556,8 +116702,8 @@
3.000000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -116567,9 +116713,9 @@
1.500000
2.250000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -116580,8 +116726,8 @@
3.000000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -116846,7 +116992,7 @@
units\asians\naval\wokou_junk\wokou_junk_icon
units\asians\naval\wokou_junk\wokou_junk_icon_portrait
78022
- 78023
+ 25618
800.0000
800.0000
26.0000
@@ -116855,9 +117001,9 @@
RangedCombative
30.0000
5
- 40.0000
- 40.0000
- 300.0000
+ 30.0000
+ 30.0000
+ 200.0000
100.0000
1.0000
1.0000
@@ -116915,7 +117061,7 @@
20.000000
0.050000
80.000000
- 2.000000
+ 2.000000
1.000000
GAIAEnemy
@@ -116932,6 +117078,14 @@
2.000000
160.000000
0.500000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
+ 1.250000
1.000000
GAIAEnemy
@@ -117470,9 +117624,9 @@
1.500000
2.250000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -117483,9 +117637,9 @@
3.000000
2.250000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -117494,8 +117648,8 @@
1.500000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -117505,8 +117659,8 @@
1.500000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -117518,8 +117672,8 @@
3.000000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -117529,9 +117683,9 @@
1.500000
2.250000
2.000000
- 2.000000
+ 2.000000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -117542,8 +117696,8 @@
3.000000
2.250000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -117906,8 +118060,8 @@
0.7900
Mobile
BloodSplat
- 6.8000
- 8.8000
+ 6.7500
+ 8.7500
land
18.0000
units\cavalry\mounted_crossbowman\mounted_crossbowman_horse.xml
@@ -117925,7 +118079,7 @@
36.0000
16.0000
16.0000
- 90.0000
+ 100.0000
60.0000
2
@@ -118692,7 +118846,7 @@
CannonAttack
50.000000
Siege
- 1.000000
+ 2.000000
24.000000
6.000000
100.000000
@@ -118775,7 +118929,7 @@
CannonAttack
50.000000
Siege
- 1.000000
+ 2.000000
24.000000
6.000000
100.000000
@@ -118861,7 +119015,7 @@
CannonAttack
50.000000
Siege
- 1.000000
+ 2.000000
24.000000
6.000000
100.000000
@@ -118931,7 +119085,7 @@
ypMercFlailiphant
ypSiegeElephant
xpArrowKnight
- xpEagleKnight
+ AbstractJunk
xpJaguarKnight
ypMongolianArmy
ypBlackFlagArmy
@@ -119020,7 +119174,7 @@
GAIAEnemy
1.500000
0.500000
- 1.500000
+ 1.250000
RangedAttack
@@ -119032,7 +119186,7 @@
0.250000
1.500000
0.500000
- 1.500000
+ 1.250000
@@ -121639,7 +121793,7 @@
38
77850
77850
- 1
+ 2
0.7900
0.7900
Mobile
@@ -121911,8 +122065,6 @@
ValidIdleVillager
AbstractFishingBoat
ConvertsHerds
- Dock
- YPDockAsian
TieToWaterSurface
CollidesWithProjectiles
DontRotateObstruction
@@ -122402,6 +122554,7 @@
Mill
LivestockPen
Church
+ BasilicaIt
Arsenal
Plantation
CollidesWithProjectiles
@@ -123356,9 +123509,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultit.xml
@@ -123367,14 +123520,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -123539,7 +123693,6 @@
5
40.0000
40.0000
- 200.0000
1.0000
1.0000
50
@@ -123831,6 +123984,7 @@
Mill
LivestockPen
Church
+ BasilicaIt
ArtilleryDepot
Arsenal
Plantation
@@ -124264,9 +124418,9 @@
0.4900
0.4900
Protected
- 1
- 4.5000
- 5.5000
+ 0
+ 4.0000
+ 6.0000
land
18.0000
units\squad\flag_bearer\flag_bearer_defaultsw.xml
@@ -124275,14 +124429,15 @@
units\squad\flag_bearer\flag_bearer_icon
units\squad\flag_bearer\flag_bearer_portrait
77935
- 25632
+ 77938
100.0000
100.0000
- 26.0000
+ 16.0000
Passive
30.0000
- 5.0000
- 5.0000
+ 1
+ 10.0000
+ 10.0000
0
LogicalTypeHealed
@@ -124523,7 +124678,7 @@
1859
781200
781200
- 12
+ 15
0.4900
0.4900
Body
@@ -124544,7 +124699,7 @@
120.0000
120.0000
400.0000
- 1
+ 2
LogicalTypeHealed
LogicalTypeValidSharpshoot
@@ -124858,10 +125013,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
0.750000
- 0.750000
+ 0.750000
DefendRangedAttack
@@ -124871,10 +125026,10 @@
16.000000
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
0.750000
- 0.750000
+ 0.750000
MeleeHandAttack
@@ -124882,9 +125037,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -124893,9 +125048,9 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -124906,9 +125061,9 @@
16.000000
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -124917,10 +125072,10 @@
Hand
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
0.750000
- 0.750000
+ 0.750000
VolleyRangedAttack
@@ -124930,9 +125085,9 @@
16.000000
1.500000
2.000000
- 2.000000
+ 2.000000
1.250000
- 0.750000
+ 0.750000
0.750000
@@ -124963,8 +125118,8 @@
Passive
40.0000
1
- 52.0000
- 52.0000
+ 20.0000
+ 20.0000
200.0000
0
@@ -124987,6 +125142,8 @@
CannotConvertHill
Factory
FortFrontier
+ TownCenter
+ TradingPost
CollidesWithProjectiles
ApplyHandicapTraining
CorpseDecays
@@ -125098,8 +125255,8 @@
0.4900
Ranged
BloodSplat
- 4.5000
- 6.5000
+ 5.5000
+ 5.5000
land
18.0000
units\infantry_ranged\coutelier\coutelier.xml
@@ -125109,8 +125266,8 @@
units\infantry_ranged\coutelier\coutelier_portrait
781165
25658
- 300.0000
- 300.0000
+ 240.0000
+ 240.0000
20.0000
Knife
RangedCombative
@@ -125134,17 +125291,18 @@
LogicalTypeHandUnitsAttack
LogicalTypeRangedUnitsAttack
LogicalTypeMinimapFilterMilitary
- ConvertsHerds
- AbstractRangedInfantry
- AbstractCavalryInfantry
- CountsTowardMilitaryScore
HasBountyValue
Ranged
- AbstractGunpowderTrooper
+ CountsTowardMilitaryScore
+ AbstractCavalryInfantry
+ ConvertsHerds
+ AbstractRangedInfantry
+ Unit
UnitClass
Military
- Unit
- AbstractInfantry
+ AbstractArcher
+ AbstractLightInfantry
+ AbstractJunk
Mercenary
CollidesWithProjectiles
ApplyHandicapTraining
@@ -125169,86 +125327,68 @@
15.000000
Hand
1.500000
- 2.000000
- 2.000000
- 2.000000
- 0.750000
- 0.750000
+ 3.000000
+ 2.000000
DefendRangedAttack
30.000000
Ranged
2.000000
- 16.000000
+ 12.000000
2.000000
Knife
- 2.000000
- 2.000000
- 2.000000
- 0.750000
- 0.750000
+ 3.000000
+ 2.000000
+ 0.500000
MeleeHandAttack
15.000000
Hand
1.500000
- 2.000000
- 2.000000
- 2.000000
- 0.750000
- 0.750000
+ 3.000000
+ 2.000000
StaggerHandAttack
15.000000
Hand
1.500000
- 2.000000
- 2.000000
- 2.000000
- 0.750000
- 0.750000
+ 3.000000
+ 2.000000
StaggerRangedAttack
30.000000
Ranged
2.000000
- 16.000000
+ 12.000000
2.000000
Knife
- 2.000000
- 2.000000
- 2.000000
- 0.750000
- 0.750000
+ 3.000000
+ 2.000000
+ 0.500000
VolleyHandAttack
15.000000
Hand
1.500000
- 2.000000
- 2.000000
- 2.000000
- 0.750000
- 0.750000
+ 3.000000
+ 2.000000
VolleyRangedAttack
30.000000
Ranged
2.000000
- 16.000000
+ 12.000000
2.000000
Knife
- 2.000000
- 2.000000
- 2.000000
- 0.750000
- 0.750000
+ 3.000000
+ 2.000000
+ 0.500000
@@ -125688,11 +125828,11 @@
6.5000
land
18.0000
- units\asians\consulate\skirmisher\skirmisher.xml
+ units\infantry_ranged\skarp\skarp.xml
Flesh
dude
- units\infantry_ranged\skirmisher\skirmisher_icon
- units\infantry_ranged\skirmisher\skirmisher_portrait
+ units\infantry_ranged\skarp\skarp_icon
+ units\infantry_ranged\skarp\skarp_portrait
65797
65796
125.0000
@@ -125757,8 +125897,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -125770,8 +125910,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -125781,8 +125921,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -125792,8 +125932,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -125805,8 +125945,8 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -125816,8 +125956,8 @@
1.500000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
@@ -125829,19 +125969,19 @@
3.000000
2.000000
2.000000
- 2.000000
- 0.750000
+ 2.000000
+ 0.750000
0.750000
299
781262
- 0.4900
- 0.4900
+ 0.6900
+ 0.6900
5.0000
- 2.0000
- 4.0000
+ 4.5000
+ 6.5000
land
18.0000
4
@@ -125894,4 +126034,1165 @@
0.070000
+
+ 1812
+ 780991
+ 780991
+ 5
+ 0.9900
+ 0.9900
+ Protected
+ BloodSplat
+ 4.0000
+ 6.0000
+ land
+ 3.0000
+ units\asians\consulate\falconet\falconet.xml
+ Wood
+ units\artillery\falconet\falconet_icon_64x64
+ units\artillery\falconet\falconet_portrait
+ 65381
+ 65380
+ 200.0000
+ 200.0000
+ 30.0000
+ Cannonball
+ RangedCombative
+ 45.0000
+ 50.0000
+ 50.0000
+ 100.0000
+ 400.0000
+ 2
+
+ LogicalTypeHealed
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ AbstractConsulateSiegeFortress
+ ConvertsHerds
+ HasBountyValue
+ Ranged
+ CountsTowardMilitaryScore
+ Military
+ UnitClass
+ Unit
+ AbstractArtillery
+ RotateInPlace
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ ConstrainOrientation
+ OrientUnitWithGround
+ Tracked
+ Patrol
+ Stop
+ Garrison
+ Delete
+ Tactic4
+ Tactic3
+ falconet.tactics
+
+ CannonAttack
+ 100.000000
+ Siege
+ 2.000000
+ 26.000000
+ 4.000000
+ 200.000000
+ 3.000000
+ 3.000000
+ GAIAEnemy
+ 2.000000
+ 3.000000
+ 0.500000
+
+
+
+ 42
+ 781224
+ 781224
+ 1
+ 0.4900
+ 0.4900
+ Ranged
+ BloodSplat
+ 4.5000
+ 6.5000
+ land
+ 18.0000
+ units\infantry_ranged\skarp\skarps.xml
+ Flesh
+ dude
+ units\infantry_ranged\skarp\skarp_icon
+ units\infantry_ranged\skarp\skarp_portrait
+ 65797
+ 65796
+ 125.0000
+ 125.0000
+ 26.0000
+ InvisibleProjectile
+ RangedCombative
+ 33.0000
+ 12.0000
+ 12.0000
+ 50.0000
+ 65.0000
+ 2
+
+ LogicalTypeHealed
+ LogicalTypeValidSharpshoot
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeScout
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ HasBountyValue
+ AbstractGunpowderTrooper
+ Ranged
+ CountsTowardMilitaryScore
+ AbstractCavalryInfantry
+ AbstractRangedInfantry
+ ConvertsHerds
+ AbstractConsulateUnit
+ UnitClass
+ Military
+ Unit
+ AbstractInfantry
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ Tracked
+ Patrol
+ Stop
+ Garrison
+ Delete
+ rifleman.tactics
+
+ BuildingAttack
+ 12.000000
+ Siege
+ 3.000000
+
+
+ DefendHandAttack
+ 6.000000
+ Hand
+ 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
+ 0.750000
+ 0.750000
+
+
+ DefendRangedAttack
+ 15.000000
+ Ranged
+ 2.000000
+ 22.000000
+ 3.000000
+ 2.000000
+ 2.000000
+ 2.000000
+ 0.750000
+ 0.750000
+
+
+ MeleeHandAttack
+ 6.000000
+ Hand
+ 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
+ 0.750000
+ 0.750000
+
+
+ StaggerHandAttack
+ 6.000000
+ Hand
+ 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
+ 0.750000
+ 0.750000
+
+
+ StaggerRangedAttack
+ 15.000000
+ Ranged
+ 2.000000
+ 22.000000
+ 3.000000
+ 2.000000
+ 2.000000
+ 2.000000
+ 0.750000
+ 0.750000
+
+
+ VolleyHandAttack
+ 6.000000
+ Hand
+ 1.500000
+ 2.000000
+ 2.000000
+ 2.000000
+ 0.750000
+ 0.750000
+
+
+ VolleyRangedAttack
+ 15.000000
+ Ranged
+ 2.000000
+ 22.000000
+ 3.000000
+ 2.000000
+ 2.000000
+ 2.000000
+ 0.750000
+ 0.750000
+
+
+
+ 10
+ 780924
+ 780924
+ 1.5900
+ 1.5900
+ Ranged
+ 8.5000
+ 10.5000
+ water
+ 4.0000
+ units\naval\privateer\privateerex.xml
+ Wood
+ house
+ units\naval\privateer\privateer_icon_64x64
+ units\naval\privateer\privateer_icon_portrait
+ 780925
+ 780926
+ 850.0000
+ 850.0000
+ 26.0000
+ Cannonball
+ 18.0000
+ RangedCombative
+ 30.0000
+ 5
+ 40.0000
+ 40.0000
+ 1.0000
+ 1.0000
+ 50
+ 1
+
+
+ LogicalTypeNavalMilitary
+ LogicalTypeValidSabotage
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeShipsAndBuildings
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ AbstractWarShip
+ CountsTowardMilitaryScore
+ Ranged
+ HasBountyValue
+ Ship
+ Transport
+ Military
+ UnitClass
+ Unit
+ ConvertsHerds
+ Hero
+ Dock
+ YPDockAsian
+ HeroName1
+ HasGatherPoint
+ TieToWaterSurface
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ DecalStickToWaterSurface
+ NoFadeOnDeath
+ FadeOutDecalOnDeath
+ NoBloodOnDeath
+ AllowAutoGarrison
+ ObscuresUnits
+ ForceBuildingData
+ NavalUnit
+ Tracked
+ KnockoutDeath
+ NotDeleteable
+ LogicalTypeGarrisonInShips
+ Patrol
+ Stop
+ Delete
+ Abilities
+ Eject
+ SetGatherPointMilitary
+ caravelex.tactics
+
+ BroadsideAttack
+ 40.000000
+ Siege
+ 20.000000
+ 0.050000
+ 80.000000
+ 2.000000
+ 1.000000
+ GAIAEnemy
+
+
+ Gather
+ 0.400000
+ 0.250000
+
+
+ RangedAttack
+ 60.000000
+ Siege
+ 20.000000
+ 2.000000
+ 120.000000
+ 0.500000
+ 1.000000
+ GAIAEnemy
+
+
+ Build
+ 0.500000
+
+
+
+ 120
+ 781281
+ 781281
+ 1
+ 0.4900
+ 0.4900
+ Mobile
+ BloodSplat
+ 6.5000
+ 8.5000
+ land
+ 18.0000
+ units\cavalry\pistols\pistols_horse.xml
+ Flesh
+ cav
+ units\cavalry\pistols\texasranger
+ units\cavalry\pistols\texasrangerBIG
+ 781288
+ 25703
+ 125.0000
+ 125.0000
+ 16.0000
+ InvisibleProjectile
+ RangedCombative
+ 30.0000
+ 8.0000
+ 8.0000
+ 30.0000
+ 55.0000
+ 1
+
+ LogicalTypeHealed
+ LogicalTypeValidSharpshoot
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeScout
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ AbstractCavalry
+ AbstractLightCavalry
+ Unit
+ Military
+ UnitClass
+ Ranged
+ HasBountyValue
+ CountsTowardMilitaryScore
+ AbstractCavalryInfantry
+ ConvertsHerds
+ AbstractRangedCavalry
+ AbstractGunpowderCavalry
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ Tracked
+ Patrol
+ Delete
+ Stop
+ Garrison
+ musketCavalry.tactics
+
+ BuildingAttack
+ 5.000000
+ Siege
+ 3.000000
+
+
+ DefendRangedAttack
+ 10.000000
+ Ranged
+ 12.000000
+ 3.000000
+ 3.000000
+ 0.500000
+ 2.000000
+ 2.250000
+
+
+ MeleeHandAttack
+ 6.000000
+ Hand
+ 1.500000
+ 3.000000
+ 2.000000
+ 2.250000
+
+
+ StaggerRangedAttack
+ 10.000000
+ Ranged
+ 12.000000
+ 3.000000
+ 3.000000
+ 0.500000
+ 2.000000
+ 2.250000
+
+
+
+ 781296
+ 781296
+ 2
+ 0.4900
+ 0.4900
+ Body
+ BloodSplat
+ 4.5000
+ 6.5000
+ land
+ 18.0000
+ units\infantry\poleaxeman\poleaxeman.xml
+ Flesh
+ dude
+ units\infantry\poleaxeman\poleaxeman_icon
+ units\infantry\poleaxeman\poleaxeman_portrait
+ 20
+ 78011
+ 25696
+ 340.0000
+ 340.0000
+ 14.0000
+ HandCombative
+ 40.0000
+ 20.0000
+ 20.0000
+ 200.0000
+ 2
+
+ LogicalTypeHealed
+ LogicalTypeValidSharpshoot
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeScout
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ ConvertsHerds
+ AbstractHandInfantry
+ CountsTowardMilitaryScore
+ AbstractCavalryInfantry
+ HasBountyValue
+ AbstractInfantry
+ Unit
+ Military
+ UnitClass
+ AbstractHeavyInfantry
+ Mercenary
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ Tracked
+ Delete
+ Stop
+ Garrison
+ pikeman.tactics
+
+ BuildingAttack
+ 50.000000
+ Siege
+ 3.000000
+
+
+ CoverBuildingAttack
+ 25.000000
+ Siege
+ 3.000000
+
+
+ CoverHandAttack
+ 15.000000
+ Hand
+ 1.500000
+ 30.000000
+ 1.000000
+ GAIAEnemy
+ 2.250000
+ 0.000000
+ 0.000000
+ 3.000000
+
+
+ DefendHandAttack
+ 30.000000
+ Hand
+ 1.500000
+ 60.000000
+ 1.000000
+ GAIAEnemy
+ 2.250000
+ 0.000000
+ 0.000000
+ 3.000000
+
+
+ MeleeHandAttack
+ 30.000000
+ Hand
+ 1.500000
+ 60.000000
+ 1.000000
+ GAIAEnemy
+ 2.250000
+ 0.000000
+ 0.000000
+ 3.000000
+
+
+
+ 1859
+ 781200
+ 781200
+ 15
+ 0.4900
+ 0.4900
+ Body
+ 7.0000
+ 9.0000
+ land
+ 18.0000
+ units\asians\mercenaries\redcoat\redcoat.xml
+ dude
+ ui\armies\swedish_sakers
+ ui\armies\swedish_sakers
+ 781203
+ 25649
+ 400.0000
+ 400.0000
+ 9.0000
+ 20.0000
+ 120.0000
+ 120.0000
+ 400.0000
+ 2
+
+ LogicalTypeHealed
+ LogicalTypeValidSharpshoot
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeScout
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ Unit
+ Military
+ UnitClass
+ AbstractConsulateUnit
+ AbstractConsulateUnitColonial
+ CountsTowardMilitaryScore
+ HasBountyValue
+ Ranged
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ AllowOverPopCap
+ NotPlayerPlaceable
+ Tracked
+ Patrol
+ Stop
+ Garrison
+ Delete
+ bannerArmy.tactics
+
+ VolleyRangedAttack
+ 40.000000
+ Ranged
+ 2.000000
+ 16.000000
+ 3.000000
+
+
+
+ 1859
+ 781201
+ 78046
+ 14
+ 0.4900
+ 0.4900
+ Body
+ 7.0000
+ 9.0000
+ land
+ 18.0000
+ units\asians\mercenaries\redcoat\redcoat.xml
+ dude
+ ui\armies\swedish_saker_riflemen
+ ui\armies\swedish_saker_riflemen
+ 781225
+ 25649
+ 400.0000
+ 400.0000
+ 9.0000
+ 40.0000
+ 80.0000
+ 80.0000
+ 800.0000
+ 2
+
+ LogicalTypeHealed
+ LogicalTypeValidSharpshoot
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeScout
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ Unit
+ Military
+ UnitClass
+ AbstractConsulateUnit
+ AbstractConsulateUnitColonial
+ CountsTowardMilitaryScore
+ HasBountyValue
+ Ranged
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ AllowOverPopCap
+ NotPlayerPlaceable
+ Tracked
+ Patrol
+ Stop
+ Garrison
+ Delete
+ bannerArmy.tactics
+
+ VolleyRangedAttack
+ 40.000000
+ Ranged
+ 2.000000
+ 16.000000
+ 3.000000
+
+
+
+ 1859
+ 781202
+ 78050
+ 20
+ 0.4900
+ 0.4900
+ Body
+ 7.0000
+ 9.0000
+ land
+ 18.0000
+ units\asians\mercenaries\redcoat\redcoat.xml
+ dude
+ ui\armies\swedish_rifleman_horses
+ ui\units\swedish_rifleman_horses
+ 781226
+ 25649
+ 400.0000
+ 400.0000
+ 9.0000
+ 60.0000
+ 160.0000
+ 160.0000
+ 1600.0000
+ 2
+
+ LogicalTypeHealed
+ LogicalTypeValidSharpshoot
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeScout
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ Unit
+ Military
+ UnitClass
+ AbstractConsulateUnit
+ CountsTowardMilitaryScore
+ HasBountyValue
+ Ranged
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ AllowOverPopCap
+ NotPlayerPlaceable
+ Tracked
+ Patrol
+ Stop
+ Garrison
+ Delete
+ bannerArmy.tactics
+
+ VolleyRangedAttack
+ 40.000000
+ Ranged
+ 2.000000
+ 16.000000
+ 3.000000
+
+
+
+ 29
+ 781313
+ 781313
+ 6.0000
+ 6.0000
+ 0.0000
+ land
+ buildings\great_basilica\great_basilica.xml
+ BuildingRubble4x4
+ 15
+ Stone
+ house
+ buildinglarge.xml
+ buildings\church\church_icon
+ buildings\church\church_portrait
+ 22927
+ 25620
+ 2000.0000
+ 2000.0000
+ 12.0000
+ 35.0000
+ 1
+ 40.0000
+ 20.0000
+ 200.0000
+ 1.0000
+ 1
+
+ LogicalTypeValidSabotage
+ LogicalTypeMinimapFilterEconomic
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeBuildingsNotWalls
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeShipsAndBuildings
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeBuildingsNotWallsOrGroves
+ ColonyBuilding
+ BuildingClass
+ Economic
+ Building
+ HasBountyValue
+ CountsTowardEconomicScore
+ ConvertsHerds
+ Inquisitor
+ Imam
+ Missionary
+ Priest
+ Pilgrim
+ Architect
+ ChurchMissionFervor
+ ChurchStateReligion
+ ChurchGasLighting
+ ChurchMercantilism
+ UniqueSPCCorsolet
+ UniqueSPCHighCrusade
+ UniqueSPCIndianFriendship
+ UniqueSPCTaxBurden
+ UniqueSPCCustomizedMercWeapons
+ UniqueSPCPatriots
+ HCPatriots
+ ChurchMilletSystem
+ ChurchKopruluViziers
+ ChurchAbbassidMarket
+ ChurchGalataTowerDistrict
+ ChurchTopkapi
+ ChurchTanzimat
+ ChurchStandingArmy
+ ChurchMassCavalry
+ ChurchGardeImperial1
+ ChurchGardeImperial2
+ ChurchZweihander
+ ChurchQuatrefage
+ ChurchWesternization
+ ChurchThinRedLine
+ ChurchTowerAndSword
+ ChurchTillysDiscipline
+ ChurchTopcuCorps
+ ChurchTufanciCorps
+ ChurchBestieros
+ ChurchKalmucks
+ ChurchCoffeeTrade
+ ChurchRogersRangers
+ ChurchWildGeeseSpanish
+ ChurchCodeNapoleon
+ ChurchEconmediaManor
+ ChurchStadholders
+ ChurchWallensteinsContracts
+ ChurchWaardgelders
+ ChurchBashkirPonies
+ ChurchCorsolet
+ ChurchGardeImperial3
+ ChurchBlackWatch
+ ChurchBlackWatchXP
+ UniqueUSTradingPosts
+ UniqueSPCGrandEncampment
+ UniqueSPCCustomizedMercWeaponsUS
+ CannonPop
+ ChurchTies
+ SacredDecree
+ VenetianGothic
+ FameArmies
+ ChurchFortifiedWalls
+ ChurchLumberCamp
+ ChurchAxe
+ CollidesWithProjectiles
+ StartsAtFullEfficiency
+ Immoveable
+ NoBloodOnDeath
+ ObscuresUnits
+ NonAutoFormedUnit
+ Doppled
+ SelectWithObstruction
+ PaintTextureWhenPlacing
+ FlattenGround
+ ColonyBuilding
+ ColonyPlacementL
+ HasGatherPoint
+ Tracked
+ TileAlignPlacement
+ UnlimitedSupply
+ InitialGarrisonOnly
+ HeroName2
+ Delete
+ SetGatherPointMilitary
+ holyb.tactics
+
+ Autogather
+ 0.000000
+
+
+ AutogatherCoin
+ 0.000000
+
+
+ Heal
+ 5.000000
+
+
+
+ 491
+ 29108
+ 29109
+ 1.0000
+ 1.0000
+ 0.0000
+ land
+ terrain\tree_plymouth.xml
+ Wood
+ terrain\trees\tree_icon_64
+ terrain\trees\tree_icon_portrait
+ 29107
+ 29106
+ 6.0000
+ 6.0000
+ 0.0000
+ 300.0000
+ Wood
+
+ 8
+
+ LogicalTypeMinimapFilterEconomic
+ LogicalTypeVillagersAttack
+ LogicalTypeVillagersRespondToAttack
+ HuntedResource
+ Resource
+ NatureClass
+ Nature
+ Tree
+ Wood
+ ObscuresUnits
+ NoHPBar
+ NoBloodOnDeath
+ DoNotDieAtZeroHitpoints
+ NonAutoFormedUnit
+ DoNotCreateUnitGroupAutomatically
+ Immoveable
+ Doppled
+ ForceToGaia
+ DieAtZeroResources
+ StartOnNoUpdate
+ DoNotValidateResourceInventory
+ DontRotateObstruction
+ DoppleOnlyWhenDead
+ NoIdleActions
+ RMCanRotate
+ Tracked
+
+
+ 1575
+ 63371
+ 63372
+ 1.0000
+ 1.0000
+ 0.0000
+ land
+ terrain\tree_indo.xml
+ Wood
+ terrain\trees\tree_icon_64
+ terrain\trees\tree_icon_portrait
+ 63370
+ 63369
+ 6.0000
+ 6.0000
+ 0.0000
+ 300.0000
+ Wood
+
+ 8
+
+ LogicalTypeMinimapFilterEconomic
+ LogicalTypeVillagersAttack
+ LogicalTypeVillagersRespondToAttack
+ HuntedResource
+ Resource
+ Tree
+ Wood
+ Nature
+ NatureClass
+ ObscuresUnits
+ NoHPBar
+ NoBloodOnDeath
+ DoNotDieAtZeroHitpoints
+ NonAutoFormedUnit
+ DoNotCreateUnitGroupAutomatically
+ Immoveable
+ Doppled
+ ForceToGaia
+ DieAtZeroResources
+ StartOnNoUpdate
+ DoNotValidateResourceInventory
+ DontRotateObstruction
+ DoppleOnlyWhenDead
+ NoIdleActions
+ RMCanRotate
+ Tracked
+
+
+ 976
+ 36870
+ 36871
+ 1.0000
+ 1.0000
+ 0.0000
+ land
+ terrain\underbrush\underbrush_aus.xml
+ EmbellishmentClass
+ NoHPBar
+ Immoveable
+ NoBloodOnDeath
+ NonAutoFormedUnit
+ VisibleUnderFog
+ ForceToGaia
+ NotSelectable
+ NoUnitAI
+ StartOnNoUpdate
+ DoNotShowOnMiniMap
+ NoIdleActions
+ DoNotCreateUnitGroupAutomatically
+ RMCanRotate
+ NonCollideable
+ DestroyUnderBuilding
+
+
+ 67
+ 781331
+ 781331
+ 0
+ Sufi
+ 0.7900
+ 0.7900
+ Mobile
+ BloodSplat
+ 7.0000
+ 9.0000
+ land
+ 18.0000
+ units\natives\saltpeter\camelarcherhorse.xml
+ Flesh
+ cav
+ units\natives\saltpeter\camelarcher_icon
+ units\natives\saltpeter\camelarcher_portrait
+ 781338
+ 781337
+ 200.0000
+ 200.0000
+ 16.0000
+ Arrow
+ RangedCombative
+ 30.0000
+ 10
+ 15.0000
+ 15.0000
+ 70.0000
+ 80.0000
+ 1
+
+ LogicalTypeHealed
+ LogicalTypeValidSharpshoot
+ LogicalTypeNeededForVictory
+ LogicalTypeHandUnitsAutoAttack
+ LogicalTypeLandMilitary
+ LogicalTypeScout
+ LogicalTypeValidSPCUnitsDeadCondition
+ LogicalTypeGarrisonInShips
+ LogicalTypeRangedUnitsAutoAttack
+ LogicalTypeVillagersAttack
+ LogicalTypeHandUnitsAttack
+ LogicalTypeRangedUnitsAttack
+ LogicalTypeMinimapFilterMilitary
+ AbstractArcher
+ AbstractLightCavalry
+ AbstractCavalry
+ AbstractNativeWarrior
+ UnitClass
+ Military
+ Unit
+ ConvertsHerds
+ AbstractRangedCavalry
+ CountsTowardMilitaryScore
+ AbstractCavalryInfantry
+ Ranged
+ HasBountyValue
+ CollidesWithProjectiles
+ ApplyHandicapTraining
+ CorpseDecays
+ ShowGarrisonButton
+ DontRotateObstruction
+ ObscuredByUnits
+ VisibleUnderFogIfGaia
+ ConstrainOrientation
+ OrientUnitWithGround
+ Tracked
+ Patrol
+ Stop
+ Garrison
+ Delete
+ bowCavalry.tactics
+
+ BowAttack
+ 14.000000
+ Ranged
+ 12.000000
+ 1.500000
+ 2.250000
+ 0.500000
+ 2.000000
+ 1.750000
+
+
+ BuildingAttack
+ 15.000000
+ Siege
+ 3.000000
+ 10.000000
+
+
+ ChargeAttack
+ 7.000000
+ Hand
+ 1.500000
+ 4.500000
+ 2.000000
+ 3.500000
+
+
\ No newline at end of file
diff --git a/Data/randommapstringsm.xml b/Data/randommapstringsm.xml
index 2584ba5..f89a887 100644
Binary files a/Data/randommapstringsm.xml and b/Data/randommapstringsm.xml differ
diff --git a/Data/stringtablem.xml b/Data/stringtablem.xml
index 662eed8..b88485a 100644
--- a/Data/stringtablem.xml
+++ b/Data/stringtablem.xml
@@ -354,7 +354,7 @@
Restrict Number of Pauses
%s improvement complete.
Left-click to unload.
- II: Colonial Age
+ II: Reformation Age
Building
Unit
Improvement
@@ -1479,7 +1479,7 @@
Caravel
{E^Herd animal. Fattens over time. Fattens faster if tasked on a Livestock Pen, Farm, Village, or House.^}{J^Herd animal. Enhances resources generated by Shrines when tasked to them.^}{I^Herd animal. Generates experience points. Increased Experience Points generation when tasked to a Sacred Field.^}
Sheep
- Caravel. Good at exploring, fishing or transport.
+ Caravel, light warship. Exploration ship that can fish. Good against heavy warships.
Bison
Build near Native settlements or Trade Routes. Provides experience points and other benefits.
Trading Post
@@ -1520,8 +1520,8 @@
Projectile
Cannonball
Projectile
- Word of your discovery has spread. Villagers from your home city arrive to usher in the Colonial Age.
- II: Colonial Age
+ Word of your discovery has spread. Villagers from your home city arrive to usher in the Reformation Age.
+ II: Reformation Age
Train Track
Dock
Trains and upgrades hand and ranged cavalry.
@@ -1608,7 +1608,7 @@
Guard War Wagons
Dragoon attack and hitpoints increased.
Guard Dragoons
- COLONIAL AGE! You can now train units in the New World.
+ REFORMATION AGE! You can now train units in the New World.
INDUSTRIAL AGE! Railroads and Factories can empower your economy.
Jimmy Villager
Cuirassier attack and hitpoints increased.
@@ -1616,7 +1616,7 @@
Crossbowman attack and hitpoints increased.
Veteran Crossbowmen
Archer and hand infantry hitpoints increased.
- Infantry Breastplate
+ Archaic Infantry Breastplate
Infantry armed with firearms have their attack increased.
Paper Cartridge
Hand cavalry hitpoints increased.
@@ -1758,7 +1758,7 @@
Petrine Reforms
Iroquois short-ranged siege unit.
Iroquois Mantlet
- Canoe good at exploring, fishing or transport.
+ Canoe, light warship. Exploration ship that can fish. Good against heavy warships.
Canoe
Bank
Building that produces Coin. Supports 10 population.
@@ -1824,7 +1824,7 @@
Guard Riflemen
Portuguese Dragoon attack and hitpoints greatly increased.
Jinetes
- Ships 22 Bastieros (Crossbowmen) from your homeland. Also Improves all Crossbowmen.
+ Ships 22 Bastieros (Crossbowmen) from your homeland. Also improves all Crossbowmen.
Besteiros
Bola
Javelin
@@ -2322,7 +2322,7 @@
Skirmisher
Heavy artillery
Exploration canoe
- Caravel. Exploration ship
+ Light warship
Ranged cavalry
Improvement building
French villager
@@ -3284,26 +3284,26 @@
The Ossuary
Payback
Czapka Uhlans
- Frigate. Heavy warship
- Frigate. Heavy warship.
+ Heavy warship
+ Frigate, heavy warship. Good against siege warships.
Frigate
SHP Frigate
- Fluyt. Warship good at transport.
- Fluyt. Slow, powerful ship resistant to building fire that can train units.
+ Heavy warship
+ Fluyt, heavy warship. Transport ship that can train units. Good against siege warships.
Fluyt
SHP Fluyt
- Galleon. Warship good at transport.
+ Heavy warship
Galleon
SHP Galleon
- Galley. Exploration ship
- Galley. Good at exploring, fishing or transport.
+ Light warship
+ Galley, light warship. Exploration ship that can fish. Good against heavy warships.
Galley
SHP Galley
Privateer. Pirate ship
- Privateer. Mercenary warship.
+ Privateer, light warship. Mercenary ship. Good against heavy warships.
Privateer
SHP Privateer
- Galleon. Slow, powerful ship resistant to building fire that can train units.
+ Galleon, heavy warship. Transport ship that can train units. Good against siege warships.
This tech doesn't do anything yet!
The boots of El Pollo Guapo, which increases Hero speed by %2.2f%%.
%s has recovered the boots of El Pollo Guapo, which increases Hero speed by %2.2f%%.
@@ -3853,7 +3853,7 @@
Hot Air Balloon
Recon unit
Mercenaries are cheaper.
- Colonial Age
+ Reformation Age
Ground Decal Great Plains
PROP Great Plains Decal
Defensive building
@@ -4084,7 +4084,7 @@
Find Native American allies.
Blockade
Set up a blockade on enemy Home Cities, preventing them from getting any shipments!
- You have reached the Colonial Age!
+ You have reached the Reformation Age!
You have reached the Enlightenment Age!
Increases the build limit on all warships such as Caravels, Frigates and Monitors.
Balloons can be produced from the Town Center and sent aloft to provide a huge line of sight. They cannot move once deployed and have no attack.
@@ -4129,8 +4129,8 @@
PROP Eagle's Nest
Transform your Town Wagon into a Town Center.
Move to an unobstructed area to transform your Town Wagon into a Town Center.
- Monitor. Mortar ship
- Monitor. Mortar ship good at bombarding buildings at great range.
+ Siege warship
+ Monitor, siege warship. Good at bombarding buildings at great range.
Monitor
SHP Monitor
Imperial upgrade for Grenadiers.
@@ -4811,7 +4811,7 @@
XP %s
Grand Conquest
Tech Status Equals
- %s's colony has reached the COLONIAL AGE!
+ %s's colony has reached the REFORMATION AGE!
The only way to your sister's village is through the British.
The British are attacking the village. We should attack from our side now!
Sir, one of our scouts has spotted a British fort.
@@ -4912,9 +4912,9 @@
That sound, and the flashing Shipment icon, indicate that you may now send a Shipment from the Home City.
Click on the flashing Home City button now.
During a game of Age of Empires III, visit the Home City now and then to send Shipments of resources, Settlers, or soldiers.
- The timer above the Mini Map at the lower left of the screen shows how long it will take until you advance to the Colonial Age.
- While you're waiting to advance to the Colonial Age, click the flashing button to return to the New World, and continue gathering resources and exploring.
- You have reached the Colonial Age!
+ The timer above the Mini Map at the lower left of the screen shows how long it will take until you advance to the Reformation Age.
+ While you're waiting to advance to the Reformation Age, click the flashing button to return to the New World, and continue gathering resources and exploring.
+ You have reached the Reformation Age!
Build a Barracks to help defend your colony.
Select a Settler.
Click the flashing Barracks button.
@@ -4957,27 +4957,27 @@
Player Set HC Access
HC Access On
But she decides who she loves, and I will not come between you.
- Allows you to send the Adventurer, who advances you to Colonial Age and improves your Explorer's hitpoints and the line of sight of cavalry and infantry.
+ Allows you to send the Adventurer, who advances you to Reformation Age and improves your Explorer's hitpoints and the line of sight of cavalry and infantry.
British
Allows you to send the Gentleman Pirate, who advances you to Industrial Age and increases Mercenary hitpoints.
British
Allows you to send the Exiled Prince, who advances you to Industrial Age and refunds 500 Coin.
French
- Allows you to send the Master Farmer, who advances you to Colonial Age and improves your Mill gathering rate.
+ Allows you to send the Master Farmer, who advances you to Reformation Age and improves your Mill gathering rate.
French
blah
- Allows you to send the Master Miner, who advances you to Colonial Age and improves your Mine gathering rate.
+ Allows you to send the Master Miner, who advances you to Reformation Age and improves your Mine gathering rate.
French
The Lakota Dog Soldier Society arrives at your Town Center to help fight your enemies. You get 1 Dog Soldier for every 3 minutes of game length.
Lakota Dog Soldiers
- Allows you to send the Philosopher Prince, who advances you to Colonial Age and makes archaic units (longbows and pikemen) better.
+ Allows you to send the Philosopher Prince, who advances you to Reformation Age and makes archaic units (longbows and pikemen) better.
British
Leave Game
Stuart's Head
IGC Stuart's Head
- Allows you to send the Adventurer, who advances you to Colonial Age and improves your Explorer's hitpoints and the line of sight of cavalry and infantry.
+ Allows you to send the Adventurer, who advances you to Reformation Age and improves your Explorer's hitpoints and the line of sight of cavalry and infantry.
Dutch
- Allows you to send the Cavalier, who advances you to Colonial Age and increase cavalry hitpoints.
+ Allows you to send the Cavalier, who advances you to Reformation Age and increase cavalry hitpoints.
Dutch
Allows you to send the Gentleman Pirate, who advances you to Industrial Age and increases Mercenary hitpoints.
Dutch
@@ -4993,7 +4993,7 @@
Delete the selected herd.
Create Herd
Delete Herd
- Allows you to send the Master Farmer, who advances you to Colonial Age and improves your Mill gathering rate.
+ Allows you to send the Master Farmer, who advances you to Reformation Age and improves your Mill gathering rate.
German
Allows you to send the Exiled Prince, who advances you to Industrial Age and refunds 500 Coin.
German
@@ -5007,32 +5007,32 @@
Ottoman
Allows you to send the Exiled Prince, who advances you to Industrial Age and refunds 500 Coin.
Ottoman
- Allows you to send the Master Farmer, who advances you to Colonial Age and improves your Mill gathering rate.
+ Allows you to send the Master Farmer, who advances you to Reformation Age and improves your Mill gathering rate.
Ottoman
- Allows you to send the Cavalier, who advances you to Colonial Age and increase cavalry hitpoints.
+ Allows you to send the Cavalier, who advances you to Reformation Age and increase cavalry hitpoints.
Ottoman
Lighting Set Helper
Allows you to send the War Minister, who advances you to Industrial Age and increases the hitpoints of unique Spanish units.
Spanish
- Allows you to send the Master Miner, who advances you to Colonial Age and improves your Mine gathering rate.
+ Allows you to send the Master Miner, who advances you to Reformation Age and improves your Mine gathering rate.
Spanish
Allows you to send the Engineer, who advances you to Industrial Age and increases artillery hitpoints.
Spanish
- Allows you to send the King's Musketeer, who advances you to Colonial Age and improves your infantry's hitpoints.
+ Allows you to send the King's Musketeer, who advances you to Reformation Age and improves your infantry's hitpoints.
Spanish
- Allows you to send the Naturalist, who advances you to Colonial Age and improves your hunting and livestock gathering rate.
+ Allows you to send the Naturalist, who advances you to Reformation Age and improves your hunting and livestock gathering rate.
Spanish
- Allows you to send the Master Miner, who advances you to Colonial Age and improves your Mine gathering rate.
+ Allows you to send the Master Miner, who advances you to Reformation Age and improves your Mine gathering rate.
Russian
- Allows you to send the Cavalier, who advances you to Colonial Age and increase cavalry hitpoints.
+ Allows you to send the Cavalier, who advances you to Reformation Age and increase cavalry hitpoints.
Russian
Allows you to send the Gentleman Pirate, who advances you to Industrial Age and increases Mercenary hitpoints.
Russian
Allows you to send the Tycoon, who advances you to Industrial Age and improves your Crates and Factories.
Portuguese
- Allows you to send the Bishop, who advances you to Colonial Age and makes Priests free.
+ Allows you to send the Bishop, who advances you to Reformation Age and makes Priests free.
Portuguese
- Allows you to send the Master Miner, who advances you to Colonial Age and improves your Mine gathering rate.
+ Allows you to send the Master Miner, who advances you to Reformation Age and improves your Mine gathering rate.
Portuguese
Trade Route Tool
Create Trade Route
@@ -5181,7 +5181,7 @@
Randomly selects from among all American standard maps.
Build a Trading Post near the natives and they will ally with us.
Send out a few scouts to see if there are any more natives in the area.
- There are many Native Americans in this area. Find them and build Trading Posts near them to make an alliance. In the Colonial Age you can train their warriors to help you fight.
+ There are many Native Americans in this area. Find them and build Trading Posts near them to make an alliance. In the Reformation Age you can train their warriors to help you fight.
The Ottoman Fort is very strong. Getting to the Enlightenment Age and training Mortars at your Artillery Foundry will greatly help with this task.
Light artillery
Knight of Malta that throws flaming hoops.
@@ -5198,7 +5198,7 @@
Rescue more Aztec prisoners.
The rest of the prisoners may also be guarded by the Spanish but will help you if you free them.
Ramming, exploding ship
- Rams anything on the water and explodes.
+ Fire Ship. Rams anything on the water and explodes.
Fire Ship
SPC Fire Ship
Military building
@@ -5260,7 +5260,7 @@
We've found a weapons cache.
Do you want to quit ESO and return to the Main menu?
%s's colony has reached the ENLIGHTENMENT AGE!
- %s's colony has reached the COLONIAL AGE!
+ %s's colony has reached the REFORMATION AGE!
%s's colony has reached the INDUSTRIAL AGE!
Duck Family
PROP Duck Family
@@ -5434,10 +5434,10 @@
If you build Trading Posts at the Trading Post sites along the route, you will earn extra Experience.
A Shipment is ready in the Home City!
Return to the Home City and use your Shipments to send additional Settlers, soldiers, or resources.
- You should gather more Food so you can advance to the Colonial Age.
- It would be wise to advance to the Colonial Age as soon as you have enough Food.
- If you advance to the Colonial Age, you will be able to build additional buildings, train soldiers, and purchase new improvements.
- You have reached the Colonial Age! Consider building a Barracks so you can defend your colony.
+ You should gather more Food so you can advance to the Reformation Age.
+ It would be wise to advance to the Reformation Age as soon as you have enough Food.
+ If you advance to the Reformation Age, you will be able to build additional buildings, train soldiers, and purchase new improvements.
+ You have reached the Reformation Age! Consider building a Barracks so you can defend your colony.
Building a Barracks will let you train Musketeers and other soldiers.
Consider training Musketeers in your Barracks to defend your colony.
If you build a Stable, you can train cavalry to fight alongside your other soldiers.
@@ -5563,11 +5563,11 @@
Request Wood deliveries at this Trading Post.
Request Experience generation at this Trading Post.
Train two additional Settlers while exploring the New World.
- Advance to the Colonial Age
+ Advance to the Reformation Age
Advance to the Enlightenment Age
Destroy the Enemy Colony
You can train more Settlers at your Town Center, if you have enough Food. You will need eight Settlers to complete the objective. Hunt animals for Food, or send Food from your Home City.
- To advance to the Colonial Age, select the Town Center, left-click the Age Advancement button, and then choose a politician. To advance, you will need 500 Food. Food may be gathered from animals or Mills.
+ To advance to the Reformation Age, select the Town Center, left-click the Age Advancement button, and then choose a politician. To advance, you will need 500 Food. Food may be gathered from animals or Mills.
To advance to the Enlightenment Age, you need 500 Food and 250 Coin. Keep training Settlers at your Town Center. Don't forget to build more Manors to support your population.
Build an Artillery Foundry to train Mortars. Mortars are good at destroying buildings but they need to be protected with other units. When you have a large army, attack!
%1s has invited you to Custom Game: %2s. Would you like to join?
@@ -5738,8 +5738,8 @@
Pirate ships dead ahead captain!
For your first Shipment, it's probably best to send additional Settlers to help your economy grow faster.
Send a Shipment now by selecting the Settler.
- Advancing to the Colonial Age would allow you to construct new buildings and train soldiers.
- You have been given enough resources to advance to the Colonial Age. Select the Town Center.
+ Advancing to the Reformation Age would allow you to construct new buildings and train soldiers.
+ You have been given enough resources to advance to the Reformation Age. Select the Town Center.
Left-click the flashing button to return to the New World.
At the end of a game, you may also return to the Home City and spend your earned Experience to unlock new Shipment types.
Every civilization in the game has a different set of Shipments it can unlock - try them all!
@@ -5750,8 +5750,8 @@
Congratulations! You're now ready to play the Campaign, try a Skirmish against computer opponents, or go online and compete in multiplayer!
Your Caravel can also be used to fish. With the Caravel selected, right-click on Fish to gather Food.
The enemy Town Center has been destroyed!
- Advance to the Colonial Age.
- Select the Town Center, click the gold Advance to Colonial Age button, then choose a politician to send. It will take some time for the politician to arrive.
+ Advance to the Reformation Age.
+ Select the Town Center, click the gold Advance to Reformation Age button, then choose a politician to send. It will take some time for the politician to arrive.
turn.
St. Louis Rail Co.
Enlightenment Age
@@ -5767,7 +5767,7 @@
(%d XP each)
Russian
Russian
- Allows you to send the King's Musketeer, who advances you to Colonial Age and improves your infantry's hitpoints.
+ Allows you to send the King's Musketeer, who advances you to Reformation Age and improves your infantry's hitpoints.
Russian
Stop Beaumont and his theft of the Spanish gold.
Destroy the three Outposts guarding the ruined treasure ships.
@@ -5804,13 +5804,13 @@
Make New Leader
There can only be one leader of a Clan. Are you sure you wish to make %s the new leader of your Clan?
Cost:
- Select a Colonial Age politician
+ Select a Reformation Age politician
Select an Enlightenment Age politician
Select an Industrial Age politician
Select an Imperial Age political party
Double-barrel Attack
Fire with both shotgun barrels for heavy damage to infantry, cavalry or guardians.
- Advance to the Colonial Age
+ Advance to the Reformation Age
Advance to the Enlightenment Age
Advance to the Industrial Age
Advance to the Imperial Age
@@ -5914,7 +5914,7 @@
This building has crops around it. You need to allow more space.
Prop Grass Short
PROP Grass Short
- Moves the Arsenal to the Colonial Age and enables more powerful Arsenal improvements.
+ Moves the Arsenal to the Reformation Age and enables more powerful Arsenal improvements.
Advanced Arsenal
Props Dead Tree
PROP Dead Tree
@@ -6798,7 +6798,7 @@
7 Players
8 Players
Discovery Age
- Colonial Age
+ Reformation Age
Enlightenment Age
Industrial Age
Post-Industrial Age
@@ -6826,7 +6826,7 @@
7.
8.
Ran rails all the way from Kansas City to the West Coast.
- Now click on the gold button, then select a politician to advance to the Colonial Age.
+ Now click on the gold button, then select a politician to advance to the Reformation Age.
Havana
3 Settlers and 4 Rodoleroes
@@ -6943,9 +6943,9 @@
Young Carib Native American. This boy has fighting skills against infantry.
Native Boy
SPC Native Boy
- TEAM Dragoons can be trained in the Colonial Age. (Also works on Ruyters, Rangers, Cavalry Archers, Rifle Riders, Musket Riders, and Yabusame. For Indian and Chinese allies, it makes Zamburak and the Ming Army train slightly faster.)
+ TEAM Dragoons can be trained in the Reformation Age. (Also works on Ruyters, Rangers, Cavalry Archers, Rifle Riders, Musket Riders, and Yabusame. For Indian and Chinese allies, it makes Zamburak and the Ming Army train slightly faster.)
TEAM Early Dragoons
- TEAM Allows Dragoons in Colonial Age.
+ TEAM Allows Dragoons in Reformation Age.
TEAM The Wood cost for Docks and Dock improvements is lower.
TEAM Cheap Docks
TEAM Docks cheaper.
@@ -6958,9 +6958,9 @@
TEAM Warships are cheaper.
TEAM Cold Water Port
TEAM Warships cheaper.
- TEAM Skirmishers, Gurkhas, Riflemen, Wakina Rifles, Forest Prowlers, and the Black Flag Army can be trained in the Colonial Age. (Strelets, Longbowmen, Macehualtins, and Yumi Archers train slightly faster.)
+ TEAM Skirmishers, Gurkhas, Riflemen, Wakina Rifles, Forest Prowlers, and the Black Flag Army can be trained in the Reformation Age. (Strelets, Longbowmen, Macehualtins, and Yumi Archers train slightly faster.)
TEAM Early Skirmishers
- TEAM Allows Skirmishers in Colonial Age.
+ TEAM Allows Skirmishers in Reformation Age.
TEAM Ranged infantry damage increased.
TEAM Churches, Mosques, and Field Hospitals are much cheaper and their non-advanced improvements are also cheaper. Monastaries are somewhat cheaper and Native Fire Pits become free.
TEAM Cheap Church
@@ -7053,7 +7053,7 @@
Pioneers
Building hitpoints increased.
Improved Buildings
- Moves the Arsenal to the Colonial Age and enables more powerful Arsenal improvements, +2 Uhlans.
+ Moves the Arsenal to the Reformation Age and enables more powerful Arsenal improvements, +2 Uhlans.
Advanced Arsenal
Ships a Fort Wagon to your colony, allowing you to construct a mighty Fort, +3 Uhlans.
Fort
@@ -7784,8 +7784,8 @@
Stockyards
Ships 2 Fluyts and 1 Monitor.
Dutch Raiding Fleet
- Ships 10 Halberdiers and 4 Ruyters.
- Dutch Counter Cavalry Force
+ Ships 10 Halberdiers and 4 Ruyters.
+ Dutch Regiment
Bank Coin production increased.
Tulip Speculation
TEAM Monitor attack and hitpoints increased.
@@ -7917,7 +7917,7 @@
15 Halberdiers
You have specified a map size that is either too small (less than 64) or too large (greater than 1024)
Blockhouse Engineering
- Strelets can now build Blockhouses. Also, increases Blockhouse build limit.
+ Strelets can now build Blockhouses. Also increases Blockhouse build limit.
Joe fires this to be less lame.
Joe's Magic Tech
Playing a game on a higher speed increases the rates of gathering, movement, combat, training and researching improvements.
@@ -7984,7 +7984,7 @@
TEAM Germans send allies Town Wagons.
All cavalry are faster, +4 Uhlans.
Polish Riding School
- Polish Winged Knights
+ Hire Polish Winged Knights
Ships a squadron of 5 Winged Hussar Knights and enables them at the Command Post.
Uhlan attack and hitpoints increased, +4 Uhlans.
Lipizzaner Cavalry
@@ -9115,12 +9115,12 @@
A paltry treasure here or there makes no difference in the long run.
You are so backward! What will your soldiers use to fight mine? Clubs?
You are so nice, to choose to fight me while you are an Age inferior. How sweet.
- Yes, you have reached Colonial Age first. I suppose I should congratulate you.
+ Yes, you have reached Reformation Age first. I suppose I should congratulate you.
So soon? I must marshal my forces.
- At last you have joined the rest of us in the Colonial Age.
+ At last you have joined the rest of us in the Reformation Age.
You are Colonial at last? How quaint. We are all moving on to the next Age.
Native warriors are brave and resourceful.
- Are you aware that it is possible to advance to the Colonial Age?
+ Are you aware that it is possible to advance to the Reformation Age?
Still back in the Discovery Age?! How delightful.
This wealth will go straight into my war chest.
See how my explorer makes good use of his time? You can learn by my example.
@@ -9281,11 +9281,11 @@
I suggest you follow my lead and advance to the next Age as soon as possible.
Exploring the New World is fine, but if you do not advance to the next Age soon, you may find your explorer fighting the enemy single-handed.
Remarkable work. Continue to use your resources as wisely as I do, and we shall be assured victory.
- Excellent. You have reached the Colonial Age quickly.
+ Excellent. You have reached the Reformation Age quickly.
Your advancement to the next Age is an inspiration to my men.
Although I advanced an Age before you, I expect your assistance in this war may still contribute to our eventual victory.
- Do not be discouraged by your slow progress to the Colonial Age. Not everyone is Frederick the Great.
- Even though you have reached the Colonial Age last, you may still fight by my side.
+ Do not be discouraged by your slow progress to the Reformation Age. Not everyone is Frederick the Great.
+ Even though you have reached the Reformation Age last, you may still fight by my side.
To express my gratitude for rescuing our explorer I shall have a new sapling planted in the Black Forest.
My troops have destroyed a trading post. We are no longer threatened by defeat in that manner.
The natives in this realm have been freed by my decisive action.
@@ -9456,19 +9456,19 @@
A kindergartener could have seen that attack coming.
Do you think destroying that trade site will lead to your victory? You probably also claim to see poltergeists.
You are like a lammergeier, a cowardly vulture attacking my trade sites when I am not prepared to defend them.
- Are you waiting until I arrive with the army of the apocalypse before advancing to the Colonial Age?
- Do you plan to advance to the Colonial Age after your kaffeeklatsch?
- Apparently Oktoberfest will come and go before you reach the Colonial Age.
+ Are you waiting until I arrive with the army of the apocalypse before advancing to the Reformation Age?
+ Do you plan to advance to the Reformation Age after your kaffeeklatsch?
+ Apparently Oktoberfest will come and go before you reach the Reformation Age.
My schnauzer could dog paddle to the New World faster than you advance through the Ages.
Your empire is advancing so slowly you might have more luck if you sent settlers to the front lines with rakes.
You are taking so long to advance, perhaps you should just pack your whole town up in a wagon and send it back to the old world.
- It does not take an ubermensch to take an empire to the Colonial Age!
- Among all combatants, you have reached the Colonial Age first. Surely you do not expect that move alone to save you.
- Your quick advancement to the Colonial Age fills me with weltschmerz.
+ It does not take an ubermensch to take an empire to the Reformation Age!
+ Among all combatants, you have reached the Reformation Age first. Surely you do not expect that move alone to save you.
+ Your quick advancement to the Reformation Age fills me with weltschmerz.
If your strategy is to advance your empire as slowly as possible so as to weaken us with laughter, you are succeeding.
Is your empire hitched to a slug?
Your slow rise to the second Age indicates you have little wille zur macht.
- I see you have finally joined the rest of us in the Colonial Age.
+ I see you have finally joined the rest of us in the Reformation Age.
You are rather separated from your allies. Perhaps you better begin shouting for help now.
Do you expect the poor placement of your town center to allow you more time to practice your harpsichord?
It is helpful that your towns are closely packed. We will raze them all as one.
@@ -9662,7 +9662,7 @@
Excellent work my friend. Now we must recruit an army.
You're off to a great start. Keep at it.
Savoring the flavor of the Age would be dandy if we didn't have a war on our hands!
- Glad to see you made it to the Colonial Age.
+ Glad to see you made it to the Reformation Age.
Thank you for rescuing my explorer.
My explorer is thankful. Let me know if I can return the favor.
Nice to see you've rescued my explorer. I'll put him back to exploring immediately.
@@ -9842,8 +9842,8 @@
Cutting off my trade routes will not save you from the wrath of my army.
Technological advancements are marvelous things. You should try them sometime.
I feel so sorry for your poor technological advancements I'm almost tempted to send you some resources. Heh, almost.
- I will tell them to put 'First to reach Colonial Age' on your tombstone.
- How is it the saying goes? Last to Colonial Age, first to die?
+ I will tell them to put 'First to reach Reformation Age' on your tombstone.
+ How is it the saying goes? Last to Reformation Age, first to die?
Your town is so far from your allies. They won't be able to hear your screams as your town is being burned to cinders.
Cowards of a feather flock together. I suppose that's why you and your ally built next to each other.
Nice try. Try again.
@@ -10820,7 +10820,7 @@
Do you need some kind of help? You are STILL not Colonial!
What is the problem? You cannot build a good army in the Discovery Age!
I see you're still in the previous Age from me. Have you even discovered gunpowder yet?
- Speed in advancement to Colonial Age will not matter in the long run.
+ Speed in advancement to Reformation Age will not matter in the long run.
It's about time you reached Colonial. Now you can train a few troops before I devastate your countryside.
It is astounding that anyone could advance through the Ages so slowly!
Your luck will not hold. Yes, you have acquired the first treasure, but the bulk of the rest will fall to me.
@@ -11443,7 +11443,7 @@
When I capture this base, it will unravel the enemy's position.
I see you run your economy effectively. I am confident you will prove as good at warfare, no?
That was fast! I suspect it bodes well for the future of our alliance.
- It's about time you managed to reach the Colonial Age with the rest of us.
+ It's about time you managed to reach the Reformation Age with the rest of us.
Finally! It took you long enough to get here to Colonial.
I see your colony is still in the early stages of construction. Will you be able to withstand more-advanced enemy armies?
The enemy will not wait for you to get to Colonial. They'll attack when THEY are ready, not when YOU are ready.
@@ -13699,7 +13699,7 @@
Daytime Lighting
The city with the sun shining brightly.
Evening Light
- Another day ends for the Empire's capitol city.
+ Another day ends in the capitol city.
Daytime Lighting
The city with the sun shining brightly.
Daytime Lighting
@@ -13922,7 +13922,7 @@
Farm
Siege Workshop
Strong canoe built for combat.
- Strong in naval combat when built in number, and can train units.
+ War Canoe, heavy warship. Transport ship that can train units. Good against siege warships.
War Canoe
SHP War Canoe
Aenna attack and hitpoints increased.
@@ -14377,7 +14377,7 @@
Champion Musket Rider
Champion Rifle Rider
Dance building / Healing building
- Native healing building required to advance in Age. Task Villagers on the Fire Pit to perform powerful dances.
+ Native support building. Task Villagers on the Fire Pit to perform powerful dances.
Fire Pit
Resources.
Crates of 500 Food, 500 Wood, and 500 Coin
@@ -14459,7 +14459,7 @@
Extensive Fortifications Shipment has arrived.
Extensive Fortifications II Shipment has arrived.
Strong canoe built for combat.
- Strong in naval combat when built in number, and can train units
+ Tlaloc Canoe, heavy warship. Transport ship that can train units. Good against siege warships.
Tlaloc Canoe
SHP Tlaloc Canoe
4 Canoes
@@ -14552,7 +14552,7 @@
Nobles' Hut
Nobles' Hut
Light infantry
- Nobleman that flings javelins from an atlatl. Good against cavalry and Coyote Runners.
+ Nobleman that flings javelins from an atlatl. Good against heavy cavalry.
Eagle Runner Knight
INF Eagle Runner Knight
Hand infantry
@@ -15084,7 +15084,7 @@
10 Gunslinger Allies
Hire Hungarian Poleaxemen
Outlaw Band
- A large force of outlaws joins your side, with 10 Desperados and 10 Gunslingers.
+ A large force of outlaws joins your side, with 5 Desperados and 10 Gunslingers.
Dakota Support
The Dakota Nation sends its support.
The Dakota Nation sends 5 Tashunke Prowlers and increases the hitpoints of all Tashunke Prowlers.
@@ -16365,9 +16365,9 @@
Louverture
Grants 4 Gatling Guns and increases their hitpoints.
Washington
- Grants 20 Outlaws. Wild West is researched for free.
+ Grants 10 Outlaws. Wild West is researched for free.
Hidalgo
- Grants 20 Tupi warriors. All Natives are Mythical.
+ Grants 20 Tupi warriors and increases all Native warrior limits.
Bonifacio
All units gain slightly more hitpoints.
Bolivar
@@ -16378,7 +16378,7 @@
Grants 10 Hussars and increases their hitpoints.
OHiggins
Revolution!
- Select a Colonial Age
+ Select a Reformation Age
Select an Enlightenment Age
Select an Industrial Age
Select an Imperial Age
@@ -16991,8 +16991,8 @@
General Custer has arrived. Use your warrior army to find and kill him.
Custer's Army has forward bases north of the river. Crazy Horse will send warriors when each of the two forward Town Centers is destroyed.
Destroy the revealed buildings to reduce the number of troops that General Custer will bring across the Little Big Horn River and into the Sioux settlement. You will have to fight through enemy towns to get to most of Custer's buildings.
- Advanced armored warship
- Advanced armored warship.
+ Armored warship
+ Advanced armored warship with a long-ranged attack.
Ironclad
SHP Rev Ironclad
Imperial Man-o'-War
@@ -17218,7 +17218,7 @@
Ranching Shipment has arrived.
Great House
Grear House shipment has arrived.
- Bonds between you and minor Native tribes let you train Native Villagers out of your Embassy. Also increases Embassy build limit.
+ Bonds between you and minor Native tribes increase the attack of Embassy warriors and increases Embassy build limit.
Kinship Ties
Ranching Shipment has arrived.
5 Spies
@@ -17595,7 +17595,7 @@
TEAM 3 Pet Jaguars
TEAM 4 Pet Bears
Advanced Scouts
- Scout line of sight, attack and hitpoints increased.
+ Healers can now heal faster and Scouts line of sight, attack and hitpoints are increased.
Offshore Support Shipment has arrived.
Ruthlessness
War Hut units do greatly increased damage vs. settlers.
@@ -18429,14 +18429,14 @@
You have climbed the great tree of time, advancing well before I could.
Our enemy claims the rights of guest and stranger in these lands, taking a Native settlement.
Our enemy has gone like fog off the water, and claimed a Native ally.
- You are late in your arrival to the Colonial Age, my ally.
+ You are late in your arrival to the Reformation Age, my ally.
Are you waiting for the ducks to return for the summer? Advance to Colonial soon.
Do not weep in the silent midnight, instead make haste and advance to the next age.
Stop drifting on the stream of time and advance to the next age.
- You have pushed aside the deerskin curtain, walking into the Colonial Age before anyone else.
- You have landed first on the shore of the Colonial Age.
- Has perchance my ally grown old, waiting to advance to the Colonial Age?
- It is good you have joined us in the Colonial Age, o slow one.
+ You have pushed aside the deerskin curtain, walking into the Reformation Age before anyone else.
+ You have landed first on the shore of the Reformation Age.
+ Has perchance my ally grown old, waiting to advance to the Reformation Age?
+ It is good you have joined us in the Reformation Age, o slow one.
Henceforward and forever, I shall speak to the winds my thanks to you.
I cry aloud and speak like sunlight: you have rescued my war chief.
I have moved heavily upon their trading post in time.
@@ -18709,10 +18709,10 @@
Your mischief is unwanted; my trade site has fallen by your hand.
With the destruction of that trade site, you have caused my anger to burn.
I submit that your time of wild adventure is over; will you ever advance from the Discovery Age?
- Hurry and advance to the Colonial Age, and join the fray.
+ Hurry and advance to the Reformation Age, and join the fray.
Where are your tricks and gambles now? Or are you too upset to advance in age?
Are you so confident that you think you can defeat me from the lowly age you rest in now?
- You are first to the Colonial Age, but the tempest of my wrath shall overtake you.
+ You are first to the Reformation Age, but the tempest of my wrath shall overtake you.
What good is advancing an age, when your army's bones will soon be nourishing the grass?
Welcome to the Industrial Age, oh chief of flying leaves and swirling dust.
If your plan is to watch my empire advance beyond yours, it is working.
@@ -19331,7 +19331,7 @@
Supremacy Treaty Win Percentage: %s
War Huts can attack and train infantry. No cavalry, but the Noble's Hut can train special units and has a fast attack. Gets free jaguars with every Age. Builds Fire Pits to boost the economy and military. Best units: Skull Knight, Jaguar Prowl Knight.
War Huts can attack and train infantry. Travois constructs buildings for free and Longhouses support more population. Builds Fire Pits to boost the economy and military. Best units: Tomahawks, Light Cannon.
- War Huts can attack and train infantry. Starts with 200 population and a free Shipment. Builds Fire Pits to boost the economy and military. Best units: Dog Soldier, Tashunke Prowler.
+ War Huts can attack and train infantry. Starts with 200 population and each Special (Big Button) upgrade sends a bison. Builds Fire Pits to boost the economy and military. Best units: Dog Soldier, Tashunke Prowler.
Plaza
Palace
Temple
@@ -19382,7 +19382,7 @@
Carib Blowgunner
NAT Carib Blowgunner
TEAM 3 Villagers shipment sent.
- TEAM Aztec player sent everyone 3 Villagers.
+ TEAM Aztecs send everyone 3 Villagers.
TEAM Everyone gets Chests of 1000 Coin.
TEAM Everyone gets Chests of 600 Coin.
TEAM Aztecs send all players some adorable pet jaguars.
@@ -20508,7 +20508,7 @@
War Jong
SHP War Jong
Atakabune. Warship good at transport.
- Atakabune. Slow, powerful ship resistant to building fire that can train units.
+ Atakabune, heavy warship. Transport ship that can train units. Good against siege warships.
Atakabune
SHP Atakabune
Galleon. Warship good at transport.
@@ -20516,7 +20516,7 @@
War Jong
SHP War Jong
Fune. Exploration ship
- Fune. Good at exploring, fishing or transport.
+ Fune, light warship. Exploration ship that can fish. Good against heavy warships.
Fune
SHP Fune
Ramming, exploding ship
@@ -21110,7 +21110,7 @@
Mongolian Livestock
Mongolian Livestock Shipment has arrived.
Wokou Dhow. Mercenary warship.
- Wokou Dhow. Mercenary warship.
+ Wokou Dhow, light warship. Mercenary ship. Good against heavy warships.
Wokou Dhow
SHP Wokou Dhow
Ships a Wokou Dhow containing Wokou Samurai outlaws.
@@ -21237,7 +21237,7 @@
Kendo Dojo
Howdah, Mahouts, and Siege Elephants can be trained an Age early, +1 Villager.
Early Elephants
- TEAM allows Skirmishers in Colonial Age.
+ TEAM allows Skirmishers in Reformation Age.
Kendo Dojo
Early Elephants has arrived.
Upgrades to Hombu Dojo, increasing Dojo hitpoints and decreasing Dojo unit train time.
@@ -21649,7 +21649,7 @@
Delinquent Thuggee
GRD Delinquent Thuggee
War Jong. Exploration ship
- War Jong. Good at exploring, fishing or transport.
+ War Jong, light warship. Exploration ship that can fish. Good against heavy warships.
War Jong
SHP War Jong
Ships 2 Naginata Riders and 1 Daimyo.
@@ -22946,7 +22946,7 @@
Native Building
NAT Shaolin Temple
Fuchuan. Heavy warship
- Fuchuan. A heavy warship that can train units.
+ Fuchuan, heavy warship. Transport ship that can train units. Good against siege warships.
Fuchuan
SHP Fuchuan
Exalted Fuchuan
@@ -23204,7 +23204,7 @@
Mythical Natives
Build Wonders with Villagers to Advance to the next age.
Use your Villagers to build Wonders to advance to the next age.
- Colonial Age
+ Reformation Age
Use your Villagers to build Wonders to advance to the next age.
Enlightenment Age
Use your Villagers to build Wonders to advance to the next age.
@@ -23264,9 +23264,9 @@
Deadfall
SPC YP Deadfall
Advance in Age with a Villager.
- Colonial Age
+ Reformation Age
Use your Villagers to build a Wonder to go to the next age.
- Colonial Age
+ Reformation Age
The Emperor has honored you with a grant of provisions from the Imperial City.
The Council has provided you with supplies to found a new village.
Villagers gather Food from hunted animals faster.
@@ -23803,7 +23803,7 @@
Bandit Catamaran
GRD Bandit Catamaran
Native Asian boat
- Native boat that can attack or transport units.
+ Light warship. Mercenary transport ship. Good against heavy warships.
Marathan Catamaran
SHP Marathan Catamaran
Treasure guardian
@@ -24883,7 +24883,7 @@
Stable
Samurai Speed Shipment has arrived.
Tekkousen. Heavy warship.
- Tekkousen. Heavy warship.
+ Tekkousen, heavy warship. Good against siege warships.
Tekkousen
SHP Tekkousen
Kick out your ally so that you can choose a new one.
@@ -25141,7 +25141,7 @@
French Expeditionary Force
French Expeditionary Force
Heavy cavalry with a splash attack, good against archers, skirmishers, and artillery / light artillery, good against infantry
- An army of French Gendarmes (Cuirassiers) and Horse Artillery.\n5 Gendarmes: heavy cavalry with a trample attack, good against archers, skirmishers, and artillery.\n2 Horse Artillery: quick-moving artillery that is strong versus infantry.
+ An army of French Dragoons.\n10 Dragoons: ranged cavalry, good against cavalry.
French Expeditionary Army
French Expeditionary Army
Hand infantry, good against cavalry
@@ -25803,9 +25803,9 @@
Get free Gurkhas with every tech at the Consualte, +1 Villager.
Gurkha Aid
Sepoy Rebellion Shipment has arrived.
- Asian Maps
+ Asian-African Maps
- Randomly selects from among all Asian standard maps.
+ Randomly selects from among all Asian and African standard maps.
Gurkha Army
An army of 2 Gurkhas.
Gurkha Squad
@@ -28714,7 +28714,7 @@
Elephant Combat
Camel Combat Shipment has arrived.
Elephant Combat Shipment has arrived.
- Coyote Runners and Disciples
+ Coyote Man and Disciple
Begin Exports
End Exports
Ships a Military Rickshaw that can turn into a Barracks or a Stable.
@@ -28974,7 +28974,7 @@
Look at these villagers. My own people gaze on me with such distrust. I will never get used to it.
Food Silos Shipment has arrived.
Sustainable Agriculture Shipment has arrived.
- Colonial Age Wonders
+ Reformation Age Wonders
Enlightenment Age Wonders
Industrial Age Wonders
Imperial Age Wonders
@@ -29060,7 +29060,7 @@
VIL Discovery Travois
Build a Trading Post here
"This is not our war, but if you build a Trading Post here perhaps we can work together."
- Saltpeter Trade Site
+ Saltpeter Site
SPC YP Saltpeter Trade Site
Saltpeter Site
SPC YP Saltpeter Site
@@ -30036,7 +30036,7 @@
Imperial upgrade for Poleaxemen
6 Poleaxemen +2 Uhlans
7 Poleaxemen +4 Uhlans
- Dhow. Good at exploring, fishing or transport.
+ Dhow, light warship. Exploration ship that can fish. Good against heavy warships.
Dhow. Exploration ship
Colonial Militia can now build defenses such as Outposts and walls.
Veteran Marine
@@ -30081,7 +30081,7 @@
Veteran Fencible
Veteran Fencibles
Composite Bows
- Archer cavalry and infantry have their attack increased.
+ Archer (and Crossbow) cavalry and infantry have their attack increased.
Lumber Camp Wagon
Transforms into a Lumber Camp.
Transforms into a Lumber Camp
@@ -30147,7 +30147,7 @@
Colonel Custer
Polish royal cavalry with a trample attack.
Patriots
- All your Settlers transform into Militia.
+ All your Settlers transform into Militia. Also improves all Militia.
Trade Guard
Town Centers support 10 more population and maximum population cap is increased by 30. Also increases gather rate of nearby units.
Trade Wagon
@@ -30155,7 +30155,7 @@
Fishery
Pirate fishery worth 300 Food.
Native Confederacy Support
- Joining the Native Confederacy increases the amount of warriors you can train from minor tribes and allows military units to train in larger blocks. Also enables Black Powder Boats.
+ Joining the Native Confederacy increases the amount of native warriors you can train from minor tribes and allows military units to train in larger blocks. Also enables Black Powder Boats.
You have joined the Native Confederacy!
Patriot Militia
Fisheries must be built near Fish.
@@ -30164,8 +30164,8 @@
Town Centers cannot be built too close to any starting Town Center.
Repentant Miner
You have used Fame to get 5 Shipments from your Home City.
- An army of French Culverins Royale.\n2 Culverins: light artillery that is good against other artillery and ships.
- An army of French Culverins Royale and Gendarmes (Cuirassiers).\n2 Culverins: light artillery that is good against other artillery and ships.\n3 Gendarmes: heavy cavalry with a trample attack, good against archers, skirmishers, and artillery.
+ An army of French Voltigeurs (Skirmishers).\n6 Voltigeurs: riflemen armed with a long-ranged attack, but low hitpoints.
+ An army of French Hussars.\n8 Hussars: hand cavalry, good against archers, skirmishers, and artillery.
Imperial Gendarmes
Imperial Gendarme
Imperial Age Rush
@@ -30210,7 +30210,7 @@
Advance in Age to unlock new technologies and units.
Enables the Academy and University to generate Export over time.
Import
- Trains sinister outlaws and mercenaries.
+ Trains sinister outlaws and mercenaries. Provides Explorer upgrades.
Control Flag
Capture Control Flags to gain a small experience trickle and line of sight in the area. Military units move faster around flags.
Strategic point
@@ -30268,7 +30268,7 @@
Ships an army of 10 unique native units currently available at the Embassy.
Market Wagon
Markets become cheaper and have better resource exchange rates.
- Moves the Arsenal to the Colonial Age and enables more powerful Arsenal improvements.
+ Moves the Arsenal to the Reformation Age and enables more powerful Arsenal improvements.
Mill Wagon
Mills can now support two more gatherers and become cheaper and stronger.
Transforms into a Mill
@@ -30329,8 +30329,8 @@
Native Ties
Indian Allies\n
Trains:\nMahout\nHowdah\nFlail Elephants\nSiege Elephants\n \nShipments:\nElephants
- Brig
- Brig. Good at exploring, fishing or transport.
+ Explorer's Brig
+ Explorer's Brig. Good at exploring, transport and can build Docks. Cannot die.
Brig. Exploration ship
Heavy Culverins
Heavy Culverin
@@ -30386,17 +30386,17 @@
Pilgrimage
Ships 10 Pilgrims that work faster than normal villagers and don't take up population.
Swedish Allies\n+10% Building Hitpoints
- Trains:\nSakers\nSkarpskytt\nHorse Artillery\n \nShipments:\nTown improvements
+ Trains:\nFalconets\nSkarpskytt\nHorse Artillery\n \nShipments:\nTown improvements
Loyalist Militia
Bakery Wagon
Transforms into a Bakery.
Allows Pilgrims to be trained from Churches.
Northern Logging
Villagers gather Wood faster and ships a Lumber Camp Wagon.
- Ships a large number of Svealand Sakers (Sakers) and Horse Artillery led by a General.
+ Ships a large number of Geshwinda Falconets (Falconets) and Horse Artillery led by a General.
Swedish Brigade
Indelta Grenadier
- Geshwinda Artillery
+ Geshwinda Falconet
Svealand Saker
George Washington is all about militia and giving power to the people. He is not very chatty and usually focuses on the task at hand. He has a strong economy and well organized units.
George Washington
@@ -30470,11 +30470,11 @@
TEAM Artillery Damage Shipment has arrived.
TEAM 1 Bank Wagon
Thatch
- Grants a pirate fleet and increases warship limits.
+ Grants 4 pirate ships and increases warship limits.
Pope Pius IX
Celebrated as a "friend of light" and a reformer of Europe towards freedom and progress, Pope Pius IX is progressive, intellectual, decent, friendly, and open to everybody.
Italians
- Home City gives support and bonuses through Decree cards. Basilica trains powerful religious units. Fame generates faster over time. Best units: Cranequinier, Basilisk Cannon.
+ Home City gives support and bonuses through Decree cards. Basilica trains powerful religious units and Capitol sends mercenary armies. Fame generates faster over time. Best units: Cranequinier, Basilisk Cannon.
Original version of the Italian Military Academy.
Gold and brown version of Italian Military Academy.
Peregrine Institute of Rome
@@ -30569,7 +30569,7 @@
10 Flatbowmen
24 Flatbowmen
Maghrabi Blade
- Arabian unit that throws knives. Good against infantry.
+ Arabian unit that throws knives. Good against heavy cavalry.
Ships a number of Arabian Maghrabi mercenaries.
Hire Arabian Maghrabi
Marauder
@@ -30583,19 +30583,19 @@
An army of Swiss Reislaufer mercenaries.\n4 Reislaufer: elite mercenary armed with a pike, good against cavalry.
An army of German Landsknecht mercenaries.\n5 Landsknecht: flamboyant heavy infantry mercenary.
An army of German Black Riders mercenaries.\n10 Black Riders: heavily armed mercenary cavalry.
- Provides your Church with unique Italian improvements. Also moves the Capitol to the Enlightenment Age.
+ Provides your Basilica with unique Italian improvements. Also moves the Capitol to the Enlightenment Age.
New World Conquest
Royal Decree "Sacred Congregation" Shipment has arrived.
Sacraments
Venetian Gothic
- Architect train limit is increased and Architects can build much faster. Also, they can build Town Centers and Trading Posts extremely fast.
+ Fort and Factory build limits increased.
Royal Training
Fame armies cost less but train slower.
Entrepreneur
Improves your Italian Explorer in combat, makes him free to train (ransom) and gives him a powerful canine companion.
Entrepreneur Shipment has arrived.
Colonel Shipment has arrived.
- An Inquisitor gathers at every Town Center and Inquisitor healing range is increased. Also, Pilgrims are faster.
+ An Inquisitor gathers at every Town Center and Inquisitor healing range is increased. Also, Pilgrims and Architects are faster.
Pavise Shield
Crossbowman and Cranequinier armor and hitpoints increased.
Cranequinier
@@ -30607,7 +30607,7 @@
Swedish Expeditionary Company
Swedish Expeditionary Force
Swedish Expeditionary Army
- An army of Swedish Svealand Sakers (Sakers).\n3 Svealand Sakers: light artillery, good against infantry and artillery.
+ An army of Swedish Geshwinda Falconets (Falconets).\n3 Falconets: light artillery that is better against infantry than buildings.
Ships an additional Explorer's Dog to your colony and increases Wardog limit.
Hounds
TEAM Westward Expansion
@@ -30629,12 +30629,12 @@
Mercenary Force
Mercenary Brigade
Skarpskytt
- An army of Swedish Svealand Sakers (Sakers) and Skarpskytt.\n2 Svealand Sakers: light artillery, good against infantry and artillery.\n6 Skarpskytt: long-ranged skirmisher, good against infantry.
+ An army of Swedish Geshwinda Falconets (Falconets) and Skarpskytt.\n2 Falconets: light artillery that is better against infantry than buildings.\n6 Skarpskytt: long-ranged skirmisher, good against infantry.
An army of Swedish Skarpskytt and Horse Artillery.\n8 Skarpskytt: long-ranged skirmisher, good against infantry.\n2 Horse Artillery: quick-moving artillery that is strong versus infantry.
TEAM Cheap Age Up
- TEAM All Age Up politicians, copuncil members and wonders become cheaper.
+ TEAM All Age Up politicians, council members and wonders become cheaper.
TEAM Cheap Age Up Shipment has arrived.
- TEAM 4 Pilgrims
+ TEAM 3 Pilgrims
Ships a number of Italian Elmeti mercenaries.
Hire Genoese Elmeti
9 Cranequinier
@@ -30642,22 +30642,106 @@
TEAM All artillery attack and hitpoints increased.
TEAM Artillery Combat Shipment has arrived.
Heals injured units. Boosts hitpoints of nearby units.
- TEAM Archaic Infantry Attack
- TEAM Archaic Infantry attack increased.
- TEAM Archaic Infantry Attack Shipment has arrived.
+ Archaic Infantry Attack
+ Pikeman and Crossbowman attack increased.
+ Archaic Infantry Attack Shipment has arrived.
Ships 25 Pikemen and 1 Flag Bearer.
Retinues
Archaic Infantry Hitpoints
- Archaic Infantry hitpoints increased.
+ Pikeman and Crossbowman hitpoints increased.
Archaic Infantry Hitpoints Shipment has arrived.
Archaic Infantry Combat
- Archaic Infantry attack and hitpoints increased.
+ Pikeman and Crossbowman attack and hitpoints increased.
Archaic Infantry Combat Shipment has arrived.
6 Sakers
8 Sakers
Hussar and Cranequinier hitpoints increased.
Hussar and Cranequinier attack increased.
Marine range and line of sight increased.
- Petrine Reforms Shipment has arrived.
+ Foreign Reforms Shipment has arrived.
+ Hussar and Cranequinier attack and hitpoints increased.
+ Spiritual Grace
+ Sacraments Shipment has arrived.
+ All Basilica units train faster and their cost is changed to Fame.
+ Ships a number of Swedish Fusilier mercenaries. Instead of Uhlans you get extra Fusiliers.
+ Ships a number of Italian Elmeti mercenaries. Instead of Uhlans you get extra Elmeti.
+ Ships a number of Polish Winged Knights mercenaries. Instead of Uhlans you get extra Winged Knights.
+ Zebra
+ Dromedary
+ Industrial-scale herding! You get 1 Bison for every 3 minutes of game length, up to 30 minutes.
+ Bison Herding
+ Foreign Reforms
+ Caroleans
+ Swedish
+ Home City gives support and bonuses through Decree cards. Starts with a Fishing Boat on water maps and gets a free Fishing Boat each Age. Can build Lumber Camps and Fortified Walls. Best units: Skarpskytt, Grenadier.
+ Christina Augusta
+ Christina is remembered as one of the most educated women of the 1600s. She was fond of books, manuscripts, paintings, and sculptures. She was intelligent, fickle and moody; she rejected the sexual role of a woman.
+ When this Shipment arrives, all of your current Fame is exchanged for a lesser amount of Coin.
+ King's Reward
+ King's Reward Shipment has arrived.
+ Imperial upgrade for Skarpskytts.
+ Imperial Skarpskytts
+ Imperial Skarpskytt
+ Skarpskytt attack and hitpoints increased.
+ Guard Skarpskytts
+ Guard Skarpskytt
+ Vandrare
+ Imperial upgrade for Vandrares.
+ Imperial Vandrares
+ Imperial Vandrare
+ Vandrare attack and hitpoints increased.
+ Guard Vandrares
+ Guard Vandrare
+ Ranged cavalry armed with archaic firearms. Good against cavalry and artillery.
+ Veteran Vandrares
+ Veteran Vandrare
+ Royal Decree "Kalmar Union" Shipment has arrived.
+ Kalmar Union
+ Provides your Church with unique Swedish improvements. Also moves the Capitol to the Enlightenment Age.
+ Allotment System
+ Ordinance of Alsno
+ Fekete Sereg
+ Ships 10 Fekete Sereg (Poleaxemen) soldiers from your foreign allies.
+ Veteran Skarpskytt
+ 3 Inquisitors
+ 7 Turkeys
+ Redoubt
+ Wall siege armor increased.
+ Fortress
+ 3 Fire Ships
+ Barricades
+ Industrial-scale herding! You get 1 Deer for every 3 minutes of game length, up to 30 minutes.
+ Deer Herding
+ Industrial-scale herding! You get 1 Turkey for every 3 minutes of game length, up to 30 minutes.
+ Turkey Herding
+ Trade Act
+ For the rest of the game, small trickles of Food and Coin enrich you.
+ Trade Act shipment has arrived.
+ Basilica
+ 2 Warriors will gather at each Teepee.
+ Warrior Defense
+ Black powder made with saltpeter increases gunpowder units range.
+ Fine Powder
+ Ivory hunting! You get 1 Elephant for every 3 minutes of game length, up to 30 minutes.
+ Randomly selects from among all water standard maps.
+ TEAM All players receive some playful pet bears.
+ Clan Service
+ Clan Service Shipment has arrived.
+ Wildfire
+ Firepits can be built in the Discovery Age, are stronger, faster to build and become free.
+ Wildfire Shipment has arrived.
+ Venom Extract
+ Medicine made from venom extract makes all your healers heal faster.
+ Rich Harvest
+ Ivory
+ Water Maps
+ Bishari Archer
+ Master Bishari Archer
+ Saltpeter Master Training
+ Saltpeter warrior attack and hitpoints increased.
+ Initiated Bishari Archer
+ Saltpeter Initiation Training
+ African ranged cavalry
+ Sufi ranged cavalry. Good against cavalry.
\ No newline at end of file
diff --git a/Data/techtreem.xml b/Data/techtreem.xml
index 5f79753..1de9193 100644
--- a/Data/techtreem.xml
+++ b/Data/techtreem.xml
@@ -27,13 +27,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -268,12 +268,6 @@
NativeHouseAztec
-
- NatJaguarWarrior
-
-
- NatEagleWarrior
-
NatChinampa
ChampionAztecs
NatGarlandWars
@@ -387,13 +381,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -687,13 +681,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -740,9 +734,6 @@
Envoy
-
- Barracks
-
ImperialLongbowmen
ArtilleryDepot
@@ -952,13 +943,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -1215,13 +1206,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -1454,13 +1445,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -1693,13 +1684,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -1960,13 +1951,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -4824,6 +4815,7 @@
UNOBTAINABLE
Shadow
+ BigDeer
BigDockCipactli
LivestockPen
@@ -5083,6 +5075,7 @@
EliteHorsemen
EliteAennas
FieldCannon
+ BigDeer
@@ -5341,16 +5334,15 @@
UNOBTAINABLE
Shadow
+ BigWarrior
BigDockCipactli
+ BigBisons
LivestockPen
Dock
-
-
-
Factory
@@ -5588,6 +5580,7 @@
EliteBowRider
StrongWarHut
MightyWarHut
+ BigBisons
@@ -5620,6 +5613,7 @@
EliteMacehualtins
ElitePumaMen
EliteCoyotemen
+ BigTurkey
@@ -6942,6 +6936,8 @@
ypNatHonoredJesuit
ypNatDisciplinedSufi
ypNatHonoredSufi
+ ypNatDisciplinedSaltpeter
+ ypNatHonoredSaltpeter
@@ -6980,6 +6976,8 @@
ypNatHonoredShaolin
ypNatHonoredJesuit
ypNatDisciplinedJesuit
+ ypNatDisciplinedSaltpeter
+ ypNatHonoredSaltpeter
@@ -7328,11 +7326,11 @@
YPNatSufiSharia
YPNatSufiPilgramage
- ypNatWarElephant
+ CamelArcher
- ypNatHonoredSufi
+ ypNatHonoredSaltpeter
+ ypNatDisciplinedSaltpeter
YPNatSufiFasting
- ypNatDisciplinedSufi
ypNativeTreatySufi
ypNativeTradeTreatySufi
YPNativeJunk
@@ -9368,7 +9366,7 @@
ypHCConsulateRelations
-
+
ypHCConsulateRelations
@@ -10151,6 +10149,8 @@
ChampionZapotec
ypMarketWheelbarrow2
ypMarketWheelbarrow
+ ypNatDisciplinedSaltpeter
+ ypNatHonoredSaltpeter
@@ -10158,7 +10158,20 @@
UNOBTAINABLE
Shadow
+
+
+
+
+ ypNatWarElephant
+
+ ypNatHonoredSufi
+ ypNatDisciplinedSufi
+ VenomExtract
+ NatElephants
+ NatFinePowder
+ NativeTreatySaltpeter
ypNativeEmbassyEnableShadow
+ ypNativeTradeTreatySaltpeter
@@ -10689,73 +10702,7 @@
AbstractHandInfantry
- Crossbowman
-
-
- NatBlackwoodArcher
-
-
- NatBlowgunWarrior
-
-
- NatBolasWarrior
-
-
- xpEagleKnight
-
-
- NatSharktoothBowman
-
-
- Longbowman
-
-
- Flatbowman
-
-
- xpWarBow
-
-
- xpAenna
-
-
- xpArrowKnight
-
-
- xpMacehualtin
-
-
- NatMercBlackwoodArcher
-
-
- ypConsulateShinobi
-
-
- ypShinobiHorse
-
-
- ypYumi
-
-
- ypConsulateBestieros
-
-
- NatMercBlowgunWarrior
-
-
- NatBlowgunAmbusher
-
-
- ypWokouBlindMonk
-
-
- ypRepentantBlindMonk
-
-
- ypMercIronTroop
-
-
- ypRepentantIronTroop
+ AbstractArcher
@@ -10893,101 +10840,18 @@
- Musketeer
-
-
- Janissary
-
-
- Grenadier
-
-
- MercHighlander
-
-
- Musketeer
-
-
- Janissary
-
-
- MercHighlander
-
-
- Grenadier
-
-
- Grenadier
-
-
- MercHighlander
-
-
- Janissary
-
-
- Musketeer
-
-
- Musketeer
-
-
- Janissary
-
-
- MercHighlander
-
-
- Grenadier
-
-
- MercFusilier
-
-
- MercFusilier
-
-
- MercFusilier
-
-
- MercFusilier
-
-
- ypAshigaru
-
-
- ypAshigaru
-
-
- ypAshigaru
-
-
- ypAshigaru
-
-
- BoneguardRifleman
+ AbstractHeavyInfantry
- BoneguardRifleman
+ AbstractHeavyInfantry
- BoneguardRifleman
-
-
- BoneguardRifleman
-
-
- ypConsulateStadhouders
+ AbstractHeavyInfantry
- ypConsulateStadhouders
-
-
- ypConsulateStadhouders
-
-
- ypConsulateStadhouders
+ AbstractHeavyInfantry
+ BayonetHand
@@ -11015,10 +10879,7 @@
Cacadore
- SharpshooterS
-
-
- NatRifleman
+ Sharpshooter
MercJaeger
@@ -11026,11 +10887,14 @@
Strelet
+
+ AbusGun
+
NatTracker
- AbusGun
+ NatRifleman
xpMusketWarrior
@@ -11056,6 +10920,15 @@
ypThuggee
+
+ ypConsulateRogersRanger
+
+
+ ypConsulatePrussianNeedleGun
+
+
+ RiflemanUSJ
+
@@ -14682,9 +14555,6 @@
YPDockAsian
-
- TownCenter
-
@@ -14762,7 +14632,7 @@
780793
Shadow
-
+
@@ -24360,9 +24230,15 @@
Imam
-
+
Missionary
+
+ Inquisitor
+
+
+ Inquisitor
+
Missionary
@@ -24372,8 +24248,8 @@
Priest
-
- Missionary
+
+ Inquisitor
xpMedicineManAztec
@@ -24398,7 +24274,7 @@
AbstractInfantry
-
+
xpSkullKnight
@@ -26878,6 +26754,21 @@
YPNatBhaktiReinforcedGuantlets
+
+ VenomExtract
+
+
+ NatFinePowder
+
+
+ NatElephants
+
+
+ ypNatHonoredSaltpeter
+
+
+ ypNatDisciplinedSaltpeter
+
@@ -29841,6 +29732,9 @@
AbstractCavalry
+
+
+
@@ -29930,6 +29824,9 @@
xpLakotaWarchief
+
+
+
@@ -31453,11 +31350,11 @@
2862
- 44042
+ 781305
1.0000
40.0000
UNOBTAINABLE
- ui\techs\hc_extensive_fortifications\hc_extensive_fortifications
+ ui\techs\native\aggressive_policy
44041
HomeCity
@@ -31468,9 +31365,12 @@
WarHut
-
+
Lookout
+
+ WarHut
+
@@ -32033,7 +31933,7 @@
1.0000
40.0000
UNOBTAINABLE
- units\artillery\falconet\falconet_icon_64x64
+ ui\techs\native\iroquois_siege_party
44110
HomeCity
@@ -33323,7 +33223,7 @@
2967
44325
- 1000.0000
+ 1500.0000
1.0000
60.0000
UNOBTAINABLE
@@ -34975,7 +34875,7 @@
44671
HomeCity
-
+
@@ -36329,12 +36229,15 @@
Industrialize
+
+ 46345
+
3182
45222
1.0000
- 40.0000
+ 20.0000
UNOBTAINABLE
ui\units\colonial_militia_icon_rev
HomeCity
@@ -36342,13 +36245,16 @@
+
+
+
3183
45223
1.0000
- 40.0000
+ 20.0000
UNOBTAINABLE
ui\Units\gatling_gun_icon_rev
HomeCity
@@ -36362,7 +36268,7 @@
3184
45224
1.0000
- 40.0000
+ 20.0000
UNOBTAINABLE
units\trade\fort_wagon_icon_64x64_rev
HomeCity
@@ -36379,7 +36285,7 @@
3185
45225
1.0000
- 40.0000
+ 20.0000
UNOBTAINABLE
ui\units\ironclad_icon_rev
HomeCity
@@ -37425,6 +37331,9 @@
+
+
+
@@ -37562,6 +37471,9 @@
xpWarRifle
+
+
+
@@ -37586,6 +37498,9 @@
+
+
+
@@ -37643,10 +37558,78 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
+ Redoubt
WarCamp
@@ -37659,21 +37642,9 @@
-
- Sapper
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -37681,12 +37652,6 @@
xpColonialMilitia
-
- TownCenter
-
-
- Factory
-
@@ -37695,7 +37660,6 @@
xpColonialMilitia
XPRevolution
- CalltoArmsR
FortFrontier
@@ -37726,9 +37690,6 @@
AbstractVillager
-
- Surgeon
-
@@ -37746,15 +37707,83 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
-
+ Redoubt
+
-
- Surgeon
+
+ xpGatlingGun
WarCamp
@@ -37768,24 +37797,9 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -37793,9 +37807,6 @@
xpColonialMilitia
-
- TownCenter
-
xpGatlingGun
@@ -37803,11 +37814,7 @@
-
- xpGatlingGun
-
XPRevolution
- CalltoArmsR
FortFrontier
@@ -37852,13 +37859,78 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
-
- Surgeon
-
+ Redoubt
WarCamp
@@ -37871,24 +37943,9 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -37896,9 +37953,6 @@
xpColonialMilitia
-
- TownCenter
-
@@ -37911,7 +37965,6 @@
SaloonWildWest
XPRevolution
- CalltoArmsR
FortFrontier
@@ -37959,12 +38012,80 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
-
- Surgeon
+ Redoubt
+
+ AbstractNativeWarrior
WarCamp
@@ -37978,24 +38099,9 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -38003,9 +38109,6 @@
xpColonialMilitia
-
- TownCenter
-
@@ -38014,8 +38117,6 @@
XPRevolution
- ImpLegendaryNatives
- CalltoArmsR
FortFrontier
@@ -38056,19 +38157,90 @@
15.0000
UNOBTAINABLE
ui\techs\revolution
- 45965
+ 45959
CountsTowardEconomicScore
RevoltTech
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
-
- Surgeon
+ Redoubt
+
+
+
+
+ xpGatlingGun
WarCamp
@@ -38082,24 +38254,9 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -38107,18 +38264,11 @@
xpColonialMilitia
-
- TownCenter
-
-
- Unit
-
XPRevolution
- CalltoArmsR
FortFrontier
@@ -38166,16 +38316,81 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
+ Redoubt
Mortar
-
- Surgeon
-
WarCamp
@@ -38188,24 +38403,9 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -38213,9 +38413,6 @@
xpColonialMilitia
-
- TownCenter
-
@@ -38224,7 +38421,6 @@
XPRevolution
- CalltoArmsR
FortFrontier
@@ -38272,13 +38468,78 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
-
- Surgeon
-
+ Redoubt
WarCamp
@@ -38291,24 +38552,9 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -38316,9 +38562,6 @@
xpColonialMilitia
-
- TownCenter
-
@@ -38330,7 +38573,6 @@
xpIronclad
XPRevolution
- CalltoArmsR
FortFrontier
@@ -38381,16 +38623,81 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
HCBlockadeNative
+ Redoubt
Hussar
-
- Surgeon
-
WarCamp
@@ -38403,24 +38710,9 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
-
- FlagBearer
-
BlackPowderWagon
@@ -38428,9 +38720,6 @@
xpColonialMilitia
-
- TownCenter
-
@@ -38439,8 +38728,6 @@
XPRevolution
-
- CalltoArmsR
FortFrontier
@@ -38843,6 +39130,9 @@
AbstractCavalry
+
+
+
@@ -38863,6 +39153,9 @@
xpWarRifle
+
+
+
@@ -39118,6 +39411,9 @@
+
+
+
@@ -39641,7 +39937,7 @@
60.0000
UNOBTAINABLE
ui\units\fusilier_icon
- 46545
+ 781259
HomeCity
@@ -39657,7 +39953,7 @@
60.0000
UNOBTAINABLE
ui\Units\elmeti_icon
- 46547
+ 781260
HomeCity
@@ -39940,14 +40236,23 @@
46819
HomeCity
-
- NativeEmbassy
+
+ xpCoupRider
-
- NativeEmbassyN
+
+ xpCoupRider
-
- NativeEmbassyI
+
+ NatHuaminca
+
+
+ NatHuaminca
+
+
+ NatAxeRiderDogSoldier
+
+
+ NatAxeRiderDogSoldier
NativeEmbassy
@@ -40640,6 +40945,24 @@
BigIroquoisScoutingParty
+
+ ConSupport
+
+
+ ypConsulateFrenchBrigadeN
+
+
+ ypConsulateSpanishBrigadeN
+
+
+ ypConsulateBritishBrigadeN
+
+
+ BigDockCipactli
+
+
+ BigDockCipactli
+
@@ -40691,6 +41014,42 @@
BigFarmHorsemanship
+
+ ConSupport
+
+
+ ypConsulateFrenchBrigadeN
+
+
+ ypConsulateSpanishBrigadeN
+
+
+ ypConsulateBritishBrigadeN
+
+
+ BigDockCipactli
+
+
+ BigDockCipactli
+
+
+ BigBisons
+
+
+ BigBisons
+
+
+ BigDeer
+
+
+ BigDeer
+
+
+ BigTurkey
+
+
+ BigTurkey
+
@@ -40760,6 +41119,24 @@
BigFarmCinteotl
+
+ ConSupport
+
+
+ ypConsulateFrenchBrigadeN
+
+
+ ypConsulateSpanishBrigadeN
+
+
+ ypConsulateBritishBrigadeN
+
+
+ BigDockCipactli
+
+
+ BigDockCipactli
+
@@ -41083,49 +41460,55 @@
Colonialize
-
+
Priest
-
+
Missionary
-
+
NatMedicineMan
-
+
Surgeon
-
+
xpMedicineMan
-
+
Imam
-
+
+ Inquisitor
+
+
Imam
-
+
Surgeon
-
+
Priest
-
+
Missionary
-
+
xpMedicineMan
-
+
NatMedicineMan
+
+ Inquisitor
+
3425
46982
- 400.0000
- 400.0000
+ 350.0000
+ 350.0000
15.0000
UNOBTAINABLE
ui\techs\native\State_Religion
@@ -41154,6 +41537,9 @@
Surgeon
+
+ Inquisitor
+
Imam
@@ -41172,6 +41558,9 @@
NatMedicineMan
+
+ Inquisitor
+
@@ -42366,7 +42755,7 @@
3481
- 47189
+ 42880
1.0000
40.0000
UNOBTAINABLE
@@ -42458,11 +42847,12 @@
+ 781320
3485
- 47195
+ 781321
1.0000
40.0000
UNOBTAINABLE
@@ -42479,6 +42869,25 @@
NativeScout
+
+ NatMedicineMan
+
+
+ xpMedicineMan
+
+
+ Priest
+
+
+ Missionary
+
+
+ Imam
+
+
+ Surgeon
+
+ 781322
@@ -45119,13 +45528,13 @@
3748
- 61151
+ 781336
200.0000
150.0000
10.0000
UNOBTAINABLE
ui\techs\asians\disciplined_natives
- 61150
+ 781334
YPNativeImprovement
CountsTowardMilitaryScore
UpgradeTech
@@ -45411,13 +45820,13 @@
3757
- 61187
+ 781333
400.0000
300.0000
10.0000
UNOBTAINABLE
ui\techs\asians\honered_natives
- 61186
+ 781334
UpgradeTech
CountsTowardMilitaryScore
YPNativeImprovement
@@ -46656,7 +47065,7 @@
AbstractWall
61587
-
+
AbstractWall
@@ -47729,10 +48138,10 @@
ypKensei
70359
-
+
ypKensei
-
+
ypKensei
@@ -48548,7 +48957,7 @@
1.0000
40.0000
UNOBTAINABLE
- ui\techs\native\Wood_Crafting
+ ui\techs\native\Wood_working
62426
HomeCity
@@ -58909,6 +59318,8 @@
ConsulateFortifiedWalls
ypConsulateOttomansSettlerCombat
ConsulateLumberWagon
+ SwedishMinutemen
+ SwedishBrig
@@ -62952,6 +63363,7 @@
ypNatHonoredShaolin
ypNatHonoredSufi
ypNatHonoredUdasi
+ ypNatHonoredSaltpeter
780789
@@ -64087,7 +64499,7 @@
733155
- 77793
+ 781303
800.0000
80.0000
UNOBTAINABLE
@@ -64427,7 +64839,7 @@
1200.0000
90.0000
UNOBTAINABLE
- units\asians\consulate\french_armies\french_brigade_icon_64
+ ui\french_2
66606
CheckLandHCGatherPoint
CountsTowardMilitaryScore
@@ -64596,7 +65008,7 @@
733170
47078
1.0000
- 50.0000
+ 20.0000
UNOBTAINABLE
ui\techs\infinite_privateers
HomeCity
@@ -64696,7 +65108,7 @@
-
+
@@ -64712,6 +65124,7 @@
UNOBTAINABLE
Shadow
+ Redoubt
ypConsulateUSABrigadeFame
VeteranRangersShadow
VeteranRiflemenShadow
@@ -64723,13 +65136,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -65096,9 +65509,8 @@
- HCBlockade
+ HCBlockade
HCBlockadeNative
-
@@ -66773,10 +67185,10 @@
733225
- 77793
+ 781303
600.0000
600.0000
- 80.0000
+ 60.0000
UNOBTAINABLE
ui\techs\bastion\bastion
23451
@@ -66798,10 +67210,10 @@
733226
- 77793
+ 781303
600.0000
600.0000
- 80.0000
+ 60.0000
UNOBTAINABLE
ui\techs\bastion\bastion
23451
@@ -66826,7 +67238,7 @@
77794
400.0000
200.0000
- 80.0000
+ 60.0000
UNOBTAINABLE
ui\techs\stone_walls\stone_walls
23451
@@ -67729,8 +68141,8 @@
733264
31112
- 1500.0000
- 1500.0000
+ 1550.0000
+ 1550.0000
30.0000
UNOBTAINABLE
ui\techs\imperial_navy\imperial_navy
@@ -67742,10 +68154,10 @@
Imperialize
-
+
Frigate
-
+
Frigate
@@ -67837,8 +68249,8 @@
733268
780938
- 1500.0000
- 1500.0000
+ 1550.0000
+ 1550.0000
30.0000
UNOBTAINABLE
ui\techs\imperial_navy\imperial_navy
@@ -67852,10 +68264,10 @@
-
+
Monitor
-
+
Monitor
@@ -68922,7 +69334,7 @@
Mercenary
-
+
Building
@@ -69116,6 +69528,9 @@
BlackBoat
+
+
+
@@ -69286,7 +69701,7 @@
733353
42330
1.0000
- 40.0000
+ 20.0000
UNOBTAINABLE
ui\inffac
HomeCity
@@ -69531,6 +69946,73 @@
Industrialize
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImpLegendaryNatives
+ ImperialHalberdiers
+ ImperialDragoons
+ ImperialRedcoat
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWarNew
+ ImperialHussars
+ ImperialLongbowmen
+ ImperialMonitors
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialSchutzens
+ ImperialSkirmishers
+ ImperialCarabineer
+ ImperialRoyalHussar
+ ImperialNassauers
+ ImperialCannon
+ ImperialManOWar
+ ImperialLancers
+ ImperialGendarme
+ ImperialVoltigeur
+ ImperialMusketeers
+ ImperialHussarsF
+ ImperialFlatbowman
+ ImperialWarWagons
+ ImperialCzapkaUhlans
+ ImperialNeedleGun
+ ImperialDopplesoldner
+ ImperialHowitzerNew
+ ImperialCrossbowmen
+ ImperialAzaps
+ ImperialSpahi
+ ImperialAbusGun
+ ImperialCavalryArchers
+ ImperialJanissaries
+ ImperialBaratcu
+ ImperialBombard
+ ImperialHussars
+ ImperialCacadores
+ ImperialJinetes
+ ImperialGuerreiros
+ ImperialDrabants
+ ImperialRabaulds
+ ImperialTartarLoyalist
+ ImperialStrelets
+ ImperialOprichniks
+ ImperialGreatCannon
+ ImperialHorseArtilleryNew
+ ImperialEspada
+ ImperialTercio
+ ImperialGarrochistas
+ ImperialMonitorsNew
+ ImperialMountedCrossbowman
+ ImperialSaker
+ ImperialSharpshooter
+ ImperialPistolS
Spies
HCBlockade
SpiesNative
@@ -69550,9 +70032,6 @@
AbstractWarShip
-
- Surgeon
-
WarCamp
@@ -69565,18 +70044,6 @@
-
- Sapper
-
-
- Factory
-
-
- Outpost
-
-
- Blockhouse
-
AsianFireship
@@ -69590,9 +70057,6 @@
xpColonialMilitia
-
- TownCenter
-
xpGatlingGun
@@ -69601,7 +70065,6 @@
XPRevolution
- CalltoArmsR
FortFrontier
@@ -69757,6 +70220,12 @@
+
+ USColonialMilitia
+
+
+ USColonialMilitia
+
@@ -70487,7 +70956,7 @@
2000.0000
90.0000
UNOBTAINABLE
- ui\techs\native\Dance2
+ ui\dance9
.599609375 .607421875 .796875 .908203125
780826
CheckLandHCGatherPoint
@@ -70510,6 +70979,9 @@
+
+
+
@@ -70518,7 +70990,7 @@
2000.0000
90.0000
UNOBTAINABLE
- ui\techs\native\Dance2
+ ui\dance99
.599609375 .607421875 .796875 .908203125
780824
ypConsulateImprovementImperial
@@ -70541,6 +71013,9 @@
+
+
+
@@ -70549,7 +71024,7 @@
2000.0000
90.0000
UNOBTAINABLE
- ui\techs\native\Dance2
+ ui\dance999
.599609375 .607421875 .796875 .908203125
780825
ypConsulateImprovementImperial
@@ -70572,6 +71047,9 @@
+
+
+
@@ -71046,13 +71524,13 @@
xpSpy
-
+
xpSpy
Surgeon
-
+
Surgeon
@@ -71151,7 +71629,7 @@
PoliticianMusketeerSpanish
PoliticianGovernor
PoliticianBishop
- PoliticianCavalierSpanish
+ PoliticianTycoon
PoliticianSergeantSpanish
Plantation
@@ -71181,7 +71659,7 @@
CWallGate
- Church
+ BasilicaIt
FishingBoat
@@ -71208,7 +71686,7 @@
WallConnector
ImperialCrossbowmenIt
- UnlockPoliticianWarMinisterSpanish
+ PoliticianViceroyPortuguese
UnlockPoliticianEngineerSpanish
UnlockPoliticianScoutSpanish
UnlockPoliticianAdmiralSpanish
@@ -71339,8 +71817,8 @@
733428
781154
- 1500.0000
- 1500.0000
+ 1550.0000
+ 1550.0000
30.0000
UNOBTAINABLE
ui\techs\imperial_artillery\imperial_artillery
@@ -71351,10 +71829,10 @@
Imperialize
-
+
Cannon
-
+
Cannon
@@ -71687,7 +72165,8 @@
733444
781183
- 250.0000
+ 350.0000
+ 350.0000
15.0000
UNOBTAINABLE
ui\architecture
@@ -71700,16 +72179,10 @@
- Architect
-
-
- Architect
-
-
- Architect
+ FortFrontier
-
- Architect
+
+ Factory
@@ -71730,14 +72203,14 @@
AbstractBannerArmy
-
+
AbstractBannerArmy
733446
- 781182
+ 781256
200.0000
15.0000
UNOBTAINABLE
@@ -71756,6 +72229,9 @@
Pilgrim
+
+ Architect
+
@@ -71796,17 +72272,17 @@
781193
HomeCity
-
+
Crossbowman
- Crossbowman
+ MountedCrossbowman
MountedCrossbowman
- MountedCrossbowman
+ Crossbowman
781195
@@ -71876,16 +72352,16 @@
TeamTech
781229
-
+
AgeUpgrade
-
+
AgeUpgrade
-
+
AbstractWonder
-
+
AbstractWonder
@@ -71900,7 +72376,7 @@
HomeCity
TeamTech
-
+
@@ -71961,16 +72437,15 @@
1.0000
40.0000
UNOBTAINABLE
- ui\hc_team_hand_infantry_damage
+ ui\hc_hand_infantry_damage
781239
HomeCity
- TeamTech
-
- AbstractHandInfantry
+
+ Pikeman
-
- AbstractArcher
+
+ Crossbowman
781240
@@ -71985,11 +72460,11 @@
781244
HomeCity
-
- AbstractHandInfantry
+
+ Pikeman
-
- AbstractArcher
+
+ Crossbowman
781245
@@ -72004,17 +72479,17 @@
781247
HomeCity
-
- AbstractHandInfantry
+
+ Pikeman
-
- AbstractArcher
+
+ Pikeman
-
- AbstractHandInfantry
+
+ Crossbowman
-
- AbstractArcher
+
+ Crossbowman
781248
@@ -72072,14 +72547,20 @@
40.0000
UNOBTAINABLE
ui\techs\hc_cavalry_combat\hc_cavalry_combat
- 35224
+ 781255
HomeCity
- AbstractHandCavalry
+ Hussar
- AbstractHandCavalry
+ MountedCrossbowman
+
+
+ Hussar
+
+
+ MountedCrossbowman
41805
@@ -72091,7 +72572,7 @@
40.0000
UNOBTAINABLE
ui\techs\hc_cavalry_hitpoints\hc_cavalry_hitpoints
- 35122
+ 781251
HomeCity
@@ -72124,7 +72605,7 @@
733463
- 23680
+ 781266
1.0000
40.0000
UNOBTAINABLE
@@ -72147,4 +72628,1210 @@
781254
+
+ 733464
+ 781182
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ ui\sacraments
+ 781258
+ HomeCity
+
+
+ Inquisitor
+
+
+ Architect
+
+
+ Pilgrim
+
+
+ Inquisitor
+
+
+ Architect
+
+
+ Pilgrim
+
+
+ Inquisitor
+
+
+ Architect
+
+
+ Pilgrim
+
+ 781257
+
+
+
+ 733465
+ 23335
+ UNOBTAINABLE
+ Shadow
+
+
+ AbstractHandInfantry
+
+
+ AbstractHandInfantry
+
+
+ AbstractHandInfantry
+
+
+ AbstractHandInfantry
+
+
+
+
+ 733466
+ 37520
+ 1000.0000
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ units\cavalry\light_cavalry\wingedk_icon
+ 781261
+ HomeCity
+
+
+
+
+
+
+
+ 733467
+ 781265
+ 300.0000
+ 300.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\bigbison
+ .798828125 .3046875 .99609375 .60546875
+ 781264
+ CountsTowardEconomicScore
+ CheckLandHCGatherPoint
+ NativeDance
+
+ Colonialize
+
+
+
+
+
+
+
+
+
+
+
+ 733468
+ UNOBTAINABLE
+ Shadow
+ CheckLandHCGatherPoint
+ YPInfiniteTech
+
+
+
+
+
+
+
+ 733469
+ UNOBTAINABLE
+ Shadow
+
+
+ LumberCamp
+
+ ChurchFortifiedWalls
+ ChurchLumberCamp
+ ChurchAxe
+
+ Musketeer
+
+ VeteranMusketeers
+ GuardMusketeers
+ ImperialMusketeers
+
+ Grenadier
+
+ GuardGrenadiers
+ VeteranGrenadiers
+ ImperialGrenadiers
+ IncendiaryGrenades
+
+ Church
+
+
+ GoldMiner
+
+
+ xpSpy
+
+
+ xpSpy
+
+
+ Surgeon
+
+
+ Surgeon
+
+
+ Surgeon
+
+ EconomicAlliance
+ MilitaryAlliance
+ ypConsulateGermansBrigadeFame
+
+ CoveredWagonPlus
+
+
+ Capitol
+
+
+
+
+ SpyglassE
+ Ranching
+
+ MercArmyG
+
+
+ ypConsulateArmySwedish11
+
+
+ ypConsulateArmySwedish33
+
+
+ ypConsulateArmySwedish22
+
+
+ Envoy
+
+
+ PistolS
+
+ GuardCrossbowmen
+ GuardPikemen
+ Civilization
+
+ Explorer
+
+
+ TownCenter
+
+ AAStandardStartingTechs
+
+ HouseEast
+
+ VeteranHussars
+ GuardHussars
+
+ Mill
+
+
+ Settler
+
+ GuardSharpshooter
+ VeteranPistols
+ GuardPistols
+ ImperialPistols
+ VeteranCrossbowmen
+ ImperialDragoons
+ GuardDragoons
+ ImperialHussars
+ ImperialSharpshooter
+
+ Hussar
+
+
+ CapitolD
+
+
+ ArtilleryDepot
+
+
+ Stable
+
+
+ Barracks
+
+ PoliticianSergeantGerman
+ PoliticianBishopGerman
+ PoliticianPirate
+ PoliticianTycoon
+ PoliticianGeneral
+ PoliticianPresidenteEU
+ PoliticianCavalierGerman
+ PoliticianPhilosopherPrince
+
+ Plantation
+
+
+ TradingPost
+
+
+ Mortar
+
+
+ Outpost
+
+
+ Dock
+
+ XPTrickle
+
+ Market
+
+
+ Arsenal
+
+ VeteranPikemen
+ ImperialCannon
+
+ CWallGate
+
+
+ Church
+
+
+ WallStraight2
+
+
+ WallStraight5
+
+
+ WallConnector
+
+
+ SharpshooterS
+
+
+ Crossbowman
+
+
+ Pikeman
+
+
+ Priest
+
+
+ FieldHospital
+
+
+ FishingBoat
+
+ ImperialPikemen
+ ImperialCrossbowmen
+ UnlockPoliticianViceroyGerman
+ UnlockPoliticianEngineerGerman
+ UnlockPoliticianMarksmanGerman
+ UnlockPoliticianExiledPrinceGerman
+ UnlockPoliticianQuartermasterGerman
+ UnlockPoliticianNaturalistGerman
+
+ Dragoon
+
+
+ Culverin
+
+
+ Falconet
+
+
+ Monitor
+
+
+ Frigate
+
+
+ Galleon
+
+
+ Caravel
+
+ Levy
+
+ Factory
+
+ ImperialCannon
+ ImperialFieldGun
+ FieldGun
+ VeteranSharpshooterShadow
+ ImperialManOWar
+ ImperialMonitors
+
+ SettlerWagon
+
+
+ SPCFortCenter
+
+ ImperialHorseArtillery
+ HeavyHorseArtillery
+
+ xpHorseArtillery
+
+
+ xpSpy
+
+ Howitzer
+ ImperialHowitzer
+ HowitzerNew
+ ImperialHowitzerNew
+
+
+
+ 733470
+ 781273
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ ui\ransom
+ 781272
+ HomeCity
+
+ 781274
+
+
+
+
+ 733471
+ 0.0000
+ UNOBTAINABLE
+ Shadow
+
+ Fortressize
+
+
+
+ SharpshooterS
+
+
+
+ SharpshooterS
+
+
+
+
+ 733472
+ UNOBTAINABLE
+ ui\post_game\time_line_age_2
+
+ Colonialize
+ 780790
+
+
+
+ 733473
+ UNOBTAINABLE
+ ui\post_game\time_line_age_3
+ Shadow
+
+ Fortressize
+
+ TownCenter
+
+ 780790
+
+
+
+ 733474
+ UNOBTAINABLE
+ ui\post_game\time_line_age_4
+ Shadow
+
+ Industrialize
+ Crackshot
+ 780790
+ XPRevolutionSantander
+ XPRevolutionHidalgo
+
+
+
+ 733475
+ UNOBTAINABLE
+ ui\post_game\time_line_age_5
+ Shadow
+
+ Imperialize
+ XPRevolutionSantander
+ XPRevolutionHidalgo
+ 780790
+
+
+
+ 733476
+ 781279
+ 600.0000
+ 600.0000
+ 30.0000
+ UNOBTAINABLE
+ ui\techs\guard_infantry\guard_infantry
+ 781278
+ CountsTowardMilitaryScore
+ UpgradeTech
+
+ Industrialize
+
+
+
+ SharpshooterS
+
+
+
+ SharpshooterS
+
+
+
+
+
+
+
+ 733477
+ 781276
+ 1500.0000
+ 1500.0000
+ 30.0000
+ UNOBTAINABLE
+ ui\techs\imperial_infantry\imperial_infantry
+ 781275
+ CountsTowardMilitaryScore
+ UpgradeTech
+
+ GuardSharpshooter
+ Imperialize
+
+
+
+
+ SharpshooterS
+
+
+ SharpshooterS
+
+
+
+
+ 733477
+ 36216
+ UNOBTAINABLE
+ units\artillery\organ_gun\organ_gun_icon_64x64
+ Shadow
+
+ Gangsaw
+ CavalryCuirass
+ Bayonet
+ Rifling
+ GunnersQuadrant
+ HeatedShot
+ InfantryBreastplate
+ SeedDrill
+ SelectiveBreeding
+ HuntingDogs
+
+
+
+ Revetment
+ Bastion
+ PlacerMines
+ Caracole
+ OreRefining
+ ArmorPlating
+ Carronade
+ PercussionLocks
+ ChurchStandingArmy
+ ChurchGasLighting
+ FrontierTraining
+ LogFlume
+ Bookkeeping
+ Bookkeeping
+ ArtificialFertilizer
+ CircularSaw
+ Amalgamation
+ Levy
+ Homesteading
+ LongLines
+ GillNets
+ FrontierOutpost
+ SteelTraps
+ FactoryWaterPower
+ FactorySteamPower
+ FactoryCannery
+ StarFort
+ FortifiedOutpost
+
+ CoveredWagon
+
+ ChurchMassCavalry
+ ChurchStandingArmy
+ VeteranPikemen
+ VeteranMusketeers
+ VeteranHussars
+ VeteranGrenadiers
+ VeteranCrossbowmen
+ VeteranPistolS
+ GrapeShot
+ Howitzer
+ FieldGun
+ Trunion
+ ProfessionalGunners
+ PaperCartridge
+ MilitaryDrummers
+ Flintlock
+ Pillage
+ FactoryMassProduction
+ GuardDragoons
+ GuardMusketeers
+ GuardHussars
+ GuardGrenadiers
+ GuardCrossbowmen
+ GuardPistolS
+ NativeUpgrades
+ NativeUpgrades2
+ AAStandardNativeTechsPI
+ HeavyHorseArtillery
+ GuardSharpshooter
+ GuardPikemen
+
+
+
+ 733478
+ 36304
+ UNOBTAINABLE
+ units\artillery\organ_gun\organ_gun_icon_64x64
+ Shadow
+
+ PostIndustrialBritish
+ ImpLargeScaleAgriculture
+ ImpImmigrants
+ ImpDeforestation
+ ImpKnighthood
+ ImpPeerage
+ ImpExcessiveTaxation
+ ImperialCrossbowmen
+ ImperialDragoons
+ ImperialMusketeers
+ ImperialDragoons
+ ImperialGrenadiers
+ ImperialCulverin
+ ImperialRocket
+ ImperialHowitzer
+ ImperialFieldGun
+ ImperialManOWar
+ ImperialHussars
+ ImperialSharpshooter
+ ImperialMonitors
+ ImpLegendaryNatives
+ ImperialHorseArtillery
+ ImperialPikemen
+ ImperialPistolS
+
+
+
+ 93
+ 781289
+ 200.0000
+ 200.0000
+ 30.0000
+ UNOBTAINABLE
+ ui\techs\veteran_cavalry\veteran_cavalry
+ 781285
+ CountsTowardMilitaryScore
+ UpgradeTech
+
+ Fortressize
+
+
+
+ PistolS
+
+
+ PistolS
+
+
+
+
+
+
+
+
+ 733476
+ 781286
+ 600.0000
+ 600.0000
+ 30.0000
+ UNOBTAINABLE
+ ui\techs\guard_cavalry\guard_cavalry
+ 781285
+ CountsTowardMilitaryScore
+ UpgradeTech
+
+ VeteranPistolS
+ Industrialize
+
+
+
+ PistolS
+
+
+
+ PistolS
+
+
+
+
+
+
+
+ 733477
+ 781283
+ 1500.0000
+ 1500.0000
+ 30.0000
+ UNOBTAINABLE
+ ui\techs\imperial_cavalry\imperial_cavalry
+ 781282
+ CountsTowardMilitaryScore
+ UpgradeTech
+
+ GuardPistolS
+ Imperialize
+
+
+
+
+ PistolS
+
+
+ PistolS
+
+
+
+
+ 733478
+ 781292
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ ui\techs\hc_royal_decree\hc_royal_decree
+ 781293
+ OrPrereqs
+ HomeCity
+
+ 781291
+
+ Capitol
+
+
+
+
+ 733479
+ 781303
+ 600.0000
+ 600.0000
+ 15.0000
+ UNOBTAINABLE
+ ui\techs\bastion\bastion
+ 23451
+ CountsTowardEconomicScore
+ UniqueTech
+
+ HCRoyalDecreeSwedish
+ Industrialize
+
+
+ Bastion
+ StoneFortifiedWalls
+
+
+
+ 733480
+ 780986
+ 300.0000
+ 300.0000
+ 15.0000
+ UNOBTAINABLE
+ ui\techs\hc_wood_crate0\hc_wood_crate0
+ 780987
+ CheckLandHCGatherPoint
+ CountsTowardEconomicScore
+ UniqueTech
+
+ HCRoyalDecreeSwedish
+ Colonialize
+
+
+
+ AbstractVillager
+
+
+ AbstractVillager
+
+
+
+
+
+
+
+ 733481
+ 781296
+ 1500.0000
+ 15.0000
+ UNOBTAINABLE
+ units\infantry\poleaxeman\poleaxeman_icon
+ 781297
+ UniqueTech
+ CountsTowardMilitaryScore
+ CheckLandHCGatherPoint
+
+ Fortressize
+ HCRoyalDecreeSwedish
+
+
+
+
+
+
+
+
+
+
+
+ 733482
+ UNOBTAINABLE
+ Shadow
+ YPNeverObtainableAfterUse
+
+
+
+
+
+
+
+ 733483
+ 781299
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ units\priests\priest2_icon
+ HomeCity
+
+
+
+
+
+
+
+ 733484
+ 781300
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ units\animals\turkey\turkey_icon
+ HomeCity
+
+
+
+
+
+
+
+ 733485
+ 781301
+ 250.0000
+ 250.0000
+ 60.0000
+ UNOBTAINABLE
+ ui\techs\bastion\bastion
+ 781302
+ UpgradeTech
+ CountsTowardMilitaryScore
+ YPNeverObtainableAfterUse
+
+ Bastion
+ Industrialize
+
+
+
+ AbstractWall
+
+
+
+
+
+
+
+ 733486
+ 781303
+ 400.0000
+ 400.0000
+ 60.0000
+ UNOBTAINABLE
+ ui\techs\bastion\bastion
+ 23451
+ UpgradeTech
+ CountsTowardMilitaryScore
+ YPNeverObtainableAfterUse
+
+ Bastion
+ Industrialize
+
+
+
+ AbstractWall
+
+
+
+
+
+
+
+ 733487
+ 77826
+ 1.0000
+ 20.0000
+ UNOBTAINABLE
+ units\trade\fort_wagon_icon_black_inf
+ HomeCity
+
+
+
+
+
+
+
+ 733488
+ 781304
+ 1.0000
+ 20.0000
+ UNOBTAINABLE
+ units\naval\fireship_inf
+ HomeCity
+
+
+
+
+
+
+
+ 733489
+ 781307
+ 300.0000
+ 300.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\bigdeer
+ .798828125 .3046875 .99609375 .60546875
+ 781306
+ CountsTowardEconomicScore
+ CheckLandHCGatherPoint
+ NativeDance
+
+ Colonialize
+
+
+
+
+
+
+
+
+
+
+
+ 733490
+ 781309
+ 300.0000
+ 300.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\bigturkey
+ .798828125 .3046875 .99609375 .60546875
+ 781308
+ CountsTowardEconomicScore
+ CheckLandHCGatherPoint
+ NativeDance
+
+ Colonialize
+
+
+
+
+
+
+
+
+
+
+
+ 733491
+ 781310
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ ui\techs\native\Versailles
+ 781311
+ HomeCity
+
+
+
+
+ 781312
+
+
+
+
+
+
+ 733492
+ 781315
+ 250.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\bigwarrior
+ .798828125 .3046875 .99609375 .60546875
+ 781314
+ CountsTowardMilitaryScore
+ NativeDance
+
+ Colonialize
+
+
+
+
+
+
+
+
+ 733493
+ 781317
+ 250.0000
+ 250.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\techs\native\FinePowder
+ 781316
+ CountsTowardMilitaryScore
+ YPNativeImprovement
+
+
+ AbstractGunpowderTrooper
+
+
+ AbstractGunpowderTrooper
+
+
+ AbstractGunpowderTrooper
+
+
+
+
+ 733494
+ 781329
+ 300.0000
+ 300.0000
+ 10.0000
+ UNOBTAINABLE
+ units\animals\wild_elephant\elephant_icon_64
+ 781318
+ CountsTowardEconomicScore
+ YPNativeImprovement
+
+ Colonialize
+
+
+
+
+
+
+
+
+
+
+
+ 733495
+ 781323
+ 1.0000
+ 40.0000
+ UNOBTAINABLE
+ ui\techs\hc_ability_wildfire\hc_ability_wildfire
+ 781324
+ HomeCity
+
+
+ FirePit
+
+
+ FirePit
+
+
+ FirePit
+
+
+ FirePit
+
+ 781325
+
+
+
+ 733496
+ 781326
+ 200.0000
+ 200.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\viper
+ 781327
+ YPNativeImprovement
+ CountsTowardEconomicScore
+
+ Colonialize
+
+
+
+ Priest
+
+
+ Missionary
+
+
+ NatMedicineMan
+
+
+ xpMedicineMan
+
+
+ Imam
+
+
+ Surgeon
+
+
+ Inquisitor
+
+
+
+
+ 733492
+ 781328
+ 50.0000
+ 50.0000
+ 50.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\bigharvest
+ .798828125 .3046875 .99609375 .60546875
+ 68617
+ CountsTowardEconomicScore
+ NativeDance
+
+
+ AbstractVillager
+
+
+ AbstractVillager
+
+
+ AbstractVillager
+
+
+ AbstractVillager
+
+
+ AbstractVillager
+
+
+ AbstractVillager
+
+
+ AbstractVillager
+
+
+
+
+ 733493
+ 0.0000
+ UNOBTAINABLE
+ Shadow
+
+ YPHCNativeTradeTax
+
+
+
+
+
+
+
+
+ 733494
+ 0.0000
+ UNOBTAINABLE
+ Shadow
+
+ HCNativeTreaties
+
+
+
+
+
+
+
+
+ 733495
+ 61187
+ 400.0000
+ 300.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\techs\asians\honered_natives
+ 61186
+ UpgradeTech
+ CountsTowardMilitaryScore
+ YPNativeImprovement
+
+ ypNatDisciplinedSaltpeter
+ Industrialize
+
+
+
+ CamelArcher
+
+
+ CamelArcher
+
+
+
+
+
+ 733496
+ 61151
+ 200.0000
+ 150.0000
+ 10.0000
+ UNOBTAINABLE
+ ui\techs\asians\disciplined_natives
+ 61150
+ YPNativeImprovement
+ CountsTowardMilitaryScore
+ UpgradeTech
+
+ Fortressize
+
+
+
+ CamelArcher
+
+
+ CamelArcher
+
+
+
+
\ No newline at end of file
diff --git a/RMM/AndesRegicide.xs b/RMM/AndesRegicide.xs
index 1b10957..697b73f 100644
--- a/RMM/AndesRegicide.xs
+++ b/RMM/AndesRegicide.xs
@@ -163,6 +163,9 @@ void main(void)
int playerSide = rmRandInt(1,2);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
if (cNumberTeams > 2) // ffa
{
if (cNumberNonGaiaPlayers < 4)
@@ -374,16 +377,6 @@ void main(void)
// Text
rmSetStatusText("",0.45);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH())
diff --git a/RMM/Ceylon.xs b/RMM/Ceylon.xs
index 18ef1a0..757c71e 100644
--- a/RMM/Ceylon.xs
+++ b/RMM/Ceylon.xs
@@ -639,16 +639,6 @@ void main(void)
// Define and place Nuggets
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/Christmas.xml b/RMM/Christmas.xml
index 4bdc337..fcce884 100644
--- a/RMM/Christmas.xml
+++ b/RMM/Christmas.xml
@@ -1,5 +1,5 @@
- ui\random_map\great_lakes\great_lakes_ss_02
+ ui\random_map\africa\christmas_ss_01
\ No newline at end of file
diff --git a/RMM/Christmas.xs b/RMM/Christmas.xs
index eb90946..f240f9b 100644
--- a/RMM/Christmas.xs
+++ b/RMM/Christmas.xs
@@ -3,6 +3,10 @@
// Main entry point for random map script I MADE A CHANGE
//
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
void main(void)
{
// Text
@@ -56,6 +60,8 @@ void main(void)
}
+ chooseMercs();
+
// Picks the map size
//int playerTiles=12000; // old settings
int playerTiles = 20000;
@@ -415,8 +421,9 @@ if (seasonPicker < 0.5)
//rmPlaceObjectDefPerPlayer(startingTCID, true);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 10.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
int StartAreaTreeID=rmCreateObjectDef("starting trees");
@@ -1046,6 +1053,19 @@ if (seasonPicker < 0.5)
rmPlaceObjectDefAtLoc(sheepID, 0, 0.5, 0.5, cNumberNonGaiaPlayers*3);
+ // check for KOTH game mode
+ if(rmGetIsKOTH()) {
+
+ int randLoc = rmRandInt(1,2);
+ float xLoc = 0.5;
+ float yLoc = 0.8;
+ float walk = 0.03;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, 0);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
// Text
rmSetStatusText("",1.0);
diff --git a/RMM/Congo.xml b/RMM/Congo.xml
new file mode 100644
index 0000000..90d6ee1
--- /dev/null
+++ b/RMM/Congo.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\congo\congo_ss_01
+ ui\random_map\africa\congo\congo_ss_02
+ ui\random_map\africa\congo\congo_ss_03
+
\ No newline at end of file
diff --git a/RMM/Congo.xs b/RMM/Congo.xs
new file mode 100644
index 0000000..714b173
--- /dev/null
+++ b/RMM/Congo.xs
@@ -0,0 +1,1672 @@
+/*
+# Mosquito Coast
+#
+# Monteverde / Tortuguero / Cano Negro
+#
+# The map portrays a corner of the Caribbean lowlands - a maze of rivers, canals, lagoons
+# and tidal wetlands. Showcasing lush and dense cloud forests, home of a unique mix of
+# animals and plants, the region gets heavy rainfall throughout the year.
+#
+# The script may randomly load one of two variations:
+# 1. A coastal plateau with numerous deep water pockets, rock ridges and some cliffs peppering the landscape
+# 2. A strip of land with a trade route in the middle section and two smaller land areas on opposite edges of the map, separated by winding water canals
+#
+# FFA has a separate variation with delta islands, divided by pathable waters, and two trade route areas on opposite edges of the map (their positions are random).
+#
+# Each player side gets a native settlement (Caribs or Maya/Jesuits on TAD) in the trade route variation. More settlements can be found
+# close to the edges of the map, in the coastal variation.
+#
+# April-July-November
+#
+# Mister 2014
+*/
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+bool Asian = false;
+
+bool IsYP(){
+ if (rmGetCivID("Japanese")==19)
+ Asian = true;
+ return(Asian);
+}
+
+int landnoise=0;
+int num=0;
+void Area(float Asize=0.0, float spotX=0.0, float spotZ=0.0, string Paint=""){
+ landnoise=rmCreateArea("Some Area"+num);
+ rmSetAreaSize(landnoise, Asize, Asize);
+ rmSetAreaTerrainType(landnoise, Paint);
+ rmSetAreaCliffType(landnoise, "uger");
+ rmSetAreaCliffHeight(landnoise, 1.0, 0.0, 1.0);
+ rmSetAreaCliffEdge(landnoise, 1, 1.0, 0.0, 0.0, 0);
+ rmSetAreaCliffPainting(landnoise, true, false, false, 0, true);
+ rmSetAreaCoherence(landnoise, 0.80);
+ rmSetAreaSmoothDistance(landnoise, 3);
+ rmSetAreaHeightBlend(landnoise, 4);
+ rmSetAreaBaseHeight(landnoise, 0.0);
+ rmSetAreaElevationNoiseBias(landnoise, 0);
+ rmSetAreaElevationEdgeFalloffDist(landnoise, 3);
+ rmSetAreaElevationVariation(landnoise, 2);
+ rmSetAreaElevationPersistence(landnoise, 0.3);
+ rmSetAreaElevationOctaves(landnoise, 4);
+ rmSetAreaElevationMinFrequency(landnoise, 0.04);
+ rmSetAreaElevationType(landnoise, cElevTurbulence);
+ rmSetAreaLocation(landnoise, spotX, spotZ); // DBG flag -- line 912
+ num=num+1;
+}
+
+float PI = 3.1415926535897932384626433832795;
+float pow(float x = 0,int p = 0) {
+ float x2 = 1; float x4 = 1; float x8 = 1; float x16 = 1; float x32 = 1; float x64 = 1;
+ if(p>=2) x2 = x*x;
+ if(p>=4) x4 = x2*x2;
+ if(p>=8) x8 = x4*x4;
+ if(p>=16) x16 = x8*x8;
+ if(p>=32) x32 = x16*x16;
+ if(p>=64) x64 = x32*x32;
+ float ret = 1;
+ while(p>=64) { ret = ret * x64; p = p - 64; }
+ if(p>=32) { ret = ret * x32; p = p - 32; }
+ if(p>=16) { ret = ret * x16; p = p - 16; }
+ if(p>=8) { ret = ret * x8; p = p - 8; }
+ if(p>=4) { ret = ret * x4; p = p - 4; }
+ if(p>=2) { ret = ret * x2; p = p - 2; }
+ if(p>=1) { ret = ret * x; p = p - 1; }
+ return (ret);
+}
+float atan(float n = 0) {
+ float m = n;
+ if(n > 1) m = 1.0 / n;
+ if(n < -1) m = -1.0 / n;
+ float r = m;
+ for(i = 1; < 100) { int j = i * 2 + 1; float k = pow(m,j) / j;
+ if(k == 0) break;
+ if(i % 2 == 0) r = r + k;
+ if(i % 2 == 1) r = r - k;
+ }
+ if(n > 1 || n < -1) r = PI / 2.0 - r;
+ if(n < -1) r = 0.0 - r;
+ return (r);
+}
+float atan2(float z = 0,float x = 0) {
+ if(x > 0) return (atan(z / x));
+ if(x < 0) { if(z < 0) return (atan(z / x) - PI);
+ if(z > 0) return (atan(z / x) + PI);
+ return (PI);
+ }
+ if(z > 0) return (PI / 2.0);
+ if(z < 0) return (0.0 - (PI / 2.0));
+ return (0);
+}
+float fact(float n = 0) {
+ float r = 1;
+ for(i = 1; <= n) { r = r * i; }
+ return (r);
+}
+float cos(float n = 0) {
+ float r = 1;
+ for(i = 1; < 100) {
+ int j = i * 2; float k = pow(n,j) / fact(j);
+ if(k == 0) break;
+ if(i % 2 == 0) r = r + k;
+ if(i % 2 == 1) r = r - k;
+ }
+ return (r);
+}
+float sin(float n = 0) {
+ float r = n;
+ for(i = 1; < 100) {
+ int j = i * 2 + 1;
+ float k = pow(n,j) / fact(j);
+ if(k == 0) break;
+ if(i % 2 == 0) r = r + k;
+ if(i % 2 == 1) r = r - k;
+ }
+ return (r);
+}
+
+float LocX = 0;
+float LocZ = 0;
+float wAngle = 0;
+
+float getLocX(float xOrigin=0, float rad=0, float MyAngle=0) {
+ wAngle = (2*PI*MyAngle)/360;
+ LocX=cos(wAngle)*rad + xOrigin;
+ return(LocX);
+}
+
+float getLocZ(float zOrigin=0, float rad=0, float MyAngle=0) {
+ wAngle = (2*PI*MyAngle)/360;
+ LocZ=sin(wAngle)*rad + zOrigin;
+ return(LocZ);
+}
+
+int classSmallIsland = 0;
+int islandConstraint2 = 0;
+int avoidSmallIslands = 0;
+int islandEdgeConstraint = 0;
+
+int buildTradeArea (string TradeIslandName = "", float xLoc = 0.0, float zLoc = 0.0, float xFrac1 = 0.0, float zFrac1 = 0.0, float xFrac2 = 0.0, float zFrac2 = 0.0, string socketDef="") {
+ int tradeIslandID=rmCreateArea(TradeIslandName);
+ rmSetAreaSize(tradeIslandID, 0.09, 0.09);
+ rmAddAreaToClass(tradeIslandID, classSmallIsland);
+ rmSetAreaTerrainType(tradeIslandID, "borneo\ground_grass1_borneo");
+ //rmAddAreaTerrainLayer(tradeIslandID, "amazon\river1_am", 0, 14);
+ //rmSetAreaMix(tradeIslandID, "yucatan_grass");
+ rmSetAreaEdgeFilling(tradeIslandID, 0);
+ rmSetAreaBaseHeight(tradeIslandID, 2.0);
+ rmSetAreaSmoothDistance(tradeIslandID, 5);
+ /*rmAddAreaConstraint(tradeIslandID, avoidSmallIslands);
+ rmAddAreaConstraint(tradeIslandID, islandConstraint2); */
+ rmSetAreaCoherence(tradeIslandID, 0.6);
+ rmSetAreaLocation(tradeIslandID, xLoc, zLoc);
+ rmSetAreaElevationType(tradeIslandID, cElevTurbulence);
+ rmSetAreaElevationVariation(tradeIslandID, 4.0);
+ rmSetAreaElevationMinFrequency(tradeIslandID, 0.09);
+ rmSetAreaElevationOctaves(tradeIslandID, 3);
+ rmSetAreaElevationPersistence(tradeIslandID, 0.2);
+ rmSetAreaElevationNoiseBias(tradeIslandID, 1);
+ rmAddAreaInfluenceSegment(tradeIslandID, xFrac1, zFrac1, xFrac2, zFrac2);
+ rmAddAreaRemoveType(tradeIslandID, "borneo_underbrush");
+ rmAddAreaRemoveType(tradeIslandID, "PropTurtles");
+ rmAddAreaRemoveType(tradeIslandID, "PropSwan");
+ rmAddAreaRemoveType(tradeIslandID, "PropFish");
+ rmAddAreaRemoveType(tradeIslandID, "DuckFamily");
+ rmBuildArea(tradeIslandID);
+
+ int tradeRouteID = rmCreateTradeRoute();
+ int socketID=rmCreateObjectDef(socketDef);
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 8.0);
+ rmAddTradeRouteWaypoint(tradeRouteID, xFrac1, zFrac1);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, xFrac2, zFrac2, 6, 6);
+ // rmAddTradeRouteWaypoint(tradeRouteID, xFrac2, zFrac2);
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ return(tradeIslandID);
+}
+
+void main(void){
+
+rmSetStatusText("", 0.0);
+
+ if (rmGetIsFFA()==false) {
+ float diceThrow = rmRandFloat(0,1.8);
+ // <0.9 coastal version with noisy plateau, no trade route
+ // >=0.9 central plateau with trade route
+ }
+
+ float playerTiles=14000;
+ if (cNumberNonGaiaPlayers>4)
+ playerTiles = 10800;
+ if (cNumberNonGaiaPlayers>6)
+ playerTiles = 8800;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmSetMapSize(size, size);
+
+ rmSetSeaType("Borneo Water");
+
+ if (rmGetIsFFA()) {
+ rmSetSeaLevel(-2.0);
+ if (IsYP())
+ rmSetMapType("deccan");
+ else
+ rmSetMapType("deccan");
+ }
+ else {
+ if (IsYP()) {
+ if (diceThrow<0.0) { // Coastal variation
+ rmSetSeaLevel(-5.0);
+ rmSetMapType("deccan");
+ }
+ else { // Trade route variation
+ if (rmRandFloat(0,1)>0.67) {
+ rmSetMapType("deccan");
+ }
+ else {
+ rmSetMapType("deccan");
+ }
+ rmSetSeaLevel(0.0);
+ rmSetGlobalRain(0.0);
+ }
+ }
+ else {
+ if (diceThrow<0.0) { // Coastal variation
+ rmSetSeaLevel(-5.0);
+ rmSetMapType("deccan");
+ }
+ else { // Trade route variation
+ if (rmRandFloat(0,1)>0.67) {
+ rmSetMapType("deccan");
+ }
+ else {
+ rmSetMapType("deccan");
+ }
+ rmSetSeaLevel(0.0);
+ rmSetGlobalRain(0.0);
+ }
+ }
+ }
+
+ rmSetMapType("deccan");
+ rmSetMapType("water");
+ rmSetLightingSet("301a_malta");
+ rmTerrainInitialize("water");
+
+chooseMercs();
+
+ // Make it rain
+ rmSetGlobalRain( 0.7 );
+
+rmSetWindMagnitude(2);
+//rmSetGlobalStormLength(20, 20);
+
+int classPlayer=rmDefineClass("player");
+int classBase=rmDefineClass("land base");
+rmDefineClass("startingUnit");
+rmDefineClass("natives");
+rmDefineClass("importantItem");
+rmDefineClass("nuggets");
+rmDefineClass("classCliff");
+rmDefineClass("classForest");
+rmDefineClass("socketClass");
+rmDefineClass("deltaIsland");
+int classIsland=rmDefineClass("island");
+int classPlateau=rmDefineClass("plateau");
+classSmallIsland=rmDefineClass("smallIsland");
+int classLake=rmDefineClass("lake");
+int classLakeIsland=rmDefineClass("lakeIsland");
+int classBay=rmDefineClass("bay");
+int classBonusIsland=rmDefineClass("bonus island");
+int classSideIsland=rmDefineClass("side island");
+
+int bonusIslandConstraint=rmCreateClassDistanceConstraint("avoid bonus island", classBonusIsland, 10.0);
+int bonusIslandConstraintMed=rmCreateClassDistanceConstraint("avoid bonus island medium", classBonusIsland, 16.0);
+int longBonusIslandConstraint=rmCreateClassDistanceConstraint("long avoid bonus island", classBonusIsland, 30.0);
+int medSideIslandConstraint=rmCreateClassDistanceConstraint("avoid side island medium", classSideIsland, 12.0);
+int longSideIslandConstraint=rmCreateClassDistanceConstraint("long avoid side island", classSideIsland, 30.0);
+int lakeConstraint=rmCreateClassDistanceConstraint("avoid bay", classLake, 15.0);
+//int bayConstraint=rmCreateClassDistanceConstraint("avoid bay", classBay, 3);
+int avoidIslet=rmCreateClassDistanceConstraint("small island avoid islands", rmClassID("deltaIsland"), 12.0);
+int islandConstraint=rmCreateClassDistanceConstraint("islands avoid each other", classIsland, 15.0);
+int islandConstraintSmall=rmCreateClassDistanceConstraint("islets avoid big Islands", classIsland, 12.0);
+int plateauConstraint=rmCreateClassDistanceConstraint("plateaus avoid each other", classPlateau, 18.0);
+islandConstraint2=rmCreateClassDistanceConstraint("stay away from main island", classIsland, 12.0);
+avoidSmallIslands = rmCreateClassDistanceConstraint("stay away from other bonus islands", classSmallIsland, 10.0);
+int avoidLakes=rmCreateClassDistanceConstraint("avoid lakes", classLake, 8.0);
+int avoidLakeIsland=rmCreateClassDistanceConstraint("avoid big lake islands", classLakeIsland, 20.0);
+int avoidLakeIslandSmall=rmCreateClassDistanceConstraint("avoid lake islands", classLakeIsland, 10.0);
+islandEdgeConstraint = rmCreatePieConstraint("Islands away from edge of map", 0.5, 0.5, 0, rmGetMapXSize()-12, 0, 0, 0);
+int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(6), rmZTilesToFraction(6), 1.0-rmXTilesToFraction(6), 1.0-rmZTilesToFraction(6), 0.01);
+int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.49), rmDegreesToRadians(0), rmDegreesToRadians(360));
+int avoidEdgeMore=rmCreatePieConstraint("avoid the edge of map", 0.5, 0.5, 0, rmZFractionToMeters(0.45), rmDegreesToRadians(0), rmDegreesToRadians(360));
+int playerConstraint=rmCreateClassDistanceConstraint("player vs. player", classPlayer, 20.0);
+int playerConstraintSmall=rmCreateClassDistanceConstraint("stuff vs. player small", classPlayer, 5.0);
+int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 18.0);
+int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+int avoidNatives=rmCreateClassDistanceConstraint("stuff avoids natives", rmClassID("natives"), 0.0);
+int avoidNativesMed=rmCreateClassDistanceConstraint("stuff avoids natives medium", rmClassID("natives"), 0.0);
+int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 20.0);
+int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 10.0);
+int avoidImpassableShort=rmCreateTerrainDistanceConstraint("avoid impassable short", "Land", false, 5.0);
+int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.9);
+int cliffConstraint=rmCreateClassDistanceConstraint("cliff vs. cliff", rmClassID("classCliff"), 45.0);
+int avoidCliff=rmCreateClassDistanceConstraint("stuff vs. cliff", rmClassID("classCliff"), 5.0);
+int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 20.0);
+int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 6);
+int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 5.0);
+int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+int avoidWater = rmCreateTerrainDistanceConstraint("avoid water", "Land", false, 8.0);
+int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 6.0);
+int avoidWaterPlants = rmCreateTypeDistanceConstraint("water plants avoid each other", "UnderbrushLake", 8);
+int avoidBrush=rmCreateTypeDistanceConstraint("props avoid each other", "UnderbrushJungle", 10.0);
+int avoidCoinShort=rmCreateTypeDistanceConstraint("avoid coin short", "Mine", 5.0);
+int waterConstraint = rmCreateTerrainDistanceConstraint("avoid land short", "Land", true, -1.0);
+int circleConstraint2=rmCreatePieConstraint("circle Constraint2", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+int classPatch = rmDefineClass("patch");
+
+rmSetStatusText("", 0.1);
+
+if (rmGetIsFFA()==false) {
+
+ if (diceThrow>=0.0){ // Trade route variation
+
+ int pool=rmCreateArea("the waterpool");
+ rmSetAreaSize(pool, 0.8, 0.8);
+ rmSetAreaLocation(pool, 0.5, 0.5);
+ rmSetAreaBaseHeight(pool, -0.5);
+ rmSetAreaCoherence(pool, 1.00);
+ rmBuildArea(pool);
+
+ int plateauCenter=rmCreateArea("center plateau");
+ rmSetAreaSize(plateauCenter, 0.17, 0.17);
+ rmSetAreaTerrainType(plateauCenter, "borneo\ground_grass2_borneo");
+// rmSetAreaMix(plateauCenter, "yucatan_grass");
+ rmSetAreaLocation(plateauCenter, 0.5, 0.5);
+ rmSetAreaCoherence(plateauCenter, 0.5);
+ rmAddAreaToClass(plateauCenter, classPlateau);
+ rmSetAreaBaseHeight(plateauCenter, 1.0);
+ rmSetAreaSmoothDistance(plateauCenter, 20);
+ rmSetAreaElevationType(plateauCenter, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauCenter, 4.0);
+ rmSetAreaElevationMinFrequency(plateauCenter, 0.04);
+ rmSetAreaElevationOctaves(plateauCenter, 4);
+ rmSetAreaElevationPersistence(plateauCenter, 0.5);
+ rmSetAreaElevationNoiseBias(plateauCenter, 1);
+ rmSetAreaEdgeFilling(plateauCenter, 1);
+ rmAddAreaInfluenceSegment(plateauCenter, -0.15, 0.5, 0.5, 0.5);
+ //rmAddAreaRemoveType(plateauCenter, "UnderbrushLake");
+ rmBuildArea(plateauCenter);
+
+ int plateauCenter2=rmCreateArea("center plateau 2");
+ rmSetAreaSize(plateauCenter2, 0.17, 0.17);
+ rmSetAreaTerrainType(plateauCenter2, "borneo\ground_grass1_borneo");
+// rmSetAreaMix(plateauCenter2, "yucatan_grass");
+ rmSetAreaLocation(plateauCenter2, 0.5, 0.5);
+ rmSetAreaCoherence(plateauCenter2, 0.5);
+ rmAddAreaToClass(plateauCenter2, classPlateau);
+ rmSetAreaBaseHeight(plateauCenter2, 1.0);
+ rmSetAreaSmoothDistance(plateauCenter2, 20);
+ rmSetAreaElevationType(plateauCenter2, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauCenter2, 4.0);
+ rmSetAreaElevationMinFrequency(plateauCenter2, 0.04);
+ rmSetAreaElevationOctaves(plateauCenter2, 4);
+ rmSetAreaElevationPersistence(plateauCenter2, 0.5);
+ rmSetAreaElevationNoiseBias(plateauCenter2, 1);
+ rmSetAreaEdgeFilling(plateauCenter2, 1);
+ rmAddAreaInfluenceSegment(plateauCenter2, 0.5, 0.5, 1.1, 0.5);
+ //rmAddAreaRemoveType(plateauCenter2, "UnderbrushLake");
+ rmBuildArea(plateauCenter2);
+
+ // Trade route
+
+ int tradeRouteID = rmCreateTradeRoute();
+ int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmAddObjectDefToClass(socketID, rmClassID("socketClass"));
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 8.0);
+
+ rmAddTradeRouteWaypoint(tradeRouteID, -0.1, .53);
+
+ if (cNumberNonGaiaPlayers==2){
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .2, .43, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .3, .50, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .5, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .7, .53, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .9, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 1.1, .55, 5, 6);
+ }
+ else {
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .1, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .3, .55, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .5, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .7, .55, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .9, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 1.1, .52, 5, 6);
+ }
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.14);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ vector socketLoc2 = rmGetTradeRouteWayPoint(tradeRouteID, 0.37);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc2);
+ vector socketLoc3 = rmGetTradeRouteWayPoint(tradeRouteID, 0.6);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc3);
+ vector socketLoc4 = rmGetTradeRouteWayPoint(tradeRouteID, 0.8);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc4);
+
+ int plateauNorthID=rmCreateArea("north platform 2");
+ if (cNumberNonGaiaPlayers==2){
+ rmSetAreaSize(plateauNorthID, 0.175, 0.175); // Was 0.15
+ }
+ else {
+ rmSetAreaSize(plateauNorthID, 0.2, 0.2);
+ }
+ rmSetAreaTerrainType(plateauNorthID, "borneo\ground_grass1_borneo");
+ rmSetAreaLocation(plateauNorthID, 0.5, 0.9);
+ rmSetAreaCoherence(plateauNorthID, 0.80);
+ rmAddAreaToClass(plateauNorthID, classIsland);
+ rmAddAreaConstraint(plateauNorthID, plateauConstraint);
+ rmSetAreaBaseHeight(plateauNorthID, 1.0);
+ rmSetAreaSmoothDistance(plateauNorthID, 20);
+ rmSetAreaElevationType(plateauNorthID, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauNorthID, 4.0);
+ rmSetAreaElevationMinFrequency(plateauNorthID, 0.04);
+ rmSetAreaElevationOctaves(plateauNorthID, 4);
+ rmSetAreaElevationPersistence(plateauNorthID, 0.5);
+ rmSetAreaElevationNoiseBias(plateauNorthID, 1);
+ rmSetAreaEdgeFilling(plateauNorthID, 10);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.10, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.30, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.50, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.70, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.90, 0.89);
+ //rmAddAreaRemoveType(plateauNorthID, "UnderbrushLake");
+ rmBuildArea(plateauNorthID);
+
+ int plateauSouthID=rmCreateArea("south platform 2");
+ if (cNumberNonGaiaPlayers==2){
+ rmSetAreaSize(plateauSouthID, 0.175, 0.175); // Was 0.15
+ }
+ else {
+ rmSetAreaSize(plateauSouthID, 0.2, 0.2);
+ }
+ rmSetAreaTerrainType(plateauSouthID, "borneo\ground_grass1_borneo");
+// rmSetAreaMix(plateauSouthID, "yucatan_grass");
+ rmSetAreaLocation(plateauSouthID, 0.5, 0.1);
+ rmSetAreaCoherence(plateauSouthID, 0.80);
+ rmAddAreaToClass(plateauSouthID, classIsland);
+ rmSetAreaBaseHeight(plateauSouthID, 1.0);
+ rmSetAreaSmoothDistance(plateauSouthID, 20);
+ rmSetAreaElevationType(plateauSouthID, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauSouthID, 4.0);
+ rmSetAreaElevationMinFrequency(plateauSouthID, 0.04);
+ rmSetAreaElevationOctaves(plateauSouthID, 4);
+ rmSetAreaElevationPersistence(plateauSouthID, 0.5);
+ rmSetAreaElevationNoiseBias(plateauSouthID, 1);
+ rmSetAreaEdgeFilling(plateauSouthID, 10);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.10, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.30, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.50, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.70, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.90, 0.11);
+ //rmAddAreaRemoveType(plateauSouthID, "UnderbrushLake");
+ rmBuildArea(plateauSouthID);
+
+
+ // Water weed and wild life
+
+ int avoidLand = rmCreateTerrainDistanceConstraint("avoid land", "Water", false, 5.0);
+
+
+// for (i=0;<(80*cNumberNonGaiaPlayers)) {
+ int waterWeed = rmCreateObjectDef("water weed");
+ rmAddObjectDefItem(waterWeed, "UnderbrushLake", 1, 10.0);
+ rmSetObjectDefMinDistance(waterWeed, 0);
+ rmSetObjectDefMaxDistance(waterWeed, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(waterWeed, avoidEdgeMore);
+ rmAddObjectDefConstraint(waterWeed, avoidWaterPlants);
+ rmAddObjectDefConstraint(waterWeed, waterConstraint);
+ //rmAddObjectDefConstraint(waterWeed, avoidLand);
+ //rmAddObjectDefConstraint(waterWeed, avoidImpassableShort);
+ rmPlaceObjectDefAtLoc(waterWeed, 0, 0.5, 0.5, 50);
+// }
+
+ int wildChance = -1;
+
+ for (i=0;<(4*cNumberNonGaiaPlayers)) {
+ int phloat = rmCreateObjectDef("phloat"+i);
+ wildChance = rmRandInt(0,3);
+ switch(wildChance) { // Many moni, say me say many, many, many
+ case 0: rmAddObjectDefItem(phloat, "PropTurtles", 1, 0.0);
+ case 1: rmAddObjectDefItem(phloat, "PropSwan", 1, 0.0);
+ case 2: rmAddObjectDefItem(phloat, "PropFish", 1, 0.0);
+ case 3: rmAddObjectDefItem(phloat, "DuckFamily", 1, 0.0);
+ }
+ rmSetObjectDefMinDistance(phloat, 0);
+ rmSetObjectDefMaxDistance(phloat, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(phloat, avoidEdgeMore);
+ rmAddObjectDefConstraint(phloat, avoidWaterPlants);
+ rmAddObjectDefConstraint(phloat, waterConstraint);
+ rmAddObjectDefConstraint(phloat, avoidLand);
+ // rmAddObjectDefConstraint(phloat, avoidImpassableShort);
+ rmPlaceObjectDefAtLoc(phloat, 0, 0.5, 0.5, 1);
+ }
+
+} // End of trade route variation
+
+} // End of non-FFA area creation
+
+else { // FFA area creation
+
+
+ int pool2=rmCreateArea("the waterpool 2");
+ rmSetAreaSize(pool2, 0.8, 0.8);
+ rmSetAreaLocation(pool2, 0.5, 0.5);
+ rmSetAreaBaseHeight(pool2, -2.5);
+ rmSetAreaCoherence(pool2, 1.00);
+ rmBuildArea(pool2);
+
+
+}
+
+rmSetStatusText("", 0.2);
+
+// Starting positions for players placement
+
+ float pSwitch = rmRandFloat(0, 1.2);
+
+if (diceThrow<0.0){
+
+ if (rmGetIsFFA())
+ rmPlacePlayersCircular(0.35, 0.35, 0);
+ else {
+ if (pSwitch < 0.55) {
+ rmSetPlacementSection(0.10, 0.30);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ rmSetPlacementSection(0.60, 0.80);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ }
+ else {
+ rmSetPlacementSection(0.60, 0.80);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ rmSetPlacementSection(0.10, 0.30);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ }
+ }
+
+}
+else{
+
+ if (rmGetIsFFA()) {
+ if (cNumberNonGaiaPlayers==3) {
+ rmPlacePlayer(1, 0.75, 0.7);
+ rmPlacePlayer(2, 0.2, 0.7);
+ rmPlacePlayer(3, 0.5, 0.1);
+ }
+ else {
+ rmPlacePlayer(1, 0.75, 0.7);
+ rmPlacePlayer(2, 0.1, 0.4);
+ rmPlacePlayer(3, 0.5, 0.1);
+ rmPlacePlayer(6, 0.5, 0.5);
+ rmPlacePlayersLine(0.3, 0.8, 0.8, 0.3, 0.0, 0.0);
+ }
+ }
+ else if (cNumberNonGaiaPlayers==2){
+ if (pSwitch < 0.55) {
+ rmPlacePlayer(1, 0.45, 0.88);
+ rmPlacePlayer(2, 0.46, 0.12); // correction for the weird unequal placement, given symmetrical coords // Solved
+ }
+ else {
+ rmPlacePlayer(1, 0.46, 0.12); //
+ rmPlacePlayer(2, 0.45, 0.88);
+ }
+ }
+ else {
+ if (pSwitch < 0.55) {
+ rmSetPlacementSection(0.9, 0.07);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+
+ rmSetPlacementSection(0.43, 0.6);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+ }
+ else {
+ rmSetPlacementSection(0.43, 0.6);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+ rmSetPlacementSection(0.9, 0.07);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+ }
+ }
+}
+
+// Players starting units and resources
+
+int TCvsWater = rmCreateTerrainDistanceConstraint("TC vs water", "Land", false, 15.0);
+
+ int playerStart = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(playerStart, 7.0);
+ rmSetObjectDefMaxDistance(playerStart, 12.0);
+ rmAddObjectDefConstraint(playerStart, avoidAll);
+
+ int startID = rmCreateObjectDef("starting object");
+ rmAddObjectDefItem(startID, "TownCenter", 1, 0.0);
+ rmAddObjectDefToClass(startID, rmClassID("startingUnit"));
+ rmSetObjectDefMinDistance(startID, 0.0);
+ if (cNumberNonGaiaPlayers==2) {
+ rmSetObjectDefMaxDistance(startID, 1.0);
+ }
+ else if (cNumberNonGaiaPlayers>2 && cNumberNonGaiaPlayers<7) {
+ rmSetObjectDefMaxDistance(startID, 5.0);
+ rmAddObjectDefConstraint(startID, avoidImpassableLand);
+ }
+ else {
+ rmSetObjectDefMaxDistance(startID, 20.0);
+ }
+ rmAddObjectDefConstraint(startID, TCvsWater);
+// rmAddObjectDefConstraint(startID, avoidImpassableLand);
+
+ int berryID = rmCreateObjectDef("starting berries");
+ rmAddObjectDefItem(berryID, "BerryBush", 3, 4.0);
+ rmSetObjectDefMinDistance(berryID, 6.0);
+ rmSetObjectDefMaxDistance(berryID, 10.0);
+ rmAddObjectDefConstraint(berryID, avoidCoin);
+ rmAddObjectDefConstraint(berryID, avoidWater);
+ rmAddObjectDefConstraint(berryID, avoidImpassableShort);
+
+ int treeID = rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(treeID, "ypTreeBorneo", rmRandInt(8,12), 10.0);
+ rmSetObjectDefMinDistance(treeID, 12.0);
+ rmSetObjectDefMaxDistance(treeID, 18.0);
+ rmAddObjectDefConstraint(treeID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(treeID, avoidCoin);
+// rmAddObjectDefConstraint(treeID, avoidWater);
+
+ int foodID = rmCreateObjectDef("starting hunt");
+ rmAddObjectDefItem(foodID, "rhea", 6, 8.0);
+ rmSetObjectDefMinDistance(foodID, 2.0);
+ rmSetObjectDefMaxDistance(foodID, 7.0);
+ rmSetObjectDefCreateHerd(foodID, true);
+
+ int startnuggetID= rmCreateObjectDef("starting nugget");
+ rmAddObjectDefItem(startnuggetID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(startnuggetID, 15.0);
+ rmSetObjectDefMaxDistance(startnuggetID, 20.0);
+ rmAddObjectDefConstraint(startnuggetID, avoidWater);
+ rmAddObjectDefConstraint(startnuggetID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(startnuggetID, avoidImpassableShort);
+ rmSetNuggetDifficulty(1, 1);
+
+ int top2=rmCreateArea("top layer 2");
+ rmSetAreaSize(top2, 0.80, 0.80);
+ rmSetAreaTerrainType(top2, "borneo\ground_grass1_borneo");
+ rmSetAreaElevationNoiseBias(top2, 1);
+ rmSetAreaElevationEdgeFalloffDist(top2, 3);
+ rmSetAreaElevationVariation(top2, 2);
+ rmSetAreaElevationPersistence(top2, 0.3);
+ rmSetAreaElevationOctaves(top2, 4);
+ rmSetAreaElevationMinFrequency(top2, 0.05);
+ rmSetAreaElevationType(top2, cElevTurbulence);
+ rmBuildArea(top2);
+
+
+// Natives
+
+if (rmGetIsFFA()==false){
+
+if (diceThrow<0.0){
+
+ // Natives areas
+
+ int tupiIsland=rmCreateArea("land base for tupi village");
+ rmSetAreaSize(tupiIsland, 0.017, 0.017);
+ rmSetAreaBaseHeight(tupiIsland, 2.0);
+
+ if (cNumberNonGaiaPlayers == 2)
+ rmSetAreaLocation(tupiIsland, 0.7, 0.3);
+ else if (cNumberNonGaiaPlayers > 2 && cNumberNonGaiaPlayers < 6)
+ rmSetAreaLocation(tupiIsland, 0.6, 0.2);
+ else
+ rmSetAreaLocation(tupiIsland, 0.6, 0.15);
+ rmSetAreaTerrainType(tupiIsland, "borneo\ground_grass2_borneo");
+ rmSetAreaCoherence(tupiIsland, 1.0);
+ rmBuildArea(tupiIsland);
+
+ int seminoleIsland=rmCreateArea("land base for seminole village");
+ rmSetAreaSize(seminoleIsland, 0.017, 0.017);
+ rmSetAreaBaseHeight(seminoleIsland, 2.0);
+
+ if (cNumberNonGaiaPlayers == 2)
+ rmSetAreaLocation(seminoleIsland, 0.3, 0.7);
+ else if (cNumberNonGaiaPlayers > 2 && cNumberNonGaiaPlayers < 6)
+ rmSetAreaLocation(seminoleIsland, 0.4, 0.8);
+ else
+ rmSetAreaLocation(seminoleIsland, 0.4, 0.85);
+
+ rmSetAreaTerrainType(seminoleIsland, "borneo\ground_grass2_borneo");
+ rmSetAreaCoherence(seminoleIsland, 1.0);
+ rmBuildArea(seminoleIsland);
+
+ int avoidTupiArea = rmCreateAreaDistanceConstraint("avoid tupi village area", tupiIsland, 5.0);
+ int avoidSeminoleArea = rmCreateAreaDistanceConstraint("avoid seminole village area", seminoleIsland, 5.0);
+
+}
+}
+
+ string nativeType = "";
+
+ if (IsYP()) {
+ rmAllocateSubCivs(2);
+ rmSetSubCiv(0, "Caribs");
+ rmSetSubCiv(1, "Jesuit");
+ nativeType = "uger";
+ }
+ else {
+ rmAllocateSubCivs(2);
+ rmSetSubCiv(0, "Caribs");
+ rmSetSubCiv(1, "Maya");
+ nativeType = "uger";
+ }
+
+ int tupiVillageID = rmCreateGrouping("edge carib village", "uger"+rmRandInt(1,4));
+ rmSetGroupingMinDistance(tupiVillageID, 0.0);
+ rmSetGroupingMaxDistance(tupiVillageID, 10.0);
+ //rmAddGroupingToClass(tupiVillageID, rmClassID("natives"));
+ //rmAddGroupingToClass(tupiVillageID, rmClassID("importantItem"));
+ //rmAddGroupingConstraint(tupiVillageID, avoidImpassableShort);
+
+ if (rmGetIsFFA()==false){
+ if (cNumberNonGaiaPlayers==2){
+ if (diceThrow < 0.0) {
+ rmPlaceGroupingInArea(tupiVillageID, 0, tupiIsland, 1);
+ //rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.7, 0.3, 1);
+ }
+ else {
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.65, 0.9);
+ rmAddGroupingConstraint(tupiVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.5, 0.56);
+ }
+ }
+ else {
+ if (diceThrow < 0.0) {
+ rmPlaceGroupingInArea(tupiVillageID, 0, tupiIsland, 1);
+ //rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.65, 0.4);
+ }
+ else {
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.8, 0.85);
+ rmAddGroupingConstraint(tupiVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.5, 0.57);
+ }
+ }
+ }
+
+ int seminoleVillageID = rmCreateGrouping("edge native village", nativeType+rmRandInt(1,4));
+ rmSetGroupingMinDistance(seminoleVillageID, 0.0);
+ rmSetGroupingMaxDistance(seminoleVillageID, 10.0);
+ //rmAddGroupingToClass(seminoleVillageID, rmClassID("natives"));
+ //rmAddGroupingToClass(seminoleVillageID, rmClassID("importantItem"));
+ //rmAddGroupingConstraint(seminoleVillageID, avoidImpassableShort);
+
+ if (rmGetIsFFA()==false){
+ if (cNumberNonGaiaPlayers==2){
+ if (diceThrow < 0.0) {
+ //rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.14, 0.6);
+ rmPlaceGroupingInArea(seminoleVillageID, 0, seminoleIsland, 1);
+ }
+ else {
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.65, 0.1);
+ rmAddGroupingConstraint(seminoleVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.20, 0.55);
+ }
+ }
+ else {
+ if (diceThrow < 0.0) {
+ rmPlaceGroupingInArea(seminoleVillageID, 0, seminoleIsland, 1);
+ //rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.14, 0.6);
+ }
+ else {
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.75, 0.15); // Not returning bool
+ rmAddGroupingConstraint(seminoleVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.15, 0.55);
+ }
+ }
+ }
+
+rmSetStatusText("", 0.3);
+
+ for(i=1; int index variable -> float)
+ rmAddAreaRemoveType(landnoise, "PropEaglesRocks");
+ rmBuildArea(landnoise);
+ }
+ }
+
+ // Some cliffs
+
+ for (i=0; <26) {
+ int cliffs=rmCreateArea("cliff"+i);
+ rmSetAreaSize(cliffs, 0.001, 0.0016);
+ rmAddAreaToClass(cliffs, rmClassID("classCliff"));
+ rmSetAreaCliffType(cliffs, "uger"); // Cave
+ rmSetAreaCliffHeight(cliffs, 10.0, 0.0, 0.5);
+ rmSetAreaCliffEdge(cliffs, 1, 2.0, 0.0, 0.0, 0);
+ rmSetAreaTerrainType(cliffs, "borneo\ground_grass2_borneo");
+ rmSetAreaCliffPainting(cliffs, true, true, true, 0, true);
+ // rmAddAreaTerrainReplacement(cliffs, "cave\cave_top", "amazon\ground2_ama");
+ rmSetAreaMinBlobs(cliffs, 1);
+ rmSetAreaMaxBlobs(cliffs, 1);
+ rmSetAreaCoherence(cliffs, 0.5);
+ rmAddAreaConstraint(cliffs, avoidTownCenter);
+ rmAddAreaConstraint(cliffs, avoidTupiArea);
+ rmAddAreaConstraint(cliffs, avoidSeminoleArea);
+ rmAddAreaConstraint(cliffs, cliffConstraint);
+ rmBuildArea(cliffs);
+ }
+
+ // Layer on top of the noise land base
+
+ int top=rmCreateArea("top layer");
+ rmSetAreaSize(top, 0.80, 0.80);
+ rmSetAreaTerrainType(top, "borneo\ground_grass1_borneo");
+ rmSetAreaElevationNoiseBias(top, 1);
+ rmSetAreaElevationEdgeFalloffDist(top, 3);
+ rmSetAreaElevationVariation(top, 2);
+ rmSetAreaElevationPersistence(top, 0.3);
+ rmSetAreaElevationOctaves(top, 4);
+ rmSetAreaElevationMinFrequency(top, 0.05);
+ rmSetAreaElevationType(top, cElevTurbulence);
+ rmBuildArea(top);
+ }
+}
+
+rmSetStatusText("", 0.5);
+
+// Player gold
+
+ int goldID = rmCreateObjectDef("starting gold");
+ rmAddObjectDefItem(goldID, "mine", 1, 0.0);
+ rmSetObjectDefMinDistance(goldID, 0.0);
+ rmSetObjectDefMaxDistance(goldID, 8.0);
+// rmAddObjectDefConstraint(goldID, avoidWaterShort);
+// rmAddObjectDefConstraint(goldID, avoidImpassableShort);
+
+ if (cNumberNonGaiaPlayers==2){
+ //rmSetIgnoreForceToGaia(true);
+ int positionSwitch = rmRandInt(1,2);
+ vector locTC1 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(startID, 1));
+ vector locTC2 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(startID, 2));
+
+ if (positionSwitch == 1) {
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC1)), rmZMetersToFraction((xsVectorGetZ(locTC1))-5));
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC2)), rmZMetersToFraction((xsVectorGetZ(locTC2))+5));
+ }
+ else {
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC1)), rmZMetersToFraction((xsVectorGetZ(locTC1))+5));
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC2)), rmZMetersToFraction((xsVectorGetZ(locTC2))-5));
+ }
+ }
+ else {
+
+ for(i=1;
+
+ ui\random_map\africa\congo\congo_ss_01
+ ui\random_map\africa\congo\congo_ss_02
+ ui\random_map\africa\congo\congo_ss_03
+
\ No newline at end of file
diff --git a/RMM/CongoLarge.xs b/RMM/CongoLarge.xs
new file mode 100644
index 0000000..a7b3cb2
--- /dev/null
+++ b/RMM/CongoLarge.xs
@@ -0,0 +1,1672 @@
+/*
+# Mosquito Coast
+#
+# Monteverde / Tortuguero / Cano Negro
+#
+# The map portrays a corner of the Caribbean lowlands - a maze of rivers, canals, lagoons
+# and tidal wetlands. Showcasing lush and dense cloud forests, home of a unique mix of
+# animals and plants, the region gets heavy rainfall throughout the year.
+#
+# The script may randomly load one of two variations:
+# 1. A coastal plateau with numerous deep water pockets, rock ridges and some cliffs peppering the landscape
+# 2. A strip of land with a trade route in the middle section and two smaller land areas on opposite edges of the map, separated by winding water canals
+#
+# FFA has a separate variation with delta islands, divided by pathable waters, and two trade route areas on opposite edges of the map (their positions are random).
+#
+# Each player side gets a native settlement (Caribs or Maya/Jesuits on TAD) in the trade route variation. More settlements can be found
+# close to the edges of the map, in the coastal variation.
+#
+# April-July-November
+#
+# Mister 2014
+*/
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+bool Asian = false;
+
+bool IsYP(){
+ if (rmGetCivID("Japanese")==19)
+ Asian = true;
+ return(Asian);
+}
+
+int landnoise=0;
+int num=0;
+void Area(float Asize=0.0, float spotX=0.0, float spotZ=0.0, string Paint=""){
+ landnoise=rmCreateArea("Some Area"+num);
+ rmSetAreaSize(landnoise, Asize, Asize);
+ rmSetAreaTerrainType(landnoise, Paint);
+ rmSetAreaCliffType(landnoise, "uger");
+ rmSetAreaCliffHeight(landnoise, 1.0, 0.0, 1.0);
+ rmSetAreaCliffEdge(landnoise, 1, 1.0, 0.0, 0.0, 0);
+ rmSetAreaCliffPainting(landnoise, true, false, false, 0, true);
+ rmSetAreaCoherence(landnoise, 0.80);
+ rmSetAreaSmoothDistance(landnoise, 3);
+ rmSetAreaHeightBlend(landnoise, 4);
+ rmSetAreaBaseHeight(landnoise, 0.0);
+ rmSetAreaElevationNoiseBias(landnoise, 0);
+ rmSetAreaElevationEdgeFalloffDist(landnoise, 3);
+ rmSetAreaElevationVariation(landnoise, 2);
+ rmSetAreaElevationPersistence(landnoise, 0.3);
+ rmSetAreaElevationOctaves(landnoise, 4);
+ rmSetAreaElevationMinFrequency(landnoise, 0.04);
+ rmSetAreaElevationType(landnoise, cElevTurbulence);
+ rmSetAreaLocation(landnoise, spotX, spotZ); // DBG flag -- line 912
+ num=num+1;
+}
+
+float PI = 3.1415926535897932384626433832795;
+float pow(float x = 0,int p = 0) {
+ float x2 = 1; float x4 = 1; float x8 = 1; float x16 = 1; float x32 = 1; float x64 = 1;
+ if(p>=2) x2 = x*x;
+ if(p>=4) x4 = x2*x2;
+ if(p>=8) x8 = x4*x4;
+ if(p>=16) x16 = x8*x8;
+ if(p>=32) x32 = x16*x16;
+ if(p>=64) x64 = x32*x32;
+ float ret = 1;
+ while(p>=64) { ret = ret * x64; p = p - 64; }
+ if(p>=32) { ret = ret * x32; p = p - 32; }
+ if(p>=16) { ret = ret * x16; p = p - 16; }
+ if(p>=8) { ret = ret * x8; p = p - 8; }
+ if(p>=4) { ret = ret * x4; p = p - 4; }
+ if(p>=2) { ret = ret * x2; p = p - 2; }
+ if(p>=1) { ret = ret * x; p = p - 1; }
+ return (ret);
+}
+float atan(float n = 0) {
+ float m = n;
+ if(n > 1) m = 1.0 / n;
+ if(n < -1) m = -1.0 / n;
+ float r = m;
+ for(i = 1; < 100) { int j = i * 2 + 1; float k = pow(m,j) / j;
+ if(k == 0) break;
+ if(i % 2 == 0) r = r + k;
+ if(i % 2 == 1) r = r - k;
+ }
+ if(n > 1 || n < -1) r = PI / 2.0 - r;
+ if(n < -1) r = 0.0 - r;
+ return (r);
+}
+float atan2(float z = 0,float x = 0) {
+ if(x > 0) return (atan(z / x));
+ if(x < 0) { if(z < 0) return (atan(z / x) - PI);
+ if(z > 0) return (atan(z / x) + PI);
+ return (PI);
+ }
+ if(z > 0) return (PI / 2.0);
+ if(z < 0) return (0.0 - (PI / 2.0));
+ return (0);
+}
+float fact(float n = 0) {
+ float r = 1;
+ for(i = 1; <= n) { r = r * i; }
+ return (r);
+}
+float cos(float n = 0) {
+ float r = 1;
+ for(i = 1; < 100) {
+ int j = i * 2; float k = pow(n,j) / fact(j);
+ if(k == 0) break;
+ if(i % 2 == 0) r = r + k;
+ if(i % 2 == 1) r = r - k;
+ }
+ return (r);
+}
+float sin(float n = 0) {
+ float r = n;
+ for(i = 1; < 100) {
+ int j = i * 2 + 1;
+ float k = pow(n,j) / fact(j);
+ if(k == 0) break;
+ if(i % 2 == 0) r = r + k;
+ if(i % 2 == 1) r = r - k;
+ }
+ return (r);
+}
+
+float LocX = 0;
+float LocZ = 0;
+float wAngle = 0;
+
+float getLocX(float xOrigin=0, float rad=0, float MyAngle=0) {
+ wAngle = (2*PI*MyAngle)/360;
+ LocX=cos(wAngle)*rad + xOrigin;
+ return(LocX);
+}
+
+float getLocZ(float zOrigin=0, float rad=0, float MyAngle=0) {
+ wAngle = (2*PI*MyAngle)/360;
+ LocZ=sin(wAngle)*rad + zOrigin;
+ return(LocZ);
+}
+
+int classSmallIsland = 0;
+int islandConstraint2 = 0;
+int avoidSmallIslands = 0;
+int islandEdgeConstraint = 0;
+
+int buildTradeArea (string TradeIslandName = "", float xLoc = 0.0, float zLoc = 0.0, float xFrac1 = 0.0, float zFrac1 = 0.0, float xFrac2 = 0.0, float zFrac2 = 0.0, string socketDef="") {
+ int tradeIslandID=rmCreateArea(TradeIslandName);
+ rmSetAreaSize(tradeIslandID, 0.09, 0.09);
+ rmAddAreaToClass(tradeIslandID, classSmallIsland);
+ rmSetAreaTerrainType(tradeIslandID, "borneo\ground_grass1_borneo");
+ //rmAddAreaTerrainLayer(tradeIslandID, "amazon\river1_am", 0, 14);
+ //rmSetAreaMix(tradeIslandID, "yucatan_grass");
+ rmSetAreaEdgeFilling(tradeIslandID, 0);
+ rmSetAreaBaseHeight(tradeIslandID, 2.0);
+ rmSetAreaSmoothDistance(tradeIslandID, 5);
+ /*rmAddAreaConstraint(tradeIslandID, avoidSmallIslands);
+ rmAddAreaConstraint(tradeIslandID, islandConstraint2); */
+ rmSetAreaCoherence(tradeIslandID, 0.6);
+ rmSetAreaLocation(tradeIslandID, xLoc, zLoc);
+ rmSetAreaElevationType(tradeIslandID, cElevTurbulence);
+ rmSetAreaElevationVariation(tradeIslandID, 4.0);
+ rmSetAreaElevationMinFrequency(tradeIslandID, 0.09);
+ rmSetAreaElevationOctaves(tradeIslandID, 3);
+ rmSetAreaElevationPersistence(tradeIslandID, 0.2);
+ rmSetAreaElevationNoiseBias(tradeIslandID, 1);
+ rmAddAreaInfluenceSegment(tradeIslandID, xFrac1, zFrac1, xFrac2, zFrac2);
+ rmAddAreaRemoveType(tradeIslandID, "borneo_underbrush");
+ rmAddAreaRemoveType(tradeIslandID, "PropTurtles");
+ rmAddAreaRemoveType(tradeIslandID, "PropSwan");
+ rmAddAreaRemoveType(tradeIslandID, "PropFish");
+ rmAddAreaRemoveType(tradeIslandID, "DuckFamily");
+ rmBuildArea(tradeIslandID);
+
+ int tradeRouteID = rmCreateTradeRoute();
+ int socketID=rmCreateObjectDef(socketDef);
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 8.0);
+ rmAddTradeRouteWaypoint(tradeRouteID, xFrac1, zFrac1);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, xFrac2, zFrac2, 6, 6);
+ // rmAddTradeRouteWaypoint(tradeRouteID, xFrac2, zFrac2);
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ return(tradeIslandID);
+}
+
+void main(void){
+
+rmSetStatusText("", 0.0);
+
+ if (rmGetIsFFA()==false) {
+ float diceThrow = rmRandFloat(0,1.8);
+ // <0.9 coastal version with noisy plateau, no trade route
+ // >=0.9 central plateau with trade route
+ }
+
+ float playerTiles=18000;
+ if (cNumberNonGaiaPlayers>4)
+ playerTiles = 16800;
+ if (cNumberNonGaiaPlayers>6)
+ playerTiles = 14000;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmSetMapSize(size, size);
+
+ rmSetSeaType("Borneo Water");
+
+ if (rmGetIsFFA()) {
+ rmSetSeaLevel(-2.0);
+ if (IsYP())
+ rmSetMapType("deccan");
+ else
+ rmSetMapType("deccan");
+ }
+ else {
+ if (IsYP()) {
+ if (diceThrow<0.0) { // Coastal variation
+ rmSetSeaLevel(-5.0);
+ rmSetMapType("deccan");
+ }
+ else { // Trade route variation
+ if (rmRandFloat(0,1)>0.67) {
+ rmSetMapType("deccan");
+ }
+ else {
+ rmSetMapType("deccan");
+ }
+ rmSetSeaLevel(0.0);
+ rmSetGlobalRain(0.0);
+ }
+ }
+ else {
+ if (diceThrow<0.0) { // Coastal variation
+ rmSetSeaLevel(-5.0);
+ rmSetMapType("deccan");
+ }
+ else { // Trade route variation
+ if (rmRandFloat(0,1)>0.67) {
+ rmSetMapType("deccan");
+ }
+ else {
+ rmSetMapType("deccan");
+ }
+ rmSetSeaLevel(0.0);
+ rmSetGlobalRain(0.0);
+ }
+ }
+ }
+
+ rmSetMapType("deccan");
+ rmSetMapType("water");
+ rmSetLightingSet("301a_malta");
+ rmTerrainInitialize("water");
+
+chooseMercs();
+
+ // Make it rain
+ rmSetGlobalRain( 0.7 );
+
+rmSetWindMagnitude(2);
+//rmSetGlobalStormLength(20, 20);
+
+int classPlayer=rmDefineClass("player");
+int classBase=rmDefineClass("land base");
+rmDefineClass("startingUnit");
+rmDefineClass("natives");
+rmDefineClass("importantItem");
+rmDefineClass("nuggets");
+rmDefineClass("classCliff");
+rmDefineClass("classForest");
+rmDefineClass("socketClass");
+rmDefineClass("deltaIsland");
+int classIsland=rmDefineClass("island");
+int classPlateau=rmDefineClass("plateau");
+classSmallIsland=rmDefineClass("smallIsland");
+int classLake=rmDefineClass("lake");
+int classLakeIsland=rmDefineClass("lakeIsland");
+int classBay=rmDefineClass("bay");
+int classBonusIsland=rmDefineClass("bonus island");
+int classSideIsland=rmDefineClass("side island");
+
+int bonusIslandConstraint=rmCreateClassDistanceConstraint("avoid bonus island", classBonusIsland, 10.0);
+int bonusIslandConstraintMed=rmCreateClassDistanceConstraint("avoid bonus island medium", classBonusIsland, 16.0);
+int longBonusIslandConstraint=rmCreateClassDistanceConstraint("long avoid bonus island", classBonusIsland, 30.0);
+int medSideIslandConstraint=rmCreateClassDistanceConstraint("avoid side island medium", classSideIsland, 12.0);
+int longSideIslandConstraint=rmCreateClassDistanceConstraint("long avoid side island", classSideIsland, 30.0);
+int lakeConstraint=rmCreateClassDistanceConstraint("avoid bay", classLake, 15.0);
+//int bayConstraint=rmCreateClassDistanceConstraint("avoid bay", classBay, 3);
+int avoidIslet=rmCreateClassDistanceConstraint("small island avoid islands", rmClassID("deltaIsland"), 12.0);
+int islandConstraint=rmCreateClassDistanceConstraint("islands avoid each other", classIsland, 15.0);
+int islandConstraintSmall=rmCreateClassDistanceConstraint("islets avoid big Islands", classIsland, 12.0);
+int plateauConstraint=rmCreateClassDistanceConstraint("plateaus avoid each other", classPlateau, 18.0);
+islandConstraint2=rmCreateClassDistanceConstraint("stay away from main island", classIsland, 12.0);
+avoidSmallIslands = rmCreateClassDistanceConstraint("stay away from other bonus islands", classSmallIsland, 10.0);
+int avoidLakes=rmCreateClassDistanceConstraint("avoid lakes", classLake, 8.0);
+int avoidLakeIsland=rmCreateClassDistanceConstraint("avoid big lake islands", classLakeIsland, 20.0);
+int avoidLakeIslandSmall=rmCreateClassDistanceConstraint("avoid lake islands", classLakeIsland, 10.0);
+islandEdgeConstraint = rmCreatePieConstraint("Islands away from edge of map", 0.5, 0.5, 0, rmGetMapXSize()-12, 0, 0, 0);
+int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(6), rmZTilesToFraction(6), 1.0-rmXTilesToFraction(6), 1.0-rmZTilesToFraction(6), 0.01);
+int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.49), rmDegreesToRadians(0), rmDegreesToRadians(360));
+int avoidEdgeMore=rmCreatePieConstraint("avoid the edge of map", 0.5, 0.5, 0, rmZFractionToMeters(0.45), rmDegreesToRadians(0), rmDegreesToRadians(360));
+int playerConstraint=rmCreateClassDistanceConstraint("player vs. player", classPlayer, 20.0);
+int playerConstraintSmall=rmCreateClassDistanceConstraint("stuff vs. player small", classPlayer, 5.0);
+int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 18.0);
+int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+int avoidNatives=rmCreateClassDistanceConstraint("stuff avoids natives", rmClassID("natives"), 0.0);
+int avoidNativesMed=rmCreateClassDistanceConstraint("stuff avoids natives medium", rmClassID("natives"), 0.0);
+int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
+int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 10.0);
+int avoidImpassableShort=rmCreateTerrainDistanceConstraint("avoid impassable short", "Land", false, 5.0);
+int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.9);
+int cliffConstraint=rmCreateClassDistanceConstraint("cliff vs. cliff", rmClassID("classCliff"), 45.0);
+int avoidCliff=rmCreateClassDistanceConstraint("stuff vs. cliff", rmClassID("classCliff"), 5.0);
+int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 20.0);
+int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 6);
+int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 5.0);
+int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+int avoidWater = rmCreateTerrainDistanceConstraint("avoid water", "Land", false, 8.0);
+int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 6.0);
+int avoidWaterPlants = rmCreateTypeDistanceConstraint("water plants avoid each other", "UnderbrushLake", 8);
+int avoidBrush=rmCreateTypeDistanceConstraint("props avoid each other", "UnderbrushJungle", 10.0);
+int avoidCoinShort=rmCreateTypeDistanceConstraint("avoid coin short", "Mine", 5.0);
+int waterConstraint = rmCreateTerrainDistanceConstraint("avoid land short", "Land", true, -1.0);
+int circleConstraint2=rmCreatePieConstraint("circle Constraint2", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+int classPatch = rmDefineClass("patch");
+
+rmSetStatusText("", 0.1);
+
+if (rmGetIsFFA()==false) {
+
+ if (diceThrow>=0.0){ // Trade route variation
+
+ int pool=rmCreateArea("the waterpool");
+ rmSetAreaSize(pool, 0.8, 0.8);
+ rmSetAreaLocation(pool, 0.5, 0.5);
+ rmSetAreaBaseHeight(pool, -0.5);
+ rmSetAreaCoherence(pool, 1.00);
+ rmBuildArea(pool);
+
+ int plateauCenter=rmCreateArea("center plateau");
+ rmSetAreaSize(plateauCenter, 0.17, 0.17);
+ rmSetAreaTerrainType(plateauCenter, "borneo\ground_grass2_borneo");
+// rmSetAreaMix(plateauCenter, "yucatan_grass");
+ rmSetAreaLocation(plateauCenter, 0.5, 0.5);
+ rmSetAreaCoherence(plateauCenter, 0.5);
+ rmAddAreaToClass(plateauCenter, classPlateau);
+ rmSetAreaBaseHeight(plateauCenter, 1.0);
+ rmSetAreaSmoothDistance(plateauCenter, 20);
+ rmSetAreaElevationType(plateauCenter, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauCenter, 4.0);
+ rmSetAreaElevationMinFrequency(plateauCenter, 0.04);
+ rmSetAreaElevationOctaves(plateauCenter, 4);
+ rmSetAreaElevationPersistence(plateauCenter, 0.5);
+ rmSetAreaElevationNoiseBias(plateauCenter, 1);
+ rmSetAreaEdgeFilling(plateauCenter, 1);
+ rmAddAreaInfluenceSegment(plateauCenter, -0.15, 0.5, 0.5, 0.5);
+ //rmAddAreaRemoveType(plateauCenter, "UnderbrushLake");
+ rmBuildArea(plateauCenter);
+
+ int plateauCenter2=rmCreateArea("center plateau 2");
+ rmSetAreaSize(plateauCenter2, 0.17, 0.17);
+ rmSetAreaTerrainType(plateauCenter2, "borneo\ground_grass1_borneo");
+// rmSetAreaMix(plateauCenter2, "yucatan_grass");
+ rmSetAreaLocation(plateauCenter2, 0.5, 0.5);
+ rmSetAreaCoherence(plateauCenter2, 0.5);
+ rmAddAreaToClass(plateauCenter2, classPlateau);
+ rmSetAreaBaseHeight(plateauCenter2, 1.0);
+ rmSetAreaSmoothDistance(plateauCenter2, 20);
+ rmSetAreaElevationType(plateauCenter2, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauCenter2, 4.0);
+ rmSetAreaElevationMinFrequency(plateauCenter2, 0.04);
+ rmSetAreaElevationOctaves(plateauCenter2, 4);
+ rmSetAreaElevationPersistence(plateauCenter2, 0.5);
+ rmSetAreaElevationNoiseBias(plateauCenter2, 1);
+ rmSetAreaEdgeFilling(plateauCenter2, 1);
+ rmAddAreaInfluenceSegment(plateauCenter2, 0.5, 0.5, 1.1, 0.5);
+ //rmAddAreaRemoveType(plateauCenter2, "UnderbrushLake");
+ rmBuildArea(plateauCenter2);
+
+ // Trade route
+
+ int tradeRouteID = rmCreateTradeRoute();
+ int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmAddObjectDefToClass(socketID, rmClassID("socketClass"));
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 8.0);
+
+ rmAddTradeRouteWaypoint(tradeRouteID, -0.1, .53);
+
+ if (cNumberNonGaiaPlayers==2){
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .2, .43, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .3, .50, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .5, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .7, .53, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .9, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 1.1, .55, 5, 6);
+ }
+ else {
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .1, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .3, .55, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .5, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .7, .55, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, .9, .45, 5, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 1.1, .52, 5, 6);
+ }
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.14);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ vector socketLoc2 = rmGetTradeRouteWayPoint(tradeRouteID, 0.37);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc2);
+ vector socketLoc3 = rmGetTradeRouteWayPoint(tradeRouteID, 0.6);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc3);
+ vector socketLoc4 = rmGetTradeRouteWayPoint(tradeRouteID, 0.8);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc4);
+
+ int plateauNorthID=rmCreateArea("north platform 2");
+ if (cNumberNonGaiaPlayers==2){
+ rmSetAreaSize(plateauNorthID, 0.175, 0.175); // Was 0.15
+ }
+ else {
+ rmSetAreaSize(plateauNorthID, 0.2, 0.2);
+ }
+ rmSetAreaTerrainType(plateauNorthID, "borneo\ground_grass1_borneo");
+ rmSetAreaLocation(plateauNorthID, 0.5, 0.9);
+ rmSetAreaCoherence(plateauNorthID, 0.80);
+ rmAddAreaToClass(plateauNorthID, classIsland);
+ rmAddAreaConstraint(plateauNorthID, plateauConstraint);
+ rmSetAreaBaseHeight(plateauNorthID, 1.0);
+ rmSetAreaSmoothDistance(plateauNorthID, 20);
+ rmSetAreaElevationType(plateauNorthID, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauNorthID, 4.0);
+ rmSetAreaElevationMinFrequency(plateauNorthID, 0.04);
+ rmSetAreaElevationOctaves(plateauNorthID, 4);
+ rmSetAreaElevationPersistence(plateauNorthID, 0.5);
+ rmSetAreaElevationNoiseBias(plateauNorthID, 1);
+ rmSetAreaEdgeFilling(plateauNorthID, 10);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.10, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.30, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.50, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.70, 0.89);
+ rmAddAreaInfluencePoint(plateauNorthID, 0.90, 0.89);
+ //rmAddAreaRemoveType(plateauNorthID, "UnderbrushLake");
+ rmBuildArea(plateauNorthID);
+
+ int plateauSouthID=rmCreateArea("south platform 2");
+ if (cNumberNonGaiaPlayers==2){
+ rmSetAreaSize(plateauSouthID, 0.175, 0.175); // Was 0.15
+ }
+ else {
+ rmSetAreaSize(plateauSouthID, 0.2, 0.2);
+ }
+ rmSetAreaTerrainType(plateauSouthID, "borneo\ground_grass1_borneo");
+// rmSetAreaMix(plateauSouthID, "yucatan_grass");
+ rmSetAreaLocation(plateauSouthID, 0.5, 0.1);
+ rmSetAreaCoherence(plateauSouthID, 0.80);
+ rmAddAreaToClass(plateauSouthID, classIsland);
+ rmSetAreaBaseHeight(plateauSouthID, 1.0);
+ rmSetAreaSmoothDistance(plateauSouthID, 20);
+ rmSetAreaElevationType(plateauSouthID, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauSouthID, 4.0);
+ rmSetAreaElevationMinFrequency(plateauSouthID, 0.04);
+ rmSetAreaElevationOctaves(plateauSouthID, 4);
+ rmSetAreaElevationPersistence(plateauSouthID, 0.5);
+ rmSetAreaElevationNoiseBias(plateauSouthID, 1);
+ rmSetAreaEdgeFilling(plateauSouthID, 10);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.10, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.30, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.50, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.70, 0.11);
+ rmAddAreaInfluencePoint(plateauSouthID, 0.90, 0.11);
+ //rmAddAreaRemoveType(plateauSouthID, "UnderbrushLake");
+ rmBuildArea(plateauSouthID);
+
+
+ // Water weed and wild life
+
+ int avoidLand = rmCreateTerrainDistanceConstraint("avoid land", "Water", false, 5.0);
+
+
+// for (i=0;<(80*cNumberNonGaiaPlayers)) {
+ int waterWeed = rmCreateObjectDef("water weed");
+ rmAddObjectDefItem(waterWeed, "UnderbrushLake", 1, 10.0);
+ rmSetObjectDefMinDistance(waterWeed, 0);
+ rmSetObjectDefMaxDistance(waterWeed, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(waterWeed, avoidEdgeMore);
+ rmAddObjectDefConstraint(waterWeed, avoidWaterPlants);
+ rmAddObjectDefConstraint(waterWeed, waterConstraint);
+ //rmAddObjectDefConstraint(waterWeed, avoidLand);
+ //rmAddObjectDefConstraint(waterWeed, avoidImpassableShort);
+ rmPlaceObjectDefAtLoc(waterWeed, 0, 0.5, 0.5, 50);
+// }
+
+ int wildChance = -1;
+
+ for (i=0;<(4*cNumberNonGaiaPlayers)) {
+ int phloat = rmCreateObjectDef("phloat"+i);
+ wildChance = rmRandInt(0,3);
+ switch(wildChance) { // Many moni, say me say many, many, many
+ case 0: rmAddObjectDefItem(phloat, "PropTurtles", 1, 0.0);
+ case 1: rmAddObjectDefItem(phloat, "PropSwan", 1, 0.0);
+ case 2: rmAddObjectDefItem(phloat, "PropFish", 1, 0.0);
+ case 3: rmAddObjectDefItem(phloat, "DuckFamily", 1, 0.0);
+ }
+ rmSetObjectDefMinDistance(phloat, 0);
+ rmSetObjectDefMaxDistance(phloat, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(phloat, avoidEdgeMore);
+ rmAddObjectDefConstraint(phloat, avoidWaterPlants);
+ rmAddObjectDefConstraint(phloat, waterConstraint);
+ rmAddObjectDefConstraint(phloat, avoidLand);
+ // rmAddObjectDefConstraint(phloat, avoidImpassableShort);
+ rmPlaceObjectDefAtLoc(phloat, 0, 0.5, 0.5, 1);
+ }
+
+} // End of trade route variation
+
+} // End of non-FFA area creation
+
+else { // FFA area creation
+
+
+ int pool2=rmCreateArea("the waterpool 2");
+ rmSetAreaSize(pool2, 0.8, 0.8);
+ rmSetAreaLocation(pool2, 0.5, 0.5);
+ rmSetAreaBaseHeight(pool2, -2.5);
+ rmSetAreaCoherence(pool2, 1.00);
+ rmBuildArea(pool2);
+
+
+}
+
+rmSetStatusText("", 0.2);
+
+// Starting positions for players placement
+
+ float pSwitch = rmRandFloat(0, 1.2);
+
+if (diceThrow<0.0){
+
+ if (rmGetIsFFA())
+ rmPlacePlayersCircular(0.35, 0.35, 0);
+ else {
+ if (pSwitch < 0.55) {
+ rmSetPlacementSection(0.10, 0.30);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ rmSetPlacementSection(0.60, 0.80);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ }
+ else {
+ rmSetPlacementSection(0.60, 0.80);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ rmSetPlacementSection(0.10, 0.30);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.33, 0.33, 0);
+ }
+ }
+
+}
+else{
+
+ if (rmGetIsFFA()) {
+ if (cNumberNonGaiaPlayers==3) {
+ rmPlacePlayer(1, 0.75, 0.7);
+ rmPlacePlayer(2, 0.2, 0.7);
+ rmPlacePlayer(3, 0.5, 0.1);
+ }
+ else {
+ rmPlacePlayer(1, 0.75, 0.7);
+ rmPlacePlayer(2, 0.1, 0.4);
+ rmPlacePlayer(3, 0.5, 0.1);
+ rmPlacePlayer(6, 0.5, 0.5);
+ rmPlacePlayersLine(0.3, 0.8, 0.8, 0.3, 0.0, 0.0);
+ }
+ }
+ else if (cNumberNonGaiaPlayers==2){
+ if (pSwitch < 0.55) {
+ rmPlacePlayer(1, 0.45, 0.88);
+ rmPlacePlayer(2, 0.46, 0.12); // correction for the weird unequal placement, given symmetrical coords // Solved
+ }
+ else {
+ rmPlacePlayer(1, 0.46, 0.12); //
+ rmPlacePlayer(2, 0.45, 0.88);
+ }
+ }
+ else {
+ if (pSwitch < 0.55) {
+ rmSetPlacementSection(0.9, 0.07);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+
+ rmSetPlacementSection(0.43, 0.6);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+ }
+ else {
+ rmSetPlacementSection(0.43, 0.6);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+ rmSetPlacementSection(0.9, 0.07);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersCircular(0.4, 0.4, 0);
+ }
+ }
+}
+
+// Players starting units and resources
+
+int TCvsWater = rmCreateTerrainDistanceConstraint("TC vs water", "Land", false, 15.0);
+
+ int playerStart = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(playerStart, 7.0);
+ rmSetObjectDefMaxDistance(playerStart, 12.0);
+ rmAddObjectDefConstraint(playerStart, avoidAll);
+
+ int startID = rmCreateObjectDef("starting object");
+ rmAddObjectDefItem(startID, "TownCenter", 1, 0.0);
+ rmAddObjectDefToClass(startID, rmClassID("startingUnit"));
+ rmSetObjectDefMinDistance(startID, 0.0);
+ if (cNumberNonGaiaPlayers==2) {
+ rmSetObjectDefMaxDistance(startID, 1.0);
+ }
+ else if (cNumberNonGaiaPlayers>2 && cNumberNonGaiaPlayers<7) {
+ rmSetObjectDefMaxDistance(startID, 5.0);
+ rmAddObjectDefConstraint(startID, avoidImpassableLand);
+ }
+ else {
+ rmSetObjectDefMaxDistance(startID, 20.0);
+ }
+ rmAddObjectDefConstraint(startID, TCvsWater);
+// rmAddObjectDefConstraint(startID, avoidImpassableLand);
+
+ int berryID = rmCreateObjectDef("starting berries");
+ rmAddObjectDefItem(berryID, "BerryBush", 3, 4.0);
+ rmSetObjectDefMinDistance(berryID, 6.0);
+ rmSetObjectDefMaxDistance(berryID, 10.0);
+ rmAddObjectDefConstraint(berryID, avoidCoin);
+ rmAddObjectDefConstraint(berryID, avoidWater);
+ rmAddObjectDefConstraint(berryID, avoidImpassableShort);
+
+ int treeID = rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(treeID, "ypTreeBorneo", rmRandInt(8,12), 10.0);
+ rmSetObjectDefMinDistance(treeID, 12.0);
+ rmSetObjectDefMaxDistance(treeID, 18.0);
+ rmAddObjectDefConstraint(treeID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(treeID, avoidCoin);
+// rmAddObjectDefConstraint(treeID, avoidWater);
+
+ int foodID = rmCreateObjectDef("starting hunt");
+ rmAddObjectDefItem(foodID, "rhea", 6, 8.0);
+ rmSetObjectDefMinDistance(foodID, 2.0);
+ rmSetObjectDefMaxDistance(foodID, 7.0);
+ rmSetObjectDefCreateHerd(foodID, true);
+
+ int startnuggetID= rmCreateObjectDef("starting nugget");
+ rmAddObjectDefItem(startnuggetID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(startnuggetID, 15.0);
+ rmSetObjectDefMaxDistance(startnuggetID, 20.0);
+ rmAddObjectDefConstraint(startnuggetID, avoidWater);
+ rmAddObjectDefConstraint(startnuggetID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(startnuggetID, avoidImpassableShort);
+ rmSetNuggetDifficulty(1, 1);
+
+ int top2=rmCreateArea("top layer 2");
+ rmSetAreaSize(top2, 0.80, 0.80);
+ rmSetAreaTerrainType(top2, "borneo\ground_grass1_borneo");
+ rmSetAreaElevationNoiseBias(top2, 1);
+ rmSetAreaElevationEdgeFalloffDist(top2, 3);
+ rmSetAreaElevationVariation(top2, 2);
+ rmSetAreaElevationPersistence(top2, 0.3);
+ rmSetAreaElevationOctaves(top2, 4);
+ rmSetAreaElevationMinFrequency(top2, 0.05);
+ rmSetAreaElevationType(top2, cElevTurbulence);
+ rmBuildArea(top2);
+
+
+// Natives
+
+if (rmGetIsFFA()==false){
+
+if (diceThrow<0.0){
+
+ // Natives areas
+
+ int tupiIsland=rmCreateArea("land base for tupi village");
+ rmSetAreaSize(tupiIsland, 0.017, 0.017);
+ rmSetAreaBaseHeight(tupiIsland, 2.0);
+
+ if (cNumberNonGaiaPlayers == 2)
+ rmSetAreaLocation(tupiIsland, 0.7, 0.3);
+ else if (cNumberNonGaiaPlayers > 2 && cNumberNonGaiaPlayers < 6)
+ rmSetAreaLocation(tupiIsland, 0.6, 0.2);
+ else
+ rmSetAreaLocation(tupiIsland, 0.6, 0.15);
+ rmSetAreaTerrainType(tupiIsland, "borneo\ground_grass2_borneo");
+ rmSetAreaCoherence(tupiIsland, 1.0);
+ rmBuildArea(tupiIsland);
+
+ int seminoleIsland=rmCreateArea("land base for seminole village");
+ rmSetAreaSize(seminoleIsland, 0.017, 0.017);
+ rmSetAreaBaseHeight(seminoleIsland, 2.0);
+
+ if (cNumberNonGaiaPlayers == 2)
+ rmSetAreaLocation(seminoleIsland, 0.3, 0.7);
+ else if (cNumberNonGaiaPlayers > 2 && cNumberNonGaiaPlayers < 6)
+ rmSetAreaLocation(seminoleIsland, 0.4, 0.8);
+ else
+ rmSetAreaLocation(seminoleIsland, 0.4, 0.85);
+
+ rmSetAreaTerrainType(seminoleIsland, "borneo\ground_grass2_borneo");
+ rmSetAreaCoherence(seminoleIsland, 1.0);
+ rmBuildArea(seminoleIsland);
+
+ int avoidTupiArea = rmCreateAreaDistanceConstraint("avoid tupi village area", tupiIsland, 5.0);
+ int avoidSeminoleArea = rmCreateAreaDistanceConstraint("avoid seminole village area", seminoleIsland, 5.0);
+
+}
+}
+
+ string nativeType = "";
+
+ if (IsYP()) {
+ rmAllocateSubCivs(2);
+ rmSetSubCiv(0, "Caribs");
+ rmSetSubCiv(1, "Jesuit");
+ nativeType = "uger";
+ }
+ else {
+ rmAllocateSubCivs(2);
+ rmSetSubCiv(0, "Caribs");
+ rmSetSubCiv(1, "Maya");
+ nativeType = "uger";
+ }
+
+ int tupiVillageID = rmCreateGrouping("edge carib village", "uger"+rmRandInt(1,4));
+ rmSetGroupingMinDistance(tupiVillageID, 0.0);
+ rmSetGroupingMaxDistance(tupiVillageID, 10.0);
+ //rmAddGroupingToClass(tupiVillageID, rmClassID("natives"));
+ //rmAddGroupingToClass(tupiVillageID, rmClassID("importantItem"));
+ //rmAddGroupingConstraint(tupiVillageID, avoidImpassableShort);
+
+ if (rmGetIsFFA()==false){
+ if (cNumberNonGaiaPlayers==2){
+ if (diceThrow < 0.0) {
+ rmPlaceGroupingInArea(tupiVillageID, 0, tupiIsland, 1);
+ //rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.7, 0.3, 1);
+ }
+ else {
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.65, 0.9);
+ rmAddGroupingConstraint(tupiVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.5, 0.56);
+ }
+ }
+ else {
+ if (diceThrow < 0.0) {
+ rmPlaceGroupingInArea(tupiVillageID, 0, tupiIsland, 1);
+ //rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.65, 0.4);
+ }
+ else {
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.8, 0.85);
+ rmAddGroupingConstraint(tupiVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.5, 0.57);
+ }
+ }
+ }
+
+ int seminoleVillageID = rmCreateGrouping("edge native village", nativeType+rmRandInt(1,4));
+ rmSetGroupingMinDistance(seminoleVillageID, 0.0);
+ rmSetGroupingMaxDistance(seminoleVillageID, 10.0);
+ //rmAddGroupingToClass(seminoleVillageID, rmClassID("natives"));
+ //rmAddGroupingToClass(seminoleVillageID, rmClassID("importantItem"));
+ //rmAddGroupingConstraint(seminoleVillageID, avoidImpassableShort);
+
+ if (rmGetIsFFA()==false){
+ if (cNumberNonGaiaPlayers==2){
+ if (diceThrow < 0.0) {
+ //rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.14, 0.6);
+ rmPlaceGroupingInArea(seminoleVillageID, 0, seminoleIsland, 1);
+ }
+ else {
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.65, 0.1);
+ rmAddGroupingConstraint(seminoleVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.20, 0.55);
+ }
+ }
+ else {
+ if (diceThrow < 0.0) {
+ rmPlaceGroupingInArea(seminoleVillageID, 0, seminoleIsland, 1);
+ //rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.14, 0.6);
+ }
+ else {
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.75, 0.15); // Not returning bool
+ rmAddGroupingConstraint(seminoleVillageID, avoidTradeRouteSmall);
+ rmPlaceGroupingAtLoc(seminoleVillageID, 0, 0.15, 0.55);
+ }
+ }
+ }
+
+rmSetStatusText("", 0.3);
+
+ for(i=1; int index variable -> float)
+ rmAddAreaRemoveType(landnoise, "PropEaglesRocks");
+ rmBuildArea(landnoise);
+ }
+ }
+
+ // Some cliffs
+
+ for (i=0; <26) {
+ int cliffs=rmCreateArea("cliff"+i);
+ rmSetAreaSize(cliffs, 0.001, 0.0016);
+ rmAddAreaToClass(cliffs, rmClassID("classCliff"));
+ rmSetAreaCliffType(cliffs, "uger"); // Cave
+ rmSetAreaCliffHeight(cliffs, 10.0, 0.0, 0.5);
+ rmSetAreaCliffEdge(cliffs, 1, 2.0, 0.0, 0.0, 0);
+ rmSetAreaTerrainType(cliffs, "borneo\ground_grass2_borneo");
+ rmSetAreaCliffPainting(cliffs, true, true, true, 0, true);
+ // rmAddAreaTerrainReplacement(cliffs, "cave\cave_top", "amazon\ground2_ama");
+ rmSetAreaMinBlobs(cliffs, 1);
+ rmSetAreaMaxBlobs(cliffs, 1);
+ rmSetAreaCoherence(cliffs, 0.5);
+ rmAddAreaConstraint(cliffs, avoidTownCenter);
+ rmAddAreaConstraint(cliffs, avoidTupiArea);
+ rmAddAreaConstraint(cliffs, avoidSeminoleArea);
+ rmAddAreaConstraint(cliffs, cliffConstraint);
+ rmBuildArea(cliffs);
+ }
+
+ // Layer on top of the noise land base
+
+ int top=rmCreateArea("top layer");
+ rmSetAreaSize(top, 0.80, 0.80);
+ rmSetAreaTerrainType(top, "borneo\ground_grass1_borneo");
+ rmSetAreaElevationNoiseBias(top, 1);
+ rmSetAreaElevationEdgeFalloffDist(top, 3);
+ rmSetAreaElevationVariation(top, 2);
+ rmSetAreaElevationPersistence(top, 0.3);
+ rmSetAreaElevationOctaves(top, 4);
+ rmSetAreaElevationMinFrequency(top, 0.05);
+ rmSetAreaElevationType(top, cElevTurbulence);
+ rmBuildArea(top);
+ }
+}
+
+rmSetStatusText("", 0.5);
+
+// Player gold
+
+ int goldID = rmCreateObjectDef("starting gold");
+ rmAddObjectDefItem(goldID, "mine", 1, 0.0);
+ rmSetObjectDefMinDistance(goldID, 0.0);
+ rmSetObjectDefMaxDistance(goldID, 8.0);
+// rmAddObjectDefConstraint(goldID, avoidWaterShort);
+// rmAddObjectDefConstraint(goldID, avoidImpassableShort);
+
+ if (cNumberNonGaiaPlayers==2){
+ //rmSetIgnoreForceToGaia(true);
+ int positionSwitch = rmRandInt(1,2);
+ vector locTC1 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(startID, 1));
+ vector locTC2 = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(startID, 2));
+
+ if (positionSwitch == 1) {
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC1)), rmZMetersToFraction((xsVectorGetZ(locTC1))-5));
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC2)), rmZMetersToFraction((xsVectorGetZ(locTC2))+5));
+ }
+ else {
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC1)), rmZMetersToFraction((xsVectorGetZ(locTC1))+5));
+ rmPlaceObjectDefAtLoc(goldID, 0, rmXMetersToFraction(xsVectorGetX(locTC2)), rmZMetersToFraction((xsVectorGetZ(locTC2))-5));
+ }
+ }
+ else {
+
+ for(i=1; 2)
+ playerplacement = 1;
+
+ // Picks the map size
+ int playerTiles=24000; //
+ if (cNumberNonGaiaPlayers >= 4)
+ playerTiles=22000;
+ if (cNumberNonGaiaPlayers >= 6)
+ playerTiles=20000;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles); //2.1
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, size);
+
+ // Make the corners.
+ rmSetWorldCircleConstraint(false);
+
+ // Picks a default water height
+ rmSetSeaLevel(1.0); // this is height of river surface compared to surrounding land. River depth is in the river XML.
+
+// rmSetMapElevationParameters(cElevTurbulence, 0.05, 2, 0.5, 4.5); // type, frequency, octaves, persistence, variation
+// rmSetMapElevationHeightBlend(1);
+
+
+ // Picks default terrain and water
+ rmSetSeaType("Indonesia Coast");
+ rmSetBaseTerrainMix("coastal_japan_b"); //
+ rmTerrainInitialize("water", 0.0); //
+ rmSetMapType("Japan");
+ rmSetMapType("grass");
+ rmSetMapType("water");
+ rmSetLightingSet("borneo");
+
+ // Choose Mercs
+ chooseMercs();
+
+ // Text
+ rmSetStatusText("",0.10);
+
+ // Set up Natives
+ int subCiv0 = -1;
+ int subCiv1 = -1;
+ int subCiv2 = -1;
+ subCiv0 = rmGetCivID("Jesuit");
+ subCiv1 = rmGetCivID("Zen");
+ rmSetSubCiv(0, "Jesuit");
+ rmSetSubCiv(1, "Zen");
+
+
+ //Define some classes. These are used later for constraints.
+ int classPlayer = rmDefineClass("player");
+ int classPatch = rmDefineClass("patch");
+ int classPatch2 = rmDefineClass("patch2");
+ int classPatch3 = rmDefineClass("patch3");
+ int classPond = rmDefineClass("pond");
+ int classRocks = rmDefineClass("rocks");
+ int classGrass = rmDefineClass("grass");
+ rmDefineClass("starting settlement");
+ rmDefineClass("startingUnit");
+ int classForest = rmDefineClass("Forest");
+ int importantItem = rmDefineClass("importantItem");
+ int classNative = rmDefineClass("natives");
+ int classCliff = rmDefineClass("Cliffs");
+ int classGold = rmDefineClass("Gold");
+ int classStartingResource = rmDefineClass("startingResource");
+ int classIsland=rmDefineClass("island");
+
+ // ******************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.20);
+
+ // ************************************* CONTRAINTS *****************************************
+ // These are used to have objects and areas avoid each other
+
+ // Cardinal Directions & Map placement
+ int avoidEdge = rmCreatePieConstraint("Avoid Edge",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.47), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int avoidEdgeMore = rmCreatePieConstraint("Avoid Edge More",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.38), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int avoidCenter = rmCreatePieConstraint("Avoid Center",0.5,0.5,rmXFractionToMeters(0.22), rmXFractionToMeters(0.5), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int stayCenter = rmCreatePieConstraint("Stay Center", 0.50, 0.50, rmXFractionToMeters(0.0), rmXFractionToMeters(0.16), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int stayCenterMore = rmCreatePieConstraint("Stay Center more",0.45,0.45,rmXFractionToMeters(0.0), rmXFractionToMeters(0.26), rmDegreesToRadians(0),rmDegreesToRadians(360));
+
+ int staySouthPart = rmCreatePieConstraint("Stay south part", 0.55, 0.55,rmXFractionToMeters(0.0), rmXFractionToMeters(0.60), rmDegreesToRadians(135),rmDegreesToRadians(315));
+ int stayNorthHalf = rmCreatePieConstraint("Stay north half", 0.50, 0.50,rmXFractionToMeters(0.0), rmXFractionToMeters(0.50), rmDegreesToRadians(360),rmDegreesToRadians(180));
+
+ // Resource avoidance
+ int avoidForest = rmCreateClassDistanceConstraint("avoid forest", rmClassID("Forest"), 24.0); //15.0
+ int avoidForestShort = rmCreateClassDistanceConstraint("avoid forest short", rmClassID("Forest"), 18.0); //15.0
+ int avoidForestVeryShort = rmCreateClassDistanceConstraint("avoid forest very short", rmClassID("Forest"), 8.0); //15.0
+ int avoidForestMin = rmCreateClassDistanceConstraint("avoid forest min", rmClassID("Forest"), 4.0);
+ int avoidBerriesFar = rmCreateTypeDistanceConstraint("avoid Berries far", "berrybush", 50.0);
+ int avoidBerries = rmCreateTypeDistanceConstraint("avoid Berries", "berrybush", 40.0);
+ int avoidBerriesShort = rmCreateTypeDistanceConstraint("avoid Berries short", "berrybush", 20.0);
+ int avoidBerriesMin = rmCreateTypeDistanceConstraint("avoid Berries min", "berrybush", 4.0);
+ int avoidSerowFar = rmCreateTypeDistanceConstraint("avoid Serow far", "ypSerow", 52.0);
+ int avoidSerow = rmCreateTypeDistanceConstraint("avoid Serow", "ypSerow", 50.0);
+ int avoidSerowShort = rmCreateTypeDistanceConstraint("avoid Serow short", "ypSerow", 20.0);
+ int avoidSerowMin = rmCreateTypeDistanceConstraint("avoid Serow min", "ypSerow", 4.0);
+ int avoidEleFar = rmCreateTypeDistanceConstraint("avoid Ele far", "ypIbex", 45.0);
+ int avoidEle = rmCreateTypeDistanceConstraint("avoid Ele", "ypIbex", 40.0);
+ int avoidEleShort = rmCreateTypeDistanceConstraint("avoid Ele short", "ypIbex", 25.0);
+ int avoidEleMin = rmCreateTypeDistanceConstraint("avoid Ele min", "ypIbex", 5.0);
+ int avoidGoldMed = rmCreateTypeDistanceConstraint("coin avoids coin", "gold", 25.0);
+ int avoidGoldTypeShort = rmCreateTypeDistanceConstraint("coin avoids coin short", "gold", 8.0);
+ int avoidGoldType = rmCreateTypeDistanceConstraint("coin avoids coin ", "gold", 45.0);
+ int avoidGoldTypeFar = rmCreateTypeDistanceConstraint("coin avoids coin far ", "gold", 52.0);
+ int avoidGoldMin=rmCreateClassDistanceConstraint("min distance vs gold", rmClassID("Gold"), 8.0);
+ int avoidGoldShort = rmCreateClassDistanceConstraint ("gold avoid gold short", rmClassID("Gold"), 15.0);
+ int avoidGold = rmCreateClassDistanceConstraint ("gold avoid gold med", rmClassID("Gold"), 58.0-1*cNumberNonGaiaPlayers);
+ int avoidGoldFar = rmCreateClassDistanceConstraint ("gold avoid gold far", rmClassID("Gold"), 68.0-1*cNumberNonGaiaPlayers);
+ int avoidGoldVeryFar = rmCreateClassDistanceConstraint ("gold avoid gold very far", rmClassID("Gold"), 66.0);
+ int avoidNuggetWater = rmCreateTypeDistanceConstraint("avoid nugget water", "AbstractNugget", 95.0);
+ int avoidNuggetWaterShort = rmCreateTypeDistanceConstraint("avoid nugget water short", "AbstractNugget", 15.0);
+ int avoidNuggetMin = rmCreateTypeDistanceConstraint("avoid nugget min", "AbstractNugget", 4.0);
+ int avoidNuggetShort = rmCreateTypeDistanceConstraint("avoid nugget short", "AbstractNugget", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("avoid nugget", "AbstractNugget", 50.0);
+ int avoidNuggetFar = rmCreateTypeDistanceConstraint("avoid nugget Far", "AbstractNugget", 50.0);
+ int avoidTownCenterVeryFar = rmCreateTypeDistanceConstraint("avoid Town Center Very Far", "townCenter", 70.0-1*cNumberNonGaiaPlayers);
+ int avoidTownCenterFar = rmCreateTypeDistanceConstraint("avoid Town Center Far", "townCenter", 46.0);
+ int avoidTownCenter = rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 30.0);
+// int avoidTownCenterMed = rmCreateTypeDistanceConstraint("avoid Town Center med", "townCenter", 40.0);
+ int avoidTownCenterShort = rmCreateTypeDistanceConstraint("avoid Town Center short", "townCenter", 26.0);
+ int avoidTownCenterMin = rmCreateTypeDistanceConstraint("avoid Town Center min", "townCenter", 18.0);
+ int avoidNativesShort = rmCreateClassDistanceConstraint("avoid natives short", rmClassID("natives"), 6.0);
+ int avoidNatives = rmCreateClassDistanceConstraint("avoid natives", rmClassID("natives"), 10.0);
+ int avoidNativesFar = rmCreateClassDistanceConstraint("avoid natives far", rmClassID("natives"), 15.0);
+ int avoidStartingResources = rmCreateClassDistanceConstraint("avoid starting resources", rmClassID("startingResource"), 8.0);
+ int avoidStartingResourcesShort = rmCreateClassDistanceConstraint("avoid starting resources short", rmClassID("startingResource"), 4.0);
+ int avoidWhale=rmCreateTypeDistanceConstraint("avoid whale", "fish", 50.0);
+ int avoidFish=rmCreateTypeDistanceConstraint("avoid fish", "fish", 30.0);
+ int avoidBuffalo=rmCreateTypeDistanceConstraint("avoid buffalo", "ypWaterBuffalo", 50.0);
+ int avoidFlag = rmCreateTypeDistanceConstraint("avoid water flag", "HomeCityWaterSpawnFlag", 20.0);
+ int avoidFlagShort = rmCreateTypeDistanceConstraint("avoid water flag short", "HomeCityWaterSpawnFlag", 10.0);
+
+ // Avoid impassable land
+ int avoidImpassableLandMin = rmCreateTerrainDistanceConstraint("avoid impassable land min", "Land", false, 0.5);
+ int avoidImpassableLandShort = rmCreateTerrainDistanceConstraint("avoid impassable land short", "Land", false, 6.0);
+ int avoidImpassableLand = rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 10.0);
+ int avoidImpassableLandMed=rmCreateTerrainDistanceConstraint("avoid impassable land medium", "Land", false, 12.0);
+ int avoidImpassableLandFar = rmCreateTerrainDistanceConstraint("avoid impassable land far", "Land", false, 20.0);
+ int stayNearLand = rmCreateTerrainMaxDistanceConstraint("stay near land ", "Land", true, 5.0);
+ int avoidLand = rmCreateTerrainDistanceConstraint("avoid land ", "Land", true, 8.0);
+ int avoidLandFar = rmCreateTerrainDistanceConstraint("avoid land far ", "Land", true, 15.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "water", true, 3.0);
+ int avoidWater = rmCreateTerrainDistanceConstraint("avoid water", "Land", false, 20.0);
+ int avoidWaterFar = rmCreateTerrainDistanceConstraint("avoid water far", "land", false, 30.0);
+ int stayNearWater = rmCreateTerrainMaxDistanceConstraint("stay near water ", "water", true, 20.0);
+ int stayInWater = rmCreateTerrainMaxDistanceConstraint("stay in water ", "water", true, 0.0);
+ int avoidPatch = rmCreateClassDistanceConstraint("avoid patch", rmClassID("patch"), 5.0);
+ int avoidPatch2 = rmCreateClassDistanceConstraint("avoid patch2", rmClassID("patch2"), 20.0);
+ int avoidPatch3 = rmCreateClassDistanceConstraint("avoid patch3", rmClassID("patch3"), 5.0);
+ int avoidIslandMin=rmCreateClassDistanceConstraint("avoid island min", classIsland, 8.0);
+ int avoidIslandShort=rmCreateClassDistanceConstraint("avoid island short", classIsland, 12.0);
+ int avoidIsland=rmCreateClassDistanceConstraint("avoid island", classIsland, 16.0);
+ int avoidIslandFar=rmCreateClassDistanceConstraint("avoid island far", classIsland, 32.0);
+ int avoidCliffShort = rmCreateClassDistanceConstraint("avoid cliff short", classCliff, 3.0);
+ int avoidCliff = rmCreateClassDistanceConstraint("avoid cliff", classCliff, 5.0);
+
+ // Unit avoidance
+ int avoidStartingUnits = rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 35.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 7.0);
+
+ // VP avoidance
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 8.0);
+ int avoidTradeRouteShort = rmCreateTradeRouteDistanceConstraint("trade route short", 4.0);
+ int avoidTradeRouteSocket = rmCreateTypeDistanceConstraint("avoid trade route socket", "socketTradeRoute", 8.0);
+ int avoidTradeRouteSocketShort = rmCreateTypeDistanceConstraint("avoid trade route socket short", "socketTradeRoute", 3.0);
+ int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 10.0);
+
+
+ // ***********************************************************************************************
+
+ // **************************************** PLACE PLAYERS ****************************************
+
+ int teamZeroCount = rmGetNumberPlayersOnTeam(0);
+ int teamOneCount = rmGetNumberPlayersOnTeam(1);
+
+ if (cNumberTeams <= 2) // 1v1 and TEAM
+ {
+ if (teamZeroCount == 1 && teamOneCount == 1) // 1v1
+ {
+ float OneVOnePlacement=rmRandFloat(0.0, 0.9);
+
+ if (playerplacement == 1)
+ {
+ if ( OneVOnePlacement < 0.5)
+ {
+ rmPlacePlayer(1, 0.28, 0.52);
+ rmPlacePlayer(2, 0.72, 0.48);
+ }
+ else
+ {
+ rmPlacePlayer(2, 0.28, 0.52);
+ rmPlacePlayer(1, 0.72, 0.48);
+ }
+ }
+ else
+ {
+ if ( OneVOnePlacement < 0.5)
+ {
+ rmPlacePlayer(1, 0.48, 0.72);
+ rmPlacePlayer(2, 0.52, 0.28);
+ }
+ else
+ {
+ rmPlacePlayer(2, 0.48, 0.72);
+ rmPlacePlayer(1, 0.52, 0.28);
+ }
+ }
+ }
+ else if (teamZeroCount == teamOneCount) // equal N of players per TEAM
+ {
+ if (teamZeroCount == 2) // 2v2
+ {
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.28, 0.64, 0.28, 0.48, 0.00, 0.25);
+
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.72, 0.52, 0.72, 0.36, 0.00, 0.25);
+ }
+ else // 3v3, 4v4
+ {
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.28, 0.68, 0.28, 0.44, 0.00, 0.25);
+
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.72, 0.56, 0.72, 0.32, 0.00, 0.25);
+ }
+ }
+ else // unequal N of players per TEAM
+ {
+ if (teamZeroCount == 1 || teamOneCount == 1) // one team is one player
+ {
+ if (teamZeroCount < teamOneCount) // 1v2, 1v3, 1v4, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.28, 0.53, 0.28, 0.55, 0.00, 0.25);
+
+ rmSetPlacementTeam(1);
+ if (teamOneCount == 2)
+ rmPlacePlayersLine(0.72, 0.52, 0.72, 0.36, 0.00, 0.25);
+ else
+ rmPlacePlayersLine(0.72, 0.56, 0.72, 0.32, 0.00, 0.25);
+ }
+ else // 2v1, 3v1, 4v1, etc.
+ {
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.72, 0.45, 0.72, 0.47, 0.00, 0.25);
+
+ rmSetPlacementTeam(0);
+ if (teamZeroCount == 2)
+ rmPlacePlayersLine(0.28, 0.64, 0.28, 0.48, 0.00, 0.25);
+ else
+ rmPlacePlayersLine(0.28, 0.68, 0.28, 0.44, 0.00, 0.25);
+ }
+ }
+ else if (teamZeroCount == 2 || teamOneCount == 2) // one team has 2 players
+ {
+ if (teamZeroCount < teamOneCount) // 2v3, 2v4, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.28, 0.64, 0.28, 0.48, 0.00, 0.25);
+
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.72, 0.56, 0.72, 0.32, 0.00, 0.25);
+ }
+ else // 3v2, 4v2, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.28, 0.68, 0.28, 0.44, 0.00, 0.25);
+
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.72, 0.52, 0.72, 0.36, 0.00, 0.25);
+ }
+ }
+ else // 3v4, 4v3, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.28, 0.68, 0.28, 0.44, 0.00, 0.25);
+
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.72, 0.56, 0.72, 0.32, 0.00, 0.25);
+ }
+ }
+ }
+ else // FFA
+ {
+ rmPlacePlayer(1, 0.28, 0.52);
+ rmPlacePlayer(2, 0.72, 0.48);
+ rmPlacePlayer(3, 0.52, 0.34);
+ rmPlacePlayer(4, 0.48, 0.66);
+ rmPlacePlayer(5, 0.70, 0.32);
+ rmPlacePlayer(6, 0.30, 0.68);
+ rmPlacePlayer(7, 0.87, 0.76);
+ rmPlacePlayer(8, 0.13, 0.24);
+ }
+
+ // **************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.30);
+
+ // ******************************************** MAP LAYOUT **************************************************
+
+ //Bays
+ int bay1ID = rmCreateArea("bay 1");
+// rmSetAreaWaterType(bay1ID, "borneo water");
+ rmSetAreaSize(bay1ID, 0.03, 0.03);
+ if (playerplacement == 1)
+ rmSetAreaLocation(bay1ID, 0.52, 0.84);
+ else
+ rmSetAreaLocation(bay1ID, 0.84, 0.52);
+ rmSetAreaCoherence(bay1ID, 0.60);
+ rmSetAreaSmoothDistance(bay1ID, 12);
+// rmAddAreaInfluenceSegment(bay1ID, 0.42, 0.58, 0.58, 0.42);
+// rmAddAreaTerrainLayer(bay1ID, "borneo\ground_sand1_borneo", 0, 3);
+ rmBuildArea(bay1ID);
+
+ int avoidBay1 = rmCreateAreaDistanceConstraint("avoid bay1", bay1ID, 1.0);
+
+ int bay2ID = rmCreateArea("bay 2");
+// rmSetAreaWaterType(bay2ID, "borneo water");
+ rmSetAreaSize(bay2ID, 0.03, 0.03);
+ if (playerplacement == 1)
+ rmSetAreaLocation(bay2ID, 0.52, 0.16);
+ else
+ rmSetAreaLocation(bay2ID, 0.16, 0.52);
+ rmSetAreaCoherence(bay2ID, 0.60);
+ rmSetAreaSmoothDistance(bay2ID, 12);
+// rmAddAreaInfluenceSegment(bay2ID, 0.42, 0.58, 0.58, 0.42);
+// rmAddAreaTerrainLayer(bay2ID, "borneo\ground_sand1_borneo", 0, 3);
+ rmBuildArea(bay2ID);
+
+ int avoidBay2 = rmCreateAreaDistanceConstraint("avoid bay2", bay2ID, 1.0);
+
+
+ //Main island
+ int mainislandID = rmCreateArea("main island");
+ rmSetAreaSize(mainislandID, 0.25, 0.25);
+ rmSetAreaLocation(mainislandID, 0.50, 0.50);
+ rmAddAreaInfluenceSegment(mainislandID, 0.42, 0.58, 0.58, 0.42);
+ rmSetAreaMix(mainislandID, "coastal_japan_b");
+ rmSetAreaTerrainType(mainislandID, "coastal_japan\ground_forest_co_japan");
+ rmPaintAreaTerrain(mainislandID);
+ rmAddAreaTerrainLayer(mainislandID, "coastal_japan\ground_dirt1_co_japan", 0, 2);
+ rmAddAreaTerrainLayer(mainislandID, "coastal_japan\ground_dirt3_co_japan", 2, 4);
+ rmAddAreaTerrainLayer(mainislandID, "coastal_japan\ground_dirt2_co_japan", 4, 6);
+ rmAddAreaTerrainLayer(mainislandID, "coastal_japan\ground_grass3_co_japan", 6, 8);
+ rmAddAreaTerrainLayer(mainislandID, "coastal_japan\ground_grass3_co_japan", 8, 10);
+ rmAddAreaTerrainLayer(mainislandID, "coastal_japan\ground_grass2_co_japan", 10, 12);
+ rmAddAreaTerrainLayer(mainislandID, "coastal_japan\ground_grass1_co_japan", 12, 14);
+ rmSetAreaWarnFailure(mainislandID, false);
+ rmAddAreaToClass(mainislandID, classIsland);
+ rmSetAreaCoherence(mainislandID, 0.60); //.46
+ rmSetAreaSmoothDistance(mainislandID, 18);
+ rmSetAreaElevationType(mainislandID, cElevTurbulence);
+ rmSetAreaElevationVariation(mainislandID, 5.0);
+ rmSetAreaBaseHeight(mainislandID, 4.0);
+ rmSetAreaElevationMinFrequency(mainislandID, 0.04);
+ rmSetAreaElevationOctaves(mainislandID, 3);
+ rmSetAreaElevationPersistence(mainislandID, 0.4);
+// rmAddConnectionArea(shallowsID, mainislandID);
+ rmSetAreaObeyWorldCircleConstraint(mainislandID, false);
+ rmAddAreaConstraint(mainislandID, avoidBay1);
+ rmAddAreaConstraint(mainislandID, avoidBay2);
+ rmBuildArea(mainislandID);
+
+ int avoidMainIsland = rmCreateAreaDistanceConstraint("avoid main island", mainislandID, 25.0);
+ int stayInMainIsland = rmCreateAreaMaxDistanceConstraint("stay in main island", mainislandID, 0.0);
+
+
+ //Grass patch
+ for (i=0; < 26)
+ {
+ int patchID = rmCreateArea("grass patch"+i);
+ rmSetAreaWarnFailure(patchID, false);
+// rmSetAreaObeyWorldCircleConstraint(patchID, false);
+ rmSetAreaSize(patchID, rmAreaTilesToFraction(70), rmAreaTilesToFraction(80));
+ rmSetAreaTerrainType(patchID, "coastal_japan\ground_forest_co_japan");
+ rmAddAreaToClass(patchID, rmClassID("patch"));
+ rmSetAreaMinBlobs(patchID, 1);
+ rmSetAreaMaxBlobs(patchID, 5);
+ rmSetAreaMinBlobDistance(patchID, 13.0);
+ rmSetAreaMaxBlobDistance(patchID, 30.0);
+ rmSetAreaCoherence(patchID, 0.0);
+ rmAddAreaConstraint(patchID, avoidPatch);
+// rmAddAreaConstraint(patchID, stayInMainIsland);
+ rmAddAreaConstraint(patchID, avoidImpassableLandMed);
+ rmBuildArea(patchID);
+ }
+
+ // Players area
+ for (i=1; < cNumberPlayers)
+ {
+ int playerareaID = rmCreateArea("playerarea"+i);
+ rmSetPlayerArea(i, playerareaID);
+ rmSetAreaSize(playerareaID, 0.03, 0.03);
+ rmSetAreaCoherence(playerareaID, 1.0);
+ rmSetAreaWarnFailure(playerareaID, false);
+// rmSetAreaTerrainType(playerareaID, "new_england\ground2_cliff_ne"); // for testing
+ rmSetAreaLocPlayer(playerareaID, i);
+ rmSetAreaObeyWorldCircleConstraint(playerareaID, false);
+ rmBuildArea(playerareaID);
+ rmCreateAreaDistanceConstraint("avoid player area "+i, playerareaID, 3.0);
+ rmCreateAreaMaxDistanceConstraint("stay in player area "+i, playerareaID, 0.0);
+ }
+
+ int avoidPlayerArea1 = rmConstraintID("avoid player area 1");
+ int avoidPlayerArea2 = rmConstraintID("avoid player area 2");
+ int stayInPlayerArea1 = rmConstraintID("stay in player area 1");
+ int stayInPlayerArea2 = rmConstraintID("stay in player area 2");
+
+
+
+ //Hill A
+ for (i=0; < 3)
+ {
+ int hillAID = rmCreateArea("hill A"+i);
+ if (i == 0)
+ {
+ rmSetAreaSize(hillAID, 0.017, 0.017);
+ rmSetAreaCoherence(hillAID, 0.70);
+ // rmSetAreaCliffHeight(hillAID, 2.0, 0.0, 0.8);
+ // rmSetAreaCliffEdge(hillAID, 1, 0.5, 0.0, 0.0, 1);
+ // rmSetAreaCliffType(hillAID, "coastal japan");
+ // rmSetAreaTerrainType(hillAID, "borneo\ground_grass1_borneo");
+ // rmPaintAreaTerrain(hillAID);
+ // rmSetAreaCliffPainting(hillAID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ // rmAddAreaConstraint(hillAID, avoidWater);
+ int stayInHillA1stlvl = rmCreateAreaMaxDistanceConstraint("stay in hill A first level", hillAID, 0.0);
+ }
+ else if (i==1)
+ {
+ rmSetAreaSize(hillAID, 0.011, 0.011);
+ rmSetAreaCoherence(hillAID, 0.4);
+ rmSetAreaCliffHeight(hillAID, 4.0, 0.0, 0.4);
+ rmSetAreaCliffEdge(hillAID, 1, 0.55, 0.0, 0.0, 1);
+ rmSetAreaCliffType(hillAID, "coastal japan");
+ // rmSetAreaTerrainType(hillAID, "borneo\ground_grass1_borneo");
+ rmSetAreaCliffPainting(hillAID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ int stayInHillA2ndlvl = rmCreateAreaMaxDistanceConstraint("stay in hill A second level", hillAID, 0.0);
+ rmAddAreaConstraint(hillAID, avoidImpassableLandShort);
+ rmAddAreaConstraint(hillAID, stayInHillA1stlvl);
+
+ }
+ /*
+ else
+ {
+ rmSetAreaSize(hillAID, 0.014, 0.014);
+ rmSetAreaCoherence(hillAID, 0.60);
+ rmSetAreaCliffHeight(hillAID, 2.2, 0.0, 0.3);
+ rmSetAreaCliffEdge(hillAID, 1, 0.5, 0.0, 0.0, 1);
+ rmSetAreaCliffType(hillAID, "coastal japan");
+ rmSetAreaTerrainType(hillAID, "coastal_japan\ground_forest_co_japan");
+ // rmSetAreaCliffPainting(hillAID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmAddAreaConstraint(hillAID, avoidImpassableLandShort);
+ rmAddAreaConstraint(hillAID, stayInHillA2ndlvl);
+
+ }
+ */
+ rmSetAreaWarnFailure(hillAID, false);
+ rmSetAreaObeyWorldCircleConstraint(hillAID, false);
+ rmSetAreaSmoothDistance(hillAID, 9);
+ rmAddAreaToClass(hillAID, rmClassID("Cliffs"));
+ if (playerplacement == 1)
+ rmSetAreaLocation(hillAID, 0.44, 0.62);
+ else
+ rmSetAreaLocation(hillAID, 0.36, 0.54);
+ if (cNumberTeams <= 2)
+ rmBuildArea(hillAID);
+ /*
+ for (j=0; < 600)
+ {
+ int RiceAID = rmCreateObjectDef("riceA"+i+j);
+ rmAddObjectDefItem(RiceAID, "UnderbrushCoastalJapan", rmRandInt(1,1), 1.0);
+ rmSetObjectDefMinDistance(RiceAID, 0);
+ rmSetObjectDefMaxDistance(RiceAID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(RiceAID, avoidImpassableLandMin);
+ rmAddObjectDefConstraint(RiceAID, stayInHillA1stlvl);
+ rmPlaceObjectDefAtLoc(RiceAID, 0, 0.50, 0.50);
+ }
+ */
+ rmCreateAreaDistanceConstraint("avoid hill A "+i, hillAID, 2.0);
+ rmCreateAreaMaxDistanceConstraint("stay in hill A "+i, hillAID, 0.0);
+ rmCreateAreaMaxDistanceConstraint("stay near hill A "+i, hillAID, 11.0);
+ }
+
+ int avoidHillA = rmConstraintID("avoid hill A 1");
+ int stayInHillA = rmConstraintID("stay in hill A 1");
+ int stayNearHillA = rmConstraintID("stay near hill A 1");
+
+
+ //Hill B
+ for (i=0; < 3)
+ {
+ int hillBID = rmCreateArea("hill B"+i);
+ if (i == 0)
+ {
+ rmSetAreaSize(hillBID, 0.017, 0.017);
+ rmSetAreaCoherence(hillBID, 0.70);
+ // rmSetAreaCliffHeight(hillBID, 2.8, 0.0, 0.8);
+ // rmSetAreaCliffEdge(hillBID, 1, 1.0, 0.0, 0.0, 1);
+ // rmSetAreaCliffType(hillBID, "coastal japan");
+ // rmSetAreaTerrainType(hillBID, "borneo\ground_grass1_borneo");
+ // rmPaintAreaTerrain(hillBID);
+ // rmSetAreaCliffPainting(hillBID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ // rmAddAreaConstraint(hillBID, avoidWater);
+ int stayInHillB1stlvl = rmCreateAreaMaxDistanceConstraint("stay in hill B first level", hillBID, 0.0);
+
+ }
+ else if(i == 1)
+ {
+ rmSetAreaSize(hillBID, 0.011, 0.011);
+ rmSetAreaCoherence(hillBID, 0.55);
+ rmSetAreaCliffHeight(hillBID, 4.0, 0.0, 0.4);
+ rmSetAreaCliffEdge(hillBID, 1, 0.55, 0.0, 0.0, 1);
+ rmSetAreaCliffType(hillBID, "coastal japan");
+ // rmSetAreaTerrainType(hillBID, "borneo\ground_grass1_borneo");
+ rmSetAreaCliffPainting(hillBID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmAddAreaConstraint(hillBID, avoidImpassableLandShort);
+ int stayInHillB2ndlvl = rmCreateAreaMaxDistanceConstraint("stay in hill B second level", hillBID, 0.0);
+ rmAddAreaConstraint(hillBID, stayInHillB1stlvl);
+ }
+ /*
+ else
+ {
+ rmSetAreaSize(hillBID, 0.018, 0.018);
+ rmSetAreaCoherence(hillBID, 0.60);
+ rmSetAreaCliffHeight(hillBID, 2.5, 0.0, 0.8);
+ rmSetAreaCliffEdge(hillBID, 1, 1.0, 0.0, 0.0, 1);
+ rmSetAreaCliffType(hillBID, "coastal japan");
+ rmSetAreaTerrainType(hillBID, "coastal_japan\ground_forest_co_japan");
+ rmSetAreaCliffPainting(hillBID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmAddAreaConstraint(hillBID, avoidImpassableLandShort);
+ rmAddAreaConstraint(hillBID, stayInHillB2ndlvl);
+ }
+ */
+ rmSetAreaWarnFailure(hillBID, false);
+ rmSetAreaObeyWorldCircleConstraint(hillBID, false);
+
+ rmSetAreaSmoothDistance(hillBID, 9);
+ rmAddAreaToClass(hillBID, rmClassID("Cliffs"));
+ if (playerplacement == 1)
+ rmSetAreaLocation(hillBID, 0.56, 0.38);
+ else
+ rmSetAreaLocation(hillBID, 0.64, 0.46);
+ if (cNumberTeams <= 2)
+ rmBuildArea(hillBID);
+ /*
+ for (j=0; < 350)
+ {
+ int RiceBID = rmCreateObjectDef("riceB"+i+j);
+ rmAddObjectDefItem(RiceBID, "UnderbrushCoastalJapan", rmRandInt(1,1), 1.0);
+ rmSetObjectDefMinDistance(RiceBID, 0);
+ rmSetObjectDefMaxDistance(RiceBID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(RiceBID, avoidImpassableLandMin);
+ rmAddObjectDefConstraint(RiceBID, stayInHillB1stlvl);
+ rmPlaceObjectDefAtLoc(RiceBID, 0, 0.50, 0.50);
+ }
+ */
+ rmCreateAreaDistanceConstraint("avoid hill B "+i, hillBID, 1.0);
+ rmCreateAreaMaxDistanceConstraint("stay in hill B "+i, hillBID, 0.0);
+ rmCreateAreaMaxDistanceConstraint("stay near hill B "+i, hillBID, 11.0);
+ }
+
+ int avoidHillB = rmConstraintID("avoid hill B 1");
+ int stayInHillB = rmConstraintID("stay in hill B 1");
+ int stayNearHillB = rmConstraintID("stay near hill B 1");
+
+
+ //Big islands
+ for (i=1; <3)
+ {
+ int bigislandID = rmCreateArea("big island"+i);
+ rmSetAreaSize(bigislandID, 0.05, 0.06);
+ if (i == 1)
+ {
+ if (playerplacement == 1)
+ rmSetAreaLocation(bigislandID, rmRandFloat(0.92,0.95), rmRandFloat(0.82,0.85));
+ else
+ rmSetAreaLocation(bigislandID, rmRandFloat(0.82,0.85), rmRandFloat(0.92,0.95));
+ }
+ else
+ {
+ if (playerplacement == 1)
+ rmSetAreaLocation(bigislandID,rmRandFloat(0.05,0.08), rmRandFloat(0.15,0.18));
+ else
+ rmSetAreaLocation(bigislandID,rmRandFloat(0.15,0.18), rmRandFloat(0.05,0.08));
+ }
+ rmAddAreaInfluenceSegment(bigislandID, 0.42, 0.58, 0.58, 0.42);
+ rmSetAreaMix(bigislandID, "coastal_japan_b");
+ rmSetAreaTerrainType(bigislandID, "coastal_japan\ground_forest_co_japan");
+ rmPaintAreaTerrain(bigislandID);
+ rmAddAreaTerrainLayer(bigislandID, "coastal_japan\ground_dirt1_co_japan", 0, 2);
+ rmAddAreaTerrainLayer(bigislandID, "coastal_japan\ground_dirt3_co_japan", 2, 4);
+ rmAddAreaTerrainLayer(bigislandID, "coastal_japan\ground_dirt2_co_japan", 4, 6);
+ rmAddAreaTerrainLayer(bigislandID, "coastal_japan\ground_grass3_co_japan", 6, 8);
+ rmAddAreaTerrainLayer(bigislandID, "coastal_japan\ground_grass3_co_japan", 8, 10);
+ rmAddAreaTerrainLayer(bigislandID, "coastal_japan\ground_grass2_co_japan", 10, 12);
+ rmAddAreaTerrainLayer(bigislandID, "coastal_japan\ground_grass1_co_japan", 12, 14);
+ rmSetAreaWarnFailure(bigislandID, false);
+ rmAddAreaToClass(bigislandID, classIsland);
+ rmSetAreaMinBlobs(bigislandID, 2);
+ rmSetAreaMaxBlobs(bigislandID, 2);
+ rmSetAreaMinBlobDistance(bigislandID, 18.0);
+ rmSetAreaMaxBlobDistance(bigislandID, 23.0);
+ rmSetAreaCoherence(bigislandID, 0.55); //.46
+ rmSetAreaSmoothDistance(bigislandID, 12);
+ rmSetAreaElevationType(bigislandID, cElevTurbulence);
+ rmSetAreaElevationVariation(bigislandID, 5.0);
+ rmSetAreaBaseHeight(bigislandID, 4.0);
+ rmSetAreaElevationMinFrequency(bigislandID, 0.04);
+ rmSetAreaElevationOctaves(bigislandID, 3);
+ rmSetAreaElevationPersistence(bigislandID, 0.4);
+ rmAddAreaConstraint(bigislandID, avoidMainIsland);
+ rmBuildArea(bigislandID);
+ rmCreateAreaDistanceConstraint("avoid big island "+i, bigislandID, 5.0);
+ rmCreateAreaMaxDistanceConstraint("stay in big island "+i, bigislandID, 0.0);
+ }
+
+ int avoidBigIsland1 = rmConstraintID("avoid big island 1");
+ int avoidBigIsland2 = rmConstraintID("avoid big island 2");
+ int stayInBigIsland1 = rmConstraintID("stay in big island 1");
+ int stayInBigIsland2 = rmConstraintID("stay in big island 2");
+
+
+ //Small islands
+ for (i=1; <3)
+ {
+ int smallislandID = rmCreateArea("snall island"+i);
+ rmSetAreaSize(smallislandID, 0.008, 0.010);
+ if (i == 1)
+ {
+ if (playerplacement == 1)
+ rmSetAreaLocation(smallislandID, 0.52, 0.87);
+ else
+ rmSetAreaLocation(smallislandID, 0.87, 0.52);
+ }
+ else
+ {
+ if (playerplacement == 1)
+ rmSetAreaLocation(smallislandID, 0.52, 0.13);
+ else
+ rmSetAreaLocation(smallislandID, 0.13, 0.52);
+ }
+ rmAddAreaInfluenceSegment(smallislandID, 0.42, 0.58, 0.58, 0.42);
+ rmSetAreaMix(smallislandID, "coastal_japan_b");
+ rmSetAreaTerrainType(smallislandID, "borneo\ground_forest_borneo");
+ rmPaintAreaTerrain(smallislandID);
+ rmAddAreaTerrainLayer(smallislandID, "coastal_japan\ground_dirt1_co_japan", 0, 2);
+ rmAddAreaTerrainLayer(smallislandID, "coastal_japan\ground_dirt3_co_japan", 2, 4);
+ rmAddAreaTerrainLayer(smallislandID, "coastal_japan\ground_dirt2_co_japan", 4, 6);
+ rmAddAreaTerrainLayer(smallislandID, "coastal_japan\ground_grass3_co_japan", 6, 8);
+ rmAddAreaTerrainLayer(smallislandID, "coastal_japan\ground_grass3_co_japan", 8, 10);
+ rmAddAreaTerrainLayer(smallislandID, "coastal_japan\ground_grass2_co_japan", 10, 12);
+ rmAddAreaTerrainLayer(smallislandID, "coastal_japan\ground_grass1_co_japan", 12, 14);
+ rmSetAreaWarnFailure(smallislandID, false);
+ rmAddAreaToClass(smallislandID, classIsland);
+ rmSetAreaMinBlobs(smallislandID, 2);
+ rmSetAreaMaxBlobs(smallislandID, 2);
+ rmSetAreaMinBlobDistance(smallislandID, 8.0);
+ rmSetAreaMaxBlobDistance(smallislandID, 13.0);
+ rmSetAreaCoherence(smallislandID, 0.45); //.46
+ rmSetAreaSmoothDistance(smallislandID, 5);
+ rmSetAreaElevationType(smallislandID, cElevTurbulence);
+ rmSetAreaElevationVariation(smallislandID, 5.0);
+ rmSetAreaBaseHeight(smallislandID, 4.0);
+ rmSetAreaElevationMinFrequency(smallislandID, 0.04);
+ rmSetAreaElevationOctaves(smallislandID, 3);
+ rmSetAreaElevationPersistence(smallislandID, 0.4);
+ rmAddAreaConstraint(smallislandID, avoidMainIsland);
+ rmBuildArea(smallislandID);
+ rmCreateAreaDistanceConstraint("avoid small island "+i, smallislandID, 5.0);
+ rmCreateAreaMaxDistanceConstraint("stay in small island "+i, smallislandID, 0.0);
+ }
+
+ int avoidSmallIsland1 = rmConstraintID("avoid small island 1");
+ int avoidSmallIsland2 = rmConstraintID("avoid small island 2");
+ int stayInSmallIsland1 = rmConstraintID("stay in small island 1");
+ int stayInSmallIsland2 = rmConstraintID("stay in small island 2");
+
+ // *********************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.40);
+
+ // ******************************************** NATIVES *************************************************
+
+ int natAreaA = rmCreateArea("nats area A");
+ rmSetAreaWarnFailure(natAreaA, false);
+ rmSetAreaSize(natAreaA, 0.03, 0.03);
+ rmSetAreaCoherence(natAreaA, 0.7);
+ rmSetAreaSmoothDistance(natAreaA, 4);
+// rmSetAreaTerrainType(natAreaA, "new_england\ground2_cliff_ne");
+
+ int natAreaB = rmCreateArea("nats area B");
+ rmSetAreaWarnFailure(natAreaB, false);
+ rmSetAreaSize(natAreaB, 0.03, 0.03);
+ rmSetAreaCoherence(natAreaB, 0.7);
+ rmSetAreaSmoothDistance(natAreaB, 4);
+// rmSetAreaTerrainType(natAreaB, "new_england\ground2_cliff_ne");
+
+
+ int nativeID0 = -1;
+ int nativeID1 = -1;
+ int nativeID2 = -1;
+ int nativeID3 = -1;
+
+
+ nativeID0 = rmCreateGrouping("Jesuit mission A", "native jesuit mission borneo 0"+4);
+ nativeID1 = rmCreateGrouping("Jesuit mission B", "native jesuit mission borneo 0"+3);
+
+ nativeID2 = rmCreateGrouping("Sufi mosque A", "native zen temple cj 0"+3);
+ nativeID3 = rmCreateGrouping("Sufi mosque B", "native zen temple cj 0"+3);
+
+// rmSetGroupingMinDistance(nativeID0, 0.00);
+// rmSetGroupingMaxDistance(nativeID0, 0.00);
+// rmSetGroupingMinDistance(nativeID1, 0.00);
+// rmSetGroupingMaxDistance(nativeID1, 0.00);
+ rmAddGroupingToClass(nativeID0, rmClassID("natives"));
+ rmAddGroupingToClass(nativeID1, rmClassID("natives"));
+ rmAddGroupingToClass(nativeID2, rmClassID("natives"));
+ rmAddGroupingToClass(nativeID3, rmClassID("natives"));
+ if (playerplacement == 1)
+ {
+ if (cNumberNonGaiaPlayers < 4)
+ {
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.34, 0.70);
+ rmPlaceGroupingAtLoc(nativeID1, 0, 0.66, 0.30);
+ rmSetAreaLocation(natAreaA, 0.34, 0.70);
+ rmSetAreaLocation(natAreaB, 0.66, 0.30);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.36, 0.72);
+ rmPlaceGroupingAtLoc(nativeID1, 0, 0.64, 0.28);
+ rmSetAreaLocation(natAreaA, 0.36, 0.72);
+ rmSetAreaLocation(natAreaB, 0.64, 0.28);
+ }
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.30, 0.66);
+ rmPlaceGroupingAtLoc(nativeID1, 0, 0.70, 0.34);
+ rmSetAreaLocation(natAreaA, 0.30, 0.66);
+ rmSetAreaLocation(natAreaB, 0.70, 0.34);
+ }
+
+ rmPlaceGroupingAtLoc(nativeID2, 0, 0.62, 0.62);
+ rmPlaceGroupingAtLoc(nativeID3, 0, 0.40, 0.40);
+
+ rmBuildArea(natAreaA);
+ rmBuildArea(natAreaB);
+
+ int stayInNatAreaA = rmCreateAreaMaxDistanceConstraint("stay in nat area A", natAreaA, 0.0);
+ int stayInNatAreaB = rmCreateAreaMaxDistanceConstraint("stay in nat area B", natAreaB, 0.0);
+ int avoidNatAreaA = rmCreateAreaDistanceConstraint("avoid nat area A", natAreaA, 2.0);
+ int avoidNatAreaB = rmCreateAreaDistanceConstraint("avoid nat area B", natAreaB, 2.0);
+
+ // ******************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.50);
+
+ // ************************************ PLAYER STARTING RESOURCES ***************************************
+
+ // ******** Define ********
+
+ // Town center & units
+ int TCID = rmCreateObjectDef("player TC");
+ int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ if (rmGetNomadStart())
+ {
+ rmAddObjectDefItem(TCID, "CoveredWagon", 1, 0.0);
+ }
+ else
+ {
+ rmAddObjectDefItem(TCID, "TownCenter", 1, 0.0);
+ rmAddObjectDefToClass(TCID, classStartingResource);
+ }
+ rmSetObjectDefMinDistance(TCID, 0.0);
+ rmSetObjectDefMaxDistance(TCID, 0.0);
+
+ //Extra coin crates
+ int playerCrateID = rmCreateObjectDef("extra crates");
+ rmAddObjectDefItem(playerCrateID, "crateOfCoin", rmRandInt(1,2), 3.0);
+ rmSetObjectDefMinDistance(playerCrateID, 6);
+ rmSetObjectDefMaxDistance(playerCrateID, 10);
+
+ // Starting mines
+ int playergoldID = rmCreateObjectDef("player mine");
+ rmAddObjectDefItem(playergoldID, "minecopper", 1, 0);
+ rmSetObjectDefMinDistance(playergoldID, 16);
+ rmSetObjectDefMaxDistance(playergoldID, 18);
+ rmAddObjectDefToClass(playergoldID, classStartingResource);
+ rmAddObjectDefToClass(playergoldID, classGold);
+ rmAddObjectDefConstraint(playergoldID, avoidTradeRouteShort);
+ rmAddObjectDefConstraint(playergoldID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(playergoldID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playergoldID, avoidNatives);
+ rmAddObjectDefConstraint(playergoldID, avoidStartingResources);
+// rmAddObjectDefConstraint(playergoldID, avoidEdge);
+
+ // Starting trees
+ int playerTreeID = rmCreateObjectDef("player trees");
+ rmAddObjectDefItem(playerTreeID, "ypTreeIndo", rmRandInt(10,10), 7.0);
+ rmSetObjectDefMinDistance(playerTreeID, 12);
+ rmSetObjectDefMaxDistance(playerTreeID, 16);
+ rmAddObjectDefToClass(playerTreeID, classStartingResource);
+ rmAddObjectDefToClass(playerTreeID, classForest);
+ rmAddObjectDefConstraint(playerTreeID, avoidForestShort);
+// rmAddObjectDefConstraint(playerTreeID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerTreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerTreeID, avoidStartingResources);
+
+ // Starting berries
+ int playerberriesID = rmCreateObjectDef("player berries");
+ rmAddObjectDefItem(playerberriesID, "berrybush", 2, 3.0);
+ rmSetObjectDefMinDistance(playerberriesID, 12.0);
+ rmSetObjectDefMaxDistance(playerberriesID, 14.0);
+ rmAddObjectDefToClass(playerberriesID, classStartingResource);
+ rmAddObjectDefConstraint(playerberriesID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerberriesID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerberriesID, avoidNatives);
+ rmAddObjectDefConstraint(playerberriesID, avoidStartingResources);
+
+ // Starting herd
+ int playeherdID = rmCreateObjectDef("starting herd");
+ rmAddObjectDefItem(playeherdID, "ypIbex", rmRandInt(2,2), 4.0);
+ rmSetObjectDefMinDistance(playeherdID, 14.0);
+ rmSetObjectDefMaxDistance(playeherdID, 16.0);
+ rmSetObjectDefCreateHerd(playeherdID, true);
+ rmAddObjectDefToClass(playeherdID, classStartingResource);
+// rmAddObjectDefConstraint(playeherdID, avoidTradeRoute);
+// rmAddObjectDefConstraint(playeherdID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playeherdID, avoidNatives);
+ rmAddObjectDefConstraint(playeherdID, avoidStartingResources);
+
+ // 2nd herd
+ int player2ndherdID = rmCreateObjectDef("player 2nd herd");
+ rmAddObjectDefItem(player2ndherdID, "ypserow", rmRandInt(8,8), 6.0);
+ rmSetObjectDefMinDistance(player2ndherdID, 34);
+ rmSetObjectDefMaxDistance(player2ndherdID, 36);
+ rmAddObjectDefToClass(player2ndherdID, classStartingResource);
+ rmSetObjectDefCreateHerd(player2ndherdID, true);
+ rmAddObjectDefConstraint(player2ndherdID, avoidStartingResources);
+ rmAddObjectDefConstraint(player2ndherdID, avoidEleShort);
+// rmAddObjectDefConstraint(player2ndherdID, avoidTradeRouteShort);
+// rmAddObjectDefConstraint(player2ndherdID, avoidTradeRouteSocket);
+// rmAddObjectDefConstraint(player2ndherdID, avoidImpassableLand);
+ rmAddObjectDefConstraint(player2ndherdID, avoidEdge);
+ rmAddObjectDefConstraint(player2ndherdID, avoidNativesShort);
+
+ //Extra building
+ int playerSaloonID=rmCreateObjectDef("player saloon");
+ rmAddObjectDefItem(playerSaloonID, "ypTreeIndo", 1, 0.0);
+ rmSetObjectDefMinDistance(playerSaloonID, 12.0);
+ rmSetObjectDefMaxDistance(playerSaloonID, 16.0);
+ rmAddObjectDefConstraint(playerSaloonID, avoidStartingResources);
+ rmAddObjectDefConstraint(playerSaloonID, avoidImpassableLand);
+
+ int playerFirepitID=rmCreateObjectDef("player firepit");
+ rmAddObjectDefItem(playerFirepitID, "ypTreeIndo", 1, 0.0);
+ rmSetObjectDefMinDistance(playerFirepitID, 12.0);
+ rmSetObjectDefMaxDistance(playerFirepitID, 16.0);
+ rmAddObjectDefConstraint(playerFirepitID, avoidStartingResources);
+ rmAddObjectDefConstraint(playerFirepitID, avoidImpassableLand);
+
+ int playerMonID=rmCreateObjectDef("player monastery");
+ rmAddObjectDefItem(playerMonID, "ypTreeIndo", 1, 0.0);
+ rmSetObjectDefMinDistance(playerMonID, 12.0);
+ rmSetObjectDefMaxDistance(playerMonID, 16.0);
+ rmAddObjectDefConstraint(playerMonID, avoidStartingResources);
+ rmAddObjectDefConstraint(playerMonID, avoidImpassableLand);
+
+
+ // Starting treasures
+ int playerNuggetID = rmCreateObjectDef("player nugget");
+ rmAddObjectDefItem(playerNuggetID, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(1, 1);
+ rmSetObjectDefMinDistance(playerNuggetID, 18.0);
+ rmSetObjectDefMaxDistance(playerNuggetID, 28.0);
+ rmAddObjectDefToClass(playerNuggetID, classStartingResource);
+// rmAddObjectDefConstraint(playerNuggetID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerNuggetID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerNuggetID, avoidNatives);
+ rmAddObjectDefConstraint(playerNuggetID, avoidStartingResources);
+ rmAddObjectDefConstraint(playerNuggetID, avoidNugget); //Short
+ rmAddObjectDefConstraint(playerNuggetID, avoidEdge);
+ int nugget0count = rmRandInt (1,2); // 1,2
+
+ //Colony water shipment flag
+ int shipmentflagID = rmCreateObjectDef("colony ship");
+ rmAddObjectDefItem(shipmentflagID, "HomeCityWaterSpawnFlag", 1, 1.0);
+ rmSetObjectDefMinDistance(shipmentflagID, 0.0);
+ rmSetObjectDefMaxDistance(shipmentflagID, rmXFractionToMeters(0.12));
+ rmAddObjectDefConstraint(shipmentflagID, avoidFlag);
+ rmAddObjectDefConstraint(shipmentflagID, avoidLand);
+ rmAddObjectDefConstraint(shipmentflagID, avoidEdgeMore);
+// rmSetHomeCityWaterSpawnPoint(i, flagLocation);
+
+ // Catamaran
+ int catamaranID=rmCreateObjectDef("Catamaran");
+ rmAddObjectDefItem(catamaranID, "ypMarathanCatamaran", 1, 3.0);
+
+
+ // ******** Place ********
+
+ for(i=1; 1)
+ {
+ rmAddObjectDefConstraint(serowherdID, avoidBigIsland1);
+ rmAddObjectDefConstraint(serowherdID, avoidBigIsland2);
+ }
+ else if (i == 0)
+ rmAddObjectDefConstraint(serowherdID, stayInBigIsland1);
+ else
+ rmAddObjectDefConstraint(serowherdID, stayInBigIsland2);
+ rmAddObjectDefConstraint(serowherdID, avoidSmallIsland1);
+ rmAddObjectDefConstraint(serowherdID, avoidSmallIsland2);
+ rmAddObjectDefConstraint(serowherdID, avoidEdge);
+ rmPlaceObjectDefAtLoc(serowherdID, 0, 0.50, 0.50);
+ }
+
+ // ************************************
+
+ // ************ Berries *************
+
+ int berriescount = 4+2*cNumberNonGaiaPlayers;
+
+ //Berries
+ for (i=0; < berriescount)
+ {
+ int berriesID = rmCreateObjectDef("berries"+i);
+ rmAddObjectDefItem(berriesID, "berrybush", rmRandInt(3,3), 4.0);
+ rmSetObjectDefMinDistance(berriesID, 0.0);
+ rmSetObjectDefMaxDistance(berriesID, rmXFractionToMeters(0.5));
+ rmSetObjectDefCreateHerd(berriesID, true);
+ rmAddObjectDefConstraint(berriesID, avoidForestMin);
+ rmAddObjectDefConstraint(berriesID, avoidGoldShort);
+ rmAddObjectDefConstraint(berriesID, avoidSerowShort);
+ rmAddObjectDefConstraint(berriesID, avoidEleShort);
+ rmAddObjectDefConstraint(berriesID, avoidBerriesFar);
+ rmAddObjectDefConstraint(berriesID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(berriesID, avoidNativesShort);
+// rmAddObjectDefConstraint(berriesID, avoidTradeRouteShort);
+// rmAddObjectDefConstraint(berriesID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(berriesID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(berriesID, avoidBigIsland1);
+ rmAddObjectDefConstraint(berriesID, avoidBigIsland2);
+ if (i > 1)
+ {
+ rmAddObjectDefConstraint(berriesID, avoidSmallIsland1);
+ rmAddObjectDefConstraint(berriesID, avoidSmallIsland2);
+ }
+ else if (i == 0)
+ rmAddObjectDefConstraint(berriesID, stayInSmallIsland1);
+ else
+ rmAddObjectDefConstraint(berriesID, stayInSmallIsland2);
+ rmAddObjectDefConstraint(berriesID, avoidEdge);
+ rmPlaceObjectDefAtLoc(berriesID, 0, 0.50, 0.50);
+ }
+
+ // ************************************
+
+ // Text
+ rmSetStatusText("",0.90);
+
+ // ************** Treasures ***************
+
+ int treasure1count = 2+1*cNumberNonGaiaPlayers;
+ int treasure2count = 3+1*cNumberNonGaiaPlayers;
+ int treasure4count = 1+0.34*cNumberNonGaiaPlayers;
+
+ //Treasures lvl 2
+ for (i=0; < treasure2count)
+ {
+ int Nugget2ID = rmCreateObjectDef("Nugget lvl 2 "+i);
+ rmAddObjectDefItem(Nugget2ID, "Nugget", rmRandInt(1,1), 2.0);
+ rmSetObjectDefMinDistance(Nugget2ID, 0.0);
+ rmSetObjectDefMaxDistance(Nugget2ID, rmXFractionToMeters(0.5));
+ rmSetObjectDefCreateHerd(Nugget2ID, true);
+ rmAddObjectDefConstraint(Nugget2ID, avoidForestMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidGoldMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidSerowMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidBerriesMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidEleMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidBerriesMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(Nugget2ID, avoidNativesShort);
+ rmAddObjectDefConstraint(Nugget2ID, avoidNuggetFar);
+// rmAddObjectDefConstraint(Nugget2ID, avoidTradeRouteShort);
+// rmAddObjectDefConstraint(Nugget2ID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(Nugget2ID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(Nugget2ID, avoidEdge);
+ if (i == 0)
+ rmAddObjectDefConstraint(Nugget2ID, stayInHillA);
+ else if (i == 1)
+ rmAddObjectDefConstraint(Nugget2ID, stayInHillB);
+ else if (i == 2)
+ rmAddObjectDefConstraint(Nugget2ID, stayInBigIsland1);
+ else if (i == 3)
+ rmAddObjectDefConstraint(Nugget2ID, stayInBigIsland2);
+ else
+ {
+ rmAddObjectDefConstraint(Nugget2ID, avoidBigIsland1);
+ rmAddObjectDefConstraint(Nugget2ID, avoidBigIsland2);
+ rmAddObjectDefConstraint(Nugget2ID, avoidSmallIsland1);
+ rmAddObjectDefConstraint(Nugget2ID, avoidSmallIsland2);
+ }
+ rmSetNuggetDifficulty(2,2);
+ rmPlaceObjectDefAtLoc(Nugget2ID, 0, 0.50, 0.50);
+ }
+
+ //Treasures lvl 4
+ for (i=0; < treasure4count)
+ {
+ int Nugget4ID = rmCreateObjectDef("Nugget lvl 4 "+i);
+ rmAddObjectDefItem(Nugget4ID, "Nugget", rmRandInt(1,1), 2.0);
+ rmSetObjectDefMinDistance(Nugget4ID, 0.0);
+ rmSetObjectDefMaxDistance(Nugget4ID, rmXFractionToMeters(0.5));
+ rmSetObjectDefCreateHerd(Nugget4ID, true);
+ rmAddObjectDefConstraint(Nugget4ID, avoidForestMin);
+ rmAddObjectDefConstraint(Nugget4ID, avoidGoldMin);
+ rmAddObjectDefConstraint(Nugget4ID, avoidSerowMin);
+ rmAddObjectDefConstraint(Nugget4ID, avoidBerriesMin);
+ rmAddObjectDefConstraint(Nugget4ID, avoidEleMin);
+ rmAddObjectDefConstraint(Nugget4ID, avoidBerriesMin);
+ rmAddObjectDefConstraint(Nugget4ID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(Nugget4ID, avoidNativesShort);
+ rmAddObjectDefConstraint(Nugget4ID, avoidNuggetFar);
+// rmAddObjectDefConstraint(Nugget4ID, avoidTradeRouteShort);
+// rmAddObjectDefConstraint(Nugget4ID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(Nugget4ID, avoidImpassableLandFar);
+ rmAddObjectDefConstraint(Nugget4ID, avoidEdge);
+ rmAddObjectDefConstraint(Nugget4ID, stayCenter);
+ rmAddObjectDefConstraint(Nugget4ID, avoidBigIsland1);
+ rmAddObjectDefConstraint(Nugget4ID, avoidBigIsland2);
+ rmAddObjectDefConstraint(Nugget4ID, avoidSmallIsland1);
+ rmAddObjectDefConstraint(Nugget4ID, avoidSmallIsland2);
+ rmSetNuggetDifficulty(4,4);
+ if (cNumberNonGaiaPlayers >= 3)
+ rmPlaceObjectDefAtLoc(Nugget4ID, 0, 0.50, 0.50);
+ }
+
+ //Treasures lvl
+ for (i=0; < treasure1count)
+ {
+ int Nugget1ID = rmCreateObjectDef("Nugget lvl 1 "+i);
+ rmAddObjectDefItem(Nugget1ID, "Nugget", rmRandInt(1,1), 2.0);
+ rmSetObjectDefMinDistance(Nugget1ID, 0.0);
+ rmSetObjectDefMaxDistance(Nugget1ID, rmXFractionToMeters(0.5));
+ rmSetObjectDefCreateHerd(Nugget1ID, true);
+ rmAddObjectDefConstraint(Nugget1ID, avoidForestMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidGoldMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidSerowMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidBerriesMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidEleMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidBerriesMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(Nugget1ID, avoidNativesShort);
+ rmAddObjectDefConstraint(Nugget1ID, avoidNuggetFar);
+// rmAddObjectDefConstraint(Nugget1ID, avoidTradeRouteShort);
+// rmAddObjectDefConstraint(Nugget1ID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(Nugget1ID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(Nugget1ID, avoidEdge);
+ rmAddObjectDefConstraint(Nugget1ID, avoidBigIsland1);
+ rmAddObjectDefConstraint(Nugget1ID, avoidBigIsland2);
+ rmAddObjectDefConstraint(Nugget1ID, avoidSmallIsland1);
+ rmAddObjectDefConstraint(Nugget1ID, avoidSmallIsland2);
+ rmSetNuggetDifficulty(1,1);
+ rmPlaceObjectDefAtLoc(Nugget1ID, 0, 0.50, 0.50);
+ }
+
+ // ****************************************
+
+ // *************** Buffalos ***************
+
+ //Buffalos
+
+ int buffalocount = 10;
+ if (cNumberNonGaiaPlayers >=4)
+ buffalocount = 14;
+ if (cNumberNonGaiaPlayers >=6)
+ buffalocount = 20;
+
+ for (i=0; < buffalocount)
+ {
+ int BuffaloID = rmCreateObjectDef("Buffalo"+i);
+ if (i < buffalocount/5)
+ rmAddObjectDefItem(BuffaloID, "ypWaterBuffalo", rmRandInt(2,2), 4.0);
+ else
+ rmAddObjectDefItem(BuffaloID, "ypWaterBuffalo", rmRandInt(1,1), 2.0);
+ rmSetObjectDefMinDistance(BuffaloID, 0.0);
+ rmSetObjectDefMaxDistance(BuffaloID, rmXFractionToMeters(0.5));
+ rmSetObjectDefCreateHerd(BuffaloID, true);
+ rmAddObjectDefConstraint(BuffaloID, avoidForestMin);
+ rmAddObjectDefConstraint(BuffaloID, avoidGoldMin);
+ rmAddObjectDefConstraint(BuffaloID, avoidSerowMin);
+ rmAddObjectDefConstraint(BuffaloID, avoidBerriesMin);
+ rmAddObjectDefConstraint(BuffaloID, avoidEleMin);
+ rmAddObjectDefConstraint(BuffaloID, avoidBerriesMin);
+ rmAddObjectDefConstraint(BuffaloID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(BuffaloID, avoidNativesShort);
+ rmAddObjectDefConstraint(BuffaloID, avoidNuggetMin);
+ rmAddObjectDefConstraint(BuffaloID, avoidBuffalo);
+// rmAddObjectDefConstraint(BuffaloID, avoidTradeRouteShort);
+// rmAddObjectDefConstraint(BuffaloID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(BuffaloID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(BuffaloID, avoidEdge);
+ if (cNumberTeams <= 2)
+ {
+ if (i < buffalocount/10)
+ rmAddObjectDefConstraint(BuffaloID, stayInBigIsland1);
+ else if (i < buffalocount/5)
+ rmAddObjectDefConstraint(BuffaloID, stayInBigIsland2);
+ else
+ {
+ rmAddObjectDefConstraint(BuffaloID, avoidBigIsland1);
+ rmAddObjectDefConstraint(BuffaloID, avoidBigIsland2);
+ rmAddObjectDefConstraint(BuffaloID, avoidSmallIsland1);
+ rmAddObjectDefConstraint(BuffaloID, avoidSmallIsland2);
+ }
+ }
+ else
+ {
+ if (i == 0)
+ rmAddObjectDefConstraint(BuffaloID, stayInBigIsland1);
+ else if (i == 1)
+ rmAddObjectDefConstraint(BuffaloID, stayInBigIsland2);
+ else if (i < buffalocount/5)
+ rmAddObjectDefConstraint(BuffaloID, stayCenter);
+ else
+ {
+ rmAddObjectDefConstraint(BuffaloID, avoidBigIsland1);
+ rmAddObjectDefConstraint(BuffaloID, avoidBigIsland2);
+ rmAddObjectDefConstraint(BuffaloID, avoidSmallIsland1);
+ rmAddObjectDefConstraint(BuffaloID, avoidSmallIsland2);
+ }
+ }
+ rmPlaceObjectDefAtLoc(BuffaloID, 0, 0.50, 0.50);
+ }
+
+ // ****************************************
+
+ // ************ Sea resources *************
+
+ // Water nuggets
+ int nuggetwcount = 4+1*cNumberNonGaiaPlayers;
+
+ for (i=0; < nuggetwcount)
+ {
+ int nuggetW= rmCreateObjectDef("nugget water"+i);
+ rmAddObjectDefItem(nuggetW, "ypNuggetBoat", 1, 0.0);
+ rmSetNuggetDifficulty(5, 5);
+ rmSetObjectDefMinDistance(nuggetW, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(nuggetW, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(nuggetW, avoidLand);
+ rmAddObjectDefConstraint(nuggetW, avoidEdge);
+ rmAddObjectDefConstraint(nuggetW, avoidNuggetWater);
+ rmPlaceObjectDefAtLoc(nuggetW, 0, 0.50, 0.50);
+ }
+
+ //Fish
+ int fishcount = 12+4*cNumberNonGaiaPlayers;
+ int whalecount = 6+2*cNumberNonGaiaPlayers;
+
+ for (i=0; < whalecount)
+ {
+ int whaleID=rmCreateObjectDef("whale"+i);
+ rmAddObjectDefItem(whaleID, "HumpbackWhale", 1, 2.0);
+ rmSetObjectDefMinDistance(whaleID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(whaleID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(whaleID, avoidWhale);
+ rmAddObjectDefConstraint(whaleID, avoidLandFar);
+ rmAddObjectDefConstraint(whaleID, avoidFlag);
+ rmAddObjectDefConstraint(whaleID, avoidEdge);
+ rmAddObjectDefConstraint(whaleID, avoidNuggetWaterShort);
+ rmPlaceObjectDefAtLoc(whaleID, 0, 0.50, 0.50);
+ }
+
+ for (i=0; < fishcount)
+ {
+ int fishID = rmCreateObjectDef("fish"+i);
+ rmAddObjectDefItem(fishID, "ypFishMolaMola", rmRandInt(2,2), 10.0);
+ rmSetObjectDefMinDistance(fishID, 0.0);
+ rmSetObjectDefMaxDistance(fishID, rmXFractionToMeters(0.50));
+ rmAddObjectDefConstraint(fishID, avoidFish);
+ rmAddObjectDefConstraint(fishID, avoidLand);
+ rmAddObjectDefConstraint(fishID, avoidFlagShort);
+ rmAddObjectDefConstraint(fishID, avoidEdge);
+ rmAddObjectDefConstraint(fishID, avoidNuggetWaterShort);
+ rmPlaceObjectDefAtLoc(fishID, 0, 0.50, 0.50);
+ }
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH()) {
+
+ int randLoc = rmRandInt(1,2);
+ float xLoc = 0.5;
+ float yLoc = 0.5;
+ float walk = 0.015;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, 0);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ // Text
+ rmSetStatusText("",1.00);
+
+} //END
+
+
\ No newline at end of file
diff --git a/RMM/Kilimanjaro.xml b/RMM/Kilimanjaro.xml
new file mode 100644
index 0000000..d8530ab
--- /dev/null
+++ b/RMM/Kilimanjaro.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\kilimanjaro\kilimanjaro_ss_01
+ ui\random_map\africa\kilimanjaro\kilimanjaro_ss_02
+ ui\random_map\africa\kilimanjaro\kilimanjaro_ss_03
+
\ No newline at end of file
diff --git a/RMM/Kilimanjaro.xs b/RMM/Kilimanjaro.xs
new file mode 100644
index 0000000..92dc998
--- /dev/null
+++ b/RMM/Kilimanjaro.xs
@@ -0,0 +1,1048 @@
+// ESOC TIBET (1v1, TEAM, FFA)
+// designed by Garja
+
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+
+// 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 *****************************************
+
+ // Picks the map size
+ int playerTiles=13000; //11000
+ if (cNumberNonGaiaPlayers >= 4)
+ playerTiles = 12000;
+ if (cNumberNonGaiaPlayers >= 6)
+ playerTiles = 11000;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*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(-6.0); // this is height of river surface compared to surrounding land. River depth is in the river XML.
+
+ rmSetMapElevationParameters(cElevTurbulence, 0.04, 2, 0.5, 4.5); // type, frequency, octaves, persistence, variation
+// rmSetMapElevationHeightBlend(1);
+
+
+ // Picks default terrain and water
+ rmSetBaseTerrainMix("himalayas_a"); //
+ rmTerrainInitialize("himalayas\ground_dirt3_himal", -6.0); //
+ rmSetMapType("himalayas");
+ rmSetMapType("snow");
+ rmSetMapType("land");
+ rmSetLightingSet("great lakes winter");
+
+ // Choose Mercs
+ chooseMercs();
+
+ // Text
+ rmSetStatusText("",0.10);
+
+ // Set up Natives
+ int subCiv0 = -1;
+ int subCiv1 = -1;
+ subCiv0 = rmGetCivID("uger");
+ subCiv1 = rmGetCivID("uger");
+ rmSetSubCiv(0, "uger");
+ rmSetSubCiv(1, "uger");
+
+
+ //Define some classes. These are used later for constraints.
+ int classPlayer = rmDefineClass("player");
+ rmDefineClass("classHill");
+ int classPatch = rmDefineClass("patch");
+ int classPatch2 = rmDefineClass("patch2");
+ int classPatch3 = rmDefineClass("patch3");
+ int classPond = rmDefineClass("pond");
+ int classRocks = rmDefineClass("rocks");
+ int classGrass = rmDefineClass("grass");
+ rmDefineClass("starting settlement");
+ rmDefineClass("startingUnit");
+ int classForest = rmDefineClass("Forest");
+ int importantItem = rmDefineClass("importantItem");
+ int classNative = rmDefineClass("natives");
+ int classCliff = rmDefineClass("Cliffs");
+ int classUpperGold = rmDefineClass("UpperGold");
+ int classLowerGold = rmDefineClass("LowerGold");
+ int classStartingResource = rmDefineClass("startingResource");
+
+ // ******************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.20);
+
+ // ************************************* CONTRAINTS *****************************************
+ // These are used to have objects and areas avoid each other
+
+ // Cardinal Directions & Map placement
+ int avoidEdge = rmCreatePieConstraint("Avoid Edge",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.47), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int avoidEdgeMore = rmCreatePieConstraint("Avoid Edge More",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.38), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int avoidCenter = rmCreatePieConstraint("Avoid Center",0.5,0.5,rmXFractionToMeters(0.28), rmXFractionToMeters(0.5), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int stayCenter = rmCreatePieConstraint("Stay Center", 0.50, 0.50, rmXFractionToMeters(0.0), rmXFractionToMeters(0.25), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int stayCenterMore = rmCreatePieConstraint("Stay Center more",0.45,0.45,rmXFractionToMeters(0.0), rmXFractionToMeters(0.26), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int staySW = rmCreatePieConstraint("Stay SW", 0.50, 0.50,rmXFractionToMeters(0.0), rmXFractionToMeters(0.50), rmDegreesToRadians(260),rmDegreesToRadians(280));
+ int stayNE = rmCreatePieConstraint("Stay NE", 0.50, 0.50,rmXFractionToMeters(0.0), rmXFractionToMeters(0.50), rmDegreesToRadians(80),rmDegreesToRadians(100));
+ int staySouthHalf = rmCreatePieConstraint("Stay south half", 0.50, 0.50,rmXFractionToMeters(0.0), rmXFractionToMeters(0.50), rmDegreesToRadians(188),rmDegreesToRadians(352));
+ int stayNorthHalf = rmCreatePieConstraint("Stay north half", 0.50, 0.50,rmXFractionToMeters(0.0), rmXFractionToMeters(0.50), rmDegreesToRadians(368),rmDegreesToRadians(172));
+ int plateauTrack = rmCreatePieConstraint("plateau limit constraint", 0.50, 0.50,rmXFractionToMeters(0.0), rmXFractionToMeters(0.36), rmDegreesToRadians(0),rmDegreesToRadians(360));
+
+ // Resource avoidance
+ int avoidForest=rmCreateClassDistanceConstraint("avoid forest", rmClassID("Forest"), 30.0); //15.0
+ int avoidForestShort=rmCreateClassDistanceConstraint("avoid forest short", rmClassID("Forest"), 20.0); //15.0
+ int avoidForestMin=rmCreateClassDistanceConstraint("avoid forest min", rmClassID("Forest"), 4.0);
+ int avoidSerowFar = rmCreateTypeDistanceConstraint("avoid Serow far", "ypSerow", 50.0);
+ int avoidSerow = rmCreateTypeDistanceConstraint("avoid Serow", "ypSerow", 30.0);
+ int avoidSerowShort = rmCreateTypeDistanceConstraint("avoid Serow short", "ypSerow", 25.0);
+ int avoidSerowMin = rmCreateTypeDistanceConstraint("avoid Serow min", "ypSerow", 4.0);
+ int avoidIbexFar = rmCreateTypeDistanceConstraint("avoid Ibex far", "ypIbex", 58.0);
+ int avoidIbex = rmCreateTypeDistanceConstraint("avoid Ibex", "ypIbex", 50.0);
+ int avoidIbexShort = rmCreateTypeDistanceConstraint("avoid Ibex short", "ypIbex", 35.0);
+ int avoidIbexMin = rmCreateTypeDistanceConstraint("avoid Ibex min", "ypIbex", 4.0);
+ int avoidMuskdeerFar = rmCreateTypeDistanceConstraint("avoid muskdeer far", "ypmuskdeer", 70.0);
+ int avoidMuskdeer = rmCreateTypeDistanceConstraint("avoid muskdeer ", "ypmuskdeer", 45.0);
+ int avoidMuskdeerMin = rmCreateTypeDistanceConstraint("avoid muskdeer min ", "ypmuskdeer", 4.0);
+ int avoidGoldTypeMin = rmCreateTypeDistanceConstraint("coin avoids coin short", "gold", 8.0);
+ int avoidGoldTypeShort = rmCreateTypeDistanceConstraint("coin avoids coin short", "gold", 15.0);
+ int avoidGoldTypeMed = rmCreateTypeDistanceConstraint("coin avoids coin", "gold", 25.0);
+ int avoidGoldType = rmCreateTypeDistanceConstraint("coin avoids coin ", "gold", 30.0);
+ int avoidGoldTypeFar = rmCreateTypeDistanceConstraint("coin avoids coin far ", "gold", 50.0);
+ int avoidLowerGoldMin=rmCreateClassDistanceConstraint("avoid lower gold min ", rmClassID("LowerGold"), 8.0);
+ int avoidLowerGoldShort = rmCreateClassDistanceConstraint ("avoid lower gold short", rmClassID("LowerGold"), 15.0);
+ int avoidLowerGold = rmCreateClassDistanceConstraint ("avoid lower gold med", rmClassID("LowerGold"), 30.0);
+ int avoidLowerGoldFar = rmCreateClassDistanceConstraint ("avoid lower gold far", rmClassID("LowerGold"), 56.0);
+ int avoidLowerGoldVeryFar = rmCreateClassDistanceConstraint ("avoid lower gold very far", rmClassID("LowerGold"), 75.0);
+ int avoidUpperGoldMin=rmCreateClassDistanceConstraint("avoid upper gold min ", rmClassID("UpperGold"), 8.0);
+ int avoidUpperGoldShort = rmCreateClassDistanceConstraint ("avoid upper gold short", rmClassID("UpperGold"), 15.0);
+ int avoidUpperGold = rmCreateClassDistanceConstraint ("avoid upper gold med", rmClassID("UpperGold"), 30.0);
+ int avoidUpperGoldFar = rmCreateClassDistanceConstraint ("avoid upper gold far", rmClassID("UpperGold"), 58.0);
+ int avoidUpperGoldVeryFar = rmCreateClassDistanceConstraint ("avoid upper gold very far", rmClassID("UpperGold"), 65.0);
+ int avoidNuggetMin = rmCreateTypeDistanceConstraint("nugget avoid nugget min", "AbstractNugget", 10.0);
+ int avoidNuggetShort = rmCreateTypeDistanceConstraint("nugget avoid nugget short", "AbstractNugget", 15.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+ int avoidNuggetFar = rmCreateTypeDistanceConstraint("nugget avoid nugget Far", "AbstractNugget", 56.0);
+ int avoidTownCenterVeryFar = rmCreateTypeDistanceConstraint("avoid Town Center Very Far", "townCenter", 85.0);
+ int avoidTownCenterFar = rmCreateTypeDistanceConstraint("avoid Town Center Far", "townCenter", 60.0);
+ int avoidTownCenter = rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 50.0);
+// int avoidTownCenterMed = rmCreateTypeDistanceConstraint("avoid Town Center med", "townCenter", 40.0);
+ int avoidTownCenterShort = rmCreateTypeDistanceConstraint("avoid Town Center short", "townCenter", 25.0);
+ int avoidTownCenterMin = rmCreateTypeDistanceConstraint("avoid Town Center min", "townCenter", 18.0);
+ int avoidNativesShort = rmCreateClassDistanceConstraint("avoid natives short", rmClassID("natives"), 0.0);
+ int avoidNatives = rmCreateClassDistanceConstraint("avoid natives", rmClassID("natives"), 0.0);
+ int avoidNativesFar = rmCreateClassDistanceConstraint("avoid natives far", rmClassID("natives"), 0.0);
+ int avoidStartingResources = rmCreateClassDistanceConstraint("avoid starting resources", rmClassID("startingResource"), 6.0);
+ int avoidStartingResourcesShort = rmCreateClassDistanceConstraint("avoid starting resources short", rmClassID("startingResource"), 4.0);
+ int avoidWhale=rmCreateTypeDistanceConstraint("avoid whale", "fish", 52.0);
+ int avoidFish=rmCreateTypeDistanceConstraint("avoid fish", "fish", 24.0);
+ int avoidYak=rmCreateTypeDistanceConstraint("avoid yak", "ypyak", 62.0);
+ int avoidColonyShip = rmCreateTypeDistanceConstraint("avoid colony ship", "HomeCityWaterSpawnFlag", 30.0);
+ int avoidColonyShipShort = rmCreateTypeDistanceConstraint("avoid colony ship short", "HomeCityWaterSpawnFlag", 15.0);
+
+ // Avoid impassable land
+ int avoidImpassableLandMin = rmCreateTerrainDistanceConstraint("avoid impassable land min", "Land", false, 2.0);
+ int avoidImpassableLandShort = rmCreateTerrainDistanceConstraint("avoid impassable land short", "Land", false, 5.0);
+ int avoidImpassableLand = rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 8.0);
+ int avoidImpassableLandMed=rmCreateTerrainDistanceConstraint("avoid impassable land medium", "Land", false, 12.0);
+ int avoidImpassableLandFar = rmCreateTerrainDistanceConstraint("avoid impassable land far", "Land", false, 20.0);
+ int stayNearLand = rmCreateTerrainMaxDistanceConstraint("stay near land ", "Land", true, 5.0);
+ int avoidLand = rmCreateTerrainDistanceConstraint("avoid land ", "Land", true, 8.0);
+ int avoidLandFar = rmCreateTerrainDistanceConstraint("avoid land far ", "Land", true, 15.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "water", true, 3.0);
+ int avoidWater = rmCreateTerrainDistanceConstraint("avoid water ", "water", true, 10);
+ int avoidWaterFar = rmCreateTerrainDistanceConstraint("avoid water far", "water", true, 30.0);
+ int stayNearWater = rmCreateTerrainMaxDistanceConstraint("stay near water ", "water", true, 20.0);
+ int stayInWater = rmCreateTerrainMaxDistanceConstraint("stay in water ", "water", true, 0.0);
+ int avoidPatch = rmCreateClassDistanceConstraint("avoid patch", rmClassID("patch"), 5.0);
+ int avoidPatch2 = rmCreateClassDistanceConstraint("avoid patch2", rmClassID("patch2"), 20.0);
+ int avoidPatch3 = rmCreateClassDistanceConstraint("avoid patch3", rmClassID("patch3"), 5.0);
+
+ // Unit avoidance
+ int avoidStartingUnits = rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 35.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 7.0);
+
+ // VP avoidance
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 6.0);
+ int avoidTradeRouteShort = rmCreateTradeRouteDistanceConstraint("trade route short", 4.0);
+ int avoidTradeRouteSocket = rmCreateTypeDistanceConstraint("avoid trade route socket", "socketTradeRoute", 8.0);
+ int avoidTradeRouteSocketShort = rmCreateTypeDistanceConstraint("avoid trade route socket short", "socketTradeRoute", 7.0);
+ int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 10.0);
+
+
+ // ***********************************************************************************************
+
+ // **************************************** PLACE PLAYERS ****************************************
+
+ int teamZeroCount = rmGetNumberPlayersOnTeam(0);
+ int teamOneCount = rmGetNumberPlayersOnTeam(1);
+
+ if (cNumberTeams <= 2) // 1v1 and TEAM
+ {
+ if (teamZeroCount == 1 && teamOneCount == 1) // 1v1
+ {
+ float OneVOnePlacement=rmRandFloat(0.0, 0.9);
+ if ( OneVOnePlacement < 0.5)
+ {
+ rmPlacePlayer(1, 0.25, 0.50);
+ rmPlacePlayer(2, 0.75, 0.50);
+ }
+ else
+ {
+ rmPlacePlayer(2, 0.25, 0.50);
+ rmPlacePlayer(1, 0.75, 0.50);
+ }
+
+ }
+ else if (teamZeroCount == teamOneCount) // equal N of players per TEAM
+ {
+ if (teamZeroCount == 2) // 2v2
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.650, 0.850); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.150, 0.350); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+ }
+ else // 3v3, 4v4
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.625, 0.875); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.125, 0.375); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+ }
+ }
+ else // unequal N of players per TEAM
+ {
+ if (teamZeroCount == 1 || teamOneCount == 1) // one team is one player
+ {
+ if (teamZeroCount < teamOneCount) // 1v2, 1v3, 1v4, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.249, 0.251); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+
+ rmSetPlacementTeam(1);
+ if (teamOneCount == 2)
+ rmSetPlacementSection(0.650, 0.850); //
+ else
+ rmSetPlacementSection(0.625, 0.875); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+ }
+ else // 2v1, 3v1, 4v1, etc.
+ {
+ rmSetPlacementTeam(0);
+ if (teamZeroCount == 2)
+ rmSetPlacementSection(0.150, 0.350); //
+ else
+ rmSetPlacementSection(0.125, 0.375); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.749, 0.751); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+ }
+ }
+ else if (teamZeroCount == 2 || teamOneCount == 2) // one team has 2 players
+ {
+ if (teamZeroCount < teamOneCount) // 2v3, 2v4, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.650, 0.850); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.125, 0.375); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+ }
+ else // 3v2, 4v2, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.625, 0.875); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.150, 0.350); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+ }
+ }
+ else // 3v4, 4v3, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.625, 0.875); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.125, 0.375); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0);
+ }
+ }
+ }
+ else // FFA
+ {
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.26, 0.26, 0.0);
+ }
+
+ // **************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.30);
+
+ // ****************************************** TRADE ROUTE **********************************************
+
+ float TPvariation = -1;
+ TPvariation = rmRandFloat(0.1,1.0);
+// TPvariation = 0.3; // <--- TEST
+
+ 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, 8.0);
+ rmAddObjectDefConstraint(socketID, avoidImpassableLandShort);
+
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.05, 0.60);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.20, 0.85);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.50, 0.95);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.80, 0.82);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.95, 0.60);
+
+ bool placedTradeRoute = rmBuildTradeRoute(tradeRouteID, "water");
+ if(placedTradeRoute == false)
+ rmEchoError("Failed to place trade route");
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.50);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+
+ int tradeRoute2ID = rmCreateTradeRoute();
+ int socket2ID=rmCreateObjectDef("sockets to dock Trade Posts 2");
+ rmAddObjectDefItem(socket2ID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socket2ID, true);
+ rmSetObjectDefMinDistance(socket2ID, 0.0);
+ rmSetObjectDefMaxDistance(socket2ID, 8.0);
+ rmAddObjectDefConstraint(socket2ID, avoidImpassableLandShort);
+
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.95, 0.40);
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.80, 0.16);
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.50, 0.05);
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.20, 0.16);
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.05, 0.40);
+
+ bool placedTradeRoute2 = rmBuildTradeRoute(tradeRoute2ID, "water");
+ if(placedTradeRoute2 == false)
+ rmEchoError("Failed to place trade route 2");
+ rmSetObjectDefTradeRouteID(socket2ID, tradeRoute2ID);
+ vector socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.15);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.50);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.85);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+
+ // *************************************************************************************************************
+
+ // ******************************************** MAP LAYOUT **************************************************
+
+
+ //Plateau 1st level
+ int plateauID = rmCreateArea("first level plateau");
+ rmSetAreaWarnFailure(plateauID, false);
+ rmSetAreaLocation(plateauID, 0.50, 0.50);
+ rmSetAreaSize(plateauID, 0.36, 0.36);
+// rmAddAreaInfluenceSegment(plateauID, 0.40, 0.50, 0.60, 0.50);
+ rmSetAreaCliffHeight(plateauID, 6, 0.0, 0.6);
+ rmSetAreaCliffEdge(plateauID, 8, 0.10, 0, 1.0, 0);
+ rmSetAreaMix(plateauID, "himalayas_b");
+ rmSetAreaTerrainType(plateauID, "himalayas\ground_dirt2_himal");
+ rmSetAreaCliffType(plateauID, "himalayas");
+// rmSetAreaCliffPainting(plateauID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmSetAreaCoherence(plateauID, 0.70);
+ rmSetAreaSmoothDistance(plateauID, 14);
+// rmAddAreaConstraint(plateauID, plateauTrack);
+ rmAddAreaConstraint(plateauID, avoidTradeRouteShort);
+ rmAddAreaConstraint(plateauID, avoidTradeRouteSocketShort);
+ rmBuildArea(plateauID);
+
+ int avoidPlateau = rmCreateAreaDistanceConstraint("avoid first level plateau ", plateauID, 2);
+ int stayInPlateau = rmCreateAreaMaxDistanceConstraint("stay in first level plateau ", plateauID, 0);
+ int avoidRamp = rmCreateCliffRampDistanceConstraint("avoid ramp", plateauID, 15.0);
+ int avoidRampShort = rmCreateCliffRampDistanceConstraint("avoid ramp short", plateauID, 8.0);
+
+ //Hill 2nd level
+ int hillID = rmCreateArea("second level hill");
+ rmSetAreaWarnFailure(hillID, false);
+ rmSetAreaLocation(hillID, 0.5, 0.5);
+ rmSetAreaSize(hillID, 0.05, 0.05);
+ rmSetAreaCliffHeight(hillID, 4, 0.0, 0.8);
+ rmSetAreaCliffEdge(hillID, 4, 0.20, 0, 1.0, 0);
+// rmSetAreaMix(hillID, "himalayas_b");
+ rmSetAreaTerrainType(hillID, "himalayas\ground_dirt2_himal");
+ rmSetAreaCliffType(hillID, "himalayas");
+// rmSetAreaCliffPainting(hillID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmSetAreaCoherence(hillID, 0.65);
+ rmSetAreaSmoothDistance(hillID, 8);
+ rmBuildArea(hillID);
+
+ int avoidHill = rmCreateAreaDistanceConstraint("avoid second level plateau ", hillID, 2);
+ int stayInHill = rmCreateAreaMaxDistanceConstraint("stay in second level plateau ", hillID, 0);
+
+
+
+ // Patches
+ for (i=0; < 6+1*cNumberNonGaiaPlayers)
+ {
+ int patchID = rmCreateArea("patch"+i);
+ rmSetAreaWarnFailure(patchID, false);
+ rmSetAreaObeyWorldCircleConstraint(patchID, false);
+ rmSetAreaSize(patchID, rmAreaTilesToFraction(30), rmAreaTilesToFraction(60));
+ rmSetAreaTerrainType(patchID, "himalayas\ground_dirt3_himal");
+ rmAddAreaToClass(patchID, rmClassID("patch"));
+ rmSetAreaMinBlobs(patchID, 1);
+ rmSetAreaMaxBlobs(patchID, 5);
+ rmSetAreaMinBlobDistance(patchID, 12.0);
+ rmSetAreaMaxBlobDistance(patchID, 30.0);
+ rmSetAreaCoherence(patchID, 0.0);
+ rmAddAreaConstraint(patchID, avoidPatch);
+ rmAddAreaConstraint(patchID, avoidImpassableLandMin);
+ rmAddAreaConstraint(patchID, stayInHill);
+ rmBuildArea(patchID);
+ }
+
+
+
+ // Players area
+ for (i=1; < cNumberPlayers)
+ {
+ int playerareaID = rmCreateArea("playerarea"+i);
+ rmSetPlayerArea(i, playerareaID);
+ rmSetAreaSize(playerareaID, 0.05, 0.05);
+ rmSetAreaCoherence(playerareaID, 1.0);
+ rmSetAreaWarnFailure(playerareaID, false);
+// rmSetAreaTerrainType(playerareaID, "new_england\ground2_cliff_ne"); // for testing
+ rmSetAreaLocPlayer(playerareaID, i);
+ rmSetAreaObeyWorldCircleConstraint(playerareaID, false);
+ rmBuildArea(playerareaID);
+ rmCreateAreaDistanceConstraint("avoid player area "+i, playerareaID, 3.0);
+ rmCreateAreaMaxDistanceConstraint("stay in player area "+i, playerareaID, 0.0);
+ }
+
+ int avoidPlayerArea1 = rmConstraintID("avoid player area 1");
+ int avoidPlayerArea2 = rmConstraintID("avoid player area 2");
+ int stayInPlayerArea1 = rmConstraintID("stay in player area 1");
+ int stayInPlayerArea2 = rmConstraintID("stay in player area 2");
+
+ // *********************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.40);
+
+
+
+ // Text
+ rmSetStatusText("",0.45);
+
+ // ******************************************** NATIVES *************************************************
+
+
+ float Natsvariation = -1;
+// Natsvariation = rmRandFloat(0.0,1.0); // > 0.66 x2 udasi, > 0.33 x2 bhakti, else 1 udasi and 1 bhakti
+ Natsvariation = 0.2; // <--- TEST
+
+ int nativeID0 = -1;
+ int nativeID1 = -1;
+
+ if (Natsvariation > 0.66)
+ {
+ nativeID0 = rmCreateGrouping("Udasi village A", "uger"+1);
+ nativeID1 = rmCreateGrouping("Udasi village B", "uger"+1);
+ }
+ else if (Natsvariation > 0.33)
+ {
+ nativeID0 = rmCreateGrouping("Shaolin temple A", "uger"+1);
+ nativeID1 = rmCreateGrouping("Shaolin temple A", "uger"+1);
+ }
+ else
+ {
+ nativeID0 = rmCreateGrouping("Udasi village A", "uger"+1);
+ nativeID1 = rmCreateGrouping("Shaolin temple A", "uger"+1);
+ }
+// rmSetGroupingMinDistance(nativeID0, 0.00);
+// rmSetGroupingMaxDistance(nativeID0, 0.00);
+// rmSetGroupingMinDistance(nativeID1, 0.00);
+// rmSetGroupingMaxDistance(nativeID1, 0.00);
+ rmAddGroupingToClass(nativeID0, rmClassID("natives"));
+ rmAddGroupingToClass(nativeID1, rmClassID("natives"));
+ if (cNumberTeams <= 2)
+ {
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.50, 0.73);
+ rmPlaceGroupingAtLoc(nativeID1, 0, 0.50, 0.27);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.50, 0.70);
+ rmPlaceGroupingAtLoc(nativeID1, 0, 0.50, 0.30);
+ }
+
+ // ******************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.50);
+
+ // ************************************ PLAYER STARTING RESOURCES ***************************************
+
+ // ******** Define ********
+
+ // Town center & units
+ int TCID = rmCreateObjectDef("player TC");
+ int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ if (rmGetNomadStart())
+ {
+ rmAddObjectDefItem(TCID, "CoveredWagon", 1, 0.0);
+ }
+ else
+ {
+ rmAddObjectDefItem(TCID, "TownCenter", 1, 0.0);
+ rmAddObjectDefToClass(TCID, classStartingResource);
+ }
+ rmSetObjectDefMinDistance(TCID, 0.0);
+ rmSetObjectDefMaxDistance(TCID, 0.0);
+
+ // Starting mine
+ int playergoldID = rmCreateObjectDef("player mine");
+ rmAddObjectDefItem(playergoldID, "mine", 1, 0);
+ rmSetObjectDefMinDistance(playergoldID, 12.0);
+ rmSetObjectDefMaxDistance(playergoldID, 14.0);
+ rmAddObjectDefToClass(playergoldID, classStartingResource);
+ rmAddObjectDefToClass(playergoldID, classUpperGold);
+ rmAddObjectDefConstraint(playergoldID, avoidTradeRouteShort);
+ rmAddObjectDefConstraint(playergoldID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(playergoldID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playergoldID, avoidNatives);
+ rmAddObjectDefConstraint(playergoldID, avoidStartingResources);
+ rmAddObjectDefConstraint(playergoldID, stayCenter);
+// rmAddObjectDefConstraint(playergoldID, avoidEdge);
+
+ // 2nd mine
+ int playergold2ID = rmCreateObjectDef("player second mine");
+ rmAddObjectDefItem(playergold2ID, "mine", 1, 0);
+ rmSetObjectDefMinDistance(playergold2ID, 52.0); //58
+ rmSetObjectDefMaxDistance(playergold2ID, 54.0); //62
+ rmAddObjectDefToClass(playergold2ID, classStartingResource);
+ rmAddObjectDefToClass(playergold2ID, classUpperGold);
+ rmAddObjectDefConstraint(playergold2ID, avoidTradeRouteShort);
+ rmAddObjectDefConstraint(playergold2ID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(playergold2ID, avoidImpassableLandMed);
+ rmAddObjectDefConstraint(playergold2ID, avoidNatives);
+ rmAddObjectDefConstraint(playergold2ID, avoidGoldTypeFar);
+ rmAddObjectDefConstraint(playergold2ID, avoidStartingResources);
+ rmAddObjectDefConstraint(playergold2ID, stayInPlateau);
+ rmAddObjectDefConstraint(playergold2ID, avoidHill);
+ rmAddObjectDefConstraint(playergold2ID, avoidEdge);
+
+ // Starting trees
+ int playerTreeID = rmCreateObjectDef("player trees");
+ rmAddObjectDefItem(playerTreeID, "ypTreeHimalayas", rmRandInt(2,2), 3.0);
+ rmSetObjectDefMinDistance(playerTreeID, 12);
+ rmSetObjectDefMaxDistance(playerTreeID, 18);
+ rmAddObjectDefToClass(playerTreeID, classStartingResource);
+ rmAddObjectDefToClass(playerTreeID, classForest);
+// rmAddObjectDefConstraint(playerTreeID, avoidForestShort);
+ rmAddObjectDefConstraint(playerTreeID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerTreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerTreeID, avoidStartingResources);
+
+ // Starting herd
+ int playeherdID = rmCreateObjectDef("starting herd");
+ rmAddObjectDefItem(playeherdID, "ypIbex", rmRandInt(10,10), 7.0);
+ rmSetObjectDefMinDistance(playeherdID, 12.0);
+ rmSetObjectDefMaxDistance(playeherdID, 16.0);
+ rmSetObjectDefCreateHerd(playeherdID, true);
+ rmAddObjectDefToClass(playeherdID, classStartingResource);
+ rmAddObjectDefConstraint(playeherdID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playeherdID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playeherdID, avoidNatives);
+ rmAddObjectDefConstraint(playeherdID, avoidStartingResources);
+
+ // 2nd herd
+ int player2ndherdID = rmCreateObjectDef("player 2nd herd");
+ rmAddObjectDefItem(player2ndherdID, "ypIbex", rmRandInt(10,10), 7.0);
+ rmSetObjectDefMinDistance(player2ndherdID, 28);
+ rmSetObjectDefMaxDistance(player2ndherdID, 30);
+ rmAddObjectDefToClass(player2ndherdID, classStartingResource);
+ rmSetObjectDefCreateHerd(player2ndherdID, true);
+ rmAddObjectDefConstraint(player2ndherdID, avoidStartingResources);
+ rmAddObjectDefConstraint(player2ndherdID, avoidSerow);
+// rmAddObjectDefConstraint(player2ndherdID, avoidTradeRouteShort);
+ rmAddObjectDefConstraint(player2ndherdID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(player2ndherdID, avoidImpassableLand);
+ rmAddObjectDefConstraint(player2ndherdID, avoidEdge);
+ rmAddObjectDefConstraint(player2ndherdID, avoidNatives);
+
+ // Starting berries
+ int playerberriesID = rmCreateObjectDef("player berries");
+ rmAddObjectDefItem(playerberriesID, "berrybush", 2, 3.0);
+ rmSetObjectDefMinDistance(playerberriesID, 12.0);
+ rmSetObjectDefMaxDistance(playerberriesID, 14.0);
+ rmAddObjectDefToClass(playerberriesID, classStartingResource);
+ rmAddObjectDefConstraint(playerberriesID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerberriesID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerberriesID, avoidNatives);
+ rmAddObjectDefConstraint(playerberriesID, avoidStartingResources);
+
+ // Starting yaks
+ int playerYakID = rmCreateObjectDef("starting yaks");
+ rmAddObjectDefItem(playerYakID, "ypyak", rmRandInt(1,3), 3.0);
+ rmSetObjectDefMinDistance(playerYakID, 12.0);
+ rmSetObjectDefMaxDistance(playerYakID, 16.0);
+ rmAddObjectDefToClass(playerYakID, classStartingResource);
+ rmAddObjectDefConstraint(playerYakID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerYakID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerYakID, avoidNatives);
+ rmAddObjectDefConstraint(playerYakID, avoidStartingResources);
+
+ // 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); //Short
+ rmAddObjectDefConstraint(playerNuggetID, avoidEdge);
+ int nugget0count = rmRandInt (1,2); // 1,2
+
+
+
+ // ******** Place ********
+
+ for(i=1; = 4)
+ rmPlaceObjectDefAtLoc(Nugget4ID, 0, 0.50, 0.50);
+ }
+
+
+ // Treasures lvl2
+ for (i=0; < treasure2count)
+ {
+ int Nugget2ID = rmCreateObjectDef("nugget lvl2 "+i);
+ rmAddObjectDefItem(Nugget2ID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(Nugget2ID, 0);
+ rmSetObjectDefMaxDistance(Nugget2ID, rmXFractionToMeters(0.5));
+ rmSetNuggetDifficulty(2,2);
+ rmAddObjectDefConstraint(Nugget2ID, avoidNugget);
+ rmAddObjectDefConstraint(Nugget2ID, avoidNatives);
+ rmAddObjectDefConstraint(Nugget2ID, avoidTradeRouteShort);
+ rmAddObjectDefConstraint(Nugget2ID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(Nugget2ID, avoidImpassableLand);
+ rmAddObjectDefConstraint(Nugget2ID, avoidGoldTypeMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidTownCenter);
+ rmAddObjectDefConstraint(Nugget2ID, avoidIbexMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidForestMin);
+ rmAddObjectDefConstraint(Nugget2ID, avoidEdge);
+ rmAddObjectDefConstraint(Nugget2ID, stayInPlateau);
+ rmAddObjectDefConstraint(Nugget2ID, avoidHill);
+ rmAddObjectDefConstraint(Nugget2ID, avoidRamp);
+ rmPlaceObjectDefAtLoc(Nugget2ID, 0, 0.50, 0.50);
+ }
+
+
+ // Treasures lvl1
+ for (i=0; < treasure1count)
+ {
+ int Nugget1ID = rmCreateObjectDef("nugget lvl1 "+i);
+ rmAddObjectDefItem(Nugget1ID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(Nugget1ID, 0);
+ rmSetObjectDefMaxDistance(Nugget1ID, rmXFractionToMeters(0.5));
+ rmSetNuggetDifficulty(1,1);
+ rmAddObjectDefConstraint(Nugget1ID, avoidNuggetFar);
+ rmAddObjectDefConstraint(Nugget1ID, avoidNatives);
+ rmAddObjectDefConstraint(Nugget1ID, avoidTradeRouteShort);
+ rmAddObjectDefConstraint(Nugget1ID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(Nugget1ID, avoidImpassableLandMed);
+ rmAddObjectDefConstraint(Nugget1ID, avoidGoldTypeMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidTownCenter);
+ rmAddObjectDefConstraint(Nugget1ID, avoidMuskdeerMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidForestMin);
+ rmAddObjectDefConstraint(Nugget1ID, avoidEdge);
+ rmAddObjectDefConstraint(Nugget1ID, avoidPlateau);
+// if (i < 2)
+// rmAddObjectDefConstraint(Nugget2ID, staySouthHalf);
+// else if (i < 4)
+// rmAddObjectDefConstraint(Nugget2ID, stayNorthHalf);
+ rmPlaceObjectDefAtLoc(Nugget1ID, 0, 0.50, 0.50);
+ }
+
+
+ // ****************************************
+
+ // Text
+ rmSetStatusText("",0.95);
+
+ // **************** Yaks *****************
+
+ int yakcount = 2+3*cNumberNonGaiaPlayers;
+
+ for (i=0; < yakcount)
+ {
+ int yakID=rmCreateObjectDef("yak"+i);
+ if (i < yakcount/4)
+ rmAddObjectDefItem(yakID, "ypyak", 2, 4.0);
+ else
+ rmAddObjectDefItem(yakID, "ypyak", 1, 1.0);
+ rmSetObjectDefMinDistance(yakID, 0.0);
+ rmSetObjectDefMaxDistance(yakID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(yakID, avoidYak);
+ rmAddObjectDefConstraint(yakID, avoidNatives);
+ rmAddObjectDefConstraint(yakID, avoidTradeRouteSocket);
+ rmAddObjectDefConstraint(yakID, avoidImpassableLand);
+ rmAddObjectDefConstraint(yakID, avoidGoldTypeMin);
+ rmAddObjectDefConstraint(yakID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(yakID, avoidIbexMin);
+ rmAddObjectDefConstraint(yakID, avoidMuskdeerMin);
+ rmAddObjectDefConstraint(yakID, avoidForestMin);
+ rmAddObjectDefConstraint(yakID, avoidNuggetShort);
+ rmAddObjectDefConstraint(yakID, avoidEdge);
+ rmAddObjectDefConstraint(yakID, avoidRampShort);
+ rmAddObjectDefConstraint(yakID, avoidHill);
+ if (i < yakcount/4)
+ {
+ rmAddObjectDefConstraint(yakID, stayInPlateau);
+ if (i%2 == 0)
+ rmAddObjectDefConstraint(yakID, stayNorthHalf);
+ else
+ rmAddObjectDefConstraint(yakID, staySouthHalf);
+ }
+ else
+ rmAddObjectDefConstraint(yakID, avoidPlateau);
+ rmPlaceObjectDefAtLoc(yakID, 0, 0.50, 0.50);
+ }
+ // ****************************************
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH()) {
+
+ int randLoc = rmRandInt(1,2);
+ float xLoc = 0.5;
+ float yLoc = 0.5;
+ float walk = 0.015;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, 0);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ // Text
+ rmSetStatusText("",1.00);
+
+} //END
+
+
\ No newline at end of file
diff --git a/RMM/Largerandommaps.set b/RMM/Largerandommaps.set
index 18519be..5392923 100644
--- a/RMM/Largerandommaps.set
+++ b/RMM/Largerandommaps.set
@@ -12,4 +12,7 @@
+
+
+
diff --git a/RMM/Madagascar.xml b/RMM/Madagascar.xml
new file mode 100644
index 0000000..b159035
--- /dev/null
+++ b/RMM/Madagascar.xml
@@ -0,0 +1,13 @@
+
+
+ ui\random_map\africa\madagascar\madagascar_ss_01
+ ui\random_map\africa\madagascar\madagascar_ss_02
+ ui\random_map\africa\madagascar\madagascar_ss_03
+
+
+
\ No newline at end of file
diff --git a/RMM/Madagascar.xs b/RMM/Madagascar.xs
new file mode 100644
index 0000000..03370bd
--- /dev/null
+++ b/RMM/Madagascar.xs
@@ -0,0 +1,1142 @@
+// Korea
+// RF_Gandalf
+// Main entry point for random map script
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+// initialize map type variables
+ string nativeCiv1 = "";
+ string nativeCiv2 = "";
+
+ string baseMix = "california_grass";
+ string baseTerrain = "water";
+ string seaType = "california coast";
+ string cliffType = "california";
+
+ string forestType = "Madagascar Forest";
+ string startTreeType = "TreeAraucania";
+
+ string mapType1 = "ceylon";
+ string mapType2 = "water";
+
+ string huntable1 = "ypMuskDeer";
+ string huntable2 = "ypIbex";
+ string fish1 = "ypFishTuna";
+ string fish2 = "ypSquid";
+ string whale1 = "HumpbackWhale";
+ string sheepType = "ypWaterBuffalo";
+
+ string patchTerrain = "california\groundforest_cal";
+ string patchType1 = "california\groundforest_cal";
+ string patchType2 = "california\groundforest_cal";
+
+ string lightingType = "yucatan";
+
+// Initialize terms
+ int classSmallIsland = 0;
+ int avoidAll = 0;
+ int avoidAllForests = 0;
+ int avoidWater4 = 0;
+ int avoidRandomBerries = 0;
+ int avoidNugget = 0;
+ int nuggetVsCoin = 0;
+ int islandConstraint = 0;
+ int avoidSmallIslands = 0;
+ int nuggetAvoidsBerries = 0;
+ int forestVsNugget = 0;
+ int forestVsCoin = 0;
+ int islandEdgeConstraint = 0;
+ int forestConstraintShort = 0;
+ int avoidImpassableLand = 0;
+ int avoidImpassableLandLong = 0;
+ int shortAvoidTradeRoute = 0;
+ int avoidTradeRouteSocketsShort = 0;
+ int avoidTradeRouteSocketsNear = 0;
+ int avoidNuggetShort = 0;
+ int avoidCoinShort = 0;
+ int numTries = 0;
+ int goldCounter = 0;
+ int berryCounter = 0;
+ int nuggetCounter = 0;
+ int forestCounter = 0;
+ int huntCounter = 0;
+ float randomIslandStuff = 0.0;
+
+ int classHuntable=0;
+ int huntableConstraint=0;
+ int classImportantItem=0;
+
+ float xLoc = 0.0;
+ float yLoc = 0.0;
+
+//places mines in the north
+void sfIslandGold (int islandID = 0, string mineType = "mine", int mineCount = 1)
+{
+ int islandGoldID = rmCreateObjectDef("random gold"+goldCounter);
+ rmAddObjectDefItem(islandGoldID, mineType, 1, 0);
+ rmSetObjectDefMinDistance(islandGoldID, 0.0);
+ rmSetObjectDefMaxDistance(islandGoldID, 6.0);
+ rmAddObjectDefConstraint(islandGoldID, avoidImpassableLandLong);
+ rmAddObjectDefConstraint(islandGoldID, avoidTradeRouteSocketsShort);
+ rmAddObjectDefConstraint(islandGoldID, shortAvoidTradeRoute);
+ rmAddObjectDefConstraint(islandGoldID, avoidAll);
+ rmAddObjectDefConstraint(islandGoldID, avoidCoinShort);
+ rmAddObjectDefConstraint(islandGoldID, avoidNuggetShort);
+ rmPlaceObjectDefInArea(islandGoldID, 0, islandID, mineCount);
+ goldCounter = goldCounter + 1;
+}
+
+//places berries in the north
+void sfIslandBerries (int islandID = 0, int berryLow = 0, int berryHigh = 0)
+{
+ int islandBerriesID=rmCreateObjectDef("random berries"+berryCounter);
+ rmAddObjectDefItem(islandBerriesID, "berrybush", rmRandInt(berryLow,berryHigh), 6.0);
+ rmSetObjectDefMinDistance(islandBerriesID, 0.0);
+ rmSetObjectDefMaxDistance(islandBerriesID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(islandBerriesID, avoidRandomBerries);
+ rmAddObjectDefConstraint(islandBerriesID, avoidImpassableLand);
+ rmAddObjectDefConstraint(islandBerriesID, avoidTradeRouteSocketsShort);
+ rmAddObjectDefConstraint(islandBerriesID, shortAvoidTradeRoute);
+ rmAddObjectDefConstraint(islandBerriesID, avoidAll);
+ rmPlaceObjectDefInArea(islandBerriesID, 0, islandID, 1);
+ berryCounter = berryCounter + 1;
+}
+
+//places treasures in the north
+void sfIslandNuggets (int islandID = 0, int nuggetLow = 0, int nuggetHigh = 0)
+{
+ int nuggetID= rmCreateObjectDef("nugget"+nuggetCounter);
+ rmAddObjectDefItem(nuggetID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(nuggetID, 0.0);
+ rmSetNuggetDifficulty(nuggetLow, nuggetHigh);
+ rmSetObjectDefMaxDistance(nuggetID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(nuggetID, nuggetAvoidsBerries);
+ rmAddObjectDefConstraint(nuggetID, avoidAll);
+ rmAddObjectDefConstraint(nuggetID, avoidImpassableLandLong);
+ rmAddObjectDefConstraint(nuggetID, forestVsNugget);
+ rmAddObjectDefConstraint(nuggetID, forestConstraintShort);
+ rmAddObjectDefConstraint(nuggetID, avoidWater4);
+ rmAddObjectDefConstraint(nuggetID, avoidTradeRouteSocketsShort);
+ rmAddObjectDefConstraint(nuggetID, shortAvoidTradeRoute);
+ rmAddObjectDefConstraint(nuggetID, islandEdgeConstraint);
+ rmPlaceObjectDefInArea(nuggetID, 0, islandID, 1);
+ nuggetCounter = nuggetCounter + 1;
+}
+
+//builds the north area
+int sfBuildBigIsland (string bigIslandName = "topID", float x_loc = 0.5, float y_loc = 0.85, float mainlandType = 0.0)
+{
+ int bigIslandID=rmCreateArea(bigIslandName);
+ rmSetAreaSize(bigIslandID, 0.14, 0.14);
+ rmAddAreaToClass(bigIslandID, classSmallIsland);
+ rmSetAreaMix(bigIslandID, baseMix);
+ rmSetAreaEdgeFilling(bigIslandID, 5);
+ rmSetAreaBaseHeight(bigIslandID, 1.0);
+ rmSetAreaSmoothDistance(bigIslandID, 10);
+ rmSetAreaWarnFailure(bigIslandID, false);
+ rmSetAreaCoherence(bigIslandID, 0.55);
+ rmSetAreaLocation(bigIslandID, x_loc, y_loc);
+ rmSetAreaObeyWorldCircleConstraint(bigIslandID, false);
+ rmSetAreaElevationType(bigIslandID, cElevTurbulence);
+ rmSetAreaElevationVariation(bigIslandID, 3.0);
+ rmSetAreaElevationMinFrequency(bigIslandID, 0.09);
+ rmSetAreaElevationOctaves(bigIslandID, 3);
+ rmSetAreaElevationPersistence(bigIslandID, 0.2);
+ rmSetAreaElevationNoiseBias(bigIslandID, 1);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.9, 1.0, 0.9);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.9, 0.0, 0.9);
+ rmBuildArea(bigIslandID);
+
+ int tradeRouteID = rmCreateTradeRoute();
+ int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmAddObjectDefToClass(socketID, classImportantItem);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 8.0);
+
+ rmAddTradeRouteWaypoint(tradeRouteID, .925, .935);
+ rmAddTradeRouteWaypoint(tradeRouteID, .9, .89);
+ rmAddTradeRouteWaypoint(tradeRouteID, .61, .8);
+ rmAddTradeRouteWaypoint(tradeRouteID, .55, .77);
+ rmAddTradeRouteWaypoint(tradeRouteID, .5, .77);
+ rmAddTradeRouteWaypoint(tradeRouteID, .45, .77);
+ rmAddTradeRouteWaypoint(tradeRouteID, .39, .8);
+ rmAddTradeRouteWaypoint(tradeRouteID, .1, .89);
+ rmAddTradeRouteWaypoint(tradeRouteID, .075, .935);
+ rmEchoInfo("Up top");
+
+ bool placedTradeRoute = rmBuildTradeRoute(tradeRouteID, "water");
+ if(placedTradeRoute == false)
+ rmEchoError("Failed to place trade route");
+
+ // add the sockets along the trade route.
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.3);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.7);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH())
+ {
+ int randLoc = rmRandInt(1,2);
+ float walk = 0.1;
+
+ xLoc = 0.5;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, avoidTradeRouteSocketsNear);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ sfIslandBerries(bigIslandID, 7, 9);
+ sfIslandNuggets(bigIslandID, 4, 4);
+ sfIslandNuggets(bigIslandID, 3, 3);
+ sfIslandNuggets(bigIslandID, 4, 4);
+ sfIslandNuggets(bigIslandID, 3, 3);
+
+ if(cNumberNonGaiaPlayers < 4)
+ sfIslandGold(bigIslandID, "minegold", 2);
+ else if(cNumberNonGaiaPlayers < 6)
+ sfIslandGold(bigIslandID, "minegold", 3);
+ else if (mainlandType == 1.0)
+ sfIslandGold(bigIslandID, "minegold", 4);
+
+ return(bigIslandID);
+}
+
+//main function
+void main(void)
+{
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.01);
+
+// Define Natives
+ int subCiv0=-1;
+ int subCiv1=-1;
+ int subCiv2=-1;
+
+ if (rmAllocateSubCivs(3) == true)
+ {
+ subCiv0=rmGetCivID("bhakti");
+ rmEchoInfo("subCiv0 is bhakti "+subCiv0);
+ if (subCiv0 >= 0)
+ rmSetSubCiv(0, "bhakti");
+
+ subCiv1=rmGetCivID("jesuit");
+ rmEchoInfo("subCiv1 is jesuit "+subCiv1);
+ if (subCiv1 >= 0)
+ rmSetSubCiv(1, "jesuit");
+
+ subCiv2=rmGetCivID("aztecs");
+ rmEchoInfo("subCiv2 is aztecs "+subCiv2);
+ if (subCiv2 >= 0)
+ rmSetSubCiv(2, "aztecs");
+ }
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.10);
+
+// Set size of map
+ int playerTiles=27000;
+ if (cNumberNonGaiaPlayers == 3) // If 3 players...
+ playerTiles = 25000; // ...give this many tiles per player.
+ if (cNumberNonGaiaPlayers == 4) // If 4 players...
+ playerTiles = 22000; // ...give this many tiles per player.
+ if (cNumberNonGaiaPlayers >4) // If 5 or 6 players...
+ playerTiles = 19000; // ...give this many tiles per player.
+ if (cNumberNonGaiaPlayers == 6) // If more than 6 players...
+ playerTiles = 16500; // ...give this many tiles per player.
+ if (cNumberNonGaiaPlayers >6) // If more than 6 players...
+ playerTiles = 15000; // ...give this many tiles per player.
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ int longSide=1.1*size; // was 1.35
+
+// === new sizes ======================================================================================================
+ int scalingNumber = 2;
+ if (cNumberNonGaiaPlayers == 2)
+ {
+ size = 465;
+ longSide = 515;
+ }
+ else if (cNumberNonGaiaPlayers < 5) // 3 or 4
+ {
+ size = 475;
+ longSide = 550;
+ scalingNumber = 3;
+ }
+ else if (cNumberNonGaiaPlayers < 7)
+ {
+ size = 485;
+ longSide = 585;
+ scalingNumber = 4;
+ if (cNumberTeams > 2)
+ {
+ size = 495;
+ longSide = 625;
+ }
+ }
+ else if (cNumberNonGaiaPlayers > 6)
+ {
+ size = 495;
+ longSide = 625;
+ scalingNumber = 5;
+ if (cNumberTeams > 2)
+ {
+ size = 515;
+ longSide = 650;
+ }
+ }
+
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, longSide);
+
+// Set up map types
+ int mapTypePicker = rmRandInt(1,2);
+ rmSetSeaLevel(1.0);
+ rmSetSeaType(seaType);
+ rmEnableLocalWater(false);
+ rmSetBaseTerrainMix(baseMix);
+ if (mapTypePicker == 1)
+ rmSetMapType(mapType1);
+ else
+ rmSetMapType(mapType2);
+ rmSetMapType("grass");
+ rmSetMapType("water");
+ rmSetLightingSet(lightingType);
+
+// Initialize map.
+ rmTerrainInitialize(baseTerrain);
+ chooseMercs();
+
+// Define some classes.
+ int classPlayer=rmDefineClass("player");
+ int classIsland=rmDefineClass("island");
+ classSmallIsland=rmDefineClass("smallIsland");
+ rmDefineClass("classForest");
+
+ rmDefineClass("natives");
+ rmDefineClass("classSocket");
+ rmDefineClass("classPatch");
+
+ classHuntable=rmDefineClass("huntableFood");
+ int classHerdable=rmDefineClass("herdableFood");
+ classImportantItem=rmDefineClass("importantItem");
+ rmDefineClass("classCliff");
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.20);
+
+// -------------Define constraints----------------------------------------
+ avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 4.0);
+ avoidAllForests=rmCreateTypeDistanceConstraint("avoid all forests", "all", 6.0);
+ avoidRandomBerries=rmCreateTypeDistanceConstraint("avoid random berries", "berrybush", 55.0);
+ nuggetAvoidsBerries=rmCreateTypeDistanceConstraint("nuggets avoid berries", "berrybush", 5.0);
+ int avoidBerries = rmCreateTypeDistanceConstraint("avoid berries", "berrybush", 8.0);
+
+ int avoidSheep=rmCreateClassDistanceConstraint("sheep avoids sheep etc", rmClassID("herdableFood"), 45.0);
+ huntableConstraint=rmCreateClassDistanceConstraint("huntable constraint", rmClassID("huntableFood"), 45.0);
+ int nuggetPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 60.0);
+
+ // Create an edge of map constraint.
+ int playerEdgeConstraint=rmCreatePieConstraint("player edge of map", 0.5, 0.5, rmXFractionToMeters(0.0), rmXFractionToMeters(0.46), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ // Player area constraint.
+ int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 25.0);
+ int playerConstraintMed=rmCreateClassDistanceConstraint("stay away from players med", classPlayer, 50.0);
+ int playerConstraintFar=rmCreateClassDistanceConstraint("stay away from player Far", classPlayer, 75.0);
+ int playerConstraintNative=rmCreateClassDistanceConstraint("natives stay away from player Far", classPlayer, 65.0);
+
+ // Island Halves
+ int avoidSouth = rmCreateBoxConstraint("avoid the south", 0.0, 0.05, 1.0, 1.0);
+
+ // Bonus area constraint.
+ islandConstraint=rmCreateClassDistanceConstraint("stay away from main island", classIsland, 12.0);
+ avoidSmallIslands = rmCreateClassDistanceConstraint("stay away from other bonus islands", classSmallIsland, 10.0);
+ islandEdgeConstraint = rmCreatePieConstraint("Islands away from edge of map", 0.5, 0.5, 0, rmGetMapXSize()-12, 0, 0, 0);
+
+ // Fish Constraints
+ int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", fish1, 25.0);
+ int fishVsFishTarponID=rmCreateTypeDistanceConstraint("fish v fish2", fish2, 20.0);
+ int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 8.0);
+ int whaleVsWhaleID=rmCreateTypeDistanceConstraint("whale v whale", whale1, 35.0);
+ int fishVsWhaleID=rmCreateTypeDistanceConstraint("fish v whale", whale1, 20.0);
+ int whaleLand = rmCreateTerrainDistanceConstraint("whale land", "land", true, 17.0);
+ int whaleEdgeConstraint = rmCreateBoxConstraint("whales avoid edge", rmXTilesToFraction(17), rmZTilesToFraction(17), 1.0-rmXTilesToFraction(17), 1.0-rmZTilesToFraction(17), 0.01);
+ int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0);
+
+ // resource constraints
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 24.0);
+ forestConstraintShort=rmCreateClassDistanceConstraint("vs. forest short", rmClassID("classForest"), 5.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "mine", 50.0);
+ avoidCoinShort=rmCreateTypeDistanceConstraint("avoid coin short", "minegold", 30.0);
+ int avoidGold=rmCreateTypeDistanceConstraint("avoid gold", "minegold", 55.0);
+ forestVsCoin=rmCreateTypeDistanceConstraint("forest vs. coin", "mine", 7.0);
+ nuggetVsCoin=rmCreateTypeDistanceConstraint("nugget vs. coin", "mine", 8.0);
+ int avoidRandomTurkeys=rmCreateTypeDistanceConstraint("avoid random turkeys", huntable1, 35.0);
+ avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "abstractNugget", 35.0);
+ int avoidNuggetFar=rmCreateTypeDistanceConstraint("nugget avoid nugget far", "abstractNugget", 70.0);
+ forestVsNugget=rmCreateTypeDistanceConstraint("forest vs. nugget", "abstractNugget", 10.0);
+ avoidNuggetShort=rmCreateTypeDistanceConstraint("vs. nugget short", "abstractNugget", 8.0);
+ int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);
+
+ // Avoid impassable land
+ avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 6.0);
+ avoidImpassableLandLong=rmCreateTerrainDistanceConstraint("avoid impassable land long", "Land", false, 15.0);
+ int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 2.0);
+
+ int cliffsAvoidCliffs=rmCreateClassDistanceConstraint("cliffs vs. cliffs", rmClassID("classCliff"), 30.0);
+
+ // Constraint to avoid water.
+ avoidWater4 = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 7.0);
+ int avoidWater20 = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 20.0);
+ int avoidWater8 = rmCreateTerrainDistanceConstraint("avoid water 8", "Land", false, 13.0);
+
+ int avoidImportantItem = rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 10.0);
+ int avoidImportantItemCliff = rmCreateClassDistanceConstraint("cliffs etc avoid importants", rmClassID("importantItem"), 40.0);
+ int avoidImportantItemFar = rmCreateClassDistanceConstraint("secrets etc avoid each other Far", rmClassID("importantItem"), 50.0);
+
+ shortAvoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route short", 5.0);
+ int medAvoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route med", 10.0);
+ avoidTradeRouteSocketsShort=rmCreateTypeDistanceConstraint("avoid trade route sockets short", "sockettraderoute", 10.0);
+ avoidTradeRouteSocketsNear=rmCreateTypeDistanceConstraint("avoid trade route sockets near", "sockettraderoute", 6.0);
+
+ // Flag constraints for HC spawn point
+ int flagEdgeConstraint = rmCreateBoxConstraint("flags avoid edge", rmXTilesToFraction(15), rmZTilesToFraction(15), 1.0-rmXTilesToFraction(15), 1.0-rmZTilesToFraction(15), 0.01);
+ int flagLand = rmCreateTerrainDistanceConstraint("flag vs land", "land", true, 18.0);
+ int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 22);
+ if (cNumberTeams > 2)
+ flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same far", "HomeCityWaterSpawnFlag", 50);
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.30);
+
+// Make one big island.
+ int bigIslandID=rmCreateArea("big peninsula");
+ if (cNumberNonGaiaPlayers > 6)
+ rmSetAreaSize(bigIslandID, 0.46, 0.46);
+ else if (cNumberNonGaiaPlayers > 4)
+ rmSetAreaSize(bigIslandID, 0.45, 0.45);
+ else
+ rmSetAreaSize(bigIslandID, 0.43, 0.43);
+ rmSetAreaCoherence(bigIslandID, 0.66);
+ rmSetAreaBaseHeight(bigIslandID, 1.5);
+ rmSetAreaSmoothDistance(bigIslandID, 12);
+ rmSetAreaMix(bigIslandID, baseMix);
+ rmAddAreaToClass(bigIslandID, classIsland);
+ rmSetAreaObeyWorldCircleConstraint(bigIslandID, false);
+ rmSetAreaElevationType(bigIslandID, cElevTurbulence);
+ rmSetAreaElevationVariation(bigIslandID, 3.0);
+ rmSetAreaElevationMinFrequency(bigIslandID, 0.12);
+ rmSetAreaElevationOctaves(bigIslandID, 3);
+ rmSetAreaElevationPersistence(bigIslandID, 0.15);
+ rmSetAreaElevationNoiseBias(bigIslandID, 1);
+ rmSetAreaEdgeFilling(bigIslandID, 5);
+
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.2, 0.5, 1.0);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.0, 0.94, 1.0, 0.94);
+ if (cNumberNonGaiaPlayers < 7)
+ {
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 1.0, 0.5, 0.21);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.32, 1.0, 0.34, 0.225);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.68, 1.0, 0.66, 0.225);
+ }
+ else
+ {
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 1.0, 0.5, 0.195);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.32, 1.0, 0.34, 0.215);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.68, 1.0, 0.66, 0.215);
+ }
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.75, 0.0, 0.9);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.75, 1.0, 0.9);
+
+ rmSetAreaLocation(bigIslandID, 0.5, 0.6);
+ rmSetAreaWarnFailure(bigIslandID, false);
+ rmBuildArea(bigIslandID);
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.40);
+
+// Set up player areas and starting locs
+ float teamStartLoc = rmRandFloat(0.0, 1.0);
+
+ if (cNumberTeams == 2)
+ {
+ if (cNumberNonGaiaPlayers == 2)
+ {
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(0);
+ else
+ rmSetPlacementTeam(1);
+
+ rmPlacePlayersLine(0.67, 0.5, 0.67, 0.51, 0.1, 0);
+
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(1);
+ else
+ rmSetPlacementTeam(0);
+
+ rmPlacePlayersLine(0.33, 0.5, 0.33, 0.51, 0.1, 0);
+ }
+ else if (cNumberNonGaiaPlayers < 5)
+ {
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(0);
+ else
+ rmSetPlacementTeam(1);
+
+ rmPlacePlayersLine(0.69, 0.4, 0.69, 0.62, 0.1, 0);
+
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(1);
+ else
+ rmSetPlacementTeam(0);
+
+ rmPlacePlayersLine(0.31, 0.62, 0.31, 0.4, 0.1, 0);
+ }
+ else if (cNumberNonGaiaPlayers < 7)
+ {
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(0);
+ else
+ rmSetPlacementTeam(1);
+
+ rmPlacePlayersLine(0.69, 0.35, 0.69, 0.67, 0.1, 0);
+
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(1);
+ else
+ rmSetPlacementTeam(0);
+
+ rmPlacePlayersLine(0.31, 0.67, 0.31, 0.35, 0.1, 0);
+ }
+ else
+ {
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(0);
+ else
+ rmSetPlacementTeam(1);
+
+ rmPlacePlayersLine(0.69, 0.32, 0.69, 0.69, 0.1, 0);
+
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(1);
+ else
+ rmSetPlacementTeam(0);
+
+ rmPlacePlayersLine(0.31, 0.69, 0.31, 0.32, 0.1, 0);
+ }
+ }
+ else // otherwise FFA
+ {
+ if (cNumberNonGaiaPlayers < 5)
+ rmSetPlayerPlacementArea(0.31, 0.35, 0.69, 0.65);
+ else if (cNumberNonGaiaPlayers < 7)
+ rmSetPlayerPlacementArea(0.31, 0.33, 0.69, 0.67);
+ else
+ rmSetPlayerPlacementArea(0.31, 0.33, 0.69, 0.69);
+ rmPlacePlayersSquare(0.5, 0.0, 0.0);
+ }
+
+ // Create the Player's area.
+ float playerFraction=rmAreaTilesToFraction(100);
+ for(i=1; 2)
+ castleSetup = 3;
+
+ if (castleSetup == 1)
+ yLoc = 0.92;
+ else if (castleSetup == 2)
+ yLoc = 0.72;
+ else
+ yLoc = 0.5;
+
+ int bonusIslandID6 = sfBuildBigIsland("bonus island 6", 0.5, 0.92, 1.0);
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.60);
+
+// Natives
+ int nativeType = rmRandInt(1,2);
+ int villageType = rmRandInt(1,5);
+ int nativeSetup = rmRandInt(1,2);
+ int zenVillage = 0;
+
+ int villageAID = -1; // SOUTHERN VILLAGE
+ if (nativeType == 1)
+ {
+ villageAID = rmCreateGrouping("village A", "native bhakti village "+villageType);
+ zenVillage = 1;
+ }
+ else
+ villageAID = rmCreateGrouping("village A", "native jesuit mission cj 0"+villageType);
+ rmAddGroupingToClass(villageAID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageAID, 0.0);
+ rmSetGroupingMaxDistance(villageAID, 15.0);
+ rmAddGroupingConstraint(villageAID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageAID, avoidWater8);
+ rmAddGroupingConstraint(villageAID, avoidImportantItemFar);
+ if (cNumberTeams > 2 && cNumberNonGaiaPlayers > 4)
+ rmAddGroupingConstraint(villageAID, playerConstraintMed);
+ else
+ rmAddGroupingConstraint(villageAID, playerConstraintNative);
+ rmAddGroupingConstraint(villageAID, avoidAll);
+ rmAddGroupingConstraint(villageAID, medAvoidTradeRoute);
+ rmAddGroupingConstraint(villageAID, avoidTradeRouteSocketsShort);
+
+ int villageBID = -1; // NORTHERN VILLAGE
+ if (zenVillage == 1)
+ nativeType = 2;
+ else
+ nativeType = rmRandInt(1,2);
+ villageType = rmRandInt(1,5);
+ if (nativeType == 1)
+ villageBID = rmCreateGrouping("village B", "native Aztec village "+villageType);
+ else
+ villageBID = rmCreateGrouping("village B", "native bhakti village "+villageType);
+ rmAddGroupingToClass(villageBID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageBID, 0.0);
+ rmSetGroupingMaxDistance(villageBID, 22.0);
+ rmAddGroupingConstraint(villageBID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageBID, avoidWater8);
+ rmAddGroupingConstraint(villageBID, avoidImportantItemFar);
+ rmAddGroupingConstraint(villageBID, playerConstraintNative);
+ rmAddGroupingConstraint(villageBID, avoidAll);
+ rmAddGroupingConstraint(villageBID, medAvoidTradeRoute);
+ rmAddGroupingConstraint(villageBID, avoidTradeRouteSocketsShort);
+
+ if (nativeSetup == 1)
+ {
+ if (cNumberNonGaiaPlayers == 2)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.235);
+ if (castleSetup == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.7);
+ else
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.92);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.31, 0.91);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.69, 0.91);
+ if (cNumberNonGaiaPlayers > 5)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.225);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.235);
+ }
+ }
+ else if (nativeSetup == 2)
+ {
+ if (cNumberNonGaiaPlayers > 5)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.228);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.238);
+ if(rmGetIsKOTH())
+ {
+ }
+ else
+ {
+ if (cNumberTeams == 2 && cNumberNonGaiaPlayers > 3)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.49);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.49);
+ }
+ }
+ if (castleSetup == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.7);
+ else
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.91);
+ }
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.70);
+
+// Player stuff
+//Prepare to place TCs
+ int TCID = rmCreateObjectDef("player TC");
+ if ( rmGetNomadStart())
+ rmAddObjectDefItem(TCID, "coveredWagon", 1, 0);
+ else
+ rmAddObjectDefItem(TCID, "townCenter", 1, 0);
+ rmSetObjectDefMinDistance(TCID, 0.0);
+ rmSetObjectDefMaxDistance(TCID, 10.0);
+ rmAddObjectDefConstraint(TCID, avoidImpassableLand);
+ rmAddObjectDefConstraint(TCID, avoidWater8);
+
+//Prepare to place Explorers, Explorer's dog, Explorer's Taun Taun, etc.
+ int startingUnits = rmCreateStartingUnitsObjectDef(4.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
+
+//Prepare to place player starting Mines
+ int playerGoldID = rmCreateObjectDef("player silver");
+ rmAddObjectDefItem(playerGoldID, "mine", 1, 0);
+ rmSetObjectDefMinDistance(playerGoldID, 14.0);
+ rmSetObjectDefMaxDistance(playerGoldID, 20.0);
+ rmAddObjectDefConstraint(playerGoldID, avoidWater8);
+ rmAddObjectDefConstraint(playerGoldID, avoidAll);
+ rmAddObjectDefConstraint(playerGoldID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerGoldID, avoidBerries);
+
+ int startSilver2ID = rmCreateObjectDef("player second silver");
+ rmAddObjectDefItem(startSilver2ID, "mine", 1, 0);
+ rmSetObjectDefMinDistance(startSilver2ID, 42.0);
+ rmSetObjectDefMaxDistance(startSilver2ID, 48.0);
+ rmAddObjectDefConstraint(startSilver2ID, avoidWater8);
+ rmAddObjectDefConstraint(startSilver2ID, avoidAll);
+ rmAddObjectDefConstraint(startSilver2ID, avoidImpassableLand);
+
+//Dock Wagon
+ int playerCrateID=rmCreateObjectDef("starting wagon");
+ rmAddObjectDefItem(playerCrateID, "ypDockWagon", 1, 0.0);
+ rmSetObjectDefMinDistance(playerCrateID, 9.0);
+ rmSetObjectDefMaxDistance(playerCrateID, 12.0);
+ rmAddObjectDefConstraint(playerCrateID, avoidAll);
+ rmAddObjectDefConstraint(playerCrateID, shortAvoidImpassableLand);
+
+//Prepare to place player starting Berries
+ int playerBerriesID=rmCreateObjectDef("player berries");
+ rmAddObjectDefItem(playerBerriesID, "berrybush", 5, 3.0);
+ rmSetObjectDefMinDistance(playerBerriesID, 13);
+ rmSetObjectDefMaxDistance(playerBerriesID, 16);
+ rmAddObjectDefConstraint(playerBerriesID, avoidAll);
+ rmAddObjectDefConstraint(playerBerriesID, avoidWater8);
+ rmAddObjectDefConstraint(playerBerriesID, shortAvoidImpassableLand);
+
+//Prepare to place player starting pop block
+ int playerPopBlock=rmCreateObjectDef("player pop block");
+ rmAddObjectDefItem(playerPopBlock, "ypPopBlock", 1, 0.0);
+ rmSetObjectDefMinDistance(playerPopBlock, 7);
+ rmSetObjectDefMaxDistance(playerPopBlock, 10);
+ rmAddObjectDefConstraint(playerPopBlock, avoidAll);
+ rmAddObjectDefConstraint(playerPopBlock, avoidImpassableLand);
+
+//Prepare to place player starting huntables
+ int playerTurkeyID=rmCreateObjectDef("player deer");
+ rmAddObjectDefItem(playerTurkeyID, huntable1, 7, 6.0);
+ rmSetObjectDefMinDistance(playerTurkeyID, 15);
+ rmSetObjectDefMaxDistance(playerTurkeyID, 20);
+ rmAddObjectDefConstraint(playerTurkeyID, avoidAll);
+ rmAddObjectDefConstraint(playerTurkeyID, avoidWater8);
+ rmAddObjectDefConstraint(playerTurkeyID, avoidImpassableLand);
+ rmSetObjectDefCreateHerd(playerTurkeyID, false);
+
+//Prepare to place player starting trees
+ int StartAreaTreeID=rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(StartAreaTreeID, startTreeType, 7, 5.0);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidAll);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidBerries);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidWater4);
+ rmSetObjectDefMinDistance(StartAreaTreeID, 22.0);
+ rmSetObjectDefMaxDistance(StartAreaTreeID, 25.0);
+
+ int waterSpawnPointID = 0;
+
+// Clear out constraints for good measure.
+ rmClearClosestPointConstraints();
+
+ for(i=1; 4)
+ numTries=12*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 6)
+ numTries=10*cNumberNonGaiaPlayers;
+ int failCount=0;
+ int failCount2=0;
+ int forestSize = rmRandInt(160,300);
+ int patchSize = 0;
+ int coverForestPatchID = 0;
+ int forest = 0;
+ for (i=0;
+
+ ui\random_map\africa\madagascar\madagascar_ss_01
+ ui\random_map\africa\madagascar\madagascar_ss_02
+ ui\random_map\africa\madagascar\madagascar_ss_03
+
+
\ No newline at end of file
diff --git a/RMM/MadagascarRegicide.xs b/RMM/MadagascarRegicide.xs
new file mode 100644
index 0000000..d5d57b7
--- /dev/null
+++ b/RMM/MadagascarRegicide.xs
@@ -0,0 +1,1064 @@
+// Korea-Regicide
+// RF_Gandalf
+// Main entry point for random map script
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+// initialize map type variables
+ string nativeCiv1 = "";
+ string nativeCiv2 = "";
+
+ string baseMix = "california_grass";
+ string baseTerrain = "water";
+ string seaType = "california coast";
+ string cliffType = "california";
+
+ string forestType = "Madagascar Forest";
+ string startTreeType = "TreeAraucania";
+
+ string mapType1 = "ceylon";
+ string mapType2 = "water";
+
+ string huntable1 = "ypMuskDeer";
+ string huntable2 = "ypIbex";
+ string fish1 = "ypFishTuna";
+ string fish2 = "ypSquid";
+ string whale1 = "HumpbackWhale";
+ string sheepType = "ypWaterBuffalo";
+
+ string patchTerrain = "california\groundforest_cal";
+ string patchType1 = "california\groundforest_cal";
+ string patchType2 = "california\groundforest_cal";
+
+ string lightingType = "yucatan";
+
+// Initialize terms
+ int classSmallIsland = 0;
+ int avoidAll = 0;
+ int avoidAllForests = 0;
+ int avoidWater4 = 0;
+ int avoidRandomBerries = 0;
+ int avoidNugget = 0;
+ int nuggetVsCoin = 0;
+ int islandConstraint = 0;
+ int avoidSmallIslands = 0;
+ int nuggetAvoidsBerries = 0;
+ int forestVsNugget = 0;
+ int forestVsCoin = 0;
+ int islandEdgeConstraint = 0;
+ int forestConstraintShort = 0;
+ int avoidImpassableLand = 0;
+ int avoidImpassableLandLong = 0;
+ int shortAvoidTradeRoute = 0;
+ int avoidTradeRouteSocketsShort = 0;
+ int avoidTradeRouteSocketsNear = 0;
+ int avoidNuggetShort = 0;
+ int avoidCoinShort = 0;
+ int playerConstraintMed = 0;
+ int numTries = 0;
+ int goldCounter = 0;
+ int berryCounter = 0;
+ int nuggetCounter = 0;
+ int forestCounter = 0;
+ int huntCounter = 0;
+ float randomIslandStuff = 0.0;
+
+ int classHuntable=0;
+ int huntableConstraint=0;
+ int classImportantItem=0;
+
+ float xLoc = 0.0;
+ float yLoc = 0.0;
+
+//places mines in the north
+void sfIslandGold (int islandID = 0, string mineType = "mine", int mineCount = 1)
+{
+ int islandGoldID = rmCreateObjectDef("random gold"+goldCounter);
+ rmAddObjectDefItem(islandGoldID, mineType, 1, 0);
+ rmSetObjectDefMinDistance(islandGoldID, 0.0);
+ rmSetObjectDefMaxDistance(islandGoldID, 6.0);
+ rmAddObjectDefConstraint(islandGoldID, avoidImpassableLandLong);
+ rmAddObjectDefConstraint(islandGoldID, avoidTradeRouteSocketsShort);
+ rmAddObjectDefConstraint(islandGoldID, shortAvoidTradeRoute);
+ rmAddObjectDefConstraint(islandGoldID, avoidAll);
+ rmAddObjectDefConstraint(islandGoldID, avoidCoinShort);
+ rmAddObjectDefConstraint(islandGoldID, avoidNuggetShort);
+ rmPlaceObjectDefInArea(islandGoldID, 0, islandID, mineCount);
+ goldCounter = goldCounter + 1;
+}
+
+//places berries in the north
+void sfIslandBerries (int islandID = 0, int berryLow = 0, int berryHigh = 0)
+{
+ int islandBerriesID=rmCreateObjectDef("random berries"+berryCounter);
+ rmAddObjectDefItem(islandBerriesID, "berrybush", rmRandInt(berryLow,berryHigh), 6.0);
+ rmSetObjectDefMinDistance(islandBerriesID, 0.0);
+ rmSetObjectDefMaxDistance(islandBerriesID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(islandBerriesID, avoidRandomBerries);
+ rmAddObjectDefConstraint(islandBerriesID, avoidImpassableLand);
+ rmAddObjectDefConstraint(islandBerriesID, avoidTradeRouteSocketsShort);
+ rmAddObjectDefConstraint(islandBerriesID, shortAvoidTradeRoute);
+ rmAddObjectDefConstraint(islandBerriesID, avoidAll);
+ rmPlaceObjectDefInArea(islandBerriesID, 0, islandID, 1);
+ berryCounter = berryCounter + 1;
+}
+
+//places treasures in the north
+void sfIslandNuggets (int islandID = 0, int nuggetLow = 0, int nuggetHigh = 0)
+{
+ int nuggetID= rmCreateObjectDef("nugget"+nuggetCounter);
+ rmAddObjectDefItem(nuggetID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(nuggetID, 0.0);
+ rmSetNuggetDifficulty(nuggetLow, nuggetHigh);
+ rmSetObjectDefMaxDistance(nuggetID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(nuggetID, nuggetAvoidsBerries);
+ rmAddObjectDefConstraint(nuggetID, avoidAll);
+ rmAddObjectDefConstraint(nuggetID, avoidImpassableLandLong);
+ rmAddObjectDefConstraint(nuggetID, forestVsNugget);
+ rmAddObjectDefConstraint(nuggetID, forestConstraintShort);
+ rmAddObjectDefConstraint(nuggetID, avoidWater4);
+ rmAddObjectDefConstraint(nuggetID, avoidTradeRouteSocketsShort);
+ rmAddObjectDefConstraint(nuggetID, shortAvoidTradeRoute);
+ rmAddObjectDefConstraint(nuggetID, islandEdgeConstraint);
+ rmPlaceObjectDefInArea(nuggetID, 0, islandID, 1);
+ nuggetCounter = nuggetCounter + 1;
+}
+
+//builds the north area
+int sfBuildBigIsland (string bigIslandName = "", float x_loc = 0.0, float y_loc = 0.0, float mainlandType = 0.0)
+{
+ int bigIslandID=rmCreateArea(bigIslandName);
+ rmSetAreaSize(bigIslandID, 0.14, 0.14);
+ rmAddAreaToClass(bigIslandID, classSmallIsland);
+ rmSetAreaMix(bigIslandID, baseMix);
+ rmSetAreaEdgeFilling(bigIslandID, 5);
+ rmSetAreaBaseHeight(bigIslandID, 1.0);
+ rmSetAreaSmoothDistance(bigIslandID, 10);
+ rmSetAreaWarnFailure(bigIslandID, false);
+ rmSetAreaCoherence(bigIslandID, 0.55);
+ rmSetAreaLocation(bigIslandID, x_loc, y_loc);
+ rmSetAreaObeyWorldCircleConstraint(bigIslandID, false);
+ rmSetAreaElevationType(bigIslandID, cElevTurbulence);
+ rmSetAreaElevationVariation(bigIslandID, 3.0);
+ rmSetAreaElevationMinFrequency(bigIslandID, 0.09);
+ rmSetAreaElevationOctaves(bigIslandID, 3);
+ rmSetAreaElevationPersistence(bigIslandID, 0.2);
+ rmSetAreaElevationNoiseBias(bigIslandID, 1);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.9, 1.0, 0.9);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.9, 0.0, 0.9);
+ rmBuildArea(bigIslandID);
+
+ int tradeRouteID = rmCreateTradeRoute();
+ int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmAddObjectDefToClass(socketID, classImportantItem);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 8.0);
+
+ rmAddTradeRouteWaypoint(tradeRouteID, .915, .95);
+ rmAddTradeRouteWaypoint(tradeRouteID, .9, .9);
+ rmAddTradeRouteWaypoint(tradeRouteID, .6, .81);
+ rmAddTradeRouteWaypoint(tradeRouteID, .55, .77);
+ rmAddTradeRouteWaypoint(tradeRouteID, .5, .77);
+ rmAddTradeRouteWaypoint(tradeRouteID, .45, .77);
+ rmAddTradeRouteWaypoint(tradeRouteID, .4, .81);
+ rmAddTradeRouteWaypoint(tradeRouteID, .1, .9);
+ rmAddTradeRouteWaypoint(tradeRouteID, .085, .95);
+ rmEchoInfo("Up top");
+
+ bool placedTradeRoute = rmBuildTradeRoute(tradeRouteID, "water");
+ if(placedTradeRoute == false)
+ rmEchoError("Failed to place trade route");
+
+ // add the sockets along the trade route.
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.3);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.7);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH())
+ {
+ int randLoc = rmRandInt(1,2);
+ float walk = 0.05;
+
+ xLoc = 0.5;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, avoidTradeRouteSocketsNear);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ sfIslandBerries(bigIslandID, 7, 9);
+ sfIslandNuggets(bigIslandID, 4, 4);
+ sfIslandNuggets(bigIslandID, 3, 3);
+
+ if(cNumberNonGaiaPlayers < 4)
+ sfIslandGold(bigIslandID, "minegold", 2);
+ else if(cNumberNonGaiaPlayers < 6)
+ sfIslandGold(bigIslandID, "minegold", 3);
+ else if (mainlandType == 1.0)
+ sfIslandGold(bigIslandID, "minegold", 4);
+
+ return(bigIslandID);
+}
+
+//main function
+void main(void)
+{
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.01);
+
+// Define Natives
+ int subCiv0=-1;
+ int subCiv1=-1;
+ int subCiv2=-1;
+
+ if (rmAllocateSubCivs(3) == true)
+ {
+ subCiv0=rmGetCivID("bhakti");
+ rmEchoInfo("subCiv0 is bhakti "+subCiv0);
+ if (subCiv0 >= 0)
+ rmSetSubCiv(0, "bhakti");
+
+ subCiv1=rmGetCivID("jesuit");
+ rmEchoInfo("subCiv1 is jesuit "+subCiv1);
+ if (subCiv1 >= 0)
+ rmSetSubCiv(1, "jesuit");
+
+ subCiv2=rmGetCivID("aztecs");
+ rmEchoInfo("subCiv2 is aztecs "+subCiv2);
+ if (subCiv2 >= 0)
+ rmSetSubCiv(2, "aztecs");
+ }
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.10);
+
+// Set size of map
+ int playerTiles=27000;
+ if (cNumberNonGaiaPlayers == 3) // If 3 players...
+ playerTiles = 25000; // ...give this many tiles per player.
+ if (cNumberNonGaiaPlayers == 4) // If 4 players...
+ playerTiles = 22000; // ...give this many tiles per player.
+ if (cNumberNonGaiaPlayers >4) // If 5 or 6 players...
+ playerTiles = 19000; // ...give this many tiles per player.
+ if (cNumberNonGaiaPlayers >6) // If more than 6 players...
+ playerTiles = 15000; // ...give this many tiles per player.
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ int longSide=1.35*size;
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, longSide);
+
+// Set up map types
+ int mapTypePicker = rmRandInt(1,2);
+ rmSetSeaLevel(1.0);
+ rmSetSeaType(seaType);
+ rmEnableLocalWater(false);
+ rmSetBaseTerrainMix(baseMix);
+ if (mapTypePicker == 1)
+ rmSetMapType(mapType1);
+ else
+ rmSetMapType(mapType2);
+ rmSetMapType("grass");
+ rmSetMapType("water");
+ rmSetLightingSet(lightingType);
+
+// Initialize map.
+ rmTerrainInitialize(baseTerrain);
+ chooseMercs();
+
+// Define some classes.
+ int classPlayer=rmDefineClass("player");
+ int classIsland=rmDefineClass("island");
+ classSmallIsland=rmDefineClass("smallIsland");
+ rmDefineClass("classForest");
+
+ rmDefineClass("natives");
+ rmDefineClass("classSocket");
+ rmDefineClass("classPatch");
+
+ classHuntable=rmDefineClass("huntableFood");
+ int classHerdable=rmDefineClass("herdableFood");
+ classImportantItem=rmDefineClass("importantItem");
+ rmDefineClass("classCliff");
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.20);
+
+// -------------Define constraints----------------------------------------
+ avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 4.0);
+ avoidAllForests=rmCreateTypeDistanceConstraint("avoid all forests", "all", 6.0);
+ avoidRandomBerries=rmCreateTypeDistanceConstraint("avoid random berries", "berrybush", 55.0);
+ nuggetAvoidsBerries=rmCreateTypeDistanceConstraint("nuggets avoid berries", "berrybush", 5.0);
+ int avoidBerries = rmCreateTypeDistanceConstraint("avoid berries", "berrybush", 8.0);
+
+ int avoidSheep=rmCreateClassDistanceConstraint("sheep avoids sheep etc", rmClassID("herdableFood"), 45.0);
+ huntableConstraint=rmCreateClassDistanceConstraint("huntable constraint", rmClassID("huntableFood"), 45.0);
+ int nuggetPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 60.0);
+
+ // Create an edge of map constraint.
+ int playerEdgeConstraint=rmCreatePieConstraint("player edge of map", 0.5, 0.5, rmXFractionToMeters(0.0), rmXFractionToMeters(0.46), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ // Player area constraint.
+ int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 25.0);
+ playerConstraintMed=rmCreateClassDistanceConstraint("stay away from players med", classPlayer, 40.0);
+ int playerConstraintFar=rmCreateClassDistanceConstraint("stay away from player Far", classPlayer, 75.0);
+ int playerConstraintNative=rmCreateClassDistanceConstraint("natives stay away from player Far", classPlayer, 65.0);
+
+ // Island Halves
+ int westHalf = rmCreateBoxConstraint("stay in west half", .35, .6, .65, .7);
+ int eastHalf = rmCreateBoxConstraint("stay in east half", .35, .3, .65, .4);
+ int middle = rmCreateBoxConstraint("stay in middle", .285, .715, .715, .285);
+ int avoidSouth = rmCreateBoxConstraint("avoid the south", 0.0, 0.05, 1.0, 1.0);
+
+ // Bonus area constraint.
+ islandConstraint=rmCreateClassDistanceConstraint("stay away from main island", classIsland, 12.0);
+ avoidSmallIslands = rmCreateClassDistanceConstraint("stay away from other bonus islands", classSmallIsland, 10.0);
+ islandEdgeConstraint = rmCreatePieConstraint("Islands away from edge of map", 0.5, 0.5, 0, rmGetMapXSize()-12, 0, 0, 0);
+
+ // Fish Constraints
+ int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", fish1, 25.0);
+ int fishVsFishTarponID=rmCreateTypeDistanceConstraint("fish v fish2", fish2, 20.0);
+ int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 8.0);
+ int whaleVsWhaleID=rmCreateTypeDistanceConstraint("whale v whale", whale1, 35.0);
+ int fishVsWhaleID=rmCreateTypeDistanceConstraint("fish v whale", whale1, 20.0);
+ int whaleLand = rmCreateTerrainDistanceConstraint("whale land", "land", true, 20.0);
+ int whaleEdgeConstraint = rmCreatePieConstraint("whale away from edge of map", 0.5, 0.5, 0, rmGetMapXSize()-18, 0, 0, 0);
+ int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0);
+
+ // resource constraints
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 35.0);
+ forestConstraintShort=rmCreateClassDistanceConstraint("vs. forest short", rmClassID("classForest"), 5.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "mine", 50.0);
+ avoidCoinShort=rmCreateTypeDistanceConstraint("avoid coin short", "minegold", 30.0);
+ int avoidGold=rmCreateTypeDistanceConstraint("avoid gold", "minegold", 55.0);
+ forestVsCoin=rmCreateTypeDistanceConstraint("forest vs. coin", "mine", 10.0);
+ nuggetVsCoin=rmCreateTypeDistanceConstraint("nugget vs. coin", "mine", 8.0);
+ int avoidRandomTurkeys=rmCreateTypeDistanceConstraint("avoid random turkeys", huntable1, 35.0);
+ avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "abstractNugget", 35.0);
+ int avoidNuggetFar=rmCreateTypeDistanceConstraint("nugget avoid nugget far", "abstractNugget", 70.0);
+ forestVsNugget=rmCreateTypeDistanceConstraint("forest vs. nugget", "abstractNugget", 10.0);
+ avoidNuggetShort=rmCreateTypeDistanceConstraint("vs. nugget short", "abstractNugget", 8.0);
+ int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);
+
+ // Avoid impassable land
+ avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 6.0);
+ avoidImpassableLandLong=rmCreateTerrainDistanceConstraint("avoid impassable land long", "Land", false, 15.0);
+ int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 2.0);
+
+ int cliffsAvoidCliffs=rmCreateClassDistanceConstraint("cliffs vs. cliffs", rmClassID("classCliff"), 30.0);
+
+ // Constraint to avoid water.
+ avoidWater4 = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 5.0);
+ int avoidWater20 = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 20.0);
+ int avoidWater8 = rmCreateTerrainDistanceConstraint("avoid water 8", "Land", false, 10.0);
+
+ int avoidImportantItem = rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 10.0);
+ int avoidImportantItemFar = rmCreateClassDistanceConstraint("secrets etc avoid each other Far", rmClassID("importantItem"), 50.0);
+
+ shortAvoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route short", 5.0);
+ int medAvoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route med", 12.0);
+ avoidTradeRouteSocketsShort=rmCreateTypeDistanceConstraint("avoid trade route sockets short", "sockettraderoute", 10.0);
+ avoidTradeRouteSocketsNear=rmCreateTypeDistanceConstraint("avoid trade route sockets near", "sockettraderoute", 6.0);
+
+ // Flag constraints for HC spawn point
+ int flagEdgeConstraint = rmCreatePieConstraint("flags away from edge of map", 0.5, 0.5, 0, rmGetMapXSize()-15, 0, 0, 0);
+ int flagLand = rmCreateTerrainDistanceConstraint("flag vs land", "land", true, 18.0);
+ int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 22);
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.30);
+
+// Make one big island.
+ int bigIslandID=rmCreateArea("big peninsula");
+ rmSetAreaSize(bigIslandID, 0.46, 0.46);
+ rmSetAreaCoherence(bigIslandID, 0.76);
+ rmSetAreaBaseHeight(bigIslandID, 1.5);
+ rmSetAreaSmoothDistance(bigIslandID, 18);
+ rmSetAreaMix(bigIslandID, baseMix);
+ rmAddAreaToClass(bigIslandID, classIsland);
+ rmSetAreaObeyWorldCircleConstraint(bigIslandID, false);
+ rmSetAreaElevationType(bigIslandID, cElevTurbulence);
+ rmSetAreaElevationVariation(bigIslandID, 3.0);
+ rmSetAreaElevationMinFrequency(bigIslandID, 0.12);
+ rmSetAreaElevationOctaves(bigIslandID, 3);
+ rmSetAreaElevationPersistence(bigIslandID, 0.15);
+ rmSetAreaElevationNoiseBias(bigIslandID, 1);
+ rmSetAreaEdgeFilling(bigIslandID, 5);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.18, 0.5, 1.0);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.0, 0.94, 1.0, 0.94);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 1.0, 0.5, 0.19);
+
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.75, 0.0, 0.9);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.5, 0.75, 1.0, 0.9);
+
+ rmAddAreaInfluenceSegment(bigIslandID, 0.305, 1.0, 0.305, 0.19);
+ rmAddAreaInfluenceSegment(bigIslandID, 0.695, 1.0, 0.695, 0.19);
+
+ rmSetAreaLocation(bigIslandID, 0.5, 0.6);
+ rmSetAreaWarnFailure(bigIslandID, false);
+ rmBuildArea(bigIslandID);
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.40);
+
+// Set up player areas and starting locs
+
+ float teamStartLoc = rmRandFloat(0.0, 1.0);
+
+ if (cNumberTeams == 2)
+ {
+ if (cNumberNonGaiaPlayers == 2)
+ {
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(0);
+ else
+ rmSetPlacementTeam(1);
+
+ rmPlacePlayersLine(0.67, 0.5, 0.67, 0.51, 0.1, 0);
+
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(1);
+ else
+ rmSetPlacementTeam(0);
+
+ rmPlacePlayersLine(0.33, 0.5, 0.33, 0.51, 0.1, 0);
+ }
+ else if (cNumberNonGaiaPlayers < 5)
+ {
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(0);
+ else
+ rmSetPlacementTeam(1);
+
+ rmPlacePlayersLine(0.67, 0.4, 0.67, 0.6, 0.1, 0);
+
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(1);
+ else
+ rmSetPlacementTeam(0);
+
+ rmPlacePlayersLine(0.33, 0.6, 0.33, 0.4, 0.1, 0);
+ }
+ else
+ {
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(0);
+ else
+ rmSetPlacementTeam(1);
+
+ rmPlacePlayersLine(0.67, 0.35, 0.67, 0.65, 0.1, 0);
+
+ if (teamStartLoc > 0.5)
+ rmSetPlacementTeam(1);
+ else
+ rmSetPlacementTeam(0);
+
+ rmPlacePlayersLine(0.33, 0.65, 0.33, 0.35, 0.1, 0);
+ }
+ }
+ else // otherwise FFA
+ {
+ if (cNumberNonGaiaPlayers < 5)
+ rmSetPlayerPlacementArea(0.32, 0.33, 0.68, 0.67);
+ else if (cNumberNonGaiaPlayers < 7)
+ rmSetPlayerPlacementArea(0.31, 0.31, 0.69, 0.69);
+ else
+ rmSetPlayerPlacementArea(0.3, 0.29, 0.7, 0.71);
+ rmPlacePlayersSquare(0.49, 0.0, 0.0);
+ }
+
+ // Create the Player's area.
+ float playerFraction=rmAreaTilesToFraction(100);
+ for(i=1; 2)
+ castleSetup = 3;
+
+ if (castleSetup == 1)
+ yLoc = 0.93;
+ else if (castleSetup == 2)
+ yLoc = 0.72;
+ else
+ yLoc = 0.5;
+
+ int bonusIslandID6 = sfBuildBigIsland("bonus island 6", 0.5, 0.92, 1.0);
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.60);
+
+// Natives
+ int nativeType = rmRandInt(1,3);
+ int villageType = rmRandInt(1,5);
+ int nativeSetup = rmRandInt(1,2);
+
+ int villageAID = -1; // SOUTHERN VILLAGE
+ if (nativeType == 1)
+ villageAID = rmCreateGrouping("village A", "native bhakti village "+villageType);
+ else
+ villageAID = rmCreateGrouping("village A", "native jesuit mission cj 0"+villageType);
+ rmAddGroupingToClass(villageAID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageAID, 0.0);
+ rmSetGroupingMaxDistance(villageAID, 15.0);
+ rmAddGroupingConstraint(villageAID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageAID, avoidWater8);
+ rmAddGroupingConstraint(villageAID, avoidImportantItemFar);
+ rmAddGroupingConstraint(villageAID, playerConstraintNative);
+ rmAddGroupingConstraint(villageAID, avoidAll);
+ rmAddGroupingConstraint(villageAID, medAvoidTradeRoute);
+ rmAddGroupingConstraint(villageAID, avoidTradeRouteSocketsShort);
+
+ int villageBID = -1; // NORTHERN VILLAGE
+ nativeType = rmRandInt(1,3);
+ villageType = rmRandInt(1,5);
+ if (nativeType == 1)
+ villageBID = rmCreateGrouping("village B", "native Aztec village "+villageType);
+ else
+ villageBID = rmCreateGrouping("village B", "native bhakti village "+villageType);
+ rmAddGroupingToClass(villageBID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageBID, 0.0);
+ rmSetGroupingMaxDistance(villageBID, 20.0);
+ rmAddGroupingConstraint(villageBID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageBID, avoidWater8);
+ rmAddGroupingConstraint(villageBID, avoidImportantItemFar);
+ rmAddGroupingConstraint(villageBID, playerConstraintNative);
+ rmAddGroupingConstraint(villageBID, avoidAll);
+ rmAddGroupingConstraint(villageBID, medAvoidTradeRoute);
+ rmAddGroupingConstraint(villageBID, avoidTradeRouteSocketsShort);
+
+ if (nativeSetup == 1)
+ {
+ if (cNumberNonGaiaPlayers == 2)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.23);
+ if (castleSetup == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.72);
+ else
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.93);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.22, 0.9);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.78, 0.9);
+ if (cNumberNonGaiaPlayers > 5)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.215);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.23);
+ }
+ }
+ else if (nativeSetup == 2)
+ {
+ if (cNumberNonGaiaPlayers > 5)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.215);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.23);
+ if(rmGetIsKOTH())
+ {
+ }
+ else
+ {
+ if (cNumberTeams == 2)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.49);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.49);
+ }
+ }
+ if (castleSetup == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.72);
+ else
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.93);
+ }
+
+// --------------- Make load bar move. ----------------------------------------------------------------------------
+ rmSetStatusText("",0.70);
+
+// Player stuff
+//Prepare to place TCs
+ int TCID = rmCreateObjectDef("player TC");
+ if ( rmGetNomadStart())
+ rmAddObjectDefItem(TCID, "coveredWagon", 1, 0);
+ else
+ rmAddObjectDefItem(TCID, "townCenter", 1, 0);
+ rmSetObjectDefMinDistance(TCID, 0.0);
+ rmSetObjectDefMaxDistance(TCID, 10.0);
+ rmAddObjectDefConstraint(TCID, avoidImpassableLand);
+ rmAddObjectDefConstraint(TCID, avoidWater8);
+
+//Prepare to place Explorers, Explorer's dog, Explorer's Taun Taun, etc.
+ int startingUnits = rmCreateStartingUnitsObjectDef(4.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
+
+//Prepare to place player starting Mines
+ int playerGoldID = rmCreateObjectDef("player silver");
+ rmAddObjectDefItem(playerGoldID, "mine", 1, 0);
+ rmSetObjectDefMinDistance(playerGoldID, 14.0);
+ rmSetObjectDefMaxDistance(playerGoldID, 20.0);
+ rmAddObjectDefConstraint(playerGoldID, avoidAll);
+ rmAddObjectDefConstraint(playerGoldID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerGoldID, avoidBerries);
+
+ int startSilver2ID = rmCreateObjectDef("player second silver");
+ rmAddObjectDefItem(startSilver2ID, "mine", 1, 0);
+ rmSetObjectDefMinDistance(startSilver2ID, 42.0);
+ rmSetObjectDefMaxDistance(startSilver2ID, 48.0);
+ rmAddObjectDefConstraint(startSilver2ID, avoidAll);
+ rmAddObjectDefConstraint(startSilver2ID, avoidImpassableLand);
+
+//Dock Wagon
+ int playerCrateID=rmCreateObjectDef("starting wagon");
+ rmAddObjectDefItem(playerCrateID, "ypDockWagon", 1, 0.0);
+ rmSetObjectDefMinDistance(playerCrateID, 9.0);
+ rmSetObjectDefMaxDistance(playerCrateID, 12.0);
+ rmAddObjectDefConstraint(playerCrateID, avoidAll);
+ rmAddObjectDefConstraint(playerCrateID, shortAvoidImpassableLand);
+
+//Prepare to place player starting Berries
+ int playerBerriesID=rmCreateObjectDef("player berries");
+ rmAddObjectDefItem(playerBerriesID, "berrybush", 5, 3.0);
+ rmSetObjectDefMinDistance(playerBerriesID, 13);
+ rmSetObjectDefMaxDistance(playerBerriesID, 16);
+ rmAddObjectDefConstraint(playerBerriesID, avoidAll);
+ rmAddObjectDefConstraint(playerBerriesID, shortAvoidImpassableLand);
+
+//Prepare to place player starting pop block
+ int playerPopBlock=rmCreateObjectDef("player pop block");
+ rmAddObjectDefItem(playerPopBlock, "ypPopBlock", 1, 0.0);
+ rmSetObjectDefMinDistance(playerPopBlock, 7);
+ rmSetObjectDefMaxDistance(playerPopBlock, 10);
+ rmAddObjectDefConstraint(playerPopBlock, avoidAll);
+ rmAddObjectDefConstraint(playerPopBlock, avoidImpassableLand);
+
+//Prepare to place player starting huntables
+ int playerTurkeyID=rmCreateObjectDef("player deer");
+ rmAddObjectDefItem(playerTurkeyID, huntable1, 7, 6.0);
+ rmSetObjectDefMinDistance(playerTurkeyID, 15);
+ rmSetObjectDefMaxDistance(playerTurkeyID, 20);
+ rmAddObjectDefConstraint(playerTurkeyID, avoidAll);
+ rmAddObjectDefConstraint(playerTurkeyID, avoidImpassableLand);
+ rmSetObjectDefCreateHerd(playerTurkeyID, false);
+
+//Prepare to place player starting trees
+ int StartAreaTreeID=rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(StartAreaTreeID, startTreeType, 7, 5.0);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidAll);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidBerries);
+ rmSetObjectDefMinDistance(StartAreaTreeID, 22.0);
+ rmSetObjectDefMaxDistance(StartAreaTreeID, 25.0);
+
+// Regicide objects
+ int playerCastle=rmCreateObjectDef("Castle");
+ rmAddObjectDefItem(playerCastle, "ypCastleRegicide", 1, 0.0);
+ rmAddObjectDefConstraint(playerCastle, avoidAll);
+ rmAddObjectDefConstraint(playerCastle, avoidImpassableLand);
+ rmSetObjectDefMinDistance(playerCastle, 17.0);
+ rmSetObjectDefMaxDistance(playerCastle, 21.0);
+
+ int playerWalls = rmCreateGrouping("regicide walls", "regicide_walls");
+ rmAddGroupingToClass(playerWalls, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(playerWalls, 0.0);
+ rmSetGroupingMaxDistance(playerWalls, 4.0);
+ rmAddGroupingConstraint(playerWalls, avoidWater8);
+
+ int playerDaimyo=rmCreateObjectDef("Daimyo"+i);
+ rmAddObjectDefItem(playerDaimyo, "ypDaimyoRegicide", 1, 0.0);
+ rmAddObjectDefConstraint(playerDaimyo, avoidAll);
+ rmSetObjectDefMinDistance(playerDaimyo, 7.0);
+ rmSetObjectDefMaxDistance(playerDaimyo, 10.0);
+
+ int waterSpawnPointID = 0;
+
+// Clear out constraints for good measure.
+ rmClearClosestPointConstraints();
+
+ for(i=1;
+
+ ui\random_map\africa\nile\nile_ss_01
+ ui\random_map\africa\nile\nile_ss_02
+ ui\random_map\africa\nile\nile_ss_03
+
\ No newline at end of file
diff --git a/RMM/Nile River.xs b/RMM/Nile River.xs
new file mode 100644
index 0000000..5612ac4
--- /dev/null
+++ b/RMM/Nile River.xs
@@ -0,0 +1,389 @@
+ /* Durokan's fertilebelt - Feb 21 2016 1.0 -- -- */
+ include "mercenaries.xs";
+ include "ypAsianInclude.xs";
+ include "ypKOTHInclude.xs";
+
+ void main(void) {
+
+ // These status text lines are used to manually animate the map generation progress bar
+ rmSetStatusText("",0.01);
+
+ int playerTiles = 18000;
+ if (cNumberNonGaiaPlayers >4)
+ playerTiles = 16000;
+ if (cNumberNonGaiaPlayers >6)
+ playerTiles = 14000;
+
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, size);
+
+ rmSetMapType("land");
+ rmSetMapType("grass");
+ rmSetMapType("deccan");
+ rmTerrainInitialize("deccan\ground_grass3_deccan");
+ rmSetMapElevationParameters(cElevTurbulence, 0.06, 1, 0.4, 3.0);
+ rmSetMapElevationHeightBlend(0.6);
+ rmSetLightingSet("texas");
+
+
+ // Init map.
+ rmTerrainInitialize("deccan\ground_grass3_deccan", -2);
+
+ //amazon\river1_am amazon\river3_am
+ rmDefineClass("classForest");
+
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.49), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
+ int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+ int forestConstraintHunt=rmCreateClassDistanceConstraint("river hunts vs. forest", rmClassID("classForest"), 15.0);
+ int avoidHunt=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 50.0);
+ int avoidHuntShort=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 25.0);
+ int avoidHuntSparse=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 55.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+ int avoidCoinMed=rmCreateTypeDistanceConstraint("avoid coin medium", "Mine", 60.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 9.0);
+ int avoidWaterReallyShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 1.0);
+ int AvoidWaterShort2 = rmCreateTerrainDistanceConstraint("avoid water short 2", "Land", false, 15.0);
+ int AvoidWaterLong = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 22.0);
+ int dryAF = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 100.0);
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 6);
+ int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 5.0);
+ int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+ int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+ int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+ int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 18.0);
+ int avoidTownCenterMore=rmCreateTypeDistanceConstraint("avoid Town Center more", "townCenter", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 68.0);
+ int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+ int AvoidHerdables = rmCreateTerrainDistanceConstraint("avoid herds by something", "herdables", false, 45.0);
+ int avoidRush=rmCreateTypeDistanceConstraint("avoid rush by a lot", "AbstractRush", 75.0);
+ int riverGrass = rmCreateTerrainMaxDistanceConstraint("riverGrass stays near the water", "land", false, 24.0);
+ int riverHunt = rmCreateTerrainMaxDistanceConstraint("hunts stay near the water", "land", false, 12.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 7.0);
+ int circleConstraint2=rmCreatePieConstraint("circle Constraint2", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int classPatch = rmDefineClass("patch");
+
+ rmSetStatusText("",0.10);
+
+ chooseMercs();
+
+ // Player placing
+
+ int teamZeroCount = rmGetNumberPlayersOnTeam(0);
+ int teamOneCount = rmGetNumberPlayersOnTeam(1);
+
+
+ if (cNumberTeams == 2) {
+
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.73, 0.83);
+ rmPlacePlayersCircular(0.39, 0.39, .02);
+
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(.43, .53);
+ rmPlacePlayersCircular(0.39, 0.39, .02);
+
+ }
+
+ // FFA
+ else {
+ rmSetPlacementSection(0.35, 0.9);
+ rmPlacePlayersCircular(0.4, 0.4, 0.02);
+ }
+
+ // Text
+ rmSetStatusText("",0.20);
+
+ int rivershallowsize = 12;
+ if (cNumberNonGaiaPlayers > 2){
+ rivershallowsize = 16;
+ }
+ if (cNumberNonGaiaPlayers > 4){
+ rivershallowsize = 20;
+ }
+ if (cNumberNonGaiaPlayers > 6){
+ rivershallowsize = 24;
+ }
+
+ int halfShallowSize = rivershallowsize/2;
+ int originalShallowSize = rivershallowsize;
+
+ int ambiental = rmCreateObjectDef("ambiental");
+ rmAddObjectDefItem(ambiental, "UnderbrushDeccan", 1, 5.0);
+ rmSetObjectDefMinDistance(ambiental, 0);
+ rmSetObjectDefMaxDistance(ambiental, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(ambiental, avoidTownCenterSmall);
+ rmPlaceObjectDefAtLoc(ambiental, 0, 0.5, 0.5, 100*cNumberNonGaiaPlayers);
+
+ int middleRiver = rmRiverCreate(-1, "Deccan Plateau River", 5, 15, 6, 9);
+ rmRiverAddWaypoint(middleRiver, 0.0, 0.0);
+ rmRiverAddWaypoint(middleRiver, .6, .6);
+ rmRiverSetShallowRadius(middleRiver, 32);
+ rmRiverAddShallow(middleRiver, rmRandFloat(0.16, 0.16));
+ rmRiverAddShallow(middleRiver, rmRandFloat(0.3, 0.3));
+ rmRiverSetBankNoiseParams(middleRiver, 0.07, 2, 1.5, 10.0, 0.667, 2.0);
+ rmRiverBuild(middleRiver);
+
+ int topRiver = rmRiverCreate(-1, "Deccan Plateau River", 5, 15, 6, 9);
+ rmRiverAddWaypoint(topRiver, 1.0, 0.75);
+ rmRiverAddWaypoint(topRiver, .6, .6);
+ rmRiverAddWaypoint(topRiver, .75, 1.0);
+ rmRiverSetShallowRadius(topRiver, halfShallowSize);
+ rmRiverAddShallow(topRiver, rmRandFloat(0.0, 0.1));
+ rmRiverAddShallow(topRiver, rmRandFloat(0.15, 0.25));
+ rmRiverAddShallow(topRiver, rmRandFloat(0.3, 0.45));
+ rmRiverAddShallow(topRiver, rmRandFloat(0.5, 0.5));
+ rmRiverAddShallow(topRiver, rmRandFloat(0.75, 0.85));
+ rmRiverAddShallow(topRiver, rmRandFloat(0.9, 1.00));
+ rmRiverSetShallowRadius(topRiver, rivershallowsize);
+ rmRiverAddShallow(topRiver, rmRandFloat(0.55, 0.7));
+ rmRiverSetShallowRadius(topRiver, halfShallowSize);
+ rmRiverSetBankNoiseParams(topRiver, 0.07, 2, 1.5, 10.0, 0.667, 2.0);
+ rmRiverBuild(topRiver);
+
+ int botRiver = rmRiverCreate(-1, "Deccan Plateau River", 5, 15, 6, 9);
+ rmRiverAddWaypoint(botRiver, 1.0, 0.55);
+ rmRiverAddWaypoint(botRiver, .4, .4);
+ rmRiverAddWaypoint(botRiver, .55, 1.0);
+ rmRiverSetShallowRadius(botRiver, rivershallowsize);
+ rmRiverAddShallow(botRiver, rmRandFloat(0.0, 0.1));
+ rmRiverAddShallow(botRiver, rmRandFloat(0.15, 0.25));
+ rmRiverAddShallow(botRiver, rmRandFloat(0.3, 0.45));
+ rmRiverAddShallow(botRiver, rmRandFloat(0.5, 0.5));
+ rmRiverAddShallow(botRiver, rmRandFloat(0.75, 0.85));
+ rmRiverAddShallow(botRiver, rmRandFloat(0.9, 1.00));
+ rmRiverSetShallowRadius(botRiver, halfShallowSize);
+ rmRiverAddShallow(botRiver, rmRandFloat(0.55, 0.7));
+ rmRiverSetShallowRadius(botRiver, rivershallowsize);
+ rmRiverSetBankNoiseParams(botRiver, 0.07, 2, 1.5, 10.0, 0.667, 2.0);
+ rmRiverBuild(botRiver);
+
+ // Text
+ rmSetStatusText("",0.40);
+
+ for (i=0; < cNumberNonGaiaPlayers*60){
+ int patchID = rmCreateArea("the redder stuff"+i);
+ rmSetAreaWarnFailure(patchID, false);
+ rmSetAreaSize(patchID, rmAreaTilesToFraction(30), rmAreaTilesToFraction(51));
+ rmAddAreaTerrainReplacement(patchID, "deccan\ground_grass3_deccan", "deccan\ground_dirt3_deccan");
+ rmPaintAreaTerrain(patchID);
+ rmAddAreaToClass(patchID, rmClassID("patch"));
+ rmSetAreaSmoothDistance(patchID, 1.0);
+ rmAddAreaConstraint(patchID, circleConstraint2);
+ rmBuildArea(patchID);
+ }
+
+
+ // Paint some grass near the river
+ int grassRiver=rmCreateArea("river grass");
+ rmSetAreaSize(grassRiver, 1.0, 1.0);
+ rmSetAreaLocation(grassRiver, .5, .5);
+ rmSetAreaWarnFailure(grassRiver, false);
+ rmSetAreaSmoothDistance(grassRiver, 10);
+ rmSetAreaCoherence(grassRiver, 1.0);
+ rmSetAreaTerrainType(grassRiver, "deccan\ground_grass2_deccan");
+ rmAddAreaConstraint(grassRiver, riverGrass);
+ rmBuildArea(grassRiver);
+
+ /*
+ // Paint some grass near the river
+ int grassPatchBot=rmCreateArea("bot river grass");
+ rmSetAreaSize(grassPatchBot, .5, .5);
+ rmSetAreaLocation(grassPatchBot, .3, .5);
+ rmSetAreaWarnFailure(grassPatchBot, false);
+ rmSetAreaSmoothDistance(grassPatchBot, 10);
+ rmSetAreaCoherence(grassPatchBot, 1.0);
+ rmSetAreaMix(grassPatchBot, "deccan_grass_b");
+ rmAddAreaConstraint(grassPatchBot, riverGrass);
+ rmBuildArea(grassPatchBot);*/
+
+ int playerStart = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(playerStart, 7.0);
+ rmSetObjectDefMaxDistance(playerStart, 12.0);
+ rmAddObjectDefConstraint(playerStart, avoidAll);
+
+ int goldID = rmCreateObjectDef("starting gold");
+ rmAddObjectDefItem(goldID, "minegold", 1, 8.0);
+ rmSetObjectDefMinDistance(goldID, 15.0);
+ rmSetObjectDefMaxDistance(goldID, 15.0);
+
+ int berryID = rmCreateObjectDef("starting berries");
+ rmAddObjectDefItem(berryID, "BerryBush", 4, 6.0);
+ rmSetObjectDefMinDistance(berryID, 8.0);
+ rmSetObjectDefMaxDistance(berryID, 12.0);
+ rmAddObjectDefConstraint(berryID, avoidCoin);
+
+ rmSetStatusText("",0.50);
+
+ int treeID = rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(treeID, "ypTreeSaxaul", rmRandInt(6,9), 10.0);
+ rmAddObjectDefItem(treeID, "UnderbrushForest", rmRandInt(8,10), 12.0);
+ rmSetObjectDefMinDistance(treeID, 12.0);
+ rmSetObjectDefMaxDistance(treeID, 18.0);
+ rmAddObjectDefConstraint(treeID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(treeID, avoidCoin);
+
+ int foodID = rmCreateObjectDef("starting hunt");
+ rmAddObjectDefItem(foodID, "zebra", 3, 8.0);
+ rmSetObjectDefMinDistance(foodID, 10.0);
+ rmSetObjectDefMaxDistance(foodID, 10.0);
+ rmSetObjectDefCreateHerd(foodID, true);
+
+ int foodID2 = rmCreateObjectDef("starting hunt 2");
+ rmAddObjectDefItem(foodID2, "zebra", 3, 8.0);
+ rmSetObjectDefMinDistance(foodID2, 40.0);
+ rmSetObjectDefMaxDistance(foodID2, 40.0);
+ rmSetObjectDefCreateHerd(foodID2, true);
+
+ for(i=1; < cNumberNonGaiaPlayers + 1) {
+ int id=rmCreateArea("Player"+i);
+ rmSetPlayerArea(i, id);
+ int startID = rmCreateObjectDef("object"+i);
+ rmAddObjectDefItem(startID, "TownCenter", 1, 5.0);
+ rmPlaceObjectDefAtLoc(startID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ rmPlaceObjectDefAtLoc(goldID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ rmPlaceObjectDefAtLoc(berryID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ rmPlaceObjectDefAtLoc(treeID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ rmPlaceObjectDefAtLoc(foodID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ rmPlaceObjectDefAtLoc(foodID2, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ rmPlaceObjectDefAtLoc(playerStart, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ }
+
+ // Text
+ rmSetStatusText("",0.60);
+
+ int wetHunts = rmCreateObjectDef("wetHunts");
+ rmAddObjectDefItem(wetHunts, "ypWildElephant", rmRandInt(2,2), 10.0);
+ rmSetObjectDefCreateHerd(wetHunts, true);
+ rmSetObjectDefMinDistance(wetHunts, 0);
+ rmSetObjectDefMaxDistance(wetHunts, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(wetHunts, avoidHuntShort);
+ rmAddObjectDefConstraint(wetHunts, riverHunt);
+ rmPlaceObjectDefAtLoc(wetHunts, 0, 0.5, 0.5, 6*cNumberNonGaiaPlayers);
+
+ int wetberries = rmCreateObjectDef("wetberries");
+ rmAddObjectDefItem(wetberries, "BerryBush", rmRandInt(2,2), 10.0);
+ rmSetObjectDefCreateHerd(wetberries, true);
+ rmSetObjectDefMinDistance(wetberries, 0);
+ rmSetObjectDefMaxDistance(wetberries, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(wetberries, avoidHuntShort);
+ rmAddObjectDefConstraint(wetberries, riverHunt);
+ rmPlaceObjectDefAtLoc(wetberries, 0, 0.5, 0.5, 8*cNumberNonGaiaPlayers);
+
+ int rightmines = rmCreateObjectDef("right gold mines");
+ rmAddObjectDefItem(rightmines, "mine", 1, 1.0);
+ rmSetObjectDefMinDistance(rightmines, 0.0);
+ rmSetObjectDefMaxDistance(rightmines, rmXFractionToMeters(0.3));
+ rmAddObjectDefConstraint(rightmines, avoidCoinMed);
+ rmAddObjectDefConstraint(rightmines, avoidTownCenterMore);
+ rmAddObjectDefConstraint(rightmines, AvoidWaterShort2);
+ rmAddObjectDefConstraint(rightmines, forestConstraintShort);
+ rmAddObjectDefConstraint(rightmines, circleConstraint);
+ rmAddObjectDefConstraint(rightmines, dryAF);
+ rmPlaceObjectDefAtLoc(rightmines, 0, 0.5, .0, 1*cNumberNonGaiaPlayers + 1);
+
+ int leftmines = rmCreateObjectDef("left gold mines");
+ rmAddObjectDefItem(leftmines, "mine", 1, 1.0);
+ rmSetObjectDefMinDistance(leftmines, 0.0);
+ rmSetObjectDefMaxDistance(leftmines, rmXFractionToMeters(0.3));
+ rmAddObjectDefConstraint(leftmines, avoidCoinMed);
+ rmAddObjectDefConstraint(leftmines, avoidTownCenterMore);
+ rmAddObjectDefConstraint(leftmines, AvoidWaterShort2);
+ rmAddObjectDefConstraint(leftmines, forestConstraintShort);
+ rmAddObjectDefConstraint(leftmines, circleConstraint);
+ rmAddObjectDefConstraint(leftmines, dryAF);
+ rmPlaceObjectDefAtLoc(leftmines, 0, 0.0, 0.5, 1*cNumberNonGaiaPlayers + 1);
+
+ int nuggetID= rmCreateObjectDef("nugget");
+ rmAddObjectDefItem(nuggetID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(nuggetID, 0.0);
+ rmSetObjectDefMaxDistance(nuggetID, rmXFractionToMeters(0.35));
+ rmAddObjectDefConstraint(nuggetID, avoidNugget);
+ rmSetNuggetDifficulty(2, 3);
+ rmAddObjectDefConstraint(nuggetID, riverHunt);
+ rmPlaceObjectDefAtLoc(nuggetID, 0, 0.7, 0.7, 2*(cNumberNonGaiaPlayers + 3));
+
+ int treasureID= rmCreateObjectDef("treasure");
+ rmAddObjectDefItem(treasureID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(treasureID, 0.0);
+ rmSetObjectDefMaxDistance(treasureID, rmXFractionToMeters(0.35));
+ rmAddObjectDefConstraint(treasureID, avoidNugget);
+ rmAddObjectDefConstraint(treasureID, AvoidWaterShort2);
+ rmSetNuggetDifficulty(1, 2);
+ rmPlaceObjectDefAtLoc(treasureID, 0, 0.7, 0.7, 2*(cNumberNonGaiaPlayers + 3));
+
+ for (j=0; < (12)) {
+ int wetForest=rmCreateObjectDef("wet trees"+j);
+ rmAddObjectDefItem(wetForest, "TreeAmazon", rmRandInt(2,3), rmRandFloat(8.0,16.0));
+ rmAddObjectDefToClass(wetForest, rmClassID("classForest"));
+ rmSetObjectDefMinDistance(wetForest, 0);
+ rmSetObjectDefMaxDistance(wetForest, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(wetForest, forestConstraintShort);
+ rmAddObjectDefConstraint(wetForest, riverHunt);
+ rmAddObjectDefConstraint(wetForest, avoidWaterShort);
+
+ rmPlaceObjectDefAtLoc(wetForest, 0, .5, 0.5, 7*cNumberNonGaiaPlayers);
+ }
+
+ rmSetStatusText("",0.70);
+
+
+ for (j=0; < (12)) {
+ int dryForest=rmCreateObjectDef("dry Forest"+j);
+ rmAddObjectDefItem(dryForest, "ypTreeSaxaul", rmRandInt(5,9), rmRandFloat(8.0,16.0));
+ rmAddObjectDefToClass(dryForest, rmClassID("classForest"));
+ rmSetObjectDefMinDistance(dryForest, 0);
+ rmSetObjectDefMaxDistance(dryForest, rmXFractionToMeters(0.45));
+ rmAddObjectDefConstraint(dryForest, avoidTradeRoute);
+ rmAddObjectDefConstraint(dryForest, avoidSocket);
+ rmAddObjectDefConstraint(dryForest, circleConstraint);
+ rmAddObjectDefConstraint(dryForest, forestConstraint);
+ rmAddObjectDefConstraint(dryForest, avoidTownCenter);
+ rmAddObjectDefConstraint(dryForest, AvoidWaterShort2);
+ rmAddObjectDefConstraint(dryForest, dryAF);
+ rmPlaceObjectDefAtLoc(dryForest, 0, 0.5, 0.5, 5*cNumberNonGaiaPlayers);
+ }
+
+ // Text
+ rmSetStatusText("",0.80);
+
+ /*
+ int dryHuntsL = rmCreateObjectDef("dryHuntsL");
+ rmAddObjectDefItem(dryHuntsL, "ypWildElephant", rmRandInt(1,1), 10.0);
+ rmSetObjectDefCreateHerd(dryHuntsL, true);
+ rmSetObjectDefMinDistance(dryHuntsL, 0);
+ rmSetObjectDefMaxDistance(dryHuntsL, rmXFractionToMeters(0.4));
+ rmAddObjectDefConstraint(dryHuntsL, avoidHuntSparse);
+ rmAddObjectDefConstraint(dryHuntsL, dryAF);
+ rmPlaceObjectDefAtLoc(dryHuntsL, 0, 0.0, 0.5, 2*cNumberNonGaiaPlayers);
+
+ int dryHuntsR = rmCreateObjectDef("dryHuntsR");
+ rmAddObjectDefItem(dryHuntsR, "ypWildElephant", rmRandInt(1,1), 10.0);
+ rmSetObjectDefCreateHerd(dryHuntsR, true);
+ rmSetObjectDefMinDistance(dryHuntsR, 0);
+ rmSetObjectDefMaxDistance(dryHuntsR, rmXFractionToMeters(0.4));
+ rmAddObjectDefConstraint(dryHuntsR, avoidHuntSparse);
+ rmAddObjectDefConstraint(dryHuntsR, dryAF);
+ rmPlaceObjectDefAtLoc(dryHuntsR, 0, 0.0, 0.5, 2*cNumberNonGaiaPlayers);
+ */
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH()) {
+
+ int randLoc = rmRandInt(1,2);
+ float xLoc = 0.7;
+ float yLoc = 0.7;
+ float walk = 0.3;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, 0);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ // Text
+ rmSetStatusText("",1.0);
+}
+
diff --git a/RMM/Orinoco.xs b/RMM/Orinoco.xs
index ba2d6fe..b554546 100644
--- a/RMM/Orinoco.xs
+++ b/RMM/Orinoco.xs
@@ -269,11 +269,17 @@ void main(void)
float topOrBottom = rmRandFloat(0.0, 1.0);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
if(cNumberTeams > 2) //ffa
{
rmSetPlacementSection(0.10, 0.90);
rmSetTeamSpacingModifier(0.75);
rmPlacePlayersCircular(0.4, 0.4, 0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
}
else
{
@@ -284,6 +290,9 @@ void main(void)
rmSetPlacementSection(0.95, 0.25);
rmSetTeamSpacingModifier(.40);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
}
else
{
@@ -291,6 +300,9 @@ void main(void)
rmSetPlacementSection(0.5, 0.75);
rmSetTeamSpacingModifier(0.40);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
}
}
@@ -776,9 +788,9 @@ void main(void)
// Forest areas
if (cNumberNonGaiaPlayers > 4)
- numTries=2*cNumberNonGaiaPlayers;
- else
numTries=3*cNumberNonGaiaPlayers;
+ else
+ numTries=4*cNumberNonGaiaPlayers;
failCount=0;
for (i=0; 4)
- numTries=2*cNumberNonGaiaPlayers;
+ numTries=3*cNumberNonGaiaPlayers;
else
- numTries=3*cNumberNonGaiaPlayers;
+ numTries=4*cNumberNonGaiaPlayers;
failCount=0;
for (i=0; 4)
- playerTiles = 8000;
+ playerTiles = 10000;
if (cNumberNonGaiaPlayers >6)
- playerTiles = 6000;
+ playerTiles = 8000;
// size reset for Regicide
int size=2.1*sqrt(cNumberNonGaiaPlayers*playerTiles);
int longSide=1.4*size; // 'Longside' is used to make the map rectangular
@@ -531,7 +531,7 @@ void main(void)
rmAddObjectDefConstraint(startSilver2ID, centerConstraint);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
//rmAddObjectDefConstraint(startingUnits, avoidResource);
@@ -749,16 +749,6 @@ void main(void)
// Text
rmSetStatusText("",0.35);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// ********** KOTH game mode **********
if(rmGetIsKOTH())
@@ -902,7 +892,7 @@ void main(void)
rmSetStatusText("",0.60);
// Forests
- int numTries=10*cNumberNonGaiaPlayers;
+ int numTries=11*cNumberNonGaiaPlayers;
int failCount=0;
for (i=0;
+
+ ui\random_map\africa\rockies\rockies_ss_01
+ ui\random_map\africa\rockies\rockies_ss_03
+ ui\random_map\africa\rockies\rockies_ss_03
+
+
+
\ No newline at end of file
diff --git a/RMM/RockiesLower.xs b/RMM/RockiesLower.xs
new file mode 100644
index 0000000..5800dd6
--- /dev/null
+++ b/RMM/RockiesLower.xs
@@ -0,0 +1,1290 @@
+// ESOC CASCADE RANGE (1v1, TEAM, FFA)
+// designed by Garja
+
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+// 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 *****************************************
+
+ // Picks the map size
+ int playerTiles=11500; //12000
+ if (cNumberNonGaiaPlayers >= 4)
+ playerTiles = 10500;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*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(3.5); // this is height of river surface compared to surrounding land. River depth is in the river XML.
+
+ rmSetMapElevationParameters(cElevTurbulence, 0.05, 3, 0.4, 4.0); // type, frequency, octaves, persistence, variation
+// rmSetMapElevationHeightBlend(1);
+
+ // Picks default terrain and water
+ rmSetSeaType("great lakes");
+ rmSetBaseTerrainMix("great plains grass"); // nwt_grass1
+ rmTerrainInitialize("great_plains\ground4_gp", 4.0); // NWterritory\ground_grass2_nwt NWterritory\ground_grass2_nwt
+ rmSetMapType("rockies");
+ rmSetMapType("snow");
+ rmSetMapType("land");
+ rmSetLightingSet("rockies"); //
+
+
+ // Choose Mercs
+ chooseMercs();
+
+ // Text
+ rmSetStatusText("",0.10);
+
+ // Set up Natives
+ int subCiv0 = -1;
+ int subCiv1 = -1;
+ subCiv0 = rmGetCivID("Cheyenne");
+ subCiv1 = rmGetCivID("Comanche");
+ rmSetSubCiv(0, "Cheyenne");
+ rmSetSubCiv(1, "Comanche");
+
+
+
+ //Define some classes. These are used later for constraints.
+ int classPlayer = rmDefineClass("Players");
+ int classHill = rmDefineClass("Hills");
+ int classPatch = rmDefineClass("patch");
+ int classPatch2 = rmDefineClass("patch2");
+ int classPatch3 = rmDefineClass("patch3");
+ int classPatch4 = rmDefineClass("patch4");
+ int classGrass = rmDefineClass("grass");
+ rmDefineClass("starting settlement");
+ rmDefineClass("startingUnit");
+ int classForest = rmDefineClass("Forest");
+ int importantItem = rmDefineClass("importantItem");
+ int classNative = rmDefineClass("natives");
+ int classCliff = rmDefineClass("Cliffs");
+ int classGold = rmDefineClass("Gold");
+ int classStartingResource = rmDefineClass("startingResource");
+
+ // ******************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.20);
+
+ // ************************************* CONTRAINTS *****************************************
+ // These are used to have objects and areas avoid each other
+
+
+ // Cardinal Directions & Map placement
+ int avoidEdge = rmCreatePieConstraint("Avoid Edge",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.47), 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 stayEdge = rmCreatePieConstraint("Stay Edge",0.5,0.5,rmXFractionToMeters(0.42), rmXFractionToMeters(0.5), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int avoidCenter = rmCreatePieConstraint("Avoid Center",0.5,0.5,rmXFractionToMeters(0.28), rmXFractionToMeters(0.5), rmDegreesToRadians(0),rmDegreesToRadians(360));
+ int stayCenter = rmCreatePieConstraint("Stay Center",0.5,0.5,rmXFractionToMeters(0.0), rmXFractionToMeters(0.25), rmDegreesToRadians(0),rmDegreesToRadians(360));
+
+
+ // Resource avoidance
+ int avoidForestFar=rmCreateClassDistanceConstraint("avoid forest far", rmClassID("Forest"), 40.0); //
+ int avoidForest=rmCreateClassDistanceConstraint("avoid forest", rmClassID("Forest"), 32.0); //29.0
+ int avoidForestShort=rmCreateClassDistanceConstraint("avoid forest short", rmClassID("Forest"), 24.0); //
+ int avoidForestMin=rmCreateClassDistanceConstraint("avoid forest min", rmClassID("Forest"), 4.0);
+ int avoidElkFar = rmCreateTypeDistanceConstraint("avoid elk far", "elk", 60.0);
+ int avoidElk = rmCreateTypeDistanceConstraint("avoid elk", "elk", 45.0);
+ int avoidElkShort = rmCreateTypeDistanceConstraint("avoid elk short", "elk", 30.0);
+ int avoidElkMin = rmCreateTypeDistanceConstraint("avoid elk min", "elk", 5.0);
+ int avoidBerriesFar = rmCreateTypeDistanceConstraint("avoid berries far", "berrybush", 56.0);
+ int avoidBerries = rmCreateTypeDistanceConstraint("avoid berries", "berrybush", 40.0);
+ int avoidBerriesShort = rmCreateTypeDistanceConstraint("avoid berries short", "berrybush", 30.0);
+ int avoidBerriesMin = rmCreateTypeDistanceConstraint("avoid berries min", "berrybush", 10.0);
+ int avoidGoldTypeMin = rmCreateTypeDistanceConstraint("coin avoids coin min ", "gold", 10.0);
+ int avoidGoldTypeShort = rmCreateTypeDistanceConstraint("coin avoids coin short", "gold", 18.0);
+ int avoidGoldType = rmCreateTypeDistanceConstraint("coin avoids coin ", "gold", 26.0);
+ int avoidGoldTypeFar = rmCreateTypeDistanceConstraint("coin avoids coin far ", "gold", 50.0);
+ int avoidGoldMin=rmCreateClassDistanceConstraint("min distance vs gold", rmClassID("Gold"), 10.0);
+ int avoidGold = rmCreateClassDistanceConstraint ("gold avoid gold med", rmClassID("Gold"), 30.0);
+ int avoidGoldFar = rmCreateClassDistanceConstraint ("gold avoid gold far", rmClassID("Gold"), 60.0);
+ int avoidGoldVeryFar = rmCreateClassDistanceConstraint ("gold avoid gold very far", rmClassID("Gold"), 72.0);
+ int avoidNuggetShort = rmCreateTypeDistanceConstraint("nugget avoid nugget short", "AbstractNugget", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 38.0);
+ int avoidFish=rmCreateTypeDistanceConstraint("avoid fish", "fish", 10.0);
+
+ int avoidTownCenterVeryFar=rmCreateTypeDistanceConstraint("avoid Town Center Very Far", "townCenter", 82.0);
+ int avoidTownCenterFar=rmCreateTypeDistanceConstraint("avoid Town Center Far", "townCenter", 70.0);
+ int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 26.0);
+ int avoidTownCenterMed=rmCreateTypeDistanceConstraint(" avoid Town Center med", "townCenter", 24.0);
+ int avoidTownCenterShort=rmCreateTypeDistanceConstraint(" avoid Town Center short", "townCenter", 20.0);
+ int avoidTownCenterResources=rmCreateTypeDistanceConstraint(" avoid Town Center", "townCenter", 40.0);
+ int avoidNatives = rmCreateClassDistanceConstraint("stuff avoids natives", rmClassID("natives"), 8.0);
+ int avoidNativesFar = rmCreateClassDistanceConstraint("stuff avoids natives far", rmClassID("natives"), 14.0);
+ int avoidStartingResources = rmCreateClassDistanceConstraint("avoid starting resource", rmClassID("startingResource"), 8.0);
+ int avoidStartingResourcesShort = rmCreateClassDistanceConstraint("avoid starting resource short", rmClassID("startingResource"), 4.0);
+
+
+
+ // Land and terrain constraints
+ int avoidImpassableLand = rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 6.0);
+ int avoidImpassableLandFar=rmCreateTerrainDistanceConstraint("far avoid impassable land", "Land", false, 10.0);
+ int avoidImpassableLandShort = rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 3.0);
+ int avoidImpassableLandMin = rmCreateTerrainDistanceConstraint("min avoid impassable land", "Land", false, 1.0);
+ int avoidImpassableLandZero=rmCreateTerrainDistanceConstraint("medium avoid impassable land", "Land", false, 0.2);
+ int avoidWater = rmCreateTerrainDistanceConstraint("avoid water ", "water", true, 20);
+ int stayNearWater = rmCreateTerrainMaxDistanceConstraint("stay near water ", "land", false, 12.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"), 12.0);
+ int avoidPatch2 = rmCreateClassDistanceConstraint("patch avoid patch 2", rmClassID("patch2"), 12.0);
+ int avoidPatch3 = rmCreateClassDistanceConstraint("patch avoid patch 3", rmClassID("patch3"), 15.0);
+ int avoidPatch4 = rmCreateClassDistanceConstraint("patch avoid patch 4", rmClassID("patch4"), 24.0);
+ int avoidStone = rmCreateClassDistanceConstraint("stone avoid stone", rmClassID("stonewater"), 5.0);
+ int avoidGrass = rmCreateClassDistanceConstraint("grass avoid grass", rmClassID("grass"), 10.0);
+ int avoidCliffMin = rmCreateClassDistanceConstraint("avoid cliff min", rmClassID("Cliffs"), 1.0);
+ int avoidCliff = rmCreateClassDistanceConstraint("avoid cliff", rmClassID("Cliffs"), 4.0);
+ int avoidCliffMed = rmCreateClassDistanceConstraint("avoid cliff medium", rmClassID("Cliffs"), 8.0);
+ int avoidCliffFar = rmCreateClassDistanceConstraint("avoid cliff far", rmClassID("Cliffs"), 16.0);
+ int avoidLand = rmCreateTerrainDistanceConstraint("avoid land ", "Land", true, 10.0);
+
+ // Unit avoidance
+ int avoidStartingUnits = rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 35.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 7.0);
+
+
+ // VP avoidance
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 10.0);
+ int avoidTradeRouteShort = rmCreateTradeRouteDistanceConstraint("trade route short", 5.0);
+ int avoidTradeRouteSocket = rmCreateTypeDistanceConstraint("avoid trade route socket", "socketTradeRoute", 8.0);
+ int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 10.0);
+
+
+
+
+ // ***********************************************************************************************
+
+ // **************************************** PLACE PLAYERS ****************************************
+
+ int teamZeroCount = rmGetNumberPlayersOnTeam(0);
+ int teamOneCount = rmGetNumberPlayersOnTeam(1);
+
+ if (cNumberTeams <= 2) // 1v1 and TEAM
+ {
+ if (teamZeroCount == 1 && teamOneCount == 1) // 1v1
+ {
+ float OneVOnePlacement=rmRandFloat(0.0, 0.9);
+ if ( OneVOnePlacement < 0.5)
+ {
+ rmPlacePlayer(1, 0.50, 0.20);
+ rmPlacePlayer(2, 0.50, 0.80);
+ }
+ else
+ {
+ rmPlacePlayer(2, 0.50, 0.20);
+ rmPlacePlayer(1, 0.50, 0.80);
+ }
+
+ }
+ else if (teamZeroCount == teamOneCount) // equal N of players per TEAM
+ {
+ if (teamZeroCount == 2) // 2v2
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.960, 0.080); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.460, 0.580); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+ }
+ else // 3v3, 4v4
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.930, 0.125); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.430, 0.625); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+ }
+ }
+ else // unequal N of players per TEAM
+ {
+ if (teamZeroCount == 1 || teamOneCount == 1) // one team is one player
+ {
+ if (teamZeroCount < teamOneCount) // 1v2, 1v3, 1v4, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.50, 0.82, 0.51, 0.80, 0.00, 0.00);
+
+ rmSetPlacementTeam(1);
+ if (teamOneCount == 2)
+ rmSetPlacementSection(0.460, 0.580); //
+ else
+ rmSetPlacementSection(0.430, 0.625); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+ }
+ else // 2v1, 3v1, 4v1, etc.
+ {
+ rmSetPlacementTeam(0);
+ if (teamZeroCount == 2)
+ rmSetPlacementSection(0.960, 0.080); //
+ else
+ rmSetPlacementSection(0.930, 0.125); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.50, 0.18, 0.51, 0.20, 0.00, 0.00);
+ }
+ }
+ else if (teamZeroCount == 2 || teamOneCount == 2) // one team has 2 players
+ {
+ if (teamZeroCount < teamOneCount) // 2v3, 2v4, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.960, 0.080); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.430, 0.625); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+ }
+ else // 3v2, 4v2, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.930, 0.125); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.460, 0.580); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+ }
+ }
+ else // 3v4, 4v3, etc.
+ {
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.930, 0.125); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.430, 0.625); //
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.34, 0.34, 0);
+ }
+ }
+ }
+ else // FFA
+ {
+ rmSetPlacementSection(0.380, 0.120);
+ // rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.33, 0.33, 0.0);
+ }
+
+ // **************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.30);
+
+ // ******************************************** MAP LAYOUT AND LANDSCAPE DESIGN **************************************************
+
+ int groundID = rmCreateArea("ground");
+ rmSetAreaWarnFailure(groundID, false);
+ rmSetAreaObeyWorldCircleConstraint(groundID, false);
+ rmSetAreaSize(groundID, 1.0, 1.0);
+ rmSetAreaTerrainType(groundID, "great_lakes\ground_shoreline3_gl");
+// rmPaintAreaTerrain(groundID);
+ rmSetAreaCoherence(groundID, 0.0);
+// rmAddAreaConstraint(groundID, avoidImpassableLandZero);
+// rmAddAreaConstraint(groundID, avoidPlateau1);
+// rmAddAreaConstraint(groundID, avoidPlateau2);
+// rmAddAreaConstraint(groundID, avoidCliff);
+ rmBuildArea(groundID);
+
+
+ //Lake1
+ int Lake1ID = rmCreateArea("Lake1");
+ rmSetAreaSize(Lake1ID, 0.05, 0.055);
+ rmSetAreaLocation(Lake1ID, 1.0, 0.7);
+ rmAddAreaInfluenceSegment(Lake1ID, 1.0, 0.6, 0.88, 0.55); // 0.62, 0.62
+ rmSetAreaWaterType(Lake1ID, "great lakes"); //yukon river
+// rmSetAreaMinBlobs(Lake1ID, 8);
+// rmSetAreaMaxBlobs(Lake1ID, 10);
+// rmSetAreaMinBlobDistance(Lake1ID, 10);
+// rmSetAreaMaxBlobDistance(Lake1ID, 20);
+ rmSetAreaSmoothDistance(Lake1ID, 12);
+ rmSetAreaCoherence(Lake1ID, 0.6);
+ rmSetAreaObeyWorldCircleConstraint(Lake1ID, false);
+ if (cNumberTeams <= 2)
+ rmBuildArea(Lake1ID);
+
+ int stayNearLake1 = rmCreateAreaMaxDistanceConstraint("stay near lake 1", Lake1ID, 14.0);
+
+ //Lake2
+ int Lake2ID = rmCreateArea("Lake2");
+ rmSetAreaSize(Lake2ID, 0.05, 0.055);
+ rmSetAreaLocation(Lake2ID, 0.0, 0.3);
+ rmAddAreaInfluenceSegment(Lake2ID, 0.0, 0.4, 0.12, 0.45); // 0.62, 0.62
+ rmSetAreaWaterType(Lake2ID, "great lakes"); //yukon river
+// rmSetAreaMinBlobs(Lake2ID, 8);
+// rmSetAreaMaxBlobs(Lake2ID, 10);
+// rmSetAreaMinBlobDistance(Lake2ID, 10);
+// rmSetAreaMaxBlobDistance(Lake2ID, 20);
+ rmSetAreaSmoothDistance(Lake2ID, 12);
+ rmSetAreaCoherence(Lake2ID, 0.6);
+ rmSetAreaObeyWorldCircleConstraint(Lake2ID, false);
+ if (cNumberTeams <= 2)
+ rmBuildArea(Lake2ID);
+
+ int stayNearLake2 = rmCreateAreaMaxDistanceConstraint("stay near lake 2", Lake2ID, 14.0);
+
+ //Lake3
+ int Lake3ID = rmCreateArea("Lake3");
+ rmSetAreaSize(Lake3ID, 0.05, 0.0565);
+ rmSetAreaLocation(Lake3ID, 1.0, 0.5);
+ rmAddAreaInfluenceSegment(Lake3ID, 1.0, 0.5, 0.80, 0.5); // 0.62, 0.62
+ rmSetAreaWaterType(Lake3ID, "great lakes"); //yukon river
+// rmSetAreaMinBlobs(Lake3ID, 8);
+// rmSetAreaMaxBlobs(Lake3ID, 10);
+// rmSetAreaMinBlobDistance(Lake3ID, 10);
+// rmSetAreaMaxBlobDistance(Lake3ID, 20);
+ rmSetAreaSmoothDistance(Lake3ID, 12);
+ rmSetAreaCoherence(Lake3ID, 0.6);
+ rmSetAreaObeyWorldCircleConstraint(Lake3ID, false);
+ if (cNumberTeams >= 3)
+ rmBuildArea(Lake3ID);
+
+ int stayNearLake3 = rmCreateAreaMaxDistanceConstraint("stay near lake 3", Lake3ID, 15.0);
+
+ // Plateau template
+ int TemplateID = rmCreateArea("plateau template");
+ rmSetAreaSize(TemplateID, 0.34, 0.34);
+ rmSetAreaWarnFailure(TemplateID, false);
+// rmSetAreaMix(TemplateID, "rockies_snow");
+ rmSetAreaCoherence(TemplateID, 0.65);
+ rmSetAreaSmoothDistance(TemplateID, 10);
+ rmSetAreaLocation(TemplateID, 0.5, 0.5);
+ rmBuildArea(TemplateID);
+
+ int avoidTemplate = rmCreateAreaDistanceConstraint("avoid template", TemplateID, 3.0);
+
+
+ // Snow rim template
+ int Template2ID = rmCreateArea("snow rim template");
+ rmSetAreaSize(Template2ID, 0.50, 0.50);
+ rmSetAreaWarnFailure(Template2ID, false);
+// rmSetAreaMix(Template2ID, "rockies_snow");
+ rmSetAreaCoherence(Template2ID, 0.8);
+ rmSetAreaSmoothDistance(Template2ID, 6);
+ rmSetAreaLocation(Template2ID, 0.5, 0.5);
+ rmBuildArea(Template2ID);
+
+ int avoidTemplate2 = rmCreateAreaDistanceConstraint("avoid template2", Template2ID, 1.5);
+
+
+ // Border1 template
+ int Template3ID = rmCreateArea("border1 template");
+ rmSetAreaSize(Template3ID, 0.63, 0.63);
+ rmSetAreaWarnFailure(Template3ID, false);
+// rmSetAreaMix(Template3ID, "rockies_snow");
+ rmSetAreaCoherence(Template3ID, 0.8);
+ rmSetAreaSmoothDistance(Template3ID, 10);
+ rmSetAreaLocation(Template3ID, 0.5, 0.5);
+ rmBuildArea(Template3ID);
+
+ int avoidTemplate3 = rmCreateAreaDistanceConstraint("avoid template3", Template3ID, 1.5);
+
+ // Border2 template
+ int Template4ID = rmCreateArea("border2 template");
+ rmSetAreaSize(Template4ID, 0.67, 0.67);
+ rmSetAreaWarnFailure(Template4ID, false);
+// rmSetAreaMix(Template4ID, "rockies_snow");
+ rmSetAreaCoherence(Template4ID, 0.9);
+ rmSetAreaSmoothDistance(Template4ID, 12);
+ rmSetAreaLocation(Template4ID, 0.5, 0.5);
+ rmBuildArea(Template4ID);
+
+ int avoidTemplate4 = rmCreateAreaDistanceConstraint("avoid template4", Template4ID, 1.5);
+
+
+ // Plateau
+ for(i=1; < 3)
+ {
+ int plateauID = rmCreateArea("plateau"+i);
+ rmSetAreaSize(plateauID, 0.30, 0.30); //0.23, 0.23
+ rmSetAreaWarnFailure(plateauID, false);
+ rmSetAreaObeyWorldCircleConstraint(plateauID, false);
+ // rmSetAreaCliffType(plateauID, "araucania north coast"); // araucania north coast
+ // rmSetAreaCliffPainting(plateauID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmSetAreaTerrainType(plateauID, "great_lakes\ground_grass2_gl");
+ rmSetAreaBaseHeight(plateauID, 7.0);
+ rmSetAreaHeightBlend(plateauID, 2.0);
+ rmSetAreaElevationType(plateauID, cElevTurbulence);
+ rmSetAreaElevationVariation(plateauID, 7.0);
+ rmSetAreaElevationMinFrequency(plateauID, 0.05);
+ rmSetAreaElevationOctaves(plateauID, 3);
+ rmSetAreaElevationPersistence(plateauID, 0.5);
+ // rmSetAreaBaseHeight(plateauID, 5, 0.0, 0.8);
+ // rmSetAreaCliffEdge(plateauID, 5, 0.083, 0.0, 0.30, 1);
+ rmSetAreaCoherence(plateauID, 0.8);
+ rmSetAreaSmoothDistance(plateauID, 6);
+ // rmAddAreaToClass(plateauID, rmClassID("Cliffs"));
+ rmAddAreaConstraint(plateauID, avoidTemplate);
+ rmAddAreaConstraint (plateauID, avoidImpassableLandMin);
+ if (i < 2)
+ rmSetAreaLocation(plateauID, 0.0, 1.0);
+ else
+ rmSetAreaLocation(plateauID, 1.0, 0.0);
+ if (cNumberTeams <= 2)
+ rmBuildArea(plateauID);
+ rmCreateAreaDistanceConstraint("avoid plateau "+i, plateauID, 0.2);
+ rmCreateAreaMaxDistanceConstraint("stay in plateau "+i, plateauID, 0.0);
+ }
+
+ int avoidPlateau1 = rmConstraintID("avoid plateau 1");
+ int avoidPlateau2 = rmConstraintID("avoid plateau 2");
+ int stayInPlateau1 = rmConstraintID("stay in plateau 1");
+ int stayInPlateau2 = rmConstraintID("stay in plateau 2");
+
+
+ // Plateau FFA
+ int plateau3ID = rmCreateArea("plateau FFA");
+ rmSetAreaSize(plateau3ID, 0.60, 0.60); //0.23, 0.23
+ rmSetAreaWarnFailure(plateau3ID, false);
+ rmSetAreaObeyWorldCircleConstraint(plateau3ID, false);
+// rmSetAreaCliffType(plateau3ID, "araucania north coast"); // araucania north coast
+// rmSetAreaCliffPainting(plateau3ID, false, true, true, 0.5 , true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmSetAreaTerrainType(plateau3ID, "great_lakes\ground_grass2_gl");
+ rmSetAreaBaseHeight(plateau3ID, 7.0);
+ rmSetAreaHeightBlend(plateau3ID, 2.0);
+ rmSetAreaElevationType(plateau3ID, cElevTurbulence);
+ rmSetAreaElevationVariation(plateau3ID, 7.0);
+ rmSetAreaElevationMinFrequency(plateau3ID, 0.05);
+ rmSetAreaElevationOctaves(plateau3ID, 3);
+ rmSetAreaElevationPersistence(plateau3ID, 0.5);
+// rmSetAreaBaseHeight(plateau3ID, 5, 0.0, 0.8);
+// rmSetAreaCliffEdge(plateau3ID, 5, 0.083, 0.0, 0.30, 1);
+ rmSetAreaCoherence(plateau3ID, 0.8);
+ rmSetAreaSmoothDistance(plateau3ID, 6);
+// rmAddAreaToClass(plateau3ID, rmClassID("Cliffs"));
+ rmAddAreaConstraint(plateau3ID, avoidTemplate);
+ rmAddAreaConstraint (plateau3ID, avoidImpassableLandMin);
+ rmSetAreaLocation(plateau3ID, 0.0, 0.5);
+ if (cNumberTeams >= 3)
+ rmBuildArea(plateau3ID);
+
+ int avoidPlateau3 = rmCreateAreaDistanceConstraint("avoid plateau 3", plateau3ID, 3.0);
+ int stayInPlateau3 = rmCreateAreaMaxDistanceConstraint("stay in plateau 3", plateau3ID, 0.0);
+
+
+ // Snow rim
+ for(i=1; < 3)
+ {
+ int snowrimID = rmCreateArea("snow rim"+i);
+ rmSetAreaSize(snowrimID, 0.17, 0.17); //0.08, 0.08
+ rmSetAreaWarnFailure(snowrimID, false);
+ rmSetAreaObeyWorldCircleConstraint(snowrimID, false);
+// rmSetAreaTerrainType(snowrimID, "araucania\ground_snow3_ara");
+ rmSetAreaTerrainType(snowrimID, "great_lakes\ground_snow3_gl");
+ rmAddAreaTerrainLayer(snowrimID, "great_lakes\ground_grass3_gl", 0, 2);
+ rmSetAreaCoherence(snowrimID, 1.0);
+ rmAddAreaConstraint(snowrimID, avoidTemplate);
+ if (i < 2)
+ rmSetAreaLocation(snowrimID, 0.0, 1.0);
+ else
+ rmSetAreaLocation(snowrimID, 1.0, 0.0);
+ rmAddAreaConstraint(snowrimID, avoidTemplate2);
+ rmAddAreaConstraint (snowrimID, avoidImpassableLand);
+ if (cNumberTeams <= 2)
+ rmBuildArea(snowrimID);
+ rmCreateAreaDistanceConstraint("avoid snow rim "+i, snowrimID, 3.0);
+ rmCreateAreaDistanceConstraint("avoid snow rim far "+i, snowrimID, 15.0);
+ rmCreateAreaMaxDistanceConstraint("stay in snow rim "+i, snowrimID, 0.0);
+ }
+
+ int avoidSnowRim1 = rmConstraintID("avoid snow rim 1");
+ int avoidSnowRim2 = rmConstraintID("avoid snow rim 2");
+ int avoidSnowRim1Far = rmConstraintID("avoid snow rim far 1");
+ int avoidSnowRim2Far = rmConstraintID("avoid snow rim far 2");
+ int stayInSnowRim1 = rmConstraintID("stay in snow rim 1");
+ int stayInSnowRim2 = rmConstraintID("stay in snow rim 2");
+
+
+ // Snow rim FFA
+ int snowrim3ID = rmCreateArea("snow rim FFA");
+ rmSetAreaSize(snowrim3ID, 0.38, 0.38); //0.08, 0.08
+ rmSetAreaWarnFailure(snowrim3ID, false);
+ rmSetAreaObeyWorldCircleConstraint(snowrim3ID, false);
+// rmSetAreaTerrainType(snowrim3ID, "araucania\ground_snow3_ara");
+ rmSetAreaTerrainType(snowrim3ID, "great_lakes\ground_snow3_gl");
+ rmAddAreaTerrainLayer(snowrim3ID, "great_lakes\ground_grass3_gl", 0, 2);
+ rmSetAreaCoherence(snowrim3ID, 1.0);
+ rmAddAreaConstraint(snowrim3ID, avoidTemplate);
+ rmSetAreaLocation(snowrim3ID, 0.0, 0.5);
+ rmAddAreaConstraint(snowrim3ID, avoidTemplate2);
+ rmAddAreaConstraint (snowrim3ID, avoidImpassableLand);
+ if (cNumberTeams >= 3)
+ rmBuildArea(snowrim3ID);
+
+ int avoidSnowRim3 = rmCreateAreaDistanceConstraint("avoid snow rim 3 ", snowrim3ID, 3.0);
+ int avoidSnowRim3Far = rmCreateAreaDistanceConstraint("avoid snow rim far 3 ", snowrim3ID, 15.0);
+ int stayInSnowRim3 = rmCreateAreaMaxDistanceConstraint("stay in snow rim 3", snowrim3ID, 0.0);
+
+
+ // Rocky border
+ for(i=1; < 3)
+ {
+ int borderID = rmCreateArea("border"+i);
+ rmSetAreaSize(borderID, 0.10, 0.10); //0.08, 0.08
+ rmSetAreaWarnFailure(borderID, false);
+ rmSetAreaObeyWorldCircleConstraint(borderID, false);
+ rmSetAreaCliffType(borderID, "araucania south"); //new england snow, rocky mountain edge
+ // rmSetAreaCliffPainting(borderID, false, true, true, true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmSetAreaTerrainType(borderID, "rockies\groundsnow5_roc");
+ rmSetAreaCliffHeight(borderID, 7, 0.0, 0.2);
+ rmSetAreaCliffEdge(borderID, 1, 1.0, 0.0, 0.0, 1);
+ rmSetAreaCoherence(borderID, 0.5);
+ rmSetAreaSmoothDistance(borderID, 4);
+ rmAddAreaToClass(borderID, rmClassID("Cliffs"));
+ if (i <2)
+ rmSetAreaLocation(borderID, 0.0, 0.7);
+ else
+ rmSetAreaLocation(borderID, 1.0, 0.3);
+ rmAddAreaConstraint(borderID, avoidTemplate3);
+ rmAddAreaConstraint (borderID, avoidImpassableLandMin);
+ if (cNumberTeams <= 2)
+ rmBuildArea(borderID);
+ }
+
+ int avoidBorder = rmCreateAreaDistanceConstraint("avoid border", borderID, 8.0);
+
+
+ // Rocky border FFA
+ int border3ID = rmCreateArea("border FFA");
+ rmSetAreaSize(border3ID, 0.23, 0.23); //0.08, 0.08
+ rmSetAreaWarnFailure(border3ID, false);
+ rmSetAreaObeyWorldCircleConstraint(border3ID, false);
+ rmSetAreaCliffType(border3ID, "araucania south"); //new england snow, rocky mountain edge
+// rmSetAreaCliffPainting(border3ID, false, true, true, true); // paintGround, paintOutsideEdge, paintSide, minSideHeight, paintInsideEdge
+ rmSetAreaTerrainType(border3ID, "rockies\groundsnow5_roc");
+ rmSetAreaCliffHeight(border3ID, 7, 0.0, 0.2);
+ rmSetAreaCliffEdge(border3ID, 1, 1.0, 0.0, 0.0, 1);
+ rmSetAreaCoherence(border3ID, 0.5);
+ rmSetAreaSmoothDistance(border3ID, 4);
+ rmAddAreaToClass(border3ID, rmClassID("Cliffs"));
+ rmSetAreaLocation(border3ID, 0.0, 0.5);
+ rmAddAreaConstraint(border3ID, avoidTemplate3);
+ rmAddAreaConstraint (border3ID, avoidImpassableLandMin);
+ if (cNumberTeams >= 3)
+ rmBuildArea(border3ID);
+
+ int avoidBorder3 = rmCreateAreaDistanceConstraint("avoid border 3", border3ID, 8.0);
+
+
+
+ // Patches yellow flowers
+ for (i=0; < 12*cNumberNonGaiaPlayers)
+ {
+ int patch1ID = rmCreateArea("plateau yellow patch"+i);
+ rmSetAreaWarnFailure(patch1ID, false);
+ rmSetAreaObeyWorldCircleConstraint(patch1ID, false);
+ rmSetAreaSize(patch1ID, rmAreaTilesToFraction(80), rmAreaTilesToFraction(120));
+ rmSetAreaTerrainType(patch1ID, "great_lakes\ground_grass4_gl");
+ rmPaintAreaTerrain(patch1ID);
+ rmAddAreaToClass(patch1ID, rmClassID("patch"));
+ rmSetAreaMinBlobs(patch1ID, 1);
+ rmSetAreaMaxBlobs(patch1ID, 5);
+ rmSetAreaMinBlobDistance(patch1ID, 16.0);
+ rmSetAreaMaxBlobDistance(patch1ID, 40.0);
+ rmSetAreaCoherence(patch1ID, 0.0);
+ rmAddAreaConstraint(patch1ID, avoidImpassableLandMin);
+ rmAddAreaConstraint(patch1ID, avoidPatch);
+ if (cNumberTeams <= 2)
+ {
+ rmAddAreaConstraint(patch1ID, avoidSnowRim1Far);
+ rmAddAreaConstraint(patch1ID, avoidSnowRim2Far);
+ }
+ else
+ rmAddAreaConstraint(patch1ID, avoidSnowRim3Far);
+// rmAddAreaConstraint(patch1ID, avoidBorder);
+ rmAddAreaConstraint(patch1ID, avoidCliff);
+ rmBuildArea(patch1ID);
+ }
+
+ // Patches white flowers
+ for (i=0; < 12*cNumberNonGaiaPlayers)
+ {
+ int patch2ID = rmCreateArea("plateau white patch"+i);
+ rmSetAreaWarnFailure(patch2ID, false);
+ rmSetAreaObeyWorldCircleConstraint(patch2ID, false);
+ rmSetAreaSize(patch2ID, rmAreaTilesToFraction(80), rmAreaTilesToFraction(120));
+ rmSetAreaTerrainType(patch2ID, "great_lakes\ground_grass5_gl");
+ rmPaintAreaTerrain(patch2ID);
+ rmAddAreaToClass(patch2ID, rmClassID("patch2"));
+ rmSetAreaMinBlobs(patch2ID, 1);
+ rmSetAreaMaxBlobs(patch2ID, 5);
+ rmSetAreaMinBlobDistance(patch2ID, 16.0);
+ rmSetAreaMaxBlobDistance(patch2ID, 40.0);
+ rmSetAreaCoherence(patch2ID, 0.0);
+ rmAddAreaConstraint(patch2ID, avoidImpassableLandMin);
+ rmAddAreaConstraint(patch2ID, avoidPatch2);
+ if (cNumberTeams <= 2)
+ {
+ rmAddAreaConstraint(patch2ID, avoidSnowRim1Far);
+ rmAddAreaConstraint(patch2ID, avoidSnowRim2Far);
+ }
+ else
+ rmAddAreaConstraint(patch2ID, avoidSnowRim3Far);
+// rmAddAreaConstraint(patch2ID, avoidBorder);
+ rmAddAreaConstraint(patch2ID, avoidCliff);
+ rmBuildArea(patch2ID);
+ }
+/*
+ // Patches snow
+ for (i=0; < 30)
+ {
+ int patch3ID = rmCreateArea("snow patch"+i);
+ rmSetAreaWarnFailure(patch3ID, false);
+ rmSetAreaObeyWorldCircleConstraint(patch3ID, false);
+ rmSetAreaSize(patch3ID, rmAreaTilesToFraction(10), rmAreaTilesToFraction(15));
+ rmSetAreaTerrainType(patch3ID, "rockies\groundsnow1_roc");
+ rmPaintAreaTerrain(patch3ID);
+ rmAddAreaToClass(patch3ID, rmClassID("patch2"));
+ rmSetAreaMinBlobs(patch3ID, 3);
+ rmSetAreaMaxBlobs(patch3ID, 5);
+ rmSetAreaMinBlobDistance(patch3ID, 30.0);
+ rmSetAreaMaxBlobDistance(patch3ID, 40.0);
+ rmSetAreaCoherence(patch3ID, 0.0);
+ rmAddAreaConstraint(patch3ID, avoidImpassableLandMin);
+ rmAddAreaConstraint(patch3ID, avoidPatch3);
+ if (i<15)
+ rmAddAreaConstraint(patch3ID, stayInSnowRim1);
+ else
+ rmAddAreaConstraint(patch3ID, stayInSnowRim2);
+// rmAddAreaConstraint(patch3ID, avoidBorder);
+ rmAddAreaConstraint(patch3ID, avoidCliff);
+ rmBuildArea(patch3ID);
+ }
+*/
+
+ // Players area
+ for (i=1; < cNumberPlayers)
+ {
+ int playerareaID = rmCreateArea("playerarea"+i);
+ rmSetPlayerArea(i, playerareaID);
+ rmSetAreaSize(playerareaID, 0.06, 0.06);
+ rmSetAreaCoherence(playerareaID, 1.0);
+ rmSetAreaWarnFailure(playerareaID, false);
+// rmSetAreaMix(playerareaID, "rockies_snow");
+ rmSetAreaLocPlayer(playerareaID, i);
+ rmBuildArea(playerareaID);
+ int avoidPlayerArea = rmCreateAreaDistanceConstraint("avoid player area "+i, playerareaID, 2.0);
+ int stayInPlayerArea = rmCreateAreaMaxDistanceConstraint("stay in player area "+i, playerareaID, 0.0);
+ }
+
+ // ******************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.40);
+
+ // ******************************************** NATIVES *************************************************
+
+ int nativeID0 = -1;
+ int nativeID1 = -1;
+ int nativeID2 = -1;
+ int nativeID3 = -1;
+
+ nativeID0 = rmCreateGrouping("Nootka village 1", "native cheyenne village "+2); //+5
+ rmSetGroupingMinDistance(nativeID0, 0.00);
+ rmSetGroupingMaxDistance(nativeID0, 0.00);
+// rmAddGroupingConstraint(nativeID0, avoidImpassableLand);
+ rmAddGroupingToClass(nativeID0, rmClassID("natives"));
+// rmAddGroupingToClass(nativeID0, rmClassID("importantItem"));
+// rmAddGroupingConstraint(nativeID0, avoidNatives);
+ if (cNumberTeams <= 2)
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.72, 0.30);
+ else
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.55, 0.38);
+
+ nativeID2 = rmCreateGrouping("Klamath village 1", "native comanche village "+1); //+1
+ rmSetGroupingMinDistance(nativeID2, 0.00);
+ rmSetGroupingMaxDistance(nativeID2, 0.00);
+// rmAddGroupingConstraint(nativeID2, avoidImpassableLand);
+ rmAddGroupingToClass(nativeID2, rmClassID("natives"));
+// rmAddGroupingToClass(nativeID2, rmClassID("importantItem"));
+// rmAddGroupingConstraint(nativeID2, avoidNatives);
+ if (cNumberTeams <= 2)
+ rmPlaceGroupingAtLoc(nativeID2, 0, 0.60, 0.50);
+ else
+ rmPlaceGroupingAtLoc(nativeID2, 0, 0.40, 0.38);
+
+ nativeID1 = rmCreateGrouping("Nootka village 2", "native cheyenne village "+1);
+ rmSetGroupingMinDistance(nativeID1, 0.00);
+ rmSetGroupingMaxDistance(nativeID1, 0.00);
+// rmAddGroupingConstraint(nativeID1, avoidImpassableLand);
+ rmAddGroupingToClass(nativeID1, rmClassID("natives"));
+// rmAddGroupingToClass(nativeID1, rmClassID("importantItem"));
+// rmAddGroupingConstraint(nativeID1, avoidNatives);
+ if (cNumberTeams <= 2)
+ rmPlaceGroupingAtLoc(nativeID1, 0, 0.30, 0.70); //
+ else
+ rmPlaceGroupingAtLoc(nativeID1, 0, 0.55, 0.62); //
+
+ nativeID3 = rmCreateGrouping("Klamath village 2", "native comanche village "+2);
+ rmSetGroupingMinDistance(nativeID3, 0.00);
+ rmSetGroupingMaxDistance(nativeID3, 0.00);
+// rmAddGroupingConstraint(nativeID3, avoidImpassableLand);
+ rmAddGroupingToClass(nativeID3, rmClassID("natives"));
+// rmAddGroupingToClass(nativeID3, rmClassID("importantItem"));
+// rmAddGroupingConstraint(nativeID3, avoidNatives);
+ if (cNumberTeams <= 2)
+ rmPlaceGroupingAtLoc(nativeID3, 0, 0.40, 0.50); //
+ else
+ rmPlaceGroupingAtLoc(nativeID3, 0, 0.40, 0.62); //
+
+ // ******************************************************************************************************
+
+ // Text
+ rmSetStatusText("",0.50);
+
+ // ************************************ PLAYER STARTING RESOURCES ***************************************
+
+ // ******** Define ********
+
+ // Town center & units
+ int TCID = rmCreateObjectDef("player TC");
+ int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+ if (rmGetNomadStart())
+ {
+ rmAddObjectDefItem(TCID, "CoveredWagon", 1, 0.0);
+ }
+ else
+ {
+ rmAddObjectDefItem(TCID, "TownCenter", 1, 0.0);
+ rmAddObjectDefToClass(TCID, classStartingResource);
+ }
+ rmSetObjectDefMinDistance(TCID, 0.0);
+ rmSetObjectDefMaxDistance(TCID, 0.0);
+
+ // Starting mines
+ int playergoldID = rmCreateObjectDef("player mine");
+ rmAddObjectDefItem(playergoldID, "minetin", 1, 0);
+ rmSetObjectDefMinDistance(playergoldID, 12.0);
+ rmSetObjectDefMaxDistance(playergoldID, 14.0);
+ rmAddObjectDefToClass(playergoldID, classStartingResource);
+ rmAddObjectDefToClass(playergoldID, classGold);
+ rmAddObjectDefConstraint(playergoldID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playergoldID, avoidNatives);
+ rmAddObjectDefConstraint(playergoldID, avoidStartingResources);
+
+ // 2nd mine
+ int playergold2ID = rmCreateObjectDef("player second mine");
+ rmAddObjectDefItem(playergold2ID, "minetin", 1, 0);
+ rmSetObjectDefMinDistance(playergold2ID, 40.0); //58
+ rmSetObjectDefMaxDistance(playergold2ID, 42.0); //62
+ rmAddObjectDefToClass(playergold2ID, classStartingResource);
+ rmAddObjectDefToClass(playergold2ID, classGold);
+ rmAddObjectDefConstraint(playergold2ID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playergold2ID, avoidCliffMed);
+ rmAddObjectDefConstraint(playergold2ID, avoidNatives);
+ rmAddObjectDefConstraint(playergold2ID, avoidGoldTypeFar);
+ rmAddObjectDefConstraint(playergold2ID, avoidStartingResources);
+ rmAddObjectDefConstraint(playergold2ID, avoidCenter);
+
+ // Starting berries
+ int playerberriesID = rmCreateObjectDef("player berries");
+ rmAddObjectDefItem(playerberriesID, "berrybush", 4, 4.0);
+ rmSetObjectDefMinDistance(playerberriesID, 12.0);
+ rmSetObjectDefMaxDistance(playerberriesID, 14.0);
+ rmAddObjectDefToClass(playerberriesID, classStartingResource);
+ rmAddObjectDefConstraint(playerberriesID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerberriesID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerberriesID, avoidNatives);
+ rmAddObjectDefConstraint(playerberriesID, avoidStartingResources);
+
+ // Starting trees
+ int playerTreeID = rmCreateObjectDef("player trees");
+ rmAddObjectDefItem(playerTreeID, "TreeRockies", rmRandInt(5,5), 5.0);
+ rmSetObjectDefMinDistance(playerTreeID, 12);
+ rmSetObjectDefMaxDistance(playerTreeID, 16);
+ rmAddObjectDefToClass(playerTreeID, classStartingResource);
+ rmAddObjectDefToClass(playerTreeID, classForest);
+ rmAddObjectDefConstraint(playerTreeID, avoidForestShort);
+ rmAddObjectDefConstraint(playerTreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerTreeID, avoidStartingResourcesShort);
+ rmAddObjectDefConstraint(playerTreeID, avoidPlateau1);
+ rmAddObjectDefConstraint(playerTreeID, avoidPlateau2);
+
+ // Starting herd
+ int playerherdID = rmCreateObjectDef("starting herd");
+ rmAddObjectDefItem(playerherdID, "bighornsheep", rmRandInt(10,10), 7.0);
+ rmSetObjectDefMinDistance(playerherdID, 19.0);
+ rmSetObjectDefMaxDistance(playerherdID, 20.0);
+ rmSetObjectDefCreateHerd(playerherdID, true);
+ rmAddObjectDefToClass(playerherdID, classStartingResource);
+ rmAddObjectDefConstraint(playerherdID, avoidImpassableLand);
+ rmAddObjectDefConstraint(playerherdID, avoidNatives);
+ rmAddObjectDefConstraint(playerherdID, avoidStartingResourcesShort);
+
+ // 2nd herd
+ int playerherd2ID = rmCreateObjectDef("2nd herd");
+ rmAddObjectDefItem(playerherd2ID, "bighornsheep", rmRandInt(6,6), 5.0);
+ rmSetObjectDefMinDistance(playerherd2ID, 45);
+ rmSetObjectDefMaxDistance(playerherd2ID, 46);
+ rmAddObjectDefToClass(playerherd2ID, classStartingResource);
+ rmSetObjectDefCreateHerd(playerherd2ID, true);
+ rmAddObjectDefConstraint(playerherd2ID, avoidElk); //Short
+ rmAddObjectDefConstraint(playerherd2ID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(playerherd2ID, avoidNatives);
+ rmAddObjectDefConstraint(playerherd2ID, avoidStartingResources);
+ rmAddObjectDefConstraint(playerherd2ID, avoidCliffMed);
+
+/* // 3nd herd
+ int playerherd3ID = rmCreateObjectDef("3nd herd");
+ rmAddObjectDefItem(playerherd3ID, "pronghorn", rmRandInt(7,7), 5.0);
+ rmSetObjectDefMinDistance(playerherd3ID, 45);
+ rmSetObjectDefMaxDistance(playerherd3ID, 48);
+ rmAddObjectDefToClass(playerherd3ID, classStartingResource);
+ rmSetObjectDefCreateHerd(playerherd3ID, true);
+ rmAddObjectDefConstraint(playerherd3ID, avoidRhea); //Short
+ rmAddObjectDefConstraint(playerherd3ID, avoidElk);
+ rmAddObjectDefConstraint(playerherd3ID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(playerherd3ID, avoidNatives);
+ rmAddObjectDefConstraint(playerherd3ID, avoidStartingResources);
+*/
+
+ // Starting treasures
+ int playerNuggetID = rmCreateObjectDef("player nugget");
+ rmAddObjectDefItem(playerNuggetID, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(1, 1);
+ rmSetObjectDefMinDistance(playerNuggetID, 24.0);
+ rmSetObjectDefMaxDistance(playerNuggetID, 26.0);
+ rmAddObjectDefToClass(playerNuggetID, classStartingResource);
+ rmAddAreaConstraint(playerNuggetID, avoidGoldTypeMin);
+ rmAddObjectDefConstraint(playerNuggetID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(playerNuggetID, avoidNatives);
+ rmAddObjectDefConstraint(playerNuggetID, avoidStartingResources);
+// rmAddObjectDefConstraint(playerNuggetID, avoidNuggetShort);
+ rmAddObjectDefConstraint(playerNuggetID, avoidCliffMed);
+
+ // ******** Place ********
+
+ for(i=1; = 2)
+ {
+ rmAddAreaConstraint(lakeforestID, avoidPlateau1);
+ rmAddAreaConstraint(lakeforestID, avoidPlateau2);
+ }
+ }
+ else
+ {
+ rmAddAreaConstraint(lakeforestID, stayNearLake3);
+ if (i <= 2)
+ rmAddAreaConstraint(lakeforestID, stayInPlateau3);
+ else
+ rmAddAreaConstraint(lakeforestID, avoidPlateau3);
+ }
+
+
+ rmBuildArea(lakeforestID);
+
+ stayInLakeForest = rmCreateAreaMaxDistanceConstraint("stay in lake forest"+i, lakeforestID, 0);
+
+ for (j=0; < rmRandInt(10,12)) // 20,22
+ {
+ int lakeforesttreeID = rmCreateObjectDef("lake forest trees"+i+j);
+ if (i < 2)
+ rmAddObjectDefItem(lakeforesttreeID, "TreeRockiesSnow", rmRandInt(2,3), 3.0);
+ else
+ rmAddObjectDefItem(lakeforesttreeID, "TreeRockies", rmRandInt(2,3), 3.0);
+ rmSetObjectDefMinDistance(lakeforesttreeID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(lakeforesttreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefToClass(lakeforesttreeID, classForest);
+ // rmAddObjectDefConstraint(lakeforesttreeID, avoidForestShort);
+ rmAddObjectDefConstraint(lakeforesttreeID, avoidImpassableLandMin);
+ rmAddObjectDefConstraint(lakeforesttreeID, stayInLakeForest);
+ rmPlaceObjectDefAtLoc(lakeforesttreeID, 0, 0.50, 0.50);
+ }
+
+ }
+
+
+ // Plateau forest
+ int plateauforestcount = 4*cNumberNonGaiaPlayers;
+ int stayInPlateauForest = -1;
+
+ for (i=0; < plateauforestcount)
+ {
+ int plateauforestID = rmCreateArea("plateau forest"+i);
+ rmSetAreaWarnFailure(plateauforestID, false);
+ rmSetAreaSize(plateauforestID, rmAreaTilesToFraction(110), rmAreaTilesToFraction(120));
+// rmSetAreaTerrainType(plateauforestID, "pampas\groundforest_pam");
+ rmSetAreaTerrainType(plateauforestID, "great_lakes\ground_grass2_gl");
+ rmSetAreaObeyWorldCircleConstraint(plateauforestID, false);
+ rmSetAreaMinBlobs(plateauforestID, 1);
+ rmSetAreaMaxBlobs(plateauforestID, 5);
+ rmSetAreaMinBlobDistance(plateauforestID, 16.0);
+ rmSetAreaMaxBlobDistance(plateauforestID, 40.0);
+ rmSetAreaCoherence(plateauforestID, 0.0);
+ rmSetAreaSmoothDistance(plateauforestID, 5);
+ rmAddAreaToClass(plateauforestID, classForest);
+ rmAddAreaConstraint(plateauforestID, avoidForest);
+ rmAddAreaConstraint(plateauforestID, avoidGoldTypeMin);
+ rmAddAreaConstraint(plateauforestID, avoidStartingResources);
+ rmAddAreaConstraint(plateauforestID, avoidNatives);
+ rmAddAreaConstraint(plateauforestID, avoidImpassableLandMin);
+ rmAddAreaConstraint(plateauforestID, avoidCliffMin);
+ rmAddAreaConstraint(plateauforestID, avoidTownCenter);
+ if (cNumberTeams <= 2)
+ {
+ if (i < plateauforestcount/2)
+ rmAddAreaConstraint(plateauforestID, stayInPlateau1);
+ else
+ rmAddAreaConstraint(plateauforestID, stayInPlateau2);
+ }
+ else
+ rmAddAreaConstraint(plateauforestID, stayInPlateau3);
+
+ rmBuildArea(plateauforestID);
+
+ stayInPlateauForest = rmCreateAreaMaxDistanceConstraint("stay in plateau forest"+i, plateauforestID, 0);
+
+ for (j=0; < rmRandInt(9,10)) // 20,22
+ {
+ int plateauforesttreeID = rmCreateObjectDef("plateau forest trees"+i+j);
+ rmAddObjectDefItem(plateauforesttreeID, "TreeRockiesSnow", rmRandInt(2,3), 3.0);
+ rmSetObjectDefMinDistance(plateauforesttreeID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(plateauforesttreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefToClass(plateauforesttreeID, classForest);
+ // rmAddObjectDefConstraint(plateauforesttreeID, avoidForestShort);
+ rmAddObjectDefConstraint(plateauforesttreeID, avoidImpassableLandMin);
+ rmAddObjectDefConstraint(plateauforesttreeID, stayInPlateauForest);
+ rmPlaceObjectDefAtLoc(plateauforesttreeID, 0, 0.50, 0.50);
+ }
+
+ }
+
+ // Valley forest
+ int valleyforestcount = 3*cNumberNonGaiaPlayers;
+ int stayInValleyForest = -1;
+
+ for (i=0; < valleyforestcount)
+ {
+ int valleyforestID = rmCreateArea("valley forest"+i);
+ rmSetAreaWarnFailure(valleyforestID, false);
+ rmSetAreaSize(valleyforestID, rmAreaTilesToFraction(110), rmAreaTilesToFraction(120));
+// rmSetAreaTerrainType(valleyforestID, "pampas\groundforest_pam");
+ rmSetAreaObeyWorldCircleConstraint(valleyforestID, false);
+ rmSetAreaMinBlobs(valleyforestID, 1);
+ rmSetAreaMaxBlobs(valleyforestID, 5);
+ rmSetAreaMinBlobDistance(valleyforestID, 16.0);
+ rmSetAreaMaxBlobDistance(valleyforestID, 35.0);
+ rmSetAreaCoherence(valleyforestID, 0.0);
+ rmSetAreaSmoothDistance(valleyforestID, 5);
+ rmAddAreaToClass(valleyforestID, classForest);
+ rmAddAreaConstraint(valleyforestID, avoidForest);
+ rmAddAreaConstraint(valleyforestID, avoidGoldTypeMin);
+ rmAddAreaConstraint(valleyforestID, avoidStartingResourcesShort);
+ rmAddAreaConstraint(valleyforestID, avoidNativesFar);
+ rmAddAreaConstraint(valleyforestID, avoidImpassableLandMin);
+ rmAddAreaConstraint(valleyforestID, avoidCliffMin);
+ rmAddAreaConstraint(valleyforestID, avoidTownCenter);
+ if (cNumberTeams <= 2)
+ {
+ rmAddAreaConstraint(valleyforestID, avoidPlateau1);
+ rmAddAreaConstraint(valleyforestID, avoidPlateau2);
+ }
+ else
+ rmAddAreaConstraint(valleyforestID, avoidPlateau3);
+
+ rmBuildArea(valleyforestID);
+
+ stayInValleyForest = rmCreateAreaMaxDistanceConstraint("stay in valley forest"+i, valleyforestID, 0);
+
+ for (j=0; < rmRandInt(9,10)) // 20,22
+ {
+ int valleyforesttreeID = rmCreateObjectDef("valley forest trees"+i+j);
+ rmAddObjectDefItem(valleyforesttreeID, "TreeRockies", rmRandInt(2,3), 3.0);
+ rmSetObjectDefMinDistance(valleyforesttreeID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(valleyforesttreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefToClass(valleyforesttreeID, classForest);
+ // rmAddObjectDefConstraint(valleyforesttreeID, avoidForestShort);
+ rmAddObjectDefConstraint(valleyforesttreeID, avoidImpassableLandMin);
+ rmAddObjectDefConstraint(valleyforesttreeID, stayInValleyForest);
+ rmPlaceObjectDefAtLoc(valleyforesttreeID, 0, 0.50, 0.50);
+ }
+
+ }
+
+ // ********************************
+
+ // Text
+ rmSetStatusText("",0.80);
+
+ // ************ Herds *************
+
+ //Elk herds
+ int herdcount = 3*cNumberNonGaiaPlayers;
+
+ for(i=0; < herdcount)
+ {
+ int elkherdID = rmCreateObjectDef("elk herd"+i);
+ rmAddObjectDefItem(elkherdID, "pronghorn", rmRandInt(6,6), 5.0);
+ rmSetObjectDefMinDistance(elkherdID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(elkherdID, rmXFractionToMeters(0.5));
+ rmSetObjectDefCreateHerd(elkherdID, true);
+ rmAddObjectDefConstraint(elkherdID, avoidImpassableLand);
+ rmAddObjectDefConstraint(elkherdID, avoidNatives);
+ rmAddObjectDefConstraint(elkherdID, avoidGoldTypeShort);
+ rmAddObjectDefConstraint(elkherdID, avoidForestMin);
+ rmAddObjectDefConstraint(elkherdID, avoidCliffFar);
+ rmAddObjectDefConstraint(elkherdID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(elkherdID, avoidElkFar);
+ rmAddObjectDefConstraint(elkherdID, avoidEdge);
+ rmPlaceObjectDefAtLoc(elkherdID, 0, 0.50, 0.50);
+ }
+
+ // ********************************
+
+ // ************ Berries *************
+
+ //Berries
+ int berriescount = 3*cNumberNonGaiaPlayers;
+
+ for(i=0; < berriescount)
+ {
+ int berriesID = rmCreateObjectDef("berries"+i);
+ rmAddObjectDefItem(berriesID, "berrybush", rmRandInt(4,4), 5.0);
+ rmSetObjectDefMinDistance(berriesID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(berriesID, rmXFractionToMeters(0.5));
+ rmSetObjectDefCreateHerd(berriesID, true);
+ rmAddObjectDefConstraint(berriesID, avoidImpassableLand);
+ rmAddObjectDefConstraint(berriesID, avoidNatives);
+ rmAddObjectDefConstraint(berriesID, avoidGoldTypeShort);
+ rmAddObjectDefConstraint(berriesID, avoidForestMin);
+ rmAddObjectDefConstraint(berriesID, avoidCliffFar);
+ rmAddObjectDefConstraint(berriesID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(berriesID, avoidElkShort);
+ rmAddObjectDefConstraint(berriesID, avoidBerriesFar);
+ rmAddObjectDefConstraint(berriesID, avoidEdge);
+ rmPlaceObjectDefAtLoc(berriesID, 0, 0.50, 0.50);
+ }
+
+ // ********************************
+
+
+ // Random tree clumps
+ for (i=0; < 4+cNumberNonGaiaPlayers)
+ {
+ int randomtreeID = rmCreateObjectDef("random tree"+i);
+ rmAddObjectDefItem(randomtreeID, "TreeRockies", rmRandInt(3,5), 4.0);
+ rmSetObjectDefMinDistance(randomtreeID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(randomtreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefToClass(randomtreeID, classForest);
+ rmAddObjectDefConstraint(randomtreeID, avoidForestShort);
+ rmAddObjectDefConstraint(randomtreeID, avoidNatives);
+ rmAddObjectDefConstraint(randomtreeID, avoidGoldTypeMin);
+ rmAddObjectDefConstraint(randomtreeID, avoidElkMin);
+ rmAddObjectDefConstraint(randomtreeID, avoidBerriesMin);
+ rmAddObjectDefConstraint(randomtreeID, avoidImpassableLandShort);
+ rmAddObjectDefConstraint(randomtreeID, avoidStartingResourcesShort);
+ if (cNumberTeams <= 2)
+ {
+ rmAddObjectDefConstraint(randomtreeID, avoidPlateau1);
+ rmAddObjectDefConstraint(randomtreeID, avoidPlateau2);
+ }
+ else
+ rmAddObjectDefConstraint(randomtreeID, avoidPlateau3);
+ rmAddObjectDefConstraint(randomtreeID, avoidTownCenter);
+ rmPlaceObjectDefAtLoc(randomtreeID, 0, 0.50, 0.50);
+ }
+
+ // ********************************
+
+ // Text
+ rmSetStatusText("",0.90);
+
+ // ********** Treasures ***********
+
+ // Treasures
+ int NuggetID = rmCreateObjectDef("Nugget");
+ rmAddObjectDefItem(NuggetID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(NuggetID, 0);
+ rmSetObjectDefMaxDistance(NuggetID, rmXFractionToMeters(0.5));
+ rmSetNuggetDifficulty(1,3);
+ rmAddObjectDefConstraint(NuggetID, avoidNugget);
+ rmAddObjectDefConstraint(NuggetID, avoidNatives);
+ rmAddObjectDefConstraint(NuggetID, avoidCliffFar);
+ rmAddObjectDefConstraint(NuggetID, avoidImpassableLand);
+ rmAddObjectDefConstraint(NuggetID, avoidGoldTypeMin);
+ rmAddObjectDefConstraint(NuggetID, avoidElkMin);
+ rmAddObjectDefConstraint(NuggetID, avoidBerriesMin);
+ rmAddObjectDefConstraint(NuggetID, avoidForestMin);
+ rmAddObjectDefConstraint(NuggetID, avoidTownCenterFar);
+ rmAddObjectDefConstraint(NuggetID, avoidNatives);
+ rmAddObjectDefConstraint(NuggetID, avoidEdge);
+
+ int nuggetcount = 6*cNumberNonGaiaPlayers;
+
+ for (i=0; < nuggetcount)
+ {
+ rmPlaceObjectDefAtLoc(NuggetID, 0, 0.50, 0.50);
+ }
+
+ // ********************************
+
+ //Fish
+ int fishID = rmCreateObjectDef("fish");
+ rmAddObjectDefItem(fishID, "Fishsalmon", rmRandInt(2,2), 8.0);
+ rmSetObjectDefMinDistance(fishID, 0.0);
+ rmSetObjectDefMaxDistance(fishID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(fishID, avoidFish);
+ rmAddObjectDefConstraint(fishID, avoidLand);
+ rmAddObjectDefConstraint(fishID, avoidEdge);
+
+
+ for (i=0; < 2+cNumberNonGaiaPlayers/2)
+ {
+ if (cNumberTeams <= 2)
+ {
+ rmPlaceObjectDefAtLoc(fishID, 0, 1.00, 0.70);
+ rmPlaceObjectDefAtLoc(fishID, 0, 0.00, 0.30);
+ }
+ else
+ {
+ rmPlaceObjectDefAtLoc(fishID, 0, 1.00, 0.50);
+ rmPlaceObjectDefAtLoc(fishID, 0, 1.00, 0.50);
+ }
+ }
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH()) {
+
+ int randLoc = rmRandInt(1,2);
+ float xLoc = 0.5;
+ float yLoc = 0.5;
+ float walk = 0.015;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, 0);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ // Text
+ rmSetStatusText("",1.00);
+
+
+
+
+} //END
+
+
\ No newline at end of file
diff --git a/RMM/Sahara.xml b/RMM/Sahara.xml
new file mode 100644
index 0000000..d4e24a7
--- /dev/null
+++ b/RMM/Sahara.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\sahara\sahara_ss_01
+ ui\random_map\africa\sahara\sahara_ss_02
+ ui\random_map\africa\sahara\sahara_ss_03
+
\ No newline at end of file
diff --git a/RMM/Sahara.xs b/RMM/Sahara.xs
new file mode 100644
index 0000000..7cdd298
--- /dev/null
+++ b/RMM/Sahara.xs
@@ -0,0 +1,614 @@
+// RM script of Sahara
+// For K&B mod
+// By AOE_Fan
+// TAD-compatible version!
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+void main(void)
+{
+ // Text
+ // Make the loading bar move
+ rmSetStatusText("",0.01);
+
+
+ // Chooses the 3 natives - Sudanese or Berbers randomly
+
+ int nativeInt1 = rmRandInt(1,2);
+ int nativeInt2 = rmRandInt(1,2);
+ int nativeInt3 = rmRandInt(1,2);
+
+ // Native 1
+ if (nativeInt1 == 1)
+ rmSetSubCiv(0, "Aztecs");
+ else
+ rmSetSubCiv(0, "Aztecs");
+
+ // Native 2
+ if (nativeInt2 == 1)
+ rmSetSubCiv(1, "Sufi");
+ else
+ rmSetSubCiv(1, "Sufi");
+
+ // Native 3
+ if (nativeInt3 == 1)
+ rmSetSubCiv(2, "Aztecs");
+ else
+ rmSetSubCiv(2, "Aztecs");
+
+
+ // Picks the map size
+ int playerTiles = 12000;
+ if (cNumberNonGaiaPlayers > 4)
+ playerTiles = 11000;
+ if (cNumberNonGaiaPlayers > 6)
+ playerTiles = 9000;
+
+
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, size);
+
+
+ // Chooses if 3rd native starts from north or south
+ int native3Place = rmRandInt(1,2);
+
+
+ // Set map the map smoothness
+ rmSetMapElevationHeightBlend(1);
+
+
+ // Chooses the side where teams start in team games
+ int teamSide = rmRandInt(1,4);
+
+
+ // Picks a default water height
+ rmSetSeaLevel(0.0);
+
+
+ // Pick lighting
+ rmSetLightingSet("3x01a_newengland");
+
+
+ // Picks default terrain and map type
+ rmSetMapElevationParameters(cElevTurbulence, 0.08, 4, 0.5, 12.0);
+ rmTerrainInitialize("borneo\shoreline1_borneo", 1.0);
+ rmSetMapType("mongolia");
+ rmSetMapType("grass");
+ rmSetMapType("land");
+
+
+ chooseMercs();
+
+
+ // Corner constraint
+ rmSetWorldCircleConstraint(true);
+
+ // Define classes, these are used for constraints
+ int classPlayer=rmDefineClass("player");
+ int classAnimals=rmDefineClass("animals");
+ int classMines=rmDefineClass("mines");
+ int classRocks=rmDefineClass("rocks");
+ int classForest=rmDefineClass("forest");
+ rmDefineClass("startingUnit");
+ rmDefineClass("nuggets");
+ rmDefineClass("natives");
+ rmDefineClass("classPatch");
+
+
+ // Define constraints - used for things to avoid certain things
+
+ // Map edge and centre constraints
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ // 1/4 slice of map constraints
+ int Northward=rmCreatePieConstraint("northMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(20), rmDegreesToRadians(40));
+ int Eastward=rmCreatePieConstraint("eastMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(80), rmDegreesToRadians(150));
+ int Southward=rmCreatePieConstraint("southMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(200), rmDegreesToRadians(220));
+ int Westward=rmCreatePieConstraint("westMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(260), rmDegreesToRadians(330));
+
+ // All player things avoidance
+ int veryLongPlayerConstraint=rmCreateClassDistanceConstraint("nuggets stay away from players very long", classPlayer, 70.0);
+ int longPlayerConstraint=rmCreateClassDistanceConstraint("nuggets stay away from players long", classPlayer, 55.0);
+ int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 35.0);
+ int mediumPlayerConstraint=rmCreateClassDistanceConstraint("nuggets stay away from players medium", classPlayer, 40.0);
+ int shortPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players short", classPlayer, 20.0);
+ int shortestPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players shortest", classPlayer, 18.0);
+ int shortAvoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units short", rmClassID("startingUnit"), 12.0);
+ int shortyPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players shortest", classPlayer, 16.0);
+
+ // Resource avoidance
+ int avoidMines=rmCreateClassDistanceConstraint("avoid mines", classMines, 65.0);
+ int avoidStartResource=rmCreateTypeDistanceConstraint("start resource no overlap", "resource", 10.0);
+ int animalConstraint=rmCreateClassDistanceConstraint("avoid all animals", classAnimals, 40.0);
+ int shortAnimalConstraint=rmCreateClassDistanceConstraint("short avoid all animals", classAnimals, 5.0);
+ int avoidRocks=rmCreateClassDistanceConstraint("rocks avoid rocks", classRocks, 100.0);
+ int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
+ int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "fish", 18.0);
+
+ // Avoid impassable land
+ int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 6.0);
+
+ // Nugget avoidance
+ int avoidNuggets=rmCreateClassDistanceConstraint("stuff avoids nuggets", rmClassID("nuggets"), 60.0);
+
+ // Native avoidance
+ int avoidNatives=rmCreateClassDistanceConstraint("things avoids natives", rmClassID("natives"), 10.0);
+ int nativesAvoidNatives=rmCreateClassDistanceConstraint("natives avoids natives", rmClassID("natives"), 100.0);
+
+ // Decoration avoidance
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
+ int avoidPatch=rmCreateClassDistanceConstraint("patches avoid patches", rmClassID("classPatch"), 2.0);
+
+
+ // Text
+ rmSetStatusText("",0.10);
+
+
+ // Place players - in team and FFA games
+
+ // Player placement if FFA (Free For All) - place players in circle
+ if(cNumberTeams > 2)
+ {
+ rmSetTeamSpacingModifier(0.7);
+ rmPlacePlayersCircular(0.36, 0.36, 0.0);
+ }
+
+ // Player placement if teams - place teams in circle to apart from each other
+ if(cNumberTeams == 2)
+ {
+ rmSetPlacementTeam(0);
+ if (teamSide == 1)
+ rmSetPlacementSection(0.00, 0.25);
+ else if (teamSide == 2)
+ rmSetPlacementSection(0.25, 0.50);
+ else if (teamSide == 3)
+ rmSetPlacementSection(0.50, 0.75);
+ else if (teamSide == 4)
+ rmSetPlacementSection(0.75, 1.00);
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.36, 0.36, 0.0);
+
+ rmSetPlacementTeam(1);
+ if (teamSide == 1)
+ rmSetPlacementSection(0.50, 0.75);
+ else if (teamSide == 2)
+ rmSetPlacementSection(0.75, 1.00);
+ else if (teamSide == 3)
+ rmSetPlacementSection(0.00, 0.25);
+ else if (teamSide == 4)
+ rmSetPlacementSection(0.25, 0.50);
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.36, 0.36, 0.0);
+ }
+
+
+ // Text
+ rmSetStatusText("",0.20);
+
+
+ // Define and place players' area, green terrain
+
+ float playerFraction=rmAreaTilesToFraction(1100);
+ for(i=1; 2)
+ rmAddGroupingConstraint(nativeVillageID, nativesAvoidNatives);
+ if(cNumberTeams == 2)
+ rmAddGroupingConstraint(nativeVillageID, Eastward);
+ rmAddGroupingToClass(nativeVillageID, rmClassID("natives"));
+ rmPlaceGroupingAtLoc(nativeVillageID, 0, 0.5, 0.5);
+
+ // Native 2
+ int nativeVillage2ID = -1;
+ int nativeVillage2Type = rmRandInt(1,5);
+ if (nativeInt2 == 1)
+ nativeVillage2ID = rmCreateGrouping("Sufi A", "native sufi mosque mongol "+nativeVillage2Type);
+ else
+ nativeVillage2ID = rmCreateGrouping("Sufi A", "native sufi mosque mongol "+nativeVillage2Type);
+ rmSetGroupingMinDistance(nativeVillage2ID, rmXFractionToMeters(0.15));
+ rmSetGroupingMaxDistance(nativeVillage2ID, rmXFractionToMeters(0.22));
+ rmAddGroupingConstraint(nativeVillage2ID, playerConstraint);
+ if(cNumberTeams > 2)
+ rmAddGroupingConstraint(nativeVillage2ID, nativesAvoidNatives);
+ if(cNumberTeams == 2)
+ rmAddGroupingConstraint(nativeVillage2ID, Westward);
+ rmAddGroupingToClass(nativeVillage2ID, rmClassID("natives"));
+ rmPlaceGroupingAtLoc(nativeVillage2ID, 0, 0.5, 0.5);
+
+ // Native 3
+ int nativeVillage3ID = -1;
+ int nativeVillage3Type = rmRandInt(1,5);
+ if (nativeInt3 == 1)
+ nativeVillage3ID = rmCreateGrouping("Aztec village"+i, "native Aztec village "+nativeVillage3Type);
+ else
+ nativeVillage3ID = rmCreateGrouping("Aztec village"+i, "native Aztec village "+nativeVillage3Type);
+ rmSetGroupingMinDistance(nativeVillage3ID, rmXFractionToMeters(0.15));
+ rmSetGroupingMaxDistance(nativeVillage3ID, rmXFractionToMeters(0.22));
+ rmAddGroupingConstraint(nativeVillage3ID, playerConstraint);
+ if(cNumberTeams > 2)
+ rmAddGroupingConstraint(nativeVillage3ID, nativesAvoidNatives);
+ if(cNumberTeams == 2 && native3Place == 1)
+ rmAddGroupingConstraint(nativeVillage3ID, Northward);
+ else if(cNumberTeams == 2 && native3Place == 2)
+ rmAddGroupingConstraint(nativeVillage3ID, Southward);
+ rmAddGroupingToClass(nativeVillage3ID, rmClassID("natives"));
+ rmPlaceGroupingAtLoc(nativeVillage3ID, 0, 0.5, 0.5);
+
+
+ // Text
+ rmSetStatusText("",0.80);
+
+
+ // Define and place mines - gold and copper
+
+ // Gold mines
+
+ int goldCount = 3*cNumberNonGaiaPlayers;
+
+ for(i=0; < goldCount)
+ {
+ int goldID=rmCreateObjectDef("gold mine"+i);
+ rmAddObjectDefItem(goldID, "minegold", 1, 0.0);
+ rmSetObjectDefMinDistance(goldID, rmXFractionToMeters(0.10));
+ rmSetObjectDefMaxDistance(goldID, rmXFractionToMeters(0.47));
+ rmAddObjectDefToClass(goldID, classMines);
+ rmAddObjectDefConstraint(goldID, playerConstraint);
+ rmAddObjectDefConstraint(goldID, avoidMines);
+ rmAddObjectDefConstraint(goldID, avoidNatives);
+ rmPlaceObjectDefAtLoc(goldID, 0, 0.5, 0.5);
+ }
+
+ // Copper mines
+
+ int copperCount = 1*cNumberNonGaiaPlayers;
+
+ for(i=0; < copperCount)
+ {
+ int copperID=rmCreateObjectDef("copper mine"+i);
+ rmAddObjectDefItem(copperID, "MineCopper", 1, 0.0);
+ rmSetObjectDefMinDistance(copperID, rmXFractionToMeters(0.10));
+ rmSetObjectDefMaxDistance(copperID, rmXFractionToMeters(0.47));
+ rmAddObjectDefToClass(copperID, classMines);
+ rmAddObjectDefConstraint(copperID, playerConstraint);
+ rmAddObjectDefConstraint(copperID, avoidMines);
+ rmAddObjectDefConstraint(copperID, avoidNatives);
+ rmPlaceObjectDefAtLoc(copperID, 0, 0.5, 0.5);
+ }
+
+
+ // Text
+ rmSetStatusText("",0.90);
+
+
+ // Define and place treasures
+
+ // Easy treasures
+ int nugget1=rmCreateObjectDef("nugget easy");
+ rmAddObjectDefItem(nugget1, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(1, 1);
+ rmAddObjectDefToClass(nugget1, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget1, 20.0);
+ rmSetObjectDefMaxDistance(nugget1, 30.0);
+ rmAddObjectDefConstraint(nugget1, shortPlayerConstraint);
+ rmAddObjectDefConstraint(nugget1, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget1, avoidNuggets);
+ rmAddObjectDefConstraint(nugget1, avoidNatives);
+ rmPlaceObjectDefPerPlayer(nugget1, false, 1);
+
+ // Medium treasures
+ int nugget2=rmCreateObjectDef("nugget medium");
+ rmAddObjectDefItem(nugget2, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(2, 2);
+ rmAddObjectDefToClass(nugget2, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget2, 0.0);
+ rmSetObjectDefMaxDistance(nugget2, rmXFractionToMeters(0.47));
+ rmAddObjectDefConstraint(nugget2, mediumPlayerConstraint);
+ rmAddObjectDefConstraint(nugget2, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget2, avoidNuggets);
+ rmAddObjectDefConstraint(nugget2, avoidNatives);
+ rmPlaceObjectDefAtLoc(nugget2, 0, 0.5, 0.5, 2*cNumberNonGaiaPlayers);
+
+ // Hard treasures
+ int nugget3=rmCreateObjectDef("nugget hard");
+ rmAddObjectDefItem(nugget3, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(3, 3);
+ rmAddObjectDefToClass(nugget3, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget3, 0.0);
+ rmSetObjectDefMaxDistance(nugget3, rmXFractionToMeters(0.47));
+ rmAddObjectDefConstraint(nugget3, longPlayerConstraint);
+ rmAddObjectDefConstraint(nugget3, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget3, avoidNuggets);
+ rmAddObjectDefConstraint(nugget3, avoidNatives);
+ rmPlaceObjectDefAtLoc(nugget3, 0, 0.5, 0.5, 2*cNumberNonGaiaPlayers);
+
+ // Very hard treasures
+ int nugget4=rmCreateObjectDef("nugget nuts");
+ rmAddObjectDefItem(nugget4, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(4, 4);
+ rmAddObjectDefToClass(nugget4, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget4, 0.0);
+ rmSetObjectDefMaxDistance(nugget4, rmXFractionToMeters(0.47));
+ rmAddObjectDefConstraint(nugget4, veryLongPlayerConstraint);
+ rmAddObjectDefConstraint(nugget4, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget4, avoidNuggets);
+ rmAddObjectDefConstraint(nugget4, avoidNatives);
+ if (cNumberNonGaiaPlayers <= 4)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 2);
+ else if (cNumberNonGaiaPlayers >= 5)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 3);
+ else if (cNumberNonGaiaPlayers >= 7)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 4);
+
+ // Random trees
+ for (i=0; < 20*cNumberNonGaiaPlayers)
+ {
+ int randomtreeID = rmCreateObjectDef("random trees "+i);
+ rmAddObjectDefItem(randomtreeID, "TreeSonora", 1, 1);
+ rmSetObjectDefMinDistance(randomtreeID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(randomtreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefToClass(randomtreeID, classForest);
+ rmAddObjectDefConstraint(randomtreeID, avoidAll);
+ rmAddObjectDefConstraint(randomtreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(randomtreeID, shortAvoidStartingUnits);
+ rmAddObjectDefConstraint(randomtreeID, avoidNatives);
+ rmPlaceObjectDefAtLoc(randomtreeID, 0, 0.5, 0.5);
+ }
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH()) {
+
+ int randLoc = rmRandInt(1,2);
+ float xLoc = 0.4;
+ float yLoc = 0.4;
+ float walk = 0.03;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, 0);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ // Text
+ rmSetStatusText("",1.0);
+}
diff --git a/RMM/SaharaLarge.xml b/RMM/SaharaLarge.xml
new file mode 100644
index 0000000..2550e1a
--- /dev/null
+++ b/RMM/SaharaLarge.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\sahara\sahara_ss_01
+ ui\random_map\africa\sahara\sahara_ss_02
+ ui\random_map\africa\sahara\sahara_ss_03
+
\ No newline at end of file
diff --git a/RMM/SaharaLarge.xs b/RMM/SaharaLarge.xs
new file mode 100644
index 0000000..4e5c3e9
--- /dev/null
+++ b/RMM/SaharaLarge.xs
@@ -0,0 +1,614 @@
+// RM script of Sahara
+// For K&B mod
+// By AOE_Fan
+// TAD-compatible version!
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+void main(void)
+{
+ // Text
+ // Make the loading bar move
+ rmSetStatusText("",0.01);
+
+
+ // Chooses the 3 natives - Sudanese or Berbers randomly
+
+ int nativeInt1 = rmRandInt(1,2);
+ int nativeInt2 = rmRandInt(1,2);
+ int nativeInt3 = rmRandInt(1,2);
+
+ // Native 1
+ if (nativeInt1 == 1)
+ rmSetSubCiv(0, "Aztecs");
+ else
+ rmSetSubCiv(0, "Aztecs");
+
+ // Native 2
+ if (nativeInt2 == 1)
+ rmSetSubCiv(1, "Sufi");
+ else
+ rmSetSubCiv(1, "Sufi");
+
+ // Native 3
+ if (nativeInt3 == 1)
+ rmSetSubCiv(2, "Aztecs");
+ else
+ rmSetSubCiv(2, "Aztecs");
+
+
+ // Picks the map size
+ int playerTiles = 20000;
+ if (cNumberNonGaiaPlayers > 4)
+ playerTiles = 18000;
+ if (cNumberNonGaiaPlayers > 6)
+ playerTiles = 16000;
+
+
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, size);
+
+
+ // Chooses if 3rd native starts from north or south
+ int native3Place = rmRandInt(1,2);
+
+
+ // Set map the map smoothness
+ rmSetMapElevationHeightBlend(1);
+
+
+ // Chooses the side where teams start in team games
+ int teamSide = rmRandInt(1,4);
+
+
+ // Picks a default water height
+ rmSetSeaLevel(0.0);
+
+
+ // Pick lighting
+ rmSetLightingSet("3x01a_newengland");
+
+
+ // Picks default terrain and map type
+ rmSetMapElevationParameters(cElevTurbulence, 0.08, 4, 0.5, 12.0);
+ rmTerrainInitialize("borneo\shoreline1_borneo", 1.0);
+ rmSetMapType("mongolia");
+ rmSetMapType("grass");
+ rmSetMapType("land");
+
+
+ chooseMercs();
+
+
+ // Corner constraint
+ rmSetWorldCircleConstraint(true);
+
+ // Define classes, these are used for constraints
+ int classPlayer=rmDefineClass("player");
+ int classAnimals=rmDefineClass("animals");
+ int classMines=rmDefineClass("mines");
+ int classRocks=rmDefineClass("rocks");
+ int classForest=rmDefineClass("forest");
+ rmDefineClass("startingUnit");
+ rmDefineClass("nuggets");
+ rmDefineClass("natives");
+ rmDefineClass("classPatch");
+
+
+ // Define constraints - used for things to avoid certain things
+
+ // Map edge and centre constraints
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ // 1/4 slice of map constraints
+ int Northward=rmCreatePieConstraint("northMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(20), rmDegreesToRadians(40));
+ int Eastward=rmCreatePieConstraint("eastMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(80), rmDegreesToRadians(150));
+ int Southward=rmCreatePieConstraint("southMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(200), rmDegreesToRadians(220));
+ int Westward=rmCreatePieConstraint("westMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(260), rmDegreesToRadians(330));
+
+ // All player things avoidance
+ int veryLongPlayerConstraint=rmCreateClassDistanceConstraint("nuggets stay away from players very long", classPlayer, 70.0);
+ int longPlayerConstraint=rmCreateClassDistanceConstraint("nuggets stay away from players long", classPlayer, 55.0);
+ int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 35.0);
+ int mediumPlayerConstraint=rmCreateClassDistanceConstraint("nuggets stay away from players medium", classPlayer, 40.0);
+ int shortPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players short", classPlayer, 20.0);
+ int shortestPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players shortest", classPlayer, 18.0);
+ int shortAvoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units short", rmClassID("startingUnit"), 12.0);
+ int shortyPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players shortest", classPlayer, 16.0);
+
+ // Resource avoidance
+ int avoidMines=rmCreateClassDistanceConstraint("avoid mines", classMines, 65.0);
+ int avoidStartResource=rmCreateTypeDistanceConstraint("start resource no overlap", "resource", 10.0);
+ int animalConstraint=rmCreateClassDistanceConstraint("avoid all animals", classAnimals, 40.0);
+ int shortAnimalConstraint=rmCreateClassDistanceConstraint("short avoid all animals", classAnimals, 5.0);
+ int avoidRocks=rmCreateClassDistanceConstraint("rocks avoid rocks", classRocks, 100.0);
+ int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
+ int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "fish", 18.0);
+
+ // Avoid impassable land
+ int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 6.0);
+
+ // Nugget avoidance
+ int avoidNuggets=rmCreateClassDistanceConstraint("stuff avoids nuggets", rmClassID("nuggets"), 60.0);
+
+ // Native avoidance
+ int avoidNatives=rmCreateClassDistanceConstraint("things avoids natives", rmClassID("natives"), 10.0);
+ int nativesAvoidNatives=rmCreateClassDistanceConstraint("natives avoids natives", rmClassID("natives"), 100.0);
+
+ // Decoration avoidance
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
+ int avoidPatch=rmCreateClassDistanceConstraint("patches avoid patches", rmClassID("classPatch"), 2.0);
+
+
+ // Text
+ rmSetStatusText("",0.10);
+
+
+ // Place players - in team and FFA games
+
+ // Player placement if FFA (Free For All) - place players in circle
+ if(cNumberTeams > 2)
+ {
+ rmSetTeamSpacingModifier(0.7);
+ rmPlacePlayersCircular(0.36, 0.36, 0.0);
+ }
+
+ // Player placement if teams - place teams in circle to apart from each other
+ if(cNumberTeams == 2)
+ {
+ rmSetPlacementTeam(0);
+ if (teamSide == 1)
+ rmSetPlacementSection(0.00, 0.25);
+ else if (teamSide == 2)
+ rmSetPlacementSection(0.25, 0.50);
+ else if (teamSide == 3)
+ rmSetPlacementSection(0.50, 0.75);
+ else if (teamSide == 4)
+ rmSetPlacementSection(0.75, 1.00);
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.36, 0.36, 0.0);
+
+ rmSetPlacementTeam(1);
+ if (teamSide == 1)
+ rmSetPlacementSection(0.50, 0.75);
+ else if (teamSide == 2)
+ rmSetPlacementSection(0.75, 1.00);
+ else if (teamSide == 3)
+ rmSetPlacementSection(0.00, 0.25);
+ else if (teamSide == 4)
+ rmSetPlacementSection(0.25, 0.50);
+ rmSetTeamSpacingModifier(0.25);
+ rmPlacePlayersCircular(0.36, 0.36, 0.0);
+ }
+
+
+ // Text
+ rmSetStatusText("",0.20);
+
+
+ // Define and place players' area, green terrain
+
+ float playerFraction=rmAreaTilesToFraction(1100);
+ for(i=1; 2)
+ rmAddGroupingConstraint(nativeVillageID, nativesAvoidNatives);
+ if(cNumberTeams == 2)
+ rmAddGroupingConstraint(nativeVillageID, Eastward);
+ rmAddGroupingToClass(nativeVillageID, rmClassID("natives"));
+ rmPlaceGroupingAtLoc(nativeVillageID, 0, 0.5, 0.5);
+
+ // Native 2
+ int nativeVillage2ID = -1;
+ int nativeVillage2Type = rmRandInt(1,5);
+ if (nativeInt2 == 1)
+ nativeVillage2ID = rmCreateGrouping("Sufi A", "native sufi mosque mongol "+nativeVillage2Type);
+ else
+ nativeVillage2ID = rmCreateGrouping("Sufi A", "native sufi mosque mongol "+nativeVillage2Type);
+ rmSetGroupingMinDistance(nativeVillage2ID, rmXFractionToMeters(0.15));
+ rmSetGroupingMaxDistance(nativeVillage2ID, rmXFractionToMeters(0.22));
+ rmAddGroupingConstraint(nativeVillage2ID, playerConstraint);
+ if(cNumberTeams > 2)
+ rmAddGroupingConstraint(nativeVillage2ID, nativesAvoidNatives);
+ if(cNumberTeams == 2)
+ rmAddGroupingConstraint(nativeVillage2ID, Westward);
+ rmAddGroupingToClass(nativeVillage2ID, rmClassID("natives"));
+ rmPlaceGroupingAtLoc(nativeVillage2ID, 0, 0.5, 0.5);
+
+ // Native 3
+ int nativeVillage3ID = -1;
+ int nativeVillage3Type = rmRandInt(1,5);
+ if (nativeInt3 == 1)
+ nativeVillage3ID = rmCreateGrouping("Aztec village"+i, "native Aztec village "+nativeVillage3Type);
+ else
+ nativeVillage3ID = rmCreateGrouping("Aztec village"+i, "native Aztec village "+nativeVillage3Type);
+ rmSetGroupingMinDistance(nativeVillage3ID, rmXFractionToMeters(0.15));
+ rmSetGroupingMaxDistance(nativeVillage3ID, rmXFractionToMeters(0.22));
+ rmAddGroupingConstraint(nativeVillage3ID, playerConstraint);
+ if(cNumberTeams > 2)
+ rmAddGroupingConstraint(nativeVillage3ID, nativesAvoidNatives);
+ if(cNumberTeams == 2 && native3Place == 1)
+ rmAddGroupingConstraint(nativeVillage3ID, Northward);
+ else if(cNumberTeams == 2 && native3Place == 2)
+ rmAddGroupingConstraint(nativeVillage3ID, Southward);
+ rmAddGroupingToClass(nativeVillage3ID, rmClassID("natives"));
+ rmPlaceGroupingAtLoc(nativeVillage3ID, 0, 0.5, 0.5);
+
+
+ // Text
+ rmSetStatusText("",0.80);
+
+
+ // Define and place mines - gold and copper
+
+ // Gold mines
+
+ int goldCount = 3*cNumberNonGaiaPlayers;
+
+ for(i=0; < goldCount)
+ {
+ int goldID=rmCreateObjectDef("gold mine"+i);
+ rmAddObjectDefItem(goldID, "minegold", 1, 0.0);
+ rmSetObjectDefMinDistance(goldID, rmXFractionToMeters(0.10));
+ rmSetObjectDefMaxDistance(goldID, rmXFractionToMeters(0.47));
+ rmAddObjectDefToClass(goldID, classMines);
+ rmAddObjectDefConstraint(goldID, playerConstraint);
+ rmAddObjectDefConstraint(goldID, avoidMines);
+ rmAddObjectDefConstraint(goldID, avoidNatives);
+ rmPlaceObjectDefAtLoc(goldID, 0, 0.5, 0.5);
+ }
+
+ // Copper mines
+
+ int copperCount = 1*cNumberNonGaiaPlayers;
+
+ for(i=0; < copperCount)
+ {
+ int copperID=rmCreateObjectDef("copper mine"+i);
+ rmAddObjectDefItem(copperID, "MineCopper", 1, 0.0);
+ rmSetObjectDefMinDistance(copperID, rmXFractionToMeters(0.10));
+ rmSetObjectDefMaxDistance(copperID, rmXFractionToMeters(0.47));
+ rmAddObjectDefToClass(copperID, classMines);
+ rmAddObjectDefConstraint(copperID, playerConstraint);
+ rmAddObjectDefConstraint(copperID, avoidMines);
+ rmAddObjectDefConstraint(copperID, avoidNatives);
+ rmPlaceObjectDefAtLoc(copperID, 0, 0.5, 0.5);
+ }
+
+
+ // Text
+ rmSetStatusText("",0.90);
+
+
+ // Define and place treasures
+
+ // Easy treasures
+ int nugget1=rmCreateObjectDef("nugget easy");
+ rmAddObjectDefItem(nugget1, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(1, 1);
+ rmAddObjectDefToClass(nugget1, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget1, 20.0);
+ rmSetObjectDefMaxDistance(nugget1, 30.0);
+ rmAddObjectDefConstraint(nugget1, shortPlayerConstraint);
+ rmAddObjectDefConstraint(nugget1, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget1, avoidNuggets);
+ rmAddObjectDefConstraint(nugget1, avoidNatives);
+ rmPlaceObjectDefPerPlayer(nugget1, false, 1);
+
+ // Medium treasures
+ int nugget2=rmCreateObjectDef("nugget medium");
+ rmAddObjectDefItem(nugget2, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(2, 2);
+ rmAddObjectDefToClass(nugget2, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget2, 0.0);
+ rmSetObjectDefMaxDistance(nugget2, rmXFractionToMeters(0.47));
+ rmAddObjectDefConstraint(nugget2, mediumPlayerConstraint);
+ rmAddObjectDefConstraint(nugget2, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget2, avoidNuggets);
+ rmAddObjectDefConstraint(nugget2, avoidNatives);
+ rmPlaceObjectDefAtLoc(nugget2, 0, 0.5, 0.5, 2*cNumberNonGaiaPlayers);
+
+ // Hard treasures
+ int nugget3=rmCreateObjectDef("nugget hard");
+ rmAddObjectDefItem(nugget3, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(3, 3);
+ rmAddObjectDefToClass(nugget3, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget3, 0.0);
+ rmSetObjectDefMaxDistance(nugget3, rmXFractionToMeters(0.47));
+ rmAddObjectDefConstraint(nugget3, longPlayerConstraint);
+ rmAddObjectDefConstraint(nugget3, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget3, avoidNuggets);
+ rmAddObjectDefConstraint(nugget3, avoidNatives);
+ rmPlaceObjectDefAtLoc(nugget3, 0, 0.5, 0.5, 2*cNumberNonGaiaPlayers);
+
+ // Very hard treasures
+ int nugget4=rmCreateObjectDef("nugget nuts");
+ rmAddObjectDefItem(nugget4, "Nugget", 1, 0.0);
+ rmSetNuggetDifficulty(4, 4);
+ rmAddObjectDefToClass(nugget4, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(nugget4, 0.0);
+ rmSetObjectDefMaxDistance(nugget4, rmXFractionToMeters(0.47));
+ rmAddObjectDefConstraint(nugget4, veryLongPlayerConstraint);
+ rmAddObjectDefConstraint(nugget4, avoidImpassableLand);
+ rmAddObjectDefConstraint(nugget4, avoidNuggets);
+ rmAddObjectDefConstraint(nugget4, avoidNatives);
+ if (cNumberNonGaiaPlayers <= 4)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 2);
+ else if (cNumberNonGaiaPlayers >= 5)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 3);
+ else if (cNumberNonGaiaPlayers >= 7)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 4);
+
+ // Random trees
+ for (i=0; < 25*cNumberNonGaiaPlayers)
+ {
+ int randomtreeID = rmCreateObjectDef("random trees "+i);
+ rmAddObjectDefItem(randomtreeID, "TreeSonora", 1, 1);
+ rmSetObjectDefMinDistance(randomtreeID, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(randomtreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefToClass(randomtreeID, classForest);
+ rmAddObjectDefConstraint(randomtreeID, avoidAll);
+ rmAddObjectDefConstraint(randomtreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(randomtreeID, shortAvoidStartingUnits);
+ rmAddObjectDefConstraint(randomtreeID, avoidNatives);
+ rmPlaceObjectDefAtLoc(randomtreeID, 0, 0.5, 0.5);
+ }
+
+ // check for KOTH game mode
+ if(rmGetIsKOTH()) {
+
+ int randLoc = rmRandInt(1,2);
+ float xLoc = 0.4;
+ float yLoc = 0.4;
+ float walk = 0.03;
+
+ ypKingsHillPlacer(xLoc, yLoc, walk, 0);
+ rmEchoInfo("XLOC = "+xLoc);
+ rmEchoInfo("XLOC = "+yLoc);
+ }
+
+ // Text
+ rmSetStatusText("",1.0);
+}
diff --git a/RMM/Savanna Grass.xml b/RMM/Savanna Grass.xml
new file mode 100644
index 0000000..37789e4
--- /dev/null
+++ b/RMM/Savanna Grass.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\savannah\savannah_ss_01
+ ui\random_map\africa\savannah\savannah_ss_02
+ ui\random_map\africa\savannah\savannah_ss_03
+
\ No newline at end of file
diff --git a/RMM/Savanna Grass.xs b/RMM/Savanna Grass.xs
new file mode 100644
index 0000000..426eb55
--- /dev/null
+++ b/RMM/Savanna Grass.xs
@@ -0,0 +1,395 @@
+/* Durokan's Savanna G- April 17 2016 Version 1.1 */
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+void main(void) {
+
+ // Text
+ // Make the loading bar move
+ rmSetStatusText("",0.01);
+
+ // Picks the map size
+ int playerTiles=11000;
+ if (cNumberNonGaiaPlayers >4)
+ playerTiles = 10000;
+ if (cNumberNonGaiaPlayers >6)
+ playerTiles = 8500;
+
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmSetMapSize(size, size);
+
+ rmSetMapType("land");
+ rmSetMapType("grass");
+ rmSetMapType("mongolia");
+ rmTerrainInitialize("texas\ground3_tex");
+ rmSetLightingSet("great plains");
+
+ rmDefineClass("classForest");
+ rmDefineClass("classCliffy");
+
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.49), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
+ int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+ int avoidHunt=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 50.0);
+ int avoidHerd=rmCreateTypeDistanceConstraint("herds avoid herds", "herdable", 50.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+ int avoidCoinMed=rmCreateTypeDistanceConstraint("avoid coin medium", "Mine", 60.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 6.0);
+ int AvoidWaterShort2 = rmCreateTerrainDistanceConstraint("avoid water short 2", "Land", false, 5.0);
+ int AvoidWaterFar = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 35.0);
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 6);
+ int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 7.0);
+ int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+ int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+ int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+ int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 18.0);
+ int avoidTownCenterMore=rmCreateTypeDistanceConstraint("avoid Town Center more", "townCenter", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+ int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+ int avoidNatives=rmCreateClassDistanceConstraint("things avoids natives", rmClassID("natives"), 5.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 7.0);
+
+ int waterHunt = rmCreateTerrainMaxDistanceConstraint("hunts stay near the water", "land", false, 10.0);
+
+ int avoidCliffy=rmCreateClassDistanceConstraint("objects vs. cliffies", rmClassID("classCliffy"), 10.0);
+
+ // Player placing
+
+
+ int spawnSwitch = rmRandFloat(0,1.2);
+
+ rmPlacePlayersCircular(0.4, 0.4, 0.02);
+
+ chooseMercs();
+
+ // Text
+ rmSetStatusText("",0.20);
+
+ int continent2 = rmCreateArea("continent");
+ rmSetAreaSize(continent2, 1.0, 1.0);
+ rmSetAreaLocation(continent2, 0.5, 0.0);
+ rmSetAreaTerrainType(continent2, "texas\ground3_tex");
+ rmSetAreaBaseHeight(continent2, 0.0);
+ rmSetAreaCoherence(continent2, 1.0);
+ rmSetAreaSmoothDistance(continent2, 10);
+ rmSetAreaHeightBlend(continent2, 1);
+ //rmSetAreaEdgeFilling(continent2, 5);
+ rmSetAreaElevationNoiseBias(continent2, 0);
+ rmSetAreaElevationEdgeFalloffDist(continent2, 10);
+ rmSetAreaElevationVariation(continent2, 5);
+ rmSetAreaElevationPersistence(continent2, .2);
+ rmSetAreaElevationOctaves(continent2, 5);
+ rmSetAreaElevationMinFrequency(continent2, 0.04);
+ rmSetAreaElevationType(continent2, cElevTurbulence);
+ rmBuildArea(continent2);
+
+
+ int lakeID9=rmCreateArea("round lake small");
+ rmSetAreaLocation(lakeID9, 0.5, 0.5);
+ rmSetAreaSize(lakeID9, .05, .05);
+ rmSetAreaWaterType(lakeID9, "texas pond");
+ rmSetAreaBaseHeight(lakeID9, 0.0);
+ rmSetAreaCoherence(lakeID9, .86);
+ rmBuildArea(lakeID9);
+
+ int island = rmCreateArea("island");
+ rmSetAreaSize(island, 0.003, 0.003);
+ rmSetAreaLocation(island, 0.44, 0.56);
+ rmSetAreaTerrainType(island, "texas\ground3_tex");
+ rmSetAreaBaseHeight(island, -.5);
+ rmSetAreaCoherence(island, 0.85);
+ rmBuildArea(island);
+
+ int island2 = rmCreateArea("island2");
+ rmSetAreaSize(island2, 0.003, 0.003);
+ rmSetAreaLocation(island2, 0.56, 0.44);
+ rmSetAreaTerrainType(island2, "texas\ground3_tex");
+ rmSetAreaBaseHeight(island2, -.5);
+ rmSetAreaCoherence(island2, 0.85);
+ rmBuildArea(island2);
+
+ int island3 = rmCreateArea("island3");
+ rmSetAreaSize(island3, 0.01, 0.01);
+ rmSetAreaLocation(island3, 0.5, 0.5);
+ rmSetAreaTerrainType(island3, "texas\ground3_tex");
+ rmSetAreaBaseHeight(island3, 0.0);
+ rmSetAreaCoherence(island3, 0.85);
+ rmBuildArea(island3);
+
+ for (j=0; < 4) {
+ int cliffies = rmCreateArea("le balanced cliffies"+j);
+ rmAddAreaToClass(cliffies, rmClassID("classCliffy"));
+ rmSetAreaSize(cliffies, 0.004, 0.004);
+ rmSetAreaCliffType(cliffies, "texas");
+ rmSetAreaCliffEdge(cliffies, 1, 1, 0.0, 0.0, 1);
+ rmSetAreaCliffPainting(cliffies, true, true, true, 1.5, true);
+ rmSetAreaCliffHeight(cliffies, 3, 0.1, 0.5);
+ rmSetAreaCoherence(cliffies, .88);
+ if(j==0){
+ rmSetAreaLocation(cliffies, .3, .3);
+ }else if(j==1){
+ rmSetAreaLocation(cliffies, .7, .7);
+ }else if(j==2){
+ rmSetAreaLocation(cliffies, .7, .3);
+ }else{
+ rmSetAreaLocation(cliffies, .3, .7);
+ }
+ rmBuildArea(cliffies);
+ }
+
+ for (j=0; < 4) {
+ int satelliteLakes=rmCreateArea("satellite lakes"+j);
+ rmSetAreaSize(satelliteLakes, .005, .005);
+ rmSetAreaWaterType(satelliteLakes, "texas pond");
+ rmSetAreaBaseHeight(satelliteLakes, 0.0);
+ rmSetAreaCoherence(satelliteLakes, .86);
+ if(j==0){
+ rmSetAreaLocation(satelliteLakes, 0.5, 0.25);
+ }else if(j==1){
+ rmSetAreaLocation(satelliteLakes, 0.5, 0.75);
+ }else if(j==2){
+ rmSetAreaLocation(satelliteLakes, 0.75, 0.5);
+ }else{
+ rmSetAreaLocation(satelliteLakes, 0.25, 0.5);
+ }
+ rmBuildArea(satelliteLakes);
+ }
+
+ // Build grassy areas everywhere. Whee!
+ int numTries=2*cNumberNonGaiaPlayers;
+ for (i=0;
-
+
ui\random_map\unknown\unknown_ss_01
ui\random_map\unknown\unknown_ss_02
ui\random_map\unknown\unknown_ss_03
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/RMM/UnknownLand.xs b/RMM/UnknownLand.xs
new file mode 100644
index 0000000..775932e
--- /dev/null
+++ b/RMM/UnknownLand.xs
@@ -0,0 +1,8224 @@
+// Gandalf's Random Land Map - TAD
+// a random map for AOE3: TAD
+// by RF_Gandalf
+
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+include "mercenaries.xs";
+
+void main(void)
+{
+ // Text
+ rmSetStatusText("",0.01);
+
+// Set up for variables
+ string baseType = "";
+ string pondType = "";
+ string cliffType = "";
+ string forestType = "";
+ string forest2Type = "";
+ string riverType = "";
+ string treeType = "";
+ string deerType = "";
+ string deer2Type = "";
+ string sheepType = "";
+ string centerHerdType = "";
+ string fishType = "";
+ string native1Name = "";
+ string native2Name = "";
+ string patchMixType = "";
+ string mineType = "";
+ string tradeRouteType1 = "";
+ string tradeRouteType2 = "";
+
+// Pick pattern for trees, terrain, features, etc.
+ int patternChance = rmRandInt(29,37);
+ int variantChance = rmRandInt(1,2);
+ int lightingChance = rmRandInt(1,2);
+ int axisChance = rmRandInt(1,2);
+ int playerSide = rmRandInt(1,2);
+ int positionChance = rmRandInt(1,2);
+ int distChance = rmRandInt(1,4);
+ int sectionChance = rmRandInt(1,3);
+ int ffaChance = rmRandInt(1,4);
+ int trPattern = rmRandInt(0,11);
+ int socketPattern = rmRandInt(1,2);
+ int nativeSetup = rmRandInt(0,22);
+ if (cNumberNonGaiaPlayers > 5)
+ {
+ if ((nativeSetup == 10) || (nativeSetup == 11))
+ {
+ if (rmRandInt(1,2) == 2)
+ nativeSetup = rmRandInt(12,22);
+ else
+ nativeSetup = rmRandInt(0,9);
+ }
+ if ((trPattern == 2) || (trPattern == 3))
+ {
+ if (rmRandInt(1,17) < 8)
+ nativeSetup = rmRandInt(16,22);
+ else
+ nativeSetup = rmRandInt(0,9);
+ }
+ }
+ else
+ {
+ if ((trPattern == 2) || (trPattern == 3))
+ {
+ if (rmRandInt(1,17) < 8)
+ nativeSetup = rmRandInt(16,22);
+ else
+ nativeSetup = rmRandInt(0,9);
+ }
+ if ((trPattern == 8) || (trPattern == 9))
+ {
+ nativeSetup = rmRandInt(0,20);
+ }
+ }
+ int nativePattern = -1;
+ int nativeChoice = rmRandInt(1,2);
+ int nativeNumber = rmRandInt(2,6);
+ int endPosition = rmRandInt(1,3);
+ int sidePosition = rmRandInt(1,3);
+ int sheepChance = rmRandInt(1,2);
+ int featureChance = rmRandInt(1,10);
+ int cliffChance = rmRandInt(1,10);
+ int makeCliffs = -1;
+ int cliffVariety = rmRandInt(0,5);
+ int bareCliffs = -1;
+ int makeLake = -1;
+ int makePonds = -1;
+ int makeIce = -1;
+ int makeRiver = -1;
+ int centerMt = -1;
+ int forestMt = -1;
+ int makeCentralHighlands = -1;
+ int makeCentralCanyon = -1;
+ int vultures = -1;
+ int eagles = -1;
+ int plainsMap = -1;
+ int tropicalMap = -1;
+ int hillTrees = -1;
+ int placeBerries = 1;
+ int berryNum = rmRandInt(2,3);
+ if (cNumberNonGaiaPlayers > 5)
+ berryNum = rmRandInt(4,6);
+ else if (cNumberNonGaiaPlayers > 3)
+ berryNum = rmRandInt(3,4);
+ int reducedForest = -1;
+ int mtPattern = rmRandInt(1,4);
+ int extendCenter = rmRandInt(0,2);
+ int lakePos = rmRandInt(0,3);
+ int clearCenter = -1;
+ int clearCenterChance = -1;
+ int makeCentralForestPatch = -1;
+ int forestDist = rmRandInt(12,18);
+ if (cNumberNonGaiaPlayers < 5)
+ forestDist = rmRandInt(11,16);
+ int forSize = rmRandInt(1,3);
+ int twoChoice = rmRandInt(1,2);
+ int threeChoice = rmRandInt(1,3);
+ int fourChoice = rmRandInt(1,4);
+ int fiveChoice = rmRandInt(1,5);
+ int sixChoice = rmRandInt(1,6);
+ int placeGold = rmRandInt(1,5);
+ int coverUp = 0;
+ int forestCoverUp = 0;
+ int specialPatch = 0;
+ int noCliffForest = 0;
+ int extraBerries = 0;
+ int mineChance = rmRandInt(1,5);
+ int mineNumber = rmRandInt(0,8);
+ int startingOutpost = rmRandInt(1,8);
+ int dualForest = 0;
+ int denseForest = 0;
+ int forestSize = 0;
+ int patchSize = 0;
+ int bonusCrates = rmRandInt(1,5);
+
+// Picks the map size
+ int playerTiles=14800;
+ if (cNumberNonGaiaPlayers > 7)
+ playerTiles = 11500;
+ else if (cNumberNonGaiaPlayers > 5)
+ playerTiles = 12500;
+ else if (cNumberNonGaiaPlayers > 3)
+ playerTiles = 13000;
+ else if (cNumberNonGaiaPlayers == 3)
+ playerTiles = 13500;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, size);
+
+// Elevation
+ int elevationChance = rmRandInt(1,4);
+ // rmSetMapElevationParameters(long type, float minFrequency, long numberOctaves, float persistence, float heightVariation)
+
+ if (elevationChance == 1)
+ {
+ rmSetMapElevationParameters(cElevTurbulence, 0.4, 6, 0.7, 5.0);
+ rmSetMapElevationHeightBlend(1.0);
+ }
+ else if (elevationChance == 2)
+ {
+ rmSetMapElevationParameters(cElevTurbulence, 0.04, 3, 0.5, 6.0);
+ rmSetMapElevationHeightBlend(1.0);
+ }
+ else if (elevationChance == 3)
+ {
+ rmSetMapElevationParameters(cElevTurbulence, 0.1, 5, 0.2, 5.0);
+ rmSetMapElevationHeightBlend(0.9);
+ }
+ else if (elevationChance == 4)
+ {
+ rmSetMapElevationParameters(cElevTurbulence, 0.2, 4, 0.2, 3.0);
+ rmSetMapElevationHeightBlend(0.8);
+ }
+
+// Pick terrain patterns and features
+// patternChance = 33; // =========================================================================================
+// featureChance = 6;
+// trPattern = 1;
+// extendCenter = 0;
+// fourChoice = 1;
+// threeChoice = 2;
+// sixChoice = 1;
+// nativeSetup = 22;
+// lightingChance = 1;
+// extendCenter = 2;
+// variantChance = 1;
+// mineNumber = 0;
+
+ if (patternChance == 1) // NE
+ {
+ rmSetSeaType("new england coast");
+ rmSetMapType("newEngland");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Great Lakes");
+ else
+ rmSetLightingSet("new england");
+ baseType = "newengland_grass";
+ forestType = "new england forest";
+ riverType = "new england lake";
+ cliffType = "New England Inland Grass";
+ pondType = "new england lake";
+ treeType = "TreeNewEngland";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "moose";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "moose";
+ centerHerdType = "turkey";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishSalmon";
+ mineType = "mine";
+ hillTrees = rmRandInt(0,1);
+ if (cliffChance > 2)
+ makeCliffs = 1;
+ if (featureChance == 1)
+ makeLake = 1;
+ else if (featureChance == 2)
+ makePonds = 1;
+ else if (featureChance < 6)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ makePonds = 0;
+ }
+ else if (featureChance < 8)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ makeCliffs = 2;
+ makePonds = 0;
+ }
+ nativePattern = 40;
+ }
+ else if (patternChance == 2) // carolina
+ {
+ rmSetSeaType("atlantic coast");
+ rmSetMapType("carolina");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("312b_washington");
+ else
+ rmSetLightingSet("carolina");
+ baseType = "carolina_grass";
+ forestType = "carolina pine forest";
+ riverType = "Amazon River";
+ cliffType = "Carolina Inland";
+ treeType = "TreeCarolinaGrass";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "turkey";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishBass";
+ mineType = "mine";
+ hillTrees = rmRandInt(0,1);
+ extraBerries = 2;
+ if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 6)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ cliffChance = 2;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+ if (nativeChoice == 1)
+ nativePattern = 3;
+ else
+ nativePattern = 40;
+ }
+ else if (patternChance == 3) // bayou
+ {
+ rmSetSeaType("yucatan Coast");
+ rmSetMapType("bayou");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("berlin dusk");
+ else
+ rmSetLightingSet("bayou");
+ baseType = "bayou_grass";
+ forestType = "bayou swamp forest";
+ pondType = "bayou";
+ treeType = "TreeBayou";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "turkey";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishBass";
+ mineType = "mine";
+ eagles = 1;
+ makeCliffs = 0;
+ if (rmRandInt(1,5) > 1)
+ makeLake = 1;
+ extraBerries = 2;
+ if (threeChoice == 1)
+ nativePattern = 3;
+ else if (threeChoice == 2)
+ nativePattern = 21;
+ else
+ nativePattern = 42;
+ }
+ else if (patternChance == 4) // great lakes green
+ {
+ if (variantChance == 1)
+ rmSetSeaType("hudson bay");
+ else
+ rmSetSeaType("new england coast");
+ rmSetMapType("greatlakes");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("constantinople");
+ else
+ rmSetLightingSet("Great Lakes");
+ baseType = "greatlakes_grass";
+ forestType = "great lakes forest";
+ cliffType = "New England";
+ pondType = "great lakes";
+ treeType = "TreeGreatLakes";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "moose";
+ centerHerdType = "bison";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "moose";
+ }
+ sheepType = "sheep";
+ fishType = "FishBass";
+ mineType = "mine";
+ hillTrees = rmRandInt(0,1);
+ extraBerries = 2;
+ if (featureChance == 1)
+ makePonds = 1;
+ else if (featureChance < 4)
+ makeLake = 1;
+ else if (featureChance < 6)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralCanyon = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 9)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ if (cliffChance >6)
+ makeCliffs = 1;
+
+ if (fiveChoice == 1)
+ nativePattern = 4;
+ else if (fiveChoice == 2)
+ nativePattern = 5;
+ else if (fiveChoice == 3)
+ nativePattern = 40;
+ else if (fiveChoice == 4)
+ nativePattern = 22;
+ else
+ nativePattern = 40;
+ }
+ else if (patternChance == 5) // great lakes winter
+ {
+ rmSetSeaType("great lakes ice");
+ rmSetMapType("greatlakes");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("308b_caribbeanlight");
+ else
+ rmSetLightingSet("Great Lakes Winter");
+ baseType = "greatlakes_snow";
+ forestType = "great lakes forest snow";
+ riverType = "Yukon River";
+ pondType = "great lakes ice";
+ treeType = "TreeGreatLakesSnow";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "moose";
+ centerHerdType = "elk";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "bison";
+ centerHerdType = "moose";
+ }
+ sheepType = "sheep";
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ else
+ mineType = "MineCopper";
+ placeBerries = 0;
+ hillTrees = rmRandInt(0,1);
+ if (featureChance < 4)
+ makeLake = 1;
+ else if (featureChance < 7)
+ makeIce = 1;
+ else if (featureChance < 9)
+ forestMt = 1;
+ else if (featureChance == 9)
+ makeRiver = 1;
+
+ if (fiveChoice == 1)
+ nativePattern = 4;
+ else if (fiveChoice == 2)
+ nativePattern = 5;
+ else if (fiveChoice == 3)
+ nativePattern = 40;
+ else if (fiveChoice == 4)
+ nativePattern = 22;
+ else
+ nativePattern = 40;
+ }
+ else if (patternChance == 6) // saguenay
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("saguenay");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("lisbon");
+ else
+ rmSetLightingSet("saguenay");
+ baseType = "saguenay grass";
+ forestType = "saguenay forest";
+ riverType = "saguenay lake";
+ pondType = "saguenay lake";
+ treeType = "TreeSaguenay";
+ if (variantChance == 1)
+ {
+ deerType = "caribou";
+ deer2Type = "moose";
+ centerHerdType = "caribou";
+ }
+ else
+ {
+ deerType = "caribou";
+ deer2Type = "caribou";
+ centerHerdType = "moose";
+ }
+ sheepType = "sheep";
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ else
+ mineType = "MineCopper";
+ extraBerries = 1;
+ makePonds = rmRandInt(1,3);
+ if (featureChance < 5)
+ makeLake = 1;
+ else if (featureChance <7)
+ makePonds = 1;
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ makePonds = 0;
+ }
+
+ if (threeChoice == 1)
+ nativePattern = 5;
+ else if (threeChoice == 2)
+ nativePattern = 6;
+ else if (threeChoice == 3)
+ nativePattern = 16;
+ }
+ else if (patternChance == 7) // yukon
+ {
+ rmSetSeaType("great lakes ice");
+ rmSetMapType("yukon");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("305b");
+ else
+ rmSetLightingSet("yukon");
+ baseType = "yukon snow";
+ forestType = "yukon snow forest";
+ riverType = "Yukon River";
+ cliffType = "rocky mountain2";
+ treeType = "TreeYukonSnow";
+ if (variantChance == 1)
+ {
+ deerType = "caribou";
+ deer2Type = "muskOx";
+ centerHerdType = "bighornsheep";
+ }
+ else
+ {
+ deerType = "muskOx";
+ deer2Type = "caribou";
+ centerHerdType = "caribou";
+ }
+ sheepChance = 0;
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "minegold";
+ else
+ mineType = "MineCopper";
+ placeBerries = 0;
+ hillTrees = rmRandInt(0,1);
+ clearCenterChance = 3;
+ if (featureChance < 4)
+ {
+ centerMt = 1;
+ cliffVariety = rmRandInt(1,5);
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 2;
+ }
+ else if (featureChance < 9)
+ {
+ makeIce = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 9)
+ {
+ makeRiver = 1;
+ clearCenterChance = 0;
+ }
+ if (cliffChance > 2)
+ makeCliffs = 1;
+
+ if (fiveChoice == 1)
+ nativePattern = 5;
+ else if (fiveChoice == 2)
+ nativePattern = 6;
+ else if (fiveChoice == 3)
+ nativePattern = 8;
+ else if (fiveChoice == 4)
+ nativePattern = 27;
+ else
+ nativePattern = 28;
+ }
+ else if (patternChance == 8) // rockies
+ {
+ rmSetSeaType("great lakes");
+ rmSetMapType("rockies");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("305b");
+ else
+ rmSetLightingSet("rockies");
+ baseType = "rockies_grass";
+ forestType = "rockies forest";
+ cliffType = "rocky mountain2";
+ treeType = "TreeRockies";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "elk";
+ centerHerdType = "bighornsheep";
+ }
+ else
+ {
+ deerType = "elk";
+ deer2Type = "elk";
+ centerHerdType = "bighornsheep";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "minegold";
+ else
+ mineType = "mine";
+ eagles = 1;
+ hillTrees = 1;
+ reducedForest = 1;
+ if (featureChance < 6)
+ centerMt = 1;
+ else
+ makeCentralHighlands = 1;
+ nativeChoice = rmRandInt(1,5);
+ if (nativeChoice == 1)
+ nativePattern = 23;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 19;
+ else if (nativeChoice == 4)
+ nativePattern = 8;
+ else if (nativeChoice == 5)
+ nativePattern = 28;
+ }
+ else if (patternChance == 9) // great plains 1
+ {
+ rmSetSeaType("Yucatan coast");
+ rmSetMapType("greatPlains");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("ottoman morning");
+ else
+ rmSetLightingSet("great plains");
+ baseType = "great plains grass";
+ forestType = "great plains forest";
+ riverType = "Amazon River";
+ cliffType = "Great Plains";
+ pondType = "great plains pond";
+ treeType = "TreeGreatPlains";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "pronghorn";
+ centerHerdType = "bison";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "elk";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishBass";
+ mineType = "mine";
+ vultures = 1;
+ plainsMap = 1;
+ extraBerries = 2;
+ clearCenterChance = 2;
+ if (featureChance == 1)
+ makePonds = 1;
+ else if (featureChance < 4)
+ makeLake = 1;
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ cliffChance = 0;
+ clearCenterChance = 0;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+ if (rmRandInt(1,2) == 1)
+ bareCliffs = 1;
+ cliffVariety = rmRandInt(2,7);
+ if (cliffVariety == 4)
+ cliffVariety = 6;
+ if (cliffVariety == 5)
+ cliffVariety = 7;
+ nativeChoice = rmRandInt(1,5);
+ if (nativeChoice == 1)
+ nativePattern = 23;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 19;
+ else if (nativeChoice == 4)
+ nativePattern = 8;
+ else if (nativeChoice == 5)
+ nativePattern = 28;
+ }
+ else if (patternChance == 10) // great plains 2
+ {
+ rmSetSeaType("new england coast");
+ rmSetMapType("greatPlains");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("spc14abuffalo");
+ else
+ rmSetLightingSet("great plains");
+ baseType = "great plains drygrass";
+ forestType = "great plains forest";
+ riverType = "great plains pond";
+ cliffType = "Great Plains";
+ pondType = "great plains pond";
+ treeType = "TreeGreatPlains";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "pronghorn";
+ centerHerdType = "bison";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bison";
+ }
+ sheepType = "cow";
+ fishType = "FishBass";
+ mineType = "mine";
+ vultures = 1;
+ plainsMap = 1;
+ extraBerries = 2;
+ forestCoverUp = 1;
+ clearCenterChance = 1;
+ if (featureChance == 1)
+ makePonds = 1;
+ else if (featureChance == 2)
+ makeLake = 1;
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ cliffChance = 0;
+ clearCenterChance = 0;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+ if (rmRandInt(0,1) == 1)
+ bareCliffs = 1;
+ cliffVariety = rmRandInt(2,7);
+ if (cliffVariety == 4)
+ cliffVariety = 6;
+ if (cliffVariety == 5)
+ cliffVariety = 7;
+ nativeChoice = rmRandInt(1,5);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 8;
+ else if (nativeChoice == 5)
+ nativePattern = 28;
+ }
+ else if (patternChance == 11) // texas grass
+ {
+ rmSetSeaType("new england coast");
+ rmSetMapType("texas");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("pampas");
+ else
+ rmSetLightingSet("texas");
+ baseType = "texas_grass";
+ forestType = "texas forest";
+ riverType = "Amazon River";
+ cliffType = "Texas Grass";
+ pondType = "texas pond";
+ treeType = "TreeTexas";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "deer";
+ centerHerdType = "bison";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bison";
+ }
+ sheepType = "cow";
+ fishType = "FishBass";
+ mineType = "mine";
+ vultures = 1;
+ extraBerries = 2;
+
+ if (cliffChance > 3)
+ makeCliffs = 1;
+ clearCenterChance = 2;
+ if (featureChance == 1)
+ makePonds = 1;
+ else if (featureChance < 4)
+ makeLake = 1;
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance == 7)
+ {
+ makeRiver = 1;
+ makeCliffs = 2;
+ clearCenterChance = 0;
+ }
+
+ nativeChoice = rmRandInt(1,6);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 19;
+ else if (nativeChoice == 5)
+ nativePattern = 20;
+ else
+ nativePattern = 9;
+ }
+ else if (patternChance == 12) // texas desert
+ {
+ rmSetSeaType("new england coast");
+ rmSetMapType("texas");
+ rmSetMapType("grass");
+ if (featureChance == 7)
+ rmSetLightingSet("seville");
+ else
+ {
+ if (lightingChance == 1)
+ rmSetLightingSet("seville");
+ else
+ rmSetLightingSet("texas");
+ }
+ if (lightingChance == 1)
+ baseType = "texas_dirt";
+ else
+ baseType = "texas_grass";
+ forestType = "texas forest dirt";
+ riverType = "Pampas River";
+ cliffType = "Texas";
+ pondType = "texas pond";
+ treeType = "TreeTexasDirt";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "pronghorn";
+ centerHerdType = "pronghorn";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bison";
+ }
+ sheepType = "cow";
+ fishType = "FishBass";
+ mineType = "mine";
+ vultures = 1;
+ clearCenterChance = 1;
+ makeCliffs = 1;
+ if (featureChance < 4)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ makeCliffs = 2;
+ clearCenterChance = 0;
+ }
+
+ nativeChoice = rmRandInt(1,6);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 31;
+ else if (nativeChoice == 5)
+ nativePattern = 38;
+ else
+ nativePattern = 39;
+ }
+ else if (patternChance == 13) // sonora
+ {
+ rmSetSeaType("Atlantic Coast");
+ rmSetMapType("sonora");
+ rmSetMapType("grass");
+ if (featureChance == 10)
+ rmSetLightingSet("pampas");
+ else
+ {
+ if (lightingChance == 1)
+ rmSetLightingSet("sonora");
+ else
+ rmSetLightingSet("pampas");
+ }
+ baseType = "sonora_dirt";
+ forestType = "sonora forest";
+ riverType = "Pampas River";
+ cliffType = "Sonora";
+ cliffVariety = 8;
+ treeType = "TreeSonora";
+ if (variantChance == 1)
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bighornsheep";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bighornsheep";
+ centerHerdType = "bison";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishBass";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ vultures = 1;
+ reducedForest = 1;
+ if (featureChance < 4)
+ {
+ makeCentralCanyon = 1;
+ }
+ else if (featureChance < 6)
+ {
+ makeCentralHighlands = 1;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ }
+ makeCliffs = 1;
+
+ if (fiveChoice == 1)
+ nativePattern = 10;
+ else if (fiveChoice == 2)
+ nativePattern = 31;
+ else if (fiveChoice == 3)
+ nativePattern = 32;
+ else if (fiveChoice == 4)
+ nativePattern = 33;
+ else
+ nativePattern = 37;
+ }
+ else if (patternChance == 14) // yucatan
+ {
+ rmSetSeaType("yucatan Coast");
+ rmSetMapType("yucatan");
+ rmSetMapType("tropical");
+ if (lightingChance == 1)
+ rmSetLightingSet("311b");
+ else
+ rmSetLightingSet("yucatan");
+ baseType = "yucatan_grass";
+ forestType = "yucatan forest";
+ riverType = "Amazon River";
+ cliffType = "Amazon";
+ pondType = "Amazon River Basin";
+ treeType = "TreeYucatan";
+ if (variantChance == 1)
+ {
+ deerType = "tapir";
+ deer2Type = "capybara";
+ centerHerdType = "turkey";
+ }
+ else
+ {
+ deerType = "capybara";
+ deer2Type = "turkey";
+ centerHerdType = "tapir";
+ }
+ sheepChance = 0;
+ fishType = "FishTarpon";
+ mineType = "mine";
+ hillTrees = rmRandInt(0,1);
+ extraBerries = 1;
+ tropicalMap = 1;
+ if (featureChance == 1)
+ makePonds = 1;
+ else if (featureChance == 2)
+ makeLake = 1;
+ else if (featureChance < 5)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 7)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 7)
+ {
+ makeRiver = 1;
+ cliffChance = 2;
+ makePonds = 0;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+
+ if (fiveChoice == 1)
+ nativePattern = 11;
+ else if (fiveChoice == 2)
+ nativePattern = 12;
+ else if (fiveChoice == 3)
+ nativePattern = 34;
+ else if (fiveChoice == 4)
+ nativePattern = 35;
+ else
+ nativePattern = 36;
+ }
+ else if (patternChance == 15) // caribbean
+ {
+ rmSetSeaType("caribbean coast");
+ rmSetMapType("caribbean");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("301a_malta");
+ else
+ rmSetLightingSet("caribbean");
+ baseType = "caribbean grass";
+ forestType = "caribbean palm forest";
+ pondType = "Amazon River Basin";
+ treeType = "TreeCaribbean";
+ cliffType = "Caribbean";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "tapir";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "tapir";
+ centerHerdType = "deer";
+ }
+ sheepChance = 0;
+ fishType = "FishTarpon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "minegold";
+ else
+ mineType = "mine";
+ extraBerries = 2;
+ tropicalMap = 1;
+ if (featureChance < 4)
+ makeLake = 1;
+ else if (featureChance < 6)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+
+ if (fiveChoice == 1)
+ nativePattern = 12;
+ else if (fiveChoice == 2)
+ nativePattern = 13;
+ else if (fiveChoice == 3)
+ nativePattern = 18;
+ else if (fiveChoice == 4)
+ nativePattern = 36;
+ else
+ nativePattern = 42;
+ }
+ else if (patternChance == 16) // amazon
+ {
+ rmSetSeaType("yucatan coast");
+ rmSetMapType("amazonia");
+ rmSetMapType("tropical");
+ if (lightingChance == 1)
+ rmSetLightingSet("323b_inca");
+ else
+ rmSetLightingSet("amazon");
+ baseType = "amazon grass";
+ forestType = "amazon rain forest";
+ riverType = "Amazon River";
+ cliffType = "Amazon";
+ pondType = "Amazon River Basin";
+ treeType = "TreeAmazon";
+ if (variantChance == 1)
+ {
+ deerType = "tapir";
+ deer2Type = "tapir";
+ centerHerdType = "capybara";
+ }
+ else
+ {
+ deerType = "capybara";
+ deer2Type = "tapir";
+ centerHerdType = "capybara";
+ }
+ sheepChance = 0;
+ fishType = "FishTarpon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "minegold";
+ else
+ mineType = "mine";
+ extraBerries = 1;
+ tropicalMap = 1;
+ if (featureChance == 1)
+ makeLake = 1;
+ else if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 6)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 10)
+ {
+ makeRiver = 1;
+ cliffChance = 0;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+
+ if (fiveChoice == 1)
+ nativePattern = 13;
+ else if (fiveChoice == 2)
+ nativePattern = 14;
+ else if (fiveChoice == 3)
+ nativePattern = 15;
+ else if (fiveChoice == 4)
+ nativePattern = 18;
+ else
+ nativePattern = 26;
+ }
+ else if (patternChance == 17) // pampas
+ {
+ rmSetSeaType("Pampas River");
+ rmSetMapType("pampas");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("texas");
+ else
+ rmSetLightingSet("pampas");
+ if (cliffVariety < 3) // not used for cliffs!
+ baseType = "pampas_grass";
+ else
+ baseType = "pampas_dirt";
+ forestType = "pampas forest";
+ treeType = "TreePampas";
+ riverType = "Pampas River";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "rhea";
+ centerHerdType = "rhea";
+ }
+ else
+ {
+ deerType = "rhea";
+ deer2Type = "deer";
+ centerHerdType = "rhea";
+ }
+ sheepType = "llama";
+ fishType = "FishBass";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ clearCenterChance = 2;
+ if (featureChance < 6)
+ {
+ makeRiver = 1;
+ clearCenterChance = 0;
+ }
+ vultures = 1;
+ eagles = 1;
+
+ if (threeChoice == 1)
+ nativePattern = 14;
+ else if (threeChoice == 2)
+ nativePattern = 25;
+ else
+ nativePattern = 26;
+ }
+ else if (patternChance == 18) // patagonia
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("patagonia");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("paris day");
+ else
+ rmSetLightingSet("patagonia");
+ if (twoChoice == 1)
+ {
+ baseType = "patagonia_grass";
+ patchMixType = "patagonia_dirt";
+ }
+ else
+ {
+ baseType = "patagonia_dirt";
+ patchMixType = "patagonia_grass";
+ }
+ forestType = "patagonia forest";
+ cliffType = "Patagonia";
+ pondType = "hudson bay";
+ treeType = "TreePatagoniaDirt";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "rhea";
+ centerHerdType = "rhea";
+ }
+ else
+ {
+ deerType = "rhea";
+ deer2Type = "deer";
+ centerHerdType = "rhea";
+ }
+ sheepType = "llama";
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ hillTrees = rmRandInt(0,1);
+ extraBerries = 2;
+ makeCliffs = 2;
+ specialPatch = 1;
+ if (featureChance < 3)
+ {
+ makeLake = 1;
+ }
+ else if (featureChance < 6)
+ {
+ makeCentralHighlands = 1;
+ clearCenterChance = 2;
+ }
+ else if (featureChance < 8)
+ {
+ makeCentralCanyon = 1;
+ }
+
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 15;
+ else if (fiveChoice == 3)
+ nativePattern = 24;
+ else if (fiveChoice == 4)
+ nativePattern = 25;
+ else
+ nativePattern = 26;
+ }
+ else if (patternChance == 19) // palm desert
+ {
+ rmSetMapType("sonora");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("seville");
+ else
+ rmSetLightingSet("pampas");
+ if (twoChoice == 1)
+ {
+ baseType = "texas_dirt";
+ cliffType = "Texas";
+ }
+ else
+ {
+ baseType = "sonora_dirt";
+ cliffType = "Sonora";
+ }
+ forestType = "caribbean palm forest";
+ riverType = "Pampas River";
+ treeType = "TreeCaribbean";
+ pondType = "texas pond";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "turkey";
+ }
+ fishType = "FishBass";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ sheepType = "cow";
+ vultures = 1;
+ coverUp = 1;
+ makePonds = 0;
+ clearCenterChance = 1;
+ makeCliffs = 2;
+ noCliffForest = 1;
+ if (featureChance < 4)
+ {
+ makeCentralCanyon = 1;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ clearCenterChance = 0;
+ }
+
+ if (fourChoice == 1)
+ nativePattern = 36;
+ else if (fourChoice == 2)
+ nativePattern = 34;
+ else if (fourChoice == 3)
+ nativePattern = 35;
+ else
+ nativePattern = 33;
+ }
+ else if (patternChance == 20) // yukon tundra
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("yukon");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("seville morning");
+ else
+ rmSetLightingSet("yukon");
+ baseType = "yukon grass";
+ forestType = "yukon forest";
+ riverType = "Yukon River";
+ cliffType = "rocky mountain2";
+ if (rmRandInt(1,2) == 1)
+ pondType = "hudson bay";
+ else
+ pondType = "great lakes ice";
+ treeType = "TreeYukon";
+ if (variantChance == 1)
+ {
+ if (featureChance > 8)
+ {
+ makeRiver = 1;
+ deerType = "muskOx";
+ deer2Type = "caribou";
+ centerHerdType = "caribou";
+ }
+ else
+ {
+ centerMt = 1;
+ clearCenterChance = 3;
+ deerType = "muskOx";
+ deer2Type = "caribou";
+ centerHerdType = "bighornsheep";
+ }
+ }
+ else
+ {
+ deerType = "caribou";
+ deer2Type = "muskOx";
+ centerHerdType = "caribou";
+ clearCenterChance = 3;
+ if (featureChance < 4)
+ makeIce = 1;
+ else if (featureChance < 8)
+ makeLake = 1;
+ }
+ sheepChance = 0;
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ placeBerries = 0;
+ hillTrees = 0;
+
+ if (threeChoice == 1)
+ nativePattern = 5;
+ else if (threeChoice == 2)
+ nativePattern = 6;
+ else if (threeChoice == 3)
+ nativePattern = 16;
+ }
+ else if (patternChance == 21) // andes
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("andes");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("greatplainstest");
+ else
+ rmSetLightingSet("andes");
+ if (twoChoice == 1)
+ {
+ baseType = "andes_grass_a";
+ patchMixType = "andes_grass_b";
+ }
+ else
+ {
+ baseType = "andes_grass_b";
+ patchMixType = "andes_grass_a";
+ }
+ forestType = "andes forest";
+ riverType = "Andes River";
+ cliffType = "andes";
+ treeType = "TreeAndes";
+ pondType = "hudson bay";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "rhea";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "guanaco";
+ }
+ sheepType = "llama";
+ fishType = "FishMoonBass";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ hillTrees = rmRandInt(0,1);
+ makeCliffs = 2;
+ eagles = 1;
+ extraBerries = 2;
+ tropicalMap = 1;
+ specialPatch = 1;
+ if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ hillTrees = 0;
+ clearCenterChance = 1;
+ }
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ hillTrees = 0;
+ }
+ else if (featureChance < 7)
+ {
+ centerMt = 1;
+ clearCenterChance = 1;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ }
+
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 24;
+ else if (fiveChoice == 3)
+ nativePattern = 25;
+ else if (fiveChoice == 4)
+ nativePattern = 26;
+ else
+ nativePattern = 18;
+ }
+ else if (patternChance == 22) // araucania green or central
+ {
+ rmSetSeaType("Araucania Central Coast");
+ rmSetMapType("araucania");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Araucania Central");
+ else
+ rmSetLightingSet("Texas");
+ if (fourChoice == 1)
+ {
+ baseType = "araucania_grass_a";
+ patchMixType = "araucania_grass_b";
+ makePonds = rmRandInt(1,5);
+ }
+ else if (fourChoice == 2)
+ {
+ baseType = "araucania_grass_b";
+ patchMixType = "araucania_grass_a";
+ makePonds = rmRandInt(1,5);
+ }
+ else if (fourChoice == 3)
+ {
+ baseType = "araucania_grass_c";
+ patchMixType = "araucania_grass_b";
+ makePonds = rmRandInt(1,5);
+ }
+ else
+ {
+ baseType = "araucania_grass_d";
+ patchMixType = "araucania_grass_c";
+ }
+ forestType = "Araucania Forest";
+ riverType = "Andes River";
+ cliffType = "Araucania Central";
+ treeType = "TreeAraucania";
+ pondType = "great plains pond";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "deer";
+ centerHerdType = "guanaco";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "guanaco";
+ }
+ sheepType = "llama";
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ makeCliffs = 2;
+ coverUp = 1;
+ specialPatch = 1;
+ extraBerries = 1;
+ clearCenterChance = 0;
+ if (featureChance == 1)
+ {
+ if (fourChoice < 4)
+ makeLake = 1;
+ }
+ else if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ clearCenterChance = 2;
+ }
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 7)
+ {
+ centerMt = 1;
+ makeCliffs = 1;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ makePonds = 0;
+ }
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 25;
+ else if (fiveChoice == 3)
+ nativePattern = 11;
+ else if (fiveChoice == 4)
+ nativePattern = 26;
+ else
+ nativePattern = 34;
+ }
+ else if (patternChance == 23) // araucania north
+ {
+ rmSetSeaType("Araucania North Coast");
+ rmSetMapType("araucania");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("NthAraucaniaLight");
+ else
+ rmSetLightingSet("constantinople");
+ if (cliffChance > 3)
+ makeCliffs = 1;
+ if (sixChoice == 1)
+ {
+ baseType = "araucania_north_dirt_a";
+ patchMixType = "araucania_north_grass_a";
+ makeCliffs = 0;
+ }
+ else if (sixChoice == 2)
+ {
+ baseType = "araucania_north_grass_a";
+ patchMixType = "araucania_north_dirt_a";
+ makeCliffs = 0;
+ }
+ else if (sixChoice == 3)
+ {
+ baseType = "araucania_north_grass_a";
+ patchMixType = "araucania_north_grass_b";
+ makeCliffs = 0;
+ }
+ else if (sixChoice == 4)
+ {
+ baseType = "araucania_north_grass_b";
+ patchMixType = "araucania_north_grass_a";
+ }
+ else if (sixChoice == 5)
+ {
+ baseType = "araucania_north_grass_b";
+ patchMixType = "araucania_north_grass_c";
+ }
+ else if (sixChoice == 6)
+ {
+ baseType = "araucania_north_grass_c";
+ patchMixType = "araucania_north_grass_a";
+ }
+ forestType = "North Araucania Forest";
+ riverType = "Pampas River";
+ cliffType = "Araucania North";
+ treeType = "TreeAraucania";
+ pondType = "texas pond";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "deer";
+ centerHerdType = "guanaco";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "guanaco";
+ }
+ sheepType = "llama";
+ fishType = "FishSalmon";
+ mineType = "MineCopper";
+ coverUp = 1;
+ specialPatch = 1;
+ extraBerries = 2;
+ clearCenterChance = 2;
+ hillTrees = 0;
+ if (featureChance < 3)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ }
+
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 24;
+ else if (fiveChoice == 3)
+ nativePattern = 25;
+ else if (fiveChoice == 4)
+ nativePattern = 26;
+ else
+ nativePattern = 18;
+ }
+ else if (patternChance == 24) // araucania south
+ {
+ rmSetSeaType("Araucania Southern Coast");
+ rmSetMapType("araucania");
+ rmSetMapType("snow");
+ if (lightingChance == 2)
+ rmSetLightingSet("SthAraucaniaLight");
+ else
+ rmSetLightingSet("303a_boston");
+ if (fourChoice == 1)
+ {
+ baseType = "araucania_snow_a";
+ patchMixType = "araucania_snow_b";
+ }
+ else if (fourChoice == 2)
+ {
+ baseType = "araucania_snow_a";
+ patchMixType = "araucania_snow_c";
+ }
+ else if (fourChoice == 3)
+ {
+ baseType = "araucania_snow_c";
+ patchMixType = "araucania_snow_a";
+ }
+ else if (fourChoice == 4)
+ {
+ baseType = "araucania_snow_b";
+ patchMixType = "araucania_snow_a";
+ }
+ forestType = "Patagonia Snow Forest";
+ riverType = "Yukon River";
+ cliffType = "Araucania South";
+ treeType = "TreePatagoniaSnow";
+ if (twoChoice == 1)
+ pondType = "great lakes ice";
+ else
+ pondType = "Araucania Southern Coast";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "deer";
+ centerHerdType = "guanaco";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "guanaco";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "llama";
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ placeBerries = 0;
+ hillTrees = rmRandInt(0,1);
+ makeCliffs = 2;
+ noCliffForest = 1;
+ if (featureChance < 3)
+ makeLake = 1;
+ else if (featureChance == 3)
+ {
+ makeCentralHighlands = 1;
+ hillTrees = 0;
+ clearCenterChance = 2;
+ }
+ else if (featureChance == 4)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ hillTrees = 0;
+ }
+ else if (featureChance == 5)
+ {
+ centerMt = 1;
+ hillTrees = 0;
+ }
+ else if (featureChance == 6)
+ {
+ makeIce = 1;
+ hillTrees = 0;
+ cliffChance = 0;
+ }
+ else if (featureChance == 7)
+ {
+ forestMt = 1;
+ hillTrees = 0;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ }
+ if (fourChoice == 1)
+ nativePattern = 14;
+ else if (fourChoice == 2)
+ nativePattern = 25;
+ else if (fourChoice == 3)
+ nativePattern = 26;
+ else
+ nativePattern = 11;
+ }
+ else if (patternChance == 25) // california green
+ {
+ rmSetSeaType("california coast");
+ rmSetMapType("california");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("california");
+ else
+ rmSetLightingSet("new england");
+ if (threeChoice == 1)
+ {
+ baseType = "california_grass";
+ if (twoChoice == 1)
+ patchMixType = "california_grassrocks";
+ else
+ patchMixType = "california_snowground5";
+ }
+ else if (threeChoice == 2)
+ {
+ baseType = "california_grassrocks";
+ if (twoChoice == 1)
+ patchMixType = "california_grass";
+ else
+ patchMixType = "california_snowground5";
+ }
+ else if (threeChoice == 3)
+ {
+ baseType = "california_snowground5";
+ if (twoChoice == 1)
+ patchMixType = "california_grass";
+ else
+ patchMixType = "california_grassrocks";
+ }
+ if (fiveChoice < 3)
+ {
+ forestType = "california redwood forest";
+ treeType = "TreeRedwood";
+ }
+ else if (fiveChoice < 5)
+ {
+ forestType = "California pine forest";
+ treeType = "TreePonderosaPine";
+ }
+ else
+ {
+ forestType = "california madrone forest";
+ treeType = "TreeMadrone";
+ }
+ riverType = "Andes River";
+ cliffType = "California";
+ if (variantChance == 1)
+ {
+ deerType = "elk";
+ deer2Type = "deer";
+ centerHerdType = "elk";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "elk";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "minegold";
+ specialPatch = 1;
+ if (rmRandInt(1,2) == 1)
+ forestCoverUp = 1;
+ hillTrees = rmRandInt(0,1);
+ eagles = 1;
+ extraBerries = 2;
+ if (featureChance == 1)
+ {
+ makeLake = 1;
+ pondType = "california coast";
+ }
+ else if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 6)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 9)
+ {
+ makePonds = 1;
+ pondType = "great plains pond";
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ cliffChance = 2;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+ if (fourChoice < 3)
+ nativePattern = 27;
+ else
+ nativePattern = 28;
+ }
+ else if (patternChance == 26) // california desert
+ {
+ rmSetSeaType("Araucania North Coast");
+ rmSetMapType("california");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("texas");
+ else
+ rmSetLightingSet("307a_beach");
+ if (variantChance == 1)
+ {
+ deerType = "pronghorn";
+ deer2Type = "pronghorn";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "pronghorn";
+ }
+ forestType = "California Desert Forest";
+ treeType = "TreeSonora";
+ if (cliffChance > 5)
+ makeCliffs = 1;
+ if (threeChoice == 1)
+ {
+ baseType = "california_desert0";
+ patchMixType = "california_desert";
+ }
+ else if (threeChoice == 2)
+ {
+ baseType = "california_desert";
+ patchMixType = "california_desert0";
+ }
+ else
+ {
+ baseType = "california_desert2";
+ patchMixType = "california_desert";
+ forestType = "california madrone forest";
+ treeType = "TreeMadrone";
+ makeCliffs = 0;
+ centerHerdType = "elk";
+ }
+ riverType = "Andes River";
+ cliffType = "Sonora";
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishBass";
+ mineType = "mine";
+ hillTrees = rmRandInt(0,1);
+ vultures = 1;
+ coverUp = 1;
+ clearCenterChance = 2;
+ if (featureChance < 3)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 5)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ if (fourChoice < 3)
+ nativePattern = 27;
+ else
+ nativePattern = 43;
+ }
+ else if (patternChance == 27) // nwt
+ {
+ rmSetSeaType("Northwest Territory Water");
+ rmSetMapType("northwestTerritory");
+ rmSetMapType("grass");
+ if (lightingChance == 2)
+ rmSetLightingSet("nwterritory");
+ else
+ rmSetLightingSet("saguenay");
+ baseType = "nwt_grass1";
+ if (twoChoice == 1)
+ {
+ forestType = "NW Territory Birch Forest";
+ treeType = "TreeGreatLakes";
+ }
+ else
+ {
+ forestType = "NW Territory Forest";
+ treeType = "TreeGreatPlains";
+ }
+ riverType = "Northwest Territory Water";
+ cliffType = "Araucania Central";
+ pondType = "Northwest Territory Water";
+ if (variantChance == 1)
+ {
+ deerType = "elk";
+ deer2Type = "deer";
+ centerHerdType = "moose";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "moose";
+ centerHerdType = "elk";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ makeCliffs = 2;
+ eagles = 1;
+ extraBerries = 2;
+ fishType = "FishSalmon";
+ mineType = "mine";
+ hillTrees = rmRandInt(0,1);
+ coverUp = 1;
+ if (featureChance < 3)
+ makeLake = 1;
+ else if (featureChance < 5)
+ makeCentralHighlands = 1;
+ else if (featureChance < 7)
+ forestMt = 1;
+ else if (featureChance == 9)
+ makePonds = 1;
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ makePonds = 0;
+ }
+ if (fourChoice == 1)
+ nativePattern = 27;
+ else if (fourChoice == 2)
+ nativePattern = 28;
+ else if (fourChoice == 3)
+ nativePattern = 7;
+ else
+ nativePattern = 6;
+ }
+ else if (patternChance == 28) // painted desert
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("sonora");
+ rmSetMapType("desert");
+ if (lightingChance == 1)
+ rmSetLightingSet("sonora");
+ else
+ rmSetLightingSet("pampas");
+ if (twoChoice == 1)
+ baseType = "painteddesert_groundmix_1";
+ else
+ baseType = "painteddesert_groundmix_2";
+ forestType = "painteddesert forest";
+ riverType = "Pampas River";
+ cliffType = "Painteddesert";
+ cliffVariety = 8;
+ treeType = "TreePaintedDesert";
+ pondType = "texas pond";
+ if (variantChance == 1)
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bighornsheep";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bighornsheep";
+ centerHerdType = "bison";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishBass";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "MineCopper";
+ vultures = 1;
+ reducedForest = 1;
+ if (featureChance < 4)
+ {
+ makeCentralCanyon = 1;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ }
+ makeCliffs = 1;
+ if (fiveChoice == 1)
+ nativePattern = 30;
+ else if (fiveChoice == 2)
+ nativePattern = 31;
+ else if (fiveChoice == 3)
+ nativePattern = 32;
+ else if (fiveChoice == 4)
+ nativePattern = 33;
+ else
+ nativePattern = 37;
+ }
+ else if (patternChance == 29) // HONSHU
+ {
+ rmSetSeaType("Coastal Japan");
+ rmSetMapType("ceylon");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Honshu");
+ else
+ rmSetLightingSet("new england");
+ baseType = "coastal_japan_a";
+ patchMixType = "coastal_japan_c";
+ forestType = "Coastal Japan Forest";
+ riverType = "Coastal Japan";
+ cliffType = "Coastal Japan";
+ pondType = "Coastal Japan";
+ treeType = "ypTreeJapaneseMaple";
+ if (variantChance == 1)
+ {
+ deerType = "ypNilgai";
+ deer2Type = "ypGiantSalamander";
+ centerHerdType = "ypNilgai";
+ }
+ else
+ {
+ deerType = "ypNilgai";
+ deer2Type = "ypNilgai";
+ centerHerdType = "ypGiantSalamander";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishCatfish";
+ mineType = "mine";
+ specialPatch = 1;
+ if (featureChance == 1)
+ {
+ makeLake = 1;
+ }
+ else if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 6)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ hillTrees = 0;
+ }
+ else if (featureChance == 6)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ nativePattern = 44;
+ }
+ else if (patternChance == 30) // DECCAN
+ {
+ rmSetSeaType("Coastal Japan");
+ rmSetMapType("deccan");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("deccan");
+ else
+ rmSetLightingSet("texas");
+ if (twoChoice == 1)
+ {
+ baseType = "deccan_grassy_Dirt_a";
+ patchMixType = "deccan_grass_a";
+ cliffType = "Deccan Plateau";
+ }
+ else
+ {
+ baseType = "deccan_grass_a";
+ patchMixType = "deccan_grassy_Dirt_a";
+ cliffType = "Deccan Plateau River";
+ }
+ if (threeChoice == 1)
+ {
+ forestType = "Ashoka Forest";
+ forest2Type = "Deccan Forest";
+ treeType = "ypTreeAshoka";
+ if (rmRandInt(1,2) == 1)
+ dualForest = 1;
+ }
+ else if (threeChoice == 2)
+ {
+ forestType = "Eucalyptus Forest";
+ forest2Type = "Deccan Forest";
+ treeType = "ypTreeEucalyptus";
+ if (rmRandInt(1,2) == 1)
+ dualForest = 1;
+ }
+ else
+ {
+ forestType = "Deccan Forest";
+ treeType = "ypTreeDeccan";
+ }
+ riverType = "Deccan Plateau River";
+ if (variantChance == 1)
+ {
+ deerType = "Zebra";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "Zebra";
+ }
+ else
+ {
+ deerType = "Zebra";
+ deer2Type = "Zebra";
+ centerHerdType = "ypWildElephant";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishCatfish";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineCopper";
+ else
+ mineType = "mine";
+ specialPatch = 1;
+ if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ hillTrees = 0;
+ }
+ else if (featureChance == 5)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ cliffChance = 0;
+ }
+ else
+ {
+ if (twoChoice == 2)
+ clearCenter = 1;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+
+ if (threeChoice == 1)
+ nativePattern = 45;
+ else if (threeChoice == 2)
+ nativePattern = 46;
+ else if (threeChoice == 3)
+ nativePattern = 47;
+ }
+ else if (patternChance == 31) // HIMALAYAS
+ {
+ rmSetSeaType("Hudson Bay");
+ rmSetMapType("himalayas");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Himalayas");
+ else
+ rmSetLightingSet("Yukon");
+ baseType = "himalayas_a";
+ patchMixType = "himalayas_b";
+ forestType = "Himalayas Forest";
+ riverType = "Yukon River";
+ cliffType = "himalayas";
+ treeType = "ypTreeHimalayas";
+ if (variantChance == 1)
+ {
+ deerType = "ypIbex";
+ deer2Type = "ypNilgai";
+ centerHerdType = "ypIbex";
+ }
+ else
+ {
+ deerType = "ypNilgai";
+ deer2Type = "ypIbex";
+ centerHerdType = "ypNilgai";
+ }
+ sheepType = "ypYak";
+ fishType = "ypFishCatfish";
+ mineType = "mine";
+ if (rmRandInt(1,2) == 1)
+ placeBerries = 0;
+ specialPatch = 1;
+ clearCenterChance = 1;
+ if (featureChance < 3)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 2;
+ clearCenterChance = 1;
+ }
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ cliffChance = 0;
+ hillTrees = 0;
+ clearCenterChance = 0;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ cliffChance = 0;
+ clearCenterChance = 0;
+ }
+ if (cliffChance > 0)
+ makeCliffs = 1;
+ cliffVariety = 10;
+ nativePattern = 49;
+ }
+ else if (patternChance == 32) // INDOCHINA-BORNEO
+ {
+ rmSetSeaType("borneo coast");
+ rmSetMapType("borneo");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("borneo");
+ else
+ rmSetLightingSet("bayou");
+ baseType = "borneo_grass_a";
+ patchMixType = "borneo_sand_a";
+ if (fourChoice == 1)
+ {
+ forestType = "Borneo Palm Forest";
+ forest2Type = "Borneo Canopy Forest";
+ dualForest = 1;
+ }
+ else if (fourChoice == 2)
+ {
+ forestType = "Borneo Palm Forest";
+ }
+ else if (fourChoice == 3)
+ {
+ forestType = "Borneo Canopy Forest";
+ }
+ else
+ forestType = "Borneo Forest";
+ riverType = "Borneo Water";
+ pondType = "Borneo Water";
+ treeType = "ypTreeBorneo";
+ if (variantChance == 1)
+ {
+ deerType = "ypNilgai";
+ deer2Type = "ypNilgai";
+ centerHerdType = "ypWildElephant";
+ }
+ else
+ {
+ deerType = "ypNilgai";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "ypNilgai";
+ }
+ sheepType = "ypWaterBuffalo";
+ fishType = "ypFishCatfish";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineGold";
+ else
+ mineType = "mine";
+ extraBerries = 1;
+ if (rmRandInt(1,2) == 1)
+ specialPatch = 1;
+ makePonds = rmRandInt(1,8);
+ if (featureChance == 1)
+ {
+ makeLake = 1;
+ makePonds = 0;
+ }
+ else if (featureChance < 4)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance > 8)
+ {
+ makeRiver = 1;
+ cliffChance = 0;
+ makePonds = 0;
+ }
+ makeCliffs = 0;
+
+ nativePattern = 48;
+ }
+ else if (patternChance == 33) // MONGOLIA
+ {
+ rmSetSeaType("Hudson Bay");
+ rmSetMapType("mongolia");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Mongolia");
+ else
+ rmSetLightingSet("Pampas");
+ if (twoChoice == 1)
+ {
+ baseType = "mongolia_grass_b";
+ patchMixType = "mongolia_grass_a";
+ forestType = "Mongolian Forest";
+ treeType = "ypTreeMongolianFir";
+ }
+ else
+ {
+ baseType = "mongolia_desert";
+ patchMixType = "mongolia_grass_b";
+ forestType = "Saxaul Forest";
+ treeType = "ypTreeSaxaul";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "ypSaiga";
+ deer2Type = "Zebra";
+ centerHerdType = "ypSaiga";
+ }
+ else
+ {
+ deerType = "Zebra";
+ deer2Type = "ypSaiga";
+ centerHerdType = "Zebra";
+ }
+ sheepType = "ypYak";
+ fishType = "ypFishCatfish";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineCopper";
+ else
+ mineType = "mine";
+ specialPatch = 1;
+ extraBerries = 2;
+ if (twoChoice == 1)
+ {
+ if (featureChance > 5)
+ clearCenter = 1;
+ }
+ else
+ clearCenterChance = 2;
+
+ makeCliffs = 0;
+
+ nativePattern = 50;
+ }
+ else if (patternChance == 34) // CEYLON
+ {
+ rmSetSeaType("ceylon coast");
+ rmSetMapType("ceylon");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("ceylon");
+ else
+ rmSetLightingSet("Great Lakes");
+ baseType = "ceylon_grass_a";
+ patchMixType = "ceylon_sand_a";
+ forestType = "Ceylon Forest";
+ cliffType = "ceylon";
+ treeType = "ypTreeCeylon";
+ if (variantChance == 1)
+ {
+ deerType = "ypNilgai";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "ypNilgai";
+ }
+ else
+ {
+ deerType = "ypNilgai";
+ deer2Type = "ypNilgai";
+ centerHerdType = "ypWildElephant";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishCarp";
+ if (rmRandInt(1,2) == 1)
+ mineType = "minegold";
+ else
+ mineType = "mine";
+ extraBerries = 1;
+ specialPatch = 1;
+ if (featureChance < 3)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 5)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ hillTrees = 0;
+ }
+ else if (featureChance == 5)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ nativePattern = 51;
+ }
+ else if (patternChance == 35) // YELLOW RIVER
+ {
+ rmSetSeaType("ceylon coast");
+ rmSetMapType("yellowRiver");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("carolina");
+ else
+ rmSetLightingSet("Great Lakes");
+ baseType = "yellow_river_a";
+ patchMixType = "yellow_river_b";
+ dualForest = 1;
+ if (twoChoice == 1)
+ {
+ forestType = "Yellow River Forest";
+ forest2Type = "Bamboo Forest";
+ treeType = "ypTreeBamboo";
+ }
+ else
+ {
+ forestType = "Yellow River Forest";
+ forest2Type = "Ginkgo Forest";
+ treeType = "ypTreeGinkgo";
+ }
+ riverType = "Yellow River";
+ pondType = "Yellow River Flooded";
+ cliffType = "Yellow River";
+ if (variantChance == 1)
+ {
+ deerType = "ypMuskDeer";
+ deer2Type = "ypNilgai";
+ centerHerdType = "ypMuskDeer";
+ }
+ else
+ {
+ deerType = "ypMuskDeer";
+ deer2Type = "ypMuskDeer";
+ centerHerdType = "ypNilgai";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishCarp";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineCopper";
+ else
+ mineType = "mine";
+ specialPatch = 1;
+ makePonds = rmRandInt(1,8);
+ if (featureChance == 1)
+ {
+ makeLake = 1;
+ makePonds = 0;
+ }
+ if (featureChance < 4)
+ {
+ makeCentralHighlands = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance == 4)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ hillTrees = 0;
+ makePonds = 0;
+ }
+ else if (featureChance == 5)
+ {
+ forestMt = 1;
+ cliffChance = 0;
+ }
+ else if (featureChance > 8)
+ {
+ makeRiver = 1;
+ cliffChance = 0;
+ makePonds = 0;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+
+ if (cliffChance > 5)
+ makeCliffs = 1;
+
+ nativePattern = 52;
+ }
+ else if (patternChance == 36) // SIBERIA
+ {
+ rmSetSeaType("new england coast");
+ rmSetMapType("deccan");
+ rmSetMapType("grass");
+ if (featureChance == 7)
+ rmSetLightingSet("great plains");
+ else
+ {
+ if (lightingChance == 1)
+ rmSetLightingSet("great plains");
+ else
+ rmSetLightingSet("texas");
+ }
+ if (lightingChance == 1)
+ baseType = "texas_grass";
+ else
+ baseType = "texas_grass";
+ forestType = "texas forest";
+ riverType = "Pampas River";
+ cliffType = "Texas Grass";
+ pondType = "texas pond";
+ treeType = "TreeTexasDirt";
+ if (variantChance == 1)
+ {
+ deerType = "Zebra";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "ypWildElephant";
+ }
+ else
+ {
+ deerType = "ypWildElephant";
+ deer2Type = "Zebra";
+ centerHerdType = "Zebra";
+ }
+ sheepType = "ypWaterBuffalo";
+ fishType = "FishBass";
+ mineType = "mine";
+ vultures = 1;
+ clearCenterChance = 1;
+ makeCliffs = 1;
+ if (featureChance < 4)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance < 7)
+ {
+ makeCentralHighlands = 1;
+ makeCliffs = 2;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ makeCliffs = 2;
+ clearCenterChance = 0;
+ }
+
+ nativeChoice = rmRandInt(1,6);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 31;
+ else if (nativeChoice == 5)
+ nativePattern = 38;
+ else
+ nativePattern = 39;
+ }
+ else if (patternChance == 37) // GREEN SIBERIA
+ {
+ rmSetSeaType("Northwest Territory Water");
+ rmSetMapType("mongolia");
+ rmSetMapType("grass");
+ if (lightingChance == 2)
+ rmSetLightingSet("nwterritory");
+ else
+ rmSetLightingSet("saguenay");
+ baseType = "nwt_grass1";
+ forestType = "NW Territory Forest";
+ treeType = "TreeGreatPlains";
+ riverType = "Northwest Territory Water";
+ cliffType = "Araucania Central";
+ pondType = "Northwest Territory Water";
+ if (variantChance == 1)
+ {
+ deerType = "ypMuskDeer";
+ deer2Type = "ypSaiga";
+ centerHerdType = "ypSaiga";
+ }
+ else
+ {
+ deerType = "ypSaiga";
+ deer2Type = "ypMuskDeer";
+ centerHerdType = "ypSaiga";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "ypGoat";
+ eagles = 1;
+ fishType = "FishSalmon";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ else
+ mineType = "mine";
+ hillTrees = rmRandInt(0,1);
+ coverUp = 1;
+ makePonds = rmRandInt(1,4);
+ if (featureChance < 3)
+ makeLake = 1;
+ else if (featureChance < 5)
+ makeCentralHighlands = 1;
+ else if (featureChance < 7)
+ {
+ makeCentralCanyon = 1;
+ makeCliffs = 2;
+ hillTrees = 0;
+ }
+ else if (featureChance == 10)
+ {
+ makeRiver = 1;
+ makePonds = 0;
+ cliffChance = 0;
+ }
+ if (cliffChance > 7)
+ makeCliffs = 1;
+ if (twoChoice == 1)
+ nativePattern = 52;
+ else
+ nativePattern = 54;
+ }
+
+ tradeRouteType1 = "dirt";
+ tradeRouteType2 = "dirt";
+ if (patternChance > 28)
+ {
+ tradeRouteType1 = "water";
+ tradeRouteType2 = "water";
+ }
+
+ if (clearCenterChance == 1)
+ clearCenter = rmRandInt(1,2);
+ if (clearCenterChance == 2)
+ clearCenter = rmRandInt(1,4);
+ if (clearCenterChance == 3)
+ clearCenter = rmRandInt(1,6);
+ if (clearCenter > 1)
+ clearCenter = 0;
+
+ rmSetBaseTerrainMix(baseType);
+ rmTerrainInitialize("yukon\ground1_yuk", 1);
+ rmEnableLocalWater(false);
+ rmSetMapType("land");
+ rmSetWorldCircleConstraint(true);
+ rmSetWindMagnitude(2.0);
+
+// Native patterns
+ if (nativePattern == 1)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Iroquois");
+ native2Name = "native iroquois village ";
+ }
+ else if (nativePattern == 2)
+ {
+ rmSetSubCiv(0, "Comanche");
+ native1Name = "native comanche village ";
+ rmSetSubCiv(1, "Lakota");
+ native2Name = "native lakota village ";
+ }
+ else if (nativePattern == 3)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Seminoles");
+ native2Name = "native seminole village ";
+ }
+ else if (nativePattern == 4)
+ {
+ rmSetSubCiv(0, "Cheyenne");
+ native1Name = "native cheyenne village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 5)
+ {
+ rmSetSubCiv(0, "Huron");
+ native1Name = "native huron village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 6)
+ {
+ rmSetSubCiv(0, "Nootka");
+ native1Name = "native nootka village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 7)
+ {
+ rmSetSubCiv(0, "Nootka");
+ native1Name = "native nootka village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 8)
+ {
+ rmSetSubCiv(0, "Cree");
+ native1Name = "native cree village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 9)
+ {
+ rmSetSubCiv(0, "Seminoles");
+ native1Name = "native seminole village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 10)
+ {
+ rmSetSubCiv(0, "Zapotec");
+ native1Name = "native zapotec village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 11)
+ {
+ rmSetSubCiv(0, "Mapuche");
+ native1Name = "native mapuche village ";
+ rmSetSubCiv(1, "Maya");
+ native2Name = "native maya village ";
+ }
+ else if (nativePattern == 12)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Maya");
+ native2Name = "native maya village ";
+ }
+ else if (nativePattern == 13)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Tupi");
+ native2Name = "native tupi village ";
+ }
+ else if (nativePattern == 14)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Tupi");
+ native2Name = "native tupi village ";
+ }
+ else if (nativePattern == 15)
+ {
+ rmSetSubCiv(0, "Maya");
+ native1Name = "native maya village ";
+ rmSetSubCiv(1, "Tupi");
+ native2Name = "native tupi village ";
+ }
+ else if (nativePattern == 16)
+ {
+ rmSetSubCiv(0, "Nootka");
+ native1Name = "native nootka village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 17)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Aztecs");
+ native2Name = "native aztec village ";
+ }
+ else if (nativePattern == 18)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Caribs");
+ native2Name = "native carib village ";
+ }
+ else if (nativePattern == 19)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 20)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 21)
+ {
+ rmSetSubCiv(0, "Seminoles");
+ native1Name = "native seminole village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 22)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 23)
+ {
+ rmSetSubCiv(0, "Comanche");
+ native1Name = "native comanche village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 24)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Maya");
+ native2Name = "native maya village ";
+ }
+ else if (nativePattern == 25)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Mapuche");
+ native2Name = "native mapuche village ";
+ }
+ else if (nativePattern == 26)
+ {
+ rmSetSubCiv(0, "Tupi");
+ native1Name = "native tupi village ";
+ rmSetSubCiv(1, "Mapuche");
+ native2Name = "native mapuche village ";
+ }
+ else if (nativePattern == 27)
+ {
+ rmSetSubCiv(0, "Klamath");
+ native1Name = "native klamath village ";
+ rmSetSubCiv(1, "Nootka");
+ native2Name = "native nootka village ";
+ }
+ else if (nativePattern == 28)
+ {
+ rmSetSubCiv(0, "Klamath");
+ native1Name = "native klamath village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 29)
+ {
+ rmSetSubCiv(0, "Comanche");
+ native1Name = "native comanche village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 30)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 31)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Navajo");
+ native2Name = "native navajo village ";
+ }
+ else if (nativePattern == 32)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 33)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 34)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 35)
+ {
+ rmSetSubCiv(0, "Maya");
+ native1Name = "native maya village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 36)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 37)
+ {
+ rmSetSubCiv(0, "Navajo");
+ native1Name = "native navajo village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 38)
+ {
+ rmSetSubCiv(0, "Navajo");
+ native1Name = "native navajo village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 39)
+ {
+ rmSetSubCiv(0, "Navajo");
+ native1Name = "native navajo village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 40)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 41)
+ {
+ rmSetSubCiv(0, "Lakota");
+ native1Name = "native lakota village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 42)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Seminoles");
+ native2Name = "native seminole village ";
+ }
+ else if (nativePattern == 43)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Klamath");
+ native2Name = "native klamath village ";
+ }
+ else if (nativePattern == 44)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "udasi");
+ native2Name = "native udasi village ";
+ }
+ else if (nativePattern == 45)
+ {
+ rmSetSubCiv(0, "udasi");
+ native1Name = "native udasi village ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ";
+ }
+ else if (nativePattern == 46)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque deccan ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ";
+ }
+ else if (nativePattern == 47)
+ {
+ rmSetSubCiv(0, "udasi");
+ native1Name = "native udasi village ";
+ rmSetSubCiv(1, "sufi");
+ native2Name = "native sufi mosque deccan ";
+ }
+ else if (nativePattern == 48)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque borneo ";
+ rmSetSubCiv(1, "jesuit");
+ native2Name = "native jesuit mission borneo 0";
+ }
+ else if (nativePattern == 49)
+ {
+ rmSetSubCiv(0, "udasi");
+ native1Name = "native udasi village himal ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village himal ";
+ }
+ else if (nativePattern == 50)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque mongol ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ceylon ";
+ }
+ else if (nativePattern == 51)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ceylon ";
+ }
+ else if (nativePattern == 52)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque mongol ";
+ rmSetSubCiv(1, "aztecs");
+ native2Name = "native Aztec village ";
+ }
+ else if (nativePattern == 53)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "aztecs");
+ native2Name = "native shaolin temple mongol 0";
+ }
+ else if (nativePattern == 54)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "jesuit");
+ native2Name = "native jesuit mission borneo 0";
+ }
+
+// Precipitation
+ if ((patternChance == 14) || (patternChance == 16)) // yucatan, amazon
+ if (lightingChance == 2)
+ rmSetGlobalRain( 0.5 );
+ if (patternChance == 7) // yukon
+ rmSetGlobalSnow( 1.0 );
+ if ((patternChance == 5) || (patternChance == 20) || (patternChance == 24)) // gl winter, yukon tundra, s araucania
+ if (lightingChance == 2)
+ rmSetGlobalSnow( 0.7 );
+ if (patternChance == 8) // rockies
+ if (lightingChance == 2)
+ rmSetGlobalSnow( 0.5 );
+ if ((patternChance == 32) || (patternChance == 29)) // himalayas, siberia
+ if (rmRandInt(1,2) == 2)
+ rmSetGlobalRain( 0.3 );
+ if (patternChance == 30) // deccan
+ if (twoChoice == 2)
+ rmSetGlobalRain( 0.3 );
+
+ if (patternChance == 27) // nwt
+ {
+ // Make it rain
+ rmSetGlobalRain( 1.0 );
+ rmSetGlobalStormLength(1.0, 0.0);
+
+ // Sets up the rain triggers
+ rmCreateTrigger("ChangeRain1");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain1"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 20);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 0.3);
+
+ rmCreateTrigger("ChangeRain2");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain2"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 40);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 1.0);
+
+ rmCreateTrigger("ChangeRain3");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain3"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 60);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 0.3);
+
+ rmCreateTrigger("ChangeRain4");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain4"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 75);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 0.0);
+ }
+
+ chooseMercs();
+
+// Define some classes.
+ int classPlayer=rmDefineClass("player");
+ int lakeClass=rmDefineClass("lake");
+ rmDefineClass("classHill");
+ rmDefineClass("classPatch");
+ rmDefineClass("starting settlement");
+ rmDefineClass("startingUnit");
+ rmDefineClass("classForest");
+ rmDefineClass("importantItem");
+ rmDefineClass("natives");
+ rmDefineClass("classCliff");
+ rmDefineClass("center");
+ rmDefineClass("classNugget");
+ rmDefineClass("socketClass");
+ rmDefineClass("classIce");
+ rmDefineClass("classClearing");
+ int classHuntable=rmDefineClass("huntableFood");
+ int classHerdable=rmDefineClass("herdableFood");
+ int canyon=rmDefineClass("canyon");
+
+ // Text
+ rmSetStatusText("",0.10);
+
+// -------------Define constraints
+ // Map edge constraints
+ int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(10), rmZTilesToFraction(10), 1.0-rmXTilesToFraction(10), 1.0-rmZTilesToFraction(10), 0.01);
+ int secondEdgeConstraint=rmCreateBoxConstraint("bison edge of map", rmXTilesToFraction(20), rmZTilesToFraction(20), 1.0-rmXTilesToFraction(20), 1.0-rmZTilesToFraction(20), 0.01);
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int circleConstraintMt=rmCreatePieConstraint("circle Constraint for mts", 0.5, 0.5, 0, rmZFractionToMeters(0.2), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ // Center constraints
+ int centerConstraint=rmCreateClassDistanceConstraint("stay away from center", rmClassID("center"), 30.0);
+ int centerConstraintShort=rmCreateClassDistanceConstraint("stay away from center short", rmClassID("center"), 12.0);
+ int centerConstraintFar=rmCreateClassDistanceConstraint("stay away from center far", rmClassID("center"), 70.0);
+ int centerConstraintForest=rmCreateClassDistanceConstraint("stay away from center forest", rmClassID("center"), rmZFractionToMeters(0.24));
+ int centerConstraintForest2=rmCreateClassDistanceConstraint("stay away from center forest 2", rmClassID("center"), rmZFractionToMeters(0.22));
+ int centerConstraintForest3=rmCreateClassDistanceConstraint("stay away from center forest 3", rmClassID("center"), rmZFractionToMeters(0.21));
+ int centerConstraintForest4=rmCreateClassDistanceConstraint("stay away from center forest 4", rmClassID("center"), rmZFractionToMeters(0.20));
+
+ // Player constraints
+ int playerConstraintForest=rmCreateClassDistanceConstraint("forests kinda stay away from players", classPlayer, 15.0);
+ int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 40.0);
+ int mediumPlayerConstraint=rmCreateClassDistanceConstraint("medium stay away from players", classPlayer, 25.0);
+ int nuggetPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 60.0);
+ int farPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players more", classPlayer, 85.0);
+ int fartherPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players the most", classPlayer, 105.0);
+ int enormousPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players for asymmetric starts", classPlayer, 130.0);
+ int longPlayerConstraint=rmCreateClassDistanceConstraint("land stays away from players", classPlayer, 70.0);
+
+ // Nature avoidance
+ int forestObjConstraint=rmCreateTypeDistanceConstraint("forest obj", "all", 6.0);
+ int shortForestConstraint=rmCreateClassDistanceConstraint("patch vs. forest", rmClassID("classForest"), 15.0);
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), forestDist);
+ int longForestConstraint=rmCreateClassDistanceConstraint("long forest vs. forest", rmClassID("classForest"), 26.0);
+ int avoidResource=rmCreateTypeDistanceConstraint("resource avoid resource", "resource", 20.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "gold", 10.0);
+ int shortAvoidSilver=rmCreateTypeDistanceConstraint("short gold avoid gold", "Mine", 20.0);
+ int coinAvoidCoin=rmCreateTypeDistanceConstraint("coin avoids coin", "gold", 35.0);
+ int avoidStartResource=rmCreateTypeDistanceConstraint("start resource no overlap", "resource", 1.0);
+ int avoidSheep=rmCreateClassDistanceConstraint("sheep avoids sheep etc", rmClassID("herdableFood"), 45.0);
+ int huntableConstraint=rmCreateClassDistanceConstraint("huntable constraint", rmClassID("huntableFood"), 35.0);
+ int longHuntableConstraint=rmCreateClassDistanceConstraint("long huntable constraint", rmClassID("huntableFood"), 55.0);
+ int forestsAvoidBison=rmCreateClassDistanceConstraint("forest avoids bison", rmClassID("huntableFood"), 15.0);
+ int avoidDucks=rmCreateTypeDistanceConstraint("avoids ducks", "DuckFamily", 50.0);
+
+ // Avoid impassable land, certain features
+ int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 4.0);
+ int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 2.0);
+ int longAvoidImpassableLand=rmCreateTerrainDistanceConstraint("long avoid impassable land", "Land", false, 18.0);
+ int hillConstraint=rmCreateClassDistanceConstraint("hill vs. hill", rmClassID("classHill"), 15.0);
+ int shortHillConstraint=rmCreateClassDistanceConstraint("patches vs. hill", rmClassID("classHill"), 5.0);
+ int longHillConstraint=rmCreateClassDistanceConstraint("far from hill", rmClassID("classHill"), 35.0);
+ int medHillConstraint=rmCreateClassDistanceConstraint("medium from hill", rmClassID("classHill"), 25.0);
+ int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 8.0);
+ int avoidCliffs=rmCreateClassDistanceConstraint("stuff vs. cliff", rmClassID("classCliff"), 12.0);
+ int avoidCliffsShort=rmCreateClassDistanceConstraint("stuff vs. cliff short", rmClassID("classCliff"), 7.0);
+ int cliffsAvoidCliffs=rmCreateClassDistanceConstraint("cliffs vs. cliffs", rmClassID("classCliff"), 30.0);
+ int avoidWater10 = rmCreateTerrainDistanceConstraint("avoid water mid-long", "Land", false, 10.0);
+ int avoidWater15 = rmCreateTerrainDistanceConstraint("avoid water mid-longer", "Land", false, 15.0);
+ int avoidWater20 = rmCreateTerrainDistanceConstraint("avoid water a little more", "Land", false, 20.0);
+ int avoidWater30 = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 30.0);
+ int avoidCanyons=rmCreateClassDistanceConstraint("avoid canyons", rmClassID("canyon"), 35.0);
+ int shortAvoidCanyons=rmCreateClassDistanceConstraint("short avoid canyons", rmClassID("canyon"), 15.0);
+ int nearShore=rmCreateTerrainMaxDistanceConstraint("tree v. water", "land", true, 14.0);
+ int rockVsLand = rmCreateTerrainDistanceConstraint("rock v. land", "land", true, 2.0);
+ int avoidLakes=rmCreateClassDistanceConstraint("stuff vs.lakes", rmClassID("lake"), 12.0);
+ int avoidLakesFar=rmCreateClassDistanceConstraint("stuff vs.lakes far", rmClassID("lake"), 55.0);
+ int avoidIce=rmCreateClassDistanceConstraint("stuff vs.ice", rmClassID("classIce"), 12.0);
+ int avoidClearing=rmCreateClassDistanceConstraint("avoid clearings", rmClassID("classClearing"), 11.0);
+
+ // Unit avoidance
+ int avoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 30.0);
+ int avoidStartingUnitsSmall=rmCreateClassDistanceConstraint("objects avoid starting units small", rmClassID("startingUnit"), 10.0);
+ int avoidStartingUnitsLarge=rmCreateClassDistanceConstraint("objects avoid starting units large", rmClassID("startingUnit"), 50.0);
+ int avoidImportantItem=rmCreateClassDistanceConstraint("things avoid each other", rmClassID("importantItem"), 10.0);
+ int avoidImportantItemSmall=rmCreateClassDistanceConstraint("important item small avoidance", rmClassID("importantItem"), 7.0);
+ int avoidNatives=rmCreateClassDistanceConstraint("stuff avoids natives", rmClassID("natives"), 55.0);
+ int avoidNativesMed=rmCreateClassDistanceConstraint("stuff avoids natives medium", rmClassID("natives"), 35.0);
+ int avoidNativesShort=rmCreateClassDistanceConstraint("stuff avoids natives shorter", rmClassID("natives"), 15.0);
+ int avoidNugget=rmCreateClassDistanceConstraint("nugget vs. nugget", rmClassID("classNugget"), 42.0);
+ int avoidNuggetMed=rmCreateClassDistanceConstraint("nugget vs. nugget med", rmClassID("classNugget"), 50.0);
+ int avoidNuggetLong=rmCreateClassDistanceConstraint("nugget vs. nugget long", rmClassID("classNugget"), 65.0);
+ int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
+
+ // Trade route avoidance.
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 8.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("avoid sockets", rmClassID("socketClass"), 13.0);
+
+// End of constraints -----------------------------------
+
+// Set up of trade routes for special situations
+ if (makeRiver == 1)
+ {
+ if (trPattern == 0)
+ trPattern = 1;
+ if (trPattern == 3)
+ trPattern = 2;
+ if (trPattern == 6)
+ trPattern = 4;
+ if (trPattern == 7)
+ trPattern = 5;
+ if (trPattern == 8)
+ trPattern = 9;
+ if (trPattern == 10)
+ trPattern = 11;
+ }
+
+ if ((makeLake == 1) || (makeIce == 1) || (makeCentralCanyon == 1) || (makeCentralHighlands == 1))
+ {
+ if ((trPattern == 6) || (trPattern == 10))
+ {
+ if (rmRandInt(1,10) == 10)
+ trPattern = 11;
+ else
+ {
+ if (rmRandInt(1,3) == 1)
+ trPattern = rmRandInt(7,9);
+ else
+ trPattern = rmRandInt(0,5);
+ }
+ }
+ }
+
+ if ((forestMt == 1) || (centerMt == 1))
+ {
+ if (mtPattern == 1)
+ {
+ if (rmRandInt(1,10) == 10)
+ trPattern = 11;
+ else
+ {
+ if (rmRandInt(1,3) == 1)
+ trPattern = rmRandInt(7,9);
+ else
+ trPattern = rmRandInt(0,5);
+ }
+ }
+ }
+
+// Set up for native positions based on trade route
+ if (trPattern > 7)
+ endPosition = rmRandInt(1,2);
+ if (trPattern == 2)
+ endPosition = rmRandInt(2,3);
+ if (trPattern == 3)
+ endPosition = rmRandInt(2,3);
+ if (trPattern == 0)
+ {
+ if (rmRandInt(1,2) == 1)
+ endPosition = 3;
+ else
+ endPosition = 1;
+ }
+ if (trPattern == 1)
+ {
+ if (rmRandInt(1,2) == 1)
+ endPosition = 3;
+ else
+ endPosition = 1;
+ }
+
+// Set up for player start area distance from center
+ if (trPattern < 2)
+ {
+ if (rmRandInt(1,4) == 1)
+ distChance = 4;
+ else
+ distChance = rmRandInt(1,2);
+ }
+ if ((trPattern == 8) || (trPattern == 9))
+ distChance = rmRandInt(2,4);
+ if (trPattern == 11)
+ distChance = rmRandInt(1,2);
+
+// Set up player starting locations
+if (cNumberNonGaiaPlayers == 2)
+{
+ sectionChance = rmRandInt(1,13);
+ if (trPattern == 4)
+ sectionChance = rmRandInt(1,9);
+ if (trPattern == 5)
+ sectionChance = rmRandInt(1,9);
+ if (axisChance == 1)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.24, 0.26);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.29, 0.31);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.19, 0.21);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.14, 0.16);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.34, 0.36);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.34, 0.36);
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.14, 0.16);
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.29, 0.31);
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.19, 0.21);
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.09, 0.11);
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.89, 0.91);
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.09, 0.11);
+ else if (sectionChance == 13)
+ rmSetPlacementSection(0.39, 0.41);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.38, 0.40, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.74, 0.76);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.79, 0.81);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.69, 0.71);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.64, 0.66);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.84, 0.86);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.64, 0.66);
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.84, 0.86);
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.69, 0.71);
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.79, 0.81);
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.39, 0.41);
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.59, 0.61);
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.59, 0.61);
+ else if (sectionChance == 13)
+ rmSetPlacementSection(0.89, 0.91);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.38, 0.40, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.49, 0.51);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.44, 0.46);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.54, 0.56);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.39, 0.41);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.59, 0.61);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.89, 0.91);
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.09, 0.11);
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.54, 0.56);
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.44, 0.46);
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.14, 0.16);
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.34, 0.36);
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.34, 0.36);
+ else if (sectionChance == 13)
+ rmSetPlacementSection(0.64, 0.66);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.38, 0.40, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.99, 0.01);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.94, 0.96);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.04, 0.06);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.89, 0.91);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.09, 0.11);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.59, 0.61);
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.39, 0.41);
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.94, 0.96);
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.04, 0.06);
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.84, 0.86);
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.64, 0.66);
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.84, 0.86);
+ else if (sectionChance == 13)
+ rmSetPlacementSection(0.14, 0.16);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.38, 0.40, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+}
+else
+{
+ if (cNumberTeams == 2)
+ {
+ if (cNumberNonGaiaPlayers == 4) // 2 teams, 4 players
+ {
+ sectionChance = rmRandInt(1,6);
+ if (axisChance == 1)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.21, 0.29);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.19, 0.31);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.18, 0.32);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.17, 0.33);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.16, 0.26);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.24, 0.34);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.71, 0.79);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.69, 0.81);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.68, 0.82);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.67, 0.83);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.66, 0.76);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.74, 0.84);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.46, 0.54);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.44, 0.56);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.43, 0.57);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.42, 0.58);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.41, 0.51);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.49, 0.59);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.96, 0.04);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.94, 0.06);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.93, 0.07);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.92, 0.08);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.91, 0.01);
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.99, 0.09);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ }
+ else if (cNumberNonGaiaPlayers <7) // for 2 teams, for 3 or 5-6 players
+ {
+ if (axisChance == 1)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.17, 0.33);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.15, 0.35);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.13, 0.37);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.67, 0.83);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.65, 0.85);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.63, 0.87);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.42, 0.58);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.40, 0.60);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.38, 0.62);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.92, 0.08);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.90, 0.10);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.88, 0.12);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ }
+ else // for 2 teams, for over 6 players
+ {
+ if (axisChance == 1)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.15, 0.35);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.13, 0.37);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.11, 0.39);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.43, 0.45, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.65, 0.85);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.63, 0.87);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.61, 0.89);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.43, 0.45, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(0);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(1);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.40, 0.60);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.38, 0.62);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.36, 0.64);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.43, 0.45, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+
+ if (playerSide == 1)
+ {
+ rmSetPlacementTeam(1);
+ }
+ else if (playerSide == 2)
+ {
+ rmSetPlacementTeam(0);
+ }
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.90, 0.10);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.88, 0.12);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.86, 0.14);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.43, 0.45, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ }
+ }
+ else // for FFA or over 2 teams
+ {
+ if (cNumberNonGaiaPlayers == 3)
+ {
+ if (ffaChance == 1)
+ {
+ rmPlacePlayer(1, 0.31, 0.71);
+ rmPlacePlayer(2, 0.69, 0.71);
+ rmPlacePlayer(3, 0.69, 0.29);
+ }
+ else if (ffaChance == 2)
+ {
+ rmPlacePlayer(2, 0.31, 0.71);
+ rmPlacePlayer(3, 0.69, 0.71);
+ rmPlacePlayer(1, 0.69, 0.29);
+ }
+ else if (ffaChance == 3)
+ {
+ rmPlacePlayer(3, 0.31, 0.71);
+ rmPlacePlayer(1, 0.69, 0.71);
+ rmPlacePlayer(2, 0.69, 0.29);
+ }
+ else
+ {
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ }
+ else if (cNumberNonGaiaPlayers == 4)
+ {
+ if (ffaChance == 1)
+ {
+ rmPlacePlayer(1, 0.31, 0.71);
+ rmPlacePlayer(2, 0.69, 0.71);
+ rmPlacePlayer(3, 0.69, 0.29);
+ rmPlacePlayer(4, 0.31, 0.29);
+ }
+ else if (ffaChance == 2)
+ {
+ rmPlacePlayer(2, 0.31, 0.71);
+ rmPlacePlayer(3, 0.69, 0.71);
+ rmPlacePlayer(4, 0.69, 0.29);
+ rmPlacePlayer(1, 0.31, 0.29);
+ }
+ else if (ffaChance == 3)
+ {
+ rmPlacePlayer(3, 0.31, 0.71);
+ rmPlacePlayer(4, 0.69, 0.71);
+ rmPlacePlayer(1, 0.69, 0.29);
+ rmPlacePlayer(2, 0.31, 0.29);
+ }
+ else
+ {
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.41, 0.43, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ }
+ else // over 4 FFA
+ {
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.42, 0.44, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.39, 0.41, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.35, 0.37, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.30, 0.32, 0.0);
+ }
+ }
+}
+
+ // Text
+ rmSetStatusText("",0.20);
+
+// Set up player areas.
+ float playerFraction=rmAreaTilesToFraction(120);
+ for(i=1; 1)
+ {
+ rmRiverSetShallowRadius(singleRiver, rmRandInt(9, 12));
+ rmRiverAddShallow(singleRiver, rmRandFloat(0.05, 0.2));
+
+ rmRiverSetShallowRadius(singleRiver, rmRandInt(9, 12));
+ rmRiverAddShallow(singleRiver, rmRandFloat(0.8, 0.95));
+ }
+ }
+ if (shallowPattern > 3)
+ {
+ rmRiverSetShallowRadius(singleRiver, rmRandInt(9, 12));
+ rmRiverAddShallow(singleRiver, rmRandFloat(0.05, 0.2));
+
+ rmRiverSetShallowRadius(singleRiver, rmRandInt(9, 12));
+ rmRiverAddShallow(singleRiver, rmRandFloat(0.8, 0.95));
+ }
+ if (shallowPattern > 2)
+ {
+ if (shallowPattern < 5)
+ {
+ rmRiverSetShallowRadius(singleRiver, rmRandInt(9, 12));
+ rmRiverAddShallow(singleRiver, 0.5);
+ }
+ }
+ rmRiverSetBankNoiseParams(singleRiver, 0.07, 2, 1.5, 10.0, 0.667, 3.0);
+ rmRiverBuild(singleRiver);
+ }
+
+// Trade Routes
+if (trPattern == 2) // 2 opposite inner semicircular routes
+{
+ // first route
+ int tradeRouteID = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.59, 0.82);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.54, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.65, 0.70);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.66, 0.56);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.68, 0.54);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.68, 0.46);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.66, 0.44);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.65, 0.30);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.59, 0.18);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.54, 0.19);
+ }
+ else
+ {
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.18, 0.59);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.19, 0.54);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.28, 0.65);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.40, 0.66);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.46, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.54, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.62, 0.66);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.60, 0.65);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.82, 0.59);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.81, 0.54);
+ }
+ rmBuildTradeRoute(tradeRouteID, tradeRouteType1);
+
+ // second route
+ int tradeRouteID2 = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.41, 0.18);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.46, 0.19);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.35, 0.30);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.34, 0.44);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.32, 0.46);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.32, 0.54);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.34, 0.56);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.35, 0.70);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.41, 0.82);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.46, 0.81);
+ }
+ else
+ {
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.18, 0.41);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.19, 0.46);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.28, 0.35);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.40, 0.33);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.47, 0.32);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.53, 0.32);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.60, 0.33);
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.72, 0.35);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.82, 0.41);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID2, 0.81, 0.46);
+ }
+ rmBuildTradeRoute(tradeRouteID2, tradeRouteType2);
+}
+else if (trPattern == 3) // one 'circular' inner route
+{
+ int tradeRouteID3 = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.51, 0.8);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.66, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.68, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.66, 0.45);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.5, 0.2);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.34, 0.45);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.32, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.34, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.495, 0.8);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.2, 0.51);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.40, 0.66);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.5, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.60, 0.66);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.8, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.60, 0.34);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.5, 0.32);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.40, 0.34);
+ rmAddTradeRouteWaypoint(tradeRouteID3, 0.2, 0.49);
+ }
+ rmBuildTradeRoute(tradeRouteID3, tradeRouteType1);
+}
+else if (trPattern == 4) // two 'diagonal'
+{
+ int tradeRouteID4 = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.67, 1.0);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.6, 0.62);
+ if(variantChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.67, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.67, 0.45);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.62, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.62, 0.45);
+ }
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.6, 0.38);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.67, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4, 1.0, 0.67);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.62, 0.6);
+ if(variantChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.55, 0.67);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.45, 0.67);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.55, 0.62);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.45, 0.62);
+ }
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.38, 0.6);
+ rmAddTradeRouteWaypoint(tradeRouteID4, 0.0, 0.67);
+ }
+ rmBuildTradeRoute(tradeRouteID4, tradeRouteType2);
+
+ int tradeRouteID4A = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.33, 1.0);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.4, 0.62);
+ if(variantChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.33, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.33, 0.45);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.38, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.38, 0.45);
+ }
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.4, 0.38);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.33, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 1.0, 0.33);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.62, 0.4);
+ if(variantChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.55, 0.33);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.45, 0.33);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.55, 0.38);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.45, 0.38);
+ }
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.38, 0.4);
+ rmAddTradeRouteWaypoint(tradeRouteID4A, 0.0, 0.33);
+ }
+ rmBuildTradeRoute(tradeRouteID4A, tradeRouteType1);
+}
+else if (trPattern == 5) // two 'parabolas'
+{
+ int tradeRouteID5 = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.68, 0.85);
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.6, 0.62);
+ if ((makeCentralCanyon == 1) || (makeCentralHighlands == 1) || (makeRiver == 1))
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.585, 0.5);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.54, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.6, 0.38);
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.68, 0.15);
+ }
+ else if (axisChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.85, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.62, 0.6);
+ if ((makeCentralCanyon == 1) || (makeCentralHighlands == 1) || (makeRiver == 1))
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.5, 0.585);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.5, 0.54);
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.38, 0.6);
+ rmAddTradeRouteWaypoint(tradeRouteID5, 0.15, 0.68);
+ }
+ rmBuildTradeRoute(tradeRouteID5, tradeRouteType1);
+
+ int tradeRouteID5A = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.32, 0.85);
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.4, 0.62);
+ if ((makeCentralCanyon == 1) || (makeCentralHighlands == 1) || (makeRiver == 1))
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.415, 0.5);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.46, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.4, 0.38);
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.32, 0.15);
+ }
+ else if (axisChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.85, 0.32);
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.62, 0.4);
+ if ((makeCentralCanyon == 1) || (makeCentralHighlands == 1) || (makeRiver == 1))
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.5, 0.415);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.5, 0.46);
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.38, 0.4);
+ rmAddTradeRouteWaypoint(tradeRouteID5A, 0.15, 0.32);
+ }
+ rmBuildTradeRoute(tradeRouteID5A, tradeRouteType2);
+}
+else if (trPattern == 6) // one diagonal
+{
+ int tradeRouteID6 = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.5, 0.0);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.48, 0.2);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.52, 0.35);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.5, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.48, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.52, 0.8);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.5, 1.0);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.0, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.2, 0.48);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.35, 0.52);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.5, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.65, 0.48);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 0.8, 0.52);
+ rmAddTradeRouteWaypoint(tradeRouteID6, 1.0, 0.5);
+ }
+ rmBuildTradeRoute(tradeRouteID6, tradeRouteType1);
+}
+else if (trPattern == 7) // 2 intersecting 'parabolas'
+{
+ // first route
+ int tradeRouteID7 = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.4, 1.0);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.58, 0.82);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.66, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.68, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.66, 0.45);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.58, 0.18);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.4, 0.0);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID7, 1.0, 0.4);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.82, 0.58);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.60, 0.66);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.5, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.40, 0.66);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.18, 0.58);
+ rmAddTradeRouteWaypoint(tradeRouteID7, 0.0, 0.4);
+ }
+ rmBuildTradeRoute(tradeRouteID7, tradeRouteType1);
+
+ // second route
+ int tradeRouteID7A = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.6, 0.0);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.42, 0.18);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.34, 0.45);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.32, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.34, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.42, 0.82);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.6, 1.0);
+ }
+ else
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.0, 0.6);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.18, 0.42);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.40, 0.34);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.5, 0.32);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.60, 0.34);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 0.82, 0.42);
+ rmAddTradeRouteWaypoint(tradeRouteID7A, 1.0, 0.6);
+ }
+ rmBuildTradeRoute(tradeRouteID7A, tradeRouteType2);
+}
+else if (trPattern == 8) // one 'circular' outside route
+{
+ int tradeRouteID8 = rmCreateTradeRoute();
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.0, 0.51);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.071, 0.6);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.105, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.19, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.325, 0.90);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.5, 0.95);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.675, 0.90);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.81, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.895, 0.7);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.937, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.895, 0.3);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.81, 0.19);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.675, 0.10);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.5, 0.05);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.325, 0.10);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.19, 0.19);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.105, 0.32);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.07, 0.4);
+ rmAddTradeRouteWaypoint(tradeRouteID8, 0.0, 0.49);
+ rmBuildTradeRoute(tradeRouteID8, tradeRouteType1);
+}
+else if (trPattern == 9) // 2 'semi-circular' outside routes
+{
+ int tradeRouteID9 = rmCreateTradeRoute();
+ if (axisChance == 2)
+ {
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.02, 0.575);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.0, 0.525);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.07, 0.58);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.105, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.19, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.325, 0.90);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.5, 0.93);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.675, 0.90);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.81, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.895, 0.7);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.93, 0.58);
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.98, 0.575);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9, 1.0, 0.525);
+ }
+ else
+ {
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.575, 0.98);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.525, 1.0);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.58, 0.93);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.68, 0.88);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.81, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.89, 0.695);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.93, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.89, 0.305);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.81, 0.19);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.68, 0.12);
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.58, 0.07);
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.575, 0.02);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9, 0.525, 0.0);
+ }
+ rmBuildTradeRoute(tradeRouteID9, tradeRouteType1);
+
+ // second route
+ int tradeRouteID9A = rmCreateTradeRoute();
+ if (axisChance == 2)
+ {
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.98, 0.425);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 1.0, 0.475);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.935, 0.42);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.89, 0.31);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.81, 0.19);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.675, 0.10);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.5, 0.07);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.325, 0.10);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.2, 0.2);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.11, 0.31);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.065, 0.42);
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.02, 0.425);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.0, 0.475);
+ }
+ else
+ {
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.425, 0.02);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.475, 0.0);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.42, 0.065);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.31, 0.11);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.2, 0.2);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.10, 0.325);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.07, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.10, 0.675);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.19, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.31, 0.89);
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.42, 0.935);
+ if(makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.425, 0.98);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID9A, 0.475, 1.0);
+ }
+ rmBuildTradeRoute(tradeRouteID9A, tradeRouteType2);
+}
+else if (trPattern == 0) // one 'circular' middle route
+{
+ int tradeRouteID0 = rmCreateTradeRoute();
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.16, 0.508);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.24, 0.75);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.5, 0.84);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.76, 0.76);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.84, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.76, 0.26);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.5, 0.16);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.24, 0.24);
+ rmAddTradeRouteWaypoint(tradeRouteID0, 0.16, 0.492);
+ rmBuildTradeRoute(tradeRouteID0, tradeRouteType1);
+}
+else if (trPattern == 1) // 2 'semicircular' middle routes
+{
+ int tradeRouteID1 = rmCreateTradeRoute();
+ int tradeRouteID1A = rmCreateTradeRoute();
+ if (axisChance == 2)
+ {
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.165, 0.59);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.165, 0.56);
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.25, 0.74);
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.5, 0.835);
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.75, 0.74);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.835, 0.59);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.835, 0.56);
+ rmBuildTradeRoute(tradeRouteID1, tradeRouteType1);
+
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.835, 0.41);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.835, 0.44);
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.75, 0.26);
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.5, 0.165);
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.25, 0.26);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.165, 0.41);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.165, 0.44);
+ rmBuildTradeRoute(tradeRouteID1A, tradeRouteType2);
+ }
+ else if (axisChance == 1)
+ {
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.59, 0.835);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.55, 0.835);
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.74, 0.75);
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.835, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.74, 0.25);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.59, 0.165);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1, 0.55, 0.165);
+ rmBuildTradeRoute(tradeRouteID1, tradeRouteType1);
+
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.41, 0.165);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.45, 0.165);
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.26, 0.25);
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.165, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.26, 0.75);
+ if (makeRiver == 1)
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.41, 0.835);
+ else
+ rmAddTradeRouteWaypoint(tradeRouteID1A, 0.45, 0.835);
+ rmBuildTradeRoute(tradeRouteID1A, tradeRouteType2);
+ }
+}
+else if (trPattern == 10) // new single with random waypoints
+{
+ int tradeRouteID10 = rmCreateTradeRoute();
+ vector tradeRoutePoint = cOriginVector;
+ if (axisChance == 1)
+ {
+ tradeRoutePoint = rmFindClosestPoint(0.5, 0.0, 20.0);
+ rmAddTradeRouteWaypoint(tradeRouteID10, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)));
+ rmAddRandomTradeRouteWaypoints(tradeRouteID10, 0.55, 0.4, 4, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID10, 0.45, 0.6, 2, 3);
+ tradeRoutePoint = rmFindClosestPoint(0.5, 1.0, 20.0);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID10, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)), 4, 6);
+ }
+ else // axisChance == 2
+ {
+ tradeRoutePoint = rmFindClosestPoint(0.0, 0.5, 20.0);
+ rmAddTradeRouteWaypoint(tradeRouteID10, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)));
+ rmAddRandomTradeRouteWaypoints(tradeRouteID10, 0.4, 0.45, 4, 6);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID10, 0.6, 0.55, 2, 3);
+ tradeRoutePoint = rmFindClosestPoint(1.0, 0.5, 20.0);
+ rmAddRandomTradeRouteWaypoints(tradeRouteID10, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)), 4, 6);
+ }
+ bool placedTradeRoute = rmBuildTradeRoute(tradeRouteID10, tradeRouteType1);
+ if(placedTradeRoute == false)
+ rmEchoError("Failed to place trade route");
+}
+else if (trPattern == 11) // two wider spaced 'diagonals'
+{
+ int tradeRouteID11 = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.7, 1.0);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.67, 0.62);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.7, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.7, 0.45);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.67, 0.38);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.7, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID11, 1.0, 0.7);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.62, 0.67);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.55, 0.7);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.45, 0.7);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.38, 0.67);
+ rmAddTradeRouteWaypoint(tradeRouteID11, 0.0, 0.7);
+ }
+ rmBuildTradeRoute(tradeRouteID11, tradeRouteType1);
+
+ int tradeRouteID11A = rmCreateTradeRoute();
+ if (axisChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.3, 1.0);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.33, 0.62);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.3, 0.55);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.3, 0.45);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.33, 0.38);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.3, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 1.0, 0.3);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.62, 0.33);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.55, 0.3);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.45, 0.3);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.38, 0.33);
+ rmAddTradeRouteWaypoint(tradeRouteID11A, 0.0, 0.3);
+ }
+ rmBuildTradeRoute(tradeRouteID11A, tradeRouteType1);
+}
+
+// Trade sockets
+ int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmAddObjectDefToClass(socketID, rmClassID("importantItem"));
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 7.0);
+
+if (trPattern == 2) // 2 opposite inner semicircular routes
+{
+ // add the meeting poles along the trade route.
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.17);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.83);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID2);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID2, 0.83);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID2, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID2, 0.17);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+}
+else if (trPattern == 3) // inner circle
+{
+ if (socketPattern == 1)
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID3);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.09);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.25);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.41);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.59);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.75);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.91);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else if (socketPattern == 2)
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID3);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.35);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.65);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID3, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+}
+else if (trPattern == 4) // 2 diagonal
+{
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID4);
+
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4, 0.88);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4, 0.17);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4, 0.83);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID4A);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4A, 0.88);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4A, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4A, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4A, 0.83);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID4A, 0.17);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+}
+else if (trPattern == 5) // 2 parabolas
+{
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID5);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID5, 0.17);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID5, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID5, 0.83);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID5A);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID5A, 0.83);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID5A, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID5A, 0.17);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+}
+else if (trPattern == 6) // one diagonal
+{
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID6);
+ if (socketPattern == 1)
+ {
+ if (twoChoice == 1) // 6 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.09);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.25);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.41);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.59);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.75);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.91);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else // 4 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.36);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.64);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.88);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ }
+ else if (socketPattern == 2)
+ {
+ if (twoChoice == 1) // 5 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.31);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.69);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.88);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else // 3 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.2);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID6, 0.8);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ }
+}
+else if (trPattern == 7) // 2 intersecting parabolas
+{
+ // add the meeting poles along the trade route.
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID7);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID7, 0.21);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID7, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID7, 0.79);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID7A);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID7A, 0.79);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID7A, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID7A, 0.21);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+}
+else if (trPattern == 8) // outer ring
+{
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID8);
+ if (socketPattern == 1) // 6 or 10 sockets
+ {
+ if (cNumberNonGaiaPlayers < 6) // 6 sockets
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.05);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.172);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.338);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.51);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.672);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.838);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else // over 5 players, 10 sockets
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.05);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.25);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.35);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.45);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.55);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.65);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.75);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.95);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ }
+ else if (socketPattern == 2) // 8 sockets or 12 sockets
+ {
+ if (cNumberNonGaiaPlayers < 6) // 8 sockets
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.063);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.188);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.313);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.438);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.563);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.688);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.813);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.938);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else // over 5 players, 12 sockets
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.025);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.11);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.191);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.272);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.353);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.434);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.525);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.606);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.687);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.768);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.849);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID8, 0.930);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ }
+}
+else if (trPattern == 9) // 2 outer semicircles
+{
+ if (socketPattern == 1) // 6 sockets
+ {
+ if (variantChance == 1)
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID9);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.1);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.43);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.76);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID9A);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.1);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.43);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.76);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID9);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.23);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.77);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID9A);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.23);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.77);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ }
+ else if (socketPattern == 2) // 8 sockets
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID9);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.37);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.62);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9, 0.87);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID9A);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.37);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.62);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID9A, 0.87);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+}
+else if(trPattern == 0) // middle ring
+{
+ if (socketPattern == 1) // 6 sockets
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID0);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.01);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.172);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.338);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.51);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.672);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.835);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else if (socketPattern == 2) // 8 sockets
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID0);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.063);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.188);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.313);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.438);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.563);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.688);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.813);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID0, 0.938);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+}
+else if (trPattern == 1) // 2 middle semicircles
+{
+ if (socketPattern == 1) // 3 each
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID1);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1, 0.1);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1, 0.43);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1, 0.77);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID1A);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1A, 0.1);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1A, 0.43);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1A, 0.77);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ if (socketPattern == 2) // 4 each
+ {
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID1);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1, 0.07);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1, 0.32);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1, 0.57);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1, 0.82);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID1A);
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1A, 0.07);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1A, 0.32);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1A, 0.57);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID1A, 0.82);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+}
+else if (trPattern == 10) // one diagonal
+{
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID10);
+ if (socketPattern == 1)
+ {
+ if (twoChoice == 1) // 6 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.09);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.25);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.41);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.59);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.75);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.91);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else // 4 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.36);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.64);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.88);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ }
+ else if (socketPattern == 2)
+ {
+ if (twoChoice == 1) // 5 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.12);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.31);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.69);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.88);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else // 3 TPs
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.16);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID10, 0.84);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ }
+}
+else if (trPattern == 11) // 2 new random diagonals
+{
+ // add the meeting poles along the trade route.
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID11);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11, 0.21);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11, 0.79);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11, 0.35);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11, 0.65);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+
+ // change the trade route for the new sockets
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID11A);
+ if (socketPattern == 1)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11A, 0.21);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11A, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11A, 0.79);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ else
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11A, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11A, 0.35);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11A, 0.65);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID11A, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+}
+
+ //Text
+ rmSetStatusText("",0.35);
+
+// Starting TCs and units
+ int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
+
+ int startingTCID= rmCreateObjectDef("startingTC");
+ if ( rmGetNomadStart())
+ {
+ rmAddObjectDefItem(startingTCID, "CoveredWagon", 1, 0.0);
+ }
+ else
+ {
+ rmAddObjectDefItem(startingTCID, "TownCenter", 1, 0.0);
+ }
+ rmSetObjectDefMaxDistance(startingTCID, 18.0);
+ rmAddObjectDefConstraint(startingTCID, avoidAll);
+ rmAddObjectDefConstraint(startingTCID, avoidTradeRoute);
+ rmAddObjectDefConstraint(startingTCID, longAvoidImpassableLand );
+
+ int playerCrateFID=rmCreateObjectDef("bonus starting food crates");
+ rmAddObjectDefItem(playerCrateFID, "crateOfFood", rmRandInt(1,3), 6.0);
+ rmSetObjectDefMinDistance(playerCrateFID, 10);
+ rmSetObjectDefMaxDistance(playerCrateFID, 12);
+ rmAddObjectDefConstraint(playerCrateFID, avoidAll);
+ rmAddObjectDefConstraint(playerCrateFID, avoidImpassableLand);
+
+ int playerCrateWID=rmCreateObjectDef("bonus starting wood crates");
+ rmAddObjectDefItem(playerCrateWID, "crateOfWood", rmRandInt(1,3), 6.0);
+ rmSetObjectDefMinDistance(playerCrateWID, 10);
+ rmSetObjectDefMaxDistance(playerCrateWID, 12);
+ rmAddObjectDefConstraint(playerCrateWID, avoidAll);
+ rmAddObjectDefConstraint(playerCrateWID, avoidImpassableLand);
+
+ int playerCrateCID=rmCreateObjectDef("bonus starting coin crates");
+ rmAddObjectDefItem(playerCrateCID, "crateOfCoin", rmRandInt(1,3), 6.0);
+ rmSetObjectDefMinDistance(playerCrateCID, 10);
+ rmSetObjectDefMaxDistance(playerCrateCID, 12);
+ rmAddObjectDefConstraint(playerCrateCID, avoidAll);
+ rmAddObjectDefConstraint(playerCrateCID, avoidImpassableLand);
+
+ int silverType = -1;
+ silverType = rmRandInt(1,10);
+ int playerGoldID=rmCreateObjectDef("player silver closer");
+ rmAddObjectDefItem(playerGoldID, mineType, 1, 0.0);
+ if (startingOutpost == 1)
+ rmAddObjectDefItem(playerGoldID, "ypOutpostAsian", 1, 6.0);
+ rmAddObjectDefConstraint(playerGoldID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerGoldID, avoidSocket);
+ rmAddObjectDefConstraint(playerGoldID, coinAvoidCoin);
+ rmAddObjectDefConstraint(playerGoldID, avoidImportantItemSmall);
+ rmAddObjectDefConstraint(playerGoldID, circleConstraint);
+ rmAddObjectDefConstraint(playerGoldID, avoidAll);
+ rmAddObjectDefConstraint(playerGoldID, avoidWater20);
+ rmSetObjectDefMinDistance(playerGoldID, 18.0);
+ rmSetObjectDefMaxDistance(playerGoldID, 23.0);
+
+ for(i=1; 1)
+ rmPlaceObjectDefAtLoc(playerCrateFID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ if (rmRandInt(1,3) > 1)
+ rmPlaceObjectDefAtLoc(playerCrateWID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ if (rmRandInt(1,3) > 1)
+ rmPlaceObjectDefAtLoc(playerCrateCID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ }
+ rmPlaceObjectDefAtLoc(playerGoldID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ if (startingOutpost > 1)
+ {
+ if (mineNumber == 0)
+ rmPlaceObjectDefAtLoc(playerGoldID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ }
+ }
+
+// Central features & patches, per map or variant
+ // Center area
+ int centerArea=rmCreateArea("TheCenter");
+ rmSetAreaSize(centerArea, 0.1, 0.2);
+ rmSetAreaLocation(centerArea, 0.5, 0.5);
+ rmAddAreaToClass(centerArea, rmClassID("center"));
+
+ // Texas desert
+ if (patternChance == 12)
+ {
+ if (lightingChance == 2)
+ {
+ int desertID = rmCreateArea("desert");
+ rmSetAreaLocation(desertID, 0.5, 0.5);
+ rmSetAreaWarnFailure(desertID, false);
+ rmSetAreaSize(desertID, 0.7, 0.95);
+ rmSetAreaCoherence(desertID, rmRandFloat(0.2, 0.5));
+ rmSetAreaTerrainType(desertID, "texas\ground4_tex");
+ rmAddAreaTerrainLayer(desertID, "texas\ground1_tex", 0, 4);
+ rmAddAreaTerrainLayer(desertID, "texas\ground2_tex", 4, 8);
+ rmAddAreaTerrainLayer(desertID, "texas\ground3_tex", 8, 12);
+ rmSetAreaMix(desertID, "texas_dirt");
+ rmBuildArea(desertID);
+ }
+ }
+
+ // Center Highland or Canyon
+ int makeCentralCliffArea = -1;
+ if (makeCentralHighlands == 1)
+ makeCentralCliffArea = 1;
+ if (makeCentralCanyon == 1)
+ makeCentralCliffArea = 1;
+ if ((patternChance == 8) || (patternChance == 24 && makeCentralHighlands == 1))
+ extendCenter = 0;
+ if (makeCentralCliffArea == 1)
+ {
+ int edgeChance = rmRandInt(1,4);
+ if (extendCenter > 0)
+ edgeChance = rmRandInt(2,4);
+ reducedForest = 1;
+ int centerHighlandsID=rmCreateArea("center highlands");
+ rmSetAreaLocation(centerHighlandsID, 0.5, 0.5);
+ if ((trPattern == 2) || (trPattern == 3))
+ {
+ if (cNumberNonGaiaPlayers > 3)
+ rmSetAreaSize(centerHighlandsID, 0.028, 0.035);
+ else
+ rmSetAreaSize(centerHighlandsID, 0.04, 0.048);
+ }
+ else
+ {
+ if (extendCenter == 0)
+ {
+ if (cNumberNonGaiaPlayers > 3)
+ rmSetAreaSize(centerHighlandsID, 0.035, 0.045);
+ else
+ rmSetAreaSize(centerHighlandsID, 0.045, 0.05);
+ }
+ else if (extendCenter == 1)
+ {
+ rmSetAreaSize(centerHighlandsID, 0.055, 0.075);
+ if (axisChance == 1)
+ rmAddAreaInfluenceSegment(centerHighlandsID, 0.5, 0.27, 0.5, 0.73);
+ else if (axisChance == 2)
+ rmAddAreaInfluenceSegment(centerHighlandsID, 0.27, 0.5, 0.73, 0.5);
+ endPosition = rmRandInt(2,3);
+ }
+ else if (extendCenter == 2)
+ {
+ rmSetAreaSize(centerHighlandsID, 0.065, 0.08);
+ if (axisChance == 1)
+ rmAddAreaInfluenceSegment(centerHighlandsID, 0.5, 0.2, 0.5, 0.8);
+ else if (axisChance == 2)
+ rmAddAreaInfluenceSegment(centerHighlandsID, 0.2, 0.5, 0.8, 0.5);
+ }
+ }
+ if (clearCenter == 1)
+ {
+ if (rmRandInt(0,1) == 1)
+ rmAddAreaToClass(centerHighlandsID, rmClassID("center"));
+ }
+ rmAddAreaToClass(centerHighlandsID, rmClassID("classCliff"));
+ if (patternChance == 12)
+ rmSetAreaMix(centerHighlandsID, "texas_dirt");
+ else if (patternChance == 8)
+ rmSetAreaTerrainType(centerHighlandsID, "rockies\groundsnow1_roc");
+ else if (patternChance == 24 && makeCentralHighlands == 1)
+ rmSetAreaTerrainType(centerHighlandsID, "rockies\groundsnow1_roc");
+ else
+ rmSetAreaMix(centerHighlandsID, baseType);
+ rmSetAreaCliffType(centerHighlandsID, cliffType);
+ rmSetAreaCliffPainting(centerHighlandsID, false, true, true, 1.5, true);
+ if (edgeChance == 1)
+ rmSetAreaCliffEdge(centerHighlandsID, 2, 0.45, 0.1, 0.5, 0);
+ else if (edgeChance == 2)
+ rmSetAreaCliffEdge(centerHighlandsID, 3, 0.29, 0.1, 0.5, 0);
+ else if (edgeChance == 3)
+ rmSetAreaCliffEdge(centerHighlandsID, 4, 0.21, 0.1, 0.5, 0);
+ else if (edgeChance == 4)
+ rmSetAreaCliffEdge(centerHighlandsID, 5, 0.15, 0.08, 0.5, 0);
+ if (makeCentralHighlands == 1)
+ rmSetAreaCliffHeight(centerHighlandsID, rmRandInt(6,8), 1.0, 0.5);
+ else if (makeCentralCanyon == 1)
+ rmSetAreaCliffHeight(centerHighlandsID, -8, 1.0, 0.5);
+ rmSetAreaSmoothDistance(centerHighlandsID, rmRandInt(10,20));
+ rmSetAreaCoherence(centerHighlandsID, rmRandFloat(0.4,0.8));
+ rmSetAreaHeightBlend(centerHighlandsID, 1.0);
+ rmAddAreaConstraint(centerHighlandsID, avoidTradeRoute);
+ rmAddAreaConstraint(centerHighlandsID, avoidSocket);
+ rmAddAreaConstraint(centerHighlandsID, playerConstraint);
+ rmBuildArea(centerHighlandsID);
+ makeLake = 0;
+ }
+
+ // Center mountains
+ int numMt = -1;
+ if (mtPattern == 1)
+ numMt = 1;
+ else if (mtPattern == 2)
+ numMt = 2;
+ else
+ numMt = rmRandInt(3,6);
+ if (centerMt == 1)
+ {
+ reducedForest = 1;
+ for (i=0; 3)
+ rmSetAreaSize(smalllakeID, 0.028, 0.038);
+ else
+ rmSetAreaSize(smalllakeID, 0.04, 0.048);
+ }
+ else
+ {
+ if (extendCenter == 0)
+ {
+ if (cNumberNonGaiaPlayers > 3)
+ rmSetAreaSize(smalllakeID, 0.035, 0.045);
+ else
+ rmSetAreaSize(smalllakeID, 0.045, 0.05);
+ }
+ else if (extendCenter == 1)
+ {
+ if (axisChance == 1)
+ {
+ if (lakePos < 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.065);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.5, 0.27, 0.5, 0.73);
+ }
+ else if (lakePos == 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.03, 0.06);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.5, 0.42, 0.5, 0.73);
+ }
+ else if (lakePos == 3)
+ {
+ rmSetAreaSize(smalllakeID, 0.03, 0.06);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.5, 0.27, 0.5, 0.58);
+ }
+ }
+ else if (axisChance == 2)
+ {
+ if (lakePos < 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.065);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.27, 0.5, 0.73, 0.5);
+ }
+ else if (lakePos == 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.03, 0.06);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.42, 0.5, 0.73, 0.5);
+ }
+ else if (lakePos == 3)
+ {
+ rmSetAreaSize(smalllakeID, 0.03, 0.06);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.27, 0.5, 0.58, 0.5);
+ }
+ }
+ endPosition = 3;
+ }
+ else if (extendCenter == 2)
+ {
+ if (axisChance == 1)
+ {
+ if (lakePos < 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.07);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.5, 0.2, 0.5, 0.8);
+ }
+ else if (lakePos == 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.065);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.5, 0.42, 0.5, 0.8);
+ }
+ else if (lakePos == 3)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.065);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.5, 0.2, 0.5, 0.58);
+ }
+ }
+ else if (axisChance == 2)
+ {
+ if (lakePos < 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.07);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.2, 0.5, 0.8, 0.5);
+ }
+ else if (lakePos == 2)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.065);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.2, 0.5, 0.58, 0.5);
+ }
+ else if (lakePos == 3)
+ {
+ rmSetAreaSize(smalllakeID, 0.035, 0.065);
+ rmAddAreaInfluenceSegment(smalllakeID, 0.42, 0.5, 0.8, 0.5);
+ }
+ }
+ endPosition = 3;
+ }
+ }
+ if (lakePattern == 1)
+ {
+ rmSetAreaMinBlobs(smalllakeID, 1);
+ rmSetAreaMaxBlobs(smalllakeID, 3);
+ rmSetAreaMinBlobDistance(smalllakeID, 12.0);
+ rmSetAreaMaxBlobDistance(smalllakeID, 18.0);
+ rmSetAreaCoherence(smalllakeID, rmRandFloat(0.4,0.8));
+ }
+ else if (lakePattern == 2)
+ {
+ rmSetAreaMinBlobs(smalllakeID, 3);
+ rmSetAreaMaxBlobs(smalllakeID, 8);
+ rmSetAreaMinBlobDistance(smalllakeID, 25.0);
+ rmSetAreaMaxBlobDistance(smalllakeID, 40.0);
+ rmSetAreaCoherence(smalllakeID, rmRandFloat(0.2,0.5));
+ }
+ else if (lakePattern == 3)
+ {
+ rmSetAreaMinBlobs(smalllakeID, 6);
+ rmSetAreaMaxBlobs(smalllakeID, 12);
+ rmSetAreaMinBlobDistance(smalllakeID, 32.0);
+ rmSetAreaMaxBlobDistance(smalllakeID, 50.0);
+ rmSetAreaCoherence(smalllakeID, rmRandFloat(0.2,0.3));
+ }
+ rmSetAreaSmoothDistance(smalllakeID, rmRandInt(10,20));
+ rmAddAreaConstraint(smalllakeID, farPlayerConstraint);
+ rmAddAreaConstraint(smalllakeID, avoidTradeRoute);
+ rmAddAreaConstraint(smalllakeID, avoidSocket);
+ rmSetAreaWarnFailure(smalllakeID, false);
+ rmBuildArea(smalllakeID);
+ }
+
+ // Text
+ rmSetStatusText("",0.40);
+
+// NATIVES
+ // Village A
+ int villageAID = -1;
+ int whichNative = rmRandInt(1,2);
+ int villageType = rmRandInt(1,5);
+ if (whichNative == 1)
+ villageAID = rmCreateGrouping("village A", native1Name+villageType);
+ else if (whichNative == 2)
+ villageAID = rmCreateGrouping("village A", native2Name+villageType);
+ rmAddGroupingToClass(villageAID, rmClassID("natives"));
+ rmAddGroupingToClass(villageAID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageAID, 0.0);
+ rmSetGroupingMaxDistance(villageAID, rmXFractionToMeters(0.12));
+ rmAddGroupingConstraint(villageAID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageAID, avoidTradeRoute);
+ rmAddGroupingConstraint(villageAID, avoidWater15);
+ rmAddGroupingConstraint(villageAID, avoidNativesMed);
+ rmAddGroupingConstraint(villageAID, playerConstraint);
+ rmAddGroupingConstraint(villageAID, avoidIce);
+
+ // Village D - opposite type from A
+ int villageDID = -1;
+ villageType = rmRandInt(1,5);
+ if (whichNative == 2)
+ villageDID = rmCreateGrouping("village D", native1Name+villageType);
+ else if (whichNative == 1)
+ villageDID = rmCreateGrouping("village D", native2Name+villageType);
+ rmAddGroupingToClass(villageDID, rmClassID("natives"));
+ rmAddGroupingToClass(villageDID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageDID, 0.0);
+ rmSetGroupingMaxDistance(villageDID, rmXFractionToMeters(0.12));
+ rmAddGroupingConstraint(villageDID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageDID, avoidTradeRoute);
+ rmAddGroupingConstraint(villageDID, avoidWater15);
+ rmAddGroupingConstraint(villageDID, avoidNativesMed);
+ rmAddGroupingConstraint(villageDID, playerConstraint);
+ rmAddGroupingConstraint(villageDID, avoidIce);
+ if (mtPattern > 2)
+ rmAddGroupingConstraint(villageDID, shortHillConstraint);
+
+ // Village B - randomly same or opposite village A
+ int villageBID = -1;
+ villageType = rmRandInt(1,5);
+ whichNative = rmRandInt(1,2);
+ if (whichNative == 1)
+ villageBID = rmCreateGrouping("village B", native1Name+villageType);
+ else if (whichNative == 2)
+ villageBID = rmCreateGrouping("village B", native2Name+villageType);
+ rmAddGroupingToClass(villageBID, rmClassID("importantItem"));
+ rmAddGroupingToClass(villageBID, rmClassID("natives"));
+ rmSetGroupingMinDistance(villageBID, 0.0);
+ rmSetGroupingMaxDistance(villageBID, rmXFractionToMeters(0.12));
+ rmAddGroupingConstraint(villageBID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageBID, avoidTradeRoute);
+ rmAddGroupingConstraint(villageBID, avoidWater15);
+ rmAddGroupingConstraint(villageBID, avoidNatives);
+ rmAddGroupingConstraint(villageBID, playerConstraint);
+
+ // Village C // appears in center, variable, randomly same or opposite A and B
+ int villageCID = -1;
+ villageType = rmRandInt(1,5);
+ whichNative = rmRandInt(1,2);
+ if (whichNative == 1)
+ villageCID = rmCreateGrouping("village C", native1Name+villageType);
+ else if (whichNative == 2)
+ villageCID = rmCreateGrouping("village C", native2Name+villageType);
+ rmAddGroupingToClass(villageCID, rmClassID("importantItem"));
+ rmAddGroupingToClass(villageCID, rmClassID("natives"));
+ rmSetGroupingMinDistance(villageCID, 0.0);
+ rmSetGroupingMaxDistance(villageCID, rmXFractionToMeters(0.09));
+ rmAddGroupingConstraint(villageCID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageCID, avoidWater15);
+ rmAddGroupingConstraint(villageCID, avoidTradeRoute);
+ rmAddGroupingConstraint(villageCID, avoidNatives);
+ rmAddGroupingConstraint(villageCID, playerConstraint);
+ if (mtPattern > 2)
+ rmAddGroupingConstraint(villageCID, shortHillConstraint);
+
+ // Placement of Native Americans
+ if(makeRiver == 1)
+ {
+ if (cNumberNonGaiaPlayers > 3)
+ {
+ if(rmRandInt(1,4) == 1)
+ nativeSetup = 6;
+ else
+ nativeSetup = 16;
+ if ((trPattern == 11) || (trPattern == 4) || (trPattern == 5) || (trPattern == 2))
+ nativeSetup = 6;
+ }
+ else
+ {
+ if(rmRandInt(1,3) > 1)
+ nativeSetup = 16;
+ else
+ {
+ if (threeChoice == 1)
+ nativeSetup = 6;
+ else if (threeChoice == 2)
+ nativeSetup = 10;
+ else
+ nativeSetup = 11;
+ }
+ if ((trPattern == 11) || (trPattern == 4) || (trPattern == 5) || (trPattern == 2))
+ {
+ if (threeChoice == 1)
+ nativeSetup = 6;
+ else if (threeChoice == 2)
+ nativeSetup = 10;
+ else
+ nativeSetup = 11;
+ }
+ }
+ }
+
+ if (makeLake == 1)
+ {
+ if (extendCenter > 0)
+ nativeSetup = rmRandInt(6,22);
+ }
+
+ if ((nativeSetup == 16) || (nativeSetup == 17) || (nativeSetup == 18))
+ {
+ if (axisChance == 2)
+ {
+ if (variantChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.79, 0.36);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.21, 0.36);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.79, 0.64);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.21, 0.64);
+ if (nativeSetup == 17)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.4);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.6);
+ }
+ if (nativeSetup == 18)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.43, 0.4);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.57, 0.4);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.43, 0.6);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.57, 0.6);
+ }
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.68, 0.4);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.32, 0.4);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.68, 0.6);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.32, 0.6);
+ if (nativeSetup == 17)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.34);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.66);
+ }
+ if (nativeSetup == 18)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.43, 0.38);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.57, 0.38);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.43, 0.62);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.57, 0.62);
+ }
+ }
+ }
+ else if (axisChance == 1)
+ {
+ if (variantChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.41, 0.79);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.41, 0.21);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.59, 0.79);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.59, 0.21);
+ if (nativeSetup == 17)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.31, 0.5);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.69, 0.5);
+ }
+ if (nativeSetup == 18)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.38, 0.43);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.38, 0.57);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.62, 0.43);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.62, 0.43);
+ }
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.4, 0.7);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.4, 0.3);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.6, 0.7);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.6, 0.3);
+ if (nativeSetup == 17)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.4, 0.5);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.6, 0.5);
+ }
+ if (nativeSetup == 18)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.38, 0.43);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.38, 0.57);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.62, 0.43);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.62, 0.43);
+ }
+ }
+ }
+ }
+ else if (nativeSetup == 19)
+ {
+ if (axisChance == 2)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.74, 0.28);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.26, 0.28);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.74, 0.72);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.26, 0.72);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.4);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.5, 0.6);
+ }
+ else if (axisChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.28, 0.74);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.28, 0.26);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.72, 0.74);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.72, 0.26);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.4, 0.5);
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.6, 0.5);
+ }
+ }
+ else if (nativeSetup == 20)
+ {
+ if (axisChance == 2)
+ {
+ if (variantChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.79, 0.38);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.21, 0.38);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.79, 0.62);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.21, 0.62);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.67, 0.4);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.33, 0.4);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.67, 0.6);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.33, 0.6);
+ }
+ }
+ else if (axisChance == 1)
+ {
+ if (variantChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.4, 0.79);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.4, 0.21);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.6, 0.79);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.6, 0.21);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.4, 0.7);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.4, 0.3);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.6, 0.7);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.6, 0.3);
+ }
+ }
+ }
+ else if (nativeSetup > 20) // 21 AND 22
+ {
+ if (nativeSetup == 22)
+ {
+ if (nativeNumber > 2)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.515, 0.515);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.485, 0.485);
+ }
+ else
+ {
+ if (axisChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.4, 0.51);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.6, 0.49);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.51, 0.6);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.49, 0.4);
+ }
+ }
+ }
+ if (axisChance == 2)
+ {
+ if (variantChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.85, 0.135);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.15, 0.135);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.15, 0.865);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.85, 0.865);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.85, 0.135);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.15, 0.135);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.15, 0.865);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.85, 0.865);
+ }
+ }
+ else if (axisChance == 1)
+ {
+ if (variantChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.135, 0.85);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.135, 0.15);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.865, 0.15);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.865, 0.85);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.135, 0.85);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.135, 0.15);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.865, 0.15);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.865, 0.85);
+ }
+ }
+ }
+ else if (nativeSetup < 4)
+ {
+ if (axisChance == 1)
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.505, 0.73);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.495, 0.82);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.505, 0.91);
+ }
+ else
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.73, 0.505);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.82, 0.495);
+ else
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.91, 0.505);
+ }
+ if (axisChance == 1)
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.495, 0.27);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.505, 0.18);
+ else
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.495, 0.09);
+ }
+ else
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.27, 0.495);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.18, 0.505);
+ else
+ rmPlaceGroupingAtLoc(villageBID, 0, 0.09, 0.495);
+ }
+ if (nativeSetup < 2)
+ {
+ if (nativeNumber > 2)
+ rmPlaceGroupingAtLoc(villageCID, 0, 0.5, 0.5);
+ }
+ else
+ {
+ rmSetGroupingMaxDistance(villageCID, rmXFractionToMeters(0.085));
+ if (nativeNumber > 2)
+ {
+ if (axisChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageCID, 0, 0.485, 0.51);
+ rmPlaceGroupingAtLoc(villageCID, 0, 0.515, 0.49);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageCID, 0, 0.51, 0.515);
+ rmPlaceGroupingAtLoc(villageCID, 0, 0.49, 0.485);
+ }
+ }
+ }
+ }
+ else if (nativeSetup > 5)
+ {
+ if (nativeSetup == 7)
+ {
+ if (axisChance == 1)
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.495, 0.75);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.505, 0.84);
+ else
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.495, 0.93);
+ }
+ else
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.745, 0.495);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.84, 0.505);
+ else
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.93, 0.495);
+ }
+ if (axisChance == 1)
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.505, 0.25);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.495, 0.16);
+ else
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.505, 0.07);
+ }
+ else
+ {
+ if (endPosition == 1)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.25, 0.505);
+ else if (endPosition == 2)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.16, 0.495);
+ else
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.07, 0.505);
+ }
+ }
+ if (nativeSetup == 8)
+ {
+ rmSetGroupingMaxDistance(villageDID, rmXFractionToMeters(0.065));
+ if (nativeNumber > 2)
+ {
+ if (axisChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.485, 0.49);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.515, 0.51);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.49, 0.515);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.51, 0.485);
+ }
+ }
+ }
+ if (nativeSetup == 9)
+ {
+ rmSetGroupingMaxDistance(villageDID, rmXFractionToMeters(0.07));
+ if (nativeNumber > 2)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.5);
+ }
+ }
+ if (nativeSetup < 12)
+ {
+ rmSetGroupingMinDistance(villageAID, 65.0);
+ rmSetGroupingMaxDistance(villageAID, 85.0);
+ rmAddGroupingConstraint(villageAID, nuggetPlayerConstraint);
+ rmSetGroupingMinDistance(villageDID, 65.0);
+ rmSetGroupingMaxDistance(villageDID, 85.0);
+ rmAddGroupingConstraint(villageDID, nuggetPlayerConstraint);
+ for(i=1; 11) // setup 12 to 15
+ {
+ rmSetGroupingMaxDistance(villageAID, rmXFractionToMeters(0.07));
+ rmAddGroupingConstraint(villageAID, nuggetPlayerConstraint);
+ if (axisChance == 1)
+ {
+ if (distChance < 6)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.33, 0.4);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.33, 0.6);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.67, 0.4);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.67, 0.6);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.13, 0.31);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.13, 0.69);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.87, 0.31);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.87, 0.69);
+ }
+ }
+ else
+ {
+ if (distChance < 6)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.4, 0.33);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.6, 0.33);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.4, 0.67);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.6, 0.67);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.31, 0.13);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.69, 0.13);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.31, 0.87);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.69, 0.87);
+ }
+ }
+ if (nativeSetup == 13)
+ {
+ rmSetGroupingMaxDistance(villageDID, rmXFractionToMeters(0.07));
+ if (nativeNumber > 2)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.5);
+ else
+ {
+ if (axisChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.485, 0.49);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.515, 0.51);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.49, 0.515);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.51, 0.485);
+ }
+ }
+ }
+ }
+ if (nativeSetup == 14)
+ {
+ if (axisChance == 1)
+ {
+ if (endPosition == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.495, 0.75);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.505, 0.25);
+ }
+ else if (endPosition == 2)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.505, 0.84);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.495, 0.16);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.505, 0.07);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.495, 0.93);
+ }
+ }
+ else
+ {
+ if (endPosition == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.745, 0.495);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.25, 0.505);
+ }
+ else if (endPosition == 2)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.84, 0.505);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.16, 0.495);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.93, 0.495);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.07, 0.505);
+ }
+ }
+ }
+ }
+ }
+ else if (nativeSetup > 3) // setup 4 and 5
+ {
+ if (axisChance == 1)
+ {
+ if (endPosition == 1)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.75);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.25);
+ }
+ else if (endPosition == 2)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.84);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.16);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.93);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.5, 0.08);
+ }
+ }
+ else
+ {
+ if (endPosition == 1)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.745, 0.5);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.25, 0.5);
+ }
+ else if (endPosition == 2)
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.84, 0.5);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.16, 0.5);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.93, 0.5);
+ rmPlaceGroupingAtLoc(villageAID, 0, 0.07, 0.5);
+ }
+ }
+ if (nativeSetup == 4)
+ {
+ if (axisChance == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.485, 0.51);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.515, 0.49);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.51, 0.515);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.49, 0.485);
+ }
+ }
+ rmSetGroupingMaxDistance(villageDID, rmXFractionToMeters(0.085));
+ if (axisChance == 1)
+ {
+ if (sidePosition == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.74, 0.5);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.24, 0.5);
+ }
+ else if (sidePosition == 2)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.84, 0.5);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.16, 0.5);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.93, 0.5);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.08, 0.5);
+ }
+ }
+ else
+ {
+ if (sidePosition == 1)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.75);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.25);
+ }
+ else if (sidePosition == 2)
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.84);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.16);
+ }
+ else
+ {
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.93);
+ rmPlaceGroupingAtLoc(villageDID, 0, 0.5, 0.08);
+ }
+ }
+ }
+
+ // Text
+ rmSetStatusText("",0.50);
+
+// Player Nuggets
+ int playerNuggetID=rmCreateObjectDef("player nugget");
+ rmAddObjectDefItem(playerNuggetID, "nugget", 1, 0.0);
+ rmAddObjectDefToClass(playerNuggetID, rmClassID("classNugget"));
+ rmSetObjectDefMinDistance(playerNuggetID, 34.0);
+ rmSetObjectDefMaxDistance(playerNuggetID, 47.0);
+ rmAddObjectDefConstraint(playerNuggetID, avoidStartingUnitsSmall);
+ rmAddObjectDefConstraint(playerNuggetID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerNuggetID, avoidSocket);
+ rmAddObjectDefConstraint(playerNuggetID, avoidNugget);
+ rmAddObjectDefConstraint(playerNuggetID, avoidWater10);
+ for(i=1; 4)
+ numTries = 3;
+ for(i=0; 3 && rmRandInt(1,3) > 1 && ((patternChance == 29) || (patternChance == 30) || (patternChance == 33) || (patternChance == 35)))
+ {
+ rmAddObjectDefConstraint(nugget4, avoidNuggetMed);
+ rmSetObjectDefMinDistance(nugget4, 70.0);
+ rmSetObjectDefMaxDistance(nugget4, rmXFractionToMeters(0.3));
+ rmSetNuggetDifficulty(12, 12);
+ rmPlaceObjectDefPerPlayer(nugget4, false, 1);
+
+ rmSetNuggetDifficulty(4, 4);
+ rmSetObjectDefMinDistance(nugget4, 0.0);
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 1);
+ if (cNumberNonGaiaPlayers > 4)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, rmRandInt(1,2));
+ }
+ else // only regular level 4 nuggets
+ {
+ rmSetObjectDefMinDistance(nugget4, 85.0);
+ rmSetObjectDefMaxDistance(nugget4, rmXFractionToMeters(0.4));
+ rmAddObjectDefConstraint(nugget4, avoidNuggetLong);
+ rmSetNuggetDifficulty(4, 4);
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, cNumberNonGaiaPlayers);
+ }
+ // more level 4 nuggets
+ rmAddObjectDefConstraint(nugget4, avoidNuggetLong);
+ if (rmRandInt(1,4) > 1)
+ {
+ rmSetObjectDefMinDistance(nugget4, 15.0);
+ rmSetObjectDefMaxDistance(nugget4, rmXFractionToMeters(0.15));
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 1);
+ if (cNumberNonGaiaPlayers > 3 && rmRandInt(1,2) == 1)
+ rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, 1);
+ }
+
+ // more level 3 nuggets
+ rmAddObjectDefConstraint(nugget3, fartherPlayerConstraint);
+ rmSetNuggetDifficulty(2, 3);
+ rmPlaceObjectDefPerPlayer(nugget3, false, 1);
+ if (rmRandInt(1,5) == 1)
+ rmPlaceObjectDefPerPlayer(nugget3, false, 1);
+
+ // Text
+ rmSetStatusText("",0.65);
+
+// more resources
+ // start area trees
+ int StartAreaTreeID=rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(StartAreaTreeID, treeType, 1, 0.0);
+ rmSetObjectDefMinDistance(StartAreaTreeID, 8);
+ rmSetObjectDefMaxDistance(StartAreaTreeID, 12);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidStartingUnitsSmall);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidTradeRoute);
+ rmAddObjectDefConstraint(StartAreaTreeID, avoidAll);
+ rmPlaceObjectDefPerPlayer(StartAreaTreeID, false, 3);
+
+ // berry bushes
+ int StartBerryBushID=rmCreateObjectDef("starting berry bush");
+ rmAddObjectDefItem(StartBerryBushID, "BerryBush", rmRandInt(3,5), 4.0);
+ rmSetObjectDefMinDistance(StartBerryBushID, 10.0);
+ rmSetObjectDefMaxDistance(StartBerryBushID, 16.0);
+ rmAddObjectDefConstraint(StartBerryBushID, avoidStartingUnitsSmall);
+ rmAddObjectDefConstraint(StartBerryBushID, avoidAll);
+ if (placeBerries == 1)
+ rmPlaceObjectDefPerPlayer(StartBerryBushID, false, 1);
+ if (tropicalMap == 1)
+ rmPlaceObjectDefPerPlayer(StartBerryBushID, false, 1);
+
+ rmSetObjectDefMinDistance(StartBerryBushID, 0.0);
+ rmSetObjectDefMaxDistance(StartBerryBushID, 75.0);
+ rmAddObjectDefConstraint(StartBerryBushID, nuggetPlayerConstraint);
+ if (extraBerries == 1)
+ rmPlaceObjectDefInArea(StartBerryBushID, 0, rmAreaID("TheCenter"), berryNum);
+ if (extraBerries == 2)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceObjectDefInArea(StartBerryBushID, 0, rmAreaID("TheCenter"), 2);
+ }
+
+ // start area huntable
+ int deerNum = rmRandInt(5,8);
+ int startPronghornID=rmCreateObjectDef("starting pronghorn");
+ rmAddObjectDefItem(startPronghornID, deerType, deerNum, 5.0);
+ rmAddObjectDefToClass(startPronghornID, rmClassID("huntableFood"));
+ rmSetObjectDefMinDistance(startPronghornID, 16);
+ rmSetObjectDefMaxDistance(startPronghornID, 22);
+ rmAddObjectDefConstraint(startPronghornID, avoidStartResource);
+ rmAddObjectDefConstraint(startPronghornID, shortAvoidImpassableLand);
+ rmAddObjectDefConstraint(startPronghornID, avoidAll);
+ rmSetObjectDefCreateHerd(startPronghornID, true);
+ rmPlaceObjectDefPerPlayer(startPronghornID, false, 1);
+
+ // second huntable
+ int deer2Num = rmRandInt(4, 8);
+ int farPronghornID=rmCreateObjectDef("far pronghorn");
+ rmAddObjectDefItem(farPronghornID, deer2Type, deer2Num, 5.0);
+ rmAddObjectDefToClass(farPronghornID, rmClassID("huntableFood"));
+ rmSetObjectDefMinDistance(farPronghornID, 42.0);
+ rmSetObjectDefMaxDistance(farPronghornID, 60.0);
+ rmAddObjectDefConstraint(farPronghornID, avoidStartResource);
+ rmAddObjectDefConstraint(farPronghornID, mediumPlayerConstraint);
+ rmAddObjectDefConstraint(farPronghornID, shortAvoidImpassableLand);
+ rmAddObjectDefConstraint(farPronghornID, avoidNativesShort);
+ rmAddObjectDefConstraint(farPronghornID, huntableConstraint);
+ rmAddObjectDefConstraint(farPronghornID, avoidAll);
+ rmAddObjectDefConstraint(farPronghornID, avoidIce);
+ rmSetObjectDefCreateHerd(farPronghornID, true);
+ if (sheepChance == 0)
+ rmPlaceObjectDefPerPlayer(farPronghornID, false, 2);
+ else
+ rmPlaceObjectDefPerPlayer(farPronghornID, false, 1);
+
+ // possible additional second huntable for low player numbers
+ if (rmRandInt(1,3) < 3)
+ {
+ if (cNumberNonGaiaPlayers < 4)
+ {
+ rmAddObjectDefConstraint(farPronghornID, fartherPlayerConstraint);
+ rmSetObjectDefMinDistance(farPronghornID, rmXFractionToMeters(0.25));
+ rmSetObjectDefMaxDistance(farPronghornID, rmXFractionToMeters(0.35));
+ rmPlaceObjectDefPerPlayer(farPronghornID, false, 1);
+ }
+ }
+
+// Mines - other
+ silverType = rmRandInt(1,10);
+ int GoldMediumID=rmCreateObjectDef("player silver med");
+ rmAddObjectDefItem(GoldMediumID, mineType, 1, 0.0);
+ rmAddObjectDefConstraint(GoldMediumID, avoidTradeRoute);
+ rmAddObjectDefConstraint(GoldMediumID, avoidSocket);
+ rmAddObjectDefConstraint(GoldMediumID, coinAvoidCoin);
+ rmAddObjectDefConstraint(GoldMediumID, shortAvoidCanyons);
+ rmAddObjectDefConstraint(GoldMediumID, avoidImportantItemSmall);
+ rmAddObjectDefConstraint(GoldMediumID, playerConstraint);
+ rmAddObjectDefConstraint(GoldMediumID, circleConstraint);
+ rmAddObjectDefConstraint(GoldMediumID, avoidAll);
+ rmAddObjectDefConstraint(GoldMediumID, avoidIce);
+ rmAddObjectDefConstraint(GoldMediumID, avoidWater10);
+ rmSetObjectDefMinDistance(GoldMediumID, 40.0);
+ rmSetObjectDefMaxDistance(GoldMediumID, 55.0);
+ rmPlaceObjectDefPerPlayer(GoldMediumID, false, 1);
+
+// Extra mines - distant, in the middle and near ends of axis.
+ silverType = rmRandInt(1,10);
+ int extraGoldID = rmCreateObjectDef("extra silver "+i);
+ if (mineChance == 1)
+ rmAddObjectDefItem(extraGoldID, "minegold", 1, 0);
+ else
+ rmAddObjectDefItem(extraGoldID, mineType, 1, 0);
+ rmAddObjectDefToClass(extraGoldID, rmClassID("importantItem"));
+ rmAddObjectDefConstraint(extraGoldID, avoidTradeRoute);
+ rmAddObjectDefConstraint(extraGoldID, avoidSocket);
+ rmAddObjectDefConstraint(extraGoldID, coinAvoidCoin);
+ rmAddObjectDefConstraint(extraGoldID, shortAvoidCanyons);
+ rmAddObjectDefConstraint(extraGoldID, avoidImportantItemSmall);
+ rmAddObjectDefConstraint(extraGoldID, avoidWater10);
+ rmAddObjectDefConstraint(extraGoldID, avoidAll);
+ rmAddObjectDefConstraint(extraGoldID, avoidIce);
+ rmSetObjectDefMinDistance(extraGoldID, 0.0);
+ if (makeIce == 1)
+ {
+ rmSetObjectDefMaxDistance(extraGoldID, 100.0);
+ rmAddObjectDefConstraint(extraGoldID, centerConstraintFar);
+ }
+ else if (makeLake == 1)
+ {
+ rmSetObjectDefMaxDistance(extraGoldID, 100.0);
+ rmAddObjectDefConstraint(extraGoldID, centerConstraintFar);
+ }
+ else
+ rmSetObjectDefMaxDistance(extraGoldID, 70.0);
+ if (mineNumber == 4)
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.5, 0.5, 1);
+ else
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.5, 0.5, rmRandInt(2,3));
+
+ if ((mineNumber < 4) || (mineNumber > 4))
+ {
+ if (cNumberNonGaiaPlayers > 4)
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.5, 0.5, 1);
+ if (cNumberNonGaiaPlayers > 6)
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.5, 0.5, 1);
+ }
+ if ((mineNumber < 5) || (mineNumber > 5))
+ {
+ if (axisChance == 1)
+ {
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.49, 0.78, 1);
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.51, 0.22, 1);
+ }
+ else
+ {
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.78, 0.51, 1);
+ rmPlaceObjectDefAtLoc(extraGoldID, 0, 0.22, 0.49, 1);
+ }
+ }
+ silverType = rmRandInt(1,10);
+ int GoldFarID=rmCreateObjectDef("player silver far");
+ if (mineChance == 2)
+ rmAddObjectDefItem(GoldFarID, "minegold", 1, 0);
+ else
+ rmAddObjectDefItem(GoldFarID, mineType, 1, 0.0);
+ rmAddObjectDefConstraint(GoldFarID, avoidTradeRoute);
+ rmAddObjectDefConstraint(GoldFarID, avoidSocket);
+ rmAddObjectDefConstraint(GoldFarID, coinAvoidCoin);
+ rmAddObjectDefConstraint(GoldFarID, shortAvoidCanyons);
+ rmAddObjectDefConstraint(GoldFarID, avoidImportantItemSmall);
+ rmAddObjectDefConstraint(GoldFarID, circleConstraint);
+ rmAddObjectDefConstraint(GoldFarID, avoidAll);
+ rmAddObjectDefConstraint(GoldFarID, farPlayerConstraint);
+ rmAddObjectDefConstraint(GoldFarID, avoidWater10);
+ rmAddObjectDefConstraint(GoldFarID, avoidIce);
+ rmSetObjectDefMinDistance(GoldFarID, 75.0);
+ rmSetObjectDefMaxDistance(GoldFarID, 100.0);
+ if (mineNumber < 6)
+ {
+ rmPlaceObjectDefPerPlayer(GoldFarID, false, rmRandInt(1,2));
+ }
+
+ silverType = rmRandInt(1,10);
+ int GoldFartherID=rmCreateObjectDef("player silver farther");
+ if (mineChance == 3)
+ rmAddObjectDefItem(GoldFartherID, "minegold", 1, 0);
+ else
+ rmAddObjectDefItem(GoldFartherID, mineType, 1, 0.0);
+ rmAddObjectDefConstraint(GoldFartherID, avoidTradeRoute);
+ rmAddObjectDefConstraint(GoldFartherID, avoidSocket);
+ rmAddObjectDefConstraint(GoldFartherID, coinAvoidCoin);
+ rmAddObjectDefConstraint(GoldFartherID, shortAvoidCanyons);
+ rmAddObjectDefConstraint(GoldFartherID, avoidImportantItemSmall);
+ rmAddObjectDefConstraint(GoldFartherID, circleConstraint);
+ rmAddObjectDefConstraint(GoldFartherID, avoidAll);
+ rmAddObjectDefConstraint(GoldFartherID, avoidIce);
+ rmAddObjectDefConstraint(GoldFartherID, avoidWater10);
+ if (sectionChance > 9)
+ {
+ rmSetObjectDefMinDistance(GoldFartherID, 120.0);
+ rmSetObjectDefMaxDistance(GoldFartherID, 200.0);
+ rmAddObjectDefConstraint(GoldFartherID, enormousPlayerConstraint);
+ }
+ else
+ {
+ rmSetObjectDefMinDistance(GoldFartherID, 90.0);
+ rmSetObjectDefMaxDistance(GoldFartherID, 150.0);
+ rmAddObjectDefConstraint(GoldFartherID, fartherPlayerConstraint);
+ }
+ if (mineNumber < 7)
+ {
+ if (cNumberNonGaiaPlayers < 4)
+ {
+ rmPlaceObjectDefPerPlayer(GoldFartherID, false, rmRandInt(1,2));
+ }
+ else if (cNumberNonGaiaPlayers < 6)
+ {
+ if (makeLake == 1)
+ rmPlaceObjectDefPerPlayer(GoldFartherID, false, 2);
+ else
+ rmPlaceObjectDefPerPlayer(GoldFartherID, false, rmRandInt(1,2));
+ }
+ else
+ {
+ rmPlaceObjectDefPerPlayer(GoldFartherID, false, rmRandInt(1,4));
+ }
+ }
+ if (mineNumber == 8)
+ {
+ if (cNumberNonGaiaPlayers < 4)
+ rmPlaceObjectDefAtLoc(GoldFartherID, 0, 0.5, 0.5, 1);
+ else if (cNumberNonGaiaPlayers == 4)
+ rmPlaceObjectDefAtLoc(GoldFartherID, 0, 0.5, 0.5, 2);
+ else
+ rmPlaceObjectDefAtLoc(GoldFartherID, 0, 0.5, 0.5, rmRandInt(2,3));
+ }
+
+// Extra tree clumps near players - to ensure fair access to wood
+ int extraTreesID=rmCreateObjectDef("extra trees");
+ rmAddObjectDefItem(extraTreesID, treeType, 5, 5.0);
+ rmSetObjectDefMinDistance(extraTreesID, 14);
+ rmSetObjectDefMaxDistance(extraTreesID, 18);
+ rmAddObjectDefConstraint(extraTreesID, avoidAll);
+ rmAddObjectDefConstraint(extraTreesID, avoidNuggetSmall);
+ rmAddObjectDefConstraint(extraTreesID, avoidCoin);
+ rmAddObjectDefConstraint(extraTreesID, avoidSocket);
+ rmAddObjectDefConstraint(extraTreesID, avoidTradeRoute);
+ for(i=1; 0)
+ {
+ int sheepID=rmCreateObjectDef("herdable animal");
+ rmAddObjectDefItem(sheepID, sheepType, 2, 4.0);
+ rmAddObjectDefToClass(sheepID, rmClassID("herdableFood"));
+ rmSetObjectDefMinDistance(sheepID, 38.0);
+ rmSetObjectDefMaxDistance(sheepID, 50.0);
+ rmAddObjectDefConstraint(sheepID, avoidSheep);
+ rmAddObjectDefConstraint(sheepID, avoidAll);
+ rmAddObjectDefConstraint(sheepID, avoidIce);
+ rmAddObjectDefConstraint(sheepID, playerConstraint);
+ rmAddObjectDefConstraint(sheepID, avoidCliffs);
+ rmAddObjectDefConstraint(sheepID, avoidImpassableLand);
+ rmPlaceObjectDefPerPlayer(sheepID, false, 1);
+ if (sheepChance == 2)
+ rmPlaceObjectDefPerPlayer(sheepID, false, 1);
+
+ rmSetObjectDefMinDistance(sheepID, 47.0);
+ rmSetObjectDefMaxDistance(sheepID, rmXFractionToMeters(0.3));
+ int extraFlocks = rmRandInt(cNumberNonGaiaPlayers,cNumberNonGaiaPlayers*2);
+ sheepChance = rmRandInt(1,2);
+ if (sheepChance == 1)
+ rmPlaceObjectDefAtLoc(sheepID, 0, 0.5, 0.5, cNumberNonGaiaPlayers);
+ else
+ rmPlaceObjectDefAtLoc(sheepID, 0, 0.5, 0.5, cNumberNonGaiaPlayers*2);
+ rmAddObjectDefConstraint(sheepID, farPlayerConstraint);
+ rmSetObjectDefMaxDistance(sheepID, rmXFractionToMeters(0.45));
+ rmPlaceObjectDefAtLoc(sheepID, 0, 0.5, 0.5, extraFlocks);
+ }
+
+// Central herds
+ int centralHerdID=rmCreateObjectDef("central herd");
+ rmAddObjectDefItem(centralHerdID, centerHerdType, rmRandInt(7,9), 6.0);
+ rmAddObjectDefToClass(centralHerdID, rmClassID("huntableFood"));
+ rmSetObjectDefMinDistance(centralHerdID, rmXFractionToMeters(0.05));
+ rmSetObjectDefMaxDistance(centralHerdID, rmXFractionToMeters(0.12));
+ rmAddObjectDefConstraint(centralHerdID, avoidTradeRoute);
+ rmAddObjectDefConstraint(centralHerdID, avoidImportantItem);
+ rmAddObjectDefConstraint(centralHerdID, avoidWater10);
+ rmAddObjectDefConstraint(centralHerdID, avoidIce);
+ rmAddObjectDefConstraint(centralHerdID, farPlayerConstraint);
+ rmAddObjectDefConstraint(centralHerdID, longHuntableConstraint);
+ rmSetObjectDefCreateHerd(centralHerdID, true);
+ rmPlaceObjectDefAtLoc(centralHerdID, 0, 0.5, 0.5, 2);
+ // additional of central herd type
+ rmAddObjectDefConstraint(centralHerdID, fartherPlayerConstraint);
+ rmSetObjectDefMinDistance(centralHerdID, rmXFractionToMeters(0.3));
+ rmSetObjectDefMaxDistance(centralHerdID, rmXFractionToMeters(0.38));
+ if (rmRandInt(1,4) > 1)
+ rmPlaceObjectDefPerPlayer(centralHerdID, false, 1);
+
+// far huntable
+ int farHuntableID=rmCreateObjectDef("far huntable");
+ rmAddObjectDefItem(farHuntableID, deerType, rmRandInt(5,9), 6.0);
+ rmAddObjectDefToClass(farHuntableID, rmClassID("huntableFood"));
+ rmSetObjectDefMinDistance(farHuntableID, rmXFractionToMeters(0.33));
+ rmSetObjectDefMaxDistance(farHuntableID, rmXFractionToMeters(0.4));
+ rmAddObjectDefConstraint(farHuntableID, avoidTradeRoute);
+ rmAddObjectDefConstraint(farHuntableID, avoidImportantItem);
+ rmAddObjectDefConstraint(farHuntableID, avoidWater10);
+ rmAddObjectDefConstraint(farHuntableID, fartherPlayerConstraint);
+ rmAddObjectDefConstraint(farHuntableID, longHuntableConstraint);
+ rmAddObjectDefConstraint(farHuntableID, avoidAll);
+ rmAddObjectDefConstraint(farHuntableID, avoidIce);
+ rmSetObjectDefCreateHerd(farHuntableID, true);
+ rmPlaceObjectDefPerPlayer(farHuntableID, false, 1);
+ if (sheepChance == 0)
+ {
+ if (rmRandInt(1,3) > 1)
+ rmPlaceObjectDefPerPlayer(farHuntableID, false, 1);
+ }
+ else
+ {
+ if (rmRandInt(1,3) == 1)
+ rmPlaceObjectDefPerPlayer(farHuntableID, false, 1);
+ }
+
+// Central forests for highlands, canyons
+ if (clearCenter < 1)
+ makeCentralForestPatch = 1;
+ if (clearCenter == 1)
+ {
+ if (makeCentralCanyon == 1)
+ makeCentralForestPatch = 1;
+ }
+ if (makeCentralCliffArea == 1) // forest for central highlands or canyons
+ {
+ if (makeCentralForestPatch == 1)
+ {
+ numTries=cNumberNonGaiaPlayers;
+ for (i=0; 4)
+ numTries=2*cNumberNonGaiaPlayers;
+ for (i=0; 3)
+ numTries=13*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 5)
+ numTries=12*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 7)
+ numTries=11*cNumberNonGaiaPlayers;
+ if (reducedForest == 1)
+ {
+ numTries=13*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 3)
+ numTries=11*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 5)
+ numTries=10*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 7)
+ numTries=9*cNumberNonGaiaPlayers;
+ }
+
+ if (clearCenter == 1)
+ {
+ numTries=11*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 3)
+ numTries=10*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 5)
+ numTries=9*cNumberNonGaiaPlayers;
+ if (cNumberNonGaiaPlayers > 7)
+ numTries=8*cNumberNonGaiaPlayers;
+ }
+
+ if ((patternChance == 1) || (patternChance == 2) || (patternChance == 3)|| (patternChance == 4) || (patternChance == 5)|| (patternChance == 8) || (patternChance == 14)|| (patternChance == 16) || (patternChance == 18) || (patternChance == 22) || (patternChance == 24)|| (patternChance == 25) || (patternChance == 27) ||(patternChance == 28) || (patternChance == 29) || (patternChance == 30) || (patternChance == 32)|| (patternChance == 34)|| (patternChance == 35) || (patternChance == 37))
+ {
+ if (rmRandInt(1,3) == 1)
+ denseForest = 1;
+ if (rmRandInt(1,5) < 3)
+ {
+ if (rmRandInt(1,3) > 1)
+ forSize = 4;
+ else
+ forSize = 3;
+ }
+ }
+
+ failCount=0;
+ for (i=0; 3)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmAddAreaConstraint(forest, centerConstraintForest);
+ else
+ rmAddAreaConstraint(forest, centerConstraintForest2);
+ }
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ rmAddAreaConstraint(forest, centerConstraintForest3);
+ else
+ rmAddAreaConstraint(forest, centerConstraintForest4);
+ }
+ }
+ else
+ {
+ if (makeCentralCliffArea == 1)
+ rmAddAreaConstraint(forest, centerConstraintShort);
+ }
+ if (hillTrees == 1)
+ {
+ if (rmRandInt(1,2) == 1)
+ {
+ rmSetAreaBaseHeight(forest, rmRandFloat(3.0,5.0));
+ rmSetAreaHeightBlend(forest, rmRandFloat(1.7,3.0));
+ }
+ }
+ if(rmBuildArea(forest)==false)
+ {
+ // Stop trying once we fail 3 times in a row.
+ failCount++;
+ if(failCount==5)
+ break;
+ }
+ else
+ failCount=0;
+ if (forestCoverUp == 1)
+ {
+ int coverForestPatchID = rmCreateArea("cover forest patch"+i, rmAreaID("forest "+i));
+ rmSetAreaWarnFailure(coverForestPatchID, false);
+ rmSetAreaSize(coverForestPatchID, rmAreaTilesToFraction(patchSize), rmAreaTilesToFraction(patchSize));
+ rmSetAreaCoherence(coverForestPatchID, 0.99);
+ rmSetAreaMix(coverForestPatchID, baseType);
+ if (bareCliffs == 1)
+ rmAddAreaConstraint(coverForestPatchID, avoidCliffsShort);
+ rmBuildArea(coverForestPatchID);
+ }
+ }
+
+ // Text
+ rmSetStatusText("",0.80);
+
+// Random trees
+ int StragglerTreeID=rmCreateObjectDef("stragglers");
+ rmAddObjectDefItem(StragglerTreeID, treeType, 1, 0.0);
+ rmAddObjectDefConstraint(StragglerTreeID, avoidAll);
+ rmAddObjectDefConstraint(StragglerTreeID, avoidStartingUnitsSmall);
+ rmAddObjectDefConstraint(StragglerTreeID, hillConstraint);
+ rmAddObjectDefConstraint(StragglerTreeID, avoidCoin);
+ rmAddObjectDefConstraint(StragglerTreeID, patchConstraint);
+ rmAddObjectDefConstraint(StragglerTreeID, avoidWater10);
+ if ((noCliffForest == 1) || (bareCliffs == 1))
+ rmAddObjectDefConstraint(StragglerTreeID, avoidCliffs);
+ rmSetObjectDefMinDistance(StragglerTreeID, 10.0);
+ rmSetObjectDefMaxDistance(StragglerTreeID, rmXFractionToMeters(0.5));
+ for(i=0; 1)
+ rmSetAreaTerrainType(gpPatch0, "great_plains\ground6_gp");
+ else
+ rmSetAreaTerrainType(gpPatch0, "great_plains\ground8_gp");
+ rmAddAreaToClass(gpPatch0, rmClassID("classPatch"));
+ rmSetAreaMinBlobs(gpPatch0, 2);
+ rmSetAreaMaxBlobs(gpPatch0, 4);
+ rmSetAreaMinBlobDistance(gpPatch0, 5.0);
+ rmSetAreaMaxBlobDistance(gpPatch0, 12.0);
+ rmSetAreaCoherence(gpPatch0, 0.3);
+ rmSetAreaSmoothDistance(gpPatch0, 10);
+ rmAddAreaConstraint(gpPatch0, shortAvoidImpassableLand);
+ if (bareCliffs == 1)
+ rmAddAreaConstraint(gpPatch0, avoidCliffsShort);
+ rmAddAreaConstraint(gpPatch0, forestConstraint);
+ rmAddAreaConstraint(gpPatch0, patchConstraint);
+ rmBuildArea(gpPatch0);
+ }
+
+ for (i=0;
-
+
ui\random_map\unknown\unknown_ss_01
ui\random_map\unknown\unknown_ss_02
ui\random_map\unknown\unknown_ss_03
diff --git a/RMM/UnknownWater.xs b/RMM/UnknownWater.xs
new file mode 100644
index 0000000..76e6d92
--- /dev/null
+++ b/RMM/UnknownWater.xs
@@ -0,0 +1,5922 @@
+// Gandalf's Isles TAD
+// by RF_Gandalf
+// A Random map script for AOE3: The Asian Dynasties
+
+include "mercenaries.xs";
+include "ypAsianInclude.xs";
+include "ypKOTHInclude.xs";
+
+void main(void)
+{
+// Text
+ rmSetStatusText("",0.01);
+
+// Set up for variables
+ string baseType = "";
+ string forestType = "";
+ string treeType = "";
+ string deerType = "";
+ string deer2Type = "";
+ string sheepType = "";
+ string centerHerdType = "";
+ string fishType = "";
+ string fish2Type = "";
+ string whaleType = "";
+ string native1Name = "";
+ string native2Name = "";
+ string mineType = "";
+ string propType = "";
+ string brushType = "";
+ string tradeRouteType = "";
+
+// Pick pattern for trees, terrain, features, etc.
+ int patternChance = rmRandInt(30,38);
+ if ((patternChance == 5) || (patternChance == 7) || (patternChance == 14) || (patternChance == 16) || (patternChance == 19) || (patternChance == 20) || (patternChance == 25)) // reset frequency for some patterns - less snow and american jungle
+ {
+ if (rmRandInt(1,2) == 2)
+ patternChance = rmRandInt(1,38);
+ }
+ int variantChance = rmRandInt(1,2);
+ int lightingChance = rmRandInt(1,2);
+ int axisChance = rmRandInt(1,2);
+ int playerSide = rmRandInt(1,2);
+ int positionChance = rmRandInt(1,2);
+ int distChance = rmRandInt(1,7);
+ int sectionChance = rmRandInt(0,12);
+ int directionChance = rmRandInt(1,2);
+ int nativePattern = -1;
+ int sheepChance = rmRandInt(1,2);
+ int tropical = 0;
+ int arctic = 0;
+ int placeBerries = 1;
+ int noHeight = 0;
+ int nativeChoice = rmRandInt(1,2);
+ int baseHeight = rmRandInt(1,2);
+ int twoChoice = rmRandInt(1,2);
+ int threeChoice = rmRandInt(1,3);
+ int fourChoice = rmRandInt(1,4);
+ int fiveChoice = rmRandInt(1,5);
+ int sixChoice = rmRandInt(1,6);
+ int extraNativeIs = 0;
+ int forestCoverUp = 0;
+ int lowForest = 0;
+ int cacheChance = rmRandInt(1,2);
+ int cacheType = 0;
+ int llamaCache = 0;
+ int berryCache = 0;
+ int campfireCache = 0;
+ int centeredBigIsland = 0;
+ int eBigIs = 0;
+ int wBigIs = 0;
+ int nBigIs = 0;
+ int sBigIs = 0;
+ int eEdgeIs = 0;
+ int wEdgeIs = 0;
+ int nEdgeIs = 0;
+ int sEdgeIs = 0;
+ int vultures = 0;
+ int eagles = 0;
+ int eaglerock = 0;
+ int kingfishers = 0;
+ int underbrush = 0;
+ int texasProp = 0;
+ int waterNuggets = 0;
+ mineType = "mine";
+
+// Text
+ rmSetStatusText("",0.05);
+
+// Picks the map size
+ int playerTiles=47500;
+ if (cNumberNonGaiaPlayers == 8)
+ playerTiles = 35000;
+ else if (cNumberNonGaiaPlayers == 7)
+ playerTiles = 37000;
+ else if (cNumberNonGaiaPlayers == 6)
+ playerTiles = 39000;
+ else if (cNumberNonGaiaPlayers == 5)
+ playerTiles = 41000;
+ else if (cNumberNonGaiaPlayers == 4)
+ playerTiles = 42500;
+ else if (cNumberNonGaiaPlayers == 3)
+ playerTiles = 44500;
+
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles/0.8);
+ rmEchoInfo("Map size="+size+"m x "+size+"m");
+ rmSetMapSize(size, size);
+ rmSetSeaLevel(0.0);
+
+// Select terrain pattern details
+
+ if (patternChance == 1) // NE
+ {
+ rmSetSeaType("new england coast");
+ rmSetMapType("newEngland");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("constantinople");
+ else
+ rmSetLightingSet("new england");
+ baseType = "newengland_grass";
+ forestType = "new england forest";
+ treeType = "TreeNewEngland";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "moose";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "moose";
+ centerHerdType = "deer";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishCod";
+ fish2Type = "FishSalmon";
+ whaleType = "minkeWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ cacheType = 1;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ nativePattern = 40;
+ eagles = 1;
+ }
+ else if (patternChance == 2) // carolina
+ {
+ rmSetSeaType("atlantic coast");
+ rmSetMapType("carolina");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("312b_washington");
+ else
+ rmSetLightingSet("carolina");
+ baseType = "carolina_grass";
+ forestType = "carolina pine forest";
+ treeType = "TreeCarolinaGrass";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "turkey";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ cacheType = 1;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ noHeight = 1;
+ if (nativeChoice == 1)
+ nativePattern = 3;
+ else
+ nativePattern = 40;
+ eagles = 1;
+ }
+ else if (patternChance == 3) // bayou
+ {
+ rmSetSeaType("yucatan Coast");
+ rmSetMapType("bayou");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("berlin dusk");
+ else
+ rmSetLightingSet("bayou");
+
+ baseType = "bayou_grass";
+ forestType = "bayou swamp forest";
+ treeType = "TreeBayou";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "turkey";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ cacheType = 3;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ if (nativeChoice == 1)
+ nativePattern = 3;
+ else
+ nativePattern = 21;
+ eagles = 1;
+ underbrush = 1;
+ brushType = "UnderbrushCarolinasMarsh";
+ }
+ else if (patternChance == 4) // great lakes green
+ {
+ if (variantChance == 1)
+ rmSetSeaType("great lakes");
+ else
+ rmSetSeaType("new england coast");
+ rmSetMapType("greatlakes");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("constantinople");
+ else
+ rmSetLightingSet("Great Lakes");
+
+ baseType = "greatlakes_grass";
+ forestType = "great lakes forest";
+ treeType = "TreeGreatLakes";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "bison";
+ centerHerdType = "moose";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "moose";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "minkeWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ cacheType = 1;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ if (fiveChoice == 1)
+ nativePattern = 4;
+ else if (fiveChoice == 2)
+ nativePattern = 5;
+ else if (fiveChoice == 3)
+ nativePattern = 40;
+ else if (fiveChoice == 4)
+ nativePattern = 22;
+ else
+ nativePattern = 40;
+ eagles = 1;
+ }
+ else if (patternChance == 5) // great lakes winter
+ {
+ rmSetSeaType("great lakes");
+ rmSetMapType("greatlakes");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("308b_caribbeanlight");
+ else
+ rmSetLightingSet("Great Lakes Winter");
+ baseType = "greatlakes_snow";
+ forestType = "great lakes forest snow";
+ treeType = "TreeGreatLakesSnow";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "moose";
+ centerHerdType = "elk";
+ }
+ else
+ {
+ deerType = "bison";
+ deer2Type = "deer";
+ centerHerdType = "moose";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishSalmon";
+ fish2Type = "FishCod";
+ whaleType = "minkeWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ cacheType = 1;
+ placeBerries = 0;
+ noHeight = 1;
+ if (fiveChoice == 1)
+ nativePattern = 4;
+ else if (fiveChoice == 2)
+ nativePattern = 5;
+ else if (fiveChoice == 3)
+ nativePattern = 40;
+ else if (fiveChoice == 4)
+ nativePattern = 22;
+ else
+ nativePattern = 5;
+ eagles = 1;
+ }
+ else if (patternChance == 6) // saguenay
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("saguenay");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("lisbon");
+ else
+ rmSetLightingSet("saguenay");
+ baseType = "saguenay grass";
+ forestType = "saguenay forest";
+ treeType = "TreeSaguenay";
+ if (variantChance == 1)
+ {
+ deerType = "caribou";
+ deer2Type = "moose";
+ centerHerdType = "caribou";
+ }
+ else
+ {
+ deerType = "caribou";
+ deer2Type = "caribou";
+ centerHerdType = "moose";
+ }
+ sheepType = "sheep";
+ fishType = "FishSalmon";
+ fish2Type = "FishCod";
+ whaleType = "beluga";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ else
+ mineType = "MineCopper";
+ cacheType = 1;
+ if (threeChoice == 1)
+ nativePattern = 5;
+ else if (threeChoice == 2)
+ nativePattern = 6;
+ else if (threeChoice == 3)
+ nativePattern = 16;
+ eagles = 1;
+ }
+ else if (patternChance == 7) // yukon
+ {
+ rmSetSeaType("great lakes ice");
+ rmSetMapType("yukon");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("305b");
+ else
+ rmSetLightingSet("yukon");
+ baseType = "yukon snow";
+ forestType = "yukon snow forest";
+ treeType = "TreeYukonSnow";
+ if (variantChance == 1)
+ {
+ deerType = "caribou";
+ deer2Type = "muskOx";
+ centerHerdType = "muskOx";
+ }
+ else
+ {
+ deerType = "muskOx";
+ deer2Type = "caribou";
+ centerHerdType = "caribou";
+ }
+ sheepChance = 0;
+ fishType = "FishSalmon";
+ fish2Type = "FishCod";
+ whaleType = "beluga";
+ if (rmRandInt(1,2) == 1)
+ mineType = "minegold";
+ cacheType = 1;
+ placeBerries = 0;
+ arctic = 1;
+ noHeight = 1;
+ if (fiveChoice == 1)
+ nativePattern = 5;
+ else if (fiveChoice == 2)
+ nativePattern = 6;
+ else if (fiveChoice == 3)
+ nativePattern = 8;
+ else if (fiveChoice == 4)
+ nativePattern = 27;
+ else
+ nativePattern = 28;
+ eagles = 1;
+ }
+ else if (patternChance == 8) // rockies
+ {
+ rmSetSeaType("great lakes");
+ rmSetMapType("rockies");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("305b");
+ else
+ rmSetLightingSet("rockies");
+ baseType = "rockies_grass";
+ forestType = "rockies forest";
+ treeType = "TreeRockies";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "elk";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "elk";
+ deer2Type = "bighornsheep";
+ centerHerdType = "deer";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishSalmon";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ cacheType = 2;
+ nativeChoice = rmRandInt(1,5);
+ if (nativeChoice == 1)
+ nativePattern = 23;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 19;
+ else if (nativeChoice == 4)
+ nativePattern = 8;
+ else if (nativeChoice == 5)
+ nativePattern = 28;
+ eagles = 1;
+ underbrush = 1;
+ brushType = "UnderbrushRockies";
+ }
+ else if (patternChance == 9) // great plains 1
+ {
+ rmSetSeaType("Yucatan coast");
+ rmSetMapType("greatPlains");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("ottoman morning");
+ else
+ rmSetLightingSet("great plains");
+ baseType = "great plains grass";
+ forestType = "great plains forest";
+ treeType = "TreeGreatPlains";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "pronghorn";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "elk";
+ }
+ if (sheepChance == 1)
+ sheepType = "cow";
+ else
+ sheepType = "sheep";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "minkeWhale";
+ cacheType = 2;
+ nativeChoice = rmRandInt(1,5);
+ if (nativeChoice == 1)
+ nativePattern = 23;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 19;
+ else if (nativeChoice == 4)
+ nativePattern = 8;
+ else if (nativeChoice == 5)
+ nativePattern = 28;
+ vultures = 1;
+ underbrush = 1;
+ brushType = "underbrushGreatPlains";
+ }
+ else if (patternChance == 10) // great plains 2
+ {
+ rmSetSeaType("Yucatan coast");
+ rmSetMapType("greatPlains");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("spc14abuffalo");
+ else
+ rmSetLightingSet("great plains");
+ baseType = "great plains drygrass";
+ forestType = "great plains forest";
+ treeType = "TreeGreatPlains";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "pronghorn";
+ centerHerdType = "bison";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "deer";
+ }
+ sheepType = "cow";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ cacheType = 2;
+ forestCoverUp = 1;
+ lowForest = rmRandInt(0,1);
+ nativeChoice = rmRandInt(1,5);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 8;
+ else if (nativeChoice == 5)
+ nativePattern = 28;
+ if (rmRandInt(1,2) == 1)
+ texasProp = 1;
+ else
+ eaglerock = 1;
+ underbrush = 1;
+ brushType = "underbrushGreatPlains";
+ }
+ else if (patternChance == 11) // texas grass
+ {
+ rmSetSeaType("Atlantic Coast");
+ rmSetMapType("texas");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("pampas");
+ else
+ rmSetLightingSet("texas");
+ baseType = "texas_grass";
+ forestType = "texas forest";
+ treeType = "TreeTexas";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "deer";
+ centerHerdType = "bison";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "deer";
+ }
+ sheepType = "cow";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ cacheType = 2;
+ noHeight = 1;
+ lowForest = rmRandInt(0,1);
+ nativeChoice = rmRandInt(1,6);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 19;
+ else if (nativeChoice == 5)
+ nativePattern = 20;
+ else
+ nativePattern = 9;
+ if (rmRandInt(1,2) == 1)
+ texasProp = 1;
+ else
+ vultures = 1;
+ underbrush = 1;
+ brushType = "underbrushTexasGrass";
+ }
+ else if (patternChance == 12) // texas desert
+ {
+ rmSetSeaType("Atlantic Coast");
+ rmSetMapType("texas");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("seville");
+ else
+ rmSetLightingSet("texas");
+ baseType = "texas_dirt";
+ forestType = "texas forest dirt";
+ treeType = "TreeTexasDirt";
+ if (variantChance == 1)
+ {
+ deerType = "bison";
+ deer2Type = "pronghorn";
+ centerHerdType = "pronghorn";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bison";
+ }
+ sheepType = "cow";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ cacheType = 2;
+ noHeight = 1;
+ lowForest = rmRandInt(0,1);
+ nativeChoice = rmRandInt(1,6);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 31;
+ else if (nativeChoice == 5)
+ nativePattern = 38;
+ else
+ nativePattern = 39;
+ if (rmRandInt(1,2) == 1)
+ texasProp = 1;
+ else
+ eaglerock = 1;
+ underbrush = 1;
+ brushType = "UnderbrushDesert";
+ }
+ else if (patternChance == 13) // sonora
+ {
+ rmSetSeaType("caribbean coast");
+ rmSetMapType("sonora");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("sonora");
+ else
+ rmSetLightingSet("pampas");
+ baseType = "sonora_dirt";
+ forestType = "sonora forest";
+ treeType = "TreeSonora";
+ if (variantChance == 1)
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bighornsheep";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bighornsheep";
+ centerHerdType = "bison";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishSardine";
+ fish2Type = "FishMahi";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ cacheType = 2;
+ else
+ cacheType = 3;
+ noHeight = 1;
+ lowForest = 1;
+ if (fiveChoice == 1)
+ nativePattern = 10;
+ else if (fiveChoice == 2)
+ nativePattern = 31;
+ else if (fiveChoice == 3)
+ nativePattern = 32;
+ else if (fiveChoice == 4)
+ nativePattern = 33;
+ else
+ nativePattern = 37;
+ eaglerock = 1;
+ underbrush = 1;
+ brushType = "UnderbrushDesert";
+ }
+ else if (patternChance == 14) // yucatan
+ {
+ rmSetSeaType("yucatan Coast");
+ rmSetMapType("yucatan");
+ rmSetMapType("tropical");
+ if (lightingChance == 1)
+ rmSetLightingSet("311b");
+ else
+ rmSetLightingSet("yucatan");
+ baseType = "yucatan_grass";
+ forestType = "yucatan forest";
+ treeType = "TreeYucatan";
+ if (variantChance == 1)
+ {
+ deerType = "tapir";
+ deer2Type = "turkey";
+ centerHerdType = "capybara";
+ }
+ else
+ {
+ deerType = "capybara";
+ deer2Type = "turkey";
+ centerHerdType = "tapir";
+ }
+ sheepChance = 0;
+ tropical = 1;
+ fishType = "FishTarpon";
+ fish2Type = "FishMahi";
+ whaleType = "humpbackWhale";
+ cacheType = 5;
+ if (rmRandInt(1,3) < 3)
+ berryCache = 1;
+ nativeChoice = rmRandInt(1,3);
+ if (nativeChoice == 1)
+ nativePattern = 12;
+ else if (nativeChoice == 2)
+ nativePattern = 35;
+ else if (nativeChoice == 3)
+ nativePattern = 36;
+ kingfishers = 1;
+ }
+ else if (patternChance == 15) // caribbean
+ {
+ rmSetSeaType("caribbean coast");
+ rmSetMapType("caribbean");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("301a_malta");
+ else
+ rmSetLightingSet("caribbean");
+ baseType = "caribbean grass";
+ forestType = "caribbean palm forest";
+ treeType = "TreeCaribbean";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "tapir";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "tapir";
+ centerHerdType = "deer";
+ }
+ sheepChance = 0;
+ tropical = 1;
+ fishType = "FishTarpon";
+ fish2Type = "FishMahi";
+ whaleType = "humpbackWhale";
+ cacheType = 3;
+ noHeight = 1;
+ if (fiveChoice == 1)
+ nativePattern = 12;
+ else if (fiveChoice == 2)
+ nativePattern = 13;
+ else if (fiveChoice == 3)
+ nativePattern = 18;
+ else if (fiveChoice == 4)
+ nativePattern = 36;
+ else
+ nativePattern = 42;
+ kingfishers = 1;
+ }
+ else if (patternChance == 16) // amazon
+ {
+ rmSetSeaType("yucatan coast");
+ rmSetMapType("amazonia");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("323b_inca");
+ else
+ rmSetLightingSet("amazon");
+ baseType = "amazon grass";
+ forestType = "amazon rain forest";
+ treeType = "TreeAmazon";
+ if (variantChance == 1)
+ {
+ deerType = "tapir";
+ deer2Type = "tapir";
+ centerHerdType = "capybara";
+ }
+ else
+ {
+ deerType = "capybara";
+ deer2Type = "tapir";
+ centerHerdType = "capybara";
+ }
+ sheepChance = 0;
+ tropical = 1;
+ fishType = "FishMahi";
+ fish2Type = "FishTarpon";
+ whaleType = "humpbackWhale";
+ cacheType = 3;
+ if (fiveChoice == 1)
+ nativePattern = 13;
+ else if (fiveChoice == 2)
+ nativePattern = 14;
+ else if (fiveChoice == 3)
+ nativePattern = 15;
+ else if (fiveChoice == 4)
+ nativePattern = 18;
+ else
+ nativePattern = 26;
+ kingfishers = 1;
+ }
+ else if (patternChance == 17) // pampas
+ {
+ rmSetSeaType("caribbean coast");
+ rmSetMapType("pampas");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("texas");
+ else
+ rmSetLightingSet("pampas");
+ baseType = "pampas_grass";
+ forestType = "pampas forest";
+ treeType = "TreePampas";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "rhea";
+ centerHerdType = "rhea";
+ }
+ else
+ {
+ deerType = "rhea";
+ deer2Type = "deer";
+ centerHerdType = "rhea";
+ }
+ sheepType = "llama";
+ fishType = "FishMahi";
+ fish2Type = "FishTarpon";
+ whaleType = "humpbackWhale";
+ cacheType = 3;
+ lowForest = rmRandInt(0,1);
+ noHeight = 1;
+ if (rmRandInt(1,3) < 3)
+ llamaCache = 1;
+ if (threeChoice == 1)
+ nativePattern = 14;
+ else if (threeChoice == 2)
+ nativePattern = 25;
+ else
+ nativePattern = 26;
+ vultures = 1;
+ underbrush = 1;
+ brushType = "UnderbrushPampas";
+ }
+ else if (patternChance == 18) // patagonia
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("patagonia");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("paris day");
+ else
+ rmSetLightingSet("patagonia");
+ baseType = "patagonia_grass";
+ forestType = "patagonia forest";
+ treeType = "TreePatagoniaDirt";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "rhea";
+ centerHerdType = "rhea";
+ }
+ else
+ {
+ deerType = "rhea";
+ deer2Type = "deer";
+ centerHerdType = "rhea";
+ }
+ sheepType = "llama";
+ fishType = "FishSalmon";
+ fish2Type = "FishSardine";
+ whaleType = "minkeWhale";
+ cacheType = 1;
+
+ if (rmRandInt(1,3) < 3)
+ llamaCache = 1;
+ if (rmRandInt(1,3) < 3)
+ berryCache = 1;
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 15;
+ else if (fiveChoice == 3)
+ nativePattern = 24;
+ else if (fiveChoice == 4)
+ nativePattern = 25;
+ else
+ nativePattern = 26;
+ eagles = 1;
+ }
+ else if (patternChance == 19) // nwt
+ {
+ rmSetSeaType("Northwest Territory Water");
+ rmSetMapType("northwestTerritory");
+ rmSetMapType("grass");
+ if (lightingChance == 2)
+ rmSetLightingSet("nwterritory");
+ else
+ rmSetLightingSet("saguenay");
+ baseType = "nwt_grass1";
+ if (twoChoice == 1)
+ {
+ forestType = "NW Territory Birch Forest";
+ treeType = "TreeGreatLakes";
+ }
+ else
+ {
+ forestType = "NW Territory Forest";
+ treeType = "TreeGreatPlains";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "elk";
+ deer2Type = "moose";
+ centerHerdType = "moose";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "moose";
+ centerHerdType = "elk";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fish2Type = "FishSalmon";
+ fishType = "FishCod";
+ whaleType = "humpbackWhale";
+ cacheType = 1;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ if (fourChoice == 1)
+ nativePattern = 27;
+ else if (fourChoice == 2)
+ nativePattern = 28;
+ else if (fourChoice == 3)
+ nativePattern = 7;
+ else
+ nativePattern = 6;
+ kingfishers = 1;
+ }
+ else if (patternChance == 20) // yukon tundra
+ {
+ rmSetSeaType("hudson bay");
+ rmSetMapType("yukon");
+ rmSetMapType("snow");
+ if (lightingChance == 1)
+ rmSetLightingSet("seville morning");
+ else
+ rmSetLightingSet("yukon");
+ baseType = "yukon grass";
+ forestType = "yukon forest";
+ treeType = "TreeYukon";
+ if (variantChance == 1)
+ {
+ deerType = "muskOx";
+ deer2Type = "caribou";
+ centerHerdType = "caribou";
+ }
+ else
+ {
+ deerType = "caribou";
+ deer2Type = "caribou";
+ centerHerdType = "muskOx";
+ }
+ sheepChance = 0;
+ fishType = "FishSalmon";
+ fish2Type = "FishCod";
+ whaleType = "minkeWhale";
+ cacheType = 1;
+ arctic = 1;
+ placeBerries = 0;
+ if (threeChoice == 1)
+ nativePattern = 5;
+ else if (threeChoice == 2)
+ nativePattern = 6;
+ else if (threeChoice == 3)
+ nativePattern = 16;
+ eagles = 1;
+ }
+ else if (patternChance == 21) // painted desert
+ {
+ rmSetSeaType("Atlantic Coast");
+ rmSetMapType("sonora");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("seville");
+ else
+ rmSetLightingSet("pampas");
+ if (twoChoice == 1)
+ baseType = "painteddesert_groundmix_2";
+ else
+ baseType = "painteddesert_groundmix_1";
+ forestType = "painteddesert forest";
+ treeType = "TreePaintedDesert";
+ if (variantChance == 1)
+ {
+ deerType = "pronghorn";
+ deer2Type = "bison";
+ centerHerdType = "bighornsheep";
+ }
+ else
+ {
+ deerType = "pronghorn";
+ deer2Type = "bighornsheep";
+ centerHerdType = "bison";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fishType = "FishSardine";
+ fish2Type = "FishMahi";
+ whaleType = "humpbackWhale";
+ mineType = "MineCopper";
+ cacheType = 3;
+ lowForest = rmRandInt(0,1);
+ noHeight = 1;
+ if (fiveChoice == 1)
+ nativePattern = 30;
+ else if (fiveChoice == 2)
+ nativePattern = 31;
+ else if (fiveChoice == 3)
+ nativePattern = 32;
+ else if (fiveChoice == 4)
+ nativePattern = 33;
+ else
+ nativePattern = 37;
+ eaglerock = 1;
+ }
+ else if (patternChance == 22) // andes
+ {
+ rmSetSeaType("california coast");
+ rmSetMapType("andes");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("greatplainstest");
+ else
+ rmSetLightingSet("andes");
+ baseType = "andes_grass_a";
+ forestType = "andes forest";
+ treeType = "TreeAndes";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "rhea";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "rhea";
+ centerHerdType = "guanaco";
+ }
+ sheepType = "llama";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ cacheType = 5;
+ if (rmRandInt(1,3) < 3)
+ llamaCache = 1;
+ if (rmRandInt(1,3) < 3)
+ berryCache = 1;
+ tropical = 1;
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 24;
+ else if (fiveChoice == 3)
+ nativePattern = 25;
+ else if (fiveChoice == 4)
+ nativePattern = 26;
+ else
+ nativePattern = 34;
+ vultures = 1;
+ }
+ else if (patternChance == 23) // central araucania
+ {
+ rmSetSeaType("Araucania Central Coast");
+ rmSetMapType("araucania");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Araucania Central");
+ else
+ rmSetLightingSet("new england");
+ if (twoChoice == 1)
+ {
+ baseType = "araucania_grass_b";
+ forestCoverUp = 1;
+ }
+ else
+ baseType = "araucania_grass_d";
+ forestType = "Araucania Forest";
+ treeType = "TreeAraucania";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "deer";
+ centerHerdType = "guanaco";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "guanaco";
+ }
+ sheepType = "llama";
+ fishType = "FishCod";
+ fish2Type = "FishSalmon";
+ whaleType = "humpbackWhale";
+ mineType = "MineCopper";
+ cacheType = 5;
+ if (rmRandInt(1,3) < 3)
+ llamaCache = 1;
+ if (rmRandInt(1,3) < 3)
+ berryCache = 1;
+ tropical = 1;
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 25;
+ else if (fiveChoice == 3)
+ nativePattern = 25;
+ else if (fiveChoice == 4)
+ nativePattern = 18;
+ else
+ nativePattern = 11;
+ kingfishers = 1;
+ }
+ else if (patternChance == 24) // north araucania
+ {
+ rmSetSeaType("Araucania North Coast");
+ rmSetMapType("araucania");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("NthAraucaniaLight");
+ else
+ rmSetLightingSet("constantinople");
+ baseType = "araucania_north_grass_b";
+ forestType = "North Araucania Forest";
+ treeType = "TreeAraucania";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "deer";
+ centerHerdType = "guanaco";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "guanaco";
+ }
+ sheepType = "llama";
+ fishType = "FishCod";
+ fish2Type = "FishSardine";
+ whaleType = "humpbackWhale";
+ mineType = "MineCopper";
+ lowForest = rmRandInt(0,1);
+ if (rmRandInt(1,2) == 1)
+ cacheType = 5;
+ else
+ cacheType = 4;
+ if (rmRandInt(1,4) < 4)
+ llamaCache = 1;
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 24;
+ else if (fiveChoice == 3)
+ nativePattern = 25;
+ else if (fiveChoice == 4)
+ nativePattern = 26;
+ else
+ nativePattern = 34;
+ vultures = 1;
+ }
+ else if (patternChance == 25) // south araucania
+ {
+ rmSetSeaType("Araucania Southern Coast");
+ rmSetMapType("araucania");
+ rmSetMapType("grass");
+ if (lightingChance == 2)
+ rmSetLightingSet("SthAraucaniaLight");
+ else
+ rmSetLightingSet("303a_boston");
+ baseType = "araucania_snow_c";
+ forestType = "Patagonia Snow Forest";
+ treeType = "TreePatagoniaSnow";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "deer";
+ centerHerdType = "guanaco";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "deer";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "llama";
+ fish2Type = "FishCod";
+ fishType = "FishSalmon";
+ whaleType = "humpbackWhale";
+ mineType = "MineCopper";
+ if (rmRandInt(1,2) == 1)
+ cacheType = 5;
+ else
+ cacheType = 4;
+ if (rmRandInt(1,3) < 3)
+ llamaCache = 1;
+ placeBerries = 0;
+ if (fourChoice == 1)
+ nativePattern = 14;
+ else if (fourChoice == 2)
+ nativePattern = 25;
+ else if (fourChoice == 3)
+ nativePattern = 26;
+ else
+ nativePattern = 11;
+ eagles = 1;
+ }
+ else if (patternChance == 26) // california green
+ {
+ rmSetSeaType("california coast");
+ rmSetMapType("california");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("california");
+ else
+ rmSetLightingSet("new england");
+ baseType = "california_grass";
+ if (fourChoice < 3)
+ {
+ forestType = "california redwood forest";
+ treeType = "TreeRedwood";
+ }
+ else
+ {
+ forestType = "California pine forest";
+ treeType = "TreePonderosaPine";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "elk";
+ deer2Type = "deer";
+ centerHerdType = "elk";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "elk";
+ centerHerdType = "elk";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fish2Type = "FishCod";
+ fishType = "FishSalmon";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "minegold";
+ cacheType = 4;
+ if (twoChoice == 1)
+ nativePattern = 27;
+ else
+ nativePattern = 28;
+ eagles = 1;
+ }
+ else if (patternChance == 27) // california desert
+ {
+ rmSetSeaType("california coast");
+ rmSetMapType("california");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("california");
+ else
+ rmSetLightingSet("new england");
+ baseType = "california_desert2";
+ if (fourChoice < 3)
+ {
+ forestType = "California Desert Forest";
+ treeType = "TreeSonora";
+ }
+ else
+ {
+ forestType = "california madrone forest";
+ treeType = "TreeMadrone";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "elk";
+ deer2Type = "pronghorn";
+ centerHerdType = "elk";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "elk";
+ centerHerdType = "deer";
+ }
+ if (sheepChance == 1)
+ sheepType = "sheep";
+ else
+ sheepType = "cow";
+ fish2Type = "FishMahi";
+ fishType = "FishSardine";
+ whaleType = "humpbackWhale";
+ lowForest = rmRandInt(0,1);
+ if (rmRandInt(1,2) == 1)
+ mineType = "mine";
+ else
+ mineType = "minegold";
+ cacheType = 4;
+ if (twoChoice == 1)
+ nativePattern = 27;
+ else
+ nativePattern = 43;
+ vultures = 1;
+ underbrush = 1;
+ brushType = "UnderbrushDesert";
+ }
+ else if (patternChance == 28) // palm desert
+ {
+ rmSetSeaType("Atlantic Coast");
+ rmSetMapType("sonora");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("seville");
+ else
+ rmSetLightingSet("pampas");
+ if (twoChoice == 1)
+ {
+ baseType = "texas_dirt";
+ }
+ else
+ {
+ baseType = "sonora_dirt";
+ }
+ forestType = "caribbean palm forest";
+ treeType = "TreeCaribbean";
+ if (variantChance == 1)
+ {
+ deerType = "deer";
+ deer2Type = "turkey";
+ centerHerdType = "deer";
+ }
+ else
+ {
+ deerType = "deer";
+ deer2Type = "deer";
+ centerHerdType = "turkey";
+ }
+ fishType = "FishSardine";
+ fish2Type = "FishMahi";
+ whaleType = "minkeWhale";
+ sheepType = "cow";
+ cacheType = 5;
+ noHeight = 1;
+ forestCoverUp = 1;
+ lowForest = rmRandInt(0,1);
+ if (fourChoice == 1)
+ nativePattern = 33;
+ else if (fourChoice == 2)
+ nativePattern = 35;
+ else if (fourChoice == 3)
+ nativePattern = 35;
+ else
+ nativePattern = 36;
+ vultures = 1;
+ underbrush = 1;
+ brushType = "UnderbrushPampas";
+ }
+ else if (patternChance == 29) // atacama
+ {
+ rmSetSeaType("Araucania North Coast");
+ rmSetMapType("araucania");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("NthAraucaniaLight");
+ else
+ rmSetLightingSet("constantinople");
+ baseType = "araucania_north_grass_a";
+ forestType = "sonora forest";
+ treeType = "TreeSonora";
+ if (variantChance == 1)
+ {
+ deerType = "guanaco";
+ deer2Type = "deer";
+ centerHerdType = "guanaco";
+ }
+ else
+ {
+ deerType = "guanaco";
+ deer2Type = "guanaco";
+ centerHerdType = "guanaco";
+ }
+ sheepType = "llama";
+ fishType = "FishMahi";
+ fish2Type = "FishSardine";
+ whaleType = "humpbackWhale";
+ mineType = "MineCopper";
+ if (rmRandInt(1,2) == 1)
+ cacheType = 5;
+ else
+ cacheType = 4;
+ placeBerries = 0;
+ forestCoverUp = 1;
+ lowForest = 1;
+ if (rmRandInt(1,4) < 4)
+ llamaCache = 1;
+ if (fiveChoice == 1)
+ nativePattern = 14;
+ else if (fiveChoice == 2)
+ nativePattern = 24;
+ else if (fiveChoice == 3)
+ nativePattern = 25;
+ else if (fiveChoice == 4)
+ nativePattern = 26;
+ else
+ nativePattern = 18;
+ vultures = 1;
+ underbrush = 1;
+ brushType = "UnderbrushPampas";
+ }
+ else if (patternChance == 30) // Honshu
+ {
+ rmSetSeaType("Coastal Japan");
+ rmSetMapType("Japan");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Honshu");
+ else
+ rmSetLightingSet("new england");
+ baseType = "coastal_japan_a";
+ forestType = "Coastal Japan Forest";
+ treeType = "ypTreeJapaneseMaple";
+ if (variantChance == 1)
+ {
+ deerType = "ypSerow";
+ deer2Type = "ypGiantSalamander";
+ centerHerdType = "ypSerow";
+ }
+ else
+ {
+ deerType = "ypSerow";
+ deer2Type = "ypSerow";
+ centerHerdType = "ypGiantSalamander";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishTuna";
+ fish2Type = "ypSquid";
+ whaleType = "minkeWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineTin";
+ cacheType = 7;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ nativePattern = 44;
+ kingfishers = 1;
+ waterNuggets = 1;
+ }
+ else if (patternChance == 31) // Deccan
+ {
+ rmSetSeaType("great lakes");
+ rmSetMapType("deccan");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("deccan");
+ else
+ rmSetLightingSet("texas");
+ if (twoChoice == 1)
+ {
+ baseType = "deccan_grassy_Dirt_a";
+ }
+ else
+ {
+ baseType = "deccan_grass_a";
+ }
+ if (threeChoice == 1)
+ {
+ forestType = "Ashoka Forest";
+ treeType = "ypTreeAshoka";
+ }
+ else if (threeChoice == 2)
+ {
+ forestType = "Eucalyptus Forest";
+ treeType = "ypTreeEucalyptus";
+ }
+ else
+ {
+ forestType = "Deccan Forest";
+ treeType = "ypTreeDeccan";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "Zebra";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "Zebra";
+ }
+ else
+ {
+ deerType = "Zebra";
+ deer2Type = "Zebra";
+ centerHerdType = "ypWildElephant";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishMolaMola";
+ fish2Type = "FishMahi";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mineTin";
+ else
+ mineType = "minegold";
+ cacheType = 6;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ threeChoice = rmRandInt(1,3);
+ if (threeChoice == 1)
+ nativePattern = 45;
+ else if (threeChoice == 2)
+ nativePattern = 46;
+ else if (threeChoice == 3)
+ nativePattern = 47;
+ tropical = 1;
+ kingfishers = 1;
+ }
+ else if (patternChance == 32) // Himalayas
+ {
+ rmSetSeaType("Hudson Bay");
+ rmSetMapType("himalayas");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Himalayas");
+ else
+ rmSetLightingSet("Yukon");
+ baseType = "himalayas_a";
+ forestType = "Himalayas Forest";
+ treeType = "ypTreeHimalayas";
+ if (variantChance == 1)
+ {
+ deerType = "ypIbex";
+ deer2Type = "ypMarcoPoloSheep";
+ centerHerdType = "ypIbex";
+ }
+ else
+ {
+ deerType = "ypMarcoPoloSheep";
+ deer2Type = "ypIbex";
+ centerHerdType = "ypSerow";
+ }
+ sheepType = "ypYak";
+ fishType = "ypFishTuna";
+ fish2Type = "FishCod";
+ whaleType = "minkeWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "MineCopper";
+ lowForest = rmRandInt(0,1);
+ cacheType = 6;
+ nativePattern = 49;
+ eagles = 1;
+ }
+ else if (patternChance == 33) // Indochina-Borneo
+ {
+ rmSetSeaType("borneo coast");
+ rmSetMapType("borneo");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("borneo");
+ else
+ rmSetLightingSet("bayou");
+ baseType = "borneo_grass_a";
+ if (threeChoice == 1)
+ {
+ forestType = "Borneo Palm Forest";
+ }
+ else if (threeChoice == 2)
+ {
+ forestType = "Borneo Canopy Forest";
+ }
+ else
+ {
+ forestType = "Borneo Forest";
+ }
+ treeType = "ypTreeBorneo";
+ if (variantChance == 1)
+ {
+ deerType = "ypSerow";
+ deer2Type = "ypSerow";
+ centerHerdType = "ypWildElephant";
+ }
+ else
+ {
+ deerType = "ypSerow";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "ypSerow";
+ }
+ sheepType = "ypWaterBuffalo";
+ fishType = "ypFishMolaMola";
+ fish2Type = "FishMahi";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mineTin";
+ else
+ mineType = "mineCopper";
+ cacheType = 6;
+ nativePattern = 48;
+ tropical = 1;
+ kingfishers = 1;
+ noHeight = 1;
+ waterNuggets = 1;
+ }
+ else if (patternChance == 34) // Mongolia
+ {
+ rmSetSeaType("great lakes");
+ rmSetMapType("mongolia");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("Mongolia");
+ else
+ rmSetLightingSet("Pampas");
+ if (twoChoice == 1)
+ {
+ baseType = "mongolia_grass_b";
+ forestType = "Mongolian Forest";
+ treeType = "ypTreeMongolianFir";
+ }
+ else
+ {
+ baseType = "mongolia_desert";
+ forestType = "Saxaul Forest";
+ treeType = "ypTreeSaxaul";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "ypSaiga";
+ deer2Type = "Zebra";
+ centerHerdType = "ypSaiga";
+ }
+ else
+ {
+ deerType = "Zebra";
+ deer2Type = "ypSaiga";
+ centerHerdType = "Zebra";
+ }
+ sheepType = "ypYak";
+ fishType = "ypFishTuna";
+ fish2Type = "FishSalmon";
+ whaleType = "minkeWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mineTin";
+ lowForest = rmRandInt(0,1);
+ cacheType = 7;
+ nativePattern = 50;
+ eagles = 1;
+ }
+ else if (patternChance == 35) // Ceylon
+ {
+ rmSetSeaType("ceylon coast");
+ rmSetMapType("ceylon");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("ceylon");
+ else
+ rmSetLightingSet("Great Lakes");
+ baseType = "ceylon_grass_a";
+ forestType = "Ceylon Forest";
+ treeType = "ypTreeCeylon";
+ if (variantChance == 1)
+ {
+ deerType = "ypSerow";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "ypSerow";
+ }
+ else
+ {
+ deerType = "ypSerow";
+ deer2Type = "ypSerow";
+ centerHerdType = "ypWildElephant";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishMolaMola";
+ fish2Type = "FishMahi";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mineTin";
+ else
+ mineType = "minegold";
+ cacheType = 6;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ nativePattern = 51;
+ tropical = 1;
+ kingfishers = 1;
+ noHeight = 1;
+ waterNuggets = 1;
+ }
+ else if (patternChance == 36) // Yellow River
+ {
+ rmSetSeaType("Great Lakes");
+ rmSetMapType("yellowRiver");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("carolina");
+ else
+ rmSetLightingSet("Great Lakes");
+ baseType = "yellow_river_a";
+ if (twoChoice == 1)
+ {
+ forestType = "Yellow River Forest";
+ treeType = "ypTreeBamboo";
+ }
+ else
+ {
+ forestType = "Ginkgo Forest";
+ treeType = "ypTreeGinkgo";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "ypSerow";
+ deer2Type = "ypMuskDeer";
+ centerHerdType = "ypMuskDeer";
+ }
+ else
+ {
+ deerType = "ypMuskDeer";
+ deer2Type = "ypSerow";
+ centerHerdType = "ypSerow";
+ }
+ if (sheepChance == 1)
+ sheepType = "ypWaterBuffalo";
+ else
+ sheepType = "ypGoat";
+ fishType = "ypFishTuna";
+ fish2Type = "ypSquid";
+ whaleType = "humpbackWhale";
+ if (rmRandInt(1,2) == 1)
+ mineType = "mineTin";
+ else
+ mineType = "mineCopper";
+ cacheType = 7;
+ if (rmRandInt(1,3) == 3)
+ berryCache = 1;
+ nativePattern = 52;
+ if (rmRandInt(1,3) == 1)
+ tropical = 1;
+ kingfishers = 1;
+ }
+ else if (patternChance == 37) // Siberia
+ {
+ rmSetSeaType("Atlantic Coast");
+ rmSetMapType("ceylon");
+ rmSetMapType("grass");
+ if (lightingChance == 1)
+ rmSetLightingSet("great plains");
+ else
+ rmSetLightingSet("texas");
+ baseType = "texas_grass";
+ forestType = "texas forest";
+ treeType = "TreeTexas";
+ if (variantChance == 1)
+ {
+ deerType = "Zebra";
+ deer2Type = "ypWildElephant";
+ centerHerdType = "Zebra";
+ }
+ else
+ {
+ deerType = "ypWildElephant";
+ deer2Type = "Zebra";
+ centerHerdType = "ypWildElephant";
+ }
+ sheepType = "ypWaterBuffalo";
+ fishType = "FishSardine";
+ fish2Type = "FishCod";
+ whaleType = "humpbackWhale";
+ cacheType = 2;
+ noHeight = 1;
+ lowForest = rmRandInt(0,1);
+ nativeChoice = rmRandInt(1,6);
+ if (nativeChoice == 1)
+ nativePattern = 30;
+ else if (nativeChoice == 2)
+ nativePattern = 29;
+ else if (nativeChoice == 3)
+ nativePattern = 32;
+ else if (nativeChoice == 4)
+ nativePattern = 19;
+ else if (nativeChoice == 5)
+ nativePattern = 20;
+ else
+ nativePattern = 9;
+ if (rmRandInt(1,2) == 1)
+ texasProp = 1;
+ else
+ vultures = 1;
+ underbrush = 1;
+ brushType = "underbrushTexasGrass";
+ }
+ else if (patternChance == 38) // Green Siberia
+ {
+ rmSetSeaType("Northwest Territory Water");
+ rmSetMapType("mongolia");
+ rmSetMapType("grass");
+ if (lightingChance == 2)
+ rmSetLightingSet("nwterritory");
+ else
+ rmSetLightingSet("saguenay");
+ baseType = "nwt_grass1";
+ if (twoChoice == 1)
+ {
+ forestType = "NW Territory Birch Forest";
+ treeType = "TreeGreatLakes";
+ }
+ else
+ {
+ forestType = "NW Territory Forest";
+ treeType = "TreeGreatPlains";
+ }
+ if (variantChance == 1)
+ {
+ deerType = "ypMuskDeer";
+ deer2Type = "ypSaiga";
+ centerHerdType = "ypSaiga";
+ }
+ else
+ {
+ deerType = "ypSaiga";
+ deer2Type = "ypMuskDeer";
+ centerHerdType = "ypSaiga";
+ }
+ sheepType = "ypYak";
+ fish2Type = "FishSalmon";
+ fishType = "FishCod";
+ whaleType = "minkeWhale";
+ cacheType = 7;
+ if (twoChoice == 1)
+ nativePattern = 52;
+ else
+ nativePattern = 54;
+ eagles = 1;
+ }
+
+ tradeRouteType = "dirt";
+ if (patternChance > 29)
+ tradeRouteType = "water";
+
+// Native patterns
+ if (nativePattern == 1)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Iroquois");
+ native2Name = "native iroquois village ";
+ }
+ else if (nativePattern == 2)
+ {
+ rmSetSubCiv(0, "Comanche");
+ native1Name = "native comanche village ";
+ rmSetSubCiv(1, "Lakota");
+ native2Name = "native lakota village ";
+ }
+ else if (nativePattern == 3)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Seminoles");
+ native2Name = "native seminole village ";
+ }
+ else if (nativePattern == 4)
+ {
+ rmSetSubCiv(0, "Cheyenne");
+ native1Name = "native cheyenne village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 5)
+ {
+ rmSetSubCiv(0, "Huron");
+ native1Name = "native huron village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 6)
+ {
+ rmSetSubCiv(0, "Nootka");
+ native1Name = "native nootka village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 7)
+ {
+ rmSetSubCiv(0, "Nootka");
+ native1Name = "native nootka village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 8)
+ {
+ rmSetSubCiv(0, "Cree");
+ native1Name = "native cree village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 9)
+ {
+ rmSetSubCiv(0, "Seminoles");
+ native1Name = "native seminole village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 10)
+ {
+ rmSetSubCiv(0, "Zapotec");
+ native1Name = "native zapotec village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 11)
+ {
+ rmSetSubCiv(0, "Mapuche");
+ native1Name = "native mapuche village ";
+ rmSetSubCiv(1, "Maya");
+ native2Name = "native maya village ";
+ }
+ else if (nativePattern == 12)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Maya");
+ native2Name = "native maya village ";
+ }
+ else if (nativePattern == 13)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Tupi");
+ native2Name = "native tupi village ";
+ }
+ else if (nativePattern == 14)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Tupi");
+ native2Name = "native tupi village ";
+ }
+ else if (nativePattern == 15)
+ {
+ rmSetSubCiv(0, "Maya");
+ native1Name = "native maya village ";
+ rmSetSubCiv(1, "Tupi");
+ native2Name = "native tupi village ";
+ }
+ else if (nativePattern == 16)
+ {
+ rmSetSubCiv(0, "Nootka");
+ native1Name = "native nootka village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 17)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Aztecs");
+ native2Name = "native aztec village ";
+ }
+ else if (nativePattern == 18)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Caribs");
+ native2Name = "native carib village ";
+ }
+ else if (nativePattern == 19)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 20)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 21)
+ {
+ rmSetSubCiv(0, "Seminoles");
+ native1Name = "native seminole village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 22)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 23)
+ {
+ rmSetSubCiv(0, "Comanche");
+ native1Name = "native comanche village ";
+ rmSetSubCiv(1, "Cree");
+ native2Name = "native cree village ";
+ }
+ else if (nativePattern == 24)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Maya");
+ native2Name = "native maya village ";
+ }
+ else if (nativePattern == 25)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Mapuche");
+ native2Name = "native mapuche village ";
+ }
+ else if (nativePattern == 26)
+ {
+ rmSetSubCiv(0, "Tupi");
+ native1Name = "native tupi village ";
+ rmSetSubCiv(1, "Mapuche");
+ native2Name = "native mapuche village ";
+ }
+ else if (nativePattern == 27)
+ {
+ rmSetSubCiv(0, "Klamath");
+ native1Name = "native klamath village ";
+ rmSetSubCiv(1, "Nootka");
+ native2Name = "native nootka village ";
+ }
+ else if (nativePattern == 28)
+ {
+ rmSetSubCiv(0, "Klamath");
+ native1Name = "native klamath village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 29)
+ {
+ rmSetSubCiv(0, "Comanche");
+ native1Name = "native comanche village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 30)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 31)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Navajo");
+ native2Name = "native navajo village ";
+ }
+ else if (nativePattern == 32)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 33)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 34)
+ {
+ rmSetSubCiv(0, "Incas");
+ native1Name = "native inca village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 35)
+ {
+ rmSetSubCiv(0, "Maya");
+ native1Name = "native maya village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 36)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 37)
+ {
+ rmSetSubCiv(0, "Navajo");
+ native1Name = "native navajo village ";
+ rmSetSubCiv(1, "Zapotec");
+ native2Name = "native zapotec village ";
+ }
+ else if (nativePattern == 38)
+ {
+ rmSetSubCiv(0, "Navajo");
+ native1Name = "native navajo village ";
+ rmSetSubCiv(1, "Comanche");
+ native2Name = "native comanche village ";
+ }
+ else if (nativePattern == 39)
+ {
+ rmSetSubCiv(0, "Navajo");
+ native1Name = "native navajo village ";
+ rmSetSubCiv(1, "Cheyenne");
+ native2Name = "native cheyenne village ";
+ }
+ else if (nativePattern == 40)
+ {
+ rmSetSubCiv(0, "Cherokee");
+ native1Name = "native cherokee village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 41)
+ {
+ rmSetSubCiv(0, "Lakota");
+ native1Name = "native lakota village ";
+ rmSetSubCiv(1, "Huron");
+ native2Name = "native huron village ";
+ }
+ else if (nativePattern == 42)
+ {
+ rmSetSubCiv(0, "Caribs");
+ native1Name = "native carib village ";
+ rmSetSubCiv(1, "Seminoles");
+ native2Name = "native seminole village ";
+ }
+ else if (nativePattern == 43)
+ {
+ rmSetSubCiv(0, "Apache");
+ native1Name = "native apache village ";
+ rmSetSubCiv(1, "Klamath");
+ native2Name = "native klamath village ";
+ }
+ else if (nativePattern == 44)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "udasi");
+ native2Name = "native udasi village ";
+ }
+ else if (nativePattern == 45)
+ {
+ rmSetSubCiv(0, "udasi");
+ native1Name = "native udasi village ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ";
+ }
+ else if (nativePattern == 46)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque deccan ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ";
+ }
+ else if (nativePattern == 47)
+ {
+ rmSetSubCiv(0, "udasi");
+ native1Name = "native udasi village ";
+ rmSetSubCiv(1, "sufi");
+ native2Name = "native sufi mosque deccan ";
+ }
+ else if (nativePattern == 48)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque borneo ";
+ rmSetSubCiv(1, "jesuit");
+ native2Name = "native jesuit mission borneo 0";
+ }
+ else if (nativePattern == 49)
+ {
+ rmSetSubCiv(0, "udasi");
+ native1Name = "native udasi village himal ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village himal ";
+ }
+ else if (nativePattern == 50)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque mongol ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ceylon ";
+ }
+ else if (nativePattern == 51)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "bhakti");
+ native2Name = "native bhakti village ceylon ";
+ }
+ else if (nativePattern == 52)
+ {
+ rmSetSubCiv(0, "sufi");
+ native1Name = "native sufi mosque mongol ";
+ rmSetSubCiv(1, "aztecs");
+ native2Name = "native Aztec village ";
+ }
+ else if (nativePattern == 53)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "aztecs");
+ native2Name = "native shaolin temple mongol 0";
+ }
+ else if (nativePattern == 54)
+ {
+ rmSetSubCiv(0, "aztecs");
+ native1Name = "native Aztec village ";
+ rmSetSubCiv(1, "jesuit");
+ native2Name = "native jesuit mission borneo 0";
+ }
+
+// Precipitation
+ if ((patternChance == 14) || (patternChance == 16)) // yucatan, amazon
+ if (lightingChance == 2)
+ rmSetGlobalRain( 0.5 );
+ if (patternChance == 7) // yukon
+ rmSetGlobalSnow( 1.0 );
+ if ((patternChance == 5) || (patternChance == 20) || (patternChance == 25)) // gl winter, yukon tundra, s araucania
+ if (lightingChance == 2)
+ rmSetGlobalSnow( 0.7 );
+ if (patternChance == 8) // rockies
+ if (lightingChance == 2)
+ rmSetGlobalSnow( 0.5 );
+
+ if ((patternChance == 33) || (patternChance == 38)) // himalayas, siberia
+ if (rmRandInt(1,2) == 2)
+ rmSetGlobalRain( 0.3 );
+ if (patternChance == 31) // deccan
+ if (rmRandInt(1,2) == 2)
+ rmSetGlobalRain( 0.3 );
+
+ if (patternChance == 19) // nwt
+ {
+ // Make it rain
+ rmSetGlobalRain( 1.0 );
+ rmSetGlobalStormLength(1.0, 0.0);
+
+ // Sets up the rain triggers
+ rmCreateTrigger("ChangeRain1");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain1"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 20);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 0.3);
+
+ rmCreateTrigger("ChangeRain2");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain2"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 40);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 1.0);
+
+ rmCreateTrigger("ChangeRain3");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain3"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 60);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 0.3);
+
+ rmCreateTrigger("ChangeRain4");
+ rmSwitchToTrigger(rmTriggerID("ChangeRain4"));
+ rmSetTriggerActive(true);
+ rmAddTriggerCondition("Timer");
+ rmSetTriggerConditionParamInt("Param1", 75);
+ rmAddTriggerEffect("Render Rain");
+ rmSetTriggerEffectParamFloat("Percent", 0.0);
+ }
+
+ rmTerrainInitialize("water");
+ rmSetMapType("water");
+ rmSetWorldCircleConstraint(true);
+ rmSetWindMagnitude(2.0);
+
+ chooseMercs();
+
+// Define some classes.
+ int classPlayer=rmDefineClass("player");
+ rmDefineClass("startingUnit");
+ rmDefineClass("classForest");
+ rmDefineClass("importantItem");
+ rmDefineClass("natives");
+ rmDefineClass("nuggets");
+ rmDefineClass("center");
+ rmDefineClass("socketClass");
+ rmDefineClass("classFish");
+ int classHuntable=rmDefineClass("huntableFood");
+ int classHerdable=rmDefineClass("herdableFood");
+ int classMines=rmDefineClass("all mines");
+ int classCenterIsland=rmDefineClass("center island");
+ int classBonusIsland=rmDefineClass("bonus island");
+ int classSettlementIsland=rmDefineClass("settlement island");
+ int classNativeIsland=rmDefineClass("native island");
+ int classGoldIsland=rmDefineClass("gold island");
+ int islandsX=rmDefineClass("islandsX");
+ int islandsY=rmDefineClass("islandsY");
+ int islandsZ=rmDefineClass("islandsZ");
+
+// Text
+ rmSetStatusText("",0.10);
+
+// -------------Define constraints
+ // Map edge constraints
+ int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(10), rmZTilesToFraction(10), 1.0-rmXTilesToFraction(10), 1.0-rmZTilesToFraction(10), 0.01);
+ int centerConstraint=rmCreateClassDistanceConstraint("stay away from center", rmClassID("center"), 30.0);
+ int centerConstraintShort=rmCreateClassDistanceConstraint("stay away from center short", rmClassID("center"), 12.0);
+ int centerConstraintFar=rmCreateClassDistanceConstraint("stay away from center far", rmClassID("center"), 70.0);
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int circleEdgeConstraint=rmCreatePieConstraint("circle edge Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.46), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int centralExtraLandConstraint=rmCreatePieConstraint("circle Constraint for extra land", 0.5, 0.5, 0, rmZFractionToMeters(0.17), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int centralExtraLandConstraint2=rmCreatePieConstraint("2nd circle Constraint for extra land", 0.5, 0.5, 0, rmZFractionToMeters(0.12), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ // Player constraints
+ int playerConstraintShort=rmCreateClassDistanceConstraint("short stay away from players", classPlayer, 15.0);
+ int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 45.0);
+ int mediumPlayerConstraint=rmCreateClassDistanceConstraint("medium stay away from players", classPlayer, 25.0);
+ int nuggetPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 60.0);
+ int farPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players more", classPlayer, 85.0);
+ int fartherPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players the most", classPlayer, 105.0);
+ int longPlayerConstraint=rmCreateClassDistanceConstraint("land stays away from players", classPlayer, 75.0);
+
+ float constraintChance = rmRandFloat(0, 1);
+ int constraintNum = 0;
+ if(constraintChance < 0.25)
+ constraintNum = 28;
+ else if(constraintChance < 0.5)
+ constraintNum = 30;
+ else if(constraintChance < 0.75)
+ constraintNum = 32;
+ else
+ constraintNum = 34;
+ int secondPlayerConstraint=rmCreateClassDistanceConstraint("also stay away from players", classPlayer, constraintNum);
+
+ // Nature avoidance
+ int forestConstraint2=rmCreateClassDistanceConstraint("forest v forest2", rmClassID("classForest"), 10.0);
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 20.0);
+ int avoidCoin=rmCreateClassDistanceConstraint("avoid coin", rmClassID("all mines"), 10.0);
+ int coinAvoidCoin=rmCreateClassDistanceConstraint("coin avoids coin", rmClassID("all mines"), 35.0);
+ int longAvoidCoin=rmCreateClassDistanceConstraint("long avoid coin", rmClassID("all mines"), 90.0);
+ int avoidStartResource=rmCreateTypeDistanceConstraint("start resource no overlap", "resource", 1.0);
+ int avoidSheep=rmCreateClassDistanceConstraint("sheep avoids sheep etc", rmClassID("herdableFood"), 45.0);
+ int huntableConstraint=rmCreateClassDistanceConstraint("huntable constraint", rmClassID("huntableFood"), 35.0);
+
+ // Avoid impassable land, certain features
+ int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 4.0);
+ int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 2.0);
+ int longAvoidImpassableLand=rmCreateTerrainDistanceConstraint("long avoid impassable land", "Land", false, 18.0);
+ int avoidWater10 = rmCreateTerrainDistanceConstraint("avoid water mid-long", "Land", false, 10.0);
+ int avoidWater15 = rmCreateTerrainDistanceConstraint("avoid water mid-longer", "Land", false, 15.0);
+ int avoidWater20 = rmCreateTerrainDistanceConstraint("avoid water a little more", "Land", false, 20.0);
+ int rockVsLand = rmCreateTerrainDistanceConstraint("rock v. land", "land", true, 2.0);
+ int nearWater = rmCreateTerrainMaxDistanceConstraint("stay near Water", "Water", true, 5.0);
+ int avoidLand10 = rmCreateTerrainDistanceConstraint("avoid land by 10", "land", true, 10.0);
+ int nearShore=rmCreateTerrainMaxDistanceConstraint("stay near shore", "land", true, 5.0);
+
+ // Unit avoidance
+ int avoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 30.0);
+ int avoidStartingUnitsSmall=rmCreateClassDistanceConstraint("objects avoid starting units small", rmClassID("startingUnit"), 10.0);
+ int avoidImportantItem=rmCreateClassDistanceConstraint("things avoid each other", rmClassID("importantItem"), 10.0);
+ int avoidImportantItemSmall=rmCreateClassDistanceConstraint("important item small avoidance", rmClassID("importantItem"), 7.0);
+ int avoidImportantItemMed=rmCreateClassDistanceConstraint("things avoid each other med", rmClassID("importantItem"), 35.0);
+ int avoidNatives=rmCreateClassDistanceConstraint("stuff avoids natives", rmClassID("natives"), 60.0);
+ int avoidNativesLong=rmCreateClassDistanceConstraint("stuff avoids natives longer", rmClassID("natives"), 90.0);
+ int avoidNativesShort=rmCreateClassDistanceConstraint("stuff avoids natives shorter", rmClassID("natives"), 15.0);
+ int avoidNugget=rmCreateClassDistanceConstraint("stuff avoids nuggets", rmClassID("nuggets"), 40.0);
+ int avoidNuggetSmall=rmCreateClassDistanceConstraint("avoid nuggets by a little", rmClassID("nuggets"), 10.0);
+ int avoidNuggetLong=rmCreateClassDistanceConstraint("avoids nuggets long", rmClassID("nuggets"), 70.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
+ int avoidKOTH=rmCreateTypeDistanceConstraint("avoid KOTH", "ypKingsHill", 8.0);
+
+ // Trade route avoidance.
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 8.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("avoid sockets", rmClassID("socketClass"), 10.0);
+
+ // New extra stuff for water spawn point avoidance.
+ int flagLand = rmCreateTerrainDistanceConstraint("flag vs land", "land", true, 5.0);
+ int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 40);
+ int flagEdgeConstraint = rmCreatePieConstraint("flags stay near edge of map", 0.5, 0.5, rmGetMapXSize()-30, rmGetMapXSize()-5, 0, 0, 0);
+
+ // Center constraint
+ int avoidCenter=rmCreateClassDistanceConstraint("avoid the center", rmClassID("center"), 30.0);
+
+ // Island constraints
+ float constraintChance2 = rmRandFloat(0, 1);
+ int constraintNum2 = 0;
+ if(constraintChance2 < 0.33)
+ constraintNum2 = 26;
+ else if(constraintChance2 < 0.66)
+ constraintNum2 = 29;
+ else
+ constraintNum2 = 32;
+ float constraintChance3 = rmRandFloat(0, 1);
+ int constraintNum3 = 0;
+ if(constraintChance3 < 0.33)
+ constraintNum3 = 27;
+ else if(constraintChance3 < 0.66)
+ constraintNum3 = 30;
+ else
+ constraintNum3 = 32;
+
+ int settlementIslandConstraint=rmCreateClassDistanceConstraint("avoid settlement islands", classSettlementIsland, constraintNum3);
+ int centerIslandConstraint=rmCreateClassDistanceConstraint("avoid center island", classCenterIsland, constraintNum2);
+ int nativeIslandConstraint=rmCreateClassDistanceConstraint("avoid native island", classNativeIsland, constraintNum3);
+ int nativeIslandConstraintLarge=rmCreateClassDistanceConstraint("avoid native island large", classNativeIsland, rmXFractionToMeters(0.28));
+ int islandsXvsY=rmCreateClassDistanceConstraint("island X avoids Y", islandsY, rmRandInt(27,32));
+ int islandsYvsX=rmCreateClassDistanceConstraint("island Y avoids X", islandsX, rmRandInt(27,32));
+ int islandsXYvsZ=rmCreateClassDistanceConstraint("islands Y and X avoid Z", islandsZ, rmRandInt(27,32));
+ int islandsZvsX=rmCreateClassDistanceConstraint("island Z avoids X", islandsX, rmRandInt(27,32));
+ int islandsZvsY=rmCreateClassDistanceConstraint("island Z avoids Y", islandsY, rmRandInt(27,32));
+
+ // Cardinal Directions - "quadrants" of the map.
+ int Northward=rmCreatePieConstraint("northMapConstraint", 0.5, 0.75, 0, rmZFractionToMeters(0.22), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int Southward=rmCreatePieConstraint("southMapConstraint", 0.5, 0.25, 0, rmZFractionToMeters(0.22), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int Eastward=rmCreatePieConstraint("eastMapConstraint", 0.75, 0.5, 0, rmZFractionToMeters(0.22), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int Westward=rmCreatePieConstraint("westMapConstraint", 0.25, 0.5, 0, rmZFractionToMeters(0.22), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+// ---------------------------------------------------------------------------------------End constraints
+
+// Text
+ rmSetStatusText("",0.15);
+
+// NATIVES - defined
+ // Village A
+ int villageAID = -1;
+ int whichNative = rmRandInt(1,2);
+ int villageType = rmRandInt(1,5);
+ if (whichNative == 1)
+ villageAID = rmCreateGrouping("village A", native1Name+villageType);
+ else if (whichNative == 2)
+ villageAID = rmCreateGrouping("village A", native2Name+villageType);
+ rmAddGroupingToClass(villageAID, rmClassID("natives"));
+ rmAddGroupingToClass(villageAID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageAID, 34.0);
+ rmSetGroupingMaxDistance(villageAID, rmXFractionToMeters(0.06));
+ rmAddGroupingConstraint(villageAID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageAID, avoidTradeRoute);
+ rmAddGroupingConstraint(villageAID, avoidSocket);
+ rmAddGroupingConstraint(villageAID, avoidWater15);
+ rmAddGroupingConstraint(villageAID, avoidNatives);
+ rmAddGroupingConstraint(villageAID, avoidKOTH);
+
+ // Village D - opposite type from A
+ int villageDID = -1;
+ villageType = rmRandInt(1,5);
+ if (whichNative == 2)
+ villageDID = rmCreateGrouping("village D", native1Name+villageType);
+ else if (whichNative == 1)
+ villageDID = rmCreateGrouping("village D", native2Name+villageType);
+ rmAddGroupingToClass(villageDID, rmClassID("natives"));
+ rmAddGroupingToClass(villageDID, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(villageDID, 0.0);
+ rmSetGroupingMaxDistance(villageDID, rmXFractionToMeters(0.05));
+ rmAddGroupingConstraint(villageDID, avoidImpassableLand);
+ rmAddGroupingConstraint(villageDID, avoidTradeRoute);
+ rmAddGroupingConstraint(villageDID, avoidSocket);
+ rmAddGroupingConstraint(villageDID, avoidWater15);
+ rmAddGroupingConstraint(villageDID, avoidNativesLong);
+ rmAddGroupingConstraint(villageDID, playerConstraint);
+ rmAddGroupingConstraint(villageDID, avoidKOTH);
+
+// Center area
+ int centerArea=rmCreateArea("TheCenter");
+ rmSetAreaSize(centerArea, 0.1, 0.1);
+ rmSetAreaLocation(centerArea, 0.5, 0.5);
+ rmAddAreaToClass(centerArea, rmClassID("center"));
+
+// --------------------------------------------------------------------------------Done special definitions
+
+// Text
+ rmSetStatusText("",0.20);
+
+// Set up player starting locations
+int fiveChance = rmRandInt(1,5);
+int fourChance = rmRandInt(1,4);
+int threeChance = rmRandInt(1,3);
+int twoChance = rmRandInt(1,2);
+
+if (sectionChance == 0)
+{
+ directionChance = 0;
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.35, 0.36, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+}
+else
+{
+ if (cNumberNonGaiaPlayers == 2)
+ {
+ sectionChance = rmRandInt(1,21);
+ distChance = rmRandInt(1,4);
+ if (sectionChance == 1) // opposite, across axis 1
+ {
+ axisChance = 2;
+ rmSetPlacementSection(0.0, 0.5);
+ if (fiveChance == 1)
+ eBigIs = 1;
+ else if (fiveChance == 2)
+ wBigIs = 1;
+ else if (fiveChance == 3)
+ eEdgeIs = 1;
+ else if (fiveChance == 4)
+ wEdgeIs = 1;
+ else if (fiveChance == 5)
+ {
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 2) // opposite, across axis 2
+ {
+ axisChance = 1;
+ rmSetPlacementSection(0.25, 0.75);
+ if (fiveChance == 1)
+ nBigIs = 1;
+ else if (fiveChance == 2)
+ sBigIs = 1;
+ else if (fiveChance == 3)
+ nEdgeIs = 1;
+ else if (fiveChance == 4)
+ sEdgeIs = 1;
+ else if (fiveChance == 5)
+ {
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance < 5) // 3,4 East side of map
+ {
+ if (sectionChance == 3)
+ rmSetPlacementSection(0.1, 0.4);
+ if (sectionChance == 4)
+ rmSetPlacementSection(0.15, 0.35);
+ if (threeChance == 1)
+ wBigIs = 1;
+ else if (threeChance == 2)
+ wEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ directionChance = 0;
+ axisChance = 1;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 0;
+ }
+ }
+ }
+ else if (sectionChance < 7) // 5,6 W side of map
+ {
+ if (sectionChance == 5)
+ rmSetPlacementSection(0.6, 0.9);
+ if (sectionChance == 6)
+ rmSetPlacementSection(0.65, 0.85);
+ if (threeChance == 1)
+ eBigIs = 1;
+ else if (threeChance == 2)
+ eEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ directionChance = 0;
+ axisChance = 1;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 2;
+ else
+ directionChance = 0;
+ }
+ }
+ }
+ else if (sectionChance < 9) // 7,8 S side of map
+ {
+ if (sectionChance == 7)
+ rmSetPlacementSection(0.35, 0.65);
+ if (sectionChance == 8)
+ rmSetPlacementSection(0.4, 0.6);
+ if (threeChance == 1)
+ nBigIs = 1;
+ else if (threeChance == 2)
+ nEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ directionChance = 0;
+ axisChance = 2;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 2;
+ else
+ directionChance = 0;
+ }
+ }
+ }
+ else if (sectionChance < 11) // 9,10 N side of map
+ {
+ if (sectionChance == 9)
+ rmSetPlacementSection(0.85, 0.15);
+ if (sectionChance == 10)
+ rmSetPlacementSection(0.9, 0.1);
+ if (threeChance == 1)
+ sBigIs = 1;
+ else if (threeChance == 2)
+ sEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ directionChance = 0;
+ axisChance = 2;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 0;
+ }
+ }
+ }
+ else if (sectionChance == 11) // next 4 same side, 0.4 of map
+ {
+ rmSetPlacementSection(0.05, 0.45); // E
+ if (threeChance == 1)
+ wBigIs = 1;
+ else if (threeChance == 2)
+ wEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,2) == 1)
+ {
+ directionChance = 0;
+ axisChance = 2;
+ }
+ else
+ {
+ axisChance = 2;
+ directionChance = 1;
+ }
+ }
+ }
+ else if (sectionChance == 12)
+ {
+ rmSetPlacementSection(0.55, 0.95); // W
+ if (threeChance == 1)
+ eBigIs = 1;
+ else if (threeChance == 2)
+ eEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,2) == 1)
+ {
+ directionChance = 0;
+ axisChance = 2;
+ }
+ else
+ {
+ axisChance = 2;
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 13)
+ {
+ rmSetPlacementSection(0.3, 0.7); // S
+ if (threeChance == 1)
+ nBigIs = 1;
+ else if (threeChance == 2)
+ nEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,2) == 1)
+ {
+ directionChance = 0;
+ axisChance = 1;
+ }
+ else
+ {
+ axisChance = 1;
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 14)
+ {
+ rmSetPlacementSection(0.8, 0.2); // N
+ if (threeChance == 1)
+ sBigIs = 1;
+ else if (threeChance == 2)
+ sEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,2) == 1)
+ {
+ directionChance = 0;
+ axisChance = 1;
+ }
+ else
+ {
+ axisChance = 1;
+ directionChance = 1;
+ }
+ }
+ }
+ else if (sectionChance == 15) // opposite, not on axis
+ {
+ rmSetPlacementSection(0.1, 0.6);
+ if (rmRandInt(1,4) == 1)
+ {
+ directionChance = 0;
+ axisChance = 1;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 16) // opposite, not on axis
+ {
+ rmSetPlacementSection(0.4, 0.9);
+ if (rmRandInt(1,4) == 1)
+ {
+ directionChance = 0;
+ axisChance = 1;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 17) // opposite, not on axis
+ {
+ rmSetPlacementSection(0.15, 0.65);
+ if (rmRandInt(1,4) == 1)
+ {
+ directionChance = 0;
+ axisChance = 2;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 18) // opposite, not on axis
+ {
+ rmSetPlacementSection(0.35, 0.85);
+ if (rmRandInt(1,4) == 1)
+ {
+ directionChance = 0;
+ axisChance = 2;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ directionChance = 1;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 19) // asymmetric
+ {
+ rmSetPlacementSection(0.2, 0.4);
+ if (threeChance == 1)
+ wBigIs = 1;
+ else if (threeChance == 2)
+ wEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ directionChance = 1;
+ axisChance = 2;
+ }
+ }
+ else if (sectionChance == 20) // asymmetric
+ {
+ rmSetPlacementSection(0.6, 0.8);
+ if (threeChance == 1)
+ eBigIs = 1;
+ else if (threeChance == 2)
+ eEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ directionChance = 2;
+ axisChance = 2;
+ }
+ }
+ else if (sectionChance == 21) // asymmetric
+ {
+ rmSetPlacementSection(0.0, 0.7);
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ {
+ directionChance = 0;
+ }
+ else
+ {
+ directionChance = 1;
+ }
+ }
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ }
+ else if (cNumberNonGaiaPlayers == 3)
+ {
+ sectionChance = rmRandInt(1,15);
+ distChance = rmRandInt(1,6);
+ if (sectionChance == 1) // east - next 4 0.5 circ
+ {
+ rmSetPlacementSection(0.0, 0.5);
+ if (threeChance == 1)
+ wBigIs = 1;
+ else if (threeChance == 2)
+ wEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ }
+ else if (sectionChance == 2) // south
+ {
+ rmSetPlacementSection(0.25, 0.75);
+ if (threeChance == 1)
+ nBigIs = 1;
+ else if (threeChance == 2)
+ nEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 3) // west
+ {
+ rmSetPlacementSection(0.5, 0.0);
+ if (threeChance == 1)
+ eBigIs = 1;
+ else if (threeChance == 2)
+ eEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 4) // north
+ {
+ rmSetPlacementSection(0.75, 0.25);
+ if (threeChance == 1)
+ sBigIs = 1;
+ else if (threeChance == 2)
+ sEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ }
+ else if (sectionChance == 5) // east - next 4 0.6 circ
+ {
+ rmSetPlacementSection(0.95, 0.55);
+ if (threeChance == 1)
+ wBigIs = 1;
+ else if (threeChance == 2)
+ wEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ }
+ else if (sectionChance == 6) // south
+ {
+ rmSetPlacementSection(0.15, 0.85);
+ if (threeChance == 1)
+ nBigIs = 1;
+ else if (threeChance == 2)
+ nEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 7) // west
+ {
+ rmSetPlacementSection(0.4, 0.1);
+ if (threeChance == 1)
+ eBigIs = 1;
+ else if (threeChance == 2)
+ eEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 8) // north
+ {
+ rmSetPlacementSection(0.65, 0.35);
+ if (threeChance == 1)
+ sBigIs = 1;
+ else if (threeChance == 2)
+ sEdgeIs = 1;
+ else if (threeChance == 3)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ }
+ else if (sectionChance == 9) // east - next 4 0.6 circ, not on axis
+ {
+ rmSetPlacementSection(0.00, 0.60);
+ if (twoChance == 1)
+ wBigIs = 1;
+ else if (twoChance == 2)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ }
+ else if (sectionChance == 10) // south
+ {
+ rmSetPlacementSection(0.25, 0.85);
+ if (twoChance == 1)
+ nBigIs = 1;
+ else if (twoChance == 2)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 11) // west
+ {
+ rmSetPlacementSection(0.50, 0.10);
+ if (twoChance == 1)
+ eBigIs = 1;
+ else if (twoChance == 2)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ }
+ else if (sectionChance == 12) // north
+ {
+ rmSetPlacementSection(0.75, 0.35);
+ if (twoChance == 1)
+ sBigIs = 1;
+ else if (twoChance == 2)
+ {
+ if (rmRandInt(1,3) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,2) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ }
+ else // chance 13, 14, 15 whole circular
+ {
+ directionChance = 0;
+ }
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.35, 0.36, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ }
+ else
+ {
+ if (cNumberTeams == 2)
+ {
+ if (cNumberNonGaiaPlayers == 4) // 2 teams, 4 players
+ {
+ distChance = rmRandInt(1,6);
+ directionChance = 0;
+
+ if (axisChance == 1)
+ {
+ if (sectionChance == 9)
+ {
+ sBigIs = 1;
+ }
+ if (sectionChance == 10)
+ {
+ sEdgeIs = 1;
+ }
+ if (sectionChance == 11)
+ {
+ nBigIs = 1;
+ }
+ if (sectionChance == 12)
+ {
+ nEdgeIs = 1;
+ }
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(0);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(1);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.17, 0.33);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.15, 0.35);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.13, 0.37);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.11, 0.39);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.1, 0.34); // toward CC
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.09, 0.31); // toward CC
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.16, 0.4); // toward C
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.19, 0.41); // toward C
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.12, 0.32); // toward N
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.10, 0.28); // toward N
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.18, 0.38); // toward S
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.22, 0.40); // toward S
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(1);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(0);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.67, 0.83);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.65, 0.85);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.63, 0.87);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.61, 0.89);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.60, 0.84); // cc
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.59, 0.81); // cc
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.66, 0.90); // c
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.69, 0.91); // c
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.68, 0.88); // n
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.72, 0.90); // n
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.62, 0.82); // s
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.60, 0.78); // s
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ if (sectionChance == 9)
+ {
+ wBigIs = 1;
+ }
+ if (sectionChance == 10)
+ {
+ wEdgeIs = 1;
+ }
+ if (sectionChance == 11)
+ {
+ eBigIs = 1;
+ }
+ if (sectionChance == 12)
+ {
+ eEdgeIs = 1;
+ }
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(0);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(1);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.42, 0.58);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.40, 0.60);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.38, 0.62);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.36, 0.64);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.35, 0.59); // toward CC
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.34, 0.56); // toward CC
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.41, 0.65); // toward C
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.44, 0.66); // toward C
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.37, 0.57); // toward E
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.35, 0.50); // toward E
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.43, 0.63); // toward W
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.48, 0.65); // toward W
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(1);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(0);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.92, 0.08);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.90, 0.10);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.88, 0.12);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.86, 0.14);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.85, 0.09); // toward CC
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.84, 0.06); // toward CC
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.91, 0.15); // toward C
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.94, 0.16); // toward C
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.93, 0.13); // toward E
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.00, 0.15); // toward E
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.87, 0.07); // toward W
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.85, 0.02); // toward W
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ }
+ }
+ else if (cNumberNonGaiaPlayers < 7) // for 2 teams, for 5-6 players
+ {
+ sectionChance = rmRandInt(1,15);
+ if (sectionChance < 13)
+ {
+ directionChance = 0;
+
+ if (axisChance == 1)
+ {
+ if (sectionChance == 9)
+ {
+ if (twoChance == 1)
+ sBigIs = 1;
+ else if (twoChance == 2)
+ sEdgeIs = 1;
+ }
+ if (sectionChance == 10)
+ {
+ if (twoChance == 1)
+ sBigIs = 1;
+ else if (twoChance == 2)
+ sEdgeIs = 1;
+ }
+ if (sectionChance == 11)
+ {
+ if (twoChance == 1)
+ nBigIs = 1;
+ else if (twoChance == 2)
+ nEdgeIs = 1;
+ }
+ if (sectionChance == 12)
+ {
+ if (twoChance == 1)
+ nBigIs = 1;
+ else if (twoChance == 2)
+ nEdgeIs = 1;
+ }
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(0);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(1);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.13, 0.37);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.12, 0.38);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.11, 0.39);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.10, 0.40);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.1, 0.34); // toward CC
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.09, 0.31); // toward CC
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.16, 0.4); // toward C
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.19, 0.41); // toward C
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.12, 0.32); // toward N
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.07, 0.27); // toward N
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.18, 0.38); // toward S
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.16, 0.40); // toward S
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(1);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(0);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.63, 0.87);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.62, 0.88);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.61, 0.89);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.60, 0.90);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.60, 0.84); // cc
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.59, 0.81); // cc
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.66, 0.90); // c
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.69, 0.91); // c
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.68, 0.88); // n
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.73, 0.93); // n
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.62, 0.82); // s
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.60, 0.84); // s
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ if (sectionChance == 9)
+ {
+ if (twoChance == 1)
+ wBigIs = 1;
+ else if (twoChance == 2)
+ wEdgeIs = 1;
+ }
+ if (sectionChance == 10)
+ {
+ if (twoChance == 1)
+ wBigIs = 1;
+ else if (twoChance == 2)
+ wEdgeIs = 1;
+ }
+ if (sectionChance == 11)
+ {
+ if (twoChance == 1)
+ eBigIs = 1;
+ else if (twoChance == 2)
+ eEdgeIs = 1;
+ }
+ if (sectionChance == 12)
+ {
+ if (twoChance == 1)
+ eBigIs = 1;
+ else if (twoChance == 2)
+ eEdgeIs = 1;
+ }
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(0);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(1);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.38, 0.62);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.37, 0.63);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.36, 0.64);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.35, 0.65);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.35, 0.59); // toward CC
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.34, 0.56); // toward CC
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.41, 0.65); // toward C
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.44, 0.66); // toward C
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.37, 0.57); // toward E
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.32, 0.52); // toward E
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.43, 0.63); // toward W
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.41, 0.65); // toward W
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(1);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(0);
+
+ if (sectionChance == 1)
+ rmSetPlacementSection(0.88, 0.12);
+ else if (sectionChance == 2)
+ rmSetPlacementSection(0.87, 0.13);
+ else if (sectionChance == 3)
+ rmSetPlacementSection(0.86, 0.14);
+ else if (sectionChance == 4)
+ rmSetPlacementSection(0.85, 0.15);
+ else if (sectionChance == 5)
+ rmSetPlacementSection(0.85, 0.09); // toward CC
+ else if (sectionChance == 6)
+ rmSetPlacementSection(0.84, 0.06); // toward CC
+ else if (sectionChance == 7)
+ rmSetPlacementSection(0.91, 0.15); // toward C
+ else if (sectionChance == 8)
+ rmSetPlacementSection(0.94, 0.16); // toward C
+ else if (sectionChance == 9)
+ rmSetPlacementSection(0.93, 0.13); // toward E
+ else if (sectionChance == 10)
+ rmSetPlacementSection(0.98, 0.18); // toward E
+ else if (sectionChance == 11)
+ rmSetPlacementSection(0.87, 0.07); // toward W
+ else if (sectionChance == 12)
+ rmSetPlacementSection(0.85, 0.09); // toward W
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+ }
+ }
+ else if (sectionChance > 12)
+ {
+ directionChance = 0;
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+ }
+ }
+ else // for 2 teams, for over 6 players
+ {
+ sectionChance = rmRandInt(1,7);
+ if (sectionChance > 5) // chances 6 and 7, opp sides
+ {
+ if (axisChance == 1)
+ {
+ if (playerSide == 1)
+ rmSetPlacementTeam(0);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.11, 0.39);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(1);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.61, 0.89);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ }
+ else if (axisChance == 2)
+ {
+ if (playerSide == 1)
+ rmSetPlacementTeam(0);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(1);
+ rmSetPlacementSection(0.36, 0.64);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+
+ if (playerSide == 1)
+ rmSetPlacementTeam(1);
+ else if (playerSide == 2)
+ rmSetPlacementTeam(0);
+ rmSetPlacementSection(0.86, 0.14);
+
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ }
+ }
+ else if (sectionChance == 1) // 0.7 of map, gap to E
+ {
+ eBigIs = 1;
+ rmSetPlacementSection(0.39, 0.11);
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ if (rmRandInt(1,4) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ else if (sectionChance == 2) // 0.7 of map, gap to W
+ {
+ wBigIs = 1;
+ rmSetPlacementSection(0.89, 0.61);
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ if (rmRandInt(1,4) == 1)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ else if (sectionChance == 3) // 0.7 of map, gap to S
+ {
+ sBigIs = 1;
+ rmSetPlacementSection(0.64, 0.36);
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ if (rmRandInt(1,4) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ }
+ else if (sectionChance == 4) // 0.7 of map, gap to N
+ {
+ nBigIs = 1;
+ rmSetPlacementSection(0.14, 0.86);
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ if (rmRandInt(1,4) == 1)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ }
+ else if (sectionChance == 5) // another circular chance
+ {
+ directionChance = 0;
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ }
+ }
+ }
+ else // for FFA or over 2 teams
+ {
+ sectionChance = rmRandInt(1,5);
+ if (sectionChance > 4) // another chance at circular placement
+ {
+ directionChance = 0;
+ if (cNumberNonGaiaPlayers < 6) //FFA 4 or 5 pl
+ {
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+ }
+ else // over 5 FFA
+ {
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ }
+ }
+ else
+ {
+ if (sectionChance == 1) // 0.7 of map, gap to E
+ {
+ if (threeChance == 1)
+ eBigIs = 1;
+ else if (threeChance == 2)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ rmSetPlacementSection(0.39, 0.11);
+ }
+ else if (sectionChance == 2) // 0.7 of map, gap to W
+ {
+ if (threeChance == 1)
+ wBigIs = 1;
+ else if (threeChance == 2)
+ {
+ axisChance = 1;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 2;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ rmSetPlacementSection(0.89, 0.61);
+ }
+ else if (sectionChance == 3) // 0.7 of map, gap to S
+ {
+ if (threeChance == 1)
+ sBigIs = 1;
+ else if (threeChance == 2)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 1;
+ }
+ rmSetPlacementSection(0.64, 0.36);
+ }
+ else if (sectionChance == 4) // 0.7 of map, gap to N
+ {
+ if (threeChance == 1)
+ nBigIs = 1;
+ else if (threeChance == 2)
+ {
+ axisChance = 2;
+ directionChance = 0;
+ }
+ else
+ {
+ axisChance = 1;
+ if (rmRandInt(1,3) == 1)
+ directionChance = 0;
+ else
+ directionChance = 2;
+ }
+ rmSetPlacementSection(0.14, 0.86);
+ }
+ if (cNumberNonGaiaPlayers < 6)
+ {
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.31, 0.32, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.33, 0.34, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.37, 0.38, 0.0);
+ }
+ else
+ {
+ if (distChance == 1)
+ rmPlacePlayersCircular(0.30, 0.31, 0.0);
+ else if (distChance == 2)
+ rmPlacePlayersCircular(0.32, 0.33, 0.0);
+ else if (distChance == 3)
+ rmPlacePlayersCircular(0.34, 0.35, 0.0);
+ else if (distChance == 4)
+ rmPlacePlayersCircular(0.36, 0.37, 0.0);
+ else if (distChance == 5)
+ rmPlacePlayersCircular(0.38, 0.39, 0.0);
+ else if (distChance == 6)
+ rmPlacePlayersCircular(0.40, 0.41, 0.0);
+ else if (distChance == 7)
+ rmPlacePlayersCircular(0.42, 0.43, 0.0);
+ }
+ }
+ }
+ }
+}
+
+// Set up player areas.
+ float playerFraction=rmAreaTilesToFraction(7000 + cNumberNonGaiaPlayers*150);
+ float randomIslandChance=rmRandFloat(0, 1);
+ for(i=1; 6)
+ extraCount=cNumberNonGaiaPlayers + 1;
+
+ for(i=0; 5)
+ rmAddAreaConstraint(extraLandID, centralExtraLandConstraint2);
+ else
+ rmAddAreaConstraint(extraLandID, centralExtraLandConstraint);
+ }
+ rmAddAreaConstraint(extraLandID, playerConstraint);
+ rmAddAreaToClass(extraLandID, classCenterIsland);
+ rmAddAreaToClass(extraLandID, classGoldIsland);
+ rmSetAreaCoherence(extraLandID, 0.55);
+ rmSetAreaSmoothDistance(extraLandID, 20);
+ rmSetAreaHeightBlend(extraLandID, 2);
+ rmSetAreaBaseHeight(extraLandID, baseHeight);
+ rmBuildArea(extraLandID);
+ }
+
+// Text
+ rmSetStatusText("",0.30);
+
+// Trade Route
+int tradeRouteID = rmCreateTradeRoute();
+if (wBigIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.13, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.24, 0.525);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.34, 0.475);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.43, 0.5);
+}
+else if (eBigIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.85, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.76, 0.525);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.66, 0.475);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.57, 0.5);
+}
+else if (wEdgeIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.27, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.2, 0.53);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.2, 0.47);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.27, 0.32);
+}
+else if (eEdgeIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.73, 0.68);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.81, 0.53);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.81, 0.47);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.73, 0.32);
+}
+else if (sBigIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.13);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.52, 0.24);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.48, 0.34);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.43);
+}
+else if (nBigIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.87);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.52, 0.76);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.48, 0.66);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.57);
+}
+else if (sEdgeIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.68, 0.27);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.53, 0.2);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.47, 0.2);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.32, 0.27);
+}
+else if (nEdgeIs == 1)
+{
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.68, 0.73);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.53, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.47, 0.81);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.32, 0.73);
+}
+else
+{
+ if (axisChance == 1)
+ {
+ if (directionChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.53);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.475, 0.48);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.525, 0.35);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.3);
+ }
+ else if (directionChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.47);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.475, 0.52);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.525, 0.65);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.7);
+ }
+ else if (directionChance == 0)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.39);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.525, 0.44);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.475, 0.56);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.61);
+ }
+ }
+ else if (axisChance == 2)
+ {
+ if (directionChance == 1)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.53, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.48, 0.525);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.35, 0.475);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.3, 0.5);
+ }
+ else if (directionChance == 2)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.47, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.52, 0.475);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.65, 0.525);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.7, 0.5);
+ }
+ else if (directionChance == 0)
+ {
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.39, 0.5);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.44, 0.475);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.56, 0.525);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.61, 0.5);
+ }
+ }
+}
+rmBuildTradeRoute(tradeRouteID, tradeRouteType);
+
+// Trade sockets
+ int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
+ rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socketID, true);
+ rmAddObjectDefToClass(socketID, rmClassID("importantItem"));
+ rmSetObjectDefMinDistance(socketID, 0.0);
+ rmSetObjectDefMaxDistance(socketID, 6.0);
+
+ // add the meeting poles along the trade route.
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.09);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ if(cNumberNonGaiaPlayers > 5)
+ {
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.5);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+ }
+ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.91);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
+
+// Text
+ rmSetStatusText("",0.35);
+
+// KOTH game mode - on the center Big Island
+
+ int myKingsHillAvoidImpassableLand=rmCreateTerrainDistanceConstraint("my kings hill avoids impassable land", "Land", false, 4.0);
+ int myKingsHillAvoidAll=rmCreateTypeDistanceConstraint("my kings hill avoids all", "all", 4.0);
+ int myKingsHillAvoidTradeRouteSocket = rmCreateTypeDistanceConstraint("my kings hill avoids trade route socket", "socketTradeRoute", 5.0);
+ int myKingsHillAvoidTradeRoute = rmCreateTradeRouteDistanceConstraint("my kings hill avoids trade route", 6.0);
+
+ if(rmGetIsKOTH())
+ {
+ int myKingsHillID = rmCreateObjectDef("MyKingsHill");
+ rmAddObjectDefItem(myKingsHillID, "ypKingsHill", 1, 0);
+ rmAddObjectDefToClass(myKingsHillID, rmClassID("importantItem"));
+ rmSetObjectDefMinDistance(myKingsHillID, 0.0);
+ rmSetObjectDefMaxDistance(myKingsHillID, 10);
+ rmAddObjectDefConstraint(myKingsHillID, myKingsHillAvoidImpassableLand);
+ rmAddObjectDefConstraint(myKingsHillID, myKingsHillAvoidAll);
+ rmAddObjectDefConstraint(myKingsHillID, myKingsHillAvoidTradeRouteSocket);
+ rmAddObjectDefConstraint(myKingsHillID, myKingsHillAvoidTradeRoute);
+ rmAddObjectDefConstraint(myKingsHillID, avoidWater10);
+ if (cNumberNonGaiaPlayers == 2)
+ rmAddObjectDefConstraint(myKingsHillID, farPlayerConstraint);
+ else
+ rmAddObjectDefConstraint(myKingsHillID, fartherPlayerConstraint);
+ // Place on big island
+ rmPlaceObjectDefInArea(myKingsHillID, 0, rmAreaID("big island"), 1);
+ }
+
+// Player Nuggets
+ int playerNuggetID=rmCreateObjectDef("player nugget");
+ rmAddObjectDefItem(playerNuggetID, "nugget", 1, 0.0);
+ rmAddObjectDefToClass(playerNuggetID, rmClassID("nuggets"));
+ rmSetObjectDefMinDistance(playerNuggetID, 35.0);
+ rmSetObjectDefMaxDistance(playerNuggetID, 55.0);
+ rmAddObjectDefConstraint(playerNuggetID, avoidStartingUnitsSmall);
+ rmAddObjectDefConstraint(playerNuggetID, avoidTradeRoute);
+ rmAddObjectDefConstraint(playerNuggetID, avoidSocket);
+ rmAddObjectDefConstraint(playerNuggetID, avoidNugget);
+ rmAddObjectDefConstraint(playerNuggetID, avoidNativesShort);
+ rmAddObjectDefConstraint(playerNuggetID, circleConstraint);
+ rmAddObjectDefConstraint(playerNuggetID, avoidWater10);
+
+ for(i=1; 0)
+ {
+ for(i=1; 4)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("big island"), 1);
+ else
+ rmPlaceGroupingInArea(villageAID, 0, rmAreaID("big island"), 1);
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("big island"), 1);
+ else
+ rmPlaceGroupingInArea(villageAID, 0, rmAreaID("big island"), 1);
+ }
+ else if (cNumberNonGaiaPlayers > 2)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("big island"), 1);
+ else
+ rmPlaceGroupingInArea(villageAID, 0, rmAreaID("big island"), 1);
+ }
+ else if (cNumberNonGaiaPlayers == 2)
+ {
+ if (rmRandInt(1,3) < 3)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("big island"), 1);
+ else
+ rmPlaceGroupingInArea(villageAID, 0, rmAreaID("big island"), 1);
+ }
+ }
+ rmPlaceObjectDefInArea(extraGoldID, 0, rmAreaID("big island"), 1);
+ rmPlaceObjectDefInArea(huntableID, 0, rmAreaID("big island"), 2);
+ rmSetNuggetDifficulty(3, 3);
+ rmPlaceObjectDefInArea(nuggetID, 0, rmAreaID("big island"), 1);
+ if (cNumberNonGaiaPlayers > 3)
+ rmPlaceObjectDefInArea(nuggetID, 0, rmAreaID("big island"), 1);
+ rmSetNuggetDifficulty(4, 4);
+ rmPlaceObjectDefInArea(nuggetID, 0, rmAreaID("big island"), 1);
+ rmPlaceObjectDefInArea(centralHerdID, 0, rmAreaID("big island"), 1);
+ if (cNumberNonGaiaPlayers > 4)
+ rmPlaceObjectDefInArea(centralHerdID, 0, rmAreaID("big island"), 1);
+ if (cNumberNonGaiaPlayers > 4)
+ rmPlaceObjectDefInArea(extraGoldID, 0, rmAreaID("big island"), 1);
+ if (sheepChance > 0)
+ {
+ rmPlaceObjectDefInArea(sheepID, 0, rmAreaID("big island"), rmRandInt(2,3));
+ }
+
+// Text
+ rmSetStatusText("",0.40);
+
+// Native Islands
+ int chanceSetup = 0;
+ int constraintChance4 = 0;
+ if (cNumberNonGaiaPlayers > 4)
+ extraNativeIs = 1;
+ else if (cNumberNonGaiaPlayers > 2)
+ {
+ if (rmRandInt(1,3) > 1)
+ extraNativeIs = 1;
+ }
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ extraNativeIs = 1;
+ }
+
+ int nativeIsland1ID=rmCreateArea("native island 1");
+ rmSetAreaSize(nativeIsland1ID, rmAreaTilesToFraction(2500 + cNumberNonGaiaPlayers*200), rmAreaTilesToFraction(3000 + cNumberNonGaiaPlayers*280));
+ rmSetAreaMix(nativeIsland1ID, baseType);
+ rmAddAreaConstraint(nativeIsland1ID, centerIslandConstraint);
+ rmAddAreaConstraint(nativeIsland1ID, circleEdgeConstraint);
+ rmAddAreaConstraint(nativeIsland1ID, playerConstraint);
+ if (centeredBigIsland == 1)
+ rmAddAreaConstraint(nativeIsland1ID, nativeIslandConstraintLarge);
+ else
+ rmAddAreaConstraint(nativeIsland1ID, nativeIslandConstraint);
+ rmAddAreaToClass(nativeIsland1ID, classSettlementIsland);
+ rmAddAreaToClass(nativeIsland1ID, classNativeIsland);
+ rmAddAreaToClass(nativeIsland1ID, classGoldIsland);
+ rmSetAreaCoherence(nativeIsland1ID, 0.35);
+ rmSetAreaSmoothDistance(nativeIsland1ID, 12);
+ rmSetAreaHeightBlend(nativeIsland1ID, 2);
+ rmSetAreaBaseHeight(nativeIsland1ID, baseHeight);
+ rmBuildArea(nativeIsland1ID);
+
+ int nativeIsland2ID=rmCreateArea("native island 2");
+ rmSetAreaSize(nativeIsland2ID, rmAreaTilesToFraction(2500 + cNumberNonGaiaPlayers*180), rmAreaTilesToFraction(3000 + cNumberNonGaiaPlayers*250));
+ rmSetAreaMix(nativeIsland2ID, baseType);
+ rmAddAreaConstraint(nativeIsland2ID, settlementIslandConstraint);
+ rmAddAreaConstraint(nativeIsland2ID, centerIslandConstraint);
+ rmAddAreaConstraint(nativeIsland2ID, playerConstraint);
+ if (centeredBigIsland == 1)
+ rmAddAreaConstraint(nativeIsland2ID, nativeIslandConstraintLarge);
+ else
+ rmAddAreaConstraint(nativeIsland2ID, nativeIslandConstraint);
+ rmAddAreaConstraint(nativeIsland2ID, circleEdgeConstraint);
+ rmAddAreaToClass(nativeIsland2ID, classSettlementIsland);
+ rmAddAreaToClass(nativeIsland2ID, classNativeIsland);
+ rmAddAreaToClass(nativeIsland2ID, classGoldIsland);
+ rmSetAreaCoherence(nativeIsland2ID, 0.4);
+ rmSetAreaSmoothDistance(nativeIsland2ID, 12);
+ rmSetAreaHeightBlend(nativeIsland2ID, 2);
+ rmSetAreaBaseHeight(nativeIsland2ID, baseHeight);
+ rmBuildArea(nativeIsland2ID);
+
+if (extraNativeIs == 1)
+{
+ int nativeIsland3ID=rmCreateArea("native island 3");
+ rmSetAreaSize(nativeIsland3ID, rmAreaTilesToFraction(2200 + cNumberNonGaiaPlayers*180), rmAreaTilesToFraction(2800 + cNumberNonGaiaPlayers*250));
+ rmSetAreaMix(nativeIsland3ID, baseType);
+ rmAddAreaConstraint(nativeIsland3ID, settlementIslandConstraint);
+ rmAddAreaConstraint(nativeIsland3ID, centerIslandConstraint);
+ rmAddAreaConstraint(nativeIsland3ID, playerConstraint);
+ rmAddAreaConstraint(nativeIsland3ID, nativeIslandConstraint);
+ rmAddAreaConstraint(nativeIsland3ID, circleEdgeConstraint);
+ rmAddAreaToClass(nativeIsland3ID, classSettlementIsland);
+ rmAddAreaToClass(nativeIsland3ID, classNativeIsland);
+ rmAddAreaToClass(nativeIsland3ID, classGoldIsland);
+ rmSetAreaCoherence(nativeIsland3ID, 0.4);
+ rmSetAreaSmoothDistance(nativeIsland3ID, 12);
+ rmSetAreaHeightBlend(nativeIsland3ID, 2);
+ rmSetAreaBaseHeight(nativeIsland3ID, baseHeight);
+ rmBuildArea(nativeIsland3ID);
+}
+
+// Native Island Objects placement
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("native island 1"), 1);
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("native island 2"), 1);
+ rmPlaceObjectDefInArea(centralHerdID, 0, rmAreaID("native island 1"), 1);
+ rmPlaceObjectDefInArea(centralHerdID, 0, rmAreaID("native island 2"), 1);
+ if (sheepChance > 0)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceObjectDefInArea(sheepID, 0, rmAreaID("native island 1"), 1);
+ if (rmRandInt(1,2) == 1)
+ rmPlaceObjectDefInArea(sheepID, 0, rmAreaID("native island 2"), 1);
+ }
+ if (extraNativeIs == 1)
+ {
+ if (rmRandInt(1,2) == 1)
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("native island 3"), 1);
+ else
+ rmPlaceGroupingInArea(villageAID, 0, rmAreaID("native island 3"), 1);
+ rmPlaceObjectDefInArea(centralHerdID, 0, rmAreaID("native island 3"), 1);
+ if (sheepChance > 0)
+ {
+ if (rmRandInt(1,3) > 1)
+ rmPlaceObjectDefInArea(sheepID, 0, rmAreaID("native island 3"), 1);
+ }
+ }
+
+// Text
+ rmSetStatusText("",0.45);
+
+// More Islands/land - may merge with big island or each other
+ int numIslands = cNumberNonGaiaPlayers - 1;
+ if (cNumberNonGaiaPlayers > 4)
+ numIslands = cNumberNonGaiaPlayers - 2;
+ if (cNumberNonGaiaPlayers > 7)
+ numIslands = cNumberNonGaiaPlayers - 3;
+
+ for(i=0; 0.5)
+ rmAddAreaConstraint(settlementIslandID, settlementIslandConstraint);
+ }
+ else if (cNumberNonGaiaPlayers < 7)
+ {
+ if (constraintChance4 > 0.5)
+ rmAddAreaConstraint(settlementIslandID, settlementIslandConstraint);
+ }
+ else
+ {
+ if (constraintChance4 > 0.3)
+ rmAddAreaConstraint(settlementIslandID, settlementIslandConstraint);
+ }
+
+ chanceSetup = rmRandFloat(0.0,1.0);
+ if (cNumberNonGaiaPlayers < 5)
+ {
+ if (chanceSetup < 0.4)
+ rmAddAreaConstraint(settlementIslandID, centerIslandConstraint);
+ }
+ else if (cNumberNonGaiaPlayers < 7)
+ {
+ if (chanceSetup < 0.6)
+ rmAddAreaConstraint(settlementIslandID, centerIslandConstraint);
+ }
+ else
+ {
+ if (chanceSetup < 0.7)
+ rmAddAreaConstraint(settlementIslandID, centerIslandConstraint);
+ }
+
+ rmAddAreaConstraint(settlementIslandID, playerConstraint);
+ rmAddAreaConstraint(settlementIslandID, circleEdgeConstraint);
+ if (rmRandInt(1,3) > 1)
+ rmAddAreaConstraint(settlementIslandID, nativeIslandConstraint);
+ rmAddAreaToClass(settlementIslandID, classSettlementIsland);
+ rmAddAreaToClass(settlementIslandID, classGoldIsland);
+ rmSetAreaCoherence(settlementIslandID, 0.35);
+ rmSetAreaSmoothDistance(settlementIslandID, 12);
+ rmSetAreaHeightBlend(settlementIslandID, 2);
+ rmSetAreaBaseHeight(settlementIslandID, baseHeight);
+ rmBuildArea(settlementIslandID);
+
+ // Settlement Island Objects placement
+ if (cNumberNonGaiaPlayers > 5)
+ {
+ if (chanceSetup < 0.7)
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("settlement island"+i), 1);
+ else
+ {
+ if (rmRandInt(1,4) == 1)
+ rmPlaceGroupingInArea(villageDID, 0, rmAreaID("settlement island"+i), 1);
+ }
+ }
+ rmSetNuggetDifficulty(3, 3);
+ rmPlaceObjectDefInArea(nuggetID, 0, rmAreaID("settlement island"+i), 1);
+ if (rmRandInt(1,4) > 1)
+ rmPlaceObjectDefInArea(centralHerdID, 0, rmAreaID("settlement island"+i), 1);
+ if (sheepChance > 0)
+ {
+ if (rmRandInt(1,3) == 1)
+ rmPlaceObjectDefInArea(sheepID, 0, rmAreaID("settlement island"+i), 1);
+ }
+ }
+
+// Text
+ rmSetStatusText("",0.50);
+
+// Bonus Resource Islands - can merge with other extra islands.
+ int bonusCount=cNumberNonGaiaPlayers + 2; // num players plus some extra
+ if (cNumberNonGaiaPlayers > 5)
+ bonusCount=cNumberNonGaiaPlayers + 1;
+
+ for(i=0; 5)
+ {
+ if (rmRandInt(1,10) > 4)
+ rmAddAreaConstraint(bonusIslandID, centerIslandConstraint);
+ }
+ else
+ {
+ if (rmRandInt(1,2) > 1)
+ rmAddAreaConstraint(bonusIslandID, centerIslandConstraint);
+ }
+ if (rmRandInt(1,2) == 1)
+ rmAddAreaConstraint(bonusIslandID, nativeIslandConstraint);
+ rmAddAreaConstraint(bonusIslandID, secondPlayerConstraint);
+ rmAddAreaToClass(bonusIslandID, classBonusIsland);
+ rmAddAreaToClass(bonusIslandID, classGoldIsland);
+ rmSetAreaCoherence(bonusIslandID, 0.55);
+ rmSetAreaSmoothDistance(bonusIslandID, 20);
+ rmSetAreaHeightBlend(bonusIslandID, 2);
+ rmSetAreaBaseHeight(bonusIslandID, baseHeight);
+
+ // Island avoidance determination
+ randomIslandChance=rmRandFloat(0.0, 1.0);
+ if(randomIslandChance < 0.33)
+ {
+ rmAddAreaToClass(bonusIslandID, islandsX);
+ rmAddAreaConstraint(bonusIslandID, islandsXvsY);
+ rmAddAreaConstraint(bonusIslandID, islandsXYvsZ);
+ }
+ else if(randomIslandChance < 0.66)
+ {
+ rmAddAreaToClass(bonusIslandID, islandsY);
+ rmAddAreaConstraint(bonusIslandID, islandsYvsX);
+ rmAddAreaConstraint(bonusIslandID, islandsXYvsZ);
+ }
+ else
+ {
+ rmAddAreaToClass(bonusIslandID, islandsZ);
+ rmAddAreaConstraint(bonusIslandID, islandsZvsX);
+ rmAddAreaConstraint(bonusIslandID, islandsZvsY);
+ }
+ rmBuildArea(bonusIslandID);
+
+ // Bonus Island Objects
+ rmPlaceObjectDefInArea(centralHerdID, 0, rmAreaID("bonus island"+i), 1);
+ if (rmRandInt(1,3) == 1)
+ {
+ rmSetNuggetDifficulty(2, 3);
+ rmPlaceObjectDefInArea(nuggetID, 0, rmAreaID("bonus island"+i), 1);
+ }
+ }
+
+// Text
+ rmSetStatusText("",0.55);
+
+// Caches and bonus objects
+ // Campfire cache
+ int campfireID=rmCreateObjectDef("campfire cache");
+ if (rmRandInt(1,2) == 1)
+ {
+ rmAddObjectDefItem(campfireID, "Campfire", 1, 0.0);
+ rmAddObjectDefItem(campfireID, "TanningRack", 1, 4.0);
+ }
+ else
+ {
+ if (rmRandInt(1,2) == 1)
+ rmAddObjectDefItem(campfireID, "SPCSignalFire", 1, 0.0);
+ else
+ rmAddObjectDefItem(campfireID, "SPCSignalFireLit", 1, 0.0);
+ }
+ if (rmRandInt(1,2) == 1)
+ rmAddObjectDefItem(campfireID, "CrateOfWood", rmRandInt(2,3), 4.0);
+ else
+ rmAddObjectDefItem(campfireID, "CrateOfWoodLarge", 1, 4.0);
+ rmAddObjectDefToClass(campfireID, rmClassID("importantItem"));
+ rmAddObjectDefConstraint(campfireID, avoidTradeRoute);
+ rmAddObjectDefConstraint(campfireID, avoidImportantItemMed);
+ rmAddObjectDefConstraint(campfireID, avoidWater10);
+ rmAddObjectDefConstraint(campfireID, fartherPlayerConstraint);
+ if (rmRandInt(1,5) < 5)
+ campfireCache = 1;
+
+ // House cache ====================================================================================================
+ int cacheContents = rmRandInt(1,5);
+ int houseCacheID=rmCreateObjectDef("house cache");
+ if (cacheType == 1) // northern
+ {
+ rmAddObjectDefItem(houseCacheID, "NativeHouseIroquois", 1, 0.0);
+ rmAddObjectDefItem(houseCacheID, "Campfire", 1, 4.0);
+ }
+ else if (cacheType == 2) // plains
+ {
+ rmAddObjectDefItem(houseCacheID, "Teepee", 1, 6.0);
+ rmAddObjectDefItem(houseCacheID, "Campfire", 1, 5.0);
+ }
+ else if (cacheType == 3) // southern
+ {
+ rmAddObjectDefItem(houseCacheID, "NativeHouseCarib", 2, 6.0);
+ if (rmRandInt(1,2) == 1)
+ rmAddObjectDefItem(houseCacheID, "Skulls", rmRandInt(1,2), 5.0);
+ }
+ else if (cacheType == 4) // leanto
+ {
+ rmAddObjectDefItem(houseCacheID, "LeanTo", 2, 6.0);
+ if (rmRandInt(1,2) == 1)
+ rmAddObjectDefItem(houseCacheID, "Skulls", rmRandInt(1,2), 5.0);
+ }
+ else if (cacheType == 5) // meso
+ rmAddObjectDefItem(houseCacheID, "NativeHouseAztec", 1, 4.0);
+ else if (cacheType == 6) // southern Asian - India/Ceylon/Himalaya/Borneo
+ {
+ if (patternChance == 32) // Himalaya
+ threeChoice = rmRandInt(1,2);
+ else
+ threeChoice = rmRandInt(1,3);
+ if (threeChoice == 1)
+ rmAddObjectDefItem(houseCacheID, "ypNativeTempleBhakti", rmRandInt(1,2), 6.0);
+ else if (threeChoice == 2)
+ rmAddObjectDefItem(houseCacheID, "ypNativeTempleUdasi", rmRandInt(1,2), 6.0);
+ else if (threeChoice == 3)
+ {
+ rmAddObjectDefItem(houseCacheID, "LeanTo", 2, 6.0);
+ rmAddObjectDefItem(houseCacheID, "Campfire", 1, 3.0);
+ }
+ }
+ else if (cacheType == 7) // northern Asian
+ {
+ rmAddObjectDefItem(houseCacheID, "ypMonastery", 1, 2.0);
+ if (patternChance == 30)
+ rmAddObjectDefItem(houseCacheID, "ypPropsJapaneseBanner", 2, 5.0);
+ }
+ if (cacheType < 5)
+ {
+ if (threeChoice > 1)
+ rmAddObjectDefItem(houseCacheID, "TanningRack", 1, 4.0);
+ }
+ if (cacheContents == 1)
+ rmAddObjectDefItem(houseCacheID, "CrateOfFood", 2, 5.0);
+ else if (cacheContents == 2)
+ rmAddObjectDefItem(houseCacheID, "CrateOfFoodLarge", 1, 4.0);
+ else if (cacheContents == 3)
+ rmAddObjectDefItem(houseCacheID, "CrateOfCoin", 2, 5.0);
+ else if (cacheContents == 4)
+ rmAddObjectDefItem(houseCacheID, "CrateOfCoinLarge", 1, 4.0);
+ else if (cacheContents == 5)
+ {
+ rmAddObjectDefItem(houseCacheID, "CrateOfFood", 1, 5.0);
+ rmAddObjectDefItem(houseCacheID, "CrateOfCoin", 1, 6.0);
+ }
+ rmAddObjectDefToClass(houseCacheID, rmClassID("importantItem"));
+ rmAddObjectDefConstraint(houseCacheID, avoidTradeRoute);
+ rmAddObjectDefConstraint(houseCacheID, avoidImportantItemMed);
+ rmAddObjectDefConstraint(houseCacheID, avoidWater10);
+ rmAddObjectDefConstraint(houseCacheID, fartherPlayerConstraint);
+ rmPlaceObjectDefInRandomAreaOfClass(houseCacheID, 0, classCenterIsland, rmRandInt(1,2));
+ rmPlaceObjectDefInRandomAreaOfClass(houseCacheID, 0, classGoldIsland, 1);
+ if (cNumberNonGaiaPlayers > 2)
+ rmPlaceObjectDefInRandomAreaOfClass(houseCacheID, 0, classSettlementIsland, 1);
+ if (cNumberNonGaiaPlayers > 3)
+ rmPlaceObjectDefInRandomAreaOfClass(houseCacheID, 0, classSettlementIsland, 1);
+ if (cNumberNonGaiaPlayers > 4)
+ rmPlaceObjectDefInRandomAreaOfClass(houseCacheID, 0, classGoldIsland, 1);
+
+ // Shrine cache
+ if ((patternChance == 30) || (patternChance == 32) || (patternChance == 34) || (patternChance == 36))
+ {
+ cacheContents = rmRandInt(1,2);
+ int shrineCacheID=rmCreateObjectDef("shrine cache");
+ rmAddObjectDefItem(shrineCacheID, "ypShrineJapanese", 1, 0.0);
+ if (cacheContents == 1)
+ rmAddObjectDefItem(shrineCacheID, "CrateOfFood", rmRandInt(2,3), 4.0);
+ else if (cacheContents == 2)
+ rmAddObjectDefItem(shrineCacheID, "CrateOfCoin", rmRandInt(2,3), 4.0);
+ rmAddObjectDefItem(shrineCacheID, deer2Type, 4, 5.0);
+ rmAddObjectDefToClass(shrineCacheID, rmClassID("importantItem"));
+ rmAddObjectDefConstraint(shrineCacheID, avoidTradeRoute);
+ rmAddObjectDefConstraint(shrineCacheID, avoidImportantItemMed);
+ rmAddObjectDefConstraint(shrineCacheID, avoidWater10);
+ rmAddObjectDefConstraint(shrineCacheID, fartherPlayerConstraint);
+ rmPlaceObjectDefInRandomAreaOfClass(shrineCacheID, 0, classGoldIsland, 1);
+ if (cNumberNonGaiaPlayers > 2)
+ rmPlaceObjectDefInRandomAreaOfClass(shrineCacheID, 0, classGoldIsland, 1);
+ if (cNumberNonGaiaPlayers > 4)
+ rmPlaceObjectDefInRandomAreaOfClass(shrineCacheID, 0, classGoldIsland, 1);
+ if (rmRandInt(1,2)==1)
+ rmPlaceObjectDefInRandomAreaOfClass(shrineCacheID, 0, classGoldIsland, 1);
+ }
+
+ // Mural cache
+ if ((patternChance == 13) || (patternChance == 14) || (patternChance == 15) || (patternChance == 28)) // yucatan, sonora, palm desert, caribbean
+ {
+ int muralCacheID=rmCreateObjectDef("mural cache");
+ rmAddObjectDefItem(muralCacheID, "SPCAztecMural", 1, 0.0);
+ rmAddObjectDefItem(muralCacheID, "CrateOfCoin", 1, 4.0);
+ rmAddObjectDefToClass(muralCacheID, rmClassID("importantItem"));
+ rmAddObjectDefConstraint(muralCacheID, avoidTradeRoute);
+ rmAddObjectDefConstraint(muralCacheID, avoidImportantItemMed);
+ rmAddObjectDefConstraint(muralCacheID, avoidWater10);
+ rmAddObjectDefConstraint(muralCacheID, fartherPlayerConstraint);
+ rmPlaceObjectDefInRandomAreaOfClass(muralCacheID, 0, classGoldIsland, 1);
+ }
+
+ // Arctic cache
+ if (arctic == 1)
+ {
+ int arcticCacheID=rmCreateObjectDef("arctic cache");
+ rmAddObjectDefItem(arcticCacheID, "Inuksuk", 1, 0.0);
+ rmAddObjectDefItem(arcticCacheID, "CrateOfCoin", rmRandInt(2,3), 6.0);
+ rmAddObjectDefToClass(arcticCacheID, rmClassID("importantItem"));
+ rmAddObjectDefConstraint(arcticCacheID, avoidTradeRoute);
+ rmAddObjectDefConstraint(arcticCacheID, avoidImportantItemMed);
+ rmAddObjectDefConstraint(arcticCacheID, avoidWater10);
+ rmAddObjectDefConstraint(arcticCacheID, fartherPlayerConstraint);
+ rmPlaceObjectDefInRandomAreaOfClass(arcticCacheID, 0, classCenterIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(arcticCacheID, 0, classGoldIsland, 1);
+ }
+
+ // Inca outpost cache
+ if ((patternChance == 16) || (patternChance == 22) || (patternChance == 23) || (patternChance == 24) || (patternChance == 29)) // amazon, andes, atacama, central and north araucania
+ {
+ int incaCacheID=rmCreateObjectDef("inca cache");
+ rmAddObjectDefItem(incaCacheID, "SPCIncaOutpost", 1, 0.0);
+ rmAddObjectDefItem(incaCacheID, "CrateOfCoin", rmRandInt(2,3), 4.0);
+ rmAddObjectDefToClass(incaCacheID, rmClassID("importantItem"));
+ rmAddObjectDefConstraint(incaCacheID, avoidTradeRoute);
+ rmAddObjectDefConstraint(incaCacheID, avoidImportantItemMed);
+ rmAddObjectDefConstraint(incaCacheID, avoidWater10);
+ rmAddObjectDefConstraint(incaCacheID, fartherPlayerConstraint);
+ rmPlaceObjectDefInRandomAreaOfClass(incaCacheID, 0, classCenterIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(incaCacheID, 0, classSettlementIsland, 1);
+ if (cNumberNonGaiaPlayers > 4)
+ {
+ rmPlaceObjectDefInRandomAreaOfClass(incaCacheID, 0, classSettlementIsland, 1);
+ }
+ }
+
+ if (berryCache == 1) // Berry patches
+ {
+ int berryPatchType = rmRandInt(1,4);
+ int berryPatch = 0;
+ berryPatch = rmCreateGrouping("Berry patch", "BerryPatch "+berryPatchType);
+ rmSetGroupingMinDistance(berryPatch, 0.0);
+ rmSetGroupingMaxDistance(berryPatch, 12.0);
+ rmAddGroupingToClass(berryPatch, rmClassID("importantItem"));
+ rmAddGroupingConstraint(berryPatch, avoidAll);
+ rmAddGroupingConstraint(berryPatch, avoidWater10);
+ rmAddGroupingConstraint(berryPatch, avoidImportantItemMed);
+ if ((patternChance == 30) || (patternChance == 31) || (patternChance == 35) || (patternChance == 36))
+ {
+ rmPlaceGroupingInArea(berryPatch, 0, rmAreaID("big island"), 1);
+ for(i=0; 4)
+ {
+ rmPlaceObjectDefInRandomAreaOfClass(campfireID, 0, classCenterIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(campfireID, 0, classSettlementIsland, 1);
+ }
+ }
+
+// Additional Island Mines
+ rmPlaceObjectDefInRandomAreaOfClass(extraGoldID, 0, classSettlementIsland, 1);
+ if (cNumberNonGaiaPlayers > 3)
+ rmPlaceObjectDefInRandomAreaOfClass(extraGoldID, 0, classBonusIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(extraGoldID, 0, classGoldIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(extraGoldID, 0, classGoldIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(extraSilverID, 0, classGoldIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(extraSilverID, 0, classGoldIsland, 1);
+ if (cNumberNonGaiaPlayers > 4)
+ {
+ rmPlaceObjectDefInRandomAreaOfClass(extraSilverID, 0, classGoldIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(extraSilverID, 0, classBonusIsland, 1);
+ }
+ if (cNumberNonGaiaPlayers > 6)
+ {
+ rmPlaceObjectDefInRandomAreaOfClass(extraSilverID, 0, classGoldIsland, 1);
+ rmPlaceObjectDefInRandomAreaOfClass(extraSilverID, 0, classBonusIsland, 1);
+ }
+
+// Forests
+// Large player forests.
+ int failCount = 0;
+ for(i=1; 5)
+ forestNo = rmRandInt(8,9);
+ else if (cNumberNonGaiaPlayers > 3)
+ forestNo = rmRandInt(7,8);
+
+ if (lowForest == 1)
+ {
+ if (cNumberNonGaiaPlayers > 5)
+ forestCount=rmRandInt(4, 5);
+ else
+ forestCount=rmRandInt(3, 4);
+ }
+
+ for(i=0; < forestNo)
+ {
+ forestID=rmCreateArea("big island forest"+i, rmAreaID("big island"));
+ rmAddAreaToClass(forestID, rmClassID("classForest"));
+ if (lowForest == 1)
+ rmSetAreaSize(forestID, rmAreaTilesToFraction(120), rmAreaTilesToFraction(160));
+ else
+ rmSetAreaSize(forestID, rmAreaTilesToFraction(145), rmAreaTilesToFraction(175));
+ rmSetAreaWarnFailure(forestID, false);
+ rmSetAreaForestType(forestID, forestType);
+ rmSetAreaForestDensity(forestID, rmRandFloat(0.7, 1.0));
+ rmSetAreaForestClumpiness(forestID, rmRandFloat(0.5, 0.9));
+ rmSetAreaForestUnderbrush(forestID, rmRandFloat(0.0, 0.5));
+ rmSetAreaCoherence(forestID, rmRandFloat(0.4, 0.7));
+ rmAddAreaConstraint(forestID, avoidAll);
+ rmAddAreaConstraint(forestID, avoidWater10);
+ rmAddAreaConstraint(forestID, forestConstraint2);
+ rmAddAreaConstraint(forestID, avoidTradeRoute);
+ rmAddAreaConstraint(forestID, avoidSocket);
+ rmAddAreaConstraint(forestID, avoidNativesShort);
+ rmAddAreaConstraint(forestID, shortAvoidImpassableLand);
+ if(rmRandFloat(0.0, 1.0)<0.4)
+ rmSetAreaBaseHeight(forestID, rmRandFloat(3.0, 4.0));
+ rmBuildArea(forestID);
+
+ if (forestCoverUp == 1)
+ {
+ int coverForestPatch4ID = rmCreateArea(("big island forest cover"+i), rmAreaID("big island forest"+i));
+ rmSetAreaWarnFailure(coverForestPatch4ID, false);
+ if (lowForest == 1)
+ rmSetAreaSize(coverForestPatch4ID, rmAreaTilesToFraction(175), rmAreaTilesToFraction(175));
+ else
+ rmSetAreaSize(coverForestPatch4ID, rmAreaTilesToFraction(190), rmAreaTilesToFraction(190));
+ rmSetAreaCoherence(coverForestPatch4ID, 0.99);
+ rmSetAreaMix(coverForestPatch4ID, baseType);
+ rmBuildArea(coverForestPatch4ID);
+ }
+ }
+
+// Text
+ rmSetStatusText("",0.65);
+
+// Settlement island forests
+ for(i=0; 3)
+ {
+ if (sixChoice == 4)
+ rmPlaceObjectDefInArea(shipRuinsID, 0, rmAreaID("native island 1"));
+ else if (sixChoice == 5)
+ rmPlaceObjectDefInArea(shipRuinsID, 0, rmAreaID("native island 2"));
+ else if (sixChoice == 6)
+ rmPlaceObjectDefInRandomAreaOfClass(shipRuinsID, 0, classSettlementIsland, 1);
+ else
+ rmPlaceObjectDefInArea(shipRuinsID, 0, rmAreaID("big island"));
+ }
+
+// Text
+ rmSetStatusText("",0.85);
+
+// Deco
+ if (eaglerock == 1)
+ propType = "PropEaglesRocks";
+ else if (eagles == 1)
+ propType = "EaglesNest";
+ else if (vultures == 1)
+ propType = "PropVulturePerching";
+ else if (kingfishers == 1)
+ propType = "PropKingfisher";
+ else if (texasProp == 1)
+ propType = "BigPropTexas";
+
+ int avoidProp=rmCreateTypeDistanceConstraint("avoids prop", propType, 90.0);
+ int specialPropID=rmCreateObjectDef("special prop");
+ rmAddObjectDefItem(specialPropID, propType, 1, 0.0);
+ rmSetObjectDefMinDistance(specialPropID, 0.0);
+ rmSetObjectDefMaxDistance(specialPropID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(specialPropID, avoidAll);
+ rmAddObjectDefConstraint(specialPropID, avoidProp);
+ rmAddObjectDefConstraint(specialPropID, shortAvoidImpassableLand);
+ if ((vultures == 1) || (eaglerock == 1))
+ rmAddObjectDefConstraint(specialPropID, avoidWater20);
+ else
+ rmAddObjectDefConstraint(specialPropID, avoidWater10);
+ rmAddObjectDefConstraint(specialPropID, avoidImportantItem);
+ rmAddObjectDefConstraint(specialPropID, longPlayerConstraint);
+ rmPlaceObjectDefAtLoc(specialPropID, 0, 0.5, 0.5, (cNumberNonGaiaPlayers + 1));
+
+ if (underbrush == 1)
+ {
+ int avoidBrush=rmCreateTypeDistanceConstraint("avoids brush", brushType, 30.0);
+ int decoUnderbrushID=rmCreateObjectDef("underbrush");
+ rmAddObjectDefItem(decoUnderbrushID, brushType, rmRandInt(2,4), 4.0);
+ rmSetObjectDefMinDistance(decoUnderbrushID, 0.0);
+ rmSetObjectDefMaxDistance(decoUnderbrushID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(decoUnderbrushID, avoidAll);
+ rmAddObjectDefConstraint(decoUnderbrushID, avoidWater10);
+ rmAddObjectDefConstraint(decoUnderbrushID, avoidImpassableLand);
+ rmAddObjectDefConstraint(decoUnderbrushID, playerConstraintShort);
+ rmAddObjectDefConstraint(decoUnderbrushID, avoidBrush);
+ rmAddObjectDefConstraint(decoUnderbrushID, avoidTradeRoute);
+ rmPlaceObjectDefAtLoc(decoUnderbrushID, 0, 0.5, 0.5, 20*cNumberNonGaiaPlayers);
+ }
+
+// Water Flag
+ int waterFlagID=-1;
+ for(i=1; 28)
+ {
+ waterNuggets = 1;
+ threeChoice = rmRandInt(1,3);
+ if (threeChoice == 1)
+ rmSetMapType("Ceylon");
+ else if (threeChoice == 2)
+ rmSetMapType("Borneo");
+ else if (threeChoice == 3)
+ rmSetMapType("Japan");
+ }
+}
+
+if (waterNuggets == 1)
+{
+ int nuggetW= rmCreateObjectDef("nugget water");
+ rmAddObjectDefItem(nuggetW, "ypNuggetBoat", 1, 0.0);
+ rmAddObjectDefToClass(nuggetW, rmClassID("nuggets"));
+ rmSetNuggetDifficulty(5, 5);
+ rmSetObjectDefMinDistance(nuggetW, 0.0);
+ rmSetObjectDefMaxDistance(nuggetW, size*0.5);
+ rmAddObjectDefConstraint(nuggetW, avoidLand10);
+ rmAddObjectDefConstraint(nuggetW, avoidNuggetLong);
+ rmAddObjectDefConstraint(nuggetW, flagVsFlag);
+ rmPlaceObjectDefAtLoc(nuggetW, 0, 0.5, 0.5, 3*cNumberNonGaiaPlayers);
+}
+
+// Text
+ rmSetStatusText("",0.99);
+}
diff --git a/RMM/amazonia.xs b/RMM/amazonia.xs
index e46d715..ad4e172 100644
--- a/RMM/amazonia.xs
+++ b/RMM/amazonia.xs
@@ -353,11 +353,11 @@ void main(void)
// Player placement
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
- // Text
- rmSetStatusText("",0.20);
-
// Text
rmSetStatusText("",0.30);
@@ -933,16 +933,6 @@ void main(void)
rmEchoInfo("YLOC = "+(1.0-xLoc));
}
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// Resources that can be placed after forests
diff --git a/RMM/andes.xs b/RMM/andes.xs
index bf05145..6b2f73f 100644
--- a/RMM/andes.xs
+++ b/RMM/andes.xs
@@ -161,6 +161,9 @@ void main(void)
rmSetStatusText("",0.10);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 12.0);
+ rmSetObjectDefMaxDistance(startingUnits, 20.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
if(cNumberTeams > 2) //ffa
{
rmSetPlacementSection(0.52, 0.90);
@@ -560,16 +563,6 @@ void main(void)
// Text
rmSetStatusText("",0.60);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// KOTH check
diff --git a/RMM/araucania.xs b/RMM/araucania.xs
index bfcf347..a8bdc35 100644
--- a/RMM/araucania.xs
+++ b/RMM/araucania.xs
@@ -894,16 +894,6 @@ int classStartingUnits = rmDefineClass("Starting Units");
forestFailCount = 0;
}
- // Place random flags
- int avoidFlags2 = rmCreateTypeDistanceConstraint("flags avoid flags 2", "ControlFlag", 70);
- for ( i =1; <13 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags2);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/asianrandom.set b/RMM/asianrandom.set
index ed4aea4..107d962 100644
--- a/RMM/asianrandom.set
+++ b/RMM/asianrandom.set
@@ -1,13 +1,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/RMM/australia.xml b/RMM/australia.xml
new file mode 100644
index 0000000..b28b3cc
--- /dev/null
+++ b/RMM/australia.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\australia\australia_ss_01
+ ui\random_map\africa\australia\australia_ss_02
+ ui\random_map\africa\australia\australia_ss_03
+
\ No newline at end of file
diff --git a/RMM/australia.xs b/RMM/australia.xs
new file mode 100644
index 0000000..520d91f
--- /dev/null
+++ b/RMM/australia.xs
@@ -0,0 +1,441 @@
+ /* Durokan's gold rush - Jan 18 2016 1.1 --Finished and released 2v2*/
+ include "mercenaries.xs";
+ include "ypAsianInclude.xs";
+ include "ypKOTHInclude.xs";
+
+ void main(void) {
+
+ rmSetStatusText("",0.1);
+
+ float playerTiles=12000;
+ if (cNumberNonGaiaPlayers>4)
+ playerTiles = 10000;
+ if (cNumberNonGaiaPlayers>6)
+ playerTiles = 8500;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmSetMapSize(size, size);
+ rmSetMapType("land");
+ rmSetMapType("grass");
+ rmSetMapType("bayou");
+ rmTerrainInitialize("grass");
+ rmSetLightingSet("texas");
+
+ rmDefineClass("classForest");
+
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.49), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
+ int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+ int avoidHunt=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 50.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+ int avoidCoinMed=rmCreateTypeDistanceConstraint("avoid coin medium", "Mine", 60.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 6.0);
+ int AvoidWaterShort2 = rmCreateTerrainDistanceConstraint("avoid water short 2", "Land", false, 5.0);
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 6);
+ int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 5.0);
+ int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+ int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+ int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+ int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 18.0);
+ int avoidTownCenterMore=rmCreateTypeDistanceConstraint("avoid Town Center more", "townCenter", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+ int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 10.0);
+ int circleConstraint2=rmCreatePieConstraint("circle Constraint2", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int classPatch = rmDefineClass("patch");
+
+ int avoidRush=rmCreateTypeDistanceConstraint("avoid rush by a lot", "AbstractRush", 75.0);
+
+ Float spawnSwitch = rmRandFloat(0,1.2);
+
+ if (cNumberTeams == 2){
+ if (spawnSwitch <=0.6){
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.2, 0.3, 0.2, 0.7, 0, 0);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.8, 0.7, 0.8, 0.3, 0, 0);
+ }else if(spawnSwitch <=1.2){
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.2, 0.3, 0.2, 0.7, 0, 0);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.8, 0.7, 0.8, 0.3, 0, 0);
+ }
+ }else{
+ rmSetPlacementSection(0.16, 0.84);
+ rmPlacePlayersCircular(0.4, 0.4, 0.02);
+ }
+
+ chooseMercs();
+
+ rmSetStatusText("",0.2);
+
+ int continent = rmCreateArea("continent");
+ rmSetAreaSize(continent, 1.0, 1.0);
+ rmSetAreaLocation(continent, 0.5, 0.0);
+ rmSetAreaTerrainType(continent, "andes\ground25_and");
+ rmSetAreaBaseHeight(continent, 0.0);
+ rmSetAreaCoherence(continent, 1.0);
+ rmSetAreaSmoothDistance(continent, 10);
+ rmSetAreaHeightBlend(continent, 1);
+ //rmSetAreaEdgeFilling(continent, 5);
+ rmSetAreaElevationNoiseBias(continent, 0);
+ rmSetAreaElevationEdgeFalloffDist(continent, 10);
+ rmSetAreaElevationVariation(continent, 3);
+ rmSetAreaElevationPersistence(continent, .2);
+ rmSetAreaElevationOctaves(continent, 3);
+ rmSetAreaElevationMinFrequency(continent, 0.04);
+ rmSetAreaElevationType(continent, cElevTurbulence);
+ rmBuildArea(continent);
+
+
+ int island = rmCreateArea("island");
+ rmSetAreaSize(island, 0.1, 0.1);
+ rmSetAreaLocation(island, 0.505, 0.88);
+ rmSetAreaTerrainType(island, "andes\ground25_and");
+ rmSetAreaBaseHeight(island, -3.0);
+ rmSetAreaCoherence(island, 0.95);
+ rmSetAreaElevationEdgeFalloffDist(island, 10);
+ rmAddAreaInfluenceSegment(island, 0.48, 0.88, 0.53, 0.88);
+ rmBuildArea(island);
+
+
+ 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);
+
+ int tradeRouteID = rmCreateTradeRoute();
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.4, 0.01); // -1
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.4, 0.6, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.4, 0.7, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.2, 0.9, 2, 3); // -5
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+
+ vector socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.50);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+//END TR
+
+//TR 2
+
+ rmSetStatusText("",0.3);
+
+ int socket2ID=rmCreateObjectDef("sockets to dock Trade Posts 2");
+ rmAddObjectDefItem(socket2ID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socket2ID, true);
+ rmSetObjectDefMinDistance(socket2ID, 0.0);
+ rmSetObjectDefMaxDistance(socket2ID, 6.0);
+
+ int tradeRoute2ID = rmCreateTradeRoute();
+ rmSetObjectDefTradeRouteID(socket2ID, tradeRoute2ID);
+
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.6, 0.01); // -1
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.6, 0.6, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.6, 0.7, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.8, 0.9, 2, 3); // -5
+
+ rmBuildTradeRoute(tradeRoute2ID, "dirt");
+
+ vector socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.15);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.50);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.85);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+
+// END TR 2
+
+ rmSetStatusText("",0.4);
+
+ int topgold = rmCreateObjectDef("goldrush");
+ rmAddObjectDefItem(topgold, "minegold", 1, 1.0);
+ rmSetObjectDefMinDistance(topgold, 0.0);
+ rmSetObjectDefMaxDistance(topgold, rmXFractionToMeters(0.1));
+ rmAddObjectDefConstraint(topgold, avoidCoin);
+ //rmAddObjectDefConstraint(topgold, avoidNatives);
+ rmAddObjectDefConstraint(topgold, avoidTownCenterMore);
+ rmAddObjectDefConstraint(topgold, avoidSocket);
+ rmAddObjectDefConstraint(topgold, AvoidWaterShort2);
+ rmAddObjectDefConstraint(topgold, forestConstraintShort);
+ rmAddObjectDefConstraint(topgold, circleConstraint);
+ rmAddObjectDefConstraint(topgold, avoidRush);
+ rmPlaceObjectDefAtLoc(topgold, 0, 0.505, 0.88, 11);
+
+ int playerStart = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(playerStart, 7.0);
+ rmSetObjectDefMaxDistance(playerStart, 12.0);
+ rmAddObjectDefConstraint(playerStart, avoidAll);
+
+ int goldID = rmCreateObjectDef("starting gold");
+ rmAddObjectDefItem(goldID, "MineCopper", 1, 8.0);
+ rmSetObjectDefMinDistance(goldID, 15.0);
+ rmSetObjectDefMaxDistance(goldID, 15.0);
+
+ int gold2ID = rmCreateObjectDef("starting gold 2");
+ rmAddObjectDefItem(gold2ID, "mine", 1, 16.0);
+ rmSetObjectDefMinDistance(gold2ID, 15.0);
+ rmSetObjectDefMaxDistance(gold2ID, 15.0);
+ rmAddObjectDefConstraint(gold2ID, avoidCoin);
+
+ int berryID = rmCreateObjectDef("starting berries");
+ rmAddObjectDefItem(berryID, "BerryBush", 2, 6.0);
+ rmSetObjectDefMinDistance(berryID, 8.0);
+ rmSetObjectDefMaxDistance(berryID, 12.0);
+ rmAddObjectDefConstraint(berryID, avoidCoin);
+
+ int treeID = rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(treeID, "TreeSonora", rmRandInt(6,9), 10.0);
+ rmAddObjectDefItem(treeID, "UnderbrushTexas", rmRandInt(8,10), 12.0);
+ rmSetObjectDefMinDistance(treeID, 12.0);
+ rmSetObjectDefMaxDistance(treeID, 18.0);
+ rmAddObjectDefConstraint(treeID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(treeID, avoidCoin);
+
+ int foodID = rmCreateObjectDef("starting hunt");
+ rmAddObjectDefItem(foodID, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID, 10.0);
+ rmSetObjectDefMaxDistance(foodID, 10.0);
+ rmSetObjectDefCreateHerd(foodID, true);
+
+ rmSetStatusText("",0.5);
+
+ int foodID2 = rmCreateObjectDef("starting hunt 2");
+ rmAddObjectDefItem(foodID2, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID2, 40.0);
+ rmSetObjectDefMaxDistance(foodID2, 40.0);
+ rmSetObjectDefCreateHerd(foodID2, true);
+
+ int foodID3 = rmCreateObjectDef("starting hunt 3");
+ rmAddObjectDefItem(foodID3, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID3, 70.0);
+ rmSetObjectDefMaxDistance(foodID3, 70.0);
+ rmSetObjectDefCreateHerd(foodID3, true);
+
+
+ for(i=1;
+
+ ui\random_map\africa\australia\australia_ss_01
+ ui\random_map\africa\australia\australia_ss_02
+ ui\random_map\africa\australia\australia_ss_03
+
\ No newline at end of file
diff --git a/RMM/australialarge.xs b/RMM/australialarge.xs
new file mode 100644
index 0000000..5eabac6
--- /dev/null
+++ b/RMM/australialarge.xs
@@ -0,0 +1,441 @@
+ /* Durokan's gold rush - Jan 18 2016 1.1 --Finished and released 2v2*/
+ include "mercenaries.xs";
+ include "ypAsianInclude.xs";
+ include "ypKOTHInclude.xs";
+
+ void main(void) {
+
+ rmSetStatusText("",0.1);
+
+ float playerTiles=18000;
+ if (cNumberNonGaiaPlayers>4)
+ playerTiles = 16000;
+ if (cNumberNonGaiaPlayers>6)
+ playerTiles = 14000;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmSetMapSize(size, size);
+ rmSetMapType("land");
+ rmSetMapType("grass");
+ rmSetMapType("bayou");
+ rmTerrainInitialize("grass");
+ rmSetLightingSet("texas");
+
+ rmDefineClass("classForest");
+
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.49), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
+ int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+ int avoidHunt=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 50.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+ int avoidCoinMed=rmCreateTypeDistanceConstraint("avoid coin medium", "Mine", 60.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 6.0);
+ int AvoidWaterShort2 = rmCreateTerrainDistanceConstraint("avoid water short 2", "Land", false, 5.0);
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 6);
+ int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 5.0);
+ int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+ int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+ int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+ int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 18.0);
+ int avoidTownCenterMore=rmCreateTypeDistanceConstraint("avoid Town Center more", "townCenter", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+ int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 10.0);
+ int circleConstraint2=rmCreatePieConstraint("circle Constraint2", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int classPatch = rmDefineClass("patch");
+
+ int avoidRush=rmCreateTypeDistanceConstraint("avoid rush by a lot", "AbstractRush", 75.0);
+
+ Float spawnSwitch = rmRandFloat(0,1.2);
+
+ if (cNumberTeams == 2){
+ if (spawnSwitch <=0.6){
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.2, 0.3, 0.2, 0.7, 0, 0);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.8, 0.7, 0.8, 0.3, 0, 0);
+ }else if(spawnSwitch <=1.2){
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.2, 0.3, 0.2, 0.7, 0, 0);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.8, 0.7, 0.8, 0.3, 0, 0);
+ }
+ }else{
+ rmSetPlacementSection(0.16, 0.84);
+ rmPlacePlayersCircular(0.4, 0.4, 0.02);
+ }
+
+ chooseMercs();
+
+ rmSetStatusText("",0.2);
+
+ int continent = rmCreateArea("continent");
+ rmSetAreaSize(continent, 1.0, 1.0);
+ rmSetAreaLocation(continent, 0.5, 0.0);
+ rmSetAreaTerrainType(continent, "andes\ground25_and");
+ rmSetAreaBaseHeight(continent, 0.0);
+ rmSetAreaCoherence(continent, 1.0);
+ rmSetAreaSmoothDistance(continent, 10);
+ rmSetAreaHeightBlend(continent, 1);
+ //rmSetAreaEdgeFilling(continent, 5);
+ rmSetAreaElevationNoiseBias(continent, 0);
+ rmSetAreaElevationEdgeFalloffDist(continent, 10);
+ rmSetAreaElevationVariation(continent, 3);
+ rmSetAreaElevationPersistence(continent, .2);
+ rmSetAreaElevationOctaves(continent, 3);
+ rmSetAreaElevationMinFrequency(continent, 0.04);
+ rmSetAreaElevationType(continent, cElevTurbulence);
+ rmBuildArea(continent);
+
+
+ int island = rmCreateArea("island");
+ rmSetAreaSize(island, 0.1, 0.1);
+ rmSetAreaLocation(island, 0.505, 0.88);
+ rmSetAreaTerrainType(island, "andes\ground25_and");
+ rmSetAreaBaseHeight(island, -3.0);
+ rmSetAreaCoherence(island, 0.95);
+ rmSetAreaElevationEdgeFalloffDist(island, 10);
+ rmAddAreaInfluenceSegment(island, 0.48, 0.88, 0.53, 0.88);
+ rmBuildArea(island);
+
+
+ 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);
+
+ int tradeRouteID = rmCreateTradeRoute();
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.4, 0.01); // -1
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.4, 0.6, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.4, 0.7, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.2, 0.9, 2, 3); // -5
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+
+ vector socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.50);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+//END TR
+
+//TR 2
+
+ rmSetStatusText("",0.3);
+
+ int socket2ID=rmCreateObjectDef("sockets to dock Trade Posts 2");
+ rmAddObjectDefItem(socket2ID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socket2ID, true);
+ rmSetObjectDefMinDistance(socket2ID, 0.0);
+ rmSetObjectDefMaxDistance(socket2ID, 6.0);
+
+ int tradeRoute2ID = rmCreateTradeRoute();
+ rmSetObjectDefTradeRouteID(socket2ID, tradeRoute2ID);
+
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.6, 0.01); // -1
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.6, 0.6, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.6, 0.7, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.8, 0.9, 2, 3); // -5
+
+ rmBuildTradeRoute(tradeRoute2ID, "dirt");
+
+ vector socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.15);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.50);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.85);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+
+// END TR 2
+
+ rmSetStatusText("",0.4);
+
+ int topgold = rmCreateObjectDef("goldrush");
+ rmAddObjectDefItem(topgold, "minegold", 1, 1.0);
+ rmSetObjectDefMinDistance(topgold, 0.0);
+ rmSetObjectDefMaxDistance(topgold, rmXFractionToMeters(0.1));
+ rmAddObjectDefConstraint(topgold, avoidCoin);
+ //rmAddObjectDefConstraint(topgold, avoidNatives);
+ rmAddObjectDefConstraint(topgold, avoidTownCenterMore);
+ rmAddObjectDefConstraint(topgold, avoidSocket);
+ rmAddObjectDefConstraint(topgold, AvoidWaterShort2);
+ rmAddObjectDefConstraint(topgold, forestConstraintShort);
+ rmAddObjectDefConstraint(topgold, circleConstraint);
+ rmAddObjectDefConstraint(topgold, avoidRush);
+ rmPlaceObjectDefAtLoc(topgold, 0, 0.505, 0.88, 15);
+
+ int playerStart = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(playerStart, 7.0);
+ rmSetObjectDefMaxDistance(playerStart, 12.0);
+ rmAddObjectDefConstraint(playerStart, avoidAll);
+
+ int goldID = rmCreateObjectDef("starting gold");
+ rmAddObjectDefItem(goldID, "MineCopper", 1, 8.0);
+ rmSetObjectDefMinDistance(goldID, 15.0);
+ rmSetObjectDefMaxDistance(goldID, 15.0);
+
+ int gold2ID = rmCreateObjectDef("starting gold 2");
+ rmAddObjectDefItem(gold2ID, "mine", 1, 16.0);
+ rmSetObjectDefMinDistance(gold2ID, 15.0);
+ rmSetObjectDefMaxDistance(gold2ID, 15.0);
+ rmAddObjectDefConstraint(gold2ID, avoidCoin);
+
+ int berryID = rmCreateObjectDef("starting berries");
+ rmAddObjectDefItem(berryID, "BerryBush", 2, 6.0);
+ rmSetObjectDefMinDistance(berryID, 8.0);
+ rmSetObjectDefMaxDistance(berryID, 12.0);
+ rmAddObjectDefConstraint(berryID, avoidCoin);
+
+ int treeID = rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(treeID, "TreeSonora", rmRandInt(6,9), 10.0);
+ rmAddObjectDefItem(treeID, "UnderbrushTexas", rmRandInt(8,10), 12.0);
+ rmSetObjectDefMinDistance(treeID, 12.0);
+ rmSetObjectDefMaxDistance(treeID, 18.0);
+ rmAddObjectDefConstraint(treeID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(treeID, avoidCoin);
+
+ int foodID = rmCreateObjectDef("starting hunt");
+ rmAddObjectDefItem(foodID, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID, 10.0);
+ rmSetObjectDefMaxDistance(foodID, 10.0);
+ rmSetObjectDefCreateHerd(foodID, true);
+
+ rmSetStatusText("",0.5);
+
+ int foodID2 = rmCreateObjectDef("starting hunt 2");
+ rmAddObjectDefItem(foodID2, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID2, 40.0);
+ rmSetObjectDefMaxDistance(foodID2, 40.0);
+ rmSetObjectDefCreateHerd(foodID2, true);
+
+ int foodID3 = rmCreateObjectDef("starting hunt 3");
+ rmAddObjectDefItem(foodID3, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID3, 70.0);
+ rmSetObjectDefMaxDistance(foodID3, 70.0);
+ rmSetObjectDefCreateHerd(foodID3, true);
+
+
+ for(i=1;
+
+ ui\random_map\africa\australia\australia_ss_01
+ ui\random_map\africa\australia\australia_ss_02
+ ui\random_map\africa\australia\australia_ss_03
+
\ No newline at end of file
diff --git a/RMM/australiaregicide.xs b/RMM/australiaregicide.xs
new file mode 100644
index 0000000..a07924a
--- /dev/null
+++ b/RMM/australiaregicide.xs
@@ -0,0 +1,486 @@
+ /* Durokan's gold rush - Jan 18 2016 1.1 --Finished and released 2v2*/
+ include "mercenaries.xs";
+ include "ypAsianInclude.xs";
+ include "ypKOTHInclude.xs";
+
+ void main(void) {
+
+ rmSetStatusText("",0.1);
+
+ float playerTiles=15000;
+ if (cNumberNonGaiaPlayers>4)
+ playerTiles = 13000;
+ if (cNumberNonGaiaPlayers>6)
+ playerTiles = 11000;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmSetMapSize(size, size);
+ rmSetMapType("land");
+ rmSetMapType("grass");
+ rmSetMapType("bayou");
+ rmTerrainInitialize("grass");
+ rmSetLightingSet("texas");
+
+ rmDefineClass("classForest");
+
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.49), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
+ int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+ int avoidHunt=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 50.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+ int avoidCoinMed=rmCreateTypeDistanceConstraint("avoid coin medium", "Mine", 60.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 6.0);
+ int AvoidWaterShort2 = rmCreateTerrainDistanceConstraint("avoid water short 2", "Land", false, 5.0);
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 6);
+ int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 5.0);
+ int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+ int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+ int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+ int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 18.0);
+ int avoidTownCenterMore=rmCreateTypeDistanceConstraint("avoid Town Center more", "townCenter", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+ int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
+ int circleConstraint2=rmCreatePieConstraint("circle Constraint2", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int classPatch = rmDefineClass("patch");
+ int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 4.0);
+
+ int avoidRush=rmCreateTypeDistanceConstraint("avoid rush by a lot", "AbstractRush", 75.0);
+
+ Float spawnSwitch = rmRandFloat(0,1.2);
+
+ if (cNumberTeams == 2){
+ if (spawnSwitch <=0.6){
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.2, 0.3, 0.2, 0.7, 0, 0);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.8, 0.7, 0.8, 0.3, 0, 0);
+ }else if(spawnSwitch <=1.2){
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.2, 0.3, 0.2, 0.7, 0, 0);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.8, 0.7, 0.8, 0.3, 0, 0);
+ }
+ }else{
+ rmSetPlacementSection(0.16, 0.84);
+ rmPlacePlayersCircular(0.38, 0.38, 0.02);
+ }
+
+ chooseMercs();
+
+ rmSetStatusText("",0.2);
+
+ int continent = rmCreateArea("continent");
+ rmSetAreaSize(continent, 1.0, 1.0);
+ rmSetAreaLocation(continent, 0.5, 0.0);
+ rmSetAreaTerrainType(continent, "andes\ground25_and");
+ rmSetAreaBaseHeight(continent, 0.0);
+ rmSetAreaCoherence(continent, 1.0);
+ rmSetAreaSmoothDistance(continent, 10);
+ rmSetAreaHeightBlend(continent, 1);
+ //rmSetAreaEdgeFilling(continent, 5);
+ rmSetAreaElevationNoiseBias(continent, 0);
+ rmSetAreaElevationEdgeFalloffDist(continent, 10);
+ rmSetAreaElevationVariation(continent, 3);
+ rmSetAreaElevationPersistence(continent, .2);
+ rmSetAreaElevationOctaves(continent, 3);
+ rmSetAreaElevationMinFrequency(continent, 0.04);
+ rmSetAreaElevationType(continent, cElevTurbulence);
+ rmBuildArea(continent);
+
+
+ int island = rmCreateArea("island");
+ rmSetAreaSize(island, 0.1, 0.1);
+ rmSetAreaLocation(island, 0.505, 0.88);
+ rmSetAreaTerrainType(island, "andes\ground25_and");
+ rmSetAreaBaseHeight(island, -3.0);
+ rmSetAreaCoherence(island, 0.95);
+ rmSetAreaElevationEdgeFalloffDist(island, 10);
+ rmAddAreaInfluenceSegment(island, 0.48, 0.88, 0.53, 0.88);
+ rmBuildArea(island);
+
+
+ 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);
+
+ int tradeRouteID = rmCreateTradeRoute();
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.49, 0.01); // -1
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.4, 0.6, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.4, 0.7, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.2, 0.9, 2, 3); // -5
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+
+ vector socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.20);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.50);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.85);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+
+//END TR
+
+//TR 2
+
+ rmSetStatusText("",0.3);
+
+ int socket2ID=rmCreateObjectDef("sockets to dock Trade Posts 2");
+ rmAddObjectDefItem(socket2ID, "SocketTradeRoute", 1, 0.0);
+ rmSetObjectDefAllowOverlap(socket2ID, true);
+ rmSetObjectDefMinDistance(socket2ID, 0.0);
+ rmSetObjectDefMaxDistance(socket2ID, 6.0);
+
+ int tradeRoute2ID = rmCreateTradeRoute();
+ rmSetObjectDefTradeRouteID(socket2ID, tradeRoute2ID);
+
+ rmAddTradeRouteWaypoint(tradeRoute2ID, 0.52, 0.01); // -1
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.6, 0.6, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.6, 0.7, 2, 3); // -2
+ rmAddRandomTradeRouteWaypoints(tradeRoute2ID, 0.8, 0.9, 2, 3); // -5
+
+ rmBuildTradeRoute(tradeRoute2ID, "dirt");
+
+ vector socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.20);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.50);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+ socketLoc2 = rmGetTradeRouteWayPoint(tradeRoute2ID, 0.85);
+ rmPlaceObjectDefAtPoint(socket2ID, 0, socketLoc2);
+
+
+// END TR 2
+
+ rmSetStatusText("",0.4);
+
+ int topgold = rmCreateObjectDef("goldrush");
+ rmAddObjectDefItem(topgold, "minegold", 1, 1.0);
+ rmSetObjectDefMinDistance(topgold, 0.0);
+ rmSetObjectDefMaxDistance(topgold, rmXFractionToMeters(0.1));
+ rmAddObjectDefConstraint(topgold, avoidCoin);
+ //rmAddObjectDefConstraint(topgold, avoidNatives);
+ rmAddObjectDefConstraint(topgold, avoidTownCenterMore);
+ rmAddObjectDefConstraint(topgold, avoidSocket);
+ rmAddObjectDefConstraint(topgold, AvoidWaterShort2);
+ rmAddObjectDefConstraint(topgold, forestConstraintShort);
+ rmAddObjectDefConstraint(topgold, circleConstraint);
+ rmAddObjectDefConstraint(topgold, avoidRush);
+ rmPlaceObjectDefAtLoc(topgold, 0, 0.505, 0.88, 12);
+
+ int playerStart = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(playerStart, 7.0);
+ rmSetObjectDefMaxDistance(playerStart, 12.0);
+ rmAddObjectDefConstraint(playerStart, avoidAll);
+
+ int goldID = rmCreateObjectDef("starting gold");
+ rmAddObjectDefItem(goldID, "MineCopper", 1, 8.0);
+ rmSetObjectDefMinDistance(goldID, 15.0);
+ rmSetObjectDefMaxDistance(goldID, 15.0);
+
+ int gold2ID = rmCreateObjectDef("starting gold 2");
+ rmAddObjectDefItem(gold2ID, "mine", 1, 16.0);
+ rmSetObjectDefMinDistance(gold2ID, 15.0);
+ rmSetObjectDefMaxDistance(gold2ID, 15.0);
+ rmAddObjectDefConstraint(gold2ID, avoidCoin);
+
+ int berryID = rmCreateObjectDef("starting berries");
+ rmAddObjectDefItem(berryID, "BerryBush", 2, 6.0);
+ rmSetObjectDefMinDistance(berryID, 8.0);
+ rmSetObjectDefMaxDistance(berryID, 12.0);
+ rmAddObjectDefConstraint(berryID, avoidCoin);
+
+ int treeID = rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(treeID, "TreeSonora", rmRandInt(6,9), 10.0);
+ rmAddObjectDefItem(treeID, "UnderbrushTexas", rmRandInt(8,10), 12.0);
+ rmSetObjectDefMinDistance(treeID, 12.0);
+ rmSetObjectDefMaxDistance(treeID, 18.0);
+ rmAddObjectDefConstraint(treeID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(treeID, avoidCoin);
+
+ int foodID = rmCreateObjectDef("starting hunt");
+ rmAddObjectDefItem(foodID, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID, 10.0);
+ rmSetObjectDefMaxDistance(foodID, 10.0);
+ rmSetObjectDefCreateHerd(foodID, true);
+
+ rmSetStatusText("",0.5);
+
+ int foodID2 = rmCreateObjectDef("starting hunt 2");
+ rmAddObjectDefItem(foodID2, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID2, 40.0);
+ rmSetObjectDefMaxDistance(foodID2, 40.0);
+ rmSetObjectDefCreateHerd(foodID2, true);
+
+ int foodID3 = rmCreateObjectDef("starting hunt 3");
+ rmAddObjectDefItem(foodID3, "Capybara", 5, 8.0);
+ rmSetObjectDefMinDistance(foodID3, 70.0);
+ rmSetObjectDefMaxDistance(foodID3, 70.0);
+ rmSetObjectDefCreateHerd(foodID3, true);
+
+
+// regicide objects
+ int playerCastle = rmCreateObjectDef("Castle");
+ rmAddObjectDefItem(playerCastle, "ypCastleRegicide", 1, 0.0);
+ rmAddObjectDefConstraint(playerCastle, avoidAll);
+ rmAddObjectDefConstraint(playerCastle, avoidImpassableLand);
+ rmSetObjectDefMinDistance(playerCastle, 17.0);
+ rmSetObjectDefMaxDistance(playerCastle, 22.0);
+
+ int playerWalls = rmCreateGrouping("regicide walls", "regicide_walls");
+ rmAddGroupingToClass(playerWalls, rmClassID("importantItem"));
+ rmSetGroupingMinDistance(playerWalls, 0.0);
+ rmSetGroupingMaxDistance(playerWalls, 2.0);
+
+ int playerDaimyo = rmCreateObjectDef("Daimyo");
+ rmAddObjectDefItem(playerDaimyo, "ypDaimyoRegicide", 1, 0.0);
+ rmAddObjectDefConstraint(playerDaimyo, avoidAll);
+ rmSetObjectDefMinDistance(playerDaimyo, 7.0);
+ rmSetObjectDefMaxDistance(playerDaimyo, 10.0);
+
+ for(i=1; = 0)
- rmSetSubCiv(0, "Seminoles");
-
- subCiv1=rmGetCivID("Cherokee");
- rmEchoInfo("subCiv1 is Cherokee "+subCiv1);
- if (subCiv1 >= 0)
- rmSetSubCiv(1, "Cherokee");
-
- subCiv2=rmGetCivID("Cherokee");
- rmEchoInfo("subCiv2 is Cherokee "+subCiv2);
- if (subCiv2 >= 0)
- rmSetSubCiv(2, "Cherokee");
-
- subCiv3=rmGetCivID("Seminoles");
- rmEchoInfo("subCiv3 is Seminoles "+subCiv3);
- if (subCiv3 >= 0)
- rmSetSubCiv(3, "Seminoles");
-
- if (rmRandFloat(0,1) < 0.5)
- {
- subCiv4=rmGetCivID("Seminoles");
- rmEchoInfo("subCiv4 is Seminoles "+subCiv4);
- if (subCiv4 >= 0)
- rmSetSubCiv(4, "Seminoles");
- }
- }
-
- // Picks the map size
- int playerTiles=14400;
- int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
- rmEchoInfo("Map size="+size+"m x "+size+"m");
- rmSetMapSize(size, size);
-
- // Picks a default water height
- rmSetSeaLevel(1.0);
-
- // Picks default terrain and water
-
-// rmSetMapElevationParameters(long type, float minFrequency, long numberOctaves, float persistence, float heightVariation)
-// rmSetMapElevationParameters(cElevTurbulence, 0.1, 4, 0.3, 2.0);
- rmSetSeaType("new england coast");
- rmEnableLocalWater(false);
- rmSetBaseTerrainMix("carolina_marsh");
- rmTerrainInitialize("water");
- rmSetMapType("bayou");
- rmSetMapType("water");
-// rmSetMapType("grass");
- rmSetWorldCircleConstraint(true);
-
- // Choose mercs.
- chooseMercs();
-
- // Define some classes. These are used later for constraints.
- int classPlayer=rmDefineClass("player");
- rmDefineClass("classCliff");
- rmDefineClass("classPatch");
- int classbigContinent=rmDefineClass("big continent");
- rmDefineClass("classForest");
- rmDefineClass("importantItem");
- rmDefineClass("secrets");
- int classBay=rmDefineClass("bay");
-
- int classIsland=rmDefineClass("island");
- int classBonusIsland=rmDefineClass("bonus island");
- int classSideIsland=rmDefineClass("side island");
- rmDefineClass("corner");
-
-
-
- // -------------Define constraints
- // These are used to have objects and areas avoid each other
-
- // Map edge constraints
- int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(20), rmZTilesToFraction(20), 1.0-rmXTilesToFraction(20), 1.0-rmZTilesToFraction(20), 0.01);
- int longPlayerConstraint=rmCreateClassDistanceConstraint("continent stays away from players", classPlayer, 40.0);
-
- // Player constraints
- int islandConstraint=rmCreateClassDistanceConstraint("stay away from islands", classIsland, 20.0);
- int playerConstraint=rmCreateClassDistanceConstraint("bonus Settlement stay away from players", classPlayer, 10);
- int bonusIslandConstraint=rmCreateClassDistanceConstraint("avoid bonus island", classBonusIsland, 10.0);
- int longBonusIslandConstraint=rmCreateClassDistanceConstraint("long avoid bonus island", classBonusIsland, 30.0);
- int longSideIslandConstraint=rmCreateClassDistanceConstraint("long avoid side island", classSideIsland, 30.0);
- int cornerConstraint=rmCreateClassDistanceConstraint("stay away from corner", rmClassID("corner"), 15.0);
- int cornerOverlapConstraint=rmCreateClassDistanceConstraint("don't overlap corner", rmClassID("corner"), 2.0);
- int bayConstraint=rmCreateClassDistanceConstraint("avoid bay", classBay, 3);
-
- int smallMapPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 70.0);
- int flagConstraint=rmCreateHCGPConstraint("flags avoid same", 30.0);
- int nearWater10 = rmCreateTerrainDistanceConstraint("near water", "Water", true, 10.0);
- int avoidBoats=rmCreateTypeDistanceConstraint("avoid boats", "caravel", 30.0);
-
- // Bonus area constraint.
- int bigContinentConstraint=rmCreateClassDistanceConstraint("avoid big island", classbigContinent, 20.0);
-
- // Resource avoidance
- int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
- int avoidStartResource=rmCreateTypeDistanceConstraint("start resource no overlap", "resource", 1.0);
- int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "gold", 50.0);
- int farAvoidCoin=rmCreateTypeDistanceConstraint("silver avoid coin", "gold", 70.0);
- int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "nugget", 50.0);
- int avoidDeer=rmCreateTypeDistanceConstraint("food avoids food", "deer", 70.0);
- int avoidTurkey=rmCreateTypeDistanceConstraint("avoid turkeys", "turkey", 50.0);
- int avoidCotton=rmCreateTypeDistanceConstraint("avoid cotton", "cotton", 50.0);
- int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "fish", 18.0);
- int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
-
- // Avoid impassable land
- int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 10.0);
- int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 1.0);
- int avoidCliffs=rmCreateClassDistanceConstraint("cliff vs. cliff", rmClassID("classCliff"), 30.0);
- int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);
-
- // Decoration avoidance
- int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
-
- // VP avoidance
- int avoidImportantItem = rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 80.0);
-
- // Constraint to avoid water.
- int avoidWater8 = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 8.0);
-
-
- // Text
- rmSetStatusText("",0.10);
-
-
- // Create center section
- int centerIslandID=rmCreateArea("Center Island area");
- rmSetAreaSize(centerIslandID, 0.06, 0.10);
- rmSetAreaLocation(centerIslandID, 0.5, 0.5);
- rmSetAreaMix(centerIslandID, "carolina_marsh");
- rmSetAreaBaseHeight(centerIslandID, 4.0); // Was 10
- rmSetAreaMinBlobs(centerIslandID, 8);
- rmSetAreaMaxBlobs(centerIslandID, 10);
- rmSetAreaMinBlobDistance(centerIslandID, 10);
- rmSetAreaMaxBlobDistance(centerIslandID, 20);
- rmSetAreaSmoothDistance(centerIslandID, 50);
- rmSetAreaCoherence(centerIslandID, 0.50);
- rmAddAreaToClass(centerIslandID, rmClassID("bay"));
- rmSetAreaObeyWorldCircleConstraint(centerIslandID, false);
- rmBuildArea(centerIslandID);
-
-// ********************************** Island fingers *******************************
-
- int bonusIsland1ID=rmCreateArea("bonus island 1");
- rmSetAreaSize(bonusIsland1ID, 0.04, 0.04);
- rmSetAreaLocation(bonusIsland1ID, 0.23, 0.5);
- rmSetAreaMix(bonusIsland1ID, "carolina_marsh");
- rmSetAreaWarnFailure(bonusIsland1ID, false);
- // if(rmRandFloat(0.0, 1.0)<0.70)
- rmAddAreaConstraint(bonusIsland1ID, bonusIslandConstraint);
- rmAddAreaToClass(bonusIsland1ID, classIsland);
- rmAddAreaToClass(bonusIsland1ID, classBonusIsland);
- //rmAddAreaConstraint(bonusIsland1ID, bayConstraint);
- //rmAddAreaConstraint(bonusIsland1ID, playerEdgeConstraint);
- rmSetAreaCoherence(bonusIsland1ID, 0.25);
- rmSetAreaSmoothDistance(bonusIsland1ID, 12);
- rmSetAreaElevationType(bonusIsland1ID, cElevTurbulence);
- rmSetAreaElevationVariation(bonusIsland1ID, 2.0);
- rmSetAreaBaseHeight(bonusIsland1ID, 4.0);
- rmSetAreaElevationMinFrequency(bonusIsland1ID, 0.09);
- rmSetAreaElevationOctaves(bonusIsland1ID, 3);
- rmSetAreaElevationPersistence(bonusIsland1ID, 0.2);
-
-int bonusIsland2ID=rmCreateArea("bonus island 2");
- rmSetAreaSize(bonusIsland2ID, 0.04, 0.04);
- rmSetAreaLocation(bonusIsland2ID, 0.4, 0.30);
- rmSetAreaMix(bonusIsland2ID, "carolina_marsh");
- rmSetAreaWarnFailure(bonusIsland2ID, false);
- // if(rmRandFloat(0.0, 1.0)<0.70)
- rmAddAreaConstraint(bonusIsland2ID, bonusIslandConstraint);
- rmAddAreaToClass(bonusIsland2ID, classIsland);
- rmAddAreaToClass(bonusIsland2ID, classBonusIsland);
- // rmAddAreaConstraint(bonusIsland2ID, bayConstraint);
- // rmAddAreaConstraint(bonusIsland2ID, playerEdgeConstraint);
- rmSetAreaCoherence(bonusIsland2ID, 0.25);
- rmSetAreaSmoothDistance(bonusIsland2ID, 12);
- rmSetAreaElevationType(bonusIsland2ID, cElevTurbulence);
- rmSetAreaElevationVariation(bonusIsland2ID, 2.0);
- rmSetAreaBaseHeight(bonusIsland2ID, 4.0);
- rmSetAreaElevationMinFrequency(bonusIsland2ID, 0.09);
- rmSetAreaElevationOctaves(bonusIsland2ID, 3);
- rmSetAreaElevationPersistence(bonusIsland2ID, 0.2);
-
- int bonusIsland3ID=rmCreateArea("bonus island 3");
- rmSetAreaSize(bonusIsland3ID, 0.025, 0.04);
- rmSetAreaLocation(bonusIsland3ID, 0.4, 0.75);
- rmSetAreaMix(bonusIsland3ID, "carolina_marsh");
- rmSetAreaWarnFailure(bonusIsland3ID, false);
- // if(rmRandFloat(0.0, 1.0)<0.70)
- rmAddAreaConstraint(bonusIsland3ID, bonusIslandConstraint);
- rmAddAreaToClass(bonusIsland3ID, classIsland);
- rmAddAreaToClass(bonusIsland3ID, classBonusIsland);
- //rmAddAreaConstraint(bonusIsland3ID, bayConstraint);
- //rmAddAreaConstraint(bonusIsland3ID, playerEdgeConstraint);
- rmSetAreaCoherence(bonusIsland3ID, 0.25);
- rmSetAreaSmoothDistance(bonusIsland3ID, 12);
- rmSetAreaElevationType(bonusIsland3ID, cElevTurbulence);
- rmSetAreaElevationVariation(bonusIsland3ID, 2.0);
- rmSetAreaBaseHeight(bonusIsland3ID, 4.0);
- rmSetAreaElevationMinFrequency(bonusIsland3ID, 0.09);
- rmSetAreaElevationOctaves(bonusIsland3ID, 3);
- rmSetAreaElevationPersistence(bonusIsland3ID, 0.2);
-
-
- rmSetStatusText("",0.20);
-
-
- int bonusIsland4ID=rmCreateArea("bonus island 4");
- rmSetAreaSize(bonusIsland4ID, 0.04, 0.04);
- rmSetAreaLocation(bonusIsland4ID, 0.75, 0.5);
- rmSetAreaMix(bonusIsland4ID, "carolina_marsh");
- rmSetAreaWarnFailure(bonusIsland4ID, false);
- // if(rmRandFloat(0.0, 1.0)<0.70)
- rmAddAreaConstraint(bonusIsland4ID, bonusIslandConstraint);
- rmAddAreaToClass(bonusIsland4ID, classIsland);
- rmAddAreaToClass(bonusIsland4ID, classBonusIsland);
- // rmAddAreaConstraint(bonusIsland4ID, bayConstraint);
- // rmAddAreaConstraint(bonusIsland4ID, playerEdgeConstraint);
- rmSetAreaCoherence(bonusIsland4ID, 0.25);
- rmSetAreaSmoothDistance(bonusIsland4ID, 12);
- rmSetAreaElevationType(bonusIsland4ID, cElevTurbulence);
- rmSetAreaElevationVariation(bonusIsland4ID, 2.0);
- rmSetAreaBaseHeight(bonusIsland4ID, 4.0);
- rmSetAreaElevationMinFrequency(bonusIsland4ID, 0.09);
- rmSetAreaElevationOctaves(bonusIsland4ID, 3);
- rmSetAreaElevationPersistence(bonusIsland4ID, 0.2);
-
- int bonusIsland5ID=rmCreateArea("bonus island 5");
- rmSetAreaSize(bonusIsland5ID, 0.02, 0.04);
- rmSetAreaLocation(bonusIsland5ID, 0.65, 0.25);
- rmSetAreaMix(bonusIsland5ID, "carolina_marsh");
- rmSetAreaWarnFailure(bonusIsland5ID, false);
- // if(rmRandFloat(0.0, 1.0)<0.70)
- rmAddAreaConstraint(bonusIsland5ID, bonusIslandConstraint);
- rmAddAreaToClass(bonusIsland5ID, classIsland);
- rmAddAreaToClass(bonusIsland5ID, classBonusIsland);
- // rmAddAreaConstraint(bonusIsland5ID, bayConstraint);
- // rmAddAreaConstraint(bonusIsland5ID, playerEdgeConstraint);
- rmSetAreaCoherence(bonusIsland5ID, 0.25);
- rmSetAreaSmoothDistance(bonusIsland5ID, 12);
- rmSetAreaElevationType(bonusIsland5ID, cElevTurbulence);
- rmSetAreaElevationVariation(bonusIsland5ID, 2.0);
- rmSetAreaBaseHeight(bonusIsland5ID, 4.0);
- rmSetAreaElevationMinFrequency(bonusIsland5ID, 0.09);
- rmSetAreaElevationOctaves(bonusIsland5ID, 3);
- rmSetAreaElevationPersistence(bonusIsland5ID, 0.2);
-
- int bonusIsland6ID=rmCreateArea("bonus island 6");
- rmSetAreaSize(bonusIsland6ID, 0.04, 0.04);
- rmSetAreaLocation(bonusIsland6ID, 0.65, 0.70);
- rmSetAreaMix(bonusIsland6ID, "carolina_marsh");
- rmSetAreaWarnFailure(bonusIsland6ID, false);
- // if(rmRandFloat(0.0, 1.0)<0.70)
- rmAddAreaConstraint(bonusIsland6ID, bonusIslandConstraint);
- rmAddAreaToClass(bonusIsland6ID, classIsland);
- rmAddAreaToClass(bonusIsland6ID, classBonusIsland);
- //rmAddAreaConstraint(bonusIsland6ID, bayConstraint);
- //rmAddAreaConstraint(bonusIsland6ID, playerEdgeConstraint);
- rmSetAreaCoherence(bonusIsland6ID, 0.25);
- rmSetAreaSmoothDistance(bonusIsland6ID, 12);
- rmSetAreaElevationType(bonusIsland6ID, cElevTurbulence);
- rmSetAreaElevationVariation(bonusIsland6ID, 2.0);
- rmSetAreaBaseHeight(bonusIsland6ID, 4.0);
- rmSetAreaElevationMinFrequency(bonusIsland6ID, 0.09);
- rmSetAreaElevationOctaves(bonusIsland6ID, 3);
- rmSetAreaElevationPersistence(bonusIsland6ID, 0.2);
-
- rmBuildAllAreas();
-
-int smallPondID=rmCreateArea("small pond");
- rmSetAreaSize(smallPondID, 0.01, 0.01);
- rmSetAreaWaterType(smallPondID, "great plains pond");
- rmSetAreaBaseHeight(smallPondID, 4);
- rmSetAreaMinBlobs(smallPondID, 4);
- rmSetAreaMaxBlobs(smallPondID, 6);
- rmSetAreaMinBlobDistance(smallPondID, 5.0);
- rmSetAreaMaxBlobDistance(smallPondID, 30.0);
- rmSetAreaCoherence(smallPondID, 0.3);
- rmSetAreaSmoothDistance(smallPondID, 5);
- rmSetAreaLocation(smallPondID, 0.5, 0.5);
- rmBuildArea(smallPondID);
-
-
-// text
-rmSetStatusText("",0.30);
-
- // rmBuildConnection(shallowsID);
-
-
- // Add Natives
-
- float nativeLoc = rmRandFloat(0,1);
-
- if (subCiv0 == rmGetCivID("Seminoles"))
- {
- int SeminolesVillageID = -1;
- int SeminolesVillageType = rmRandInt(1,10);
- SeminolesVillageID = rmCreateGrouping("Seminole village", "native seminole village "+SeminolesVillageType);
- rmSetGroupingMinDistance(SeminolesVillageID, 0.0);
- rmSetGroupingMaxDistance(SeminolesVillageID, rmXFractionToMeters(0.05));
- rmAddGroupingConstraint(SeminolesVillageID, avoidImpassableLand);
- rmAddGroupingConstraint(SeminolesVillageID, avoidImportantItem);
- rmAddGroupingToClass(SeminolesVillageID, rmClassID("importantItem"));
- if (nativeLoc < 0.5)
- rmPlaceGroupingAtLoc(SeminolesVillageID, 0, 0.75, 0.5);
- else
- rmPlaceGroupingAtLoc(SeminolesVillageID, 0, 0.4, 0.3);
- }
-
- if (subCiv1 == rmGetCivID("Cherokee"))
- {
- int CherokeeVillageID = -1;
- int CherokeeVillageType = rmRandInt(1,10);
- CherokeeVillageID = rmCreateGrouping("Cherokee village", "native Cherokee village "+CherokeeVillageType);
- rmSetGroupingMinDistance(CherokeeVillageID, 0.0);
- rmSetGroupingMaxDistance(CherokeeVillageID, rmXFractionToMeters(0.05));
- rmAddGroupingConstraint(CherokeeVillageID, avoidImpassableLand);
- rmAddGroupingConstraint(CherokeeVillageID, avoidImportantItem);
- rmAddGroupingToClass(CherokeeVillageID, rmClassID("importantItem"));
- if (nativeLoc < 0.5)
- rmPlaceGroupingAtLoc(CherokeeVillageID, 0, 0.4, 0.75);
- else
- rmPlaceGroupingAtLoc(CherokeeVillageID, 0, 0.4, 0.75);
- }
-
- if (subCiv2 == rmGetCivID("Cherokee"))
- {
- int Cherokee2VillageID = -1;
- int Cherokee2VillageType = rmRandInt(1,10);
- Cherokee2VillageID = rmCreateGrouping("Cherokee2 village", "native cherokee village "+Cherokee2VillageType);
- rmSetGroupingMinDistance(Cherokee2VillageID, 0.0);
- rmSetGroupingMaxDistance(Cherokee2VillageID, rmXFractionToMeters(0.05));
- rmAddGroupingConstraint(Cherokee2VillageID, avoidImpassableLand);
- rmAddGroupingConstraint(Cherokee2VillageID, avoidImportantItem);
- rmAddGroupingToClass(Cherokee2VillageID, rmClassID("importantItem"));
- if (nativeLoc < 0.5)
- rmPlaceGroupingAtLoc(Cherokee2VillageID, 0, 0.23, 0.5);
- else
- rmPlaceGroupingAtLoc(Cherokee2VillageID, 0, 0.65, 0.7);
- }
-
- if (subCiv3 == rmGetCivID("Seminoles"))
- {
- int Seminoles2VillageID = -1;
- int Seminoles2VillageType = rmRandInt(1,10);
- Seminoles2VillageID = rmCreateGrouping("Seminole2 village", "native seminole village "+Seminoles2VillageType);
- rmSetGroupingMinDistance(Seminoles2VillageID, 0.0);
- rmSetGroupingMaxDistance(Seminoles2VillageID, rmXFractionToMeters(0.05));
- rmAddGroupingConstraint(Seminoles2VillageID, avoidImpassableLand);
- rmAddGroupingConstraint(Seminoles2VillageID, avoidImportantItem);
- rmAddGroupingToClass(Seminoles2VillageID, rmClassID("importantItem"));
- if (nativeLoc < 0.5)
- rmPlaceGroupingAtLoc(Seminoles2VillageID, 0, 0.65, 0.25);
- else
- rmPlaceGroupingAtLoc(Seminoles2VillageID, 0, 0.65, 0.25);
- }
-
- if (subCiv4 == rmGetCivID("Seminoles"))
- {
- int Seminoles3VillageID = -1;
- int Seminoles3VillageType = rmRandInt(1,10);
- Seminoles3VillageID = rmCreateGrouping("Seminole3 village", "native seminole village "+Seminoles3VillageType);
- rmSetGroupingMinDistance(Seminoles3VillageID, 0.0);
- rmSetGroupingMaxDistance(Seminoles3VillageID, rmXFractionToMeters(0.05));
- rmAddGroupingConstraint(Seminoles3VillageID, avoidImpassableLand);
- rmAddGroupingConstraint(Seminoles3VillageID, avoidImportantItem);
- rmAddGroupingToClass(Seminoles3VillageID, rmClassID("importantItem"));
- if (nativeLoc < 0.5)
- rmPlaceGroupingAtLoc(Seminoles3VillageID, 0, 0.5, 0.5);
- else
- rmPlaceGroupingAtLoc(Seminoles3VillageID, 0, 0.5, 0.5);
- }
-
- // Set up player starting locations. These are just used to place Caravels away from each other.
-
-// rmSetPlacementSection(0.9, 0.3);
-// rmSetPlayerPlacementArea(0, 0, 0.35, 0.35);
-// rmSetTeamSpacingModifier(0.50);
- rmPlacePlayersCircular(0.48, 0.48, 0);
-
-
- // Set up player areas.
- float playerFraction=rmAreaTilesToFraction(1000);
- for(i=1;
-
+
@@ -23,6 +23,6 @@
-
+
diff --git a/RMM/great lakes.xs b/RMM/great lakes.xs
index 1ee3472..903c006 100644
--- a/RMM/great lakes.xs
+++ b/RMM/great lakes.xs
@@ -364,16 +364,6 @@ if (seasonPicker < 0.5)
//mineType = rmRandInt(1,10);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
@@ -537,8 +527,9 @@ if (seasonPicker < 0.5)
//rmPlaceObjectDefPerPlayer(startingTCID, true);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 10.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
int StartAreaTreeID=rmCreateObjectDef("starting trees");
diff --git a/RMM/great lakesbck.xs b/RMM/great lakesbck.xs
deleted file mode 100644
index 25d5bc8..0000000
--- a/RMM/great lakesbck.xs
+++ /dev/null
@@ -1,1128 +0,0 @@
-// GREAT LAKES
-// March 2004 - JG
-// 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);
-
- //Chooses which natives appear on the map
- int subCiv0=-1;
- int subCiv1=-1;
- int subCiv2=-1;
- int subCiv3=-1;
-
- if (rmAllocateSubCivs(4) == true)
- {
- // Always "Big" Comanche
- subCiv0=rmGetCivID("Comanche");
- if (subCiv0 >= 0)
- rmSetSubCiv(0, "Comanche", true);
-
-
- // Usually Lakota, sometimes Iroquois
-
- subCiv1=rmGetCivID("Iroquois");
- if (subCiv1 >= 0)
- rmSetSubCiv(1, "Iroquois");
-
-
- subCiv2=rmGetCivID("Lakota");
- if (subCiv2 >= 0)
- rmSetSubCiv(2, "Lakota");
-
-
-
-
- // Usually Aztec, sometimes Maya
- if(rmRandFloat(0,1) < 0.35)
- {
- subCiv3=rmGetCivID("Cherokee");
- if (subCiv3 >= 0)
- rmSetSubCiv(3, "Cherokee");
-
- }
- else
- {
- subCiv3=rmGetCivID("Cherokee");
- if (subCiv3 >= 0)
- rmSetSubCiv(3, "Cherokee");
- }
- }
-
- // Chooses which Mercenaries appear on the map
- if (rmRandFloat(0,1) < 0.4)
- rmAddMerc("MercSwissPikeman", rmRandInt(4,8)*cNumberNonGaiaPlayers);
- else
- {
- if (rmRandFloat(0,1) < 0.75)
- rmAddMerc("MercLandsknecht", rmRandInt(4,8)*cNumberNonGaiaPlayers);
- else
- rmAddMerc("MercRonin", rmRandInt(4,8)*cNumberNonGaiaPlayers);
- }
-
- if (rmRandFloat(0,1) < 0.5)
- rmAddMerc("MercHighlander", rmRandInt(3,5)*cNumberNonGaiaPlayers);
- else
- rmAddMerc("MercJaeger", rmRandInt(3,5)*cNumberNonGaiaPlayers);
-
- if (rmRandFloat(0,1) < 0.4)
- rmAddMerc("MercStradiot", rmRandInt(3,5)*cNumberNonGaiaPlayers);
- else
- { if (rmRandFloat(0,1) < 0.5)
- rmAddMerc("MercMameluke", rmRandInt(3,5)*cNumberNonGaiaPlayers);
- else
- rmAddMerc("MercHackapell", rmRandInt(3,5)*cNumberNonGaiaPlayers);
- }
-
- if (rmRandFloat(0,1) < 0.5)
- {
- if (rmRandFloat(0,1) < 0.5)
- rmAddMerc("MercBlackRider", rmRandInt(3,5)*cNumberNonGaiaPlayers);
- else
- rmAddMerc("MercManchu", rmRandInt(3,5)*cNumberNonGaiaPlayers);
- }
-
- // Picks the map size
- int playerTiles=14000; // DAL modified from 16K
- if(cMapSize == 1)
- {
- playerTiles = 16000; // DAL modified from 18K
- rmEchoInfo("Large map");
- }
- int size=2.5*sqrt(cNumberNonGaiaPlayers*playerTiles);
- rmEchoInfo("Map size="+size+"m x "+size+"m");
- rmSetMapSize(size, size);
-
- // rmSetMapElevationParameters(cElevTurbulence, 0.4, 6, 0.5, 3.0); // DAL - original
- rmSetMapElevationParameters(cElevTurbulence, 0.4, 6, 0.7, 5.0);
- rmSetMapElevationHeightBlend(1);
-
- // Picks a default water height
- rmSetSeaLevel(8.0);
-
- // Picks default terrain and water
- rmSetSeaType("new england coast");
- rmEnableLocalWater(false);
- rmTerrainInitialize("saguenay\ground5_sag", 5.0);
- rmSetMapType("greatlakes");
- rmSetMapType("grass");
- rmSetMapType("water");
-
- // Corner constraint.
- rmSetWorldCircleConstraint(true);
-
- // Define some classes. These are used later for constraints.
- int classPlayer=rmDefineClass("player");
- rmDefineClass("classHill");
- rmDefineClass("classPatch");
- rmDefineClass("starting settlement");
- rmDefineClass("startingUnit");
- rmDefineClass("classForest");
- rmDefineClass("importantItem");
- rmDefineClass("natives");
- rmDefineClass("classCliff");
- rmDefineClass("secrets");
- rmDefineClass("nuggets");
- rmDefineClass("center");
- rmDefineClass("tradeIslands");
- int classGreatLake=rmDefineClass("great lake");
-
- // -------------Define constraints
- // These are used to have objects and areas avoid each other
-
- // Map edge constraints
- int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(10), rmZTilesToFraction(10), 1.0-rmXTilesToFraction(10), 1.0-rmZTilesToFraction(10), 0.01);
- int bisonEdgeConstraint=rmCreateBoxConstraint("bison edge of map", rmXTilesToFraction(20), rmZTilesToFraction(20), 1.0-rmXTilesToFraction(20), 1.0-rmZTilesToFraction(20), 0.01);
- int longPlayerConstraint=rmCreateClassDistanceConstraint("land stays away from players", classPlayer, 70.0); //DAL - was 24
- // int goldCenterConstraint=rmCreateBoxConstraint("gold keeps away from middle", 0.2, 0.2, 0.8, 0.8, 0.01);
- int centerConstraint=rmCreateClassDistanceConstraint("stay away from center", rmClassID("center"), 30.0);
- int centerConstraintFar=rmCreateClassDistanceConstraint("stay away from center far", rmClassID("center"), 60.0);
-
-
- // Cardinal Directions
- int Northward=rmCreatePieConstraint("northMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(315), rmDegreesToRadians(135));
- int Southward=rmCreatePieConstraint("southMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(135), rmDegreesToRadians(315));
- int Eastward=rmCreatePieConstraint("eastMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(45), rmDegreesToRadians(225));
- int Westward=rmCreatePieConstraint("westMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(225), rmDegreesToRadians(45));
-
- // Player constraints
- int playerConstraintForest=rmCreateClassDistanceConstraint("forests kinda stay away from players", classPlayer, 20.0);
- int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 45.0);
- int avoidTradeIslands=rmCreateClassDistanceConstraint("stay away from trade islands", rmClassID("tradeIslands"), 40.0);
- int smallMapPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 70.0);
-
- // Nature avoidance
- // int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "fish", 18.0);
- // int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
- int forestObjConstraint=rmCreateTypeDistanceConstraint("forest obj", "all", 6.0);
- int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
- int avoidResource=rmCreateTypeDistanceConstraint("resource avoid resource", "resource", 20.0);
- int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "gold", 40.0);
- int shortAvoidCoin=rmCreateTypeDistanceConstraint("short avoid coin", "gold", 10.0);
- int avoidStartResource=rmCreateTypeDistanceConstraint("start resource no overlap", "resource", 1.0);
-
- // Avoid impassable land
- int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 4.0);
- int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 2.0);
- int longAvoidImpassableLand=rmCreateTerrainDistanceConstraint("long avoid impassable land", "Land", false, 10.0);
- int hillConstraint=rmCreateClassDistanceConstraint("hill vs. hill", rmClassID("classHill"), 10.0);
- int shortHillConstraint=rmCreateClassDistanceConstraint("patches vs. hill", rmClassID("classHill"), 5.0);
- int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);
- int avoidCliffs=rmCreateClassDistanceConstraint("cliff vs. cliff", rmClassID("classCliff"), 30.0);
-
- int nearShore=rmCreateTerrainMaxDistanceConstraint("near shore", "water", false, 10.0);
-
- // Unit avoidance
- int avoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 45.0);
- int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 20.0);
- int avoidNatives=rmCreateClassDistanceConstraint("stuff avoids natives", rmClassID("natives"), 30.0);
- int avoidSecrets=rmCreateClassDistanceConstraint("stuff avoids secrets", rmClassID("secrets"), 20.0);
- int avoidNuggets=rmCreateClassDistanceConstraint("stuff avoids nuggets", rmClassID("nuggets"), 50.0);
- int fortConstraint=rmCreateTypeDistanceConstraint("avoid the fort", "SecretRuinAbandonedFort", 20.0);
- int deerConstraint=rmCreateTypeDistanceConstraint("avoid the deer", "deer", 30.0);
- int shortDeerConstraint=rmCreateTypeDistanceConstraint("short avoid the deer", "deer", 10.0);
- int mooseConstraint=rmCreateTypeDistanceConstraint("avoid the moose", "moose", 20.0);
- // Decoration avoidance
- int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
-
- // Trade route avoidance.
- int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 5.0);
- int avoidTradeRouteFar = rmCreateTradeRouteDistanceConstraint("trade route far", 20.0);
-
- // -------------Define objects
- // These objects are all defined so they can be placed later
-
-
- int bisonID=rmCreateObjectDef("bison herd center");
- rmAddObjectDefItem(bisonID, "bison", rmRandInt(10,12), 6.0);
- rmSetObjectDefCreateHerd(bisonID, true);
- rmSetObjectDefMinDistance(bisonID, 0.0);
- rmSetObjectDefMaxDistance(bisonID, 5.0);
- // rmAddObjectDefConstraint(bisonID, playerConstraint);
- // rmAddObjectDefConstraint(bisonID, bisonEdgeConstraint);
- // rmAddObjectDefConstraint(bisonID, avoidResource);
- // rmAddObjectDefConstraint(bisonID, avoidImpassableLand);
- // rmAddObjectDefConstraint(bisonID, Northward);
-
-
- // wood resources
- int randomTreeID=rmCreateObjectDef("random tree");
- rmAddObjectDefItem(randomTreeID, "longleafPine", 1, 0.0);
- rmSetObjectDefMinDistance(randomTreeID, 0.0);
- rmSetObjectDefMaxDistance(randomTreeID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(randomTreeID, avoidResource);
- rmAddObjectDefConstraint(randomTreeID, avoidImpassableLand);
-
- // starting resources
- int StartAreaTreeID=rmCreateObjectDef("starting trees");
- rmAddObjectDefItem(StartAreaTreeID, "longleafPine", 1, 0.0);
- rmSetObjectDefMinDistance(StartAreaTreeID, 2);
- rmSetObjectDefMaxDistance(StartAreaTreeID, 12);
- rmAddObjectDefConstraint(StartAreaTreeID, avoidStartResource);
- rmAddObjectDefConstraint(StartAreaTreeID, shortAvoidImpassableLand);
- rmAddObjectDefConstraint(StartAreaTreeID, avoidTradeRoute);
- rmAddObjectDefConstraint(StartAreaTreeID, avoidNatives);
-
- // DAL - taken out now 'cause it's silly with the new model.
- /*
- int StartAreaSilverID=rmCreateObjectDef("starting silver");
- rmAddObjectDefItem(StartAreaSilverID, "silverOre", 1, 0.0);
- rmSetObjectDefMinDistance(StartAreaSilverID, 2);
- rmSetObjectDefMaxDistance(StartAreaSilverID, 12);
- rmAddObjectDefConstraint(StartAreaSilverID, avoidStartResource);
- rmAddObjectDefConstraint(StartAreaSilverID, shortAvoidImpassableLand);
- rmAddObjectDefConstraint(StartAreaSilverID, avoidTradeRoute);
- rmAddObjectDefConstraint(StartAreaSilverID, avoidNatives);
- */
-
- int StartPronghornID=rmCreateObjectDef("starting pronghorn");
- rmAddObjectDefItem(StartPronghornID, "pronghorn", 1, 0.0);
- rmSetObjectDefCreateHerd(StartPronghornID, true);
- rmSetObjectDefMinDistance(StartPronghornID, 3);
- rmSetObjectDefMaxDistance(StartPronghornID, 12);
- rmAddObjectDefConstraint(StartPronghornID, avoidStartResource);
- rmAddObjectDefConstraint(StartPronghornID, shortAvoidImpassableLand);
- rmAddObjectDefConstraint(StartPronghornID, avoidNatives);
-
- // -------------Done defining objects
- // Text
- rmSetStatusText("",0.10);
-
- // Text
- rmSetStatusText("",0.10);
-
- // ************************ LAKE MICHIGAN *******************************
- int michiganID=rmCreateArea("Lake Michigan 1");
- rmSetAreaSize(michiganID, 0.09, 0.09);
- rmSetAreaLocation(michiganID, 0.05, 0.6);
- rmSetAreaWaterType(michiganID, "new england coast");
- rmAddAreaToClass(michiganID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(michiganID, 0.0);
- rmAddAreaInfluencePoint(michiganID, 0.5, 0.5);
- rmSetAreaObeyWorldCircleConstraint(michiganID, false);
- rmSetAreaMinBlobs(michiganID, 20);
- rmSetAreaMaxBlobs(michiganID, 30);
- rmSetAreaMinBlobDistance(michiganID, 20);
- rmSetAreaMaxBlobDistance(michiganID, 40);
- rmSetAreaSmoothDistance(michiganID, 10);
- rmSetAreaCoherence(michiganID, 0.05);
- rmBuildArea(michiganID);
-
- int michigan2ID=rmCreateArea("Lake Michigan 2");
- rmSetAreaSize(michigan2ID, 0.06, 0.06);
- rmSetAreaLocation(michigan2ID, 0.05, 0.75);
- rmSetAreaWaterType(michigan2ID, "new england coast");
- rmAddAreaToClass(michigan2ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(michigan2ID, 0.0);
- rmSetAreaObeyWorldCircleConstraint(michigan2ID, false);
- rmAddAreaInfluencePoint(michigan2ID, 0.7, 0.5);
- rmSetAreaMinBlobs(michigan2ID, 20);
- rmSetAreaMaxBlobs(michigan2ID, 30);
- rmSetAreaMinBlobDistance(michigan2ID, 20);
- rmSetAreaMaxBlobDistance(michigan2ID, 40);
- rmSetAreaSmoothDistance(michigan2ID, 10);
- rmSetAreaCoherence(michigan2ID, 0.05);
- rmBuildArea(michigan2ID);
-
- int michigan3ID=rmCreateArea("Lake Michigan 3");
- rmSetAreaSize(michigan3ID, 0.04, 0.04);
- rmSetAreaLocation(michigan3ID, 0.30, 0.50);
- rmSetAreaWaterType(michigan3ID, "new england coast");
- rmAddAreaToClass(michigan3ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(michigan3ID, 0.0);
- rmAddAreaInfluencePoint(michigan3ID, 0.7, 0.5);
- rmSetAreaMinBlobs(michigan3ID, 20);
- rmSetAreaMaxBlobs(michigan3ID, 30);
- rmSetAreaMinBlobDistance(michigan3ID, 20);
- rmSetAreaMaxBlobDistance(michigan3ID, 40);
- rmSetAreaSmoothDistance(michigan3ID, 10);
- rmSetAreaCoherence(michigan3ID, 0.25);
- rmBuildArea(michigan3ID);
-
- int michigan4ID=rmCreateArea("Lake Michigan 4");
- rmSetAreaSize(michigan4ID, 0.05, 0.05);
- rmSetAreaLocation(michigan4ID, 0.30, 0.62);
- rmSetAreaWaterType(michigan4ID, "new england coast");
- rmAddAreaToClass(michigan4ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(michigan4ID, 0.0);
- rmAddAreaInfluencePoint(michigan4ID, 0.7, 0.5);
- rmSetAreaMinBlobs(michigan4ID, 20);
- rmSetAreaMaxBlobs(michigan4ID, 30);
- rmSetAreaMinBlobDistance(michigan4ID, 20);
- rmSetAreaMaxBlobDistance(michigan4ID, 40);
- rmSetAreaSmoothDistance(michigan4ID, 10);
- rmSetAreaCoherence(michigan4ID, 0.25);
- rmBuildArea(michigan4ID);
-
- int michigan5ID=rmCreateArea("Lake Michigan 5");
- rmSetAreaSize(michigan5ID, 0.03, 0.03);
- rmSetAreaLocation(michigan5ID, 0.45, 0.5);
- rmSetAreaWaterType(michigan5ID, "new england coast");
- rmAddAreaToClass(michigan5ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(michigan5ID, 0.0);
- rmAddAreaInfluencePoint(michigan5ID, 0.7, 0.5);
- rmSetAreaMinBlobs(michigan5ID, 10);
- rmSetAreaMaxBlobs(michigan5ID, 20);
- rmSetAreaMinBlobDistance(michigan5ID, 10);
- rmSetAreaMaxBlobDistance(michigan5ID, 20);
- rmSetAreaSmoothDistance(michigan5ID, 10);
- rmSetAreaCoherence(michigan5ID, 0.25);
- rmBuildArea(michigan5ID);
-
-
-// ****************************** LAKE HURON *************************************
- int huron1ID=rmCreateArea("Lake Huron 1");
- rmSetAreaSize(huron1ID, 0.06, 0.06);
- rmSetAreaLocation(huron1ID, 0.75, 0.0);
- rmSetAreaWaterType(huron1ID, "new england coast");
- rmAddAreaToClass(huron1ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(huron1ID, 0.0);
- rmSetAreaObeyWorldCircleConstraint(huron1ID, false);
- rmAddAreaInfluencePoint(huron1ID, 0.7, 0.5);
- rmSetAreaMinBlobs(huron1ID, 20);
- rmSetAreaMaxBlobs(huron1ID, 30);
- rmSetAreaMinBlobDistance(huron1ID, 20);
- rmSetAreaMaxBlobDistance(huron1ID, 40);
- rmSetAreaSmoothDistance(huron1ID, 10);
- rmSetAreaCoherence(huron1ID, 0.05);
- rmBuildArea(huron1ID);
-
- int huron2ID=rmCreateArea("Lake Huron 2");
- rmSetAreaSize(huron2ID, 0.06, 0.06);
- rmSetAreaLocation(huron2ID, 0.70, 0.10);
- rmSetAreaWaterType(huron2ID, "new england coast");
- rmAddAreaToClass(huron2ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(huron2ID, 0.0);
- rmSetAreaObeyWorldCircleConstraint(huron2ID, false);
- rmAddAreaInfluencePoint(huron2ID, 0.7, 0.5);
- rmSetAreaMinBlobs(huron2ID, 20);
- rmSetAreaMaxBlobs(huron2ID, 30);
- rmSetAreaMinBlobDistance(huron2ID, 20);
- rmSetAreaMaxBlobDistance(huron2ID, 40);
- rmSetAreaSmoothDistance(huron2ID, 10);
- rmSetAreaCoherence(huron2ID, 0.05);
- rmBuildArea(huron2ID);
-
- int huron3ID=rmCreateArea("Lake Huron 3");
- rmSetAreaSize(huron3ID, 0.04, 0.04);
- rmSetAreaLocation(huron3ID, 0.70, 0.25);
- rmSetAreaWaterType(huron3ID, "new england coast");
- rmAddAreaToClass(huron3ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(huron3ID, 0.0);
- rmAddAreaInfluencePoint(huron3ID, 0.7, 0.5);
- rmSetAreaMinBlobs(huron3ID, 20);
- rmSetAreaMaxBlobs(huron3ID, 30);
- rmSetAreaMinBlobDistance(huron3ID, 20);
- rmSetAreaMaxBlobDistance(huron3ID, 40);
- rmSetAreaSmoothDistance(huron3ID, 10);
- rmSetAreaCoherence(huron3ID, 0.25);
- rmBuildArea(huron3ID);
-
- int huron4ID=rmCreateArea("Lake Huron 4");
- rmSetAreaSize(huron4ID, 0.04, 0.04);
- rmSetAreaLocation(huron4ID, 0.70, 0.30);
- rmSetAreaWaterType(huron4ID, "new england coast");
- rmAddAreaToClass(huron4ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(huron4ID, 0.0);
- rmAddAreaInfluencePoint(huron4ID, 0.7, 0.5);
- rmSetAreaMinBlobs(huron4ID, 20);
- rmSetAreaMaxBlobs(huron4ID, 30);
- rmSetAreaMinBlobDistance(huron4ID, 20);
- rmSetAreaMaxBlobDistance(huron4ID, 40);
- rmSetAreaSmoothDistance(huron4ID, 10);
- rmSetAreaCoherence(huron4ID, 0.25);
- rmBuildArea(huron4ID);
-
- int huron5ID=rmCreateArea("Lake Huron 5");
- rmSetAreaSize(huron5ID, 0.03, 0.03);
- rmSetAreaLocation(huron5ID, 0.57, 0.35);
- rmSetAreaWaterType(huron5ID, "new england coast");
- rmAddAreaToClass(huron5ID, rmClassID("great lake"));
-// rmSetAreaBaseHeight(huron5ID, 0.0);
- rmAddAreaInfluencePoint(huron5ID, 0.7, 0.5);
- rmSetAreaMinBlobs(huron5ID, 10);
- rmSetAreaMaxBlobs(huron5ID, 20);
- rmSetAreaMinBlobDistance(huron5ID, 20);
- rmSetAreaMaxBlobDistance(huron5ID, 30);
- rmSetAreaSmoothDistance(huron5ID, 10);
- rmSetAreaCoherence(huron5ID, 0.15);
- rmBuildArea(huron5ID);
-
- int greatLakesConstraint=rmCreateClassDistanceConstraint("avoid the great lakes", classGreatLake, 10.0);
- int farGreatLakesConstraint=rmCreateClassDistanceConstraint("far avoid the great lakes", classGreatLake, 20.0);
-
-// ********************* create Trade islands *********************
-
- int tradeIslandA=rmCreateArea("trade island A");
- rmSetAreaSize(tradeIslandA, rmAreaTilesToFraction(400), rmAreaTilesToFraction(400));
- rmSetAreaLocation(tradeIslandA, 0.15, 0.6);
- rmAddAreaToClass(tradeIslandA, rmClassID("great lake"));
- rmAddAreaToClass(tradeIslandA, rmClassID("tradeIslands"));
- rmSetAreaBaseHeight(tradeIslandA, 2.0);
- rmSetAreaMix(tradeIslandA, "carolina grass");
- rmSetAreaMinBlobs(tradeIslandA, 3);
- rmSetAreaMaxBlobs(tradeIslandA, 5);
- rmSetAreaMinBlobDistance(tradeIslandA, 5);
- rmSetAreaMaxBlobDistance(tradeIslandA, 10);
- rmSetAreaSmoothDistance(tradeIslandA, 20);
- rmSetAreaCoherence(tradeIslandA, 0.15);
- rmBuildArea(tradeIslandA);
-
- int tradeIslandB=rmCreateArea("trade island B");
- rmSetAreaSize(tradeIslandB, rmAreaTilesToFraction(400), rmAreaTilesToFraction(400));
- rmSetAreaLocation(tradeIslandB, 0.70, 0.15);
- rmAddAreaToClass(tradeIslandB, rmClassID("great lake"));
- rmAddAreaToClass(tradeIslandB, rmClassID("tradeIslands"));
- rmSetAreaBaseHeight(tradeIslandB, 2.0);
- rmSetAreaMix(tradeIslandB, "carolina grass");
- rmSetAreaMinBlobs(tradeIslandB, 3);
- rmSetAreaMaxBlobs(tradeIslandB, 5);
- rmSetAreaMinBlobDistance(tradeIslandB, 5);
- rmSetAreaMaxBlobDistance(tradeIslandB, 10);
- rmSetAreaSmoothDistance(tradeIslandB, 20);
- rmSetAreaCoherence(tradeIslandB, 0.15);
- rmBuildArea(tradeIslandB);
-
- int socketID=rmCreateObjectDef("socket for trade post in lake");
- rmAddObjectDefItem(socketID, "socket", 1, 0.0);
- rmAddObjectDefItem(socketID, "socketIconTradeRoute", 1, 0.0);
- rmSetObjectDefAllowOverlap(socketID, true);
- rmSetObjectDefMinDistance(socketID, 0.0);
- rmSetObjectDefMaxDistance(socketID, 12.0);
-
-
-
- int teamZeroCount = rmGetNumberPlayersOnTeam(0);
- int teamOneCount = rmGetNumberPlayersOnTeam(1);
-
- if ( cNumberTeams == 2 )
- {
- if ( teamZeroCount == 3 )
- {
- rmSetPlacementTeam(0);
- // rmSetPlacementSection(0.1, 0.4);
- rmSetPlacementSection(0.77, 0.8);
- rmSetTeamSpacingModifier(0.3);
- rmPlacePlayersCircular(0.47, 0.47, 0);
- // rmPlacePlayersLine(0.15, 0.10, 0.25, 0.10, 0, 0.05);
- }
- else
- {
- rmSetPlacementTeam(0);
- // rmSetPlacementSection(0.1, 0.4);
- rmSetPlacementSection(0.75, 0.85);
- rmSetTeamSpacingModifier(0.5);
- rmPlacePlayersCircular(0.47, 0.47, 0);
- // rmPlacePlayersLine(0.15, 0.10, 0.15, 0.6, 0, 0.15);
- }
-
- if (teamOneCount == 3 )
- {
- rmSetPlacementTeam(1);
- // rmSetPlacementSection(0.6, 0.9);
- rmSetPlacementSection(0.4, 0.45);
- rmSetTeamSpacingModifier(0.3);
- rmPlacePlayersCircular(0.47, 0.47, 0);
- // rmPlacePlayersLine(0.75, 0.6, 0.85, 0.6, 0, 0.05);
- }
- else
- {
- rmSetPlacementTeam(1);
- // rmSetPlacementSection(0.6, 0.9);
- rmSetPlacementSection(0.4, 0.45);
- rmSetTeamSpacingModifier(0.3);
- rmPlacePlayersCircular(0.47, 0.47, 0);
- // rmPlacePlayersLine(0.85, 0.10, 0.85, 0.6, 0, 0.15);
- }
- }
- else
- {
- rmSetPlacementSection(0.0, 0.95);
- rmPlacePlayersSquare(0.35, 0.05, 0.1);
- }
-
-
- float playerFraction=rmAreaTilesToFraction(100);
- for(i=1; Players and player stuff -> Natives -> Secrets -> Cliffs -> Nuggets
- // Place other objects that were defined earlier
-
- // DAL added - two trade routes placed
-
-/*
-
-
- int playerGoldID=rmCreateObjectDef("player silver ore");
- int silverType = rmRandInt(1,10);
-
-*/
- // Player placement
-
-/*
-
-*/
-
-
- // Define and place cliffs
-
-/*
-
- numTries=cNumberNonGaiaPlayers*4;
- failCount=0;
- for(i=0;
- 17
- 12
+ 12
+ 13
1
1
- PropsNative
- UnderbrushRockies
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushRockies
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushTexas
- PropsNative
- PropsNative
- NativeHouseAztec
- NativeTownObstruction
- NativeTownObstruction
- NativeTownObstruction
- UnderbrushTexas
- SMIncanPickerSitting
- SMIncanStoryTelling
- NativeTownObstruction
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- SMIncanCookpot
- NativeTownObstruction
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushAmazon
- PropsNative
- NativeTownObstruction
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- SMIncanFence
- NativeHouseAztec
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- SocketAztec
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- UnderbrushRockies
- PropsNative
- SMIncanMixerPoker
- NativeHouseAztec
- UnderbrushRockies
- UnderbrushRockies
- PropsNative
- UnderbrushRockies
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ SocketAztec
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterSite
+ ypSMSaltpeterMan
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ NativeTownObstruction
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
+ ypSMSaltpeterMan
+ ypSMSaltpeterElephant
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
\ No newline at end of file
diff --git a/RMM/groupings/native aztec village 2.xml b/RMM/groupings/native aztec village 2.xml
index 0ef4d7b..9e312f5 100644
--- a/RMM/groupings/native aztec village 2.xml
+++ b/RMM/groupings/native aztec village 2.xml
@@ -1,107 +1,134 @@
- 18
- 12
+ 10
+ 11
1
1
- PropsNative
- PropsNative
- UnderbrushRockies
- NativeTownObstruction
- SocketAztec
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushRockies
- Campfire
- SMIncanCookpot
- NativeTownObstruction
- NativeTownObstruction
- UnderbrushYucatan
- SMIncanMixerPoker
- NativeHouseAztec
- NativeTownObstruction
- NativeTownObstruction
- PropsNative
- UnderbrushAmazon
- PropsNative
- PropsNative
- PropsNative
- NativeHouseAztec
- UnderbrushRockies
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushRockies
- SMIncanStoryTelling
- NativeTownObstruction
- NativeTownObstruction
- NativeTownObstruction
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushYucatan
- NativeTownObstruction
- UnderbrushRockies
- PropsNative
- SMIncanMixerPoker
- NativeTownObstruction
- PropsNative
- PropsNative
- UnderbrushRockies
- SMIncanPickerSitting
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushTexas
- UnderbrushRockies
- PropsNative
- UnderbrushRockies
- SMIncanCookpot
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ NativeTownObstruction
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ SocketAztec
+ ypSPCSaltpeterSite
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ ypSMSaltpeterMan
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
\ No newline at end of file
diff --git a/RMM/groupings/native aztec village 3.xml b/RMM/groupings/native aztec village 3.xml
index a562d7d..af4004b 100644
--- a/RMM/groupings/native aztec village 3.xml
+++ b/RMM/groupings/native aztec village 3.xml
@@ -1,73 +1,150 @@
- 14
+ 9
14
1
1
- PropsNative
- PropsNative
- UnderbrushRockies
- UnderbrushRockies
- NativeTownObstruction
- NativeHouseAztec
- PropsNative
- NativeTownObstruction
- UnderbrushRockies
- PropsNative
- NativeTownObstruction
- SMIncanFence
- NativeTownObstruction
- PropsNative
- SMIncanPickerSitting
- NativeTownObstruction
- PropsNative
- UnderbrushRockies
- SMIncanStoryTelling
- UnderbrushRockies
- PropsNative
- SMIncanCookpot
- NativeTownObstruction
- SocketAztec
- Campfire
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- SMIncanMixerPoker
- NativeHouseAztec
- UnderbrushRockies
- UnderbrushRockies
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ NativeTownObstruction
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ SocketAztec
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSMSaltpeterMan
+ ypSMJesuitAccessory
+ ypSMSaltpeterMan
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ ypSMJesuitAccessory
+ ypSMSaltpeterElephant
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
\ No newline at end of file
diff --git a/RMM/groupings/native aztec village 4.xml b/RMM/groupings/native aztec village 4.xml
index 1199cca..7bc40d3 100644
--- a/RMM/groupings/native aztec village 4.xml
+++ b/RMM/groupings/native aztec village 4.xml
@@ -1,76 +1,176 @@
- 11
+ 12
13
1
1
- PropsNative
- NativeTownObstruction
- SPCPathBlock3
- PropsNative
- SMIncanCookpot
- SMIncanFence
- SPCPathBlock3
- SMIncanStoryTelling
- SPCPathBlock3
- NativeTownObstruction
- PropsNative
- PropsNative
- UnderbrushRockies
- SocketAztec
- UnderbrushTexas
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- SMIncanMixerPoker
- NativeTownObstruction
- PropsNative
- PropsNative
- NativeTownObstruction
- UnderbrushRockies
- SMIncanPickerSitting
- PropsNative
- UnderbrushRockies
- PropsNative
- UnderbrushRockies
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ SocketAztec
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterSite
+ ypSMSaltpeterMan
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ NativeTownObstruction
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
+ ypSMSaltpeterMan
+ ypSMSaltpeterElephant
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
+ ypSMJesuitAccessory
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
\ No newline at end of file
diff --git a/RMM/groupings/native aztec village 5.xml b/RMM/groupings/native aztec village 5.xml
index 8f2d25c..9e312f5 100644
--- a/RMM/groupings/native aztec village 5.xml
+++ b/RMM/groupings/native aztec village 5.xml
@@ -1,104 +1,134 @@
- 15
- 13
+ 10
+ 11
1
1
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- SocketAztec
- NativeHouseAztec
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- NativeHouseAztec
- PropsNative
- UnderbrushRockies
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- Campfire
- UnderbrushRockies
- PropsNative
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- NativeTownObstruction
- NativeTownObstruction
- NativeTownObstruction
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- SMIncanMixerPoker
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- SMIncanStoryTelling
- SMIncanStoryTelling
- NativeHouseAztec
- NativeTownObstruction
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- PropsNative
- UnderbrushRockies
- PropsNative
- SMIncanCookpot
- NativeHouseAztec
- PropsNative
- UnderbrushRockies
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ NativeTownObstruction
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ SocketAztec
+ ypSPCSaltpeterSite
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterSite
+ NativeTownObstruction
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
+ ypSMSaltpeterMan
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterMan
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterAccessory
+ ypSMSaltpeterElephant
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterSite
+ ypSPCSaltpeterAccessory
+ ypSMJesuitAccessory
+ ypSPCSaltpeterAccessory
+ ypSPCSaltpeterSite
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
- 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
\ No newline at end of file
diff --git a/RMM/himalayas.xs b/RMM/himalayas.xs
index 5aa847f..bd8923b 100644
--- a/RMM/himalayas.xs
+++ b/RMM/himalayas.xs
@@ -411,8 +411,9 @@ void main(void)
rmSetObjectDefMaxDistance(startingTCID, 8.0);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 4.0);
- rmSetObjectDefMaxDistance(startingUnits, 8.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
int StartFoodID=rmCreateObjectDef("starting food");
rmAddObjectDefItem(StartFoodID, huntable1, 10, 10.0);
@@ -642,16 +643,6 @@ void main(void)
rmSetNuggetDifficulty(4, 4);
rmPlaceObjectDefPerPlayer(nuggetID2, false, 1);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/himalayasUpper.xs b/RMM/himalayasUpper.xs
index b3521c4..a891a8c 100644
--- a/RMM/himalayasUpper.xs
+++ b/RMM/himalayasUpper.xs
@@ -424,8 +424,9 @@ void main(void)
rmSetObjectDefMaxDistance(startingTCID, 8.0);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 4.0);
- rmSetObjectDefMaxDistance(startingUnits, 8.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidStartingUnitsSmall);
int StartFoodID=rmCreateObjectDef("starting food");
@@ -698,16 +699,6 @@ void main(void)
rmSetNuggetDifficulty(4, 4);
rmPlaceObjectDefPerPlayer(nuggetID3, false, 1);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/honshu.xs b/RMM/honshu.xs
index e15ede5..4da79e2 100644
--- a/RMM/honshu.xs
+++ b/RMM/honshu.xs
@@ -282,16 +282,6 @@ int sfBuildBigIsland (string bigIslandName = "", float x_loc = 0.0, float y_loc
vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.5);
rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
@@ -835,8 +825,8 @@ void main(void)
//Prepare to place Explorers, Explorer's dog, Explorer's Taun Taun, etc.
int startingUnits = rmCreateStartingUnitsObjectDef(4.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
- rmSetObjectDefMaxDistance(startingUnits, 8.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
diff --git a/RMM/honshuRegicide.xs b/RMM/honshuRegicide.xs
index c7079f2..3be3357 100644
--- a/RMM/honshuRegicide.xs
+++ b/RMM/honshuRegicide.xs
@@ -284,16 +284,6 @@ int sfBuildBigIsland (string bigIslandName = "", float x_loc = 0.0, float y_loc
//~ socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.8);
//~ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
@@ -785,8 +775,8 @@ void main(void)
//Prepare to place Explorers, Explorer's dog, Explorer's Taun Taun, etc.
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
- rmSetObjectDefMaxDistance(startingUnits, 8.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
diff --git a/RMM/indochina.xs b/RMM/indochina.xs
index 98896d3..d059481 100644
--- a/RMM/indochina.xs
+++ b/RMM/indochina.xs
@@ -214,7 +214,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidImpassableLand);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -726,16 +726,6 @@ void main(void)
// Text
rmSetStatusText("",0.85);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/indochinaRegicide.xml b/RMM/indochinaRegicide.xml
index 296bac3..5f23d2d 100644
--- a/RMM/indochinaRegicide.xml
+++ b/RMM/indochinaRegicide.xml
@@ -1,5 +1,6 @@
+ ui\random_map\indochina\indochina_ss_01
ui\random_map\indochina\indochina_ss_02
ui\random_map\indochina\indochina_ss_03
diff --git a/RMM/indochinaRegicide.xs b/RMM/indochinaRegicide.xs
index 95e5b24..2f91b8f 100644
--- a/RMM/indochinaRegicide.xs
+++ b/RMM/indochinaRegicide.xs
@@ -182,16 +182,6 @@ int sfBuildBigIsland (string bigIslandName = "", float x_loc = 0.0, float y_loc
socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.7);
rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <13 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH())
@@ -622,8 +612,8 @@ void main(void)
//Prepare to place Explorers, Explorer's dog, Explorer's Taun Taun, etc.
int startingUnits = rmCreateStartingUnitsObjectDef(4.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
- rmSetObjectDefMaxDistance(startingUnits, 8.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
diff --git a/RMM/indonesia.xml b/RMM/indonesia.xml
new file mode 100644
index 0000000..5dd126c
--- /dev/null
+++ b/RMM/indonesia.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\indonesia\indonesia_ss_01
+ ui\random_map\africa\indonesia\indonesia_ss_02
+ ui\random_map\africa\indonesia\indonesia_ss_03
+
\ No newline at end of file
diff --git a/RMM/landrandom.set b/RMM/landrandom.set
index 03583c4..4938d56 100644
--- a/RMM/landrandom.set
+++ b/RMM/landrandom.set
@@ -1,5 +1,5 @@
-
+
@@ -7,10 +7,20 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/RMM/mongolia.xs b/RMM/mongolia.xs
index cb8446e..9f7a268 100644
--- a/RMM/mongolia.xs
+++ b/RMM/mongolia.xs
@@ -510,6 +510,7 @@ void main(void)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 7.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
int startingTCID = rmCreateObjectDef("startingTC");
if ( rmGetNomadStart())
@@ -920,16 +921,6 @@ void main(void)
}
}
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <12 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/mongolialarge.xs b/RMM/mongolialarge.xs
index ca4fa7d..02783f4 100644
--- a/RMM/mongolialarge.xs
+++ b/RMM/mongolialarge.xs
@@ -510,6 +510,7 @@ void main(void)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 7.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
int startingTCID = rmCreateObjectDef("startingTC");
if ( rmGetNomadStart())
@@ -920,16 +921,6 @@ void main(void)
}
}
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <16 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/native test.xs b/RMM/native test.xs
deleted file mode 100644
index 4eaf57f..0000000
--- a/RMM/native test.xs
+++ /dev/null
@@ -1,457 +0,0 @@
-// TEXAS
-// October 2003
-// 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);
-
- //Chooses which natives appear on the map
- int subCiv0=-1;
- int subCiv1=-1;
- int subCiv2=-1;
- int subCiv3=-1;
- int subCiv4=-1;
- int subCiv5=-1;
- int subCiv6=-1;
- int subCiv7=-1;
- int subCiv8=-1;
- int subCiv9=-1;
- int subCiv10=-1;
- int subCiv11=-1;
-
- if (rmAllocateSubCivs(12) == true)
- {
- subCiv0=rmGetCivID("Comanche");
- if (subCiv0 >= 0)
- rmSetSubCiv(0, "Comanche");
-
- subCiv1=rmGetCivID("Iroquois");
- if (subCiv1 >= 0)
- rmSetSubCiv(1, "Iroquois");
-
- subCiv2=rmGetCivID("Aztecs");
- if (subCiv2 >= 0)
- rmSetSubCiv(2, "Aztecs");
-
- subCiv3=rmGetCivID("Maya");
- if (subCiv3 >= 0)
- rmSetSubCiv(3, "Maya");
-
- subCiv4=rmGetCivID("Lakota");
- if (subCiv4 >= 0)
- rmSetSubCiv(4, "Lakota");
-
- subCiv5=rmGetCivID("Nootka");
- if (subCiv5 >= 0)
- rmSetSubCiv(5, "Nootka");
-
- subCiv6=rmGetCivID("Cherokee");
- if (subCiv6 >= 0)
- rmSetSubCiv(6, "Cherokee");
-
- subCiv7=rmGetCivID("Cree");
- if (subCiv7 >= 0)
- rmSetSubCiv(7, "Cree");
-
- subCiv8=rmGetCivID("Tupi");
- if (subCiv8 >= 0)
- rmSetSubCiv(8, "Tupi");
-
- subCiv9=rmGetCivID("Caribs");
- if (subCiv9 >= 0)
- rmSetSubCiv(9, "Caribs");
-
- subCiv10=rmGetCivID("Seminoles");
- if (subCiv10 >= 0)
- rmSetSubCiv(10, "Seminoles");
-
- subCiv11=rmGetCivID("Incas");
- if (subCiv11 >= 0)
- rmSetSubCiv(11, "Incas");
-
- }
-
-
-
- // Picks the map size
- int playerTiles=12000; // DAL modified from 16K
- if(cMapSize == 1)
- {
- playerTiles = 15000; // DAL modified from 18K
- rmEchoInfo("Large map");
- }
- int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
- rmEchoInfo("Map size="+size+"m x "+size+"m");
- rmSetMapSize(size, size);
-
- // Picks a default water height
- rmSetSeaLevel(4.0);
-
- // Picks default terrain and water
- rmSetSeaType("Amazon River");
- rmTerrainInitialize("carolinas\grass4");
-
- // Define some classes. These are used later for constraints.
- int classPlayer=rmDefineClass("player");
- rmDefineClass("classHill");
- rmDefineClass("classPatch");
- rmDefineClass("corner");
- rmDefineClass("starting settlement");
- rmDefineClass("startingUnit");
- rmDefineClass("classForest");
- rmDefineClass("importantItem");
- rmDefineClass("natives");
- rmDefineClass("classCliff");
-
- // -------------Define constraints
- // These are used to have objects and areas avoid each other
-
- // Map edge constraints
- int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(6), rmZTilesToFraction(6), 1.0-rmXTilesToFraction(6), 1.0-rmZTilesToFraction(6), 0.01);
- int longPlayerConstraint=rmCreateClassDistanceConstraint("land stays away from players", classPlayer, 24.0);
-
- // Cardinal Directions
- int Northward=rmCreatePieConstraint("northMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(315), rmDegreesToRadians(135));
- int Southward=rmCreatePieConstraint("southMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(135), rmDegreesToRadians(315));
- int Eastward=rmCreatePieConstraint("eastMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(45), rmDegreesToRadians(225));
- int Westward=rmCreatePieConstraint("westMapConstraint", 0.5, 0.5, 0, rmZFractionToMeters(0.5), rmDegreesToRadians(225), rmDegreesToRadians(45));
-
- // Player constraints
- int playerConstraint=rmCreateClassDistanceConstraint("stay away from players", classPlayer, 30.0);
- int smallMapPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 70.0);
-
- // Nature avoidance
- // int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "fish", 18.0);
- // int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
- int forestObjConstraint=rmCreateTypeDistanceConstraint("forest obj", "all", 6.0);
- int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 50.0);
- int avoidResource=rmCreateTypeDistanceConstraint("resource avoid resource", "resource", 10.0);
- int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "gold", 30.0);
- int avoidStartResource=rmCreateTypeDistanceConstraint("start resource no overlap", "resource", 1.0);
-
- // Avoid impassable land
- int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 4.0);
- int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 2.0);
- int longAvoidImpassableLand=rmCreateTerrainDistanceConstraint("long avoid impassable land", "Land", false, 10.0);
- int hillConstraint=rmCreateClassDistanceConstraint("hill vs. hill", rmClassID("classHill"), 10.0);
- int shortHillConstraint=rmCreateClassDistanceConstraint("patches vs. hill", rmClassID("classHill"), 5.0);
- int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);
- int avoidCliffs=rmCreateClassDistanceConstraint("cliff vs. cliff", rmClassID("classCliff"), 30.0);
-
-
- // Specify true so constraint stays outside of circle (i.e. inside corners)
- int cornerConstraint0=rmCreateCornerConstraint("in corner 0", 0, true);
- int cornerConstraint1=rmCreateCornerConstraint("in corner 1", 1, true);
- int cornerConstraint2=rmCreateCornerConstraint("in corner 2", 2, true);
- int cornerConstraint3=rmCreateCornerConstraint("in corner 3", 3, true);
- int insideCircleConstraint=rmCreateCornerConstraint("inside circle", -1, false);
-
- // Unit avoidance
- int avoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 40.0);
- int avoidImportantItem=rmCreateClassDistanceConstraint("secrets etc avoid each other", rmClassID("importantItem"), 20.0);
- int avoidNatives=rmCreateClassDistanceConstraint("stuff avoids natives", rmClassID("natives"), 12.0);
-
- // Decoration avoidance
- int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);
-
- // Trade route avoidance.
- int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 5.0);
- int avoidTradeRouteFar = rmCreateTradeRouteDistanceConstraint("trade route far", 20.0);
-
- // -------------Define objects
- // These objects are all defined so they can be placed later
-
- //colony ship
- /*
- int colonyShipID=rmCreateObjectDef("colony ship");
- rmAddObjectDefItem(colonyShipID, "caravel", 1, 0.0);
- rmSetObjectDefGarrisonStartingUnits(colonyShipID, true);
- rmSetObjectDefMinDistance(colonyShipID, 0.0);
- rmSetObjectDefMaxDistance(colonyShipID, 0.0);
- rmAddObjectDefConstraint(colonyShipID, playerEdgeConstraint);
- rmAddObjectDefConstraint(colonyShipID, fishLand);
- */
-
- // DAL Define the "Fort" Here instead!
- int playerFortID = -1;
- int playerFortType = 1;
- playerFortID = rmCreateGrouping("player fort", "texas fort "+playerFortType);
- // playerFortID = rmCreateGrouping("player fort", "native tupi village "+playerFortType);
-
- // rmSetGroupingMinDistance(playerFortID, 0.0);
- // rmSetGroupingMaxDistance(playerFortID, rmXFractionToMeters(0.35));
-
- // Groupings
- // rmAddGroupingConstraint(playerFortID, avoidImpassableLand);
- // rmAddGroupingToClass(playerFortID, rmClassID("importantItem"));
-
- // Removed all constraints for now - DAL
-
- // rmAddGroupingConstraint(playerFortID, avoidImportantItem);
- // rmAddGroupingConstraint(playerFortID, insideCircleConstraint);
- // rmAddGroupingConstraint(playerFortID, avoidTradeRoute);
- // rmAddGroupingConstraint(playerFortID, playerConstraint);
- // rmAddObjectDefConstraint(playerFortID, Southward);
-
-
- //EXAMPLE OF PLACING OBJECTS AWAY FROM PLAYER
- // int farGoldID=rmCreateObjectDef("far gold");
- // rmAddObjectDefItem(farGoldID, "Gold mine", 1, 0.0);
- // rmSetObjectDefMinDistance(farGoldID, 60);
- // rmSetObjectDefMaxDistance(farGoldID, 160.0);
- // rmAddObjectDefConstraint(farGoldID, avoidGold);
- // rmAddObjectDefConstraint(farGoldID, avoidImpassableLand);
-
- // rmPlaceObjectDefPerPlayer(farGoldID, false, 3);
-
- // food resources
-
-
- // Text
- rmSetStatusText("",0.10);
-
- // Text
- rmSetStatusText("",0.10);
-
- // *** Set up player starting locations. Circular around the outside of the map.
- // rmPlacePlayersCircular(0.1, 0.9, rmDegreesToRadians(5.0));
- rmSetPlacementTeam(0);
- rmSetPlacementSection(0.1, 0.4);
- rmPlacePlayersCircular(0.38, 0.42, 0.0);
-
- rmSetPlacementTeam(1);
- rmSetPlacementSection(0.6, 0.9);
- rmPlacePlayersCircular(0.38, 0.42, 0.0);
-
- // Set up player areas.
- float playerFraction=rmAreaTilesToFraction(100);
- for(i=1; Trade route -> River (none on this map) -> Natives -> Secrets -> Cliffs -> Nuggets
- // Place other objects that were defined earlier
- int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- // rmSetObjectDefMinDistance(startingUnits, 10.0);
- // rmSetObjectDefMaxDistance(startingUnits, 20.0);
-
- // Player placement
- for(i=1; 0)
- {
- vector playerFortLocation=rmGetUnitPosition(rmGetUnitPlacedOfPlayer(playerFortID, i));
- // rmSetHomeCityGatherPoint(i, rmGetAreaClosestPoint(-1, playerFortLocation, 8.0));
- }
- */
-
- // Test of Marcin's Starting Units stuff...
- rmPlaceObjectDefAtLoc(startingUnits, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
-
- // Place starting resources - DAL
-
- vector closestPoint=rmGetUnitPosition(rmGetUnitPlacedOfPlayer(startingUnits, i));
- rmSetHomeCityGatherPoint(i, closestPoint);
- }
-
- // Text
- rmSetStatusText("",0.40);
-
-
-
- // Define and place the Native Villages and Secrets of the New World
- // Text
- rmSetStatusText("",0.50);
-
- if (subCiv0 == rmGetCivID("Comanche"))
- {
- int comancheVillageID = -1;
- comancheVillageID = rmCreateGrouping("comanche village", "native comanche village 1");
- rmSetGroupingMinDistance(comancheVillageID, 0.0);
- rmSetGroupingMaxDistance(comancheVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(comancheVillageID, avoidImpassableLand);
- rmAddGroupingToClass(comancheVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(comancheVillageID, avoidImportantItem);
- rmAddGroupingConstraint(comancheVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(comancheVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv1 == rmGetCivID("iroquois"))
- {
- int iroquoisVillageID = -1;
- iroquoisVillageID = rmCreateGrouping("iroquois village", "native iroquois village 1");
- rmSetGroupingMinDistance(iroquoisVillageID, 0.0);
- rmSetGroupingMaxDistance(iroquoisVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(iroquoisVillageID, avoidImpassableLand);
- rmAddGroupingToClass(iroquoisVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(iroquoisVillageID, avoidImportantItem);
- rmAddGroupingConstraint(iroquoisVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(iroquoisVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv2 == rmGetCivID("aztecs"))
- {
- int aztecsVillageID = -1;
- aztecsVillageID = rmCreateGrouping("aztecs village", "native aztec village 1");
- rmSetGroupingMinDistance(aztecsVillageID, 0.0);
- rmSetGroupingMaxDistance(aztecsVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(aztecsVillageID, avoidImpassableLand);
- rmAddGroupingToClass(aztecsVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(aztecsVillageID, avoidImportantItem);
- rmAddGroupingConstraint(aztecsVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(aztecsVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv3 == rmGetCivID("maya"))
- {
- int mayaVillageID = -1;
- mayaVillageID = rmCreateGrouping("maya village", "native maya village 1");
- rmSetGroupingMinDistance(mayaVillageID, 0.0);
- rmSetGroupingMaxDistance(mayaVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(mayaVillageID, avoidImpassableLand);
- rmAddGroupingToClass(mayaVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(mayaVillageID, avoidImportantItem);
- rmAddGroupingConstraint(mayaVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(mayaVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv4 == rmGetCivID("lakota"))
- {
- int lakotaVillageID = -1;
- lakotaVillageID = rmCreateGrouping("lakota village", "native lakota village 1");
- rmSetGroupingMinDistance(lakotaVillageID, 0.0);
- rmSetGroupingMaxDistance(lakotaVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(lakotaVillageID, avoidImpassableLand);
- rmAddGroupingToClass(lakotaVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(lakotaVillageID, avoidImportantItem);
- rmAddGroupingConstraint(lakotaVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(lakotaVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv5 == rmGetCivID("nootka"))
- {
- int nootkaVillageID = -1;
- nootkaVillageID = rmCreateGrouping("nootka village", "native nootka village 1");
- rmSetGroupingMinDistance(nootkaVillageID, 0.0);
- rmSetGroupingMaxDistance(nootkaVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(nootkaVillageID, avoidImpassableLand);
- rmAddGroupingToClass(nootkaVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(nootkaVillageID, avoidImportantItem);
- rmAddGroupingConstraint(nootkaVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(nootkaVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv6 == rmGetCivID("cherokee"))
- {
- int cherokeeVillageID = -1;
- cherokeeVillageID = rmCreateGrouping("cherokee village", "native cherokee village 1");
- rmSetGroupingMinDistance(cherokeeVillageID, 0.0);
- rmSetGroupingMaxDistance(cherokeeVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(cherokeeVillageID, avoidImpassableLand);
- rmAddGroupingToClass(cherokeeVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(cherokeeVillageID, avoidImportantItem);
- rmAddGroupingConstraint(cherokeeVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(cherokeeVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv7 == rmGetCivID("cree"))
- {
- int creeVillageID = -1;
- creeVillageID = rmCreateGrouping("cree village", "native cree village 1");
- rmSetGroupingMinDistance(creeVillageID, 0.0);
- rmSetGroupingMaxDistance(creeVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(creeVillageID, avoidImpassableLand);
- rmAddGroupingToClass(creeVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(creeVillageID, avoidImportantItem);
- rmAddGroupingConstraint(creeVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(creeVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv8 == rmGetCivID("tupi"))
- {
- int tupiVillageID = -1;
- tupiVillageID = rmCreateGrouping("tupi village", "native tupi village 1");
- rmSetGroupingMinDistance(tupiVillageID, 0.0);
- rmSetGroupingMaxDistance(tupiVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(tupiVillageID, avoidImpassableLand);
- rmAddGroupingToClass(tupiVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(tupiVillageID, avoidImportantItem);
- rmAddGroupingConstraint(tupiVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(tupiVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv9 == rmGetCivID("caribs"))
- {
- int caribsVillageID = -1;
- caribsVillageID = rmCreateGrouping("caribs village", "native carib village 1");
- rmSetGroupingMinDistance(caribsVillageID, 0.0);
- rmSetGroupingMaxDistance(caribsVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(caribsVillageID, avoidImpassableLand);
- rmAddGroupingToClass(caribsVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(caribsVillageID, avoidImportantItem);
- rmAddGroupingConstraint(caribsVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(caribsVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv10 == rmGetCivID("seminoles"))
- {
- int seminolesVillageID = -1;
- seminolesVillageID = rmCreateGrouping("seminoles village", "native seminole village 1");
- rmSetGroupingMinDistance(seminolesVillageID, 0.0);
- rmSetGroupingMaxDistance(seminolesVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(seminolesVillageID, avoidImpassableLand);
- rmAddGroupingToClass(seminolesVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(seminolesVillageID, avoidImportantItem);
- rmAddGroupingConstraint(seminolesVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(seminolesVillageID, 0, 0.5, 0.5);
- }
-
- if (subCiv11 == rmGetCivID("incas"))
- {
- int incasVillageID = -1;
- incasVillageID = rmCreateGrouping("incas village", "native inca village 1");
- rmSetGroupingMinDistance(incasVillageID, 0.0);
- rmSetGroupingMaxDistance(incasVillageID, rmXFractionToMeters(0.5));
- rmAddGroupingConstraint(incasVillageID, avoidImpassableLand);
- rmAddGroupingToClass(incasVillageID, rmClassID("importantItem"));
- rmAddGroupingConstraint(incasVillageID, avoidImportantItem);
- rmAddGroupingConstraint(incasVillageID, insideCircleConstraint);
- rmPlaceGroupingAtLoc(incasVillageID, 0, 0.5, 0.5);
- }
-
-
-
-}
diff --git a/RMM/new england.xs b/RMM/new england.xs
index 0640731..bed319c 100644
--- a/RMM/new england.xs
+++ b/RMM/new england.xs
@@ -650,7 +650,7 @@ void main(void)
// Starting Unit placement
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
rmAddObjectDefConstraint(startingUnits, avoidAll);
@@ -1053,16 +1053,6 @@ void main(void)
// Text
rmSetStatusText("",0.9);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// Water nuggets
diff --git a/RMM/new englandLarge.xs b/RMM/new englandLarge.xs
index f9514c8..8341668 100644
--- a/RMM/new englandLarge.xs
+++ b/RMM/new englandLarge.xs
@@ -650,7 +650,7 @@ void main(void)
// Starting Unit placement
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
rmAddObjectDefConstraint(startingUnits, avoidAll);
@@ -1053,16 +1053,6 @@ void main(void)
// Text
rmSetStatusText("",0.9);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <14 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// Water nuggets
diff --git a/RMM/newzealand.xml b/RMM/newzealand.xml
new file mode 100644
index 0000000..ddd875a
--- /dev/null
+++ b/RMM/newzealand.xml
@@ -0,0 +1,11 @@
+
+
+ ui\random_map\africa\newzealand\newzealand_ss_01
+ ui\random_map\africa\newzealand\newzealand_ss_02
+ ui\random_map\africa\newzealand\newzealand_ss_03
+
\ No newline at end of file
diff --git a/RMM/newzealand.xs b/RMM/newzealand.xs
new file mode 100644
index 0000000..d9bceb9
--- /dev/null
+++ b/RMM/newzealand.xs
@@ -0,0 +1,723 @@
+/* Durokan's Jebel Musa - April 5 2016 Version 1.2*/
+ /*=======================Changes from 1.0=======================
+
+ Natives:
+ -removed 1 apache camp, there is now only 1 jesuit and 1 apache, both on each side of the anvil
+
+ Resources:
+ - added constraints for a single guaranteed mine and level 2 treasure in the corner of the map. assuming the map looks like a "+" shape in brown, it would be on the horizontal "-" corners
+ -added constraints and applicable map areas to keep items tagged as "anvil" on the hammer shaped outcrop
+ ^This includes a set of gold mines, level 2 treasures, and avoidance for level 1,3 treasures and other mines
+ -Forests now avoid the TC by more to give the TC more space. They also use different constraints to spawn more evenly. They now avoid the trade route by a long distance instead of avoiding treasures which was sloppy code.
+ -starting trees should no longer entangle mines or berries
+ -hunts no longer spawn on the low side of cliffs due to their removal
+ -The treasures now spawn accordingly: level 3's in the corner area, level 2's on the anvil, and level 1's in the valley.
+
+ Spawn + TC:
+ -shifted spawns in 1v1 closer to the x axis by .1
+ -shifted the spawn points for team away from the edges of the plateau by .03 in the z direction.
+
+ Textures/Terrain:
+ -added a texturing function; the map is less monotonous now.
+ -changed map textures to texas 4,5 in the dry area, california 8,9 in the wet area. changed the water to texas pond, removed cliffs on water edge
+ -map now spawns with grass and a few trees on the water edge due to texas pond
+ -cliff texture changed to Texas from Araucania North Coast
+ -Changed coherence of the anvil from .85 to .8, giving it a less round shape
+
+ Misc:
+ -Added the 'Durokan <3's Aiz' function to the top of the anvil. This spawns two neutral alligator buddies which can be duelled for a marginal amount of xp.
+ -Starting hunts are tagged as 'bison' for the express purpose of making sure they spawn correctly and fairly. There are 3 sets per player. They will be reverted to 'ypIbex' before the map is completed
+ -map loading bar improved though it does hover around .5 for a long time
+
+ Things to be adressed:
+ Resource balance, mines/hunts still spawn unfairly on occasion. I plan on adding 3 zones to accomodate this. They will be Plateau1, Plateau2, and Valley. They will all be initialized differently in each area to balance it better.
+
+ =======================Changes from 1.1=======================
+ Natives:
+
+ Resources:
+ -made starting hunts avoid water, pushing the hunts for the tc's close to shore back onto the plateau or closer to it
+ -mines now spawn along the valley and on cliffs seperately.
+ -There is now a modified hunt spawn for 1v1; it disregards the 3rd starting hunt and places it differently.
+ -re-ordered the guaranteed corner resources to now place in order of gold>hunts>nugget instead of hunt>nugget>gold. this reduces/eliminates bugs where the gold won't spawn due to the hitbox of the treasure
+
+ Spawn + TC:
+ -team tc's z axis increased by .03 to .21 from .18
+
+ Textures:
+
+ Misc:
+
+ Things to be adressed:
+ -still alot of open space on the valley region
+
+ =======================Changes from 1.2=======================
+ -Hunts renamed to ypIbex from bison
+
+*/
+
+ include "mercenaries.xs";
+ include "ypAsianInclude.xs";
+ include "ypKOTHInclude.xs";
+
+ void main(void) {
+
+ rmSetStatusText("",0.1);
+
+ float playerTiles=13000;
+ if (cNumberNonGaiaPlayers>4)
+ playerTiles = 11000;
+ if (cNumberNonGaiaPlayers>6)
+ playerTiles = 9000;
+ int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ rmSetMapSize(size, size);
+ rmSetSeaType("New Zealand Coast");
+ rmSetSeaLevel(-7);
+ rmSetMapType("land");
+ rmSetMapType("grass");
+ rmSetMapType("Japan");
+ rmTerrainInitialize("water");
+ rmSetLightingSet("Pampas");
+
+ rmDefineClass("classForest");
+
+ int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+ int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 30.0);
+ int forestConstraintShort=rmCreateClassDistanceConstraint("object vs. forest", rmClassID("classForest"), 4.0);
+ int avoidHunt=rmCreateTypeDistanceConstraint("hunts avoid hunts", "huntable", 45.0);
+ int avoidHuntBase=rmCreateTypeDistanceConstraint("stuff avoid hunts", "huntable", 4.0);
+ int avoidCoin=rmCreateTypeDistanceConstraint("avoid coin", "Mine", 10.0);
+ int avoidCoinMed=rmCreateTypeDistanceConstraint("avoid coin medium", "Mine", 60.0);
+ int avoidWaterShort = rmCreateTerrainDistanceConstraint("avoid water short", "Land", false, 6.0);
+ int avoidWaterLong = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 20.0);
+ int AvoidWaterShort2 = rmCreateTerrainDistanceConstraint("avoid water short 2", "Land", false, 15.0);
+ int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("objects avoid trade route", 12);
+ int avoidTradeRouteFar = rmCreateTradeRouteDistanceConstraint("objects avoid trade route far", 30);
+ int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("objects avoid trade route small", 4.0);
+ int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 5.0);
+ int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);
+ int avoidTownCenter=rmCreateTypeDistanceConstraint("avoid Town Center", "townCenter", 35.0);
+ int avoidTownCenterSmall=rmCreateTypeDistanceConstraint("avoid Town Center small", "townCenter", 15.0);
+ int avoidTownCenterMedium=rmCreateTypeDistanceConstraint("avoid Town Center medium", "townCenter", 21.0);
+ int avoidTownCenterMore=rmCreateTypeDistanceConstraint("avoid Town Center more", "townCenter", 40.0);
+ int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 50.0);
+ int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);
+
+ int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "fishSalmon", 20.0);
+ int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 8.0);
+ int whaleVsWhaleID=rmCreateTypeDistanceConstraint("whale v whale", "HumpbackWhale", 50.0);
+ int whaleLand = rmCreateTerrainDistanceConstraint("whale land", "land", true, 15.0);
+
+ int avoidLand = rmCreateTerrainDistanceConstraint("avoid land ", "Land", true, 8.0);
+ int avoidNuggetWater = rmCreateTypeDistanceConstraint("avoid nugget water", "AbstractNugget", 70.0);
+ int avoidEdge = rmCreatePieConstraint("Avoid Edge", 0.5, 0.5, rmXFractionToMeters(0.0), rmXFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ int flagLand = rmCreateTerrainDistanceConstraint("flag vs land", "land", true, 20.0);
+ int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 20);
+ int flagEdgeConstraint = rmCreatePieConstraint("flag edge of map", 0.5, 0.5, 0, rmGetMapXSize()-25, 0, 0, 0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 8.0);
+ int avoidImpassableLand = rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 10.0);
+
+ int avoidEdgeMore = rmCreatePieConstraint("Avoid Edge More",0.5,0.5, rmXFractionToMeters(0.0),rmXFractionToMeters(0.38), rmDegreesToRadians(0),rmDegreesToRadians(360));
+
+ rmDefineClass("classPlateau");
+ int avoidPlateau=rmCreateClassDistanceConstraint("stuff vs. cliffs", rmClassID("classPlateau"), 5.0);
+ rmDefineClass("classAnvil");
+ int avoidAnvil=rmCreateClassDistanceConstraint("stuff vs. Anvil", rmClassID("classAnvil"), 5.0);
+ rmDefineClass("classContinent");
+ int avoidContinent=rmCreateClassDistanceConstraint("stuff vs. Continent", rmClassID("classContinent"), 5.0);
+
+
+ float spawnSwitch = rmRandFloat(0,1.2);
+
+ if(cNumberNonGaiaPlayers == 2){
+ if (spawnSwitch<0.6) {
+ rmPlacePlayer(1, 0.2, 0.25);
+ rmPlacePlayer(2, 0.8, 0.25);
+ }else{
+ rmPlacePlayer(1, 0.8, 0.25);
+ rmPlacePlayer(2, 0.2, 0.25);
+ }
+ }else if (cNumberTeams == 2){
+ if (spawnSwitch<0.6) {
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.2, 0.21, 0.2, 0.47, 0, 0);
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.8, 0.21, 0.8, 0.47, 0, 0);
+ }else{
+ rmSetPlacementTeam(0);
+ rmPlacePlayersLine(0.2, 0.21, 0.2, 0.47, 0, 0);
+ rmSetPlacementTeam(1);
+ rmPlacePlayersLine(0.8, 0.21, 0.8, 0.47, 0, 0);
+ }
+
+ }else{
+ rmSetPlacementSection(0.25, 0.75);
+ rmPlacePlayersCircular(0.4, 0.4, 0.02);
+ }
+ chooseMercs();
+ rmSetStatusText("",0.10);
+
+ int continent = rmCreateArea("big huge continent");
+ rmAddAreaToClass(continent, rmClassID("classContinent"));
+ rmSetAreaSize(continent, 0.64, 0.64);
+ rmSetAreaLocation(continent, 0.5, 0.15);
+ rmSetAreaTerrainType(continent, "araucania\ground_grass3_ara");
+ rmSetAreaBaseHeight(continent, -4.5);
+ rmSetAreaCoherence(continent, .8);
+ rmAddAreaInfluenceSegment(continent, 0.0, 0.25, 1.0, 0.25);
+ rmSetAreaSmoothDistance(continent, 1);
+ rmSetAreaElevationEdgeFalloffDist(continent, 10);
+ rmSetAreaElevationVariation(continent, 5);
+ rmSetAreaElevationPersistence(continent, 0.5);
+ rmSetAreaElevationOctaves(continent, 5);
+ rmSetAreaElevationMinFrequency(continent, 0.01);
+ rmSetAreaElevationType(continent, cElevTurbulence);
+ rmBuildArea(continent);
+
+
+ int cape = rmCreateArea("cape left");
+ rmAddAreaToClass(cape, rmClassID("classAnvil"));
+ rmSetAreaSize(cape, 0.015, 0.015);
+ rmSetAreaSmoothDistance(cape, 1);
+ rmSetAreaLocation(cape, 0.40, 0.8);
+ rmSetAreaTerrainType(cape, "araucania\ground_grass3_ara");
+ rmSetAreaBaseHeight(cape, -4.5);
+ rmSetAreaCoherence(cape, 0.8);
+ rmSetAreaElevationEdgeFalloffDist(cape, 10);
+ rmSetAreaElevationVariation(cape, 5);
+ rmSetAreaElevationPersistence(cape, 0.5);
+ rmSetAreaElevationOctaves(cape, 5);
+ rmSetAreaElevationMinFrequency(cape, 0.01);
+ rmSetAreaElevationType(cape, cElevTurbulence);
+ rmBuildArea(cape);
+
+ int cape2 = rmCreateArea("cape right");
+ rmAddAreaToClass(cape2, rmClassID("classAnvil"));
+ rmSetAreaSmoothDistance(cape2, 1);
+ rmSetAreaSize(cape2, 0.015, 0.015);
+ rmSetAreaLocation(cape2, 0.60, 0.8);
+ rmSetAreaTerrainType(cape2, "araucania\ground_grass3_ara");
+ rmSetAreaBaseHeight(cape2, -4.5);
+ rmSetAreaCoherence(cape2, 0.8);
+ rmSetAreaElevationEdgeFalloffDist(cape2, 10);
+ rmSetAreaElevationVariation(cape2, 5);
+ rmSetAreaElevationPersistence(cape2, 0.5);
+ rmSetAreaElevationOctaves(cape2, 5);
+ rmSetAreaElevationMinFrequency(cape2, 0.01);
+ rmSetAreaElevationType(cape2, cElevTurbulence);
+ rmBuildArea(cape2);
+
+ int cape3 = rmCreateArea("cape middle top");
+ rmAddAreaToClass(cape3, rmClassID("classAnvil"));
+ rmSetAreaSize(cape3, 0.015, 0.015);
+ rmSetAreaLocation(cape3, 0.50, 0.8);
+ rmSetAreaSmoothDistance(cape3, 1);
+ rmSetAreaTerrainType(cape3, "araucania\ground_grass3_ara");
+ rmSetAreaBaseHeight(cape3, -4.5);
+ rmSetAreaCoherence(cape3, 0.8);
+ rmSetAreaElevationEdgeFalloffDist(cape3, 10);
+ rmSetAreaElevationVariation(cape3, 5);
+ rmSetAreaElevationPersistence(cape3, 0.5);
+ rmSetAreaElevationOctaves(cape3, 5);
+ rmSetAreaElevationMinFrequency(cape3, 0.01);
+ rmSetAreaElevationType(cape3, cElevTurbulence);
+ rmBuildArea(cape3);
+
+ int cape4 = rmCreateArea("cape middle bottom");
+ rmAddAreaToClass(cape4, rmClassID("classAnvil"));
+ rmSetAreaSize(cape4, 0.015, 0.015);
+ rmSetAreaLocation(cape4, 0.5, 0.68);
+ rmSetAreaTerrainType(cape4, "araucania\ground_grass3_ara");
+ rmSetAreaBaseHeight(cape4, -4.5);
+ rmSetAreaCoherence(cape4, 0.9);
+ rmSetAreaElevationEdgeFalloffDist(cape4, 10);
+ rmSetAreaElevationVariation(cape4, 5);
+ rmSetAreaElevationPersistence(cape4, 0.5);
+ rmSetAreaElevationOctaves(cape4, 5);
+ rmSetAreaElevationMinFrequency(cape4, 0.01);
+ rmSetAreaElevationType(cape4, cElevTurbulence);
+ rmBuildArea(cape4);
+
+ int ambiental = rmCreateObjectDef("ambiental");
+ rmAddObjectDefItem(ambiental, "UnderbrushForest", 1, 5.0);
+ rmSetObjectDefMinDistance(ambiental, 0);
+ rmSetObjectDefMaxDistance(ambiental, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(ambiental, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(ambiental, avoidWaterShort);
+ rmAddObjectDefConstraint(ambiental, avoidTradeRoute);
+ rmAddObjectDefConstraint(ambiental, avoidAll);
+ rmPlaceObjectDefAtLoc(ambiental, 0, 0.5, 0.5, 90*cNumberNonGaiaPlayers);
+
+ 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);
+ int tradeRouteID = rmCreateTradeRoute();
+ rmSetObjectDefTradeRouteID(socketID, tradeRouteID);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, -0.1);
+ rmAddTradeRouteWaypoint(tradeRouteID, 0.5, 0.75);
+ rmBuildTradeRoute(tradeRouteID, "dirt");
+
+ vector socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.15);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.7);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.4);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+ socketLoc1 = rmGetTradeRouteWayPoint(tradeRouteID, 0.92);
+ rmPlaceObjectDefAtPoint(socketID, 0, socketLoc1);
+ rmSetStatusText("",0.20);
+
+ int classPatch = rmDefineClass("patch");
+ int avoidPatch = rmCreateClassDistanceConstraint("avoid patch", rmClassID("patch"), 22.0);
+ int circleConstraint2=rmCreatePieConstraint("circle Constraint2", 0.5, 0.5, 0, rmZFractionToMeters(0.48), rmDegreesToRadians(0), rmDegreesToRadians(360));
+
+ int leftPlateau = rmCreateArea("plateau left");
+ rmSetAreaSize(leftPlateau, 0.2, 0.2);
+ rmAddAreaToClass(leftPlateau, rmClassID("classPlateau"));
+ rmAddAreaTerrainReplacement(leftPlateau, "araucania\ground_grass3_ara", "araucania\ground_grass1_ara");//great_plains\ground8_gp
+ rmSetAreaCliffType(leftPlateau, "Araucania Central");
+ rmSetAreaCliffEdge(leftPlateau, 1, 1, 0.0, 0.0, 1);
+ rmSetAreaCliffPainting(leftPlateau, true, true, true, 1.5, true);
+ rmSetAreaCliffHeight(leftPlateau, 4, 0.1, 0.5);
+ rmSetAreaCoherence(leftPlateau, .95);
+ rmSetAreaLocation(leftPlateau, .05, .3);
+ rmAddAreaInfluenceSegment(leftPlateau, 0.2, 0.0, 0.2, 0.4);
+ rmBuildArea(leftPlateau);
+
+ int rightPlateau = rmCreateArea("plateau right");
+ rmAddAreaToClass(rightPlateau, rmClassID("classPlateau"));
+ rmSetAreaSize(rightPlateau, 0.2, 0.2);
+ rmAddAreaTerrainReplacement(rightPlateau, "araucania\ground_grass3_ara", "araucania\ground_grass1_ara");
+ rmSetAreaCliffType(rightPlateau, "Araucania Central");
+ rmSetAreaCliffEdge(rightPlateau, 1, 1, 0.0, 0.0, 1);
+ rmSetAreaCliffPainting(rightPlateau, true, true, true, 1.5, true);
+ rmSetAreaCliffHeight(rightPlateau, 4, 0.1, 0.5);
+ rmSetAreaCoherence(rightPlateau, .95);
+ rmSetAreaLocation(rightPlateau, .85, .3);
+ rmAddAreaInfluenceSegment(rightPlateau, 0.8, .0, 0.8, .4);
+ rmBuildArea(rightPlateau);
+
+ int rampNumbers = 8;
+
+ for(i=i; < rampNumbers) {
+ int rampLarge = rmCreateArea("top left center basin left ramp"+i);
+ rmAddAreaTerrainReplacement(rampLarge, "texas\cliff_top_tex", "amazon\river1_am");
+ rmSetAreaSize(rampLarge, 0.0044, 0.0044);
+ rmSetAreaBaseHeight(rampLarge, -3.6);
+ rmSetAreaSmoothDistance(rampLarge, -8);
+ rmSetAreaCoherence(rampLarge, 1);
+ if(i == 1){
+ rmSetAreaLocation(rampLarge, 0.33, 0.5);
+ }else if(i == 2){
+ rmSetAreaLocation(rampLarge, 0.67, 0.5);
+ }else if(i == 3){
+ rmSetAreaLocation(rampLarge, 0.62, 0.12);
+ }else if(i == 4){
+ rmSetAreaLocation(rampLarge, 0.38, 0.12);
+ }else if(i == 5){
+ rmSetAreaLocation(rampLarge, 0.62, 0.35);
+ }else if(i == 6){
+ rmSetAreaLocation(rampLarge, 0.38, 0.35);
+ }else if(i == 7){
+ rmSetAreaLocation(rampLarge, 0.92, 0.525);
+ }else{
+ rmSetAreaLocation(rampLarge, 0.08, 0.525);
+ }
+ rmBuildArea(rampLarge);
+ }
+
+ for (i=0; < cNumberNonGaiaPlayers*125){
+ int patchID = rmCreateArea("the redder stuff"+i);
+ rmSetAreaWarnFailure(patchID, false);
+ rmSetAreaSize(patchID, rmAreaTilesToFraction(30), rmAreaTilesToFraction(51));
+ rmAddAreaTerrainReplacement(patchID, "araucania\ground_grass3_ara", "araucania\ground_dirt2_ara");
+ rmPaintAreaTerrain(patchID);
+ rmAddAreaToClass(patchID, rmClassID("patch"));
+ rmSetAreaSmoothDistance(patchID, 1.0);
+ rmAddAreaConstraint(patchID, circleConstraint2);
+ rmBuildArea(patchID);
+ }
+
+ for (i=0; < cNumberNonGaiaPlayers*125){
+ int patchID2 = rmCreateArea("the redder stuff2"+i);
+ rmSetAreaWarnFailure(patchID2, false);
+ rmSetAreaSize(patchID2, rmAreaTilesToFraction(11), rmAreaTilesToFraction(17));
+ rmAddAreaTerrainReplacement(patchID2, "araucania\ground_grass3_ara", "araucania\ground_dirt2_ara");
+ rmPaintAreaTerrain(patchID2);
+ rmAddAreaToClass(patchID2, rmClassID("patch"));
+ rmSetAreaSmoothDistance(patchID2, 1.0);
+ rmAddAreaConstraint(patchID2, circleConstraint2);
+ rmBuildArea(patchID2);
+ }
+ rmSetStatusText("",0.30);
+
+ for (i=0; < cNumberNonGaiaPlayers*125){
+ int patchID3 = rmCreateArea("the redder stuff3"+i);
+ rmSetAreaWarnFailure(patchID3, false);
+ rmSetAreaSize(patchID3, rmAreaTilesToFraction(30), rmAreaTilesToFraction(51));
+ rmAddAreaTerrainReplacement(patchID3, "araucania\ground_grass1_ara", "araucania\ground_grass2_ara");
+ rmPaintAreaTerrain(patchID3);
+ rmAddAreaToClass(patchID3, rmClassID("patch"));
+ rmSetAreaSmoothDistance(patchID3, 1.0);
+ rmAddAreaConstraint(patchID3, circleConstraint2);
+ rmBuildArea(patchID3);
+ }
+
+ int playerStart = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(playerStart, 7.0);
+ rmSetObjectDefMaxDistance(playerStart, 12.0);
+ rmAddObjectDefConstraint(playerStart, avoidAll);
+
+
+ //Natives
+ int nativeSwitch = rmRandInt(0,1);
+
+ int subCiv0 = -1;
+ int subCiv1 = -1;
+ subCiv0 = rmGetCivID("Jesuit");
+ subCiv1= rmGetCivID("Jesuit");
+ rmSetSubCiv(0, "Jesuit");
+ rmSetSubCiv(1, "Jesuit");
+
+ int nativeID0 = -1;
+ int nativeID2 = -1;
+
+ nativeID0 = rmCreateGrouping("Apache village", "native jesuit mission borneo 0"+4);
+ rmSetGroupingMinDistance(nativeID0, 0.00);
+ rmSetGroupingMaxDistance(nativeID0, 0.00);
+ rmAddGroupingToClass(nativeID0, rmClassID("natives"));
+
+ nativeID2 = rmCreateGrouping("Jesuit village ", "native jesuit mission borneo 0"+5);
+ rmSetGroupingMinDistance(nativeID2, 0.00);
+ rmSetGroupingMaxDistance(nativeID2, 0.00);
+ rmAddGroupingToClass(nativeID2, rmClassID("natives"));
+
+ if(nativeSwitch == 0){
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.60, 0.8);
+ rmPlaceGroupingAtLoc(nativeID2, 0, 0.40, 0.8);
+ }else{
+ rmPlaceGroupingAtLoc(nativeID0, 0, 0.40, 0.8);
+ rmPlaceGroupingAtLoc(nativeID2, 0, 0.60, 0.8);
+ }
+ rmSetStatusText("",0.40);
+
+ int berryID = rmCreateObjectDef("starting berries");
+ rmAddObjectDefItem(berryID, "BerryBush", 4, 6.0);
+ rmSetObjectDefMinDistance(berryID, 8.0);
+ rmSetObjectDefMaxDistance(berryID, 12.0);
+ rmAddObjectDefConstraint(berryID, avoidCoin);
+
+ int treeID = rmCreateObjectDef("starting trees");
+ rmAddObjectDefItem(treeID, "TreeCarolinaGrass", rmRandInt(6,9), 10.0);
+ rmAddObjectDefItem(treeID, "UnderbrushForest", rmRandInt(8,10), 12.0);
+ rmSetObjectDefMinDistance(treeID, 20.0);
+ rmSetObjectDefMaxDistance(treeID, 25.0);
+ rmAddObjectDefConstraint(treeID, avoidTownCenterSmall);
+ rmAddObjectDefConstraint(treeID, avoidCoin);
+ rmAddObjectDefConstraint(treeID, avoidHunt);
+
+ int foodID = rmCreateObjectDef("starting hunt1");
+ rmAddObjectDefItem(foodID, "ypIbex", 8, 12.0);
+ rmSetObjectDefMinDistance(foodID, 10.0);
+ rmSetObjectDefMaxDistance(foodID, 10.0);
+ rmAddObjectDefConstraint(foodID, circleConstraint);
+ rmAddObjectDefConstraint(foodID, avoidWaterLong);
+ rmSetObjectDefCreateHerd(foodID, true);
+
+ int foodID2 = rmCreateObjectDef("starting hunt2");
+ rmAddObjectDefItem(foodID2, "ypIbex", 8, 13.0);
+ rmSetObjectDefMinDistance(foodID2, 40.0);
+ rmSetObjectDefMaxDistance(foodID2, 40.0);
+ rmAddObjectDefConstraint(foodID2, circleConstraint);
+ rmAddObjectDefConstraint(foodID2, avoidWaterLong);
+ rmSetObjectDefCreateHerd(foodID2, true);
+
+ rmSetStatusText("",0.50);
+
+ int foodID3 = rmCreateObjectDef("starting hunt3");
+ rmAddObjectDefItem(foodID3, "ypIbex", 8, 12.0);
+ rmSetObjectDefMinDistance(foodID3, 60.0);
+ rmSetObjectDefMaxDistance(foodID3, 60.0);
+ rmAddObjectDefConstraint(foodID3, circleConstraint);
+ rmAddObjectDefConstraint(foodID3, avoidWaterLong);
+ rmSetObjectDefCreateHerd(foodID3, true);
+
+ for(i=1; 2){
+ rmPlaceObjectDefAtLoc(foodID3, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ }
+ rmPlaceObjectDefAtLoc(playerStart, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+
+ int placedTC = rmPlaceObjectDefAtLoc(startID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
+ vector TCLocation=rmGetUnitPosition(rmGetUnitPlacedOfPlayer(startID, i));
+
+ // Place water spawn points for the players
+ int waterSpawnPointID=rmCreateObjectDef("colony ship "+i);
+ rmAddObjectDefItem(waterSpawnPointID, "HomeCityWaterSpawnFlag", 1, 10.0);
+ rmAddClosestPointConstraint(flagVsFlag);
+ rmAddClosestPointConstraint(flagLand);
+ rmAddClosestPointConstraint(flagEdgeConstraint);
+ vector closestPoint = rmFindClosestPointVector(TCLocation, rmXFractionToMeters(1.0));
+ rmPlaceObjectDefAtLoc(waterSpawnPointID, i, rmXMetersToFraction(xsVectorGetX(closestPoint)), rmZMetersToFraction(xsVectorGetZ(closestPoint)));
+
+ rmClearClosestPointConstraints();
+
+ }
+
+ rmSetStatusText("",0.60);
+
+ int cornerMines = rmCreateObjectDef(" cornerMines");
+ rmAddObjectDefItem(cornerMines, "mine", 1, 1.0);
+ rmSetObjectDefMinDistance(cornerMines, 0.0);
+ rmSetObjectDefMaxDistance(cornerMines, rmXFractionToMeters(0.01));
+ rmAddObjectDefConstraint(cornerMines, circleConstraint);
+ rmPlaceObjectDefAtLoc(cornerMines, 0, 0.09, 0.605, 1);
+ rmPlaceObjectDefAtLoc(cornerMines, 0, 0.91, 0.605, 1);
+
+ int cornerHunts = rmCreateObjectDef("guarenteed corner hunts");
+ rmAddObjectDefItem(cornerHunts, "ypIbex", rmRandInt(8,8), 10.0);
+ rmSetObjectDefCreateHerd(cornerHunts, true);
+ rmSetObjectDefMinDistance(cornerHunts, 0);
+ rmSetObjectDefMaxDistance(cornerHunts, rmXFractionToMeters(0.01));
+ rmAddObjectDefConstraint(cornerHunts, circleConstraint);
+ rmPlaceObjectDefAtLoc(cornerHunts, 0, 0.09, 0.605, 1);
+ rmPlaceObjectDefAtLoc(cornerHunts, 0, 0.91, 0.605, 1);
+ if (cNumberNonGaiaPlayers==2){
+ rmPlaceObjectDefAtLoc(cornerHunts, 0, 0.25, 0.4, 1);
+ rmPlaceObjectDefAtLoc(cornerHunts, 0, 0.75, 0.4, 1);
+ }
+
+ int cornerNugget= rmCreateObjectDef("corner nugs");
+ rmAddObjectDefItem(cornerNugget, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(cornerNugget, 0.0);
+ rmSetObjectDefMaxDistance(cornerNugget, rmXFractionToMeters(0.01));
+ rmAddObjectDefConstraint(cornerNugget, circleConstraint);
+ rmSetNuggetDifficulty(3, 3);
+ rmPlaceObjectDefAtLoc(cornerNugget, 0, 0.1, 0.606, 1);
+ rmPlaceObjectDefAtLoc(cornerNugget, 0, 0.9, 0.606, 1);
+
+
+ int rheaxID = rmCreateObjectDef("ibex hunts");
+ rmAddObjectDefItem(rheaxID, "ypIbex", rmRandInt(8,8), 10.0);
+ rmSetObjectDefCreateHerd(rheaxID, true);
+ rmSetObjectDefMinDistance(rheaxID, 0);
+ rmSetObjectDefMaxDistance(rheaxID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(rheaxID, circleConstraint);
+ rmAddObjectDefConstraint(rheaxID, avoidTownCenterMedium);
+ rmAddObjectDefConstraint(rheaxID, avoidHunt);
+ rmAddObjectDefConstraint(rheaxID, AvoidWaterShort2);
+ rmAddObjectDefConstraint(rheaxID, avoidPlateau);
+ rmPlaceObjectDefAtLoc(rheaxID, 0, 0.5, 0.5, 5*cNumberNonGaiaPlayers);
+
+ int anvilNuggets = rmCreateObjectDef("nuggets on the anvil");
+ rmAddObjectDefItem(anvilNuggets, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(anvilNuggets, 0.0);
+ rmSetObjectDefMaxDistance(anvilNuggets, rmXFractionToMeters(0.2));
+ rmAddObjectDefConstraint(anvilNuggets, avoidNugget);
+ rmAddObjectDefConstraint(anvilNuggets, circleConstraint);
+ rmAddObjectDefConstraint(anvilNuggets, avoidCoin);
+ rmAddObjectDefConstraint(anvilNuggets, forestConstraintShort);
+ rmAddObjectDefConstraint(anvilNuggets, avoidWaterShort);
+ rmAddObjectDefConstraint(anvilNuggets, avoidTradeRoute);
+ rmAddObjectDefConstraint(anvilNuggets, avoidSocket);
+ rmAddObjectDefConstraint(anvilNuggets, avoidPlateau);
+ rmSetNuggetDifficulty(2, 2);
+ rmPlaceObjectDefAtLoc(anvilNuggets, 0, 0.5, 0.8, 2*cNumberNonGaiaPlayers);
+
+ int anvilMines = rmCreateObjectDef("anvilMines gold");
+ rmAddObjectDefItem(anvilMines, "mineGold", 1, 1.0);
+ rmSetObjectDefMinDistance(anvilMines, 0.0);
+ rmSetObjectDefMaxDistance(anvilMines, rmXFractionToMeters(0.09));
+ rmAddObjectDefConstraint(anvilMines, avoidCoinMed);
+ rmAddObjectDefConstraint(anvilMines, avoidSocket);
+ rmAddObjectDefConstraint(anvilMines, AvoidWaterShort2);
+ rmAddObjectDefConstraint(anvilMines, forestConstraintShort);
+ rmAddObjectDefConstraint(anvilMines, circleConstraint);
+ rmPlaceObjectDefAtLoc(anvilMines, 0, 0.5, 0.8, .5*cNumberNonGaiaPlayers);
+
+ rmSetStatusText("",0.70);
+
+ int mines = rmCreateObjectDef(" Mines");
+ rmAddObjectDefItem(mines, "mine", 1, 1.0);
+ rmSetObjectDefMinDistance(mines, 0.0);
+ rmSetObjectDefMaxDistance(mines, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(mines, avoidCoinMed);
+ rmAddObjectDefConstraint(mines, avoidTownCenterMore);
+ rmAddObjectDefConstraint(mines, avoidSocket);
+ rmAddObjectDefConstraint(mines, AvoidWaterShort2);
+ rmAddObjectDefConstraint(mines, forestConstraintShort);
+ rmAddObjectDefConstraint(mines, circleConstraint);
+ rmAddObjectDefConstraint(mines, avoidAnvil);
+ rmAddObjectDefConstraint(mines, avoidPlateau);
+ rmPlaceObjectDefAtLoc(mines, 0, 0.5, 0.5, 5*cNumberNonGaiaPlayers);
+
+ int leftMines = rmCreateObjectDef("leftMines");
+ rmAddObjectDefItem(leftMines, "mine", 1, 1.0);
+ rmSetObjectDefMinDistance(leftMines, 0.0);
+ rmSetObjectDefMaxDistance(leftMines, rmXFractionToMeters(0.35));
+ rmAddObjectDefConstraint(leftMines, avoidCoinMed);
+ rmAddObjectDefConstraint(leftMines, avoidTownCenterMore);
+ rmAddObjectDefConstraint(leftMines, avoidSocket);
+ rmAddObjectDefConstraint(leftMines, AvoidWaterShort2);
+ rmAddObjectDefConstraint(leftMines, forestConstraintShort);
+ rmAddObjectDefConstraint(leftMines, circleConstraint);
+ rmAddObjectDefConstraint(leftMines, avoidAnvil);
+ rmAddObjectDefConstraint(leftMines, avoidTradeRouteFar);
+ rmPlaceObjectDefAtLoc(leftMines, 0, 0.25, 0.45, 1*cNumberNonGaiaPlayers);
+
+ int rightMines = rmCreateObjectDef("rightMines");
+ rmAddObjectDefItem(rightMines, "mine", 1, 1.0);
+ rmSetObjectDefMinDistance(rightMines, 0.0);
+ rmSetObjectDefMaxDistance(rightMines, rmXFractionToMeters(0.35));
+ rmAddObjectDefConstraint(rightMines, avoidCoinMed);
+ rmAddObjectDefConstraint(rightMines, avoidTownCenterMore);
+ rmAddObjectDefConstraint(rightMines, avoidSocket);
+ rmAddObjectDefConstraint(rightMines, AvoidWaterShort2);
+ rmAddObjectDefConstraint(rightMines, forestConstraintShort);
+ rmAddObjectDefConstraint(rightMines, circleConstraint);
+ rmAddObjectDefConstraint(rightMines, avoidAnvil);
+ rmAddObjectDefConstraint(rightMines, avoidTradeRouteFar);
+ rmPlaceObjectDefAtLoc(rightMines, 0, 0.75, 0.45, 1*cNumberNonGaiaPlayers);
+
+ int nuggetID= rmCreateObjectDef("nuggets small");
+ rmAddObjectDefItem(nuggetID, "Nugget", 1, 0.0);
+ rmSetObjectDefMinDistance(nuggetID, 0.0);
+ rmSetObjectDefMaxDistance(nuggetID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(nuggetID, avoidNugget);
+ rmAddObjectDefConstraint(nuggetID, circleConstraint);
+ rmAddObjectDefConstraint(nuggetID, avoidTownCenter);
+ rmAddObjectDefConstraint(nuggetID, avoidCoin);
+ rmAddObjectDefConstraint(nuggetID, forestConstraintShort);
+ rmAddObjectDefConstraint(nuggetID, avoidWaterShort);
+ rmAddObjectDefConstraint(nuggetID, avoidTradeRouteSmall);
+ rmAddObjectDefConstraint(nuggetID, avoidSocket);
+ rmAddObjectDefConstraint(nuggetID, avoidPlateau);
+ rmAddObjectDefConstraint(nuggetID, avoidAnvil);
+ rmSetNuggetDifficulty(1, 1);
+ rmPlaceObjectDefAtLoc(nuggetID, 0, 0.5, 0.5, 3*(cNumberNonGaiaPlayers + 1));
+
+ int avoidGrass=rmCreateClassDistanceConstraint("tree vs. grasses", rmClassID("patch"), 1.0);
+
+ for (j=0; < (8*cNumberNonGaiaPlayers)) {
+ int StartAreaTree2ID=rmCreateObjectDef("plateau trees"+j);
+ rmAddObjectDefItem(StartAreaTree2ID, "TreeCarolinaGrass", rmRandInt(13,16), rmRandFloat(15.0,20.0));
+ rmAddObjectDefToClass(StartAreaTree2ID, rmClassID("classForest"));
+ rmSetObjectDefMinDistance(StartAreaTree2ID, 0);
+ rmSetObjectDefMaxDistance(StartAreaTree2ID, rmXFractionToMeters(0.45));
+ rmAddObjectDefConstraint(StartAreaTree2ID, avoidTradeRouteFar);
+ rmAddObjectDefConstraint(StartAreaTree2ID, avoidSocketMore);
+ rmAddObjectDefConstraint(StartAreaTree2ID, circleConstraint);
+ rmAddObjectDefConstraint(StartAreaTree2ID, forestConstraint);
+ rmAddObjectDefConstraint(StartAreaTree2ID, avoidCoin);
+ rmAddObjectDefConstraint(StartAreaTree2ID, avoidTownCenterMore);
+ rmAddObjectDefConstraint(StartAreaTree2ID, AvoidWaterShort2);
+ rmPlaceObjectDefAtLoc(StartAreaTree2ID, 0, 0.5, 0.5, 6*cNumberNonGaiaPlayers);
+ }
+
+ rmSetStatusText("",0.80);
+
+ // Water nuggets
+ int nuggetwcount = 4+1*cNumberNonGaiaPlayers;
+
+ for (i=0; < nuggetwcount)
+ {
+ int nuggetW= rmCreateObjectDef("nugget water"+i);
+ rmAddObjectDefItem(nuggetW, "ypNuggetBoat", 1, 0.0);
+ rmSetNuggetDifficulty(5, 5);
+ rmSetObjectDefMinDistance(nuggetW, rmXFractionToMeters(0.0));
+ rmSetObjectDefMaxDistance(nuggetW, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(nuggetW, avoidLand);
+ rmAddObjectDefConstraint(nuggetW, avoidEdge);
+ rmAddObjectDefConstraint(nuggetW, avoidNuggetWater);
+ rmPlaceObjectDefAtLoc(nuggetW, 0, 0.50, 0.50);
+ }
+
+ int fishID=rmCreateObjectDef("fish Mahi");
+ rmAddObjectDefItem(fishID, "FishMahi", 1, 0.0);
+ rmSetObjectDefMinDistance(fishID, 0.0);
+ rmSetObjectDefMaxDistance(fishID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(fishID, fishVsFishID);
+ rmAddObjectDefConstraint(fishID, fishLand);
+ rmPlaceObjectDefAtLoc(fishID, 0, 0.5, 0.5, 3*cNumberNonGaiaPlayers);
+
+ int fish2ID=rmCreateObjectDef("fish Tarpon");
+ rmAddObjectDefItem(fish2ID, "FishTarpon", 1, 0.0);
+ rmSetObjectDefMinDistance(fish2ID, 0.0);
+ rmSetObjectDefMaxDistance(fish2ID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(fish2ID, fishVsFishID);
+ rmAddObjectDefConstraint(fish2ID, fishLand);
+ rmPlaceObjectDefAtLoc(fish2ID, 0, 0.5, 0.5, 5*cNumberNonGaiaPlayers);
+ rmSetStatusText("",0.90);
+
+ 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, 3*cNumberNonGaiaPlayers);
+
+ int mineb=rmAddFairLoc("TownCenter", false, false, 18, 19, 12, 5);
+
+ if(rmPlaceFairLocs())
+ {
+ mineb=rmCreateObjectDef("mine behind");
+ rmAddObjectDefItem(mineb, "mine", 1, 0.0);
+ for(i=1; = teamOneCount * 2 ) || ( teamOneCount >= teamZeroCount * 2 ))
{
rmSetObjectDefMaxDistance(startingUnits, 20.0);
@@ -644,16 +645,6 @@ void main(void)
// Define and place Nuggets
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/ozarks.xs b/RMM/ozarks.xs
index 9cd5459..9ce128a 100644
--- a/RMM/ozarks.xs
+++ b/RMM/ozarks.xs
@@ -145,6 +145,9 @@ void main(void)
rmSetStatusText("",0.10);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
// ****************************** PLACE PLAYERS ******************************
@@ -426,6 +429,28 @@ void main(void)
rmAddObjectDefConstraint(playerTreeID, avoidAll);
rmAddObjectDefConstraint(playerTreeID, avoidImpassableLand);
+ int playerSaloonID=rmCreateObjectDef("player saloon");
+ rmAddObjectDefItem(playerSaloonID, "Mill", 1, 0.0);
+ rmSetObjectDefMinDistance(playerSaloonID, 12.0);
+ rmSetObjectDefMaxDistance(playerSaloonID, 16.0);
+ rmAddObjectDefConstraint(playerSaloonID, avoidAll);
+ rmAddObjectDefConstraint(playerSaloonID, avoidImpassableLand);
+
+ int playerFirepitID=rmCreateObjectDef("player firepit");
+ rmAddObjectDefItem(playerFirepitID, "Farm", 1, 0.0);
+ rmSetObjectDefMinDistance(playerFirepitID, 12.0);
+ rmSetObjectDefMaxDistance(playerFirepitID, 16.0);
+ rmAddObjectDefConstraint(playerFirepitID, avoidAll);
+ rmAddObjectDefConstraint(playerFirepitID, avoidImpassableLand);
+
+ int playerMonID=rmCreateObjectDef("player monastery");
+ rmAddObjectDefItem(playerMonID, "ypRicePaddy", 1, 0.0);
+ rmSetObjectDefMinDistance(playerMonID, 12.0);
+ rmSetObjectDefMaxDistance(playerMonID, 16.0);
+ rmAddObjectDefConstraint(playerMonID, avoidAll);
+ rmAddObjectDefConstraint(playerMonID, avoidImpassableLand);
+
+
for(i = 1; < cNumberPlayers)
{
rmPlaceObjectDefAtLoc(TCID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
@@ -436,10 +461,25 @@ void main(void)
rmPlaceObjectDefAtLoc(playerturkeyID, 0, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
rmPlaceObjectDefAtLoc(playerNuggetID, 0, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
- if(ypIsAsian(i) && rmGetNomadStart() == false)
- rmPlaceObjectDefAtLoc(ypMonasteryBuilder(i, 1), i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
- rmClearClosestPointConstraints();
- }
+ if (rmGetNomadStart() == false) {
+
+ if (rmGetPlayerCiv(i) == rmGetCivID("Chinese") || rmGetPlayerCiv(i) == rmGetCivID("Japanese") || rmGetPlayerCiv(i) == rmGetCivID("Indians")) {
+ rmPlaceObjectDefAtLoc(playerMonID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ }
+
+ else if ( rmGetPlayerCiv(i) == rmGetCivID("XPIroquois") ||
+ rmGetPlayerCiv(i) == rmGetCivID("XPSioux") ||
+ rmGetPlayerCiv(i) == rmGetCivID("XPAztec"))
+ {
+ rmPlaceObjectDefAtLoc(playerFirepitID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ }
+
+ else
+ {
+ rmPlaceObjectDefAtLoc(playerSaloonID, i, rmXMetersToFraction(xsVectorGetX(TCLoc)), rmZMetersToFraction(xsVectorGetZ(TCLoc)));
+ }
+ }
+ }
// Text
rmSetStatusText("",0.60);
@@ -465,7 +505,7 @@ void main(void)
rmSetAreaSize(smallMesaID, rmAreaTilesToFraction(1600), rmAreaTilesToFraction(1600)); //First # is minimum square meters of material it will use to build. Second # is maximum. Currently I have them both set to the same because I want a certain size mountain every time.
}
- rmSetAreaCliffType(smallMesaID, "araucania central");
+ rmSetAreaCliffType(smallMesaID, "Ozarks");
//rmAddAreaToClass(centerCliffs, rmClassID("canyon")); // Attempt to keep cliffs away from each other.
rmSetAreaCliffEdge(smallMesaID, 1, 1.0, 0.1, 1.0, 0);
rmSetAreaCliffHeight(smallMesaID, rmRandInt(4, 6), 1.0, 1.0); //was rmRandInt(6, 8)
@@ -494,7 +534,7 @@ void main(void)
rmSetAreaSize(smallMesaID2, rmAreaTilesToFraction(1600), rmAreaTilesToFraction(1600)); //First # is minimum square meters of material it will use to build. Second # is maximum. Currently I have them both set to the same because I want a certain size mountain every time.
}
- rmSetAreaCliffType(smallMesaID2, "araucania central");
+ rmSetAreaCliffType(smallMesaID2, "Ozarks");
//rmAddAreaToClass(centerCliffs, rmClassID("canyon")); // Attempt to keep cliffs away from each other.
rmSetAreaCliffEdge(smallMesaID2, 1, 1.0, 0.1, 1.0, 0);
rmSetAreaCliffHeight(smallMesaID2, rmRandInt(4, 6), 1.0, 1.0); //was rmRandInt(6, 8)
@@ -526,7 +566,7 @@ void main(void)
rmSetAreaSize(smallMesaID3, rmAreaTilesToFraction(1600), rmAreaTilesToFraction(1600)); //First # is minimum square meters of material it will use to build. Second # is maximum. Currently I have them both set to the same because I want a certain size mountain every time.
}
- rmSetAreaCliffType(smallMesaID3, "araucania central");
+ rmSetAreaCliffType(smallMesaID3, "Ozarks");
//rmAddAreaToClass(centerCliffs, rmClassID("canyon")); // Attempt to keep cliffs away from each other.
rmSetAreaCliffEdge(smallMesaID3, 1, 1.0, 0.1, 1.0, 0);
rmSetAreaCliffHeight(smallMesaID3, rmRandInt(4, 6), 1.0, 1.0); //was rmRandInt(6, 8)
@@ -847,17 +887,6 @@ void main(void)
// Text
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
-
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/painted desert.xs b/RMM/painted desert.xs
index 261b0c4..73813ac 100644
--- a/RMM/painted desert.xs
+++ b/RMM/painted desert.xs
@@ -188,6 +188,7 @@ void main(void)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 8.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
rmAddObjectDefConstraint(startingUnits, avoidStartingUnits);
@@ -781,16 +782,6 @@ rmSetStatusText("",0.4);
rmAddObjectDefConstraint(nugget4, shortAvoidImportantItem); // Added New
rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, rmRandInt(0,3));
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/pampas.xs b/RMM/pampas.xs
index ef318db..a809836 100644
--- a/RMM/pampas.xs
+++ b/RMM/pampas.xs
@@ -38,18 +38,18 @@ void main(void)
}
// *************************** MAP PARAMETERS **************************
- //int playerTiles=11000; // OLD SIZE
- int playerTiles = 10000;
+ //int playerTiles=13000; // OLD SIZE
+ int playerTiles = 12000;
if (cNumberNonGaiaPlayers >4)
- playerTiles = 8000;
+ playerTiles = 10000;
if (cNumberNonGaiaPlayers >6)
- playerTiles = 6000;
+ playerTiles = 8000;
if(cMapSize == 1)
{
playerTiles = 15000; // DAL modified from 18K
rmEchoInfo("Large map");
}
- int size=1.7*sqrt(cNumberNonGaiaPlayers*playerTiles);
+ int size=1.9*sqrt(cNumberNonGaiaPlayers*playerTiles);
int longSide=1.4*size; // 'Longside' is used to make the map rectangular
rmEchoInfo("Map size="+size+"m x "+longSide+"m");
rmSetMapSize(longSide, size);
@@ -530,8 +530,8 @@ void main(void)
//rmPlaceObjectDefPerPlayer(startSilverID, true);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
- rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmSetObjectDefMinDistance(startingUnits, 8.0);
+ rmSetObjectDefMaxDistance(startingUnits, 12.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
//rmAddObjectDefConstraint(startingUnits, avoidResource);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -1112,16 +1112,6 @@ numTries=8*cNumberNonGaiaPlayers; // DAL - 3 here, three above.
}
*/
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/patagonia.xs b/RMM/patagonia.xs
index 351a13f..4899e15 100644
--- a/RMM/patagonia.xs
+++ b/RMM/patagonia.xs
@@ -97,7 +97,7 @@ void main(void)
int whaleLand = rmCreateTerrainDistanceConstraint("whale v. land", "land", true, 20.0);
int avoidFastCoin=rmCreateTypeDistanceConstraint("fast coin avoids coin", "gold", 60.0);
int avoidFastCoinForest=rmCreateTypeDistanceConstraint("forests avoid fast coin", "gold", 10.0);
- int avoidNuggetWater=rmCreateTypeDistanceConstraint("nugget vs. nugget water", "AbstractNugget", 80.0);
+ int avoidNuggetWater=rmCreateTypeDistanceConstraint("nugget vs. nugget water", "AbstractNugget", 60.0);
int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0);
// Avoid impassable land
@@ -428,7 +428,7 @@ void main(void)
// Starting Unit placement
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
rmAddObjectDefConstraint(startingUnits, avoidAll);
@@ -780,16 +780,6 @@ void main(void)
rmClearClosestPointConstraints();
*/
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/plymouth.xs b/RMM/plymouth.xs
index 85bc232..15b196a 100644
--- a/RMM/plymouth.xs
+++ b/RMM/plymouth.xs
@@ -40,9 +40,9 @@ void main(void)
rmSetSubCiv(3, "Huron", true);
// Picks the map size
- int playerTiles = 12500;
+ int playerTiles = 11500;
if (cNumberNonGaiaPlayers >4)
- playerTiles = 11500;
+ playerTiles = 10500;
// Picks default terrain and water
rmSetSeaType("new england coast");
@@ -62,7 +62,7 @@ void main(void)
rmSetMapType("water");
rmSetWorldCircleConstraint(true);
rmSetWindMagnitude(2.0);
- rmSetLightingSet("new england");
+ rmSetLightingSet("yellow_river_dry");
rmSetMapType("grass");
// Choose mercs.
@@ -370,7 +370,7 @@ void main(void)
// Starting Unit placement
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
rmAddObjectDefConstraint(startingUnits, avoidAll);
@@ -590,7 +590,7 @@ void main(void)
// FORESTS
int forestTreeID = 0;
- numTries = 6*cNumberNonGaiaPlayers;
+ numTries = 7*cNumberNonGaiaPlayers;
failCount = 0;
for (i = 0; Northwest Territory
-
@@ -31,8 +30,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/RMM/regicidemaps.set b/RMM/regicidemaps.set
index 9d65e51..d4a22ac 100644
--- a/RMM/regicidemaps.set
+++ b/RMM/regicidemaps.set
@@ -9,4 +9,6 @@
+
+
diff --git a/RMM/rockies.xs b/RMM/rockies.xs
index f300937..d62cc4a 100644
--- a/RMM/rockies.xs
+++ b/RMM/rockies.xs
@@ -428,8 +428,9 @@ void main(void)
rmSetObjectDefMaxDistance(startingTCID, 16.0);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
- rmSetObjectDefMaxDistance(startingUnits, 8.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidStartingUnitsSmall);
int StartAreaTreeID=rmCreateObjectDef("starting trees");
@@ -757,16 +758,6 @@ void main(void)
rmPlaceObjectDefInArea(nuggetID, 0, centralValleyID, 1);
}
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/saguenay.xs b/RMM/saguenay.xs
index b4a2cb4..b083395 100644
--- a/RMM/saguenay.xs
+++ b/RMM/saguenay.xs
@@ -126,7 +126,7 @@ void main(void)
int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
int whaleLand = rmCreateTerrainDistanceConstraint("whale v. land", "land", true, 15.0);
int avoidSheep=rmCreateTypeDistanceConstraint("sheep avoids sheep", "sheep", 40.0);
- int avoidNuggetWater=rmCreateTypeDistanceConstraint("nugget vs. nugget water", "AbstractNugget", 80.0);
+ int avoidNuggetWater=rmCreateTypeDistanceConstraint("nugget vs. nugget water", "AbstractNugget", 60.0);
int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0);
// Avoid impassable land
@@ -382,8 +382,8 @@ void main(void)
// DAL OLD - player setup/starting units for non-colony-ship guys
/*
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 2.0);
- rmSetObjectDefMaxDistance(startingUnits, 4.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
// Extra crates for the starting guys.
@@ -1051,16 +1051,6 @@ void main(void)
rmPlaceObjectDefAtLoc(colonyShipID, i, 1.0, 1.0, 1);
}
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/saguenayLarge.xs b/RMM/saguenayLarge.xs
index 13390dc..7c92c83 100644
--- a/RMM/saguenayLarge.xs
+++ b/RMM/saguenayLarge.xs
@@ -378,8 +378,8 @@ void main(void)
// DAL OLD - player setup/starting units for non-colony-ship guys
/*
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 2.0);
- rmSetObjectDefMaxDistance(startingUnits, 4.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
+ rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
// Extra crates for the starting guys.
@@ -1049,16 +1049,6 @@ void main(void)
rmPlaceObjectDefAtLoc(colonyShipID, i, 1.0, 1.0, 1);
}
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <16 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/siberia.xs b/RMM/siberia.xs
index b92de53..73b4b62 100644
--- a/RMM/siberia.xs
+++ b/RMM/siberia.xs
@@ -433,7 +433,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidImpassableLand);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -634,16 +634,6 @@ void main(void)
rmAddObjectDefConstraint(nugget4, circleConstraint);
rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, rmRandInt(2,3));
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/siberiaLarge.xs b/RMM/siberiaLarge.xs
index 79fb316..b9cb217 100644
--- a/RMM/siberiaLarge.xs
+++ b/RMM/siberiaLarge.xs
@@ -433,7 +433,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidImpassableLand);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -634,16 +634,6 @@ void main(void)
rmAddObjectDefConstraint(nugget4, circleConstraint);
rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, rmRandInt(2,3));
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <16 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/siberiaRegicide.xs b/RMM/siberiaRegicide.xs
index f361f69..c5ce1ff 100644
--- a/RMM/siberiaRegicide.xs
+++ b/RMM/siberiaRegicide.xs
@@ -438,7 +438,7 @@ else if (cNumberTeams == 2)
rmAddObjectDefConstraint(startSilverID, avoidImpassableLand);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -712,16 +712,6 @@ else if (cNumberTeams == 2)
rmAddObjectDefConstraint(nugget4, circleConstraint);
rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, rmRandInt(2,3));
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <14 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/silkRoad.xs b/RMM/silkRoad.xs
index 0a049b6..4ee98f7 100644
--- a/RMM/silkRoad.xs
+++ b/RMM/silkRoad.xs
@@ -498,7 +498,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidImpassableLand);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -809,16 +809,6 @@ void main(void)
// Text
rmSetStatusText("",0.85);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/silkRoadLarge.xs b/RMM/silkRoadLarge.xs
index c2c0256..bc71ca4 100644
--- a/RMM/silkRoadLarge.xs
+++ b/RMM/silkRoadLarge.xs
@@ -498,7 +498,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidImpassableLand);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -809,16 +809,6 @@ void main(void)
// Text
rmSetStatusText("",0.85);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <16 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/sonora.xs b/RMM/sonora.xs
index 3444a41..6cc786f 100644
--- a/RMM/sonora.xs
+++ b/RMM/sonora.xs
@@ -63,11 +63,11 @@ void main(void)
// ********************* MAP PARAMETERS ************************
// Picks the map size
// int playerTiles=10000; old setting
- int playerTiles = 9000;
+ int playerTiles = 10000;
if (cNumberNonGaiaPlayers >4)
- playerTiles = 8000;
+ playerTiles = 9000;
if (cNumberNonGaiaPlayers >6)
- playerTiles = 6000;
+ playerTiles = 7000;
/*
if(cMapSize == 1)
{
@@ -148,6 +148,7 @@ void main(void)
int avoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 8.0);
int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));
int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 7.0);
// starting resources
@@ -170,6 +171,7 @@ void main(void)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 8.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
rmAddObjectDefConstraint(startingUnits, avoidStartingUnits);
@@ -345,16 +347,6 @@ if ( cNumberTeams == 2 )
// Text
rmSetStatusText("",0.8);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// ******************************* UBER MINE AT CENTER **************************************
float centerType = rmRandFloat(0.0, 1.0);
diff --git a/RMM/sonoraLarge.xs b/RMM/sonoraLarge.xs
index b6275eb..1172967 100644
--- a/RMM/sonoraLarge.xs
+++ b/RMM/sonoraLarge.xs
@@ -148,6 +148,7 @@ void main(void)
int avoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 8.0);
int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));
int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);
+ int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 7.0);
// starting resources
@@ -170,6 +171,7 @@ void main(void)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 8.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
rmAddObjectDefConstraint(startingUnits, avoidStartingUnits);
@@ -345,16 +347,6 @@ if ( cNumberTeams == 2 )
// Text
rmSetStatusText("",0.8);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// ******************************* UBER MINE AT CENTER **************************************
float centerType = rmRandFloat(0.0, 1.0);
diff --git a/RMM/texas.xs b/RMM/texas.xs
index bd58a66..6927eb5 100644
--- a/RMM/texas.xs
+++ b/RMM/texas.xs
@@ -224,14 +224,6 @@ void main(void)
rmSetObjectDefMinDistance(bisonID, 0.0);
rmSetObjectDefMaxDistance(bisonID, 5.0);
- // wood resources
- int randomTreeID=rmCreateObjectDef("random tree");
- rmAddObjectDefItem(randomTreeID, "TreeTexasDirt", 1, 0.0);
- rmSetObjectDefMinDistance(randomTreeID, 0.0);
- rmSetObjectDefMaxDistance(randomTreeID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(randomTreeID, avoidResource);
- rmAddObjectDefConstraint(randomTreeID, avoidImpassableLand);
-
// starting resources
int StartAreaTreeID=rmCreateObjectDef("starting trees");
rmAddObjectDefItem(StartAreaTreeID, "TreeTexasDirt", 1, 0.0);
@@ -428,7 +420,7 @@ void main(void)
*/
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
@@ -918,7 +910,7 @@ void main(void)
rmAddAreaToClass(cliffEastID, rmClassID("classCliff")); // Attempt to keep cliffs away from each other.
rmSetAreaCliffEdge(cliffEastID, 2, 0.4, 0.1, 1.0, 0);
rmSetAreaCliffPainting(cliffEastID, true, true, true, 1.5, true);
- rmSetAreaCliffHeight(cliffEastID, 7, 1.0, 1.0);
+ rmSetAreaCliffHeight(cliffEastID, 5, 1.0, 1.0);
rmSetAreaHeightBlend(cliffEastID, 1);
rmAddAreaTerrainLayer(cliffEastID, "texas\ground2_tex", 0, 2);
@@ -959,7 +951,7 @@ void main(void)
rmAddAreaToClass(cliffWestID, rmClassID("classCliff")); // Attempt to keep cliffs away from each other.
rmSetAreaCliffEdge(cliffWestID, 2, 0.4, 0.1, 1.0, 0);
rmSetAreaCliffPainting(cliffWestID, true, true, true, 1.5, true);
- rmSetAreaCliffHeight(cliffWestID, 7, 1.0, 1.0);
+ rmSetAreaCliffHeight(cliffWestID, 5, 1.0, 1.0);
rmSetAreaHeightBlend(cliffWestID, 1);
rmAddAreaTerrainLayer(cliffWestID, "texas\ground2_tex", 0, 2);
@@ -1140,16 +1132,6 @@ void main(void)
// */
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
@@ -1203,9 +1185,19 @@ void main(void)
// Text
rmSetStatusText("",0.80);
- /*
- rmPlaceObjectDefAtLoc(randomTreeID, 0, 0.5, 0.5, 8*cNumberNonGaiaPlayers);
- */
+ // wood resources
+ int randomTreeID=rmCreateObjectDef("random tree");
+ rmAddObjectDefItem(randomTreeID, "TreeTexasDirt", 1, 1);
+ rmSetObjectDefMinDistance(randomTreeID, 0.0);
+ rmSetObjectDefMaxDistance(randomTreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(randomTreeID, avoidAll);
+ rmAddObjectDefConstraint(randomTreeID, avoidResource);
+ rmAddObjectDefConstraint(randomTreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(randomTreeID, avoidCliffs);
+ rmAddObjectDefConstraint(randomTreeID, avoidTradeRoute);
+ rmAddObjectDefConstraint(randomTreeID, avoidCoin);
+ rmAddObjectDefConstraint(randomTreeID, forestsAvoidBison);
+ rmPlaceObjectDefAtLoc(randomTreeID, 0, 0.5, 0.5, 6*cNumberNonGaiaPlayers);
// Text
rmSetStatusText("",0.90);
diff --git a/RMM/texasLarge.xs b/RMM/texasLarge.xs
index d32cb68..0ac10ed 100644
--- a/RMM/texasLarge.xs
+++ b/RMM/texasLarge.xs
@@ -217,14 +217,6 @@ void main(void)
rmSetObjectDefMinDistance(bisonID, 0.0);
rmSetObjectDefMaxDistance(bisonID, 5.0);
- // wood resources
- int randomTreeID=rmCreateObjectDef("random tree");
- rmAddObjectDefItem(randomTreeID, "TreeTexasDirt", 1, 0.0);
- rmSetObjectDefMinDistance(randomTreeID, 0.0);
- rmSetObjectDefMaxDistance(randomTreeID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(randomTreeID, avoidResource);
- rmAddObjectDefConstraint(randomTreeID, avoidImpassableLand);
-
// starting resources
int StartAreaTreeID=rmCreateObjectDef("starting trees");
rmAddObjectDefItem(StartAreaTreeID, "TreeTexasDirt", 1, 0.0);
@@ -421,7 +413,7 @@ void main(void)
*/
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
@@ -910,7 +902,7 @@ void main(void)
rmAddAreaToClass(cliffEastID, rmClassID("classCliff")); // Attempt to keep cliffs away from each other.
rmSetAreaCliffEdge(cliffEastID, 2, 0.4, 0.1, 1.0, 0);
rmSetAreaCliffPainting(cliffEastID, true, true, true, 1.5, true);
- rmSetAreaCliffHeight(cliffEastID, 7, 1.0, 1.0);
+ rmSetAreaCliffHeight(cliffEastID, 5, 1.0, 1.0);
rmSetAreaHeightBlend(cliffEastID, 1);
rmAddAreaTerrainLayer(cliffEastID, "texas\ground2_tex", 0, 2);
@@ -951,7 +943,7 @@ void main(void)
rmAddAreaToClass(cliffWestID, rmClassID("classCliff")); // Attempt to keep cliffs away from each other.
rmSetAreaCliffEdge(cliffWestID, 2, 0.4, 0.1, 1.0, 0);
rmSetAreaCliffPainting(cliffWestID, true, true, true, 1.5, true);
- rmSetAreaCliffHeight(cliffWestID, 7, 1.0, 1.0);
+ rmSetAreaCliffHeight(cliffWestID, 5, 1.0, 1.0);
rmSetAreaHeightBlend(cliffWestID, 1);
rmAddAreaTerrainLayer(cliffWestID, "texas\ground2_tex", 0, 2);
@@ -1132,16 +1124,6 @@ void main(void)
// */
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <16 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
@@ -1201,9 +1183,17 @@ void main(void)
// Text
rmSetStatusText("",0.80);
- /*
- rmPlaceObjectDefAtLoc(randomTreeID, 0, 0.5, 0.5, 8*cNumberNonGaiaPlayers);
- */
+ // wood resources
+ int randomTreeID=rmCreateObjectDef("random tree");
+ rmAddObjectDefItem(randomTreeID, "TreeTexasDirt", 2, 4.0);
+ rmSetObjectDefMinDistance(randomTreeID, 0.0);
+ rmSetObjectDefMaxDistance(randomTreeID, rmXFractionToMeters(0.5));
+ rmAddObjectDefConstraint(randomTreeID, avoidAll);
+ rmAddObjectDefConstraint(randomTreeID, avoidResource);
+ rmAddObjectDefConstraint(randomTreeID, avoidImpassableLand);
+ rmAddObjectDefConstraint(randomTreeID, avoidCliffs);
+ rmAddObjectDefConstraint(randomTreeID, avoidTradeRoute);
+ rmPlaceObjectDefAtLoc(randomTreeID, 0, 0.5, 0.5, 8*cNumberNonGaiaPlayers);
// Text
rmSetStatusText("",0.90);
diff --git a/RMM/unknown.xs b/RMM/unknown.xs
deleted file mode 100644
index 04f9b7f..0000000
--- a/RMM/unknown.xs
+++ /dev/null
@@ -1,1573 +0,0 @@
-// Land Unknown adapted to Rocket
-// ver 11 Jan 2005
-
-include "ypAsianInclude.xs";
-include "ypKOTHInclude.xs";
-
-void main(void)
-{
-
- // Text
- rmSetStatusText("",0.01);
-
- // Set size.
-
- int playerTiles=12000;
-
- if(rmRandFloat(0,1) > 0.25)
- {
- playerTiles=16000;
- rmEchoInfo("Extra large map");
- }
- int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
- rmEchoInfo("Map size="+size+"m x "+size+"m");
- rmSetMapSize(size, size);
- rmSetMapElevationParameters(cElevTurbulence, 0.02, rmRandFloat(2, 4), 0.7, 8.0);
-
-// ============= Base terrain =============
-
- float baseTerrain = rmRandFloat(0,1);
- int amazonMap = -1;
- int carolinaMap = -1;
- int saguenayMap = -1;
- int rockiesMap = -1;
- int sonoraMap = -1;
- string riverName = "";
- string oceanName = "";
- string pondName = "";
- string cliffName = "";
- string forestName = "";
- string landName = "";
- string treeName = "";
- string critterOneName = "";
- string critterTwoName = "";
- string livestockName = "";
- string fishName = "";
- string whaleName = "";
-
- if(baseTerrain < 0.2)
- {
- rmEchoInfo("Amazon terrain");
- amazonMap = 1;
- rmSetBaseTerrainMix("amazon grass");
- rmTerrainInitialize("pampas\ground5_pam", 6);
- rmSetMapType("yucatan");
- rmSetMapType("tropical");
- rmSetMapType("land");
- rmSetLightingSet("amazon");
- riverName = "Amazon River";
- oceanName = "Amazon River Basin";
- pondName = "Bayou";
- cliffName = "Amazon";
- forestName = "Amazon Rain Forest";
- landName = "amazon grass";
- treeName = "treeAmazon";
- critterOneName = "capybara";
- critterTwoName = "tapir";
- livestockName = "cow";
- fishName = "fishMahi";
- whaleName = "humpbackWhale";
- }
-
- else if(baseTerrain < 0.4)
- {
- rmEchoInfo("Carolina terrain");
- carolinaMap = 1;
- rmSetBaseTerrainMix("carolina_grass");
- rmTerrainInitialize("pampas\ground5_pam", 6);
- rmSetMapType("carolina");
- rmSetMapType("grass");
- rmSetMapType("land");
- rmSetLightingSet("carolina");
- riverName = "Pampas River";
- oceanName = "Atlantic Coast";
- pondName = "Texas Pond";
- cliffName = "Carolina Inland";
- forestName = "Carolina Pine Forest";
- landName = "carolina_grass";
- treeName = "treeCarolinaGrass";
- critterOneName = "turkey";
- critterTwoName = "deer";
- livestockName = "sheep";
- fishName = "fishCod";
- whaleName = "humpbackWhale";
- }
-
- else if(baseTerrain < 0.6)
- {
- rmEchoInfo("Saguenay terrain");
- saguenayMap = 1;
- rmSetBaseTerrainMix("saguenay tundra");
- rmTerrainInitialize("saguenay\ground1_sag",6);
- rmSetMapType("saguenay");
- rmSetMapType("grass");
- rmSetMapType("land");
- rmSetLightingSet("saguenay");
- riverName = "Amazon River";
- oceanName = "Hudson Bay";
- pondName = "Saguenay Lake";
- cliffName = "New England Inland";
- forestName = "Saguenay Forest";
- landName = "saguenay tundra";
- treeName = "treeSaguenay";
- critterOneName = "elk";
- critterTwoName = "moose";
- livestockName = "sheep";
- fishName = "fishSalmon";
- whaleName = "minkeWhale";
- }
-
- else if(baseTerrain < 0.8)
- {
- rmEchoInfo("Rockies terrain");
- rockiesMap = 1;
- rmSetBaseTerrainMix("rockies_snow");
- rmTerrainInitialize("rockies\groundsnow1_roc", 6);
- rmSetMapType("rockies");
- rmSetMapType("land");
- rmSetLightingSet("rockies");
- riverName = "Yukon River";
- oceanName = "Great Lakes Ice";
- pondName = "Great Lakes Ice";
- cliffName = "Rocky Mountain2";
- forestName = "Rockies Snow Forest";
- landName = "rockies_snow";
- treeName = "treeRockies";
- critterOneName = "caribou";
- critterTwoName = "muskOx";
- livestockName = "cow";
- fishName = "fishSardine";
- whaleName = "beluga";
- }
-
- else
- {
- rmEchoInfo("Sonora terrain");
- sonoraMap = 1;
- rmSetBaseTerrainMix("sonora_dirt");
- rmTerrainInitialize("sonora\ground2_son", 6);
- rmSetMapType("sonora");
- rmSetMapType("grass");
- rmSetMapType("land");
- rmSetLightingSet("Sonora");
- riverName = "Pampas River";
- oceanName = "Great Lakes";
- pondName = "Great Lakes";
- cliffName = "Sonora";
- forestName = "Sonora Forest";
- landName = "sonora_dirt";
- treeName = "treeSonora";
- critterOneName = "turkey";
- critterTwoName = "rhea";
- livestockName = "llama";
- fishName = "fishTarpon";
- whaleName = "humpbackWhale";
-
- }
-
- // Text
- rmSetStatusText("", 0.1);
-
-
-
-// ============= Classes =============
-
- int classPlayer=rmDefineClass("player");
- int classNatives=rmDefineClass("natives");
- int classCanyon=rmDefineClass("canyon");
- int pondClass=rmDefineClass("pond");
- rmDefineClass("startingUnit");
- rmDefineClass("classForest");
-
-
-
-// ============= Constraints =============
-
- int avoidImpassableLand = rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 24.0);
- int playerAvoidImpassableLand = rmCreateTerrainDistanceConstraint("player avoid impassable land", "Land", false, 18.0);
- int mediumAvoidImpassableLand = rmCreateTerrainDistanceConstraint("slightly avoid impassable", "Land", false, 12.0);
- int shortAvoidImpassableLand = rmCreateTerrainDistanceConstraint("just barely avoid impassable", "Land", false, 4.0);
- int TCAvoidImpassableLand = rmCreateTerrainDistanceConstraint("TCs vs impassable land", "Land", false, 8.0);
- int avoidPlayers = rmCreateClassDistanceConstraint("stay away from players medium", classPlayer, 15.0);
- int avoidPlayersFar = rmCreateClassDistanceConstraint("stay away from players far", classPlayer, 50.0);
- int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 10.0);
- int avoidTradeRouteSocket = rmCreateTypeDistanceConstraint("avoid trade route sockets", "sockettraderoute", 15.0);
- int avoidNatives = rmCreateClassDistanceConstraint("stay away from natives", classNatives, 60.0);
- int nativesAvoidPlayers = rmCreateClassDistanceConstraint("natives vs. players", classPlayer, 50.0);
- int edgeConstraint=rmCreatePieConstraint("continent avoids edge", 0.5, 0.5, 0, rmGetMapXSize()-30, 0, 0, 0);
- int avoidCanyon = rmCreateClassDistanceConstraint("don't place on mesa where you can't path", classCanyon, 2.0);
- int pondConstraint=rmCreateClassDistanceConstraint("ponds avoid ponds", rmClassID("pond"), 30.0);
- int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 20.0);
- int avoidTC=rmCreateTypeDistanceConstraint("vs. TC", "TownCenter", 20.0);
- int avoidCW=rmCreateTypeDistanceConstraint("vs. CW", "CoveredWagon", 20.0);
- int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "abstractNugget", 30.0);
- int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "abstractFish", 10.0);
- int whaleVsWhaleID=rmCreateTypeDistanceConstraint("whale v whale", "abstractWhale", 25.0);
- int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
- int whaleLand = rmCreateTerrainDistanceConstraint("whale v. land", "land", true, 20.0);
- int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 20);
- int avoidFood = rmCreateTypeDistanceConstraint("food avoids food", "food", 40.0);
- int avoidSilver = rmCreateTypeDistanceConstraint("fast coin avoids coin", "gold", 40.0);
- int avoidNuggetWater=rmCreateTypeDistanceConstraint("nugget vs. nugget water", "AbstractNugget", 80.0);
- int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0);
-
- int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 4.0);
-
-
-
-// ============= Land and Water Configuration =============
-
- int allLand = 1;
- int riverExists = -1;
- int oceanMiddle = -1;
- int oceanOffCenter = -1;
- int oceanRing = -1;
- int plateauMiddle = -1;
- int forestMiddle = -1;
- int blockedMiddle = -1; // used to determine if trade route should be a circle
-
- float landConfig = rmRandFloat(0,1);
-
-// temp for testing XXXXXXXXXXXXXXXXXXXXX
-
- //~ landConfig = 0.95;
- if(rmGetIsKOTH()){
-
- if(landConfig < 0.5)
- landConfig = rmRandFloat(0, 0.34);
-
- else
- landConfig = rmRandFloat(0.54, 0.78);
- }
-
-// ============= Land Only =============
- if(landConfig < 0.25)
- rmEchoInfo("just land");
-
-// ============= River Across Middle =============
- else if(landConfig < 0.35)
- {
- rmEchoInfo("river exists");
- allLand = -1;
- riverExists = 1;
- int unknownRiver = rmRiverCreate(-1, riverName, 30, 15, 5, 8);
- float riverPosition = rmRandFloat(0,1);
-
- // Spin river randomly around the edge
- if(riverPosition < 0.12)
- rmRiverSetConnections(unknownRiver, 0.0, 0.5, 1.0, 0.5);
- else if(riverPosition < 0.24)
- rmRiverSetConnections(unknownRiver, 0.0, 0.0, 1.0, 1.0);
- else if(riverPosition < 0.36)
- rmRiverSetConnections(unknownRiver, 0.5, 0.0, 0.5, 1.0);
- else if(riverPosition < 0.48)
- rmRiverSetConnections(unknownRiver, 0.0, 1.0, 1.0, 0.0);
- else if(riverPosition < 0.60)
- rmRiverSetConnections(unknownRiver, 0.0, 0.25, 1.0, 0.75);
- else if(riverPosition < 0.72)
- rmRiverSetConnections(unknownRiver, 0.0, 0.75, 1.0, 0.25);
- else if(riverPosition < 0.84)
- rmRiverSetConnections(unknownRiver, 0.25, 0.0, 0.75, 1.0);
- else
- rmRiverSetConnections(unknownRiver, 0.75, 0.0, 0.25, 1.0);
-
- // River always has 2 shallows and usually 3
- rmRiverSetShallowRadius(unknownRiver, rmRandInt(10, 12));
- rmRiverAddShallow(unknownRiver, rmRandFloat(0.1, 0.35));
-
- if(rmRandFloat(0,1) < 0.66)
- {
- rmRiverSetShallowRadius(unknownRiver, rmRandInt(10, 12));
- rmRiverAddShallow(unknownRiver, 0.5);
- }
-
- rmRiverSetShallowRadius(unknownRiver, rmRandInt(10, 12));
- rmRiverAddShallow(unknownRiver, rmRandFloat(0.65, 0.95));
- rmRiverSetBankNoiseParams(unknownRiver, 0.07, 2, 1.5, 10.0, 0.667, 3.0);
-
- rmRiverBuild(unknownRiver);
- }
-
-// ============= Great Lakes Style Ocean =============
- else if(landConfig < 0.53)
- {
- rmEchoInfo("ocean in middle");
- allLand = -1;
- oceanMiddle = 1;
- blockedMiddle = 1;
-
- // But don't build ocean every single time
- if(rmRandFloat(0,1) < 0.9)
- {
- int lakeOfTheUnknown=rmCreateArea("big lake in middle");
- rmSetAreaWaterType(lakeOfTheUnknown, oceanName);
- if(rmRandFloat(0,1) < 0.6)
- {
- rmSetAreaSize(lakeOfTheUnknown, 0.07, 0.15);
- rmEchoInfo("larger lake");
- }
- else
- {
- rmSetAreaSize(lakeOfTheUnknown, 0.02, 0.05);
- rmEchoInfo("smaller lake");
- }
- rmSetAreaLocation(lakeOfTheUnknown, 0.5, 0.5);
- rmAddAreaConstraint(lakeOfTheUnknown, avoidPlayers);
- rmSetAreaSmoothDistance(lakeOfTheUnknown, 50);
- rmSetAreaCoherence(lakeOfTheUnknown, 0.25);
- }
- }
-
-// Build the lake later to avoid players
-
-// ============= Saguenay Style Ocean =============
- else if(landConfig < 0.64)
- {
- rmEchoInfo("ocean off center");
- allLand = -1;
- oceanOffCenter = 1;
- float bayPosition = rmRandFloat(0,1);
- int unknownBay=rmCreateArea("big bay on edge");
- rmSetAreaWaterType(unknownBay, oceanName);
- rmSetAreaWarnFailure(unknownBay, false);
- rmSetAreaSize(unknownBay, 0.08, 0.15);
-
- // Spin bay randomly around the edge
- if(bayPosition < 0.12)
- rmSetAreaLocation(unknownBay, 0.0, 0.0);
- else if(bayPosition < 0.24)
- rmSetAreaLocation(unknownBay, 0.0, 0.5);
- else if(bayPosition < 0.36)
- rmSetAreaLocation(unknownBay, 0.0, 1.0);
- else if(bayPosition < 0.48)
- rmSetAreaLocation(unknownBay, 0.5, 1.0);
- else if(bayPosition < 0.60)
- rmSetAreaLocation(unknownBay, 1.0, 1.0);
- else if(bayPosition < 0.72)
- rmSetAreaLocation(unknownBay, 1.0, 0.5);
- else if(bayPosition < 0.84)
- rmSetAreaLocation(unknownBay, 1.0, 0.0);
- else
- rmSetAreaLocation(unknownBay, 0.5, 0.0);
-
- rmSetAreaObeyWorldCircleConstraint(unknownBay, false);
- rmAddAreaConstraint(unknownBay, avoidPlayers);
- rmSetAreaSmoothDistance(unknownBay, 50);
- rmSetAreaCoherence(unknownBay, 0.15);
- }
-
- // Build bay later to avoid players
-
-// ============= Midgard Style Ocean =============
- else if(landConfig < 0.80)
- {
- rmEchoInfo("ocean ring");
- allLand = -1;
- oceanRing = 1;
-
- int worldOcean=rmCreateArea("ocean that covers whole map");
- rmSetAreaWaterType(worldOcean, oceanName);
- rmSetAreaSize(worldOcean, 1, 1);
- rmSetAreaLocation(worldOcean, 0.5, 0.5);
- rmSetAreaWarnFailure(worldOcean, false);
- rmSetAreaObeyWorldCircleConstraint(worldOcean, false);
- rmBuildArea(worldOcean);
-
- int continent=rmCreateArea("island continent in ocean");
- rmSetAreaMix(continent, landName);
- rmSetAreaElevationType(continent, cElevTurbulence);
- rmSetAreaElevationVariation(continent, 4.0);
- rmSetAreaBaseHeight(continent, 3.5);
- rmSetAreaElevationMinFrequency(continent, 0.09);
- rmSetAreaElevationOctaves(continent, 3);
- rmSetAreaElevationPersistence(continent, 0.2);
- rmSetAreaElevationNoiseBias(continent, 1);
- rmSetAreaSize(continent, 0.32, 0.32);
- rmSetAreaLocation(continent, 0.5, 0.5);
- rmSetAreaSmoothDistance(continent, 50);
- rmSetAreaCoherence(continent, 0.25);
- rmAddAreaConstraint(continent, edgeConstraint);
- rmBuildArea(continent);
- }
-
-// ============= Sonora Style Plateau / Canyon =============
- else if(landConfig < 0.90)
- {
- rmEchoInfo("plateau in middle");
- allLand = -1;
- plateauMiddle = 1;
- blockedMiddle = 1;
- int centerMesa=rmCreateArea("large mesa or canyon in middle");
- rmSetAreaSize(centerMesa, 0.05, 0.12);
- rmSetAreaCliffType(centerMesa, cliffName);
-
- if(rmRandFloat(0,1) < 0.8)
- {
- rmSetAreaCliffEdge(centerMesa, 1, 1.0, 0.1, 1.0, 0);
- rmAddAreaToClass(centerMesa, classCanyon);
- rmEchoInfo("no ramps");
- }
- else
- {
- rmSetAreaCliffEdge(centerMesa, 4, 0.2, 0.0, 1.0, 0);
- rmEchoInfo("ramps");
- }
- if(rmRandFloat(0,1) < 0.6)
- rmSetAreaCliffHeight(centerMesa, rmRandInt(6,8), 1.0, 1.0);
- else
- rmSetAreaCliffHeight(centerMesa, rmRandInt(-8,-6), 1.0, 1.0);
- rmSetAreaMinBlobs(centerMesa, 3);
- rmSetAreaMaxBlobs(centerMesa, 5);
- rmSetAreaMinBlobDistance(centerMesa, 3.0);
- rmSetAreaMaxBlobDistance(centerMesa, 5.0);
- rmSetAreaCoherence(centerMesa, 0.3);
- rmSetAreaLocation(centerMesa, 0.5, 0.5);
- rmSetAreaSmoothDistance(centerMesa, 20);
- rmAddAreaConstraint(centerMesa, avoidPlayers);
- }
-
-// Build canyon later to avoid players
-
-// ============= Oasis Style Forest =============
- else
- {
- rmEchoInfo("forest in middle");
- allLand = -1;
- forestMiddle = 1;
- int greatUnknownForest=rmCreateArea("large central forest");
- rmSetAreaWarnFailure(greatUnknownForest, false);
- rmSetAreaSize(greatUnknownForest, 0.08, 0.08);
- rmSetAreaForestType(greatUnknownForest, forestName);
- rmSetAreaForestDensity(greatUnknownForest, 0.8);
- rmSetAreaForestClumpiness(greatUnknownForest, 0.6);
- rmSetAreaForestUnderbrush(greatUnknownForest, 0.0);
- rmSetAreaMinBlobs(greatUnknownForest, 1);
- rmSetAreaMaxBlobs(greatUnknownForest, 5);
- rmSetAreaMinBlobDistance(greatUnknownForest, 16.0);
- rmSetAreaMaxBlobDistance(greatUnknownForest, 70.0);
- rmSetAreaCoherence(greatUnknownForest, 0.15);
- rmSetAreaSmoothDistance(greatUnknownForest, 0);
- rmAddAreaToClass(greatUnknownForest, rmClassID("classForest"));
- rmSetAreaLocation(greatUnknownForest, 0.5, 0.5);
- rmAddAreaConstraint(greatUnknownForest, avoidPlayers);
- }
-
-// Build forest later to avoid players
-
-
- // Text
- rmSetStatusText("", 0.2);
-
-
-// ============= Player Configurations =============
-
-// Sometimes teams closer together
-
- if (riverExists == 1)
- {
- rmSetTeamSpacingModifier(1.0);
- rmEchoInfo("Teams spaced normal because of river");
- }
- else if (rmRandFloat(0,1) < 0.33)
- {
- rmSetTeamSpacingModifier(0.50);
- rmEchoInfo("Teams close together");
- }
- else if (rmRandFloat(0,1) < 0.33)
- {
- rmSetTeamSpacingModifier(0.25);
- rmEchoInfo("Teams very close together");
- }
- else
- rmEchoInfo("Teams spaced normal");
-
-
- if (oceanMiddle == 1)
- {
- rmPlacePlayersCircular(0.38, 0.40, 0);
- rmEchoInfo("players nearer edge because ocean in middle");
- }
- else if(oceanRing == 1)
- {
- rmPlacePlayersCircular(0.25, 0.25, 0);
- rmEchoInfo("players very far from edge because of continent");
- }
- else if(oceanOffCenter == 1)
- {
- rmPlacePlayersCircular(0.25, 0.25, 0);
- rmEchoInfo("players very far from edge because of off center bay");
- }
- else
- {
- rmPlacePlayersCircular(0.27, 0.40, 0);
- rmEchoInfo("players can be farther from edge");
- }
-
-
- float playerFraction = rmAreaTilesToFraction(1000);
-
- for(i=1; 2 )
- {
- rmSetObjectDefMaxDistance(startingTCID, 30.0);
- }
- rmAddObjectDefConstraint(startingTCID, TCAvoidImpassableLand);
- rmAddObjectDefConstraint(startingTCID, avoidTradeRoute);
- rmAddObjectDefConstraint(startingTCID, avoidTradeRouteSocket);
- rmAddObjectDefToClass(startingTCID, rmClassID("player"));
-
- int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
- rmSetObjectDefMaxDistance(startingUnits, 12.0);
- rmAddObjectDefConstraint(startingUnits, shortAvoidImpassableLand);
- rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
-
-// Place Starting Units now so other stuff can avoid them
- for(i=1; 0.4)
- numTries = 8*cNumberNonGaiaPlayers;
- }
- else if(plateauMiddle == 1) // might have lots of cliffs if center mesa
- {
- if(rmRandFloat(0,1) > 0.7)
- numTries = 8*cNumberNonGaiaPlayers;
- }
- else
- {
- numTries = 4*cNumberNonGaiaPlayers;
- }
-
- if(rmRandFloat(0,1) < 0.40) // only do cliffs 40% of the time in any case
- {
- for(i=0; 0.9)
- {
- numTries = 3*cNumberNonGaiaPlayers;
- rmEchoInfo("sparse forests");
- sparseForests = 1;
- }
-
- for (i=0; 0.4)
- rmPlaceObjectDefAtLoc(playerSilverID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusSilverChance > 0.8)
- rmPlaceObjectDefAtLoc(playerSilverID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // TREES
- // Have 4-6 trees, unless sparse
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusTreeChance > 0.5)
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusTreeChance > 0.8)
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- // If sparse forests, add extra trees
- if (sparseForests == 1)
- {
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- }
-
- // NUGGETS
- // Always 1 of type I. Can have +1 or +2 of type I and +1 or +2 of type II
- rmPlaceObjectDefAtLoc(nugget1, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance1 > 0.5)
- rmPlaceObjectDefAtLoc(nugget1, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance1 > 0.9)
- rmPlaceObjectDefAtLoc(nugget1, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance2 > 0.8)
- rmPlaceObjectDefAtLoc(nugget2, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance2 > 0.95)
- rmPlaceObjectDefAtLoc(nugget2, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // FOOD
- // Always 1 near and 1 far. Sometimes +1 or +2 far.
- rmPlaceObjectDefAtLoc(nearDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(farDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusFoodChance > 0.70)
- rmPlaceObjectDefAtLoc(farDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusFoodChance > 0.90)
- rmPlaceObjectDefAtLoc(farDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // BERRIES
- // 30% of the time
- if (berryChance > 0.7)
- rmPlaceObjectDefAtLoc(playerBerryID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
-
- // Monastery
- if(ypIsAsian(i) && rmGetNomadStart() == false)
- rmPlaceObjectDefAtLoc(ypMonasteryBuilder(i, 1), i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // WATER FLAG
- if (placeWaterFlag == 1)
- rmPlaceObjectDefAtLoc(waterFlagID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- }
-
-
- // Text
- rmSetStatusText("", 0.9);
-
-
-// ============= Other Resources =============
-
-// Silver
-
- int silverID = -1;
- int silverCount = (cNumberNonGaiaPlayers*2 + rmRandInt(3,6));
- rmEchoInfo("silver count = "+silverCount);
-
- for(i=0; < silverCount)
- {
- silverID = rmCreateObjectDef("silver "+i);
- rmAddObjectDefItem(silverID, "mine", 1, 0.0);
- rmSetObjectDefMinDistance(silverID, 0.0);
- rmSetObjectDefMaxDistance(silverID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(silverID, avoidSilver);
- rmAddObjectDefConstraint(silverID, avoidAll);
- if(oceanRing == 1)
- rmAddObjectDefConstraint(silverID, avoidPlayers);
- else
- rmAddObjectDefConstraint(silverID, avoidPlayersFar);
- rmAddObjectDefConstraint(silverID, avoidImpassableLand);
- rmAddObjectDefConstraint(silverID, avoidTradeRoute);
- rmPlaceObjectDefAtLoc(silverID, 0, 0.5, 0.5);
- }
-
-// Livestock
-
- int sheepID=rmCreateObjectDef("livestock");
- rmAddObjectDefItem(sheepID, livestockName, 2, 4.0);
- rmSetObjectDefMinDistance(sheepID, 0.0);
- rmSetObjectDefMaxDistance(sheepID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(sheepID, avoidFood);
- rmAddObjectDefConstraint(sheepID, avoidAll);
- if(oceanRing == 1)
- rmAddObjectDefConstraint(sheepID, avoidPlayers);
- else
- rmAddObjectDefConstraint(sheepID, avoidPlayersFar);
- rmAddObjectDefConstraint(sheepID, avoidCanyon);
- rmAddObjectDefConstraint(sheepID, avoidImpassableLand);
- if(rmRandFloat(0,1) > 0.85)
- rmPlaceObjectDefAtLoc(sheepID, 0, 0.5, 0.5, cNumberNonGaiaPlayers*2);
-
-// Treasures
-
- int nugget3= rmCreateObjectDef("nugget hard");
- rmAddObjectDefItem(nugget3, "Nugget", 1, 0.0);
- rmSetNuggetDifficulty(3, 3);
- rmSetObjectDefMinDistance(nugget3, 0.0);
- rmSetObjectDefMaxDistance(nugget3, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(nugget3, shortAvoidImpassableLand);
- rmAddObjectDefConstraint(nugget3, avoidNugget);
- rmAddObjectDefConstraint(nugget3, avoidPlayersFar);
- rmAddObjectDefConstraint(nugget3, avoidTradeRoute);
- rmAddObjectDefConstraint(nugget3, avoidAll);
- if(rmRandFloat(0,1) < 0.7)
- rmPlaceObjectDefAtLoc(nugget3, 0, 0.5, 0.5, cNumberNonGaiaPlayers);
- else
- rmPlaceObjectDefAtLoc(nugget3, 0, 0.5, 0.5, cNumberNonGaiaPlayers*rmRandInt(2,4));
-
- if (rmRandFloat(0,1) > 0.9)
- {
- int nugget4= rmCreateObjectDef("nugget nuts");
- rmAddObjectDefItem(nugget4, "Nugget", 1, 0.0);
- rmSetNuggetDifficulty(4, 4);
- rmSetObjectDefMinDistance(nugget4, 0.0);
- rmSetObjectDefMaxDistance(nugget4, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(nugget4, shortAvoidImpassableLand);
- rmAddObjectDefConstraint(nugget4, avoidNugget);
- rmAddObjectDefConstraint(nugget4, avoidPlayersFar);
- rmAddObjectDefConstraint(nugget4, avoidTradeRoute);
- rmAddObjectDefConstraint(nugget4, avoidAll);
- rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, rmRandInt(0,5));
- }
-
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
-
- // check for KOTH game mode
- if(rmGetIsKOTH()) {
-
- int randLoc = rmRandInt(1,3);
- float xLoc = 0.5;
- float yLoc = 0.5;
- float walk = 0.05;
-
- //~ if(randLoc == 1 && blockedMiddle != 1)
- //~ yLoc = .5;
-
- //~ if(cNumberTeams > 2 && blockedMiddle != 1) {
- //~ yLoc = rmRandFloat(.25, .75);
- //~ walk = 0.25;
- //~ }
-
- //~ else if(cNumberTeams > 2){
- //~ yLoc = .3;
- //~ walk = 0.5;
- //~ }
-
- ypKingsHillPlacer(xLoc, yLoc, walk, avoidCanyon);
- rmEchoInfo("XLOC = "+xLoc);
- rmEchoInfo("XLOC = "+yLoc);
- }
-
- // Water nuggets
-
- 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, avoidLand);
- rmAddObjectDefConstraint(nuggetW, avoidNuggetWater);
- rmPlaceObjectDefAtLoc(nuggetW, 0, 0.5, 0.5, cNumberNonGaiaPlayers*4);
-
- // Text
- rmSetStatusText("",0.99);
-
-// add fish if ocean
- if (placeWaterFlag == 1)
- {
- int fishID=rmCreateObjectDef("fish");
- rmAddObjectDefItem(fishID, fishName, 1, 0.0);
- rmSetObjectDefMinDistance(fishID, 0.0);
- rmSetObjectDefMaxDistance(fishID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(fishID, fishVsFishID);
- rmAddObjectDefConstraint(fishID, fishLand);
- rmPlaceObjectDefAtLoc(fishID, 0, 0.5, 0.5, 6*cNumberNonGaiaPlayers);
-
- int whaleID=rmCreateObjectDef("whale");
- rmAddObjectDefItem(whaleID, whaleName, 1, 9.0);
- rmSetObjectDefMinDistance(whaleID, 0.0);
- rmSetObjectDefMaxDistance(whaleID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(whaleID, whaleVsWhaleID);
- rmAddObjectDefConstraint(whaleID, whaleLand);
- if(rmRandFloat(0,1) < 0.5)
- rmPlaceObjectDefAtLoc(whaleID, 0, 0.5, 0.5, 3*cNumberNonGaiaPlayers);
- }
-
- // Text
- rmSetStatusText("",1.0);
-
- // DONE!!!!
-
-
-}
\ No newline at end of file
diff --git a/RMM/unknownstranded.xs b/RMM/unknownstranded.xs
deleted file mode 100644
index 02ab893..0000000
--- a/RMM/unknownstranded.xs
+++ /dev/null
@@ -1,1583 +0,0 @@
-// Land Unknown adapted to Rocket
-// ver 11 Jan 2005
-
-include "ypAsianInclude.xs";
-include "ypKOTHInclude.xs";
-
-void main(void)
-{
-
- // Text
- rmSetStatusText("",0.01);
-
- // Set size.
-
- int playerTiles=12000;
-
- if(rmRandFloat(0,1) > 0.25)
- {
- playerTiles=16000;
- rmEchoInfo("Extra large map");
- }
- int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
- rmEchoInfo("Map size="+size+"m x "+size+"m");
- rmSetMapSize(size, size);
- rmSetMapElevationParameters(cElevTurbulence, 0.02, rmRandFloat(2, 4), 0.7, 8.0);
-
-// ============= Base terrain =============
-
- float baseTerrain = rmRandFloat(0,1);
- int amazonMap = -1;
- int carolinaMap = -1;
- int saguenayMap = -1;
- int rockiesMap = -1;
- int sonoraMap = -1;
- string riverName = "";
- string oceanName = "";
- string pondName = "";
- string cliffName = "";
- string forestName = "";
- string landName = "";
- string treeName = "";
- string critterOneName = "";
- string critterTwoName = "";
- string livestockName = "";
- string fishName = "";
- string whaleName = "";
-
- if(baseTerrain < 0.2)
- {
- rmEchoInfo("Amazon terrain");
- amazonMap = 1;
- rmSetBaseTerrainMix("amazon grass");
- rmTerrainInitialize("pampas\ground5_pam", 6);
- rmSetMapType("yucatan");
- rmSetMapType("tropical");
- rmSetMapType("land");
- rmSetLightingSet("amazon");
- riverName = "Amazon River";
- oceanName = "Amazon River Basin";
- pondName = "Bayou";
- cliffName = "Amazon";
- forestName = "Amazon Rain Forest";
- landName = "amazon grass";
- treeName = "treeAmazon";
- critterOneName = "capybara";
- critterTwoName = "tapir";
- livestockName = "cow";
- fishName = "fishMahi";
- whaleName = "humpbackWhale";
- }
-
- else if(baseTerrain < 0.4)
- {
- rmEchoInfo("Carolina terrain");
- carolinaMap = 1;
- rmSetBaseTerrainMix("carolina_grass");
- rmTerrainInitialize("pampas\ground5_pam", 6);
- rmSetMapType("carolina");
- rmSetMapType("grass");
- rmSetMapType("land");
- rmSetLightingSet("carolina");
- riverName = "Pampas River";
- oceanName = "Atlantic Coast";
- pondName = "Texas Pond";
- cliffName = "Carolina Inland";
- forestName = "Carolina Pine Forest";
- landName = "carolina_grass";
- treeName = "treeCarolinaGrass";
- critterOneName = "turkey";
- critterTwoName = "deer";
- livestockName = "sheep";
- fishName = "fishCod";
- whaleName = "humpbackWhale";
- }
-
- else if(baseTerrain < 0.6)
- {
- rmEchoInfo("Saguenay terrain");
- saguenayMap = 1;
- rmSetBaseTerrainMix("saguenay tundra");
- rmTerrainInitialize("saguenay\ground1_sag",6);
- rmSetMapType("saguenay");
- rmSetMapType("grass");
- rmSetMapType("land");
- rmSetLightingSet("saguenay");
- riverName = "Amazon River";
- oceanName = "Hudson Bay";
- pondName = "Saguenay Lake";
- cliffName = "New England Inland";
- forestName = "Saguenay Forest";
- landName = "saguenay tundra";
- treeName = "treeSaguenay";
- critterOneName = "elk";
- critterTwoName = "moose";
- livestockName = "sheep";
- fishName = "fishSalmon";
- whaleName = "minkeWhale";
- }
-
- else if(baseTerrain < 0.8)
- {
- rmEchoInfo("Rockies terrain");
- rockiesMap = 1;
- rmSetBaseTerrainMix("rockies_snow");
- rmTerrainInitialize("rockies\groundsnow1_roc", 6);
- rmSetMapType("rockies");
- rmSetMapType("land");
- rmSetLightingSet("rockies");
- riverName = "Yukon River";
- oceanName = "Great Lakes Ice";
- pondName = "Great Lakes Ice";
- cliffName = "Rocky Mountain2";
- forestName = "Rockies Snow Forest";
- landName = "rockies_snow";
- treeName = "treeRockies";
- critterOneName = "caribou";
- critterTwoName = "muskOx";
- livestockName = "cow";
- fishName = "fishSardine";
- whaleName = "beluga";
- }
-
- else
- {
- rmEchoInfo("Sonora terrain");
- sonoraMap = 1;
- rmSetBaseTerrainMix("sonora_dirt");
- rmTerrainInitialize("sonora\ground2_son", 6);
- rmSetMapType("sonora");
- rmSetMapType("grass");
- rmSetMapType("land");
- rmSetLightingSet("Sonora");
- riverName = "Pampas River";
- oceanName = "Great Lakes";
- pondName = "Great Lakes";
- cliffName = "Sonora";
- forestName = "Sonora Forest";
- landName = "sonora_dirt";
- treeName = "treeSonora";
- critterOneName = "turkey";
- critterTwoName = "rhea";
- livestockName = "llama";
- fishName = "fishTarpon";
- whaleName = "humpbackWhale";
-
- }
-
- // Text
- rmSetStatusText("", 0.1);
-
-
-
-// ============= Classes =============
-
- int classPlayer=rmDefineClass("player");
- int classNatives=rmDefineClass("natives");
- int classCanyon=rmDefineClass("canyon");
- int pondClass=rmDefineClass("pond");
- rmDefineClass("startingUnit");
- rmDefineClass("classForest");
-
-
-
-// ============= Constraints =============
-
- int avoidImpassableLand = rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 24.0);
- int playerAvoidImpassableLand = rmCreateTerrainDistanceConstraint("player avoid impassable land", "Land", false, 18.0);
- int mediumAvoidImpassableLand = rmCreateTerrainDistanceConstraint("slightly avoid impassable", "Land", false, 12.0);
- int shortAvoidImpassableLand = rmCreateTerrainDistanceConstraint("just barely avoid impassable", "Land", false, 4.0);
- int TCAvoidImpassableLand = rmCreateTerrainDistanceConstraint("TCs vs impassable land", "Land", false, 8.0);
- int avoidPlayers = rmCreateClassDistanceConstraint("stay away from players medium", classPlayer, 15.0);
- int avoidPlayersFar = rmCreateClassDistanceConstraint("stay away from players far", classPlayer, 50.0);
- int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 10.0);
- int avoidTradeRouteSocket = rmCreateTypeDistanceConstraint("avoid trade route sockets", "sockettraderoute", 15.0);
- int avoidNatives = rmCreateClassDistanceConstraint("stay away from natives", classNatives, 60.0);
- int nativesAvoidPlayers = rmCreateClassDistanceConstraint("natives vs. players", classPlayer, 50.0);
- int edgeConstraint=rmCreatePieConstraint("continent avoids edge", 0.5, 0.5, 0, rmGetMapXSize()-30, 0, 0, 0);
- int avoidCanyon = rmCreateClassDistanceConstraint("don't place on mesa where you can't path", classCanyon, 2.0);
- int pondConstraint=rmCreateClassDistanceConstraint("ponds avoid ponds", rmClassID("pond"), 30.0);
- int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 20.0);
- int avoidTC=rmCreateTypeDistanceConstraint("vs. TC", "TownCenter", 20.0);
- int avoidCW=rmCreateTypeDistanceConstraint("vs. CW", "CoveredWagon", 20.0);
- int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "abstractNugget", 30.0);
- int fishVsFishID=rmCreateTypeDistanceConstraint("fish v fish", "abstractFish", 10.0);
- int whaleVsWhaleID=rmCreateTypeDistanceConstraint("whale v whale", "abstractWhale", 25.0);
- int fishLand = rmCreateTerrainDistanceConstraint("fish land", "land", true, 6.0);
- int whaleLand = rmCreateTerrainDistanceConstraint("whale v. land", "land", true, 20.0);
- int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 20);
- int avoidFood = rmCreateTypeDistanceConstraint("food avoids food", "food", 40.0);
- int avoidSilver = rmCreateTypeDistanceConstraint("fast coin avoids coin", "gold", 40.0);
- int avoidNuggetWater=rmCreateTypeDistanceConstraint("nugget vs. nugget water", "AbstractNugget", 80.0);
- int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0);
-
- int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 4.0);
-
-
-
-// ============= Land and Water Configuration =============
-
- int allLand = 1;
- int riverExists = -1;
- int oceanMiddle = -1;
- int oceanOffCenter = -1;
- int oceanRing = -1;
- int plateauMiddle = -1;
- int forestMiddle = -1;
- int blockedMiddle = -1; // used to determine if trade route should be a circle
-
- float landConfig = rmRandFloat(0,1);
-
-// temp for testing XXXXXXXXXXXXXXXXXXXXX
-
- //~ landConfig = 0.95;
- if(rmGetIsKOTH()){
-
- if(landConfig < 0.5)
- landConfig = rmRandFloat(0, 0.34);
-
- else
- landConfig = rmRandFloat(0.54, 0.78);
- }
-
-// ============= Land Only =============
- if(landConfig < 0.25)
- rmEchoInfo("just land");
-
-// ============= River Across Middle =============
- else if(landConfig < 0.35)
- {
- rmEchoInfo("river exists");
- allLand = -1;
- riverExists = 1;
- int unknownRiver = rmRiverCreate(-1, riverName, 30, 15, 5, 8);
- float riverPosition = rmRandFloat(0,1);
-
- // Spin river randomly around the edge
- if(riverPosition < 0.12)
- rmRiverSetConnections(unknownRiver, 0.0, 0.5, 1.0, 0.5);
- else if(riverPosition < 0.24)
- rmRiverSetConnections(unknownRiver, 0.0, 0.0, 1.0, 1.0);
- else if(riverPosition < 0.36)
- rmRiverSetConnections(unknownRiver, 0.5, 0.0, 0.5, 1.0);
- else if(riverPosition < 0.48)
- rmRiverSetConnections(unknownRiver, 0.0, 1.0, 1.0, 0.0);
- else if(riverPosition < 0.60)
- rmRiverSetConnections(unknownRiver, 0.0, 0.25, 1.0, 0.75);
- else if(riverPosition < 0.72)
- rmRiverSetConnections(unknownRiver, 0.0, 0.75, 1.0, 0.25);
- else if(riverPosition < 0.84)
- rmRiverSetConnections(unknownRiver, 0.25, 0.0, 0.75, 1.0);
- else
- rmRiverSetConnections(unknownRiver, 0.75, 0.0, 0.25, 1.0);
-
- // River always has 2 shallows and usually 3
- rmRiverSetShallowRadius(unknownRiver, rmRandInt(10, 12));
- rmRiverAddShallow(unknownRiver, rmRandFloat(0.1, 0.35));
-
- if(rmRandFloat(0,1) < 0.66)
- {
- rmRiverSetShallowRadius(unknownRiver, rmRandInt(10, 12));
- rmRiverAddShallow(unknownRiver, 0.5);
- }
-
- rmRiverSetShallowRadius(unknownRiver, rmRandInt(10, 12));
- rmRiverAddShallow(unknownRiver, rmRandFloat(0.65, 0.95));
- rmRiverSetBankNoiseParams(unknownRiver, 0.07, 2, 1.5, 10.0, 0.667, 3.0);
-
- rmRiverBuild(unknownRiver);
- }
-
-// ============= Great Lakes Style Ocean =============
- else if(landConfig < 0.53)
- {
- rmEchoInfo("ocean in middle");
- allLand = -1;
- oceanMiddle = 1;
- blockedMiddle = 1;
-
- // But don't build ocean every single time
- if(rmRandFloat(0,1) < 0.9)
- {
- int lakeOfTheUnknown=rmCreateArea("big lake in middle");
- rmSetAreaWaterType(lakeOfTheUnknown, oceanName);
- if(rmRandFloat(0,1) < 0.6)
- {
- rmSetAreaSize(lakeOfTheUnknown, 0.07, 0.15);
- rmEchoInfo("larger lake");
- }
- else
- {
- rmSetAreaSize(lakeOfTheUnknown, 0.02, 0.05);
- rmEchoInfo("smaller lake");
- }
- rmSetAreaLocation(lakeOfTheUnknown, 0.5, 0.5);
- rmAddAreaConstraint(lakeOfTheUnknown, avoidPlayers);
- rmSetAreaSmoothDistance(lakeOfTheUnknown, 50);
- rmSetAreaCoherence(lakeOfTheUnknown, 0.25);
- }
- }
-
-// Build the lake later to avoid players
-
-// ============= Saguenay Style Ocean =============
- else if(landConfig < 0.64)
- {
- rmEchoInfo("ocean off center");
- allLand = -1;
- oceanOffCenter = 1;
- float bayPosition = rmRandFloat(0,1);
- int unknownBay=rmCreateArea("big bay on edge");
- rmSetAreaWaterType(unknownBay, oceanName);
- rmSetAreaWarnFailure(unknownBay, false);
- rmSetAreaSize(unknownBay, 0.08, 0.15);
-
- // Spin bay randomly around the edge
- if(bayPosition < 0.12)
- rmSetAreaLocation(unknownBay, 0.0, 0.0);
- else if(bayPosition < 0.24)
- rmSetAreaLocation(unknownBay, 0.0, 0.5);
- else if(bayPosition < 0.36)
- rmSetAreaLocation(unknownBay, 0.0, 1.0);
- else if(bayPosition < 0.48)
- rmSetAreaLocation(unknownBay, 0.5, 1.0);
- else if(bayPosition < 0.60)
- rmSetAreaLocation(unknownBay, 1.0, 1.0);
- else if(bayPosition < 0.72)
- rmSetAreaLocation(unknownBay, 1.0, 0.5);
- else if(bayPosition < 0.84)
- rmSetAreaLocation(unknownBay, 1.0, 0.0);
- else
- rmSetAreaLocation(unknownBay, 0.5, 0.0);
-
- rmSetAreaObeyWorldCircleConstraint(unknownBay, false);
- rmAddAreaConstraint(unknownBay, avoidPlayers);
- rmSetAreaSmoothDistance(unknownBay, 50);
- rmSetAreaCoherence(unknownBay, 0.15);
- }
-
- // Build bay later to avoid players
-
-// ============= Midgard Style Ocean =============
- else if(landConfig < 0.80)
- {
- rmEchoInfo("ocean ring");
- allLand = -1;
- oceanRing = 1;
-
- int worldOcean=rmCreateArea("ocean that covers whole map");
- rmSetAreaWaterType(worldOcean, oceanName);
- rmSetAreaSize(worldOcean, 1, 1);
- rmSetAreaLocation(worldOcean, 0.5, 0.5);
- rmSetAreaWarnFailure(worldOcean, false);
- rmSetAreaObeyWorldCircleConstraint(worldOcean, false);
- rmBuildArea(worldOcean);
-
- int continent=rmCreateArea("island continent in ocean");
- rmSetAreaMix(continent, landName);
- rmSetAreaElevationType(continent, cElevTurbulence);
- rmSetAreaElevationVariation(continent, 4.0);
- rmSetAreaBaseHeight(continent, 3.5);
- rmSetAreaElevationMinFrequency(continent, 0.09);
- rmSetAreaElevationOctaves(continent, 3);
- rmSetAreaElevationPersistence(continent, 0.2);
- rmSetAreaElevationNoiseBias(continent, 1);
- rmSetAreaSize(continent, 0.32, 0.32);
- rmSetAreaLocation(continent, 0.5, 0.5);
- rmSetAreaSmoothDistance(continent, 50);
- rmSetAreaCoherence(continent, 0.25);
- rmAddAreaConstraint(continent, edgeConstraint);
- rmBuildArea(continent);
- }
-
-// ============= Sonora Style Plateau / Canyon =============
- else if(landConfig < 0.90)
- {
- rmEchoInfo("plateau in middle");
- allLand = -1;
- plateauMiddle = 1;
- blockedMiddle = 1;
- int centerMesa=rmCreateArea("large mesa or canyon in middle");
- rmSetAreaSize(centerMesa, 0.05, 0.12);
- rmSetAreaCliffType(centerMesa, cliffName);
-
- if(rmRandFloat(0,1) < 0.8)
- {
- rmSetAreaCliffEdge(centerMesa, 1, 1.0, 0.1, 1.0, 0);
- rmAddAreaToClass(centerMesa, classCanyon);
- rmEchoInfo("no ramps");
- }
- else
- {
- rmSetAreaCliffEdge(centerMesa, 4, 0.2, 0.0, 1.0, 0);
- rmEchoInfo("ramps");
- }
- if(rmRandFloat(0,1) < 0.6)
- rmSetAreaCliffHeight(centerMesa, rmRandInt(6,8), 1.0, 1.0);
- else
- rmSetAreaCliffHeight(centerMesa, rmRandInt(-8,-6), 1.0, 1.0);
- rmSetAreaMinBlobs(centerMesa, 3);
- rmSetAreaMaxBlobs(centerMesa, 5);
- rmSetAreaMinBlobDistance(centerMesa, 3.0);
- rmSetAreaMaxBlobDistance(centerMesa, 5.0);
- rmSetAreaCoherence(centerMesa, 0.3);
- rmSetAreaLocation(centerMesa, 0.5, 0.5);
- rmSetAreaSmoothDistance(centerMesa, 20);
- rmAddAreaConstraint(centerMesa, avoidPlayers);
- }
-
-// Build canyon later to avoid players
-
-// ============= Oasis Style Forest =============
- else
- {
- rmEchoInfo("forest in middle");
- allLand = -1;
- forestMiddle = 1;
- int greatUnknownForest=rmCreateArea("large central forest");
- rmSetAreaWarnFailure(greatUnknownForest, false);
- rmSetAreaSize(greatUnknownForest, 0.08, 0.08);
- rmSetAreaForestType(greatUnknownForest, forestName);
- rmSetAreaForestDensity(greatUnknownForest, 0.8);
- rmSetAreaForestClumpiness(greatUnknownForest, 0.6);
- rmSetAreaForestUnderbrush(greatUnknownForest, 0.0);
- rmSetAreaMinBlobs(greatUnknownForest, 1);
- rmSetAreaMaxBlobs(greatUnknownForest, 5);
- rmSetAreaMinBlobDistance(greatUnknownForest, 16.0);
- rmSetAreaMaxBlobDistance(greatUnknownForest, 70.0);
- rmSetAreaCoherence(greatUnknownForest, 0.15);
- rmSetAreaSmoothDistance(greatUnknownForest, 0);
- rmAddAreaToClass(greatUnknownForest, rmClassID("classForest"));
- rmSetAreaLocation(greatUnknownForest, 0.5, 0.5);
- rmAddAreaConstraint(greatUnknownForest, avoidPlayers);
- }
-
-// Build forest later to avoid players
-
-
- // Text
- rmSetStatusText("", 0.2);
-
-
-// ============= Player Configurations =============
-
-// Sometimes teams closer together
-
- if (riverExists == 1)
- {
- rmSetTeamSpacingModifier(1.0);
- rmEchoInfo("Teams spaced normal because of river");
- }
- else if (rmRandFloat(0,1) < 0.33)
- {
- rmSetTeamSpacingModifier(0.50);
- rmEchoInfo("Teams close together");
- }
- else if (rmRandFloat(0,1) < 0.33)
- {
- rmSetTeamSpacingModifier(0.25);
- rmEchoInfo("Teams very close together");
- }
- else
- rmEchoInfo("Teams spaced normal");
-
-
- if (oceanMiddle == 1)
- {
- rmPlacePlayersCircular(0.38, 0.40, 0);
- rmEchoInfo("players nearer edge because ocean in middle");
- }
- else if(oceanRing == 1)
- {
- rmPlacePlayersCircular(0.25, 0.25, 0);
- rmEchoInfo("players very far from edge because of continent");
- }
- else if(oceanOffCenter == 1)
- {
- rmPlacePlayersCircular(0.25, 0.25, 0);
- rmEchoInfo("players very far from edge because of off center bay");
- }
- else
- {
- rmPlacePlayersCircular(0.27, 0.40, 0);
- rmEchoInfo("players can be farther from edge");
- }
-
-
- float playerFraction = rmAreaTilesToFraction(1000);
-
- for(i=1; 2 )
- {
- rmSetObjectDefMaxDistance(startingTCID, 30.0);
- }
- rmAddObjectDefConstraint(startingTCID, TCAvoidImpassableLand);
- rmAddObjectDefConstraint(startingTCID, avoidTradeRoute);
- rmAddObjectDefConstraint(startingTCID, avoidTradeRouteSocket);
- rmAddObjectDefToClass(startingTCID, rmClassID("player"));
-
- int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
- rmSetObjectDefMaxDistance(startingUnits, 12.0);
- rmAddObjectDefConstraint(startingUnits, shortAvoidImpassableLand);
- rmAddObjectDefToClass(startingUnits, rmClassID("startingUnit"));
-
-// Place Starting Units now so other stuff can avoid them
- for(i=1; 0.4)
- numTries = 8*cNumberNonGaiaPlayers;
- }
- else if(plateauMiddle == 1) // might have lots of cliffs if center mesa
- {
- if(rmRandFloat(0,1) > 0.7)
- numTries = 8*cNumberNonGaiaPlayers;
- }
- else
- {
- numTries = 4*cNumberNonGaiaPlayers;
- }
-
- if(rmRandFloat(0,1) < 0.40) // only do cliffs 40% of the time in any case
- {
- for(i=0; 0.9)
- {
- numTries = 3*cNumberNonGaiaPlayers;
- rmEchoInfo("sparse forests");
- sparseForests = 1;
- }
-
- for (i=0; 0.4)
- rmPlaceObjectDefAtLoc(playerSilverID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusSilverChance > 0.8)
- rmPlaceObjectDefAtLoc(playerSilverID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // TREES
- // Have 4-6 trees, unless sparse
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusTreeChance > 0.5)
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusTreeChance > 0.8)
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- // If sparse forests, add extra trees
- if (sparseForests == 1)
- {
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(playerTreeID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- }
-
- // NUGGETS
- // Always 1 of type I. Can have +1 or +2 of type I and +1 or +2 of type II
- rmPlaceObjectDefAtLoc(nugget1, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance1 > 0.5)
- rmPlaceObjectDefAtLoc(nugget1, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance1 > 0.9)
- rmPlaceObjectDefAtLoc(nugget1, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance2 > 0.8)
- rmPlaceObjectDefAtLoc(nugget2, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusNuggetChance2 > 0.95)
- rmPlaceObjectDefAtLoc(nugget2, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // FOOD
- // Always 1 near and 1 far. Sometimes +1 or +2 far.
- rmPlaceObjectDefAtLoc(nearDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- rmPlaceObjectDefAtLoc(farDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusFoodChance > 0.70)
- rmPlaceObjectDefAtLoc(farDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
- if (bonusFoodChance > 0.90)
- rmPlaceObjectDefAtLoc(farDeerID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // BERRIES
- // 30% of the time
- if (berryChance > 0.7)
- rmPlaceObjectDefAtLoc(playerBerryID, 0, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
-
- // Monastery
- if(ypIsAsian(i) && rmGetNomadStart() == false)
- rmPlaceObjectDefAtLoc(ypMonasteryBuilder(i, 1), i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- // WATER FLAG
- if (placeWaterFlag == 1)
- rmPlaceObjectDefAtLoc(waterFlagID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
-
- }
-
-
- // Text
- rmSetStatusText("", 0.9);
-
-
-// ============= Other Resources =============
-
-// Silver
-
- int silverID = -1;
- int silverCount = (cNumberNonGaiaPlayers*2 + rmRandInt(3,6));
- rmEchoInfo("silver count = "+silverCount);
-
- for(i=0; < silverCount)
- {
- silverID = rmCreateObjectDef("silver "+i);
- rmAddObjectDefItem(silverID, "mine", 1, 0.0);
- rmSetObjectDefMinDistance(silverID, 0.0);
- rmSetObjectDefMaxDistance(silverID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(silverID, avoidSilver);
- rmAddObjectDefConstraint(silverID, avoidAll);
- if(oceanRing == 1)
- rmAddObjectDefConstraint(silverID, avoidPlayers);
- else
- rmAddObjectDefConstraint(silverID, avoidPlayersFar);
- rmAddObjectDefConstraint(silverID, avoidImpassableLand);
- rmAddObjectDefConstraint(silverID, avoidTradeRoute);
- rmPlaceObjectDefAtLoc(silverID, 0, 0.5, 0.5);
- }
-
-// Livestock
-
- int sheepID=rmCreateObjectDef("livestock");
- rmAddObjectDefItem(sheepID, livestockName, 2, 4.0);
- rmSetObjectDefMinDistance(sheepID, 0.0);
- rmSetObjectDefMaxDistance(sheepID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(sheepID, avoidFood);
- rmAddObjectDefConstraint(sheepID, avoidAll);
- if(oceanRing == 1)
- rmAddObjectDefConstraint(sheepID, avoidPlayers);
- else
- rmAddObjectDefConstraint(sheepID, avoidPlayersFar);
- rmAddObjectDefConstraint(sheepID, avoidCanyon);
- rmAddObjectDefConstraint(sheepID, avoidImpassableLand);
- if(rmRandFloat(0,1) > 0.85)
- rmPlaceObjectDefAtLoc(sheepID, 0, 0.5, 0.5, cNumberNonGaiaPlayers*2);
-
-// Treasures
-
- int nugget3= rmCreateObjectDef("nugget hard");
- rmAddObjectDefItem(nugget3, "Nugget", 1, 0.0);
- rmSetNuggetDifficulty(3, 3);
- rmSetObjectDefMinDistance(nugget3, 0.0);
- rmSetObjectDefMaxDistance(nugget3, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(nugget3, shortAvoidImpassableLand);
- rmAddObjectDefConstraint(nugget3, avoidNugget);
- rmAddObjectDefConstraint(nugget3, avoidPlayersFar);
- rmAddObjectDefConstraint(nugget3, avoidTradeRoute);
- rmAddObjectDefConstraint(nugget3, avoidAll);
- if(rmRandFloat(0,1) < 0.7)
- rmPlaceObjectDefAtLoc(nugget3, 0, 0.5, 0.5, cNumberNonGaiaPlayers);
- else
- rmPlaceObjectDefAtLoc(nugget3, 0, 0.5, 0.5, cNumberNonGaiaPlayers*rmRandInt(2,4));
-
- if (rmRandFloat(0,1) > 0.9)
- {
- int nugget4= rmCreateObjectDef("nugget nuts");
- rmAddObjectDefItem(nugget4, "Nugget", 1, 0.0);
- rmSetNuggetDifficulty(4, 4);
- rmSetObjectDefMinDistance(nugget4, 0.0);
- rmSetObjectDefMaxDistance(nugget4, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(nugget4, shortAvoidImpassableLand);
- rmAddObjectDefConstraint(nugget4, avoidNugget);
- rmAddObjectDefConstraint(nugget4, avoidPlayersFar);
- rmAddObjectDefConstraint(nugget4, avoidTradeRoute);
- rmAddObjectDefConstraint(nugget4, avoidAll);
- rmPlaceObjectDefAtLoc(nugget4, 0, 0.5, 0.5, rmRandInt(0,5));
- }
-
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
-
- // check for KOTH game mode
- if(rmGetIsKOTH()) {
-
- int randLoc = rmRandInt(1,3);
- float xLoc = 0.5;
- float yLoc = 0.5;
- float walk = 0.05;
-
- //~ if(randLoc == 1 && blockedMiddle != 1)
- //~ yLoc = .5;
-
- //~ if(cNumberTeams > 2 && blockedMiddle != 1) {
- //~ yLoc = rmRandFloat(.25, .75);
- //~ walk = 0.25;
- //~ }
-
- //~ else if(cNumberTeams > 2){
- //~ yLoc = .3;
- //~ walk = 0.5;
- //~ }
-
- ypKingsHillPlacer(xLoc, yLoc, walk, avoidCanyon);
- rmEchoInfo("XLOC = "+xLoc);
- rmEchoInfo("XLOC = "+yLoc);
- }
-
- // Water nuggets
-
- 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, avoidLand);
- rmAddObjectDefConstraint(nuggetW, avoidNuggetWater);
- rmPlaceObjectDefAtLoc(nuggetW, 0, 0.5, 0.5, cNumberNonGaiaPlayers*4);
-
- // Text
- rmSetStatusText("",0.99);
-
-for(i=1;<=cNumberNonGaiaPlayers) {
- rmCreateTrigger("Tech Status"+i);
- rmSwitchToTrigger(rmTriggerID("Tech Status"+i));
- rmSetTriggerActive(true);
- rmAddTriggerEffect("Set Tech Status");
- rmSetTriggerEffectParamInt("PlayerID", i);
- rmSetTriggerEffectParamInt("TechID", 9); // HCBlockadeNative
- rmSetTriggerEffectParamInt("Status", 2);
-}
-
-// add fish if ocean
- if (placeWaterFlag == 1)
- {
- int fishID=rmCreateObjectDef("fish");
- rmAddObjectDefItem(fishID, fishName, 1, 0.0);
- rmSetObjectDefMinDistance(fishID, 0.0);
- rmSetObjectDefMaxDistance(fishID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(fishID, fishVsFishID);
- rmAddObjectDefConstraint(fishID, fishLand);
- rmPlaceObjectDefAtLoc(fishID, 0, 0.5, 0.5, 6*cNumberNonGaiaPlayers);
-
- int whaleID=rmCreateObjectDef("whale");
- rmAddObjectDefItem(whaleID, whaleName, 1, 9.0);
- rmSetObjectDefMinDistance(whaleID, 0.0);
- rmSetObjectDefMaxDistance(whaleID, rmXFractionToMeters(0.5));
- rmAddObjectDefConstraint(whaleID, whaleVsWhaleID);
- rmAddObjectDefConstraint(whaleID, whaleLand);
- if(rmRandFloat(0,1) < 0.5)
- rmPlaceObjectDefAtLoc(whaleID, 0, 0.5, 0.5, 3*cNumberNonGaiaPlayers);
- }
-
- // Text
- rmSetStatusText("",1.0);
-
- // DONE!!!!
-
-
-}
\ No newline at end of file
diff --git a/RMM/waterrandom.set b/RMM/waterrandom.set
new file mode 100644
index 0000000..72f6127
--- /dev/null
+++ b/RMM/waterrandom.set
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/RMM/yellow riverDry.xs b/RMM/yellow riverDry.xs
index d3789f2..76097d1 100644
--- a/RMM/yellow riverDry.xs
+++ b/RMM/yellow riverDry.xs
@@ -887,7 +887,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidNatives);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidResource);
@@ -913,16 +913,6 @@ void main(void)
int waterSpawnPointID = 0;
rmClearClosestPointConstraints();
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/yellow riverLarge.xs b/RMM/yellow riverLarge.xs
index 96958e5..40b5cf3 100644
--- a/RMM/yellow riverLarge.xs
+++ b/RMM/yellow riverLarge.xs
@@ -887,7 +887,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidNatives);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidResource);
@@ -913,16 +913,6 @@ void main(void)
int waterSpawnPointID = 0;
rmClearClosestPointConstraints();
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/yellow riverRegicide.xs b/RMM/yellow riverRegicide.xs
index 76dc923..3817c1c 100644
--- a/RMM/yellow riverRegicide.xs
+++ b/RMM/yellow riverRegicide.xs
@@ -1086,7 +1086,7 @@ void main(void)
rmAddObjectDefConstraint(startSilverID, avoidNatives);
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidResource);
@@ -1110,17 +1110,6 @@ void main(void)
int waterSpawnPointID = 0;
rmClearClosestPointConstraints();
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <14 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
-
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/yucatan.xs b/RMM/yucatan.xs
index 925bde8..ac85029 100644
--- a/RMM/yucatan.xs
+++ b/RMM/yucatan.xs
@@ -541,7 +541,7 @@ void main(void)
int subCiv = -1;
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
rmAddObjectDefConstraint(startingUnits, avoidAll);
rmAddObjectDefConstraint(startingUnits, avoidImpassableLand);
@@ -1020,16 +1020,6 @@ void main(void)
if (cNumberTeams > 2 || (teamZeroCount - teamOneCount) > 1 || (teamOneCount - teamZeroCount) > 1)
weird = true;
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/RMM/yukon.xs b/RMM/yukon.xs
index a630454..c09da62 100644
--- a/RMM/yukon.xs
+++ b/RMM/yukon.xs
@@ -415,8 +415,9 @@ void main(void)
//STARTING UNITS and RESOURCES DEFS
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
- rmSetObjectDefMinDistance(startingUnits, 5.0);
+ rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
+ rmAddObjectDefConstraint(startingUnits, avoidAll);
int startingTCID = rmCreateObjectDef("startingTC");
if ( rmGetNomadStart())
@@ -840,16 +841,6 @@ void main(void)
// Text
rmSetStatusText("",0.80);
- // Place random flags
- int avoidFlags = rmCreateTypeDistanceConstraint("flags avoid flags", "ControlFlag", 70);
- for ( i =1; <11 ) {
- int flagID = rmCreateObjectDef("random flag"+i);
- rmAddObjectDefItem(flagID, "ControlFlag", 1, 0.0);
- rmSetObjectDefMinDistance(flagID, 0.0);
- rmSetObjectDefMaxDistance(flagID, rmXFractionToMeters(0.40));
- rmAddObjectDefConstraint(flagID, avoidFlags);
- rmPlaceObjectDefAtLoc(flagID, 0, 0.5, 0.5);
- }
// check for KOTH game mode
if(rmGetIsKOTH()) {
diff --git a/Sound/impmod/SwedishSettlerMaleBuild.wav b/Sound/impmod/SwedishSettlerMaleBuild.wav
index 657d42b..0cbb086 100644
Binary files a/Sound/impmod/SwedishSettlerMaleBuild.wav and b/Sound/impmod/SwedishSettlerMaleBuild.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleFarm.wav b/Sound/impmod/SwedishSettlerMaleFarm.wav
index c58dbc4..acd2d6b 100644
Binary files a/Sound/impmod/SwedishSettlerMaleFarm.wav and b/Sound/impmod/SwedishSettlerMaleFarm.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleGather.wav b/Sound/impmod/SwedishSettlerMaleGather.wav
index 98e50eb..2499a7e 100644
Binary files a/Sound/impmod/SwedishSettlerMaleGather.wav and b/Sound/impmod/SwedishSettlerMaleGather.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleGatherWood.wav b/Sound/impmod/SwedishSettlerMaleGatherWood.wav
index f2d42c3..7bd0528 100644
Binary files a/Sound/impmod/SwedishSettlerMaleGatherWood.wav and b/Sound/impmod/SwedishSettlerMaleGatherWood.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleHunt.wav b/Sound/impmod/SwedishSettlerMaleHunt.wav
index c993379..15d3595 100644
Binary files a/Sound/impmod/SwedishSettlerMaleHunt.wav and b/Sound/impmod/SwedishSettlerMaleHunt.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleMine.wav b/Sound/impmod/SwedishSettlerMaleMine.wav
index cc021a9..863b48d 100644
Binary files a/Sound/impmod/SwedishSettlerMaleMine.wav and b/Sound/impmod/SwedishSettlerMaleMine.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleMove1.wav b/Sound/impmod/SwedishSettlerMaleMove1.wav
index 09bd691..d048017 100644
Binary files a/Sound/impmod/SwedishSettlerMaleMove1.wav and b/Sound/impmod/SwedishSettlerMaleMove1.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleMove2.wav b/Sound/impmod/SwedishSettlerMaleMove2.wav
index d47c9ae..ebf251c 100644
Binary files a/Sound/impmod/SwedishSettlerMaleMove2.wav and b/Sound/impmod/SwedishSettlerMaleMove2.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleMove3.wav b/Sound/impmod/SwedishSettlerMaleMove3.wav
new file mode 100644
index 0000000..d048017
Binary files /dev/null and b/Sound/impmod/SwedishSettlerMaleMove3.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleSelect.wav b/Sound/impmod/SwedishSettlerMaleSelect.wav
deleted file mode 100644
index 0e8ad35..0000000
Binary files a/Sound/impmod/SwedishSettlerMaleSelect.wav and /dev/null differ
diff --git a/Sound/impmod/SwedishSettlerMaleSelect1.wav b/Sound/impmod/SwedishSettlerMaleSelect1.wav
new file mode 100644
index 0000000..3cc4353
Binary files /dev/null and b/Sound/impmod/SwedishSettlerMaleSelect1.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleSelect2.wav b/Sound/impmod/SwedishSettlerMaleSelect2.wav
index bf82751..0ffc692 100644
Binary files a/Sound/impmod/SwedishSettlerMaleSelect2.wav and b/Sound/impmod/SwedishSettlerMaleSelect2.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleSelect3.wav b/Sound/impmod/SwedishSettlerMaleSelect3.wav
index cc75f46..2f7a0ca 100644
Binary files a/Sound/impmod/SwedishSettlerMaleSelect3.wav and b/Sound/impmod/SwedishSettlerMaleSelect3.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleSelect4.wav b/Sound/impmod/SwedishSettlerMaleSelect4.wav
index b4aac81..770a9ef 100644
Binary files a/Sound/impmod/SwedishSettlerMaleSelect4.wav and b/Sound/impmod/SwedishSettlerMaleSelect4.wav differ
diff --git a/Sound/impmod/SwedishSettlerMaleSelect5.wav b/Sound/impmod/SwedishSettlerMaleSelect5.wav
index b4aac81..770a9ef 100644
Binary files a/Sound/impmod/SwedishSettlerMaleSelect5.wav and b/Sound/impmod/SwedishSettlerMaleSelect5.wav differ
diff --git a/Sound/impmod/flagwave.wav b/Sound/impmod/flagwave.wav
new file mode 100644
index 0000000..ffe9a1b
Binary files /dev/null and b/Sound/impmod/flagwave.wav differ
diff --git a/Sound/impmod/koreanattack1.wav b/Sound/impmod/koreanattack1.wav
new file mode 100644
index 0000000..e4b452b
Binary files /dev/null and b/Sound/impmod/koreanattack1.wav differ
diff --git a/Sound/impmod/koreanattack2.wav b/Sound/impmod/koreanattack2.wav
new file mode 100644
index 0000000..0690bad
Binary files /dev/null and b/Sound/impmod/koreanattack2.wav differ
diff --git a/Sound/impmod/koreanattack3.wav b/Sound/impmod/koreanattack3.wav
new file mode 100644
index 0000000..66af9da
Binary files /dev/null and b/Sound/impmod/koreanattack3.wav differ
diff --git a/Sound/impmod/koreanmove1.wav b/Sound/impmod/koreanmove1.wav
new file mode 100644
index 0000000..2d979c0
Binary files /dev/null and b/Sound/impmod/koreanmove1.wav differ
diff --git a/Sound/impmod/koreanmove2.wav b/Sound/impmod/koreanmove2.wav
new file mode 100644
index 0000000..88de84a
Binary files /dev/null and b/Sound/impmod/koreanmove2.wav differ
diff --git a/Sound/impmod/koreanmove3.wav b/Sound/impmod/koreanmove3.wav
new file mode 100644
index 0000000..10941b1
Binary files /dev/null and b/Sound/impmod/koreanmove3.wav differ
diff --git a/Sound/impmod/koreanselect1.wav b/Sound/impmod/koreanselect1.wav
new file mode 100644
index 0000000..c571878
Binary files /dev/null and b/Sound/impmod/koreanselect1.wav differ
diff --git a/Sound/impmod/koreanselect2.wav b/Sound/impmod/koreanselect2.wav
new file mode 100644
index 0000000..caf1888
Binary files /dev/null and b/Sound/impmod/koreanselect2.wav differ
diff --git a/Sound/impmod/koreanselect3.wav b/Sound/impmod/koreanselect3.wav
new file mode 100644
index 0000000..76547ab
Binary files /dev/null and b/Sound/impmod/koreanselect3.wav differ
diff --git a/Sound/impmod/mongolattack1.wav b/Sound/impmod/mongolattack1.wav
new file mode 100644
index 0000000..f5f4116
Binary files /dev/null and b/Sound/impmod/mongolattack1.wav differ
diff --git a/Sound/impmod/mongolattack2.wav b/Sound/impmod/mongolattack2.wav
new file mode 100644
index 0000000..c62a868
Binary files /dev/null and b/Sound/impmod/mongolattack2.wav differ
diff --git a/Sound/impmod/mongolattack3.wav b/Sound/impmod/mongolattack3.wav
new file mode 100644
index 0000000..5a03dd9
Binary files /dev/null and b/Sound/impmod/mongolattack3.wav differ
diff --git a/Sound/impmod/mongolmove1.wav b/Sound/impmod/mongolmove1.wav
new file mode 100644
index 0000000..780be3b
Binary files /dev/null and b/Sound/impmod/mongolmove1.wav differ
diff --git a/Sound/impmod/mongolmove2.wav b/Sound/impmod/mongolmove2.wav
new file mode 100644
index 0000000..6e2b2a0
Binary files /dev/null and b/Sound/impmod/mongolmove2.wav differ
diff --git a/Sound/impmod/mongolmove3.wav b/Sound/impmod/mongolmove3.wav
new file mode 100644
index 0000000..458ff28
Binary files /dev/null and b/Sound/impmod/mongolmove3.wav differ
diff --git a/Sound/impmod/mongolselect1.wav b/Sound/impmod/mongolselect1.wav
new file mode 100644
index 0000000..95ff9c3
Binary files /dev/null and b/Sound/impmod/mongolselect1.wav differ
diff --git a/Sound/impmod/mongolselect2.wav b/Sound/impmod/mongolselect2.wav
new file mode 100644
index 0000000..2f96e4a
Binary files /dev/null and b/Sound/impmod/mongolselect2.wav differ
diff --git a/Sound/impmod/mongolselect3.wav b/Sound/impmod/mongolselect3.wav
new file mode 100644
index 0000000..31d8e10
Binary files /dev/null and b/Sound/impmod/mongolselect3.wav differ
diff --git a/Sound/impmod/saracenattack1.wav b/Sound/impmod/saracenattack1.wav
new file mode 100644
index 0000000..888a7aa
Binary files /dev/null and b/Sound/impmod/saracenattack1.wav differ
diff --git a/Sound/impmod/saracenattack2.wav b/Sound/impmod/saracenattack2.wav
new file mode 100644
index 0000000..b3e851c
Binary files /dev/null and b/Sound/impmod/saracenattack2.wav differ
diff --git a/Sound/impmod/saracenattack3.wav b/Sound/impmod/saracenattack3.wav
new file mode 100644
index 0000000..754c3d7
Binary files /dev/null and b/Sound/impmod/saracenattack3.wav differ
diff --git a/Sound/impmod/saracenmove1.wav b/Sound/impmod/saracenmove1.wav
new file mode 100644
index 0000000..9aaa445
Binary files /dev/null and b/Sound/impmod/saracenmove1.wav differ
diff --git a/Sound/impmod/saracenmove2.wav b/Sound/impmod/saracenmove2.wav
new file mode 100644
index 0000000..3506176
Binary files /dev/null and b/Sound/impmod/saracenmove2.wav differ
diff --git a/Sound/impmod/saracenmove3.wav b/Sound/impmod/saracenmove3.wav
new file mode 100644
index 0000000..5ae1c63
Binary files /dev/null and b/Sound/impmod/saracenmove3.wav differ
diff --git a/Sound/impmod/saracenselect1.wav b/Sound/impmod/saracenselect1.wav
new file mode 100644
index 0000000..1a904d4
Binary files /dev/null and b/Sound/impmod/saracenselect1.wav differ
diff --git a/Sound/impmod/saracenselect2.wav b/Sound/impmod/saracenselect2.wav
new file mode 100644
index 0000000..11155e3
Binary files /dev/null and b/Sound/impmod/saracenselect2.wav differ
diff --git a/Sound/impmod/saracenselect3.wav b/Sound/impmod/saracenselect3.wav
new file mode 100644
index 0000000..6d7e45e
Binary files /dev/null and b/Sound/impmod/saracenselect3.wav differ
diff --git a/Sound/musicm/battle/AoE3War.mp3 b/Sound/musicm/battle/AoE3War.mp3
deleted file mode 100644
index ffc5ac7..0000000
Binary files a/Sound/musicm/battle/AoE3War.mp3 and /dev/null differ
diff --git a/Sound/musicm/battle/Avenger.mp3 b/Sound/musicm/battle/Avenger.mp3
deleted file mode 100644
index 3d978d5..0000000
Binary files a/Sound/musicm/battle/Avenger.mp3 and /dev/null differ
diff --git a/Sound/musicm/battle/Battling.mp3 b/Sound/musicm/battle/Battling.mp3
deleted file mode 100644
index 5b5f2fd..0000000
Binary files a/Sound/musicm/battle/Battling.mp3 and /dev/null differ
diff --git a/Sound/musicm/interface/AcrossTheOcean.mp3 b/Sound/musicm/interface/AcrossTheOcean.mp3
deleted file mode 100644
index 3a07f8a..0000000
Binary files a/Sound/musicm/interface/AcrossTheOcean.mp3 and /dev/null differ
diff --git a/Sound/musicm/interface/GeluAustrinum.mp3 b/Sound/musicm/interface/GeluAustrinum.mp3
deleted file mode 100644
index d0269db..0000000
Binary files a/Sound/musicm/interface/GeluAustrinum.mp3 and /dev/null differ
diff --git a/Sound/musicm/interface/OldTimer.mp3 b/Sound/musicm/interface/OldTimer.mp3
deleted file mode 100644
index 0b55fcc..0000000
Binary files a/Sound/musicm/interface/OldTimer.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/AoE3.mp3 b/Sound/musicm/standard/AoE3.mp3
deleted file mode 100644
index 8cf3792..0000000
Binary files a/Sound/musicm/standard/AoE3.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/AoEO.mp3 b/Sound/musicm/standard/AoEO.mp3
deleted file mode 100644
index 4f7c48a..0000000
Binary files a/Sound/musicm/standard/AoEO.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/AoEO1.mp3 b/Sound/musicm/standard/AoEO1.mp3
deleted file mode 100644
index b5a89c2..0000000
Binary files a/Sound/musicm/standard/AoEO1.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/AoEO2.mp3 b/Sound/musicm/standard/AoEO2.mp3
deleted file mode 100644
index fb58fdb..0000000
Binary files a/Sound/musicm/standard/AoEO2.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/AoEO3.mp3 b/Sound/musicm/standard/AoEO3.mp3
deleted file mode 100644
index 7bc43b7..0000000
Binary files a/Sound/musicm/standard/AoEO3.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/AsianFeel.mp3 b/Sound/musicm/standard/AsianFeel.mp3
deleted file mode 100644
index f51b9d4..0000000
Binary files a/Sound/musicm/standard/AsianFeel.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/DidntSeeItComing.mp3 b/Sound/musicm/standard/DidntSeeItComing.mp3
deleted file mode 100644
index b555a9b..0000000
Binary files a/Sound/musicm/standard/DidntSeeItComing.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/MarchtoWar.mp3 b/Sound/musicm/standard/MarchtoWar.mp3
deleted file mode 100644
index f8dcee7..0000000
Binary files a/Sound/musicm/standard/MarchtoWar.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/TAD.mp3 b/Sound/musicm/standard/TAD.mp3
deleted file mode 100644
index 5625209..0000000
Binary files a/Sound/musicm/standard/TAD.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/TWC.mp3 b/Sound/musicm/standard/TWC.mp3
deleted file mode 100644
index 6c28caf..0000000
Binary files a/Sound/musicm/standard/TWC.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/aom.mp3 b/Sound/musicm/standard/aom.mp3
deleted file mode 100644
index ac2e74b..0000000
Binary files a/Sound/musicm/standard/aom.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/asian1.mp3 b/Sound/musicm/standard/asian1.mp3
deleted file mode 100644
index 0bbd946..0000000
Binary files a/Sound/musicm/standard/asian1.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/asian2.mp3 b/Sound/musicm/standard/asian2.mp3
deleted file mode 100644
index 84cfb7c..0000000
Binary files a/Sound/musicm/standard/asian2.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/asian3.mp3 b/Sound/musicm/standard/asian3.mp3
deleted file mode 100644
index 6c4107d..0000000
Binary files a/Sound/musicm/standard/asian3.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/asian4.mp3 b/Sound/musicm/standard/asian4.mp3
deleted file mode 100644
index ed6da81..0000000
Binary files a/Sound/musicm/standard/asian4.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/asian5.mp3 b/Sound/musicm/standard/asian5.mp3
deleted file mode 100644
index ab874ce..0000000
Binary files a/Sound/musicm/standard/asian5.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/black1.mp3 b/Sound/musicm/standard/black1.mp3
deleted file mode 100644
index 775c89d..0000000
Binary files a/Sound/musicm/standard/black1.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/black2.mp3 b/Sound/musicm/standard/black2.mp3
deleted file mode 100644
index ae672a4..0000000
Binary files a/Sound/musicm/standard/black2.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/feloniousjunk.mp3 b/Sound/musicm/standard/feloniousjunk.mp3
deleted file mode 100644
index 09f8d4b..0000000
Binary files a/Sound/musicm/standard/feloniousjunk.mp3 and /dev/null differ
diff --git a/Sound/musicm/standard/getyesum.mp3 b/Sound/musicm/standard/getyesum.mp3
deleted file mode 100644
index 5a588b6..0000000
Binary files a/Sound/musicm/standard/getyesum.mp3 and /dev/null differ
diff --git a/Sound/ypack/music/interface/MainTitlm.mp3 b/Sound/ypack/music/interface/MainTitlm.mp3
index d63fe35..1d10078 100644
Binary files a/Sound/ypack/music/interface/MainTitlm.mp3 and b/Sound/ypack/music/interface/MainTitlm.mp3 differ
diff --git a/age3m.exe b/age3m.exe
index fd33603..f87e22b 100644
Binary files a/age3m.exe and b/age3m.exe differ
diff --git a/startup/imp.cfg b/startup/imp.cfg
new file mode 100644
index 0000000..0ef629c
--- /dev/null
+++ b/startup/imp.cfg
@@ -0,0 +1 @@
+ExtraPop: 100
\ No newline at end of file