Difference between pages "Secrets" and "Adding Cities and Dungeons to the IVAN World Map"

From IvanWiki
(Difference between pages)
Jump to navigation Jump to search
 
 
Line 1: Line 1:
{{Spoiler}}
+
''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]].''
  
This page is for listing all secrets, easter eggs and less obvious features in IVAN.<br>
+
__TOC__
Needless to say, this page is full of SPOILERS! Discovering these secrets for yourself will always be more rewarding!
 
  
If you accept the risks of reading this page, read on... otherwise now is a good time to hit that back button. I've included some blank space to make sure you don't accidentally read anything you don't want to.
+
== Introduction ==
  
NOTE: This is not a page for listing [[Cheats and Exploits|cheats or exploits]] - this is for intentional features that are difficult to discover through normal gameplay.
+
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 <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]]
 +
|}
  
  Spoilers incoming!
+
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>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>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.
 +
|}
  
 +
== A worked example ==
  
+
=== A Dungeon data file ===
  
+
(Attachement)
----
 
= Better Resting =
 
The natural way to regain health in IVAN is to rest using the '''h''' key, which allows you to slowly regain health as you take a nap on the dungeon floor.<br>
 
However, resting while your character is on top of certain world items will cause you to heal at an accelerated pace.<br>
 
These items are:
 
*Bed (5x healing rate)
 
*Couch (2x healing rate)
 
  
= Eating Bone =
+
=== In define.dat ===
As a lowly human in the world of IVAN, you are sadly relegated to consuming only meat, vegetables, fruit, liquids and grain.<br>
 
While this means that you can happily eat a wide variety of foods including most ommel materials, you cannot even ''attempt'' to eat rocks, metals, bone, plant matter, plastics, gasses or fibrous materials such as nymph hair.<br>
 
Now that might not sound like much of a problem, but there's a significant stat boost that can be gained specifically by consuming [[Ommel Bone|ommel bone]] or [[Ommel Tooth|ommel tooth]], much like how consuming any other ommel material (hair excluded) will give you a boost to certain stats.
 
  
But humans cannot eat bone! What a tragedy!<br>
+
{| class="wikitable"
However, there's a specific category of monster that ''can'' eat bones... and that would be canines.
+
! Before
 
+
! After
What does this mean? Well for one, it means that you can feed any friendly canines ommel bone items and watch as they become hulking beefcakes who can actually fend for themselves!<br>
+
|-
Alternatively, if you yourself have been polymorphed into a canine, you can eat ommel bone or ommel tooth items and benefit from it too!
+
|
 
+
<tt> #define RANDOM 0
Monsters classified as canines are:
+
  #define ELPURI_CAVE 1
* [[Blink Dog]]
+
  #define ATTNAM 2
* [[Jackal]]
+
  #define NEW_ATTNAM 3
* [[Puppy]]
+
  #define UNDER_WATER_TUNNEL 4
* [[Wolf]]
+
  #define EMPTY_AREA 5
 
+
  #define UNDER_WATER_TUNNEL_EXIT 128
Eating ommel bone will produce a unique message in the game log.
+
 
 
+
</tt>
Note: If you're polymorphed into a canine you can, of course, eat regular bones too. They are at least a little nutritious but are unlikely to stave off hunger for long.
+
|
 
+
<tt> #define RANDOM 0
= Feeding [[Huang Ming Pong]] =
+
  #define ELPURI_CAVE 1
Being a big fatty, Huang Ming Pong cannot resist eating any food within his sight.<br>
+
  #define ATTNAM 2
If you feel like it, you can lure Huang Ming Pong out of his house by leaving a trail of food for him.
+
  #define NEW_ATTNAM 3
 
+
  #define UNDER_WATER_TUNNEL 4
While he is distracted and as long as he cannot see you, you can sneak into the sumo arena.<br>
+
  #define EMPTY_AREA 5
Alternatively, you can lure him out of his house onto broken glass or banana peels in order to hurt him - this will not deter him from seeking out and eating any food item in sight.
+
  <span style="background:palegreen">#define HOUSE_ON_THE_STEPPE 6</span>
 
+
  #define UNDER_WATER_TUNNEL_EXIT 128
NOTE: Huang Ming Pong is smart enough to not eat dangerous or rotten food items. However he ''will'' eat beneficial food items such as ommel fluids and holy bananas.
+
</tt>
 
+
|}
= [[Fountains]] =
 
Fountains are primarily a decorative feature - or they would be if this wasn't a roguelike.<br>
 
While the most likely outcome of drinking from a fountain is simply quenching your thirst, fountains in IVAN can produce a number of different effects, ranging from granting free items to stat buffs to summoning hordes of hostile monsters around you.
 
 
 
For more information, check the [[fountains]] page.
 
  
= Hidden Items Inside Objects =
+
=== In owterra.dat ===
Certain objects in the world will drop unexpected items when destroyed.<br>
 
While usually the result of '''a'''pplying a pickax to something, destroying an object via explosions or magic works just as well.
 
  
The objects that have a chance to drop valuable items are:
+
{| class="wikitable"
* Couches
+
! Before
* Random, earthen dungeon walls
+
! After
 +
! Result
 +
|-
 +
|
 +
<tt>locationAA
 +
  {
 +
    BitmapPos = 0, 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 = 0, 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:ShopBare.png|160px]]
 +
|}
  
= [[Secret Rooms]] =
+
== What's this about "core locations" ==
Within the [[Gloomy Cave]], up to two separate secret rooms with no entryways may spawn on any floor.<br>
 
Secret rooms will always contain a chest full of valuable items, and at least one nasty trap - either land mines or bear traps made of strong materials.<br>
 
It is highly recommended to make liberal use of the '''s'''earch function while entering these rooms, unless you have levitation active.
 
  
For more information on locating and accessing these rooms, check the main page for [[Secret Rooms|secret rooms]].
+
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.
  
= Sneaking into the Sumo Arena =
+
== Known limitations ==
If you want to access the sumo arena without challenging Huang Ming Pong to mortal combat, you'll need to sneak in when he isn't looking - or can't see you.<br>
 
There are two ways to achieve this:
 
* Lure Huang Ming Pong a significant distance away from his house, far enough to break his line of sight with the stairwell.
 
* Have some means of invisibility.
 
  
Once you've snuck in... there's actually not a lot you can do really. Damaging any of the structures within the sumo arena or placing a trap will draw the ire of the town, and any items left in the arena will be cleared out when you go back upstairs.<br>
+
=== Distribution of ground terrain types ===
Perhaps you could find some way to give you an advantage in the sumo fight ''without'' leaving items behind in the arena...?<br>
 
Although that would be better classed as an exploit...
 
  
= Taming Canines =
+
{| class="wikitable"
If you've played at least a little IVAN before reading this page, you should be quite familiar with the ability to '''t'''hrow items.<br>
+
! Terrain type
While usually used for throwing items in order to damage an opponent from afar, there is another, less obvious use which also takes advantage of any [[bone]]s you might have encountered on your journey.<br>
+
! Picture
 +
! Average number of global tiles in 12 trials
 +
|-
 +
| Desert
 +
| [[File:Desert.png]]
 +
|
 +
|-
 +
| Jungle
 +
| [[File:Jungle.png]]
 +
|
 +
|-
 +
| Steppe
 +
| [[File:Steppe.png]]
 +
|
 +
|-
 +
| Leafy forest
 +
| [[File:Leafyforest.png]]
 +
|
 +
|-
 +
| Evergreen forest
 +
| [[File:Evergreenforest.png]]
 +
|
 +
|-
 +
| Tundra
 +
| [[File:Tundra.png]]
 +
|
 +
|-
 +
| Glacier
 +
| [[File:Glacier.png]]
 +
|
 +
|}
  
Throwing a bone at any canine creature will cause it to catch it in its mouth, eat it, and become friendly instantly.<br>
 
With enough bones you can lead an absurdly large army of dogs, wolves and other creatures.
 
  
Monsters that can be tamed this way are as follows:
+
As of <code>0.50.6</code>, the number of slots is <code>32</code>.
* [[Blink Dog]]
 
* [[Jackal]]
 
* [[Puppy]]
 
* [[Wolf]]
 
  
'''NOTE: This only works using bones specifically, and those bones must be made of a bone material. Items that are simply made of bone will not work - that includes skulls.'''
+
Overflow of number of dungeons. Ways in which this can happen.
  
= Unique Messages =
+
Population distribution of terrain types collected by the sampling algorithm.
While (usually) not practical or useful ''per se'', certain actions will cause unique and sometimes humorous messages to be printed to the game log.<br>
 
Try:
 
* Applying a stethoscope to various things and people.
 
* Using various commands without any relevant objects nearby (e.g. using '''o'''pen without having a door present)
 
* '''C'''hatting with literally anything.
 
** See also: [[Science Talking]], a hidden feature used to raise your INT and WIS.
 
* Interacting with altars in various ways other than '''O'''ffering items to them.
 
* Sitting ('''_''' key) on various objects.
 
** Trying this at an altar will actually increase your standing with that god by a small amount.
 
* '''Z'''apping a banana.
 

Revision as of 03:36, 12 June 2016

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.
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.
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.

A worked example

A Dungeon data file

(Attachement)

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 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 HOUSE_ON_THE_STEPPE 6
 #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 = 0, 64;
   NameStem = "house on the steppe";
   UsesLongArticle = false;
   AttachedDungeon = HOUSE_ON_THE_STEPPE;
   AttachedArea = 0;
   CanBeGenerated = true;
   NativeGTerrainType = STEPPE;
 }
ShopBare.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 Average number of global tiles in 12 trials
Desert Desert.png
Jungle Jungle.png
Steppe Steppe.png
Leafy forest Leafyforest.png
Evergreen forest Evergreenforest.png
Tundra Tundra.png
Glacier Glacier.png


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.