[Map Script] SmartMap

surt

Prince
Joined
Jan 6, 2006
Messages
354
Yes, it works with 1.61, with mods, and with multiplayer.

Get it from the download link below.

Version 9.1 update released, now loads and scales WBS files, plus loads blue marble terrain and WBS terrain for those maps!

Version 9.0 new version with new earth maps feature!

Unzip to your publicmaps folder. Use by selecting customgame, and selecting SmartMap as the map.
The single most common error is to wind up with an extra folder: civ iv folder\PublicMaps\SmartMap\SmartMap.py rather than the correct:
civ iv folder\PublicMaps\SmartMap.py

This map script can create an incredible assortment of gameplay experiences.

Here's a random sampling of outcomes:
First row: High Sea level, Large size, assorted options.

Second row: Med Sea level, Large size, assorted options.

Third row: Low Sea level, Large size, assorted options.



You can see a screenshot of all the custom options in the post below.

Here's a picture of the new earth maps:


Unzip to your publicmaps folder. Use by selecting customgame, and selecting SmartMap as the map.
The single most common error is to wind up with an extra folder: civ iv folder\PublicMaps\SmartMap\SmartMap.py rather than the correct:
civ iv folder\PublicMaps\SmartMap.py
 

Attachments

  • SmartMapV87.zip
    55.9 KB · Views: 2,628
  • SmartMapV90.zip
    81.3 KB · Views: 1,961
  • SmartMapV91.zip
    100.4 KB · Views: 17,115
Here's a peek at the custom options:



And from the readme, here's information on how to use it:

ReadMeSmartMap.txt
ReadMe file describing how to use SmartMap, and its various features.

SmartMap has two related discussion threads.
CivFanatics:
http://forums.civfanatics.com/showthread.php?t=154989
Apolyton:
http://apolyton.net/forums/showthread.php?s=&threadid=147547

Sections:
1) How to use
2) Options
3) Thanks
4) Version History


1) How to use
Extract the SmartMap.py to your CivIv install directory's PublicMaps
folder. Start the game, and select Single Player followed by Custom Game.
On the option titled 'Map:' select SmartMap as the map. Set other options
to your liking (I suggest trying all the defaults first!), and Launch!

A common error is to extract to civdir\PublicMaps\SmartMap\SmartMap.py. You
want to just have civdir\PublicMaps\SmartMap.py

Be patient. This script is slower than many of the default scripts. A large
map takes about 30 seconds to generate on my 1.8ghz pentium-M laptop. Huge
takes close to a minute. Pangea is the slowest to generate, picking fair
start locations on a pangea takes a lot longer.


2) Options
Options are the point of SmartMap. There are a bunch of them. I will
describe how to use each of them in turn to get just the map you are
looking for.

Map: SmartMap, otherwise you're not using SmartMap!

Size: Duel, Tiny, Small, Standard, Large, Huge. SmartMap will use this
setting to determine the overall area of the map, unless you choose to override
the width and height manually, as explained later. SmartMap picks a random
width and height that produce the required area, so not all maps will be the
same shape (if you want to force a specific shape, use the overrides
described later).

Climate: Temperate, Tropical, Arid, Rocky, Cold. These mean approximately
what they do in the normal map scripts. Tropical has less desert and jungle than
you would get in the normal generator. If you feel like you get too much tundra
and snow in temperate, try tropical. Arid produces a lot of desert. Rocky means
an extra boost to hills and mountains. Cold means more snow and tundra.

Sealevel: low, medium, high. This option is used by SmartMap in a unique way.
Since SmartMap offers a direct ocean percent control, sealevel is used to control inter
continental strategy. In particular:
Low = all land on the map MIGHT (or might not) be reachable by galley
Medium = it is very unlikely you will be able to reach another continent by galley,
but contact between civs on different continents may happen early due to
influence borders touching (it is only possible to reach another continent
occasionally by galley due to a bug in civiv that will rarely allow a galley
to enter an ocean tile).
High = guaranteed that you cannot reach another continent by galley, and civ contact
between different continents will not happen until two near as possible cities
both reach level 3 culture, or caravel (almost always caravel happens first).
This option is not guaranteed to be enforced if you select a non-default land style, as
explained later.

Era / Speed: These options are not affected by and do not affect SmartMap. They are for the
mod or the game to use.

Continents: Controls the number of continents generated by the script. Each option is fairly
self explanatory. On low sea level, continents are permitted to merge, so you may receive less
than the expected number of continents. You may also receive less than the expected number if
the script cannot find enough room (as might happen if you select duel size with 36 continents).
You may receive more than the expected number if you select a non-default land style, as explained
later. If you select 0 continents, you'll get a very archipelago style map. You may also select
'single tile isles' if you are playing a mod that prefers maps with only single tiles (such as
planetary space based mods). You can also select various specific land forms, such as earth,
north america, south america, africa, europe, asia, and australia.

