Index: binaries/data/mods/public/maps/random/ardennes_forest.json =================================================================== --- binaries/data/mods/public/maps/random/ardennes_forest.json +++ binaries/data/mods/public/maps/random/ardennes_forest.json @@ -2,7 +2,7 @@ "settings" : { "Name" : "Ardennes Forest", "Script" : "ardennes_forest.js", - "Description" : "Each player starts deep in the forest.\n\nThe Ardennes is a region of extensive forests, rolling hills and ridges formed within the Givetian Ardennes mountain range, primarily in modern day Belgium and Luxembourg. The region took its name from the ancient Silva, a vast forest in Roman times called Arduenna Silva.", + "Description" : "Each player starts deep in the forest.\n\nThe Ardennes is a region of extensive forests, rolling hills and ridges formed within the Givetian Ardennes mountain range, primarily in modern day Belgium and Luxembourg. The region took its name from the ancient Silva, a vast forest in Roman times called Arduenna Silva.", "CircularMap" : true, "Preview" : "ardennes_forest.png" } Index: binaries/data/mods/public/maps/random/caledonian_meadows.js =================================================================== --- binaries/data/mods/public/maps/random/caledonian_meadows.js +++ binaries/data/mods/public/maps/random/caledonian_meadows.js @@ -41,10 +41,10 @@ "overlap": 0, "fence": readyWallElement("structures/fence_long", "gaia"), "fence_short": readyWallElement("structures/fence_short", "gaia"), - "bench": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "structures/bench" }, - "sheep": { "angle": 0, "length": 0, "indent": 0.75, "bend": 0, "templateName": "gaia/fauna_sheep" }, - "foodBin": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "gaia/treasure/food_bin" }, - "farmstead": { "angle": Math.PI, "length": 0, "indent": -3, "bend": 0, "templateName": "structures/brit/farmstead" } + "bench": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "structures/bench" }, + "sheep": { "angle": 0, "length": 0, "indent": 0.75, "bend": 0, "templateName": "gaia/fauna_sheep" }, + "foodBin": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "gaia/treasure/food_bin" }, + "farmstead": { "angle": Math.PI, "length": 0, "indent": -3, "bend": 0, "templateName": "structures/brit/farmstead" } }; let fences = [ @@ -83,7 +83,7 @@ for (let i = 0; i < num; ++i) fences.push(new Fortress("fence", clone(fences[i].wall).reverse())); -// Groves, only Wood +// Groves, only wood let groveEntities = ["gaia/tree/bush_temperate", "gaia/tree/euro_beech"]; let groveActors = [ "actor|geology/highland1_moss.xml", "actor|geology/highland2_moss.xml", @@ -190,7 +190,7 @@ */ setBiome("generic/alpine"); g_Environment.Fog.FogColor = { "r": 0.8, "g": 0.8, "b": 0.8, "a": 0.01 }; -g_Environment.Water.WaterBody.Colour = { "r" : 0.3, "g" : 0.05, "b" : 0.1, "a" : 0.1 }; +g_Environment.Water.WaterBody.Colour = { "r": 0.3, "g": 0.05, "b": 0.1, "a": 0.1 }; g_Environment.Water.WaterBody.Murkiness = 0.4; /** Index: binaries/data/mods/public/maps/random/cantabrian_highlands.json =================================================================== --- binaries/data/mods/public/maps/random/cantabrian_highlands.json +++ binaries/data/mods/public/maps/random/cantabrian_highlands.json @@ -2,7 +2,7 @@ "settings" : { "Name" : "Cantabrian Highlands", "Script" : "cantabrian_highlands.js", - "Description" : "Each player starts on a hill surrounded by steep cliffs. Represents Cantabria, a mountainous region in the North of the Iberian peninsula.", + "Description" : "Each player starts on a hill surrounded by steep cliffs. Represents Cantabria, a mountainous region in the north of the Iberian peninsula.", "Preview" : "cantabrian_highlands.png", "CircularMap" : true } Index: binaries/data/mods/public/maps/random/deep_forest.js =================================================================== --- binaries/data/mods/public/maps/random/deep_forest.js +++ binaries/data/mods/public/maps/random/deep_forest.js @@ -8,7 +8,7 @@ var terrainPrimary = ["temp_grass", "temp_grass_b", "temp_grass_c", "temp_grass_d", "temp_grass_long_b", "temp_grass_clovers_2", "temp_grass_mossy", "temp_grass_plants"]; var terrainWood = ['temp_grass_mossy|gaia/tree/oak', 'temp_forestfloor_pine|gaia/tree/pine', 'temp_mud_plants|gaia/tree/dead', - 'temp_plants_bog|gaia/tree/oak_large', "temp_dirt_gravel_plants|gaia/tree/aleppo_pine", 'temp_forestfloor_autumn|gaia/tree/carob']; //'temp_forestfloor_autumn|gaia/fruit/fig' + 'temp_plants_bog|gaia/tree/oak_large', "temp_dirt_gravel_plants|gaia/tree/aleppo_pine", 'temp_forestfloor_autumn|gaia/tree/carob']; var terrainWoodBorder = ['temp_grass_plants|gaia/tree/euro_beech', 'temp_grass_mossy|gaia/tree/poplar', 'temp_grass_mossy|gaia/tree/poplar_lombardy', 'temp_grass_long|gaia/tree/bush_temperate', 'temp_mud_plants|gaia/tree/bush_temperate', 'temp_mud_plants|gaia/tree/bush_badlands', 'temp_grass_long|gaia/fruit/apple', 'temp_grass_clovers|gaia/fruit/berry_01', 'temp_grass_clovers_2|gaia/fruit/grapes', @@ -54,7 +54,7 @@ var resourceRadius = fractionToTiles(1/3); var resourcePerPlayer = [templateStone, templateMetalMine]; -// For large maps there are memory errors with too many trees. A density of 256*192/mapArea works with 0 players. +// For large maps there are memory errors with too many trees. A density of 256x192/mapArea works with 0 players. // Around each player there is an area without trees so with more players the max density can increase a bit. var maxTreeDensity = Math.min(256 * (192 + 8 * numPlayers) / Math.square(mapSize), 1); // Has to be tweeked but works ok var bushChance = 1/3; // 1 means 50% chance in deepest wood, 0.5 means 25% chance in deepest wood @@ -160,7 +160,7 @@ new TileClassPainter(clHill) ]); -// Woods and general hight map +// Woods and general height map for (var x = 0; x < mapSize; x++) for (var z = 0; z < mapSize; z++) { Index: binaries/data/mods/public/maps/random/dodecanese.json =================================================================== --- binaries/data/mods/public/maps/random/dodecanese.json +++ binaries/data/mods/public/maps/random/dodecanese.json @@ -2,7 +2,7 @@ "settings" : { "Name" : "Dodecanese", "Script" : "dodecanese.js", - "Description" : "Controlling access to the Aegean Sea from the East, the Dodecanese have been subject to numerous yet short-lived invasions. Ultimately consolidating power with Rhodes at their lead, these islands developed into great maritime, commercial and cultural centers. Will you acheive the same?", + "Description" : "Controlling access to the Aegean Sea from the east, the Dodecanese have been subject to numerous yet short-lived invasions. Ultimately consolidating power with Rhodes at their lead, these islands developed into great maritime, commercial and cultural centers. Will you achieve the same?", "Keywords": ["naval"], "Preview" : "dodecanese.png", "CircularMap" : true Index: binaries/data/mods/public/maps/random/fields_of_meroe.json =================================================================== --- binaries/data/mods/public/maps/random/fields_of_meroe.json +++ binaries/data/mods/public/maps/random/fields_of_meroe.json @@ -2,7 +2,7 @@ "settings" : { "Name" : "Fields of Meroë", "Script" : "fields_of_meroe.js", - "Description" : "The \"Island of Meroë\", a vast peninsula flanked by the Nile and Atbarah rivers, formed the heartland of ancient Kush. Where the harsh deserts start making way for the semi-arid savannahs and small acacia forests dot the landscape. The area is rich in resources and the ever-present Nile brings life, but grave threats loom on the opposite riverbank.", + "Description" : "The “Island of Meroë”, a vast peninsula flanked by the Nile and Atbarah rivers, formed the heartland of ancient Kush. Where the harsh deserts start making way for the semi-arid savannahs and small acacia forests dot the landscape. The area is rich in resources and the ever-present Nile brings life, but grave threats loom on the opposite riverbank.", "Preview" : "fields_of_meroe_dry.png", "Keywords": [], "CircularMap" : true, Index: binaries/data/mods/public/maps/random/heightmap/heightmap.js =================================================================== --- binaries/data/mods/public/maps/random/heightmap/heightmap.js +++ binaries/data/mods/public/maps/random/heightmap/heightmap.js @@ -256,7 +256,7 @@ if (heightmap[x][y] > heightRange.min && heightmap[x][y] < heightRange.max && // Has correct height (!isCircular || r - Math.euclidDistance2D(x, y, r, r) >= minDistance)) // Enough distance to the map border - validVertices.push({ "x": x, "y": y , "dist": minDistance}); + validVertices.push({ "x": x, "y": y, "dist": minDistance }); } for (let tries = 0; tries < maxTries; ++tries) @@ -316,9 +316,9 @@ /** * Returns an inclination map corresponding to the tiles between the heightmaps vertices: * array of heightmap width-1 arrays of height-1 vectors (associative arrays) of the form: - * { "x": x_slope, "y": y_slope ] so a 2D Vector pointing to the hightest incline (with the length the incline in the vectors direction) - * The x and y coordinates of a tile in the terrain texture map correspond to those of the inclination map - * @param {array} [heightmap=g_Map.height] - The reliefmap the inclination map is to be generated from + * { "x": x_slope, "y": y_slope } - A 2D vector pointing to the highest incline (with the length the inclination in the vector's direction). + * The x and y coordinates of a tile in the terrain texture map correspond to those of the inclination map. + * @param {array} [heightmap=g_Map.height] - The reliefmap the inclination map is to be generated from. */ function getInclineMap(heightmap) { @@ -335,7 +335,7 @@ let dy = heightmap[x][y + 1] - heightmap[x][y]; let next_dx = heightmap[x + 1][y + 1] - heightmap[x][y + 1]; let next_dy = heightmap[x + 1][y + 1] - heightmap[x + 1][y]; - inclineMap[x][y] = { "x" : 0.5 * (dx + next_dx), "y" : 0.5 * (dy + next_dy) }; + inclineMap[x][y] = { "x": 0.5 * (dx + next_dx), "y": 0.5 * (dy + next_dy) }; } } return inclineMap; @@ -358,8 +358,8 @@ for (let y = 0; y < max_y; ++y) { vectorField[x].push({ - "x" : scalarField[(x + 1) % max_x][y] - scalarField[x][y], - "y" : scalarField[x][(y + 1) % max_y] - scalarField[x][y] + "x": scalarField[(x + 1) % max_x][y] - scalarField[x][y], + "y": scalarField[x][(y + 1) % max_y] - scalarField[x][y] }); } } @@ -383,7 +383,7 @@ let next_y = (y + 1) % max_y; let prev_y = (y + max_y - 1) % max_y; - let slopes = [- dHeight[x][y].x, - dHeight[x][y].y, dHeight[prev_x][y].x, dHeight[x][prev_y].y]; + let slopes = [-dHeight[x][y].x, -dHeight[x][y].y, dHeight[prev_x][y].x, dHeight[x][prev_y].y]; let sumSlopes = 0; for (let i = 0; i < slopes.length; ++i) Index: binaries/data/mods/public/maps/random/jebel_barkal.json =================================================================== --- binaries/data/mods/public/maps/random/jebel_barkal.json +++ binaries/data/mods/public/maps/random/jebel_barkal.json @@ -2,7 +2,7 @@ "settings" : { "Name" : "Jebel Barkal", "Script" : "jebel_barkal.js", - "Description" : "Starting near the fertile banks of the Nile, the players besiege the heavily defended city Napata which lies at the foot of the hill Jebel Barkal, the \"Pure Mountain\". It is the Southern home of Amun, and according to Kushites and Egyptians alike, the birthplace of man. Known as the Throne of the Two Lands, the ancient religious capital of Napata lay in its shadow. This is where Kings were made... and unmade! Abutting a rich floodplain downstream from the 4th cataract, this area became the breadbasket of ancient Kush.", + "Description" : "Starting near the fertile banks of the Nile, the players besiege the heavily defended city Napata, which lies at the foot of the hill Jebel Barkal, the “Pure Mountain”. It is the southern home of Amun and, according to Kushites and Egyptians alike, the birthplace of man. Known as the “Throne of the Two Lands”, the ancient religious capital of Napata lay in its shadow. This is where kings were made – and unmade! Abutting a rich floodplain downstream from the Fourth Cataract, this area became the breadbasket of ancient Kush.", "Preview" : "jebel_barkal.png", "Keywords": ["trigger"], "CircularMap": true, Index: binaries/data/mods/public/maps/random/rmbiome/generic/snowy.json =================================================================== --- binaries/data/mods/public/maps/random/rmbiome/generic/snowy.json +++ binaries/data/mods/public/maps/random/rmbiome/generic/snowy.json @@ -1,7 +1,7 @@ { "Description": { "Title": "Snowy", - "Description": "Settle in the cold regions of the North, the native habitat of the wooly muskox. Here you can pine away to your content and also hunt the occasional walrus or two." + "Description": "Settle in the cold regions of the Arctic, the native habitat of the muskox. Here you can pine away to your content and also hunt the occasional walrus or two." }, "Environment": { "SunColor": { "r": 0.550, "g": 0.601, "b": 0.644 }, Index: binaries/data/mods/public/maps/random/schwarzwald.js =================================================================== --- binaries/data/mods/public/maps/random/schwarzwald.js +++ binaries/data/mods/public/maps/random/schwarzwald.js @@ -95,24 +95,24 @@ var resourceRadius = fractionToTiles(1/3); -// Setup woods -// For large maps there are memory errors with too many trees. A density of 256*192/mapArea works with 0 players. +// Set up woods. +// For large maps there are memory errors with too many trees. A density of 256x192/mapArea works with 0 players. // Around each player there is an area without trees so with more players the max density can increase a bit. -var maxTreeDensity = Math.min(256 * (192 + 8 * numPlayers) / Math.square(mapSize), 1); // Has to be tweeked but works ok -var bushChance = 1/3; // 1 means 50% chance in deepest wood, 0.5 means 25% chance in deepest wood +var maxTreeDensity = Math.min(256 * (192 + 8 * numPlayers) / Math.square(mapSize), 1); // Has to be tweeked but works ok. +var bushChance = 1/3; // 1 means 50% chance in deepest wood, 0.5 means 25% chance in deepest wood. -// Set height limits and water level by map size +// Set height limits and water level by map size. -// Set target min and max height depending on map size to make average steepness about the same on all map sizes -var heightRange = {'min': MIN_HEIGHT * (g_Map.size + 512) / 8192, 'max': MAX_HEIGHT * (g_Map.size + 512) / 8192, 'avg': (MIN_HEIGHT * (g_Map.size + 512) +MAX_HEIGHT * (g_Map.size + 512))/16384}; +// Set target min and max height depending on map size to make average steepness about the same on all map sizes. +var heightRange = { 'min': MIN_HEIGHT * (g_Map.size + 512) / 8192, 'max': MAX_HEIGHT * (g_Map.size + 512) / 8192, 'avg': (MIN_HEIGHT * (g_Map.size + 512) + MAX_HEIGHT * (g_Map.size + 512)) / 16384 }; -// Set average water coverage -var averageWaterCoverage = 1/5; // NOTE: Since erosion is not predictable actual water coverage might vary much with the same values +// Set average water coverage. +var averageWaterCoverage = 1/5; // NOTE: Since erosion is not predictable actual water coverage might vary much with the same values. var heightSeaGround = -MIN_HEIGHT + heightRange.min + averageWaterCoverage * (heightRange.max - heightRange.min); var heightSeaGroundAdjusted = heightSeaGround + MIN_HEIGHT; setWaterHeight(heightSeaGround); -// Setting a 3x3 Grid as initial heightmap +// Setting a 3x3 grid as initial heightmap. var initialReliefmap = [[heightRange.max, heightRange.max, heightRange.max], [heightRange.max, heightRange.min, heightRange.max], [heightRange.max, heightRange.max, heightRange.max]]; setBaseTerrainDiamondSquare(heightRange.min, heightRange.max, initialReliefmap); @@ -212,7 +212,7 @@ new HeightPlacer(Elevation_IncludeMin_IncludeMax, heightRange.min, heighLimits[2]), new LayeredPainter([tWaterBorder, tWater], [2])); -paintTileClassBasedOnHeight(heightRange.min, heighLimits[2], 1, clWater); +paintTileClassBasedOnHeight(heightRange.min, heighLimits[2], 1, clWater); Engine.SetProgress(60); g_Map.log("Painting paths"); @@ -230,7 +230,7 @@ new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetPath, 1), new TileClassPainter(clPath) ], - avoidClasses(clPath, 0, clOpen, 0 ,clWater, 4, clBaseResource, 4)); + avoidClasses(clPath, 0, clOpen, 0, clWater, 4, clBaseResource, 4)); } Engine.SetProgress(75); Index: binaries/data/mods/public/maps/random/wild_lake.js =================================================================== --- binaries/data/mods/public/maps/random/wild_lake.js +++ binaries/data/mods/public/maps/random/wild_lake.js @@ -143,60 +143,60 @@ var mercenaryCampGuards = { "generic/temperate": [ - { "Template" : "structures/merc_camp_egyptian" }, - { "Template" : "units/mace/infantry_javelineer_b", "Count" : 4 }, - { "Template" : "units/mace/cavalry_spearman_e", "Count" : 3 }, - { "Template" : "units/mace/infantry_archer_a", "Count" : 4 }, - { "Template" : "units/mace/champion_infantry_spearman", "Count" : 3 } + { "Template": "structures/merc_camp_egyptian" }, + { "Template": "units/mace/infantry_javelineer_b", "Count": 4 }, + { "Template": "units/mace/cavalry_spearman_e", "Count": 3 }, + { "Template": "units/mace/infantry_archer_a", "Count": 4 }, + { "Template": "units/mace/champion_infantry_spearman", "Count": 3 } ], "generic/snowy": [ - { "Template" : "structures/ptol/mercenary_camp" }, - { "Template" : "units/brit/infantry_javelineer_b", "Count" : 4 }, - { "Template" : "units/brit/cavalry_swordsman_e", "Count" : 3 }, - { "Template" : "units/brit/infantry_slinger_a", "Count" : 4 }, - { "Template" : "units/brit/champion_infantry", "Count" : 3 } + { "Template": "structures/ptol/mercenary_camp" }, + { "Template": "units/brit/infantry_javelineer_b", "Count": 4 }, + { "Template": "units/brit/cavalry_swordsman_e", "Count": 3 }, + { "Template": "units/brit/infantry_slinger_a", "Count": 4 }, + { "Template": "units/brit/champion_infantry", "Count": 3 } ], "generic/desert": [ - { "Template" : "structures/ptol/mercenary_camp" }, - { "Template" : "units/pers/infantry_javelineer_b", "Count" : 4 }, - { "Template" : "units/pers/cavalry_axeman_e", "Count" : 3 }, - { "Template" : "units/pers/infantry_archer_a", "Count" : 4 }, - { "Template" : "units/pers/champion_infantry", "Count" : 3 } + { "Template": "structures/ptol/mercenary_camp" }, + { "Template": "units/pers/infantry_javelineer_b", "Count": 4 }, + { "Template": "units/pers/cavalry_axeman_e", "Count": 3 }, + { "Template": "units/pers/infantry_archer_a", "Count": 4 }, + { "Template": "units/pers/champion_infantry", "Count": 3 } ], "generic/alpine": [ - { "Template" : "structures/ptol/mercenary_camp" }, - { "Template" : "units/rome/infantry_swordsman_b", "Count" : 4 }, - { "Template" : "units/rome/cavalry_spearman_e", "Count" : 3 }, - { "Template" : "units/rome/infantry_javelineer_a", "Count" : 4 }, - { "Template" : "units/rome/champion_infantry", "Count" : 3 } + { "Template": "structures/ptol/mercenary_camp" }, + { "Template": "units/rome/infantry_swordsman_b", "Count": 4 }, + { "Template": "units/rome/cavalry_spearman_e", "Count": 3 }, + { "Template": "units/rome/infantry_javelineer_a", "Count": 4 }, + { "Template": "units/rome/champion_infantry", "Count": 3 } ], "generic/mediterranean": [ - { "Template" : "structures/merc_camp_egyptian" }, - { "Template" : "units/iber/infantry_javelineer_b", "Count" : 4 }, - { "Template" : "units/iber/cavalry_spearman_e", "Count" : 3 }, - { "Template" : "units/iber/infantry_slinger_a", "Count" : 4 }, - { "Template" : "units/iber/champion_infantry", "Count" : 3 } + { "Template": "structures/merc_camp_egyptian" }, + { "Template": "units/iber/infantry_javelineer_b", "Count": 4 }, + { "Template": "units/iber/cavalry_spearman_e", "Count": 3 }, + { "Template": "units/iber/infantry_slinger_a", "Count": 4 }, + { "Template": "units/iber/champion_infantry", "Count": 3 } ], "generic/savanna": [ - { "Template" : "structures/merc_camp_egyptian" }, - { "Template" : "units/sele/infantry_javelineer_b", "Count" : 4 }, - { "Template" : "units/sele/cavalry_spearman_merc_e", "Count" : 3 }, - { "Template" : "units/sele/infantry_spearman_a", "Count" : 4 }, - { "Template" : "units/sele/champion_infantry_swordsman", "Count" : 3 } + { "Template": "structures/merc_camp_egyptian" }, + { "Template": "units/sele/infantry_javelineer_b", "Count": 4 }, + { "Template": "units/sele/cavalry_spearman_merc_e", "Count": 3 }, + { "Template": "units/sele/infantry_spearman_a", "Count": 4 }, + { "Template": "units/sele/champion_infantry_swordsman", "Count": 3 } ], "generic/tropic": [ - { "Template" : "structures/merc_camp_egyptian" }, - { "Template" : "units/ptol/infantry_javelineer_b", "Count" : 4 }, - { "Template" : "units/ptol/cavalry_archer_e", "Count" : 3 }, - { "Template" : "units/ptol/infantry_slinger_a", "Count" : 4 }, - { "Template" : "units/ptol/champion_infantry_pikeman", "Count" : 3 } + { "Template": "structures/merc_camp_egyptian" }, + { "Template": "units/ptol/infantry_javelineer_b", "Count": 4 }, + { "Template": "units/ptol/cavalry_archer_e", "Count": 3 }, + { "Template": "units/ptol/infantry_slinger_a", "Count": 4 }, + { "Template": "units/ptol/champion_infantry_pikeman", "Count": 3 } ], "generic/autumn": [ - { "Template" : "structures/ptol/mercenary_camp" }, - { "Template" : "units/gaul/infantry_javelineer_b", "Count" : 4 }, - { "Template" : "units/gaul/cavalry_swordsman_e", "Count" : 3 }, - { "Template" : "units/gaul/infantry_slinger_a", "Count" : 4 }, - { "Template" : "units/gaul/champion_infantry", "Count" : 3 } + { "Template": "structures/ptol/mercenary_camp" }, + { "Template": "units/gaul/infantry_javelineer_b", "Count": 4 }, + { "Template": "units/gaul/cavalry_swordsman_e", "Count": 3 }, + { "Template": "units/gaul/infantry_slinger_a", "Count": 4 }, + { "Template": "units/gaul/champion_infantry", "Count": 3 } ] }; @@ -224,7 +224,7 @@ randomAngle()); } -// Groves, only Wood +// Groves, only wood let groveActors = [g_Decoratives.grass, g_Decoratives.rockMedium, g_Decoratives.bushMedium]; let clGrove = g_Map.createTileClass(); let clGaiaCamp = g_Map.createTileClass(); @@ -281,10 +281,10 @@ "overlap": 0, "fence": readyWallElement("structures/fence_long", "gaia"), "fence_short": readyWallElement("structures/fence_short", "gaia"), - "bench": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "structures/bench" }, - "foodBin": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "gaia/treasure/food_bin" }, - "animal": { "angle": 0, "length": 0, "indent": 0.75, "bend": 0, "templateName": farmEntities[currentBiome()].animal }, - "farmstead": { "angle": Math.PI, "length": 0, "indent": -3, "bend": 0, "templateName": farmEntities[currentBiome()].building } + "bench": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "structures/bench" }, + "foodBin": { "angle": Math.PI / 2, "length": 1.5, "indent": 0, "bend": 0, "templateName": "gaia/treasure/food_bin" }, + "animal": { "angle": 0, "length": 0, "indent": 0.75, "bend": 0, "templateName": farmEntities[currentBiome()].animal }, + "farmstead": { "angle": Math.PI, "length": 0, "indent": -3, "bend": 0, "templateName": farmEntities[currentBiome()].building } }; let fences = [ @@ -418,12 +418,13 @@ /** * Base terrain shape generation and settings */ - // Height range by map size + +// Height range by map size let heightScale = (g_Map.size + 512) / 1024 / 5; let heightRange = { "min": MIN_HEIGHT * heightScale, "max": MAX_HEIGHT * heightScale }; // Water coverage -let averageWaterCoverage = 1/5; // NOTE: Since terrain generation is quite unpredictable actual water coverage might vary much with the same value +let averageWaterCoverage = 1 / 5; // NOTE: Since terrain generation is quite unpredictable actual water coverage might vary much with the same value let heightSeaGround = -MIN_HEIGHT + heightRange.min + averageWaterCoverage * (heightRange.max - heightRange.min); // Water height in environment and the engine let heightSeaGroundAdjusted = heightSeaGround + MIN_HEIGHT; // Water height as terrain height setWaterHeight(heightSeaGround); @@ -494,8 +495,8 @@ heightSeaGroundAdjusted + 7/8 * (heightRange.max - heightSeaGroundAdjusted), // 6 Lower forest border heightRange.max // 7 Forest ]; -let playerHeightRange = { "min" : heighLimits[3], "max" : heighLimits[4] }; -let resourceSpotHeightRange = { "min" : (heighLimits[2] + heighLimits[3]) / 2, "max" : (heighLimits[4] + heighLimits[5]) / 2 }; +let playerHeightRange = { "min": heighLimits[3], "max": heighLimits[4] }; +let resourceSpotHeightRange = { "min": (heighLimits[2] + heighLimits[3]) / 2, "max": (heighLimits[4] + heighLimits[5]) / 2 }; let playerHeight = (playerHeightRange.min + playerHeightRange.max) / 2; // Average player height g_Map.log("Chosing starting locations"); Index: binaries/data/mods/public/maps/tutorials/introductory_tutorial.js =================================================================== --- binaries/data/mods/public/maps/tutorials/introductory_tutorial.js +++ binaries/data/mods/public/maps/tutorials/introductory_tutorial.js @@ -3,7 +3,7 @@ "instructions": markForTranslation("Welcome to the 0 A.D. tutorial."), }, { - "instructions": markForTranslation("Left-click on a female citizen and then right-click on a berry bush to make that female citizen gather food. Female citizens gather vegetables faster than other units."), + "instructions": markForTranslation("Left-click on a Female Citizen and then right-click on a berry bush to make that Female Citizen gather food. Female Citizens gather vegetables faster than other units."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "gather" && msg.cmd.target && @@ -12,7 +12,7 @@ } }, { - "instructions": markForTranslation("Select the citizen-soldier, right-click on a tree near the Civic Center to begin gathering Wood. Citizen Soldiers gather Wood faster than female citizens."), + "instructions": markForTranslation("Select the Citizen Soldier, right-click on a tree near the Civic Center to begin gathering wood. Citizen Soldiers gather wood faster than Female Citizens."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "gather" && msg.cmd.target && @@ -35,7 +35,7 @@ cmpProductionQueue.ResetQueue(); let txt = +msg.count == 1 ? markForTranslation("Do not forget to press the batch training hotkey while clicking to produce multiple units.") : - markForTranslation("Click on the HOPLITE icon."); + markForTranslation("Click on the Hoplite icon."); this.WarningMessage(txt); return; } @@ -43,7 +43,7 @@ } }, { - "instructions": markForTranslation("Select the two idle female citizens and build a house nearby by selecting the house icon. Place the house by left-clicking on a piece of land."), + "instructions": markForTranslation("Select the two idle Female Citizens and build a House nearby by selecting the House icon. Place the House by left-clicking on a piece of land."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "repair" && TriggerHelper.EntityMatchesClassList(msg.cmd.target, "House")) @@ -51,7 +51,7 @@ } }, { - "instructions": markForTranslation("When they are ready, select the newly trained Hoplites and assign them to build a storehouse beside some nearby trees. They will begin to gather Wood when it's constructed."), + "instructions": markForTranslation("When they are ready, select the newly trained Hoplites and assign them to build a Storehouse beside some nearby trees. They will begin to gather wood when it's constructed."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "repair" && TriggerHelper.EntityMatchesClassList(msg.cmd.target, "Storehouse")) @@ -85,7 +85,7 @@ } }, { - "instructions": markForTranslation("Build a farmstead in an open space beside the Civic Center using any idle builders."), + "instructions": markForTranslation("Build a Farmstead in an open space beside the Civic Center using any idle builders."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "repair" && TriggerHelper.EntityMatchesClassList(msg.cmd.target, "Farmstead")) @@ -97,7 +97,7 @@ } }, { - "instructions": markForTranslation("Let's wait for the farmstead to be built."), + "instructions": markForTranslation("Let's wait for the Farmstead to be built."), "OnTrainingFinished": function(msg) { this.trainingDone = true; @@ -109,7 +109,7 @@ } }, { - "instructions": markForTranslation("Once the farmstead is constructed, its builders will automatically begin gathering food if there is any nearby. Select the builders and instead make them construct a field beside the farmstead."), + "instructions": markForTranslation("Once the Farmstead is constructed, its builders will automatically begin gathering food if there is any nearby. Select the builders and instead make them construct a Field beside the Farmstead."), "Init": function() { this.farmStarted = false; @@ -133,7 +133,7 @@ } }, { - "instructions": markForTranslation("The field's builders will now automatically begin gathering food from the field. Using the newly created group of skirmishers, get them to build another house nearby."), + "instructions": markForTranslation("The Field's builders will now automatically begin gathering food from the Field. Using the newly created group of skirmishers, get them to build another House nearby."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "repair" && TriggerHelper.EntityMatchesClassList(msg.cmd.target, "House")) @@ -141,7 +141,7 @@ } }, { - "instructions": markForTranslation("Train a batch of Hoplites at the Civic Center. Select the Civic Center and with it selected right-click on a tree nearby. Units from the Civic Center will now automatically gather Wood."), + "instructions": markForTranslation("Train a batch of Hoplites at the Civic Center. Select the Civic Center and with it selected right-click on a tree nearby. Units from the Civic Center will now automatically gather wood."), "Init": function() { this.rallyPointSet = false; @@ -173,7 +173,7 @@ !msg.cmd.data.command || msg.cmd.data.command != "gather" || !msg.cmd.data.resourceType || msg.cmd.data.resourceType.specific != "tree") { - this.WarningMessage(markForTranslation("Select the Civic Center, then hover the cursor over the tree and right-click when you see your cursor change into a Wood icon.")); + this.WarningMessage(markForTranslation("Select the Civic Center, then hover the cursor over the tree and right-click when you see your cursor change into a wood icon.")); return; } this.rallyPointSet = true; @@ -182,7 +182,7 @@ } }, { - "instructions": markForTranslation("Order the idle Skirmishers to build an outpost to the north east at the edge of your territory. This will be the fifth Village Phase structure that you have built, allowing you to advance to the Town Phase."), + "instructions": markForTranslation("Order the idle Skirmishers to build an outpost to the north east at the edge of your territory. This will be the fifth Village Phase structure that you have built, allowing you to advance to the Town Phase."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "repair" && TriggerHelper.EntityMatchesClassList(msg.cmd.target, "Outpost")) @@ -217,7 +217,7 @@ } }, { - "instructions": markForTranslation("Start training a batch of female citizens in the Civic Center and set its rally point to the farm (right click on it)."), + "instructions": markForTranslation("Start training a batch of Female Citizens in the Civic Center and set its rally point to the farm (right click on it)."), "Init": function() { this.rallyPointSet = false; @@ -235,7 +235,7 @@ cmpProductionQueue.ResetQueue(); let txt = +msg.count == 1 ? markForTranslation("Do not forget to press the batch training hotkey while clicking to produce multiple units.") : - markForTranslation("Click on the female citizen icon."); + markForTranslation("Click on the Female Citizen icon."); this.WarningMessage(txt); return; } @@ -255,7 +255,7 @@ } }, { - "instructions": markForTranslation("Build a Barracks nearby. Whenever your population limit is reached, build an extra house using any available builder units."), + "instructions": markForTranslation("Build a Barracks nearby. Whenever your population limit is reached, build an extra House using any available builder units."), "OnPlayerCommand": function(msg) { if (msg.cmd.type == "repair" && TriggerHelper.EntityMatchesClassList(msg.cmd.target, "Barracks")) @@ -356,8 +356,8 @@ }, { "instructions": [ - markForTranslation("Stop all your soldiers gathering resources and instead task small groups to find the enemy Civic Center on the map. Once The enemy's base has been spotted, send your siege weapons and all remaining soldiers to destroy it.\n"), - markForTranslation("Female citizens should continue to gather resources.") + markForTranslation("Stop all your soldiers gathering resources and instead task small groups to find the enemy Civic Center on the map. Once the enemy's base has been spotted, send your Siege Engines and all remaining soldiers to destroy it.\n"), + markForTranslation("Female Citizens should continue to gather resources.") ], "OnOwnershipChanged": function(msg) { Index: binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.js =================================================================== --- binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.js +++ binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.js @@ -22,12 +22,12 @@ { "instructions": [ markForTranslation("Now that the Civic Center is selected, you will notice that a production panel will appear on the lower right of your screen detailing the actions that the buildings supports. For the production panel, available actions are not masked in any color, while an icon masked in either grey or red indicates that the action has not been unlocked or you do not have sufficient resources to perform that action, respectively. Additionally, you can hover the cursor over any icon to show a tooltip with more details.\n"), - markForTranslation("The top row of buttons contains portraits of units that may be trained at the building while the bottom one or two rows will have researchable technologies. Hover the cursor over the II icon. The tooltip will tell us that advancing to Town Phase requires both more constructed structures as well as more Food and Wood resources.") + markForTranslation("The top row of buttons contains portraits of units that may be trained at the building while the bottom one or two rows will have researchable technologies. Hover the cursor over the II icon. The tooltip will tell us that advancing to Town Phase requires both more constructed structures as well as more food and wood resources.") ] }, { "instructions": [ - markForTranslation("You have two main types of starting units: female citizens and citizen soldiers. Female citizens are purely economic units; they have low HP, no armor, and little to no attack. Citizen soldiers are workers by default, but in times of need, can utilize a weapon to fight. You have two categories of citizen soldiers: infantry and cavalry. Female citizens and infantry citizen soldiers can gather any land resources while cavalry citizen soldiers can only gather meat from hunted animals.\n") + markForTranslation("You have two main types of starting units: Female Citizens and Citizen Soldiers. Female Citizens are purely economic units; they have low health and little to no attack. Citizen Soldiers are workers by default, but in times of need, can utilize a weapon to fight. You have two categories of Citizen Soldiers: Infantry and Cavalry. Female Citizens and Infantry Citizen Soldiers can gather any land resources while Cavalry Citizen Soldiers can only gather meat from animals.\n") ] }, { @@ -37,12 +37,12 @@ }, { "instructions": [ - markForTranslation("At this point, food and wood are the most important resources for developing your economy, so let's start with gathering food. Female citizens gather vegetables faster than other units.\n"), + markForTranslation("At this point, food and wood are the most important resources for developing your economy, so let's start with gathering food. Female Citizens gather vegetables faster than other units.\n"), markForTranslation("There are primarily three ways to select units:\n"), markForTranslation("1) Hold the left mouse button and drag a selection rectangle that encloses the units you want to select.\n"), markForTranslation("2) Click on one of them and then add additional units to your selection by holding Shift and clicking each additional unit (or also via the above selection rectangle).\n"), markForTranslation("3) Double-click on a unit. This will select every unit of the same type as the specified unit in your visible window. Triple-click will select all units of the same type on the entire map.\n"), - markForTranslation("You can click on an empty space on the map to reset the selection. Try each of these methods before tasking all of your female citizens to gather the grapes to the southeast of your Civic Center by right-clicking on the grapes when you have all the female citizens selected.") + markForTranslation("You can click on an empty space on the map to reset the selection. Try each of these methods before tasking all of your Female Citizens to gather the grapes to the southeast of your Civic Center by right-clicking on the grapes when you have all the Female Citizens selected.") ], "OnPlayerCommand": function(msg) { @@ -53,7 +53,7 @@ }, { "instructions": [ - markForTranslation("Now, let's gather some Wood with your Infantry Citizen Soldiers. Select your Infantry Citizen Soldiers and order them to gather Wood by right-clicking on the nearest tree.") + markForTranslation("Now, let's gather some wood with your Infantry Citizen Soldiers. Select your Infantry Citizen Soldiers and order them to gather wood by right-clicking on the nearest tree.") ], "OnPlayerCommand": function(msg) { @@ -64,7 +64,7 @@ }, { "instructions": [ - markForTranslation("Cavalry Citizen Soldiers are good for hunting. Select your cavalry and order him to hunt the chickens around your Civic Center in similar fashion.") + markForTranslation("Cavalry Citizen Soldiers are good for hunting. Select your Cavalry and order him to hunt the chickens around your Civic Center in similar fashion.") ], "OnPlayerCommand": function(msg) { @@ -76,7 +76,7 @@ { "instructions": [ markForTranslation("All your units are now gathering resources. We should train more units!\n"), - markForTranslation("First, let's set a rally point. Setting a rally point on a building that can train units will automatically designate a task to the new unit upon completion of training. We want to send the newly trained units to gather Wood on the group of trees to the south of the Civic Center. To do so, select the Civic Center by clicking on it and then right-click on one of the trees.\n"), + markForTranslation("First, let's set a rally point. Setting a rally point on a building that can train units will automatically designate a task to the new unit upon completion of training. We want to send the newly trained units to gather wood on the group of trees to the south of the Civic Center. To do so, select the Civic Center by clicking on it and then right-click on one of the trees.\n"), markForTranslation("Rally points are indicated by a small flag at the end of the blue line.") ], "OnPlayerCommand": function(msg) @@ -85,7 +85,7 @@ !msg.cmd.data.command || msg.cmd.data.command != "gather" || !msg.cmd.data.resourceType || msg.cmd.data.resourceType.specific != "tree") { - this.WarningMessage(markForTranslation("Select the Civic Center, then hover the cursor over a tree and right-click when you see the cursor change into a Wood icon.")); + this.WarningMessage(markForTranslation("Select the Civic Center, then hover the cursor over a tree and right-click when you see the cursor change into a wood icon.")); return; } this.NextGoal(); @@ -95,7 +95,7 @@ { "instructions": [ markForTranslation("Now that the rally point is set, we can produce additional units and they will do their assigned task automatically.\n"), - markForTranslation("Citizen soldiers gather wood faster than female citizens. Select the Civic Center and, while holding Shift, click on the second unit icon, the hoplites (holding Shift trains a batch of five units). You can also train units individually by simply clicking, but training 5 units together takes less time than training 5 units individually.") + markForTranslation("Citizen Soldiers gather wood faster than Female Citizens. Select the Civic Center and, while holding Shift, click on the second unit icon, the Hoplites (holding Shift trains a batch of five units). You can also train units individually by simply clicking, but training 5 units together takes less time than training 5 units individually.") ], "OnTrainingQueued": function(msg) { @@ -116,7 +116,7 @@ { "instructions": [ markForTranslation("Let's wait for the units to be trained.\n"), - markForTranslation("While waiting, direct your attention to the panel at the top of your screen. On the upper left, you will see your current resource supply (Food, Wood, Stone, and Metal). As each worker brings resources back to the Civic Center (or another dropsite), you will see the amount of the corresponding resource increase.\n"), + markForTranslation("While waiting, direct your attention to the panel at the top of your screen. On the upper left, you will see your current resource supply (food, wood, stone, and metal). As each worker brings resources back to the Civic Center (or another dropsite), you will see the amount of the corresponding resource increase.\n"), markForTranslation("This is a very important concept to keep in mind: gathered resources have to be brought back to a dropsite to be accounted, and you should always try to minimize the distance between resource and nearest dropsite to improve your gathering efficiency.") ], "OnTrainingFinished": function(msg) @@ -126,8 +126,8 @@ }, { "instructions": [ - markForTranslation("The newly trained units automatically go to the trees and start gathering Wood.\n"), - markForTranslation("But as they have to bring it back to the Civic Center to deposit it, their gathering efficiency suffers from the distance. To fix that, we can build a storehouse, a dropsite for Wood, Stone, and Metal, close to the trees. To do so, select your five newly trained Citizen Soldiers and look for the construction panel on the bottom right, click on the storehouse icon, move the mouse as close as possible to the trees you want to gather and click on a valid place to build the dropsite.\n"), + markForTranslation("The newly trained units automatically go to the trees and start gathering wood.\n"), + markForTranslation("But as they have to bring it back to the Civic Center to deposit it, their gathering efficiency suffers from the distance. To fix that, we can build a Storehouse, a dropsite for wood, stone, and metal, close to the trees. To do so, select your five newly trained Citizen Soldiers and look for the construction panel on the bottom right, click on the Storehouse icon, move the mouse as close as possible to the trees you want to gather and click on a valid place to build the dropsite.\n"), markForTranslation("Invalid (obstructed) positions will show the building preview overlay in red.") ], "OnPlayerCommand": function(msg) @@ -138,7 +138,7 @@ }, { "instructions": [ - markForTranslation("The selected citizens will automatically start constructing the building once you place the foundation.") + markForTranslation("The selected Citizens will automatically start constructing the building once you place the foundation.") ], "OnStructureBuilt": function(msg) { @@ -149,8 +149,8 @@ }, { "instructions": [ - markForTranslation("When construction finishes, the builders default to gathering Wood automatically.\n"), - markForTranslation("Let's train some female citizens to gather more food. Select the Civic Center, hold Shift and click on the female citizen icon to train 5 female citizens.") + markForTranslation("When construction finishes, the builders default to gathering wood automatically.\n"), + markForTranslation("Let's train some Female Citizens to gather more food. Select the Civic Center, hold Shift and click on the Female Citizen icon to train five Female Citizens.") ], "Init": function() { @@ -175,7 +175,7 @@ { "instructions": [ markForTranslation("Let's wait for the units to be trained.\n"), - markForTranslation("In the meantime, we seem to have enough workers gathering Wood. We should remove the current rally point of the Civic Center away from gathering Wood. For that purpose, right-click on the Civic Center when it is selected (and the flag icon indicating the rally point is crossed out).") + markForTranslation("In the meantime, we seem to have enough workers gathering wood. We should remove the current rally point of the Civic Center away from gathering wood. For that purpose, right-click on the Civic Center when it is selected (and the flag icon indicating the rally point is crossed out).") ], "OnPlayerCommand": function(msg) { @@ -203,14 +203,14 @@ }, { "instructions": [ - markForTranslation("As you have nearly reached the population limit, you must increase it by building some new structures if you want to train more units. The most cost effective structure to increase your population limit is the house.\n"), - markForTranslation("Now that the units are ready, let's see how to build several houses in a row.") + markForTranslation("As you have nearly reached the population limit, you must increase it by building some new structures if you want to train more units. The most cost effective structure to increase your population limit is the House.\n"), + markForTranslation("Now that the units are ready, let's see how to build several Houses in a row.") ] }, { "instructions": [ - markForTranslation("Select two of your newly-trained female citizens and ask them to build these houses in the empty space to the east of the Civic Center. To do so, after selecting the female citizens, click on the house icon in the bottom right panel and, while holding Shift, click first on the position in the map where you want to build the first house, and then click on the position where you want to build the second house (when you give a command while holding Shift, you put the command in a queue; units automatically switch to the next command in their queue when they finish their current command). Press Escape to get rid of the house cursor so you don't spam houses all over the map.\n"), - markForTranslation("Reminder: to select only two female citizens, click on the first one and then hold Shift and click on the second one.") + markForTranslation("Select two of your newly-trained Female Citizens and ask them to build these Houses in the empty space to the east of the Civic Center. To do so, after selecting the Female Citizens, click on the House icon in the bottom right panel and, while holding Shift, click first on the position in the map where you want to build the first House, and then click on the position where you want to build the second House (when you give a command while holding Shift, you put the command in a queue; units automatically switch to the next command in their queue when they finish their current command). Press Escape to get rid of the House cursor so you don't spam Houses all over the map.\n"), + markForTranslation("Reminder: to select only two Female Citizens, click on the first one and then hold Shift and click on the second one.") ], "Init": function() { @@ -244,7 +244,7 @@ { "instructions": [ markForTranslation("You may notice that berries are a finite supply of food. We will need a more lasting food source. Fields produce an unlimited food resource, but are slower to gather than forageable fruits.\n"), - markForTranslation("But to minimize the distance between a farm and its corresponding food dropsite, we will first build a farmstead.") + markForTranslation("But to minimize the distance between a farm and its corresponding food dropsite, we will first build a Farmstead.") ], "delay": -1, "OnOwnershipChanged": function(msg) @@ -255,9 +255,9 @@ }, { "instructions": [ - markForTranslation("Select the three remaining (idle) female citizens and order them to build a farmstead in the center of the large open area to the west of the Civic Center.\n"), - markForTranslation("We will need a decent chunk of space around the farmstead to build fields. In addition, we can see goats on the west side to further improve our food gathering efficiency should we ever decide to hunt them.\n"), - markForTranslation("If you try to select the three idle female citizens by clicking and dragging a selection rectangle over them, you might accidentally select additional units. To avoid that, hold the I key while selecting so that only idle units are selected. If you accidentally select a cavalry unit, hold Ctrl and click on the cavalry unit icon of the selection panel at the bottom of the screen to remove the cavalry unit from the current selection.") + markForTranslation("Select the three remaining (idle) Female Citizens and order them to build a Farmstead in the center of the large open area to the west of the Civic Center.\n"), + markForTranslation("We will need a decent chunk of space around the Farmstead to build Fields. In addition, we can see goats on the west side to further improve our food gathering efficiency should we ever decide to hunt them.\n"), + markForTranslation("If you try to select the three idle Female Citizens by clicking and dragging a selection rectangle over them, you might accidentally select additional units. To avoid that, hold the I key while selecting so that only idle units are selected. If you accidentally select a cavalry unit, hold Ctrl and click on the cavalry unit icon of the selection panel at the bottom of the screen to remove the cavalry unit from the current selection.") ], "OnPlayerCommand": function(msg) { @@ -272,8 +272,8 @@ }, { "instructions": [ - markForTranslation("When the farmstead construction is finished, its builders will automatically look for food, and in this case, they will go after the nearby goats.\n"), - markForTranslation("But your house builders will only look for something else to build and, if nothing found, become idle. Let's wait for them to build the houses.") + markForTranslation("When the Farmstead construction is finished, its builders will automatically look for food, and in this case, they will go after the nearby goats.\n"), + markForTranslation("But your House builders will only look for something else to build and, if nothing found, become idle. Let's wait for them to build the Houses.") ], "IsDone": function() { @@ -289,7 +289,7 @@ }, { "instructions": [ - markForTranslation("When both houses are built, select your two female citizens and order them to build a field as close as possible to the farmstead, which is a dropsite for all types of food.") + markForTranslation("When both Houses are built, select your two Female Citizens and order them to build a Field as close as possible to the Farmstead, which is a dropsite for all types of food.") ], "OnPlayerCommand": function(msg) { @@ -299,7 +299,7 @@ }, { "instructions": [ - markForTranslation("When the field is ready, the builders will automatically start gathering it.\n"), + markForTranslation("When the Field is ready, the builders will automatically start gathering it.\n"), markForTranslation("The cavalry unit should have slaughtered all chickens by now. Select it and explore the south-west area: there is a lake with some camels around. Move your cavalry by right-clicking on the point you want to go, and when you see a herd of camels, right-click on one of them to start hunting for food.") ], "OnPlayerCommand": function(msg) @@ -319,7 +319,7 @@ (msg.cmd.data.command != "build" || !msg.cmd.data.target || !TriggerHelper.EntityMatchesClassList(msg.cmd.data.target, "Field")) && (msg.cmd.data.command != "gather" || !msg.cmd.data.resourceType || msg.cmd.data.resourceType.specific != "grain")) { - this.WarningMessage(markForTranslation("Select the Civic Center and right-click on the field.")); + this.WarningMessage(markForTranslation("Select the Civic Center and right-click on the Field.")); return; } this.NextGoal(); @@ -327,7 +327,7 @@ }, { "instructions": [ - markForTranslation("Now click three times on the female citizen icon in the bottom right panel to train three additional farmers.") + markForTranslation("Now click three times on the Female Citizen icon in the bottom right panel to train three additional farmers.") ], "Init": function(msg) { @@ -353,7 +353,7 @@ { "instructions": [ markForTranslation("You can increase the gather rates of your workers by researching new technologies available in some buildings.\n"), - markForTranslation("The farming rate, for example, can be improved with a researchable technology in the farmstead. Select the farmstead and look at its production panel on the bottom right. You will see several researchable technologies. Hover the cursor over them to see their costs and effects and click on the one you want to research.") + markForTranslation("The farming rate, for example, can be improved with a researchable technology in the Farmstead. Select the Farmstead and look at its production panel on the bottom right. You will see several researchable technologies. Hover the cursor over them to see their costs and effects and click on the one you want to research.") ], "IsDone": function() { @@ -381,7 +381,7 @@ }, { "instructions": [ - markForTranslation("Let's wait for the Barracks to be built. As this construction is lengthy, you can add two soldiers to build it faster. To do so, select your Civic Center and set up a rally point on the Barracks foundation by right-clicking on it (you should see a hammer icon). Then produce two more builders by clicking on the hoplite icon twice.") + markForTranslation("Let's wait for the Barracks to be built. As this construction is lengthy, you can add two soldiers to build it faster. To do so, select your Civic Center and set up a rally point on the Barracks foundation by right-clicking on it (you should see a hammer icon). Then produce two more builders by clicking on the Hoplite icon twice.") ], "OnStructureBuilt": function(msg) { @@ -406,14 +406,14 @@ }, { "instructions": [ - markForTranslation("In later phases, you need usually Stone and Metal to build bigger structures and train better soldiers. Hence, while waiting for the research to be done, you will send half of your idle Citizen Soldiers (who have finished building the Barracks) to gather Stone and the other half to gather Metal.\n"), - markForTranslation("To do so, we could select three Citizen Soldiers and right-click on the Stone mine on the west of the Civic Center (the cursor changes when hovering the Stone mine while your soldiers are selected). However, these soldiers were gathering Wood, so they may still carry some Wood which would be lost when starting to gather another resource.") + markForTranslation("In later phases, you need usually stone and metal to build bigger structures and train better soldiers. Hence, while waiting for the research to be done, you will send half of your idle Citizen Soldiers (who have finished building the Barracks) to gather stone and the other half to gather metal.\n"), + markForTranslation("To do so, we could select three Citizen Soldiers and right-click on the stone quarry on the west of the Civic Center (the cursor changes when hovering the stone quarry while your soldiers are selected). However, these soldiers were gathering wood, so they may still carry some wood which would be lost when starting to gather another resource.") ], }, { "instructions": [ - markForTranslation("Thus, we should order them to deposit their Wood in the Civic Center along the way. To do so, we will hold Shift while clicking to queue orders: select your soldiers, hold Shift and right-click on the Civic Center to deposit their Wood and then hold Shift and right-click on the Stone mine to gather it.\n"), - markForTranslation("Perform a similar order queue with the remaining soldiers and the Metal mine in the west.") + markForTranslation("Thus, we should order them to deposit their wood in the Civic Center along the way. To do so, we will hold Shift while clicking to queue orders: select your soldiers, hold Shift and right-click on the Civic Center to deposit their wood and then hold Shift and right-click on the stone quarry to gather it.\n"), + markForTranslation("Perform a similar order queue with the remaining soldiers and the metal mine in the west.") ], "Init": function() { Index: binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.xml =================================================================== --- binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.xml +++ binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.xml @@ -47,7 +47,7 @@ "grass_field_dry" ], "CircularMap": true, - "Description": "This map will give a rough guide for starting the game effectively. Early in the game the most important thing is to gather resources as fast as possible so you are able to build enough troops later.", + "Description": "This map will give a rough guide for starting the game effectively. Early in the game the most important thing is to gather resources as fast as possible so you are able to build enough troops later.", "Keywords": [ "trigger" ],