From 511721f4d5f89d80462d0cceee938ce8491af18c Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Sun, 7 Jun 2026 23:14:10 -0400 Subject: [PATCH] Fix Ganondorf's Cape Texture (#2016) * Cape Texture Fix - Load pos/norm/texcoord data directly from the REL Before the hardcoded array was LE but being treated as BE, now we load it directly from the REL so treating it as BE is the correct behavior * Fix Cape Tearing - Update the cached textures when the cape is torn, reset the texture when creating the actor --- src/d/actor/d_a_mant.cpp | 268 ++++++--------------------------------- 1 file changed, 37 insertions(+), 231 deletions(-) diff --git a/src/d/actor/d_a_mant.cpp b/src/d/actor/d_a_mant.cpp index a308ad4209..47b7831c0e 100644 --- a/src/d/actor/d_a_mant.cpp +++ b/src/d/actor/d_a_mant.cpp @@ -16,12 +16,30 @@ using GameVersion = dusk::version::GameVersion; -static u8* l_Egnd_mantTEX_get() { alignas(32) static u8 buf[0x4000]; static bool _ = (dusk::LoadRelAsset(buf, "/rel/Final/Release/d_a_mant.rel", {{GameVersion::GcnUsa, 0x1C00}, {GameVersion::GcnPal, 0x1C00}}, 0x4000), true); return buf; } +// keep the original version of the cape texture const so we don't need to reload the file +static u8 const * l_Egnd_mantTEX_get() { alignas(32) static u8 buf[0x4000]; static bool _ = (dusk::LoadRelAsset(buf, "/rel/Final/Release/d_a_mant.rel", {{GameVersion::GcnUsa, 0x1C00}, {GameVersion::GcnPal, 0x1C00}}, 0x4000), true); return buf; } static u8* l_Egnd_mantTEX_U_get() { alignas(32) static u8 buf[0x4000]; static bool _ = (dusk::LoadRelAsset(buf, "/rel/Final/Release/d_a_mant.rel", {{GameVersion::GcnUsa, 0x5C00}, {GameVersion::GcnPal, 0x5C00}}, 0x4000), true); return buf; } static u8* l_Egnd_mantPAL_get() { alignas(32) static u8 buf[0x60]; static bool _ = (dusk::LoadRelAsset(buf, "/rel/Final/Release/d_a_mant.rel", {{GameVersion::GcnUsa, 0x9C00}, {GameVersion::GcnPal, 0x9C00}}, 0x60), true); return buf; } #define l_Egnd_mantTEX (l_Egnd_mantTEX_get()) #define l_Egnd_mantTEX_U (l_Egnd_mantTEX_U_get()) #define l_Egnd_mantPAL (l_Egnd_mantPAL_get()) + +// make a copy of the cape texture that can be overwritten with the tears +static u8 l_Egnd_mantTEX_copy[0x4000]; + +// keep our cached texture objects out here so that we can update them from multiple places +static bool textureObjsInitialized = false; +static TGXTlutObj tlutObj; +static TGXTexObj mainTexObj; +static TGXTexObj undersideTexObj; + +// l_pos is unused +//static f32* l_pos_get() { alignas(32) static f32 buf[507]; static bool _ = (dusk::LoadRelAsset(buf, "/rel/Final/Release/d_a_mant.rel", {{GameVersion::GcnUsa, 0xA44C}, {GameVersion::GcnPal, 0xA44C}}, sizeof(buf)), true); return buf; } +static f32* l_normal_get() { alignas(32) static f32 buf[3]; static bool _ = (dusk::LoadRelAsset(buf, "/rel/Final/Release/d_a_mant.rel", {{GameVersion::GcnUsa, 0x9C60}, {GameVersion::GcnPal, 0x9C60}}, sizeof(buf)), true); return buf; } +static f32* l_texCoord_get() { alignas(32) static f32 buf[338]; static bool _ = (dusk::LoadRelAsset(buf, "/rel/Final/Release/d_a_mant.rel", {{GameVersion::GcnUsa, 0xA458}, {GameVersion::GcnPal, 0xA458}}, sizeof(buf)), true); return buf; } +//#define l_pos (l_pos_get()) +#define l_normal (l_normal_get()) +#define l_texCoord (l_texCoord_get()) #else #include "assets/l_Egnd_mantTEX.h" @@ -31,228 +49,6 @@ static u8* l_Egnd_mantPAL_get() { alignas(32) static u8 buf[0x60]; static bo #endif #include "d/d_s_play.h" -static u32 l_pos[507] = { - 0x42480000, 0x3F5CFC93, 0xC365BD9C, 0x4226AAAA, - 0x3F5CFC93, 0xC365BD9C, 0x42055556, 0x3F5CFC93, - 0xC365BD9C, 0x41C80000, 0x3F5CFC93, 0xC365BD9C, - 0x41855556, 0x3F5CFC93, 0xC365BD9C, 0x41055556, - 0x3F5CFC93, 0xC365BD9C, 0x358637BD, 0x3F5CFC93, - 0xC365BD9C, 0xC1055554, 0x3F5CFC93, 0xC365BD9C, - 0xC1855554, 0x3F5CFC93, 0xC365BD9C, 0xC1C7FFFF, - 0x3F5CFC93, 0xC365BD9C, 0xC2055554, 0x3F5CFC93, - 0xC365BD9C, 0xC226AAAA, 0x3F5CFC93, 0xC365BD9C, - 0xC2480000, 0x3F5CFC93, 0xC365BD9C, 0x42480000, - 0x3F5CFC93, 0xC35292F0, 0x4226AAAA, 0x3F5CFC93, - 0xC35292F0, 0x42055556, 0x3F5CFC93, 0xC35292F0, - 0x41C80000, 0x3F5CFC93, 0xC35292F0, 0x41855556, - 0x3F5CFC93, 0xC35292F0, 0x41055556, 0x3F5CFC93, - 0xC35292F0, 0x358637BD, 0x3F5CFC93, 0xC35292F0, - 0xC1055554, 0x3F5CFC93, 0xC35292F0, 0xC1855554, - 0x3F5CFC93, 0xC35292F0, 0xC1C7FFFF, 0x3F5CFC93, - 0xC35292F0, 0xC2055554, 0x3F5CFC93, 0xC35292F0, - 0xC226AAAA, 0x3F5CFC93, 0xC35292F0, 0xC2480000, - 0x3F5CFC93, 0xC35292F0, 0x42480000, 0x3F5CFC93, - 0xC33F6846, 0x4226AAAA, 0x3F5CFC93, 0xC33F6846, - 0x42055556, 0x3F5CFC93, 0xC33F6846, 0x41C80000, - 0x3F5CFC93, 0xC33F6846, 0x41855556, 0x3F5CFC93, - 0xC33F6846, 0x41055556, 0x3F5CFC93, 0xC33F6846, - 0x358637BD, 0x3F5CFC93, 0xC33F6846, 0xC1055554, - 0x3F5CFC93, 0xC33F6846, 0xC1855554, 0x3F5CFC93, - 0xC33F6846, 0xC1C7FFFF, 0x3F5CFC93, 0xC33F6846, - 0xC2055554, 0x3F5CFC93, 0xC33F6846, 0xC226AAAA, - 0x3F5CFC93, 0xC33F6846, 0xC2480000, 0x3F5CFC93, - 0xC33F6846, 0x42480000, 0x3F5CFC93, 0xC32C3D9C, - 0x4226AAAA, 0x3F5CFC93, 0xC32C3D9C, 0x42055556, - 0x3F5CFC93, 0xC32C3D9C, 0x41C80000, 0x3F5CFC93, - 0xC32C3D9C, 0x41855556, 0x3F5CFC93, 0xC32C3D9C, - 0x41055556, 0x3F5CFC93, 0xC32C3D9C, 0x358637BD, - 0x3F5CFC93, 0xC32C3D9C, 0xC1055554, 0x3F5CFC93, - 0xC32C3D9C, 0xC1855554, 0x3F5CFC93, 0xC32C3D9C, - 0xC1C7FFFF, 0x3F5CFC93, 0xC32C3D9C, 0xC2055554, - 0x3F5CFC93, 0xC32C3D9C, 0xC226AAAA, 0x3F5CFC93, - 0xC32C3D9C, 0xC2480000, 0x3F5CFC93, 0xC32C3D9C, - 0x42480000, 0x3F5CFC93, 0xC31912F1, 0x4226AAAA, - 0x3F5CFC93, 0xC31912F1, 0x42055556, 0x3F5CFC93, - 0xC31912F1, 0x41C80000, 0x3F5CFC93, 0xC31912F1, - 0x41855556, 0x3F5CFC93, 0xC31912F1, 0x41055556, - 0x3F5CFC93, 0xC31912F1, 0x358637BD, 0x3F5CFC93, - 0xC31912F1, 0xC1055554, 0x3F5CFC93, 0xC31912F1, - 0xC1855554, 0x3F5CFC93, 0xC31912F1, 0xC1C7FFFF, - 0x3F5CFC93, 0xC31912F1, 0xC2055554, 0x3F5CFC93, - 0xC31912F1, 0xC226AAAA, 0x3F5CFC93, 0xC31912F1, - 0xC2480000, 0x3F5CFC93, 0xC31912F1, 0x42480000, - 0x3F5CFC93, 0xC305E846, 0x4226AAAA, 0x3F5CFC93, - 0xC305E846, 0x42055556, 0x3F5CFC93, 0xC305E846, - 0x41C80000, 0x3F5CFC93, 0xC305E846, 0x41855556, - 0x3F5CFC93, 0xC305E846, 0x41055556, 0x3F5CFC93, - 0xC305E846, 0x358637BD, 0x3F5CFC93, 0xC305E846, - 0xC1055554, 0x3F5CFC93, 0xC305E846, 0xC1855554, - 0x3F5CFC93, 0xC305E846, 0xC1C7FFFF, 0x3F5CFC93, - 0xC305E846, 0xC2055554, 0x3F5CFC93, 0xC305E846, - 0xC226AAAA, 0x3F5CFC93, 0xC305E846, 0xC2480000, - 0x3F5CFC93, 0xC305E846, 0x42480000, 0x3F5CFC93, - 0xC2E57B38, 0x4226AAAA, 0x3F5CFC93, 0xC2E57B38, - 0x42055556, 0x3F5CFC93, 0xC2E57B38, 0x41C80000, - 0x3F5CFC93, 0xC2E57B38, 0x41855556, 0x3F5CFC93, - 0xC2E57B38, 0x41055556, 0x3F5CFC93, 0xC2E57B38, - 0x358637BD, 0x3F5CFC93, 0xC2E57B38, 0xC1055554, - 0x3F5CFC93, 0xC2E57B38, 0xC1855554, 0x3F5CFC93, - 0xC2E57B38, 0xC1C7FFFF, 0x3F5CFC93, 0xC2E57B38, - 0xC2055554, 0x3F5CFC93, 0xC2E57B38, 0xC226AAAA, - 0x3F5CFC93, 0xC2E57B38, 0xC2480000, 0x3F5CFC93, - 0xC2E57B38, 0x42480000, 0x3F5CFC93, 0xC2BF25E2, - 0x4226AAAA, 0x3F5CFC93, 0xC2BF25E2, 0x42055556, - 0x3F5CFC93, 0xC2BF25E2, 0x41C80000, 0x3F5CFC93, - 0xC2BF25E2, 0x41855556, 0x3F5CFC93, 0xC2BF25E2, - 0x41055556, 0x3F5CFC93, 0xC2BF25E2, 0x358637BD, - 0x3F5CFC93, 0xC2BF25E2, 0xC1055554, 0x3F5CFC93, - 0xC2BF25E2, 0xC1855554, 0x3F5CFC93, 0xC2BF25E2, - 0xC1C7FFFF, 0x3F5CFC93, 0xC2BF25E2, 0xC2055554, - 0x3F5CFC93, 0xC2BF25E2, 0xC226AAAA, 0x3F5CFC93, - 0xC2BF25E2, 0xC2480000, 0x3F5CFC93, 0xC2BF25E2, - 0x42480000, 0x3F5CFC93, 0xC298D08D, 0x4226AAAA, - 0x3F5CFC93, 0xC298D08D, 0x42055556, 0x3F5CFC93, - 0xC298D08D, 0x41C80000, 0x3F5CFC93, 0xC298D08D, - 0x41855556, 0x3F5CFC93, 0xC298D08D, 0x41055556, - 0x3F5CFC93, 0xC298D08D, 0x358637BD, 0x3F5CFC93, - 0xC298D08D, 0xC1055554, 0x3F5CFC93, 0xC298D08D, - 0xC1855554, 0x3F5CFC93, 0xC298D08D, 0xC1C7FFFF, - 0x3F5CFC93, 0xC298D08D, 0xC2055554, 0x3F5CFC93, - 0xC298D08D, 0xC226AAAA, 0x3F5CFC93, 0xC298D08D, - 0xC2480000, 0x3F5CFC93, 0xC298D08D, 0x42480000, - 0x3F5CFC93, 0xC264F66F, 0x4226AAAA, 0x3F5CFC93, - 0xC264F66F, 0x42055556, 0x3F5CFC93, 0xC264F66F, - 0x41C80000, 0x3F5CFC93, 0xC264F66F, 0x41855556, - 0x3F5CFC93, 0xC264F66F, 0x41055556, 0x3F5CFC93, - 0xC264F66F, 0x358637BD, 0x3F5CFC93, 0xC264F66F, - 0xC1055554, 0x3F5CFC93, 0xC264F66F, 0xC1855554, - 0x3F5CFC93, 0xC264F66F, 0xC1C7FFFF, 0x3F5CFC93, - 0xC264F66F, 0xC2055554, 0x3F5CFC93, 0xC264F66F, - 0xC226AAAA, 0x3F5CFC93, 0xC264F66F, 0xC2480000, - 0x3F5CFC93, 0xC264F66F, 0x42480000, 0x3F5CFC93, - 0xC2184BC4, 0x4226AAAA, 0x3F5CFC93, 0xC2184BC4, - 0x42055556, 0x3F5CFC93, 0xC2184BC4, 0x41C80000, - 0x3F5CFC93, 0xC2184BC4, 0x41855556, 0x3F5CFC93, - 0xC2184BC4, 0x41055556, 0x3F5CFC93, 0xC2184BC4, - 0x358637BD, 0x3F5CFC93, 0xC2184BC4, 0xC1055554, - 0x3F5CFC93, 0xC2184BC4, 0xC1855554, 0x3F5CFC93, - 0xC2184BC4, 0xC1C7FFFF, 0x3F5CFC93, 0xC2184BC4, - 0xC2055554, 0x3F5CFC93, 0xC2184BC4, 0xC226AAAA, - 0x3F5CFC93, 0xC2184BC4, 0xC2480000, 0x3F5CFC93, - 0xC2184BC4, 0x42480000, 0x3F5CFC93, 0xC1974231, - 0x4226AAAA, 0x3F5CFC93, 0xC1974231, 0x42055556, - 0x3F5CFC93, 0xC1974231, 0x41C80000, 0x3F5CFC93, - 0xC1974231, 0x41855556, 0x3F5CFC93, 0xC1974231, - 0x41055556, 0x3F5CFC93, 0xC1974231, 0x358637BD, - 0x3F5CFC93, 0xC1974231, 0xC1055554, 0x3F5CFC93, - 0xC1974231, 0xC1855554, 0x3F5CFC93, 0xC1974231, - 0xC1C7FFFF, 0x3F5CFC93, 0xC1974231, 0xC2055554, - 0x3F5CFC93, 0xC1974231, 0xC226AAAA, 0x3F5CFC93, - 0xC1974231, 0xC2480000, 0x3F5CFC93, 0xC1974231, - 0x42480000, 0x3F5CFC93, 0x3E84C964, 0x4226AAAA, - 0x3F5CFC93, 0x3E84C964, 0x42055556, 0x3F5CFC93, - 0x3E84C964, 0x41C80000, 0x3F5CFC93, 0x3E84C964, - 0x41855556, 0x3F5CFC93, 0x3E84C964, 0x41055556, - 0x3F5CFC93, 0x3E84C964, 0x358637BD, 0x3F5CFC93, - 0x3E84C964, 0xC1055554, 0x3F5CFC93, 0x3E84C964, - 0xC1855554, 0x3F5CFC93, 0x3E84C964, 0xC1C7FFFF, - 0x3F5CFC93, 0x3E84C964, 0xC2055554, 0x3F5CFC93, - 0x3E84C964, 0xC226AAAA, 0x3F5CFC93, 0x3E84C964, - 0xC2480000, 0x3F5CFC93, 0x3E84C964, -}; - -static u32 l_normal[3] = { - 0x00000000, 0x3F800000, 0x00000000, -}; - -static u32 l_texCoord[338] = { - 0x00000000, 0x3F6AAAB0, 0x3DAAAA7E, 0x3F6AAAB0, - 0x3DAAAA7E, 0x3F800000, 0x00000000, 0x3F800000, - 0x3E2AAAC1, 0x3F6AAAB0, 0x3E2AAAC1, 0x3F800000, - 0x3E800000, 0x3F6AAAB0, 0x3E800000, 0x3F800000, - 0x3EAAAA9F, 0x3F6AAAB0, 0x3EAAAA9F, 0x3F800000, - 0x3ED55561, 0x3F6AAAB0, 0x3ED55561, 0x3F800000, - 0x3F000000, 0x3F6AAAB0, 0x3F000000, 0x3F800000, - 0x3F155550, 0x3F6AAAB0, 0x3F155550, 0x3F800000, - 0x3F2AAAB0, 0x3F6AAAB0, 0x3F2AAAB0, 0x3F800000, - 0x3F400000, 0x3F6AAAB0, 0x3F400000, 0x3F800000, - 0x3F555550, 0x3F6AAAB0, 0x3F555550, 0x3F800000, - 0x3F6AAAB0, 0x3F6AAAB0, 0x3F6AAAB0, 0x3F800000, - 0x3F800000, 0x3F6AAAB0, 0x3F800000, 0x3F800000, - 0x00000000, 0x3F555550, 0x3DAAAA7E, 0x3F555550, - 0x3E2AAAC1, 0x3F555550, 0x3E800000, 0x3F555550, - 0x3EAAAA9F, 0x3F555550, 0x3ED55561, 0x3F555550, - 0x3F000000, 0x3F555550, 0x3F155550, 0x3F555550, - 0x3F2AAAB0, 0x3F555550, 0x3F400000, 0x3F555550, - 0x3F555550, 0x3F555550, 0x3F6AAAB0, 0x3F555550, - 0x3F800000, 0x3F555550, 0x00000000, 0x3F400000, - 0x3DAAAA7E, 0x3F400000, 0x3E2AAAC1, 0x3F400000, - 0x3E800000, 0x3F400000, 0x3EAAAA9F, 0x3F400000, - 0x3ED55561, 0x3F400000, 0x3F000000, 0x3F400000, - 0x3F155550, 0x3F400000, 0x3F2AAAB0, 0x3F400000, - 0x3F400000, 0x3F400000, 0x3F555550, 0x3F400000, - 0x3F6AAAB0, 0x3F400000, 0x3F800000, 0x3F400000, - 0x00000000, 0x3F2AAAB0, 0x3DAAAA7E, 0x3F2AAAB0, - 0x3E2AAAC1, 0x3F2AAAB0, 0x3E800000, 0x3F2AAAB0, - 0x3EAAAA9F, 0x3F2AAAB0, 0x3ED55561, 0x3F2AAAB0, - 0x3F000000, 0x3F2AAAB0, 0x3F155550, 0x3F2AAAB0, - 0x3F2AAAB0, 0x3F2AAAB0, 0x3F400000, 0x3F2AAAB0, - 0x3F555550, 0x3F2AAAB0, 0x3F6AAAB0, 0x3F2AAAB0, - 0x3F800000, 0x3F2AAAB0, 0x00000000, 0x3F155550, - 0x3DAAAA7E, 0x3F155550, 0x3E2AAAC1, 0x3F155550, - 0x3E800000, 0x3F155550, 0x3EAAAA9F, 0x3F155550, - 0x3ED55561, 0x3F155550, 0x3F000000, 0x3F155550, - 0x3F155550, 0x3F155550, 0x3F2AAAB0, 0x3F155550, - 0x3F400000, 0x3F155550, 0x3F555550, 0x3F155550, - 0x3F6AAAB0, 0x3F155550, 0x3F800000, 0x3F155550, - 0x00000000, 0x3F000000, 0x3DAAAA7E, 0x3F000000, - 0x3E2AAAC1, 0x3F000000, 0x3E800000, 0x3F000000, - 0x3EAAAA9F, 0x3F000000, 0x3ED55561, 0x3F000000, - 0x3F000000, 0x3F000000, 0x3F155550, 0x3F000000, - 0x3F2AAAB0, 0x3F000000, 0x3F400000, 0x3F000000, - 0x3F555550, 0x3F000000, 0x3F6AAAB0, 0x3F000000, - 0x3F800000, 0x3F000000, 0x00000000, 0x3ED55561, - 0x3DAAAA7E, 0x3ED55561, 0x3E2AAAC1, 0x3ED55561, - 0x3E800000, 0x3ED55561, 0x3EAAAA9F, 0x3ED55561, - 0x3ED55561, 0x3ED55561, 0x3F000000, 0x3ED55561, - 0x3F155550, 0x3ED55561, 0x3F2AAAB0, 0x3ED55561, - 0x3F400000, 0x3ED55561, 0x3F555550, 0x3ED55561, - 0x3F6AAAB0, 0x3ED55561, 0x3F800000, 0x3ED55561, - 0x00000000, 0x3EAAAA9F, 0x3DAAAA7E, 0x3EAAAA9F, - 0x3E2AAAC1, 0x3EAAAA9F, 0x3E800000, 0x3EAAAA9F, - 0x3EAAAA9F, 0x3EAAAA9F, 0x3ED55561, 0x3EAAAA9F, - 0x3F000000, 0x3EAAAA9F, 0x3F155550, 0x3EAAAA9F, - 0x3F2AAAB0, 0x3EAAAA9F, 0x3F400000, 0x3EAAAA9F, - 0x3F555550, 0x3EAAAA9F, 0x3F6AAAB0, 0x3EAAAA9F, - 0x3F800000, 0x3EAAAA9F, 0x00000000, 0x3E800000, - 0x3DAAAA7E, 0x3E800000, 0x3E2AAAC1, 0x3E800000, - 0x3E800000, 0x3E800000, 0x3EAAAA9F, 0x3E800000, - 0x3ED55561, 0x3E800000, 0x3F000000, 0x3E800000, - 0x3F155550, 0x3E800000, 0x3F2AAAB0, 0x3E800000, - 0x3F400000, 0x3E800000, 0x3F555550, 0x3E800000, - 0x3F6AAAB0, 0x3E800000, 0x3F800000, 0x3E800000, - 0x00000000, 0x3E2AAAC1, 0x3DAAAA7E, 0x3E2AAAC1, - 0x3E2AAAC1, 0x3E2AAAC1, 0x3E800000, 0x3E2AAAC1, - 0x3EAAAA9F, 0x3E2AAAC1, 0x3ED55561, 0x3E2AAAC1, - 0x3F000000, 0x3E2AAAC1, 0x3F155550, 0x3E2AAAC1, - 0x3F2AAAB0, 0x3E2AAAC1, 0x3F400000, 0x3E2AAAC1, - 0x3F555550, 0x3E2AAAC1, 0x3F6AAAB0, 0x3E2AAAC1, - 0x3F800000, 0x3E2AAAC1, 0x00000000, 0x3DAAAA7E, - 0x3DAAAA7E, 0x3DAAAA7E, 0x3E2AAAC1, 0x3DAAAA7E, - 0x3E800000, 0x3DAAAA7E, 0x3EAAAA9F, 0x3DAAAA7E, - 0x3ED55561, 0x3DAAAA7E, 0x3F000000, 0x3DAAAA7E, - 0x3F155550, 0x3DAAAA7E, 0x3F2AAAB0, 0x3DAAAA7E, - 0x3F400000, 0x3DAAAA7E, 0x3F555550, 0x3DAAAA7E, - 0x3F6AAAB0, 0x3DAAAA7E, 0x3F800000, 0x3DAAAA7E, - 0x00000000, 0x00000000, 0x3DAAAA7E, 0x00000000, - 0x3E2AAAC1, 0x00000000, 0x3E800000, 0x00000000, - 0x3EAAAA9F, 0x00000000, 0x3ED55561, 0x00000000, - 0x3F000000, 0x00000000, 0x3F155550, 0x00000000, - 0x3F2AAAB0, 0x00000000, 0x3F400000, 0x00000000, - 0x3F555550, 0x00000000, 0x3F6AAAB0, 0x00000000, - 0x3F800000, 0x00000000, -}; - #if TARGET_PC using GameVersion = dusk::version::GameVersion; @@ -307,7 +103,7 @@ static void mant_build_anchor_frame(const cXyz& anchor_a, const cXyz& anchor_b, void daMant_packet_c::draw() { ZoneScoped; #if TARGET_PC - void* image = l_Egnd_mantTEX; + void* image = l_Egnd_mantTEX_copy; void* lut = l_Egnd_mantPAL; #else void* image = tex_d[0]; @@ -389,12 +185,12 @@ void daMant_packet_c::draw() { } } GXSETARRAY(GX_VA_POS, draw_pos, sizeof(mNrm[0]), 12, true); - GXSETARRAY(GX_VA_NRM, &l_normal, sizeof(l_normal), 12, false); + GXSETARRAY(GX_VA_NRM, l_normal, sizeof(f32) * 3, 12, false); #else GXSETARRAY(GX_VA_POS, this->getPos(), sizeof(mPos[0]), 12, true); GXSETARRAY(GX_VA_NRM, this->getNrm(), sizeof(mNrm[0]), 12, true); #endif - GXSETARRAY(GX_VA_TEX0, &l_texCoord, sizeof(l_texCoord), 8, false); // TODO: set to true when converted to float literals + GXSETARRAY(GX_VA_TEX0, l_texCoord, sizeof(f32) * 338, 8, false); GXSetZCompLoc(0); GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); @@ -420,10 +216,6 @@ void daMant_packet_c::draw() { GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); #if TARGET_PC - static bool textureObjsInitialized = false; - static TGXTlutObj tlutObj; - static TGXTexObj mainTexObj; - static TGXTexObj undersideTexObj; if (!textureObjsInitialized) { GXInitTlutObj(&tlutObj, lut, GX_TL_RGB5A3, 0x100); GXInitTexObjCI(&mainTexObj, image, 0x80, 0x80, GX_TF_C8, GX_CLAMP, GX_CLAMP, 0, 0); @@ -917,8 +709,14 @@ static int daMant_Execute(mant_class* i_this) { if (0 <= uVar1 && uVar1 < 0x4000) { int iVar5 = (uVar1 & 7) + (uVar1 & 0x78) * 4 + (uVar1 >> 4 & 0x18) + (uVar1 & 0x3e00); - l_Egnd_mantTEX[iVar5] = l_Egnd_mantTEX_U[iVar5] = 0; + DUSK_IF_ELSE(l_Egnd_mantTEX_copy[iVar5], l_Egnd_mantTEX[iVar5]) = l_Egnd_mantTEX_U[iVar5] = 0; } + +#if TARGET_PC + if(textureObjsInitialized) { + GXInitTlutObjData(&tlutObj, l_Egnd_mantPAL); // make sure the cached textures are updated + } +#endif } } @@ -956,6 +754,14 @@ static int daMant_Create(fopAc_ac_c* i_this) { l_Egnd_mantTEX_U[i] = 6; } +#if TARGET_PC + memcpy(l_Egnd_mantTEX_copy, l_Egnd_mantTEX, sizeof(l_Egnd_mantTEX_copy)); + + if(textureObjsInitialized) { + GXInitTlutObjData(&tlutObj, l_Egnd_mantPAL); // make sure the cached textures are updated + } +#endif + lbl_277_bss_0 = 0; daMant_Execute(m_this); return 4;