Changeset 25037
- Timestamp:
- Mar 12, 2021, 7:52:26 AM (3 years ago)
- Location:
- ps/trunk/binaries/data/mods/public/maps
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
ps/trunk/binaries/data/mods/public/maps/random/ardennes_forest.json
r23994 r25037 3 3 "Name" : "Ardennes Forest", 4 4 "Script" : "ardennes_forest.js", 5 "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 5 "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.", 6 6 "CircularMap" : true, 7 7 "Preview" : "ardennes_forest.png" -
ps/trunk/binaries/data/mods/public/maps/random/caledonian_meadows.js
r24216 r25037 42 42 "fence": readyWallElement("structures/fence_long", "gaia"), 43 43 "fence_short": readyWallElement("structures/fence_short", "gaia"), 44 "bench": { "angle": Math.PI / 2, "length": 1.5, "indent": 0,"bend": 0, "templateName": "structures/bench" },45 "sheep": { "angle": 0, "length": 0,"indent": 0.75, "bend": 0, "templateName": "gaia/fauna_sheep" },46 "foodBin": { "angle": Math.PI / 2, "length": 1.5, "indent": 0,"bend": 0, "templateName": "gaia/treasure/food_bin" },47 "farmstead": { "angle": Math.PI, "length": 0, "indent": -3,"bend": 0, "templateName": "structures/brit/farmstead" }44 "bench": "bend": 0, "templateName": "structures/bench" }, 45 "sheep": "indent": 0.75, "bend": 0, "templateName": "gaia/fauna_sheep" }, 46 "foodBin": "bend": 0, "templateName": "gaia/treasure/food_bin" }, 47 "farmstead": { "angle": Math.PI, "bend": 0, "templateName": "structures/brit/farmstead" } 48 48 }; 49 49 … … 84 84 fences.push(new Fortress("fence", clone(fences[i].wall).reverse())); 85 85 86 // Groves, only Wood86 // Groves, only ood 87 87 let groveEntities = ["gaia/tree/bush_temperate", "gaia/tree/euro_beech"]; 88 88 let groveActors = [ … … 191 191 setBiome("generic/alpine"); 192 192 g_Environment.Fog.FogColor = { "r": 0.8, "g": 0.8, "b": 0.8, "a": 0.01 }; 193 g_Environment.Water.WaterBody.Colour = { "r" : 0.3, "g" : 0.05, "b" : 0.1, "a": 0.1 };193 g_Environment.Water.WaterBody.Colour = { "r": 0.1 }; 194 194 g_Environment.Water.WaterBody.Murkiness = 0.4; 195 195 -
ps/trunk/binaries/data/mods/public/maps/random/cantabrian_highlands.json
r23994 r25037 3 3 "Name" : "Cantabrian Highlands", 4 4 "Script" : "cantabrian_highlands.js", 5 "Description" : "Each player starts on a hill surrounded by steep cliffs. Represents Cantabria, a mountainous region in the North of the Iberian peninsula.",5 "Description" : "Each player starts on a hill surrounded by steep cliffs. Represents Cantabria, a mountainous region in the orth of the Iberian peninsula.", 6 6 "Preview" : "cantabrian_highlands.png", 7 7 "CircularMap" : true -
ps/trunk/binaries/data/mods/public/maps/random/deep_forest.js
r24070 r25037 9 9 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"]; 10 10 var terrainWood = ['temp_grass_mossy|gaia/tree/oak', 'temp_forestfloor_pine|gaia/tree/pine', 'temp_mud_plants|gaia/tree/dead', 11 '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'11 'temp_plants_bog|gaia/tree/oak_large', "temp_dirt_gravel_plants|gaia/tree/aleppo_pine", 'temp_forestfloor_autumn|gaia/tree/carob']; 12 12 var terrainWoodBorder = ['temp_grass_plants|gaia/tree/euro_beech', 'temp_grass_mossy|gaia/tree/poplar', 'temp_grass_mossy|gaia/tree/poplar_lombardy', 13 13 'temp_grass_long|gaia/tree/bush_temperate', 'temp_mud_plants|gaia/tree/bush_temperate', 'temp_mud_plants|gaia/tree/bush_badlands', … … 55 55 var resourcePerPlayer = [templateStone, templateMetalMine]; 56 56 57 // For large maps there are memory errors with too many trees. A density of 256*192/mapArea works with 0 players.57 // For large maps there are memory errors with too many trees. 192/mapArea works with 0 players. 58 58 // Around each player there is an area without trees so with more players the max density can increase a bit. 59 59 var maxTreeDensity = Math.min(256 * (192 + 8 * numPlayers) / Math.square(mapSize), 1); // Has to be tweeked but works ok … … 161 161 ]); 162 162 163 // Woods and general h ight map163 // Woods and general hight map 164 164 for (var x = 0; x < mapSize; x++) 165 165 for (var z = 0; z < mapSize; z++) -
ps/trunk/binaries/data/mods/public/maps/random/dodecanese.json
r23994 r25037 3 3 "Name" : "Dodecanese", 4 4 "Script" : "dodecanese.js", 5 "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?",5 "Description" : "Controlling access to the Aegean Sea from the ve the same?", 6 6 "Keywords": ["naval"], 7 7 "Preview" : "dodecanese.png", -
ps/trunk/binaries/data/mods/public/maps/random/fields_of_meroe.json
r23994 r25037 3 3 "Name" : "Fields of Meroë", 4 4 "Script" : "fields_of_meroe.js", 5 "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.",5 "Description" : "The , 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.", 6 6 "Preview" : "fields_of_meroe_dry.png", 7 7 "Keywords": [], -
ps/trunk/binaries/data/mods/public/maps/random/heightmap/heightmap.js
r23992 r25037 257 257 if (heightmap[x][y] > heightRange.min && heightmap[x][y] < heightRange.max && // Has correct height 258 258 (!isCircular || r - Math.euclidDistance2D(x, y, r, r) >= minDistance)) // Enough distance to the map border 259 validVertices.push({ "x": x, "y": y , "dist": minDistance});259 validVertices.push({ "x": x, "y": y}); 260 260 } 261 261 … … 317 317 * Returns an inclination map corresponding to the tiles between the heightmaps vertices: 318 318 * array of heightmap width-1 arrays of height-1 vectors (associative arrays) of the form: 319 * { "x": x_slope, "y": y_slope ] so a 2D Vector pointing to the hightest incline (with the length the incline in the vectors direction)320 * The x and y coordinates of a tile in the terrain texture map correspond to those of the inclination map 321 * @param {array} [heightmap=g_Map.height] - The reliefmap the inclination map is to be generated from 319 * { "x": x_slope, "y": y_slope 320 * The x and y coordinates of a tile in the terrain texture map correspond to those of the inclination map 321 * @param {array} [heightmap=g_Map.height] - The reliefmap the inclination map is to be generated from 322 322 */ 323 323 function getInclineMap(heightmap) … … 336 336 let next_dx = heightmap[x + 1][y + 1] - heightmap[x][y + 1]; 337 337 let next_dy = heightmap[x + 1][y + 1] - heightmap[x + 1][y]; 338 inclineMap[x][y] = { "x" : 0.5 * (dx + next_dx), "y": 0.5 * (dy + next_dy) };338 inclineMap[x][y] = { "x": 0.5 * (dy + next_dy) }; 339 339 } 340 340 } … … 359 359 { 360 360 vectorField[x].push({ 361 "x" 362 "y" 361 "x": scalarField[(x + 1) % max_x][y] - scalarField[x][y], 362 "y": scalarField[x][(y + 1) % max_y] - scalarField[x][y] 363 363 }); 364 364 } … … 384 384 let prev_y = (y + max_y - 1) % max_y; 385 385 386 let slopes = [- dHeight[x][y].x, -dHeight[x][y].y, dHeight[prev_x][y].x, dHeight[x][prev_y].y];386 let slopes = [-dHeight[x][y].y, dHeight[prev_x][y].x, dHeight[x][prev_y].y]; 387 387 388 388 let sumSlopes = 0; -
ps/trunk/binaries/data/mods/public/maps/random/jebel_barkal.json
r23994 r25037 3 3 "Name" : "Jebel Barkal", 4 4 "Script" : "jebel_barkal.js", 5 "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.",5 "Description" : "Starting near the fertile banks of the Nile, the players besiege the heavily defended city Napataataract, this area became the breadbasket of ancient Kush.", 6 6 "Preview" : "jebel_barkal.png", 7 7 "Keywords": ["trigger"], -
ps/trunk/binaries/data/mods/public/maps/random/rmbiome/generic/snowy.json
r24070 r25037 2 2 "Description": { 3 3 "Title": "Snowy", 4 "Description": "Settle in the cold regions of the North, the native habitat of the woolymuskox. Here you can pine away to your content and also hunt the occasional walrus or two."4 "Description": "Settle in the cold regions of the muskox. Here you can pine away to your content and also hunt the occasional walrus or two." 5 5 }, 6 6 "Environment": { -
ps/trunk/binaries/data/mods/public/maps/random/schwarzwald.js
r24070 r25037 96 96 var resourceRadius = fractionToTiles(1/3); 97 97 98 // Set up woods99 // For large maps there are memory errors with too many trees. A density of 256*192/mapArea works with 0 players.98 // Set 99 // For large maps there are memory errors with too many trees. 192/mapArea works with 0 players. 100 100 // Around each player there is an area without trees so with more players the max density can increase a bit. 101 var maxTreeDensity = Math.min(256 * (192 + 8 * numPlayers) / Math.square(mapSize), 1); // Has to be tweeked but works ok 102 var bushChance = 1/3; // 1 means 50% chance in deepest wood, 0.5 means 25% chance in deepest wood 103 104 // Set height limits and water level by map size 105 106 // Set target min and max height depending on map size to make average steepness about the same on all map sizes 107 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};108 109 // Set average water coverage 110 var averageWaterCoverage = 1/5; // NOTE: Since erosion is not predictable actual water coverage might vary much with the same values 101 var maxTreeDensity = Math.min(256 * (192 + 8 * numPlayers) / Math.square(mapSize), 1); // Has to be tweeked but works ok 102 var bushChance = 1/3; // 1 means 50% chance in deepest wood, 0.5 means 25% chance in deepest wood 103 104 // Set height limits and water level by map size 105 106 // Set target min and max height depending on map size to make average steepness about the same on all map sizes 107 var heightRange = {}; 108 109 // Set average water coverage 110 var averageWaterCoverage = 1/5; // NOTE: Since erosion is not predictable actual water coverage might vary much with the same values 111 111 var heightSeaGround = -MIN_HEIGHT + heightRange.min + averageWaterCoverage * (heightRange.max - heightRange.min); 112 112 var heightSeaGroundAdjusted = heightSeaGround + MIN_HEIGHT; 113 113 setWaterHeight(heightSeaGround); 114 114 115 // Setting a 3x3 Grid as initial heightmap115 // Setting a 3x3 116 116 var initialReliefmap = [[heightRange.max, heightRange.max, heightRange.max], [heightRange.max, heightRange.min, heightRange.max], [heightRange.max, heightRange.max, heightRange.max]]; 117 117 … … 213 213 new LayeredPainter([tWaterBorder, tWater], [2])); 214 214 215 paintTileClassBasedOnHeight(heightRange.min, 215 paintTileClassBasedOnHeight(heightRange.min, heighLimits[2], 1, clWater); 216 216 Engine.SetProgress(60); 217 217 … … 231 231 new TileClassPainter(clPath) 232 232 ], 233 avoidClasses(clPath, 0, clOpen, 0 ,clWater, 4, clBaseResource, 4));233 avoidClasses(clPath, 0, clOpen, 0clWater, 4, clBaseResource, 4)); 234 234 } 235 235 Engine.SetProgress(75); -
ps/trunk/binaries/data/mods/public/maps/random/wild_lake.js
r24657 r25037 144 144 var mercenaryCampGuards = { 145 145 "generic/temperate": [ 146 { "Template" 147 { "Template" : "units/mace/infantry_javelineer_b", "Count": 4 },148 { "Template" : "units/mace/cavalry_spearman_e", "Count": 3 },149 { "Template" : "units/mace/infantry_archer_a", "Count": 4 },150 { "Template" : "units/mace/champion_infantry_spearman", "Count": 3 }146 { "Template": "structures/merc_camp_egyptian" }, 147 { "Template": 4 }, 148 { "Template": 3 }, 149 { "Template": 4 }, 150 { "Template": 3 } 151 151 ], 152 152 "generic/snowy": [ 153 { "Template" 154 { "Template" : "units/brit/infantry_javelineer_b", "Count": 4 },155 { "Template" : "units/brit/cavalry_swordsman_e", "Count": 3 },156 { "Template" : "units/brit/infantry_slinger_a", "Count": 4 },157 { "Template" : "units/brit/champion_infantry", "Count": 3 }153 { "Template": "structures/ptol/mercenary_camp" }, 154 { "Template": 4 }, 155 { "Template": 3 }, 156 { "Template": 4 }, 157 { "Template": 3 } 158 158 ], 159 159 "generic/desert": [ 160 { "Template" 161 { "Template" : "units/pers/infantry_javelineer_b", "Count": 4 },162 { "Template" : "units/pers/cavalry_axeman_e", "Count": 3 },163 { "Template" : "units/pers/infantry_archer_a", "Count": 4 },164 { "Template" : "units/pers/champion_infantry", "Count": 3 }160 { "Template": "structures/ptol/mercenary_camp" }, 161 { "Template": 4 }, 162 { "Template": 3 }, 163 { "Template": 4 }, 164 { "Template": 3 } 165 165 ], 166 166 "generic/alpine": [ 167 { "Template" 168 { "Template" : "units/rome/infantry_swordsman_b", "Count": 4 },169 { "Template" : "units/rome/cavalry_spearman_e", "Count": 3 },170 { "Template" : "units/rome/infantry_javelineer_a", "Count": 4 },171 { "Template" : "units/rome/champion_infantry", "Count": 3 }167 { "Template": "structures/ptol/mercenary_camp" }, 168 { "Template": 4 }, 169 { "Template": 3 }, 170 { "Template": 4 }, 171 { "Template": 3 } 172 172 ], 173 173 "generic/mediterranean": [ 174 { "Template" 175 { "Template" : "units/iber/infantry_javelineer_b", "Count": 4 },176 { "Template" : "units/iber/cavalry_spearman_e", "Count": 3 },177 { "Template" : "units/iber/infantry_slinger_a", "Count": 4 },178 { "Template" : "units/iber/champion_infantry", "Count": 3 }174 { "Template": "structures/merc_camp_egyptian" }, 175 { "Template": 4 }, 176 { "Template": 3 }, 177 { "Template": 4 }, 178 { "Template": 3 } 179 179 ], 180 180 "generic/savanna": [ 181 { "Template" 182 { "Template" : "units/sele/infantry_javelineer_b", "Count": 4 },183 { "Template" : "units/sele/cavalry_spearman_merc_e", "Count": 3 },184 { "Template" : "units/sele/infantry_spearman_a", "Count": 4 },185 { "Template" : "units/sele/champion_infantry_swordsman", "Count": 3 }181 { "Template": "structures/merc_camp_egyptian" }, 182 { "Template": 4 }, 183 { "Template": 3 }, 184 { "Template": 4 }, 185 { "Template": 3 } 186 186 ], 187 187 "generic/tropic": [ 188 { "Template" 189 { "Template" : "units/ptol/infantry_javelineer_b", "Count": 4 },190 { "Template" : "units/ptol/cavalry_archer_e", "Count": 3 },191 { "Template" : "units/ptol/infantry_slinger_a", "Count": 4 },192 { "Template" : "units/ptol/champion_infantry_pikeman", "Count": 3 }188 { "Template": "structures/merc_camp_egyptian" }, 189 { "Template": 4 }, 190 { "Template": 3 }, 191 { "Template": 4 }, 192 { "Template": 3 } 193 193 ], 194 194 "generic/autumn": [ 195 { "Template" 196 { "Template" : "units/gaul/infantry_javelineer_b", "Count": 4 },197 { "Template" : "units/gaul/cavalry_swordsman_e", "Count": 3 },198 { "Template" : "units/gaul/infantry_slinger_a", "Count": 4 },199 { "Template" : "units/gaul/champion_infantry", "Count": 3 }195 { "Template": "structures/ptol/mercenary_camp" }, 196 { "Template": 4 }, 197 { "Template": 3 }, 198 { "Template": 4 }, 199 { "Template": 3 } 200 200 ] 201 201 }; … … 225 225 } 226 226 227 // Groves, only Wood227 // Groves, only ood 228 228 let groveActors = [g_Decoratives.grass, g_Decoratives.rockMedium, g_Decoratives.bushMedium]; 229 229 let clGrove = g_Map.createTileClass(); … … 282 282 "fence": readyWallElement("structures/fence_long", "gaia"), 283 283 "fence_short": readyWallElement("structures/fence_short", "gaia"), 284 "bench": { "angle": Math.PI / 2, "length": 1.5, "indent": 0,"bend": 0, "templateName": "structures/bench" },285 "foodBin": { "angle": Math.PI / 2, "length": 1.5, "indent": 0,"bend": 0, "templateName": "gaia/treasure/food_bin" },286 "animal": { "angle": 0, "length": 0,"indent": 0.75, "bend": 0, "templateName": farmEntities[currentBiome()].animal },287 "farmstead": { "angle": Math.PI, "length": 0, "indent": -3,"bend": 0, "templateName": farmEntities[currentBiome()].building }284 "bench": "bend": 0, "templateName": "structures/bench" }, 285 "foodBin": "bend": 0, "templateName": "gaia/treasure/food_bin" }, 286 "animal": "indent": 0.75, "bend": 0, "templateName": farmEntities[currentBiome()].animal }, 287 "farmstead": { "angle": Math.PI, "bend": 0, "templateName": farmEntities[currentBiome()].building } 288 288 }; 289 289 … … 419 419 * Base terrain shape generation and settings 420 420 */ 421 // Height range by map size 421 422 // Height range by map size 422 423 let heightScale = (g_Map.size + 512) / 1024 / 5; 423 424 let heightRange = { "min": MIN_HEIGHT * heightScale, "max": MAX_HEIGHT * heightScale }; 424 425 425 426 // Water coverage 426 let averageWaterCoverage = 1 /5; // NOTE: Since terrain generation is quite unpredictable actual water coverage might vary much with the same value427 let averageWaterCoverage = 15; // NOTE: Since terrain generation is quite unpredictable actual water coverage might vary much with the same value 427 428 let heightSeaGround = -MIN_HEIGHT + heightRange.min + averageWaterCoverage * (heightRange.max - heightRange.min); // Water height in environment and the engine 428 429 let heightSeaGroundAdjusted = heightSeaGround + MIN_HEIGHT; // Water height as terrain height … … 495 496 heightRange.max // 7 Forest 496 497 ]; 497 let playerHeightRange = { "min" : heighLimits[3], "max": heighLimits[4] };498 let resourceSpotHeightRange = { "min" : (heighLimits[2] + heighLimits[3]) / 2, "max": (heighLimits[4] + heighLimits[5]) / 2 };498 let playerHeightRange = { "min": heighLimits[4] }; 499 let resourceSpotHeightRange = { "min": (heighLimits[4] + heighLimits[5]) / 2 }; 499 500 let playerHeight = (playerHeightRange.min + playerHeightRange.max) / 2; // Average player height 500 501 -
ps/trunk/binaries/data/mods/public/maps/tutorials/introductory_tutorial.js
r24216 r25037 4 4 }, 5 5 { 6 "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."),6 "instructions": markForTranslation("Left-click on a itizens gather vegetables faster than other units."), 7 7 "OnPlayerCommand": function(msg) 8 8 { … … 13 13 }, 14 14 { 15 "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."),15 "instructions": markForTranslation("Select the itizens."), 16 16 "OnPlayerCommand": function(msg) 17 17 { … … 36 36 let txt = +msg.count == 1 ? 37 37 markForTranslation("Do not forget to press the batch training hotkey while clicking to produce multiple units.") : 38 markForTranslation("Click on the H OPLITEicon.");38 markForTranslation("Click on the H icon."); 39 39 this.WarningMessage(txt); 40 40 return; … … 44 44 }, 45 45 { 46 "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."),46 "instructions": markForTranslation("Select the two idle ouse by left-clicking on a piece of land."), 47 47 "OnPlayerCommand": function(msg) 48 48 { … … 52 52 }, 53 53 { 54 "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."),54 "instructions": markForTranslation("When they are ready, select the newly trained Hoplites and assign them to build a ood when it's constructed."), 55 55 "OnPlayerCommand": function(msg) 56 56 { … … 86 86 }, 87 87 { 88 "instructions": markForTranslation("Build a farmstead in an open space beside the Civic Center using any idle builders."),88 "instructions": markForTranslation("Build a armstead in an open space beside the Civic Center using any idle builders."), 89 89 "OnPlayerCommand": function(msg) 90 90 { … … 98 98 }, 99 99 { 100 "instructions": markForTranslation("Let's wait for the farmstead to be built."),100 "instructions": markForTranslation("Let's wait for the armstead to be built."), 101 101 "OnTrainingFinished": function(msg) 102 102 { … … 110 110 }, 111 111 { 112 "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."),112 "instructions": markForTranslation("Once the armstead."), 113 113 "Init": function() 114 114 { … … 134 134 }, 135 135 { 136 "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."),136 "instructions": markForTranslation("The ouse nearby."), 137 137 "OnPlayerCommand": function(msg) 138 138 { … … 142 142 }, 143 143 { 144 "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."),144 "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 ood."), 145 145 "Init": function() 146 146 { … … 174 174 !msg.cmd.data.resourceType || msg.cmd.data.resourceType.specific != "tree") 175 175 { 176 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."));176 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 ood icon.")); 177 177 return; 178 178 } … … 183 183 }, 184 184 { 185 "instructions": markForTranslation("Order the idle Skirmishers to build an outpost to the north east at the edge of your territory. 185 "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."), 186 186 "OnPlayerCommand": function(msg) 187 187 { … … 218 218 }, 219 219 { 220 "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)."),220 "instructions": markForTranslation("Start training a batch of itizens in the Civic Center and set its rally point to the farm (right click on it)."), 221 221 "Init": function() 222 222 { … … 236 236 let txt = +msg.count == 1 ? 237 237 markForTranslation("Do not forget to press the batch training hotkey while clicking to produce multiple units.") : 238 markForTranslation("Click on the female citizen icon.");238 markForTranslation("Click on the itizen icon."); 239 239 this.WarningMessage(txt); 240 240 return; … … 256 256 }, 257 257 { 258 "instructions": markForTranslation("Build a Barracks nearby. Whenever your population limit is reached, build an extra house using any available builder units."),258 "instructions": markForTranslation("Build a Barracks nearby. Whenever your population limit is reached, build an extra ouse using any available builder units."), 259 259 "OnPlayerCommand": function(msg) 260 260 { … … 357 357 { 358 358 "instructions": [ 359 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"),360 markForTranslation("Female citizens should continue to gather resources.")359 markForTranslation("Stop all your soldiers gathering resources and instead task small groups to find the enemy Civic Center on the map. Once s and all remaining soldiers to destroy it.\n"), 360 markForTranslation("Female itizens should continue to gather resources.") 361 361 ], 362 362 "OnOwnershipChanged": function(msg) -
ps/trunk/binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.js
r24445 r25037 23 23 "instructions": [ 24 24 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"), 25 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.")26 ] 27 }, 28 { 29 "instructions": [ 30 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 huntedanimals.\n")25 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 ood resources.") 26 ] 27 }, 28 { 29 "instructions": [ 30 markForTranslation("You have two main types of starting units: animals.\n") 31 31 ] 32 32 }, … … 38 38 { 39 39 "instructions": [ 40 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"),40 markForTranslation("At this point, food and wood are the most important resources for developing your economy, so let's start with gathering food. Female itizens gather vegetables faster than other units.\n"), 41 41 markForTranslation("There are primarily three ways to select units:\n"), 42 42 markForTranslation("1) Hold the left mouse button and drag a selection rectangle that encloses the units you want to select.\n"), 43 43 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"), 44 44 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"), 45 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.")45 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 itizens selected.") 46 46 ], 47 47 "OnPlayerCommand": function(msg) … … 54 54 { 55 55 "instructions": [ 56 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.")56 markForTranslation("Now, let's gather some ood by right-clicking on the nearest tree.") 57 57 ], 58 58 "OnPlayerCommand": function(msg) … … 65 65 { 66 66 "instructions": [ 67 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.")67 markForTranslation("Cavalry Citizen Soldiers are good for hunting. Select your avalry and order him to hunt the chickens around your Civic Center in similar fashion.") 68 68 ], 69 69 "OnPlayerCommand": function(msg) … … 77 77 "instructions": [ 78 78 markForTranslation("All your units are now gathering resources. We should train more units!\n"), 79 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"),79 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 ood 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"), 80 80 markForTranslation("Rally points are indicated by a small flag at the end of the blue line.") 81 81 ], … … 86 86 !msg.cmd.data.resourceType || msg.cmd.data.resourceType.specific != "tree") 87 87 { 88 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."));88 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 ood icon.")); 89 89 return; 90 90 } … … 96 96 "instructions": [ 97 97 markForTranslation("Now that the rally point is set, we can produce additional units and they will do their assigned task automatically.\n"), 98 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.")98 markForTranslation("Citizen oplites (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.") 99 99 ], 100 100 "OnTrainingQueued": function(msg) … … 117 117 "instructions": [ 118 118 markForTranslation("Let's wait for the units to be trained.\n"), 119 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"),119 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 (etal). As each worker brings resources back to the Civic Center (or another dropsite), you will see the amount of the corresponding resource increase.\n"), 120 120 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.") 121 121 ], … … 127 127 { 128 128 "instructions": [ 129 markForTranslation("The newly trained units automatically go to the trees and start gathering Wood.\n"),130 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"),129 markForTranslation("The newly trained units automatically go to the trees and start gathering ood.\n"), 130 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 torehouse 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"), 131 131 markForTranslation("Invalid (obstructed) positions will show the building preview overlay in red.") 132 132 ], … … 139 139 { 140 140 "instructions": [ 141 markForTranslation("The selected citizens will automatically start constructing the building once you place the foundation.")141 markForTranslation("The selected itizens will automatically start constructing the building once you place the foundation.") 142 142 ], 143 143 "OnStructureBuilt": function(msg) … … 150 150 { 151 151 "instructions": [ 152 markForTranslation("When construction finishes, the builders default to gathering Wood automatically.\n"),153 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.")152 markForTranslation("When construction finishes, the builders default to gathering ood automatically.\n"), 153 markForTranslation("Let's train some itizens.") 154 154 ], 155 155 "Init": function() … … 176 176 "instructions": [ 177 177 markForTranslation("Let's wait for the units to be trained.\n"), 178 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).")178 markForTranslation("In the meantime, we seem to have enough workers gathering ood. For that purpose, right-click on the Civic Center when it is selected (and the flag icon indicating the rally point is crossed out).") 179 179 ], 180 180 "OnPlayerCommand": function(msg) … … 204 204 { 205 205 "instructions": [ 206 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"),207 markForTranslation("Now that the units are ready, let's see how to build several houses in a row.")208 ] 209 }, 210 { 211 "instructions": [ 212 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"),213 markForTranslation("Reminder: to select only two female citizens, click on the first one and then hold Shift and click on the second one.")206 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 ouse.\n"), 207 markForTranslation("Now that the units are ready, let's see how to build several ouses in a row.") 208 ] 209 }, 210 { 211 "instructions": [ 212 markForTranslation("Select two of your newly-trained ouses all over the map.\n"), 213 markForTranslation("Reminder: to select only two itizens, click on the first one and then hold Shift and click on the second one.") 214 214 ], 215 215 "Init": function() … … 245 245 "instructions": [ 246 246 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"), 247 markForTranslation("But to minimize the distance between a farm and its corresponding food dropsite, we will first build a farmstead.")247 markForTranslation("But to minimize the distance between a farm and its corresponding food dropsite, we will first build a armstead.") 248 248 ], 249 249 "delay": -1, … … 256 256 { 257 257 "instructions": [ 258 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"),259 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"),260 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.")258 markForTranslation("Select the three remaining (idle) armstead in the center of the large open area to the west of the Civic Center.\n"), 259 markForTranslation("We will need a decent chunk of space around the ields. 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"), 260 markForTranslation("If you try to select the three idle itizens 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.") 261 261 ], 262 262 "OnPlayerCommand": function(msg) … … 273 273 { 274 274 "instructions": [ 275 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"),276 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.")275 markForTranslation("When the armstead construction is finished, its builders will automatically look for food, and in this case, they will go after the nearby goats.\n"), 276 markForTranslation("But your ouses.") 277 277 ], 278 278 "IsDone": function() … … 290 290 { 291 291 "instructions": [ 292 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.")292 markForTranslation("When both armstead, which is a dropsite for all types of food.") 293 293 ], 294 294 "OnPlayerCommand": function(msg) … … 300 300 { 301 301 "instructions": [ 302 markForTranslation("When the field is ready, the builders will automatically start gathering it.\n"),302 markForTranslation("When the ield is ready, the builders will automatically start gathering it.\n"), 303 303 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.") 304 304 ], … … 320 320 (msg.cmd.data.command != "gather" || !msg.cmd.data.resourceType || msg.cmd.data.resourceType.specific != "grain")) 321 321 { 322 this.WarningMessage(markForTranslation("Select the Civic Center and right-click on the field."));322 this.WarningMessage(markForTranslation("Select the Civic Center and right-click on the ield.")); 323 323 return; 324 324 } … … 328 328 { 329 329 "instructions": [ 330 markForTranslation("Now click three times on the female citizen icon in the bottom right panel to train three additional farmers.")330 markForTranslation("Now click three times on the itizen icon in the bottom right panel to train three additional farmers.") 331 331 ], 332 332 "Init": function(msg) … … 354 354 "instructions": [ 355 355 markForTranslation("You can increase the gather rates of your workers by researching new technologies available in some buildings.\n"), 356 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.")356 markForTranslation("The farming rate, for example, can be improved with a researchable technology in the armstead 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.") 357 357 ], 358 358 "IsDone": function() … … 382 382 { 383 383 "instructions": [ 384 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.")384 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 oplite icon twice.") 385 385 ], 386 386 "OnStructureBuilt": function(msg) … … 407 407 { 408 408 "instructions": [ 409 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"),410 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.")411 ], 412 }, 413 { 414 "instructions": [ 415 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 mineto gather it.\n"),416 markForTranslation("Perform a similar order queue with the remaining soldiers and the Metal mine in the west.")409 markForTranslation("In later phases, you need usually etal.\n"), 410 markForTranslation("To do so, we could select three Citizen Soldiers and right-click on the ood which would be lost when starting to gather another resource.") 411 ], 412 }, 413 { 414 "instructions": [ 415 markForTranslation("Thus, we should order them to deposit their to gather it.\n"), 416 markForTranslation("Perform a similar order queue with the remaining soldiers and the etal mine in the west.") 417 417 ], 418 418 "Init": function() -
ps/trunk/binaries/data/mods/public/maps/tutorials/starting_economy_walkthrough.xml
r24747 r25037 48 48 ], 49 49 "CircularMap": true, 50 "Description": "This map will give a rough guide for starting the game effectively. 50 "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.", 51 51 "Keywords": [ 52 52 "trigger"
Note:
See TracChangeset
for help on using the changeset viewer.