You are on page 1of 48

Random Map Scripting Guide Age of Empires II: The Conquerors Expansion

Important: Age of Empires II: The Conquerors Expansion allows you to create your own random map scripts. You may share these custom random map scripts for the purposes of gameplay, ut you may not sell or ma!e other commercial uses of the custom random map scripts. "icrosoft Corporation reser#es all other rights to the editors and files.

COP RIG!T "OTICE This information contained in this pu#$ication%document &the 'Information() ma* #e redistri#uted on$* as permitted #* the text #e$o+ and pro,ided that such Information and this cop*right notice remain intact- "o part of the Information ma* in an* form or #* an* e$ectronic. mechanica$. photocopied. recorded or an* other means #e reproduced. stored in a retrie,a$ s*stem. #roadcast or transmitted +ithout the prior +ritten permission of the pu#$isher of the Information. Ensem#$e Studios Corporation- "either the Information nor an* portion thereof ma* #e stored in a computer or other e$ectronic storage de,ice except for persona$ and non/commercia$ use0sers of the Information must see1 permission from Ensem#$e Studios Corporation for a$$ uses that are not a$$o+ed #* fair use and other pro,isions of the 0- S- Cop*right Act. as amended from time to time &the 'Act()- This Information ma* not. under an* circumstances. #e reso$d or redistri#uted for compensation of an* 1ind +ithout the prior +ritten permission of Ensem#$e Studios Corporation. 23443 "- Centra$ Express+a*. Suite 2533. 6a$$as. T7 89:;2The Information ma* on$* #e used as a source of data and ma* on$* #e used for non/commercia$ purposes- An* cop* of this Information or portion thereof must inc$ude this cop*right noticeAn* pu#$ished data contained in the Information. inc$uding 0R< and other Internet =e# Site references. is su#>ect to change from time to time +ithout noticeThe Information does not carr* a +arrant* of an* 1ind. +hether express or imp$ied- A$though e,er* effort is made to pro,ide the most accurate and up/to/ date information possi#$e. Ensem#$e Studios Corporation ac1no+$edges that this Information cou$d inc$ude certain errors. inc$uding t*pographica$ errors and technica$ inaccuracies- Additions and changes +i$$ #e made to the Information on an on/going #asis? thus the Information contained herein is su#>ect to change +ithout prior notice- Comp$*ing +ith the Act and a$$ other app$ica#$e federa$ or state cop*right $a+s is the so$e responsi#i$it* of the user- The user here#* is deemed to assume a$$ such cop*right $a+ comp$iance responsi#i$it* #* his or her use of the InformationEnsem#$e Studios Corporation ma* ha,e 0-S- federa$ and%or state patents. patent app$ications. trademar1s. ser,ice mar1s. trade names. cop*rights or other inte$$ectua$ propert* rights co,ering su#>ect matter in the Information- Except as express$* pro,ided in an* +ritten $icense agreement from Ensem#$e Studios Corporation. the furnishing of the Information does not gi,e the user an* $icense to such patents. patent app$ications. trademar1s. ser,ice mar1s. trade names.

$"%&.doc

'

cop*rights or other inte$$ectua$ propert* rights. +hich are express$* retained #* Ensem#$e Studios Corporation-

$"%&.doc

Introduction..................................................................................................................................... ) %yntax............................................................................................................................................. ) "ap si*es.................................................................................................................................... + &lo al instructions.......................................................................................................................... + ,ocal instructions............................................................................................................................ &eneration Instructions............................................................................................................... %cript writing tips........................................................................................................................... '$esources................................................................................................................................. '%etting *ones............................................................................................................................. 'Testing player start areas.......................................................................................................... '%cattering o .ects...................................................................................................................... '"a!ing it all fit........................................................................................................................... '%tandard resources................................................................................................................... '/ 0 .ect names................................................................................................................................ '/ Annotated $andom "ap %cript................................................................................................. (+

Ta#$e of Contents

Introduction
$andom "ap scripts are text files that can e composed in any text editor. They must end with 1.$"% and must e placed in the $A230" directory. $andom "ap scripts are automatically transferred in multiplayer games to players who do not ha#e them. $andom "ap scripts place the same starting terrain and resources for e#ery player. It is not possi le to start different players with different resources. Thus, all scripts in theory will e fair to all players. 4owe#er, !nowledge of a map script can still help a player when playing on that map. 5erhaps the player !nows that there is a lot of gold generated in the center of the map 6as in &old $ush7. 8hen you play on someone else9s $andom "ap script, you are placing some trust in that person that the map is going to e interesting and fair. Computer 5layers should e a le to play on any $andom "ap script, ut unless you compose a new .AI file for that map, the Computer 5layer may not play with optimal efficiency. :or example, the Computer 5layer may not uild oats e#en if the map has ample water. "a!ing $andom "aps that can consistently gi#e each player the resources they need can e difficult and may in#ol#e a lot of trial and error. 3on9t get frustrated. Internet fan sites are a great resource for hints, tric!s and other support for ma!ing maps that wor!. A $andom "ap starts with ,and first, then Ele#ation, then Terrain, and finally Cliffs and Connections. The order is important.

S*ntax
$andom map scripts are case sensiti#e. ;races <= enclose commands under specific instruction. 0pening and closing races must e on their own line. >1 %lashes and asteris!s enclose comments that the scripting system ignores, such as remar!s, su ?headings, etc. @se >1 to open a comment and 1> to close it. ;e sure to lea#e a space etween the 1 and other characters.

$"%&.doc

;rac!ets AB enclose #aria les. These are not used in the random map scripts themsel#es, only in the context of this document. If an instruction says CAnum erBD, .ust type C)-D not CA)-BD. Instructions that egin with CsetD do not require a #aria le.

Map si@es
Map $a#e$ tinyEmap smallEmap mediumEmap largeEmap hugeEmap giganticEmap Ti$es on a side F(xF( I/xI/ '(Hx'(H '++x'++ (HHx(HH (--x(-Tota$ ti$es -,'G+ I,('/ '+,+HH (H,F)/ +H,HHH /(,H(Sca$ing factor H.H.I '.+ (.' +.H /.(

%caling factor can e used to place more o .ects on a larger map relati#e to a smaller map. A &igantic "ap is '(.+ times larger than a Tiny "ap, e#en though one side of each map is only ).+ times larger. "ap la els can e used in if?then statements. Examp$e: If medium_map create_object STONE { number_of_objects number_of_groups group_placement_radius } endif

7 2 3

G$o#a$ instructions
&lo al instructions are used to control script flow, ma!e the script change from run to run, and ma!e script control easier. Adefine B$a#e$C

3efines a #aria le that you can use later on. Examp$e: Start_random percent_c ance 33 !define "ESE#T_$%& end_random This instruction gi#es a ))J chance of the map eing a C3E%E$TE"A5D. You could then say if 3E%E$TE"A5 later on to put down sand instead of grass or palm trees instead of oa!s. BconstDnameC Anum#er

$"%&.doc

Constants are used to tie a name, such as an o .ect or terrain, with its identifier in the data ase. Ensem le %tudios has already pre?defined all necessary constants in the randomEmap.def file so they do not need to e changed. if B$a#e$C e$seif B$a#e$C e$se endif Conditional statements are used when there is more than one option. :or example: If the map is gigantic, then add extra resources. If the map is a desert map, then use sand instead of grass. CIfD initiates the conditional statement and CendifD completes it. @se CelseD to specify all other conditions, or CelseifD to specify a single other condition. Examp$e: if %'&INE_$%& base_terrain (%TE# elseif "ESE#T_$%& base_terrain "ESE#T else base_terrain )#%SS2 endif startDrandom percentDchance endDrandom BpercentC

$andom statements are used to specify an instruction running only part of the time. The random chance is specified as a percent 6'?'HH7. If the percents do not add up to 'HH, then the remaining percentage will apply towards a default setting. E#erything etween startErandom and endErandom is considered part of the same random instruction. $andom statements can e nested inside each other. Examp$e: start_random percent_c ance 2* !define "ESE#T_$%& percent_c ance 2* !define %'&INE_$%& end_random The map will e a desert (HJ of the time, an alpine map (HJ of the time, and a normal 6pro a ly grass7 map the remaining /HJ of the time. Alternati#ely, the instruction could ha#e had the line to define grass map at /HJ, ut this is not necessary.

<oca$ instructions
The following instructions are used to create a random map. %ome instructions require a #aria le, which is generally a num er K, a num er of tiles Ktiles, or a terrain constant Aterrain constantB. Instructions that egin with CsetD do not require a #aria le.

Generation Instructions

$"%&.doc

;efore any specific instructions can e gi#en, you must indicate what part of the random map the instructions refer to. :or example, ATE$$AI2E&E2E$ATI02B tells the random map generator that the instructions that follow refer to terrain. A $andom "ap starts with ,and first, then Ele#ation, then Terrain and finally Cliffs and Connections. The order is important. The se#en generation instructions are explained elow along with their specific instructions. A5,AYE$E%ET@5B A,A23E&E2E$ATI02B ATE$$AI2E&E2E$ATI02B A0;LECT%E&E2E$ATI02B AC022ECTI02E&E2E$ATI02B AE,EMATI02E&E2E$ATI02B AC,I::E&E2E$ATI02B BP<A ERDSET0PC randomDp$acement 5laces players randomly. This is the only #alid entry under A5,AYE$E%ET@5B. All maps must ha#e this line in them. B<A"6DGE"ERATIO"C ,and is used to create something aside from the default terrain type, most typically islands of grass in water. There are two types of land, normal lands 6.ust called ,ands7 and 5layer ,ands. In most random maps, 5layer ,ands include a Town Center, %cout Ca#alry, #illagers, and the starting resources placed near the Town Center. 5layer ,ands is also useful for telling terrain, such as forests, to a#oid the player start areas. ,and is all generated at the same time, so the order used in placing land is not important. 6Terrain and o .ects, howe#er, are placed in order.7 #aseDterrain Bterrain constantC 5laces players Creates types of land, such as islands and player lands Creates terrain, such as forests and desert Creates o .ects, such as trees, gold mines and #illagers Connects different land *ones such as shallows etween islands Creates ele#ation to place hills Creates cliffs

%pecifies what default terrain to start with. An island map pro a ly uses water, while a grassland map uses grass. Examp$e: base_terrain createDp$a*erD$ands (%TE# EinstructionsF

%tarts creating 5layer ,ands. The percentage of land allotted to player lands is di#ided among all the players. Therefore, if player lands were specified to ta!e up (HJ of the map, then ( players would each get 'HJ, ut + players would each get -J. It is important that player lands e large enough to contain a player9s town. If player lands on an island map are too small, then the Town Center might e suscepti le to fire from oats. 0n a hill country map, hills might e placed too close to the Town Center. 5layer lands are always set at a constant ele#ation of (. Examp$e: create_pla+er_lands { terrain_t+pe base_si,e land_percent }

grass -* 2*

$"%&.doc

Creates an area for each player that is 'H tiles of grass in si*e. createD$and EinstructionsF

Creates an area of land that is not for players. 8hat type of lands are there to ma!eN In an island map, you might want to lay down onus islands that contain gold. You might want to create a mountain range in the middle of a map. terrainDt*pe BterrainDconstantC

%pecifies what type of terrain to ma!e the land. :or 5layer ,ands, this must e grass or desert to a#oid goofy results. $andDpercent BpercentC

3efines what percent of the map is ta!en up y the land area. :or 5layer ,ands, this area will e di#ided y the num er of players, so if the num er is set to /HJ and there are / players, each will start with a out 'HJ of the map. ;est results seem to occur when using /H?GHJ. num#erDofDti$es BA ti$esC

An alternate way of specifying land area si*e, in this case y num er of tiles. @nli!e ,andEpercent, these areas will not scale with map si*e. It is necessary to use only ,andEpercent or 2um erEofEtiles. #aseDsi@e BA ti$esC

%pecifies a minimum radius that the land grows from. This instruction is useful for insuring that each player has an area large enough to uild a town and !eep at least some uildings free from na#al om ardment. If ;aseEsi*e is not specified, 5layer ,ands may e thin and sna!y. $eftD#order rightD#order topD#order #ottomD#order BpercentC BpercentC BpercentC BpercentC

5ercent from edge to stop land growth. This instruction recogni*es the distance to the map order, so it is useful for placing terrain near the middle of the map. :or example, defining a order of (- will place land near the center of the map, while a order of - will place land almost to the edge of the map. In "editerranean and ;altic maps, this instruction places the inland sea near the center of the map. In Continental maps, this instruction insures there is a order of water. CTopD is random on the maps, so .ust specifying Top and ;ottom ut not ,eft or $ight can create a narrow strip of terrain. 2ote that the map land had a hard?coded feature to round off edges to ma!e land loo! more natural. As maps get smaller 6 order B (HJ7 they may loo! less li!e rectangles and more li!e circles or octagons. #orderDfu@@iness BpercentC

The percent chance per tile of stopping at a order. If this instruction is not used, orders will e straight lines. %pecifying a low num er, -?(H, will ma!e edges ragged and more li!e real geography. @one BA @oneC

$"%&.doc

This is a descripti#e command, used to assign a la el to a certain land area. Oones with the same *one id can o#erlap, while land areas with different id9s are distinct. If no *one is specified, each player will e on their own island 6though it will only loo! li!e an island if the ase terrain is water7. $andDid BA idC

Assigns a la el to a certain land area that can e used to assign o .ects only to that land. setD@oneD#*Dteam 8ill !eep all players on a certain team in the same *one. :or example, on an island map this will allow a team to share an island. To !eep e#eryone on their own island, do not include this command. setD@oneDrandom$* 8ill randomly determine *ones, so that some players may e on the same island, while others may not e. otherD@oneDa,oidanceDdistance BA ti$esC

This instruction is the one that specifies how large a land should e, so if it is not included, the land will not appear. Oone a#oidance is used to specify the width of ri#ers etween player lands. assignDtoDp$a*er BA p$a*erC

Assigns a land area to a certain player. 2ote, this does not wor! with player lands. c$umpingDfactor BA factorC

Clumping affects how much land tends to form squares instead of rectangles. The default #alue is G, and the range is ' to '-. ,ower num ers tend to produce sna!y islands while higher num ers tend to produce squares. 2ote that clumpingEfactor for land and for terrain ha#e different ranges and defaults. BTERRAI"DGE"ERATIO"C Terrain is different from ,and. ,and is used to create something aside from the default terrain type, most typically islands of grass in water. Terrain includes features on that land, such as desert and forests. An important distinction is that land is placed down efore ele#ation, ut terrain is placed down after ele#ation. The order terrain is placed is also important. If you place palm desert on desert terrain efore you place any desert terrain on the map, then you aren9t going to see any palm trees. $emem er, land is placed all at once. Terrain and o .ects are placed in order. createDterrain Creates a clump of terrain Examp$e: create_terrain &%'$_"ESE#T { base_terrain "ESE#T spacing_to_ot er_terrain_t+pes 3 land_percent Bterrain constant C EinstructionsF

$"%&.doc

number_of_clumps 3 set_a.oid_pla+er_start_areas } Creates ) clumps of 5alm 3esert on 3esert terrain. These clumps will ta!e up a total of 'J of all tiles and will e placed away from 5layer %tart Areas. #aseDterrain Bterrain constant C

%pecifies what terrain type the new terrain will e placed on. :or example, palm desert could e placed on desert, or grass) could e placed on grass'. $andDpercent BApercent of map to co,erC

The percent of total land that this terrain will co#er. It is est to use small percentages 6'?'H7 for terrain if many different types of terrain are going to e laid down. num#erDofDti$es BAsi@e of terrain c$ump in ti$esC

The si*e of terrain can e placed in terms of tiles instead of as a percent. 5ercent is generally more useful as it will automatically scale with map si*e. num#erDofDc$umps BAnum#er of c$umps to p$aceC

The percent or num er of tiles of terrain are e#enly distri uted into clumps. If num er of clumpsP) and num er of tileP'G, the terrain will e appear as ) clumps of / tiles each. spacingDtoDotherDterrainDt*pes BAdistance from other terrain t*pesC

%pecifies how far terrain should e from other terrain 6including terrain of the same type7. This command is useful for pre#enting trees from ecoming connected walls, or !eeping forests away from water. It is a good idea to specify some distance for terrain that loc!s mo#ement, ut is not necessary for terrain such as desert and grass. setDsca$eD#*Dgroups %cales num er of terrain clumps with map si*e 6 ase 'HHx'HH map7. %o, if ( clumps are specified, then a large map would ha#e ( 6( x '.+7 clumps, ut a &igantic map would ha#e ') 6( x /.-7 clumps. setDsca$eD#*Dsi@e %cales si*e of terrain patch with map si*e. %o, if 'H tiles are specified, then a large map would ha#e '+H 6'H x '.+7 tiles, ut a &igantic map would ha#e /-H 6'H x /.-7 tiles. setDa,oidDp$a*erDstartDareas "ost terrain, li!e forests and water, will a#oid player start areas y default, ut this instruction can e used, for example, if you want desert to a#oid Town Centers. c$umpingDfactor BAfactorC

Clumping affects how much land tends to form squares instead of rectangles. The default #alue is (H. ,ower num ers tend to produce sna!y patches while higher num ers tend to produce squares. 2ote that clumpingEfactor for land and for terrain ha#e different ranges and defaults. heightD$imits BAminimum ti$e heightC BAmaximum ti$e heightC

$"%&.doc

%pecifies on what ele#ation terrain can e placed 6from H?G7. This instruction can e used to place grass on hill tops or place water only in depressions. setDf$atDterrainDon$* Instructs terrain to a#oid hills. @seful for ma!ing sure ponds don9t cross more than one ele#ation. BOGHECTSDGE"ERATIO"C 0nce land, ele#ation and terrain are placed, you are ready to place o .ects. 2ote that some o .ects may already e placed y terrain. :orests, for example, will e filled with tree o .ects. 4owe#er, you will need to specify starting units, resources and other o .ects needed to ma!e a map ha#e more character and detail. $emem er, land is placed all at once. Terrain and o .ects are placed in order. createDo#>ect 5laces an o .ect. Examp$e: create_object )O'" { number_of_groups 2 number_of_objects 3 group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } Bo#>ect constant C EinstructionsF

/* 0

&i#es e#ery player ( piles of gold with ) gold o .ects in each pile. The pile is confined to a radius of ( tiles and is placed from I to +H tiles from the center of a player9s lands. minDdistanceDtoDp$a*ers maxDdistanceDtoDp$a*ers BAnum#er of ti$esC BAnum#er of ti$esC

%pecifies the limits where the o .ect can e placed relati#e to the center of a piece of land. The o .ect will appear at random anywhere etween the minimum and maximum. :or example, a Town Center placed at minimum H and maximum H will appear in the center of each player9s lands. A gold mine placed at 'H to '( will appear a out one screen away from the Town Center, ut not too far away. The defaults for these instructions are H and infinity, respecti#ely, so if no distance is specified, the o .ect will appear somewhere on that land. ;e careful not to specify a minimum that is greater than the land radius, or the o .ect may not appear or may appear in the wrong location. $emem er that when used with placeEonEspecificElandEid instead of setEplaceEforEe#eryEplayer that the distances refer to the center of that piece of land and not to the players. setDsca$ingDtoDmapDsi@e %cales the num er of groups to larger or smaller maps. 8hen this instruction is used, num erEofEgroups will apply only to ,arge "aps. :or example, if / groups are specified on a ,arge "ap, then a "edium "ap will ha#e + groups, and a %mall "ap will ha#e (. 2ote: If num erEofEgroups is not used 6essentially ma!ing all the o .ects separate7, then scaling will apply to the o .ects themsel#es. This is a good way to scatter things li!e fish and trees on a

$"%&.doc

'H

map. %pecify a large num er of o .ects ut no groups and then use setEscalingEofEgroupsEtoEmapEsi*e. Alternati#ely, you can create a large num er of groups with one o .ect each. The effect will e the same. 2ote that scaling can e set to player num er or map si*e, not oth. 4owe#er, it is possi le to ha#e different o .ects of the same type set to different scales. 0ne gold mine could scale to player num er, while another scales to map si*e. Examp$e: create_object 1IS2 { number_of_objects set_scaling_to_map_si,e terrain_to_place_on set_gaia_object_onl+ min_distance_group_placement }

3* (%TE# /

Creates -H fish 6on a ,arge "ap, fewer on a smaller map, more on a larger map7 scattered across the water, ut ne#er more than + tiles from another fish. setDsca$ingDtoDp$a*erDnum#er 2ote that scaling can e set to player num er or map si*e, not oth. 4owe#er, it is possi le to ha#e different o .ects of the same type set to different scales. 0ne gold mine could scale to player num er, while another scales to map si*e. minDdistanceDgroupDp$acement BAti$esC

3istance to separate center of a groupQpre#ents a massi#e wad of gold, stone and erries all together. Lust as in setEscalingEofEgroupsEtoEmapEsi*e, if no groups are assigned, then this instruction will apply to all o .ects. 2ote: groupEplacementEradius, setElooseEgrouping, and setEtightEgrouping will all o#erride scattering of o .ects and !eep a group together. Examp$e: create_object 1IS2 { number_of_objects set_scaling_of_groups_to_map_si,e terrain_to_place_on set_gaia_object_onl+ min_distance_group_placement }

3* (%TE# /

Creates -H fish 6on a ,arge "ap, fewer on a smaller map, more on a larger map7 scattered across the water, ut ne#er more than + tiles from another fish. maxDdistanceDtoDotherD@ones BAti$esC

%pecifies how close the o .ects can e to other *ones. This is useful it !eeping o .ects away from the shore 6and enemy ships.7 num#erDofDo#>ects BA o#>ectsC

$"%&.doc

''

%pecifies how many o .ects are placed, e.g. gold mines in a patch of mines. If no groups are specified, then there will e one group for each o .ect. In other words, the o .ects will all e scattered. num#erDofDgroups BA groupsC

%pecifies the num er of groups placed. Each group will ha#e the num er of o .ects specified in num erEofEo .ects. If no groups are specified, then there will e one group for each o .ect. In other words, the o .ects will all e scattered. groupD,ariance num#erDofDgroupsC BA num#er added or su#tracted from

%ometimes you want some randomness in the num er of o .ects placed. &roupE#ariance will add or su tract from the num er of o .ects in a group. :or example, a group of ) deer with a #ariance of ( will actually place from ' to - deer at random. groupDp$acementDradius BAti$esC

%pecifies how much area is occupied y a group. &roups of large o .ects can ecome #ery long if the o .ects are placed in a row. %pecifying a small groupEplacementEradius will confine a group to a smaller area. setD$ooseDgrouping setDtightDgrouping ,oose groups can ha#e a tile or two of space among the o .ects, li!e sheep or deer. Tight groups ha#e no space among the o .ects, li!e gold or stone. terrainDtoDp$aceDon Bterrain constant C

Confines the group to a certain terrain. :or example, you can place gold mines only on desert terrain. If no terrain is specified, the o .ect will e placed anywhere on the map within reason. ;e sensi le??some o .ects can only e placed on water 6li!e fish7 and others can only e placed on land 6li!e #illagers and trees7. setDgaiaDo#>ectDon$* @sed if you want an o .ect to e &aia 6 elonging to no player7, such as sheep or onus units hidden on the map. 8ill not affect o .ects with no inherent ownership, li!e gold or trees. setDp$aceDforDe,er*Dp$a*er 5laces a group for e#ery player who .oins the game. If you want there to e one $elic for e#ery player, or one Town Center for e#ery player, use this command. If you want e#ery player to start with a pile of gold, use this command. If you want an extra pile of gold lying out in the wilderness, do not use this command. p$aceDonDspecificD$andDid B$and idC

If you designated a piece of land as a particular id, you can now use that id to place o .ects only on this land. 0n the Crater ,a!e map, this command is used to place the onus gold on the spire at the center of the inland la!e. BE<EIATIO"DGE"ERATIO"C

$"%&.doc

'(

After land is placed, ut efore terrain is placed, you can specify how hilly a section of land is. Ele#ation is laid down asically li!e terrain. ;aseEterrain, num erEofEclumps, num erEofEtiles, setEscaleE yEgroups and setEscaleE yEsi*e all wor! for ele#ation the way they do for terrain. Ele#ations always a#oid player start areas. createDe$e,ation BA maximum heightC EinstructionsF

5laces hills. The range of ele#ation is from ' to F. 2ote that ele#ations are not placed at the specified ele#ation ut up to the specified ele#ation. Thus if you state ele#ation /, you will get some ele#ations at '?/. %tating ele#ation F will create '?F. Examp$e: create_ele.ation { if "ESE#T_$%& base_terrain elseif %SI%N_$%& base_terrain else base_terrain endif number_of_clumps number_of_tiles set_scale_b+_groups set_scale_b+_si,e } 7 "I#T )#%SS2 )#%SS -/ -***

5laces 'HHH tiles of up to le#el F ele#ation on dirt, grass( or grass. BC<IJJDGE"ERATIO"C Cliffs can add extra di#ersity to maps with a lot of open space, though they may crowd smaller islands. Examp$e: min_number_of_cliffs ma4_number_of_cliffs min_lengt _of_cliff ma4_lengt _of_cliff cliff_curliness min_distance_cliffs 3 5 / -* -* 3

5laces -?G cliffs of +?'H length on the map, ut !eeps them ) tiles away from each other. minDnum#erDofDc$iffs maxDnum#erDofDc$iffs BAnum#er of c$iffsC BAnum#er of c$iffsC

%pecifies a range for how many cliffs are placed on a map. %pecifying a minimum of ' and a maximum of '( will place ' to '( cliffs on a map. minD$engthDofDc$iff maxD$engthDofDc$iff %pecifies the length of each cliff. BAnum#er of ti$esC BAnum#er of ti$esC

$"%&.doc

')

c$iffDcur$iness

BApercentC

%pecifies the percent chance a cliff will turn instead of continuing straight. 4igh num ers will produce *ig*ag cliffs, while low num ers will produce straight lines. As with e#erything, experiment. minDdistanceDc$iffs BAti$esC

In order to !eep cliffs from forming too close to other cliffs, specify a minimum distance. BCO""ECTIO"DGE"ERATIO"C Connections are lines drawn among player lands. Connections can e used to place roads etween Town Centers, to place shallows across ri#ers, or to cut clearings through forests. createDconnectDteamsD$ands createDconnectDa$$D$ands createDconnectDa$$Dp$a*ersD$and EInstructionsF EInstructionsF EInstructionsF

,and can e connected .ust among team mem ers, among all players, or among all lands placed on a map. "ore than one connection can e placed. :or ;lac! :orest, one set of connections opens up paths among players while another set places roads .ust among team mem ers. Examp$e: 67ONNE7TION_)ENE#%TION8 create_connect_all_pla+ers_land { replace_terrain (%TE# replace_terrain $E"_(%TE# replace_terrain "EE&_(%TE# terrain_cost (%TE# terrain_cost $E"_(%TE# terrain_cost "EE&_(%TE# terrain_si,e (%TE# terrain_si,e $E"_(%TE# terrain_si,e "EE&_(%TE# }

S2%''O( S2%''O( S2%''O( 7 0 -3 3 3 3 -

Connects e#ery player y placing shallows across water, with a preference for shallow water o#er deep water. rep$aceDterrain BterrainDconstantC BterrainDconstantC

@sually when you ma!e connections, you want to replace one terrain with another, such as replacing water with shallows or replacing forest with road. You need to use a replace terrain command for each type of terrain placed on a map. %o, if you mix grass', grass( and grass), you need a replace terrain command for each. terrainDcost BterrainDconstantC BAcost to pass through a ti$eC

Assigning costs to terrain can force a connection to ta!e a different route. If you want your shallows to a#oid deep water and try and follow shallow water, then assign a high cost to deep water 6li!e '-7 and a lower cost to shallow water 6li!e F7. terrainDsi@e BterrainDconstantC BAti$e radiusC BA,arianceC

$"%&.doc

'+

You need to specify how wide a connection is going to e. A three?tile wide stretch of shallows will e easier to defend than a fifteen?tile wide shallows. :or each terrain through which a connection may pass, specify a tile radius and a #ariance on that radius. :or example, terrainEsi*e "E3E8ATE$ ) ', create shallows that are '?+ tiles 6) R>? '7 in width.

Script +riting tips


Resources
0n Ensem le %tudios map types, e#ery player starts with a set num er of resources 6two gold mines, for example7. Additionally, extra resources are added for each player using setEscalingEtoEmapEsi*e or y adding if statements using map si*e as the condition. :inally, the larger map si*es ha#e additional resources.

Setting @ones
"any Ensem le %tudios random maps use the random statement to specify one of four *one types: set *one y team, set *one to a specific id, set *one randomly, or don9t set *one at all. This ensures that some of the time the players on a team will share a *one 6set *one y team7, some of the time they all players will share a *one 6set *one to a specific id7, some of the time some players will o#erlap 6set *one randomly7, and some of the time players will all e separate 6don9t set *one at all7. Oones ha#e the greatest impact on play when the ase terrain type is water, which will ma!e *ones equi#alent to islands. 2ote that in the following script, the default 6no *one at all7 will occur +HJ of the time. start_random percent_c ance set_,one_b+_team percent_c ance ,one percent_c ance set_,one_randoml+ end_random 2* 2* 2*

Testing p$a*er start areas


3ifferent lands and player lands can e temporarily set to terrain types to distinguish different land areas. %etting the ase terrain to grass and the player lands to desert will re#eal where player lands occur. If you are trying to ha#e a large open area of any terrain type, a "editerranean?style map is a good place to start, as it creates a large Cla!eD near the middle of the map.

Scattering o#>ects
There are two ways to lay down o .ects, indi#idually or in groups. If num erEofEgroups is not specified, then each o .ect is treated as its own group and will respond to the setEscalingEofEgroupsEtoEmapEsi*e and minEdistanceEgroupEplacement instructions, unless instructions to !eep the group together o#erride it. Instructions to !eep a group together are groupEplacementEradius, setElooseEgrouping, and setEtightEgrouping. %tandard Ensem le %tudios maps scatter fish, ut !eep gold and stone mines in tight groups.

Ma1ing it a$$ fit

$"%&.doc

'-

,and is placed all at once ut terrain is placed in the order you specify, and then o .ects are placed on top of terrain. If you place down too much forest, for example, there might not e enough open space for all of the gold and stone. The map generator does not try se#eral iterations until it creates a map that wor!sQif there is not enough space for oar for player (, then player ( will not ha#e any oar. If your maps seem li!e they are missing resources, you can try relaxing the constraints on where the resources are placed. Try decreasing the minimum and increasing the maximum distance the resources can e placed from a Town Center. You may ha#e to ultimately cut ac! on the amount of water or forests on a map.

Standard resources
"any 6 ut not all7 Ensem le maps use the same amount of starting resources so that players !now what to expect. There are exceptions, howe#er, including %candina#ia9s lac! of erries and Yucatan9s extra food. You can find the standard resources placed according to map si*e and player num er in the map description elow. It might e a good idea to start with these resources so that your map will not seem too difficult for other people to play on it. The standard starting resources include: / ;erries ' group of F gold mines ( groups of + gold mines ' group of - stone mines ' group of + stone mines ' group of + sheep ( groups of ( sheep ' group of + deer ( oar ( wol#es ' group of ) straggler trees ' group of ( straggler trees

O#>ect names
These are the names of o .ects and terrain that the $andom "ap generator !nows. You must refer to these names when placing terrain or o .ects. "A5 2A"E% %#%9I% %#72I&E'%)O %#EN% 9%'TI7 9'%7:_1O#EST 7O%ST%' 7ONTINENT%' 7#%TE#_'%:E 1O#T#ESS )2OST_'%:E )O'"_#;S2 2I)2'%N" IS'%N"S $E"ITE##%NE%N $I)#%TION $ON)O'I%

$"%&.doc

'/

NO$%" O%SIS #I<E#S S%'T_$%#S2 S7%N"%N%<I% TE%$_IS'%N"S =;7%T%N &A"E 2A"E% :IN)_O1_T2E_2I'' #E)I7I"E TE$$AI2 2A"E% 9%$9OO 9E%72 "ESE#T "I#T "I#T2 "I#T3 1O#EST )#%SS )#%SS2 )#%SS3 I7E SNO( )#%SS_SNO( "I#T_SNO( >;N)'E 'E%<ES &%'$_"ESE#T &INE_1O#EST SNO(_1O#EST S2%''O( (%TE# $E"_(%TE# "EE&_(%TE# #O%" #O%"2 0;LECT 2A"E%, &AIA 9%$9OO_1O#EST_T#EE 9%$9OO_T#EE 9O%# 9#O:EN_7%#T 7%7T;S 7%#%<%N 7#%7:S 7#%TE# "EE# "I#E_(O'1 "O#%"O 1'O(E#_9E" 1'O(E#S_-

$"%&.doc

'F

1'O(E#S_2 1'O(E#S_3 1'O(E#S_/ 1O#%)E 1O#%)E_9;S2 1O#EST_T#EE )O'" )#%<E 2%(: 2%=_ST%7: 2E%" I#ON_9O%# >%);%# >%<E'IN% >;N)'E_T#EE $%7%( $%#'IN$%#'IN2 $O;NT%IN_$O;NT%IN_2 $O;NT%IN_3 $O;NT%IN_/ O%:_1O#EST_T#EE O%:T#EE O'"_STONE_2E%" &%'$_1O#EST_T#EE &%'$T#EE &%T2_&%T2_2 &%T2_3 &%T2_/ &IE7E_O1_T2E_T#;E_7#OSS &INE_1O#EST_T#EE &INET#EE &'%NT #%9I"_(O'1 #E'I7 #O7: #O$%N_#;INS #;)S #;INS S%'$ON SE%_#O7:S_SE%_#O7:S_2 S2EE& S2O#E_1IS2 SI)N S:E'ETON SN%&&E# SNO(_&INE_T#EE ST%T;E STONE ST;$& T#EE_% T#EE_9 T#EE_7

$"%&.doc

'G

T#EE_" T#EE_E T#EE_1 T#EE_) T#EE_2 T#EE_I T#EE_> T#EE_: T#EE_' T#EE_T" T#EET#EE2 T#EE3 T#EE/ T#EE3 T;N% T;#:E= (I'"_9O%# (I'"_2O#SE (O'1 0;LECT 2A"E%, %CE2A$I0 7%T2E"#%' ES_1'%) 1'%)_% 1'%)_9 1'%)_7 1'%)_" 1'%)_E )#E%T_&=#%$I" 2O#SE :IN) $%&_#E<E%'E# $ON;$ENT $OS?;E NINE_9%N"S &%<I'ION &%<I'ION2 &%<I'ION3 &=#%$I" #;99'E_-_@_#;99'E_2_@_2 #;99'E_3_@_3 S2EE& S2I&(#E7: S2I&(#E7:2 TO#72 TO#72_7ON<E#TIN) T#%"E_(O#:S2O& =;#T =;#T2 =;#T3 =;#T/ =;#T3 =;#TA

$"%&.doc

'I

=;#T7 =;#T5 0;LECT 2A"E%, A$C4E$Y $A2&E @2IT% %#72E# 7%<%'#=_%#72E# 2%N"_7%NNONEE# S:I#$IS2E# %#9%'EST 7#OSS9O($%N E'ITE_S:I#$IS2E# 2E%<=_7%<%'#=_%#72E# 0;LECT 2A"E%, ;A$$ACS% @2IT% E%)'E_(%##IO# $I'ITI% S&E%#$%N 72%$&ION E'ITE_E%)'E_(%##IO# 2%'9E#"IE# 'ON)_S(O#"S$%N $%N_%T_%#$S &I:E$%N T(O_2%N"E"_S(O#"S$%N 0;LECT 2A"E%, CA%T,E @2IT% 9E#SE#: 7%T%&2#%7T 72;_:O_N; 7ON?;IST%"O# 2;S:%#' >%);%#_(%##IO# >%NISS%#= 'ON)9O($%N $%$E';:E $%N);"%I &ET%#" &';$E"_%#72E# S%$;#%I T%#:%N TE;TONI7_:NI)2T T2#O(IN)_%@E$%N T#E9;72ET T#E9;72ET_&%7:E" (%#_E'E&2%NT (%#_(%)ON (O%"_#%I"E# E'ITE_9E#SE#: E'ITE_7%T%&2#%7T E'ITE_72;_:O_N; E'ITE_7ON?;IST%"O# E'ITE_2;S:%#' E'ITE_>%);%#_(%##IO#

$"%&.doc

(H

E'ITE_>%NISS%#= E'ITE_'ON)9O($%N E'ITE_$%$E';:E E'ITE_$%N);"%I E'ITE_&';$E"_%#72E# E'ITE_S%$;#%I E'ITE_T%#:%N E'ITE_TE;TONI7_:NI)2T E'ITE_T2#O(IN)_%@E$%N E'ITE_(%#_E'E&2%NT E'ITE_(%#_(%)ON E'ITE_(O%"_#%I"E# 0;LECT 2A"E%, C4@$C4 @2IT% $ISSION%#= $ON: 0;LECT 2A"E%, 30CS @2IT% 7%NNON_)%''EON "E$O'ITION_S2I& 1I#E_S2I& 1IS2IN)_S2I& )%''E= 'ON)9O%T T#%"E_7O) T#%NS&O#T_S2I& T;#T'E_S2I& E'ITE_7%NNON_)%''EON E'ITE_'ON)9O%T E'ITE_T;#T'E_S2I& 1%ST_1I#E_S2I& )%''EON 2E%<=_"E$O'ITION_S2I& (%#_)%''E= 0;LECT 2A"E%, 4E$0 @2IT% %"$I#%'_=I_S;N_S2IN %ET2E'1I#T2 %#729IS2O& %#72E#S_O1_T2E_E=ES %TTI'%_T2E_2;N 9%"_NEI)29O# 9%"_NEI)29O#_&%7:E" 9E'IS%#I;S 9'E"%_T2E_2;N 72%#'E$%)NE 72%#'ES_$%#TE' 7ONST%9'E_#I72E$ONT "O$E_O1_T2E_#O7: ";:E_"_%'EN7ON E'_7I" E'_7I"_7%$&E%"O# E$&E#O#_IN_%_9%##E'

$"%&.doc

('

E#I:_T2E_#E" 1#%N:IS2_&%'%"IN 1#I%#_T;7: )%(%IN )EN)2IS_:2%N )O"S_O(N_S'IN) )O"S_O(N_S'IN)_&%7:E" );=_>OSSE'=NE 2%#%'"_2%#"#%%"E 2EN#=_< 2#O'1_T2E_)%N)E# 2;NTIN)_(O'1 I$%$ >E%N_9;#E%; >E%N_"E_'O##%IN >O%N_O1_%#7 >O%N_T2E_$%I" :IN)_%'1ONSO :IN)_%#T2;# :IN)_S%N72O :IT%9%T%:E :;S2';: '%_2I#E '%N7E'OT 'O#"_"E_)#%<I''E $%STE#_O1_T2E_TE$&'%# $IN%$OTO $O#"#E" NO9;N%)% O#N';_T2E_(O'1 &O&E_'EO_I #E=N%'"_"E_72%TI''ON #I72%#"_T2E_'ION2E%#TE" #O9IN_2OO" #O'%N" S%9OTE;# S7=T2I%N_S7O;T S7=T2I%N_(I'"_(O$%N S2%2 S2E#I11_O1_NOTTIN)2%$ SIE)1#IE" SIE;#_9E#T#%N" SIE;#_"E_$ETB SI#_>O2N_1%STO'1 S;9OT%I T%$E#'%NE T2E_%77;#SE"_TO(E# T2E_9'%7:_&#IN7E T2E_TO(E#_O1_1'IES T2EO"O#I7_T2E_)OT2 (I''I%$_(%''%7E (I''I%$_T2E_7ON?;E#O# (I''I%$_T2E_7ON?;E#O#2 0;LECT 2A"E%, "A$SET @2IT

$"%&.doc

((

T#%"E_7%#T 0;LECT 2A"E%, %IE&E 80$S%405 @2IT% 9%TTE#IN)_#%$ 9O$9%#"_7%NNON $%N)ONE' S7O#&ION 7%&&E"_#%$ 2E%<=_S7O#&ION ON%)E# SIE)E_ON%)E# SIE)E_#%$ 0;LECT 2A"E%, %TA;,E @2IT% 7%$E' :NI)2T S7O;T S7O;T_7%<%'#= 7%<%'IE# 2E%<=_7%$E' 2;SS%# 'I)2T_7%<%'#= &%'%"IN 0;LECT 2A"E%, T082 CE2TE$ @2IT <I''%)E# 0;LECT 2A"E%, ;@I,3I2& %#72E#=_#%N)E 9%##%7:S 9'%7:S$IT2 9O$9%#"_TO(E# 7%ST'E "O7: 1%#$ 1IS2_T#%& 1O#TI1IE"_(%'' );%#"_TO(E# 2O;SE :EE& ';$9E#_7%$& $%#:ET $I'' $ININ)_7%$& $ON%STE#= O;T&OST &%'IS%"E_(%'' SIE)E_(O#:S2O& ST%9'E STONE_(%'' TO(N_7ENTE# ;NI<E#SIT=

$"%&.doc

()

(%'' (%T72_TO(E# (ON"E#

Annotated Random Map Script


The following script was created y Ensem le %tudios for the Coastal $andom "ap type. You can use it to figure out how to start maps of your own and see what standard resources go into most maps. $emem er that e#erything etween >1 slash mar!s 1> is a comment and is not read y the "ap &enerator. CD DDDDDDDDDDDD 7O%ST%' DDDDDDDDDDDD DC CD 20 $%# ** DC CD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DC 6&'%=E#_SET;&8 random_placement CD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DC 6'%N"_)ENE#%TION8 base_terrain (%TE# /* Coastal is basically a large island placed on water, so water is the base terrain. Using water1 (the shallow water) makes it easier to add deeper water later */ start_random percent_c ance -3 !define "ESE#T_$%& percent_c ance -3 !define %'&INE_$%& percent_c ance -3 !define %SI%N_$%& percent_c ance -3 !define 1#OBEN_$%& percent_c ance -3 !define T#O&I7%'_$%& end_random /* Coastal maps can have different terrain, s ch as desert or rain forest. !here is a 1"# chance of the map sing one of these different terrain sets. !hese names are $ st sed as variables. %o can define yo r own. */ create_pla+er_lands { if "ESE#T_$%& terrain_t+pe "I#T elseif %'&INE_$%& terrain_t+pe )#%SS2 elseif %SI%N_$%& terrain_t+pe )#%SS2 elseif 1#OBEN_$%& terrain_t+pe SNO( else terrain_t+pe )#%SS endif /* &epending on what terrain type is chosen, we se a different base terrain */

$"%&.doc

(+

start_random percent_c ance 33 land_percent 32 percent_c ance 33 land_percent A* percent_c ance 33 land_percent A3 end_random /* !he amo nt of land sed is random. Using "'# means there is often a lake in the middle of the map. Using ("# means that there tends to be a large, s) are landmass */ base_si,e 5 start_random percent_c ance 23 left_border A top_border 5 bottom_border A percent_c ance 23 left_border A top_border A rig t_border 5 percent_c ance 23 rig t_border A left_border A bottom_border 5 percent_c ance 23 rig t_border 5 top_border A bottom_border A end_random /* !here is a random chance for vario s border si*es. Coastal always has one edge that to ches the border of the map, b t it is random which border this is */ border_fu,,iness -3 ,one ot er_,one_a.oidance_distance 7 clumping_factor -3 } CD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DC 6TE##%IN_)ENE#%TION8 CD $I@IN) (%TE# DC create_terrain $E"_(%TE# { base_terrain (%TE# number_of_clumps -* spacing_to_ot er_terrain_t+pes 2 land_percent /* } create_terrain $E"_(%TE# { base_terrain (%TE# number_of_clumps 3* spacing_to_ot er_terrain_t+pes -

$"%&.doc

(-

land_percent } create_terrain "EE&_(%TE# { base_terrain $E"_(%TE# number_of_clumps 5 spacing_to_ot er_terrain_t+pes 3 land_percent 2* } create_terrain "EE&_(%TE# { base_terrain $E"_(%TE# number_of_clumps 3* spacing_to_ot er_terrain_t+pes land_percent } create_terrain $E"_(%TE# { base_terrain "EE&_(%TE# number_of_clumps 3* spacing_to_ot er_terrain_t+pes land_percent } create_terrain (%TE# { base_terrain $E"_(%TE# number_of_clumps 3* spacing_to_ot er_terrain_t+pes land_percent } /* !his adds deeper water to the shallow water. +e se small percentages and spacing of 1,- tiles to make s re the shallow water is closest to land and other waters are placed farther from land. ./periment with different percentages of water so that there are not large e/panses of one color. */ CD &#I$%#= 1O#EST DC if "ESE#T_$%& create_terrain &%'$_"ESE#T { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } elseif %'&INE_$%& create_terrain &INE_1O#EST { base_terrain spacing_to_ot er_terrain_t+pes

"I#T 3 0 -*

)#%SS2 3

$"%&.doc

(/

land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } elseif 1#OBEN_$%& create_terrain SNO(_1O#EST { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } elseif %SI%N_$%& create_terrain &INE_1O#EST { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } elseif T#O&I7%'_$%& create_terrain >;N)'E { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } else create_terrain 1O#EST { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } endif

0 -*

SNO( 3 0 -*

)#%SS2 3 0 -*

)#%SS 3 0 -*

)#%SS 3 0 -*

