/* File: dungeon.pkg */ /* * Purpose: Lua interface defitions for dungeon routines. * To be processed by tolua to generate C source code. */ $#include "angband.h" /** @typedef cptr * @note String */ typedef char* cptr; /** @typedef errr * @note Number */ typedef int errr; /** @typedef bool * @note Boolean */ typedef unsigned char bool; /** @typedef byte * @note Number */ typedef unsigned char byte; /** @typedef s16b * @note Number */ typedef signed short s16b; /** @typedef u16b * @note Number */ typedef unsigned short u16b; /** @typedef s32b * @note Number */ typedef signed int s32b; /** @typedef u32b * @note Number */ typedef unsigned int u32b; /** @name Cave Grid * @note Special cave grid flags * @{ */ /** @def CAVE_MARK * @note memorized feature */ #define CAVE_MARK 0x0001 /** @def CAVE_GLOW * @note self-illuminating */ #define CAVE_GLOW 0x0002 /** @def CAVE_ICKY * @note part of a vault */ #define CAVE_ICKY 0x0004 /** @def CAVE_ROOM * @note part of a room */ #define CAVE_ROOM 0x0008 /** @def CAVE_SEEN * @note seen flag */ #define CAVE_SEEN 0x0010 /** @def CAVE_VIEW * @note view flag */ #define CAVE_VIEW 0x0020 /** @def CAVE_TEMP * @note temp flag */ #define CAVE_TEMP 0x0040 /** @def CAVE_WALL * @note wall flag */ #define CAVE_WALL 0x0080 /** @def CAVE_TRDT * @note trap detected */ #define CAVE_TRDT 0x0100 /** @def CAVE_IDNT * @note grid identified (fountains) */ #define CAVE_IDNT 0x0200 /** @def CAVE_SPEC * @note special mark(quests) */ #define CAVE_SPEC 0x0400 /** @def CAVE_FREE * @note no random generation on it */ #define CAVE_FREE 0x0800 /** @def CAVE_DETECT * @note Traps detected here */ #define CAVE_DETECT 0x1000 /** @def CAVE_PLIT * @note Player lit grid */ #define CAVE_PLIT 0x2000 /** @def CAVE_MLIT * @note Monster lit grid */ #define CAVE_MLIT 0x4000 /** @} */ /** @name Terrain Feature Indexes * @note (see "lib/edit/f_info.txt") * @{ */ /* Nothing */ /** @def FEAT_NONE */ #define FEAT_NONE 0x00 /* Basic features */ /** @def FEAT_FLOOR */ #define FEAT_FLOOR 0x01 /** @def FEAT_FOUNTAIN */ #define FEAT_FOUNTAIN 0x02 /** @def FEAT_GLYPH */ #define FEAT_GLYPH 0x03 /** @def FEAT_OPEN */ #define FEAT_OPEN 0x04 /** @def FEAT_BROKEN */ #define FEAT_BROKEN 0x05 /** @def FEAT_LESS */ #define FEAT_LESS 0x06 /** @def FEAT_MORE */ #define FEAT_MORE 0x07 /* Quest features -KMW- */ /** @def FEAT_QUEST_ENTER */ #define FEAT_QUEST_ENTER 0x08 /** @def FEAT_QUEST_EXIT */ #define FEAT_QUEST_EXIT 0x09 /** @def FEAT_QUEST_DOWN */ #define FEAT_QUEST_DOWN 0x0A /** @def FEAT_QUEST_UP */ #define FEAT_QUEST_UP 0x0B /* Shafts -GSN- */ /** @def FEAT_SHAFT_DOWN */ #define FEAT_SHAFT_DOWN 0x0D /** @def FEAT_SHAFT_UP */ #define FEAT_SHAFT_UP 0x0E /* Basic feature */ /** @def FEAT_EMPTY_FOUNTAIN */ #define FEAT_EMPTY_FOUNTAIN 0x0F /* Feature 0x10 -- web */ /* Traps */ /** @def FEAT_TRAP */ #define FEAT_TRAP 0x11 /* Features 0x12 - 0x1F -- unused */ /* Doors */ /** @def FEAT_DOOR_HEAD */ #define FEAT_DOOR_HEAD 0x20 /** @def FEAT_DOOR_TAIL */ #define FEAT_DOOR_TAIL 0x2F /* Extra */ /** @def FEAT_SECRET */ #define FEAT_SECRET 0x30 /** @def FEAT_RUBBLE */ #define FEAT_RUBBLE 0x31 /* Seams */ /** @def FEAT_MAGMA */ #define FEAT_MAGMA 0x32 /** @def FEAT_QUARTZ */ #define FEAT_QUARTZ 0x33 /** @def FEAT_MAGMA_H */ #define FEAT_MAGMA_H 0x34 /** @def FEAT_QUARTZ_H */ #define FEAT_QUARTZ_H 0x35 /** @def FEAT_MAGMA_K */ #define FEAT_MAGMA_K 0x36 /** @def FEAT_QUARTZ_K */ #define FEAT_QUARTZ_K 0x37 /* Walls */ /** @def FEAT_WALL_EXTRA */ #define FEAT_WALL_EXTRA 0x38 /** @def FEAT_WALL_INNER */ #define FEAT_WALL_INNER 0x39 /** @def FEAT_WALL_OUTER */ #define FEAT_WALL_OUTER 0x3A /** @def FEAT_WALL_SOLID */ #define FEAT_WALL_SOLID 0x3B /** @def FEAT_PERM_EXTRA */ #define FEAT_PERM_EXTRA 0x3C /** @def FEAT_PERM_INNER */ #define FEAT_PERM_INNER 0x3D /** @def FEAT_PERM_OUTER */ #define FEAT_PERM_OUTER 0x3E /** @def FEAT_PERM_SOLID */ #define FEAT_PERM_SOLID 0x3F /* Explosive rune */ /** @def FEAT_MINOR_GLYPH */ #define FEAT_MINOR_GLYPH 0x40 /* Pattern */ /** @def FEAT_PATTERN_START */ #define FEAT_PATTERN_START 0x41 /** @def FEAT_PATTERN_1 */ #define FEAT_PATTERN_1 0x42 /** @def FEAT_PATTERN_2 */ #define FEAT_PATTERN_2 0x43 /** @def FEAT_PATTERN_3 */ #define FEAT_PATTERN_3 0x44 /** @def FEAT_PATTERN_4 */ #define FEAT_PATTERN_4 0x45 /** @def FEAT_PATTERN_END */ #define FEAT_PATTERN_END 0x46 /** @def FEAT_PATTERN_OLD */ #define FEAT_PATTERN_OLD 0x47 /** @def FEAT_PATTERN_XTRA1 */ #define FEAT_PATTERN_XTRA1 0x48 /** @def FEAT_PATTERN_XTRA2 */ #define FEAT_PATTERN_XTRA2 0x49 /* Shops */ /** @def FEAT_SHOP */ #define FEAT_SHOP 0x4A /* Permanent walls for quests */ /** @def FEAT_QUEST1 */ #define FEAT_QUEST1 0x4B /** @def FEAT_QUEST2 */ #define FEAT_QUEST2 0x4C /** @def FEAT_QUEST3 */ #define FEAT_QUEST3 0x4D /** @def FEAT_QUEST4 */ #define FEAT_QUEST4 0x4E /* Features 0x4F - 0x53 -- unused */ /* Additional terrains */ /** @def FEAT_SHAL_WATER */ #define FEAT_SHAL_WATER 0x54 /** @def FEAT_DEEP_LAVA */ #define FEAT_DEEP_LAVA 0x55 /** @def FEAT_SHAL_LAVA */ #define FEAT_SHAL_LAVA 0x56 /** @def FEAT_DARK_PIT */ #define FEAT_DARK_PIT 0x57 /** @def FEAT_DIRT */ #define FEAT_DIRT 0x58 /** @def FEAT_GRASS */ #define FEAT_GRASS 0x59 /** @def FEAT_ICE */ #define FEAT_ICE 0x5A /** @def FEAT_SAND */ #define FEAT_SAND 0x5B /** @def FEAT_DEAD_TREE */ #define FEAT_DEAD_TREE 0x5C /** @def FEAT_ASH */ #define FEAT_ASH 0x5D /** @def FEAT_MUD */ #define FEAT_MUD 0x5E /** @def FEAT_ICE_WALL */ #define FEAT_ICE_WALL 0x5F /** @def FEAT_TREES */ #define FEAT_TREES 0x60 /** @def FEAT_MOUNTAIN */ #define FEAT_MOUNTAIN 0x61 /** @def FEAT_SANDWALL */ #define FEAT_SANDWALL 0x62 /** @def FEAT_SANDWALL_H */ #define FEAT_SANDWALL_H 0x63 /** @def FEAT_SANDWALL_K */ #define FEAT_SANDWALL_K 0x64 /* Feature 0x65 -- high mountain chain */ /* Feature 0x66 -- nether mist */ /* Features 0x67 - 0x9F -- unused */ /** @def FEAT_BETWEEN * @note 160 */ #define FEAT_BETWEEN 0xA0 /* Altars */ /** @def FEAT_ALTAR_HEAD * @note 161 */ #define FEAT_ALTAR_HEAD 0xA1 /** @def FEAT_ALTAR_TAIL * @note 171 */ #define FEAT_ALTAR_TAIL 0xAB /** @def FEAT_MARKER * @note 172 */ #define FEAT_MARKER 0xAC /* Feature 0xAD -- Underground Tunnel */ /** @def FEAT_TAINTED_WATER * @note 174 */ #define FEAT_TAINTED_WATER 0xAE /** @def FEAT_MON_TRAP * @note 175 */ #define FEAT_MON_TRAP 0xAF /** @def FEAT_BETWEEN2 * @note 176 */ #define FEAT_BETWEEN2 0xB0 /** @def FEAT_LAVA_WALL * @note 177 */ #define FEAT_LAVA_WALL 0xB1 /** @def FEAT_GREAT_FIRE * @note 178 */ #define FEAT_GREAT_FIRE 0xB2 /** @def FEAT_WAY_MORE * @note 179 */ #define FEAT_WAY_MORE 0xB3 /** @def FEAT_WAY_LESS * @note 180 */ #define FEAT_WAY_LESS 0xB4 /* Feature 0xB5 -- field */ /** @def FEAT_EKKAIA * @note 182 */ #define FEAT_EKKAIA 0xB6 /* Features 0xB7 - 0xBA -- unused */ /** @def FEAT_DEEP_WATER * @note 187 */ #define FEAT_DEEP_WATER 0xBB /** @def FEAT_GLASS_WALL * @note 188 */ #define FEAT_GLASS_WALL 0xBC /** @def FEAT_ILLUS_WALL * @note 189 */ #define FEAT_ILLUS_WALL 0xBD /* Feature 0xBE -- grass roof */ /* Feature 0xBF -- grass roof top */ /* Feature 0xC0 -- grass roof chimney */ /* Feature 0xC1 -- brick roof */ /* Feature 0xC2 -- brick roof top */ /* Feature 0xC3 -- brick roof chimney */ /* Feature 0xC4 -- window */ /* Feature 0xC5 -- small window */ /* Feature 0xC6 -- rain barrel */ /** @def FEAT_FLOWER * @note 199 */ #define FEAT_FLOWER 0xC7 /* Feature 0xC8 -- cobblestone road */ /* Feature 0xC9 -- cobblestone with outlet */ /** @def FEAT_SMALL_TREES * @note 202 */ #define FEAT_SMALL_TREES 0xCA /** @def FEAT_TOWN * @note 203 */ #define FEAT_TOWN 0xCB /* Feature 0xCC -- Underground Tunnel */ /** @def FEAT_FIRE * @note 205 */ #define FEAT_FIRE 0xCD /* Feature 0xCE -- pile of rubble (permanent) */ /* Features 0xCF - 0xFF -- unused */ /** @} */ /** @name Dungeon Type Flags (part 1) * @{ */ /** @def DF1_PRINCIPAL * @note Is a principal dungeon */ #define DF1_PRINCIPAL 0x00000001L /** @def DF1_MAZE * @note Is a maze-type dungeon */ #define DF1_MAZE 0x00000002L /** @def DF1_SMALLEST * @note Creates VERY small levels like The Maze */ #define DF1_SMALLEST 0x00000004L /** @def DF1_SMALL * @note Creates small levels like Dol Goldor */ #define DF1_SMALL 0x00000008L /** @def DF1_BIG * @note Creates big levels like Moria, and Angband dungeons */ #define DF1_BIG 0x00000010L /** @def DF1_NO_DOORS * @note No doors on rooms, like Barrowdowns, Old Forest etc) */ #define DF1_NO_DOORS 0x00000020L /** @def DF1_WATER_RIVER * @note Allow a single water streamer on a level */ #define DF1_WATER_RIVER 0x00000040L /** @def DF1_LAVA_RIVER * @note Allow a single lava streamer on a level */ #define DF1_LAVA_RIVER 0x00000080L /** @def DF1_WATER_RIVERS * @note Allow multiple water streamers on a level */ #define DF1_WATER_RIVERS 0x00000100L /** @def DF1_LAVA_RIVERS * @note Allow multiple lava streamers on a level */ #define DF1_LAVA_RIVERS 0x00000200L /** @def DF1_CAVE * @note Allow orc-cave like 'fractal' rooms */ #define DF1_CAVE 0x00000400L /** @def DF1_CAVERN * @note Allow cavern rooms */ #define DF1_CAVERN 0x00000800L /** @def DF1_NO_UP * @note Disallow up stairs */ #define DF1_NO_UP 0x00001000L /** @def DF1_HOT * @note Corpses on ground and in pack decay quicker through heat */ #define DF1_HOT 0x00002000L /** @def DF1_COLD * @note Corpses on ground and in pack decay quicker through cold */ #define DF1_COLD 0x00004000L /** @def DF1_FORCE_DOWN * @note No up stairs generated */ #define DF1_FORCE_DOWN 0x00008000L /** @def DF1_FORGET * @note Features are forgotten, like the Maze and Illusory Castle */ #define DF1_FORGET 0x00010000L /** @def DF1_NO_DESTROY * @note No destroyed levels in dungeon */ #define DF1_NO_DESTROY 0x00020000L /** @def DF1_SAND_VEIN * @note Like in the sandworm lair */ #define DF1_SAND_VEIN 0x00040000L /** @def DF1_CIRCULAR_ROOMS * @note Allow circular rooms */ #define DF1_CIRCULAR_ROOMS 0x00080000L /** @def DF1_EMPTY * @note Allow arena levels */ #define DF1_EMPTY 0x00100000L /** @def DF1_DAMAGE_FEAT * @note Effect specified in will affect all grids incl. terrain and monsters */ #define DF1_DAMAGE_FEAT 0x00200000L /** @def DF1_FLAT * @note Creates paths to next areas at edge of level, like Barrowdowns */ #define DF1_FLAT 0x00400000L /** @def DF1_TOWER * @note You start at bottom and go up rather than the reverse */ #define DF1_TOWER 0x00800000L /** @def DF1_RANDOM_TOWNS * @note Allow random towns */ #define DF1_RANDOM_TOWNS 0x01000000L /** @def DF1_DOUBLE * @note Generates everything at double size like Helcaraxe and Erebor */ #define DF1_DOUBLE 0x02000000L /** @def DF1_LIFE_LEVEL * @note Creates dungeon level on modified 'game of life' algorithm */ #define DF1_LIFE_LEVEL 0x04000000L /** @def DF1_EVOLVE * @note Evolving, pulsing levels like Heart of the Earth */ #define DF1_EVOLVE 0x08000000L /** @def DF1_ADJUST_LEVEL_1 * @note Minimum monster level will be equal to dungeon level */ #define DF1_ADJUST_LEVEL_1 0x10000000L /** @def DF1_ADJUST_LEVEL_2 * @note Minimum monster level will be double the dungeon level */ #define DF1_ADJUST_LEVEL_2 0x20000000L /** @def DF1_NO_RECALL * @note No recall allowed */ #define DF1_NO_RECALL 0x40000000L /** @def DF1_NO_STREAMERS * @note No streamers */ #define DF1_NO_STREAMERS 0x80000000L /** @} */ /** @name Dungeon Type Flags (part 2) * @{ */ /** @def DF2_ADJUST_LEVEL_1_2 * @note Minimum monster level will be half the dungeon level */ #define DF2_ADJUST_LEVEL_1_2 0x00000001L /** @def DF2_NO_SHAFT * @note No shafts */ #define DF2_NO_SHAFT 0x00000002L /** @def DF2_ADJUST_LEVEL_PLAYER * @note Uses player level*2 instead of dungeon level for other ADJUST_LEVEL flags */ #define DF2_ADJUST_LEVEL_PLAYER 0x00000004L /** @def DF2_NO_TELEPORT */ #define DF2_NO_TELEPORT 0x00000008L /** @def DF2_ASK_LEAVE */ #define DF2_ASK_LEAVE 0x00000010L /** @def DF2_NO_STAIR */ #define DF2_NO_STAIR 0x00000020L /** @def DF2_SPECIAL */ #define DF2_SPECIAL 0x00000040L /** @def DF2_NO_NEW_MONSTER */ #define DF2_NO_NEW_MONSTER 0x00000080L /** @def DF2_DESC */ #define DF2_DESC 0x00000100L /** @def DF2_NO_GENO */ #define DF2_NO_GENO 0x00000200L /** @def DF2_NO_BREATH * @note Oups, cannot breath here */ #define DF2_NO_BREATH 0x00000400L /** @def DF2_WATER_BREATH * @note Oups, cannot breath here, need water breathing */ #define DF2_WATER_BREATH 0x00000800L /** @def DF2_ELVEN * @note Try to create elven monster ego */ #define DF2_ELVEN 0x00001000L /** @def DF2_DWARVEN * @note Try to create dwarven monster ego */ #define DF2_DWARVEN 0x00002000L /** @def DF2_NO_EASY_MOVE * @note Forbid stuff like teleport level, probability travel, ... */ #define DF2_NO_EASY_MOVE 0x00004000L /** @def DF2_NO_RECALL_OUT * @note Cannot recall out of the place */ #define DF2_NO_RECALL_OUT 0x00008000L /** @def DF2_DESC_ALWAYS * @note Always shows the desc */ #define DF2_DESC_ALWAYS 0x00010000L /** @} */ /** @var level_flags1; * @brief Number */ extern u32b dungeon_flags1@level_flags1; /** @var level_flags2; * @brief Number */ extern u32b dungeon_flags2@level_flags2; /** @def MAX_HGT * @note Maximum dungeon height in grids, must be a multiple of SCREEN_HGT, * probably hard-coded to SCREEN_HGT * 3. */ #define MAX_HGT 66 /** @def MAX_WID * @note Maximum dungeon width in grids, must be a multiple of SCREEN_WID, * probably hard-coded to SCREEN_WID * 3. */ #define MAX_WID 198 /** @name Town Defines * @{ */ /** @def TOWN_RANDOM * @note First random town */ #define TOWN_RANDOM 20 /** @def TOWN_DUNGEON * @note Maximun number of towns per dungeon */ #define TOWN_DUNGEON 4 /** @def TOWN_CHANCE * @note Chance of 1 town */ #define TOWN_CHANCE 50 /** @} */ /** @name Wilderness Terrains * @{ */ /** @def TERRAIN_EDGE * @note Edge of the World */ #define TERRAIN_EDGE 0 /** @def TERRAIN_TOWN * @note Town */ #define TERRAIN_TOWN 1 /** @def TERRAIN_DEEP_WATER * @note Deep water */ #define TERRAIN_DEEP_WATER 2 /** @def TERRAIN_SHALLOW_WATER * @note Shallow water */ #define TERRAIN_SHALLOW_WATER 3 /** @def TERRAIN_SWAMP * @note Swamp */ #define TERRAIN_SWAMP 4 /** @def TERRAIN_DIRT * @note Dirt */ #define TERRAIN_DIRT 5 /** @def TERRAIN_GRASS * @note Grass */ #define TERRAIN_GRASS 6 /** @def TERRAIN_TREES * @note Trees */ #define TERRAIN_TREES 7 /** @def TERRAIN_DESERT * @note Desert */ #define TERRAIN_DESERT 8 /** @def TERRAIN_SHALLOW_LAVA * @note Shallow lava */ #define TERRAIN_SHALLOW_LAVA 9 /** @def TERRAIN_DEEP_LAVA * @note Deep lava */ #define TERRAIN_DEEP_LAVA 10 /** @def TERRAIN_MOUNTAIN * @note Mountain */ #define TERRAIN_MOUNTAIN 11 /** @def MAX_WILD_TERRAIN */ #define MAX_WILD_TERRAIN 18 /** @} */ /** @struct border_type * @note Border */ struct border_type { /** @structvar north[MAX_WID] * @brief Number */ byte north[MAX_WID]; /** @structvar south[MAX_WID] * @brief Number */ byte south[MAX_WID]; /** @structvar east[MAX_HGT] * @brief Number */ byte east[MAX_HGT]; /** @structvar west[MAX_HGT] * @brief Number */ byte west[MAX_HGT]; /** @structvar north_west * @brief Number */ byte north_west; /** @structvar north_east * @brief Number */ byte north_east; /** @structvar south_west * @brief Number */ byte south_west; /** @structvar south_east * @brief Number */ byte south_east; }; /** @struct wilderness_type_info * @note A structure describing a wilderness area * with a terrain, a town or a dungeon entrance */ struct wilderness_type_info { /** @structvar name * @brief Number * @note Name (offset) */ u32b name; /** @structvar text * @brief Number * @note Text (offset) */ u32b text; /** @structvar entrance * @brief Number * @note Which town is there(<1000 i's a town, >=1000 it a dungeon) */ u16b entrance; /** @structvar road * @brief Number * @note Flags of road */ byte road; /** @structvar level * @brief Number * @note Difficulty level */ int level; /** @structvar flags1 * @brief Number * @note Some flags */ u32b flags1; /** @structvar feat * @brief Number * @note The feature of f_info.txt that is used to allow passing, ... and to get a char/color/graph */ byte feat; /** @structvar terrain_idx * @brief Number * @note Terrain index(defined in defines.h) */ byte terrain_idx; /** @structvar terrain[MAX_WILD_TERRAIN] * @brief Number * @note Feature types for the plasma generator */ byte terrain[MAX_WILD_TERRAIN]; }; /** @struct wilderness_map * @note A structure describing a wilderness map */ struct wilderness_map { /** @structvar feat * @brief Number * @note Wilderness feature */ int feat; /** @structvar seed * @brief Number * @note Seed for the RNG */ u32b seed; /** @structvar entrance * @brief Number * @note Entrance for dungeons */ u16b entrance; /** @structvar known * @brief Boolean * @note Is it seen by the player ? */ bool known; }; /** @struct town_type * @note A structure describing a town with * stores and buildings */ struct town_type { /** @structvar name * @brief String */ cptr name; /** @structvar seed * @brief Number * @note Seed for RNG */ u32b seed; /** @structvar *store * @brief store_type * @note The stores [max_st_idx] */ store_type store[max_st_idx]; /** @structvar numstores * @brief Number */ byte numstores; /** @structvar flags * @brief Number * @note Town flags */ byte flags; /** @structvar stocked * @brief Boolean * @note Is the town actually stocked ? * Left this for the sake of compatibility */ bool stocked; /** @structvar destroyed * @brief Boolean * @note Is the town destroyed? */ bool destroyed; }; /** @var max_towns * @brief Number */ extern u16b max_towns; /** @var town_info[max_towns] * @brief town_type */ extern town_type town_info[max_towns]; /** @struct rule_type * Define monster generation rules */ struct rule_type { /** @structvar mode * @brief Number * @note Mode of combination of the monster flags */ byte mode; /** @structvar percent * @brief Number * @note Percent of monsters affected by the rule */ byte percent; /** @structvar mflags1 * @brief Number * @note The monster flags that are allowed */ u32b mflags1; /** @structvar mflags2 * @brief Number */ u32b mflags2; /** @structvar mflags3 * @brief Number */ u32b mflags3; /** @structvar mflags4 * @brief Number */ u32b mflags4; /** @structvar mflags5 * @brief Number */ u32b mflags5; /** @structvar mflags6 * @brief Number */ u32b mflags6; /** @structvar mflags7 * @brief Number */ u32b mflags7; /** @structvar mflags8 * @brief Number */ u32b mflags8; /** @structvar mflags9 * @brief Number */ u32b mflags9; /** @structvar r_char[5] * @brief String * @note Monster race allowed */ char r_char[5]; }; /** @struct obj_theme * @brief "Themed" objects. * @note Probability in percent for each class of objects to be dropped. * This could perhaps be an array - but that wouldn't be as clear. */ struct obj_theme { /** @structvar treasure * @brief Number */ byte treasure; /** @structvar combat * @brief Number */ byte combat; /** @structvar magic * @brief Number */ byte magic; /** @structvar tools * @brief Number */ byte tools; }; /** @struct dungeon_info_type * A structure for the != dungeon types */ struct dungeon_info_type { /** @structvar name * @brief Number * @note Name */ u32b name; /** @structvar text * @brief Number * @note Description */ u32b text; /** @structvar short_name[3] * @brief String * @note Short name */ char short_name[3]; /** @structvar floor1 * @brief Number * @note Floor tile 1 */ s16b floor1; /** @structvar floor_percent1[2] * @brief Number * @note Chance of type 1 */ byte floor_percent1[2]; /** @structvar floor2 * @brief Number * @note Floor tile 2 */ s16b floor2; /** @structvar floor_percent2[2] * @brief Number * @note Chance of type 2 */ byte floor_percent2[2]; /** @structvar floor3 * @brief Number * @note Floor tile 3 */ s16b floor3; /** @structvar floor_percent3[2] * @brief Number * @note Chance of type 3 */ byte floor_percent3[2]; /** @structvar outer_wall * @brief Number * @note Outer wall tile */ s16b outer_wall; /** @structvar inner_wall * @brief Number * @note Inner wall tile */ s16b inner_wall; /** @structvar fill_type1 * @brief Number * @note Cave tile 1 */ s16b fill_type1; /** @structvar fill_percent1[2] * @brief Number * @note Chance of type 1 */ byte fill_percent1[2]; /** @structvar fill_type2 * @brief Number * @note Cave tile 2 */ s16b fill_type2; /** @structvar fill_percent2[2] * @brief Number * @note Chance of type 2 */ byte fill_percent2[2]; /** @structvar fill_type3 * @brief Number * @note Cave tile 3 */ s16b fill_type3; /** @structvar fill_percent3[2] * @brief Number * @note Chance of type 3 */ byte fill_percent3[2]; /** @structvar fill_method * @brief Number * @note Smoothing parameter for the above */ byte fill_method; /** @structvar mindepth * @brief Number * @note Minimal depth */ s16b mindepth; /** @structvar maxdepth * @brief Number * @note Maximal depth */ s16b maxdepth; /** @structvar principal * @brief Boolean * @note If it's a part of the main dungeon */ bool principal; /** @structvar next * @brief Number * @note The next part of the main dungeon */ byte next; /** @structvar min_plev * @brief Number * @note Minimal plev needed to enter -- it's an anti-cheating mesure */ byte min_plev; /** @structvar min_m_alloc_level * @brief Number * @note Minimal number of monsters per level */ int min_m_alloc_level; /** @structvar max_m_alloc_chance * @brief Number * @note There is a 1/max_m_alloc_chance chance per round of creating a new monster */ int max_m_alloc_chance; /** @structvar flags1 * @brief Number * @note Flags 1 */ u32b flags1; /** @structvar flags2 * @brief Number * @note Flags 1 */ u32b flags2; /** @structvar size_x * @brief Number */ int size_x; /** @structvar size_y * @brief Number * @note Desired numers of panels */ int size_y; /** @structvar rule_percents[100] * @brief Number * @note Flat rule percents */ byte rule_percents[100]; /** @structvar rules[5] * @brief rule_type * @note Monster generation rules */ rule_type rules[5]; /** @structvar final_object * @brief Number * @note The object you'll find at the bottom */ int final_object; /** @structvar final_artifact * @brief Number * @note The artifact you'll find at the bottom */ int final_artifact; /** @structvar final_guardian * @brief Number * @note The artifact's guardian. If an artifact is specified, then it's NEEDED */ int final_guardian; /** @structvar ix * @brief Number */ int ix; /** @structvar iy * @brief Number */ int iy; /** @structvar ox * @brief Number */ int ox; /** @structvar oy * @brief Number * @note Wilderness coordinates of the entrance/output of the dungeon */ int oy; /** @structvar objs * @brief obj_theme * @note The drops type */ obj_theme objs; /** @structvar d_dice[4] * @brief Number * @note Number of dices */ int d_dice[4]; /** @structvar d_side[4] * @brief Number * @note Number of sides */ int d_side[4]; /** @structvar d_frequency[4] * @brief Number * @note Frequency of damage (1 is the minimum) */ int d_frequency[4]; /** @structvar d_type[4] * @brief Number * @note Type of damage */ int d_type[4]; /** @structvar t_idx[TOWN_DUNGEON] * @brief Number * @note The towns */ s16b t_idx[TOWN_DUNGEON]; /** @structvar t_level[TOWN_DUNGEON] * @brief Number * @note The towns levels */ s16b t_level[TOWN_DUNGEON]; /** @structvar t_num * @brief Number * @note Number of towns */ s16b t_num; }; /** @var max_d_idx * @brief Number */ extern u16b max_d_idx; /** @var d_info[max_d_idx] * @brief dungeon_info_type */ extern dungeon_info_type d_info[max_d_idx]; /** @var *d_name * @brief String */ extern char *d_name; /** @var *d_text * @brief String */ extern char *d_text; /** @var max_wild_x * @brief Number */ extern u16b max_wild_x; /** @var max_wild_y * @brief Number */ extern u16b max_wild_y; /** @var max_wf_idx * @brief Number */ extern u16b max_wf_idx; /** @var wf_info[max_wf_idx] * @brief wilderness_type_info */ extern wilderness_type_info wf_info[max_wf_idx]; /** @var *wf_name * @brief String */ extern char *wf_name; /** @var *wf_text * @brief String */ extern char *wf_text; /** @var DUNGEON_DEATH * @brief Number */ extern s32b DUNGEON_DEATH; /** @var current_dungeon_idx; * @brief Number */ extern byte dungeon_type@current_dungeon_idx; /* * tolua doesnt like wierd arraysn, I'll use accessing functions * extern wilderness_map wild_map[max_wild_y][max_wild_x]; */ $static wilderness_map* lua_get_wild_map(int y, int x) { return &wild_map[y][x]; } /** @fn wild_map(int y, int x); * @brief Return a map of the wilderness at coordinate (y,x).\n * @param y Number \n y coordinate of wilderness map * @brief Y-coordinate * @param x Number \n x coordinate of wilderness map * @brief X-coordinate * @return wilderness_map \n map of wilderness at coordinate (y,x) * @note (see file w_dun.c) */ wilderness_map* lua_get_wild_map@wild_map(int y, int x); /** @fn place_trap(int y, int x) * @brief Place a random trap at the given location.\n * @param y Number \n y coordinate of dungeon * @brief Y-coordinate * @param x Number \n x coordinate of dungeon * @brief X-coordinate * @note * Places a random trap at the given location.\n * The location must be a valid, empty, clean, floor grid. * @note (see file traps.c) */ extern void place_trap(int y, int x); /** @fn place_floor(int y, int x) * @brief Place floor terrain at (y, x).\n * @param y Number \n y coordinate of dungeon * @brief Y-coordinate * @param x Number \n x coordinate of dungeon * @brief X-coordinate * @note * Place floor terrain at (y, x) according to dungeon info. * @note (see file cave.c) */ extern void place_floor(int y, int x); /** @fn place_filler(int y, int x) * @brief Place a cave filler at (y, x).\n * @param y Number \n y coordinate of dungeon * @brief Y-coordinate * @param x Number \n x coordinate of dungeon * @brief X-coordinate * @note (see file generate.c) */ extern void place_filler(int y, int x); /** @fn new_player_spot(int branch) * @brief Places player in a new location.\n * @param branch Number \n branch is the dungeon branch (if any). * @brief Dungeon branch * @return Boolean \n TRUE if player was placed successfully, otherwise FALSE. * The global values py and px are updated. * @note * Up to 5000 attempts are made to place the player in the dungeon. The grid * must be a naked floor and not an anti-teleport grid. In some circumstances * stairs or ways in/out may be created under the player. * @note (see file generate.c) */ extern bool new_player_spot(int branch); /** @fn get_level_desc(char *buf) * @brief Return the special level desc.\n * @param *buf String * @brief Description * @return *buf String \n The level description * @return Boolean \n TRUE if a level description was returned, otherwise FALSE * @note * This is the 'D' line in the dngn files. * @note (see file levels.c) */ extern bool get_level_desc(char *buf); /** @fn get_level_flags() * These are the 'F' lines in the dngn files. * @note (see file levels.c) */ extern void get_level_flags(); /** @fn get_dungeon_name(char *buf) * @brief Return the special level name.\n * @param *buf String * @brief Name * @return *buf String \n The level name * @return Boolean \n TRUE if a level name was returned, otherwise FALSE * @note * This is the 'N' line in the dngn files. * @note (see file levels.c) */ extern bool get_dungeon_name(char *buf); /** @fn get_dungeon_special(char *buf) * @brief Return the map filename.\n * @param *buf String * @brief Map filename * @return *buf String \n The map filename * @return Boolean \n TRUE if a map filename was returned, otherwise FALSE * @note * This is the 'S' line in the dngn files. * @note (see file levels.c) */ extern bool get_dungeon_special(char *buf); /** @fn get_command(const char *file, char comm, char *param) * @brief Return the parameter of command "comm" in file "*file".\n * @param *file String \n name of the dungeon file. * @brief Dungeon file * @param comm String \n The command \n * 'A' = father branch, 'B' = branch, 'D' = desccription, 'L' = father level, * 'N' = name, 'S' = savefile extension, 'U' = map filename * @brief Command * @param *param String * @brief Parameter * @return *param String \n The result of the command * @return Boolean \n TRUE if a result is returned, otherwise FALSE * @note (see file levels.c) */ extern bool get_command(const char *file, char comm, char *param); /** @fn get_branch() * @brief return the dungeon branch starting form the current dungeon/level. * @return Number \n The branch * @note * This is the 'B' line in the dngn files. * @note (see file levels.c) */ extern int get_branch(); /** @fn get_fbranch() * @brief Return the father dungeon branch. * @return Number \n The father branch * @note * This is the 'A' line in the dngn files. * @note (see file levels.c) */ extern int get_fbranch(); /** @fn get_flevel() * @brief Return the father dungeon level. * @return Number \n The father level * @note * This is the 'L' line in the dngn files. * @note (see file levels.c) */ extern int get_flevel(); /** @fn get_dungeon_save(char *buf) * @brief Return the extension of the savefile for the level.\n * @param *buf String * @brief Savefile extension * @return *buf String \n The savefile extension * @return Boolean \n TRUE if a savefile extension was returned, otherwise FALSE * This is the 'S' line in the dngn files. * @note (see file levels.c) */ extern bool get_dungeon_save(char *buf);