Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/alpine.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/alpine.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/alpine.json (revision 20129)
@@ -0,0 +1,81 @@
+{
+ "Environment": {
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.0, "g": 0.047, "b": 0.286 },
+ "Tint": { "r": 0.471, "g": 0.776, "b": 0.863 },
+ "Murkiness": 0.82,
+ "Waviness": 2
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.26,
+ "FogFactor": 0.4
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Saturation": 0.48,
+ "Contrast": 0.53,
+ "Bloom": 0.12
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "alpine_dirt_grass_50"
+ ],
+ "forestFloor1": "alpine_forrestfloor",
+ "forestFloor2": "alpine_forrestfloor",
+ "cliff": [
+ "alpine_cliff_a",
+ "alpine_cliff_b",
+ "alpine_cliff_c"
+ ],
+ "tier1Terrain": "alpine_dirt",
+ "tier2Terrain": [
+ "alpine_grass_snow_50",
+ "alpine_dirt_snow",
+ "alpine_dirt_snow"
+ ],
+ "tier3Terrain": [
+ "alpine_snow_a",
+ "alpine_snow_b"
+ ],
+ "tier4Terrain": "new_alpine_grass_a",
+ "hill": "alpine_cliff_snow",
+ "dirt": [
+ "alpine_dirt",
+ "alpine_grass_d"
+ ],
+ "road": "new_alpine_citytile",
+ "roadWild": "new_alpine_citytile",
+ "shoreBlend": "alpine_shore_rocks",
+ "shore": "alpine_shore_rocks_grass_50",
+ "water": "alpine_shore_rocks"
+ },
+ "Gaia": {
+ "tree1": "gaia/flora_tree_pine",
+ "tree2": "gaia/flora_tree_pine",
+ "tree3": "gaia/flora_tree_pine",
+ "tree4": "gaia/flora_tree_pine",
+ "tree5": "gaia/flora_tree_pine",
+ "fruitBush": "gaia/flora_bush_berry",
+ "chicken": "gaia/fauna_chicken",
+ "mainHuntableAnimal": "gaia/fauna_goat",
+ "fish": "gaia/fauna_fish_tuna",
+ "secondaryHuntableAnimal": "gaia/fauna_deer",
+ "stoneLarge": "gaia/geology_stonemine_alpine_quarry",
+ "stoneSmall": "gaia/geology_stone_alpine_a",
+ "metalLarge": "gaia/geology_metal_alpine_slabs"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_soft_small_tall.xml",
+ "grassShort": "actor|props/flora/grass_soft_large.xml",
+ "reeds": "actor|props/flora/reeds_pond_dry.xml",
+ "lillies": "actor|geology/stone_granite_large.xml",
+ "rockLarge": "actor|geology/stone_granite_large.xml",
+ "rockMedium": "actor|geology/stone_granite_med.xml",
+ "bushMedium": "actor|props/flora/bush_desert_a.xml",
+ "bushSmall": "actor|props/flora/bush_desert_a.xml",
+ "tree": "actor|flora/trees/pine.xml"
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/alpine.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/autumn.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/autumn.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/autumn.json (revision 20129)
@@ -0,0 +1,82 @@
+{
+ "Environment": {
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.157, "g": 0.149, "b": 0.443 },
+ "Tint": { "r": 0.443, "g": 0.42, "b": 0.824 },
+ "Murkiness": 0.83,
+ "Waviness": 2.5
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.22,
+ "FogFactor": 0.35,
+ "FogColor": { "r": 0.82, "g": 0.82, "b": 0.73 }
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Saturation": 0.56,
+ "Contrast": 0.56,
+ "Bloom": 0.38
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "temp_grass_aut",
+ "temp_grass_aut",
+ "temp_grass_d_aut"
+ ],
+ "forestFloor1": "temp_plants_bog_aut",
+ "forestFloor2": "temp_forestfloor_aut",
+ "cliff": [
+ "temp_cliff_a",
+ "temp_cliff_b"
+ ],
+ "tier1Terrain": "temp_grass_plants_aut",
+ "tier2Terrain": [
+ "temp_grass_b_aut",
+ "temp_grass_c_aut"
+ ],
+ "tier3Terrain": [
+ "temp_grass_b_aut",
+ "temp_grass_long_b_aut"
+ ],
+ "tier4Terrain": "temp_grass_plants_aut",
+ "hill": "temp_highlands_aut",
+ "dirt": [
+ "temp_cliff_a",
+ "temp_cliff_b"
+ ],
+ "road": "temp_road_aut",
+ "roadWild": "temp_road_overgrown_aut",
+ "shoreBlend": "temp_grass_plants_aut",
+ "shore": "temp_forestfloor_pine",
+ "water": "medit_sand_wet"
+ },
+ "Gaia": {
+ "tree1": "gaia/flora_tree_euro_beech_aut",
+ "tree2": "gaia/flora_tree_euro_beech_aut",
+ "tree3": "gaia/flora_tree_pine",
+ "tree4": "gaia/flora_tree_oak_aut",
+ "tree5": "gaia/flora_tree_oak_aut",
+ "fruitBush": "gaia/flora_bush_berry",
+ "chicken": "gaia/fauna_chicken",
+ "mainHuntableAnimal": "gaia/fauna_deer",
+ "fish": "gaia/fauna_fish",
+ "secondaryHuntableAnimal": "gaia/fauna_rabbit",
+ "stoneLarge": "gaia/geology_stonemine_temperate_quarry",
+ "stoneSmall": "gaia/geology_stone_temperate",
+ "metalLarge": "gaia/geology_metal_temperate_slabs"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_soft_dry_small_tall.xml",
+ "grassShort": "actor|props/flora/grass_soft_dry_large.xml",
+ "reeds": "actor|props/flora/reeds_pond_dry.xml",
+ "lillies": "actor|geology/stone_granite_large.xml",
+ "rockLarge": "actor|geology/stone_granite_large.xml",
+ "rockMedium": "actor|geology/stone_granite_med.xml",
+ "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
+ "bushSmall": "actor|props/flora/bush_desert_dry_a.xml",
+ "tree": "actor|flora/trees/european_beech_aut.xml"
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/autumn.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.js
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.js (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.js (revision 20129)
@@ -0,0 +1,18 @@
+function setupBiome_desert()
+{
+ [g_Gaia.tree1, g_Gaia.tree2] = pickRandom([
+ [
+ "gaia/flora_tree_cretan_date_palm_short",
+ "gaia/flora_tree_cretan_date_palm_tall"
+ ],
+ [
+ "gaia/flora_tree_date_palm",
+ "gaia/flora_tree_date_palm"
+ ]
+ ]);
+
+ [g_Gaia.tree4, g_Gaia.tree5] = new Array(2).fill(pickRandom([
+ "gaia/flora_tree_tamarix",
+ "gaia/flora_tree_senegal_date_palm"
+ ]));
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.json (revision 20129)
@@ -0,0 +1,81 @@
+{
+ "Environment": {
+ "SunColor": { "r": 0.733, "g": 0.746, "b": 0.574 },
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0, "g": 0.227, "b": 0.843 },
+ "Tint": { "r": 0, "g": 0.545, "b": 0.859 },
+ "Murkiness": 0.22,
+ "Waviness": 1
+ }
+ },
+ "Fog": {
+ "FogThickness": 0,
+ "FogFactor": 0.5,
+ "FogColor": { "r": 0.852, "g": 0.746, "b": 0.493 }
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Saturation": 0.42,
+ "Contrast": 0.67,
+ "Bloom": 0.23
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "desert_dirt_rough",
+ "desert_dirt_rough_2",
+ "desert_sand_dunes_50",
+ "desert_sand_smooth"
+ ],
+ "forestFloor1": "forestfloor_dirty",
+ "forestFloor2": "desert_forestfloor_palms",
+ "cliff": [
+ "desert_cliff_1",
+ "desert_cliff_2",
+ "desert_cliff_3",
+ "desert_cliff_4",
+ "desert_cliff_5"
+ ],
+ "tier1Terrain": "desert_dirt_rough",
+ "tier2Terrain": "desert_dirt_rocks_1",
+ "tier3Terrain": "desert_dirt_rocks_2",
+ "tier4Terrain": "desert_dirt_rough",
+ "hill": [
+ "desert_dirt_rocks_1",
+ "desert_dirt_rocks_2",
+ "desert_dirt_rocks_3"
+ ],
+ "dirt": [
+ "desert_lakebed_dry",
+ "desert_lakebed_dry_b"
+ ],
+ "road": "desert_city_tile",
+ "roadWild": "desert_city_tile",
+ "shoreBlend": "desert_shore_stones",
+ "shore": "desert_sand_smooth",
+ "water": "desert_sand_wet"
+ },
+ "Gaia": {
+ "fruitBush": "gaia/flora_bush_grapes",
+ "chicken": "gaia/fauna_chicken",
+ "mainHuntableAnimal": "gaia/fauna_camel",
+ "fish": "gaia/fauna_fish",
+ "secondaryHuntableAnimal": "gaia/fauna_gazelle",
+ "stoneLarge": "gaia/geology_stonemine_desert_quarry",
+ "stoneSmall": "gaia/geology_stone_desert_small",
+ "metalLarge": "gaia/geology_metal_desert_slabs",
+ "tree3": "gaia/flora_tree_fig"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_soft_dry_small_tall.xml",
+ "grassShort": "actor|props/flora/grass_soft_dry_large.xml",
+ "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
+ "lillies": "actor|props/flora/reeds_pond_lush_b.xml",
+ "rockLarge": "actor|geology/stone_desert_med.xml",
+ "rockMedium": "actor|geology/stone_desert_med.xml",
+ "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
+ "bushSmall": "actor|props/flora/bush_desert_dry_a.xml",
+ "tree": "actor|flora/trees/palm_date.xml"
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/desert.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.js
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.js (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.js (revision 20129)
@@ -0,0 +1,31 @@
+function setupBiome_mediterranean()
+{
+ [g_Gaia.tree1, g_Gaia.tree2] = pickRandom([
+ [
+ "gaia/flora_tree_cretan_date_palm_short",
+ "gaia/flora_tree_cretan_date_palm_tall"
+ ],
+ [
+ "gaia/flora_tree_carob",
+ "gaia/flora_tree_carob"
+ ],
+ [
+ "gaia/flora_tree_medit_fan_palm",
+ "gaia/flora_tree_medit_fan_palm"
+ ]]);
+
+ g_Gaia.tree3 = pickRandom([
+ "gaia/flora_tree_apple",
+ "gaia/flora_tree_poplar_lombardy"
+ ]);
+
+ [g_Gaia.tree4, g_Gaia.tree5] = new Array(2).fill(pickRandom([
+ "gaia/flora_tree_cypress",
+ "gaia/flora_tree_aleppo_pine"
+ ]));
+
+ g_Gaia.fruitBush = pickRandom([
+ "gaia/flora_bush_berry",
+ "gaia/flora_bush_grapes"
+ ]);
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.json (revision 20129)
@@ -0,0 +1,75 @@
+{
+ "Environment": {
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.024, "g": 0.212, "b": 0.024 },
+ "Tint": { "r": 0.133, "g": 0.725, "b": 0.855 },
+ "Murkiness": 0.8,
+ "Waviness": 3
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.25,
+ "FogFactor": 0.3
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Saturation": 0.51,
+ "Contrast": 0.62,
+ "Bloom": 0.12
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "medit_grass_field_a",
+ "medit_grass_field_b"
+ ],
+ "forestFloor1": "medit_grass_field",
+ "forestFloor2": "medit_grass_shrubs",
+ "cliff": [
+ "medit_cliff_grass",
+ "medit_cliff_greek",
+ "medit_cliff_greek_2",
+ "medit_cliff_aegean",
+ "medit_cliff_italia",
+ "medit_cliff_italia_grass"
+ ],
+ "tier1Terrain": "medit_grass_field_b",
+ "tier2Terrain": "medit_grass_field_brown",
+ "tier3Terrain": "medit_grass_field_dry",
+ "tier4Terrain": "medit_grass_wild",
+ "hill": [
+ "medit_rocks_grass_shrubs",
+ "medit_rocks_shrubs"
+ ],
+ "dirt": [
+ "medit_dirt",
+ "medit_dirt_b"
+ ],
+ "road": "medit_city_tile",
+ "roadWild": "medit_city_tile",
+ "shoreBlend": "medit_sand",
+ "shore": "sand_grass_25",
+ "water": "medit_sand_wet"
+ },
+ "Gaia": {
+ "chicken": "gaia/fauna_chicken",
+ "mainHuntableAnimal": "gaia/fauna_deer",
+ "fish": "gaia/fauna_fish",
+ "secondaryHuntableAnimal": "gaia/fauna_sheep",
+ "stoneLarge": "gaia/geology_stonemine_medit_quarry",
+ "stoneSmall": "gaia/geology_stone_mediterranean",
+ "metalLarge": "gaia/geology_metal_mediterranean_slabs"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_soft_large_tall.xml",
+ "grassShort": "actor|props/flora/grass_soft_large.xml",
+ "reeds": "actor|props/flora/reeds_pond_lush_b.xml",
+ "lillies": "actor|props/flora/water_lillies.xml",
+ "rockLarge": "actor|geology/stone_granite_large.xml",
+ "rockMedium": "actor|geology/stone_granite_med.xml",
+ "bushMedium": "actor|props/flora/bush_medit_me.xml",
+ "bushSmall": "actor|props/flora/bush_medit_sm.xml",
+ "tree": "actor|flora/trees/palm_cretan_date.xml"
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/mediterranean.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.js
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.js (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.js (revision 20129)
@@ -0,0 +1,9 @@
+function setupBiome_savanna()
+{
+ g_Gaia.mainHuntableAnimal = pickRandom([
+ "gaia/fauna_wildebeest",
+ "gaia/fauna_zebra",
+ "gaia/fauna_giraffe",
+ "gaia/fauna_elephant_african_bush"
+ ]);
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.json (revision 20129)
@@ -0,0 +1,81 @@
+{
+ "Environment": {
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.055, "g": 0.176, "b": 0.431 },
+ "Tint": { "r": 0.227, "g": 0.749, "b": 0.549 },
+ "Murkiness": 0.77,
+ "Waviness": 1.5
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.15,
+ "FogFactor": 0.25,
+ "FogColor": { "r": 0.847059, "g": 0.737255, "b": 0.482353 }
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Contrast": 0.57031,
+ "Bloom": 0.34
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "savanna_grass_a",
+ "savanna_grass_b"
+ ],
+ "forestFloor1": "savanna_forestfloor_a",
+ "forestFloor2": "savanna_forestfloor_b",
+ "cliff": [
+ "savanna_cliff_a",
+ "savanna_cliff_b"
+ ],
+ "tier1Terrain": "savanna_shrubs_a",
+ "tier2Terrain": "savanna_dirt_rocks_b",
+ "tier3Terrain": "savanna_dirt_rocks_a",
+ "tier4Terrain": "savanna_grass_a",
+ "hill": [
+ "savanna_grass_a",
+ "savanna_grass_b"
+ ],
+ "dirt": [
+ "savanna_dirt_rocks_b",
+ "dirt_brown_e"
+ ],
+ "road": "savanna_tile_a",
+ "roadWild": "savanna_tile_a",
+ "shoreBlend": "savanna_riparian",
+ "shore": "savanna_riparian_bank",
+ "water": "savanna_riparian_wet"
+ },
+ "Gaia": {
+ "tree1": "gaia/flora_tree_baobab",
+ "tree2": "gaia/flora_tree_baobab",
+ "tree3": "gaia/flora_tree_baobab",
+ "tree4": "gaia/flora_tree_baobab",
+ "tree5": "gaia/flora_tree_baobab",
+ "fruitBush": "gaia/flora_bush_grapes",
+ "chicken": "gaia/fauna_chicken",
+ "fish": "gaia/fauna_fish",
+ "secondaryHuntableAnimal": "gaia/fauna_gazelle",
+ "stoneLarge": "gaia/geology_stonemine_desert_quarry",
+ "stoneSmall": "gaia/geology_stone_savanna_small",
+ "metalLarge": "gaia/geology_metal_savanna_slabs"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_savanna.xml",
+ "grassShort": "actor|props/flora/grass_medit_field.xml",
+ "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
+ "lillies": "actor|props/flora/reeds_pond_lush_b.xml",
+ "rockLarge": "actor|geology/stone_savanna_med.xml",
+ "rockMedium": "actor|geology/stone_savanna_med.xml",
+ "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
+ "bushSmall": "actor|props/flora/bush_dry_a.xml",
+ "tree": "actor|flora/trees/baobab.xml"
+ },
+ "TreeCount": {
+ "minTrees": 200,
+ "maxTrees": 1250,
+ "forestProbability": 0
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/savanna.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/snowy.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/snowy.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/snowy.json (revision 20129)
@@ -0,0 +1,76 @@
+{
+ "Environment":
+ {
+ "SunColor": { "r": 0.550, "g": 0.601, "b": 0.644 },
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.067, "g": 0.212, "b": 0.361 },
+ "Tint": { "r": 0.4, "g": 0.486, "b": 0.765 },
+ "Murkiness": 0.83,
+ "Waviness": 5.5
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.21,
+ "FogFactor": 0.6
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Saturation": 0.37
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "polar_snow_b",
+ "snow grass 75",
+ "snow rocks",
+ "snow forest"
+ ],
+ "forestFloor1": "polar_tundra_snow",
+ "forestFloor2": "polar_tundra_snow",
+ "cliff": [
+ "alpine_cliff_a",
+ "alpine_cliff_b"
+ ],
+ "tier1Terrain": "polar_snow_a",
+ "tier2Terrain": "polar_ice_snow",
+ "tier3Terrain": "polar_ice",
+ "tier4Terrain": "snow grass 2",
+ "hill": [
+ "polar_snow_rocks",
+ "polar_cliff_snow"
+ ],
+ "dirt": "snow grass 2",
+ "road": "new_alpine_citytile",
+ "roadWild": "polar_ice_cracked",
+ "shoreBlend": "polar_ice",
+ "shore": "alpine_shore_rocks_icy",
+ "water": "alpine_shore_rocks"
+ },
+ "Gaia": {
+ "tree1": "gaia/flora_tree_pine_w",
+ "tree2": "gaia/flora_tree_pine_w",
+ "tree3": "gaia/flora_tree_pine_w",
+ "tree4": "gaia/flora_tree_pine_w",
+ "tree5": "gaia/flora_tree_pine",
+ "fruitBush": "gaia/flora_bush_berry",
+ "chicken": "gaia/fauna_chicken",
+ "mainHuntableAnimal": "gaia/fauna_muskox",
+ "fish": "gaia/fauna_fish_tuna",
+ "secondaryHuntableAnimal": "gaia/fauna_walrus",
+ "stoneLarge": "gaia/geology_stonemine_alpine_quarry",
+ "stoneSmall": "gaia/geology_stone_alpine_a",
+ "metalLarge": "gaia/geology_metal_alpine_slabs"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_soft_dry_small_tall.xml",
+ "grassShort": "actor|props/flora/grass_soft_dry_large.xml",
+ "reeds": "actor|props/flora/reeds_pond_dry.xml",
+ "lillies": "actor|geology/stone_granite_large.xml",
+ "rockLarge": "actor|geology/stone_granite_large.xml",
+ "rockMedium": "actor|geology/stone_granite_med.xml",
+ "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
+ "bushSmall": "actor|props/flora/bush_desert_dry_a.xml",
+ "tree": "actor|flora/trees/pine_w.xml"
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/snowy.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.js
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.js (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.js (revision 20129)
@@ -0,0 +1,53 @@
+function setupBiome_temperate()
+{
+ if (randBool())
+ {
+ g_Terrains.mainTerrain = "alpine_grass";
+ g_Terrains.forestFloor1 = "temp_forestfloor_pine";
+ g_Terrains.forestFloor2 = "temp_grass_clovers_2";
+ g_Terrains.tier1Terrain = "alpine_grass_a";
+ g_Terrains.tier2Terrain = "alpine_grass_b";
+ g_Terrains.tier3Terrain = "alpine_grass_c";
+ g_Terrains.tier4Terrain = "temp_grass_mossy";
+ }
+ else
+ {
+ g_Terrains.mainTerrain = "temp_grass_long_b";
+ g_Terrains.forestFloor1 = "temp_forestfloor_pine";
+ g_Terrains.forestFloor2 = "temp_plants_bog";
+ g_Terrains.tier1Terrain = "temp_grass_d";
+ g_Terrains.tier2Terrain = "temp_grass_c";
+ g_Terrains.tier3Terrain = "temp_grass_clovers_2";
+ g_Terrains.tier4Terrain = "temp_grass_plants";
+ }
+
+ [g_Gaia.tree1, g_Gaia.tree2] = pickRandom([
+ [
+ "gaia/flora_tree_oak",
+ "gaia/flora_tree_oak_large"
+ ],
+ [
+ "gaia/flora_tree_poplar",
+ "gaia/flora_tree_poplar"
+ ],
+ [
+ "gaia/flora_tree_euro_beech",
+ "gaia/flora_tree_euro_beech"
+ ]
+ ]);
+
+ [g_Gaia.tree4, g_Gaia.tree5] = pickRandom([
+ [
+ "gaia/flora_tree_pine",
+ "gaia/flora_tree_aleppo_pine"
+ ],
+ [
+ "gaia/flora_tree_pine",
+ "gaia/flora_tree_pine"
+ ],
+ [
+ "gaia/flora_tree_aleppo_pine",
+ "gaia/flora_tree_aleppo_pine"
+ ]
+ ]);
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.json (revision 20129)
@@ -0,0 +1,63 @@
+{
+ "Environment": {
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.114, "g": 0.192, "b": 0.463 },
+ "Tint": { "r": 0.255, "g": 0.361, "b": 0.651 },
+ "Murkiness": 0.83,
+ "Waviness": 5.5
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.25,
+ "FogFactor": 0.4
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Saturation": 0.62,
+ "Contrast": 0.62,
+ "Bloom": 0.3
+ }
+ },
+ "Terrains": {
+ "cliff": [
+ "temp_cliff_a",
+ "temp_cliff_b"
+ ],
+ "hill": [
+ "temp_dirt_gravel",
+ "temp_dirt_gravel_b"
+ ],
+ "dirt": [
+ "temp_dirt_gravel",
+ "temp_dirt_gravel_b"
+ ],
+ "road": "temp_road",
+ "roadWild": "temp_road_overgrown",
+ "shoreBlend": "temp_mud_plants",
+ "shore": "sand_grass_25",
+ "water": "medit_sand_wet"
+ },
+ "Gaia": {
+ "fruitBush": "gaia/flora_bush_berry",
+ "chicken": "gaia/fauna_chicken",
+ "fish": "gaia/fauna_fish",
+ "mainHuntableAnimal": "gaia/fauna_deer",
+ "secondaryHuntableAnimal": "gaia/fauna_sheep",
+ "stoneLarge": "gaia/geology_stonemine_temperate_quarry",
+ "stoneSmall": "gaia/geology_stone_temperate",
+ "metalLarge": "gaia/geology_metal_temperate_slabs",
+ "tree3": "gaia/flora_tree_apple"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_soft_large_tall.xml",
+ "grassShort": "actor|props/flora/grass_soft_large.xml",
+ "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
+ "lillies": "actor|props/flora/water_lillies.xml",
+ "rockLarge": "actor|geology/stone_granite_large.xml",
+ "rockMedium": "actor|geology/stone_granite_med.xml",
+ "bushMedium": "actor|props/flora/bush_medit_me.xml",
+ "bushSmall": "actor|props/flora/bush_medit_sm.xml",
+ "tree": "actor|flora/trees/oak.xml"
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/temperate.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/tropic.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/tropic.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/tropic.json (revision 20129)
@@ -0,0 +1,88 @@
+{
+ "Environment": {
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.584, "g": 0.824, "b": 0.929 },
+ "Tint": { "r": 0.569, "g": 0.965, "b": 0.945 },
+ "Murkiness": 0.35,
+ "Waviness": 1.5
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.2,
+ "FogFactor": 0.4
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Contrast": 0.67,
+ "Saturation": 0.62,
+ "Bloom": 0.6
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "tropic_grass_c",
+ "tropic_grass_c",
+ "tropic_grass_c",
+ "tropic_grass_c",
+ "tropic_grass_plants",
+ "tropic_plants",
+ "tropic_plants_b"
+ ],
+ "forestFloor1": "tropic_plants_c",
+ "forestFloor2": "tropic_plants_c",
+ "cliff": [
+ "tropic_cliff_a",
+ "tropic_cliff_a",
+ "tropic_cliff_a",
+ "tropic_cliff_a_plants"
+ ],
+ "tier1Terrain": "tropic_grass_c",
+ "tier2Terrain": "tropic_grass_plants",
+ "tier3Terrain": "tropic_plants",
+ "tier4Terrain": "tropic_plants_b",
+ "hill": [
+ "tropic_cliff_grass"
+ ],
+ "dirt": [
+ "tropic_dirt_a",
+ "tropic_dirt_a_plants"
+ ],
+ "road": "tropic_citytile_a",
+ "roadWild": "tropic_citytile_plants",
+ "shoreBlend": "temp_mud_plants",
+ "shore": "tropic_beach_dry_plants",
+ "water": "tropic_beach_dry"
+ },
+ "Gaia": {
+ "tree1": "gaia/flora_tree_toona",
+ "tree2": "gaia/flora_tree_toona",
+ "tree3": "gaia/flora_tree_palm_tropic",
+ "tree4": "gaia/flora_tree_palm_tropic",
+ "tree5": "gaia/flora_tree_palm_tropic",
+ "fruitBush": "gaia/flora_bush_berry",
+ "chicken": "gaia/fauna_chicken",
+ "mainHuntableAnimal": "gaia/fauna_peacock",
+ "fish": "gaia/fauna_fish",
+ "secondaryHuntableAnimal": "gaia/fauna_tiger",
+ "stoneLarge": "gaia/geology_stonemine_tropic_quarry",
+ "stoneSmall": "gaia/geology_stone_tropic_a",
+ "metalLarge": "gaia/geology_metal_tropic_slabs"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/plant_tropic_a.xml",
+ "grassShort": "actor|props/flora/plant_lg.xml",
+ "reeds": "actor|props/flora/reeds_pond_lush_b.xml",
+ "lillies": "actor|props/flora/water_lillies.xml",
+ "rockLarge": "actor|geology/stone_granite_large.xml",
+ "rockMedium": "actor|geology/stone_granite_med.xml",
+ "bushMedium": "actor|props/flora/plant_tropic_large.xml",
+ "bushSmall": "actor|props/flora/plant_tropic_large.xml",
+ "tree": "actor|flora/trees/tree_tropic.xml"
+ },
+ ""TreeCount": {
+ "minTrees": 1000,
+ "maxTrees": 6000,
+ "forestProbability": 0.52
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/biomes/tropic.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/defaultbiome.json
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/defaultbiome.json (nonexistent)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/defaultbiome.json (revision 20129)
@@ -0,0 +1,83 @@
+{
+ "Environment": {
+ "TerrainAmbientColor": { "r": 0.447059, "g": 0.509804, "b": 0.54902 },
+ "UnitsAmbientColor": { "r": 0.57, "g": 0.58, "b": 0.55 },
+ "Water": {
+ "WaterBody": {
+ "Color": { "r": 0.0, "g": 0.047, "b": 0.286 },
+ "Tint": { "r": 0.471, "g": 0.776, "b": 0.863 },
+ "Murkiness": 0.82,
+ "Waviness": 2
+ }
+ },
+ "Fog": {
+ "FogThickness": 0.26,
+ "FogFactor": 0.4
+ },
+ "Postproc": {
+ "PostprocEffect": "hdr",
+ "Saturation": 0.48,
+ "Contrast": 0.53,
+ "Bloom": 0.12
+ }
+ },
+ "Terrains": {
+ "mainTerrain": [
+ "temp_grass_long_b"
+ ],
+ "forestFloor1": "temp_forestfloor_pine",
+ "forestFloor2": "temp_plants_bog",
+ "tier1Terrain": "temp_grass_d",
+ "tier2Terrain": "temp_grass_c",
+ "tier3Terrain": "temp_grass_clovers_2",
+ "tier4Terrain": "temp_grass_plants",
+ "cliff": [
+ "temp_cliff_a",
+ "temp_cliff_b"
+ ],
+ "hill": [
+ "temp_dirt_gravel",
+ "temp_dirt_gravel_b"
+ ],
+ "dirt": [
+ "temp_dirt_gravel",
+ "temp_dirt_gravel_b"
+ ],
+ "road": "temp_road",
+ "roadWild": "temp_road_overgrown",
+ "shoreBlend": "temp_mud_plants",
+ "shore": "sand_grass_25",
+ "water": "medit_sand_wet"
+ },
+ "Gaia": {
+ "tree1": "gaia/flora_tree_oak",
+ "tree2": "gaia/flora_tree_oak_large",
+ "tree3": "gaia/flora_tree_apple",
+ "tree4": "gaia/flora_tree_pine",
+ "tree5": "gaia/flora_tree_aleppo_pine",
+ "fruitBush": "gaia/flora_bush_berry",
+ "chicken": "gaia/fauna_chicken",
+ "fish": "gaia/fauna_fish",
+ "mainHuntableAnimal": "gaia/fauna_deer",
+ "secondaryHuntableAnimal": "gaia/fauna_sheep",
+ "stoneLarge": "gaia/geology_stonemine_medit_quarry",
+ "stoneSmall": "gaia/geology_stone_mediterranean",
+ "metalLarge": "gaia/geology_metal_mediterranean_slabs"
+ },
+ "Decoratives": {
+ "grass": "actor|props/flora/grass_soft_large_tall.xml",
+ "grassShort": "actor|props/flora/grass_soft_large.xml",
+ "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
+ "lillies": "actor|props/flora/pond_lillies_large.xml",
+ "rockLarge": "actor|geology/stone_granite_large.xml",
+ "rockMedium": "actor|geology/stone_granite_med.xml",
+ "bushMedium": "actor|props/flora/bush_medit_me.xml",
+ "bushSmall": "actor|props/flora/bush_medit_sm.xml",
+ "tree": "actor|flora/trees/oak.xml"
+ },
+ "TreeCount": {
+ "minTrees": 500,
+ "maxTrees": 3000,
+ "forestProbability": 0.7
+ }
+}
Property changes on: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/defaultbiome.json
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: ps/trunk/binaries/data/mods/public/maps/random/rmbiome/randombiome.js
===================================================================
--- ps/trunk/binaries/data/mods/public/maps/random/rmbiome/randombiome.js (revision 20128)
+++ ps/trunk/binaries/data/mods/public/maps/random/rmbiome/randombiome.js (revision 20129)
@@ -1,915 +1,272 @@
+RMS.LoadLibrary("rmbiome/biomes");
+
/**
* Use constants as biome identifiers, so that we get reference errors if there is a typo.
*/
const g_BiomeTemperate = "temperate";
const g_BiomeSnowy = "snowy";
const g_BiomeDesert = "desert";
const g_BiomeAlpine = "alpine";
const g_BiomeMediterranean = "mediterranean";
const g_BiomeSavanna = "savanna";
const g_BiomeTropic = "tropic";
const g_BiomeAutumn = "autumn";
-const g_Biomes = deepfreeze([
- g_BiomeTemperate,
- g_BiomeSnowy,
- g_BiomeDesert,
- g_BiomeAlpine,
- g_BiomeMediterranean,
- g_BiomeSavanna,
- g_BiomeTropic,
- g_BiomeAutumn
-]);
+var g_Terrains = {};
+var g_Gaia = {};
+var g_Decoratives = {};
+var g_TreeCount = {};
var g_BiomeID = g_BiomeTemperate;
-var g_Terrains = {
- "mainTerrain": ["temp_grass_long_b"],
- "forestFloor1": "temp_forestfloor_pine",
- "forestFloor2": "temp_plants_bog",
- "tier1Terrain": "temp_grass_d",
- "tier2Terrain": "temp_grass_c",
- "tier3Terrain": "temp_grass_clovers_2",
- "tier4Terrain": "temp_grass_plants",
- "cliff": ["temp_cliff_a", "temp_cliff_b"],
- "hill": ["temp_dirt_gravel", "temp_dirt_gravel_b"],
- "dirt": ["temp_dirt_gravel", "temp_dirt_gravel_b"],
- "road": "temp_road",
- "roadWild": "temp_road_overgrown",
- "shoreBlend": "temp_mud_plants",
- "shore": "sand_grass_25",
- "water": "medit_sand_wet"
-};
-
-var g_Gaia = {
- "tree1": "gaia/flora_tree_oak",
- "tree2": "gaia/flora_tree_oak_large",
- "tree3": "gaia/flora_tree_apple",
- "tree4": "gaia/flora_tree_pine",
- "tree5": "gaia/flora_tree_aleppo_pine",
- "fruitBush": "gaia/flora_bush_berry",
- "chicken": "gaia/fauna_chicken",
- "fish": "gaia/fauna_fish",
- "mainHuntableAnimal": "gaia/fauna_deer",
- "secondaryHuntableAnimal": "gaia/fauna_sheep",
- "stoneLarge": "gaia/geology_stonemine_medit_quarry",
- "stoneSmall": "gaia/geology_stone_mediterranean",
- "metalLarge": "gaia/geology_metal_mediterranean_slabs"
-};
-
-var g_Decoratives = {
- "grass": "actor|props/flora/grass_soft_large_tall.xml",
- "grassShort": "actor|props/flora/grass_soft_large.xml",
- "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
- "lillies": "actor|props/flora/pond_lillies_large.xml",
- "rockLarge": "actor|geology/stone_granite_large.xml",
- "rockMedium": "actor|geology/stone_granite_med.xml",
- "bushMedium": "actor|props/flora/bush_medit_me.xml",
- "bushSmall": "actor|props/flora/bush_medit_sm.xml",
- "tree": "actor|flora/trees/oak.xml"
-};
-
-var g_TreeCount = {
- "minTrees": 500,
- "maxTrees": 3000,
- "forestProbability": 0.7
-};
-
function currentBiome()
{
return g_BiomeID;
}
function setSelectedBiome()
{
- if (g_Biomes.indexOf(g_MapSettings.Biome) == -1)
- {
- error("Can't set biome '" + g_MapSettings.Biome + "'");
- return;
- }
-
setBiome(g_MapSettings.Biome);
}
function setBiome(biomeID)
{
- if (g_Biomes.indexOf(biomeID) == -1)
- warn("Unknown biome: '" + biomeID + "'");
- else
- g_BiomeID = biomeID;
+ loadBiomeFile("defaultbiome");
setSkySet(pickRandom(["cirrus", "cumulus", "sunny"]));
-
setSunRotation(randFloat(0, TWO_PI));
setSunElevation(randFloat(PI/ 6, PI / 3));
- setUnitsAmbientColor(0.57, 0.58, 0.55);
- setTerrainAmbientColor(0.447059, 0.509804, 0.54902);
-
- if (g_BiomeID == g_BiomeTemperate)
- {
- // temperate ocean blue, a bit too deep and saturated perhaps but it looks nicer.
- // this assumes ocean settings, maps that aren't oceans should reset.
- setWaterColor(0.114, 0.192, 0.463);
- setWaterTint(0.255, 0.361, 0.651);
- setWaterWaviness(5.5);
- setWaterMurkiness(0.83);
-
- setFogThickness(0.25);
- setFogFactor(0.4);
-
- setPPEffect("hdr");
- setPPSaturation(0.62);
- setPPContrast(0.62);
- setPPBloom(0.3);
-
- g_Terrains = {
- "cliff": ["temp_cliff_a", "temp_cliff_b"],
- "hill": ["temp_dirt_gravel", "temp_dirt_gravel_b"],
- "dirt": ["temp_dirt_gravel", "temp_dirt_gravel_b"],
- "road": "temp_road",
- "roadWild": "temp_road_overgrown",
- "shoreBlend": "temp_mud_plants",
- "shore": "sand_grass_25",
- "water": "medit_sand_wet"
- };
+ g_BiomeID = biomeID;
- if (randBool())
- {
- g_Terrains.mainTerrain = "alpine_grass";
- g_Terrains.forestFloor1 = "temp_forestfloor_pine";
- g_Terrains.forestFloor2 = "temp_grass_clovers_2";
- g_Terrains.tier1Terrain = "alpine_grass_a";
- g_Terrains.tier2Terrain = "alpine_grass_b";
- g_Terrains.tier3Terrain = "alpine_grass_c";
- g_Terrains.tier4Terrain = "temp_grass_mossy";
- }
- else
- {
- g_Terrains.mainTerrain = "temp_grass_long_b";
- g_Terrains.forestFloor1 = "temp_forestfloor_pine";
- g_Terrains.forestFloor2 = "temp_plants_bog";
- g_Terrains.tier1Terrain = "temp_grass_d";
- g_Terrains.tier2Terrain = "temp_grass_c";
- g_Terrains.tier3Terrain = "temp_grass_clovers_2";
- g_Terrains.tier4Terrain = "temp_grass_plants";
- }
+ loadBiomeFile("biomes/" + biomeID);
- g_Gaia = {
- "fruitBush": "gaia/flora_bush_berry",
- "chicken": "gaia/fauna_chicken",
- "fish": "gaia/fauna_fish",
- "mainHuntableAnimal": "gaia/fauna_deer",
- "secondaryHuntableAnimal": "gaia/fauna_sheep",
- "stoneLarge": "gaia/geology_stonemine_temperate_quarry",
- "stoneSmall": "gaia/geology_stone_temperate",
- "metalLarge": "gaia/geology_metal_temperate_slabs"
- };
+ let setupBiomeFunc = global["setupBiome_" + biomeID];
+ if (setupBiomeFunc)
+ setupBiomeFunc();
+}
- var random_trees = randIntInclusive(1, 3);
- if (random_trees == 1)
- {
- g_Gaia.tree1 = "gaia/flora_tree_oak";
- g_Gaia.tree2 = "gaia/flora_tree_oak_large";
- }
- else if (random_trees == 2)
- {
- g_Gaia.tree1 = "gaia/flora_tree_poplar";
- g_Gaia.tree2 = "gaia/flora_tree_poplar";
- }
- else
- {
- g_Gaia.tree1 = "gaia/flora_tree_euro_beech";
- g_Gaia.tree2 = "gaia/flora_tree_euro_beech";
- }
- g_Gaia.tree3 = "gaia/flora_tree_apple";
- random_trees = randIntInclusive(1, 3);
- if (random_trees == 1)
- {
- g_Gaia.tree4 = "gaia/flora_tree_pine";
- g_Gaia.tree5 = "gaia/flora_tree_aleppo_pine";
- }
- else if (random_trees == 2)
- {
- g_Gaia.tree4 = "gaia/flora_tree_pine";
- g_Gaia.tree5 = "gaia/flora_tree_pine";
- }
- else
- {
- g_Gaia.tree4 = "gaia/flora_tree_aleppo_pine";
- g_Gaia.tree5 = "gaia/flora_tree_aleppo_pine";
- }
+function loadBiomeFile(file)
+{
+ let path = "maps/random/rmbiome/" + file + ".json";
- g_Decoratives = {
- "grass": "actor|props/flora/grass_soft_large_tall.xml",
- "grassShort": "actor|props/flora/grass_soft_large.xml",
- "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
- "lillies": "actor|props/flora/water_lillies.xml",
- "rockLarge": "actor|geology/stone_granite_large.xml",
- "rockMedium": "actor|geology/stone_granite_med.xml",
- "bushMedium": "actor|props/flora/bush_medit_me.xml",
- "bushSmall": "actor|props/flora/bush_medit_sm.xml",
- "tree": "actor|flora/trees/oak.xml"
- };
- }
- else if (g_BiomeID == g_BiomeSnowy)
+ if (!RMS.FileExists(path))
{
- setSunColor(0.550, 0.601, 0.644); // a little darker
- // Water is a semi-deep blue, fairly wavy, fairly murky for an ocean.
- // this assumes ocean settings, maps that aren't oceans should reset.
- setWaterColor(0.067, 0.212, 0.361);
- setWaterTint(0.4, 0.486, 0.765);
- setWaterWaviness(5.5);
- setWaterMurkiness(0.83);
-
- g_Terrains = {
- "mainTerrain": ["polar_snow_b", "snow grass 75", "snow rocks", "snow forest"],
- "forestFloor1": "polar_tundra_snow",
- "forestFloor2": "polar_tundra_snow",
- "cliff": ["alpine_cliff_a", "alpine_cliff_b"],
- "tier1Terrain": "polar_snow_a",
- "tier2Terrain": "polar_ice_snow",
- "tier3Terrain": "polar_ice",
- "tier4Terrain": "snow grass 2",
- "hill": ["polar_snow_rocks", "polar_cliff_snow"],
- "dirt": "snow grass 2",
- "road": "new_alpine_citytile",
- "roadWild": "polar_ice_cracked",
- "shoreBlend": "polar_ice",
- "shore": "alpine_shore_rocks_icy",
- "water": "alpine_shore_rocks"
- };
-
- g_Gaia = {
- "tree1": "gaia/flora_tree_pine_w",
- "tree2": "gaia/flora_tree_pine_w",
- "tree3": "gaia/flora_tree_pine_w",
- "tree4": "gaia/flora_tree_pine_w",
- "tree5": "gaia/flora_tree_pine",
- "fruitBush": "gaia/flora_bush_berry",
- "chicken": "gaia/fauna_chicken",
- "mainHuntableAnimal": "gaia/fauna_muskox",
- "fish": "gaia/fauna_fish_tuna",
- "secondaryHuntableAnimal": "gaia/fauna_walrus",
- "stoneLarge": "gaia/geology_stonemine_alpine_quarry",
- "stoneSmall": "gaia/geology_stone_alpine_a",
- "metalLarge": "gaia/geology_metal_alpine_slabs"
- };
-
- g_Decoratives = {
- "grass": "actor|props/flora/grass_soft_dry_small_tall.xml",
- "grassShort": "actor|props/flora/grass_soft_dry_large.xml",
- "reeds": "actor|props/flora/reeds_pond_dry.xml",
- "lillies": "actor|geology/stone_granite_large.xml",
- "rockLarge": "actor|geology/stone_granite_large.xml",
- "rockMedium": "actor|geology/stone_granite_med.xml",
- "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
- "bushSmall": "actor|props/flora/bush_desert_dry_a.xml",
- "tree": "actor|flora/trees/pine_w.xml"
- };
-
- setFogFactor(0.6);
- setFogThickness(0.21);
- setPPSaturation(0.37);
- setPPEffect("hdr");
+ error("Could not load biome file '" + file + "'");
+ return;
}
- else if (g_BiomeID == g_BiomeDesert)
- {
- setSunColor(0.733, 0.746, 0.574);
- // Went for a very clear, slightly blue-ish water in this case, basically no waves.
- setWaterColor(0, 0.227, 0.843);
- setWaterTint(0, 0.545, 0.859);
- setWaterWaviness(1);
- setWaterMurkiness(0.22);
-
- setFogFactor(0.5);
- setFogThickness(0.0);
- setFogColor(0.852, 0.746, 0.493);
-
- setPPEffect("hdr");
- setPPContrast(0.67);
- setPPSaturation(0.42);
- setPPBloom(0.23);
-
- g_Terrains = {
- "mainTerrain": ["desert_dirt_rough", "desert_dirt_rough_2", "desert_sand_dunes_50", "desert_sand_smooth"],
- "forestFloor1": "forestfloor_dirty",
- "forestFloor2": "desert_forestfloor_palms",
- "cliff": ["desert_cliff_1", "desert_cliff_2", "desert_cliff_3", "desert_cliff_4", "desert_cliff_5"],
- "tier1Terrain": "desert_dirt_rough",
- "tier2Terrain": "desert_dirt_rocks_1",
- "tier3Terrain": "desert_dirt_rocks_2",
- "tier4Terrain": "desert_dirt_rough",
- "hill": ["desert_dirt_rocks_1", "desert_dirt_rocks_2", "desert_dirt_rocks_3"],
- "dirt": ["desert_lakebed_dry", "desert_lakebed_dry_b"],
- "road": "desert_city_tile",
- "roadWild": "desert_city_tile",
- "shoreBlend": "desert_shore_stones",
- "shore": "desert_sand_smooth",
- "water": "desert_sand_wet"
- };
-
- g_Gaia = {
- "fruitBush": "gaia/flora_bush_grapes",
- "chicken": "gaia/fauna_chicken",
- "mainHuntableAnimal": "gaia/fauna_camel",
- "fish": "gaia/fauna_fish",
- "secondaryHuntableAnimal": "gaia/fauna_gazelle",
- "stoneLarge": "gaia/geology_stonemine_desert_quarry",
- "stoneSmall": "gaia/geology_stone_desert_small",
- "metalLarge": "gaia/geology_metal_desert_slabs"
- };
+ let biome = RMS.ReadJSONFile(path)
- if (randBool())
+ let copyProperties = (from, to) => {
+ for (let prop in from)
{
- g_Gaia.tree1 = "gaia/flora_tree_cretan_date_palm_short";
- g_Gaia.tree2 = "gaia/flora_tree_cretan_date_palm_tall";
- }
- else
- {
- g_Gaia.tree1 = "gaia/flora_tree_date_palm";
- g_Gaia.tree2 = "gaia/flora_tree_date_palm";
- }
- g_Gaia.tree3 = "gaia/flora_tree_fig";
-
- if (randBool())
- {
- g_Gaia.tree4 = "gaia/flora_tree_tamarix";
- g_Gaia.tree5 = "gaia/flora_tree_tamarix";
- }
- else
- {
- g_Gaia.tree4 = "gaia/flora_tree_senegal_date_palm";
- g_Gaia.tree5 = "gaia/flora_tree_senegal_date_palm";
- }
-
- g_Decoratives = {
- "grass": "actor|props/flora/grass_soft_dry_small_tall.xml",
- "grassShort": "actor|props/flora/grass_soft_dry_large.xml",
- "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
- "lillies": "actor|props/flora/reeds_pond_lush_b.xml",
- "rockLarge": "actor|geology/stone_desert_med.xml",
- "rockMedium": "actor|geology/stone_desert_med.xml",
- "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
- "bushSmall": "actor|props/flora/bush_desert_dry_a.xml",
- "tree": "actor|flora/trees/palm_date.xml"
- };
- }
- else if (g_BiomeID == g_BiomeAlpine)
- {
- // simulates an alpine lake, fairly deep.
- // this is not intended for a clear running river, or even an ocean.
- setWaterColor(0.0, 0.047, 0.286); // dark majestic blue
- setWaterTint(0.471, 0.776, 0.863); // light blue
- setWaterMurkiness(0.82);
- setWaterWaviness(2);
-
- setFogThickness(0.26);
- setFogFactor(0.4);
-
- setPPEffect("hdr");
- setPPSaturation(0.48);
- setPPContrast(0.53);
- setPPBloom(0.12);
-
- g_Terrains = {
- "mainTerrain": ["alpine_dirt_grass_50"],
- "forestFloor1": "alpine_forrestfloor",
- "forestFloor2": "alpine_forrestfloor",
- "cliff": ["alpine_cliff_a", "alpine_cliff_b", "alpine_cliff_c"],
- "tier1Terrain": "alpine_dirt",
- "tier2Terrain": ["alpine_grass_snow_50", "alpine_dirt_snow", "alpine_dirt_snow"],
- "tier3Terrain": ["alpine_snow_a", "alpine_snow_b"],
- "tier4Terrain": "new_alpine_grass_a",
- "hill": "alpine_cliff_snow",
- "dirt": ["alpine_dirt", "alpine_grass_d"],
- "road": "new_alpine_citytile",
- "roadWild": "new_alpine_citytile",
- "shoreBlend": "alpine_shore_rocks",
- "shore": "alpine_shore_rocks_grass_50",
- "water": "alpine_shore_rocks"
- };
-
- g_Gaia = {
- "tree1": "gaia/flora_tree_pine",
- "tree2": "gaia/flora_tree_pine",
- "tree3": "gaia/flora_tree_pine",
- "tree4": "gaia/flora_tree_pine",
- "tree5": "gaia/flora_tree_pine",
- "fruitBush": "gaia/flora_bush_berry",
- "chicken": "gaia/fauna_chicken",
- "mainHuntableAnimal": "gaia/fauna_goat",
- "fish": "gaia/fauna_fish_tuna",
- "secondaryHuntableAnimal": "gaia/fauna_deer",
- "stoneLarge": "gaia/geology_stonemine_alpine_quarry",
- "stoneSmall": "gaia/geology_stone_alpine_a",
- "metalLarge": "gaia/geology_metal_alpine_slabs"
- };
-
- g_Decoratives = {
- "grass": "actor|props/flora/grass_soft_small_tall.xml",
- "grassShort": "actor|props/flora/grass_soft_large.xml",
- "reeds": "actor|props/flora/reeds_pond_dry.xml",
- "lillies": "actor|geology/stone_granite_large.xml",
- "rockLarge": "actor|geology/stone_granite_large.xml",
- "rockMedium": "actor|geology/stone_granite_med.xml",
- "bushMedium": "actor|props/flora/bush_desert_a.xml",
- "bushSmall": "actor|props/flora/bush_desert_a.xml",
- "tree": "actor|flora/trees/pine.xml"
- };
- }
- else if (g_BiomeID == g_BiomeMediterranean)
- {
- // Guess what, this is based on the colors of the mediterranean sea.
- setWaterColor(0.024,0.212,0.024);
- setWaterTint(0.133, 0.725,0.855);
- setWaterWaviness(3);
- setWaterMurkiness(0.8);
-
- setFogFactor(0.3);
- setFogThickness(0.25);
-
- setPPEffect("hdr");
- setPPContrast(0.62);
- setPPSaturation(0.51);
- setPPBloom(0.12);
-
- g_Terrains = {
- "mainTerrain": ["medit_grass_field_a", "medit_grass_field_b"],
- "forestFloor1": "medit_grass_field",
- "forestFloor2": "medit_grass_shrubs",
- "cliff": ["medit_cliff_grass", "medit_cliff_greek", "medit_cliff_greek_2", "medit_cliff_aegean", "medit_cliff_italia", "medit_cliff_italia_grass"],
- "tier1Terrain": "medit_grass_field_b",
- "tier2Terrain": "medit_grass_field_brown",
- "tier3Terrain": "medit_grass_field_dry",
- "tier4Terrain": "medit_grass_wild",
- "hill": ["medit_rocks_grass_shrubs", "medit_rocks_shrubs"],
- "dirt": ["medit_dirt", "medit_dirt_b"],
- "road": "medit_city_tile",
- "roadWild": "medit_city_tile",
- "shoreBlend": "medit_sand",
- "shore": "sand_grass_25",
- "water": "medit_sand_wet"
- };
-
- g_Gaia = {
- "chicken": "gaia/fauna_chicken",
- "mainHuntableAnimal": "gaia/fauna_deer",
- "fish": "gaia/fauna_fish",
- "secondaryHuntableAnimal": "gaia/fauna_sheep",
- "stoneLarge": "gaia/geology_stonemine_medit_quarry",
- "stoneSmall": "gaia/geology_stone_mediterranean",
- "metalLarge": "gaia/geology_metal_mediterranean_slabs"
- };
-
- var random_trees = randIntInclusive(1, 3);
- if (random_trees == 1)
- {
- g_Gaia.tree1 = "gaia/flora_tree_cretan_date_palm_short";
- g_Gaia.tree2 = "gaia/flora_tree_cretan_date_palm_tall";
- }
- else if (random_trees == 2)
- {
- g_Gaia.tree1 = "gaia/flora_tree_carob";
- g_Gaia.tree2 = "gaia/flora_tree_carob";
- }
- else
- {
- g_Gaia.tree1 = "gaia/flora_tree_medit_fan_palm";
- g_Gaia.tree2 = "gaia/flora_tree_medit_fan_palm";
- }
+ if (typeof from[prop] == "object" && !Array.isArray(from[prop]))
+ {
+ if (!to[prop])
+ to[prop] = {};
- if (randBool())
- g_Gaia.tree3 = "gaia/flora_tree_apple";
- else
- g_Gaia.tree3 = "gaia/flora_tree_poplar_lombardy";
-
- if (randBool())
- {
- g_Gaia.tree4 = "gaia/flora_tree_cypress";
- g_Gaia.tree5 = "gaia/flora_tree_cypress";
- }
- else
- {
- g_Gaia.tree4 = "gaia/flora_tree_aleppo_pine";
- g_Gaia.tree5 = "gaia/flora_tree_aleppo_pine";
+ copyProperties(from[prop], to[prop]);
+ }
+ else
+ to[prop] = from[prop];
}
+ };
- if (randBool())
- g_Gaia.fruitBush = "gaia/flora_bush_berry";
- else
- g_Gaia.fruitBush = "gaia/flora_bush_grapes";
-
- g_Decoratives = {
- "grass": "actor|props/flora/grass_soft_large_tall.xml",
- "grassShort": "actor|props/flora/grass_soft_large.xml",
- "reeds": "actor|props/flora/reeds_pond_lush_b.xml",
- "lillies": "actor|props/flora/water_lillies.xml",
- "rockLarge": "actor|geology/stone_granite_large.xml",
- "rockMedium": "actor|geology/stone_granite_med.xml",
- "bushMedium": "actor|props/flora/bush_medit_me.xml",
- "bushSmall": "actor|props/flora/bush_medit_sm.xml",
- "tree": "actor|flora/trees/palm_cretan_date.xml"
- };
- }
- else if (g_BiomeID == g_BiomeSavanna)
- {
- // Using the Malawi as a reference, in parts where it's not too murky from a river nearby.
- setWaterColor(0.055,0.176,0.431);
- setWaterTint(0.227,0.749,0.549);
- setWaterWaviness(1.5);
- setWaterMurkiness(0.77);
-
- setFogFactor(0.25);
- setFogThickness(0.15);
- setFogColor(0.847059, 0.737255, 0.482353);
-
- setPPEffect("hdr");
- setPPContrast(0.57031);
- setPPBloom(0.34);
-
- g_Terrains = {
- "mainTerrain": ["savanna_grass_a", "savanna_grass_b"],
- "forestFloor1": "savanna_forestfloor_a",
- "forestFloor2": "savanna_forestfloor_b",
- "cliff": ["savanna_cliff_a", "savanna_cliff_b"],
- "tier1Terrain": "savanna_shrubs_a",
- "tier2Terrain": "savanna_dirt_rocks_b",
- "tier3Terrain": "savanna_dirt_rocks_a",
- "tier4Terrain": "savanna_grass_a",
- "hill": ["savanna_grass_a", "savanna_grass_b"],
- "dirt": ["savanna_dirt_rocks_b", "dirt_brown_e"],
- "road": "savanna_tile_a",
- "roadWild": "savanna_tile_a",
- "shoreBlend": "savanna_riparian",
- "shore": "savanna_riparian_bank",
- "water": "savanna_riparian_wet"
- };
-
- g_Gaia = {
- "tree1": "gaia/flora_tree_baobab",
- "tree2": "gaia/flora_tree_baobab",
- "tree3": "gaia/flora_tree_baobab",
- "tree4": "gaia/flora_tree_baobab",
- "tree5": "gaia/flora_tree_baobab",
- "fruitBush": "gaia/flora_bush_grapes",
- "chicken": "gaia/fauna_chicken",
- "fish": "gaia/fauna_fish",
- "mainHuntableAnimal": pickRandom([
- "gaia/fauna_wildebeest",
- "gaia/fauna_zebra",
- "gaia/fauna_giraffe",
- "gaia/fauna_elephant_african_bush"
- ]),
- "secondaryHuntableAnimal": "gaia/fauna_gazelle",
- "stoneLarge": "gaia/geology_stonemine_desert_quarry",
- "stoneSmall": "gaia/geology_stone_savanna_small",
- "metalLarge": "gaia/geology_metal_savanna_slabs"
- };
-
- g_Decoratives = {
- "grass": "actor|props/flora/grass_savanna.xml",
- "grassShort": "actor|props/flora/grass_medit_field.xml",
- "reeds": "actor|props/flora/reeds_pond_lush_a.xml",
- "lillies": "actor|props/flora/reeds_pond_lush_b.xml",
- "rockLarge": "actor|geology/stone_savanna_med.xml",
- "rockMedium": "actor|geology/stone_savanna_med.xml",
- "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
- "bushSmall": "actor|props/flora/bush_dry_a.xml",
- "tree": "actor|flora/trees/baobab.xml"
- };
-
- g_TreeCount = {
- "minTrees": 200,
- "maxTrees": 1250,
- "forestProbability": 0
- };
- }
- else if (g_BiomeID == g_BiomeTropic)
- {
- // Bora-Bora ish. Quite transparent, not wavy.
- // Mostly for shallow maps. Maps where the water level goes deeper should use a much darker Water Color to simulate deep water holes.
- setWaterColor(0.584,0.824,0.929);
- setWaterTint(0.569,0.965,0.945);
- setWaterWaviness(1.5);
- setWaterMurkiness(0.35);
-
- setFogFactor(0.4);
- setFogThickness(0.2);
-
- setPPEffect("hdr");
- setPPContrast(0.67);
- setPPSaturation(0.62);
- setPPBloom(0.6);
-
- g_Terrains = {
- "mainTerrain": ["tropic_grass_c", "tropic_grass_c", "tropic_grass_c", "tropic_grass_c", "tropic_grass_plants", "tropic_plants", "tropic_plants_b"],
- "forestFloor1": "tropic_plants_c",
- "forestFloor2": "tropic_plants_c",
- "cliff": ["tropic_cliff_a", "tropic_cliff_a", "tropic_cliff_a", "tropic_cliff_a_plants"],
- "tier1Terrain": "tropic_grass_c",
- "tier2Terrain": "tropic_grass_plants",
- "tier3Terrain": "tropic_plants",
- "tier4Terrain": "tropic_plants_b",
- "hill": ["tropic_cliff_grass"],
- "dirt": ["tropic_dirt_a", "tropic_dirt_a_plants"],
- "road": "tropic_citytile_a",
- "roadWild": "tropic_citytile_plants",
- "shoreBlend": "temp_mud_plants",
- "shore": "tropic_beach_dry_plants",
- "water": "tropic_beach_dry"
- };
-
- g_Gaia = {
- "tree1": "gaia/flora_tree_toona",
- "tree2": "gaia/flora_tree_toona",
- "tree3": "gaia/flora_tree_palm_tropic",
- "tree4": "gaia/flora_tree_palm_tropic",
- "tree5": "gaia/flora_tree_palm_tropic",
- "fruitBush": "gaia/flora_bush_berry",
- "chicken": "gaia/fauna_chicken",
- "mainHuntableAnimal": "gaia/fauna_peacock",
- "fish": "gaia/fauna_fish",
- "secondaryHuntableAnimal": "gaia/fauna_tiger",
- "stoneLarge": "gaia/geology_stonemine_tropic_quarry",
- "stoneSmall": "gaia/geology_stone_tropic_a",
- "metalLarge": "gaia/geology_metal_tropic_slabs"
- };
-
- g_Decoratives = {
- "grass": "actor|props/flora/plant_tropic_a.xml",
- "grassShort": "actor|props/flora/plant_lg.xml",
- "reeds": "actor|props/flora/reeds_pond_lush_b.xml",
- "lillies": "actor|props/flora/water_lillies.xml",
- "rockLarge": "actor|geology/stone_granite_large.xml",
- "rockMedium": "actor|geology/stone_granite_med.xml",
- "bushMedium": "actor|props/flora/plant_tropic_large.xml",
- "bushSmall": "actor|props/flora/plant_tropic_large.xml",
- "tree": "actor|flora/trees/tree_tropic.xml"
- };
-
- g_TreeCount = {
- "minTrees": 1000,
- "maxTrees": 6000,
- "forestProbabilityp": 0.52
- };
- }
- else if (g_BiomeID == g_BiomeAutumn)
- {
- // basically temperate with a reddish twist in the reflection and the tint. Also less wavy.
- // this assumes ocean settings, maps that aren't oceans should reset.
- setWaterColor(0.157, 0.149, 0.443);
- setWaterTint(0.443,0.42,0.824);
- setWaterWaviness(2.5);
- setWaterMurkiness(0.83);
-
- setFogFactor(0.35);
- setFogThickness(0.22);
- setFogColor(0.82,0.82, 0.73);
- setPPSaturation(0.56);
- setPPContrast(0.56);
- setPPBloom(0.38);
- setPPEffect("hdr");
-
- g_Terrains = {
- "mainTerrain": ["temp_grass_aut", "temp_grass_aut", "temp_grass_d_aut"],
- "forestFloor1": "temp_plants_bog_aut",
- "forestFloor2": "temp_forestfloor_aut",
- "cliff": ["temp_cliff_a", "temp_cliff_b"],
- "tier1Terrain": "temp_grass_plants_aut",
- "tier2Terrain": ["temp_grass_b_aut", "temp_grass_c_aut"],
- "tier3Terrain": ["temp_grass_b_aut", "temp_grass_long_b_aut"],
- "tier4Terrain": "temp_grass_plants_aut",
- "hill": "temp_highlands_aut",
- "dirt": ["temp_cliff_a", "temp_cliff_b"],
- "road": "temp_road_aut",
- "roadWild": "temp_road_overgrown_aut",
- "shoreBlend": "temp_grass_plants_aut",
- "shore": "temp_forestfloor_pine",
- "water": "medit_sand_wet"
- };
-
- g_Gaia = {
- "tree1": "gaia/flora_tree_euro_beech_aut",
- "tree2": "gaia/flora_tree_euro_beech_aut",
- "tree3": "gaia/flora_tree_pine",
- "tree4": "gaia/flora_tree_oak_aut",
- "tree5": "gaia/flora_tree_oak_aut",
- "fruitBush": "gaia/flora_bush_berry",
- "chicken": "gaia/fauna_chicken",
- "mainHuntableAnimal": "gaia/fauna_deer",
- "fish": "gaia/fauna_fish",
- "secondaryHuntableAnimal": "gaia/fauna_rabbit",
- "stoneLarge": "gaia/geology_stonemine_temperate_quarry",
- "stoneSmall": "gaia/geology_stone_temperate",
- "metalLarge": "gaia/geology_metal_temperate_slabs"
- };
-
- g_Decoratives = {
- "grass": "actor|props/flora/grass_soft_dry_small_tall.xml",
- "grassShort": "actor|props/flora/grass_soft_dry_large.xml",
- "reeds": "actor|props/flora/reeds_pond_dry.xml",
- "lillies": "actor|geology/stone_granite_large.xml",
- "rockLarge": "actor|geology/stone_granite_large.xml",
- "rockMedium": "actor|geology/stone_granite_med.xml",
- "bushMedium": "actor|props/flora/bush_desert_dry_a.xml",
- "bushSmall": "actor|props/flora/bush_desert_dry_a.xml",
- "tree": "actor|flora/trees/european_beech_aut.xml"
- };
- }
+ for (let rmsGlobal in biome)
+ copyProperties(biome[rmsGlobal], global["g_" + rmsGlobal]);
}
function rBiomeTreeCount(multiplier = 1)
{
return [
g_TreeCount.minTrees * multiplier,
g_TreeCount.maxTrees * multiplier,
g_TreeCount.forestProbability
];
}
function rBiomeT1()
{
return g_Terrains.mainTerrain;
}
function rBiomeT2()
{
return g_Terrains.forestFloor1;
}
function rBiomeT3()
{
return g_Terrains.forestFloor2;
}
function rBiomeT4()
{
return g_Terrains.cliff;
}
function rBiomeT5()
{
return g_Terrains.tier1Terrain;
}
function rBiomeT6()
{
return g_Terrains.tier2Terrain;
}
function rBiomeT7()
{
return g_Terrains.tier3Terrain;
}
function rBiomeT8()
{
return g_Terrains.hill;
}
function rBiomeT9()
{
return g_Terrains.dirt;
}
function rBiomeT10()
{
return g_Terrains.road;
}
function rBiomeT11()
{
return g_Terrains.roadWild;
}
function rBiomeT12()
{
return g_Terrains.tier4Terrain;
}
function rBiomeT13()
{
return g_Terrains.shoreBlend;
}
function rBiomeT14()
{
return g_Terrains.shore;
}
function rBiomeT15()
{
return g_Terrains.water;
}
function rBiomeE1()
{
return g_Gaia.tree1;
}
function rBiomeE2()
{
return g_Gaia.tree2;
}
function rBiomeE3()
{
return g_Gaia.tree3;
}
function rBiomeE4()
{
return g_Gaia.tree4;
}
function rBiomeE5()
{
return g_Gaia.tree5;
}
function rBiomeE6()
{
return g_Gaia.fruitBush;
}
function rBiomeE7()
{
return g_Gaia.chicken;
}
function rBiomeE8()
{
return g_Gaia.mainHuntableAnimal;
}
function rBiomeE9()
{
return g_Gaia.fish;
}
function rBiomeE10()
{
return g_Gaia.secondaryHuntableAnimal;
}
function rBiomeE11()
{
return g_Gaia.stoneLarge;
}
function rBiomeE12()
{
return g_Gaia.stoneSmall;
}
function rBiomeE13()
{
return g_Gaia.metalLarge;
}
function rBiomeA1()
{
return g_Decoratives.grass;
}
function rBiomeA2()
{
return g_Decoratives.grassShort;
}
function rBiomeA3()
{
return g_Decoratives.reeds;
}
function rBiomeA4()
{
return g_Decoratives.lillies;
}
function rBiomeA5()
{
return g_Decoratives.rockLarge;
}
function rBiomeA6()
{
return g_Decoratives.rockMedium;
}
function rBiomeA7()
{
return g_Decoratives.bushMedium;
}
function rBiomeA8()
{
return g_Decoratives.bushSmall;
}
function rBiomeA9()
{
return g_Decoratives.tree;
}
Index: ps/trunk/source/graphics/MapGenerator.cpp
===================================================================
--- ps/trunk/source/graphics/MapGenerator.cpp (revision 20128)
+++ ps/trunk/source/graphics/MapGenerator.cpp (revision 20129)
@@ -1,314 +1,330 @@
/* Copyright (C) 2017 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see .
*/
#include "precompiled.h"
#include "MapGenerator.h"
#include "lib/timer.h"
#include "ps/CLogger.h"
#include "ps/Profile.h"
// TODO: what's a good default? perhaps based on map size
#define RMS_RUNTIME_SIZE 96 * 1024 * 1024
CMapGeneratorWorker::CMapGeneratorWorker()
{
// If something happens before we initialize, that's a failure
m_Progress = -1;
}
CMapGeneratorWorker::~CMapGeneratorWorker()
{
// Wait for thread to end
pthread_join(m_WorkerThread, NULL);
}
void CMapGeneratorWorker::Initialize(const VfsPath& scriptFile, const std::string& settings)
{
CScopeLock lock(m_WorkerMutex);
// Set progress to positive value
m_Progress = 1;
m_ScriptPath = scriptFile;
m_Settings = settings;
// Launch the worker thread
int ret = pthread_create(&m_WorkerThread, NULL, &RunThread, this);
ENSURE(ret == 0);
}
void* CMapGeneratorWorker::RunThread(void *data)
{
debug_SetThreadName("MapGenerator");
g_Profiler2.RegisterCurrentThread("MapGenerator");
CMapGeneratorWorker* self = static_cast(data);
self->m_ScriptInterface = new ScriptInterface("RMS", "MapGenerator", ScriptInterface::CreateRuntime(g_ScriptRuntime, RMS_RUNTIME_SIZE));
// Run map generation scripts
if (!self->Run() || self->m_Progress > 0)
{
// Don't leave progress in an unknown state, if generator failed, set it to -1
CScopeLock lock(self->m_WorkerMutex);
self->m_Progress = -1;
}
// At this point the random map scripts are done running, so the thread has no further purpose
// and can die. The data will be stored in m_MapData already if successful, or m_Progress
// will contain an error value on failure.
return NULL;
}
bool CMapGeneratorWorker::Run()
{
// We must destroy the ScriptInterface in the same thread because the JSAPI requires that!
// Also we must not be in a request when calling the ScriptInterface destructor, so the autoFree object
// must be instantiated before the request (destructors are called in reverse order of instantiation)
struct AutoFree {
AutoFree(ScriptInterface* p) : m_p(p) {}
~AutoFree() { SAFE_DELETE(m_p); }
ScriptInterface* m_p;
} autoFree(m_ScriptInterface);
JSContext* cx = m_ScriptInterface->GetContext();
JSAutoRequest rq(cx);
m_ScriptInterface->SetCallbackData(static_cast (this));
// Replace RNG with a seeded deterministic function
m_ScriptInterface->ReplaceNondeterministicRNG(m_MapGenRNG);
m_ScriptInterface->LoadGlobalScripts();
// Functions for RMS
m_ScriptInterface->RegisterFunction("LoadLibrary");
m_ScriptInterface->RegisterFunction("ExportMap");
m_ScriptInterface->RegisterFunction("SetProgress");
m_ScriptInterface->RegisterFunction("MaybeGC");
+ m_ScriptInterface->RegisterFunction("FileExists");
+ m_ScriptInterface->RegisterFunction ("ReadJSONFile");
m_ScriptInterface->RegisterFunction, CMapGeneratorWorker::GetCivData>("GetCivData");
m_ScriptInterface->RegisterFunction("GetTemplate");
m_ScriptInterface->RegisterFunction("TemplateExists");
m_ScriptInterface->RegisterFunction, std::string, bool, CMapGeneratorWorker::FindTemplates>("FindTemplates");
m_ScriptInterface->RegisterFunction, std::string, bool, CMapGeneratorWorker::FindActorTemplates>("FindActorTemplates");
// Parse settings
JS::RootedValue settingsVal(cx);
if (!m_ScriptInterface->ParseJSON(m_Settings, &settingsVal) && settingsVal.isUndefined())
{
LOGERROR("CMapGeneratorWorker::Run: Failed to parse settings");
return false;
}
// Init RNG seed
u32 seed = 0;
if (!m_ScriptInterface->HasProperty(settingsVal, "Seed") ||
!m_ScriptInterface->GetProperty(settingsVal, "Seed", seed))
LOGWARNING("CMapGeneratorWorker::Run: No seed value specified - using 0");
m_MapGenRNG.seed(seed);
// Copy settings to global variable
JS::RootedValue global(cx, m_ScriptInterface->GetGlobalObject());
if (!m_ScriptInterface->SetProperty(global, "g_MapSettings", settingsVal))
{
LOGERROR("CMapGeneratorWorker::Run: Failed to define g_MapSettings");
return false;
}
// Load RMS
LOGMESSAGE("Loading RMS '%s'", m_ScriptPath.string8());
if (!m_ScriptInterface->LoadGlobalScriptFile(m_ScriptPath))
{
LOGERROR("CMapGeneratorWorker::Run: Failed to load RMS '%s'", m_ScriptPath.string8());
return false;
}
return true;
}
int CMapGeneratorWorker::GetProgress()
{
CScopeLock lock(m_WorkerMutex);
return m_Progress;
}
shared_ptr CMapGeneratorWorker::GetResults()
{
CScopeLock lock(m_WorkerMutex);
return m_MapData;
}
bool CMapGeneratorWorker::LoadLibrary(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& name)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
return self->LoadScripts(name);
}
void CMapGeneratorWorker::ExportMap(ScriptInterface::CxPrivate* pCxPrivate, JS::HandleValue data)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
// Copy results
CScopeLock lock(self->m_WorkerMutex);
self->m_MapData = self->m_ScriptInterface->WriteStructuredClone(data);
self->m_Progress = 0;
}
void CMapGeneratorWorker::SetProgress(ScriptInterface::CxPrivate* pCxPrivate, int progress)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
// Copy data
CScopeLock lock(self->m_WorkerMutex);
self->m_Progress = progress;
}
void CMapGeneratorWorker::MaybeGC(ScriptInterface::CxPrivate* pCxPrivate)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
self->m_ScriptInterface->MaybeGC();
}
+bool CMapGeneratorWorker::FileExists(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const std::wstring& filePath)
+{
+ return g_VFS->GetFileInfo(filePath, 0) == INFO::OK;
+}
+
+JS::Value CMapGeneratorWorker::ReadJSONFile(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& filePath)
+{
+ JSContext* cx = pCxPrivate->pScriptInterface->GetContext();
+ JSAutoRequest rq(cx);
+ JS::RootedValue out(cx);
+ pCxPrivate->pScriptInterface->ReadJSONFile(filePath, &out);
+ return out;
+}
+
std::vector CMapGeneratorWorker::GetCivData(ScriptInterface::CxPrivate* UNUSED(pCxPrivate))
{
VfsPath path(L"simulation/data/civs/");
VfsPaths pathnames;
std::vector data;
// Load all JSON files in civs directory
Status ret = vfs::GetPathnames(g_VFS, path, L"*.json", pathnames);
if (ret == INFO::OK)
{
for (const VfsPath& p : pathnames)
{
// Load JSON file
CVFSFile file;
PSRETURN ret = file.Load(g_VFS, p);
if (ret != PSRETURN_OK)
LOGERROR("CMapGeneratorWorker::GetCivData: Failed to load file '%s': %s", p.string8(), GetErrorString(ret));
else
data.push_back(file.DecodeUTF8()); // assume it's UTF-8
}
}
else
{
// Some error reading directory
wchar_t error[200];
LOGERROR("CMapGeneratorWorker::GetCivData: Error reading directory '%s': %s", path.string8(), utf8_from_wstring(StatusDescription(ret, error, ARRAY_SIZE(error))));
}
return data;
}
CParamNode CMapGeneratorWorker::GetTemplate(ScriptInterface::CxPrivate* pCxPrivate, const std::string& templateName)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
const CParamNode& templateRoot = self->m_TemplateLoader.GetTemplateFileData(templateName).GetChild("Entity");
if (!templateRoot.IsOk())
LOGERROR("Invalid template found for '%s'", templateName.c_str());
return templateRoot;
}
bool CMapGeneratorWorker::TemplateExists(ScriptInterface::CxPrivate* pCxPrivate, const std::string& templateName)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
return self->m_TemplateLoader.TemplateExists(templateName);
}
std::vector CMapGeneratorWorker::FindTemplates(ScriptInterface::CxPrivate* pCxPrivate, const std::string& path, bool includeSubdirectories)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
return self->m_TemplateLoader.FindTemplates(path, includeSubdirectories, SIMULATION_TEMPLATES);
}
std::vector CMapGeneratorWorker::FindActorTemplates(ScriptInterface::CxPrivate* pCxPrivate, const std::string& path, bool includeSubdirectories)
{
CMapGeneratorWorker* self = static_cast(pCxPrivate->pCBData);
return self->m_TemplateLoader.FindTemplates(path, includeSubdirectories, ACTOR_TEMPLATES);
}
bool CMapGeneratorWorker::LoadScripts(const std::wstring& libraryName)
{
// Ignore libraries that are already loaded
if (m_LoadedLibraries.find(libraryName) != m_LoadedLibraries.end())
return true;
// Mark this as loaded, to prevent it recursively loading itself
m_LoadedLibraries.insert(libraryName);
VfsPath path = L"maps/random/" + libraryName + L"/";
VfsPaths pathnames;
// Load all scripts in mapgen directory
Status ret = vfs::GetPathnames(g_VFS, path, L"*.js", pathnames);
if (ret == INFO::OK)
{
for (const VfsPath& p : pathnames)
{
LOGMESSAGE("Loading map generator script '%s'", p.string8());
if (!m_ScriptInterface->LoadGlobalScriptFile(p))
{
LOGERROR("CMapGeneratorWorker::LoadScripts: Failed to load script '%s'", p.string8());
return false;
}
}
}
else
{
// Some error reading directory
wchar_t error[200];
LOGERROR("CMapGeneratorWorker::LoadScripts: Error reading scripts in directory '%s': %s", path.string8(), utf8_from_wstring(StatusDescription(ret, error, ARRAY_SIZE(error))));
return false;
}
return true;
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
CMapGenerator::CMapGenerator() : m_Worker(new CMapGeneratorWorker())
{
}
CMapGenerator::~CMapGenerator()
{
delete m_Worker;
}
void CMapGenerator::GenerateMap(const VfsPath& scriptFile, const std::string& settings)
{
m_Worker->Initialize(scriptFile, settings);
}
int CMapGenerator::GetProgress()
{
return m_Worker->GetProgress();
}
shared_ptr CMapGenerator::GetResults()
{
return m_Worker->GetResults();
}
Index: ps/trunk/source/graphics/MapGenerator.h
===================================================================
--- ps/trunk/source/graphics/MapGenerator.h (revision 20128)
+++ ps/trunk/source/graphics/MapGenerator.h (revision 20129)
@@ -1,152 +1,154 @@
/* Copyright (C) 2017 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see .
*/
#ifndef INCLUDED_MAPGENERATOR
#define INCLUDED_MAPGENERATOR
#include "ps/FileIo.h"
#include "ps/ThreadUtil.h"
#include "ps/TemplateLoader.h"
#include "scriptinterface/ScriptInterface.h"
#include
#include
class CMapGeneratorWorker;
/**
* Random map generator interface. Initialized by CMapReader and then checked
* periodically during loading, until it's finished (progress value is 0).
*
* The actual work is performed by CMapGeneratorWorker in a separate thread.
*/
class CMapGenerator
{
NONCOPYABLE(CMapGenerator);
public:
CMapGenerator();
~CMapGenerator();
/**
* Start the map generator thread
*
* @param scriptFile The VFS path for the script, e.g. "maps/random/latium.js"
* @param settings JSON string containing settings for the map generator
*/
void GenerateMap(const VfsPath& scriptFile, const std::string& settings);
/**
* Get status of the map generator thread
*
* @return Progress percentage 1-100 if active, 0 when finished, or -1 on error
*/
int GetProgress();
/**
* Get random map data, according to this format:
* http://trac.wildfiregames.com/wiki/Random_Map_Generator_Internals#Dataformat
*
* @return StructuredClone containing map data
*/
shared_ptr GetResults();
private:
CMapGeneratorWorker* m_Worker;
};
/**
* Random map generator worker thread.
* (This is run in a thread so that the GUI remains responsive while loading)
*
* Thread-safety:
* - Initialize and constructor/destructor must be called from the main thread.
* - ScriptInterface created and destroyed by thread
* - StructuredClone used to return JS map data - JS:Values can't be used across threads/runtimes.
*/
class CMapGeneratorWorker
{
public:
CMapGeneratorWorker();
~CMapGeneratorWorker();
/**
* Start the map generator thread
*
* @param scriptFile The VFS path for the script, e.g. "maps/random/latium.js"
* @param settings JSON string containing settings for the map generator
*/
void Initialize(const VfsPath& scriptFile, const std::string& settings);
/**
* Get status of the map generator thread
*
* @return Progress percentage 1-100 if active, 0 when finished, or -1 on error
*/
int GetProgress();
/**
* Get random map data, according to this format:
* http://trac.wildfiregames.com/wiki/Random_Map_Generator_Internals#Dataformat
*
* @return StructuredClone containing map data
*/
shared_ptr GetResults();
private:
// Mapgen
/**
* Load all scripts of the given library
*
* @param libraryName String specifying name of the library (subfolder of ../maps/random/)
* @return true if all scripts ran successfully, false if there's an error
*/
bool LoadScripts(const std::wstring& libraryName);
// callbacks for script functions
static bool LoadLibrary(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& name);
static void ExportMap(ScriptInterface::CxPrivate* pCxPrivate, JS::HandleValue data);
static void SetProgress(ScriptInterface::CxPrivate* pCxPrivate, int progress);
static void MaybeGC(ScriptInterface::CxPrivate* pCxPrivate);
+ static bool FileExists(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& filePath);
+ static JS::Value ReadJSONFile(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& filePath);
static std::vector GetCivData(ScriptInterface::CxPrivate* pCxPrivate);
static CParamNode GetTemplate(ScriptInterface::CxPrivate* pCxPrivate, const std::string& templateName);
static bool TemplateExists(ScriptInterface::CxPrivate* pCxPrivate, const std::string& templateName);
static std::vector FindTemplates(ScriptInterface::CxPrivate* pCxPrivate, const std::string& path, bool includeSubdirectories);
static std::vector FindActorTemplates(ScriptInterface::CxPrivate* pCxPrivate, const std::string& path, bool includeSubdirectories);
std::set m_LoadedLibraries;
shared_ptr m_MapData;
boost::rand48 m_MapGenRNG;
int m_Progress;
ScriptInterface* m_ScriptInterface;
VfsPath m_ScriptPath;
std::string m_Settings;
CTemplateLoader m_TemplateLoader;
// Thread
static void* RunThread(void* data);
bool Run();
pthread_t m_WorkerThread;
CMutex m_WorkerMutex;
};
#endif //INCLUDED_MAPGENERATOR