Red Sea random map replica, based on the original map by _kali created in 33e3e6c2ab
deleted in f5375cbcb9
, refs #4816, #5018, D957.
Uses an unadulterated, easily exchangeable, well compressed topography image of the NASA Blue Marble series in the public domain, instead of a heavily tuned and not so well licensed NASA SRTM v4.1 image encoded in JSON. Circular intead of a square map shape. Randomized, height- and slope-based terrain texture painting, refs #5004. This was SVN commit r21135.
This commit is contained in:
parent
8216bf9511
commit
2e8e394521
@ -17,12 +17,15 @@ in particular, let us know and we can try to clarify it.
|
||||
/binaries/data
|
||||
GPL version 2 (or later) - see license_gpl-2.0.txt
|
||||
|
||||
/binaries/data/mods/art
|
||||
/binaries/data/mods/audio
|
||||
/binaries/data/mods/*/art
|
||||
/binaries/data/mods/*/audio
|
||||
Creative Commons Attribution-Share Alike 3.0 - see
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
and also see LICENSE.txt within those directories
|
||||
|
||||
/binaries/data/mods/*/maps/
|
||||
see LICENSE.txt within those directories
|
||||
|
||||
/binaries/system
|
||||
Various (unspecified)
|
||||
|
||||
|
BIN
binaries/data/mods/public/art/textures/ui/session/icons/mappreview/red_sea.png
(Stored with Git LFS)
Normal file
BIN
binaries/data/mods/public/art/textures/ui/session/icons/mappreview/red_sea.png
(Stored with Git LFS)
Normal file
Binary file not shown.
10
binaries/data/mods/public/maps/random/LICENSE.txt
Normal file
10
binaries/data/mods/public/maps/random/LICENSE.txt
Normal file
@ -0,0 +1,10 @@
|
||||
The JSON and JS files in this directory are created by Wildfire Games and available under the same license as the remainder of binaries/data/, i.e. GPL version 2 (or later) - see license_gpl-2.0.txt.
|
||||
|
||||
This directory contains topography images of the NASA Blue Marble series. This material is in the public domain.
|
||||
|
||||
Credit: Imagery by Jesse Allen, NASA's Earth Observatory, using data from the General Bathymetric Chart of the Oceans (GEBCO) produced by the British Oceanographic Data Centre.
|
||||
https://visibleearth.nasa.gov/view.php?id=73934
|
||||
> General Terms of Use Information
|
||||
> Most images published in Visible Earth are freely available for re-publication or re-use, including commercial purposes, except for where copyright is indicated. In those cases you must obtain the copyright holder’s permission; we usually provide links to the organization that holds the copyright.
|
||||
> We ask that you use the credit statement attached with each image or else credit Visible Earth; the only mandatory credit is NASA.
|
||||
> For more information about using NASA imagery visit http://www.nasa.gov/audience/formedia/features/MP_Photo_Guidelines.html.
|
365
binaries/data/mods/public/maps/random/red_sea.js
Normal file
365
binaries/data/mods/public/maps/random/red_sea.js
Normal file
@ -0,0 +1,365 @@
|
||||
/**
|
||||
* Heightmap image source:
|
||||
* Imagery by Jesse Allen, NASA's Earth Observatory,
|
||||
* using data from the General Bathymetric Chart of the Oceans (GEBCO)
|
||||
* produced by the British Oceanographic Data Centre.
|
||||
* https://visibleearth.nasa.gov/view.php?id=73934
|
||||
*
|
||||
* Licensing: Public Domain, https://visibleearth.nasa.gov/useterms.php
|
||||
*
|
||||
* The heightmap image is reproduced using:
|
||||
* wget https://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73934/gebco_08_rev_elev_C1_grey_geo.tif
|
||||
* lat=22; lon=41; width=30; gdal_translate -projwin $((lon-width/2)) $((lat+width/2)) $((lon+width/2)) $((lat-width/2)) gebco_08_rev_elev_C1_grey_geo.tif red_sea.tif
|
||||
* convert red_sea.tif -resize 512 -contrast-stretch 0 red_sea.png
|
||||
* No further changes should be applied to the image to keep it easily interchangeable.
|
||||
*/
|
||||
|
||||
Engine.LoadLibrary("rmgen");
|
||||
Engine.LoadLibrary("rmgen2");
|
||||
Engine.LoadLibrary("rmbiome");
|
||||
Engine.LoadLibrary("heightmap");
|
||||
|
||||
setBiome("generic/desert");
|
||||
|
||||
g_Terrains.mainTerrain = new Array(4).fill("desert_sand_dunes_50").concat(["desert_sand_dunes_rocks", "desert_dirt_rough_2"]);
|
||||
g_Terrains.forestFloor1 = "desert_grass_a_sand";
|
||||
g_Terrains.cliff = "desert_cliff_3_dirty";
|
||||
g_Terrains.forestFloor2 = "desert_grass_a_sand";
|
||||
g_Terrains.tier1Terrain = "desert_dirt_rocks_2";
|
||||
g_Terrains.tier2Terrain = "desert_dirt_rough";
|
||||
g_Terrains.tier3Terrain = "desert_dirt_rough";
|
||||
g_Terrains.tier4Terrain = "desert_sand_stones";
|
||||
g_Terrains.roadWild = "road2";
|
||||
g_Terrains.road = "road2";
|
||||
g_Terrains.additionalDirt1 = "desert_plants_b";
|
||||
g_Terrains.additionalDirt2 = "desert_sand_scrub";
|
||||
g_Gaia.tree1 = "gaia/flora_tree_date_palm";
|
||||
g_Gaia.tree2 = "gaia/flora_tree_senegal_date_palm";
|
||||
g_Gaia.tree3 = "gaia/flora_tree_fig";
|
||||
g_Gaia.tree4 = "gaia/flora_tree_cretan_date_palm_tall";
|
||||
g_Gaia.tree5 = "gaia/flora_tree_cretan_date_palm_short";
|
||||
g_Gaia.fruitBush = "gaia/flora_bush_grapes";
|
||||
g_Decoratives.grass = "actor|props/flora/grass_field_dry_tall_b.xml";
|
||||
g_Decoratives.grassShort = "actor|props/flora/grass_field_parched_short.xml";
|
||||
g_Decoratives.rockLarge = "actor|geology/stone_desert_med.xml";
|
||||
g_Decoratives.rockMedium = "actor|geology/stone_savanna_med.xml";
|
||||
g_Decoratives.bushMedium = "actor|props/flora/bush_desert_dry_a.xml";
|
||||
g_Decoratives.bushSmall = "actor|props/flora/bush_medit_sm_dry.xml";
|
||||
g_Decoratives.dust = "actor|particle/dust_storm_reddish.xml";
|
||||
|
||||
const heightScale = num => num * g_MapSettings.Size / 320;
|
||||
|
||||
const heightSeaGround = heightScale(-4);
|
||||
const heightReedsMin = heightScale(-2);
|
||||
const heightReedsMax = heightScale(-0.5);
|
||||
const heightWaterLevel = heightScale(0);
|
||||
const heightShoreline = heightScale(0.5);
|
||||
const heightHills = heightScale(16);
|
||||
|
||||
var g_Map = new RandomMap(0, g_Terrains.mainTerrain);
|
||||
var mapCenter = g_Map.getCenter();
|
||||
|
||||
initTileClasses(["shoreline"]);
|
||||
|
||||
g_Map.LoadHeightmapImage("red_sea.png", 0, 25);
|
||||
Engine.SetProgress(15);
|
||||
|
||||
g_Map.log("Lowering sea ground");
|
||||
createArea(
|
||||
new MapBoundsPlacer(),
|
||||
new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 2),
|
||||
new HeightConstraint(-Infinity, heightWaterLevel));
|
||||
Engine.SetProgress(20);
|
||||
|
||||
g_Map.log("Smoothing heightmap");
|
||||
globalSmoothHeightmap(scaleByMapSize(0.1, 0.5));
|
||||
Engine.SetProgress(25);
|
||||
|
||||
g_Map.log("Marking water");
|
||||
createArea(
|
||||
new MapBoundsPlacer(),
|
||||
new TileClassPainter(g_TileClasses.water),
|
||||
new HeightConstraint(-Infinity, heightWaterLevel));
|
||||
Engine.SetProgress(30);
|
||||
|
||||
g_Map.log("Marking land");
|
||||
createArea(
|
||||
new ClumpPlacer(diskArea(fractionToTiles(0.5)), 1, 1, Infinity, mapCenter),
|
||||
new TileClassPainter(g_TileClasses.land),
|
||||
avoidClasses(g_TileClasses.water, 0));
|
||||
Engine.SetProgress(35);
|
||||
|
||||
g_Map.log("Painting shoreline");
|
||||
createArea(
|
||||
new MapBoundsPlacer(),
|
||||
[
|
||||
new TerrainPainter(g_Terrains.water),
|
||||
new TileClassPainter(g_TileClasses.shoreline)
|
||||
],
|
||||
new HeightConstraint(-Infinity, heightShoreline));
|
||||
Engine.SetProgress(40);
|
||||
|
||||
g_Map.log("Painting cliffs");
|
||||
createArea(
|
||||
new MapBoundsPlacer(),
|
||||
[
|
||||
new TerrainPainter(g_Terrains.cliff),
|
||||
new TileClassPainter(g_TileClasses.mountain),
|
||||
],
|
||||
[
|
||||
avoidClasses(g_TileClasses.water, 2),
|
||||
new SlopeConstraint(2, Infinity)
|
||||
]);
|
||||
Engine.SetProgress(45);
|
||||
|
||||
if (!isNomad())
|
||||
{
|
||||
g_Map.log("Placing players");
|
||||
var playerBases = placeRandom(sortAllPlayers(), new AndConstraint([avoidClasses(g_TileClasses.mountain, 5), stayClasses(g_TileClasses.land, defaultPlayerBaseRadius())]));
|
||||
|
||||
g_Map.log("Flatten the initial CC area...");
|
||||
for (let player of playerBases)
|
||||
createArea(
|
||||
new ClumpPlacer(diskArea(defaultPlayerBaseRadius() * 0.8), 0.95, 0.6, Infinity, player.position),
|
||||
new SmoothElevationPainter(ELEVATION_SET, g_Map.getHeight(player.position), 6));
|
||||
}
|
||||
|
||||
addElements(shuffleArray([
|
||||
{
|
||||
"func": addMetal,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 5,
|
||||
g_TileClasses.forest, 3,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.player, 30,
|
||||
g_TileClasses.rock, 10,
|
||||
g_TileClasses.metal, 20,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["normal"]
|
||||
},
|
||||
{
|
||||
"func": addStone,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 5,
|
||||
g_TileClasses.forest, 3,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.player, 30,
|
||||
g_TileClasses.rock, 20,
|
||||
g_TileClasses.metal, 10,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["normal"]
|
||||
},
|
||||
{
|
||||
"func": addForests,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 3,
|
||||
g_TileClasses.forest, 20,
|
||||
g_TileClasses.metal, 4,
|
||||
g_TileClasses.mountain, 3,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.rock, 4,
|
||||
g_TileClasses.water, 2
|
||||
],
|
||||
"sizes": ["big"],
|
||||
"mixes": ["similar"],
|
||||
"amounts": ["few"]
|
||||
}
|
||||
]));
|
||||
Engine.SetProgress(60);
|
||||
|
||||
// Ensure initial forests
|
||||
addElements([{
|
||||
"func": addForests,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 2,
|
||||
g_TileClasses.forest, 25,
|
||||
g_TileClasses.metal, 4,
|
||||
g_TileClasses.mountain, 5,
|
||||
g_TileClasses.player, 15,
|
||||
g_TileClasses.rock, 4,
|
||||
g_TileClasses.water, 2
|
||||
],
|
||||
"sizes": ["small"],
|
||||
"mixes": ["similar"],
|
||||
"amounts": ["tons"]
|
||||
}]);
|
||||
Engine.SetProgress(65);
|
||||
|
||||
addElements(shuffleArray([
|
||||
{
|
||||
"func": addBerries,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 30,
|
||||
g_TileClasses.forest, 5,
|
||||
g_TileClasses.metal, 10,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.rock, 10,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["normal", "many"]
|
||||
},
|
||||
{
|
||||
"func": addAnimals,
|
||||
"avoid": [
|
||||
g_TileClasses.animals, 20,
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.metal, 2,
|
||||
g_TileClasses.mountain, 1,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.rock, 4,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["many"]
|
||||
},
|
||||
{
|
||||
"func": addFish,
|
||||
"avoid": [
|
||||
g_TileClasses.fish, 12,
|
||||
g_TileClasses.player, 8
|
||||
],
|
||||
"stay": [g_TileClasses.water, 4],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["many"]
|
||||
},
|
||||
{
|
||||
"func": addStragglerTrees,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 5,
|
||||
g_TileClasses.forest, 15,
|
||||
g_TileClasses.metal, 2,
|
||||
g_TileClasses.mountain, 1,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.rock, 4,
|
||||
g_TileClasses.water, 5
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["many"]
|
||||
}
|
||||
]));
|
||||
Engine.SetProgress(70);
|
||||
|
||||
addElements([
|
||||
{
|
||||
"func": addLayeredPatches,
|
||||
"avoid": [
|
||||
g_TileClasses.dirt, 5,
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.player, 12,
|
||||
g_TileClasses.water, 3,
|
||||
g_TileClasses.shoreline, 2
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["normal"],
|
||||
"amounts": ["tons"]
|
||||
},
|
||||
{
|
||||
"func": addDecoration,
|
||||
"avoid": [
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.player, 12,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["similar"],
|
||||
"amounts": ["many"]
|
||||
}
|
||||
]);
|
||||
Engine.SetProgress(80);
|
||||
|
||||
g_Map.log("Painting dirt patches");
|
||||
var dirtPatches = [
|
||||
{
|
||||
"sizes": [2, 4],
|
||||
"count": scaleByMapSize(2, 5),
|
||||
"terrain": g_Terrains.additionalDirt1
|
||||
},
|
||||
{
|
||||
"sizes": [4, 6, 8],
|
||||
"count": scaleByMapSize(4, 8),
|
||||
"terrain": g_Terrains.additionalDirt2
|
||||
}
|
||||
];
|
||||
for (let dirtPatch of dirtPatches)
|
||||
createPatches(
|
||||
dirtPatch.sizes,
|
||||
dirtPatch.terrain,
|
||||
[
|
||||
stayClasses(g_TileClasses.land, 6),
|
||||
avoidClasses(
|
||||
g_TileClasses.mountain, 4,
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.shoreline, 2,
|
||||
g_TileClasses.player, 12)
|
||||
],
|
||||
dirtPatch.count,
|
||||
g_TileClasses.dirt,
|
||||
0.5);
|
||||
Engine.SetProgress(85);
|
||||
|
||||
g_Map.log("Adding reeds");
|
||||
createObjectGroups(
|
||||
new SimpleGroup(
|
||||
[
|
||||
new SimpleObject(g_Decoratives.reeds, 5, 12, 1, 4),
|
||||
new SimpleObject(g_Decoratives.rockMedium, 1, 2, 1, 5)
|
||||
],
|
||||
false,
|
||||
g_TileClasses.dirt),
|
||||
0,
|
||||
new HeightConstraint(heightReedsMin, heightReedsMax),
|
||||
scaleByMapSize(10, 25),
|
||||
5);
|
||||
Engine.SetProgress(90);
|
||||
|
||||
g_Map.log("Adding dust...");
|
||||
createObjectGroups(
|
||||
new SimpleGroup([new SimpleObject(g_Decoratives.dust, 1, 1, 1, 4)], false),
|
||||
0,
|
||||
[
|
||||
stayClasses(g_TileClasses.land, 5),
|
||||
avoidClasses(g_TileClasses.player, 10)
|
||||
],
|
||||
scaleByMapSize(10, 50),
|
||||
20);
|
||||
Engine.SetProgress(95);
|
||||
|
||||
placePlayersNomad(g_Map.createTileClass());
|
||||
|
||||
setWindAngle(-0.43);
|
||||
setWaterTint(0.161, 0.286, 0.353);
|
||||
setWaterColor(0.129, 0.176, 0.259);
|
||||
setWaterWaviness(8);
|
||||
setWaterMurkiness(0.87);
|
||||
setWaterType("lake");
|
||||
|
||||
setTerrainAmbientColor(0.58, 0.443, 0.353);
|
||||
|
||||
setSunColor(0.733, 0.746, 0.574);
|
||||
setSunRotation(Math.PI * 1.1);
|
||||
setSunElevation(Math.PI / 7);
|
||||
|
||||
setFogFactor(0);
|
||||
setFogThickness(0);
|
||||
setFogColor(0.69, 0.616, 0.541);
|
||||
|
||||
setPPEffect("hdr");
|
||||
setPPContrast(0.67);
|
||||
setPPSaturation(0.42);
|
||||
setPPBloom(0.23);
|
||||
|
||||
g_Map.ExportMap();
|
9
binaries/data/mods/public/maps/random/red_sea.json
Normal file
9
binaries/data/mods/public/maps/random/red_sea.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"settings" : {
|
||||
"Name" : "Red Sea",
|
||||
"Script" : "red_sea.js",
|
||||
"Description" : "Historically, the Red Sea was a sea of many nations. Ideally situated for trade with the Far East, it was coveted by all. Although dry, this land is by no means inhospitable, and is amply provided with all resources.",
|
||||
"Preview" : "red_sea.png",
|
||||
"CircularMap": true
|
||||
}
|
||||
}
|
BIN
binaries/data/mods/public/maps/random/red_sea.png
(Stored with Git LFS)
Normal file
BIN
binaries/data/mods/public/maps/random/red_sea.png
(Stored with Git LFS)
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user