2#include "sprite/player.h"
4#define MAX_SPRITE_ID 0xFF
30 {{{ -16, 56, 0 }, FALSE, { 0, 0 }, { 240, 240, 240, 255 }}},
31 {{{ 16, 56, 0 }, FALSE, { 1024, 0 }, { 120, 120, 120, 255 }}},
32 {{{ 16, 0, 0 }, FALSE, { 1024, 1792 }, { 0, 0, 0, 255 }}},
33 {{{ -16, 0, 0 }, FALSE, { 0, 1792 }, { 120, 120, 120, 255 }}},
50 gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
51 gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
52 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
53 gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
54 gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM), AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)),
55 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE),
60 gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
62 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
63 gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
64 gsDPSetRenderMode(G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2),
65 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE),
70 gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
71 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
72 gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
73 gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | G_RM_PASS, AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)),
74 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE),
79 gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
80 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
81 gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
82 gsDPSetRenderMode(G_RM_PASS, G_RM_ZB_CLD_SURF2),
83 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE),
89#define MARIO_SPRITE_COMMON_BITS \
91 | 1 << SPR_Mario1_Back \
93#define MARIO_SPRITE_WORLD_BITS \
94 MARIO_SPRITE_COMMON_BITS \
96 | 1 << SPR_MarioW1_Back \
100#define MARIO_SPRITE_BATTLE_BITS \
101 MARIO_SPRITE_COMMON_BITS \
106#define PEACH_SPRITE_BITS \
108 | 1 << SPR_Peach1_Back \
142 Vtx* vtx = &quad->
v[0];
146 vtx->
v.ob[0] = -width / 2;
147 vtx->v.ob[1] = height;
148 vtx->v.tc[0] = 0x2000;
149 vtx->v.tc[1] = 0x2000;
152 vtx->v.ob[0] = width / 2;
153 vtx->v.ob[1] = height;
154 vtx->v.tc[0] = (width + 256) * 32;
155 vtx->v.tc[1] = 0x2000;
158 vtx->v.tc[0] = (width + 256) * 32;
159 vtx->v.ob[0] = width / 2;
160 vtx->v.tc[1] = (height + 256) * 32;
163 vtx->v.ob[0] = -width / 2;
164 vtx->v.tc[0] = 0x2000;
165 vtx->v.tc[1] = (height + 256) * 32;
174 if ((width * height) / 2 <= 0x800) {
175 dimensions = (width << 0x18) + (height << 0x10);
177 if (qi != -1 && (dimensions == (
D_802DFE48[qi] & 0xFFFF0000))) {
182 if (dimensions == (
D_802DFE48[i] & 0xFFFF0000)) {
221 s32 width, s32 height,
229 0, 0, width - 1, height - 1, 0,
230 G_TX_CLAMP, G_TX_CLAMP, 8, 8, G_TX_NOLOD, G_TX_NOLOD,
232 gDPSetTile(
gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 2, 0, G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
233 gDPSetTileSize(
gMainGfxPos++, 2, 0, 0, 63 << 2, 0);
243 gDPSetRenderMode(
gMainGfxPos++, AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
244 G_RM_PASS, AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
245 GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM));
247 gDPSetRenderMode(
gMainGfxPos++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
253 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 0, 3, 2, 0);
259 G_TX_CLAMP, G_TX_CLAMP, 8, 8, G_TX_NOLOD, G_TX_NOLOD,
269 gDPSetRenderMode(
gMainGfxPos++, AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM), AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | ALPHA_CVG_SEL | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM));
271 gDPSetRenderMode(
gMainGfxPos++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2);
277 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 0, 3, 2, 0);
281 gDPSetRenderMode(
gMainGfxPos++, AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
282 GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM),
283 AA_EN | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA |
284 GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM));
286 gDPSetRenderMode(
gMainGfxPos++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2);
290 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 0, 0, 0, alpha);
309 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 0, 3, 2, 0);
315 f32 dx, f32 dy, f32 dz,
316 f32 rotX, f32 rotY, f32 rotZ,
317 f32 scaleX, f32 scaleY, f32 scaleZ,
332 guRotateF(mtxTemp, rotY, 0.0f, 1.0f, 0.0f);
333 guMtxCatF(mtxTemp, mtxTransform, mtxTransform);
336 guRotateF(mtxTemp, rotZ, 0.0f, 0.0f, 1.0f);
337 guMtxCatF(mtxTemp, mtxTransform, mtxTransform);
340 guRotateF(mtxTemp, rotX, 1.0f, 0.0f, 0.0f);
341 guMtxCatF(mtxTemp, mtxTransform, mtxTransform);
344 if (scaleX != 1.0f || scaleY != 1.0f || scaleZ != 1.0f) {
345 guScaleF(mtxTemp, scaleX, scaleY, scaleZ);
346 guMtxCatF(mtxTemp, mtxTransform, mtxTransform);
351 G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
354 if ((u8) opacity == 255) {
360 if ((u8) opacity == 255) {
363 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 0, 0, 0, (u8) opacity);
368 width = cache->
width;
382 ifxImg.
width = width;
386 ifxImg.
alpha = opacity;
394void spr_transform_point(s32 rotX, s32 rotY, s32 rotZ, f32 inX, f32 inY, f32 inZ, f32* outX, f32* outY, f32* outZ) {
395 if (rotX == 0 && rotY == 0 && rotZ == 0) {
401 f32 xx, yx, zx, xy, yy, zy, xz, yz, zz;
403 guRotateF(mtxTransform, rotY, 0.0f, 1.0f, 0.0f);
404 guRotateF(mtxTemp, rotZ, 0.0f, 0.0f, 1.0f);
405 guMtxCatF(mtxTemp, mtxTransform, mtxTransform);
406 guRotateF(mtxTemp, rotX, 1.0f, 0.0f, 0.0f);
407 guMtxCatF(mtxTemp, mtxTransform, mtxTransform);
409 xx = (mtxTransform[0][0] * inX);
410 yx = (mtxTransform[1][0] * inY);
411 zx = (mtxTransform[2][0] * inZ);
412 xy = (mtxTransform[0][1] * inX);
413 yy = (mtxTransform[1][1] * inY);
414 zy = (mtxTransform[2][1] * inZ);
415 xz = (mtxTransform[0][2] * inX);
416 yz = (mtxTransform[1][2] * inY);
417 zz = (mtxTransform[2][2] * inZ);
419 *outX = xx + yx + zx;
420 *outY = xy + yy + zy;
421 *outZ = xz + yz + zz;
431 f32 rotX, rotY, rotZ;
443 cacheEntry = cache[component->
curRaster];
449 pal = palettes[paletteIdx];
454 rotX + component->
rot.
x,
455 rotY + component->
rot.
y,
456 rotZ + component->
rot.
z,
467 s32 temp = val & 0xFFF;
470 return temp | ~0xFFF;
477 s32 temp = val & 0xFFFF;
480 return temp | ~0xFFFF;
487 f32 posX, posY, posZ;
488 f32 rotX, rotY, rotZ;
489 f32 scaleX, scaleY, scaleZ;
514 switch (*bufPos & 0xF000) {
536 if (bufPos == gotoPos) {
545 cmdValue = *bufPos++ & 0xFFF;
546 if (cmdValue != 0xFFF) {
556 cmdValue = *bufPos++ & 0xFFF;
557 if (cmdValue != 0xFFF) {
568 cmdValue = *bufPos++;
569 switch (cmdValue & 0xF00) {
582 switch (*bufPos++ & 0xF) {
603 switch (*bufPos++ & 0xF) {
605 scaleZ = *bufPos++ / 100.0f;
610 scaleX = *bufPos++ / 100.0f;
613 scaleY = *bufPos++ / 100.0f;
616 scaleZ = *bufPos++ / 100.0f;
644 if (changedFlags & 1) {
649 if (changedFlags & 2) {
654 if (changedFlags & 4) {
681 cache = rasterCacheEntry[comp->
curRaster];
684 if (overridePalette != 0 && comp->
curPalette == 0) {
698 compListIt = compList;
706 compListIt = compList;
759 if (spr_playerMaxComponents < playerSprite->maxComponents) {
774 playerSprites[i] = 0;
787 for (i = 1; i <= SPR_Peach3; i++) {
788 if ((loadedFlags >> i) & 1) {
829 s32 spriteId = ((animID >> 16) & 0xFF) - 1;
830 s32 instanceIdx = spriteInstanceID & 0xFF;
831 s32 animIndex = animID & 0xFF;
838 component = *compList;
847 if (spriteData == NULL) {
852 spriteData += 4 + animIndex;
867 compList, animList, rasterList, 0);
873 s32 instanceIdx = spriteInstanceID & 0xFF;
883 s32 spriteIdBackFacing;
889 D_802DF57C = spriteId = ((animID >> 0x10) & 0xFF) - 1;
891 if (spriteData == NULL) {
897 palettes = (
PAL_PTR*)*spriteData++;
907 spriteIdBackFacing = spriteId + 1;
926 if (yaw > 90 && yaw <= 270 || yaw >= -270 && yaw < -90) {
933 zscale = 0.0f - zscale;
942 alpha = alphaIn & 0xFF;
952 palettes = paletteList;
979 component = *componentListIt;
980 if (compIdx == -1 || i == compIdx) {
985 component->
imgfxIdx &= ~SPR_IMGFX_FLAG_ALL;
1002 u16** paletteOffsetCopy;
1006 if (sprite != NULL) {
1019 if (sprites == NULL) {
1032 s32 spriteIndex = (animID >> 0x10) & 0x7FFF;
1033 s32 useTailAlloc = (u32)animID >> 0x1F;
1056 if (extraAnimList != NULL) {
1079 s32 i = spriteInstanceID & 0xFF;
1080 s32 animIndex = animID & 0xFF;
1088 spriteData += 4 + animIndex;
1091 palID = (animID >> 8) & 0xFF;
1094 ASSERT_MSG(animList != -1,
"Anim %x is not loaded", animID);
1101 compList, animList, rasterList, palID);
1107 s32 i = spriteInstanceID & 0xFF;
1125 palettes = (
PAL_PTR*)*spriteData++;
1144 if (yaw > 90 && yaw <= 270 || yaw >= -270 && yaw < -90) {
1151 alpha = arg2 & 0xFF;
1161 palettes = paletteList;
1165 spr_draw_component(alpha, *components++, *animComponents, rasters, palettes, zscale, mtx);
1185 return spriteInstanceID;
1221 if (componentList == NULL) {
1224 return componentList[compIdx]->
imgfxIdx & 0xFF;
1240 if (compIdx == -1 || i == compIdx) {
1241 imgfx_update((u8)comp->
imgfxIdx, imgfx, imgfxArg1, imgfxArg2, imgfxArg3, imgfxArg4, imgfxArg5);
1245 comp->
imgfxIdx &= ~SPR_IMGFX_FLAG_ALL;
1255 set_npc_imgfx_comp(spriteIdx, -1, imgfxType, imgfxArg1, imgfxArg2, imgfxArg3, imgfxArg4, imgfxArg5);
1273 if (animID != 255) {
1277 spriteData += 4 + animID;
1282 if (i == compListIdx) {
1283 anim = *animCompList;
1307 if (sprite != NULL) {
1322 if (sprite != NULL) {
1332 if (sprite != NULL) {
IMG_PTR spr_get_player_raster(s32 rasterIndex, s32 playerSpriteID)
void spr_update_player_raster_cache(void)
SpriteAnimData * spr_load_sprite(s32 idx, s32 isPlayerSprite, s32 useTailAlloc)
@ SPR_SHADING_FLAG_SET_VIEWPORT
@ SPR_SHADING_FLAG_ENABLED
@ SPR_IMGFX_FLAG_10000000
@ PLAYER_SPRITES_MARIO_WORLD
@ PLAYER_SPRITES_PEACH_WORLD
@ PLAYER_SPRITES_COMBINED_EPILOGUE
@ PLAYER_SPRITES_MARIO_REFLECT_FLOOR
@ PLAYER_SPRITES_PEACH_BATTLE
@ PLAYER_SPRITES_MARIO_PARADE
@ PLAYER_SPRITES_MARIO_BATTLE
s32 imgfx_appendGfx_component(s32, ImgFXTexture *, u32, Matrix4f)
s32 imgfx_get_free_instances(s32)
void * _heap_malloc(HeapNode *head, u32 size)
u32 _heap_free(HeapNode *heapNodeList, void *addrToFree)
void imgfx_release_instance(u32)
void imgfx_update(u32, ImgFXType, s32, s32, s32, s32, s32)
HeapNode * _heap_create(HeapNode *addr, u32 size)
#define gDPScrollMultiTile2_4b(pkt, timg, fmt, width, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt)
#define gDPScrollTextureBlock_4b(pkt, timg, fmt, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt)
#define ASSERT_MSG(condition, msg, args...)
#define VIRTUAL_TO_PHYSICAL(addr)
Quad * spr_get_cached_quad(s32 quadIndex)
Quad * spr_get_quad_for_size(s32 *quadIndex, s32 width, s32 height)
void spr_draw_component(s32 drawOpts, SpriteComponent *component, SpriteAnimComponent *anim, SpriteRasterCacheEntry **cache, PAL_PTR *palettes, f32 zscale, Matrix4f mtx)
void spr_transform_point(s32 rotX, s32 rotY, s32 rotZ, f32 inX, f32 inY, f32 inZ, f32 *outX, f32 *outY, f32 *outZ)
void spr_component_update_commands(SpriteComponent *comp, SpriteAnimComponent *anim)
BSS s32 spr_allocateBtlComponentsOnWorldHeap
void spr_init_quad_cache(void)
void spr_make_quad_for_size(Quad *quad, s32 width, s32 height)
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR *paletteList, Matrix4f mtx)
void spr_get_player_raster_info(SpriteRasterInfo *out, s32 playerSpriteID, s32 rasterIndex)
void spr_init_component_anim_state(SpriteComponent *comp, SpriteAnimComponent *anim)
BSS SpriteAnimData * NpcSpriteData[0xFF]
BSS SpriteAnimData * spr_playerSprites[13]
void spr_render_init(void)
BSS s32 spr_playerMaxComponents
s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale)
s32 spr_free_sprite(s32 spriteInstanceID)
s32 spr_get_notify_value(s32 spriteIndex)
void set_npc_imgfx_all(s32 spriteIdx, ImgFXType imgfxType, s32 imgfxArg1, s32 imgfxArg2, s32 imgfxArg3, s32 imgfxArg4, s32 imgfxArg5)
s32 spr_get_npc_color_variations(s32 npcSpriteID)
PlayerSpriteSet spr_playerSpriteSets[]
BSS SpriteInstance SpriteInstances[51]
void spr_appendGfx_component_flat(Quad *vertices, IMG_PTR raster, PAL_PTR palette, s32 width, s32 height, f32 arg5, Matrix4f mtx, s32 alpha)
void spr_set_anim_timescale(f32 timescale)
void spr_appendGfx_component(SpriteRasterCacheEntry *cache, f32 dx, f32 dy, f32 dz, f32 rotX, f32 rotY, f32 rotZ, f32 scaleX, f32 scaleY, f32 scaleZ, s32 opacity, PAL_PTR palette, Matrix4f mtx)
BSS u8 NpcSpriteInstanceCount[0xFF]
s32 spr_get_npc_raster_info(SpriteRasterInfo *out, s32 npcSpriteID, s32 rasterIndex)
void spr_load_npc_extra_anims(SpriteAnimData *, u32 *)
void spr_load_player_sprite(s32 spriteIndex)
s32 spr_unpack_signed_12bit(u16 val)
BSS PlayerCurrentAnimInfo spr_playerCurrentAnimInfo[3]
void spr_component_update_finish(SpriteComponent *comp, SpriteComponent **compList, SpriteRasterCacheEntry **rasterCacheEntry, s32 overridePalette)
void set_player_imgfx_all(s32 animID, ImgFXType imgfxType, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6)
#define MARIO_SPRITE_WORLD_BITS
s32 spr_unpack_signed_16bit(u16 val)
void spr_init_sprites(s32 playerSpriteSet)
HeapNode heap_generalHead
s32 spr_component_update(s32 curNotifyValue, SpriteComponent **compList, SpriteAnimComponent **animList, SpriteRasterCacheEntry **rasterCache, s32 overridePalette)
PAL_PTR * spr_get_npc_palettes(s32 npcSpriteID)
#define MARIO_SPRITE_BATTLE_BITS
SpriteComponent ** spr_allocate_components(s32)
s32 spr_get_comp_position(s32 spriteIdx, s32 compListIdx, s32 *outX, s32 *outY, s32 *outZ)
BSS s32 SpriteUpdateNotifyValue
s32 func_802DDEC4(s32 spriteIdx)
f32 spr_animUpdateTimeScale
s32 spr_load_npc_sprite(s32 animID, u32 *extraAnimList)
s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR *paletteList, Matrix4f mtx)
void set_npc_imgfx_comp(s32 spriteIdx, s32 compIdx, ImgFXType imgfx, s32 imgfxArg1, s32 imgfxArg2, s32 imgfxArg3, s32 imgfxArg4, s32 imgfxArg5)
void spr_clear_quad_cache(void)
PAL_PTR * spr_get_player_palettes(s32 spriteIndex)
void spr_init_anim_state(SpriteComponent **compList, SpriteAnimComponent **animList)
#define MARIO_SPRITE_COMMON_BITS
#define PEACH_SPRITE_BITS
s32 spr_update_player_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale)
s32 get_npc_comp_imgfx_idx(s32 spriteIdx, s32 compIdx)
void set_player_imgfx_comp(s32 spriteIdx, s32 compIdx, ImgFXType imgfx, s32 imgfxArg1, s32 imgfxArg2, s32 imgfxArg3, s32 imgfxArg4, s32 flags)
BSS s32 MaxLoadedSpriteInstanceID
void spr_init_player_raster_cache(s32 cacheSize, s32 maxRasterSize)
SpriteAnimData * spriteData
s32 properties
AABBCCCC : AA = unused?, BB = parent, CCCC = notify value.
void create_shading_palette(Matrix4f mtx, s32 uls, s32 ult, s32 lrs, s32 lrt, s32 alpha, s32)
SpriteRasterCacheEntry ** rastersOffset
SpriteComponent ** componentList
@ DRAW_SPRITE_OVERRIDE_YAW
@ DRAW_SPRITE_OVERRIDE_ALPHA
@ DRAW_SPRITE_OVERRIDE_PALETTES
@ DRAW_SPRITE_UPSIDE_DOWN
@ DRAW_SPRITE_USE_PLAYER_RASTERS
SpriteComponent ** componentList
#define ANIM_LIST_END
Terminates an extraAnimationList.
GameStatus * gGameStatusPtr
SpriteShadingProfile * gSpriteShadingProfile
DisplayContext * gDisplayContext