More overworld partner functions and other various functions (#680)

* decomp appendGfx_player, fix warnings in 77480.c file

* small style fixes

* fix action state enum and make use of enum

* merge master

* decomp some mario rendering functions

* run coverage.py

* review changes

* use decimal in func arg

* 891b0 and sprite functions

* finish lakilester world file

* run coverage.py

* remove duplication declarations

* requested changes and remove some warnings from sprite.c

* ...run coverage.py

* decomp 2 funcs in throw_spiny.c

* throw_spiny_appendGfx

* match spiny throw.c and remaining kooper overworld functions

* cleanup throw_spiny.c and decomp spin.c

* combine variable declarations in spin.c

* run coverage.py

* more spin.c cleanup

* req changes

Co-authored-by: Ethan Roseman <ethteck@gmail.com>
This commit is contained in:
Rainchus 2022-04-11 20:59:20 -05:00 committed by GitHub
parent d6ac1a490b
commit 93d8c4989b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 470 additions and 2393 deletions

View File

@ -128,7 +128,7 @@ FX_MAIN(snowman_doll_main);
FX_MAIN(fright_jar_main);
FX_MAIN(stop_watch_main);
FX_MAIN(fx_63_main);
FX_MAIN(throw_spiny_main);
EffectInstance* throw_spiny_main(s32, f32, f32, f32, f32, f32, f32, f32, s32);
FX_MAIN(fx_65_main);
FX_MAIN(tubba_heart_attack_main);
FX_MAIN(whirlwind_main);

View File

@ -86,16 +86,16 @@ void balloon_render(EffectInstance* effect) {
void balloon_appendGfx(void* effect) {
Matrix4f sp18;
Matrix4f sp58;
BalloonFXData* part = ((EffectInstance*)effect)->data;
s32 idx = part->unk_00;
BalloonFXData* data = ((EffectInstance*)effect)->data;
s32 idx = data->unk_00;
gDPPipeSync(gMasterGfxPos++);
gSPSegment(gMasterGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->graphics->data));
shim_guTranslateF(sp18, part->unk_04, part->unk_08, part->unk_0C);
shim_guTranslateF(sp18, data->unk_04, data->unk_08, data->unk_0C);
shim_guRotateF(sp58, -gCameras[gCurrentCameraID].currentYaw, 0.0f, 1.0f, 0.0f);
shim_guMtxCatF(sp58, sp18, sp18);
shim_guScaleF(sp58, part->unk_18, part->unk_18, 1.0f);
shim_guScaleF(sp58, data->unk_18, data->unk_18, 1.0f);
shim_guMtxCatF(sp58, sp18, sp18);
shim_guMtxF2L(sp18, &gDisplayContext->matrixStack[gMatrixListPos]);

View File

@ -1,14 +1,172 @@
#include "common.h"
#include "effects_internal.h"
#include "effects.h"
void throw_spiny_appendGfx(void* effect);
INCLUDE_ASM(s32, "effects/throw_spiny", throw_spiny_main);
void throw_spiny_init(EffectInstance* effect);
void throw_spiny_update(EffectInstance* effect);
void throw_spiny_render(EffectInstance* effect);
void throw_spiny_init(void) {
extern Gfx D_09000800[];
extern Gfx D_090008D8[];
extern Gfx D_090009F0[];
Gfx* D_E00C8710[2] = { D_09000800, D_090008D8 };
u8 D_E00C8718[8] = { 110, 150, 130, 110, 100, 95, 100, 0 };
u8 D_E00C8720[8] = { 80, 60, 80, 100, 120, 110, 100, 0 };
typedef struct ThrowSpinyFXData {
/* 0x00 */ s32 unk_00;
/* 0x04 */ Vec3f pos;
/* 0x10 */ f32 unk_10;
/* 0x14 */ f32 unk_14;
/* 0x18 */ f32 unk_18;
/* 0x1C */ f32 unk_1C;
/* 0x20 */ f32 unk_20;
/* 0x24 */ f32 unk_24;
/* 0x28 */ s32 life;
/* 0x2C */ s32 lifeDuration;
/* 0x30 */ s32 unk_30;
/* 0x34 */ s32 unk_34;
/* 0x38 */ s32 unk_38;
/* 0x3C */ s32 rgba;
/* 0x40 */ f32 unk_40;
/* 0x44 */ f32 unk_44;
/* 0x48 */ f32 gravity;
/* 0x4C */ f32 unk_4C;
/* 0x50 */ f32 yaw;
/* 0x54 */ f32 rotationSpeed;
/* 0x58 */ f32 xScale;
/* 0x5C */ f32 yScale;
/* 0x60 */ u32 state;
/* 0x64 */ s32 unk_64;
/* 0x68 */ s32 timeUntilFall; //how long until spiny falls to ground?
} ThrowSpinyFXData; //sizeof 0x6C
//during spiny surge
EffectInstance* throw_spiny_main(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, s32 time) {
EffectBlueprint bp;
EffectBlueprint* bpPtr = &bp;
EffectInstance* effect;
ThrowSpinyFXData* spinyObject;
s32 numParts = 1;
f32 temp_f4, temp_f8, gravity;
bp.init = throw_spiny_init;
bp.update = throw_spiny_update;
bp.renderWorld = throw_spiny_render;
bp.unk_00 = 0;
bp.unk_14 = NULL;
bp.effectID = EFFECT_THROW_SPINY;
effect = (EffectInstance*)shim_create_effect_instance(bpPtr);
effect->numParts = numParts;
spinyObject = effect->data = shim_general_heap_malloc(numParts * sizeof(*spinyObject));
ASSERT(effect->data != NULL);
spinyObject->unk_00 = arg0;
spinyObject->lifeDuration = 0;
if (time <= 0) {
spinyObject->life = 1000;
} else {
spinyObject->life = time + 60;
}
temp_f8 = arg5 - arg2;
temp_f4 = time;
gravity = (temp_f8 / temp_f4) - (time * -0.10000000149011612); //TODO: fix this weird number
spinyObject->timeUntilFall = time;
spinyObject->rgba = 255;
spinyObject->unk_10 = arg1;
spinyObject->unk_14 = arg2;
spinyObject->unk_18 = arg3;
spinyObject->unk_1C = arg4;
spinyObject->unk_20 = arg5;
spinyObject->unk_24 = arg6;
spinyObject->unk_44 = (arg4 - arg1) / temp_f4;
spinyObject->unk_4C = (arg6 - arg3) / temp_f4;
spinyObject->pos.x = arg1;
spinyObject->pos.y = arg2;
spinyObject->pos.z = arg3;
spinyObject->gravity = gravity;
if (temp_f8 < 0.0f) {
spinyObject->unk_64 = 1;
} else {
spinyObject->unk_64 = 0;
}
spinyObject->unk_40 = arg7;
spinyObject->unk_30 = 70;
spinyObject->unk_34 = 180;
spinyObject->unk_38 = 120;
spinyObject->yaw = shim_rand_int(360);
spinyObject->rotationSpeed = shim_rand_int(10) + 5;
spinyObject->state = -1;
spinyObject->xScale = 1.0f;
spinyObject->yScale = 1.0f;
return effect;
}
INCLUDE_ASM(s32, "effects/throw_spiny", throw_spiny_update);
void throw_spiny_init(EffectInstance* effect) {
}
void throw_spiny_update(EffectInstance* effectInstance) {
ThrowSpinyFXData* spinyObject = effectInstance->data;
u32 state;
f32 gravity;
s32 lifeDuration;
if (effectInstance->flags & EFFECT_INSTANCE_FLAGS_10) {
effectInstance->flags &= ~EFFECT_INSTANCE_FLAGS_10;
spinyObject->life = 16;
}
if (spinyObject->life < 1000) {
spinyObject->life--;
}
spinyObject->lifeDuration++;
if (spinyObject->life < 0) {
shim_remove_effect(effectInstance);
return;
}
lifeDuration = spinyObject->lifeDuration;
state = spinyObject->state;
if (state < 7) {
spinyObject->xScale = D_E00C8718[state] * 0.01f;
spinyObject->yScale = D_E00C8720[state] * 0.01f;
spinyObject->state += 1;
spinyObject->yaw -= 40.0f;
} else {
spinyObject->gravity += -0.2f;
spinyObject->pos.x += spinyObject->unk_44;
spinyObject->pos.y += spinyObject->gravity;
spinyObject->pos.z += spinyObject->unk_4C;
spinyObject->yaw += spinyObject->rotationSpeed;
}
if ((lifeDuration - 1) == spinyObject->timeUntilFall) {
spinyObject->state = 0;
spinyObject->gravity = -spinyObject->gravity;
spinyObject->unk_44 = spinyObject->unk_44;
spinyObject->rotationSpeed = -4.0f;
return;
}
gravity = spinyObject->gravity;
if ((gravity < 0.0f) && (spinyObject->pos.y < 100.0 / 7.0)) {
spinyObject->pos.y = 100.0f / 7.0f;
spinyObject->rotationSpeed = -20.0f;
spinyObject->gravity = gravity - gravity;
}
}
void throw_spiny_render(EffectInstance* effect) {
RenderTask renderTask;
@ -26,4 +184,29 @@ void throw_spiny_render(EffectInstance* effect) {
void func_E00C844C(void) {
}
INCLUDE_ASM(s32, "effects/throw_spiny", throw_spiny_appendGfx);
void throw_spiny_appendGfx(void* effect) {
Matrix4f sp18;
Matrix4f sp58;
Camera* camera = &gCameras[gCurrentCameraID];
ThrowSpinyFXData* data = ((EffectInstance*)effect)->data;
s32 temp_s5 = data->rgba;
s32 temp_s6 = data->unk_00;
f32 scale = data->unk_40 * SPRITE_PIXEL_SCALE;
gDPPipeSync(gMasterGfxPos++);
gSPSegment(gMasterGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->graphics->data));
shim_guTranslateF(sp18, data->pos.x, data->pos.y, data->pos.z);
shim_guScaleF(sp58, scale * data->xScale, scale * data->yScale, scale);
shim_guMtxCatF(sp58, sp18, sp18);
shim_guRotateF(sp58, data->yaw, 0.0f, 0.0f, 1.0f);
shim_guMtxCatF(sp58, sp18, sp18);
shim_guMtxF2L(sp18, &gDisplayContext->matrixStack[gMatrixListPos]);
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(gMasterGfxPos++, camera->unkMatrix, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, data->unk_30, data->unk_34, data->unk_38, temp_s5);
gSPDisplayList(gMasterGfxPos++, D_E00C8710[temp_s6]);
gSPDisplayList(gMasterGfxPos++, D_090009F0);
gSPPopMatrix(gMasterGfxPos++, G_MTX_MODELVIEW);
}

View File

@ -1,3 +1,258 @@
#include "common.h"
#include "effects.h"
INCLUDE_ASM(s32, "world/action/spin", func_802B6000_E25D60);
extern s32 gSpinHistoryBufferPos;
extern s32 gSpinHistoryPosY[5];
extern s32 gSpinHistoryPosX[5];
extern s32 gSpinHistoryPosZ[5];
extern s16 gSpinHistoryPosAngle[5];
void phys_clear_spin_history(void);
void func_802B6000_E25D60(void) {
PlayerSpinState* playerSpinState = &gPlayerSpinState;
PlayerStatus* playerStatus = &gPlayerStatus;
f32 sp10, sp14, temp_f24;
s32 phi_s2, phi_s3, phi_s4;
s32 temp_v1_2;
s32 phi_s5 = 0;
if (playerStatus->flags & PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED) {
playerStatus->flags &= ~(PLAYER_STATUS_FLAGS_ACTION_STATE_CHANGED | PLAYER_STATUS_FLAGS_80000);
playerStatus->animFlags &= ~PLAYER_STATUS_ANIM_FLAGS_40000;
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_SPINNING;
playerStatus->flags |= PLAYER_STATUS_FLAGS_20000;
playerStatus->currentStateTime = 0;
playerStatus->fallState = 0;
playerSpinState->stopSoundTimer = 0;
playerSpinState->hasBufferedSpin = 0;
playerSpinState->spinDirectionMagnitude = 0.0f;
playerSpinState->spinDirection.x = 0.0f;
playerSpinState->spinDirection.y = 0.0f;
playerSpinState->hitWallTime = 0;
playerSpinState->bufferedStickAxis.x = 0;
playerSpinState->bufferedStickAxis.y = 0;
playerSpinState->spinSoundID = 0;
playerStatus->unk_D8 = NULL;
playerSpinState->initialSpinTime = 25;
playerSpinState->fullSpeedSpinTime = 15;
playerSpinState->spinRate = 40.0f;
playerSpinState->speedScale = 2.0f;
playerSpinState->frictionScale = 0.5f;
playerSpinState->spinCountdown = playerSpinState->initialSpinTime; //was unk2D access?
phi_s5 = 1;
if (is_ability_active(ABILITY_SPIN_ATTACK)) {
phi_s2 = 1 << 2;
} else {
phi_s2 = 0;
}
if (is_ability_active(ABILITY_DIZZY_ATTACK)) {
phi_s2 = phi_s2 | 2;
}
if (is_ability_active(ABILITY_SPEEDY_SPIN)) {
playerSpinState->initialSpinTime = 30;
playerSpinState->spinRate = 40.0f;
playerSpinState->fullSpeedSpinTime = 20;
playerSpinState->spinCountdown = playerSpinState->initialSpinTime; //was unk2D access?
playerSpinState->speedScale = 2.7f;
playerSpinState->frictionScale = 0.9f;
phi_s2 |= 1;
}
phi_s4 = -1;
phi_s3 = 0x10010;
if (phi_s2) {
if (phi_s2 & 4) {
phi_s4 = 2;
phi_s3 = 0x10012;
} else if (phi_s2 & 2) {
phi_s4 = 4;
} else if (phi_s2 & 1) {
phi_s4 = 0;
phi_s3 = 0x10011;
}
}
playerSpinState->spinSoundID = SOUND_2111;
temp_v1_2 = phi_s2 & ~2;
if (temp_v1_2 == 4) {
playerSpinState->spinSoundID = SOUND_2113;
}
if (temp_v1_2 == 1) {
playerSpinState->spinSoundID = SOUND_2112;
}
if (temp_v1_2 == 5) {
playerSpinState->spinSoundID = SOUND_2114;
}
sfx_play_sound_at_player(playerSpinState->spinSoundID, 0);
suggest_player_anim_setUnkFlag(phi_s3);
if ((clamp_angle(playerStatus->targetYaw - gCameras[gCurrentCameraID].currentYaw) <= 180.0f)) {
playerStatus->spinRate = playerSpinState->spinRate;
} else {
phi_s4++;
playerStatus->spinRate = -playerSpinState->spinRate;
}
if (phi_s2 != 0) {
playerStatus->unk_D8 = (void*)fx_46(phi_s4, (EffectWhirlwind* ) playerStatus, 1.0f, 1000);
}
phys_clear_spin_history();
player_input_to_move_vector(&sp10, &sp14);
playerStatus->targetYaw = sp10;
playerSpinState->inputMagnitude = sp14;
}
gSpinHistoryPosAngle[gSpinHistoryBufferPos++] = playerStatus->spriteFacingAngle;
if (gSpinHistoryBufferPos >= 6) {
gSpinHistoryBufferPos = 0;
}
gSpinHistoryPosX[gSpinHistoryBufferPos] = playerStatus->position.x;
gSpinHistoryPosY[gSpinHistoryBufferPos] = playerStatus->position.y;
gSpinHistoryPosZ[gSpinHistoryBufferPos] = playerStatus->position.z;
gSpinHistoryPosAngle[gSpinHistoryBufferPos] = playerStatus->spriteFacingAngle;
gSpinHistoryBufferPos++;
if (gSpinHistoryBufferPos >= 6) {
gSpinHistoryBufferPos = 0;
}
if (phi_s5 == 0 && (check_input_hammer() || check_input_jump())) {
playerStatus->animFlags &= ~PLAYER_STATUS_ANIM_FLAGS_SPINNING;
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_20000;
sfx_stop_sound(playerSpinState->spinSoundID);
player_input_to_move_vector(&sp10, &sp14);
playerStatus->targetYaw = sp10;
return;
}
if (playerSpinState->spinCountdown < 11 && playerStatus->pressedButtons & Z_TRIG) {
playerSpinState->hasBufferedSpin = 1;
playerSpinState->prevActionState = playerStatus->prevActionState;
playerSpinState->bufferedStickAxis.x = playerStatus->stickAxis[0];
playerSpinState->bufferedStickAxis.y = playerStatus->stickAxis[1];
}
if (playerStatus->fallState >= 2) {
playerSpinState->spinDirectionMagnitude = playerSpinState->spinDirectionMagnitude - 1.0f;;
if (playerSpinState->spinDirectionMagnitude < 0.0f) {
playerSpinState->spinDirectionMagnitude = 0.0f;
}
sp10 = clamp_angle(playerStatus->targetYaw - gCameras[gCurrentCameraID].currentYaw);
playerSpinState->spinDirection.x = sin_rad(sp10 * TAU / 360.0f) * playerSpinState->spinDirectionMagnitude;
playerSpinState->spinDirection.y = -cos_rad((sp10 * TAU) / 360.0f) * playerSpinState->spinDirectionMagnitude;
playerStatus->currentStateTime--;
if ((playerStatus->currentStateTime) == 0) {
playerSpinState->stopSoundTimer = 4;
set_action_state(0);
playerStatus->flags &= ~PLAYER_STATUS_ANIM_FLAGS_20000;
playerStatus->animFlags &= ~PLAYER_STATUS_ANIM_FLAGS_SPINNING;
sfx_stop_sound(playerSpinState->spinSoundID);
}
playerStatus->currentSpeed = 0.0f;
return;
}
if (playerStatus->fallState == 0) {
if (playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_40000) {
playerStatus->fallState = 1;
} else if (gCollisionStatus.pushingAgainstWall >= 0) {
playerSpinState->hitWallTime++;
if (playerSpinState->hitWallTime >= 10) {
playerStatus->fallState = 1;
}
}
}
if (!(playerStatus->currentStateTime > playerSpinState->fullSpeedSpinTime)) {
temp_f24 = (playerSpinState->inputMagnitude) ? playerSpinState->speedScale : 0.0f;
playerSpinState->spinDirectionMagnitude = playerSpinState->spinDirectionMagnitude + 0.9;
if (playerSpinState->spinDirectionMagnitude > 9.0f) {
playerSpinState->spinDirectionMagnitude = 9.0f;
}
sp10 = clamp_angle(playerStatus->targetYaw - gCameras[gCurrentCameraID].currentYaw);
playerSpinState->spinDirection.x = sin_rad(sp10 * TAU / 360.0f) * playerSpinState->spinDirectionMagnitude;
playerSpinState->spinDirection.y = -cos_rad(sp10 * TAU / 360.0f) * playerSpinState->spinDirectionMagnitude;
} else {
temp_f24 = playerSpinState->speedScale - (playerStatus->currentStateTime - playerSpinState->fullSpeedSpinTime - 1) * playerSpinState->frictionScale;
if (temp_f24 < 0.1) {
temp_f24 = 0.1f;
}
if (playerSpinState->inputMagnitude == 0.0f) {
temp_f24 = 0.0f;
}
playerSpinState->spinDirectionMagnitude -= 1.0f;
if (playerSpinState->spinDirectionMagnitude < 0.0f) {
playerSpinState->spinDirectionMagnitude = 0.0f;
}
}
playerStatus->currentStateTime++;
switch (playerStatus->prevActionState) {
case 0:
player_input_to_move_vector(&sp10, &sp14);
phys_update_interact_collider();
if (check_input_jump()) {
if (sp14 != 0.0f || playerStatus->targetYaw != sp10) {
playerStatus->targetYaw = sp10;
}
}
playerStatus->currentSpeed = (sp14 != 0.0f) ? playerStatus->runSpeed * temp_f24 : 0.0f;
break;
case 1:
case 2:
playerStatus->currentSpeed = playerStatus->runSpeed * temp_f24;
break;
}
if (playerStatus->fallState == 0) {
playerSpinState->spinCountdown--;
if (playerSpinState->spinCountdown > 0) {
if (playerStatus->currentStateTime >= 2) {
playerStatus->spriteFacingAngle = clamp_angle(playerStatus->spriteFacingAngle + playerStatus->spinRate);
}
return;
} else {
playerStatus->fallState = 1;
}
}
if (playerStatus->fallState == 1) {
sp10 = playerStatus->spriteFacingAngle;
playerStatus->spriteFacingAngle = sp10 + playerStatus->spinRate;
if (playerSpinState->hasBufferedSpin != 0) {
playerStatus->currentStateTime = 2;
playerStatus->fallState = 2;
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_20000;
suggest_player_anim_clearUnkFlag(0x10002);
} else if (sp10 < playerStatus->spriteFacingAngle) {
if (playerStatus->spriteFacingAngle >= 180.0f && sp10 < 180.0f) {
playerStatus->spriteFacingAngle = 180.0f;
playerStatus->currentStateTime = 2;
playerStatus->fallState = 2;
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_20000;
suggest_player_anim_clearUnkFlag(0x10002);
}
} else if (playerStatus->spriteFacingAngle <= 0.0f && sp10 < 90.0f) {
playerStatus->spriteFacingAngle = 0.0f;
playerStatus->currentStateTime = 2;
playerStatus->fallState = 2;
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_20000;
suggest_player_anim_clearUnkFlag(0x10002);
}
playerStatus->spriteFacingAngle = clamp_angle(playerStatus->spriteFacingAngle);
}
}

View File

@ -8,7 +8,7 @@ s32 test_item_entity_position(f32, f32, f32, f32);
s32 npc_raycast_up_corner(s32 ignoreFlags, f32* x, f32* y, f32* z, f32* length);
s32 npc_raycast_up(s32 ignoreFlags, f32* x, f32* y, f32* z, f32* length);
void fx_damage_stars(s32, f32, f32, f32, f32, f32, f32, s32);
void func_801341B0(Npc* npc);
void func_801341B0(s32);
BSS s32 D_802BEC50;
BSS s32 D_802BEC54;
@ -181,8 +181,6 @@ void func_802BD5F4_31B614(Npc* kooper) {
}
}
ApiStatus func_802BD638_31B658(Evt*, s32);
#ifdef NON_MATCHING
ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
Camera* cam;
ItemEntity* itemGrabbed;
@ -193,13 +191,7 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
CollisionStatus* collisionStatus = &gCollisionStatus;
f32 sp20, sp24, sp28, sp2C;
s32 phi_v0_4 = 0;
f32 temp_f20_2;
f32 temp_f20_3;
f32 temp_f20_4;
f32 temp_f20_5;
f32 temp_f20_6;
f32 phi_f0;
f32 phi_f0_3;
s32 tempVar;
f32 clamp;
f32 colheight;
@ -304,10 +296,7 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
kooper->collisionHeight = 12;
kooper->moveToPos.y = playerStatus->position.y;
//npc->moveToPos.z = playerStatus->position.y + (playerStatus->colliderHeight / 3);
//maybe better than above line, maybe not
temp2 = playerStatus->colliderHeight / 3;
kooper->moveToPos.z = playerStatus->position.y + temp2;
kooper->moveToPos.z = playerStatus->position.y + playerStatus->colliderHeight / 3;
playerStatus->flags |= PLAYER_STATUS_FLAGS_JUMPING;
gCameras->moveFlags |= CAMERA_FLAGS_1;
@ -334,12 +323,12 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
}
sp20 = playerStatus->position.x;
sp2C = playerStatus->colliderHeight / 2;
temp2 = sp2C;
sp24 = (playerStatus->position.y + playerStatus->colliderHeight / 2) - kooper->jumpVelocity;
sp28 = playerStatus->position.z;
sp2C = playerStatus->colliderHeight / 2;
temp_f20_3 = sp2C;
if ((npc_raycast_up(0x10000, &sp20, &sp24, &sp28, &sp2C) != 0) && (sp2C < temp2)) {
if ((npc_raycast_up(0x10000, &sp20, &sp24, &sp28, &sp2C) != 0) && (sp2C < temp_f20_3)) {
collisionStatus->currentCeiling = D_8010C97A;
playerStatus->position.y = sp24 - playerStatus->colliderHeight;
func_802BD144_31B164(kooper);
@ -347,7 +336,7 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
if (!(kooper->jumpVelocity > 0.0f) && (playerStatus->position.y < kooper->moveToPos.z)) {
D_802BEC5C = 0;
kooper->flags &= ~PLAYER_STATUS_ANIM_FLAGS_100000;
kooper->flags &= ~ACTOR_FLAG_100;
partnerActionStatus->actionState.b[3] = 2;
partnerActionStatus->actionState.b[0] = 2;
kooper->rotation.z = 0.0f;
@ -355,9 +344,8 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
kooper->moveSpeed = 8.0f;
kooper->currentAnim.w = 0x20009;
D_802BEB40_31CB60 = 1;
temp_f20_2 = sin_deg(playerStatus->targetYaw);
fx_damage_stars(3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
temp_f20_2, -1.0f, -cos_deg(playerStatus->targetYaw), 3);
sin_deg(playerStatus->targetYaw), -1.0f, -cos_deg(playerStatus->targetYaw), 3);
start_bounce_b();
if (D_802BEC64 != 0) {
@ -429,9 +417,9 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
if ((kooper->flags & 0x2000000) == 0) {
if (func_802BD17C_31B19C(kooper) != 0) {
sfx_play_sound_at_npc(0x286, 0, -4);
temp_f20_4 = sin_deg(kooper->yaw);
temp_f20_3 = sin_deg(kooper->yaw);
fx_damage_stars(3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
temp_f20_4, -1.0f, -cos_deg(kooper->yaw), 1);
temp_f20_3, -1.0f, -cos_deg(kooper->yaw), 1);
sfx_play_sound_at_npc(0, 0, -4);
script->functionTemp[0] = 4;
D_802BEC50 = 8;
@ -522,19 +510,19 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
if (((u8)playerStatus->actionState - 0x15) < 2U) {
script->functionTemp[0] = 0;
} else {
temp_f20_5 = atan2(D_802BEC70, D_802BEC78, kooper->pos.x, kooper->pos.z);
kooper->yaw = temp_f20_5 + (get_clamped_angle_diff(kooper->yaw, temp_f20_5) * 0.125f);
temp2 = atan2(D_802BEC70, D_802BEC78, kooper->pos.x, kooper->pos.z);
kooper->yaw = temp2 + (get_clamped_angle_diff(kooper->yaw, temp2) * 0.125f);
npc_move_heading(kooper, -kooper->moveSpeed, kooper->yaw);
kooper->planarFlyDist -= kooper->moveSpeed;
func_8003D660(kooper, 1);
kooper->moveSpeed += 1.3333333333333333;
kooper->moveSpeed += 4.0/3.0;
if (kooper->moveSpeed > 14.0) {
kooper->moveSpeed = 14.0f;
}
if (func_800397E8(kooper, 6.0f) == 0) {
kooper->pos.y = (kooper->pos.y + ((playerStatus->position.y - kooper->pos.y) / 10.0f));
kooper->pos.y += (playerStatus->position.y - kooper->pos.y) / 10.0f;
}
sp20 = kooper->pos.x;
@ -548,9 +536,9 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
kooper->pos.y = sp24;
kooper->pos.z = sp28;
sfx_play_sound_at_npc(0x10C, 0, -4);
temp_f20_6 = sin_deg(kooper->yaw + 180.0f);
temp_f20_3 = sin_deg(kooper->yaw + 180.0f);
fx_damage_stars(3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
temp_f20_6, -1.0f, -cos_deg(kooper->yaw + 180.0f), 1);
temp_f20_3, -1.0f, -cos_deg(kooper->yaw + 180.0f), 1);
script->functionTemp[0] = 0;
} else {
if (D_802BEC6C != 0) {
@ -587,8 +575,7 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
D_802BEB40_31CB60 = 0;
kooper->flags |= NPC_FLAG_100;
kooper->flags &= ~NPC_FLAG_NO_Y_MOVEMENT;
kooper->flags &= ~NPC_FLAG_40;
kooper->flags &= ~(NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_40);
partnerActionStatus->actionState.b[3] = 0;
partnerActionStatus->actionState.b[0] = 0;
kooper->jumpVelocity = 0.0f;
@ -609,9 +596,6 @@ ApiStatus func_802BD638_31B658(Evt* script, s32 isInitialCall) {
}
return ApiStatus_BLOCK;
}
#else
INCLUDE_ASM(s32, "world/partner/kooper", func_802BD638_31B658);
#endif
EvtScript world_kooper_use_ability = {
EVT_CALL(func_802BD638_31B658)

View File

@ -625,7 +625,6 @@ ApiStatus func_802BE724_322274(Evt* script, s32 isInitialCall) {
playerStatus->flags &= ~NPC_FLAG_100;
return ApiStatus_DONE2;
}
script->functionTemp[1] = 3;
script->functionTemp[2] = disable_player_input();
D_802BFF04 = 1;
@ -813,7 +812,6 @@ ApiStatus func_802BE724_322274(Evt* script, s32 isInitialCall) {
} else {
yaw = (0.0f + camYaw) - 90.0f;
}
npc->yaw = yaw;
sp2C = dist2D(playerStatus->position.x, playerStatus->position.z,
npc->moveToPos.x, npc->moveToPos.z);
@ -905,7 +903,6 @@ ApiStatus func_802BE724_322274(Evt* script, s32 isInitialCall) {
partnerActionStatus->actionState.b[3] = 0;
partnerActionStatus->actionState.b[0] = 0;
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_100;
if (D_802BFF04 != 0) {
D_802BFF04 = 0;
enable_player_input();

View File

@ -1,21 +0,0 @@
.include "macro.inc"
.section .data
dlabel D_E00C8710
.word 0x09000800, 0x090008D8
dlabel D_E00C8718
.byte 0x6E, 0x96, 0x82, 0x6E, 0x64, 0x5F, 0x64, 0x00
dlabel D_E00C8720
.byte 0x50, 0x3C, 0x50, 0x64, 0x78, 0x6E, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
dlabel D_E00C8730
.double -0.10000000149011612
dlabel D_E00C8738
.double 14.285714285714286
dlabel D_E00C8740
.double 0.7142857142857143, 0.0

View File

@ -1,179 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel throw_spiny_appendGfx
/* 3CF7F4 E00C8454 27BDFF38 */ addiu $sp, $sp, -0xc8
/* 3CF7F8 E00C8458 0080302D */ daddu $a2, $a0, $zero
/* 3CF7FC E00C845C 3C07DB06 */ lui $a3, 0xdb06
/* 3CF800 E00C8460 34E70024 */ ori $a3, $a3, 0x24
/* 3CF804 E00C8464 AFB300A4 */ sw $s3, 0xa4($sp)
/* 3CF808 E00C8468 3C13800A */ lui $s3, %hi(gMasterGfxPos)
/* 3CF80C E00C846C 2673A66C */ addiu $s3, $s3, %lo(gMasterGfxPos)
/* 3CF810 E00C8470 27A40018 */ addiu $a0, $sp, 0x18
/* 3CF814 E00C8474 AFBF00B8 */ sw $ra, 0xb8($sp)
/* 3CF818 E00C8478 AFB700B4 */ sw $s7, 0xb4($sp)
/* 3CF81C E00C847C AFB600B0 */ sw $s6, 0xb0($sp)
/* 3CF820 E00C8480 AFB500AC */ sw $s5, 0xac($sp)
/* 3CF824 E00C8484 AFB400A8 */ sw $s4, 0xa8($sp)
/* 3CF828 E00C8488 AFB200A0 */ sw $s2, 0xa0($sp)
/* 3CF82C E00C848C AFB1009C */ sw $s1, 0x9c($sp)
/* 3CF830 E00C8490 AFB00098 */ sw $s0, 0x98($sp)
/* 3CF834 E00C8494 F7B400C0 */ sdc1 $f20, 0xc0($sp)
/* 3CF838 E00C8498 8E650000 */ lw $a1, ($s3)
/* 3CF83C E00C849C 8CD2000C */ lw $s2, 0xc($a2)
/* 3CF840 E00C84A0 3C01E00D */ lui $at, %hi(D_E00C8740)
/* 3CF844 E00C84A4 D4208740 */ ldc1 $f0, %lo(D_E00C8740)($at)
/* 3CF848 E00C84A8 00A0182D */ daddu $v1, $a1, $zero
/* 3CF84C E00C84AC 24A50008 */ addiu $a1, $a1, 8
/* 3CF850 E00C84B0 AE650000 */ sw $a1, ($s3)
/* 3CF854 E00C84B4 8E55003C */ lw $s5, 0x3c($s2)
/* 3CF858 E00C84B8 8E560000 */ lw $s6, ($s2)
/* 3CF85C E00C84BC C6540040 */ lwc1 $f20, 0x40($s2)
/* 3CF860 E00C84C0 3C02E700 */ lui $v0, 0xe700
/* 3CF864 E00C84C4 AC620000 */ sw $v0, ($v1)
/* 3CF868 E00C84C8 AC600004 */ sw $zero, 4($v1)
/* 3CF86C E00C84CC ACA70000 */ sw $a3, ($a1)
/* 3CF870 E00C84D0 8CC30010 */ lw $v1, 0x10($a2)
/* 3CF874 E00C84D4 24A20008 */ addiu $v0, $a1, 8
/* 3CF878 E00C84D8 AE620000 */ sw $v0, ($s3)
/* 3CF87C E00C84DC 8C62001C */ lw $v0, 0x1c($v1)
/* 3CF880 E00C84E0 3C038000 */ lui $v1, 0x8000
/* 3CF884 E00C84E4 4600A521 */ cvt.d.s $f20, $f20
/* 3CF888 E00C84E8 4620A502 */ mul.d $f20, $f20, $f0
/* 3CF88C E00C84EC 00000000 */ nop
/* 3CF890 E00C84F0 00431021 */ addu $v0, $v0, $v1
/* 3CF894 E00C84F4 3C03800B */ lui $v1, %hi(gCameras)
/* 3CF898 E00C84F8 24631D80 */ addiu $v1, $v1, %lo(gCameras)
/* 3CF89C E00C84FC ACA20004 */ sw $v0, 4($a1)
/* 3CF8A0 E00C8500 8E450004 */ lw $a1, 4($s2)
/* 3CF8A4 E00C8504 8E460008 */ lw $a2, 8($s2)
/* 3CF8A8 E00C8508 3C028007 */ lui $v0, %hi(gCurrentCameraID)
/* 3CF8AC E00C850C 8C427410 */ lw $v0, %lo(gCurrentCameraID)($v0)
/* 3CF8B0 E00C8510 8E47000C */ lw $a3, 0xc($s2)
/* 3CF8B4 E00C8514 00028880 */ sll $s1, $v0, 2
/* 3CF8B8 E00C8518 02228821 */ addu $s1, $s1, $v0
/* 3CF8BC E00C851C 00118880 */ sll $s1, $s1, 2
/* 3CF8C0 E00C8520 02228823 */ subu $s1, $s1, $v0
/* 3CF8C4 E00C8524 001110C0 */ sll $v0, $s1, 3
/* 3CF8C8 E00C8528 02228821 */ addu $s1, $s1, $v0
/* 3CF8CC E00C852C 001188C0 */ sll $s1, $s1, 3
/* 3CF8D0 E00C8530 02238821 */ addu $s1, $s1, $v1
/* 3CF8D4 E00C8534 0C080108 */ jal shim_guTranslateF
/* 3CF8D8 E00C8538 4620A520 */ cvt.s.d $f20, $f20
/* 3CF8DC E00C853C C6400058 */ lwc1 $f0, 0x58($s2)
/* 3CF8E0 E00C8540 4600A002 */ mul.s $f0, $f20, $f0
/* 3CF8E4 E00C8544 00000000 */ nop
/* 3CF8E8 E00C8548 44050000 */ mfc1 $a1, $f0
/* 3CF8EC E00C854C C640005C */ lwc1 $f0, 0x5c($s2)
/* 3CF8F0 E00C8550 4600A002 */ mul.s $f0, $f20, $f0
/* 3CF8F4 E00C8554 00000000 */ nop
/* 3CF8F8 E00C8558 3C170001 */ lui $s7, 1
/* 3CF8FC E00C855C 27B00058 */ addiu $s0, $sp, 0x58
/* 3CF900 E00C8560 4407A000 */ mfc1 $a3, $f20
/* 3CF904 E00C8564 44060000 */ mfc1 $a2, $f0
/* 3CF908 E00C8568 0C080110 */ jal shim_guScaleF
/* 3CF90C E00C856C 0200202D */ daddu $a0, $s0, $zero
/* 3CF910 E00C8570 0200202D */ daddu $a0, $s0, $zero
/* 3CF914 E00C8574 27A50018 */ addiu $a1, $sp, 0x18
/* 3CF918 E00C8578 0C080114 */ jal shim_guMtxCatF
/* 3CF91C E00C857C 00A0302D */ daddu $a2, $a1, $zero
/* 3CF920 E00C8580 3C013F80 */ lui $at, 0x3f80
/* 3CF924 E00C8584 44810000 */ mtc1 $at, $f0
/* 3CF928 E00C8588 36F71630 */ ori $s7, $s7, 0x1630
/* 3CF92C E00C858C E7A00010 */ swc1 $f0, 0x10($sp)
/* 3CF930 E00C8590 44800000 */ mtc1 $zero, $f0
/* 3CF934 E00C8594 0200202D */ daddu $a0, $s0, $zero
/* 3CF938 E00C8598 44060000 */ mfc1 $a2, $f0
/* 3CF93C E00C859C 8E450050 */ lw $a1, 0x50($s2)
/* 3CF940 E00C85A0 0C080104 */ jal shim_guRotateF
/* 3CF944 E00C85A4 00C0382D */ daddu $a3, $a2, $zero
/* 3CF948 E00C85A8 0200202D */ daddu $a0, $s0, $zero
/* 3CF94C E00C85AC 27A50018 */ addiu $a1, $sp, 0x18
/* 3CF950 E00C85B0 0C080114 */ jal shim_guMtxCatF
/* 3CF954 E00C85B4 00A0302D */ daddu $a2, $a1, $zero
/* 3CF958 E00C85B8 27A40018 */ addiu $a0, $sp, 0x18
/* 3CF95C E00C85BC 3C108007 */ lui $s0, %hi(gMatrixListPos)
/* 3CF960 E00C85C0 261041F0 */ addiu $s0, $s0, %lo(gMatrixListPos)
/* 3CF964 E00C85C4 3C14800A */ lui $s4, %hi(gDisplayContext)
/* 3CF968 E00C85C8 2694A674 */ addiu $s4, $s4, %lo(gDisplayContext)
/* 3CF96C E00C85CC 96050000 */ lhu $a1, ($s0)
/* 3CF970 E00C85D0 8E820000 */ lw $v0, ($s4)
/* 3CF974 E00C85D4 00052980 */ sll $a1, $a1, 6
/* 3CF978 E00C85D8 00B72821 */ addu $a1, $a1, $s7
/* 3CF97C E00C85DC 0C080118 */ jal shim_guMtxF2L
/* 3CF980 E00C85E0 00452821 */ addu $a1, $v0, $a1
/* 3CF984 E00C85E4 3C03DA38 */ lui $v1, 0xda38
/* 3CF988 E00C85E8 34630002 */ ori $v1, $v1, 2
/* 3CF98C E00C85EC 3C06DA38 */ lui $a2, 0xda38
/* 3CF990 E00C85F0 34C60001 */ ori $a2, $a2, 1
/* 3CF994 E00C85F4 3C08D838 */ lui $t0, 0xd838
/* 3CF998 E00C85F8 35080002 */ ori $t0, $t0, 2
/* 3CF99C E00C85FC 3C07DE00 */ lui $a3, 0xde00
/* 3CF9A0 E00C8600 32B500FF */ andi $s5, $s5, 0xff
/* 3CF9A4 E00C8604 0016B080 */ sll $s6, $s6, 2
/* 3CF9A8 E00C8608 8E640000 */ lw $a0, ($s3)
/* 3CF9AC E00C860C 96020000 */ lhu $v0, ($s0)
/* 3CF9B0 E00C8610 0080282D */ daddu $a1, $a0, $zero
/* 3CF9B4 E00C8614 24840008 */ addiu $a0, $a0, 8
/* 3CF9B8 E00C8618 AE640000 */ sw $a0, ($s3)
/* 3CF9BC E00C861C ACA30000 */ sw $v1, ($a1)
/* 3CF9C0 E00C8620 24430001 */ addiu $v1, $v0, 1
/* 3CF9C4 E00C8624 3042FFFF */ andi $v0, $v0, 0xffff
/* 3CF9C8 E00C8628 00021180 */ sll $v0, $v0, 6
/* 3CF9CC E00C862C A6030000 */ sh $v1, ($s0)
/* 3CF9D0 E00C8630 8E830000 */ lw $v1, ($s4)
/* 3CF9D4 E00C8634 00571021 */ addu $v0, $v0, $s7
/* 3CF9D8 E00C8638 00621821 */ addu $v1, $v1, $v0
/* 3CF9DC E00C863C 24820008 */ addiu $v0, $a0, 8
/* 3CF9E0 E00C8640 ACA30004 */ sw $v1, 4($a1)
/* 3CF9E4 E00C8644 AE620000 */ sw $v0, ($s3)
/* 3CF9E8 E00C8648 24820010 */ addiu $v0, $a0, 0x10
/* 3CF9EC E00C864C AC860000 */ sw $a2, ($a0)
/* 3CF9F0 E00C8650 AE620000 */ sw $v0, ($s3)
/* 3CF9F4 E00C8654 8E230204 */ lw $v1, 0x204($s1)
/* 3CF9F8 E00C8658 3C02FA00 */ lui $v0, 0xfa00
/* 3CF9FC E00C865C AC820008 */ sw $v0, 8($a0)
/* 3CFA00 E00C8660 AC830004 */ sw $v1, 4($a0)
/* 3CFA04 E00C8664 92430033 */ lbu $v1, 0x33($s2)
/* 3CFA08 E00C8668 92450037 */ lbu $a1, 0x37($s2)
/* 3CFA0C E00C866C 9246003B */ lbu $a2, 0x3b($s2)
/* 3CFA10 E00C8670 24820018 */ addiu $v0, $a0, 0x18
/* 3CFA14 E00C8674 AE620000 */ sw $v0, ($s3)
/* 3CFA18 E00C8678 24820020 */ addiu $v0, $a0, 0x20
/* 3CFA1C E00C867C AC870010 */ sw $a3, 0x10($a0)
/* 3CFA20 E00C8680 AE620000 */ sw $v0, ($s3)
/* 3CFA24 E00C8684 00031E00 */ sll $v1, $v1, 0x18
/* 3CFA28 E00C8688 00052C00 */ sll $a1, $a1, 0x10
/* 3CFA2C E00C868C 00651825 */ or $v1, $v1, $a1
/* 3CFA30 E00C8690 00063200 */ sll $a2, $a2, 8
/* 3CFA34 E00C8694 00661825 */ or $v1, $v1, $a2
/* 3CFA38 E00C8698 00751825 */ or $v1, $v1, $s5
/* 3CFA3C E00C869C AC83000C */ sw $v1, 0xc($a0)
/* 3CFA40 E00C86A0 3C03E00D */ lui $v1, %hi(D_E00C8710)
/* 3CFA44 E00C86A4 00761821 */ addu $v1, $v1, $s6
/* 3CFA48 E00C86A8 8C638710 */ lw $v1, %lo(D_E00C8710)($v1)
/* 3CFA4C E00C86AC 24820028 */ addiu $v0, $a0, 0x28
/* 3CFA50 E00C86B0 AE620000 */ sw $v0, ($s3)
/* 3CFA54 E00C86B4 3C020900 */ lui $v0, 0x900
/* 3CFA58 E00C86B8 244209F0 */ addiu $v0, $v0, 0x9f0
/* 3CFA5C E00C86BC AC82001C */ sw $v0, 0x1c($a0)
/* 3CFA60 E00C86C0 24020040 */ addiu $v0, $zero, 0x40
/* 3CFA64 E00C86C4 AC870018 */ sw $a3, 0x18($a0)
/* 3CFA68 E00C86C8 AC880020 */ sw $t0, 0x20($a0)
/* 3CFA6C E00C86CC AC820024 */ sw $v0, 0x24($a0)
/* 3CFA70 E00C86D0 AC830014 */ sw $v1, 0x14($a0)
/* 3CFA74 E00C86D4 8FBF00B8 */ lw $ra, 0xb8($sp)
/* 3CFA78 E00C86D8 8FB700B4 */ lw $s7, 0xb4($sp)
/* 3CFA7C E00C86DC 8FB600B0 */ lw $s6, 0xb0($sp)
/* 3CFA80 E00C86E0 8FB500AC */ lw $s5, 0xac($sp)
/* 3CFA84 E00C86E4 8FB400A8 */ lw $s4, 0xa8($sp)
/* 3CFA88 E00C86E8 8FB300A4 */ lw $s3, 0xa4($sp)
/* 3CFA8C E00C86EC 8FB200A0 */ lw $s2, 0xa0($sp)
/* 3CFA90 E00C86F0 8FB1009C */ lw $s1, 0x9c($sp)
/* 3CFA94 E00C86F4 8FB00098 */ lw $s0, 0x98($sp)
/* 3CFA98 E00C86F8 D7B400C0 */ ldc1 $f20, 0xc0($sp)
/* 3CFA9C E00C86FC 03E00008 */ jr $ra
/* 3CFAA0 E00C8700 27BD00C8 */ addiu $sp, $sp, 0xc8
/* 3CFAA4 E00C8704 00000000 */ nop
/* 3CFAA8 E00C8708 00000000 */ nop
/* 3CFAAC E00C870C 00000000 */ nop

View File

@ -1,144 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel throw_spiny_main
/* 3CF3A0 E00C8000 27BDFF90 */ addiu $sp, $sp, -0x70
/* 3CF3A4 E00C8004 F7B40040 */ sdc1 $f20, 0x40($sp)
/* 3CF3A8 E00C8008 4485A000 */ mtc1 $a1, $f20
/* 3CF3AC E00C800C F7B60048 */ sdc1 $f22, 0x48($sp)
/* 3CF3B0 E00C8010 4486B000 */ mtc1 $a2, $f22
/* 3CF3B4 E00C8014 F7B80050 */ sdc1 $f24, 0x50($sp)
/* 3CF3B8 E00C8018 4487C000 */ mtc1 $a3, $f24
/* 3CF3BC E00C801C F7BA0058 */ sdc1 $f26, 0x58($sp)
/* 3CF3C0 E00C8020 C7BA0080 */ lwc1 $f26, 0x80($sp)
/* 3CF3C4 E00C8024 F7BC0060 */ sdc1 $f28, 0x60($sp)
/* 3CF3C8 E00C8028 C7BC0084 */ lwc1 $f28, 0x84($sp)
/* 3CF3CC E00C802C AFB30034 */ sw $s3, 0x34($sp)
/* 3CF3D0 E00C8030 0080982D */ daddu $s3, $a0, $zero
/* 3CF3D4 E00C8034 F7BE0068 */ sdc1 $f30, 0x68($sp)
/* 3CF3D8 E00C8038 C7BE0088 */ lwc1 $f30, 0x88($sp)
/* 3CF3DC E00C803C 27A40010 */ addiu $a0, $sp, 0x10
/* 3CF3E0 E00C8040 AFB1002C */ sw $s1, 0x2c($sp)
/* 3CF3E4 E00C8044 8FB10090 */ lw $s1, 0x90($sp)
/* 3CF3E8 E00C8048 3C02E00D */ lui $v0, %hi(throw_spiny_init)
/* 3CF3EC E00C804C 24428218 */ addiu $v0, $v0, %lo(throw_spiny_init)
/* 3CF3F0 E00C8050 AFA20018 */ sw $v0, 0x18($sp)
/* 3CF3F4 E00C8054 3C02E00D */ lui $v0, %hi(throw_spiny_update)
/* 3CF3F8 E00C8058 24428220 */ addiu $v0, $v0, %lo(throw_spiny_update)
/* 3CF3FC E00C805C AFA2001C */ sw $v0, 0x1c($sp)
/* 3CF400 E00C8060 3C02E00D */ lui $v0, %hi(throw_spiny_render)
/* 3CF404 E00C8064 24428404 */ addiu $v0, $v0, %lo(throw_spiny_render)
/* 3CF408 E00C8068 AFA20020 */ sw $v0, 0x20($sp)
/* 3CF40C E00C806C 24020064 */ addiu $v0, $zero, 0x64
/* 3CF410 E00C8070 AFBF0038 */ sw $ra, 0x38($sp)
/* 3CF414 E00C8074 AFB20030 */ sw $s2, 0x30($sp)
/* 3CF418 E00C8078 AFB00028 */ sw $s0, 0x28($sp)
/* 3CF41C E00C807C AFA00010 */ sw $zero, 0x10($sp)
/* 3CF420 E00C8080 AFA00024 */ sw $zero, 0x24($sp)
/* 3CF424 E00C8084 0C080124 */ jal shim_create_effect_instance
/* 3CF428 E00C8088 AFA20014 */ sw $v0, 0x14($sp)
/* 3CF42C E00C808C 2404006C */ addiu $a0, $zero, 0x6c
/* 3CF430 E00C8090 24030001 */ addiu $v1, $zero, 1
/* 3CF434 E00C8094 0040902D */ daddu $s2, $v0, $zero
/* 3CF438 E00C8098 0C08012C */ jal shim_general_heap_malloc
/* 3CF43C E00C809C AE430008 */ sw $v1, 8($s2)
/* 3CF440 E00C80A0 0040802D */ daddu $s0, $v0, $zero
/* 3CF444 E00C80A4 16000003 */ bnez $s0, .LE00C80B4
/* 3CF448 E00C80A8 AE42000C */ sw $v0, 0xc($s2)
.LE00C80AC:
/* 3CF44C E00C80AC 0803202B */ j .LE00C80AC
/* 3CF450 E00C80B0 00000000 */ nop
.LE00C80B4:
/* 3CF454 E00C80B4 AE130000 */ sw $s3, ($s0)
/* 3CF458 E00C80B8 1E200003 */ bgtz $s1, .LE00C80C8
/* 3CF45C E00C80BC AE00002C */ sw $zero, 0x2c($s0)
/* 3CF460 E00C80C0 08032033 */ j .LE00C80CC
/* 3CF464 E00C80C4 240203E8 */ addiu $v0, $zero, 0x3e8
.LE00C80C8:
/* 3CF468 E00C80C8 2622003C */ addiu $v0, $s1, 0x3c
.LE00C80CC:
/* 3CF46C E00C80CC AE020028 */ sw $v0, 0x28($s0)
/* 3CF470 E00C80D0 240200FF */ addiu $v0, $zero, 0xff
/* 3CF474 E00C80D4 44913000 */ mtc1 $s1, $f6
/* 3CF478 E00C80D8 00000000 */ nop
/* 3CF47C E00C80DC 468031A1 */ cvt.d.w $f6, $f6
/* 3CF480 E00C80E0 4616E201 */ sub.s $f8, $f28, $f22
/* 3CF484 E00C80E4 44912000 */ mtc1 $s1, $f4
/* 3CF488 E00C80E8 00000000 */ nop
/* 3CF48C E00C80EC 46802120 */ cvt.s.w $f4, $f4
/* 3CF490 E00C80F0 3C01E00D */ lui $at, %hi(D_E00C8730)
/* 3CF494 E00C80F4 D4208730 */ ldc1 $f0, %lo(D_E00C8730)($at)
/* 3CF498 E00C80F8 4618F081 */ sub.s $f2, $f30, $f24
/* 3CF49C E00C80FC AE110068 */ sw $s1, 0x68($s0)
/* 3CF4A0 E00C8100 AE02003C */ sw $v0, 0x3c($s0)
/* 3CF4A4 E00C8104 46203182 */ mul.d $f6, $f6, $f0
/* 3CF4A8 E00C8108 00000000 */ nop
/* 3CF4AC E00C810C E6140010 */ swc1 $f20, 0x10($s0)
/* 3CF4B0 E00C8110 E6160014 */ swc1 $f22, 0x14($s0)
/* 3CF4B4 E00C8114 E6180018 */ swc1 $f24, 0x18($s0)
/* 3CF4B8 E00C8118 E61A001C */ swc1 $f26, 0x1c($s0)
/* 3CF4BC E00C811C E61C0020 */ swc1 $f28, 0x20($s0)
/* 3CF4C0 E00C8120 E61E0024 */ swc1 $f30, 0x24($s0)
/* 3CF4C4 E00C8124 E6140004 */ swc1 $f20, 4($s0)
/* 3CF4C8 E00C8128 4614D001 */ sub.s $f0, $f26, $f20
/* 3CF4CC E00C812C 46041083 */ div.s $f2, $f2, $f4
/* 3CF4D0 E00C8130 E602004C */ swc1 $f2, 0x4c($s0)
/* 3CF4D4 E00C8134 44801000 */ mtc1 $zero, $f2
/* 3CF4D8 E00C8138 46040003 */ div.s $f0, $f0, $f4
/* 3CF4DC E00C813C E6000044 */ swc1 $f0, 0x44($s0)
/* 3CF4E0 E00C8140 46044003 */ div.s $f0, $f8, $f4
/* 3CF4E4 E00C8144 46000021 */ cvt.d.s $f0, $f0
/* 3CF4E8 E00C8148 46260001 */ sub.d $f0, $f0, $f6
/* 3CF4EC E00C814C E6160008 */ swc1 $f22, 8($s0)
/* 3CF4F0 E00C8150 E618000C */ swc1 $f24, 0xc($s0)
/* 3CF4F4 E00C8154 4602403C */ c.lt.s $f8, $f2
/* 3CF4F8 E00C8158 46200020 */ cvt.s.d $f0, $f0
/* 3CF4FC E00C815C 45000004 */ bc1f .LE00C8170
/* 3CF500 E00C8160 E6000048 */ swc1 $f0, 0x48($s0)
/* 3CF504 E00C8164 24020001 */ addiu $v0, $zero, 1
/* 3CF508 E00C8168 0803205D */ j .LE00C8174
/* 3CF50C E00C816C AE020064 */ sw $v0, 0x64($s0)
.LE00C8170:
/* 3CF510 E00C8170 AE000064 */ sw $zero, 0x64($s0)
.LE00C8174:
/* 3CF514 E00C8174 24040168 */ addiu $a0, $zero, 0x168
/* 3CF518 E00C8178 C7A0008C */ lwc1 $f0, 0x8c($sp)
/* 3CF51C E00C817C 24020046 */ addiu $v0, $zero, 0x46
/* 3CF520 E00C8180 AE020030 */ sw $v0, 0x30($s0)
/* 3CF524 E00C8184 240200B4 */ addiu $v0, $zero, 0xb4
/* 3CF528 E00C8188 AE020034 */ sw $v0, 0x34($s0)
/* 3CF52C E00C818C 24020078 */ addiu $v0, $zero, 0x78
/* 3CF530 E00C8190 AE020038 */ sw $v0, 0x38($s0)
/* 3CF534 E00C8194 0C080138 */ jal shim_rand_int
/* 3CF538 E00C8198 E6000040 */ swc1 $f0, 0x40($s0)
/* 3CF53C E00C819C 2404000A */ addiu $a0, $zero, 0xa
/* 3CF540 E00C81A0 44820000 */ mtc1 $v0, $f0
/* 3CF544 E00C81A4 00000000 */ nop
/* 3CF548 E00C81A8 46800020 */ cvt.s.w $f0, $f0
/* 3CF54C E00C81AC 0C080138 */ jal shim_rand_int
/* 3CF550 E00C81B0 E6000050 */ swc1 $f0, 0x50($s0)
/* 3CF554 E00C81B4 24430005 */ addiu $v1, $v0, 5
/* 3CF558 E00C81B8 0240102D */ daddu $v0, $s2, $zero
/* 3CF55C E00C81BC 44830000 */ mtc1 $v1, $f0
/* 3CF560 E00C81C0 00000000 */ nop
/* 3CF564 E00C81C4 46800020 */ cvt.s.w $f0, $f0
/* 3CF568 E00C81C8 E6000054 */ swc1 $f0, 0x54($s0)
/* 3CF56C E00C81CC 3C013F80 */ lui $at, 0x3f80
/* 3CF570 E00C81D0 44810000 */ mtc1 $at, $f0
/* 3CF574 E00C81D4 2403FFFF */ addiu $v1, $zero, -1
/* 3CF578 E00C81D8 AE030060 */ sw $v1, 0x60($s0)
/* 3CF57C E00C81DC E6000058 */ swc1 $f0, 0x58($s0)
/* 3CF580 E00C81E0 E600005C */ swc1 $f0, 0x5c($s0)
/* 3CF584 E00C81E4 8FBF0038 */ lw $ra, 0x38($sp)
/* 3CF588 E00C81E8 8FB30034 */ lw $s3, 0x34($sp)
/* 3CF58C E00C81EC 8FB20030 */ lw $s2, 0x30($sp)
/* 3CF590 E00C81F0 8FB1002C */ lw $s1, 0x2c($sp)
/* 3CF594 E00C81F4 8FB00028 */ lw $s0, 0x28($sp)
/* 3CF598 E00C81F8 D7BE0068 */ ldc1 $f30, 0x68($sp)
/* 3CF59C E00C81FC D7BC0060 */ ldc1 $f28, 0x60($sp)
/* 3CF5A0 E00C8200 D7BA0058 */ ldc1 $f26, 0x58($sp)
/* 3CF5A4 E00C8204 D7B80050 */ ldc1 $f24, 0x50($sp)
/* 3CF5A8 E00C8208 D7B60048 */ ldc1 $f22, 0x48($sp)
/* 3CF5AC E00C820C D7B40040 */ ldc1 $f20, 0x40($sp)
/* 3CF5B0 E00C8210 03E00008 */ jr $ra
/* 3CF5B4 E00C8214 27BD0070 */ addiu $sp, $sp, 0x70

View File

@ -1,132 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel throw_spiny_update
/* 3CF5C0 E00C8220 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 3CF5C4 E00C8224 AFBF0010 */ sw $ra, 0x10($sp)
/* 3CF5C8 E00C8228 8C830000 */ lw $v1, ($a0)
/* 3CF5CC E00C822C 8C85000C */ lw $a1, 0xc($a0)
/* 3CF5D0 E00C8230 30620010 */ andi $v0, $v1, 0x10
/* 3CF5D4 E00C8234 10400005 */ beqz $v0, .LE00C824C
/* 3CF5D8 E00C8238 2402FFEF */ addiu $v0, $zero, -0x11
/* 3CF5DC E00C823C 00621024 */ and $v0, $v1, $v0
/* 3CF5E0 E00C8240 AC820000 */ sw $v0, ($a0)
/* 3CF5E4 E00C8244 24020010 */ addiu $v0, $zero, 0x10
/* 3CF5E8 E00C8248 ACA20028 */ sw $v0, 0x28($a1)
.LE00C824C:
/* 3CF5EC E00C824C 8CA30028 */ lw $v1, 0x28($a1)
/* 3CF5F0 E00C8250 286203E8 */ slti $v0, $v1, 0x3e8
/* 3CF5F4 E00C8254 10400002 */ beqz $v0, .LE00C8260
/* 3CF5F8 E00C8258 2462FFFF */ addiu $v0, $v1, -1
/* 3CF5FC E00C825C ACA20028 */ sw $v0, 0x28($a1)
.LE00C8260:
/* 3CF600 E00C8260 8CA2002C */ lw $v0, 0x2c($a1)
/* 3CF604 E00C8264 8CA30028 */ lw $v1, 0x28($a1)
/* 3CF608 E00C8268 24420001 */ addiu $v0, $v0, 1
/* 3CF60C E00C826C 04610005 */ bgez $v1, .LE00C8284
/* 3CF610 E00C8270 ACA2002C */ sw $v0, 0x2c($a1)
/* 3CF614 E00C8274 0C080128 */ jal shim_remove_effect
/* 3CF618 E00C8278 00000000 */ nop
/* 3CF61C E00C827C 080320FE */ j .LE00C83F8
/* 3CF620 E00C8280 00000000 */ nop
.LE00C8284:
/* 3CF624 E00C8284 8CA30060 */ lw $v1, 0x60($a1)
/* 3CF628 E00C8288 0040202D */ daddu $a0, $v0, $zero
/* 3CF62C E00C828C 2C620007 */ sltiu $v0, $v1, 7
/* 3CF630 E00C8290 1040001F */ beqz $v0, .LE00C8310
/* 3CF634 E00C8294 00000000 */ nop
/* 3CF638 E00C8298 3C02E00D */ lui $v0, %hi(D_E00C8718)
/* 3CF63C E00C829C 00431021 */ addu $v0, $v0, $v1
/* 3CF640 E00C82A0 90428718 */ lbu $v0, %lo(D_E00C8718)($v0)
/* 3CF644 E00C82A4 3C013C23 */ lui $at, 0x3c23
/* 3CF648 E00C82A8 3421D70A */ ori $at, $at, 0xd70a
/* 3CF64C E00C82AC 44811000 */ mtc1 $at, $f2
/* 3CF650 E00C82B0 44820000 */ mtc1 $v0, $f0
/* 3CF654 E00C82B4 00000000 */ nop
/* 3CF658 E00C82B8 46800020 */ cvt.s.w $f0, $f0
/* 3CF65C E00C82BC 46020002 */ mul.s $f0, $f0, $f2
/* 3CF660 E00C82C0 00000000 */ nop
/* 3CF664 E00C82C4 E4A00058 */ swc1 $f0, 0x58($a1)
/* 3CF668 E00C82C8 3C02E00D */ lui $v0, %hi(D_E00C8720)
/* 3CF66C E00C82CC 00431021 */ addu $v0, $v0, $v1
/* 3CF670 E00C82D0 90428720 */ lbu $v0, %lo(D_E00C8720)($v0)
/* 3CF674 E00C82D4 44822000 */ mtc1 $v0, $f4
/* 3CF678 E00C82D8 00000000 */ nop
/* 3CF67C E00C82DC 46802120 */ cvt.s.w $f4, $f4
/* 3CF680 E00C82E0 46022102 */ mul.s $f4, $f4, $f2
/* 3CF684 E00C82E4 00000000 */ nop
/* 3CF688 E00C82E8 C4A00050 */ lwc1 $f0, 0x50($a1)
/* 3CF68C E00C82EC 3C014220 */ lui $at, 0x4220
/* 3CF690 E00C82F0 44811000 */ mtc1 $at, $f2
/* 3CF694 E00C82F4 0060102D */ daddu $v0, $v1, $zero
/* 3CF698 E00C82F8 46020001 */ sub.s $f0, $f0, $f2
/* 3CF69C E00C82FC 24420001 */ addiu $v0, $v0, 1
/* 3CF6A0 E00C8300 ACA20060 */ sw $v0, 0x60($a1)
/* 3CF6A4 E00C8304 E4A00050 */ swc1 $f0, 0x50($a1)
/* 3CF6A8 E00C8308 080320D9 */ j .LE00C8364
/* 3CF6AC E00C830C E4A4005C */ swc1 $f4, 0x5c($a1)
.LE00C8310:
/* 3CF6B0 E00C8310 C4A20048 */ lwc1 $f2, 0x48($a1)
/* 3CF6B4 E00C8314 3C01BE4C */ lui $at, 0xbe4c
/* 3CF6B8 E00C8318 3421CCCD */ ori $at, $at, 0xcccd
/* 3CF6BC E00C831C 44810000 */ mtc1 $at, $f0
/* 3CF6C0 E00C8320 C4A80004 */ lwc1 $f8, 4($a1)
/* 3CF6C4 E00C8324 46001080 */ add.s $f2, $f2, $f0
/* 3CF6C8 E00C8328 C4A00044 */ lwc1 $f0, 0x44($a1)
/* 3CF6CC E00C832C C4A6000C */ lwc1 $f6, 0xc($a1)
/* 3CF6D0 E00C8330 46004200 */ add.s $f8, $f8, $f0
/* 3CF6D4 E00C8334 C4A0004C */ lwc1 $f0, 0x4c($a1)
/* 3CF6D8 E00C8338 C4A40050 */ lwc1 $f4, 0x50($a1)
/* 3CF6DC E00C833C 46003180 */ add.s $f6, $f6, $f0
/* 3CF6E0 E00C8340 C4A00054 */ lwc1 $f0, 0x54($a1)
/* 3CF6E4 E00C8344 46002100 */ add.s $f4, $f4, $f0
/* 3CF6E8 E00C8348 C4A00008 */ lwc1 $f0, 8($a1)
/* 3CF6EC E00C834C E4A20048 */ swc1 $f2, 0x48($a1)
/* 3CF6F0 E00C8350 E4A80004 */ swc1 $f8, 4($a1)
/* 3CF6F4 E00C8354 46020000 */ add.s $f0, $f0, $f2
/* 3CF6F8 E00C8358 E4A6000C */ swc1 $f6, 0xc($a1)
/* 3CF6FC E00C835C E4A40050 */ swc1 $f4, 0x50($a1)
/* 3CF700 E00C8360 E4A00008 */ swc1 $f0, 8($a1)
.LE00C8364:
/* 3CF704 E00C8364 8CA30068 */ lw $v1, 0x68($a1)
/* 3CF708 E00C8368 2482FFFF */ addiu $v0, $a0, -1
/* 3CF70C E00C836C 1443000A */ bne $v0, $v1, .LE00C8398
/* 3CF710 E00C8370 00000000 */ nop
/* 3CF714 E00C8374 C4A00048 */ lwc1 $f0, 0x48($a1)
/* 3CF718 E00C8378 C4A20044 */ lwc1 $f2, 0x44($a1)
/* 3CF71C E00C837C 3C01C080 */ lui $at, 0xc080
/* 3CF720 E00C8380 44812000 */ mtc1 $at, $f4
/* 3CF724 E00C8384 ACA00060 */ sw $zero, 0x60($a1)
/* 3CF728 E00C8388 46000007 */ neg.s $f0, $f0
/* 3CF72C E00C838C E4A00048 */ swc1 $f0, 0x48($a1)
/* 3CF730 E00C8390 080320FE */ j .LE00C83F8
/* 3CF734 E00C8394 E4A40054 */ swc1 $f4, 0x54($a1)
.LE00C8398:
/* 3CF738 E00C8398 C4A40048 */ lwc1 $f4, 0x48($a1)
/* 3CF73C E00C839C 44800000 */ mtc1 $zero, $f0
/* 3CF740 E00C83A0 00000000 */ nop
/* 3CF744 E00C83A4 4600203C */ c.lt.s $f4, $f0
/* 3CF748 E00C83A8 00000000 */ nop
/* 3CF74C E00C83AC 45000012 */ bc1f .LE00C83F8
/* 3CF750 E00C83B0 00000000 */ nop
/* 3CF754 E00C83B4 C4A00008 */ lwc1 $f0, 8($a1)
/* 3CF758 E00C83B8 3C01E00D */ lui $at, %hi(D_E00C8738)
/* 3CF75C E00C83BC D4228738 */ ldc1 $f2, %lo(D_E00C8738)($at)
/* 3CF760 E00C83C0 46000021 */ cvt.d.s $f0, $f0
/* 3CF764 E00C83C4 4622003C */ c.lt.d $f0, $f2
/* 3CF768 E00C83C8 00000000 */ nop
/* 3CF76C E00C83CC 4500000A */ bc1f .LE00C83F8
/* 3CF770 E00C83D0 00000000 */ nop
/* 3CF774 E00C83D4 3C014164 */ lui $at, 0x4164
/* 3CF778 E00C83D8 34219249 */ ori $at, $at, 0x9249
/* 3CF77C E00C83DC 44810000 */ mtc1 $at, $f0
/* 3CF780 E00C83E0 3C01C1A0 */ lui $at, 0xc1a0
/* 3CF784 E00C83E4 44811000 */ mtc1 $at, $f2
/* 3CF788 E00C83E8 46042101 */ sub.s $f4, $f4, $f4
/* 3CF78C E00C83EC E4A00008 */ swc1 $f0, 8($a1)
/* 3CF790 E00C83F0 E4A20054 */ swc1 $f2, 0x54($a1)
/* 3CF794 E00C83F4 E4A40048 */ swc1 $f4, 0x48($a1)
.LE00C83F8:
/* 3CF798 E00C83F8 8FBF0010 */ lw $ra, 0x10($sp)
/* 3CF79C E00C83FC 03E00008 */ jr $ra
/* 3CF7A0 E00C8400 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -1,673 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.section .rodata
dlabel D_802B69A0_E26700
.double 0.9
dlabel D_802B69A8_E26708
.double 0.1
.section .text
glabel func_802B6000_E25D60
/* E25D60 802B6000 27BDFFB0 */ addiu $sp, $sp, -0x50
/* E25D64 802B6004 AFB5002C */ sw $s5, 0x2c($sp)
/* E25D68 802B6008 AFB1001C */ sw $s1, 0x1c($sp)
/* E25D6C 802B600C 3C118011 */ lui $s1, %hi(gPlayerStatus)
/* E25D70 802B6010 2631EFC8 */ addiu $s1, $s1, %lo(gPlayerStatus)
/* E25D74 802B6014 AFBF0030 */ sw $ra, 0x30($sp)
/* E25D78 802B6018 AFB40028 */ sw $s4, 0x28($sp)
/* E25D7C 802B601C AFB30024 */ sw $s3, 0x24($sp)
/* E25D80 802B6020 AFB20020 */ sw $s2, 0x20($sp)
/* E25D84 802B6024 AFB00018 */ sw $s0, 0x18($sp)
/* E25D88 802B6028 F7B80048 */ sdc1 $f24, 0x48($sp)
/* E25D8C 802B602C F7B60040 */ sdc1 $f22, 0x40($sp)
/* E25D90 802B6030 F7B40038 */ sdc1 $f20, 0x38($sp)
/* E25D94 802B6034 8E220000 */ lw $v0, ($s1)
/* E25D98 802B6038 3C108011 */ lui $s0, %hi(gPlayerSpinState)
/* E25D9C 802B603C 2610F250 */ addiu $s0, $s0, %lo(gPlayerSpinState)
/* E25DA0 802B6040 0441009D */ bgez $v0, .L802B62B8
/* E25DA4 802B6044 0000A82D */ daddu $s5, $zero, $zero
/* E25DA8 802B6048 3C037FF7 */ lui $v1, 0x7ff7
/* E25DAC 802B604C 3463FFFF */ ori $v1, $v1, 0xffff
/* E25DB0 802B6050 3C05FFFB */ lui $a1, 0xfffb
/* E25DB4 802B6054 34A5FFFF */ ori $a1, $a1, 0xffff
/* E25DB8 802B6058 24150001 */ addiu $s5, $zero, 1
/* E25DBC 802B605C 24040028 */ addiu $a0, $zero, 0x28
/* E25DC0 802B6060 00431824 */ and $v1, $v0, $v1
/* E25DC4 802B6064 3C020002 */ lui $v0, 2
/* E25DC8 802B6068 AE230000 */ sw $v1, ($s1)
/* E25DCC 802B606C 00621825 */ or $v1, $v1, $v0
/* E25DD0 802B6070 24020019 */ addiu $v0, $zero, 0x19
/* E25DD4 802B6074 AE230000 */ sw $v1, ($s1)
/* E25DD8 802B6078 A6200008 */ sh $zero, 8($s1)
/* E25DDC 802B607C A22000B6 */ sb $zero, 0xb6($s1)
/* E25DE0 802B6080 A2000000 */ sb $zero, ($s0)
/* E25DE4 802B6084 A2000001 */ sb $zero, 1($s0)
/* E25DE8 802B6088 AE000010 */ sw $zero, 0x10($s0)
/* E25DEC 802B608C AE000014 */ sw $zero, 0x14($s0)
/* E25DF0 802B6090 AE000018 */ sw $zero, 0x18($s0)
/* E25DF4 802B6094 A2000002 */ sb $zero, 2($s0)
/* E25DF8 802B6098 AE000008 */ sw $zero, 8($s0)
/* E25DFC 802B609C AE00000C */ sw $zero, 0xc($s0)
/* E25E00 802B60A0 AE000030 */ sw $zero, 0x30($s0)
/* E25E04 802B60A4 AE2000D8 */ sw $zero, 0xd8($s1)
/* E25E08 802B60A8 A602002C */ sh $v0, 0x2c($s0)
/* E25E0C 802B60AC 8E230004 */ lw $v1, 4($s1)
/* E25E10 802B60B0 2402000F */ addiu $v0, $zero, 0xf
/* E25E14 802B60B4 A602002E */ sh $v0, 0x2e($s0)
/* E25E18 802B60B8 3C020001 */ lui $v0, 1
/* E25E1C 802B60BC 3C014220 */ lui $at, 0x4220
/* E25E20 802B60C0 4481A000 */ mtc1 $at, $f20
/* E25E24 802B60C4 3C014000 */ lui $at, 0x4000
/* E25E28 802B60C8 44810000 */ mtc1 $at, $f0
/* E25E2C 802B60CC 3C013F00 */ lui $at, 0x3f00
/* E25E30 802B60D0 44811000 */ mtc1 $at, $f2
/* E25E34 802B60D4 00651824 */ and $v1, $v1, $a1
/* E25E38 802B60D8 9205002D */ lbu $a1, 0x2d($s0)
/* E25E3C 802B60DC 00621825 */ or $v1, $v1, $v0
/* E25E40 802B60E0 AE230004 */ sw $v1, 4($s1)
/* E25E44 802B60E4 E6140020 */ swc1 $f20, 0x20($s0)
/* E25E48 802B60E8 E6000024 */ swc1 $f0, 0x24($s0)
/* E25E4C 802B60EC E6020028 */ swc1 $f2, 0x28($s0)
/* E25E50 802B60F0 0C03A752 */ jal is_ability_active
/* E25E54 802B60F4 A2050003 */ sb $a1, 3($s0)
/* E25E58 802B60F8 0002102B */ sltu $v0, $zero, $v0
/* E25E5C 802B60FC 00029080 */ sll $s2, $v0, 2
/* E25E60 802B6100 0C03A752 */ jal is_ability_active
/* E25E64 802B6104 2404002D */ addiu $a0, $zero, 0x2d
/* E25E68 802B6108 54400001 */ bnel $v0, $zero, .L802B6110
/* E25E6C 802B610C 36520002 */ ori $s2, $s2, 2
.L802B6110:
/* E25E70 802B6110 0C03A752 */ jal is_ability_active
/* E25E74 802B6114 24040027 */ addiu $a0, $zero, 0x27
/* E25E78 802B6118 10400010 */ beqz $v0, .L802B615C
/* E25E7C 802B611C 2402001E */ addiu $v0, $zero, 0x1e
/* E25E80 802B6120 36520001 */ ori $s2, $s2, 1
/* E25E84 802B6124 A602002C */ sh $v0, 0x2c($s0)
/* E25E88 802B6128 9203002D */ lbu $v1, 0x2d($s0)
/* E25E8C 802B612C 3C01402C */ lui $at, 0x402c
/* E25E90 802B6130 3421CCCD */ ori $at, $at, 0xcccd
/* E25E94 802B6134 44810000 */ mtc1 $at, $f0
/* E25E98 802B6138 3C013F66 */ lui $at, 0x3f66
/* E25E9C 802B613C 34216666 */ ori $at, $at, 0x6666
/* E25EA0 802B6140 44811000 */ mtc1 $at, $f2
/* E25EA4 802B6144 24020014 */ addiu $v0, $zero, 0x14
/* E25EA8 802B6148 E6140020 */ swc1 $f20, 0x20($s0)
/* E25EAC 802B614C A602002E */ sh $v0, 0x2e($s0)
/* E25EB0 802B6150 A2030003 */ sb $v1, 3($s0)
/* E25EB4 802B6154 E6000024 */ swc1 $f0, 0x24($s0)
/* E25EB8 802B6158 E6020028 */ swc1 $f2, 0x28($s0)
.L802B615C:
/* E25EBC 802B615C 2414FFFF */ addiu $s4, $zero, -1
/* E25EC0 802B6160 3C130001 */ lui $s3, 1
/* E25EC4 802B6164 12400011 */ beqz $s2, .L802B61AC
/* E25EC8 802B6168 36730010 */ ori $s3, $s3, 0x10
/* E25ECC 802B616C 32420004 */ andi $v0, $s2, 4
/* E25ED0 802B6170 10400005 */ beqz $v0, .L802B6188
/* E25ED4 802B6174 32420002 */ andi $v0, $s2, 2
/* E25ED8 802B6178 24140002 */ addiu $s4, $zero, 2
/* E25EDC 802B617C 3C130001 */ lui $s3, 1
/* E25EE0 802B6180 080AD86B */ j .L802B61AC
/* E25EE4 802B6184 36730012 */ ori $s3, $s3, 0x12
.L802B6188:
/* E25EE8 802B6188 10400003 */ beqz $v0, .L802B6198
/* E25EEC 802B618C 32420001 */ andi $v0, $s2, 1
/* E25EF0 802B6190 080AD86B */ j .L802B61AC
/* E25EF4 802B6194 24140004 */ addiu $s4, $zero, 4
.L802B6198:
/* E25EF8 802B6198 10400005 */ beqz $v0, .L802B61B0
/* E25EFC 802B619C 24022111 */ addiu $v0, $zero, 0x2111
/* E25F00 802B61A0 0000A02D */ daddu $s4, $zero, $zero
/* E25F04 802B61A4 3C130001 */ lui $s3, 1
/* E25F08 802B61A8 36730011 */ ori $s3, $s3, 0x11
.L802B61AC:
/* E25F0C 802B61AC 24022111 */ addiu $v0, $zero, 0x2111
.L802B61B0:
/* E25F10 802B61B0 AE020030 */ sw $v0, 0x30($s0)
/* E25F14 802B61B4 2402FFFD */ addiu $v0, $zero, -3
/* E25F18 802B61B8 02421824 */ and $v1, $s2, $v0
/* E25F1C 802B61BC 24020004 */ addiu $v0, $zero, 4
/* E25F20 802B61C0 14620004 */ bne $v1, $v0, .L802B61D4
/* E25F24 802B61C4 24020001 */ addiu $v0, $zero, 1
/* E25F28 802B61C8 24022113 */ addiu $v0, $zero, 0x2113
/* E25F2C 802B61CC AE020030 */ sw $v0, 0x30($s0)
/* E25F30 802B61D0 24020001 */ addiu $v0, $zero, 1
.L802B61D4:
/* E25F34 802B61D4 14620004 */ bne $v1, $v0, .L802B61E8
/* E25F38 802B61D8 24020005 */ addiu $v0, $zero, 5
/* E25F3C 802B61DC 24022112 */ addiu $v0, $zero, 0x2112
/* E25F40 802B61E0 AE020030 */ sw $v0, 0x30($s0)
/* E25F44 802B61E4 24020005 */ addiu $v0, $zero, 5
.L802B61E8:
/* E25F48 802B61E8 14620002 */ bne $v1, $v0, .L802B61F4
/* E25F4C 802B61EC 24022114 */ addiu $v0, $zero, 0x2114
/* E25F50 802B61F0 AE020030 */ sw $v0, 0x30($s0)
.L802B61F4:
/* E25F54 802B61F4 8E040030 */ lw $a0, 0x30($s0)
/* E25F58 802B61F8 0C052736 */ jal sfx_play_sound_at_player
/* E25F5C 802B61FC 0000282D */ daddu $a1, $zero, $zero
/* E25F60 802B6200 0C037FDE */ jal suggest_player_anim_setUnkFlag
/* E25F64 802B6204 0260202D */ daddu $a0, $s3, $zero
/* E25F68 802B6208 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* E25F6C 802B620C 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* E25F70 802B6210 C6200080 */ lwc1 $f0, 0x80($s1)
/* E25F74 802B6214 00031080 */ sll $v0, $v1, 2
/* E25F78 802B6218 00431021 */ addu $v0, $v0, $v1
/* E25F7C 802B621C 00021080 */ sll $v0, $v0, 2
/* E25F80 802B6220 00431023 */ subu $v0, $v0, $v1
/* E25F84 802B6224 000218C0 */ sll $v1, $v0, 3
/* E25F88 802B6228 00431021 */ addu $v0, $v0, $v1
/* E25F8C 802B622C 000210C0 */ sll $v0, $v0, 3
/* E25F90 802B6230 3C01800B */ lui $at, %hi(gCameras+0x6C)
/* E25F94 802B6234 00220821 */ addu $at, $at, $v0
/* E25F98 802B6238 C42C1DEC */ lwc1 $f12, %lo(gCameras+0x6C)($at)
/* E25F9C 802B623C 0C00A6C9 */ jal clamp_angle
/* E25FA0 802B6240 460C0301 */ sub.s $f12, $f0, $f12
/* E25FA4 802B6244 3C014334 */ lui $at, 0x4334
/* E25FA8 802B6248 44811000 */ mtc1 $at, $f2
/* E25FAC 802B624C 00000000 */ nop
/* E25FB0 802B6250 4602003E */ c.le.s $f0, $f2
/* E25FB4 802B6254 00000000 */ nop
/* E25FB8 802B6258 45020004 */ bc1fl .L802B626C
/* E25FBC 802B625C 26940001 */ addiu $s4, $s4, 1
/* E25FC0 802B6260 C6000020 */ lwc1 $f0, 0x20($s0)
/* E25FC4 802B6264 080AD89E */ j .L802B6278
/* E25FC8 802B6268 E62000D4 */ swc1 $f0, 0xd4($s1)
.L802B626C:
/* E25FCC 802B626C C6000020 */ lwc1 $f0, 0x20($s0)
/* E25FD0 802B6270 46000007 */ neg.s $f0, $f0
/* E25FD4 802B6274 E62000D4 */ swc1 $f0, 0xd4($s1)
.L802B6278:
/* E25FD8 802B6278 12400006 */ beqz $s2, .L802B6294
/* E25FDC 802B627C 0280202D */ daddu $a0, $s4, $zero
/* E25FE0 802B6280 0220282D */ daddu $a1, $s1, $zero
/* E25FE4 802B6284 3C063F80 */ lui $a2, 0x3f80
/* E25FE8 802B6288 0C01C4B4 */ jal fx_46
/* E25FEC 802B628C 240703E8 */ addiu $a3, $zero, 0x3e8
/* E25FF0 802B6290 AE2200D8 */ sw $v0, 0xd8($s1)
.L802B6294:
/* E25FF4 802B6294 0C03963C */ jal phys_clear_spin_history
/* E25FF8 802B6298 00000000 */ nop
/* E25FFC 802B629C 27A40010 */ addiu $a0, $sp, 0x10
/* E26000 802B62A0 0C0388C1 */ jal player_input_to_move_vector
/* E26004 802B62A4 27A50014 */ addiu $a1, $sp, 0x14
/* E26008 802B62A8 C7A00010 */ lwc1 $f0, 0x10($sp)
/* E2600C 802B62AC C7A20014 */ lwc1 $f2, 0x14($sp)
/* E26010 802B62B0 E6200080 */ swc1 $f0, 0x80($s1)
/* E26014 802B62B4 E602001C */ swc1 $f2, 0x1c($s0)
.L802B62B8:
/* E26018 802B62B8 3C058011 */ lui $a1, %hi(gSpinHistoryBufferPos)
/* E2601C 802B62BC 24A5C944 */ addiu $a1, $a1, %lo(gSpinHistoryBufferPos)
/* E26020 802B62C0 3C068011 */ lui $a2, %hi(gSpinHistoryPosAngle)
/* E26024 802B62C4 24C6F6B8 */ addiu $a2, $a2, %lo(gSpinHistoryPosAngle)
/* E26028 802B62C8 8CA20000 */ lw $v0, ($a1)
/* E2602C 802B62CC C62000A8 */ lwc1 $f0, 0xa8($s1)
/* E26030 802B62D0 00022040 */ sll $a0, $v0, 1
/* E26034 802B62D4 24420001 */ addiu $v0, $v0, 1
/* E26038 802B62D8 4600018D */ trunc.w.s $f6, $f0
/* E2603C 802B62DC 44033000 */ mfc1 $v1, $f6
/* E26040 802B62E0 3C018011 */ lui $at, %hi(gSpinHistoryPosAngle)
/* E26044 802B62E4 00240821 */ addu $at, $at, $a0
/* E26048 802B62E8 A423F6B8 */ sh $v1, %lo(gSpinHistoryPosAngle)($at)
/* E2604C 802B62EC ACA20000 */ sw $v0, ($a1)
/* E26050 802B62F0 28420006 */ slti $v0, $v0, 6
/* E26054 802B62F4 50400001 */ beql $v0, $zero, .L802B62FC
/* E26058 802B62F8 ACA00000 */ sw $zero, ($a1)
.L802B62FC:
/* E2605C 802B62FC 8CA30000 */ lw $v1, ($a1)
/* E26060 802B6300 C6200028 */ lwc1 $f0, 0x28($s1)
/* E26064 802B6304 00031080 */ sll $v0, $v1, 2
/* E26068 802B6308 4600018D */ trunc.w.s $f6, $f0
/* E2606C 802B630C 3C018011 */ lui $at, %hi(gSpinHistoryPosX)
/* E26070 802B6310 00220821 */ addu $at, $at, $v0
/* E26074 802B6314 E426EF28 */ swc1 $f6, %lo(gSpinHistoryPosX)($at)
/* E26078 802B6318 24640001 */ addiu $a0, $v1, 1
/* E2607C 802B631C C620002C */ lwc1 $f0, 0x2c($s1)
/* E26080 802B6320 00031840 */ sll $v1, $v1, 1
/* E26084 802B6324 4600018D */ trunc.w.s $f6, $f0
/* E26088 802B6328 3C018011 */ lui $at, %hi(gSpinHistoryPosY)
/* E2608C 802B632C 00220821 */ addu $at, $at, $v0
/* E26090 802B6330 E426EF10 */ swc1 $f6, %lo(gSpinHistoryPosY)($at)
/* E26094 802B6334 C6200030 */ lwc1 $f0, 0x30($s1)
/* E26098 802B6338 00661821 */ addu $v1, $v1, $a2
/* E2609C 802B633C ACA40000 */ sw $a0, ($a1)
/* E260A0 802B6340 4600018D */ trunc.w.s $f6, $f0
/* E260A4 802B6344 3C018011 */ lui $at, %hi(gSpinHistoryPosZ)
/* E260A8 802B6348 00220821 */ addu $at, $at, $v0
/* E260AC 802B634C E426EF40 */ swc1 $f6, %lo(gSpinHistoryPosZ)($at)
/* E260B0 802B6350 C62000A8 */ lwc1 $f0, 0xa8($s1)
/* E260B4 802B6354 28840006 */ slti $a0, $a0, 6
/* E260B8 802B6358 4600018D */ trunc.w.s $f6, $f0
/* E260BC 802B635C 44023000 */ mfc1 $v0, $f6
/* E260C0 802B6360 14800002 */ bnez $a0, .L802B636C
/* E260C4 802B6364 A4620000 */ sh $v0, ($v1)
/* E260C8 802B6368 ACA00000 */ sw $zero, ($a1)
.L802B636C:
/* E260CC 802B636C 16A0001A */ bnez $s5, .L802B63D8
/* E260D0 802B6370 00000000 */ nop
/* E260D4 802B6374 0C039838 */ jal check_input_hammer
/* E260D8 802B6378 00000000 */ nop
/* E260DC 802B637C 14400005 */ bnez $v0, .L802B6394
/* E260E0 802B6380 3C05FFFE */ lui $a1, 0xfffe
/* E260E4 802B6384 0C039858 */ jal check_input_jump
/* E260E8 802B6388 00000000 */ nop
/* E260EC 802B638C 10400012 */ beqz $v0, .L802B63D8
/* E260F0 802B6390 3C05FFFE */ lui $a1, 0xfffe
.L802B6394:
/* E260F4 802B6394 34A5FFFF */ ori $a1, $a1, 0xffff
/* E260F8 802B6398 3C06FFFD */ lui $a2, 0xfffd
/* E260FC 802B639C 34C6FFFF */ ori $a2, $a2, 0xffff
/* E26100 802B63A0 8E040030 */ lw $a0, 0x30($s0)
/* E26104 802B63A4 8E220004 */ lw $v0, 4($s1)
/* E26108 802B63A8 8E230000 */ lw $v1, ($s1)
/* E2610C 802B63AC 00451024 */ and $v0, $v0, $a1
/* E26110 802B63B0 00661824 */ and $v1, $v1, $a2
/* E26114 802B63B4 AE220004 */ sw $v0, 4($s1)
/* E26118 802B63B8 0C05271B */ jal sfx_stop_sound
/* E2611C 802B63BC AE230000 */ sw $v1, ($s1)
/* E26120 802B63C0 27A40010 */ addiu $a0, $sp, 0x10
/* E26124 802B63C4 0C0388C1 */ jal player_input_to_move_vector
/* E26128 802B63C8 27A50014 */ addiu $a1, $sp, 0x14
/* E2612C 802B63CC C7A00010 */ lwc1 $f0, 0x10($sp)
/* E26130 802B63D0 080ADA5B */ j .L802B696C
/* E26134 802B63D4 E6200080 */ swc1 $f0, 0x80($s1)
.L802B63D8:
/* E26138 802B63D8 82020003 */ lb $v0, 3($s0)
/* E2613C 802B63DC 2842000B */ slti $v0, $v0, 0xb
/* E26140 802B63E0 1040000C */ beqz $v0, .L802B6414
/* E26144 802B63E4 00000000 */ nop
/* E26148 802B63E8 8E2200E0 */ lw $v0, 0xe0($s1)
/* E2614C 802B63EC 30422000 */ andi $v0, $v0, 0x2000
/* E26150 802B63F0 10400008 */ beqz $v0, .L802B6414
/* E26154 802B63F4 24020001 */ addiu $v0, $zero, 1
/* E26158 802B63F8 822300B5 */ lb $v1, 0xb5($s1)
/* E2615C 802B63FC 8E2400E8 */ lw $a0, 0xe8($s1)
/* E26160 802B6400 8E2500EC */ lw $a1, 0xec($s1)
/* E26164 802B6404 A2020001 */ sb $v0, 1($s0)
/* E26168 802B6408 AE030004 */ sw $v1, 4($s0)
/* E2616C 802B640C AE040008 */ sw $a0, 8($s0)
/* E26170 802B6410 AE05000C */ sw $a1, 0xc($s0)
.L802B6414:
/* E26174 802B6414 822300B6 */ lb $v1, 0xb6($s1)
/* E26178 802B6418 28620002 */ slti $v0, $v1, 2
/* E2617C 802B641C 1440004C */ bnez $v0, .L802B6550
/* E26180 802B6420 00000000 */ nop
/* E26184 802B6424 C6000010 */ lwc1 $f0, 0x10($s0)
/* E26188 802B6428 3C013F80 */ lui $at, 0x3f80
/* E2618C 802B642C 44811000 */ mtc1 $at, $f2
/* E26190 802B6430 00000000 */ nop
/* E26194 802B6434 46020001 */ sub.s $f0, $f0, $f2
/* E26198 802B6438 4480C000 */ mtc1 $zero, $f24
/* E2619C 802B643C 00000000 */ nop
/* E261A0 802B6440 4618003C */ c.lt.s $f0, $f24
/* E261A4 802B6444 00000000 */ nop
/* E261A8 802B6448 45000002 */ bc1f .L802B6454
/* E261AC 802B644C E6000010 */ swc1 $f0, 0x10($s0)
/* E261B0 802B6450 E6180010 */ swc1 $f24, 0x10($s0)
.L802B6454:
/* E261B4 802B6454 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* E261B8 802B6458 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* E261BC 802B645C C6200080 */ lwc1 $f0, 0x80($s1)
/* E261C0 802B6460 00031080 */ sll $v0, $v1, 2
/* E261C4 802B6464 00431021 */ addu $v0, $v0, $v1
/* E261C8 802B6468 00021080 */ sll $v0, $v0, 2
/* E261CC 802B646C 00431023 */ subu $v0, $v0, $v1
/* E261D0 802B6470 000218C0 */ sll $v1, $v0, 3
/* E261D4 802B6474 00431021 */ addu $v0, $v0, $v1
/* E261D8 802B6478 000210C0 */ sll $v0, $v0, 3
/* E261DC 802B647C 3C01800B */ lui $at, %hi(gCameras+0x6C)
/* E261E0 802B6480 00220821 */ addu $at, $at, $v0
/* E261E4 802B6484 C42C1DEC */ lwc1 $f12, %lo(gCameras+0x6C)($at)
/* E261E8 802B6488 0C00A6C9 */ jal clamp_angle
/* E261EC 802B648C 460C0301 */ sub.s $f12, $f0, $f12
/* E261F0 802B6490 3C0140C9 */ lui $at, 0x40c9
/* E261F4 802B6494 34210FD0 */ ori $at, $at, 0xfd0
/* E261F8 802B6498 4481A000 */ mtc1 $at, $f20
/* E261FC 802B649C 00000000 */ nop
/* E26200 802B64A0 46140302 */ mul.s $f12, $f0, $f20
/* E26204 802B64A4 00000000 */ nop
/* E26208 802B64A8 3C0143B4 */ lui $at, 0x43b4
/* E2620C 802B64AC 4481B000 */ mtc1 $at, $f22
/* E26210 802B64B0 E7A00010 */ swc1 $f0, 0x10($sp)
/* E26214 802B64B4 0C00A85B */ jal sin_rad
/* E26218 802B64B8 46166303 */ div.s $f12, $f12, $f22
/* E2621C 802B64BC C7AC0010 */ lwc1 $f12, 0x10($sp)
/* E26220 802B64C0 46146302 */ mul.s $f12, $f12, $f20
/* E26224 802B64C4 00000000 */ nop
/* E26228 802B64C8 C6020010 */ lwc1 $f2, 0x10($s0)
/* E2622C 802B64CC 46020002 */ mul.s $f0, $f0, $f2
/* E26230 802B64D0 00000000 */ nop
/* E26234 802B64D4 46166303 */ div.s $f12, $f12, $f22
/* E26238 802B64D8 0C00A874 */ jal cos_rad
/* E2623C 802B64DC E6000014 */ swc1 $f0, 0x14($s0)
/* E26240 802B64E0 46000007 */ neg.s $f0, $f0
/* E26244 802B64E4 C6020010 */ lwc1 $f2, 0x10($s0)
/* E26248 802B64E8 96220008 */ lhu $v0, 8($s1)
/* E2624C 802B64EC 46020002 */ mul.s $f0, $f0, $f2
/* E26250 802B64F0 00000000 */ nop
/* E26254 802B64F4 2442FFFF */ addiu $v0, $v0, -1
/* E26258 802B64F8 A6220008 */ sh $v0, 8($s1)
/* E2625C 802B64FC 00021400 */ sll $v0, $v0, 0x10
/* E26260 802B6500 14400011 */ bnez $v0, .L802B6548
/* E26264 802B6504 E6000018 */ swc1 $f0, 0x18($s0)
/* E26268 802B6508 0000202D */ daddu $a0, $zero, $zero
/* E2626C 802B650C 24020004 */ addiu $v0, $zero, 4
/* E26270 802B6510 0C039769 */ jal set_action_state
/* E26274 802B6514 A2020000 */ sb $v0, ($s0)
/* E26278 802B6518 3C05FFFD */ lui $a1, 0xfffd
/* E2627C 802B651C 34A5FFFF */ ori $a1, $a1, 0xffff
/* E26280 802B6520 3C06FFFE */ lui $a2, 0xfffe
/* E26284 802B6524 34C6FFFF */ ori $a2, $a2, 0xffff
/* E26288 802B6528 8E040030 */ lw $a0, 0x30($s0)
/* E2628C 802B652C 8E220000 */ lw $v0, ($s1)
/* E26290 802B6530 8E230004 */ lw $v1, 4($s1)
/* E26294 802B6534 00451024 */ and $v0, $v0, $a1
/* E26298 802B6538 00661824 */ and $v1, $v1, $a2
/* E2629C 802B653C AE220000 */ sw $v0, ($s1)
/* E262A0 802B6540 0C05271B */ jal sfx_stop_sound
/* E262A4 802B6544 AE230004 */ sw $v1, 4($s1)
.L802B6548:
/* E262A8 802B6548 080ADA5B */ j .L802B696C
/* E262AC 802B654C E6380054 */ swc1 $f24, 0x54($s1)
.L802B6550:
/* E262B0 802B6550 14600012 */ bnez $v1, .L802B659C
/* E262B4 802B6554 3C030004 */ lui $v1, 4
/* E262B8 802B6558 8E220004 */ lw $v0, 4($s1)
/* E262BC 802B655C 00431024 */ and $v0, $v0, $v1
/* E262C0 802B6560 1440000D */ bnez $v0, .L802B6598
/* E262C4 802B6564 24020001 */ addiu $v0, $zero, 1
/* E262C8 802B6568 3C028016 */ lui $v0, %hi(gCollisionStatus)
/* E262CC 802B656C 8442A550 */ lh $v0, %lo(gCollisionStatus)($v0)
/* E262D0 802B6570 0440000A */ bltz $v0, .L802B659C
/* E262D4 802B6574 00000000 */ nop
/* E262D8 802B6578 92020002 */ lbu $v0, 2($s0)
/* E262DC 802B657C 24420001 */ addiu $v0, $v0, 1
/* E262E0 802B6580 A2020002 */ sb $v0, 2($s0)
/* E262E4 802B6584 00021600 */ sll $v0, $v0, 0x18
/* E262E8 802B6588 00021603 */ sra $v0, $v0, 0x18
/* E262EC 802B658C 2842000A */ slti $v0, $v0, 0xa
/* E262F0 802B6590 14400002 */ bnez $v0, .L802B659C
/* E262F4 802B6594 24020001 */ addiu $v0, $zero, 1
.L802B6598:
/* E262F8 802B6598 A22200B6 */ sb $v0, 0xb6($s1)
.L802B659C:
/* E262FC 802B659C 86240008 */ lh $a0, 8($s1)
/* E26300 802B65A0 8603002E */ lh $v1, 0x2e($s0)
/* E26304 802B65A4 0064102A */ slt $v0, $v1, $a0
/* E26308 802B65A8 5440003F */ bnel $v0, $zero, .L802B66A8
/* E2630C 802B65AC 00831023 */ subu $v0, $a0, $v1
/* E26310 802B65B0 C600001C */ lwc1 $f0, 0x1c($s0)
/* E26314 802B65B4 44801000 */ mtc1 $zero, $f2
/* E26318 802B65B8 00000000 */ nop
/* E2631C 802B65BC 46020032 */ c.eq.s $f0, $f2
/* E26320 802B65C0 00000000 */ nop
/* E26324 802B65C4 45010002 */ bc1t .L802B65D0
/* E26328 802B65C8 46001606 */ mov.s $f24, $f2
/* E2632C 802B65CC C6180024 */ lwc1 $f24, 0x24($s0)
.L802B65D0:
/* E26330 802B65D0 C6000010 */ lwc1 $f0, 0x10($s0)
/* E26334 802B65D4 3C01802B */ lui $at, %hi(D_802B69A0_E26700)
/* E26338 802B65D8 D42269A0 */ ldc1 $f2, %lo(D_802B69A0_E26700)($at)
/* E2633C 802B65DC 46000021 */ cvt.d.s $f0, $f0
/* E26340 802B65E0 46220000 */ add.d $f0, $f0, $f2
/* E26344 802B65E4 3C014110 */ lui $at, 0x4110
/* E26348 802B65E8 44811000 */ mtc1 $at, $f2
/* E2634C 802B65EC 46200020 */ cvt.s.d $f0, $f0
/* E26350 802B65F0 4600103C */ c.lt.s $f2, $f0
/* E26354 802B65F4 00000000 */ nop
/* E26358 802B65F8 45000002 */ bc1f .L802B6604
/* E2635C 802B65FC E6000010 */ swc1 $f0, 0x10($s0)
/* E26360 802B6600 E6020010 */ swc1 $f2, 0x10($s0)
.L802B6604:
/* E26364 802B6604 3C038007 */ lui $v1, %hi(gCurrentCameraID)
/* E26368 802B6608 8C637410 */ lw $v1, %lo(gCurrentCameraID)($v1)
/* E2636C 802B660C C6200080 */ lwc1 $f0, 0x80($s1)
/* E26370 802B6610 00031080 */ sll $v0, $v1, 2
/* E26374 802B6614 00431021 */ addu $v0, $v0, $v1
/* E26378 802B6618 00021080 */ sll $v0, $v0, 2
/* E2637C 802B661C 00431023 */ subu $v0, $v0, $v1
/* E26380 802B6620 000218C0 */ sll $v1, $v0, 3
/* E26384 802B6624 00431021 */ addu $v0, $v0, $v1
/* E26388 802B6628 000210C0 */ sll $v0, $v0, 3
/* E2638C 802B662C 3C01800B */ lui $at, %hi(gCameras+0x6C)
/* E26390 802B6630 00220821 */ addu $at, $at, $v0
/* E26394 802B6634 C42C1DEC */ lwc1 $f12, %lo(gCameras+0x6C)($at)
/* E26398 802B6638 0C00A6C9 */ jal clamp_angle
/* E2639C 802B663C 460C0301 */ sub.s $f12, $f0, $f12
/* E263A0 802B6640 3C0140C9 */ lui $at, 0x40c9
/* E263A4 802B6644 34210FD0 */ ori $at, $at, 0xfd0
/* E263A8 802B6648 4481A000 */ mtc1 $at, $f20
/* E263AC 802B664C 00000000 */ nop
/* E263B0 802B6650 46140302 */ mul.s $f12, $f0, $f20
/* E263B4 802B6654 00000000 */ nop
/* E263B8 802B6658 3C0143B4 */ lui $at, 0x43b4
/* E263BC 802B665C 4481B000 */ mtc1 $at, $f22
/* E263C0 802B6660 E7A00010 */ swc1 $f0, 0x10($sp)
/* E263C4 802B6664 0C00A85B */ jal sin_rad
/* E263C8 802B6668 46166303 */ div.s $f12, $f12, $f22
/* E263CC 802B666C C7AC0010 */ lwc1 $f12, 0x10($sp)
/* E263D0 802B6670 46146302 */ mul.s $f12, $f12, $f20
/* E263D4 802B6674 00000000 */ nop
/* E263D8 802B6678 C6020010 */ lwc1 $f2, 0x10($s0)
/* E263DC 802B667C 46020002 */ mul.s $f0, $f0, $f2
/* E263E0 802B6680 00000000 */ nop
/* E263E4 802B6684 46166303 */ div.s $f12, $f12, $f22
/* E263E8 802B6688 0C00A874 */ jal cos_rad
/* E263EC 802B668C E6000014 */ swc1 $f0, 0x14($s0)
/* E263F0 802B6690 C6020010 */ lwc1 $f2, 0x10($s0)
/* E263F4 802B6694 46000007 */ neg.s $f0, $f0
/* E263F8 802B6698 46020002 */ mul.s $f0, $f0, $f2
/* E263FC 802B669C 00000000 */ nop
/* E26400 802B66A0 080AD9CE */ j .L802B6738
/* E26404 802B66A4 E6000018 */ swc1 $f0, 0x18($s0)
.L802B66A8:
/* E26408 802B66A8 2442FFFF */ addiu $v0, $v0, -1
/* E2640C 802B66AC C6020028 */ lwc1 $f2, 0x28($s0)
/* E26410 802B66B0 44820000 */ mtc1 $v0, $f0
/* E26414 802B66B4 00000000 */ nop
/* E26418 802B66B8 46800020 */ cvt.s.w $f0, $f0
/* E2641C 802B66BC 46020002 */ mul.s $f0, $f0, $f2
/* E26420 802B66C0 00000000 */ nop
/* E26424 802B66C4 C6020024 */ lwc1 $f2, 0x24($s0)
/* E26428 802B66C8 46001601 */ sub.s $f24, $f2, $f0
/* E2642C 802B66CC 3C01802B */ lui $at, %hi(D_802B69A8_E26708)
/* E26430 802B66D0 D42269A8 */ ldc1 $f2, %lo(D_802B69A8_E26708)($at)
/* E26434 802B66D4 4600C021 */ cvt.d.s $f0, $f24
/* E26438 802B66D8 4622003C */ c.lt.d $f0, $f2
/* E2643C 802B66DC 00000000 */ nop
/* E26440 802B66E0 45000004 */ bc1f .L802B66F4
/* E26444 802B66E4 00000000 */ nop
/* E26448 802B66E8 3C013DCC */ lui $at, 0x3dcc
/* E2644C 802B66EC 3421CCCD */ ori $at, $at, 0xcccd
/* E26450 802B66F0 4481C000 */ mtc1 $at, $f24
.L802B66F4:
/* E26454 802B66F4 C600001C */ lwc1 $f0, 0x1c($s0)
/* E26458 802B66F8 44802000 */ mtc1 $zero, $f4
/* E2645C 802B66FC 00000000 */ nop
/* E26460 802B6700 46040032 */ c.eq.s $f0, $f4
/* E26464 802B6704 00000000 */ nop
/* E26468 802B6708 45030001 */ bc1tl .L802B6710
/* E2646C 802B670C 46002606 */ mov.s $f24, $f4
.L802B6710:
/* E26470 802B6710 C6000010 */ lwc1 $f0, 0x10($s0)
/* E26474 802B6714 3C013F80 */ lui $at, 0x3f80
/* E26478 802B6718 44811000 */ mtc1 $at, $f2
/* E2647C 802B671C 00000000 */ nop
/* E26480 802B6720 46020001 */ sub.s $f0, $f0, $f2
/* E26484 802B6724 4604003C */ c.lt.s $f0, $f4
/* E26488 802B6728 00000000 */ nop
/* E2648C 802B672C 45000002 */ bc1f .L802B6738
/* E26490 802B6730 E6000010 */ swc1 $f0, 0x10($s0)
/* E26494 802B6734 E6040010 */ swc1 $f4, 0x10($s0)
.L802B6738:
/* E26498 802B6738 96220008 */ lhu $v0, 8($s1)
/* E2649C 802B673C 822300B5 */ lb $v1, 0xb5($s1)
/* E264A0 802B6740 24420001 */ addiu $v0, $v0, 1
/* E264A4 802B6744 10600007 */ beqz $v1, .L802B6764
/* E264A8 802B6748 A6220008 */ sh $v0, 8($s1)
/* E264AC 802B674C 04600030 */ bltz $v1, .L802B6810
/* E264B0 802B6750 28620003 */ slti $v0, $v1, 3
/* E264B4 802B6754 1040002E */ beqz $v0, .L802B6810
/* E264B8 802B6758 00000000 */ nop
/* E264BC 802B675C 080ADA00 */ j .L802B6800
/* E264C0 802B6760 00000000 */ nop
.L802B6764:
/* E264C4 802B6764 27A40010 */ addiu $a0, $sp, 0x10
/* E264C8 802B6768 0C0388C1 */ jal player_input_to_move_vector
/* E264CC 802B676C 27A50014 */ addiu $a1, $sp, 0x14
/* E264D0 802B6770 0C039454 */ jal phys_update_interact_collider
/* E264D4 802B6774 00000000 */ nop
/* E264D8 802B6778 0C039858 */ jal check_input_jump
/* E264DC 802B677C 00000000 */ nop
/* E264E0 802B6780 10400010 */ beqz $v0, .L802B67C4
/* E264E4 802B6784 00000000 */ nop
/* E264E8 802B6788 C7A20014 */ lwc1 $f2, 0x14($sp)
/* E264EC 802B678C 44800000 */ mtc1 $zero, $f0
/* E264F0 802B6790 00000000 */ nop
/* E264F4 802B6794 46001032 */ c.eq.s $f2, $f0
/* E264F8 802B6798 00000000 */ nop
/* E264FC 802B679C 45000007 */ bc1f .L802B67BC
/* E26500 802B67A0 00000000 */ nop
/* E26504 802B67A4 C6220080 */ lwc1 $f2, 0x80($s1)
/* E26508 802B67A8 C7A00010 */ lwc1 $f0, 0x10($sp)
/* E2650C 802B67AC 46001032 */ c.eq.s $f2, $f0
/* E26510 802B67B0 00000000 */ nop
/* E26514 802B67B4 45010003 */ bc1t .L802B67C4
/* E26518 802B67B8 00000000 */ nop
.L802B67BC:
/* E2651C 802B67BC C7A00010 */ lwc1 $f0, 0x10($sp)
/* E26520 802B67C0 E6200080 */ swc1 $f0, 0x80($s1)
.L802B67C4:
/* E26524 802B67C4 C7A00014 */ lwc1 $f0, 0x14($sp)
/* E26528 802B67C8 44801000 */ mtc1 $zero, $f2
/* E2652C 802B67CC 00000000 */ nop
/* E26530 802B67D0 46020032 */ c.eq.s $f0, $f2
/* E26534 802B67D4 00000000 */ nop
/* E26538 802B67D8 45010006 */ bc1t .L802B67F4
/* E2653C 802B67DC 26220054 */ addiu $v0, $s1, 0x54
/* E26540 802B67E0 C620005C */ lwc1 $f0, 0x5c($s1)
/* E26544 802B67E4 46180002 */ mul.s $f0, $f0, $f24
/* E26548 802B67E8 00000000 */ nop
/* E2654C 802B67EC 080ADA04 */ j .L802B6810
/* E26550 802B67F0 E4400000 */ swc1 $f0, ($v0)
.L802B67F4:
/* E26554 802B67F4 46001006 */ mov.s $f0, $f2
/* E26558 802B67F8 080ADA04 */ j .L802B6810
/* E2655C 802B67FC E4400000 */ swc1 $f0, ($v0)
.L802B6800:
/* E26560 802B6800 C620005C */ lwc1 $f0, 0x5c($s1)
/* E26564 802B6804 46180002 */ mul.s $f0, $f0, $f24
/* E26568 802B6808 00000000 */ nop
/* E2656C 802B680C E6200054 */ swc1 $f0, 0x54($s1)
.L802B6810:
/* E26570 802B6810 822200B6 */ lb $v0, 0xb6($s1)
/* E26574 802B6814 14400010 */ bnez $v0, .L802B6858
/* E26578 802B6818 00000000 */ nop
/* E2657C 802B681C 92020003 */ lbu $v0, 3($s0)
/* E26580 802B6820 2442FFFF */ addiu $v0, $v0, -1
/* E26584 802B6824 A2020003 */ sb $v0, 3($s0)
/* E26588 802B6828 00021600 */ sll $v0, $v0, 0x18
/* E2658C 802B682C 18400009 */ blez $v0, .L802B6854
/* E26590 802B6830 24020001 */ addiu $v0, $zero, 1
/* E26594 802B6834 86220008 */ lh $v0, 8($s1)
/* E26598 802B6838 28420002 */ slti $v0, $v0, 2
/* E2659C 802B683C 1440004B */ bnez $v0, .L802B696C
/* E265A0 802B6840 00000000 */ nop
/* E265A4 802B6844 C62000A8 */ lwc1 $f0, 0xa8($s1)
/* E265A8 802B6848 C62C00D4 */ lwc1 $f12, 0xd4($s1)
/* E265AC 802B684C 080ADA58 */ j .L802B6960
/* E265B0 802B6850 460C0300 */ add.s $f12, $f0, $f12
.L802B6854:
/* E265B4 802B6854 A22200B6 */ sb $v0, 0xb6($s1)
.L802B6858:
/* E265B8 802B6858 822300B6 */ lb $v1, 0xb6($s1)
/* E265BC 802B685C 24020001 */ addiu $v0, $zero, 1
/* E265C0 802B6860 14620042 */ bne $v1, $v0, .L802B696C
/* E265C4 802B6864 00000000 */ nop
/* E265C8 802B6868 C62200A8 */ lwc1 $f2, 0xa8($s1)
/* E265CC 802B686C C62000D4 */ lwc1 $f0, 0xd4($s1)
/* E265D0 802B6870 82020001 */ lb $v0, 1($s0)
/* E265D4 802B6874 46001000 */ add.s $f0, $f2, $f0
/* E265D8 802B6878 E7A20010 */ swc1 $f2, 0x10($sp)
/* E265DC 802B687C 10400008 */ beqz $v0, .L802B68A0
/* E265E0 802B6880 E62000A8 */ swc1 $f0, 0xa8($s1)
/* E265E4 802B6884 3C02FFFD */ lui $v0, 0xfffd
/* E265E8 802B6888 3442FFFF */ ori $v0, $v0, 0xffff
/* E265EC 802B688C 3C040001 */ lui $a0, 1
/* E265F0 802B6890 34840002 */ ori $a0, $a0, 2
/* E265F4 802B6894 8E230000 */ lw $v1, ($s1)
/* E265F8 802B6898 080ADA52 */ j .L802B6948
/* E265FC 802B689C 24050002 */ addiu $a1, $zero, 2
.L802B68A0:
/* E26600 802B68A0 46001106 */ mov.s $f4, $f2
/* E26604 802B68A4 4600203C */ c.lt.s $f4, $f0
/* E26608 802B68A8 00000000 */ nop
/* E2660C 802B68AC 45000013 */ bc1f .L802B68FC
/* E26610 802B68B0 00000000 */ nop
/* E26614 802B68B4 3C014334 */ lui $at, 0x4334
/* E26618 802B68B8 44811000 */ mtc1 $at, $f2
/* E2661C 802B68BC 00000000 */ nop
/* E26620 802B68C0 4600103E */ c.le.s $f2, $f0
/* E26624 802B68C4 00000000 */ nop
/* E26628 802B68C8 45000024 */ bc1f .L802B695C
/* E2662C 802B68CC 00000000 */ nop
/* E26630 802B68D0 4602203C */ c.lt.s $f4, $f2
/* E26634 802B68D4 00000000 */ nop
/* E26638 802B68D8 45000020 */ bc1f .L802B695C
/* E2663C 802B68DC 3C02FFFD */ lui $v0, 0xfffd
/* E26640 802B68E0 3442FFFF */ ori $v0, $v0, 0xffff
/* E26644 802B68E4 3C040001 */ lui $a0, 1
/* E26648 802B68E8 34840002 */ ori $a0, $a0, 2
/* E2664C 802B68EC 8E230000 */ lw $v1, ($s1)
/* E26650 802B68F0 24050002 */ addiu $a1, $zero, 2
/* E26654 802B68F4 080ADA52 */ j .L802B6948
/* E26658 802B68F8 E62200A8 */ swc1 $f2, 0xa8($s1)
.L802B68FC:
/* E2665C 802B68FC 44802000 */ mtc1 $zero, $f4
/* E26660 802B6900 00000000 */ nop
/* E26664 802B6904 4604003E */ c.le.s $f0, $f4
/* E26668 802B6908 00000000 */ nop
/* E2666C 802B690C 45000013 */ bc1f .L802B695C
/* E26670 802B6910 00000000 */ nop
/* E26674 802B6914 3C0142B4 */ lui $at, 0x42b4
/* E26678 802B6918 44810000 */ mtc1 $at, $f0
/* E2667C 802B691C 00000000 */ nop
/* E26680 802B6920 4600103C */ c.lt.s $f2, $f0
/* E26684 802B6924 00000000 */ nop
/* E26688 802B6928 4500000C */ bc1f .L802B695C
/* E2668C 802B692C 3C02FFFD */ lui $v0, 0xfffd
/* E26690 802B6930 3442FFFF */ ori $v0, $v0, 0xffff
/* E26694 802B6934 3C040001 */ lui $a0, 1
/* E26698 802B6938 34840002 */ ori $a0, $a0, 2
/* E2669C 802B693C 8E230000 */ lw $v1, ($s1)
/* E266A0 802B6940 24050002 */ addiu $a1, $zero, 2
/* E266A4 802B6944 E62400A8 */ swc1 $f4, 0xa8($s1)
.L802B6948:
/* E266A8 802B6948 A6250008 */ sh $a1, 8($s1)
/* E266AC 802B694C A22500B6 */ sb $a1, 0xb6($s1)
/* E266B0 802B6950 00621824 */ and $v1, $v1, $v0
/* E266B4 802B6954 0C037FBF */ jal suggest_player_anim_clearUnkFlag
/* E266B8 802B6958 AE230000 */ sw $v1, ($s1)
.L802B695C:
/* E266BC 802B695C C62C00A8 */ lwc1 $f12, 0xa8($s1)
.L802B6960:
/* E266C0 802B6960 0C00A6C9 */ jal clamp_angle
/* E266C4 802B6964 00000000 */ nop
/* E266C8 802B6968 E62000A8 */ swc1 $f0, 0xa8($s1)
.L802B696C:
/* E266CC 802B696C 8FBF0030 */ lw $ra, 0x30($sp)
/* E266D0 802B6970 8FB5002C */ lw $s5, 0x2c($sp)
/* E266D4 802B6974 8FB40028 */ lw $s4, 0x28($sp)
/* E266D8 802B6978 8FB30024 */ lw $s3, 0x24($sp)
/* E266DC 802B697C 8FB20020 */ lw $s2, 0x20($sp)
/* E266E0 802B6980 8FB1001C */ lw $s1, 0x1c($sp)
/* E266E4 802B6984 8FB00018 */ lw $s0, 0x18($sp)
/* E266E8 802B6988 D7B80048 */ ldc1 $f24, 0x48($sp)
/* E266EC 802B698C D7B60040 */ ldc1 $f22, 0x40($sp)
/* E266F0 802B6990 D7B40038 */ ldc1 $f20, 0x38($sp)
/* E266F4 802B6994 03E00008 */ jr $ra
/* E266F8 802B6998 27BD0050 */ addiu $sp, $sp, 0x50
/* E266FC 802B699C 00000000 */ nop

View File

@ -3069,7 +3069,7 @@ segments:
vram: 0xE00C8000
subsegments:
- [0x3CF3A0, c, throw_spiny]
- [0x3CFAB0, data]
- [0x3CFAB0]
- [0x3CFAF0, bin] # throw_spiny gfx
- name: effect_effect_65
dir: effects

View File

@ -222,6 +222,11 @@ D_09000B88 = 0x09000B88;
D_09000C00 = 0x09000C00;
D_09000C20 = 0x09000C20;
// effect_throw_spiny
D_09000800 = 0x09000800;
D_090008D8 = 0x090008D8;
D_090009F0 = 0x090009F0;
// Invalid pointers from dead code
dead_atan2 = 0x8002AF70;
dead_gCurrentCamID = 0x800A158C;