Terrain: selects a terrain generator. The terrain generator decides if a given land or hill plot is
a desert, plains, grass, tundra, or snow. The oasis and great plains generators are taken from those
scripts, while standard is just what you normally get on default scripts. SmartMap is a custom terrain
generator that knows how to generate terrain for all kinds of map setups. You can also use this
setting to exclude certain types of terrain such as desert. I recommend SmartMap. There are
additional options that will restrict or alter the types of terrain offered as well,
such as no snow or desert or more grass.

Features: selects a feature generator. Features are things like oasis, flood plains, forest, and jungle.
They go on top of the base terrain to enhance it in some way. Again, the oasis and great plains options
are just what you'd expect from those scripts. Note that you do NOT have to match terrain and feature
generators. Oasis terrain with Great Plains features works just fine, as do all other combinations.
The default SmartMap feature generator generates a few combinations that do not occur in the standard
scripts, in particular things like floodplains on grass are possible, and oasis will occassionally be seen
on tundra. These are things that happen on earth, and so are 'realistic' but some may find undesireable
because they aren't normal in the sense of the default scripts. If you are one of these people, there is
the SmartMap Strict option, which to the best of my knowledge will not generate any combinations not found
in the default scripts. I recommend either SmartMap or SmartMap strict.

Bonuses: selects how bonuses are placed. You can choose from the standard placement or SmartMap placement.
SmartMap attempts to be fairer about how resources are placed strategically, and offers control over how many
resources you get. There are restricted placement options that place resources more like the standard
generator, or which obey additional rules enforced by the standard generator. I recommend SmartMap Normal.

Goodies: selects how goody huts are places. Options are similar to resources, but also includes an option
to disable goody huts entirely (SmartMap None). I recommend SmartMap Normal.

Ocean: determines the percentage of ocean to be used on the map. Note that selecting low ocean
levels may result in a map with significantly more useful land area than is typically expected for
a given size of map, and may cause a gameplay imbalance. There is a no ocean option which will produce
lakes but not ocean, and a no lakes, no ocean option which will produce an all-land map. You may also
choose from various options that will generate an inland sea or lakes rather than an ocean based map.

Hills: allows you to specify what percentage of the land area should be coverd in hills.

Peaks: allows you to specify what percentage of the land area should be coverd in peaks. The no block
options will prevent certain situations where a single peak blocks access to a resource.

Forest/Jungle: allows you to specify if you'd like more or less than the standard amount of forest and
jungle. Note that this option only affects the results of the SmartMap feature generator.

Rivers/Lakes: allows you to specify if you'd like more or less than the standard amount of rivers and
lakes. Note that this option only affects the results of the SmartMap feature generator.

Land Style: this option controls a couple of special features that are that are included to allow for a
greater map variety. First, you can control how round your continents will turn out. Rounder
continents have a tendency to be more fair, so very round is the default. As you transition to somewhat or
less round, you will get odder continent shapes which various people have requested, or find to be
'more realistic'. Independently, you may also choose a level of fragments. Fragments are little pieces
of land added randomly to the map which will appear as archipelagos or odd continent outgrowths, or tiny
islands. You can get all sorts of interesting growth patterns with these. However, since they may be
placed anywhere, they may violate the sea level guarantees of separation. They may completely join
continents, or make them reachable by galley. Nevertheless, some people wanted this as another way to
have more varied or realistic maps. The default for this option is very round, no fragments, which provides
the most guarantees of fair gameplay, particularly for multiplayer games. For single player games, you
may have fun seeing what interesting other types of maps you can get with this option.

Start Placement: selects how player start positions are determined. The SmartMap option attempts to do a
fairer job of placing players based on an analysis of the positions of strategic resources, and is also
more likely to place your initial settler on a tile with one tile of ocean access so that your capital can
build ocean buildings. It also prefers to place start positions on hills, because of the defensive bonus.
You can also select placement that will prefer inland or coastal starts either just for the human player,
or for all players. The 'new world' options will attempt to place all players in the eastern half of the
map

Wrap: allows you to specify whether the map wraps around the border in x and/or y. X wrapping is
the standard circumnavigatable globe you probably expect, but the other options may provide for
an entertainingly different gameplay experience. You can also select central pole with any of the above,
in which case you will find an additional 'pole' (icy area) in the center of the map. This is the
equivallent of polar projection.

Override width/height options: these options allow you to force SmartMap to generate a specific size of map
to your liking. This can allow you to generate absolutely huge maps beyond the size that your computer
memory can hold, so be careful with this. Multiply the width you select by the height you select to get
the total number of tiles your map will have.

Override separation: this option allows you to override the sea level control, and gives you the ability
to pick a continental separation of your liking. In particular, this makes it possible to ensure that
culture boundaries on separate continents will never touch, or to allow continents to come within exactly
one coastal tile of each other, without having to resort to using fragmented land.

All options now have an added 'smartmap random pick' option, which will choose among the most commonly
preferred options on that particular menu. This is particularly useful for override width and height where
the normal 'random' option will often return values too large and cause your computer to run out of memory.

