From a293e4e120ec1e4a788603c6f75cf1e977576698 Mon Sep 17 00:00:00 2001 From: Unnunu Date: Fri, 30 Sep 2022 17:00:33 +0300 Subject: [PATCH] two partner functions (#793) * matched partner_walking_follow_player * clean stuff --- src/bss2.c | 6 +- src/world/partner/bow.c | 4 +- src/world/partner/parakarry.c | 4 +- src/world/partner/watt.c | 4 +- src/world/partners.c | 883 +++++++--- .../partners/partner_flying_follow_player.s | 1060 ------------ .../partners/partner_walking_follow_player.s | 1534 ----------------- ver/us/symbol_addrs.txt | 12 +- 8 files changed, 695 insertions(+), 2812 deletions(-) delete mode 100644 ver/us/asm/nonmatchings/world/partners/partner_flying_follow_player.s delete mode 100644 ver/us/asm/nonmatchings/world/partners/partner_walking_follow_player.s diff --git a/src/bss2.c b/src/bss2.c index 3d8e4a0d94..b3f576054e 100644 --- a/src/bss2.c +++ b/src/bss2.c @@ -70,13 +70,13 @@ BSS char D_8010C9B4[0xC]; // BSS s32 D_8010CFBC; // BSS s32 wPartnerTetherDistance; // BSS s32 D_8010CFC4; -// BSS s16 D_8010CFC8; +// BSS s16 wPartnerFollowState; // BSS s16 D_8010CFCA; // BSS s16 D_8010CFCC; // BSS s16 D_8010CFCE; -// BSS s32 D_8010CFD0; +// BSS s32 wPartnerNpcIndex; // BSS s32 wPartnerCurrentScript; -// BSS s32 D_8010CFD8; +// BSS s32 wCurrentPartnerId; // BSS s32 wPartnerCurrentScriptID; // BSS s32 D_8010CFE0; // BSS s32 D_8010CFE4; diff --git a/src/world/partner/bow.c b/src/world/partner/bow.c index 37b3c29b8f..c7906c3260 100644 --- a/src/world/partner/bow.c +++ b/src/world/partner/bow.c @@ -171,7 +171,7 @@ ApiStatus BowUseAbility(Evt* script, s32 isInitialCall) { if (isInitialCall) { func_802BD4FC_323E4C(bow); if (!(playerStatus->animFlags & PA_FLAGS_100000)) { - if (func_800EA52C(9)) { + if (func_800EA52C(PARTNER_BOW)) { if (playerStatus->animFlags & PA_FLAGS_200000) { playerStatus->animFlags &= ~PA_FLAGS_200000; script->functionTemp[2] = disable_player_input(); @@ -201,7 +201,7 @@ ApiStatus BowUseAbility(Evt* script, s32 isInitialCall) { script->functionTemp[0]++; break; case 41: - if ((!func_800EA52C(9) || is_starting_conversation()) && + if ((!func_800EA52C(PARTNER_BOW) || is_starting_conversation()) && script->functionTemp[2] < playerStatus->inputEnabledCounter && D_802BE0C4) { diff --git a/src/world/partner/parakarry.c b/src/world/partner/parakarry.c index 80b756b321..aa528e576b 100644 --- a/src/world/partner/parakarry.c +++ b/src/world/partner/parakarry.c @@ -182,7 +182,7 @@ ApiStatus func_802BD660_319BD0(Evt* evt, s32 isInitialCall) { func_802BD514_319A84(parakarry); if (!(playerStatus->animFlags & PA_FLAGS_100000)) { if (partnerActionStatus->partnerAction_unk_1 == 0) { - if (!func_800EA52C(4)) { + if (!func_800EA52C(PARTNER_PARAKARRY)) { return ApiStatus_DONE2; } D_802BEBC0_31CBE0 = 0x28; @@ -217,7 +217,7 @@ ApiStatus func_802BD660_319BD0(Evt* evt, s32 isInitialCall) { case 41: if (D_802BEBC4 == 0) { if (evt->functionTemp[2] >= playerStatus->inputEnabledCounter) { - if (func_800EA52C(4)) { + if (func_800EA52C(PARTNER_PARAKARRY)) { D_802BEBC0_31CBE0 = 30; break; } diff --git a/src/world/partner/watt.c b/src/world/partner/watt.c index 7042cd5f90..26435c8a3d 100644 --- a/src/world/partner/watt.c +++ b/src/world/partner/watt.c @@ -217,7 +217,7 @@ ApiStatus func_802BD754_31D2C4(Evt* script, s32 isInitialCall) { if (!(playerStatus->animFlags & PA_FLAGS_100000)) { if (partnerActionStatus->partnerAction_unk_1 == 0) { if ((partnerActionStatus->partnerActionState != ACTION_STATE_IDLE) || - (func_800EA52C(6) && !is_starting_conversation())) + (func_800EA52C(PARTNER_WATT) && !is_starting_conversation())) { if (gGameStatusPtr->keepUsingPartnerOnMapChange) { if (playerStatus->animFlags & (PA_FLAGS_HOLDING_WATT | PA_FLAGS_2)) { @@ -259,7 +259,7 @@ ApiStatus func_802BD754_31D2C4(Evt* script, s32 isInitialCall) { if (script->functionTemp[1] == 0) { if (script->functionTemp[2] >= playerStatus->inputEnabledCounter) { if (!(playerStatus->animFlags & PA_FLAGS_100000)) { - if (func_800EA52C(6)) { + if (func_800EA52C(PARTNER_WATT)) { if (!is_starting_conversation()) { D_802BE304 = 20; break; diff --git a/src/world/partners.c b/src/world/partners.c index 8c592ba09c..86aea17cc6 100644 --- a/src/world/partners.c +++ b/src/world/partners.c @@ -11,13 +11,13 @@ BSS s32 gPlayerMoveHistoryIndex; BSS s32 D_8010CFBC; BSS f32 wPartnerTetherDistance; BSS s32 D_8010CFC4; -BSS s16 D_8010CFC8; +BSS s16 wPartnerFollowState; BSS s16 D_8010CFCA; BSS s16 D_8010CFCC; BSS s16 D_8010CFCE; -BSS s32 D_8010CFD0; +BSS s32 wPartnerNpcIndex; BSS Evt* wPartnerCurrentScript; -BSS s32 D_8010CFD8; +BSS s32 wCurrentPartnerId; BSS s32 wPartnerCurrentScriptID; BSS s32 D_8010CFE0; BSS s32 D_8010CFE4; @@ -593,7 +593,7 @@ s32 world_partner_can_player_pause_default(Npc* partner) { return TRUE; } -s32 func_800EA52C(s32 arg0) { +s32 func_800EA52C(s32 partnerID) { PlayerStatus* playerStatus = &gPlayerStatus; u32 playerActionState = playerStatus->actionState; s32 ret = FALSE; @@ -602,15 +602,15 @@ s32 func_800EA52C(s32 arg0) { return FALSE; } - if (playerActionState < ACTION_STATE_JUMP) { + if (playerActionState == ACTION_STATE_IDLE || playerActionState == ACTION_STATE_WALK || playerActionState == ACTION_STATE_RUN) { ret = TRUE; } - if (arg0 == 9) { + if (partnerID == PARTNER_BOW) { if (playerActionState == ACTION_STATE_RIDE) { ret = TRUE; } - } else if (arg0 == 4) { + } else if (partnerID == PARTNER_PARAKARRY) { if ((playerActionState != ACTION_STATE_RIDE) && (playerActionState != ACTION_STATE_IDLE) && (playerActionState != ACTION_STATE_WALK)) { if (playerActionState == ACTION_STATE_RUN) { ret = TRUE; @@ -627,13 +627,13 @@ s32 partner_is_flying(void) { return !wPartner->isFlying; } -void func_800EA5B8(s32* partnerNpcFlags) { - *partnerNpcFlags &= ~(NPC_FLAG_SIMPLIFIED_PHYSICS | NPC_FLAG_4000 | NPC_FLAG_NO_PROJECT_SHADOW | NPC_FLAG_1000 | +void func_800EA5B8(Npc* partner) { + partner->flags &= ~(NPC_FLAG_SIMPLIFIED_PHYSICS | NPC_FLAG_4000 | NPC_FLAG_NO_PROJECT_SHADOW | NPC_FLAG_1000 | NPC_FLAG_JUMPING); } void partner_create_npc(void) { - WorldPartner* partnerEntry = &wPartners[D_8010CFD8]; + WorldPartner* partnerEntry = &wPartners[wCurrentPartnerId]; Npc** partnerNpcPtr = &wPartnerNpc; WorldPartner** partner = &wPartner; s32 npcIndex; @@ -648,7 +648,7 @@ void partner_create_npc(void) { blueprint.initialAnim = (*partner)->idle; blueprint.onUpdate = NULL; blueprint.onRender = NULL; - D_8010CFD0 = npcIndex = _create_npc_basic(blueprintPtr); + wPartnerNpcIndex = npcIndex = _create_npc_basic(blueprintPtr); *partnerNpcPtr = get_npc_by_index(npcIndex); @@ -673,7 +673,7 @@ void partner_create_npc(void) { } void partner_free_npc(void) { - free_npc_by_index(D_8010CFD0); + free_npc_by_index(wPartnerNpcIndex); } void _use_partner_ability(void) { @@ -738,7 +738,7 @@ void _use_partner_ability(void) { } set_time_freeze_mode(TIME_FREEZE_NORMAL); partner_free_npc(); - playerData->currentPartner = D_8010CFD8 = D_8010CFE4; + playerData->currentPartner = wCurrentPartnerId = D_8010CFE4; partner_create_npc(); sfx_play_sound(SOUND_E); wPartner->init(wPartnerNpc); @@ -773,7 +773,7 @@ void _use_partner_ability(void) { D_8010CD34 += 1; case 1: partner_free_npc(); - playerData->currentPartner = D_8010CFD8 = D_8010CFE4; + playerData->currentPartner = wCurrentPartnerId = D_8010CFE4; partner_create_npc(); wPartnerNpc->pos.x = wSavedPartnerPosX; wPartnerNpc->pos.y = wSavedPartnerPosY; @@ -814,7 +814,7 @@ void _use_partner_ability(void) { } partner_free_npc(); D_8010CD30 = 1; - playerData->currentPartner = D_8010CFD8 = D_8010CFE4; + playerData->currentPartner = wCurrentPartnerId = D_8010CFE4; enable_player_input(); break; } @@ -824,7 +824,7 @@ void _use_partner_ability(void) { kill_script_by_ID(wPartnerCurrentScriptID); partner_free_npc(); D_8010CD30 = 1; - playerData->currentPartner = D_8010CFD8 = D_8010CFE4; + playerData->currentPartner = wCurrentPartnerId = D_8010CFE4; break; } break; @@ -832,7 +832,7 @@ void _use_partner_ability(void) { switch (D_8010CD34) { case 0: disable_player_input(); - playerData->currentPartner = D_8010CFD8 = D_8010CFE4; + playerData->currentPartner = wCurrentPartnerId = D_8010CFE4; partner_create_npc(); wPartner->init(wPartnerNpc); D_8010CD34 += 1; @@ -861,7 +861,7 @@ void _use_partner_ability(void) { switch (D_8010CD34) { case 0: disable_player_input(); - playerData->currentPartner = D_8010CFD8 = D_8010CFE4; + playerData->currentPartner = wCurrentPartnerId = D_8010CFE4; partner_create_npc(); wPartnerNpc->pos.x = wSavedPartnerPosX; wPartnerNpc->pos.y = wSavedPartnerPosY; @@ -879,7 +879,7 @@ void _use_partner_ability(void) { wPartnerCurrentScriptID = wPartnerCurrentScript->id; wPartnerCurrentScript->groupFlags = EVT_GROUP_08 | EVT_GROUP_02; D_8010CD30 = 1; - wPartnerNpc->currentAnim = gPartnerAnimations[D_8010CFD8].fly; + wPartnerNpc->currentAnim = gPartnerAnimations[wCurrentPartnerId].fly; enable_player_input(); break; } @@ -954,11 +954,11 @@ static const f32 rodata_padding = 0.0f; void switch_to_partner(s32 arg0) { PlayerStatus* playerStatus = &gPlayerStatus; - if (D_8010CFD8 != arg0) { + if (wCurrentPartnerId != arg0) { D_8010CFE0 = 1; D_8010CFE4 = arg0; - if (D_8010CFD8 != 0 && arg0 != 0) { + if (wCurrentPartnerId != 0 && arg0 != 0) { D_8010CFE8 = 3; } else if (arg0 == 0) { D_8010CFE8 = 4; @@ -975,13 +975,13 @@ void partner_init_after_battle(s32 arg0) { PlayerStatus* playerStatus = &gPlayerStatus; PartnerActionStatus* actionStatus = &gPartnerActionStatus; - if (D_8010CFD8 != arg0) { + if (wCurrentPartnerId != arg0) { D_8010CFE0 = 1; D_8010CFE4 = arg0; actionStatus->partnerActionState = 0; actionStatus->partnerAction_unk_1 = 0; - if (D_8010CFD8 != 0 && arg0 != 0) { + if (wCurrentPartnerId != 0 && arg0 != 0) { D_8010CFE8 = 2; } else if (arg0 == 0) { D_8010CFE8 = 4; @@ -995,11 +995,11 @@ void partner_init_after_battle(s32 arg0) { } void func_800EB2A4(s32 arg0) { - if (D_8010CFD8 != arg0) { + if (wCurrentPartnerId != arg0) { D_8010CFE0 = 1; D_8010CFE4 = arg0; - if (D_8010CFD8 != 0 && arg0 != 0) { + if (wCurrentPartnerId != 0 && arg0 != 0) { D_8010CFE8 = 3; } else if (arg0 == 0) { D_8010CFE8 = 5; @@ -1018,7 +1018,7 @@ s32 partner_use_ability(void) { { if ((gGameStatusPtr->multiplayerEnabled != 0) && (actionStatus->currentButtons & BUTTON_B)) { sfx_play_sound(SOUND_MENU_ERROR); - } else if (D_8010CFD8 != 0) { + } else if (wCurrentPartnerId != 0) { D_8010CFE0 = 1; D_8010CFE8 = 8; _use_partner_ability(); @@ -1051,7 +1051,7 @@ void partner_reset_data(void) { D_8010CFE0 = 1; D_8010CFE8 = 9; - D_8010CFD8 = currentPartner; + wCurrentPartnerId = currentPartner; if (gGameStatusPtr->keepUsingPartnerOnMapChange != 0) { gPartnerActionStatus.partnerActionState = 1; @@ -1063,7 +1063,7 @@ void partner_reset_data(void) { wSavedPartnerPosY = playerStatus->position.y; wSavedPartnerPosZ = playerStatus->position.z; - if (D_8010CFD8 == 0) { + if (wCurrentPartnerId == 0) { D_8010CFE8 = 1; } else { partner_create_npc(); @@ -1077,7 +1077,7 @@ void partner_reset_data(void) { void partner_initialize_data(void) { PartnerActionStatus* actionStatus = &gPartnerActionStatus; - D_8010CFD8 = 0; + wCurrentPartnerId = 0; D_8010CFE0 = 0; D_8010CFE8 = 0; D_8010CFC4 = 0; @@ -1094,7 +1094,7 @@ void partner_initialize_data(void) { } s32 partner_test_enemy_collision(Npc* enemy) { - if (D_8010CFD8 != 0 && wPartner->testFirstStrike != NULL) { + if (wCurrentPartnerId != 0 && wPartner->testFirstStrike != NULL) { return wPartner->testFirstStrike(wPartnerNpc, enemy); } return FALSE; @@ -1110,7 +1110,7 @@ EvtScript* partner_get_ride_script(void) { } void partner_handle_before_battle(void) { - if (D_8010CFD8 != 0) { + if (wCurrentPartnerId != 0) { s32* scriptID = &wPartnerCurrentScriptID; if (does_script_exist(*scriptID)) { @@ -1127,7 +1127,7 @@ void partner_handle_after_battle(void) { PartnerActionStatus* actionStatus = &gPartnerActionStatus; PlayerData* playerData = &gPlayerData; - if (D_8010CFD8 != 0) { + if (wCurrentPartnerId != 0) { if (does_script_exist(wPartnerCurrentScriptID) != 0) { kill_script_by_ID(wPartnerCurrentScriptID); } @@ -1161,7 +1161,7 @@ void partner_kill_ability_script(void) { } void partner_suspend_ability_script(void) { - if (D_8010CFD8 != NULL) { + if (wCurrentPartnerId != NULL) { s32* scriptID = &wPartnerCurrentScriptID; if (does_script_exist(*scriptID)) { @@ -1171,7 +1171,7 @@ void partner_suspend_ability_script(void) { } void partner_resume_ability_script(void) { - if (D_8010CFD8 != NULL) { + if (wCurrentPartnerId != NULL) { s32* scriptID = &wPartnerCurrentScriptID; if (does_script_exist(*scriptID)) { @@ -1199,23 +1199,23 @@ void partner_walking_enable(Npc* partner, s32 val) { gPlayerMoveHistoryIndex = 0; D_8010CFBC = 0; D_8010CFCA = val ? 2 : 0; - D_8010CFC8 = 0; + wPartnerFollowState = 0; if (D_8010CFC4 == 1 || D_8010CFC4 == 3) { D_8010CFC4 = 0; D_8010CFCA = 0; - D_8010CFC8 = 0; + wPartnerFollowState = 0; } else if (D_8010CFC4 == 2) { D_8010CFCA = 0; - D_8010CFC8 = 50; + wPartnerFollowState = 50; } D_8010CFCE = 0; D_8010CFCC = 0; wPartnerMoveTime = 16; wPartnerTetherDistance = 40.0f; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].idle; - func_800EA5B8(&partner->flags); + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + func_800EA5B8(partner); partner->collisionChannel = COLLISION_CHANNEL_10000; partner->jumpVelocity = 0.0f; partner->flags |= NPC_FLAG_400000 | NPC_FLAG_GRAVITY | NPC_FLAG_100; @@ -1263,7 +1263,7 @@ void partner_walking_update_motion(Npc* partner) { } } - if (D_8010CFC8 != 50 && fabsf(partner->pos.y - playerStatus->position.y) > 1000.0f) { + if (wPartnerFollowState != 50 && fabsf(partner->pos.y - playerStatus->position.y) > 1000.0f) { partner->pos.x = playerStatus->position.x; partner->pos.y = playerStatus->position.y; partner->pos.z = playerStatus->position.z; @@ -1278,7 +1278,494 @@ void partner_walking_update_motion(Npc* partner) { wSavedPartnerPosZ = partner->pos.z; } -INCLUDE_ASM(void, "world/partners", partner_walking_follow_player, Npc* partner); +void partner_walking_follow_player(Npc* partner) { + PlayerStatus* playerStatus = &gPlayerStatus; + Camera* cameras = &gCameras[0]; + s32 surfaceType; + f32 moveHistoryX, moveHistoryY, moveHistoryZ; + f32 x, y, z; + f32 distance; + f32 yaw; + f32 temp_a3; + f32 angle; + s32 var_a1; + PlayerPathElement* currentSnapshot; + + switch (wPartnerFollowState) { + case 0: + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; + x = partner->pos.x; + y = partner->pos.y; + z = partner->pos.z; + partner->moveSpeed = 3.0f; + + distance = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + if (distance >= 50.0) { + partner->moveSpeed = !(playerStatus->animFlags & PA_FLAGS_SPINNING) ? 5.0f : 7.0f; + } + if (wPartnerTetherDistance < 20.0) { + partner->moveSpeed = 4.0f; + } + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].run; + if (!(partner->flags & NPC_FLAG_1000)) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; + } + while (TRUE) { + distance = dist2D(x, z, moveHistoryX, moveHistoryZ); + yaw = atan2(x, z, moveHistoryX, moveHistoryZ); + if (partner->moveSpeed < distance) { + distance = dist2D(x, z, playerStatus->position.x, playerStatus->position.z); + if (distance >= 50.0) { + break; + } + if (wPartnerTetherDistance < distance) { + partner->moveSpeed = distance - wPartnerTetherDistance; + if (partner->moveSpeed > 3.0) { + partner->moveSpeed = 3.0f; + if (wPartnerTetherDistance < 20.0f) { + partner->moveSpeed = 4.0f; + } + } else { + partner->moveSpeed += 1.0; + } + break; + } else { + partner->moveSpeed = 0.0f; + partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + } + } + if (D_8010CFBC == gPlayerMoveHistoryIndex) { + yaw = partner->yaw; + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + wPartnerFollowState = 5; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + break; + } else { + D_8010CFBC++; + if (D_8010CFBC >= 40) { + D_8010CFBC = 0; + } + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; + + if (fabsf(get_clamped_angle_diff(partner->yaw, atan2(partner->pos.x, partner->pos.z, moveHistoryX, moveHistoryZ))) > 90.0f) { + wPartnerFollowState = 5; + break; + } + + if ((partner->flags & NPC_FLAG_1000) && currentSnapshot->isJumping) { + wPartnerFollowState = 1; + break; + } + } + } + + if (!(partner->flags & NPC_FLAG_1000)) { + partner->moveSpeed *= 0.5f; + } + partner->yaw = yaw; + npc_move_heading(partner, partner->moveSpeed, partner->yaw); + if (partner->moveSpeed < 4.0) { + var_a1 = 0; + } else { + var_a1 = 1; + } + func_8003D660(partner, var_a1); + surfaceType = get_collider_flags(partner->currentFloor); + if (surfaceType == SURFACE_TYPE_SPIKES || + surfaceType == SURFACE_TYPE_LAVA || + (partner->flags & (NPC_FLAG_1000 | NPC_FLAG_4000)) == (NPC_FLAG_1000 | NPC_FLAG_4000)) { + if (!func_800EA4B0(partner->currentWall)) { + D_8010CFBC++; + if (D_8010CFBC >= 40) { + D_8010CFBC = 0; + } + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; + if (fabsf(get_clamped_angle_diff(partner->yaw, atan2(partner->pos.x, partner->pos.z, moveHistoryX, moveHistoryZ))) > 90.0f) { + wPartnerFollowState = 5; + return; + } + } else { + wPartnerFollowState = 1; + return; + } + } + break; + case 1: + surfaceType = get_collider_flags(partner->currentFloor); + if (D_8010CFBC == gPlayerMoveHistoryIndex) { + if (surfaceType == SURFACE_TYPE_SPIKES || surfaceType == SURFACE_TYPE_LAVA) { + moveHistoryX = partner->pos.x; + moveHistoryY = playerStatus->position.y; + moveHistoryZ = partner->pos.z; + add_vec2D_polar(&moveHistoryX, &moveHistoryZ, 6.0f, atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z)); + } else { + break; + } + } else { + D_8010CFBC++; + if (D_8010CFBC >= 40) { + D_8010CFBC = 0; + } + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryY = currentSnapshot->pos.y; + moveHistoryZ = currentSnapshot->pos.z; + } + partner->moveToPos.x = moveHistoryX; + partner->moveToPos.y = moveHistoryY; + partner->moveToPos.z = moveHistoryZ; + partner->duration = 0; + partner->jumpScale = 3.0f; + partner->moveSpeed = 6.0f; + partner->planarFlyDist = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + partner->yaw = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + if (partner->planarFlyDist > 50.0) { + partner->planarFlyDist = 50.0f; + } + distance = partner->planarFlyDist; + y = partner->moveToPos.y - partner->pos.y; + if (distance < wPartnerTetherDistance && !(surfaceType == SURFACE_TYPE_SPIKES || surfaceType == SURFACE_TYPE_LAVA)) { + partner->jumpVelocity = 0.0f; + partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + wPartnerFollowState = 0; + return; + } + partner->duration = distance / partner->moveSpeed; + if (partner->duration < 10) { + partner->duration = 10; + } + partner->moveSpeed = partner->planarFlyDist / partner->duration; + partner->jumpVelocity = (y + partner->jumpScale * partner->duration * partner->duration * 0.5f) / partner->duration; + if (partner->jumpVelocity > 20.0) { + partner->jumpVelocity = 20.0f; + } + if (partner->jumpVelocity < 0.0) { + partner->jumpVelocity = 0.0f; + } + if (!(surfaceType == SURFACE_TYPE_SPIKES || surfaceType == SURFACE_TYPE_LAVA)) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].jump; + } else { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].hurt; + } + + partner->moveToPos.x = partner->pos.x; + partner->moveToPos.y = partner->pos.y; + partner->moveToPos.z = partner->pos.z; + partner->flags |= NPC_FLAG_JUMPING; + wPartnerFollowState = 2; + // fallthrough + case 2: + partner->jumpVelocity -= partner->jumpScale; + partner->pos.y += partner->jumpVelocity; + if (partner->jumpVelocity <= 0.0f) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; + } + if (partner->pos.y < -2000.0f) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fly; + partner->flags &= ~NPC_FLAG_JUMPING; + partner->jumpVelocity = 0.0f; + partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + partner->pos.x = playerStatus->position.x; + partner->pos.y = playerStatus->position.y; + partner->pos.z = playerStatus->position.z; + wPartnerFollowState = 5; + return; + } + if (partner->jumpVelocity <= 0.0f) { + distance = fabsf(partner->jumpVelocity) + 11.0f; + x = partner->pos.x; + y = partner->pos.y + distance; + z = partner->pos.z; + if (npc_raycast_down_around(partner->collisionChannel, &x, &y, &z, &distance, partner->yaw, partner->collisionRadius) != 0) { + if (distance <= fabsf(partner->jumpVelocity) + 22.0f) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fly; + partner->flags &= ~NPC_FLAG_JUMPING; + partner->jumpVelocity = 0.0f; + partner->pos.y = y; + partner->yaw = atan2(x, z, playerStatus->position.x, playerStatus->position.z); + func_8003D660(partner, 2); + wPartnerFollowState = 0; + distance = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + if (distance < 5.0) { + partner->pos.x = playerStatus->position.x; + partner->pos.y = playerStatus->position.y; + partner->pos.z = playerStatus->position.z; + add_vec2D_polar(&partner->pos.x, &partner->pos.z, 5.0f, clamp_angle((cameras[CAM_DEFAULT].currentYaw + 90.0f) - playerStatus->spriteFacingAngle)); + wPartnerFollowState = 5; + } + break; + } + } + } + npc_move_heading(partner, partner->moveSpeed, partner->yaw); + break; + case 5: + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; + x = partner->pos.x; + y = partner->pos.y; + z = partner->pos.z; + distance = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + if (distance <= wPartnerTetherDistance) { + if (D_8010CFCA == 0) { + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + if (playerStatus->actionState == ACTION_STATE_TALK) { + D_8010CFCA = 0; + } + surfaceType = get_collider_flags(partner->currentFloor); + if (surfaceType == SURFACE_TYPE_SPIKES || surfaceType == SURFACE_TYPE_LAVA) { + wPartnerFollowState = 0; + return; + } + } else { + temp_a3 = clamp_angle(cameras[CAM_DEFAULT].currentYaw + (playerStatus->spriteFacingAngle < 180.0f ? 90.0f : -90.0f)); + partner->moveToPos.x = playerStatus->position.x; + partner->moveToPos.y = playerStatus->position.y; + partner->moveToPos.z = playerStatus->position.z; + add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, wPartnerTetherDistance - 10.0f, temp_a3); + yaw = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + distance = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + partner->moveSpeed = 2.0f; + if (distance > 2.0f) { + partner->yaw = yaw; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].run; + if (!(partner->flags & NPC_FLAG_4000)) { + D_800F803A = 0; + } else { + D_800F803A++; + if (D_800F803A > 10) { + yaw = playerStatus->targetYaw; + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + partner->renderYaw = yaw; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + if (D_8010CFCA == 2 || playerStatus->actionState == ACTION_STATE_TALK) { + D_8010CFCA = 0; + } + } + } + } else { + yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + partner->yaw = yaw; + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + if (D_8010CFCA == 2 || playerStatus->actionState == ACTION_STATE_TALK) { + D_8010CFCA = 0; + } + } + partner->yaw = yaw; + npc_move_heading(partner, partner->moveSpeed, yaw); + if (partner->moveSpeed < 4.0) { + var_a1 = 0; + } else { + var_a1 = 1; + } + func_8003D660(partner, var_a1); + distance = 1000.0f; + x = partner->pos.x; + z = partner->pos.z; + y = partner->pos.y + partner->collisionHeight; + if (npc_raycast_down_around(partner->collisionChannel, &x, &y, &z, &distance, partner->yaw, partner->collisionRadius) != 0) { + s32 surfaceType = get_collider_flags(D_8010C978); + if (surfaceType == SURFACE_TYPE_SPIKES || surfaceType == SURFACE_TYPE_LAVA) { + partner->yaw = clamp_angle(yaw + 180.0f); + npc_move_heading(partner, partner->moveSpeed, partner->yaw); + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + if (D_8010CFCA == 2) { + D_8010CFCA = 0; + } else if (playerStatus->actionState == ACTION_STATE_TALK) { + D_8010CFCA = 0; + } + } else if (!func_800EA4B0(D_8010C978)) { + D_8010CFCA = 2; + } + } + break; + } + } + distance = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + if (distance <= wPartnerTetherDistance) { + if (!func_800EA4B0(D_8010C978)) { + D_8010CFCA = 2; + } + } else { + while (TRUE) { + if (currentSnapshot->isJumping) { + break; + } + yaw = atan2(partner->pos.x, partner->pos.z, moveHistoryX, moveHistoryZ); + if (fabsf(get_clamped_angle_diff(yaw, atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z))) < 90.0f) { + break; + } + if (D_8010CFBC == gPlayerMoveHistoryIndex) { + break; + } + D_8010CFBC++; + if (D_8010CFBC >= 40) { + D_8010CFBC = 0; + } + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; + } + if (!currentSnapshot->isJumping) { + wPartnerFollowState = 0; + return; + } + while (TRUE) { + if (!currentSnapshot->isJumping) { + break; + } + yaw = atan2(partner->pos.x, partner->pos.z, moveHistoryX, moveHistoryZ); + if (fabsf(get_clamped_angle_diff(yaw, atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z))) < 90.0f) { + break; + } + if (D_8010CFBC == gPlayerMoveHistoryIndex) { + break; + } + D_8010CFBC++; + if (D_8010CFBC >= 40) { + D_8010CFBC = 0; + } + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; + } + wPartnerFollowState = 1; + return; + } + break; + case 15: + switch (D_8010CFCE) { + case 0: + angle = clamp_angle(func_800E5348() + 180.0f); + partner->moveToPos.x = playerStatus->position.x; + partner->moveToPos.y = playerStatus->position.y; + partner->moveToPos.z = playerStatus->position.z; + add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, playerStatus->colliderDiameter, angle); + distance = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + wPartnerMoveSpeed = distance / wPartnerMoveTime; + partner->moveSpeed = wPartnerMoveSpeed; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].anims[wPartnerMoveSpeed >= 4.0 ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK]; + yaw = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + partner->yaw = D_800F8034 = yaw; + D_8010CFCE++; + /* fallthrough */ + case 1: + if (wPartnerMoveTime != 0) { + wPartnerMoveTime--; + if (partner->jumpScale != 0.0f) { + partner->jumpVelocity -= partner->jumpScale; + partner->pos.y += partner->jumpVelocity; + if (partner->jumpVelocity <= 0.0f) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; + } + if (partner->jumpVelocity <= 0.0f) { + distance = fabsf(partner->jumpVelocity) + 11.0f; + x = partner->pos.x; + y = partner->pos.y + distance; + z = partner->pos.z; + if ((npc_raycast_down_around(partner->collisionChannel, &x, &y, &z, &distance, partner->yaw, partner->collisionRadius) != 0) && (distance <= (fabsf(partner->jumpVelocity) + 22.0f))) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].anims[partner->moveSpeed >= 4.0 ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK]; + partner->jumpScale = 0.0f; + partner->jumpVelocity = 0.0f; + partner->pos.y = y; + partner->flags &= ~NPC_FLAG_JUMPING; + } + } + } + partner->moveSpeed = wPartnerMoveSpeed; + partner->yaw = D_800F8034; + npc_move_heading(partner, partner->moveSpeed, partner->yaw); + if (partner->moveSpeed < 4.0) { + var_a1 = 0; + } else { + var_a1 = 1; + } + func_8003D660(partner, var_a1); + } else { + partner_clear_player_tracking(partner); + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + partner->yaw = clamp_angle((cameras[CAM_DEFAULT].currentYaw + 270.0f) - playerStatus->spriteFacingAngle); + wPartnerMoveTime = 30; + D_8010CFCE++; + } + return; + case 2: + if (wPartnerMoveTime != 0) { + wPartnerMoveTime--; + return; + } + wPartnerFollowState = 0; + D_8010CFCA = 0; + D_8010CFCE = 0; + } + break; + case 20: + partner_move_to_goal(partner, FALSE); + break; + case 40: + if (partner->flags & NPC_FLAG_1000) { + if (func_800EA4B0(partner->currentFloor)) { + wPartnerFollowState = 50; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + } else { + wPartnerFollowState = 1; + } + break; + } + partner->jumpScale = 3.0f; + partner->jumpVelocity -= partner->jumpScale; + partner->pos.y += partner->jumpVelocity; + if (partner->jumpVelocity <= 0.0f) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; + } + if (partner->pos.y < -2000.0f) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + partner->flags &= ~NPC_FLAG_JUMPING; + partner->jumpVelocity = 0.0f; + partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + partner->pos.x = playerStatus->position.x; + partner->pos.y = playerStatus->position.y; + partner->pos.z = playerStatus->position.z; + wPartnerFollowState = 50; + return; + } + distance = fabsf(partner->jumpVelocity) + 11.0f; + x = partner->pos.x; + y = partner->pos.y + distance; + z = partner->pos.z; + if (npc_raycast_down_around(partner->collisionChannel, &x, &y, &z, &distance, partner->yaw, partner->collisionRadius) != 0) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + partner->flags &= ~NPC_FLAG_JUMPING; + partner->jumpVelocity = 0.0f; + partner->pos.y = y; + partner->yaw = atan2(x, z, playerStatus->position.x, playerStatus->position.z); + func_8003D660(partner, 2); + wPartnerFollowState = 50; + } + break; + case 50: + break; + } +} + +static const f32 padding = 0.0f; void partner_flying_enable(Npc* partner, s32 val) { PlayerStatus* playerStatus = &gPlayerStatus; @@ -1300,17 +1787,17 @@ void partner_flying_enable(Npc* partner, s32 val) { D_8010CFBC = 0; if (!val) { - D_8010CFC8 = 0; + wPartnerFollowState = 0; D_8010CFCA = 0; } else if (D_8010CFC4 == 0) { - D_8010CFC8 = 15; + wPartnerFollowState = 15; D_8010CFCA = 2; } else if (D_8010CFC4 == 1 || D_8010CFC4 == 3) { D_8010CFC4 = 0; - D_8010CFC8 = 0; + wPartnerFollowState = 0; D_8010CFCA = 0; } else if (D_8010CFC4 == 2) { - D_8010CFC8 = 50; + wPartnerFollowState = 50; D_8010CFCA = 0; } @@ -1318,8 +1805,8 @@ void partner_flying_enable(Npc* partner, s32 val) { D_8010CFCC = 0; wPartnerMoveTime = 16; wPartnerTetherDistance = 40.0f; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].idle; - func_800EA5B8(&partner->flags); + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + func_800EA5B8(partner); partner->collisionChannel = COLLISION_CHANNEL_10000; partner->flags |= NPC_FLAG_100; partner->flags &= ~NPC_FLAG_GRAVITY; @@ -1329,14 +1816,14 @@ void partner_flying_update_player_tracking(Npc* partner) { PlayerStatus* playerStatus = &gPlayerStatus; PlayerPathElement* currentSnapshot; f32 effectiveY; - s32 zero = 0; // TODO fix this as || zero == 0 is always going to be true as is + s32 isPlayerJumping = FALSE; effectiveY = playerStatus->position.y; if ((playerStatus->actionState == ACTION_STATE_HIT_LAVA) || (playerStatus->actionState == ACTION_STATE_HIT_FIRE)) { effectiveY = playerStatus->lastGoodPosition.y + partner->collisionHeight + 5; } currentSnapshot = &gPlayerMoveHistory[gPlayerMoveHistoryIndex]; - if ((!currentSnapshot->isJumping || zero == 0) && (currentSnapshot->pos.x != playerStatus->position.x || currentSnapshot->pos.y != effectiveY + if ((!currentSnapshot->isJumping || !isPlayerJumping) && (currentSnapshot->pos.x != playerStatus->position.x || currentSnapshot->pos.y != effectiveY || currentSnapshot->pos.z != playerStatus->position.z)) { if (D_8010CFBC != gPlayerMoveHistoryIndex + 1) { if (++gPlayerMoveHistoryIndex >= ARRAY_COUNT(gPlayerMoveHistory)) { @@ -1346,7 +1833,7 @@ void partner_flying_update_player_tracking(Npc* partner) { currentSnapshot->pos.x = playerStatus->position.x; currentSnapshot->pos.y = effectiveY; currentSnapshot->pos.z = playerStatus->position.z; - currentSnapshot->isJumping = zero; + currentSnapshot->isJumping = isPlayerJumping; } } } @@ -1370,7 +1857,7 @@ void partner_flying_update_motion(Npc* partner) { partnerActionStatus->partnerAction_unk_2 = 0; } } - if (D_8010CFC8 != 50 && fabsf(partner->pos.y - playerStatus->position.y) > 1000.0f) { + if (wPartnerFollowState != 50 && fabsf(partner->pos.y - playerStatus->position.y) > 1000.0f) { partner->pos.x = playerStatus->position.x; partner->pos.y = playerStatus->position.y; partner->pos.z = playerStatus->position.z; @@ -1392,12 +1879,12 @@ void partner_flying_update_motion(Npc* partner) { wSavedPartnerPosZ = partner->pos.z; } else { partner_do_player_collision(partner); - if (D_8010CFC8 != 0x32) { + if (wPartnerFollowState != 0x32) { x = partner->pos.x; y = partner->pos.y; z = partner->pos.z; hitDepth = 1000.0f; - if (npc_raycast_down_around(0x10000, &x, &y, &z, &hitDepth, partner->yaw, partner->collisionRadius) == 0) { + if (npc_raycast_down_around(COLLISION_CHANNEL_10000, &x, &y, &z, &hitDepth, partner->yaw, partner->collisionRadius) == 0) { y = playerStatus->position.y; } @@ -1433,27 +1920,19 @@ void partner_flying_update_motion(Npc* partner) { } } -// backwards jump hall of shame + more work required -#ifdef NON_EQUIVALENT void partner_flying_follow_player(Npc* partner) { PlayerStatus* playerStatus = &gPlayerStatus; Camera* camera = &gCameras[CAM_DEFAULT]; f32 x, y, z; - f32 temp; + f32 distance; f32 yaw; - f32 temp_a3; - f32 var_f0_2; f32 temp_f0_15; - - f32 temp_f20; - f32 temp_f2_3; f32 var_f12; f32 moveHistoryX, moveHistoryY, moveHistoryZ; + PlayerPathElement* currentSnapshot; - u16 temp_v0_3; - - switch (D_8010CFC8) { + switch (wPartnerFollowState) { case 0: var_f12 = 0.0f; x = partner->pos.x; @@ -1462,19 +1941,20 @@ void partner_flying_follow_player(Npc* partner) { wSavedPartnerPosX = x; wSavedPartnerPosY = y; wSavedPartnerPosZ = z; - moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x; - moveHistoryY = gPlayerMoveHistory[D_8010CFBC].pos.y; - moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z; + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryY = currentSnapshot->pos.y; + moveHistoryZ = currentSnapshot->pos.z; if (wPartnerTetherDistance < 20.0f) { var_f12 = (20.0f - wPartnerTetherDistance) * 0.5f; } - partner->pos.y = y + (((moveHistoryY + 20.0f + var_f12) - y) * 0.125f); + partner->pos.y = y + (moveHistoryY + 20.0f + var_f12 - y) * 0.125f; partner->moveSpeed = 3.0f; y = partner->pos.y; - temp = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); - if (temp >= 50.0) { - if (playerStatus->position.y <= partner->pos.y) { - partner->moveSpeed = temp * 0.25f; + distance = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + if (distance >= 50.0) { + if (partner->pos.y >= playerStatus->position.y) { + partner->moveSpeed = distance * 0.25f; } else { partner->moveSpeed = 8.0f; } @@ -1485,49 +1965,51 @@ void partner_flying_follow_player(Npc* partner) { while (TRUE) { yaw = atan2(x, z, moveHistoryX, moveHistoryZ); - temp = dist2D(x, z, moveHistoryX, moveHistoryZ); - if (partner->moveSpeed < temp) { - if (!(playerStatus->position.y <= partner->pos.y)) { - if (!(partner->moveSpeed > 6.0)) { - partner->moveSpeed += 1.0; + distance = dist2D(x, z, moveHistoryX, moveHistoryZ); + if (partner->moveSpeed < distance) { + if (partner->pos.y >= playerStatus->position.y) { + if (partner->moveSpeed >= distance * 0.25f) { + partner->moveSpeed = distance * 0.25f; } else { - partner->moveSpeed = 6.0f; + partner->moveSpeed += distance * 0.0625f; } } else { - if (partner->moveSpeed >= temp * 0.25f) { - partner->moveSpeed = temp * 0.25f; + if (partner->moveSpeed > 6.0) { + partner->moveSpeed = 6.0f; } else { - partner->moveSpeed += temp * 0.0625f; + partner->moveSpeed += 1.0; } } - } else if (D_8010CFBC != gPlayerMoveHistoryIndex) { - temp = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); - if (!(temp <= wPartnerTetherDistance)) { - D_8010CFBC++; - if (D_8010CFBC >= 40) { - D_8010CFBC = 0; - } - moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x; - moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z; - continue; - } - D_8010CFC8 = 5; - yaw = partner->yaw; - partner->moveSpeed = 0.0f; - partner->jumpScale = 0.0f; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[5]; - } else { - yaw = partner->yaw; - partner->moveSpeed = 0.0f; - partner->jumpScale = 0.0f; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[5]; + break; } - break; + if (D_8010CFBC == gPlayerMoveHistoryIndex) { + yaw = partner->yaw; + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + break; + } + distance = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + if (distance <= wPartnerTetherDistance) { + wPartnerFollowState = 5; + yaw = partner->yaw; + partner->moveSpeed = 0.0f; + partner->jumpScale = 0.0f; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + break; + } + D_8010CFBC++; + if (D_8010CFBC >= 40) { + D_8010CFBC = 0; + } + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; } partner->yaw = yaw; npc_move_heading(partner, partner->moveSpeed, yaw); if (partner->flags & 0x4000) { - D_8010CFC8 = 1; + wPartnerFollowState = 1; return; } break; @@ -1538,12 +2020,16 @@ void partner_flying_follow_player(Npc* partner) { if (D_8010CFBC >= 40) { D_8010CFBC = 0; } + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryY = currentSnapshot->pos.y; + moveHistoryZ = currentSnapshot->pos.z; + partner->moveToPos.x = moveHistoryX; + partner->moveToPos.y = moveHistoryY; + partner->moveToPos.z = moveHistoryZ; partner->duration = 0; partner->jumpScale = 1.3f; - partner->moveToPos.x = gPlayerMoveHistory[D_8010CFBC].pos.x; - partner->moveToPos.y = gPlayerMoveHistory[D_8010CFBC].pos.y; - partner->moveToPos.z = gPlayerMoveHistory[D_8010CFBC].pos.z; - if (D_8010CFC8 == 1) { + if (wPartnerFollowState == 1) { partner->moveSpeed = 6.0f; } partner->planarFlyDist = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); @@ -1551,33 +2037,33 @@ void partner_flying_follow_player(Npc* partner) { if (partner->planarFlyDist > 50.0) { partner->planarFlyDist = 50.0f; } - temp = partner->planarFlyDist; + distance = partner->planarFlyDist; y = partner->moveToPos.y - partner->pos.y; if (partner->planarFlyDist < y) { - temp = y; + distance = y; } - if (D_8010CFC8 == 1) { - if (temp < wPartnerTetherDistance) { + if (wPartnerFollowState == 1) { + if (distance < wPartnerTetherDistance) { partner->jumpVelocity = 0.0f; partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); - D_8010CFC8 = 5; + wPartnerFollowState = 5; return; } - partner->duration = temp / partner->moveSpeed; + partner->duration = distance / partner->moveSpeed; if (partner->duration < 10) { partner->duration = 10; } partner->moveSpeed = partner->planarFlyDist / partner->duration; } else { - partner->duration = 0xA; + partner->duration = 10; } partner->jumpVelocity = (y + (partner->jumpScale * partner->duration * partner->duration * 0.5f)) / partner->duration; if (partner->jumpVelocity > 20.0) { partner->jumpVelocity = 20.0f; } - D_8010CFC8 = 2; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[2]; + wPartnerFollowState = 2; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].jump; partner->moveToPos.x = partner->pos.x; partner->moveToPos.y = partner->pos.y; partner->moveToPos.z = partner->pos.z; @@ -1587,19 +2073,19 @@ void partner_flying_follow_player(Npc* partner) { partner->jumpVelocity -= partner->jumpScale; partner->pos.y += partner->jumpVelocity; if (partner->jumpVelocity <= 0.0f) { - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[3]; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; } npc_move_heading(partner, partner->moveSpeed, partner->yaw); if (partner->jumpVelocity <= 0.0f) { if (partner->pos.y < partner->moveToPos.y) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fly; partner->jumpVelocity = 0.0f; partner->pos.y = partner->moveToPos.y; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[4]; partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); - D_8010CFC8 = 0; - temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); - if (temp < wPartnerTetherDistance) { - D_8010CFC8 = 0xF; + wPartnerFollowState = 0; + distance = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + if (distance < wPartnerTetherDistance) { + wPartnerFollowState = 15; } } } @@ -1608,40 +2094,33 @@ void partner_flying_follow_player(Npc* partner) { x = partner->pos.x; y = partner->pos.y; z = partner->pos.z; - moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x; - moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z; - temp = dist2D(x, z, playerStatus->position.x, playerStatus->position.z); - if (temp <= wPartnerTetherDistance) { + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; + distance = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + if (distance <= wPartnerTetherDistance) { if (D_8010CFCA == 0) { - temp_v0_3 = partner->collisionHeight; + partner->pos.y = y + (((playerStatus->position.y + (playerStatus->colliderHeight - partner->collisionHeight / 2)) - partner->pos.y) * 0.03125); + y = partner->pos.y; partner->moveSpeed = 0.0f; partner->jumpScale = 0.0f; - temp_f2_3 = (y + (((playerStatus->position.y + (playerStatus->colliderHeight - ((s32) ((s16) temp_v0_3 + ((u32) (temp_v0_3 << 0x10) >> 0x1F)) >> 1))) - partner->pos.y) * 0.03125)); - partner->pos.y = temp_f2_3; - y = temp_f2_3; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[5]; - if (playerStatus->actionState == 0xC) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + if (playerStatus->actionState == ACTION_STATE_TALK) { D_8010CFCA = 0; } } else { - if (playerStatus->spriteFacingAngle < 180.0f) { - var_f0_2 = 90.0f; - temp_a3 = clamp_angle(camera->currentYaw + 90.0f); - } else { - var_f0_2 = -90.0f; - temp_a3 = clamp_angle(camera->currentYaw + -90.0f); - } + temp_a3 = clamp_angle(camera->currentYaw + (playerStatus->spriteFacingAngle < 180.0f ? 90.0f : -90.0f)); partner->moveToPos.x = playerStatus->position.x; partner->moveToPos.y = playerStatus->position.y; partner->moveToPos.z = playerStatus->position.z; add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, wPartnerTetherDistance - 10.0f, temp_a3); yaw = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); - temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + distance = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); partner->moveSpeed = 2.0f; - if (temp > 2.0f) { + if (distance > 2.0f) { partner->yaw = yaw; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[6]; - if (!(partner->flags & 0x4000)) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].run; + if (!(partner->flags & NPC_FLAG_4000)) { D_800F803A = 0; } else { D_800F803A++; @@ -1650,8 +2129,8 @@ void partner_flying_follow_player(Npc* partner) { partner->moveSpeed = 0.0f; partner->jumpScale = 0.0f; partner->renderYaw = yaw; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[5]; - if (D_8010CFCA == 2 || playerStatus->actionState == 0xC) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + if (D_8010CFCA == 2 || playerStatus->actionState == ACTION_STATE_TALK) { D_8010CFCA = 0; } } @@ -1661,8 +2140,8 @@ void partner_flying_follow_player(Npc* partner) { partner->yaw = yaw; partner->moveSpeed = 0.0f; partner->jumpScale = 0.0f; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[5]; - if (D_8010CFCA == 2 || playerStatus->actionState == 0xC) { + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + if (D_8010CFCA == 2 || playerStatus->actionState == ACTION_STATE_TALK) { D_8010CFCA = 0; } } @@ -1672,30 +2151,31 @@ void partner_flying_follow_player(Npc* partner) { } } - temp = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); - if (!(temp <= wPartnerTetherDistance)) { + distance = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z); + if (!(distance <= wPartnerTetherDistance)) { while (TRUE) { - if (!gPlayerMoveHistory[D_8010CFBC].isJumping) { - temp_f20 = atan2(partner->pos.x, partner->pos.z, moveHistoryX, moveHistoryZ); - if (!(fabsf(get_clamped_angle_diff(temp_f20, atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z))) < 90.0f)) { + if (!currentSnapshot->isJumping) { + yaw = atan2(partner->pos.x, partner->pos.z, moveHistoryX, moveHistoryZ); + if (!(fabsf(get_clamped_angle_diff(yaw, atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z))) < 90.0f)) { if (D_8010CFBC != gPlayerMoveHistoryIndex) { D_8010CFBC++; if (D_8010CFBC >= 40) { D_8010CFBC = 0; } - moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x; - moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z; + currentSnapshot = &gPlayerMoveHistory[D_8010CFBC]; + moveHistoryX = currentSnapshot->pos.x; + moveHistoryZ = currentSnapshot->pos.z; continue; } } } break; } - D_8010CFC8 = 0; + wPartnerFollowState = 0; } break; case 15: - if (!(playerStatus->animFlags & 0x100000)) { + if (!(playerStatus->animFlags & PA_FLAGS_100000)) { switch (D_8010CFCE) { case 0: temp_f0_15 = clamp_angle(func_800E5348() + 180.0f); @@ -1703,22 +2183,22 @@ void partner_flying_follow_player(Npc* partner) { partner->moveToPos.y = playerStatus->position.y; partner->moveToPos.z = playerStatus->position.z; add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, playerStatus->colliderDiameter, temp_f0_15); - temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); - partner->moveSpeed = wPartnerMoveSpeed = temp / wPartnerMoveTime; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[(partner->moveSpeed < 4.0) ? 1 : 6]; - D_800F8034 = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); - partner->yaw = D_800F8034; + distance = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + partner->moveSpeed = wPartnerMoveSpeed = distance / wPartnerMoveTime; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].anims[(partner->moveSpeed < 4.0) ? PARTNER_ANIM_INDEX_WALK : PARTNER_ANIM_INDEX_RUN]; + yaw = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); + partner->yaw = D_800F8034 = yaw; D_8010CFCE++; /* fallthrough */ case 1: if (wPartnerMoveTime != 0) { - z = partner->pos.z; x = partner->pos.x; y = partner->pos.y + partner->collisionHeight; - temp = partner->collisionHeight + 1; + z = partner->pos.z; + distance = partner->collisionHeight + 1; wPartnerMoveTime--; - if (npc_raycast_down_around(0x10000, &x, &y, &z, &temp, partner->yaw, partner->collisionRadius) == 0) { - if ((partner->collisionHeight + 5) < fabs((partner->pos.y - playerStatus->position.y))) { + if (npc_raycast_down_around(COLLISION_CHANNEL_10000, &x, &y, &z, &distance, partner->yaw, partner->collisionRadius) == 0) { + if (partner->collisionHeight + 5 < fabs((partner->pos.y - playerStatus->position.y))) { partner->pos.y += (playerStatus->position.y - partner->pos.y) / 10.0f; } } else { @@ -1740,8 +2220,8 @@ void partner_flying_follow_player(Npc* partner) { partner_clear_player_tracking(partner); partner->moveSpeed = 0.0f; partner->jumpScale = 0.0f; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[5]; - D_8010CFC8 = 0; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; + wPartnerFollowState = 0; D_8010CFCA = 0; D_8010CFCE = 0; partner->yaw = clamp_angle((camera->currentYaw + 270.0f) - playerStatus->spriteFacingAngle); @@ -1749,24 +2229,21 @@ void partner_flying_follow_player(Npc* partner) { } break; case 20: - partner_move_to_goal(partner, 1); + partner_move_to_goal(partner, TRUE); break; case 40: - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[5]; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; break; case 50: break; } } -#else -INCLUDE_ASM(s32, "world/partners", partner_flying_follow_player); -#endif s32 partner_init_put_away(Npc* partner) { partner->collisionChannel = COLLISION_CHANNEL_10000; - D_8010CFC8 = 0; + wPartnerFollowState = 0; partner->flags |= NPC_FLAG_100; - return D_8010CFC8; + return wPartnerFollowState; } s32 partner_put_away(Npc* partner) { @@ -1780,7 +2257,7 @@ s32 partner_put_away(Npc* partner) { f32 tempDuration; f32 divisor; - switch (D_8010CFC8){ + switch (wPartnerFollowState){ case 0: tempMoveToX = partner->pos.x; tempMoveToY = partner->pos.y; @@ -1805,15 +2282,15 @@ s32 partner_put_away(Npc* partner) { partner->moveSpeed = partner->planarFlyDist / divisor; tempMoveToY = tempPosY - tempMoveToY; partner->jumpVelocity = (tempMoveToY + partner->jumpScale * partner->duration * partner->duration * 0.5f) / partner->duration; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].jump; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].jump; enable_npc_blur(partner); - D_8010CFC8 = 1; + wPartnerFollowState = 1; break; case 1: partner->jumpVelocity -= partner->jumpScale; partner->pos.y += partner->jumpVelocity; if (partner->jumpVelocity <= 0.0f) { - partner->currentAnim = gPartnerAnimations[D_8010CFD8].fall; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; } npc_move_heading(partner, partner->moveSpeed, partner->yaw); tempDuration = partner->duration; @@ -1825,11 +2302,11 @@ s32 partner_put_away(Npc* partner) { partner->scale.z = partner->scale.x; partner->duration--; if (partner->duration >> 0x10 != 0) { - D_8010CFC8 = 2; + wPartnerFollowState = 2; } break; case 2: - partner->currentAnim = gPartnerAnimations[D_8010CFD8].fly; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fly; partner->jumpVelocity = 0.0f; partner->pos.y = partner->moveToPos.y; disable_npc_blur(partner); @@ -1840,9 +2317,9 @@ s32 partner_put_away(Npc* partner) { s32 partner_init_get_out(Npc* npc) { npc->collisionChannel = COLLISION_CHANNEL_10000; - D_8010CFC8 = 0; + wPartnerFollowState = 0; npc->flags |= NPC_FLAG_100; - return D_8010CFC8; + return wPartnerFollowState; } s32 partner_get_out(Npc* partner) { @@ -1853,7 +2330,7 @@ s32 partner_get_out(Npc* partner) { f32 moveToX, moveToY, moveToZ; - switch (D_8010CFC8) { + switch (wPartnerFollowState) { case 0: if (clamp_angle(playerStatus->spriteFacingAngle) < 180.0f) { partner->yaw = clamp_angle(camera->currentYaw + 90.0f); @@ -1876,7 +2353,7 @@ s32 partner_get_out(Npc* partner) { z = moveToZ; add_vec2D_polar(&x, &z, 2.0f, gCameras[gCurrentCameraID].currentYaw); hitDepth = 1000.0f; - if (npc_raycast_down_around(0x10000, &x, &y, &z, &hitDepth, partner->yaw, partner->collisionRadius)) { + if (npc_raycast_down_around(COLLISION_CHANNEL_10000, &x, &y, &z, &hitDepth, partner->yaw, partner->collisionRadius)) { // @bug? collider flags not properly masked with COLLIDER_FLAGS_SURFACE_TYPE s32 surfaceType = get_collider_flags(D_8010C978); @@ -1909,19 +2386,19 @@ s32 partner_get_out(Npc* partner) { } partner->jumpVelocity = (moveToY - y + (partner->jumpScale * partner->duration * partner->duration * 0.5f)) / partner->duration; - D_8010CFC8 = 1; + wPartnerFollowState = 1; y = moveToY - y; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[2]; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].jump; break; case 1: if (partner->jumpVelocity < 0.0f && func_800397E8(partner, fabsf(partner->jumpVelocity))) { - D_8010CFC8 = 2; + wPartnerFollowState = 2; break; } partner->jumpVelocity -= partner->jumpScale; partner->pos.y += partner->jumpVelocity; if (partner->jumpVelocity <= 0.0f) { - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[3]; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; } npc_move_heading(partner, partner->moveSpeed, partner->yaw); npc_do_world_collision(partner); @@ -1936,7 +2413,7 @@ s32 partner_get_out(Npc* partner) { partner->duration--; if (partner->duration < 0) { - D_8010CFC8 = 2; + wPartnerFollowState = 2; } break; case 2: @@ -1969,15 +2446,15 @@ s32 partner_get_out(Npc* partner) { } void func_800EF300(void) { - D_8010CFC8 = 40; + wPartnerFollowState = 40; } void func_800EF314(void) { - D_8010CFC8 = 50; + wPartnerFollowState = 50; } void enable_partner_ai(void) { - D_8010CFC8 = 0; + wPartnerFollowState = 0; partner_clear_player_tracking(wPartnerNpc); if (!wPartner->isFlying) { @@ -2005,7 +2482,7 @@ void func_800EF3D4(s32 arg0) { } void func_800EF3E4(void) { - D_8010CFC8 = 15; + wPartnerFollowState = 15; D_8010CFCA = 0; wPartnerMoveTime = 10; D_8010CFCE = 0; @@ -2013,11 +2490,11 @@ void func_800EF3E4(void) { void func_800EF414(s32 arg0, s32 arg1) { partner_set_goal_pos(arg0, arg1); - D_8010CFC8 = 20; + wPartnerFollowState = 20; } void func_800EF43C(void) { - D_8010CFC8 = 0; + wPartnerFollowState = 0; D_8010CFCA = 0; D_8010CFCE = 0; } @@ -2105,7 +2582,7 @@ void partner_do_player_collision(Npc* partner) { } } -void partner_move_to_goal(Npc* partner, s32 arg1) { +void partner_move_to_goal(Npc* partner, s32 isFlying) { PlayerStatus* playerStatus = &gPlayerStatus; f32 x, y, z, temp; s32 var_a1; @@ -2122,12 +2599,12 @@ void partner_move_to_goal(Npc* partner, s32 arg1) { wPartnerMoveTime = 18; temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z); partner->moveSpeed = wPartnerMoveSpeed = temp / wPartnerMoveTime; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[ + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].anims[ (partner->moveSpeed >= 4.0) ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK]; case 1: if (wPartnerMoveTime != 0) { wPartnerMoveTime--; - if (arg1 == 0) { + if (!isFlying) { if (!(partner->flags & NPC_FLAG_1000)) { partner->pos.y = playerStatus->position.y; } @@ -2135,7 +2612,7 @@ void partner_move_to_goal(Npc* partner, s32 arg1) { partner->jumpVelocity -= partner->jumpScale; partner->pos.y += partner->jumpVelocity; if (partner->jumpVelocity <= 0.0f) { - partner->currentAnim = gPartnerAnimations[D_8010CFD8].fall; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].fall; } if (partner->jumpVelocity <= 0.0f) { @@ -2148,7 +2625,7 @@ void partner_move_to_goal(Npc* partner, s32 arg1) { partner->yaw, partner->collisionRadius) && (temp <= fabsf(partner->jumpVelocity) + 22.0f)) { - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[ + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].anims[ (partner->moveSpeed >= 4.0) ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK]; partner->jumpScale = 0.0f; partner->jumpVelocity = 0.0f; @@ -2160,7 +2637,7 @@ void partner_move_to_goal(Npc* partner, s32 arg1) { partner->moveSpeed = wPartnerMoveSpeed; partner->yaw = D_800F8034; npc_move_heading(partner, partner->moveSpeed, partner->yaw); - partner->currentAnim = gPartnerAnimations[D_8010CFD8].anims[ + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].anims[ (partner->moveSpeed >= 4.0) ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK]; npc_do_world_collision(partner); } else { @@ -2180,7 +2657,7 @@ void partner_move_to_goal(Npc* partner, s32 arg1) { func_8003D660(partner, var_a1); } else { partner->flags &= ~NPC_FLAG_40; - partner->currentAnim = gPartnerAnimations[D_8010CFD8].idle; + partner->currentAnim = gPartnerAnimations[wCurrentPartnerId].idle; D_8010CFCE++; } break; diff --git a/ver/us/asm/nonmatchings/world/partners/partner_flying_follow_player.s b/ver/us/asm/nonmatchings/world/partners/partner_flying_follow_player.s deleted file mode 100644 index d7bf9aeddc..0000000000 --- a/ver/us/asm/nonmatchings/world/partners/partner_flying_follow_player.s +++ /dev/null @@ -1,1060 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.section .rodata - -dlabel jtbl_8010C218 -.word .L800EDA5C_86F0C, .L800EDDEC_8729C, .L800EE078_87528, .L800EDDEC_8729C, .L800EE968_87E18, .L800EE18C_8763C, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE56C_87A1C, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE930_87DE0, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE944_87DF4, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, .L800EE968_87E18, 0 - -.section .text - -glabel partner_flying_follow_player -/* 86EA8 800ED9F8 3C038011 */ lui $v1, %hi(D_8010CFC8) -/* 86EAC 800ED9FC 8463CFC8 */ lh $v1, %lo(D_8010CFC8)($v1) -/* 86EB0 800EDA00 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 86EB4 800EDA04 AFB10034 */ sw $s1, 0x34($sp) -/* 86EB8 800EDA08 AFB3003C */ sw $s3, 0x3c($sp) -/* 86EBC 800EDA0C 3C138011 */ lui $s3, %hi(gPlayerStatus) -/* 86EC0 800EDA10 2673EFC8 */ addiu $s3, $s3, %lo(gPlayerStatus) -/* 86EC4 800EDA14 AFB20038 */ sw $s2, 0x38($sp) -/* 86EC8 800EDA18 3C12800B */ lui $s2, %hi(gCameras) -/* 86ECC 800EDA1C 26521D80 */ addiu $s2, $s2, %lo(gCameras) -/* 86ED0 800EDA20 AFBF0044 */ sw $ra, 0x44($sp) -/* 86ED4 800EDA24 AFB40040 */ sw $s4, 0x40($sp) -/* 86ED8 800EDA28 AFB00030 */ sw $s0, 0x30($sp) -/* 86EDC 800EDA2C F7B80058 */ sdc1 $f24, 0x58($sp) -/* 86EE0 800EDA30 F7B60050 */ sdc1 $f22, 0x50($sp) -/* 86EE4 800EDA34 F7B40048 */ sdc1 $f20, 0x48($sp) -/* 86EE8 800EDA38 2C620033 */ sltiu $v0, $v1, 0x33 -/* 86EEC 800EDA3C 104003CA */ beqz $v0, .L800EE968_87E18 -/* 86EF0 800EDA40 0080882D */ daddu $s1, $a0, $zero -/* 86EF4 800EDA44 00031080 */ sll $v0, $v1, 2 -/* 86EF8 800EDA48 3C018011 */ lui $at, %hi(jtbl_8010C218) -/* 86EFC 800EDA4C 00220821 */ addu $at, $at, $v0 -/* 86F00 800EDA50 8C22C218 */ lw $v0, %lo(jtbl_8010C218)($at) -/* 86F04 800EDA54 00400008 */ jr $v0 -/* 86F08 800EDA58 00000000 */ nop -.L800EDA5C_86F0C: -/* 86F0C 800EDA5C 3C038011 */ lui $v1, %hi(gPlayerMoveHistory) -/* 86F10 800EDA60 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory) -/* 86F14 800EDA64 44806000 */ mtc1 $zero, $f12 -/* 86F18 800EDA68 3C028011 */ lui $v0, %hi(D_8010CFBC) -/* 86F1C 800EDA6C 8C42CFBC */ lw $v0, %lo(D_8010CFBC)($v0) -/* 86F20 800EDA70 C6220038 */ lwc1 $f2, 0x38($s1) -/* 86F24 800EDA74 C624003C */ lwc1 $f4, 0x3c($s1) -/* 86F28 800EDA78 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 86F2C 800EDA7C C42ACFC0 */ lwc1 $f10, %lo(wPartnerTetherDistance)($at) -/* 86F30 800EDA80 3C0141A0 */ lui $at, 0x41a0 -/* 86F34 800EDA84 44814000 */ mtc1 $at, $f8 -/* 86F38 800EDA88 C6200040 */ lwc1 $f0, 0x40($s1) -/* 86F3C 800EDA8C 00021100 */ sll $v0, $v0, 4 -/* 86F40 800EDA90 00438021 */ addu $s0, $v0, $v1 -/* 86F44 800EDA94 C6160004 */ lwc1 $f22, 4($s0) -/* 86F48 800EDA98 C6060008 */ lwc1 $f6, 8($s0) -/* 86F4C 800EDA9C C614000C */ lwc1 $f20, 0xc($s0) -/* 86F50 800EDAA0 4608503C */ c.lt.s $f10, $f8 -/* 86F54 800EDAA4 E7A20020 */ swc1 $f2, 0x20($sp) -/* 86F58 800EDAA8 E7A40024 */ swc1 $f4, 0x24($sp) -/* 86F5C 800EDAAC E7A00028 */ swc1 $f0, 0x28($sp) -/* 86F60 800EDAB0 3C018010 */ lui $at, %hi(wSavedPartnerPosX) -/* 86F64 800EDAB4 E422833C */ swc1 $f2, %lo(wSavedPartnerPosX)($at) -/* 86F68 800EDAB8 3C018010 */ lui $at, %hi(wSavedPartnerPosY) -/* 86F6C 800EDABC E4248340 */ swc1 $f4, %lo(wSavedPartnerPosY)($at) -/* 86F70 800EDAC0 3C018010 */ lui $at, %hi(wSavedPartnerPosZ) -/* 86F74 800EDAC4 E4208344 */ swc1 $f0, %lo(wSavedPartnerPosZ)($at) -/* 86F78 800EDAC8 45020008 */ bc1fl .L800EDAEC -/* 86F7C 800EDACC 46083000 */ add.s $f0, $f6, $f8 -/* 86F80 800EDAD0 460A4081 */ sub.s $f2, $f8, $f10 -/* 86F84 800EDAD4 3C013F00 */ lui $at, 0x3f00 -/* 86F88 800EDAD8 44810000 */ mtc1 $at, $f0 -/* 86F8C 800EDADC 00000000 */ nop -/* 86F90 800EDAE0 46001302 */ mul.s $f12, $f2, $f0 -/* 86F94 800EDAE4 00000000 */ nop -/* 86F98 800EDAE8 46083000 */ add.s $f0, $f6, $f8 -.L800EDAEC: -/* 86F9C 800EDAEC 460C0000 */ add.s $f0, $f0, $f12 -/* 86FA0 800EDAF0 46040001 */ sub.s $f0, $f0, $f4 -/* 86FA4 800EDAF4 3C013E00 */ lui $at, 0x3e00 -/* 86FA8 800EDAF8 44811000 */ mtc1 $at, $f2 -/* 86FAC 800EDAFC 00000000 */ nop -/* 86FB0 800EDB00 46020002 */ mul.s $f0, $f0, $f2 -/* 86FB4 800EDB04 00000000 */ nop -/* 86FB8 800EDB08 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 86FBC 800EDB0C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 86FC0 800EDB10 3C014040 */ lui $at, 0x4040 -/* 86FC4 800EDB14 44811000 */ mtc1 $at, $f2 -/* 86FC8 800EDB18 46002000 */ add.s $f0, $f4, $f0 -/* 86FCC 800EDB1C E6220018 */ swc1 $f2, 0x18($s1) -/* 86FD0 800EDB20 E620003C */ swc1 $f0, 0x3c($s1) -/* 86FD4 800EDB24 8E660028 */ lw $a2, 0x28($s3) -/* 86FD8 800EDB28 8E670030 */ lw $a3, 0x30($s3) -/* 86FDC 800EDB2C 0C00A7B5 */ jal dist2D -/* 86FE0 800EDB30 E7A00024 */ swc1 $f0, 0x24($sp) -/* 86FE4 800EDB34 3C014049 */ lui $at, 0x4049 -/* 86FE8 800EDB38 44811800 */ mtc1 $at, $f3 -/* 86FEC 800EDB3C 44801000 */ mtc1 $zero, $f2 -/* 86FF0 800EDB40 46000106 */ mov.s $f4, $f0 -/* 86FF4 800EDB44 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 86FF8 800EDB48 46002021 */ cvt.d.s $f0, $f4 -/* 86FFC 800EDB4C 4620103E */ c.le.d $f2, $f0 -/* 87000 800EDB50 00000000 */ nop -/* 87004 800EDB54 45000033 */ bc1f .L800EDC24 -/* 87008 800EDB58 00000000 */ nop -/* 8700C 800EDB5C C622003C */ lwc1 $f2, 0x3c($s1) -/* 87010 800EDB60 C660002C */ lwc1 $f0, 0x2c($s3) -/* 87014 800EDB64 4602003E */ c.le.s $f0, $f2 -/* 87018 800EDB68 00000000 */ nop -/* 8701C 800EDB6C 45000029 */ bc1f .L800EDC14 -/* 87020 800EDB70 00000000 */ nop -/* 87024 800EDB74 3C013E80 */ lui $at, 0x3e80 -/* 87028 800EDB78 44810000 */ mtc1 $at, $f0 -/* 8702C 800EDB7C 00000000 */ nop -/* 87030 800EDB80 46002002 */ mul.s $f0, $f4, $f0 -/* 87034 800EDB84 00000000 */ nop -/* 87038 800EDB88 0803B709 */ j .L800EDC24 -/* 8703C 800EDB8C E6200018 */ swc1 $f0, 0x18($s1) -.L800EDB90: -/* 87040 800EDB90 3C0140C0 */ lui $at, 0x40c0 -/* 87044 800EDB94 44810000 */ mtc1 $at, $f0 -.L800EDB98: -/* 87048 800EDB98 0803B76E */ j .L800EDDB8 -/* 8704C 800EDB9C E6200018 */ swc1 $f0, 0x18($s1) -.L800EDBA0: -/* 87050 800EDBA0 C634000C */ lwc1 $f20, 0xc($s1) -/* 87054 800EDBA4 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 87058 800EDBA8 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 8705C 800EDBAC AE200018 */ sw $zero, 0x18($s1) -/* 87060 800EDBB0 AE200014 */ sw $zero, 0x14($s1) -/* 87064 800EDBB4 000218C0 */ sll $v1, $v0, 3 -/* 87068 800EDBB8 00621821 */ addu $v1, $v1, $v0 -/* 8706C 800EDBBC 00031880 */ sll $v1, $v1, 2 -/* 87070 800EDBC0 3C028010 */ lui $v0, %hi(gPartnerAnimations+0x14) -/* 87074 800EDBC4 00431021 */ addu $v0, $v0, $v1 -/* 87078 800EDBC8 8C42835C */ lw $v0, %lo(gPartnerAnimations+0x14)($v0) -/* 8707C 800EDBCC 0803B76E */ j .L800EDDB8 -/* 87080 800EDBD0 AE220028 */ sw $v0, 0x28($s1) -.L800EDBD4: -/* 87084 800EDBD4 C634000C */ lwc1 $f20, 0xc($s1) -/* 87088 800EDBD8 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 8708C 800EDBDC 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 87090 800EDBE0 AE200018 */ sw $zero, 0x18($s1) -/* 87094 800EDBE4 AE200014 */ sw $zero, 0x14($s1) -/* 87098 800EDBE8 000310C0 */ sll $v0, $v1, 3 -/* 8709C 800EDBEC 00431021 */ addu $v0, $v0, $v1 -/* 870A0 800EDBF0 00021080 */ sll $v0, $v0, 2 -/* 870A4 800EDBF4 3C038010 */ lui $v1, %hi(gPartnerAnimations+0x14) -/* 870A8 800EDBF8 00621821 */ addu $v1, $v1, $v0 -/* 870AC 800EDBFC 8C63835C */ lw $v1, %lo(gPartnerAnimations+0x14)($v1) -/* 870B0 800EDC00 24020005 */ addiu $v0, $zero, 5 -/* 870B4 800EDC04 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 870B8 800EDC08 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -/* 870BC 800EDC0C 0803B76E */ j .L800EDDB8 -/* 870C0 800EDC10 AE230028 */ sw $v1, 0x28($s1) -.L800EDC14: -/* 870C4 800EDC14 3C014100 */ lui $at, 0x4100 -/* 870C8 800EDC18 44810000 */ mtc1 $at, $f0 -/* 870CC 800EDC1C 00000000 */ nop -/* 870D0 800EDC20 E6200018 */ swc1 $f0, 0x18($s1) -.L800EDC24: -/* 870D4 800EDC24 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 870D8 800EDC28 C422CFC0 */ lwc1 $f2, %lo(wPartnerTetherDistance)($at) -/* 870DC 800EDC2C 3C0141A0 */ lui $at, 0x41a0 -/* 870E0 800EDC30 44810000 */ mtc1 $at, $f0 -/* 870E4 800EDC34 00000000 */ nop -/* 870E8 800EDC38 4600103C */ c.lt.s $f2, $f0 -/* 870EC 800EDC3C 00000000 */ nop -/* 870F0 800EDC40 45000005 */ bc1f .L800EDC58 -/* 870F4 800EDC44 00000000 */ nop -/* 870F8 800EDC48 3C014080 */ lui $at, 0x4080 -/* 870FC 800EDC4C 44810000 */ mtc1 $at, $f0 -/* 87100 800EDC50 00000000 */ nop -/* 87104 800EDC54 E6200018 */ swc1 $f0, 0x18($s1) -.L800EDC58: -/* 87108 800EDC58 3C128011 */ lui $s2, %hi(D_8010CFBC) -/* 8710C 800EDC5C 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC) -/* 87110 800EDC60 3C148011 */ lui $s4, %hi(gPlayerMoveHistory) -/* 87114 800EDC64 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory) -.L800EDC68: -/* 87118 800EDC68 C7AC0020 */ lwc1 $f12, 0x20($sp) -/* 8711C 800EDC6C C7AE0028 */ lwc1 $f14, 0x28($sp) -/* 87120 800EDC70 4406B000 */ mfc1 $a2, $f22 -/* 87124 800EDC74 4407A000 */ mfc1 $a3, $f20 -/* 87128 800EDC78 0C00A720 */ jal atan2 -/* 8712C 800EDC7C 00000000 */ nop -/* 87130 800EDC80 C7AC0020 */ lwc1 $f12, 0x20($sp) -/* 87134 800EDC84 C7AE0028 */ lwc1 $f14, 0x28($sp) -/* 87138 800EDC88 4406B000 */ mfc1 $a2, $f22 -/* 8713C 800EDC8C 4407A000 */ mfc1 $a3, $f20 -/* 87140 800EDC90 0C00A7B5 */ jal dist2D -/* 87144 800EDC94 46000506 */ mov.s $f20, $f0 -/* 87148 800EDC98 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 8714C 800EDC9C C6260018 */ lwc1 $f6, 0x18($s1) -/* 87150 800EDCA0 46000106 */ mov.s $f4, $f0 -/* 87154 800EDCA4 4604303C */ c.lt.s $f6, $f4 -/* 87158 800EDCA8 00000000 */ nop -/* 8715C 800EDCAC 45000026 */ bc1f .L800EDD48 -/* 87160 800EDCB0 00000000 */ nop -/* 87164 800EDCB4 C622003C */ lwc1 $f2, 0x3c($s1) -/* 87168 800EDCB8 C660002C */ lwc1 $f0, 0x2c($s3) -/* 8716C 800EDCBC 4602003E */ c.le.s $f0, $f2 -/* 87170 800EDCC0 00000000 */ nop -/* 87174 800EDCC4 45020011 */ bc1fl .L800EDD0C -/* 87178 800EDCC8 460030A1 */ cvt.d.s $f2, $f6 -/* 8717C 800EDCCC 3C013E80 */ lui $at, 0x3e80 -/* 87180 800EDCD0 44810000 */ mtc1 $at, $f0 -/* 87184 800EDCD4 00000000 */ nop -/* 87188 800EDCD8 46002002 */ mul.s $f0, $f4, $f0 -/* 8718C 800EDCDC 00000000 */ nop -/* 87190 800EDCE0 4606003E */ c.le.s $f0, $f6 -/* 87194 800EDCE4 00000000 */ nop -/* 87198 800EDCE8 45030033 */ bc1tl .L800EDDB8 -/* 8719C 800EDCEC E6200018 */ swc1 $f0, 0x18($s1) -/* 871A0 800EDCF0 3C013D80 */ lui $at, 0x3d80 -/* 871A4 800EDCF4 44810000 */ mtc1 $at, $f0 -/* 871A8 800EDCF8 00000000 */ nop -/* 871AC 800EDCFC 46002002 */ mul.s $f0, $f4, $f0 -/* 871B0 800EDD00 00000000 */ nop -/* 871B4 800EDD04 0803B6E6 */ j .L800EDB98 -/* 871B8 800EDD08 46003000 */ add.s $f0, $f6, $f0 -.L800EDD0C: -/* 871BC 800EDD0C 3C014018 */ lui $at, 0x4018 -/* 871C0 800EDD10 44810800 */ mtc1 $at, $f1 -/* 871C4 800EDD14 44800000 */ mtc1 $zero, $f0 -/* 871C8 800EDD18 00000000 */ nop -/* 871CC 800EDD1C 4622003C */ c.lt.d $f0, $f2 -/* 871D0 800EDD20 00000000 */ nop -/* 871D4 800EDD24 4501FF9A */ bc1t .L800EDB90 -/* 871D8 800EDD28 00000000 */ nop -/* 871DC 800EDD2C 3C013FF0 */ lui $at, 0x3ff0 -/* 871E0 800EDD30 44810800 */ mtc1 $at, $f1 -/* 871E4 800EDD34 44800000 */ mtc1 $zero, $f0 -/* 871E8 800EDD38 00000000 */ nop -/* 871EC 800EDD3C 46201000 */ add.d $f0, $f2, $f0 -/* 871F0 800EDD40 0803B6E6 */ j .L800EDB98 -/* 871F4 800EDD44 46200020 */ cvt.s.d $f0, $f0 -.L800EDD48: -/* 871F8 800EDD48 8E430000 */ lw $v1, ($s2) -/* 871FC 800EDD4C 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex) -/* 87200 800EDD50 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0) -/* 87204 800EDD54 1062FF92 */ beq $v1, $v0, .L800EDBA0 -/* 87208 800EDD58 00000000 */ nop -/* 8720C 800EDD5C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87210 800EDD60 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 87214 800EDD64 8E660028 */ lw $a2, 0x28($s3) -/* 87218 800EDD68 0C00A7B5 */ jal dist2D -/* 8721C 800EDD6C 8E670030 */ lw $a3, 0x30($s3) -/* 87220 800EDD70 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 87224 800EDD74 C422CFC0 */ lwc1 $f2, %lo(wPartnerTetherDistance)($at) -/* 87228 800EDD78 4602003E */ c.le.s $f0, $f2 -/* 8722C 800EDD7C 00000000 */ nop -/* 87230 800EDD80 4501FF94 */ bc1t .L800EDBD4 -/* 87234 800EDD84 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 87238 800EDD88 8E420000 */ lw $v0, ($s2) -/* 8723C 800EDD8C 24420001 */ addiu $v0, $v0, 1 -/* 87240 800EDD90 AE420000 */ sw $v0, ($s2) -/* 87244 800EDD94 28420028 */ slti $v0, $v0, 0x28 -/* 87248 800EDD98 50400001 */ beql $v0, $zero, .L800EDDA0 -/* 8724C 800EDD9C AE400000 */ sw $zero, ($s2) -.L800EDDA0: -/* 87250 800EDDA0 8E420000 */ lw $v0, ($s2) -/* 87254 800EDDA4 00021100 */ sll $v0, $v0, 4 -/* 87258 800EDDA8 00548021 */ addu $s0, $v0, $s4 -/* 8725C 800EDDAC C6160004 */ lwc1 $f22, 4($s0) -/* 87260 800EDDB0 0803B71A */ j .L800EDC68 -/* 87264 800EDDB4 C614000C */ lwc1 $f20, 0xc($s0) -.L800EDDB8: -/* 87268 800EDDB8 8E250018 */ lw $a1, 0x18($s1) -/* 8726C 800EDDBC 4406A000 */ mfc1 $a2, $f20 -/* 87270 800EDDC0 0220202D */ daddu $a0, $s1, $zero -/* 87274 800EDDC4 0C00EA95 */ jal npc_move_heading -/* 87278 800EDDC8 AE26000C */ sw $a2, 0xc($s1) -/* 8727C 800EDDCC 8E220000 */ lw $v0, ($s1) -/* 87280 800EDDD0 30424000 */ andi $v0, $v0, 0x4000 -/* 87284 800EDDD4 104002E4 */ beqz $v0, .L800EE968_87E18 -/* 87288 800EDDD8 24020001 */ addiu $v0, $zero, 1 -/* 8728C 800EDDDC 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 87290 800EDDE0 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -/* 87294 800EDDE4 0803BA5A */ j .L800EE968_87E18 -/* 87298 800EDDE8 00000000 */ nop -.L800EDDEC_8729C: -/* 8729C 800EDDEC 3C048011 */ lui $a0, %hi(D_8010CFBC) -/* 872A0 800EDDF0 2484CFBC */ addiu $a0, $a0, %lo(D_8010CFBC) -/* 872A4 800EDDF4 8C830000 */ lw $v1, ($a0) -/* 872A8 800EDDF8 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex) -/* 872AC 800EDDFC 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0) -/* 872B0 800EDE00 106202D9 */ beq $v1, $v0, .L800EE968_87E18 -/* 872B4 800EDE04 24620001 */ addiu $v0, $v1, 1 -/* 872B8 800EDE08 AC820000 */ sw $v0, ($a0) -/* 872BC 800EDE0C 28420028 */ slti $v0, $v0, 0x28 -/* 872C0 800EDE10 50400001 */ beql $v0, $zero, .L800EDE18 -/* 872C4 800EDE14 AC800000 */ sw $zero, ($a0) -.L800EDE18: -/* 872C8 800EDE18 3C038011 */ lui $v1, %hi(gPlayerMoveHistory) -/* 872CC 800EDE1C 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory) -/* 872D0 800EDE20 8C820000 */ lw $v0, ($a0) -/* 872D4 800EDE24 3C013FA6 */ lui $at, 0x3fa6 -/* 872D8 800EDE28 34216666 */ ori $at, $at, 0x6666 -/* 872DC 800EDE2C 44810000 */ mtc1 $at, $f0 -/* 872E0 800EDE30 00021100 */ sll $v0, $v0, 4 -/* 872E4 800EDE34 00438021 */ addu $s0, $v0, $v1 -/* 872E8 800EDE38 C6160004 */ lwc1 $f22, 4($s0) -/* 872EC 800EDE3C C6060008 */ lwc1 $f6, 8($s0) -/* 872F0 800EDE40 C614000C */ lwc1 $f20, 0xc($s0) -/* 872F4 800EDE44 3C108011 */ lui $s0, %hi(D_8010CFC8) -/* 872F8 800EDE48 2610CFC8 */ addiu $s0, $s0, %lo(D_8010CFC8) -/* 872FC 800EDE4C A620008E */ sh $zero, 0x8e($s1) -/* 87300 800EDE50 E6200014 */ swc1 $f0, 0x14($s1) -/* 87304 800EDE54 E6360060 */ swc1 $f22, 0x60($s1) -/* 87308 800EDE58 E6260064 */ swc1 $f6, 0x64($s1) -/* 8730C 800EDE5C E6340068 */ swc1 $f20, 0x68($s1) -/* 87310 800EDE60 86020000 */ lh $v0, ($s0) -/* 87314 800EDE64 24120001 */ addiu $s2, $zero, 1 -/* 87318 800EDE68 14520005 */ bne $v0, $s2, .L800EDE80 -/* 8731C 800EDE6C 00000000 */ nop -/* 87320 800EDE70 3C0140C0 */ lui $at, 0x40c0 -/* 87324 800EDE74 44810000 */ mtc1 $at, $f0 -/* 87328 800EDE78 00000000 */ nop -/* 8732C 800EDE7C E6200018 */ swc1 $f0, 0x18($s1) -.L800EDE80: -/* 87330 800EDE80 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87334 800EDE84 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 87338 800EDE88 8E260060 */ lw $a2, 0x60($s1) -/* 8733C 800EDE8C 0C00A7B5 */ jal dist2D -/* 87340 800EDE90 8E270068 */ lw $a3, 0x68($s1) -/* 87344 800EDE94 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87348 800EDE98 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 8734C 800EDE9C 8E260060 */ lw $a2, 0x60($s1) -/* 87350 800EDEA0 8E270068 */ lw $a3, 0x68($s1) -/* 87354 800EDEA4 0C00A720 */ jal atan2 -/* 87358 800EDEA8 E6200010 */ swc1 $f0, 0x10($s1) -/* 8735C 800EDEAC E620000C */ swc1 $f0, 0xc($s1) -/* 87360 800EDEB0 C6200010 */ lwc1 $f0, 0x10($s1) -/* 87364 800EDEB4 3C014049 */ lui $at, 0x4049 -/* 87368 800EDEB8 44811800 */ mtc1 $at, $f3 -/* 8736C 800EDEBC 44801000 */ mtc1 $zero, $f2 -/* 87370 800EDEC0 46000021 */ cvt.d.s $f0, $f0 -/* 87374 800EDEC4 4620103C */ c.lt.d $f2, $f0 -/* 87378 800EDEC8 00000000 */ nop -/* 8737C 800EDECC 45000005 */ bc1f .L800EDEE4 -/* 87380 800EDED0 00000000 */ nop -/* 87384 800EDED4 3C014248 */ lui $at, 0x4248 -/* 87388 800EDED8 44810000 */ mtc1 $at, $f0 -/* 8738C 800EDEDC 00000000 */ nop -/* 87390 800EDEE0 E6200010 */ swc1 $f0, 0x10($s1) -.L800EDEE4: -/* 87394 800EDEE4 C6220064 */ lwc1 $f2, 0x64($s1) -/* 87398 800EDEE8 C620003C */ lwc1 $f0, 0x3c($s1) -/* 8739C 800EDEEC 46001101 */ sub.s $f4, $f2, $f0 -/* 873A0 800EDEF0 C6200010 */ lwc1 $f0, 0x10($s1) -/* 873A4 800EDEF4 46000086 */ mov.s $f2, $f0 -/* 873A8 800EDEF8 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 873AC 800EDEFC 4604103C */ c.lt.s $f2, $f4 -/* 873B0 800EDF00 00000000 */ nop -/* 873B4 800EDF04 45000002 */ bc1f .L800EDF10 -/* 873B8 800EDF08 E7A40024 */ swc1 $f4, 0x24($sp) -/* 873BC 800EDF0C E7A4002C */ swc1 $f4, 0x2c($sp) -.L800EDF10: -/* 873C0 800EDF10 86020000 */ lh $v0, ($s0) -/* 873C4 800EDF14 14520026 */ bne $v0, $s2, .L800EDFB0 -/* 873C8 800EDF18 2402000A */ addiu $v0, $zero, 0xa -/* 873CC 800EDF1C 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 873D0 800EDF20 C420CFC0 */ lwc1 $f0, %lo(wPartnerTetherDistance)($at) -/* 873D4 800EDF24 C7A2002C */ lwc1 $f2, 0x2c($sp) -/* 873D8 800EDF28 4600103C */ c.lt.s $f2, $f0 -/* 873DC 800EDF2C 00000000 */ nop -/* 873E0 800EDF30 4500000B */ bc1f .L800EDF60 -/* 873E4 800EDF34 00000000 */ nop -/* 873E8 800EDF38 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 873EC 800EDF3C C62E0040 */ lwc1 $f14, 0x40($s1) -/* 873F0 800EDF40 AE20001C */ sw $zero, 0x1c($s1) -/* 873F4 800EDF44 8E660028 */ lw $a2, 0x28($s3) -/* 873F8 800EDF48 0C00A720 */ jal atan2 -/* 873FC 800EDF4C 8E670030 */ lw $a3, 0x30($s3) -/* 87400 800EDF50 24020005 */ addiu $v0, $zero, 5 -/* 87404 800EDF54 E620000C */ swc1 $f0, 0xc($s1) -/* 87408 800EDF58 0803BA5A */ j .L800EE968_87E18 -/* 8740C 800EDF5C A6020000 */ sh $v0, ($s0) -.L800EDF60: -/* 87410 800EDF60 C6200018 */ lwc1 $f0, 0x18($s1) -/* 87414 800EDF64 46001003 */ div.s $f0, $f2, $f0 -/* 87418 800EDF68 4600040D */ trunc.w.s $f16, $f0 -/* 8741C 800EDF6C 44028000 */ mfc1 $v0, $f16 -/* 87420 800EDF70 00000000 */ nop -/* 87424 800EDF74 A622008E */ sh $v0, 0x8e($s1) -/* 87428 800EDF78 00021400 */ sll $v0, $v0, 0x10 -/* 8742C 800EDF7C 00021403 */ sra $v0, $v0, 0x10 -/* 87430 800EDF80 2842000A */ slti $v0, $v0, 0xa -/* 87434 800EDF84 10400002 */ beqz $v0, .L800EDF90 -/* 87438 800EDF88 2402000A */ addiu $v0, $zero, 0xa -/* 8743C 800EDF8C A622008E */ sh $v0, 0x8e($s1) -.L800EDF90: -/* 87440 800EDF90 8622008E */ lh $v0, 0x8e($s1) -/* 87444 800EDF94 C6200010 */ lwc1 $f0, 0x10($s1) -/* 87448 800EDF98 44821000 */ mtc1 $v0, $f2 -/* 8744C 800EDF9C 00000000 */ nop -/* 87450 800EDFA0 468010A0 */ cvt.s.w $f2, $f2 -/* 87454 800EDFA4 46020003 */ div.s $f0, $f0, $f2 -/* 87458 800EDFA8 0803B7ED */ j .L800EDFB4 -/* 8745C 800EDFAC E6200018 */ swc1 $f0, 0x18($s1) -.L800EDFB0: -/* 87460 800EDFB0 A622008E */ sh $v0, 0x8e($s1) -.L800EDFB4: -/* 87464 800EDFB4 8622008E */ lh $v0, 0x8e($s1) -/* 87468 800EDFB8 C6220014 */ lwc1 $f2, 0x14($s1) -/* 8746C 800EDFBC 44822000 */ mtc1 $v0, $f4 -/* 87470 800EDFC0 00000000 */ nop -/* 87474 800EDFC4 46802120 */ cvt.s.w $f4, $f4 -/* 87478 800EDFC8 46041082 */ mul.s $f2, $f2, $f4 -/* 8747C 800EDFCC 00000000 */ nop -/* 87480 800EDFD0 46041082 */ mul.s $f2, $f2, $f4 -/* 87484 800EDFD4 00000000 */ nop -/* 87488 800EDFD8 3C013F00 */ lui $at, 0x3f00 -/* 8748C 800EDFDC 44810000 */ mtc1 $at, $f0 -/* 87490 800EDFE0 00000000 */ nop -/* 87494 800EDFE4 46001082 */ mul.s $f2, $f2, $f0 -/* 87498 800EDFE8 00000000 */ nop -/* 8749C 800EDFEC C7A00024 */ lwc1 $f0, 0x24($sp) -/* 874A0 800EDFF0 46020000 */ add.s $f0, $f0, $f2 -/* 874A4 800EDFF4 3C014034 */ lui $at, 0x4034 -/* 874A8 800EDFF8 44811800 */ mtc1 $at, $f3 -/* 874AC 800EDFFC 44801000 */ mtc1 $zero, $f2 -/* 874B0 800EE000 46040003 */ div.s $f0, $f0, $f4 -/* 874B4 800EE004 E620001C */ swc1 $f0, 0x1c($s1) -/* 874B8 800EE008 46000021 */ cvt.d.s $f0, $f0 -/* 874BC 800EE00C 4620103C */ c.lt.d $f2, $f0 -/* 874C0 800EE010 00000000 */ nop -/* 874C4 800EE014 45000005 */ bc1f .L800EE02C -/* 874C8 800EE018 00000000 */ nop -/* 874CC 800EE01C 3C0141A0 */ lui $at, 0x41a0 -/* 874D0 800EE020 44810000 */ mtc1 $at, $f0 -/* 874D4 800EE024 00000000 */ nop -/* 874D8 800EE028 E620001C */ swc1 $f0, 0x1c($s1) -.L800EE02C: -/* 874DC 800EE02C 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 874E0 800EE030 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 874E4 800EE034 C6200038 */ lwc1 $f0, 0x38($s1) -/* 874E8 800EE038 C622003C */ lwc1 $f2, 0x3c($s1) -/* 874EC 800EE03C C6240040 */ lwc1 $f4, 0x40($s1) -/* 874F0 800EE040 000310C0 */ sll $v0, $v1, 3 -/* 874F4 800EE044 00431021 */ addu $v0, $v0, $v1 -/* 874F8 800EE048 00021080 */ sll $v0, $v0, 2 -/* 874FC 800EE04C 3C038010 */ lui $v1, %hi(gPartnerAnimations+0x8) -/* 87500 800EE050 00621821 */ addu $v1, $v1, $v0 -/* 87504 800EE054 8C638350 */ lw $v1, %lo(gPartnerAnimations+0x8)($v1) -/* 87508 800EE058 24020002 */ addiu $v0, $zero, 2 -/* 8750C 800EE05C 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 87510 800EE060 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -/* 87514 800EE064 E6200060 */ swc1 $f0, 0x60($s1) -/* 87518 800EE068 E6220064 */ swc1 $f2, 0x64($s1) -/* 8751C 800EE06C E6240068 */ swc1 $f4, 0x68($s1) -/* 87520 800EE070 0803BA5A */ j .L800EE968_87E18 -/* 87524 800EE074 AE230028 */ sw $v1, 0x28($s1) -.L800EE078_87528: -/* 87528 800EE078 C620001C */ lwc1 $f0, 0x1c($s1) -/* 8752C 800EE07C C6220014 */ lwc1 $f2, 0x14($s1) -/* 87530 800EE080 46020001 */ sub.s $f0, $f0, $f2 -/* 87534 800EE084 C622003C */ lwc1 $f2, 0x3c($s1) -/* 87538 800EE088 46001080 */ add.s $f2, $f2, $f0 -/* 8753C 800EE08C 4480A000 */ mtc1 $zero, $f20 -/* 87540 800EE090 00000000 */ nop -/* 87544 800EE094 4614003E */ c.le.s $f0, $f20 -/* 87548 800EE098 E620001C */ swc1 $f0, 0x1c($s1) -/* 8754C 800EE09C 4500000A */ bc1f .L800EE0C8 -/* 87550 800EE0A0 E622003C */ swc1 $f2, 0x3c($s1) -/* 87554 800EE0A4 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 87558 800EE0A8 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 8755C 800EE0AC 000218C0 */ sll $v1, $v0, 3 -/* 87560 800EE0B0 00621821 */ addu $v1, $v1, $v0 -/* 87564 800EE0B4 00031880 */ sll $v1, $v1, 2 -/* 87568 800EE0B8 3C028010 */ lui $v0, %hi(gPartnerAnimations+0xC) -/* 8756C 800EE0BC 00431021 */ addu $v0, $v0, $v1 -/* 87570 800EE0C0 8C428354 */ lw $v0, %lo(gPartnerAnimations+0xC)($v0) -/* 87574 800EE0C4 AE220028 */ sw $v0, 0x28($s1) -.L800EE0C8: -/* 87578 800EE0C8 8E250018 */ lw $a1, 0x18($s1) -/* 8757C 800EE0CC 8E26000C */ lw $a2, 0xc($s1) -/* 87580 800EE0D0 0C00EA95 */ jal npc_move_heading -/* 87584 800EE0D4 0220202D */ daddu $a0, $s1, $zero -/* 87588 800EE0D8 C620001C */ lwc1 $f0, 0x1c($s1) -/* 8758C 800EE0DC 4614003E */ c.le.s $f0, $f20 -/* 87590 800EE0E0 00000000 */ nop -/* 87594 800EE0E4 45000220 */ bc1f .L800EE968_87E18 -/* 87598 800EE0E8 00000000 */ nop -/* 8759C 800EE0EC C622003C */ lwc1 $f2, 0x3c($s1) -/* 875A0 800EE0F0 C6200064 */ lwc1 $f0, 0x64($s1) -/* 875A4 800EE0F4 4600103C */ c.lt.s $f2, $f0 -/* 875A8 800EE0F8 00000000 */ nop -/* 875AC 800EE0FC 4500021A */ bc1f .L800EE968_87E18 -/* 875B0 800EE100 00000000 */ nop -/* 875B4 800EE104 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 875B8 800EE108 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 875BC 800EE10C 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 875C0 800EE110 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 875C4 800EE114 000310C0 */ sll $v0, $v1, 3 -/* 875C8 800EE118 00431021 */ addu $v0, $v0, $v1 -/* 875CC 800EE11C 00021080 */ sll $v0, $v0, 2 -/* 875D0 800EE120 3C018010 */ lui $at, %hi(gPartnerAnimations+0x10) -/* 875D4 800EE124 00220821 */ addu $at, $at, $v0 -/* 875D8 800EE128 8C228358 */ lw $v0, %lo(gPartnerAnimations+0x10)($at) -/* 875DC 800EE12C E634001C */ swc1 $f20, 0x1c($s1) -/* 875E0 800EE130 E620003C */ swc1 $f0, 0x3c($s1) -/* 875E4 800EE134 AE220028 */ sw $v0, 0x28($s1) -/* 875E8 800EE138 8E660028 */ lw $a2, 0x28($s3) -/* 875EC 800EE13C 0C00A720 */ jal atan2 -/* 875F0 800EE140 8E670030 */ lw $a3, 0x30($s3) -/* 875F4 800EE144 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 875F8 800EE148 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 875FC 800EE14C 8E260060 */ lw $a2, 0x60($s1) -/* 87600 800EE150 8E270068 */ lw $a3, 0x68($s1) -/* 87604 800EE154 3C108011 */ lui $s0, %hi(D_8010CFC8) -/* 87608 800EE158 2610CFC8 */ addiu $s0, $s0, %lo(D_8010CFC8) -/* 8760C 800EE15C E620000C */ swc1 $f0, 0xc($s1) -/* 87610 800EE160 0C00A7B5 */ jal dist2D -/* 87614 800EE164 A6000000 */ sh $zero, ($s0) -/* 87618 800EE168 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 8761C 800EE16C C422CFC0 */ lwc1 $f2, %lo(wPartnerTetherDistance)($at) -/* 87620 800EE170 4602003C */ c.lt.s $f0, $f2 -/* 87624 800EE174 00000000 */ nop -/* 87628 800EE178 450001FB */ bc1f .L800EE968_87E18 -/* 8762C 800EE17C E7A0002C */ swc1 $f0, 0x2c($sp) -/* 87630 800EE180 2402000F */ addiu $v0, $zero, 0xf -/* 87634 800EE184 0803BA5A */ j .L800EE968_87E18 -/* 87638 800EE188 A6020000 */ sh $v0, ($s0) -.L800EE18C_8763C: -/* 8763C 800EE18C 3C038011 */ lui $v1, %hi(gPlayerMoveHistory) -/* 87640 800EE190 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory) -/* 87644 800EE194 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87648 800EE198 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 8764C 800EE19C 8E660028 */ lw $a2, 0x28($s3) -/* 87650 800EE1A0 8E670030 */ lw $a3, 0x30($s3) -/* 87654 800EE1A4 3C028011 */ lui $v0, %hi(D_8010CFBC) -/* 87658 800EE1A8 8C42CFBC */ lw $v0, %lo(D_8010CFBC)($v0) -/* 8765C 800EE1AC C622003C */ lwc1 $f2, 0x3c($s1) -/* 87660 800EE1B0 00021100 */ sll $v0, $v0, 4 -/* 87664 800EE1B4 00438021 */ addu $s0, $v0, $v1 -/* 87668 800EE1B8 46006006 */ mov.s $f0, $f12 -/* 8766C 800EE1BC C6160004 */ lwc1 $f22, 4($s0) -/* 87670 800EE1C0 C614000C */ lwc1 $f20, 0xc($s0) -/* 87674 800EE1C4 46007106 */ mov.s $f4, $f14 -/* 87678 800EE1C8 E7A00020 */ swc1 $f0, 0x20($sp) -/* 8767C 800EE1CC E7A20024 */ swc1 $f2, 0x24($sp) -/* 87680 800EE1D0 0C00A7B5 */ jal dist2D -/* 87684 800EE1D4 E7A40028 */ swc1 $f4, 0x28($sp) -/* 87688 800EE1D8 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 8768C 800EE1DC C422CFC0 */ lwc1 $f2, %lo(wPartnerTetherDistance)($at) -/* 87690 800EE1E0 4602003E */ c.le.s $f0, $f2 -/* 87694 800EE1E4 00000000 */ nop -/* 87698 800EE1E8 450000A5 */ bc1f .L800EE480 -/* 8769C 800EE1EC E7A0002C */ swc1 $f0, 0x2c($sp) -/* 876A0 800EE1F0 3C048011 */ lui $a0, %hi(D_8010CFCA) -/* 876A4 800EE1F4 2484CFCA */ addiu $a0, $a0, %lo(D_8010CFCA) -/* 876A8 800EE1F8 84820000 */ lh $v0, ($a0) -/* 876AC 800EE1FC 1440002D */ bnez $v0, .L800EE2B4 -/* 876B0 800EE200 00000000 */ nop -/* 876B4 800EE204 962200A8 */ lhu $v0, 0xa8($s1) -/* 876B8 800EE208 C660002C */ lwc1 $f0, 0x2c($s3) -/* 876BC 800EE20C 00021400 */ sll $v0, $v0, 0x10 -/* 876C0 800EE210 00021C03 */ sra $v1, $v0, 0x10 -/* 876C4 800EE214 000217C2 */ srl $v0, $v0, 0x1f -/* 876C8 800EE218 00621821 */ addu $v1, $v1, $v0 -/* 876CC 800EE21C 866200B0 */ lh $v0, 0xb0($s3) -/* 876D0 800EE220 00031843 */ sra $v1, $v1, 1 -/* 876D4 800EE224 00431023 */ subu $v0, $v0, $v1 -/* 876D8 800EE228 44821000 */ mtc1 $v0, $f2 -/* 876DC 800EE22C 00000000 */ nop -/* 876E0 800EE230 468010A0 */ cvt.s.w $f2, $f2 -/* 876E4 800EE234 46020000 */ add.s $f0, $f0, $f2 -/* 876E8 800EE238 C622003C */ lwc1 $f2, 0x3c($s1) -/* 876EC 800EE23C 46020001 */ sub.s $f0, $f0, $f2 -/* 876F0 800EE240 3C013FA0 */ lui $at, 0x3fa0 -/* 876F4 800EE244 44811800 */ mtc1 $at, $f3 -/* 876F8 800EE248 44801000 */ mtc1 $zero, $f2 -/* 876FC 800EE24C 46000021 */ cvt.d.s $f0, $f0 -/* 87700 800EE250 46220002 */ mul.d $f0, $f0, $f2 -/* 87704 800EE254 00000000 */ nop -/* 87708 800EE258 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 8770C 800EE25C 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 87710 800EE260 000310C0 */ sll $v0, $v1, 3 -/* 87714 800EE264 00431021 */ addu $v0, $v0, $v1 -/* 87718 800EE268 C7A20024 */ lwc1 $f2, 0x24($sp) -/* 8771C 800EE26C 00021080 */ sll $v0, $v0, 2 -/* 87720 800EE270 460010A1 */ cvt.d.s $f2, $f2 -/* 87724 800EE274 46201080 */ add.d $f2, $f2, $f0 -/* 87728 800EE278 AE200018 */ sw $zero, 0x18($s1) -/* 8772C 800EE27C AE200014 */ sw $zero, 0x14($s1) -/* 87730 800EE280 462010A0 */ cvt.s.d $f2, $f2 -/* 87734 800EE284 E622003C */ swc1 $f2, 0x3c($s1) -/* 87738 800EE288 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 8773C 800EE28C 00220821 */ addu $at, $at, $v0 -/* 87740 800EE290 8C22835C */ lw $v0, %lo(gPartnerAnimations+0x14)($at) -/* 87744 800EE294 E7A20024 */ swc1 $f2, 0x24($sp) -/* 87748 800EE298 AE220028 */ sw $v0, 0x28($s1) -/* 8774C 800EE29C 826300B4 */ lb $v1, 0xb4($s3) -/* 87750 800EE2A0 2402000C */ addiu $v0, $zero, 0xc -/* 87754 800EE2A4 50620076 */ beql $v1, $v0, .L800EE480 -/* 87758 800EE2A8 A4800000 */ sh $zero, ($a0) -/* 8775C 800EE2AC 0803B920 */ j .L800EE480 -/* 87760 800EE2B0 00000000 */ nop -.L800EE2B4: -/* 87764 800EE2B4 C66200A8 */ lwc1 $f2, 0xa8($s3) -/* 87768 800EE2B8 3C014334 */ lui $at, 0x4334 -/* 8776C 800EE2BC 44810000 */ mtc1 $at, $f0 -/* 87770 800EE2C0 C64C006C */ lwc1 $f12, 0x6c($s2) -/* 87774 800EE2C4 4600103C */ c.lt.s $f2, $f0 -/* 87778 800EE2C8 3C01C2B4 */ lui $at, 0xc2b4 -/* 8777C 800EE2CC 44810000 */ mtc1 $at, $f0 -/* 87780 800EE2D0 45000003 */ bc1f .L800EE2E0 -/* 87784 800EE2D4 00000000 */ nop -/* 87788 800EE2D8 3C0142B4 */ lui $at, 0x42b4 -/* 8778C 800EE2DC 44810000 */ mtc1 $at, $f0 -.L800EE2E0: -/* 87790 800EE2E0 0C00A6C9 */ jal clamp_angle -/* 87794 800EE2E4 46006300 */ add.s $f12, $f12, $f0 -/* 87798 800EE2E8 44070000 */ mfc1 $a3, $f0 -/* 8779C 800EE2EC C6600028 */ lwc1 $f0, 0x28($s3) -/* 877A0 800EE2F0 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 877A4 800EE2F4 C424CFC0 */ lwc1 $f4, %lo(wPartnerTetherDistance)($at) -/* 877A8 800EE2F8 26240060 */ addiu $a0, $s1, 0x60 -/* 877AC 800EE2FC E6200060 */ swc1 $f0, 0x60($s1) -/* 877B0 800EE300 3C014120 */ lui $at, 0x4120 -/* 877B4 800EE304 44810000 */ mtc1 $at, $f0 -/* 877B8 800EE308 C662002C */ lwc1 $f2, 0x2c($s3) -/* 877BC 800EE30C 46002101 */ sub.s $f4, $f4, $f0 -/* 877C0 800EE310 E6220064 */ swc1 $f2, 0x64($s1) -/* 877C4 800EE314 C6600030 */ lwc1 $f0, 0x30($s3) -/* 877C8 800EE318 44062000 */ mfc1 $a2, $f4 -/* 877CC 800EE31C 26250068 */ addiu $a1, $s1, 0x68 -/* 877D0 800EE320 0C00A7E7 */ jal add_vec2D_polar -/* 877D4 800EE324 E6200068 */ swc1 $f0, 0x68($s1) -/* 877D8 800EE328 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 877DC 800EE32C C62E0040 */ lwc1 $f14, 0x40($s1) -/* 877E0 800EE330 8E260060 */ lw $a2, 0x60($s1) -/* 877E4 800EE334 0C00A720 */ jal atan2 -/* 877E8 800EE338 8E270068 */ lw $a3, 0x68($s1) -/* 877EC 800EE33C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 877F0 800EE340 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 877F4 800EE344 8E260060 */ lw $a2, 0x60($s1) -/* 877F8 800EE348 8E270068 */ lw $a3, 0x68($s1) -/* 877FC 800EE34C 0C00A7B5 */ jal dist2D -/* 87800 800EE350 46000506 */ mov.s $f20, $f0 -/* 87804 800EE354 3C014000 */ lui $at, 0x4000 -/* 87808 800EE358 44811000 */ mtc1 $at, $f2 -/* 8780C 800EE35C E7A0002C */ swc1 $f0, 0x2c($sp) -/* 87810 800EE360 4600103C */ c.lt.s $f2, $f0 -/* 87814 800EE364 00000000 */ nop -/* 87818 800EE368 45000022 */ bc1f .L800EE3F4 -/* 8781C 800EE36C E6220018 */ swc1 $f2, 0x18($s1) -/* 87820 800EE370 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 87824 800EE374 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 87828 800EE378 3C048010 */ lui $a0, %hi(gPartnerAnimations) -/* 8782C 800EE37C 24848348 */ addiu $a0, $a0, %lo(gPartnerAnimations) -/* 87830 800EE380 E634000C */ swc1 $f20, 0xc($s1) -/* 87834 800EE384 000310C0 */ sll $v0, $v1, 3 -/* 87838 800EE388 00431021 */ addu $v0, $v0, $v1 -/* 8783C 800EE38C 00021080 */ sll $v0, $v0, 2 -/* 87840 800EE390 00442021 */ addu $a0, $v0, $a0 -/* 87844 800EE394 8E220000 */ lw $v0, ($s1) -/* 87848 800EE398 8C830018 */ lw $v1, 0x18($a0) -/* 8784C 800EE39C 30424000 */ andi $v0, $v0, 0x4000 -/* 87850 800EE3A0 14400004 */ bnez $v0, .L800EE3B4 -/* 87854 800EE3A4 AE230028 */ sw $v1, 0x28($s1) -/* 87858 800EE3A8 3C018010 */ lui $at, %hi(D_800F803A) -/* 8785C 800EE3AC 0803B919 */ j .L800EE464 -/* 87860 800EE3B0 A420803A */ sh $zero, %lo(D_800F803A)($at) -.L800EE3B4: -/* 87864 800EE3B4 3C038010 */ lui $v1, %hi(D_800F803A) -/* 87868 800EE3B8 2463803A */ addiu $v1, $v1, %lo(D_800F803A) -/* 8786C 800EE3BC 94620000 */ lhu $v0, ($v1) -/* 87870 800EE3C0 24420001 */ addiu $v0, $v0, 1 -/* 87874 800EE3C4 A4620000 */ sh $v0, ($v1) -/* 87878 800EE3C8 00021400 */ sll $v0, $v0, 0x10 -/* 8787C 800EE3CC 00021403 */ sra $v0, $v0, 0x10 -/* 87880 800EE3D0 2842000B */ slti $v0, $v0, 0xb -/* 87884 800EE3D4 14400023 */ bnez $v0, .L800EE464 -/* 87888 800EE3D8 00000000 */ nop -/* 8788C 800EE3DC C6740080 */ lwc1 $f20, 0x80($s3) -/* 87890 800EE3E0 AE200018 */ sw $zero, 0x18($s1) -/* 87894 800EE3E4 AE200014 */ sw $zero, 0x14($s1) -/* 87898 800EE3E8 E6340034 */ swc1 $f20, 0x34($s1) -/* 8789C 800EE3EC 0803B90E */ j .L800EE438 -/* 878A0 800EE3F0 8C820014 */ lw $v0, 0x14($a0) -.L800EE3F4: -/* 878A4 800EE3F4 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 878A8 800EE3F8 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 878AC 800EE3FC 8E660028 */ lw $a2, 0x28($s3) -/* 878B0 800EE400 0C00A720 */ jal atan2 -/* 878B4 800EE404 8E670030 */ lw $a3, 0x30($s3) -/* 878B8 800EE408 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 878BC 800EE40C 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 878C0 800EE410 46000506 */ mov.s $f20, $f0 -/* 878C4 800EE414 E634000C */ swc1 $f20, 0xc($s1) -/* 878C8 800EE418 AE200018 */ sw $zero, 0x18($s1) -/* 878CC 800EE41C AE200014 */ sw $zero, 0x14($s1) -/* 878D0 800EE420 000310C0 */ sll $v0, $v1, 3 -/* 878D4 800EE424 00431021 */ addu $v0, $v0, $v1 -/* 878D8 800EE428 00021080 */ sll $v0, $v0, 2 -/* 878DC 800EE42C 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 878E0 800EE430 00220821 */ addu $at, $at, $v0 -/* 878E4 800EE434 8C22835C */ lw $v0, %lo(gPartnerAnimations+0x14)($at) -.L800EE438: -/* 878E8 800EE438 3C048011 */ lui $a0, %hi(D_8010CFCA) -/* 878EC 800EE43C 2484CFCA */ addiu $a0, $a0, %lo(D_8010CFCA) -/* 878F0 800EE440 AE220028 */ sw $v0, 0x28($s1) -/* 878F4 800EE444 84830000 */ lh $v1, ($a0) -/* 878F8 800EE448 24020002 */ addiu $v0, $zero, 2 -/* 878FC 800EE44C 10620004 */ beq $v1, $v0, .L800EE460 -/* 87900 800EE450 2402000C */ addiu $v0, $zero, 0xc -/* 87904 800EE454 826300B4 */ lb $v1, 0xb4($s3) -/* 87908 800EE458 14620002 */ bne $v1, $v0, .L800EE464 -/* 8790C 800EE45C 00000000 */ nop -.L800EE460: -/* 87910 800EE460 A4800000 */ sh $zero, ($a0) -.L800EE464: -/* 87914 800EE464 8E250018 */ lw $a1, 0x18($s1) -/* 87918 800EE468 4406A000 */ mfc1 $a2, $f20 -/* 8791C 800EE46C 0220202D */ daddu $a0, $s1, $zero -/* 87920 800EE470 0C00EA95 */ jal npc_move_heading -/* 87924 800EE474 AC86000C */ sw $a2, 0xc($a0) -/* 87928 800EE478 0803BA5A */ j .L800EE968_87E18 -/* 8792C 800EE47C 00000000 */ nop -.L800EE480: -/* 87930 800EE480 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87934 800EE484 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 87938 800EE488 8E660028 */ lw $a2, 0x28($s3) -/* 8793C 800EE48C 0C00A7B5 */ jal dist2D -/* 87940 800EE490 8E670030 */ lw $a3, 0x30($s3) -/* 87944 800EE494 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 87948 800EE498 C422CFC0 */ lwc1 $f2, %lo(wPartnerTetherDistance)($at) -/* 8794C 800EE49C 4602003E */ c.le.s $f0, $f2 -/* 87950 800EE4A0 00000000 */ nop -/* 87954 800EE4A4 45010130 */ bc1t .L800EE968_87E18 -/* 87958 800EE4A8 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 8795C 800EE4AC 3C0142B4 */ lui $at, 0x42b4 -/* 87960 800EE4B0 4481C000 */ mtc1 $at, $f24 -/* 87964 800EE4B4 3C128011 */ lui $s2, %hi(D_8010CFBC) -/* 87968 800EE4B8 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC) -/* 8796C 800EE4BC 3C148011 */ lui $s4, %hi(gPlayerMoveHistory) -/* 87970 800EE4C0 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory) -.L800EE4C4: -/* 87974 800EE4C4 82020000 */ lb $v0, ($s0) -/* 87978 800EE4C8 14400024 */ bnez $v0, .L800EE55C -/* 8797C 800EE4CC 00000000 */ nop -/* 87980 800EE4D0 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87984 800EE4D4 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 87988 800EE4D8 4406B000 */ mfc1 $a2, $f22 -/* 8798C 800EE4DC 4407A000 */ mfc1 $a3, $f20 -/* 87990 800EE4E0 0C00A720 */ jal atan2 -/* 87994 800EE4E4 00000000 */ nop -/* 87998 800EE4E8 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 8799C 800EE4EC C62E0040 */ lwc1 $f14, 0x40($s1) -/* 879A0 800EE4F0 8E660028 */ lw $a2, 0x28($s3) -/* 879A4 800EE4F4 8E670030 */ lw $a3, 0x30($s3) -/* 879A8 800EE4F8 0C00A720 */ jal atan2 -/* 879AC 800EE4FC 46000506 */ mov.s $f20, $f0 -/* 879B0 800EE500 4600A306 */ mov.s $f12, $f20 -/* 879B4 800EE504 0C00A70A */ jal get_clamped_angle_diff -/* 879B8 800EE508 46000386 */ mov.s $f14, $f0 -/* 879BC 800EE50C 46000005 */ abs.s $f0, $f0 -/* 879C0 800EE510 4618003C */ c.lt.s $f0, $f24 -/* 879C4 800EE514 00000000 */ nop -/* 879C8 800EE518 45010010 */ bc1t .L800EE55C -/* 879CC 800EE51C 00000000 */ nop -/* 879D0 800EE520 8E430000 */ lw $v1, ($s2) -/* 879D4 800EE524 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex) -/* 879D8 800EE528 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0) -/* 879DC 800EE52C 1062000B */ beq $v1, $v0, .L800EE55C -/* 879E0 800EE530 24620001 */ addiu $v0, $v1, 1 -/* 879E4 800EE534 AE420000 */ sw $v0, ($s2) -/* 879E8 800EE538 28420028 */ slti $v0, $v0, 0x28 -/* 879EC 800EE53C 50400001 */ beql $v0, $zero, .L800EE544 -/* 879F0 800EE540 AE400000 */ sw $zero, ($s2) -.L800EE544: -/* 879F4 800EE544 8E420000 */ lw $v0, ($s2) -/* 879F8 800EE548 00021100 */ sll $v0, $v0, 4 -/* 879FC 800EE54C 00548021 */ addu $s0, $v0, $s4 -/* 87A00 800EE550 C6160004 */ lwc1 $f22, 4($s0) -/* 87A04 800EE554 0803B931 */ j .L800EE4C4 -/* 87A08 800EE558 C614000C */ lwc1 $f20, 0xc($s0) -.L800EE55C: -/* 87A0C 800EE55C 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 87A10 800EE560 A420CFC8 */ sh $zero, %lo(D_8010CFC8)($at) -/* 87A14 800EE564 0803BA5A */ j .L800EE968_87E18 -/* 87A18 800EE568 00000000 */ nop -.L800EE56C_87A1C: -/* 87A1C 800EE56C 8E620004 */ lw $v0, 4($s3) -/* 87A20 800EE570 3C030010 */ lui $v1, 0x10 -/* 87A24 800EE574 00431024 */ and $v0, $v0, $v1 -/* 87A28 800EE578 144000FB */ bnez $v0, .L800EE968_87E18 -/* 87A2C 800EE57C 00000000 */ nop -/* 87A30 800EE580 3C038011 */ lui $v1, %hi(D_8010CFCE) -/* 87A34 800EE584 8463CFCE */ lh $v1, %lo(D_8010CFCE)($v1) -/* 87A38 800EE588 10600006 */ beqz $v1, .L800EE5A4 -/* 87A3C 800EE58C 00000000 */ nop -/* 87A40 800EE590 24020001 */ addiu $v0, $zero, 1 -/* 87A44 800EE594 10620048 */ beq $v1, $v0, .L800EE6B8 -/* 87A48 800EE598 00000000 */ nop -/* 87A4C 800EE59C 0803BA5A */ j .L800EE968_87E18 -/* 87A50 800EE5A0 00000000 */ nop -.L800EE5A4: -/* 87A54 800EE5A4 0C0394D2 */ jal func_800E5348 -/* 87A58 800EE5A8 00000000 */ nop -/* 87A5C 800EE5AC 3C014334 */ lui $at, 0x4334 -/* 87A60 800EE5B0 44816000 */ mtc1 $at, $f12 -/* 87A64 800EE5B4 0C00A6C9 */ jal clamp_angle -/* 87A68 800EE5B8 460C0300 */ add.s $f12, $f0, $f12 -/* 87A6C 800EE5BC C6620028 */ lwc1 $f2, 0x28($s3) -/* 87A70 800EE5C0 E6220060 */ swc1 $f2, 0x60($s1) -/* 87A74 800EE5C4 C662002C */ lwc1 $f2, 0x2c($s3) -/* 87A78 800EE5C8 E6220064 */ swc1 $f2, 0x64($s1) -/* 87A7C 800EE5CC C6620030 */ lwc1 $f2, 0x30($s3) -/* 87A80 800EE5D0 26240060 */ addiu $a0, $s1, 0x60 -/* 87A84 800EE5D4 E6220068 */ swc1 $f2, 0x68($s1) -/* 87A88 800EE5D8 866200B2 */ lh $v0, 0xb2($s3) -/* 87A8C 800EE5DC 44070000 */ mfc1 $a3, $f0 -/* 87A90 800EE5E0 44828000 */ mtc1 $v0, $f16 -/* 87A94 800EE5E4 00000000 */ nop -/* 87A98 800EE5E8 46808420 */ cvt.s.w $f16, $f16 -/* 87A9C 800EE5EC 44068000 */ mfc1 $a2, $f16 -/* 87AA0 800EE5F0 0C00A7E7 */ jal add_vec2D_polar -/* 87AA4 800EE5F4 26250068 */ addiu $a1, $s1, 0x68 -/* 87AA8 800EE5F8 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87AAC 800EE5FC C62E0040 */ lwc1 $f14, 0x40($s1) -/* 87AB0 800EE600 8E260060 */ lw $a2, 0x60($s1) -/* 87AB4 800EE604 0C00A7B5 */ jal dist2D -/* 87AB8 800EE608 8E270068 */ lw $a3, 0x68($s1) -/* 87ABC 800EE60C 3C018010 */ lui $at, %hi(wPartnerMoveTime) -/* 87AC0 800EE610 C422802C */ lwc1 $f2, %lo(wPartnerMoveTime)($at) -/* 87AC4 800EE614 468010A0 */ cvt.s.w $f2, $f2 -/* 87AC8 800EE618 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 87ACC 800EE61C 46020003 */ div.s $f0, $f0, $f2 -/* 87AD0 800EE620 3C018010 */ lui $at, %hi(wPartnerMoveSpeed) -/* 87AD4 800EE624 E4208030 */ swc1 $f0, %lo(wPartnerMoveSpeed)($at) -/* 87AD8 800EE628 E6200018 */ swc1 $f0, 0x18($s1) -/* 87ADC 800EE62C 46000021 */ cvt.d.s $f0, $f0 -/* 87AE0 800EE630 26240028 */ addiu $a0, $s1, 0x28 -/* 87AE4 800EE634 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 87AE8 800EE638 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 87AEC 800EE63C 3C014010 */ lui $at, 0x4010 -/* 87AF0 800EE640 44811800 */ mtc1 $at, $f3 -/* 87AF4 800EE644 44801000 */ mtc1 $zero, $f2 -/* 87AF8 800EE648 000310C0 */ sll $v0, $v1, 3 -/* 87AFC 800EE64C 00431021 */ addu $v0, $v0, $v1 -/* 87B00 800EE650 4622003C */ c.lt.d $f0, $f2 -/* 87B04 800EE654 00000000 */ nop -/* 87B08 800EE658 45000003 */ bc1f .L800EE668 -/* 87B0C 800EE65C 00021080 */ sll $v0, $v0, 2 -/* 87B10 800EE660 0803B99B */ j .L800EE66C -/* 87B14 800EE664 24430004 */ addiu $v1, $v0, 4 -.L800EE668: -/* 87B18 800EE668 24430018 */ addiu $v1, $v0, 0x18 -.L800EE66C: -/* 87B1C 800EE66C 3C028010 */ lui $v0, %hi(gPartnerAnimations) -/* 87B20 800EE670 24428348 */ addiu $v0, $v0, %lo(gPartnerAnimations) -/* 87B24 800EE674 00431021 */ addu $v0, $v0, $v1 -/* 87B28 800EE678 8C420000 */ lw $v0, ($v0) -/* 87B2C 800EE67C AC820000 */ sw $v0, ($a0) -/* 87B30 800EE680 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 87B34 800EE684 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 87B38 800EE688 8E260060 */ lw $a2, 0x60($s1) -/* 87B3C 800EE68C 0C00A720 */ jal atan2 -/* 87B40 800EE690 8E270068 */ lw $a3, 0x68($s1) -/* 87B44 800EE694 3C038011 */ lui $v1, %hi(D_8010CFCE) -/* 87B48 800EE698 2463CFCE */ addiu $v1, $v1, %lo(D_8010CFCE) -/* 87B4C 800EE69C 94620000 */ lhu $v0, ($v1) -/* 87B50 800EE6A0 46000506 */ mov.s $f20, $f0 -/* 87B54 800EE6A4 3C018010 */ lui $at, %hi(D_800F8034) -/* 87B58 800EE6A8 E4348034 */ swc1 $f20, %lo(D_800F8034)($at) -/* 87B5C 800EE6AC E634000C */ swc1 $f20, 0xc($s1) -/* 87B60 800EE6B0 24420001 */ addiu $v0, $v0, 1 -/* 87B64 800EE6B4 A4620000 */ sh $v0, ($v1) -.L800EE6B8: -/* 87B68 800EE6B8 3C098010 */ lui $t1, %hi(wPartnerMoveTime) -/* 87B6C 800EE6BC 2529802C */ addiu $t1, $t1, %lo(wPartnerMoveTime) -/* 87B70 800EE6C0 8D280000 */ lw $t0, ($t1) -/* 87B74 800EE6C4 1100007E */ beqz $t0, .L800EE8C0 -/* 87B78 800EE6C8 3C040001 */ lui $a0, 1 -/* 87B7C 800EE6CC 27A50020 */ addiu $a1, $sp, 0x20 -/* 87B80 800EE6D0 C6220038 */ lwc1 $f2, 0x38($s1) -/* 87B84 800EE6D4 862200A8 */ lh $v0, 0xa8($s1) -/* 87B88 800EE6D8 C6200040 */ lwc1 $f0, 0x40($s1) -/* 87B8C 800EE6DC 27A60024 */ addiu $a2, $sp, 0x24 -/* 87B90 800EE6E0 E7A00028 */ swc1 $f0, 0x28($sp) -/* 87B94 800EE6E4 44820000 */ mtc1 $v0, $f0 -/* 87B98 800EE6E8 00000000 */ nop -/* 87B9C 800EE6EC 46800020 */ cvt.s.w $f0, $f0 -/* 87BA0 800EE6F0 E7A20020 */ swc1 $f2, 0x20($sp) -/* 87BA4 800EE6F4 862200A8 */ lh $v0, 0xa8($s1) -/* 87BA8 800EE6F8 C622003C */ lwc1 $f2, 0x3c($s1) -/* 87BAC 800EE6FC 24420001 */ addiu $v0, $v0, 1 -/* 87BB0 800EE700 46001080 */ add.s $f2, $f2, $f0 -/* 87BB4 800EE704 44820000 */ mtc1 $v0, $f0 -/* 87BB8 800EE708 00000000 */ nop -/* 87BBC 800EE70C 46800020 */ cvt.s.w $f0, $f0 -/* 87BC0 800EE710 27A2002C */ addiu $v0, $sp, 0x2c -/* 87BC4 800EE714 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 87BC8 800EE718 E7A20024 */ swc1 $f2, 0x24($sp) -/* 87BCC 800EE71C AFA20010 */ sw $v0, 0x10($sp) -/* 87BD0 800EE720 C620000C */ lwc1 $f0, 0xc($s1) -/* 87BD4 800EE724 27A70028 */ addiu $a3, $sp, 0x28 -/* 87BD8 800EE728 E7A00014 */ swc1 $f0, 0x14($sp) -/* 87BDC 800EE72C 862300A6 */ lh $v1, 0xa6($s1) -/* 87BE0 800EE730 2502FFFF */ addiu $v0, $t0, -1 -/* 87BE4 800EE734 AD220000 */ sw $v0, ($t1) -/* 87BE8 800EE738 44830000 */ mtc1 $v1, $f0 -/* 87BEC 800EE73C 00000000 */ nop -/* 87BF0 800EE740 46800020 */ cvt.s.w $f0, $f0 -/* 87BF4 800EE744 0C0371DE */ jal npc_raycast_down_around -/* 87BF8 800EE748 E7A00018 */ swc1 $f0, 0x18($sp) -/* 87BFC 800EE74C 14400017 */ bnez $v0, .L800EE7AC -/* 87C00 800EE750 00000000 */ nop -/* 87C04 800EE754 C624003C */ lwc1 $f4, 0x3c($s1) -/* 87C08 800EE758 C666002C */ lwc1 $f6, 0x2c($s3) -/* 87C0C 800EE75C 862200A8 */ lh $v0, 0xa8($s1) -/* 87C10 800EE760 46062001 */ sub.s $f0, $f4, $f6 -/* 87C14 800EE764 24420005 */ addiu $v0, $v0, 5 -/* 87C18 800EE768 44821000 */ mtc1 $v0, $f2 -/* 87C1C 800EE76C 00000000 */ nop -/* 87C20 800EE770 468010A1 */ cvt.d.w $f2, $f2 -/* 87C24 800EE774 46000021 */ cvt.d.s $f0, $f0 -/* 87C28 800EE778 46200005 */ abs.d $f0, $f0 -/* 87C2C 800EE77C 4620103C */ c.lt.d $f2, $f0 -/* 87C30 800EE780 00000000 */ nop -/* 87C34 800EE784 45000018 */ bc1f .L800EE7E8 -/* 87C38 800EE788 00000000 */ nop -/* 87C3C 800EE78C 46043001 */ sub.s $f0, $f6, $f4 -/* 87C40 800EE790 3C014120 */ lui $at, 0x4120 -/* 87C44 800EE794 44811000 */ mtc1 $at, $f2 -/* 87C48 800EE798 00000000 */ nop -/* 87C4C 800EE79C 46020003 */ div.s $f0, $f0, $f2 -/* 87C50 800EE7A0 46002000 */ add.s $f0, $f4, $f0 -/* 87C54 800EE7A4 0803B9FA */ j .L800EE7E8 -/* 87C58 800EE7A8 E620003C */ swc1 $f0, 0x3c($s1) -.L800EE7AC: -/* 87C5C 800EE7AC 866200B0 */ lh $v0, 0xb0($s3) -/* 87C60 800EE7B0 C660002C */ lwc1 $f0, 0x2c($s3) -/* 87C64 800EE7B4 44821000 */ mtc1 $v0, $f2 -/* 87C68 800EE7B8 00000000 */ nop -/* 87C6C 800EE7BC 468010A0 */ cvt.s.w $f2, $f2 -/* 87C70 800EE7C0 46020000 */ add.s $f0, $f0, $f2 -/* 87C74 800EE7C4 C622003C */ lwc1 $f2, 0x3c($s1) -/* 87C78 800EE7C8 46020001 */ sub.s $f0, $f0, $f2 -/* 87C7C 800EE7CC 3C013E00 */ lui $at, 0x3e00 -/* 87C80 800EE7D0 44812000 */ mtc1 $at, $f4 -/* 87C84 800EE7D4 00000000 */ nop -/* 87C88 800EE7D8 46040002 */ mul.s $f0, $f0, $f4 -/* 87C8C 800EE7DC 00000000 */ nop -/* 87C90 800EE7E0 46001080 */ add.s $f2, $f2, $f0 -/* 87C94 800EE7E4 E622003C */ swc1 $f2, 0x3c($s1) -.L800EE7E8: -/* 87C98 800EE7E8 3C018010 */ lui $at, %hi(wPartnerMoveSpeed) -/* 87C9C 800EE7EC C4208030 */ lwc1 $f0, %lo(wPartnerMoveSpeed)($at) -/* 87CA0 800EE7F0 C6220038 */ lwc1 $f2, 0x38($s1) -/* 87CA4 800EE7F4 C624003C */ lwc1 $f4, 0x3c($s1) -/* 87CA8 800EE7F8 C6260040 */ lwc1 $f6, 0x40($s1) -/* 87CAC 800EE7FC E6200018 */ swc1 $f0, 0x18($s1) -/* 87CB0 800EE800 3C018010 */ lui $at, %hi(D_800F8034) -/* 87CB4 800EE804 C4208034 */ lwc1 $f0, %lo(D_800F8034)($at) -/* 87CB8 800EE808 C6280018 */ lwc1 $f8, 0x18($s1) -/* 87CBC 800EE80C 0000202D */ daddu $a0, $zero, $zero -/* 87CC0 800EE810 E620000C */ swc1 $f0, 0xc($s1) -/* 87CC4 800EE814 E7A20020 */ swc1 $f2, 0x20($sp) -/* 87CC8 800EE818 E7A40024 */ swc1 $f4, 0x24($sp) -/* 87CCC 800EE81C E7A60028 */ swc1 $f6, 0x28($sp) -/* 87CD0 800EE820 E7A80010 */ swc1 $f8, 0x10($sp) -/* 87CD4 800EE824 C620000C */ lwc1 $f0, 0xc($s1) -/* 87CD8 800EE828 27A50020 */ addiu $a1, $sp, 0x20 -/* 87CDC 800EE82C E7A00014 */ swc1 $f0, 0x14($sp) -/* 87CE0 800EE830 862200A8 */ lh $v0, 0xa8($s1) -/* 87CE4 800EE834 27A60024 */ addiu $a2, $sp, 0x24 -/* 87CE8 800EE838 44820000 */ mtc1 $v0, $f0 -/* 87CEC 800EE83C 00000000 */ nop -/* 87CF0 800EE840 46800020 */ cvt.s.w $f0, $f0 -/* 87CF4 800EE844 E7A00018 */ swc1 $f0, 0x18($sp) -/* 87CF8 800EE848 862200A6 */ lh $v0, 0xa6($s1) -/* 87CFC 800EE84C 27A70028 */ addiu $a3, $sp, 0x28 -/* 87D00 800EE850 44820000 */ mtc1 $v0, $f0 -/* 87D04 800EE854 00000000 */ nop -/* 87D08 800EE858 46800020 */ cvt.s.w $f0, $f0 -/* 87D0C 800EE85C 0C0376B9 */ jal npc_test_move_taller_with_slipping -/* 87D10 800EE860 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 87D14 800EE864 10400010 */ beqz $v0, .L800EE8A8 -/* 87D18 800EE868 00000000 */ nop -/* 87D1C 800EE86C C7A00020 */ lwc1 $f0, 0x20($sp) -/* 87D20 800EE870 C6260038 */ lwc1 $f6, 0x38($s1) -/* 87D24 800EE874 C7A20028 */ lwc1 $f2, 0x28($sp) -/* 87D28 800EE878 46060001 */ sub.s $f0, $f0, $f6 -/* 87D2C 800EE87C C6240040 */ lwc1 $f4, 0x40($s1) -/* 87D30 800EE880 3C0140A0 */ lui $at, 0x40a0 -/* 87D34 800EE884 44814000 */ mtc1 $at, $f8 -/* 87D38 800EE888 46041081 */ sub.s $f2, $f2, $f4 -/* 87D3C 800EE88C 46080003 */ div.s $f0, $f0, $f8 -/* 87D40 800EE890 46003180 */ add.s $f6, $f6, $f0 -/* 87D44 800EE894 46081083 */ div.s $f2, $f2, $f8 -/* 87D48 800EE898 46022100 */ add.s $f4, $f4, $f2 -/* 87D4C 800EE89C E6260038 */ swc1 $f6, 0x38($s1) -/* 87D50 800EE8A0 0803BA5A */ j .L800EE968_87E18 -/* 87D54 800EE8A4 E6240040 */ swc1 $f4, 0x40($s1) -.L800EE8A8: -/* 87D58 800EE8A8 8E250018 */ lw $a1, 0x18($s1) -/* 87D5C 800EE8AC 8E26000C */ lw $a2, 0xc($s1) -/* 87D60 800EE8B0 0C00EA95 */ jal npc_move_heading -/* 87D64 800EE8B4 0220202D */ daddu $a0, $s1, $zero -/* 87D68 800EE8B8 0803BA5A */ j .L800EE968_87E18 -/* 87D6C 800EE8BC 00000000 */ nop -.L800EE8C0: -/* 87D70 800EE8C0 0C03BD17 */ jal partner_clear_player_tracking -/* 87D74 800EE8C4 0220202D */ daddu $a0, $s1, $zero -/* 87D78 800EE8C8 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 87D7C 800EE8CC 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 87D80 800EE8D0 3C014387 */ lui $at, 0x4387 -/* 87D84 800EE8D4 44810000 */ mtc1 $at, $f0 -/* 87D88 800EE8D8 AE200018 */ sw $zero, 0x18($s1) -/* 87D8C 800EE8DC AE200014 */ sw $zero, 0x14($s1) -/* 87D90 800EE8E0 000310C0 */ sll $v0, $v1, 3 -/* 87D94 800EE8E4 00431021 */ addu $v0, $v0, $v1 -/* 87D98 800EE8E8 00021080 */ sll $v0, $v0, 2 -/* 87D9C 800EE8EC 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 87DA0 800EE8F0 00220821 */ addu $at, $at, $v0 -/* 87DA4 800EE8F4 8C22835C */ lw $v0, %lo(gPartnerAnimations+0x14)($at) -/* 87DA8 800EE8F8 AE220028 */ sw $v0, 0x28($s1) -/* 87DAC 800EE8FC C64C006C */ lwc1 $f12, 0x6c($s2) -/* 87DB0 800EE900 46006300 */ add.s $f12, $f12, $f0 -/* 87DB4 800EE904 C66000A8 */ lwc1 $f0, 0xa8($s3) -/* 87DB8 800EE908 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 87DBC 800EE90C A420CFC8 */ sh $zero, %lo(D_8010CFC8)($at) -/* 87DC0 800EE910 3C018011 */ lui $at, %hi(D_8010CFCA) -/* 87DC4 800EE914 A420CFCA */ sh $zero, %lo(D_8010CFCA)($at) -/* 87DC8 800EE918 3C018011 */ lui $at, %hi(D_8010CFCE) -/* 87DCC 800EE91C A420CFCE */ sh $zero, %lo(D_8010CFCE)($at) -/* 87DD0 800EE920 0C00A6C9 */ jal clamp_angle -/* 87DD4 800EE924 46006301 */ sub.s $f12, $f12, $f0 -/* 87DD8 800EE928 0803BA5A */ j .L800EE968_87E18 -/* 87DDC 800EE92C E620000C */ swc1 $f0, 0xc($s1) -.L800EE930_87DE0: -/* 87DE0 800EE930 0220202D */ daddu $a0, $s1, $zero -/* 87DE4 800EE934 0C03BE0B */ jal partner_move_to_goal -/* 87DE8 800EE938 24050001 */ addiu $a1, $zero, 1 -/* 87DEC 800EE93C 0803BA5A */ j .L800EE968_87E18 -/* 87DF0 800EE940 00000000 */ nop -.L800EE944_87DF4: -/* 87DF4 800EE944 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 87DF8 800EE948 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 87DFC 800EE94C 000218C0 */ sll $v1, $v0, 3 -/* 87E00 800EE950 00621821 */ addu $v1, $v1, $v0 -/* 87E04 800EE954 00031880 */ sll $v1, $v1, 2 -/* 87E08 800EE958 3C028010 */ lui $v0, %hi(gPartnerAnimations+0x14) -/* 87E0C 800EE95C 00431021 */ addu $v0, $v0, $v1 -/* 87E10 800EE960 8C42835C */ lw $v0, %lo(gPartnerAnimations+0x14)($v0) -/* 87E14 800EE964 AE220028 */ sw $v0, 0x28($s1) -.L800EE968_87E18: -/* 87E18 800EE968 8FBF0044 */ lw $ra, 0x44($sp) -/* 87E1C 800EE96C 8FB40040 */ lw $s4, 0x40($sp) -/* 87E20 800EE970 8FB3003C */ lw $s3, 0x3c($sp) -/* 87E24 800EE974 8FB20038 */ lw $s2, 0x38($sp) -/* 87E28 800EE978 8FB10034 */ lw $s1, 0x34($sp) -/* 87E2C 800EE97C 8FB00030 */ lw $s0, 0x30($sp) -/* 87E30 800EE980 D7B80058 */ ldc1 $f24, 0x58($sp) -/* 87E34 800EE984 D7B60050 */ ldc1 $f22, 0x50($sp) -/* 87E38 800EE988 D7B40048 */ ldc1 $f20, 0x48($sp) -/* 87E3C 800EE98C 03E00008 */ jr $ra -/* 87E40 800EE990 27BD0060 */ addiu $sp, $sp, 0x60 diff --git a/ver/us/asm/nonmatchings/world/partners/partner_walking_follow_player.s b/ver/us/asm/nonmatchings/world/partners/partner_walking_follow_player.s deleted file mode 100644 index ee9490138d..0000000000 --- a/ver/us/asm/nonmatchings/world/partners/partner_walking_follow_player.s +++ /dev/null @@ -1,1534 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.section .rodata - -dlabel jtbl_8010C148 -.word .L800EBD18_851C8, .L800EC148_855F8, .L800EC45C_8590C, .L800ED2E4_86794, .L800ED2E4_86794, .L800EC6FC_85BAC, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ECCC0_86170, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED0B0_86560, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED0C4_86574, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, .L800ED2E4_86794, 0 - -.section .text - -glabel partner_walking_follow_player -/* 85124 800EBC74 3C038011 */ lui $v1, %hi(D_8010CFC8) -/* 85128 800EBC78 8463CFC8 */ lh $v1, %lo(D_8010CFC8)($v1) -/* 8512C 800EBC7C 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 85130 800EBC80 AFB1003C */ sw $s1, 0x3c($sp) -/* 85134 800EBC84 AFB30044 */ sw $s3, 0x44($sp) -/* 85138 800EBC88 3C138011 */ lui $s3, %hi(gPlayerStatus) -/* 8513C 800EBC8C 2673EFC8 */ addiu $s3, $s3, %lo(gPlayerStatus) -/* 85140 800EBC90 AFB5004C */ sw $s5, 0x4c($sp) -/* 85144 800EBC94 3C15800B */ lui $s5, %hi(gCameras) -/* 85148 800EBC98 26B51D80 */ addiu $s5, $s5, %lo(gCameras) -/* 8514C 800EBC9C AFBF0050 */ sw $ra, 0x50($sp) -/* 85150 800EBCA0 AFB40048 */ sw $s4, 0x48($sp) -/* 85154 800EBCA4 AFB20040 */ sw $s2, 0x40($sp) -/* 85158 800EBCA8 AFB00038 */ sw $s0, 0x38($sp) -/* 8515C 800EBCAC F7B60060 */ sdc1 $f22, 0x60($sp) -/* 85160 800EBCB0 F7B40058 */ sdc1 $f20, 0x58($sp) -/* 85164 800EBCB4 2C620033 */ sltiu $v0, $v1, 0x33 -/* 85168 800EBCB8 1040058A */ beqz $v0, .L800ED2E4_86794 -/* 8516C 800EBCBC 0080882D */ daddu $s1, $a0, $zero -/* 85170 800EBCC0 00031080 */ sll $v0, $v1, 2 -/* 85174 800EBCC4 3C018011 */ lui $at, %hi(jtbl_8010C148) -/* 85178 800EBCC8 00220821 */ addu $at, $at, $v0 -/* 8517C 800EBCCC 8C22C148 */ lw $v0, %lo(jtbl_8010C148)($at) -/* 85180 800EBCD0 00400008 */ jr $v0 -/* 85184 800EBCD4 00000000 */ nop -.L800EBCD8: -/* 85188 800EBCD8 C634000C */ lwc1 $f20, 0xc($s1) -/* 8518C 800EBCDC 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 85190 800EBCE0 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 85194 800EBCE4 AE200018 */ sw $zero, 0x18($s1) -/* 85198 800EBCE8 AE200014 */ sw $zero, 0x14($s1) -/* 8519C 800EBCEC 000310C0 */ sll $v0, $v1, 3 -/* 851A0 800EBCF0 00431021 */ addu $v0, $v0, $v1 -/* 851A4 800EBCF4 00021080 */ sll $v0, $v0, 2 -/* 851A8 800EBCF8 3C038010 */ lui $v1, %hi(gPartnerAnimations+0x14) -/* 851AC 800EBCFC 00621821 */ addu $v1, $v1, $v0 -/* 851B0 800EBD00 8C63835C */ lw $v1, %lo(gPartnerAnimations+0x14)($v1) -/* 851B4 800EBD04 24020005 */ addiu $v0, $zero, 5 -/* 851B8 800EBD08 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 851BC 800EBD0C A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -/* 851C0 800EBD10 0803B005 */ j .L800EC014 -/* 851C4 800EBD14 AE230028 */ sw $v1, 0x28($s1) -.L800EBD18_851C8: -/* 851C8 800EBD18 3C038011 */ lui $v1, %hi(gPlayerMoveHistory) -/* 851CC 800EBD1C 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory) -/* 851D0 800EBD20 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 851D4 800EBD24 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 851D8 800EBD28 3C028011 */ lui $v0, %hi(D_8010CFBC) -/* 851DC 800EBD2C 8C42CFBC */ lw $v0, %lo(D_8010CFBC)($v0) -/* 851E0 800EBD30 3C014040 */ lui $at, 0x4040 -/* 851E4 800EBD34 44810000 */ mtc1 $at, $f0 -/* 851E8 800EBD38 C622003C */ lwc1 $f2, 0x3c($s1) -/* 851EC 800EBD3C 00021100 */ sll $v0, $v0, 4 -/* 851F0 800EBD40 00438021 */ addu $s0, $v0, $v1 -/* 851F4 800EBD44 C6060004 */ lwc1 $f6, 4($s0) -/* 851F8 800EBD48 C608000C */ lwc1 $f8, 0xc($s0) -/* 851FC 800EBD4C E6200018 */ swc1 $f0, 0x18($s1) -/* 85200 800EBD50 46006006 */ mov.s $f0, $f12 -/* 85204 800EBD54 8E660028 */ lw $a2, 0x28($s3) -/* 85208 800EBD58 8E670030 */ lw $a3, 0x30($s3) -/* 8520C 800EBD5C 46007106 */ mov.s $f4, $f14 -/* 85210 800EBD60 E7A00028 */ swc1 $f0, 0x28($sp) -/* 85214 800EBD64 E7A2002C */ swc1 $f2, 0x2c($sp) -/* 85218 800EBD68 E7A40030 */ swc1 $f4, 0x30($sp) -/* 8521C 800EBD6C E7A60020 */ swc1 $f6, 0x20($sp) -/* 85220 800EBD70 0C00A7B5 */ jal dist2D -/* 85224 800EBD74 E7A80024 */ swc1 $f8, 0x24($sp) -/* 85228 800EBD78 3C014049 */ lui $at, 0x4049 -/* 8522C 800EBD7C 44811800 */ mtc1 $at, $f3 -/* 85230 800EBD80 44801000 */ mtc1 $zero, $f2 -/* 85234 800EBD84 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85238 800EBD88 46000021 */ cvt.d.s $f0, $f0 -/* 8523C 800EBD8C 4620103E */ c.le.d $f2, $f0 -/* 85240 800EBD90 00000000 */ nop -/* 85244 800EBD94 4500000B */ bc1f .L800EBDC4 -/* 85248 800EBD98 3C030001 */ lui $v1, 1 -/* 8524C 800EBD9C 8E620004 */ lw $v0, 4($s3) -/* 85250 800EBDA0 3C0140E0 */ lui $at, 0x40e0 -/* 85254 800EBDA4 44810000 */ mtc1 $at, $f0 -/* 85258 800EBDA8 00431024 */ and $v0, $v0, $v1 -/* 8525C 800EBDAC 54400005 */ bnel $v0, $zero, .L800EBDC4 -/* 85260 800EBDB0 E6200018 */ swc1 $f0, 0x18($s1) -/* 85264 800EBDB4 3C0140A0 */ lui $at, 0x40a0 -/* 85268 800EBDB8 44810000 */ mtc1 $at, $f0 -/* 8526C 800EBDBC 00000000 */ nop -/* 85270 800EBDC0 E6200018 */ swc1 $f0, 0x18($s1) -.L800EBDC4: -/* 85274 800EBDC4 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 85278 800EBDC8 C420CFC0 */ lwc1 $f0, %lo(wPartnerTetherDistance)($at) -/* 8527C 800EBDCC 3C014034 */ lui $at, 0x4034 -/* 85280 800EBDD0 44811800 */ mtc1 $at, $f3 -/* 85284 800EBDD4 44801000 */ mtc1 $zero, $f2 -/* 85288 800EBDD8 46000021 */ cvt.d.s $f0, $f0 -/* 8528C 800EBDDC 4622003C */ c.lt.d $f0, $f2 -/* 85290 800EBDE0 00000000 */ nop -/* 85294 800EBDE4 45000005 */ bc1f .L800EBDFC -/* 85298 800EBDE8 00000000 */ nop -/* 8529C 800EBDEC 3C014080 */ lui $at, 0x4080 -/* 852A0 800EBDF0 44810000 */ mtc1 $at, $f0 -/* 852A4 800EBDF4 00000000 */ nop -/* 852A8 800EBDF8 E6200018 */ swc1 $f0, 0x18($s1) -.L800EBDFC: -/* 852AC 800EBDFC 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 852B0 800EBE00 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 852B4 800EBE04 3C048010 */ lui $a0, %hi(gPartnerAnimations) -/* 852B8 800EBE08 24848348 */ addiu $a0, $a0, %lo(gPartnerAnimations) -/* 852BC 800EBE0C 000310C0 */ sll $v0, $v1, 3 -/* 852C0 800EBE10 00431021 */ addu $v0, $v0, $v1 -/* 852C4 800EBE14 00021080 */ sll $v0, $v0, 2 -/* 852C8 800EBE18 00442021 */ addu $a0, $v0, $a0 -/* 852CC 800EBE1C 8E220000 */ lw $v0, ($s1) -/* 852D0 800EBE20 8C830018 */ lw $v1, 0x18($a0) -/* 852D4 800EBE24 30421000 */ andi $v0, $v0, 0x1000 -/* 852D8 800EBE28 14400003 */ bnez $v0, .L800EBE38 -/* 852DC 800EBE2C AE230028 */ sw $v1, 0x28($s1) -/* 852E0 800EBE30 8C82000C */ lw $v0, 0xc($a0) -/* 852E4 800EBE34 AE220028 */ sw $v0, 0x28($s1) -.L800EBE38: -/* 852E8 800EBE38 3C128011 */ lui $s2, %hi(D_8010CFBC) -/* 852EC 800EBE3C 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC) -/* 852F0 800EBE40 3C148011 */ lui $s4, %hi(gPlayerMoveHistory) -/* 852F4 800EBE44 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory) -.L800EBE48: -/* 852F8 800EBE48 C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 852FC 800EBE4C C7AE0030 */ lwc1 $f14, 0x30($sp) -/* 85300 800EBE50 8FA60020 */ lw $a2, 0x20($sp) -/* 85304 800EBE54 0C00A7B5 */ jal dist2D -/* 85308 800EBE58 8FA70024 */ lw $a3, 0x24($sp) -/* 8530C 800EBE5C C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 85310 800EBE60 C7AE0030 */ lwc1 $f14, 0x30($sp) -/* 85314 800EBE64 8FA60020 */ lw $a2, 0x20($sp) -/* 85318 800EBE68 8FA70024 */ lw $a3, 0x24($sp) -/* 8531C 800EBE6C 0C00A720 */ jal atan2 -/* 85320 800EBE70 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85324 800EBE74 C6240018 */ lwc1 $f4, 0x18($s1) -/* 85328 800EBE78 C7A20034 */ lwc1 $f2, 0x34($sp) -/* 8532C 800EBE7C 4602203C */ c.lt.s $f4, $f2 -/* 85330 800EBE80 00000000 */ nop -/* 85334 800EBE84 4500003B */ bc1f .L800EBF74 -/* 85338 800EBE88 46000506 */ mov.s $f20, $f0 -/* 8533C 800EBE8C C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 85340 800EBE90 C7AE0030 */ lwc1 $f14, 0x30($sp) -/* 85344 800EBE94 8E660028 */ lw $a2, 0x28($s3) -/* 85348 800EBE98 0C00A7B5 */ jal dist2D -/* 8534C 800EBE9C 8E670030 */ lw $a3, 0x30($s3) -/* 85350 800EBEA0 3C014049 */ lui $at, 0x4049 -/* 85354 800EBEA4 44811800 */ mtc1 $at, $f3 -/* 85358 800EBEA8 44801000 */ mtc1 $zero, $f2 -/* 8535C 800EBEAC 46000106 */ mov.s $f4, $f0 -/* 85360 800EBEB0 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85364 800EBEB4 46002021 */ cvt.d.s $f0, $f4 -/* 85368 800EBEB8 4620103E */ c.le.d $f2, $f0 -/* 8536C 800EBEBC 00000000 */ nop -/* 85370 800EBEC0 45010054 */ bc1t .L800EC014 -/* 85374 800EBEC4 00000000 */ nop -/* 85378 800EBEC8 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 8537C 800EBECC C426CFC0 */ lwc1 $f6, %lo(wPartnerTetherDistance)($at) -/* 85380 800EBED0 4604303C */ c.lt.s $f6, $f4 -/* 85384 800EBED4 00000000 */ nop -/* 85388 800EBED8 4500001F */ bc1f .L800EBF58 -/* 8538C 800EBEDC 00000000 */ nop -/* 85390 800EBEE0 46062081 */ sub.s $f2, $f4, $f6 -/* 85394 800EBEE4 3C014008 */ lui $at, 0x4008 -/* 85398 800EBEE8 44810800 */ mtc1 $at, $f1 -/* 8539C 800EBEEC 44800000 */ mtc1 $zero, $f0 -/* 853A0 800EBEF0 E6220018 */ swc1 $f2, 0x18($s1) -/* 853A4 800EBEF4 460010A1 */ cvt.d.s $f2, $f2 -/* 853A8 800EBEF8 4622003C */ c.lt.d $f0, $f2 -/* 853AC 800EBEFC 00000000 */ nop -/* 853B0 800EBF00 4500000D */ bc1f .L800EBF38 -/* 853B4 800EBF04 00000000 */ nop -/* 853B8 800EBF08 3C0141A0 */ lui $at, 0x41a0 -/* 853BC 800EBF0C 44810000 */ mtc1 $at, $f0 -/* 853C0 800EBF10 3C014040 */ lui $at, 0x4040 -/* 853C4 800EBF14 44811000 */ mtc1 $at, $f2 -/* 853C8 800EBF18 4600303C */ c.lt.s $f6, $f0 -/* 853CC 800EBF1C 00000000 */ nop -/* 853D0 800EBF20 4500003C */ bc1f .L800EC014 -/* 853D4 800EBF24 E6220018 */ swc1 $f2, 0x18($s1) -/* 853D8 800EBF28 3C014080 */ lui $at, 0x4080 -/* 853DC 800EBF2C 44810000 */ mtc1 $at, $f0 -/* 853E0 800EBF30 0803B005 */ j .L800EC014 -/* 853E4 800EBF34 E6200018 */ swc1 $f0, 0x18($s1) -.L800EBF38: -/* 853E8 800EBF38 3C013FF0 */ lui $at, 0x3ff0 -/* 853EC 800EBF3C 44810800 */ mtc1 $at, $f1 -/* 853F0 800EBF40 44800000 */ mtc1 $zero, $f0 -/* 853F4 800EBF44 00000000 */ nop -/* 853F8 800EBF48 46201000 */ add.d $f0, $f2, $f0 -/* 853FC 800EBF4C 46200020 */ cvt.s.d $f0, $f0 -/* 85400 800EBF50 0803B005 */ j .L800EC014 -/* 85404 800EBF54 E6200018 */ swc1 $f0, 0x18($s1) -.L800EBF58: -/* 85408 800EBF58 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 8540C 800EBF5C C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85410 800EBF60 AE200018 */ sw $zero, 0x18($s1) -/* 85414 800EBF64 8E660028 */ lw $a2, 0x28($s3) -/* 85418 800EBF68 0C00A720 */ jal atan2 -/* 8541C 800EBF6C 8E670030 */ lw $a3, 0x30($s3) -/* 85420 800EBF70 E620000C */ swc1 $f0, 0xc($s1) -.L800EBF74: -/* 85424 800EBF74 8E430000 */ lw $v1, ($s2) -/* 85428 800EBF78 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex) -/* 8542C 800EBF7C 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0) -/* 85430 800EBF80 1062FF55 */ beq $v1, $v0, .L800EBCD8 -/* 85434 800EBF84 24620001 */ addiu $v0, $v1, 1 -/* 85438 800EBF88 AE420000 */ sw $v0, ($s2) -/* 8543C 800EBF8C 28420028 */ slti $v0, $v0, 0x28 -/* 85440 800EBF90 50400001 */ beql $v0, $zero, .L800EBF98 -/* 85444 800EBF94 AE400000 */ sw $zero, ($s2) -.L800EBF98: -/* 85448 800EBF98 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 8544C 800EBF9C 8E420000 */ lw $v0, ($s2) -/* 85450 800EBFA0 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85454 800EBFA4 00021100 */ sll $v0, $v0, 4 -/* 85458 800EBFA8 00548021 */ addu $s0, $v0, $s4 -/* 8545C 800EBFAC C6000004 */ lwc1 $f0, 4($s0) -/* 85460 800EBFB0 C602000C */ lwc1 $f2, 0xc($s0) -/* 85464 800EBFB4 44060000 */ mfc1 $a2, $f0 -/* 85468 800EBFB8 44071000 */ mfc1 $a3, $f2 -/* 8546C 800EBFBC AFA60020 */ sw $a2, 0x20($sp) -/* 85470 800EBFC0 0C00A720 */ jal atan2 -/* 85474 800EBFC4 AFA70024 */ sw $a3, 0x24($sp) -/* 85478 800EBFC8 C62C000C */ lwc1 $f12, 0xc($s1) -/* 8547C 800EBFCC 0C00A70A */ jal get_clamped_angle_diff -/* 85480 800EBFD0 46000386 */ mov.s $f14, $f0 -/* 85484 800EBFD4 3C0142B4 */ lui $at, 0x42b4 -/* 85488 800EBFD8 44811000 */ mtc1 $at, $f2 -/* 8548C 800EBFDC 46000005 */ abs.s $f0, $f0 -/* 85490 800EBFE0 4600103C */ c.lt.s $f2, $f0 -/* 85494 800EBFE4 00000000 */ nop -/* 85498 800EBFE8 45010008 */ bc1t .L800EC00C -/* 8549C 800EBFEC 24020005 */ addiu $v0, $zero, 5 -/* 854A0 800EBFF0 8E220000 */ lw $v0, ($s1) -/* 854A4 800EBFF4 30421000 */ andi $v0, $v0, 0x1000 -/* 854A8 800EBFF8 1040FF93 */ beqz $v0, .L800EBE48 -/* 854AC 800EBFFC 00000000 */ nop -/* 854B0 800EC000 82020000 */ lb $v0, ($s0) -/* 854B4 800EC004 1040FF90 */ beqz $v0, .L800EBE48 -/* 854B8 800EC008 24020001 */ addiu $v0, $zero, 1 -.L800EC00C: -/* 854BC 800EC00C 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 854C0 800EC010 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -.L800EC014: -/* 854C4 800EC014 8E220000 */ lw $v0, ($s1) -/* 854C8 800EC018 30421000 */ andi $v0, $v0, 0x1000 -/* 854CC 800EC01C 14400008 */ bnez $v0, .L800EC040 -/* 854D0 800EC020 00000000 */ nop -/* 854D4 800EC024 C6200018 */ lwc1 $f0, 0x18($s1) -/* 854D8 800EC028 3C013F00 */ lui $at, 0x3f00 -/* 854DC 800EC02C 44811000 */ mtc1 $at, $f2 -/* 854E0 800EC030 00000000 */ nop -/* 854E4 800EC034 46020002 */ mul.s $f0, $f0, $f2 -/* 854E8 800EC038 00000000 */ nop -/* 854EC 800EC03C E6200018 */ swc1 $f0, 0x18($s1) -.L800EC040: -/* 854F0 800EC040 8E250018 */ lw $a1, 0x18($s1) -/* 854F4 800EC044 4406A000 */ mfc1 $a2, $f20 -/* 854F8 800EC048 0220202D */ daddu $a0, $s1, $zero -/* 854FC 800EC04C 0C00EA95 */ jal npc_move_heading -/* 85500 800EC050 AE26000C */ sw $a2, 0xc($s1) -/* 85504 800EC054 C6200018 */ lwc1 $f0, 0x18($s1) -/* 85508 800EC058 3C014010 */ lui $at, 0x4010 -/* 8550C 800EC05C 44811800 */ mtc1 $at, $f3 -/* 85510 800EC060 44801000 */ mtc1 $zero, $f2 -/* 85514 800EC064 46000021 */ cvt.d.s $f0, $f0 -/* 85518 800EC068 4622003C */ c.lt.d $f0, $f2 -/* 8551C 800EC06C 00000000 */ nop -/* 85520 800EC070 45000002 */ bc1f .L800EC07C -/* 85524 800EC074 24050001 */ addiu $a1, $zero, 1 -/* 85528 800EC078 0000282D */ daddu $a1, $zero, $zero -.L800EC07C: -/* 8552C 800EC07C 0C00F598 */ jal func_8003D660 -/* 85530 800EC080 0220202D */ daddu $a0, $s1, $zero -/* 85534 800EC084 86240084 */ lh $a0, 0x84($s1) -/* 85538 800EC088 0C016F6A */ jal get_collider_flags -/* 8553C 800EC08C 00000000 */ nop -/* 85540 800EC090 2442FFFE */ addiu $v0, $v0, -2 -/* 85544 800EC094 2C420002 */ sltiu $v0, $v0, 2 -/* 85548 800EC098 14400005 */ bnez $v0, .L800EC0B0 -/* 8554C 800EC09C 24035000 */ addiu $v1, $zero, 0x5000 -/* 85550 800EC0A0 8E220000 */ lw $v0, ($s1) -/* 85554 800EC0A4 30425000 */ andi $v0, $v0, 0x5000 -/* 85558 800EC0A8 1443048E */ bne $v0, $v1, .L800ED2E4_86794 -/* 8555C 800EC0AC 00000000 */ nop -.L800EC0B0: -/* 85560 800EC0B0 0C03A92C */ jal func_800EA4B0 -/* 85564 800EC0B4 86240086 */ lh $a0, 0x86($s1) -/* 85568 800EC0B8 14400488 */ bnez $v0, .L800ED2DC -/* 8556C 800EC0BC 24020001 */ addiu $v0, $zero, 1 -/* 85570 800EC0C0 3C038011 */ lui $v1, %hi(D_8010CFBC) -/* 85574 800EC0C4 2463CFBC */ addiu $v1, $v1, %lo(D_8010CFBC) -/* 85578 800EC0C8 8C620000 */ lw $v0, ($v1) -/* 8557C 800EC0CC 24420001 */ addiu $v0, $v0, 1 -/* 85580 800EC0D0 AC620000 */ sw $v0, ($v1) -/* 85584 800EC0D4 28420028 */ slti $v0, $v0, 0x28 -/* 85588 800EC0D8 50400001 */ beql $v0, $zero, .L800EC0E0 -/* 8558C 800EC0DC AC600000 */ sw $zero, ($v1) -.L800EC0E0: -/* 85590 800EC0E0 8C620000 */ lw $v0, ($v1) -/* 85594 800EC0E4 3C038011 */ lui $v1, %hi(gPlayerMoveHistory) -/* 85598 800EC0E8 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory) -/* 8559C 800EC0EC C62C0038 */ lwc1 $f12, 0x38($s1) -/* 855A0 800EC0F0 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 855A4 800EC0F4 00021100 */ sll $v0, $v0, 4 -/* 855A8 800EC0F8 00438021 */ addu $s0, $v0, $v1 -/* 855AC 800EC0FC C6000004 */ lwc1 $f0, 4($s0) -/* 855B0 800EC100 C602000C */ lwc1 $f2, 0xc($s0) -/* 855B4 800EC104 44060000 */ mfc1 $a2, $f0 -/* 855B8 800EC108 44071000 */ mfc1 $a3, $f2 -/* 855BC 800EC10C AFA60020 */ sw $a2, 0x20($sp) -/* 855C0 800EC110 0C00A720 */ jal atan2 -/* 855C4 800EC114 AFA70024 */ sw $a3, 0x24($sp) -/* 855C8 800EC118 C62C000C */ lwc1 $f12, 0xc($s1) -/* 855CC 800EC11C 0C00A70A */ jal get_clamped_angle_diff -/* 855D0 800EC120 46000386 */ mov.s $f14, $f0 -/* 855D4 800EC124 3C0142B4 */ lui $at, 0x42b4 -/* 855D8 800EC128 44811000 */ mtc1 $at, $f2 -/* 855DC 800EC12C 46000005 */ abs.s $f0, $f0 -/* 855E0 800EC130 4600103C */ c.lt.s $f2, $f0 -/* 855E4 800EC134 00000000 */ nop -/* 855E8 800EC138 4500046A */ bc1f .L800ED2E4_86794 -/* 855EC 800EC13C 24020005 */ addiu $v0, $zero, 5 -/* 855F0 800EC140 0803B4B7 */ j .L800ED2DC -/* 855F4 800EC144 00000000 */ nop -.L800EC148_855F8: -/* 855F8 800EC148 0C016F6A */ jal get_collider_flags -/* 855FC 800EC14C 86240084 */ lh $a0, 0x84($s1) -/* 85600 800EC150 3C058011 */ lui $a1, %hi(D_8010CFBC) -/* 85604 800EC154 24A5CFBC */ addiu $a1, $a1, %lo(D_8010CFBC) -/* 85608 800EC158 8CA40000 */ lw $a0, ($a1) -/* 8560C 800EC15C 3C038011 */ lui $v1, %hi(gPlayerMoveHistoryIndex) -/* 85610 800EC160 8C63CFB8 */ lw $v1, %lo(gPlayerMoveHistoryIndex)($v1) -/* 85614 800EC164 14830016 */ bne $a0, $v1, .L800EC1C0 -/* 85618 800EC168 0040902D */ daddu $s2, $v0, $zero -/* 8561C 800EC16C 2642FFFE */ addiu $v0, $s2, -2 -/* 85620 800EC170 2C420002 */ sltiu $v0, $v0, 2 -/* 85624 800EC174 1040045B */ beqz $v0, .L800ED2E4_86794 -/* 85628 800EC178 00000000 */ nop -/* 8562C 800EC17C C674002C */ lwc1 $f20, 0x2c($s3) -/* 85630 800EC180 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85634 800EC184 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85638 800EC188 8E660028 */ lw $a2, 0x28($s3) -/* 8563C 800EC18C 8E670030 */ lw $a3, 0x30($s3) -/* 85640 800EC190 46006006 */ mov.s $f0, $f12 -/* 85644 800EC194 46007086 */ mov.s $f2, $f14 -/* 85648 800EC198 E7A00020 */ swc1 $f0, 0x20($sp) -/* 8564C 800EC19C 0C00A720 */ jal atan2 -/* 85650 800EC1A0 E7A20024 */ swc1 $f2, 0x24($sp) -/* 85654 800EC1A4 27A40020 */ addiu $a0, $sp, 0x20 -/* 85658 800EC1A8 3C0640C0 */ lui $a2, 0x40c0 -/* 8565C 800EC1AC 44070000 */ mfc1 $a3, $f0 -/* 85660 800EC1B0 0C00A7E7 */ jal add_vec2D_polar -/* 85664 800EC1B4 27A50024 */ addiu $a1, $sp, 0x24 -/* 85668 800EC1B8 0803B07F */ j .L800EC1FC -/* 8566C 800EC1BC 00000000 */ nop -.L800EC1C0: -/* 85670 800EC1C0 24820001 */ addiu $v0, $a0, 1 -/* 85674 800EC1C4 ACA20000 */ sw $v0, ($a1) -/* 85678 800EC1C8 28420028 */ slti $v0, $v0, 0x28 -/* 8567C 800EC1CC 50400001 */ beql $v0, $zero, .L800EC1D4 -/* 85680 800EC1D0 ACA00000 */ sw $zero, ($a1) -.L800EC1D4: -/* 85684 800EC1D4 8CA20000 */ lw $v0, ($a1) -/* 85688 800EC1D8 3C038011 */ lui $v1, %hi(gPlayerMoveHistory) -/* 8568C 800EC1DC 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory) -/* 85690 800EC1E0 00021100 */ sll $v0, $v0, 4 -/* 85694 800EC1E4 00438021 */ addu $s0, $v0, $v1 -/* 85698 800EC1E8 C6000004 */ lwc1 $f0, 4($s0) -/* 8569C 800EC1EC C6140008 */ lwc1 $f20, 8($s0) -/* 856A0 800EC1F0 C602000C */ lwc1 $f2, 0xc($s0) -/* 856A4 800EC1F4 E7A00020 */ swc1 $f0, 0x20($sp) -/* 856A8 800EC1F8 E7A20024 */ swc1 $f2, 0x24($sp) -.L800EC1FC: -/* 856AC 800EC1FC C7A00020 */ lwc1 $f0, 0x20($sp) -/* 856B0 800EC200 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 856B4 800EC204 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 856B8 800EC208 3C0140C0 */ lui $at, 0x40c0 -/* 856BC 800EC20C 44811000 */ mtc1 $at, $f2 -/* 856C0 800EC210 E6200060 */ swc1 $f0, 0x60($s1) -/* 856C4 800EC214 44060000 */ mfc1 $a2, $f0 -/* 856C8 800EC218 C7A00024 */ lwc1 $f0, 0x24($sp) -/* 856CC 800EC21C E6200068 */ swc1 $f0, 0x68($s1) -/* 856D0 800EC220 44070000 */ mfc1 $a3, $f0 -/* 856D4 800EC224 3C014040 */ lui $at, 0x4040 -/* 856D8 800EC228 44810000 */ mtc1 $at, $f0 -/* 856DC 800EC22C E6340064 */ swc1 $f20, 0x64($s1) -/* 856E0 800EC230 A620008E */ sh $zero, 0x8e($s1) -/* 856E4 800EC234 E6220018 */ swc1 $f2, 0x18($s1) -/* 856E8 800EC238 0C00A7B5 */ jal dist2D -/* 856EC 800EC23C E6200014 */ swc1 $f0, 0x14($s1) -/* 856F0 800EC240 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 856F4 800EC244 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 856F8 800EC248 8E260060 */ lw $a2, 0x60($s1) -/* 856FC 800EC24C 8E270068 */ lw $a3, 0x68($s1) -/* 85700 800EC250 0C00A720 */ jal atan2 -/* 85704 800EC254 E6200010 */ swc1 $f0, 0x10($s1) -/* 85708 800EC258 E620000C */ swc1 $f0, 0xc($s1) -/* 8570C 800EC25C C6200010 */ lwc1 $f0, 0x10($s1) -/* 85710 800EC260 3C014049 */ lui $at, 0x4049 -/* 85714 800EC264 44811800 */ mtc1 $at, $f3 -/* 85718 800EC268 44801000 */ mtc1 $zero, $f2 -/* 8571C 800EC26C 46000021 */ cvt.d.s $f0, $f0 -/* 85720 800EC270 4620103C */ c.lt.d $f2, $f0 -/* 85724 800EC274 00000000 */ nop -/* 85728 800EC278 45000005 */ bc1f .L800EC290 -/* 8572C 800EC27C 00000000 */ nop -/* 85730 800EC280 3C014248 */ lui $at, 0x4248 -/* 85734 800EC284 44810000 */ mtc1 $at, $f0 -/* 85738 800EC288 00000000 */ nop -/* 8573C 800EC28C E6200010 */ swc1 $f0, 0x10($s1) -.L800EC290: -/* 85740 800EC290 C6220064 */ lwc1 $f2, 0x64($s1) -/* 85744 800EC294 C620003C */ lwc1 $f0, 0x3c($s1) -/* 85748 800EC298 C6240010 */ lwc1 $f4, 0x10($s1) -/* 8574C 800EC29C 46001081 */ sub.s $f2, $f2, $f0 -/* 85750 800EC2A0 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 85754 800EC2A4 C420CFC0 */ lwc1 $f0, %lo(wPartnerTetherDistance)($at) -/* 85758 800EC2A8 E7A40034 */ swc1 $f4, 0x34($sp) -/* 8575C 800EC2AC 4600203C */ c.lt.s $f4, $f0 -/* 85760 800EC2B0 00000000 */ nop -/* 85764 800EC2B4 45000010 */ bc1f .L800EC2F8 -/* 85768 800EC2B8 E7A2002C */ swc1 $f2, 0x2c($sp) -/* 8576C 800EC2BC 2642FFFE */ addiu $v0, $s2, -2 -/* 85770 800EC2C0 2C420002 */ sltiu $v0, $v0, 2 -/* 85774 800EC2C4 1440000C */ bnez $v0, .L800EC2F8 -/* 85778 800EC2C8 00000000 */ nop -/* 8577C 800EC2CC C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85780 800EC2D0 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85784 800EC2D4 AE20001C */ sw $zero, 0x1c($s1) -/* 85788 800EC2D8 8E660028 */ lw $a2, 0x28($s3) -/* 8578C 800EC2DC 0C00A720 */ jal atan2 -/* 85790 800EC2E0 8E670030 */ lw $a3, 0x30($s3) -/* 85794 800EC2E4 E620000C */ swc1 $f0, 0xc($s1) -.L800EC2E8: -/* 85798 800EC2E8 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 8579C 800EC2EC A420CFC8 */ sh $zero, %lo(D_8010CFC8)($at) -/* 857A0 800EC2F0 0803B4B9 */ j .L800ED2E4_86794 -/* 857A4 800EC2F4 00000000 */ nop -.L800EC2F8: -/* 857A8 800EC2F8 C6220018 */ lwc1 $f2, 0x18($s1) -/* 857AC 800EC2FC C7A00034 */ lwc1 $f0, 0x34($sp) -/* 857B0 800EC300 46020003 */ div.s $f0, $f0, $f2 -/* 857B4 800EC304 4600028D */ trunc.w.s $f10, $f0 -/* 857B8 800EC308 44025000 */ mfc1 $v0, $f10 -/* 857BC 800EC30C 00000000 */ nop -/* 857C0 800EC310 A622008E */ sh $v0, 0x8e($s1) -/* 857C4 800EC314 00021400 */ sll $v0, $v0, 0x10 -/* 857C8 800EC318 00021403 */ sra $v0, $v0, 0x10 -/* 857CC 800EC31C 2842000A */ slti $v0, $v0, 0xa -/* 857D0 800EC320 10400002 */ beqz $v0, .L800EC32C -/* 857D4 800EC324 2402000A */ addiu $v0, $zero, 0xa -/* 857D8 800EC328 A622008E */ sh $v0, 0x8e($s1) -.L800EC32C: -/* 857DC 800EC32C 8622008E */ lh $v0, 0x8e($s1) -/* 857E0 800EC330 C6220014 */ lwc1 $f2, 0x14($s1) -/* 857E4 800EC334 44823000 */ mtc1 $v0, $f6 -/* 857E8 800EC338 00000000 */ nop -/* 857EC 800EC33C 468031A0 */ cvt.s.w $f6, $f6 -/* 857F0 800EC340 46061082 */ mul.s $f2, $f2, $f6 -/* 857F4 800EC344 00000000 */ nop -/* 857F8 800EC348 46061082 */ mul.s $f2, $f2, $f6 -/* 857FC 800EC34C 00000000 */ nop -/* 85800 800EC350 3C013F00 */ lui $at, 0x3f00 -/* 85804 800EC354 44810000 */ mtc1 $at, $f0 -/* 85808 800EC358 00000000 */ nop -/* 8580C 800EC35C 46001082 */ mul.s $f2, $f2, $f0 -/* 85810 800EC360 00000000 */ nop -/* 85814 800EC364 C7A4002C */ lwc1 $f4, 0x2c($sp) -/* 85818 800EC368 C6200010 */ lwc1 $f0, 0x10($s1) -/* 8581C 800EC36C 46003206 */ mov.s $f8, $f6 -/* 85820 800EC370 46080003 */ div.s $f0, $f0, $f8 -/* 85824 800EC374 46022100 */ add.s $f4, $f4, $f2 -/* 85828 800EC378 E6200018 */ swc1 $f0, 0x18($s1) -/* 8582C 800EC37C 3C014034 */ lui $at, 0x4034 -/* 85830 800EC380 44811800 */ mtc1 $at, $f3 -/* 85834 800EC384 44801000 */ mtc1 $zero, $f2 -/* 85838 800EC388 46062103 */ div.s $f4, $f4, $f6 -/* 8583C 800EC38C 46002021 */ cvt.d.s $f0, $f4 -/* 85840 800EC390 4620103C */ c.lt.d $f2, $f0 -/* 85844 800EC394 00000000 */ nop -/* 85848 800EC398 45000005 */ bc1f .L800EC3B0 -/* 8584C 800EC39C E624001C */ swc1 $f4, 0x1c($s1) -/* 85850 800EC3A0 3C0141A0 */ lui $at, 0x41a0 -/* 85854 800EC3A4 44810000 */ mtc1 $at, $f0 -/* 85858 800EC3A8 00000000 */ nop -/* 8585C 800EC3AC E620001C */ swc1 $f0, 0x1c($s1) -.L800EC3B0: -/* 85860 800EC3B0 C620001C */ lwc1 $f0, 0x1c($s1) -/* 85864 800EC3B4 44801000 */ mtc1 $zero, $f2 -/* 85868 800EC3B8 44801800 */ mtc1 $zero, $f3 -/* 8586C 800EC3BC 46000021 */ cvt.d.s $f0, $f0 -/* 85870 800EC3C0 4622003C */ c.lt.d $f0, $f2 -/* 85874 800EC3C4 00000000 */ nop -/* 85878 800EC3C8 45030001 */ bc1tl .L800EC3D0 -/* 8587C 800EC3CC AE20001C */ sw $zero, 0x1c($s1) -.L800EC3D0: -/* 85880 800EC3D0 2642FFFE */ addiu $v0, $s2, -2 -/* 85884 800EC3D4 2C420002 */ sltiu $v0, $v0, 2 -/* 85888 800EC3D8 1440000B */ bnez $v0, .L800EC408 -/* 8588C 800EC3DC 00000000 */ nop -/* 85890 800EC3E0 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 85894 800EC3E4 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 85898 800EC3E8 000218C0 */ sll $v1, $v0, 3 -/* 8589C 800EC3EC 00621821 */ addu $v1, $v1, $v0 -/* 858A0 800EC3F0 00031880 */ sll $v1, $v1, 2 -/* 858A4 800EC3F4 3C028010 */ lui $v0, %hi(gPartnerAnimations+0x8) -/* 858A8 800EC3F8 00431021 */ addu $v0, $v0, $v1 -/* 858AC 800EC3FC 8C428350 */ lw $v0, %lo(gPartnerAnimations+0x8)($v0) -/* 858B0 800EC400 0803B10B */ j .L800EC42C -/* 858B4 800EC404 AE220028 */ sw $v0, 0x28($s1) -.L800EC408: -/* 858B8 800EC408 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 858BC 800EC40C 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 858C0 800EC410 000218C0 */ sll $v1, $v0, 3 -/* 858C4 800EC414 00621821 */ addu $v1, $v1, $v0 -/* 858C8 800EC418 00031880 */ sll $v1, $v1, 2 -/* 858CC 800EC41C 3C028010 */ lui $v0, %hi(gPartnerAnimations+0x20) -/* 858D0 800EC420 00431021 */ addu $v0, $v0, $v1 -/* 858D4 800EC424 8C428368 */ lw $v0, %lo(gPartnerAnimations+0x20)($v0) -/* 858D8 800EC428 AE220028 */ sw $v0, 0x28($s1) -.L800EC42C: -/* 858DC 800EC42C C6200038 */ lwc1 $f0, 0x38($s1) -/* 858E0 800EC430 C622003C */ lwc1 $f2, 0x3c($s1) -/* 858E4 800EC434 C6240040 */ lwc1 $f4, 0x40($s1) -/* 858E8 800EC438 8E230000 */ lw $v1, ($s1) -/* 858EC 800EC43C 24020002 */ addiu $v0, $zero, 2 -/* 858F0 800EC440 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 858F4 800EC444 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -/* 858F8 800EC448 34630800 */ ori $v1, $v1, 0x800 -/* 858FC 800EC44C E6200060 */ swc1 $f0, 0x60($s1) -/* 85900 800EC450 E6220064 */ swc1 $f2, 0x64($s1) -/* 85904 800EC454 E6240068 */ swc1 $f4, 0x68($s1) -/* 85908 800EC458 AE230000 */ sw $v1, ($s1) -.L800EC45C_8590C: -/* 8590C 800EC45C C620001C */ lwc1 $f0, 0x1c($s1) -/* 85910 800EC460 C6220014 */ lwc1 $f2, 0x14($s1) -/* 85914 800EC464 46020001 */ sub.s $f0, $f0, $f2 -/* 85918 800EC468 C622003C */ lwc1 $f2, 0x3c($s1) -/* 8591C 800EC46C 46001080 */ add.s $f2, $f2, $f0 -/* 85920 800EC470 4480A000 */ mtc1 $zero, $f20 -/* 85924 800EC474 00000000 */ nop -/* 85928 800EC478 4614003E */ c.le.s $f0, $f20 -/* 8592C 800EC47C E620001C */ swc1 $f0, 0x1c($s1) -/* 85930 800EC480 4500000A */ bc1f .L800EC4AC -/* 85934 800EC484 E622003C */ swc1 $f2, 0x3c($s1) -/* 85938 800EC488 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 8593C 800EC48C 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 85940 800EC490 000218C0 */ sll $v1, $v0, 3 -/* 85944 800EC494 00621821 */ addu $v1, $v1, $v0 -/* 85948 800EC498 00031880 */ sll $v1, $v1, 2 -/* 8594C 800EC49C 3C028010 */ lui $v0, %hi(gPartnerAnimations+0xC) -/* 85950 800EC4A0 00431021 */ addu $v0, $v0, $v1 -/* 85954 800EC4A4 8C428354 */ lw $v0, %lo(gPartnerAnimations+0xC)($v0) -/* 85958 800EC4A8 AE220028 */ sw $v0, 0x28($s1) -.L800EC4AC: -/* 8595C 800EC4AC C622003C */ lwc1 $f2, 0x3c($s1) -/* 85960 800EC4B0 3C01C4FA */ lui $at, 0xc4fa -/* 85964 800EC4B4 44810000 */ mtc1 $at, $f0 -/* 85968 800EC4B8 00000000 */ nop -/* 8596C 800EC4BC 4600103C */ c.lt.s $f2, $f0 -/* 85970 800EC4C0 00000000 */ nop -/* 85974 800EC4C4 4500001B */ bc1f .L800EC534 -/* 85978 800EC4C8 2404F7FF */ addiu $a0, $zero, -0x801 -/* 8597C 800EC4CC C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85980 800EC4D0 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 85984 800EC4D4 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 85988 800EC4D8 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 8598C 800EC4DC 000218C0 */ sll $v1, $v0, 3 -/* 85990 800EC4E0 00621821 */ addu $v1, $v1, $v0 -/* 85994 800EC4E4 00031880 */ sll $v1, $v1, 2 -/* 85998 800EC4E8 8E220000 */ lw $v0, ($s1) -/* 8599C 800EC4EC 3C018010 */ lui $at, %hi(gPartnerAnimations+0x10) -/* 859A0 800EC4F0 00230821 */ addu $at, $at, $v1 -/* 859A4 800EC4F4 8C238358 */ lw $v1, %lo(gPartnerAnimations+0x10)($at) -/* 859A8 800EC4F8 E634001C */ swc1 $f20, 0x1c($s1) -/* 859AC 800EC4FC 00441024 */ and $v0, $v0, $a0 -/* 859B0 800EC500 AE220000 */ sw $v0, ($s1) -/* 859B4 800EC504 AE230028 */ sw $v1, 0x28($s1) -/* 859B8 800EC508 8E660028 */ lw $a2, 0x28($s3) -/* 859BC 800EC50C 0C00A720 */ jal atan2 -/* 859C0 800EC510 8E670030 */ lw $a3, 0x30($s3) -/* 859C4 800EC514 E620000C */ swc1 $f0, 0xc($s1) -/* 859C8 800EC518 C6600028 */ lwc1 $f0, 0x28($s3) -/* 859CC 800EC51C E6200038 */ swc1 $f0, 0x38($s1) -/* 859D0 800EC520 C660002C */ lwc1 $f0, 0x2c($s3) -/* 859D4 800EC524 E620003C */ swc1 $f0, 0x3c($s1) -/* 859D8 800EC528 C6600030 */ lwc1 $f0, 0x30($s3) -/* 859DC 800EC52C 0803B47C */ j .L800ED1F0 -/* 859E0 800EC530 24020005 */ addiu $v0, $zero, 5 -.L800EC534: -/* 859E4 800EC534 C624001C */ lwc1 $f4, 0x1c($s1) -/* 859E8 800EC538 4614203E */ c.le.s $f4, $f20 -/* 859EC 800EC53C 00000000 */ nop -/* 859F0 800EC540 45000068 */ bc1f .L800EC6E4 -/* 859F4 800EC544 27A50028 */ addiu $a1, $sp, 0x28 -/* 859F8 800EC548 27A20034 */ addiu $v0, $sp, 0x34 -/* 859FC 800EC54C C6200038 */ lwc1 $f0, 0x38($s1) -/* 85A00 800EC550 3C014130 */ lui $at, 0x4130 -/* 85A04 800EC554 44811000 */ mtc1 $at, $f2 -/* 85A08 800EC558 27A6002C */ addiu $a2, $sp, 0x2c -/* 85A0C 800EC55C E7A00028 */ swc1 $f0, 0x28($sp) -/* 85A10 800EC560 46002005 */ abs.s $f0, $f4 -/* 85A14 800EC564 46020000 */ add.s $f0, $f0, $f2 -/* 85A18 800EC568 C622003C */ lwc1 $f2, 0x3c($s1) -/* 85A1C 800EC56C C6240040 */ lwc1 $f4, 0x40($s1) -/* 85A20 800EC570 46001080 */ add.s $f2, $f2, $f0 -/* 85A24 800EC574 E7A40030 */ swc1 $f4, 0x30($sp) -/* 85A28 800EC578 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85A2C 800EC57C E7A2002C */ swc1 $f2, 0x2c($sp) -/* 85A30 800EC580 AFA20010 */ sw $v0, 0x10($sp) -/* 85A34 800EC584 C620000C */ lwc1 $f0, 0xc($s1) -/* 85A38 800EC588 27A70030 */ addiu $a3, $sp, 0x30 -/* 85A3C 800EC58C E7A00014 */ swc1 $f0, 0x14($sp) -/* 85A40 800EC590 862200A6 */ lh $v0, 0xa6($s1) -/* 85A44 800EC594 26320038 */ addiu $s2, $s1, 0x38 -/* 85A48 800EC598 44820000 */ mtc1 $v0, $f0 -/* 85A4C 800EC59C 00000000 */ nop -/* 85A50 800EC5A0 46800020 */ cvt.s.w $f0, $f0 -/* 85A54 800EC5A4 E7A00018 */ swc1 $f0, 0x18($sp) -/* 85A58 800EC5A8 8E240080 */ lw $a0, 0x80($s1) -/* 85A5C 800EC5AC 0C0371DE */ jal npc_raycast_down_around -/* 85A60 800EC5B0 26340040 */ addiu $s4, $s1, 0x40 -/* 85A64 800EC5B4 1040004B */ beqz $v0, .L800EC6E4 -/* 85A68 800EC5B8 00000000 */ nop -/* 85A6C 800EC5BC C620001C */ lwc1 $f0, 0x1c($s1) -/* 85A70 800EC5C0 3C0141B0 */ lui $at, 0x41b0 -/* 85A74 800EC5C4 44811000 */ mtc1 $at, $f2 -/* 85A78 800EC5C8 46000005 */ abs.s $f0, $f0 -/* 85A7C 800EC5CC 46020000 */ add.s $f0, $f0, $f2 -/* 85A80 800EC5D0 C7A20034 */ lwc1 $f2, 0x34($sp) -/* 85A84 800EC5D4 4600103E */ c.le.s $f2, $f0 -/* 85A88 800EC5D8 00000000 */ nop -/* 85A8C 800EC5DC 45000041 */ bc1f .L800EC6E4 -/* 85A90 800EC5E0 00000000 */ nop -/* 85A94 800EC5E4 C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 85A98 800EC5E8 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 85A9C 800EC5EC 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 85AA0 800EC5F0 C7AE0030 */ lwc1 $f14, 0x30($sp) -/* 85AA4 800EC5F4 C7A0002C */ lwc1 $f0, 0x2c($sp) -/* 85AA8 800EC5F8 000310C0 */ sll $v0, $v1, 3 -/* 85AAC 800EC5FC 00431021 */ addu $v0, $v0, $v1 -/* 85AB0 800EC600 00021080 */ sll $v0, $v0, 2 -/* 85AB4 800EC604 3C048010 */ lui $a0, %hi(gPartnerAnimations+0x10) -/* 85AB8 800EC608 00822021 */ addu $a0, $a0, $v0 -/* 85ABC 800EC60C 8C848358 */ lw $a0, %lo(gPartnerAnimations+0x10)($a0) -/* 85AC0 800EC610 8E220000 */ lw $v0, ($s1) -/* 85AC4 800EC614 2403F7FF */ addiu $v1, $zero, -0x801 -/* 85AC8 800EC618 E634001C */ swc1 $f20, 0x1c($s1) -/* 85ACC 800EC61C E620003C */ swc1 $f0, 0x3c($s1) -/* 85AD0 800EC620 00431024 */ and $v0, $v0, $v1 -/* 85AD4 800EC624 AE220000 */ sw $v0, ($s1) -/* 85AD8 800EC628 AE240028 */ sw $a0, 0x28($s1) -/* 85ADC 800EC62C 8E660028 */ lw $a2, 0x28($s3) -/* 85AE0 800EC630 0C00A720 */ jal atan2 -/* 85AE4 800EC634 8E670030 */ lw $a3, 0x30($s3) -/* 85AE8 800EC638 0220202D */ daddu $a0, $s1, $zero -/* 85AEC 800EC63C 24050002 */ addiu $a1, $zero, 2 -/* 85AF0 800EC640 0C00F598 */ jal func_8003D660 -/* 85AF4 800EC644 E620000C */ swc1 $f0, 0xc($s1) -/* 85AF8 800EC648 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85AFC 800EC64C C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85B00 800EC650 8E260060 */ lw $a2, 0x60($s1) -/* 85B04 800EC654 8E270068 */ lw $a3, 0x68($s1) -/* 85B08 800EC658 3C108011 */ lui $s0, %hi(D_8010CFC8) -/* 85B0C 800EC65C 2610CFC8 */ addiu $s0, $s0, %lo(D_8010CFC8) -/* 85B10 800EC660 0C00A7B5 */ jal dist2D -/* 85B14 800EC664 A6000000 */ sh $zero, ($s0) -/* 85B18 800EC668 3C014014 */ lui $at, 0x4014 -/* 85B1C 800EC66C 44811800 */ mtc1 $at, $f3 -/* 85B20 800EC670 44801000 */ mtc1 $zero, $f2 -/* 85B24 800EC674 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85B28 800EC678 46000021 */ cvt.d.s $f0, $f0 -/* 85B2C 800EC67C 4622003C */ c.lt.d $f0, $f2 -/* 85B30 800EC680 00000000 */ nop -/* 85B34 800EC684 45000317 */ bc1f .L800ED2E4_86794 -/* 85B38 800EC688 00000000 */ nop -/* 85B3C 800EC68C C6600028 */ lwc1 $f0, 0x28($s3) -/* 85B40 800EC690 E6200038 */ swc1 $f0, 0x38($s1) -/* 85B44 800EC694 C660002C */ lwc1 $f0, 0x2c($s3) -/* 85B48 800EC698 E620003C */ swc1 $f0, 0x3c($s1) -/* 85B4C 800EC69C C6600030 */ lwc1 $f0, 0x30($s3) -/* 85B50 800EC6A0 E6200040 */ swc1 $f0, 0x40($s1) -/* 85B54 800EC6A4 C6AC006C */ lwc1 $f12, 0x6c($s5) -/* 85B58 800EC6A8 3C0142B4 */ lui $at, 0x42b4 -/* 85B5C 800EC6AC 44810000 */ mtc1 $at, $f0 -/* 85B60 800EC6B0 00000000 */ nop -/* 85B64 800EC6B4 46006300 */ add.s $f12, $f12, $f0 -/* 85B68 800EC6B8 C66000A8 */ lwc1 $f0, 0xa8($s3) -/* 85B6C 800EC6BC 0C00A6C9 */ jal clamp_angle -/* 85B70 800EC6C0 46006301 */ sub.s $f12, $f12, $f0 -/* 85B74 800EC6C4 0240202D */ daddu $a0, $s2, $zero -/* 85B78 800EC6C8 3C0640A0 */ lui $a2, 0x40a0 -/* 85B7C 800EC6CC 44070000 */ mfc1 $a3, $f0 -/* 85B80 800EC6D0 0C00A7E7 */ jal add_vec2D_polar -/* 85B84 800EC6D4 0280282D */ daddu $a1, $s4, $zero -/* 85B88 800EC6D8 24020005 */ addiu $v0, $zero, 5 -/* 85B8C 800EC6DC 0803B4B9 */ j .L800ED2E4_86794 -/* 85B90 800EC6E0 A6020000 */ sh $v0, ($s0) -.L800EC6E4: -/* 85B94 800EC6E4 8E250018 */ lw $a1, 0x18($s1) -/* 85B98 800EC6E8 8E26000C */ lw $a2, 0xc($s1) -/* 85B9C 800EC6EC 0C00EA95 */ jal npc_move_heading -/* 85BA0 800EC6F0 0220202D */ daddu $a0, $s1, $zero -/* 85BA4 800EC6F4 0803B4B9 */ j .L800ED2E4_86794 -/* 85BA8 800EC6F8 00000000 */ nop -.L800EC6FC_85BAC: -/* 85BAC 800EC6FC 3C038011 */ lui $v1, %hi(gPlayerMoveHistory) -/* 85BB0 800EC700 2463CD38 */ addiu $v1, $v1, %lo(gPlayerMoveHistory) -/* 85BB4 800EC704 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85BB8 800EC708 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85BBC 800EC70C 8E660028 */ lw $a2, 0x28($s3) -/* 85BC0 800EC710 8E670030 */ lw $a3, 0x30($s3) -/* 85BC4 800EC714 3C028011 */ lui $v0, %hi(D_8010CFBC) -/* 85BC8 800EC718 8C42CFBC */ lw $v0, %lo(D_8010CFBC)($v0) -/* 85BCC 800EC71C C620003C */ lwc1 $f0, 0x3c($s1) -/* 85BD0 800EC720 00021100 */ sll $v0, $v0, 4 -/* 85BD4 800EC724 00438021 */ addu $s0, $v0, $v1 -/* 85BD8 800EC728 46006106 */ mov.s $f4, $f12 -/* 85BDC 800EC72C C6060004 */ lwc1 $f6, 4($s0) -/* 85BE0 800EC730 C608000C */ lwc1 $f8, 0xc($s0) -/* 85BE4 800EC734 46007086 */ mov.s $f2, $f14 -/* 85BE8 800EC738 E7A40028 */ swc1 $f4, 0x28($sp) -/* 85BEC 800EC73C E7A0002C */ swc1 $f0, 0x2c($sp) -/* 85BF0 800EC740 E7A20030 */ swc1 $f2, 0x30($sp) -/* 85BF4 800EC744 E7A60020 */ swc1 $f6, 0x20($sp) -/* 85BF8 800EC748 0C00A7B5 */ jal dist2D -/* 85BFC 800EC74C E7A80024 */ swc1 $f8, 0x24($sp) -/* 85C00 800EC750 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 85C04 800EC754 C422CFC0 */ lwc1 $f2, %lo(wPartnerTetherDistance)($at) -/* 85C08 800EC758 4602003E */ c.le.s $f0, $f2 -/* 85C0C 800EC75C 00000000 */ nop -/* 85C10 800EC760 450000E3 */ bc1f .L800ECAF0 -/* 85C14 800EC764 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85C18 800EC768 3C048011 */ lui $a0, %hi(D_8010CFCA) -/* 85C1C 800EC76C 2484CFCA */ addiu $a0, $a0, %lo(D_8010CFCA) -/* 85C20 800EC770 84820000 */ lh $v0, ($a0) -/* 85C24 800EC774 14400019 */ bnez $v0, .L800EC7DC -/* 85C28 800EC778 00000000 */ nop -/* 85C2C 800EC77C 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 85C30 800EC780 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 85C34 800EC784 AE200018 */ sw $zero, 0x18($s1) -/* 85C38 800EC788 AE200014 */ sw $zero, 0x14($s1) -/* 85C3C 800EC78C 000310C0 */ sll $v0, $v1, 3 -/* 85C40 800EC790 00431021 */ addu $v0, $v0, $v1 -/* 85C44 800EC794 00021080 */ sll $v0, $v0, 2 -/* 85C48 800EC798 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 85C4C 800EC79C 00220821 */ addu $at, $at, $v0 -/* 85C50 800EC7A0 8C22835C */ lw $v0, %lo(gPartnerAnimations+0x14)($at) -/* 85C54 800EC7A4 AE220028 */ sw $v0, 0x28($s1) -/* 85C58 800EC7A8 826300B4 */ lb $v1, 0xb4($s3) -/* 85C5C 800EC7AC 2402000C */ addiu $v0, $zero, 0xc -/* 85C60 800EC7B0 50620001 */ beql $v1, $v0, .L800EC7B8 -/* 85C64 800EC7B4 A4800000 */ sh $zero, ($a0) -.L800EC7B8: -/* 85C68 800EC7B8 86240084 */ lh $a0, 0x84($s1) -/* 85C6C 800EC7BC 0C016F6A */ jal get_collider_flags -/* 85C70 800EC7C0 00000000 */ nop -/* 85C74 800EC7C4 2442FFFE */ addiu $v0, $v0, -2 -/* 85C78 800EC7C8 2C420002 */ sltiu $v0, $v0, 2 -/* 85C7C 800EC7CC 104000C8 */ beqz $v0, .L800ECAF0 -/* 85C80 800EC7D0 00000000 */ nop -/* 85C84 800EC7D4 0803B0BA */ j .L800EC2E8 -/* 85C88 800EC7D8 00000000 */ nop -.L800EC7DC: -/* 85C8C 800EC7DC C66200A8 */ lwc1 $f2, 0xa8($s3) -/* 85C90 800EC7E0 3C014334 */ lui $at, 0x4334 -/* 85C94 800EC7E4 44810000 */ mtc1 $at, $f0 -/* 85C98 800EC7E8 C6AC006C */ lwc1 $f12, 0x6c($s5) -/* 85C9C 800EC7EC 4600103C */ c.lt.s $f2, $f0 -/* 85CA0 800EC7F0 3C01C2B4 */ lui $at, 0xc2b4 -/* 85CA4 800EC7F4 44810000 */ mtc1 $at, $f0 -/* 85CA8 800EC7F8 45000003 */ bc1f .L800EC808 -/* 85CAC 800EC7FC 00000000 */ nop -/* 85CB0 800EC800 3C0142B4 */ lui $at, 0x42b4 -/* 85CB4 800EC804 44810000 */ mtc1 $at, $f0 -.L800EC808: -/* 85CB8 800EC808 0C00A6C9 */ jal clamp_angle -/* 85CBC 800EC80C 46006300 */ add.s $f12, $f12, $f0 -/* 85CC0 800EC810 44070000 */ mfc1 $a3, $f0 -/* 85CC4 800EC814 C6600028 */ lwc1 $f0, 0x28($s3) -/* 85CC8 800EC818 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 85CCC 800EC81C C424CFC0 */ lwc1 $f4, %lo(wPartnerTetherDistance)($at) -/* 85CD0 800EC820 26240060 */ addiu $a0, $s1, 0x60 -/* 85CD4 800EC824 E6200060 */ swc1 $f0, 0x60($s1) -/* 85CD8 800EC828 3C014120 */ lui $at, 0x4120 -/* 85CDC 800EC82C 44810000 */ mtc1 $at, $f0 -/* 85CE0 800EC830 C662002C */ lwc1 $f2, 0x2c($s3) -/* 85CE4 800EC834 46002101 */ sub.s $f4, $f4, $f0 -/* 85CE8 800EC838 E6220064 */ swc1 $f2, 0x64($s1) -/* 85CEC 800EC83C C6600030 */ lwc1 $f0, 0x30($s3) -/* 85CF0 800EC840 44062000 */ mfc1 $a2, $f4 -/* 85CF4 800EC844 26250068 */ addiu $a1, $s1, 0x68 -/* 85CF8 800EC848 0C00A7E7 */ jal add_vec2D_polar -/* 85CFC 800EC84C E6200068 */ swc1 $f0, 0x68($s1) -/* 85D00 800EC850 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85D04 800EC854 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85D08 800EC858 8E260060 */ lw $a2, 0x60($s1) -/* 85D0C 800EC85C 0C00A720 */ jal atan2 -/* 85D10 800EC860 8E270068 */ lw $a3, 0x68($s1) -/* 85D14 800EC864 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85D18 800EC868 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85D1C 800EC86C 8E260060 */ lw $a2, 0x60($s1) -/* 85D20 800EC870 8E270068 */ lw $a3, 0x68($s1) -/* 85D24 800EC874 0C00A7B5 */ jal dist2D -/* 85D28 800EC878 46000506 */ mov.s $f20, $f0 -/* 85D2C 800EC87C 3C014000 */ lui $at, 0x4000 -/* 85D30 800EC880 44811000 */ mtc1 $at, $f2 -/* 85D34 800EC884 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85D38 800EC888 4600103C */ c.lt.s $f2, $f0 -/* 85D3C 800EC88C 00000000 */ nop -/* 85D40 800EC890 45000022 */ bc1f .L800EC91C -/* 85D44 800EC894 E6220018 */ swc1 $f2, 0x18($s1) -/* 85D48 800EC898 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 85D4C 800EC89C 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 85D50 800EC8A0 3C048010 */ lui $a0, %hi(gPartnerAnimations) -/* 85D54 800EC8A4 24848348 */ addiu $a0, $a0, %lo(gPartnerAnimations) -/* 85D58 800EC8A8 E634000C */ swc1 $f20, 0xc($s1) -/* 85D5C 800EC8AC 000310C0 */ sll $v0, $v1, 3 -/* 85D60 800EC8B0 00431021 */ addu $v0, $v0, $v1 -/* 85D64 800EC8B4 00021080 */ sll $v0, $v0, 2 -/* 85D68 800EC8B8 00442021 */ addu $a0, $v0, $a0 -/* 85D6C 800EC8BC 8E220000 */ lw $v0, ($s1) -/* 85D70 800EC8C0 8C830018 */ lw $v1, 0x18($a0) -/* 85D74 800EC8C4 30424000 */ andi $v0, $v0, 0x4000 -/* 85D78 800EC8C8 14400004 */ bnez $v0, .L800EC8DC -/* 85D7C 800EC8CC AE230028 */ sw $v1, 0x28($s1) -/* 85D80 800EC8D0 3C018010 */ lui $at, %hi(D_800F803A) -/* 85D84 800EC8D4 0803B263 */ j .L800EC98C -/* 85D88 800EC8D8 A420803A */ sh $zero, %lo(D_800F803A)($at) -.L800EC8DC: -/* 85D8C 800EC8DC 3C038010 */ lui $v1, %hi(D_800F803A) -/* 85D90 800EC8E0 2463803A */ addiu $v1, $v1, %lo(D_800F803A) -/* 85D94 800EC8E4 94620000 */ lhu $v0, ($v1) -/* 85D98 800EC8E8 24420001 */ addiu $v0, $v0, 1 -/* 85D9C 800EC8EC A4620000 */ sh $v0, ($v1) -/* 85DA0 800EC8F0 00021400 */ sll $v0, $v0, 0x10 -/* 85DA4 800EC8F4 00021403 */ sra $v0, $v0, 0x10 -/* 85DA8 800EC8F8 2842000B */ slti $v0, $v0, 0xb -/* 85DAC 800EC8FC 14400023 */ bnez $v0, .L800EC98C -/* 85DB0 800EC900 00000000 */ nop -/* 85DB4 800EC904 C6740080 */ lwc1 $f20, 0x80($s3) -/* 85DB8 800EC908 AE200018 */ sw $zero, 0x18($s1) -/* 85DBC 800EC90C AE200014 */ sw $zero, 0x14($s1) -/* 85DC0 800EC910 E6340034 */ swc1 $f20, 0x34($s1) -/* 85DC4 800EC914 0803B258 */ j .L800EC960 -/* 85DC8 800EC918 8C820014 */ lw $v0, 0x14($a0) -.L800EC91C: -/* 85DCC 800EC91C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85DD0 800EC920 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85DD4 800EC924 8E660028 */ lw $a2, 0x28($s3) -/* 85DD8 800EC928 0C00A720 */ jal atan2 -/* 85DDC 800EC92C 8E670030 */ lw $a3, 0x30($s3) -/* 85DE0 800EC930 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 85DE4 800EC934 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 85DE8 800EC938 46000506 */ mov.s $f20, $f0 -/* 85DEC 800EC93C E634000C */ swc1 $f20, 0xc($s1) -/* 85DF0 800EC940 AE200018 */ sw $zero, 0x18($s1) -/* 85DF4 800EC944 AE200014 */ sw $zero, 0x14($s1) -/* 85DF8 800EC948 000310C0 */ sll $v0, $v1, 3 -/* 85DFC 800EC94C 00431021 */ addu $v0, $v0, $v1 -/* 85E00 800EC950 00021080 */ sll $v0, $v0, 2 -/* 85E04 800EC954 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 85E08 800EC958 00220821 */ addu $at, $at, $v0 -/* 85E0C 800EC95C 8C22835C */ lw $v0, %lo(gPartnerAnimations+0x14)($at) -.L800EC960: -/* 85E10 800EC960 3C048011 */ lui $a0, %hi(D_8010CFCA) -/* 85E14 800EC964 2484CFCA */ addiu $a0, $a0, %lo(D_8010CFCA) -/* 85E18 800EC968 AE220028 */ sw $v0, 0x28($s1) -/* 85E1C 800EC96C 84830000 */ lh $v1, ($a0) -/* 85E20 800EC970 24020002 */ addiu $v0, $zero, 2 -/* 85E24 800EC974 10620004 */ beq $v1, $v0, .L800EC988 -/* 85E28 800EC978 2402000C */ addiu $v0, $zero, 0xc -/* 85E2C 800EC97C 826300B4 */ lb $v1, 0xb4($s3) -/* 85E30 800EC980 14620002 */ bne $v1, $v0, .L800EC98C -/* 85E34 800EC984 00000000 */ nop -.L800EC988: -/* 85E38 800EC988 A4800000 */ sh $zero, ($a0) -.L800EC98C: -/* 85E3C 800EC98C 8E250018 */ lw $a1, 0x18($s1) -/* 85E40 800EC990 4406A000 */ mfc1 $a2, $f20 -/* 85E44 800EC994 0220202D */ daddu $a0, $s1, $zero -/* 85E48 800EC998 0C00EA95 */ jal npc_move_heading -/* 85E4C 800EC99C E634000C */ swc1 $f20, 0xc($s1) -/* 85E50 800EC9A0 C6200018 */ lwc1 $f0, 0x18($s1) -/* 85E54 800EC9A4 3C014010 */ lui $at, 0x4010 -/* 85E58 800EC9A8 44811800 */ mtc1 $at, $f3 -/* 85E5C 800EC9AC 44801000 */ mtc1 $zero, $f2 -/* 85E60 800EC9B0 46000021 */ cvt.d.s $f0, $f0 -/* 85E64 800EC9B4 4622003C */ c.lt.d $f0, $f2 -/* 85E68 800EC9B8 00000000 */ nop -/* 85E6C 800EC9BC 45000002 */ bc1f .L800EC9C8 -/* 85E70 800EC9C0 24050001 */ addiu $a1, $zero, 1 -/* 85E74 800EC9C4 0000282D */ daddu $a1, $zero, $zero -.L800EC9C8: -/* 85E78 800EC9C8 0C00F598 */ jal func_8003D660 -/* 85E7C 800EC9CC 0220202D */ daddu $a0, $s1, $zero -/* 85E80 800EC9D0 862200A8 */ lh $v0, 0xa8($s1) -/* 85E84 800EC9D4 3C01447A */ lui $at, 0x447a -/* 85E88 800EC9D8 44810000 */ mtc1 $at, $f0 -/* 85E8C 800EC9DC 44822000 */ mtc1 $v0, $f4 -/* 85E90 800EC9E0 00000000 */ nop -/* 85E94 800EC9E4 46802120 */ cvt.s.w $f4, $f4 -/* 85E98 800EC9E8 27A20034 */ addiu $v0, $sp, 0x34 -/* 85E9C 800EC9EC E7A00034 */ swc1 $f0, 0x34($sp) -/* 85EA0 800EC9F0 C6260038 */ lwc1 $f6, 0x38($s1) -/* 85EA4 800EC9F4 C620003C */ lwc1 $f0, 0x3c($s1) -/* 85EA8 800EC9F8 C6220040 */ lwc1 $f2, 0x40($s1) -/* 85EAC 800EC9FC 46040000 */ add.s $f0, $f0, $f4 -/* 85EB0 800ECA00 E7A60028 */ swc1 $f6, 0x28($sp) -/* 85EB4 800ECA04 E7A20030 */ swc1 $f2, 0x30($sp) -/* 85EB8 800ECA08 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 85EBC 800ECA0C AFA20010 */ sw $v0, 0x10($sp) -/* 85EC0 800ECA10 C620000C */ lwc1 $f0, 0xc($s1) -/* 85EC4 800ECA14 27A50028 */ addiu $a1, $sp, 0x28 -/* 85EC8 800ECA18 E7A00014 */ swc1 $f0, 0x14($sp) -/* 85ECC 800ECA1C 862200A6 */ lh $v0, 0xa6($s1) -/* 85ED0 800ECA20 27A6002C */ addiu $a2, $sp, 0x2c -/* 85ED4 800ECA24 44820000 */ mtc1 $v0, $f0 -/* 85ED8 800ECA28 00000000 */ nop -/* 85EDC 800ECA2C 46800020 */ cvt.s.w $f0, $f0 -/* 85EE0 800ECA30 E7A00018 */ swc1 $f0, 0x18($sp) -/* 85EE4 800ECA34 8E240080 */ lw $a0, 0x80($s1) -/* 85EE8 800ECA38 0C0371DE */ jal npc_raycast_down_around -/* 85EEC 800ECA3C 27A70030 */ addiu $a3, $sp, 0x30 -/* 85EF0 800ECA40 10400228 */ beqz $v0, .L800ED2E4_86794 -/* 85EF4 800ECA44 00000000 */ nop -/* 85EF8 800ECA48 3C108011 */ lui $s0, %hi(D_8010C978) -/* 85EFC 800ECA4C 2610C978 */ addiu $s0, $s0, %lo(D_8010C978) -/* 85F00 800ECA50 0C016F6A */ jal get_collider_flags -/* 85F04 800ECA54 8E040000 */ lw $a0, ($s0) -/* 85F08 800ECA58 2442FFFE */ addiu $v0, $v0, -2 -/* 85F0C 800ECA5C 2C420002 */ sltiu $v0, $v0, 2 -/* 85F10 800ECA60 10400020 */ beqz $v0, .L800ECAE4 -/* 85F14 800ECA64 00000000 */ nop -/* 85F18 800ECA68 3C014334 */ lui $at, 0x4334 -/* 85F1C 800ECA6C 44816000 */ mtc1 $at, $f12 -/* 85F20 800ECA70 0C00A6C9 */ jal clamp_angle -/* 85F24 800ECA74 460CA300 */ add.s $f12, $f20, $f12 -/* 85F28 800ECA78 8E250018 */ lw $a1, 0x18($s1) -/* 85F2C 800ECA7C 44060000 */ mfc1 $a2, $f0 -/* 85F30 800ECA80 0220202D */ daddu $a0, $s1, $zero -/* 85F34 800ECA84 0C00EA95 */ jal npc_move_heading -/* 85F38 800ECA88 AE26000C */ sw $a2, 0xc($s1) -/* 85F3C 800ECA8C 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 85F40 800ECA90 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 85F44 800ECA94 AE200018 */ sw $zero, 0x18($s1) -/* 85F48 800ECA98 AE200014 */ sw $zero, 0x14($s1) -/* 85F4C 800ECA9C 000310C0 */ sll $v0, $v1, 3 -/* 85F50 800ECAA0 00431021 */ addu $v0, $v0, $v1 -/* 85F54 800ECAA4 00021080 */ sll $v0, $v0, 2 -/* 85F58 800ECAA8 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 85F5C 800ECAAC 00220821 */ addu $at, $at, $v0 -/* 85F60 800ECAB0 8C22835C */ lw $v0, %lo(gPartnerAnimations+0x14)($at) -/* 85F64 800ECAB4 3C048011 */ lui $a0, %hi(D_8010CFCA) -/* 85F68 800ECAB8 2484CFCA */ addiu $a0, $a0, %lo(D_8010CFCA) -/* 85F6C 800ECABC AE220028 */ sw $v0, 0x28($s1) -/* 85F70 800ECAC0 84830000 */ lh $v1, ($a0) -/* 85F74 800ECAC4 24020002 */ addiu $v0, $zero, 2 -/* 85F78 800ECAC8 10620177 */ beq $v1, $v0, .L800ED0A8 -/* 85F7C 800ECACC 2402000C */ addiu $v0, $zero, 0xc -/* 85F80 800ECAD0 826300B4 */ lb $v1, 0xb4($s3) -/* 85F84 800ECAD4 14620203 */ bne $v1, $v0, .L800ED2E4_86794 -/* 85F88 800ECAD8 00000000 */ nop -/* 85F8C 800ECADC 0803B4B9 */ j .L800ED2E4_86794 -/* 85F90 800ECAE0 A4800000 */ sh $zero, ($a0) -.L800ECAE4: -/* 85F94 800ECAE4 8E040000 */ lw $a0, ($s0) -/* 85F98 800ECAE8 0803B2C9 */ j .L800ECB24 -/* 85F9C 800ECAEC 00000000 */ nop -.L800ECAF0: -/* 85FA0 800ECAF0 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 85FA4 800ECAF4 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 85FA8 800ECAF8 8E660028 */ lw $a2, 0x28($s3) -/* 85FAC 800ECAFC 0C00A7B5 */ jal dist2D -/* 85FB0 800ECB00 8E670030 */ lw $a3, 0x30($s3) -/* 85FB4 800ECB04 3C018011 */ lui $at, %hi(wPartnerTetherDistance) -/* 85FB8 800ECB08 C422CFC0 */ lwc1 $f2, %lo(wPartnerTetherDistance)($at) -/* 85FBC 800ECB0C 4602003E */ c.le.s $f0, $f2 -/* 85FC0 800ECB10 00000000 */ nop -/* 85FC4 800ECB14 4500000B */ bc1f .L800ECB44 -/* 85FC8 800ECB18 E7A00034 */ swc1 $f0, 0x34($sp) -/* 85FCC 800ECB1C 3C048011 */ lui $a0, %hi(D_8010C978) -/* 85FD0 800ECB20 8C84C978 */ lw $a0, %lo(D_8010C978)($a0) -.L800ECB24: -/* 85FD4 800ECB24 0C03A92C */ jal func_800EA4B0 -/* 85FD8 800ECB28 00000000 */ nop -/* 85FDC 800ECB2C 144001ED */ bnez $v0, .L800ED2E4_86794 -/* 85FE0 800ECB30 24020002 */ addiu $v0, $zero, 2 -/* 85FE4 800ECB34 3C018011 */ lui $at, %hi(D_8010CFCA) -/* 85FE8 800ECB38 A422CFCA */ sh $v0, %lo(D_8010CFCA)($at) -/* 85FEC 800ECB3C 0803B4B9 */ j .L800ED2E4_86794 -/* 85FF0 800ECB40 00000000 */ nop -.L800ECB44: -/* 85FF4 800ECB44 3C0142B4 */ lui $at, 0x42b4 -/* 85FF8 800ECB48 4481B000 */ mtc1 $at, $f22 -/* 85FFC 800ECB4C 3C128011 */ lui $s2, %hi(D_8010CFBC) -/* 86000 800ECB50 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC) -/* 86004 800ECB54 3C148011 */ lui $s4, %hi(gPlayerMoveHistory) -/* 86008 800ECB58 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory) -.L800ECB5C: -/* 8600C 800ECB5C 82020000 */ lb $v0, ($s0) -/* 86010 800ECB60 14400028 */ bnez $v0, .L800ECC04 -/* 86014 800ECB64 00000000 */ nop -/* 86018 800ECB68 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 8601C 800ECB6C C62E0040 */ lwc1 $f14, 0x40($s1) -/* 86020 800ECB70 8FA60020 */ lw $a2, 0x20($sp) -/* 86024 800ECB74 0C00A720 */ jal atan2 -/* 86028 800ECB78 8FA70024 */ lw $a3, 0x24($sp) -/* 8602C 800ECB7C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 86030 800ECB80 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 86034 800ECB84 8E660028 */ lw $a2, 0x28($s3) -/* 86038 800ECB88 8E670030 */ lw $a3, 0x30($s3) -/* 8603C 800ECB8C 0C00A720 */ jal atan2 -/* 86040 800ECB90 46000506 */ mov.s $f20, $f0 -/* 86044 800ECB94 4600A306 */ mov.s $f12, $f20 -/* 86048 800ECB98 0C00A70A */ jal get_clamped_angle_diff -/* 8604C 800ECB9C 46000386 */ mov.s $f14, $f0 -/* 86050 800ECBA0 46000005 */ abs.s $f0, $f0 -/* 86054 800ECBA4 4616003C */ c.lt.s $f0, $f22 -/* 86058 800ECBA8 00000000 */ nop -/* 8605C 800ECBAC 45010012 */ bc1t .L800ECBF8 -/* 86060 800ECBB0 00000000 */ nop -/* 86064 800ECBB4 8E430000 */ lw $v1, ($s2) -/* 86068 800ECBB8 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex) -/* 8606C 800ECBBC 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0) -/* 86070 800ECBC0 1062000D */ beq $v1, $v0, .L800ECBF8 -/* 86074 800ECBC4 24620001 */ addiu $v0, $v1, 1 -/* 86078 800ECBC8 AE420000 */ sw $v0, ($s2) -/* 8607C 800ECBCC 28420028 */ slti $v0, $v0, 0x28 -/* 86080 800ECBD0 50400001 */ beql $v0, $zero, .L800ECBD8 -/* 86084 800ECBD4 AE400000 */ sw $zero, ($s2) -.L800ECBD8: -/* 86088 800ECBD8 8E420000 */ lw $v0, ($s2) -/* 8608C 800ECBDC 00021100 */ sll $v0, $v0, 4 -/* 86090 800ECBE0 00548021 */ addu $s0, $v0, $s4 -/* 86094 800ECBE4 C6000004 */ lwc1 $f0, 4($s0) -/* 86098 800ECBE8 C602000C */ lwc1 $f2, 0xc($s0) -/* 8609C 800ECBEC E7A00020 */ swc1 $f0, 0x20($sp) -/* 860A0 800ECBF0 0803B2D7 */ j .L800ECB5C -/* 860A4 800ECBF4 E7A20024 */ swc1 $f2, 0x24($sp) -.L800ECBF8: -/* 860A8 800ECBF8 82020000 */ lb $v0, ($s0) -/* 860AC 800ECBFC 1040FDBA */ beqz $v0, .L800EC2E8 -/* 860B0 800ECC00 00000000 */ nop -.L800ECC04: -/* 860B4 800ECC04 3C0142B4 */ lui $at, 0x42b4 -/* 860B8 800ECC08 4481B000 */ mtc1 $at, $f22 -/* 860BC 800ECC0C 3C128011 */ lui $s2, %hi(D_8010CFBC) -/* 860C0 800ECC10 2652CFBC */ addiu $s2, $s2, %lo(D_8010CFBC) -/* 860C4 800ECC14 3C148011 */ lui $s4, %hi(gPlayerMoveHistory) -/* 860C8 800ECC18 2694CD38 */ addiu $s4, $s4, %lo(gPlayerMoveHistory) -.L800ECC1C: -/* 860CC 800ECC1C 82020000 */ lb $v0, ($s0) -/* 860D0 800ECC20 104001AE */ beqz $v0, .L800ED2DC -/* 860D4 800ECC24 24020001 */ addiu $v0, $zero, 1 -/* 860D8 800ECC28 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 860DC 800ECC2C C62E0040 */ lwc1 $f14, 0x40($s1) -/* 860E0 800ECC30 8FA60020 */ lw $a2, 0x20($sp) -/* 860E4 800ECC34 0C00A720 */ jal atan2 -/* 860E8 800ECC38 8FA70024 */ lw $a3, 0x24($sp) -/* 860EC 800ECC3C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 860F0 800ECC40 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 860F4 800ECC44 8E660028 */ lw $a2, 0x28($s3) -/* 860F8 800ECC48 8E670030 */ lw $a3, 0x30($s3) -/* 860FC 800ECC4C 0C00A720 */ jal atan2 -/* 86100 800ECC50 46000506 */ mov.s $f20, $f0 -/* 86104 800ECC54 4600A306 */ mov.s $f12, $f20 -/* 86108 800ECC58 0C00A70A */ jal get_clamped_angle_diff -/* 8610C 800ECC5C 46000386 */ mov.s $f14, $f0 -/* 86110 800ECC60 46000005 */ abs.s $f0, $f0 -/* 86114 800ECC64 4616003C */ c.lt.s $f0, $f22 -/* 86118 800ECC68 00000000 */ nop -/* 8611C 800ECC6C 4501019B */ bc1t .L800ED2DC -/* 86120 800ECC70 24020001 */ addiu $v0, $zero, 1 -/* 86124 800ECC74 8E430000 */ lw $v1, ($s2) -/* 86128 800ECC78 3C028011 */ lui $v0, %hi(gPlayerMoveHistoryIndex) -/* 8612C 800ECC7C 8C42CFB8 */ lw $v0, %lo(gPlayerMoveHistoryIndex)($v0) -/* 86130 800ECC80 1062000D */ beq $v1, $v0, .L800ECCB8 -/* 86134 800ECC84 24620001 */ addiu $v0, $v1, 1 -/* 86138 800ECC88 AE420000 */ sw $v0, ($s2) -/* 8613C 800ECC8C 28420028 */ slti $v0, $v0, 0x28 -/* 86140 800ECC90 50400001 */ beql $v0, $zero, .L800ECC98 -/* 86144 800ECC94 AE400000 */ sw $zero, ($s2) -.L800ECC98: -/* 86148 800ECC98 8E420000 */ lw $v0, ($s2) -/* 8614C 800ECC9C 00021100 */ sll $v0, $v0, 4 -/* 86150 800ECCA0 00548021 */ addu $s0, $v0, $s4 -/* 86154 800ECCA4 C6000004 */ lwc1 $f0, 4($s0) -/* 86158 800ECCA8 C602000C */ lwc1 $f2, 0xc($s0) -/* 8615C 800ECCAC E7A00020 */ swc1 $f0, 0x20($sp) -/* 86160 800ECCB0 0803B307 */ j .L800ECC1C -/* 86164 800ECCB4 E7A20024 */ swc1 $f2, 0x24($sp) -.L800ECCB8: -/* 86168 800ECCB8 0803B4B7 */ j .L800ED2DC -/* 8616C 800ECCBC 24020001 */ addiu $v0, $zero, 1 -.L800ECCC0_86170: -/* 86170 800ECCC0 3C048011 */ lui $a0, %hi(D_8010CFCE) -/* 86174 800ECCC4 2484CFCE */ addiu $a0, $a0, %lo(D_8010CFCE) -/* 86178 800ECCC8 84830000 */ lh $v1, ($a0) -/* 8617C 800ECCCC 24020001 */ addiu $v0, $zero, 1 -/* 86180 800ECCD0 10620050 */ beq $v1, $v0, .L800ECE14 -/* 86184 800ECCD4 28620002 */ slti $v0, $v1, 2 -/* 86188 800ECCD8 50400005 */ beql $v0, $zero, .L800ECCF0 -/* 8618C 800ECCDC 24020002 */ addiu $v0, $zero, 2 -/* 86190 800ECCE0 10600007 */ beqz $v1, .L800ECD00 -/* 86194 800ECCE4 00000000 */ nop -/* 86198 800ECCE8 0803B4B9 */ j .L800ED2E4_86794 -/* 8619C 800ECCEC 00000000 */ nop -.L800ECCF0: -/* 861A0 800ECCF0 106200E2 */ beq $v1, $v0, .L800ED07C -/* 861A4 800ECCF4 00000000 */ nop -/* 861A8 800ECCF8 0803B4B9 */ j .L800ED2E4_86794 -/* 861AC 800ECCFC 00000000 */ nop -.L800ECD00: -/* 861B0 800ECD00 0C0394D2 */ jal func_800E5348 -/* 861B4 800ECD04 00000000 */ nop -/* 861B8 800ECD08 3C014334 */ lui $at, 0x4334 -/* 861BC 800ECD0C 44816000 */ mtc1 $at, $f12 -/* 861C0 800ECD10 0C00A6C9 */ jal clamp_angle -/* 861C4 800ECD14 460C0300 */ add.s $f12, $f0, $f12 -/* 861C8 800ECD18 C6620028 */ lwc1 $f2, 0x28($s3) -/* 861CC 800ECD1C E6220060 */ swc1 $f2, 0x60($s1) -/* 861D0 800ECD20 C662002C */ lwc1 $f2, 0x2c($s3) -/* 861D4 800ECD24 E6220064 */ swc1 $f2, 0x64($s1) -/* 861D8 800ECD28 C6620030 */ lwc1 $f2, 0x30($s3) -/* 861DC 800ECD2C 26240060 */ addiu $a0, $s1, 0x60 -/* 861E0 800ECD30 E6220068 */ swc1 $f2, 0x68($s1) -/* 861E4 800ECD34 866200B2 */ lh $v0, 0xb2($s3) -/* 861E8 800ECD38 44070000 */ mfc1 $a3, $f0 -/* 861EC 800ECD3C 44825000 */ mtc1 $v0, $f10 -/* 861F0 800ECD40 00000000 */ nop -/* 861F4 800ECD44 468052A0 */ cvt.s.w $f10, $f10 -/* 861F8 800ECD48 44065000 */ mfc1 $a2, $f10 -/* 861FC 800ECD4C 0C00A7E7 */ jal add_vec2D_polar -/* 86200 800ECD50 26250068 */ addiu $a1, $s1, 0x68 -/* 86204 800ECD54 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 86208 800ECD58 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 8620C 800ECD5C 8E260060 */ lw $a2, 0x60($s1) -/* 86210 800ECD60 0C00A7B5 */ jal dist2D -/* 86214 800ECD64 8E270068 */ lw $a3, 0x68($s1) -/* 86218 800ECD68 3C018010 */ lui $at, %hi(wPartnerMoveTime) -/* 8621C 800ECD6C C422802C */ lwc1 $f2, %lo(wPartnerMoveTime)($at) -/* 86220 800ECD70 468010A0 */ cvt.s.w $f2, $f2 -/* 86224 800ECD74 E7A00034 */ swc1 $f0, 0x34($sp) -/* 86228 800ECD78 46020003 */ div.s $f0, $f0, $f2 -/* 8622C 800ECD7C 3C018010 */ lui $at, %hi(wPartnerMoveSpeed) -/* 86230 800ECD80 E4208030 */ swc1 $f0, %lo(wPartnerMoveSpeed)($at) -/* 86234 800ECD84 E6200018 */ swc1 $f0, 0x18($s1) -/* 86238 800ECD88 46000021 */ cvt.d.s $f0, $f0 -/* 8623C 800ECD8C 26240028 */ addiu $a0, $s1, 0x28 -/* 86240 800ECD90 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 86244 800ECD94 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 86248 800ECD98 3C014010 */ lui $at, 0x4010 -/* 8624C 800ECD9C 44811800 */ mtc1 $at, $f3 -/* 86250 800ECDA0 44801000 */ mtc1 $zero, $f2 -/* 86254 800ECDA4 000310C0 */ sll $v0, $v1, 3 -/* 86258 800ECDA8 00431021 */ addu $v0, $v0, $v1 -/* 8625C 800ECDAC 4620103E */ c.le.d $f2, $f0 -/* 86260 800ECDB0 00000000 */ nop -/* 86264 800ECDB4 45000003 */ bc1f .L800ECDC4 -/* 86268 800ECDB8 00021080 */ sll $v0, $v0, 2 -/* 8626C 800ECDBC 0803B372 */ j .L800ECDC8 -/* 86270 800ECDC0 24430018 */ addiu $v1, $v0, 0x18 -.L800ECDC4: -/* 86274 800ECDC4 24430004 */ addiu $v1, $v0, 4 -.L800ECDC8: -/* 86278 800ECDC8 3C028010 */ lui $v0, %hi(gPartnerAnimations) -/* 8627C 800ECDCC 24428348 */ addiu $v0, $v0, %lo(gPartnerAnimations) -/* 86280 800ECDD0 00431021 */ addu $v0, $v0, $v1 -/* 86284 800ECDD4 8C420000 */ lw $v0, ($v0) -/* 86288 800ECDD8 AC820000 */ sw $v0, ($a0) -/* 8628C 800ECDDC C62C0038 */ lwc1 $f12, 0x38($s1) -/* 86290 800ECDE0 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 86294 800ECDE4 8E260060 */ lw $a2, 0x60($s1) -/* 86298 800ECDE8 0C00A720 */ jal atan2 -/* 8629C 800ECDEC 8E270068 */ lw $a3, 0x68($s1) -/* 862A0 800ECDF0 3C038011 */ lui $v1, %hi(D_8010CFCE) -/* 862A4 800ECDF4 2463CFCE */ addiu $v1, $v1, %lo(D_8010CFCE) -/* 862A8 800ECDF8 94620000 */ lhu $v0, ($v1) -/* 862AC 800ECDFC 46000506 */ mov.s $f20, $f0 -/* 862B0 800ECE00 3C018010 */ lui $at, %hi(D_800F8034) -/* 862B4 800ECE04 E4348034 */ swc1 $f20, %lo(D_800F8034)($at) -/* 862B8 800ECE08 E634000C */ swc1 $f20, 0xc($s1) -/* 862BC 800ECE0C 24420001 */ addiu $v0, $v0, 1 -/* 862C0 800ECE10 A4620000 */ sh $v0, ($v1) -.L800ECE14: -/* 862C4 800ECE14 3C108010 */ lui $s0, %hi(wPartnerMoveTime) -/* 862C8 800ECE18 2610802C */ addiu $s0, $s0, %lo(wPartnerMoveTime) -/* 862CC 800ECE1C 8E020000 */ lw $v0, ($s0) -/* 862D0 800ECE20 10400079 */ beqz $v0, .L800ED008 -/* 862D4 800ECE24 2442FFFF */ addiu $v0, $v0, -1 -/* 862D8 800ECE28 C6220014 */ lwc1 $f2, 0x14($s1) -/* 862DC 800ECE2C 44803000 */ mtc1 $zero, $f6 -/* 862E0 800ECE30 00000000 */ nop -/* 862E4 800ECE34 46061032 */ c.eq.s $f2, $f6 -/* 862E8 800ECE38 00000000 */ nop -/* 862EC 800ECE3C 4501005A */ bc1t .L800ECFA8 -/* 862F0 800ECE40 AE020000 */ sw $v0, ($s0) -/* 862F4 800ECE44 C620001C */ lwc1 $f0, 0x1c($s1) -/* 862F8 800ECE48 46020001 */ sub.s $f0, $f0, $f2 -/* 862FC 800ECE4C C622003C */ lwc1 $f2, 0x3c($s1) -/* 86300 800ECE50 46001080 */ add.s $f2, $f2, $f0 -/* 86304 800ECE54 E620001C */ swc1 $f0, 0x1c($s1) -/* 86308 800ECE58 4606003E */ c.le.s $f0, $f6 -/* 8630C 800ECE5C 00000000 */ nop -/* 86310 800ECE60 4500000A */ bc1f .L800ECE8C -/* 86314 800ECE64 E622003C */ swc1 $f2, 0x3c($s1) -/* 86318 800ECE68 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 8631C 800ECE6C 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 86320 800ECE70 000218C0 */ sll $v1, $v0, 3 -/* 86324 800ECE74 00621821 */ addu $v1, $v1, $v0 -/* 86328 800ECE78 00031880 */ sll $v1, $v1, 2 -/* 8632C 800ECE7C 3C028010 */ lui $v0, %hi(gPartnerAnimations+0xC) -/* 86330 800ECE80 00431021 */ addu $v0, $v0, $v1 -/* 86334 800ECE84 8C428354 */ lw $v0, %lo(gPartnerAnimations+0xC)($v0) -/* 86338 800ECE88 AE220028 */ sw $v0, 0x28($s1) -.L800ECE8C: -/* 8633C 800ECE8C C624001C */ lwc1 $f4, 0x1c($s1) -/* 86340 800ECE90 4606203E */ c.le.s $f4, $f6 -/* 86344 800ECE94 00000000 */ nop -/* 86348 800ECE98 45000043 */ bc1f .L800ECFA8 -/* 8634C 800ECE9C 27A20034 */ addiu $v0, $sp, 0x34 -/* 86350 800ECEA0 C6200038 */ lwc1 $f0, 0x38($s1) -/* 86354 800ECEA4 3C014130 */ lui $at, 0x4130 -/* 86358 800ECEA8 44811000 */ mtc1 $at, $f2 -/* 8635C 800ECEAC E7A00028 */ swc1 $f0, 0x28($sp) -/* 86360 800ECEB0 46002005 */ abs.s $f0, $f4 -/* 86364 800ECEB4 46020000 */ add.s $f0, $f0, $f2 -/* 86368 800ECEB8 C622003C */ lwc1 $f2, 0x3c($s1) -/* 8636C 800ECEBC C6240040 */ lwc1 $f4, 0x40($s1) -/* 86370 800ECEC0 46001080 */ add.s $f2, $f2, $f0 -/* 86374 800ECEC4 E7A40030 */ swc1 $f4, 0x30($sp) -/* 86378 800ECEC8 E7A00034 */ swc1 $f0, 0x34($sp) -/* 8637C 800ECECC E7A2002C */ swc1 $f2, 0x2c($sp) -/* 86380 800ECED0 AFA20010 */ sw $v0, 0x10($sp) -/* 86384 800ECED4 C620000C */ lwc1 $f0, 0xc($s1) -/* 86388 800ECED8 27A50028 */ addiu $a1, $sp, 0x28 -/* 8638C 800ECEDC E7A00014 */ swc1 $f0, 0x14($sp) -/* 86390 800ECEE0 862200A6 */ lh $v0, 0xa6($s1) -/* 86394 800ECEE4 27A6002C */ addiu $a2, $sp, 0x2c -/* 86398 800ECEE8 44820000 */ mtc1 $v0, $f0 -/* 8639C 800ECEEC 00000000 */ nop -/* 863A0 800ECEF0 46800020 */ cvt.s.w $f0, $f0 -/* 863A4 800ECEF4 E7A00018 */ swc1 $f0, 0x18($sp) -/* 863A8 800ECEF8 8E240080 */ lw $a0, 0x80($s1) -/* 863AC 800ECEFC 0C0371DE */ jal npc_raycast_down_around -/* 863B0 800ECF00 27A70030 */ addiu $a3, $sp, 0x30 -/* 863B4 800ECF04 10400028 */ beqz $v0, .L800ECFA8 -/* 863B8 800ECF08 00000000 */ nop -/* 863BC 800ECF0C C620001C */ lwc1 $f0, 0x1c($s1) -/* 863C0 800ECF10 3C0141B0 */ lui $at, 0x41b0 -/* 863C4 800ECF14 44811000 */ mtc1 $at, $f2 -/* 863C8 800ECF18 46000005 */ abs.s $f0, $f0 -/* 863CC 800ECF1C 46020000 */ add.s $f0, $f0, $f2 -/* 863D0 800ECF20 C7A20034 */ lwc1 $f2, 0x34($sp) -/* 863D4 800ECF24 4600103E */ c.le.s $f2, $f0 -/* 863D8 800ECF28 00000000 */ nop -/* 863DC 800ECF2C 4500001E */ bc1f .L800ECFA8 -/* 863E0 800ECF30 26240028 */ addiu $a0, $s1, 0x28 -/* 863E4 800ECF34 C6200018 */ lwc1 $f0, 0x18($s1) -/* 863E8 800ECF38 3C014010 */ lui $at, 0x4010 -/* 863EC 800ECF3C 44811800 */ mtc1 $at, $f3 -/* 863F0 800ECF40 44801000 */ mtc1 $zero, $f2 -/* 863F4 800ECF44 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 863F8 800ECF48 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 863FC 800ECF4C 46000021 */ cvt.d.s $f0, $f0 -/* 86400 800ECF50 000310C0 */ sll $v0, $v1, 3 -/* 86404 800ECF54 00431021 */ addu $v0, $v0, $v1 -/* 86408 800ECF58 4620103E */ c.le.d $f2, $f0 -/* 8640C 800ECF5C 00000000 */ nop -/* 86410 800ECF60 45000003 */ bc1f .L800ECF70 -/* 86414 800ECF64 00021080 */ sll $v0, $v0, 2 -/* 86418 800ECF68 0803B3DD */ j .L800ECF74 -/* 8641C 800ECF6C 24430018 */ addiu $v1, $v0, 0x18 -.L800ECF70: -/* 86420 800ECF70 24430004 */ addiu $v1, $v0, 4 -.L800ECF74: -/* 86424 800ECF74 3C028010 */ lui $v0, %hi(gPartnerAnimations) -/* 86428 800ECF78 24428348 */ addiu $v0, $v0, %lo(gPartnerAnimations) -/* 8642C 800ECF7C 00431021 */ addu $v0, $v0, $v1 -/* 86430 800ECF80 8C420000 */ lw $v0, ($v0) -/* 86434 800ECF84 C7A0002C */ lwc1 $f0, 0x2c($sp) -/* 86438 800ECF88 AC820000 */ sw $v0, ($a0) -/* 8643C 800ECF8C 8E220000 */ lw $v0, ($s1) -/* 86440 800ECF90 2403F7FF */ addiu $v1, $zero, -0x801 -/* 86444 800ECF94 AE200014 */ sw $zero, 0x14($s1) -/* 86448 800ECF98 AE20001C */ sw $zero, 0x1c($s1) -/* 8644C 800ECF9C E620003C */ swc1 $f0, 0x3c($s1) -/* 86450 800ECFA0 00431024 */ and $v0, $v0, $v1 -/* 86454 800ECFA4 AE220000 */ sw $v0, ($s1) -.L800ECFA8: -/* 86458 800ECFA8 3C018010 */ lui $at, %hi(wPartnerMoveSpeed) -/* 8645C 800ECFAC C4208030 */ lwc1 $f0, %lo(wPartnerMoveSpeed)($at) -/* 86460 800ECFB0 E6200018 */ swc1 $f0, 0x18($s1) -/* 86464 800ECFB4 3C018010 */ lui $at, %hi(D_800F8034) -/* 86468 800ECFB8 C4208034 */ lwc1 $f0, %lo(D_800F8034)($at) -/* 8646C 800ECFBC 8E250018 */ lw $a1, 0x18($s1) -/* 86470 800ECFC0 44060000 */ mfc1 $a2, $f0 -/* 86474 800ECFC4 0220202D */ daddu $a0, $s1, $zero -/* 86478 800ECFC8 0C00EA95 */ jal npc_move_heading -/* 8647C 800ECFCC AE26000C */ sw $a2, 0xc($s1) -/* 86480 800ECFD0 C6200018 */ lwc1 $f0, 0x18($s1) -/* 86484 800ECFD4 3C014010 */ lui $at, 0x4010 -/* 86488 800ECFD8 44811800 */ mtc1 $at, $f3 -/* 8648C 800ECFDC 44801000 */ mtc1 $zero, $f2 -/* 86490 800ECFE0 46000021 */ cvt.d.s $f0, $f0 -/* 86494 800ECFE4 4622003C */ c.lt.d $f0, $f2 -/* 86498 800ECFE8 00000000 */ nop -/* 8649C 800ECFEC 45000002 */ bc1f .L800ECFF8 -/* 864A0 800ECFF0 24050001 */ addiu $a1, $zero, 1 -/* 864A4 800ECFF4 0000282D */ daddu $a1, $zero, $zero -.L800ECFF8: -/* 864A8 800ECFF8 0C00F598 */ jal func_8003D660 -/* 864AC 800ECFFC 0220202D */ daddu $a0, $s1, $zero -/* 864B0 800ED000 0803B4B9 */ j .L800ED2E4_86794 -/* 864B4 800ED004 00000000 */ nop -.L800ED008: -/* 864B8 800ED008 0C03BD17 */ jal partner_clear_player_tracking -/* 864BC 800ED00C 0220202D */ daddu $a0, $s1, $zero -/* 864C0 800ED010 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 864C4 800ED014 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 864C8 800ED018 3C014387 */ lui $at, 0x4387 -/* 864CC 800ED01C 44810000 */ mtc1 $at, $f0 -/* 864D0 800ED020 AE200018 */ sw $zero, 0x18($s1) -/* 864D4 800ED024 AE200014 */ sw $zero, 0x14($s1) -/* 864D8 800ED028 000310C0 */ sll $v0, $v1, 3 -/* 864DC 800ED02C 00431021 */ addu $v0, $v0, $v1 -/* 864E0 800ED030 00021080 */ sll $v0, $v0, 2 -/* 864E4 800ED034 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 864E8 800ED038 00220821 */ addu $at, $at, $v0 -/* 864EC 800ED03C 8C22835C */ lw $v0, %lo(gPartnerAnimations+0x14)($at) -/* 864F0 800ED040 AE220028 */ sw $v0, 0x28($s1) -/* 864F4 800ED044 C6AC006C */ lwc1 $f12, 0x6c($s5) -/* 864F8 800ED048 46006300 */ add.s $f12, $f12, $f0 -/* 864FC 800ED04C C66000A8 */ lwc1 $f0, 0xa8($s3) -/* 86500 800ED050 0C00A6C9 */ jal clamp_angle -/* 86504 800ED054 46006301 */ sub.s $f12, $f12, $f0 -/* 86508 800ED058 3C048011 */ lui $a0, %hi(D_8010CFCE) -/* 8650C 800ED05C 2484CFCE */ addiu $a0, $a0, %lo(D_8010CFCE) -/* 86510 800ED060 E620000C */ swc1 $f0, 0xc($s1) -/* 86514 800ED064 94820000 */ lhu $v0, ($a0) -/* 86518 800ED068 2403001E */ addiu $v1, $zero, 0x1e -/* 8651C 800ED06C AE030000 */ sw $v1, ($s0) -/* 86520 800ED070 24420001 */ addiu $v0, $v0, 1 -/* 86524 800ED074 0803B4B9 */ j .L800ED2E4_86794 -/* 86528 800ED078 A4820000 */ sh $v0, ($a0) -.L800ED07C: -/* 8652C 800ED07C 3C038010 */ lui $v1, %hi(wPartnerMoveTime) -/* 86530 800ED080 2463802C */ addiu $v1, $v1, %lo(wPartnerMoveTime) -/* 86534 800ED084 8C620000 */ lw $v0, ($v1) -/* 86538 800ED088 10400003 */ beqz $v0, .L800ED098 -/* 8653C 800ED08C 2442FFFF */ addiu $v0, $v0, -1 -/* 86540 800ED090 0803B4B9 */ j .L800ED2E4_86794 -/* 86544 800ED094 AC620000 */ sw $v0, ($v1) -.L800ED098: -/* 86548 800ED098 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 8654C 800ED09C A420CFC8 */ sh $zero, %lo(D_8010CFC8)($at) -/* 86550 800ED0A0 3C018011 */ lui $at, %hi(D_8010CFCA) -/* 86554 800ED0A4 A420CFCA */ sh $zero, %lo(D_8010CFCA)($at) -.L800ED0A8: -/* 86558 800ED0A8 0803B4B9 */ j .L800ED2E4_86794 -/* 8655C 800ED0AC A4800000 */ sh $zero, ($a0) -.L800ED0B0_86560: -/* 86560 800ED0B0 0220202D */ daddu $a0, $s1, $zero -/* 86564 800ED0B4 0C03BE0B */ jal partner_move_to_goal -/* 86568 800ED0B8 0000282D */ daddu $a1, $zero, $zero -/* 8656C 800ED0BC 0803B4B9 */ j .L800ED2E4_86794 -/* 86570 800ED0C0 00000000 */ nop -.L800ED0C4_86574: -/* 86574 800ED0C4 8E220000 */ lw $v0, ($s1) -/* 86578 800ED0C8 30421000 */ andi $v0, $v0, 0x1000 -/* 8657C 800ED0CC 10400012 */ beqz $v0, .L800ED118 -/* 86580 800ED0D0 00000000 */ nop -/* 86584 800ED0D4 0C03A92C */ jal func_800EA4B0 -/* 86588 800ED0D8 86240084 */ lh $a0, 0x84($s1) -/* 8658C 800ED0DC 1040007F */ beqz $v0, .L800ED2DC -/* 86590 800ED0E0 24020001 */ addiu $v0, $zero, 1 -/* 86594 800ED0E4 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 86598 800ED0E8 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 8659C 800ED0EC 000310C0 */ sll $v0, $v1, 3 -/* 865A0 800ED0F0 00431021 */ addu $v0, $v0, $v1 -/* 865A4 800ED0F4 00021080 */ sll $v0, $v0, 2 -/* 865A8 800ED0F8 3C038010 */ lui $v1, %hi(gPartnerAnimations+0x14) -/* 865AC 800ED0FC 00621821 */ addu $v1, $v1, $v0 -/* 865B0 800ED100 8C63835C */ lw $v1, %lo(gPartnerAnimations+0x14)($v1) -/* 865B4 800ED104 24020032 */ addiu $v0, $zero, 0x32 -/* 865B8 800ED108 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 865BC 800ED10C A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -/* 865C0 800ED110 0803B4B9 */ j .L800ED2E4_86794 -/* 865C4 800ED114 AE230028 */ sw $v1, 0x28($s1) -.L800ED118: -/* 865C8 800ED118 3C014040 */ lui $at, 0x4040 -/* 865CC 800ED11C 44812000 */ mtc1 $at, $f4 -/* 865D0 800ED120 C620001C */ lwc1 $f0, 0x1c($s1) -/* 865D4 800ED124 46040001 */ sub.s $f0, $f0, $f4 -/* 865D8 800ED128 C622003C */ lwc1 $f2, 0x3c($s1) -/* 865DC 800ED12C 4480A000 */ mtc1 $zero, $f20 -/* 865E0 800ED130 46001080 */ add.s $f2, $f2, $f0 -/* 865E4 800ED134 E6240014 */ swc1 $f4, 0x14($s1) -/* 865E8 800ED138 4614003E */ c.le.s $f0, $f20 -/* 865EC 800ED13C E620001C */ swc1 $f0, 0x1c($s1) -/* 865F0 800ED140 4500000A */ bc1f .L800ED16C -/* 865F4 800ED144 E622003C */ swc1 $f2, 0x3c($s1) -/* 865F8 800ED148 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 865FC 800ED14C 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 86600 800ED150 000218C0 */ sll $v1, $v0, 3 -/* 86604 800ED154 00621821 */ addu $v1, $v1, $v0 -/* 86608 800ED158 00031880 */ sll $v1, $v1, 2 -/* 8660C 800ED15C 3C028010 */ lui $v0, %hi(gPartnerAnimations+0xC) -/* 86610 800ED160 00431021 */ addu $v0, $v0, $v1 -/* 86614 800ED164 8C428354 */ lw $v0, %lo(gPartnerAnimations+0xC)($v0) -/* 86618 800ED168 AE220028 */ sw $v0, 0x28($s1) -.L800ED16C: -/* 8661C 800ED16C C622003C */ lwc1 $f2, 0x3c($s1) -/* 86620 800ED170 3C01C4FA */ lui $at, 0xc4fa -/* 86624 800ED174 44810000 */ mtc1 $at, $f0 -/* 86628 800ED178 00000000 */ nop -/* 8662C 800ED17C 4600103C */ c.lt.s $f2, $f0 -/* 86630 800ED180 00000000 */ nop -/* 86634 800ED184 4500001E */ bc1f .L800ED200 -/* 86638 800ED188 2404F7FF */ addiu $a0, $zero, -0x801 -/* 8663C 800ED18C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 86640 800ED190 3C028011 */ lui $v0, %hi(D_8010CFD8) -/* 86644 800ED194 8C42CFD8 */ lw $v0, %lo(D_8010CFD8)($v0) -/* 86648 800ED198 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 8664C 800ED19C 000218C0 */ sll $v1, $v0, 3 -/* 86650 800ED1A0 00621821 */ addu $v1, $v1, $v0 -/* 86654 800ED1A4 00031880 */ sll $v1, $v1, 2 -/* 86658 800ED1A8 8E220000 */ lw $v0, ($s1) -/* 8665C 800ED1AC 3C018010 */ lui $at, %hi(gPartnerAnimations+0x14) -/* 86660 800ED1B0 00230821 */ addu $at, $at, $v1 -/* 86664 800ED1B4 8C23835C */ lw $v1, %lo(gPartnerAnimations+0x14)($at) -/* 86668 800ED1B8 E634001C */ swc1 $f20, 0x1c($s1) -/* 8666C 800ED1BC 00441024 */ and $v0, $v0, $a0 -/* 86670 800ED1C0 AE220000 */ sw $v0, ($s1) -/* 86674 800ED1C4 AE230028 */ sw $v1, 0x28($s1) -/* 86678 800ED1C8 8E660028 */ lw $a2, 0x28($s3) -/* 8667C 800ED1CC 0C00A720 */ jal atan2 -/* 86680 800ED1D0 8E670030 */ lw $a3, 0x30($s3) -/* 86684 800ED1D4 E620000C */ swc1 $f0, 0xc($s1) -/* 86688 800ED1D8 C6600028 */ lwc1 $f0, 0x28($s3) -/* 8668C 800ED1DC E6200038 */ swc1 $f0, 0x38($s1) -/* 86690 800ED1E0 C660002C */ lwc1 $f0, 0x2c($s3) -/* 86694 800ED1E4 E620003C */ swc1 $f0, 0x3c($s1) -/* 86698 800ED1E8 C6600030 */ lwc1 $f0, 0x30($s3) -/* 8669C 800ED1EC 24020032 */ addiu $v0, $zero, 0x32 -.L800ED1F0: -/* 866A0 800ED1F0 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 866A4 800ED1F4 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -/* 866A8 800ED1F8 0803B4B9 */ j .L800ED2E4_86794 -/* 866AC 800ED1FC E6200040 */ swc1 $f0, 0x40($s1) -.L800ED200: -/* 866B0 800ED200 C6200038 */ lwc1 $f0, 0x38($s1) -/* 866B4 800ED204 27A20034 */ addiu $v0, $sp, 0x34 -/* 866B8 800ED208 E7A00028 */ swc1 $f0, 0x28($sp) -/* 866BC 800ED20C C620001C */ lwc1 $f0, 0x1c($s1) -/* 866C0 800ED210 3C014130 */ lui $at, 0x4130 -/* 866C4 800ED214 44811000 */ mtc1 $at, $f2 -/* 866C8 800ED218 46000005 */ abs.s $f0, $f0 -/* 866CC 800ED21C 46020000 */ add.s $f0, $f0, $f2 -/* 866D0 800ED220 C622003C */ lwc1 $f2, 0x3c($s1) -/* 866D4 800ED224 C6240040 */ lwc1 $f4, 0x40($s1) -/* 866D8 800ED228 46001080 */ add.s $f2, $f2, $f0 -/* 866DC 800ED22C E7A40030 */ swc1 $f4, 0x30($sp) -/* 866E0 800ED230 E7A00034 */ swc1 $f0, 0x34($sp) -/* 866E4 800ED234 E7A2002C */ swc1 $f2, 0x2c($sp) -/* 866E8 800ED238 AFA20010 */ sw $v0, 0x10($sp) -/* 866EC 800ED23C C620000C */ lwc1 $f0, 0xc($s1) -/* 866F0 800ED240 27A50028 */ addiu $a1, $sp, 0x28 -/* 866F4 800ED244 E7A00014 */ swc1 $f0, 0x14($sp) -/* 866F8 800ED248 862200A6 */ lh $v0, 0xa6($s1) -/* 866FC 800ED24C 27A6002C */ addiu $a2, $sp, 0x2c -/* 86700 800ED250 44820000 */ mtc1 $v0, $f0 -/* 86704 800ED254 00000000 */ nop -/* 86708 800ED258 46800020 */ cvt.s.w $f0, $f0 -/* 8670C 800ED25C E7A00018 */ swc1 $f0, 0x18($sp) -/* 86710 800ED260 8E240080 */ lw $a0, 0x80($s1) -/* 86714 800ED264 0C0371DE */ jal npc_raycast_down_around -/* 86718 800ED268 27A70030 */ addiu $a3, $sp, 0x30 -/* 8671C 800ED26C 1040001D */ beqz $v0, .L800ED2E4_86794 -/* 86720 800ED270 00000000 */ nop -/* 86724 800ED274 C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 86728 800ED278 3C038011 */ lui $v1, %hi(D_8010CFD8) -/* 8672C 800ED27C 8C63CFD8 */ lw $v1, %lo(D_8010CFD8)($v1) -/* 86730 800ED280 C7AE0030 */ lwc1 $f14, 0x30($sp) -/* 86734 800ED284 C7A0002C */ lwc1 $f0, 0x2c($sp) -/* 86738 800ED288 000310C0 */ sll $v0, $v1, 3 -/* 8673C 800ED28C 00431021 */ addu $v0, $v0, $v1 -/* 86740 800ED290 00021080 */ sll $v0, $v0, 2 -/* 86744 800ED294 3C048010 */ lui $a0, %hi(gPartnerAnimations+0x14) -/* 86748 800ED298 00822021 */ addu $a0, $a0, $v0 -/* 8674C 800ED29C 8C84835C */ lw $a0, %lo(gPartnerAnimations+0x14)($a0) -/* 86750 800ED2A0 8E220000 */ lw $v0, ($s1) -/* 86754 800ED2A4 2403F7FF */ addiu $v1, $zero, -0x801 -/* 86758 800ED2A8 E634001C */ swc1 $f20, 0x1c($s1) -/* 8675C 800ED2AC E620003C */ swc1 $f0, 0x3c($s1) -/* 86760 800ED2B0 00431024 */ and $v0, $v0, $v1 -/* 86764 800ED2B4 AE220000 */ sw $v0, ($s1) -/* 86768 800ED2B8 AE240028 */ sw $a0, 0x28($s1) -/* 8676C 800ED2BC 8E660028 */ lw $a2, 0x28($s3) -/* 86770 800ED2C0 0C00A720 */ jal atan2 -/* 86774 800ED2C4 8E670030 */ lw $a3, 0x30($s3) -/* 86778 800ED2C8 0220202D */ daddu $a0, $s1, $zero -/* 8677C 800ED2CC 24050002 */ addiu $a1, $zero, 2 -/* 86780 800ED2D0 0C00F598 */ jal func_8003D660 -/* 86784 800ED2D4 E480000C */ swc1 $f0, 0xc($a0) -/* 86788 800ED2D8 24020032 */ addiu $v0, $zero, 0x32 -.L800ED2DC: -/* 8678C 800ED2DC 3C018011 */ lui $at, %hi(D_8010CFC8) -/* 86790 800ED2E0 A422CFC8 */ sh $v0, %lo(D_8010CFC8)($at) -.L800ED2E4_86794: -/* 86794 800ED2E4 8FBF0050 */ lw $ra, 0x50($sp) -/* 86798 800ED2E8 8FB5004C */ lw $s5, 0x4c($sp) -/* 8679C 800ED2EC 8FB40048 */ lw $s4, 0x48($sp) -/* 867A0 800ED2F0 8FB30044 */ lw $s3, 0x44($sp) -/* 867A4 800ED2F4 8FB20040 */ lw $s2, 0x40($sp) -/* 867A8 800ED2F8 8FB1003C */ lw $s1, 0x3c($sp) -/* 867AC 800ED2FC 8FB00038 */ lw $s0, 0x38($sp) -/* 867B0 800ED300 D7B60060 */ ldc1 $f22, 0x60($sp) -/* 867B4 800ED304 D7B40058 */ ldc1 $f20, 0x58($sp) -/* 867B8 800ED308 03E00008 */ jr $ra -/* 867BC 800ED30C 27BD0068 */ addiu $sp, $sp, 0x68 diff --git a/ver/us/symbol_addrs.txt b/ver/us/symbol_addrs.txt index eb91361a19..7671de581a 100644 --- a/ver/us/symbol_addrs.txt +++ b/ver/us/symbol_addrs.txt @@ -3862,13 +3862,13 @@ exec_entity_commandlist = 0x8010FD68; // type:func rom:0xA6468 D_8010CFBC = 0x8010CFBC; // type:data rom:0xA646C wPartnerTetherDistance = 0x8010CFC0; // type:data rom:0xA6470 D_8010CFC4 = 0x8010CFC4; // type:data rom:0xA6474 -D_8010CFC8 = 0x8010CFC8; // type:data rom:0xA6478 +wPartnerFollowState = 0x8010CFC8; // type:data rom:0xA6478 D_8010CFCA = 0x8010CFCA; // type:data rom:0xA647A D_8010CFCC = 0x8010CFCC; // type:data rom:0xA647C D_8010CFCE = 0x8010CFCE; // type:data rom:0xA647E -D_8010CFD0 = 0x8010CFD0; // type:data rom:0xA6480 +wPartnerNpcIndex = 0x8010CFD0; // type:data rom:0xA6480 D_8010CFD4 = 0x8010CFD4; // type:data rom:0xA6484 -D_8010CFD8 = 0x8010CFD8; // type:data rom:0xA6488 +wCurrentPartnerId = 0x8010CFD8; // type:data rom:0xA6488 D_8010CFDC = 0x8010CFDC; // type:data rom:0xA648C D_8010CFE0 = 0x8010CFE0; // type:data rom:0xA6490 D_8010CFE4 = 0x8010CFE4; // type:data rom:0xA6494 @@ -25854,13 +25854,13 @@ gPlayerMoveHistoryIndex = 0x8010CFB8; // type:data D_8010CFBC = 0x8010CFBC; // type:data wPartnerTetherDistance = 0x8010CFC0; // type:data D_8010CFC4 = 0x8010CFC4; // type:data -D_8010CFC8 = 0x8010CFC8; // type:data +wPartnerFollowState = 0x8010CFC8; // type:data D_8010CFCA = 0x8010CFCA; // type:data D_8010CFCC = 0x8010CFCC; // type:data D_8010CFCE = 0x8010CFCE; // type:data -D_8010CFD0 = 0x8010CFD0; // type:data +wPartnerNpcIndex = 0x8010CFD0; // type:data wPartnerCurrentScript = 0x8010CFD4; // type:data -D_8010CFD8 = 0x8010CFD8; // type:data +wCurrentPartnerId = 0x8010CFD8; // type:data wPartnerCurrentScriptID = 0x8010CFDC; // type:data D_8010CFE0 = 0x8010CFE0; // type:data D_8010CFE4 = 0x8010CFE4; // type:data