diff --git a/config/GZ2E01/symbols.txt b/config/GZ2E01/symbols.txt index 8aee972b231..6b6b4b26abe 100644 --- a/config/GZ2E01/symbols.txt +++ b/config/GZ2E01/symbols.txt @@ -21955,8 +21955,8 @@ dShopSystem_item_count = .sbss:0x8045105C; // type:object size:0x4 scope:global data_80451060 = .sbss:0x80451060; // type:object size:0x1 scope:local align:1 data:byte dShopSystem_camera_count = .sbss:0x80451064; // type:object size:0x4 scope:global align:4 data:4byte S_fuwan_sin$5904 = .sbss:0x80451068; // type:object size:0x2 scope:local align:4 data:2byte -data_8045106A = .sbss:0x8045106A; // type:object size:0x1 data:byte -data_8045106B = .sbss:0x8045106B; // type:object size:0x5 data:byte +init$4995 = .sbss:0x8045106A; // type:object size:0x1 data:byte +init$4999 = .sbss:0x8045106B; // type:object size:0x1 data:byte init$localstatic4$draw__10dThunder_cFv = .sbss:0x80451070; // type:object size:0x1 scope:weak align:1 data:byte init$localstatic6$draw__10dThunder_cFv = .sbss:0x80451071; // type:object size:0x1 scope:weak align:1 data:byte player_px = .sbss:0x80451078; // type:object size:0x4 scope:global align:4 data:float diff --git a/config/GZ2J01/symbols.txt b/config/GZ2J01/symbols.txt index 945692afd70..1e959fa7beb 100644 --- a/config/GZ2J01/symbols.txt +++ b/config/GZ2J01/symbols.txt @@ -21971,8 +21971,8 @@ dShopSystem_item_count = .sbss:0x8044B19C; // type:object size:0x4 scope:global data_80451060 = .sbss:0x8044B1A0; // type:object size:0x1 scope:local align:1 data:byte dShopSystem_camera_count = .sbss:0x8044B1A4; // type:object size:0x4 scope:global align:4 data:4byte S_fuwan_sin$5904 = .sbss:0x8044B1A8; // type:object size:0x2 scope:local align:4 data:2byte -data_8045106A = .sbss:0x8044B1AA; // type:object size:0x1 data:byte -data_8045106B = .sbss:0x8044B1AB; // type:object size:0x5 data:byte +init$4995 = .sbss:0x8044B1AA; // type:object size:0x1 data:byte +init$4999 = .sbss:0x8044B1AB; // type:object size:0x1 data:byte init$localstatic4$draw__10dThunder_cFv = .sbss:0x8044B1B0; // type:object size:0x1 scope:weak align:1 data:byte init$localstatic6$draw__10dThunder_cFv = .sbss:0x8044B1B1; // type:object size:0x1 scope:weak align:1 data:byte player_px = .sbss:0x8044B1B8; // type:object size:0x4 scope:global align:4 data:float diff --git a/config/GZ2P01/symbols.txt b/config/GZ2P01/symbols.txt index 8b291b412dd..4d5db5621ab 100644 --- a/config/GZ2P01/symbols.txt +++ b/config/GZ2P01/symbols.txt @@ -21978,8 +21978,8 @@ dShopSystem_item_count = .sbss:0x8045301C; // type:object size:0x4 scope:global lbl_80453020 = .sbss:0x80453020; // type:object size:0x1 data:byte dShopSystem_camera_count = .sbss:0x80453024; // type:object size:0x4 scope:global align:4 data:4byte S_fuwan_sin$5904 = .sbss:0x80453028; // type:object size:0x2 scope:local align:4 data:2byte -lbl_8045302A = .sbss:0x8045302A; // type:object size:0x1 data:byte -lbl_8045302B = .sbss:0x8045302B; // type:object size:0x5 data:byte +init$4995 = .sbss:0x8045302A; // type:object size:0x1 data:byte +init$4999 = .sbss:0x8045302B; // type:object size:0x1 data:byte init$localstatic4$draw__10dThunder_cFv = .sbss:0x80453030; // type:object size:0x1 data:byte init$localstatic6$draw__10dThunder_cFv = .sbss:0x80453031; // type:object size:0x1 data:byte player_px = .sbss:0x80453038; // type:object size:0x4 scope:global align:4 data:float diff --git a/configure.py b/configure.py index b9f328c58b0..df9467f9e32 100755 --- a/configure.py +++ b/configure.py @@ -702,7 +702,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "d/d_shop_item_ctrl.cpp"), Object(MatchingFor(ALL_GCN), "d/d_shop_system.cpp"), Object(MatchingFor(ALL_GCN), "d/d_gameover.cpp"), - Object(NonMatching, "d/d_kankyo.cpp"), + Object(MatchingFor(ALL_GCN), "d/d_kankyo.cpp"), Object(MatchingFor(ALL_GCN), "d/d_kyeff.cpp"), Object(MatchingFor(ALL_GCN, "Shield"), "d/d_kyeff2.cpp"), Object(MatchingFor(ALL_GCN), "d/d_ky_thunder.cpp"), diff --git a/include/d/d_bg_s_chk.h b/include/d/d_bg_s_chk.h index 7f70b9c6392..d8cfed45dd0 100644 --- a/include/d/d_bg_s_chk.h +++ b/include/d/d_bg_s_chk.h @@ -1,8 +1,8 @@ #ifndef D_BG_D_BG_S_CHK_H #define D_BG_D_BG_S_CHK_H -#include "d/d_bg_s_grp_pass_chk.h" #include "d/d_bg_s_poly_pass_chk.h" +#include "d/d_bg_s_grp_pass_chk.h" class dBgS_Chk : public dBgS_PolyPassChk, public dBgS_GrpPassChk { public: diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 4f2666ecb1d..376fb1e8d32 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -2,11 +2,13 @@ #define D_KANKYO_D_KANKYO_H #include "JSystem/J3DGraphBase/J3DStruct.h" -#include "d/d_kankyo_wether.h" +#include "JSystem/JHostIO/JORReflexible.h" +#include "d/d_bg_s_gnd_chk.h" #include "d/d_kankyo_data.h" +#include "d/d_kankyo_tev_str.h" +#include "d/d_kankyo_wether.h" #include "f_pc/f_pc_base.h" #include "m_Do/m_Do_ext.h" -#include "JSystem/JHostIO/JORReflexible.h" class JPABaseEmitter; class cBgS_PolyInfo; @@ -145,43 +147,6 @@ struct LightStatus { /* 0xE4 */ f32 field_0xe4; }; // Size: 0xE8 -class dKy_tevstr_c { -public: - // Supposedly exists but didn't work. Might be too big to inline. - // See dPa_modelEcallBack::model_c::set. - // inline dKy_tevstr_c& operator=(const dKy_tevstr_c& b); - - /* 0x000 */ J3DLightObj mLightObj; - /* 0x074 */ J3DLightObj mLights[6]; - /* 0x32C */ cXyz field_0x32c; // some light pos, unsure how it differs - /* 0x338 */ cXyz mLightPosWorld; - /* 0x344 */ f32 field_0x344; - /* 0x348 */ GXColorS10 AmbCol; - /* 0x350 */ GXColorS10 FogCol; - /* 0x358 */ GXColorS10 TevColor; - /* 0x360 */ GXColor TevKColor; - /* 0x364 */ GXColor mLightInf; - /* 0x368 */ f32 mFogStartZ; - /* 0x36C */ f32 mFogEndZ; - /* 0x370 */ f32 pat_ratio; - /* 0x374 */ f32 field_0x374; - /* 0x378 */ u16 Material_id; // Used for some sort of special material handling when non-0 - /* 0x37A */ u8 Type; - /* 0x37B */ u8 mInitTimer; - /* 0x37C */ u8 UseCol; - /* 0x37D */ u8 PrevCol; - /* 0x37E */ u8 wether_pat1; - /* 0x37F */ u8 wether_pat0; - /* 0x380 */ s8 room_no; // Room Color - /* 0x381 */ u8 YukaCol; // Floor (Poly) Color - /* 0x382 */ u8 mLightMode; - /* 0x383 */ u8 Material_use_fg; - /* 0x384 */ u8 field_0x384; - /* 0x385 */ u8 field_0x385; -}; // Size = 0x388 - -STATIC_ASSERT(sizeof(dKy_tevstr_c) == 0x388); - class fopAc_ac_c; class dKyd_lightSchejule; class stage_palette_info_class; @@ -514,6 +479,26 @@ inline dScnKy_env_light_c* dKy_getEnvlight() { return &g_env_light; } +class dKankyo_ParticlelightHIO_c : public JORReflexible { +public: + dKankyo_ParticlelightHIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + virtual ~dKankyo_ParticlelightHIO_c() {} + + /* 0x04 */ u8 field_0x4; + /* 0x05 */ u8 field_0x5; + /* 0x06 */ GXColor prim_col; + /* 0x0A */ GXColor env_col; + /* 0x10 */ f32 blend_ratio; + /* 0x14 */ int field_0x14; + /* 0x18 */ u8 type; + /* 0x19 */ u8 field_0x19; + /* 0x1A */ u8 field_0x1a; + /* 0x1B */ u8 field_0x1B[0x20 - 0x1B]; +}; + class dKankyo_lightHIO_c : public JORReflexible { public: dKankyo_lightHIO_c(); @@ -892,6 +877,22 @@ public: /* 0x1C */ dKy_flush_info step4; }; +class dKankyo_dungeonlightHIO_c : public JORReflexible { +public: + dKankyo_dungeonlightHIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + virtual ~dKankyo_dungeonlightHIO_c() {} + + /* 0x4 */ u8 field_0x4; + /* 0x5 */ u8 field_0x5; + /* 0x6 */ u8 displayDebugSphere; + /* 0x7 */ u8 usedLights; + /* 0x8 */ u8 field_0x8; + /* 0x9 */ u8 field_0x9; +}; + class dKankyo_demolightHIO_c : public JORReflexible { public: dKankyo_demolightHIO_c(); @@ -934,42 +935,6 @@ public: /* 0x40 */ s16 minigame_high_wind_duration; }; -class dKankyo_dungeonlightHIO_c : public JORReflexible { -public: - dKankyo_dungeonlightHIO_c(); - - void listenPropertyEvent(const JORPropertyEvent*); - void genMessage(JORMContext*); - virtual ~dKankyo_dungeonlightHIO_c() {} - - /* 0x4 */ u8 field_0x4; - /* 0x5 */ u8 field_0x5; - /* 0x6 */ u8 displayDebugSphere; - /* 0x7 */ u8 usedLights; - /* 0x8 */ u8 field_0x8; - /* 0x9 */ u8 field_0x9; -}; - -class dKankyo_ParticlelightHIO_c : public JORReflexible { -public: - dKankyo_ParticlelightHIO_c(); - - void listenPropertyEvent(const JORPropertyEvent*); - void genMessage(JORMContext*); - virtual ~dKankyo_ParticlelightHIO_c() {} - - /* 0x04 */ u8 field_0x4; - /* 0x05 */ u8 field_0x5; - /* 0x06 */ GXColor prim_col; - /* 0x0A */ GXColor env_col; - /* 0x10 */ f32 blend_ratio; - /* 0x14 */ int field_0x14; - /* 0x18 */ u8 type; - /* 0x19 */ u8 field_0x19; - /* 0x1A */ u8 field_0x1a; - /* 0x1B */ u8 field_0x1B[0x20 - 0x1B]; -}; - class dKankyo_HIO_c : public JORReflexible { public: dKankyo_HIO_c(); diff --git a/include/d/d_kankyo_tev_str.h b/include/d/d_kankyo_tev_str.h new file mode 100644 index 00000000000..2021dddd9ab --- /dev/null +++ b/include/d/d_kankyo_tev_str.h @@ -0,0 +1,44 @@ +#ifndef D_D_KANKYO_TEV_STR +#define D_D_KANKYO_TEV_STR + +#include "JSystem/J3DGraphBase/J3DStruct.h" +#include "m_Do/m_Do_ext.h" + +class dKy_tevstr_c { +public: + // Supposedly exists but didn't work. Might be too big to inline. + // See dPa_modelEcallBack::model_c::set. + // inline dKy_tevstr_c& operator=(const dKy_tevstr_c& b); + + /* 0x000 */ J3DLightObj mLightObj; + /* 0x074 */ J3DLightObj mLights[6]; + /* 0x32C */ cXyz field_0x32c; // some light pos, unsure how it differs + /* 0x338 */ cXyz mLightPosWorld; + /* 0x344 */ f32 field_0x344; + /* 0x348 */ GXColorS10 AmbCol; + /* 0x350 */ GXColorS10 FogCol; + /* 0x358 */ GXColorS10 TevColor; + /* 0x360 */ GXColor TevKColor; + /* 0x364 */ GXColor mLightInf; + /* 0x368 */ f32 mFogStartZ; + /* 0x36C */ f32 mFogEndZ; + /* 0x370 */ f32 pat_ratio; + /* 0x374 */ f32 field_0x374; + /* 0x378 */ u16 Material_id; // Used for some sort of special material handling when non-0 + /* 0x37A */ u8 Type; + /* 0x37B */ u8 mInitTimer; + /* 0x37C */ u8 UseCol; + /* 0x37D */ u8 PrevCol; + /* 0x37E */ u8 wether_pat1; + /* 0x37F */ u8 wether_pat0; + /* 0x380 */ s8 room_no; // Room Color + /* 0x381 */ u8 YukaCol; // Floor (Poly) Color + /* 0x382 */ u8 mLightMode; + /* 0x383 */ u8 Material_use_fg; + /* 0x384 */ u8 field_0x384; + /* 0x385 */ u8 field_0x385; +}; // Size = 0x388 + +STATIC_ASSERT(sizeof(dKy_tevstr_c) == 0x388); + +#endif /* D_D_KANKYO_TEV_STR */ diff --git a/include/d/dolzel_base.pch b/include/d/dolzel_base.pch index 1871c1bf3d1..22d34b855e6 100644 --- a/include/d/dolzel_base.pch +++ b/include/d/dolzel_base.pch @@ -14,10 +14,11 @@ #include "string.h" // IWYU pragma: export #include "JSystem/JUtility/JUTGamePad.h" // IWYU pragma: export #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" // IWYU pragma: export +#include "JSystem/JHostIO/JORReflexible.h" // IWYU pragma: export #include "SSystem/SComponent/c_m3d_g_pla.h" // IWYU pragma: export #include "SSystem/SComponent/c_bg_s_chk.h" // IWYU pragma: export #include "f_op/f_op_actor.h" // IWYU pragma: export -#include "d/d_bg_s_poly_pass_chk.h" // IWYU pragma: export +#include "d/d_bg_s_gnd_chk.h" // IWYU pragma: export #include "d/d_bg_s_chk.h" // IWYU pragma: export #include "d/d_bg_w.h" // IWYU pragma: export #include "d/d_com_inf_game.h" // IWYU pragma: export diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 52d10ce1d40..aff17d28265 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -1,7 +1,7 @@ #ifndef F_OP_ACTOR_H_ #define F_OP_ACTOR_H_ -#include "d/d_kankyo.h" +#include "d/d_kankyo_tev_str.h" #include "f_pc/f_pc_leaf.h" #include "global.h" diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 54716d735a1..c798f70c18b 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -8,6 +8,7 @@ #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_kytag08.h" #include "d/actor/d_a_player.h" +#include "d/d_bg_s_gnd_chk.h" #include "d/d_debug_viewer.h" #include "d/d_debug_pad.h" #include "d/d_kankyo_rain.h" @@ -7511,6 +7512,13 @@ void dKy_ParticleColor_get_base(cXyz* param_0, dKy_tevstr_c* param_1, GXColor* p param_3->b = (sp18 * (sp50.b * (1.0f - param_6))) + (param_5->b * param_6); } +// Dummy data to force 0x30 bytes of padding between parcent_table and dScnKy_env_light's vtable. +// This extra space is likely allocated for stripped vtables - debug indicates that dBgS_ObjGndChk +// is used somewhere which has a 0x30 byte vtable, but I can't find a way to generate it without +// also reserving space for cBgS_GrpPassChk and cBgS_PolyPassChk which ends up making .data too +// large. +static u8 dummy_padding_data_0x354[0x30] = {}; + /* 801A9BE4-801A9CBC 1A4524 00D8+00 0/0 3/3 0/0 .text * dKy_ParticleColor_get_actor__FP4cXyzP12dKy_tevstr_cP8_GXColorP8_GXColorP8_GXColorP8_GXColorf */ void dKy_ParticleColor_get_actor(cXyz* param_0, dKy_tevstr_c* tevstr_p, GXColor* param_2, @@ -7860,12 +7868,12 @@ void dKy_WaterIn_Light_set() { sp8 = 3; } -#if PLATFORM_SHIELD - for (int i = 0; i < 6; i++) +#if PLATFORM_GCN +#define WATERIN_LIGHT_SET_LOOP_MAX 1 #else - int i = 0; +#define WATERIN_LIGHT_SET_LOOP_MAX 6 #endif - { + for (int i = 0; i < WATERIN_LIGHT_SET_LOOP_MAX; i++) { if (kankyo->field_0x0c18[i].field_0x26 != 1) { dKy_twi_wolflight_set(i); kankyo->field_0x0c18[i].mColor.r = 0x8A; @@ -7977,9 +7985,7 @@ void dKy_WaterIn_Light_set() { kankyo->field_0x0c18[i].field_0x26 = 1; sp10 = 1; -#if PLATFORM_SHIELD break; -#endif } } }