3) Thanks
I'd like to thank the following people for their contributions:
Sirian : for answering a number of questions about how map scripts work
A Silly Goose @ CivFanatics : for early feedback
lordroy @ CivFanatics : for lots of feedback and screenshots
Victorvanwavere : suggestion to have a forest/jungle setting & what became land style
Randle @ CivFanatics : report of getting capital on wrap border
Silver14 @ Apolyton : report of too many very tall maps when x-wrapping and other early feedback
alms66 @ Apolyton : also suggested the forest/jungle setting, and other early feedback
Commander Bello @ Apolyton : manual width/height override and other feedback
skodkim @ Apolyton : assorted feedback
battists @ Apolyton : idea for this readme!
ShallowGrave @ CivFanatics : finding the overrides bug in 8.0
Sto : helpful discussion and bug finding
DG : regular feedback and bug reports
 
# Version History
# 9.0
# New land layout: earth. Selecting this will generate the earth, with source data
# from a blue marble projection. This is a highly accurate earth layout, with peaks
# and hills somewhat fuzzed to make for a more playable map.
# Also added: north america, south america, africa, europe, asia, australia
# All of the new maps are based on blue marble data, and so are going to be more accurate
# than they are going to be strategically well designed, and resource placement will
# be random rather than historically accurate. The current version will also have
# generated terrain, but the next version will probably include an option to use
# terrain sampled from blue marble data.
# New resource placement options: very many (places a _lot_ of resources), crazy, and
# crazy many. The crazy options place resources on any workable tile. This makes for
# a rather different gameplay experience.
# New terrain placement option: crazy which will place terrains randomly.
# New feature placement option: crazy which will place features randomly.
# Protected read / write of the smartmap config file so file errors won't cause a script
# error, and moved the config file to the user dir, which should help people not playing
# as admin on windows.
# Improved odds of generating flood plains in desert river tiles.
# Changed the grid infos to be compatible with mods with arbitrary number of map sizes, which
# will make smartmap compatible with mods that have more than the usual number of map sizes.
# This change also makes SmartMap maps closer to the usual size.
# Improved speed for calculating the altitude of plots on very land heavy maps.
# Call the python garbage collector and clean up memory usage to allow larger maps. I can
# now generate maps somewhere around 10% larger than before. I can now generate a map
# with twice the area of the usual huge, and start it on my 1G computer.
# Base CivIV = 200M, 280x84, 65% ocean = 500M, 280x84 0% ocean = 700M, that's roughly
# 13K or so per additional land tile allocated by CivIV, so keep that in mind when
# deciding on your ocean levels.
# Fixed a bug that tried to place continents too close to the map edges some times.
# Fixed a bug with regenerate map that occurs if you load a first turn savegame and then
# immediately try to regenerate it, thanks skovran for the report.
# Cleaned up code in player placement, improved speed.
# Added catches to player placement to prevent overlapping starts. If an
# overlapping start is somehow generated (a bug reported a couple of times),
# it will now fallback to standard placement mode. I'm unsure how an overlapping start
# can ever happen in the first place, but this should really guarantee it is impossible
# for it to get through and actually place the players that way.
# Fixed a bug that would sometimes misjudge whether or not to place additional players
# on a large continent.
# Improved the way continents are calculated to be more accurate in certain cases around
# blocking peaks, and improved performance.
# 8.7
# Added 3 great lakes options (few, normal, many). This will generate a map with a number
# of large lakes (large enough to typically have ocean tiles).
# Edge sea and corner sea were reversed in what they generated, fixed.
# Corrected the usage of cardinal directions, thanks to Sto for noticing. This turned out to
# be harmless, but would show up in the xml error log.
# Fixed bug with generating inland sea maps, thanks DG for noticing.
# Corrected minor math error in hill placement that was generating more hills than specified.
# Corrected disagreement between ocean percentage and size of central sea in such maps.
# Fixed problem with counting number of available sea resource spots that would place too
# many sea resources on certain styles of maps.
# Removed all used of CyPlot.isCoastalLand() because this method doesn't do what you'd expect.
# Forced central sea maps to keep the central sea away from the poles to prevent splitting
# the map in two.
# Speed up altitude calculation by simplifying the search for nearby ocean.
# Speed up wetness calculation by skipping water tiles.
# Speed up hash lookups by increasing step size.
# These speed improvements should knock about 10-20% off the total generation time.
# 8.6
# Correct the override width/height entries to reflect the 'standard'
# width and height numbers (previously this was rough, now it is exact).
# So these numbers now match what scripts that use the base XML produce.
# Added extra plains / extra grass options to the terrain options, which
# will produce more of that type of terrain.
# Added 'new world' coastal/inland start options, which will place start
# positions in the east (as new world) but also favor coastal or inland
# starts.
# Added 'no block' peak options. This forbids peaks from having ocean
# on both sides either vertically of horizontally. This prevents certain
# common cases of resource blocking that some people found annoying.
# Any such peak is reduced to a hill, as a result you will have less total
# peaks on your map.
# Improved performance of land placement in low sea width (removed unneeded checks).
# Improved performance of land placement in high sea width by spatially
# hashing the previously placed lands, and reducing the search for conflicting
# lands to nearby hash entries. This makes a huge difference on big maps with
# high sea levels selected (>50% faster).
# Improved distribution of hills and peaks so that small continents don't get
# a disproportionate amount of them.
# Tweaked up likelihood of floodplains slightly. You may see a bit more desert
# in temperate maps. If you don't like desert much you can of course turn it
# off or switch to tropical which has much less desert.
# Improved performance for placing resources on large maps with lots of resources.
# Overall performance improvements will no generate the most difficult type of map
# (huge, land heavy, high sea level map with 2 or more continents) in less than
# a minute on my p4m-1.8ghz.
# 8.5
# Performance improvements.
# Improved hill placement for a huge/65ocean/30hills map from 12 seconds to 2.
# Improved huge/65ocean/many resources from 90 seconds to 30.
# 8.4A
# Quick Fix for problem with placing players on pangea maps introduced in 8.4
# (would cause an endless loop, freezing civ iv on pangea and certain other
# maps where it couldn't decide the best continental distribution of players)
# 8.4
# Tweaked resource placement to obey minlatitude and maxlatitude for the stricter
# resource placement options (SmartMap few, and all clumping options).
# Tweaked resource rates some more based on forum feedback.
# Made some other adjustments to the fair resource distribution to simplify it, and
# to distribute resources a little more evenly in certain cases. Also improved
# chances that all expected resources will be placed.
# Added terrain options to place no desert, no snow, no snow/desert,
# no snow/desert/tundra, only plains, or only grass. If you wan't minimal
# snow/desert/tundra, play on tropical, and turn jungles to light if necessary.
# Added 'SmartMap restricted / most restricted' option to resource placement, which
# enforces every placement rule I understand, clumps both happy and health resources,
# and offers fewer (restricted)/much fewer (most restricted) resources in general.
# Move the version history for prior versions to end of file
# Added player/all inland/coastal placement options. Player inland will do its best
# to give the first player an inland start. Coastal prefers a coastal start. All
# attempts to do the same for all players (less likely to succeed, based on available
# map positions).
# Add single tile isles option. This make for a very wierd game in generic civiv, but
# was requested by people developing space/planet based variants.
# Fixed bug in override separation that caused it to behave always as if low sea level
# was selected instead.
# Added 'central pole' variation on all wrap options. This creates an icy pole in the
# center of the map, as if you were looking down on earth from above the north pole,
# also known as polar projection. This now allows you to have 0,1,2,3 poled maps,
# which you can envision as different ways to unwrap a spherical world onto a flat
# rectangular map.
# Fixed a small math error in determining the distance from the pole/equator which
# became obvious when working with the polar projection maps. This may cause you
# to see a little more snow/tundra than previously.
# 8.3
# Tweak tundra, snow, desert picking process to make more likely on small maps.
# Add new separation override to allow absolute control of continent separation.
# More rivers sourced from hills if there are few peaks.
# Added options for central, edge, and corner sea to the ocean selections to
# generate that style of map. Particularly, if you enjoy the 'central sea'
# map style, you can now generate that with SmartMap.
# Tweak resource rates to make whales not quite so common, and to address other
# resource rate comments reported.
# Place resources in placement order to try to prevent good map positions from
# being taken by resources placed in wrong order.
# Added SmartMap New World placement option. This will prefer to place civs
# only on continents in the eastern hemisphere. This option will default
# to ordinary smartmap placement if there are not at least 2 continents, or if there
# is not a continent at least 90% of which is located in the western hemisphere.
# 8.2
# Add option for 'no ocean' that will place nearly all land.
# Note: takes longer to generate high land count maps. Be patient.
# Add option for 'no ocean, no lakes' that will place all land.
# Improve the placement performance of smartmap placement on high land count
# maps by ruling out very low scoring placement positions earlier.
# This will improve overall map generation performance slightly.
# Small improvements to forest and lake placement, attempt to cure the
# rare 'all forest tiles' on normal forest problem (I've never reproduced
# this, but the chance that any such bug survived should be low.)
# Added 'smartmap random pick' option to all (smartmap controlled)
# menus, this makes a choice from among the more typically desirable
# options, and also stays random the next time you create a map,
# unlike the standard 'random' option, and even randomly re-picks if you
# choose to 'regenerate map'. I highly recommend using this in place of
# the standard 'random' option.
# 8.1
# Add Clump Health and Clump Both resource placement options.
# Clean up land placement code organization a little bit.
# Force release of spiral search memory, and reduce how far spiral search
# searches to improve performance.
# Fix the defaults for override with and height that were causing people
# to get out of memory errors.
# 8.0
# Use pickle to store last preferences.
# Tweaked the adjustment to rivers and lakes so that many rivers will be more
# noticeable, and few lakes will really cut down the amount of lakes.
# Fix resource rates for smaller maps.
# Allow start placement to place settlers on hills as well as flatlands.
# Weight hills for start placement appropriately to the defensive bonus.
# Add spiral search feature, this may be of use to other mapmakers, used in
# my script to assign fragments as belonging to the nearest continent. Spiral
# search is the most efficient method of doing a 'find nearest X' on any grid
# based map, assuming you don't have a list of all X available.
# On higher river levels, make hills more likely to start rivers.
# Make rivers a little more common in general. Make the automatic river for each
# sufficiently large continent always start from a hill or peak if one is
# available, or a random tile if no hill or peak is found.
# Improve river paths by using spiral search to measure distance to nearest ocean
# Don't flatten peaks on coast, as this can create interesting strategic issues,
# and also tended to leave far fewer than the expected number of peaks.
# Fix a bug in the start placement picker that was giving extra scores for the
# start plot when it was supposed to be scoring nearby plots.
# Adjust how fragments are generated, and the number of fragments for few/many,
# to make maps using smaller numbers of fragments look less chaotic. Fragments
# also now sort-of obey the sealevel rules: they are allowed to start anywhere,
# but can only grow into one neighboring continent, so they are more likely to
# create an archipelago type of continental extension, rather than so frequently
# causing continents to merge.
# New SmartMap Clump Happy resources option which distributes all happiness
# resources like the standard generator (in clumps so trade is more likely to be
# necessary, hence 'clump happy'), but other resources in the smartmap style so
# that the distribution is fairer.
# Corrected a small land counting problem that sometimes gave too much land for
# a given ocean percentage.
# Added a few new options to the override width and height to allow for generating
# random ranges of sizes, as a couple of people had requested that.
# 7.2
# Separate GoodyHut option from Bonuses, and add support for
# no/low/normal/high rates of goody huts.
# Add support for low/normal/high levels of resources (with low = 2/3rds
# and high = 4/3rds normal, same for goody huts).
# Rearrange all of the options to put the less commonly used ones at the end.
# Tweak up the default hills % slightly.
# Tweak up the river rate slightly.
# Make broad empty plains a little less likely by distributing hills better.
# Add some extra continent options, 1 per 2 players, 1 per 3, 1 per 4
# these may be easier for some to think about than picking an exact number.
# Added continent options 2 per player, 3 per, 4 per. These are good to use
# if you're using low sea levels to allow land blobs to merge.
# Improve the likelyhood that small numbers of continents are well separated.
# Improve the chance that player start plots will neighbor at least one hill.
# Added option to adjust the river and lake frequencies.
# Tweaked the width/height calculation so that super wide maps aren't as likely.
# Tweaked hills placement to make big empty plains less likely.
# Improved the resource distribution to get better strategic resource separation.
# Added no-continents option, which will result in all land being placed in
# fragments instead (looks suspiciously like 'archipelago').
# Fixed a bug in the counting of land resulting in fewer peaks than expected.
#
# 7.1
# After reading that Atlas can generate 1600x1600 maps (not that civiv can
# load them) decided to bump up the maximum width/height overrides so
# that if, in the future, civiv can handle such maps, SmartMap will be
# ready. Can now, hypothetically, generate 5000x5000 maps.
# Also, converted the units to map tiles, since that is probably less confusing
# for non map-scripters.
# Bump up the size of duel, tiny, small due to our allowance for more ocean
# and also because the actual chosen dimensions tend to result in a map with
# slightly smaller than the expected area.
# Areas Duel Tiny Small Standard Large Huge
# SmartMap: 80 140 220 360 560 860
# Standard: 60 104 160 273 416 640
# Make SmartMap strict default for feature generation.
# Tweak up the default ocean size due to the larger map size.
# 7.0
# Add new generation option: Land Style. Land style allows you to opt
# for less roundish continents, and also to allow for small independent
# land fragments separate from the main continents. When land fragments
# are generated, they may be generated anywhere, and may violate the
# sea level strategy guarantees, so use at your own risk. The less rounded
# continent options without land fragments will obey the sea level rules,
# but may be less fair.
# Based on a report of it being annoying to have your capital placed on
# the wrap-edge of the minimap, I now rotate the initial land placement
# to put the minimum number possible of land near the map wrap edge.
# While this does not guarantee this will not happen, it makes it highly
# unlikely.
# Further, made the first player always pick the center most start position
# if wrap is enabled. This should make single player games always have
# the human player start fairly well centered. This should absolutely
# guarantee that a single human player will not start with their capital
# on a map wrap edge.
# Fixed a couple of places where I did not consider y-wrapping correctly.
# But I guess no one plays y-wrap (or both wrap), or they'd have surely noticed.
# Introduce option 'SmartMap Strict' for feature generation. This will only place
# floodplains & tundra where the normal scripts would.
# Made floodplains on anything other than desert less likely, and oasis on tundra
# less likely for the non-strict feature generator.
# Enhanced the plot wetness calculator so plot wetness can be factored into more
# of the generation process.
# Improved the player placement rules to prefer not to place players initially
# on a stretch of land reaching into the ocean.
# Added ReadMeSmartMap.txt
# 6.1
# Tweak up number of hills for 'many hills'.
# 6.0
# Improved lake generation system, grows more lakes beyond one plot
# Numerous terrain relevance improvements. More desert&snow at high altitudes,
# less desert near water, etc.
# Changed continent computation to more accurately determine the large
# continents, which should as a side effect improve the fair resource
# distribution. Removed tiny continents which will never be player
# starts from the fair resource distribution.
# Improved tile wetness calculator to consider number of rivers and lakes
# touched by tile (a tile touched by fresh water on multiple sides is
# now more likely to shift from desert->plains->grass).
# Added a river originating at the highest point of each continent, which
# greatly improves the fairness of river distribution overall
# Changed forest/jungle options to allow independent choice of forest and
# jungle coverage (light,normal,heavy independently selectable for each)
# General code cleanup, reorganization, commenting
# Ran code through pychecker and cleaned all warnings, pychecker found a
# couple of legitimate bugs that may have improved the resulting maps.
# 5.1
# Improvements to fair bonus distribution algorithm.
# Fixed a typo bug causing python error on undefined edgeprob
# Tweak desert rate down slightly
# 5.0
# Work on refining the continent boundaries so water straights are not so
# obvious when you see the resulting cymap.
# Rewrite river generation, move it before terrain generation so terrains
# can consider rivers (allow grasslands and other 'wetter' terrain to be
# more common around rivers, as well as forests/jungle)
# Replace the standard river altitude function with one that seems to yeild
# better river paths
# Assorted terrain and feature improvements. Restored possibility of flood
# plains in desert, and made terrain tend to blob together more rather
# than appearing so completely random. Allowed hills to have terrain rather
# than always defaulting to grass (so desert/hills are now possible). I can't
# believe no one complained about that one.
# Found a major logic error in the player placement algorithm that was unfairly
# favoring near-lake placements (I has assumed CyPlot.isCoastalLand() was equivalent
# to asking: can I build a lighthouse?, this turned out not to be true).
# As a result, initial placement is much more likely to be coastal now, and
# this has a nice side effect of improving the average separation of players.
# Tweaked resource rates a little more based on various feedback.
# Replace standard lake addition function so we don't get lakes in odd places
# Futher performance optimization. The low and medium sea level options are
# now more than twice as fast, and the high sea level option is about 50%
# faster. I can now generate a huge map with low sea level in under a minute.
# After discovering that the map sizes in great plains are way off, resized my
# maps to the following settings:
# Duel Tiny Small Standard Large Huge
# SmartMap: 60 100 180 320 560 1000
# Standard: 60 104 160 273 416 640
# This is a bump up for everything except huge, which becomes slightly smaller,
# and thus hopefully usable by more people.
# Added related option to override the map width and height. You can now select
# your map size fairly precisely, including the ability to pick map sizes that
# are so large they may cause civiv to have problems. Up to 256x256 map positions,
# which would be a 1024x1024 map, with an area of over 1 million (compare to huge at
# an area of 16 thousand!) If you are able to generate a map of even 128x128 I'll be
# shocked. Nevertheless, the option is there. So no complaining that I made huge
# smaller! Just set your game to huge, then override the size to whatever you want.
# Or for a bizarre experience, set your map to duel, and override the size to whatever
# you'd like. For kicks I generated a 256x8 map, and that was just barely startable
# with my 1 Gig of memory. Minimap looks ridiculous.
# 4.2
# Increase goody hut count slightly, particularly on maps with lots of land
# 4.1
# Slightly refined smartmap resource placement to make distribution
# fairer between continents, and not to allow so many duped resources
# within one city radius
# Small upward tweak to resource rates
# 4.0
# Overall performance improvement:
# Now down to about:
# <5 seconds for duel,tiny,small
# 10 seconds for standard,
# 40 seconds for large,
# ~2 minutes on huge
# On a 1.8Ghz Pentium-M with 1Gig
# Optimize land placement speed by remembering all potential growth positions
# rather than looking for them randomly.
# Optimized and improved player placement function. No longer makes certain
# rare placement errors, and the speed is dramatically better, particularly
# for continents with a large number of players to be placed (pangea).
# Optimized bonus placement. This used to get very slow on large/huge maps due
# to making a pass through all tiles for each bonus type. Now makes one pass
# through all tiles and caches the result.
# Changed the player option read function to take a string rather than an index
# to make it clearer in code, and also make it impossible to break when
# changing the order of options in the list.
# Land areas are 20,40,90,210,500,1200 (duel,tiny,small,standard,large,huge)
# Compared to 15,24,48,88 ,154,252 for great plains.
# Smartmap rounds down calculated width and height,
# so the areas are not quite as big as they seem,
# but large and huge are noticeably bigger. This allows for more flexible
# use of the ocean coverage option. Note to firaxis: it would be a better
# design if in the expansion pack or a patch you passed the expected land
# area to the grid size function from the current mod! Then maps could
# dynamically size themselves to the expected land area and provide fair
# gameplay regardless of other chosen settings (and be compatible with mods
# that make use of different sized maps ... no more hardcoding like in
# great plains)!
# Note: I can just barely start a huge game with 1Gig memory. This implies
# firaxis is using somewhere in the neighborhood of 32k memory per tile.
# Good grief, what on earth are they storing!
# 3.2
# Add options for specifying weight of initial jungle/forest cover
# More performance optimizations
# 3.1
# Fix rare issue with placements landing too close together
# Slight tweaks to placement scoring to value early resources higher
# Fix issue with placements on separate continents too close together
# 3.0
# Re-enable climate selection, which may or may not be honored
# Restore 36-continent option, accidental deletion
# Create a better default option for each selector
# Un-smooth edges near poles
# Properly handle allowing continents to wrap on wrap axis
# Performance optimizations by reducing function call counts
# Custom player placement rules
# Complete replacement of bonus system
# Separate out goody hut placement and put in correct order
# Cleaner debug print messages
# 2.0
# Reduce bonus percentage for SmartMap bonus
# Allow standard bonus distribution as an option
# Bias width,height towards wrap direction
# un-straight-edge where continents meet
# SmartMap terrainGen allows more desert
# SmartMap featureGen suggests more forest and jungle
# Support for random ranges in number of continents
# 1.0
# Initial version
 
