diff --git a/include/d/kankyo/d_kankyo.h b/include/d/kankyo/d_kankyo.h index 6daa055ab87..5265deda92d 100644 --- a/include/d/kankyo/d_kankyo.h +++ b/include/d/kankyo/d_kankyo.h @@ -42,6 +42,8 @@ void dKy_BossLight_set(cXyz* param_0, _GXColor* param_1, f32 param_2, u8 param_3 void dKy_custom_colset(u8 prevGather, u8 curGather, f32 blend); void dKy_setLight(); cXyz dKy_plight_near_pos(); +void dKy_BossSpotLight_set(cXyz* param_0, f32 param_1, f32 param_2, f32 param_3, _GXColor* param_4, + f32 param_5, u8 param_6, u8 param_7); struct LIGHT_INFLUENCE { /* 800CFC7C */ ~LIGHT_INFLUENCE() {} @@ -168,12 +170,12 @@ struct LightStatus { /* 0x4C */ f32 mRefDist; /* 0x50 */ f32 mRefBrightness; /* 0x54 */ GXDistAttnFn mDistFn; - /* 0x58 */ u32 field_0x58[2][6]; //? + /* 0x58 */ u32 field_0x58[2][6]; //? /* 0x88 */ f32 field_0x88; /* 0x8C */ f32 field_0x8c; /* 0x90 */ f32 field_0x90; /* 0x94 */ f32 field_0x94; - /* 0x98 */ u32 field_0x98[2][8]; //? + /* 0x98 */ u32 field_0x98[2][8]; //? /* 0xD8 */ f32 field_0xd8; /* 0xDC */ f32 field_0xdc; /* 0xE0 */ f32 field_0xe0; diff --git a/include/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.h b/include/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.h index 8aced5f54fe..57bf6472eb8 100644 --- a/include/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.h +++ b/include/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.h @@ -1,6 +1,25 @@ #ifndef D_A_KYTAG16_H #define D_A_KYTAG16_H -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" + +class kytag16_class : public fopAc_ac_c { +public: + /* 0x568 */ f32 field_0x568; + /* 0x56C */ u8 field_0x56c; + /* 0x56D */ GXColor field_0x56d; + /* 0x571 */ u8 field_0x571; + /* 0x572 */ u8 field_0x572; + /* 0x573 */ u8 field_0x573; + /* 0x574 */ f32 field_0x574; + /* 0x578 */ f32 field_0x578; + /* 0x57C */ f32 field_0x57c; + /* 0x580 */ f32 field_0x580; + /* 0x584 */ f32 field_0x584; + /* 0x588 */ s16 field_0x588; + /* 0x58A */ s16 field_0x58a; + /* 0x58C */ u8 field_0x58c; + /* 0x58D */ u8 field_0x58d; +}; #endif /* D_A_KYTAG16_H */ diff --git a/include/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.h b/include/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.h index 1dc777bd76f..e8064a88899 100644 --- a/include/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.h +++ b/include/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.h @@ -1,6 +1,18 @@ #ifndef D_A_OBJ_LV3WATEREFF_H #define D_A_OBJ_LV3WATEREFF_H -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" + +class daObjWaterEff_c : public fopAc_ac_c { +public: + /* 80C5C4F8 */ int Create(); + /* 80C5C5DC */ int create(); + /* 80C5C6B0 */ int execute(); + /* 80C5C7B8 */ int _delete(); + + /* 0x568 */ cXyz mSePositions[2]; + /* 0x580 */ JPABaseEmitter* mParticles[4]; + /* 0x590 */ u8 unused_0x590[0x594 - 0x590]; +}; #endif /* D_A_OBJ_LV3WATEREFF_H */ diff --git a/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.cpp b/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.cpp index db890c3bd5a..15524a71862 100644 --- a/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.cpp +++ b/rel/d/a/kytag/d_a_kytag16/d_a_kytag16.cpp @@ -4,307 +4,196 @@ // #include "rel/d/a/kytag/d_a_kytag16/d_a_kytag16.h" -#include "dol2asm.h" -#include "dolphin/types.h" - -// -// Types: -// - -struct kytag16_class {}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct dSv_info_c { - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct cXyz {}; - -struct _GXColor {}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -// -// Forward References: -// - -extern "C" static bool daKytag16_Draw__FP13kytag16_class(); -extern "C" static void daKytag16_Execute__FP13kytag16_class(); -extern "C" static bool daKytag16_IsDelete__FP13kytag16_class(); -extern "C" static bool daKytag16_Delete__FP13kytag16_class(); -extern "C" static void daKytag16_Create__FP10fopAc_ac_c(); -extern "C" extern char const* const d_a_kytag16__stringBase0; -extern "C" extern void* g_profile_KYTAG16[12]; - -// -// External References: -// - -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void dKy_getdaytime_hour__Fv(); -extern "C" void dKy_BossSpotLight_set__FP4cXyzfffP8_GXColorfUcUc(); -extern "C" void cM_rndFX__Ff(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" void strcmp(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_Counter[12 + 4 /* padding */]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; - -// -// Declarations: -// +#include "JSystem/JKernel/JKRHeap.h" +#include "SSystem/SComponent/c_counter.h" +#include "SSystem/SComponent/c_math.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" /* 80860C58-80860C60 000078 0008+00 1/0 0/0 0/0 .text daKytag16_Draw__FP13kytag16_class */ -static bool daKytag16_Draw(kytag16_class* param_0) { - return true; +static int daKytag16_Draw(kytag16_class* i_this) { + return 1; } -/* ############################################################################################## */ -/* 80861134-80861138 000000 0004+00 2/2 0/0 0/0 .rodata @3839 */ -SECTION_RODATA static u8 const lit_3839[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80861134, &lit_3839); - -/* 80861138-8086113C 000004 0004+00 0/2 0/0 0/0 .rodata @3840 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3840 = 1.0f; -COMPILER_STRIP_GATE(0x80861138, &lit_3840); -#pragma pop - -/* 8086113C-80861140 000008 0004+00 0/1 0/0 0/0 .rodata @3841 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3841 = 0.5f; -COMPILER_STRIP_GATE(0x8086113C, &lit_3841); -#pragma pop - -/* 80861140-80861144 00000C 0004+00 0/1 0/0 0/0 .rodata @3842 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3842 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80861140, &lit_3842); -#pragma pop - -/* 80861144-80861148 000010 0004+00 0/1 0/0 0/0 .rodata @3843 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3843 = 0x38D1B717; -COMPILER_STRIP_GATE(0x80861144, &lit_3843); -#pragma pop - -/* 80861148-8086114C 000014 0004+00 0/1 0/0 0/0 .rodata @3844 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3844 = 9.0f / 10.0f; -COMPILER_STRIP_GATE(0x80861148, &lit_3844); -#pragma pop - -/* 8086114C-80861150 000018 0004+00 0/1 0/0 0/0 .rodata @3845 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3845 = 40.0f; -COMPILER_STRIP_GATE(0x8086114C, &lit_3845); -#pragma pop - -/* 80861150-80861154 00001C 0004+00 0/1 0/0 0/0 .rodata @3846 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3846 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80861150, &lit_3846); -#pragma pop - -/* 80861154-80861158 000020 0004+00 0/1 0/0 0/0 .rodata @3847 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3847 = 0x3A83126F; -COMPILER_STRIP_GATE(0x80861154, &lit_3847); -#pragma pop - -/* 80861158-8086115C 000024 0004+00 0/1 0/0 0/0 .rodata @3848 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3848 = 12.0f; -COMPILER_STRIP_GATE(0x80861158, &lit_3848); -#pragma pop - -/* 8086115C-80861160 000028 0004+00 0/1 0/0 0/0 .rodata @3849 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3849 = 50.0f; -COMPILER_STRIP_GATE(0x8086115C, &lit_3849); -#pragma pop - -/* 80861194-80861194 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80861194 = "F_SP117"; -#pragma pop - /* 80860C60-80860E9C 000080 023C+00 1/0 0/0 0/0 .text daKytag16_Execute__FP13kytag16_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daKytag16_Execute(kytag16_class* param_0) { - nofralloc -#include "asm/rel/d/a/kytag/d_a_kytag16/d_a_kytag16/daKytag16_Execute__FP13kytag16_class.s" +static int daKytag16_Execute(kytag16_class* i_this) { + bool var_r29 = false; + f32 var_f31 = 0.0f; + f32 var_f30 = 0.0f; + + if (i_this->field_0x571 < 31) { + if (i_this->field_0x571 > i_this->field_0x572) { + if (dKy_getdaytime_hour() >= i_this->field_0x571 || + dKy_getdaytime_hour() <= i_this->field_0x572) + { + var_r29 = true; + } + } else if (dKy_getdaytime_hour() >= i_this->field_0x571 && + dKy_getdaytime_hour() <= i_this->field_0x572) + { + var_r29 = true; + } + } else { + var_r29 = true; + } + + if (var_r29) { + var_r29 = false; + + if (i_this->field_0x573 != 0xFF) { + s32 room_no = dComIfGp_roomControl_getStayNo(); + + if (dComIfGs_isSwitch(i_this->field_0x573, room_no)) { + var_r29 = true; + } + } else { + var_r29 = true; + } + } + + if (var_r29) { + if (strcmp(dComIfGp_getStartStageName(), "F_SP117") != 0) { + cLib_addCalc(&i_this->field_0x568, 1.0f, 0.5f, 0.1f, 0.0001f); + } else { + var_f31 = cM_ssin(i_this->field_0x588); + var_f30 = cM_scos(i_this->field_0x58a); + + i_this->field_0x588 += 0x500; + i_this->field_0x58a += 800; + + cLib_addCalc(&i_this->field_0x568, 0.9f + (0.1f * cM_ssin(g_Counter.mCounter0 * 0x500)), + 0.5f, 0.1f, 0.0001f); + i_this->field_0x580 = 40.0f; + } + } else { + cLib_addCalc(&i_this->field_0x568, 0.0f, 0.5f, 0.05f, 0.0001f); + } + + if (i_this->field_0x568 > 0.001f) { + dKy_BossSpotLight_set(&i_this->current.pos, i_this->field_0x578 + (12.0f * var_f31), + i_this->field_0x57c + (50.0f * var_f30), i_this->field_0x580, + &i_this->field_0x56d, i_this->field_0x574 * i_this->field_0x568, + i_this->field_0x58c, i_this->field_0x58d); + } + + return 1; } -#pragma pop /* 80860E9C-80860EA4 0002BC 0008+00 1/0 0/0 0/0 .text daKytag16_IsDelete__FP13kytag16_class */ -static bool daKytag16_IsDelete(kytag16_class* param_0) { - return true; +static int daKytag16_IsDelete(kytag16_class* i_this) { + return 1; } /* 80860EA4-80860EAC 0002C4 0008+00 1/0 0/0 0/0 .text daKytag16_Delete__FP13kytag16_class */ -static bool daKytag16_Delete(kytag16_class* param_0) { - return true; +static int daKytag16_Delete(kytag16_class* i_this) { + return 1; } -/* ############################################################################################## */ -/* 80861160-80861164 00002C 0004+00 0/1 0/0 0/0 .rodata @3902 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3902 = 180.0f; -COMPILER_STRIP_GATE(0x80861160, &lit_3902); -#pragma pop - -/* 80861164-80861168 000030 0004+00 0/1 0/0 0/0 .rodata @3903 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3903 = 32767.0f; -COMPILER_STRIP_GATE(0x80861164, &lit_3903); -#pragma pop - -/* 80861168-8086116C 000034 0004+00 0/1 0/0 0/0 .rodata @3904 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3904 = 65535.0f; -COMPILER_STRIP_GATE(0x80861168, &lit_3904); -#pragma pop - -/* 8086116C-80861170 000038 0004+00 0/1 0/0 0/0 .rodata @3905 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3905 = 45.0f; -COMPILER_STRIP_GATE(0x8086116C, &lit_3905); -#pragma pop - -/* 80861170-80861174 00003C 0004+00 0/0 0/0 0/0 .rodata @3906 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3906 = 5.0f; -COMPILER_STRIP_GATE(0x80861170, &lit_3906); -#pragma pop - -/* 80861174-80861178 000040 0004+00 0/0 0/0 0/0 .rodata @3907 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3907 = 10.0f; -COMPILER_STRIP_GATE(0x80861174, &lit_3907); -#pragma pop - -/* 80861178-8086117C 000044 0004+00 0/0 0/0 0/0 .rodata @3908 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3908 = 25.0f; -COMPILER_STRIP_GATE(0x80861178, &lit_3908); -#pragma pop - -/* 8086117C-80861180 000048 0004+00 0/0 0/0 0/0 .rodata @3909 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3909 = 70.0f; -COMPILER_STRIP_GATE(0x8086117C, &lit_3909); -#pragma pop - -/* 80861180-80861184 00004C 0004+00 0/0 0/0 0/0 .rodata @3910 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3910 = 60.0f; -COMPILER_STRIP_GATE(0x80861180, &lit_3910); -#pragma pop - -/* 80861184-8086118C 000050 0004+04 0/0 0/0 0/0 .rodata @3911 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3911[1 + 1 /* padding */] = { - 1.0f / 100.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80861184, &lit_3911); -#pragma pop - -/* 8086118C-80861194 000058 0008+00 0/1 0/0 0/0 .rodata @3913 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3913[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8086118C, &lit_3913); -#pragma pop - -/* 8086119C-808611BC -00001 0020+00 1/1 0/0 0/0 .data @3917 */ -SECTION_DATA static void* lit_3917[8] = { - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x150), - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x170), - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x194), - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x1B8), - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x1D8), - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x1FC), - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x220), - (void*)(((char*)daKytag16_Create__FP10fopAc_ac_c) + 0x244), -}; - /* 80860EAC-8086112C 0002CC 0280+00 2/0 0/0 0/0 .text daKytag16_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daKytag16_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/kytag/d_a_kytag16/d_a_kytag16/daKytag16_Create__FP10fopAc_ac_c.s" +static int daKytag16_Create(fopAc_ac_c* i_this) { + if (!fopAcM_CheckCondition(i_this, 8)) { + new (i_this) kytag16_class(); + fopAcM_OnCondition(i_this, 8); + } + kytag16_class* this_ = (kytag16_class*)i_this; + + this_->field_0x573 = fopAcM_GetParam(this_) & 0xFF; + this_->field_0x56c = (this_->current.angle.z >> 10) & 0x3F; + + this_->field_0x56d.r = fopAcM_GetParam(this_) >> 0x8; + this_->field_0x56d.g = fopAcM_GetParam(this_) >> 0x10; + this_->field_0x56d.b = fopAcM_GetParam(this_) >> 0x18; + + this_->field_0x571 = this_->current.angle.z & 0x1F; + this_->field_0x572 = (this_->current.angle.z >> 5) & 0x1F; + this_->field_0x578 = (this_->shape_angle.x / 32767.0f) * 180.0f; + this_->field_0x57c = (this_->shape_angle.y / 32767.0f) * 180.0f; + + this_->field_0x588 = cM_rndFX(65535.0f); + this_->field_0x58a = cM_rndFX(65535.0f); + this_->field_0x584 = 1.0f; + this_->field_0x568 = 0.0f; + + switch (this_->field_0x56c) { + case 0: + this_->field_0x580 = 45.0f; + this_->field_0x574 = 1.0f; + this_->field_0x58c = 0; + this_->field_0x58d = 3; + break; + case 1: + this_->field_0x580 = 45.0f; + this_->field_0x574 = 5.0f; + this_->field_0x58c = 0; + this_->field_0x58d = 3; + break; + case 2: + this_->field_0x580 = 45.0f; + this_->field_0x574 = 10.0f; + this_->field_0x58c = 0; + this_->field_0x58d = 3; + break; + case 3: + this_->field_0x580 = 25.0f; + this_->field_0x574 = 1.0f; + this_->field_0x58c = 2; + this_->field_0x58d = 3; + break; + case 4: + this_->field_0x580 = 45.0f; + this_->field_0x574 = 5.0f; + this_->field_0x58c = 2; + this_->field_0x58d = 3; + break; + case 5: + this_->field_0x580 = 70.0f; + this_->field_0x574 = 10.0f; + this_->field_0x58c = 2; + this_->field_0x58d = 3; + break; + case 6: + this_->field_0x580 = 60.0f; + this_->field_0x574 = 0.01f; + this_->field_0x58c = 2; + this_->field_0x58d = 1; + break; + case 7: + this_->field_0x580 = 50.0f; + this_->field_0x574 = 0.01f; + this_->field_0x58c = 2; + this_->field_0x58d = 1; + break; + } + + return cPhs_COMPLEATE_e; } -#pragma pop /* ############################################################################################## */ /* 808611BC-808611DC -00001 0020+00 1/0 0/0 0/0 .data l_daKytag16_Method */ -SECTION_DATA static void* l_daKytag16_Method[8] = { - (void*)daKytag16_Create__FP10fopAc_ac_c, - (void*)daKytag16_Delete__FP13kytag16_class, - (void*)daKytag16_Execute__FP13kytag16_class, - (void*)daKytag16_IsDelete__FP13kytag16_class, - (void*)daKytag16_Draw__FP13kytag16_class, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class l_daKytag16_Method = { + (process_method_func)daKytag16_Create, + (process_method_func)daKytag16_Delete, + (process_method_func)daKytag16_Execute, + (process_method_func)daKytag16_IsDelete, + (process_method_func)daKytag16_Draw, }; /* 808611DC-8086120C -00001 0030+00 0/0 0/0 1/0 .data g_profile_KYTAG16 */ -SECTION_DATA extern void* g_profile_KYTAG16[12] = { - (void*)0xFFFFFFFD, (void*)0x0007FFFD, - (void*)0x02BA0000, (void*)&g_fpcLf_Method, - (void*)0x00000590, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x006E0000, (void*)&l_daKytag16_Method, - (void*)0x00060000, (void*)NULL, +extern actor_process_profile_definition g_profile_KYTAG16 = { + -3, + 7, + -3, + PROC_KYTAG16, + &g_fpcLf_Method.mBase, + sizeof(kytag16_class), + 0, + 0, + &g_fopAc_Method.base, + 110, + &l_daKytag16_Method, + 0x60000, + 0, + 0, }; - -/* 80861194-80861194 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.cpp b/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.cpp index 4e5d5404da8..3861fd49b13 100644 --- a/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.cpp +++ b/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.cpp @@ -1,258 +1,123 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_obj_lv3waterEff -// +/** + * d_a_obj_lv3waterEff.cpp + * Lakebed Temple Pre-Deku Toad Room Water Bubbles + */ #include "rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff.h" -#include "dol2asm.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" -// -// Types: -// - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct daObjWaterEff_c { - /* 80C5C4F8 */ void Create(); - /* 80C5C5DC */ void create(); - /* 80C5C6B0 */ void execute(); - /* 80C5C7B8 */ void _delete(); -}; - -struct dPa_levelEcallBack {}; - -struct dKy_tevstr_c {}; - -struct csXyz {}; - -struct _GXColor {}; - -struct cXyz { - /* 80C5C670 */ ~cXyz(); - /* 80C5C6AC */ cXyz(); -}; - -struct dPa_control_c { - /* 8004CA90 */ void set(u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, cXyz const*, - u8, dPa_levelEcallBack*, s8, _GXColor const*, _GXColor const*, - cXyz const*, f32); -}; - -struct JAISoundID {}; - -struct Vec {}; - -struct Z2SeMgr { - /* 802AC50C */ void seStartLevel(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -// -// Forward References: -// - -extern "C" void Create__15daObjWaterEff_cFv(); -extern "C" void create__15daObjWaterEff_cFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void execute__15daObjWaterEff_cFv(); -extern "C" void _delete__15daObjWaterEff_cFv(); -extern "C" static void daObjWaterEff_Execute__FP15daObjWaterEff_c(); -extern "C" static void daObjWaterEff_Delete__FP15daObjWaterEff_c(); -extern "C" static void daObjWaterEff_Create__FP10fopAc_ac_c(); -extern "C" extern void* g_profile_Obj_WaterEff[12]; - -// -// External References: -// - -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void dKy_camera_water_in_status_check__Fv(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void _savegpr_25(); -extern "C" void _restgpr_25(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// - -/* ############################################################################################## */ /* 80C5C878-80C5C880 000000 0008+00 1/1 0/0 0/0 .rodata l_eff_id */ -SECTION_RODATA static u8 const l_eff_id[8] = { - 0x86, 0xD2, 0x86, 0xD3, 0x86, 0xD4, 0x86, 0xD5, +static u16 const l_eff_id[] = { + 0x86D2, + 0x86D3, + 0x86D4, + 0x86D5, }; -COMPILER_STRIP_GATE(0x80C5C878, &l_eff_id); - -/* 80C5C880-80C5C884 000008 0004+00 1/2 0/0 0/0 .rodata @3637 */ -SECTION_RODATA static f32 const lit_3637 = 1.0f; -COMPILER_STRIP_GATE(0x80C5C880, &lit_3637); - -/* 80C5C884-80C5C888 00000C 0004+00 0/1 0/0 0/0 .rodata @3638 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3638 = 14420.0f; -COMPILER_STRIP_GATE(0x80C5C884, &lit_3638); -#pragma pop - -/* 80C5C888-80C5C88C 000010 0004+00 0/1 0/0 0/0 .rodata @3639 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3639 = -1100.0f; -COMPILER_STRIP_GATE(0x80C5C888, &lit_3639); -#pragma pop - -/* 80C5C88C-80C5C890 000014 0004+00 0/1 0/0 0/0 .rodata @3640 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3640 = -4950.0f; -COMPILER_STRIP_GATE(0x80C5C88C, &lit_3640); -#pragma pop - -/* 80C5C890-80C5C894 000018 0004+00 0/1 0/0 0/0 .rodata @3641 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3641 = 12585.0f; -COMPILER_STRIP_GATE(0x80C5C890, &lit_3641); -#pragma pop - -/* 80C5C894-80C5C898 00001C 0004+00 0/1 0/0 0/0 .rodata @3642 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3642 = -550.0f; -COMPILER_STRIP_GATE(0x80C5C894, &lit_3642); -#pragma pop - -/* 80C5C898-80C5C89C 000020 0004+00 0/1 0/0 0/0 .rodata @3643 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3643 = -2390.0f; -COMPILER_STRIP_GATE(0x80C5C898, &lit_3643); -#pragma pop /* 80C5C4F8-80C5C5DC 000078 00E4+00 1/1 0/0 0/0 .text Create__15daObjWaterEff_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjWaterEff_c::Create() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/Create__15daObjWaterEff_cFv.s" +int daObjWaterEff_c::Create() { + for (int i = 0; i < 4; i++) { + mParticles[i] = dComIfGp_particle_set(l_eff_id[i], ¤t.pos, NULL, NULL, 0xFF, NULL, -1, + NULL, NULL, NULL); + } + + mSePositions[0].set(14420.0f, -1100.0f, -4950.0f); + mSePositions[1].set(12585.0f, -550.0f, -2390.0f); + return 1; } -#pragma pop /* 80C5C5DC-80C5C670 00015C 0094+00 1/1 0/0 0/0 .text create__15daObjWaterEff_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjWaterEff_c::create() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/func_80C5C5DC.s" -} -#pragma pop +int daObjWaterEff_c::create() { + if (!fopAcM_CheckCondition(this, 8)) { + new (this) daObjWaterEff_c(); + fopAcM_OnCondition(this, 8); + } -/* 80C5C670-80C5C6AC 0001F0 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm cXyz::~cXyz() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/__dt__4cXyzFv.s" -} -#pragma pop + if (!Create()) { + return cPhs_ERROR_e; + } -/* 80C5C6AC-80C5C6B0 00022C 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -cXyz::cXyz() { - /* empty function */ + return cPhs_COMPLEATE_e; } -/* ############################################################################################## */ -/* 80C5C89C-80C5C8A0 000024 0004+00 1/1 0/0 0/0 .rodata @3710 */ -SECTION_RODATA static f32 const lit_3710 = -1.0f; -COMPILER_STRIP_GATE(0x80C5C89C, &lit_3710); - /* 80C5C6B0-80C5C7B8 000230 0108+00 1/1 0/0 0/0 .text execute__15daObjWaterEff_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjWaterEff_c::execute() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/execute__15daObjWaterEff_cFv.s" +int daObjWaterEff_c::execute() { + if (dKy_camera_water_in_status_check()) { + for (int i = 0; i < 4; i++) { + if (mParticles[i] != NULL) { + mParticles[i]->setGlobalAlpha(255); + } + } + } else { + for (int i = 0; i < 4; i++) { + if (mParticles[i] != NULL) { + mParticles[i]->setGlobalAlpha(128); + } + } + } + + for (int i = 0; i < 2; i++) { + i_mDoAud_seStartLevel(Z2SE_OBJ_WTR_STREAM, &mSePositions[i], 0, 0); + } + + return 1; } -#pragma pop /* 80C5C7B8-80C5C810 000338 0058+00 1/1 0/0 0/0 .text _delete__15daObjWaterEff_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjWaterEff_c::_delete() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/_delete__15daObjWaterEff_cFv.s" +int daObjWaterEff_c::_delete() { + for (int i = 0; i < 4; i++) { + if (mParticles[i] != NULL) { + mParticles[i]->becomeInvalidEmitter(); + mParticles[i]->quitImmortalEmitter(); + mParticles[i] = NULL; + } + } + + return 1; } -#pragma pop /* 80C5C810-80C5C830 000390 0020+00 1/0 0/0 0/0 .text daObjWaterEff_Execute__FP15daObjWaterEff_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjWaterEff_Execute(daObjWaterEff_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/daObjWaterEff_Execute__FP15daObjWaterEff_c.s" +static int daObjWaterEff_Execute(daObjWaterEff_c* i_this) { + return i_this->execute(); } -#pragma pop /* 80C5C830-80C5C850 0003B0 0020+00 1/0 0/0 0/0 .text daObjWaterEff_Delete__FP15daObjWaterEff_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjWaterEff_Delete(daObjWaterEff_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/daObjWaterEff_Delete__FP15daObjWaterEff_c.s" +static int daObjWaterEff_Delete(daObjWaterEff_c* i_this) { + return i_this->_delete(); } -#pragma pop /* 80C5C850-80C5C870 0003D0 0020+00 1/0 0/0 0/0 .text daObjWaterEff_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjWaterEff_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_lv3waterEff/d_a_obj_lv3waterEff/daObjWaterEff_Create__FP10fopAc_ac_c.s" +static int daObjWaterEff_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->create(); } -#pragma pop /* ############################################################################################## */ /* 80C5C8A0-80C5C8C0 -00001 0020+00 1/0 0/0 0/0 .data l_daObjWaterEff_Method */ -SECTION_DATA static void* l_daObjWaterEff_Method[8] = { - (void*)daObjWaterEff_Create__FP10fopAc_ac_c, - (void*)daObjWaterEff_Delete__FP15daObjWaterEff_c, - (void*)daObjWaterEff_Execute__FP15daObjWaterEff_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class l_daObjWaterEff_Method = { + (process_method_func)daObjWaterEff_Create, + (process_method_func)daObjWaterEff_Delete, + (process_method_func)daObjWaterEff_Execute, + (process_method_func)NULL, + (process_method_func)NULL, }; /* 80C5C8C0-80C5C8F0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_WaterEff */ -SECTION_DATA extern void* g_profile_Obj_WaterEff[12] = { - (void*)0xFFFFFFFD, (void*)0x0007FFFD, - (void*)0x017F0000, (void*)&g_fpcLf_Method, - (void*)0x00000594, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x022B0000, (void*)&l_daObjWaterEff_Method, - (void*)0x00040100, (void*)0x000E0000, +extern actor_process_profile_definition g_profile_Obj_WaterEff = { + -3, + 7, + -3, + PROC_Obj_WaterEff, + &g_fpcLf_Method.mBase, + sizeof(daObjWaterEff_c), + 0, + 0, + &g_fopAc_Method.base, + 555, + &l_daObjWaterEff_Method, + 0x40100, + 0, + 14, };