From b19f86852b486b44c67f782914cfd208bb313bcf Mon Sep 17 00:00:00 2001 From: Henny022p Date: Mon, 3 Mar 2025 16:15:20 +0000 Subject: [PATCH] more transition function cleanup --- include/functions.h | 4 +- include/transitions.h | 4 +- src/beanstalkSubtask.c | 6 +- src/manager/miscManager.c | 2 +- src/manager/vaati3StartManager.c | 2 +- src/npc/npc4E.c | 2 +- src/object/gyorgBossObject.c | 2 +- src/object/lilypadLarge.c | 2 +- src/roomInit.c | 2 +- src/scroll.c | 135 ++++++++++++++++--------------- 10 files changed, 81 insertions(+), 80 deletions(-) diff --git a/include/functions.h b/include/functions.h index de36bf0b..9460e06e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -91,8 +91,8 @@ extern void InitPlayerMacro(PlayerMacroEntry*); extern u32* sub_0805F25C(u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); extern void sub_0806D0B0(Entity*); -extern bool32 sub_080806BC(u32, u32, u32, u32); -extern void sub_0808091C(const Transition* screenTransition, u32 transitionType); +extern bool32 DoApplicableTransition(u32, u32, u32, u32); +extern void DoExitTransitionWithType(const Transition* screenTransition, u32 transitionType); extern void sub_080809D4(void); extern void sub_08080CB4(Entity*); extern u32 sub_0808288C(Entity*, u32, u32, u32); diff --git a/include/transitions.h b/include/transitions.h index eac41f43..dd4dfc30 100644 --- a/include/transitions.h +++ b/include/transitions.h @@ -7,8 +7,8 @@ typedef enum { WARP_TYPE_BORDER, WARP_TYPE_AREA, - WARP_TYPE_UNK2, - WARP_TYPE_UNK3, + WARP_TYPE_BORDER2, + WARP_TYPE_AREA2, WARP_TYPE_END_OF_LIST = 0xffff, } WarpType; diff --git a/src/beanstalkSubtask.c b/src/beanstalkSubtask.c index 9da2f7eb..6ad7f184 100644 --- a/src/beanstalkSubtask.c +++ b/src/beanstalkSubtask.c @@ -63,7 +63,7 @@ extern void sub_0804B388(u32 a1, u32 a2); extern u32 sub_080A7CFC(u32 a1, u32 tmp); // TODO does this really have a second param? extern void OpenSmallChest(u32 pos, u32 layer); extern bool32 sub_08079778(); -extern Transition* sub_08080734(u32, u32); +extern Transition* FindApplicableAreaTransition(u32, u32); extern const s16 gUnk_080B4490[]; extern const s16 gUnk_080B4468[]; @@ -206,7 +206,7 @@ u32 UpdatePlayerCollision(void) { gPlayerEntity.base.collisionLayer) == COLLISION_DATA_255) { if ((((gPlayerState.flags & (PL_FLAGS10000 | PL_FLAGS2)) != 0) || ((gPlayerState.sword_state & 0x10) != 0)) || - ((sub_080806BC(gPlayerEntity.base.x.HALF.HI - gRoomControls.origin_x, + ((DoApplicableTransition(gPlayerEntity.base.x.HALF.HI - gRoomControls.origin_x, gPlayerEntity.base.y.HALF.HI - gRoomControls.origin_y, index, 5) == 0 && (((gPlayerState.heldObject != 0 || ((gPlayerState.gustJarState & 0xf) != 0)) || (sub_0807BD14(&gPlayerEntity.base, index) == 0)))))) { @@ -269,7 +269,7 @@ u32 UpdatePlayerCollision(void) { } ptr1 = &gUnk_080B4478[gPlayerEntity.base.animationState & 6]; - transition = sub_08080734((gPlayerEntity.base.x.HALF.HI - gRoomControls.origin_x) + ptr1[0], + transition = FindApplicableAreaTransition((gPlayerEntity.base.x.HALF.HI - gRoomControls.origin_x) + ptr1[0], (gPlayerEntity.base.y.HALF.HI - gRoomControls.origin_y) + ptr1[1]); if (transition == NULL) { return 0; diff --git a/src/manager/miscManager.c b/src/manager/miscManager.c index ed284275..bcb7bce9 100644 --- a/src/manager/miscManager.c +++ b/src/manager/miscManager.c @@ -355,7 +355,7 @@ void MiscManager_TypeA(MiscManager* this) { void MiscManager_TypeB(MiscManager* this) { if (sub_080593CC(this)) { if (++super->timer >= 8) { - sub_080806BC(this->x - gRoomControls.origin_x, this->y - gRoomControls.origin_y, 0xFF, 0xA); + DoApplicableTransition(this->x - gRoomControls.origin_x, this->y - gRoomControls.origin_y, 0xFF, 0xA); } } else { super->timer = 0; diff --git a/src/manager/vaati3StartManager.c b/src/manager/vaati3StartManager.c index 1fa0c618..097f3afa 100644 --- a/src/manager/vaati3StartManager.c +++ b/src/manager/vaati3StartManager.c @@ -154,5 +154,5 @@ void Vaati3StartManager_Type1_Action1(Vaati3StartManager* this) { void sub_0805E094(void) { SetInitializationPriority(); - sub_0808091C(&gUnk_0813AC34, TRANSITION_7); + DoExitTransitionWithType(&gUnk_0813AC34, TRANSITION_7); } diff --git a/src/npc/npc4E.c b/src/npc/npc4E.c index 69a57088..73dced19 100644 --- a/src/npc/npc4E.c +++ b/src/npc/npc4E.c @@ -62,7 +62,7 @@ void NPC4E_ChangeInteractableHitbox(Entity* this, ScriptExecutionContext* contex } void NPC4E_DoScreenTransition(Entity* this, ScriptExecutionContext* context) { - sub_0808091C(gNpc4ETransitions[context->intVariable], gNpc4ETransitionTypes[context->intVariable]); + DoExitTransitionWithType(gNpc4ETransitions[context->intVariable], gNpc4ETransitionTypes[context->intVariable]); } u8 NPC4E_GetKinstoneId(Entity* this) { diff --git a/src/object/gyorgBossObject.c b/src/object/gyorgBossObject.c index 2de64ed0..c04e6eaa 100644 --- a/src/object/gyorgBossObject.c +++ b/src/object/gyorgBossObject.c @@ -251,7 +251,7 @@ void GyorgBossObject_FightEnd(GyorgBossObjectEntity* this) { sub_080A1E54(this); if (--super->subtimer == 0) { SetFlag(0x7B); - sub_0808091C(&gUnk_0813ABD0, 8); + DoExitTransitionWithType(&gUnk_0813ABD0, 8); return; } if (super->subtimer == 0x3C) { diff --git a/src/object/lilypadLarge.c b/src/object/lilypadLarge.c index 03cca48a..9a7458b3 100644 --- a/src/object/lilypadLarge.c +++ b/src/object/lilypadLarge.c @@ -498,7 +498,7 @@ void sub_08085D60(LilypadLargeEntity* this) { tmpY = gUnk_08120638[tmp + 1]; if (GetCollisionDataRelativeTo(super, tmpX, tmpY) == COLLISION_DATA_255) { - if (sub_080806BC((super->x.HALF.HI - gRoomControls.origin_x) + tmpX, + if (DoApplicableTransition((super->x.HALF.HI - gRoomControls.origin_x) + tmpX, (super->y.HALF.HI - gRoomControls.origin_y) + tmpY, r4, 5) == 0) { if (sub_0807BD14(&gPlayerEntity.base, r4 >> 3) != 0) { super->direction = r4; diff --git a/src/roomInit.c b/src/roomInit.c index 4c5dbfa7..e5afa576 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -713,7 +713,7 @@ void sub_StateChange_HyruleCastle_4(void) { } void sub_0804BCDC(void) { - sub_0808091C(&gUnk_0813AB80, TRANSITION_FADE_BLACK_SLOW); + DoExitTransitionWithType(&gUnk_0813AB80, TRANSITION_FADE_BLACK_SLOW); } u32 sub_unk3_HyruleCastle_5(void) { diff --git a/src/scroll.c b/src/scroll.c index 6fa1e3d9..408cbd6b 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -57,10 +57,10 @@ void sub_08080368(); void FillActTileForLayer(MapLayer* mapLayer); bool32 IsPosInBorderTransitionRegion(const Transition* transition, u32 param_2, u32 param_3, u32 facing_direction); bool32 IsPosInTransitionRect(const Transition* transition, u32 param_2, u32 param_3, u32 facing_direction); -void sub_080808D8(s32); -void sub_080808E4(s32); -void sub_08080904(s32); -void sub_08080910(s32); +void SetRoomTransitionTypeForAreaWarp(s32); +void SetRoomTransitionTypeForBorderWarp(s32); +void SetRoomTransitionTypeForArea2Warp(s32); +void SetRoomTransitionTypeForBorder2Warp(s32); extern const s8 gShakeOffsets[]; @@ -482,89 +482,90 @@ void sub_08080368(void) { } u32 sub_080803D0(void) { - s32 sp00, sp04, sp08, sp0c, sp10, sp14, sp18, sp1c; - s32 r2, r4, r7, r8, r9, r10; + s32 delta_x, delta_y, dd_x, dd_y, pos_x, pos_y, scroll_x, scroll_y; + s32 xy49, r4, r7, r8, delta_yy, delta_xx; + + scroll_x = gRoomControls.scroll_x - gRoomControls.origin_x; + pos_x = gRoomControls.camera_target->x.HALF.HI - gRoomControls.origin_x; + scroll_y = gRoomControls.scroll_y - gRoomControls.origin_y; + pos_y = gRoomControls.camera_target->y.HALF.HI - gRoomControls.origin_y; + dd_x = 0x3c; - sp18 = gRoomControls.scroll_x - gRoomControls.origin_x; - sp10 = gRoomControls.camera_target->x.HALF.HI - gRoomControls.origin_x; - sp1c = gRoomControls.scroll_y - gRoomControls.origin_y; - sp14 = gRoomControls.camera_target->y.HALF.HI - gRoomControls.origin_y; - sp08 = 0x3c; do { r7 = 0; - sp08 += 6; - r10 = sp08 * sp08; - sp0c = sp08 * 2 / 3; - r9 = sp0c * sp0c; + dd_x += 6; + delta_xx = dd_x * dd_x; + dd_y = dd_x * 2 / 3; + delta_yy = dd_y * dd_y; - sp00 = sp08; - sp04 = 0; - r4 = (-(sp08 * 2) + 1) * r9 + r10 * 2; - r2 = sp00 * r9 / r10; - while (sp04 <= r2) { + delta_x = dd_x; + delta_y = 0; + r4 = (-(dd_x * 2) + 1) * delta_yy + delta_xx * 2; + xy49 = delta_x * delta_yy / delta_xx; // = x * 4/9 + while (delta_y <= xy49) { - if ((sp1c + 0xa8) > sp14 + sp04) { - if (sp18 + 0xf8 > sp00 + sp10) { + if (scroll_y + 0xa8 > pos_y + delta_y) { + if (scroll_x + 0xf8 > delta_x + pos_x) { r7 |= 1; } - if (sp18 < sp10 - sp00 + 8) { + if (scroll_x < pos_x - delta_x + 8) { r7 |= 2; } } - if (sp1c < (sp14 - sp04) + 8) { - if (sp18 + 0xf8 > sp00 + sp10) { + if (scroll_y < pos_y - delta_y + 8) { + if (scroll_x + 0xf8 > delta_x + pos_x) { r7 |= 4; } - if (sp18 < sp10 - sp00 + 8) { + if (scroll_x < pos_x - delta_x + 8) { r7 |= 8; } } if (r4 > 0) { - r4 += ((-(sp00 << 0x2) + 4) * r9) + (r10 * (6 + 4 * sp04)); - sp00--; - r2 = sp00 * r9 / r10; + r4 += ((-(delta_x << 0x2) + 4) * delta_yy) + (delta_xx * (6 + 4 * delta_y)); + delta_x--; + xy49 = delta_x * delta_yy / delta_xx; } else { - r4 += (r10 * (6 + 4 * sp04)); + r4 += (delta_xx * (6 + 4 * delta_y)); } - sp04++; + delta_y++; } - sp00 = 0; - sp04 = sp0c; - r4 = r9 * 2 + (sp04 * -2 + 1) * r10; - r2 = sp04 * r10 / r9; - while (sp00 <= r2) { - if (sp1c + 0xa8 > sp14 + sp04) { - if (sp18 + 0xf8 > sp10 + sp00) { + delta_x = 0; + delta_y = dd_y; + r4 = delta_yy * 2 + (delta_y * -2 + 1) * delta_xx; + xy49 = delta_y * delta_xx / delta_yy; // y * 9 / 4 + while (delta_x <= xy49) { + if (scroll_y + 0xa8 > pos_y + delta_y) { + if (scroll_x + 0xf8 > pos_x + delta_x) { r7 |= 0x10; } - if (sp18 < sp10 + 8 - sp00) { + if (scroll_x < pos_x + 8 - delta_x) { r7 |= 0x20; } } - if (sp1c < (sp14 - sp04) + 8) { - if (sp18 + 0xf8 > sp10 + sp00) { + if (scroll_y < pos_y - delta_y + 8) { + if (scroll_x + 0xf8 > pos_x + delta_x) { r7 |= 0x40; } - if (sp18 < sp10 + 8 - sp00) { + if (scroll_x < pos_x + 8 - delta_x) { r7 |= 0x80; } } if (r4 > 0) { - r4 += r9 * (6 + (4 * sp00)) + (sp04 * -4 + 4) * r10; - sp04--; - r2 = sp04 * r10 / r9; + r4 += delta_yy * (6 + (4 * delta_x)) + (delta_y * -4 + 4) * delta_xx; + delta_y--; + xy49 = delta_y * delta_xx / delta_yy; } else { - r4 += r9 * (6 + (4 * sp00)); + r4 += delta_yy * (6 + (4 * delta_x)); } - sp00++; + delta_x++; } } while (r7 != 0); - return sp08; + return dd_x; } void UpdateIsDiggingCave(void) { @@ -592,7 +593,7 @@ void ClearTileMaps(void) { MemClear(&gMapDataTopSpecial, 0x8000); } -bool32 sub_080806BC(u32 x, u32 y, u32 direction, u32 warp_types) { +bool32 DoApplicableTransition(u32 x, u32 y, u32 direction, u32 warp_types) { static bool32 (*const gUnk_0811E7AC[])(const Transition*, u32, u32, u32) = { IsPosInBorderTransitionRegion, IsPosInTransitionRect, @@ -612,12 +613,12 @@ bool32 sub_080806BC(u32 x, u32 y, u32 direction, u32 warp_types) { return 0; } -const Transition* sub_08080734(u32 param_1, u32 param_2) { +const Transition* FindApplicableAreaTransition(u32 pos_x, u32 pos_y) { const Transition* transition = gArea.pCurrentRoomInfo->exits; u32 warp_types = 0xa; while (transition->warp_type != WARP_TYPE_END_OF_LIST) { if (((1 << transition->warp_type) & warp_types) != 0 && - IsPosInTransitionRect(transition, param_1, param_2, 0)) { + IsPosInTransitionRect(transition, pos_x, pos_y, 0)) { return transition; } transition++; @@ -688,24 +689,24 @@ bool32 IsPosInTransitionRect(const Transition* transition, u32 pos_x, u32 pos_y, } void DoExitTransition(const Transition* data) { - static void (*const gUnk_0811E7C4[])(s32) = { - sub_080808D8, - sub_080808E4, - sub_08080904, - sub_08080910, + static void (*const sSetRoomTransitionTypes[])(s32) = { + SetRoomTransitionTypeForAreaWarp, + SetRoomTransitionTypeForBorderWarp, + SetRoomTransitionTypeForArea2Warp, + SetRoomTransitionTypeForBorder2Warp, }; PlayerRoomStatus* status; gRoomTransition.transitioningOut = 1; status = &gRoomTransition.player_status; - if ((u16)data->endX <= 0x3ff) { + if (data->endX <= 0x3ff) { status->start_pos_x = data->endX; } else { - status->start_pos_x = (gRoomControls.camera_target)->x.HALF.HI | 0x8000; + status->start_pos_x = gRoomControls.camera_target->x.HALF.HI | 0x8000; } - if ((u16)data->endY <= 0x3ff) { + if (data->endY <= 0x3ff) { status->start_pos_y = data->endY; } else { - status->start_pos_y = (gRoomControls.camera_target)->y.HALF.HI | 0x8000; + status->start_pos_y = gRoomControls.camera_target->y.HALF.HI | 0x8000; } status->area_next = data->area; status->room_next = data->room; @@ -715,14 +716,14 @@ void DoExitTransition(const Transition* data) { if (data->transitionSFX != SFX_NONE) { SoundReq(data->transitionSFX); } - gUnk_0811E7C4[data->warp_type](data->shape); + sSetRoomTransitionTypes[data->warp_type](data->shape); } -void sub_080808D8(s32 param_1) { +void SetRoomTransitionTypeForAreaWarp(s32 param_1) { gRoomTransition.type = TRANSITION_DEFAULT; } -void sub_080808E4(s32 param_1) { +void SetRoomTransitionTypeForBorderWarp(s32 param_1) { if (CheckAreaOverworld(gRoomTransition.player_status.area_next)) { gRoomTransition.type = TRANSITION_DEFAULT; } else { @@ -730,15 +731,15 @@ void sub_080808E4(s32 param_1) { } } -void sub_08080904(s32 param_1) { +void SetRoomTransitionTypeForArea2Warp(s32 param_1) { gRoomTransition.type = TRANSITION_CUT; } -void sub_08080910(s32 param_1) { +void SetRoomTransitionTypeForBorder2Warp(s32 param_1) { gRoomTransition.type = TRANSITION_CUT; } -void sub_0808091C(const Transition* screenTransition, u32 transitionType) { +void DoExitTransitionWithType(const Transition* screenTransition, u32 transitionType) { DoExitTransition(screenTransition); gRoomTransition.type = transitionType; } @@ -864,7 +865,7 @@ void UpdateDoorTransition() { case ACT_TILE_241: case ACT_TILE_40: case ACT_TILE_41: - sub_080806BC(x, y, 0xff, 10); + DoApplicableTransition(x, y, 0xff, 10); break; } }