diff --git a/config/GZ2E01/rels/d_a_obj_swLight/symbols.txt b/config/GZ2E01/rels/d_a_obj_swLight/symbols.txt index d4b6fc67860..93be2d29e98 100644 --- a/config/GZ2E01/rels/d_a_obj_swLight/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_swLight/symbols.txt @@ -19,16 +19,16 @@ checkHit__14daObjSwLight_cFv = .text:0x00000A58; // type:function size:0xF4 scop setOnTimer__14daObjSwLight_cFv = .text:0x00000B4C; // type:function size:0x2C scope:global Draw__14daObjSwLight_cFv = .text:0x00000B78; // type:function size:0x110 scope:global Delete__14daObjSwLight_cFv = .text:0x00000C88; // type:function size:0x48 scope:global -daObjSwLight_create1st__FP14daObjSwLight_c = .text:0x00000CD0; // type:function size:0x19C scope:global +daObjSwLight_create1st__FP14daObjSwLight_c = .text:0x00000CD0; // type:function size:0x19C scope:local __dt__8cM3dGCylFv = .text:0x00000E6C; // type:function size:0x48 scope:global __ct__8dCcD_SphFv = .text:0x00000EB4; // type:function size:0x84 scope:global __dt__8dCcD_SphFv = .text:0x00000F38; // type:function size:0xCC scope:global __dt__8cM3dGSphFv = .text:0x00001004; // type:function size:0x48 scope:global __dt__8cM3dGAabFv = .text:0x0000104C; // type:function size:0x48 scope:global __dt__10dCcD_GSttsFv = .text:0x00001094; // type:function size:0x5C scope:global -daObjSwLight_MoveBGDelete__FP14daObjSwLight_c = .text:0x000010F0; // type:function size:0x20 scope:global -daObjSwLight_MoveBGExecute__FP14daObjSwLight_c = .text:0x00001110; // type:function size:0x20 scope:global -daObjSwLight_MoveBGDraw__FP14daObjSwLight_c = .text:0x00001130; // type:function size:0x2C scope:global +daObjSwLight_MoveBGDelete__FP14daObjSwLight_c = .text:0x000010F0; // type:function size:0x20 scope:local +daObjSwLight_MoveBGExecute__FP14daObjSwLight_c = .text:0x00001110; // type:function size:0x20 scope:local +daObjSwLight_MoveBGDraw__FP14daObjSwLight_c = .text:0x00001130; // type:function size:0x2C scope:local __dt__10cCcD_GSttsFv = .text:0x0000115C; // type:function size:0x48 scope:global __dt__17dEvLib_callback_cFv = .text:0x000011A4; // type:function size:0x48 scope:global eventStart__17dEvLib_callback_cFv = .text:0x000011EC; // type:function size:0x8 scope:global @@ -37,7 +37,7 @@ eventEnd__17dEvLib_callback_cFv = .text:0x000011FC; // type:function size:0x8 sc __dt__14daObjSwLight_cFv = .text:0x00001204; // type:function size:0x234 scope:global cLib_calcTimer__FPUs = .text:0x00001438; // type:function size:0x1C scope:global cLib_calcTimer__FPUc = .text:0x00001454; // type:function size:0x1C scope:global -@1440@__dt__14daObjSwLight_cFv = .text:0x00001470; // type:function size:0x8 scope:local +@1440@__dt__14daObjSwLight_cFv = .text:0x00001470; // type:function size:0x8 scope:global _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global ...rodata.0 = .rodata:0x00000000; // type:label scope:local @@ -56,12 +56,13 @@ l_sph_src_tg = .rodata:0x00000040; // type:object size:0x40 scope:global @3844 = .rodata:0x000000B0; // type:object size:0x4 scope:local align:4 data:float @stringBase0 = .rodata:0x000000B4; // type:object size:0x12 scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_641_data_10 = .data:0x00000010; // type:object size:0x10 -l_arcName = .data:0x00000020; // type:object size:0x4 scope:global data:4byte -l_cull_box = .data:0x00000024; // type:object size:0x18 scope:global align:4 data:float -l_cyl_src = .data:0x0000003C; // type:object size:0x44 scope:global +_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8 +_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8 +l_arcName = .data:0x00000020; // type:object size:0x4 scope:local data:4byte +l_cull_box = .data:0x00000024; // type:object size:0x18 scope:local align:4 data:float +l_cyl_src = .data:0x0000003C; // type:object size:0x44 scope:local @3738 = .data:0x00000080; // type:object size:0xC scope:local @3739 = .data:0x0000008C; // type:object size:0xC scope:local @3740 = .data:0x00000098; // type:object size:0xC scope:local diff --git a/config/GZ2J01/rels/d_a_obj_swLight/splits.txt b/config/GZ2J01/rels/d_a_obj_swLight/splits.txt index be6da2b021d..1cc12283b8f 100644 --- a/config/GZ2J01/rels/d_a_obj_swLight/splits.txt +++ b/config/GZ2J01/rels/d_a_obj_swLight/splits.txt @@ -13,3 +13,4 @@ d/actor/d_a_obj_swLight.cpp: .text start:0x00000078 end:0x00001478 .rodata start:0x00000000 end:0x000000C8 .data start:0x00000000 end:0x000001C8 + .bss start:0x00000000 end:0x00000004 diff --git a/config/GZ2J01/rels/d_a_obj_swLight/symbols.txt b/config/GZ2J01/rels/d_a_obj_swLight/symbols.txt index 583283fc9c7..93be2d29e98 100644 --- a/config/GZ2J01/rels/d_a_obj_swLight/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_swLight/symbols.txt @@ -19,16 +19,16 @@ checkHit__14daObjSwLight_cFv = .text:0x00000A58; // type:function size:0xF4 scop setOnTimer__14daObjSwLight_cFv = .text:0x00000B4C; // type:function size:0x2C scope:global Draw__14daObjSwLight_cFv = .text:0x00000B78; // type:function size:0x110 scope:global Delete__14daObjSwLight_cFv = .text:0x00000C88; // type:function size:0x48 scope:global -daObjSwLight_create1st__FP14daObjSwLight_c = .text:0x00000CD0; // type:function size:0x19C scope:global +daObjSwLight_create1st__FP14daObjSwLight_c = .text:0x00000CD0; // type:function size:0x19C scope:local __dt__8cM3dGCylFv = .text:0x00000E6C; // type:function size:0x48 scope:global __ct__8dCcD_SphFv = .text:0x00000EB4; // type:function size:0x84 scope:global __dt__8dCcD_SphFv = .text:0x00000F38; // type:function size:0xCC scope:global __dt__8cM3dGSphFv = .text:0x00001004; // type:function size:0x48 scope:global __dt__8cM3dGAabFv = .text:0x0000104C; // type:function size:0x48 scope:global __dt__10dCcD_GSttsFv = .text:0x00001094; // type:function size:0x5C scope:global -daObjSwLight_MoveBGDelete__FP14daObjSwLight_c = .text:0x000010F0; // type:function size:0x20 scope:global -daObjSwLight_MoveBGExecute__FP14daObjSwLight_c = .text:0x00001110; // type:function size:0x20 scope:global -daObjSwLight_MoveBGDraw__FP14daObjSwLight_c = .text:0x00001130; // type:function size:0x2C scope:global +daObjSwLight_MoveBGDelete__FP14daObjSwLight_c = .text:0x000010F0; // type:function size:0x20 scope:local +daObjSwLight_MoveBGExecute__FP14daObjSwLight_c = .text:0x00001110; // type:function size:0x20 scope:local +daObjSwLight_MoveBGDraw__FP14daObjSwLight_c = .text:0x00001130; // type:function size:0x2C scope:local __dt__10cCcD_GSttsFv = .text:0x0000115C; // type:function size:0x48 scope:global __dt__17dEvLib_callback_cFv = .text:0x000011A4; // type:function size:0x48 scope:global eventStart__17dEvLib_callback_cFv = .text:0x000011EC; // type:function size:0x8 scope:global @@ -37,7 +37,7 @@ eventEnd__17dEvLib_callback_cFv = .text:0x000011FC; // type:function size:0x8 sc __dt__14daObjSwLight_cFv = .text:0x00001204; // type:function size:0x234 scope:global cLib_calcTimer__FPUs = .text:0x00001438; // type:function size:0x1C scope:global cLib_calcTimer__FPUc = .text:0x00001454; // type:function size:0x1C scope:global -@1440@__dt__14daObjSwLight_cFv = .text:0x00001470; // type:function size:0x8 scope:local +@1440@__dt__14daObjSwLight_cFv = .text:0x00001470; // type:function size:0x8 scope:global _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global ...rodata.0 = .rodata:0x00000000; // type:label scope:local @@ -55,12 +55,14 @@ l_sph_src_tg = .rodata:0x00000040; // type:object size:0x40 scope:global @3833 = .rodata:0x000000A8; // type:object size:0x8 scope:local @3844 = .rodata:0x000000B0; // type:object size:0x4 scope:local align:4 data:float @stringBase0 = .rodata:0x000000B4; // type:object size:0x12 scope:local data:string_table -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +...data.0 = .data:0x00000000; // type:label scope:local +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_641_data_10 = .data:0x00000010; // type:object size:0x10 -l_arcName = .data:0x00000020; // type:object size:0x4 scope:global data:4byte -l_cull_box = .data:0x00000024; // type:object size:0x18 scope:global align:4 data:float -l_cyl_src = .data:0x0000003C; // type:object size:0x44 scope:global +_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8 +_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8 +l_arcName = .data:0x00000020; // type:object size:0x4 scope:local data:4byte +l_cull_box = .data:0x00000024; // type:object size:0x18 scope:local align:4 data:float +l_cyl_src = .data:0x0000003C; // type:object size:0x44 scope:local @3738 = .data:0x00000080; // type:object size:0xC scope:local @3739 = .data:0x0000008C; // type:object size:0xC scope:local @3740 = .data:0x00000098; // type:object size:0xC scope:local diff --git a/config/GZ2P01/rels/d_a_obj_swLight/splits.txt b/config/GZ2P01/rels/d_a_obj_swLight/splits.txt index be6da2b021d..1cc12283b8f 100644 --- a/config/GZ2P01/rels/d_a_obj_swLight/splits.txt +++ b/config/GZ2P01/rels/d_a_obj_swLight/splits.txt @@ -13,3 +13,4 @@ d/actor/d_a_obj_swLight.cpp: .text start:0x00000078 end:0x00001478 .rodata start:0x00000000 end:0x000000C8 .data start:0x00000000 end:0x000001C8 + .bss start:0x00000000 end:0x00000004 diff --git a/config/GZ2P01/rels/d_a_obj_swLight/symbols.txt b/config/GZ2P01/rels/d_a_obj_swLight/symbols.txt index 583283fc9c7..93be2d29e98 100644 --- a/config/GZ2P01/rels/d_a_obj_swLight/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_swLight/symbols.txt @@ -19,16 +19,16 @@ checkHit__14daObjSwLight_cFv = .text:0x00000A58; // type:function size:0xF4 scop setOnTimer__14daObjSwLight_cFv = .text:0x00000B4C; // type:function size:0x2C scope:global Draw__14daObjSwLight_cFv = .text:0x00000B78; // type:function size:0x110 scope:global Delete__14daObjSwLight_cFv = .text:0x00000C88; // type:function size:0x48 scope:global -daObjSwLight_create1st__FP14daObjSwLight_c = .text:0x00000CD0; // type:function size:0x19C scope:global +daObjSwLight_create1st__FP14daObjSwLight_c = .text:0x00000CD0; // type:function size:0x19C scope:local __dt__8cM3dGCylFv = .text:0x00000E6C; // type:function size:0x48 scope:global __ct__8dCcD_SphFv = .text:0x00000EB4; // type:function size:0x84 scope:global __dt__8dCcD_SphFv = .text:0x00000F38; // type:function size:0xCC scope:global __dt__8cM3dGSphFv = .text:0x00001004; // type:function size:0x48 scope:global __dt__8cM3dGAabFv = .text:0x0000104C; // type:function size:0x48 scope:global __dt__10dCcD_GSttsFv = .text:0x00001094; // type:function size:0x5C scope:global -daObjSwLight_MoveBGDelete__FP14daObjSwLight_c = .text:0x000010F0; // type:function size:0x20 scope:global -daObjSwLight_MoveBGExecute__FP14daObjSwLight_c = .text:0x00001110; // type:function size:0x20 scope:global -daObjSwLight_MoveBGDraw__FP14daObjSwLight_c = .text:0x00001130; // type:function size:0x2C scope:global +daObjSwLight_MoveBGDelete__FP14daObjSwLight_c = .text:0x000010F0; // type:function size:0x20 scope:local +daObjSwLight_MoveBGExecute__FP14daObjSwLight_c = .text:0x00001110; // type:function size:0x20 scope:local +daObjSwLight_MoveBGDraw__FP14daObjSwLight_c = .text:0x00001130; // type:function size:0x2C scope:local __dt__10cCcD_GSttsFv = .text:0x0000115C; // type:function size:0x48 scope:global __dt__17dEvLib_callback_cFv = .text:0x000011A4; // type:function size:0x48 scope:global eventStart__17dEvLib_callback_cFv = .text:0x000011EC; // type:function size:0x8 scope:global @@ -37,7 +37,7 @@ eventEnd__17dEvLib_callback_cFv = .text:0x000011FC; // type:function size:0x8 sc __dt__14daObjSwLight_cFv = .text:0x00001204; // type:function size:0x234 scope:global cLib_calcTimer__FPUs = .text:0x00001438; // type:function size:0x1C scope:global cLib_calcTimer__FPUc = .text:0x00001454; // type:function size:0x1C scope:global -@1440@__dt__14daObjSwLight_cFv = .text:0x00001470; // type:function size:0x8 scope:local +@1440@__dt__14daObjSwLight_cFv = .text:0x00001470; // type:function size:0x8 scope:global _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global ...rodata.0 = .rodata:0x00000000; // type:label scope:local @@ -55,12 +55,14 @@ l_sph_src_tg = .rodata:0x00000040; // type:object size:0x40 scope:global @3833 = .rodata:0x000000A8; // type:object size:0x8 scope:local @3844 = .rodata:0x000000B0; // type:object size:0x4 scope:local align:4 data:float @stringBase0 = .rodata:0x000000B4; // type:object size:0x12 scope:local data:string_table -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +...data.0 = .data:0x00000000; // type:label scope:local +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -lbl_641_data_10 = .data:0x00000010; // type:object size:0x10 -l_arcName = .data:0x00000020; // type:object size:0x4 scope:global data:4byte -l_cull_box = .data:0x00000024; // type:object size:0x18 scope:global align:4 data:float -l_cyl_src = .data:0x0000003C; // type:object size:0x44 scope:global +_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8 +_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8 +l_arcName = .data:0x00000020; // type:object size:0x4 scope:local data:4byte +l_cull_box = .data:0x00000024; // type:object size:0x18 scope:local align:4 data:float +l_cyl_src = .data:0x0000003C; // type:object size:0x44 scope:local @3738 = .data:0x00000080; // type:object size:0xC scope:local @3739 = .data:0x0000008C; // type:object size:0xC scope:local @3740 = .data:0x00000098; // type:object size:0xC scope:local diff --git a/configure.py b/configure.py index fc31ab825a8..c2e779b8a5f 100755 --- a/configure.py +++ b/configure.py @@ -2168,7 +2168,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swBallA"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swBallB"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swBallC"), - ActorRel(NonMatching, "d_a_obj_swLight"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swLight"), ActorRel(NonMatching, "d_a_obj_swchain"), ActorRel(Equivalent, "d_a_obj_swhang"), # vtable order ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_sword"), diff --git a/include/d/actor/d_a_obj_swLight.h b/include/d/actor/d_a_obj_swLight.h index 383b09e652d..ccfd68cf282 100644 --- a/include/d/actor/d_a_obj_swLight.h +++ b/include/d/actor/d_a_obj_swLight.h @@ -1,6 +1,10 @@ #ifndef D_A_OBJ_SWLIGHT_H #define D_A_OBJ_SWLIGHT_H +#include "SSystem/SComponent/c_phase.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_cc_d.h" +#include "d/d_event_lib.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,14 +15,13 @@ * @details * */ -class daObjSwLight_c : public fopAc_ac_c { +class daObjSwLight_c : public dBgS_MoveBgActor, public dEvLib_callback_c { public: + typedef void (daObjSwLight_c::*modeFunc)(); + /* 80CF6F98 */ void initBaseMtx(); /* 80CF6FD4 */ void setBaseMtx(); - /* 80CF7038 */ void Create(); - /* 80CF71F0 */ void CreateHeap(); - /* 80CF7260 */ void create1st(); - /* 80CF7320 */ void Execute(Mtx**); + /* 80CF7260 */ int create1st(); /* 80CF73E0 */ void action(); /* 80CF761C */ void init_modeSwOnWait(); /* 80CF766C */ void modeSwOnWait(); @@ -27,17 +30,47 @@ public: /* 80CF77D8 */ void init_modeSwOffWait(); /* 80CF7838 */ void modeSwOffWait(); /* 80CF7974 */ void modeDead(); - /* 80CF7978 */ void checkHit(); + /* 80CF7978 */ int checkHit(); /* 80CF7A6C */ void setOnTimer(); - /* 80CF7A98 */ void Draw(); - /* 80CF7BA8 */ void Delete(); - /* 80CF8124 */ ~daObjSwLight_c(); + + /* 80CF7038 */ virtual int Create(); + /* 80CF71F0 */ virtual int CreateHeap(); + /* 80CF7320 */ virtual int Execute(Mtx**); + /* 80CF7A98 */ virtual int Draw(); + /* 80CF7BA8 */ virtual int Delete(); + /* 80CF8124 */ virtual ~daObjSwLight_c() {}; + + daObjSwLight_c() : dEvLib_callback_c(this) {}; + + u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getSwbit2() { return fopAcM_GetParamBit(this, 24, 8); } + u8 getOnTime() { return fopAcM_GetParamBit(this, 16, 8); } + u8 getEvent() { return (u8)field_0xb22; } private: - /* 0x568 */ u8 field_0x568[0xb28 - 0x568]; + /* 0x5B0 */ request_of_phase_process_class mPhase; + /* 0x5B8 */ J3DModel* mpModel; + /* 0x6F4 */ dCcD_Stts mStts; + /* 0x614 */ dCcD_Sph mAtSph; + /* 0x730 */ dCcD_Sph mTgSph[2]; + /* 0x9BC */ dCcD_Cyl mCyl; + /* 0xADC */ f32 field_0xadc; + /* 0xAE0 */ u8 field_0xae0; + /* 0xAE1 */ u8 field_0xae1; + /* 0xAE2 */ u8 field_0xae2; + /* 0xAE3 */ u8 field_0xae3; + /* 0xAE0 */ u16 field_0xae4; + /* 0xAE0 */ u8 field_0xae6; + /* 0xAE0 */ u8 field_0xae7; + /* 0xAE8 */ u16 field_0xae8; + /* 0xAE8 */ u16 field_0xaea; + /* 0xAEC */ DALKMIST_INFLUENCE mInfluence; + /* 0xB00 */ Z2SoundObjSimple mSound; + /* 0xB20 */ u8 field_0xb20; + /* 0xB22 */ u16 field_0xb22; + /* 0xB24 */ u16 field_0xb24; }; STATIC_ASSERT(sizeof(daObjSwLight_c) == 0xb28); - #endif /* D_A_OBJ_SWLIGHT_H */ diff --git a/src/d/actor/d_a_obj_swLight.cpp b/src/d/actor/d_a_obj_swLight.cpp index d51394cb57e..8529ee435d9 100644 --- a/src/d/actor/d_a_obj_swLight.cpp +++ b/src/d/actor/d_a_obj_swLight.cpp @@ -1,624 +1,530 @@ /** * @file d_a_obj_swLight.cpp - * -*/ + * + */ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_swLight.h" #include "d/d_cc_d.h" +#include "d/d_s_play.h" #include "dol2asm.h" +#ifdef DEBUG +class daObjSwLight_HIO_c : public mDoHIO_entry_c { +public: + /* 811CF8C0 */ daObjSwLight_HIO_c(); + /* 811CF920 */ void genMessage(JORMContext*); + /* 0x06 */ u8 field_0x06; + /* 0x08 */ f32 mLightMaxRadius; + /* 0x0C */ u8 mNoLightHit; + /* 0x0D */ u8 mCheckRendering; +}; -// -// Forward References: -// +daObjSwLight_HIO_c::daObjSwLight_HIO_c() { + mLightMaxRadius = 500.0f; + mCheckRendering = 0; + mNoLightHit = 0; +} -extern "C" void initBaseMtx__14daObjSwLight_cFv(); -extern "C" void setBaseMtx__14daObjSwLight_cFv(); -extern "C" void Create__14daObjSwLight_cFv(); -extern "C" void CreateHeap__14daObjSwLight_cFv(); -extern "C" void create1st__14daObjSwLight_cFv(); -extern "C" void Execute__14daObjSwLight_cFPPA3_A4_f(); -extern "C" void action__14daObjSwLight_cFv(); -extern "C" void init_modeSwOnWait__14daObjSwLight_cFv(); -extern "C" void modeSwOnWait__14daObjSwLight_cFv(); -extern "C" void init_modeOnLight__14daObjSwLight_cFv(); -extern "C" void modeOnLight__14daObjSwLight_cFv(); -extern "C" void init_modeSwOffWait__14daObjSwLight_cFv(); -extern "C" void modeSwOffWait__14daObjSwLight_cFv(); -extern "C" void modeDead__14daObjSwLight_cFv(); -extern "C" void checkHit__14daObjSwLight_cFv(); -extern "C" void setOnTimer__14daObjSwLight_cFv(); -extern "C" void Draw__14daObjSwLight_cFv(); -extern "C" void Delete__14daObjSwLight_cFv(); -extern "C" static void daObjSwLight_create1st__FP14daObjSwLight_c(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static void daObjSwLight_MoveBGDelete__FP14daObjSwLight_c(); -extern "C" static void daObjSwLight_MoveBGExecute__FP14daObjSwLight_c(); -extern "C" static void daObjSwLight_MoveBGDraw__FP14daObjSwLight_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); -extern "C" void __dt__14daObjSwLight_cFv(); -extern "C" void func_80CF8358(void* _this, u16*); -extern "C" void func_80CF8374(void* _this, u8*); -extern "C" static void func_80CF8390(); -extern "C" extern char const* const d_a_obj_swLight__stringBase0; +void daObjSwLight_HIO_c::genMessage(JORMContext* ctx) { + // Light Candlestick Switch + ctx->genLabel("光燭台スイッチ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Light Maximum Radius + ctx->genSlider("光最大半径", &mLightMaxRadius, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Check Rendering + ctx->genCheckBox("チェック描画", &mCheckRendering, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // No Light Hit + ctx->genCheckBox("光当たり無し", &mNoLightHit, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); +} -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void offSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void eventUpdate__17dEvLib_callback_cFv(); -extern "C" void orderEvent__17dEvLib_callback_cFiii(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObjSe__12dCcD_GObjInfFv(); -extern "C" void getHitSeID__12dCcD_GObjInfFUci(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_dalkmist_inf_set__FP18DALKMIST_INFLUENCE(); -extern "C" void dKy_dalkmist_inf_cut__FP18DALKMIST_INFLUENCE(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dt__14Z2SoundObjBaseFv(); -extern "C" void deleteObject__14Z2SoundObjBaseFv(); -extern "C" void startCollisionSE__14Z2SoundObjBaseFUlUlP14Z2SoundObjBase(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void __dl__FPv(); -extern "C" void getName__10JUTNameTabCFUs(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__16dBgS_MoveBgActor[10]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern void* __vt__16Z2SoundObjSimple[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 data_80CF8630[4]; - -// -// Declarations: -// +static daObjSwLight_HIO_c l_HIO; +#endif /* 80CF6F98-80CF6FD4 000078 003C+00 1/1 0/0 0/0 .text initBaseMtx__14daObjSwLight_cFv */ void daObjSwLight_c::initBaseMtx() { - // NONMATCHING + mpModel->setBaseScale(scale); + setBaseMtx(); } /* 80CF6FD4-80CF7038 0000B4 0064+00 2/2 0/0 0/0 .text setBaseMtx__14daObjSwLight_cFv */ void daObjSwLight_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } /* ############################################################################################## */ /* 80CF83A0-80CF83E0 000000 0040+00 4/4 0/0 0/0 .rodata l_sph_src_at */ const static dCcD_SrcSph l_sph_src_at = { { - {0x0, {{AT_TYPE_LANTERN_SWING, 0x0, 0x11}, {0x0, 0x0}, 0x78}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x4, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + {0x0, {{AT_TYPE_LANTERN_SWING, 0x0, 0x11}, {0x0, 0x0}, 0x78}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x4, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf { - {{0.0f, 0.0f, 0.0f}, 100.0f} // mSph - } // mSphAttr + {{0.0f, 0.0f, 0.0f}, 100.0f} // mSph + } // mSphAttr }; /* 80CF83E0-80CF8420 000040 0040+00 0/1 0/0 0/0 .rodata l_sph_src_tg */ -#pragma push -#pragma force_active on const static dCcD_SrcSph l_sph_src_tg = { { - {0x0, {{0x0, 0x0, 0x10}, {0x202, 0x11}, 0x78}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x4, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + {0x0, {{0x0, 0x0, 0x10}, {0x202, 0x11}, 0x78}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x4, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf { - {{0.0f, 0.0f, 0.0f}, 90.0f} // mSph - } // mSphAttr + {{0.0f, 0.0f, 0.0f}, 90.0f} // mSph + } // mSphAttr }; -#pragma pop - -/* 80CF8420-80CF8424 000080 0004+00 2/6 0/0 0/0 .rodata @3701 */ -SECTION_RODATA static f32 const lit_3701 = 500.0f; -COMPILER_STRIP_GATE(0x80CF8420, &lit_3701); - -/* 80CF8424-80CF8428 000084 0004+00 0/4 0/0 0/0 .rodata @3702 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3702[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CF8424, &lit_3702); -#pragma pop - -/* 80CF8454-80CF8454 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CF8454 = "Obj_l8sw0"; -SECTION_DEAD static char const* const stringBase_80CF845E = "cc_LB_v"; -#pragma pop /* 80CF8488-80CF848C -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_swLight__stringBase0; +static char* l_arcName = "Obj_l8sw0"; /* 80CF848C-80CF84A4 000024 0018+00 1/1 0/0 0/0 .data l_cull_box */ -SECTION_DATA static u8 l_cull_box[24] = { - 0xC3, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xFA, 0x00, 0x00, - 0x43, 0xFA, 0x00, 0x00, 0x43, 0xFA, 0x00, 0x00, 0x43, 0xFA, 0x00, 0x00, -}; +static Vec l_cull_box[2] = {{ + -500.0f, + 0.0f, + -500.0f, + }, + { + 500.0f, + 500.0f, + 500.0f, + }}; /* 80CF84A4-80CF84E8 00003C 0044+00 1/1 0/0 0/0 .data l_cyl_src */ static dCcD_SrcCyl l_cyl_src = { { - {0x0, {{0x0, 0x0, 0x1e}, {0xd8fafdff, 0x11}, 0x79}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_METAL, 0x2, 0x0, 0x7, 0x3}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + {0x0, {{0x0, 0x0, 0x1e}, {0xd8fafdff, 0x11}, 0x79}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_METAL, 0x2, 0x0, 0x7, 0x3}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf { - {0.0f, 0.0f, 0.0f}, // mCenter - 90.0f, // mRadius - 170.0f // mHeight - } // mCyl + {0.0f, 0.0f, 0.0f}, // mCenter + 90.0f, // mRadius + 170.0f // mHeight + } // mCyl }; /* 80CF7038-80CF71F0 000118 01B8+00 1/0 0/0 0/0 .text Create__14daObjSwLight_cFv */ -void daObjSwLight_c::Create() { - // NONMATCHING +int daObjSwLight_c::Create() { + if (fopAcM_isSwitch(this, getSwbit())) { + init_modeSwOffWait(); +#ifdef DEBUG + field_0xadc = l_HIO.mLightMaxRadius; +#else + field_0xadc = 500.0f; +#endif + } else { + init_modeSwOnWait(); + field_0xadc = 0.0f; + } + + initBaseMtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + mStts.Init(0xff, 0xff, this); + mAtSph.Set(l_sph_src_at); + mAtSph.SetStts(&mStts); + for (int i = 0; i < 2; i++) { + mTgSph[i].Set(l_sph_src_tg); + mTgSph[i].SetStts(&mStts); + } + + mTgSph[0].SetTgType(2); + mTgSph[1].SetTgType(0x200); + mCyl.Set(l_cyl_src); + mCyl.SetStts(&mStts); + fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x, + l_cull_box[1].y, l_cull_box[1].z); + field_0xae8 = 0xffff; + + JUTNameTab* name = mpModel->getModelData()->getMaterialTable().getMaterialName(); + for (u16 i = 0; i < mpModel->getModelData()->getMaterialNum(); i++) { + if (!strcmp(name->getName(i), "cc_LB_v")) { + field_0xae8 = i; + } + } + +#ifdef DEBUG + if (field_0xae8 == 0xffff) { + // Light Candlestick Switch: Material "cc_LB_v" is missing. + OSReport_Error("光燭台スイッチ:マテリアル\"cc_LB_v\"がありません\n"); + return 0; + } +#endif + + mSound.init(¤t.pos, 1); + return 1; } /* 80CF71F0-80CF7260 0002D0 0070+00 1/0 0/0 0/0 .text CreateHeap__14daObjSwLight_cFv */ -void daObjSwLight_c::CreateHeap() { - // NONMATCHING +int daObjSwLight_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4); + JUT_ASSERT(385, modelData != 0); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + return mpModel == NULL ? 0 : 1; } /* 80CF7260-80CF7320 000340 00C0+00 1/1 0/0 0/0 .text create1st__14daObjSwLight_cFv */ -void daObjSwLight_c::create1st() { - // NONMATCHING +int daObjSwLight_c::create1st() { + if (field_0xb20 == 0) { + field_0xb20 = 1; + field_0xb22 = home.angle.x; + field_0xb24 = home.angle.z; + home.angle.x = current.angle.x = shape_angle.x = 0; + home.angle.z = current.angle.z = shape_angle.z = 0; + } + + int phase = dComIfG_resLoad(&mPhase, l_arcName); + + if (phase == cPhs_COMPLEATE_e) { + phase = MoveBGCreate(l_arcName, -1, NULL, 0xec0, NULL); + if (phase == cPhs_ERROR_e) { + return phase; + } +#ifdef DEBUG + // Light Candlestick Switch + l_HIO.entryHIO("光燭台スイッチ"); +#endif + } + + return phase; } /* 80CF7320-80CF73E0 000400 00C0+00 1/0 0/0 0/0 .text Execute__14daObjSwLight_cFPPA3_A4_f */ -void daObjSwLight_c::Execute(Mtx** param_0) { - // NONMATCHING +int daObjSwLight_c::Execute(Mtx** param_0) { + action(); + eventUpdate(); + *param_0 = &mBgMtx; + setBaseMtx(); + + if (mCyl.ChkTgHit()) { + cCcD_Obj* hit_obj = mCyl.GetTgHitObj(); + if (hit_obj != NULL) { + hit_obj->ChkAtType(AT_TYPE_BOOMERANG); + u32 se_id = mCyl.GetTgHitObjHitSeID(1); + mSound.startCollisionSE(se_id, 9, NULL); + } + } + + mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + return 1; } -/* ############################################################################################## */ -/* 80CF8428-80CF842C 000088 0004+00 0/1 0/0 0/0 .rodata @3780 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3780 = 90.0f; -COMPILER_STRIP_GATE(0x80CF8428, &lit_3780); -#pragma pop - -/* 80CF842C-80CF8430 00008C 0004+00 1/2 0/0 0/0 .rodata @3781 */ -SECTION_RODATA static f32 const lit_3781 = 255.0f; -COMPILER_STRIP_GATE(0x80CF842C, &lit_3781); - -/* 80CF8430-80CF8434 000090 0004+00 0/1 0/0 0/0 .rodata @3782 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3782 = 1.0f; -COMPILER_STRIP_GATE(0x80CF8430, &lit_3782); -#pragma pop - -/* 80CF8434-80CF8438 000094 0004+00 0/1 0/0 0/0 .rodata @3783 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3783 = -1.0f; -COMPILER_STRIP_GATE(0x80CF8434, &lit_3783); -#pragma pop - -/* 80CF84E8-80CF84F4 -00001 000C+00 0/1 0/0 0/0 .data @3738 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3738[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeSwOnWait__14daObjSwLight_cFv, -}; -#pragma pop - -/* 80CF84F4-80CF8500 -00001 000C+00 0/1 0/0 0/0 .data @3739 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3739[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeSwOffWait__14daObjSwLight_cFv, -}; -#pragma pop - -/* 80CF8500-80CF850C -00001 000C+00 0/1 0/0 0/0 .data @3740 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3740[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeOnLight__14daObjSwLight_cFv, -}; -#pragma pop - -/* 80CF850C-80CF8518 -00001 000C+00 0/1 0/0 0/0 .data @3741 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3741[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeDead__14daObjSwLight_cFv, -}; -#pragma pop - -/* 80CF8518-80CF8548 0000B0 0030+00 0/1 0/0 0/0 .data l_func$3737 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - /* 80CF73E0-80CF761C 0004C0 023C+00 1/1 0/0 0/0 .text action__14daObjSwLight_cFv */ void daObjSwLight_c::action() { - // NONMATCHING + static modeFunc l_func[] = { + &daObjSwLight_c::modeSwOnWait, + &daObjSwLight_c::modeSwOffWait, + &daObjSwLight_c::modeOnLight, + &daObjSwLight_c::modeDead, + }; + + f32 fVar2 = field_0xadc; + (this->*l_func[field_0xae0])(); + cXyz cStack_48(current.pos.x, current.pos.y + 90.0f + KREG_F(1), current.pos.z); + + for (int i = 0; i < 2; i++) { + mTgSph[i].SetC(cStack_48); + dComIfG_Ccsp()->Set(&mTgSph[i]); + } +#ifdef DEBUG + u8 a = 1; + u8 light_hit = l_HIO.mNoLightHit == 0; +#endif + + mCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCyl); + mInfluence.mPos = cStack_48; + mInfluence.field_0xc = field_0xadc; + + if (field_0xadc != 0.0f && fVar2 == 0.0f) { + dKy_dalkmist_inf_set(&mInfluence); + } else if (field_0xadc == 0.0f) { + if (fVar2 != 0.0f) { + dKy_dalkmist_inf_cut(&mInfluence); + } + } + +#ifdef DEBUG + u8 tmp = field_0xadc / l_HIO.mLightMaxRadius * 255.0f; +#else + u8 tmp = field_0xadc / 500.0f * 255.0f; +#endif + + if (tmp != 0) { + fopAcM_seStartLevel(this, Z2SE_OBJ_L8_L_TORCH_SW, tmp); + } } /* 80CF761C-80CF766C 0006FC 0050+00 2/2 0/0 0/0 .text init_modeSwOnWait__14daObjSwLight_cFv */ void daObjSwLight_c::init_modeSwOnWait() { - // NONMATCHING + // Light Candlestick Switch: Switch <%d> was turned off. + OS_REPORT("光燭台スイッチ:スイッチ<%d>オフしました\n", getSwbit()); + fopAcM_offSwitch(this, getSwbit()); + + field_0xae1 = 0; + field_0xae0 = 0; } -/* ############################################################################################## */ -/* 80CF8438-80CF843C 000098 0004+00 0/1 0/0 0/0 .rodata @3829 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3829 = 125.0f; -COMPILER_STRIP_GATE(0x80CF8438, &lit_3829); -#pragma pop - -/* 80CF843C-80CF8440 00009C 0004+00 0/1 0/0 0/0 .rodata @3830 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3830 = 0.25f; -COMPILER_STRIP_GATE(0x80CF843C, &lit_3830); -#pragma pop - -/* 80CF8440-80CF8448 0000A0 0004+04 0/1 0/0 0/0 .rodata @3831 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3831[1 + 1 /* padding */] = { - 45.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80CF8440, &lit_3831); -#pragma pop - -/* 80CF8448-80CF8450 0000A8 0008+00 0/1 0/0 0/0 .rodata @3833 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3833[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CF8448, &lit_3833); -#pragma pop - /* 80CF766C-80CF777C 00074C 0110+00 1/0 0/0 0/0 .text modeSwOnWait__14daObjSwLight_cFv */ void daObjSwLight_c::modeSwOnWait() { - // NONMATCHING + checkHit(); + u8 tmp = field_0xae6; + + if (cLib_checkBit(tmp, 1)) { + init_modeOnLight(); + } else { + u8 tmp2 = field_0xae6; + if (cLib_checkBit(tmp2, 2)) { + if (field_0xae1 <= 60) { + field_0xae1++; + } + + if (field_0xae1 < 5) { + field_0xadc = 0.0f; + } else if (field_0xae1 == 5) { +#ifdef DEBUG + field_0xadc = l_HIO.mLightMaxRadius * 0.25f; +#else + field_0xadc = 500.0f * 0.25f; +#endif + } else if (field_0xae1 < 50) { +#ifdef DEBUG + field_0xadc = + l_HIO.mLightMaxRadius * ((field_0xae1 - 5) * 0.25f / 45.0f + 0.25f); +#else + field_0xadc = 500.0f * ((field_0xae1 - 5) * 0.25f / 45.0f + 0.25f); +#endif + + } else if (field_0xae1 == 50) { +#ifdef DEBUG + field_0xadc = l_HIO.mLightMaxRadius; +#else + field_0xadc = 500.0f; +#endif + } else if (field_0xae1 == 60) { + init_modeSwOffWait(); + } + } else { + cLib_calcTimer(&field_0xae1); + } + } } /* 80CF777C-80CF7788 00085C 000C+00 1/1 0/0 0/0 .text init_modeOnLight__14daObjSwLight_cFv */ void daObjSwLight_c::init_modeOnLight() { - // NONMATCHING + field_0xae0 = 2; } -/* ############################################################################################## */ -/* 80CF8450-80CF8454 0000B0 0004+00 1/2 0/0 0/0 .rodata @3844 */ -SECTION_RODATA static f32 const lit_3844 = 25.0f; -COMPILER_STRIP_GATE(0x80CF8450, &lit_3844); - /* 80CF7788-80CF77D8 000868 0050+00 1/0 0/0 0/0 .text modeOnLight__14daObjSwLight_cFv */ void daObjSwLight_c::modeOnLight() { - // NONMATCHING +#ifdef DEBUG + if (cLib_chaseF(&field_0xadc, l_HIO.mLightMaxRadius, l_HIO.mLightMaxRadius * 0.05f)) { + init_modeSwOffWait(); + } +#else + if (cLib_chaseF(&field_0xadc, 500.0f, 500.0f * 0.05f)) { + init_modeSwOffWait(); + } +#endif } /* 80CF77D8-80CF7838 0008B8 0060+00 3/3 0/0 0/0 .text init_modeSwOffWait__14daObjSwLight_cFv */ void daObjSwLight_c::init_modeSwOffWait() { - // NONMATCHING + // Light Candlestick Switch: Switch <%d> was turned on. + OS_REPORT("光燭台スイッチ:スイッチ<%d>オンしました\n", getSwbit()); + fopAcM_onSwitch(this, getSwbit()); + field_0xae3 = 0; + field_0xae1 = 0; + setOnTimer(); + field_0xae0 = 1; } /* 80CF7838-80CF7974 000918 013C+00 1/0 0/0 0/0 .text modeSwOffWait__14daObjSwLight_cFv */ void daObjSwLight_c::modeSwOffWait() { - // NONMATCHING + checkHit(); + + if (getSwbit2() != 0xff) { + if (fopAcM_isSwitch(this, getSwbit2())) { + field_0xae3 = 1; + } + } + + if (field_0xae3 != 0) { + if (!fopAcM_isSwitch(this, getSwbit2())) { +#ifdef DEBUG + if (cLib_chaseF(&field_0xadc, 0.0f, l_HIO.mLightMaxRadius * 0.05f)) { +#else + if (cLib_chaseF(&field_0xadc, 0.0f, 500.0f * 0.05f)) { +#endif + init_modeSwOnWait(); + } + } else { +#ifdef DEBUG + cLib_chaseF(&field_0xadc, l_HIO.mLightMaxRadius, l_HIO.mLightMaxRadius * 0.05f); +#else + cLib_chaseF(&field_0xadc, 500.0f, 500.0f * 0.05); +#endif + } + + } else { + if (!cLib_checkBit(field_0xae6, (u8)1) && !cLib_checkBit(field_0xae6, 2) && + !cLib_calcTimer(&field_0xae4) && +#ifdef DEBUG + cLib_chaseF(&field_0xadc, 0.0f, l_HIO.mLightMaxRadius * 0.05f)) + { +#else + cLib_chaseF(&field_0xadc, 0.0f, 500.0f * 0.05f)) + { +#endif + init_modeSwOnWait(); + } + } + + if (getEvent() != 0xff) { + orderEvent(getEvent(), 0xff, 1); + } } /* 80CF7974-80CF7978 000A54 0004+00 1/0 0/0 0/0 .text modeDead__14daObjSwLight_cFv */ -void daObjSwLight_c::modeDead() { - /* empty function */ -} +void daObjSwLight_c::modeDead() {} /* 80CF7978-80CF7A6C 000A58 00F4+00 2/2 0/0 0/0 .text checkHit__14daObjSwLight_cFv */ -void daObjSwLight_c::checkHit() { - // NONMATCHING +int daObjSwLight_c::checkHit() { + field_0xae7 = field_0xae6; + field_0xae6 = 0; + + if (mTgSph[0].ChkTgHit()) { + cCcD_Obj* hit_obj = mTgSph[0].GetTgHitObj(); + if (hit_obj != NULL && hit_obj->ChkAtType(AT_TYPE_NORMAL_SWORD) && mTgSph[0].GetTgHitGObj()) + { + if (mTgSph[0].GetTgHitGObj()->GetAtMtrl() == dCcD_MTRL_LIGHT) { + cLib_onBit(field_0xae6, (u8)1); + } + } + } + + if (mTgSph[1].ChkTgHit()) { + cCcD_Obj* hit_obj = mTgSph[1].GetTgHitObj(); + if (hit_obj != NULL && hit_obj->ChkAtType(AT_TYPE_LANTERN_SWING) && + mTgSph[1].GetTgHitGObj()) + { + if (mTgSph[1].GetTgHitGObj()->GetAtMtrl() == dCcD_MTRL_LIGHT) { + cLib_onBit(field_0xae6, (u8)2); + } + } + } + + return 1; } /* 80CF7A6C-80CF7A98 000B4C 002C+00 1/1 0/0 0/0 .text setOnTimer__14daObjSwLight_cFv */ void daObjSwLight_c::setOnTimer() { - // NONMATCHING + if (getOnTime() == 0 || getOnTime() == 255) { + field_0xae4 = 75; + } else { + field_0xae4 = getOnTime() * 15; + } } /* 80CF7A98-80CF7BA8 000B78 0110+00 1/0 0/0 0/0 .text Draw__14daObjSwLight_cFv */ -void daObjSwLight_c::Draw() { - // NONMATCHING +int daObjSwLight_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + J3DModelData* modelData = (J3DModelData*)mpModel->getModelData(); + J3DMaterial* material = modelData->getMaterialNodePointer(field_0xae8); + J3DGXColor* color = material->getTevKColor(0); + +#ifdef DEBUG + u8 fVar1 = field_0xadc / l_HIO.mLightMaxRadius * 255.0f; +#else + u8 fVar1 = field_0xadc / 500.0f * 255.0f; +#endif + color->a = 0xff; + color->r = fVar1; + color->g = fVar1; + color->b = fVar1; + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + +#ifdef DEBUG + if (l_HIO.mCheckRendering) { + mpBgW->CalcPlane(); + } +#endif + + return 1; } /* 80CF7BA8-80CF7BF0 000C88 0048+00 1/0 0/0 0/0 .text Delete__14daObjSwLight_cFv */ -void daObjSwLight_c::Delete() { - // NONMATCHING +int daObjSwLight_c::Delete() { + mSound.deleteObject(); + dComIfG_resDelete(&mPhase, l_arcName); +#ifdef DEBUG + l_HIO.removeHIO(); +#endif + return 1; +} + +/* 80CF7BF0-80CF7D8C 000CD0 019C+00 1/0 0/0 0/0 .text daObjSwLight_create1st__FP14daObjSwLight_c + */ +static int daObjSwLight_create1st(daObjSwLight_c* i_this) { + fopAcM_SetupActor(i_this, daObjSwLight_c); + return i_this->create1st(); +} + +/* 80CF8010-80CF8030 0010F0 0020+00 1/0 0/0 0/0 .text + * daObjSwLight_MoveBGDelete__FP14daObjSwLight_c */ +static int daObjSwLight_MoveBGDelete(daObjSwLight_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80CF8030-80CF8050 001110 0020+00 1/0 0/0 0/0 .text + * daObjSwLight_MoveBGExecute__FP14daObjSwLight_c */ +static int daObjSwLight_MoveBGExecute(daObjSwLight_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80CF8050-80CF807C 001130 002C+00 1/0 0/0 0/0 .text daObjSwLight_MoveBGDraw__FP14daObjSwLight_c + */ +static int daObjSwLight_MoveBGDraw(daObjSwLight_c* i_this) { + return i_this->MoveBGDraw(); } /* ############################################################################################## */ /* 80CF8548-80CF8568 -00001 0020+00 1/0 0/0 0/0 .data daObjSwLight_METHODS */ static actor_method_class daObjSwLight_METHODS = { - (process_method_func)daObjSwLight_create1st__FP14daObjSwLight_c, - (process_method_func)daObjSwLight_MoveBGDelete__FP14daObjSwLight_c, - (process_method_func)daObjSwLight_MoveBGExecute__FP14daObjSwLight_c, - 0, - (process_method_func)daObjSwLight_MoveBGDraw__FP14daObjSwLight_c, + (process_method_func)daObjSwLight_create1st, (process_method_func)daObjSwLight_MoveBGDelete, + (process_method_func)daObjSwLight_MoveBGExecute, 0, + (process_method_func)daObjSwLight_MoveBGDraw, }; /* 80CF8568-80CF8598 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SwLight */ extern actor_process_profile_definition g_profile_Obj_SwLight = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_SwLight, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjSwLight_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 554, // mPriority - &daObjSwLight_METHODS, // sub_method - 0x00040100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_SwLight, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjSwLight_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 554, // mPriority + &daObjSwLight_METHODS, // sub_method + 0x00040100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80CF8598-80CF85A4 000130 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80CF85A4-80CF85B0 00013C 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80CF85B0-80CF85BC 000148 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80CF85BC-80CF85C8 000154 000C+00 5/5 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80CF85C8-80CF85D4 000160 000C+00 5/5 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80CF85D4-80CF85EC 00016C 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; - -/* 80CF85EC-80CF8630 000184 0044+00 2/2 0/0 0/0 .data __vt__14daObjSwLight_c */ -SECTION_DATA extern void* __vt__14daObjSwLight_c[17] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__14daObjSwLight_cFv, - (void*)Create__14daObjSwLight_cFv, - (void*)Execute__14daObjSwLight_cFPPA3_A4_f, - (void*)Draw__14daObjSwLight_cFv, - (void*)Delete__14daObjSwLight_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, - (void*)NULL, - (void*)NULL, - (void*)func_80CF8390, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, - (void*)__dt__14daObjSwLight_cFv, -}; - -/* 80CF7BF0-80CF7D8C 000CD0 019C+00 1/0 0/0 0/0 .text daObjSwLight_create1st__FP14daObjSwLight_c - */ -static void daObjSwLight_create1st(daObjSwLight_c* param_0) { - // NONMATCHING -} - -/* 80CF7D8C-80CF7DD4 000E6C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80CF7DD4-80CF7E58 000EB4 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80CF7E58-80CF7F24 000F38 00CC+00 2/2 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80CF7F24-80CF7F6C 001004 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80CF7F6C-80CF7FB4 00104C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80CF7FB4-80CF8010 001094 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80CF8010-80CF8030 0010F0 0020+00 1/0 0/0 0/0 .text - * daObjSwLight_MoveBGDelete__FP14daObjSwLight_c */ -static void daObjSwLight_MoveBGDelete(daObjSwLight_c* param_0) { - // NONMATCHING -} - -/* 80CF8030-80CF8050 001110 0020+00 1/0 0/0 0/0 .text - * daObjSwLight_MoveBGExecute__FP14daObjSwLight_c */ -static void daObjSwLight_MoveBGExecute(daObjSwLight_c* param_0) { - // NONMATCHING -} - -/* 80CF8050-80CF807C 001130 002C+00 1/0 0/0 0/0 .text daObjSwLight_MoveBGDraw__FP14daObjSwLight_c - */ -static void daObjSwLight_MoveBGDraw(daObjSwLight_c* param_0) { - // NONMATCHING -} - -/* 80CF807C-80CF80C4 00115C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80CF80C4-80CF810C 0011A4 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */ -// dEvLib_callback_c::~dEvLib_callback_c() { -extern "C" void __dt__17dEvLib_callback_cFv() { - // NONMATCHING -} - -/* 80CF810C-80CF8114 0011EC 0008+00 2/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv - */ -// bool dEvLib_callback_c::eventStart() { -extern "C" bool eventStart__17dEvLib_callback_cFv() { - return true; -} - -/* 80CF8114-80CF811C 0011F4 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventRun() { -extern "C" bool eventRun__17dEvLib_callback_cFv() { - return true; -} - -/* 80CF811C-80CF8124 0011FC 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventEnd() { -extern "C" bool eventEnd__17dEvLib_callback_cFv() { - return true; -} - -/* 80CF8124-80CF8358 001204 0234+00 2/1 0/0 0/0 .text __dt__14daObjSwLight_cFv */ -daObjSwLight_c::~daObjSwLight_c() { - // NONMATCHING -} - -/* 80CF8358-80CF8374 001438 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUs */ -extern "C" void func_80CF8358(void* _this, u16* param_0) { - // NONMATCHING -} - -/* 80CF8374-80CF8390 001454 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80CF8374(void* _this, u8* param_0) { - // NONMATCHING -} - -/* 80CF8390-80CF8398 001470 0008+00 1/0 0/0 0/0 .text @1440@__dt__14daObjSwLight_cFv */ -static void func_80CF8390() { - // NONMATCHING -} - -/* 80CF8454-80CF8454 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */