summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-12-18 10:02:52 -0800
committerGitHub <noreply@github.com>2024-12-18 20:02:52 +0200
commitff5f31b84453722de3d1cc1287725eec06d08c6a (patch)
treef515a32d77aadae2135f80e77a035e7437ef23f8 /src/d
parentc5ab943cfc057be3c9310e93e27fc62a2be9cbeb (diff)
kankyo_rain / obj_life_container mostly done, obj_glowsphere done (#2266)
* obj_life_container mostly done * obj_glowSphere done * kankyo_rain mostly done * some cleanup * more kankyo_rain cleanup
Diffstat (limited to 'src/d')
-rw-r--r--src/d/actor/d_a_kytag03.cpp4
-rw-r--r--src/d/actor/d_a_obj_glowSphere.cpp1289
-rw-r--r--src/d/actor/d_a_obj_life_container.cpp1121
-rw-r--r--src/d/d_com_inf_game.cpp24
-rw-r--r--src/d/d_drawlist.cpp4
-rw-r--r--src/d/d_kankyo.cpp6
-rw-r--r--src/d/d_kankyo_rain.cpp6727
-rw-r--r--src/d/d_kankyo_wether.cpp4
-rw-r--r--src/d/d_ky_thunder.cpp8
-rw-r--r--src/d/d_resorce.cpp593
10 files changed, 6188 insertions, 3592 deletions
diff --git a/src/d/actor/d_a_kytag03.cpp b/src/d/actor/d_a_kytag03.cpp
index e301b27f14..7745fd957e 100644
--- a/src/d/actor/d_a_kytag03.cpp
+++ b/src/d/actor/d_a_kytag03.cpp
@@ -262,8 +262,8 @@ static void odour_move(kytag03_class* i_this) {
}
effect->mBasePos.z += temp_f22 * cM_rndFX(50.0f);
- effect->field_0x1c = spFC.x;
- effect->field_0x1e = spFC.y;
+ effect->mRotX = spFC.x;
+ effect->mRotY = spFC.y;
effect->field_0x2c = cM_rndF(20.0f) + 45.0f +
temp_f22 * (cM_rndF(20.0f) + 100.0f);
diff --git a/src/d/actor/d_a_obj_glowSphere.cpp b/src/d/actor/d_a_obj_glowSphere.cpp
index 4af9c5f1a5..9b2cf0f0fe 100644
--- a/src/d/actor/d_a_obj_glowSphere.cpp
+++ b/src/d/actor/d_a_obj_glowSphere.cpp
@@ -1,1032 +1,545 @@
/**
* @file d_a_obj_glowSphere.cpp
- *
-*/
+ *
+ */
#include "d/actor/d_a_obj_glowSphere.h"
-#include "dol2asm.h"
-
-
-
-
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__14daGlwSph_HIO_cFv();
-extern "C" void __dt__18fOpAcm_HIO_entry_cFv();
-extern "C" void __dt__14mDoHIO_entry_cFv();
-extern "C" void getSphMng__10daGlwSph_cFv();
-extern "C" void setBaseMtx__10daGlwSph_cFv();
-extern "C" void createHeapCallBack__10daGlwSph_cFP10fopAc_ac_c();
-extern "C" void CreateHeap__10daGlwSph_cFv();
-extern "C" void create__10daGlwSph_cFv();
-extern "C" void __dt__8cM3dGSphFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" void __dt__12dBgS_AcchCirFv();
-extern "C" void __dt__12dBgS_ObjAcchFv();
-extern "C" void __dt__12J3DFrameCtrlFv();
-extern "C" void execute__10daGlwSph_cFv();
-extern "C" void actionMain__10daGlwSph_cFv();
-extern "C" void effectSet__10daGlwSph_cFv();
-extern "C" void getSE__10daGlwSph_cFv();
-extern "C" void getVibe__10daGlwSph_cFv();
-extern "C" void actionWaitInit__10daGlwSph_cFv();
-extern "C" void actionWait__10daGlwSph_cFv();
-extern "C" void actionGetInit__10daGlwSph_cFv();
-extern "C" void actionGet__10daGlwSph_cFv();
-extern "C" void actionMoveInit__10daGlwSph_cFv();
-extern "C" void actionMove__10daGlwSph_cFv();
-extern "C" void draw__10daGlwSph_cFv();
-extern "C" void _delete__10daGlwSph_cFv();
-extern "C" static void daGlwSph_Draw__FP10daGlwSph_c();
-extern "C" static void daGlwSph_Execute__FP10daGlwSph_c();
-extern "C" static void daGlwSph_Delete__FP10daGlwSph_c();
-extern "C" static void daGlwSph_Create__FP10fopAc_ac_c();
-extern "C" void _clrLstBuf__12_GlSph_Mng_cFv();
-extern "C" void entry__12_GlSph_Mng_cFP10daGlwSph_c();
-extern "C" void remove__12_GlSph_Mng_cFP10daGlwSph_c();
-extern "C" void _setting_main__12_GlSph_Mng_cFv();
-extern "C" void _chkAllGet_main__12_GlSph_Mng_cFv();
-extern "C" void SphSeProc__12_GlSph_Mng_cFv();
-extern "C" void clrSphSe__12_GlSph_Mng_cFv();
-extern "C" void getSphSe__12_GlSph_Mng_cFv();
-extern "C" void incSphSe__12_GlSph_Mng_cFv();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void __dt__14daGlwSph_HIO_cFv();
-extern "C" void __sinit_d_a_obj_glowSphere_cpp();
-extern "C" void __dt__12_GlSph_Mng_cFv();
-extern "C" void __dt__16_GlSph_LstInfo_cFv();
-extern "C" void __ct__16_GlSph_LstInfo_cFv();
-extern "C" static void func_80BFA94C();
-extern "C" static void func_80BFA954();
-extern "C" u8 const mCcDObjInfo__10daGlwSph_c[48];
-extern "C" extern char const* const d_a_obj_glowSphere__stringBase0;
-extern "C" u8 mCcDSph__10daGlwSph_c[64];
-extern "C" u8 mSphMng__10daGlwSph_c[964];
-
-//
-// External References:
-//
-
-extern "C" void play__14mDoExt_baseAnmFv();
-extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
-extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss();
-extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-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 isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void forceOnEventMove__Q213dPa_control_c7level_cFUl();
-extern "C" void getEmitter__Q213dPa_control_c7level_cFUl();
-extern "C" void
-set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void
-set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void StartShock__12dVibration_cFii4cXyz();
-extern "C" void __ct__12dBgS_AcchCirFv();
-extern "C" void SetWall__12dBgS_AcchCirFff();
-extern "C" void __dt__9dBgS_AcchFv();
-extern "C" void __ct__9dBgS_AcchFv();
-extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void GetAc__22dCcD_GAtTgCoCommonBaseFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Move__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void ChkCoHit__12dCcD_GObjInfFv();
-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_mock_light_every_set__FP15LIGHT_INFLUENCE();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void __ml__4cXyzCFf();
-extern "C" void normalizeZP__4cXyzFv();
-extern "C" void __dt__13cBgS_PolyInfoFv();
-extern "C" void __dt__8cM3dGCirFv();
-extern "C" void SetC__8cM3dGSphFRC4cXyz();
-extern "C" void SetR__8cM3dGSphFf();
-extern "C" void cLib_addCalc__FPfffff();
-extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff();
-extern "C" void deleteAllParticle__14JPABaseEmitterFv();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void __dl__FPv();
-extern "C" void init__12J3DFrameCtrlFs();
-extern "C" void __destroy_arr();
-extern "C" void __construct_array();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_21();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_21();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Sph[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_SphAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 mParticleTracePCB__13dPa_control_c[4 + 4 /* padding */];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" void __register_global_object();
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 80BFA970-80BFA974 000000 0004+00 3/3 0/0 0/0 .rodata @3665 */
-SECTION_RODATA static f32 const lit_3665 = 50.0f;
-COMPILER_STRIP_GATE(0x80BFA970, &lit_3665);
-
-/* 80BFA974-80BFA978 000004 0004+00 1/2 0/0 0/0 .rodata @3666 */
-SECTION_RODATA static f32 const lit_3666 = 4.0f;
-COMPILER_STRIP_GATE(0x80BFA974, &lit_3666);
-
-/* 80BFA9D0-80BFA9DC 000000 000C+00 3/3 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80BFA9DC-80BFA9F0 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
-
-/* 80BFA9F0-80BFAA08 000020 0018+00 1/1 0/0 0/0 .data l_cull_box */
-SECTION_DATA static u8 l_cull_box[24] = {
- 0xC1, 0xF0, 0x00, 0x00, 0xC1, 0x20, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00,
- 0x41, 0xF0, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00,
-};
-
-/* 80BFAA08-80BFAA48 000038 0040+00 2/2 0/0 0/0 .data mCcDSph__10daGlwSph_c */
-SECTION_DATA u8 daGlwSph_c::mCcDSph[64] = {
- 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,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80BFAA48-80BFAA4C 000078 0004+00 1/2 0/0 0/0 .data l_prmColor */
-SECTION_DATA static u32 l_prmColor = 0xFFFFFFFF;
-
-/* 80BFAA4C-80BFAA5C 00007C 0010+00 1/3 0/0 0/0 .data l_envColor */
-SECTION_DATA static u8 l_envColor[16] = {
- 0x3C, 0x1E, 0x3C, 0xFF, 0xFF, 0x00, 0x32, 0xFF, 0xC8, 0x78, 0x00, 0xFF, 0x00, 0x32, 0xFF, 0xFF,
-};
-
-/* 80BFAA5C-80BFAA68 -00001 000C+00 0/1 0/0 0/0 .data @3934 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3934[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionWait__10daGlwSph_cFv,
-};
-#pragma pop
-
-/* 80BFAA68-80BFAA74 -00001 000C+00 0/1 0/0 0/0 .data @3935 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3935[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionGet__10daGlwSph_cFv,
-};
-#pragma pop
-
-/* 80BFAA74-80BFAA80 -00001 000C+00 0/1 0/0 0/0 .data @3936 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3936[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionMove__10daGlwSph_cFv,
-};
-#pragma pop
-
-/* 80BFAA80-80BFAAA4 0000B0 0024+00 0/1 0/0 0/0 .data l_func$3933 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_func[36] = {
- 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
-
-/* 80BFAAA4-80BFAAA8 0000D4 0004+00 0/1 0/0 0/0 .data l_eff$3973 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_eff[4] = {
- 0x87,
- 0x4F,
- 0x87,
- 0x50,
-};
-#pragma pop
-
-/* 80BFAAA8-80BFAAAC 0000D8 0004+00 0/1 0/0 0/0 .data l_colorKR$4109 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_colorKR[4] = {
- 0x3C,
- 0x50,
- 0x50,
- 0x00,
-};
-#pragma pop
-
-/* 80BFAAAC-80BFAAB0 0000DC 0004+00 0/1 0/0 0/0 .data l_colorKG$4110 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_colorKG[4] = {
- 0x32,
- 0x00,
- 0x23,
- 0x14,
-};
-#pragma pop
-
-/* 80BFAAB0-80BFAAB4 0000E0 0004+00 0/1 0/0 0/0 .data l_colorKB$4111 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_colorKB[4] = {
- 0x3C,
- 0x23,
- 0x00,
- 0x50,
-};
-#pragma pop
-
-/* 80BFAAB4-80BFAAB8 0000E4 0004+00 0/1 0/0 0/0 .data l_colorCR$4112 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_colorCR[4] = {
- 0x96,
- 0xFF,
- 0xFF,
- 0x00,
-};
-#pragma pop
-
-/* 80BFAAB8-80BFAABC 0000E8 0004+00 0/1 0/0 0/0 .data l_colorCG$4113 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_colorCG[4] = {
- 0x96,
- 0x64,
- 0xFF,
- 0x96,
-};
-#pragma pop
-
-/* 80BFAABC-80BFAAC0 0000EC 0004+00 0/1 0/0 0/0 .data l_colorCB$4114 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_colorCB[4] = {
- 0x96,
- 0x64,
- 0x00,
- 0xFF,
-};
-#pragma pop
-
-/* 80BFAAC0-80BFAAE0 -00001 0020+00 1/0 0/0 0/0 .data l_daGlwSph_Method */
-static actor_method_class l_daGlwSph_Method = {
- (process_method_func)daGlwSph_Create__FP10fopAc_ac_c,
- (process_method_func)daGlwSph_Delete__FP10daGlwSph_c,
- (process_method_func)daGlwSph_Execute__FP10daGlwSph_c,
- 0,
- (process_method_func)daGlwSph_Draw__FP10daGlwSph_c,
-};
-
-/* 80BFAAE0-80BFAB10 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_glowSphere */
-extern actor_process_profile_definition g_profile_Obj_glowSphere = {
- fpcLy_CURRENT_e, // mLayerID
- 7, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_Obj_glowSphere, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daGlwSph_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 651, // mPriority
- &l_daGlwSph_Method, // sub_method
- 0x00040000, // mStatus
- fopAc_ACTOR_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
-
-/* 80BFAB10-80BFAB1C 000140 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */
-SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_AcchCirFv,
-};
+#include "Z2AudioLib/Z2Instances.h"
+#include "d/actor/d_a_player.h"
+#include "d/d_com_inf_game.h"
-/* 80BFAB1C-80BFAB28 00014C 000C+00 2/2 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,
-};
-
-/* 80BFAB28-80BFAB34 000158 000C+00 1/1 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,
-};
+UNK_REL_DATA
-/* 80BFAB34-80BFAB40 000164 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */
-SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGSphFv,
-};
+/* 80BF934C-80BF938C 0000EC 0040+00 1/1 0/0 0/0 .text __ct__14daGlwSph_HIO_cFv */
+daGlwSph_HIO_c::daGlwSph_HIO_c() {
+ speed = 50.0f;
+ speed2 = 4.0f;
+}
+
+UNK_BSS(1109)
+UNK_BSS(1107)
+UNK_BSS(1105)
+UNK_BSS(1104)
+UNK_BSS(1099)
+UNK_BSS(1097)
+UNK_BSS(1095)
+UNK_BSS(1094)
+UNK_BSS(1057)
+UNK_BSS(1055)
+UNK_BSS(1053)
+UNK_BSS(1052)
+UNK_BSS(1014)
+UNK_BSS(1012)
+UNK_BSS(1010)
+UNK_BSS(1009)
-/* 80BFAB40-80BFAB4C 000170 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
+/* 80BFABF4-80BFAC00 000054 000C+00 2/3 0/0 0/0 .bss l_HIO */
+static daGlwSph_HIO_c l_HIO;
-/* 80BFAB4C-80BFAB70 00017C 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */
-SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_ObjAcchFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80BFA954,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80BFA94C,
+/* 80BFA9F0-80BFAA08 000020 0018+00 1/1 0/0 0/0 .data l_cull_box */
+static cull_box l_cull_box = {
+ {-30.0f, -10.0f, -30.0f},
+ {30.0f, 60.0f, 30.0f}
};
-/* 80BFAB70-80BFAB7C 0001A0 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */
-SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12J3DFrameCtrlFv,
+/* 80BFA978-80BFA9A8 000008 0030+00 1/1 0/0 0/0 .rodata mCcDObjInfo__10daGlwSph_c */
+const dCcD_SrcGObjInf daGlwSph_c::mCcDObjInfo = {
+ {0, {{0, 0, 0}, {0x10000, 0x11}, {0x19}}},
+ {dCcD_SE_SWORD, 0, 0, 0, 0x0},
+ {dCcD_SE_STONE, 0, 0, 0, 0x2},
+ {0},
};
-/* 80BFAB7C-80BFAB88 0001AC 000C+00 2/2 0/0 0/0 .data __vt__14daGlwSph_HIO_c */
-SECTION_DATA extern void* __vt__14daGlwSph_HIO_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14daGlwSph_HIO_cFv,
+/* 80BFAA08-80BFAA48 000038 0040+00 2/2 0/0 0/0 .data mCcDSph__10daGlwSph_c */
+dCcD_SrcSph daGlwSph_c::mCcDSph = {
+ daGlwSph_c::mCcDObjInfo,
+ {
+ {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph
+ } // mSphAttr
};
-/* 80BFAB88-80BFAB94 0001B8 000C+00 3/3 0/0 0/0 .data __vt__18fOpAcm_HIO_entry_c */
-SECTION_DATA extern void* __vt__18fOpAcm_HIO_entry_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__18fOpAcm_HIO_entry_cFv,
-};
+/* 80BFAA48-80BFAA4C 000078 0004+00 1/2 0/0 0/0 .data l_prmColor */
+static GXColor l_prmColor = {0xFF, 0xFF, 0xFF, 0xFF};
-/* 80BFAB94-80BFABA0 0001C4 000C+00 4/4 0/0 0/0 .data __vt__14mDoHIO_entry_c */
-SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14mDoHIO_entry_cFv,
+/* 80BFAA4C-80BFAA5C 00007C 0010+00 1/3 0/0 0/0 .data l_envColor */
+static GXColor l_envColor[] = {
+ /* Gray */ {0x3C, 0x1E, 0x3C, 0xFF},
+ /* Red */ {0xFF, 0x00, 0x32, 0xFF},
+ /* Yellow */ {0xC8, 0x78, 0x00, 0xFF},
+ /* Blue */ {0x00, 0x32, 0xFF, 0xFF},
};
-/* 80BF934C-80BF938C 0000EC 0040+00 1/1 0/0 0/0 .text __ct__14daGlwSph_HIO_cFv */
-daGlwSph_HIO_c::daGlwSph_HIO_c() {
- // NONMATCHING
-}
-
-/* 80BF938C-80BF93E8 00012C 005C+00 1/0 0/0 0/0 .text __dt__18fOpAcm_HIO_entry_cFv */
-// fOpAcm_HIO_entry_c::~fOpAcm_HIO_entry_c() {
-extern "C" void __dt__18fOpAcm_HIO_entry_cFv() {
- // NONMATCHING
-}
-
-/* 80BF93E8-80BF9430 000188 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */
-// mDoHIO_entry_c::~mDoHIO_entry_c() {
-extern "C" void __dt__14mDoHIO_entry_cFv() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 80BFABA8-80BFABAC 000008 0001+03 1/1 0/0 0/0 .bss @1109 */
-static u8 lit_1109[1 + 3 /* padding */];
-
-/* 80BFABAC-80BFABB0 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */
-#pragma push
-#pragma force_active on
-static u8 lit_1107[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABB0-80BFABB4 000010 0001+03 0/0 0/0 0/0 .bss @1105 */
-#pragma push
-#pragma force_active on
-static u8 lit_1105[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABB4-80BFABB8 000014 0001+03 0/0 0/0 0/0 .bss @1104 */
-#pragma push
-#pragma force_active on
-static u8 lit_1104[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABB8-80BFABBC 000018 0001+03 0/0 0/0 0/0 .bss @1099 */
-#pragma push
-#pragma force_active on
-static u8 lit_1099[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABBC-80BFABC0 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */
-#pragma push
-#pragma force_active on
-static u8 lit_1097[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABC0-80BFABC4 000020 0001+03 0/0 0/0 0/0 .bss @1095 */
-#pragma push
-#pragma force_active on
-static u8 lit_1095[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABC4-80BFABC8 000024 0001+03 0/0 0/0 0/0 .bss @1094 */
-#pragma push
-#pragma force_active on
-static u8 lit_1094[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABC8-80BFABCC 000028 0001+03 0/0 0/0 0/0 .bss @1057 */
-#pragma push
-#pragma force_active on
-static u8 lit_1057[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABCC-80BFABD0 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */
-#pragma push
-#pragma force_active on
-static u8 lit_1055[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABD0-80BFABD4 000030 0001+03 0/0 0/0 0/0 .bss @1053 */
-#pragma push
-#pragma force_active on
-static u8 lit_1053[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABD4-80BFABD8 000034 0001+03 0/0 0/0 0/0 .bss @1052 */
-#pragma push
-#pragma force_active on
-static u8 lit_1052[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABD8-80BFABDC 000038 0001+03 0/0 0/0 0/0 .bss @1014 */
-#pragma push
-#pragma force_active on
-static u8 lit_1014[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABDC-80BFABE0 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */
-#pragma push
-#pragma force_active on
-static u8 lit_1012[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABE0-80BFABE4 000040 0001+03 0/0 0/0 0/0 .bss @1010 */
-#pragma push
-#pragma force_active on
-static u8 lit_1010[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABE4-80BFABE8 000044 0001+03 0/0 0/0 0/0 .bss @1009 */
-#pragma push
-#pragma force_active on
-static u8 lit_1009[1 + 3 /* padding */];
-#pragma pop
-
-/* 80BFABE8-80BFABF4 000048 000C+00 0/1 0/0 0/0 .bss @3657 */
-#pragma push
-#pragma force_active on
-static u8 lit_3657[12];
-#pragma pop
-
-/* 80BFABF4-80BFAC00 000054 000C+00 2/3 0/0 0/0 .bss l_HIO */
-static u8 l_HIO[12];
-
-/* 80BFAC00-80BFAC0C 000060 000C+00 0/1 0/0 0/0 .bss @3673 */
-#pragma push
-#pragma force_active on
-static u8 lit_3673[12];
-#pragma pop
-
/* 80BFAC0C-80BFAFD0 00006C 03C4+00 3/4 0/0 0/0 .bss mSphMng__10daGlwSph_c */
-u8 daGlwSph_c::mSphMng[964];
+_GlSph_Mng_c daGlwSph_c::mSphMng;
/* 80BF9430-80BF943C 0001D0 000C+00 0/0 0/0 1/1 .text getSphMng__10daGlwSph_cFv */
-void daGlwSph_c::getSphMng() {
- // NONMATCHING
+_GlSph_Mng_c& daGlwSph_c::getSphMng() {
+ return mSphMng;
}
/* 80BF943C-80BF94AC 0001DC 0070+00 2/2 0/0 0/0 .text setBaseMtx__10daGlwSph_cFv */
void daGlwSph_c::setBaseMtx() {
- // NONMATCHING
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
+ mpModel->setBaseScale(scale);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 80BF94AC-80BF94CC 00024C 0020+00 1/1 0/0 0/0 .text
* createHeapCallBack__10daGlwSph_cFP10fopAc_ac_c */
-void daGlwSph_c::createHeapCallBack(fopAc_ac_c* param_0) {
- // NONMATCHING
+int daGlwSph_c::createHeapCallBack(fopAc_ac_c* i_this) {
+ return ((daGlwSph_c*)i_this)->CreateHeap();
}
-/* ############################################################################################## */
-/* 80BFA978-80BFA9A8 000008 0030+00 1/1 0/0 0/0 .rodata mCcDObjInfo__10daGlwSph_c */
-SECTION_RODATA u8 const daGlwSph_c::mCcDObjInfo[48] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80BFA978, &daGlwSph_c::mCcDObjInfo);
+/* 80BF94CC-80BF95D4 00026C 0108+00 1/1 0/0 0/0 .text CreateHeap__10daGlwSph_cFv */
+int daGlwSph_c::CreateHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("glwSphere", 5);
+ JUT_ASSERT(0xF4, modelData != 0);
+ mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284);
+ if (mpModel == NULL) {
+ return 0;
+ }
-/* 80BFA9A8-80BFA9AC 000038 0004+00 3/4 0/0 0/0 .rodata @3714 */
-SECTION_RODATA static f32 const lit_3714 = 1.0f;
-COMPILER_STRIP_GATE(0x80BFA9A8, &lit_3714);
+ J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("glwSphere", 8);
+ int res = mBrk.init(modelData, brk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1);
+ JUT_ASSERT(0x106, res == 1);
-/* 80BFA9C4-80BFA9C4 000054 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80BFA9C4 = "glwSphere";
-#pragma pop
+ J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("glwSphere", 11);
+ res = mBtk.init(modelData, btk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1);
+ JUT_ASSERT(0x10F, res == 1);
-/* 80BF94CC-80BF95D4 00026C 0108+00 1/1 0/0 0/0 .text CreateHeap__10daGlwSph_cFv */
-void daGlwSph_c::CreateHeap() {
- // NONMATCHING
+ return 1;
}
-/* ############################################################################################## */
-/* 80BFA9AC-80BFA9B0 00003C 0004+00 1/1 0/0 0/0 .rodata @3826 */
-SECTION_RODATA static f32 const lit_3826 = 25.0f;
-COMPILER_STRIP_GATE(0x80BFA9AC, &lit_3826);
-
/* 80BF95D4-80BF9908 000374 0334+00 1/1 0/0 0/0 .text create__10daGlwSph_cFv */
-void daGlwSph_c::create() {
- // NONMATCHING
-}
+int daGlwSph_c::create() {
+ fopAcM_SetupActor(this, daGlwSph_c);
-/* 80BF9908-80BF9950 0006A8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
-// cM3dGSph::~cM3dGSph() {
-extern "C" void __dt__8cM3dGSphFv() {
- // NONMATCHING
-}
+ int phase_state = dComIfG_resLoad(&mPhase, "glwSphere");
+ if (phase_state != cPhs_COMPLEATE_e) {
+ return phase_state;
+ }
-/* 80BF9950-80BF9998 0006F0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
+ int sw = getSw();
-/* 80BF9998-80BF99F4 000738 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
-}
+ u8 arg0 = getArg0();
+ if (arg0 == 0xFF) {
+ arg0 = 0;
+ }
-/* 80BF99F4-80BF9A64 000794 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */
-// dBgS_AcchCir::~dBgS_AcchCir() {
-extern "C" void __dt__12dBgS_AcchCirFv() {
- // NONMATCHING
-}
+ if ((fopAcM_isSwitch(this, sw) == TRUE && arg0 == 1) || (!fopAcM_isSwitch(this, sw) && arg0 == 0)) {
+ return cPhs_ERROR_e;
+ }
-/* 80BF9A64-80BF9AD4 000804 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */
-// dBgS_ObjAcch::~dBgS_ObjAcch() {
-extern "C" void __dt__12dBgS_ObjAcchFv() {
- // NONMATCHING
-}
+ if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x9E0)) {
+ return cPhs_ERROR_e;
+ }
-/* 80BF9AD4-80BF9B1C 000874 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */
-// J3DFrameCtrl::~J3DFrameCtrl() {
-extern "C" void __dt__12J3DFrameCtrlFv() {
- // NONMATCHING
+ mColliderStts.Init(10, 0xFF, this);
+ mSphCollider.Set(mCcDSph);
+ mSphCollider.SetStts(&mColliderStts);
+
+ fopAcM_setCullSizeBox(this, l_cull_box.min.x, l_cull_box.min.y, l_cull_box.min.z, l_cull_box.max.x, l_cull_box.max.y, l_cull_box.max.z);
+
+ mAcchCir.SetWall(25.0f, 25.0f);
+ mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL);
+
+ mColor = getColor();
+ if (mColor == COLOR_DEFAULT_e) {
+ mColor = COLOR_GRAY_e;
+ }
+
+ mMoveTimer = 0;
+ mIsNoMoveHome = false;
+ field_0x968 = current.pos;
+ mEmitterIDs[0] = fpcM_ERROR_PROCESS_ID_e;
+ mEmitterIDs[1] = fpcM_ERROR_PROCESS_ID_e;
+
+ offGetFlag();
+ saveGetFlag();
+
+ mSphMng.entry(this);
+ field_0x980 = -1;
+
+ setBaseMtx();
+ actionWaitInit();
+
+ return phase_state;
}
/* 80BF9B1C-80BF9BC0 0008BC 00A4+00 1/1 0/0 0/0 .text execute__10daGlwSph_cFv */
-void daGlwSph_c::execute() {
- // NONMATCHING
-}
+int daGlwSph_c::execute() {
+ if (is_getted()) {
+ saveGetFlag();
+ return 1;
+ }
-/* ############################################################################################## */
-/* 80BFA9B0-80BFA9B4 000040 0004+00 1/1 0/0 0/0 .rodata @3968 */
-SECTION_RODATA static f32 const lit_3968 = 400.0f;
-COMPILER_STRIP_GATE(0x80BFA9B0, &lit_3968);
+ mBrk.play();
+ mBtk.play();
+
+ actionMain();
-/* 80BFA9B4-80BFA9B8 000044 0004+00 1/2 0/0 0/0 .rodata @3969 */
-SECTION_RODATA static f32 const lit_3969 = 0.5f;
-COMPILER_STRIP_GATE(0x80BFA9B4, &lit_3969);
+ mColliderStts.Move();
+ mSphCollider.SetR(50.0f);
+ mSphCollider.SetC(current.pos);
+ dComIfG_Ccsp()->Set(&mSphCollider);
-/* 80BFAFD0-80BFAFD4 -00001 0004+00 2/2 0/0 0/0 .bss None */
-/* 80BFAFD0 0001+00 data_80BFAFD0 None */
-/* 80BFAFD1 0003+00 data_80BFAFD1 None */
-static u8 struct_80BFAFD0[4];
+ setBaseMtx();
+ saveGetFlag();
+ return 1;
+}
/* 80BF9BC0-80BF9DF0 000960 0230+00 1/1 0/0 0/0 .text actionMain__10daGlwSph_cFv */
void daGlwSph_c::actionMain() {
- // NONMATCHING
+ static void (daGlwSph_c::*l_func[])() = {
+ &daGlwSph_c::actionWait,
+ &daGlwSph_c::actionGet,
+ &daGlwSph_c::actionMove,
+ };
+
+ if (mSphCollider.ChkTgHit()) {
+ OS_REPORT("");
+ fopAc_ac_c* hit_actor = mSphCollider.GetTgHitAc();
+ cXyz vec = current.pos - hit_actor->current.pos;
+ mMoveVec = vec.normalizeZP();
+ actionMoveInit();
+ }
+
+ if (mSphCollider.ChkCoHit()) {
+ mSphCollider.OffCoSetBit();
+ mSphCollider.ClrCoHit();
+ actionGetInit();
+ } else {
+ effectSet();
+ mLight.mPosition = current.pos;
+ mLight.mColor.r = l_envColor[mColor].r;
+ mLight.mColor.g = l_envColor[mColor].g;
+ mLight.mColor.b = l_envColor[mColor].b;
+ mLight.mPow = 400.0f;
+ dKy_mock_light_every_set(&mLight);
+ }
+
+ if (mMoveTimer != 0) {
+ mMoveTimer--;
+ if (mMoveTimer == 0) {
+ mIsNoMoveHome = false;
+ }
+ }
+
+ if (!mIsNoMoveHome) {
+ cLib_addCalcPos(&current.pos, home.pos, 0.5f, l_HIO.speed2, 0.5f);
+ }
+
+ (this->*l_func[mAction])();
}
-/* ############################################################################################## */
-/* 80BFA9B8-80BFA9BC 000048 0004+00 3/4 0/0 0/0 .rodata @4012 */
-SECTION_RODATA static u8 const lit_4012[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80BFA9B8, &lit_4012);
-
/* 80BF9DF0-80BF9F30 000B90 0140+00 1/1 0/0 0/0 .text effectSet__10daGlwSph_cFv */
void daGlwSph_c::effectSet() {
- // NONMATCHING
-}
+ field_0x974 = current.pos - field_0x968;
-/* ############################################################################################## */
-/* 80BFA9BC-80BFA9C0 00004C 0004+00 1/1 0/0 0/0 .rodata @4031 */
-SECTION_RODATA static f32 const lit_4031 = -1.0f;
-COMPILER_STRIP_GATE(0x80BFA9BC, &lit_4031);
+ for (int i = 0; i < 2; i++) {
+ static u16 l_eff[] = {0x874F, 0x8750};
+ mEmitterIDs[i] = dComIfGp_particle_setColor(mEmitterIDs[i], l_eff[i], &current.pos, &tevStr, &l_prmColor, &l_envColor[mColor], 0.0f, 0xFF, NULL, NULL, NULL, -1, NULL);
-/* 80BFAFD4-80BFAFE8 000434 0014+00 1/1 0/0 0/0 .bss sSeId$4016 */
-static u8 sSeId[20];
+ JPABaseEmitter* emitterp = dComIfGp_particle_getEmitter(mEmitterIDs[i]);
+ if (emitterp != NULL) {
+ emitterp->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB());
+ emitterp->setUserWork((u32)&field_0x974);
+ }
+ }
+
+ field_0x968 = current.pos;
+}
/* 80BF9F30-80BFA010 000CD0 00E0+00 1/1 0/0 0/0 .text getSE__10daGlwSph_cFv */
void daGlwSph_c::getSE() {
- // NONMATCHING
+ static JAISoundID sSeId[] = {
+ Z2SE_OBJ_STAR_GAME_HIT_1,
+ Z2SE_OBJ_STAR_GAME_HIT_2,
+ Z2SE_OBJ_STAR_GAME_HIT_3,
+ Z2SE_OBJ_STAR_GAME_HIT_4,
+ Z2SE_OBJ_STAR_GAME_HIT_5
+ };
+
+ u16 sph_seid = _GlSph_Mng_c::getSphSe();
+ cXyz pos(current.pos);
+
+ OS_REPORT("---------- sph seid = %d\n", sph_seid);
+ Z2GetAudioMgr()->seStart(sSeId[sph_seid], &pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
/* 80BFA010-80BFA064 000DB0 0054+00 1/1 0/0 0/0 .text getVibe__10daGlwSph_cFv */
void daGlwSph_c::getVibe() {
- // NONMATCHING
+ dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 1, cXyz(0.0f, 1.0f, 0.0f));
}
/* 80BFA064-80BFA070 000E04 000C+00 2/2 0/0 0/0 .text actionWaitInit__10daGlwSph_cFv */
void daGlwSph_c::actionWaitInit() {
- // NONMATCHING
+ mAction = ACTION_WAIT_e;
}
/* 80BFA070-80BFA074 000E10 0004+00 1/0 0/0 0/0 .text actionWait__10daGlwSph_cFv */
-void daGlwSph_c::actionWait() {
- /* empty function */
-}
+void daGlwSph_c::actionWait() {}
/* 80BFA074-80BFA130 000E14 00BC+00 1/1 0/0 0/0 .text actionGetInit__10daGlwSph_cFv */
void daGlwSph_c::actionGetInit() {
- // NONMATCHING
+ field_0x980 = 1;
+ dComIfGp_particle_setColor(0x8751, &current.pos, &tevStr, &l_prmColor, &l_envColor[mColor], 0.0f, 0xFF);
+ getSE();
+ getVibe();
+
+ _GlSph_Mng_c::incSphSe();
+ mAction = ACTION_GET_e;
}
/* 80BFA130-80BFA1E0 000ED0 00B0+00 1/0 0/0 0/0 .text actionGet__10daGlwSph_cFv */
void daGlwSph_c::actionGet() {
- // NONMATCHING
+ if (field_0x980 > 0) {
+ field_0x980--;
+ if (field_0x980 == 0) {
+ for (int i = 0; i < 2; i++) {
+ JPABaseEmitter* emitterp = dComIfGp_particle_getEmitter(mEmitterIDs[i]);
+ if (emitterp != NULL) {
+ emitterp->deleteAllParticle();
+ dComIfGp_particle_levelEmitterOnEventMove(mEmitterIDs[i]);
+ }
+ }
+
+ onGetFlag();
+ field_0x980 = -1;
+ }
+ }
}
/* 80BFA1E0-80BFA204 000F80 0024+00 1/1 0/0 0/0 .text actionMoveInit__10daGlwSph_cFv */
void daGlwSph_c::actionMoveInit() {
- // NONMATCHING
+ mIsNoMoveHome = true;
+ mMoveSpeed = l_HIO.speed;
+ mAction = ACTION_MOVE_e;
}
-/* ############################################################################################## */
-/* 80BFA9C0-80BFA9C4 000050 0004+00 0/1 0/0 0/0 .rodata @4103 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4103 = 10.0f;
-COMPILER_STRIP_GATE(0x80BFA9C0, &lit_4103);
-#pragma pop
-
/* 80BFA204-80BFA2A4 000FA4 00A0+00 1/0 0/0 0/0 .text actionMove__10daGlwSph_cFv */
void daGlwSph_c::actionMove() {
- // NONMATCHING
+ f32 dist_to_target = cLib_addCalc(&mMoveSpeed, 0.0f, 0.5f, 10.0f, 1.0f);
+ current.pos += mMoveVec * mMoveSpeed;
+
+ if (dist_to_target == 0.0f) {
+ mMoveTimer = 10;
+ actionWaitInit();
+ }
}
/* 80BFA2A4-80BFA3EC 001044 0148+00 1/1 0/0 0/0 .text draw__10daGlwSph_cFv */
-void daGlwSph_c::draw() {
- // NONMATCHING
+int daGlwSph_c::draw() {
+ if (is_getted()) {
+ return 1;
+ }
+
+ g_env_light.settingTevStruct(0, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
+
+ J3DModelData* modelData = mpModel->getModelData();
+ mBrk.entry(modelData);
+ mBtk.entry(modelData);
+
+ J3DMaterial* materialp = modelData->getMaterialNodePointer(0);
+
+ static u8 l_colorKR[4] = {0x3C, 0x50, 0x50, 0x00};
+ static u8 l_colorKG[4] = {0x32, 0x00, 0x23, 0x14};
+ static u8 l_colorKB[4] = {0x3C, 0x23, 0x00, 0x50};
+
+ J3DGXColor* kcolor = materialp->getTevKColor(1);
+ kcolor->r = l_colorKR[mColor];
+ kcolor->g = l_colorKG[mColor];
+ kcolor->b = l_colorKB[mColor];
+
+ static u8 l_colorCR[4] = {0x96, 0xFF, 0xFF, 0x00};
+ static u8 l_colorCG[4] = {0x96, 0x64, 0xFF, 0x96};
+ static u8 l_colorCB[4] = {0x96, 0x64, 0x00, 0xFF};
+
+ J3DGXColorS10* ccolor = materialp->getTevColor(1);
+ ccolor->r = l_colorCR[mColor];
+ ccolor->g = l_colorCG[mColor];
+ ccolor->b = l_colorCB[mColor];
+
+ mDoExt_modelUpdateDL(mpModel);
+ return 1;
}
/* 80BFA3EC-80BFA438 00118C 004C+00 1/1 0/0 0/0 .text _delete__10daGlwSph_cFv */
-void daGlwSph_c::_delete() {
- // NONMATCHING
+int daGlwSph_c::_delete() {
+ dComIfG_resDelete(&mPhase, "glwSphere");
+ mSphMng.remove(this);
+ return 1;
}
/* 80BFA438-80BFA458 0011D8 0020+00 1/0 0/0 0/0 .text daGlwSph_Draw__FP10daGlwSph_c */
-static void daGlwSph_Draw(daGlwSph_c* param_0) {
- // NONMATCHING
+static int daGlwSph_Draw(daGlwSph_c* i_this) {
+ return i_this->draw();
}
/* 80BFA458-80BFA478 0011F8 0020+00 1/0 0/0 0/0 .text daGlwSph_Execute__FP10daGlwSph_c */
-static void daGlwSph_Execute(daGlwSph_c* param_0) {
- // NONMATCHING
+static int daGlwSph_Execute(daGlwSph_c* i_this) {
+ return i_this->execute();
}
/* 80BFA478-80BFA498 001218 0020+00 1/0 0/0 0/0 .text daGlwSph_Delete__FP10daGlwSph_c */
-static void daGlwSph_Delete(daGlwSph_c* param_0) {
- // NONMATCHING
+static int daGlwSph_Delete(daGlwSph_c* i_this) {
+ return i_this->_delete();
}
/* 80BFA498-80BFA4B8 001238 0020+00 1/0 0/0 0/0 .text daGlwSph_Create__FP10fopAc_ac_c */
-static void daGlwSph_Create(fopAc_ac_c* param_0) {
- // NONMATCHING
+static int daGlwSph_Create(fopAc_ac_c* i_this) {
+ return ((daGlwSph_c*)i_this)->create();
}
/* 80BFA4B8-80BFA4DC 001258 0024+00 1/1 0/0 0/0 .text _clrLstBuf__12_GlSph_Mng_cFv */
void _GlSph_Mng_c::_clrLstBuf() {
- // NONMATCHING
+ _GlSph_LstInfo_c* info = mListBuf;
+
+ for (int i = 0; i < 120; i++) {
+ info->Remove();
+ info++;
+ }
}
/* 80BFA4DC-80BFA528 00127C 004C+00 1/1 0/0 0/0 .text entry__12_GlSph_Mng_cFP10daGlwSph_c
*/
-void _GlSph_Mng_c::entry(daGlwSph_c* param_0) {
- // NONMATCHING
+int _GlSph_Mng_c::entry(daGlwSph_c* i_sph) {
+ _GlSph_LstInfo_c* info = mListBuf;
+
+ for (int i = 0; i < 120; i++) {
+ if (!info->isSet()) {
+ info->Set(i_sph);
+ return 1;
+ }
+
+ info++;
+ }
+
+ return 0;
}
/* 80BFA528-80BFA55C 0012C8 0034+00 1/1 0/0 0/0 .text remove__12_GlSph_Mng_cFP10daGlwSph_c */
-void _GlSph_Mng_c::remove(daGlwSph_c* param_0) {
- // NONMATCHING
+void _GlSph_Mng_c::remove(daGlwSph_c* i_sph) {
+ _GlSph_LstInfo_c* info = mListBuf;
+
+ for (int i = 0; i < 120; i++) {
+ if (i_sph == info->getpSph()) {
+ info->Remove();
+ break;
+ }
+
+ info++;
+ }
}
/* 80BFA55C-80BFA5C4 0012FC 0068+00 0/0 0/0 1/1 .text _setting_main__12_GlSph_Mng_cFv */
-void _GlSph_Mng_c::_setting_main() {
- // NONMATCHING
+int _GlSph_Mng_c::_setting_main() {
+ _GlSph_LstInfo_c* info = mListBuf;
+
+ for (int i = 0; i < 120; i++) {
+ if (info->isSet()) {
+ daGlwSph_c* psph = info->getpSph();
+ if (psph != NULL) {
+ psph->reset();
+ }
+ }
+
+ info++;
+ }
+
+ return 1;
}
/* 80BFA5C4-80BFA60C 001364 0048+00 0/0 0/0 1/1 .text _chkAllGet_main__12_GlSph_Mng_cFv
*/
-void _GlSph_Mng_c::_chkAllGet_main() {
- // NONMATCHING
+bool _GlSph_Mng_c::_chkAllGet_main() {
+ _GlSph_LstInfo_c* info = mListBuf;
+
+ for (int i = 0; i < 120; i++) {
+ if (info->isSet()) {
+ daGlwSph_c* psph = info->getpSph();
+ if (psph != NULL && !psph->is_getted()) {
+ return false;
+ }
+ }
+
+ info++;
+ }
+
+ return true;
}
-/* ############################################################################################## */
-/* 80BFAFE8-80BFAFEC -00001 0004+00 4/4 0/0 0/0 .bss None */
/* 80BFAFE8 0002+00 data_80BFAFE8 mSphSe__12_GlSph_Mng_c */
+u16 _GlSph_Mng_c::mSphSe;
+
/* 80BFAFEA 0002+00 data_80BFAFEA mSeClrTmr__12_GlSph_Mng_c */
-static u8 struct_80BFAFE8[4];
+s16 _GlSph_Mng_c::mSeClrTmr;
/* 80BFA60C-80BFA6D8 0013AC 00CC+00 0/0 0/0 1/1 .text SphSeProc__12_GlSph_Mng_cFv */
void _GlSph_Mng_c::SphSeProc() {
- // NONMATCHING
+ if (mSeClrTmr > 0) {
+ mSeClrTmr--;
+ OS_REPORT("-------- se timer = %d\n", mSeClrTmr);
+
+ if (mSeClrTmr == 0) {
+ OS_REPORT("------------ se clr ----------------\n");
+ clrSphSe();
+ }
+ } else if (mSphSe != 0) {
+ if (dComIfGp_checkPlayerStatus1(0, 0x10) || daPy_getPlayerActorClass()->checkPlayerFly()) {
+ if (dComIfGp_checkPlayerStatus1(0, 0x2000000) || dComIfGp_checkPlayerStatus1(0, 0x10000)) {
+ mSeClrTmr = 16;
+ }
+ } else {
+ mSeClrTmr = 16;
+ }
+ } else {
+ mSeClrTmr = 0;
+ }
}
/* 80BFA6D8-80BFA6E8 001478 0010+00 1/1 0/0 0/0 .text clrSphSe__12_GlSph_Mng_cFv */
void _GlSph_Mng_c::clrSphSe() {
- // NONMATCHING
+ mSphSe = 0;
}
/* 80BFA6E8-80BFA6F8 001488 0010+00 1/1 0/0 0/0 .text getSphSe__12_GlSph_Mng_cFv */
-void _GlSph_Mng_c::getSphSe() {
- // NONMATCHING
+u16 _GlSph_Mng_c::getSphSe() {
+ return mSphSe;
}
/* 80BFA6F8-80BFA724 001498 002C+00 1/1 0/0 0/0 .text incSphSe__12_GlSph_Mng_cFv */
void _GlSph_Mng_c::incSphSe() {
- // NONMATCHING
-}
-
-/* 80BFA724-80BFA76C 0014C4 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80BFA76C-80BFA7D8 00150C 006C+00 2/1 0/0 0/0 .text __dt__14daGlwSph_HIO_cFv */
-daGlwSph_HIO_c::~daGlwSph_HIO_c() {
- // NONMATCHING
-}
-
-/* 80BFA7D8-80BFA890 001578 00B8+00 0/0 1/0 0/0 .text __sinit_d_a_obj_glowSphere_cpp */
-void __sinit_d_a_obj_glowSphere_cpp() {
- // NONMATCHING
-}
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80BFA7D8, __sinit_d_a_obj_glowSphere_cpp);
-#pragma pop
-
-/* 80BFA890-80BFA900 001630 0070+00 1/1 0/0 0/0 .text __dt__12_GlSph_Mng_cFv */
-_GlSph_Mng_c::~_GlSph_Mng_c() {
- // NONMATCHING
-}
-
-/* 80BFA900-80BFA93C 0016A0 003C+00 2/2 0/0 0/0 .text __dt__16_GlSph_LstInfo_cFv */
-_GlSph_LstInfo_c::~_GlSph_LstInfo_c() {
- // NONMATCHING
-}
-
-/* 80BFA93C-80BFA94C 0016DC 0010+00 1/1 0/0 0/0 .text __ct__16_GlSph_LstInfo_cFv */
-_GlSph_LstInfo_c::_GlSph_LstInfo_c() {
- // NONMATCHING
-}
-
-/* 80BFA94C-80BFA954 0016EC 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_80BFA94C() {
- // NONMATCHING
-}
-
-/* 80BFA954-80BFA95C 0016F4 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_80BFA954() {
- // NONMATCHING
+ mSphSe++;
+ if (mSphSe > 4) {
+ mSphSe = 4;
+ }
}
-/* ############################################################################################## */
-/* 80BFAFEC-80BFAFF0 00044C 0004+00 0/0 0/0 0/0 .bss
- * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFAFEC[4];
-#pragma pop
-
-/* 80BFAFF0-80BFAFF4 000450 0004+00 0/0 0/0 0/0 .bss
- * sInstance__35JASGlobalInstance<14JASAudioThread> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFAFF0[4];
-#pragma pop
-
-/* 80BFAFF4-80BFAFF8 000454 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFAFF4[4];
-#pragma pop
-
-/* 80BFAFF8-80BFAFFC 000458 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFAFF8[4];
-#pragma pop
-
-/* 80BFAFFC-80BFB000 00045C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFAFFC[4];
-#pragma pop
-
-/* 80BFB000-80BFB004 000460 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB000[4];
-#pragma pop
-
-/* 80BFB004-80BFB008 000464 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB004[4];
-#pragma pop
-
-/* 80BFB008-80BFB00C 000468 0004+00 0/0 0/0 0/0 .bss
- * sInstance__36JASGlobalInstance<15JAISoundStarter> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB008[4];
-#pragma pop
-
-/* 80BFB00C-80BFB010 00046C 0004+00 0/0 0/0 0/0 .bss
- * sInstance__35JASGlobalInstance<14Z2SoundStarter> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB00C[4];
-#pragma pop
-
-/* 80BFB010-80BFB014 000470 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB010[4];
-#pragma pop
-
-/* 80BFB014-80BFB018 000474 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB014[4];
-#pragma pop
-
-/* 80BFB018-80BFB01C 000478 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB018[4];
-#pragma pop
-
-/* 80BFB01C-80BFB020 00047C 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12JAIStreamMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB01C[4];
-#pragma pop
-
-/* 80BFB020-80BFB024 000480 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB020[4];
-#pragma pop
-
-/* 80BFB024-80BFB028 000484 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12JAISoundInfo> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB024[4];
-#pragma pop
-
-/* 80BFB028-80BFB02C 000488 0004+00 0/0 0/0 0/0 .bss
- * sInstance__34JASGlobalInstance<13JAUSoundTable> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB028[4];
-#pragma pop
-
-/* 80BFB02C-80BFB030 00048C 0004+00 0/0 0/0 0/0 .bss
- * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB02C[4];
-#pragma pop
-
-/* 80BFB030-80BFB034 000490 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12JAUSoundInfo> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB030[4];
-#pragma pop
-
-/* 80BFB034-80BFB038 000494 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB034[4];
-#pragma pop
-
-/* 80BFB038-80BFB03C 000498 0004+00 0/0 0/0 0/0 .bss
- * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB038[4];
-#pragma pop
-
-/* 80BFB03C-80BFB040 00049C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB03C[4];
-#pragma pop
-
-/* 80BFB040-80BFB044 0004A0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB040[4];
-#pragma pop
+/* 80BFAAC0-80BFAAE0 -00001 0020+00 1/0 0/0 0/0 .data l_daGlwSph_Method */
+static actor_method_class l_daGlwSph_Method = {
+ (process_method_func)daGlwSph_Create, (process_method_func)daGlwSph_Delete,
+ (process_method_func)daGlwSph_Execute, (process_method_func)NULL,
+ (process_method_func)daGlwSph_Draw,
+};
-/* 80BFB044-80BFB048 0004A4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB044[4];
-#pragma pop
+/* 80BFAAE0-80BFAB10 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_glowSphere */
+extern actor_process_profile_definition g_profile_Obj_glowSphere = {
+ fpcLy_CURRENT_e, // mLayerID
+ 7, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Obj_glowSphere, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daGlwSph_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 651, // mPriority
+ &l_daGlwSph_Method, // sub_method
+ 0x00040000, // mStatus
+ fopAc_ACTOR_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};
-/* 80BFB048-80BFB04C 0004A8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB048[4];
-#pragma pop
-
-/* 80BFB04C-80BFB050 0004AC 0004+00 0/0 0/0 0/0 .bss
- * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BFB04C[4];
-#pragma pop
-
-/* 80BFA9C4-80BFA9C4 000054 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+AUDIO_INSTANCES
diff --git a/src/d/actor/d_a_obj_life_container.cpp b/src/d/actor/d_a_obj_life_container.cpp
index 89e9a200b2..06a4e98273 100644
--- a/src/d/actor/d_a_obj_life_container.cpp
+++ b/src/d/actor/d_a_obj_life_container.cpp
@@ -4,172 +4,11 @@
*/
#include "d/actor/d_a_obj_life_container.h"
-#include "d/d_cc_d.h"
-#include "dol2asm.h"
-
-
-//
-// Forward References:
-//
-
-extern "C" static void Reflect__FP4cXyzRC13cBgS_PolyInfof();
-extern "C" void __dt__8cM3dGPlaFv();
-extern "C" static void
-lifeGetTgCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf();
-extern "C" static void
-lifeGetCoCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf();
-extern "C" void initBaseMtx__11daObjLife_cFv();
-extern "C" void setBaseMtx__11daObjLife_cFv();
-extern "C" void Create__11daObjLife_cFv();
-extern "C" void setEffect__11daObjLife_cFv();
-extern "C" void endEffect00__11daObjLife_cFv();
-extern "C" void endEffect02__11daObjLife_cFv();
-extern "C" bool __CreateHeap__11daObjLife_cFv();
-extern "C" void create__11daObjLife_cFv();
-extern "C" void cleanup__18dPa_levelEcallBackFv();
-extern "C" void __dt__8cM3dGCylFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" void __dt__12dBgS_AcchCirFv();
-extern "C" void __dt__12dBgS_ObjAcchFv();
-extern "C" void bg_check__11daObjLife_cFv();
-extern "C" void actionWaitInit__11daObjLife_cFv();
-extern "C" void actionWait__11daObjLife_cFv();
-extern "C" void initActionOrderGetDemo__11daObjLife_cFv();
-extern "C" void actionOrderGetDemo__11daObjLife_cFv();
-extern "C" void actionGetDemo__11daObjLife_cFv();
-extern "C" void actionSwOnWait__11daObjLife_cFv();
-extern "C" void actionInitBoomerangCarry__11daObjLife_cFv();
-extern "C" void actionBoomerangCarry__11daObjLife_cFv();
-extern "C" void actionInitWait2__11daObjLife_cFv();
-extern "C" void actionWait2__11daObjLife_cFv();
-extern "C" void calcScale__11daObjLife_cFv();
-extern "C" void execute__11daObjLife_cFv();
-extern "C" void draw__11daObjLife_cFv();
-extern "C" void setListStart__11daObjLife_cFv();
-extern "C" void _delete__11daObjLife_cFv();
-extern "C" static void daObjLife_Draw__FP11daObjLife_c();
-extern "C" static void daObjLife_Execute__FP11daObjLife_c();
-extern "C" static void daObjLife_Delete__FP11daObjLife_c();
-extern "C" static void daObjLife_Create__FP10fopAc_ac_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void __dt__18dPa_levelEcallBackFv();
-extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter();
-extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter();
-extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter();
-extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter();
-extern "C" void func_804CE3C0(void* _this, u8*);
-extern "C" static void func_804CE3DC();
-extern "C" static void func_804CE3E4();
-extern "C" extern char const* const d_a_obj_life_container__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
-extern "C" void fopAcM_delete__FP10fopAc_ac_c();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz();
-extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c();
-extern "C" void fopAcM_orderItemEvent__FP10fopAc_ac_cUsUs();
-extern "C" void fopAcM_createItemForTrBoxDemo__FPC4cXyziiiPC5csXyzPC4cXyz();
-extern "C" void fpcSch_JudgeForPName__FPvPv();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void isDungeonItem__12dSv_memBit_cCFi();
-extern "C" void setEventReg__11dSv_event_cFUsUc();
-extern "C" void getEventReg__11dSv_event_cCFUs();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void onItem__10dSv_info_cFii();
-extern "C" void isItem__10dSv_info_cCFii();
-extern "C" void hide__12daItemBase_cFv();
-extern "C" void show__12daItemBase_cFv();
-extern "C" void chkDraw__12daItemBase_cFv();
-extern "C" void CheckFieldItemCreateHeap__FP10fopAc_ac_c();
-extern "C" void reset__14dEvt_control_cFv();
-extern "C" void setPtI_Id__14dEvt_control_cFUi();
-extern "C" void endCheckOld__16dEvent_manager_cFPCc();
-extern "C" void __ct__19dPa_followEcallBackFUcUc();
-extern "C" void
-set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
-extern "C" void __ct__12dBgS_AcchCirFv();
-extern "C" void SetWall__12dBgS_AcchCirFff();
-extern "C" void __dt__9dBgS_AcchFv();
-extern "C" void __ct__9dBgS_AcchFv();
-extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
-extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void GetAc__22dCcD_GAtTgCoCommonBaseFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
-extern "C" void ChkCoHit__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
-extern "C" void DeleteBase__12daItemBase_cFPCc();
-extern "C" bool clothCreate__12daItemBase_cFv();
-extern "C" void DrawBase__12daItemBase_cFv();
-extern "C" void RotateYBase__12daItemBase_cFv();
-extern "C" void settingBeforeDraw__12daItemBase_cFv();
-extern "C" void setTevStr__12daItemBase_cFv();
-extern "C" void setShadow__12daItemBase_cFv();
-extern "C" void animEntry__12daItemBase_cFv();
-extern "C" void animPlay__12daItemBase_cFffffff();
-extern "C" void chkFlag__12daItemBase_cFi();
-extern "C" void getTevFrm__12daItemBase_cFv();
-extern "C" void getBtpFrm__12daItemBase_cFv();
-extern "C" void getShadowSize__12daItemBase_cFv();
-extern "C" void getCollisionH__12daItemBase_cFv();
-extern "C" void getCollisionR__12daItemBase_cFv();
-extern "C" void getData__12daItemBase_cFv();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __ml__4cXyzCFf();
-extern "C" void cM_atan2s__Fff();
-extern "C" void __dt__13cBgS_PolyInfoFv();
-extern "C" void __dt__8cM3dGCirFv();
-extern "C" void SetC__8cM3dGCylFRC4cXyz();
-extern "C" void SetH__8cM3dGCylFf();
-extern "C" void SetR__8cM3dGCylFf();
-extern "C" void cLib_addCalc__FPfffff();
-extern "C" void cLib_addCalcAngleS2__FPssss();
-extern "C" void cLib_chaseF__FPfff();
-extern "C" void __dt__18JPAEmitterCallBackFv();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void deleteObject__14Z2SoundObjBaseFv();
-extern "C" void startCollisionSE__14Z2SoundObjBaseFUlUlP14Z2SoundObjBase();
-extern "C" void __ct__16Z2SoundObjSimpleFv();
-extern "C" void __dl__FPv();
-extern "C" void __ptmf_scall();
-extern "C" void __cvt_fp2unsigned();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Cyl[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" void* field_item_res__10dItem_data[1020];
-extern "C" u8 item_info__10dItem_data[1020 + 4 /* padding */];
-extern "C" extern void* __vt__12daItemBase_c[17 + 1 /* padding */];
-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" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" extern u8 data_804CE6A0[4];
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
+#include "d/d_com_inf_game.h"
+#include "d/actor/d_a_player.h"
+#include "d/d_item_data.h"
+#include "SSystem/SComponent/c_math.h"
+
/* 804CE3F4-804CE438 000000 0044+00 6/6 0/0 0/0 .rodata l_cyl_src */
const static dCcD_SrcCyl l_cyl_src = {
{
@@ -185,648 +24,542 @@ const static dCcD_SrcCyl l_cyl_src = {
} // mCyl
};
-/* 804CE438-804CE43C 000044 0004+00 1/6 0/0 0/0 .rodata @3855 */
-SECTION_RODATA static u8 const lit_3855[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x804CE438, &lit_3855);
-
-/* 804CE43C-804CE444 000048 0008+00 0/1 0/0 0/0 .rodata @3856 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3856[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x804CE43C, &lit_3856);
-#pragma pop
-
-/* 804CE444-804CE44C 000050 0008+00 0/1 0/0 0/0 .rodata @3857 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3857[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x804CE444, &lit_3857);
-#pragma pop
-
-/* 804CE44C-804CE454 000058 0008+00 0/1 0/0 0/0 .rodata @3858 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3858[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x804CE44C, &lit_3858);
-#pragma pop
-
-/* 804CE4CC-804CE4D8 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 804CE4D8-804CE4EC 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
-
-/* 804CE4EC-804CE4F8 -00001 000C+00 0/1 0/0 0/0 .data @4479 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4479[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionWait__11daObjLife_cFv,
-};
-#pragma pop
-
-/* 804CE4F8-804CE504 -00001 000C+00 0/1 0/0 0/0 .data @4480 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4480[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionOrderGetDemo__11daObjLife_cFv,
-};
-#pragma pop
-
-/* 804CE504-804CE510 -00001 000C+00 0/1 0/0 0/0 .data @4481 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4481[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionGetDemo__11daObjLife_cFv,
-};
-#pragma pop
-
-/* 804CE510-804CE51C -00001 000C+00 0/1 0/0 0/0 .data @4482 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4482[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionSwOnWait__11daObjLife_cFv,
-};
-#pragma pop
-
-/* 804CE51C-804CE528 -00001 000C+00 0/1 0/0 0/0 .data @4483 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4483[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionBoomerangCarry__11daObjLife_cFv,
-};
-#pragma pop
-
-/* 804CE528-804CE534 -00001 000C+00 0/1 0/0 0/0 .data @4484 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4484[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionWait2__11daObjLife_cFv,
-};
-#pragma pop
-
-/* 804CE534-804CE57C 000068 0048+00 0/1 0/0 0/0 .data l_demoFunc$4478 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_demoFunc[72] = {
- 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, 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
-
-/* 804CE57C-804CE59C -00001 0020+00 1/0 0/0 0/0 .data l_daObjLife_Method */
-static actor_method_class l_daObjLife_Method = {
- (process_method_func)daObjLife_Create__FP10fopAc_ac_c,
- (process_method_func)daObjLife_Delete__FP11daObjLife_c,
- (process_method_func)daObjLife_Execute__FP11daObjLife_c,
- 0,
- (process_method_func)daObjLife_Draw__FP11daObjLife_c,
-};
-
-/* 804CE59C-804CE5CC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_LifeContainer */
-extern actor_process_profile_definition g_profile_Obj_LifeContainer = {
- fpcLy_CURRENT_e, // mLayerID
- 7, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_Obj_LifeContainer, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daObjLife_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 239, // mPriority
- &l_daObjLife_Method, // sub_method
- 0x000C4100, // mStatus
- fopAc_ACTOR_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
-
-/* 804CE5CC-804CE5D8 000100 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */
-SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_AcchCirFv,
-};
-
-/* 804CE5D8-804CE5E4 00010C 000C+00 2/2 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,
-};
-
-/* 804CE5E4-804CE5F0 000118 000C+00 1/1 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,
-};
-
-/* 804CE5F0-804CE614 000124 0024+00 1/1 0/0 0/0 .data __vt__18dPa_levelEcallBack */
-SECTION_DATA extern void* __vt__18dPa_levelEcallBack[9] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__18dPa_levelEcallBackFv,
- (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter,
- (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter,
- (void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter,
- (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter,
- (void*)NULL,
- (void*)cleanup__18dPa_levelEcallBackFv,
-};
-
-/* 804CE614-804CE620 000148 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */
-SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGCylFv,
-};
-
-/* 804CE620-804CE62C 000154 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 804CE62C-804CE650 000160 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */
-SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_ObjAcchFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_804CE3E4,
- (void*)NULL,
- (void*)NULL,
- (void*)func_804CE3DC,
-};
-
-/* 804CE650-804CE694 000184 0044+00 1/1 0/0 0/0 .data __vt__11daObjLife_c */
-SECTION_DATA extern void* __vt__11daObjLife_c[17] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)DrawBase__12daItemBase_cFv,
- (void*)setListStart__11daObjLife_cFv,
- (void*)settingBeforeDraw__12daItemBase_cFv,
- (void*)setTevStr__12daItemBase_cFv,
- (void*)setShadow__12daItemBase_cFv,
- (void*)animEntry__12daItemBase_cFv,
- (void*)RotateYBase__12daItemBase_cFv,
- (void*)clothCreate__12daItemBase_cFv,
- (void*)__CreateHeap__11daObjLife_cFv,
- (void*)chkFlag__12daItemBase_cFi,
- (void*)getTevFrm__12daItemBase_cFv,
- (void*)getBtpFrm__12daItemBase_cFv,
- (void*)getShadowSize__12daItemBase_cFv,
- (void*)getCollisionH__12daItemBase_cFv,
- (void*)getCollisionR__12daItemBase_cFv,
-};
-
-/* 804CE694-804CE6A0 0001C8 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */
-SECTION_DATA extern void* __vt__8cM3dGPla[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGPlaFv,
-};
+UNK_REL_DATA
/* 804CC7D8-804CCAD4 000078 02FC+00 1/1 0/0 0/0 .text Reflect__FP4cXyzRC13cBgS_PolyInfof
*/
-static void Reflect(cXyz* param_0, cBgS_PolyInfo const& param_1, f32 param_2) {
- // NONMATCHING
-}
+static f32 Reflect(cXyz* i_vec, cBgS_PolyInfo const& i_wallpoly, f32 i_scale) {
+ cM3dGPla plane;
+
+ if (dComIfG_Bgsp().GetTriPla(i_wallpoly, &plane)) {
+ cXyz reflect_vec;
+ f32 mag = i_vec->absXZ();
-/* 804CCAD4-804CCB1C 000374 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */
-// cM3dGPla::~cM3dGPla() {
-extern "C" void __dt__8cM3dGPlaFv() {
- // NONMATCHING
+ C_VECReflect(i_vec, &plane.mNormal, &reflect_vec);
+ *i_vec = (reflect_vec * mag) * i_scale;
+ return i_vec->absXZ();
+ }
+
+ return 0.0f;
}
/* 804CCB1C-804CCB78 0003BC 005C+00 1/1 0/0 0/0 .text
* lifeGetTgCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
-static void lifeGetTgCallBack(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2,
- dCcD_GObjInf* param_3) {
- // NONMATCHING
+static void lifeGetTgCallBack(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf,
+ fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) {
+ if (i_tgActor != NULL &&
+ (i_atObjInf->ChkAtType(AT_TYPE_40) || i_atObjInf->ChkAtType(AT_TYPE_BOOMERANG)) &&
+ !dComIfGp_event_runCheck() && !((daObjLife_c*)i_tgActor)->chkStatus(daObjLife_c::STATUS_BOOMERANG_CARRY_e))
+ {
+ ((daObjLife_c*)i_tgActor)->actionInitBoomerangCarry();
+ }
}
/* 804CCB78-804CCBE4 000418 006C+00 1/1 0/0 0/0 .text
* lifeGetCoCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
-static void lifeGetCoCallBack(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2,
- dCcD_GObjInf* param_3) {
- // NONMATCHING
+static void lifeGetCoCallBack(fopAc_ac_c* i_coActorA, dCcD_GObjInf* i_coObjInfA,
+ fopAc_ac_c* i_coActorB, dCcD_GObjInf* i_coObjInfB) {
+ if (i_coActorA != NULL && i_coActorB != NULL && i_coActorB == (fopAc_ac_c*)dComIfGp_getLinkPlayer()) {
+ if (!daPy_getPlayerActorClass()->checkCanoeRide()) {
+ ((daObjLife_c*)i_coActorA)->initActionOrderGetDemo();
+ }
+ }
}
/* 804CCBE4-804CCC04 000484 0020+00 1/1 0/0 0/0 .text initBaseMtx__11daObjLife_cFv */
void daObjLife_c::initBaseMtx() {
- // NONMATCHING
+ setBaseMtx();
}
/* 804CCC04-804CCC6C 0004A4 0068+00 2/2 0/0 0/0 .text setBaseMtx__11daObjLife_cFv */
void daObjLife_c::setBaseMtx() {
- // NONMATCHING
+ mpModel->setBaseScale(scale);
+
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
-/* ############################################################################################## */
-/* 804CE454-804CE458 000060 0004+00 0/2 0/0 0/0 .rodata @3935 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3935 = 30.0f;
-COMPILER_STRIP_GATE(0x804CE454, &lit_3935);
-#pragma pop
-
-/* 804CE458-804CE45C 000064 0004+00 0/2 0/0 0/0 .rodata @3936 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3936 = -16.0f / 5.0f;
-COMPILER_STRIP_GATE(0x804CE458, &lit_3936);
-#pragma pop
-
-/* 804CE45C-804CE464 000068 0004+04 0/2 0/0 0/0 .rodata @3937 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3937[1 + 1 /* padding */] = {
- 7.0f / 10.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x804CE45C, &lit_3937);
-#pragma pop
-
-/* 804CE464-804CE46C 000070 0008+00 1/2 0/0 0/0 .rodata @3939 */
-SECTION_RODATA static u8 const lit_3939[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x804CE464, &lit_3939);
-
/* 804CCC6C-804CCE00 00050C 0194+00 1/1 0/0 0/0 .text Create__11daObjLife_cFv */
-void daObjLife_c::Create() {
- // NONMATCHING
+int daObjLife_c::Create() {
+ scale.x = scale.y = scale.z = 0.0f;
+ initBaseMtx();
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
+
+ mAcchCir.SetWall(30.0f, 30.0f);
+ mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL);
+
+ mCcStts.Init(0, 0xFF, this);
+ mCcCyl.Set(l_cyl_src);
+ mCcCyl.SetStts(&mCcStts);
+ mCcCyl.SetCoHitCallback(lifeGetCoCallBack);
+ mCcCyl.SetTgHitCallback(lifeGetTgCallBack);
+ mCcCyl.SetR(dItem_data::getR(m_itemNo));
+ mCcCyl.SetH(dItem_data::getH(m_itemNo));
+
+ fopAcM_SetCullSize(this, fopAc_CULLSPHERE_0_e);
+ fopAcM_SetGravity(this, -3.2f);
+
+ actionWaitInit();
+ field_0x94c = 0.7f;
+ mRotateSpeed = 7000;
+
+ setEffect();
+ mSound.init(&current.pos, 1);
+ return 1;
}
-/* ############################################################################################## */
-/* 804CE46C-804CE470 000078 0004+00 1/1 0/0 0/0 .rodata @3969 */
-SECTION_RODATA static f32 const lit_3969 = 1.5f;
-COMPILER_STRIP_GATE(0x804CE46C, &lit_3969);
-
-/* 804CE470-804CE474 00007C 0004+00 1/5 0/0 0/0 .rodata @3970 */
-SECTION_RODATA static f32 const lit_3970 = 1.0f;
-COMPILER_STRIP_GATE(0x804CE470, &lit_3970);
-
/* 804CCE00-804CCF5C 0006A0 015C+00 1/1 0/0 0/0 .text setEffect__11daObjLife_cFv */
void daObjLife_c::setEffect() {
- // NONMATCHING
+ cXyz size(1.5f, 1.5f, 1.5f);
+
+ if (mEffect0.getEmitter() == NULL) {
+ dComIfGp_particle_set(0x8DE, &current.pos, NULL, &size, 0xFF, &mEffect0, -1, NULL, NULL, NULL);
+ }
+
+ if (mEffect1.getEmitter() == NULL) {
+ dComIfGp_particle_set(0x8DF, &current.pos, NULL, &size, 0xFF, &mEffect1, -1, NULL, NULL, NULL);
+ }
+
+ if (mEffect2.getEmitter() == NULL) {
+ dComIfGp_particle_set(0x8E0, &current.pos, NULL, &size, 0xFF, &mEffect2, -1, NULL, NULL, NULL);
+ }
}
/* 804CCF5C-804CCFAC 0007FC 0050+00 2/2 0/0 0/0 .text endEffect00__11daObjLife_cFv */
void daObjLife_c::endEffect00() {
- // NONMATCHING
+ mEffect0.remove();
+ mEffect1.remove();
}
/* 804CCFAC-804CCFD8 00084C 002C+00 3/3 0/0 0/0 .text endEffect02__11daObjLife_cFv */
void daObjLife_c::endEffect02() {
- // NONMATCHING
+ mEffect2.remove();
}
/* 804CCFD8-804CCFE0 000878 0008+00 1/0 0/0 0/0 .text __CreateHeap__11daObjLife_cFv */
-bool daObjLife_c::__CreateHeap() {
- return true;
+int daObjLife_c::__CreateHeap() {
+ return 1;
}
/* 804CCFE0-804CD258 000880 0278+00 1/1 0/0 0/0 .text create__11daObjLife_cFv */
-void daObjLife_c::create() {
- // NONMATCHING
-}
+int daObjLife_c::create() {
+ fopAcM_SetupActor(this, daObjLife_c);
-/* 804CD258-804CD25C 000AF8 0004+00 1/0 0/0 0/0 .text cleanup__18dPa_levelEcallBackFv */
-// void dPa_levelEcallBack::cleanup() {
-extern "C" void cleanup__18dPa_levelEcallBackFv() {
- /* empty function */
-}
+ if (!mIsPrmsInit) {
+ field_0x938 = home.angle.x;
+ field_0x93a = home.angle.z;
+ home.angle.x = home.angle.z = 0;
+ current.angle.x = current.angle.z = 0;
+ shape_angle.x = shape_angle.z = 0;
+ mIsPrmsInit = true;
+ }
-/* 804CD25C-804CD2A4 000AFC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
-// cM3dGCyl::~cM3dGCyl() {
-extern "C" void __dt__8cM3dGCylFv() {
- // NONMATCHING
-}
+ m_itemNo = getItemNo();
+ if (m_itemNo != fpcNm_ITEM_KAKERA_HEART && m_itemNo != fpcNm_ITEM_UTAWA_HEART) {
+ // "Heart Container: Item No is incorrect!<%d>\n"
+ OS_REPORT_ERROR("ハートの器:アイテム番号が不正です!<%d>\n", m_itemNo);
+ }
-/* 804CD2A4-804CD2EC 000B44 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
+ if (fopAcM_isItem(this, getSaveBitNo())) {
+ return cPhs_ERROR_e;
+ }
-/* 804CD2EC-804CD348 000B8C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
-}
+ if (m_itemNo == fpcNm_ITEM_UTAWA_HEART && dComIfGs_isStageLife()) {
+ return cPhs_ERROR_e;
+ }
-/* 804CD348-804CD3B8 000BE8 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */
-// dBgS_AcchCir::~dBgS_AcchCir() {
-extern "C" void __dt__12dBgS_AcchCirFv() {
- // NONMATCHING
-}
+ int phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo));
+ if (phase_state == cPhs_COMPLEATE_e) {
+ if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, 0x4000)) {
+ return cPhs_ERROR_e;
+ }
-/* 804CD3B8-804CD428 000C58 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */
-// dBgS_ObjAcch::~dBgS_ObjAcch() {
-extern "C" void __dt__12dBgS_ObjAcchFv() {
- // NONMATCHING
-}
+ if (!Create()) {
+ return cPhs_ERROR_e;
+ }
-/* ############################################################################################## */
-/* 804CE474-804CE478 000080 0004+00 0/2 0/0 0/0 .rodata @4187 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4187 = 5.0f;
-COMPILER_STRIP_GATE(0x804CE474, &lit_4187);
-#pragma pop
-
-/* 804CE478-804CE47C 000084 0004+00 0/2 0/0 0/0 .rodata @4188 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4188 = 3.0f;
-COMPILER_STRIP_GATE(0x804CE478, &lit_4188);
-#pragma pop
-
-/* 804CE47C-804CE480 000088 0004+00 0/1 0/0 0/0 .rodata @4189 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4189 = 2.0f;
-COMPILER_STRIP_GATE(0x804CE47C, &lit_4189);
-#pragma pop
-
-/* 804CE480-804CE484 00008C 0004+00 0/2 0/0 0/0 .rodata @4190 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4190 = -1.0f;
-COMPILER_STRIP_GATE(0x804CE480, &lit_4190);
-#pragma pop
+ OS_REPORT("LIFE CONTAINER:<0x%x>\n", fopAcM_GetParam(this));
+ }
+
+ return phase_state;
+}
/* 804CD428-804CD5B8 000CC8 0190+00 1/1 0/0 0/0 .text bg_check__11daObjLife_cFv */
void daObjLife_c::bg_check() {
- // NONMATCHING
-}
+ f32 bounce_speed_scale = 0.7f;
-/* ############################################################################################## */
-/* 804CE484-804CE488 000090 0004+00 2/2 0/0 0/0 .rodata @4206 */
-SECTION_RODATA static f32 const lit_4206 = 4.0f;
-COMPILER_STRIP_GATE(0x804CE484, &lit_4206);
+ if (mAcch.ChkWallHit()) {
+ if (speedF > 5.0f) {
+ Reflect(&speed, mAcchCir, 1.0f);
+ }
-/* 804CE4A4-804CE4A4 0000B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_804CE4A4 = "D_MN11A";
-#pragma pop
+ current.angle.y = cM_atan2s(speed.x, speed.z);
+ }
-/* 804CD5B8-804CD660 000E58 00A8+00 3/3 0/0 0/0 .text actionWaitInit__11daObjLife_cFv */
-void daObjLife_c::actionWaitInit() {
- // NONMATCHING
+ if (mAcch.ChkGroundLanding()) {
+ cXyz reflect_vec(speed);
+ if (speedF > 5.0f) {
+ Reflect(&reflect_vec, mAcchCir, bounce_speed_scale);
+ }
+
+ speed.y = -mPrevSpeed.y * bounce_speed_scale;
+ if (speed.y < 3.0f) {
+ speedF = 0.0f;
+ }
+
+ mGndLandCount++;
+ fopAcM_seStart(this, Z2SE_OBJ_KEY_BOUND, fabsf(mPrevSpeed.y) * 2.0f);
+ }
+
+ if (mGndLandCount >= 2 || (!mAcch.ChkGroundLanding() && mAcch.i_ChkGroundHit())) {
+ endEffect02();
+ }
}
-/* ############################################################################################## */
-/* 804CE488-804CE48C 000094 0004+00 0/2 0/0 0/0 .rodata @4299 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4299 = 1.0f / 20.0f;
-COMPILER_STRIP_GATE(0x804CE488, &lit_4299);
-#pragma pop
-
-/* 804CE48C-804CE490 000098 0004+00 0/2 0/0 0/0 .rodata @4300 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4300 = 0.5f;
-COMPILER_STRIP_GATE(0x804CE48C, &lit_4300);
-#pragma pop
-
-/* 804CE490-804CE494 00009C 0004+00 0/1 0/0 0/0 .rodata @4301 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4301 = 1.0f / 10.0f;
-COMPILER_STRIP_GATE(0x804CE490, &lit_4301);
-#pragma pop
-
-/* 804CE494-804CE498 0000A0 0004+00 0/1 0/0 0/0 .rodata @4302 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4302 = 3.5f;
-COMPILER_STRIP_GATE(0x804CE494, &lit_4302);
-#pragma pop
-
-/* 804CE498-804CE49C 0000A4 0004+00 0/1 0/0 0/0 .rodata @4303 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4303 = 9.0f / 10.0f;
-COMPILER_STRIP_GATE(0x804CE498, &lit_4303);
-#pragma pop
+/* 804CD5B8-804CD660 000E58 00A8+00 3/3 0/0 0/0 .text actionWaitInit__11daObjLife_cFv */
+int daObjLife_c::actionWaitInit() {
+ mCcCyl.OnTgSPrmBit(1);
+ mCcCyl.OnCoSPrmBit(1);
+
+ show();
+ attention_info.position = current.pos;
+ setStatus(STATUS_WAIT_e);
+
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN11A") == 0) {
+ fopAcM_SetGravity(this, 0.0f);
+ mLv5Counter = 0;
+ speed.y = 4.0f;
+ }
+
+ return 1;
+}
/* 804CD660-804CD8C0 000F00 0260+00 1/0 0/0 0/0 .text actionWait__11daObjLife_cFv */
-void daObjLife_c::actionWait() {
- // NONMATCHING
+int daObjLife_c::actionWait() {
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN11A") == 0) {
+ if (mLv5Counter < 20000) {
+ mLv5Counter++;
+ }
+
+ if (mLv5Counter == 1) {
+ speed.y = 5.0f;
+ speedF = 3.0f;
+ } else if (mLv5Counter >= 50 && mLv5Counter < 2000) {
+ cLib_addCalc(&speed.y, -3.2f, 0.05f, 0.5f, 0.1f);
+ }
+
+ fopAcM_posMoveF(this, mCcStts.GetCCMoveP());
+ mAcch.CrrPos(dComIfG_Bgsp());
+
+ if (mAcch.ChkGroundLanding() || mAcch.i_ChkGroundHit()) {
+ fopAcM_SetSpeed(this, 0.0f, -1.0f, 0.0f);
+ fopAcM_SetSpeedF(this, 0.0f);
+ } else if (speed.y < 0.0f) {
+ f32 var_f31 = 3.5f;
+ s16 var_r28 = mCounter * 1100;
+ fopAcM_SetSpeedF(this, cM_ssin(var_r28) * var_f31);
+ }
+
+ RotateYBase();
+ } else {
+ if (!fopAcM_checkHookCarryNow(this)) {
+ fopAcM_posMoveF(this, mCcStts.GetCCMoveP());
+ }
+
+ mAcch.CrrPos(dComIfG_Bgsp());
+ bg_check();
+
+ if (mAcch.i_ChkGroundHit()) {
+ speedF *= 0.9f;
+ if (speedF < 1.0f) {
+ speedF = 0.0f;
+ }
+ }
+
+ if (mGndLandCount != 0) {
+ s16 target_speed = 0xFFFF / getData().mRotateYSpeed;
+ cLib_addCalcAngleS2(&mRotateSpeed, target_speed, 5, 2000);
+ }
+
+ shape_angle.y += mRotateSpeed;
+ }
+
+ if (!daPy_getPlayerActorClass()->checkCanoeRide() && mCcCyl.ChkCoHit()) {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ fopAc_ac_c* hit_actor = mCcCyl.GetCoHitAc();
+ if (player == hit_actor) {
+ initActionOrderGetDemo();
+ }
+ }
+
+ attention_info.position = current.pos;
+ return 1;
}
/* 804CD8C0-804CD98C 001160 00CC+00 3/3 0/0 0/0 .text initActionOrderGetDemo__11daObjLife_cFv */
-void daObjLife_c::initActionOrderGetDemo() {
- // NONMATCHING
+int daObjLife_c::initActionOrderGetDemo() {
+ mCcCyl.OffTgSPrmBit(1);
+ mCcCyl.OffCoSPrmBit(1);
+ mCcCyl.ClrTgHit();
+ mCcCyl.ClrCoHit();
+
+ endEffect00();
+ endEffect02();
+
+ hide();
+
+ fopAcM_orderItemEvent(this, 0, 0);
+ eventInfo.i_onCondition(dEvtCnd_CANGETITEM_e);
+
+ mItemId = fopAcM_createItemForTrBoxDemo(&current.pos, m_itemNo, -1, fopAcM_GetRoomNo(this), NULL, NULL);
+ JUT_ASSERT(699, mItemId != fpcM_ERROR_PROCESS_ID_e);
+
+ setStatus(STATUS_ORDER_GET_DEMO_e);
+ return 1;
}
/* 804CD98C-804CDA08 00122C 007C+00 1/0 0/0 0/0 .text actionOrderGetDemo__11daObjLife_cFv
*/
-void daObjLife_c::actionOrderGetDemo() {
- // NONMATCHING
-}
+int daObjLife_c::actionOrderGetDemo() {
+ if (eventInfo.checkCommandItem()) {
+ setStatus(STATUS_GET_DEMO_e);
+
+ if (mItemId != fpcM_ERROR_PROCESS_ID_e) {
+ dComIfGp_event_setItemPartnerId(mItemId);
+ }
+ } else {
+ fopAcM_orderItemEvent(this, 0, 0);
+ eventInfo.i_onCondition(dEvtCnd_CANGETITEM_e);
+ }
-/* ############################################################################################## */
-/* 804CE4A4-804CE4A4 0000B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_804CE4AC = "DEFAULT_GETITEM";
-SECTION_DEAD static char const* const stringBase_804CE4BC = "F_SP121";
-SECTION_DEAD static char const* const stringBase_804CE4C4 = "F_SP109";
-#pragma pop
+ return 1;
+}
/* 804CDA08-804CDBC8 0012A8 01C0+00 1/0 0/0 0/0 .text actionGetDemo__11daObjLife_cFv */
-void daObjLife_c::actionGetDemo() {
- // NONMATCHING
+int daObjLife_c::actionGetDemo() {
+ if (dComIfGp_evmng_endCheck("DEFAULT_GETITEM")) {
+ dComIfGp_event_reset();
+ fopAcM_delete(this);
+
+ u8 savebit = getSaveBitNo();
+ if (savebit != 0xFF) {
+ fopAcM_onItem(this, savebit);
+ }
+
+ if (m_itemNo == fpcNm_ITEM_KAKERA_HEART) {
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0) {
+ if (fopAcM_GetRoomNo(this) == 0) {
+ if (savebit == 128) {
+ dComIfGs_setEventReg(0xECFF, dComIfGs_getEventReg(0xECFF) | 0x10);
+ }
+ } else if (fopAcM_GetRoomNo(this) == 3 && savebit == 130) {
+ dComIfGs_setEventReg(0xECFF, dComIfGs_getEventReg(0xECFF) | 0x4);
+ }
+ } else if (strcmp(dComIfGp_getStartStageName(), "F_SP109") == 0) {
+ if (fopAcM_GetRoomNo(this) == 0 && savebit == 140) {
+ dComIfGs_setEventReg(0xECFF, dComIfGs_getEventReg(0xECFF) | 0x2);
+ }
+ }
+ }
+ }
+
+ return 1;
}
/* 804CDBC8-804CDC2C 001468 0064+00 1/0 0/0 0/0 .text actionSwOnWait__11daObjLife_cFv */
-void daObjLife_c::actionSwOnWait() {
- // NONMATCHING
+int daObjLife_c::actionSwOnWait() {
+ if (fopAcM_isSwitch(this, getSwNo()) && cLib_calcTimer<u8>(&field_0x935) == 0) {
+ actionWaitInit();
+ }
+
+ return 1;
}
/* 804CDC2C-804CDD0C 0014CC 00E0+00 1/1 0/0 0/0 .text actionInitBoomerangCarry__11daObjLife_cFv */
-void daObjLife_c::actionInitBoomerangCarry() {
- // NONMATCHING
+int daObjLife_c::actionInitBoomerangCarry() {
+ mCcCyl.OnTgSPrmBit(1);
+ mCcCyl.OnCoSPrmBit(1);
+
+ f32 height = dItem_data::getH(m_itemNo) * 4.0f;
+ f32 radius = dItem_data::getR(m_itemNo) * 4.0f;
+ mCcCyl.SetR(radius);
+ mCcCyl.SetH(height);
+
+ mCcCyl.OnCoSPrmBit(1);
+
+ setStatus(STATUS_BOOMERANG_CARRY_e);
+ return 1;
}
/* 804CDD0C-804CDD7C 0015AC 0070+00 1/0 0/0 0/0 .text actionBoomerangCarry__11daObjLife_cFv */
-void daObjLife_c::actionBoomerangCarry() {
- // NONMATCHING
+int daObjLife_c::actionBoomerangCarry() {
+ fopAc_ac_c* boomerang = fopAcM_SearchByName(PROC_BOOMERANG);
+ if (boomerang != NULL) {
+ current.pos = boomerang->current.pos;
+ } else {
+ actionWaitInit();
+ }
+
+ // "Heart Container / Piece: Pulling towards\n"
+ OS_REPORT("ハートの器・欠片:引き寄せ中\n");
+ return 1;
}
/* 804CDD7C-804CDD8C 00161C 0010+00 0/0 0/0 1/1 .text actionInitWait2__11daObjLife_cFv */
-void daObjLife_c::actionInitWait2() {
- // NONMATCHING
+int daObjLife_c::actionInitWait2() {
+ setStatus(STATUS_WAIT_2_e);
+ return 1;
}
/* 804CDD8C-804CDDAC 00162C 0020+00 1/0 0/0 0/0 .text actionWait2__11daObjLife_cFv */
-void daObjLife_c::actionWait2() {
- // NONMATCHING
+int daObjLife_c::actionWait2() {
+ attention_info.position = current.pos;
+ return 1;
}
-/* ############################################################################################## */
-/* 804CE49C-804CE4A0 0000A8 0004+00 0/1 0/0 0/0 .rodata @4474 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4474 = 1.0f / 5.0f;
-COMPILER_STRIP_GATE(0x804CE49C, &lit_4474);
-#pragma pop
-
/* 804CDDAC-804CDE70 00164C 00C4+00 1/1 0/0 0/0 .text calcScale__11daObjLife_cFv */
void daObjLife_c::calcScale() {
- // NONMATCHING
-}
+ cLib_chaseF(&field_0x954, 1.0f, 0.2f);
+ if (field_0x954 == 1.0f) {
+ cLib_chaseF(&field_0x94c, 0.0f, 0.05f);
+ field_0x950 = field_0x94c * cM_ssin(field_0x95e * 3000);
-/* ############################################################################################## */
-/* 804CE4A0-804CE4A4 0000AC 0004+00 0/1 0/0 0/0 .rodata @4538 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4538 = 300.0f;
-COMPILER_STRIP_GATE(0x804CE4A0, &lit_4538);
-#pragma pop
+ if (field_0x95e < 1000) {
+ field_0x95e++;
+ }
+ } else {
+ field_0x950 = 0.0f;
+ }
+
+ scale.setall(field_0x950 + field_0x954);
+}
/* 804CDE70-804CE19C 001710 032C+00 1/1 0/0 0/0 .text execute__11daObjLife_cFv */
-void daObjLife_c::execute() {
- // NONMATCHING
+int daObjLife_c::execute() {
+ static int (daObjLife_c::*l_demoFunc[])() = {
+ &daObjLife_c::actionWait,
+ &daObjLife_c::actionOrderGetDemo,
+ &daObjLife_c::actionGetDemo,
+ &daObjLife_c::actionSwOnWait,
+ &daObjLife_c::actionBoomerangCarry,
+ &daObjLife_c::actionWait2,
+ };
+
+ mPrevSpeed = speed;
+ mCounter++;
+
+ (this->*l_demoFunc[mStatus])();
+
+ eyePos = current.pos;
+ eyePos.y += 30.0f;
+ attention_info.position = current.pos;
+
+ calcScale();
+ setBaseMtx();
+
+ animPlay(1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
+
+ if (mCcCyl.ChkTgHit()) {
+ cCcD_Obj* hitobj = mCcCyl.GetTgHitObj();
+ if (hitobj != NULL && hitobj->ChkAtType(AT_TYPE_HOOKSHOT)) {
+ mSound.startCollisionSE(Z2SE_HIT_HOOKSHOT_STICK, 0, NULL);
+ }
+ }
+
+ if (fopAcM_checkHookCarryNow(this)) {
+ cXyz offset(current.pos);
+ if (mpModel != NULL) {
+ offset.y += mpModel->getModelData()->getJointNodePointer(0)->getMax()->y * 0.5f;
+ }
+
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mDoMtx_stack_c::inverse();
+ mDoMtx_stack_c::multVec(&offset, &offset);
+ daPy_getPlayerActorClass()->setHookshotCarryOffset(fopAcM_GetID(this), &offset);
+ } else if (mIsHookCarry && fopAcM_searchPlayerDistance(this) < 300.0f) {
+ initActionOrderGetDemo();
+ }
+
+ mCcCyl.SetC(current.pos);
+ dComIfG_Ccsp()->Set(&mCcCyl);
+
+ mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ mIsHookCarry = fopAcM_checkHookCarryNow(this) != 0;
+ return 1;
}
/* 804CE19C-804CE1F0 001A3C 0054+00 1/1 0/0 0/0 .text draw__11daObjLife_cFv */
-void daObjLife_c::draw() {
- // NONMATCHING
+int daObjLife_c::draw() {
+ if (!chkDraw()) {
+ return 1;
+ }
+
+ DrawBase();
+ return 1;
}
/* 804CE1F0-804CE214 001A90 0024+00 1/0 0/0 0/0 .text setListStart__11daObjLife_cFv */
void daObjLife_c::setListStart() {
- // NONMATCHING
+ dComIfGd_setListDark();
}
/* 804CE214-804CE274 001AB4 0060+00 1/1 0/0 0/0 .text _delete__11daObjLife_cFv */
-void daObjLife_c::_delete() {
- // NONMATCHING
+int daObjLife_c::_delete() {
+ mSound.deleteObject();
+ endEffect00();
+ endEffect02();
+
+ DeleteBase(dItem_data::getFieldArc(m_itemNo));
+ return 1;
}
/* 804CE274-804CE294 001B14 0020+00 1/0 0/0 0/0 .text daObjLife_Draw__FP11daObjLife_c */
-static void daObjLife_Draw(daObjLife_c* param_0) {
- // NONMATCHING
+static int daObjLife_Draw(daObjLife_c* i_this) {
+ return i_this->draw();
}
/* 804CE294-804CE2B4 001B34 0020+00 1/0 0/0 0/0 .text daObjLife_Execute__FP11daObjLife_c
*/
-static void daObjLife_Execute(daObjLife_c* param_0) {
- // NONMATCHING
+static int daObjLife_Execute(daObjLife_c* i_this) {
+ return i_this->execute();
}
/* 804CE2B4-804CE2D4 001B54 0020+00 1/0 0/0 0/0 .text daObjLife_Delete__FP11daObjLife_c
*/
-static void daObjLife_Delete(daObjLife_c* param_0) {
- // NONMATCHING
+static int daObjLife_Delete(daObjLife_c* i_this) {
+ return i_this->_delete();
}
/* 804CE2D4-804CE2F4 001B74 0020+00 1/0 0/0 0/0 .text daObjLife_Create__FP10fopAc_ac_c */
-static void daObjLife_Create(fopAc_ac_c* param_0) {
- // NONMATCHING
-}
-
-/* 804CE2F4-804CE33C 001B94 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
+static int daObjLife_Create(fopAc_ac_c* i_this) {
+ return ((daObjLife_c*)i_this)->create();
}
-/* 804CE33C-804CE3B0 001BDC 0074+00 1/0 0/0 0/0 .text __dt__18dPa_levelEcallBackFv */
-// dPa_levelEcallBack::~dPa_levelEcallBack() {
-extern "C" void __dt__18dPa_levelEcallBackFv() {
- // NONMATCHING
-}
-
-/* 804CE3B0-804CE3B4 001C50 0004+00 1/0 0/0 0/0 .text
- * execute__18JPAEmitterCallBackFP14JPABaseEmitter */
-// void JPAEmitterCallBack::execute(JPABaseEmitter* param_0) {
-extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter() {
- /* empty function */
-}
-
-/* 804CE3B4-804CE3B8 001C54 0004+00 1/0 0/0 0/0 .text
- * executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter */
-// void JPAEmitterCallBack::executeAfter(JPABaseEmitter* param_0) {
-extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter() {
- /* empty function */
-}
-
-/* 804CE3B8-804CE3BC 001C58 0004+00 1/0 0/0 0/0 .text draw__18JPAEmitterCallBackFP14JPABaseEmitter
- */
-// void JPAEmitterCallBack::draw(JPABaseEmitter* param_0) {
-extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter() {
- /* empty function */
-}
-
-/* 804CE3BC-804CE3C0 001C5C 0004+00 1/0 0/0 0/0 .text
- * drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter */
-// void JPAEmitterCallBack::drawAfter(JPABaseEmitter* param_0) {
-extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter() {
- /* empty function */
-}
-
-/* 804CE3C0-804CE3DC 001C60 001C+00 1/1 0/0 0/0 .text cLib_calcTimer<Uc>__FPUc */
-extern "C" void func_804CE3C0(void* _this, u8* param_0) {
- // NONMATCHING
-}
-
-/* 804CE3DC-804CE3E4 001C7C 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_804CE3DC() {
- // NONMATCHING
-}
-
-/* 804CE3E4-804CE3EC 001C84 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_804CE3E4() {
- // NONMATCHING
-}
+/* 804CE57C-804CE59C -00001 0020+00 1/0 0/0 0/0 .data l_daObjLife_Method */
+static actor_method_class l_daObjLife_Method = {
+ (process_method_func)daObjLife_Create,
+ (process_method_func)daObjLife_Delete,
+ (process_method_func)daObjLife_Execute,
+ (process_method_func)NULL,
+ (process_method_func)daObjLife_Draw,
+};
-/* 804CE4A4-804CE4A4 0000B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 804CE59C-804CE5CC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_LifeContainer */
+extern actor_process_profile_definition g_profile_Obj_LifeContainer = {
+ fpcLy_CURRENT_e, // mLayerID
+ 7, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Obj_LifeContainer, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daObjLife_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 239, // mPriority
+ &l_daObjLife_Method, // sub_method
+ 0x000C4100, // mStatus
+ fopAc_ACTOR_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};
diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp
index 574b430982..029bdbf754 100644
--- a/src/d/d_com_inf_game.cpp
+++ b/src/d/d_com_inf_game.cpp
@@ -1037,6 +1037,14 @@ static int phase_3(char*) {
/* 8002CEBC-8002CEFC 0277FC 0040+00 0/0 7/7 550/550 .text
* dComIfG_resLoad__FP30request_of_phase_process_classPCc */
+/**
+ * Attempts to load a Resource Archive (*.arc) into the Resource Control.
+ * The archive must be successfully loaded into the Resource Control before
+ * calling dComIfG_getObjectRes / dComIfG_getStageRes
+ * @param i_phase Pointer to phase request for handling resource loading process
+ * @param i_arcName Name of archive to be loaded
+ * @return Loading phase state. cPhs_COMPLEATE_e if loaded successfully
+ */
int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_arcName) {
static int (*l_method[3])(void*) = {(int (*)(void*))phase_1, (int (*)(void*))phase_2,
(int (*)(void*))phase_3};
@@ -1078,6 +1086,15 @@ static int phase_03(phaseParam_c*) {
/* 8002CFC0-8002D008 027900 0048+00 1/1 3/3 0/0 .text
* dComIfG_resLoad__FP30request_of_phase_process_classPCcP7JKRHeap */
+/**
+ * Attempts to load a Resource Archive (*.arc) into the Resource Control using a specified heap.
+ * The archive must be successfully loaded into the Resource Control before
+ * calling dComIfG_getObjectRes / dComIfG_getStageRes
+ * @param i_phase Pointer to phase request for handling resource loading process
+ * @param i_arcName Name of archive to be loaded
+ * @param i_heap Pointer to heap to load resources into
+ * @return Loading phase state. cPhs_COMPLEATE_e if loaded successfully
+ */
int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_resName,
JKRHeap* i_heap) {
static int (*l_method[3])(void*) = {(int (*)(void*))phase_01, (int (*)(void*))phase_02,
@@ -1093,6 +1110,13 @@ int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_resNa
/* 8002D008-8002D06C 027948 0064+00 1/1 10/10 540/540 .text
* dComIfG_resDelete__FP30request_of_phase_process_classPCc */
+/**
+ * Attempts to unload a Resource Archive (*.arc) from the Resource Control.
+ * This should be called from a process' delete method to prevent a memory leak.
+ * @param i_phase Pointer to phase request for handling resource unloading process
+ * @param i_arcName Name of archive to be unloaded
+ * @return TRUE if successful, FALSE otherwise
+ */
int dComIfG_resDelete(request_of_phase_process_class* i_phase, char const* i_resName) {
if (i_phase->id != cPhs_NEXT_e) {
return 0;
diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp
index 7c0fedc879..2938215ae4 100644
--- a/src/d/d_drawlist.cpp
+++ b/src/d/d_drawlist.cpp
@@ -1216,8 +1216,8 @@ static void setkankyoShadow(dKy_tevstr_c* param_0, f32* param_1) {
*param_1 *= param_0->field_0x344;
}
- if (env_light->mThunderEff.mStateTimer != 0 && env_light->mThunderEff.mStateTimer < 10) {
- *param_1 += env_light->mThunderEff.field_0x8;
+ if (env_light->mThunderEff.mState != 0 && env_light->mThunderEff.mState < 10) {
+ *param_1 += env_light->mThunderEff.mFlashTimer;
}
if (g_env_light.mSwordLight.mState == 2) {
diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp
index 55fb1a60f3..eebe0196eb 100644
--- a/src/d/d_kankyo.cpp
+++ b/src/d/d_kankyo.cpp
@@ -1145,7 +1145,7 @@ static void envcolor_init() {
g_env_light.field_0x1230 = 0.0f;
g_env_light.field_0x1234 = 0.0f;
- g_env_light.mThunderEff.mStateTimer = 0;
+ g_env_light.mThunderEff.mState = 0;
g_env_light.field_0x1238 = 0.0f;
g_env_light.field_0x123c = 0.0f;
g_env_light.field_0x12d6 = 0;
@@ -3492,7 +3492,7 @@ SECTION_DEAD static char const* const stringBase_80394E70 = "D_MN";
#pragma pop
/* 801A6D4C-801A6E9C 1A168C 0150+00 1/1 1/1 0/0 .text dKy_move_room_ratio__FP12dKy_tevstr_cPSc */
-void dKy_move_room_ratio(dKy_tevstr_c* param_0, s8* param_1) {
+f32 dKy_move_room_ratio(dKy_tevstr_c* param_0, s8* param_1) {
// NONMATCHING
}
@@ -3816,7 +3816,7 @@ void dKy_SordFlush_set(cXyz param_0, int param_1) {
dScnKy_env_light_c* light = dKy_getEnvlight();
if (!dKy_darkworld_check() &&
- (light->mThunderEff.mStateTimer >= 10 || light->mThunderEff.field_0x8 <= 0.0f))
+ (light->mThunderEff.mState >= 10 || light->mThunderEff.mFlashTimer <= 0.0f))
{
if (g_env_light.mSwordLight.mState == 0) {
g_env_light.mSwordLight.mState = 1;
diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp
index 12500f17b1..46b7f520ad 100644
--- a/src/d/d_kankyo_rain.cpp
+++ b/src/d/d_kankyo_rain.cpp
@@ -1,191 +1,13 @@
-//
-// Generated By: dol2asm
-// Translation Unit: d/kankyo/d_kankyo_rain
-//
-
#include "d/d_kankyo_rain.h"
#include "SSystem/SComponent/c_counter.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
-#include "dol2asm.h"
#include "m_Do/m_Do_lib.h"
#include "JSystem/JUtility/JUTTexture.h"
-#include "string.h"
#include "SSystem/SComponent/c_math.h"
-
-//
-// Forward References:
-//
-
-extern "C" static void vectle_calc__FP10DOUBLE_POSP4cXyz();
-extern "C" static void get_vectle_calc__FP4cXyzP4cXyzP4cXyz();
-extern "C" void dKyr_get_vectle_calc__FP4cXyzP4cXyzP4cXyz();
-extern "C" static void dKy_set_eyevect_calc__FP12camera_classP3Vecff();
-extern "C" static void dKy_set_eyevect_calc2__FP12camera_classP3Vecff();
-extern "C" static void dKyr_set_btitex_common__FP9_GXTexObjP7ResTIMG11_GXTexMapID();
-extern "C" static void dKyr_set_btitex__FP9_GXTexObjP7ResTIMG();
-extern "C" void dKyr_lenzflare_move__Fv();
-extern "C" static void dKyr_moon_arrival_check__Fv();
-extern "C" void dKyr_sun_move__Fv();
-extern "C" void dKyr_rain_init__Fv();
-extern "C" static void rain_bg_chk__FP19dKankyo_rain_Packeti();
-extern "C" static void overhead_bg_chk__Fv();
-extern "C" static void forward_overhead_bg_chk__FP4cXyzf();
-extern "C" void dKyr_rain_move__Fv();
-extern "C" static void d_krain_cut_turn_check__Fv();
-extern "C" void dKyr_housi_move__Fv();
-extern "C" void dKyr_snow_init__Fv();
-extern "C" void dKyr_snow_move__Fv();
-extern "C" void dKyr_star_init__Fv();
-extern "C" void dKyr_star_move__Fv();
-extern "C" void cloud_shadow_move__Fv();
-extern "C" void vrkumo_move__Fv();
-extern "C" static void dKr_cullVtx_Set__Fv();
-extern "C" static void dKyr_draw_rev_moon__FPA4_fPPUc();
-extern "C" void dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc();
-extern "C" void dKyr_drawLenzflare__FPA4_fP4cXyzR8_GXColorPPUc();
-extern "C" void dKyr_drawRain__FPA4_fPPUc();
-extern "C" void dKyr_drawSibuki__FPA4_fPPUc();
-extern "C" void dKyr_drawHousi__FPA4_fPPUc();
-extern "C" void dKyr_drawSnow__FPA4_fPPUc();
-extern "C" void dKyr_drawStar__FPA4_fPPUc();
-extern "C" void drawCloudShadow__FPA4_fPPUc();
-extern "C" void drawVrkumo__FPA4_fR8_GXColorPPUc();
-extern "C" void dKyr_thunder_init__Fv();
-extern "C" void dKyr_thunder_move__Fv();
-extern "C" void dKyr_shstar_init__Fv();
-extern "C" void dKyr_shstar_move__Fv();
-extern "C" void dKyr_odour_init__Fv();
-extern "C" void dKyr_odour_move__Fv();
-extern "C" void dKyr_odour_draw__FPA4_fPPUc();
-extern "C" void dKyr_mud_init__Fv();
-extern "C" void dKyr_mud_move__Fv();
-extern "C" void dKyr_mud_draw__FPA4_fPPUc();
-extern "C" void dKyr_evil_init__Fv();
-extern "C" void dKyr_evil_move__Fv();
-extern "C" static void dKyr_evil_draw2__FPA4_fPPUc();
-extern "C" static void dKyr_near_bosslight_check__F4cXyz();
-extern "C" void dKyr_evil_draw__FPA4_fPPUc();
-extern "C" bool getKandelaarFlamePos__9daPy_py_cFv();
-extern "C" extern char const* const d_kankyo_d_kankyo_rain__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void __dt__4cXyzFv();
-extern "C" void mDoMtx_ZXYrotM__FPA4_fsss();
-extern "C" void mDoMtx_XrotM__FPA4_fs();
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void mDoMtx_ZrotM__FPA4_fs();
-extern "C" void mDoLib_project__FP3VecP3Vec();
-extern "C" void __dt__5csXyzFv();
-extern "C" void fopKyM_create__FsiP4cXyzP4cXyzPFPv_i();
-extern "C" void getStatusRoomDt__20dStage_roomControl_cFi();
-extern "C" void getLayerNo__14dComIfG_play_cFi();
-extern "C" void dComIfG_getStageRes__FPCc();
-extern "C" void dComIfGs_PolyDamageOff_Set__FSc();
-extern "C" void isDungeonItem__12dSv_memBit_cCFi();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void getRunEventName__16dEvent_manager_cFv();
-extern "C" void
-set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void newData__13dDlst_peekZ_cFssPUl();
-extern "C" void __dt__8SNOW_EFFFv();
-extern "C" void __ct__8SNOW_EFFFv();
-extern "C" void __dt__8STAR_EFFFv();
-extern "C" void __ct__8STAR_EFFFv();
-extern "C" void dKyw_get_wind_vec__Fv();
-extern "C" void dKyw_get_wind_pow__Fv();
-extern "C" void dKyw_get_wind_vecpow__Fv();
-extern "C" void dKyw_pntwind_get_vecpow__FP4cXyz();
-extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
-extern "C" void RoofChk__4dBgSFP12dBgS_RoofChk();
-extern "C" void __ct__11dBgS_GndChkFv();
-extern "C" void __dt__11dBgS_GndChkFv();
-extern "C" void __dt__18dBgS_ObjGndChk_AllFv();
-extern "C" void __ct__18dBgS_CamGndChk_WtrFv();
-extern "C" void __dt__18dBgS_CamGndChk_WtrFv();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void __ct__12dBgS_RoofChkFv();
-extern "C" void __dt__12dBgS_RoofChkFv();
-extern "C" void Prepare__12dCcMassS_MngFv();
-extern "C" void checkNowWolfEyeUp__9daPy_py_cFv();
-extern "C" void dKy_get_parcent__Ffff();
-extern "C" void getDaytime__18dScnKy_env_light_cFv();
-extern "C" void dKy_daynight_check__Fv();
-extern "C" void dKy_move_room_ratio__FP12dKy_tevstr_cPSc();
-extern "C" void dKy_efplight_set__FP15LIGHT_INFLUENCE();
-extern "C" void dKy_efplight_cut__FP15LIGHT_INFLUENCE();
-extern "C" void dKy_actor_addcol_amb_set__Fsssf();
-extern "C" void dKy_bg_addcol_amb_set__Fsssf();
-extern "C" void dKy_bg1_addcol_amb_set__Fsssf();
-extern "C" void dKy_addcol_fog_set__Fsssf();
-extern "C" void dKy_vrbox_addcol_sky0_set__Fsssf();
-extern "C" void dKy_vrbox_addcol_kasumi_set__Fsssf();
-extern "C" void dKy_GxFog_set__Fv();
-extern "C" void dKy_rain_check__Fv();
-extern "C" void dKy_set_actcol_ratio__Ff();
-extern "C" void dKy_set_bgcol_ratio__Ff();
-extern "C" void dKy_set_fogcol_ratio__Ff();
-extern "C" void dKy_set_vrboxcol_ratio__Ff();
-extern "C" void
-dKy_ParticleColor_get_bg__FP4cXyzP12dKy_tevstr_cP8_GXColorP8_GXColorP8_GXColorP8_GXColorf();
-extern "C" void dKy_darkworld_check__Fv();
-extern "C" void __pl__4cXyzCFRC3Vec();
-extern "C" void __ct__5csXyzFsss();
-extern "C" void cM_rad2s__Ff();
-extern "C" void cM_atan2s__Fff();
-extern "C" void cM_rndF__Ff();
-extern "C" void cM_rndFX__Ff();
-extern "C" void SetPos__11cBgS_GndChkFPC4cXyz();
-extern "C" void cM3d_VectorProduct2d__Fffffff();
-extern "C" void cLib_addCalc__FPfffff();
-extern "C" void startNearThunderSe__10Z2EnvSeMgrFSc();
-extern "C" void* __nw__FUli();
-extern "C" void reinitGX__6J3DSysFv();
-extern "C" void __register_global_object();
-extern "C" void __construct_array();
-extern "C" void _savegpr_14();
-extern "C" void _savegpr_17();
-extern "C" void _savegpr_18();
-extern "C" void _savegpr_19();
-extern "C" void _savegpr_20();
-extern "C" void _savegpr_21();
-extern "C" void _savegpr_22();
-extern "C" void _savegpr_23();
-extern "C" void _savegpr_25();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_14();
-extern "C" void _restgpr_17();
-extern "C" void _restgpr_18();
-extern "C" void _restgpr_19();
-extern "C" void _restgpr_20();
-extern "C" void _restgpr_21();
-extern "C" void _restgpr_22();
-extern "C" void _restgpr_23();
-extern "C" void _restgpr_25();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__14dBgS_ObjGndChk[12 + 1 /* padding */];
-extern "C" extern void* __vt__19dKankyo_star_Packet[5];
-extern "C" extern void* __vt__19dKankyo_snow_Packet[5];
-extern "C" extern void* __vt__18dBgS_ObjGndChk_All[12];
-extern "C" extern void* __vt__9J3DPacket[5];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" u8 mFrameBufferTimg__13mDoGph_gInf_c[4];
-extern "C" u8 m_mode__7dDemo_c[4];
-extern "C" u8 sOldVcdVatCmd__8J3DShape[4];
-
-//
-// Declarations:
-//
+#include "m_Do/m_Do_graphic.h"
+#include "d/d_demo.h"
+#include "f_op/f_op_kankyo_mng.h"
/* 8005B660-8005B708 055FA0 00A8+00 3/3 0/0 0/0 .text vectle_calc__FP10DOUBLE_POSP4cXyz
*/
@@ -204,35 +26,35 @@ static void vectle_calc(DOUBLE_POS* i_pos, cXyz* o_out) {
}
/* 8005B708-8005B760 056048 0058+00 7/7 0/0 0/0 .text get_vectle_calc__FP4cXyzP4cXyzP4cXyz */
-static void get_vectle_calc(cXyz* param_0, cXyz* param_1, cXyz* param_2) {
+static void get_vectle_calc(cXyz* i_vecA, cXyz* i_vecB, cXyz* o_out) {
DOUBLE_POS pos;
- pos.x = param_1->x - param_0->x;
- pos.y = param_1->y - param_0->y;
- pos.z = param_1->z - param_0->z;
+ pos.x = i_vecB->x - i_vecA->x;
+ pos.y = i_vecB->y - i_vecA->y;
+ pos.z = i_vecB->z - i_vecA->z;
- vectle_calc(&pos, param_2);
+ vectle_calc(&pos, o_out);
}
/* 8005B760-8005B780 0560A0 0020+00 8/8 7/7 11/11 .text dKyr_get_vectle_calc__FP4cXyzP4cXyzP4cXyz
*/
-void dKyr_get_vectle_calc(cXyz* param_0, cXyz* param_1, cXyz* param_2) {
- get_vectle_calc(param_0, param_1, param_2);
+void dKyr_get_vectle_calc(cXyz* i_vecA, cXyz* i_vecB, cXyz* o_out) {
+ get_vectle_calc(i_vecA, i_vecB, o_out);
}
/* 8005B780-8005B830 0560C0 00B0+00 2/2 0/0 0/0 .text
* dKy_set_eyevect_calc__FP12camera_classP3Vecff */
-static void dKy_set_eyevect_calc(camera_class* i_camera, Vec* param_1, f32 param_2, f32 param_3) {
- cXyz tmp;
- get_vectle_calc(&i_camera->lookat.eye, &i_camera->lookat.center, &tmp);
- param_1->x = i_camera->lookat.eye.x + tmp.x * param_2;
- param_1->y = (i_camera->lookat.eye.y + tmp.y * param_3) - 200.0f;
- param_1->z = i_camera->lookat.eye.z + tmp.z * param_2;
+static void dKy_set_eyevect_calc(camera_class* i_camera, Vec* o_out, f32 param_2, f32 param_3) {
+ cXyz calc;
+ get_vectle_calc(&i_camera->lookat.eye, &i_camera->lookat.center, &calc);
+ o_out->x = i_camera->lookat.eye.x + calc.x * param_2;
+ o_out->y = (i_camera->lookat.eye.y + calc.y * param_3) - 200.0f;
+ o_out->z = i_camera->lookat.eye.z + calc.z * param_2;
}
/* 8005B830-8005B92C 056170 00FC+00 6/6 0/0 0/0 .text
* dKy_set_eyevect_calc2__FP12camera_classP3Vecff */
-static void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* param_1, f32 param_2, f32 param_3) {
- cXyz tmp;
+static void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* o_out, f32 param_2, f32 param_3) {
+ cXyz calc;
DOUBLE_POS pos;
pos.x = i_camera->lookat.center.x - i_camera->lookat.eye.x;
@@ -243,14 +65,14 @@ static void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* param_1, f32 para
}
pos.z = i_camera->lookat.center.z - i_camera->lookat.eye.z;
- vectle_calc(&pos, &tmp);
+ vectle_calc(&pos, &calc);
- param_1->x = i_camera->lookat.eye.x + tmp.x * param_2;
- param_1->y = i_camera->lookat.eye.y + tmp.y * param_3;
- param_1->z = i_camera->lookat.eye.z + tmp.z * param_2;
+ o_out->x = i_camera->lookat.eye.x + calc.x * param_2;
+ o_out->y = i_camera->lookat.eye.y + calc.y * param_3;
+ o_out->z = i_camera->lookat.eye.z + calc.z * param_2;
if (param_3 == 0.0f) {
- param_1->y = 0.0f;
+ o_out->y = 0.0f;
}
}
@@ -276,238 +98,246 @@ static void dKyr_set_btitex(GXTexObj* i_obj, ResTIMG* i_img) {
/* 8005BA48-8005BED8 056388 0490+00 0/0 1/1 0/0 .text dKyr_lenzflare_move__Fv */
void dKyr_lenzflare_move() {
- dKankyo_sun_Packet* sun_p = g_env_light.mpSunPacket;
- dKankyo_sunlenz_Packet* lenz_p = g_env_light.mpSunLenzPacket;
- camera_class* iVar6 = dComIfGp_getCamera(0);
-
- cXyz cStack_48;
- cXyz cStack_54;
- cXyz local_60;
- cXyz cStack_6c;
- if (sun_p->mVisibility < 0.0001f) {
+ dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
+ dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
+ camera_class* camera = dComIfGp_getCamera(0);
+
+ cXyz eyeVect;
+ cXyz field_0x3c;
+ cXyz sunDirSmth;
+ cXyz camFwd;
+
+ if (sun_packet->mVisibility < 0.0001f) {
return;
}
- dKy_set_eyevect_calc(iVar6, &cStack_48, 4000.0f, 4000.0f);
- dKyr_get_vectle_calc(&cStack_48, sun_p->mPos, &local_60);
- lenz_p->mPositions[0] = sun_p->mPos[0];
- lenz_p->mPositions[1] = sun_p->mPos[0];
- cXyz local_78;
- cXyz cStack_84;
- cXyz local_90;
- mDoLib_project(lenz_p->mPositions, &cStack_84);
- local_90.x = 304.0f;
- local_90.y = 224.0f;
- local_90.z = 0.0f;
- dKyr_get_vectle_calc(&local_90, &cStack_84, &local_78);
- lenz_p->field_0x94 = cM_atan2s(local_78.x, local_78.y);
- lenz_p->field_0x94 *= 0.0054931640625f; // Maybe 45 / 8192
- lenz_p->field_0x94 += 180.0f;
- dKyr_get_vectle_calc(&iVar6->lookat.eye, &iVar6->lookat.center, &cStack_6c);
+
+ dKy_set_eyevect_calc(camera, &eyeVect, 4000.0f, 4000.0f);
+ dKyr_get_vectle_calc(&eyeVect, sun_packet->mPos, &sunDirSmth);
+ lenz_packet->mPositions[0] = sun_packet->mPos[0];
+ lenz_packet->mPositions[1] = sun_packet->mPos[0];
+
+ cXyz vect;
+ cXyz proj;
+ cXyz center;
+ mDoLib_project(lenz_packet->mPositions, &proj);
+
+ center.x = 304.0f;
+ center.y = 224.0f;
+ center.z = 0.0f;
+ dKyr_get_vectle_calc(&center, &proj, &vect);
+
+ lenz_packet->field_0x94 = cM_atan2s(vect.x, vect.y);
+ lenz_packet->field_0x94 *= 0.0054931640625f; // Maybe 45 / 8192
+ lenz_packet->field_0x94 += 180.0f;
+
+ dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &camFwd);
for (int i = 2; i < 8; i++) {
if (i == 2) {
- f32 fVar3 = local_60.abs(cStack_6c);
- f32 fVar4 = 250.0f + 600.0f * fVar3;
- lenz_p->mPositions[i].x = sun_p->mPos[0].x - local_60.x * fVar4 * i;
- lenz_p->mPositions[i].y = sun_p->mPos[0].y - local_60.y * fVar4 * i;
- lenz_p->mPositions[i].z = sun_p->mPos[0].z - local_60.z * fVar4 * i;
+ f32 size = 250.0f + 600.0f * sunDirSmth.abs(camFwd);
+ lenz_packet->mPositions[i].x = sun_packet->mPos[0].x - sunDirSmth.x * size * i;
+ lenz_packet->mPositions[i].y = sun_packet->mPos[0].y - sunDirSmth.y * size * i;
+ lenz_packet->mPositions[i].z = sun_packet->mPos[0].z - sunDirSmth.z * size * i;
} else {
- f32 fVar3 = local_60.abs(cStack_6c);
- f32 fVar4 = 250.0f + 110.0f * fVar3;
- lenz_p->mPositions[i].x =
- sun_p->mPos[0].x - (4100.0f * local_60.x + local_60.x * fVar4 * i);
- lenz_p->mPositions[i].y =
- sun_p->mPos[0].y - (4100.0f * local_60.y + local_60.y * fVar4 * i);
- lenz_p->mPositions[i].z =
- sun_p->mPos[0].z - (4100.0f * local_60.z + local_60.z * fVar4 * i);
+ f32 size = 250.0f + 110.0f * sunDirSmth.abs(camFwd);
+ lenz_packet->mPositions[i].x = sun_packet->mPos[0].x - (4100.0f * sunDirSmth.x + sunDirSmth.x * size * i);
+ lenz_packet->mPositions[i].y = sun_packet->mPos[0].y - (4100.0f * sunDirSmth.y + sunDirSmth.y * size * i);
+ lenz_packet->mPositions[i].z = sun_packet->mPos[0].z - (4100.0f * sunDirSmth.z + sunDirSmth.z * size * i);
}
}
}
/* 8005BED8-8005BF08 056818 0030+00 1/1 0/0 0/0 .text dKyr_moon_arrival_check__Fv */
-static int dKyr_moon_arrival_check() {
- int rv = 0;
+static BOOL dKyr_moon_arrival_check() {
+ BOOL rv = FALSE;
if (g_env_light.mDaytime > 285.0f || g_env_light.mDaytime < 67.5f) {
- rv = 1;
+ rv = TRUE;
}
-
return rv;
}
/* 8005BF08-8005CC5C 056848 0D54+00 0/0 1/1 0/0 .text dKyr_sun_move__Fv */
void dKyr_sun_move() {
- dKankyo_sun_Packet* sun_p = g_env_light.mpSunPacket;
- dKankyo_sunlenz_Packet* lenz_p = g_env_light.mpSunLenzPacket;
+ dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
+ dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
camera_class* camera_p2 = dComIfGp_getCamera(0);
- camera_class* camera_p = dComIfGp_getCamera(0);
- cXyz sp54;
+ camera_class* camera = dComIfGp_getCamera(0);
+ cXyz lightDir;
+
+ f32 pulse_pos;
+ f32 sun_parcent = 0.0f;
- f32 temp_f31;
- f32 var_f30 = 0.0f;
static f32 S_parcent_bak = 0.0f;
- u8 var_r22 = 0;
- u8 var_r21 = 0;
- s32 var_r20 = 0;
+ u8 numPointsVisible = 0;
+ u8 numCenterPointsVisible = 0;
+ s32 numPointsCulled = 0;
- u32 st_type = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo());
+ u32 stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo());
- if (g_env_light.mBaseLightInfluence.mColor.r == 0 && st_type != ST_ROOM) {
+ if (g_env_light.mBaseLightInfluence.mColor.r == 0 && stage_type != ST_ROOM) {
dKyr_get_vectle_calc(&camera_p2->lookat.eye, &g_env_light.mBaseLightInfluence.mPosition,
- &sp54);
+ &lightDir);
} else {
- dKyr_get_vectle_calc(&camera_p2->lookat.eye, &g_env_light.mSunPos2, &sp54);
+ dKyr_get_vectle_calc(&camera_p2->lookat.eye, &g_env_light.mSunPos2, &lightDir);
}
- sun_p->mPos[0].x = camera_p2->lookat.eye.x + 8000.0f * sp54.x;
- sun_p->mPos[0].y = camera_p2->lookat.eye.y + 8000.0f * sp54.y;
- sun_p->mPos[0].z = camera_p2->lookat.eye.z + 8000.0f * sp54.z;
+ sun_packet->mPos[0].x = camera_p2->lookat.eye.x + 8000.0f * lightDir.x;
+ sun_packet->mPos[0].y = camera_p2->lookat.eye.y + 8000.0f * lightDir.y;
+ sun_packet->mPos[0].z = camera_p2->lookat.eye.z + 8000.0f * lightDir.z;
- f32 var_f1 = (sun_p->mPos[0].y - camera_p2->lookat.eye.y) / 8000.0f;
- if (var_f1 < 0.0f) {
- var_f1 = 0.0f;
+ f32 horizon_y = (sun_packet->mPos[0].y - camera_p2->lookat.eye.y) / 8000.0f;
+ if (horizon_y < 0.0f) {
+ horizon_y = 0.0f;
}
- if (var_f1 >= 1.0f) {
- var_f1 = 1.0f;
+ if (horizon_y >= 1.0f) {
+ horizon_y = 1.0f;
}
- var_f1 = 1.0f - var_f1;
- var_f1 *= var_f1;
- temp_f31 = 1.0f - var_f1;
+ horizon_y = 1.0f - horizon_y;
+ horizon_y *= horizon_y;
+ pulse_pos = 1.0f - horizon_y;
if (dComIfGp_getStage()->getStagInfo() != NULL) {
dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo());
}
- if (sun_p->field_0x28) {
- sun_p->field_0x28--;
+ if (sun_packet->field_0x28) {
+ sun_packet->field_0x28--;
}
- sun_p->field_0x29 = 0;
+ sun_packet->field_0x29 = 0;
+
if (g_env_light.mDaytime > 77.5f && g_env_light.mDaytime < 285.0f && dKy_rain_check() < 20 &&
strcmp(dComIfGp_getStartStageName(), "F_SP200") != 0 &&
strcmp(dComIfGp_getStartStageName(), "D_MN09B") != 0)
{
- f32 var_f28 = 0.0f;
- cLib_addCalc(&sun_p->mSunAlpha, 1.0f, 1.0f / 20.0f, 1.0f / 10.0f, 0.00001f);
+ f32 border_y = 0.0f;
+ cLib_addCalc(&sun_packet->mSunAlpha, 1.0f, 0.05f, 0.1f, 0.00001f);
- if (camera_p != NULL) {
- var_f28 = camera_p->mCamera.TrimHeight();
+ if (camera != NULL) {
+ border_y = camera->mCamera.TrimHeight();
}
- cXyz sp48;
- mDoLib_project(sun_p->mPos, &sp48);
+ cXyz proj;
+ mDoLib_project(sun_packet->mPos, &proj);
for (int i = 0; i < 5; i++) {
- cXyz sp3C = sp48;
+ cXyz chkpnt = proj;
+
static f32 const sun_chkpnt[5][2] = {
- {0.0f, 0.0f}, {-10.0f, -20.0f}, {10.0f, 20.0f}, {-20.0f, 10.0f}, {20.0f, -10.0f},
+ {0.0f, 0.0f},
+ {-10.0f, -20.0f},
+ {10.0f, 20.0f},
+ {-20.0f, 10.0f},
+ {20.0f, -10.0f},
};
- sp3C.x -= sun_chkpnt[i][0];
- sp3C.y -= sun_chkpnt[i][1];
- if (sp3C.x > 0.0f && sp3C.x < 608.0f && sp3C.y > var_f28 && sp3C.y < 458.0f - var_f28) {
- if (sun_p->field_0x44[i] >= 0xFFFFFF) {
- var_r22++;
+ chkpnt.x -= sun_chkpnt[i][0];
+ chkpnt.y -= sun_chkpnt[i][1];
+
+ if (chkpnt.x > 0.0f && chkpnt.x < 608.0f && chkpnt.y > border_y && chkpnt.y < 458.0f - border_y) {
+ if (sun_packet->field_0x44[i] >= 0xFFFFFF) {
+ numPointsVisible++;
if (i == 0) {
- var_r21++;
+ numCenterPointsVisible++;
}
}
- dComIfGd_peekZ(sp3C.x, sp3C.y, sun_p->field_0x44 + i);
+ dComIfGd_peekZ(chkpnt.x, chkpnt.y, sun_packet->field_0x44 + i);
} else {
- sun_p->field_0x44[i] = 0;
- var_r20++;
+ sun_packet->field_0x44[i] = 0;
+ numPointsCulled++;
}
}
- if (var_r20 != 0 && var_r22 != 0 && var_r21 != 0) {
- var_r21 = 1;
- var_r22 = 5;
+ if (numPointsCulled != 0 && numPointsVisible != 0 && numCenterPointsVisible != 0) {
+ numCenterPointsVisible = 1;
+ numPointsVisible = 5;
}
- if (var_r22 != 0) {
- if (sun_p->field_0x28 < 5) {
- sun_p->field_0x28 += 2;
+ if (numPointsVisible != 0) {
+ if (sun_packet->field_0x28 < 5) {
+ sun_packet->field_0x28 += 2;
}
- sun_p->field_0x29 = 1;
+ sun_packet->field_0x29 = 1;
}
- lenz_p->field_0x84 = lenz_p->field_0x8c;
- lenz_p->field_0x88 = lenz_p->field_0x90;
- lenz_p->field_0x8c = 1000000000.0f;
- lenz_p->field_0x90 = 0.0f;
+ lenz_packet->field_0x84 = lenz_packet->field_0x8c;
+ lenz_packet->field_0x88 = lenz_packet->field_0x90;
+ lenz_packet->field_0x8c = 1000000000.0f;
+ lenz_packet->field_0x90 = 0.0f;
- cXyz sp30;
- sp30.x = 304.0f;
- sp30.y = 224.0f;
- sp30.z = 0.0f;
+ cXyz center;
+ center.x = 304.0f;
+ center.y = 224.0f;
+ center.z = 0.0f;
- lenz_p->mDistFalloff = sp30.abs(sp48);
- lenz_p->mDistFalloff /= 450.0f;
- if (lenz_p->mDistFalloff > 1.0f) {
- lenz_p->mDistFalloff = 1.0f;
+ lenz_packet->mDistFalloff = center.abs(proj);
+ lenz_packet->mDistFalloff /= 450.0f;
+ if (lenz_packet->mDistFalloff > 1.0f) {
+ lenz_packet->mDistFalloff = 1.0f;
}
- lenz_p->mDistFalloff = 1.0f - lenz_p->mDistFalloff;
- var_f30 = lenz_p->mDistFalloff * lenz_p->mDistFalloff;
- lenz_p->mDistFalloff = 1.0f - var_f30;
+ lenz_packet->mDistFalloff = 1.0f - lenz_packet->mDistFalloff;
+ sun_parcent = lenz_packet->mDistFalloff * lenz_packet->mDistFalloff;
+ lenz_packet->mDistFalloff = 1.0f - sun_parcent;
} else {
- cLib_addCalc(&sun_p->mSunAlpha, 0.0f, 0.1f, 0.05f, 0.001f);
- var_r22 = 0;
- sun_p->field_0x28 = 0;
- sun_p->field_0x29 = 0;
+ cLib_addCalc(&sun_packet->mSunAlpha, 0.0f, 0.1f, 0.05f, 0.001f);
+ numPointsVisible = 0;
+ sun_packet->field_0x28 = 0;
+ sun_packet->field_0x29 = 0;
}
if (g_env_light.mColpatWeather != 0 || g_env_light.mSnowCount > 10) {
- var_r21 = 0;
- var_r22 = 0;
+ numCenterPointsVisible = 0;
+ numPointsVisible = 0;
}
- if (st_type == ST_ROOM) {
- var_r21 = 0;
- var_r22 = 0;
+ if (stage_type == ST_ROOM) {
+ numCenterPointsVisible = 0;
+ numPointsVisible = 0;
}
- if (var_r21 != 0) {
- if (var_r22 == 4) {
- cLib_addCalc(&sun_p->mVisibility, 1.0f, 0.5f, 0.5f, 0.01f);
+ if (numCenterPointsVisible != 0) {
+ if (numPointsVisible == 4) {
+ cLib_addCalc(&sun_packet->mVisibility, 1.0f, 0.5f, 0.5f, 0.01f);
} else {
- cLib_addCalc(&sun_p->mVisibility, 1.0f, 0.2f, 0.3f, 0.001f);
+ cLib_addCalc(&sun_packet->mVisibility, 1.0f, 0.2f, 0.3f, 0.001f);
}
- } else if (var_r22 < 1) {
- cLib_addCalc(&sun_p->mVisibility, 0.0f, 0.5f, 0.5f, 0.001f);
+ } else if (numPointsVisible < 1) {
+ cLib_addCalc(&sun_packet->mVisibility, 0.0f, 0.5f, 0.5f, 0.001f);
} else {
- cLib_addCalc(&sun_p->mVisibility, 0.0f, 0.2f, 0.3f, 0.001f);
+ cLib_addCalc(&sun_packet->mVisibility, 0.0f, 0.2f, 0.3f, 0.001f);
}
- if (sun_p->mVisibility <= 0.0f) {
- g_env_light.mpSunLenzPacket->mDrawLenzInSky = 1;
+ if (sun_packet->mVisibility <= 0.0f) {
+ g_env_light.mpSunLenzPacket->mDrawLenzInSky = TRUE;
} else {
- g_env_light.mpSunLenzPacket->mDrawLenzInSky = 0;
+ g_env_light.mpSunLenzPacket->mDrawLenzInSky = FALSE;
}
- if (sp54.y > 0.0f && g_env_light.mpSunLenzPacket->mDrawLenzInSky == 0) {
+ if (lightDir.y > 0.0f && !g_env_light.mpSunLenzPacket->mDrawLenzInSky) {
if (dStage_stagInfo_GetArg0(dComIfGp_getStage()->getStagInfo()) != 0) {
f32 var_f1_3;
- if (S_parcent_bak < var_f30) {
- var_f1_3 = var_f30 - S_parcent_bak;
+ if (S_parcent_bak < sun_parcent) {
+ var_f1_3 = sun_parcent - S_parcent_bak;
} else {
- var_f1_3 = S_parcent_bak - var_f30;
+ var_f1_3 = S_parcent_bak - sun_parcent;
}
if (var_f1_3 < 0.3f) {
- dKy_set_actcol_ratio(1.0f - var_f30 * sun_p->mVisibility);
- dKy_set_bgcol_ratio(1.0f - var_f30 * sun_p->mVisibility);
- dKy_set_fogcol_ratio(1.0f - temp_f31 * (var_f30 * sun_p->mVisibility));
- dKy_set_vrboxcol_ratio(1.0f - 0.8f * (temp_f31 * (var_f30 * sun_p->mVisibility)));
+ dKy_set_actcol_ratio(1.0f - sun_parcent * sun_packet->mVisibility);
+ dKy_set_bgcol_ratio(1.0f - sun_parcent * sun_packet->mVisibility);
+ dKy_set_fogcol_ratio(1.0f - pulse_pos * (sun_parcent * sun_packet->mVisibility));
+ dKy_set_vrboxcol_ratio(1.0f - 0.8f * (pulse_pos * (sun_parcent * sun_packet->mVisibility)));
}
- S_parcent_bak = var_f30;
+ S_parcent_bak = sun_parcent;
}
}
if (g_env_light.mDaytime < 255.0f && g_env_light.mColpatWeather == 0) {
- cLib_addCalc(&sun_p->field_0x6c, 1.0f, 0.1f, 0.01f, 0.0001f);
+ cLib_addCalc(&sun_packet->field_0x6c, 1.0f, 0.1f, 0.01f, 0.0001f);
} else {
- cLib_addCalc(&sun_p->field_0x6c, 0.0f, 0.5f, 0.1f, 0.001f);
+ cLib_addCalc(&sun_packet->field_0x6c, 0.0f, 0.5f, 0.1f, 0.001f);
}
static GXColor sun_color[3] = {
@@ -522,87 +352,87 @@ void dKyr_sun_move() {
};
if (g_env_light.mDaytime < 180.0f) {
- f32 var_f1_4;
+ f32 parcent;
if (g_env_light.mDaytime < 90.0f) {
- var_f1_4 = 0.0f;
+ parcent = 0.0f;
} else if (g_env_light.mDaytime < 105.0f) {
- var_f1_4 = dKy_get_parcent(105.0f, 90.0f, g_env_light.mDaytime);
+ parcent = dKy_get_parcent(105.0f, 90.0f, g_env_light.mDaytime);
} else {
- var_f1_4 = 1.0f;
- }
-
- sun_p->mColor.r =
- (f32)sun_color[0].r + var_f1_4 * ((f32)sun_color[1].r - (f32)sun_color[0].r);
- sun_p->mColor.g =
- (f32)sun_color[0].g + var_f1_4 * ((f32)sun_color[1].g - (f32)sun_color[0].g);
- sun_p->mColor.b =
- (f32)sun_color[0].b + var_f1_4 * ((f32)sun_color[1].b - (f32)sun_color[0].b);
-
- sun_p->field_0x74.r =
- (f32)sun_color2[0].r + var_f1_4 * ((f32)sun_color2[1].r - (f32)sun_color2[0].r);
- sun_p->field_0x74.g =
- (f32)sun_color2[0].g + var_f1_4 * ((f32)sun_color2[1].g - (f32)sun_color2[0].g);
- sun_p->field_0x74.b =
- (f32)sun_color2[0].b + var_f1_4 * ((f32)sun_color2[1].b - (f32)sun_color2[0].b);
+ parcent = 1.0f;
+ }
+
+ sun_packet->mColor.r =
+ (f32)sun_color[0].r + parcent * ((f32)sun_color[1].r - (f32)sun_color[0].r);
+ sun_packet->mColor.g =
+ (f32)sun_color[0].g + parcent * ((f32)sun_color[1].g - (f32)sun_color[0].g);
+ sun_packet->mColor.b =
+ (f32)sun_color[0].b + parcent * ((f32)sun_color[1].b - (f32)sun_color[0].b);
+
+ sun_packet->field_0x74.r =
+ (f32)sun_color2[0].r + parcent * ((f32)sun_color2[1].r - (f32)sun_color2[0].r);
+ sun_packet->field_0x74.g =
+ (f32)sun_color2[0].g + parcent * ((f32)sun_color2[1].g - (f32)sun_color2[0].g);
+ sun_packet->field_0x74.b =
+ (f32)sun_color2[0].b + parcent * ((f32)sun_color2[1].b - (f32)sun_color2[0].b);
} else {
- f32 var_f1_5;
+ f32 parcent;
if (g_env_light.mDaytime < 247.5f) {
- var_f1_5 = 1.0f;
+ parcent = 1.0f;
} else if (g_env_light.mDaytime < 270.0f) {
- var_f1_5 = 1.0f - dKy_get_parcent(270.0f, 247.5f, g_env_light.mDaytime);
+ parcent = 1.0f - dKy_get_parcent(270.0f, 247.5f, g_env_light.mDaytime);
} else {
- var_f1_5 = 0.0f;
+ parcent = 0.0f;
}
- sun_p->mColor.r =
- (f32)sun_color[2].r + var_f1_5 * ((f32)sun_color[1].r - (f32)sun_color[2].r);
- sun_p->mColor.g =
- (f32)sun_color[2].g + var_f1_5 * ((f32)sun_color[1].g - (f32)sun_color[2].g);
- sun_p->mColor.b =
- (f32)sun_color[2].b + var_f1_5 * ((f32)sun_color[1].b - (f32)sun_color[2].b);
-
- sun_p->field_0x74.r =
- (f32)sun_color2[2].r + var_f1_5 * ((f32)sun_color2[1].r - (f32)sun_color2[2].r);
- sun_p->field_0x74.g =
- (f32)sun_color2[2].g + var_f1_5 * ((f32)sun_color2[1].g - (f32)sun_color2[2].g);
- sun_p->field_0x74.b =
- (f32)sun_color2[2].b + var_f1_5 * ((f32)sun_color2[1].b - (f32)sun_color2[2].b);
+ sun_packet->mColor.r =
+ (f32)sun_color[2].r + parcent * ((f32)sun_color[1].r - (f32)sun_color[2].r);
+ sun_packet->mColor.g =
+ (f32)sun_color[2].g + parcent * ((f32)sun_color[1].g - (f32)sun_color[2].g);
+ sun_packet->mColor.b =
+ (f32)sun_color[2].b + parcent * ((f32)sun_color[1].b - (f32)sun_color[2].b);
+
+ sun_packet->field_0x74.r =
+ (f32)sun_color2[2].r + parcent * ((f32)sun_color2[1].r - (f32)sun_color2[2].r);
+ sun_packet->field_0x74.g =
+ (f32)sun_color2[2].g + parcent * ((f32)sun_color2[1].g - (f32)sun_color2[2].g);
+ sun_packet->field_0x74.b =
+ (f32)sun_color2[2].b + parcent * ((f32)sun_color2[1].b - (f32)sun_color2[2].b);
}
if (dKyr_moon_arrival_check()) {
- f32 var_f1_6 = (sun_p->mPos[0].y - camera_p2->lookat.eye.y) / -8000.0f;
- var_f1_6 *= var_f1_6;
- var_f1_6 *= 6.0f;
+ f32 alpha = (sun_packet->mPos[0].y - camera_p2->lookat.eye.y) / -8000.0f;
+ alpha *= alpha;
+ alpha *= 6.0f;
- if (var_f1_6 > 1.0f) {
- var_f1_6 = 1.0f;
+ if (alpha > 1.0f) {
+ alpha = 1.0f;
}
- cLib_addCalc(&sun_p->field_0x68, var_f1_6, 0.2f, 0.01f, 0.001f);
+ cLib_addCalc(&sun_packet->mMoonAlpha, alpha, 0.2f, 0.01f, 0.001f);
} else {
- cLib_addCalc(&sun_p->field_0x68, 0.0f, 0.2f, 0.01f, 0.001f);
+ cLib_addCalc(&sun_packet->mMoonAlpha, 0.0f, 0.2f, 0.01f, 0.001f);
}
if (g_env_light.mCameraInWater == 0 && g_env_light.mDaytime > 255.0f &&
- sun_p->mSunAlpha >= 0.2f)
+ sun_packet->mSunAlpha >= 0.2f)
{
cXyz sp24;
- dKyr_get_vectle_calc(&camera_p2->lookat.eye, &g_env_light.mSunPos2, &sp54);
- sp24.x = camera_p2->lookat.eye.x + 30160.0f * sp54.x;
- sp24.y = camera_p2->lookat.eye.y + 30160.0f * sp54.y;
- sp24.z = camera_p2->lookat.eye.z + 30160.0f * sp54.z;
+ dKyr_get_vectle_calc(&camera_p2->lookat.eye, &g_env_light.mSunPos2, &lightDir);
+ sp24.x = camera_p2->lookat.eye.x + 30160.0f * lightDir.x;
+ sp24.y = camera_p2->lookat.eye.y + 30160.0f * lightDir.y;
+ sp24.z = camera_p2->lookat.eye.z + 30160.0f * lightDir.z;
sp24.y -= 21678.0f;
- sun_p->field_0x58 = dComIfGp_particle_set(sun_p->field_0x58, 0x11C, &sp24, 0, 0);
+ sun_packet->field_0x58 = dComIfGp_particle_set(sun_packet->field_0x58, 0x11C, &sp24, 0, 0);
}
}
/* 8005CC5C-8005CDA8 05759C 014C+00 0/0 1/1 0/0 .text dKyr_rain_init__Fv */
void dKyr_rain_init() {
- camera_class* camera_p = g_dComIfG_gameInfo.play.mCameraInfo[0].mCamera;
+ camera_class* camera = g_dComIfG_gameInfo.play.mCameraInfo[0].mCamera;
g_env_light.mpRainPacket->mpTex = (u8*)dComIfG_getObjectRes("Always", 0x4a);
g_env_light.mpRainPacket->mpTex2 = (u8*)dComIfG_getObjectRes("Always", 0x57);
- g_env_light.mpRainPacket->mCamEyePos = camera_p->lookat.eye;
- g_env_light.mpRainPacket->mCamCenterPos = camera_p->lookat.center;
+ g_env_light.mpRainPacket->mCamEyePos = camera->lookat.eye;
+ g_env_light.mpRainPacket->mCamCenterPos = camera->lookat.center;
g_env_light.mpRainPacket->mCenterDeltaMul = 0.0f;
g_env_light.mpRainPacket->field_0x3700 = 0.0f;
g_env_light.mpRainPacket->mSibukiAlpha = 0.0f;
@@ -658,37 +488,37 @@ static BOOL overhead_bg_chk() {
/* 8005CF78-8005D18C 0578B8 0214+00 1/1 0/0 0/0 .text forward_overhead_bg_chk__FP4cXyzf
*/
-static int forward_overhead_bg_chk(cXyz* param_0, f32 param_1) {
- camera_class* camera_p = dComIfGp_getCamera(0);
- u32 chk = 0;
+static BOOL forward_overhead_bg_chk(cXyz* ppos, f32 dist) {
+ camera_class* camera = dComIfGp_getCamera(0);
+ BOOL chk = FALSE;
- dBgS_ObjGndChk_All gncChk;
- dBgS_RoofChk roofChk;
+ dBgS_ObjGndChk_All gndchk;
+ dBgS_RoofChk roofchk;
cXyz chk_pos;
cXyz vectle;
- dKyr_get_vectle_calc(&camera_p->lookat.eye, &camera_p->lookat.center, &vectle);
- chk_pos.x = camera_p->lookat.eye.x + vectle.x * param_1;
- chk_pos.y = camera_p->lookat.eye.y + vectle.y * param_1;
- chk_pos.z = camera_p->lookat.eye.z + vectle.z * param_1;
- chk_pos.y = 50.0f + camera_p->lookat.eye.y;
- *param_0 = chk_pos;
-
- roofChk.i_SetPos(chk_pos);
- if (1000000000.0f != dComIfG_Bgsp().RoofChk(&roofChk)) {
- chk = 1;
+ dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &vectle);
+ chk_pos.x = camera->lookat.eye.x + vectle.x * dist;
+ chk_pos.y = camera->lookat.eye.y + vectle.y * dist;
+ chk_pos.z = camera->lookat.eye.z + vectle.z * dist;
+ chk_pos.y = 50.0f + camera->lookat.eye.y;
+ *ppos = chk_pos;
+
+ roofchk.i_SetPos(chk_pos);
+ if (1000000000.0f != dComIfG_Bgsp().RoofChk(&roofchk)) {
+ chk = TRUE;
if (strcmp(dComIfGp_getStartStageName(), "F_SP122") == 0) {
if (dStage_roomControl_c::getStayNo() == 17) {
- return 0;
+ return FALSE;
}
}
}
chk_pos.y += 10000.0f;
- gncChk.SetPos(&chk_pos);
+ gndchk.SetPos(&chk_pos);
- if (dComIfG_Bgsp().GroundCross(&gncChk) > 50.0f + camera_p->lookat.eye.y) {
- chk = 1;
+ if (dComIfG_Bgsp().GroundCross(&gndchk) > 50.0f + camera->lookat.eye.y) {
+ chk = TRUE;
}
return chk;
}
@@ -696,11 +526,11 @@ static int forward_overhead_bg_chk(cXyz* param_0, f32 param_1) {
/* 8005D18C-8005E8B0 057ACC 1724+00 0/0 1/1 0/0 .text dKyr_rain_move__Fv */
// NONMATCHING reg alloc, equivalent?
void dKyr_rain_move() {
- camera_class* camera_p;
+ camera_class* camera;
- dKankyo_rain_Packet* rain_p = g_env_light.mpRainPacket;
- camera_p = (camera_class*)dComIfGp_getCamera(0);
- fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
+ dKankyo_rain_Packet* rain_packet = g_env_light.mpRainPacket;
+ camera = (camera_class*)dComIfGp_getCamera(0);
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
cXyz spE0;
cXyz spD4;
@@ -727,14 +557,14 @@ void dKyr_rain_move() {
spA4.y = -2.5f;
spA4.z = 0.0f;
- if (rain_p->mRainCount <= g_env_light.mRainCount) {
- rain_p->mRainCount = g_env_light.mRainCount;
+ if (rain_packet->mRainCount <= g_env_light.mRainCount) {
+ rain_packet->mRainCount = g_env_light.mRainCount;
}
- if (rain_p->mRainCount != 0) {
- dKyr_get_vectle_calc(&camera_p->lookat.center, &rain_p->mCamCenterPos, &spB0);
+ if (rain_packet->mRainCount != 0) {
+ dKyr_get_vectle_calc(&camera->lookat.center, &rain_packet->mCamCenterPos, &spB0);
- f32 var_f1 = rain_p->mCamEyePos.abs(camera_p->lookat.eye);
+ f32 var_f1 = rain_packet->mCamEyePos.abs(camera->lookat.eye);
f32 var_f30;
if (var_f1 > 10.0f) {
@@ -746,19 +576,19 @@ void dKyr_rain_move() {
var_f30 = 0.0f;
}
- rain_p->mCamEyePos.x = camera_p->lookat.eye.x;
- rain_p->mCamEyePos.z = camera_p->lookat.eye.z;
+ rain_packet->mCamEyePos.x = camera->lookat.eye.x;
+ rain_packet->mCamEyePos.z = camera->lookat.eye.z;
- f32 var_f1_2 = rain_p->mCamEyePos.abs(camera_p->lookat.eye);
+ f32 var_f1_2 = rain_packet->mCamEyePos.abs(camera->lookat.eye);
f32 var_f2 = var_f1_2 / 20.0f;
if (var_f2 > 1.0f) {
var_f2 = 1.0f;
}
spA4.y -= var_f2 * 15.0f;
- rain_p->mCamEyePos = camera_p->lookat.eye;
+ rain_packet->mCamEyePos = camera->lookat.eye;
- f32 var_f1_3 = rain_p->mCamCenterPos.abs(camera_p->lookat.center);
+ f32 var_f1_3 = rain_packet->mCamCenterPos.abs(camera->lookat.center);
f32 var_f1_4;
if (var_f1_3 > 10.0f) {
@@ -770,17 +600,17 @@ void dKyr_rain_move() {
var_f1_4 = 0.0f;
}
- cLib_addCalc(&rain_p->mCenterDeltaMul, var_f30 * var_f1_4, 0.2f, 0.1f, 0.01f);
- if (rain_p->mCenterDeltaMul > 0.3f) {
- rain_p->mCenterDeltaMul = 0.3f;
+ cLib_addCalc(&rain_packet->mCenterDeltaMul, var_f30 * var_f1_4, 0.2f, 0.1f, 0.01f);
+ if (rain_packet->mCenterDeltaMul > 0.3f) {
+ rain_packet->mCenterDeltaMul = 0.3f;
}
- cLib_addCalc(&rain_p->mCenterDelta.x, spB0.x, 0.2f, 0.1f, 0.01f);
- cLib_addCalc(&rain_p->mCenterDelta.y, spB0.y, 0.2f, 0.1f, 0.01f);
- cLib_addCalc(&rain_p->mCenterDelta.z, spB0.z, 0.2f, 0.1f, 0.01f);
- rain_p->mCamCenterPos = camera_p->lookat.center;
+ cLib_addCalc(&rain_packet->mCenterDelta.x, spB0.x, 0.2f, 0.1f, 0.01f);
+ cLib_addCalc(&rain_packet->mCenterDelta.y, spB0.y, 0.2f, 0.1f, 0.01f);
+ cLib_addCalc(&rain_packet->mCenterDelta.z, spB0.z, 0.2f, 0.1f, 0.01f);
+ rain_packet->mCamCenterPos = camera->lookat.center;
- dKy_set_eyevect_calc2(camera_p, &spE0, 700.0f, 600.0f);
+ dKy_set_eyevect_calc2(camera, &spE0, 700.0f, 600.0f);
spD4.z = 0.0f;
spD4.y = 0.0f;
spD4.x = 0.0f;
@@ -788,9 +618,9 @@ void dKyr_rain_move() {
dKyw_get_wind_vec();
dKyw_get_wind_pow();
- rain_p->field_0x36cc = 0;
- rain_p->field_0x36c8 = 0;
- rain_p->mStatus = 0;
+ rain_packet->field_0x36cc = 0;
+ rain_packet->field_0x36c8 = 0;
+ rain_packet->mStatus = 0;
var_r22 = 0;
var_r23 = 0;
@@ -815,162 +645,162 @@ void dKyr_rain_move() {
var_r22 = forward_overhead_bg_chk(&sp8C, 1400.0f);
if (var_r24) {
- rain_p->mStatus |= 1;
+ rain_packet->mStatus |= 1;
} else if (var_r23) {
- rain_p->mStatus |= 2;
+ rain_packet->mStatus |= 2;
}
} else {
var_r21 = 1;
- rain_p->mStatus |= 1;
+ rain_packet->mStatus |= 1;
var_f29 = 1200.0f;
}
if (var_r24) {
- cLib_addCalc(&rain_p->mOverheadFade, 0.0f, 0.5f, 0.2f, 0.01f);
+ cLib_addCalc(&rain_packet->mOverheadFade, 0.0f, 0.5f, 0.2f, 0.01f);
} else {
- cLib_addCalc(&rain_p->mOverheadFade, 1.0f, 0.1f, 0.1f, 0.001f);
+ cLib_addCalc(&rain_packet->mOverheadFade, 1.0f, 0.1f, 0.1f, 0.001f);
}
if (var_r23) {
- cLib_addCalc(&rain_p->mFwdFade1, 0.0f, 0.5f, 0.2f, 0.01f);
+ cLib_addCalc(&rain_packet->mFwdFade1, 0.0f, 0.5f, 0.2f, 0.01f);
} else {
- cLib_addCalc(&rain_p->mFwdFade1, 1.0f, 0.1f, 0.1f, 0.001f);
+ cLib_addCalc(&rain_packet->mFwdFade1, 1.0f, 0.1f, 0.1f, 0.001f);
}
if (var_r22) {
- cLib_addCalc(&rain_p->mFwdFade2, 0.0f, 0.5f, 0.2f, 0.01f);
+ cLib_addCalc(&rain_packet->mFwdFade2, 0.0f, 0.5f, 0.2f, 0.01f);
} else {
- cLib_addCalc(&rain_p->mFwdFade2, 1.0f, 0.1f, 0.1f, 0.001f);
+ cLib_addCalc(&rain_packet->mFwdFade2, 1.0f, 0.1f, 0.1f, 0.001f);
}
f32 temp_f30 = 1.0f;
- for (int i = rain_p->mRainCount - 1; i >= 0; i--) {
- rain_p->mRainEff[i].mBasePos.y = spE0.y;
- RAIN_EFF* effect_p = &rain_p->mRainEff[i];
+ for (int i = rain_packet->mRainCount - 1; i >= 0; i--) {
+ rain_packet->mRainEff[i].mBasePos.y = spE0.y;
+ RAIN_EFF* effect = &rain_packet->mRainEff[i];
- switch (rain_p->mRainEff[i].mStatus) {
+ switch (rain_packet->mRainEff[i].mStatus) {
case 0:
- effect_p->field_0x24 = -(cM_rndF(10.0f) + 35.5f);
- effect_p->mTimer = 0;
- effect_p->mBasePos = spE0;
- effect_p->mPosition.x = cM_rndFX(800.0f);
- effect_p->mPosition.y = cM_rndF(600.0f);
- effect_p->mPosition.z = cM_rndFX(800.0f);
- effect_p->mAlpha = 1.0f;
- effect_p->field_0x1c = cM_rndF(360.0f);
- effect_p->field_0x20 = cM_rndF(360.0f);
-
- rain_bg_chk(rain_p, i);
- effect_p->mStatus++;
+ effect->field_0x24 = -(cM_rndF(10.0f) + 35.5f);
+ effect->mTimer = 0;
+ effect->mBasePos = spE0;
+ effect->mPosition.x = cM_rndFX(800.0f);
+ effect->mPosition.y = cM_rndF(600.0f);
+ effect->mPosition.z = cM_rndFX(800.0f);
+ effect->mAlpha = 1.0f;
+ effect->field_0x1c = cM_rndF(360.0f);
+ effect->field_0x20 = cM_rndF(360.0f);
+
+ rain_bg_chk(rain_packet, i);
+ effect->mStatus++;
break;
case 1:
case 2:
case 3:
f32 target = cM_rndFX(0.1f);
- f32* temp_r27 = &effect_p->field_0x24;
- target = effect_p->field_0x24 - target;
+ f32* temp_r27 = &effect->field_0x24;
+ target = effect->field_0x24 - target;
cLib_addCalc(temp_r27, target, 0.5f, 0.1f, 0.01f);
- effect_p->mPosition.x +=
+ effect->mPosition.x +=
20.0f *
- ((spC8.x + (10.0f * (rain_p->mCenterDelta.x * rain_p->mCenterDeltaMul))) +
+ ((spC8.x + (10.0f * (rain_packet->mCenterDelta.x * rain_packet->mCenterDeltaMul))) +
(spA4.x + (0.08f * (f32)(i & 7))));
- effect_p->mPosition.y +=
+ effect->mPosition.y +=
((f32)(i & 7) * -2.0f) +
(20.0f *
(spA4.y +
- (spC8.y + ((rain_p->mCenterDelta.y * rain_p->mCenterDeltaMul) * 10.0f))));
+ (spC8.y + ((rain_packet->mCenterDelta.y * rain_packet->mCenterDeltaMul) * 10.0f))));
- effect_p->mPosition.z +=
+ effect->mPosition.z +=
20.0f *
- ((spC8.z + (10.0f * (rain_p->mCenterDelta.z * rain_p->mCenterDeltaMul))) +
+ ((spC8.z + (10.0f * (rain_packet->mCenterDelta.z * rain_packet->mCenterDeltaMul))) +
(spA4.z + (0.08f * (f32)(i & 3))));
- spBC.x = effect_p->mBasePos.x + effect_p->mPosition.x;
+ spBC.x = effect->mBasePos.x + effect->mPosition.x;
spBC.y = spE0.y;
- spBC.z = effect_p->mBasePos.z + effect_p->mPosition.z;
+ spBC.z = effect->mBasePos.z + effect->mPosition.z;
f32 var_f1_5 = spBC.abs(spE0);
- if (effect_p->mTimer == 0) {
+ if (effect->mTimer == 0) {
if (var_f1_5 > 800.0f) {
- effect_p->mTimer = 10;
+ effect->mTimer = 10;
*temp_r27 = -(cM_rndF(10.0f) + 35.5f);
- effect_p->mBasePos = spE0;
+ effect->mBasePos = spE0;
f32 var_f1_6 = spBC.abs(spE0);
if (var_f1_6 > 850.0f) {
- effect_p->mPosition.x = cM_rndFX(800.0f);
- effect_p->mPosition.y = cM_rndFX(800.0f);
- effect_p->mPosition.z = cM_rndFX(800.0f);
+ effect->mPosition.x = cM_rndFX(800.0f);
+ effect->mPosition.y = cM_rndFX(800.0f);
+ effect->mPosition.z = cM_rndFX(800.0f);
} else {
f32 temp_f31 = cM_rndFX(40.0f);
get_vectle_calc(&spBC, &spE0, &spB0);
- effect_p->mPosition.x = spB0.x * (temp_f31 + 800.0f);
- effect_p->mPosition.y = spB0.y * (temp_f31 + 800.0f);
- effect_p->mPosition.z = spB0.z * (temp_f31 + 800.0f);
+ effect->mPosition.x = spB0.x * (temp_f31 + 800.0f);
+ effect->mPosition.y = spB0.y * (temp_f31 + 800.0f);
+ effect->mPosition.z = spB0.z * (temp_f31 + 800.0f);
}
- effect_p->mStatus = 1;
- rain_bg_chk(rain_p, i);
+ effect->mStatus = 1;
+ rain_bg_chk(rain_packet, i);
}
- spBC.y = effect_p->mBasePos.y + effect_p->mPosition.y;
- if (spBC.y < effect_p->field_0x30 + 20.0f) {
- effect_p->mBasePos = spE0;
- effect_p->mPosition.x = cM_rndFX(800.0f);
- effect_p->mPosition.y = 200.0f;
- effect_p->mPosition.z = cM_rndFX(800.0f);
- rain_bg_chk(rain_p, i);
- effect_p->mTimer = 10;
+ spBC.y = effect->mBasePos.y + effect->mPosition.y;
+ if (spBC.y < effect->field_0x30 + 20.0f) {
+ effect->mBasePos = spE0;
+ effect->mPosition.x = cM_rndFX(800.0f);
+ effect->mPosition.y = 200.0f;
+ effect->mPosition.z = cM_rndFX(800.0f);
+ rain_bg_chk(rain_packet, i);
+ effect->mTimer = 10;
}
} else {
- effect_p->mTimer--;
+ effect->mTimer--;
}
break;
}
- spBC.x = effect_p->mBasePos.x + effect_p->mPosition.x;
- spBC.y = effect_p->mBasePos.y + effect_p->mPosition.y;
- spBC.z = effect_p->mBasePos.z + effect_p->mPosition.z;
+ spBC.x = effect->mBasePos.x + effect->mPosition.x;
+ spBC.y = effect->mBasePos.y + effect->mPosition.y;
+ spBC.z = effect->mBasePos.z + effect->mPosition.z;
if (i > g_env_light.mRainCount - 1) {
- if (i == rain_p->mRainCount - 1) {
- rain_p->mRainCount--;
+ if (i == rain_packet->mRainCount - 1) {
+ rain_packet->mRainCount--;
}
}
f32 var_f31 = 1.0f;
- if (var_r24 || rain_p->mOverheadFade < 1.0f) {
+ if (var_r24 || rain_packet->mOverheadFade < 1.0f) {
cXyz sp80;
sp80 = spBC;
- sp80.y = camera_p->lookat.eye.y;
+ sp80.y = camera->lookat.eye.y;
- if (camera_p->lookat.eye.abs(sp80) < 800.0f) {
- var_f31 *= rain_p->mOverheadFade * 1.0f;
+ if (camera->lookat.eye.abs(sp80) < 800.0f) {
+ var_f31 *= rain_packet->mOverheadFade * 1.0f;
}
}
- if (var_r23 || rain_p->mFwdFade1 < 1.0f) {
+ if (var_r23 || rain_packet->mFwdFade1 < 1.0f) {
cXyz sp74;
sp74 = spBC;
sp74.y = sp98.y;
if (sp98.abs(sp74) < 550.0f) {
- var_f31 *= rain_p->mFwdFade1;
+ var_f31 *= rain_packet->mFwdFade1;
}
}
- if (var_r22 || rain_p->mFwdFade2 < 1.0f) {
+ if (var_r22 || rain_packet->mFwdFade2 < 1.0f) {
cXyz sp68;
sp68 = spBC;
sp68.y = sp8C.y;
if (sp8C.abs(sp68) < 550.0f) {
- var_f31 *= rain_p->mFwdFade2;
+ var_f31 *= rain_packet->mFwdFade2;
}
}
@@ -990,7 +820,7 @@ void dKyr_rain_move() {
sp50.y = spBC.y;
sp50.z = 8528.0f;
- if (spBC.y < 1300.0f || player_p->current.pos.y < 1100.0f) {
+ if (spBC.y < 1300.0f || player->current.pos.y < 1100.0f) {
if (spBC.abs(sp50) > 80.0f) {
var_f31 = 0.0f;
}
@@ -1009,7 +839,7 @@ void dKyr_rain_move() {
var_f31 = 0.0f;
}
- if (camera_p->lookat.eye.y < 0.0f) {
+ if (camera->lookat.eye.y < 0.0f) {
var_f31 = 0.0f;
}
} else {
@@ -1027,26 +857,26 @@ void dKyr_rain_move() {
(spBC.x < -2700.0f && spBC.z > 15750.0f))
{
var_f31 = 0.0f;
- rain_p->mStatus |= 1;
+ rain_packet->mStatus |= 1;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0 &&
dComIfGp_roomControl_getStayNo() == 9)
{
if (spBC.x < -3680.0f && spBC.z > -11975.0f && spBC.z < -10530.0f) {
var_f31 = 0.0f;
- rain_p->mStatus |= 1;
+ rain_packet->mStatus |= 1;
} else if (spBC.x > 3350.0f && spBC.z > -13027.0f && spBC.z < -11430.0f) {
var_f31 = 0.0f;
- rain_p->mStatus |= 1;
+ rain_packet->mStatus |= 1;
}
} else if (strcmp(dComIfGp_getStartStageName(), "R_SP107") == 0 &&
dComIfGp_roomControl_getStayNo() == 2 && spBC.z > 36900.0f)
{
var_f31 = 0.0f;
- rain_p->mStatus |= 1;
+ rain_packet->mStatus |= 1;
}
- effect_p->mAlpha = var_f31 * (temp_f30 + cM_rndFX(0.5f));
+ effect->mAlpha = var_f31 * (temp_f30 + cM_rndFX(0.5f));
}
}
}
@@ -1067,21 +897,21 @@ static BOOL d_krain_cut_turn_check() {
/* 8005E8F8-8005FBDC 059238 12E4+00 0/0 1/1 0/0 .text dKyr_housi_move__Fv */
void dKyr_housi_move() {
- dKankyo_housi_Packet* housi_p = g_env_light.mpHousiPacket;
- HOUSI_EFF* effect_p;
- camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
- fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
+ dKankyo_housi_Packet* housi_packet = g_env_light.mpHousiPacket;
+ HOUSI_EFF* effect;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
cXyz sp84;
cXyz sp78 = dKyw_get_wind_vecpow();
cXyz sp6C;
cXyz sp60;
- dBgS_GndChk sp138;
+ dBgS_GndChk gndchk;
bool var_r27 = 0;
f32 var_f31 = 1.0f;
- dBgS_CamGndChk_Wtr spE4;
+ dBgS_CamGndChk_Wtr cam_gndchk;
f32 var_f30 = -100000000.0f;
bool var_r24 = 0;
@@ -1092,11 +922,11 @@ void dKyr_housi_move() {
}
if (g_env_light.field_0xea9 == 2) {
- sp54 = camera_p->lookat.eye;
+ sp54 = camera->lookat.eye;
sp54.y += 100000.0f;
- spE4.SetPos(&sp54);
- var_f30 = dComIfG_Bgsp().GroundCross(&spE4);
+ cam_gndchk.SetPos(&sp54);
+ var_f30 = dComIfG_Bgsp().GroundCross(&cam_gndchk);
}
if (dKy_darkworld_check() == true || var_r24 == 1) {
@@ -1112,28 +942,28 @@ void dKyr_housi_move() {
}
if (g_env_light.mHousiCount != 0 ||
- (g_env_light.mHousiCount == 0 && housi_p->field_0x5de8 <= 0.0f))
+ (g_env_light.mHousiCount == 0 && housi_packet->field_0x5de8 <= 0.0f))
{
- housi_p->field_0x5dec = g_env_light.mHousiCount;
+ housi_packet->field_0x5dec = g_env_light.mHousiCount;
}
if (g_env_light.mHousiCount != 0) {
- cLib_addCalc(&housi_p->field_0x5de8, 1.0f, 0.2f, 0.05f, 0.01f);
+ cLib_addCalc(&housi_packet->field_0x5de8, 1.0f, 0.2f, 0.05f, 0.01f);
} else {
- cLib_addCalc(&housi_p->field_0x5de8, 0.0f, 0.2f, 0.05f, 0.01f);
+ cLib_addCalc(&housi_packet->field_0x5de8, 0.0f, 0.2f, 0.05f, 0.01f);
}
- if (housi_p->field_0x5dec == 0) {
+ if (housi_packet->field_0x5dec == 0) {
return;
}
- dKy_set_eyevect_calc2(camera_p, &sp84, 800.0f, 800.0f);
+ dKy_set_eyevect_calc2(camera, &sp84, 800.0f, 800.0f);
- if (sp84.abs(housi_p->field_0x10) > 500.0f) {
+ if (sp84.abs(housi_packet->field_0x10) > 500.0f) {
var_r27 = 1;
}
- housi_p->field_0x10 = sp84;
+ housi_packet->field_0x10 = sp84;
dKyw_get_wind_pow();
if (g_env_light.field_0xea9 == 1) {
@@ -1162,42 +992,42 @@ void dKyr_housi_move() {
}
}
- for (int i = housi_p->field_0x5dec - 1; i >= 0; i--) {
- f32 var_f26 = 0.4f * housi_p->field_0x5de8;
- effect_p = &housi_p->mHousiEff[i];
+ for (int i = housi_packet->field_0x5dec - 1; i >= 0; i--) {
+ f32 var_f26 = 0.4f * housi_packet->field_0x5de8;
+ effect = &housi_packet->mHousiEff[i];
- switch (housi_p->mHousiEff[i].mStatus) {
+ switch (housi_packet->mHousiEff[i].mStatus) {
case 0:
if (g_env_light.field_0xea9 == 1) {
- effect_p->field_0x34 = cM_rndF(0.5f) + 0.1f;
+ effect->field_0x34 = cM_rndF(0.5f) + 0.1f;
} else {
- effect_p->field_0x34 = cM_rndF(1.5f) + 0.2f;
- }
-
- effect_p->field_0x3c = 0;
- effect_p->field_0x4c = cM_rndFX(65536.0f);
- effect_p->mBasePos.x = sp84.x;
- effect_p->mBasePos.y = sp84.y;
- effect_p->mBasePos.z = sp84.z;
- effect_p->mPosition.x = cM_rndFX(1000.0f);
- effect_p->mPosition.y = cM_rndFX(1000.0f);
- effect_p->mPosition.z = cM_rndFX(1000.0f);
- effect_p->mAlpha = 0.0f;
- effect_p->field_0x48 = 0.0f;
- effect_p->mScale.x = cM_rndF(360.0f);
- effect_p->mScale.y = cM_rndF(360.0f);
- effect_p->mScale.z = cM_rndF(360.0f);
- effect_p->mSpeed.x = 0.0f;
- effect_p->mSpeed.y = 0.0f;
- effect_p->mSpeed.z = 0.0f;
-
- if (effect_p->mBasePos.y + effect_p->mPosition.y < -100149.9f) {
- effect_p->mPosition.y = (-99999.9f - effect_p->mBasePos.y) + 10.0f;
- }
-
- effect_p->field_0x38 = 0.0f;
- effect_p->field_0x44 = 0.0f;
- effect_p->mStatus++;
+ effect->field_0x34 = cM_rndF(1.5f) + 0.2f;
+ }
+
+ effect->field_0x3c = 0;
+ effect->field_0x4c = cM_rndFX(65536.0f);
+ effect->mBasePos.x = sp84.x;
+ effect->mBasePos.y = sp84.y;
+ effect->mBasePos.z = sp84.z;
+ effect->mPosition.x = cM_rndFX(1000.0f);
+ effect->mPosition.y = cM_rndFX(1000.0f);
+ effect->mPosition.z = cM_rndFX(1000.0f);
+ effect->mAlpha = 0.0f;
+ effect->field_0x48 = 0.0f;
+ effect->mScale.x = cM_rndF(360.0f);
+ effect->mScale.y = cM_rndF(360.0f);
+ effect->mScale.z = cM_rndF(360.0f);
+ effect->mSpeed.x = 0.0f;
+ effect->mSpeed.y = 0.0f;
+ effect->mSpeed.z = 0.0f;
+
+ if (effect->mBasePos.y + effect->mPosition.y < -100149.9f) {
+ effect->mPosition.y = (-99999.9f - effect->mBasePos.y) + 10.0f;
+ }
+
+ effect->field_0x38 = 0.0f;
+ effect->field_0x44 = 0.0f;
+ effect->mStatus++;
break;
case 1:
case 2:
@@ -1205,196 +1035,196 @@ void dKyr_housi_move() {
case 4:
f32 var_f24 = 2.5f;
- if (effect_p->mStatus != 4) {
- f32 var_f23 = effect_p->field_0x34;
- if (effect_p->mStatus == 2) {
+ if (effect->mStatus != 4) {
+ f32 var_f23 = effect->field_0x34;
+ if (effect->mStatus == 2) {
var_f23 *= 0.25f;
}
- f32 temp_f0_5 = cM_fsin(effect_p->mScale.x);
+ f32 temp_f0_5 = cM_fsin(effect->mScale.x);
if (g_env_light.field_0xea9 == 2) {
var_f24 = 5.0f;
}
- if (effect_p->mStatus != 3) {
- effect_p->mPosition.y += var_f23 * (sp78.y * var_f24);
- effect_p->mPosition.x += var_f23 * (sp78.x * var_f24);
- effect_p->mPosition.y -= var_f23 * 0.6f;
+ if (effect->mStatus != 3) {
+ effect->mPosition.y += var_f23 * (sp78.y * var_f24);
+ effect->mPosition.x += var_f23 * (sp78.x * var_f24);
+ effect->mPosition.y -= var_f23 * 0.6f;
if (g_env_light.field_0xea9 == 2) {
if (g_env_light.mPondSeason == 3) {
- effect_p->mPosition.y -= var_f23 * 3.0f;
+ effect->mPosition.y -= var_f23 * 3.0f;
} else {
- effect_p->mPosition.y -= var_f23 * 1.5f;
+ effect->mPosition.y -= var_f23 * 1.5f;
}
}
- effect_p->mPosition.z += var_f23 * (sp78.z * var_f24);
+ effect->mPosition.z += var_f23 * (sp78.z * var_f24);
} else {
var_f23 *= 4.5f;
- effect_p->mPosition.x += var_f23 * (sp78.x * var_f24);
- effect_p->mPosition.y += (var_f23 * (sp78.y * var_f24)) * 0.75f;
- effect_p->mPosition.y += var_f23 * 0.3f;
- effect_p->mPosition.z += var_f23 * (sp78.z * var_f24);
+ effect->mPosition.x += var_f23 * (sp78.x * var_f24);
+ effect->mPosition.y += (var_f23 * (sp78.y * var_f24)) * 0.75f;
+ effect->mPosition.y += var_f23 * 0.3f;
+ effect->mPosition.z += var_f23 * (sp78.z * var_f24);
}
- effect_p->mPosition.x += temp_f0_5 * var_f23;
- effect_p->mPosition.y += var_f23 * 0.5f * cM_fsin(effect_p->mScale.y);
- effect_p->mPosition.z += cM_fsin(effect_p->mScale.z) * var_f23;
+ effect->mPosition.x += temp_f0_5 * var_f23;
+ effect->mPosition.y += var_f23 * 0.5f * cM_fsin(effect->mScale.y);
+ effect->mPosition.z += cM_fsin(effect->mScale.z) * var_f23;
} else if (d_krain_cut_turn_check()) {
- effect_p->mStatus = 3;
+ effect->mStatus = 3;
}
- effect_p->mScale.x += 0.03f;
- effect_p->mScale.y += 0.02f;
- effect_p->mScale.z += 0.01f;
+ effect->mScale.x += 0.03f;
+ effect->mScale.y += 0.02f;
+ effect->mScale.z += 0.01f;
- sp6C.x = effect_p->mBasePos.x + effect_p->mPosition.x;
- sp6C.y = effect_p->mBasePos.y + effect_p->mPosition.y;
- sp6C.z = effect_p->mBasePos.z + effect_p->mPosition.z;
+ sp6C.x = effect->mBasePos.x + effect->mPosition.x;
+ sp6C.y = effect->mBasePos.y + effect->mPosition.y;
+ sp6C.z = effect->mBasePos.z + effect->mPosition.z;
if (g_env_light.field_0xea9 == 2) {
cXyz sp3C(sp6C);
if (sp6C.y <= var_f30) {
- effect_p->mStatus = 2;
+ effect->mStatus = 2;
}
- if (effect_p->mStatus == 2) {
- effect_p->mPosition.y = var_f30 - effect_p->mBasePos.y;
- } else if (effect_p->mStatus != 3 && effect_p->mStatus != 4) {
- sp3C.y = player_p->current.pos.y;
-
- if (sp3C.abs(player_p->current.pos) < 300.0f) {
- if (sp3C.z > 5600.0f && player_p->current.pos.y < 130.0f) {
- if (sp6C.y < player_p->current.pos.y + 2.0f) {
- effect_p->mPosition.y =
- (player_p->current.pos.y + 2.0f) - effect_p->mBasePos.y;
- effect_p->mStatus = 4;
+ if (effect->mStatus == 2) {
+ effect->mPosition.y = var_f30 - effect->mBasePos.y;
+ } else if (effect->mStatus != 3 && effect->mStatus != 4) {
+ sp3C.y = player->current.pos.y;
+
+ if (sp3C.abs(player->current.pos) < 300.0f) {
+ if (sp3C.z > 5600.0f && player->current.pos.y < 130.0f) {
+ if (sp6C.y < player->current.pos.y + 2.0f) {
+ effect->mPosition.y =
+ (player->current.pos.y + 2.0f) - effect->mBasePos.y;
+ effect->mStatus = 4;
}
} else {
- effect_p->mStatus = 3;
+ effect->mStatus = 3;
}
}
} else {
- if (effect_p->mStatus == 4) {
- effect_p->mPosition.y =
- (player_p->current.pos.y + 2.0f) - effect_p->mBasePos.y;
+ if (effect->mStatus == 4) {
+ effect->mPosition.y =
+ (player->current.pos.y + 2.0f) - effect->mBasePos.y;
}
- if (sp3C.abs(player_p->current.pos) > 400.0f) {
- effect_p->mStatus = 1;
+ if (sp3C.abs(player->current.pos) > 400.0f) {
+ effect->mStatus = 1;
}
}
}
sp60 = dKyw_pntwind_get_vecpow(&sp6C);
- if (effect_p->mSpeed.x < 30.0f) {
- effect_p->mSpeed.x += sp60.x * 9.0f;
+ if (effect->mSpeed.x < 30.0f) {
+ effect->mSpeed.x += sp60.x * 9.0f;
}
- if (effect_p->mSpeed.y < 30.0f) {
- effect_p->mSpeed.y += sp60.y * 9.0f;
+ if (effect->mSpeed.y < 30.0f) {
+ effect->mSpeed.y += sp60.y * 9.0f;
}
- if (effect_p->mSpeed.z < 30.0f) {
- effect_p->mSpeed.z += sp60.z * 9.0f;
+ if (effect->mSpeed.z < 30.0f) {
+ effect->mSpeed.z += sp60.z * 9.0f;
}
- cLib_addCalc(&effect_p->mSpeed.x, 0.0f, 0.2f, 0.1f, 0.00001f);
- cLib_addCalc(&effect_p->mSpeed.y, 0.0f, 0.2f, 0.1f, 0.00001f);
- cLib_addCalc(&effect_p->mSpeed.z, 0.0f, 0.2f, 0.1f, 0.00001f);
+ cLib_addCalc(&effect->mSpeed.x, 0.0f, 0.2f, 0.1f, 0.00001f);
+ cLib_addCalc(&effect->mSpeed.y, 0.0f, 0.2f, 0.1f, 0.00001f);
+ cLib_addCalc(&effect->mSpeed.z, 0.0f, 0.2f, 0.1f, 0.00001f);
- effect_p->mPosition.x += effect_p->mSpeed.x;
- effect_p->mPosition.y += effect_p->mSpeed.y;
- effect_p->mPosition.z += effect_p->mSpeed.z;
+ effect->mPosition.x += effect->mSpeed.x;
+ effect->mPosition.y += effect->mSpeed.y;
+ effect->mPosition.z += effect->mSpeed.z;
- sp6C.x = effect_p->mBasePos.x + effect_p->mPosition.x;
- sp6C.y = effect_p->mBasePos.y + effect_p->mPosition.y;
- sp6C.z = effect_p->mBasePos.z + effect_p->mPosition.z;
+ sp6C.x = effect->mBasePos.x + effect->mPosition.x;
+ sp6C.y = effect->mBasePos.y + effect->mPosition.y;
+ sp6C.z = effect->mBasePos.z + effect->mPosition.z;
f32 var_f1_4 = sp6C.abs(sp84);
- if (effect_p->field_0x3c == 0) {
+ if (effect->field_0x3c == 0) {
if (var_f1_4 > 1000.0f || sp6C.y < -99979.9f) {
- effect_p->field_0x3c = 10;
- effect_p->mBasePos = sp84;
+ effect->field_0x3c = 10;
+ effect->mBasePos = sp84;
if (sp6C.abs(sp84) > 1050.0f) {
- effect_p->mPosition.x = cM_rndFX(1000.0f);
- effect_p->mPosition.y = cM_rndFX(1000.0f);
- effect_p->mPosition.z = cM_rndFX(1000.0f);
+ effect->mPosition.x = cM_rndFX(1000.0f);
+ effect->mPosition.y = cM_rndFX(1000.0f);
+ effect->mPosition.z = cM_rndFX(1000.0f);
} else {
f32 temp_f23 = cM_rndFX(50.0f);
get_vectle_calc(&sp6C, &sp84, &sp60);
- effect_p->mPosition.x = sp60.x * (temp_f23 + 1000.0f);
- effect_p->mPosition.y = sp60.y * (temp_f23 + 1000.0f);
- effect_p->mPosition.z = sp60.z * (temp_f23 + 1000.0f);
+ effect->mPosition.x = sp60.x * (temp_f23 + 1000.0f);
+ effect->mPosition.y = sp60.y * (temp_f23 + 1000.0f);
+ effect->mPosition.z = sp60.z * (temp_f23 + 1000.0f);
}
- sp6C.x = effect_p->mBasePos.x + effect_p->mPosition.x;
- sp6C.y = effect_p->mBasePos.y + effect_p->mPosition.y;
- sp6C.z = effect_p->mBasePos.z + effect_p->mPosition.z;
+ sp6C.x = effect->mBasePos.x + effect->mPosition.x;
+ sp6C.y = effect->mBasePos.y + effect->mPosition.y;
+ sp6C.z = effect->mBasePos.z + effect->mPosition.z;
if (sp6C.y <= var_f30) {
- effect_p->mPosition.y += 1000.0f;
+ effect->mPosition.y += 1000.0f;
}
- effect_p->mSpeed.x = 0.0f;
- effect_p->mSpeed.y = 0.0f;
- effect_p->mSpeed.z = 0.0f;
+ effect->mSpeed.x = 0.0f;
+ effect->mSpeed.y = 0.0f;
+ effect->mSpeed.z = 0.0f;
if (g_env_light.field_0xea9 == 2) {
- effect_p->mPosition.y += cM_rndF(3200.0f);
+ effect->mPosition.y += cM_rndF(3200.0f);
if (sp6C.y > 3200.0f) {
- effect_p->mPosition.y = 3200.0f - effect_p->mBasePos.y;
+ effect->mPosition.y = 3200.0f - effect->mBasePos.y;
}
if (g_env_light.mPondSeason == 1) {
if (sp6C.x > 600.0f || sp6C.z > 1600.0f) {
- effect_p->mStatus = 1;
+ effect->mStatus = 1;
} else {
- effect_p->mStatus = 2;
+ effect->mStatus = 2;
}
} else if (sp6C.x > 1700.0f || sp6C.z > 2800.0f) {
- effect_p->mStatus = 1;
+ effect->mStatus = 1;
} else {
- effect_p->mStatus = 2;
+ effect->mStatus = 2;
}
}
}
} else {
- effect_p->field_0x3c--;
+ effect->field_0x3c--;
}
break;
}
- sp6C.x = effect_p->mBasePos.x + effect_p->mPosition.x;
- sp6C.y = effect_p->mBasePos.y + effect_p->mPosition.y;
- sp6C.z = effect_p->mBasePos.z + effect_p->mPosition.z;
+ sp6C.x = effect->mBasePos.x + effect->mPosition.x;
+ sp6C.y = effect->mBasePos.y + effect->mPosition.y;
+ sp6C.z = effect->mBasePos.z + effect->mPosition.z;
if (g_env_light.field_0xea9 != 2) {
- effect_p->field_0x4c += 600;
- if (effect_p->field_0x4c > 30000) {
+ effect->field_0x4c += 600;
+ if (effect->field_0x4c > 30000) {
var_f26 = 0.0f;
}
} else {
var_f26 = 1.0f;
}
- cLib_addCalc(&effect_p->mAlpha, var_f26, 0.5f, 0.02f, 0.00001f);
- effect_p->mAlpha *= var_f31;
+ cLib_addCalc(&effect->mAlpha, var_f26, 0.5f, 0.02f, 0.00001f);
+ effect->mAlpha *= var_f31;
if (var_r27 != 0) {
- effect_p->mAlpha = 0.0f;
+ effect->mAlpha = 0.0f;
}
- if (dKy_darkworld_check() == 1 || var_r24 == 1) {
- f32 var_f1_6 = sp6C.abs(camera_p->lookat.eye);
- effect_p->field_0x48 = var_f1_6;
+ if (dKy_darkworld_check() == true || var_r24 == 1) {
+ f32 var_f1_6 = sp6C.abs(camera->lookat.eye);
+ effect->field_0x48 = var_f1_6;
f32 var_f1_7;
if (var_f1_6 >= 800.0f) {
@@ -1406,18 +1236,18 @@ void dKyr_housi_move() {
var_f1_7 = 0.0f;
}
- effect_p->mAlpha = var_f1_7;
+ effect->mAlpha = var_f1_7;
}
- f32 var_f1_8 = sp6C.abs(camera_p->lookat.eye);
+ f32 var_f1_8 = sp6C.abs(camera->lookat.eye);
f32 temp_f25 = var_f1_8 / 2000.0f;
- effect_p->field_0x48 = 1.0f - (temp_f25 * temp_f25);
+ effect->field_0x48 = 1.0f - (temp_f25 * temp_f25);
}
}
/* 8005FBDC-8005FD48 05A51C 016C+00 0/0 1/1 0/0 .text dKyr_snow_init__Fv */
void dKyr_snow_init() {
- camera_class* camera_p = g_dComIfG_gameInfo.play.mCameraInfo[0].mCamera;
+ camera_class* camera = g_dComIfG_gameInfo.play.mCameraInfo[0].mCamera;
g_env_light.mpSnowPacket = new (32) dKankyo_snow_Packet();
if (g_env_light.mpSnowPacket == NULL) {
@@ -1431,7 +1261,7 @@ void dKyr_snow_init() {
}
g_env_light.mpSnowPacket->field_0x6d88 = 0;
- g_env_light.mpSnowPacket->field_0x6d74 = camera_p->lookat.eye;
+ g_env_light.mpSnowPacket->field_0x6d74 = camera->lookat.eye;
g_env_light.mpSnowPacket->field_0x6d80 = 0.0f;
g_env_light.mpSnowPacket->field_0x6d84 = 0.0f;
g_env_light.mpSnowPacket->field_0x6d8a = 0;
@@ -1447,10 +1277,10 @@ void dKyr_snow_init() {
void dKyr_snow_move() {
f32* temp_r26;
cXyz* temp_r25;
- dKankyo_snow_Packet* snow_p = g_env_light.mpSnowPacket;
- SNOW_EFF* effect_p;
- camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
- fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
+ dKankyo_snow_Packet* snow_packet = g_env_light.mpSnowPacket;
+ SNOW_EFF* effect;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
DOUBLE_POS spC8;
cXyz spB8;
@@ -1464,27 +1294,27 @@ void dKyr_snow_move() {
dBgS_ObjGndChk_All spE0;
cXyz sp64;
- if (snow_p->field_0x6d88 <= g_env_light.mSnowCount) {
- snow_p->field_0x6d88 = g_env_light.mSnowCount;
+ if (snow_packet->field_0x6d88 <= g_env_light.mSnowCount) {
+ snow_packet->field_0x6d88 = g_env_light.mSnowCount;
}
- if (snow_p->field_0x6d88 == 0) {
+ if (snow_packet->field_0x6d88 == 0) {
return;
}
- sp64 = player_p->current.pos;
+ sp64 = player->current.pos;
sp64.y += 100.0f;
spE0.SetPos(&sp64);
f32 temp_f19 = dComIfG_Bgsp().GroundCross(&spE0);
- dKy_set_eyevect_calc2(camera_p, &spB8, 500.0f, 500.0f);
- dKy_set_eyevect_calc2(camera_p, &spAC, 1000.0f, 1000.0f);
+ dKy_set_eyevect_calc2(camera, &spB8, 500.0f, 500.0f);
+ dKy_set_eyevect_calc2(camera, &spAC, 1000.0f, 1000.0f);
- if (snow_p->field_0x6d74.abs(camera_p->lookat.eye) > 1500.0f) {
- snow_p->field_0x6d88 = 0;
+ if (snow_packet->field_0x6d74.abs(camera->lookat.eye) > 1500.0f) {
+ snow_packet->field_0x6d88 = 0;
}
- snow_p->field_0x6d74 = camera_p->lookat.eye;
+ snow_packet->field_0x6d74 = camera->lookat.eye;
spA0.z = 0.0f;
spA0.y = 0.0f;
spA0.x = 0.0f;
@@ -1503,53 +1333,53 @@ void dKyr_snow_move() {
}
cXyz sp58;
- spC8.x = camera_p->lookat.center.x - camera_p->lookat.eye.x;
+ spC8.x = camera->lookat.center.x - camera->lookat.eye.x;
spC8.y = 0.0f;
- spC8.z = camera_p->lookat.center.z - camera_p->lookat.eye.z;
+ spC8.z = camera->lookat.center.z - camera->lookat.eye.z;
vectle_calc(&spC8, &sp58);
- snow_p->field_0x6d84 =
+ snow_packet->field_0x6d84 =
cM3d_VectorProduct2d(0.0f, 0.0f, -temp_r21->x, -temp_r21->z, sp58.x, sp58.z);
f32 temp_f20_1 = fabsf((temp_r21->x * sp58.x) + (temp_r21->z * sp58.z));
- snow_p->field_0x6d80 = ((1.0f - temp_f20_1) * var_f20) * (1.0f - fabsf(temp_r21->y + 0.3f));
- snow_p->field_0x6d80 *= fabsf(snow_p->field_0x6d84);
+ snow_packet->field_0x6d80 = ((1.0f - temp_f20_1) * var_f20) * (1.0f - fabsf(temp_r21->y + 0.3f));
+ snow_packet->field_0x6d80 *= fabsf(snow_packet->field_0x6d84);
- for (int i = snow_p->field_0x6d88 - 1; i >= 0; i--) {
- f32 temp_f27 = -(2.0f + cM_rndF(6.5f));
- f32 temp_f26 = 2.0f * (5.0f + (f32)(i & 15));
+ for (int i = snow_packet->field_0x6d88 - 1; i >= 0; i--) {
+ f32 gravity = -(2.0f + cM_rndF(6.5f));
+ f32 speed = 2.0f * (5.0f + (f32)(i & 15));
- effect_p = &snow_p->mSnowEff[i];
- switch (snow_p->mSnowEff[i].mStatus) {
+ effect = &snow_packet->mSnowEff[i];
+ switch (snow_packet->mSnowEff[i].mStatus) {
case 0:
- effect_p->mWindSpeed = temp_f26;
- effect_p->mGravity = temp_f27;
- effect_p->mTimer = 0;
- effect_p->mBasePos.x = spAC.x + cM_rndFX(1100.0f);
- effect_p->mBasePos.y = spAC.y + 1100.0f;
- effect_p->mBasePos.z = spAC.z + cM_rndFX(1100.0f);
- effect_p->mPosition.x = spB8.x + cM_rndFX(550.0f);
- effect_p->mPosition.y = spB8.y + 550.0f;
- effect_p->mPosition.z = spB8.z + cM_rndFX(550.0f);
- effect_p->mScale = 0.0f;
- effect_p->mPosWaveX = cM_rndF(65536.0f);
- effect_p->mPosWaveZ = cM_rndF(65536.0f);
- effect_p->mStatus++;
+ effect->mWindSpeed = speed;
+ effect->mGravity = gravity;
+ effect->mTimer = 0;
+ effect->mBasePos.x = spAC.x + cM_rndFX(1100.0f);
+ effect->mBasePos.y = spAC.y + 1100.0f;
+ effect->mBasePos.z = spAC.z + cM_rndFX(1100.0f);
+ effect->mPosition.x = spB8.x + cM_rndFX(550.0f);
+ effect->mPosition.y = spB8.y + 550.0f;
+ effect->mPosition.z = spB8.z + cM_rndFX(550.0f);
+ effect->mScale = 0.0f;
+ effect->mPosWaveX = cM_rndF(65536.0f);
+ effect->mPosWaveZ = cM_rndF(65536.0f);
+ effect->mStatus++;
break;
case 1:
f32 target = cM_rndFX(0.08f);
- temp_r26 = &effect_p->mWindSpeed;
- target = effect_p->mWindSpeed - target;
+ temp_r26 = &effect->mWindSpeed;
+ target = effect->mWindSpeed - target;
cLib_addCalc(temp_r26, target, 0.5f, 0.1f, 0.01f);
cXyz sp4C;
sp88 = sp94;
- temp_r25 = &effect_p->mPosition;
- if (camera_p->lookat.eye.abs(*temp_r25) < 500.0f &&
- effect_p->mPosition.y < temp_f19 + 250.0f)
+ temp_r25 = &effect->mPosition;
+ if (camera->lookat.eye.abs(*temp_r25) < 500.0f &&
+ effect->mPosition.y < temp_f19 + 250.0f)
{
- f32 var_f1_3 = ((temp_f19 + 250.0f) - effect_p->mPosition.y) / 250.0f;
+ f32 var_f1_3 = ((temp_f19 + 250.0f) - effect->mPosition.y) / 250.0f;
if (var_f1_3 > 1.0f) {
var_f1_3 = 1.0f;
}
@@ -1557,26 +1387,26 @@ void dKyr_snow_move() {
sp88.y = var_f1_3 * 0.45f;
}
- s16 wave_x = effect_p->mPosWaveX;
- s16 wave_z = effect_p->mPosWaveZ;
+ s16 wave_x = effect->mPosWaveX;
+ s16 wave_z = effect->mPosWaveZ;
sp4C.x = cM_scos(wave_x) * cM_ssin(wave_z);
sp4C.y = cM_ssin(wave_x);
sp4C.z = cM_scos(wave_x) * cM_scos(wave_z);
- effect_p->mPosition.x += sp88.x * *temp_r26;
- effect_p->mPosition.z += sp88.z * *temp_r26;
- effect_p->mPosition.y += effect_p->mGravity + (sp88.y * *temp_r26);
+ effect->mPosition.x += sp88.x * *temp_r26;
+ effect->mPosition.z += sp88.z * *temp_r26;
+ effect->mPosition.y += effect->mGravity + (sp88.y * *temp_r26);
- effect_p->mPosition.x += sp4C.x * 5.3f;
- effect_p->mPosition.y += sp4C.y * 5.3f;
- effect_p->mPosition.z += sp4C.z * 5.3f;
+ effect->mPosition.x += sp4C.x * 5.3f;
+ effect->mPosition.y += sp4C.y * 5.3f;
+ effect->mPosition.z += sp4C.z * 5.3f;
sp88 = sp94;
- if (camera_p->lookat.eye.abs(*temp_r25) < 500.0f &&
- effect_p->mBasePos.y < temp_f19 + 250.0f)
+ if (camera->lookat.eye.abs(*temp_r25) < 500.0f &&
+ effect->mBasePos.y < temp_f19 + 250.0f)
{
- f32 var_f1_5 = ((temp_f19 + 250.0f) - effect_p->mBasePos.y) / 250.0f;
+ f32 var_f1_5 = ((temp_f19 + 250.0f) - effect->mBasePos.y) / 250.0f;
if (var_f1_5 > 1.0f) {
var_f1_5 = 1.0f;
}
@@ -1584,66 +1414,66 @@ void dKyr_snow_move() {
sp88.y = var_f1_5 * 0.35f;
}
- effect_p->mBasePos.x += sp88.x * *temp_r26;
- effect_p->mBasePos.z += sp88.z * *temp_r26;
- effect_p->mBasePos.y += effect_p->mGravity + (sp88.y * *temp_r26);
+ effect->mBasePos.x += sp88.x * *temp_r26;
+ effect->mBasePos.z += sp88.z * *temp_r26;
+ effect->mBasePos.y += effect->mGravity + (sp88.y * *temp_r26);
- effect_p->mBasePos.x += sp4C.x * 5.3f;
- effect_p->mBasePos.y += sp4C.y * 5.3f;
- effect_p->mBasePos.z += sp4C.z * 5.3f;
+ effect->mBasePos.x += sp4C.x * 5.3f;
+ effect->mBasePos.y += sp4C.y * 5.3f;
+ effect->mBasePos.z += sp4C.z * 5.3f;
- cLib_addCalc(&effect_p->mPosWaveX, effect_p->mPosWaveX + cM_rndF(3000.0f), 0.25f,
+ cLib_addCalc(&effect->mPosWaveX, effect->mPosWaveX + cM_rndF(3000.0f), 0.25f,
1500.0f, 0.001f);
- cLib_addCalc(&effect_p->mPosWaveZ, effect_p->mPosWaveZ + cM_rndF(3000.0f), 0.25f,
+ cLib_addCalc(&effect->mPosWaveZ, effect->mPosWaveZ + cM_rndF(3000.0f), 0.25f,
1500.0f, 0.001f);
- sp7C = effect_p->mPosition;
+ sp7C = effect->mPosition;
f32 var_f1_6 = sp7C.abs(spB8);
- if (effect_p->mTimer == 0) {
+ if (effect->mTimer == 0) {
if (var_f1_6 > 550.0f) {
- effect_p->mTimer = 10;
- *temp_r26 = temp_f26;
- effect_p->mGravity = temp_f27;
+ effect->mTimer = 10;
+ *temp_r26 = speed;
+ effect->mGravity = gravity;
if (sp7C.abs(spB8) > 600.0f) {
- effect_p->mPosition.x = spB8.x + cM_rndFX(550.0f);
- effect_p->mPosition.y = spB8.y + cM_rndFX(550.0f);
- effect_p->mPosition.z = spB8.z + cM_rndFX(550.0f);
+ effect->mPosition.x = spB8.x + cM_rndFX(550.0f);
+ effect->mPosition.y = spB8.y + cM_rndFX(550.0f);
+ effect->mPosition.z = spB8.z + cM_rndFX(550.0f);
} else {
- f32 temp_f26_2 = cM_rndFX(55.0f);
+ f32 temp_f26_2 = cM_rndFX(27.5f);
get_vectle_calc(&sp7C, &spB8, &sp70);
- effect_p->mPosition.x = spB8.x + sp70.x * (temp_f26_2 + 550.0f);
- effect_p->mPosition.y = spB8.y + sp70.y * (temp_f26_2 + 550.0f);
- effect_p->mPosition.z = spB8.z + sp70.z * (temp_f26_2 + 550.0f);
+ effect->mPosition.x = spB8.x + sp70.x * (temp_f26_2 + 550.0f);
+ effect->mPosition.y = spB8.y + sp70.y * (temp_f26_2 + 550.0f);
+ effect->mPosition.z = spB8.z + sp70.z * (temp_f26_2 + 550.0f);
}
}
} else {
- effect_p->mTimer--;
+ effect->mTimer--;
}
- sp7C = effect_p->mBasePos;
+ sp7C = effect->mBasePos;
if (sp7C.abs(spAC) > 1100.0f) {
if (sp7C.abs(spAC) > 1150.0f) {
- effect_p->mBasePos.x = spAC.x + cM_rndFX(1100.0f);
- effect_p->mBasePos.y = spAC.y + cM_rndFX(1100.0f);
- effect_p->mBasePos.z = spAC.z + cM_rndFX(1100.0f);
+ effect->mBasePos.x = spAC.x + cM_rndFX(1100.0f);
+ effect->mBasePos.y = spAC.y + cM_rndFX(1100.0f);
+ effect->mBasePos.z = spAC.z + cM_rndFX(1100.0f);
} else {
- f32 temp_f26_3 = cM_rndFX(27.5f);
+ f32 temp_f26_3 = cM_rndFX(55.0f);
get_vectle_calc(&sp7C, &spAC, &sp70);
- effect_p->mBasePos.x = spAC.x + sp70.x * (temp_f26_3 + 1100.0f);
- effect_p->mBasePos.y = spAC.y + sp70.y * (temp_f26_3 + 1100.0f);
- effect_p->mBasePos.z = spAC.z + sp70.z * (temp_f26_3 + 1100.0f);
+ effect->mBasePos.x = spAC.x + sp70.x * (temp_f26_3 + 1100.0f);
+ effect->mBasePos.y = spAC.y + sp70.y * (temp_f26_3 + 1100.0f);
+ effect->mBasePos.z = spAC.z + sp70.z * (temp_f26_3 + 1100.0f);
}
}
break;
}
- sp7C = effect_p->mPosition;
+ sp7C = effect->mPosition;
- f32 var_f26 = sp7C.abs(camera_p->lookat.eye) / 100.0f;
+ f32 var_f26 = sp7C.abs(camera->lookat.eye) / 100.0f;
if (var_f26 > 1.0) {
var_f26 = 1.0;
}
@@ -1661,30 +1491,30 @@ void dKyr_snow_move() {
}
if (i > g_env_light.mSnowCount - 1) {
- cLib_addCalc(&effect_p->mScale, 0.0f, 0.2f, 0.1f, 0.01f);
+ cLib_addCalc(&effect->mScale, 0.0f, 0.2f, 0.1f, 0.01f);
} else {
- effect_p->mScale = var_f26;
+ effect->mScale = var_f26;
}
- if (i > g_env_light.mSnowCount - 1 && effect_p->mScale < 0.01f) {
- if (i == snow_p->field_0x6d88 - 1) {
- snow_p->field_0x6d88--;
+ if (i > g_env_light.mSnowCount - 1 && effect->mScale < 0.01f) {
+ if (i == snow_packet->field_0x6d88 - 1) {
+ snow_packet->field_0x6d88--;
}
}
if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) {
if (sp7C.z > -340.0f) {
- effect_p->mScale = 0.0f;
+ effect->mScale = 0.0f;
}
} else if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) {
if (sp7C.z > 9800.0f) {
- effect_p->mScale = 0.0f;
+ effect->mScale = 0.0f;
}
}
- sp7C = effect_p->mBasePos;
+ sp7C = effect->mBasePos;
- f32 var_f26_3 = sp7C.abs(camera_p->lookat.eye) / 100.0f;
+ f32 var_f26_3 = sp7C.abs(camera->lookat.eye) / 100.0f;
if (var_f26_3 > 1.0) {
var_f26_3 = 1.0;
}
@@ -1702,18 +1532,18 @@ void dKyr_snow_move() {
}
if (i > g_env_light.mSnowCount - 1) {
- cLib_addCalc(&effect_p->field_0x30, 0.0f, 0.2f, 0.1f, 0.01f);
+ cLib_addCalc(&effect->field_0x30, 0.0f, 0.2f, 0.1f, 0.01f);
} else {
- effect_p->field_0x30 = var_f26_3;
+ effect->field_0x30 = var_f26_3;
}
if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) {
if (sp7C.z > -340.0f) {
- effect_p->field_0x30 = 0.0f;
+ effect->field_0x30 = 0.0f;
}
} else if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) {
if (sp7C.z > 9800.0f) {
- effect_p->field_0x30 = 0.0f;
+ effect->field_0x30 = 0.0f;
}
}
}
@@ -1721,14 +1551,14 @@ void dKyr_snow_move() {
/* 80061324-8006140C 05BC64 00E8+00 0/0 1/1 0/0 .text dKyr_star_init__Fv */
void dKyr_star_init() {
- camera_class* camera_p = g_dComIfG_gameInfo.play.mCameraInfo[0].mCamera;
+ camera_class* camera = g_dComIfG_gameInfo.play.mCameraInfo[0].mCamera;
g_env_light.mpStarPacket = new (32) dKankyo_star_Packet();
if (g_env_light.mpStarPacket == NULL) {
return;
}
- g_env_light.mpStarPacket->field_0x10 = (u8*)dComIfG_getObjectRes("Always", 0x4a);
+ g_env_light.mpStarPacket->mpTex = (u8*)dComIfG_getObjectRes("Always", 0x4a);
g_env_light.mpStarPacket->mEffect[0].field_0x28 = 1.0f;
g_env_light.mpStarPacket->mEffectNum = 0;
}
@@ -1744,110 +1574,470 @@ void dKyr_star_move() {
}
}
-/* ############################################################################################## */
-/* 8037A578-8037A578 006BD8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8037A5CC = "D_MN05A";
-#pragma pop
+/* 80061438-800620AC 05BD78 0C74+00 0/0 1/1 0/0 .text cloud_shadow_move__Fv */
+void cloud_shadow_move() {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_cloud_Packet* packet = g_env_light.mpCloudPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
+
+ Mtx camMtx;
+ cXyz wind_vecpow = dKyw_get_wind_vecpow();
+ cXyz* wind_vec = dKyw_get_wind_vec();
+ cXyz center;
+ cXyz spA0;
+ cXyz sp94;
+ cXyz sp88;
+ cXyz sp7C;
+ cXyz pos;
+ cXyz sp64;
+ cXyz sp58;
+
+ f32 sp44 = 400.0f;
+ f32 sp40;
+ f32 sp3C = 1.0f;
+ f32 wind_pow = dKyw_get_wind_pow();
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
+
+ if (packet->mCount <= g_env_light.mMoyaCount) {
+ packet->mCount = (s16)g_env_light.mMoyaCount;
+ }
+
+ if (packet->mCount != 0) {
+ if (g_env_light.mMoyaMode == 8 || g_env_light.mMoyaMode == 10) {
+ if ((g_Counter.mCounter0 & 128) == 0) {
+ cLib_addCalc(&g_env_light.field_0xebc, 1.0f, 0.1f, 0.01f + cM_rndFX(0.005f), 0.000001f);
+ } else {
+ cLib_addCalc(&g_env_light.field_0xebc, 0.3f, 0.1f, 0.01f, 0.000001f);
+ }
+
+ if (g_env_light.field_0x12cc >= 3) {
+ cLib_addCalc(&g_env_light.field_0xebc, 1.0f, 0.5f, 0.1f, 0.000001f);
+ }
+ }
+
+ if (g_env_light.mMoyaMode == 4 || g_env_light.mMoyaMode == 11) {
+ wind_vecpow.x = wind_vec->x * (0.6f + (0.4f * dKyw_get_wind_pow()));
+ wind_vecpow.y = wind_vec->y * (0.6f + (0.4f * dKyw_get_wind_pow()));
+ wind_vecpow.z = wind_vec->z * (0.6f + (0.4f * dKyw_get_wind_pow()));
+ }
+
+ f32 sp28;
+ if (dComIfGd_getView() != NULL) {
+ sp28 = dComIfGd_getView()->fovy / 40.0f;
+ if (sp28 >= 1.0f) {
+ sp28 = 1.0f;
+ }
+ } else {
+ sp28 = 1.0f;
+ }
+
+ sp40 = 1200.0f;
+ f32 rnd_pos = 1400.0f;
+ dKy_set_eyevect_calc2(camera, &center, sp40, sp40);
-/* 804523E4-804523E8 0009E4 0004+00 2/2 0/0 0/0 .sdata2 @6720 */
-SECTION_SDATA2 static f32 lit_6720 = 0.004999999888241291f;
+ for (int i = 0; i < packet->mCount; i++) {
+ switch (packet->mCloudEff[i].mStatus) {
+ case 0:
+ packet->mCloudEff[i].mBasePos.x = center.x;
+ packet->mCloudEff[i].mBasePos.y = center.y;
+ if (g_env_light.mMoyaMode == 8) {
+ packet->mCloudEff[i].mBasePos.y = -300.0f;
+ }
+ packet->mCloudEff[i].mBasePos.z = center.z;
-/* 804523E8-804523EC 0009E8 0004+00 7/7 0/0 0/0 .sdata2 @6721 */
-SECTION_SDATA2 static f32 lit_6721 = 9.999999974752427e-07f;
+ packet->mCloudEff[i].mPosition.x = cM_rndFX(rnd_pos);
+ packet->mCloudEff[i].mPosition.y = cM_rndFX(rnd_pos);
+ packet->mCloudEff[i].mPosition.z = cM_rndFX(rnd_pos);
-/* 804523EC-804523F0 0009EC 0004+00 1/1 0/0 0/0 .sdata2 @6722 */
-SECTION_SDATA2 static f32 lit_6722 = -300.0f;
+ packet->mCloudEff[i].field_0x28 = 0.5f + cM_rndF(0.5f);
+ packet->mCloudEff[i].mAlpha = 0.0f;
+ packet->mCloudEff[i].field_0x2c = cM_rndF(65535.0f);
+ packet->mCloudEff[i].mPntWindSpeed.x = 0.0f;
+ packet->mCloudEff[i].mPntWindSpeed.y = 0.0f;
+ packet->mCloudEff[i].mPntWindSpeed.z = 0.0f;
-/* 804523F0-804523F4 0009F0 0004+00 2/2 0/0 0/0 .sdata2 @6723 */
-SECTION_SDATA2 static f32 lit_6723 = 65535.0f;
+ packet->mCloudEff[i].mStatus++;
+ break;
+ case 1:
+ case 2: {
+ pos.x = packet->mCloudEff[i].mBasePos.x + packet->mCloudEff[i].mPosition.x;
+ pos.y = packet->mCloudEff[i].mBasePos.y + packet->mCloudEff[i].mPosition.y;
+ pos.z = packet->mCloudEff[i].mBasePos.z + packet->mCloudEff[i].mPosition.z;
+
+ f32 sp34 = (0.5f * (1.0f + cM_ssin(packet->mCloudEff[i].field_0x2c)));
+ f32 sp30 = cM_scos(packet->mCloudEff[i].field_0x2c);
+ packet->mCloudEff[i].field_0x2c += 100;
+ f32 sp2C = (sp44 * packet->mCloudEff[i].field_0x28);
+
+ if (g_env_light.mMoyaMode != 5) {
+ packet->mCloudEff[i].mPosition.x += (0.6f + (0.4f * sp34)) * (sp2C * (wind_vecpow.x * (wind_vecpow.x * wind_vecpow.x)));
+ packet->mCloudEff[i].mPosition.y += (0.6f * (sp2C * (wind_vecpow.y * (wind_vecpow.y * wind_vecpow.y)))) + (0.08f * sp2C * (sp30 * dKyw_get_wind_pow()));
+ packet->mCloudEff[i].mPosition.z += (0.6f + (0.4f * sp34)) * (sp2C * (wind_vecpow.z * (wind_vecpow.z * wind_vecpow.z)));
+ } else {
+ packet->mCloudEff[i].mPosition.x += sp30;
+ packet->mCloudEff[i].mPosition.y += (0.6f * (0.027000003f * sp2C)) + (0.3f * sp30 * (0.08f * sp2C));
+ packet->mCloudEff[i].mPosition.z += sp30;
+ }
-/* 804523F4-804523F8 0009F4 0004+00 1/1 0/0 0/0 .sdata2 @6724 */
-SECTION_SDATA2 static f32 lit_6724 = 0.027000002562999725f;
+ if (g_env_light.mMoyaMode == 6) {
+ packet->mCloudEff[i].mPosition.y += 23.0f * packet->mCloudEff[i].field_0x28;
+ } else if (g_env_light.mMoyaMode == 8) {
+ if ((i & 1) == 0) {
+ packet->mCloudEff[i].mPosition.y += 20.0f * packet->mCloudEff[i].field_0x28;
+ }
+ } else if (g_env_light.mMoyaMode == 10) {
+ packet->mCloudEff[i].mPosition.y += 20.0f * packet->mCloudEff[i].field_0x28 * dKyw_get_wind_pow();
+ } else if (g_env_light.mMoyaMode == 11) {
+ packet->mCloudEff[i].mPosition.y += 120.0f * packet->mCloudEff[i].field_0x28 * dKyw_get_wind_pow();
+ }
-/* 804523F8-804523FC 0009F8 0004+00 1/1 0/0 0/0 .sdata2 @6725 */
-SECTION_SDATA2 static f32 lit_6725 = 23.0f;
+ pos.x = packet->mCloudEff[i].mBasePos.x + packet->mCloudEff[i].mPosition.x;
+ pos.y = packet->mCloudEff[i].mBasePos.y + packet->mCloudEff[i].mPosition.y;
+ pos.z = packet->mCloudEff[i].mBasePos.z + packet->mCloudEff[i].mPosition.z;
-/* 804523FC-80452400 0009FC 0004+00 5/5 0/0 0/0 .sdata2 @6726 */
-SECTION_SDATA2 static f32 lit_6726 = 120.0f;
+ if (pos.abs(center) > rnd_pos) {
+ packet->mCloudEff[i].mBasePos.x = center.x;
+ packet->mCloudEff[i].mBasePos.y = center.y;
+ if (g_env_light.mMoyaMode == 8) {
+ packet->mCloudEff[i].mBasePos.y = -300.0f;
+ }
+ packet->mCloudEff[i].mBasePos.z = center.z;
-/* 80452400-80452404 000A00 0004+00 1/1 0/0 0/0 .sdata2 @6727 */
-SECTION_SDATA2 static f32 lit_6727 = 1540.0f;
+ if (pos.abs(center) > rnd_pos + (0.1f * rnd_pos)) {
+ packet->mCloudEff[i].mPosition.x = cM_rndFX(rnd_pos);
+ packet->mCloudEff[i].mPosition.y = cM_rndFX(rnd_pos);
+ packet->mCloudEff[i].mPosition.z = cM_rndFX(rnd_pos);
+ } else {
+ cLib_addCalc(&packet->mCloudEff[i].mAlpha, 0.0f, 0.5f, 0.1f, 0.01f);
+ if (packet->mCloudEff[i].mAlpha < 0.01f) {
+ get_vectle_calc(&pos, &center, &sp64);
+ sp64.x += cM_rndF(0.5f);
+ sp64.y += cM_rndF(0.5f);
+ sp64.z += cM_rndF(0.5f);
+
+ packet->mCloudEff[i].mPosition.x = sp64.x * rnd_pos;
+ packet->mCloudEff[i].mPosition.y = sp64.y * rnd_pos;
+ packet->mCloudEff[i].mPosition.z = sp64.z * rnd_pos;
+ }
+ }
-/* 80452404-80452408 000A04 0004+00 1/1 0/0 0/0 .sdata2 @6728 */
-SECTION_SDATA2 static f32 lit_6728 = 1040.0f;
+ packet->mCloudEff[i].mAlpha = 0.0f;
+ }
+ break;
+ }
+ case 3:
+ packet->mCloudEff[i].mStatus = 0;
+ break;
+ }
-/* 80452408-8045240C 000A08 0004+00 1/1 0/0 0/0 .sdata2 @6729 */
-SECTION_SDATA2 static f32 lit_6729 = 44.0f;
+ pos.x = packet->mCloudEff[i].mBasePos.x + packet->mCloudEff[i].mPosition.x;
+ pos.y = packet->mCloudEff[i].mBasePos.y + packet->mCloudEff[i].mPosition.y;
+ pos.z = packet->mCloudEff[i].mBasePos.z + packet->mCloudEff[i].mPosition.z;
+
+ f32 sp20 = 0.0f;
+ f32 sp1C = 700.0f;
+ f32 sp24 = pos.abs(camera->lookat.eye);
+
+ f32 sp18 = (sp24 / rnd_pos);
+ if (sp18 > 1.0f) {
+ sp18 = 1.0f;
+ }
+ sp18 = sp18;
-/* 8045240C-80452410 000A0C 0004+00 1/1 0/0 0/0 .sdata2 @6730 */
-SECTION_SDATA2 static f32 lit_6730 = 408.0f;
+ f32 alpha_target;
+ if (sp24 < sp1C) {
+ if (sp24 < sp1C - 400.0f) {
+ alpha_target = 0.0f;
+ } else {
+ alpha_target = (sp24 - (sp1C - 400.0f)) / (sp1C - (sp1C - 400.0f));
+ if (alpha_target < 0.0f) {
+ alpha_target = 0.0f;
+ } else if (alpha_target > 1.0f) {
+ alpha_target = 1.0f;
+ }
+ }
+ } else {
+ f32 sp14 = 0.8f * (sp40 + rnd_pos);
+ if (sp24 < 0.5f * sp14) {
+ alpha_target = 1.0f;
+ } else {
+ alpha_target = (sp24 - (0.5f * sp14)) / (sp14 - (0.5f * sp14));
+ if (alpha_target < 0.0f) {
+ alpha_target = 0.0f;
+ } else if (alpha_target > 1.0f) {
+ alpha_target = 1.0f;
+ }
+ alpha_target = 1.0f - alpha_target;
+ }
+ }
-/* 80452410-80452414 000A10 0004+00 2/2 0/0 0/0 .sdata2 @6731 */
-SECTION_SDATA2 static f32 lit_6731 = 3.0f / 25.0f;
+ packet->mCloudEff[i].mSize = (44.0f + (408.0f * sp18)) * sp28;
+
+ f32 alpha_max = 0.12f;
+ if (g_env_light.mMoyaMode == 1 || g_env_light.mMoyaMode == 8) {
+ alpha_max = 0.24f;
+ } else if (g_env_light.mMoyaMode == 10) {
+ alpha_max = 0.2f * dKyw_get_wind_pow();
+ } else if (g_env_light.mMoyaMode == 11) {
+ alpha_max = dKyw_get_wind_pow() * dKyw_get_wind_pow();
+ } else if (g_env_light.mMoyaMode == 2) {
+ alpha_max = 0.36f;
+ } else if (g_env_light.mMoyaMode == 4) {
+ alpha_max = 0.38f * dKyw_get_wind_pow();
+ } else if (g_env_light.mMoyaMode == 50) {
+ alpha_max = 0.25f * (envlight->field_0xf40 * envlight->field_0xf40 * envlight->field_0xf40);
+ packet->mCloudEff[i].mAlpha = alpha_max * alpha_target;
+ } else if (g_env_light.mMoyaMode == 5) {
+ alpha_max = 0.09f;
+ } else if (g_env_light.mMoyaMode == 6) {
+ alpha_max = 0.13f;
+ }
-/* 80452414-80452418 000A14 0004+00 1/1 0/0 0/0 .sdata2 @6732 */
-SECTION_SDATA2 static f32 lit_6732 = 6.0f / 25.0f;
+ if (g_env_light.field_0xe92 == 1) {
+ alpha_max = 0.3f;
+ }
-/* 80452418-8045241C 000A18 0004+00 1/1 0/0 0/0 .sdata2 @6733 */
-SECTION_SDATA2 static f32 lit_6733 = 9.0f / 25.0f;
+ if (g_env_light.mMoyaMode == 9) {
+ if (dKyw_get_wind_pow() > 0.7f) {
+ alpha_max = 0.36f;
+ } else {
+ alpha_max = 0.1f;
+ }
+ }
-/* 8045241C-80452420 000A1C 0004+00 2/2 0/0 0/0 .sdata2 @6734 */
-SECTION_SDATA2 static f32 lit_6734 = 9.0f / 100.0f;
+ f32 sp10 = 1.0f;
+ s8 sp8;
+ sp10 = dKy_move_room_ratio(&player->tevStr, &sp8);
+ packet->mCloudEff[i].mAlpha *= sp10;
-/* 80452420-80452424 000A20 0004+00 1/1 0/0 0/0 .sdata2 @6735 */
-SECTION_SDATA2 static f32 lit_6735 = 13.0f / 100.0f;
+ if (i > g_env_light.mMoyaCount - 1) {
+ alpha_max = 0.0f;
+ if (packet->mCloudEff[i].mAlpha < 0.001f && i == packet->mCount - 1) {
+ packet->mCount--;
+ }
+ }
-/* 80452424-80452428 000A24 0004+00 2/2 0/0 0/0 .sdata2 @6736 */
-SECTION_SDATA2 static f32 lit_6736 = 7.0f / 10.0f;
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0) {
+ dKankyo_mud_Packet* mud_packet = g_env_light.mpMudPacket;
+ if (mud_packet != NULL) {
+ alpha_max *= mud_packet->field_0x1c3c;
+ }
+ }
-/* 80061438-800620AC 05BD78 0C74+00 0/0 1/1 0/0 .text cloud_shadow_move__Fv */
-void cloud_shadow_move() {
- // NONMATCHING
+ cLib_addCalc(&packet->mCloudEff[i].mAlpha, alpha_max * alpha_target, 0.1f, 0.1f, 0.001f);
+ }
+ }
}
-/* ############################################################################################## */
-/* 8037A578-8037A578 006BD8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8037A5D4 = "D_MN07A";
-#pragma pop
+/* 800620AC-80062ADC 05C9EC 0A30+00 0/0 1/1 0/0 .text vrkumo_move__Fv */
+// NONMATCHING - switch case issue, fsubs instead of fsub
+void vrkumo_move() {
+ cXyz wind_vecpow = dKyw_get_wind_vecpow();
+ dKankyo_vrkumo_Packet* vrkumo_packet = g_env_light.mpVrkumoPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ cXyz sp80;
+
+ f32 sp3C = 0.0f;
+ cXyz* wind_vec = dKyw_get_wind_vec();
+
+ f32 sp70, sp6C, sp68, sp64, sp60;
+ f32 sp5C, sp58, sp54, sp50, sp4C;
+ if (dKy_darkworld_check()) {
+ sp70 = 80.0f;
+ sp6C = 0.0f;
+ sp68 = 0.0f;
+ sp64 = 0.98f;
+ sp60 = 0.75f;
+ sp5C = sp70;
+ sp58 = sp6C;
+ sp54 = sp68;
+ sp50 = sp64;
+ sp4C = sp60;
+ } else {
+ sp70 = 10.0f;
+ sp6C = 2500.0f;
+ sp68 = 2500.0f;
+ sp64 = 0.99f;
+ sp60 = 1.0f;
+ sp5C = 25.0f;
+ sp58 = 1200.0f;
+ sp54 = 1200.0f;
+ sp50 = 0.95f;
+ sp4C = 1.0f;
+ }
-/* 80452428-8045242C 000A28 0004+00 1/1 0/0 0/0 .sdata2 @6947 */
-SECTION_SDATA2 static f32 lit_6947 = 2500.0f;
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0) {
+ sp58 = 4000.0f;
+ sp54 = 2000.0f;
+ }
-/* 8045242C-80452430 000A2C 0004+00 1/1 0/0 0/0 .sdata2 @6948 */
-SECTION_SDATA2 static f32 lit_6948 = 25.0f;
+ f32 strength = g_env_light.mVrkumoStrength;
+ sp70 += strength * (sp5C - sp70);
+ sp6C += strength * (sp58 - sp6C);
+ sp68 += strength * (sp54 - sp68);
+ sp64 += strength * (sp50 - sp64);
+ sp60 += strength * (sp4C - sp60);
-/* 80452430-80452438 000A30 0004+04 1/1 0/0 0/0 .sdata2 @6949 */
-SECTION_SDATA2 static f32 lit_6949[1 + 1 /* padding */] = {
- 18000.0f,
- /* padding */
- 0.0f,
-};
+ int stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo());
-/* 80452438-80452440 000A38 0008+00 1/1 0/0 0/0 .sdata2 @6950 */
-SECTION_SDATA2 static f64 lit_6950 = 14000.0;
+ if (dComIfGd_getView() != NULL) {
+ f32 sp2C = 0.0f;
-/* 80452440-80452444 000A40 0004+00 1/1 0/0 0/0 .sdata2 @6951 */
-SECTION_SDATA2 static f32 lit_6951 = 15000.0f;
+ dStage_FileList_dt_c* filelist = NULL;
+ if (dComIfGp_roomControl_getStayNo() >= 0) {
+ filelist = dComIfGp_roomControl_getStatusRoomDt(dComIfGp_roomControl_getStayNo())->mRoomDt.getFileListInfo();
+ }
-/* 80452444-80452448 000A44 0004+00 3/3 0/0 0/0 .sdata2 @6952 */
-SECTION_SDATA2 static f32 lit_6952 = 5000.0f;
+ if (filelist != NULL) {
+ sp2C = dStage_FileList_dt_SeaLevel(filelist);
+ }
-/* 80452448-8045244C 000A48 0004+00 1/1 0/0 0/0 .sdata2 @6953 */
-SECTION_SDATA2 static f32 lit_6953 = 15100.0f;
+ sp6C -= 0.09f * (camera->lookat.eye.y - sp2C);
+ }
-/* 8045244C-80452450 000A4C 0004+00 1/1 0/0 0/0 .sdata2 @6954 */
-SECTION_SDATA2 static f32 lit_6954 = -7.0f / 10.0f;
+ for (int i = 0; i < 100; i++) {
+ switch (vrkumo_packet->mVrkumoEff[i].mStatus) {
+ case 0:
+ s16 sp8 = cM_rndF(65535.0f);
+ f32 sp34 = cM_rndF(18000.0f);
+ if (sp34 > 15000.0f) {
+ sp34 = 14000.0 + cM_rndF(1000.0f);
+ }
-/* 80452450-80452454 000A50 0004+00 1/1 0/0 0/0 .sdata2 @6955 */
-SECTION_SDATA2 static f32 lit_6955 = 1.0f / 40.0f;
+ f32 var_f31 = sp34 * cM_ssin(sp8);
+ if (fabsf(var_f31 < 5000.0f)) {
+ if (var_f31 > 0.0f) {
+ var_f31 += 5000.0f;
+ } else {
+ var_f31 -= 5000.0f;
+ }
+ }
+ vrkumo_packet->mVrkumoEff[i].mPosition.x = var_f31;
-/* 800620AC-80062ADC 05C9EC 0A30+00 0/0 1/1 0/0 .text vrkumo_move__Fv */
-void vrkumo_move() {
- // NONMATCHING
+ vrkumo_packet->mVrkumoEff[i].mPosition.y = 0.0f;
+
+ var_f31 = sp34 * cM_scos(sp8);
+ if (fabsf(var_f31 < 5000.0f)) {
+ if (var_f31 > 0.0f) {
+ var_f31 += 5000.0f;
+ } else {
+ var_f31 -= 5000.0f;
+ }
+ }
+ vrkumo_packet->mVrkumoEff[i].mPosition.z = var_f31;
+
+ vrkumo_packet->mVrkumoEff[i].mHeight = 0.3f * cM_rndFX(0.3f);
+ vrkumo_packet->mVrkumoEff[i].mAlpha = 0.0f;
+ vrkumo_packet->mVrkumoEff[i].mSpeed = 0.4f + cM_rndF(2.0f);
+
+ vrkumo_packet->mVrkumoEff[i].mStatus++;
+ break;
+ case 1:
+ sp80 = vrkumo_packet->mVrkumoEff[i].mPosition;
+ sp80.y = 0.0f;
+
+ if (sp80.abs() > 15000.0f) {
+ if (sp80.abs() > 15100.0f) {
+ sp8 = cM_rndF(65535.0f);
+ sp34 = cM_rndF(18000.0f);
+ if (sp34 > 15000.0f) {
+ sp34 = 14000.0 + cM_rndF(1000.0f);
+ }
+ var_f31 = sp34 * cM_ssin(sp8);
+
+ if (fabsf(var_f31 < 5000.0f)) {
+ if (var_f31 > 0.0f) {
+ var_f31 += 5000.0f;
+ } else {
+ var_f31 -= 5000.0f;
+ }
+ }
+ vrkumo_packet->mVrkumoEff[i].mPosition.x = var_f31;
+
+ vrkumo_packet->mVrkumoEff[i].mPosition.y = 0.0f;
+
+ var_f31 = sp34 * cM_scos(sp8);
+ if (fabsf(var_f31 < 5000.0f)) {
+ if (var_f31 > 0.0f) {
+ var_f31 += 5000.0f;
+ } else {
+ var_f31 -= 5000.0f;
+ }
+ }
+ vrkumo_packet->mVrkumoEff[i].mPosition.z = var_f31;
+ } else {
+ vrkumo_packet->mVrkumoEff[i].mPosition.x = -vrkumo_packet->mVrkumoEff[i].mPosition.x;
+ vrkumo_packet->mVrkumoEff[i].mPosition.z = -vrkumo_packet->mVrkumoEff[i].mPosition.z;
+ }
+ vrkumo_packet->mVrkumoEff[i].mAlpha = 0.0f;
+ }
+
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0) {
+ wind_vecpow.x = -0.7f;
+ wind_vecpow.z = 0.0f;
+ } else if (strcmp(dComIfGp_getStartStageName(), "R_SP30") == 0) {
+ wind_vecpow.x = (0.3f * wind_vec->x) + (0.5f * wind_vecpow.x);
+ wind_vecpow.z = (0.3f * wind_vec->z) + (0.5f * wind_vecpow.z);
+ }
+
+ if (vrkumo_packet->mVrkumoEff[i].mAlpha <= 0.0f) {
+ vrkumo_packet->mVrkumoEff[i].mPosition.x += wind_vecpow.x * (sp70 + ((i / 100.0f) * sp70));
+ vrkumo_packet->mVrkumoEff[i].mPosition.z += wind_vecpow.z * (sp70 + ((i / 100.0f) * sp70));
+ } else {
+ vrkumo_packet->mVrkumoEff[i].mPosition.x += wind_vecpow.x * (sp70 * vrkumo_packet->mVrkumoEff[i].mSpeed) * vrkumo_packet->mVrkumoEff[i].mDistFalloff;
+ vrkumo_packet->mVrkumoEff[i].mPosition.z += wind_vecpow.z * (sp70 * vrkumo_packet->mVrkumoEff[i].mSpeed) * vrkumo_packet->mVrkumoEff[i].mDistFalloff;
+ }
+ break;
+ case 2:
+ break;
+ }
+
+ cXyz sp74;
+ sp74 = vrkumo_packet->mVrkumoEff[i].mPosition;
+ sp74.y = 0.0f;
+
+ f32 sp24 = sp74.abs();
+ f32 sp20 = 1.0f - (sp24 / 15000.0f);
+ if (sp20 < 0.0f) {
+ sp20 = 0.0f;
+ }
+
+ f32 spC = 1.0f;
+
+ f32 sp1C = i / 100.0f;
+ f32 sp44 = 1.0f - sp20;
+ sp44 = 1.0f - (sp44 * sp44 * sp44);
+ vrkumo_packet->mVrkumoEff[i].mPosition.y = (500.0f * sp1C) + (sp6C + (sp68 * sp44));
+
+ sp20 = sp24 / 15000.0f;
+ if (sp20 > 1.0f) {
+ sp20 = 1.0f;
+ }
+ sp20 = 1.0f - (0.6f * (sp20 * sp20 * sp20 * sp20));
+ vrkumo_packet->mVrkumoEff[i].mDistFalloff = sp20;
+
+ f32 max_alpha;
+ f32 alpha_step = 0.025f;
+ f32 sp10 = 1.0f;
+ if (i >= g_env_light.mVrkumoCount) {
+ alpha_step = 0.025f;
+ max_alpha = 0.0f;
+ } else if (vrkumo_packet->mVrkumoEff[i].mDistFalloff < 0.5f) {
+ alpha_step = 0.025f;
+ max_alpha = 0.0f;
+ } else {
+ max_alpha = sp10;
+ }
+
+ max_alpha *= spC;
+ cLib_addCalc(&vrkumo_packet->mVrkumoEff[i].mAlpha, max_alpha, 0.5f, alpha_step, 0.001f);
+ }
}
/* 80062ADC-80062B4C 05D41C 0070+00 7/7 0/0 0/0 .text dKr_cullVtx_Set__Fv */
@@ -1860,371 +2050,1359 @@ static void dKr_cullVtx_Set() {
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
}
-/* ############################################################################################## */
-/* 8037A4E8-8037A508 006B48 0020+00 1/1 0/0 0/0 .rodata @6991 */
-SECTION_RODATA static u8 const lit_6991[32] = {
- 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x54, 0x7A, 0xE1, 0x3F, 0x19, 0x99, 0x9A, 0x3F, 0x47, 0xAE, 0x14,
- 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x47, 0xAE, 0x14, 0x3F, 0x19, 0x99, 0x9A, 0x3F, 0x54, 0x7A, 0xE1,
-};
-COMPILER_STRIP_GATE(0x8037A4E8, &lit_6991);
+/* 80062B4C-80063670 05D48C 0B24+00 2/1 0/0 0/0 .text dKyr_draw_rev_moon__FPA4_fPPUc */
+static void dKyr_draw_rev_moon(Mtx drawMtx, u8** tex) {
+ dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
+ dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ cXyz pos[4];
+
+ u16 date = dComIfGs_getDate();
+ cXyz sp60 = camera->lookat.eye + g_env_light.mMoonPos;
+ sp60.y = camera->lookat.eye.y - g_env_light.mMoonPos.y;
+
+ cXyz moon_pos;
+ moon_pos.x = sp60.x - camera->lookat.eye.x;
+ moon_pos.y = sp60.y - camera->lookat.eye.y;
+ moon_pos.z = sp60.z - camera->lookat.eye.z;
+
+ Vec vp, lp;
+
+ int weekday = date % 8;
+ if (g_env_light.getDaytime() < 180.0f) {
+ if (weekday != 0) {
+ weekday--;
+ } else {
+ weekday = 7;
+ }
+ }
-/* 803A9BB8-803A9BD8 -00001 0020+00 1/1 0/0 0/0 .data @7214 */
-SECTION_DATA static void* lit_7214[8] = {
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x150),
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x15C),
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x168),
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x174),
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x180),
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x18C),
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x198),
- (void*)(((char*)dKyr_draw_rev_moon__FPA4_fPPUc) + 0x1A4),
-};
+ if (weekday != 4) {
+ int texidx;
+ f32 flipX;
+ switch (weekday) {
+ case 0:
+ texidx = 0;
+ flipX = 1.0f;
+ break;
+ case 1:
+ texidx = 1;
+ flipX = 1.0f;
+ break;
+ case 2:
+ texidx = 2;
+ flipX = 1.0f;
+ break;
+ case 3:
+ texidx = 3;
+ flipX = 1.0f;
+ break;
+ case 4:
+ texidx = 0;
+ flipX = 1.0f;
+ break;
+ case 5:
+ texidx = 3;
+ flipX = -1.0f;
+ break;
+ case 6:
+ texidx = 2;
+ flipX = -1.0f;
+ break;
+ case 7:
+ default:
+ texidx = 1;
+ flipX = -1.0f;
+ break;
+ }
+
+ GXColor color_reg0;
+ color_reg0.r = g_env_light.mFogColor.r;
+ color_reg0.g = g_env_light.mFogColor.g;
+ color_reg0.b = g_env_light.mFogColor.b;
+ color_reg0.a = 0xFF;
+
+ GXColor color_reg1;
+ color_reg1.r = 0;
+ color_reg1.g = 0;
+ color_reg1.b = 0;
+ color_reg1.a = 0xFF;
+
+ Mtx camMtx;
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ if (sun_packet->field_0x28 < 5) {
+ sun_packet->field_0x28 += 2;
+ }
+ sun_packet->field_0x29 = 1;
+ return;
+ }
-/* 80452454-80452458 000A54 0004+00 5/5 0/0 0/0 .sdata2 @7208 */
-SECTION_SDATA2 static f32 lit_7208 = -1.0f;
+ GXTexObj texobj;
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[1], GX_TEXMAP1);
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[texidx + 2], GX_TEXMAP2);
-/* 80452458-8045245C 000A58 0004+00 8/8 0/0 0/0 .sdata2 @7209 */
-SECTION_SDATA2 static f32 lit_7209 = 45.0f;
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(3);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(3);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD2, GX_TEXMAP2, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_CPREV, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_COPY);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetNumIndStages(0);
+ GXSetCullMode(GX_CULL_NONE);
+
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX2, GX_DIRECT);
+
+ cXyz camfwd;
+ f32 dayscale[8] = {
+ 1.0f, 0.83f, 0.6f, 0.78f,
+ 1.0f, 0.78f, 0.6f, 0.83f,
+ };
+
+ dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &camfwd);
+
+ f32 cam_distXZ = JMAFastSqrt((camfwd.x * camfwd.x) + (camfwd.z * camfwd.z));
+ f32 cam_theta = atan2f(camfwd.x, camfwd.z);
+ f32 cam_phi = atan2f(camfwd.y, cam_distXZ);
+
+ f32 moon_distXZ = JMAFastSqrt((moon_pos.x * moon_pos.x) + (moon_pos.z * moon_pos.z));
+ f32 moon_theta = atan2f(moon_pos.x, moon_pos.z);
+ f32 moon_phi = atan2f(moon_pos.y, moon_distXZ);
+
+ f32 sp3C = (moon_theta - cam_theta) / -(M_PI * 2);
+ f32 rot = -(45.0f + (360.0f * sp3C));
+
+ Mtx rotMtx;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ color_reg0.r = 0;
+ color_reg0.g = 0;
+ color_reg0.b = 0;
+
+ f32 size = 8000.0f;
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) {
+ size = 11000.0f;
+ }
-/* 8045245C-80452460 000A5C 0004+00 2/2 0/0 0/0 .sdata2 @7210 */
-SECTION_SDATA2 static f32 lit_7210 = -6.2831854820251465f;
+ color_reg0.a = 255.0f * sun_packet->mMoonAlpha;
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+
+ for (int i = 0; i < 2; i++) {
+ if (i == 1) {
+ dKyr_set_btitex(&texobj, (ResTIMG*)lenz_packet->mpResBall);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+
+ size *= 2.3f;
+ color_reg0.a = 40.0f * sun_packet->mMoonAlpha;
+
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xFF;
+ color_reg0.b = 0xCF;
+
+ color_reg1.r = 0xC5;
+ color_reg1.g = 0x69;
+ color_reg1.b = 0x23;
+
+ rot = (50.0f * flipX);
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+ }
-/* 80452460-80452464 000A60 0004+00 12/12 0/0 0/0 .sdata2 @7211 */
-SECTION_SDATA2 static f32 lit_7211 = 0.01745329238474369f;
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+
+ vp.x = -size * flipX;
+ vp.y = size;
+ vp.z = 0.0f;
+ cMtx_multVec(camMtx, &vp, &lp);
+ pos[0].x = sp60.x + lp.x;
+ pos[0].y = sp60.y + lp.y;
+ pos[0].z = sp60.z + lp.z;
+
+ vp.x = size * flipX;
+ vp.y = size;
+ vp.z = 0.0f;
+ cMtx_multVec(camMtx, &vp, &lp);
+ pos[1].x = sp60.x + lp.x;
+ pos[1].y = sp60.y + lp.y;
+ pos[1].z = sp60.z + lp.z;
+
+ if (i == 0) {
+ vp.x = size * flipX;
+ vp.y = -size;
+ } else {
+ vp.x = (size * flipX) * dayscale[weekday];
+ vp.y = -size * dayscale[weekday];
+ }
-/* 80452464-80452468 000A64 0004+00 2/2 0/0 0/0 .sdata2 @7212 */
-SECTION_SDATA2 static f32 lit_7212 = 11000.0f;
+ vp.z = 0.0f;
+ cMtx_multVec(camMtx, &vp, &lp);
+ pos[2].x = sp60.x + lp.x;
+ pos[2].y = sp60.y + lp.y;
+ pos[2].z = sp60.z + lp.z;
-/* 80452468-8045246C 000A68 0004+00 2/2 0/0 0/0 .sdata2 @7213 */
-SECTION_SDATA2 static f32 lit_7213 = 2.3f;
+ vp.x = -size * flipX;
+ vp.y = -size;
+ vp.z = 0.0f;
+ cMtx_multVec(camMtx, &vp, &lp);
+ pos[3].x = sp60.x + lp.x;
+ pos[3].y = sp60.y + lp.y;
+ pos[3].z = sp60.z + lp.z;
-/* 80062B4C-80063670 05D48C 0B24+00 2/1 0/0 0/0 .text dKyr_draw_rev_moon__FPA4_fPPUc */
-static void dKyr_draw_rev_moon(Mtx param_0, u8** param_1) {
- // NONMATCHING
-}
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ if (i == 0) {
+ GXTexCoord2s16(0, 0);
+ GXTexCoord2s16(0, 0);
+ }
-/* ############################################################################################## */
-/* 8037A508-8037A528 006B68 0020+00 1/1 0/0 0/0 .rodata @7275 */
-SECTION_RODATA static u8 const lit_7275[32] = {
- 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x54, 0x7A, 0xE1, 0x3F, 0x19, 0x99, 0x9A, 0x3F, 0x47, 0xAE, 0x14,
- 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x47, 0xAE, 0x14, 0x3F, 0x19, 0x99, 0x9A, 0x3F, 0x54, 0x7A, 0xE1,
-};
-COMPILER_STRIP_GATE(0x8037A508, &lit_7275);
-
-/* 8037A578-8037A578 006BD8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8037A5DC = "F_SP103";
-SECTION_DEAD static char const* const stringBase_8037A5E4 = "APPEAR_HAWKER";
-#pragma pop
-
-/* 803A9BD8-803A9BF8 -00001 0020+00 1/1 0/0 0/0 .data @7549 */
-SECTION_DATA static void* lit_7549[8] = {
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x354),
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x360),
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x36C),
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x378),
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x384),
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x390),
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x39C),
- (void*)(((char*)dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc) + 0x3A8),
-};
-
-/* 8045246C-80452470 000A6C 0004+00 2/2 0/0 0/0 .sdata2 @7545 */
-SECTION_SDATA2 static f32 lit_7545 = 3900.0f;
-
-/* 80452470-80452474 000A70 0004+00 2/2 0/0 0/0 .sdata2 @7546 */
-SECTION_SDATA2 static f32 lit_7546 = 8052.0f;
-
-/* 80452474-80452478 000A74 0004+00 2/2 0/0 0/0 .sdata2 @7547 */
-SECTION_SDATA2 static f32 lit_7547 = -9072.0f;
-
-/* 80452478-8045247C 000A78 0004+00 1/1 0/0 0/0 .sdata2 @7548 */
-SECTION_SDATA2 static f32 lit_7548 = 2400.0f;
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ if (i == 0) {
+ GXTexCoord2s16(0xFF, 0);
+ GXTexCoord2s16(0xFF, 0);
+ }
-/* 80063670-8006444C 05DFB0 0DDC+00 1/0 1/1 0/0 .text dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc */
-void dKyr_drawSun(Mtx param_0, cXyz* param_1, _GXColor& param_2, u8** param_3) {
- // NONMATCHING
-}
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ if (i == 0) {
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXTexCoord2s16(0xFF, 0xFF);
+ }
-/* ############################################################################################## */
-/* 8037A528-8037A548 006B88 0020+00 1/1 0/0 0/0 .rodata scale_dat$7608 */
-SECTION_RODATA static u8 const scale_dat[32] = {
- 0x45, 0xFA, 0x00, 0x00, 0x46, 0x24, 0x10, 0x00, 0x40, 0x4C, 0xCC, 0xCD, 0x3F, 0xE6, 0x66, 0x66,
- 0x3F, 0xE6, 0x66, 0x66, 0x40, 0xC6, 0x66, 0x66, 0x3F, 0x99, 0x99, 0x9A, 0x40, 0x80, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x8037A528, &scale_dat);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ if (i == 0) {
+ GXTexCoord2s16(0, 0xFF);
+ GXTexCoord2s16(0, 0xFF);
+ }
-/* 8037A548-8037A568 006BA8 0020+00 1/1 0/0 0/0 .rodata col_dat$7609 */
-SECTION_RODATA static u8 const col_dat[32] = {
- 0xB4, 0xC8, 0xFF, 0xFF, 0xC8, 0xC8, 0xFF, 0x50, 0xFF, 0x8C, 0x78, 0x5A, 0xFF, 0xB4, 0x78, 0x64,
- 0xB4, 0xB4, 0x78, 0x55, 0xB4, 0xC8, 0x64, 0x5A, 0xDC, 0xFF, 0xB4, 0x6E, 0xC8, 0xDC, 0xFF, 0x5A,
-};
-COMPILER_STRIP_GATE(0x8037A548, &col_dat);
+ GXEnd();
+ }
-/* 80450EF0-80450EF4 -00001 0004+00 1/1 0/0 0/0 .sbss None */
-/* 80450EF0 0002+00 data_80450EF0 None */
-/* 80450EF2 0002+00 data_80450EF2 S_rot_work2$7557 */
-static u8 struct_80450EF0[4];
+ J3DShape::resetVcdVatCache();
+ }
+}
-/* 80450EF4-80450EF8 0003F4 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450EF4[4];
+/* 80063670-8006444C 05DFB0 0DDC+00 1/0 1/1 0/0 .text dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc */
+void dKyr_drawSun(Mtx drawMtx, cXyz* ppos, GXColor& unused, u8** tex) {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ cXyz pos[4];
+ cXyz sunpos;
+ cXyz spB4;
+ cXyz moon_pos;
+ cXyz sp9C;
+
+ Vec sp90, sp84;
+
+ dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
+ dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ f32 rot = 0.0f;
+
+ u8 draw_moon = false;
+ u8 draw_sun = false;
+ u16 date = dComIfGs_getDate();
+
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP200") == 0) {
+ sun_packet->mMoonAlpha = 1.0f;
+ sun_packet->mSunAlpha = 0.0f;
+ }
-/* 8045247C-80452480 000A7C 0004+00 1/1 0/0 0/0 .sdata2 @7882 */
-SECTION_SDATA2 static f32 lit_7882 = 2.9f;
+ if (sun_packet->mSunAlpha > 0.0f) {
+ draw_sun = true;
+ }
-/* 80452480-80452484 000A80 0004+00 2/2 0/0 0/0 .sdata2 @7883 */
-SECTION_SDATA2 static f32 lit_7883 = 34.0f;
+ if (sun_packet->mMoonAlpha > 0.0f) {
+ draw_moon = true;
+ }
-/* 80452484-80452488 000A84 0004+00 1/1 0/0 0/0 .sdata2 @7884 */
-SECTION_SDATA2 static f32 lit_7884 = 160.0f;
+ if ((draw_sun | draw_moon) != 0) {
+ sunpos.x = ppos->x;
+ sunpos.y = ppos->y;
+ sunpos.z = ppos->z;
-/* 80452488-8045248C 000A88 0004+00 1/1 0/0 0/0 .sdata2 @7885 */
-SECTION_SDATA2 static f32 lit_7885 = 0.86f;
+ u32 stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo());
+ if (g_env_light.mBaseLightInfluence.mColor.r == 0 && stage_type != ST_ROOM) {
+ if (g_env_light.mDaytime > 285.0f || g_env_light.mDaytime < 105.0f) {
+ draw_moon = false;
+ }
-/* 8045248C-80452490 000A8C 0004+00 1/1 0/0 0/0 .sdata2 @7886 */
-SECTION_SDATA2 static f32 lit_7886 = 2.46f;
+ spB4.x = ppos->x;
+ spB4.y = ppos->y;
+ spB4.z = ppos->z;
+ } else {
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP200") == 0 && dComIfG_play_c::getLayerNo(0) == 0) {
+ spB4 = envlight->mMoonPos;
+ moon_pos = spB4;
+ } else {
+ spB4 = camera->lookat.eye + envlight->mMoonPos;
+ moon_pos.x = spB4.x - camera->lookat.eye.x;
+ moon_pos.y = spB4.y - camera->lookat.eye.y;
+ moon_pos.z = spB4.z - camera->lookat.eye.z;
+ }
+ }
-/* 80452490-80452494 000A90 0004+00 2/2 0/0 0/0 .sdata2 @7887 */
-SECTION_SDATA2 static f32 lit_7887 = 1.1f;
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0 && dKy_daynight_check()) {
+ spB4.x = 3900.0f + camera->lookat.eye.x;
+ spB4.y = 8052.0f + camera->lookat.eye.y;
+ spB4.z = -9072.0f + camera->lookat.eye.z;
-/* 80452494-80452498 000A94 0004+00 1/1 0/0 0/0 .sdata2 @7888 */
-SECTION_SDATA2 static f32 lit_7888 = 0.04f;
+ moon_pos.x = spB4.x - camera->lookat.eye.x;
+ moon_pos.y = spB4.y - camera->lookat.eye.y;
+ moon_pos.z = spB4.z - camera->lookat.eye.z;
+ }
-/* 80452498-8045249C 000A98 0004+00 1/1 0/0 0/0 .sdata2 @7889 */
-SECTION_SDATA2 static f32 lit_7889 = 0.075f;
+ int weekday = date % 8;
+ if (g_env_light.getDaytime() < 180.0f) {
+ if (weekday != 0) {
+ weekday--;
+ } else {
+ weekday = 7;
+ }
+ }
-/* 8045249C-804524A0 000A9C 0004+00 1/1 0/0 0/0 .sdata2 @7890 */
-SECTION_SDATA2 static f32 lit_7890 = 0.88f;
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP200") == 0) {
+ if (g_env_light.getDaytime() < 180.0f) {
+ weekday++;
+ if (weekday >= 8) {
+ weekday = 0;
+ }
+ }
-/* 804524A0-804524A4 000AA0 0004+00 1/1 0/0 0/0 .sdata2 @7891 */
-SECTION_SDATA2 static f32 lit_7891 = 30.599998474121094f;
+ if (weekday == 4) {
+ weekday = 3;
+ }
+ }
-/* 804524A4-804524A8 000AA4 0004+00 4/4 0/0 0/0 .sdata2 @7892 */
-SECTION_SDATA2 static f32 lit_7892 = 140.0f;
+ if (weekday != 4) {
+ int texidx;
+ f32 flipX;
+ switch (weekday) {
+ case 0:
+ texidx = 0;
+ flipX = 1.0f;
+ break;
+ case 1:
+ texidx = 1;
+ flipX = 1.0f;
+ break;
+ case 2:
+ texidx = 2;
+ flipX = 1.0f;
+ break;
+ case 3:
+ texidx = 3;
+ flipX = 1.0f;
+ break;
+ case 4:
+ texidx = 0;
+ flipX = 1.0f;
+ break;
+ case 5:
+ texidx = 3;
+ flipX = -1.0f;
+ break;
+ case 6:
+ texidx = 2;
+ flipX = -1.0f;
+ break;
+ case 7:
+ default:
+ texidx = 1;
+ flipX = -1.0f;
+ break;
+ }
-/* 804524A8-804524AC 000AA8 0004+00 1/1 0/0 0/0 .sdata2 @7893 */
-SECTION_SDATA2 static f32 lit_7893 = 0.85f;
+ GXColor color_reg0;
+ color_reg0.r = g_env_light.mFogColor.r;
+ color_reg0.g = g_env_light.mFogColor.g;
+ color_reg0.b = g_env_light.mFogColor.b;
+ color_reg0.a = 0xFF;
-/* 804524AC-804524B0 000AAC 0004+00 2/2 0/0 0/0 .sdata2 @7894 */
-SECTION_SDATA2 static f32 lit_7894 = 60.0f;
+ GXColor color_reg1;
+ color_reg1.r = 0;
+ color_reg1.g = 0;
+ color_reg1.b = 0;
+ color_reg1.a = 0xFF;
-/* 8006444C-8006562C 05ED8C 11E0+00 0/0 1/1 0/0 .text
- * dKyr_drawLenzflare__FPA4_fP4cXyzR8_GXColorPPUc */
-void dKyr_drawLenzflare(Mtx param_0, cXyz* param_1, _GXColor& param_2, u8** param_3) {
- // NONMATCHING
-}
+ Mtx camMtx;
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ if (sun_packet->field_0x28 < 5) {
+ sun_packet->field_0x28 += 2;
+ }
+ sun_packet->field_0x29 = 1;
+ return;
+ }
-/* ############################################################################################## */
-/* 80424950-8042495C 051670 000C+00 3/3 0/0 0/0 .bss @7952 */
-static u8 lit_7952[12];
+ GXTexObj texobj;
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[1], GX_TEXMAP1);
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[texidx + 2], GX_TEXMAP2);
+
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(3);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(3);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD2, GX_TEXMAP2, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_CPREV, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_COPY);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetNumIndStages(0);
+ GXSetCullMode(GX_CULL_NONE);
+
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX2, GX_DIRECT);
+
+ if (draw_moon == true) {
+ cXyz camfwd;
+ f32 dayscale[8] = {
+ 1.0f, 0.83f, 0.6f, 0.78f,
+ 1.0f, 0.78f, 0.6f, 0.83f,
+ };
+
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP200") != 0) {
+ dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &camfwd);
+ f32 cam_distXZ = JMAFastSqrt((camfwd.x * camfwd.x) + (camfwd.z * camfwd.z));
+ f32 cam_theta = atan2f(camfwd.x, camfwd.z);
+ f32 cam_phi = atan2f(camfwd.y, cam_distXZ);
+
+ f32 moon_distXZ = JMAFastSqrt((moon_pos.x * moon_pos.x) + (moon_pos.z * moon_pos.z));
+ f32 moon_theta = atan2f(moon_pos.x, moon_pos.z);
+ f32 moon_phi = atan2f(moon_pos.y, moon_distXZ);
+
+ f32 sp3C = (moon_theta - cam_theta) / -(M_PI * 2);
+ rot = 45.0f + (360.0f * sp3C);
+ }
-/* 8042495C-80424968 05167C 000C+00 0/1 0/0 0/0 .bss @7955 */
-#pragma push
-#pragma force_active on
-static u8 lit_7955[12];
-#pragma pop
+ Mtx rotMtx;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ color_reg0.r = 0;
+ color_reg0.g = 0;
+ color_reg0.b = 0;
+
+ f32 size = 8000.0f;
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == NULL) {
+ size = 11000.0f;
+ } else if (strcmp(dComIfGp_getStartStageName(), "F_SP200") == NULL) {
+ size = 10000.0f;
+ }
-/* 80424968-80424974 051688 000C+00 0/1 0/0 0/0 .bss @7956 */
-#pragma push
-#pragma force_active on
-static u8 lit_7956[12];
-#pragma pop
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0 && dKy_daynight_check()) {
+ size = 1200.0f;
+ dEvent_manager_c* eventMng = &dComIfGp_getEventManager();
+ if (eventMng != NULL) {
+ if (strcmp(eventMng->getRunEventName(), "APPEAR_HAWKER") == 0) {
+ size = 2400.0f;
+ }
+ }
+ }
-/* 80424974-80424980 051694 000C+00 0/1 0/0 0/0 .bss @7957 */
-#pragma push
-#pragma force_active on
-static u8 lit_7957[12];
-#pragma pop
+ color_reg0.a = 255.0f * sun_packet->mMoonAlpha;
+ GXSetTevColor(GX_TEVREG0, color_reg0);
-/* 80424980-804249B0 0516A0 0030+00 0/1 0/0 0/0 .bss add_table$7951 */
-#pragma push
-#pragma force_active on
-static u8 add_table_7951[48];
-#pragma pop
+ for (int i = 0; i < 2; i++) {
+ if (i == 1) {
+ dKyr_set_btitex(&texobj, (ResTIMG*)lenz_packet->mpResBall);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+
+ size *= 2.3f;
+ color_reg0.a = 40.0f * sun_packet->mMoonAlpha;
+
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xFF;
+ color_reg0.b = 0xCF;
+
+ color_reg1.r = 0xC5;
+ color_reg1.g = 0x69;
+ color_reg1.b = 0x23;
+
+ rot = (50.0f * flipX);
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+ }
-/* 80450EF8-80450EFC 0003F8 0004+00 1/1 0/0 0/0 .sbss rot$7919 */
-static u8 rot_7919[4];
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+
+ sp90.x = -size * flipX;
+ sp90.y = size;
+ sp90.z = 0.0f;
+ cMtx_multVec(camMtx, &sp90, &sp84);
+ pos[0].x = spB4.x + sp84.x;
+ pos[0].y = spB4.y + sp84.y;
+ pos[0].z = spB4.z + sp84.z;
+
+ sp90.x = size * flipX;
+ sp90.y = size;
+ sp90.z = 0.0f;
+ cMtx_multVec(camMtx, &sp90, &sp84);
+ pos[1].x = spB4.x + sp84.x;
+ pos[1].y = spB4.y + sp84.y;
+ pos[1].z = spB4.z + sp84.z;
-/* 80450EFC-80450F00 -00001 0004+00 1/1 0/0 0/0 .sbss None */
-/* 80450EFC 0001+00 data_80450EFC None */
-/* 80450EFD 0003+00 data_80450EFD None */
-static u8 struct_80450EFC[4];
+ if (i == 0) {
+ sp90.x = size * flipX;
+ sp90.y = -size;
+ } else {
+ sp90.x = (size * flipX) * dayscale[weekday];
+ sp90.y = -size * dayscale[weekday];
+ }
+ sp90.z = 0.0f;
+ cMtx_multVec(camMtx, &sp90, &sp84);
+ pos[2].x = spB4.x + sp84.x;
+ pos[2].y = spB4.y + sp84.y;
+ pos[2].z = spB4.z + sp84.z;
+
+ sp90.x = -size * flipX;
+ sp90.y = -size;
+ sp90.z = 0.0f;
+ cMtx_multVec(camMtx, &sp90, &sp84);
+ pos[3].x = spB4.x + sp84.x;
+ pos[3].y = spB4.y + sp84.y;
+ pos[3].z = spB4.z + sp84.z;
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ if (i == 0) {
+ GXTexCoord2s16(0, 0);
+ GXTexCoord2s16(0, 0);
+ }
-/* 804524B0-804524B4 000AB0 0004+00 2/2 0/0 0/0 .sdata2 @8211 */
-SECTION_SDATA2 static f32 lit_8211 = 70.0f;
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ if (i == 0) {
+ GXTexCoord2s16(0xFF, 0);
+ GXTexCoord2s16(0xFF, 0);
+ }
-/* 804524B4-804524B8 000AB4 0004+00 1/1 0/0 0/0 .sdata2 @8212 */
-SECTION_SDATA2 static f32 lit_8212 = -1.5f;
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ if (i == 0) {
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXTexCoord2s16(0xFF, 0xFF);
+ }
-/* 804524B8-804524BC 000AB8 0004+00 5/5 0/0 0/0 .sdata2 @8213 */
-SECTION_SDATA2 static f32 lit_8213 = 150.0f;
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ if (i == 0) {
+ GXTexCoord2s16(0, 0xFF);
+ GXTexCoord2s16(0, 0xFF);
+ }
-/* 804524BC-804524C0 000ABC 0004+00 1/1 0/0 0/0 .sdata2 @8214 */
-SECTION_SDATA2 static f32 lit_8214 = 320.0f;
+ GXEnd();
-/* 804524C0-804524C4 000AC0 0004+00 1/1 0/0 0/0 .sdata2 @8215 */
-SECTION_SDATA2 static f32 lit_8215 = 480.0f;
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) {
+ dKyr_draw_rev_moon(drawMtx, tex);
+ }
+ }
+ }
-/* 8006562C-80066048 05FF6C 0A1C+00 0/0 1/1 0/0 .text dKyr_drawRain__FPA4_fPPUc */
-void dKyr_drawRain(Mtx param_0, u8** param_1) {
- // NONMATCHING
+ J3DShape::resetVcdVatCache();
+ }
+ }
}
-/* 80066048-8006653C 060988 04F4+00 0/0 1/1 0/0 .text dKyr_drawSibuki__FPA4_fPPUc */
-// NONMATCHING stack issues, double branch weirdness
-void dKyr_drawSibuki(Mtx param_0, u8** param_1) {
- camera_class* temp_r30 = (camera_class*)dComIfGp_getCamera(0);
- dKankyo_rain_Packet* temp_r29 = g_env_light.mpRainPacket;
+/* 8006444C-8006562C 05ED8C 11E0+00 0/0 1/1 0/0 .text
+ * dKyr_drawLenzflare__FPA4_fP4cXyzR8_GXColorPPUc */
+// NONMATCHING - some issue with sp5C and float to int conversions
+void dKyr_drawLenzflare(Mtx drawMtx, cXyz* ppos, GXColor& param_2, u8** tex) {
+ dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
+ dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
- Mtx sp88;
- cXyz sp7C;
- cXyz sp70;
- cXyz sp64;
- cXyz sp58;
+ static s16 S_rot_work1 = 0;
+ static s16 S_rot_work2 = 0;
- GXTexObj sp38;
+ Mtx camMtx;
+ Mtx rotMtx;
- cXyz sp2C;
- cXyz sp20;
- cXyz sp14;
+ cXyz pos[4];
+ cXyz spFC;
+ cXyz spF0;
- if (g_env_light.mSnowCount == 0 && g_env_light.mCameraInWater == 0 &&
- dComIfGd_getView() != NULL)
- {
- MTXInverse(dComIfGd_getView()->viewMtxNoTrans, sp88);
- if (strcmp(dComIfGp_getStartStageName(), "F_SP113") == 0 &&
- dComIfGp_roomControl_getStayNo() == 1)
- {
- if ((temp_r30->lookat.eye.z < 5100.0f ||
- (temp_r30->lookat.eye.x < -3250.0f && temp_r30->lookat.eye.y < -50.0f)) ||
- (temp_r30->lookat.eye.x < -2700.0f && temp_r30->lookat.eye.z > 15750.0f))
- {
- return;
- }
- }
+ Vec spE4, spD8;
- f32 var_f1 = 255.0f;
- if (temp_r29->mStatus & 1) {
- var_f1 = 0.0f;
- } else if (temp_r29->mStatus & 2) {
- var_f1 = 200.0f;
- }
+ s16 spC = 0;
+ s16 spA = 0;
- cLib_addCalc(&temp_r29->mSibukiAlpha, var_f1, 0.2f, 30.0f, 0.001f);
- dKy_set_eyevect_calc(temp_r30, &sp2C, 7000.0f, 4000.0f);
- dKyr_get_vectle_calc(&temp_r30->lookat.eye, &temp_r30->lookat.center, &sp20);
+ f32 sun_visibility = sun_packet->mVisibility;
+ f32 spAC = 1.0f - lenz_packet->mDistFalloff;
+ f32 spA8 = sun_packet->mVisibility * sun_packet->mVisibility;
- f32 var_f1_2 = 0.0f;
- if (sp20.y > var_f1_2) {
- if (sp20.y < 0.5f) {
- var_f1_2 = 1.0f - (sp20.y / 0.5f);
- }
+ if (!(sun_visibility < 0.1f)) {
+ dKy_set_eyevect_calc2(camera, &spFC, 8000.0f, 8000.0f);
+
+ GXColor color_reg0;
+ color_reg0.r = sun_packet->mColor.r;
+ color_reg0.g = sun_packet->mColor.g;
+ color_reg0.b = sun_packet->mColor.b;
+
+ GXColor color_reg1;
+ color_reg1.r = sun_packet->field_0x74.r;
+ color_reg1.g = sun_packet->field_0x74.g;
+ color_reg1.b = sun_packet->field_0x74.b;
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
} else {
- var_f1_2 = 1.0f;
+ return;
}
- GXColor sp10;
- sp10.r = 0xB4;
- sp10.g = 0xC8;
- sp10.b = 0xC8;
- sp10.a = temp_r29->mSibukiAlpha * var_f1_2;
+ j3dSys.reinitGX();
- dKyr_set_btitex(&sp38, (ResTIMG*)*(++param_1));
+ GXTexObj texobj;
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
GXSetNumChans(0);
- GXSetTevColor(GX_TEVREG0, sp10);
- GXSetTevColor(GX_TEVREG1, sp10);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
GXSetNumTexGens(1);
- GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
GXSetNumTevStages(1);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
- GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+ GXSetFog(GX_FOG_NONE, 0.0f, 1.0f, 0.1f, 1.0f, color_reg0);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
- GXSetZMode(GX_TRUE, GX_GEQUAL, GX_FALSE);
- GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
GXSetNumIndStages(0);
dKr_cullVtx_Set();
- GXLoadPosMtxImm(param_0, 0);
- GXSetCurrentMtx(0);
- f32 var_f30;
- if (dComIfGd_getView() != NULL) {
- var_f30 = dComIfGd_getView()->fovy / 45.0f;
- var_f30 *= var_f30;
- if (var_f30 >= 1.0f) {
- var_f30 = 1.0f;
+ MTXRotRad(rotMtx, 'Z', 0.0f);
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ if (sun_packet->field_0x6c > 0.0f) {
+ spC = S_rot_work1 - 0x7F6;
+ spA = S_rot_work2 + 0x416B;
+ S_rot_work1 += 8;
+ S_rot_work2 -= 14;
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ }
+
+ GXSetNumChans(1);
+ GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
+ GXSetNumTexGens(0);
+ GXSetNumTevStages(1);
+
+ color_reg0.a = sun_packet->field_0x6c * (15.0f * (spA8 * spA8 * spA8));
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetClipMode(GX_CLIP_ENABLE);
+ GXSetNumIndStages(0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ for (int i = 0; i < 16; i++) {
+ f32 spA0;
+ f32 sp9C;
+ f32 sp98;
+ f32 sp94;
+ f32 sp90;
+ f32 sp8C;
+ f32 sp88;
+ f32 sp84;
+ f32 sp80;
+ f32 sp7C;
+ f32 sp78;
+ f32 sp74;
+ f32 sp70;
+ f32 sp6C;
+ f32 sp68;
+ f32 sp64;
+
+ if (i & 1) {
+ sp78 = spC;
+ } else {
+ sp78 = spA;
+ }
+
+ sp6C = 0.4f + (0.6f * (sun_visibility * (spAC * spAC)));
+ sp64 = 300.0f;
+ sp68 = cM_ssin(34.0f * sp78);
+ if (sp68 < 0.0f) {
+ sp68 = -sp68;
+ }
+
+ sp74 = 1000.0f * (0.5f + sp68);
+
+ spA0 = sp64 * sp6C * cM_ssin(sp78 + sp74);
+ sp9C = sp64 * sp6C * cM_scos(sp78 + sp74);
+ sp90 = sp64 * sp6C * cM_ssin(sp78 - sp74);
+ sp8C = sp64 * sp6C * cM_scos(sp78 - sp74);
+
+ sp70 = (0.6f + (0.4f * sp68)) * (160.0f * sp6C * (2.9f + spAC));
+ sp70 *= 1.5f * sun_visibility;
+
+ if (i & 3) {
+ sp70 *= 0.86f;
+ if (i & 2) {
+ sp70 *= 2.46f;
+ }
+ }
+
+ sp98 = sp70 * cM_ssin(sp78);
+ sp94 = sp70 * cM_scos(sp78);
+ spC += 0x1000;
+ spA += 0x1C71;
+
+ spE4.x = sp98;
+ spE4.y = sp94;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ spF0.x = ppos->x + spD8.x;
+ spF0.y = ppos->y + spD8.y;
+ spF0.z = ppos->z + spD8.z;
+
+ sp7C = spFC.abs(spF0);
+ if (sp7C < lenz_packet->field_0x8c) {
+ lenz_packet->field_0x8c = sp7C;
+ } else if (sp7C > lenz_packet->field_0x90) {
+ lenz_packet->field_0x90 = sp7C;
+ }
+
+ sp88 = lenz_packet->field_0x88 - lenz_packet->field_0x84;
+ if (sp88 > 0.0f) {
+ sp84 = 1.0f - ((sp7C - lenz_packet->field_0x84) / sp88);
+ } else {
+ sp84 = 1.0f;
+ }
+
+ switch (i & 3) {
+ case 0:
+ sp80 = 0.1f;
+ break;
+ case 1:
+ sp80 = 1.1f;
+ break;
+ case 2:
+ sp80 = 0.2f;
+ break;
+ case 3:
+ sp80 = 0.4f;
+ break;
+ }
+
+ f32 spC4 = spA8;
+ sp98 *= sun_visibility * (spC4 + sp80);
+ sp94 *= sun_visibility * (spC4 + sp80);
+
+ spE4.x = spA0;
+ spE4.y = sp9C;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ pos[0].x = sun_packet->mPos[0].x + spD8.x;
+ pos[0].y = sun_packet->mPos[0].y + spD8.y;
+ pos[0].z = sun_packet->mPos[0].z + spD8.z;
+
+ spE4.x = sp98;
+ spE4.y = sp94;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ pos[1].x = sun_packet->mPos[0].x + spD8.x;
+ pos[1].y = sun_packet->mPos[0].y + spD8.y;
+ pos[1].z = sun_packet->mPos[0].z + spD8.z;
+
+ spE4.x = sp90;
+ spE4.y = sp8C;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ pos[2].x = sun_packet->mPos[0].x + spD8.x;
+ pos[2].y = sun_packet->mPos[0].y + spD8.y;
+ pos[2].z = sun_packet->mPos[0].z + spD8.z;
+
+ GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXEnd();
}
- } else {
- var_f30 = 0.2f;
}
- for (int i = 0; i < g_env_light.mRainCount >> 1; i++) {
- f32 temp_f27 = var_f30 * (15.0f + cM_rndF(10.0f));
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetFog(GX_FOG_NONE, 0.0f, 1.0f, 0.1f, 1.0f, color_reg0);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetNumIndStages(0);
+ dKr_cullVtx_Set();
+
+ static const f32 scale_dat[] = {
+ 8000.0f, 10500.0f, 3.2f, 1.8f, 1.8f, 6.2f, 1.2f, 4.0f
+ };
+
+ static const GXColor col_dat[] = {
+ {0xB4, 0xC8, 0xFF, 0xFF},
+ {0xC8, 0xC8, 0xFF, 0x50},
+ {0xFF, 0x8C, 0x78, 0x5A},
+ {0xFF, 0xB4, 0x78, 0x64},
+ {0xB4, 0xB4, 0x78, 0x55},
+ {0xB4, 0xC8, 0x64, 0x5A},
+ {0xDC, 0xFF, 0xB4, 0x6E},
+ {0xC8, 0xDC, 0xFF, 0x5A},
+ };
+
+ for (int i = 0; i < 8; i++) {
+ if (!g_env_light.mpSunLenzPacket->mDrawLenzInSky || i == 0) {
+ f32 spC4 = spA8;
+ if (i < 2) {
+ if (i == 0) {
+ color_reg0.a = sun_packet->field_0x6c * (0.8f * (spC4 * col_dat[i].a));
+ } else {
+ color_reg0.a = sun_packet->field_0x6c * (0.2f * (spC4 * col_dat[i].a));
+ }
+ } else if (i == 2) {
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+ GXColorS10 spD0;
+ spD0.r = 0.5f * sun_packet->mColor.r;
+ spD0.g = 0.5f * sun_packet->mColor.g;
+ spD0.b = 0.5f * sun_packet->mColor.b;
+
+ if (spD0.r > 0xFF) {
+ spD0.r = 0xFF;
+ }
+ if (spD0.g > 0xFF) {
+ spD0.g = 0xFF;
+ }
+ if (spD0.b > 0xFF) {
+ spD0.b = 0xFF;
+ }
+
+ GXColor sp60;
+ sp60.r = 0xFF;
+ sp60.b = 0xFF;
+ sp60.a = 0xFF;
- f32 temp_f28 = cM_rndFX(3600.0f);
- f32 temp_f29 = cM_rndFX(1500.0f);
- f32 temp_f1 = cM_rndFX(3600.0f);
+ f32 sp5C = 0.12f;
+ color_reg0.r = ((f32)spD0.r * (1.0f - sp5C)) + ((f32)sp60.r * sp5C);
+ color_reg0.g = ((f32)spD0.g * (1.0f - sp5C)) + ((f32)sp60.g * sp5C);
+ color_reg0.b = ((f32)spD0.b * (1.0f - sp5C)) + ((f32)sp60.b * sp5C);
- sp14.x = sp2C.x + temp_f28;
- sp14.y = sp2C.y + temp_f29;
- sp14.z = sp2C.z + temp_f1;
+ spD0.r = 0.5f * sun_packet->field_0x74.r;
+ spD0.g = 0.5f * sun_packet->field_0x74.g;
+ spD0.b = 0.5f * sun_packet->field_0x74.b;
- sp58.x = sp14.x - temp_f27;
- sp58.y = sp14.y;
- sp58.z = sp14.z - temp_f27;
+ if (spD0.r > 0xFF) {
+ spD0.r = 0xFF;
+ }
+ if (spD0.g > 0xFF) {
+ spD0.g = 0xFF;
+ }
+ if (spD0.b > 0xFF) {
+ spD0.b = 0xFF;
+ }
- sp64.x = sp14.x + temp_f27;
- sp64.y = sp14.y;
- sp64.z = sp14.z - temp_f27;
+ color_reg1.r = spD0.r;
+ color_reg1.g = spD0.g;
+ color_reg1.b = spD0.b;
- sp70.x = sp14.x + temp_f27;
- sp70.y = sp14.y;
- sp70.z = sp14.z + temp_f27;
+ f32 sp58 = 1.0f - (spC4 * spAC);
+ sp58 = 1.0f - (sp58 * sp58 * sp58);
+ color_reg0.a = 140.0f * sp58;
+ color_reg1.a = 140.0f * sp58;
+ } else {
+ color_reg0.r = col_dat[i].r;
+ color_reg0.g = col_dat[i].g;
+ color_reg0.b = col_dat[i].b;
- sp7C.x = sp14.x - temp_f27;
- sp7C.y = sp14.y;
- sp7C.z = sp14.z + temp_f27;
+ color_reg1.r = col_dat[i].r;
+ color_reg1.g = col_dat[i].g;
+ color_reg1.b = col_dat[i].b;
- GXBegin(GX_QUADS, GX_VTXFMT0, 4);
- GXPosition3f32(sp58.x, sp58.y, sp58.z);
- GXTexCoord2s16(0, 0);
+ color_reg0.a = spAC * (0.5f * (250.0f * spC4) * lenz_packet->mDistFalloff);
+ color_reg1.a = spAC * (0.5f * (250.0f * spC4) * lenz_packet->mDistFalloff);
+ }
- GXPosition3f32(sp64.x, sp64.y, sp64.z);
- GXTexCoord2s16(0x1FF, 0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
- GXPosition3f32(sp70.x, sp70.y, sp70.z);
- GXTexCoord2s16(0x1FF, 0x1FF);
+ f32 var_f31;
+ if (i < 2) {
+ var_f31 = (0.04f + (0.075f * sun_visibility)) * scale_dat[i];
+ if (i == 0) {
+ var_f31 += 0.2f * (sun_visibility * (scale_dat[i] - 5000.0f)) * (spAC * spAC);
+ } else {
+ var_f31 += 0.2f * (sun_visibility * scale_dat[i]) * (spAC * spAC);
+ }
+ var_f31 = 0.85f * var_f31;
+ } else if (i == 2) {
+ var_f31 = 4000.0f;
+ } else {
+ var_f31 = 60.0f * (sun_visibility * scale_dat[i]) * (1.0f - (lenz_packet->mDistFalloff * lenz_packet->mDistFalloff * lenz_packet->mDistFalloff));
+ }
- GXPosition3f32(sp7C.x, sp7C.y, sp7C.z);
- GXTexCoord2s16(0, 0x1FF);
- GXEnd();
+ if (i == 1) {
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[2]);
+ } else if (i == 2) {
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[3]);
+ } else {
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
+ }
+
+ spE4.x = -var_f31;
+ spE4.y = var_f31;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ pos[0].x = spD8.x + ppos[i].x;
+ pos[0].y = spD8.y + ppos[i].y;
+ pos[0].z = spD8.z + ppos[i].z;
+
+ spE4.x = var_f31;
+ spE4.y = var_f31;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ pos[1].x = spD8.x + ppos[i].x;
+ pos[1].y = spD8.y + ppos[i].y;
+ pos[1].z = spD8.z + ppos[i].z;
+
+ spE4.x = var_f31;
+ spE4.y = -var_f31;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ pos[2].x = spD8.x + ppos[i].x;
+ pos[2].y = spD8.y + ppos[i].y;
+ pos[2].z = spD8.z + ppos[i].z;
+
+ spE4.x = -var_f31;
+ spE4.y = -var_f31;
+ spE4.z = 0.0f;
+ cMtx_multVec(camMtx, &spE4, &spD8);
+ pos[3].x = spD8.x + ppos[i].x;
+ pos[3].y = spD8.y + ppos[i].y;
+ pos[3].z = spD8.z + ppos[i].z;
+
+ s16 sp8;
+ if (i == 1) {
+ sp8 = 0x1FF;
+ } else {
+ sp8 = 0xFF;
+ }
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(sp8, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(sp8, sp8);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, sp8);
+ GXEnd();
+ }
}
- GXSetClipMode(GX_CLIP_ENABLE);
+ dKy_GxFog_set();
J3DShape::resetVcdVatCache();
}
}
+/* 8006562C-80066048 05FF6C 0A1C+00 0/0 1/1 0/0 .text dKyr_drawRain__FPA4_fPPUc */
+void dKyr_drawRain(Mtx drawMtx, u8** tex) {
+ dKankyo_rain_Packet* rain_packet = g_env_light.mpRainPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ cXyz wind_vecpow = dKyw_get_wind_vecpow();
+
+ static u32 rot = 0;
+
+ Mtx camMtx;
+ cXyz pos[4];
+
+ Vec sp54, sp48;
+ cXyz sp3C;
+ cXyz sp30;
+
+ if (g_env_light.mSnowCount == 0 && !g_env_light.mCameraInWater) {
+ sp30.x = 0.0f;
+ sp30.y = -2.0f;
+ sp30.z = 0.0f;
+
+ if (rain_packet->mRainCount != 0) {
+ GXColor color_reg0;
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xFF;
+ color_reg0.b = 0xFF;
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
+
+ GXTexObj texobj;
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetNumIndStages(0);
+ dKr_cullVtx_Set();
+
+ Mtx rotMtx;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ for (int i = 0; i < rain_packet->mRainCount; i++) {
+ f32 temp_f30 = -1.0f;
+
+ if (!(rain_packet->mRainEff[i].mAlpha <= 0.0f)) {
+ if (dKy_darkworld_check()) {
+ color_reg0.a = 34.0f * rain_packet->mRainEff[i].mAlpha;
+ } else if (strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0) {
+ color_reg0.a = 9.0f * rain_packet->mRainEff[i].mAlpha;
+ } else {
+ color_reg0.a = 20.0f * rain_packet->mRainEff[i].mAlpha;
+ }
+
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ sp3C.x = rain_packet->mRainEff[i].mBasePos.x + rain_packet->mRainEff[i].mPosition.x;
+ sp3C.y = rain_packet->mRainEff[i].mBasePos.y + rain_packet->mRainEff[i].mPosition.y;
+ sp3C.z = rain_packet->mRainEff[i].mBasePos.z + rain_packet->mRainEff[i].mPosition.z;
+
+ f32 dist = 0.1f + (sp3C.abs(camera->lookat.eye) / 1500.0f);
+ if (dist > 1.0f) {
+ dist = 1.0f;
+ }
+
+ f32 temp_f31 = 1.5f;
+ cXyz tilt;
+ f32 speed = 5.0f + (70.0f * dist);
+
+ tilt.x = speed * (sp30.x + (0.08f * (i & 7)) + ((10.0f * (rain_packet->mCenterDelta.x * rain_packet->mCenterDeltaMul)) + (wind_vecpow.x * (1.0f + cM_rndF(0.25f)))));
+ tilt.y = speed * (sp30.y + ((rain_packet->mCenterDelta.y * rain_packet->mCenterDeltaMul) + (wind_vecpow.y * (1.0f + cM_rndF(0.25f)))));
+ tilt.z = speed * (sp30.z + (0.08f * (i & 3)) + ((10.0f * (rain_packet->mCenterDelta.z * rain_packet->mCenterDeltaMul)) + (wind_vecpow.z * (1.0f + cM_rndF(0.25f)))));
+
+ sp54.x = -temp_f31 * temp_f30;
+ sp54.y = 0.0f;
+ sp54.z = 0.0f;
+ cMtx_multVec(camMtx, &sp54, &sp48);
+ pos[0].x = (sp3C.x + sp48.x) - tilt.x;
+ pos[0].y = (sp3C.y + sp48.y) - tilt.y;
+ pos[0].z = (sp3C.z + sp48.z) - tilt.z;
+
+ sp54.x = temp_f31 * temp_f30;
+ sp54.y = 0.0f;
+ sp54.z = 0.0f;
+ cMtx_multVec(camMtx, &sp54, &sp48);
+ pos[1].x = (sp3C.x + sp48.x) - tilt.x;
+ pos[1].y = (sp3C.y + sp48.y) - tilt.y;
+ pos[1].z = (sp3C.z + sp48.z) - tilt.z;
+
+ sp54.x = temp_f31 * temp_f30;
+ sp54.y = 0.0f;
+ sp54.z = 0.0f;
+ cMtx_multVec(camMtx, &sp54, &sp48);
+ pos[2].x = sp3C.x + sp48.x;
+ pos[2].y = sp3C.y + sp48.y;
+ pos[2].z = sp3C.z + sp48.z;
+
+ sp54.x = -temp_f31 * temp_f30;
+ sp54.y = 0.0f;
+ sp54.z = 0.0f;
+ cMtx_multVec(camMtx, &sp54, &sp48);
+ pos[3].x = sp3C.x + sp48.x;
+ pos[3].y = sp3C.y + sp48.y;
+ pos[3].z = sp3C.z + sp48.z;
+
+ for (int j = 0; j < 4; j++) {
+ static cXyz add_table[] = {
+ cXyz(150.0f, 0.0f, 0.0f),
+ cXyz(0.0f, 150.0f, 150.0f),
+ cXyz(150.0f, 320.0f, 150.0f),
+ cXyz(45.0f, 480.0f, 45.0f),
+ };
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x + add_table[j].x, pos[0].y + add_table[j].y, pos[0].z + add_table[j].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x + add_table[j].x, pos[1].y + add_table[j].y, pos[1].z + add_table[j].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x + add_table[j].x, pos[2].y + add_table[j].y, pos[2].z + add_table[j].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x + add_table[j].x, pos[3].y + add_table[j].y, pos[3].z + add_table[j].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
+ }
+ }
+}
+
+/* 80066048-8006653C 060988 04F4+00 0/0 1/1 0/0 .text dKyr_drawSibuki__FPA4_fPPUc */
+void dKyr_drawSibuki(Mtx drawMtx, u8** tex) {
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ dKankyo_rain_Packet* rain_packet = g_env_light.mpRainPacket;
+ cXyz eyevect;
+ cXyz sp38;
+
+ if (g_env_light.mSnowCount == 0 && g_env_light.mCameraInWater == 0 && dComIfGd_getView() != NULL) {
+ Mtx camMtx;
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
+
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP113") == 0 && dComIfGp_roomControl_getStayNo() == 1) {
+ if ((camera->lookat.eye.z < 5100.0f || (camera->lookat.eye.x < -3250.0f && camera->lookat.eye.y < -50.0f)) ||
+ (camera->lookat.eye.x < -2700.0f && camera->lookat.eye.z > 15750.0f))
+ {
+ return;
+ }
+ }
+
+ f32 alpha = 255.0f;
+ if (rain_packet->mStatus & 1) {
+ alpha = 0.0f;
+ } else if (rain_packet->mStatus & 2) {
+ alpha = 200.0f;
+ }
+
+ cLib_addCalc(&rain_packet->mSibukiAlpha, alpha, 0.2f, 30.0f, 0.001f);
+ dKy_set_eyevect_calc(camera, &eyevect, 7000.0f, 4000.0f);
+ cXyz camdir;
+ dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &camdir);
+
+ f32 alphaFade = 0.0f;
+ if (camdir.y > alphaFade) {
+ if (camdir.y < 0.5f) {
+ alphaFade = 1.0f - (camdir.y / 0.5f);
+ } else {
+ alphaFade = 0.0f;
+ }
+ } else {
+ alphaFade = 1.0f;
+ }
+
+ GXColor color;
+ color.r = 0xB4;
+ color.g = 0xC8;
+ color.b = 0xC8;
+ color.a = rain_packet->mSibukiAlpha * alphaFade;
+
+ GXTexObj texobj;
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[1]);
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color);
+ GXSetTevColor(GX_TEVREG1, color);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZMode(GX_TRUE, GX_GEQUAL, GX_FALSE);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetNumIndStages(0);
+ dKr_cullVtx_Set();
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ f32 scale;
+ if (dComIfGd_getView() != NULL) {
+ scale = dComIfGd_getView()->fovy / 45.0f;
+ scale *= scale;
+ if (scale >= 1.0f) {
+ scale = 1.0f;
+ }
+ } else {
+ scale = 0.2f;
+ }
+
+ for (int i = 0; i < g_env_light.mRainCount >> 1; i++) {
+ cXyz pos[4];
+ f32 size = scale * (15.0f + cM_rndF(10.0f));
+ cXyz sp20;
+
+ f32 local_x = cM_rndFX(3600.0f);
+ f32 local_y = cM_rndFX(1500.0f);
+ f32 local_z = cM_rndFX(3600.0f);
+
+ sp20.x = eyevect.x + local_x;
+ sp20.y = eyevect.y + local_y;
+ sp20.z = eyevect.z + local_z;
+
+ pos[0].x = sp20.x - size;
+ pos[0].y = sp20.y;
+ pos[0].z = sp20.z - size;
+
+ pos[1].x = sp20.x + size;
+ pos[1].y = sp20.y;
+ pos[1].z = sp20.z - size;
+
+ pos[2].x = sp20.x + size;
+ pos[2].y = sp20.y;
+ pos[2].z = sp20.z + size;
+
+ pos[3].x = sp20.x - size;
+ pos[3].y = sp20.y;
+ pos[3].z = sp20.z + size;
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0x1FF, 0);
+
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0x1FF, 0x1FF);
+
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0x1FF);
+ GXEnd();
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
+}
+
/* 8006653C-80067488 060E7C 0F4C+00 0/0 1/1 0/0 .text dKyr_drawHousi__FPA4_fPPUc */
-// NONMATCHING mostly match, weird double branch thing
-void dKyr_drawHousi(Mtx param_0, u8** param_1) {
- dKankyo_housi_Packet* housi_p = g_env_light.mpHousiPacket;
+void dKyr_drawHousi(Mtx drawMtx, u8** tex) {
+ dKankyo_housi_Packet* housi_packet = g_env_light.mpHousiPacket;
static f32 rot = 0.0f;
- Mtx sp1BC;
- Mtx sp18C;
- cXyz sp15C[4];
+ Mtx camMtx;
+ Mtx rotMtx;
+ cXyz pos[4];
GXTexObj spDC;
cXyz spD0;
Vec spC4;
Vec spB8;
bool var_r28 = 0;
- if (housi_p->field_0x5dec != 0) {
+ if (housi_packet->field_0x5dec != 0) {
if (strcmp(dComIfGp_getStartStageName(), "D_MN08") == 0) {
var_r28 = 1;
}
@@ -2241,35 +3419,38 @@ void dKyr_drawHousi(Mtx param_0, u8** param_1) {
return;
}
- GXColor sp24;
- sp24.r = 0xE5;
- sp24.g = 0xFF;
- sp24.b = 0xC8;
- sp24.a = var_f25;
+ GXColor color_reg0;
+ color_reg0.r = 0xE5;
+ color_reg0.g = 0xFF;
+ color_reg0.b = 0xC8;
+ color_reg0.a = var_f25;
- GXColor sp20;
- sp20.r = 0x43;
- sp20.g = 0xD2;
- sp20.b = 0xCA;
- sp20.a = 0xFF;
+ GXColor color_reg1;
+ color_reg1.r = 0x43;
+ color_reg1.g = 0xD2;
+ color_reg1.b = 0xCA;
+ color_reg1.a = 0xFF;
if (dKy_darkworld_check() == 1 || var_r28 == 1) {
- sp24.r = 0;
- sp24.g = 0;
- sp24.b = 0;
- sp24.a = var_f25;
- sp20.r = 0;
- sp20.g = 0;
- sp20.b = 0;
- sp20.a = 0xFF;
+ color_reg0.r = 0;
+ color_reg0.g = 0;
+ color_reg0.b = 0;
+ color_reg0.a = var_f25;
+
+ color_reg1.r = 0;
+ color_reg1.g = 0;
+ color_reg1.b = 0;
+ color_reg1.a = 0xFF;
+
var_f25 = 255.0f;
} else if (g_env_light.field_0xea9 == 1) {
- sp24.r = 0xFF;
- sp24.g = 0xFF;
- sp24.b = 0xFF;
- sp20.r = 0;
- sp20.g = 0x50;
- sp20.b = 0x50;
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xFF;
+ color_reg0.b = 0xFF;
+
+ color_reg1.r = 0;
+ color_reg1.g = 0x50;
+ color_reg1.b = 0x50;
} else if (g_env_light.field_0xea9 == 2 &&
(g_env_light.mPondSeason == 1 || g_env_light.mPondSeason == 3))
{
@@ -2281,653 +3462,1720 @@ void dKyr_drawHousi(Mtx param_0, u8** param_1) {
sp1C.r = 0x78;
sp1C.g = 0x0A;
sp1C.b = 0x14;
+
sp18.r = 0x14;
sp18.g = 0x3C;
sp18.b = 0x00;
}
- dKy_ParticleColor_get_bg(&cam_p->lookat.eye, NULL, &sp20, &sp24, &sp1C, &sp18,
+ dKy_ParticleColor_get_bg(&cam_p->lookat.eye, NULL, &color_reg1, &color_reg0, &sp1C, &sp18,
0.0f);
var_f25 = 255.0f;
}
if (dComIfGd_getView() != NULL) {
- f32 temp_f26 = 1.2f;
- f32 temp_f24 = 6.5f;
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
- // MTXInverse(dComIfGd_getView()->viewMtxNoTrans, sp1BC);
- // wtf is going on here
- switch (MTXInverse(dComIfGd_getView()->viewMtxNoTrans, sp1BC)) {
- case 0:
- return;
+ f32 temp_f26 = 1.2f;
+ f32 temp_f24 = 6.5f;
+
+ for (int i = 0; i < 1; i++) {
+ dKyr_set_btitex(&spDC, (ResTIMG*)*tex);
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
+ GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
+ GX_TEVPREV);
+
+ if (strcmp(dComIfGp_getStartStageName(), "F_NW01") == 0 ||
+ g_env_light.field_0xea9 == 1)
+ {
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+ } else {
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA,
+ GX_LO_SET);
}
- for (int i = 0; i < 1; i++) {
- dKyr_set_btitex(&spDC, (ResTIMG*)*param_1);
- GXSetNumChans(0);
- GXSetTevColor(GX_TEVREG0, sp24);
- GXSetTevColor(GX_TEVREG1, sp20);
- GXSetNumTexGens(1);
- GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D);
- GXSetNumTevStages(1);
- GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
- GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
- GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
- GX_TEVPREV);
- GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
- GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
- GX_TEVPREV);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
- if (strcmp(dComIfGp_getStartStageName(), "F_NW01") == 0 ||
- g_env_light.field_0xea9 == 1)
- {
- GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
- } else {
- GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA,
- GX_LO_SET);
- }
+ if (i == 1) {
+ GXSetZMode(GX_TRUE, GX_GEQUAL, GX_FALSE);
+ } else {
+ GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
+ }
- GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetNumIndStages(0);
+ dKr_cullVtx_Set();
- if (i == 1) {
- GXSetZMode(GX_TRUE, GX_GEQUAL, GX_FALSE);
- } else {
- GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
- }
+ rot += 1.2f;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
- GXSetClipMode(GX_CLIP_DISABLE);
- GXSetNumIndStages(0);
- dKr_cullVtx_Set();
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
- rot += 1.2f;
- MTXRotRad(sp18C, 'Z', DEG_TO_RAD(rot));
- MTXConcat(sp1BC, sp18C, sp1BC);
-
- GXLoadPosMtxImm(param_0, GX_PNMTX0);
- GXSetCurrentMtx(0);
-
- for (int j = 0; j < housi_p->field_0x5dec; j++) {
- fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
-
- spD0.x =
- housi_p->mHousiEff[j].mBasePos.x + housi_p->mHousiEff[j].mPosition.x;
- spD0.y =
- housi_p->mHousiEff[j].mBasePos.y + housi_p->mHousiEff[j].mPosition.y;
- spD0.z =
- housi_p->mHousiEff[j].mBasePos.z + housi_p->mHousiEff[j].mPosition.z;
-
- if (i == 1 && j == 0) {
- sp24.r = 0;
- sp24.g = 0;
- sp24.b = 0;
- sp20.r = 0;
- sp20.g = 0;
- sp20.b = 0;
- GXSetTevColor(GX_TEVREG1, sp20);
- }
+ for (int j = 0; j < housi_packet->field_0x5dec; j++) {
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
- if (i == 1) {
- f32 temp_f4 = 100.0f;
- if (!(spD0.y > player_p->current.pos.y + temp_f4)) {
- if (!(spD0.y < player_p->current.pos.y - 20.0f)) {
- if (!(housi_p->mHousiEff[j].mAlpha <= 0.0f)) {
- sp24.a =
- housi_p->mHousiEff[j].mAlpha * 40.0f *
- (1.0f - ((spD0.y - player_p->current.pos.y) / 100.0f));
- spD0.y = player_p->current.pos.y - 20.0f;
- goto block_14; // probably fake match
- }
+ spD0.x =
+ housi_packet->mHousiEff[j].mBasePos.x + housi_packet->mHousiEff[j].mPosition.x;
+ spD0.y =
+ housi_packet->mHousiEff[j].mBasePos.y + housi_packet->mHousiEff[j].mPosition.y;
+ spD0.z =
+ housi_packet->mHousiEff[j].mBasePos.z + housi_packet->mHousiEff[j].mPosition.z;
+
+ if (i == 1 && j == 0) {
+ color_reg0.r = 0;
+ color_reg0.g = 0;
+ color_reg0.b = 0;
+
+ color_reg1.r = 0;
+ color_reg1.g = 0;
+ color_reg1.b = 0;
+
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ }
+
+ if (i == 1) {
+ f32 temp_f4 = 100.0f;
+ if (!(spD0.y > player->current.pos.y + temp_f4)) {
+ if (!(spD0.y < player->current.pos.y - 20.0f)) {
+ if (!(housi_packet->mHousiEff[j].mAlpha <= 0.0f)) {
+ color_reg0.a =
+ housi_packet->mHousiEff[j].mAlpha * 40.0f *
+ (1.0f - ((spD0.y - player->current.pos.y) / 100.0f));
+ spD0.y = player->current.pos.y - 20.0f;
+ goto block_14; // probably fake match
}
}
- } else {
- sp24.a = housi_p->mHousiEff[j].mAlpha * var_f25;
+ }
+ } else {
+ color_reg0.a = housi_packet->mHousiEff[j].mAlpha * var_f25;
- block_14:
- GXLoadTexObj(&spDC, GX_TEXMAP0);
- GXSetTevColor(GX_TEVREG0, sp24);
+ block_14:
+ GXLoadTexObj(&spDC, GX_TEXMAP0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
- f32 var_f27 = housi_p->mHousiEff[j].field_0x48 * 9.0f;
- if (g_env_light.field_0xea9 == 1) {
- var_f27 = housi_p->mHousiEff[j].field_0x48 * 18.0f;
- }
+ f32 var_f27 = housi_packet->mHousiEff[j].field_0x48 * 9.0f;
+ if (g_env_light.field_0xea9 == 1) {
+ var_f27 = housi_packet->mHousiEff[j].field_0x48 * 18.0f;
+ }
- f32 temp_f28 =
- (var_f27 * 0.2f) * cM_fsin(housi_p->mHousiEff[j].mScale.x * 5.0f);
- f32 temp_f30 =
- (var_f27 * 0.2f) * cM_fcos(housi_p->mHousiEff[j].mScale.y * 6.0f);
-
- if (dKy_darkworld_check() == 1 || var_r28 == 1) {
- cXyz sp7C[] = {
- cXyz(-1.0f, -0.5f, 0.0f),
- cXyz(-1.0f, 1.5f, 0.0f),
- cXyz(1.0f, 1.5f, 0.0f),
- cXyz(1.0f, -0.5f, 0.0f),
- };
-
- for (int k = 0; k < 4; k++) {
- cXyz spAC;
- cXyz spA0;
-
- f32 temp_f26_2 =
- cM_ssin((f32)j * 123.0f + (f32)(g_Counter.mCounter0 * 600));
-
- cXyz* temp_r3 = &sp7C[k];
- spAC.x = temp_r3->x * (8.0f * (1.0f + (temp_f26_2 * 0.3f)));
- spAC.y = temp_r3->y * (8.0f * (1.0f + (temp_f26_2 * 0.3f)));
- spAC.z = temp_r3->z * (8.0f * (1.0f + (temp_f26_2 * 0.3f)));
-
- mDoMtx_stack_c::transS(spD0.x, spD0.y, spD0.z);
- mDoMtx_stack_c::YrotM(temp_f26_2 * 65536.0f);
- mDoMtx_stack_c::multVec(&spAC, &spA0);
- sp15C[k] = spA0;
+ f32 temp_f28 =
+ (var_f27 * 0.2f) * cM_fsin(housi_packet->mHousiEff[j].mScale.x * 5.0f);
+ f32 temp_f30 =
+ (var_f27 * 0.2f) * cM_fcos(housi_packet->mHousiEff[j].mScale.y * 6.0f);
+
+ if (dKy_darkworld_check() == 1 || var_r28 == 1) {
+ cXyz sp7C[] = {
+ cXyz(-1.0f, -0.5f, 0.0f),
+ cXyz(-1.0f, 1.5f, 0.0f),
+ cXyz(1.0f, 1.5f, 0.0f),
+ cXyz(1.0f, -0.5f, 0.0f),
+ };
+
+ for (int k = 0; k < 4; k++) {
+ cXyz spAC;
+ cXyz spA0;
+
+ f32 temp_f26_2 = cM_ssin((f32)j * 123.0f + (f32)(g_Counter.mCounter0 * 600));
+
+ cXyz* temp_r3 = &sp7C[k];
+ spAC.x = temp_r3->x * (8.0f * (1.0f + (temp_f26_2 * 0.3f)));
+ spAC.y = temp_r3->y * (8.0f * (1.0f + (temp_f26_2 * 0.3f)));
+ spAC.z = temp_r3->z * (8.0f * (1.0f + (temp_f26_2 * 0.3f)));
+
+ mDoMtx_stack_c::transS(spD0.x, spD0.y, spD0.z);
+ mDoMtx_stack_c::YrotM(temp_f26_2 * 65536.0f);
+ mDoMtx_stack_c::multVec(&spAC, &spA0);
+ pos[k] = spA0;
+ }
+ } else if (g_env_light.field_0xea9 == 2) {
+ cXyz sp4C[] = {
+ cXyz(-1.0f, -0.9f, 0.0f),
+ cXyz(-1.0f, 1.1f, 0.0f),
+ cXyz(1.0f, 1.1f, 0.0f),
+ cXyz(1.0f, -0.9f, 0.0f),
+ };
+
+ for (int k = 0; k < 4; k++) {
+ cXyz sp94;
+ cXyz sp88;
+
+ f32 var_f24;
+ if (housi_packet->mHousiEff[j].mStatus == 1 ||
+ housi_packet->mHousiEff[j].mStatus == 3)
+ {
+ var_f24 =
+ 0.2f +
+ (housi_packet->mHousiEff[j].field_0x34 *
+ (fabsf(cM_ssin((f32)j * 213.0f +
+ (f32)(g_Counter.mCounter0 * 330))) *
+ 0.8f));
+ } else {
+ var_f24 = cM_ssin((f32)j * 123.0f +
+ (f32)(g_Counter.mCounter0 * 80));
}
- } else if (g_env_light.field_0xea9 == 2) {
- cXyz sp4C[] = {
- cXyz(-1.0f, -0.9f, 0.0f),
- cXyz(-1.0f, 1.1f, 0.0f),
- cXyz(1.0f, 1.1f, 0.0f),
- cXyz(1.0f, -0.9f, 0.0f),
- };
-
- for (int k = 0; k < 4; k++) {
- cXyz sp94;
- cXyz sp88;
-
- f32 var_f24;
- if (housi_p->mHousiEff[j].mStatus == 1 ||
- housi_p->mHousiEff[j].mStatus == 3)
- {
+
+ f32 var_f2;
+ if (g_env_light.mPondSeason == 3) {
+ var_f2 = 15.0f;
+
+ if (housi_packet->mHousiEff[j].mStatus == 1) {
var_f24 =
- 0.2f +
- (housi_p->mHousiEff[j].field_0x34 *
- (fabsf(cM_ssin((f32)j * 213.0f +
- (f32)(g_Counter.mCounter0 * 330))) *
- 0.8f));
+ housi_packet->mHousiEff[j].field_0x34 *
+ fabsf(cM_ssin((f32)j * 250.0f +
+ (f32)(g_Counter.mCounter0 * 88)));
} else {
- var_f24 = cM_ssin((f32)j * 123.0f +
- (f32)(g_Counter.mCounter0 * 80));
+ var_f24 = cM_ssin((f32)j * 685.0f +
+ (f32)(g_Counter.mCounter0 * 20));
}
+ } else {
+ var_f2 = 6.0f;
+ }
- f32 var_f2;
- if (g_env_light.mPondSeason == 3) {
- var_f2 = 15.0f;
-
- if (housi_p->mHousiEff[j].mStatus == 1) {
- var_f24 =
- housi_p->mHousiEff[j].field_0x34 *
- fabsf(cM_ssin((f32)j * 250.0f +
- (f32)(g_Counter.mCounter0 * 88)));
+ cXyz* temp_r3_2 = &sp4C[k];
+ sp94.x = temp_r3_2->x * (var_f2 * (1.0f + (var_f24 * 0.3f)));
+ sp94.y = temp_r3_2->y * (var_f2 * (1.0f + (var_f24 * 0.3f)));
+ sp94.z = temp_r3_2->z * (var_f2 * (1.0f + (var_f24 * 0.3f)));
+ mDoMtx_stack_c::transS(spD0.x, spD0.y, spD0.z);
+
+ if (housi_packet->mHousiEff[j].mStatus == 1 ||
+ housi_packet->mHousiEff[j].mStatus == 3)
+ {
+ housi_packet->mHousiEff[j].field_0x38 +=
+ 483.0f * (0.5f + (var_f24 * 0.5f));
+
+ housi_packet->mHousiEff[j].field_0x44 =
+ (s16)housi_packet->mHousiEff[j].field_0x38;
+ mDoMtx_stack_c::YrotM(housi_packet->mHousiEff[j].field_0x38);
+ mDoMtx_stack_c::XrotM(housi_packet->mHousiEff[j].field_0x38);
+ mDoMtx_stack_c::ZrotM(housi_packet->mHousiEff[j].field_0x38);
+ } else {
+ if (housi_packet->mHousiEff[j].mStatus == 2) {
+ if (g_env_light.mPondSeason == 3) {
+ housi_packet->mHousiEff[j].field_0x38 += var_f24 * 30.0f;
} else {
- var_f24 = cM_ssin((f32)j * 685.0f +
- (f32)(g_Counter.mCounter0 * 20));
+ housi_packet->mHousiEff[j].field_0x38 +=
+ var_f24 * 100.0f;
}
- } else {
- var_f2 = 6.0f;
}
- cXyz* temp_r3_2 = &sp4C[k];
- sp94.x = temp_r3_2->x * (var_f2 * (1.0f + (var_f24 * 0.3f)));
- sp94.y = temp_r3_2->y * (var_f2 * (1.0f + (var_f24 * 0.3f)));
- sp94.z = temp_r3_2->z * (var_f2 * (1.0f + (var_f24 * 0.3f)));
- mDoMtx_stack_c::transS(spD0.x, spD0.y, spD0.z);
-
- if (housi_p->mHousiEff[j].mStatus == 1 ||
- housi_p->mHousiEff[j].mStatus == 3)
- {
- housi_p->mHousiEff[j].field_0x38 +=
- 483.0f * (0.5f + (var_f24 * 0.5f));
-
- housi_p->mHousiEff[j].field_0x44 =
- (s16)housi_p->mHousiEff[j].field_0x38;
- mDoMtx_stack_c::YrotM(housi_p->mHousiEff[j].field_0x38);
- mDoMtx_stack_c::XrotM(housi_p->mHousiEff[j].field_0x38);
- mDoMtx_stack_c::ZrotM(housi_p->mHousiEff[j].field_0x38);
+ if (housi_packet->mHousiEff[j].field_0x38 > 32765.0f) {
+ cLib_addCalc(&housi_packet->mHousiEff[j].field_0x44,
+ -16384.0f, 0.1f, 500.0f, 0.0001f);
} else {
- if (housi_p->mHousiEff[j].mStatus == 2) {
- if (g_env_light.mPondSeason == 3) {
- housi_p->mHousiEff[j].field_0x38 += var_f24 * 30.0f;
- } else {
- housi_p->mHousiEff[j].field_0x38 +=
- var_f24 * 100.0f;
- }
- }
+ cLib_addCalc(&housi_packet->mHousiEff[j].field_0x44,
+ 16384.0f, 0.1f, 500.0f, 0.0001f);
+ }
- if (housi_p->mHousiEff[j].field_0x38 > 32765.0f) {
- cLib_addCalc(&housi_p->mHousiEff[j].field_0x44,
- -16384.0f, 0.1f, 500.0f, 0.0001f);
- } else {
- cLib_addCalc(&housi_p->mHousiEff[j].field_0x44,
- 16384.0f, 0.1f, 500.0f, 0.0001f);
- }
+ mDoMtx_stack_c::YrotM(housi_packet->mHousiEff[j].field_0x38);
+ mDoMtx_stack_c::XrotM(housi_packet->mHousiEff[j].field_0x44);
+ mDoMtx_stack_c::ZrotM(housi_packet->mHousiEff[j].field_0x38);
+ }
- mDoMtx_stack_c::YrotM(housi_p->mHousiEff[j].field_0x38);
- mDoMtx_stack_c::XrotM(housi_p->mHousiEff[j].field_0x44);
- mDoMtx_stack_c::ZrotM(housi_p->mHousiEff[j].field_0x38);
+ mDoMtx_stack_c::multVec(&sp94, &sp88);
+ pos[k] = sp88;
+ }
+ } else {
+ spC4.x = var_f27 - temp_f30;
+ spC4.y = var_f27 - temp_f28;
+ spC4.z = 0.0f;
+ MTXMultVec(camMtx, &spC4, &spB8);
+ pos[0].x = spD0.x + spB8.x;
+ pos[0].y = spD0.y + spB8.y;
+ pos[0].z = spD0.z + spB8.z;
+
+ spC4.x = -var_f27 + temp_f30;
+ spC4.y = var_f27 - temp_f28;
+ spC4.z = 0.0f;
+ MTXMultVec(camMtx, &spC4, &spB8);
+ pos[1].x = spD0.x + spB8.x;
+ pos[1].y = spD0.y + spB8.y;
+ pos[1].z = spD0.z + spB8.z;
+
+ spC4.x = -var_f27 + temp_f30;
+ spC4.y = -var_f27 + temp_f28;
+ spC4.z = 0.0f;
+ MTXMultVec(camMtx, &spC4, &spB8);
+ pos[2].x = spD0.x + spB8.x;
+ pos[2].y = spD0.y + spB8.y;
+ pos[2].z = spD0.z + spB8.z;
+
+ spC4.x = var_f27 - temp_f30;
+ spC4.y = -var_f27 + temp_f28;
+ spC4.z = 0.0f;
+ MTXMultVec(camMtx, &spC4, &spB8);
+ pos[3].x = spD0.x + spB8.x;
+ pos[3].y = spD0.y + spB8.y;
+ pos[3].z = spD0.z + spB8.z;
+ }
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+
+ s16 var_r17 = 0x1FF;
+ if (dKy_darkworld_check() == true || var_r28 == 1) {
+ var_r17 = 0xFA;
+ }
+
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(var_r17, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(var_r17, var_r17);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, var_r17);
+ GXEnd();
+ }
+ }
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
+ }
+ }
+}
+
+/* 80067488-800685DC 061DC8 1154+00 0/0 1/1 0/0 .text dKyr_drawSnow__FPA4_fPPUc */
+// NONMATCHING - small branching issue
+void dKyr_drawSnow(Mtx drawMtx, u8** tex) {
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ dKankyo_snow_Packet* snow_packet = g_env_light.mpSnowPacket;
+
+ static f32 rot = 0.0f;
+
+ Mtx camMtx;
+ cXyz pos[4];
+
+ Vec sp94, sp88;
+ cXyz sp7C;
+
+ u8 spC = 1;
+ GXColor color_reg0;
+ GXColor color_reg1;
+
+ GXColor sp64;
+ GXColor sp60;
+ GXColor sp5C = {0xFF, 0xFF, 0xFF, 0xFF};
+ GXColor sp58 = {0xFF, 0xFF, 0xFF, 0xFF};
+ int sp54;
+ int sp4C = 0;
+
+ static cXyz add_table[] = {
+ cXyz(0.0f, 0.0f, 0.0f),
+ cXyz(50.0f, 50.0f, 50.0f),
+ cXyz(-50.0f, 20.0f, 50.0f),
+ cXyz(-50.0f, -20.0f, -50.0f),
+ };
+
+ static f32 S_fubuki_ratio = 0.0f;
+
+ if (camera != NULL) {
+ j3dSys.reinitGX();
+ if (snow_packet->field_0x6d88 != 0 || g_env_light.field_0xe90 != 0) {
+ if (snow_packet->field_0x6d88 == 0) {
+ sp54 = g_env_light.field_0xe90 * 10;
+ sp4C = 1;
+ } else {
+ sp54 = snow_packet->field_0x6d88;
+ }
+
+ if (!g_env_light.mCameraInWater) {
+ dKy_ParticleColor_get_bg(&camera->lookat.eye, NULL, &sp64, &sp60, &sp5C, &sp58, 0.0f);
+ color_reg0.r = 178.5f + (0.3f * sp60.r);
+ color_reg0.g = 178.5f + (0.3f * sp60.g);
+ color_reg0.b = 178.5f + (0.3f * sp60.b);
+
+ color_reg1.r = 127.5f + (0.5f * sp60.r);
+ color_reg1.g = 127.5f + (0.5f * sp60.g);
+ color_reg1.b = 127.5f + (0.5f * sp60.b);
+
+ color_reg0.a = 120;
+ color_reg1.a = 120;
+
+ f32 sp6C = 4.0f;
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
+
+ if (tex[0] != NULL) {
+ GXTexObj spA0;
+ dKyr_set_btitex(&spA0, (ResTIMG*)tex[0]);
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetNumIndStages(0);
+ dKr_cullVtx_Set();
+
+ Mtx rotMtx;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+
+ rot += 5.0f + cM_rndFX(2.0f);
+ if (rot > 719.0f) {
+ rot = 0.0f;
+ }
+
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ if (g_env_light.field_0xe92 == 0 && sp4C == 0) {
+ cLib_addCalc(&S_fubuki_ratio, 0.0f, 0.25f, 0.1f, 0.001f);
+ if (S_fubuki_ratio > 0.0f) {
+ spC = 2;
+ }
+ } else {
+ if (g_env_light.field_0xe92) {
+ spC = 2;
+ }
+ cLib_addCalc(&S_fubuki_ratio, 1.0f, 0.25f, 0.1f, 0.001f);
+ }
+
+ f32 sp50;
+ if (dComIfGd_getView() != NULL) {
+ sp50 = dComIfGd_getView()->fovy / 45.0f;
+ if (sp50 >= 1.0f) {
+ sp50 = 1.0f;
+ }
+ } else {
+ sp50 = 1.0f;
+ }
+
+ for (int i = 0; i < sp54; i++) {
+ for (int j = 0; j < 2; j++) {
+ f32 sp44 = -1.0f;
+ if (g_env_light.mpSnowPacket->mSnowEff[i].mStatus != 0) {
+ f32 var_f30;
+ f32 temp_f29;
+ f32 temp_f31 = 1.5f + (((i & 15) / 15.0f) * cM_ssin(g_Counter.mCounter0));
+ temp_f29 = 0.3f * ((i & 15) / 15.0f);
+
+ color_reg0.r = (255.0f * temp_f29) + (sp60.r * (1.0f - temp_f29));
+ color_reg0.g = (255.0f * temp_f29) + (sp60.g * (1.0f - temp_f29));
+ color_reg0.b = (255.0f * temp_f29) + (sp60.b * (1.0f - temp_f29));
+
+ f32 sp40, sp3C;
+ if (j == 0) {
+ sp7C = snow_packet->mSnowEff[i].mPosition;
+ sp40 = snow_packet->mSnowEff[i].mScale * snow_packet->mSnowEff[i].mScale;
+ sp3C = (snow_packet->mSnowEff[i].mScale - sp40) + snow_packet->mSnowEff[i].mScale;
+
+ color_reg0.a = 180.0f * ((snow_packet->mSnowEff[i].mScale * 0.8f) + temp_f29);
+ } else {
+ sp7C = snow_packet->mSnowEff[i].mBasePos;
+ sp40 = snow_packet->mSnowEff[i].field_0x30 * snow_packet->mSnowEff[i].field_0x30;
+ sp3C = (snow_packet->mSnowEff[i].field_0x30 - sp40) + snow_packet->mSnowEff[i].field_0x30;
+
+ color_reg0.a = S_fubuki_ratio * (220.0f * ((0.8f * (snow_packet->mSnowEff[i].field_0x30)) + temp_f29));
+ }
+
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0) {
+ if (dComIfGp_roomControl_getStayNo() == 4) {
+ if ((sp7C.x > 2079.0f && sp7C.x < 3013.0f && sp7C.y < 864.0f && sp7C.z > -6000.0f && sp7C.z < -4145.0f) ||
+ (sp7C.x > -2960.0f && sp7C.z > -880.0f && sp7C.z < -6000.0f) ||
+ (sp7C.z < -4920.0f && sp7C.y < 864.0f && sp7C.x < -2000.0f))
+ {
+ continue;
+ }
+ } else if (snow_packet->field_0x6d88 != 0) {
+ continue;
}
+ }
- mDoMtx_stack_c::multVec(&sp94, &sp88);
- sp15C[k] = sp88;
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ f32 sp38 = 2.0f * (i / 500.0f) * snow_packet->field_0x6d80;
+ f32 sp68 = sp50 * (camera->lookat.eye.abs(sp7C) / 1000.0f);
+ if (sp68 > 1.0f) {
+ sp68 = 1.0f;
}
- } else {
- spC4.x = var_f27 - temp_f30;
- spC4.y = var_f27 - temp_f28;
- spC4.z = 0.0f;
- MTXMultVec(sp1BC, &spC4, &spB8);
- sp15C[0].x = spD0.x + spB8.x;
- sp15C[0].y = spD0.y + spB8.y;
- sp15C[0].z = spD0.z + spB8.z;
-
- spC4.x = -var_f27 + temp_f30;
- spC4.y = var_f27 - temp_f28;
- spC4.z = 0.0f;
- MTXMultVec(sp1BC, &spC4, &spB8);
- sp15C[1].x = spD0.x + spB8.x;
- sp15C[1].y = spD0.y + spB8.y;
- sp15C[1].z = spD0.z + spB8.z;
-
- spC4.x = -var_f27 + temp_f30;
- spC4.y = -var_f27 + temp_f28;
- spC4.z = 0.0f;
- MTXMultVec(sp1BC, &spC4, &spB8);
- sp15C[2].x = spD0.x + spB8.x;
- sp15C[2].y = spD0.y + spB8.y;
- sp15C[2].z = spD0.z + spB8.z;
-
- spC4.x = var_f27 - temp_f30;
- spC4.y = -var_f27 + temp_f28;
- spC4.z = 0.0f;
- MTXMultVec(sp1BC, &spC4, &spB8);
- sp15C[3].x = spD0.x + spB8.x;
- sp15C[3].y = spD0.y + spB8.y;
- sp15C[3].z = spD0.z + spB8.z;
- }
- GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ if (g_env_light.field_0xe92 == 0) {
+ var_f30 = sp68 * (sp3C * (sp6C + (int)(10.0f * ((i & 15) / 15.0f))));
+ } else {
+ var_f30 = sp68 * (sp3C * (sp6C + (int)(14.0f * ((i & 15) / 15.0f))));
+ }
- s16 var_r17 = 0x1FF;
- if (dKy_darkworld_check() == 1 || var_r28 == 1) {
- var_r17 = 0xFA;
- }
+ sp94.x = -var_f30 * sp44;
+ sp94.y = var_f30 - sp38;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[0].x = sp7C.x + sp88.x;
+ pos[0].y = sp7C.y + sp88.y;
+ pos[0].z = sp7C.z + sp88.z;
+
+ sp94.x = var_f30 * sp44;
+ sp94.y = var_f30;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[1].x = sp7C.x + sp88.x;
+ pos[1].y = sp7C.y + sp88.y;
+ pos[1].z = sp7C.z + sp88.z;
+
+ sp94.x = var_f30 * sp44;
+ sp94.y = -var_f30;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[2].x = sp7C.x + sp88.x;
+ pos[2].y = sp7C.y + sp88.y;
+ pos[2].z = sp7C.z + sp88.z;
+
+ sp94.x = -var_f30 * sp44;
+ sp94.y = -var_f30 - sp38;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[3].x = sp7C.x + sp88.x;
+ pos[3].y = sp7C.y + sp88.y;
+ pos[3].z = sp7C.z + sp88.z;
+
+ for (int k = 0; k < spC; k++) {
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x + (temp_f31 * add_table[k].x), pos[0].y + (temp_f31 * add_table[k].y), pos[0].z + (temp_f31 * add_table[k].z));
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x + (temp_f31 * add_table[k].x), pos[1].y + (temp_f31 * add_table[k].y), pos[1].z + (temp_f31 * add_table[k].z));
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x + (temp_f31 * add_table[k].x), pos[2].y + (temp_f31 * add_table[k].y), pos[2].z + (temp_f31 * add_table[k].z));
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x + (temp_f31 * add_table[k].x), pos[3].y + (temp_f31 * add_table[k].y), pos[3].z + (temp_f31 * add_table[k].z));
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
- GXPosition3f32(sp15C[0].x, sp15C[0].y, sp15C[0].z);
- GXTexCoord2s16(0, 0);
- GXPosition3f32(sp15C[1].x, sp15C[1].y, sp15C[1].z);
- GXTexCoord2s16(var_r17, 0);
- GXPosition3f32(sp15C[2].x, sp15C[2].y, sp15C[2].z);
- GXTexCoord2s16(var_r17, var_r17);
- GXPosition3f32(sp15C[3].x, sp15C[3].y, sp15C[3].z);
- GXTexCoord2s16(0, var_r17);
- GXEnd();
+ if ((g_env_light.field_0xe90 != 0 && dComIfGp_roomControl_getStayNo() == 0 && sp7C.z < 3000.0f) || dComIfGp_roomControl_getStayNo() == 3 || dComIfGp_roomControl_getStayNo() == 6 || dComIfGp_roomControl_getStayNo() == 9 || dComIfGp_roomControl_getStayNo() == 13) {
+ color_reg0.a = 255.0f * ((0.4f * snow_packet->mSnowEff[i].field_0x30) + temp_f29);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+
+ f32 sp34;
+ f32 sp30;
+ if (dComIfGp_roomControl_getStayNo() == 0) {
+ sp30 = -24.0f;
+ } else if (dComIfGp_roomControl_getStayNo() == 6) {
+ sp30 = 952.0f;
+ } else if (dComIfGp_roomControl_getStayNo() == 3) {
+ sp30 = -24.0f;
+ } else if (dComIfGp_roomControl_getStayNo() == 9) {
+ sp30 = -52.0f;
+ } else if (dComIfGp_roomControl_getStayNo() == 13) {
+ sp30 = 2.0f;
+ } else {
+ sp30 = 0.0f;
+ }
+
+ sp34 = sp7C.y - sp30;
+ sp34 = sp30 - sp34;
+
+ sp94.x = -var_f30 * sp44;
+ sp94.y = var_f30 - sp38;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[0].x = sp7C.x + sp88.x;
+ pos[0].y = sp34 + sp88.y;
+ pos[0].z = sp7C.z + sp88.z;
+
+ sp94.x = (var_f30 * sp44);
+ sp94.y = var_f30;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[1].x = sp7C.x + sp88.x;
+ pos[1].y = sp34 + sp88.y;
+ pos[1].z = sp7C.z + sp88.z;
+
+ sp94.x = (var_f30 * sp44);
+ sp94.y = -var_f30;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[2].x = sp7C.x + sp88.x;
+ pos[2].y = sp34 + sp88.y;
+ pos[2].z = sp7C.z + sp88.z;
+
+ sp94.x = (-var_f30 * sp44);
+ sp94.y = (-var_f30 - sp38);
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[3].x = sp7C.x + sp88.x;
+ pos[3].y = sp34 + sp88.y;
+ pos[3].z = sp7C.z + sp88.z;
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ int var_r27 = 0;
+ GXPosition3f32(pos[0].x + (temp_f31 * add_table[var_r27].x), pos[0].y + (temp_f31 * add_table[var_r27].y), pos[0].z + (temp_f31 * add_table[var_r27].z));
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x + (temp_f31 * add_table[var_r27].x), pos[1].y + (temp_f31 * add_table[var_r27].y), pos[1].z + (temp_f31 * add_table[var_r27].z));
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x + (temp_f31 * add_table[var_r27].x), pos[2].y + (temp_f31 * add_table[var_r27].y), pos[2].z + (temp_f31 * add_table[var_r27].z));
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x + (temp_f31 * add_table[var_r27].x), pos[3].y + (temp_f31 * add_table[var_r27].y), pos[3].z + (temp_f31 * add_table[var_r27].z));
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
}
}
- }
- GXSetClipMode(GX_CLIP_ENABLE);
- J3DShape::resetVcdVatCache();
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
+ }
}
}
}
}
-/* ############################################################################################## */
-/* 8037A578-8037A578 006BD8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8037A5F9 = "D_MN11";
-#pragma pop
+/* 800685DC-8006950C 062F1C 0F30+00 0/0 1/1 0/0 .text dKyr_drawStar__FPA4_fPPUc */
+void dKyr_drawStar(Mtx drawMtx, u8** tex) {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_star_Packet* star_packet = g_env_light.mpStarPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+
+ static f32 rot = 0.0f;
-/* 804249B0-804249BC 0516D0 000C+00 0/1 0/0 0/0 .bss @8942 */
-#pragma push
-#pragma force_active on
-static u8 lit_8942[12];
-#pragma pop
+ cXyz pos[4];
-/* 804249BC-804249C8 0516DC 000C+00 0/1 0/0 0/0 .bss @8945 */
-#pragma push
-#pragma force_active on
-static u8 lit_8945[12];
-#pragma pop
+ Mtx camMtx;
+ cXyz spBC;
+ cXyz moon_proj;
+ cXyz star_proj;
+
+ Vec sp98, sp8C;
+ cXyz moon_pos;
+
+ u8 gwolf_howl_stage = false;
+ u8 draw_mirrored = false;
+ BOOL sp38 = false;
+
+ // Cassiopeia and Orion constellation positions
+ static csXyz hokuto_position[] = {
+ csXyz(15283, 31005, -17919),
+ csXyz(13525, 28369, -22265),
+ csXyz(8300, 31884, -20507),
+ csXyz(3906, 31005, -23144),
+ csXyz(-439, 30127, -17919),
+ csXyz(-7421, 31005, 18798),
+ csXyz(-10937, 28000, 15000),
+ csXyz(-10000, 24902, 18400),
+ csXyz(-9400, 22500, 15900),
+ csXyz(-9179, 21300, 14300),
+ csXyz(-10300, 22000, 21000),
+ csXyz(-16000, 25500, 20000),
+ csXyz(0, 30000, 19000),
+ };
-/* 804249C8-804249D4 0516E8 000C+00 0/1 0/0 0/0 .bss @8946 */
-#pragma push
-#pragma force_active on
-static u8 lit_8946[12];
-#pragma pop
+ if (star_packet->mEffectNum != 0) {
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP200") == 0 && dComIfG_play_c::getLayerNo(0) == 0) {
+ gwolf_howl_stage = true;
+ } else if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 ||
+ ((strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0) && dComIfGp_roomControl_getStayNo() == 0))
+ {
+ // draw stars on the opposite skybox hemisphere as well for water reflections
+ draw_mirrored = true;
+ }
+
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0 && dKy_daynight_check()) {
+ sp38 = true;
+ }
-/* 804249D4-804249E0 0516F4 000C+00 0/1 0/0 0/0 .bss @8947 */
-#pragma push
-#pragma force_active on
-static u8 lit_8947[12];
-#pragma pop
+ GXColor color_reg0;
+ color_reg0.r = 0xDC;
+ color_reg0.g = 0xE6;
+ color_reg0.b = 0xFF;
+ color_reg0.a = 0xFF;
-/* 804249E0-80424A10 051700 0030+00 0/1 0/0 0/0 .bss add_table$8941 */
-#pragma push
-#pragma force_active on
-static u8 add_table_8941[48];
-#pragma pop
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
-/* 80450F08-80450F0C 000408 0004+00 1/1 0/0 0/0 .sbss rot$8936 */
-static f32 rot_8936;
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP200") == 0 && dComIfG_play_c::getLayerNo(0) == 0) {
+ moon_pos = envlight->mMoonPos;
+ } else {
+ moon_pos = camera->lookat.eye + envlight->mMoonPos;
+ if (sp38) {
+ moon_pos.x = 3900.0f + camera->lookat.eye.x;
+ moon_pos.y = 8052.0f + camera->lookat.eye.y;
+ moon_pos.z = -9072.0f + camera->lookat.eye.z;
+ }
+ }
+
+ mDoLib_project(&moon_pos, &moon_proj);
-/* 80450F0C-80450F10 -00001 0004+00 1/1 0/0 0/0 .sbss None */
-/* 80450F0C 0001+00 data_80450F0C None */
-/* 80450F0D 0003+00 data_80450F0D None */
-static u8 struct_80450F0C[4];
+ GXSetNumChans(1);
+ GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
+ GXSetNumTexGens(0);
+ GXSetNumTevStages(1);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetNumIndStages(0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
-/* 80450F10-80450F14 000410 0004+00 1/1 0/0 0/0 .sbss S_fubuki_ratio$8948 */
-static f32 S_fubuki_ratio;
+ Mtx rotMtx;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
-/* 80450F14-80450F18 000414 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450F14[4];
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
-/* 80452500-80452504 000B00 0004+00 1/1 0/0 0/0 .sdata2 @8939 */
-SECTION_SDATA2 static u32 lit_8939 = 0xFFFFFFFF;
+ rot += 0.65f;
+ if (rot > 719.0f) {
+ rot = 0.0f;
+ }
-/* 80452504-80452508 000B04 0004+00 1/1 0/0 0/0 .sdata2 @8940 */
-SECTION_SDATA2 static u32 lit_8940 = 0xFFFFFFFF;
+ spBC.x = camera->lookat.eye.x;
+ spBC.y = camera->lookat.eye.y;
+ spBC.z = camera->lookat.eye.z;
-/* 80452508-8045250C 000B08 0004+00 1/1 0/0 0/0 .sdata2 @9384 */
-SECTION_SDATA2 static f32 lit_9384 = -20.0f;
+ f32 sp34 = -1.0f;
+ int sp30 = 0;
+ f32 var_f30 = 0.0f;
-/* 8045250C-80452510 000B0C 0004+00 1/1 0/0 0/0 .sdata2 @9385 */
-SECTION_SDATA2 static f32 lit_9385 = 178.5f;
+ if (dComIfGd_getView() != NULL) {
+ var_f30 = dComIfGd_getView()->fovy / 45.0f;
+ if (var_f30 >= 1.0f) {
+ var_f30 = 1.0f;
+ }
+ var_f30 = 1.0f - var_f30;
+ }
-/* 80452510-80452514 000B10 0004+00 1/1 0/0 0/0 .sdata2 @9386 */
-SECTION_SDATA2 static f32 lit_9386 = 127.5f;
+ f32 temp_f27 = 0.28f * (1.0f - var_f30);
+
+ sp98.x = 0.0f;
+ sp98.y = temp_f27;
+ sp98.z = 0.0f;
+ cMtx_multVec(camMtx, &sp98, &sp8C);
+ pos[0].x = spBC.x + sp8C.x;
+ pos[0].y = spBC.y + sp8C.y;
+ pos[0].z = spBC.z + sp8C.z;
+
+ sp98.x = temp_f27;
+ sp98.y = -(0.5f * temp_f27);
+ sp98.z = 0.0f;
+ cMtx_multVec(camMtx, &sp98, &sp8C);
+ pos[1].x = spBC.x + sp8C.x;
+ pos[1].y = spBC.y + sp8C.y;
+ pos[1].z = spBC.z + sp8C.z;
+
+ sp98.x = -temp_f27;
+ sp98.y = -(0.5f * temp_f27);
+ sp98.z = 0.0f;
+ cMtx_multVec(camMtx, &sp98, &sp8C);
+ pos[2].x = spBC.x + sp8C.x;
+ pos[2].y = spBC.y + sp8C.y;
+ pos[2].z = spBC.z + sp8C.z;
+
+ int sp48 = 0;
+ int sp44 = 0;
+ f32 var_f28 = 0.0f;
-/* 80452514-80452518 000B14 0004+00 3/3 0/0 0/0 .sdata2 @9387 */
-SECTION_SDATA2 static f32 lit_9387 = 719.0f;
+ for (int i = 0; i < star_packet->mEffectNum; i++) {
+ f32 var_f31;
+ cXyz star_pos;
+ f32 sp2C = 300.0f;
-/* 80452518-8045251C 000B18 0004+00 1/1 0/0 0/0 .sdata2 @9388 */
-SECTION_SDATA2 static f32 lit_9388 = 220.0f;
+ if (i < 13) {
+ star_pos.x = hokuto_position[i].x;
+ star_pos.y = hokuto_position[i].y;
+ star_pos.z = hokuto_position[i].z;
-/* 8045251C-80452520 000B1C 0004+00 1/1 0/0 0/0 .sdata2 @9389 */
-SECTION_SDATA2 static f32 lit_9389 = 2079.0f;
+ if (i <= 4) {
+ var_f31 = 540.0f + star_packet->mEffect[0].field_0x28;
+ } else {
+ var_f31 = 400.0f + star_packet->mEffect[0].field_0x28;
+ }
+ var_f31 -= var_f30 * (0.5f * var_f31);
-/* 80452520-80452524 000B20 0004+00 1/1 0/0 0/0 .sdata2 @9390 */
-SECTION_SDATA2 static f32 lit_9390 = 3013.0f;
+ color_reg0.r = 0xA0;
+ color_reg0.g = 0x8C;
+ color_reg0.b = 0x96;
+ color_reg0.a = 0xC3;
+ } else {
+ var_f31 = 0.8f + (star_packet->mEffect[0].field_0x28 * (0.03125f * (i & 31)));
+ f32 temp_f29 = 1.0f - (0.004950495f * var_f28);
+
+ star_pos.x = temp_f29 * (sp2C * -cM_ssin((sp48 - 0x8000)));
+ star_pos.y = 45.0f + var_f28;
+ star_pos.z = temp_f29 * (sp2C * cM_scos((sp48 - 0x8000)));
-/* 80452524-80452528 000B24 0004+00 1/1 0/0 0/0 .sdata2 @9391 */
-SECTION_SDATA2 static f32 lit_9391 = 864.0f;
+ sp48 += sp44;
+ sp44 += 2250;
-/* 80452528-8045252C 000B28 0004+00 1/1 0/0 0/0 .sdata2 @9392 */
-SECTION_SDATA2 static f32 lit_9392 = -6000.0f;
+ temp_f29 = var_f28 / 200.0f;
+ temp_f29 *= temp_f29 * temp_f29;
+ var_f28 += 1.0f + (3.0f * temp_f29);
+ if (var_f28 > 200.0f) {
+ var_f28 = 20.0f * (i / 2800.0f);
+ }
-/* 8045252C-80452530 000B2C 0004+00 1/1 0/0 0/0 .sdata2 @9393 */
-SECTION_SDATA2 static f32 lit_9393 = -4145.0f;
+ static const GXColor star_col[] = {
+ /* red */ {0xFF, 0xBE, 0xC8, 0xA0},
+ /* green */ {0xC8, 0xFF, 0xBE, 0x78},
+ /* blue */ {0xC8, 0xBE, 0xFF, 0x50},
+ /* white */ {0xFF, 0xFF, 0xFF, 0xC8},
+ };
-/* 80452530-80452534 000B30 0004+00 1/1 0/0 0/0 .sdata2 @9394 */
-SECTION_SDATA2 static f32 lit_9394 = -2960.0f;
+ color_reg0 = star_col[i & 3];
+ color_reg0.a = 70.0f + ((i & 63) * 2);
+ }
-/* 80452534-80452538 000B34 0004+00 1/1 0/0 0/0 .sdata2 @9395 */
-SECTION_SDATA2 static f32 lit_9395 = -880.0f;
+ GXSetTevColor(GX_TEVREG0, color_reg0);
-/* 80452538-8045253C 000B38 0004+00 1/1 0/0 0/0 .sdata2 @9396 */
-SECTION_SDATA2 static f32 lit_9396 = -4920.0f;
+ cXyz sp68;
+ cXyz sp5C;
+ u16 date = dComIfGs_getDate();
+ sp68.x = spBC.x + star_pos.x;
+ sp68.y = spBC.y + star_pos.y;
+ sp68.z = spBC.z + star_pos.z;
-/* 8045253C-80452540 000B3C 0004+00 1/1 0/0 0/0 .sdata2 @9397 */
-SECTION_SDATA2 static f32 lit_9397 = -2000.0f;
+ mDoLib_project(&sp68, &star_proj);
-/* 80452540-80452544 000B40 0004+00 1/1 0/0 0/0 .sdata2 @9398 */
-SECTION_SDATA2 static f32 lit_9398 = 4.0f;
+ moon_proj.z = 0.0f;
+ star_proj.z = 0.0f;
+ f32 moon_dist_to_star = moon_proj.abs(star_proj);
-/* 80452544-80452548 000B44 0004+00 1/1 0/0 0/0 .sdata2 @9399 */
-SECTION_SDATA2 static f32 lit_9399 = 14.0f;
+ f32 moon_threshold;
+ if (gwolf_howl_stage) {
+ moon_threshold = 180.0f + (700.0f * (var_f30 * var_f30));
+ } else {
+ moon_threshold = 80.0f + (700.0f * (var_f30 * var_f30));
+ }
-/* 80452548-8045254C 000B48 0004+00 1/1 0/0 0/0 .sdata2 @9400 */
-SECTION_SDATA2 static f32 lit_9400 = -24.0f;
+ int weekday = date % 8;
+ if (g_env_light.getDaytime() < 180.0f) {
+ if (weekday != 0) {
+ weekday--;
+ } else {
+ weekday = 7;
+ }
+ }
-/* 8045254C-80452550 000B4C 0004+00 1/1 0/0 0/0 .sdata2 @9401 */
-SECTION_SDATA2 static f32 lit_9401 = 952.0f;
+ if (weekday == 4 && !gwolf_howl_stage) {
+ // it's a New Moon, so no threshold needed
+ moon_threshold = 0.0f;
+ }
-/* 80452550-80452554 000B50 0004+00 1/1 0/0 0/0 .sdata2 @9402 */
-SECTION_SDATA2 static f32 lit_9402 = -52.0f;
+ // if a star is too close to the moon then avoid drawing
+ if (moon_dist_to_star > moon_threshold) {
+ GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3);
+ GXPosition3f32(sp68.x + (var_f31 * (pos[0].x - spBC.x)), sp68.y + (var_f31 * (pos[0].y - spBC.y)), sp68.z + (var_f31 * (pos[0].z - spBC.z)));
+ GXPosition3f32(sp68.x + (var_f31 * (pos[1].x - spBC.x)), sp68.y + (var_f31 * (pos[1].y - spBC.y)), sp68.z + (var_f31 * (pos[1].z - spBC.z)));
+ GXPosition3f32(sp68.x + (var_f31 * (pos[2].x - spBC.x)), sp68.y + (var_f31 * (pos[2].y - spBC.y)), sp68.z + (var_f31 * (pos[2].z - spBC.z)));
+ GXEnd();
+
+ if (draw_mirrored) {
+ sp5C.x = spBC.x + star_pos.x;
+ sp5C.y = spBC.y - star_pos.y;
+ sp5C.z = spBC.z + star_pos.z;
+
+ GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3);
+ GXPosition3f32(sp5C.x + (var_f31 * (pos[0].x - spBC.x)), sp5C.y + (var_f31 * (pos[0].y - spBC.y)), sp5C.z + (var_f31 * (pos[0].z - spBC.z)));
+ GXPosition3f32(sp5C.x + (var_f31 * (pos[1].x - spBC.x)), sp5C.y + (var_f31 * (pos[1].y - spBC.y)), sp5C.z + (var_f31 * (pos[1].z - spBC.z)));
+ GXPosition3f32(sp5C.x + (var_f31 * (pos[2].x - spBC.x)), sp5C.y + (var_f31 * (pos[2].y - spBC.y)), sp5C.z + (var_f31 * (pos[2].z - spBC.z)));
+ GXEnd();
+ }
+ }
+ }
-/* 80067488-800685DC 061DC8 1154+00 0/0 1/1 0/0 .text dKyr_drawSnow__FPA4_fPPUc */
-void dKyr_drawSnow(Mtx param_0, u8** param_1) {
- // NONMATCHING
+ J3DShape::resetVcdVatCache();
+ }
}
-/* ############################################################################################## */
-/* 8037A568-8037A578 006BC8 0010+00 1/1 0/0 0/0 .rodata star_col$9440 */
-SECTION_RODATA static u8 const star_col[16] = {
- 0xFF, 0xBE, 0xC8, 0xA0, 0xC8, 0xFF, 0xBE, 0x78, 0xC8, 0xBE, 0xFF, 0x50, 0xFF, 0xFF, 0xFF, 0xC8,
-};
-COMPILER_STRIP_GATE(0x8037A568, &star_col);
-
-/* 80424A10-80424A1C 051730 000C+00 0/1 0/0 0/0 .bss @9425 */
-#pragma push
-#pragma force_active on
-static u8 lit_9425[12];
-#pragma pop
-
-/* 80424A1C-80424A28 05173C 000C+00 0/1 0/0 0/0 .bss @9428 */
-#pragma push
-#pragma force_active on
-static u8 lit_9428[12];
-#pragma pop
-
-/* 80424A28-80424A34 051748 000C+00 0/1 0/0 0/0 .bss @9429 */
-#pragma push
-#pragma force_active on
-static u8 lit_9429[12];
-#pragma pop
-
-/* 80424A34-80424A40 051754 000C+00 0/1 0/0 0/0 .bss @9430 */
-#pragma push
-#pragma force_active on
-static u8 lit_9430[12];
-#pragma pop
-
-/* 80424A40-80424A4C 051760 000C+00 0/1 0/0 0/0 .bss @9431 */
-#pragma push
-#pragma force_active on
-static u8 lit_9431[12];
-#pragma pop
-
-/* 80424A4C-80424A58 05176C 000C+00 0/1 0/0 0/0 .bss @9432 */
-#pragma push
-#pragma force_active on
-static u8 lit_9432[12];
-#pragma pop
-
-/* 80424A58-80424A64 051778 000C+00 0/1 0/0 0/0 .bss @9433 */
-#pragma push
-#pragma force_active on
-static u8 lit_9433[12];
-#pragma pop
-
-/* 80424A64-80424A70 051784 000C+00 0/1 0/0 0/0 .bss @9434 */
-#pragma push
-#pragma force_active on
-static u8 lit_9434[12];
-#pragma pop
-
-/* 80424A70-80424A7C 051790 000C+00 0/1 0/0 0/0 .bss @9435 */
-#pragma push
-#pragma force_active on
-static u8 lit_9435[12];
-#pragma pop
-
-/* 80424A7C-80424A88 05179C 000C+00 0/1 0/0 0/0 .bss @9436 */
-#pragma push
-#pragma force_active on
-static u8 lit_9436[12];
-#pragma pop
-
-/* 80424A88-80424A94 0517A8 000C+00 0/1 0/0 0/0 .bss @9437 */
-#pragma push
-#pragma force_active on
-static u8 lit_9437[12];
-#pragma pop
-
-/* 80424A94-80424AA0 0517B4 000C+00 0/1 0/0 0/0 .bss @9438 */
-#pragma push
-#pragma force_active on
-static u8 lit_9438[12];
-#pragma pop
-
-/* 80424AA0-80424AAC 0517C0 000C+00 0/1 0/0 0/0 .bss @9439 */
-#pragma push
-#pragma force_active on
-static u8 lit_9439[12];
-#pragma pop
-
-/* 80424AAC-80424B00 0517CC 004E+06 0/1 0/0 0/0 .bss hokuto_position$9424 */
-#pragma push
-#pragma force_active on
-static u8 hokuto_position[78 + 6 /* padding */];
-#pragma pop
-
-/* 80450F18-80450F1C 000418 0004+00 1/1 0/0 0/0 .sbss rot$9421 */
-static f32 rot_9421;
-
-/* 80450F1C-80450F20 -00001 0004+00 1/1 0/0 0/0 .sbss None */
-/* 80450F1C 0001+00 data_80450F1C None */
-/* 80450F1D 0003+00 data_80450F1D None */
-static u8 struct_80450F1C[4];
-
-/* 80452554-80452558 000B54 0004+00 2/2 0/0 0/0 .sdata2 @9833 */
-SECTION_SDATA2 static f32 lit_9833 = 0.65f;
-
-/* 80452558-8045255C 000B58 0004+00 1/1 0/0 0/0 .sdata2 @9834 */
-SECTION_SDATA2 static f32 lit_9834 = 0.28f;
-
-/* 8045255C-80452560 000B5C 0004+00 1/1 0/0 0/0 .sdata2 @9835 */
-SECTION_SDATA2 static f32 lit_9835 = 540.0f;
-
-/* 80452560-80452564 000B60 0004+00 1/1 0/0 0/0 .sdata2 @9836 */
-SECTION_SDATA2 static f32 lit_9836 = 0.03125f;
-
-/* 80452564-80452568 000B64 0004+00 1/1 0/0 0/0 .sdata2 @9837 */
-SECTION_SDATA2 static f32 lit_9837 = 0.004950494971126318f;
+/* 8006950C-8006A090 063E4C 0B84+00 0/0 1/1 0/0 .text drawCloudShadow__FPA4_fPPUc */
+void drawCloudShadow(Mtx drawMtx, u8** tex) {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_cloud_Packet* cloud_packet = g_env_light.mpCloudPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
-/* 800685DC-8006950C 062F1C 0F30+00 0/0 1/1 0/0 .text dKyr_drawStar__FPA4_fPPUc */
-void dKyr_drawStar(Mtx param_0, u8** param_1) {
- // NONMATCHING
-}
+ static f32 rot = 0.0f;
-/* ############################################################################################## */
-/* 80450F20-80450F24 000420 0004+00 1/1 0/0 0/0 .sbss rot$9847 */
-static f32 rot_9847;
+ Mtx camMtx;
+ Mtx rotMtx;
+ Mtx sp120;
+ Mtx spF0;
+
+ Vec sp74, sp68;
+ cXyz sp5C;
+ GXColor color_reg0;
+ GXColor color_reg1;
+ GXColor sp48;
+ GXColor sp44;
+ GXColor sp40 = {0xFF, 0xFF, 0xFF, 0xFF};
+ GXColor sp3C = {0xFF, 0xFF, 0xFF, 0xFF};
+ GXColor sp38 = {0xFF, 0xFF, 0xFF, 0xFF};
+
+ f32 var_f29 = 1.0f;
+
+ if (cloud_packet->mCount > 0) {
+ j3dSys.reinitGX();
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ OS_REPORT("\ndrawCloud ikinasi return!!");
+ return;
+ }
-/* 80450F24-80450F28 000424 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450F24[4];
+ GXSetClipMode(GX_CLIP_DISABLE);
-/* 80452568-8045256C 000B68 0004+00 1/1 0/0 0/0 .sdata2 @9850 */
-SECTION_SDATA2 static u32 lit_9850 = 0xFFFFFFFF;
+ GXTexObj texobj, fb_texobj;
+ if (g_env_light.mMoyaMode < 50) {
+ dKy_ParticleColor_get_bg(&camera->lookat.eye, NULL, &sp48, &sp44, &sp40, &sp3C, 0.0f);
+ f32 temp_f30 = 0.4f;
+
+ color_reg0.r = (sp38.r * temp_f30) + (sp44.r * (1.0f - temp_f30));
+ color_reg0.g = (sp38.g * temp_f30) + (sp44.g * (1.0f - temp_f30));
+ color_reg0.b = (sp38.b * temp_f30) + (sp44.b * (1.0f - temp_f30));
+
+ color_reg1.r = (0.45f * sp38.r) + (0.55f * sp44.r);
+ color_reg1.g = (0.45f * sp38.g) + (0.55f * sp44.g);
+ color_reg1.b = (0.45f * sp38.b) + (0.55f * sp44.b);
+
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ dKy_GxFog_set();
+
+ if (g_env_light.mMoyaMode == 3 || g_env_light.mMoyaMode == 4 || g_env_light.mMoyaMode == 6 || g_env_light.mMoyaMode == 10 || g_env_light.mMoyaMode == 11) {
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_COPY);
+ } else {
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
+ }
-/* 8045256C-80452570 000B6C 0004+00 1/1 0/0 0/0 .sdata2 @9851 */
-SECTION_SDATA2 static u32 lit_9851 = 0xFFFFFFFF;
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetNumIndStages(0);
+ dKr_cullVtx_Set();
-/* 80452570-80452574 000B70 0004+00 1/1 0/0 0/0 .sdata2 @9852 */
-SECTION_SDATA2 static u32 lit_9852 = 0xFFFFFFFF;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
-/* 80452574-80452578 000B74 0004+00 2/2 0/0 0/0 .sdata2 @10030 */
-SECTION_SDATA2 static f32 lit_10030 = 0.55f;
+ rot -= 0.45f;
+ if (rot < 0.0f) {
+ rot = 719.0f;
+ }
-/* 80452578-8045257C 000B78 0004+00 2/2 0/0 0/0 .sdata2 @10031 */
-SECTION_SDATA2 static f32 lit_10031 = 0.49f;
+ GXSetCurrentMtx(GX_PNMTX0);
+ } else {
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xFF;
+ color_reg0.b = 0x73;
+
+ color_reg1.r = 0x50;
+ color_reg1.g = 0x32;
+ color_reg1.b = 0;
+ color_reg1.a = 0xFF;
+
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP1);
+
+ ResTIMG* fb_timg = mDoGph_gInf_c::getFrameBufferTimg();
+ dDlst_window_c* window = dComIfGp_getWindow(0);
+ camera_class* window_cam = dComIfGp_getCamera(window->getCameraID());
+ dKyr_set_btitex_common(&fb_texobj, fb_timg, GX_TEXMAP0);
+
+ f32 scale = 0.49f;
+ C_MTXLightPerspective(sp120, window_cam->fovy, window_cam->aspect, scale, -scale, 0.5f, 0.5f);
+ cMtx_concat(sp120, j3dSys.getViewMtx(), spF0);
+
+ rot += 2.0f;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+ GXLoadTexMtxImm(spF0, GX_TEXMTX0, GX_MTX3x4);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
+ GXSetNumChans(1);
+ GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(2);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0);
+ GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY);
+ GXSetNumTevStages(2);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C0, GX_CC_C1);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0);
+ GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_COPY);
+ GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetCullMode(GX_CULL_NONE);
+ GXSetNumIndStages(0);
+ }
-/* 8006950C-8006A090 063E4C 0B84+00 0/0 1/1 0/0 .text drawCloudShadow__FPA4_fPPUc */
-void drawCloudShadow(Mtx param_0, u8** param_1) {
- // NONMATCHING
+ if (g_env_light.mMoyaMode == 7 || g_env_light.mMoyaMode == 8 || g_env_light.mMoyaMode == 10 || g_env_light.mMoyaMode == 11) {
+ var_f29 = g_env_light.field_0xebc;
+ }
+
+ for (int i = 0; i < cloud_packet->mCount; i++) {
+ cXyz pos[4];
+ f32 size = cloud_packet->mCloudEff[i].mSize;
+
+ if (!(cloud_packet->mCloudEff[i].mAlpha <= 0.01f)) {
+ color_reg0.a = 255.0f * (cloud_packet->mCloudEff[i].mAlpha * var_f29);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+
+ sp5C.x = cloud_packet->mCloudEff[i].mBasePos.x + cloud_packet->mCloudEff[i].mPosition.x;
+ sp5C.y = cloud_packet->mCloudEff[i].mBasePos.y + cloud_packet->mCloudEff[i].mPosition.y;
+ sp5C.z = cloud_packet->mCloudEff[i].mBasePos.z + cloud_packet->mCloudEff[i].mPosition.z;
+
+ sp74.x = -size;
+ sp74.y = size;
+ sp74.z = 0.0f;
+ cMtx_multVec(camMtx, &sp74, &sp68);
+ pos[0].x = sp5C.x + sp68.x;
+ pos[0].y = sp5C.y + sp68.y;
+ pos[0].z = sp5C.z + sp68.z;
+
+ sp74.x = size;
+ sp74.y = size;
+ sp74.z = 0.0f;
+ cMtx_multVec(camMtx, &sp74, &sp68);
+ pos[1].x = sp5C.x + sp68.x;
+ pos[1].y = sp5C.y + sp68.y;
+ pos[1].z = sp5C.z + sp68.z;
+
+ sp74.x = size;
+ sp74.y = -size;
+ sp74.z = 0.0f;
+ cMtx_multVec(camMtx, &sp74, &sp68);
+ pos[2].x = sp5C.x + sp68.x;
+ pos[2].y = sp5C.y + sp68.y;
+ pos[2].z = sp5C.z + sp68.z;
+
+ sp74.x = -size;
+ sp74.y = -size;
+ sp74.z = 0.0f;
+ cMtx_multVec(camMtx, &sp74, &sp68);
+ pos[3].x = sp5C.x + sp68.x;
+ pos[3].y = sp5C.y + sp68.y;
+ pos[3].z = sp5C.z + sp68.z;
+
+ if (g_env_light.mMoyaMode < 50) {
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ } else {
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
+ }
}
-/* ############################################################################################## */
-/* 8037A578-8037A578 006BD8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8037A600 = "D_MN07";
-#pragma pop
+// drawVrkumo calls these functions as inlines somehow
+// these need to be moved to MSL_C once an appropriate solution is found
+inline float sinf(float x) {
+ return sin(x);
+}
-/* 80450F28-80450F2C 000428 0004+00 1/1 0/0 0/0 .sbss howa_loop_cnt$10108 */
-static f32 howa_loop_cnt;
+inline float cosf(float x) {
+ return cos(x);
+}
-/* 80450F2C-80450F30 00042C 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450F2C[4];
+/* 8006A090-8006B190 0649D0 1100+00 0/0 1/1 0/0 .text drawVrkumo__FPA4_fR8_GXColorPPUc */
+// NONMATCHING - regalloc, j/k getting put in too low of registers?
+void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) {
+ dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_vrkumo_Packet* vrkumo_packet = g_env_light.mpVrkumoPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ camera_class* camera2 = (camera_class*)dComIfGp_getCamera(0);
+
+ Mtx camMtx;
+ Mtx rotMtx;
+
+ GXTexObj texobj;
+ cXyz proj;
+
+ int j;
+ int k;
+ int pass = 1;
+
+ f32 spC4 = 0.0f;
+
+ cXyz sp15C;
+ cXyz sp150;
+ cXyz sp144;
+ cXyz sp138;
+ cXyz sp12C;
+ cXyz sp120;
+ cXyz sp114;
+ cXyz sp108;
+ cXyz spFC;
+
+ int sp80 = 0;
+
+ if (camera2 != NULL) {
+ spC4 = camera2->mCamera.TrimHeight();
+ }
-/* 8045257C-80452580 000B7C 0004+00 1/1 0/0 0/0 .sdata2 @10593 */
-SECTION_SDATA2 static f32 lit_10593 = 240.0f;
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ OS_REPORT("\ndrawCloud ikinasi return!!");
+ return;
+ }
-/* 80452580-80452584 000B80 0004+00 1/1 0/0 0/0 .sdata2 @10594 */
-SECTION_SDATA2 static f32 lit_10594 = 0.0000000001;
+ f32 rot = cAngle::s2d(fopCamM_GetBank(camera));
+ int sp88 = 0;
+ f32 spCC = 100000.0f;
-/* 80452584-80452588 000B84 0004+00 1/1 0/0 0/0 .sdata2 @10595 */
-SECTION_SDATA2 static f32 lit_10595 = 0.0625f;
+ f32 unused;
+ if (dComIfGd_getView() != NULL) {
+ f32 sp70 = 0.0f;
+ dStage_FileList_dt_c* filelist = NULL;
+ if (dComIfGp_roomControl_getStayNo() >= 0) {
+ filelist = dComIfGp_roomControl_getStatusRoomDt(dComIfGp_roomControl_getStayNo())->mRoomDt.getFileListInfo();
+ }
-/* 80452588-8045258C 000B88 0004+00 1/1 0/0 0/0 .sdata2 @10596 */
-SECTION_SDATA2 static f32 lit_10596 = 0.84f;
+ if (filelist != NULL) {
+ sp70 = dStage_FileList_dt_SeaLevel(filelist);
+ }
-/* 8045258C-80452590 000B8C 0004+00 1/1 0/0 0/0 .sdata2 @10597 */
-SECTION_SDATA2 static f32 lit_10597 = 0.92f;
+ unused = 1.0f - (0.09f * (camera->lookat.eye.y - sp70));
+ }
-/* 80452590-80452594 000B90 0004+00 1/1 0/0 0/0 .sdata2 @10598 */
-SECTION_SDATA2 static f32 lit_10598 = 1.9f;
+ if (g_env_light.mDaytime > 105.0f && g_env_light.mDaytime < 240.0f && !dComIfGp_event_runCheck() && sun_packet != NULL && sun_packet->mSunAlpha > 0.0f) {
+ mDoLib_project(&sun_packet->mPos[0], &proj);
+ if (proj.x > 0.0f && proj.x < 608.0f && proj.y > spC4 && proj.y < (458.0f - spC4)) {
+ pass = 0;
+ }
+ }
-/* 80452594-80452598 000B94 0004+00 1/1 0/0 0/0 .sdata2 @10599 */
-SECTION_SDATA2 static f32 lit_10599 = 16.0f;
+ for (; pass < 2; pass++) {
+ if (pass == 0) {
+ GXSetColorUpdate(GX_DISABLE);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ } else {
+ GXSetClipMode(GX_CLIP_ENABLE);
+ }
-/* 80452598-8045259C 000B98 0004+00 2/2 0/0 0/0 .sdata2 @10600 */
-SECTION_SDATA2 static f32 lit_10600 = 0.9f;
+ for (j = 0; j < 3; j++) {
+ color.r = g_env_light.mVrShitaGumoCol.r;
+ color.g = g_env_light.mVrShitaGumoCol.g;
+ color.b = g_env_light.mVrShitaGumoCol.b;
+
+ GXColor color_reg1;
+ color_reg1.r = 0;
+ color_reg1.g = 0;
+ color_reg1.b = 0;
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[j]);
+
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetFog(GX_FOG_NONE, 0.0f, 1.0f, 0.1f, 1.0f, color);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
+
+ if (pass == 0) {
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZCompLoc(GX_FALSE);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE);
+ } else {
+ GXSetAlphaCompare(GX_GREATER, 4, GX_AOP_OR, GX_GREATER, 4);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
+ }
-/* 8045259C-804525A0 000B9C 0004+00 1/1 0/0 0/0 .sdata2 @10601 */
-SECTION_SDATA2 static f32 lit_10601 = -4.0f;
+ GXSetNumIndStages(0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
-/* 804525A0-804525A4 000BA0 0004+00 1/1 0/0 0/0 .sdata2 @10602 */
-SECTION_SDATA2 static f32 lit_10602 = 1.21f;
+ if (pass == 1 && j == 0) {
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ }
-/* 804525A4-804525A8 000BA4 0004+00 1/1 0/0 0/0 .sdata2 @10603 */
-SECTION_SDATA2 static f32 lit_10603 = 708.0f;
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ for (k = 0; k < 100; k++) {
+ cXyz pos[4];
+
+ if (!(vrkumo_packet->mVrkumoEff[k].mAlpha <= 0.0000000001f) && (pass != 0 || !(vrkumo_packet->mVrkumoEff[k].mAlpha < 0.45f))) {
+ f32 spC0;
+ f32 spBC;
+ f32 spB8;
+ f32 spB4;
+ f32 spB0;
+ f32 spAC;
+ f32 spA8;
+ f32 spA4;
+ f32 spA0;
+ f32 sp9C;
+ f32 sp98;
+ f32 sp94;
+ f32 sp90;
+ f32 sp8C;
+
+ f32 sp68;
+ f32 sp64;
+ f32 sp60;
+ f32 sp5C;
+
+ f32 sp58 = ((j + k) & 15) / 16.0f;
+ f32 sp54 = 1.0f - (sp58 * sp58 * sp58);
+ f32 sp50;
+
+ static f32 howa_loop_cnt = 0.0f;
+
+ spAC = 0.6f;
+ spA8 = 0.84f;
+ if (dKy_darkworld_check()) {
+ spAC = 0.8f;
+ spA8 = 0.8f;
+ }
-/* 804525A8-804525AC 000BA8 0004+00 1/1 0/0 0/0 .sdata2 @10604 */
-SECTION_SDATA2 static f32 lit_10604 = 558.0f;
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0) {
+ spA8 = 0.65f;
+ }
-/* 8006A090-8006B190 0649D0 1100+00 0/0 1/1 0/0 .text drawVrkumo__FPA4_fR8_GXColorPPUc */
-void drawVrkumo(Mtx param_0, _GXColor& param_1, u8** param_2) {
- // NONMATCHING
+ spAC += g_env_light.mVrkumoStrength * (spA8 - spAC);
+ sp68 = sp54 * spAC * vrkumo_packet->mVrkumoEff[k].mDistFalloff;
+
+ sp50 = cM_fsin(j + (0.0001f * howa_loop_cnt));
+ sp50 *= vrkumo_packet->mVrkumoEff[k].mDistFalloff;
+ howa_loop_cnt += 1.5f * sp58;
+
+ sp68 += (0.05f * sp68 * sp50);
+ sp64 = sp68 + (sp68 * vrkumo_packet->mVrkumoEff[k].mHeight);
+
+ if (pass == 0) {
+ color.a = 1;
+ } else {
+ f32 sp4C = 1.0f - vrkumo_packet->mVrkumoEff[k].mDistFalloff;
+
+ color.r = (f32)g_env_light.mVrkumoCol.r + (sp4C * ((f32)g_env_light.mVrShitaGumoCol.r - (f32)g_env_light.mVrkumoCol.r));
+ color.g = (f32)g_env_light.mVrkumoCol.g + (sp4C * ((f32)g_env_light.mVrShitaGumoCol.g - (f32)g_env_light.mVrkumoCol.g));
+ color.b = (f32)g_env_light.mVrkumoCol.b + (sp4C * ((f32)g_env_light.mVrShitaGumoCol.b - (f32)g_env_light.mVrkumoCol.b));
+ color.a = 255.0f * vrkumo_packet->mVrkumoEff[k].mAlpha;
+
+ if (j == 1) {
+ color.r *= 0.8f;
+ color.g *= 0.8f;
+ color.b *= 0.8f;
+ } else if (j == 2) {
+ color.r *= 0.92f;
+ color.g *= 0.92f;
+ color.b *= 0.92f;
+ }
+ }
+
+ if (!(vrkumo_packet->mVrkumoEff[k].mAlpha <= 0.000001f)) {
+ GXLoadTexObj(&texobj, GX_TEXMAP0);
+ GXSetTevColor(GX_TEVREG0, color);
+
+ sp60 = sp68 * (0.2f + (0.2f * (k / 100.0f)));
+ sp5C = sp68 * (0.55f + (0.3f * (k / 100.0f)));
+ spFC = vrkumo_packet->mVrkumoEff[k].mPosition;
+
+ spA4 = 0.0f;
+ spA0 = 0.0f;
+
+ if (j != 0) {
+ switch (k & 3) {
+ case 0:
+ if (j == 1) {
+ spA4 = sp60;
+ spA0 = sp5C;
+ } else if (j == 2) {
+ spA4 = sp5C;
+ spA0 = sp60;
+ }
+ break;
+ case 1:
+ if (j == 1) {
+ spA4 = -sp60;
+ spA0 = sp60;
+ } else if (j == 2) {
+ spA4 = -sp5C;
+ spA0 = sp5C;
+ }
+ break;
+ case 2:
+ if (j == 1) {
+ spA4 = sp5C;
+ spA0 = -sp60;
+ } else if (j == 2) {
+ spA4 = sp60;
+ spA0 = -sp5C;
+ }
+ break;
+ default:
+ if (j == 1) {
+ spA4 = -sp5C;
+ spA0 = sp5C;
+ } else if (j == 2) {
+ spA4 = -sp60;
+ spA0 = sp60;
+ }
+ break;
+ }
+ }
+
+ spC0 = JMAFastSqrt((spFC.x * spFC.x) + (spFC.z * spFC.z));
+ spB0 = atan2f(spFC.x, spFC.z);
+ spB4 = atan2f(spFC.y, spC0);
+ spB0 += spA0;
+ spB4 += spA4;
+
+ sp94 = spB4 / 1.9f;
+ if (sp94 > 1.0f) {
+ sp94 = 1.0f;
+ }
+ sp94 *= sp94 * sp94;
+
+ sp98 = 0.6f * sp68 * (1.0f + (16.0f * sp94));
+ sp9C = 0.9f * sp64 * (1.0f + (-4.0f * sp94));
+ sp8C = 0.6f * sp68 * (1.0f + (2.0f * sp94));
+ sp90 = 0.0f;
+ spB8 = spB0 + sp98;
+ spBC = spB4 + sp9C;
+ if (spBC > 1.21f) {
+ spBC = 1.21f;
+ }
+
+ sp144.x = cosf(spBC) * sinf(spB8);
+ sp144.y = sinf(spBC);
+ sp144.z = cosf(spBC) * cosf(spB8);
+ sp12C = sp144;
+
+ spB8 = spB0 - sp98;
+ spBC = spB4 + sp9C;
+ if (spBC > 1.21f) {
+ spBC = 1.21f;
+ }
+
+ sp144.x = cosf(spBC) * sinf(spB8);
+ sp144.y = sinf(spBC);
+ sp144.z = cosf(spBC) * cosf(spB8);
+ sp120 = sp144;
+
+ spB8 = spB0 - sp8C;
+ spBC = spB4 - sp90;
+
+ sp144.x = cosf(spBC) * sinf(spB8);
+ sp144.y = sinf(spBC);
+ sp144.z = cosf(spBC) * cosf(spB8);
+ sp114 = sp144;
+
+ spB8 = spB0 + sp8C;
+ spBC = spB4 - sp90;
+
+ sp144.x = cosf(spBC) * sinf(spB8);
+ sp144.y = sinf(spBC);
+ sp144.z = cosf(spBC) * cosf(spB8);
+ sp108 = sp144;
+
+ pos[0].x = sp12C.x * spCC;
+ pos[0].y = sp12C.y * spCC;
+ pos[0].z = sp12C.z * spCC;
+
+ pos[1].x = sp120.x * spCC;
+ pos[1].y = sp120.y * spCC;
+ pos[1].z = sp120.z * spCC;
+
+ pos[2].x = sp114.x * spCC;
+ pos[2].y = sp114.y * spCC;
+ pos[2].z = sp114.z * spCC;
+
+ pos[3].x = sp108.x * spCC;
+ pos[3].y = sp108.y * spCC;
+ pos[3].z = sp108.z * spCC;
+
+ pos[0] += camera->lookat.eye;
+ pos[1] += camera->lookat.eye;
+ pos[2] += camera->lookat.eye;
+ pos[3] += camera->lookat.eye;
+
+ int sp84 = 0;
+ if (dComIfGd_getView()->fovy > 40.0f) {
+ cXyz spF0;
+ for (int sp3C = 0; sp3C < 4; sp3C++) {
+ spF0 = pos[sp3C];
+ Vec sp48;
+ sp48.x = 100.0f;
+ sp48.y = 100.0f;
+ sp48.z = 100.0f;
+ mDoLib_project(&spF0, &proj);
+
+ if (proj.x > -sp48.x && proj.x < (608.0f + sp48.x) && proj.y > -sp48.y && proj.y < (458.0f + sp48.z)) {
+ break;
+ }
+
+ if (sp3C == 3) {
+ sp84 = 1;
+ }
+ }
+ }
+
+ if (sp84 == 0) {
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 ||
+ strcmp(dComIfGp_getStartStageName(), "D_MN07") == 0 ||
+ strcmp(dComIfGp_getStartStageName(), "D_MN08") == 0 ||
+ strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0 ||
+ strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0 ||
+#if DEBUG
+ strcmp(dComIfGp_getStartStageName(), "MIYAGI") == 0 ||
+ strcmp(dComIfGp_getStartStageName(), "T_SASA0") == 0 ||
+#endif
+ (strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0 && dComIfGp_roomControl_getStayNo() == 0))
+ {
+ sp84 = 0;
+ if (dComIfGd_getView()->fovy > 40.0f) {
+ cXyz spE4;
+ for (int sp2C = 0; sp2C < 4; sp2C++) {
+ spE4 = pos[sp2C];
+ spE4.y = -pos[sp2C].y;
+
+ Vec sp38;
+ sp38.x = 100.0f;
+ sp38.y = 100.0f;
+ sp38.z = 100.0f;
+ mDoLib_project(&spE4, &proj);
+
+ if (proj.x > -sp38.x && proj.x < (608.0f + sp38.x) && proj.y > -sp38.y && proj.y < (458.0f + sp38.z)) {
+ break;
+ }
+
+ if (sp2C == 3) {
+ sp84 = 1;
+ }
+ }
+ }
+
+ if (sp84 == 0) {
+ f32 y_pos;
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+
+ y_pos = -pos[0].y;
+ GXPosition3f32(pos[0].x, y_pos, pos[0].z);
+ GXTexCoord2s16(0, 0);
+
+ y_pos = -pos[1].y;
+ GXPosition3f32(pos[1].x, y_pos, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+
+ y_pos = -pos[2].y;
+ GXPosition3f32(pos[2].x, y_pos, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+
+ y_pos = -pos[3].y;
+ GXPosition3f32(pos[3].x, y_pos, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
+ }
+ }
+ }
+
+ sp88 = 1;
+ }
+
+ if (pass == 0) {
+ GXSetColorUpdate(GX_ENABLE);
+ }
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ dKy_GxFog_set();
+ J3DShape::resetVcdVatCache();
}
/* 8006B190-8006B1A8 065AD0 0018+00 0/0 1/1 0/0 .text dKyr_thunder_init__Fv */
void dKyr_thunder_init() {
- g_env_light.mThunderEff.mStateTimer = 0;
+ g_env_light.mThunderEff.mState = 0;
g_env_light.mThunderEff.field_0x2 = 0;
}
-/* ############################################################################################## */
-/* 8037A578-8037A578 006BD8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8037A607 = "R_SP";
-#pragma pop
+/* 8006B1A8-8006B8DC 065AE8 0734+00 0/0 1/1 0/0 .text dKyr_thunder_move__Fv */
+void dKyr_thunder_move() {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ EF_THUNDER* effect = &envlight->mThunderEff;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+
+ cXyz sp28;
+ int sp10 = 0;
+
+ if (memcmp(dComIfGp_getStartStageName(), "R_SP", 4) == 0) {
+ sp10 = 1;
+ if (strcmp(dComIfGp_getStartStageName(), "R_SP30") == 0 && dComIfGp_roomControl_getStayNo() == 4) {
+ sp10 = 2;
+ }
+ }
+
+ switch (effect->mState) {
+ case 0:
+ effect->mFlashTimer = 0.0f;
+ effect->field_0xc = 0.0f;
+ effect->field_0x10 = 0.0f;
+ effect->field_0x14 = cM_rndFX(10000.0f);
+ effect->field_0x18 = cM_rndFX(10000.0f);
+
+ if (dDemo_c::getMode() != 0) {
+ u8 sp8 = 0;
+ u32 demo_frame = dDemo_c::getFrame();
+ if (g_env_light.mThunderEff.field_0x2 != 0) {
+ sp8 = 1;
+ g_env_light.mThunderEff.field_0x2 = 0;
+ }
+
+ if (sp8 == 1) {
+ effect->mLightInfluence.mPosition = camera->lookat.eye;
+ effect->mLightInfluence.mColor.r = 0;
+ effect->mLightInfluence.mColor.g = 0;
+ effect->mLightInfluence.mColor.b = 0;
+ effect->mLightInfluence.mPow = 90000.0f;
+ effect->mLightInfluence.mFluctuation = 1.0f;
+ dKy_efplight_set(&effect->mLightInfluence);
+ effect->field_0x1c = 0.6f + cM_rndF(0.4f);
+ fopKyM_create(PROC_KY_THUNDER, -1, NULL, NULL, NULL);
+ effect->mState++;
+ }
+ } else if (strcmp(dComIfGp_getStartStageName(), "D_MN09B") == 0 && dComIfGp_event_runCheck()) {
+ if (g_env_light.mThunderEff.field_0x2 != 0) {
+ g_env_light.mThunderEff.field_0x2 = 0;
+
+ effect->mLightInfluence.mPosition = camera->lookat.eye;
+ effect->mLightInfluence.mColor.r = 0;
+ effect->mLightInfluence.mColor.g = 0;
+ effect->mLightInfluence.mColor.b = 0;
+ effect->mLightInfluence.mPow = 90000.0f;
+ effect->mLightInfluence.mFluctuation = 1.0f;
+ dKy_efplight_set(&effect->mLightInfluence);
+ effect->field_0x1c = 0.6f + cM_rndF(0.4f);
+ fopKyM_create(PROC_KY_THUNDER, -1, NULL, NULL, NULL);
+ effect->mState++;
+ }
+ } else if (cM_rndF(1.0f) < 0.007f) {
+ effect->field_0x1c = 0.6f + cM_rndF(0.4f);
+ effect->mState = 11;
+ if (cM_rndF(1.0f) < 0.2f) {
+ fopKyM_create(PROC_KY_THUNDER, -1, NULL, NULL, NULL);
+ }
+ } else if (cM_rndF(1.0f) < 0.005f && g_env_light.mThunderEff.mMode < 10 && sp10 != 1) {
+ effect->mLightInfluence.mPosition = camera->lookat.eye;
+ effect->mLightInfluence.mColor.r = 0;
+ effect->mLightInfluence.mColor.g = 0;
+ effect->mLightInfluence.mColor.b = 0;
+ effect->mLightInfluence.mPow = 90000.0f;
+ effect->mLightInfluence.mFluctuation = 1.0f;
+ dKy_efplight_set(&effect->mLightInfluence);
+ effect->field_0x1c = 0.6f + cM_rndF(0.4f);
+ fopKyM_create(PROC_KY_THUNDER, -1, NULL, NULL, NULL);
+ effect->mState++;
+ }
+ break;
+ case 1:
+ case 11:
+ cLib_addCalc(&effect->mFlashTimer, 1.0f, 0.3f, 0.2f, 0.001f);
+ if (effect->mFlashTimer >= effect->field_0x1c) {
+ if (effect->mState < 10) {
+ mDoAud_mEnvSe_startNearThunderSe();
+ }
+ effect->mState++;
+ }
+ break;
+ case 2:
+ case 12:
+ cLib_addCalc(&effect->mFlashTimer, 0.0f, 0.1f, 0.05f, 0.001f);
+ if (effect->mFlashTimer <= 0.0f) {
+ if (effect->mState < 10) {
+ dKy_efplight_cut(&effect->mLightInfluence);
+ }
+
+ effect->mState = 0;
+ if (g_env_light.mThunderEff.mMode == 0) {
+ g_env_light.mThunderEff.mStatus = 0;
+ }
+ } else if (effect->mFlashTimer <= 0.5f && effect->mFlashTimer > 0.4f && cM_rndF(1.0f) < 0.3f) {
+ effect->field_0x1c = 0.6f + cM_rndF(0.4f);
+ if (cM_rndF(1.0f) < 0.05f) {
+ fopKyM_create(PROC_KY_THUNDER, -1, NULL, NULL, NULL);
+ }
+ effect->mState--;
+ }
+ break;
+ }
-/* 804525AC-804525B0 000BAC 0004+00 1/1 0/0 0/0 .sdata2 @10732 */
-SECTION_SDATA2 static f32 lit_10732 = 90000.0f;
+ if (effect->mState != 0) {
+ if (effect->mState < 10) {
+ dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &sp28);
+ effect->mLightInfluence.mPosition.x = camera->lookat.eye.x - (sp28.x * effect->field_0x14);
+ effect->mLightInfluence.mPosition.y = camera->lookat.eye.y + 2000.0f;
+ effect->mLightInfluence.mPosition.z = camera->lookat.eye.z - (sp28.z * effect->field_0x18);
+
+ if (sp10 == 2) {
+ effect->mLightInfluence.mPosition.x = 195520.0f;
+ effect->mLightInfluence.mPosition.y = 4818.0f;
+ effect->mLightInfluence.mPosition.z = 1385.0f;
+ }
-/* 804525B0-804525B4 000BB0 0004+00 1/1 0/0 0/0 .sdata2 @10733 */
-SECTION_SDATA2 static f32 lit_10733 = 0.007000000216066837f;
+ effect->mLightInfluence.mColor.r = (u8)(effect->mFlashTimer * 75.0f);
+ effect->mLightInfluence.mColor.g = (u8)(effect->mFlashTimer * 130.0f);
+ effect->mLightInfluence.mColor.b = (u8)(effect->mFlashTimer * 150.0f);
-/* 804525B4-804525B8 000BB4 0004+00 1/1 0/0 0/0 .sdata2 @10734 */
-SECTION_SDATA2 static f32 lit_10734 = 195520.0f;
+ if (g_env_light.field_0x12d6 == 0) {
+ if (sp10 == 0) {
+ dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &sp28);
-/* 804525B8-804525BC 000BB8 0004+00 1/1 0/0 0/0 .sdata2 @10735 */
-SECTION_SDATA2 static f32 lit_10735 = 4818.0f;
+ f32 temp_f31;
+ if (sp28.y < 0.2f) {
+ if (sp28.y > 0.0f) {
+ temp_f31 = 1.0f - (sp28.y / 0.2f);
+ } else {
+ temp_f31 = 0.0f;
+ }
+ } else {
+ temp_f31 = 1.0f;
+ }
+ temp_f31 = 0.75f;
+
+ f32 temp_f29 = 0.25f * (1.0f - temp_f31);
+ f32 temp_f30 = effect->mFlashTimer * effect->mFlashTimer * effect->mFlashTimer;
+
+ s16 sp60;
+ s16 sp58;
+ s16 sp50;
+ if (sp10 == 0) {
+ sp60 = -64.0f * temp_f31;
+ sp58 = -64.0f * temp_f31;
+ sp50 = -64.0f * temp_f31;
+ dKy_actor_addcol_amb_set(sp60, sp58, sp50, temp_f30);
+ }
-/* 804525BC-804525C0 000BBC 0004+00 1/1 0/0 0/0 .sdata2 @10736 */
-SECTION_SDATA2 static f32 lit_10736 = 1385.0f;
+ sp60 = -64.0f * temp_f31;
+ sp58 = -64.0f * temp_f31;
+ sp50 = -64.0f * temp_f31;
+ dKy_bg_addcol_amb_set(sp60, sp58, sp50, temp_f30);
-/* 804525C0-804525C4 000BC0 0004+00 1/1 0/0 0/0 .sdata2 @10737 */
-SECTION_SDATA2 static f32 lit_10737 = 75.0f;
+
+ s16 sp48 = -64.0f * temp_f31;
+ s16 sp40 = -64.0f * temp_f31;
+ s16 sp38 = -64.0f * temp_f31;
+ dKy_bg1_addcol_amb_set(sp48, sp40, sp38, 0.4f * temp_f30);
+ }
-/* 804525C4-804525C8 000BC4 0004+00 1/1 0/0 0/0 .sdata2 @10738 */
-SECTION_SDATA2 static f32 lit_10738 = -48.0f;
+ dKy_vrbox_addcol_sky0_set(75, 130, 150, 0.6f * effect->mFlashTimer);
+ dKy_vrbox_addcol_kasumi_set(75, 130, 150, 0.5f * effect->mFlashTimer);
-/* 804525C8-804525CC 000BC8 0004+00 1/1 0/0 0/0 .sdata2 @10739 */
-SECTION_SDATA2 static f32 lit_10739 = 3.0f / 20.0f;
+ if (1.0f == g_env_light.field_0x1210) {
+ dKy_addcol_fog_set(75, 130, 150, 0.4f * effect->mFlashTimer);
+ }
+ }
+ } else {
+ dKy_vrbox_addcol_sky0_set(75, 130, 150, 0.15f * effect->mFlashTimer);
+ dKy_vrbox_addcol_kasumi_set(75, 130, 150, 0.35f * effect->mFlashTimer);
-/* 8006B1A8-8006B8DC 065AE8 0734+00 0/0 1/1 0/0 .text dKyr_thunder_move__Fv */
-void dKyr_thunder_move() {
- // NONMATCHING
+ if (1.0f == g_env_light.field_0x1210) {
+ dKy_addcol_fog_set(75, 130, 150, 0.12f * effect->mFlashTimer);
+ }
+ }
+ }
}
/* 8006B8DC-8006B8E0 06621C 0004+00 0/0 1/1 0/0 .text dKyr_shstar_init__Fv */
@@ -2938,86 +5186,685 @@ void dKyr_shstar_move() {}
/* 8006B8E4-8006B924 066224 0040+00 0/0 1/1 0/0 .text dKyr_odour_init__Fv */
void dKyr_odour_init() {
- dScnKy_env_light_c* env_light = dKy_getEnvlight();
- dKankyo_odour_Packet* odour_p = env_light->mpOdourPacket;
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_odour_Packet* odour_packet = envlight->mpOdourPacket;
for (int i = 0; i < 2000; i++) {
- odour_p->mOdourEff[i].mStatus = 0;
- odour_p->mOdourEff[i].field_0x28 = 0.0f;
- odour_p->mOdourEff[i].field_0x2c = 0.0f;
- odour_p->mOdourEff[i].field_0x24 = 0.0f;
+ odour_packet->mOdourEff[i].mStatus = 0;
+ odour_packet->mOdourEff[i].field_0x28 = 0.0f;
+ odour_packet->mOdourEff[i].field_0x2c = 0.0f;
+ odour_packet->mOdourEff[i].field_0x24 = 0.0f;
}
}
+/* 8006B924-8006BE0C 066264 04E8+00 0/0 1/1 0/0 .text dKyr_odour_move__Fv */
+// NONMATCHING - some small regalloc
+void dKyr_odour_move() {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_odour_Packet* odour_packet = envlight->mpOdourPacket;
+
+ Mtx camMtx;
+ cXyz sp20(0.0f, 1.0f, 0.0f);
+ cXyz sp14;
-/* ############################################################################################## */
-/* 804525CC-804525D0 000BCC 0004+00 1/1 0/0 0/0 .sdata2 @10872 */
-SECTION_SDATA2 static f32 lit_10872 = 78.0f;
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
-/* 804525D0-804525D4 000BD0 0004+00 1/1 0/0 0/0 .sdata2 @10873 */
-SECTION_SDATA2 static f32 lit_10873 = 3.0f / 50.0f;
+ odour_packet->field_0x17724 -= (int)cM_rndF(150.0f) + 430;
+ odour_packet->field_0x17726 -= (int)cM_rndF(50.0f) + 200;
-/* 8006B924-8006BE0C 066264 04E8+00 0/0 1/1 0/0 .text dKyr_odour_move__Fv */
-void dKyr_odour_move() {
- // NONMATCHING
-}
+ for (int i = 0; i < 2000; i++) {
+ EF_ODOUR_EFF* effect = &odour_packet->mOdourEff[i];
+ switch (effect->mStatus) {
+ case 0:
+ break;
+ case 1:
+ case 11:
+ if (cM_rndF(1.0f) < 0.1f) {
+ effect->field_0x24 = 0.0f;
+ effect->mStatus++;
+ }
+ break;
+ case 2:
+ case 12:
+ case 3:
+ case 13:
+ f32 temp_f29 = odour_packet->field_0x17714.abs(effect->mBasePos);
+ f32 temp_f31 = temp_f29 / 4000.0f;
+ if (temp_f31 < 0.0f) {
+ temp_f31 = 0.0f;
+ } else if (temp_f31 > 1.0f) {
+ temp_f31 = 1.0f;
+ }
+ temp_f31 = 0.3f;
+
+ f32 temp_f30 = cM_scos(odour_packet->field_0x17724 + ((s16)(int)temp_f29 * 38));
+ effect->mPosition.x = 60.0f * (temp_f30 * temp_f31);
+ effect->mPosition.z = 60.0f * (temp_f30 * temp_f31);
+
+ if (effect->mStatus < 10) {
+ effect->mPosition.y = 90.0f * ((0.8f + cM_scos(odour_packet->field_0x17724 + ((int)temp_f29 * 160))) * temp_f31);
+ effect->mPosition.y += 110.0f * ((0.8f + cM_ssin(odour_packet->field_0x17726 + ((int)temp_f29 * 45))) * temp_f31);
+ } else {
+ temp_f30 = cM_scos((int)(78.0f * temp_f29) + (int)(f32)odour_packet->field_0x17724);
-/* ############################################################################################## */
-/* 80450F30-80450F34 000430 0004+00 1/1 0/0 0/0 .sbss rot$10882 */
-static f32 rot_10882;
+ effect->mPosition.y = 0.0f;
+ effect->mPosition.x = 150.0f * (temp_f30 * temp_f31);
+ effect->mPosition.z = 140.0f * (temp_f30 * temp_f31);
-/* 80450F34-80450F38 000434 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450F34[4];
+ temp_f30 = cM_ssin(((int)temp_f29 * 45) + (int)(f32)odour_packet->field_0x17726);
+ effect->mPosition.x += 100.0f * (temp_f30 * temp_f31);
+ effect->mPosition.z += 100.0f * (temp_f30 * temp_f31);
+ }
+
+ mDoMtx_stack_c::transS(0.0f, 0.0f, 0.0f);
+ mDoMtx_stack_c::ZXYrotM(effect->mRotX, effect->mRotY, 0);
+ mDoMtx_stack_c::multVec(&sp20, &sp14);
+
+ effect->mBasePos.x += sp14.x * effect->field_0x20;
+ effect->mBasePos.y += sp14.y * effect->field_0x20;
+ effect->mBasePos.z += sp14.z * effect->field_0x20;
+
+ if (effect->mStatus == 2 || effect->mStatus == 12) {
+ cLib_addCalc(&effect->field_0x24, 1.0f, 0.1f, 0.2f, 0.001f);
+ if (effect->field_0x24 >= 1.0f) {
+ effect->mStatus++;
+ }
+ } else if (effect->mStatus == 3 || effect->mStatus == 13) {
+ cLib_addCalc(&effect->field_0x24, 0.0f, 0.1f, 0.06f, 0.001f);
+ if (effect->field_0x24 <= 0.1f) {
+ effect->field_0x24 = 0.0f;
+ effect->mStatus = 0;
+ }
+ }
+ }
+ }
+}
/* 8006BE0C-8006C790 06674C 0984+00 0/0 1/1 0/0 .text dKyr_odour_draw__FPA4_fPPUc */
-void dKyr_odour_draw(Mtx param_0, u8** param_1) {
- // NONMATCHING
+// NONMATCHING - regalloc and out of order instruction
+void dKyr_odour_draw(Mtx drawMtx, u8** tex) {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_odour_Packet* odour_packet = envlight->mpOdourPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+
+ static f32 rot = 0.0f;
+
+ Mtx camMtx;
+ Mtx rotMtx;
+ Mtx sp120;
+ Mtx spF0;
+ cXyz sp70;
+
+ j3dSys.reinitGX();
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ OS_REPORT("\nodour_draw return!!");
+ return;
+ }
+
+ if (envlight->field_0xf40 <= 0.0f || envlight->field_0xf3d != 1) {
+ return;
+ }
+
+ GXSetClipMode(GX_CLIP_DISABLE);
+
+ GXColor color_reg0;
+ GXColor color_reg1;
+
+ switch (dComIfGs_getCollectSmell()) {
+ case fpcNm_ITEM_SMELL_YELIA_POUCH:
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xFF;
+ color_reg0.b = 0xFF;
+
+ color_reg1.r = 0xFF;
+ color_reg1.g = 0x78;
+ color_reg1.b = 0xA8;
+ color_reg1.a = 0xFF;
+ break;
+ case fpcNm_ITEM_SMELL_FISH:
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xA1;
+ color_reg0.b = 0x3B;
+
+ color_reg1.r = 0xD6;
+ color_reg1.g = 0x60;
+ color_reg1.b = 0x32;
+ color_reg1.a = 0xFF;
+ break;
+ case fpcNm_ITEM_SMELL_CHILDREN:
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xDB;
+ color_reg0.b = 0xFF;
+
+ color_reg1.r = 0xE4;
+ color_reg1.g = 0xAC;
+ color_reg1.b = 0x52;
+ color_reg1.a = 0xFF;
+ break;
+ case fpcNm_ITEM_SMELL_MEDICINE:
+ color_reg0.r = 0xD5;
+ color_reg0.g = 0xCE;
+ color_reg0.b = 0xA7;
+
+ color_reg1.r = 0x55;
+ color_reg1.g = 0x78;
+ color_reg1.b = 0x27;
+ color_reg1.a = 0xFF;
+ break;
+ case fpcNm_ITEM_SMELL_POH:
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0xC8;
+ color_reg0.b = 0xFF;
+
+ color_reg1.r = 0x44;
+ color_reg1.g = 0x1A;
+ color_reg1.b = 0x6B;
+ color_reg1.a = 0xFF;
+ break;
+ }
+
+ GXTexObj texobj, fb_texobj;
+ dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP1);
+
+ ResTIMG* fb_timg = mDoGph_gInf_c::getFrameBufferTimg();
+ dDlst_window_c* window = dComIfGp_getWindow(0);
+ camera_class* window_cam = dComIfGp_getCamera(window->getCameraID());
+ dKyr_set_btitex_common(&fb_texobj, fb_timg, GX_TEXMAP0);
+
+ f32 scale = 0.49f;
+ C_MTXLightPerspective(sp120, window_cam->fovy, window_cam->aspect, scale, -scale, 0.5f, 0.5f);
+ cMtx_concat(sp120, j3dSys.getViewMtx(), spF0);
+
+ rot += 2.0f;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+ GXLoadTexMtxImm(spF0, GX_TEXMTX0, GX_MTX3x4);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
+ GXSetNumChans(1);
+ GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(2);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0);
+ GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY);
+ GXSetNumTevStages(2);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C0, GX_CC_C1);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0);
+ GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_COPY);
+ GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetCullMode(GX_CULL_NONE);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetNumIndStages(0);
+
+ for (int i = 0; i < 2000; i++) {
+ EF_ODOUR_EFF* effect = &odour_packet->mOdourEff[i];
+ camera_class* camera = dComIfGp_getCamera(0);
+ cXyz pos[4];
+ Vec sp64, sp58;
+ cXyz sp4C;
+
+ f32 size = effect->field_0x2c;
+ if (effect->mStatus != 0 && effect->mStatus != 1 && effect->mStatus != 11) {
+ sp4C = effect->mBasePos + effect->mPosition;
+
+ f32 var_f31 = camera->lookat.eye.abs(sp4C);
+ if (var_f31 < 250.0f) {
+ if (var_f31 < 150.0f) {
+ var_f31 = 0.0f;
+ } else {
+ var_f31 = (var_f31 - 150.0f) / 150.0f;
+ if (var_f31 < 0.0f) {
+ var_f31 = 0.0f;
+ } else if (var_f31 > 1.0f) {
+ var_f31 = 1.0f;
+ }
+ }
+ } else {
+ var_f31 = 1.0f;
+ }
+
+ f32 temp_f29 = var_f31 * (effect->field_0x28 * (effect->field_0x24 * (envlight->field_0xf40 * envlight->field_0xf40 * envlight->field_0xf40)));
+
+ if (effect->mStatus != 0) {
+ if (!(temp_f29 <= 0.000001f)) {
+ color_reg0.a = 255.0f * temp_f29;
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+
+ sp70 = sp4C;
+
+ sp64.x = -size;
+ sp64.y = size;
+ sp64.z = 0.0f;
+ cMtx_multVec(camMtx, &sp64, &sp58);
+ pos[0].x = sp70.x + sp58.x;
+ pos[0].y = sp70.y + sp58.y;
+ pos[0].z = sp70.z + sp58.z;
+
+ sp64.x = size;
+ sp64.y = size;
+ sp64.z = 0.0f;
+ cMtx_multVec(camMtx, &sp64, &sp58);
+ pos[1].x = sp70.x + sp58.x;
+ pos[1].y = sp70.y + sp58.y;
+ pos[1].z = sp70.z + sp58.z;
+
+ sp64.x = size;
+ sp64.y = -size;
+ sp64.z = 0.0f;
+ cMtx_multVec(camMtx, &sp64, &sp58);
+ pos[2].x = sp70.x + sp58.x;
+ pos[2].y = sp70.y + sp58.y;
+ pos[2].z = sp70.z + sp58.z;
+
+ sp64.x = -size;
+ sp64.y = -size;
+ sp64.z = 0.0f;
+ cMtx_multVec(camMtx, &sp64, &sp58);
+ pos[3].x = sp70.x + sp58.x;
+ pos[3].y = sp70.y + sp58.y;
+ pos[3].z = sp70.z + sp58.z;
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
+ }
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
}
/* 8006C790-8006C85C 0670D0 00CC+00 0/0 1/1 0/0 .text dKyr_mud_init__Fv */
void dKyr_mud_init() {
- dScnKy_env_light_c* light = dKy_getEnvlight();
- light->mpMudPacket->mpMoyaRes = (u8*)dComIfG_getObjectRes("Always", 0x53);
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ envlight->mpMudPacket->mpMoyaRes = (u8*)dComIfG_getObjectRes("Always", 0x53);
for (int i = 0; i < 100; i++) {
- light->mpMudPacket->mEffect[i].mStatus = 0;
+ envlight->mpMudPacket->mEffect[i].mStatus = 0;
}
- light->mpMudPacket->mEffectNum = 0;
+ envlight->mpMudPacket->mEffectNum = 0;
if (!dComIfGs_isStageBossEnemy()) {
- light->mpMudPacket->field_0x1c3c = 1.0f;
+ envlight->mpMudPacket->field_0x1c3c = 1.0f;
} else {
- light->mpMudPacket->field_0x1c3c = 0.0f;
+ envlight->mpMudPacket->field_0x1c3c = 0.0f;
}
}
-
-/* ############################################################################################## */
-/* 804525D4-804525D8 000BD4 0004+00 1/1 0/0 0/0 .sdata2 @11302 */
-SECTION_SDATA2 static f32 lit_11302 = 770.0f;
-
/* 8006C85C-8006D01C 06719C 07C0+00 0/0 1/1 0/0 .text dKyr_mud_move__Fv */
void dKyr_mud_move() {
- // NONMATCHING
-}
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_mud_Packet* mud_packet = g_env_light.mpMudPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
+
+ cXyz spA4;
+ cXyz sp98;
+ cXyz sp8C;
+ cXyz sp80;
+ cXyz wind_vecpow = dKyw_get_wind_vecpow();
+ cXyz sp68;
+ cXyz sp5C;
+
+ dBgS_GndChk gndchk;
+ f32 sp34 = 800.0f;
+ f32 temp_f31 = 700.0f;
+ f32 sp30 = 0.0f;
+ f32 sp2C = 0.0f;
+
+ if (g_env_light.field_0x1048 != 0 || (g_env_light.field_0x1048 == 0 && mud_packet->field_0x1c3c <= 0.0f)) {
+ mud_packet->mEffectNum = (s16)g_env_light.field_0x1048;
+ }
+
+ if (g_env_light.field_0x1048 != 0) {
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 && g_env_light.mColPatCurr == 6) {
+ dComIfGs_PolyDamageOff_Set(1);
+ cLib_addCalc(&mud_packet->field_0x1c3c, 0.0f, 0.1f, 0.001f, 0.000001f);
+ } else {
+ cLib_addCalc(&mud_packet->field_0x1c3c, 1.0f, 0.2f, 0.05f, 0.01f);
+ }
+ } else {
+ cLib_addCalc(&mud_packet->field_0x1c3c, 0.0f, 0.2f, 0.05f, 0.01f);
+ }
+
+ if (mud_packet->mEffectNum == 0) {
+ return;
+ }
+
+ dKy_set_eyevect_calc2(camera, &spA4, sp34, sp30);
+ f32 sp3C = dKyw_get_wind_pow();
+ f32 sp38 = -99999.898f;
+
+ u8 sp8;
+ for (int i = mud_packet->mEffectNum - 1; i >= 0; i--) {
+ sp8 = 0;
+
+ switch (mud_packet->mEffect[i].mStatus) {
+ case 0:
+ mud_packet->mEffect[i].field_0x34 = 2.5f * (0.5f + cM_rndF(0.5f));
+ mud_packet->mEffect[i].field_0x40 = 0;
+ mud_packet->mEffect[i].field_0x42 = cM_rndFX(65536.0f);
+ mud_packet->mEffect[i].mBasePos.x = spA4.x;
+ mud_packet->mEffect[i].mBasePos.y = 0.0f;
+ mud_packet->mEffect[i].mBasePos.z = spA4.z;
+ mud_packet->mEffect[i].mPosition.x = cM_rndFX(temp_f31);
+ mud_packet->mEffect[i].mPosition.y = 0.0f;
+ mud_packet->mEffect[i].mPosition.z = cM_rndFX(temp_f31);
+ mud_packet->mEffect[i].field_0x38 = 0.0f;
+ mud_packet->mEffect[i].field_0x3c = 0.0f;
+ mud_packet->mEffect[i].field_0x28 = cM_rndF(360.0f);
+ mud_packet->mEffect[i].field_0x2c = cM_rndF(360.0f);
+ mud_packet->mEffect[i].field_0x30 = cM_rndF(360.0f);
+
+ mud_packet->mEffect[i].mStatus++;
+ break;
+ case 1:
+ case 2:
+ case 3:
+ if (mud_packet->mEffect[i].mStatus == 1) {
+ f32 sp24 = 4.0f;
+ f32 sp28 = cM_fsin(mud_packet->mEffect[i].field_0x28);
+
+ mud_packet->mEffect[i].mPosition.x += sp28 * mud_packet->mEffect[i].field_0x34;
+ mud_packet->mEffect[i].mPosition.z += mud_packet->mEffect[i].field_0x34 * cM_fsin(mud_packet->mEffect[i].field_0x30);
+ mud_packet->mEffect[i].field_0x28 += 0.03f;
+ mud_packet->mEffect[i].field_0x2c += 0.02f;
+ mud_packet->mEffect[i].field_0x30 += 0.01f;
+ }
+
+ cXyz sp50;
+ sp68.x = mud_packet->mEffect[i].mBasePos.x + mud_packet->mEffect[i].mPosition.x;
+ sp68.y = 0.0f;
+ sp68.z = mud_packet->mEffect[i].mBasePos.z + mud_packet->mEffect[i].mPosition.z;
+
+ sp50 = spA4;
+ sp50.y = sp68.y;
+
+ f32 sp20 = sp68.abs(sp50);
+ if (sp20 > temp_f31) {
+ sp8 = 1;
+ if (mud_packet->mEffect[i].field_0x38 < 0.01f) {
+ mud_packet->mEffect[i].mBasePos = sp50;
-/* ############################################################################################## */
-/* 80450F38-80450F3C 000438 0004+00 1/1 0/0 0/0 .sbss rot$11307 */
-static f32 rot_11307;
+ if (sp68.abs(sp50) > temp_f31 + (0.1f * temp_f31)) {
+ mud_packet->mEffect[i].mPosition.x = cM_rndFX(temp_f31);
+ mud_packet->mEffect[i].mPosition.y = 0.0f;
+ mud_packet->mEffect[i].mPosition.z = cM_rndFX(temp_f31);
+ } else {
+ get_vectle_calc(&sp68, &sp50, &sp5C);
+ sp5C.x += cM_rndFX(0.2f);
+ sp5C.y = 0.0f;
+ sp5C.z += cM_rndFX(0.2f);
+
+ mud_packet->mEffect[i].mPosition.x = sp5C.x * temp_f31;
+ mud_packet->mEffect[i].mPosition.y = 0.0f;
+ mud_packet->mEffect[i].mPosition.z = sp5C.z * temp_f31;
+ }
+ }
+ }
+ }
+
+ f32 sp1C = 0.05f;
+ f32 sp18 = 1.0f;
+ f32 sp14 = 0.0f;
+
+ mud_packet->mEffect[i].mBasePos.y = 0.0f;
+ mud_packet->mEffect[i].mPosition.y = sp14 - (1.0f + (f32)i);
+
+ f32 sp10 = 1.0f;
+ if (sp8 != 0) {
+ sp10 = 0.0f;
+ }
+
+ cLib_addCalc(&mud_packet->mEffect[i].field_0x38, sp10 * mud_packet->field_0x1c3c, 0.25f, sp1C, 0.000001f);
-/* 80450F3C-80450F40 00043C 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450F3C[4];
+ sp68.x = mud_packet->mEffect[i].mBasePos.x + mud_packet->mEffect[i].mPosition.x;
+ sp68.y = camera->lookat.eye.y;
+ sp68.z = mud_packet->mEffect[i].mBasePos.z + mud_packet->mEffect[i].mPosition.z;
-/* 804525D8-804525DC 000BD8 0004+00 1/1 0/0 0/0 .sdata2 @11508 */
-SECTION_SDATA2 static f32 lit_11508 = 13.0f / 10.0f;
+ f32 spC = sp68.abs(camera->lookat.eye);
+ f32 var_f30 = spC / 400.0f;
+ if (var_f30 > 1.0f) {
+ var_f30 = 1.0f;
+ }
-/* 804525DC-804525E0 000BDC 0004+00 1/1 0/0 0/0 .sdata2 @11509 */
-SECTION_SDATA2 static f32 lit_11509 = 12.0f;
+ mud_packet->mEffect[i].field_0x3c = var_f30;
+ }
+}
/* 8006D01C-8006D914 06795C 08F8+00 0/0 1/1 0/0 .text dKyr_mud_draw__FPA4_fPPUc */
-void dKyr_mud_draw(Mtx param_0, u8** param_1) {
- // NONMATCHING
+void dKyr_mud_draw(Mtx drawMtx, u8** tex) {
+ dKankyo_mud_Packet* mud_packet = g_env_light.mpMudPacket;
+ dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
+
+ static f32 rot = 0.0f;
+
+ Mtx camMtx;
+ Mtx rotMtx;
+ cXyz pos[4];
+ cXyz sp70;
+ Vec sp64;
+
+ GXColorS10 sp50;
+ GXColor color_reg0;
+ GXColor color_reg1;
+
+ camera_class* sp34 = (camera_class*)dComIfGp_getCamera(0);
+ s16 spC = g_env_light.mTerrainAmbienceBG[1].a;
+ dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
+
+ if (mud_packet->mEffectNum != 0) {
+ j3dSys.reinitGX();
+ f32 var_f31 = 255.0f;
+
+ if (g_env_light.field_0x1300 != -1) {
+ spC = g_env_light.field_0x1300;
+ }
+
+ sp50.r = 1.3f * g_env_light.mTerrainAmbienceBG[1].r;
+ sp50.g = 1.3f * g_env_light.mTerrainAmbienceBG[1].g;
+ sp50.b = 1.3f * g_env_light.mTerrainAmbienceBG[1].b;
+
+ if (sp50.r >= 0xFF) {
+ sp50.r = 0xFF;
+ }
+ if (sp50.g >= 0xFF) {
+ sp50.g = 0xFF;
+ }
+ if (sp50.b >= 0xFF) {
+ sp50.b = 0xFF;
+ }
+
+ color_reg0.r = sp50.r;
+ color_reg0.g = sp50.g;
+ color_reg0.b = sp50.b;
+ color_reg0.a = 0xFF;
+
+ var_f31 = spC;
+ var_f31 *= spC / 255.0f;
+ var_f31 *= 0.25f + (0.75f * (g_env_light.field_0x1302 / 255.0f));
+
+ if (lenz_packet != NULL && sun_packet->mVisibility > 0.000001f) {
+ var_f31 = (u8)(var_f31 * (1.0f - (sun_packet->mVisibility * (1.0f - (lenz_packet->mDistFalloff * lenz_packet->mDistFalloff * lenz_packet->mDistFalloff)))));
+ }
+
+ color_reg1.r = 0.5f * g_env_light.mTerrainAmbienceBG[1].r;
+ color_reg1.g = 0.5f * g_env_light.mTerrainAmbienceBG[1].g;
+ color_reg1.b = 0.5f * g_env_light.mTerrainAmbienceBG[1].b;
+ color_reg1.a = 0xFF;
+
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0) {
+ f32 temp_f29 = 1.0f - mud_packet->field_0x1c3c;
+
+ color_reg0.r = 0x60;
+ color_reg0.g = 0x41;
+ color_reg0.b = 0x45;
+ color_reg0.a = 0x64;
+
+ var_f31 = 100.0f;
+
+ color_reg1.r = 0xD1;
+ color_reg1.g = 0xEF;
+ color_reg1.b = 0;
+
+ color_reg0.r = (u8)(color_reg0.r + (s16)((20.0f - color_reg0.r) * temp_f29));
+ color_reg0.g = (u8)(color_reg0.g + (s16)((100.0f - color_reg0.g) * temp_f29));
+ color_reg0.b = (u8)(color_reg0.b + (s16)((120.0f - color_reg0.b) * temp_f29));
+ color_reg0.a = (u8)(color_reg0.a + (s16)(-(f32)color_reg0.b * temp_f29));
+
+ var_f31 = color_reg0.a;
+
+ color_reg1.r = (u8)(color_reg1.r + (s16)((20.0f - color_reg1.r) * temp_f29));
+ color_reg1.g = (u8)(color_reg1.g + (s16)((100.0f - color_reg1.g) * temp_f29));
+ color_reg1.b = (u8)(color_reg1.b + (s16)((120.0f - color_reg1.b) * temp_f29));
+ }
+
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ return;
+ }
+
+ if (g_env_light.mCameraInWater == 0) {
+ for (int i = 0; i < 1; i++) {
+ GXTexObj texobj;
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
+
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+
+ if (g_env_light.mCameraInWater != 0) {
+ GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_ENABLE);
+ } else {
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ GXSetNumIndStages(0);
+ dKr_cullVtx_Set();
+
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+
+ for (int j = 0; j < mud_packet->mEffectNum; j++) {
+ fopAc_ac_c* sp28 = dComIfGp_getPlayer(0);
+ cXyz sp58;
+ sp70.x = mud_packet->mEffect[j].mBasePos.x + mud_packet->mEffect[j].mPosition.x;
+ sp70.y = mud_packet->mEffect[j].mBasePos.y + mud_packet->mEffect[j].mPosition.y;
+ sp70.z = mud_packet->mEffect[j].mBasePos.z + mud_packet->mEffect[j].mPosition.z;
+
+ color_reg0.a = mud_packet->mEffect[j].field_0x38 * var_f31;
+
+ GXLoadTexObj(&texobj, GX_TEXMAP0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+
+ f32 sp30 = 1.0f;
+
+ f32 temp_f26 = 45.0f * (12.0f * sp30 * mud_packet->mEffect[j].field_0x3c);
+ temp_f26 *= 0.25f;
+ f32 temp_f30 = temp_f26;
+
+ f32 temp_f28 = mud_packet->mEffect[j].field_0x3c * cM_fsin(mud_packet->mEffect[j].field_0x28 * (5.0f * mud_packet->mEffect[j].field_0x3c));
+ f32 temp_f27 = mud_packet->mEffect[j].field_0x3c * cM_fcos(mud_packet->mEffect[j].field_0x2c * (5.0f * mud_packet->mEffect[j].field_0x3c));
+
+ sp64.x = temp_f30 - temp_f27;
+ sp64.y = 0.0f;
+ sp64.z = temp_f30 - temp_f28;
+ pos[0].x = sp70.x + sp64.x;
+ pos[0].y = sp70.y + sp64.y;
+ pos[0].z = sp70.z + sp64.z;
+
+ sp64.x = -temp_f30 - temp_f27;
+ sp64.y = 0.0f;
+ sp64.z = temp_f30 - temp_f28;
+ pos[1].x = sp70.x + sp64.x;
+ pos[1].y = sp70.y + sp64.y;
+ pos[1].z = sp70.z + sp64.z;
+
+ sp64.x = -temp_f30 - temp_f27;
+ sp64.y = 0.0f;
+ sp64.z = -temp_f30 - temp_f28;
+ pos[2].x = sp70.x + sp64.x;
+ pos[2].y = sp70.y + sp64.y;
+ pos[2].z = sp70.z + sp64.z;
+
+ sp64.x = temp_f30 - temp_f27;
+ sp64.y = 0.0f;
+ sp64.z = -temp_f30 - temp_f28;
+ pos[3].x = sp70.x + sp64.x;
+ pos[3].y = sp70.y + sp64.y;
+ pos[3].z = sp70.z + sp64.z;
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
+ }
+ }
}
/* 8006D914-8006DA04 068254 00F0+00 0/0 1/1 1/1 .text dKyr_evil_init__Fv */
@@ -3040,103 +5887,477 @@ void dKyr_evil_init() {
/* 8006DA04-8006DA7C 068344 0078+00 0/0 1/1 0/0 .text dKyr_evil_move__Fv */
void dKyr_evil_move() {
- dKankyo_evil_Packet* evil_p = g_env_light.mpEvilPacket;
+ dKankyo_evil_Packet* evil_packet = g_env_light.mpEvilPacket;
cXyz vec = dKyw_get_wind_vecpow();
dBgS_GndChk gndchk;
- for (int i = 0; i < evil_p->mEffectNum; i++) {
- }
+ for (int i = 0; i < evil_packet->mEffectNum; i++) {}
}
-/* ############################################################################################## */
-/* 80450F40-80450F44 000440 0004+00 1/1 0/0 0/0 .sbss rot$11586 */
-static f32 rot_11586;
+/* 8006DA7C-8006E448 0683BC 09CC+00 1/1 0/0 0/0 .text dKyr_evil_draw2__FPA4_fPPUc */
+static void dKyr_evil_draw2(Mtx drawMtx, u8** tex) {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_evil_Packet* evil_packet = envlight->mpEvilPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+
+ static f32 rot = 0.0f;
+
+ Mtx camMtx;
+ Mtx rotMtx;
+ cXyz spA0;
+ f32 sp48 = fabsf(cM_ssin(g_Counter.mCounter0 * 40));
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
+
+ if (evil_packet != NULL) {
+ j3dSys.reinitGX();
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ OS_REPORT("\nevil_draw return!!");
+ return;
+ }
+
+ GXColor color_reg0;
+ GXColor color_reg1;
+
+ color_reg1.r = 255.0f * sp48;
+ color_reg1.g = 120.0f * sp48;
+ color_reg1.b = 0;
+ color_reg1.a = 0xFF;
+
+ color_reg0.r = 0xFF;
+ color_reg0.g = 0x9F;
+ color_reg0.b = 0x87;
+ color_reg0.a = 0xFF;
+
+ GXTexObj texobj;
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[1]);
+
+ rot += 0.7f;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_A0, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_COPY);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetCullMode(GX_CULL_NONE);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetNumIndStages(0);
+
+ for (int i = 0; i < g_env_light.field_0x1054; i++) {
+ EF_EVIL_EFF* effect = &evil_packet->mEffect[i];
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
+
+ cXyz pos[4];
+ Vec sp94, sp88;
+ cXyz sp7C;
+ f32 var_f31 = effect->field_0x38;
+
+ if (effect->mStatus != 0 && (i & 1)) {
+ f32 temp_f30 = 0.2f + (0.8f * fabsf(cM_ssin(effect->field_0x3c)));
+ sp7C = effect->mBasePos + effect->mPosition;
+
+ if ((strcmp(dComIfGp_getStartStageName(), "D_MN08") != 0 || dComIfGp_roomControl_getStayNo() != 1 || i < 1600 || !(camera->lookat.eye.x >= -5000.0f)) && !(var_f31 > 9000.0f)) {
+ if (dComIfGd_getView()->fovy > 40.0f) {
+ cXyz proj;
+ Vec sp34;
+ sp34.x = 80.0f;
+ sp34.y = 80.0f;
+ sp34.z = 80.0f;
+
+ mDoLib_project(&sp7C, &proj);
+
+ if (!(proj.x > -sp34.x) || !(proj.x < (608.0f + sp34.x)) ||
+ !(proj.y > -sp34.y) || !(proj.y < (458.0f + sp34.z)))
+ {
+ continue;
+ }
+ }
-/* 80450F44-80450F48 000444 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450F44[4];
+ f32 sp40;
+ f32 sp3C = 150.0f;
+ f32 sp38 = 250.0f;
-/* 804525E0-804525E4 000BE0 0004+00 1/1 0/0 0/0 .sdata2 @11882 */
-SECTION_SDATA2 static f32 lit_11882 = -5000.0f;
+ f32 var_f29 = camera->lookat.eye.abs(sp7C);
+ if (var_f29 < sp38) {
+ if (var_f29 < sp3C) {
+ var_f29 = 0.0f;
+ } else {
+ var_f29 = (var_f29 - sp3C) / (sp38 - sp3C);
+ if (var_f29 < 0.0f) {
+ var_f29 = 0.0f;
+ } else if (var_f29 > 1.0f) {
+ var_f29 = 1.0f;
+ }
+ }
+ } else {
+ var_f29 = 1.0f;
+ }
-/* 804525E4-804525E8 000BE4 0004+00 2/2 0/0 0/0 .sdata2 @11883 */
-SECTION_SDATA2 static f32 lit_11883 = 9000.0f;
+ sp40 = effect->field_0x24 * var_f29;
+ var_f31 *= 0.5f + (0.5f * var_f29);
+ var_f31 *= 0.2f + (0.4f * temp_f30);
+ if (dComIfGp_roomControl_getStayNo() == 0) {
+ var_f31 = 100.0f;
+ }
-/* 804525E8-804525EC 000BE8 0004+00 2/2 0/0 0/0 .sdata2 @11884 */
-SECTION_SDATA2 static f32 lit_11884 = 688.0f;
+ if (!(sp40 <= 0.000001f)) {
+ color_reg0.a = 255.0f * sp40;
-/* 804525EC-804525F0 000BEC 0004+00 2/2 0/0 0/0 .sdata2 @11885 */
-SECTION_SDATA2 static f32 lit_11885 = 538.0f;
+ if (daPy_py_c::checkNowWolfPowerUp()) {
+ color_reg0.r = 80.0f * temp_f30;
+ color_reg0.g = 0;
+ color_reg0.b = 0;
+ color_reg0.a = 0x28;
-/* 804525F0-804525F4 000BF0 0004+00 1/1 0/0 0/0 .sdata2 @11886 */
-SECTION_SDATA2 static f32 lit_11886 = 159.0f;
+ color_reg1.r = 0x1E;
+ color_reg1.g = 0;
+ color_reg1.b = 0;
+ color_reg1.a = 0x28;
+ } else {
+ color_reg1.r = 255.0f * temp_f30;
+ color_reg1.g = 120.0f * (temp_f30 * temp_f30);
+ color_reg1.b = 20.0f * (temp_f30 * temp_f30 * temp_f30);
-/* 804525F4-804525F8 000BF4 0004+00 1/1 0/0 0/0 .sdata2 @11887 */
-SECTION_SDATA2 static f32 lit_11887 = 135.0f;
+ color_reg0.r = 255.0f * temp_f30;
+ color_reg0.g = 159.0f * (temp_f30 * temp_f30);
+ color_reg0.b = 135.0f * (temp_f30 * temp_f30);
+ }
-/* 8006DA7C-8006E448 0683BC 09CC+00 1/1 0/0 0/0 .text dKyr_evil_draw2__FPA4_fPPUc */
-static void dKyr_evil_draw2(Mtx param_0, u8** param_1) {
- // NONMATCHING
+ color_reg0.a = 0xFF;
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+
+ spA0 = sp7C;
+
+ sp94.x = -var_f31;
+ sp94.y = var_f31;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[0].x = spA0.x + sp88.x;
+ pos[0].y = spA0.y + sp88.y;
+ pos[0].z = spA0.z + sp88.z;
+
+ sp94.x = var_f31;
+ sp94.y = var_f31;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[1].x = spA0.x + sp88.x;
+ pos[1].y = spA0.y + sp88.y;
+ pos[1].z = spA0.z + sp88.z;
+
+ sp94.x = var_f31;
+ sp94.y = -var_f31;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[2].x = spA0.x + sp88.x;
+ pos[2].y = spA0.y + sp88.y;
+ pos[2].z = spA0.z + sp88.z;
+
+ sp94.x = -var_f31;
+ sp94.y = -var_f31;
+ sp94.z = 0.0f;
+ cMtx_multVec(camMtx, &sp94, &sp88);
+ pos[3].x = spA0.x + sp88.x;
+ pos[3].y = spA0.y + sp88.y;
+ pos[3].z = spA0.z + sp88.z;
+
+ for (int j = 0; j < 1; j++) {
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
+ }
+ }
+ }
+
+ GXSetClipMode(GX_CLIP_ENABLE);
+ J3DShape::resetVcdVatCache();
+ }
}
/* 8006E448-8006E6B0 068D88 0268+00 1/1 0/0 0/0 .text dKyr_near_bosslight_check__F4cXyz
*/
-static f32 dKyr_near_bosslight_check(cXyz param_0) {
- f32 dist = 10000000.0f;
- dScnKy_env_light_c* env_light = dKy_getEnvlight();
+static f32 dKyr_near_bosslight_check(cXyz pos) {
+ f32 nearest_dist = 10000000.0f;
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
for (int i = 0; i < 6; i++) {
- if (env_light->field_0x0c18[i].field_0x26 == 1) {
- if (env_light->field_0x0c18[i].mPos.abs(param_0) < dist) {
- dist = env_light->field_0x0c18[i].mPos.abs(param_0);
+ if (envlight->field_0x0c18[i].field_0x26 == 1) {
+ if (envlight->field_0x0c18[i].mPos.abs(pos) < nearest_dist) {
+ nearest_dist = envlight->field_0x0c18[i].mPos.abs(pos);
}
}
}
- return dist;
+ return nearest_dist;
}
+/* 8006E6B0-8006F160 068FF0 0AB0+00 0/0 1/1 0/0 .text dKyr_evil_draw__FPA4_fPPUc */
+void dKyr_evil_draw(Mtx drawMtx, u8** tex) {
+ dScnKy_env_light_c* envlight = dKy_getEnvlight();
+ dKankyo_evil_Packet* evil_packet = envlight->mpEvilPacket;
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
-/* ############################################################################################## */
-/* 80450F48-80450F4C 000448 0004+00 1/1 0/0 0/0 .sbss rot$11958 */
-static f32 rot_11958;
+ static f32 rot = 0.0f;
-/* 80450F4C-80450F50 00044C 0004+00 1/1 0/0 0/0 .sbss None */
-static u8 data_80450F4C[4];
+ Mtx camMtx;
+ Mtx rotMtx;
+ cXyz spC8;
-/* 804525FC-80452600 000BFC 0004+00 1/1 0/0 0/0 .sdata2 @12252 */
-SECTION_SDATA2 static f32 lit_12252 = 69.0f;
+ GXColor color_reg0;
+ GXColor color_reg1;
+ f32 sp64 = fabsf(cM_ssin(g_Counter.mCounter0 * 40));
+ f32 sp60 = fabsf(cM_ssin(g_Counter.mCounter0 * 215));
-/* 80452600-80452604 000C00 0004+00 1/1 0/0 0/0 .sdata2 @12253 */
-SECTION_SDATA2 static f32 lit_12253 = 137.0f;
+ if (evil_packet != NULL) {
+ j3dSys.reinitGX();
+ if (dComIfGd_getView() != NULL) {
+ MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx);
+ } else {
+ OS_REPORT("\nevil_draw return!!");
+ return;
+ }
-/* 80452604-80452608 000C04 0004+00 1/1 0/0 0/0 .sdata2 @12254 */
-SECTION_SDATA2 static f32 lit_12254 = 750.0f;
+ color_reg0.r = 69.0f * sp64;
+ color_reg0.g = 45.0f * sp64;
+ color_reg0.b = 137.0f * sp64;
+ color_reg0.a = 0;
+
+ color_reg1.r = 10;
+ color_reg1.g = 0;
+ color_reg1.b = 10;
+ color_reg1.a = 255;
+
+ GXTexObj texobj;
+ dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
+
+ rot += 1.0f;
+ MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot));
+ MTXConcat(camMtx, rotMtx, camMtx);
+
+ GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
+ GXSetCurrentMtx(GX_PNMTX0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
+ GXClearVtxDesc();
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXSetNumChans(0);
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+ GXSetNumTexGens(1);
+ GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
+ GXSetNumTevStages(1);
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+ GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
+ GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_A0, GX_CA_ZERO);
+ GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
+ GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE);
+ GXSetCullMode(GX_CULL_NONE);
+ GXSetClipMode(GX_CLIP_DISABLE);
+ GXSetNumIndStages(0);
-/* 80452608-8045260C 000C08 0004+00 1/1 0/0 0/0 .sdata2 @12255 */
-SECTION_SDATA2 static f32 lit_12255 = 9.0f / 5.0f;
+ dComIfG_Ccsp()->PrepareMass();
-/* 8045260C-80452610 000C0C 0004+00 1/1 0/0 0/0 .sdata2 @12256 */
-SECTION_SDATA2 static f32 lit_12256 = 165.0f;
+ for (int i = 0; i < g_env_light.field_0x1054; i++) {
+ EF_EVIL_EFF* effect = &evil_packet->mEffect[i];
+ camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
-/* 80452610-80452614 000C10 0004+00 1/1 0/0 0/0 .sdata2 @12257 */
-SECTION_SDATA2 static f32 lit_12257 = 155.0f;
+ cXyz pos[4];
+ Vec spBC, spB0;
+ cXyz spA4;
-/* 80452614-80452618 000C14 0004+00 1/1 0/0 0/0 .sdata2 @12258 */
-SECTION_SDATA2 static f32 lit_12258 = -3000.0f;
+ f32 temp_f30 = effect->field_0x38;
-/* 80452618-8045261C 000C18 0004+00 1/1 0/0 0/0 .sdata2 @12259 */
-SECTION_SDATA2 static f32 lit_12259 = 127.0f;
+ if (effect->mStatus != 0) {
+ spA4 = effect->mBasePos + effect->mPosition;
-/* 8045261C-80452620 000C1C 0004+00 1/1 0/0 0/0 .sdata2 @12260 */
-SECTION_SDATA2 static f32 lit_12260 = 115.0f;
+ if (!(temp_f30 > 9000.0f)) {
+ if (dComIfGd_getView()->fovy > 40.0f) {
+ cXyz proj;
+ Vec sp44;
+ sp44.x = 80.0f;
+ sp44.y = 80.0f;
+ sp44.z = 80.0f;
-/* 8006E6B0-8006F160 068FF0 0AB0+00 0/0 1/1 0/0 .text dKyr_evil_draw__FPA4_fPPUc */
-void dKyr_evil_draw(Mtx param_0, u8** param_1) {
- // NONMATCHING
-}
+ mDoLib_project(&spA4, &proj);
-/* 8006F160-8006F168 069AA0 0008+00 0/0 1/0 0/0 .text getKandelaarFlamePos__9daPy_py_cFv
- */
-cXyz* daPy_py_c::getKandelaarFlamePos() {
- return NULL;
+ if (!(proj.x > -sp44.x) || !(proj.x < (608.0f + sp44.x)) ||
+ !(proj.y > -sp44.y) || !(proj.y < (458.0f + sp44.z)))
+ {
+ continue;
+ }
+ }
+
+ f32 sp5C;
+ f32 sp50 = 50.0f;
+ f32 sp4C = 800.0f;
+
+ f32 var_f31 = camera->lookat.eye.abs(spA4);
+ if (var_f31 < sp4C) {
+ if (var_f31 < sp50) {
+ var_f31 = 0.0f;
+ } else {
+ var_f31 = (var_f31 - sp50) / (sp4C - sp50);
+ if (var_f31 < 0.0f) {
+ var_f31 = 0.0f;
+ } else if (var_f31 > 1.0f) {
+ var_f31 = 1.0f;
+ }
+ var_f31 = 1.0f - var_f31;
+ var_f31 *= var_f31;
+ var_f31 = 1.0f - var_f31;
+ }
+ } else {
+ var_f31 = 1.0f;
+ }
+
+ f32 sp54 = effect->field_0x24 * var_f31;
+ temp_f30 *= var_f31;
+ temp_f30 = 1.8f * temp_f30;
+
+ if (!(sp54 <= 0.000001f)) {
+ color_reg0.a = 255.0f * sp54;
+
+ f32 bosslight_dist = dKyr_near_bosslight_check(spA4);
+ if (bosslight_dist < 5000.0f) {
+ f32 sp34 = (1.0f - (bosslight_dist / 5000.0f));
+ sp5C = 0.1f + (0.9f * sp34 * fabsf(cM_ssin(g_Counter.mCounter0 * ((i & 7) + 601))));
+ } else {
+ sp5C = 0.0f;
+ }
+ cLib_addCalc(&effect->field_0x2c, sp5C, 0.5f, 0.1f, 0.01f);
+
+ daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
+ if (player != NULL && player->getKandelaarFlamePos() != NULL) {
+ color_reg1.r = 120.0f * effect->field_0x2c;
+ color_reg1.g = 140.0f * effect->field_0x2c;
+ color_reg1.b = 165.0f * effect->field_0x2c;
+ } else {
+ color_reg1.r = 80.0f * effect->field_0x2c;
+ color_reg1.g = 130.0f * effect->field_0x2c;
+ color_reg1.b = 155.0f * effect->field_0x2c;
+ }
+
+ if (dComIfGp_roomControl_getStayNo() == 0 && effect->mBasePos.y < 0.0f) {
+ f32 sp48 = (1.0f - effect->mBasePos.y / -3000.0f);
+ if (sp48 > 1.0f) {
+ sp48 = 1.0f;
+ } else if (sp48 < 0.0f) {
+ sp48 = 0.0f;
+ }
+
+ color_reg0.a = 255.0f * sp48;
+ }
+
+ f32 sp2C = (f32)i / (f32)g_env_light.field_0x1054;
+ sp2C = (i & 15) / 15.0f;
+
+ if (daPy_py_c::checkNowWolfPowerUp()) {
+ color_reg0.r = (int)(127.0f * fabsf(sp2C - sp64)) + 0x80;
+ color_reg0.g = 0x80;
+ color_reg0.b = (int)(127.0f * fabsf(sp2C - sp64)) + 0x80;
+ color_reg0.a = 0x23;
+ } else {
+ f32 sp28 = 0.0f;
+ if (effect->mStatus == 2) {
+ sp28 = 1.0f - effect->field_0x24;
+ }
+
+ color_reg0.r = (50.0f * sp28) + (15.0f * fabsf(sp2C - sp64));
+ color_reg0.g = 100.0f * sp28;
+ color_reg0.b = (115.0f * sp28) + (15.0f * fabsf(sp2C - sp64));
+ }
+
+ GXSetTevColor(GX_TEVREG0, color_reg0);
+ GXSetTevColor(GX_TEVREG1, color_reg1);
+
+ spC8 = spA4;
+
+ spBC.x = -temp_f30;
+ spBC.y = temp_f30;
+ spBC.z = 0.0f;
+ cMtx_multVec(camMtx, &spBC, &spB0);
+ pos[0].x = spC8.x + spB0.x;
+ pos[0].y = spC8.y + spB0.y;
+ pos[0].z = spC8.z + spB0.z;
+
+ spBC.x = temp_f30;
+ spBC.y = temp_f30;
+ spBC.z = 0.0f;
+ cMtx_multVec(camMtx, &spBC, &spB0);
+ pos[1].x = spC8.x + spB0.x;
+ pos[1].y = spC8.y + spB0.y;
+ pos[1].z = spC8.z + spB0.z;
+
+ spBC.x = temp_f30;
+ spBC.y = -temp_f30;
+ spBC.z = 0.0f;
+ cMtx_multVec(camMtx, &spBC, &spB0);
+ pos[2].x = spC8.x + spB0.x;
+ pos[2].y = spC8.y + spB0.y;
+ pos[2].z = spC8.z + spB0.z;
+
+ spBC.x = -temp_f30;
+ spBC.y = -temp_f30;
+ spBC.z = 0.0f;
+ cMtx_multVec(camMtx, &spBC, &spB0);
+ pos[3].x = spC8.x + spB0.x;
+ pos[3].y = spC8.y + spB0.y;
+ pos[3].z = spC8.z + spB0.z;
+
+ GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+ GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
+ GXTexCoord2s16(0, 0);
+ GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
+ GXTexCoord2s16(0xFF, 0);
+ GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
+ GXTexCoord2s16(0xFF, 0xFF);
+ GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
+ GXTexCoord2s16(0, 0xFF);
+ GXEnd();
+ }
+ }
+ }
+ }
+
+ J3DShape::resetVcdVatCache();
+ GXSetClipMode(GX_CLIP_ENABLE);
+
+ if (!daPy_py_c::checkNowWolfPowerUp()) {
+ dKyr_evil_draw2(drawMtx, tex);
+ }
+ }
}
diff --git a/src/d/d_kankyo_wether.cpp b/src/d/d_kankyo_wether.cpp
index ee1898b2c0..5e196dd573 100644
--- a/src/d/d_kankyo_wether.cpp
+++ b/src/d/d_kankyo_wether.cpp
@@ -101,7 +101,7 @@ STAR_EFF::STAR_EFF() {}
/* 80056E08-80056E38 051748 0030+00 1/0 0/0 0/0 .text draw__19dKankyo_star_PacketFv */
void dKankyo_star_Packet::draw() {
- dKyr_drawStar(j3dSys.getViewMtx(), &field_0x10);
+ dKyr_drawStar(j3dSys.getViewMtx(), &mpTex);
}
/* 80056E38-80056E74 051778 003C+00 2/2 0/0 0/0 .text __dt__9CLOUD_EFFFv */
@@ -540,7 +540,7 @@ static void wether_move_sun() {
g_env_light.mpSunPacket->mVisibility = 0.0f;
g_env_light.mpSunPacket->mSunAlpha = 0.0f;
g_env_light.mpSunPacket->field_0x64 = 0.0f;
- g_env_light.mpSunPacket->field_0x68 = 0.0f;
+ g_env_light.mpSunPacket->mMoonAlpha = 0.0f;
if (g_env_light.mDaytime < 255.0f) {
g_env_light.mpSunPacket->field_0x6c = 1.0f;
diff --git a/src/d/d_ky_thunder.cpp b/src/d/d_ky_thunder.cpp
index dfc3958d59..63b7cb9d6e 100644
--- a/src/d/d_ky_thunder.cpp
+++ b/src/d/d_ky_thunder.cpp
@@ -69,7 +69,7 @@ static int dThunder_Draw(dThunder_c* i_this) {
int dThunder_c::execute(dThunder_c* i_thunder) {
dScnKy_env_light_c* env_light = dKy_getEnvlight();
- if (env_light->mThunderEff.mStateTimer < 10) {
+ if (env_light->mThunderEff.mState < 10) {
cLib_addCalc(&mBrkSpeed, 0.1f, 0.05f, 0.017f, 9.999999747378752e-06f);
}
@@ -93,7 +93,7 @@ int dThunder_c::execute(dThunder_c* i_thunder) {
fvar7 *= mBrkSpeed;
- if (env_light->mThunderEff.mStateTimer < 10) {
+ if (env_light->mThunderEff.mState < 10) {
field_0x138.x += fvar7 * field_0x138.x * 0.01f * cM_ssin(field_0x16a);
field_0x138.y += fvar7 * field_0x138.y * 0.01f * cM_scos(field_0x16c);
field_0x16a += -25000;
@@ -180,7 +180,7 @@ int dThunder_c::create() {
mBrkSpeed = 1.0f;
mModelInfo.mBrk.setPlaySpeed(mBrkSpeed);
- if (env_light->mThunderEff.mStateTimer < 10) {
+ if (env_light->mThunderEff.mState < 10) {
var_f29 = 1.0f;
} else {
var_f29 = 0.25f;
@@ -199,7 +199,7 @@ int dThunder_c::create() {
spC4.set(60000.0f, -5000.0f, 0.0f);
field_0x15c = 2000.0f;
- if (env_light->mThunderEff.mStateTimer >= 10) {
+ if (env_light->mThunderEff.mState >= 10) {
var_f31 = var_r27;
var_f30 = 24.0f;
field_0x15c = 2500.0f;
diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp
index 1fa3fbdca3..03a6b9515d 100644
--- a/src/d/d_resorce.cpp
+++ b/src/d/d_resorce.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: d/d_resorce
-//
-
#include "d/d_resorce.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
@@ -12,13 +7,11 @@
#include "JSystem/JKernel/JKRMemArchive.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JUtility/JUTConsole.h"
+#include "JSystem/JUtility/JUTAssert.h"
#include "d/d_bg_w_kcol.h"
#include "d/d_com_inf_game.h"
-#include "dol2asm.h"
-#include "dolphin/os.h"
#include "m_Do/m_Do_graphic.h"
-#include "stdio.h"
-#include "string.h"
+#include <stdio.h>
/* 8003A260-8003A280 034BA0 0020+00 0/0 1/1 0/0 .text __ct__11dRes_info_cFv */
dRes_info_c::dRes_info_c() {
@@ -48,29 +41,32 @@ dRes_info_c::~dRes_info_c() {
}
/* 8003A348-8003A3F0 034C88 00A8+00 1/1 0/0 0/0 .text set__11dRes_info_cFPCcPCcUcP7JKRHeap */
-int dRes_info_c::set(char const* pArcName, char const* pArcPath, u8 param_2, JKRHeap* pHeap) {
+int dRes_info_c::set(char const* i_arcName, char const* i_path, u8 i_mountDirection, JKRHeap* i_heap) {
char path[40];
- if (*pArcPath != NULL) {
- snprintf(path, 40, "%s%s.arc", pArcPath, pArcName);
- mDMCommand = mDoDvdThd_mountArchive_c::create(path, param_2, pHeap);
+ JUT_ASSERT(120, strlen(i_arcName) <= NAME_MAX);
+
+ if (*i_path != NULL) {
+ snprintf(path, sizeof(path), "%s%s.arc", i_path, i_arcName);
+ mDMCommand = mDoDvdThd_mountArchive_c::create(path, i_mountDirection, i_heap);
if (mDMCommand == NULL) {
return false;
}
}
- strncpy(mArchiveName, pArcName, 10);
+
+ strncpy(mArchiveName, i_arcName, sizeof(mArchiveName) - 1);
return true;
}
/* 8003A3F0-8003A490 034D30 00A0+00 1/1 0/0 0/0 .text setAlpha__FP16J3DMaterialTable */
-static void setAlpha(J3DMaterialTable* pMatTable) {
- for (u16 i = 0; i < pMatTable->getMaterialNum(); i++) {
- J3DMaterial* mat = pMatTable->getMaterialNodePointer(i);
+static void setAlpha(J3DMaterialTable* i_matTable) {
+ for (u16 i = 0; i < i_matTable->getMaterialNum(); i++) {
+ J3DMaterial* mat = i_matTable->getMaterialNodePointer(i);
J3DTevBlock* tevBlock = mat->getTevBlock();
if (tevBlock != NULL) {
- _GXColorS10* tevColor = tevBlock->getTevColor(3);
+ GXColorS10* tevColor = tevBlock->getTevColor(3);
if (tevColor != NULL) {
u8 tevStageNum = tevBlock->getTevStageNum();
tevColor->a = tevStageNum;
@@ -80,12 +76,13 @@ static void setAlpha(J3DMaterialTable* pMatTable) {
}
/* 8003A490-8003A81C 034DD0 038C+00 1/1 0/0 0/0 .text setIndirectTex__FP12J3DModelData */
-static void setIndirectTex(J3DModelData* param_0) {
+static void setIndirectTex(J3DModelData* i_modelData) {
const char* textureName;
- J3DMaterialTable& materialTable = param_0->getMaterialTable();
+ J3DMaterialTable& materialTable = i_modelData->getMaterialTable();
J3DTexture* texture = materialTable.getTexture();
if (texture == NULL)
return;
+
JUTNameTab* nameTab = materialTable.getTextureName();
if (nameTab == NULL)
return;
@@ -105,8 +102,8 @@ static void setIndirectTex(J3DModelData* param_0) {
}
/* 8003A81C-8003A840 03515C 0024+00 1/1 0/0 0/0 .text setAlpha__FP12J3DModelData */
-static void setAlpha(J3DModelData* pModelData) {
- setAlpha(&pModelData->getMaterialTable());
+static void setAlpha(J3DModelData* i_modelData) {
+ setAlpha(&i_modelData->getMaterialTable());
}
/* 80379840-803798A4 005EA0 0064+00 2/2 0/0 0/0 .rodata l_texMtxInfo */
@@ -126,7 +123,7 @@ static const J3DTexMtxInfo l_texMtxInfo = {
/* 8003A840-8003AACC 035180 028C+00 1/1 0/0 0/0 .text addWarpMaterial__FP12J3DModelData
*/
// NONMATCHING l_alphaCompInfo needs to be placed in .sdata2, but the function breaks if it is declared const
-static void addWarpMaterial(J3DModelData* param_1) {
+static void addWarpMaterial(J3DModelData* i_modelData) {
static J3DTevStageInfo const l_tevStageInfo = {
0x05, 0x0F, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x00,
0x07, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00,
@@ -134,34 +131,45 @@ static void addWarpMaterial(J3DModelData* param_1) {
static J3DTexCoordInfo l_texCoordInfo = {0x00, 0x00, 0x27};
static J3DTevOrderInfo l_tevOrderInfo = {0x00, 0x03, 0xFF, 0x00};
- ResTIMG* objectRes = (ResTIMG*)dComIfG_getObjectRes("Always", 0x5d);
- J3DTexture* texture = param_1->getTexture();
+ ResTIMG* resTimg = (ResTIMG*)dComIfG_getObjectRes("Always", 0x5d);
+ JUT_ASSERT(0x117, resTimg != 0);
+
+ J3DTexture* texture = i_modelData->getTexture();
u16 textureNum = texture->getNum();
- texture->addResTIMG(1, objectRes - textureNum);
- J3DTexMtx* texMtxInfo = new J3DTexMtx(l_texMtxInfo);
+ texture->addResTIMG(1, resTimg - textureNum);
- for (u16 i = 0; i < param_1->getMaterialNum(); i++) {
- J3DMaterial* pMaterial = param_1->getMaterialNodePointer(i);
- J3DTexGenBlock* texGenBlock = pMaterial->getTexGenBlock();
+ J3DTexMtx* newTexMtx = new J3DTexMtx(l_texMtxInfo);
+ JUT_ASSERT(0x11D, newTexMtx != 0);
+
+ for (u16 i = 0; i < i_modelData->getMaterialNum(); i++) {
+ J3DMaterial* material = i_modelData->getMaterialNodePointer(i);
+ J3DTexGenBlock* texGenBlock = material->getTexGenBlock();
u32 texGenNum = texGenBlock->getTexGenNum();
+ JUT_ASSERT(0x122, texGenNum < 4);
+
J3DTexCoord* coord = texGenBlock->getTexCoord(texGenNum);
l_texCoordInfo.mTexGenMtx = texGenNum * 3 + 0x1e;
coord->setTexCoordInfo(l_texCoordInfo);
coord->resetTexMtxReg();
+
texGenBlock->setTexGenNum(texGenNum + 1);
- texGenBlock->setTexMtx(texGenNum, texMtxInfo);
- J3DTevBlock* tevBlock = pMaterial->getTevBlock();
+ texGenBlock->setTexMtx(texGenNum, newTexMtx);
+ J3DTevBlock* tevBlock = material->getTevBlock();
u8 tevStageNum = tevBlock->getTevStageNum();
+ JUT_ASSERT(299, tevStageNum < 4);
l_tevOrderInfo.mTexCoord = texGenNum;
+ JUT_ASSERT(301, tevBlock->getTexNo(3) == 0xffff);
tevBlock->setTexNo(3, textureNum);
tevBlock->setTevOrder(tevStageNum, l_tevOrderInfo);
tevBlock->setTevStage(tevStageNum, l_tevStageInfo);
tevBlock->setTevStageNum(tevStageNum + 1);
- J3DShape* pShape = pMaterial->getShape();
+
+ J3DShape* shape = material->getShape();
GXAttr attr = (GXAttr)(texGenNum + 1);
- pShape->addTexMtxIndexInDL(attr, 0);
- pShape->addTexMtxIndexInVcd(attr);
- J3DPEBlock* peBlock = pMaterial->getPEBlock();
+ shape->addTexMtxIndexInDL(attr, 0);
+ shape->addTexMtxIndexInVcd(attr);
+
+ J3DPEBlock* peBlock = material->getPEBlock();
J3DAlphaComp* alphaComp = peBlock->getAlphaComp();
static J3DAlphaCompInfo const l_alphaCompInfo = {0x04, 0x80, 0x00, 0x03, 0xFF, 0, 0, 0};
alphaComp->setAlphaCompInfo(l_alphaCompInfo);
@@ -171,85 +179,89 @@ static void addWarpMaterial(J3DModelData* param_1) {
/* 8003AB30-8003AC1C 035470 00EC+00 0/0 2/1 0/0 .text
* onWarpMaterial__11dRes_info_cFP12J3DModelData */
-void dRes_info_c::onWarpMaterial(J3DModelData* param_0) {
- for (u16 i = 0; i < param_0->getMaterialNum(); i++) {
- J3DMaterial* pMaterial = param_0->getMaterialNodePointer(i);
- J3DTevBlock* tevBlock = pMaterial->getTevBlock();
+void dRes_info_c::onWarpMaterial(J3DModelData* i_modelData) {
+ for (u16 i = 0; i < i_modelData->getMaterialNum(); i++) {
+ J3DMaterial* material = i_modelData->getMaterialNodePointer(i);
+ J3DTevBlock* tevBlock = material->getTevBlock();
u8 tevStageNum = tevBlock->getTevStageNum();
J3DTevOrder* tevorder = tevBlock->getTevOrder(tevStageNum - 1);
if (tevorder->getTexMap() == 3) {
break;
}
+
tevBlock->setTevStageNum(tevStageNum + 1);
- J3DTexGenBlock* texGenBlock = pMaterial->getTexGenBlock();
+ J3DTexGenBlock* texGenBlock = material->getTexGenBlock();
texGenBlock->setTexGenNum(texGenBlock->getTexGenNum() + 1);
}
}
/* 8003AC1C-8003AD08 03555C 00EC+00 0/0 2/1 0/0 .text
* offWarpMaterial__11dRes_info_cFP12J3DModelData */
-void dRes_info_c::offWarpMaterial(J3DModelData* modelData) {
- for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
- J3DMaterial* pMaterial = modelData->getMaterialNodePointer(i);
- J3DTevBlock* tevBlock = pMaterial->getTevBlock();
+void dRes_info_c::offWarpMaterial(J3DModelData* i_modelData) {
+ for (u16 i = 0; i < i_modelData->getMaterialNum(); i++) {
+ J3DMaterial* material = i_modelData->getMaterialNodePointer(i);
+ J3DTevBlock* tevBlock = material->getTevBlock();
u8 tevStageNum = tevBlock->getTevStageNum();
J3DTevOrder* tevorder = tevBlock->getTevOrder(tevStageNum - 1);
if (tevorder->getTexMap() != 3) {
break;
}
tevBlock->setTevStageNum(tevStageNum - 1);
- J3DTexGenBlock* texGenBlock = pMaterial->getTexGenBlock();
+ J3DTexGenBlock* texGenBlock = material->getTexGenBlock();
texGenBlock->setTexGenNum(texGenBlock->getTexGenNum() - 1);
}
}
/* 8003AD08-8003AE14 035648 010C+00 0/0 1/1 0/0 .text
* setWarpSRT__11dRes_info_cFP12J3DModelDataRC4cXyzff */
-void dRes_info_c::setWarpSRT(J3DModelData* modelData, cXyz const& param_1, f32 translationX,
- f32 translationY) {
- J3DMaterial* pMaterial = modelData->getMaterialNodePointer(0);
- J3DTexGenBlock* texGenBlock = pMaterial->getTexGenBlock();
+void dRes_info_c::setWarpSRT(J3DModelData* i_modelData, const cXyz& i_pos, f32 i_transX,
+ f32 i_transY) {
+ J3DMaterial* material = i_modelData->getMaterialNodePointer(0);
+ J3DTexGenBlock* texGenBlock = material->getTexGenBlock();
u32 texGenNum = texGenBlock->getTexGenNum();
J3DTexMtx* texMtx = texGenBlock->getTexMtx(texGenNum - 1);
J3DTexMtxInfo& texMtxInfo = texMtx->getTexMtxInfo();
- texMtxInfo.mSRT.mTranslationX = translationX;
- texMtxInfo.mSRT.mTranslationY = translationY;
- mDoMtx_stack_c::transS(-param_1.x, -param_1.y, -param_1.z);
+ texMtxInfo.mSRT.mTranslationX = i_transX;
+ texMtxInfo.mSRT.mTranslationY = i_transY;
+
+ mDoMtx_stack_c::transS(-i_pos.x, -i_pos.y, -i_pos.z);
s16 angleY = fopCamM_GetAngleY(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)));
mDoMtx_stack_c::YrotM(angleY);
- MtxP stackMtx = mDoMtx_stack_c::get();
- cMtx_concat(l_texMtxInfo.mEffectMtx, stackMtx, texMtxInfo.mEffectMtx);
+ cMtx_concat(l_texMtxInfo.mEffectMtx, mDoMtx_stack_c::get(), texMtxInfo.mEffectMtx);
}
/* 8003AE14-8003B150 035754 033C+00 2/1 1/1 0/0 .text loaderBasicBmd__11dRes_info_cFUlPv
*/
-// NONMATCHING regalloc
-J3DModelData* dRes_info_c::loaderBasicBmd(u32 i_type, void* i_data) {
+J3DModelData* dRes_info_c::loaderBasicBmd(u32 i_tag, void* i_data) {
u32 flags = 0x59020010;
- J3DMaterial* pMaterial;
+ u16 i;
+ J3DMaterial* material;
J3DModelData* modelData;
u8 lightMask;
- if (i_type == 'BMDE' || i_type == 'BMDV') {
+ if (i_tag == 'BMDE' || i_tag == 'BMDV') {
flags |= 0x20;
- } else if (i_type == 'BMWR' || i_type == 'BMWE') {
+ } else if (i_tag == 'BMWR' || i_tag == 'BMWE') {
flags ^= 0x60020;
}
- modelData = J3DModelLoaderDataBase::load(i_data, flags);
- if (modelData == NULL) {
+ i_data = J3DModelLoaderDataBase::load(i_data, flags);
+ if (i_data == NULL) {
return NULL;
}
- if (i_type == 'BMDE' || i_type == 'BMDV' || i_type == 'BMWE') {
- for (u16 i = 0; i < modelData->getShapeNum(); i++) {
- modelData->getShapeNodePointer(i)->setTexMtxLoadType(0x2000);
+ modelData = (J3DModelData*)i_data;
+
+ if (i_tag == 'BMDE' || i_tag == 'BMDV' || i_tag == 'BMWE') {
+ for (i = 0; i < modelData->getShapeNum(); i++) {
+ J3DShape* shape = modelData->getShapeNodePointer(i);
+ shape->setTexMtxLoadType(0x2000);
}
}
- for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
- pMaterial = modelData->getMaterialNodePointer(i);
- lightMask = pMaterial->getColorBlock()->getColorChan(0)->getLightMask();
+ for (i = 0; i < modelData->getMaterialNum(); i++) {
+ material = modelData->getMaterialNodePointer(i);
+ lightMask = material->getColorChan(0)->getLightMask();
switch (g_env_light.field_0x1308) {
case 1:
lightMask &= 0x4;
@@ -273,23 +285,24 @@ J3DModelData* dRes_info_c::loaderBasicBmd(u32 i_type, void* i_data) {
lightMask &= 0x7F;
}
- pMaterial->getColorBlock()->getColorChan(0)->setLightMask(lightMask);
- pMaterial->change();
+ material->getColorChan(0)->setLightMask(lightMask);
+ material->change();
- J3DMaterialAnm* material_anm = new J3DMaterialAnm();
- if (material_anm == NULL) {
+ J3DMaterialAnm* materialAnm = new J3DMaterialAnm();
+ if (materialAnm == NULL) {
return NULL;
}
- pMaterial->setMaterialAnm(material_anm);
+ material->setMaterialAnm(materialAnm);
}
setIndirectTex(modelData);
- if (i_type == 'BMWR' || i_type == 'BMWE') {
+
+ if (i_tag == 'BMWR' || i_tag == 'BMWE') {
addWarpMaterial(modelData);
}
- if (i_type == 'BMDR' || i_type == 'BMWR') {
+ if (i_tag == 'BMDR' || i_tag == 'BMWR') {
if (modelData->newSharedDisplayList(0x40000) != 0) {
return NULL;
} else {
@@ -298,54 +311,70 @@ J3DModelData* dRes_info_c::loaderBasicBmd(u32 i_type, void* i_data) {
}
}
- return modelData;
+ return (J3DModelData*)i_data;
}
/* 8003B30C-8003B8D0 035C4C 05C4+00 2/2 0/0 0/0 .text loadResource__11dRes_info_cFv */
int dRes_info_c::loadResource() {
- s32 file_num = mArchive->countFile();
- mRes = new void*[file_num];
+ JUT_ASSERT(0x2C5, mRes == 0);
+
+ s32 countFile = mArchive->countFile();
+ mRes = new void*[countFile];
if (mRes == NULL) {
OSReport_Error("<%s.arc> setRes: res pointer buffer nothing !!\n", mArchiveName);
return -1;
}
- for (int i = 0; i < file_num; i++) {
+ for (int i = 0; i < countFile; i++) {
mRes[i] = NULL;
}
JKRArchive::SDIDirEntry* node = mArchive->mNodes;
for (int i = 0; i < mArchive->countDirectory(); i++) {
u32 nodeType = node->type;
- u32 firstFileIndex = node->first_file_index;
+ u32 fileIndex = node->first_file_index;
J3DModelData* modelData;
void* result;
for (int j = 0; j < node->num_entries; j++) {
- if (mArchive->isFileEntry(firstFileIndex)) {
- result = mArchive->getIdxResource(firstFileIndex);
+ if (mArchive->isFileEntry(fileIndex)) {
+ result = mArchive->getIdxResource(fileIndex);
if (result == NULL) {
- OSReport_Error(
- "<%s> res == NULL !!\n",
+ OSReport_Error("<%s> res == NULL !!\n",
mArchive->mStringTable +
- (mArchive->findIdxResource(firstFileIndex)->type_flags_and_name_offset &
- 0xFFFFFF));
+ (mArchive->findIdxResource(fileIndex)->type_flags_and_name_offset & 0xFFFFFF));
} else if (nodeType == 'ARC ') {
- JKRArchive::SDIFileEntry* entry = mArchive->findIdxResource(firstFileIndex);
+ JKRArchive::SDIFileEntry* entry = mArchive->findIdxResource(fileIndex);
+ JUT_ASSERT(0x2FD, entry != 0);
const char* name_p = mArchive->mStringTable + entry->getNameOffset();
size_t resNameLen = strlen(name_p) - 4;
- char arc_name[9];
- strncpy(arc_name, name_p, resNameLen);
- arc_name[resNameLen] = '\0';
+ JUT_ASSERT(0x301, resNameLen <= NAME_MAX);
+
+ char arcName[9];
+ strncpy(arcName, name_p, resNameLen);
+ arcName[resNameLen] = '\0';
JKRHeap* parentHeap = JKRHeap::findFromRoot(JKRHeap::getCurrentHeap());
+ JUT_ASSERT(0x308, parentHeap != 0 && (parentHeap == mDoExt_getGameHeap() || parentHeap == mDoExt_getArchiveHeap()));
+#ifdef DEBUG
+ char* heapName;
+ if (parentHeap == mDoExt_getGameHeap()) {
+ heapName = "GameHeap";
+ } else {
+ heapName = "ArchiveHeap";
+ }
+
+ // ">>>>>>>>>>>>>>>>>> Pack Archive<%s> <%s>\n"
+ OSReport(">>>>>>>>>>>>>>>>>> パックアーカイブ<%s> <%s>\n", arcName, heapName);
+#endif
if (parentHeap == (JKRHeap*)mDoExt_getGameHeap()) {
parentHeap = NULL;
}
- dComIfG_setObjectRes(arc_name, result, entry->data_size);
+ int rt = dComIfG_setObjectRes(arcName, result, entry->data_size);
+ JUT_ASSERT(0x314, rt);
} else if (nodeType == 'BMDP') {
result = (J3DModelData*)J3DModelLoaderDataBase::load(result, 0x59020030);
if (result == NULL) {
@@ -357,12 +386,12 @@ int dRes_info_c::loadResource() {
J3DMaterial* material_p = modelData->getMaterialNodePointer(k);
material_p->change();
- J3DMaterialAnm* material_anm = new J3DMaterialAnm();
- if (material_anm == NULL) {
+ J3DMaterialAnm* materialAnm = new J3DMaterialAnm();
+ if (materialAnm == NULL) {
return -1;
}
- material_p->setMaterialAnm(material_anm);
+ material_p->setMaterialAnm(materialAnm);
}
setAlpha(modelData);
@@ -386,6 +415,14 @@ int dRes_info_c::loadResource() {
}
modelData = (J3DModelData*)result;
+#ifdef DEBUG
+ J3DMaterial* materialp = modelData->getMaterialNodePointer(0);
+ if (materialp->isDrawModeOpaTexEdge()) {
+ // "BMDG:Translucent model can't be drawn!!\n"
+ OSReport_Error("BMDG:半透明モデルは描画できません!!\n");
+ return -1;
+ }
+#endif
if (modelData->newSharedDisplayList(0x40000) != 0) {
return -1;
}
@@ -411,10 +448,20 @@ int dRes_info_c::loadResource() {
return -1;
}
} else if (nodeType == 'BCKS' || nodeType == 'BCK ') {
- int sVar1 = *(int*)((int)result + 0x1c);
- void* local_9c = sVar1 != 0xffffffff ? (void*)(sVar1 + (u32)result) : NULL;
+ struct J3DUnkChunk {
+ u8 unk_data[0x1C];
+ u32 some_data_offset;
+ };
+ J3DUnkChunk* chunk = (J3DUnkChunk*)result;
+ void* bas;
+
+ if (chunk->some_data_offset != 0xFFFFFFFF) {
+ bas = (void*)(chunk->some_data_offset + (u32)result);
+ } else {
+ bas = NULL;
+ }
- mDoExt_transAnmBas* transAnmBas = new mDoExt_transAnmBas(local_9c);
+ mDoExt_transAnmBas* transAnmBas = new mDoExt_transAnmBas(bas);
if (transAnmBas == NULL) {
return -1;
}
@@ -435,12 +482,11 @@ int dRes_info_c::loadResource() {
result = dBgWKCol::initKCollision(result);
}
- mRes[firstFileIndex] = result;
+ JUT_ASSERT(0x444, fileIndex < countFile);
+ mRes[fileIndex] = result;
}
-
- firstFileIndex++;
+ fileIndex++;
}
-
node++;
}
@@ -450,33 +496,39 @@ int dRes_info_c::loadResource() {
/* 8003B998-8003BA9C 0362D8 0104+00 1/1 0/0 0/0 .text deleteArchiveRes__11dRes_info_cFv
*/
void dRes_info_c::deleteArchiveRes() {
+ JUT_ASSERT(0x45E, mArchive != 0);
+
JKRArchive::SDIDirEntry* nodes = mArchive->mNodes;
for (int i = 0; i < mArchive->countDirectory(); nodes++, i++) {
- if (nodes->type == 0x41524320) {
- u32 firstFileIndex = nodes->first_file_index;
+ if (nodes->type == 'ARC ') {
+ u32 fileIndex = nodes->first_file_index;
for (int j = 0; j < nodes->num_entries; j++) {
- if (mArchive->isFileEntry(firstFileIndex)) {
- JKRArchive::SDIFileEntry* fileEntry = mArchive->findIdxResource(firstFileIndex);
+ if (mArchive->isFileEntry(fileIndex)) {
+ JKRArchive::SDIFileEntry* fileEntry = mArchive->findIdxResource(fileIndex);
u32 nameOffset = fileEntry->getNameOffset();
char* fileName = mArchive->mStringTable + nameOffset;
size_t nameLen = strlen(fileName) - 4;
+ JUT_ASSERT(0x46C, resNameLen <= NAME_MAX);
+
char nameBuffer[12];
strncpy(nameBuffer, fileName, nameLen);
nameBuffer[nameLen] = '\0';
- dComIfG_deleteObjectResMain(nameBuffer);
+
+ int rt = dComIfG_deleteObjectResMain(nameBuffer);
+ JUT_ASSERT(0x470, rt);
}
- firstFileIndex++;
+ fileIndex++;
}
}
}
}
/* 8003BA9C-8003BAC4 0363DC 0028+00 2/2 0/0 0/0 .text getArcHeader__FP10JKRArchive */
-static SArcHeader* getArcHeader(JKRArchive* param_0) {
- if (param_0 != NULL) {
- switch (param_0->getMountMode()) {
+static SArcHeader* getArcHeader(JKRArchive* i_archive) {
+ if (i_archive != NULL) {
+ switch (i_archive->getMountMode()) {
case JKRArchive::MOUNT_MEM:
- return ((JKRMemArchive*)param_0)->getArcHeader();
+ return ((JKRMemArchive*)i_archive)->getArcHeader();
}
}
@@ -485,11 +537,15 @@ static SArcHeader* getArcHeader(JKRArchive* param_0) {
/* 8003BAC4-8003BAF8 036404 0034+00 1/1 0/0 0/0 .text setRes__11dRes_info_cFP10JKRArchiveP7JKRHeap
*/
-int dRes_info_c::setRes(JKRArchive* pArchive, JKRHeap* pHeap) {
- mArchive = pArchive;
- heap = pHeap;
+int dRes_info_c::setRes(JKRArchive* i_archive, JKRHeap* i_heap) {
+ JUT_ASSERT(0x4AD, mArchive == 0);
+ mArchive = i_archive;
+ heap = i_heap;
mDataHeap = NULL;
- return loadResource() >> 0x1F;
+
+ int rt = loadResource();
+ JUT_ASSERT(0x4B4, rt >= 0);
+ return rt >> 0x1F;
}
/* 8003BAF8-8003BC98 036438 01A0+00 2/2 0/0 0/0 .text setRes__11dRes_info_cFv */
@@ -512,15 +568,18 @@ int dRes_info_c::setRes() {
OSReport_Error("<%s.arc> setRes: archive mount error !!\n", mArchiveName);
return -1;
}
+
if (heap != NULL) {
heap->lock();
mDataHeap = mDoExt_createSolidHeapToCurrent(0, heap, 0x20);
+ JUT_ASSERT(0x4EC, mDataHeap != 0);
int rt = loadResource();
mDoExt_restoreCurrentHeap();
mDoExt_adjustSolidHeap(mDataHeap);
heap->unlock();
+ JUT_ASSERT(0x4F6, rt >= 0);
if (rt < 0) {
return -1;
}
@@ -534,32 +593,33 @@ int dRes_info_c::setRes() {
mDoExt_restoreCurrentHeap();
mDoExt_adjustSolidHeap(mDataHeap);
+ JUT_ASSERT(0x509, rt >= 0);
if (rt < 0) {
return -1;
}
}
+
u32 heapSize = mDataHeap->getHeapSize();
void* heapStartAddr = mDataHeap->getStartAddr();
DCStoreRangeNoSync(heapStartAddr, heapSize);
}
+
return 0;
}
/* 8003BC98-8003BD00 0365D8 0068+00 1/1 0/0 0/0 .text myGetMemBlockSize__FPv */
-static s32 myGetMemBlockSize(void* param_0) {
- JKRHeap* heap = JKRHeap::findFromRoot(param_0);
-
+static s32 myGetMemBlockSize(void* i_data) {
+ JKRHeap* heap = JKRHeap::findFromRoot(i_data);
if (heap->getHeapType() == 'EXPH') {
- return JKRHeap::getSize(param_0, heap);
- } else {
- return -1;
+ return JKRHeap::getSize(i_data, heap);
}
+
+ return -1;
}
/* 8003BD00-8003BD2C 036640 002C+00 1/1 0/0 0/0 .text myGetMemBlockSize0__FPv */
-static s32 myGetMemBlockSize0(void* param_0) {
- s32 size = myGetMemBlockSize(param_0);
-
+static s32 myGetMemBlockSize0(void* i_data) {
+ s32 size = myGetMemBlockSize(i_data);
if (size < 0) {
size = 0;
}
@@ -573,7 +633,7 @@ f32 dummy(int x) {
}
/* 8003BD2C-8003BE38 03666C 010C+00 1/1 0/0 0/0 .text dump_long__11dRes_info_cFP11dRes_info_ci */
-void dRes_info_c::dump_long(dRes_info_c* param_0, int param_1) {
+void dRes_info_c::dump_long(dRes_info_c* i_resInfo, int i_infoNum) {
int i;
void* header;
int blockSize1;
@@ -581,13 +641,12 @@ void dRes_info_c::dump_long(dRes_info_c* param_0, int param_1) {
JKRArchive* archive;
JKRSolidHeap* dataHeap;
- JUTReportConsole_f("dRes_info_c::dump_long %08x %d\n", param_0, param_1);
- JUTReportConsole_f(
- "No Command Archive ArcHeader(size) SolidHeap(size) Resource Cnt ArchiveName\n");
+ JUTReportConsole_f("dRes_info_c::dump_long %08x %d\n", i_resInfo, i_infoNum);
+ JUTReportConsole_f("No Command Archive ArcHeader(size) SolidHeap(size) Resource Cnt ArchiveName\n");
- for (i = 0; i < param_1; i++) {
- if (param_0->getCount() != 0) {
- archive = param_0->getArchive();
+ for (i = 0; i < i_infoNum; i++) {
+ if (i_resInfo->getCount() != 0) {
+ archive = i_resInfo->getArchive();
header = NULL;
blockSize1 = 0;
@@ -596,50 +655,67 @@ void dRes_info_c::dump_long(dRes_info_c* param_0, int param_1) {
blockSize1 = myGetMemBlockSize0(header);
}
- dataHeap = param_0->mDataHeap;
+ dataHeap = i_resInfo->mDataHeap;
blockSize2 = 0;
if (dataHeap != NULL) {
blockSize2 = myGetMemBlockSize0((void*)dataHeap);
}
- JUTReportConsole_f("%2d %08x %08x %08x(%6x) %08x(%5x) %08x %3d %s\n", i,
- param_0->getDMCommand(), archive, header, blockSize1, dataHeap,
- blockSize2, param_0->mRes, param_0->getCount(),
- param_0->getArchiveName());
+ JUTReportConsole_f("%2d %08x %08x %08x(%6x) %08x(%5x) %08x %3d %s\n",
+ i,
+ i_resInfo->getDMCommand(),
+ archive,
+ header,
+ blockSize1,
+ dataHeap,
+ blockSize2,
+ i_resInfo->mRes,
+ i_resInfo->getCount(),
+ i_resInfo->getArchiveName());
}
- param_0++;
+ i_resInfo++;
}
}
/* 8003BE38-8003BFB0 036778 0178+00 1/1 0/0 0/0 .text dump__11dRes_info_cFP11dRes_info_ci
*/
-// NONMATCHING float literal order
-void dRes_info_c::dump(dRes_info_c* param_0, int param_1) {
+void dRes_info_c::dump(dRes_info_c* i_resInfo, int i_infoNum) {
int totalArcHeaderSize;
int totalHeapSize;
int arcHeaderSize;
int heapSize;
char* archiveName;
- JUTReportConsole_f("dRes_info_c::dump %08x %d\n", param_0, param_1);
+
+ JUTReportConsole_f("dRes_info_c::dump %08x %d\n", i_resInfo, i_infoNum);
JUTReportConsole_f("No ArchiveSize(KB) SolidHeapSize(KB) Cnt ArchiveName\n");
+
totalArcHeaderSize = 0;
totalHeapSize = 0;
- for (int i = 0; i < param_1; i++) {
- if (param_0->getCount()) {
- arcHeaderSize = JKRGetMemBlockSize(NULL, getArcHeader(param_0->getArchive()));
- heapSize = JKRGetMemBlockSize(NULL, param_0->mDataHeap);
- archiveName = param_0->getArchiveName();
- JUTReportConsole_f("%2d %6.1f %6x %6.1f %6x %3d %s\n", i, arcHeaderSize / 1024.0f,
- arcHeaderSize, heapSize / 1024.0f, heapSize, param_0->getCount(),
+
+ for (int i = 0; i < i_infoNum; i++) {
+ if (i_resInfo->getCount() != 0) {
+ arcHeaderSize = JKRGetMemBlockSize(NULL, getArcHeader(i_resInfo->getArchive()));
+ heapSize = JKRGetMemBlockSize(NULL, i_resInfo->mDataHeap);
+ archiveName = i_resInfo->getArchiveName();
+ JUTReportConsole_f("%2d %6.1f %6x %6.1f %6x %3d %s\n",
+ i,
+ arcHeaderSize / 1024.0f,
+ arcHeaderSize,
+ heapSize / 1024.0f,
+ heapSize,
+ i_resInfo->getCount(),
archiveName);
totalArcHeaderSize += arcHeaderSize;
totalHeapSize += heapSize;
}
- param_0++;
+ i_resInfo++;
}
- JUTReportConsole_f(
- "----------------------------------------------\n %6.1f %6x %6.1f %6x Total\n\n",
- totalArcHeaderSize / 1024.0f, totalArcHeaderSize, totalHeapSize / 1024.0f, totalHeapSize);
+
+ JUTReportConsole_f("----------------------------------------------\n %6.1f %6x %6.1f %6x Total\n\n",
+ totalArcHeaderSize / 1024.0f,
+ totalArcHeaderSize,
+ totalHeapSize / 1024.0f,
+ totalHeapSize);
}
/* 8003BFB0-8003C078 0368F0 00C8+00 0/0 1/1 0/0 .text __dt__14dRes_control_cFv */
@@ -655,45 +731,50 @@ dRes_control_c::~dRes_control_c() {
/* 8003C078-8003C160 0369B8 00E8+00 2/2 8/8 0/0 .text
* setRes__14dRes_control_cFPCcP11dRes_info_ciPCcUcP7JKRHeap */
-int dRes_control_c::setRes(char const* arcName, dRes_info_c* pInfo, int infoSize,
- char const* arcPath, u8 param_4, JKRHeap* pHeap) {
- dRes_info_c* resInfo = getResInfo(arcName, pInfo, infoSize);
+int dRes_control_c::setRes(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum,
+ char const* i_path, u8 i_mountDirection, JKRHeap* i_heap) {
+ dRes_info_c* resInfo = getResInfo(i_arcName, i_resInfo, i_infoNum);
if (resInfo == NULL) {
- resInfo = newResInfo(pInfo, infoSize);
+ resInfo = newResInfo(i_resInfo, i_infoNum);
if (resInfo == NULL) {
- // MWCC ignores mapping of some japanese characters using the
- // byte 0x5C (ASCII '\'). This is why this string is hex-encoded.
- // "<%s.arc> dRes_control_c::setRes: 空きリソース情報ポインタがありません\n"
// "<%s.arc> dRes_control_c::setRes: There isn't a free Resource Info pointer\n"
- OSReport_Error(
- "\x3C\x25\x73\x2E\x61\x72\x63\x3E\x20\x64\x52\x65\x73\x5F\x63\x6F\x6E\x74\x72\x6F"
- "\x6C\x5F\x63\x3A\x3A\x73\x65\x74\x52\x65\x73\x3A\x20\x8B\xF3\x82\xAB\x83\x8A\x83"
- "\x5C\x81\x5B\x83\x58\x8F\xEE\x95\xF1\x83\x7C\x83\x43\x83\x93\x83\x5E\x82\xAA\x82"
- "\xA0\x82\xE8\x82\xDC\x82\xB9\x82\xF1\x0A",
- arcName);
+ OSReport_Error("<%s.arc> dRes_control_c::setRes: 空きリソース情報ポインタがありません\n", i_arcName);
resInfo->~dRes_info_c();
return 0;
}
- int resStatus = resInfo->set(arcName, arcPath, param_4, pHeap);
- if (resStatus == 0) {
- OSReport_Error("<%s.arc> dRes_control_c::setRes: res info set error !!\n", arcName);
+ int rt = resInfo->set(i_arcName, i_path, i_mountDirection, i_heap);
+ if (rt == 0) {
+ OSReport_Error("<%s.arc> dRes_control_c::setRes: res info set error !!\n", i_arcName);
resInfo->~dRes_info_c();
return 0;
}
}
+
resInfo->incCount();
return 1;
}
/* 8003C160-8003C194 036AA0 0034+00 0/0 10/10 1/1 .text
* syncRes__14dRes_control_cFPCcP11dRes_info_ci */
-int dRes_control_c::syncRes(char const* arcName, dRes_info_c* pInfo, int infoSize) {
- dRes_info_c* resInfo = getResInfo(arcName, pInfo, infoSize);
+int dRes_control_c::syncRes(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum) {
+ dRes_info_c* resInfo = getResInfo(i_arcName, i_resInfo, i_infoNum);
if (resInfo == NULL) {
+#ifdef DEBUG
+ if (i_arcName[0] == 'R' ||
+ (i_arcName[0] == 'S' && i_arcName[1] == 't' && i_arcName[2] == 'g' && i_arcName[3] == '_' && i_arcName[4] == '0' && i_arcName[5] == '0') ||
+ strncmp(i_arcName, "Pack", 4) == 0)
+ {
+ // "<%s.arc> syncRes: Resource not registered (No Error)\n"
+ OS_REPORT("\x1b[34m<%s.arc> syncRes: リソース未登録(問題無し)\n\x1b[m", i_arcName);
+ } else {
+ // "<%s.arc> syncRes: Resource not registered!!\n"
+ OS_REPORT_ERROR("<%s.arc> syncRes: リソース未登録!!\n", i_arcName);
+ }
+#endif
return -1;
} else {
return resInfo->setRes();
@@ -702,111 +783,124 @@ int dRes_control_c::syncRes(char const* arcName, dRes_info_c* pInfo, int infoSiz
/* 8003C194-8003C1E4 036AD4 0050+00 1/1 7/7 0/0 .text
* deleteRes__14dRes_control_cFPCcP11dRes_info_ci */
-int dRes_control_c::deleteRes(char const* arcName, dRes_info_c* pInfo, int infoSize) {
- dRes_info_c* resInfo = getResInfo(arcName, pInfo, infoSize);
+int dRes_control_c::deleteRes(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum) {
+ dRes_info_c* resInfo = getResInfo(i_arcName, i_resInfo, i_infoNum);
if (resInfo == NULL) {
+#ifdef DEBUG
+ if (strcmp(i_arcName, "Xtg_00") == 0) {
+ // "<%s.arc> deleteRes: res nothing !!\n(Detected deleting an unregistered resource! Please fix.)\n"
+ OS_REPORT_ERROR("<%s.arc> deleteRes: res nothing !!\n(未登録のリソースを削除してるのを発見しました!修正してください。)\n", i_arcName);
+ }
+#endif
return 0;
- } else {
- if (resInfo->decCount() == 0) {
- resInfo->~dRes_info_c();
- }
- return 1;
}
+
+ if (resInfo->decCount() == 0) {
+ resInfo->~dRes_info_c();
+ }
+ return 1;
}
/* 8003C1E4-8003C260 036B24 007C+00 5/5 5/5 3/3 .text
* getResInfo__14dRes_control_cFPCcP11dRes_info_ci */
-dRes_info_c* dRes_control_c::getResInfo(char const* pArcName, dRes_info_c* pResInfo, int infoSize) {
- for (int i = 0; i < infoSize; i++) {
- if (pResInfo->getCount() != 0) {
- if (!stricmp(pArcName, pResInfo->getArchiveName())) {
- return pResInfo;
+dRes_info_c* dRes_control_c::getResInfo(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum) {
+ for (int i = 0; i < i_infoNum; i++) {
+ if (i_resInfo->getCount() != 0) {
+ if (!stricmp(i_arcName, i_resInfo->getArchiveName())) {
+ return i_resInfo;
}
}
- pResInfo++;
+ i_resInfo++;
}
+
return NULL;
}
/* 8003C260-8003C288 036BA0 0028+00 1/1 0/0 0/0 .text newResInfo__14dRes_control_cFP11dRes_info_ci
*/
-dRes_info_c* dRes_control_c::newResInfo(dRes_info_c* pResInfo, int infoSize) {
- for (int i = 0; i < infoSize; i++) {
- if (pResInfo->getCount() == 0) {
- return pResInfo;
+dRes_info_c* dRes_control_c::newResInfo(dRes_info_c* i_resInfo, int i_infoNum) {
+ for (int i = 0; i < i_infoNum; i++) {
+ if (i_resInfo->getCount() == 0) {
+ return i_resInfo;
}
- pResInfo++;
+ i_resInfo++;
}
+
return NULL;
}
/* 8003C288-8003C2EC 036BC8 0064+00 4/4 0/0 0/0 .text
* getResInfoLoaded__14dRes_control_cFPCcP11dRes_info_ci */
-dRes_info_c* dRes_control_c::getResInfoLoaded(char const* arcName, dRes_info_c* pResInfo,
- int infoSize) {
- dRes_info_c* resInfo = getResInfo(arcName, pResInfo, infoSize);
+dRes_info_c* dRes_control_c::getResInfoLoaded(char const* i_arcName, dRes_info_c* i_resInfo,
+ int i_infoNum) {
+ dRes_info_c* resInfo = getResInfo(i_arcName, i_resInfo, i_infoNum);
if (resInfo == NULL) {
+#ifdef DEBUG
+ if (stricmp(i_arcName, "Xtg_00") == 0) {
+ OS_REPORT("\x1b[35m<%s.arc> getRes: res nothing !!\n\x1b[m", i_arcName);
+ }
+#endif
resInfo = NULL;
} else if (resInfo->getArchive() == NULL) {
- OSReport_Warning("<%s.arc> getRes: res during reading !!\n", arcName);
+ OSReport_Warning("<%s.arc> getRes: res during reading !!\n", i_arcName);
resInfo = NULL;
}
+
return resInfo;
}
/* 8003C2EC-8003C37C 036C2C 0090+00 1/1 54/54 894/894 .text
* getRes__14dRes_control_cFPCclP11dRes_info_ci */
-void* dRes_control_c::getRes(char const* arcName, s32 resIdx, dRes_info_c* pInfo, int infoSize) {
- dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize);
-
+void* dRes_control_c::getRes(char const* i_arcName, s32 i_index, dRes_info_c* i_resInfo, int i_infoNum) {
+ dRes_info_c* resInfo = getResInfoLoaded(i_arcName, i_resInfo, i_infoNum);
if (resInfo == NULL) {
return resInfo;
}
+
JKRArchive* archive = resInfo->getArchive();
- u32 fileCount = archive->countFile();
+ int count = archive->countFile();
- if (resIdx >= (int)fileCount) {
- OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", arcName, resIdx,
- fileCount);
+ if (i_index >= count) {
+ OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", i_arcName, i_index,
+ count);
return NULL;
}
- return resInfo->getRes(resIdx);
+
+ return resInfo->getRes(i_index);
}
/* 8003C37C-8003C400 036CBC 0084+00 0/0 18/18 109/109 .text
* getRes__14dRes_control_cFPCcPCcP11dRes_info_ci */
-void* dRes_control_c::getRes(char const* arcName, char const* resName, dRes_info_c* pInfo,
- int infoSize) {
- dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize);
-
+void* dRes_control_c::getRes(char const* i_arcName, char const* i_resName, dRes_info_c* i_resInfo,
+ int i_infoNum) {
+ dRes_info_c* resInfo = getResInfoLoaded(i_arcName, i_resInfo, i_infoNum);
if (resInfo == NULL) {
return resInfo;
}
JKRArchive* archive = resInfo->getArchive();
- JKRArchive::SDIFileEntry* entry = archive->findNameResource(resName);
+ JKRArchive::SDIFileEntry* entry = archive->findNameResource(i_resName);
if (entry != NULL) {
return resInfo->getRes(entry - archive->mFiles);
} else {
+ OS_REPORT("\x1b[34m%s not found in %s.arc\n\x1b[m", i_resName, i_arcName);
return NULL;
}
}
/* 8003C400-8003C470 036D40 0070+00 0/0 7/7 4/4 .text
* getIDRes__14dRes_control_cFPCcUsP11dRes_info_ci */
-void* dRes_control_c::getIDRes(char const* arcName, u16 param_1, dRes_info_c* pInfo, int infoSize) {
- dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize);
-
+void* dRes_control_c::getIDRes(char const* i_arcName, u16 i_resID, dRes_info_c* i_resInfo, int i_infoNum) {
+ dRes_info_c* resInfo = getResInfoLoaded(i_arcName, i_resInfo, i_infoNum);
if (resInfo == NULL) {
return resInfo;
}
JKRArchive* archive = resInfo->getArchive();
- int index = mDoExt_resIDToIndex(archive, param_1);
-
+ int index = mDoExt_resIDToIndex(archive, i_resID);
if (index < 0) {
return 0;
}
@@ -816,73 +910,84 @@ void* dRes_control_c::getIDRes(char const* arcName, u16 param_1, dRes_info_c* pI
/* 8003C470-8003C4E4 036DB0 0074+00 0/0 3/3 0/0 .text syncAllRes__14dRes_control_cFP11dRes_info_ci
*/
-int dRes_control_c::syncAllRes(dRes_info_c* pInfo, int infoSize) {
- for (int i = 0; i < infoSize; i++) {
- if (pInfo->getDMCommand() != NULL && pInfo->setRes() > 0) {
+int dRes_control_c::syncAllRes(dRes_info_c* i_resInfo, int i_infoNum) {
+ for (int i = 0; i < i_infoNum; i++) {
+ if (i_resInfo->getDMCommand() != NULL && i_resInfo->setRes() > 0) {
return 1;
}
- pInfo++;
+ i_resInfo++;
}
+
return 0;
}
/* 8003C4E4-8003C5BC 036E24 00D8+00 1/1 0/0 0/0 .text
* setObjectRes__14dRes_control_cFPCcPvUlP7JKRHeap */
-int dRes_control_c::setObjectRes(char const* arcName, void* i_archiveRes, u32 param_2,
- JKRHeap* param_3) {
- if (!setRes(arcName, &mObjectInfo[0], 0x80, "", 0, NULL)) {
+int dRes_control_c::setObjectRes(char const* i_arcName, void* i_archiveRes, u32 i_bufferSize,
+ JKRHeap* i_heap) {
+ JUT_ASSERT(0x7A3, i_archiveRes != 0);
+
+#ifdef DEBUG
+ dRes_info_c* nowInfo = getResInfo(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo));
+ JUT_ASSERT(0x7A6, nowInfo == 0);
+#endif
+
+ if (!setRes(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo), "", mDoDvd_MOUNT_DIRECTION_HEAD, NULL)) {
return 0;
- } else {
- JKRMemArchive* memArchive =
- new JKRMemArchive(i_archiveRes, param_2, JKRMEMBREAK_FLAG_UNKNOWN0);
+ }
- if (memArchive == NULL || !memArchive->isMounted()) {
- return 0;
- } else {
- dRes_info_c* info = getResInfo(arcName, &mObjectInfo[0], 0x80);
- int resStatus = info->setRes(memArchive, param_3);
- return resStatus == 0 ? 1 : 0;
- }
+ JKRMemArchive* memArchive = new JKRMemArchive(i_archiveRes, i_bufferSize, JKRMEMBREAK_FLAG_UNKNOWN0);
+ if (memArchive == NULL || !memArchive->isMounted()) {
+ return 0;
+ }
+
+ dRes_info_c* info = getResInfo(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo));
+ JUT_ASSERT(0x7B7, info != 0);
+
+ int rt = info->setRes(memArchive, i_heap);
+ if (rt == 0) {
+ return 1;
}
+
+ return 0;
}
/* 8003C5BC-8003C638 036EFC 007C+00 0/0 2/2 0/0 .text setStageRes__14dRes_control_cFPCcP7JKRHeap
*/
-int dRes_control_c::setStageRes(char const* arcName, JKRHeap* pHeap) {
+int dRes_control_c::setStageRes(char const* i_arcName, JKRHeap* i_heap) {
char path[20];
- snprintf(path, 20, "/res/Stage/%s/", dComIfGp_getStartStageName());
- return setRes(arcName, &mStageInfo[0], 0x40, path, 1, pHeap);
+ snprintf(path, sizeof(path), "/res/Stage/%s/", dComIfGp_getStartStageName());
+ return setRes(i_arcName, mStageInfo, ARRAY_SIZE(mStageInfo), path, mDoDvd_MOUNT_DIRECTION_TAIL, i_heap);
}
/* 8003C638-8003C6B8 036F78 0080+00 0/0 2/2 0/0 .text dump__14dRes_control_cFv */
void dRes_control_c::dump() {
JUTReportConsole_f("\ndRes_control_c::dump mObjectInfo\n");
- dRes_info_c::dump(&mObjectInfo[0], ARRAY_SIZE(mObjectInfo));
- dRes_info_c::dump_long(&mObjectInfo[0], ARRAY_SIZE(mObjectInfo));
+ dRes_info_c::dump(mObjectInfo, ARRAY_SIZE(mObjectInfo));
+ dRes_info_c::dump_long(mObjectInfo, ARRAY_SIZE(mObjectInfo));
JUTReportConsole_f("\ndRes_control_c::dump mStageInfo\n");
- dRes_info_c::dump(&mStageInfo[0], ARRAY_SIZE(mStageInfo));
- dRes_info_c::dump_long(&mStageInfo[0], ARRAY_SIZE(mStageInfo));
+ dRes_info_c::dump(mStageInfo, ARRAY_SIZE(mStageInfo));
+ dRes_info_c::dump_long(mStageInfo, ARRAY_SIZE(mStageInfo));
}
/* 8003C6B8-8003C734 036FF8 007C+00 0/0 0/0 32/32 .text
* getObjectResName2Index__14dRes_control_cFPCcPCc */
-int dRes_control_c::getObjectResName2Index(char const* arcName, char const* param_1) {
- dRes_info_c* info = getResInfoLoaded(arcName, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo));
+int dRes_control_c::getObjectResName2Index(char const* i_arcName, char const* i_resName) {
+ dRes_info_c* info = getResInfoLoaded(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo));
if (info == NULL) {
return -1;
- } else if (param_1 == NULL) {
+ } else if (i_resName == NULL) {
return -1;
- } else {
- JKRArchive* archive = info->getArchive();
- JKRArchive::SDIFileEntry* entry = archive->findNameResource(param_1);
+ }
- if (entry != NULL) {
- return entry->file_id;
- } else {
- return -1;
- }
+ JKRArchive* archive = info->getArchive();
+ JKRArchive::SDIFileEntry* entry = archive->findNameResource(i_resName);
+ if (entry != NULL) {
+ return entry->file_id;
}
+
+ return -1;
}