2011-03-22 02:34:45 +01:00
|
|
|
RMS.LoadLibrary("rmgen");
|
|
|
|
|
2011-09-14 00:51:43 +02:00
|
|
|
const BUILDING_ANGlE = 0.75*PI;
|
|
|
|
|
2011-03-22 02:34:45 +01:00
|
|
|
// initialize map
|
|
|
|
|
|
|
|
log("Initializing map...");
|
|
|
|
|
|
|
|
InitMap();
|
|
|
|
|
|
|
|
var numPlayers = getNumPlayers();
|
|
|
|
var mapSize = getMapSize();
|
|
|
|
|
|
|
|
// create tile classes
|
|
|
|
|
|
|
|
var clPlayer = createTileClass();
|
|
|
|
var clPath = createTileClass();
|
|
|
|
var clHill = createTileClass();
|
|
|
|
var clForest = createTileClass();
|
|
|
|
var clWater = createTileClass();
|
|
|
|
var clRock = createTileClass();
|
|
|
|
var clFood = createTileClass();
|
|
|
|
var clBaseResource = createTileClass();
|
|
|
|
|
|
|
|
// place players
|
|
|
|
|
|
|
|
var playerX = new Array(numPlayers);
|
2011-07-24 22:04:04 +02:00
|
|
|
var playerZ = new Array(numPlayers);
|
2011-03-22 02:34:45 +01:00
|
|
|
var playerAngle = new Array(numPlayers);
|
|
|
|
|
|
|
|
var startAngle = randFloat() * 2 * PI;
|
|
|
|
for (var i=0; i < numPlayers; i++)
|
|
|
|
{
|
|
|
|
playerAngle[i] = startAngle + i*2*PI/numPlayers;
|
|
|
|
playerX[i] = 0.5 + 0.39*cos(playerAngle[i]);
|
2011-07-24 22:04:04 +02:00
|
|
|
playerZ[i] = 0.5 + 0.39*sin(playerAngle[i]);
|
2011-03-22 02:34:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
for (var i=0; i < numPlayers; i++)
|
|
|
|
{
|
|
|
|
log("Creating base for player " + (i + 1) + "...");
|
|
|
|
|
2011-07-24 22:04:04 +02:00
|
|
|
// get the x and z in tiles
|
2011-03-22 02:34:45 +01:00
|
|
|
var fx = fractionToTiles(playerX[i]);
|
2011-07-24 22:04:04 +02:00
|
|
|
var fz = fractionToTiles(playerZ[i]);
|
2011-03-22 02:34:45 +01:00
|
|
|
var ix = round(fx);
|
2011-07-24 22:04:04 +02:00
|
|
|
var iz = round(fz);
|
|
|
|
|
|
|
|
// get civ specific starting entities
|
|
|
|
var civEntities = getStartingEntities(i);
|
|
|
|
|
|
|
|
// create the TC
|
2011-08-13 02:54:24 +02:00
|
|
|
var group = new SimpleGroup( // elements (type, min/max count, min/max distance, min/max angle)
|
2011-09-14 00:51:43 +02:00
|
|
|
[new SimpleObject(civEntities[0].Template, 1,1, 0,0, BUILDING_ANGlE, BUILDING_ANGlE)],
|
2011-07-24 22:04:04 +02:00
|
|
|
true, null, ix, iz
|
2011-03-22 02:34:45 +01:00
|
|
|
);
|
|
|
|
createObjectGroup(group, i+1);
|
2011-07-24 22:04:04 +02:00
|
|
|
|
|
|
|
// create starting units
|
|
|
|
var uDist = 8;
|
2011-09-14 00:51:43 +02:00
|
|
|
var uAngle = -BUILDING_ANGlE + randFloat(-PI/8, PI/8);
|
2011-07-24 22:04:04 +02:00
|
|
|
for (var j = 1; j < civEntities.length; ++j)
|
|
|
|
{
|
|
|
|
var count = (civEntities[j].Count !== undefined ? civEntities[j].Count : 1);
|
|
|
|
var ux = round(fx + uDist * cos(uAngle));
|
|
|
|
var uz = round(fz + uDist * sin(uAngle));
|
|
|
|
group = new SimpleGroup( // elements (type, min/max count, min/max distance)
|
|
|
|
[new SimpleObject(civEntities[j].Template, count,count, 1,ceil(count/2))],
|
|
|
|
true, null, ux, uz
|
|
|
|
);
|
|
|
|
createObjectGroup(group, i+1);
|
|
|
|
uAngle += PI/4;
|
|
|
|
}
|
2011-03-22 02:34:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Export map data
|
|
|
|
ExportMap();
|