/* !he 0rimary 1orest on Coastal covers 2# of the map and can be oak forest, pine forest or even rain forest, depending on the kind of map we want */ CD &#I$%#= &%T72 DC if "ESE#T_$%& create_terrain "ESE#T { base_terrain

"I#T

$"%&.doc

(F

number_of_clumps -2 spacing_to_ot er_terrain_t+pes * land_percent 5 set_scale_b+_si,e } elseif %'&INE_$%& create_terrain )#%SS3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } elseif 1#OBEN_$%& create_terrain )#%SS_SNO( { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } elseif %SI%N_$%& create_terrain )#%SS3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } else create_terrain "I#T { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } endif

)#%SS2 5 * A

SNO( 5 * A

)#%SS2 5 * A

)#%SS 5 * 0

/* !hese patches and additional forests are sed for variation. 3dding grass or dirt on top of the base terrain is really only for cosmetic p rposes. 1orests affect how defensive the map can be and how hard it is to path from one town to another */ CD SE7ON"%#= 1O#EST DC if "ESE#T_$%& create_terrain 1O#EST { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps

)#%SS 3 3

$"%&.doc

(G

set_a.oid_pla+er_start_areas set_scale_b+_groups } elseif %'&INE_$%& create_terrain 1O#EST { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } elseif 1#OBEN_$%& create_terrain SNO(_1O#EST { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } elseif %SI%N_$%& create_terrain 9%$9OO { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } else create_terrain &%'$_"ESE#T { base_terrain spacing_to_ot er_terrain_t+pes land_percent number_of_clumps set_a.oid_pla+er_start_areas set_scale_b+_groups } endif CD SE7ON"%#= &%T72 DC if "ESE#T_$%& create_terrain "I#T3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e }

)#%SS2 3 3

)#%SS_SNO( 3 3

)#%SS2 3 3