Thank you! I'm going to try this one for sure and I'll give you feedback afterwards.
 
GoUtes53 said:
Is there a reason why you cannot select parameters for Climate?

Climate is not obeyed by some of the terrainGens I included. However, I've fixed that for version 3 and will post that soon (probably today ... i'm just finishing up an alternative player placement ruleset).
 
Probably the most important new feature is that SmartMap now has custom player placement rules, which I think are somewhat fairer than the existing rules.


# Version History
# 3.0 Re-enable climate selection, which may or may not be honored
# Restore 36-continent option, accidental deletion
# Create a better default option for each selector
# Un-smooth edges near poles
# Properly handle allowing continents to wrap on wrap axis
# Performance optimizations by reducing function call counts
# Custom player placement rules
# Complete replacement of bonus system
# Separate out goody hut placement and put in correct order
# Cleaner debug print messages
 
With this release, I think this map script is pretty close to done. Mostly this release features improved performance (generate maps faster), and a few minor bug fixes. I've had relatively little additional feedback or suggestions, so unless someone comes up with a good idea to add or finds a bug.....


# 4.0
# Overall performance improvement:
# Now down to about:
# <5 seconds for duel,tiny,small
# 10 seconds for standard,
# 40 seconds for large,
# ~2 minutes on huge
# On a 1.8Ghz Pentium-M with 1Gig
# Optimize land placement speed by remembering all potential growth positions
# rather than looking for them randomly.
# Optimized and improved player placement function. No longer makes certain
# rare placement errors, and the speed is dramatically better, particularly
# for continents with a large number of players to be placed (pangea).
# Optimized bonus placement. This used to get very slow on large/huge maps due
# to making a pass through all tiles for each bonus type. Now makes one pass
# through all tiles and caches the result.
# Changed the player option read function to take a string rather than an index
# to make it clearer in code, and also make it impossible to break when
# changing the order of options in the list.
# Land areas are 20,40,90,210,500,1200 (duel,tiny,small,standard,large,huge)
# Compared to 15,24,48,88 ,154,252 for great plains.
# Smartmap rounds down calculated width and height,
# so the areas are not quite as big as they seem,
# but large and huge are noticeably bigger. This allows for more flexible
# use of the ocean coverage option. Note to firaxis: it would be a better
# design if in the expansion pack or a patch you passed the expected land
# area to the grid size function from the current mod! Then maps could
# dynamically size themselves to the expected land area and provide fair
# gameplay regardless of other chosen settings (and be compatible with mods
# that make use of different sized maps ... no more hardcoding like in
# great plains)!
# Note: I can just barely start a huge game with 1Gig memory. This implies
# firaxis is using somewhere in the neighborhood of 32k memory per tile.
# Good grief, what on earth are they storing!
# 3.2
# Add options for specifying weight of initial jungle/forest cover
# More performance optimizations
# 3.1
# Fix rare issue with placements landing too close together
# Slight tweaks to placement scoring to value early resources higher
# Fix issue with placements on separate continents too close together
 
