mirror of
https://github.com/zeldaret/mm.git
synced 2026-06-16 14:30:26 -04:00
Animation Cleanup: En_P* (#1507)
* anim P cleanup * PR Review * PR Review * Postbox Idle
This commit is contained in:
+8
-7
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+24
-23
@@ -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 {
|
||||
|
||||
+12
-12
@@ -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];
|
||||
|
||||
+11
-8
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user