DOMINIONS 3 Semi-Random Map Enhancer - ReadMe
SemiRandom ver 0.80
Author: Ballbarian
Home Page: http://www.dom3minions.com/~semirand/
Submit Files: semirand@dom3minions.com
Should run on Windows & Unix systems. -- I have not tested it on Unix!
Written in YABASIC, but it is not required to run this program.
It will be needed if you want to fiddle with the source code.
What it is:
SemiRandomizer is a project inspired by Gandalf Parker's "Semi-Random maps" article at:
http://www.dom2minions.com/~minion/SemiRandom.shtml
More specifically, it was inspired by this quote:
"Anyway, I had a thought about a project which might be able to blend the best of both methods. Variations would be created in pieces of .map code, then randomly selected to paste together into the downloadable file. There could be a Dragons Den province, Wooing Woods, or the Fast Food Forest. The population, structures, units, magic sites can all be designed around a name. It could be ever growing as small 1-province files were added around single themes. Werewolves, or vampires, or trolls, or dryads... well you get the picture.
With enough province files a randomly generated map could be unique each time but still be abit more logical about what you run into. In the following of my usual stuff a map image selected from my daily randomly-generated ones could be used over and over. Or maybe a GOOD map done by someone with a paint program. But possibly some intelligent coding could be done to read a .map file and do the bit-math of the terrain commands to match a province description to proper locations. Such as, the Dragon Den might have a group of dragons in a mountain castle with mountain-type independent population and mountain-type magic sites. The program could search for a mountain terrain province to put that into." - Gandalf Parker
This is my take on his fine idea. :)
What it does:
SemiRandomizer (SR) takes an existing map file that you specify and appends pieces of map code to it. These pieces are stored in what I have named "GAN" files in honor of Gandalf's inspiration. You specify what percentage of the provinces to modify and SR will select that many random locations on the map and try to match them up with existing gan files. Several factors influence what constitutes a match: terrain, terrain patterns, climate, province size, and uniqueness.
Setting it up:
Note: This covers a windows system, I am not familiar with Unix, though it should run under Unix as well.
1. Download & unzip the files into the directory of your choice. I named mine "SemiRandom".
2. You should now have the following:
GAN_BIN -directory where the province files reside.
NAME_VAULT -directory where the data lists reside.
GanList.txt -list of gan files that SR can use.
NameGenTest.yab -simple script that I use for testing name generation.
NameList.txt -list of DATA files that SR can use.
Orig.cfg -a default config in case you bugger yours. :)
SemiRandom.cfg -where SR settings can be changed.
SemiRandom.exe -Executable version. Remove .exe extension for Unix.
SemiRandom.yab -The YABASIC source code.
3. Open SemiRandom.cfg with any text editor and change line #1 to your systems path to the directory in which you placed the above listed files. If I unzipped mine from the desktop, my path would be:
C:\Documents And Settings\Me\Desktop\SemiRandom
Hopefully in the near future there will be a simple setup program to take care of these steps or maybe a kind soul will take advantage of the automation features and run it from their server for an online version.
I just want my map SemiRandomized:
==================================
Just paste a copy of your map file in the same directory as the executable (SemiRandom.exe) and run the program. With the default configuration, you will be asked to supply the name of the map file that you wish to SemiRandomize. Enter the name of your file, but leave off the extension (.map). You will get informative messages and a fancy, high tech, animated 2D progress indicator followed shortly by a simple "Have a Nice Day!" and a program finished message. Hit enter and the window will close. Your map file is now SemiRandomized.
I just want to fiddle with SR's settings:
=========================================
Ok, here is a line by line map of the SemiRandom.cfg:
1. Path$ > Path used by SR to find your gan & data files.
2. fiddlePercent > Percent of provinces in the selected map file to attempt to modify.
3. fiddleName > 0=Don't mess with names. 1=Let GANs handle the names.
4. showNeed > 0=Don't show need text in map file. 1=Show me the need!
5. hotPercent > Percent of provinces in the south considered hot climate.
6. colPercent > Percent of provinces in the north considered cold climate.
7. cldband1 > Real world style climate. Hard prov #'s from 1 to value = southern cold.
8. tmpband1 > Real world style climate. cldband1 to value = southern tempearate climate.
9. hotband > Real world style climate. tmpband1 to value = hot climate. (Equator)
10.tmpband2 > Real world style climate. hotband to value = northern temperate climate.
11.cldband2 > Real world style climate. tmpband2 to value = norhtern cold climate.
12.map$ > Reserved for external app to append a map name for modification.
Just a few comments:
Set fiddlePercent between 1-100. 1 will barely touch the map if at all. 100 will attempt to potentially modify most if not all of the provinces with the limit being the supply of matching GAN scripts. This can be set above 100. The effect will be to allow SR to spend more time trying to find a suitable match.
Setting showNeed to 1 will cause SR to print a message in the map file whenever it picks a province for modification, but no GAN file exists in the GAN library that matches the terrain, OR it only had UNIQUE type GANs that had already been placed elsewhere in the map file.
Ah, Climates. The default setting is to use hotPercent & col(d)Percent. If you decide to use the "band" method, then you need to set these 2 to -1. The opposite is true if you decide to switch back to using the default method. In this case you would set the 5 band lines back to -1. Or just turn the climate option off alltogether by setting them all to -1. This would cause GAN scripts marked for temperature zones to not be placed however.
The last line (map$) is intended to be reserved for an external application to direct SR to a map file, but it can also be used as a way to bypass the map selection from within the program itself. This is useful when testing GAN libraries and name sets when you are repeatedly processing the same map over and over.
How to add GAN scripts (province files):
========================================
Ok, I envision an online repository where GAN script authors can upload their wonderous creations and others can download and drop a single GAN into their existing library, or entire sets. As it is now this is a simple two step process:
1. Save the downloaded GAN files in your SemiRandomize/GAN_BIN directory.
2. Open GanList.txt and paste the names of the files into the list (minus the ".gan" extension).
That's it. This can be really easy if the GAN author will include a text file with a prepared list of the GAN filenames that a user can simply copy and paste into their own list.
***Update***
Gandalf has kindly donated server space. The SemiRandom home page is now at:
http://www.dom3minions.com/~semirand/
Gan, Data & Set files may be submitted to:
semirand@dom3minions.com
How to add DATA word lists for names & items:
=============================================
This is a similar process to adding GAN files.
1. Save the downloaded DATA files in your SemiRandomize/NAME_VAULT directory.
2. Open NameList.txt and paste the names of the files into the list (minus the ".txt" extension).
How to author GAN scripts (province files):
===========================================
It is assumed that you are familiar with map commands and map editing. The format is pretty simple for editing GAN scripts and there are just a few rules & suggested steps.
1. Look at existing GANs as a guide.
2. You do not need to add #nostart. This is added automatically.
3. You do not need to add #setland or #land. This is handled in the filename. (see below)
GAN FILENAME FLAGS:
-------------------
_HOT_ Hot Zone (southern map)
_CLD_ Cold Zone (northern map)
_TMP_ Temperate Zone (mid map)
_IS_ ISLAND
_LK_ LAKE
_VC_ VOLCANO
_PN_ PENN
_VL_ VALLEY
_CO_ COAST
_LO_ LOST
_R_ REPLACE - (#land) Set active prov & kill everyone in it. Used to REPLACE randomly placed units.
_A_ ADD - (#setland) Set active prov. Units added to existing.
_M_ MULTIPLE - More than one of a single province gan may be added to the map file.
_U_ UNIQUE - Once a single instance of the province gan is "picked", it can not be picked again.
_S/L/N_ Small/Large/Normal
_PLN_ Plains
_SEA_ Sea
_WTR_ Some water
_MNT_ Mountain
_SWP_ Swamp
_WST_ Waste
_FST_ Forest
_FRM_ Farm
_MST_ Many Sites
_DEP_ Deep
_CAV_ Cave
_FS_ Fire Site
_AS_ Air Site
_WS_ Water Site
_ES_ Earth Site
_SS_ Astral Site
_DS_ Death Site
_NS_ Nature Site
_BS_ Blood Site
_PS_ Priest Site
_EMT_ Edge Mountain
SPECIAL GAN COMMANDS:
---------------------
@
->select a random line from the following lines to follow this .
Example #1:
@3 commander
"Minotaur Lord"
240 -- Priest
-- no commander
Result= "#commander 240 -- Priest" <- 1 in 3 chance to be printed in map file.
Example #2:
@1 landname
"Icky Swamp"
Result= "#landname "Icky Swamp" <- 100% chance to be printed in map file.
Example #3:
@2
#mag_astral 1
#mag_fire 1
Result= "#mag_fire 1" <- 1 in 2 chance to be printed. Note the space following "2 ".
Example #4:
@2 units
10 17 -- Archer
-- no Archer
Result= "-- no Archer" <- 1 in 2 chance to be printed. ie 50% chance of these units.
@RANDOM
->select a random name or item to follow .
Example #1:
@RANDOM landname FOREST
Result= "#landname "Simple Woods"" <- Rnd name from DATA1 + rnd name from DATA2.
OR
Result= "#landname "Ohmyg Forest"" <- Generated name + rnd name from DATA2.
Example #2:
@RANDOM comname COMMANDER
Result= "#comname "Kullray"" <- Generated name.
Example #3:
@RANDOM comname COMMANDER
@RANDOM additem HELMET
@RANDOM additem 1HANDWEAPON
@RANDOM additem SHIELD
@RANDOM additem ARMORHVY
@RANDOM additem BOOTS
@RANDOM additem MISCITEM
Result= <- Random item from the named item list.
#additem "Starshine Skullcap"
#additem "Jade Knife"
#additem "Weightless Tower Shield"
#additem "Silver Hauberk"
#additem "Boots of Stone"
#additem "Bracers of Protection"
(NOTE: I recommend only 1 or 2 MISC items as duplicates are possible!)
A simple province tutorial: (WORK IN PROGRESS!)
I have an idea for a simple, common province. I want a scattering of human medieval-type plains provinces. Boring, I know. The thing is, I want them to have good priest support and a little bit of variety. Since I chose to use plains (a common terrain) and I intend to allow multiple instances of this province appear in the map, I will need to mix it up a bit. But first, let's create the GAN file.
A GAN file is just a text file (.txt). They can be opened with any text editor. Before we create the file, we need to know what to name it. The name of the GAN file is where all of the flags are that tell SR how to handle it and where this province can be placed in a map.
I create a text file and name it as follows:
BALL7_TMP_M_R_N_PLN_.gan
Here is a break down of the name and what the pieces mean:
BALL7 = My chosen author name followed by an ID (7) to help me quickly identify a given province and to prevent conflicts.
_TMP_ = This is my chosen climate (Temperate). Any of the _TAGS_ can be placed anywhere in the filename and work.
_M_ = Multiple, so that this province can appear more than once in a given map.
_R_ = I want to replace the inhabitants created by Dom3 for this province.
_N_ = Normal sized provinces. This could be excluded (it's value is 0), but I like it for clarity.
_PLN_ = Plains is the terrain to match this custom province to.
Now SR will know where to put my GAN if an opening comes up.
With the file open in a text editor, I can start adding stuff. :)
I want to assign names to my provinces. Normally in a map file you would use something like:
#landname 101 "Frog Belch Prairie"
We are not making it for province #101. So instead, to name a single Unique province in a GAN, we would use:
#landname "Frog Belch Prairie"
For this province, we want Multiple instances, so we have two ways we could do it. One is to choose from a finite list that we define in the GAN:
@3 landname
"Frog Belch Prairie"
"Dead Toad Prairie"
"Prairie of Buried Toes"
The second option is to use the DATA libraries:
@RANDOM landname PLAINS
Option 1 would return one of the three defined names and print:
#landname 391 "Dead Toad Prairie"
Option 2 could return a huge variety of possible names and will be the option that I choose for my GAN.
(WORK IN PROGRESS!)
How to author word lists for names & items:
===========================================
You can define your own wordlists. Here are the rules:
1. Must be named like _DATA1.txt & _DATA2.txt
for use with @RANDOM landname .
2. Must be named like - _DATA1.txt for use with
@RANDOM additem
- .
3. MUST be named like _DATA1.txt for use with
@RANDOM comname .
Note that comname is different in that regardless of which file it points at, it will still generate a random string from a random library. The default is to point to COMMANDER (COMMANDER_DATA1.txt).
The word lists are just simple text files. Look at the existing ones and you will see how simple they are to modify. Adding new files is just a matter of getting the _DATA1/_DATA2 thing down and remembering that if you create GANs pointing at these new word lists, you will need to include them with the GANs as a set so that others may enjoy your fine work. If you do not, then SR will crash and burn when it tries to generate a name for your special provinces.
External Automation:
====================
(WORK IN PROGRESS!)
Credits:
========
Gandalf for his concepts and helping me to reach a little further than I would have otherwise.
Edi for allowing me to include pieces of his content rich Faerun map file as special provinces.