mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 13:23:56 -07:00
Five new random map scripts by _kali: Bahrain, Harbor, Howe Sound, Ngorongo and Rouen.
Besides harbor, they are portraying actual geographic regions. Some environmental improvements by niektb. This was SVN commit r18714.
This commit is contained in:
parent
f63cef5ad0
commit
a68881dd0f
15 changed files with 2257 additions and 0 deletions
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9a2817ef3afaaff9636bd26c5e9d240e183e06a889c9ac7c22df09fad2c32852
|
||||
size 104975
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9afddfac533b19441b2ab0d6fe52b8320ff2f908beff395bbe038ee62f14a753
|
||||
size 140219
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:eb5d243a1c71ab37d9ee780c2c093f442930ebbb98e1c5945ba887bd8c6c3ecc
|
||||
size 96699
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8ffab06ac77168894da9c447145814136f5502b22b511fb86c51dc793f2dfbf2
|
||||
size 163703
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:29ecf039114805731d79405c8f590d078e54f8f0dda88c64aeea17bc3374d7fa
|
||||
size 110430
|
||||
452
binaries/data/mods/public/maps/random/bahrain.js
Normal file
452
binaries/data/mods/public/maps/random/bahrain.js
Normal file
File diff suppressed because one or more lines are too long
11
binaries/data/mods/public/maps/random/bahrain.json
Normal file
11
binaries/data/mods/public/maps/random/bahrain.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"settings" : {
|
||||
"Name" : "Bahrain",
|
||||
"Script" : "bahrain.js",
|
||||
"Description" : "The Kingdom of Bahrain is an island country situated between Saudia Arabia to the west and Qatar to the east. From the 6th to 3rd century BC, Bahrain was part of the Persian Empire.",
|
||||
"BaseTerrain" : ["medit_sea_depths"],
|
||||
"BaseHeight" : 1,
|
||||
"Preview" : "bahrain.png",
|
||||
"CircularMap" : false
|
||||
}
|
||||
}
|
||||
439
binaries/data/mods/public/maps/random/harbor.js
Normal file
439
binaries/data/mods/public/maps/random/harbor.js
Normal file
|
|
@ -0,0 +1,439 @@
|
|||
RMS.LoadLibrary("rmgen");
|
||||
RMS.LoadLibrary("rmgen2");
|
||||
|
||||
InitMap();
|
||||
|
||||
randomizeBiome();
|
||||
initMapSettings();
|
||||
initTileClasses();
|
||||
|
||||
setFogFactor(0.04);
|
||||
|
||||
resetTerrain(g_Terrains.mainTerrain, g_TileClasses.land, 2);
|
||||
RMS.SetProgress(10);
|
||||
|
||||
var players = addBases("radial", 0.38);
|
||||
RMS.SetProgress(20);
|
||||
|
||||
addCenterLake();
|
||||
RMS.SetProgress(30);
|
||||
|
||||
if (g_MapInfo.mapSize >= 192)
|
||||
{
|
||||
addHarbors(players);
|
||||
RMS.SetProgress(40);
|
||||
}
|
||||
|
||||
addSpines();
|
||||
RMS.SetProgress(50);
|
||||
|
||||
addElements(shuffleArray([
|
||||
{
|
||||
"func": addHills,
|
||||
"avoid": [
|
||||
g_TileClasses.bluff, 5,
|
||||
g_TileClasses.hill, 15,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.plateau, 5,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.spine, 5,
|
||||
g_TileClasses.valley, 2,
|
||||
g_TileClasses.water, 2
|
||||
],
|
||||
"sizes": ["tiny", "small"],
|
||||
"mixes": g_AllMixes,
|
||||
"amounts": g_AllAmounts
|
||||
},
|
||||
{
|
||||
"func": addMountains,
|
||||
"avoid": [
|
||||
g_TileClasses.bluff, 20,
|
||||
g_TileClasses.mountain, 25,
|
||||
g_TileClasses.plateau, 20,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.spine, 20,
|
||||
g_TileClasses.valley, 10,
|
||||
g_TileClasses.water, 15
|
||||
],
|
||||
"sizes": ["small"],
|
||||
"mixes": g_AllMixes,
|
||||
"amounts": g_AllAmounts
|
||||
},
|
||||
{
|
||||
"func": addPlateaus,
|
||||
"avoid": [
|
||||
g_TileClasses.bluff, 20,
|
||||
g_TileClasses.mountain, 25,
|
||||
g_TileClasses.plateau, 20,
|
||||
g_TileClasses.player, 40,
|
||||
g_TileClasses.spine, 20,
|
||||
g_TileClasses.valley, 10,
|
||||
g_TileClasses.water, 15
|
||||
],
|
||||
"sizes": ["small"],
|
||||
"mixes": g_AllMixes,
|
||||
"amounts": g_AllAmounts
|
||||
},
|
||||
{
|
||||
"func": addBluffs,
|
||||
"avoid": [
|
||||
g_TileClasses.bluff, 20,
|
||||
g_TileClasses.mountain, 25,
|
||||
g_TileClasses.plateau, 20,
|
||||
g_TileClasses.player, 40,
|
||||
g_TileClasses.spine, 20,
|
||||
g_TileClasses.valley, 10,
|
||||
g_TileClasses.water, 15
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": g_AllMixes,
|
||||
"amounts": g_AllAmounts
|
||||
}
|
||||
]));
|
||||
RMS.SetProgress(60);
|
||||
|
||||
addElements(shuffleArray([
|
||||
{
|
||||
"func": addMetal,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 5,
|
||||
g_TileClasses.bluff, 5,
|
||||
g_TileClasses.forest, 3,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.plateau, 2,
|
||||
g_TileClasses.player, 30,
|
||||
g_TileClasses.rock, 10,
|
||||
g_TileClasses.spine, 5,
|
||||
g_TileClasses.metal, 20,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["normal", "many"]
|
||||
},
|
||||
{
|
||||
"func": addStone,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 5,
|
||||
g_TileClasses.bluff, 5,
|
||||
g_TileClasses.forest, 3,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.plateau, 2,
|
||||
g_TileClasses.player, 30,
|
||||
g_TileClasses.rock, 20,
|
||||
g_TileClasses.spine, 5,
|
||||
g_TileClasses.metal, 10,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["same"],
|
||||
"amounts": ["normal", "many"]
|
||||
},
|
||||
{
|
||||
"func": addForests,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 5,
|
||||
g_TileClasses.bluff, 5,
|
||||
g_TileClasses.forest, 8,
|
||||
g_TileClasses.metal, 3,
|
||||
g_TileClasses.mountain, 5,
|
||||
g_TileClasses.plateau, 5,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.rock, 3,
|
||||
g_TileClasses.spine, 5,
|
||||
g_TileClasses.water, 2
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["similar"],
|
||||
"amounts": ["many"]
|
||||
}
|
||||
]));
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
addElements(shuffleArray([
|
||||
{
|
||||
"func": addBerries,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 30,
|
||||
g_TileClasses.bluff, 5,
|
||||
g_TileClasses.forest, 5,
|
||||
g_TileClasses.metal, 10,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.plateau, 2,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.rock, 10,
|
||||
g_TileClasses.spine, 2,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": g_AllSizes,
|
||||
"mixes": g_AllMixes,
|
||||
"amounts": g_AllAmounts
|
||||
},
|
||||
{
|
||||
"func": addAnimals,
|
||||
"avoid": [
|
||||
g_TileClasses.animals, 20,
|
||||
g_TileClasses.bluff, 5,
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.metal, 2,
|
||||
g_TileClasses.mountain, 1,
|
||||
g_TileClasses.plateau, 2,
|
||||
g_TileClasses.player, 20,
|
||||
g_TileClasses.rock, 2,
|
||||
g_TileClasses.spine, 2,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": g_AllSizes,
|
||||
"mixes": g_AllMixes,
|
||||
"amounts": g_AllAmounts
|
||||
},
|
||||
{
|
||||
"func": addStragglerTrees,
|
||||
"avoid": [
|
||||
g_TileClasses.berries, 5,
|
||||
g_TileClasses.bluff, 5,
|
||||
g_TileClasses.forest, 7,
|
||||
g_TileClasses.metal, 2,
|
||||
g_TileClasses.mountain, 1,
|
||||
g_TileClasses.plateau, 2,
|
||||
g_TileClasses.player, 12,
|
||||
g_TileClasses.rock, 2,
|
||||
g_TileClasses.spine, 2,
|
||||
g_TileClasses.water, 5
|
||||
],
|
||||
"sizes": g_AllSizes,
|
||||
"mixes": g_AllMixes,
|
||||
"amounts": g_AllAmounts
|
||||
}
|
||||
]));
|
||||
|
||||
RMS.SetProgress(80);
|
||||
|
||||
addElements([
|
||||
{
|
||||
"func": addLayeredPatches,
|
||||
"avoid": [
|
||||
g_TileClasses.bluff, 2,
|
||||
g_TileClasses.dirt, 5,
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.plateau, 2,
|
||||
g_TileClasses.player, 12,
|
||||
g_TileClasses.spine, 5,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["normal"],
|
||||
"amounts": ["normal"]
|
||||
},
|
||||
{
|
||||
"func": addDecoration,
|
||||
"avoid": [
|
||||
g_TileClasses.bluff, 2,
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.plateau, 2,
|
||||
g_TileClasses.player, 12,
|
||||
g_TileClasses.spine, 5,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["normal"],
|
||||
"amounts": ["normal"]
|
||||
}
|
||||
]);
|
||||
|
||||
RMS.SetProgress(90);
|
||||
|
||||
ExportMap();
|
||||
|
||||
function addCenterLake()
|
||||
{
|
||||
let lSize = sqrt(sqrt(sqrt(scaleByMapSize(1, 6))));
|
||||
|
||||
createArea(
|
||||
new ChainPlacer(
|
||||
2,
|
||||
Math.floor(scaleByMapSize(2, 12)),
|
||||
Math.floor(scaleByMapSize(35, 160)),
|
||||
1,
|
||||
g_MapInfo.centerOfMap,
|
||||
g_MapInfo.centerOfMap,
|
||||
0,
|
||||
[floor(g_MapInfo.mapSize * 0.17 * lSize)]
|
||||
),
|
||||
[
|
||||
new LayeredPainter(
|
||||
[
|
||||
g_Terrains.shore,
|
||||
g_Terrains.water,
|
||||
g_Terrains.water
|
||||
],
|
||||
[1, 100]
|
||||
),
|
||||
new SmoothElevationPainter(ELEVATION_SET, -18, 10),
|
||||
paintClass(g_TileClasses.water)
|
||||
],
|
||||
avoidClasses(g_TileClasses.player, 20)
|
||||
);
|
||||
|
||||
let fDist = 50;
|
||||
if (g_MapInfo.mapSize <= 192)
|
||||
fDist = 20;
|
||||
|
||||
// create a bunch of fish
|
||||
createObjectGroup(
|
||||
new SimpleGroup(
|
||||
[new SimpleObject(g_Gaia.fish, 20, 30, 0, fDist)],
|
||||
true,
|
||||
g_TileClasses.baseResource,
|
||||
g_MapInfo.centerOfMap,
|
||||
g_MapInfo.centerOfMap
|
||||
),
|
||||
0,
|
||||
[
|
||||
avoidClasses(g_TileClasses.player, 5, g_TileClasses.hill, 3, g_TileClasses.mountain, 3),
|
||||
stayClasses(g_TileClasses.water, 5)
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
function addHarbors(players)
|
||||
{
|
||||
for (let i = 0; i < players.length; ++i)
|
||||
{
|
||||
let ix = round(fractionToTiles(players[i].x));
|
||||
let iz = round(fractionToTiles(players[i].z));
|
||||
let playerDistX = g_MapInfo.centerOfMap - ix;
|
||||
let playerDistZ = g_MapInfo.centerOfMap - iz;
|
||||
let offsetX = round(playerDistX / 2.5);
|
||||
let offsetZ = round(playerDistZ / 2.5);
|
||||
|
||||
createArea(
|
||||
new ClumpPlacer(scaleByMapSize(1200, 1200), 0.5, 0.5, 1, ix + offsetX, iz + offsetZ),
|
||||
[
|
||||
new LayeredPainter([g_Terrains.shore, g_Terrains.water], [2]),
|
||||
new SmoothElevationPainter(ELEVATION_MODIFY, -11, 3),
|
||||
paintClass(g_TileClasses.water)
|
||||
],
|
||||
avoidClasses(
|
||||
g_TileClasses.player, 15,
|
||||
g_TileClasses.hill, 1
|
||||
)
|
||||
);
|
||||
|
||||
// create fish in harbor
|
||||
createObjectGroup(
|
||||
new SimpleGroup(
|
||||
[new SimpleObject(g_Gaia.fish, 6, 6, 1, 20)],
|
||||
true, g_TileClasses.baseResource, ix + offsetX, iz + offsetZ
|
||||
),
|
||||
0,
|
||||
[
|
||||
avoidClasses(
|
||||
g_TileClasses.hill, 3,
|
||||
g_TileClasses.mountain, 3
|
||||
),
|
||||
stayClasses(g_TileClasses.water, 5)
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function addSpines()
|
||||
{
|
||||
let spineTile = g_Terrains.dirt;
|
||||
let elevation = 35;
|
||||
|
||||
if (g_MapInfo.biome == 2)
|
||||
spineTile = g_Terrains.tier1Terrain;
|
||||
|
||||
if (g_MapInfo.biome == 4 || g_MapInfo.biome == 6)
|
||||
spineTile = g_Terrains.tier2Terrain;
|
||||
|
||||
if (g_MapInfo.biome == 8)
|
||||
spineTile = g_Terrains.tier4Terrain;
|
||||
|
||||
let split = 1;
|
||||
if (g_MapInfo.numPlayers <= 3 || (g_MapInfo.mapSize >= 320 && g_MapInfo.numPlayers <= 4))
|
||||
split = 2;
|
||||
|
||||
for (let i = 0; i < g_MapInfo.numPlayers * split; ++i)
|
||||
{
|
||||
let tang = g_MapInfo.startAngle + (i + 0.5) * TWO_PI / (g_MapInfo.numPlayers * split);
|
||||
|
||||
let fx = fractionToTiles(0.5);
|
||||
let fz = fractionToTiles(0.5);
|
||||
let ix = round(fx);
|
||||
let iz = round(fz);
|
||||
|
||||
let mStartCo = 0.12;
|
||||
let mStopCo = 0.40;
|
||||
let mSize = 0.5;
|
||||
let mWaviness = 0.6;
|
||||
let mOffset = 0.4;
|
||||
let mTaper = -1.4;
|
||||
|
||||
// make small mountain dividers if we're on a small map
|
||||
if (g_MapInfo.mapSize <= 192)
|
||||
{
|
||||
mSize = 0.02;
|
||||
mTaper = -0.1;
|
||||
elevation = 20;
|
||||
}
|
||||
|
||||
createArea(
|
||||
new PathPlacer(
|
||||
fractionToTiles(0.5 + mStartCo * cos(tang)),
|
||||
fractionToTiles(0.5 + mStartCo * sin(tang)),
|
||||
fractionToTiles(0.5 + mStopCo * cos(tang)),
|
||||
fractionToTiles(0.5 + mStopCo * sin(tang)),
|
||||
scaleByMapSize(14, mSize),
|
||||
mWaviness,
|
||||
0.1,
|
||||
mOffset,
|
||||
mTaper
|
||||
),
|
||||
[
|
||||
new LayeredPainter([g_Terrains.cliff, spineTile], [3]),
|
||||
new SmoothElevationPainter(ELEVATION_MODIFY, elevation, 3),
|
||||
paintClass(g_TileClasses.spine)
|
||||
],
|
||||
avoidClasses(g_TileClasses.player, 5)
|
||||
);
|
||||
}
|
||||
|
||||
addElements([
|
||||
{
|
||||
"func": addDecoration,
|
||||
"avoid": [
|
||||
g_TileClasses.bluff, 2,
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.mountain, 2,
|
||||
g_TileClasses.player, 12,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"stay": [g_TileClasses.spine, 5],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["normal"],
|
||||
"amounts": ["normal"]
|
||||
}
|
||||
]);
|
||||
|
||||
addElements([
|
||||
{
|
||||
"func": addProps,
|
||||
"avoid": [
|
||||
g_TileClasses.forest, 2,
|
||||
g_TileClasses.player, 2,
|
||||
g_TileClasses.prop, 20,
|
||||
g_TileClasses.water, 3
|
||||
],
|
||||
"stay": [g_TileClasses.spine, 8],
|
||||
"sizes": ["normal"],
|
||||
"mixes": ["normal"],
|
||||
"amounts": ["scarce"]
|
||||
}
|
||||
]);
|
||||
}
|
||||
11
binaries/data/mods/public/maps/random/harbor.json
Normal file
11
binaries/data/mods/public/maps/random/harbor.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"settings" : {
|
||||
"Name" : "Harbor",
|
||||
"Script" : "harbor.js",
|
||||
"Description" : "Players start with some light fishing opportunities in the calm waters of a sheltered harbor. A large bounty of seafood lays beyond the protective cliffs in the deep ocean. Small passages at the base of the cliffs make for tight fighting and easy fortification. Will you fight your way through the narrow passageways or take to the sea?",
|
||||
"BaseTerrain" : ["medit_sea_depths"],
|
||||
"BaseHeight" : 2,
|
||||
"Preview" : "harbor.png",
|
||||
"CircularMap" : true
|
||||
}
|
||||
}
|
||||
433
binaries/data/mods/public/maps/random/howe_sound.js
Normal file
433
binaries/data/mods/public/maps/random/howe_sound.js
Normal file
File diff suppressed because one or more lines are too long
11
binaries/data/mods/public/maps/random/howe_sound.json
Normal file
11
binaries/data/mods/public/maps/random/howe_sound.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"settings" : {
|
||||
"Name" : "Howe Sound",
|
||||
"Script" : "howe_sound.js",
|
||||
"Description" : "Howe Sound is a roughly triangular network of fjords located directly northwest of Vancouver in British Columbia, Canada.",
|
||||
"BaseTerrain" : ["medit_sea_depths"],
|
||||
"BaseHeight" : 1,
|
||||
"Preview" : "howe_sound.png",
|
||||
"CircularMap" : false
|
||||
}
|
||||
}
|
||||
559
binaries/data/mods/public/maps/random/ngorongoro.js
Normal file
559
binaries/data/mods/public/maps/random/ngorongoro.js
Normal file
File diff suppressed because one or more lines are too long
11
binaries/data/mods/public/maps/random/ngorongoro.json
Normal file
11
binaries/data/mods/public/maps/random/ngorongoro.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"settings" : {
|
||||
"Name" : "Ngorongoro",
|
||||
"Script" : "ngorongoro.js",
|
||||
"Description" : "Ngorongoro Crater is the world's largest intact volcanic caldera and is one of the Seven Natural Wonders of Africa. Due to it's climate, biodiversity and history, Ngorongoro is believed by some to be Africa's Garden of Eden and the birthplace of mankind.",
|
||||
"BaseTerrain" : ["medit_sea_depths"],
|
||||
"BaseHeight" : 1,
|
||||
"Preview" : "ngorongoro.png",
|
||||
"CircularMap" : false
|
||||
}
|
||||
}
|
||||
304
binaries/data/mods/public/maps/random/rouen.js
Normal file
304
binaries/data/mods/public/maps/random/rouen.js
Normal file
File diff suppressed because one or more lines are too long
11
binaries/data/mods/public/maps/random/rouen.json
Normal file
11
binaries/data/mods/public/maps/random/rouen.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"settings" : {
|
||||
"Name" : "Rouen",
|
||||
"Script" : "rouen.js",
|
||||
"Description" : "Rouen is a city on the River Seine in the north of France and the capital of Normandy. Formerly one of the largest and most prosperous cities of medieval Europe, Rouen was the seat of the Exchequer of Normandy during the Middle Ages. It was one of the capitals of the Anglo-Norman dynasties, which ruled both England and large parts of modern France from the 11th to the 15th centuries.",
|
||||
"BaseTerrain" : ["medit_sea_depths"],
|
||||
"BaseHeight" : 1,
|
||||
"Preview" : "rouen.png",
|
||||
"CircularMap" : false
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue