mirror of https://github.com/pmret/papermario.git
dx names parity
This commit is contained in:
parent
bb936b7fd7
commit
8b65460bca
132
src/sprite.c
132
src/sprite.c
|
|
@ -14,7 +14,7 @@ BSS s32 D_802DF534[3]; // unused?
|
||||||
BSS s32 D_802DF540;
|
BSS s32 D_802DF540;
|
||||||
BSS s32 D_802DF544; // unused?
|
BSS s32 D_802DF544; // unused?
|
||||||
BSS SpriteAnimData* spr_playerSprites[13];
|
BSS SpriteAnimData* spr_playerSprites[13];
|
||||||
BSS s32 D_802DF57C;
|
BSS s32 CurPlayerSpriteIndex;
|
||||||
BSS s32 spr_playerMaxComponents;
|
BSS s32 spr_playerMaxComponents;
|
||||||
BSS s32 D_802DF584; // unused?
|
BSS s32 D_802DF584; // unused?
|
||||||
BSS PlayerCurrentAnimInfo spr_playerCurrentAnimInfo[3];
|
BSS PlayerCurrentAnimInfo spr_playerCurrentAnimInfo[3];
|
||||||
|
|
@ -23,16 +23,16 @@ BSS SpriteAnimData* NpcSpriteData[MAX_SPRITE_ID];
|
||||||
BSS u8 NpcSpriteInstanceCount[MAX_SPRITE_ID];
|
BSS u8 NpcSpriteInstanceCount[MAX_SPRITE_ID];
|
||||||
BSS s32 D_802DFA44; // unused?
|
BSS s32 D_802DFA44; // unused?
|
||||||
BSS SpriteInstance SpriteInstances[51];
|
BSS SpriteInstance SpriteInstances[51];
|
||||||
BSS Quad* D_802DFE44;
|
BSS Quad* SpriteQuadCache;
|
||||||
BSS s32 D_802DFE48[22];
|
BSS s32 SpriteQuadCacheInfo[22]; // upper bytes: width, height; lower 16 bits: time left
|
||||||
BSS s32 D_802DFEA0[3];
|
BSS s32 SpriteCurBaseRot[3];
|
||||||
BSS s32 SpriteUpdateNotifyValue;
|
BSS s32 SpriteUpdateNotifyValue;
|
||||||
|
|
||||||
SpriteComponent** spr_allocate_components(s32);
|
SpriteComponent** spr_allocate_components(s32);
|
||||||
void spr_load_npc_extra_anims(SpriteAnimData*, u32*);
|
void spr_load_npc_extra_anims(SpriteAnimData*, u32*);
|
||||||
void spr_init_player_raster_cache(s32 cacheSize, s32 maxRasterSize);
|
void spr_init_player_raster_cache(s32 cacheSize, s32 maxRasterSize);
|
||||||
|
|
||||||
Quad spr_defaultQuad = {
|
Quad SprTemplateQuad = {
|
||||||
{
|
{
|
||||||
{{{ -16, 56, 0 }, FALSE, { 0, 0 }, { 240, 240, 240, 255 }}},
|
{{{ -16, 56, 0 }, FALSE, { 0, 0 }, { 240, 240, 240, 255 }}},
|
||||||
{{{ 16, 56, 0 }, FALSE, { 1024, 0 }, { 120, 120, 120, 255 }}},
|
{{{ 16, 56, 0 }, FALSE, { 1024, 0 }, { 120, 120, 120, 255 }}},
|
||||||
|
|
@ -53,7 +53,7 @@ Vp SprPauseVpAlt = {{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Gfx D_802DF3F0[] = {
|
Gfx OpaqueSpriteGfx[] = {
|
||||||
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
||||||
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
|
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
|
||||||
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
||||||
|
|
@ -63,7 +63,7 @@ Gfx D_802DF3F0[] = {
|
||||||
gsSPEndDisplayList(),
|
gsSPEndDisplayList(),
|
||||||
};
|
};
|
||||||
|
|
||||||
Gfx D_802DF428[] = {
|
Gfx TranslucentSpriteGfx[] = {
|
||||||
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
||||||
gsDPSetCombineMode(PM_CC_02, PM_CC_02),
|
gsDPSetCombineMode(PM_CC_02, PM_CC_02),
|
||||||
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
||||||
|
|
@ -73,7 +73,7 @@ Gfx D_802DF428[] = {
|
||||||
gsSPEndDisplayList(),
|
gsSPEndDisplayList(),
|
||||||
};
|
};
|
||||||
|
|
||||||
Gfx D_802DF460[] = {
|
Gfx OpaqueShadedSpriteGfx[] = {
|
||||||
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
||||||
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
||||||
gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
|
gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
|
||||||
|
|
@ -82,7 +82,7 @@ Gfx D_802DF460[] = {
|
||||||
gsSPEndDisplayList(),
|
gsSPEndDisplayList(),
|
||||||
};
|
};
|
||||||
|
|
||||||
Gfx D_802DF490[] = {
|
Gfx TranslucentShadedSpriteGfx[] = {
|
||||||
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
|
||||||
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
|
||||||
gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
|
gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
|
||||||
|
|
@ -91,7 +91,7 @@ Gfx D_802DF490[] = {
|
||||||
gsSPEndDisplayList(),
|
gsSPEndDisplayList(),
|
||||||
};
|
};
|
||||||
|
|
||||||
f32 spr_animUpdateTimeScale = 1.0f;
|
f32 SpriteAnimUpdateTimescale = 1.0f;
|
||||||
|
|
||||||
#define MARIO_SPRITE_COMMON_BITS \
|
#define MARIO_SPRITE_COMMON_BITS \
|
||||||
1 << SPR_Mario1 \
|
1 << SPR_Mario1 \
|
||||||
|
|
@ -131,25 +131,25 @@ PlayerSpriteSet spr_playerSpriteSets[] = {
|
||||||
void spr_init_quad_cache(void) {
|
void spr_init_quad_cache(void) {
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
D_802DFE44 = _heap_malloc(&heap_spriteHead, ARRAY_COUNT(D_802DFE48) * sizeof(*D_802DFE44));
|
SpriteQuadCache = _heap_malloc(&heap_spriteHead, ARRAY_COUNT(SpriteQuadCacheInfo) * sizeof(*SpriteQuadCache));
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_COUNT(D_802DFE48); i++) {
|
for (i = 0; i < ARRAY_COUNT(SpriteQuadCacheInfo); i++) {
|
||||||
D_802DFE48[i] = -1;
|
SpriteQuadCacheInfo[i] = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Quad* spr_get_cached_quad(s32 quadIndex) {
|
Quad* spr_get_cached_quad(s32 quadIndex) {
|
||||||
s32* temp_v1 = &D_802DFE48[quadIndex];
|
s32* temp_v1 = &SpriteQuadCacheInfo[quadIndex];
|
||||||
|
|
||||||
*temp_v1 |= 0x1F;
|
*temp_v1 |= 0x1F;
|
||||||
return &D_802DFE44[quadIndex];
|
return &SpriteQuadCache[quadIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
void spr_make_quad_for_size(Quad* quad, s32 width, s32 height) {
|
void spr_make_quad_for_size(Quad* quad, s32 width, s32 height) {
|
||||||
Vtx* vtx = &quad->v[0];
|
Vtx* vtx = &quad->v[0];
|
||||||
s32 w = width; // required to match
|
s32 w = width; // required to match
|
||||||
|
|
||||||
*quad = spr_defaultQuad;
|
*quad = SprTemplateQuad;
|
||||||
|
|
||||||
vtx->v.ob[0] = -w / 2;
|
vtx->v.ob[0] = -w / 2;
|
||||||
vtx->v.ob[1] = height;
|
vtx->v.ob[1] = height;
|
||||||
|
|
@ -182,26 +182,26 @@ Quad* spr_get_quad_for_size(s32* quadIndex, s32 width, s32 height) {
|
||||||
if ((width * height) / 2 <= 0x800) {
|
if ((width * height) / 2 <= 0x800) {
|
||||||
dimensions = (width << 0x18) + (height << 0x10);
|
dimensions = (width << 0x18) + (height << 0x10);
|
||||||
qi = *quadIndex;
|
qi = *quadIndex;
|
||||||
if (qi != -1 && (dimensions == (D_802DFE48[qi] & 0xFFFF0000))) {
|
if (qi != -1 && (dimensions == (SpriteQuadCacheInfo[qi] & 0xFFFF0000))) {
|
||||||
return spr_get_cached_quad(qi);
|
return spr_get_cached_quad(qi);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_COUNT(D_802DFE48); i++) {
|
for (i = 0; i < ARRAY_COUNT(SpriteQuadCacheInfo); i++) {
|
||||||
if (dimensions == (D_802DFE48[i] & 0xFFFF0000)) {
|
if (dimensions == (SpriteQuadCacheInfo[i] & 0xFFFF0000)) {
|
||||||
*quadIndex = i;
|
*quadIndex = i;
|
||||||
return spr_get_cached_quad(i);
|
return spr_get_cached_quad(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_COUNT(D_802DFE48); i++) {
|
for (i = 0; i < ARRAY_COUNT(SpriteQuadCacheInfo); i++) {
|
||||||
if (D_802DFE48[i] == -1) {
|
if (SpriteQuadCacheInfo[i] == -1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i != ARRAY_COUNT(D_802DFE48)) {
|
if (i != ARRAY_COUNT(SpriteQuadCacheInfo)) {
|
||||||
*quadIndex = i;
|
*quadIndex = i;
|
||||||
D_802DFE48[i] = dimensions;
|
SpriteQuadCacheInfo[i] = dimensions;
|
||||||
quad = spr_get_cached_quad(i);
|
quad = spr_get_cached_quad(i);
|
||||||
spr_make_quad_for_size(quad, width, height);
|
spr_make_quad_for_size(quad, width, height);
|
||||||
return quad;
|
return quad;
|
||||||
|
|
@ -213,11 +213,11 @@ Quad* spr_get_quad_for_size(s32* quadIndex, s32 width, s32 height) {
|
||||||
void spr_clear_quad_cache(void) {
|
void spr_clear_quad_cache(void) {
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_COUNT(D_802DFE48); i++) {
|
for (i = 0; i < ARRAY_COUNT(SpriteQuadCacheInfo); i++) {
|
||||||
if (D_802DFE48[i] != -1) {
|
if (SpriteQuadCacheInfo[i] != -1) {
|
||||||
D_802DFE48[i]--;
|
SpriteQuadCacheInfo[i]--;
|
||||||
if (!(D_802DFE48[i] & 0xFFFF)) {
|
if (!(SpriteQuadCacheInfo[i] & 0xFFFF)) {
|
||||||
D_802DFE48[i] = -1;
|
SpriteQuadCacheInfo[i] = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -360,16 +360,16 @@ void spr_appendGfx_component(
|
||||||
|
|
||||||
if (gSpriteShadingProfile->flags & SPR_SHADING_FLAG_ENABLED) {
|
if (gSpriteShadingProfile->flags & SPR_SHADING_FLAG_ENABLED) {
|
||||||
if ((u8) opacity == 255) {
|
if ((u8) opacity == 255) {
|
||||||
gSPDisplayList(gMainGfxPos++, D_802DF460);
|
gSPDisplayList(gMainGfxPos++, OpaqueShadedSpriteGfx);
|
||||||
} else {
|
} else {
|
||||||
gSPDisplayList(gMainGfxPos++, D_802DF490);
|
gSPDisplayList(gMainGfxPos++, TranslucentShadedSpriteGfx);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((u8) opacity == 255) {
|
if ((u8) opacity == 255) {
|
||||||
gSPDisplayList(gMainGfxPos++, D_802DF3F0);
|
gSPDisplayList(gMainGfxPos++, OpaqueSpriteGfx);
|
||||||
} else {
|
} else {
|
||||||
gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, (u8) opacity);
|
gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, (u8) opacity);
|
||||||
gSPDisplayList(gMainGfxPos++, D_802DF428);
|
gSPDisplayList(gMainGfxPos++, TranslucentSpriteGfx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -440,9 +440,9 @@ void spr_draw_component(s32 drawOpts, SpriteComponent* component, SpriteAnimComp
|
||||||
f32 inX, inY, inZ;
|
f32 inX, inY, inZ;
|
||||||
|
|
||||||
if (component->initialized && component->curRaster != -1) {
|
if (component->initialized && component->curRaster != -1) {
|
||||||
rotX = D_802DFEA0[0];
|
rotX = SpriteCurBaseRot[0];
|
||||||
rotY = D_802DFEA0[1];
|
rotY = SpriteCurBaseRot[1];
|
||||||
rotZ = D_802DFEA0[2];
|
rotZ = SpriteCurBaseRot[2];
|
||||||
inX = component->compPos.x + anim->compOffset.x;
|
inX = component->compPos.x + anim->compOffset.x;
|
||||||
inY = component->compPos.y + anim->compOffset.y;
|
inY = component->compPos.y + anim->compOffset.y;
|
||||||
inZ = component->compPos.z + anim->compOffset.z;
|
inZ = component->compPos.z + anim->compOffset.z;
|
||||||
|
|
@ -451,7 +451,7 @@ void spr_draw_component(s32 drawOpts, SpriteComponent* component, SpriteAnimComp
|
||||||
cacheEntry = cache[component->curRaster];
|
cacheEntry = cache[component->curRaster];
|
||||||
paletteIdx = component->curPalette;
|
paletteIdx = component->curPalette;
|
||||||
if (drawOpts & DRAW_SPRITE_USE_PLAYER_RASTERS) {
|
if (drawOpts & DRAW_SPRITE_USE_PLAYER_RASTERS) {
|
||||||
cacheEntry->image = spr_get_player_raster(component->curRaster & 0xFFF, D_802DF57C);
|
cacheEntry->image = spr_get_player_raster(component->curRaster & 0xFFF, CurPlayerSpriteIndex);
|
||||||
}
|
}
|
||||||
D_802DF540 = component->imgfxIdx;
|
D_802DF540 = component->imgfxIdx;
|
||||||
pal = palettes[paletteIdx];
|
pal = palettes[paletteIdx];
|
||||||
|
|
@ -510,7 +510,7 @@ void spr_component_update_commands(SpriteComponent* comp, SpriteAnimComponent* a
|
||||||
bufPos = comp->readPos;
|
bufPos = comp->readPos;
|
||||||
gotoPos = (u16*) -1;
|
gotoPos = (u16*) -1;
|
||||||
|
|
||||||
comp->waitTime -= spr_animUpdateTimeScale;
|
comp->waitTime -= SpriteAnimUpdateTimescale;
|
||||||
|
|
||||||
while (comp->waitTime <= 0.0f) {
|
while (comp->waitTime <= 0.0f) {
|
||||||
// overflow check
|
// overflow check
|
||||||
|
|
@ -757,7 +757,7 @@ void spr_init_anim_state(SpriteComponent** compList, SpriteAnimComponent** animL
|
||||||
}
|
}
|
||||||
|
|
||||||
void spr_set_anim_timescale(f32 timescale) {
|
void spr_set_anim_timescale(f32 timescale) {
|
||||||
spr_animUpdateTimeScale = timescale * 2.0f;
|
SpriteAnimUpdateTimescale = timescale * 2.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void spr_load_player_sprite(s32 spriteIndex) {
|
void spr_load_player_sprite(s32 spriteIndex) {
|
||||||
|
|
@ -834,10 +834,10 @@ s32 spr_update_player_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
|
||||||
SpriteComponent* component;
|
SpriteComponent* component;
|
||||||
SpriteAnimComponent** animList;
|
SpriteAnimComponent** animList;
|
||||||
SpriteRasterCacheEntry** rasterList;
|
SpriteRasterCacheEntry** rasterList;
|
||||||
s32 spriteId = ((animID >> 16) & 0xFF) - 1;
|
s32 spriteIdx = SPR_UNPACK_SPR(animID) - 1;
|
||||||
s32 instanceIdx = spriteInstanceID & 0xFF;
|
s32 instanceIdx = spriteInstanceID & 0xFF;
|
||||||
s32 animIndex = animID & 0xFF;
|
s32 animIndex = SPR_UNPACK_ANIM(animID);
|
||||||
D_802DF57C = spriteId;
|
CurPlayerSpriteIndex = spriteIdx;
|
||||||
|
|
||||||
if (spr_playerCurrentAnimInfo[instanceIdx].componentList == NULL) {
|
if (spr_playerCurrentAnimInfo[instanceIdx].componentList == NULL) {
|
||||||
compList = spr_allocate_components(spr_playerMaxComponents);
|
compList = spr_allocate_components(spr_playerMaxComponents);
|
||||||
|
|
@ -849,7 +849,7 @@ s32 spr_update_player_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spriteData = (u32*)spr_playerSprites[spriteId];
|
spriteData = (u32*)spr_playerSprites[spriteIdx];
|
||||||
compList = spr_playerCurrentAnimInfo[instanceIdx].componentList;
|
compList = spr_playerCurrentAnimInfo[instanceIdx].componentList;
|
||||||
|
|
||||||
if (spriteData == NULL) {
|
if (spriteData == NULL) {
|
||||||
|
|
@ -887,15 +887,15 @@ s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR*
|
||||||
f32 zscale;
|
f32 zscale;
|
||||||
u32 alpha;
|
u32 alpha;
|
||||||
u32* spriteData;
|
u32* spriteData;
|
||||||
s32 spriteId;
|
s32 spriteIdx;
|
||||||
s32 spriteIdBackFacing;
|
s32 spriteIdBackFacing;
|
||||||
|
|
||||||
if (animID == ANIM_LIST_END) {
|
if (animID == ANIM_LIST_END) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
D_802DF57C = spriteId = ((animID >> 0x10) & 0xFF) - 1;
|
CurPlayerSpriteIndex = spriteIdx = SPR_UNPACK_SPR(animID) - 1;
|
||||||
spriteData = (u32*)spr_playerSprites[spriteId];
|
spriteData = (u32*)spr_playerSprites[spriteIdx];
|
||||||
if (spriteData == NULL) {
|
if (spriteData == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
@ -905,17 +905,17 @@ s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR*
|
||||||
palettes = (PAL_PTR*)*spriteData++;
|
palettes = (PAL_PTR*)*spriteData++;
|
||||||
spriteData++;
|
spriteData++;
|
||||||
spriteData++;
|
spriteData++;
|
||||||
animComponents = (SpriteAnimComponent**)spriteData[animID & 0xFF];
|
animComponents = (SpriteAnimComponent**)spriteData[SPR_UNPACK_ANIM(animID)];
|
||||||
|
|
||||||
if (animID & SPRITE_ID_BACK_FACING) {
|
if (animID & SPRITE_ID_BACK_FACING) {
|
||||||
switch (spriteId) {
|
switch (spriteIdx) {
|
||||||
case 0:
|
case SPR_Mario1 - 1:
|
||||||
case 5:
|
case SPR_MarioW1 - 1:
|
||||||
case 9:
|
case SPR_Peach1 - 1:
|
||||||
spriteIdBackFacing = spriteId + 1;
|
spriteIdBackFacing = spriteIdx + 1;
|
||||||
// TODO find better match
|
// TODO find better match
|
||||||
rasters = (SpriteRasterCacheEntry**)spr_playerSprites[spriteIdBackFacing];
|
rasters = (SpriteRasterCacheEntry**)spr_playerSprites[spriteIdBackFacing];
|
||||||
D_802DF57C = spriteIdBackFacing;
|
CurPlayerSpriteIndex = spriteIdBackFacing;
|
||||||
rasters = (SpriteRasterCacheEntry**)*rasters;
|
rasters = (SpriteRasterCacheEntry**)*rasters;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -941,9 +941,9 @@ s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR*
|
||||||
zscale = 0.0f - zscale;
|
zscale = 0.0f - zscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
D_802DFEA0[0] = 0;
|
SpriteCurBaseRot[0] = 0;
|
||||||
D_802DFEA0[1] = yaw;
|
SpriteCurBaseRot[1] = yaw;
|
||||||
D_802DFEA0[2] = 0;
|
SpriteCurBaseRot[2] = 0;
|
||||||
|
|
||||||
if (spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) {
|
if (spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) {
|
||||||
alpha = alphaIn & 0xFF;
|
alpha = alphaIn & 0xFF;
|
||||||
|
|
@ -1084,7 +1084,7 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
|
||||||
|
|
||||||
s32 palID;
|
s32 palID;
|
||||||
s32 i = spriteInstanceID & 0xFF;
|
s32 i = spriteInstanceID & 0xFF;
|
||||||
s32 animIndex = animID & 0xFF;
|
s32 animIndex = SPR_UNPACK_ANIM(animID);
|
||||||
|
|
||||||
compList = SpriteInstances[i].componentList;
|
compList = SpriteInstances[i].componentList;
|
||||||
spriteData = (u32*)SpriteInstances[i].spriteData;
|
spriteData = (u32*)SpriteInstances[i].spriteData;
|
||||||
|
|
@ -1093,7 +1093,7 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
|
||||||
spriteData += 4 + animIndex;
|
spriteData += 4 + animIndex;
|
||||||
animList = (SpriteAnimComponent**)*spriteData;
|
animList = (SpriteAnimComponent**)*spriteData;
|
||||||
|
|
||||||
palID = (animID >> 8) & 0xFF;
|
palID = SPR_UNPACK_PAL(animID);
|
||||||
spr_set_anim_timescale(timeScale);
|
spr_set_anim_timescale(timeScale);
|
||||||
if ((spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) || ((SpriteInstances[i].curAnimID & 0xFF) != animIndex)) {
|
if ((spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) || ((SpriteInstances[i].curAnimID & 0xFF) != animIndex)) {
|
||||||
spr_init_anim_state(compList, animList);
|
spr_init_anim_state(compList, animList);
|
||||||
|
|
@ -1107,7 +1107,7 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
|
||||||
return SpriteInstances[i].notifyValue;
|
return SpriteInstances[i].notifyValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR* paletteList, Matrix4f mtx) {
|
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR* paletteList, Matrix4f mtx) {
|
||||||
s32 i = spriteInstanceID & 0xFF;
|
s32 i = spriteInstanceID & 0xFF;
|
||||||
s32 animID = SpriteInstances[i].curAnimID;
|
s32 animID = SpriteInstances[i].curAnimID;
|
||||||
SpriteRasterCacheEntry** rasters;
|
SpriteRasterCacheEntry** rasters;
|
||||||
|
|
@ -1129,11 +1129,11 @@ s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR* palett
|
||||||
palettes = (PAL_PTR*)*spriteData++;
|
palettes = (PAL_PTR*)*spriteData++;
|
||||||
spriteData++;
|
spriteData++;
|
||||||
spriteData++;
|
spriteData++;
|
||||||
animComponents = (SpriteAnimComponent**)spriteData[animID & 0xFF];
|
animComponents = (SpriteAnimComponent**)spriteData[SPR_UNPACK_ANIM(animID)];
|
||||||
|
|
||||||
D_802DFEA0[0] = 0;
|
SpriteCurBaseRot[0] = 0;
|
||||||
D_802DFEA0[1] = yaw;
|
SpriteCurBaseRot[1] = yaw;
|
||||||
D_802DFEA0[2] = 0;
|
SpriteCurBaseRot[2] = 0;
|
||||||
|
|
||||||
if (!(spriteInstanceID & DRAW_SPRITE_OVERRIDE_YAW)) {
|
if (!(spriteInstanceID & DRAW_SPRITE_OVERRIDE_YAW)) {
|
||||||
yaw += gCameras[gCurrentCamID].curYaw;
|
yaw += gCameras[gCurrentCamID].curYaw;
|
||||||
|
|
@ -1152,8 +1152,8 @@ s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR* palett
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) {
|
if (spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) {
|
||||||
alpha = arg2 & 0xFF;
|
alpha = alphaIn & 0xFF;
|
||||||
if (arg2 == 0) {
|
if (alphaIn == 0) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1175,8 +1175,8 @@ s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR* palett
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 spr_get_notify_value(s32 spriteIndex) {
|
s32 spr_get_notify_value(s32 spriteInstanceID) {
|
||||||
return SpriteInstances[spriteIndex].notifyValue;
|
return SpriteInstances[spriteInstanceID].notifyValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 spr_free_sprite(s32 spriteInstanceID) {
|
s32 spr_free_sprite(s32 spriteInstanceID) {
|
||||||
|
|
|
||||||
20
src/sprite.h
20
src/sprite.h
|
|
@ -6,6 +6,10 @@
|
||||||
#define SPR_PLAYER_COLOR_VARIATIONS 6
|
#define SPR_PLAYER_COLOR_VARIATIONS 6
|
||||||
#define SPR_PEACH_BTL_PAL_STRIDE 4
|
#define SPR_PEACH_BTL_PAL_STRIDE 4
|
||||||
|
|
||||||
|
#define SPR_UNPACK_SPR(animID) (((animID) >> 16) & 0xFF)
|
||||||
|
#define SPR_UNPACK_PAL(animID) (((animID) >> 8) & 0xFF)
|
||||||
|
#define SPR_UNPACK_ANIM(animID) ((animID) & 0xFF)
|
||||||
|
|
||||||
enum SpriteIDFields {
|
enum SpriteIDFields {
|
||||||
SPRITE_ID_ANIM_MASK = 0x000000FF,
|
SPRITE_ID_ANIM_MASK = 0x000000FF,
|
||||||
SPRITE_ID_PAL_MASK = 0x0000FF00,
|
SPRITE_ID_PAL_MASK = 0x0000FF00,
|
||||||
|
|
@ -116,14 +120,14 @@ typedef struct Quad {
|
||||||
Vtx v[4];
|
Vtx v[4];
|
||||||
} Quad; // size = 0x40
|
} Quad; // size = 0x40
|
||||||
|
|
||||||
extern Quad spr_defaultQuad;
|
extern Quad SprTemplateQuad;
|
||||||
extern Vp SprPauseVp;
|
extern Vp SprPauseVp;
|
||||||
extern Vp SprPauseVpAlt;
|
extern Vp SprPauseVpAlt;
|
||||||
extern Gfx D_802DF3F0[];
|
extern Gfx OpaqueSpriteGfx[];
|
||||||
extern Gfx D_802DF428[];
|
extern Gfx TranslucentSpriteGfx[];
|
||||||
extern Gfx D_802DF460[];
|
extern Gfx OpaqueShadedSpriteGfx[];
|
||||||
extern Gfx D_802DF490[];
|
extern Gfx TranslucentShadedSpriteGfx[];
|
||||||
extern f32 spr_animUpdateTimeScale;
|
extern f32 SpriteAnimUpdateTimescale;
|
||||||
extern PlayerSpriteSet spr_playerSpriteSets[7];
|
extern PlayerSpriteSet spr_playerSpriteSets[7];
|
||||||
|
|
||||||
void imgfx_init(void);
|
void imgfx_init(void);
|
||||||
|
|
@ -155,9 +159,9 @@ s32 spr_load_npc_sprite(s32 animID, u32* extraAnimList);
|
||||||
|
|
||||||
s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale);
|
s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale);
|
||||||
|
|
||||||
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR* paletteList, Matrix4f mtx);
|
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR* paletteList, Matrix4f mtx);
|
||||||
|
|
||||||
s32 spr_get_notify_value(s32 arg0);
|
s32 spr_get_notify_value(s32 spriteInstanceID);
|
||||||
|
|
||||||
s32 spr_free_sprite(s32 spriteInstanceID);
|
s32 spr_free_sprite(s32 spriteInstanceID);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1598,18 +1598,18 @@ DemoReleaseButton = 0x802D9AF8; // type:func rom:0x101C98
|
||||||
DemoSetButtons = 0x802D9B34; // type:func rom:0x101CD4
|
DemoSetButtons = 0x802D9B34; // type:func rom:0x101CD4
|
||||||
DemoJoystickRadial = 0x802D9B64; // type:func rom:0x101D04
|
DemoJoystickRadial = 0x802D9B64; // type:func rom:0x101D04
|
||||||
DemoJoystickXY = 0x802D9C10; // type:func rom:0x101DB0
|
DemoJoystickXY = 0x802D9C10; // type:func rom:0x101DB0
|
||||||
spr_defaultQuad = 0x80112EE0; // rom:0xA95E0
|
SprTemplateQuad = 0x80112EE0; // rom:0xA95E0
|
||||||
SprPauseVp = 0x80112F20; // rom:0xA9620
|
SprPauseVp = 0x80112F20; // rom:0xA9620
|
||||||
SprPauseVpAlt = 0x80112F30; // rom:0xA9630
|
SprPauseVpAlt = 0x80112F30; // rom:0xA9630
|
||||||
D_802DF3F0 = 0x80112F40; // rom:0xA9640
|
OpaqueSpriteGfx = 0x80112F40; // rom:0xA9640
|
||||||
D_802DF428 = 0x80112F78; // rom:0xA9678
|
TranslucentSpriteGfx = 0x80112F78; // rom:0xA9678
|
||||||
D_802DF460 = 0x80112FB0; // rom:0xA96B0
|
OpaqueShadedSpriteGfx = 0x80112FB0; // rom:0xA96B0
|
||||||
D_802DF490 = 0x80112FE0; // rom:0xA96E0
|
TranslucentShadedSpriteGfx = 0x80112FE0; // rom:0xA96E0
|
||||||
spr_animUpdateTimeScale = 0x80113010; // rom:0xA9710
|
SpriteAnimUpdateTimescale = 0x80113010; // rom:0xA9710
|
||||||
spr_playerSpriteSets = 0x80113014; // rom:0xA9714
|
spr_playerSpriteSets = 0x80113014; // rom:0xA9714
|
||||||
spr_init_quad_cache = 0x8010F890; // type:func rom:0xA5F90
|
spr_init_quad_cache = 0x8010F890; // type:func rom:0xA5F90
|
||||||
D_802DFE44 = 0x80113994;
|
SpriteQuadCache = 0x80113994;
|
||||||
D_802DFE48 = 0x80113998;
|
SpriteQuadCacheInfo = 0x80113998;
|
||||||
spr_get_cached_quad = 0x8010F8DC; // type:func rom:0xA5FDC
|
spr_get_cached_quad = 0x8010F8DC; // type:func rom:0xA5FDC
|
||||||
spr_make_quad_for_size = 0x8010F90C; // type:func rom:0xA600C
|
spr_make_quad_for_size = 0x8010F90C; // type:func rom:0xA600C
|
||||||
spr_get_quad_for_size = 0x8010F9C8; // type:func rom:0xA60C8
|
spr_get_quad_for_size = 0x8010F9C8; // type:func rom:0xA60C8
|
||||||
|
|
@ -1619,8 +1619,8 @@ spr_appendGfx_component = 0x80110444; // type:func rom:0xA6B44
|
||||||
D_802DF540 = 0x80113090;
|
D_802DF540 = 0x80113090;
|
||||||
spr_transform_point = 0x80110850; // type:func rom:0xA6F50
|
spr_transform_point = 0x80110850; // type:func rom:0xA6F50
|
||||||
spr_draw_component = 0x80110A2C; // type:func rom:0xA712C
|
spr_draw_component = 0x80110A2C; // type:func rom:0xA712C
|
||||||
D_802DFEA0 = 0x801139F0;
|
SpriteCurBaseRot = 0x801139F0;
|
||||||
D_802DF57C = 0x801130CC;
|
CurPlayerSpriteIndex = 0x801130CC;
|
||||||
spr_unpack_signed_12bit = 0x80110C2C; // type:func rom:0xA732C
|
spr_unpack_signed_12bit = 0x80110C2C; // type:func rom:0xA732C
|
||||||
spr_unpack_signed_16bit = 0x80110C4C; // type:func rom:0xA734C
|
spr_unpack_signed_16bit = 0x80110C4C; // type:func rom:0xA734C
|
||||||
spr_component_update_commands = 0x80110C6C; // type:func rom:0xA736C
|
spr_component_update_commands = 0x80110C6C; // type:func rom:0xA736C
|
||||||
|
|
|
||||||
|
|
@ -5608,14 +5608,14 @@ spr_get_player_raster = 0x802DEEA0; // type:func rom:0x101F90
|
||||||
spr_update_player_raster_cache = 0x802DEFB4; // type:func rom:0x1020A4
|
spr_update_player_raster_cache = 0x802DEFB4; // type:func rom:0x1020A4
|
||||||
spr_load_npc_extra_anims = 0x802DF00C; // type:func rom:0x1020FC
|
spr_load_npc_extra_anims = 0x802DF00C; // type:func rom:0x1020FC
|
||||||
spr_allocate_components = 0x802DF2D8; // type:func rom:0x1023C8
|
spr_allocate_components = 0x802DF2D8; // type:func rom:0x1023C8
|
||||||
spr_defaultQuad = 0x802DF390; // rom:0x102480
|
SprTemplateQuad = 0x802DF390; // rom:0x102480
|
||||||
SprPauseVp = 0x802DF3D0; // rom:0x1024C0
|
SprPauseVp = 0x802DF3D0; // rom:0x1024C0
|
||||||
SprPauseVpAlt = 0x802DF3E0; // rom:0x1024D0
|
SprPauseVpAlt = 0x802DF3E0; // rom:0x1024D0
|
||||||
D_802DF3F0 = 0x802DF3F0; // rom:0x1024E0
|
OpaqueSpriteGfx = 0x802DF3F0; // rom:0x1024E0
|
||||||
D_802DF428 = 0x802DF428; // rom:0x102518
|
TranslucentSpriteGfx = 0x802DF428; // rom:0x102518
|
||||||
D_802DF460 = 0x802DF460; // rom:0x102550
|
OpaqueShadedSpriteGfx = 0x802DF460; // rom:0x102550
|
||||||
D_802DF490 = 0x802DF490; // rom:0x102580
|
TranslucentShadedSpriteGfx = 0x802DF490; // rom:0x102580
|
||||||
spr_animUpdateTimeScale = 0x802DF4C0; // rom:0x1025B0
|
SpriteAnimUpdateTimescale = 0x802DF4C0; // rom:0x1025B0
|
||||||
spr_playerSpriteSets = 0x802DF4C4; // rom:0x1025B4
|
spr_playerSpriteSets = 0x802DF4C4; // rom:0x1025B4
|
||||||
entity_Shadow_init = 0x802E0D90; // type:func rom:0x102610
|
entity_Shadow_init = 0x802E0D90; // type:func rom:0x102610
|
||||||
entity_can_collide_with_jumping_player = 0x802E0DB0; // type:func rom:0x102630
|
entity_can_collide_with_jumping_player = 0x802E0DB0; // type:func rom:0x102630
|
||||||
|
|
@ -26202,16 +26202,16 @@ spr_allocateBtlComponentsOnWorldHeap = 0x802DF524; //
|
||||||
MaxLoadedSpriteInstanceID = 0x802DF530; //
|
MaxLoadedSpriteInstanceID = 0x802DF530; //
|
||||||
D_802DF540 = 0x802DF540; //
|
D_802DF540 = 0x802DF540; //
|
||||||
spr_playerSprites = 0x802DF548; //
|
spr_playerSprites = 0x802DF548; //
|
||||||
D_802DF57C = 0x802DF57C; //
|
CurPlayerSpriteIndex = 0x802DF57C; //
|
||||||
spr_playerMaxComponents = 0x802DF580; //
|
spr_playerMaxComponents = 0x802DF580; //
|
||||||
spr_playerCurrentAnimInfo = 0x802DF588; //
|
spr_playerCurrentAnimInfo = 0x802DF588; //
|
||||||
NpcSpriteData = 0x802DF5B0; //
|
NpcSpriteData = 0x802DF5B0; //
|
||||||
NpcSpriteInstanceCount = 0x802DF958; //
|
NpcSpriteInstanceCount = 0x802DF958; //
|
||||||
SpriteInstances = 0x802DFA48; //
|
SpriteInstances = 0x802DFA48; //
|
||||||
D_802DFE44 = 0x802DFE44; //
|
SpriteQuadCache = 0x802DFE44; //
|
||||||
D_802DFE48 = 0x802DFE48; //
|
SpriteQuadCacheInfo = 0x802DFE48; //
|
||||||
D_802DFE9C = 0x802DFE9C; //
|
D_802DFE9C = 0x802DFE9C; //
|
||||||
D_802DFEA0 = 0x802DFEA0; //
|
SpriteCurBaseRot = 0x802DFEA0; //
|
||||||
SpriteUpdateNotifyValue = 0x802DFEAC; //
|
SpriteUpdateNotifyValue = 0x802DFEAC; //
|
||||||
spr_asset_entry = 0x802DFEB0; //
|
spr_asset_entry = 0x802DFEB0; //
|
||||||
PlayerRasterLoadDescBuffer = 0x802DFEB8; //
|
PlayerRasterLoadDescBuffer = 0x802DFEB8; //
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue