NE Recruitment thread
Go to page 1, 2, 3, 4, 5, 6, 7, 8  Next
 
   Forum Index -> NE Forum
View previous topic :: View next topic  
Author Message
Tilanus Commodor
NE Commander
NE Commander


Joined: 03 Apr 2007
Posts: 5074
Location: Berlin, Germany

PostPosted: Wed Mar 23, 2011 10:38 pm    Post subject: NE Recruitment thread


Hey ho! King

The Napoleonic Era Team is recruiting!

(Last update: January 27th, 2016)

The NE team has always been signing up specialists to improve or expand particular aspects of the mod. Next to the persistent NE core team, these NE assistants mostly perform temporary tasks and form the unit that is directly involved in the making of NE.

While personal modding experience is not required for all positions, it surely is always beneficial to have them. Note that the positions listed below are just logical categories. If you can help out in more than just one category, that is even better! In case you're interested in any of the vacant positions, there are some key requirements for all members:
  • Age of Empires 3 + both expansions / Steam version (should be self-explanatory).
  • A google account (Youtube account = Google account)
  • Skype.
  • Secrecy.
  • Stamina.
  • Maturity. (at least a lil Mr. Green)
For the development of NE 2.2 we are currently looking for...

ART

  1. ... speakers with mature voices to record voice samples for our units in their associated languages. Non-native speakers are also welcome.



    As a voice artist you need to have some artistic skill and need to be willing to improve your records on request, otherwise they might not get included. The only technical requirement is a rustless record device. You can record your voice with the free Audacity software.

    Instructions for voice artists Spoiler:

    To see if your voice and record device is suited, we need a sample of your voice for each language you want to speak. For that purpose we have prepared two texts that we recommend you to speak:

    1. Introduction (always in English)

      "Hello, I am [Your Nick/Name] from [Your Country] and I would like to record sounds for the Napoleonic Era mod. My mother language is [Language] and I can also speak [Further languages]."

    2. Proofs (one for each language)

      "Hello, I am [Your Nick/Name] and the language I am speaking is [Language]."



    Ideally you include all samples in one sound file, but you can also send multiple files packed in a ZIP or RAR archive.

    We're currently looking for speakers of these languages:


    • Croatian
    • Danish
    • Farsi
    • German dialects
      • Bavarian
      • Berlinerisch
      • Hessian
      • Saxonian
      • Swabian

    • Greek
    • Lithuanian
    • Catalan
    • Tamasheq
    • Maghrebi Arabic (Algerian, Libyan, Tunisian)
    • Egyptian Arabic
    • Peninsular Arabic (Saudi, Hejazi, ..)
    • Levantine Arabic (Lebanese, Syrian, ..)
    • Swiss dialects


  2. ... experienced 3D artists for optimizing, modeling, unwrapping and ideally texturing lowpolys of hats, buildings, weapons. To get a good impression of your prior work, we'd like to see some examples.

    • Your computer can ideally display NE with maximum visuals
    • At least intermediate skills with 3dsmax
    • Willingness to continuously test and improve your models
    • Sufficient understanding of polycount and edge flow
    • Rigging/animation skills are a plus, but not required


  3. ... experienced 2D artists for creating either one or more graphics of these types: Avatars, textures, icons, portraits, promotion gfx, concept art, backgrounds. To get a good impression of your prior work, we'd like to see some examples.

    • Your computer can ideally display NE with maximum visuals
    • Advanced skills in Photoshop or similar
    • Willingness to include your graphics yourself by code
    • Capability to match the visual NE style


  4. ... a talented in-game photographer (screenshot artists) with good senses for aesthetics to build stunning scenes in scenario editor to make high quality screenshots of NE visuals. To get a good impression of your prior work, we'd like to see some examples.

    • Your computer must be able to display NE with maximum visuals
    • Sufficient knowledge in photoshop or other image-manipulation software
    • You know how to use the AoE3 scenario editor
    • Professional experience with scene building (i.e. theater, TV, photography) is a plus


  5. ... experienced video artists to create professional video footages of Napoleonic Era. You know how to make a good-looking video including sound. The types of videos we are looking for would be mainly gameplay videos, civilization guides and mod teasers. To get a good impression of your prior work, we'd like to see some examples.

    • Your computer can ideally display NE with maximum visuals
    • Sufficient practical experiences with game recording tools and video editing software
    • You know how to use the AoE3 scenario editor
    • Basic understanding of dramaturgy to make entertaining videos
    • Professional experience with scene building (i.e. theater, TV, photography) and dramaturgy is a plus


  6. ... a creative writer (text artist) to compose various types of texts ranging from news, game-related articles, functional in-game texts such as unit and technology descriptions to texts such as extensive civilization documentations and feature descriptions. You may also need to set up internal working documents or compose postings for social media. To get a short but good impression of your work, we'd like to see some text samples.

    • Excellent English writing skills required
    • Systematic and flexible approach to writing
    • Willingness to do background researches and work with simple code
    • Spanish writing skills are a plus


    DEVELOPMENT

  7. ... literate translators to translate NE into other languages. Be warned though, that you'll need a long breath since there are many lines to be translated. You also should not be afraid to work with IDs and simple code. We're looking for translators for the following languages:


    • Chinese (currently manned)
    • French (co-translator available)
    • German (co-translator available)
    • Italian (co-translator available)
    • Spanish (currently manned)
    • Russian
    (co-translator available)

    IMPORTANT: At the current development stage of NE we are currently not looking for translators

  8. ... constructive researchers with an advanced to very good knowledge of history about the historical period from 1500 to 1815. It is not expected that you only research, but also think about the usefulness of your results for the rest of the team. You will not research blindly, but always in a set context.

    • Elaborate, mod-centered research for civilization content and/or units
      (texture drafts, armament, classification, evaluation of strength, usage)
    • Good documentation skills (compact, comprehensible, illustrative)
    • Good English writing skills required (at least intermediate)
    • Academic level knowledge on particular fields of history (technology, medicine, sociology, etc.) is a plus
    • Capability to filter irrelevant and recognize potential mod content when researching


  9. ... an analytical balancer to track and counter-balance present and imminent imbalances and to suggest general improvements for a better gameplay experience. Needs to have proven online experience and understanding for more than just competitive play. You'll need:

    • At least ESO rank above 2nd Lieutenant
    • Affinity to work with spreadsheets
    • Good mathematical understanding of the game's balancing framework (stats, counters, ..)
    • Sufficient English writing skills to write clear and compact reviews on various features and stand your ground in balance discussions
    • Capability to code or understand code is a plus, but not required


  10. ... careful game designers to design features and civilizations. As a game designer you'll create, discuss and document design decisions. As 'the document guy' you'll need to have a strong affinity to work with documents and communicate.

    • Good soft skills/diplomatic nature
    • Good English writing skills required for extensive documentations and discussions
    • Good formatting skills for spreadsheets, documents and other concept files
    • Systematic working approach; You can preserve and take use of complex document structures
    • Advanced understanding of game design patterns above AoE3
    • Intermediate history knowledge about the NE timeline
    • You know AoE3 inside-out
    • Passion for AoE2 is a plus


  11. ... merciless bug trackers (QA tester) to seek and destroy bugs and glitches! You will test all sorts of objects on potential flaws, report them to the team and look up the game files to figure out the root of a problem and possibly fix them yourself. We beg you not to underestimate this work that goes beyond simple bug reporting.

    • Sharp analytical eye for bugs in games
    • Basic understanding of code
    • Sufficient English writing skills to write clear and precise descriptions of bugs


    MAINTENANCE

  12. ... a witty community manager who knows how to act as a likeable link between fans and developers. You'll take care of Napoleonic Era web profiles, answer and forward user questions, look for new members, help promoting, process and upload NE media, write news postings and other web articles.

    • Reliable availability via Facebook, Gmail and/or Skype
    • Good English writing skills required; Spanish is a plus
    • Basic photoshop skills or willingness to acquire them
    • Intermediate history knowledge about the NE timeline
    • Streaming capabilities are a plus
    • Witty humour Mr. Green


  13. ... a versed web administrator to update and keep our website safe and stable. To get a good impression of your prior work, we'd like to see some examples. Owning a copy of AoE3 is not needed for this sort of work.

    • Reliable availability via Facebook, Gmail and/or Skype; particularly in emergencies
    • Coding skills in PHP, HTML, CSS; more languages always appreciated
    • Good understanding of web technologies and server architecture
    • 'Can-do' attitude
    • Willingness to develop small web features is a plus but not required

  14. ... a loyal assistant producer to support the mod production by planning and coordinating work and act as a substitute for the mod leader. You should be able to prove that you already have acquired working experience as a producer, coordinator, project manager or similar. The requirements are:

    • Reliable availability via Facebook, Gmail and/or Skype
    • Good English writing skills required
    • Discreetness to the point of lying Wink
    • Very good soft skills/diplomatic nature
    • Team leading skills
    • Tech-savvy; practical experience with project management tools


  15. ...people with other useful skills (speculative). You have a skill that is not listed here, but you think could contribute to the mod development in any way? Don't hesitate to tell us! We always have an open ear for new ideas.


