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 @@ new englandLarge californialarge mongolialarge + CongoLarge + SaharaLarge + australialarge 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 @@ - + Mongolia Deccan Honshu borneo indochina Himalayas + himalayasUpper siberia silkRoad yellow riverDry Ceylon + Congo + Kilimanjaro + Madagascar + Nile River + Savanna Grass + Sahara + Indonesia + newzealand + australia 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; - + Amazonia Bayou Caribbean @@ -23,6 +23,6 @@ Northwest Territory Hispaniola Araucania - Unknown Painted Desert + RockiesLower 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 @@ - + Great Plains Rockies Sonora @@ -7,10 +7,20 @@ Yukon Andes Ozarks + Pampas Painted Desert Mongolia Deccan Himalayas + himalayasUpper siberia silkRoad + Nile River + Savanna Grass + Sahara + Congo + Kilimanjaro + indochina + UnknownLand + australia 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 Hispaniola Araucania - Unknown Painted Desert Mongolia Deccan @@ -31,8 +30,21 @@ borneo indochina Himalayas + himalayasUpper siberia silkRoad yellow riverDry Ceylon + RockiesLower + Congo + Kilimanjaro + Madagascar + Nile River + Savanna Grass + Sahara + Indonesia + newzealand + australia + UnknownLand + UnknownWater \ 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 @@ yellow riverRegicide siberiaRegicide indochinaRegicide + MadagascarRegicide + australiaregicide 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 @@ + + + Amazonia + Caribbean + Carolina + Yucatan + California + Plymouth + Hispaniola + Araucania + New England + Great Lakes + Saguenay + Patagonia + Honshu + borneo + Ceylon + Madagascar + Indonesia + newzealand + UnknownWater + 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