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();
|
|
|
|
|
2011-10-21 03:15:02 +02:00
|
|
|
// randomize player order
|
|
|
|
var playerIDs = [];
|
|
|
|
for (var i = 0; i < numPlayers; i++)
|
|
|
|
{
|
|
|
|
playerIDs.push(i+1);
|
|
|
|
}
|
|
|
|
playerIDs = shuffleArray(playerIDs);
|
|
|
|
|
2011-03-22 02:34:45 +01:00
|
|
|
// 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++)
|
|
|
|
{
|
2011-10-21 03:15:02 +02:00
|
|
|
var id = playerIDs[i];
|
|
|
|
log("Creating base for player " + id + "...");
|
2011-03-22 02:34:45 +01:00
|
|
|
|
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
|
2011-10-21 03:15:02 +02:00
|
|
|
var civEntities = getStartingEntities(id-1);
|
2011-07-24 22:04:04 +02:00
|
|
|
|
|
|
|
// 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
|
|
|
);
|
2011-10-21 03:15:02 +02:00
|
|
|
createObjectGroup(group, id);
|
2011-07-24 22:04:04 +02:00
|
|
|
|
|
|
|
// create starting units
|
2012-02-24 11:34:05 +01:00
|
|
|
var uDist = 6;
|
|
|
|
var uSpace = 2;
|
2011-07-24 22:04:04 +02:00
|
|
|
for (var j = 1; j < civEntities.length; ++j)
|
|
|
|
{
|
2012-02-24 11:34:05 +01:00
|
|
|
var uAngle = -BUILDING_ANGlE + PI * (j - 1) / 2;
|
2011-07-24 22:04:04 +02:00
|
|
|
var count = (civEntities[j].Count !== undefined ? civEntities[j].Count : 1);
|
2012-02-24 11:34:05 +01:00
|
|
|
for (var numberofentities = 0; numberofentities < count; numberofentities++)
|
|
|
|
{
|
|
|
|
var ux = fx + uDist * cos(uAngle) + numberofentities * uSpace * cos(uAngle + PI/2) - (0.75 * uSpace * floor(count / 2) * cos(uAngle + PI/2));
|
|
|
|
var uz = fz + uDist * sin(uAngle) + numberofentities * uSpace * sin(uAngle + PI/2) - (0.75 * uSpace * floor(count / 2) * sin(uAngle + PI/2));
|
|
|
|
placeObject(ux, uz, civEntities[j].Template, id, (j % 2 - 1) * PI + uAngle);
|
|
|
|
}
|
2011-07-24 22:04:04 +02:00
|
|
|
}
|
2011-03-22 02:34:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Export map data
|
|
|
|
ExportMap();
|