Difference between pages "History of Dark Knighthood" and "Adding Cities and Dungeons to the IVAN World Map"

From IvanWiki
(Difference between pages)
Jump to navigation Jump to search
m
 
 
Line 1: Line 1:
{{Fiction
+
''This section is about adding dungeons to the world map. If you would like to learn about the specifics of dungeon building, see [[Dungeon Building]].''
|author=chaostrom
 
}}
 
  
It began with the first war of the gods. [[Mortifer]] rose against [[Valpurus]] for supremacy, and they were joined by other gods. [[Legifer]], chosen by Valpurus, and [[Atavus]] were the first to aid Valpurus. [[Infuscor]] and [[Cruentus]], though they weren't agreeable, joined Mortifer. [[Loricatus]], though he would have liked to join Valpurus, was forced to stay neutral, forging weapons and armor for all. It was at the height of this war, that the artifacts came to be, for the gods soon found themselves in a stalemate, so they got underlings to battle for them. These underlings were weak, puny mortals, so they gifted them with artifacts and aid when they prayed. Valpurus elected a High Priest, and gave him the [[Justifier]]. Legifer asked for an explosive mace to be forged. Cruentus, to spite Loricatus, suggested to Mortifer that he create a deadly mace himself, because Valpurus had Justifier and Mortifer had nothing. So, calling upon Infuscor, Mortifer imbued the [[Neerc Se-ulb]] with the destructiveness that was his very nature. The Justifier was still very mighty though, so the chaotic gods sought various ways for their underlings to defeat the High Priest. Infuscor came up with thunder hammers. [[Cleptia]] got [[Saal'thul]] and whips of thievery. [[Scabies]], chameleon whips. When [[Sophos]] asked for [[Vermis]], Infuscor asked for [[Mjolak]]. All this kept Loricatus very busy.
+
__TOC__
  
After a while, there came a brief reprieve, a lull in the course of the war, the eye of the storm. During this time, many mortals, seeking protection, became devout worshipers. Some of them were named champions, a parody of the High Priest of Valpurus. It was during this time, that the Order of Dark Knights came to be. The first Master Dark Knight was given the Neerc Se-ulb, and he wrought much destruction with it. A powerful man, pride was his undoing. Believing that none could defeat him, he sought out the High Priest and gave battle. At first, it seemed to be going his way... until his mace-arm was severed. Mortifer was enraged at the loss of Neerc Se-ulb, and when he managed to reclaim it, he vowed that no mortal should wield it unless he was become a champion of Mortifer, which was harder now than it was before, for Mortifer had lost what little trust he had in man. The second Master Dark Knight, the son of the first (for in the beginning titles were inherited) vowed that he would have vengeance against the High Priest, and led the Dark Knights to victory after victory, for few remained steadfast in the beats of the battledrum of Cruentus, and those few fell to Mjolak in the hands of the Master Dark Knight. Before long, the Justifier met Mjolak, and, the High Priest being of venerable age, fell to the mind-numbing shockwaves of Mjolak. It seemed that Mortifer had won, but wait! There was a glow, and the High Priest returned to life! He gave a mighty shout of prayer, and behold! [[Angel|Inlux]] the Archangel of Valpurus came to earth in a flash of light, and flaming sword in hand! For while Cruentus was busy with the Order of Dark Knights, the lawful gods secretly commissioned Loricatus to forge flaming swords, and Loricatus had made nine of these. The lawful archangels each received one, and Valpurus kept one for himself, a mighty blade of [[valpurium]], +10. The Dark Knights were routed, but now the secret was out, and Infuscor, through Mellis, managed to secure the other two flaming swords, and they were given to the third Master Dark Knight, [[Xinroch]] was his name. He did what no mortal achieved before, the friendship of the mages of Infuscor and the Dark Knights of Cruentus, and in this time the Dark Knights became smarter, and the mages stronger.
+
== Introduction ==
  
Xinroch was highly successful in his campaigns, and it was during his life that the Order of Dark Knights truly flourished. Xinroch made good use of mages, for now that they were tougher, they were no longer restricted indoors, and a few always accompanied the Dark Knights when they went to battle. Even [[Ischaldirh]], champion of Infuscor since the beginning of the war and a true advocate of "mind over matter", saw good in this, for now they had a greater range of studies. Especially the testing of new spells and formulae on enemies encountered. This also allowed necromancy to come into its own right. However, Xinroch was still a mortal, and over time he aged, and weakened. Finally, when he was slain in battle, they put him away and set his second-in-command to guard his tomb, awaiting an appropriate moment to be reborn. One of Xinroch's flaming swords was lost, however, so the mages crafted a shield for him. That devastating battle was not the last in the war, yet it signaled the end, and soon open war ceased.  
+
This is a brief guide explaining how to include your customized dungeons on the IVAN world map.
  
The Order of Dark Knights weren't finished, however. When the High Priest of Valpurus founded [[Attnam]] and Attnamese conquests began a few decades later, many of those enslaved sought freedom and vengeance, and found it in the Dark Knights. Neerc Se-ulb being in the possession of Mortifer, Mjolak (along with most semi/artifacts) lost in the war, a flaming sword in Xinroch's lifeless hand and the other lost, the Dark Knights turned to a more militaristic approach, and adopted the long swords of the Cossacks as the primary weapon. Decent damage, good reach, not too hard to master and easily mass produced, it became their standard weapon and remains so to this day. Grand Master Dark Knights, however, seeking the glory of the First Masters, sheathed their long swords and picked up other weapons.
+
== Three key steps ==
  
The present Grand Master Dark Knight, [[Golgor Dhan]], is a man of unknown age. His birthplace is unclear, but it is known that he was originally a guard of Attnam. He maintains a guard's appreciation of large swords, and is an expert with the largest swords in existence - two-handed scimitars. He has trained with those to the point of wielding them single-handedly, and delivers slashes with a zealous ferocity also carried over from his guard days. Of the First Masters, he is most like Xinroch. Although he disdains anything but straight forward one-on-one combat, he sees the usefulness of the mages.
+
There are three key steps to getting your dungeon to appear on the world map.
 +
 
 +
=== Your dungeon data file ===
 +
 
 +
