1 module tcod.c.types;
2 
3 import tcod.c.all;
4 
5 extern (C):
6 
7 // --- List ---
8 alias void* TCOD_list_t;
9 
10 
11 // --- Colour ---
12 struct TCOD_color_t {
13     ubyte r,g,b;
14 }
15 
16 // color names
17 enum {
18     TCOD_COLOR_RED,
19     TCOD_COLOR_FLAME,
20     TCOD_COLOR_ORANGE,
21     TCOD_COLOR_AMBER,
22     TCOD_COLOR_YELLOW,
23     TCOD_COLOR_LIME,
24     TCOD_COLOR_CHARTREUSE,
25     TCOD_COLOR_GREEN,
26     TCOD_COLOR_SEA,
27     TCOD_COLOR_TURQUOISE,
28     TCOD_COLOR_CYAN,
29     TCOD_COLOR_SKY,
30     TCOD_COLOR_AZURE,
31     TCOD_COLOR_BLUE,
32     TCOD_COLOR_HAN,
33     TCOD_COLOR_VIOLET,
34     TCOD_COLOR_PURPLE,
35     TCOD_COLOR_FUCHSIA,
36     TCOD_COLOR_MAGENTA,
37     TCOD_COLOR_PINK,
38     TCOD_COLOR_CRIMSON,
39     TCOD_COLOR_NB,
40 }
41 
42 // color levels
43 enum {
44     TCOD_COLOR_DESATURATED,
45     TCOD_COLOR_LIGHTEST,
46     TCOD_COLOR_LIGHTER,
47     TCOD_COLOR_LIGHT,
48     TCOD_COLOR_NORMAL,
49     TCOD_COLOR_DARK,
50     TCOD_COLOR_DARKER,
51     TCOD_COLOR_DARKEST,
52     TCOD_COLOR_LEVELS,
53 }
54 
55 // color array
56 const TCOD_color_t[TCOD_COLOR_LEVELS][TCOD_COLOR_NB] TCOD_colors;
57 
58 // grey levels
59 const TCOD_color_t TCOD_black = TCOD_color_t(0, 0, 0);
60 const TCOD_color_t TCOD_darkest_grey = TCOD_color_t(31, 31, 31);
61 const TCOD_color_t TCOD_darkest_gray = TCOD_color_t(31, 31, 31);
62 const TCOD_color_t TCOD_darker_grey = TCOD_color_t(63, 63, 63);
63 const TCOD_color_t TCOD_darker_gray = TCOD_color_t(63, 63, 63);
64 const TCOD_color_t TCOD_dark_grey = TCOD_color_t(95, 95, 95);
65 const TCOD_color_t TCOD_dark_gray = TCOD_color_t(95, 95, 95);
66 const TCOD_color_t TCOD_grey = TCOD_color_t(127, 127, 127);
67 const TCOD_color_t TCOD_gray = TCOD_color_t(127, 127, 127);
68 const TCOD_color_t TCOD_light_grey = TCOD_color_t(159, 159, 159);
69 const TCOD_color_t TCOD_light_gray = TCOD_color_t(159, 159, 159);
70 const TCOD_color_t TCOD_lighter_grey = TCOD_color_t(191, 191, 191);
71 const TCOD_color_t TCOD_lighter_gray = TCOD_color_t(191, 191, 191);
72 const TCOD_color_t TCOD_lightest_grey = TCOD_color_t(223, 223, 223);
73 const TCOD_color_t TCOD_lightest_gray = TCOD_color_t(223, 223, 223);
74 const TCOD_color_t TCOD_white = TCOD_color_t(255, 255, 255);
75 
76 /* sepia */
77 const TCOD_color_t TCOD_darkest_sepia = TCOD_color_t(31, 24, 15);
78 const TCOD_color_t TCOD_darker_sepia = TCOD_color_t(63, 50, 31);
79 const TCOD_color_t TCOD_dark_sepia = TCOD_color_t(94, 75, 47);
80 const TCOD_color_t TCOD_sepia = TCOD_color_t(127, 101, 63);
81 const TCOD_color_t TCOD_light_sepia = TCOD_color_t(158, 134, 100);
82 const TCOD_color_t TCOD_lighter_sepia = TCOD_color_t(191, 171, 143);
83 const TCOD_color_t TCOD_lightest_sepia = TCOD_color_t(222, 211, 195);
84 
85 // standard colors
86 const TCOD_color_t TCOD_red = TCOD_color_t(255, 0, 0);
87 const TCOD_color_t TCOD_flame = TCOD_color_t(255, 63, 0);
88 const TCOD_color_t TCOD_orange = TCOD_color_t(255, 127, 0);
89 const TCOD_color_t TCOD_amber = TCOD_color_t(255, 191, 0);
90 const TCOD_color_t TCOD_yellow = TCOD_color_t(255, 255, 0);
91 const TCOD_color_t TCOD_lime = TCOD_color_t(191, 255, 0);
92 const TCOD_color_t TCOD_chartreuse = TCOD_color_t(127, 255, 0);
93 const TCOD_color_t TCOD_green = TCOD_color_t(0, 255, 0);
94 const TCOD_color_t TCOD_sea = TCOD_color_t(0, 255, 127);
95 const TCOD_color_t TCOD_turquoise = TCOD_color_t(0, 255, 191);
96 const TCOD_color_t TCOD_cyan = TCOD_color_t(0, 255, 255);
97 const TCOD_color_t TCOD_sky = TCOD_color_t(0, 127, 255);
98 const TCOD_color_t TCOD_azure = TCOD_color_t(0, 127, 255);
99 const TCOD_color_t TCOD_blue = TCOD_color_t(0, 0, 255);
100 const TCOD_color_t TCOD_han = TCOD_color_t(63, 0, 255);
101 const TCOD_color_t TCOD_violet = TCOD_color_t(127, 0, 255);
102 const TCOD_color_t TCOD_purple = TCOD_color_t(191, 0, 255);
103 const TCOD_color_t TCOD_fuchsia = TCOD_color_t(255, 0, 191);
104 const TCOD_color_t TCOD_magenta = TCOD_color_t(255, 0, 255);
105 const TCOD_color_t TCOD_pink = TCOD_color_t(255, 0, 127);
106 const TCOD_color_t TCOD_crimson = TCOD_color_t(255, 0, 63);
107 
108 // dark colors
109 const TCOD_color_t TCOD_dark_red = TCOD_color_t(191, 0, 0);
110 const TCOD_color_t TCOD_dark_flame = TCOD_color_t(191, 47, 0);
111 const TCOD_color_t TCOD_dark_orange = TCOD_color_t(191, 95, 0);
112 const TCOD_color_t TCOD_dark_amber = TCOD_color_t(191, 143, 0);
113 const TCOD_color_t TCOD_dark_yellow = TCOD_color_t(191, 191, 0);
114 const TCOD_color_t TCOD_dark_lime = TCOD_color_t(143, 191, 0);
115 const TCOD_color_t TCOD_dark_chartreuse = TCOD_color_t(95, 191, 0);
116 const TCOD_color_t TCOD_dark_green = TCOD_color_t(0, 191, 0);
117 const TCOD_color_t TCOD_dark_sea = TCOD_color_t(0, 191, 95);
118 const TCOD_color_t TCOD_dark_turquoise = TCOD_color_t(0, 191, 143);
119 const TCOD_color_t TCOD_dark_cyan = TCOD_color_t(0, 191, 191);
120 const TCOD_color_t TCOD_dark_sky = TCOD_color_t(0, 143, 191);
121 const TCOD_color_t TCOD_dark_azure = TCOD_color_t(0, 95, 191);
122 const TCOD_color_t TCOD_dark_blue = TCOD_color_t(0, 0, 191);
123 const TCOD_color_t TCOD_dark_han = TCOD_color_t(47, 0, 191);
124 const TCOD_color_t TCOD_dark_violet = TCOD_color_t(95, 0, 191);
125 const TCOD_color_t TCOD_dark_purple = TCOD_color_t(143, 0, 191);
126 const TCOD_color_t TCOD_dark_fuchsia = TCOD_color_t(191, 0, 191);
127 const TCOD_color_t TCOD_dark_magenta = TCOD_color_t(191, 0, 143);
128 const TCOD_color_t TCOD_dark_pink = TCOD_color_t(191, 0, 95);
129 const TCOD_color_t TCOD_dark_crimson = TCOD_color_t(191, 0, 47);
130 
131 // darker colors
132 const TCOD_color_t TCOD_darker_red = TCOD_color_t(127, 0, 0);
133 const TCOD_color_t TCOD_darker_flame = TCOD_color_t(127, 31, 0);
134 const TCOD_color_t TCOD_darker_orange = TCOD_color_t(127, 63, 0);
135 const TCOD_color_t TCOD_darker_amber = TCOD_color_t(127, 95, 0);
136 const TCOD_color_t TCOD_darker_yellow = TCOD_color_t(127, 127, 0);
137 const TCOD_color_t TCOD_darker_lime = TCOD_color_t(95, 127, 0);
138 const TCOD_color_t TCOD_darker_chartreuse = TCOD_color_t(62, 127, 0);
139 const TCOD_color_t TCOD_darker_green = TCOD_color_t(0, 127, 0);
140 const TCOD_color_t TCOD_darker_sea = TCOD_color_t(0, 127, 63);
141 const TCOD_color_t TCOD_darker_turquoise = TCOD_color_t(0, 127, 95);
142 const TCOD_color_t TCOD_darker_cyan = TCOD_color_t(0, 127, 127);
143 const TCOD_color_t TCOD_darker_sky = TCOD_color_t(0, 95, 127);
144 const TCOD_color_t TCOD_darker_azure = TCOD_color_t(0, 63, 127);
145 const TCOD_color_t TCOD_darker_blue = TCOD_color_t(0, 0, 127);
146 const TCOD_color_t TCOD_darker_han = TCOD_color_t(31, 0, 127);
147 const TCOD_color_t TCOD_darker_violet = TCOD_color_t(63, 0, 127);
148 const TCOD_color_t TCOD_darker_purple = TCOD_color_t(95, 0, 127);
149 const TCOD_color_t TCOD_darker_fuchsia = TCOD_color_t(127, 0, 127);
150 const TCOD_color_t TCOD_darker_magenta = TCOD_color_t(127, 0, 95);
151 const TCOD_color_t TCOD_darker_pink = TCOD_color_t(127, 0, 63);
152 const TCOD_color_t TCOD_darker_crimson = TCOD_color_t(127, 0, 31);
153 
154 // darkest colors
155 const TCOD_color_t TCOD_darkest_red = TCOD_color_t(63, 0, 0);
156 const TCOD_color_t TCOD_darkest_flame = TCOD_color_t(63, 15, 0);
157 const TCOD_color_t TCOD_darkest_orange = TCOD_color_t(63, 31, 0);
158 const TCOD_color_t TCOD_darkest_amber = TCOD_color_t(63, 47, 0);
159 const TCOD_color_t TCOD_darkest_yellow = TCOD_color_t(63, 63, 0);
160 const TCOD_color_t TCOD_darkest_lime = TCOD_color_t(47, 63, 0);
161 const TCOD_color_t TCOD_darkest_chartreuse = TCOD_color_t(31, 63, 0);
162 const TCOD_color_t TCOD_darkest_green = TCOD_color_t(0, 63, 0);
163 const TCOD_color_t TCOD_darkest_sea = TCOD_color_t(0, 63, 31);
164 const TCOD_color_t TCOD_darkest_turquoise = TCOD_color_t(0, 63, 47);
165 const TCOD_color_t TCOD_darkest_cyan = TCOD_color_t(0, 63, 63);
166 const TCOD_color_t TCOD_darkest_sky = TCOD_color_t(0, 47, 63);
167 const TCOD_color_t TCOD_darkest_azure = TCOD_color_t(0, 31, 63);
168 const TCOD_color_t TCOD_darkest_blue = TCOD_color_t(0, 0, 63);
169 const TCOD_color_t TCOD_darkest_han = TCOD_color_t(15, 0, 63);
170 const TCOD_color_t TCOD_darkest_violet = TCOD_color_t(31, 0, 63);
171 const TCOD_color_t TCOD_darkest_purple = TCOD_color_t(47, 0, 63);
172 const TCOD_color_t TCOD_darkest_fuchsia = TCOD_color_t(63, 0, 63);
173 const TCOD_color_t TCOD_darkest_magenta = TCOD_color_t(63, 0, 47);
174 const TCOD_color_t TCOD_darkest_pink = TCOD_color_t(63, 0, 31);
175 const TCOD_color_t TCOD_darkest_crimson = TCOD_color_t(63, 0, 15);
176 
177 // light colors
178 const TCOD_color_t TCOD_light_red = TCOD_color_t(255, 63, 63);
179 const TCOD_color_t TCOD_light_flame = TCOD_color_t(255, 111, 63);
180 const TCOD_color_t TCOD_light_orange = TCOD_color_t(255, 159, 63);
181 const TCOD_color_t TCOD_light_amber = TCOD_color_t(255, 207, 63);
182 const TCOD_color_t TCOD_light_yellow = TCOD_color_t(255, 255, 63);
183 const TCOD_color_t TCOD_light_lime = TCOD_color_t(207, 255, 63);
184 const TCOD_color_t TCOD_light_chartreuse = TCOD_color_t(159, 255, 63);
185 const TCOD_color_t TCOD_light_green = TCOD_color_t(63, 255, 159);
186 const TCOD_color_t TCOD_light_sea = TCOD_color_t(63, 255, 159);
187 const TCOD_color_t TCOD_light_turquoise = TCOD_color_t(63, 255, 207);
188 const TCOD_color_t TCOD_light_cyan = TCOD_color_t(63, 255, 255);
189 const TCOD_color_t TCOD_light_sky = TCOD_color_t(63, 207, 255);
190 const TCOD_color_t TCOD_light_azure = TCOD_color_t(63, 159, 255);
191 const TCOD_color_t TCOD_light_blue = TCOD_color_t(63, 63, 255);
192 const TCOD_color_t TCOD_light_han = TCOD_color_t(111, 63, 255);
193 const TCOD_color_t TCOD_light_violet = TCOD_color_t(159, 63, 255);
194 const TCOD_color_t TCOD_light_purple = TCOD_color_t(207, 63, 255);
195 const TCOD_color_t TCOD_light_fuchsia = TCOD_color_t(255, 63, 255);
196 const TCOD_color_t TCOD_light_magenta = TCOD_color_t(255, 63, 207);
197 const TCOD_color_t TCOD_light_pink = TCOD_color_t(255, 63, 159);
198 const TCOD_color_t TCOD_light_crimson = TCOD_color_t(255, 63, 111);
199 
200 // lighter colors
201 const TCOD_color_t TCOD_lighter_red = TCOD_color_t(255, 127, 127);
202 const TCOD_color_t TCOD_lighter_flame = TCOD_color_t(255, 159, 127);
203 const TCOD_color_t TCOD_lighter_orange = TCOD_color_t(255, 191, 127);
204 const TCOD_color_t TCOD_lighter_amber = TCOD_color_t(255, 223, 127);
205 const TCOD_color_t TCOD_lighter_yellow = TCOD_color_t(255, 255, 127);
206 const TCOD_color_t TCOD_lighter_lime = TCOD_color_t(223, 255, 127);
207 const TCOD_color_t TCOD_lighter_chartreuse = TCOD_color_t(191, 255, 127);
208 const TCOD_color_t TCOD_lighter_green = TCOD_color_t(127, 255, 127);
209 const TCOD_color_t TCOD_lighter_sea = TCOD_color_t(127, 255, 191);
210 const TCOD_color_t TCOD_lighter_turquoise = TCOD_color_t(127, 255, 223);
211 const TCOD_color_t TCOD_lighter_cyan = TCOD_color_t(127, 255, 255);
212 const TCOD_color_t TCOD_lighter_sky = TCOD_color_t(127, 223, 255);
213 const TCOD_color_t TCOD_lighter_azure = TCOD_color_t(127, 191, 255);
214 const TCOD_color_t TCOD_lighter_blue = TCOD_color_t(127, 127, 255);
215 const TCOD_color_t TCOD_lighter_han = TCOD_color_t(159, 127, 255);
216 const TCOD_color_t TCOD_lighter_violet = TCOD_color_t(191, 127, 255);
217 const TCOD_color_t TCOD_lighter_purple = TCOD_color_t(223, 127, 255);
218 const TCOD_color_t TCOD_lighter_fuchsia = TCOD_color_t(255, 127, 255);
219 const TCOD_color_t TCOD_lighter_magenta = TCOD_color_t(255, 127, 223);
220 const TCOD_color_t TCOD_lighter_pink = TCOD_color_t(255, 127, 191);
221 const TCOD_color_t TCOD_lighter_crimson = TCOD_color_t(255, 127, 159);
222 
223 // lightest colors
224 const TCOD_color_t TCOD_lightest_red = TCOD_color_t(255, 191, 191);
225 const TCOD_color_t TCOD_lightest_flame = TCOD_color_t(255, 207, 191);
226 const TCOD_color_t TCOD_lightest_orange = TCOD_color_t(255, 223, 191);
227 const TCOD_color_t TCOD_lightest_amber = TCOD_color_t(255, 239, 191);
228 const TCOD_color_t TCOD_lightest_yellow = TCOD_color_t(255, 255, 191);
229 const TCOD_color_t TCOD_lightest_lime = TCOD_color_t(239, 255, 191);
230 const TCOD_color_t TCOD_lightest_chartreuse = TCOD_color_t(223, 255, 191);
231 const TCOD_color_t TCOD_lightest_green = TCOD_color_t(191, 255, 191);
232 const TCOD_color_t TCOD_lightest_sea = TCOD_color_t(191, 255, 223);
233 const TCOD_color_t TCOD_lightest_turquoise = TCOD_color_t(191, 255, 239);
234 const TCOD_color_t TCOD_lightest_cyan = TCOD_color_t(191, 255, 255);
235 const TCOD_color_t TCOD_lightest_sky = TCOD_color_t(191, 239, 255);
236 const TCOD_color_t TCOD_lightest_azure = TCOD_color_t(191, 223, 255);
237 const TCOD_color_t TCOD_lightest_blue = TCOD_color_t(191, 191, 255);
238 const TCOD_color_t TCOD_lightest_han = TCOD_color_t(207, 191, 255);
239 const TCOD_color_t TCOD_lightest_violet = TCOD_color_t(223, 191, 255);
240 const TCOD_color_t TCOD_lightest_purple = TCOD_color_t(239, 191, 255);
241 const TCOD_color_t TCOD_lightest_fuchsia = TCOD_color_t(255, 191, 255);
242 const TCOD_color_t TCOD_lightest_magenta = TCOD_color_t(255, 191, 239);
243 const TCOD_color_t TCOD_lightest_pink = TCOD_color_t(255, 191, 223);
244 const TCOD_color_t TCOD_lightest_crimson = TCOD_color_t(255, 191, 207);
245 
246 // desaturated
247 const TCOD_color_t TCOD_desaturated_red = TCOD_color_t(127, 63, 63);
248 const TCOD_color_t TCOD_desaturated_flame = TCOD_color_t(127, 79, 63);
249 const TCOD_color_t TCOD_desaturated_orange = TCOD_color_t(127, 95, 63);
250 const TCOD_color_t TCOD_desaturated_amber = TCOD_color_t(127, 111, 63);
251 const TCOD_color_t TCOD_desaturated_yellow = TCOD_color_t(127, 127, 63);
252 const TCOD_color_t TCOD_desaturated_lime = TCOD_color_t(111, 127, 63);
253 const TCOD_color_t TCOD_desaturated_chartreuse = TCOD_color_t(95, 127, 63);
254 const TCOD_color_t TCOD_desaturated_green = TCOD_color_t(63, 127, 63);
255 const TCOD_color_t TCOD_desaturated_sea = TCOD_color_t(63, 127, 95);
256 const TCOD_color_t TCOD_desaturated_turquoise = TCOD_color_t(63, 127, 111);
257 const TCOD_color_t TCOD_desaturated_cyan = TCOD_color_t(63, 127, 127);
258 const TCOD_color_t TCOD_desaturated_sky = TCOD_color_t(63, 111, 127);
259 const TCOD_color_t TCOD_desaturated_azure = TCOD_color_t(63, 95, 127);
260 const TCOD_color_t TCOD_desaturated_blue = TCOD_color_t(63, 63, 127);
261 const TCOD_color_t TCOD_desaturated_han = TCOD_color_t(79, 63, 127);
262 const TCOD_color_t TCOD_desaturated_violet = TCOD_color_t(95, 63, 127);
263 const TCOD_color_t TCOD_desaturated_purple = TCOD_color_t(111, 63, 127);
264 const TCOD_color_t TCOD_desaturated_fuchsia = TCOD_color_t(127, 63, 127);
265 const TCOD_color_t TCOD_desaturated_magenta = TCOD_color_t(127, 63, 111);
266 const TCOD_color_t TCOD_desaturated_pink = TCOD_color_t(127, 63, 95);
267 const TCOD_color_t TCOD_desaturated_crimson = TCOD_color_t(127, 63, 79);
268 
269 // metallic
270 const TCOD_color_t TCOD_brass = TCOD_color_t(191, 151, 96);
271 const TCOD_color_t TCOD_copper = TCOD_color_t(197, 136, 124);
272 const TCOD_color_t TCOD_gold = TCOD_color_t(229, 191, 0);
273 const TCOD_color_t TCOD_silver = TCOD_color_t(203, 203, 203);
274 
275 // miscellaneous
276 const TCOD_color_t TCOD_celadon = TCOD_color_t(172, 255, 175);
277 const TCOD_color_t TCOD_peach = TCOD_color_t(255, 159, 127);
278 
279 // --- Console ---
280 
281 alias int TCOD_keycode_t;
282 enum : TCOD_keycode_t {
283     TCODK_NONE,
284     TCODK_ESCAPE,
285     TCODK_BACKSPACE,
286     TCODK_TAB,
287     TCODK_ENTER,
288     TCODK_SHIFT,
289     TCODK_CONTROL,
290     TCODK_ALT,
291     TCODK_PAUSE,
292     TCODK_CAPSLOCK,
293     TCODK_PAGEUP,
294     TCODK_PAGEDOWN,
295     TCODK_END,
296     TCODK_HOME,
297     TCODK_UP,
298     TCODK_LEFT,
299     TCODK_RIGHT,
300     TCODK_DOWN,
301     TCODK_PRINTSCREEN,
302     TCODK_INSERT,
303     TCODK_DELETE,
304     TCODK_LWIN,
305     TCODK_RWIN,
306     TCODK_APPS,
307     TCODK_0,
308     TCODK_1,
309     TCODK_2,
310     TCODK_3,
311     TCODK_4,
312     TCODK_5,
313     TCODK_6,
314     TCODK_7,
315     TCODK_8,
316     TCODK_9,
317     TCODK_KP0,
318     TCODK_KP1,
319     TCODK_KP2,
320     TCODK_KP3,
321     TCODK_KP4,
322     TCODK_KP5,
323     TCODK_KP6,
324     TCODK_KP7,
325     TCODK_KP8,
326     TCODK_KP9,
327     TCODK_KPADD,
328     TCODK_KPSUB,
329     TCODK_KPDIV,
330     TCODK_KPMUL,
331     TCODK_KPDEC,
332     TCODK_KPENTER,
333     TCODK_F1,
334     TCODK_F2,
335     TCODK_F3,
336     TCODK_F4,
337     TCODK_F5,
338     TCODK_F6,
339     TCODK_F7,
340     TCODK_F8,
341     TCODK_F9,
342     TCODK_F10,
343     TCODK_F11,
344     TCODK_F12,
345     TCODK_NUMLOCK,
346     TCODK_SCROLLLOCK,
347     TCODK_SPACE,
348     TCODK_CHAR
349 }
350 
351 /* key data : special code or character */
352 struct TCOD_key_t {
353     TCOD_keycode_t vk; /*  key code */
354     char c; /* character if vk == TCODK_CHAR else 0 */
355     bool pressed;
356     bool lalt;
357     bool lctrl;
358     bool ralt;
359     bool rctrl;
360     bool shift;
361 }
362 
363 enum {
364     // single walls
365     TCOD_CHAR_HLINE=196,
366     TCOD_CHAR_VLINE=179,
367     TCOD_CHAR_NE=191,
368     TCOD_CHAR_NW=218,
369     TCOD_CHAR_SE=217,
370     TCOD_CHAR_SW=192,
371     TCOD_CHAR_TEEW=180,
372     TCOD_CHAR_TEEE=195,
373     TCOD_CHAR_TEEN=193,
374     TCOD_CHAR_TEES=194,
375     TCOD_CHAR_CROSS=197,
376     // double walls
377     TCOD_CHAR_DHLINE=205,
378     TCOD_CHAR_DVLINE=186,
379     TCOD_CHAR_DNE=187,
380     TCOD_CHAR_DNW=201,
381     TCOD_CHAR_DSE=188,
382     TCOD_CHAR_DSW=200,
383     TCOD_CHAR_DTEEW=185,
384     TCOD_CHAR_DTEEE=204,
385     TCOD_CHAR_DTEEN=202,
386     TCOD_CHAR_DTEES=203,
387     TCOD_CHAR_DCROSS=206,
388     // blocks
389     TCOD_CHAR_BLOCK1=176,
390     TCOD_CHAR_BLOCK2=177,
391     TCOD_CHAR_BLOCK3=178,
392     // arrows
393     TCOD_CHAR_ARROW_N=24,
394     TCOD_CHAR_ARROW_S=25,
395     TCOD_CHAR_ARROW_E=26,
396     TCOD_CHAR_ARROW_W=27,
397     // arrows without tail
398     TCOD_CHAR_ARROW2_N=30,
399     TCOD_CHAR_ARROW2_S=31,
400     TCOD_CHAR_ARROW2_E=16,
401     TCOD_CHAR_ARROW2_W=17,
402     // double arrows
403     TCOD_CHAR_DARROW_H=29,
404     TCOD_CHAR_DARROW_V=18,
405     // GUI stuff
406     TCOD_CHAR_CHECKBOX_UNSET=224,
407     TCOD_CHAR_CHECKBOX_SET=225,
408     TCOD_CHAR_RADIO_UNSET=9,
409     TCOD_CHAR_RADIO_SET=10,
410     // sub-pixel resolution kit
411     TCOD_CHAR_SUBP_NW=226,
412     TCOD_CHAR_SUBP_NE=227,
413     TCOD_CHAR_SUBP_N=228,
414     TCOD_CHAR_SUBP_SE=229,
415     TCOD_CHAR_SUBP_DIAG=230,
416     TCOD_CHAR_SUBP_E=231,
417     TCOD_CHAR_SUBP_SW=232,
418     /* miscellaneous */
419     TCOD_CHAR_SMILIE = 1,
420     TCOD_CHAR_SMILIE_INV = 2,
421     TCOD_CHAR_HEART = 3,
422     TCOD_CHAR_DIAMOND = 4,
423     TCOD_CHAR_CLUB = 5,
424     TCOD_CHAR_SPADE = 6,
425     TCOD_CHAR_BULLET = 7,
426     TCOD_CHAR_BULLET_INV = 8,
427     TCOD_CHAR_MALE = 11,
428     TCOD_CHAR_FEMALE = 12,
429     TCOD_CHAR_NOTE = 13,
430     TCOD_CHAR_NOTE_DOUBLE = 14,
431     TCOD_CHAR_LIGHT = 15,
432     TCOD_CHAR_EXCLAM_DOUBLE = 19,
433     TCOD_CHAR_PILCROW = 20,
434     TCOD_CHAR_SECTION = 21,
435     TCOD_CHAR_POUND = 156,
436     TCOD_CHAR_MULTIPLICATION = 158,
437     TCOD_CHAR_FUNCTION = 159,
438     TCOD_CHAR_RESERVED = 169,
439     TCOD_CHAR_HALF = 171,
440     TCOD_CHAR_ONE_QUARTER = 172,
441     TCOD_CHAR_COPYRIGHT = 184,
442     TCOD_CHAR_CENT = 189,
443     TCOD_CHAR_YEN = 190,
444     TCOD_CHAR_CURRENCY = 207,
445     TCOD_CHAR_THREE_QUARTERS = 243,
446     TCOD_CHAR_DIVISION = 246,
447     TCOD_CHAR_GRADE = 248,
448     TCOD_CHAR_UMLAUT = 249,
449     TCOD_CHAR_POW1 = 251,
450     TCOD_CHAR_POW3 = 252,
451     TCOD_CHAR_POW2 = 253,
452     TCOD_CHAR_BULLET_SQUARE = 254,
453 }
454 
455 alias int TCOD_colctrl_t;
456 enum : TCOD_colctrl_t {
457     TCOD_COLCTRL_1 = 1,
458     TCOD_COLCTRL_2,
459     TCOD_COLCTRL_3,
460     TCOD_COLCTRL_4,
461     TCOD_COLCTRL_5,
462     TCOD_COLCTRL_NUMBER=5,
463     TCOD_COLCTRL_FORE_RGB,
464     TCOD_COLCTRL_BACK_RGB,
465     TCOD_COLCTRL_STOP
466 }
467 
468 alias int TCOD_bkgnd_flag_t;
469 enum : TCOD_bkgnd_flag_t {
470     TCOD_BKGND_NONE,
471     TCOD_BKGND_SET,
472     TCOD_BKGND_MULTIPLY,
473     TCOD_BKGND_LIGHTEN,
474     TCOD_BKGND_DARKEN,
475     TCOD_BKGND_SCREEN,
476     TCOD_BKGND_COLOR_DODGE,
477     TCOD_BKGND_COLOR_BURN,
478     TCOD_BKGND_ADD,
479     TCOD_BKGND_ADDA,
480     TCOD_BKGND_BURN,
481     TCOD_BKGND_OVERLAY,
482     TCOD_BKGND_ALPH,
483     TCOD_BKGND_DEFAULT
484 }
485 
486 pure TCOD_bkgnd_flag_t TCOD_BKGND_ALPHA(T)(T alpha)
487 {
488     return (TCOD_BKGND_ALPH | (cast(ubyte)(alpha * 255) << 8));
489 }
490 
491 pure TCOD_bkgnd_flag_t TCOD_BKGND_ADDALPHA(T)(T alpha)
492 {
493     return (TCOD_BKGND_ADDA | (cast(ubyte)(alpha * 255) << 8));
494 }
495 
496 enum {
497     TCOD_KEY_PRESSED=1,
498     TCOD_KEY_RELEASED=2,
499 }
500 
501 // custom font flags
502 enum {
503     TCOD_FONT_LAYOUT_ASCII_INCOL=1,
504     TCOD_FONT_LAYOUT_ASCII_INROW=2,
505     TCOD_FONT_TYPE_GREYSCALE=4,
506     TCOD_FONT_TYPE_GRAYSCALE=4,
507     TCOD_FONT_LAYOUT_TCOD=8,
508 }
509 
510 alias int TCOD_renderer_t;
511 enum : TCOD_renderer_t {
512     TCOD_RENDERER_GLSL,
513     TCOD_RENDERER_OPENGL,
514     TCOD_RENDERER_SDL,
515 }
516 
517 alias int TCOD_alignment_t;
518 enum : TCOD_alignment_t {
519     TCOD_LEFT,
520     TCOD_RIGHT,
521     TCOD_CENTER,
522 }
523 
524 alias void* TCOD_console_t;
525 
526 // --- Image. ---
527 alias void* TCOD_image_t;
528 
529 // --- Sys. ---
530 
531 alias int TCOD_event_t;
532 
533 enum : TCOD_event_t {
534     TCOD_EVENT_KEY_PRESS = 1,
535     TCOD_EVENT_KEY_RELEASE = 2,
536     TCOD_EVENT_KEY = TCOD_EVENT_KEY_PRESS | TCOD_EVENT_KEY_RELEASE,
537     TCOD_EVENT_MOUSE_MOVE = 4,
538     TCOD_EVENT_MOUSE_PRESS = 8,
539     TCOD_EVENT_MOUSE_RELEASE = 16,
540     TCOD_EVENT_MOUSE = TCOD_EVENT_MOUSE_MOVE | TCOD_EVENT_MOUSE_PRESS | TCOD_EVENT_MOUSE_RELEASE,
541     TCOD_EVENT_ANY = TCOD_EVENT_KEY | TCOD_EVENT_MOUSE,
542 }
543 
544 alias void* TCOD_thread_t;
545 alias void* TCOD_semaphore_t;
546 alias void* TCOD_mutex_t;
547 alias void* TCOD_cond_t;
548 alias void* TCOD_library_t;
549 
550 alias void function(void* sdl_surface) SDL_renderer_t;
551 
552 // --- Mersenne. ---
553 alias void* TCOD_random_t;
554 alias int TCOD_random_algo_t;
555 enum : TCOD_random_algo_t
556 {
557     TCOD_RNG_MT,
558     TCOD_RNG_CMWC,
559 }
560 
561 alias int TCOD_distribution_t;
562 enum : TCOD_distribution_t
563 {
564     TCOD_DISTRIBUTION_LINEAR,
565     TCOD_DISTRIBUTION_GAUSSIAN,
566     TCOD_DISTRIBUTION_GAUSSIAN_RANGE,
567     TCOD_DISTRIBUTION_GAUSSIAN_INVERSE,
568     TCOD_DISTRIBUTION_GAUSSIAN_RANGE_INVERSE,
569 }
570 
571 // --- Mouse. ---
572 struct TCOD_mouse_t {
573     int x,y; /* absolute position */
574     int dx,dy; /* movement since last update in pixels */
575     int cx,cy; /* cell coordinates in the root console */
576     int dcx,dcy; /* movement since last update in console cells */
577     bool lbutton;
578     bool rbutton;
579     bool mbutton;
580     bool lbutton_pressed;
581     bool rbutton_pressed;
582     bool mbutton_pressed;
583     bool wheel_up;
584     bool wheel_down;
585 }
586 
587 // --- Bresenham. ---
588 alias bool function(int x, int y) TCOD_line_listener_t;
589 
590 struct TCOD_bresenham_data_t {
591     int stepx;
592     int stepy;
593     int e;
594     int deltax;
595     int deltay;
596     int origx;
597     int origy;
598     int destx;
599     int desty;
600 }
601 
602 // --- BSP. ---
603 struct TCOD_bsp_t {
604     TCOD_tree_t tree; /* pseudo oop : bsp inherit tree */
605     int x,y,w,h; /* node position & size */
606     int position; /* position of splitting */
607     ubyte level; /* level in the tree */
608     bool horizontal; /* horizontal splitting ? */
609 }
610 
611 alias bool function(TCOD_bsp_t* node, void* userData) TCOD_bsp_callback_t;
612 
613 // --- Noise. ---
614 alias void* TCOD_noise_t;
615 
616 const int TCOD_NOISE_MAX_OCTAVES = 128;
617 const int TCOD_NOISE_MAX_DIMENSIONS = 4;
618 const float TCOD_NOISE_DEFAULT_HURST = 0.5f;
619 const float TCOD_NOISE_DEFAULT_LACUNARITY = 2.0f;
620 
621 alias int TCOD_noise_type_t;
622 enum : TCOD_noise_type_t {
623     TCOD_NOISE_PERLIN = 1,
624     TCOD_NOISE_SIMPLEX = 2,
625     TCOD_NOISE_WAVELET = 4,
626     TCOD_NOISE_DEFAULT = 0,
627 }
628 
629 // --- FOV. ---
630 alias void* TCOD_map_t;
631 
632 // FOV_BASIC : http://roguebasin.roguelikedevelopment.org/index.php?title=Ray_casting
633 // FOV_DIAMOND : http://www.geocities.com/temerra/los_rays.html
634 // FOV_SHADOW : http://roguebasin.roguelikedevelopment.org/index.php?title=FOV_using_recursive_shadowcasting
635 // FOV_PERMISSIVE : http://roguebasin.roguelikedevelopment.org/index.php?title=Precise_Permissive_Field_of_View
636 // FOV_RESTRICTIVE : Mingos' Restrictive Precise Angle Shadowcasting (contribution by Mingos)
637 
638 alias int TCOD_fov_algorithm_t;
639 enum : TCOD_fov_algorithm_t {
640     FOV_BASIC,
641     FOV_DIAMOND,
642     FOV_SHADOW,
643     FOV_PERMISSIVE_0,
644     FOV_PERMISSIVE_1,
645     FOV_PERMISSIVE_2,
646     FOV_PERMISSIVE_3,
647     FOV_PERMISSIVE_4,
648     FOV_PERMISSIVE_5,
649     FOV_PERMISSIVE_6,
650     FOV_PERMISSIVE_7,
651     FOV_PERMISSIVE_8,
652     FOV_RESTRICTIVE,
653     NB_FOV_ALGORITHMS
654 }
655 
656 TCOD_fov_algorithm_t FOV_PERMISSIVE(int x) { return FOV_PERMISSIVE_0 + x; }
657 
658 // --- Path. ---
659 alias float function(int xFrom, int yFrom, int xTo, int yTo, void* user_data) TCOD_path_func_t;
660 alias void *TCOD_path_t;
661 alias void* TCOD_dijkstra_t;
662 
663 // --- Lex. ---
664 const int TCOD_LEX_FLAG_NOCASE = 1;
665 const int TCOD_LEX_FLAG_NESTING_COMMENT = 2;
666 const int TCOD_LEX_FLAG_TOKENIZE_COMMENTS = 4;
667 
668 const int TCOD_LEX_ERROR = -1;
669 const int TCOD_LEX_UNKNOWN = 0;
670 const int TCOD_LEX_SYMBOL = 1;
671 const int TCOD_LEX_KEYWORD = 2;
672 const int TCOD_LEX_IDEN = 3;
673 const int TCOD_LEX_STRING = 4;
674 const int TCOD_LEX_INTEGER = 5;
675 const int TCOD_LEX_FLOAT = 6;
676 const int TCOD_LEX_CHAR = 7;
677 const int TCOD_LEX_EOF = 8;
678 const int TCOD_LEX_COMMENT = 9;
679 
680 const int TCOD_LEX_MAX_SYMBOLS = 100;
681 const int TCOD_LEX_SYMBOL_SIZE = 5;
682 const int TCOD_LEX_MAX_KEYWORDS = 100;
683 const int TCOD_LEX_KEYWORD_SIZE = 20;
684 
685 struct TCOD_lex_t {
686     int file_line, token_type, token_int_val, token_idx;
687     float token_float_val;
688     char *tok;
689     int toklen;
690     char lastStringDelim;
691     char *pos;
692     char *buf;
693     char *filename;
694     char *last_javadoc_comment;
695     // private stuff
696     int nb_symbols, nb_keywords, flags;
697     char[TCOD_LEX_SYMBOL_SIZE][TCOD_LEX_MAX_SYMBOLS] symbols;
698     char[TCOD_LEX_KEYWORD_SIZE][TCOD_LEX_MAX_KEYWORDS] keywords;
699     charptr simpleCmt;
700     charptr cmtStart, cmtStop, javadocCmtStart;
701     charptr stringDelim;
702     bool javadoc_read;
703     bool allocBuf;
704     bool savept; // is this object a savepoint (no free in destructor)
705 }
706 
707 
708 // --- Parser. ---
709 /* generic type */
710 alias int TCOD_value_type_t;
711 enum : TCOD_value_type_t {
712     TCOD_TYPE_NONE,
713     TCOD_TYPE_BOOL,
714     TCOD_TYPE_CHAR,
715     TCOD_TYPE_INT,
716     TCOD_TYPE_FLOAT,
717     TCOD_TYPE_STRING,
718     TCOD_TYPE_COLOR,
719     TCOD_TYPE_DICE,
720     TCOD_TYPE_VALUELIST00,
721     TCOD_TYPE_VALUELIST01,
722     TCOD_TYPE_VALUELIST02,
723     TCOD_TYPE_VALUELIST03,
724     TCOD_TYPE_VALUELIST04,
725     TCOD_TYPE_VALUELIST05,
726     TCOD_TYPE_VALUELIST06,
727     TCOD_TYPE_VALUELIST07,
728     TCOD_TYPE_VALUELIST08,
729     TCOD_TYPE_VALUELIST09,
730     TCOD_TYPE_VALUELIST10,
731     TCOD_TYPE_VALUELIST11,
732     TCOD_TYPE_VALUELIST12,
733     TCOD_TYPE_VALUELIST13,
734     TCOD_TYPE_VALUELIST14,
735     TCOD_TYPE_VALUELIST15,
736     TCOD_TYPE_CUSTOM00,
737     TCOD_TYPE_CUSTOM01,
738     TCOD_TYPE_CUSTOM02,
739     TCOD_TYPE_CUSTOM03,
740     TCOD_TYPE_CUSTOM04,
741     TCOD_TYPE_CUSTOM05,
742     TCOD_TYPE_CUSTOM06,
743     TCOD_TYPE_CUSTOM07,
744     TCOD_TYPE_CUSTOM08,
745     TCOD_TYPE_CUSTOM09,
746     TCOD_TYPE_CUSTOM10,
747     TCOD_TYPE_CUSTOM11,
748     TCOD_TYPE_CUSTOM12,
749     TCOD_TYPE_CUSTOM13,
750     TCOD_TYPE_CUSTOM14,
751     TCOD_TYPE_CUSTOM15,
752     TCOD_TYPE_LIST=1024
753 }
754 
755 /* dice roll */
756 struct TCOD_dice_t {
757     int nb_dices;
758     int nb_faces;
759     float multiplier;
760     float addsub;
761 }
762 
763 /* generic value */
764 union TCOD_value_t {
765     bool b;
766     char c;
767     int i;
768     float f;
769     char *s;
770     TCOD_color_t col;
771     TCOD_dice_t dice;
772     TCOD_list_t list;
773     void *custom;
774 }
775 
776 /* parser structures */
777 alias void *TCOD_parser_struct_t;
778 
779 /* parser listener */
780 struct TCOD_parser_listener_t {
781     bool function(TCOD_parser_struct_t str, charptr name) new_struct;
782     bool function(charptr name) new_flag;
783     bool function(charptr propname, TCOD_value_type_t type, TCOD_value_t value) new_property;
784     bool function(TCOD_parser_struct_t str, charptr name) end_struct;
785     void function(charptr msg) error;
786 }
787 
788 /* a custom type parser */
789 alias TCOD_value_t function(TCOD_lex_t* lex, TCOD_parser_listener_t* listener, TCOD_parser_struct_t str, charptr propname) TCOD_parser_custom_t;
790 
791 /* the parser */
792 alias void *TCOD_parser_t;
793 
794 /* parser internals (may be used by custom type parsers) */
795 /* parser structures */
796 struct TCOD_struct_int_t {
797     charptr name; /* entity type name */
798     /* list of flags */
799     TCOD_list_t flags;
800     /* list of properties (name, type, mandatory) */
801     TCOD_list_t props;
802     /* list of value lists */
803     TCOD_list_t lists;
804     /* list of sub-structures */
805     TCOD_list_t structs;
806 }
807 
808 /* the parser */
809 struct TCOD_parser_int_t {
810     /* list of structures */
811     TCOD_list_t structs;
812     /* list of custom type parsers */
813     TCOD_parser_custom_t[16] customs;
814     /* fatal error occured */
815     bool fatal;
816     // list of properties if default listener is used
817     TCOD_list_t props;
818 }
819 
820 
821 // --- Tree. ---
822 struct TCOD_tree_t {
823     TCOD_tree_t *next;
824     TCOD_tree_t *father;
825     TCOD_tree_t *sons;
826 }
827 
828 
829 // --- Heightmap. ---
830 struct TCOD_heightmap_t {
831     int w,h;
832     float *values;
833 }
834 
835 
836 // --- Zip. ---
837 alias void* TCOD_zip_t;
838 
839 
840 // --- Namegen. ---
841 alias void* TCOD_namegen_t;
842 
843 
844 // --- Txtfield. ---
845 alias void* TCOD_text_t;