OSDN Git Service

Merge branch 'feature/bounty-endless-loop' into develop
[hengband/hengband.git] / src / dungeon / dungeon.h
1 #pragma once
2
3 #include "system/angband.h"
4 #include "grid/feature.h"
5
6 #define DUNGEON_FEAT_PROB_NUM 3
7
8 #define DUNGEON_ANGBAND  1
9 #define DUNGEON_GALGALS  2
10 #define DUNGEON_ORC      3
11 #define DUNGEON_MAZE     4
12 #define DUNGEON_DRAGON   5
13 #define DUNGEON_GRAVE    6
14 #define DUNGEON_WOOD     7
15 #define DUNGEON_VOLCANO  8
16 #define DUNGEON_HELL     9
17 #define DUNGEON_HEAVEN   10
18 #define DUNGEON_OCEAN    11
19 #define DUNGEON_CASTLE   12
20 #define DUNGEON_CTH      13
21 #define DUNGEON_MOUNTAIN 14
22 #define DUNGEON_GOLD     15
23 #define DUNGEON_NO_MAGIC 16
24 #define DUNGEON_NO_MELEE 17
25 #define DUNGEON_CHAMELEON 18
26 #define DUNGEON_DARKNESS 19
27
28 /* A structure for the != dungeon types */
29 typedef struct dungeon_type dungeon_type;
30 struct dungeon_type {
31
32         STR_OFFSET name; /* Name */
33         STR_OFFSET text; /* Description */
34
35         POSITION dy;
36         POSITION dx;
37
38         feat_prob floor[DUNGEON_FEAT_PROB_NUM]; /* Floor probability */
39         feat_prob fill[DUNGEON_FEAT_PROB_NUM];  /* Cave wall probability */
40         FEAT_IDX outer_wall;                        /* Outer wall tile */
41         FEAT_IDX inner_wall;                        /* Inner wall tile */
42         FEAT_IDX stream1;                           /* stream tile */
43         FEAT_IDX stream2;                           /* stream tile */
44
45         DEPTH mindepth;         /* Minimal depth */
46         DEPTH maxdepth;         /* Maximal depth */
47         PLAYER_LEVEL min_plev;         /* Minimal plev needed to enter -- it's an anti-cheating mesure */
48         BIT_FLAGS16 pit;
49         BIT_FLAGS16 nest;
50         BIT_FLAGS8 mode; /* Mode of combinaison of the monster flags */
51
52         int min_m_alloc_level;  /* Minimal number of monsters per level */
53         int max_m_alloc_chance; /* There is a 1/max_m_alloc_chance chance per round of creating a new monster */
54
55         BIT_FLAGS flags1;               /* Flags 1 */
56
57         BIT_FLAGS mflags1;              /* The monster flags that are allowed */
58         BIT_FLAGS mflags2;
59         BIT_FLAGS mflags3;
60         BIT_FLAGS mflags4;
61         BIT_FLAGS mflags7;
62         BIT_FLAGS mflags8;
63         BIT_FLAGS mflags9;
64         BIT_FLAGS mflagsr;
65
66         BIT_FLAGS m_a_ability_flags1;
67         BIT_FLAGS m_a_ability_flags2;
68         BIT_FLAGS m_a_ability_flags3;
69         BIT_FLAGS m_a_ability_flags4;
70
71         char r_char[5];         /* Monster race allowed */
72         KIND_OBJECT_IDX final_object;   /* The object you'll find at the bottom */
73         ARTIFACT_IDX final_artifact;    /* The artifact you'll find at the bottom */
74         MONRACE_IDX final_guardian;     /* The artifact's guardian. If an artifact is specified, then it's NEEDED */
75
76         PROB special_div;       /* % of monsters affected by the flags/races allowed, to add some variety */
77         int tunnel_percent;
78         int obj_great;
79         int obj_good;
80 };
81
82 extern DEPTH *max_dlv;
83 extern dungeon_type *d_info;
84 extern char *d_name;
85 extern char *d_text;
86
87 extern DUNGEON_IDX choose_dungeon(concptr note, POSITION y, POSITION x);