Your dungeon data file should reside in <code>Script/dungeons</code> where it will automatically be picked up by the game when it creates the world map. It should contain the kinds of things described in the article on [[Dungeon Building]]. Most importantly, the [[#Dungeon_Building:DungeonControlVariable|<code>Dungeon</code>]] control variable will need to be the <code>DEFINED_VALUE</code> you set in <code>define.dat</code>, which will help link the dungeon to its overworld terrain.
 +
 
 +
=== define.dat ===
 +
 
 +
You will need to define the name that the IVAN script files will use to recognise your dungeon. Therefore you will need to include a <code>#define</code> with the other dungeon names in <code>define.dat</code>.
 +
 
 +
Anything you put in <code>define.dat</code>, you can refer to in your other script files. This is a general rule and is applicable to any of the data files. For example, if you want to create another config of a guard, then you just put a new <code>#define</code> in <code>define.dat</code>, and you can now refer to it in <code>char.dat</code> and your dungeon data file. So it follows that you can <code>#define</code> your own dungeon name, which will be essential when we come to link the dungeon data file to the terrain data file.
 +
 
 +
Stick to upper case lettering when adding a new <code>#define</code>, and be sure to put an underscore when separating words. Be sure items that are enumerated follow a nice numerical sequence e.g. <code>1, 2, 3, 4, 5;</code> or <code>2, 4, 8, 16, 32;</code>, rather than <code>1, 2, 5, 7, 8;</code>.
 +
 
 +
For programmers: note that if we wish to refer to a particular dungeon in the ''code'' itself, for example to do something special in <code>game.cpp</code>, then the code will need to know about it, and so a <code>#define</code> will also need to appear in <code>ivandef.h</code> before ''compiling'' the game.
 +
 
 +
=== owterra.dat ===
 +
 
 +
The data file <code>owterra.dat</code> contains the "over-world terrains" of the IVAN world map. These are so named, because they become the pictures that sit over the ground terrain on the world map. They denote the places - cities or dungeons - you can visit when adventuring in the world map, and so they need to be linked up to the dungeon data files.
 +
 
 +
Here are some pictures showing famous owterrains:
 +
 
 +
{| class="wikitable"
 +
! New Attnam
 +
! Attnam
 +
! Gloomy Caves
 +
|-
 +
| [[File:Ownewattnam.png|80px]]
 +
| [[File:Owattnam.png|80px]]
 +
| [[File:Owgloomycaves.png|80px]]
 +
|}
 +
 
 +
As of IVAN 0.50.6, there are exactly 32 slots (<code>dungeonAA</code> up to <code>dungeonBF</code>) available for use as the over-world linkages to your dungeon. Simply pick one out that is free and modify it to link together with your dungeon data file by specifying which <code>DEFINED_VALUE</code> you introduced in define.dat
 +
 
 +
This table shows the control variables for each over-world terrain. You can configure your over-world terrain with the ground terrain type of your choice, and a bunch of other things besides.
 +
 
 +
{| class="wikitable"
 +
! Keyword
 +
! Values
 +
! Description
 +
|-
 +
| <code>BitmapPos</code>
 +
| <code>x, y;</code>
 +
| This determines the bitmap position of the picture of the terrain in <code>WTerra.pcx</code>. You can create your own picture by modifying <code>WTerra.pcx</code>.
 +
|-
 +
| <code>NameStem</code>
 +
| <code>"string"</code>
 +
| This is a string, beginning with a lowercase word, usually a noun or an adjective, for example, "mighty cathedral" or "cave entrance".
 +
|-
 +
| <code>UsesLongArticle</code>
 +
| <code>true</code> or <code>false</code>
 +
| Specify whether to prefix the name stem with the english language short article, "a", or the long article, "an".
 +
|-
 +
| <code>IsAbstract</code>
 +
| <code>true</code> or <code>false</code>
 +
| Do not worry about this. An over-world terrain has no other config than the base config and only the protoype is abstract, if that means anything.
 +
|-
 +
| <code>CanBeGenerated</code>
 +
| <code>true</code> or <code>false</code>
 +
| Set this value to true if you want your user defined dungeon to appear in the world map. It is not applicable to core locations.
 +
|-
 +
| <code>AttachedDungeon</code>
 +
| <code>DEFINED_VALUE</code>
 +
| This is the <code>#define</code> set in <code>define.dat</code> that is used to link the user-specified dungeon in the data file to its over-world terrain.
 +
|-
 +
| <code>AttachedArea</code>
 +
| <code>0, 1, 2, ...</code>
 +
| This sets the initial level that the player will appear in upon entering the dungeon. Normally set this to zero.
 +
|-
 +
| <code>NativeGTerrainType</code>
 +
| <code>DEFINED_VALUE</code>
 +
| MUST be non-zero. Can select from <code>DESERT</code>, <code>JUNGLE</code>, <code>STEPPE</code>, <code>LEAFY_FOREST</code>, <code>EVERGREEN_FOREST</code>, <code>TUNDRA</code>, <code>GLACIER</code>. Note that the tundra type produces the familiar snow terrain.
 +
|-
 +
| <code>RevealEnvironmentInitially</code>
 +
| <code>true</code> or <code>false</code>
 +
| This determines whether to reveal the dungeon on the world map initially by uncovering the darkness, a la Attnam, or whether the player will need to discover it by using the field of view, a la underwater tunnel exit. Note that this differs from the way gloomy caves is hidden, and then revealed once you talk to Petrus.
 +
|-
 +
| <code>HideLocationInitially</code>
 +
| <code>true</code> or <code>false</code>
 +
| This tells the game whether to show the location on the world map or not. If it is set to true, then the location will be undiscoverable unless some internal condition within the game is met, that triggers the location to be revealed. If it is set to false, then the location will be accessible from the beginning of the game.
 +
|-
 +
| <code>CanBeOnAnyTerrain</code>
 +
| <code>true</code> or <code>false</code>
 +
| If set to true, this forces the world map generator to ignore the requirement to place the location in its exact native terrain type. It places these locations in the first available spot from Attnam outwards. This is necessary sometimes, to more or less guarantee the location to be accessible to the player. If it is set to false, there is a high chance the location will spawn on another continent.
 +
|}
 +
 
 +
== A worked example ==
 +
 
 +
=== A Dungeon data file ===
 +
 
 +
Copypaste this into your favorite text editor and save under <code>Script/dungeons</code> as "House.dat":
 +
 
 +
<code>
 +
/*
 +
*
 +
*  Iter Vehemens ad Necem (IVAN)
 +
*  Copyright (C) Timo Kiviluoto
 +
*  Released under the GNU General
 +
*  Public License
 +
*
 +
*  See LICENSING which should be included
 +
*  along with this file for more details
 +
*
 +
*/
 +
 
 +
/*
 +
* NOTICE!!!
 +
*
 +
* This file contains SPOILERS, which might ruin your IVAN experience
 +
* totally. Also, editing anything can DESTROY GAME BALANCE or CAUSE
 +
* OBSCURE BUGS if you don't know what you're doing. So from here on,
 +
* proceed at your own risk!
 +
*/
 +
 
 +
Dungeon HOUSE_ON_THE_STEPPE;
 +
{
 +
  Levels = 1;
 +
  Description = "House";
 +
  ShortDescription = "HS";
 +
 
 +
  Level 0;
 +
  {
 +
    FillSquare = solidterrain(GRASS_TERRAIN), 0;
 +
    Size = 42, 26;
 +
    GenerateMonsters = false;
 +
    Rooms = 1;
 +
    Items = 0;
 +
    IsOnGround = true;
 +
    TeamDefault = MONSTER_TEAM;
 +
    LOSModifier = 48;
 +
    IgnoreDefaultSpecialSquares = false;
 +
    AutoReveal = true;
 +
    CanGenerateBone = false;
 +
    DifficultyBase = 50;
 +
    DifficultyDelta = 0;
 +
    EnchantmentMinusChanceBase = -15;
 +
    EnchantmentMinusChanceDelta = 0;
 +
    EnchantmentPlusChanceBase = 0;
 +
    EnchantmentPlusChanceDelta = 0;
 +
    BackGroundType = GREEN_FRACTAL;
 +
    EarthquakesAffectTunnels = true;
 +
    AudioPlayList =
 +
    {
 +
      1,
 +
      "Empty.mid";
 +
    }
 +
 
 +
    RoomDefault
 +
    {
 +
      Pos = 2:40,2:24;
 +
      Size = 4:6,4:6;
 +
      AltarPossible = false;
 +
      WallSquare = solidterrain(GRASS_TERRAIN), wall(BRICK_PRIMITIVE);
 +
      FloorSquare = solidterrain(GRASS_TERRAIN), 0;
 +
      DoorSquare = solidterrain(GRASS_TERRAIN), BALSA_WOOD door;
 +
      GenerateDoor = true;
 +
      DivineMaster = 0;
 +
      GenerateTunnel = false;
 +
      GenerateLanterns = false;
 +
      Type = ROOM_NORMAL;
 +
      GenerateFountains = false;
 +
      AllowLockedDoors = false;
 +
      AllowBoobyTrappedDoors = false;
 +
      Shape = ROUND_CORNERS;
 +
      IsInside = true;
 +
      GenerateWindows = true;
 +
      UseFillSquareWalls = false;
 +
      Flags = 0;
 +
    }
 +
  }
 +
}
 +
</code>
 +
 
 +
=== In define.dat ===
 +
 
 +
{| class="wikitable"
 +
! Before
 +
! After
 +
|-
 +
|
 +
<tt> #define RANDOM 0
 +
  #define ELPURI_CAVE 1
 +
  #define ATTNAM 2
 +
  #define NEW_ATTNAM 3
 +
  #define UNDER_WATER_TUNNEL 4
 +
  #define EMPTY_AREA 5
 +
  #define XINROCH_TOMB 6
 +
  #define UNDER_WATER_TUNNEL_EXIT 128
 +
 
 +
</tt>
 +
|
 +
<tt> #define RANDOM 0
 +
  #define ELPURI_CAVE 1
 +
  #define ATTNAM 2
 +
  #define NEW_ATTNAM 3
 +
  #define UNDER_WATER_TUNNEL 4
 +
  #define EMPTY_AREA 5
 +
  #define XINROCH_TOMB 6
 +
  <span style="background:palegreen">#define HOUSE_ON_THE_STEPPE 7</span>
 +
  #define UNDER_WATER_TUNNEL_EXIT 128
 +
</tt>
 +
|}
 +
 
 +
=== In owterra.dat ===
 +
 
 +
{| class="wikitable"
 +
! Before
 +
! After
 +
! Result
 +
|-
 +
|
 +
<tt>locationAA
 +
  {
 +
    BitmapPos = <span style="background:pink">0</span>, 64;
 +
    NameStem = "<span style="background:pink">empty area</span>";
 +
    UsesLongArticle = <span style="background:pink">true</span>;
 +
    AttachedDungeon = <span style="background:pink">EMPTY_AREA</span>;
 +
    AttachedArea = 0;
 +
    CanBeGenerated = <span style="background:pink">false</span>;
 +
    NativeGTerrainType = <span style="background:pink">JUNGLE</span>;
 +
  }</tt>
 +
|
 +
<tt>locationAA
 +
  {
 +
    BitmapPos = <span style="background:palegreen">64</span>, 64;
 +
    NameStem = "<span style="background:palegreen">house on the steppe</span>";
 +
    UsesLongArticle = <span style="background:palegreen">false</span>;
 +
    AttachedDungeon = <span style="background:palegreen">HOUSE_ON_THE_STEPPE</span>;
 +
    AttachedArea = 0;
 +
    CanBeGenerated = <span style="background:palegreen">true</span>;
 +
    NativeGTerrainType = <span style="background:palegreen">STEPPE</span>;
 +
  }</tt>
 +
| [[File:Steppes.png]]
 +
|}
 +
 
 +
== What's this about "core locations" ==
 +
 
 +
Core locations are the original ones from IVAN 0.50. These are New Attnam, Under water tunnel, Attnam and Gloomy Caves. Their generation on the world map is not handled in the generic way covered by the means of adding places to the world map described here.
 +
 
 +
== Known limitations ==
 +
 
 +
=== Distribution of ground terrain types ===
 +
 
 +
{| class="wikitable"
 +
! Terrain type
 +
! Picture
 +
! Percentage of global tiles (averaged over 8 PDS sampling trials)
 +
|-
 +
| Desert
 +
| [[File:Desert.png]]
 +
| 7.1 %
 +
|-
 +
| Jungle
 +
| [[File:Jungle.png]]
 +
| 14.0 %
 +
|-
 +
| Steppe
 +
| [[File:Steppe.png]]
 +
| 13.7 %
 +
|-
 +
| Leafy forest
 +
| [[File:Leafyforest.png]]
 +
| 15.9 %
 +
|-
 +
| Evergreen forest
 +
| [[File:Evergreenforest.png]]
 +
| 6.0 %
 +
|-
 +
| Tundra
 +
| [[File:Tundra.png]]
 +
| 33.4 %
 +
|-
 +
| Glacier
 +
| [[File:Glacier.png]]
 +
| 9.9 %
 +
|}
 +
 
 +
 
 +
As of <code>0.50.6</code>, the number of slots is <code>32</code>.
 +
 
 +
Overflow of number of dungeons. Ways in which this can happen.
 +
 
 +
Population distribution of terrain types collected by the sampling algorithm.

Revision as of 03:39, 9 July 2017

This section is about adding dungeons to the world map. If you would like to learn about the specifics of dungeon building, see Dungeon Building.

Introduction

This is a brief guide explaining how to include your customized dungeons on the IVAN world map.

Three key steps

There are three key steps to getting your dungeon to appear on the world map.

Your dungeon data file

Your dungeon data file should reside in Script/dungeons where it will automatically be picked up by the game when it creates the world map. It should contain the kinds of things described in the article on Dungeon Building. Most importantly, the Dungeon control variable will need to be the DEFINED_VALUE you set in define.dat, which will help link the dungeon to its overworld terrain.

define.dat

You will need to define the name that the IVAN script files will use to recognise your dungeon. Therefore you will need to include a #define with the other dungeon names in define.dat.

Anything you put in define.dat, you can refer to in your other script files. This is a general rule and is applicable to any of the data files. For example, if you want to create another config of a guard, then you just put a new #define in define.dat, and you can now refer to it in char.dat and your dungeon data file. So it follows that you can #define your own dungeon name, which will be essential when we come to link the dungeon data file to the terrain data file.

Stick to upper case lettering when adding a new #define, and be sure to put an underscore when separating words. Be sure items that are enumerated follow a nice numerical sequence e.g. 1, 2, 3, 4, 5; or 2, 4, 8, 16, 32;, rather than 1, 2, 5, 7, 8;.

For programmers: note that if we wish to refer to a particular dungeon in the code itself, for example to do something special in game.cpp, then the code will need to know about it, and so a #define will also need to appear in ivandef.h before compiling the game.

owterra.dat

The data file owterra.dat contains the "over-world terrains" of the IVAN world map. These are so named, because they become the pictures that sit over the ground terrain on the world map. They denote the places - cities or dungeons - you can visit when adventuring in the world map, and so they need to be linked up to the dungeon data files.

Here are some pictures showing famous owterrains:

New Attnam Attnam Gloomy Caves
Ownewattnam.png Owattnam.png Owgloomycaves.png

As of IVAN 0.50.6, there are exactly 32 slots (dungeonAA up to dungeonBF) available for use as the over-world linkages to your dungeon. Simply pick one out that is free and modify it to link together with your dungeon data file by specifying which DEFINED_VALUE you introduced in define.dat

This table shows the control variables for each over-world terrain. You can configure your over-world terrain with the ground terrain type of your choice, and a bunch of other things besides.

Keyword Values Description
BitmapPos x, y; This determines the bitmap position of the picture of the terrain in WTerra.pcx. You can create your own picture by modifying WTerra.pcx.
NameStem "string" This is a string, beginning with a lowercase word, usually a noun or an adjective, for example, "mighty cathedral" or "cave entrance".
UsesLongArticle true or false Specify whether to prefix the name stem with the english language short article, "a", or the long article, "an".
IsAbstract true or false Do not worry about this. An over-world terrain has no other config than the base config and only the protoype is abstract, if that means anything.
CanBeGenerated true or false Set this value to true if you want your user defined dungeon to appear in the world map. It is not applicable to core locations.
AttachedDungeon DEFINED_VALUE This is the #define set in define.dat that is used to link the user-specified dungeon in the data file to its over-world terrain.
AttachedArea 0, 1, 2, ... This sets the initial level that the player will appear in upon entering the dungeon. Normally set this to zero.
NativeGTerrainType DEFINED_VALUE MUST be non-zero. Can select from DESERT, JUNGLE, STEPPE, LEAFY_FOREST, EVERGREEN_FOREST, TUNDRA, GLACIER. Note that the tundra type produces the familiar snow terrain.
RevealEnvironmentInitially true or false This determines whether to reveal the dungeon on the world map initially by uncovering the darkness, a la Attnam, or whether the player will need to discover it by using the field of view, a la underwater tunnel exit. Note that this differs from the way gloomy caves is hidden, and then revealed once you talk to Petrus.
HideLocationInitially true or false This tells the game whether to show the location on the world map or not. If it is set to true, then the location will be undiscoverable unless some internal condition within the game is met, that triggers the location to be revealed. If it is set to false, then the location will be accessible from the beginning of the game.
CanBeOnAnyTerrain true or false If set to true, this forces the world map generator to ignore the requirement to place the location in its exact native terrain type. It places these locations in the first available spot from Attnam outwards. This is necessary sometimes, to more or less guarantee the location to be accessible to the player. If it is set to false, there is a high chance the location will spawn on another continent.

A worked example

A Dungeon data file

Copypaste this into your favorite text editor and save under Script/dungeons as "House.dat":

/*

*
*  Iter Vehemens ad Necem (IVAN)
*  Copyright (C) Timo Kiviluoto
*  Released under the GNU General
*  Public License
*
*  See LICENSING which should be included
*  along with this file for more details
*
*/

/*

* NOTICE!!!
*
* This file contains SPOILERS, which might ruin your IVAN experience
* totally. Also, editing anything can DESTROY GAME BALANCE or CAUSE
* OBSCURE BUGS if you don't know what you're doing. So from here on,
* proceed at your own risk!
*/

Dungeon HOUSE_ON_THE_STEPPE; {

 Levels = 1;
 Description = "House";
 ShortDescription = "HS";
 Level 0;
 {
   FillSquare = solidterrain(GRASS_TERRAIN), 0;
   Size = 42, 26;
   GenerateMonsters = false;
   Rooms = 1;
   Items = 0;
   IsOnGround = true;
   TeamDefault = MONSTER_TEAM;
   LOSModifier = 48;
   IgnoreDefaultSpecialSquares = false;
   AutoReveal = true;
   CanGenerateBone = false;
   DifficultyBase = 50;
   DifficultyDelta = 0;
   EnchantmentMinusChanceBase = -15;
   EnchantmentMinusChanceDelta = 0;
   EnchantmentPlusChanceBase = 0;
   EnchantmentPlusChanceDelta = 0;
   BackGroundType = GREEN_FRACTAL;
   EarthquakesAffectTunnels = true;
   AudioPlayList = 
   {
     1,
     "Empty.mid";
   }
   RoomDefault
   {
     Pos = 2:40,2:24;
     Size = 4:6,4:6;
     AltarPossible = false;
     WallSquare = solidterrain(GRASS_TERRAIN), wall(BRICK_PRIMITIVE);
     FloorSquare = solidterrain(GRASS_TERRAIN), 0;
     DoorSquare = solidterrain(GRASS_TERRAIN), BALSA_WOOD door;
     GenerateDoor = true;
     DivineMaster = 0;
     GenerateTunnel = false;
     GenerateLanterns = false;
     Type = ROOM_NORMAL;
     GenerateFountains = false;
     AllowLockedDoors = false;
     AllowBoobyTrappedDoors = false;
     Shape = ROUND_CORNERS;
     IsInside = true;
     GenerateWindows = true;
     UseFillSquareWalls = false;
     Flags = 0;
   }
 }

}

In define.dat

Before After
 #define RANDOM 0
 #define ELPURI_CAVE 1
 #define ATTNAM 2
 #define NEW_ATTNAM 3
 #define UNDER_WATER_TUNNEL 4
 #define EMPTY_AREA 5
 #define XINROCH_TOMB 6
 #define UNDER_WATER_TUNNEL_EXIT 128
 

 #define RANDOM 0
 #define ELPURI_CAVE 1
 #define ATTNAM 2
 #define NEW_ATTNAM 3
 #define UNDER_WATER_TUNNEL 4
 #define EMPTY_AREA 5
 #define XINROCH_TOMB 6
 #define HOUSE_ON_THE_STEPPE 7
 #define UNDER_WATER_TUNNEL_EXIT 128

In owterra.dat

Before After Result
locationAA
 {
   BitmapPos = 0, 64;
   NameStem = "empty area";
   UsesLongArticle = true;
   AttachedDungeon = EMPTY_AREA;
   AttachedArea = 0;
   CanBeGenerated = false;
   NativeGTerrainType = JUNGLE;
 }
locationAA
 {
   BitmapPos = 64, 64;
   NameStem = "house on the steppe";
   UsesLongArticle = false;
   AttachedDungeon = HOUSE_ON_THE_STEPPE;
   AttachedArea = 0;
   CanBeGenerated = true;
   NativeGTerrainType = STEPPE;
 }
Steppes.png

What's this about "core locations"

Core locations are the original ones from IVAN 0.50. These are New Attnam, Under water tunnel, Attnam and Gloomy Caves. Their generation on the world map is not handled in the generic way covered by the means of adding places to the world map described here.

Known limitations

Distribution of ground terrain types

Terrain type Picture Percentage of global tiles (averaged over 8 PDS sampling trials)
Desert Desert.png 7.1 %
Jungle Jungle.png 14.0 %
Steppe Steppe.png 13.7 %
Leafy forest Leafyforest.png 15.9 %
Evergreen forest Evergreenforest.png 6.0 %
Tundra Tundra.png 33.4 %
Glacier Glacier.png 9.9 %


As of 0.50.6, the number of slots is 32.

Overflow of number of dungeons. Ways in which this can happen.

Population distribution of terrain types collected by the sampling algorithm.