The Cathedral of Attnam

Changes

Jump to navigation Jump to search
m
no edit summary
This is a brief guide explaining how to include your customized dungeons on the IVAN world map.
== Three key resources steps == There are three key steps to getting your dungeon to appear on the world map.
=== Your dungeon data file ===
Your dungeon.dat 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 ===
So it follows 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 #define your own dungeon namevisit when adventuring in the world map, which will and so they need to be essential when we come linked up to link the dungeon data file to the terrain data filefiles.
Stick to upper case lettering when adding a new #define, and be sure to put an underscore when separating words.Here are some pictures showing famous owterrains:
Dos and don'ts{| class="wikitable"! New Attnam! Attnam! Gloomy Caves|-| [[File: be sure items that are enumerated follow a nice numerical sequence eOwnewattnam.gpng|80px]]| [[File:Owattnam.png|80px]]| [[File:Owgloomycaves. 1, 2, 3, 4, 5; or 2, 4, 8, 16, 32; rather than 1, 2, 5, 7, 8;png|80px]]|}
If we wish As of IVAN 0.50.6, there are exactly 32 slots (<code>dungeonAA</code> up to refer <code>dungeonBF</code>) available for use as the over-world linkages to a particular your dungeon in the code itself, say in game.cpp, then the code will need to know about Simply pick one out that is free and modify it, and so a #define will need to appear link together with your dungeon data file by specifying which <code>DEFINED_VALUE</code> you introduced in ivandef.h before compiling the gamedefine.dat
=== owterraThis 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.dat ===
The data file {| 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"owterra.dat|-| <code>UsesLongArticle</code>| <code>true</code> or <code>false</code>| Specify whether to prefix the name stem with the english language short article, "a" contains , or the long article, "an".|-| <code>IsAbstract</code>| <code>true</code> or <code>false</code>| Do not worry about this. An over-world terrains" of 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 IVAN world map. These are so namedIt 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, because they become ...</code>| This sets the little pictures initial level that sit over the ground 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 mapinitially 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. They denote 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 ==
By following these three easy steps you can create and add new dungeons to your local copy of IVAN, without needing to know how to code!
 
=== Step 1: A basic 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>
 
=== Step 2: Add the new dungeon definition to 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>
|}
 
=== Step 3: Add the new location to the worldmap with 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.
 
[[Category:Modding]]
Moderator
1,400

edits

Navigation menu