From ff5f31b84453722de3d1cc1287725eec06d08c6a Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Wed, 18 Dec 2024 10:02:52 -0800 Subject: [PATCH] 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 --- .../rels/d_a_obj_glowSphere/symbols.txt | 24 +- configure.py | 4 +- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 17 + include/JSystem/J3DGraphBase/J3DMaterial.h | 1 + include/SSystem/SComponent/c_angle.h | 3 + include/d/actor/d_a_itembase.h | 1 + include/d/actor/d_a_obj_glowSphere.h | 172 +- include/d/actor/d_a_obj_life_container.h | 80 +- include/d/actor/d_a_player.h | 2 +- include/d/d_com_inf_game.h | 75 +- include/d/d_kankyo.h | 10 +- include/d/d_kankyo_wether.h | 33 +- include/d/d_resorce.h | 122 +- include/f_op/f_op_camera_mng.h | 4 + include/m_Do/m_Do_audio.h | 4 + include/m_Do/m_Do_dvd_thread.h | 3 + src/d/actor/d_a_kytag03.cpp | 4 +- src/d/actor/d_a_obj_glowSphere.cpp | 1305 +-- src/d/actor/d_a_obj_life_container.cpp | 1285 ++- src/d/d_com_inf_game.cpp | 24 + src/d/d_drawlist.cpp | 4 +- src/d/d_kankyo.cpp | 6 +- src/d/d_kankyo_rain.cpp | 6979 ++++++++++++----- src/d/d_kankyo_wether.cpp | 4 +- src/d/d_ky_thunder.cpp | 8 +- src/d/d_resorce.cpp | 603 +- 26 files changed, 6797 insertions(+), 3980 deletions(-) diff --git a/config/GZ2E01/rels/d_a_obj_glowSphere/symbols.txt b/config/GZ2E01/rels/d_a_obj_glowSphere/symbols.txt index b9602df4266..eeae6375ac1 100644 --- a/config/GZ2E01/rels/d_a_obj_glowSphere/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_glowSphere/symbols.txt @@ -30,10 +30,10 @@ actionMoveInit__10daGlwSph_cFv = .text:0x00000F80; // type:function size:0x24 sc actionMove__10daGlwSph_cFv = .text:0x00000FA4; // type:function size:0xA0 scope:global draw__10daGlwSph_cFv = .text:0x00001044; // type:function size:0x148 scope:global _delete__10daGlwSph_cFv = .text:0x0000118C; // type:function size:0x4C scope:global -daGlwSph_Draw__FP10daGlwSph_c = .text:0x000011D8; // type:function size:0x20 scope:global -daGlwSph_Execute__FP10daGlwSph_c = .text:0x000011F8; // type:function size:0x20 scope:global -daGlwSph_Delete__FP10daGlwSph_c = .text:0x00001218; // type:function size:0x20 scope:global -daGlwSph_Create__FP10fopAc_ac_c = .text:0x00001238; // type:function size:0x20 scope:global +daGlwSph_Draw__FP10daGlwSph_c = .text:0x000011D8; // type:function size:0x20 scope:local +daGlwSph_Execute__FP10daGlwSph_c = .text:0x000011F8; // type:function size:0x20 scope:local +daGlwSph_Delete__FP10daGlwSph_c = .text:0x00001218; // type:function size:0x20 scope:local +daGlwSph_Create__FP10fopAc_ac_c = .text:0x00001238; // type:function size:0x20 scope:local _clrLstBuf__12_GlSph_Mng_cFv = .text:0x00001258; // type:function size:0x24 scope:global entry__12_GlSph_Mng_cFP10daGlwSph_c = .text:0x0000127C; // type:function size:0x4C scope:global remove__12_GlSph_Mng_cFP10daGlwSph_c = .text:0x000012C8; // type:function size:0x34 scope:global @@ -67,12 +67,12 @@ mCcDObjInfo__10daGlwSph_c = .rodata:0x00000008; // type:object size:0x30 scope:g @4103 = .rodata:0x00000050; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000054; // type:object size:0xA scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -l_cull_box = .data:0x00000020; // type:object size:0x18 scope:global data:float +l_cull_box = .data:0x00000020; // type:object size:0x18 scope:local data:float mCcDSph__10daGlwSph_c = .data:0x00000038; // type:object size:0x40 scope:global -l_prmColor = .data:0x00000078; // type:object size:0x4 scope:global -l_envColor = .data:0x0000007C; // type:object size:0x10 scope:global +l_prmColor = .data:0x00000078; // type:object size:0x4 scope:local +l_envColor = .data:0x0000007C; // type:object size:0x10 scope:local @3934 = .data:0x0000008C; // type:object size:0xC scope:local @3935 = .data:0x00000098; // type:object size:0xC scope:local @3936 = .data:0x000000A4; // type:object size:0xC scope:local @@ -84,7 +84,7 @@ l_colorKB$4111 = .data:0x000000E0; // type:object size:0x4 scope:local l_colorCR$4112 = .data:0x000000E4; // type:object size:0x4 scope:local l_colorCG$4113 = .data:0x000000E8; // type:object size:0x4 scope:local l_colorCB$4114 = .data:0x000000EC; // type:object size:0x4 scope:local -l_daGlwSph_Method = .data:0x000000F0; // type:object size:0x20 scope:global +l_daGlwSph_Method = .data:0x000000F0; // type:object size:0x20 scope:local g_profile_Obj_glowSphere = .data:0x00000110; // type:object size:0x30 scope:global __vt__12dBgS_AcchCir = .data:0x00000140; // type:object size:0xC scope:global __vt__10cCcD_GStts = .data:0x0000014C; // type:object size:0xC scope:global @@ -115,11 +115,11 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local @3657 = .bss:0x00000048; // type:object size:0xC scope:local -l_HIO = .bss:0x00000054; // type:object size:0xC scope:global data:float +l_HIO = .bss:0x00000054; // type:object size:0xC scope:local data:float @3673 = .bss:0x00000060; // type:object size:0xC scope:local mSphMng__10daGlwSph_c = .bss:0x0000006C; // type:object size:0x3C4 scope:global -lbl_459_bss_430 = .bss:0x00000430; // type:object size:0x1 data:byte -lbl_459_bss_431 = .bss:0x00000431; // type:object size:0x1 data:byte +lbl_459_bss_430 = .bss:0x00000430; // type:object size:0x1 scope:local data:byte +lbl_459_bss_431 = .bss:0x00000431; // type:object size:0x1 scope:local data:byte sSeId$4016 = .bss:0x00000434; // type:object size:0x14 scope:local data:4byte mSphSe__12_GlSph_Mng_c = .bss:0x00000448; // type:object size:0x2 scope:global data:2byte mSeClrTmr__12_GlSph_Mng_c = .bss:0x0000044A; // type:object size:0x2 scope:global data:2byte diff --git a/configure.py b/configure.py index 79b7a1f99cb..33e7a6c7de5 100644 --- a/configure.py +++ b/configure.py @@ -1418,7 +1418,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_mg_rod"), ActorRel(NonMatching, "d_a_midna"), ActorRel(Equivalent, "d_a_nbomb"), - ActorRel(NonMatching, "d_a_obj_life_container"), + ActorRel(Equivalent, "d_a_obj_life_container"), # vtable ordering ActorRel(NonMatching, "d_a_obj_yousei"), ActorRel(NonMatching, "d_a_spinner"), ActorRel(Matching, "d_a_suspend"), @@ -1824,7 +1824,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_ganonwall2"), ActorRel(Matching, "d_a_obj_gb"), ActorRel(NonMatching, "d_a_obj_geyser"), - ActorRel(NonMatching, "d_a_obj_glowSphere"), + ActorRel(Matching, "d_a_obj_glowSphere"), ActorRel(NonMatching, "d_a_obj_gm"), ActorRel(NonMatching, "d_a_obj_goGate"), ActorRel(NonMatching, "d_a_obj_gomikabe"), diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 2d6107db5cf..7f21d3d1fe1 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -24,6 +24,23 @@ struct JUTDataFileHeader { // actual struct name unknown /* 0x20 */ JUTDataBlockHeader mFirstBlock; }; +// unknown name. refers to ANK1 chunk of BCK files +struct J3DAnmTransform_ANK1 { + /* 0x00 */ u32 magic; + /* 0x04 */ u32 size; + /* 0x08 */ u8 attribute; + /* 0x09 */ u8 rotation_frac; + /* 0x0A */ s16 duration; + /* 0x0C */ s16 keyframe_num; + /* 0x0E */ s16 scale_entries; + /* 0x10 */ s16 rotation_entries; + /* 0x12 */ s16 translation_entries; + /* 0x14 */ u32 anm_data_offset; + /* 0x18 */ u32 scale_data_offset; + /* 0x1C */ u32 rotation_data_offset; + /* 0x20 */ u32 translation_data_offset; +}; + typedef struct _GXColor GXColor; typedef struct _GXColorS10 GXColorS10; diff --git a/include/JSystem/J3DGraphBase/J3DMaterial.h b/include/JSystem/J3DGraphBase/J3DMaterial.h index 7deeff03f0f..41135222183 100644 --- a/include/JSystem/J3DGraphBase/J3DMaterial.h +++ b/include/JSystem/J3DGraphBase/J3DMaterial.h @@ -78,6 +78,7 @@ public: J3DTexCoord* getTexCoord(u32 idx) { return mTexGenBlock->getTexCoord(idx); } J3DZMode* getZMode() { return mPEBlock->getZMode(); } J3DBlend* getBlend() { return mPEBlock->getBlend(); } + J3DColorChan* getColorChan(u32 idx) { return getColorBlock()->getColorChan(idx); } void setTevColor(u32 i, const J3DGXColorS10* i_color) { mTevBlock->setTevColor(i, i_color); } void setTevKColor(u32 i, const J3DGXColor* i_color) { mTevBlock->setTevKColor(i, i_color); } diff --git a/include/SSystem/SComponent/c_angle.h b/include/SSystem/SComponent/c_angle.h index 2ac50666071..db0055ef6ea 100644 --- a/include/SSystem/SComponent/c_angle.h +++ b/include/SSystem/SComponent/c_angle.h @@ -69,6 +69,9 @@ struct cAngle { /* Converts Degree value to s16 angle */ static s16 d2s(f32 d) { return Degree_to_SAngle(d); } + /* Converts s16 angle to Degree value */ + static f32 s2d(s16 a) { return SAngle_to_Degree(a); } + template static T Adjust(T f1, T f2, T f3); }; diff --git a/include/d/actor/d_a_itembase.h b/include/d/actor/d_a_itembase.h index 2cce55b3975..7f248253fe8 100644 --- a/include/d/actor/d_a_itembase.h +++ b/include/d/actor/d_a_itembase.h @@ -3,6 +3,7 @@ #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" +#include "d/d_a_itembase_static.h" #include "f_op/f_op_actor_mng.h" struct daItemBase_data { diff --git a/include/d/actor/d_a_obj_glowSphere.h b/include/d/actor/d_a_obj_glowSphere.h index 73c75253716..e2f3d8f5f82 100644 --- a/include/d/actor/d_a_obj_glowSphere.h +++ b/include/d/actor/d_a_obj_glowSphere.h @@ -2,6 +2,78 @@ #define D_A_OBJ_GLOWSPHERE_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" + +class daGlwSph_c; +class _GlSph_LstInfo_c{ +public: + _GlSph_LstInfo_c() { + mpSph = NULL; + mIsSet = false; + } + + ~_GlSph_LstInfo_c() {} + + void Set(daGlwSph_c* i_sph) { + if (!mIsSet && i_sph != NULL) { + mpSph = i_sph; + mIsSet = true; + } + } + + void Remove() { + mpSph = NULL; + mIsSet = false; + } + + bool isSet() { return mIsSet; } + daGlwSph_c* getpSph() { return mpSph; } + +private: + /* 0x0 */ daGlwSph_c* mpSph; + /* 0x4 */ s8 mIsSet; +}; + +class _GlSph_Mng_c { +public: + _GlSph_Mng_c() { + field_0x0 = 0; + } + + ~_GlSph_Mng_c() { + reset(); + } + + /* 80BFA4B8 */ void _clrLstBuf(); + /* 80BFA4DC */ int entry(daGlwSph_c*); + /* 80BFA528 */ void remove(daGlwSph_c*); + /* 80BFA55C */ int _setting_main(); + /* 80BFA5C4 */ bool _chkAllGet_main(); + /* 80BFA60C */ void SphSeProc(); + /* 80BFA6D8 */ static void clrSphSe(); + /* 80BFA6E8 */ static u16 getSphSe(); + /* 80BFA6F8 */ static void incSphSe(); + + void setting() { + _setting_main(); + } + + bool isAllGet() { + return _chkAllGet_main(); + } + + void reset() { + field_0x0 = 0; + _clrLstBuf(); + } + + static u16 mSphSe; + static s16 mSeClrTmr; + + /* 0x0 */ int field_0x0; + /* 0x4 */ _GlSph_LstInfo_c mListBuf[120]; +}; /** * @ingroup actors-objects @@ -13,12 +85,27 @@ */ class daGlwSph_c : public fopAc_ac_c { public: - /* 80BF9430 */ void getSphMng(); + enum COLOR_e { + COLOR_GRAY_e, + COLOR_RED_e, + COLOR_YELLOW_e, + COLOR_BLUE_e, + + COLOR_DEFAULT_e = 0xFF, + }; + + enum ACTION_e { + ACTION_WAIT_e, + ACTION_GET_e, + ACTION_MOVE_e, + }; + + /* 80BF9430 */ _GlSph_Mng_c& getSphMng(); /* 80BF943C */ void setBaseMtx(); - /* 80BF94AC */ void createHeapCallBack(fopAc_ac_c*); - /* 80BF94CC */ void CreateHeap(); - /* 80BF95D4 */ void create(); - /* 80BF9B1C */ void execute(); + /* 80BF94AC */ static int createHeapCallBack(fopAc_ac_c*); + /* 80BF94CC */ int CreateHeap(); + /* 80BF95D4 */ int create(); + /* 80BF9B1C */ int execute(); /* 80BF9BC0 */ void actionMain(); /* 80BF9DF0 */ void effectSet(); /* 80BF9F30 */ void getSE(); @@ -29,44 +116,61 @@ public: /* 80BFA130 */ void actionGet(); /* 80BFA1E0 */ void actionMoveInit(); /* 80BFA204 */ void actionMove(); - /* 80BFA2A4 */ void draw(); - /* 80BFA3EC */ void _delete(); + /* 80BFA2A4 */ int draw(); + /* 80BFA3EC */ int _delete(); - static u8 const mCcDObjInfo[48]; - static u8 mCcDSph[64]; - static u8 mSphMng[964]; + int getSw() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getArg0() { return fopAcM_GetParamBit(this, 8, 8); } + u8 getColor() { return fopAcM_GetParamBit(this, 0x10, 8); } -private: - /* 0x568 */ u8 field_0x568[0x98c - 0x568]; + void onGetFlag() { mGetFlag = true; } + void offGetFlag() { mGetFlag = false; } + void saveGetFlag() { field_0x951 = mGetFlag; } + bool is_getted() { return mGetFlag == true; } + + void reset() { + current.pos = home.pos; + mSphCollider.OnCoSetBit(); + offGetFlag(); + saveGetFlag(); + } + + static const dCcD_SrcGObjInf mCcDObjInfo; + static dCcD_SrcSph mCcDSph; + static _GlSph_Mng_c mSphMng; + + /* 0x568 */ request_of_phase_process_class mPhase; + /* 0x570 */ J3DModel* mpModel; + /* 0x574 */ mDoExt_btkAnm mBtk; + /* 0x58C */ mDoExt_brkAnm mBrk; + /* 0x5A4 */ dBgS_ObjAcch mAcch; + /* 0x77C */ dBgS_AcchCir mAcchCir; + /* 0x7BC */ dCcD_Stts mColliderStts; + /* 0x7F8 */ dCcD_Sph mSphCollider; + /* 0x930 */ LIGHT_INFLUENCE mLight; + /* 0x950 */ u8 mGetFlag; + /* 0x951 */ u8 field_0x951; + /* 0x952 */ u8 mAction; + /* 0x953 */ u8 mIsNoMoveHome; + /* 0x954 */ u8 mColor; + /* 0x955 */ u8 mMoveTimer; + /* 0x958 */ f32 mMoveSpeed; + /* 0x95C */ cXyz mMoveVec; + /* 0x968 */ cXyz field_0x968; + /* 0x974 */ cXyz field_0x974; + /* 0x980 */ s16 field_0x980; + /* 0x984 */ u32 mEmitterIDs[2]; }; STATIC_ASSERT(sizeof(daGlwSph_c) == 0x98C); -class daGlwSph_HIO_c { +class daGlwSph_HIO_c : public fOpAcm_HIO_entry_c { public: /* 80BF934C */ daGlwSph_HIO_c(); - /* 80BFA76C */ ~daGlwSph_HIO_c(); -}; + /* 80BFA76C */ virtual ~daGlwSph_HIO_c() {} -class _GlSph_Mng_c { -public: - /* 80BFA4B8 */ void _clrLstBuf(); - /* 80BFA4DC */ void entry(daGlwSph_c*); - /* 80BFA528 */ void remove(daGlwSph_c*); - /* 80BFA55C */ void _setting_main(); - /* 80BFA5C4 */ void _chkAllGet_main(); - /* 80BFA60C */ void SphSeProc(); - /* 80BFA6D8 */ void clrSphSe(); - /* 80BFA6E8 */ void getSphSe(); - /* 80BFA6F8 */ void incSphSe(); - /* 80BFA890 */ ~_GlSph_Mng_c(); + /* 0x4 */ f32 speed; + /* 0x8 */ f32 speed2; }; -class _GlSph_LstInfo_c{ -public: - /* 80BFA900 */ ~_GlSph_LstInfo_c(); - /* 80BFA93C */ _GlSph_LstInfo_c(); -}; - - #endif /* D_A_OBJ_GLOWSPHERE_H */ diff --git a/include/d/actor/d_a_obj_life_container.h b/include/d/actor/d_a_obj_life_container.h index 70e4644af53..f8e50269fa7 100644 --- a/include/d/actor/d_a_obj_life_container.h +++ b/include/d/actor/d_a_obj_life_container.h @@ -1,7 +1,8 @@ #ifndef D_A_OBJ_LIFE_CONTAINER_H #define D_A_OBJ_LIFE_CONTAINER_H -#include "f_op/f_op_actor_mng.h" +#include "d/actor/d_a_itembase.h" +#include "d/d_particle.h" /** * @ingroup actors-objects @@ -11,37 +12,76 @@ * @details * */ -class daObjLife_c : public fopAc_ac_c { +class daObjLife_c : public daItemBase_c { public: + enum Status_e { + STATUS_WAIT_e, + STATUS_ORDER_GET_DEMO_e, + STATUS_GET_DEMO_e, + STATUS_SW_ON_WAIT_e, + STATUS_BOOMERANG_CARRY_e, + STATUS_WAIT_2_e, + }; + /* 804CCBE4 */ void initBaseMtx(); /* 804CCC04 */ void setBaseMtx(); - /* 804CCC6C */ void Create(); + /* 804CCC6C */ int Create(); /* 804CCE00 */ void setEffect(); /* 804CCF5C */ void endEffect00(); /* 804CCFAC */ void endEffect02(); - /* 804CCFD8 */ bool __CreateHeap(); - /* 804CCFE0 */ void create(); + /* 804CCFE0 */ int create(); /* 804CD428 */ void bg_check(); - /* 804CD5B8 */ void actionWaitInit(); - /* 804CD660 */ void actionWait(); - /* 804CD8C0 */ void initActionOrderGetDemo(); - /* 804CD98C */ void actionOrderGetDemo(); - /* 804CDA08 */ void actionGetDemo(); - /* 804CDBC8 */ void actionSwOnWait(); - /* 804CDC2C */ void actionInitBoomerangCarry(); - /* 804CDD0C */ void actionBoomerangCarry(); - /* 804CDD7C */ void actionInitWait2(); - /* 804CDD8C */ void actionWait2(); + /* 804CD5B8 */ int actionWaitInit(); + /* 804CD660 */ int actionWait(); + /* 804CD8C0 */ int initActionOrderGetDemo(); + /* 804CD98C */ int actionOrderGetDemo(); + /* 804CDA08 */ int actionGetDemo(); + /* 804CDBC8 */ int actionSwOnWait(); + /* 804CDC2C */ int actionInitBoomerangCarry(); + /* 804CDD0C */ int actionBoomerangCarry(); + /* 804CDD7C */ int actionInitWait2(); + /* 804CDD8C */ int actionWait2(); /* 804CDDAC */ void calcScale(); - /* 804CDE70 */ void execute(); - /* 804CE19C */ void draw(); - /* 804CE1F0 */ void setListStart(); - /* 804CE214 */ void _delete(); + /* 804CDE70 */ int execute(); + /* 804CE19C */ int draw(); + /* 804CE214 */ int _delete(); + + /* 804CE1F0 */ virtual void setListStart(); + /* 804CCFD8 */ virtual int __CreateHeap(); + + bool chkStatus(u8 i_status) { return mStatus == i_status; } + void setStatus(u8 i_status) { mStatus = i_status; } + + u8 getSaveBitNo() { return fopAcM_GetParamBit(this, 8, 8); } + u8 getItemNo() { return fopAcM_GetParamBit(this, 0, 8); } + int getSwNo() { return 0xFF; } void setPos(cXyz); private: - /* 0x568 */ u8 field_0x568[0x9d4 - 0x568]; + /* 0x92C */ fpc_ProcID mItemId; + /* 0x930 */ int mCounter; + /* 0x934 */ u8 mStatus; + /* 0x935 */ u8 field_0x935; + /* 0x936 */ u8 mGndLandCount; + /* 0x937 */ u8 mIsPrmsInit; + /* 0x938 */ s16 field_0x938; + /* 0x93A */ s16 field_0x93a; + /* 0x93C */ cXyz mPrevSpeed; + /* 0x948 */ u16 mLv5Counter; + /* 0x94C */ f32 field_0x94c; + /* 0x950 */ f32 field_0x950; + /* 0x954 */ f32 field_0x954; + /* 0x958 */ u8 field_0x958[0x95E - 0x958]; + /* 0x95E */ s16 field_0x95e; + /* 0x960 */ u8 field_0x960[0x962 - 0x960]; + /* 0x962 */ s16 mRotateSpeed; + /* 0x964 */ u8 field_0x964[0x974 - 0x964]; + /* 0x974 */ dPa_followEcallBack mEffect0; + /* 0x988 */ dPa_followEcallBack mEffect1; + /* 0x99C */ dPa_followEcallBack mEffect2; + /* 0x9B0 */ Z2SoundObjSimple mSound; + /* 0x9D0 */ u8 mIsHookCarry; }; STATIC_ASSERT(sizeof(daObjLife_c) == 0x9d4); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index cf3e5484e54..271beebeb80 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -814,7 +814,7 @@ public: virtual s16 getBoardCutTurnOffsetAngleY() const; virtual cXyz* getMagneHitPos(); virtual cXyz* getMagneBootsTopVec(); - virtual cXyz* getKandelaarFlamePos(); + virtual cXyz* getKandelaarFlamePos() { return NULL; } virtual bool checkUseKandelaar(int); virtual void setDkCaught(fopAc_ac_c*); virtual void onPressedDamage(cXyz const&, short); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 6c7f1f27975..a649da80ce3 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -839,13 +839,13 @@ extern GXColor g_saftyWhiteColor; int dComLbG_PhaseHandler(request_of_phase_process_class*, request_of_phase_process_fn*, void*); BOOL dComIfG_resetToOpening(scene_class* scene); char* dComIfG_getRoomArcName(int roomNo); -void* dComIfG_getStageRes(char const* resName); -void* dComIfG_getOldStageRes(char const* resName); +void* dComIfG_getStageRes(char const* i_resName); +void* dComIfG_getOldStageRes(char const* i_resName); void dComIfG_get_timelayer(int* layer); -int dComIfG_resDelete(request_of_phase_process_class* i_phase, char const* resName); +int dComIfG_resDelete(request_of_phase_process_class* i_phase, char const* i_resName); int dComIfG_changeOpeningScene(scene_class* scene, s16 procName); -int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* arc_name); -int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* resName, JKRHeap* heap); +int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_arcName); +int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_resName, JKRHeap* heap); int dComIfG_TimerDeleteRequest(int i_mode); int dComIfG_TimerStart(int i_mode, s16 i_time); bool dComIfGp_isLightDropMapVisible(); @@ -888,44 +888,57 @@ inline void dComIfG_setTimerLimitTimeMs(int i_time) { g_dComIfG_gameInfo.play.setTimerLimitTimeMs(i_time); } -inline int dComIfG_setObjectRes(const char* name, u8 param_1, JKRHeap* heap) { - return g_dComIfG_gameInfo.mResControl.setObjectRes(name, param_1, heap); +/** + * Attempts to add a new Object Resource Archive (*.arc) into the Resource Control. + * @param i_arcName Name of archive to be added + * @param i_mountDirection The direction to mount the archive. mDoDvd_MOUNT_DIRECTION_HEAD or mDoDvd_MOUNT_DIRECTION_TAIL + * @param i_heap Pointer to heap to load resources into + * @return TRUE if successful, FALSE otherwise + */ +inline int dComIfG_setObjectRes(const char* i_arcName, u8 i_mountDirection, JKRHeap* i_heap) { + return g_dComIfG_gameInfo.mResControl.setObjectRes(i_arcName, i_mountDirection, i_heap); } -inline int dComIfG_setObjectRes(const char* name, void* param_1, u32 param_2) { - return g_dComIfG_gameInfo.mResControl.setObjectRes(name, param_1, param_2, NULL); +inline int dComIfG_setObjectRes(const char* i_arcName, void* i_archiveRes, u32 i_bufferSize) { + return g_dComIfG_gameInfo.mResControl.setObjectRes(i_arcName, i_archiveRes, i_bufferSize, NULL); } -inline int dComIfG_setStageRes(const char* name, JKRHeap* heap) { - return g_dComIfG_gameInfo.mResControl.setStageRes(name, heap); +/** + * Attempts to add a new Stage Resource Archive (*.arc) into the Resource Control. + * @param i_arcName Name of archive to be added + * @param i_heap Pointer to heap to load resources into + * @return TRUE if successful, FALSE otherwise + */ +inline int dComIfG_setStageRes(const char* i_arcName, JKRHeap* i_heap) { + return g_dComIfG_gameInfo.mResControl.setStageRes(i_arcName, i_heap); } -inline int dComIfG_syncObjectRes(const char* name) { - return g_dComIfG_gameInfo.mResControl.syncObjectRes(name); +inline int dComIfG_syncObjectRes(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.syncObjectRes(i_arcName); } -inline int dComIfG_syncStageRes(const char* name) { - return g_dComIfG_gameInfo.mResControl.syncStageRes(name); +inline int dComIfG_syncStageRes(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.syncStageRes(i_arcName); } -inline int dComIfG_deleteObjectResMain(const char* res) { - return g_dComIfG_gameInfo.mResControl.deleteObjectRes(res); +inline int dComIfG_deleteObjectResMain(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.deleteObjectRes(i_arcName); } -inline int dComIfG_deleteStageRes(const char* res) { - return g_dComIfG_gameInfo.mResControl.deleteStageRes(res); +inline int dComIfG_deleteStageRes(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.deleteStageRes(i_arcName); } -inline void* dComIfG_getStageRes(const char* arcName, const char* resName) { - return g_dComIfG_gameInfo.mResControl.getStageRes(arcName, resName); +inline void* dComIfG_getStageRes(const char* i_arcName, const char* i_resName) { + return g_dComIfG_gameInfo.mResControl.getStageRes(i_arcName, i_resName); } -inline void* dComIfG_getObjectRes(const char* arcName, const char* resName) { - return g_dComIfG_gameInfo.mResControl.getObjectRes(arcName, resName); +inline void* dComIfG_getObjectRes(const char* i_arcName, const char* i_resName) { + return g_dComIfG_gameInfo.mResControl.getObjectRes(i_arcName, i_resName); } -inline void* dComIfG_getObjectRes(const char* arcName, int param_1) { - return g_dComIfG_gameInfo.mResControl.getObjectRes(arcName, param_1); +inline void* dComIfG_getObjectRes(const char* i_arcName, int i_index) { + return g_dComIfG_gameInfo.mResControl.getObjectRes(i_arcName, i_index); } inline dBgS& dComIfG_Bgsp() { @@ -940,20 +953,20 @@ inline dCcS& dComIfG_Ccsp2() { return g_dComIfG_gameInfo.play.mCcs; } -inline dRes_info_c* dComIfG_getObjectResInfo(const char* arc_name) { - return g_dComIfG_gameInfo.mResControl.getObjectResInfo(arc_name); +inline dRes_info_c* dComIfG_getObjectResInfo(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.getObjectResInfo(i_arcName); } -inline dRes_info_c* dComIfG_getStageResInfo(const char* arc_name) { - return g_dComIfG_gameInfo.mResControl.getStageResInfo(arc_name); +inline dRes_info_c* dComIfG_getStageResInfo(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.getStageResInfo(i_arcName); } inline int dComIfG_syncAllObjectRes() { return g_dComIfG_gameInfo.mResControl.syncAllObjectRes(); } -inline void* dComIfG_getObjectIDRes(const char* arc_name, u16 id) { - return g_dComIfG_gameInfo.mResControl.getObjectIDRes(arc_name, id); +inline void* dComIfG_getObjectIDRes(const char* i_arcName, u16 i_resID) { + return g_dComIfG_gameInfo.mResControl.getObjectIDRes(i_arcName, i_resID); } inline u8 dComIfG_getBrightness() { diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index ff4580d46f2..0929c155779 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -137,10 +137,10 @@ struct GB_WIND_INFLUENCE { struct EF_THUNDER { /* 0x00 */ u8 mStatus; - /* 0x01 */ u8 mStateTimer; + /* 0x01 */ u8 mState; /* 0x02 */ u8 field_0x2; /* 0x04 */ int mMode; - /* 0x08 */ f32 field_0x8; + /* 0x08 */ f32 mFlashTimer; /* 0x0C */ f32 field_0xc; /* 0x10 */ f32 field_0x10; /* 0x14 */ f32 field_0x14; @@ -605,5 +605,11 @@ _GXColor dKy_light_influence_col(_GXColor* param_0, f32 param_1); static void dKy_WaterIn_Light_set(); void dKy_SordFlush_set(cXyz param_0, int param_1); void dKy_camera_water_in_status_set(u8 status); +void dKy_mock_light_every_set(LIGHT_INFLUENCE* param_0); +f32 dKy_move_room_ratio(dKy_tevstr_c* param_0, s8* param_1); +void dKy_bg1_addcol_amb_set(s16 r, s16 g, s16 b, f32 factor); +void dKy_vrbox_addcol_sky0_set(s16 r, s16 g, s16 b, f32 factor); +void dKy_vrbox_addcol_kasumi_set(s16 r, s16 g, s16 b, f32 factor); +void dKy_addcol_fog_set(s16 r, s16 g, s16 b, f32 factor); #endif /* D_KANKYO_D_KANKYO_H */ diff --git a/include/d/d_kankyo_wether.h b/include/d/d_kankyo_wether.h index a0cf10e2350..30d35b37dfd 100644 --- a/include/d/d_kankyo_wether.h +++ b/include/d/d_kankyo_wether.h @@ -55,7 +55,7 @@ public: /* 0x5C */ f32 mVisibility; /* 0x60 */ f32 mSunAlpha; /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; + /* 0x68 */ f32 mMoonAlpha; /* 0x6C */ f32 field_0x6c; /* 0x70 */ GXColor mColor; /* 0x74 */ GXColor field_0x74; @@ -174,7 +174,7 @@ public: virtual void draw(); virtual ~dKankyo_star_Packet(); - /* 0x10 */ u8* field_0x10; + /* 0x10 */ u8* mpTex; /* 0x14 */ STAR_EFF mEffect[1]; /* 0x48 */ s16 mEffectNum; }; @@ -214,11 +214,14 @@ struct CLOUD_EFF { /* 80056E38 */ ~CLOUD_EFF(); /* 80056E74 */ CLOUD_EFF(); - /* 0x00 */ u8 mStatus; + /* 0x00 */ s8 mStatus; /* 0x04 */ cXyz mPosition; /* 0x10 */ cXyz mBasePos; /* 0x1C */ cXyz mPntWindSpeed; - /* 0x28 */ u8 field_0x28[0x10]; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ u16 field_0x2c; + /* 0x30 */ f32 mAlpha; + /* 0x34 */ f32 mSize; }; // Size: 0x38 class dKankyo_cloud_Packet : public J3DPacket { @@ -235,7 +238,7 @@ struct VRKUMO_EFF { /* 80056F18 */ ~VRKUMO_EFF(); /* 80056F54 */ VRKUMO_EFF(); - /* 0x00 */ u8 mStatus; + /* 0x00 */ s8 mStatus; /* 0x04 */ cXyz mPosition; /* 0x10 */ cXyz mBasePos; /* 0x1C */ f32 mHeight; @@ -268,8 +271,8 @@ struct EF_ODOUR_EFF { /* 0x00 */ u8 mStatus; /* 0x04 */ cXyz mPosition; /* 0x10 */ cXyz mBasePos; - /* 0x1C */ s16 field_0x1c; - /* 0x1E */ s16 field_0x1e; + /* 0x1C */ s16 mRotX; + /* 0x1E */ s16 mRotY; /* 0x20 */ f32 field_0x20; /* 0x24 */ f32 field_0x24; /* 0x28 */ f32 field_0x28; @@ -284,18 +287,28 @@ public: /* 0x00010 */ u8* mpResTex; /* 0x00014 */ EF_ODOUR_EFF mOdourEff[2000]; /* 0x17714 */ cXyz field_0x17714; - /* 0x17720 */ u8 field_0x17720[0x17728 - 0x17720]; + /* 0x17720 */ u8 field_0x17720[0x17724 - 0x17720]; + /* 0x17724 */ s16 field_0x17724; + /* 0x17720 */ s16 field_0x17726; }; // Size: 0x17728 struct EF_MUD_EFF { /* 80056FFC */ ~EF_MUD_EFF(); /* 80057038 */ EF_MUD_EFF(); - /* 0x00 */ u8 mStatus; + /* 0x00 */ s8 mStatus; /* 0x04 */ cXyz mPosition; /* 0x10 */ cXyz mBasePos; /* 0x1C */ cXyz field_0x1c; - /* 0x28 */ u8 field_0x28[0x20]; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ s16 field_0x40; + /* 0x42 */ s16 field_0x42; + /* 0x44 */ u8 field_0x44[0x48 - 0x44]; }; // Size: 0x48 class dKankyo_mud_Packet : public J3DPacket { diff --git a/include/d/d_resorce.h b/include/d/d_resorce.h index 9603d4e9af0..0b5f4168199 100644 --- a/include/d/d_resorce.h +++ b/include/d/d_resorce.h @@ -10,21 +10,29 @@ class JKRSolidHeap; class dRes_info_c { public: - /* 8003A260 */ dRes_info_c(); - /* 8003A280 */ ~dRes_info_c(); - /* 8003A348 */ int set(char const*, char const*, u8, JKRHeap*); - /* 8003AB30 */ static void onWarpMaterial(J3DModelData*); - /* 8003AC1C */ static void offWarpMaterial(J3DModelData*); - /* 8003AD08 */ static void setWarpSRT(J3DModelData*, cXyz const&, f32, f32); - /* 8003AE14 */ static J3DModelData* loaderBasicBmd(u32, void*); - /* 8003B30C */ int loadResource(); - /* 8003B998 */ void deleteArchiveRes(); - /* 8003BAC4 */ int setRes(JKRArchive*, JKRHeap*); - /* 8003BAF8 */ int setRes(); - /* 8003BD2C */ static void dump_long(dRes_info_c*, int); - /* 8003BE38 */ static void dump(dRes_info_c*, int); + dRes_info_c(); + ~dRes_info_c(); + + int set(char const* i_arcName, char const* i_path, u8 i_mountDirection, JKRHeap* i_heap); + int loadResource(); + void deleteArchiveRes(); + int setRes(JKRArchive* i_archive, JKRHeap* i_heap); + int setRes(); + + static void onWarpMaterial(J3DModelData* i_modelData); + static void offWarpMaterial(J3DModelData* i_modelData); + static void setWarpSRT(J3DModelData* i_modelData, const cXyz& i_pos, f32 i_transX, f32 i_transY); + static J3DModelData* loaderBasicBmd(u32 i_tag, void* i_data); + static void dump_long(dRes_info_c* i_resInfo, int i_infoNum); + static void dump(dRes_info_c* i_resInfo, int i_infoNum); + + void* getRes(s32 i_index) { + JUT_ASSERT(25, i_index >= 0 && i_index < getResNum()); + return *(mRes + i_index); + } + + s32 getResNum() { return mArchive->countFile(); } - void* getRes(u32 resIdx) { return *(mRes + resIdx); } int getCount() { return mCount; } char* getArchiveName() { return mArchiveName; } mDoDvdThd_mountArchive_c* getDMCommand() { return mDMCommand; } @@ -34,6 +42,8 @@ public: return --mCount; } + static const int NAME_MAX = 8; + private: /* 0x00 */ char mArchiveName[11]; /* 0x0C */ u16 mCount; @@ -49,71 +59,73 @@ STATIC_ASSERT(sizeof(dRes_info_c) == 0x24); class dRes_control_c { public: dRes_control_c() {} - /* 8003BFB0 */ ~dRes_control_c(); - /* 8003C078 */ static int setRes(char const*, dRes_info_c*, int, char const*, u8, JKRHeap*); - /* 8003C160 */ static int syncRes(char const*, dRes_info_c*, int); - /* 8003C194 */ static int deleteRes(char const*, dRes_info_c*, int); - /* 8003C37C */ static void* getRes(char const*, char const*, dRes_info_c*, int); - /* 8003C1E4 */ static dRes_info_c* getResInfo(char const*, dRes_info_c*, int); - /* 8003C260 */ static dRes_info_c* newResInfo(dRes_info_c*, int); - /* 8003C288 */ static dRes_info_c* getResInfoLoaded(char const*, dRes_info_c*, int); - /* 8003C2EC */ static void* getRes(char const*, s32, dRes_info_c*, int); - /* 8003C400 */ static void* getIDRes(char const*, u16, dRes_info_c*, int); - /* 8003C470 */ static int syncAllRes(dRes_info_c*, int); - /* 8003C4E4 */ int setObjectRes(char const*, void*, u32, JKRHeap*); - /* 8003C5BC */ int setStageRes(char const*, JKRHeap*); - /* 8003C638 */ void dump(); - /* 8003C6B8 */ int getObjectResName2Index(char const*, char const*); + ~dRes_control_c(); - int setObjectRes(const char* name, u8 param_1, JKRHeap* heap) { - return setRes(name, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo), "/res/Object/", param_1, - heap); + int setObjectRes(char const* i_arcName, void* i_archiveRes, u32 i_bufferSize, JKRHeap* i_heap); + int setStageRes(char const* i_arcName, JKRHeap* i_heap); + void dump(); + int getObjectResName2Index(char const* i_arcName, char const* i_resName); + + static int setRes(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum, char const* i_path, u8 i_mountDirection, JKRHeap* i_heap); + static int syncRes(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum); + static int deleteRes(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum); + static void* getRes(char const* i_arcName, char const* i_resName, dRes_info_c* i_resInfo, int i_infoNum); + static dRes_info_c* getResInfo(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum); + static dRes_info_c* newResInfo(dRes_info_c* i_resInfo, int i_infoNum); + static dRes_info_c* getResInfoLoaded(char const* i_arcName, dRes_info_c* i_resInfo, int i_infoNum); + static void* getRes(char const* i_arcName, s32 i_index, dRes_info_c* i_resInfo, int i_infoNum); + static void* getIDRes(char const* i_arcName, u16 i_resID, dRes_info_c* i_resInfo, int i_infoNum); + static int syncAllRes(dRes_info_c* i_resInfo, int i_infoNum); + + int setObjectRes(const char* i_arcName, u8 i_mountDirection, JKRHeap* i_heap) { + return setRes(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo), "/res/Object/", i_mountDirection, + i_heap); } - void* getObjectRes(const char* arcName, const char* resName) { - return getRes(arcName, resName, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + void* getObjectRes(const char* i_arcName, const char* resName) { + return getRes(i_arcName, resName, mObjectInfo, ARRAY_SIZE(mObjectInfo)); } - void* getObjectRes(const char* arcName, s32 param_1) { - return getRes(arcName, param_1, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + void* getObjectRes(const char* i_arcName, s32 i_index) { + return getRes(i_arcName, i_index, mObjectInfo, ARRAY_SIZE(mObjectInfo)); } - void* getObjectIDRes(const char* arcName, u16 id) { - return getIDRes(arcName, id, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + void* getObjectIDRes(const char* i_arcName, u16 i_resID) { + return getIDRes(i_arcName, i_resID, mObjectInfo, ARRAY_SIZE(mObjectInfo)); } - int syncObjectRes(const char* name) { - return syncRes(name, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + int syncObjectRes(const char* i_arcName) { + return syncRes(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo)); } - int syncStageRes(const char* name) { - return syncRes(name, &mStageInfo[0], ARRAY_SIZE(mStageInfo)); + int syncStageRes(const char* i_arcName) { + return syncRes(i_arcName, mStageInfo, ARRAY_SIZE(mStageInfo)); } - int syncAllObjectRes() { return syncAllRes(&mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); } + int syncAllObjectRes() { return syncAllRes(mObjectInfo, ARRAY_SIZE(mObjectInfo)); } - int deleteObjectRes(const char* name) { - return deleteRes(name, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + int deleteObjectRes(const char* i_arcName) { + return deleteRes(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo)); } - int deleteStageRes(const char* name) { - return deleteRes(name, &mStageInfo[0], ARRAY_SIZE(mStageInfo)); + int deleteStageRes(const char* i_arcName) { + return deleteRes(i_arcName, mStageInfo, ARRAY_SIZE(mStageInfo)); } - void* getStageRes(const char* arcName, const char* resName) { - return getRes(arcName, resName, &mStageInfo[0], ARRAY_SIZE(mStageInfo)); + void* getStageRes(const char* i_arcName, const char* i_resName) { + return getRes(i_arcName, i_resName, mStageInfo, ARRAY_SIZE(mStageInfo)); } - dRes_info_c* getObjectResInfo(const char* arcName) { - return getResInfo(arcName, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + dRes_info_c* getObjectResInfo(const char* i_arcName) { + return getResInfo(i_arcName, mObjectInfo, ARRAY_SIZE(mObjectInfo)); } - dRes_info_c* getStageResInfo(const char* arcName) { - return getResInfo(arcName, &mStageInfo[0], ARRAY_SIZE(mStageInfo)); + dRes_info_c* getStageResInfo(const char* i_arcName) { + return getResInfo(i_arcName, mStageInfo, ARRAY_SIZE(mStageInfo)); } - /* 0x0000 */ dRes_info_c mObjectInfo[0x80]; - /* 0x1200 */ dRes_info_c mStageInfo[0x40]; + /* 0x0000 */ dRes_info_c mObjectInfo[128]; + /* 0x1200 */ dRes_info_c mStageInfo[64]; }; // Size: 0x1B00 #endif /* D_D_RESORCE_H */ diff --git a/include/f_op/f_op_camera_mng.h b/include/f_op/f_op_camera_mng.h index 54033648df8..05ade1a4bad 100644 --- a/include/f_op/f_op_camera_mng.h +++ b/include/f_op/f_op_camera_mng.h @@ -91,6 +91,10 @@ inline cXyz* fopCamM_GetCenter_p(camera_class* i_camera) { return &i_camera->lookat.center; } +inline s16 fopCamM_GetBank(camera_class* i_camera) { + return i_camera->bank; +} + fpc_ProcID fopCamM_Create(int i_cameraIdx, s16 i_procName, void* i_append); void fopCamM_Management(); u32 fopCamM_GetParam(camera_class* i_this); diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index f111436f98a..ab34cbf0835 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -175,6 +175,10 @@ inline void mDoAud_mEnvSe_startFarThunderSe(const Vec* param_0) { g_mEnvSeMgr.startFarThunderSe((Vec*)param_0, 0); } +inline void mDoAud_mEnvSe_startNearThunderSe() { + g_mEnvSeMgr.startNearThunderSe(0); +} + inline void mDoAud_mEnvse_initStrongWind() { g_mEnvSeMgr.initStrongWindSe(); } diff --git a/include/m_Do/m_Do_dvd_thread.h b/include/m_Do/m_Do_dvd_thread.h index 8922ca7f36b..0a6ac3e49cf 100644 --- a/include/m_Do/m_Do_dvd_thread.h +++ b/include/m_Do/m_Do_dvd_thread.h @@ -6,6 +6,9 @@ #include "dolphin/os/OSMutex.h" #include "f_pc/f_pc_node.h" +#define mDoDvd_MOUNT_DIRECTION_HEAD 0 +#define mDoDvd_MOUNT_DIRECTION_TAIL 1 + class JKRHeap; class JKRMemArchive; diff --git a/src/d/actor/d_a_kytag03.cpp b/src/d/actor/d_a_kytag03.cpp index e301b27f147..7745fd957eb 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 4af9c5f1a59..9b2cf0f0fec 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" +#include "Z2AudioLib/Z2Instances.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; +UNK_REL_DATA /* 80BF934C-80BF938C 0000EC 0040+00 1/1 0/0 0/0 .text __ct__14daGlwSph_HIO_cFv */ daGlwSph_HIO_c::daGlwSph_HIO_c() { - // NONMATCHING + speed = 50.0f; + speed2 = 4.0f; } -/* 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 +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) /* 80BFABF4-80BFAC00 000054 000C+00 2/3 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[12]; +static daGlwSph_HIO_c l_HIO; -/* 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 +/* 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} +}; + +/* 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}, +}; + +/* 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 +}; + +/* 80BFAA48-80BFAA4C 000078 0004+00 1/2 0/0 0/0 .data l_prmColor */ +static GXColor l_prmColor = {0xFF, 0xFF, 0xFF, 0xFF}; + +/* 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}, +}; /* 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); - -/* 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); - -/* 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 - /* 80BF94CC-80BF95D4 00026C 0108+00 1/1 0/0 0/0 .text CreateHeap__10daGlwSph_cFv */ -void daGlwSph_c::CreateHeap() { - // NONMATCHING -} +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; + } -/* ############################################################################################## */ -/* 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); + 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); + + 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); + + return 1; +} /* 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; + } + + mBrk.play(); + mBtk.play(); + + actionMain(); + + mColliderStts.Move(); + mSphCollider.SetR(50.0f); + mSphCollider.SetC(current.pos); + dComIfG_Ccsp()->Set(&mSphCollider); + + setBaseMtx(); + 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); - -/* 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); - -/* 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]; - /* 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, + }; -/* ############################################################################################## */ -/* 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); + 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(¤t.pos, home.pos, 0.5f, l_HIO.speed2, 0.5f); + } + + (this->*l_func[mAction])(); +} /* 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; + + for (int i = 0; i < 2; i++) { + static u16 l_eff[] = {0x874F, 0x8750}; + mEmitterIDs[i] = dComIfGp_particle_setColor(mEmitterIDs[i], l_eff[i], ¤t.pos, &tevStr, &l_prmColor, &l_envColor[mColor], 0.0f, 0xFF, NULL, NULL, NULL, -1, NULL); + + 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; } -/* ############################################################################################## */ -/* 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); - -/* 80BFAFD4-80BFAFE8 000434 0014+00 1/1 0/0 0/0 .bss sSeId$4016 */ -static u8 sSeId[20]; - /* 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, ¤t.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, ¤t.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 + mSphSe++; + if (mSphSe > 4) { + mSphSe = 4; + } } -/* 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 -} +/* 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, +}; -/* 80BFA76C-80BFA7D8 00150C 006C+00 2/1 0/0 0/0 .text __dt__14daGlwSph_HIO_cFv */ -daGlwSph_HIO_c::~daGlwSph_HIO_c() { - // NONMATCHING -} +/* 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 +}; -/* 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 -} - -/* ############################################################################################## */ -/* 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 - -/* 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 - -/* 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 89e9a200b2d..06a4e982736 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" +#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" - -// -// 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: -// - -/* ############################################################################################## */ /* 804CE3F4-804CE438 000000 0044+00 6/6 0/0 0/0 .rodata l_cyl_src */ const static dCcD_SrcCyl l_cyl_src = { { @@ -185,139 +24,526 @@ 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); +UNK_REL_DATA -/* 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 +/* 804CC7D8-804CCAD4 000078 02FC+00 1/1 0/0 0/0 .text Reflect__FP4cXyzRC13cBgS_PolyInfof + */ +static f32 Reflect(cXyz* i_vec, cBgS_PolyInfo const& i_wallpoly, f32 i_scale) { + cM3dGPla plane; -/* 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 + if (dComIfG_Bgsp().GetTriPla(i_wallpoly, &plane)) { + cXyz reflect_vec; + f32 mag = i_vec->absXZ(); -/* 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 + C_VECReflect(i_vec, &plane.mNormal, &reflect_vec); + *i_vec = (reflect_vec * mag) * i_scale; + return i_vec->absXZ(); + } -/* 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, -}; + return 0.0f; +} -/* 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 +/* 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* 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(); + } +} -/* 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 +/* 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* 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(); + } + } +} -/* 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 +/* 804CCBE4-804CCC04 000484 0020+00 1/1 0/0 0/0 .text initBaseMtx__11daObjLife_cFv */ +void daObjLife_c::initBaseMtx() { + setBaseMtx(); +} -/* 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 +/* 804CCC04-804CCC6C 0004A4 0068+00 2/2 0/0 0/0 .text setBaseMtx__11daObjLife_cFv */ +void daObjLife_c::setBaseMtx() { + mpModel->setBaseScale(scale); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} -/* 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 +/* 804CCC6C-804CCE00 00050C 0194+00 1/1 0/0 0/0 .text Create__11daObjLife_cFv */ +int daObjLife_c::Create() { + scale.x = scale.y = scale.z = 0.0f; + initBaseMtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); -/* 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 + 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)); -/* 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 + fopAcM_SetCullSize(this, fopAc_CULLSPHERE_0_e); + fopAcM_SetGravity(this, -3.2f); -/* 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 + actionWaitInit(); + field_0x94c = 0.7f; + mRotateSpeed = 7000; + + setEffect(); + mSound.init(¤t.pos, 1); + return 1; +} + +/* 804CCE00-804CCF5C 0006A0 015C+00 1/1 0/0 0/0 .text setEffect__11daObjLife_cFv */ +void daObjLife_c::setEffect() { + cXyz size(1.5f, 1.5f, 1.5f); + + if (mEffect0.getEmitter() == NULL) { + dComIfGp_particle_set(0x8DE, ¤t.pos, NULL, &size, 0xFF, &mEffect0, -1, NULL, NULL, NULL); + } + + if (mEffect1.getEmitter() == NULL) { + dComIfGp_particle_set(0x8DF, ¤t.pos, NULL, &size, 0xFF, &mEffect1, -1, NULL, NULL, NULL); + } + + if (mEffect2.getEmitter() == NULL) { + dComIfGp_particle_set(0x8E0, ¤t.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() { + mEffect0.remove(); + mEffect1.remove(); +} + +/* 804CCFAC-804CCFD8 00084C 002C+00 3/3 0/0 0/0 .text endEffect02__11daObjLife_cFv */ +void daObjLife_c::endEffect02() { + mEffect2.remove(); +} + +/* 804CCFD8-804CCFE0 000878 0008+00 1/0 0/0 0/0 .text __CreateHeap__11daObjLife_cFv */ +int daObjLife_c::__CreateHeap() { + return 1; +} + +/* 804CCFE0-804CD258 000880 0278+00 1/1 0/0 0/0 .text create__11daObjLife_cFv */ +int daObjLife_c::create() { + fopAcM_SetupActor(this, daObjLife_c); + + 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; + } + + 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); + } + + if (fopAcM_isItem(this, getSaveBitNo())) { + return cPhs_ERROR_e; + } + + if (m_itemNo == fpcNm_ITEM_UTAWA_HEART && dComIfGs_isStageLife()) { + return cPhs_ERROR_e; + } + + 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; + } + + if (!Create()) { + return cPhs_ERROR_e; + } + + 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() { + f32 bounce_speed_scale = 0.7f; + + if (mAcch.ChkWallHit()) { + if (speedF > 5.0f) { + Reflect(&speed, mAcchCir, 1.0f); + } + + current.angle.y = cM_atan2s(speed.x, speed.z); + } + + 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(); + } +} + +/* 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 */ +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 */ +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(¤t.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 + */ +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); + } + + return 1; +} + +/* 804CDA08-804CDBC8 0012A8 01C0+00 1/0 0/0 0/0 .text actionGetDemo__11daObjLife_cFv */ +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 */ +int daObjLife_c::actionSwOnWait() { + if (fopAcM_isSwitch(this, getSwNo()) && cLib_calcTimer(&field_0x935) == 0) { + actionWaitInit(); + } + + return 1; +} + +/* 804CDC2C-804CDD0C 0014CC 00E0+00 1/1 0/0 0/0 .text actionInitBoomerangCarry__11daObjLife_cFv */ +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 */ +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 */ +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 */ +int daObjLife_c::actionWait2() { + attention_info.position = current.pos; + return 1; +} + +/* 804CDDAC-804CDE70 00164C 00C4+00 1/1 0/0 0/0 .text calcScale__11daObjLife_cFv */ +void daObjLife_c::calcScale() { + 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); + + 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 */ +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 */ +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() { + dComIfGd_setListDark(); +} + +/* 804CE214-804CE274 001AB4 0060+00 1/1 0/0 0/0 .text _delete__11daObjLife_cFv */ +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 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 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 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 int daObjLife_Create(fopAc_ac_c* i_this) { + return ((daObjLife_c*)i_this)->create(); +} /* 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, + (process_method_func)daObjLife_Create, + (process_method_func)daObjLife_Delete, + (process_method_func)daObjLife_Execute, + (process_method_func)NULL, + (process_method_func)daObjLife_Draw, }; /* 804CE59C-804CE5CC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_LifeContainer */ @@ -337,496 +563,3 @@ extern actor_process_profile_definition g_profile_Obj_LifeContainer = { 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, -}; - -/* 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 -} - -/* 804CCAD4-804CCB1C 000374 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* 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 -} - -/* 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 -} - -/* 804CCBE4-804CCC04 000484 0020+00 1/1 0/0 0/0 .text initBaseMtx__11daObjLife_cFv */ -void daObjLife_c::initBaseMtx() { - // NONMATCHING -} - -/* 804CCC04-804CCC6C 0004A4 0068+00 2/2 0/0 0/0 .text setBaseMtx__11daObjLife_cFv */ -void daObjLife_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* ############################################################################################## */ -/* 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 -} - -/* 804CCF5C-804CCFAC 0007FC 0050+00 2/2 0/0 0/0 .text endEffect00__11daObjLife_cFv */ -void daObjLife_c::endEffect00() { - // NONMATCHING -} - -/* 804CCFAC-804CCFD8 00084C 002C+00 3/3 0/0 0/0 .text endEffect02__11daObjLife_cFv */ -void daObjLife_c::endEffect02() { - // NONMATCHING -} - -/* 804CCFD8-804CCFE0 000878 0008+00 1/0 0/0 0/0 .text __CreateHeap__11daObjLife_cFv */ -bool daObjLife_c::__CreateHeap() { - return true; -} - -/* 804CCFE0-804CD258 000880 0278+00 1/1 0/0 0/0 .text create__11daObjLife_cFv */ -void daObjLife_c::create() { - // NONMATCHING -} - -/* 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 */ -} - -/* 804CD25C-804CD2A4 000AFC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 804CD2A4-804CD2EC 000B44 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* ############################################################################################## */ -/* 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 - -/* 804CD428-804CD5B8 000CC8 0190+00 1/1 0/0 0/0 .text bg_check__11daObjLife_cFv */ -void daObjLife_c::bg_check() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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); - -/* 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 - -/* 804CD5B8-804CD660 000E58 00A8+00 3/3 0/0 0/0 .text actionWaitInit__11daObjLife_cFv */ -void daObjLife_c::actionWaitInit() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 - -/* 804CD660-804CD8C0 000F00 0260+00 1/0 0/0 0/0 .text actionWait__11daObjLife_cFv */ -void daObjLife_c::actionWait() { - // NONMATCHING -} - -/* 804CD8C0-804CD98C 001160 00CC+00 3/3 0/0 0/0 .text initActionOrderGetDemo__11daObjLife_cFv */ -void daObjLife_c::initActionOrderGetDemo() { - // NONMATCHING -} - -/* 804CD98C-804CDA08 00122C 007C+00 1/0 0/0 0/0 .text actionOrderGetDemo__11daObjLife_cFv - */ -void daObjLife_c::actionOrderGetDemo() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 - -/* 804CDA08-804CDBC8 0012A8 01C0+00 1/0 0/0 0/0 .text actionGetDemo__11daObjLife_cFv */ -void daObjLife_c::actionGetDemo() { - // NONMATCHING -} - -/* 804CDBC8-804CDC2C 001468 0064+00 1/0 0/0 0/0 .text actionSwOnWait__11daObjLife_cFv */ -void daObjLife_c::actionSwOnWait() { - // NONMATCHING -} - -/* 804CDC2C-804CDD0C 0014CC 00E0+00 1/1 0/0 0/0 .text actionInitBoomerangCarry__11daObjLife_cFv */ -void daObjLife_c::actionInitBoomerangCarry() { - // NONMATCHING -} - -/* 804CDD0C-804CDD7C 0015AC 0070+00 1/0 0/0 0/0 .text actionBoomerangCarry__11daObjLife_cFv */ -void daObjLife_c::actionBoomerangCarry() { - // NONMATCHING -} - -/* 804CDD7C-804CDD8C 00161C 0010+00 0/0 0/0 1/1 .text actionInitWait2__11daObjLife_cFv */ -void daObjLife_c::actionInitWait2() { - // NONMATCHING -} - -/* 804CDD8C-804CDDAC 00162C 0020+00 1/0 0/0 0/0 .text actionWait2__11daObjLife_cFv */ -void daObjLife_c::actionWait2() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* ############################################################################################## */ -/* 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 - -/* 804CDE70-804CE19C 001710 032C+00 1/1 0/0 0/0 .text execute__11daObjLife_cFv */ -void daObjLife_c::execute() { - // NONMATCHING -} - -/* 804CE19C-804CE1F0 001A3C 0054+00 1/1 0/0 0/0 .text draw__11daObjLife_cFv */ -void daObjLife_c::draw() { - // NONMATCHING -} - -/* 804CE1F0-804CE214 001A90 0024+00 1/0 0/0 0/0 .text setListStart__11daObjLife_cFv */ -void daObjLife_c::setListStart() { - // NONMATCHING -} - -/* 804CE214-804CE274 001AB4 0060+00 1/1 0/0 0/0 .text _delete__11daObjLife_cFv */ -void daObjLife_c::_delete() { - // NONMATCHING -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* 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__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 -} - -/* 804CE4A4-804CE4A4 0000B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 574b430982f..029bdbf754c 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 7c0fedc8791..2938215ae4f 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 55fb1a60f3e..eebe0196eba 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 12500f17b1e..46b7f520ad6 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); + 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 cStack_48; - cXyz cStack_54; - cXyz local_60; - cXyz cStack_6c; - if (sun_p->mVisibility < 0.0001f) { + 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(¢er, &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; + parcent = 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_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_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); + 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_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_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->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; + 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 = 1; + 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); + 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_p, i); - effect_p->mStatus++; + 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->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; + 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_p->mBasePos.y + effect_p->mPosition.y < -100149.9f) { - effect_p->mPosition.y = (-99999.9f - effect_p->mBasePos.y) + 10.0f; + if (effect->mBasePos.y + effect->mPosition.y < -100149.9f) { + effect->mPosition.y = (-99999.9f - effect->mBasePos.y) + 10.0f; } - effect_p->field_0x38 = 0.0f; - effect_p->field_0x44 = 0.0f; - effect_p->mStatus++; + 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 (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_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 (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 - -/* 804523E4-804523E8 0009E4 0004+00 2/2 0/0 0/0 .sdata2 @6720 */ -SECTION_SDATA2 static f32 lit_6720 = 0.004999999888241291f; - -/* 804523E8-804523EC 0009E8 0004+00 7/7 0/0 0/0 .sdata2 @6721 */ -SECTION_SDATA2 static f32 lit_6721 = 9.999999974752427e-07f; - -/* 804523EC-804523F0 0009EC 0004+00 1/1 0/0 0/0 .sdata2 @6722 */ -SECTION_SDATA2 static f32 lit_6722 = -300.0f; - -/* 804523F0-804523F4 0009F0 0004+00 2/2 0/0 0/0 .sdata2 @6723 */ -SECTION_SDATA2 static f32 lit_6723 = 65535.0f; - -/* 804523F4-804523F8 0009F4 0004+00 1/1 0/0 0/0 .sdata2 @6724 */ -SECTION_SDATA2 static f32 lit_6724 = 0.027000002562999725f; - -/* 804523F8-804523FC 0009F8 0004+00 1/1 0/0 0/0 .sdata2 @6725 */ -SECTION_SDATA2 static f32 lit_6725 = 23.0f; - -/* 804523FC-80452400 0009FC 0004+00 5/5 0/0 0/0 .sdata2 @6726 */ -SECTION_SDATA2 static f32 lit_6726 = 120.0f; - -/* 80452400-80452404 000A00 0004+00 1/1 0/0 0/0 .sdata2 @6727 */ -SECTION_SDATA2 static f32 lit_6727 = 1540.0f; - -/* 80452404-80452408 000A04 0004+00 1/1 0/0 0/0 .sdata2 @6728 */ -SECTION_SDATA2 static f32 lit_6728 = 1040.0f; - -/* 80452408-8045240C 000A08 0004+00 1/1 0/0 0/0 .sdata2 @6729 */ -SECTION_SDATA2 static f32 lit_6729 = 44.0f; - -/* 8045240C-80452410 000A0C 0004+00 1/1 0/0 0/0 .sdata2 @6730 */ -SECTION_SDATA2 static f32 lit_6730 = 408.0f; - -/* 80452410-80452414 000A10 0004+00 2/2 0/0 0/0 .sdata2 @6731 */ -SECTION_SDATA2 static f32 lit_6731 = 3.0f / 25.0f; - -/* 80452414-80452418 000A14 0004+00 1/1 0/0 0/0 .sdata2 @6732 */ -SECTION_SDATA2 static f32 lit_6732 = 6.0f / 25.0f; - -/* 80452418-8045241C 000A18 0004+00 1/1 0/0 0/0 .sdata2 @6733 */ -SECTION_SDATA2 static f32 lit_6733 = 9.0f / 25.0f; - -/* 8045241C-80452420 000A1C 0004+00 2/2 0/0 0/0 .sdata2 @6734 */ -SECTION_SDATA2 static f32 lit_6734 = 9.0f / 100.0f; - -/* 80452420-80452424 000A20 0004+00 1/1 0/0 0/0 .sdata2 @6735 */ -SECTION_SDATA2 static f32 lit_6735 = 13.0f / 100.0f; - -/* 80452424-80452428 000A24 0004+00 2/2 0/0 0/0 .sdata2 @6736 */ -SECTION_SDATA2 static f32 lit_6736 = 7.0f / 10.0f; - /* 80061438-800620AC 05BD78 0C74+00 0/0 1/1 0/0 .text cloud_shadow_move__Fv */ void cloud_shadow_move() { - // NONMATCHING + 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, ¢er, sp40, sp40); + + 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; + + 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); + + 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; + + 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; + } + + 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(); + } + + 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; + + 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; + + 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, ¢er, &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; + } + } + + packet->mCloudEff[i].mAlpha = 0.0f; + } + break; + } + case 3: + packet->mCloudEff[i].mStatus = 0; + break; + } + + 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; + + 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; + } + } + + 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; + } + + if (g_env_light.field_0xe92 == 1) { + alpha_max = 0.3f; + } + + if (g_env_light.mMoyaMode == 9) { + if (dKyw_get_wind_pow() > 0.7f) { + alpha_max = 0.36f; + } else { + alpha_max = 0.1f; + } + } + + f32 sp10 = 1.0f; + s8 sp8; + sp10 = dKy_move_room_ratio(&player->tevStr, &sp8); + packet->mCloudEff[i].mAlpha *= sp10; + + if (i > g_env_light.mMoyaCount - 1) { + alpha_max = 0.0f; + if (packet->mCloudEff[i].mAlpha < 0.001f && i == packet->mCount - 1) { + packet->mCount--; + } + } + + 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; + } + } + + 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 - -/* 80452428-8045242C 000A28 0004+00 1/1 0/0 0/0 .sdata2 @6947 */ -SECTION_SDATA2 static f32 lit_6947 = 2500.0f; - -/* 8045242C-80452430 000A2C 0004+00 1/1 0/0 0/0 .sdata2 @6948 */ -SECTION_SDATA2 static f32 lit_6948 = 25.0f; - -/* 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, -}; - -/* 80452438-80452440 000A38 0008+00 1/1 0/0 0/0 .sdata2 @6950 */ -SECTION_SDATA2 static f64 lit_6950 = 14000.0; - -/* 80452440-80452444 000A40 0004+00 1/1 0/0 0/0 .sdata2 @6951 */ -SECTION_SDATA2 static f32 lit_6951 = 15000.0f; - -/* 80452444-80452448 000A44 0004+00 3/3 0/0 0/0 .sdata2 @6952 */ -SECTION_SDATA2 static f32 lit_6952 = 5000.0f; - -/* 80452448-8045244C 000A48 0004+00 1/1 0/0 0/0 .sdata2 @6953 */ -SECTION_SDATA2 static f32 lit_6953 = 15100.0f; - -/* 8045244C-80452450 000A4C 0004+00 1/1 0/0 0/0 .sdata2 @6954 */ -SECTION_SDATA2 static f32 lit_6954 = -7.0f / 10.0f; - -/* 80452450-80452454 000A50 0004+00 1/1 0/0 0/0 .sdata2 @6955 */ -SECTION_SDATA2 static f32 lit_6955 = 1.0f / 40.0f; - /* 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() { - // NONMATCHING + 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; + } + + if (strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0) { + sp58 = 4000.0f; + sp54 = 2000.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); + + int stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo()); + + if (dComIfGd_getView() != NULL) { + f32 sp2C = 0.0f; + + dStage_FileList_dt_c* filelist = NULL; + if (dComIfGp_roomControl_getStayNo() >= 0) { + filelist = dComIfGp_roomControl_getStatusRoomDt(dComIfGp_roomControl_getStayNo())->mRoomDt.getFileListInfo(); + } + + if (filelist != NULL) { + sp2C = dStage_FileList_dt_SeaLevel(filelist); + } + + sp6C -= 0.09f * (camera->lookat.eye.y - sp2C); + } + + 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); + } + + 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; + + 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); - -/* 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), -}; - -/* 80452454-80452458 000A54 0004+00 5/5 0/0 0/0 .sdata2 @7208 */ -SECTION_SDATA2 static f32 lit_7208 = -1.0f; - -/* 80452458-8045245C 000A58 0004+00 8/8 0/0 0/0 .sdata2 @7209 */ -SECTION_SDATA2 static f32 lit_7209 = 45.0f; - -/* 8045245C-80452460 000A5C 0004+00 2/2 0/0 0/0 .sdata2 @7210 */ -SECTION_SDATA2 static f32 lit_7210 = -6.2831854820251465f; - -/* 80452460-80452464 000A60 0004+00 12/12 0/0 0/0 .sdata2 @7211 */ -SECTION_SDATA2 static f32 lit_7211 = 0.01745329238474369f; - -/* 80452464-80452468 000A64 0004+00 2/2 0/0 0/0 .sdata2 @7212 */ -SECTION_SDATA2 static f32 lit_7212 = 11000.0f; - -/* 80452468-8045246C 000A68 0004+00 2/2 0/0 0/0 .sdata2 @7213 */ -SECTION_SDATA2 static f32 lit_7213 = 2.3f; - /* 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 +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; + } + } + + 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; + } + + 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); + + 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; + } + + 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); + } + + 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]; + } + + 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; + + 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; + + 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); + } + + GXPosition3f32(pos[1].x, pos[1].y, pos[1].z); + GXTexCoord2s16(0xFF, 0); + if (i == 0) { + GXTexCoord2s16(0xFF, 0); + GXTexCoord2s16(0xFF, 0); + } + + GXPosition3f32(pos[2].x, pos[2].y, pos[2].z); + GXTexCoord2s16(0xFF, 0xFF); + if (i == 0) { + GXTexCoord2s16(0xFF, 0xFF); + GXTexCoord2s16(0xFF, 0xFF); + } + + GXPosition3f32(pos[3].x, pos[3].y, pos[3].z); + GXTexCoord2s16(0, 0xFF); + if (i == 0) { + GXTexCoord2s16(0, 0xFF); + GXTexCoord2s16(0, 0xFF); + } + + GXEnd(); + } + + J3DShape::resetVcdVatCache(); + } } -/* ############################################################################################## */ -/* 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; - /* 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 +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; + } + + if (sun_packet->mSunAlpha > 0.0f) { + draw_sun = true; + } + + if (sun_packet->mMoonAlpha > 0.0f) { + draw_moon = true; + } + + if ((draw_sun | draw_moon) != 0) { + sunpos.x = ppos->x; + sunpos.y = ppos->y; + sunpos.z = ppos->z; + + 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; + } + + 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; + } + } + + 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; + + 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; + } + + int weekday = date % 8; + if (g_env_light.getDaytime() < 180.0f) { + if (weekday != 0) { + weekday--; + } else { + weekday = 7; + } + } + + if (strcmp(dComIfGp_getStartStageName(), "F_SP200") == 0) { + if (g_env_light.getDaytime() < 180.0f) { + weekday++; + if (weekday >= 8) { + weekday = 0; + } + } + + if (weekday == 4) { + weekday = 3; + } + } + + 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; + } + + 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); + } + + 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; + } + + 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; + } + } + } + + 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); + } + + 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; + + 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); + } + + GXPosition3f32(pos[1].x, pos[1].y, pos[1].z); + GXTexCoord2s16(0xFF, 0); + if (i == 0) { + GXTexCoord2s16(0xFF, 0); + GXTexCoord2s16(0xFF, 0); + } + + GXPosition3f32(pos[2].x, pos[2].y, pos[2].z); + GXTexCoord2s16(0xFF, 0xFF); + if (i == 0) { + GXTexCoord2s16(0xFF, 0xFF); + GXTexCoord2s16(0xFF, 0xFF); + } + + GXPosition3f32(pos[3].x, pos[3].y, pos[3].z); + GXTexCoord2s16(0, 0xFF); + if (i == 0) { + GXTexCoord2s16(0, 0xFF); + GXTexCoord2s16(0, 0xFF); + } + + GXEnd(); + + if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) { + dKyr_draw_rev_moon(drawMtx, tex); + } + } + } + + J3DShape::resetVcdVatCache(); + } + } } -/* ############################################################################################## */ -/* 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); - -/* 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); - -/* 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]; - -/* 80450EF4-80450EF8 0003F4 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450EF4[4]; - -/* 8045247C-80452480 000A7C 0004+00 1/1 0/0 0/0 .sdata2 @7882 */ -SECTION_SDATA2 static f32 lit_7882 = 2.9f; - -/* 80452480-80452484 000A80 0004+00 2/2 0/0 0/0 .sdata2 @7883 */ -SECTION_SDATA2 static f32 lit_7883 = 34.0f; - -/* 80452484-80452488 000A84 0004+00 1/1 0/0 0/0 .sdata2 @7884 */ -SECTION_SDATA2 static f32 lit_7884 = 160.0f; - -/* 80452488-8045248C 000A88 0004+00 1/1 0/0 0/0 .sdata2 @7885 */ -SECTION_SDATA2 static f32 lit_7885 = 0.86f; - -/* 8045248C-80452490 000A8C 0004+00 1/1 0/0 0/0 .sdata2 @7886 */ -SECTION_SDATA2 static f32 lit_7886 = 2.46f; - -/* 80452490-80452494 000A90 0004+00 2/2 0/0 0/0 .sdata2 @7887 */ -SECTION_SDATA2 static f32 lit_7887 = 1.1f; - -/* 80452494-80452498 000A94 0004+00 1/1 0/0 0/0 .sdata2 @7888 */ -SECTION_SDATA2 static f32 lit_7888 = 0.04f; - -/* 80452498-8045249C 000A98 0004+00 1/1 0/0 0/0 .sdata2 @7889 */ -SECTION_SDATA2 static f32 lit_7889 = 0.075f; - -/* 8045249C-804524A0 000A9C 0004+00 1/1 0/0 0/0 .sdata2 @7890 */ -SECTION_SDATA2 static f32 lit_7890 = 0.88f; - -/* 804524A0-804524A4 000AA0 0004+00 1/1 0/0 0/0 .sdata2 @7891 */ -SECTION_SDATA2 static f32 lit_7891 = 30.599998474121094f; - -/* 804524A4-804524A8 000AA4 0004+00 4/4 0/0 0/0 .sdata2 @7892 */ -SECTION_SDATA2 static f32 lit_7892 = 140.0f; - -/* 804524A8-804524AC 000AA8 0004+00 1/1 0/0 0/0 .sdata2 @7893 */ -SECTION_SDATA2 static f32 lit_7893 = 0.85f; - -/* 804524AC-804524B0 000AAC 0004+00 2/2 0/0 0/0 .sdata2 @7894 */ -SECTION_SDATA2 static f32 lit_7894 = 60.0f; - /* 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 -} +// 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); -/* ############################################################################################## */ -/* 80424950-8042495C 051670 000C+00 3/3 0/0 0/0 .bss @7952 */ -static u8 lit_7952[12]; + static s16 S_rot_work1 = 0; + static s16 S_rot_work2 = 0; -/* 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 camMtx; + Mtx rotMtx; -/* 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 + cXyz pos[4]; + cXyz spFC; + cXyz spF0; -/* 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 + Vec spE4, spD8; -/* 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 + s16 spC = 0; + s16 spA = 0; -/* 80450EF8-80450EFC 0003F8 0004+00 1/1 0/0 0/0 .sbss rot$7919 */ -static u8 rot_7919[4]; + f32 sun_visibility = sun_packet->mVisibility; + f32 spAC = 1.0f - lenz_packet->mDistFalloff; + f32 spA8 = sun_packet->mVisibility * sun_packet->mVisibility; -/* 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 (!(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; -/* 804524B0-804524B4 000AB0 0004+00 2/2 0/0 0/0 .sdata2 @8211 */ -SECTION_SDATA2 static f32 lit_8211 = 70.0f; + 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; -/* 804524B4-804524B8 000AB4 0004+00 1/1 0/0 0/0 .sdata2 @8212 */ -SECTION_SDATA2 static f32 lit_8212 = -1.5f; - -/* 804524B8-804524BC 000AB8 0004+00 5/5 0/0 0/0 .sdata2 @8213 */ -SECTION_SDATA2 static f32 lit_8213 = 150.0f; - -/* 804524BC-804524C0 000ABC 0004+00 1/1 0/0 0/0 .sdata2 @8214 */ -SECTION_SDATA2 static f32 lit_8214 = 320.0f; - -/* 804524C0-804524C4 000AC0 0004+00 1/1 0/0 0/0 .sdata2 @8215 */ -SECTION_SDATA2 static f32 lit_8215 = 480.0f; - -/* 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 -} - -/* 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; - - Mtx sp88; - cXyz sp7C; - cXyz sp70; - cXyz sp64; - cXyz sp58; - - GXTexObj sp38; - - cXyz sp2C; - cXyz sp20; - cXyz sp14; - - 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; - } - } - - f32 var_f1 = 255.0f; - if (temp_r29->mStatus & 1) { - var_f1 = 0.0f; - } else if (temp_r29->mStatus & 2) { - var_f1 = 200.0f; - } - - 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 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 (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(); - f32 temp_f28 = cM_rndFX(3600.0f); - f32 temp_f29 = cM_rndFX(1500.0f); - f32 temp_f1 = cM_rndFX(3600.0f); + static const f32 scale_dat[] = { + 8000.0f, 10500.0f, 3.2f, 1.8f, 1.8f, 6.2f, 1.2f, 4.0f + }; - sp14.x = sp2C.x + temp_f28; - sp14.y = sp2C.y + temp_f29; - sp14.z = sp2C.z + temp_f1; + 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}, + }; - sp58.x = sp14.x - temp_f27; - sp58.y = sp14.y; - sp58.z = sp14.z - temp_f27; + 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; - sp64.x = sp14.x + temp_f27; - sp64.y = sp14.y; - sp64.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; + } - sp70.x = sp14.x + temp_f27; - sp70.y = sp14.y; - sp70.z = sp14.z + temp_f27; + GXColor sp60; + sp60.r = 0xFF; + sp60.b = 0xFF; + sp60.a = 0xFF; - sp7C.x = sp14.x - temp_f27; - sp7C.y = sp14.y; - sp7C.z = sp14.z + temp_f27; + 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); - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3f32(sp58.x, sp58.y, sp58.z); - GXTexCoord2s16(0, 0); + 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; - GXPosition3f32(sp64.x, sp64.y, sp64.z); - GXTexCoord2s16(0x1FF, 0); + if (spD0.r > 0xFF) { + spD0.r = 0xFF; + } + if (spD0.g > 0xFF) { + spD0.g = 0xFF; + } + if (spD0.b > 0xFF) { + spD0.b = 0xFF; + } - GXPosition3f32(sp70.x, sp70.y, sp70.z); - GXTexCoord2s16(0x1FF, 0x1FF); + color_reg1.r = spD0.r; + color_reg1.g = spD0.g; + color_reg1.b = spD0.b; - GXPosition3f32(sp7C.x, sp7C.y, sp7C.z); - GXTexCoord2s16(0, 0x1FF); - GXEnd(); + 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; + + color_reg1.r = col_dat[i].r; + color_reg1.g = col_dat[i].g; + color_reg1.b = col_dat[i].b; + + color_reg0.a = spAC * (0.5f * (250.0f * spC4) * lenz_packet->mDistFalloff); + color_reg1.a = spAC * (0.5f * (250.0f * spC4) * lenz_packet->mDistFalloff); + } + + GXSetTevColor(GX_TEVREG0, color_reg0); + GXSetTevColor(GX_TEVREG1, color_reg1); + + 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)); + } + + 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: + 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); + } + + GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); + + if (i == 1) { + GXSetZMode(GX_TRUE, GX_GEQUAL, GX_FALSE); + } else { + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); + } + + GXSetClipMode(GX_CLIP_DISABLE); + GXSetNumIndStages(0); + dKr_cullVtx_Set(); + + rot += 1.2f; + MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot)); + MTXConcat(camMtx, rotMtx, camMtx); + + GXLoadPosMtxImm(drawMtx, GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); + + for (int j = 0; j < housi_packet->field_0x5dec; j++) { + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + 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 { + color_reg0.a = housi_packet->mHousiEff[j].mAlpha * var_f25; + + block_14: + GXLoadTexObj(&spDC, GX_TEXMAP0); + GXSetTevColor(GX_TEVREG0, color_reg0); + + 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_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)); + } + + f32 var_f2; + if (g_env_light.mPondSeason == 3) { + var_f2 = 15.0f; + + if (housi_packet->mHousiEff[j].mStatus == 1) { + var_f24 = + 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 * 685.0f + + (f32)(g_Counter.mCounter0 * 20)); + } + } 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_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 { + housi_packet->mHousiEff[j].field_0x38 += + var_f24 * 100.0f; + } + } + + 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 { + cLib_addCalc(&housi_packet->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::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; } - for (int i = 0; i < 1; i++) { - dKyr_set_btitex(&spDC, (ResTIMG*)*param_1); + if (tex[0] != NULL) { + GXTexObj spA0; + dKyr_set_btitex(&spA0, (ResTIMG*)tex[0]); GXSetNumChans(0); - GXSetTevColor(GX_TEVREG0, sp24); - GXSetTevColor(GX_TEVREG1, sp20); + 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); + 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); - } - + 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); - - if (i == 1) { - GXSetZMode(GX_TRUE, GX_GEQUAL, GX_FALSE); - } else { - GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); - } - + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_DISABLE); GXSetClipMode(GX_CLIP_DISABLE); GXSetNumIndStages(0); dKr_cullVtx_Set(); - rot += 1.2f; - MTXRotRad(sp18C, 'Z', DEG_TO_RAD(rot)); - MTXConcat(sp1BC, sp18C, sp1BC); + Mtx rotMtx; + MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot)); - GXLoadPosMtxImm(param_0, GX_PNMTX0); - GXSetCurrentMtx(0); + rot += 5.0f + cM_rndFX(2.0f); + if (rot > 719.0f) { + rot = 0.0f; + } - for (int j = 0; j < housi_p->field_0x5dec; j++) { - fopAc_ac_c* player_p = dComIfGp_getPlayer(0); + MTXConcat(camMtx, rotMtx, camMtx); + GXLoadPosMtxImm(drawMtx, GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); - 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); + 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); + } - 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 + 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; } } - } - } else { - sp24.a = housi_p->mHousiEff[j].mAlpha * var_f25; - block_14: - GXLoadTexObj(&spDC, GX_TEXMAP0); - GXSetTevColor(GX_TEVREG0, sp24); - - 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 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; + 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 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) - { - var_f24 = - 0.2f + - (housi_p->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)); - } - - 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))); - } else { - var_f24 = cM_ssin((f32)j * 685.0f + - (f32)(g_Counter.mCounter0 * 20)); - } - } 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); - } 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; - } - } - - 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_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); - sp15C[k] = sp88; + 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)))); } - } 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; + 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; - 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; + 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; - 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; + 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(); + } + + 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(); + } } - - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - - s16 var_r17 = 0x1FF; - if (dKy_darkworld_check() == 1 || var_r28 == 1) { - var_r17 = 0xFA; - } - - 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(); } } - } - 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 - -/* 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 - -/* 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 - -/* 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 - -/* 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 - -/* 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 - -/* 80450F08-80450F0C 000408 0004+00 1/1 0/0 0/0 .sbss rot$8936 */ -static f32 rot_8936; - -/* 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]; - -/* 80450F10-80450F14 000410 0004+00 1/1 0/0 0/0 .sbss S_fubuki_ratio$8948 */ -static f32 S_fubuki_ratio; - -/* 80450F14-80450F18 000414 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450F14[4]; - -/* 80452500-80452504 000B00 0004+00 1/1 0/0 0/0 .sdata2 @8939 */ -SECTION_SDATA2 static u32 lit_8939 = 0xFFFFFFFF; - -/* 80452504-80452508 000B04 0004+00 1/1 0/0 0/0 .sdata2 @8940 */ -SECTION_SDATA2 static u32 lit_8940 = 0xFFFFFFFF; - -/* 80452508-8045250C 000B08 0004+00 1/1 0/0 0/0 .sdata2 @9384 */ -SECTION_SDATA2 static f32 lit_9384 = -20.0f; - -/* 8045250C-80452510 000B0C 0004+00 1/1 0/0 0/0 .sdata2 @9385 */ -SECTION_SDATA2 static f32 lit_9385 = 178.5f; - -/* 80452510-80452514 000B10 0004+00 1/1 0/0 0/0 .sdata2 @9386 */ -SECTION_SDATA2 static f32 lit_9386 = 127.5f; - -/* 80452514-80452518 000B14 0004+00 3/3 0/0 0/0 .sdata2 @9387 */ -SECTION_SDATA2 static f32 lit_9387 = 719.0f; - -/* 80452518-8045251C 000B18 0004+00 1/1 0/0 0/0 .sdata2 @9388 */ -SECTION_SDATA2 static f32 lit_9388 = 220.0f; - -/* 8045251C-80452520 000B1C 0004+00 1/1 0/0 0/0 .sdata2 @9389 */ -SECTION_SDATA2 static f32 lit_9389 = 2079.0f; - -/* 80452520-80452524 000B20 0004+00 1/1 0/0 0/0 .sdata2 @9390 */ -SECTION_SDATA2 static f32 lit_9390 = 3013.0f; - -/* 80452524-80452528 000B24 0004+00 1/1 0/0 0/0 .sdata2 @9391 */ -SECTION_SDATA2 static f32 lit_9391 = 864.0f; - -/* 80452528-8045252C 000B28 0004+00 1/1 0/0 0/0 .sdata2 @9392 */ -SECTION_SDATA2 static f32 lit_9392 = -6000.0f; - -/* 8045252C-80452530 000B2C 0004+00 1/1 0/0 0/0 .sdata2 @9393 */ -SECTION_SDATA2 static f32 lit_9393 = -4145.0f; - -/* 80452530-80452534 000B30 0004+00 1/1 0/0 0/0 .sdata2 @9394 */ -SECTION_SDATA2 static f32 lit_9394 = -2960.0f; - -/* 80452534-80452538 000B34 0004+00 1/1 0/0 0/0 .sdata2 @9395 */ -SECTION_SDATA2 static f32 lit_9395 = -880.0f; - -/* 80452538-8045253C 000B38 0004+00 1/1 0/0 0/0 .sdata2 @9396 */ -SECTION_SDATA2 static f32 lit_9396 = -4920.0f; - -/* 8045253C-80452540 000B3C 0004+00 1/1 0/0 0/0 .sdata2 @9397 */ -SECTION_SDATA2 static f32 lit_9397 = -2000.0f; - -/* 80452540-80452544 000B40 0004+00 1/1 0/0 0/0 .sdata2 @9398 */ -SECTION_SDATA2 static f32 lit_9398 = 4.0f; - -/* 80452544-80452548 000B44 0004+00 1/1 0/0 0/0 .sdata2 @9399 */ -SECTION_SDATA2 static f32 lit_9399 = 14.0f; - -/* 80452548-8045254C 000B48 0004+00 1/1 0/0 0/0 .sdata2 @9400 */ -SECTION_SDATA2 static f32 lit_9400 = -24.0f; - -/* 8045254C-80452550 000B4C 0004+00 1/1 0/0 0/0 .sdata2 @9401 */ -SECTION_SDATA2 static f32 lit_9401 = 952.0f; - -/* 80452550-80452554 000B50 0004+00 1/1 0/0 0/0 .sdata2 @9402 */ -SECTION_SDATA2 static f32 lit_9402 = -52.0f; - -/* 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 -} - -/* ############################################################################################## */ -/* 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; - /* 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 +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; + + cXyz pos[4]; + + 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), + }; + + 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; + } + + GXColor color_reg0; + color_reg0.r = 0xDC; + color_reg0.g = 0xE6; + color_reg0.b = 0xFF; + color_reg0.a = 0xFF; + + if (dComIfGd_getView() != NULL) { + MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx); + } else { + return; + } + + 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); + + 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); + + Mtx rotMtx; + MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot)); + MTXConcat(camMtx, rotMtx, camMtx); + + GXLoadPosMtxImm(drawMtx, GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); + + rot += 0.65f; + if (rot > 719.0f) { + rot = 0.0f; + } + + spBC.x = camera->lookat.eye.x; + spBC.y = camera->lookat.eye.y; + spBC.z = camera->lookat.eye.z; + + f32 sp34 = -1.0f; + int sp30 = 0; + f32 var_f30 = 0.0f; + + 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; + } + + 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; + + for (int i = 0; i < star_packet->mEffectNum; i++) { + f32 var_f31; + cXyz star_pos; + f32 sp2C = 300.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; + + 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); + + 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))); + + sp48 += sp44; + sp44 += 2250; + + 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); + } + + 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}, + }; + + color_reg0 = star_col[i & 3]; + color_reg0.a = 70.0f + ((i & 63) * 2); + } + + GXSetTevColor(GX_TEVREG0, color_reg0); + + 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; + + mDoLib_project(&sp68, &star_proj); + + moon_proj.z = 0.0f; + star_proj.z = 0.0f; + f32 moon_dist_to_star = moon_proj.abs(star_proj); + + 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)); + } + + int weekday = date % 8; + if (g_env_light.getDaytime() < 180.0f) { + if (weekday != 0) { + weekday--; + } else { + weekday = 7; + } + } + + if (weekday == 4 && !gwolf_howl_stage) { + // it's a New Moon, so no threshold needed + moon_threshold = 0.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(); + } + } + } + + J3DShape::resetVcdVatCache(); + } } -/* ############################################################################################## */ -/* 80450F20-80450F24 000420 0004+00 1/1 0/0 0/0 .sbss rot$9847 */ -static f32 rot_9847; - -/* 80450F24-80450F28 000424 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450F24[4]; - -/* 80452568-8045256C 000B68 0004+00 1/1 0/0 0/0 .sdata2 @9850 */ -SECTION_SDATA2 static u32 lit_9850 = 0xFFFFFFFF; - -/* 8045256C-80452570 000B6C 0004+00 1/1 0/0 0/0 .sdata2 @9851 */ -SECTION_SDATA2 static u32 lit_9851 = 0xFFFFFFFF; - -/* 80452570-80452574 000B70 0004+00 1/1 0/0 0/0 .sdata2 @9852 */ -SECTION_SDATA2 static u32 lit_9852 = 0xFFFFFFFF; - -/* 80452574-80452578 000B74 0004+00 2/2 0/0 0/0 .sdata2 @10030 */ -SECTION_SDATA2 static f32 lit_10030 = 0.55f; - -/* 80452578-8045257C 000B78 0004+00 2/2 0/0 0/0 .sdata2 @10031 */ -SECTION_SDATA2 static f32 lit_10031 = 0.49f; - /* 8006950C-8006A090 063E4C 0B84+00 0/0 1/1 0/0 .text drawCloudShadow__FPA4_fPPUc */ -void drawCloudShadow(Mtx param_0, u8** param_1) { - // NONMATCHING +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); + + static f32 rot = 0.0f; + + 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; + } + + GXSetClipMode(GX_CLIP_DISABLE); + + 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); + } + + GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + GXSetNumIndStages(0); + dKr_cullVtx_Set(); + + MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot)); + MTXConcat(camMtx, rotMtx, camMtx); + GXLoadPosMtxImm(drawMtx, GX_PNMTX0); + + rot -= 0.45f; + if (rot < 0.0f) { + rot = 719.0f; + } + + 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); + } + + 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; - -/* 80450F2C-80450F30 00042C 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450F2C[4]; - -/* 8045257C-80452580 000B7C 0004+00 1/1 0/0 0/0 .sdata2 @10593 */ -SECTION_SDATA2 static f32 lit_10593 = 240.0f; - -/* 80452580-80452584 000B80 0004+00 1/1 0/0 0/0 .sdata2 @10594 */ -SECTION_SDATA2 static f32 lit_10594 = 0.0000000001; - -/* 80452584-80452588 000B84 0004+00 1/1 0/0 0/0 .sdata2 @10595 */ -SECTION_SDATA2 static f32 lit_10595 = 0.0625f; - -/* 80452588-8045258C 000B88 0004+00 1/1 0/0 0/0 .sdata2 @10596 */ -SECTION_SDATA2 static f32 lit_10596 = 0.84f; - -/* 8045258C-80452590 000B8C 0004+00 1/1 0/0 0/0 .sdata2 @10597 */ -SECTION_SDATA2 static f32 lit_10597 = 0.92f; - -/* 80452590-80452594 000B90 0004+00 1/1 0/0 0/0 .sdata2 @10598 */ -SECTION_SDATA2 static f32 lit_10598 = 1.9f; - -/* 80452594-80452598 000B94 0004+00 1/1 0/0 0/0 .sdata2 @10599 */ -SECTION_SDATA2 static f32 lit_10599 = 16.0f; - -/* 80452598-8045259C 000B98 0004+00 2/2 0/0 0/0 .sdata2 @10600 */ -SECTION_SDATA2 static f32 lit_10600 = 0.9f; - -/* 8045259C-804525A0 000B9C 0004+00 1/1 0/0 0/0 .sdata2 @10601 */ -SECTION_SDATA2 static f32 lit_10601 = -4.0f; - -/* 804525A0-804525A4 000BA0 0004+00 1/1 0/0 0/0 .sdata2 @10602 */ -SECTION_SDATA2 static f32 lit_10602 = 1.21f; - -/* 804525A4-804525A8 000BA4 0004+00 1/1 0/0 0/0 .sdata2 @10603 */ -SECTION_SDATA2 static f32 lit_10603 = 708.0f; - -/* 804525A8-804525AC 000BA8 0004+00 1/1 0/0 0/0 .sdata2 @10604 */ -SECTION_SDATA2 static f32 lit_10604 = 558.0f; +inline float cosf(float x) { + return cos(x); +} /* 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 +// 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(); + } + + if (dComIfGd_getView() != NULL) { + MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx); + } else { + OS_REPORT("\ndrawCloud ikinasi return!!"); + return; + } + + f32 rot = cAngle::s2d(fopCamM_GetBank(camera)); + int sp88 = 0; + f32 spCC = 100000.0f; + + 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(); + } + + if (filelist != NULL) { + sp70 = dStage_FileList_dt_SeaLevel(filelist); + } + + unused = 1.0f - (0.09f * (camera->lookat.eye.y - sp70)); + } + + 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; + } + } + + for (; pass < 2; pass++) { + if (pass == 0) { + GXSetColorUpdate(GX_DISABLE); + GXSetClipMode(GX_CLIP_DISABLE); + } else { + GXSetClipMode(GX_CLIP_ENABLE); + } + + 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); + } + + 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); + + if (pass == 1 && j == 0) { + MTXRotRad(rotMtx, 'Z', DEG_TO_RAD(rot)); + MTXConcat(camMtx, rotMtx, camMtx); + } + + 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; + } + + if (strcmp(dComIfGp_getStartStageName(), "D_MN07A") == 0) { + spA8 = 0.65f; + } + + 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 - -/* 804525AC-804525B0 000BAC 0004+00 1/1 0/0 0/0 .sdata2 @10732 */ -SECTION_SDATA2 static f32 lit_10732 = 90000.0f; - -/* 804525B0-804525B4 000BB0 0004+00 1/1 0/0 0/0 .sdata2 @10733 */ -SECTION_SDATA2 static f32 lit_10733 = 0.007000000216066837f; - -/* 804525B4-804525B8 000BB4 0004+00 1/1 0/0 0/0 .sdata2 @10734 */ -SECTION_SDATA2 static f32 lit_10734 = 195520.0f; - -/* 804525B8-804525BC 000BB8 0004+00 1/1 0/0 0/0 .sdata2 @10735 */ -SECTION_SDATA2 static f32 lit_10735 = 4818.0f; - -/* 804525BC-804525C0 000BBC 0004+00 1/1 0/0 0/0 .sdata2 @10736 */ -SECTION_SDATA2 static f32 lit_10736 = 1385.0f; - -/* 804525C0-804525C4 000BC0 0004+00 1/1 0/0 0/0 .sdata2 @10737 */ -SECTION_SDATA2 static f32 lit_10737 = 75.0f; - -/* 804525C4-804525C8 000BC4 0004+00 1/1 0/0 0/0 .sdata2 @10738 */ -SECTION_SDATA2 static f32 lit_10738 = -48.0f; - -/* 804525C8-804525CC 000BC8 0004+00 1/1 0/0 0/0 .sdata2 @10739 */ -SECTION_SDATA2 static f32 lit_10739 = 3.0f / 20.0f; - /* 8006B1A8-8006B8DC 065AE8 0734+00 0/0 1/1 0/0 .text dKyr_thunder_move__Fv */ void dKyr_thunder_move() { - // NONMATCHING + 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; + } + + 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; + } + + 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); + + if (g_env_light.field_0x12d6 == 0) { + if (sp10 == 0) { + dKyr_get_vectle_calc(&camera->lookat.eye, &camera->lookat.center, &sp28); + + 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); + } + + 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); + + + 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); + } + + dKy_vrbox_addcol_sky0_set(75, 130, 150, 0.6f * effect->mFlashTimer); + dKy_vrbox_addcol_kasumi_set(75, 130, 150, 0.5f * effect->mFlashTimer); + + 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); + + 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; } } - -/* ############################################################################################## */ -/* 804525CC-804525D0 000BCC 0004+00 1/1 0/0 0/0 .sdata2 @10872 */ -SECTION_SDATA2 static f32 lit_10872 = 78.0f; - -/* 804525D0-804525D4 000BD0 0004+00 1/1 0/0 0/0 .sdata2 @10873 */ -SECTION_SDATA2 static f32 lit_10873 = 3.0f / 50.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() { - // NONMATCHING + 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; + + if (dComIfGd_getView() != NULL) { + MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx); + } else { + return; + } + + odour_packet->field_0x17724 -= (int)cM_rndF(150.0f) + 430; + odour_packet->field_0x17726 -= (int)cM_rndF(50.0f) + 200; + + 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); + + effect->mPosition.y = 0.0f; + effect->mPosition.x = 150.0f * (temp_f30 * temp_f31); + effect->mPosition.z = 140.0f * (temp_f30 * temp_f31); + + 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; + } + } + } + } } -/* ############################################################################################## */ -/* 80450F30-80450F34 000430 0004+00 1/1 0/0 0/0 .sbss rot$10882 */ -static f32 rot_10882; - -/* 80450F34-80450F38 000434 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450F34[4]; - /* 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; + + 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); + + 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; + + f32 spC = sp68.abs(camera->lookat.eye); + f32 var_f30 = spC / 400.0f; + if (var_f30 > 1.0f) { + var_f30 = 1.0f; + } + + mud_packet->mEffect[i].field_0x3c = var_f30; + } } -/* ############################################################################################## */ -/* 80450F38-80450F3C 000438 0004+00 1/1 0/0 0/0 .sbss rot$11307 */ -static f32 rot_11307; - -/* 80450F3C-80450F40 00043C 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450F3C[4]; - -/* 804525D8-804525DC 000BD8 0004+00 1/1 0/0 0/0 .sdata2 @11508 */ -SECTION_SDATA2 static f32 lit_11508 = 13.0f / 10.0f; - -/* 804525DC-804525E0 000BDC 0004+00 1/1 0/0 0/0 .sdata2 @11509 */ -SECTION_SDATA2 static f32 lit_11509 = 12.0f; - /* 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; - -/* 80450F44-80450F48 000444 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450F44[4]; - -/* 804525E0-804525E4 000BE0 0004+00 1/1 0/0 0/0 .sdata2 @11882 */ -SECTION_SDATA2 static f32 lit_11882 = -5000.0f; - -/* 804525E4-804525E8 000BE4 0004+00 2/2 0/0 0/0 .sdata2 @11883 */ -SECTION_SDATA2 static f32 lit_11883 = 9000.0f; - -/* 804525E8-804525EC 000BE8 0004+00 2/2 0/0 0/0 .sdata2 @11884 */ -SECTION_SDATA2 static f32 lit_11884 = 688.0f; - -/* 804525EC-804525F0 000BEC 0004+00 2/2 0/0 0/0 .sdata2 @11885 */ -SECTION_SDATA2 static f32 lit_11885 = 538.0f; - -/* 804525F0-804525F4 000BF0 0004+00 1/1 0/0 0/0 .sdata2 @11886 */ -SECTION_SDATA2 static f32 lit_11886 = 159.0f; - -/* 804525F4-804525F8 000BF4 0004+00 1/1 0/0 0/0 .sdata2 @11887 */ -SECTION_SDATA2 static f32 lit_11887 = 135.0f; - /* 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 +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; + } + } + + f32 sp40; + f32 sp3C = 150.0f; + f32 sp38 = 250.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; + } + + 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; + } + + if (!(sp40 <= 0.000001f)) { + color_reg0.a = 255.0f * sp40; + + if (daPy_py_c::checkNowWolfPowerUp()) { + color_reg0.r = 80.0f * temp_f30; + color_reg0.g = 0; + color_reg0.b = 0; + color_reg0.a = 0x28; + + 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); + + 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); + } + + 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; } - -/* ############################################################################################## */ -/* 80450F48-80450F4C 000448 0004+00 1/1 0/0 0/0 .sbss rot$11958 */ -static f32 rot_11958; - -/* 80450F4C-80450F50 00044C 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_80450F4C[4]; - -/* 804525FC-80452600 000BFC 0004+00 1/1 0/0 0/0 .sdata2 @12252 */ -SECTION_SDATA2 static f32 lit_12252 = 69.0f; - -/* 80452600-80452604 000C00 0004+00 1/1 0/0 0/0 .sdata2 @12253 */ -SECTION_SDATA2 static f32 lit_12253 = 137.0f; - -/* 80452604-80452608 000C04 0004+00 1/1 0/0 0/0 .sdata2 @12254 */ -SECTION_SDATA2 static f32 lit_12254 = 750.0f; - -/* 80452608-8045260C 000C08 0004+00 1/1 0/0 0/0 .sdata2 @12255 */ -SECTION_SDATA2 static f32 lit_12255 = 9.0f / 5.0f; - -/* 8045260C-80452610 000C0C 0004+00 1/1 0/0 0/0 .sdata2 @12256 */ -SECTION_SDATA2 static f32 lit_12256 = 165.0f; - -/* 80452610-80452614 000C10 0004+00 1/1 0/0 0/0 .sdata2 @12257 */ -SECTION_SDATA2 static f32 lit_12257 = 155.0f; - -/* 80452614-80452618 000C14 0004+00 1/1 0/0 0/0 .sdata2 @12258 */ -SECTION_SDATA2 static f32 lit_12258 = -3000.0f; - -/* 80452618-8045261C 000C18 0004+00 1/1 0/0 0/0 .sdata2 @12259 */ -SECTION_SDATA2 static f32 lit_12259 = 127.0f; - -/* 8045261C-80452620 000C1C 0004+00 1/1 0/0 0/0 .sdata2 @12260 */ -SECTION_SDATA2 static f32 lit_12260 = 115.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 -} +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); -/* 8006F160-8006F168 069AA0 0008+00 0/0 1/0 0/0 .text getKandelaarFlamePos__9daPy_py_cFv - */ -cXyz* daPy_py_c::getKandelaarFlamePos() { - return NULL; + static f32 rot = 0.0f; + + Mtx camMtx; + Mtx rotMtx; + cXyz spC8; + + GXColor color_reg0; + GXColor color_reg1; + f32 sp64 = fabsf(cM_ssin(g_Counter.mCounter0 * 40)); + f32 sp60 = fabsf(cM_ssin(g_Counter.mCounter0 * 215)); + + if (evil_packet != NULL) { + j3dSys.reinitGX(); + if (dComIfGd_getView() != NULL) { + MTXInverse(dComIfGd_getView()->viewMtxNoTrans, camMtx); + } else { + OS_REPORT("\nevil_draw return!!"); + return; + } + + 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); + + dComIfG_Ccsp()->PrepareMass(); + + 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 spBC, spB0; + cXyz spA4; + + f32 temp_f30 = effect->field_0x38; + + if (effect->mStatus != 0) { + spA4 = effect->mBasePos + effect->mPosition; + + 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; + + mDoLib_project(&spA4, &proj); + + 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 ee1898b2c09..5e196dd573b 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 dfc3958d598..63b7cb9d6e1 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 1fa3fbdca31..03a6b9515d5 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 /* 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(); - u16 textureNum = texture->getNum(); - texture->addResTIMG(1, objectRes - textureNum); - J3DTexMtx* texMtxInfo = new J3DTexMtx(l_texMtxInfo); + ResTIMG* resTimg = (ResTIMG*)dComIfG_getObjectRes("Always", 0x5d); + JUT_ASSERT(0x117, resTimg != 0); - for (u16 i = 0; i < param_1->getMaterialNum(); i++) { - J3DMaterial* pMaterial = param_1->getMaterialNodePointer(i); - J3DTexGenBlock* texGenBlock = pMaterial->getTexGenBlock(); + J3DTexture* texture = i_modelData->getTexture(); + u16 textureNum = texture->getNum(); + texture->addResTIMG(1, resTimg - textureNum); + + 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; - mDoExt_transAnmBas* transAnmBas = new mDoExt_transAnmBas(local_9c); + if (chunk->some_data_offset != 0xFFFFFFFF) { + bas = (void*)(chunk->some_data_offset + (u32)result); + } else { + bas = NULL; + } + + 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) { - return 0; - } else { - if (resInfo->decCount() == 0) { - resInfo->~dRes_info_c(); - } - return 1; +#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; + } + + 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(); - if (resIdx >= (int)fileCount) { - OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", arcName, resIdx, - fileCount); + JKRArchive* archive = resInfo->getArchive(); + int count = archive->countFile(); + + 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)) { - return 0; - } else { - JKRMemArchive* memArchive = - new JKRMemArchive(i_archiveRes, param_2, JKRMEMBREAK_FLAG_UNKNOWN0); +int dRes_control_c::setObjectRes(char const* i_arcName, void* i_archiveRes, u32 i_bufferSize, + JKRHeap* i_heap) { + JUT_ASSERT(0x7A3, i_archiveRes != 0); - 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; - } +#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; } + + 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; }