1 #pragma once
2 
3 #include "tag-version.h"
4 
5 enum tile_flags ENUM_INT64
6 {
7     //// Foreground flags
8 
9     // 3 mutually exclusive flags for attitude.
10     TILE_FLAG_ATT_MASK     = 0x00030000ULL,
11     TILE_FLAG_PET          = 0x00010000ULL,
12     TILE_FLAG_GD_NEUTRAL   = 0x00020000ULL,
13     TILE_FLAG_NEUTRAL      = 0x00030000ULL,
14 
15     TILE_FLAG_S_UNDER      = 0x00040000ULL,
16     TILE_FLAG_FLYING       = 0x00080000ULL,
17 
18     // 3 mutually exclusive flags for behaviour.
19     TILE_FLAG_BEH_MASK     = 0x00300000ULL,
20     TILE_FLAG_STAB         = 0x00100000ULL,
21     TILE_FLAG_MAY_STAB     = 0x00200000ULL,
22     TILE_FLAG_FLEEING      = 0x00300000ULL,
23     TILE_FLAG_NET          = 0x00400000ULL,
24     // 0x00800000ULL is used by TILE_FLAG_POISON lower in the file.
25     TILE_FLAG_WEB          = 0x01000000ULL,
26     TILE_FLAG_GLOWING      = 0x02000000ULL,
27     TILE_FLAG_STICKY_FLAME = 0x04000000ULL,
28     TILE_FLAG_BERSERK      = 0x08000000ULL,
29     TILE_FLAG_INNER_FLAME  = 0x10000000ULL,
30     TILE_FLAG_CONSTRICTED  = 0x20000000ULL,
31     TILE_FLAG_SLOWED       = 0x8000000000ULL,
32     TILE_FLAG_PAIN_MIRROR  = 0x10000000000ULL,
33     TILE_FLAG_HASTED       = 0x20000000000ULL,
34     TILE_FLAG_MIGHT        = 0x40000000000ULL,
35     TILE_FLAG_PETRIFYING   = 0x80000000000ULL,
36     TILE_FLAG_PETRIFIED    = 0x100000000000ULL,
37     TILE_FLAG_BLIND        = 0x200000000000ULL,
38     TILE_FLAG_ANIM_OBJ     = 0x400000000000ULL,
39     TILE_FLAG_SUMMONED     = 0x800000000000ULL,
40     TILE_FLAG_PERM_SUMMON  = 0x1000000000000ULL,
41     // 0x2000000000000ULL was DEATHS_DOOR
42     TILE_FLAG_RECALL       = 0x4000000000000ULL,
43     TILE_FLAG_DRAIN        = 0x8000000000000ULL,
44     TILE_FLAG_IDEALISED    = 0x10000000000000ULL,
45     TILE_FLAG_BOUND_SOUL   = 0x20000000000000ULL,
46     TILE_FLAG_INFESTED     = 0x40000000000000ULL,
47     TILE_FLAG_CORRODED     = 0x80000000000000ULL,
48     TILE_FLAG_SWIFT        = 0x100000000000000ULL,
49     TILE_FLAG_SLOWLY_DYING = 0x200000000000000ULL,
50     TILE_FLAG_VILE_CLUTCH  = 0x400000000000000ULL,
51     TILE_FLAG_POSSESSABLE  = 0x800000000000000ULL,
52     // Different levels of poison are mutually exclusive, so we can encode them in 2 bits.
53     TILE_FLAG_POISON_MASK  = 0x1000000000800000ULL,
54     TILE_FLAG_POISON       = 0x0000000000800000ULL,
55     TILE_FLAG_MORE_POISON  = 0x1000000000000000ULL,
56     TILE_FLAG_MAX_POISON   = 0x1000000000800000ULL,
57 
58     // 4 mutually exclusive flags for threat level.
59     TILE_FLAG_THREAT_MASK  = 0xE000000000000000ULL,
60     TILE_FLAG_TRIVIAL      = 0x2000000000000000ULL,
61     TILE_FLAG_EASY         = 0x4000000000000000ULL,
62     TILE_FLAG_TOUGH        = 0x6000000000000000ULL,
63     TILE_FLAG_NASTY        = 0x8000000000000000ULL,
64 
65     // MDAM has 5 possibilities, so uses 3 bits.
66     TILE_FLAG_MDAM_MASK    = 0x1C0000000ULL,
67     TILE_FLAG_MDAM_LIGHT   = 0x040000000ULL,
68     TILE_FLAG_MDAM_MOD     = 0x080000000ULL,
69     TILE_FLAG_MDAM_HEAVY   = 0x0C0000000ULL,
70     TILE_FLAG_MDAM_SEV     = 0x100000000ULL,
71     TILE_FLAG_MDAM_ADEAD   = 0x1C0000000ULL,
72 
73     // Demon difficulty has 5 possibilities, so uses 3 bits.
74     TILE_FLAG_DEMON        = 0xE00000000ULL,
75     TILE_FLAG_DEMON_5      = 0x200000000ULL,
76     TILE_FLAG_DEMON_4      = 0x400000000ULL,
77     TILE_FLAG_DEMON_3      = 0x600000000ULL,
78     TILE_FLAG_DEMON_2      = 0x800000000ULL,
79     TILE_FLAG_DEMON_1      = 0xE00000000ULL,
80 
81     //// Background flags
82 
83     TILE_FLAG_RAY          = 0x00010000ULL,
84     TILE_FLAG_MM_UNSEEN    = 0x00020000ULL,
85     TILE_FLAG_UNSEEN       = 0x00040000ULL,
86 
87     // 3 mutually exclusive flags for cursors.
88     TILE_FLAG_CURSOR1      = 0x00180000ULL,
89     TILE_FLAG_CURSOR2      = 0x00080000ULL,
90     TILE_FLAG_CURSOR3      = 0x00100000ULL,
91     TILE_FLAG_CURSOR       = 0x00180000ULL,
92 
93     TILE_FLAG_TUT_CURSOR   = 0x00200000ULL,
94     TILE_FLAG_TRAV_EXCL    = 0x00400000ULL,
95     TILE_FLAG_EXCL_CTR     = 0x00800000ULL,
96     TILE_FLAG_RAY_OOR      = 0x01000000ULL,
97     TILE_FLAG_OOR          = 0x02000000ULL,
98     TILE_FLAG_WATER        = 0x04000000ULL,
99     TILE_FLAG_NEW_STAIR    = 0x08000000ULL,
100     TILE_FLAG_NEW_TRANSPORTER = 0x10000000ULL,
101 
102     // Tentacle overlay flags: direction and type.
103     TILE_FLAG_TENTACLE_NW        = 0x020000000ULL,
104     TILE_FLAG_TENTACLE_NE        = 0x040000000ULL,
105     TILE_FLAG_TENTACLE_SE        = 0x080000000ULL,
106     TILE_FLAG_TENTACLE_SW        = 0x100000000ULL,
107     TILE_FLAG_TENTACLE_KRAKEN    = 0x0200000000ULL,
108     TILE_FLAG_TENTACLE_ELDRITCH  = 0x0400000000ULL,
109     TILE_FLAG_TENTACLE_STARSPAWN = 0x0800000000ULL,
110     TILE_FLAG_TENTACLE_VINE      = 0x1000000000ULL,
111 
112 #if TAG_MAJOR_VERSION == 34
113     // Starspawn tentacle overlays. Obviated by the above.
114     TILE_FLAG_STARSPAWN_NW = 0x02000000000ULL,
115     TILE_FLAG_STARSPAWN_NE = 0x04000000000ULL,
116     TILE_FLAG_STARSPAWN_SE = 0x08000000000ULL,
117     TILE_FLAG_STARSPAWN_SW = 0x10000000000ULL,
118 #endif
119 
120     //// General
121 
122     // Should go up with RAY/RAY_OOR, but they need to be exclusive for those
123     // flags and there's no room.
124     TILE_FLAG_LANDING     = 0x20000000000ULL,
125     TILE_FLAG_RAY_MULTI   = 0x40000000000ULL,
126 
127     // More tentacle types
128     TILE_FLAG_TENTACLE_ZOMBIE_KRAKEN = 0x80000000000ULL,
129     TILE_FLAG_TENTACLE_SIMULACRUM_KRAKEN = 0x100000000000ULL,
130     TILE_FLAG_TENTACLE_SPECTRAL_KRAKEN = 0x200000000000ULL,
131 
132     // Mask for the tile index itself.
133     TILE_FLAG_MASK       = 0x0000FFFFULL,
134 };
135