From a15a72f209aa1e508bc540a95b6383dae44bf343 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 14 Jun 2025 23:41:15 -0400 Subject: [PATCH] daPy_lk_c::checkRopeSwingWall --- include/d/d_particle.h | 22 ++++++------- src/d/actor/d_a_player_rope.inc | 55 ++++++++++++++++++++++++++++++--- src/d/d_file_select.cpp | 44 +++++++++++++------------- 3 files changed, 84 insertions(+), 37 deletions(-) diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 1802b092f..cdb6bfe69 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -382,17 +382,17 @@ public: dPa_control_c(); enum { - dPtclGroup_Normal_e, - dPtclGroup_NormalP1_e, - dPtclGroup_Toon_e, - dPtclGroup_ToonP1_e, - dPtclGroup_Projection_e, - dPtclGroup_ShipTail_e, - dPtclGroup_Wind_e, - dPtclGroup_2Dfore_e, - dPtclGroup_2Dback_e, - dPtclGroup_2DmenuFore_e, - dPtclGroup_2DmenuBack_e, + /* 0x0 */ dPtclGroup_Normal_e, + /* 0x1 */ dPtclGroup_NormalP1_e, + /* 0x2 */ dPtclGroup_Toon_e, + /* 0x3 */ dPtclGroup_ToonP1_e, + /* 0x4 */ dPtclGroup_Projection_e, + /* 0x5 */ dPtclGroup_ShipTail_e, + /* 0x6 */ dPtclGroup_Wind_e, + /* 0x7 */ dPtclGroup_2Dfore_e, + /* 0x8 */ dPtclGroup_2Dback_e, + /* 0x9 */ dPtclGroup_2DmenuFore_e, + /* 0xA */ dPtclGroup_2DmenuBack_e, }; static u8 getRM_ID(u16); diff --git a/src/d/actor/d_a_player_rope.inc b/src/d/actor/d_a_player_rope.inc index 5afa9b6a3..67fdc2d98 100644 --- a/src/d/actor/d_a_player_rope.inc +++ b/src/d/actor/d_a_player_rope.inc @@ -122,10 +122,57 @@ int daPy_lk_c::changeRopeToHangProc() { } /* 8014327C-80143694 .text checkRopeSwingWall__9daPy_lk_cFP4cXyzP4cXyzPsPf */ -BOOL daPy_lk_c::checkRopeSwingWall(cXyz*, cXyz*, s16*, f32*) { - /* Nonmatching */ - static JGeometry::TVec3 dynamic_scale; - static JGeometry::TVec3 particle_scale; +BOOL daPy_lk_c::checkRopeSwingWall(cXyz* r4, cXyz* r5, s16* r6, f32* r7) { + static JGeometry::TVec3 dynamic_scale(0.25f, 0.25f, 0.25f); + static JGeometry::TVec3 particle_scale(0.75f, 0.75f, 0.75f); + + mLinkLinChk.Set(r4, r5, this); + if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + f32 f1 = -*r6 / (f32)m34D4; + if (f1 > 1.0f) { + f1 = 1.0f; + } else if (f1 < -1.0f) { + f1 = -1.0f; + } + if (*r7 > 0.0f) { + *r7 = cM_atan2f(f1, -std::sqrtf(1.0f - f1*f1)); + } else { + *r7 = cM_atan2f(f1, std::sqrtf(1.0f - f1*f1)); + } + m35A8 = *r7 / m35A4; + daPy_footEffect_c* foot_effect = &mFootEffect[1]; + if (foot_effect->getID() != -1) { + foot_effect->getSmokeCallBack()->remove(); + foot_effect->getOtherCallBack()->remove(); + } + + cM3dGPla* plane = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + cXyz* normal = plane->GetNP(); + cXyz sp50 = mLinkLinChk.GetCross() + *normal * 10.0f; + foot_effect->setPos(&sp50); + csXyz angle; + angle.x = cM_atan2s(normal->absXZ(), normal->y); + angle.y = cM_atan2s(normal->x, normal->z); + angle.z = 0; + foot_effect->setAngle(&angle); + + JPABaseEmitter* emitter = dComIfGp_particle_setToonP1( + dPa_name::ID_COMMON_2022, + &foot_effect->getPos(), &foot_effect->getAngle(), + NULL, daPy_HIO_basic_c0::m.field_0x2, foot_effect->getSmokeCallBack(), + fopAcM_GetRoomNo(this) + ); + if (emitter) { + emitter->setSpread(1.0f); + emitter->setRate(8.0f); + emitter->setGlobalDynamicsScale(dynamic_scale); + emitter->setGlobalParticleScale(particle_scale); + } + + return TRUE; + } else { + return FALSE; + } } /* 80143694-80143A44 .text setBlendRopeMoveAnime__9daPy_lk_cFi */ diff --git a/src/d/d_file_select.cpp b/src/d/d_file_select.cpp index bebd2e218..b1094e8f0 100644 --- a/src/d/d_file_select.cpp +++ b/src/d/d_file_select.cpp @@ -1312,15 +1312,15 @@ int dFile_select_c::DataSelectPaneCopyMove(s16 param_1, s16 param_2) { case 0: temp1 = PaneTranceRecTlt2(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0f, 0.0f, 55.0f, 1, 0); temp2 = PaneTranceRecInfo2(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0f, 0.0f, 55.0f, 1, 0); - temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0, 0.0f, 55.0f, 1, 0); - temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0, 0.0f, 55.0f, 1, 0); + temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0f, 0.0f, 55.0f, 1, 0); + temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0f, 0.0f, 55.0f, 1, 0); break; case 1: temp1 = PaneTranceRecTlt1(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 140.0f, 0.0f, 140.0f, 1, 0); temp2 = PaneTranceRecInfo1(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 140.0f, 0.0f, 140.0f, 1, 0); - temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0, 0.0f, 55.0f, 1, 0); - temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0, 0.0f, 55.0f, 1, 0); + temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0f, 0.0f, 55.0f, 1, 0); + temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 55.0f, 0.0f, 55.0f, 1, 0); break; case 2: @@ -1347,14 +1347,14 @@ int dFile_select_c::DataSelectPaneCopyBackMove(s16 param_1, s16 param_2) { temp5 = 1; temp6 = 1; if(field_0x3925 == 0) { - temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0, 0.0f, 1, 0); - temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0, 0.0f, 1, 0); + temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); + temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); temp3 = 1; temp4 = 1; } else { - temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); - temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); + temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); + temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); temp3 = PaneTranceRecTlt2(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); temp4 = PaneTranceRecInfo2(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); } @@ -1366,20 +1366,20 @@ int dFile_select_c::DataSelectPaneCopyBackMove(s16 param_1, s16 param_2) { if(field_0x3925 == 0) { temp1 = PaneTranceRecTlt1(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 85.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); temp2 = PaneTranceRecInfo1(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 85.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); - temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0, 0.0f, 0.0f, 1, 0); - temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0, 0.0f, 0.0f, 1, 0); + temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); + temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); } else { - temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); - temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); + temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); + temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -85.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); temp3 = PaneTranceRecTlt1(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); temp4 = PaneTranceRecInfo1(field_0x3930 - param_2, g_fsHIO.field_0x28, g_fsHIO.field_0x40, 0.0f, 0.0f, 0.0f, 1, 0); } break; case 2: - temp5 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -170.0, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); - temp6 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -170.0, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); + temp5 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -170.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); + temp6 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, -170.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); if(field_0x3925 == 0) { temp1 = PaneTranceRecTlt1(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 85.0f, 0.0f, 0.0f, g_fsHIO.field_0x07, 2); @@ -1412,29 +1412,29 @@ int dFile_select_c::DataSelectPaneCopyMove2(s16 param_1, s16 param_2) { if(field_0x3925 == 0) { temp1 = PaneTranceRecTlt2(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0f, 0.0f, 0.0f, 0, 2); temp2 = PaneTranceRecInfo2(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0f, 0.0f, 0.0f, 0, 2); - temp3 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0, g_fsHIO.field_0x40, 55.0f, 0, 1); - temp4 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0, g_fsHIO.field_0x40, 55.0f, 0, 1); + temp3 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0f, g_fsHIO.field_0x40, 55.0f, 0, 1); + temp4 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0f, g_fsHIO.field_0x40, 55.0f, 0, 1); } else { temp1 = PaneTranceRecTlt2(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0f, g_fsHIO.field_0x40, 55.0f, 0, 1); temp2 = PaneTranceRecInfo2(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0f, g_fsHIO.field_0x40, 55.0f, 0, 1); - temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); - temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); + temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0f, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); + temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0f, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); } break; case 1: if(field_0x3925 == 0) { - temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0, g_fsHIO.field_0x40, 55.0f, 0, 1); - temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0, g_fsHIO.field_0x40, 55.0f, 0, 1); + temp1 = PaneTranceRecTlt3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0f, g_fsHIO.field_0x40, 55.0f, 0, 1); + temp2 = PaneTranceRecInfo3(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 55.0f, g_fsHIO.field_0x40, 55.0f, 0, 1); temp3 = PaneTranceRecTlt1(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 140.0f, 0.0f, 85.0f, 0, 2); temp4 = PaneTranceRecInfo1(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 140.0f, 0.0f, 85.0f, 0, 2); } else { temp1 = PaneTranceRecTlt1(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 140.0f, g_fsHIO.field_0x40, 140.0f, 0, 1); temp2 = PaneTranceRecInfo1(field_0x3930 - param_1, g_fsHIO.field_0x28, 0.0f, 140.0f, g_fsHIO.field_0x40, 140.0f, 0, 1); - temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); - temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); + temp3 = PaneTranceRecTlt3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0f, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); + temp4 = PaneTranceRecInfo3(field_0x3930 - param_2, g_fsHIO.field_0x28, 0.0f, 55.0f, 0.0f, -85.0f, g_fsHIO.field_0x07, 2); } break;