diff --git a/include/d/actor/d_grass.h b/include/d/actor/d_grass.h index 56cef00592..5a152ed478 100644 --- a/include/d/actor/d_grass.h +++ b/include/d/actor/d_grass.h @@ -106,6 +106,11 @@ public: /* 0x1D70C */ u8* mp_Mkusa_9q_cDL; /* 0x1D710 */ u32 m_Mkusa_9q_cDL_size; /* 0x1D714 */ s16 field_0x1d714; + +#if TARGET_PC + GXTexObj mTexObj_l_M_Hijiki00TEX{}; + GXTexObj mTexObj_l_M_kusa05_RGBATEX{}; +#endif }; // Size: 0x1D718 STATIC_ASSERT(sizeof(dGrass_packet_c) == 0x1D718); diff --git a/src/d/actor/d_a_grass.cpp b/src/d/actor/d_a_grass.cpp index 1cb84ef06f..1668386edf 100644 --- a/src/d/actor/d_a_grass.cpp +++ b/src/d/actor/d_a_grass.cpp @@ -81,6 +81,10 @@ void daGrass_c::deleteGrass() { } dGrass_packet_c::~dGrass_packet_c() { +#if TARGET_PC + GXDestroyTexObj(&mTexObj_l_M_kusa05_RGBATEX); + GXDestroyTexObj(&mTexObj_l_M_Hijiki00TEX); +#endif } void daGrass_c::executeGrass() { diff --git a/src/d/actor/d_a_horse.cpp b/src/d/actor/d_a_horse.cpp index 08a6642626..14090b75d6 100644 --- a/src/d/actor/d_a_horse.cpp +++ b/src/d/actor/d_a_horse.cpp @@ -3861,6 +3861,11 @@ int daHorse_c::procStop() { } f32 var_f30; + + #if AVOID_UB + var_f30 = 0; + #endif + if (frame_ctrl->checkAnmEnd() || checkEndResetStateFlg0(ERFLG0_CUT_TURN_CANCEL)) { if (m_demoMode == 8 || m_demoMode == 16) { dComIfGp_evmng_cutEnd(m_demoStaffId); diff --git a/src/d/actor/d_grass.inc b/src/d/actor/d_grass.inc index 020f504f81..2078e917ad 100644 --- a/src/d/actor/d_grass.inc +++ b/src/d/actor/d_grass.inc @@ -449,6 +449,31 @@ dGrass_packet_c::dGrass_packet_c() { mp_normal = (Vec*)&l_normal; mp_colors = (GXColor*)l_color; mp_texCoords = (Vec*)l_texCoord; + +#if TARGET_LITTLE_ENDIAN + static bool initialized = false; + if (!initialized) { + for (int i = 0; i < (ARRAY_SIZE(l_pos) / sizeof(Vec)); i++) { + be_swap(mp_pos[i]); + } + for (int i = 0; i < (ARRAY_SIZE(l_texCoord) / sizeof(Vec)); i++) { + be_swap(mp_texCoords[i]); + } + + initialized = true; + } +#endif + +#if TARGET_PC + GXInitTexObj(&mTexObj_l_M_kusa05_RGBATEX, l_M_kusa05_RGBATEX, + l_M_kusa05_RGBATEX__width, l_M_kusa05_RGBATEX__height, GX_TF_RGB5A3, GX_REPEAT, GX_CLAMP, GX_FALSE + ); + + GXInitTexObj(&mTexObj_l_M_Hijiki00TEX, l_M_Hijiki00TEX, + l_M_Hijiki00TEX__width, l_M_Hijiki00TEX__height, GX_TF_RGB5A3, GX_REPEAT, GX_CLAMP, GX_FALSE + ); +#endif + mp_kusa9q_DL = l_kusa9q_matDL; m_kusa9q_DL_size = 0xA0; mp_kusa9q_14_DL = l_kusa9q_l4_matDL; @@ -593,12 +618,18 @@ void dGrass_packet_c::draw() { } if (var_r29->field_0x05 <= 3 || var_r29->field_0x05 >= 10) { +#if TARGET_PC + GXLoadTexObj(&mTexObj_l_M_kusa05_RGBATEX, GX_TEXMAP0); +#endif if (sp48 <= 3) { GXCallDisplayList(mp_kusa9q_14_DL, m_kusa9q_DL_14_size); } else { GXCallDisplayList(mp_kusa9q_DL, m_kusa9q_DL_size); } } else { +#if TARGET_PC + GXLoadTexObj(&mTexObj_l_M_Hijiki00TEX, GX_TEXMAP0); +#endif GXCallDisplayList(l_Tengusa_matDL, 0xA0); }