"I#T 3 3

"I#T 2/ * 2

$"%&.doc

(I

elseif %'&INE_$%& create_terrain "I#T3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } elseif 1#OBEN_$%& create_terrain "I#T_SNO( { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } elseif %SI%N_$%& create_terrain "I#T3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } else create_terrain )#%SS3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } endif CD TE#TI%#= &%T72 DC if "ESE#T_$%& create_terrain )#%SS3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } elseif %'&INE_$%& create_terrain )#%SS { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent

)#%SS2 2/ * 2

SNO( 2/ * 2

)#%SS2 2/ * 2

)#%SS 2/ * 2

"I#T 3* * 2

)#%SS2 3* * 2

$"%&.doc

)H

set_scale_b+_si,e } elseif 1#OBEN_$%& create_terrain )#%SS2 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } elseif %SI%N_$%& create_terrain )#%SS { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } else create_terrain "I#T3 { base_terrain number_of_clumps spacing_to_ot er_terrain_t+pes land_percent set_scale_b+_si,e } endif

)#%SS_SNO( 3* * 2

)#%SS2 3* * 2

)#%SS 3* * 2

CD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DC 6O9>E7TS_)ENE#%TION8 CD &'%=E# ST%#T O9>E7TS DC create_object TO(N_7ENTE# { set_place_for_e.er+_pla+er group_placement_radius -5 min_distance_to_pla+ers * ma4_distance_to_pla+ers * } create_object <I''%)E# { set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers } create_object S7O;T { number_of_objects set_place_for_e.er+_pla+er min_distance_to_pla+ers