For anyone interested in this script, have a look at the top of the thread. I've updated the first post with a shot of the new options available in v4, and the sample generations post with some samples from v4. Hopefully this will give everybody a clearer idea of what you get with this script lately.
 
Ah, those new screenshots are just what I needed to be convinced to download this script. It looks great--that last row of maps looks especially interesting.

The only thing that really concerns me at all is that, although very much improved upon from previous versions, the generation methods you're using are still leaving the landmasses a bit predictable. A simple yet effective enough fix for it might be have a "Continent Size/Shape" option with "Even" and "Uneven" choices. The "Even" choice would generate maps they way they already are now, while "Uneven" would omit a number of the continent-dividing straights, creating a more unpredictable (and interesting) layout that will result in a wider range of strategic scenarios.
Really, though, all that's just based on the assumption that your script works by first building a big pangaea, and then running lines of sea/ocean across it in any one of a number of patterns.



At any rate, good luck with any further modifications you might make, as well as with any other projects you may persue!
 
A Silly Goose said:
Ah, those new screenshots are just what I needed to be convinced to download this script. It looks great--that last row of maps looks especially interesting.

The only thing that really concerns me at all is that, although very much improved upon from previous versions, the generation methods you're using are still leaving the landmasses a bit predictable. A simple yet effective enough fix for it might be have a "Continent Size/Shape" option with "Even" and "Uneven" choices. The "Even" choice would generate maps they way they already are now, while "Uneven" would omit a number of the continent-dividing straights, creating a more unpredictable (and interesting) layout that will result in a wider range of strategic scenarios.
Really, though, all that's just based on the assumption that your script works by first building a big pangaea, and then running lines of sea/ocean across it in any one of a number of patterns.



