sprites and effects (#900)

* firework_rocket

* confetti_main

* 5 sprite funcs

* cleaning up

* minBlurAlpha

* everything is right
This commit is contained in:
Unnunu 2023-01-03 18:57:48 +03:00 committed by GitHub
parent a2e96ae3ae
commit 1cea652202
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 560 additions and 1743 deletions

View File

@ -2349,32 +2349,28 @@ typedef struct Effect76FXData {
} Effect76FXData; // size = unknown
typedef struct FireworkRocketFXData {
/* 0x00 */ s32 unk_00;
/* 0x04 */ f32 unk_04;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
/* 0x10 */ f32 unk_10;
/* 0x14 */ f32 unk_14;
/* 0x18 */ f32 unk_18;
/* 0x1C */ s32 unk_1C;
/* 0x20 */ s32 unk_20;
/* 0x24 */ s32 unk_24;
/* 0x28 */ s32 unk_28;
/* 0x2C */ s32 unk_2C;
/* 0x30 */ s32 unk_30;
/* 0x00 */ s32 variation;
/* 0x04 */ Vec3f pos;
/* 0x10 */ Vec3f velocity;
/* 0x1C */ s32 timeLeft;
/* 0x20 */ s32 lifeTime;
/* 0x24 */ s32 r;
/* 0x28 */ s32 g;
/* 0x2C */ s32 b;
/* 0x30 */ s32 minBlurAlpha;
/* 0x34 */ s32 unk_34;
/* 0x38 */ s32 unk_38;
/* 0x3C */ s32 unk_3C;
/* 0x40 */ s32 unk_40;
/* 0x44 */ f32 unk_44;
/* 0x48 */ f32 unk_48;
/* 0x4C */ s32 unk_4C;
/* 0x50 */ f32 unk_50[4];
/* 0x60 */ f32 unk_60[4];
/* 0x70 */ f32 unk_70[4];
/* 0x80 */ f32 unk_80[4];
/* 0x90 */ f32 unk_90[4];
/* 0xA0 */ f32 unk_A0[4];
/* 0x44 */ f32 radius;
/* 0x48 */ f32 maxRadius;
/* 0x4C */ s32 isExploded;
/* 0x50 */ f32 rocketX[4];
/* 0x60 */ f32 rocketY[4];
/* 0x70 */ f32 rocketZ[4];
/* 0x80 */ f32 rocketVelocityX[4];
/* 0x90 */ f32 rocketVelocityY[4];
/* 0xA0 */ f32 rocketVelocityZ[4];
} FireworkRocketFXData; // size = 0xB0
typedef struct PeachStarBeamSpirit {

View File

@ -11,21 +11,19 @@
extern s32 spr_allocateBtlComponentsOnWorldHeap;
BSS s32 D_802DFEB0[2];
BSS s32 spr_asset_entry[2];
BSS s32 D_802DFEB8[101];
BSS s32 PlayerRasterSetsLoaded;
BSS s32 PlayerRasterBufferSetOffsets[13];
BSS s32 D_802D0084[3]; // unused?
BSS s32 D_802E0090[0x2E0]; // correct length?
BSS s32 PlayerRasterHeader;
BSS s32 D_802E0C14[3];
BSS s32 PlayerRasterHeader[3];
BSS s32 D_802E0C1C;
BSS s32 D_802E0C20[14];
BSS s32 PlayerRasterCacheSize;
BSS s32 PlayerRasterMaxSize;
BSS s32 SpriteDataHeader[1]; // ?
BSS s32 D_802E0C64;
BSS s32 D_802E0C68;
BSS s32 SpriteDataHeader[3];
BSS s32 D_802E0C6C; // unused?
BSS PlayerSpriteCacheEntry PlayerRasterCache[18];
@ -64,86 +62,95 @@ void spr_swizzle_anim_offsets(s32 arg0, s32 base, void* spriteData) {
}
}
#ifdef NON_EQUIVALENT
SpriteAnimData* spr_load_sprite(s32 idx, s32 arg1, s32 arg2) {
SpriteAnimData* spr_load_sprite(s32 idx, s32 isPlayerSprite, s32 useTailAlloc) {
SpriteAnimData* animData;
s32 base;
s32 i;
s32 compressedSize;
s32* ptr1;
IMG_PTR image;
s32 count;
s32** data;
s32** palettes;
s32 temp_s0;
s32 temp_s0_2;
s32 temp_v0_2;
s32 temp_v0_3;
s32* temp_a1_3;
s32** var_s2;
u16** var_v1;
s32* temp_v0;
if (arg1) {
base = D_802E0C64;
if (isPlayerSprite) {
base = SpriteDataHeader[1];
} else {
base = D_802E0C68;
}
nuPiReadRom(base + (idx * 4), &D_802DFEB0, 8U);
temp_s0 = ALIGN8(D_802DFEB0[1] - D_802DFEB0[0]);
temp_v0 = general_heap_malloc(temp_s0);
nuPiReadRom(base + D_802DFEB0[0], temp_v0, temp_s0);
if (arg2) {
temp_v0++;
animData = _heap_malloc_tail(&gSpriteHeapPtr, *temp_v0);
} else {
temp_v0++;
animData = _heap_malloc(&gSpriteHeapPtr, *temp_v0);
base = SpriteDataHeader[2];
}
decode_yay0(temp_v0, animData);
general_heap_free(temp_v0);
// read current and next sprite offsets, so we can find the difference
nuPiReadRom(base + idx * 4, &spr_asset_entry, sizeof(spr_asset_entry));
temp_v0_2 = ((u32) animData / 4) * 4;
var_s2 = animData->rastersOffset + temp_v0_2;
animData->rastersOffset = var_s2;
compressedSize = ALIGN8(spr_asset_entry[1] - spr_asset_entry[0]);
data = general_heap_malloc(compressedSize);
nuPiReadRom(base + spr_asset_entry[0], data, compressedSize);
while (*var_s2 != PTR_LIST_END) {
temp_a1_3 = *var_s2 + temp_v0_2;
*var_s2 = temp_a1_3;
var_s2++;
if (!arg1) {
*temp_a1_3 += temp_v0_2;
ptr1 = (s32*)data;
// skip 4 bytes: 'YAY0' signature
ptr1++;
if (useTailAlloc) {
animData = _heap_malloc_tail(&gSpriteHeapPtr, *ptr1);
} else {
animData = _heap_malloc(&gSpriteHeapPtr, *ptr1);
}
decode_yay0(data, animData);
general_heap_free(data);
// swizzle raster array
data = (s32**)animData->rastersOffset;
data = SPR_SWIZZLE(ALIGN4(animData), data);
animData->rastersOffset = (SpriteRasterCacheEntry**)data;
while (TRUE) {
ptr1 = *data;
if (ptr1 == PTR_LIST_END) {
break;
}
// swizzle each raster cache entry
ptr1 = SPR_SWIZZLE(ALIGN4(animData), ptr1);
*data++ = ptr1;
image = ((SpriteRasterCacheEntry*)ptr1)->image;
if (!isPlayerSprite) {
// swizzle image pointer in the cache entry
image = SPR_SWIZZLE(ALIGN4(animData), image);
*ptr1 = (s32)image;
}
}
if (arg1) {
D_802E0050[idx] = D_802E004C;
temp_s0_2 = D_802E0C20[idx + 1] - D_802E0C20[idx];
nuPiReadRom(D_802E0C60[0] + D_802E0C14[0] + D_802E0C20[idx], &D_802DFEB8, 0x194);
for (i = 0; i < temp_s0_2; i++) {
D_802E0090[D_802E004C++] = D_802DFEB8[i];
if (isPlayerSprite) {
PlayerRasterBufferSetOffsets[idx] = PlayerRasterSetsLoaded;
count = D_802E0C20[idx + 1] - D_802E0C20[idx];
nuPiReadRom(SpriteDataHeader[0] + PlayerRasterHeader[1] + sizeof(u32) * D_802E0C20[idx], D_802DFEB8, sizeof(D_802DFEB8));
for (i = 0; i < count; i++) {
D_802E0090[PlayerRasterSetsLoaded++] = D_802DFEB8[i];
}
}
temp_v0_3 = ((u32) animData / 4) * 4;
var_v1 = animData->palettesOffset + temp_v0_3;
animData->palettesOffset = var_v1;
while (*var_v1 != -1) {
*var_v1 += temp_v0_3;
var_v1++;
// swizzle palettes array
palettes = SPR_SWIZZLE(ALIGN4(animData), animData->palettesOffset);
animData->palettesOffset = (PAL_PTR*)palettes;
while (TRUE) {
ptr1 = *palettes;
if (ptr1 == PTR_LIST_END) {
break;
}
// swizzle each palette pointer
ptr1 = SPR_SWIZZLE(ALIGN4(animData), ptr1);
*palettes++ = ptr1;
}
spr_swizzle_anim_offsets(0, 0, animData);
return animData;
}
#else
INCLUDE_ASM(s32, "101b90_len_8f0", spr_load_sprite);
#endif
void spr_init_player_raster_cache(s32 cacheSize, s32 maxRasterSize) {
void* raster;
s32 i;
nuPiReadRom(SPRITE_ROM_START, &SpriteDataHeader, 0xC);
nuPiReadRom(SPRITE_ROM_START, &SpriteDataHeader, sizeof(SpriteDataHeader));
PlayerRasterCacheSize = cacheSize;
PlayerRasterMaxSize = maxRasterSize;
SpriteDataHeader[0] += SPRITE_ROM_START;
@ -163,8 +170,8 @@ void spr_init_player_raster_cache(s32 cacheSize, s32 maxRasterSize) {
PlayerRasterBufferSetOffsets[i] = 0;
}
PlayerRasterSetsLoaded = 0;
nuPiReadRom(SpriteDataHeader[0], &PlayerRasterHeader, 0xC);
nuPiReadRom(SpriteDataHeader[0] + PlayerRasterHeader, D_802E0C20, 0x38);
nuPiReadRom(SpriteDataHeader[0], &PlayerRasterHeader, sizeof(PlayerRasterHeader));
nuPiReadRom(SpriteDataHeader[0] + PlayerRasterHeader[0], D_802E0C20, sizeof(D_802E0C20));
}
IMG_PTR spr_get_player_raster(s32 rasterIndex, s32 playerSpriteID) {
@ -193,7 +200,7 @@ IMG_PTR spr_get_player_raster(s32 rasterIndex, s32 playerSpriteID) {
temp_s0->spriteIndex = playerSpriteID;
temp_s0->lazyDeleteTime = 2;
temp_a2 = D_802E0090[PlayerRasterBufferSetOffsets[playerSpriteID] + rasterIndex];
nuPiReadRom(*SpriteDataHeader + (temp_a2 & 0xFFFFF), temp_s0->raster, (temp_a2 >> 0x10) & 0xFFF0);
nuPiReadRom(SpriteDataHeader[0] + (temp_a2 & 0xFFFFF), temp_s0->raster, (temp_a2 >> 0x10) & 0xFFF0);
return temp_s0->raster;
}
@ -209,13 +216,136 @@ void spr_update_player_raster_cache(void) {
}
}
void spr_load_npc_extra_anims(SpriteAnimData*, u32*);
INCLUDE_ASM(s32, "101b90_len_8f0", spr_load_npc_extra_anims);
void spr_load_npc_extra_anims(SpriteAnimData* header, u32* extraAnimList) {
u8* src;
s32 imgID;
s32 rasterSize;
s32 remaining;
u16 animCmd;
u16* cmdList;
u32 extraAnimID;
u8* dataPos;
void* copyEnd;
SpriteAnimComponent* comp;
SpriteAnimComponent** compList;
void* writePos;
SpriteRasterCacheEntry** rasterList;
SpriteRasterCacheEntry* raster;
u16** oldPalList;
u16* palette;
// one extra required for 'done' sentinel
s32 sawRaster[100 + 1];
s32 i;
for (i = 0; i < ARRAY_COUNT(sawRaster) - 1; i++) {
sawRaster[i] = FALSE;
}
while ((extraAnimID = *extraAnimList++) != -1) {
compList = header->animListStart[extraAnimID & 0xFF];
while ((comp = *compList++) != PTR_LIST_END) {
cmdList = comp->cmdList;
remaining = (s16) comp->cmdListSize / 2;
while (remaining > 0) {
animCmd = *cmdList++;
remaining--;
switch (animCmd & 0xF000) {
case 0x1000:
i = animCmd; // required to match
imgID = i & 0xFF;
if (imgID < ARRAY_COUNT(sawRaster) - 1) {
sawRaster[imgID] = TRUE;
}
break;
case 0x3000:
cmdList++;
remaining--;
// fallthrough
case 0x4000:
cmdList++;
remaining--;
// fallthrough
case 0x7000:
case 0x5000:
cmdList++;
remaining--;
// fallthrough
case 0x0000:
case 0x2000:
case 0x6000:
case 0x8000:
break;
}
}
}
}
rasterList = header->rastersOffset;
raster = *rasterList;
dataPos = raster->image;
for (i = 0; i < ARRAY_COUNT(sawRaster) - 1; i++) {
if ((raster = *rasterList) == PTR_LIST_END) {
break;
}
if (sawRaster[i]) {
src = raster->image;
rasterSize = (raster->width * raster->height) / 2;
copyEnd = &dataPos[rasterSize];
rasterSize += 8;
if (dataPos != src) {
raster->image = dataPos;
bcopy(src, dataPos, rasterSize);
}
*rasterList = copyEnd;
dataPos += rasterSize;
}
rasterList++;
}
// sentinel value to mark end of valid data
sawRaster[i] = TRUE;
writePos = dataPos;
// copy raster list
rasterList = header->rastersOffset;
header->rastersOffset = writePos;
for (i = 0; i < ARRAY_COUNT(sawRaster) - 1; i++) {
raster = *rasterList++;
if (sawRaster[i]) {
*(SpriteRasterCacheEntry**) writePos = raster;
} else {
*(SpriteRasterCacheEntry**) writePos = (SpriteRasterCacheEntry*) copyEnd;
}
writePos += 4;
if (raster == PTR_LIST_END) {
break;
}
}
// copy palette list
oldPalList = header->palettesOffset;
header->palettesOffset = writePos;
for (i = 0; i < ARRAY_COUNT(sawRaster) - 1; i++) {
raster = (SpriteRasterCacheEntry*)*oldPalList++; // required to match
*(u16**)writePos = (u16*)raster;
writePos += 4;
if (raster == PTR_LIST_END) {
break;
}
}
_heap_realloc(&gSpriteHeapPtr, header, (s32)writePos - (s32)header);
}
#ifdef NON_MATCHING
SpriteComponent** spr_allocate_components(s32 count) {
s32 listSize;
void** heap;
SpriteComponent **new_var;
SpriteComponent** listStart;
SpriteComponent* component;
SpriteComponent** listPos;
@ -228,19 +358,18 @@ SpriteComponent** spr_allocate_components(s32 count) {
totalSize = (count * sizeof(SpriteComponent)) + listSize;
if (spr_allocateBtlComponentsOnWorldHeap) {
heap = _heap_malloc(&heap_generalHead, totalSize);
listStart = _heap_malloc(&heap_generalHead, totalSize);
} else {
heap = _heap_malloc(&gSpriteHeapPtr, totalSize);
listStart = _heap_malloc(&gSpriteHeapPtr, totalSize);
}
listStart = (SpriteComponent**) heap;
listPos = listStart;
component = (SpriteComponent*)(heap + (listSize / 4));
component = listPos = listStart;
component = (SpriteComponent*)((s32)(component) + (listSize / 4) * 4);
// fill list values
for (i = 0; i < count; i++) {
*listPos = component;
listPos++;
*listPos++ = component;
component++;
}
*listPos = PTR_LIST_END;

View File

@ -44,8 +44,6 @@ void func_E0088000(ConfettiFXData* part) {
part->unk_20 = 120;
}
// weirdness abound
#ifdef NON_EQUIVALENT
EffectInstance* confetti_main(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5) {
EffectBlueprint bp;
EffectBlueprint* bpPtr = &bp;
@ -112,33 +110,43 @@ EffectInstance* confetti_main(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4,
effect = shim_create_effect_instance(bpPtr);
effect->numParts = numParts;
data = effect->data.fireworkRocket = shim_general_heap_malloc(numParts * sizeof(*data));
ASSERT(effect->data.fireworkRocket != NULL);
data = effect->data.confetti = (ConfettiFXData*)shim_general_heap_malloc(numParts * sizeof(*data));
ASSERT(effect->data.confetti != NULL);
data->unk_04 = arg1;
data->unk_08 = arg2;
data->unk_0C = arg3;
data->unk_24 = 0;
data->unk_00 = arg0;
data->unk_20 = arg5;
data->unk_00 = arg0;
data->unk_2C = np;
data->unk_28 = 255;
data++;
temp_fp = shim_rand_int(360);
for (i = 0; i < np; i++, data++) {
temp_f30 = sp28 * (func_E0200000(100) * 0.01f);
if ((u32) arg0 < 7U) {
}
temp_f28 = 2.0 * (sp28 * 0.5);
var_v0 = i;
if (i < 0) {
var_v0 = i + 3;
switch (arg0) {
case 0:
case 4:
temp_f28 = sp28 * 0.5 * 2.0;
break;
case 1:
case 5:
temp_f28 = sp28 * 0.5 * 2.0;
break;
case 2:
case 6:
temp_f28 = sp28 * 0.5 * 2.0;
break;
}
temp_f28 = sp28 * 0.5 * 2.0;
theta2 = D_E0088D08[i % 4];
theta = ((i * 360.0f) / np) + temp_fp;
data->unk_30 = arg0;
theta2 = D_E0088D08[i - ((var_v0 >> 2) * 4)];
data->unk_00 = arg0;
sinTheta = shim_sin_deg(theta);
cosTheta = shim_cos_deg(theta);
sinTheta2 = shim_sin_deg(theta2);
@ -147,14 +155,14 @@ EffectInstance* confetti_main(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4,
func_E0088000(data);
data->unk_30 = i * 3;
} else {
data->unk_0C = temp_f30 * sinTheta2;
data->unk_18 = temp_f28 * sinTheta2;
data->unk_04 = temp_f30 * sinTheta * cosTheta2;
data->unk_08 = temp_f30 * cosTheta * cosTheta2;
data->unk_0C = temp_f30 * sinTheta2;
data->unk_10 = temp_f28 * sinTheta * cosTheta2;
data->unk_14 = (temp_f28 * cosTheta * cosTheta2) + 1.0f;
data->unk_18 = temp_f28 * sinTheta2;
if (arg0 >= 4) {
data->unk_1C = -0.02 - (((i + 1) % 3) * 0.02);
data->unk_1C = -0.02 - ((i + 1) % 3) * 0.02;
} else {
data->unk_1C = 0.0f;
}
@ -163,9 +171,6 @@ EffectInstance* confetti_main(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4,
}
return effect;
}
#else
INCLUDE_ASM(s32, "effects/confetti", confetti_main);
#endif
void confetti_init(EffectInstance* effect) {
}

View File

@ -1,13 +1,15 @@
#include "common.h"
#include "effects_internal.h"
void shim_func_80138D88(s32, s32, s32, s32, f32);
void firework_rocket_init(EffectInstance* effect);
void firework_rocket_render(EffectInstance* effect);
void firework_rocket_update(EffectInstance* effect);
void firework_rocket_appendGfx(void* effect);
typedef struct FireworkRocketUnk {
/* 0x00 */ Color_RGB8* unk_00;
/* 0x00 */ Vec3b* sparks;
/* 0x04 */ s32 num;
} FireworkRocketUnk; // size = 0x8
@ -17,42 +19,58 @@ extern Gfx D_09000158_3E54A8[];
Gfx* D_E010ACC0[] = { D_09000158_3E54A8, D_09000158_3E54A8, D_09000158_3E54A8 };
Gfx* D_E010ACCC[] = { D_09000080_3E53D0, D_09000080_3E53D0, D_09000080_3E53D0 };
Color_RGB8 D_E010ACD8[] = {
{36, 0, 93}, {54, 216, 74}, {67, 0, 74}, {82, 220, 45}, {89, 0, 45}, {60, 190, 45}, {21, 192, 74}, {28, 171, 45},
{10, 158, 15}, {49, 170, 15}, {166, 216, 15}, {169, 237, 45}, {157, 0, 15}, {184, 203, 45}, {169, 19, 45},
{166, 40, 15}, {190, 73, 15}, {184, 53, 45}, {211, 77, 45}, {225, 94, 15}, {247, 89, 45}, {184, 53, 45},
{11, 222, 93}, {0, 0, 100}, {202, 216, 74}, {184, 203, 45}, {211, 179, 45}, {166, 216, 15}, {190, 183, 15},
{11, 222, 93}, {235, 192, 74}, {21, 192, 74}, {247, 167, 45}, {28, 171, 45}, {10, 98, 15}, {80, 198, 15},
{97, 235, 15}, {49, 170, 15}, {10, 158, 15}, {225, 162, 15}, {190, 183, 15}, {49, 86, 15}, {80, 58, 15},
{97, 21, 15}, {227, 235, 93}, {0, 0, 100}, {11, 34, 93}, {227, 21, 93}, {21, 64, 74}, {235, 64, 74}, {202, 40, 74},
{28, 85, 45}, {67, 0, 74}, {89, 0, 45}, {36, 0, 93}, {0, 0, 100}, {11, 34, 93}, {54, 40, 74}, {21, 64, 74},
{202, 40, 74}, {184, 53, 45}, {0, 0, 100}, {227, 235, 93}, {189, 0, 74}, {202, 216, 74}, {227, 21, 93}, {0, 0, 100},
{60, 190, 45}, {82, 220, 45}, {89, 0, 45}, {28, 171, 45}, {28, 171, 45}, {247, 167, 45}, {211, 179, 45},
{184, 203, 45}, {60, 66, 45}, {28, 85, 45}, {82, 36, 45}, {28, 85, 45}, {89, 0, 45}, {247, 89, 45}, {211, 77, 45},
{184, 53, 45}, {49, 86, 15}, {10, 98, 15}, {82, 36, 45}, {97, 235, 15}, {97, 21, 15}, {60, 66, 45}, {28, 85, 45},
{169, 19, 45}, {190, 73, 15}, {166, 40, 15}, {169, 237, 45}, {184, 203, 45}
Vec3b D_E010ACD8[] = {
{ 36, 0, 93 }, { 54, -40, 74 }, { 67, 0, 74 }, { 82, -36, 45 }, { 89, 0, 45 },
{ 60, -66, 45 }, { 21, -64, 74 }, { 28, -85, 45 }, { 10, -98, 15 }, { 49, -86, 15 },
{ -90, -40, 15 }, { -87, -19, 45 }, { -99, 0, 15 }, { -72, -53, 45 }, { -87, 19, 45 },
{ -90, 40, 15 }, { -66, 73, 15 }, { -72, 53, 45 }, { -45, 77, 45 }, { -31, 94, 15 },
{ -9, 89, 45 }, { -72, 53, 45 }, { 11, -34, 93 }, { 0, 0, 100 }, { -54, -40, 74 },
{ -72, -53, 45 }, { -45, -77, 45 }, { -90, -40, 15 }, { -66, -73, 15 }, { 11, -34, 93 },
{ -21, -64, 74 }, { 21, -64, 74 }, { -9, -89, 45 }, { 28, -85, 45 }, { 10, 98, 15 },
{ 80, -58, 15 }, { 97, -21, 15 }, { 49, -86, 15 }, { 10, -98, 15 }, { -31, -94, 15 },
{ -66, -73, 15 }, { 49, 86, 15 }, { 80, 58, 15 }, { 97, 21, 15 }, { -29, -21, 93 },
{ 0, 0, 100 }, { 11, 34, 93 }, { -29, 21, 93 }, { 21, 64, 74 }, { -21, 64, 74 },
{ -54, 40, 74 }, { 28, 85, 45 }, { 67, 0, 74 }, { 89, 0, 45 }, { 36, 0, 93 },
{ 0, 0, 100 }, { 11, 34, 93 }, { 54, 40, 74 }, { 21, 64, 74 }, { -54, 40, 74 },
{ -72, 53, 45 }, { 0, 0, 100 }, { -29, -21, 93 }, { -67, 0, 74 }, { -54, -40, 74 },
{ -29, 21, 93 }, { 0, 0, 100 }, { 60, -66, 45 }, { 82, -36, 45 }, { 89, 0, 45 },
{ 28, -85, 45 }, { 28, -85, 45 }, { -9, -89, 45 }, { -45, -77, 45 }, { -72, -53, 45 },
{ 60, 66, 45 }, { 28, 85, 45 }, { 82, 36, 45 }, { 28, 85, 45 }, { 89, 0, 45 },
{ -9, 89, 45 }, { -45, 77, 45 }, { -72, 53, 45 }, { 49, 86, 15 }, { 10, 98, 15 },
{ 82, 36, 45 }, { 97, -21, 15 }, { 97, 21, 15 }, { 60, 66, 45 }, { 28, 85, 45 },
{ -87, 19, 45 }, { -66, 73, 15 }, { -90, 40, 15 }, { -87, -19, 45 }, { -72, -53, 45 },
};
Color_RGB8 D_E010ADF8[] = {
{208, 241, 0}, {220, 230, 22}, {211, 0, 22}, {208, 15, 0}, {220, 26, 22}, {227, 40, 0}, {220, 26, 22},
{242, 43, 22}, {0, 50, 0}, {14, 43, 22}, {8, 231, 43}, {14, 213, 22}, {36, 230, 22}, {26, 0, 43}, {0, 0, 50},
{0, 206, 0}, {29, 216, 0}, {45, 0, 22}, {29, 216, 0}, {36, 230, 22}, {14, 213, 22}, {48, 241, 0}, {45, 0, 22},
{0, 206, 0}, {14, 213, 22}, {242, 213, 22}, {227, 216, 0}, {220, 230, 22}, {29, 40, 0}, {36, 26, 22}, {48, 15, 0},
{14, 43, 22}, {45, 0, 22}, {0, 0, 50}, {8, 25, 43}, {235, 15, 43}, {14, 43, 22}, {26, 0, 43}, {45, 0, 22},
{0, 0, 50}, {8, 25, 43}, {235, 241, 43}, {0, 0, 50}, {220, 230, 22}, {8, 231, 43}, {0, 0, 50}, {235, 15, 43},
{235, 241, 43}, {220, 26, 22}, {242, 43, 22}, {220, 26, 22}, {29, 40, 0}, {0, 50, 0}, {36, 26, 22}, {48, 241, 0},
{48, 15, 0}, {14, 43, 22}, {242, 213, 22}, {208, 241, 0}, {227, 216, 0}, {14, 213, 22}, {211, 0, 22},
{220, 230, 22}, {227, 40, 0}, {208, 15, 0}, {0, 0, 0}
Vec3b D_E010ADF8[] = {
{ -48, -15, 0 }, { -36, -26, 22 }, { -45, 0, 22 }, { -48, 15, 0 }, { -36, 26, 22 },
{ -29, 40, 0 }, { -36, 26, 22 }, { -14, 43, 22 }, { 0, 50, 0 }, { 14, 43, 22 },
{ 8, -25, 43 }, { 14, -43, 22 }, { 36, -26, 22 }, { 26, 0, 43 }, { 0, 0, 50 },
{ 0, -50, 0 }, { 29, -40, 0 }, { 45, 0, 22 }, { 29, -40, 0 }, { 36, -26, 22 },
{ 14, -43, 22 }, { 48, -15, 0 }, { 45, 0, 22 }, { 0, -50, 0 }, { 14, -43, 22 },
{ -14, -43, 22 }, { -29, -40, 0 }, { -36, -26, 22 }, { 29, 40, 0 }, { 36, 26, 22 },
{ 48, 15, 0 }, { 14, 43, 22 }, { 45, 0, 22 }, { 0, 0, 50 }, { 8, 25, 43 },
{ -21, 15, 43 }, { 14, 43, 22 }, { 26, 0, 43 }, { 45, 0, 22 }, { 0, 0, 50 },
{ 8, 25, 43 }, { -21, -15, 43 }, { 0, 0, 50 }, { -36, -26, 22 }, { 8, -25, 43 },
{ 0, 0, 50 }, { -21, 15, 43 }, { -21, -15, 43 }, { -36, 26, 22 }, { -14, 43, 22 },
{ -36, 26, 22 }, { 29, 40, 0 }, { 0, 50, 0 }, { 36, 26, 22 }, { 48, -15, 0 },
{ 48, 15, 0 }, { 14, 43, 22 }, { -14, -43, 22 }, { -48, -15, 0 }, { -29, -40, 0 },
{ 14, -43, 22 }, { -45, 0, 22 }, { -36, -26, 22 }, { -29, 40, 0 }, { -48, 15, 0 },
{ 0, 0, 0 },
};
Color_RGB8 D_E010AEC0[] = {
{247, 105, 0}, {239, 87, 0}, {17, 87, 0}, {9, 105, 0}, {0, 122, 0}, {230, 69, 0}, {26, 69, 0}, {221, 52, 0},
{35, 52, 0}, {202, 49, 0}, {186, 255, 0}, {200, 241, 0}, {0, 200, 0}, {56, 241, 0}, {70, 255, 0}, {54, 49, 0},
{196, 222, 0}, {239, 191, 0}, {17, 191, 0}, {60, 222, 0}, {85, 13, 0}, {74, 46, 0}, {99, 27, 0}, {93, 43, 0},
{12, 33, 0}, {12, 22, 0}, {24, 22, 0}, {24, 33, 0}, {12, 10, 0}, {24, 10, 0}, {24, 45, 0}, {232, 33, 0},
{232, 22, 0}, {232, 45, 0}, {113, 40, 0}, {193, 203, 0}, {190, 183, 0}, {182, 46, 0}, {163, 43, 0}, {35, 182, 0},
{52, 173, 0}, {12, 45, 0}, {244, 22, 0}, {244, 33, 0}, {232, 10, 0}, {244, 10, 0}, {244, 45, 0}, {204, 173, 0},
{221, 182, 0}, {186, 164, 0}, {171, 13, 0}, {157, 27, 0}, {143, 40, 0}, {63, 203, 0}, {66, 183, 0}, {70, 164, 0}
Vec3b D_E010AEC0[] = {
{ -9, 105, 0 }, { -17, 87, 0 }, { 17, 87, 0 }, { 9, 105, 0 }, { 0, 122, 0 },
{ -26, 69, 0 }, { 26, 69, 0 }, { -35, 52, 0 }, { 35, 52, 0 }, { -54, 49, 0 },
{ -70, -1, 0 }, { -56, -15, 0 }, { 0, -56, 0 }, { 56, -15, 0 }, { 70, -1, 0 },
{ 54, 49, 0 }, { -60, -34, 0 }, { -17, -65, 0 }, { 17, -65, 0 }, { 60, -34, 0 },
{ 85, 13, 0 }, { 74, 46, 0 }, { 99, 27, 0 }, { 93, 43, 0 }, { 12, 33, 0 },
{ 12, 22, 0 }, { 24, 22, 0 }, { 24, 33, 0 }, { 12, 10, 0 }, { 24, 10, 0 },
{ 24, 45, 0 }, { -24, 33, 0 }, { -24, 22, 0 }, { -24, 45, 0 }, { 113, 40, 0 },
{ -63, -53, 0 }, { -66, -73, 0 }, { -74, 46, 0 }, { -93, 43, 0 }, { 35, -74, 0 },
{ 52, -83, 0 }, { 12, 45, 0 }, { -12, 22, 0 }, { -12, 33, 0 }, { -24, 10, 0 },
{ -12, 10, 0 }, { -12, 45, 0 }, { -52, -83, 0 }, { -35, -74, 0 }, { -70, -92, 0 },
{ -85, 13, 0 }, { -99, 27, 0 }, { -113, 40, 0 }, { 63, -53, 0 }, { 66, -73, 0 },
{ 70, -92, 0 },
};
FireworkRocketUnk D_E010AF68[] = {
@ -61,10 +79,10 @@ FireworkRocketUnk D_E010AF68[] = {
{D_E010AEC0, ARRAY_COUNT(D_E010AEC0)}
};
s32 D_E010AF80 = 0;
s32 D_E010AF84 = 0;
s32 firework_rocket_frame_counter = 0;
s32 firework_rocket_blur_alpha = 0;
EffectInstance* firework_rocket_main(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, s32 arg8) {
EffectInstance* firework_rocket_main(s32 variation, f32 centerX, f32 centerY, f32 centerZ, f32 velX, f32 velY, f32 velZ, f32 radius, s32 duration) {
EffectBlueprint bp;
EffectInstance* effect;
FireworkRocketFXData* data;
@ -83,38 +101,38 @@ EffectInstance* firework_rocket_main(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32
data = effect->data.fireworkRocket = shim_general_heap_malloc(numParts * sizeof(*data));
ASSERT(effect->data.fireworkRocket != NULL);
data->unk_00 = arg0;
data->unk_20 = 0;
if (arg8 <= 0) {
data->unk_1C = 1000;
data->variation = variation;
data->lifeTime = 0;
if (duration <= 0) {
data->timeLeft = 1000;
} else {
data->unk_1C = arg8 + 32;
data->timeLeft = duration + 32;
}
data->unk_4C = 0;
data->unk_30 = 255;
data->unk_04 = arg1;
data->unk_08 = arg2;
data->unk_0C = arg3;
data->unk_44 = 0;
data->unk_10 = arg4;
data->unk_14 = arg5;
data->unk_18 = arg6;
data->unk_48 = arg7;
data->unk_2C = 100;
data->unk_38 = 100;
data->unk_24 = 255;
data->unk_28 = 255;
data->isExploded = FALSE;
data->minBlurAlpha = 255;
data->pos.x = centerX;
data->pos.y = centerY;
data->pos.z = centerZ;
data->radius = 0;
data->velocity.x = velX;
data->velocity.y = velY;
data->velocity.z = velZ;
data->maxRadius = radius;
data->r = 255;
data->g = 255;
data->b = 100;
data->unk_34 = 255;
data->unk_38 = 100;
data->unk_3C = 150;
data->unk_40 = 255;
for (i = 0; i < 4; i++) {
data->unk_50[i] = data->unk_04;
data->unk_60[i] = data->unk_08 - 1000.0f;
data->unk_70[i] = data->unk_0C;
data->unk_80[i] = 0;
data->unk_90[i] = 0;
data->unk_A0[i] = 0;
data->rocketX[i] = data->pos.x;
data->rocketY[i] = data->pos.y - 1000.0f;
data->rocketZ[i] = data->pos.z;
data->rocketVelocityX[i] = 0;
data->rocketVelocityY[i] = 0;
data->rocketVelocityZ[i] = 0;
}
return effect;
@ -126,66 +144,66 @@ void firework_rocket_init(EffectInstance* effect) {
void firework_rocket_update(EffectInstance* effect) {
FireworkRocketFXData* data = effect->data.fireworkRocket;
f32 factor;
s32 unk_20;
s32 lifeTime;
s32 i;
if (effect->flags & 0x10) {
effect->flags &= ~0x10;
data->unk_1C = 16;
if (effect->flags & EFFECT_INSTANCE_FLAGS_10) {
effect->flags &= ~EFFECT_INSTANCE_FLAGS_10;
data->timeLeft = 16;
}
if (data->unk_1C < 1000) {
data->unk_1C--;
if (data->timeLeft < 1000) {
data->timeLeft--;
}
data->unk_20++;
data->lifeTime++;
if (data->unk_1C < 0) {
if (data->timeLeft < 0) {
shim_remove_effect(effect);
return;
}
unk_20 = data->unk_20;
lifeTime = data->lifeTime;
if (data->unk_1C < 32) {
data->unk_30 = data->unk_1C * 8;
if (data->timeLeft < 32) {
data->minBlurAlpha = data->timeLeft * 8;
}
if (data->unk_4C == 1) {
if (data->isExploded == TRUE) {
factor = 0.95f;
data->unk_04 += data->unk_10;
data->unk_08 += data->unk_14;
data->unk_0C += data->unk_18;
data->unk_10 *= factor;
data->unk_14 *= factor;
data->unk_18 *= factor;
data->unk_44 += (data->unk_48 - data->unk_44) * 0.11;
data->unk_14 -= 0.15;
data->pos.x += data->velocity.x;
data->pos.y += data->velocity.y;
data->pos.z += data->velocity.z;
data->velocity.x *= factor;
data->velocity.y *= factor;
data->velocity.z *= factor;
data->radius += (data->maxRadius - data->radius) * 0.11;
data->velocity.y -= 0.15;
return;
}
i = unk_20 & 3;
data->unk_50[i] = data->unk_04 - data->unk_10 * (32 - unk_20);
data->unk_60[i] = data->unk_08 - data->unk_14 * (32 - unk_20)
- (80.0f - shim_sin_deg((s32) (unk_20 * 90) >> 5) * 80.0f);
data->unk_70[i] = data->unk_0C - data->unk_18 * (32 - unk_20);
data->unk_80[i] = (shim_rand_int(10) - 5) * 0.1f;
data->unk_90[i] = (shim_rand_int(10) - 5) * 0.1f;
data->unk_A0[i] = (shim_rand_int(10) - 5) * 0.1f;
i = lifeTime & 3;
data->rocketX[i] = data->pos.x - data->velocity.x * (32 - lifeTime);
data->rocketY[i] = data->pos.y - data->velocity.y * (32 - lifeTime)
- (80.0f - shim_sin_deg((s32)(lifeTime * 90) >> 5) * 80.0f);
data->rocketZ[i] = data->pos.z - data->velocity.z * (32 - lifeTime);
data->rocketVelocityX[i] = (shim_rand_int(10) - 5) * 0.1f;
data->rocketVelocityY[i] = (shim_rand_int(10) - 5) * 0.1f;
data->rocketVelocityZ[i] = (shim_rand_int(10) - 5) * 0.1f;
for (i = 0; i < 4; i++) {
data->unk_50[i] += data->unk_80[i];
data->unk_60[i] += data->unk_90[i];
data->unk_70[i] += data->unk_A0[i];
data->unk_90[i] -= 0.15;
if (unk_20 >= 27) {
data->unk_60[i] = -1000.0f;
data->rocketX[i] += data->rocketVelocityX[i];
data->rocketY[i] += data->rocketVelocityY[i];
data->rocketZ[i] += data->rocketVelocityZ[i];
data->rocketVelocityY[i] -= 0.15;
if (lifeTime >= 27) {
data->rocketY[i] = -1000.0f;
}
}
if (unk_20 >= 32) {
data->unk_4C = 1;
data->unk_20 = 1;
if (lifeTime >= 32) {
data->isExploded = TRUE;
data->lifeTime = 1;
}
}
@ -202,4 +220,120 @@ void firework_rocket_render(EffectInstance* effect) {
retTask->renderMode |= RENDER_TASK_FLAG_2;
}
INCLUDE_ASM(s32, "effects/firework_rocket", firework_rocket_appendGfx);
void firework_rocket_appendGfx(void* effect) {
FireworkRocketFXData* data = ((EffectInstance*)effect)->data.fireworkRocket;
Camera* camera = &gCameras[gCurrentCameraID];
s32 minBlurAlpha = data->minBlurAlpha;
s32 variation = data->variation;
f32 mtx_0_0, mtx_0_1, mtx_0_2, mtx_0_3;
f32 mtx_1_0, mtx_1_1, mtx_1_2, mtx_1_3;
f32 mtx_2_0, mtx_2_1, mtx_2_2, mtx_2_3;
f32 mtx_3_0, mtx_3_1, mtx_3_2, mtx_3_3;
f32 sinTheta, cosTheta;
f32 centerX, centerY, centerZ;
f32 negYaw;
f32 x, y, z;
f32 outX, outY, outZ, outS;
f32 radius;
s32 isExploded;
s32 numSparks;
Vec3b* sparkDir;
s32 i;
negYaw = -camera->currentYaw;
sinTheta = shim_sin_deg(negYaw);
cosTheta = shim_cos_deg(negYaw);
isExploded = data->isExploded;
if (firework_rocket_frame_counter != gGameStatusPtr->frameCounter) {
// draw previous frame to create motion blur effect
shim_func_80138D88(10, 10, SCREEN_WIDTH - 10, SCREEN_HEIGHT - 10, firework_rocket_blur_alpha * 0.8);
firework_rocket_frame_counter = gGameStatusPtr->frameCounter;
firework_rocket_blur_alpha = 0;
}
if (firework_rocket_blur_alpha < minBlurAlpha) {
firework_rocket_blur_alpha = minBlurAlpha;
}
gDPPipeSync(gMasterGfxPos++);
gSPSegment(gMasterGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->graphics->data));
mtx_0_0 = camera->perspectiveMatrix[0][0];
mtx_0_1 = camera->perspectiveMatrix[0][1];
mtx_0_2 = camera->perspectiveMatrix[0][2];
mtx_0_3 = camera->perspectiveMatrix[0][3];
mtx_1_0 = camera->perspectiveMatrix[1][0];
mtx_1_1 = camera->perspectiveMatrix[1][1];
mtx_1_2 = camera->perspectiveMatrix[1][2];
mtx_1_3 = camera->perspectiveMatrix[1][3];
mtx_2_0 = camera->perspectiveMatrix[2][0];
mtx_2_1 = camera->perspectiveMatrix[2][1];
mtx_2_2 = camera->perspectiveMatrix[2][2];
mtx_2_3 = camera->perspectiveMatrix[2][3];
mtx_3_0 = camera->perspectiveMatrix[3][0];
mtx_3_1 = camera->perspectiveMatrix[3][1];
mtx_3_2 = camera->perspectiveMatrix[3][2];
mtx_3_3 = camera->perspectiveMatrix[3][3];
gSPDisplayList(gMasterGfxPos++, D_E010ACCC[variation]);
centerX = data->pos.x;
centerY = data->pos.y;
centerZ = data->pos.z;
radius = data->radius;
gDPSetPrimColor(gMasterGfxPos++, 0, 0, data->r, data->g, data->b, minBlurAlpha);
gDPSetEnvColor(gMasterGfxPos++, data->r, data->g, data->b, 0);
if (isExploded == TRUE) {
sparkDir = D_E010AF68[variation].sparks;
numSparks = D_E010AF68[variation].num;
} else {
sparkDir = NULL;
numSparks = 4;
}
for (i = 0; i < numSparks; i++, sparkDir++) {
if (isExploded == TRUE) {
// create blinking effect
if (shim_rand_int(16) < 6) {
continue;
}
x = (sparkDir->x * cosTheta + sparkDir->z * sinTheta) * radius + centerX;
y = sparkDir->y * radius + centerY;
z = (-sparkDir->x * sinTheta + sparkDir->z * cosTheta) * radius + centerZ;
} else {
x = data->rocketX[i];
y = data->rocketY[i];
z = data->rocketZ[i];
}
// convert world coords to screen coords
outX = mtx_0_0 * x + mtx_1_0 * y + mtx_2_0 * z + mtx_3_0;
outY = mtx_0_1 * x + mtx_1_1 * y + mtx_2_1 * z + mtx_3_1;
outZ = mtx_0_2 * x + mtx_1_2 * y + mtx_2_2 * z + mtx_3_2;
outS = mtx_0_3 * x + mtx_1_3 * y + mtx_2_3 * z + mtx_3_3;
if (outS != 0.0f) {
outS = 1.0f / outS;
x = outX * outS;
y = -outY * outS;
z = outZ * outS;
if (z <= -1.0f || x <= -1.0f || x >= 1.0f || y <= -1.0f || y >= 1.0f) {
continue;
}
z = 4.0f; // required to match
x = (x + 1.0f) * camera->viewportW * 0.5;
x += camera->viewportStartX;
x *= 4.0f;
y = (y + 1.0f) * camera->viewportH * 0.5;
y += camera->viewportStartY;
y *= 4.0f;
gSPScisTextureRectangle(gMasterGfxPos++,
x, y, x + 8.0f, y + 8.0f,
G_TX_RENDERTILE, 4 << 5, 4 << 5, 16 << 10, 16 << 10);
}
}
}

View File

@ -825,7 +825,54 @@ s32 func_802DDA84(void) {
return 0;
}
INCLUDE_ASM(void, "sprite", spr_update_player_sprite, s32 arg0, s32 arg1, f32 arg2);
s32 spr_update_player_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
u32* spriteData;
SpriteComponent** compList;
SpriteComponent* component;
SpriteAnimComponent** animList;
SpriteRasterCacheEntry** rasterList;
s32 spriteId = ((animID >> 16) & 0xFF) - 1;
s32 i = spriteInstanceID & 0xFF;
s32 animIndex = animID & 0xFF;
D_802DF57C = spriteId;
if (spr_playerCurrentAnimInfo[i].componentList == NULL) {
compList = spr_allocate_components(spr_playerMaxComponents);
spr_playerCurrentAnimInfo[i].componentList = compList;
while (*compList != PTR_LIST_END) {
component = *compList;
component->unk_4C = func_8013A704(1);
compList++;
}
}
spriteData = (u32*)spr_playerSprites[spriteId];
compList = spr_playerCurrentAnimInfo[i].componentList;
if (spriteData == NULL) {
return 0;
}
rasterList = (SpriteRasterCacheEntry**)*spriteData;
spriteData += 4 + animIndex;
animList = (SpriteAnimComponent**)*spriteData;
spr_set_anim_timescale(timeScale);
if ((spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) ||
(animID & ~0x01000000) != (spr_playerCurrentAnimInfo[i].animID & ~0x01000000))
{
spr_init_anim_state(compList, animList);
spr_playerCurrentAnimInfo[i].notifyValue = 0;
}
spr_playerCurrentAnimInfo[i].animID = animID;
if (!(spriteInstanceID & DRAW_SPRITE_OVERRIDE_YAW)) {
spr_playerCurrentAnimInfo[i].notifyValue = spr_component_update(spr_playerCurrentAnimInfo[i].notifyValue,
compList, animList, rasterList, 0);
}
return spr_playerCurrentAnimInfo[i].notifyValue;
}
s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, u16** paletteList, Matrix4f mtx) {
s32 i = spriteInstanceID & 0xFF;
@ -1026,8 +1073,6 @@ s32 spr_load_npc_sprite(s32 animID, u32* extraAnimList) {
return listIndex;
}
// animList being odd
#ifdef NON_MATCHING
s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
u32* spriteData;
SpriteComponent** compList;
@ -1039,13 +1084,11 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
s32 animIndex = animID & 0xFF;
compList = SpriteInstances[i].componentList;
spriteData = SpriteInstances[i].spriteData;
spriteData = (u32*)SpriteInstances[i].spriteData;
rasterList = *spriteData++;
spriteData++;
spriteData++;
spriteData++;
animList = spriteData[animIndex];
rasterList = (SpriteRasterCacheEntry**)*spriteData;
spriteData += 4 + animIndex;
animList = (SpriteAnimComponent**)*spriteData;
palID = (animID >> 8) & 0xFF;
spr_set_anim_timescale(timeScale);
@ -1060,9 +1103,6 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) {
}
return SpriteInstances[i].notifyValue;
}
#else
INCLUDE_ASM(s32, "sprite", spr_update_sprite, s32 arg0, s32 arg1, f32 arg2);
#endif
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR* paletteList, Matrix4f mtx) {
s32 i = spriteInstanceID & 0xFF;
@ -1216,51 +1256,47 @@ void func_802DE894(s32 spriteIdx, s32 foldType, s32 foldArg0, s32 foldArg1, s32
func_802DE780(spriteIdx, -1, foldType, foldArg0, foldArg1, foldArg2, foldArg3, foldArg4);
}
// animList issue
#ifdef NON_MATCHING
s32 func_802DE8DC(s32 spriteIdx, s32 compListIdx, s32* outX, s32* outY, s32* outZ) {
SpriteInstance* sprite = &SpriteInstances[spriteIdx];
SpriteAnimComponent** animList;
SpriteComponent** compList;
SpriteAnimComponent** animCompList;
SpriteAnimComponent* anim;
SpriteComponent** compList;
SpriteComponent* comp;
u8 animID;
s32 i;
u32* spriteData;
if (sprite->componentList == NULL) {
return spriteIdx * 20;
return;
}
animID = sprite->currentAnimID;
if (animID == 0xFF) {
return 0xFF;
}
animList = sprite->spriteData->animListStart[animID];
compList = sprite->componentList;
i = 0;
while (*compList != PTR_LIST_END) {
if (i == compListIdx) {
do {
anim = *animList;
if (animID != 255) {
spriteData = (u32*)sprite->spriteData;
spriteData += 4 + animID;
animCompList = (SpriteAnimComponent**)*spriteData;
compList = sprite->componentList;
i = 0;
while (*compList != PTR_LIST_END) {
if (i == compListIdx) {
anim = *animCompList;
comp = *compList;
} while (0); // TODO required to match
*outX = comp->compPos.x + anim->compOffset.x;
*outY = comp->compPos.y + anim->compOffset.y;
*outZ = comp->compPos.z + anim->compOffset.z;
return 0;
}
i++;
compList++;
if (*animList != PTR_LIST_END) {
animList++;
*outX = comp->compPos.x + anim->compOffset.x;
*outY = comp->compPos.y + anim->compOffset.y;
*outZ = comp->compPos.z + anim->compOffset.z;
return 0;
}
i++;
compList++;
if (*animCompList != PTR_LIST_END) {
animCompList++;
}
}
} else {
return;
}
return -1;
}
#else
INCLUDE_ASM(s32, "sprite", func_802DE8DC);
#endif
s32 spr_get_npc_raster_info(SpriteRasterInfo* out, s32 npcSpriteID, s32 rasterIndex) {
SpriteAnimData* sprite = NpcSpriteData[npcSpriteID];

View File

@ -13,7 +13,7 @@ API_CALLABLE(N(ChooseFireworkColors)) {
colG1 = colG2 = rand_int(inv);
inv = 255 - colG1;
colB1 = colB2 = rand_int(inv - colR1);
colR1 += rand_int(128);
colG1 += rand_int(128);
colB1 += rand_int(128);
@ -40,9 +40,9 @@ API_CALLABLE(N(ChooseFireworkColors)) {
colB2 = 255;
}
effect->data.fireworkRocket->unk_24 = colR1;
effect->data.fireworkRocket->unk_28 = colG1;
effect->data.fireworkRocket->unk_2C = colB1;
effect->data.fireworkRocket->r = colR1;
effect->data.fireworkRocket->g = colG1;
effect->data.fireworkRocket->b = colB1;
effect->data.fireworkRocket->unk_34 = colR2;
effect->data.fireworkRocket->unk_38 = colG2;
effect->data.fireworkRocket->unk_3C = colB2;

View File

@ -1,206 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel spr_load_npc_extra_anims
/* 1020FC 802DF00C 27BDFE30 */ addiu $sp, $sp, -0x1d0
/* 102100 802DF010 AFB601C0 */ sw $s6, 0x1c0($sp)
/* 102104 802DF014 0080B02D */ daddu $s6, $a0, $zero
/* 102108 802DF018 AFB101AC */ sw $s1, 0x1ac($sp)
/* 10210C 802DF01C 24110063 */ addiu $s1, $zero, 0x63
/* 102110 802DF020 27A2019C */ addiu $v0, $sp, 0x19c
/* 102114 802DF024 AFBF01C8 */ sw $ra, 0x1c8($sp)
/* 102118 802DF028 AFB701C4 */ sw $s7, 0x1c4($sp)
/* 10211C 802DF02C AFB501BC */ sw $s5, 0x1bc($sp)
/* 102120 802DF030 AFB401B8 */ sw $s4, 0x1b8($sp)
/* 102124 802DF034 AFB301B4 */ sw $s3, 0x1b4($sp)
/* 102128 802DF038 AFB201B0 */ sw $s2, 0x1b0($sp)
/* 10212C 802DF03C AFB001A8 */ sw $s0, 0x1a8($sp)
.L802DF040:
/* 102130 802DF040 AC400000 */ sw $zero, ($v0)
/* 102134 802DF044 2631FFFF */ addiu $s1, $s1, -1
/* 102138 802DF048 0621FFFD */ bgez $s1, .L802DF040
/* 10213C 802DF04C 2442FFFC */ addiu $v0, $v0, -4
/* 102140 802DF050 8CA30000 */ lw $v1, ($a1)
/* 102144 802DF054 2402FFFF */ addiu $v0, $zero, -1
/* 102148 802DF058 1062004B */ beq $v1, $v0, .L802DF188
/* 10214C 802DF05C 24A50004 */ addiu $a1, $a1, 4
/* 102150 802DF060 0040602D */ daddu $t4, $v0, $zero
/* 102154 802DF064 24124000 */ addiu $s2, $zero, 0x4000
/* 102158 802DF068 24111000 */ addiu $s1, $zero, 0x1000
/* 10215C 802DF06C 24102000 */ addiu $s0, $zero, 0x2000
/* 102160 802DF070 240F3000 */ addiu $t7, $zero, 0x3000
/* 102164 802DF074 240E6000 */ addiu $t6, $zero, 0x6000
/* 102168 802DF078 240D5000 */ addiu $t5, $zero, 0x5000
.L802DF07C:
/* 10216C 802DF07C 306200FF */ andi $v0, $v1, 0xff
/* 102170 802DF080 00021080 */ sll $v0, $v0, 2
/* 102174 802DF084 02C21021 */ addu $v0, $s6, $v0
/* 102178 802DF088 080B7C5C */ j .L802DF170
/* 10217C 802DF08C 8C480010 */ lw $t0, 0x10($v0)
.L802DF090:
/* 102180 802DF090 94620004 */ lhu $v0, 4($v1)
/* 102184 802DF094 8C660000 */ lw $a2, ($v1)
/* 102188 802DF098 00021400 */ sll $v0, $v0, 0x10
/* 10218C 802DF09C 00021C03 */ sra $v1, $v0, 0x10
/* 102190 802DF0A0 000217C2 */ srl $v0, $v0, 0x1f
/* 102194 802DF0A4 00621821 */ addu $v1, $v1, $v0
/* 102198 802DF0A8 00031843 */ sra $v1, $v1, 1
/* 10219C 802DF0AC 18600030 */ blez $v1, .L802DF170
/* 1021A0 802DF0B0 00000000 */ nop
/* 1021A4 802DF0B4 240B7000 */ addiu $t3, $zero, 0x7000
/* 1021A8 802DF0B8 27A90010 */ addiu $t1, $sp, 0x10
/* 1021AC 802DF0BC 240A0001 */ addiu $t2, $zero, 1
.L802DF0C0:
/* 1021B0 802DF0C0 94C70000 */ lhu $a3, ($a2)
/* 1021B4 802DF0C4 24C60002 */ addiu $a2, $a2, 2
/* 1021B8 802DF0C8 30E4F000 */ andi $a0, $a3, 0xf000
/* 1021BC 802DF0CC 10920022 */ beq $a0, $s2, .L802DF158
/* 1021C0 802DF0D0 2463FFFF */ addiu $v1, $v1, -1
/* 1021C4 802DF0D4 28824001 */ slti $v0, $a0, 0x4001
/* 1021C8 802DF0D8 1040000B */ beqz $v0, .L802DF108
/* 1021CC 802DF0DC 00000000 */ nop
/* 1021D0 802DF0E0 10910015 */ beq $a0, $s1, .L802DF138
/* 1021D4 802DF0E4 28821001 */ slti $v0, $a0, 0x1001
/* 1021D8 802DF0E8 1440001F */ bnez $v0, .L802DF168
/* 1021DC 802DF0EC 00000000 */ nop
/* 1021E0 802DF0F0 1090001D */ beq $a0, $s0, .L802DF168
/* 1021E4 802DF0F4 00000000 */ nop
/* 1021E8 802DF0F8 508F0016 */ beql $a0, $t7, .L802DF154
/* 1021EC 802DF0FC 24C60002 */ addiu $a2, $a2, 2
/* 1021F0 802DF100 080B7C5A */ j .L802DF168
/* 1021F4 802DF104 00000000 */ nop
.L802DF108:
/* 1021F8 802DF108 108E0017 */ beq $a0, $t6, .L802DF168
/* 1021FC 802DF10C 28826001 */ slti $v0, $a0, 0x6001
/* 102200 802DF110 10400005 */ beqz $v0, .L802DF128
/* 102204 802DF114 00000000 */ nop
/* 102208 802DF118 508D0012 */ beql $a0, $t5, .L802DF164
/* 10220C 802DF11C 24C60002 */ addiu $a2, $a2, 2
/* 102210 802DF120 080B7C5A */ j .L802DF168
/* 102214 802DF124 00000000 */ nop
.L802DF128:
/* 102218 802DF128 508B000E */ beql $a0, $t3, .L802DF164
/* 10221C 802DF12C 24C60002 */ addiu $a2, $a2, 2
/* 102220 802DF130 080B7C5A */ j .L802DF168
/* 102224 802DF134 00000000 */ nop
.L802DF138:
/* 102228 802DF138 30E400FF */ andi $a0, $a3, 0xff
/* 10222C 802DF13C 28820064 */ slti $v0, $a0, 0x64
/* 102230 802DF140 10400009 */ beqz $v0, .L802DF168
/* 102234 802DF144 00041080 */ sll $v0, $a0, 2
/* 102238 802DF148 01221021 */ addu $v0, $t1, $v0
/* 10223C 802DF14C 080B7C5A */ j .L802DF168
/* 102240 802DF150 AC4A0000 */ sw $t2, ($v0)
.L802DF154:
/* 102244 802DF154 2463FFFF */ addiu $v1, $v1, -1
.L802DF158:
/* 102248 802DF158 24C60002 */ addiu $a2, $a2, 2
/* 10224C 802DF15C 2463FFFF */ addiu $v1, $v1, -1
/* 102250 802DF160 24C60002 */ addiu $a2, $a2, 2
.L802DF164:
/* 102254 802DF164 2463FFFF */ addiu $v1, $v1, -1
.L802DF168:
/* 102258 802DF168 1C60FFD5 */ bgtz $v1, .L802DF0C0
/* 10225C 802DF16C 00000000 */ nop
.L802DF170:
/* 102260 802DF170 8D030000 */ lw $v1, ($t0)
/* 102264 802DF174 146CFFC6 */ bne $v1, $t4, .L802DF090
/* 102268 802DF178 25080004 */ addiu $t0, $t0, 4
/* 10226C 802DF17C 8CA30000 */ lw $v1, ($a1)
/* 102270 802DF180 146CFFBE */ bne $v1, $t4, .L802DF07C
/* 102274 802DF184 24A50004 */ addiu $a1, $a1, 4
.L802DF188:
/* 102278 802DF188 0000882D */ daddu $s1, $zero, $zero
/* 10227C 802DF18C 8ED30000 */ lw $s3, ($s6)
/* 102280 802DF190 2417FFFF */ addiu $s7, $zero, -1
/* 102284 802DF194 8E650000 */ lw $a1, ($s3)
/* 102288 802DF198 27B40010 */ addiu $s4, $sp, 0x10
/* 10228C 802DF19C 8CB20000 */ lw $s2, ($a1)
.L802DF1A0:
/* 102290 802DF1A0 8E650000 */ lw $a1, ($s3)
/* 102294 802DF1A4 50B70019 */ beql $a1, $s7, .L802DF20C
/* 102298 802DF1A8 0240302D */ daddu $a2, $s2, $zero
/* 10229C 802DF1AC 8E820000 */ lw $v0, ($s4)
/* 1022A0 802DF1B0 50400011 */ beql $v0, $zero, .L802DF1F8
/* 1022A4 802DF1B4 26730004 */ addiu $s3, $s3, 4
/* 1022A8 802DF1B8 90A30004 */ lbu $v1, 4($a1)
/* 1022AC 802DF1BC 90A20005 */ lbu $v0, 5($a1)
/* 1022B0 802DF1C0 00620018 */ mult $v1, $v0
/* 1022B4 802DF1C4 8CA40000 */ lw $a0, ($a1)
/* 1022B8 802DF1C8 0000C012 */ mflo $t8
/* 1022BC 802DF1CC 00188043 */ sra $s0, $t8, 1
/* 1022C0 802DF1D0 0250A821 */ addu $s5, $s2, $s0
/* 1022C4 802DF1D4 12440005 */ beq $s2, $a0, .L802DF1EC
/* 1022C8 802DF1D8 26100008 */ addiu $s0, $s0, 8
/* 1022CC 802DF1DC ACB20000 */ sw $s2, ($a1)
/* 1022D0 802DF1E0 0240282D */ daddu $a1, $s2, $zero
/* 1022D4 802DF1E4 0C019194 */ jal bcopy
/* 1022D8 802DF1E8 0200302D */ daddu $a2, $s0, $zero
.L802DF1EC:
/* 1022DC 802DF1EC AE750000 */ sw $s5, ($s3)
/* 1022E0 802DF1F0 02509021 */ addu $s2, $s2, $s0
/* 1022E4 802DF1F4 26730004 */ addiu $s3, $s3, 4
.L802DF1F8:
/* 1022E8 802DF1F8 26310001 */ addiu $s1, $s1, 1
/* 1022EC 802DF1FC 2A220064 */ slti $v0, $s1, 0x64
/* 1022F0 802DF200 1440FFE7 */ bnez $v0, .L802DF1A0
/* 1022F4 802DF204 26940004 */ addiu $s4, $s4, 4
/* 1022F8 802DF208 0240302D */ daddu $a2, $s2, $zero
.L802DF20C:
/* 1022FC 802DF20C 00111080 */ sll $v0, $s1, 2
/* 102300 802DF210 0000882D */ daddu $s1, $zero, $zero
/* 102304 802DF214 27A40010 */ addiu $a0, $sp, 0x10
/* 102308 802DF218 00821021 */ addu $v0, $a0, $v0
/* 10230C 802DF21C 24030001 */ addiu $v1, $zero, 1
/* 102310 802DF220 AC430000 */ sw $v1, ($v0)
/* 102314 802DF224 8ED30000 */ lw $s3, ($s6)
/* 102318 802DF228 2407FFFF */ addiu $a3, $zero, -1
/* 10231C 802DF22C AEC60000 */ sw $a2, ($s6)
.L802DF230:
/* 102320 802DF230 8E650000 */ lw $a1, ($s3)
/* 102324 802DF234 8C820000 */ lw $v0, ($a0)
/* 102328 802DF238 10400003 */ beqz $v0, .L802DF248
/* 10232C 802DF23C 26730004 */ addiu $s3, $s3, 4
/* 102330 802DF240 080B7C93 */ j .L802DF24C
/* 102334 802DF244 ACC50000 */ sw $a1, ($a2)
.L802DF248:
/* 102338 802DF248 ACD50000 */ sw $s5, ($a2)
.L802DF24C:
/* 10233C 802DF24C 10A70005 */ beq $a1, $a3, .L802DF264
/* 102340 802DF250 24C60004 */ addiu $a2, $a2, 4
/* 102344 802DF254 26310001 */ addiu $s1, $s1, 1
/* 102348 802DF258 2A220064 */ slti $v0, $s1, 0x64
/* 10234C 802DF25C 1440FFF4 */ bnez $v0, .L802DF230
/* 102350 802DF260 24840004 */ addiu $a0, $a0, 4
.L802DF264:
/* 102354 802DF264 0000882D */ daddu $s1, $zero, $zero
/* 102358 802DF268 8EC30004 */ lw $v1, 4($s6)
/* 10235C 802DF26C 2404FFFF */ addiu $a0, $zero, -1
/* 102360 802DF270 AEC60004 */ sw $a2, 4($s6)
.L802DF274:
/* 102364 802DF274 8C650000 */ lw $a1, ($v1)
/* 102368 802DF278 24630004 */ addiu $v1, $v1, 4
/* 10236C 802DF27C ACC50000 */ sw $a1, ($a2)
/* 102370 802DF280 10A40005 */ beq $a1, $a0, .L802DF298
/* 102374 802DF284 24C60004 */ addiu $a2, $a2, 4
/* 102378 802DF288 26310001 */ addiu $s1, $s1, 1
/* 10237C 802DF28C 2A220064 */ slti $v0, $s1, 0x64
/* 102380 802DF290 1440FFF8 */ bnez $v0, .L802DF274
/* 102384 802DF294 00000000 */ nop
.L802DF298:
/* 102388 802DF298 3C048035 */ lui $a0, %hi(gSpriteHeapPtr)
/* 10238C 802DF29C 2484F800 */ addiu $a0, $a0, %lo(gSpriteHeapPtr)
/* 102390 802DF2A0 02C0282D */ daddu $a1, $s6, $zero
/* 102394 802DF2A4 0C00A4B1 */ jal _heap_realloc
/* 102398 802DF2A8 00C53023 */ subu $a2, $a2, $a1
/* 10239C 802DF2AC 8FBF01C8 */ lw $ra, 0x1c8($sp)
/* 1023A0 802DF2B0 8FB701C4 */ lw $s7, 0x1c4($sp)
/* 1023A4 802DF2B4 8FB601C0 */ lw $s6, 0x1c0($sp)
/* 1023A8 802DF2B8 8FB501BC */ lw $s5, 0x1bc($sp)
/* 1023AC 802DF2BC 8FB401B8 */ lw $s4, 0x1b8($sp)
/* 1023B0 802DF2C0 8FB301B4 */ lw $s3, 0x1b4($sp)
/* 1023B4 802DF2C4 8FB201B0 */ lw $s2, 0x1b0($sp)
/* 1023B8 802DF2C8 8FB101AC */ lw $s1, 0x1ac($sp)
/* 1023BC 802DF2CC 8FB001A8 */ lw $s0, 0x1a8($sp)
/* 1023C0 802DF2D0 03E00008 */ jr $ra
/* 1023C4 802DF2D4 27BD01D0 */ addiu $sp, $sp, 0x1d0

View File

@ -1,163 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel spr_load_sprite
/* 101BFC 802DEB0C 27BDFFD0 */ addiu $sp, $sp, -0x30
/* 101C00 802DEB10 AFB50024 */ sw $s5, 0x24($sp)
/* 101C04 802DEB14 0080A82D */ daddu $s5, $a0, $zero
/* 101C08 802DEB18 AFB40020 */ sw $s4, 0x20($sp)
/* 101C0C 802DEB1C 00A0A02D */ daddu $s4, $a1, $zero
/* 101C10 802DEB20 AFB60028 */ sw $s6, 0x28($sp)
/* 101C14 802DEB24 00C0B02D */ daddu $s6, $a2, $zero
/* 101C18 802DEB28 AFBF002C */ sw $ra, 0x2c($sp)
/* 101C1C 802DEB2C AFB3001C */ sw $s3, 0x1c($sp)
/* 101C20 802DEB30 AFB20018 */ sw $s2, 0x18($sp)
/* 101C24 802DEB34 AFB10014 */ sw $s1, 0x14($sp)
/* 101C28 802DEB38 12800005 */ beqz $s4, .L802DEB50
/* 101C2C 802DEB3C AFB00010 */ sw $s0, 0x10($sp)
/* 101C30 802DEB40 3C13802E */ lui $s3, %hi(D_802E0C64)
/* 101C34 802DEB44 8E730C64 */ lw $s3, %lo(D_802E0C64)($s3)
/* 101C38 802DEB48 080B7AD7 */ j .L802DEB5C
/* 101C3C 802DEB4C 00152080 */ sll $a0, $s5, 2
.L802DEB50:
/* 101C40 802DEB50 3C13802E */ lui $s3, %hi(D_802E0C68)
/* 101C44 802DEB54 8E730C68 */ lw $s3, %lo(D_802E0C68)($s3)
/* 101C48 802DEB58 00152080 */ sll $a0, $s5, 2
.L802DEB5C:
/* 101C4C 802DEB5C 02642021 */ addu $a0, $s3, $a0
/* 101C50 802DEB60 3C11802E */ lui $s1, %hi(D_802DFEB0)
/* 101C54 802DEB64 2631FEB0 */ addiu $s1, $s1, %lo(D_802DFEB0)
/* 101C58 802DEB68 0220282D */ daddu $a1, $s1, $zero
/* 101C5C 802DEB6C 0C017D24 */ jal nuPiReadRom
/* 101C60 802DEB70 24060008 */ addiu $a2, $zero, 8
/* 101C64 802DEB74 8E300004 */ lw $s0, 4($s1)
/* 101C68 802DEB78 8E220000 */ lw $v0, ($s1)
/* 101C6C 802DEB7C 02028023 */ subu $s0, $s0, $v0
/* 101C70 802DEB80 26100007 */ addiu $s0, $s0, 7
/* 101C74 802DEB84 2402FFF8 */ addiu $v0, $zero, -8
/* 101C78 802DEB88 02028024 */ and $s0, $s0, $v0
/* 101C7C 802DEB8C 0C00AB0A */ jal general_heap_malloc
/* 101C80 802DEB90 0200202D */ daddu $a0, $s0, $zero
/* 101C84 802DEB94 0040902D */ daddu $s2, $v0, $zero
/* 101C88 802DEB98 0240282D */ daddu $a1, $s2, $zero
/* 101C8C 802DEB9C 8E240000 */ lw $a0, ($s1)
/* 101C90 802DEBA0 0200302D */ daddu $a2, $s0, $zero
/* 101C94 802DEBA4 0C017D24 */ jal nuPiReadRom
/* 101C98 802DEBA8 02642021 */ addu $a0, $s3, $a0
/* 101C9C 802DEBAC 12C00008 */ beqz $s6, .L802DEBD0
/* 101CA0 802DEBB0 26450004 */ addiu $a1, $s2, 4
/* 101CA4 802DEBB4 8CA50000 */ lw $a1, ($a1)
/* 101CA8 802DEBB8 3C048035 */ lui $a0, %hi(gSpriteHeapPtr)
/* 101CAC 802DEBBC 2484F800 */ addiu $a0, $a0, %lo(gSpriteHeapPtr)
/* 101CB0 802DEBC0 0C00A459 */ jal _heap_malloc_tail
/* 101CB4 802DEBC4 00000000 */ nop
/* 101CB8 802DEBC8 080B7AFA */ j .L802DEBE8
/* 101CBC 802DEBCC 0040882D */ daddu $s1, $v0, $zero
.L802DEBD0:
/* 101CC0 802DEBD0 8CA50000 */ lw $a1, ($a1)
/* 101CC4 802DEBD4 3C048035 */ lui $a0, %hi(gSpriteHeapPtr)
/* 101CC8 802DEBD8 2484F800 */ addiu $a0, $a0, %lo(gSpriteHeapPtr)
/* 101CCC 802DEBDC 0C00A41B */ jal _heap_malloc
/* 101CD0 802DEBE0 00000000 */ nop
/* 101CD4 802DEBE4 0040882D */ daddu $s1, $v0, $zero
.L802DEBE8:
/* 101CD8 802DEBE8 0240202D */ daddu $a0, $s2, $zero
/* 101CDC 802DEBEC 0C01BB7C */ jal decode_yay0
/* 101CE0 802DEBF0 0220282D */ daddu $a1, $s1, $zero
/* 101CE4 802DEBF4 0C00AB1E */ jal general_heap_free
/* 101CE8 802DEBF8 0240202D */ daddu $a0, $s2, $zero
/* 101CEC 802DEBFC 2404FFFF */ addiu $a0, $zero, -1
/* 101CF0 802DEC00 00111082 */ srl $v0, $s1, 2
/* 101CF4 802DEC04 8E320000 */ lw $s2, ($s1)
/* 101CF8 802DEC08 00021080 */ sll $v0, $v0, 2
/* 101CFC 802DEC0C 02429021 */ addu $s2, $s2, $v0
/* 101D00 802DEC10 AE320000 */ sw $s2, ($s1)
.L802DEC14:
/* 101D04 802DEC14 8E450000 */ lw $a1, ($s2)
/* 101D08 802DEC18 10A40008 */ beq $a1, $a0, .L802DEC3C
/* 101D0C 802DEC1C 00A22821 */ addu $a1, $a1, $v0
/* 101D10 802DEC20 AE450000 */ sw $a1, ($s2)
/* 101D14 802DEC24 8CA30000 */ lw $v1, ($a1)
/* 101D18 802DEC28 1680FFFA */ bnez $s4, .L802DEC14
/* 101D1C 802DEC2C 26520004 */ addiu $s2, $s2, 4
/* 101D20 802DEC30 00621821 */ addu $v1, $v1, $v0
/* 101D24 802DEC34 080B7B05 */ j .L802DEC14
/* 101D28 802DEC38 ACA30000 */ sw $v1, ($a1)
.L802DEC3C:
/* 101D2C 802DEC3C 1280002D */ beqz $s4, .L802DECF4
/* 101D30 802DEC40 00151880 */ sll $v1, $s5, 2
/* 101D34 802DEC44 3C13802E */ lui $s3, %hi(D_802DFEB8)
/* 101D38 802DEC48 2673FEB8 */ addiu $s3, $s3, %lo(D_802DFEB8)
/* 101D3C 802DEC4C 0260282D */ daddu $a1, $s3, $zero
/* 101D40 802DEC50 24060194 */ addiu $a2, $zero, 0x194
/* 101D44 802DEC54 3C12802E */ lui $s2, %hi(PlayerRasterSetsLoaded)
/* 101D48 802DEC58 2652004C */ addiu $s2, $s2, %lo(PlayerRasterSetsLoaded)
/* 101D4C 802DEC5C 8E420000 */ lw $v0, ($s2)
/* 101D50 802DEC60 3C04802E */ lui $a0, %hi(D_802E0C20)
/* 101D54 802DEC64 24840C20 */ addiu $a0, $a0, %lo(D_802E0C20)
/* 101D58 802DEC68 3C01802E */ lui $at, %hi(PlayerRasterBufferSetOffsets)
/* 101D5C 802DEC6C 00230821 */ addu $at, $at, $v1
/* 101D60 802DEC70 AC220050 */ sw $v0, %lo(PlayerRasterBufferSetOffsets)($at)
/* 101D64 802DEC74 26A20001 */ addiu $v0, $s5, 1
/* 101D68 802DEC78 00021080 */ sll $v0, $v0, 2
/* 101D6C 802DEC7C 00441021 */ addu $v0, $v0, $a0
/* 101D70 802DEC80 00641821 */ addu $v1, $v1, $a0
/* 101D74 802DEC84 3C04802E */ lui $a0, %hi(SpriteDataHeader)
/* 101D78 802DEC88 8C840C60 */ lw $a0, %lo(SpriteDataHeader)($a0)
/* 101D7C 802DEC8C 3C07802E */ lui $a3, %hi(D_802E0C14)
/* 101D80 802DEC90 8CE70C14 */ lw $a3, %lo(D_802E0C14)($a3)
/* 101D84 802DEC94 8C680000 */ lw $t0, ($v1)
/* 101D88 802DEC98 8C420000 */ lw $v0, ($v0)
/* 101D8C 802DEC9C 00872021 */ addu $a0, $a0, $a3
/* 101D90 802DECA0 00081880 */ sll $v1, $t0, 2
/* 101D94 802DECA4 00832021 */ addu $a0, $a0, $v1
/* 101D98 802DECA8 0C017D24 */ jal nuPiReadRom
/* 101D9C 802DECAC 00488023 */ subu $s0, $v0, $t0
/* 101DA0 802DECB0 1A000010 */ blez $s0, .L802DECF4
/* 101DA4 802DECB4 0000302D */ daddu $a2, $zero, $zero
/* 101DA8 802DECB8 3C08802E */ lui $t0, %hi(D_802E0090)
/* 101DAC 802DECBC 25080090 */ addiu $t0, $t0, %lo(D_802E0090)
/* 101DB0 802DECC0 0240382D */ daddu $a3, $s2, $zero
/* 101DB4 802DECC4 0260282D */ daddu $a1, $s3, $zero
.L802DECC8:
/* 101DB8 802DECC8 8CA40000 */ lw $a0, ($a1)
/* 101DBC 802DECCC 24A50004 */ addiu $a1, $a1, 4
/* 101DC0 802DECD0 8CE30000 */ lw $v1, ($a3)
/* 101DC4 802DECD4 24C60001 */ addiu $a2, $a2, 1
/* 101DC8 802DECD8 00031080 */ sll $v0, $v1, 2
/* 101DCC 802DECDC 24630001 */ addiu $v1, $v1, 1
/* 101DD0 802DECE0 00481021 */ addu $v0, $v0, $t0
/* 101DD4 802DECE4 AC440000 */ sw $a0, ($v0)
/* 101DD8 802DECE8 00D0102A */ slt $v0, $a2, $s0
/* 101DDC 802DECEC 1440FFF6 */ bnez $v0, .L802DECC8
/* 101DE0 802DECF0 ACE30000 */ sw $v1, ($a3)
.L802DECF4:
/* 101DE4 802DECF4 2404FFFF */ addiu $a0, $zero, -1
/* 101DE8 802DECF8 00111082 */ srl $v0, $s1, 2
/* 101DEC 802DECFC 8E230004 */ lw $v1, 4($s1)
/* 101DF0 802DED00 00021080 */ sll $v0, $v0, 2
/* 101DF4 802DED04 00621821 */ addu $v1, $v1, $v0
/* 101DF8 802DED08 AE230004 */ sw $v1, 4($s1)
.L802DED0C:
/* 101DFC 802DED0C 8C650000 */ lw $a1, ($v1)
/* 101E00 802DED10 10A40004 */ beq $a1, $a0, .L802DED24
/* 101E04 802DED14 00A22821 */ addu $a1, $a1, $v0
/* 101E08 802DED18 AC650000 */ sw $a1, ($v1)
/* 101E0C 802DED1C 080B7B43 */ j .L802DED0C
/* 101E10 802DED20 24630004 */ addiu $v1, $v1, 4
.L802DED24:
/* 101E14 802DED24 0000202D */ daddu $a0, $zero, $zero
/* 101E18 802DED28 0080282D */ daddu $a1, $a0, $zero
/* 101E1C 802DED2C 0C0B7AA8 */ jal spr_swizzle_anim_offsets
/* 101E20 802DED30 0220302D */ daddu $a2, $s1, $zero
/* 101E24 802DED34 0220102D */ daddu $v0, $s1, $zero
/* 101E28 802DED38 8FBF002C */ lw $ra, 0x2c($sp)
/* 101E2C 802DED3C 8FB60028 */ lw $s6, 0x28($sp)
/* 101E30 802DED40 8FB50024 */ lw $s5, 0x24($sp)
/* 101E34 802DED44 8FB40020 */ lw $s4, 0x20($sp)
/* 101E38 802DED48 8FB3001C */ lw $s3, 0x1c($sp)
/* 101E3C 802DED4C 8FB20018 */ lw $s2, 0x18($sp)
/* 101E40 802DED50 8FB10014 */ lw $s1, 0x14($sp)
/* 101E44 802DED54 8FB00010 */ lw $s0, 0x10($sp)
/* 101E48 802DED58 03E00008 */ jr $ra
/* 101E4C 802DED5C 27BD0030 */ addiu $sp, $sp, 0x30

View File

@ -1,308 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel jtbl_E0088D30
.word .LE00881F4_38AFE4, .LE00881FC_38AFEC, .LE0088204_38AFF4, .LE008820C_38AFFC, .LE00881F4_38AFE4, .LE00881FC_38AFEC, .LE0088204_38AFF4, 0
dlabel jtbl_E0088D50
.word .LE0088230_38B020, .LE0088240_38B030, .LE0088250_38B040, .LE0088250_38B040, .LE0088230_38B020, .LE0088240_38B030, .LE0088250_38B040, 0
dlabel jtbl_E0088D70
.word .LE0088374, .LE0088374, .LE0088374, .LE0088374, .LE0088374, .LE0088374, .LE0088374, 0x00000000
dlabel D_E0088D90
.double 0.02
dlabel D_E0088D98
.double -0.02
.section .text
glabel confetti_main
/* 38AF6C E008817C 27BDFF78 */ addiu $sp, $sp, -0x88
/* 38AF70 E0088180 F7B40058 */ sdc1 $f20, 0x58($sp)
/* 38AF74 E0088184 4485A000 */ mtc1 $a1, $f20
/* 38AF78 E0088188 AFB50044 */ sw $s5, 0x44($sp)
/* 38AF7C E008818C 0080A82D */ daddu $s5, $a0, $zero
/* 38AF80 E0088190 F7B60060 */ sdc1 $f22, 0x60($sp)
/* 38AF84 E0088194 4486B000 */ mtc1 $a2, $f22
/* 38AF88 E0088198 F7B80068 */ sdc1 $f24, 0x68($sp)
/* 38AF8C E008819C 4487C000 */ mtc1 $a3, $f24
/* 38AF90 E00881A0 2EA20007 */ sltiu $v0, $s5, 7
/* 38AF94 E00881A4 AFBF0054 */ sw $ra, 0x54($sp)
/* 38AF98 E00881A8 AFBE0050 */ sw $fp, 0x50($sp)
/* 38AF9C E00881AC AFB7004C */ sw $s7, 0x4c($sp)
/* 38AFA0 E00881B0 AFB60048 */ sw $s6, 0x48($sp)
/* 38AFA4 E00881B4 AFB40040 */ sw $s4, 0x40($sp)
/* 38AFA8 E00881B8 AFB3003C */ sw $s3, 0x3c($sp)
/* 38AFAC E00881BC AFB20038 */ sw $s2, 0x38($sp)
/* 38AFB0 E00881C0 AFB10034 */ sw $s1, 0x34($sp)
/* 38AFB4 E00881C4 AFB00030 */ sw $s0, 0x30($sp)
/* 38AFB8 E00881C8 F7BE0080 */ sdc1 $f30, 0x80($sp)
/* 38AFBC E00881CC F7BC0078 */ sdc1 $f28, 0x78($sp)
/* 38AFC0 E00881D0 F7BA0070 */ sdc1 $f26, 0x70($sp)
/* 38AFC4 E00881D4 1040000D */ beqz $v0, .LE008820C_38AFFC
/* 38AFC8 E00881D8 27A40010 */ addiu $a0, $sp, 0x10
/* 38AFCC E00881DC 00151080 */ sll $v0, $s5, 2
/* 38AFD0 E00881E0 3C01E009 */ lui $at, %hi(jtbl_E0088D30)
/* 38AFD4 E00881E4 00220821 */ addu $at, $at, $v0
/* 38AFD8 E00881E8 8C228D30 */ lw $v0, %lo(jtbl_E0088D30)($at)
/* 38AFDC E00881EC 00400008 */ jr $v0
/* 38AFE0 E00881F0 00000000 */ nop
.LE00881F4_38AFE4:
/* 38AFE4 E00881F4 08022084 */ j .LE0088210
/* 38AFE8 E00881F8 2413000C */ addiu $s3, $zero, 0xc
.LE00881FC_38AFEC:
/* 38AFEC E00881FC 08022084 */ j .LE0088210
/* 38AFF0 E0088200 24130012 */ addiu $s3, $zero, 0x12
.LE0088204_38AFF4:
/* 38AFF4 E0088204 08022084 */ j .LE0088210
/* 38AFF8 E0088208 24130018 */ addiu $s3, $zero, 0x18
.LE008820C_38AFFC:
/* 38AFFC E008820C 24130030 */ addiu $s3, $zero, 0x30
.LE0088210:
/* 38B000 E0088210 2EA20007 */ sltiu $v0, $s5, 7
/* 38B004 E0088214 1040000E */ beqz $v0, .LE0088250_38B040
/* 38B008 E0088218 00151080 */ sll $v0, $s5, 2
/* 38B00C E008821C 3C01E009 */ lui $at, %hi(jtbl_E0088D50)
/* 38B010 E0088220 00220821 */ addu $at, $at, $v0
/* 38B014 E0088224 8C228D50 */ lw $v0, %lo(jtbl_E0088D50)($at)
/* 38B018 E0088228 00400008 */ jr $v0
/* 38B01C E008822C 00000000 */ nop
.LE0088230_38B020:
/* 38B020 E0088230 3C014040 */ lui $at, 0x4040
/* 38B024 E0088234 44818000 */ mtc1 $at, $f16
/* 38B028 E0088238 08022098 */ j .LE0088260
/* 38B02C E008823C E7B00028 */ swc1 $f16, 0x28($sp)
.LE0088240_38B030:
/* 38B030 E0088240 3C014080 */ lui $at, 0x4080
/* 38B034 E0088244 44818000 */ mtc1 $at, $f16
/* 38B038 E0088248 08022098 */ j .LE0088260
/* 38B03C E008824C E7B00028 */ swc1 $f16, 0x28($sp)
.LE0088250_38B040:
/* 38B040 E0088250 3C0140A0 */ lui $at, 0x40a0
/* 38B044 E0088254 44818000 */ mtc1 $at, $f16
/* 38B048 E0088258 00000000 */ nop
/* 38B04C E008825C E7B00028 */ swc1 $f16, 0x28($sp)
.LE0088260:
/* 38B050 E0088260 3C02E009 */ lui $v0, %hi(confetti_init)
/* 38B054 E0088264 244285A0 */ addiu $v0, $v0, %lo(confetti_init)
/* 38B058 E0088268 AC820008 */ sw $v0, 8($a0)
/* 38B05C E008826C 3C02E009 */ lui $v0, %hi(confetti_update)
/* 38B060 E0088270 244285A8 */ addiu $v0, $v0, %lo(confetti_update)
/* 38B064 E0088274 AC82000C */ sw $v0, 0xc($a0)
/* 38B068 E0088278 3C02E009 */ lui $v0, %hi(confetti_render)
/* 38B06C E008827C 244287A8 */ addiu $v0, $v0, %lo(confetti_render)
/* 38B070 E0088280 AC820010 */ sw $v0, 0x10($a0)
/* 38B074 E0088284 24020044 */ addiu $v0, $zero, 0x44
/* 38B078 E0088288 AC800000 */ sw $zero, ($a0)
/* 38B07C E008828C AC800014 */ sw $zero, 0x14($a0)
/* 38B080 E0088290 0C080124 */ jal shim_create_effect_instance
/* 38B084 E0088294 AC820004 */ sw $v0, 4($a0)
/* 38B088 E0088298 26630001 */ addiu $v1, $s3, 1
/* 38B08C E008829C 00032040 */ sll $a0, $v1, 1
/* 38B090 E00882A0 00832021 */ addu $a0, $a0, $v1
/* 38B094 E00882A4 00042080 */ sll $a0, $a0, 2
/* 38B098 E00882A8 00832021 */ addu $a0, $a0, $v1
/* 38B09C E00882AC 00042080 */ sll $a0, $a0, 2
/* 38B0A0 E00882B0 0040B02D */ daddu $s6, $v0, $zero
/* 38B0A4 E00882B4 0C08012C */ jal shim_general_heap_malloc
/* 38B0A8 E00882B8 AEC30008 */ sw $v1, 8($s6)
/* 38B0AC E00882BC 0040902D */ daddu $s2, $v0, $zero
/* 38B0B0 E00882C0 16400003 */ bnez $s2, .LE00882D0
/* 38B0B4 E00882C4 AED2000C */ sw $s2, 0xc($s6)
.LE00882C8:
/* 38B0B8 E00882C8 080220B2 */ j .LE00882C8
/* 38B0BC E00882CC 00000000 */ nop
.LE00882D0:
/* 38B0C0 E00882D0 E6540004 */ swc1 $f20, 4($s2)
/* 38B0C4 E00882D4 E6560008 */ swc1 $f22, 8($s2)
/* 38B0C8 E00882D8 E658000C */ swc1 $f24, 0xc($s2)
/* 38B0CC E00882DC AE400024 */ sw $zero, 0x24($s2)
/* 38B0D0 E00882E0 8FA2009C */ lw $v0, 0x9c($sp)
/* 38B0D4 E00882E4 24040168 */ addiu $a0, $zero, 0x168
/* 38B0D8 E00882E8 AE550000 */ sw $s5, ($s2)
/* 38B0DC E00882EC AE53002C */ sw $s3, 0x2c($s2)
/* 38B0E0 E00882F0 AE420020 */ sw $v0, 0x20($s2)
/* 38B0E4 E00882F4 240200FF */ addiu $v0, $zero, 0xff
/* 38B0E8 E00882F8 AE420028 */ sw $v0, 0x28($s2)
/* 38B0EC E00882FC 0C080138 */ jal shim_rand_int
/* 38B0F0 E0088300 26520034 */ addiu $s2, $s2, 0x34
/* 38B0F4 E0088304 0000882D */ daddu $s1, $zero, $zero
/* 38B0F8 E0088308 12600092 */ beqz $s3, .LE0088554
/* 38B0FC E008830C 0040F02D */ daddu $fp, $v0, $zero
/* 38B100 E0088310 3C03E009 */ lui $v1, %hi(jtbl_E0088D70)
/* 38B104 E0088314 24638D70 */ addiu $v1, $v1, %lo(jtbl_E0088D70)
/* 38B108 E0088318 00151080 */ sll $v0, $s5, 2
/* 38B10C E008831C 0043B821 */ addu $s7, $v0, $v1
/* 38B110 E0088320 26500030 */ addiu $s0, $s2, 0x30
/* 38B114 E0088324 0220A02D */ daddu $s4, $s1, $zero
.LE0088328:
/* 38B118 E0088328 0C080000 */ jal func_E0200000
/* 38B11C E008832C 24040064 */ addiu $a0, $zero, 0x64
/* 38B120 E0088330 3C013C23 */ lui $at, 0x3c23
/* 38B124 E0088334 3421D70A */ ori $at, $at, 0xd70a
/* 38B128 E0088338 44810000 */ mtc1 $at, $f0
/* 38B12C E008833C 44821000 */ mtc1 $v0, $f2
/* 38B130 E0088340 00000000 */ nop
/* 38B134 E0088344 468010A0 */ cvt.s.w $f2, $f2
/* 38B138 E0088348 46001082 */ mul.s $f2, $f2, $f0
/* 38B13C E008834C 00000000 */ nop
/* 38B140 E0088350 C7B00028 */ lwc1 $f16, 0x28($sp)
/* 38B144 E0088354 2EA20007 */ sltiu $v0, $s5, 7
/* 38B148 E0088358 46028782 */ mul.s $f30, $f16, $f2
/* 38B14C E008835C 00000000 */ nop
/* 38B150 E0088360 10400006 */ beqz $v0, .LE008837C
/* 38B154 E0088364 46008021 */ cvt.d.s $f0, $f16
/* 38B158 E0088368 8EE20000 */ lw $v0, ($s7)
/* 38B15C E008836C 080220DF */ j .LE008837C
/* 38B160 E0088370 00000000 */ nop
.LE0088374:
/* 38B164 E0088374 C7B00028 */ lwc1 $f16, 0x28($sp)
/* 38B168 E0088378 46008021 */ cvt.d.s $f0, $f16
.LE008837C:
/* 38B16C E008837C 3C013FE0 */ lui $at, 0x3fe0
/* 38B170 E0088380 44818800 */ mtc1 $at, $f17
/* 38B174 E0088384 44808000 */ mtc1 $zero, $f16
/* 38B178 E0088388 00000000 */ nop
/* 38B17C E008838C 46300002 */ mul.d $f0, $f0, $f16
/* 38B180 E0088390 00000000 */ nop
/* 38B184 E0088394 46200000 */ add.d $f0, $f0, $f0
/* 38B188 E0088398 0220102D */ daddu $v0, $s1, $zero
/* 38B18C E008839C 06210002 */ bgez $s1, .LE00883A8
/* 38B190 E00883A0 46200720 */ cvt.s.d $f28, $f0
/* 38B194 E00883A4 26220003 */ addiu $v0, $s1, 3
.LE00883A8:
/* 38B198 E00883A8 00021083 */ sra $v0, $v0, 2
/* 38B19C E00883AC 4491A000 */ mtc1 $s1, $f20
/* 38B1A0 E00883B0 00000000 */ nop
/* 38B1A4 E00883B4 4680A520 */ cvt.s.w $f20, $f20
/* 38B1A8 E00883B8 00021080 */ sll $v0, $v0, 2
/* 38B1AC E00883BC 3C0143B4 */ lui $at, 0x43b4
/* 38B1B0 E00883C0 44810000 */ mtc1 $at, $f0
/* 38B1B4 E00883C4 02221023 */ subu $v0, $s1, $v0
/* 38B1B8 E00883C8 4600A502 */ mul.s $f20, $f20, $f0
/* 38B1BC E00883CC 00000000 */ nop
/* 38B1C0 E00883D0 3C08E009 */ lui $t0, %hi(D_E0088D08)
/* 38B1C4 E00883D4 25088D08 */ addiu $t0, $t0, %lo(D_E0088D08)
/* 38B1C8 E00883D8 00481021 */ addu $v0, $v0, $t0
/* 38B1CC E00883DC 90420000 */ lbu $v0, ($v0)
/* 38B1D0 E00883E0 44930000 */ mtc1 $s3, $f0
/* 38B1D4 E00883E4 00000000 */ nop
/* 38B1D8 E00883E8 46800020 */ cvt.s.w $f0, $f0
/* 38B1DC E00883EC 4600A503 */ div.s $f20, $f20, $f0
/* 38B1E0 E00883F0 449E0000 */ mtc1 $fp, $f0
/* 38B1E4 E00883F4 00000000 */ nop
/* 38B1E8 E00883F8 46800020 */ cvt.s.w $f0, $f0
/* 38B1EC E00883FC 4600A500 */ add.s $f20, $f20, $f0
/* 38B1F0 E0088400 AE550000 */ sw $s5, ($s2)
/* 38B1F4 E0088404 4482B000 */ mtc1 $v0, $f22
/* 38B1F8 E0088408 00000000 */ nop
/* 38B1FC E008840C 4680B5A0 */ cvt.s.w $f22, $f22
/* 38B200 E0088410 0C080140 */ jal shim_sin_deg
/* 38B204 E0088414 4600A306 */ mov.s $f12, $f20
/* 38B208 E0088418 4600A306 */ mov.s $f12, $f20
/* 38B20C E008841C 0C080144 */ jal shim_cos_deg
/* 38B210 E0088420 46000606 */ mov.s $f24, $f0
/* 38B214 E0088424 4600B306 */ mov.s $f12, $f22
/* 38B218 E0088428 0C080140 */ jal shim_sin_deg
/* 38B21C E008842C 46000686 */ mov.s $f26, $f0
/* 38B220 E0088430 4600B306 */ mov.s $f12, $f22
/* 38B224 E0088434 0C080144 */ jal shim_cos_deg
/* 38B228 E0088438 46000506 */ mov.s $f20, $f0
/* 38B22C E008843C 24020003 */ addiu $v0, $zero, 3
/* 38B230 E0088440 16A20005 */ bne $s5, $v0, .LE0088458
/* 38B234 E0088444 46000386 */ mov.s $f14, $f0
/* 38B238 E0088448 0C022000 */ jal func_E0088000
/* 38B23C E008844C 0240202D */ daddu $a0, $s2, $zero
/* 38B240 E0088450 0802214F */ j .LE008853C
/* 38B244 E0088454 AE140000 */ sw $s4, ($s0)
.LE0088458:
/* 38B248 E0088458 4618F182 */ mul.s $f6, $f30, $f24
/* 38B24C E008845C 00000000 */ nop
/* 38B250 E0088460 461AF202 */ mul.s $f8, $f30, $f26
/* 38B254 E0088464 00000000 */ nop
/* 38B258 E0088468 4618E082 */ mul.s $f2, $f28, $f24
/* 38B25C E008846C 00000000 */ nop
/* 38B260 E0088470 4614F302 */ mul.s $f12, $f30, $f20
/* 38B264 E0088474 00000000 */ nop
/* 38B268 E0088478 461AE002 */ mul.s $f0, $f28, $f26
/* 38B26C E008847C 00000000 */ nop
/* 38B270 E0088480 4614E102 */ mul.s $f4, $f28, $f20
/* 38B274 E0088484 00000000 */ nop
/* 38B278 E0088488 460E3182 */ mul.s $f6, $f6, $f14
/* 38B27C E008848C 00000000 */ nop
/* 38B280 E0088490 460E4202 */ mul.s $f8, $f8, $f14
/* 38B284 E0088494 00000000 */ nop
/* 38B288 E0088498 460E1082 */ mul.s $f2, $f2, $f14
/* 38B28C E008849C 00000000 */ nop
/* 38B290 E00884A0 3C013F80 */ lui $at, 0x3f80
/* 38B294 E00884A4 44815000 */ mtc1 $at, $f10
/* 38B298 E00884A8 460E0002 */ mul.s $f0, $f0, $f14
/* 38B29C E00884AC 00000000 */ nop
/* 38B2A0 E00884B0 2AA20004 */ slti $v0, $s5, 4
/* 38B2A4 E00884B4 E60CFFDC */ swc1 $f12, -0x24($s0)
/* 38B2A8 E00884B8 E604FFE8 */ swc1 $f4, -0x18($s0)
/* 38B2AC E00884BC E606FFD4 */ swc1 $f6, -0x2c($s0)
/* 38B2B0 E00884C0 460A0000 */ add.s $f0, $f0, $f10
/* 38B2B4 E00884C4 E608FFD8 */ swc1 $f8, -0x28($s0)
/* 38B2B8 E00884C8 E602FFE0 */ swc1 $f2, -0x20($s0)
/* 38B2BC E00884CC 14400018 */ bnez $v0, .LE0088530
/* 38B2C0 E00884D0 E600FFE4 */ swc1 $f0, -0x1c($s0)
/* 38B2C4 E00884D4 3C025555 */ lui $v0, 0x5555
/* 38B2C8 E00884D8 34425556 */ ori $v0, $v0, 0x5556
/* 38B2CC E00884DC 26240001 */ addiu $a0, $s1, 1
/* 38B2D0 E00884E0 00820018 */ mult $a0, $v0
/* 38B2D4 E00884E4 00041FC3 */ sra $v1, $a0, 0x1f
/* 38B2D8 E00884E8 3C01E009 */ lui $at, %hi(D_E0088D90)
/* 38B2DC E00884EC D4208D90 */ ldc1 $f0, %lo(D_E0088D90)($at)
/* 38B2E0 E00884F0 00004010 */ mfhi $t0
/* 38B2E4 E00884F4 01031823 */ subu $v1, $t0, $v1
/* 38B2E8 E00884F8 00031040 */ sll $v0, $v1, 1
/* 38B2EC E00884FC 00431021 */ addu $v0, $v0, $v1
/* 38B2F0 E0088500 00822023 */ subu $a0, $a0, $v0
/* 38B2F4 E0088504 44841000 */ mtc1 $a0, $f2
/* 38B2F8 E0088508 00000000 */ nop
/* 38B2FC E008850C 468010A1 */ cvt.d.w $f2, $f2
/* 38B300 E0088510 46201082 */ mul.d $f2, $f2, $f0
/* 38B304 E0088514 00000000 */ nop
/* 38B308 E0088518 3C01E009 */ lui $at, %hi(D_E0088D98)
/* 38B30C E008851C D4208D98 */ ldc1 $f0, %lo(D_E0088D98)($at)
/* 38B310 E0088520 46220001 */ sub.d $f0, $f0, $f2
/* 38B314 E0088524 46200020 */ cvt.s.d $f0, $f0
/* 38B318 E0088528 0802214D */ j .LE0088534
/* 38B31C E008852C E600FFEC */ swc1 $f0, -0x14($s0)
.LE0088530:
/* 38B320 E0088530 AE00FFEC */ sw $zero, -0x14($s0)
.LE0088534:
/* 38B324 E0088534 32220003 */ andi $v0, $s1, 3
/* 38B328 E0088538 AE020000 */ sw $v0, ($s0)
.LE008853C:
/* 38B32C E008853C 26940003 */ addiu $s4, $s4, 3
/* 38B330 E0088540 26310001 */ addiu $s1, $s1, 1
/* 38B334 E0088544 26100034 */ addiu $s0, $s0, 0x34
/* 38B338 E0088548 0233102A */ slt $v0, $s1, $s3
/* 38B33C E008854C 1440FF76 */ bnez $v0, .LE0088328
/* 38B340 E0088550 26520034 */ addiu $s2, $s2, 0x34
.LE0088554:
/* 38B344 E0088554 02C0102D */ daddu $v0, $s6, $zero
/* 38B348 E0088558 8FBF0054 */ lw $ra, 0x54($sp)
/* 38B34C E008855C 8FBE0050 */ lw $fp, 0x50($sp)
/* 38B350 E0088560 8FB7004C */ lw $s7, 0x4c($sp)
/* 38B354 E0088564 8FB60048 */ lw $s6, 0x48($sp)
/* 38B358 E0088568 8FB50044 */ lw $s5, 0x44($sp)
/* 38B35C E008856C 8FB40040 */ lw $s4, 0x40($sp)
/* 38B360 E0088570 8FB3003C */ lw $s3, 0x3c($sp)
/* 38B364 E0088574 8FB20038 */ lw $s2, 0x38($sp)
/* 38B368 E0088578 8FB10034 */ lw $s1, 0x34($sp)
/* 38B36C E008857C 8FB00030 */ lw $s0, 0x30($sp)
/* 38B370 E0088580 D7BE0080 */ ldc1 $f30, 0x80($sp)
/* 38B374 E0088584 D7BC0078 */ ldc1 $f28, 0x78($sp)
/* 38B378 E0088588 D7BA0070 */ ldc1 $f26, 0x70($sp)
/* 38B37C E008858C D7B80068 */ ldc1 $f24, 0x68($sp)
/* 38B380 E0088590 D7B60060 */ ldc1 $f22, 0x60($sp)
/* 38B384 E0088594 D7B40058 */ ldc1 $f20, 0x58($sp)
/* 38B388 E0088598 03E00008 */ jr $ra
/* 38B38C E008859C 27BD0088 */ addiu $sp, $sp, 0x88

View File

@ -1,534 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel D_E010AFA8
.double 0.8
.section .text
glabel firework_rocket_appendGfx
/* 3E4888 E010A4E8 27BDFF30 */ addiu $sp, $sp, -0xd0
/* 3E488C E010A4EC AFB70094 */ sw $s7, 0x94($sp)
/* 3E4890 E010A4F0 0080B82D */ daddu $s7, $a0, $zero
/* 3E4894 E010A4F4 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* 3E4898 E010A4F8 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* 3E489C E010A4FC 3C04800B */ lui $a0, %hi(gCameras)
/* 3E48A0 E010A500 24841D80 */ addiu $a0, $a0, %lo(gCameras)
/* 3E48A4 E010A504 AFBF009C */ sw $ra, 0x9c($sp)
/* 3E48A8 E010A508 AFBE0098 */ sw $fp, 0x98($sp)
/* 3E48AC E010A50C AFB60090 */ sw $s6, 0x90($sp)
/* 3E48B0 E010A510 AFB5008C */ sw $s5, 0x8c($sp)
/* 3E48B4 E010A514 AFB40088 */ sw $s4, 0x88($sp)
/* 3E48B8 E010A518 AFB30084 */ sw $s3, 0x84($sp)
/* 3E48BC E010A51C AFB20080 */ sw $s2, 0x80($sp)
/* 3E48C0 E010A520 AFB1007C */ sw $s1, 0x7c($sp)
/* 3E48C4 E010A524 AFB00078 */ sw $s0, 0x78($sp)
/* 3E48C8 E010A528 F7BE00C8 */ sdc1 $f30, 0xc8($sp)
/* 3E48CC E010A52C F7BC00C0 */ sdc1 $f28, 0xc0($sp)
/* 3E48D0 E010A530 F7BA00B8 */ sdc1 $f26, 0xb8($sp)
/* 3E48D4 E010A534 F7B800B0 */ sdc1 $f24, 0xb0($sp)
/* 3E48D8 E010A538 F7B600A8 */ sdc1 $f22, 0xa8($sp)
/* 3E48DC E010A53C F7B400A0 */ sdc1 $f20, 0xa0($sp)
/* 3E48E0 E010A540 8EF1000C */ lw $s1, 0xc($s7)
/* 3E48E4 E010A544 00031080 */ sll $v0, $v1, 2
/* 3E48E8 E010A548 00431021 */ addu $v0, $v0, $v1
/* 3E48EC E010A54C 00021080 */ sll $v0, $v0, 2
/* 3E48F0 E010A550 00431023 */ subu $v0, $v0, $v1
/* 3E48F4 E010A554 000218C0 */ sll $v1, $v0, 3
/* 3E48F8 E010A558 00431021 */ addu $v0, $v0, $v1
/* 3E48FC E010A55C 000210C0 */ sll $v0, $v0, 3
/* 3E4900 E010A560 00449021 */ addu $s2, $v0, $a0
/* 3E4904 E010A564 C654006C */ lwc1 $f20, 0x6c($s2)
/* 3E4908 E010A568 8E330030 */ lw $s3, 0x30($s1)
/* 3E490C E010A56C 8E360000 */ lw $s6, ($s1)
/* 3E4910 E010A570 4600A507 */ neg.s $f20, $f20
/* 3E4914 E010A574 0C080140 */ jal shim_sin_deg
/* 3E4918 E010A578 4600A306 */ mov.s $f12, $f20
/* 3E491C E010A57C 4600A306 */ mov.s $f12, $f20
/* 3E4920 E010A580 0C080144 */ jal shim_cos_deg
/* 3E4924 E010A584 E7A00058 */ swc1 $f0, 0x58($sp)
/* 3E4928 E010A588 3C148007 */ lui $s4, %hi(gGameStatusPtr)
/* 3E492C E010A58C 2694419C */ addiu $s4, $s4, %lo(gGameStatusPtr)
/* 3E4930 E010A590 E7A0005C */ swc1 $f0, 0x5c($sp)
/* 3E4934 E010A594 8E820000 */ lw $v0, ($s4)
/* 3E4938 E010A598 3C15E011 */ lui $s5, %hi(D_E010AF80)
/* 3E493C E010A59C 26B5AF80 */ addiu $s5, $s5, %lo(D_E010AF80)
/* 3E4940 E010A5A0 94430134 */ lhu $v1, 0x134($v0)
/* 3E4944 E010A5A4 8EA20000 */ lw $v0, ($s5)
/* 3E4948 E010A5A8 8E3E004C */ lw $fp, 0x4c($s1)
/* 3E494C E010A5AC 10430013 */ beq $v0, $v1, .LE010A5FC
/* 3E4950 E010A5B0 2404000A */ addiu $a0, $zero, 0xa
/* 3E4954 E010A5B4 3C10E011 */ lui $s0, %hi(D_E010AF84)
/* 3E4958 E010A5B8 2610AF84 */ addiu $s0, $s0, %lo(D_E010AF84)
/* 3E495C E010A5BC 3C01E011 */ lui $at, %hi(D_E010AFA8)
/* 3E4960 E010A5C0 D422AFA8 */ ldc1 $f2, %lo(D_E010AFA8)($at)
/* 3E4964 E010A5C4 C6000000 */ lwc1 $f0, ($s0)
/* 3E4968 E010A5C8 46800021 */ cvt.d.w $f0, $f0
/* 3E496C E010A5CC 46220002 */ mul.d $f0, $f0, $f2
/* 3E4970 E010A5D0 00000000 */ nop
/* 3E4974 E010A5D4 0080282D */ daddu $a1, $a0, $zero
/* 3E4978 E010A5D8 24060136 */ addiu $a2, $zero, 0x136
/* 3E497C E010A5DC 240700E6 */ addiu $a3, $zero, 0xe6
/* 3E4980 E010A5E0 46200020 */ cvt.s.d $f0, $f0
/* 3E4984 E010A5E4 0C08018C */ jal shim_func_80138D88
/* 3E4988 E010A5E8 E7A00010 */ swc1 $f0, 0x10($sp)
/* 3E498C E010A5EC 8E820000 */ lw $v0, ($s4)
/* 3E4990 E010A5F0 94420134 */ lhu $v0, 0x134($v0)
/* 3E4994 E010A5F4 AE000000 */ sw $zero, ($s0)
/* 3E4998 E010A5F8 AEA20000 */ sw $v0, ($s5)
.LE010A5FC:
/* 3E499C E010A5FC 3C03E011 */ lui $v1, %hi(D_E010AF84)
/* 3E49A0 E010A600 2463AF84 */ addiu $v1, $v1, %lo(D_E010AF84)
/* 3E49A4 E010A604 8C620000 */ lw $v0, ($v1)
/* 3E49A8 E010A608 0053102A */ slt $v0, $v0, $s3
/* 3E49AC E010A60C 54400001 */ bnel $v0, $zero, .LE010A614
/* 3E49B0 E010A610 AC730000 */ sw $s3, ($v1)
.LE010A614:
/* 3E49B4 E010A614 3C04DB06 */ lui $a0, 0xdb06
/* 3E49B8 E010A618 3C07800A */ lui $a3, %hi(gMasterGfxPos)
/* 3E49BC E010A61C 24E7A66C */ addiu $a3, $a3, %lo(gMasterGfxPos)
/* 3E49C0 E010A620 34840024 */ ori $a0, $a0, 0x24
/* 3E49C4 E010A624 8CE50000 */ lw $a1, ($a3)
/* 3E49C8 E010A628 3C02E700 */ lui $v0, 0xe700
/* 3E49CC E010A62C 00A0182D */ daddu $v1, $a1, $zero
/* 3E49D0 E010A630 24A50008 */ addiu $a1, $a1, 8
/* 3E49D4 E010A634 ACE50000 */ sw $a1, ($a3)
/* 3E49D8 E010A638 AC620000 */ sw $v0, ($v1)
/* 3E49DC E010A63C AC600004 */ sw $zero, 4($v1)
/* 3E49E0 E010A640 ACA40000 */ sw $a0, ($a1)
/* 3E49E4 E010A644 8EE30010 */ lw $v1, 0x10($s7)
/* 3E49E8 E010A648 24A20008 */ addiu $v0, $a1, 8
/* 3E49EC E010A64C ACE20000 */ sw $v0, ($a3)
/* 3E49F0 E010A650 8C62001C */ lw $v0, 0x1c($v1)
/* 3E49F4 E010A654 3C038000 */ lui $v1, 0x8000
/* 3E49F8 E010A658 00431021 */ addu $v0, $v0, $v1
/* 3E49FC E010A65C ACA20004 */ sw $v0, 4($a1)
/* 3E4A00 E010A660 C64E00D4 */ lwc1 $f14, 0xd4($s2)
/* 3E4A04 E010A664 E7AE0018 */ swc1 $f14, 0x18($sp)
/* 3E4A08 E010A668 C64E00D8 */ lwc1 $f14, 0xd8($s2)
/* 3E4A0C E010A66C E7AE001C */ swc1 $f14, 0x1c($sp)
/* 3E4A10 E010A670 C64E00DC */ lwc1 $f14, 0xdc($s2)
/* 3E4A14 E010A674 E7AE0020 */ swc1 $f14, 0x20($sp)
/* 3E4A18 E010A678 C64E00E0 */ lwc1 $f14, 0xe0($s2)
/* 3E4A1C E010A67C E7AE0024 */ swc1 $f14, 0x24($sp)
/* 3E4A20 E010A680 C64E00E4 */ lwc1 $f14, 0xe4($s2)
/* 3E4A24 E010A684 E7AE0028 */ swc1 $f14, 0x28($sp)
/* 3E4A28 E010A688 C64E00E8 */ lwc1 $f14, 0xe8($s2)
/* 3E4A2C E010A68C E7AE002C */ swc1 $f14, 0x2c($sp)
/* 3E4A30 E010A690 C64E00EC */ lwc1 $f14, 0xec($s2)
/* 3E4A34 E010A694 E7AE0030 */ swc1 $f14, 0x30($sp)
/* 3E4A38 E010A698 C64E00F0 */ lwc1 $f14, 0xf0($s2)
/* 3E4A3C E010A69C E7AE0034 */ swc1 $f14, 0x34($sp)
/* 3E4A40 E010A6A0 C64E00F4 */ lwc1 $f14, 0xf4($s2)
/* 3E4A44 E010A6A4 E7AE0038 */ swc1 $f14, 0x38($sp)
/* 3E4A48 E010A6A8 C64E00F8 */ lwc1 $f14, 0xf8($s2)
/* 3E4A4C E010A6AC E7AE003C */ swc1 $f14, 0x3c($sp)
/* 3E4A50 E010A6B0 C64E00FC */ lwc1 $f14, 0xfc($s2)
/* 3E4A54 E010A6B4 E7AE0040 */ swc1 $f14, 0x40($sp)
/* 3E4A58 E010A6B8 C64E0100 */ lwc1 $f14, 0x100($s2)
/* 3E4A5C E010A6BC E7AE0044 */ swc1 $f14, 0x44($sp)
/* 3E4A60 E010A6C0 C64E0104 */ lwc1 $f14, 0x104($s2)
/* 3E4A64 E010A6C4 E7AE0048 */ swc1 $f14, 0x48($sp)
/* 3E4A68 E010A6C8 C64E0108 */ lwc1 $f14, 0x108($s2)
/* 3E4A6C E010A6CC E7AE004C */ swc1 $f14, 0x4c($sp)
/* 3E4A70 E010A6D0 C64E010C */ lwc1 $f14, 0x10c($s2)
/* 3E4A74 E010A6D4 E7AE0050 */ swc1 $f14, 0x50($sp)
/* 3E4A78 E010A6D8 C64E0110 */ lwc1 $f14, 0x110($s2)
/* 3E4A7C E010A6DC 3C02DE00 */ lui $v0, 0xde00
/* 3E4A80 E010A6E0 E7AE0054 */ swc1 $f14, 0x54($sp)
/* 3E4A84 E010A6E4 ACA20008 */ sw $v0, 8($a1)
/* 3E4A88 E010A6E8 00161080 */ sll $v0, $s6, 2
/* 3E4A8C E010A6EC 3C03E011 */ lui $v1, %hi(D_E010ACCC)
/* 3E4A90 E010A6F0 00621821 */ addu $v1, $v1, $v0
/* 3E4A94 E010A6F4 8C63ACCC */ lw $v1, %lo(D_E010ACCC)($v1)
/* 3E4A98 E010A6F8 24A20010 */ addiu $v0, $a1, 0x10
/* 3E4A9C E010A6FC ACE20000 */ sw $v0, ($a3)
/* 3E4AA0 E010A700 ACA3000C */ sw $v1, 0xc($a1)
/* 3E4AA4 E010A704 C62E0004 */ lwc1 $f14, 4($s1)
/* 3E4AA8 E010A708 E7AE0060 */ swc1 $f14, 0x60($sp)
/* 3E4AAC E010A70C C62E0008 */ lwc1 $f14, 8($s1)
/* 3E4AB0 E010A710 E7AE0064 */ swc1 $f14, 0x64($sp)
/* 3E4AB4 E010A714 C62E000C */ lwc1 $f14, 0xc($s1)
/* 3E4AB8 E010A718 E7AE0068 */ swc1 $f14, 0x68($sp)
/* 3E4ABC E010A71C C63E0044 */ lwc1 $f30, 0x44($s1)
/* 3E4AC0 E010A720 24A20018 */ addiu $v0, $a1, 0x18
/* 3E4AC4 E010A724 ACE20000 */ sw $v0, ($a3)
/* 3E4AC8 E010A728 3C02FA00 */ lui $v0, 0xfa00
/* 3E4ACC E010A72C ACA20010 */ sw $v0, 0x10($a1)
/* 3E4AD0 E010A730 92220027 */ lbu $v0, 0x27($s1)
/* 3E4AD4 E010A734 9224002B */ lbu $a0, 0x2b($s1)
/* 3E4AD8 E010A738 9226002F */ lbu $a2, 0x2f($s1)
/* 3E4ADC E010A73C 24A30020 */ addiu $v1, $a1, 0x20
/* 3E4AE0 E010A740 ACE30000 */ sw $v1, ($a3)
/* 3E4AE4 E010A744 3C03FB00 */ lui $v1, 0xfb00
/* 3E4AE8 E010A748 ACA30018 */ sw $v1, 0x18($a1)
/* 3E4AEC E010A74C 326300FF */ andi $v1, $s3, 0xff
/* 3E4AF0 E010A750 00021600 */ sll $v0, $v0, 0x18
/* 3E4AF4 E010A754 00042400 */ sll $a0, $a0, 0x10
/* 3E4AF8 E010A758 00441025 */ or $v0, $v0, $a0
/* 3E4AFC E010A75C 00063200 */ sll $a2, $a2, 8
/* 3E4B00 E010A760 00461025 */ or $v0, $v0, $a2
/* 3E4B04 E010A764 00431025 */ or $v0, $v0, $v1
/* 3E4B08 E010A768 ACA20014 */ sw $v0, 0x14($a1)
/* 3E4B0C E010A76C 92220027 */ lbu $v0, 0x27($s1)
/* 3E4B10 E010A770 9224002B */ lbu $a0, 0x2b($s1)
/* 3E4B14 E010A774 9223002F */ lbu $v1, 0x2f($s1)
/* 3E4B18 E010A778 00021600 */ sll $v0, $v0, 0x18
/* 3E4B1C E010A77C 00042400 */ sll $a0, $a0, 0x10
/* 3E4B20 E010A780 00441025 */ or $v0, $v0, $a0
/* 3E4B24 E010A784 00031A00 */ sll $v1, $v1, 8
/* 3E4B28 E010A788 00431025 */ or $v0, $v0, $v1
/* 3E4B2C E010A78C ACA2001C */ sw $v0, 0x1c($a1)
/* 3E4B30 E010A790 24020001 */ addiu $v0, $zero, 1
/* 3E4B34 E010A794 17C20009 */ bne $fp, $v0, .LE010A7BC
/* 3E4B38 E010A798 0000A02D */ daddu $s4, $zero, $zero
/* 3E4B3C E010A79C 3C03E011 */ lui $v1, %hi(D_E010AF68)
/* 3E4B40 E010A7A0 2463AF68 */ addiu $v1, $v1, %lo(D_E010AF68)
/* 3E4B44 E010A7A4 001610C0 */ sll $v0, $s6, 3
/* 3E4B48 E010A7A8 00431021 */ addu $v0, $v0, $v1
/* 3E4B4C E010A7AC 8C540000 */ lw $s4, ($v0)
/* 3E4B50 E010A7B0 8C570004 */ lw $s7, 4($v0)
/* 3E4B54 E010A7B4 080429F1 */ j .LE010A7C4
/* 3E4B58 E010A7B8 0000A82D */ daddu $s5, $zero, $zero
.LE010A7BC:
/* 3E4B5C E010A7BC 24170004 */ addiu $s7, $zero, 4
/* 3E4B60 E010A7C0 0000A82D */ daddu $s5, $zero, $zero
.LE010A7C4:
/* 3E4B64 E010A7C4 1AE00129 */ blez $s7, .LE010AC6C
/* 3E4B68 E010A7C8 26930001 */ addiu $s3, $s4, 1
/* 3E4B6C E010A7CC 3C16800A */ lui $s6, %hi(gMasterGfxPos)
/* 3E4B70 E010A7D0 26D6A66C */ addiu $s6, $s6, %lo(gMasterGfxPos)
/* 3E4B74 E010A7D4 0220802D */ daddu $s0, $s1, $zero
/* 3E4B78 E010A7D8 3C013F80 */ lui $at, 0x3f80
/* 3E4B7C E010A7DC 4481E000 */ mtc1 $at, $f28
.LE010A7E0:
/* 3E4B80 E010A7E0 24020001 */ addiu $v0, $zero, 1
/* 3E4B84 E010A7E4 17C20030 */ bne $fp, $v0, .LE010A8A8
/* 3E4B88 E010A7E8 00000000 */ nop
/* 3E4B8C E010A7EC 0C080138 */ jal shim_rand_int
/* 3E4B90 E010A7F0 24040010 */ addiu $a0, $zero, 0x10
/* 3E4B94 E010A7F4 28420006 */ slti $v0, $v0, 6
/* 3E4B98 E010A7F8 54400117 */ bnel $v0, $zero, .LE010AC58
/* 3E4B9C E010A7FC 26100004 */ addiu $s0, $s0, 4
/* 3E4BA0 E010A800 82830000 */ lb $v1, ($s4)
/* 3E4BA4 E010A804 C7AE005C */ lwc1 $f14, 0x5c($sp)
/* 3E4BA8 E010A808 44832000 */ mtc1 $v1, $f4
/* 3E4BAC E010A80C 00000000 */ nop
/* 3E4BB0 E010A810 46802120 */ cvt.s.w $f4, $f4
/* 3E4BB4 E010A814 460E2102 */ mul.s $f4, $f4, $f14
/* 3E4BB8 E010A818 00000000 */ nop
/* 3E4BBC E010A81C 82620001 */ lb $v0, 1($s3)
/* 3E4BC0 E010A820 C7AE0058 */ lwc1 $f14, 0x58($sp)
/* 3E4BC4 E010A824 44823000 */ mtc1 $v0, $f6
/* 3E4BC8 E010A828 00000000 */ nop
/* 3E4BCC E010A82C 468031A0 */ cvt.s.w $f6, $f6
/* 3E4BD0 E010A830 460E3002 */ mul.s $f0, $f6, $f14
/* 3E4BD4 E010A834 00000000 */ nop
/* 3E4BD8 E010A838 82620000 */ lb $v0, ($s3)
/* 3E4BDC E010A83C 44821000 */ mtc1 $v0, $f2
/* 3E4BE0 E010A840 00000000 */ nop
/* 3E4BE4 E010A844 468010A0 */ cvt.s.w $f2, $f2
/* 3E4BE8 E010A848 461E1082 */ mul.s $f2, $f2, $f30
/* 3E4BEC E010A84C 00000000 */ nop
/* 3E4BF0 E010A850 46002100 */ add.s $f4, $f4, $f0
/* 3E4BF4 E010A854 00031823 */ negu $v1, $v1
/* 3E4BF8 E010A858 44830000 */ mtc1 $v1, $f0
/* 3E4BFC E010A85C 00000000 */ nop
/* 3E4C00 E010A860 46800020 */ cvt.s.w $f0, $f0
/* 3E4C04 E010A864 460E0002 */ mul.s $f0, $f0, $f14
/* 3E4C08 E010A868 00000000 */ nop
/* 3E4C0C E010A86C C7AE005C */ lwc1 $f14, 0x5c($sp)
/* 3E4C10 E010A870 460E3182 */ mul.s $f6, $f6, $f14
/* 3E4C14 E010A874 00000000 */ nop
/* 3E4C18 E010A878 461E2102 */ mul.s $f4, $f4, $f30
/* 3E4C1C E010A87C 00000000 */ nop
/* 3E4C20 E010A880 46060000 */ add.s $f0, $f0, $f6
/* 3E4C24 E010A884 461E0002 */ mul.s $f0, $f0, $f30
/* 3E4C28 E010A888 00000000 */ nop
/* 3E4C2C E010A88C C7AE0064 */ lwc1 $f14, 0x64($sp)
/* 3E4C30 E010A890 460E1680 */ add.s $f26, $f2, $f14
/* 3E4C34 E010A894 C7AE0060 */ lwc1 $f14, 0x60($sp)
/* 3E4C38 E010A898 460E2600 */ add.s $f24, $f4, $f14
/* 3E4C3C E010A89C C7AE0068 */ lwc1 $f14, 0x68($sp)
/* 3E4C40 E010A8A0 08042A2D */ j .LE010A8B4
/* 3E4C44 E010A8A4 460E0100 */ add.s $f4, $f0, $f14
.LE010A8A8:
/* 3E4C48 E010A8A8 C6180050 */ lwc1 $f24, 0x50($s0)
/* 3E4C4C E010A8AC C61A0060 */ lwc1 $f26, 0x60($s0)
/* 3E4C50 E010A8B0 C6040070 */ lwc1 $f4, 0x70($s0)
.LE010A8B4:
/* 3E4C54 E010A8B4 C7AE0018 */ lwc1 $f14, 0x18($sp)
/* 3E4C58 E010A8B8 46187182 */ mul.s $f6, $f14, $f24
/* 3E4C5C E010A8BC 00000000 */ nop
/* 3E4C60 E010A8C0 C7AE0028 */ lwc1 $f14, 0x28($sp)
/* 3E4C64 E010A8C4 461A7402 */ mul.s $f16, $f14, $f26
/* 3E4C68 E010A8C8 00000000 */ nop
/* 3E4C6C E010A8CC C7AE0038 */ lwc1 $f14, 0x38($sp)
/* 3E4C70 E010A8D0 46047482 */ mul.s $f18, $f14, $f4
/* 3E4C74 E010A8D4 00000000 */ nop
/* 3E4C78 E010A8D8 C7AE001C */ lwc1 $f14, 0x1c($sp)
/* 3E4C7C E010A8DC 46187202 */ mul.s $f8, $f14, $f24
/* 3E4C80 E010A8E0 00000000 */ nop
/* 3E4C84 E010A8E4 C7AE002C */ lwc1 $f14, 0x2c($sp)
/* 3E4C88 E010A8E8 461A7302 */ mul.s $f12, $f14, $f26
/* 3E4C8C E010A8EC 00000000 */ nop
/* 3E4C90 E010A8F0 C7AE003C */ lwc1 $f14, 0x3c($sp)
/* 3E4C94 E010A8F4 46047502 */ mul.s $f20, $f14, $f4
/* 3E4C98 E010A8F8 00000000 */ nop
/* 3E4C9C E010A8FC C7AE0020 */ lwc1 $f14, 0x20($sp)
/* 3E4CA0 E010A900 46187282 */ mul.s $f10, $f14, $f24
/* 3E4CA4 E010A904 00000000 */ nop
/* 3E4CA8 E010A908 C7AE0030 */ lwc1 $f14, 0x30($sp)
/* 3E4CAC E010A90C 461A7382 */ mul.s $f14, $f14, $f26
/* 3E4CB0 E010A910 00000000 */ nop
/* 3E4CB4 E010A914 E7AE0070 */ swc1 $f14, 0x70($sp)
/* 3E4CB8 E010A918 C7AE0040 */ lwc1 $f14, 0x40($sp)
/* 3E4CBC E010A91C 46047582 */ mul.s $f22, $f14, $f4
/* 3E4CC0 E010A920 00000000 */ nop
/* 3E4CC4 E010A924 C7AE0024 */ lwc1 $f14, 0x24($sp)
/* 3E4CC8 E010A928 46187002 */ mul.s $f0, $f14, $f24
/* 3E4CCC E010A92C 00000000 */ nop
/* 3E4CD0 E010A930 C7AE0034 */ lwc1 $f14, 0x34($sp)
/* 3E4CD4 E010A934 461A7082 */ mul.s $f2, $f14, $f26
/* 3E4CD8 E010A938 00000000 */ nop
/* 3E4CDC E010A93C C7AE0044 */ lwc1 $f14, 0x44($sp)
/* 3E4CE0 E010A940 46047102 */ mul.s $f4, $f14, $f4
/* 3E4CE4 E010A944 00000000 */ nop
/* 3E4CE8 E010A948 46103180 */ add.s $f6, $f6, $f16
/* 3E4CEC E010A94C 46123180 */ add.s $f6, $f6, $f18
/* 3E4CF0 E010A950 460C4200 */ add.s $f8, $f8, $f12
/* 3E4CF4 E010A954 46144200 */ add.s $f8, $f8, $f20
/* 3E4CF8 E010A958 46020000 */ add.s $f0, $f0, $f2
/* 3E4CFC E010A95C 46040000 */ add.s $f0, $f0, $f4
/* 3E4D00 E010A960 C7AE0054 */ lwc1 $f14, 0x54($sp)
/* 3E4D04 E010A964 460E0080 */ add.s $f2, $f0, $f14
/* 3E4D08 E010A968 C7AE0048 */ lwc1 $f14, 0x48($sp)
/* 3E4D0C E010A96C 460E3100 */ add.s $f4, $f6, $f14
/* 3E4D10 E010A970 C7AE0070 */ lwc1 $f14, 0x70($sp)
/* 3E4D14 E010A974 460E5280 */ add.s $f10, $f10, $f14
/* 3E4D18 E010A978 C7AE004C */ lwc1 $f14, 0x4c($sp)
/* 3E4D1C E010A97C 460E4200 */ add.s $f8, $f8, $f14
/* 3E4D20 E010A980 46165280 */ add.s $f10, $f10, $f22
/* 3E4D24 E010A984 44807000 */ mtc1 $zero, $f14
/* 3E4D28 E010A988 00000000 */ nop
/* 3E4D2C E010A98C 460E1032 */ c.eq.s $f2, $f14
/* 3E4D30 E010A990 C7AE0050 */ lwc1 $f14, 0x50($sp)
/* 3E4D34 E010A994 450100AF */ bc1t .LE010AC54
/* 3E4D38 E010A998 460E5000 */ add.s $f0, $f10, $f14
/* 3E4D3C E010A99C 4602E083 */ div.s $f2, $f28, $f2
/* 3E4D40 E010A9A0 46022602 */ mul.s $f24, $f4, $f2
/* 3E4D44 E010A9A4 00000000 */ nop
/* 3E4D48 E010A9A8 46020102 */ mul.s $f4, $f0, $f2
/* 3E4D4C E010A9AC 00000000 */ nop
/* 3E4D50 E010A9B0 46004007 */ neg.s $f0, $f8
/* 3E4D54 E010A9B4 46020682 */ mul.s $f26, $f0, $f2
/* 3E4D58 E010A9B8 00000000 */ nop
/* 3E4D5C E010A9BC 3C01BF80 */ lui $at, 0xbf80
/* 3E4D60 E010A9C0 44817000 */ mtc1 $at, $f14
/* 3E4D64 E010A9C4 00000000 */ nop
/* 3E4D68 E010A9C8 460E203E */ c.le.s $f4, $f14
/* 3E4D6C E010A9CC 00000000 */ nop
/* 3E4D70 E010A9D0 450300A1 */ bc1tl .LE010AC58
/* 3E4D74 E010A9D4 26100004 */ addiu $s0, $s0, 4
/* 3E4D78 E010A9D8 460EC03E */ c.le.s $f24, $f14
/* 3E4D7C E010A9DC 00000000 */ nop
/* 3E4D80 E010A9E0 4503009D */ bc1tl .LE010AC58
/* 3E4D84 E010A9E4 26100004 */ addiu $s0, $s0, 4
/* 3E4D88 E010A9E8 4618E03E */ c.le.s $f28, $f24
/* 3E4D8C E010A9EC 00000000 */ nop
/* 3E4D90 E010A9F0 45030099 */ bc1tl .LE010AC58
/* 3E4D94 E010A9F4 26100004 */ addiu $s0, $s0, 4
/* 3E4D98 E010A9F8 460ED03E */ c.le.s $f26, $f14
/* 3E4D9C E010A9FC 00000000 */ nop
/* 3E4DA0 E010AA00 45030095 */ bc1tl .LE010AC58
/* 3E4DA4 E010AA04 26100004 */ addiu $s0, $s0, 4
/* 3E4DA8 E010AA08 461AE03E */ c.le.s $f28, $f26
/* 3E4DAC E010AA0C 00000000 */ nop
/* 3E4DB0 E010AA10 45030091 */ bc1tl .LE010AC58
/* 3E4DB4 E010AA14 26100004 */ addiu $s0, $s0, 4
/* 3E4DB8 E010AA18 8642000A */ lh $v0, 0xa($s2)
/* 3E4DBC E010AA1C 461CC000 */ add.s $f0, $f24, $f28
/* 3E4DC0 E010AA20 44821000 */ mtc1 $v0, $f2
/* 3E4DC4 E010AA24 00000000 */ nop
/* 3E4DC8 E010AA28 468010A0 */ cvt.s.w $f2, $f2
/* 3E4DCC E010AA2C 46020002 */ mul.s $f0, $f0, $f2
/* 3E4DD0 E010AA30 00000000 */ nop
/* 3E4DD4 E010AA34 3C013FE0 */ lui $at, 0x3fe0
/* 3E4DD8 E010AA38 44817800 */ mtc1 $at, $f15
/* 3E4DDC E010AA3C 44807000 */ mtc1 $zero, $f14
/* 3E4DE0 E010AA40 46000021 */ cvt.d.s $f0, $f0
/* 3E4DE4 E010AA44 462E0002 */ mul.d $f0, $f0, $f14
/* 3E4DE8 E010AA48 00000000 */ nop
/* 3E4DEC E010AA4C 8642000C */ lh $v0, 0xc($s2)
/* 3E4DF0 E010AA50 461CD080 */ add.s $f2, $f26, $f28
/* 3E4DF4 E010AA54 44822000 */ mtc1 $v0, $f4
/* 3E4DF8 E010AA58 00000000 */ nop
/* 3E4DFC E010AA5C 46802120 */ cvt.s.w $f4, $f4
/* 3E4E00 E010AA60 46041082 */ mul.s $f2, $f2, $f4
/* 3E4E04 E010AA64 00000000 */ nop
/* 3E4E08 E010AA68 460010A1 */ cvt.d.s $f2, $f2
/* 3E4E0C E010AA6C 462E1082 */ mul.d $f2, $f2, $f14
/* 3E4E10 E010AA70 00000000 */ nop
/* 3E4E14 E010AA74 8642000E */ lh $v0, 0xe($s2)
/* 3E4E18 E010AA78 46200620 */ cvt.s.d $f24, $f0
/* 3E4E1C E010AA7C 44820000 */ mtc1 $v0, $f0
/* 3E4E20 E010AA80 00000000 */ nop
/* 3E4E24 E010AA84 46800020 */ cvt.s.w $f0, $f0
/* 3E4E28 E010AA88 4600C600 */ add.s $f24, $f24, $f0
/* 3E4E2C E010AA8C 3C014080 */ lui $at, 0x4080
/* 3E4E30 E010AA90 44812000 */ mtc1 $at, $f4
/* 3E4E34 E010AA94 00000000 */ nop
/* 3E4E38 E010AA98 4604C602 */ mul.s $f24, $f24, $f4
/* 3E4E3C E010AA9C 00000000 */ nop
/* 3E4E40 E010AAA0 86420010 */ lh $v0, 0x10($s2)
/* 3E4E44 E010AAA4 44820000 */ mtc1 $v0, $f0
/* 3E4E48 E010AAA8 00000000 */ nop
/* 3E4E4C E010AAAC 46800020 */ cvt.s.w $f0, $f0
/* 3E4E50 E010AAB0 462016A0 */ cvt.s.d $f26, $f2
/* 3E4E54 E010AAB4 4600D680 */ add.s $f26, $f26, $f0
/* 3E4E58 E010AAB8 3C014100 */ lui $at, 0x4100
/* 3E4E5C E010AABC 44810000 */ mtc1 $at, $f0
/* 3E4E60 E010AAC0 8EC40000 */ lw $a0, ($s6)
/* 3E4E64 E010AAC4 4600C000 */ add.s $f0, $f24, $f0
/* 3E4E68 E010AAC8 24820008 */ addiu $v0, $a0, 8
/* 3E4E6C E010AACC AEC20000 */ sw $v0, ($s6)
/* 3E4E70 E010AAD0 4604D682 */ mul.s $f26, $f26, $f4
/* 3E4E74 E010AAD4 00000000 */ nop
/* 3E4E78 E010AAD8 4600038D */ trunc.w.s $f14, $f0
/* 3E4E7C E010AADC 44027000 */ mfc1 $v0, $f14
/* 3E4E80 E010AAE0 00000000 */ nop
/* 3E4E84 E010AAE4 00021400 */ sll $v0, $v0, 0x10
/* 3E4E88 E010AAE8 00021403 */ sra $v0, $v0, 0x10
/* 3E4E8C E010AAEC 18400005 */ blez $v0, .LE010AB04
/* 3E4E90 E010AAF0 30420FFF */ andi $v0, $v0, 0xfff
/* 3E4E94 E010AAF4 00021300 */ sll $v0, $v0, 0xc
/* 3E4E98 E010AAF8 3C03E400 */ lui $v1, 0xe400
/* 3E4E9C E010AAFC 08042AC2 */ j .LE010AB08
/* 3E4EA0 E010AB00 00431825 */ or $v1, $v0, $v1
.LE010AB04:
/* 3E4EA4 E010AB04 3C03E400 */ lui $v1, 0xe400
.LE010AB08:
/* 3E4EA8 E010AB08 3C014100 */ lui $at, 0x4100
/* 3E4EAC E010AB0C 44810000 */ mtc1 $at, $f0
/* 3E4EB0 E010AB10 00000000 */ nop
/* 3E4EB4 E010AB14 4600D000 */ add.s $f0, $f26, $f0
/* 3E4EB8 E010AB18 4600038D */ trunc.w.s $f14, $f0
/* 3E4EBC E010AB1C 44027000 */ mfc1 $v0, $f14
/* 3E4EC0 E010AB20 00000000 */ nop
/* 3E4EC4 E010AB24 00021400 */ sll $v0, $v0, 0x10
/* 3E4EC8 E010AB28 00021403 */ sra $v0, $v0, 0x10
/* 3E4ECC E010AB2C 18400004 */ blez $v0, .LE010AB40
/* 3E4ED0 E010AB30 AC830000 */ sw $v1, ($a0)
/* 3E4ED4 E010AB34 30420FFF */ andi $v0, $v0, 0xfff
/* 3E4ED8 E010AB38 00621025 */ or $v0, $v1, $v0
/* 3E4EDC E010AB3C AC820000 */ sw $v0, ($a0)
.LE010AB40:
/* 3E4EE0 E010AB40 4600C38D */ trunc.w.s $f14, $f24
/* 3E4EE4 E010AB44 44027000 */ mfc1 $v0, $f14
/* 3E4EE8 E010AB48 00000000 */ nop
/* 3E4EEC E010AB4C 00021400 */ sll $v0, $v0, 0x10
/* 3E4EF0 E010AB50 00021403 */ sra $v0, $v0, 0x10
/* 3E4EF4 E010AB54 18400004 */ blez $v0, .LE010AB68
/* 3E4EF8 E010AB58 24840004 */ addiu $a0, $a0, 4
/* 3E4EFC E010AB5C 30420FFF */ andi $v0, $v0, 0xfff
/* 3E4F00 E010AB60 08042ADB */ j .LE010AB6C
/* 3E4F04 E010AB64 00021B00 */ sll $v1, $v0, 0xc
.LE010AB68:
/* 3E4F08 E010AB68 0000182D */ daddu $v1, $zero, $zero
.LE010AB6C:
/* 3E4F0C E010AB6C 4600D38D */ trunc.w.s $f14, $f26
/* 3E4F10 E010AB70 44027000 */ mfc1 $v0, $f14
/* 3E4F14 E010AB74 00000000 */ nop
/* 3E4F18 E010AB78 00021400 */ sll $v0, $v0, 0x10
/* 3E4F1C E010AB7C 00021403 */ sra $v0, $v0, 0x10
/* 3E4F20 E010AB80 18400004 */ blez $v0, .LE010AB94
/* 3E4F24 E010AB84 AC830000 */ sw $v1, ($a0)
/* 3E4F28 E010AB88 30420FFF */ andi $v0, $v0, 0xfff
/* 3E4F2C E010AB8C 00621025 */ or $v0, $v1, $v0
/* 3E4F30 E010AB90 AC820000 */ sw $v0, ($a0)
.LE010AB94:
/* 3E4F34 E010AB94 8EC20000 */ lw $v0, ($s6)
/* 3E4F38 E010AB98 0040182D */ daddu $v1, $v0, $zero
/* 3E4F3C E010AB9C 24420008 */ addiu $v0, $v0, 8
/* 3E4F40 E010ABA0 AEC20000 */ sw $v0, ($s6)
/* 3E4F44 E010ABA4 3C02E100 */ lui $v0, 0xe100
/* 3E4F48 E010ABA8 AC620000 */ sw $v0, ($v1)
/* 3E4F4C E010ABAC 4600C38D */ trunc.w.s $f14, $f24
/* 3E4F50 E010ABB0 44027000 */ mfc1 $v0, $f14
/* 3E4F54 E010ABB4 00000000 */ nop
/* 3E4F58 E010ABB8 00021400 */ sll $v0, $v0, 0x10
/* 3E4F5C E010ABBC 00021403 */ sra $v0, $v0, 0x10
/* 3E4F60 E010ABC0 04410008 */ bgez $v0, .LE010ABE4
/* 3E4F64 E010ABC4 24630004 */ addiu $v1, $v1, 4
/* 3E4F68 E010ABC8 000221C0 */ sll $a0, $v0, 7
/* 3E4F6C E010ABCC 5C800001 */ bgtzl $a0, .LE010ABD4
/* 3E4F70 E010ABD0 0000202D */ daddu $a0, $zero, $zero
.LE010ABD4:
/* 3E4F74 E010ABD4 24020080 */ addiu $v0, $zero, 0x80
/* 3E4F78 E010ABD8 00441023 */ subu $v0, $v0, $a0
/* 3E4F7C E010ABDC 08042AFA */ j .LE010ABE8
/* 3E4F80 E010ABE0 00022C00 */ sll $a1, $v0, 0x10
.LE010ABE4:
/* 3E4F84 E010ABE4 3C050080 */ lui $a1, 0x80
.LE010ABE8:
/* 3E4F88 E010ABE8 44807000 */ mtc1 $zero, $f14
/* 3E4F8C E010ABEC 00000000 */ nop
/* 3E4F90 E010ABF0 460ED03C */ c.lt.s $f26, $f14
/* 3E4F94 E010ABF4 00000000 */ nop
/* 3E4F98 E010ABF8 4500000C */ bc1f .LE010AC2C
/* 3E4F9C E010ABFC 34A20080 */ ori $v0, $a1, 0x80
/* 3E4FA0 E010AC00 4600D38D */ trunc.w.s $f14, $f26
/* 3E4FA4 E010AC04 44027000 */ mfc1 $v0, $f14
/* 3E4FA8 E010AC08 00000000 */ nop
/* 3E4FAC E010AC0C 00021400 */ sll $v0, $v0, 0x10
/* 3E4FB0 E010AC10 00022243 */ sra $a0, $v0, 9
/* 3E4FB4 E010AC14 5C800001 */ bgtzl $a0, .LE010AC1C
/* 3E4FB8 E010AC18 0000202D */ daddu $a0, $zero, $zero
.LE010AC1C:
/* 3E4FBC E010AC1C 24020080 */ addiu $v0, $zero, 0x80
/* 3E4FC0 E010AC20 00441023 */ subu $v0, $v0, $a0
/* 3E4FC4 E010AC24 3042FFFF */ andi $v0, $v0, 0xffff
/* 3E4FC8 E010AC28 00A21025 */ or $v0, $a1, $v0
.LE010AC2C:
/* 3E4FCC E010AC2C AC620000 */ sw $v0, ($v1)
/* 3E4FD0 E010AC30 3C044000 */ lui $a0, 0x4000
/* 3E4FD4 E010AC34 8EC20000 */ lw $v0, ($s6)
/* 3E4FD8 E010AC38 34844000 */ ori $a0, $a0, 0x4000
/* 3E4FDC E010AC3C 0040182D */ daddu $v1, $v0, $zero
/* 3E4FE0 E010AC40 24420008 */ addiu $v0, $v0, 8
/* 3E4FE4 E010AC44 AEC20000 */ sw $v0, ($s6)
/* 3E4FE8 E010AC48 3C02F100 */ lui $v0, 0xf100
/* 3E4FEC E010AC4C AC620000 */ sw $v0, ($v1)
/* 3E4FF0 E010AC50 AC640004 */ sw $a0, 4($v1)
.LE010AC54:
/* 3E4FF4 E010AC54 26100004 */ addiu $s0, $s0, 4
.LE010AC58:
/* 3E4FF8 E010AC58 26B50001 */ addiu $s5, $s5, 1
/* 3E4FFC E010AC5C 26730003 */ addiu $s3, $s3, 3
/* 3E5000 E010AC60 02B7102A */ slt $v0, $s5, $s7
/* 3E5004 E010AC64 1440FEDE */ bnez $v0, .LE010A7E0
/* 3E5008 E010AC68 26940003 */ addiu $s4, $s4, 3
.LE010AC6C:
/* 3E500C E010AC6C 8FBF009C */ lw $ra, 0x9c($sp)
/* 3E5010 E010AC70 8FBE0098 */ lw $fp, 0x98($sp)
/* 3E5014 E010AC74 8FB70094 */ lw $s7, 0x94($sp)
/* 3E5018 E010AC78 8FB60090 */ lw $s6, 0x90($sp)
/* 3E501C E010AC7C 8FB5008C */ lw $s5, 0x8c($sp)
/* 3E5020 E010AC80 8FB40088 */ lw $s4, 0x88($sp)
/* 3E5024 E010AC84 8FB30084 */ lw $s3, 0x84($sp)
/* 3E5028 E010AC88 8FB20080 */ lw $s2, 0x80($sp)
/* 3E502C E010AC8C 8FB1007C */ lw $s1, 0x7c($sp)
/* 3E5030 E010AC90 8FB00078 */ lw $s0, 0x78($sp)
/* 3E5034 E010AC94 D7BE00C8 */ ldc1 $f30, 0xc8($sp)
/* 3E5038 E010AC98 D7BC00C0 */ ldc1 $f28, 0xc0($sp)
/* 3E503C E010AC9C D7BA00B8 */ ldc1 $f26, 0xb8($sp)
/* 3E5040 E010ACA0 D7B800B0 */ ldc1 $f24, 0xb0($sp)
/* 3E5044 E010ACA4 D7B600A8 */ ldc1 $f22, 0xa8($sp)
/* 3E5048 E010ACA8 D7B400A0 */ ldc1 $f20, 0xa0($sp)
/* 3E504C E010ACAC 03E00008 */ jr $ra
/* 3E5050 E010ACB0 27BD00D0 */ addiu $sp, $sp, 0xd0
/* 3E5054 E010ACB4 00000000 */ nop
/* 3E5058 E010ACB8 00000000 */ nop
/* 3E505C E010ACBC 00000000 */ nop

View File

@ -1,71 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_802DE8DC
/* 1019CC 802DE8DC 3C03802E */ lui $v1, %hi(SpriteInstances)
/* 1019D0 802DE8E0 2463FA48 */ addiu $v1, $v1, %lo(SpriteInstances)
/* 1019D4 802DE8E4 00041080 */ sll $v0, $a0, 2
/* 1019D8 802DE8E8 00441021 */ addu $v0, $v0, $a0
/* 1019DC 802DE8EC 00021080 */ sll $v0, $v0, 2
/* 1019E0 802DE8F0 00434021 */ addu $t0, $v0, $v1
/* 1019E4 802DE8F4 8D030004 */ lw $v1, 4($t0)
/* 1019E8 802DE8F8 10600035 */ beqz $v1, .L802DE9D0
/* 1019EC 802DE8FC 8FAB0010 */ lw $t3, 0x10($sp)
/* 1019F0 802DE900 910A000F */ lbu $t2, 0xf($t0)
/* 1019F4 802DE904 240200FF */ addiu $v0, $zero, 0xff
/* 1019F8 802DE908 11420031 */ beq $t2, $v0, .L802DE9D0
/* 1019FC 802DE90C 0060202D */ daddu $a0, $v1, $zero
/* 101A00 802DE910 000A1080 */ sll $v0, $t2, 2
/* 101A04 802DE914 8D030008 */ lw $v1, 8($t0)
/* 101A08 802DE918 24420010 */ addiu $v0, $v0, 0x10
/* 101A0C 802DE91C 00621821 */ addu $v1, $v1, $v0
/* 101A10 802DE920 8C680000 */ lw $t0, ($v1)
/* 101A14 802DE924 8C830000 */ lw $v1, ($a0)
/* 101A18 802DE928 2402FFFF */ addiu $v0, $zero, -1
/* 101A1C 802DE92C 10620028 */ beq $v1, $v0, .L802DE9D0
/* 101A20 802DE930 0000482D */ daddu $t1, $zero, $zero
/* 101A24 802DE934 0040182D */ daddu $v1, $v0, $zero
.L802DE938:
/* 101A28 802DE938 1525001D */ bne $t1, $a1, .L802DE9B0
/* 101A2C 802DE93C 25290001 */ addiu $t1, $t1, 1
/* 101A30 802DE940 8D030000 */ lw $v1, ($t0)
/* 101A34 802DE944 8C840000 */ lw $a0, ($a0)
/* 101A38 802DE948 84620006 */ lh $v0, 6($v1)
/* 101A3C 802DE94C C4800028 */ lwc1 $f0, 0x28($a0)
/* 101A40 802DE950 44821000 */ mtc1 $v0, $f2
/* 101A44 802DE954 00000000 */ nop
/* 101A48 802DE958 468010A0 */ cvt.s.w $f2, $f2
/* 101A4C 802DE95C 46020000 */ add.s $f0, $f0, $f2
/* 101A50 802DE960 4600010D */ trunc.w.s $f4, $f0
/* 101A54 802DE964 E4C40000 */ swc1 $f4, ($a2)
/* 101A58 802DE968 84620008 */ lh $v0, 8($v1)
/* 101A5C 802DE96C C480002C */ lwc1 $f0, 0x2c($a0)
/* 101A60 802DE970 44821000 */ mtc1 $v0, $f2
/* 101A64 802DE974 00000000 */ nop
/* 101A68 802DE978 468010A0 */ cvt.s.w $f2, $f2
/* 101A6C 802DE97C 46020000 */ add.s $f0, $f0, $f2
/* 101A70 802DE980 4600010D */ trunc.w.s $f4, $f0
/* 101A74 802DE984 E4E40000 */ swc1 $f4, ($a3)
/* 101A78 802DE988 8462000A */ lh $v0, 0xa($v1)
/* 101A7C 802DE98C C4820030 */ lwc1 $f2, 0x30($a0)
/* 101A80 802DE990 44820000 */ mtc1 $v0, $f0
/* 101A84 802DE994 00000000 */ nop
/* 101A88 802DE998 46800020 */ cvt.s.w $f0, $f0
/* 101A8C 802DE99C 46001080 */ add.s $f2, $f2, $f0
/* 101A90 802DE9A0 4600110D */ trunc.w.s $f4, $f2
/* 101A94 802DE9A4 E5640000 */ swc1 $f4, ($t3)
/* 101A98 802DE9A8 03E00008 */ jr $ra
/* 101A9C 802DE9AC 0000102D */ daddu $v0, $zero, $zero
.L802DE9B0:
/* 101AA0 802DE9B0 8D020000 */ lw $v0, ($t0)
/* 101AA4 802DE9B4 10430002 */ beq $v0, $v1, .L802DE9C0
/* 101AA8 802DE9B8 24840004 */ addiu $a0, $a0, 4
/* 101AAC 802DE9BC 25080004 */ addiu $t0, $t0, 4
.L802DE9C0:
/* 101AB0 802DE9C0 8C820000 */ lw $v0, ($a0)
/* 101AB4 802DE9C4 1443FFDC */ bne $v0, $v1, .L802DE938
/* 101AB8 802DE9C8 00000000 */ nop
/* 101ABC 802DE9CC 2402FFFF */ addiu $v0, $zero, -1
.L802DE9D0:
/* 101AC0 802DE9D0 03E00008 */ jr $ra
/* 101AC4 802DE9D4 00000000 */ nop

View File

@ -1,119 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel spr_update_player_sprite
/* 100B7C 802DDA8C 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 100B80 802DDA90 AFB70034 */ sw $s7, 0x34($sp)
/* 100B84 802DDA94 0080B82D */ daddu $s7, $a0, $zero
/* 100B88 802DDA98 AFB5002C */ sw $s5, 0x2c($sp)
/* 100B8C 802DDA9C 00A0A82D */ daddu $s5, $a1, $zero
/* 100B90 802DDAA0 00151403 */ sra $v0, $s5, 0x10
/* 100B94 802DDAA4 304200FF */ andi $v0, $v0, 0xff
/* 100B98 802DDAA8 AFB40028 */ sw $s4, 0x28($sp)
/* 100B9C 802DDAAC 2454FFFF */ addiu $s4, $v0, -1
/* 100BA0 802DDAB0 AFB20020 */ sw $s2, 0x20($sp)
/* 100BA4 802DDAB4 32F200FF */ andi $s2, $s7, 0xff
/* 100BA8 802DDAB8 3C03802E */ lui $v1, %hi(spr_playerCurrentAnimInfo)
/* 100BAC 802DDABC 2463F588 */ addiu $v1, $v1, %lo(spr_playerCurrentAnimInfo)
/* 100BB0 802DDAC0 00121040 */ sll $v0, $s2, 1
/* 100BB4 802DDAC4 00521021 */ addu $v0, $v0, $s2
/* 100BB8 802DDAC8 F7B40040 */ sdc1 $f20, 0x40($sp)
/* 100BBC 802DDACC 4486A000 */ mtc1 $a2, $f20
/* 100BC0 802DDAD0 00021080 */ sll $v0, $v0, 2
/* 100BC4 802DDAD4 AFB00018 */ sw $s0, 0x18($sp)
/* 100BC8 802DDAD8 00438021 */ addu $s0, $v0, $v1
/* 100BCC 802DDADC AFBF0038 */ sw $ra, 0x38($sp)
/* 100BD0 802DDAE0 AFB60030 */ sw $s6, 0x30($sp)
/* 100BD4 802DDAE4 AFB30024 */ sw $s3, 0x24($sp)
/* 100BD8 802DDAE8 AFB1001C */ sw $s1, 0x1c($sp)
/* 100BDC 802DDAEC 8E020000 */ lw $v0, ($s0)
/* 100BE0 802DDAF0 3C01802E */ lui $at, %hi(D_802DF57C)
/* 100BE4 802DDAF4 AC34F57C */ sw $s4, %lo(D_802DF57C)($at)
/* 100BE8 802DDAF8 14400013 */ bnez $v0, .L802DDB48
/* 100BEC 802DDAFC 32B600FF */ andi $s6, $s5, 0xff
/* 100BF0 802DDB00 3C04802E */ lui $a0, %hi(spr_playerMaxComponents)
/* 100BF4 802DDB04 8C84F580 */ lw $a0, %lo(spr_playerMaxComponents)($a0)
/* 100BF8 802DDB08 0C0B7CB6 */ jal spr_allocate_components
/* 100BFC 802DDB0C 00000000 */ nop
/* 100C00 802DDB10 0040882D */ daddu $s1, $v0, $zero
/* 100C04 802DDB14 AE110000 */ sw $s1, ($s0)
/* 100C08 802DDB18 8E230000 */ lw $v1, ($s1)
/* 100C0C 802DDB1C 2402FFFF */ addiu $v0, $zero, -1
/* 100C10 802DDB20 10620009 */ beq $v1, $v0, .L802DDB48
/* 100C14 802DDB24 0040982D */ daddu $s3, $v0, $zero
.L802DDB28:
/* 100C18 802DDB28 8E300000 */ lw $s0, ($s1)
/* 100C1C 802DDB2C 0C04E9C1 */ jal func_8013A704
/* 100C20 802DDB30 24040001 */ addiu $a0, $zero, 1
/* 100C24 802DDB34 26310004 */ addiu $s1, $s1, 4
/* 100C28 802DDB38 AE02004C */ sw $v0, 0x4c($s0)
/* 100C2C 802DDB3C 8E220000 */ lw $v0, ($s1)
/* 100C30 802DDB40 1453FFF9 */ bne $v0, $s3, .L802DDB28
/* 100C34 802DDB44 00000000 */ nop
.L802DDB48:
/* 100C38 802DDB48 00141080 */ sll $v0, $s4, 2
/* 100C3C 802DDB4C 3C03802E */ lui $v1, %hi(spr_playerCurrentAnimInfo)
/* 100C40 802DDB50 2463F588 */ addiu $v1, $v1, %lo(spr_playerCurrentAnimInfo)
/* 100C44 802DDB54 3C05802E */ lui $a1, %hi(spr_playerSprites)
/* 100C48 802DDB58 00A22821 */ addu $a1, $a1, $v0
/* 100C4C 802DDB5C 8CA5F548 */ lw $a1, %lo(spr_playerSprites)($a1)
/* 100C50 802DDB60 00121040 */ sll $v0, $s2, 1
/* 100C54 802DDB64 00521021 */ addu $v0, $v0, $s2
/* 100C58 802DDB68 00021080 */ sll $v0, $v0, 2
/* 100C5C 802DDB6C 00438021 */ addu $s0, $v0, $v1
/* 100C60 802DDB70 8E110000 */ lw $s1, ($s0)
/* 100C64 802DDB74 10A00026 */ beqz $a1, .L802DDC10
/* 100C68 802DDB78 0000102D */ daddu $v0, $zero, $zero
/* 100C6C 802DDB7C 00161080 */ sll $v0, $s6, 2
/* 100C70 802DDB80 24420010 */ addiu $v0, $v0, 0x10
/* 100C74 802DDB84 8CB40000 */ lw $s4, ($a1)
/* 100C78 802DDB88 00A22821 */ addu $a1, $a1, $v0
/* 100C7C 802DDB8C 8CB30000 */ lw $s3, ($a1)
/* 100C80 802DDB90 0C0B7623 */ jal spr_set_anim_timescale
/* 100C84 802DDB94 4600A306 */ mov.s $f12, $f20
/* 100C88 802DDB98 06E00007 */ bltz $s7, .L802DDBB8
/* 100C8C 802DDB9C 3C02FEFF */ lui $v0, 0xfeff
/* 100C90 802DDBA0 3442FFFF */ ori $v0, $v0, 0xffff
/* 100C94 802DDBA4 8E030004 */ lw $v1, 4($s0)
/* 100C98 802DDBA8 02A22024 */ and $a0, $s5, $v0
/* 100C9C 802DDBAC 00621824 */ and $v1, $v1, $v0
/* 100CA0 802DDBB0 10830005 */ beq $a0, $v1, .L802DDBC8
/* 100CA4 802DDBB4 00000000 */ nop
.L802DDBB8:
/* 100CA8 802DDBB8 0220202D */ daddu $a0, $s1, $zero
/* 100CAC 802DDBBC 0C0B7608 */ jal spr_init_anim_state
/* 100CB0 802DDBC0 0260282D */ daddu $a1, $s3, $zero
/* 100CB4 802DDBC4 AE000008 */ sw $zero, 8($s0)
.L802DDBC8:
/* 100CB8 802DDBC8 3C02802E */ lui $v0, %hi(spr_playerCurrentAnimInfo)
/* 100CBC 802DDBCC 2442F588 */ addiu $v0, $v0, %lo(spr_playerCurrentAnimInfo)
/* 100CC0 802DDBD0 00121840 */ sll $v1, $s2, 1
/* 100CC4 802DDBD4 00721821 */ addu $v1, $v1, $s2
/* 100CC8 802DDBD8 00031880 */ sll $v1, $v1, 2
/* 100CCC 802DDBDC 00628021 */ addu $s0, $v1, $v0
/* 100CD0 802DDBE0 3C024000 */ lui $v0, 0x4000
/* 100CD4 802DDBE4 02E21024 */ and $v0, $s7, $v0
/* 100CD8 802DDBE8 14400008 */ bnez $v0, .L802DDC0C
/* 100CDC 802DDBEC AE150004 */ sw $s5, 4($s0)
/* 100CE0 802DDBF0 0220282D */ daddu $a1, $s1, $zero
/* 100CE4 802DDBF4 0260302D */ daddu $a2, $s3, $zero
/* 100CE8 802DDBF8 AFA00010 */ sw $zero, 0x10($sp)
/* 100CEC 802DDBFC 8E040008 */ lw $a0, 8($s0)
/* 100CF0 802DDC00 0C0B75B7 */ jal spr_component_update
/* 100CF4 802DDC04 0280382D */ daddu $a3, $s4, $zero
/* 100CF8 802DDC08 AE020008 */ sw $v0, 8($s0)
.L802DDC0C:
/* 100CFC 802DDC0C 8E020008 */ lw $v0, 8($s0)
.L802DDC10:
/* 100D00 802DDC10 8FBF0038 */ lw $ra, 0x38($sp)
/* 100D04 802DDC14 8FB70034 */ lw $s7, 0x34($sp)
/* 100D08 802DDC18 8FB60030 */ lw $s6, 0x30($sp)
/* 100D0C 802DDC1C 8FB5002C */ lw $s5, 0x2c($sp)
/* 100D10 802DDC20 8FB40028 */ lw $s4, 0x28($sp)
/* 100D14 802DDC24 8FB30024 */ lw $s3, 0x24($sp)
/* 100D18 802DDC28 8FB20020 */ lw $s2, 0x20($sp)
/* 100D1C 802DDC2C 8FB1001C */ lw $s1, 0x1c($sp)
/* 100D20 802DDC30 8FB00018 */ lw $s0, 0x18($sp)
/* 100D24 802DDC34 D7B40040 */ ldc1 $f20, 0x40($sp)
/* 100D28 802DDC38 03E00008 */ jr $ra
/* 100D2C 802DDC3C 27BD0048 */ addiu $sp, $sp, 0x48

View File

@ -1,82 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel spr_update_sprite
/* 10139C 802DE2AC 27BDFFC0 */ addiu $sp, $sp, -0x40
/* 1013A0 802DE2B0 AFB5002C */ sw $s5, 0x2c($sp)
/* 1013A4 802DE2B4 0080A82D */ daddu $s5, $a0, $zero
/* 1013A8 802DE2B8 AFB20020 */ sw $s2, 0x20($sp)
/* 1013AC 802DE2BC 32B200FF */ andi $s2, $s5, 0xff
/* 1013B0 802DE2C0 3C03802E */ lui $v1, %hi(SpriteInstances)
/* 1013B4 802DE2C4 2463FA48 */ addiu $v1, $v1, %lo(SpriteInstances)
/* 1013B8 802DE2C8 00121080 */ sll $v0, $s2, 2
/* 1013BC 802DE2CC 00521021 */ addu $v0, $v0, $s2
/* 1013C0 802DE2D0 00021080 */ sll $v0, $v0, 2
/* 1013C4 802DE2D4 AFB00018 */ sw $s0, 0x18($sp)
/* 1013C8 802DE2D8 00438021 */ addu $s0, $v0, $v1
/* 1013CC 802DE2DC AFB1001C */ sw $s1, 0x1c($sp)
/* 1013D0 802DE2E0 30B100FF */ andi $s1, $a1, 0xff
/* 1013D4 802DE2E4 00111080 */ sll $v0, $s1, 2
/* 1013D8 802DE2E8 24420010 */ addiu $v0, $v0, 0x10
/* 1013DC 802DE2EC 00052A03 */ sra $a1, $a1, 8
/* 1013E0 802DE2F0 AFB40028 */ sw $s4, 0x28($sp)
/* 1013E4 802DE2F4 AFBF0038 */ sw $ra, 0x38($sp)
/* 1013E8 802DE2F8 AFB70034 */ sw $s7, 0x34($sp)
/* 1013EC 802DE2FC AFB60030 */ sw $s6, 0x30($sp)
/* 1013F0 802DE300 AFB30024 */ sw $s3, 0x24($sp)
/* 1013F4 802DE304 8E030008 */ lw $v1, 8($s0)
/* 1013F8 802DE308 8E130004 */ lw $s3, 4($s0)
/* 1013FC 802DE30C 44866000 */ mtc1 $a2, $f12
/* 101400 802DE310 8C770000 */ lw $s7, ($v1)
/* 101404 802DE314 00621821 */ addu $v1, $v1, $v0
/* 101408 802DE318 8C760000 */ lw $s6, ($v1)
/* 10140C 802DE31C 0C0B7623 */ jal spr_set_anim_timescale
/* 101410 802DE320 30B400FF */ andi $s4, $a1, 0xff
/* 101414 802DE324 06A00004 */ bltz $s5, .L802DE338
/* 101418 802DE328 0260202D */ daddu $a0, $s3, $zero
/* 10141C 802DE32C 9202000F */ lbu $v0, 0xf($s0)
/* 101420 802DE330 10510008 */ beq $v0, $s1, .L802DE354
/* 101424 802DE334 3C024000 */ lui $v0, 0x4000
.L802DE338:
/* 101428 802DE338 0C0B7608 */ jal spr_init_anim_state
/* 10142C 802DE33C 02C0282D */ daddu $a1, $s6, $zero
/* 101430 802DE340 00141200 */ sll $v0, $s4, 8
/* 101434 802DE344 00511025 */ or $v0, $v0, $s1
/* 101438 802DE348 AE02000C */ sw $v0, 0xc($s0)
/* 10143C 802DE34C AE000010 */ sw $zero, 0x10($s0)
/* 101440 802DE350 3C024000 */ lui $v0, 0x4000
.L802DE354:
/* 101444 802DE354 02A21024 */ and $v0, $s5, $v0
/* 101448 802DE358 1440000F */ bnez $v0, .L802DE398
/* 10144C 802DE35C 00121080 */ sll $v0, $s2, 2
/* 101450 802DE360 0260282D */ daddu $a1, $s3, $zero
/* 101454 802DE364 3C02802E */ lui $v0, %hi(SpriteInstances)
/* 101458 802DE368 2442FA48 */ addiu $v0, $v0, %lo(SpriteInstances)
/* 10145C 802DE36C 00128080 */ sll $s0, $s2, 2
/* 101460 802DE370 02128021 */ addu $s0, $s0, $s2
/* 101464 802DE374 00108080 */ sll $s0, $s0, 2
/* 101468 802DE378 02028021 */ addu $s0, $s0, $v0
/* 10146C 802DE37C 02C0302D */ daddu $a2, $s6, $zero
/* 101470 802DE380 AFB40010 */ sw $s4, 0x10($sp)
/* 101474 802DE384 8E040010 */ lw $a0, 0x10($s0)
/* 101478 802DE388 0C0B75B7 */ jal spr_component_update
/* 10147C 802DE38C 02E0382D */ daddu $a3, $s7, $zero
/* 101480 802DE390 AE020010 */ sw $v0, 0x10($s0)
/* 101484 802DE394 00121080 */ sll $v0, $s2, 2
.L802DE398:
/* 101488 802DE398 00521021 */ addu $v0, $v0, $s2
/* 10148C 802DE39C 00021080 */ sll $v0, $v0, 2
/* 101490 802DE3A0 3C01802E */ lui $at, %hi(SpriteInstances + 0x10)
/* 101494 802DE3A4 00220821 */ addu $at, $at, $v0
/* 101498 802DE3A8 8C22FA58 */ lw $v0, %lo(SpriteInstances + 0x10)($at)
/* 10149C 802DE3AC 8FBF0038 */ lw $ra, 0x38($sp)
/* 1014A0 802DE3B0 8FB70034 */ lw $s7, 0x34($sp)
/* 1014A4 802DE3B4 8FB60030 */ lw $s6, 0x30($sp)
/* 1014A8 802DE3B8 8FB5002C */ lw $s5, 0x2c($sp)
/* 1014AC 802DE3BC 8FB40028 */ lw $s4, 0x28($sp)
/* 1014B0 802DE3C0 8FB30024 */ lw $s3, 0x24($sp)
/* 1014B4 802DE3C4 8FB20020 */ lw $s2, 0x20($sp)
/* 1014B8 802DE3C8 8FB1001C */ lw $s1, 0x1c($sp)
/* 1014BC 802DE3CC 8FB00018 */ lw $s0, 0x18($sp)
/* 1014C0 802DE3D0 03E00008 */ jr $ra
/* 1014C4 802DE3D4 27BD0040 */ addiu $sp, $sp, 0x40

View File

@ -27153,7 +27153,7 @@ D_802DFE48 = 0x802DFE48; // type:data
D_802DFE9C = 0x802DFE9C; // type:data
D_802DFEA0 = 0x802DFEA0; // type:data
SpriteUpdateNotifyValue = 0x802DFEAC; // type:data
D_802DFEB0 = 0x802DFEB0; // type:data
spr_asset_entry = 0x802DFEB0; // type:data
D_802DFEB8 = 0x802DFEB8; // type:data
PlayerRasterSetsLoaded = 0x802E004C; // type:data
PlayerRasterBufferSetOffsets = 0x802E0050; // type:data