forked from crawl/crawl
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbranch.h
95 lines (75 loc) · 2.83 KB
/
branch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
* @file
* @brief Dungeon branch classes
**/
#ifndef BRANCH_H
#define BRANCH_H
#include "enum.h"
#include "itemprop-enum.h"
enum branch_flag_type
{
BFLAG_NONE = 0,
BFLAG_NO_MAP = (1 << 0), // Can't be magic mapped or remembered.
BFLAG_ISLANDED = (1 << 1), // May have isolated zones with no stairs.
BFLAG_NO_XLEV_TRAVEL = (1 << 2), // Can't cross-level travel to or from it.
BFLAG_NO_ITEMS = (1 << 3), // Branch gets no random items.
BFLAG_DANGEROUS_END = (1 << 4), // bottom level is more dangerous than normal
BFLAG_SPOTTY = (1 << 5), // Connect vaults with more open paths, not hallways.
BFLAG_NO_SHAFTS = (1 << 6), // Don't generate random shafts.
};
struct Branch
{
branch_type id;
branch_type parent_branch;
int mindepth; // min/max possible parent depth for this branch
int maxdepth;
int numlevels; // depth of the branch
int absdepth; // base item generation/etc depth
uint32_t branch_flags;
dungeon_feature_type entry_stairs;
dungeon_feature_type exit_stairs;
const char* shortname; // "Slime Pits"
const char* longname; // "The Pits of Slime"
const char* abbrevname; // "Slime"
const char* entry_message;
colour_t floor_colour; // Zot needs special handling.
colour_t rock_colour;
int travel_shortcut; // Which key to press for travel.
vector<rune_type> runes; // Contained rune(s) (if any).
int ambient_noise; // affects noise loudness and player stealth
};
class branch_iterator
{
public:
branch_iterator();
operator bool() const;
const Branch* operator*() const;
const Branch* operator->() const;
branch_iterator& operator++();
branch_iterator operator++(int);
protected:
int i;
};
extern const Branch branches[NUM_BRANCHES];
extern FixedVector<level_id, NUM_BRANCHES> brentry;
extern FixedVector<int, NUM_BRANCHES> brdepth;
extern FixedVector<int, NUM_BRANCHES> branch_bribe;
extern branch_type root_branch;
const Branch& your_branch();
bool at_branch_bottom();
bool is_hell_subbranch(branch_type branch);
bool is_random_subbranch(branch_type branch);
bool is_connected_branch(const Branch *branch);
bool is_connected_branch(branch_type branch);
bool is_connected_branch(level_id place);
level_id current_level_parent();
branch_type branch_by_abbrevname(const string &branch, branch_type err = NUM_BRANCHES);
branch_type branch_by_shortname(const string &branch);
int current_level_ambient_noise();
branch_type get_branch_at(const coord_def& pos);
bool branch_is_unfinished(branch_type branch);
branch_type parent_branch(branch_type branch);
int runes_for_branch(branch_type branch);
string branch_rune_desc(branch_type br, bool remaining_only);
branch_type rune_location(rune_type rune);
#endif