At any rate, good luck with any further modifications you might make, as well as with any other projects you may persue!


That's actually not how it works. It decides the number of continents (based on your chosen options), then allows them to grow randomly. Have a look at the first and last entries on row 2: The first entry is 3 continents, the right two of which are close together and grow up to a straight, but the left hand one is just sitting off on its own. Similarly the last picture is 4 continents, with the 3 on the right growing until they get too close to each other, but again, the lonely left continent just sitting off by itself.

If you have sea level medium/high then continents are forbidden from growing into each other, and so continents that happen to start close together may wind up with just a straight between them. On the other hand, with sea level low, they are not forbidden from merging, so you'll see no straights, but you may not get the exact number of continents you asked for.

Anyway, the point is that what you are seeing is the continents pushing up against a forbidden growth zone as they grow. The forbidden zone has to be there for strategic reasons, but I'll look into whether I can do anything to make the straights a little less likely/obvious. To explain their purpose:

low sea level = no forced division of continents = may (or may not) have contact with all civs immediately

med sea level = enough division to usually forbid war (there is a rare apparent civiv bug that allows galleys to cross a single ocean tile)until galleon, but allowing for limited contact between civs when their coastal cities grow enough culture to touch culture borders

high sea level = enough division to prevent contact between continents until optics extends the sight range, and definitely forbids war until galleon.

