Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
macros.h
Go to the documentation of this file.
1#ifndef _MACROS_H_
2#define _MACROS_H_
3
4#include "types.h"
5#include "include_asm.h"
6
7#define BSS __attribute__ ((nocommon, section (".bss")))
8#define TRANSPARENT_UNION __attribute__ ((__transparent_union__))
9
10#define ALIGNED(x) __attribute__((aligned(x)))
11
12#ifndef BBPLAYER
13# define OSALIGNED(x) ALIGNED(x)
14#else
15# define OSALIGNED(x)
16#endif
17
18# define BBALIGNED(x) ALIGNED(x)
19
20#define ALIGN16(val) (((val) + 0xF) & ~0xF)
21#define ALIGN8(val) (((val) + 0x7) & ~0x7)
22
23#ifdef _LANGUAGE_C_PLUS_PLUS
24#define EXTERN_C extern "C"
25#else
26#define EXTERN_C extern
27#endif
28
29#define NAME_SUFFIX
30#define NAME_PREFIX
31#ifdef _LANGUAGE_C_PLUS_PLUS
32// use C++ namespaces instead of these macros!
33#define A(sym) sym
34#define N(sym) sym
35#else
36#define A(sym) NS(AREA, NAME_PREFIX, sym, NAME_SUFFIX)
37#define N(sym) NS(NAMESPACE, NAME_PREFIX, sym, NAME_SUFFIX)
38#endif
39
40#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
41
42#define PTR_LIST_END ((void*) -1)
43
44#define API_CALLABLE(name) ApiStatus name(Evt* script, b32 isInitialCall)
45
46#define PHYSICAL_TO_VIRTUAL(addr) (void*)((u32)(addr) + 0x80000000)
47#define VIRTUAL_TO_PHYSICAL(addr) (u32)((u8*)(addr) - 0x80000000)
48
49//#ifdef DEBUG
50#define IS_DEBUG_PANIC(statement) is_debug_panic(statement)
51/*#else
52#define IS_DEBUG_PANIC(statement) do {} while(TRUE)
53#endif*/
54
55#define PANIC() IS_DEBUG_PANIC("Panic")
56#define PANIC_MSG(msg, args...) \
57 do { \
58 char panicMsg[0x40]; \
59 sprintf(panicMsg, msg, ##args); \
60 IS_DEBUG_PANIC(msg); \
61 } while (0)
62#define ASSERT(condition) \
63 if (!(condition)) { \
64 IS_DEBUG_PANIC("Assertion failed: " #condition); \
65 }
66#define ASSERT_MSG(condition, msg, args...) \
67 if (!(condition)) { \
68 char assertMsg[0x40]; \
69 sprintf(assertMsg, msg, ##args); \
70 IS_DEBUG_PANIC(assertMsg); \
71 }
72
73#define BADGE_MENU_PAGE(index) (&gPauseBadgesPages[index])
74#define ITEM_MENU_PAGE(index) (&gPauseItemsPages[index])
75
76#define MENU_PANEL_SELECTED_GRID_DATA(panel) \
77 (panel)->gridData[(panel)->state * (panel)->numCols * (panel)->numRows + \
78 (panel)->numCols * (panel)->row + \
79 (panel)->col]
80
81#define MAX_MAPVARS 16
82#define MAX_MAPFLAGS 3
83#define MAX_ENEMY_ACTORS 24
84
85#define MAX_ANIMATED_MODELS 16
86#define MAX_ANIMATED_MESHES 16
87#define MAX_ENTITY_MODELS 256
88#define MAX_MODELS 256
89#define MAX_MODEL_TRANSFORM_GROUPS 4
90#define MAX_SCRIPTS 128
91#define MAX_NPCS 64
92#define MAX_TRIGGERS 64
93#define MAX_SHADOWS 60
94#define MAX_ENTITIES 30
95#define MAX_WORKERS 16
96#define MAX_TEX_PANNERS 16
97#define MAX_ITEM_ENTITIES 256
98#define MAX_IMGFX_INSTANCES 90
99
100#define MAX_STAR_PIECES 222
101
102#define SP_PER_BAR 256
103#define SP_PER_SEG 32
104
105#define AC_DIFFICULTY_LEN 8
107typedef s32 Difficulty2D[AC_DIFFICULTY_LEN][2];
108
109#define SCREEN_WIDTH 320
110#define SCREEN_HEIGHT 240
111
112#define SCREEN_INSET_X 12
113#define SCREEN_INSET_Y 20
114
115#define SCREEN_XMIN (SCREEN_INSET_X)
116#define SCREEN_XMAX (SCREEN_WIDTH - SCREEN_INSET_X)
117#define SCREEN_YMIN (SCREEN_INSET_Y)
118#define SCREEN_YMAX (SCREEN_HEIGHT - SCREEN_INSET_Y)
119
120#define LAST_DEMO_SCENE_IDX 18
121
122#define WORLD_ENTITY_HEAP_SIZE 0x17FF0
123#define COLLISION_HEAP_SIZE 0x18000
124#define GENERAL_HEAP_SIZE 0x54000
125#define SPRITE_HEAP_SIZE 0x60000
126#define BATTLE_HEAP_SIZE 0x25800
127#define FRAME_BUFFER_SIZE 0x25800
128
129#define CAM_NEAR_CLIP 16
130#define CAM_FAR_CLIP 4096
131
132// Size of tmem in bytes (4kB)
133#define TMEM_SIZE 0x1000
134// Height of tiles to use when copying fullscreen images (6)
135#define SCREEN_COPY_TILE_HEIGHT ((TMEM_SIZE) / ((SCREEN_WIDTH) * (2)))
136
137// Alternative to libultra's M_PI: non-float version; more digits cause issues
138#define PI 3.141592f
139#define PI_D 3.141592
140#define TAU 6.28318f
141#define PI_S 3.14159f // Shorter PI
142
143// Angle conversion macros
144#define DEG_TO_BINANG(x) ((x) * (0x8000 / 180.0f))
145#define RAD_TO_BINANG(x) ((x) * (f32)(0x8000 / M_PI))
146#define DEG_TO_RAD(deg) (((deg) * TAU) / 360.0f)
147
148// Should be 1.0f / 0x7FFF, but precision is wrong for a double
149#define SHT_MINV 3.051851e-05
150
151#define SPRITE_WORLD_SCALE_F (5.0f/7.0f)
152#define SPRITE_WORLD_SCALE_D (5.0/7.0)
153
154#define SPR_PAL_SIZE 16
155
156#define BATTLE_ID_BIT 0x800
157#define BATTLE_NPC_ID_BIT 0x800
158#define BATTLE_ENTITY_ID_BIT 0x800
159
160#define UNPACK_BTL_AREA(battleID) (((battleID) >> 8) & 0xFF)
161#define UNPACK_BTL_INDEX(battleID) ((battleID) & 0xFF)
162
163#define COLLISION_WITH_NPC_BIT 0x2000
164#define COLLISION_WITH_ENTITY_BIT 0x4000
165
166#define ENTITY_COLLIDER_ID(entityIndex) (entityIndex | COLLISION_WITH_ENTITY_BIT)
167
168#define NO_COLLIDER -1
169
170#define NPC_DISPOSE_LOCATION 0,-1000,0
171#define NPC_DISPOSE_POS_X 0
172#define NPC_DISPOSE_POS_Y -1000
173#define NPC_DISPOSE_POS_Z 0
174
175#define PACK_FILL_COLOR(r, g, b, a) (GPACK_RGBA5551(r, g, b, a) << 0x10) | GPACK_RGBA5551(r, g, b, a)
176#define PACK_FILL_DEPTH(z,dz) (GPACK_ZDZ(z, dz) << 0x10) | GPACK_ZDZ(z, dz)
177
178#define SQ(x) ((x) * (x))
179#define CUBE(x) ((x) * (x) * (x))
180#define QUART(x) ((x) * (x) * (x) * (x))
181
183#define F16(f) (s16)(f * 327.67f)
184
186#define X10(f) (s32)(f * 1024.0f)
187
188#define _NS(w, x, y, z) w ## _ ## x ## y ## z
189#define NS(w, x, y, z) _NS(w, x, y, z)
190
191#define ASCII_TO_U32(a, b, c, d) ((u32)((a << 24) | (b << 16) | (c << 8) | (d << 0)))
192
193#define ITEM_VIS_GROUP(itemID, visGroupID) ((visGroupID) << 16 | (itemID))
194#define PACK_ROOM_FLAGS(itemVisGroup, roomFlags) ((itemVisGroup) << 12 | (roomFlags))
195
196// loads integrator with standard parameter set used for falling
197
198#define LOAD_INTEGRATOR_FALL(ptr) \
199 (ptr)[0] = 0.11430f; \
200 (ptr)[1] = -0.28710f; \
201 (ptr)[2] = -0.18230f; \
202 (ptr)[3] = 0.01152f; \
203
204/* common AI function and script variables */
205// ai script
206#define AI_TEMP_STATE functionTemp[0]
207#define AI_TEMP_STATE_AFTER_SUSPEND functionTemp[1]
208#define AI_PATROL_GOAL_INDEX functionTemp[2]
209// melee enemy
210#define AI_VAR_ATTACK_STATE varTable[0]
211#define AI_VAR_MELEE_PRE_TIME varTable[1]
212#define AI_VAR_MELEE_HIT_TIME varTable[2]
213#define AI_VAR_MELEE_MISS_TIME varTable[3]
214#define AI_VAR_NEXT_STATE varTable[7]
215// melee hitbox
216#define AI_VAR_HITNPC_YOFFSET varTable[0]
217#define AI_VAR_HITNPC_DIST varTable[1]
218#define AI_VAR_HITNPC_2 varTable[2]
219#define AI_VAR_HITNPC_3 varTable[3]
220#define AI_VAR_HITNPC_4 varTable[4]
221#define AI_VAR_HITNPC_SOUND varTable[15]
222// projectile hitbox
223#define VAR_PROJECTILE_HITBOX_STATE varTable[0]
224#define AI_PROJECTILE_AMMO_COUNT varTable[3]
225
226#define INTEGER_LOG2(x) ((x) <= 2 ? 1 : (x) <= 4 ? 2 : (x) <= 8 ? 3 : (x) <= 16 ? 4 : (x) <= 32 ? 5 : (x) <= 64 ? 6 : (x) <= 128 ? 7 : (x) <= 256 ? 8 : (x) <= 512 ? 9 : 10)
227
228#define FOLIAGE_MODEL_LIST(names...) \
229{ \
230 .count = __NARG__(names), \
231 .models = { names } \
232}
233
234#define STATUS_KEY_IGNORE_RES 0xFE
235#define STATUS_KEY_NEVER 0xFF
236#define DMG_STATUS_KEY(typeFlag, duration, chance) (STATUS_FLAG_USE_DURATION | typeFlag | (duration << 8) | chance)
237#define DMG_STATUS_ALWAYS(typeFlag, duration) (STATUS_FLAG_USE_DURATION | STATUS_FLAG_RIGHT_ON | typeFlag | (duration << 8))
238#define DMG_STATUS_IGNORE_RES(typeFlag, duration) (STATUS_KEY_IGNORE_RES | typeFlag | (duration << 8))
239
240#define _RDP_WHOLE(x) (((s32)(x * 65536.0) >> 16) & 0xFFFF)
241#define _RDP_FRAC(x) ((s32)(x * 65536.0) & 0xFFFF)
242#define _RDP_PACK_WHOLE(a, b) (_RDP_WHOLE(a) << 16) | _RDP_WHOLE(b)
243#define _RDP_PACK_FRAC(a, b) (_RDP_FRAC(a) << 16) | _RDP_FRAC(b)
244
245#define RDP_MATRIX( \
246 Ax, Bx, Cx, Dx, \
247 Ay, By, Cy, Dy, \
248 Az, Bz, Cz, Dz, \
249 Aw, Bw, Cw, Dw ) \
250{ \
251 .m = { \
252 { \
253 _RDP_PACK_WHOLE(Ax, Ay), \
254 _RDP_PACK_WHOLE(Az, Aw), \
255 _RDP_PACK_WHOLE(Bx, By), \
256 _RDP_PACK_WHOLE(Bz, Bw), \
257 }, \
258 { \
259 _RDP_PACK_WHOLE(Cx, Cy), \
260 _RDP_PACK_WHOLE(Cz, Cw), \
261 _RDP_PACK_WHOLE(Dx, Dy), \
262 _RDP_PACK_WHOLE(Dz, Dw), \
263 }, \
264 { \
265 _RDP_PACK_FRAC(Ax, Ay), \
266 _RDP_PACK_FRAC(Az, Aw), \
267 _RDP_PACK_FRAC(Bx, By), \
268 _RDP_PACK_FRAC(Bz, Bw), \
269 }, \
270 { \
271 _RDP_PACK_FRAC(Cx, Cy), \
272 _RDP_PACK_FRAC(Cz, Cw), \
273 _RDP_PACK_FRAC(Dx, Dy), \
274 _RDP_PACK_FRAC(Dz, Dw), \
275 } \
276 } \
277};
278
279#define UNPACK_PAL_R(color) (((color) >> 11) & 0x1F)
280#define UNPACK_PAL_G(color) (((color) >> 6) & 0x1F)
281#define UNPACK_PAL_B(color) (((color) >> 1) & 0x1F)
282#define UNPACK_PAL_A(color) ((color) & 1)
283
284#define PACK_PAL_RGBA(r, g, b, a) (((r) << 11) | ((g) << 6) | ((b) << 1) | (a));
285
286#define PM_RM_SHROUD GBL_c1(G_BL_CLR_BL, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA)
287
288#define PM_CC_01 0, 0, 0, TEXEL0, PRIMITIVE, 0, TEXEL0, 0
289#define PM_CC_02 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0
290
291#define PM_CC_03 TEXEL0, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0
292#define PM_CC_04 PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0
293#define PM_CC_05 TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0
294#define PM_CC_06 COMBINED, 0, PRIMITIVE_ALPHA, 0, 0, 0, 0, COMBINED
295#define PM_CC_07 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0
296#define PM_CC_PRIM_FULL_ALPHA 0, 0, 0, PRIMITIVE, 0, 0, 0, 1
297#define PM_CC_PRIM_NO_ALPHA 0, 0, 0, PRIMITIVE, 0, 0, 0, 0
298#define PM_CC_0A 0, 0, 0, 0, ENVIRONMENT, 0, TEXEL0, 0
299
300#define PM_CC_0B 0, 0, 0, 0, ENVIRONMENT, 0, TEXEL1, 0
301#define PM_CC_0D 0, 0, 0, 0, SHADE, 0, TEXEL1, 0
302#define PM_CC_0C 0, 0, 0, 0, 0, 0, 0, COMBINED
303
304#define PM_CC_0E 0, 0, 0, TEXEL0, 0, 0, 0, 0
305#define PM_CC_0F 0, 0, 0, TEXEL0, 0, 0, 0, 1
306#define PM_CC_10 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE
307#define PM_CC_11 0, 0, 0, TEXEL0, SHADE, 0, TEXEL0, 0
308#define PM_CC_12 0, 0, 0, TEXEL0, TEXEL0, 0, SHADE, 0
309
310#define PM_CC_MSG_UP_ARROW \
311 TEXEL0, 0, PRIMITIVE, 0, \
312 0, 0, 0, TEXEL1
313
314#define PM_CC_14 PRIMITIVE, ENVIRONMENT, TEXEL1, ENVIRONMENT, PRIMITIVE, 0, TEXEL1, 0
315#define PM_CC_15 PRIMITIVE, ENVIRONMENT, TEXEL1, ENVIRONMENT, 0, 0, 0, TEXEL1
316
317// multiply the combined color from cycle1 with PRIMITIVE color; PRIMITIVE alpha is ignored
318#define PM_CC2_MULTIPLY_PRIM COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED
319
320// multiply the combined color from cycle1 with SHADE color; SHADE alpha is ignored
321#define PM_CC2_MULTIPLY_SHADE COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED
322
323#define PM_CC_NOISE NOISE, 0, SHADE_ALPHA, 0, 0, 0, 0, 1
324
325#define PM_CC_1A TEXEL0, 0, PRIMITIVE_ALPHA, PRIMITIVE, 0, 0, 0, TEXEL0
326
327// implements ENV_TINT_DEPTH for untextured models
328// applies just the base color; depth-based fog color will be added during RDP blend step
329// color = SHADE * PRIM_ALPHA + PRIM
330// alpha = SHADE
331#define PM_CC_TINT_DEPTH_NOTEX \
332 SHADE, 0, PRIMITIVE_ALPHA, PRIMITIVE, \
333 0, 0, 0, SHADE
334
335// implements ENV_TINT_DEPTH for single-textured or mipmaped models
336// applies just the base color; depth-based fog color will be added during RDP blend step
337// color = COMB * PRIM_ALPHA + PRIM
338// alpha = COMB
339#define PM_CC_TINT_DEPTH_NO_SHADE \
340 COMBINED, 0, PRIMITIVE_ALPHA, PRIMITIVE, \
341 0, 0, 0, COMBINED
342
343// color = (COMB - PRIM) * PRIM_ALPHA + COMB
344// alpha = COMB
345#define PM_CC_20 \
346 COMBINED, PRIMITIVE, PRIMITIVE_ALPHA, COMBINED, \
347 0, 0, 0, COMBINED
348
349#define PM_CC_TINT_DEPTH_MIPMAPS \
350 COMBINED, 0, SHADE, PRIMITIVE, \
351 0, 0, 0, COMBINED
352
353// implements ENV_TINT_REMAP for untextured models
354// color = SHADE * PRIM + ENV
355// alpha = SHADE
356#define PM_CC_TINT_REMAP_NOTEX \
357 SHADE, 0, PRIMITIVE, ENVIRONMENT, \
358 0, 0, 0, SHADE
359
360// implements ENV_TINT_REMAP for single-textured or mipmaped models
361// NOTE: SHADE color is not used
362// color = COMB * PRIM + ENV
363// alpha = COMB
364#define PM_CC_TINT_REMAP_NO_SHADE \
365 COMBINED, 0, PRIMITIVE, ENVIRONMENT, \
366 0, 0, 0, COMBINED
367
368// implements ENV_TINT_REMAP for multi-textured models
369// only SHADE alpha is used
370// color = COMB * PRIM + ENV
371// alpha = COMB * SHADE
372#define PM_CC_TINT_REMAP_SHADE_ALPHA \
373 COMBINED, 0, PRIMITIVE, ENVIRONMENT, \
374 COMBINED, 0, SHADE, 0
375
376#define PM_CC_22 TEXEL0, TEXEL1, SHADE_ALPHA, TEXEL1, 0, 0, 0, TEXEL0
377#define PM_CC_23 1, TEXEL0, PRIMITIVE, TEXEL0, 0, 0, 0, TEXEL0
378#define PM_CC1_24 1, TEXEL0, PRIMITIVE, TEXEL0, 1, TEXEL0, TEXEL1, TEXEL0
379#define PM_CC2_24 1, TEXEL1, TEXEL0, COMBINED, 0, 0, 0, COMBINED
380
381#define PM_CC_TEX_COMBINE_3A 0, 0, 0, 0, TEXEL0, TEXEL1, SHADE, 0
382#define PM_CC_TEX_COMBINE_3B 0, 0, 0, SHADE, 0, 0, 0, COMBINED
383#define PM_CC_TEX_COMBINE_3C SHADE, 0, PRIMITIVE, ENVIRONMENT, 0, 0, 0, COMBINED
384
385#define PM_CC1_29 TEXEL0, SHADE, TEXEL0, TEXEL0, 1, TEXEL1, TEXEL0, TEXEL1
386#define PM_CC2_29 TEXEL0, COMBINED, TEXEL0_ALPHA, TEXEL0, 1, TEXEL0, TEXEL1, TEXEL0
387
388// same as G_CC_INTERFERENCE, except the roles of TEXEL0 and TEXEL1 are swapped
389#define PM_CC_ALT_INTERFERENCE \
390 TEXEL1, 0, TEXEL0, 0, \
391 TEXEL1, 0, TEXEL0, 0
392
393#define PM_CC_2B PRIMITIVE, 0, TEXEL1, 0, 0, 0, 0, TEXEL1
394#define PM_CC_2C PRIMITIVE, 0, TEXEL1, 0, TEXEL1, 0, PRIMITIVE, 0
395#define PM_CC_2D PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0
396#define PM_CC_2E 0, 0, 0, TEXEL0, TEXEL1, 0, PRIMITIVE, 0
397#define PM_CC_2F PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0
398#define PM_CC_32 PRIMITIVE, 0, TEXEL0, 0, TEXEL0, 0, PRIMITIVE, 0
399
400#define PM_CC_33 ENVIRONMENT, PRIMITIVE, COMBINED, PRIMITIVE, COMBINED, 0, PRIMITIVE, 0
401
402#define PM_CC_34 TEXEL0, CENTER, SCALE, ENVIRONMENT, 0, 0, 0, TEXEL0
403#define PM_CC_35 0, PRIMITIVE, COMBINED, ENVIRONMENT, 0, 0, 0, COMBINED
404
405#define PM_CC_36 TEXEL0, TEXEL1, TEXEL0, TEXEL1, 1, TEXEL0, TEXEL1, 1
406#define PM_CC_37 0, 0, 0, COMBINED, COMBINED, TEXEL1, TEXEL1, TEXEL1
407
408#define PM_CC_38 TEXEL1, K4, PRIMITIVE_ALPHA, TEXEL0, TEXEL0, TEXEL1, ENVIRONMENT, ENVIRONMENT
409#define PM_CC_39 TEXEL1, K4, COMBINED_ALPHA, COMBINED, 0, 0, 0, 1
410
411#define PM_CC_3A 0, 0, 0, PRIMITIVE, 1, TEXEL0, PRIMITIVE, TEXEL0
412
413#define PM_CC_SCREEN_OVERLAY \
414 0, 0, 0, SHADE, \
415 1, 0, PRIMITIVE, 0
416
417#define PM_CC_3C 0, 0, 0, PRIMITIVE, SHADE, 0, PRIMITIVE, 0
418
419#define PM_CC_3D SHADE, ENVIRONMENT, TEXEL0, TEXEL0, PRIMITIVE, 0, TEXEL0, 0
420
421#define PM_CC_3F TEXEL0, 0, SHADE, 0, SHADE, 0, PRIMITIVE, 0
422
423// animated tiles spreading over the screen when the game is reset
424// color = pure black
425// alpha = texture
426#define PM_CC_RESET_TILES 0, 0, 0, 0, 0, 0, 0, TEXEL0
427
428// light with animated alpha surrounding the flower gate in mac_01 as it appears
429// color = pure white
430// alpha = SHADE * PRIM
431#define PM_CC_FLOWER_GATE_GLOW 0, 0, 0, 1, SHADE, 0, PRIMITIVE, 0
432
433// light with animated alpha pouring through the opening in kkj_27 as the secret wall rotates
434// color = TEXEL0 * SHADE
435// alpha = PRIM
436#define PM_CC_KKJ_SPILL_LIGHT TEXEL0, 0, SHADE, 0, 0, 0, 0, PRIMITIVE
437
438// color = pass from cycle1
439// alpha = PRIM
440#define PM_CC_KKJ14_FIRE 0, 0, 0, COMBINED, 0, 0, 0, PRIMITIVE
441
442// color = SHADE + PRIM
443// alpha = PRIMITIVE * TEXEL0
444#define PM_CC_DAMAGE_INDICATOR 1, 0, SHADE, PRIMITIVE, PRIMITIVE, 0, TEXEL0, 0
445
446// custom combine modes for shadows
447#define PM_CC1_SHADOW 0, 0, 0, 0, PRIMITIVE, 0, TEXEL0, 0
448#define PM_CC2_SHADOW 0, 0, 0, 0, TEXEL0, 0, PRIMITIVE, 0
449
450// custom cycle1 modes for window styles
451#define PM_CC_WINDOW_2 PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL1
452#define PM_CC_WINDOW_3 PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL1, 0
453#define PM_CC_WINDOW_4 PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE
454#define PM_CC_WINDOW_5 0, 0, 0, TEXEL1, 0, 0, 0, TEXEL1
455#define PM_CC_WINDOW_6 0, 0, 0, TEXEL1, PRIMITIVE, 0, TEXEL1, 0
456#define PM_CC_WINDOW_7 PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, 1
457// custom cycle2 modes for window styles
458#define PM_CC_WINDOW_1 COMBINED, 0, TEXEL0, 0, 0, 0, 0, COMBINED
459
460#define PM_CC_IMGFX_COLOR_FILL 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0
461#define PM_CC_IMGFX_HOLOGRAM NOISE, PRIMITIVE, PRIMITIVE, TEXEL0, TEXEL0, 0, PRIMITIVE, 0
462
463#define PM_CC_MSG_NOISE_OUTLINE NOISE, 0, TEXEL0, 0, 0, 0, 0, TEXEL0
464#define PM_CC_MSG_STATIC NOISE, TEXEL0, ENVIRONMENT, TEXEL0, 0, 0, 0, TEXEL0
465
466#define PM_CC_CANDLE_1 TEXEL0, TEXEL1, TEXEL0, 1, 1, TEXEL0, TEXEL1, 1
467#define PM_CC_CANDLE_2 0, PRIMITIVE, COMBINED, ENVIRONMENT, COMBINED, TEXEL1, TEXEL1, TEXEL1
468
469#define PM_CC_BOX1_OPAQUE TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL1
470#define PM_CC_BOX2_OPAQUE TEXEL0, 0, TEXEL1, 0, 0, 0, 0, TEXEL1
471#define PM_CC_BOX1_TRANSPARENT TEXEL0, 0, PRIMITIVE, 0, TEXEL1, 0, PRIMITIVE, 0
472#define PM_CC_BOX2_TRANSPARENT TEXEL0, 0, TEXEL1, 0, TEXEL1, 0, PRIMITIVE, 0
473
474#define PM_CC_BOX1_CYC2 TEXEL0, ENVIRONMENT, ENV_ALPHA, COMBINED, 0, 0, 0, COMBINED
475#define PM_CC_BOX2_CYC2 PRIMITIVE, ENVIRONMENT, COMBINED, ENVIRONMENT, 0, 0, 0, COMBINED
476
477#define PM_CC_30 1, 0, TEXEL1, 0, 0, 0, 0, TEXEL1
478#define PM_CC_31 1, 0, TEXEL1, 0, TEXEL1, 0, PRIMITIVE, 0
479
480#define PM_CC_42 TEXEL0, 0, SHADE, 0, TEXEL0, 0, 0, TEXEL0
481
482#define PM_CC_43 PRIMITIVE, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, 0, 0, 0, 1
483#define PM_CC_44 PRIMITIVE, TEXEL1, PRIMITIVE_ALPHA, TEXEL1, 0, 0, 0, 1
484
485#define PM_CC_45 TEXEL0, 0, PRIMITIVE, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0
486#define PM_CC_46 TEXEL0, ENVIRONMENT, PRIMITIVE, 0, PRIMITIVE, 0, TEXEL0, 0
487#define PM_CC_47 TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, 0, TEXEL0, 0
488
489#define PM_CC_48 PRIMITIVE, 0, PRIMITIVE_ALPHA, TEXEL0, 0, 0, 0, SHADE
490
491#define PM_CC_49 TEXEL0, 0, SHADE, 0, PRIMITIVE, 0, TEXEL0, 0
492
493#define PM_CC_4A TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0
494#define PM_CC_4B PRIMITIVE, CENTER, COMBINED, ENVIRONMENT, 0, 0, 0, COMBINED
495#define PM_CC_4C 1, COMBINED, PRIMITIVE, COMBINED, 0, 0, 0, COMBINED
496#define PM_CC_4D ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0
497#define PM_CC_4E SHADE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0
498#define PM_CC_4F 0, 0, 0, COMBINED, COMBINED, 0, PRIMITIVE, 0
499
500#define PM_CC_50 TEXEL0, 0, TEXEL1, 0, 0, 0, 0, TEXEL1
501#define PM_CC_51 TEXEL0, 0, TEXEL1, 0, PRIMITIVE, 0, TEXEL1, 0
502#define PM_CC_52 SHADE, ENVIRONMENT, COMBINED, COMBINED, 0, 0, 0, COMBINED
503
504#define PM_CC_53 TEXEL1, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0
505#define PM_CC_54 COMBINED, TEXEL0, COMBINED_ALPHA, TEXEL0, PRIMITIVE, 0, TEXEL0, 0
506#define PM_CC_55 PRIMITIVE, ENVIRONMENT, TEXEL0_ALPHA, ENVIRONMENT, 0, 0, 0, 1
507
508#define PM_CC_56 0, 0, 0, 0, PRIMITIVE, TEXEL0, PRIMITIVE, 0
509#define PM_CC_57 1, TEXEL0, PRIMITIVE, 0, TEXEL0, 0, ENVIRONMENT, PRIMITIVE
510#define PM_CC_58 0, 0, 0, 0, 1, 0, ENVIRONMENT, PRIMITIVE
511
512#define PM_CC_59 0, 0, 0, 0, SHADE, 0, TEXEL0, 0
513#define PM_CC_5A SHADE, ENVIRONMENT, TEXEL0, TEXEL0, 0, 0, 0, TEXEL0
514
515#define PM_CC_5B 1, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0
516#define PM_CC_5C 1, 0, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0
517#define PM_CC_5D 1, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0
518#define PM_CC_5E 1, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0
519
520#define PM_CC_HOS_BG_SHADE 0, 0, 0, SHADE, SHADE, 0, PRIMITIVE, 0
521
522#define PM_CC_CONST_ALPHA_1 0, 0, 0, 0, 0, 0, 0, 1
523#define PM_CC_CONST_0 0, 0, 0, 0, 0, 0, 0, 0
524#define PM_CC_CONST_1 0, 0, 0, 1, 0, 0, 0, 1
525
526#ifdef OLD_GCC
527#define VLA 0
528#else
529#define VLA
530#endif
531
532#if VERSION_PAL
533#define DT (50.0f/60.0f)
534#else
535#define DT (1.0f)
536#endif
537
538#define DMA_COPY_SEGMENT(segment) dma_copy(segment##_ROM_START, segment##_ROM_END, segment##_VRAM)
539
540#ifdef __GNUC__
541#define NODISCARD __attribute__((warn_unused_result))
542#else
543#define NODISCARD
544#endif
545
546// Avoid compiler warnings for unused variables.
547#ifdef __GNUC__
548#define UNUSED __attribute__((unused))
549#else
550#define UNUSED
551#endif
552
553// Avoid undefined behaviour for non-returning functions.
554#ifdef __GNUC__
555#define NORETURN __attribute__((noreturn))
556#else
557#define NORETURN
558#endif
559
560// Always inline a function.
561#ifdef __GNUC__
562#define ALWAYS_INLINE inline __attribute__((always_inline))
563#else
564#define ALWAYS_INLINE inline
565#endif
566
567// Fall through a switch case.
568#ifdef __GNUC__
569#define FALL_THROUGH __attribute__((fallthrough))
570#else
571#define FALL_THROUGH
572#endif
573
574// Use Og when compiling the function.
575#ifdef __GNUC__
576#define OPTIMIZE_OG __attribute__((optimize("Og")))
577#else
578#define OPTIMIZE_OG
579#endif
580
581// Use Os when compiling the function.
582#ifdef __GNUC__
583#define OPTIMIZE_OS __attribute__((optimize("Os")))
584#else
585#define OPTIMIZE_OS
586#endif
587
588// Use Ofast when compiling the function.
589#ifdef __GNUC__
590#define OPTIMIZE_OFAST __attribute__((optimize("Ofast")))
591#else
592#define OPTIMIZE_OFAST
593#endif
594
595// Ignore 4-byte alignment in structs.
596#ifdef __GNUC__
597#define PACKED __attribute__((packed))
598#else
599#define PACKED
600#endif
601
602// Align to 4-byte boundary.
603#ifdef __GNUC__
604#define ALIGNED4 __attribute__((aligned(4)))
605#else
606#define ALIGNED4
607#endif
608
609// Align to 8-byte boundary (for DMA requirements).
610#ifdef __GNUC__
611#define ALIGNED8 __attribute__((aligned(8)))
612#else
613#define ALIGNED8
614#endif
615
616// Align to 16-byte boundary (for audio lib requirements).
617#ifdef __GNUC__
618#define ALIGNED16 __attribute__((aligned(16)))
619#else
620#define ALIGNED16
621#endif
622
623// Align to 32-byte boundary.
624#ifdef __GNUC__
625#define ALIGNED32 __attribute__((aligned(32)))
626#else
627#define ALIGNED32
628#endif
629
630// Align to 64-byte boundary.
631#ifdef __GNUC__
632#define ALIGNED64 __attribute__((aligned(64)))
633#else
634#define ALIGNED64
635#endif
636
637#endif
s32 Difficulty2D[8][2]
Definition macros.h:107
s32 Difficulty1D[8]
Definition macros.h:106
#define AC_DIFFICULTY_LEN
Definition macros.h:105