Monty-
Your code could be shortened significantly by using function calls. take this example from your code:
// Miracle Areas
float myMiracleLocation = rmXTilesToFraction(40)*0.5*sqrt(cNumberNonGaiaPlayers); // ~0.18, Gives fraction from center
float myMiracleAreaFraction = 0.04; // Gives fraction
float myMiracleAreaSize = rmAreaTilesToFraction(14);
int myMiracleBaseHeight = 7;
int myMiracleHeightBlend = 2;
float myMiracleAreaCoherence = 0.3;
int myMiracleArea1 = rmCreateArea("Miracle Area 1");
if(myEnvironment == 1) {
rmSetAreaTerrainType(myMiracleArea1,"GrassDirt25");
rmAddAreaTerrainLayer(myMiracleArea1,"SnowGrass25",0,2);
rmAddAreaTerrainLayer(myMiracleArea1,"SnowGrass50",2,4);
rmAddAreaTerrainLayer(myMiracleArea1,"SnowGrass75",4,6);
}
else {
rmSetAreaTerrainType(myMiracleArea1,"GrassDirt75");
rmAddAreaTerrainLayer(myMiracleArea1,"GrassDirt25",0,2);
rmAddAreaTerrainLayer(myMiracleArea1,"GrassDirt50",2,4);
rmAddAreaTerrainLayer(myMiracleArea1,"GrassDirt75",4,6);
}
rmSetAreaBaseHeight(myMiracleArea1,myMiracleBaseHeight);
rmSetAreaCoherence(myMiracleArea1,myMiracleAreaCoherence);
rmSetAreaHeightBlend(myMiracleArea1,myMiracleHeightBlend);
rmSetAreaLocation(myMiracleArea1,0.5+myMiracleLocation,0.5);
rmSetAreaSize(myMiracleArea1,myMiracleAreaSize,myMiracleAreaSize);
rmAddAreaToClass(myMiracleArea1,myMiracleClass);
rmBuildArea(myMiracleArea1);
int myMiracleArea2 = rmCreateArea("Miracle Area 2");
if(myEnvironment == 1) {
rmSetAreaTerrainType(myMiracleArea2,"GrassDirt25");
rmAddAreaTerrainLayer(myMiracleArea2,"SnowGrass25",0,2);
rmAddAreaTerrainLayer(myMiracleArea2,"SnowGrass50",2,4);
rmAddAreaTerrainLayer(myMiracleArea2,"SnowGrass75",4,6);
}
else {
rmSetAreaTerrainType(myMiracleArea2,"GrassDirt75");
rmAddAreaTerrainLayer(myMiracleArea2,"GrassDirt25",0,2);
rmAddAreaTerrainLayer(myMiracleArea2,"GrassDirt50",2,4);
rmAddAreaTerrainLayer(myMiracleArea2,"GrassDirt75",4,6);
}
rmSetAreaBaseHeight(myMiracleArea2,myMiracleBaseHeight);
rmSetAreaCoherence(myMiracleArea2,myMiracleAreaCoherence);
rmSetAreaHeightBlend(myMiracleArea2,myMiracleHeightBlend);
rmSetAreaLocation(myMiracleArea2,0.5-myMiracleLocation,0.5);
rmSetAreaSize(myMiracleArea2,myMiracleAreaSize,myMiracleAreaSize);
rmAddAreaToClass(myMiracleArea2,myMiracleClass);
rmBuildArea(myMiracleArea2);
...
rmBuildArea(myMiracleArea4);
**
This could be rewritten with two functions and some function calls as such (The functions need to go above main):
void LayerTerrain(int id=0, int Environment=0) {
if(Environment == 1) {
rmSetAreaTerrainType(id,"GrassDirt25");
rmAddAreaTerrainLayer(id,"SnowGrass25",0,2);
rmAddAreaTerrainLayer(id,"SnowGrass50",2,4);
rmAddAreaTerrainLayer(id,"SnowGrass75",4,6);
}
else {
rmSetAreaTerrainType(id,"GrassDirt75");
rmAddAreaTerrainLayer(id,"GrassDirt25",0,2);
rmAddAreaTerrainLayer(id,"GrassDirt50",2,4);
rmAddAreaTerrainLayer(id,"GrassDirt75",4,6);
}
}
int MakeMiracleArea(string ObjName="", float Size=0, float BaseHeight=0, float HeightBlend=0, float AreaCoherence=0, float AtX=0, float AtZ=0, int AddToClass=0, int Environment=0) {
int id = rmCreateArea(ObjName);
rmSetAreaBaseHeight(id,BaseHeight);
rmSetAreaCoherence(id,AreaCoherence);
rmSetAreaHeightBlend(id,HeightBlend);
rmSetAreaLocation(id,AtX,AtZ);
rmSetAreaSize(id,Size,Size);
rmAddAreaToClass(id,AddToClass);
LayerTerrain(id,Environment)
rmBuildArea(id);
return (id);
}
then in main...
// Miracle Areas
float myMiracleLocation = rmXTilesToFraction(40)*0.5*sqrt(cNumberNonGaiaPlayers); // ~0.18, Gives fraction from center
float myMiracleAreaFraction = 0.04; // Gives fraction
float myMiracleAreaSize = rmAreaTilesToFraction(14);
int myMiracleBaseHeight = 7;
int myMiracleHeightBlend = 2;
float myMiracleAreaCoherence = 0.3;
int myMiracleArea1 = MakeMiracleArea("Miracle Area 1", myMiracleAreaSize, myMiracleBaseHeight, myMiracleHeightBlend, myMiracleAreaCoherence, 0.5-myMiracleLocation, 0.5, myMiracleClass, myEnvironment);
int myMiracleArea2 = MakeMiracleArea("Miracle Area 2", myMiracleAreaSize, myMiracleBaseHeight, myMiracleHeightBlend, myMiracleAreaCoherence, 0.5+myMiracleLocation, 0.5, myMiracleClass, myEnvironment);
int myMiracleArea3 = MakeMiracleArea("Miracle Area 3", myMiracleAreaSize, myMiracleBaseHeight, myMiracleHeightBlend, myMiracleAreaCoherence, 0.5, 0.5-myMiracleLocation, myMiracleClass, myEnvironment);
int myMiracleArea4 = MakeMiracleArea("Miracle Area 4", myMiracleAreaSize, myMiracleBaseHeight, myMiracleHeightBlend, myMiracleAreaCoherence, 0.5, 0.5+myMiracleLocation, myMiracleClass, myEnvironment);
Using these functions cut your lines of code in half... Now if we only had some other built in functions to work with it could be a real prog language (like string functions, left, right, instr, substring, Math functions Sin & Cos, and the all powerful Evaluate). Does anyone konw if there are any functions available to the RMS - the only function they use in their RMS's is sqrt.
Just the LayerTerrain function above should save you hundreds of lines in your code. Good luck!