A A

$"%&.doc

)'

ma4_distance_to_pla+ers }

create_object #E'I7 { number_of_objects 3 min_distance_to_pla+ers 23 temp_min_distance_group_placement 2* } /* .ach player starts with a !own Center, villagers and a sco t. !he 4ap 5enerator knows that Chinese need ( villagers and that 3*tecs have an .agle +arrior. !here are also " 6elics placed on most map types. */ CD S&E7I%' ST;11 1O# #E)I7I"E DC if #E)I7I"E create_object <I''%)E# { number_of_objects set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers } create_object :IN) { set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers } create_object 7%ST'E { set_place_for_e.er+_pla+er min_distance_to_pla+ers -* ma4_distance_to_pla+ers -* } endif /* 6egicide games re) ire a Castle, 7ing and more villagers. 8ther game types, s ch as &efend the +onder, are handled a tomatically. */ CD NE%# 1O#%)E DC create_object 1O#%)E { number_of_objects A group_placement_radius 3 set_tig t_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -* ma4_distance_to_pla+ers -2 min_distance_group_placement A

7 A A

A A

$"%&.doc

)(

} /* 8n most maps, everyone gets berry b shes near their town */ CD NE%# )O'" DC create_object )O'" { number_of_objects 7 group_placement_radius 3 set_tig t_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -2 ma4_distance_to_pla+ers -A min_distance_group_placement 7 ma4_distance_to_ot er_,ones 7 } CD $E"I;$ )O'" DC create_object )O'" { number_of_objects / group_placement_radius 3 set_tig t_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -5 ma4_distance_to_pla+ers 2A min_distance_group_placement 7 ma4_distance_to_ot er_,ones 7 } CD 1%# )O'" DC create_object )O'" { number_of_objects / group_placement_radius 3 set_tig t_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers 23 ma4_distance_to_pla+ers 33 min_distance_group_placement 7 ma4_distance_to_ot er_,ones 7 } /* .veryone gets - sets of gold mines. 9ometimes the far gold mine is really far (-" tiles) from the player:s !own Center. */ CD NE%# STONE DC create_object STONE {

