From 0b51a16453b0dcf136bf694206ee603adac67eaf Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 21 Nov 2024 10:48:50 +1100 Subject: Player Docs: Spin Attack (#1741) * spin attack * cleanup * fix bss * PR review * sync func name * add todo --- src/code/z_actor.c | 14 ++++++++------ src/code/z_camera.c | 50 +++++++++---------------------------------------- src/code/z_player_lib.c | 1 - 3 files changed, 17 insertions(+), 48 deletions(-) (limited to 'src/code') diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 125a2e116..3c3096b5e 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -648,7 +648,8 @@ void Attention_Update(Attention* attention, Player* player, Actor* playerFocusAc actor = NULL; - if ((player->focusActor != NULL) && (player->unk_AE3[player->unk_ADE] == 2)) { + if ((player->focusActor != NULL) && + (player->controlStickDirections[player->controlStickDataIndex] == PLAYER_STICK_DIR_BACKWARD)) { // Holding backward on the control stick prevents an arrow appearing over the next lock-on actor. // This helps escape a lock-on loop when using Switch Targeting, but note that this still works for // Hold Targeting as well. @@ -2206,8 +2207,8 @@ s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 x Player* player = GET_PLAYER(play); if (!(player->stateFlags1 & - (PLAYER_STATE1_DEAD | PLAYER_STATE1_1000 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000 | - PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000)) && + (PLAYER_STATE1_DEAD | PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | + PLAYER_STATE1_40000 | PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000)) && (Player_GetExplosiveHeld(player) <= PLAYER_EXPLOSIVE_NONE)) { if ((actor->xzDistToPlayer <= xzRange) && (fabsf(actor->playerHeightRel) <= fabsf(yRange))) { if (((getItemId == GI_MASK_CIRCUS_LEADER) || (getItemId == GI_PENDANT_OF_MEMORIES) || @@ -2294,9 +2295,10 @@ s32 Actor_HasRider(PlayState* play, Actor* horse) { s32 Actor_SetRideActor(PlayState* play, Actor* horse, s32 mountSide) { Player* player = GET_PLAYER(play); - if (!(player->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_1000 | - PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000 | PLAYER_STATE1_80000 | - PLAYER_STATE1_100000 | PLAYER_STATE1_200000))) { + if (!(player->stateFlags1 & + (PLAYER_STATE1_DEAD | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_2000 | + PLAYER_STATE1_4000 | PLAYER_STATE1_40000 | PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | + PLAYER_STATE1_200000))) { player->rideActor = horse; player->mountSide = mountSide; CutsceneManager_Queue(CS_ID_GLOBAL_TALK); diff --git a/src/code/z_camera.c b/src/code/z_camera.c index d010162a7..4be0ae9a6 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -400,36 +400,10 @@ s32 func_800CB924(Camera* camera) { } s32 func_800CB950(Camera* camera) { - Player* player; - s32 phi_v0; - s32 ret; - f32 yDiff; - if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { - yDiff = Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight); - - phi_v0 = false; - if (yDiff < 11.0f) { - phi_v0 = true; - } - - ret = phi_v0; - - if (!ret) { - - ret = false; - - if (camera->focalActor->gravity > -0.1f) { - ret = true; - } - - player = (Player*)camera->focalActor; - if (!ret) { - ret = player->stateFlags1 & PLAYER_STATE1_200000; - ret = !!ret; - } - } - return ret; + return ((Camera_fabsf(camera->focalActorPosRot.pos.y - camera->focalActorFloorHeight)) < 11.0f) || + (camera->focalActor->gravity > -0.1f) || + (((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_200000); } else { return true; } @@ -445,18 +419,12 @@ s32 Camera_IsClimbingLedge(Camera* camera) { } } -s32 Camera_IsChargingSwordOrDekuFlowerDive(Camera* camera) { +s32 Camera_IsChargingSpinAttackOrDekuFlowerDive(Camera* camera) { Actor* focalActor = camera->focalActor; - s32 ret; if (focalActor == &GET_PLAYER(camera->play)->actor) { - // Charging Sword - ret = !!(((Player*)focalActor)->stateFlags1 & PLAYER_STATE1_1000); - if (!ret) { - // Deku Flower Dive - ret = !!(((Player*)focalActor)->stateFlags3 & PLAYER_STATE3_100); - } - return ret; + return (((Player*)focalActor)->stateFlags1 & PLAYER_STATE1_CHARGING_SPIN_ATTACK) || + (((Player*)focalActor)->stateFlags3 & PLAYER_STATE3_100); } else { return false; } @@ -2953,7 +2921,7 @@ s32 Camera_Parallel1(Camera* camera) { rwData->unk_1C = 0; } - if (func_800CB950(camera) || (((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_1000) || + if (func_800CB950(camera) || (((Player*)camera->focalActor)->stateFlags1 & PLAYER_STATE1_CHARGING_SPIN_ATTACK) || (((Player*)camera->focalActor)->stateFlags3 & PLAYER_STATE3_100)) { rwData->unk_04 = camera->focalActorPosRot.pos.y; sp72 = false; @@ -3594,7 +3562,7 @@ s32 Camera_Battle1(Camera* camera) { swingPitchFinal = roData->swingPitchFinal; fov = roData->fov; - if (Camera_IsChargingSwordOrDekuFlowerDive(camera)) { + if (Camera_IsChargingSpinAttackOrDekuFlowerDive(camera)) { camera->pitchUpdateRateInv = Camera_ScaledStepToCeilF(18.0f, camera->pitchUpdateRateInv, 0.5f, 0.1f); camera->yOffsetUpdateRate = Camera_ScaledStepToCeilF(0.2f, camera->yOffsetUpdateRate, 0.5f, 0.0001f); camera->xzOffsetUpdateRate = Camera_ScaledStepToCeilF(0.2f, camera->xzOffsetUpdateRate, 0.5f, 0.0001f); @@ -3690,7 +3658,7 @@ s32 Camera_Battle1(Camera* camera) { sp104 = PREG(86) + 800.0f; } - if ((spA4.r > sp104) || Camera_IsChargingSwordOrDekuFlowerDive(camera)) { + if ((spA4.r > sp104) || Camera_IsChargingSpinAttackOrDekuFlowerDive(camera)) { distRatio = 1.0f; spF8 = 10.0f; } else { diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index f43136967..55f89a3eb 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -3,7 +3,6 @@ * Description: Set of library functions to interact with the Player system */ -#include "prevent_bss_reordering.h" #include "global.h" #include "assets/objects/gameplay_keep/gameplay_keep.h" -- cgit v1.2.3