______________________________________

CONTACT
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Yomgui
NE Veteran
NE Veteran


Joined: 18 Jan 2010
Posts: 186
Location: Troyes

PostPosted: Thu Mar 24, 2011 12:09 am    Post subject:

Hello, would like to apply. I do not know a lot in modding but I can use Microsoft Word and Firefox.
Back to top
View user's profile Send private message
Tilanus Commodor
NE Commander
NE Commander


Joined: 03 Apr 2007
Posts: 5074
Location: Berlin, Germany

PostPosted: Thu Mar 24, 2011 12:17 am    Post subject:

MS Word! wooooooo! Awesome! You're in! Surprised Surprised Surprised

You can create textures with ASCII too! Cool Cool Cool Cool Cool evil evil evil
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Den9510
Settler
Settler


Joined: 24 Mar 2011
Posts: 5

PostPosted: Thu Mar 24, 2011 5:17 pm    Post subject:

I can create textures too.

PS I like HomeCity modding.
Back to top
View user's profile Send private message
peugeot407
Councillor
Councillor


Joined: 24 Jun 2008
Posts: 1734
Location: Netherlands

PostPosted: Thu Mar 24, 2011 9:19 pm    Post subject:

That did actually make me laugh... Mr. Green Mr. Green


peugeot407
_________________
SAOL wrote: "North America, South America, pish posh they're the same.
Spawn of greater nations."





Back to top
View user's profile Send private message MSN Messenger
Gustav II Adolf
Italian Utili
Italian Utili


Joined: 01 Oct 2010
Posts: 168

PostPosted: Fri Mar 25, 2011 7:32 pm    Post subject:

Can You tell us about this new redesign you're planning?
Back to top
View user's profile Send private message
Tilanus Commodor
NE Commander
NE Commander


Joined: 03 Apr 2007
Posts: 5074
Location: Berlin, Germany

PostPosted: Fri Mar 25, 2011 7:54 pm    Post subject:

Actually you can find out on your own. There are plenty of development threads in this forum everyone can look at, but I'll make an exception here since this interesting and necessary to know for all who might want to take up a job.

The Redesign aims at optimizing all units, NE random maps and NE civs, possibly including new music and trying out new features. Simple as it sounds I guess it is needless to say that this is actually a lot of work. Especially the unit redesigns are a huge challenge after experiencing the new possibilities of 3d objects for AoE3.

With a few exceptions the NE civs won't experience much changes. The homecities for example will mainly be the same as they're now. Existing maps might get improved, but won't be remade completely (unlike the units).
_________________
Napoleonic Era Project Leader


** Support me to support NE **

Test your Age of Empires knowledge in my
Grand Age of Empires quiz! King Green!
Back to top
View user's profile Send private message Send e-mail Visit poster's website
askbutdont
Explorer
Explorer


Joined: 11 Feb 2011
Posts: 3

PostPosted: Mon May 09, 2011 9:18 pm    Post subject:

I can research, tll me what, i will do it
Back to top
View user's profile Send private message
caveman909
NE Assistant
NE Assistant


Joined: 10 Jun 2010
Posts: 479
Location: Switzerland

PostPosted: Wed May 11, 2011 10:12 pm    Post subject:

if u need help in research i could help too Smile

Hop NE Smile

P.S. for the "Berlin German" voice, why dont u use your voice?^^ Dont u come from berlin? Mr. Green
_________________
You must be the change you wish to see in the world.
Back to top
View user's profile Send private message Visit poster's website
Tilanus Commodor
NE Commander
NE Commander


Joined: 03 Apr 2007
Posts: 5074
Location: Berlin, Germany

PostPosted: Wed May 11, 2011 10:57 pm    Post subject:

caveman909 wrote:
if u need help in research i could help too Smile

Hop NE Smile

P.S. for the "Berlin German" voice, why dont u use your voice?^^ Dont u come from berlin? Mr. Green

Indeed, I have been thinking of that. Devil
_________________
Napoleonic Era Project Leader


** Support me to support NE **

Test your Age of Empires knowledge in my
Grand Age of Empires quiz! King Green!
Back to top
View user's profile Send private message Send e-mail Visit poster's website
CasualBeta
Totenkopfhusar
Totenkopfhusar


Joined: 05 Jul 2009
Posts: 501
Location: ON, Canada

PostPosted: Thu May 12, 2011 3:19 am    Post subject:

I could do voice acting, but not sure if my accent will be cool enough.
_________________
So I am Canadian eh ?
Back to top
View user's profile Send private message
Paco the Great
Fusilier
Fusilier


Joined: 06 Feb 2011
Posts: 313

PostPosted: Sat May 14, 2011 8:44 am    Post subject:

I'll research stuff if you want!

And I can mod a tiny bit.
_________________
And that's my last word on the matter.
Back to top
View user's profile Send private message Visit poster's website
caveman909
NE Assistant
NE Assistant


Joined: 10 Jun 2010
Posts: 479
Location: Switzerland

PostPosted: Mon May 16, 2011 6:31 pm    Post subject:

actually if a good "mapper" would explain me some tricks (ex: change scenario map into random or something like that), just some "basis knowledge", i would be ready for making some nice maps Smile
Just wanna be sure that the NE final will come out, Mr. Green
#i speak a little bit schwiizerdütsch, but not well...belongs to u Wink
_________________
You must be the change you wish to see in the world.
Back to top
View user's profile Send private message Visit poster's website
The Dude
NE Assistant
NE Assistant


Joined: 13 Mar 2010
Posts: 1709
Location: Somewhere you don't know

PostPosted: Mon May 16, 2011 9:14 pm    Post subject:

Impossible to change a scenario into to a map, you can do it the other way around, but not scenario into map.

Quote:
i would be ready for making some nice maps

Here give it a shot:
Spoiler:

// GREAT PLAINS
// Nov 06 - YP update
include "mercenaries.xs";
include "ypAsianInclude.xs";
include "ypKOTHInclude.xs";

// Main entry point for random map script
void main(void)
{

// Text
// These status text lines are used to manually animate the map generation progress bar
rmSetStatusText("",0.01);

//Chooses which natives appear on the map
int subCiv0=-1;
int subCiv1=-1;
int subCiv2=-1;
int subCiv3=-1;
int subCiv4=-1;
int subCiv5=-1;

// Choose which variation to use. 1=southeast trade route, 2=northwest trade route
int whichMap=rmRandInt(1,2);
// int whichMap=2;

// Are there extra meeting poles?
int extraPoles=rmRandInt(1,2);
extraPoles=1;
// int extraPoles=2;

if (rmAllocateSubCivs(6) == true)
{
subCiv0=rmGetCivID("Comanche");
rmEchoInfo("subCiv0 is Comanche "+subCiv0);
if (subCiv0 >= 0)
rmSetSubCiv(0, "Comanche");

subCiv1=rmGetCivID("Cheyenne");
rmEchoInfo("subCiv1 is Cheyenne "+subCiv1);
if (subCiv1 >= 0)
rmSetSubCiv(1, "Cheyenne");

subCiv2=rmGetCivID("Cheyenne");
rmEchoInfo("subCiv2 is Cheyenne "+subCiv2);
if (subCiv2 >= 0)
rmSetSubCiv(2, "Cheyenne");

subCiv3=rmGetCivID("Comanche");
rmEchoInfo("subCiv3 is Comanche "+subCiv3);
if (subCiv3 >= 0)
rmSetSubCiv(3, "Comanche");

subCiv4=rmGetCivID("Comanche");
rmEchoInfo("subCiv4 is Comanche "+subCiv4);
if (subCiv4 >= 0)
rmSetSubCiv(4, "Comanche");

subCiv5=rmGetCivID("Cheyenne");
rmEchoInfo("subCiv5 is Cheyenne "+subCiv5);
if (subCiv5 >= 0)
rmSetSubCiv(5, "Cheyenne");
}

// Picks the map size
int playerTiles=11000;
if (cNumberNonGaiaPlayers >4)
playerTiles = 10000;
if (cNumberNonGaiaPlayers >6)
playerTiles = 8500;

int size=2.0*sqrt(cNumberNonGaiaPlayers*playerTiles);
rmEchoInfo("Map size="+size+"m x "+size+"m");
rmSetMapSize(size, size);

// Picks a default water height
rmSetSeaLevel(0.0);

// Picks default terrain and water
rmSetMapElevationParameters(cElevTurbulence, 0.02, 7, 0.5, 8.0);
rmSetBaseTerrainMix("great plains drygrass");
rmTerrainInitialize("yukon\ground1_yuk", 5);
rmSetLightingSet("great plains");
rmSetMapType("greatPlains");
rmSetMapType("land");
rmSetWorldCircleConstraint(true);
rmSetMapType("grass");

chooseMercs();

// Define some classes. These are used later for constraints.
int classPlayer=rmDefineClass("player");
rmDefineClass("classPatch");
rmDefineClass("starting settlement");
rmDefineClass("startingUnit");
rmDefineClass("classForest");
rmDefineClass("importantItem");
rmDefineClass("secrets");
rmDefineClass("natives");
rmDefineClass("classHillArea");
rmDefineClass("socketClass");
rmDefineClass("nuggets");

// -------------Define constraints
// These are used to have objects and areas avoid each other

// Map edge constraints
int playerEdgeConstraint=rmCreateBoxConstraint("player edge of map", rmXTilesToFraction(6), rmZTilesToFraction(6), 1.0-rmXTilesToFraction(6), 1.0-rmZTilesToFraction(6), 0.01);

// Player constraints
int playerConstraint=rmCreateClassDistanceConstraint("player vs. player", classPlayer, 10.0);
int smallMapPlayerConstraint=rmCreateClassDistanceConstraint("stay away from players a lot", classPlayer, 70.0);
int nuggetPlayerConstraint=rmCreateClassDistanceConstraint("nuggets stay away from players a lot", classPlayer, 40.0);

// Resource avoidance
int forestConstraint=rmCreateClassDistanceConstraint("forest vs. forest", rmClassID("classForest"), 25.0);
int coinForestConstraint=rmCreateClassDistanceConstraint("coin vs. forest", rmClassID("classForest"), 15.0);
int avoidBison=rmCreateTypeDistanceConstraint("bison avoids food", "bison", 40.0);
int avoidPronghorn=rmCreateTypeDistanceConstraint("pronghorn avoids food", "pronghorn", 35.0);
int avoidCoin=rmCreateTypeDistanceConstraint("coin avoids coin", "gold", 35.0);
int avoidStartingCoin=rmCreateTypeDistanceConstraint("starting coin avoids coin", "gold", 22.0);
int avoidNugget=rmCreateTypeDistanceConstraint("nugget avoid nugget", "AbstractNugget", 40.0);
int avoidNuggetSmall=rmCreateTypeDistanceConstraint("avoid nuggets by a little", "AbstractNugget", 10.0);

int avoidFastCoin=-1;
if (cNumberNonGaiaPlayers >6)
{
avoidFastCoin=rmCreateTypeDistanceConstraint("fast coin avoids coin", "gold", rmXFractionToMeters(0.14));
}
else if (cNumberNonGaiaPlayers >4)
{
avoidFastCoin=rmCreateTypeDistanceConstraint("fast coin avoids coin", "gold", rmXFractionToMeters(0.16));
}
else
{
avoidFastCoin=rmCreateTypeDistanceConstraint("fast coin avoids coin", "gold", rmXFractionToMeters(0.18));
}

// Avoid impassable land
int avoidImpassableLand=rmCreateTerrainDistanceConstraint("avoid impassable land", "Land", false, 6.0);
int shortAvoidImpassableLand=rmCreateTerrainDistanceConstraint("short avoid impassable land", "Land", false, 2.0);
int patchConstraint=rmCreateClassDistanceConstraint("patch vs. patch", rmClassID("classPatch"), 5.0);

// Unit avoidance - for things that aren't in the starting resources.
int avoidStartingUnits=rmCreateClassDistanceConstraint("objects avoid starting units", rmClassID("startingUnit"), 30.0);
int avoidStartingUnitsSmall=rmCreateClassDistanceConstraint("objects avoid starting units small", rmClassID("startingUnit"), 5.0);

// Decoration avoidance
int avoidAll=rmCreateTypeDistanceConstraint("avoid all", "all", 6.0);

// VP avoidance
int avoidTradeRoute = rmCreateTradeRouteDistanceConstraint("trade route", 6.0);
int avoidTradeRouteSmall = rmCreateTradeRouteDistanceConstraint("trade route small", 4.0);
// int avoidTradeRoutePlayer = rmCreateTradeRouteDistanceConstraint("trade route player", 30.0);
int avoidImportantItem=rmCreateClassDistanceConstraint("important stuff avoids each other", rmClassID("importantItem"), 15.0);

int avoidSocket=rmCreateClassDistanceConstraint("socket avoidance", rmClassID("socketClass"), 8.0);
int avoidSocketMore=rmCreateClassDistanceConstraint("bigger socket avoidance", rmClassID("socketClass"), 15.0);

// Constraint to avoid water.
int avoidWater4 = rmCreateTerrainDistanceConstraint("avoid water", "Land", false, 4.0);
int avoidWater20 = rmCreateTerrainDistanceConstraint("avoid water medium", "Land", false, 20.0);
int avoidWater40 = rmCreateTerrainDistanceConstraint("avoid water long", "Land", false, 40.0);

// Avoid the hilly areas.
int avoidHills = rmCreateClassDistanceConstraint("avoid Hills", rmClassID("classHillArea"), 5.0);

// natives avoid natives
int avoidNatives = rmCreateClassDistanceConstraint("avoid Natives", rmClassID("natives"), 40.0);
int avoidNativesNuggets = rmCreateClassDistanceConstraint("nuggets avoid Natives", rmClassID("natives"), 20.0);

int circleConstraint=rmCreatePieConstraint("circle Constraint", 0.5, 0.5, 0, rmZFractionToMeters(0.47), rmDegreesToRadians(0), rmDegreesToRadians(360));

// Text
rmSetStatusText("",0.10);

// TRADE ROUTE PLACEMENT
int tradeRouteID = rmCreateTradeRoute();

int socketID=rmCreateObjectDef("sockets to dock Trade Posts");
rmSetObjectDefTradeRouteID(socketID, tradeRouteID);

rmAddObjectDefItem(socketID, "SocketTradeRoute", 1, 0.0);
rmSetObjectDefAllowOverlap(socketID, true);
rmAddObjectDefToClass(socketID, rmClassID("socketClass"));
rmSetObjectDefMinDistance(socketID, 0.0);
rmSetObjectDefMaxDistance(socketID, 8.0);

if ( whichMap == 1 )
{
rmAddTradeRouteWaypoint(tradeRouteID, 0.0, 0.6);
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.2, 0.25, 10, 4);
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.5, 0.2, 10, 4);
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.8, 0.25, 10, 4);
}
else
{
rmAddTradeRouteWaypoint(tradeRouteID, 0.0, 0.4);
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.2, 0.75, 10, 4);
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.5, 0.8, 10, 4);
rmAddRandomTradeRouteWaypoints(tradeRouteID, 0.8, 0.75, 10, 4);
}

rmAddRandomTradeRouteWaypoints(tradeRouteID, 1.0, 0.5, 20, 4);

bool placedTradeRoute = rmBuildTradeRoute(tradeRouteID, "dirt");
if(placedTradeRoute == false)
rmEchoError("Failed to place trade route");

// add the sockets along the trade route.
vector socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.15);
rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);

socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.5);
rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);

socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.85);
rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);

if ( extraPoles > 1 )
{
socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.35);
rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);

socketLoc = rmGetTradeRouteWayPoint(tradeRouteID, 0.65);
rmPlaceObjectDefAtPoint(socketID, 0, socketLoc);
}

// DEFINE AREAS
// Set up player starting locations.
if ( whichMap == 1 )
{
rmSetPlacementSection(0.7, 0.3); // 0.5
}
else
{
rmSetPlacementSection(0.2, 0.8); // 0.5
}
rmSetTeamSpacingModifier(0.7);
if ( cNumberNonGaiaPlayers < 3 )
{
rmPlacePlayersCircular(0.3, 0.3, 0);
}
else
{
rmPlacePlayersCircular(0.38, 0.38, 0);
}


/*
// Place the first team.
rmSetPlacementTeam(0);
if ( whichMap == 1 ) // se trade route
{
rmSetPlayerPlacementArea(0.7, 0.5, 0.9, 0.8);
}
else
{
rmSetPlayerPlacementArea(0.7, 0.2, 0.9, 0.5);
}
rmPlacePlayersCircular(0.3, 0.4, rmDegreesToRadians(5.0));

// Now place Second Team
rmSetPlacementTeam(1);
if ( whichMap == 1 ) // nw trade route
{
rmSetPlayerPlacementArea(0.1, 0.5, 0.3, 0.8);
}
else
{
rmSetPlayerPlacementArea(0.1, 0.2, 0.3, 0.5);
}
rmPlacePlayersCircular(0.3, 0.4, rmDegreesToRadians(5.0));
*/

// rmPlacePlayersCircular(0.45, 0.45, rmDegreesToRadians(5.0));

// Set up player areas.
float playerFraction=rmAreaTilesToFraction(100);
for(i=1; <cNumberPlayers> Secrets -> Nuggets -> Small Ponds (whee)


//STARTING UNITS and RESOURCES DEFS
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 7.0);
rmSetObjectDefMaxDistance(startingUnits, 12.0);

int startingTCID = rmCreateObjectDef("startingTC");
if ( rmGetNomadStart())
{
rmAddObjectDefItem(startingTCID, "CoveredWagon", 1, 0.0);
}
else
{
rmAddObjectDefItem(startingTCID, "TownCenter", 1, 0.0);
}
rmAddObjectDefToClass(startingTCID, rmClassID("startingUnit"));
rmSetObjectDefMinDistance(startingTCID, 0.0);
rmSetObjectDefMaxDistance(startingTCID, 9.0);
rmAddObjectDefConstraint(startingTCID, avoidTradeRouteSmall);

// rmAddObjectDefConstraint(startingTCID, avoidTradeRoute);

int StartAreaTreeID=rmCreateObjectDef("starting trees");
rmAddObjectDefItem(StartAreaTreeID, "TreeGreatPlains", 1, 0.0);
rmSetObjectDefMinDistance(StartAreaTreeID, 12.0);
rmSetObjectDefMaxDistance(StartAreaTreeID, 18.0);
rmAddObjectDefConstraint(StartAreaTreeID, avoidStartingUnitsSmall);

int StartBisonID=rmCreateObjectDef("starting bison");
rmAddObjectDefItem(StartBisonID, "Bison", 4, 4.0);
rmSetObjectDefMinDistance(StartBisonID, 10.0);
rmSetObjectDefMaxDistance(StartBisonID, 12.0);
rmSetObjectDefCreateHerd(StartBisonID, true);
rmAddObjectDefConstraint(StartBisonID, avoidStartingUnitsSmall);

int playerNuggetID=rmCreateObjectDef("player nugget");
rmAddObjectDefItem(playerNuggetID, "nugget", 1, 0.0);
rmAddObjectDefToClass(playerNuggetID, rmClassID("nuggets"));
rmAddObjectDefToClass(playerNuggetID, rmClassID("startingUnit"));
rmSetObjectDefMinDistance(playerNuggetID, 28.0);
rmSetObjectDefMaxDistance(playerNuggetID, 35.0);
rmAddObjectDefConstraint(playerNuggetID, avoidNugget);
rmAddObjectDefConstraint(playerNuggetID, avoidNativesNuggets);
rmAddObjectDefConstraint(playerNuggetID, avoidTradeRouteSmall);
rmAddObjectDefConstraint(playerNuggetID, circleConstraint);
// rmAddObjectDefConstraint(playerNuggetID, avoidImportantItem);

rmSetStatusText("",0.40);

int silverType = -1;
int playerGoldID = -1;

for(i=1; <cNumberPlayers)
{
rmPlaceObjectDefAtLoc(startingTCID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));

if(ypIsAsian(i) && rmGetNomadStart() == false)
rmPlaceObjectDefAtLoc(ypMonasteryBuilder(i, 1), i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));