$"%&.doc

))

number_of_objects 3 group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -/ ma4_distance_to_pla+ers -5 min_distance_group_placement 7 ma4_distance_to_ot er_,ones 7 } CD 1%# STONE DC create_object STONE { number_of_objects / group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers 2* ma4_distance_to_pla+ers 2A min_distance_group_placement 7 ma4_distance_to_ot er_,ones 7 } /* +e place stone last since it is more important to start with berries and gold. ;f the map r ns o t of room it might not place stone. !his is not ideal, b t it is better than losing gold. */ CD 9%% 9%% DC if T#O&I7%'_$%& create_object T;#:E= { number_of_objects / set_loose_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers } create_object T;#:E= { number_of_objects 2 number_of_groups 2 set_loose_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers } else create_object S2EE& { number_of_objects / set_loose_grouping

-* -2

-/ 3*

$"%&.doc

)+

set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -* ma4_distance_to_pla+ers -2 } create_object S2EE& { number_of_objects 2 number_of_groups 2 set_loose_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -/ ma4_distance_to_pla+ers 3* } endif /* 9heep and ! rkeys are small, so they are easy to place. ;f yo really want to conf se players, mi/ sheep and t rkeys on a map. */ create_object "EE# { number_of_objects group_.ariance group_placement_radius set_loose_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers }

/ 3

-/ 3*

if T#O&I7%'_$%& create_object >%<E'IN% else create_object 9O%# endif { number_of_objects set_loose_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -A ma4_distance_to_pla+ers 22 } if T#O&I7%'_$%& create_object >%<E'IN% else create_object 9O%# endif { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -A

$"%&.doc

)-

ma4_distance_to_pla+ers } /* 9t ff to h nt. */

22

if T#O&I7%'_$%& create_object >%);%# { number_of_objects 2 set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_group_placement -2 min_distance_to_pla+ers 3* ma4_distance_to_pla+ers /* } else create_object (O'1 { number_of_objects 2 set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_group_placement -2 min_distance_to_pla+ers 3* ma4_distance_to_pla+ers /* } endif /* <ad g ys. =eave them off if yo want a r shing map. */ CD #ESO;#7ES 9= $%& DC if '%#)E_$%& create_object 1O#%)E { number_of_groups number_of_objects 3 group_placement_radius 3 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } endif

/* -2* 7

/* <eca se large maps have more open space, they need more reso rces. !hese reso rces do not >belong? to anyone. !hey are scattered for the taking. */ if 2;)E_$%& create_object 1O#%)E { number_of_groups number_of_objects group_placement_radius set_tig t_grouping set_gaia_object_onl+

2 3 3

$"%&.doc

)/

min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } endif if )I)%NTI7_$%& create_object 1O#%)E { number_of_groups 3 number_of_objects 3 group_placement_radius 3 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } endif CD E@T#% )O'" DC if TIN=_$%& create_object )O'" { number_of_groups 2 number_of_objects 3 group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if S$%''_$%& create_object )O'" { number_of_groups 2 number_of_objects 3 group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if $E"I;$_$%& create_object )O'" { number_of_groups number_of_objects group_.ariance group_placement_radius set_tig t_grouping