So, if you do not like the straights, and are willing to accept not getting the exact continent count you ask for, just play on 'low' sea level. If you want a lot of ocean, it is perfectly ok to combine low sea level with high ocean percentage (in fact, high ocean % is another option that will tend to discourage straights from existing). Have a look at the third row of pictures (low sea level). If you look carefully, you may be able to tell that many of those shots are of multiple continent masses that have merged together (with the clue being there are subtle water lines almost causing division). Have a look at the middle picture on that row. That's definitely 4 continents, the central 2 of which have merged. And though it is probably hard for anyone but me to tell, the last picture on that line was definitely 6 continents which have merged into 2, each containing 3 of the original continents

Thanks for your comments, please do let me know if you have others. I'm very happy to try to fix the things that people don't like.
 
I can live with that. I was aware of the sea level thing, too, though I just figured it effected the "width" of the straights to create the merged effect.

You're right though--it's just a matter of playing with the settings more, and the straights aren't that big a deal anyhow :)
 
A Silly Goose said:
I can live with that. I was aware of the sea level thing, too, though I just figured it effected the "width" of the straights to create the merged effect.

You're right though--it's just a matter of playing with the settings more, and the straights aren't that big a deal anyhow :)

Well, in any case, I'm trying to work on the land generation a bit to at least make the straights less straight and obvious in the next version.
 
I just started my first game with your script, and it looks very nice. One thing I noticed, though was a tile which is "flood plains/plains". I'm not complaining or anything: I just thought you'd want to know
 

Attachments

  • floodplainsplains.JPG
    floodplainsplains.JPG
    36.4 KB · Views: 4,166
I've been getting some really nice maps from this but they take longer to load (because the script is complex I guess).
 
roidesfoux said:
I just started my first game with your script, and it looks very nice. One thing I noticed, though was a tile which is "flood plains/plains". I'm not complaining or anything: I just thought you'd want to know

I allow this. Flood plains is a 'feature' ala oasis which adds some food to whatever terrain it is on. It adds a sort of green grass overlay to the tile. It's one of the ways you can get meaninfully different maps from my generator than from any of the standard generators. If you don't want this to occur, just set feature generation to standard.

Update: I'm considering adding a 'smartmap strict' option to the various generators that will use the smartmap placement algorithm, but enforce all standard map restrictions. It may take me a little time to work out what 'rules' I'm violating though (the rules unfortunately aren't documented anywhere obvious to me). So if anyone knows one of the following, please let me know:

a) a place where all the feature/bonus/etc placement rules for maps are documented
b) any 'rules' violation you notice in my script (examples like the above flood plains)

Thanks.
 
Rabbit_Alex said:
I've been getting some really nice maps from this but they take longer to load (because the script is complex I guess).

Yes, a large map can often take ~30 seconds to generate on my 1.8ghz pentium-m notebook, and a huge can take around 2 minutes. I'm looking into what I can do to make it faster, but unfortunately around 90% of the time is eaten up in preventing the continents from colliding in med/high sea level, and i've not yet come up with anything to do about that.
 
Fantastic effort here.

I've been waiting for someone to create a more interesting map script.

Many thanks!
 
Top Bottom