// DEFINE AREAS
// Complex placement to avoid water and enemy players
if(handedness < 0.5) // NE ocean
{
// If only 2 players place as 2 points
if(cNumberNonGaiaPlayers == 2)
{
rmPlacePlayer(1, 0.5, 0.85);
rmPlacePlayer(2, 0.5, 0.15);
}
// Place by team if 2 teams and sane teams
else if(cNumberTeams == 2 && rmGetNumberPlayersOnTeam(0) < 5 && rmGetNumberPlayersOnTeam(1) < 5)
{
rmSetPlacementTeam(0);
rmSetPlacementSection(0.85, 0.05);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
rmSetPlacementTeam(1);
rmSetPlacementSection(0.45, 0.65);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
}
// otherwise just place in one arc FFA style
else
{
rmSetPlacementSection(0.45, 0.05);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
}
}
else // SE ocean
{
// If only 2 players place as 2 points
if(cNumberNonGaiaPlayers == 2)
{
rmPlacePlayer(1, 0.85, 0.5);
rmPlacePlayer(2, 0.15, 0.5);
}
// Place by team if 2 teams and sane teams
else if(cNumberTeams == 2 && rmGetNumberPlayersOnTeam(0) < 5 && rmGetNumberPlayersOnTeam(1) < 5)
{
rmSetPlacementTeam(0);
rmSetPlacementSection(0.10, 0.30);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
rmSetPlacementTeam(1);
rmSetPlacementSection(0.70, 0.90);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
}
// otherwise just place in one arc FFA style
else
{
rmSetPlacementSection(0.70, 0.30);
rmPlacePlayersCircular(0.4, 0.4, rmDegreesToRadians(5.0));
}
}
// Invisible continent added to have big continent avoid player areas
int invisContinentID=rmCreateArea("invisible continent for constraint");
rmSetAreaSize(invisContinentID, 0.01, 0.01);
rmSetAreaWarnFailure(invisContinentID, false);
if(handedness < 0.5) // NE ocean
{
rmSetAreaLocation(invisContinentID, 0.99, 0.5);
rmAddAreaInfluenceSegment(invisContinentID, 0.95, 0.30, 0.99, 0.5);
rmAddAreaInfluenceSegment(invisContinentID, 0.99, 0.5, 0.95, 0.70);
}
else
{
rmSetAreaLocation(invisContinentID, 0.5, 0.01);
rmAddAreaInfluenceSegment(invisContinentID, 0.30, 0.05, 0.5, 0.01);
rmAddAreaInfluenceSegment(invisContinentID, 0.5, 0.01, 0.70, 0.05);
}
rmAddAreaToClass(invisContinentID, rmClassID("classInvis"));
rmSetAreaCoherence(invisContinentID, 0.8);
//rmSetAreaBaseHeight(invisContinentID, 3);
//rmSetAreaMix(invisContinentID, "carolina_grass");
// Build the areas.
rmBuildArea(invisContinentID);
// Build up big continent called "big continent"
int bigContinentID = -1;
bigContinentID=rmCreateArea("big continent");
rmSetAreaSize(bigContinentID, 0.40, 0.47); // 0.38 0.47
rmSetAreaWarnFailure(bigContinentID, false);
rmAddAreaConstraint(bigContinentID, invisConstraint);
rmAddAreaToClass(bigContinentID, classbigContinent);
rmSetAreaMinBlobs(bigContinentID, 10);
rmSetAreaMaxBlobs(bigContinentID, 10);
rmSetAreaMinBlobDistance(bigContinentID, rmXFractionToMeters(0.1));
rmSetAreaMaxBlobDistance(bigContinentID, rmXFractionToMeters(0.4));
rmSetAreaSmoothDistance(bigContinentID, 50);
rmSetAreaMix(bigContinentID, "carolina_grass");
rmSetAreaElevationType(bigContinentID, cElevTurbulence);
rmSetAreaElevationVariation(bigContinentID, 4.0);
rmSetAreaBaseHeight(bigContinentID, 3.5);
rmSetAreaElevationMinFrequency(bigContinentID, 0.09);
rmSetAreaElevationOctaves(bigContinentID, 3);
rmSetAreaElevationPersistence(bigContinentID, 0.2);
rmSetAreaElevationNoiseBias(bigContinentID, 1);
rmSetAreaCoherence(bigContinentID, 0.15);
// CHOOSE RIGHT OR LEFT-HANDED CONTINENT
if(handedness < 0.5) // NE ocean
{
rmSetAreaLocation(bigContinentID, 0.25, 0.5);
rmAddAreaInfluenceSegment(bigContinentID, 0.5, 0.0, 0.5, 1.0);
rmAddAreaInfluenceSegment(bigContinentID, 0.0, 0.5, 0.4, 0.5);
}
else // SE ocean
{
rmSetAreaLocation(bigContinentID, 0.5, 0.75);
rmAddAreaInfluenceSegment(bigContinentID, 0.0, 0.5, 1.0, 0.5);
rmAddAreaInfluenceSegment(bigContinentID, 0.5, 1.0, 0.5, 0.6);
}
rmSetAreaEdgeFilling(bigContinentID, 10);
rmSetAreaObeyWorldCircleConstraint(bigContinentID, false);
rmBuildArea(bigContinentID);
// TRADE ROUTES
int tradeRouteID = rmCreateTradeRoute();
int socketID=rmCreateObjectDef("sockets for Trade Route");
rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
rmAddObjectDefConstraint(socketID, avoidWater8);
rmAddObjectDefToClass(socketID, rmClassID("importantItem"));
rmSetObjectDefAllowOverlap(socketID, true);
rmSetObjectDefMinDistance(socketID, 0.0);
rmSetObjectDefMaxDistance(socketID, 8.0);
rmAddClosestPointConstraint(avoidWater16);
vector tradeRoutePoint = cOriginVector;
if(handedness < 0.5) // Ocean to NE
{
tradeRoutePoint = rmFindClosestPoint(0.3, 0.05, 20.0);
rmAddTradeRouteWaypoint(tradeRouteID, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)));
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.5, 0.5, 6, 6);
tradeRoutePoint = rmFindClosestPoint(0.3, 0.95, 20.0);
rmAddRandomTradeRouteWaypoints(tradeRouteID, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)), 4, 6);
}
else // Ocean to SE
{
tradeRoutePoint = rmFindClosestPoint(0.05, 0.7, 20.0);
rmAddTradeRouteWaypoint(tradeRouteID, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)));
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.5, 0.5, 6, 6);
tradeRoutePoint = rmFindClosestPoint(0.95, 0.7, 20.0);
rmAddRandomTradeRouteWaypoints(tradeRouteID, rmXMetersToFraction(xsVectorGetX(tradeRoutePoint)), rmZMetersToFraction(xsVectorGetZ(tradeRoutePoint)), 4, 6);
}
bool placedTradeRoute = rmBuildTradeRoute(tradeRouteID, "dirt");
if(placedTradeRoute == false)
rmEchoError("Failed to place trade route");
and then give everything contrainsts to place on bigcontinent so things don't place on water?
Mummy zombies on the Nile map is actually more historically accurate than tanks being destroyed by pikemen.
Want denser forests and a
huge Amazon?
[This message has been edited by dietermoreno (edited 05-21-2014 @ 03:22 PM).]