/* -2* 7

/* -2* 7

/* 0

/* 0

3 3 2

$"%&.doc

)F

set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if '%#)E_$%& create_object )O'" { number_of_groups 3 number_of_objects 3 group_.ariance group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if 2;)E_$%& create_object )O'" { number_of_groups / number_of_objects / group_.ariance group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if )I)%NTI7_$%& create_object )O'" { number_of_groups 3 number_of_objects / group_.ariance group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif CD E@T#% STONE DC if TIN=_$%& create_object STONE { number_of_groups number_of_objects group_.ariance

/* 0

/* 0

/* 0

/* 0

/ -

$"%&.doc

)G

group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if S$%''_$%& create_object STONE { number_of_groups number_of_objects / group_.ariance group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if $E"I;$_$%& create_object STONE { number_of_groups 2 number_of_objects / group_.ariance group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if '%#)E_$%& create_object STONE { number_of_groups 3 number_of_objects / group_.ariance group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if 2;)E_$%& create_object STONE { number_of_groups number_of_objects group_.ariance

/* 0

/* 0

/* 0

/* 0

/ / -

$"%&.doc

)I

group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if )I)%NTI7_$%& create_object STONE { number_of_groups 3 number_of_objects / group_.ariance group_placement_radius 2 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers min_distance_group_placement } endif if "ESE#T_$%& create_object &%'$T#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } create_object &%'$T#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } elseif %'&INE_$%& create_object &INET#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } create_object &INET#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er

/* 0

/* 0

2 / 3 2

3 A 5 2

2 / 3 2

$"%&.doc

+H

min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } elseif %SI%N_$%& create_object 9%$9OO_T#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } create_object &INET#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } elseif T#O&I7%'_$%& create_object &%'$T#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } create_object O%:T#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } elseif 1#OBEN_$%& create_object SNO(&INET#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } create_object SNO(&INET#EE { number_of_objects set_gaia_object_onl+

A 5 2

2 / 3 2

3 A 5 2

2 / 3 2

3 A 5 2

2 / 3 2

$"%&.doc

+'

set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } else create_object O%:T#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } create_object O%:T#EE { number_of_objects set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } endif

A 5 2

2 / 3 2

3 A 5 2

/* !hese are the >straggler? trees near every !own Center. */ if T#O&I7%'_$%& create_object $%7%( { number_of_objects set_scaling_to_map_si,e } else create_object 2%(: { number_of_objects set_scaling_to_map_si,e } endif

if T#O&I7%'_$%& create_object >%);%# { number_of_groups 3 set_loose_grouping start_random percent_c ance 73 number_of_objects percent_c ance 23 number_of_objects 2 end_random set_scaling_to_map_si,e set_gaia_object_onl+ min_distance_group_placement -2

$"%&.doc

+(

min_distance_to_pla+ers ma4_distance_to_pla+ers

/* -2*

} else create_object (O'1 { number_of_groups 3 set_loose_grouping start_random percent_c ance 73 number_of_objects percent_c ance 23 number_of_objects 2 end_random set_scaling_to_map_si,e set_gaia_object_onl+ min_distance_group_placement -2 min_distance_to_pla+ers /* ma4_distance_to_pla+ers -2* } endif /* 4ore wildlife. <irds have no affect on gameplay, b t make the map more interesting. */ create_object 1O#%)E { number_of_groups number_of_objects 3 group_placement_radius 3 set_tig t_grouping set_gaia_object_onl+ min_distance_to_pla+ers ma4_distance_to_pla+ers min_distance_group_placement } create_object "EE# { number_of_objects / group_.ariance set_loose_grouping set_gaia_object_onl+ set_place_for_e.er+_pla+er min_distance_to_pla+ers -0 } if "ESE#T_$%& create_object &%'$T#EE { number_of_objects set_gaia_object_onl+ set_scaling_to_map_si,e min_distance_to_pla+ers } elseif %'&INE_$%& create_object &INET#EE

-0 -2* 0

3* 5

$"%&.doc

+)

{ number_of_objects set_gaia_object_onl+ set_scaling_to_map_si,e min_distance_to_pla+ers } elseif 1#OBEN_$%& create_object SNO(&INET#EE { number_of_objects set_gaia_object_onl+ set_scaling_to_map_si,e min_distance_to_pla+ers } elseif %SI%N_$%& create_object 9%$9OO_T#EE { number_of_objects set_gaia_object_onl+ set_scaling_to_map_si,e min_distance_to_pla+ers } elseif T#O&I7%'_$%& create_object &%'$T#EE { number_of_objects set_gaia_object_onl+ set_scaling_to_map_si,e min_distance_to_pla+ers } else create_object O%:T#EE { number_of_objects set_gaia_object_onl+ set_scaling_to_map_si,e min_distance_to_pla+ers } endif 3* 5

3* 5

3* 5

3* 5

3* 5

/* !hese are the lone trees scattered across the map. ;t makes the map look more believable than if there were $ st forests and no straggler trees. */ if "ESE#T_$%& create_object "O#%"O { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } create_object SN%&&E# { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+

-3 /

-*

$"%&.doc

++

ma4_distance_to_ot er_,ones } elseif %'&INE_$%& create_object S%'$ON { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } create_object SN%&&E# { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } elseif 1#OBEN_$%& create_object S%'$ON { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } create_object SN%&&E# { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } elseif %SI%N_$%& create_object T;N% { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } create_object SN%&&E# { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } else create_object "O#%"O { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } create_object T;N%

-3 /

-* /

-3 /

-* /

-3 /

-* /

3 /

$"%&.doc

+-

{ number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } create_object SN%&&E# { number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ ma4_distance_to_ot er_,ones } endif create_object S2O#E_1IS2 { number_of_objects set_scaling_to_map_si,e min_distance_group_placement set_gaia_object_onl+ } create_object $%#'IN{ number_of_groups number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ min_distance_group_placement ma4_distance_to_ot er_,ones } create_object $%#'IN2 { number_of_groups number_of_objects set_scaling_to_map_si,e set_gaia_object_onl+ min_distance_group_placement ma4_distance_to_ot er_,ones } -* /

-* /

23 3

3 -* 7

3 -* 7

/* 8ne of o r designers is picky abo t which fish live in which part of the co ntry. 8nly the 4arlin and the 9hore fish have different amo nts of food in them. !he other fish are $ st for variety. */ CD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DC 6E'E<%TION_)ENE#%TION8 create_ele.ation { if "ESE#T_$%& base_terrain elseif %'&INE_$%& base_terrain 7 "I#T )#%SS2

$"%&.doc

+/

elseif 1#OBEN_$%& base_terrain elseif %SI%N_$%& base_terrain else base_terrain endif number_of_clumps number_of_tiles set_scale_b+_groups set_scale_b+_si,e }

SNO( )#%SS2 )#%SS -/ 2***

/* @otice that the elevation m st be placed on a certain terrain, whichever is the base terrain for the map. ;f yo se lots of different terrain, yo may need to have m ltiple elevation statements. */ 67'I11_)ENE#%TION8 min_number_of_cliffs ma4_number_of_cliffs min_lengt _of_cliff ma4_lengt _of_cliff cliff_curliness min_distance_cliffs 3 5 / -* -* 3

/* Cliffs work okay on land maps b t are best left off island maps. */ CD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DC 67ONNE7TION_)ENE#%TION8 create_connect_all_pla+ers_land { if 1#OBEN_$%& replace_terrain (%TE# I7E replace_terrain $E"_(%TE# I7E replace_terrain "EE&_(%TE# I7E else replace_terrain (%TE# S2%''O( replace_terrain $E"_(%TE# S2%''O( replace_terrain "EE&_(%TE# S2%''O( endif /* .very player on a team m st be connected in Coastal. !his part p ts shallows or ice across water to make s re no one is on an island. 8n an 3rchipelago map, it is okay if some players are on their own islands. */ terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost (%TE# $E"_(%TE# "EE&_(%TE# 1O#EST &INE_1O#EST &%'$_"ESE#T SNO(_1O#EST >;N)'E S2%''O( "ESE#T "I#T 7 0 -3 7 7 7 7 7 3 2 2

$"%&.doc

+F

terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_cost terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e terrain_si,e

"I#T2 "I#T3 "I#T_SNO( )#%SS )#%SS2 )#%SS3 )#%SS_SNO( SNO( 9E%72 (%TE# $E"_(%TE# "EE&_(%TE# )#%SS )#%SS2 )#%SS3 )#%SS_SNO( SNO( "I#T "I#T2 "I#T3 "I#T_SNO( SNO(_1O#EST 1O#EST &INE_1O#EST &%'$_"ESE#T >;N)'E "ESE#T

2 2 2 2 2 2 2 2 7 2 2 2 * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * *

} >1 Terrain cost is used to ma!e the connections try and go o#er land and not through forests which loo!s fa!e, unless you pa#e the connections with road, as in ;lac! :orest. 1>

$"%&.doc

+G

You might also like