From 3de7c2119677203d688c49fe61a5885740e9b2be Mon Sep 17 00:00:00 2001 From: fig02 Date: Sat, 4 Sep 2021 09:45:47 -0400 Subject: [PATCH] Document new "Epona Push" bug (#941) * add comment * missed one * remove dupes and change wording --- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 5 +++++ src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c | 2 ++ .../actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c | 1 + src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c | 1 + src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c | 2 ++ 5 files changed, 11 insertions(+) diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 6468322bb5..27facad224 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -3783,6 +3783,11 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski this->jntSph.elements[i].dim.modelSphere.radius * this->jntSph.elements[i].dim.scale; } + //! @bug Setting colliders in a draw function allows for duplicate entries to be added to their respective lists + //! under certain conditions, like when pausing and unpausing the game. + //! Actors will draw for a couple of frames between the pauses, but some important logic updates will not occur. + //! In the case of OC, this can cause unwanted effects such as a very large amount of displacement being applied to + //! a colliding actor. CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->jntSph.base); CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->jntSph.base); } diff --git a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c index e389b733ab..1af749de10 100644 --- a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c +++ b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c @@ -318,6 +318,8 @@ void func_80A68FA8(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* skin) { this->colliderHead.elements[index].dim.worldSphere.radius = this->colliderHead.elements[index].dim.modelSphere.radius * this->colliderHead.elements[index].dim.scale; } + + //! @bug see relevant comment in `EnHorse_SkinCallback1` CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->colliderHead.base); } diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index bad75d9a0f..3ea315bb99 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -598,6 +598,7 @@ void func_80A6ABF8(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* skin) { this->headCollider.elements[i].dim.modelSphere.radius * this->headCollider.elements[i].dim.scale; } + //! @bug see relevant comment in `EnHorse_SkinCallback1` CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->headCollider.base); } diff --git a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c index f4867875b7..f338e37368 100644 --- a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c +++ b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c @@ -607,6 +607,7 @@ void func_80A6CAFC(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* skin) { this->headCollider.elements[i].dim.modelSphere.radius * this->headCollider.elements[i].dim.scale; } + //! @bug see relevant comment in `EnHorse_SkinCallback1` CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->headCollider.base); } diff --git a/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c b/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c index df9bc7f1ca..4c8549ffb4 100644 --- a/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c +++ b/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c @@ -262,6 +262,8 @@ void func_80A6DFD4(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* skin) { this->colliderSphere.elements[i].dim.worldSphere.radius = this->colliderSphere.elements[i].dim.modelSphere.radius * this->colliderSphere.elements[i].dim.scale; } + + //! @bug see relevant comment in `EnHorse_SkinCallback1` CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->colliderSphere.base); }