1 #include "TileDat.h"
2 #include "TileDef.h"
3 #include "WorldDef.h"
4
5
6 INT16 const gOpenDoorList[] =
7 {
8 FIRSTDOOR1,
9 SECONDDOOR1,
10 THIRDDOOR1,
11 FOURTHDOOR1,
12 FIRSTDOOR6,
13 SECONDDOOR6,
14 THIRDDOOR6,
15 FOURTHDOOR6,
16 FIRSTDOOR11,
17 SECONDDOOR11,
18 THIRDDOOR11,
19 FOURTHDOOR11,
20 FIRSTDOOR16,
21 SECONDDOOR16,
22 THIRDDOOR16,
23 FOURTHDOOR16,
24 -1
25 };
26
27
28 static INT16 const gOpenDoorShadowList[] =
29 {
30 FIRSTDOORSH1,
31 SECONDDOORSH1,
32 THIRDDOORSH1,
33 FOURTHDOORSH1,
34 FIRSTDOORSH6,
35 SECONDDOORSH6,
36 THIRDDOORSH6,
37 FOURTHDOORSH6,
38 FIRSTDOORSH11,
39 SECONDDOORSH11,
40 THIRDDOORSH11,
41 FOURTHDOORSH11,
42 FIRSTDOORSH16,
43 SECONDDOORSH16,
44 THIRDDOORSH16,
45 FOURTHDOORSH16,
46 -1
47 };
48
49
50 INT16 const gClosedDoorList[] =
51 {
52 FIRSTDOOR5,
53 SECONDDOOR5,
54 THIRDDOOR5,
55 FOURTHDOOR5,
56 FIRSTDOOR10,
57 SECONDDOOR10,
58 THIRDDOOR10,
59 FOURTHDOOR10,
60 FIRSTDOOR15,
61 SECONDDOOR15,
62 THIRDDOOR15,
63 FOURTHDOOR15,
64 FIRSTDOOR20,
65 SECONDDOOR20,
66 THIRDDOOR20,
67 FOURTHDOOR20,
68 -1
69 };
70
71
72 static INT16 const gClosedDoorShadowList[] =
73 {
74 FIRSTDOORSH5,
75 SECONDDOORSH5,
76 THIRDDOORSH5,
77 FOURTHDOORSH5,
78 FIRSTDOORSH10,
79 SECONDDOORSH10,
80 THIRDDOORSH10,
81 FOURTHDOORSH10,
82 FIRSTDOORSH15,
83 SECONDDOORSH15,
84 THIRDDOORSH15,
85 FOURTHDOORSH15,
86 FIRSTDOORSH20,
87 SECONDDOORSH20,
88 THIRDDOORSH20,
89 FOURTHDOORSH20,
90 -1
91 };
92
93
94 struct ShadowBuddies
95 {
96 INT16 structure;
97 INT16 shadow;
98 INT16 first_structure;
99 INT16 first_shadow;
100 };
101
102
103 // Bidirectional mapping between structs and shadows
104 static ShadowBuddies const g_shadow_buddies[] =
105 {
106 { FIRSTCLIFF, FIRSTCLIFFSHADOW, FIRSTCLIFF1, FIRSTCLIFFSHADOW1 },
107
108 { FIRSTOSTRUCT, FIRSTSHADOW, FIRSTOSTRUCT1, FIRSTSHADOW1 },
109 { SECONDOSTRUCT, SECONDSHADOW, SECONDOSTRUCT1, SECONDSHADOW1 },
110 { THIRDOSTRUCT, THIRDSHADOW, THIRDOSTRUCT1, THIRDSHADOW1 },
111 { FOURTHOSTRUCT, FOURTHSHADOW, FOURTHOSTRUCT1, FOURTHSHADOW1 },
112 { FIFTHOSTRUCT, FIFTHSHADOW, FIFTHOSTRUCT1, FIFTHSHADOW1 },
113 { SIXTHOSTRUCT, SIXTHSHADOW, SIXTHOSTRUCT1, SIXTHSHADOW1 },
114 { SEVENTHOSTRUCT, SEVENTHSHADOW, SEVENTHOSTRUCT1, SEVENTHSHADOW1 },
115 { EIGHTOSTRUCT, EIGHTSHADOW, EIGHTOSTRUCT1, EIGHTSHADOW1 },
116
117 { FIRSTFULLSTRUCT, FIRSTFULLSHADOW, FIRSTFULLSTRUCT1, FIRSTFULLSHADOW1 },
118 { SECONDFULLSTRUCT, SECONDFULLSHADOW, SECONDFULLSTRUCT1, SECONDFULLSHADOW1 },
119 { THIRDFULLSTRUCT, THIRDFULLSHADOW, THIRDFULLSTRUCT1, THIRDFULLSHADOW1 },
120 { FOURTHFULLSTRUCT, FOURTHFULLSHADOW, FOURTHFULLSTRUCT1, FOURTHFULLSHADOW1 },
121
122 { FIRSTDOOR, FIRSTDOORSHADOW, FIRSTDOOR1, FIRSTDOORSH1 },
123 { SECONDDOOR, SECONDDOORSHADOW, SECONDDOOR1, SECONDDOORSH1 },
124 { THIRDDOOR, THIRDDOORSHADOW, THIRDDOOR1, THIRDDOORSH1 },
125 { FOURTHDOOR, FOURTHDOORSHADOW, FOURTHDOOR1, FOURTHDOORSH1 },
126
127 // Fence
128 { FENCESTRUCT, FENCESHADOW, FENCESTRUCT1, FENCESHADOW1 },
129
130 // Vehicles
131 { FIRSTVEHICLE, FIRSTVEHICLESHADOW, FIRSTVEHICLE1, FIRSTVEHICLESHADOW1 },
132 { SECONDVEHICLE, SECONDVEHICLESHADOW, SECONDVEHICLE1, SECONDVEHICLESHADOW1 },
133
134 // DebrisSTRUCT
135 { FIRSTDEBRISSTRUCT, FIRSTDEBRISSTRUCTSHADOW, FIRSTDEBRISSTRUCT1, FIRSTDEBRISSTRUCTSHADOW1 },
136 { SECONDDEBRISSTRUCT, SECONDDEBRISSTRUCTSHADOW, SECONDDEBRISSTRUCT1, SECONDDEBRISSTRUCTSHADOW1 },
137
138 { NINTHOSTRUCT, NINTHOSTRUCTSHADOW, NINTHOSTRUCT1, NINTHOSTRUCTSHADOW1 },
139 { TENTHOSTRUCT, TENTHOSTRUCTSHADOW, TENTHOSTRUCT1, TENTHOSTRUCTSHADOW1 },
140
141 { FIRSTLARGEEXPDEBRIS, FIRSTLARGEEXPDEBRISSHADOW, FIRSTLARGEEXPDEBRIS1, FIRSTLARGEEXPDEBRISSHADOW1 },
142 { SECONDLARGEEXPDEBRIS, SECONDLARGEEXPDEBRISSHADOW, SECONDLARGEEXPDEBRIS1, SECONDLARGEEXPDEBRISSHADOW1 },
143 };
144
145
146 // Global variable used to initialize tile database with full tile spec
147 static UINT8 const gFullBaseTileValues[] =
148 {
149 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // First Texture
150 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
152 0, 0, 0, 0, 0,
153 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // Second Texture
154 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
155 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
156 0, 0, 0, 0, 0,
157 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // Third Texture
158 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
159 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
160 0, 0, 0, 0, 0,
161 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // Forth Texture
162 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
163 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
164 0, 0, 0, 0, 0,
165 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // Fifth Texture
166 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
168 0, 0, 0, 0, 0,
169
170 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // Sixth Texture
171 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
172 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
173 0, 0, 0, 0, 0, 0, 1,
174 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // Seventh Texture
175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
176 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
177 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
178 0, 0, 0, 0, 0, 0, 0, 0, 0,
179
180 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // Water1 Texture
181 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
182 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
183 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
185
186 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // Water2 Texture
187 };
188
189
190 const ST::string gTileSurfaceName[NUMBEROFTILETYPES] =
191 {
192 "TEXTURE1",
193 "TEXTURE2",
194 "TEXTURE3",
195 "TEXTURE4",
196 "TEXTURE5",
197 "TEXTURE6",
198 "TEXTURE7",
199 "WATER1",
200 "DEEP WATER",
201 "FIRSTCLIFFHANG",
202 "FIRSTCLIFF",
203 "FIRSTCLIFFSHADOW",
204 "OSTRUCT1",
205 "OSTRUCT2",
206 "OSTRUCT3",
207 "OSTRUCT4",
208 "OSTRUCT5",
209 "OSTRUCT6",
210 "OSTRUCT7",
211 "OSTRUCT8",
212 "OFSTRUCT1",
213 "OFSTRUCT2",
214 "PLACEHOLDER1",
215 "PLACEHOLDER2",
216
217 "SHADOW1",
218 "SHADOW2",
219 "SHADOW3",
220 "SHADOW4",
221 "SHADOW5",
222 "SHADOW6",
223 "SHADOW7",
224 "SHADOW8",
225 "FSHADOW1",
226 "FSHADOW2",
227 "PLACEHOLDER3",
228 "PLACEHOLDER4",
229
230 "WALL1",
231 "WALL2",
232 "WALL3",
233 "WALL4",
234 "DOOR1",
235 "DOOR2",
236 "DOOR3",
237 "DOOR4",
238 "DOORSH1",
239 "DOORSH2",
240 "DOORSH3",
241 "DOORSH4",
242 "SLANTFLATPEICE",
243 "ANOTHERDEBRIS",
244 "ROADPIECES",
245 "WINDOW4",
246 "DECORATIONS1",
247 "DECORATIONS2",
248 "DECORATIONS3",
249 "DECORATIONS4",
250 "WALLDECAL1",
251 "WALLDECAL2",
252 "WALLDECAL3",
253 "WALLDECAL4",
254 "FLOOR1",
255 "FLOOR2",
256 "FLOOR3",
257 "FLOOR4",
258 "ROOF1",
259 "ROOF2",
260 "ROOF3",
261 "ROOF4",
262 "SROOF1",
263 "SROOF2",
264 "ONROOF1",
265 "ONROOF2",
266 "MOCKF1",
267
268 "ISTRUCT1",
269 "ISTRUCT2",
270 "ISTRUCT3",
271 "ISTRUCT4",
272
273 "FIRSTCISTRCUT",
274
275 "FIRSTROAD",
276
277 "ROCKS",
278 "WOOD",
279 "WEEDS",
280 "GRASS",
281 "SAND",
282 "MISC",
283
284 "ANIOSTRUCT",
285 "FENCESTRUCT",
286 "FENCESHADOW",
287
288 "FIRSTVEHICLE",
289 "SECONDVEHICLE",
290 "FIRSTVEHICLESHADOW",
291 "SECONDVEHICLESHADOW",
292 "MISC2",
293 "FIRSTDEBRISSTRUCT",
294 "SECONDDEBRISSTRUCT",
295 "FIRSTDEBRISSTRUCTSHADOW",
296 "SECONDDEBRISSTRUCTSHADOW",
297 "NINTHOSTRUCT",
298 "TENTHOSTRUCT",
299 "NINTHOSTRUCTSHADOW",
300 "TENTHOSTRUCTSHADOW",
301
302 "FIRSTEXPLODEDEBRIS",
303 "SECONDEXPLODEDEBRIS",
304 "FIRSTLARGEEXPLODEDEBRIS",
305 "SECONDLARGEEXPLODEDEBRIS",
306 "FIRSTLARGEEXPLODEDEBRISSHADOW",
307 "SECONDLARGEEXPLODEDEBRISSHADOW",
308
309 "FIFTHISTRUCT",
310 "SIXTHISTRUCT",
311 "SEVENTHISTRUCT",
312 "EIGHTISTRUCT",
313
314 "FIRSTHIGHROOF",
315 "SECONDHIGHROOF",
316
317 "WALLDECAL5",
318 "WALLDECAL6",
319 "WALLDECAL7",
320 "WALLDECAL8",
321
322 "HUMANBLOOD",
323 "CREATUREBLOOD",
324 "FIRSTSWITCHES",
325
326 // ABSOLUTELY NO STUFF PAST HERE!
327 // CAN BE SAVED IN THE MAP DIRECTLY!
328 "REVEALEDSLANTROOF",
329 "1stREVEALEDHIGHROOF",
330 "2ndREVEALEDHIGHROOF",
331
332 "GUNS",
333 "ITEMS",
334 "ITEMS2",
335
336 "GLASSSHATTER",
337 "ITEMS3",
338 "BODYBLOW",
339
340 "EXITTEXTURE",
341 "FOOTPRINTS",
342 "POINTERS",
343 "POINTERS2",
344 "POINTERS3",
345
346 "GOODRUN",
347 "GOODWALK",
348 "GOODSWAT",
349 "GOODSCOOT",
350 "CONFIRMMOVE",
351 "VEHICLEMOVE",
352 "ACTIONTWO",
353 "BADMARKER",
354 "GRING",
355 "ROTATINGKEY",
356 "SELRING",
357 "SPECIAL",
358 "BULLET",
359 "MISS1",
360 "MISS2",
361 "MISS3",
362 "WIREFRAME"
363 };
364
365
366 UINT16 const gNumTilesPerType[NUMBEROFTILETYPES] =
367 {
368 FIRSTTEXTURE35 - FIRSTTEXTURE1 + 1,
369 SECONDTEXTURE35 - SECONDTEXTURE1 + 1,
370 THIRDTEXTURE35 - THIRDTEXTURE1 + 1,
371 FOURTHTEXTURE35 - FOURTHTEXTURE1 + 1,
372 FIFTHTEXTURE35 - FIFTHTEXTURE1 + 1,
373 SIXTHTEXTURE37 - SIXTHTEXTURE1 + 1,
374 SEVENTHTEXTURE49 - SEVENTHTEXTURE1 + 1,
375 REGWATERTEXTURE50 - REGWATERTEXTURE1 + 1,
376 DEEPWATERTEXTURE37 - DEEPWATERTEXTURE1 + 1,
377 FIRSTCLIFFHANG17 - FIRSTCLIFFHANG1 + 1,
378 FIRSTCLIFF17 - FIRSTCLIFF1 + 1,
379 FIRSTCLIFFSHADOW17 - FIRSTCLIFFSHADOW1 + 1,// Med hill
380
381 FIRSTOSTRUCT12 - FIRSTOSTRUCT1 + 1,
382 SECONDOSTRUCT12 - SECONDOSTRUCT1 + 1,
383 THIRDOSTRUCT12 - THIRDOSTRUCT1 + 1,
384 FOURTHOSTRUCT12 - FOURTHOSTRUCT1 + 1, // Fourth OSTRUCT
385 FIFTHOSTRUCT12 - FIFTHOSTRUCT1 + 1, // Fifth OSTRUCT
386 SIXTHOSTRUCT12 - SIXTHOSTRUCT1 + 1, // Sixth OSTRUCT
387 SEVENTHOSTRUCT12 - SEVENTHOSTRUCT1 + 1, // Seventh OSTRUCT
388 EIGHTOSTRUCT12 - EIGHTOSTRUCT1 + 1, // Eigth OSTRUCT
389 FIRSTFULLSTRUCT12 - FIRSTFULLSTRUCT1 + 1,
390 SECONDFULLSTRUCT12 - SECONDFULLSTRUCT1 + 1,
391 THIRDFULLSTRUCT2 - THIRDFULLSTRUCT1 + 1,
392 FOURTHFULLSTRUCT2 - FOURTHFULLSTRUCT1 + 1,
393
394 FIRSTSHADOW12 - FIRSTSHADOW1 + 1,
395 SECONDSHADOW12 - SECONDSHADOW1 + 1,
396 THIRDSHADOW12 - THIRDSHADOW1 + 1,
397 FOURTHSHADOW12 - FOURTHSHADOW1 + 1,
398 FIFTHSHADOW12 - FIFTHSHADOW1 + 1,
399 SIXTHSHADOW12 - SIXTHSHADOW1 + 1,
400 SEVENTHSHADOW12 - SEVENTHSHADOW1 + 1,
401 EIGHTSHADOW12 - EIGHTSHADOW1 + 1,
402 FIRSTFULLSHADOW12 - FIRSTFULLSHADOW1 + 1,
403 SECONDFULLSHADOW12 - SECONDFULLSHADOW1 + 1,
404 THIRDFULLSHADOW2 - THIRDFULLSHADOW1 + 1,
405 FOURTHFULLSHADOW2 - FOURTHFULLSHADOW1 + 1,
406
407
408 FIRSTWALL65 - FIRSTWALL1 + 1,
409 SECONDWALL65 - SECONDWALL1 + 1,
410 THIRDWALL65 - THIRDWALL1 + 1,
411 FOURTHWALL65 - FOURTHWALL1 + 1,
412
413 FIRSTDOOR20 - FIRSTDOOR1 + 1,
414 SECONDDOOR20 - SECONDDOOR1 + 1,
415 THIRDDOOR20 - THIRDDOOR1 + 1,
416 FOURTHDOOR20 - FOURTHDOOR1 + 1,
417
418 FIRSTDOORSH20 - FIRSTDOORSH1 + 1,
419 SECONDDOORSH20 - SECONDDOORSH1 + 1,
420 THIRDDOORSH20 - THIRDDOORSH1 + 1,
421 FOURTHDOORSH20 - FOURTHDOORSH1 + 1,
422
423 SLANTROOFCEILING2 - SLANTROOFCEILING1 + 1,
424 ANOTHERDEBRIS10 - ANOTHERDEBRIS1 + 1,
425 ROADPIECES400 - ROADPIECES001 + 1,
426 FOURTHWINDOW2 - FOURTHWINDOW1 + 1,
427
428 FIRSTDECORATIONS10 - FIRSTDECORATIONS1 + 1,
429 SECONDDECORATIONS10 - SECONDDECORATIONS1 + 1,
430 THIRDDECORATIONS10 - THIRDDECORATIONS1 + 1,
431 FOURTHDECORATIONS10 - FOURTHDECORATIONS1 + 1,
432
433 FIRSTWALLDECAL10 - FIRSTWALLDECAL1 + 1,
434 SECONDWALLDECAL10 - SECONDWALLDECAL1 + 1,
435 THIRDWALLDECAL10 - THIRDWALLDECAL1 + 1,
436 FOURTHWALLDECAL10 - FOURTHWALLDECAL1 + 1,
437
438 FIRSTFLOOR8 - FIRSTFLOOR1 + 1,
439 SECONDFLOOR8 - SECONDFLOOR1 + 1,
440 THIRDFLOOR8 - THIRDFLOOR1 + 1,
441 FOURTHFLOOR8 - FOURTHFLOOR1 + 1,
442
443 FIRSTROOF14 - FIRSTROOF1 + 1,
444 SECONDROOF14 - SECONDROOF1 + 1,
445 THIRDROOF14 - THIRDROOF1 + 1,
446 FOURTHROOF14 - FOURTHROOF1 + 1,
447 FIRSTSLANTROOF20 - FIRSTSLANTROOF1 + 1,
448 SECONDSLANTROOF20 - SECONDSLANTROOF1 + 1,
449
450 FIRSTONROOF12 - FIRSTONROOF1 + 1,
451 SECONDONROOF12 - SECONDONROOF1 + 1,
452
453 1,
454
455 FIRSTISTRUCT24 - FIRSTISTRUCT1 + 1,
456 SECONDISTRUCT24 - SECONDISTRUCT1 + 1,
457 THIRDISTRUCT24 - THIRDISTRUCT1 + 1,
458 FOURTHISTRUCT24 - FOURTHISTRUCT1 + 1,
459 FIRSTCISTRUCT24 - FIRSTCISTRUCT1 + 1,
460
461 FIRSTROAD35 - FIRSTROAD1 + 1,
462
463 DEBRISROCKS10 - DEBRISROCKS1 + 1,
464 DEBRISWOOD10 - DEBRISWOOD1 + 1,
465 DEBRISWEEDS10 - DEBRISWEEDS1 + 1,
466 DEBRISGRASS10 - DEBRISGRASS1 + 1,
467 DEBRISSAND10 - DEBRISSAND1 + 1,
468 DEBRISMISC10 - DEBRISMISC1 + 1,
469
470 ANIOSTRUCT20 - ANIOSTRUCT1 + 1,
471 FENCESTRUCT23 - FENCESTRUCT1 + 1,
472 FENCESHADOW23 - FENCESHADOW1 + 1,
473 FIRSTVEHICLE12- FIRSTVEHICLE1 + 1,
474 SECONDVEHICLE12- SECONDVEHICLE1 + 1,
475 FIRSTVEHICLESHADOW12- FIRSTVEHICLESHADOW1 + 1,
476 SECONDVEHICLESHADOW12- SECONDVEHICLESHADOW1 + 1,
477 DEBRIS2MISC10 - DEBRIS2MISC1 + 1,
478
479 FIRSTDEBRISSTRUCT10- FIRSTDEBRISSTRUCT1 + 1,
480 SECONDDEBRISSTRUCT10- SECONDDEBRISSTRUCT1 + 1,
481 FIRSTDEBRISSTRUCTSHADOW10- FIRSTDEBRISSTRUCTSHADOW1 + 1,
482 SECONDDEBRISSTRUCTSHADOW10- SECONDDEBRISSTRUCTSHADOW1 + 1,
483
484 NINTHOSTRUCT12- NINTHOSTRUCT1 + 1,
485 TENTHOSTRUCT12- TENTHOSTRUCT1 + 1,
486 NINTHOSTRUCTSHADOW12- NINTHOSTRUCTSHADOW1 + 1,
487 TENTHOSTRUCTSHADOW12- TENTHOSTRUCTSHADOW1 + 1,
488
489 FIRSTEXPLDEBRIS40- FIRSTEXPLDEBRIS1 + 1,
490 SECONDEXPLDEBRIS40- SECONDEXPLDEBRIS1 + 1,
491 FIRSTLARGEEXPDEBRIS10- FIRSTLARGEEXPDEBRIS1 + 1,
492 SECONDLARGEEXPDEBRIS10- SECONDLARGEEXPDEBRIS1 + 1,
493 FIRSTLARGEEXPDEBRISSHADOW10- FIRSTLARGEEXPDEBRISSHADOW1 + 1,
494 SECONDLARGEEXPDEBRISSHADOW10- SECONDLARGEEXPDEBRISSHADOW1 + 1,
495
496 FIFTHISTRUCT24- FIFTHISTRUCT1 + 1,
497 SIXTHISTRUCT24- SIXTHISTRUCT1 + 1,
498 SEVENTHISTRUCT24- SEVENTHISTRUCT1 + 1,
499 EIGHTISTRUCT24- EIGHTISTRUCT1 + 1,
500
501 FIRSTHIGHROOF15- FIRSTHIGHROOF1 + 1,
502 SECONDHIGHROOF15- SECONDHIGHROOF1 + 1,
503
504 FIFTHWALLDECAL10 - FIFTHWALLDECAL1 + 1,
505 SIXTHWALLDECAL10 - SIXTHWALLDECAL1 + 1,
506 SEVENTHWALLDECAL10- SEVENTHWALLDECAL1 + 1,
507 EIGTHWALLDECAL10 - EIGTHWALLDECAL1 + 1,
508
509 HUMANBLOOD16- HUMANBLOOD1 + 1,
510 CREATUREBLOOD16- CREATUREBLOOD1 + 1,
511 FIRSTSWITCHES21- FIRSTSWITCHES1 + 1,
512
513 // NO SAVED STUFF AFTER HERE!
514 REVEALEDSLANTROOFS8- REVEALEDSLANTROOFS1 + 1,
515 FIRSTREVEALEDHIGHROOFS11- FIRSTREVEALEDHIGHROOFS1 + 1,
516 SECONDREVEALEDHIGHROOFS11- SECONDREVEALEDHIGHROOFS1 + 1,
517
518 GUN60 - GUN1 + 1,
519 P1ITEM149 - P1ITEM1 + 1,
520 P2ITEM45 - P2ITEM1 + 1,
521
522 WINDOWSHATTER20 - WINDOWSHATTER1 + 1,
523 P3ITEM16 - P3ITEM1 + 1,
524 BODYEXPLOSION15 - BODYEXPLOSION1 + 1,
525
526 EXITTEXTURE35 - EXITTEXTURE1 + 1,
527 FOOTPRINTS80 - FOOTPRINTS1 + 1,
528
529 FIRSTPOINTERS24 - FIRSTPOINTERS1 + 1,
530 SECONDPOINTERS8 - SECONDPOINTERS1 + 1,
531 THIRDPOINTERS3 - THIRDPOINTERS1 + 1,
532
533 GOODRUN11 - GOODRUN1 + 1,
534 GOODWALK11 - GOODWALK1 + 1,
535 GOODSWAT11 - GOODSWAT1 + 1,
536 GOODPRONE11 - GOODPRONE1 + 1,
537 CONFIRMMOVE11 - CONFIRMMOVE1 + 1,
538 VEHICLEMOVE10 - VEHICLEMOVE1 + 1,
539 ACTIONTWO11 - ACTIONTWO1 + 1,
540 BADMARKER11 - BADMARKER1 + 1,
541 GOODRING10 - GOODRING1 + 1,
542 ROTATINGKEY8 - ROTATINGKEY1 + 1,
543 SELRING10 - SELRING1 + 1,
544 SPECIALTILE_COVER_5 - SPECIALTILE_MAPEXIT + 1,
545 BULLETTILE2 - BULLETTILE1 + 1,
546
547 FIRSTMISS5 - FIRSTMISS1 + 1,
548 SECONDMISS5 - SECONDMISS1 + 1,
549 THIRDMISS14 - THIRDMISS1 + 1,
550 WIREFRAMES15 - WIREFRAMES1 + 1
551 };
552
553
554 UINT8 gTileTypeLogicalHeight[NUMBEROFTILETYPES] =
555 {
556 2, // First texture
557 2, // Second texture
558 2, // Third texture
559 2, // Forth texture
560 2, // Fifth texture
561 2, // Sixth texture
562 2, // Seventh texture
563 10, // First water
564 10 // Second water
565 };
566
567
SetAnimData(UINT16 const database_elem,TILE_ELEMENT & te,const bool minus_plus)568 static void SetAnimData(UINT16 const database_elem, TILE_ELEMENT& te, const bool minus_plus)
569 {
570 AllocateAnimTileData(&te, 5);
571
572 TILE_ANIMATION_DATA& a = *te.pAnimData;
573 a.bCurrentFrame = 0;
574 for (UINT8 k = 0; k != a.ubNumFrames; ++k)
575 {
576 a.pusFrames[k] = minus_plus ? database_elem + k : database_elem - k;
577 }
578 }
579
580
SetAnimDataIfInList(INT16 const * const list,UINT16 const database_elem,TILE_ELEMENT & te,const bool minus_plus)581 static void SetAnimDataIfInList(INT16 const* const list, UINT16 const database_elem, TILE_ELEMENT& te, const bool minus_plus)
582 {
583 for (INT16 const* i = list; *i != -1; ++i)
584 {
585 // If we are a shadow type
586 if (database_elem != *i) continue;
587 SetAnimData(database_elem, te, minus_plus);
588 }
589 }
590
591
SetSpecificDatabaseValues(UINT16 const type,UINT16 const database_elem,TILE_ELEMENT & te,bool const use_raised_object_type)592 void SetSpecificDatabaseValues(UINT16 const type, UINT16 const database_elem, TILE_ELEMENT& te, bool const use_raised_object_type)
593 {
594 // Setup buddies for structures and shadows
595 FOR_EACH(ShadowBuddies const, i, g_shadow_buddies)
596 {
597 if (type == i->shadow)
598 {
599 te.sBuddyNum = database_elem - i->first_shadow + i->first_structure;
600 // Check flags and made the same, take from buddy's
601 te.uiFlags |= gTileDatabase[te.sBuddyNum].uiFlags;
602 break;
603 }
604 else if (type == i->structure)
605 {
606 te.sBuddyNum = database_elem - i->first_structure + i->first_shadow;
607 // Set flag indicating such
608 te.uiFlags |= HAS_SHADOW_BUDDY;
609 break;
610 }
611 }
612
613 if (FIRSTDOOR1 <= database_elem && database_elem <= FOURTHDOORSH20)
614 {
615 // Door anims
616 SetAnimDataIfInList(gOpenDoorList, database_elem, te, true); // Open
617 SetAnimDataIfInList(gOpenDoorShadowList, database_elem, te, true); // Open shadow
618 SetAnimDataIfInList(gClosedDoorList, database_elem, te, false); // Closed
619 SetAnimDataIfInList(gClosedDoorShadowList, database_elem, te, false); // Closed shadow
620 }
621
622 if (database_elem == FIRSTMISS1)
623 {
624 SetAnimData(database_elem, te, true);
625 }
626
627 if (FIRSTMISS1 <= database_elem && database_elem <= FIRSTMISS5)
628 {
629 te.uiFlags |= DYNAMIC_TILE;
630 }
631
632 if (database_elem == WINDOWSHATTER1 ||
633 database_elem == WINDOWSHATTER6 ||
634 database_elem == WINDOWSHATTER11 ||
635 database_elem == WINDOWSHATTER16 )
636 {
637 SetAnimData(database_elem, te, true);
638 }
639
640 if (WINDOWSHATTER1 <= database_elem && database_elem <= WINDOWSHATTER20)
641 {
642 te.uiFlags |= DYNAMIC_TILE;
643 }
644
645 if (type == BODYEXPLOSION)
646 {
647 te.uiFlags |= DYNAMIC_TILE;
648 }
649
650 // Set flags for objects pieces which use proper z
651 if (use_raised_object_type)
652 {
653 te.uiFlags |= OBJECTLAYER_USEZHEIGHT;
654 }
655
656 // Set flag for full 3d tiles, as well as the dynamic flag for the folliage
657 if (FIRSTFULLSTRUCT1 <= database_elem && database_elem <= SECONDFULLSTRUCT12)
658 {
659 INT16 const idx_diff = database_elem - gTileTypeStartIndex[type];
660 switch (idx_diff % 3)
661 {
662 case 0: te.uiFlags |= FULL3D_TILE; break; // Set every first as full tile
663 case 1: te.uiFlags |= DYNAMIC_TILE; break; // Every second set as dynamic
664 }
665 }
666
667 // Ignore height for cliffs ie: if we rasie the land, do not offset the cliff
668 if (FIRSTCLIFFHANG1 <= database_elem && database_elem <= FIRSTCLIFFSHADOW17)
669 {
670 if (type == FIRSTCLIFFHANG) te.uiFlags |= CLIFFHANG_TILE;
671 te.uiFlags |= IGNORE_WORLD_HEIGHT;
672 }
673
674 if (FIRSTWALL1 <= database_elem && database_elem <= FOURTHWALL65)
675 {
676 te.uiFlags |= WALL_TILE;
677 }
678
679 // Set a-frames heigher!
680 if (FIRSTWALL1 <= database_elem && database_elem <= FOURTHWALL47)
681 { // Set these ones higher (for roof pieces)
682 UINT16 const start = gTileTypeStartIndex[type];
683 if (start + WALL_AFRAME_START <= database_elem && database_elem <= start + WALL_AFRAME_END)
684 {
685 te.uiFlags |= AFRAME_TILE;
686 }
687 }
688
689 // Set UI Elements to be dynamic
690 if (FOOTPRINTS1 <= database_elem && database_elem <= THIRDPOINTERS2)
691 {
692 te.uiFlags |= DYNAMIC_TILE | OBJECTLAYER_USEZHEIGHT;
693 }
694
695 // Set UI Elements to use object z level
696 if (FOOTPRINTS <= type && type <= LASTUIELEM)
697 {
698 te.uiFlags |= OBJECTLAYER_USEZHEIGHT;
699 }
700
701 // Set UI Elements to use object z level
702 if (HUMANBLOOD <= type && type <= CREATUREBLOOD)
703 {
704 te.uiFlags |= OBJECTLAYER_USEZHEIGHT;
705 }
706
707 // Set UI Elements to use object z level
708 if (GUNS <= type && type <= P2ITEMS)
709 {
710 te.uiFlags |= OBJECTLAYER_USEZHEIGHT;
711 }
712 if (type == P3ITEMS)
713 {
714 te.uiFlags |= OBJECTLAYER_USEZHEIGHT;
715 }
716
717 if (FIRSTEXPLDEBRIS <= type && type <= SECONDEXPLDEBRIS)
718 {
719 te.uiFlags |= OBJECTLAYER_USEZHEIGHT;
720 }
721
722 // Set UI Elements to be dynamic
723 if (database_elem == MOCKFLOOR1)
724 {
725 te.uiFlags |= DYNAMIC_TILE;
726 }
727
728 if (type == BULLETTILE)
729 {
730 te.uiFlags |= DYNAMIC_TILE;
731 }
732
733 // Set full tile flag for floors
734 if (FIRSTFLOOR1 <= database_elem && database_elem <= FOURTHFLOOR8)
735 {
736 te.ubFullTile = 1;
737 }
738
739 if (/*FIRSTTEXTURE1 <= database_elem &&*/ database_elem <= DEEPWATERTEXTURE10)
740 { // Set tile 'fullness' attribute
741 te.ubFullTile = gFullBaseTileValues[database_elem];
742 }
743
744 if ((REGWATERTEXTURE18 <= database_elem && database_elem <= REGWATERTEXTURE50) ||
745 database_elem == REGWATERTEXTURE ||
746 database_elem == REGWATERTEXTURE12 ||
747 database_elem == REGWATERTEXTURE14 ||
748 database_elem == REGWATERTEXTURE16)
749 {
750 te.ubTerrainID = FLAT_GROUND;
751 }
752
753 if ((FIRSTROOF <= type && type <= SECONDSLANTROOF) ||
754 type == FIRSTHIGHROOF ||
755 type == SECONDHIGHROOF)
756 {
757 te.uiFlags |= ROOF_TILE;
758 }
759 }
760