From 4fe8a9bd4680069a56135fbfda955ae43aa109f0 Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Sat, 18 May 2024 20:55:58 -0400 Subject: [PATCH 1/3] Random Work --- include/d/actor/d_a_bomb.h | 2 +- include/d/d_a_obj.h | 2 +- include/d/d_kankyo_wether.h | 1 + include/d/d_path.h | 2 +- src/d/actor/d_a_bomb3.inc | 12 ++-- src/d/d_a_obj.cpp | 107 ++++++++++++++++++++++++++++++++---- src/d/d_path.cpp | 2 +- src/d/d_save.cpp | 6 +- src/d/d_save_init.cpp | 6 +- 9 files changed, 111 insertions(+), 29 deletions(-) diff --git a/include/d/actor/d_a_bomb.h b/include/d/actor/d_a_bomb.h index 295d53ef4..90da2711d 100644 --- a/include/d/actor/d_a_bomb.h +++ b/include/d/actor/d_a_bomb.h @@ -7,7 +7,6 @@ #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" #include "m_Do/m_Do_ext.h" -#include "m_Do/m_Do_ext.h" class daBomb_fuseSmokeEcallBack : public dPa_levelEcallBack { public: @@ -99,6 +98,7 @@ public: bool procWait(); bool waitState_cannon(); void waitState_bomtyu(); + bool procSink_init(); bool procSink(); BOOL execute(); void set_wind_vec(); diff --git a/include/d/d_a_obj.h b/include/d/d_a_obj.h index 468079e44..b3f8a2e4f 100644 --- a/include/d/d_a_obj.h +++ b/include/d/d_a_obj.h @@ -16,7 +16,7 @@ namespace daObj { void make_land_effect(fopAc_ac_c*, dBgS_GndChk*, float); void get_wind_spd(fopAc_ac_c*, float); - void get_path_spd(cBgS_PolyInfo&, float); + cXyz& get_path_spd(cBgS_PolyInfo&, float); void posMoveF_stream(fopAc_ac_c*, const cXyz*, const cXyz*, float, float); void posMoveF_grade(fopAc_ac_c*, const cXyz*, const cXyz*, float, float, const cXyz*, float, float, const cXyz*); void quat_rotBaseY(Quaternion*, const cXyz&); diff --git a/include/d/d_kankyo_wether.h b/include/d/d_kankyo_wether.h index 90031f510..baef4f3b3 100644 --- a/include/d/d_kankyo_wether.h +++ b/include/d/d_kankyo_wether.h @@ -362,6 +362,7 @@ cXyz * dKyw_get_wind_vec(); void squal_proc(); void dKyw_pntwind_set(WIND_INFLUENCE*); void dKyw_pntwind_cut(WIND_INFLUENCE*); +void dKyw_pntwind_get_info(cXyz* param_0, cXyz* i_dir, f32* i_power); void dKyw_pwind_cylinder_set(WIND_INFLUENCE*); cXyz dKyw_pntwind_get_vecpow(cXyz* pPos); void dKyw_evt_wind_set(s16 i_windX, s16 i_windY); diff --git a/include/d/d_path.h b/include/d/d_path.h index 0c13fd9ab..f5644553d 100644 --- a/include/d/d_path.h +++ b/include/d/d_path.h @@ -25,6 +25,6 @@ struct dPath { dPath__Point* dPath_GetPnt(dPath*, int); dPath* dPath_GetRoomPath(int, int); dPath* dPath_GetNextRoomPath(dPath*, int); -int dPath_GetPolyRoomPathVec(cBgS_PolyInfo&, cXyz*, int*); +bool dPath_GetPolyRoomPathVec(cBgS_PolyInfo&, cXyz*, int*); #endif /* D_PATH_H */ diff --git a/src/d/actor/d_a_bomb3.inc b/src/d/actor/d_a_bomb3.inc index bf942536f..d3017414a 100644 --- a/src/d/actor/d_a_bomb3.inc +++ b/src/d/actor/d_a_bomb3.inc @@ -61,7 +61,7 @@ namespace { const daBomb_c::Attr_c daBomb_c::m_attrType[] = { {"Link", 0x8E0}, - {"VbakH", 0x800}, + {"VbakH", 0x8000}, {"Link", 0x8E0}, }; @@ -1034,6 +1034,13 @@ void daBomb_c::waitState_bomtyu() { } } +// assuming this was here and got stripped, given the leftover ptmf in .data and the other proc/proc_init pairs +bool daBomb_c::procSink_init() { + mFunc = &daBomb_c::procSink; + + return true; +} + /* 800DBC4C-800DBC5C .text procSink__8daBomb_cFv */ bool daBomb_c::procSink() { field_0x781 = 1; @@ -1356,9 +1363,6 @@ static int daBomb_Create(fopAc_ac_c* i_this) { return static_cast(i_this)->create(); } -// TODO: not sure why this appears in data -daBomb_c::procFunc dummy_5390 = &daBomb_c::procSink; - static dCcD_SrcSph l_sph_src = { // dCcD_SrcGObjInf { diff --git a/src/d/d_a_obj.cpp b/src/d/d_a_obj.cpp index 0df2b03cc..ae7542d3b 100644 --- a/src/d/d_a_obj.cpp +++ b/src/d/d_a_obj.cpp @@ -7,6 +7,8 @@ #include "d/d_bg_s_gnd_chk.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" +#include "d/d_kankyo_wether.h" +#include "d/d_path.h" #include "m_Do/m_Do_mtx.h" #include "JSystem/JParticle/JPAEmitter.h" @@ -59,35 +61,118 @@ namespace daObj { } /* 800668BC-800669E8 .text get_wind_spd__5daObjFP10fopAc_ac_cf */ - void get_wind_spd(fopAc_ac_c*, f32) { - /* Nonmatching */ + void get_wind_spd(fopAc_ac_c* param_1, f32 param_2) { + static cXyz total_spd(cXyz::Zero); + + cXyz wind = *dKyw_get_wind_vec() * dKyw_get_wind_pow(); + + cXyz pntVec; + f32 pntPow; + dKyw_pntwind_get_info(¶m_1->current.pos, &pntVec, &pntPow); + pntVec *= pntPow; + + total_spd = (wind + pntVec) * (param_2 * 0.5f); } /* 800669E8-80066B0C .text get_path_spd__5daObjFR13cBgS_PolyInfof */ - void get_path_spd(cBgS_PolyInfo&, f32) { - /* Nonmatching */ + cXyz& get_path_spd(cBgS_PolyInfo& param_1, f32 param_2) { + static cXyz path_spd(cXyz::Zero); + + int temp; + if(dPath_GetPolyRoomPathVec(param_1, &path_spd, &temp)) { + if(path_spd.normalizeRS()) { + path_spd *= param_2 * temp * (1.0f / 255.0f); + } + else { + path_spd = cXyz::Zero; + } + } + + return path_spd; } /* 80066B0C-80066B3C .text posMoveF_stream__5daObjFP10fopAc_ac_cPC4cXyzPC4cXyzff */ - void posMoveF_stream(fopAc_ac_c*, const cXyz*, const cXyz*, f32, f32) { - /* Nonmatching */ + void posMoveF_stream(fopAc_ac_c* param_1, const cXyz* param_2, const cXyz* param_3, f32 param_4, f32 param_5) { + posMoveF_grade(param_1, param_2, param_3, param_4, param_5, 0, 0.0f, 0.0f, 0); } namespace { /* 80066B3C-80066C38 .text posMoveF_resist_acc__Q25daObj21@unnamed@d_a_obj_cpp@FP4cXyzPC10fopAc_ac_cPC4cXyzff */ - void posMoveF_resist_acc(cXyz*, const fopAc_ac_c*, const cXyz*, f32, f32) { - /* Nonmatching */ + void posMoveF_resist_acc(cXyz* pDst, const fopAc_ac_c* pActor, const cXyz* pStreamSpd, f32 param_4, f32 param_5) { + cXyz delta = pActor->speed - *pStreamSpd; + + f32 dx = delta.x; + f32 dy = delta.y; + f32 dz = delta.z; + + cXyz result(dx * param_4, dy * param_4, dz * param_4); + result.x += fabsf(dx) * dx * param_5; + result.y += fabsf(dy) * dy * param_5; + result.z += fabsf(dz) * dz * param_5; + + result *= -1.0f; + *pDst = result; } /* 80066C38-80066D6C .text posMoveF_grade_acc__Q25daObj21@unnamed@d_a_obj_cpp@FP4cXyzPC10fopAc_ac_cPC4cXyzffPC4cXyzPC4cXyz */ - void posMoveF_grade_acc(cXyz*, const fopAc_ac_c*, const cXyz*, f32, f32, const cXyz*, const cXyz*) { - /* Nonmatching */ + void posMoveF_grade_acc(cXyz* pDst, const fopAc_ac_c* pActor, const cXyz* pNorm, f32 friction, f32 noGradeCos, const cXyz* pAccel0, const cXyz* pAccel1) { + *pDst = cXyz::Zero; + + if(pNorm) { + cXyz accel = *pAccel0; + accel.y = pAccel0->y + pActor->gravity; + if(pAccel1) { + accel += *pAccel1; + } + + if(accel.getDotProduct(*pNorm) < 0.0f) { + if(pNorm->y <= noGradeCos) { + cXyz temp; + cM3d_CrawVec(*pNorm, accel, &temp); + *pDst += temp; + } + + cXyz temp; + cM3d_CrawVec(*pNorm, pActor->speed, &temp); + *pDst -= temp * friction; + } + } } } /* 80066D6C-8006700C .text posMoveF_grade__5daObjFP10fopAc_ac_cPC4cXyzPC4cXyzffPC4cXyzffPC4cXyz */ - void posMoveF_grade(fopAc_ac_c*, const cXyz*, const cXyz*, f32, f32, const cXyz*, f32, f32, const cXyz*) { + void posMoveF_grade(fopAc_ac_c* pActor, const cXyz* pAddVel, const cXyz* stream_spd, f32 param_4, f32 param_5, const cXyz* pNorm, f32 friction, f32 no_grade_cos, const cXyz* pAddAccel) { /* Nonmatching */ + JUT_ASSERT(0x118, stream_spd != 0) + + cXyz resist_accel; + posMoveF_resist_acc(&resist_accel, pActor, stream_spd, param_4, param_5); + + JUT_ASSERT(0x121, (friction >= 0.0f) && (friction < 1.0f) && (no_grade_cos >= 0.0f) && (no_grade_cos <= 1.0f)) + + cXyz vel; + posMoveF_grade_acc(&vel, pActor, pNorm, param_5, param_4, &resist_accel, pAddAccel); + + f32 spf = pActor->speedF; + f32 grav = pActor->gravity; + + f32 x = spf * cM_ssin(pActor->current.angle.y) + resist_accel.x + vel.x; + f32 y = pActor->speed.y + grav + resist_accel.y + vel.y; + f32 z = spf * cM_scos(pActor->current.angle.y) + resist_accel.z + vel.z; + if(pAddAccel) { + x += pAddAccel->x; + y += pAddAccel->y; + z += pAddAccel->z; + } + + if(y < pActor->maxFallSpeed) { + y = pActor->maxFallSpeed; + } + + pActor->speed.set(x, y, z); + pActor->speedF = sqrtf(x * x + z * z); + pActor->current.angle.y = cM_atan2s(spf, grav); + fopAcM_posMove(pActor, pAddVel); } /* 8006700C-800671D4 .text quat_rotBaseY__5daObjFP10QuaternionRC4cXyz */ diff --git a/src/d/d_path.cpp b/src/d/d_path.cpp index d2185673b..e48aa6a59 100644 --- a/src/d/d_path.cpp +++ b/src/d/d_path.cpp @@ -62,7 +62,7 @@ dPath* dPath_GetNextRoomPath(dPath* path, int room_no) { } /* 80080340-800804A4 .text dPath_GetPolyRoomPathVec__FR13cBgS_PolyInfoP4cXyzPi */ -int dPath_GetPolyRoomPathVec(cBgS_PolyInfo& polyInfo, cXyz* pDstPos, int* pDstArg0) { +bool dPath_GetPolyRoomPathVec(cBgS_PolyInfo& polyInfo, cXyz* pDstPos, int* pDstArg0) { int room_no = dComIfG_Bgsp()->GetRoomId(polyInfo); int path_index = dComIfG_Bgsp()->GetRoomPathId(polyInfo); diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index 1cfe3efcb..a6190ce51 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -9,6 +9,7 @@ #include "d/d_item_data.h" #include "d/d_stage.h" #include "d/d_s_play.h" +#include "d/actor/d_a_npc_sarace.h" #include "m_Do/m_Do_audio.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTGamePad.h" @@ -17,11 +18,6 @@ #include "string.h" #include "stdio.h" -struct daNpc_Sarace_c { - static int ship_race_rupee; - static int ship_race_result; -}; - /* 800589A8-80058B54 .text init__21dSv_player_status_a_cFv */ void dSv_player_status_a_c::init() { mMaxLife = 12; diff --git a/src/d/d_save_init.cpp b/src/d/d_save_init.cpp index 15d56a929..8ec34892f 100644 --- a/src/d/d_save_init.cpp +++ b/src/d/d_save_init.cpp @@ -5,11 +5,7 @@ #include "d/d_save_init.h" #include "d/d_com_inf_game.h" - -// move later -struct daNpc_Kg1_c { - static u8 m_highscore; -}; +#include "d/actor/d_a_npc_kg1.h" /* 8005EF88-8005EFDC .text setInitEventBit__Fv */ void setInitEventBit() { From 55ff1d49230f8a32e9c05f2c21d01b119166bebe Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Sat, 18 May 2024 21:10:24 -0400 Subject: [PATCH 2/3] Minor Player Data Work Fix initialization/multiple definition errors, move some things to get sinit closer to matching --- include/d/actor/d_a_player_main_data.h | 81 +++++++++++++------------- src/d/actor/d_a_player_main.cpp | 11 ++-- src/d/actor/d_a_player_main_data.inc | 8 +-- 3 files changed, 51 insertions(+), 49 deletions(-) diff --git a/include/d/actor/d_a_player_main_data.h b/include/d/actor/d_a_player_main_data.h index f805bea12..28c5dca77 100644 --- a/include/d/actor/d_a_player_main_data.h +++ b/include/d/actor/d_a_player_main_data.h @@ -1,46 +1,47 @@ #include "d/d_cc_d.h" -char l_arcName[]; +extern char l_arcName[]; -char l_tact_event_label[]; -char l_tact_night_event_label[]; -char l_tact_wind_change_event_label[]; -char l_tact_wind_change_event_label2[]; +extern char l_tact_event_label[]; +extern char l_tact_night_event_label[]; +extern char l_tact_wind_change_event_label[]; +extern char l_tact_wind_change_event_label2[]; -const Vec l_ship_offset; -const Vec l_ship_offset2; -const Vec l_ship_offset3; -const Vec l_ship_redge; -const Vec l_ship_ledge; -const Vec l_heel_pos; -const Vec l_toe_pos; -const Vec l_eye_offset; -const Vec l_head_center_offset; -const Vec l_neck_front; -const Vec l_neck_top; -const Vec l_land_smoke_offset; -const Vec l_ms_light_local_start; -const Vec l_ms_light_local_vec; -const Vec l_tact_top; -const Vec l_crawl_start_front_offset; -const Vec l_crawl_front_offset; -const Vec l_crawl_back_offset; -const Vec l_crawl_top_offset; -const Vec l_crawl_front_up_offset; -const Vec l_crawl_back_up_offset; -const Vec l_crawl_stand_up_offset; -const Vec l_crawl_top_up_offset; -const Vec l_crawl_side_offset; -const Vec l_crawl_lside_offset; -const Vec l_crawl_rside_offset; -const Vec l_crawl_lside_front_offset; -const Vec l_crawl_rside_front_offset; -const Vec l_crawl_min_side_offset; +extern const Vec l_ship_offset; +extern const Vec l_ship_offset2; +extern const Vec l_ship_offset3; +extern const Vec l_ship_redge; +extern const Vec l_ship_ledge; +extern const Vec l_heel_pos; +extern const Vec l_toe_pos; +extern const Vec l_eye_offset; +extern const Vec l_head_center_offset; +extern const Vec l_neck_front; +extern const Vec l_neck_top; +extern const Vec l_land_smoke_offset; +extern const Vec l_ms_light_local_start; +extern const Vec l_ms_light_local_vec; +extern const Vec l_tact_top; +extern const Vec l_crawl_start_front_offset; +extern const Vec l_crawl_front_offset; +extern const Vec l_crawl_back_offset; +extern const Vec l_crawl_top_offset; +extern const Vec l_crawl_front_up_offset; +extern const Vec l_crawl_back_up_offset; +extern const Vec l_crawl_stand_up_offset; +extern const Vec l_crawl_top_up_offset; +extern const Vec l_crawl_side_offset; +extern const Vec l_crawl_lside_offset; +extern const Vec l_crawl_rside_offset; +extern const Vec l_crawl_lside_front_offset; +extern const Vec l_crawl_rside_front_offset; +extern const Vec l_crawl_min_side_offset; -static dCcD_SrcCyl l_cyl_src; -static dCcD_SrcCyl l_wind_cyl_src; -static dCcD_SrcCyl l_at_cyl_src; -static dCcD_SrcCps l_at_cps_src; -static dCcD_SrcCps l_fan_wind_cps_src; -static dCcD_SrcSph l_fan_wind_sph_src; +// I believe these won't link properly with the static variables +//extern dCcD_SrcCyl l_cyl_src; +extern dCcD_SrcCyl l_wind_cyl_src; +extern dCcD_SrcCyl l_at_cyl_src; +//extern dCcD_SrcCps l_at_cps_src; +extern dCcD_SrcCps l_fan_wind_cps_src; +extern dCcD_SrcSph l_fan_wind_sph_src; diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 4318ef85d..7b4bb24e5 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -31,11 +31,8 @@ #include "SSystem/SComponent/c_counter.h" #include "m_Do/m_Do_graphic.h" -cXyz l_hammer_splash_particle_scale(0.00002f, 0.00002f, 0.00002f); - -cXyz l_debug_keep_pos; -csXyz l_debug_current_angle; -csXyz l_debug_shape_angle; +static u8 dummy[0xC]; +JGeometry::TVec3 l_hammer_splash_particle_scale(0.67f, 0.67f, 0.67f); #include "d/actor/d_a_player_main_data.inc" @@ -193,6 +190,10 @@ static void dummydatafunc(f32* temp, f64* temp2) { OSReport("data_size < l_sanm_buffer_size"); } +cXyz l_debug_keep_pos; +csXyz l_debug_current_angle; +csXyz l_debug_shape_angle; + GXColor l_freeze_fade_color = {0xFF, 0xFF, 0xFF, 0xFF}; u8 daPy_matAnm_c::m_maba_flg; diff --git a/src/d/actor/d_a_player_main_data.inc b/src/d/actor/d_a_player_main_data.inc index f20650121..2f33f3219 100644 --- a/src/d/actor/d_a_player_main_data.inc +++ b/src/d/actor/d_a_player_main_data.inc @@ -73,7 +73,7 @@ static dCcD_SrcCyl l_cyl_src = { }, }; -static dCcD_SrcCyl l_wind_cyl_src = { +dCcD_SrcCyl l_wind_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, @@ -103,7 +103,7 @@ static dCcD_SrcCyl l_wind_cyl_src = { }, }; -static dCcD_SrcCyl l_at_cyl_src = { +dCcD_SrcCyl l_at_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, @@ -163,7 +163,7 @@ static dCcD_SrcCps l_at_cps_src = { }, }; -static dCcD_SrcCps l_fan_wind_cps_src = { +dCcD_SrcCps l_fan_wind_cps_src = { // dCcD_SrcGObjInf { /* Flags */ 0, @@ -193,7 +193,7 @@ static dCcD_SrcCps l_fan_wind_cps_src = { }, }; -static dCcD_SrcSph l_fan_wind_sph_src = { +dCcD_SrcSph l_fan_wind_sph_src = { // dCcD_SrcGObjInf { /* Flags */ 0, From 9ac4cca1ae5c2fc93092a16cd3ad270d669b949b Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Sat, 18 May 2024 22:57:05 -0400 Subject: [PATCH 3/3] Add Back Static --- include/d/actor/d_a_player_main_data.h | 5 ++--- src/d/actor/d_a_player_main_data.inc | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/d/actor/d_a_player_main_data.h b/include/d/actor/d_a_player_main_data.h index 28c5dca77..59d4482cb 100644 --- a/include/d/actor/d_a_player_main_data.h +++ b/include/d/actor/d_a_player_main_data.h @@ -38,10 +38,9 @@ extern const Vec l_crawl_lside_front_offset; extern const Vec l_crawl_rside_front_offset; extern const Vec l_crawl_min_side_offset; -// I believe these won't link properly with the static variables -//extern dCcD_SrcCyl l_cyl_src; +extern dCcD_SrcCyl l_cyl_src; extern dCcD_SrcCyl l_wind_cyl_src; extern dCcD_SrcCyl l_at_cyl_src; -//extern dCcD_SrcCps l_at_cps_src; +extern dCcD_SrcCps l_at_cps_src; extern dCcD_SrcCps l_fan_wind_cps_src; extern dCcD_SrcSph l_fan_wind_sph_src; diff --git a/src/d/actor/d_a_player_main_data.inc b/src/d/actor/d_a_player_main_data.inc index 2f33f3219..f20650121 100644 --- a/src/d/actor/d_a_player_main_data.inc +++ b/src/d/actor/d_a_player_main_data.inc @@ -73,7 +73,7 @@ static dCcD_SrcCyl l_cyl_src = { }, }; -dCcD_SrcCyl l_wind_cyl_src = { +static dCcD_SrcCyl l_wind_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, @@ -103,7 +103,7 @@ dCcD_SrcCyl l_wind_cyl_src = { }, }; -dCcD_SrcCyl l_at_cyl_src = { +static dCcD_SrcCyl l_at_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, @@ -163,7 +163,7 @@ static dCcD_SrcCps l_at_cps_src = { }, }; -dCcD_SrcCps l_fan_wind_cps_src = { +static dCcD_SrcCps l_fan_wind_cps_src = { // dCcD_SrcGObjInf { /* Flags */ 0, @@ -193,7 +193,7 @@ dCcD_SrcCps l_fan_wind_cps_src = { }, }; -dCcD_SrcSph l_fan_wind_sph_src = { +static dCcD_SrcSph l_fan_wind_sph_src = { // dCcD_SrcGObjInf { /* Flags */ 0,