From 5ef277df2db5dd54c02c098ec88777f63680f6c3 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 22 Nov 2023 16:10:55 +1100 Subject: Animation Cleanup: En_P* (#1507) * anim P cleanup * PR Review * PR Review * Postbox Idle --- src/code/z_actor.c | 15 ++++++++------- src/code/z_camera.c | 47 ++++++++++++++++++++++++----------------------- src/code/z_message.c | 24 ++++++++++++------------ src/code/z_sub_s.c | 19 +++++++++++-------- 4 files changed, 55 insertions(+), 50 deletions(-) (limited to 'src/code') diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 1277a7e1a..7d2df00da 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2096,14 +2096,14 @@ s32 func_800B886C(Actor* actor, PlayState* play) { return false; } -void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y) { +void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* posX, s16* posY) { Vec3f projectedPos; f32 invW; Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW); - *x = PROJECTED_TO_SCREEN_X(projectedPos, invW); - *y = PROJECTED_TO_SCREEN_Y(projectedPos, invW); + *posX = PROJECTED_TO_SCREEN_X(projectedPos, invW); + *posY = PROJECTED_TO_SCREEN_Y(projectedPos, invW); } bool Actor_OnScreen(PlayState* play, Actor* actor) { @@ -3499,12 +3499,13 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play) { } bool Target_InTargetableScreenRegion(PlayState* play, Actor* actor) { - s16 x; - s16 y; + s16 screenPosX; + s16 screenPosY; - Actor_GetScreenPos(play, actor, &x, &y); + Actor_GetScreenPos(play, actor, &screenPosX, &screenPosY); - return (x > -20) && (x < gScreenWidth + 20) && (y > -160) && (y < gScreenHeight + 160); + return (screenPosX > -20) && (screenPosX < gScreenWidth + 20) && (screenPosY > -160) && + (screenPosY < gScreenHeight + 160); } /** diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 32c5b0c07..00d2978dd 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -1313,8 +1313,8 @@ s32 Camera_CalcAtForScreen(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* f s32 pad; f32 clampedDeltaY; f32 clampedAbsScreenY; - s16 absScreenY; - s16 screenY; + s16 absScreenPosY; + s16 screenPosY; PosRot* focalActorPosRot = &camera->focalActorPosRot; f32 focalActorHeight = Camera_GetFocalActorHeight(camera); @@ -1322,21 +1322,21 @@ s32 Camera_CalcAtForScreen(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* f focalActorAtOffsetTarget.x = 0.0f; focalActorAtOffsetTarget.z = 0.0f; - Actor_GetScreenPos(camera->play, camera->focalActor, &absScreenY, &screenY); - screenY -= SCREEN_HEIGHT / 2; - absScreenY = ABS(screenY); + Actor_GetScreenPos(camera->play, camera->focalActor, &absScreenPosY, &screenPosY); + screenPosY -= SCREEN_HEIGHT / 2; + absScreenPosY = ABS(screenPosY); // result unused - clampedAbsScreenY = OLib_ClampMaxDist(absScreenY / (f32)(SCREEN_HEIGHT / 2), 1.0f); + clampedAbsScreenY = OLib_ClampMaxDist(absScreenPosY / (f32)(SCREEN_HEIGHT / 2), 1.0f); deltaY = focalActorPosRot->pos.y - *focalActorPosY; clampedDeltaY = OLib_ClampMaxDist(deltaY, deltaYMax); - if (absScreenY > (SCREEN_HEIGHT / 4)) { - absScreenY = SCREEN_HEIGHT / 4; + if (absScreenPosY > (SCREEN_HEIGHT / 4)) { + absScreenPosY = SCREEN_HEIGHT / 4; } - clampedAbsScreenY = OLib_ClampMaxDist(absScreenY / (f32)(SCREEN_HEIGHT / 4), 1.0f); + clampedAbsScreenY = OLib_ClampMaxDist(absScreenPosY / (f32)(SCREEN_HEIGHT / 4), 1.0f); focalActorAtOffsetTarget.y -= clampedDeltaY * clampedAbsScreenY * clampedAbsScreenY; Camera_ScaledStepToCeilVec3f(&focalActorAtOffsetTarget, &camera->focalActorAtOffset, camera->xzOffsetUpdateRate, @@ -3785,8 +3785,8 @@ s32 Camera_Battle1(Camera* camera) { rwData->unk_1A &= ~0x10; } else if (!camera->play->envCtx.skyboxDisabled || (roData->interfaceFlags & BATTLE1_FLAG_0)) { if (func_800CBC84(camera, at, &spC4, 0) != 0) { - s16 screenX; - s16 screenY; + s16 screenPosX; + s16 screenPosY; rwData->unk_1A |= 0x1000; spF8 = OLib_Vec3fDist(at, &focalActorFocus->pos); @@ -3796,10 +3796,10 @@ s32 Camera_Battle1(Camera* camera) { spF4 = OLib_Vec3fDist(at, &spC4.pos); spF8 += (rwData->unk_1A & 0x10) ? 40.0f : 0.0f; - Actor_GetScreenPos(camera->play, camera->focalActor, &screenX, &screenY); + Actor_GetScreenPos(camera->play, camera->focalActor, &screenPosX, &screenPosY); - if ((spF4 < spF8) || - ((screenX >= 0) && (screenX <= SCREEN_WIDTH) && (screenY >= 0) && (screenY <= SCREEN_HEIGHT))) { + if ((spF4 < spF8) || ((screenPosX >= 0) && (screenPosX <= SCREEN_WIDTH) && (screenPosY >= 0) && + (screenPosY <= SCREEN_HEIGHT))) { rwData->unk_1A |= 0x10; spB4.yaw = spA4.yaw + 0x8000; spB4.pitch = -spA4.pitch; @@ -4140,18 +4140,18 @@ s32 Camera_KeepOn1(Camera* camera) { rwData->unk_18 &= ~0x10; } else if (!camera->play->envCtx.skyboxDisabled || (roData->interfaceFlags & KEEPON1_FLAG_0)) { if (func_800CBC84(camera, at, &sp7C, 0) != 0) { - s16 screenX; - s16 screenY; + s16 screenPosX; + s16 screenPosY; rwData->unk_18 |= 0x1000; spF8 = OLib_Vec3fDist(at, &focalActorFocus->pos); spF4 = OLib_Vec3fDist(at, &sp7C.pos); spF8 += (rwData->unk_18 & 0x10) ? 40 : 0.0f; - Actor_GetScreenPos(camera->play, camera->focalActor, &screenX, &screenY); + Actor_GetScreenPos(camera->play, camera->focalActor, &screenPosX, &screenPosY); - if ((spF4 < spF8) || - ((screenX >= 0) && (screenX <= SCREEN_WIDTH) && (screenY >= 0) && (screenY <= SCREEN_HEIGHT))) { + if ((spF4 < spF8) || ((screenPosX >= 0) && (screenPosX <= SCREEN_WIDTH) && (screenPosY >= 0) && + (screenPosY <= SCREEN_HEIGHT))) { rwData->unk_18 |= 0x10; spE0.yaw = (s16)(spD0.yaw + 0x8000); spE0.pitch = -spD0.pitch; @@ -5642,8 +5642,8 @@ s32 Camera_Demo1(Camera* camera) { PosRot* targetPosRot = &camera->targetPosRot; f32 temp_f0; Actor* sp98[1]; - s16 screenX; - s16 screenY; + s16 screenPosX; + s16 screenPosY; s32 phi_v0; VecGeo sp88; PosRot sp74; @@ -5671,10 +5671,11 @@ s32 Camera_Demo1(Camera* camera) { camera->animState++; } - Actor_GetScreenPos(camera->play, camera->target, &screenX, &screenY); + Actor_GetScreenPos(camera->play, camera->target, &screenPosX, &screenPosY); temp_f0 = rwData->unk_0C.r; - if ((screenX > 20) && (screenX < (SCREEN_WIDTH - 20)) && (screenY > 40) && (screenY < (SCREEN_HEIGHT - 40))) { + if ((screenPosX > 20) && (screenPosX < (SCREEN_WIDTH - 20)) && (screenPosY > 40) && + (screenPosY < (SCREEN_HEIGHT - 40))) { if (temp_f0 < 700.0f) { phi_v0 = 0; } else { diff --git a/src/code/z_message.c b/src/code/z_message.c index 4ebcda37f..63330e507 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -5208,11 +5208,11 @@ void Message_Update(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; InterfaceContext* interfaceCtx = &play->interfaceCtx; Input* input = CONTROLLER1(&play->state); - s16 averageY; - s16 sp50; + s16 avgScreenPosY; + s16 screenPosX; u16 temp_v1_2; - s16 sp4C; - s16 sp4A; + s16 playerScreenPosY; + s16 actorScreenPosY; s16 sp48; s32 sp44; s32 sp40; @@ -5223,7 +5223,7 @@ void Message_Update(PlayState* play) { msgCtx->stickAdjX = input->rel.stick_x; msgCtx->stickAdjY = input->rel.stick_y; - averageY = 0; + avgScreenPosY = 0; // If stickAdj is held, set a delay to allow the cursor to read the next input. // The first delay is given a longer time than all subsequent delays. @@ -5309,12 +5309,12 @@ void Message_Update(PlayState* play) { } if (temp) { if (msgCtx->talkActor != NULL) { - Actor_GetScreenPos(play, &GET_PLAYER(play)->actor, &sp50, &sp4C); - Actor_GetScreenPos(play, msgCtx->talkActor, &sp50, &sp4A); - if (sp4C >= sp4A) { - averageY = ((sp4C - sp4A) / 2) + sp4A; + Actor_GetScreenPos(play, &GET_PLAYER(play)->actor, &screenPosX, &playerScreenPosY); + Actor_GetScreenPos(play, msgCtx->talkActor, &screenPosX, &actorScreenPosY); + if (playerScreenPosY >= actorScreenPosY) { + avgScreenPosY = ((playerScreenPosY - actorScreenPosY) / 2) + actorScreenPosY; } else { - averageY = ((sp4A - sp4C) / 2) + sp4C; + avgScreenPosY = ((actorScreenPosY - playerScreenPosY) / 2) + playerScreenPosY; } } else { msgCtx->textboxX = msgCtx->textboxXTarget; @@ -5326,13 +5326,13 @@ void Message_Update(PlayState* play) { if ((u32)msgCtx->textBoxPos == 0) { if ((play->sceneId == SCENE_UNSET_04) || (play->sceneId == SCENE_UNSET_05) || (play->sceneId == SCENE_UNSET_06)) { - if (averageY < 0x64) { + if (avgScreenPosY < 100) { msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; } else { msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; } } else { - if (averageY < 0xA0) { + if (avgScreenPosY < 160) { msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; } else { msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 3cc7ffb87..f5a233ede 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -826,11 +826,11 @@ s32 SubS_CopyPointFromPathCheckBounds(Path* path, s32 pointIndex, Vec3f* dst) { */ s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemId, SubSOfferMode mode) { s32 canAccept = false; - s16 x; - s16 y; + s16 screenPosX; + s16 screenPosY; f32 xzDistToPlayerTemp; - Actor_GetScreenPos(play, actor, &x, &y); + Actor_GetScreenPos(play, actor, &screenPosX, &screenPosY); switch (mode) { case SUBS_OFFER_MODE_GET_ITEM: @@ -847,7 +847,8 @@ s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemI case SUBS_OFFER_MODE_ONSCREEN: //! @bug: Both x and y conditionals are always true, || should be an && - if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) { + if (((screenPosX >= 0) || (screenPosX < SCREEN_WIDTH)) && + ((screenPosY >= 0) || (screenPosY < SCREEN_HEIGHT))) { canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } break; @@ -864,8 +865,9 @@ s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemI case SUBS_OFFER_MODE_AUTO_TARGETED: //! @bug: Both x and y conditionals are always true, || should be an && - if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) && - (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange) && actor->isLockedOn) { + if (((screenPosX >= 0) || (screenPosX < SCREEN_WIDTH)) && + ((screenPosY >= 0) || (screenPosY < SCREEN_HEIGHT)) && (fabsf(actor->playerHeightRel) <= yRange) && + (actor->xzDistToPlayer <= xzRange) && actor->isLockedOn) { actor->flags |= ACTOR_FLAG_10000; canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } @@ -873,8 +875,9 @@ s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemI case SUBS_OFFER_MODE_AUTO_NEARBY_ONSCREEN: //! @bug: Both x and y conditionals are always true, || should be an && - if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) && - (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange)) { + if (((screenPosX >= 0) || (screenPosX < SCREEN_WIDTH)) && + ((screenPosY >= 0) || (screenPosY < SCREEN_HEIGHT)) && (fabsf(actor->playerHeightRel) <= yRange) && + (actor->xzDistToPlayer <= xzRange)) { actor->flags |= ACTOR_FLAG_10000; canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } -- cgit v1.2.3