Torch
Loading...
Searching...
No Matches
SurfaceTerrains.h
1#pragma once
2
3// Surface Types
4enum class SurfaceType {
5 SURFACE_DEFAULT = 0x0000, // Environment default
6 SURFACE_BURNING = 0x0001, // Lava / Frostbite (in SL), but is used mostly for Lava
7 SURFACE_0004 = 0x0004, // Unused, has no function and has parameters
8 SURFACE_HANGABLE = 0x0005, // Ceiling that Mario can climb on
9 SURFACE_SLOW = 0x0009, // Slow down Mario, unused
10 SURFACE_DEATH_PLANE = 0x000A, // Death floor
11 SURFACE_CLOSE_CAMERA = 0x000B, // Close camera
12 SURFACE_WATER = 0x000D, // Water, has no action, used on some waterboxes below
13 SURFACE_FLOWING_WATER = 0x000E, // Water (flowing), has parameters
14 SURFACE_INTANGIBLE = 0x0012, // Intangible (Separates BBH mansion from merry-go-round, for room usage)
15 SURFACE_VERY_SLIPPERY = 0x0013, // Very slippery, mostly used for slides
16 SURFACE_SLIPPERY = 0x0014, // Slippery
17 SURFACE_NOT_SLIPPERY = 0x0015, // Non-slippery, climbable
18 SURFACE_TTM_VINES = 0x0016, // TTM vines, has no action defined
19 SURFACE_MGR_MUSIC = 0x001A, // Plays the Merry go round music, see handle_merry_go_round_music in bbh_merry_go_round.inc.c for more details
20 SURFACE_INSTANT_WARP_1B = 0x001B, // Instant warp to another area, used to warp between areas in WDW and the endless stairs to warp back
21 SURFACE_INSTANT_WARP_1C = 0x001C, // Instant warp to another area, used to warp between areas in WDW
22 SURFACE_INSTANT_WARP_1D = 0x001D, // Instant warp to another area, used to warp between areas in DDD, SSL and TTM
23 SURFACE_INSTANT_WARP_1E = 0x001E, // Instant warp to another area, used to warp between areas in DDD, SSL and TTM
24 SURFACE_SHALLOW_QUICKSAND = 0x0021, // Shallow Quicksand (depth of 10 units)
25 SURFACE_DEEP_QUICKSAND = 0x0022, // Quicksand (lethal, slow, depth of 160 units)
26 SURFACE_INSTANT_QUICKSAND = 0x0023, // Quicksand (lethal, instant)
27 SURFACE_DEEP_MOVING_QUICKSAND = 0x0024, // Moving quicksand (flowing, depth of 160 units)
28 SURFACE_SHALLOW_MOVING_QUICKSAND = 0x0025, // Moving quicksand (flowing, depth of 25 units)
29 SURFACE_QUICKSAND = 0x0026, // Moving quicksand (60 units)
30 SURFACE_MOVING_QUICKSAND = 0x0027, // Moving quicksand (flowing, depth of 60 units)
31 SURFACE_WALL_MISC = 0x0028, // Used for some walls, Cannon to adjust the camera, and some objects like Warp Pipe
32 SURFACE_NOISE_DEFAULT = 0x0029, // Default floor with noise
33 SURFACE_NOISE_SLIPPERY = 0x002A, // Slippery floor with noise
34 SURFACE_HORIZONTAL_WIND = 0x002C, // Horizontal wind, has parameters
35 SURFACE_INSTANT_MOVING_QUICKSAND = 0x002D, // Quicksand (lethal, flowing)
36 SURFACE_ICE = 0x002E, // Slippery Ice, in snow levels and THI's water floor
37 SURFACE_LOOK_UP_WARP = 0x002F, // Look up and warp (Wing cap entrance)
38 SURFACE_HARD = 0x0030, // Hard floor (Always has fall damage)
39 SURFACE_WARP = 0x0032, // Surface warp
40 SURFACE_TIMER_START = 0x0033, // Timer start (Peach's secret slide)
41 SURFACE_TIMER_END = 0x0034, // Timer stop (Peach's secret slide)
42 SURFACE_HARD_SLIPPERY = 0x0035, // Hard and slippery (Always has fall damage)
43 SURFACE_HARD_VERY_SLIPPERY = 0x0036, // Hard and very slippery (Always has fall damage)
44 SURFACE_HARD_NOT_SLIPPERY = 0x0037, // Hard and Non-slippery (Always has fall damage)
45 SURFACE_VERTICAL_WIND = 0x0038, // Death at bottom with vertical wind
46 SURFACE_BOSS_FIGHT_CAMERA = 0x0065, // Wide camera for BoB and WF bosses
47 SURFACE_CAMERA_FREE_ROAM = 0x0066, // Free roam camera for THI and TTC
48 SURFACE_THI3_WALLKICK = 0x0068, // Surface where there's a wall kick section in THI 3rd area, has no action defined
49 SURFACE_CAMERA_8_DIR = 0x0069, // Surface that enables far camera for platforms, used in THI
50 SURFACE_CAMERA_MIDDLE = 0x006E, // Surface camera that returns to the middle, used on the 4 pillars of SSL
51 SURFACE_CAMERA_ROTATE_RIGHT = 0x006F, // Surface camera that rotates to the right (Bowser 1 & THI)
52 SURFACE_CAMERA_ROTATE_LEFT = 0x0070, // Surface camera that rotates to the left (BoB & TTM)
53 SURFACE_CAMERA_BOUNDARY = 0x0072, // Intangible Area, only used to restrict camera movement
54 SURFACE_NOISE_VERY_SLIPPERY_73 = 0x0073, // Very slippery floor with noise, unused
55 SURFACE_NOISE_VERY_SLIPPERY_74 = 0x0074, // Very slippery floor with noise, unused
56 SURFACE_NOISE_VERY_SLIPPERY = 0x0075, // Very slippery floor with noise, used in CCM
57 SURFACE_NO_CAM_COLLISION = 0x0076, // Surface with no cam collision flag
58 SURFACE_NO_CAM_COLLISION_77 = 0x0077, // Surface with no cam collision flag, unused
59 SURFACE_NO_CAM_COL_VERY_SLIPPERY = 0x0078, // Surface with no cam collision flag, very slippery with noise (THI)
60 SURFACE_NO_CAM_COL_SLIPPERY = 0x0079, // Surface with no cam collision flag, slippery with noise (CCM, PSS and TTM slides)
61 SURFACE_SWITCH = 0x007A, // Surface with no cam collision flag, non-slippery with noise, used by switches and Dorrie
62 SURFACE_VANISH_CAP_WALLS = 0x007B, // Vanish cap walls, pass through them with Vanish Cap
63 SURFACE_PAINTING_WOBBLE_A6 = 0x00A6, // Painting wobble (BoB Left)
64 SURFACE_PAINTING_WOBBLE_A7 = 0x00A7, // Painting wobble (BoB Middle)
65 SURFACE_PAINTING_WOBBLE_A8 = 0x00A8, // Painting wobble (BoB Right)
66 SURFACE_PAINTING_WOBBLE_A9 = 0x00A9, // Painting wobble (CCM Left)
67 SURFACE_PAINTING_WOBBLE_AA = 0x00AA, // Painting wobble (CCM Middle)
68 SURFACE_PAINTING_WOBBLE_AB = 0x00AB, // Painting wobble (CCM Right)
69 SURFACE_PAINTING_WOBBLE_AC = 0x00AC, // Painting wobble (WF Left)
70 SURFACE_PAINTING_WOBBLE_AD = 0x00AD, // Painting wobble (WF Middle)
71 SURFACE_PAINTING_WOBBLE_AE = 0x00AE, // Painting wobble (WF Right)
72 SURFACE_PAINTING_WOBBLE_AF = 0x00AF, // Painting wobble (JRB Left)
73 SURFACE_PAINTING_WOBBLE_B0 = 0x00B0, // Painting wobble (JRB Middle)
74 SURFACE_PAINTING_WOBBLE_B1 = 0x00B1, // Painting wobble (JRB Right)
75 SURFACE_PAINTING_WOBBLE_B2 = 0x00B2, // Painting wobble (LLL Left)
76 SURFACE_PAINTING_WOBBLE_B3 = 0x00B3, // Painting wobble (LLL Middle)
77 SURFACE_PAINTING_WOBBLE_B4 = 0x00B4, // Painting wobble (LLL Right)
78 SURFACE_PAINTING_WOBBLE_B5 = 0x00B5, // Painting wobble (SSL Left)
79 SURFACE_PAINTING_WOBBLE_B6 = 0x00B6, // Painting wobble (SSL Middle)
80 SURFACE_PAINTING_WOBBLE_B7 = 0x00B7, // Painting wobble (SSL Right)
81 SURFACE_PAINTING_WOBBLE_B8 = 0x00B8, // Painting wobble (Unused - Left)
82 SURFACE_PAINTING_WOBBLE_B9 = 0x00B9, // Painting wobble (Unused - Middle)
83 SURFACE_PAINTING_WOBBLE_BA = 0x00BA, // Painting wobble (Unused - Right)
84 SURFACE_PAINTING_WOBBLE_BB = 0x00BB, // Painting wobble (DDD - Left), makes the painting wobble if touched
85 SURFACE_PAINTING_WOBBLE_BC = 0x00BC, // Painting wobble (Unused, DDD - Middle)
86 SURFACE_PAINTING_WOBBLE_BD = 0x00BD, // Painting wobble (Unused, DDD - Right)
87 SURFACE_PAINTING_WOBBLE_BE = 0x00BE, // Painting wobble (WDW Left)
88 SURFACE_PAINTING_WOBBLE_BF = 0x00BF, // Painting wobble (WDW Middle)
89 SURFACE_PAINTING_WOBBLE_C0 = 0x00C0, // Painting wobble (WDW Right)
90 SURFACE_PAINTING_WOBBLE_C1 = 0x00C1, // Painting wobble (THI Tiny - Left)
91 SURFACE_PAINTING_WOBBLE_C2 = 0x00C2, // Painting wobble (THI Tiny - Middle)
92 SURFACE_PAINTING_WOBBLE_C3 = 0x00C3, // Painting wobble (THI Tiny - Right)
93 SURFACE_PAINTING_WOBBLE_C4 = 0x00C4, // Painting wobble (TTM Left)
94 SURFACE_PAINTING_WOBBLE_C5 = 0x00C5, // Painting wobble (TTM Middle)
95 SURFACE_PAINTING_WOBBLE_C6 = 0x00C6, // Painting wobble (TTM Right)
96 SURFACE_PAINTING_WOBBLE_C7 = 0x00C7, // Painting wobble (Unused, TTC - Left)
97 SURFACE_PAINTING_WOBBLE_C8 = 0x00C8, // Painting wobble (Unused, TTC - Middle)
98 SURFACE_PAINTING_WOBBLE_C9 = 0x00C9, // Painting wobble (Unused, TTC - Right)
99 SURFACE_PAINTING_WOBBLE_CA = 0x00CA, // Painting wobble (Unused, SL - Left)
100 SURFACE_PAINTING_WOBBLE_CB = 0x00CB, // Painting wobble (Unused, SL - Middle)
101 SURFACE_PAINTING_WOBBLE_CC = 0x00CC, // Painting wobble (Unused, SL - Right)
102 SURFACE_PAINTING_WOBBLE_CD = 0x00CD, // Painting wobble (THI Huge - Left)
103 SURFACE_PAINTING_WOBBLE_CE = 0x00CE, // Painting wobble (THI Huge - Middle)
104 SURFACE_PAINTING_WOBBLE_CF = 0x00CF, // Painting wobble (THI Huge - Right)
105 SURFACE_PAINTING_WOBBLE_D0 = 0x00D0, // Painting wobble (HMC & COTMC - Left), makes the painting wobble if touched
106 SURFACE_PAINTING_WOBBLE_D1 = 0x00D1, // Painting wobble (Unused, HMC & COTMC - Middle)
107 SURFACE_PAINTING_WOBBLE_D2 = 0x00D2, // Painting wobble (Unused, HMC & COTMC - Right)
108 SURFACE_PAINTING_WARP_D3 = 0x00D3, // Painting warp (BoB Left)
109 SURFACE_PAINTING_WARP_D4 = 0x00D4, // Painting warp (BoB Middle)
110 SURFACE_PAINTING_WARP_D5 = 0x00D5, // Painting warp (BoB Right)
111 SURFACE_PAINTING_WARP_D6 = 0x00D6, // Painting warp (CCM Left)
112 SURFACE_PAINTING_WARP_D7 = 0x00D7, // Painting warp (CCM Middle)
113 SURFACE_PAINTING_WARP_D8 = 0x00D8, // Painting warp (CCM Right)
114 SURFACE_PAINTING_WARP_D9 = 0x00D9, // Painting warp (WF Left)
115 SURFACE_PAINTING_WARP_DA = 0x00DA, // Painting warp (WF Middle)
116 SURFACE_PAINTING_WARP_DB = 0x00DB, // Painting warp (WF Right)
117 SURFACE_PAINTING_WARP_DC = 0x00DC, // Painting warp (JRB Left)
118 SURFACE_PAINTING_WARP_DD = 0x00DD, // Painting warp (JRB Middle)
119 SURFACE_PAINTING_WARP_DE = 0x00DE, // Painting warp (JRB Right)
120 SURFACE_PAINTING_WARP_DF = 0x00DF, // Painting warp (LLL Left)
121 SURFACE_PAINTING_WARP_E0 = 0x00E0, // Painting warp (LLL Middle)
122 SURFACE_PAINTING_WARP_E1 = 0x00E1, // Painting warp (LLL Right)
123 SURFACE_PAINTING_WARP_E2 = 0x00E2, // Painting warp (SSL Left)
124 SURFACE_PAINTING_WARP_E3 = 0x00E3, // Painting warp (SSL Medium)
125 SURFACE_PAINTING_WARP_E4 = 0x00E4, // Painting warp (SSL Right)
126 SURFACE_PAINTING_WARP_E5 = 0x00E5, // Painting warp (Unused - Left)
127 SURFACE_PAINTING_WARP_E6 = 0x00E6, // Painting warp (Unused - Medium)
128 SURFACE_PAINTING_WARP_E7 = 0x00E7, // Painting warp (Unused - Right)
129 SURFACE_PAINTING_WARP_E8 = 0x00E8, // Painting warp (DDD - Left)
130 SURFACE_PAINTING_WARP_E9 = 0x00E9, // Painting warp (DDD - Middle)
131 SURFACE_PAINTING_WARP_EA = 0x00EA, // Painting warp (DDD - Right)
132 SURFACE_PAINTING_WARP_EB = 0x00EB, // Painting warp (WDW Left)
133 SURFACE_PAINTING_WARP_EC = 0x00EC, // Painting warp (WDW Middle)
134 SURFACE_PAINTING_WARP_ED = 0x00ED, // Painting warp (WDW Right)
135 SURFACE_PAINTING_WARP_EE = 0x00EE, // Painting warp (THI Tiny - Left)
136 SURFACE_PAINTING_WARP_EF = 0x00EF, // Painting warp (THI Tiny - Middle)
137 SURFACE_PAINTING_WARP_F0 = 0x00F0, // Painting warp (THI Tiny - Right)
138 SURFACE_PAINTING_WARP_F1 = 0x00F1, // Painting warp (TTM Left)
139 SURFACE_PAINTING_WARP_F2 = 0x00F2, // Painting warp (TTM Middle)
140 SURFACE_PAINTING_WARP_F3 = 0x00F3, // Painting warp (TTM Right)
141 SURFACE_TTC_PAINTING_1 = 0x00F4, // Painting warp (TTC Left)
142 SURFACE_TTC_PAINTING_2 = 0x00F5, // Painting warp (TTC Medium)
143 SURFACE_TTC_PAINTING_3 = 0x00F6, // Painting warp (TTC Right)
144 SURFACE_PAINTING_WARP_F7 = 0x00F7, // Painting warp (SL Left)
145 SURFACE_PAINTING_WARP_F8 = 0x00F8, // Painting warp (SL Middle)
146 SURFACE_PAINTING_WARP_F9 = 0x00F9, // Painting warp (SL Right)
147 SURFACE_PAINTING_WARP_FA = 0x00FA, // Painting warp (THI Tiny - Left)
148 SURFACE_PAINTING_WARP_FB = 0x00FB, // Painting warp (THI Tiny - Middle)
149 SURFACE_PAINTING_WARP_FC = 0x00FC, // Painting warp (THI Tiny - Right)
150 SURFACE_WOBBLING_WARP = 0x00FD, // Pool warp (HMC & DDD)
151 SURFACE_TRAPDOOR = 0x00FF, // Bowser Left trapdoor, has no action defined
152};
153
154inline std::ostream& operator<<(std::ostream& out, const SurfaceType& surfaceType) {
155 std::string output;
156 switch (surfaceType) {
157 case SurfaceType::SURFACE_DEFAULT:
158 output = "SURFACE_DEFAULT";
159 break;
160 case SurfaceType::SURFACE_BURNING:
161 output = "SURFACE_BURNING";
162 break;
163 case SurfaceType::SURFACE_0004:
164 output = "SURFACE_0004";
165 break;
166 case SurfaceType::SURFACE_HANGABLE:
167 output = "SURFACE_HANGABLE";
168 break;
169 case SurfaceType::SURFACE_SLOW:
170 output = "SURFACE_SLOW";
171 break;
172 case SurfaceType::SURFACE_DEATH_PLANE:
173 output = "SURFACE_DEATH_PLANE";
174 break;
175 case SurfaceType::SURFACE_CLOSE_CAMERA:
176 output = "SURFACE_CLOSE_CAMERA";
177 break;
178 case SurfaceType::SURFACE_WATER:
179 output = "SURFACE_WATER";
180 break;
181 case SurfaceType::SURFACE_FLOWING_WATER:
182 output = "SURFACE_FLOWING_WATER";
183 break;
184 case SurfaceType::SURFACE_INTANGIBLE:
185 output = "SURFACE_INTANGIBLE";
186 break;
187 case SurfaceType::SURFACE_VERY_SLIPPERY:
188 output = "SURFACE_VERY_SLIPPERY";
189 break;
190 case SurfaceType::SURFACE_SLIPPERY:
191 output = "SURFACE_SLIPPERY";
192 break;
193 case SurfaceType::SURFACE_NOT_SLIPPERY:
194 output = "SURFACE_NOT_SLIPPERY";
195 break;
196 case SurfaceType::SURFACE_TTM_VINES:
197 output = "SURFACE_TTM_VINES";
198 break;
199 case SurfaceType::SURFACE_MGR_MUSIC:
200 output = "SURFACE_MGR_MUSIC";
201 break;
202 case SurfaceType::SURFACE_INSTANT_WARP_1B:
203 output = "SURFACE_INSTANT_WARP_1B";
204 break;
205 case SurfaceType::SURFACE_INSTANT_WARP_1C:
206 output = "SURFACE_INSTANT_WARP_1C";
207 break;
208 case SurfaceType::SURFACE_INSTANT_WARP_1D:
209 output = "SURFACE_INSTANT_WARP_1D";
210 break;
211 case SurfaceType::SURFACE_INSTANT_WARP_1E:
212 output = "SURFACE_INSTANT_WARP_1E";
213 break;
214 case SurfaceType::SURFACE_SHALLOW_QUICKSAND:
215 output = "SURFACE_SHALLOW_QUICKSAND";
216 break;
217 case SurfaceType::SURFACE_DEEP_QUICKSAND:
218 output = "SURFACE_DEEP_QUICKSAND";
219 break;
220 case SurfaceType::SURFACE_INSTANT_QUICKSAND:
221 output = "SURFACE_INSTANT_QUICKSAND";
222 break;
223 case SurfaceType::SURFACE_DEEP_MOVING_QUICKSAND:
224 output = "SURFACE_DEEP_MOVING_QUICKSAND";
225 break;
226 case SurfaceType::SURFACE_SHALLOW_MOVING_QUICKSAND:
227 output = "SURFACE_SHALLOW_MOVING_QUICKSAND";
228 break;
229 case SurfaceType::SURFACE_QUICKSAND:
230 output = "SURFACE_QUICKSAND";
231 break;
232 case SurfaceType::SURFACE_MOVING_QUICKSAND:
233 output = "SURFACE_MOVING_QUICKSAND";
234 break;
235 case SurfaceType::SURFACE_WALL_MISC:
236 output = "SURFACE_WALL_MISC";
237 break;
238 case SurfaceType::SURFACE_NOISE_DEFAULT:
239 output = "SURFACE_NOISE_DEFAULT";
240 break;
241 case SurfaceType::SURFACE_NOISE_SLIPPERY:
242 output = "SURFACE_NOISE_SLIPPERY";
243 break;
244 case SurfaceType::SURFACE_HORIZONTAL_WIND:
245 output = "SURFACE_HORIZONTAL_WIND";
246 break;
247 case SurfaceType::SURFACE_INSTANT_MOVING_QUICKSAND:
248 output = "SURFACE_INSTANT_MOVING_QUICKSAND";
249 break;
250 case SurfaceType::SURFACE_ICE:
251 output = "SURFACE_ICE";
252 break;
253 case SurfaceType::SURFACE_LOOK_UP_WARP:
254 output = "SURFACE_LOOK_UP_WARP";
255 break;
256 case SurfaceType::SURFACE_HARD:
257 output = "SURFACE_HARD";
258 break;
259 case SurfaceType::SURFACE_WARP:
260 output = "SURFACE_WARP";
261 break;
262 case SurfaceType::SURFACE_TIMER_START:
263 output = "SURFACE_TIMER_START";
264 break;
265 case SurfaceType::SURFACE_TIMER_END:
266 output = "SURFACE_TIMER_END";
267 break;
268 case SurfaceType::SURFACE_HARD_SLIPPERY:
269 output = "SURFACE_HARD_SLIPPERY";
270 break;
271 case SurfaceType::SURFACE_HARD_VERY_SLIPPERY:
272 output = "SURFACE_HARD_VERY_SLIPPERY";
273 break;
274 case SurfaceType::SURFACE_HARD_NOT_SLIPPERY:
275 output = "SURFACE_HARD_NOT_SLIPPERY";
276 break;
277 case SurfaceType::SURFACE_VERTICAL_WIND:
278 output = "SURFACE_VERTICAL_WIND";
279 break;
280 case SurfaceType::SURFACE_BOSS_FIGHT_CAMERA:
281 output = "SURFACE_BOSS_FIGHT_CAMERA";
282 break;
283 case SurfaceType::SURFACE_CAMERA_FREE_ROAM:
284 output = "SURFACE_CAMERA_FREE_ROAM";
285 break;
286 case SurfaceType::SURFACE_THI3_WALLKICK:
287 output = "SURFACE_THI3_WALLKICK";
288 break;
289 case SurfaceType::SURFACE_CAMERA_8_DIR:
290 output = "SURFACE_CAMERA_8_DIR";
291 break;
292 case SurfaceType::SURFACE_CAMERA_MIDDLE:
293 output = "SURFACE_CAMERA_MIDDLE";
294 break;
295 case SurfaceType::SURFACE_CAMERA_ROTATE_RIGHT:
296 output = "SURFACE_CAMERA_ROTATE_RIGHT";
297 break;
298 case SurfaceType::SURFACE_CAMERA_ROTATE_LEFT:
299 output = "SURFACE_CAMERA_ROTATE_LEFT";
300 break;
301 case SurfaceType::SURFACE_CAMERA_BOUNDARY:
302 output = "SURFACE_CAMERA_BOUNDARY";
303 break;
304 case SurfaceType::SURFACE_NOISE_VERY_SLIPPERY_73:
305 output = "SURFACE_NOISE_VERY_SLIPPERY_73";
306 break;
307 case SurfaceType::SURFACE_NOISE_VERY_SLIPPERY_74:
308 output = "SURFACE_NOISE_VERY_SLIPPERY_74";
309 break;
310 case SurfaceType::SURFACE_NOISE_VERY_SLIPPERY:
311 output = "SURFACE_NOISE_VERY_SLIPPERY";
312 break;
313 case SurfaceType::SURFACE_NO_CAM_COLLISION:
314 output = "SURFACE_NO_CAM_COLLISION";
315 break;
316 case SurfaceType::SURFACE_NO_CAM_COLLISION_77:
317 output = "SURFACE_NO_CAM_COLLISION_77";
318 break;
319 case SurfaceType::SURFACE_NO_CAM_COL_VERY_SLIPPERY:
320 output = "SURFACE_NO_CAM_COL_VERY_SLIPPERY";
321 break;
322 case SurfaceType::SURFACE_NO_CAM_COL_SLIPPERY:
323 output = "SURFACE_NO_CAM_COL_SLIPPERY";
324 break;
325 case SurfaceType::SURFACE_SWITCH:
326 output = "SURFACE_SWITCH";
327 break;
328 case SurfaceType::SURFACE_VANISH_CAP_WALLS:
329 output = "SURFACE_VANISH_CAP_WALLS";
330 break;
331 case SurfaceType::SURFACE_PAINTING_WOBBLE_A6:
332 output = "SURFACE_PAINTING_WOBBLE_A6";
333 break;
334 case SurfaceType::SURFACE_PAINTING_WOBBLE_A7:
335 output = "SURFACE_PAINTING_WOBBLE_A7";
336 break;
337 case SurfaceType::SURFACE_PAINTING_WOBBLE_A8:
338 output = "SURFACE_PAINTING_WOBBLE_A8";
339 break;
340 case SurfaceType::SURFACE_PAINTING_WOBBLE_A9:
341 output = "SURFACE_PAINTING_WOBBLE_A9";
342 break;
343 case SurfaceType::SURFACE_PAINTING_WOBBLE_AA:
344 output = "SURFACE_PAINTING_WOBBLE_AA";
345 break;
346 case SurfaceType::SURFACE_PAINTING_WOBBLE_AB:
347 output = "SURFACE_PAINTING_WOBBLE_AB";
348 break;
349 case SurfaceType::SURFACE_PAINTING_WOBBLE_AC:
350 output = "SURFACE_PAINTING_WOBBLE_AC";
351 break;
352 case SurfaceType::SURFACE_PAINTING_WOBBLE_AD:
353 output = "SURFACE_PAINTING_WOBBLE_AD";
354 break;
355 case SurfaceType::SURFACE_PAINTING_WOBBLE_AE:
356 output = "SURFACE_PAINTING_WOBBLE_AE";
357 break;
358 case SurfaceType::SURFACE_PAINTING_WOBBLE_AF:
359 output = "SURFACE_PAINTING_WOBBLE_AF";
360 break;
361 case SurfaceType::SURFACE_PAINTING_WOBBLE_B0:
362 output = "SURFACE_PAINTING_WOBBLE_B0";
363 break;
364 case SurfaceType::SURFACE_PAINTING_WOBBLE_B1:
365 output = "SURFACE_PAINTING_WOBBLE_B1";
366 break;
367 case SurfaceType::SURFACE_PAINTING_WOBBLE_B2:
368 output = "SURFACE_PAINTING_WOBBLE_B2";
369 break;
370 case SurfaceType::SURFACE_PAINTING_WOBBLE_B3:
371 output = "SURFACE_PAINTING_WOBBLE_B3";
372 break;
373 case SurfaceType::SURFACE_PAINTING_WOBBLE_B4:
374 output = "SURFACE_PAINTING_WOBBLE_B4";
375 break;
376 case SurfaceType::SURFACE_PAINTING_WOBBLE_B5:
377 output = "SURFACE_PAINTING_WOBBLE_B5";
378 break;
379 case SurfaceType::SURFACE_PAINTING_WOBBLE_B6:
380 output = "SURFACE_PAINTING_WOBBLE_B6";
381 break;
382 case SurfaceType::SURFACE_PAINTING_WOBBLE_B7:
383 output = "SURFACE_PAINTING_WOBBLE_B7";
384 break;
385 case SurfaceType::SURFACE_PAINTING_WOBBLE_B8:
386 output = "SURFACE_PAINTING_WOBBLE_B8";
387 break;
388 case SurfaceType::SURFACE_PAINTING_WOBBLE_B9:
389 output = "SURFACE_PAINTING_WOBBLE_B9";
390 break;
391 case SurfaceType::SURFACE_PAINTING_WOBBLE_BA:
392 output = "SURFACE_PAINTING_WOBBLE_BA";
393 break;
394 case SurfaceType::SURFACE_PAINTING_WOBBLE_BB:
395 output = "SURFACE_PAINTING_WOBBLE_BB";
396 break;
397 case SurfaceType::SURFACE_PAINTING_WOBBLE_BC:
398 output = "SURFACE_PAINTING_WOBBLE_BC";
399 break;
400 case SurfaceType::SURFACE_PAINTING_WOBBLE_BD:
401 output = "SURFACE_PAINTING_WOBBLE_BD";
402 break;
403 case SurfaceType::SURFACE_PAINTING_WOBBLE_BE:
404 output = "SURFACE_PAINTING_WOBBLE_BE";
405 break;
406 case SurfaceType::SURFACE_PAINTING_WOBBLE_BF:
407 output = "SURFACE_PAINTING_WOBBLE_BF";
408 break;
409 case SurfaceType::SURFACE_PAINTING_WOBBLE_C0:
410 output = "SURFACE_PAINTING_WOBBLE_C0";
411 break;
412 case SurfaceType::SURFACE_PAINTING_WOBBLE_C1:
413 output = "SURFACE_PAINTING_WOBBLE_C1";
414 break;
415 case SurfaceType::SURFACE_PAINTING_WOBBLE_C2:
416 output = "SURFACE_PAINTING_WOBBLE_C2";
417 break;
418 case SurfaceType::SURFACE_PAINTING_WOBBLE_C3:
419 output = "SURFACE_PAINTING_WOBBLE_C3";
420 break;
421 case SurfaceType::SURFACE_PAINTING_WOBBLE_C4:
422 output = "SURFACE_PAINTING_WOBBLE_C4";
423 break;
424 case SurfaceType::SURFACE_PAINTING_WOBBLE_C5:
425 output = "SURFACE_PAINTING_WOBBLE_C5";
426 break;
427 case SurfaceType::SURFACE_PAINTING_WOBBLE_C6:
428 output = "SURFACE_PAINTING_WOBBLE_C6";
429 break;
430 case SurfaceType::SURFACE_PAINTING_WOBBLE_C7:
431 output = "SURFACE_PAINTING_WOBBLE_C7";
432 break;
433 case SurfaceType::SURFACE_PAINTING_WOBBLE_C8:
434 output = "SURFACE_PAINTING_WOBBLE_C8";
435 break;
436 case SurfaceType::SURFACE_PAINTING_WOBBLE_C9:
437 output = "SURFACE_PAINTING_WOBBLE_C9";
438 break;
439 case SurfaceType::SURFACE_PAINTING_WOBBLE_CA:
440 output = "SURFACE_PAINTING_WOBBLE_CA";
441 break;
442 case SurfaceType::SURFACE_PAINTING_WOBBLE_CB:
443 output = "SURFACE_PAINTING_WOBBLE_CB";
444 break;
445 case SurfaceType::SURFACE_PAINTING_WOBBLE_CC:
446 output = "SURFACE_PAINTING_WOBBLE_CC";
447 break;
448 case SurfaceType::SURFACE_PAINTING_WOBBLE_CD:
449 output = "SURFACE_PAINTING_WOBBLE_CD";
450 break;
451 case SurfaceType::SURFACE_PAINTING_WOBBLE_CE:
452 output = "SURFACE_PAINTING_WOBBLE_CE";
453 break;
454 case SurfaceType::SURFACE_PAINTING_WOBBLE_CF:
455 output = "SURFACE_PAINTING_WOBBLE_CF";
456 break;
457 case SurfaceType::SURFACE_PAINTING_WOBBLE_D0:
458 output = "SURFACE_PAINTING_WOBBLE_D0";
459 break;
460 case SurfaceType::SURFACE_PAINTING_WOBBLE_D1:
461 output = "SURFACE_PAINTING_WOBBLE_D1";
462 break;
463 case SurfaceType::SURFACE_PAINTING_WOBBLE_D2:
464 output = "SURFACE_PAINTING_WOBBLE_D2";
465 break;
466 case SurfaceType::SURFACE_PAINTING_WARP_D3:
467 output = "SURFACE_PAINTING_WARP_D3";
468 break;
469 case SurfaceType::SURFACE_PAINTING_WARP_D4:
470 output = "SURFACE_PAINTING_WARP_D4";
471 break;
472 case SurfaceType::SURFACE_PAINTING_WARP_D5:
473 output = "SURFACE_PAINTING_WARP_D5";
474 break;
475 case SurfaceType::SURFACE_PAINTING_WARP_D6:
476 output = "SURFACE_PAINTING_WARP_D6";
477 break;
478 case SurfaceType::SURFACE_PAINTING_WARP_D7:
479 output = "SURFACE_PAINTING_WARP_D7";
480 break;
481 case SurfaceType::SURFACE_PAINTING_WARP_D8:
482 output = "SURFACE_PAINTING_WARP_D8";
483 break;
484 case SurfaceType::SURFACE_PAINTING_WARP_D9:
485 output = "SURFACE_PAINTING_WARP_D9";
486 break;
487 case SurfaceType::SURFACE_PAINTING_WARP_DA:
488 output = "SURFACE_PAINTING_WARP_DA";
489 break;
490 case SurfaceType::SURFACE_PAINTING_WARP_DB:
491 output = "SURFACE_PAINTING_WARP_DB";
492 break;
493 case SurfaceType::SURFACE_PAINTING_WARP_DC:
494 output = "SURFACE_PAINTING_WARP_DC";
495 break;
496 case SurfaceType::SURFACE_PAINTING_WARP_DD:
497 output = "SURFACE_PAINTING_WARP_DD";
498 break;
499 case SurfaceType::SURFACE_PAINTING_WARP_DE:
500 output = "SURFACE_PAINTING_WARP_DE";
501 break;
502 case SurfaceType::SURFACE_PAINTING_WARP_DF:
503 output = "SURFACE_PAINTING_WARP_DF";
504 break;
505 case SurfaceType::SURFACE_PAINTING_WARP_E0:
506 output = "SURFACE_PAINTING_WARP_E0";
507 break;
508 case SurfaceType::SURFACE_PAINTING_WARP_E1:
509 output = "SURFACE_PAINTING_WARP_E1";
510 break;
511 case SurfaceType::SURFACE_PAINTING_WARP_E2:
512 output = "SURFACE_PAINTING_WARP_E2";
513 break;
514 case SurfaceType::SURFACE_PAINTING_WARP_E3:
515 output = "SURFACE_PAINTING_WARP_E3";
516 break;
517 case SurfaceType::SURFACE_PAINTING_WARP_E4:
518 output = "SURFACE_PAINTING_WARP_E4";
519 break;
520 case SurfaceType::SURFACE_PAINTING_WARP_E5:
521 output = "SURFACE_PAINTING_WARP_E5";
522 break;
523 case SurfaceType::SURFACE_PAINTING_WARP_E6:
524 output = "SURFACE_PAINTING_WARP_E6";
525 break;
526 case SurfaceType::SURFACE_PAINTING_WARP_E7:
527 output = "SURFACE_PAINTING_WARP_E7";
528 break;
529 case SurfaceType::SURFACE_PAINTING_WARP_E8:
530 output = "SURFACE_PAINTING_WARP_E8";
531 break;
532 case SurfaceType::SURFACE_PAINTING_WARP_E9:
533 output = "SURFACE_PAINTING_WARP_E9";
534 break;
535 case SurfaceType::SURFACE_PAINTING_WARP_EA:
536 output = "SURFACE_PAINTING_WARP_EA";
537 break;
538 case SurfaceType::SURFACE_PAINTING_WARP_EB:
539 output = "SURFACE_PAINTING_WARP_EB";
540 break;
541 case SurfaceType::SURFACE_PAINTING_WARP_EC:
542 output = "SURFACE_PAINTING_WARP_EC";
543 break;
544 case SurfaceType::SURFACE_PAINTING_WARP_ED:
545 output = "SURFACE_PAINTING_WARP_ED";
546 break;
547 case SurfaceType::SURFACE_PAINTING_WARP_EE:
548 output = "SURFACE_PAINTING_WARP_EE";
549 break;
550 case SurfaceType::SURFACE_PAINTING_WARP_EF:
551 output = "SURFACE_PAINTING_WARP_EF";
552 break;
553 case SurfaceType::SURFACE_PAINTING_WARP_F0:
554 output = "SURFACE_PAINTING_WARP_F0";
555 break;
556 case SurfaceType::SURFACE_PAINTING_WARP_F1:
557 output = "SURFACE_PAINTING_WARP_F1";
558 break;
559 case SurfaceType::SURFACE_PAINTING_WARP_F2:
560 output = "SURFACE_PAINTING_WARP_F2";
561 break;
562 case SurfaceType::SURFACE_PAINTING_WARP_F3:
563 output = "SURFACE_PAINTING_WARP_F3";
564 break;
565 case SurfaceType::SURFACE_TTC_PAINTING_1:
566 output = "SURFACE_TTC_PAINTING_1";
567 break;
568 case SurfaceType::SURFACE_TTC_PAINTING_2:
569 output = "SURFACE_TTC_PAINTING_2";
570 break;
571 case SurfaceType::SURFACE_TTC_PAINTING_3:
572 output = "SURFACE_TTC_PAINTING_3";
573 break;
574 case SurfaceType::SURFACE_PAINTING_WARP_F7:
575 output = "SURFACE_PAINTING_WARP_F7";
576 break;
577 case SurfaceType::SURFACE_PAINTING_WARP_F8:
578 output = "SURFACE_PAINTING_WARP_F8";
579 break;
580 case SurfaceType::SURFACE_PAINTING_WARP_F9:
581 output = "SURFACE_PAINTING_WARP_F9";
582 break;
583 case SurfaceType::SURFACE_PAINTING_WARP_FA:
584 output = "SURFACE_PAINTING_WARP_FA";
585 break;
586 case SurfaceType::SURFACE_PAINTING_WARP_FB:
587 output = "SURFACE_PAINTING_WARP_FB";
588 break;
589 case SurfaceType::SURFACE_PAINTING_WARP_FC:
590 output = "SURFACE_PAINTING_WARP_FC";
591 break;
592 case SurfaceType::SURFACE_WOBBLING_WARP:
593 output = "SURFACE_WOBBLING_WARP";
594 break;
595 case SurfaceType::SURFACE_TRAPDOOR:
596 output = "SURFACE_TRAPDOOR";
597 break;
598 default:
599 throw std::runtime_error("Unknown Surface Type");
600 }
601 return out << output;
602}
603
604#define SURFACE_IS_QUICKSAND(cmd) (cmd >= 0x21 && cmd < 0x28) // Doesn't include SURFACE_INSTANT_MOVING_QUICKSAND
605#define SURFACE_IS_NOT_HARD(cmd) (cmd != SurfaceType::SURFACE_HARD && \
606 !(cmd >= 0x35 && cmd <= 0x37))
607#define SURFACE_IS_PAINTING_WARP(cmd) (cmd >= 0xD3 && cmd < 0xFD)
608
609#define SURFACE_CLASS_DEFAULT 0x0000
610#define SURFACE_CLASS_VERY_SLIPPERY 0x0013
611#define SURFACE_CLASS_SLIPPERY 0x0014
612#define SURFACE_CLASS_NOT_SLIPPERY 0x0015
613
614#define SURFACE_FLAG_DYNAMIC (1 << 0)
615#define SURFACE_FLAG_NO_CAM_COLLISION (1 << 1)
616#define SURFACE_FLAG_X_PROJECTION (1 << 3)
617
618// These are effectively unique "surface" types like those defined higher
619// And they are used as collision commands to load certain functions
620#define TERRAIN_LOAD_VERTICES 0x0040 // Begins vertices list for collision triangles
621#define TERRAIN_LOAD_CONTINUE 0x0041 // Stop loading vertices but continues to load other collision commands
622#define TERRAIN_LOAD_END 0x0042 // End the collision list
623#define TERRAIN_LOAD_OBJECTS 0x0043 // Loads in certain objects for level start
624#define TERRAIN_LOAD_ENVIRONMENT 0x0044 // Loads water/HMC gas
625
626#define TERRAIN_LOAD_IS_SURFACE_TYPE_LOW(cmd) (cmd < 0x40)
627#define TERRAIN_LOAD_IS_SURFACE_TYPE_HIGH(cmd) (cmd >= 0x65)
628
629// Terrain types defined by the level script command terrain_type (cmd_31)
630#define TERRAIN_GRASS 0x0000
631#define TERRAIN_STONE 0x0001
632#define TERRAIN_SNOW 0x0002
633#define TERRAIN_SAND 0x0003
634#define TERRAIN_SPOOKY 0x0004
635#define TERRAIN_WATER 0x0005
636#define TERRAIN_SLIDE 0x0006
637#define TERRAIN_MASK 0x0007
638
639// These collision commands are unique "surface" types like those defined higher
640
641// Collision Data Routine Initiate
642#define COL_INIT() TERRAIN_LOAD_VERTICES
643
644// Collision Vertices Read Initiate
645#define COL_VERTEX_INIT(vtxNum) vtxNum
646
647// Collision Vertex
648#define COL_VERTEX(x, y, z) x, y, z
649
650// Collision Tris Initiate
651#define COL_TRI_INIT(surfType, triNum) surfType, triNum
652
653// Collision Tri
654#define COL_TRI(v1, v2, v3) v1, v2, v3
655
656// Collision Tri With Special Params
657#define COL_TRI_SPECIAL(v1, v2, v3, param) v1, v2, v3, param
658
659// Collision Tris Stop Loading
660#define COL_TRI_STOP() TERRAIN_LOAD_CONTINUE
661
662// End Collision Data
663#define COL_END() TERRAIN_LOAD_END
664
665// Special Object Initiate
666#define COL_SPECIAL_INIT(num) TERRAIN_LOAD_OBJECTS, num
667
668// Water Boxes Initiate
669#define COL_WATER_BOX_INIT(num) TERRAIN_LOAD_ENVIRONMENT, num
670
671// Water Box
672#define COL_WATER_BOX(id, x1, z1, x2, z2, y) id, x1, z1, x2, z2, y