rmPlaceObjectDefAtLoc(startingUnits, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
// vector closestPoint=rmGetUnitPosition(rmGetUnitPlacedOfPlayer(startingUnits, i));
// rmSetHomeCityGatherPoint(i, closestPoint);

// Everyone gets two ore ObjectDefs, one pretty close, the other a little further away.
silverType = rmRandInt(1,10);
playerGoldID = rmCreateObjectDef("player silver closer "+i);
rmAddObjectDefItem(playerGoldID, "mine", 1, 0.0);
// rmAddObjectDefToClass(playerGoldID, rmClassID("importantItem"));
rmAddObjectDefConstraint(playerGoldID, avoidTradeRoute);
rmAddObjectDefConstraint(playerGoldID, avoidStartingCoin);
rmAddObjectDefConstraint(playerGoldID, avoidStartingUnitsSmall);
rmSetObjectDefMinDistance(playerGoldID, 15.0);
rmSetObjectDefMaxDistance(playerGoldID, 20.0);

// Place two gold mines
rmPlaceObjectDefAtLoc(playerGoldID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
rmPlaceObjectDefAtLoc(playerGoldID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));

// Placing starting trees...
rmPlaceObjectDefAtLoc(StartAreaTreeID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
rmPlaceObjectDefAtLoc(StartAreaTreeID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
rmPlaceObjectDefAtLoc(StartAreaTreeID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
rmPlaceObjectDefAtLoc(StartAreaTreeID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
rmPlaceObjectDefAtLoc(StartAreaTreeID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
rmPlaceObjectDefAtLoc(StartAreaTreeID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));

rmPlaceObjectDefAtLoc(StartBisonID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));

rmSetNuggetDifficulty(1, 1);
rmPlaceObjectDefAtLoc(playerNuggetID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
rmPlaceObjectDefAtLoc(playerNuggetID, 0, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
}

// NATIVE AMERICANS
float NativeVillageLoc = rmRandFloat(0,1); //

if (subCiv0 == rmGetCivID("Comanche"))
{
int comancheVillageAID = -1;
int comancheVillageType = rmRandInt(1,5);
comancheVillageAID = rmCreateGrouping("comanche village A", "native comanche village "+comancheVillageType);
rmSetGroupingMinDistance(comancheVillageAID, 0.0);
rmSetGroupingMaxDistance(comancheVillageAID, rmXFractionToMeters(0.1));
rmAddGroupingConstraint(comancheVillageAID, avoidImpassableLand);
rmAddGroupingToClass(comancheVillageAID, rmClassID("importantItem"));
rmAddGroupingToClass(comancheVillageAID, rmClassID("natives"));
rmAddGroupingConstraint(comancheVillageAID, avoidNatives);
rmAddGroupingConstraint(comancheVillageAID, avoidTradeRoute);
rmAddGroupingConstraint(comancheVillageAID, avoidStartingUnits);
if ( whichMap == 1 )
{
rmPlaceGroupingAtLoc(comancheVillageAID, 0, 0.5, 0.5);
}
else
{
rmPlaceGroupingAtLoc(comancheVillageAID, 0, 0.35, 0.15);
}
}

if (subCiv1 == rmGetCivID("Cheyenne"))
{
int cheyenneVillageAID = -1;
int cheyenneVillageType = rmRandInt(1,5);
cheyenneVillageAID = rmCreateGrouping("cheyenne village A", "native cheyenne village "+cheyenneVillageType);
rmSetGroupingMinDistance(cheyenneVillageAID, 0.0);
rmSetGroupingMaxDistance(cheyenneVillageAID, rmXFractionToMeters(0.1));
rmAddGroupingConstraint(cheyenneVillageAID, avoidImpassableLand);
rmAddGroupingToClass(cheyenneVillageAID, rmClassID("importantItem"));
rmAddGroupingToClass(cheyenneVillageAID, rmClassID("natives"));
rmAddGroupingConstraint(cheyenneVillageAID, avoidNatives);
rmAddGroupingConstraint(cheyenneVillageAID, avoidTradeRoute);
rmAddGroupingConstraint(cheyenneVillageAID, avoidStartingUnits);
if ( whichMap == 1 )
{
rmPlaceGroupingAtLoc(cheyenneVillageAID, 0, 0.7, 0.6);
}
else
{
rmPlaceGroupingAtLoc(cheyenneVillageAID, 0, 0.65, 0.15);
}
}

// Text
rmSetStatusText("",0.50);
if(subCiv2 == rmGetCivID("Cheyenne"))
{
int cheyenneVillageID = -1;
cheyenneVillageType = rmRandInt(1,5);
cheyenneVillageID = rmCreateGrouping("cheyenne village", "native cheyenne village "+cheyenneVillageType);
rmSetGroupingMinDistance(cheyenneVillageID, 0.0);
rmSetGroupingMaxDistance(cheyenneVillageID, rmXFractionToMeters(0.1));
rmAddGroupingConstraint(cheyenneVillageID, avoidImpassableLand);
rmAddGroupingToClass(cheyenneVillageID, rmClassID("importantItem"));
rmAddGroupingToClass(cheyenneVillageID, rmClassID("natives"));
rmAddGroupingConstraint(cheyenneVillageID, avoidNatives);
rmAddGroupingConstraint(cheyenneVillageID, avoidTradeRoute);
rmAddGroupingConstraint(cheyenneVillageID, avoidStartingUnits);
if ( extraPoles == 1 )
{
if ( whichMap == 1 )
{
rmPlaceGroupingAtLoc(cheyenneVillageID, 0, 0.2, 0.8);
}
else
{
rmPlaceGroupingAtLoc(cheyenneVillageID, 0, 0.15, 0.85);
}
}
}

if(subCiv3 == rmGetCivID("Comanche"))
{
int comancheVillageBID = -1;
comancheVillageType = rmRandInt(1,5);
comancheVillageBID = rmCreateGrouping("comanche village B", "native comanche village "+comancheVillageType);
rmSetGroupingMinDistance(comancheVillageBID, 0.0);
rmSetGroupingMaxDistance(comancheVillageBID, rmXFractionToMeters(0.1));
rmAddGroupingConstraint(comancheVillageBID, avoidImpassableLand);
rmAddGroupingToClass(comancheVillageBID, rmClassID("importantItem"));
rmAddGroupingToClass(comancheVillageBID, rmClassID("natives"));
rmAddGroupingConstraint(comancheVillageBID, avoidNatives);
rmAddGroupingConstraint(comancheVillageBID, avoidTradeRoute);
rmAddGroupingConstraint(comancheVillageBID, avoidStartingUnits);
if ( whichMap == 1 )
{
rmPlaceGroupingAtLoc(comancheVillageBID, 0, 0.3, 0.6);
}
else
{
rmPlaceGroupingAtLoc(comancheVillageBID, 0, 0.35, 0.45);
}
}

if(subCiv4 == rmGetCivID("Comanche"))
{
int comancheVillageID = -1;
comancheVillageType = rmRandInt(1,5);
comancheVillageID = rmCreateGrouping("comanche village", "native comanche village "+comancheVillageType);
rmSetGroupingMinDistance(comancheVillageID, 0.0);
rmSetGroupingMaxDistance(comancheVillageID, rmXFractionToMeters(0.1));
rmAddGroupingConstraint(comancheVillageID, avoidImpassableLand);
rmAddGroupingToClass(comancheVillageID, rmClassID("importantItem"));
rmAddGroupingToClass(comancheVillageID, rmClassID("natives"));
rmAddGroupingConstraint(comancheVillageID, avoidNatives);
rmAddGroupingConstraint(comancheVillageID, avoidTradeRoute);
rmAddGroupingConstraint(comancheVillageID, avoidStartingUnits);
if ( extraPoles == 1 )
{
if ( whichMap == 1 )
{
rmPlaceGroupingAtLoc(comancheVillageID, 0, 0.8, 0.8);
}
else
{
rmPlaceGroupingAtLoc(comancheVillageID, 0, 0.85, 0.85);
}
}

}

if (subCiv5 == rmGetCivID("Cheyenne"))
{
int cheyenneVillageBID = -1;
cheyenneVillageType = rmRandInt(1,5);
cheyenneVillageBID = rmCreateGrouping("cheyenne village B", "native cheyenne village "+cheyenneVillageType);
rmSetGroupingMinDistance(cheyenneVillageBID, 0.0);
rmSetGroupingMaxDistance(cheyenneVillageBID, rmXFractionToMeters(0.1));
rmAddGroupingConstraint(cheyenneVillageBID, avoidImpassableLand);
rmAddGroupingToClass(cheyenneVillageBID, rmClassID("importantItem"));
rmAddGroupingToClass(cheyenneVillageBID, rmClassID("natives"));
rmAddGroupingConstraint(cheyenneVillageBID, avoidNatives);
rmAddGroupingConstraint(cheyenneVillageBID, avoidTradeRoute);
rmAddGroupingConstraint(cheyenneVillageBID, avoidStartingUnits);

if ( whichMap == 1 )
{
rmPlaceGroupingAtLoc(cheyenneVillageBID, 0, 0.5, 0.9);
}
else
{
rmPlaceGroupingAtLoc(cheyenneVillageBID, 0, 0.65, 0.45);
}
}

// Text
rmSetStatusText("",0.60);

// Define and place Nuggets

int nuggetID= rmCreateObjectDef("nugget");
rmAddObjectDefItem(nuggetID, "Nugget", 1, 0.0);
rmSetObjectDefMinDistance(nuggetID, 0.0);
rmSetObjectDefMaxDistance(nuggetID, rmXFractionToMeters(0.5));
rmAddObjectDefConstraint(nuggetID, shortAvoidImpassableLand);
rmAddObjectDefConstraint(nuggetID, avoidNugget);
rmAddObjectDefConstraint(nuggetID, nuggetPlayerConstraint);
rmAddObjectDefConstraint(nuggetID, playerConstraint);
rmAddObjectDefConstraint(nuggetID, avoidTradeRoute);
rmAddObjectDefConstraint(nuggetID, avoidSocketMore);
rmAddObjectDefConstraint(nuggetID, avoidNativesNuggets);
rmAddObjectDefConstraint(nuggetID, circleConstraint);
rmAddObjectDefConstraint(nuggetID, avoidAll);
rmSetNuggetDifficulty(1, 3);
rmPlaceObjectDefAtLoc(nuggetID, 0, 0.5, 0.5, cNumberNonGaiaPlayers*4);

// Text
rmSetStatusText("",0.70);

// Ponds o' Fun
int pondClass=rmDefineClass("pond");
int pondConstraint=rmCreateClassDistanceConstraint("ponds avoid ponds", rmClassID("pond"), 60.0);

// int numPonds=rmRandInt(1,4);
int numPonds=4;
for(i=0; <numPonds)
{
int smallPondID=rmCreateArea("small pond"+i);
rmSetAreaSize(smallPondID, rmAreaTilesToFraction(170), rmAreaTilesToFraction(200));
rmSetAreaWaterType(smallPondID, "great plains pond");
rmSetAreaBaseHeight(smallPondID, 4);
rmSetAreaMinBlobs(smallPondID, 1);
rmSetAreaMaxBlobs(smallPondID, 5);
rmSetAreaMinBlobDistance(smallPondID, 5.0);
rmSetAreaMaxBlobDistance(smallPondID, 70.0);
rmAddAreaToClass(smallPondID, pondClass);
rmSetAreaCoherence(smallPondID, 0.5);
rmSetAreaSmoothDistance(smallPondID, 5);
rmAddAreaConstraint(smallPondID, pondConstraint);
rmAddAreaConstraint(smallPondID, playerConstraint);
rmAddAreaConstraint(smallPondID, avoidTradeRoute);
rmAddAreaConstraint(smallPondID, avoidSocket);
rmAddAreaConstraint(smallPondID, avoidImportantItem);
rmAddAreaConstraint(smallPondID, avoidNW);
rmAddAreaConstraint(smallPondID, avoidSE);
rmAddAreaConstraint(smallPondID, avoidStartingUnits);
rmAddAreaConstraint(smallPondID, avoidNuggetSmall);
rmSetAreaWarnFailure(smallPondID, false);
rmBuildArea(smallPondID);
}

// Build grassy areas everywhere. Whee!
numTries=6*cNumberNonGaiaPlayers;
failCount=0;
for (i=0; <numTries)
{
int grassyArea=rmCreateArea("grassyArea"+i);
rmSetAreaWarnFailure(grassyArea, false);
rmSetAreaSize(grassyArea, rmAreaTilesToFraction(1000), rmAreaTilesToFraction(1000));
rmSetAreaForestType(grassyArea, "Great Plains grass");
rmSetAreaForestDensity(grassyArea, 0.3);
rmSetAreaForestClumpiness(grassyArea, 0.1);
rmAddAreaConstraint(grassyArea, avoidHills);
rmAddAreaConstraint(grassyArea, avoidTradeRoute);
rmAddAreaConstraint(grassyArea, avoidSocket);
rmAddAreaConstraint(grassyArea, avoidNatives);
rmAddAreaConstraint(grassyArea, avoidStartingUnits);
rmAddAreaConstraint(grassyArea, avoidNuggetSmall);
if(rmBuildArea(grassyArea)==false)
{
// Stop trying once we fail 5 times in a row.
failCount++;
if(failCount==5)
break;
}
else
failCount=0;
}

// Place resources
// FAST COIN - three extra per player beyond starting resources.
int silverID = -1;
int silverCount = (cNumberNonGaiaPlayers*3);
rmEchoInfo("silver count = "+silverCount);

for(i=0; < silverCount)
{
silverType = rmRandInt(1,10);
silverID = rmCreateObjectDef("silver "+i);
rmAddObjectDefItem(silverID, "mine", 1, 0.0);
rmSetObjectDefMinDistance(silverID, 0.0);
rmSetObjectDefMaxDistance(silverID, rmXFractionToMeters(0.5));
rmAddObjectDefConstraint(silverID, avoidFastCoin);
rmAddObjectDefConstraint(silverID, avoidAll);
rmAddObjectDefConstraint(silverID, avoidImpassableLand);
rmAddObjectDefConstraint(silverID, avoidTradeRoute);
rmAddObjectDefConstraint(silverID, avoidSocket);
rmAddObjectDefConstraint(silverID, coinForestConstraint);
rmAddObjectDefConstraint(silverID, avoidStartingUnits);
rmAddObjectDefConstraint(silverID, avoidNuggetSmall);
int result = rmPlaceObjectDefAtLoc(silverID, 0, 0.5, 0.5);
if(result == 0)
break;
}

// Text
rmSetStatusText("",0.80);

// bison
int bisonID=rmCreateObjectDef("bison herd");
rmAddObjectDefItem(bisonID, "bison", rmRandInt(12,16), 12.0);
rmSetObjectDefMinDistance(bisonID, 0.0);
rmSetObjectDefMaxDistance(bisonID, rmXFractionToMeters(0.5));
rmAddObjectDefConstraint(bisonID, avoidBison);
rmAddObjectDefConstraint(bisonID, avoidAll);
rmAddObjectDefConstraint(bisonID, avoidImpassableLand);
rmAddObjectDefConstraint(bisonID, avoidTradeRoute);
rmAddObjectDefConstraint(bisonID, avoidSocket);
rmAddObjectDefConstraint(bisonID, avoidStartingUnits);
rmAddObjectDefConstraint(bisonID, avoidNuggetSmall);
rmSetObjectDefCreateHerd(bisonID, true);
rmPlaceObjectDefAtLoc(bisonID, 0, 0.5, 0.5, cNumberNonGaiaPlayers*3);

// pronghorn
int pronghornID=rmCreateObjectDef("pronghorn herd");
rmAddObjectDefItem(pronghornID, "pronghorn", rmRandInt(6,9), 10.0);
rmSetObjectDefMinDistance(pronghornID, 0.0);
rmSetObjectDefMaxDistance(pronghornID, rmXFractionToMeters(0.5));
rmAddObjectDefConstraint(pronghornID, avoidBison);
rmAddObjectDefConstraint(pronghornID, avoidPronghorn);
rmAddObjectDefConstraint(pronghornID, avoidAll);
rmAddObjectDefConstraint(pronghornID, avoidImpassableLand);
rmAddObjectDefConstraint(pronghornID, avoidTradeRoute);
rmAddObjectDefConstraint(pronghornID, avoidSocket);
rmAddObjectDefConstraint(pronghornID, avoidStartingUnits);
rmAddObjectDefConstraint(pronghornID, avoidNuggetSmall);
rmSetObjectDefCreateHerd(pronghornID, true);
rmPlaceObjectDefAtLoc(pronghornID, 0, 0.5, 0.5, cNumberNonGaiaPlayers*2);

// Text
rmSetStatusText("",0.90);

int seConstraint = rmCreateAreaConstraint("se", hillSoutheastID);
int heightConstraint = rmCreateMaxHeightConstraint("tree height", 6.0);
int lowForestClass = rmDefineClass("low forest");
int lowForestConstraint = rmCreateClassDistanceConstraint("low forest", lowForestClass, 4.0);

// RANDOM TREES
int count = 0;
int maxCount = 20 * cNumberNonGaiaPlayers;
int maxFailCount = 10 * cNumberNonGaiaPlayers;
failCount = 0;
for(i=1; <10)
{
int treeArea = rmCreateArea("se tree"+i);
rmSetAreaSize(treeArea, 0.001, 0.003);
rmSetAreaForestType(treeArea, "great plains forest");
rmSetAreaForestDensity(treeArea, 0.8);
rmSetAreaForestClumpiness(treeArea, 0.1);
rmAddAreaConstraint(treeArea, seConstraint);
rmAddAreaConstraint(treeArea, lowForestConstraint);
rmAddAreaConstraint(treeArea, heightConstraint);
rmAddAreaConstraint(treeArea, avoidImpassableLand);
rmAddAreaConstraint(treeArea, avoidTradeRoute);
rmAddAreaConstraint(treeArea, avoidSocket);
rmAddAreaConstraint(treeArea, avoidStartingUnits);
rmAddAreaConstraint(treeArea, avoidAll);
rmAddAreaToClass(treeArea, lowForestClass);
rmAddAreaConstraint(treeArea, avoidNuggetSmall);
rmSetAreaWarnFailure(treeArea, false);
bool ok = rmBuildArea(treeArea);
if(ok)
{
count++;
if(count > maxCount)
break;
}
else
{
failCount++;
if(failCount > maxFailCount)
break;
}
}

int nwConstraint = rmCreateAreaConstraint("nw", hillNorthwestID);
int maxAreas = 5 * cNumberNonGaiaPlayers;
int maxFails = 5 * cNumberNonGaiaPlayers;
count = 0;
failCount = 0;
for(i=1; <10)
{
treeArea = rmCreateArea("nw tree"+i);
rmSetAreaSize(treeArea, 0.001, 0.003);
rmSetAreaForestType(treeArea, "great plains forest");
rmSetAreaForestDensity(treeArea, 0.8);
rmSetAreaForestClumpiness(treeArea, 0.1);
rmAddAreaConstraint(treeArea, nwConstraint);
rmAddAreaConstraint(treeArea, lowForestConstraint);
rmAddAreaConstraint(treeArea, heightConstraint);
rmAddAreaConstraint(treeArea, avoidImpassableLand);
rmAddAreaConstraint(treeArea, avoidTradeRoute);
rmAddAreaConstraint(treeArea, avoidSocket);
rmAddAreaConstraint(treeArea, avoidStartingUnits);
rmAddAreaConstraint(treeArea, avoidAll);
rmAddAreaConstraint(treeArea, avoidNuggetSmall);
rmAddAreaToClass(treeArea, lowForestClass);
rmSetAreaWarnFailure(treeArea, false);
ok = rmBuildArea(treeArea);
if(ok)
{
count++;
if(count > maxCount)
break;
}
else
{
failCount++;
if(failCount > maxFailCount)
break;
}
}

// Mini-forests out on the plains (mostly)
int forestTreeID = 0;
numTries=5*cNumberNonGaiaPlayers;
failCount=0;
for (i=0; <numTries)
{
int forest=rmCreateArea("center forest "+i);
rmSetAreaWarnFailure(forest, false);
rmSetAreaSize(forest, rmAreaTilesToFraction(100), rmAreaTilesToFraction(100));
rmSetAreaForestType(forest, "great plains forest");
rmSetAreaForestDensity(forest, 0.9);
rmSetAreaForestClumpiness(forest, 0.8);
rmSetAreaForestUnderbrush(forest, 0.0);
rmSetAreaCoherence(forest, 0.5);
// rmSetAreaSmoothDistance(forest, 10);
rmAddAreaToClass(forest, rmClassID("classForest"));
// rmAddAreaConstraint(forest, lowForestConstraint);
rmAddAreaConstraint(forest, forestConstraint);
rmAddAreaConstraint(forest, playerConstraint);
rmAddAreaConstraint(forest, avoidImportantItem);
rmAddAreaConstraint(forest, avoidImpassableLand);
rmAddAreaConstraint(forest, avoidTradeRoute);
rmAddAreaConstraint(forest, avoidSocket);
rmAddAreaConstraint(forest, avoidHills);
rmAddAreaConstraint(forest, avoidNuggetSmall);
// rmAddAreaConstraint(forest, avoidFastCoin);
rmAddAreaConstraint(forest, avoidStartingUnits);
if(rmBuildArea(forest)==false)
{
// Stop trying once we fail 10 times in a row.
failCount++;
if(failCount==10)
break;
}
else
failCount=0;
}

// check for KOTH game mode
if(rmGetIsKOTH()) {

int randLoc = rmRandInt(1,3);
float xLoc = 0.5;
float yLoc = 0.5;
float walk = 0.075;

ypKingsHillPlacer(xLoc, yLoc, walk, 0);
rmEchoInfo("XLOC = "+xLoc);
rmEchoInfo("XLOC = "+yLoc);
}

// 50% chance of buffalo carcasses - either one or two if they're there.
int areThereBuffalo=rmRandInt(1, 2);
int howManyBuffalo=rmRandInt(1, 2);
if ( areThereBuffalo == 1 )
{
int bisonCarcass=rmCreateGrouping("Bison Carcass", "gp_carcass_bison");
rmSetGroupingMinDistance(bisonCarcass, 0.0);
rmSetGroupingMaxDistance(bisonCarcass, rmXFractionToMeters(0.5));
rmAddGroupingConstraint(bisonCarcass, avoidNW);
rmAddGroupingConstraint(bisonCarcass, avoidSE);
rmAddGroupingConstraint(bisonCarcass, avoidImpassableLand);
rmAddGroupingConstraint(bisonCarcass, playerConstraint);
rmAddGroupingConstraint(bisonCarcass, avoidTradeRoute);
rmAddGroupingConstraint(bisonCarcass, avoidSocket);
rmAddGroupingConstraint(bisonCarcass, avoidStartingUnits);
rmAddGroupingConstraint(bisonCarcass, avoidAll);
rmAddGroupingConstraint(bisonCarcass, avoidNuggetSmall);
rmPlaceGroupingAtLoc(bisonCarcass, 0, 0.5, 0.5, howManyBuffalo);
}

// Perching Vultures - add a couple somewhere.
int vultureID=rmCreateObjectDef("perching vultures");
rmAddObjectDefItem(vultureID, "PropVulturePerching", 1, 0.0);
rmSetObjectDefMinDistance(vultureID, 0.0);
rmSetObjectDefMaxDistance(vultureID, rmXFractionToMeters(0.5));
rmAddObjectDefConstraint(vultureID, avoidNW);
rmAddObjectDefConstraint(vultureID, avoidSE);
rmAddObjectDefConstraint(vultureID, avoidBison);
rmAddObjectDefConstraint(vultureID, avoidAll);
rmAddObjectDefConstraint(vultureID, avoidNuggetSmall);
rmAddObjectDefConstraint(vultureID, avoidImpassableLand);
rmAddObjectDefConstraint(vultureID, avoidTradeRoute);
rmAddObjectDefConstraint(vultureID, avoidSocket);
rmAddObjectDefConstraint(vultureID, avoidStartingUnits);
rmAddObjectDefConstraint(vultureID, circleConstraint);
rmAddObjectDefConstraint(vultureID, playerConstraint);
rmPlaceObjectDefAtLoc(vultureID, 0, 0.5, 0.5, 2);


int grassPatchGroupType=-1;
int grassPatchGroup=-1;
// Two grass patches per player.

for(i=1; <2*cNumberNonGaiaPlayers)
{
grassPatchGroupType=rmRandInt(1, 7);
grassPatchGroup=rmCreateGrouping("Grass Patch Group"+i, "gp_grasspatch0"+grassPatchGroupType);
rmSetGroupingMinDistance(grassPatchGroup, 0.0);
rmSetGroupingMaxDistance(grassPatchGroup, rmXFractionToMeters(0.5));
rmAddGroupingConstraint(grassPatchGroup, avoidNW);
rmAddGroupingConstraint(grassPatchGroup, avoidSE);
rmAddGroupingConstraint(grassPatchGroup, avoidImpassableLand);
rmAddGroupingConstraint(grassPatchGroup, playerConstraint);
rmAddGroupingConstraint(grassPatchGroup, avoidTradeRoute);
rmAddGroupingConstraint(grassPatchGroup, avoidSocket);
rmAddGroupingConstraint(grassPatchGroup, avoidNuggetSmall);
rmAddGroupingConstraint(grassPatchGroup, circleConstraint);
rmAddGroupingConstraint(grassPatchGroup, avoidAll);
rmPlaceGroupingAtLoc(grassPatchGroup, 0, 0.5, 0.5, 1);
}

int flowerPatchGroupType=-1;
int flowerPatchGroup=-1;

// Also two "flowers" per player.
for(i=1; <2*cNumberNonGaiaPlayers)
{
flowerPatchGroupType=rmRandInt(1, 8);
flowerPatchGroup=rmCreateGrouping("Flower Patch Group"+i, "gp_flower0"+flowerPatchGroupType);
rmSetGroupingMinDistance(flowerPatchGroup, 0.0);
rmSetGroupingMaxDistance(flowerPatchGroup, rmXFractionToMeters(0.5));
rmAddGroupingConstraint(flowerPatchGroup, avoidNW);
rmAddGroupingConstraint(flowerPatchGroup, avoidSE);
rmAddGroupingConstraint(flowerPatchGroup, avoidImpassableLand);
rmAddGroupingConstraint(flowerPatchGroup, playerConstraint);
rmAddGroupingConstraint(flowerPatchGroup, avoidTradeRoute);
rmAddGroupingConstraint(flowerPatchGroup, avoidSocket);
rmAddGroupingConstraint(flowerPatchGroup, avoidNuggetSmall);
rmAddGroupingConstraint(flowerPatchGroup, avoidAll);
rmAddGroupingConstraint(flowerPatchGroup, circleConstraint);
rmPlaceGroupingAtLoc(flowerPatchGroup, 0, 0.5, 0.5, 1);
}

// And a couple of geysers.
int geyserID=rmCreateGrouping("Geysers", "prop_geyser");
rmSetGroupingMinDistance(geyserID, 0.0);
rmSetGroupingMaxDistance(geyserID, rmXFractionToMeters(0.5));
rmAddGroupingConstraint(geyserID, avoidNW);
rmAddGroupingConstraint(geyserID, avoidSE);
rmAddGroupingConstraint(geyserID, avoidBison);
rmAddGroupingConstraint(geyserID, avoidAll);
rmAddGroupingConstraint(geyserID, avoidImpassableLand);
rmAddGroupingConstraint(geyserID, avoidTradeRoute);
rmAddGroupingConstraint(geyserID, avoidSocket);
rmAddGroupingConstraint(geyserID, avoidStartingUnits);
rmAddGroupingConstraint(geyserID, avoidNuggetSmall);
rmAddGroupingConstraint(geyserID, playerConstraint);
rmAddGroupingConstraint(geyserID, circleConstraint);
rmPlaceGroupingAtLoc(geyserID, 0, 0.5, 0.5, 2);


// Text
rmSetStatusText("",1.0);
}


And since the topic of mapping has been brought up.
@Tilanus I'll try to squeeze in some mapping time today, I can't do much for K&B until I get the resources I require.
_________________
Alea iacta est.
-The die is cast-

-Julius Caesar

Back to top
View user's profile Send private message Visit poster's website
Tilanus Commodor
NE Commander
NE Commander


Joined: 03 Apr 2007
Posts: 5074
Location: Berlin, Germany

PostPosted: Mon May 16, 2011 10:43 pm    Post subject:

the dude from neverland wrote:
And since the topic of mapping has been brought up.
@Tilanus I'll try to squeeze in some mapping time today, I can't do much for K&B until I get the resources I require.

That'd have been my question indeed, smart boy. Mr. Green
_________________
Napoleonic Era Project Leader


** Support me to support NE **

Test your Age of Empires knowledge in my
Grand Age of Empires quiz! King Green!
Back to top
View user's profile Send private message Send e-mail Visit poster's website
peugeot407
Councillor
Councillor


Joined: 24 Jun 2008
Posts: 1734
Location: Netherlands

PostPosted: Tue May 17, 2011 8:01 am    Post subject:

Quote:
I can't do much for K&B until I get the resources I require.


Bloody hell, I best get going again then! Mr. Green Mr. Green


peugeot407
_________________
SAOL wrote: "North America, South America, pish posh they're the same.
Spawn of greater nations."





Back to top
View user's profile Send private message MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    Forum Index -> NE Forum All times are GMT
Go to page 1, 2, 3, 4, 5, 6, 7, 8  Next
Page 1 of 8

 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Powered by phpBB © 2001, 2005 phpBB Group | Page design by Tilanus Commodor & michfrm.