OSDN Git Service

[Refactor]見た目フラグを再定義
[hengbandforosx/hengbandosx.git] / src / dungeon / dungeon.h
1 #pragma once
2
3 #include <string>
4 #include <vector>
5
6 #include "dungeon/dungeon-flag-types.h"
7 #include "monster-race/race-ability-flags.h"
8 #include "monster-race/race-behavior-flags.h"
9 #include "monster-race/race-visual-flags.h"
10 #include "system/angband.h"
11 #include "util/flag-group.h"
12
13 #define DUNGEON_FEAT_PROB_NUM 3
14
15 #define DUNGEON_ANGBAND  1
16 #define DUNGEON_GALGALS  2
17 #define DUNGEON_ORC      3
18 #define DUNGEON_MAZE     4
19 #define DUNGEON_DRAGON   5
20 #define DUNGEON_GRAVE    6
21 #define DUNGEON_WOOD     7
22 #define DUNGEON_VOLCANO  8
23 #define DUNGEON_HELL     9
24 #define DUNGEON_HEAVEN   10
25 #define DUNGEON_OCEAN    11
26 #define DUNGEON_CASTLE   12
27 #define DUNGEON_CTH      13
28 #define DUNGEON_MOUNTAIN 14
29 #define DUNGEON_GOLD     15
30 #define DUNGEON_NO_MAGIC 16
31 #define DUNGEON_NO_MELEE 17
32 #define DUNGEON_CHAMELEON 18
33 #define DUNGEON_DARKNESS 19
34 #define DUNGEON_MAX 19
35
36 typedef struct feat_prob {
37     FEAT_IDX feat{}; /* Feature tile */
38     PERCENTAGE percent{}; /* Chance of type */
39 } feat_prob;
40
41 /* A structure for the != dungeon types */
42 struct dungeon_type {
43     DUNGEON_IDX idx{};
44
45     std::string name; /* Name */
46     std::string text; /* Description */
47
48         POSITION dy{};
49         POSITION dx{};
50
51         feat_prob floor[DUNGEON_FEAT_PROB_NUM]{}; /* Floor probability */
52         feat_prob fill[DUNGEON_FEAT_PROB_NUM]{};  /* Cave wall probability */
53         FEAT_IDX outer_wall{};                        /* Outer wall tile */
54         FEAT_IDX inner_wall{};                        /* Inner wall tile */
55         FEAT_IDX stream1{};                           /* stream tile */
56         FEAT_IDX stream2{};                           /* stream tile */
57
58         DEPTH mindepth{};         /* Minimal depth */
59         DEPTH maxdepth{};         /* Maximal depth */
60         PLAYER_LEVEL min_plev{};         /* Minimal plev needed to enter -- it's an anti-cheating mesure */
61         BIT_FLAGS16 pit{};
62         BIT_FLAGS16 nest{};
63         BIT_FLAGS8 mode{}; /* Mode of combinaison of the monster flags */
64
65         int min_m_alloc_level{};        /* Minimal number of monsters per level */
66         int max_m_alloc_chance{};       /* There is a 1/max_m_alloc_chance chance per round of creating a new monster */
67
68         EnumClassFlagGroup<DungeonFeatureType> flags{}; /* Dungeon Flags */
69
70         BIT_FLAGS mflags1{};            /* The monster flags that are allowed */
71         BIT_FLAGS mflags2{};
72         BIT_FLAGS mflags3{};
73         BIT_FLAGS mflags7{};
74         BIT_FLAGS mflags8{};
75         BIT_FLAGS mflags9{};
76         BIT_FLAGS mflagsr{};
77
78     EnumClassFlagGroup<MonsterAbilityType> mon_ability_flags;
79     EnumClassFlagGroup<MonsterBehaviorType> mon_behavior_flags;
80     EnumClassFlagGroup<MonsterVisualType> mon_visual_flags;
81
82         char r_char[5]{};               /* Monster race allowed */
83         KIND_OBJECT_IDX final_object{}; /* The object you'll find at the bottom */
84         ARTIFACT_IDX final_artifact{};  /* The artifact you'll find at the bottom */
85         MONRACE_IDX final_guardian{};   /* The artifact's guardian. If an artifact is specified, then it's NEEDED */
86
87         PROB special_div{};     /* % of monsters affected by the flags/races allowed, to add some variety */
88         int tunnel_percent{};
89         int obj_great{};
90         int obj_good{};
91 };
92
93 extern std::vector<DEPTH> max_dlv;
94 extern std::vector<dungeon_type> d_info;
95
96 class PlayerType;
97 DUNGEON_IDX choose_dungeon(concptr note, POSITION y, POSITION x);
98 bool is_in_dungeon(PlayerType *player_ptr);