diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2022-01-25 12:24:14 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-25 21:24:14 +0100 |
| commit | 612f26c132280da43ecfa5fa8c8cc32966f06eb6 (patch) | |
| tree | ac20d071712cf830ec526222c98d340d90721f77 /src/d/d_eye_hl.cpp | |
| parent | 6f4d068f1d7c5a9f25f1920e64e5b10dc29aea07 (diff) | |
d_kankyo_wether / d_eye_hl (#178)
* d_eye_hl / d_kankyo_wether wip
* more d_kankyo_wether + format
* remove asm
* some d_kankyo wip
* fix dccs vtable
* some m_Do_graphic / d_meter2_draw work
Diffstat (limited to 'src/d/d_eye_hl.cpp')
| -rw-r--r-- | src/d/d_eye_hl.cpp | 119 |
1 files changed, 76 insertions, 43 deletions
diff --git a/src/d/d_eye_hl.cpp b/src/d/d_eye_hl.cpp index 693147dc5a..394740abb3 100644 --- a/src/d/d_eye_hl.cpp +++ b/src/d/d_eye_hl.cpp @@ -4,7 +4,10 @@ // #include "d/d_eye_hl.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/string.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" +#include "dolphin/os/OS.h" #include "dolphin/types.h" // @@ -26,52 +29,45 @@ extern "C" extern u8 struct_80450FBC[4]; // External References: // -extern "C" void OSReport_Error(); extern "C" void getName__10JUTNameTabCFUs(); extern "C" void _savegpr_27(); extern "C" void _restgpr_27(); -extern "C" void strcmp(); -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_envHIO[68]; // // Declarations: // -/* ############################################################################################## */ -/* 8037B100-8037B100 007760 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037B100 = - "目のハイライトテクスチャーがありません!\n"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_8037B12A = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; -#pragma pop - /* 8009C964-8009CA28 0972A4 00C4+00 0/0 2/2 0/0 .text entry__8dEyeHL_cFP12J3DModelDataPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_c::entry(J3DModelData* param_0, char const* param_1) { - nofralloc -#include "asm/d/d_eye_hl/entry__8dEyeHL_cFP12J3DModelDataPCc.s" +void dEyeHL_c::entry(J3DModelData* p_mData, char const* name) { + J3DTexture* tex = p_mData->getTexture(); + JUTNameTab* tex_nametab = p_mData->getTextureName(); + + if (tex != NULL && tex_nametab != NULL) { + for (u16 i = 0; i < tex->getNum(); i++) { + const char* tex_name = tex_nametab->getName(i); + + if (tex_name != NULL && !strcmp(tex_name, name)) { + m_timg = tex->getResTIMG(i); + m_lodBias = m_timg->LODBias; + dEyeHL_mng_c::entry(this); + return; + } + } + } + // "Eye Highlight Texture doesn't exist!\n" + OSReport_Error("目のハイライトテクスチャーがありません!\n"); } -#pragma pop /* 8009CA28-8009CA48 097368 0020+00 0/0 3/3 0/0 .text remove__8dEyeHL_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_c::remove() { - nofralloc -#include "asm/d/d_eye_hl/remove__8dEyeHL_cFv.s" +void dEyeHL_c::remove() { + dEyeHL_mng_c::remove(this); } -#pragma pop /* ############################################################################################## */ /* 80450FA8-80450FB0 0004A8 0004+04 3/3 0/0 0/0 .sbss m_obj__12dEyeHL_mng_c */ -u8 dEyeHL_mng_c::m_obj[4 + 4 /* padding */]; +dEyeHL_mng_c* dEyeHL_mng_c::m_obj; /* 80452C10-80452C14 001210 0004+00 1/1 0/0 0/0 .sdata2 @3862 */ SECTION_SDATA2 static f32 lit_3862 = 2.0f; @@ -79,7 +75,30 @@ SECTION_SDATA2 static f32 lit_3862 = 2.0f; /* 80452C14-80452C18 001214 0004+00 1/1 0/0 0/0 .sdata2 @3863 */ SECTION_SDATA2 static f32 lit_3863 = 45.0f; +inline BOOL dComIfGp_event_runCheck() { + return g_dComIfG_gameInfo.play.getEvent().runCheck(); +} + /* 8009CA48-8009CB14 097388 00CC+00 0/0 1/1 0/0 .text update__12dEyeHL_mng_cFv */ +// small issue with cLib_minMaxLimit +#ifdef NONMATCHING +void dEyeHL_mng_c::update() { + dEyeHL_mng_c* obj = m_obj; + + if (g_envHIO[0x10] == 0 || !dComIfGp_event_runCheck()) { + for (; obj != NULL; obj = obj->m_next) { + obj->m_timg->LODBias = obj->m_lodBias; + } + } else { + s16 tmp = 2.0f * (dComIfGd_getView()->field_0xd0 - 45.0f); + for (; obj != NULL; obj = obj->m_next) { + ResTIMG* timg = obj->m_timg; + timg->LODBias = obj->m_lodBias + tmp; + timg->LODBias = cLib_minMaxLimit(timg->LODBias, (s16)-400, (s16)399); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -88,27 +107,41 @@ asm void dEyeHL_mng_c::update() { #include "asm/d/d_eye_hl/update__12dEyeHL_mng_cFv.s" } #pragma pop +#endif /* 8009CB14-8009CB34 097454 0020+00 1/1 0/0 0/0 .text entry__12dEyeHL_mng_cFP8dEyeHL_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_mng_c::entry(dEyeHL_c* param_0) { - nofralloc -#include "asm/d/d_eye_hl/entry__12dEyeHL_mng_cFP8dEyeHL_c.s" +void dEyeHL_mng_c::entry(dEyeHL_c* i_obj) { + if (m_obj != NULL) { + m_obj->m_pre = i_obj; + } + i_obj->m_next = m_obj; + m_obj = i_obj; } -#pragma pop /* 8009CB34-8009CB88 097474 0054+00 1/1 0/0 0/0 .text remove__12dEyeHL_mng_cFP8dEyeHL_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dEyeHL_mng_c::remove(dEyeHL_c* param_0) { - nofralloc -#include "asm/d/d_eye_hl/remove__12dEyeHL_mng_cFP8dEyeHL_c.s" +void dEyeHL_mng_c::remove(dEyeHL_c* i_obj) { + if (i_obj->m_timg != NULL) { + dEyeHL_mng_c* prev = i_obj->m_pre; + dEyeHL_mng_c* next = i_obj->m_next; + + if (next != NULL) { + next->m_pre = prev; + } + + if (prev == NULL) { + m_obj = next; + } else { + prev->m_next = next; + next = m_obj; + } + + i_obj->m_timg->LODBias = i_obj->m_lodBias; + i_obj->m_timg = NULL; + i_obj->m_pre = NULL; + i_obj->m_next = NULL; + } } -#pragma pop /* ############################################################################################## */ /* 80450FB0-80450FB8 -00001 0008+00 0/0 2/2 0/0 .sbss None */ @@ -116,7 +149,7 @@ asm void dEyeHL_mng_c::remove(dEyeHL_c* param_0) { /* 80450FB1 0001+00 data_80450FB1 None */ /* 80450FB2 0006+00 data_80450FB2 None */ extern u8 struct_80450FB0[8]; -u8 struct_80450FB0[8]; +u8 struct_80450FB0[8] ALIGN_DECL(8); /* 80450FB8-80450FBC -00001 0004+00 0/0 1/1 0/0 .sbss None */ /* 80450FB8 0001+00 data_80450FB8 None */ |
