From 6d006074a75e780a3632789a1d1b73d5b578112b Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Tue, 18 Oct 2022 05:15:45 -0700 Subject: [PATCH] d_attention / d_demo / d_lib work --- Progress.md | 8 +- .../getPlayerNo__11daTagMist_cFv.s | 2 +- ...newData__7daSus_cFScRC4cXyzRC4cXyzUcUcUc.s | 6 +- asm/d/d_attention/Run__12dAttention_cFv.s | 4 +- asm/d/d_attention/__ct__11dAttParam_cFl.s | 2 +- .../checkButton__12dAttention_cFv.s | 6 +- .../d_a_arrow/arrowShooting__9daArrow_cFv.s | 4 +- .../d_a_arrow/execute__9daArrow_cFv.s | 4 +- .../d_a_tag_mist/Create__11daTagMist_cFv.s | 4 +- .../d_a_tag_mist/execute__11daTagMist_cFv.s | 4 +- .../JSystem/J3DGraphAnimator/J3DJointTree.h | 1 + .../JSystem/J3DGraphAnimator/J3DModelData.h | 1 + .../JSystem/JStudio/JStudio/jstudio-object.h | 30 +- .../JSystem/JStudio/JStudio/stb-data-parse.h | 2 +- include/JSystem/JStudio/JStudio/stb.h | 40 + include/MSL_C/MSL_Common/Src/wchar_io.h | 2 + include/Z2AudioLib/Z2SeqMgr.h | 22 +- include/d/com/d_com_inf_game.h | 33 +- include/d/com/d_com_static.h | 28 +- include/d/d_attention.h | 161 +- include/d/d_demo.h | 28 +- include/d/d_drawlist.h | 3 + include/d/d_lib.h | 8 +- include/d/msg/d_msg_object.h | 4 + include/dolphin/base/PPCArch.h | 8 + include/f_op/f_op_actor.h | 1 + include/m_Do/m_Do_audio.h | 16 +- include/m_Do/m_Do_ext.h | 4 + .../d/a/d_a_movie_player/d_a_movie_player.h | 24 +- libs/MSL_C/MSL_Common/Src/abort_exit.c | 81 +- libs/dolphin/base/Makefile | 12 +- libs/dolphin/base/{PPCArch.cpp => PPCArch.c} | 61 +- rel/d/a/d_a_arrow/d_a_arrow.cpp | 2 +- rel/d/a/tag/d_a_tag_mist/d_a_tag_mist.cpp | 2 +- src/d/com/d_com_static.cpp | 340 ++-- src/d/d_attention.cpp | 1721 +++++++++++++---- src/d/d_demo.cpp | 675 ++++--- src/d/d_lib.cpp | 54 +- src/d/d_vibration.cpp | 9 +- src/d/event/d_event_data.cpp | 6 +- 40 files changed, 2249 insertions(+), 1174 deletions(-) rename libs/dolphin/base/{PPCArch.cpp => PPCArch.c} (84%) diff --git a/Progress.md b/Progress.md index f4da0061222..6803a8ff850 100644 --- a/Progress.md +++ b/Progress.md @@ -7,22 +7,22 @@ Section | Percentage | Decompiled (bytes) | Total (bytes) .init | 91.849662% | 8700 | 9472 .extab | 100.000000% | 96 | 96 .extabindex | 100.000000% | 96 | 96 -.text | 16.500285% | 593440 | 3596544 +.text | 16.800351% | 604232 | 3596544 .ctors | 100.000000% | 448 | 448 .dtors | 100.000000% | 32 | 32 .rodata | 100.000000% | 193856 | 193856 .data | 100.000000% | 197632 | 197632 .sdata | 100.000000% | 1408 | 1408 .sdata2 | 100.000000% | 20832 | 20832 -Total | 25.289205% | 1016796 | 4020672 +Total | 25.557618% | 1027588 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 25.289205% | 1016796 | 4020672 +main.dol | 25.557618% | 1027588 | 4020672 RELs | 33.217047% | 3820068 | 11500324 -Total | 31.163361% | 4836864 | 15520996 +Total | 31.232893% | 4847656 | 15520996 ## RELs diff --git a/asm/d/com/d_com_static/getPlayerNo__11daTagMist_cFv.s b/asm/d/com/d_com_static/getPlayerNo__11daTagMist_cFv.s index 5b8bf7d38bf..a7b18377b07 100644 --- a/asm/d/com/d_com_static/getPlayerNo__11daTagMist_cFv.s +++ b/asm/d/com/d_com_static/getPlayerNo__11daTagMist_cFv.s @@ -1,3 +1,3 @@ lbl_80031CF0: -/* 80031CF0 88 6D 88 40 */ lbz r3, struct_80450DC0+0x0(r13) +/* 80031CF0 88 6D 88 40 */ lbz r3, mPlayerNo__11daTagMist_c+0x0(r13) /* 80031CF4 4E 80 00 20 */ blr diff --git a/asm/d/com/d_com_static/newData__7daSus_cFScRC4cXyzRC4cXyzUcUcUc.s b/asm/d/com/d_com_static/newData__7daSus_cFScRC4cXyzRC4cXyzUcUcUc.s index ae8464a9aad..7b3e4cec22d 100644 --- a/asm/d/com/d_com_static/newData__7daSus_cFScRC4cXyzRC4cXyzUcUcUc.s +++ b/asm/d/com/d_com_static/newData__7daSus_cFScRC4cXyzRC4cXyzUcUcUc.s @@ -10,7 +10,7 @@ lbl_80031248: /* 80031268 7C CA 33 78 */ mr r10, r6 /* 8003126C 7C E0 3B 78 */ mr r0, r7 /* 80031270 7D 09 43 78 */ mr r9, r8 -/* 80031274 A8 AD 88 0A */ lha r5, struct_80450D88+0x2(r13) +/* 80031274 A8 AD 88 0A */ lha r5, m_count__9daArrow_c+0x2(r13) /* 80031278 1C 85 00 24 */ mulli r4, r5, 0x24 /* 8003127C 3C 60 80 42 */ lis r3, mData__7daSus_c@ha /* 0x80423FFC@ha */ /* 80031280 38 63 3F FC */ addi r3, r3, mData__7daSus_c@l /* 0x80423FFC@l */ @@ -42,7 +42,7 @@ lbl_80031290: /* 800312E4 7C 03 00 50 */ subf r0, r3, r0 /* 800312E8 54 00 28 3E */ rotlwi r0, r0, 5 /* 800312EC 7C 00 1A 14 */ add r0, r0, r3 -/* 800312F0 B0 0D 88 0A */ sth r0, struct_80450D88+0x2(r13) +/* 800312F0 B0 0D 88 0A */ sth r0, m_count__9daArrow_c+0x2(r13) /* 800312F4 38 60 00 01 */ li r3, 1 /* 800312F8 48 00 00 AC */ b lbl_800313A4 lbl_800312FC: @@ -81,7 +81,7 @@ lbl_80031320: /* 80031374 7C 03 00 50 */ subf r0, r3, r0 /* 80031378 54 00 28 3E */ rotlwi r0, r0, 5 /* 8003137C 7C 00 1A 14 */ add r0, r0, r3 -/* 80031380 B0 0D 88 0A */ sth r0, struct_80450D88+0x2(r13) +/* 80031380 B0 0D 88 0A */ sth r0, m_count__9daArrow_c+0x2(r13) /* 80031384 38 60 00 01 */ li r3, 1 /* 80031388 48 00 00 1C */ b lbl_800313A4 lbl_8003138C: diff --git a/asm/d/d_attention/Run__12dAttention_cFv.s b/asm/d/d_attention/Run__12dAttention_cFv.s index 0caeeaac933..26fd164b4e7 100644 --- a/asm/d/d_attention/Run__12dAttention_cFv.s +++ b/asm/d/d_attention/Run__12dAttention_cFv.s @@ -105,7 +105,7 @@ lbl_80072A9C: /* 80072A9C 54 60 00 C7 */ rlwinm. r0, r3, 0, 3, 3 /* 80072AA0 41 82 00 48 */ beq lbl_80072AE8 /* 80072AA4 80 7F 00 0C */ lwz r3, 0xc(r31) -/* 80072AA8 4B FF D5 71 */ bl func_80070018 +/* 80072AA8 4B FF D5 71 */ bl padLockButton /* 80072AAC 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 80072AB0 40 82 00 84 */ bne lbl_80072B34 /* 80072AB4 80 1F 03 34 */ lwz r0, 0x334(r31) @@ -124,7 +124,7 @@ lbl_80072AD8: /* 80072AE4 48 00 00 50 */ b lbl_80072B34 lbl_80072AE8: /* 80072AE8 80 7F 00 0C */ lwz r3, 0xc(r31) -/* 80072AEC 4B FF D5 2D */ bl func_80070018 +/* 80072AEC 4B FF D5 2D */ bl padLockButton /* 80072AF0 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 80072AF4 41 82 00 40 */ beq lbl_80072B34 /* 80072AF8 7F E3 FB 78 */ mr r3, r31 diff --git a/asm/d/d_attention/__ct__11dAttParam_cFl.s b/asm/d/d_attention/__ct__11dAttParam_cFl.s index 07212d18ad4..69accabe210 100644 --- a/asm/d/d_attention/__ct__11dAttParam_cFl.s +++ b/asm/d/d_attention/__ct__11dAttParam_cFl.s @@ -46,7 +46,7 @@ lbl_80070038: /* 800700E8 48 2F 88 AD */ bl strcmp /* 800700EC 7C 60 00 34 */ cntlzw r0, r3 /* 800700F0 54 00 D9 7E */ srwi r0, r0, 5 -/* 800700F4 98 0D 89 D8 */ stb r0, data_80450F58(r13) +/* 800700F4 98 0D 89 D8 */ stb r0, on_final_boss_stg(r13) /* 800700F8 7F E3 FB 78 */ mr r3, r31 /* 800700FC 83 E1 00 0C */ lwz r31, 0xc(r1) /* 80070100 80 01 00 14 */ lwz r0, 0x14(r1) diff --git a/asm/d/d_attention/checkButton__12dAttention_cFv.s b/asm/d/d_attention/checkButton__12dAttention_cFv.s index db3e953c462..cfd402b4582 100644 --- a/asm/d/d_attention/checkButton__12dAttention_cFv.s +++ b/asm/d/d_attention/checkButton__12dAttention_cFv.s @@ -4,7 +4,7 @@ lbl_800720F8: /* 80072100 90 01 00 14 */ stw r0, 0x14(r1) /* 80072104 93 E1 00 0C */ stw r31, 0xc(r1) /* 80072108 7C 7F 1B 78 */ mr r31, r3 -/* 8007210C 88 0D 89 D8 */ lbz r0, data_80450F58(r13) +/* 8007210C 88 0D 89 D8 */ lbz r0, on_final_boss_stg(r13) /* 80072110 28 00 00 00 */ cmplwi r0, 0 /* 80072114 41 82 00 60 */ beq lbl_80072174 /* 80072118 88 0D 87 E4 */ lbz r0, mStayNo__20dStage_roomControl_c+0x0(r13) @@ -69,7 +69,7 @@ lbl_800721E8: /* 800721F0 48 00 00 9C */ b lbl_8007228C lbl_800721F4: /* 800721F4 80 7F 00 0C */ lwz r3, 0xc(r31) -/* 800721F8 4B FF DE 21 */ bl func_80070018 +/* 800721F8 4B FF DE 21 */ bl padLockButton /* 800721FC 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 80072200 40 82 00 10 */ bne lbl_80072210 /* 80072204 80 1F 03 34 */ lwz r0, 0x334(r31) @@ -105,7 +105,7 @@ lbl_8007223C: /* 80072270 48 00 00 1C */ b lbl_8007228C lbl_80072274: /* 80072274 80 7F 00 0C */ lwz r3, 0xc(r31) -/* 80072278 4B FF DD A1 */ bl func_80070018 +/* 80072278 4B FF DD A1 */ bl padLockButton /* 8007227C 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 80072280 40 82 00 0C */ bne lbl_8007228C /* 80072284 38 00 00 04 */ li r0, 4 diff --git a/asm/rel/d/a/d_a_arrow/d_a_arrow/arrowShooting__9daArrow_cFv.s b/asm/rel/d/a/d_a_arrow/d_a_arrow/arrowShooting__9daArrow_cFv.s index fe937a00928..34fb0c2278d 100644 --- a/asm/rel/d/a/d_a_arrow/d_a_arrow/arrowShooting__9daArrow_cFv.s +++ b/asm/rel/d/a/d_a_arrow/d_a_arrow/arrowShooting__9daArrow_cFv.s @@ -154,8 +154,8 @@ lbl_8049ABF0: /* 8049AC14 60 00 00 02 */ ori r0, r0, 2 /* 8049AC18 90 1F 06 E0 */ stw r0, 0x6e0(r31) lbl_8049AC1C: -/* 8049AC1C 3C 60 80 45 */ lis r3, struct_80450D88+0x0@ha /* 0x80450D88@ha */ -/* 8049AC20 38 83 0D 88 */ addi r4, r3, struct_80450D88+0x0@l /* 0x80450D88@l */ +/* 8049AC1C 3C 60 80 45 */ lis r3, m_count__9daArrow_c+0x0@ha /* 0x80450D88@ha */ +/* 8049AC20 38 83 0D 88 */ addi r4, r3, m_count__9daArrow_c+0x0@l /* 0x80450D88@l */ /* 8049AC24 A8 04 00 00 */ lha r0, 0(r4) /* 8049AC28 B0 1F 09 4E */ sth r0, 0x94e(r31) /* 8049AC2C A8 64 00 00 */ lha r3, 0(r4) diff --git a/asm/rel/d/a/d_a_arrow/d_a_arrow/execute__9daArrow_cFv.s b/asm/rel/d/a/d_a_arrow/d_a_arrow/execute__9daArrow_cFv.s index f68c6a48c3a..b310bc9cb5e 100644 --- a/asm/rel/d/a/d_a_arrow/d_a_arrow/execute__9daArrow_cFv.s +++ b/asm/rel/d/a/d_a_arrow/d_a_arrow/execute__9daArrow_cFv.s @@ -41,8 +41,8 @@ lbl_8049CF14: /* 8049CF38 48 00 01 60 */ b lbl_8049D098 lbl_8049CF3C: /* 8049CF3C A8 9F 09 4E */ lha r4, 0x94e(r31) -/* 8049CF40 3C 60 80 45 */ lis r3, struct_80450D88+0x0@ha /* 0x80450D88@ha */ -/* 8049CF44 A8 03 0D 88 */ lha r0, struct_80450D88+0x0@l(r3) /* 0x80450D88@l */ +/* 8049CF40 3C 60 80 45 */ lis r3, m_count__9daArrow_c+0x0@ha /* 0x80450D88@ha */ +/* 8049CF44 A8 03 0D 88 */ lha r0, m_count__9daArrow_c+0x0@l(r3) /* 0x80450D88@l */ /* 8049CF48 7C 04 00 00 */ cmpw r4, r0 /* 8049CF4C 40 82 00 0C */ bne lbl_8049CF58 /* 8049CF50 38 00 00 01 */ li r0, 1 diff --git a/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/Create__11daTagMist_cFv.s b/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/Create__11daTagMist_cFv.s index 69caf3f1243..4c51652614c 100644 --- a/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/Create__11daTagMist_cFv.s +++ b/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/Create__11daTagMist_cFv.s @@ -42,8 +42,8 @@ lbl_8048F370: /* 8048F410 41 82 00 14 */ beq lbl_8048F424 /* 8048F414 80 1F 00 B0 */ lwz r0, 0xb0(r31) /* 8048F418 54 00 46 BE */ rlwinm r0, r0, 8, 0x1a, 0x1f -/* 8048F41C 3C 60 80 45 */ lis r3, struct_80450DC0+0x0@ha /* 0x80450DC0@ha */ -/* 8048F420 98 03 0D C0 */ stb r0, struct_80450DC0+0x0@l(r3) /* 0x80450DC0@l */ +/* 8048F41C 3C 60 80 45 */ lis r3, mPlayerNo__11daTagMist_c+0x0@ha /* 0x80450DC0@ha */ +/* 8048F420 98 03 0D C0 */ stb r0, mPlayerNo__11daTagMist_c+0x0@l(r3) /* 0x80450DC0@l */ lbl_8048F424: /* 8048F424 38 00 00 00 */ li r0, 0 /* 8048F428 98 1F 05 A0 */ stb r0, 0x5a0(r31) diff --git a/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/execute__11daTagMist_cFv.s b/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/execute__11daTagMist_cFv.s index 428201bb3d9..f7259cf39b8 100644 --- a/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/execute__11daTagMist_cFv.s +++ b/asm/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist/execute__11daTagMist_cFv.s @@ -69,8 +69,8 @@ lbl_8048F63C: /* 8048F65C 4B FF FC 69 */ bl onMySw__11daTagMist_cFv /* 8048F660 80 1F 00 B0 */ lwz r0, 0xb0(r31) /* 8048F664 54 00 46 BE */ rlwinm r0, r0, 8, 0x1a, 0x1f -/* 8048F668 3C 60 80 45 */ lis r3, struct_80450DC0+0x0@ha /* 0x80450DC0@ha */ -/* 8048F66C 98 03 0D C0 */ stb r0, struct_80450DC0+0x0@l(r3) /* 0x80450DC0@l */ +/* 8048F668 3C 60 80 45 */ lis r3, mPlayerNo__11daTagMist_c+0x0@ha /* 0x80450DC0@ha */ +/* 8048F66C 98 03 0D C0 */ stb r0, mPlayerNo__11daTagMist_c+0x0@l(r3) /* 0x80450DC0@l */ lbl_8048F670: /* 8048F670 9B DF 05 A0 */ stb r30, 0x5a0(r31) /* 8048F674 38 60 00 01 */ li r3, 1 diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index b8e82673399..4937fdae320 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.h @@ -34,6 +34,7 @@ public: u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; } u16 getJointNum() const { return mJointNum; } u16 getDrawMtxNum() const { return mDrawMtxData.mEntryNum; } + JUTNameTab* getJointName() const { return mJointName; } J3DJoint* getRootNode() { return mRootNode; } J3DJoint* getJointNodePointer(u16 idx) const { return mJointNodePointer[idx]; } J3DMtxCalc* getBasicMtxCalc() const { return mBasicMtxCalc; } diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index 5371f8113a8..bc4c2ba9a64 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -33,6 +33,7 @@ public: J3DShape* getShapeNodePointer(u16 idx) const { return mShapeTable.getShapeNodePointer(idx); } J3DJoint* getJointNodePointer(u16 idx) const { return mJointTree.getJointNodePointer(idx); } J3DJointTree& getJointTree() { return mJointTree; } + JUTNameTab* getJointName() const { return mJointTree.getJointName(); } Mtx& getInvJointMtx(s32 idx) const { return mJointTree.getInvJointMtx(idx); } J3DTexture* getTexture() const { return mMaterialTable.getTexture(); } JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); } diff --git a/include/JSystem/JStudio/JStudio/jstudio-object.h b/include/JSystem/JStudio/JStudio/jstudio-object.h index 9f78474e13e..b0da5a20450 100644 --- a/include/JSystem/JStudio/JStudio/jstudio-object.h +++ b/include/JSystem/JStudio/JStudio/jstudio-object.h @@ -9,7 +9,9 @@ namespace JStudio { namespace data { - struct TEOperationData {}; + enum TEOperationData { + UNK_0x19 = 0x19, + }; }; struct TAdaptor; @@ -50,6 +52,26 @@ public: /* 8028680C */ virtual void do_wait(u32); /* 8028682C */ virtual void do_data(void const*, u32, void const*, u32); + void prepareAdaptor() { + if (mpAdaptor != NULL) { + // mpAdaptor->adaptor_setObject_(this); + // mpAdaptor->adaptor_do_begin(); + } + } + + template + T* createFromAdaptor(const stb::data::TParse_TBlock_object& param_0, T* param_1) { + T* n = new T(param_0, param_1); + + if (n == NULL) { + return NULL; + } + + n->prepareAdaptor(); + + return n; + } + /* 0x34 */ TAdaptor* mpAdaptor; }; @@ -86,7 +108,11 @@ struct TAdaptor { /* 80286648 */ void adaptor_setVariableValue_FVR_INDEX_(JStudio::TAdaptor*, JStudio::TControl*, u32, void const*, u32); - /* 0x4 */ TObject* pObject_; + void adaptor_setObject_(const TObject* pObject) { + pObject_ = pObject; + } + + /* 0x4 */ const TObject* pObject_; /* 0x8 */ TVariableValue* pValue_; /* 0xC */ u32 u; }; diff --git a/include/JSystem/JStudio/JStudio/stb-data-parse.h b/include/JSystem/JStudio/JStudio/stb-data-parse.h index ef96a0d35fa..b21486fcfb0 100644 --- a/include/JSystem/JStudio/JStudio/stb-data-parse.h +++ b/include/JSystem/JStudio/JStudio/stb-data-parse.h @@ -73,7 +73,7 @@ struct TParse_TParagraph_data : public TParseData_aligned<4> { }; TParse_TParagraph_data(const void* content) : TParseData_aligned<4>(content) {} - /* 80289A80 */ void getData(TData*) const; + /* 80289A80 */ void getData(TData* pData) const; }; // Parses a TObject ("demo object") diff --git a/include/JSystem/JStudio/JStudio/stb.h b/include/JSystem/JStudio/JStudio/stb.h index e54ddb4b838..ec5dfbb2e8d 100644 --- a/include/JSystem/JStudio/JStudio/stb.h +++ b/include/JSystem/JStudio/JStudio/stb.h @@ -152,6 +152,46 @@ private: /* 0x54 */ s32 _54; }; +template +struct TParseData { + TParseData(const void* pContent) { + data::TParse_TParagraph_data data(pContent); + set(data); + } + + void set(const data::TParse_TParagraph_data& data) { + //data::TParse_TParagraph_data::TData* p = (data::TParse_TParagraph_data::TData*)this; + data.getData(m_data); + } + + bool isEnd() const { + return m_data->_0 == 0; + } + + bool empty() const { + return m_data->_c == NULL; + } + + bool isValid() const { + return !empty() && m_data->_0 == 50; + } + + data::TParse_TParagraph_data::TData* m_data; +}; + +template +struct TParseData_fixed : public TParseData { + TParseData_fixed(const void* pContent) : TParseData(pContent) {} + + const void* getNext() const { + return m_data->_c; + } + + bool isValid() const { + return TParseData::isValid() && getNext() != NULL; + } +}; + } // namespace stb } // namespace JStudio diff --git a/include/MSL_C/MSL_Common/Src/wchar_io.h b/include/MSL_C/MSL_Common/Src/wchar_io.h index ba643b03fa9..fc8d3d43326 100644 --- a/include/MSL_C/MSL_Common/Src/wchar_io.h +++ b/include/MSL_C/MSL_Common/Src/wchar_io.h @@ -3,4 +3,6 @@ #include "dolphin/types.h" +typedef unsigned short wchar_t; + #endif /* MSL_COMMON_SRC_WCHAR_IO_H */ diff --git a/include/Z2AudioLib/Z2SeqMgr.h b/include/Z2AudioLib/Z2SeqMgr.h index 5a1ec56f388..3dedde1115a 100644 --- a/include/Z2AudioLib/Z2SeqMgr.h +++ b/include/Z2AudioLib/Z2SeqMgr.h @@ -25,8 +25,8 @@ class Z2SeqMgr { public: Z2SeqMgr(); - void bgmStart(u32, u32, s32); - void bgmStop(u32, s32); + void bgmStart(u32 i_bgmID, u32, s32); + void bgmStop(u32 i_bgmID, s32); void subBgmStart(u32); void subBgmStop(); void subBgmStopInner(); @@ -79,12 +79,12 @@ public: void i_setTwilightGateVol(f32 vol) { mTwilightGateVol = vol; } - void i_setWindStoneVol(f32 vol, u32 count) { field_0x94.move(vol, count); } + void i_setWindStoneVol(f32 vol, u32 count) { mWindStone.move(vol, count); } - void i_bgmAllUnMute(u32 count) { field_0x74.move(1.0f, count); } + void i_bgmAllUnMute(u32 count) { mAllBgmMaster.move(1.0f, count); } void i_unMuteSceneBgm(u32 count) { - field_0x34.move(1.0f, 0); + mBgmPause.move(1.0f, 0); field_0x44.move(1.0f, count); } @@ -94,15 +94,15 @@ private: /* 0x08 */ JAISoundHandle field_0x08; /* 0x0C */ JAISoundHandle field_0x0c; /* 0x10 */ JAISoundID field_0x10; - /* 0x14 */ Z2SoundFader field_0x14; - /* 0x24 */ Z2SoundFader field_0x24; - /* 0x34 */ Z2SoundFader field_0x34; + /* 0x14 */ Z2SoundFader mMainBgmMaster; + /* 0x24 */ Z2SoundFader mSubBgmMaster; + /* 0x34 */ Z2SoundFader mBgmPause; /* 0x44 */ Z2SoundFader field_0x44; - /* 0x54 */ Z2SoundFader field_0x54; + /* 0x54 */ Z2SoundFader mFanfareMute; /* 0x64 */ Z2SoundFader field_0x64; - /* 0x74 */ Z2SoundFader field_0x74; + /* 0x74 */ Z2SoundFader mAllBgmMaster; /* 0x84 */ Z2SoundFader field_0x84; - /* 0x94 */ Z2SoundFader field_0x94; + /* 0x94 */ Z2SoundFader mWindStone; /* 0xA4 */ Z2SoundFader field_0xa4; /* 0xB4 */ f32 mTwilightGateVol; /* 0xB8 */ u16 field_0xb8; diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 899e6e40841..687eaf1aef7 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -380,6 +380,8 @@ public: return mCameraInfo[i].mCameraAttentionStatus & flag; } void setCameraAttentionStatus(int i, u32 flag) { mCameraInfo[i].mCameraAttentionStatus = flag; } + void onCameraAttentionStatus(int i, u32 flag) { mCameraInfo[i].mCameraAttentionStatus |= flag; } + void offCameraAttentionStatus(int i, u32 flag) { mCameraInfo[i].mCameraAttentionStatus &= ~flag; } void setCameraInfo(int camIdx, camera_class* p_cam, int param_2, int param_3, int param_4) { mCameraInfo[camIdx].mCamera = p_cam; mCameraInfo[camIdx].field_0x4 = param_2; @@ -400,6 +402,7 @@ public: int getMessageCountNumber() { return mMessageCountNum; } void setWindowNum(u8 num) { mWindowNum = num; } + int getWindowNum() { return mWindowNum; } dDlst_window_c* getWindow(int i) { return &mWindow[i]; } void setWindow(int i, f32 param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, f32 param_6, int camID, int mode) { @@ -1062,6 +1065,10 @@ inline u8 dComIfGs_getOptVibration() { return g_dComIfG_gameInfo.info.getPlayer().getConfig().getVibration(); } +inline u8 dComIfGs_getOptAttentionType() { + return g_dComIfG_gameInfo.info.getPlayer().getConfig().getAttentionType(); +} + inline BOOL dComIfGs_isTbox(int i_no) { return g_dComIfG_gameInfo.info.getMemory().getBit().isTbox(i_no); } @@ -1400,7 +1407,7 @@ inline void dComIfGs_setTmpReg(u16 reg, u8 flag) { g_dComIfG_gameInfo.info.getTmp().setEventReg(reg, flag); } -inline u8 dComIfGs_getTmpReg(u16 reg) { +inline int dComIfGs_getTmpReg(u16 reg) { return g_dComIfG_gameInfo.info.getTmp().getEventReg(reg); } @@ -2026,6 +2033,14 @@ inline BOOL dComIfGp_checkCameraAttentionStatus(int i, u32 flag) { return g_dComIfG_gameInfo.play.checkCameraAttentionStatus(i, flag); } +inline void dComIfGp_onCameraAttentionStatus(int i, u32 flag) { + g_dComIfG_gameInfo.play.onCameraAttentionStatus(i, flag); +} + +inline void dComIfGp_offCameraAttentionStatus(int i, u32 flag) { + g_dComIfG_gameInfo.play.offCameraAttentionStatus(i, flag); +} + inline void dComIfGp_setCameraInfo(int camIdx, camera_class* p_cam, int param_2, int param_3, int param_4) { g_dComIfG_gameInfo.play.setCameraInfo(camIdx, p_cam, param_2, param_3, param_4); @@ -2171,6 +2186,10 @@ inline void dComIfGp_setWindowNum(int num) { g_dComIfG_gameInfo.play.setWindowNum(num); } +inline int dComIfGp_getWindowNum() { + return g_dComIfG_gameInfo.play.getWindowNum(); +} + inline dDlst_window_c* dComIfGp_getWindow(int i) { return g_dComIfG_gameInfo.play.getWindow(i); } @@ -2546,6 +2565,13 @@ inline view_class* dComIfGd_getView() { return g_dComIfG_gameInfo.drawlist.getView(); } +inline MtxP dComIfGd_getViewRotMtx() { + return ((camera_process_class*)g_dComIfG_gameInfo.drawlist.getView())->mViewMtxNoTrans; +} +inline MtxP dComIfGd_getViewMtx() { + return ((camera_process_class*)g_dComIfG_gameInfo.drawlist.getView())->mViewMtx; +} + inline J3DDrawBuffer* dComIfGd_getListFilter() { return g_dComIfG_gameInfo.drawlist.getOpaListFilter(); } @@ -2578,6 +2604,11 @@ inline void dComIfGd_setListItem3D() { g_dComIfG_gameInfo.drawlist.setXluListItem3D(); } +inline void dComIfGd_setList3Dlast() { + g_dComIfG_gameInfo.drawlist.setOpaList3Dlast(); + g_dComIfG_gameInfo.drawlist.setXluList3Dlast(); +} + inline void dComIfGd_setXluList2DScreen() { g_dComIfG_gameInfo.drawlist.setXluList2DScreen(); } diff --git a/include/d/com/d_com_static.h b/include/d/com/d_com_static.h index 2268d3081a5..9f15a064987 100644 --- a/include/d/com/d_com_static.h +++ b/include/d/com/d_com_static.h @@ -11,21 +11,36 @@ public: class data_c { public: /* 80030F14 */ void set(s8, cXyz const&, cXyz const&, u8, u8, u8); - /* 80030FBC */ void reset(); - /* 80030FCC */ void isSwitch(); - /* 800310C8 */ void check(fopAc_ac_c*); - /* 80031038 */ void check(cXyz const&); + /* 80030FBC */ data_c* reset(); + /* 80030FCC */ u8 isSwitch(); + /* 800310C8 */ u8 check(fopAc_ac_c*); + /* 80031038 */ bool check(cXyz const&); /* 80031150 */ void execute(); /* 80031F28 */ ~data_c(); /* 80031F64 */ data_c(); - }; + + void setNext(data_c* i_next) { mpNext = i_next; } + data_c* getNext() { return mpNext; } + u8 getType() { return mType; } + + /* 0x00 */ s8 mRoomNo; + /* 0x01 */ bool field_0x1; + /* 0x02 */ u8 field_0x2; + /* 0x03 */ u8 field_0x3; + /* 0x04 */ u8 mType; + /* 0x08 */ cXyz field_0x8; + /* 0x14 */ cXyz field_0x14; + /* 0x20 */ data_c* mpNext; + }; // Size: 0x24 class room_c { public: /* 80031190 */ void add(daSus_c::data_c*); /* 800311FC */ void reset(); /* 80031EE4 */ room_c(); - }; + + /* 0x0 */ data_c* mpData; + }; // Size: 0x4 /* 80031248 */ void newData(s8, cXyz const&, cXyz const&, u8, u8, u8); /* 800313BC */ void reset(); @@ -35,6 +50,7 @@ public: static u8 mData[1152]; static u8 mRoom[256]; + static s16 mSetTop; }; #endif /* D_COM_D_COM_STATIC_H */ diff --git a/include/d/d_attention.h b/include/d/d_attention.h index d0c674f9049..b214b991cdd 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -10,32 +10,32 @@ class dAttHint_c { public: dAttHint_c() {} - /* 800738B4 */ void getPId(void*); - /* 800738CC */ void convPId(unsigned int); - /* 800738FC */ void request(fopAc_ac_c*, int); + /* 800738B4 */ u32 getPId(void*); + /* 800738CC */ fopAc_ac_c* convPId(unsigned int); + /* 800738FC */ int request(fopAc_ac_c*, int); /* 80073958 */ void init(); /* 80073970 */ void proc(); private: /* 0x0 */ u32 mHintActorID; - /* 0x4 */ u32 mPriority; + /* 0x4 */ int mPriority; /* 0x8 */ u32 field_0x8; }; class dAttCatch_c { public: dAttCatch_c() {} - s32 convPId(unsigned int); + fopAc_ac_c* convPId(unsigned int); void init(); void proc(); void request(fopAc_ac_c*, u8, f32, f32, f32, s16, int); - s32 getCatghTarget() { return convPId(mCatghTargetID); } + fopAc_ac_c* getCatghTarget() { return convPId(mCatghTargetID); } u8 getChangeItem() { return mChangeItem; } private: - /* 0x00 */ void* field_0x0; - /* 0x04 */ f32 field_0x4; + /* 0x00 */ u32 field_0x0; + /* 0x04 */ int field_0x4; /* 0x08 */ f32 field_0x8; /* 0x0C */ u8 field_0xc; /* 0x0D */ u8 field_0xd; @@ -47,11 +47,7 @@ private: class dAttParam_c { public: - dAttParam_c() {} - /* 80070038 */ dAttParam_c(s32); - -private: - /* 0x00 */ u16 field_0x0; + /* 0x00 */ u16 mFlags; /* 0x04 */ f32 field_0x4; /* 0x08 */ f32 field_0x8; /* 0x0C */ f32 field_0xc; @@ -66,21 +62,23 @@ private: /* 0x30 */ f32 mAttnCursorOffsetY; /* 0x34 */ u8 mAttnCursorAppearFrames; /* 0x35 */ u8 mAttnCursorDisappearFrames; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3c; public: - /* 80070110 */ virtual ~dAttParam_c(); - /* 0x38 vtable */ + dAttParam_c() {} + /* 80070038 */ dAttParam_c(s32); -private: - /* 0x3C */ f32 mSelCursorAnmSpeed; - /* 0x40 */ f32 mAttnCursorAnmSpeed; - /* 0x44 */ u32 mDispPosX; - /* 0x48 */ u32 mDispPosY; -}; // Size = 0x4C + /* 80070110 */ virtual ~dAttParam_c(); + + bool CheckFlag(u16 flag) { return mFlags & flag; } + + /* 0x40 vtable */ +}; // Size: 0x44 class dAttLook_c { public: - /* 80073CA4 */ void convPId(unsigned int); + /* 80073CA4 */ fopAc_ac_c* convPId(unsigned int); /* 80073CD4 */ void init(); /* 80073CEC */ void proc(); /* 80073D08 */ void request(fopAc_ac_c*, f32, f32, f32, s16, int); @@ -96,10 +94,11 @@ class dAttList_c { public: /* 800304D0 */ ~dAttList_c() {} /* 8003050C */ dAttList_c() {} - /* 80073864 */ void getActor(); + /* 80073864 */ fopAc_ac_c* getActor(); /* 80073898 */ void setActor(fopAc_ac_c*); -private: + u32 getPid() { return mActorID; } + /* 0x00 */ f32 mWeight; /* 0x04 */ f32 mDistance; /* 0x08 */ cSAngle mAngle; @@ -117,15 +116,15 @@ public: /* 800732B0 */ void draw(cXyz&, f32 (*)[4]); /* 0x000 */ J3DModel* mModel[2]; - /* 0x008 */ mDoExt_bckAnm bckAnm[2]; - /* 0x040 */ mDoExt_bpkAnm bpkAnm[2]; - /* 0x070 */ mDoExt_brkAnm brkAnm[2]; - /* 0x0A0 */ mDoExt_brkAnm brkAnm2[2]; - /* 0x0D0 */ mDoExt_btkAnm btkAnm[2]; - /* 0x100 */ mDoExt_bckAnm bckAnm2; - /* 0x11C */ mDoExt_bpkAnm bpkAnm2; - /* 0x134 */ mDoExt_brkAnm brkAnm3; - /* 0x14C */ mDoExt_btkAnm btkAnm2; + /* 0x008 */ mDoExt_bckAnm mNoticeCursorBck[2]; + /* 0x040 */ mDoExt_bpkAnm mNoticeCursorBpk[2]; + /* 0x070 */ mDoExt_brkAnm mNoticeCursorBrk[2]; + /* 0x0A0 */ mDoExt_brkAnm mNoticeCursor02Brk[2]; + /* 0x0D0 */ mDoExt_btkAnm mNoticeCursorBtk[2]; + /* 0x100 */ mDoExt_bckAnm mImpactBck; + /* 0x11C */ mDoExt_bpkAnm mImpactBpk; + /* 0x134 */ mDoExt_brkAnm mImpactBrk; + /* 0x14C */ mDoExt_btkAnm mImpactBtk; /* 0x164 */ cXyz field_0x164; /* 0x170 */ u8 field_0x170; /* 0x171 */ u8 field_0x171; @@ -152,45 +151,56 @@ struct dist_entry { u32 field_0x18; }; // Size: 0x1C +struct type_tbl_entry { + s16 field_0x0; + u16 field_0x2; +}; + class dAttention_c { public: + enum EState { + ST_NONE, + ST_LOCK, + ST_RELEASE, + }; + dAttention_c() {} /* 80070198 */ dAttention_c(fopAc_ac_c*, u32); /* 80070774 */ ~dAttention_c(); - /* 80070844 */ void GetLockonList(s32); - /* 80070880 */ void getActionBtnB(); - /* 80070974 */ void getActionBtnXY(); - /* 80070A70 */ void chkAttMask(u32, u32); - /* 80070E90 */ void calcWeight(int, fopAc_ac_c*, f32, s16, s16, u32*); + /* 80070844 */ dAttList_c* GetLockonList(s32); + /* 80070880 */ dAttList_c* getActionBtnB(); + /* 80070974 */ dAttList_c* getActionBtnXY(); + /* 80070A70 */ int chkAttMask(u32, u32); + /* 80070E90 */ f32 calcWeight(int, fopAc_ac_c*, f32, s16, s16, u32*); /* 800710C0 */ void setList(int, fopAc_ac_c*, f32, f32, cSAngle, u32); /* 80071240 */ void initList(u32); - /* 800713CC */ void makeList(); + /* 800713CC */ int makeList(); /* 80071424 */ void setOwnerAttentionPos(); - /* 80071488 */ void SelectAttention(fopAc_ac_c*); + /* 80071488 */ int SelectAttention(fopAc_ac_c*); /* 800716B8 */ void sortList(); /* 800718A4 */ void stockAttention(); - /* 80071960 */ void nextAttention(); - /* 80071A68 */ void freeAttention(); - /* 80071A98 */ void chaseAttention(); - /* 80071CC0 */ void EnemyDistance(fopAc_ac_c*); + /* 80071960 */ fopAc_ac_c* nextAttention(); + /* 80071A68 */ int freeAttention(); + /* 80071A98 */ bool chaseAttention(); + /* 80071CC0 */ f32 EnemyDistance(fopAc_ac_c*); /* 80071DEC */ void runSoundProc(); /* 80071E84 */ void runDrawProc(); /* 800720F4 */ void runDebugDisp(); /* 800720F8 */ void checkButton(); - /* 800722A0 */ void triggerProc(); - /* 800722EC */ void lostCheck(); + /* 800722A0 */ bool triggerProc(); + /* 800722EC */ int lostCheck(); /* 80072344 */ void judgementStatus4Hold(); /* 800725F0 */ void judgementStatus4Switch(); - /* 80072924 */ void Run(); + /* 80072924 */ int Run(); /* 80072BD4 */ void Draw(); /* 80072D80 */ void lockSoundStart(u32); - /* 8007353C */ void LockonTarget(s32); - /* 800735DC */ void LockonReleaseDistanse(); - /* 800736CC */ void LockonTargetPId(s32); - /* 80073734 */ void ActionTarget(s32); - /* 8007378C */ void CheckObjectTarget(s32); + /* 8007353C */ fopAc_ac_c* LockonTarget(s32); + /* 800735DC */ f32 LockonReleaseDistanse(); + /* 800736CC */ u32 LockonTargetPId(s32); + /* 80073734 */ fopAc_ac_c* ActionTarget(s32); + /* 8007378C */ fopAc_ac_c* CheckObjectTarget(s32); /* 800737E4 */ bool LockonTruth(); - /* 80073838 */ void checkDistance(cXyz*, s16, cXyz*, f32, f32, f32, f32); + /* 80073838 */ int checkDistance(cXyz*, s16, cXyz*, f32, f32, f32, f32); /* 8016E424 */ void LockEdge(); /* 80182994 */ void GetCheckObjectCount(); /* 80182AD0 */ void keepLock(int); @@ -199,6 +209,8 @@ public: dAttCatch_c& getCatghTarget() { return mCatghTarget; } u8 getCatchChgItem() { return mCatghTarget.getChangeItem(); } BOOL chkFlag(u32 flag) { return mFlags & flag; } + void setFlag(u32 flag) { mFlags |= flag; } + void clrFlag(u32 flag) { mFlags &= ~flag; } s8 Lockon() { /* s32 chk = true; if (!LockonTruth() && !chkFlag(0x20000000)) { @@ -209,28 +221,28 @@ public: return !LockonTruth() && !chkFlag(0x20000000); } - static u8 loc_type_tbl[12]; - static u8 act_type_tbl[20]; + static type_tbl_entry loc_type_tbl[3]; + static type_tbl_entry act_type_tbl[5]; static dist_entry dist_table[234]; - static u32 loc_type_num; - static u32 act_type_num; - static u32 chk_type_tbl; - static u32 chk_type_num; + static int loc_type_num; + static int act_type_num; + static type_tbl_entry chk_type_tbl[1]; + static int chk_type_num; public: /* 0x000 */ fopAc_ac_c* mpPlayer; /* 0x004 */ u32 mLockTargetID; /* 0x008 */ dAttDraw_CallBack_c mpDrawCallback; - /* 0x00C */ u32 field_0xc; + /* 0x00C */ u32 mPadNo; /* 0x010 */ u32 field_0x10; /* 0x014 */ u8 field_0x14[4]; /* 0x018 */ JKRSolidHeap* heap; - /* 0x01C */ cXyz field_0x1c; + /* 0x01C */ cXyz mDrawAttnPos; /* 0x028 */ dAttDraw_c draw[2]; - /* 0x318 */ int field_0x318; - /* 0x31C */ cXyz field_0x31c; - /* 0x328 */ u8 field_0x328; - /* 0x329 */ u8 field_0x329; + /* 0x318 */ u32 mTargetActorID; + /* 0x31C */ cXyz mOwnerAttnPos; + /* 0x328 */ s8 field_0x328; + /* 0x329 */ u8 mAttnStatus; /* 0x32A */ u8 field_0x32a; /* 0x32B */ u8 field_0x32b; /* 0x32C */ u8 field_0x32c; @@ -248,22 +260,17 @@ public: /* 0x3E0 */ dAttList_c mActionList[4]; /* 0x430 */ int mActionCount; /* 0x434 */ int mActionOffset; - /* 0x438 */ dAttList_c field_0x438[4]; + /* 0x438 */ dAttList_c mCheckObjectList[4]; /* 0x488 */ int mCheckObjectCount; - /* 0x48C */ int field_0x48c; + /* 0x48C */ int mCheckObjectOffset; /* 0x490 */ dAttHint_c mZHintTarget; /* 0x49C */ dAttCatch_c mCatghTarget; /* 0x4B4 */ dAttLook_c mLookTarget; - /* 0x4C4 */ int field_0x4c4; - /* 0x4C8 */ u8 field_0x4c8; - /* 0x4C9 */ u8 field_0x4c9; - /* 0x4CA */ u8 field_0x4ca; - /* 0x4CB */ u8 field_0x4cb; - /* 0x4CC */ u8 field_0x4cc; - /* 0x4CD */ u8 field_0x4cd; - /* 0x4CE */ u8 field_0x4ce; - /* 0x4CF */ u8 field_0x4cf; - /* 0x4D0 */ dAttParam_c mAttParam; + /* 0x4C4 */ int mAttnBlockTimer; + /* 0x4C8 */ dAttParam_c mAttParam; + /* 0x50C */ u8 field_0x50c[0x514 - 0x50c]; + /* 0x514 */ u32 mEnemyActorID; + /* 0x518 */ f32 mEnemyDist; }; // Size: 0x51C STATIC_ASSERT(sizeof(dAttention_c) == 0x51C); diff --git a/include/d/d_demo.h b/include/d/d_demo.h index 584e24cc858..15d09fb5cda 100644 --- a/include/d/d_demo.h +++ b/include/d/d_demo.h @@ -52,15 +52,15 @@ public: class dDemo_actor_c : public JStage::TActor { public: /* 80038020 */ dDemo_actor_c(); - /* 80038128 */ void getActor(); + /* 80038128 */ fopAc_ac_c* getActor(); /* 8003815C */ void setActor(fopAc_ac_c*); - /* 8003819C */ void getPrm_Morf(); + /* 8003819C */ f32 getPrm_Morf(); /* 80038338 */ void getDemoIDData(int*, int*, int*, u16*, u8*); /* 80038098 */ virtual ~dDemo_actor_c(); /* 800387EC */ virtual void JSGSetData(u32, void const*, u32); - /* 8003A05C */ virtual void JSGFindNodeID(char const*) const; - /* 8003A088 */ virtual void JSGGetNodeTransformation(u32, f32 (*)[4]) const; + /* 8003A05C */ virtual s32 JSGFindNodeID(char const*) const; + /* 8003A088 */ virtual int JSGGetNodeTransformation(u32, f32 (*)[4]) const; /* 8003A0D8 */ virtual void JSGGetTranslation(Vec*) const; /* 80038920 */ virtual void JSGSetTranslation(Vec const&); /* 8003A0F4 */ virtual void JSGGetScaling(Vec*) const; @@ -77,6 +77,16 @@ public: /* 8003A0D0 */ virtual f32 JSGGetTextureAnimationFrameMax() const; void setModel(J3DModel* p_model) { mModel = p_model; } + u8 checkEnable(u16 flag) { return mFlags & flag; } + void onEnable(u16 flag) { mFlags |= flag; } + cXyz& getTrans() { return mTrans; } + cXyz& getScale() { return mScale; } + csXyz& getRatate() { return mRotate; } + u32 getAnmId() { return mAnmId; } + u32 getOldAnmId() { return mOldAnmId; } + void setOldAnmId(u32 id) { mOldAnmId = id; } + void setAnmFrameMax(f32 max) { mAnmFrameMax = max; } + f32 getAnmFrame() { return mAnmFrame; } private: /* 0x04 */ u16 mFlags; @@ -136,6 +146,8 @@ public: /* 80038EA8 */ virtual void JSGSetAngleAttenuation(f32, GXSpotFn); /* 80038EC0 */ virtual void JSGSetDirection(Vec const&); + void onEnable(u8 flag) { mFlags |= flag; } + private: /* 0x04 */ u8 mFlags; /* 0x08 */ JStage::TELight mLightType; @@ -161,6 +173,8 @@ public: /* 80038F10 */ virtual void JSGSetEndZ(f32); /* 80038F24 */ virtual void JSGSetColor(GXColor); + void onEnable(u8 flag) { mFlags |= flag; } + private: /* 0x04 */ u8 mFlags; /* 0x05 */ u8 mFogType; @@ -193,6 +207,8 @@ public: /* 80038D84 */ virtual f32 JSGGetViewRoll() const; /* 80038DDC */ virtual void JSGSetViewRoll(f32); + void onEnable(u8 flag) { mFlags |= flag; } + private: /* 0x04 */ u8 mFlags; /* 0x08 */ f32 mProjNear; @@ -214,6 +230,8 @@ public: /* 800394C8 */ virtual ~dDemo_ambient_c(); /* 80038DF0 */ virtual void JSGSetColor(GXColor); + void onEnable(u8 flag) { mFlags |= flag; } + private: /* 0x04 */ u8 mFlags; /* 0x05 */ GXColor mColor; @@ -255,6 +273,8 @@ public: static s32 getMode() { return m_mode; } static JStudio::stb::TControl* getControl() { return m_control; } static bool isStatus(u32 status) { return m_status & status; } + static void onStatus(u32 status) { m_status |= status; } + static void offStatus(u32 status) { m_status &= ~status; } static void setBranchData(const u8* p_data) { m_branchData = p_data; } static s16 m_branchId; diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 256a1f1b109..423383e051e 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -226,6 +226,7 @@ public: /* 80051ADC */ void setScissor(f32, f32, f32, f32); void setCameraID(int id) { mCameraID = id; } + s8 getCameraID() { return mCameraID; } void setMode(int mode) { mMode = mode; } f32 getViewPort() { return mXOrig; } @@ -304,6 +305,8 @@ public: void setXluListItem3D() { setXluDrawList(mDrawBuffers[DB_XLU_LIST_ITEM3D]); } void setXluListBG() { setXluDrawList(mDrawBuffers[DB_XLU_LIST_BG]); } void setOpaListBG() { setOpaDrawList(mDrawBuffers[DB_OPA_LIST_BG]); } + void setOpaList3Dlast() { setOpaDrawList(mDrawBuffers[DB_LIST_3D_LAST]); } + void setXluList3Dlast() { setXluDrawList(mDrawBuffers[DB_LIST_3D_LAST]); } void setXluList2DScreen() { setXluDrawList(mDrawBuffers[DB_LIST_2D_SCREEN]); } void peekZdata() { mPeekZ.peekData(); } diff --git a/include/d/d_lib.h b/include/d/d_lib.h index 121bff182e6..0f87597d275 100644 --- a/include/d/d_lib.h +++ b/include/d/d_lib.h @@ -2,6 +2,7 @@ #define D_D_LIB_H #include "dolphin/types.h" +#include "dolphin/os/OS.h" struct JKRAramArchive; u32 dLib_getExpandSizeFromAramArchive(JKRAramArchive* arc, char const* resName); @@ -71,12 +72,13 @@ struct CSTControl : public STControl { }; struct dLib_time_c { - /* 80032804 */ void getTime(); + /* 80032804 */ static OSTime getTime(); /* 80032880 */ static void stopTime(); /* 800328BC */ static void startTime(); - static u8 m_diffTime[4]; - static u8 m_stopTime[4]; + static OSTime m_diffTime; + static OSTime m_stopTime; + static bool m_timeStopped; }; #endif /* D_D_LIB_H */ diff --git a/include/d/msg/d_msg_object.h b/include/d/msg/d_msg_object.h index dbf173e88bb..b42daaa3bbe 100644 --- a/include/d/msg/d_msg_object.h +++ b/include/d/msg/d_msg_object.h @@ -273,6 +273,10 @@ inline void dMsgObject_readMessageGroup(mDoDvdThd_mountXArchive_c** param_0) { dMsgObject_getMsgObjectClass()->readMessageGroup(param_0); } +inline void dMsgObject_setDemoMessage(u32 param_0) { + dMsgObject_getMsgObjectClass()->setDemoMessage(param_0); +} + inline void dMsgObject_setShopWaitTimer(u8 timer) { dMsgObject_c::setShopWaitTimer(timer); } diff --git a/include/dolphin/base/PPCArch.h b/include/dolphin/base/PPCArch.h index 4af0a94b338..d721eb225c8 100644 --- a/include/dolphin/base/PPCArch.h +++ b/include/dolphin/base/PPCArch.h @@ -3,4 +3,12 @@ #include "dolphin/types.h" +union FpscrUnion { + f64 f; + struct { + u32 fpscr_pad; + u32 fpscr; + } u; +}; + #endif /* PPCARCH_H */ diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 77f98548aa2..a7fe695e1d9 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -26,6 +26,7 @@ public: void setMapToolId(u8 id) { mMapToolId = id; } void setEventId(s16 id) { mEventId = id; } void setCondition(u16 condition) { mCondition = condition; } + u16 getCondition() { return mCondition; } void setArchiveName(char* name) { mArchiveName = name; } u8 getMapToolId() { return mMapToolId; } s16 getEventId() { return mEventId; } diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index fe95da62591..8e2f27af0e5 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -47,8 +47,12 @@ inline void mDoAud_bgmSetSwordUsing(s32 id) { Z2AudioMgr::getInterface()->mSeqMgr.bgmSetSwordUsing(id); } -inline void mDoAud_bgmStart(u32 id) { - Z2AudioMgr::getInterface()->mSeqMgr.bgmStart(id, 0, 0); +inline void mDoAud_bgmStart(u32 i_bgmID) { + Z2AudioMgr::getInterface()->mSeqMgr.bgmStart(i_bgmID, 0, 0); +} + +inline void mDoAud_bgmNowBattle(f32 param_0) { + Z2AudioMgr::getInterface()->mSeqMgr.bgmNowBattle(param_0); } inline void mDoAud_bgmStreamPrepare(u32 param_0) { @@ -75,13 +79,13 @@ inline void mDoAud_setInDarkness(bool state) { Z2AudioMgr::getInterface()->mSceneMgr.setInDarkness(state); } -inline void mDoAud_seStart(u32 sfx_id, const Vec* param_1, u32 param_2, s8 param_3) { - Z2AudioMgr::getInterface()->mSeMgr.seStart(sfx_id, param_1, param_2, param_3, 1.0f, 1.0f, -1.0f, +inline void mDoAud_seStart(u32 i_sfxID, const Vec* i_sePos, u32 param_2, s8 i_reverb) { + Z2AudioMgr::getInterface()->mSeMgr.seStart(i_sfxID, i_sePos, param_2, i_reverb, 1.0f, 1.0f, -1.0f, -1.0f, 0); } -inline void i_mDoAud_seStartLevel(u32 sfx_id, const Vec* param_1, u32 param_2, s8 param_3) { - Z2AudioMgr::getInterface()->mSeMgr.seStartLevel(sfx_id, param_1, param_2, param_3, 1.0f, 1.0f, +inline void i_mDoAud_seStartLevel(u32 i_sfxID, const Vec* i_sePos, u32 param_2, s8 i_reverb) { + Z2AudioMgr::getInterface()->mSeMgr.seStartLevel(i_sfxID, i_sePos, param_2, i_reverb, 1.0f, 1.0f, -1.0f, -1.0f, 0); } diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 1d932e8347d..7af5266ac03 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -237,9 +237,11 @@ public: /* 8000FAE8 */ virtual ~mDoExt_morf_c(); void setPlaySpeed(f32 speed) { mFrameCtrl.setRate(speed); } + void setFrame(f32 frame) { mFrameCtrl.setFrame((s16)frame); } f32 getPlaySpeed() { return mFrameCtrl.getRate(); } f32 getFrame() { return mFrameCtrl.getFrame(); } + f32 getEndFrame() { return mFrameCtrl.getEnd(); } bool isStop() { bool stopped = true; @@ -309,6 +311,8 @@ public: /* 8000FD10 */ virtual ~mDoExt_McaMorf(); /* 80010074 */ virtual void calc(); + J3DModel* getModel() { return mpModel; } + private: /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; diff --git a/include/rel/d/a/d_a_movie_player/d_a_movie_player.h b/include/rel/d/a/d_a_movie_player/d_a_movie_player.h index 848f6787a1a..8461581f8bf 100644 --- a/include/rel/d/a/d_a_movie_player/d_a_movie_player.h +++ b/include/rel/d/a/d_a_movie_player/d_a_movie_player.h @@ -4,14 +4,12 @@ #include "dolphin/types.h" #include "f_op/f_op_actor.h" -typedef void (*daMP_Func)(); - class daMP_c : public fopAc_ac_c { public: - /* 80031AD0 */ static void daMP_c_THPPlayerPlay(); - /* 80031B24 */ void daMP_c_THPPlayerPause(); - /* 80031A78 */ void daMP_c_Get_MovieRestFrame(); - /* 80031AA4 */ void daMP_c_Set_PercentMovieVolume(f32); + /* 80031AD0 */ static int daMP_c_THPPlayerPlay(); + /* 80031B24 */ static void daMP_c_THPPlayerPause(); + /* 80031A78 */ static int daMP_c_Get_MovieRestFrame(); + /* 80031AA4 */ static void daMP_c_Set_PercentMovieVolume(f32); /* 80878BB8 */ void daMP_c_Get_arg_demoNo(); /* 80878C04 */ void daMP_c_Get_arg_movieNo(); /* 80878C28 */ void daMP_c_Init(); @@ -24,15 +22,15 @@ public: /* 80878F38 */ void daMP_c_Callback_Main(daMP_c*); /* 80878F70 */ void daMP_c_Callback_Draw(daMP_c*); - static u8 m_myObj[4]; + static daMP_c* m_myObj; private: - /* 0x568 */ daMP_Func mpGetMovieRestFrame; - /* 0x56C */ daMP_Func mpSetPercentMovieVol; - /* 0x570 */ daMP_Func mpTHPGetTotalFrame; - /* 0x574 */ daMP_Func mpTHPPlay; - /* 0x578 */ daMP_Func mpTHPStop; - /* 0x57C */ daMP_Func mpTHPPause; + /* 0x568 */ int (*mpGetMovieRestFrame)(void); + /* 0x56C */ void (*mpSetPercentMovieVol)(f32); + /* 0x570 */ int (*mpTHPGetTotalFrame)(void); + /* 0x574 */ int (*mpTHPPlay)(void); + /* 0x578 */ void (*mpTHPStop)(void); + /* 0x57C */ int (*mpTHPPause)(void); }; // Size: 0x580 #endif /* D_A_MOVIE_PLAYER_H */ diff --git a/libs/MSL_C/MSL_Common/Src/abort_exit.c b/libs/MSL_C/MSL_Common/Src/abort_exit.c index 4dc61f92d31..4685d60803c 100644 --- a/libs/MSL_C/MSL_Common/Src/abort_exit.c +++ b/libs/MSL_C/MSL_Common/Src/abort_exit.c @@ -24,8 +24,8 @@ void __destroy_global_chain(); void __end_critical_region(); void __begin_critical_region(); void __kill_critical_regions(); -void raise(); -SECTION_DTORS10 extern void* const __destroy_global_chain_reference; +void raise(int); +SECTION_DTORS10 extern void (*__destroy_global_chain_reference[])(void); // // Declarations: @@ -33,7 +33,7 @@ SECTION_DTORS10 extern void* const __destroy_global_chain_reference; /* ############################################################################################## */ /* 8044D440-8044D540 07A160 0100+00 2/2 0/0 0/0 .bss __atexit_funcs */ -static u8 __atexit_funcs[256]; +static void (*__atexit_funcs[64])(void); /* ############################################################################################## */ /* 804519A0-804519A8 000EA0 0008+00 0/0 1/1 0/0 .sbss None */ @@ -41,34 +41,71 @@ extern u8 data_804519A0[8]; u8 data_804519A0[8]; /* 8045199C-804519A0 000E9C 0004+00 2/2 0/0 0/0 .sbss __console_exit */ -static u8 __console_exit[4]; +static void (*__console_exit)(void); /* 80451998-8045199C 000E98 0004+00 1/1 1/1 0/0 .sbss __stdio_exit */ -extern u8 __stdio_exit[4]; -u8 __stdio_exit[4]; +extern void (*__stdio_exit)(void); +void (*__stdio_exit)(void); /* 80451994-80451998 000E94 0004+00 2/2 0/0 0/0 .sbss __atexit_curr_func */ -static u8 __atexit_curr_func[4]; +static int __atexit_curr_func; /* 80451990-80451994 000E90 0004+00 2/2 0/0 0/0 .sbss __aborting */ -static u8 __aborting[4]; +static int __aborting; /* 803629CC-80362ABC 35D30C 00F0+00 0/0 2/2 0/0 .text exit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void exit() { - nofralloc -#include "asm/MSL_C/MSL_Common/Src/abort_exit/exit.s" +void exit(int status) { + int i; + void (**dtor)(void); + + if (!__aborting) { + __begin_critical_region(0); + __end_critical_region(0); + __destroy_global_chain(); + + dtor = __destroy_global_chain_reference; + while (*dtor != NULL) { + (*dtor)(); + dtor++; + } + + if (__stdio_exit != NULL) { + __stdio_exit(); + __stdio_exit = NULL; + } + } + + __begin_critical_region(0); + while (__atexit_curr_func > 0) + __atexit_funcs[--__atexit_curr_func](); + + __end_critical_region(0); + __kill_critical_regions(); + + if (__console_exit != NULL) { + __console_exit(); + __console_exit = NULL; + } + + _ExitProcess(); } -#pragma pop /* 80362ABC-80362B58 35D3FC 009C+00 0/0 9/9 0/0 .text abort */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void abort() { - nofralloc -#include "asm/MSL_C/MSL_Common/Src/abort_exit/abort.s" +void abort(void) { + raise(1); + __aborting = 1; + __begin_critical_region(0); + + while (__atexit_curr_func > 0) + __atexit_funcs[--__atexit_curr_func](); + + __end_critical_region(0); + __kill_critical_regions(); + + if (__console_exit != NULL) { + __console_exit(); + __console_exit = NULL; + } + + _ExitProcess(); } -#pragma pop diff --git a/libs/dolphin/base/Makefile b/libs/dolphin/base/Makefile index 947eb4c8084..96c4fd0c8e6 100644 --- a/libs/dolphin/base/Makefile +++ b/libs/dolphin/base/Makefile @@ -3,12 +3,14 @@ # LIBBASE_A_CPP_FILES := \ - libs/dolphin/base/PPCArch.cpp \ + libs/dolphin/base/PPCArch.c \ LIBBASE_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/base/PPCArch.o \ LIBBASE_A_CFLAGS := \ + -O4,p \ + -lang=c \ LIBBASE_A_LDFLAGS := \ -nodefaults \ @@ -16,14 +18,16 @@ LIBBASE_A_LDFLAGS := \ -proc gekko \ -linkmode moreram \ +$(BUILD_DIR)/libs/dolphin/base/PPCArch.o: MWCC_VERSION := 1.2.5 + $(BUILD_DIR)/libbase.a: $(LIBBASE_A_O_FILES) @echo linking... $(BUILD_DIR)/libbase.a @echo $(LIBBASE_A_O_FILES) > build/LIBBASE_A_ofiles @$(LD) -xm l $(LIBBASE_A_LDFLAGS) -o $(BUILD_DIR)/libbase.a @build/LIBBASE_A_ofiles -$(BUILD_DIR)/libs/dolphin/base/%.o: libs/dolphin/base/%.cpp +$(BUILD_DIR)/libs/dolphin/base/%.o: libs/dolphin/base/%.c @mkdir -p $(@D) @echo building... $< - @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).cpp - @$(CC) $(CFLAGS) $(LIBBASE_A_CFLAGS) -c -o $@ $(basename $@).cpp + @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c + @$(CC) $(CFLAGS) $(LIBBASE_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/base/PPCArch.cpp b/libs/dolphin/base/PPCArch.c similarity index 84% rename from libs/dolphin/base/PPCArch.cpp rename to libs/dolphin/base/PPCArch.c index 379badcf1f8..bc7319b47bf 100644 --- a/libs/dolphin/base/PPCArch.cpp +++ b/libs/dolphin/base/PPCArch.c @@ -11,28 +11,28 @@ // Forward References: // -extern "C" void PPCMfmsr(); -extern "C" void PPCMtmsr(); -extern "C" void PPCMfhid0(); -extern "C" void PPCMthid0(); -extern "C" void PPCMfl2cr(); -extern "C" void PPCMtl2cr(); -extern "C" void PPCMtdec(); -extern "C" void PPCSync(); -extern "C" void PPCHalt(); -extern "C" void PPCMtmmcr0(); -extern "C" void PPCMtmmcr1(); -extern "C" void PPCMtpmc1(); -extern "C" void PPCMtpmc2(); -extern "C" void PPCMtpmc3(); -extern "C" void PPCMtpmc4(); -extern "C" void PPCMffpscr(); -extern "C" void PPCMtfpscr(); -extern "C" void PPCMfhid2(); -extern "C" void PPCMthid2(); -extern "C" void PPCMtwpar(); -extern "C" void PPCDisableSpeculation(); -extern "C" void PPCSetFpNonIEEEMode(); +extern void PPCMfmsr(); +extern void PPCMtmsr(); +extern void PPCMfhid0(); +extern void PPCMthid0(); +extern void PPCMfl2cr(); +extern void PPCMtl2cr(); +extern void PPCMtdec(); +extern void PPCSync(); +extern void PPCHalt(); +extern void PPCMtmmcr0(); +extern void PPCMtmmcr1(); +extern void PPCMtpmc1(); +extern void PPCMtpmc2(); +extern void PPCMtpmc3(); +extern void PPCMtpmc4(); +extern u32 PPCMffpscr(); +extern void PPCMtfpscr(); +extern void PPCMfhid2(); +extern void PPCMthid2(); +extern void PPCMtwpar(); +extern void PPCDisableSpeculation(); +extern void PPCSetFpNonIEEEMode(); // // External References: @@ -115,14 +115,17 @@ asm void PPCSync() { } /* 80339D00-80339D14 334640 0014+00 0/0 7/7 0/0 .text PPCHalt */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void PPCHalt() { +asm void PPCHalt(void) { + // clang-format off nofralloc -#include "asm/dolphin/base/PPCArch/PPCHalt.s" + sync +_spin: + nop + li r3, 0 + nop + b _spin + // clang-format on } -#pragma pop /* 80339D14-80339D1C -00001 0008+00 0/0 0/0 0/0 .text PPCMtmmcr0 */ asm void PPCMtmmcr0() { @@ -182,7 +185,7 @@ asm void PPCMtpmc4() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void PPCMffpscr() { +asm u32 PPCMffpscr() { nofralloc #include "asm/dolphin/base/PPCArch/PPCMffpscr.s" } diff --git a/rel/d/a/d_a_arrow/d_a_arrow.cpp b/rel/d/a/d_a_arrow/d_a_arrow.cpp index de09620152a..e4e0cf05ba2 100644 --- a/rel/d/a/d_a_arrow/d_a_arrow.cpp +++ b/rel/d/a/d_a_arrow/d_a_arrow.cpp @@ -518,7 +518,7 @@ extern "C" extern u32 __float_nan; extern "C" extern u32 __float_max; extern "C" f32 mWaterY__11fopAcM_wt_c[1 + 1 /* padding */]; extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; -extern "C" extern u8 struct_80450D88[4]; +extern "C" extern u8 m_count__9daArrow_c[4]; extern "C" u8 mParticleTracePCB__13dPa_control_c[4 + 4 /* padding */]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" void __register_global_object(); diff --git a/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist.cpp b/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist.cpp index 1bdccecf6b1..d870cfe1888 100644 --- a/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist.cpp +++ b/rel/d/a/tag/d_a_tag_mist/d_a_tag_mist.cpp @@ -77,7 +77,7 @@ extern "C" extern void* g_fopAc_Method[8]; extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" u8 now__14mDoMtx_stack_c[48]; extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 struct_80450DC0[4]; +extern "C" extern u8 mPlayerNo__11daTagMist_c[4]; // // Declarations: diff --git a/src/d/com/d_com_static.cpp b/src/d/com/d_com_static.cpp index b731220c6df..5464fc52885 100644 --- a/src/d/com/d_com_static.cpp +++ b/src/d/com/d_com_static.cpp @@ -4,11 +4,13 @@ // #include "d/com/d_com_static.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_demo.h" #include "dol2asm.h" #include "dolphin/types.h" -#include "rel/d/a/tag/d_a_tag_magne/d_a_tag_magne.h" +#include "rel/d/a/d_a_movie_player/d_a_movie_player.h" #include "rel/d/a/obj/d_a_obj_carry/d_a_obj_carry.h" -#include "d/com/d_com_inf_game.h" +#include "rel/d/a/tag/d_a_tag_magne/d_a_tag_magne.h" // // Types: @@ -27,11 +29,13 @@ struct daTagStream_c { }; struct daTagMist_c { - /* 80031CF0 */ void getPlayerNo(); + /* 80031CF0 */ static u8 getPlayerNo(); + + static u8 mPlayerNo; }; struct daSetBgObj_c { - /* 80031870 */ void getArcName(fopAc_ac_c*); + /* 80031870 */ static const char* getArcName(fopAc_ac_c*); }; struct daObjMovebox { @@ -48,15 +52,6 @@ struct daMirror_c { static u8 m_myObj[4]; }; -struct daMP_c { - /* 80031A78 */ void daMP_c_Get_MovieRestFrame(); - /* 80031AA4 */ void daMP_c_Set_PercentMovieVolume(f32); - /* 80031AD0 */ void daMP_c_THPPlayerPlay(); - /* 80031B24 */ void daMP_c_THPPlayerPause(); - - static u8 m_myObj[4]; -}; - struct daGrass_c { /* 800319C8 */ void deleteRoomGrass(int); /* 80031A20 */ void deleteRoomFlower(int); @@ -67,7 +62,7 @@ struct daGrass_c { }; struct daDsh_c { - static u32 OPEN_SIZE; + static f32 OPEN_SIZE; static f32 OPEN_ACCEL; static f32 OPEN_SPEED; static f32 OPEN_BOUND_SPEED; @@ -86,10 +81,6 @@ struct dFlower_packet_c { static u8 m_deleteRoom[12]; }; -struct dDemo_c { - static u8 m_status[4]; -}; - // // Forward References: // @@ -205,6 +196,7 @@ extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */]; extern "C" u8 m_status__7dDemo_c[4]; +extern "C" extern u8 mPlayerNo__11daTagMist_c[4]; // // Declarations: @@ -212,67 +204,102 @@ extern "C" u8 m_status__7dDemo_c[4]; /* 80030F14-80030FBC 02B854 00A8+00 1/1 0/0 0/0 .text * set__Q27daSus_c6data_cFScRC4cXyzRC4cXyzUcUcUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSus_c::data_c::set(s8 param_0, cXyz const& param_1, cXyz const& param_2, u8 param_3, - u8 param_4, u8 param_5) { - nofralloc -#include "asm/d/com/d_com_static/set__Q27daSus_c6data_cFScRC4cXyzRC4cXyzUcUcUc.s" +void daSus_c::data_c::set(s8 i_roomNo, cXyz const& param_1, cXyz const& param_2, u8 param_3, + u8 param_4, u8 i_type) { + mRoomNo = i_roomNo; + field_0x8.set(param_1.x - param_2.x, param_1.y, param_1.z - param_2.z); + field_0x14.set(param_1.x + param_2.x, param_1.y + param_2.y, param_1.z + param_2.z); + field_0x2 = param_3; + field_0x1 = param_4 != 0; + field_0x3 = isSwitch() == false; + mType = i_type; } -#pragma pop /* 80030FBC-80030FCC 02B8FC 0010+00 3/3 0/0 0/0 .text reset__Q27daSus_c6data_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSus_c::data_c::reset() { - nofralloc -#include "asm/d/com/d_com_static/reset__Q27daSus_c6data_cFv.s" +daSus_c::data_c* daSus_c::data_c::reset() { + mRoomNo = -1; + return mpNext; } -#pragma pop /* 80030FCC-80031038 02B90C 006C+00 2/2 0/0 0/0 .text isSwitch__Q27daSus_c6data_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSus_c::data_c::isSwitch() { - nofralloc -#include "asm/d/com/d_com_static/isSwitch__Q27daSus_c6data_cFv.s" +u8 daSus_c::data_c::isSwitch() { + if (field_0x1 & 1) { + return dComIfGs_isSwitch(field_0x2, mRoomNo); + } else { + return dComIfGs_isSwitch(field_0x2, mRoomNo) == false; + } } -#pragma pop /* 80031038-800310C8 02B978 0090+00 2/2 0/0 0/0 .text check__Q27daSus_c6data_cFRC4cXyz */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSus_c::data_c::check(cXyz const& param_0) { - nofralloc -#include "asm/d/com/d_com_static/check__Q27daSus_c6data_cFRC4cXyz.s" +bool daSus_c::data_c::check(cXyz const& i_pos) { + if (field_0x3 != 0) { + return false; + } + + if ((field_0x8.x <= i_pos.x && i_pos.x <= field_0x14.x) && + (field_0x8.y <= i_pos.y && i_pos.y <= field_0x14.y) && + (field_0x8.z <= i_pos.z && i_pos.z <= field_0x14.z)) { + return true; + } + + return false; } -#pragma pop /* 800310C8-80031150 02BA08 0088+00 1/1 0/0 0/0 .text check__Q27daSus_c6data_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSus_c::data_c::check(fopAc_ac_c* param_0) { - nofralloc -#include "asm/d/com/d_com_static/check__Q27daSus_c6data_cFP10fopAc_ac_c.s" +u8 daSus_c::data_c::check(fopAc_ac_c* i_actor) { + if (field_0x3) { + return 0x80; + } + + u8 tmp = 0x80; + + if (check(i_actor->orig.pos)) { + tmp |= 1; + } + + if (check(i_actor->current.pos)) { + tmp |= 2; + return tmp; + } + + return tmp; } -#pragma pop /* 80031150-80031190 02BA90 0040+00 1/1 0/0 0/0 .text execute__Q27daSus_c6data_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSus_c::data_c::execute() { - nofralloc -#include "asm/d/com/d_com_static/execute__Q27daSus_c6data_cFv.s" +void daSus_c::data_c::execute() { + u8 sw = isSwitch(); + if (sw != field_0x3) { + field_0x3 = sw; + } } -#pragma pop /* 80031190-800311FC 02BAD0 006C+00 1/1 0/0 0/0 .text add__Q27daSus_c6room_cFPQ27daSus_c6data_c */ +// instruction reorder +#ifdef NONMATCHING +void daSus_c::room_c::add(daSus_c::data_c* i_data) { + if (mpData == NULL) { + mpData = i_data; + i_data->setNext(NULL); + return; + } + + if (i_data->getType() == 0) { + i_data->setNext(mpData); + mpData = i_data; + return; + } + + daSus_c::data_c* data1 = mpData; + daSus_c::data_c* data2 = data1->getNext(); + while (data1->getType() == 0 && data2 != NULL) { + data1 = data2; + data2 = data2->getNext(); + } + + i_data->setNext(data1->getNext()); + data1->setNext(i_data); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -281,16 +308,14 @@ asm void daSus_c::room_c::add(daSus_c::data_c* param_0) { #include "asm/d/com/d_com_static/add__Q27daSus_c6room_cFPQ27daSus_c6data_c.s" } #pragma pop +#endif /* 800311FC-80031248 02BB3C 004C+00 0/0 0/0 1/1 .text reset__Q27daSus_c6room_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSus_c::room_c::reset() { - nofralloc -#include "asm/d/com/d_com_static/reset__Q27daSus_c6room_cFv.s" +void daSus_c::room_c::reset() { + while (mpData != NULL && mpData->getType() == 0) { + mpData = mpData->reset(); + } } -#pragma pop /* ############################################################################################## */ /* 80423FF0-80423FFC 050D10 000C+00 1/1 0/0 0/0 .bss @3840 */ @@ -304,9 +329,11 @@ u8 daSus_c::mRoom[256]; /* 80450D88-80450D8C -00001 0004+00 1/1 0/0 2/2 .sbss None */ /* 80450D88 0002+00 data_80450D88 m_count__9daArrow_c */ +extern s16 m_count__9daArrow_c; +s16 m_count__9daArrow_c; + /* 80450D8A 0002+00 data_80450D8A mSetTop__7daSus_c */ -extern u8 struct_80450D88[4]; -u8 struct_80450D88[4]; +s16 daSus_c::mSetTop; /* 80031248-800313BC 02BB88 0174+00 0/0 0/0 1/1 .text newData__7daSus_cFScRC4cXyzRC4cXyzUcUcUc */ #pragma push @@ -360,102 +387,55 @@ asm void daSus_c::execute() { #pragma pop /* 8003160C-80031648 02BF4C 003C+00 0/0 0/0 1/1 .text daNpcMsg_setEvtNum__FUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcMsg_setEvtNum(u8 param_0) { - nofralloc -#include "asm/d/com/d_com_static/daNpcMsg_setEvtNum__FUc.s" +int daNpcMsg_setEvtNum(u8 iEvtNum) { + dComIfGs_setTmpReg(0xFDFF, iEvtNum); + return 1; } -#pragma pop - -/* ############################################################################################## */ -/* 803790B0-803790B0 005710 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_803790B0 = "F_SP103"; -#pragma pop /* 80031648-800316A8 02BF88 0060+00 0/0 0/0 6/6 .text daNpcKakashi_chkSwdTutorialStage__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcKakashi_chkSwdTutorialStage() { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_chkSwdTutorialStage__Fv.s" +BOOL daNpcKakashi_chkSwdTutorialStage() { + return !strcmp(dComIfGp_getStartStageName(), "F_SP103") && dComIfG_play_c::getLayerNo(0) == 8; } -#pragma pop /* 800316A8-800316E0 02BFE8 0038+00 0/0 0/0 3/3 .text daNpcKakashi_setSwdTutorialStep__FUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcKakashi_setSwdTutorialStep(u8 param_0) { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_setSwdTutorialStep__FUc.s" +void daNpcKakashi_setSwdTutorialStep(u8 iEvtNum) { + dComIfGs_setTmpReg(0xFF0F, iEvtNum); } -#pragma pop /* 800316E0-80031718 02C020 0038+00 0/0 1/1 4/4 .text daNpcKakashi_getSwdTutorialStep__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int daNpcKakashi_getSwdTutorialStep() { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_getSwdTutorialStep__Fv.s" +int daNpcKakashi_getSwdTutorialStep() { + return dComIfGs_getTmpReg(0xFF0F); } -#pragma pop /* 80031718-80031754 02C058 003C+00 0/0 1/1 0/0 .text daNpcKakashi_getSwdTutorialResult__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcKakashi_getSwdTutorialResult() { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_getSwdTutorialResult__Fv.s" +bool daNpcKakashi_getSwdTutorialResult() { + return dComIfGs_isTmpBit(0x40); } -#pragma pop /* 80031754-800317A4 02C094 0050+00 0/0 0/0 1/1 .text daNpcKakashi_setSwdTutorialResult__Fb */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcKakashi_setSwdTutorialResult(bool param_0) { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_setSwdTutorialResult__Fb.s" +void daNpcKakashi_setSwdTutorialResult(bool param_0) { + if (param_0) { + dComIfGs_onTmpBit(0x40); + } else { + dComIfGs_offTmpBit(0x40); + } } -#pragma pop /* 800317A4-800317DC 02C0E4 0038+00 0/0 1/1 1/1 .text daNpcKakashi_getSuccessCount__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcKakashi_getSuccessCount() { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_getSuccessCount__Fv.s" +int daNpcKakashi_getSuccessCount() { + return dComIfGs_getTmpReg(0xFEFF); } -#pragma pop /* 800317DC-80031838 02C11C 005C+00 0/0 0/0 1/1 .text daNpcKakashi_incSuccessCount__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcKakashi_incSuccessCount() { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_incSuccessCount__Fv.s" +void daNpcKakashi_incSuccessCount() { + dComIfGs_setTmpReg(0xFEFF, dComIfGs_getTmpReg(0xFEFF) + 1); } -#pragma pop /* 80031838-80031870 02C178 0038+00 0/0 0/0 4/4 .text daNpcKakashi_clrSuccessCount__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcKakashi_clrSuccessCount() { - nofralloc -#include "asm/d/com/d_com_static/daNpcKakashi_clrSuccessCount__Fv.s" +void daNpcKakashi_clrSuccessCount() { + dComIfGs_setTmpReg(0xFEFF, 0); } -#pragma pop /* ############################################################################################## */ /* 803790B0-803790B0 005710 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -480,19 +460,14 @@ u8 daYkgr_c::m_path[4]; /* 80450D98-80450D9C 000298 0004+00 0/0 1/1 2/2 .sbss m_emitter__8daYkgr_c */ u8 daYkgr_c::m_emitter[4]; -/* 80450D9C-80450DA4 00029C 0008+00 1/1 0/0 0/0 .sbss arcName$4309 */ -static u8 arcName[8]; - /* 80031870-800318B4 02C1B0 0044+00 0/0 0/0 19/19 .text getArcName__12daSetBgObj_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daSetBgObj_c::getArcName(fopAc_ac_c* param_0) { - nofralloc -#include "asm/d/com/d_com_static/getArcName__12daSetBgObj_cFP10fopAc_ac_c.s" +const char* daSetBgObj_c::getArcName(fopAc_ac_c* param_0) { + static char arcName[8]; + + sprintf(arcName, "@bg%04x", (u16)fopAcM_GetParam(param_0)); + return arcName; } -#pragma pop /* ############################################################################################## */ /* 80451D28-80451D30 -00001 0008+00 0/0 0/0 3/3 .sdata2 M_dir_base__Q212daObjMovebox5Act_c @@ -503,7 +478,7 @@ SECTION_SDATA2 void* daObjMovebox::Act_c::M_dir_base[2] = { }; /* 80451D30-80451D34 000330 0004+00 0/0 0/0 3/3 .sdata2 OPEN_SIZE__7daDsh_c */ -SECTION_SDATA2 u32 daDsh_c::OPEN_SIZE = 0x43870CCD; +SECTION_SDATA2 f32 daDsh_c::OPEN_SIZE = 270.1f; /* 80451D34-80451D38 000334 0004+00 0/0 0/0 1/1 .sdata2 OPEN_ACCEL__7daDsh_c */ SECTION_SDATA2 f32 daDsh_c::OPEN_ACCEL = 10.0f; @@ -515,7 +490,7 @@ SECTION_SDATA2 f32 daDsh_c::OPEN_SPEED = -40.0f; SECTION_SDATA2 f32 daDsh_c::OPEN_BOUND_SPEED = -30.0f; /* 80451D40-80451D44 000340 0004+00 0/0 0/0 1/1 .sdata2 OPEN_BOUND_RATIO__7daDsh_c */ -SECTION_SDATA2 f32 daDsh_c::OPEN_BOUND_RATIO = -2.0f / 5.0f; +SECTION_SDATA2 f32 daDsh_c::OPEN_BOUND_RATIO = -0.4f; /* 80451D44-80451D48 000344 0004+00 0/0 0/0 1/1 .sdata2 CLOSE_ACCEL__7daDsh_c */ SECTION_SDATA2 f32 daDsh_c::CLOSE_ACCEL = 10.0f; @@ -527,7 +502,7 @@ SECTION_SDATA2 f32 daDsh_c::CLOSE_SPEED = 40.0f; SECTION_SDATA2 f32 daDsh_c::CLOSE_BOUND_SPEED = 30.0f; /* 80451D50-80451D54 000350 0004+00 0/0 0/0 1/1 .sdata2 CLOSE_BOUND_RATIO__7daDsh_c */ -SECTION_SDATA2 f32 daDsh_c::CLOSE_BOUND_RATIO = -2.0f / 5.0f; +SECTION_SDATA2 f32 daDsh_c::CLOSE_BOUND_RATIO = -0.4f; /* 80451D54-80451D58 000354 0004+00 1/1 0/0 0/0 .sdata2 @4338 */ SECTION_SDATA2 static u8 lit_4338[4] = { @@ -617,47 +592,33 @@ asm void daGrass_c::deleteRoomFlower(int param_0) { /* ############################################################################################## */ /* 80450DB8-80450DBC 0002B8 0004+00 4/4 0/0 2/2 .sbss m_myObj__6daMP_c */ -u8 daMP_c::m_myObj[4]; +daMP_c* daMP_c::m_myObj; /* 80031A78-80031AA4 02C3B8 002C+00 0/0 0/0 1/1 .text daMP_c_Get_MovieRestFrame__6daMP_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daMP_c::daMP_c_Get_MovieRestFrame() { - nofralloc -#include "asm/d/com/d_com_static/daMP_c_Get_MovieRestFrame__6daMP_cFv.s" +int daMP_c::daMP_c_Get_MovieRestFrame() { + return m_myObj->mpGetMovieRestFrame(); } -#pragma pop /* 80031AA4-80031AD0 02C3E4 002C+00 0/0 0/0 1/1 .text daMP_c_Set_PercentMovieVolume__6daMP_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daMP_c::daMP_c_Set_PercentMovieVolume(f32 param_0) { - nofralloc -#include "asm/d/com/d_com_static/daMP_c_Set_PercentMovieVolume__6daMP_cFf.s" +void daMP_c::daMP_c_Set_PercentMovieVolume(f32 i_volume) { + m_myObj->mpSetPercentMovieVol(i_volume); } -#pragma pop /* 80031AD0-80031B24 02C410 0054+00 0/0 1/1 1/1 .text daMP_c_THPPlayerPlay__6daMP_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daMP_c::daMP_c_THPPlayerPlay() { - nofralloc -#include "asm/d/com/d_com_static/daMP_c_THPPlayerPlay__6daMP_cFv.s" +int daMP_c::daMP_c_THPPlayerPlay() { + if (m_myObj == NULL) { + dDemo_c::onStatus(1); + return 0; + } else { + dDemo_c::offStatus(1); + return m_myObj->mpTHPPlay(); + } } -#pragma pop /* 80031B24-80031B50 02C464 002C+00 0/0 0/0 1/1 .text daMP_c_THPPlayerPause__6daMP_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daMP_c::daMP_c_THPPlayerPause() { - nofralloc -#include "asm/d/com/d_com_static/daMP_c_THPPlayerPause__6daMP_cFv.s" +void daMP_c::daMP_c_THPPlayerPause() { + m_myObj->mpTHPPause(); } -#pragma pop /* ############################################################################################## */ /* 80450DBC-80450DC0 0002BC 0004+00 1/1 0/0 3/3 .sbss mTagMagne__12daTagMagne_c */ @@ -671,8 +632,7 @@ int daTagMagne_c::checkMagnetCode(cBgS_PolyInfo& poly) { } int magCode = dComIfG_Bgsp().GetMagnetCode(poly); - if ((magCode == 1 && mTagMagne->checkMagneA()) || - (magCode == 2 && mTagMagne->checkMagneB()) || + if ((magCode == 1 && mTagMagne->checkMagneA()) || (magCode == 2 && mTagMagne->checkMagneB()) || (magCode == 3 && mTagMagne->checkMagneC())) { return 1; } @@ -710,21 +670,15 @@ int daTagMagne_c::checkMagneC() { /* ############################################################################################## */ /* 80450DC0-80450DC4 -00001 0004+00 4/4 0/0 2/2 .sbss None */ /* 80450DC0 0001+00 data_80450DC0 None */ -extern u8 struct_80450DC0; -u8 struct_80450DC0; +u8 daTagMist_c::mPlayerNo; /* 80450DC1 0003+00 data_80450DC1 None */ bool daObjCarry_c::mSaveFlag; /* 80031CF0-80031CF8 02C630 0008+00 0/0 1/1 0/0 .text getPlayerNo__11daTagMist_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daTagMist_c::getPlayerNo() { - nofralloc -#include "asm/d/com/d_com_static/getPlayerNo__11daTagMist_cFv.s" +u8 daTagMist_c::getPlayerNo() { + return mPlayerNo; } -#pragma pop /* 80031CF8-80031D04 02C638 000C+00 0/0 1/1 0/0 .text clrSaveFlag__12daObjCarry_cFv */ void daObjCarry_c::clrSaveFlag() { diff --git a/src/d/d_attention.cpp b/src/d/d_attention.cpp index 06b1721b414..f279e51cd16 100644 --- a/src/d/d_attention.cpp +++ b/src/d/d_attention.cpp @@ -4,6 +4,8 @@ // #include "d/d_attention.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" #include "dol2asm.h" #include "dolphin/mtx/mtxvec.h" #include "dolphin/types.h" @@ -12,10 +14,6 @@ // Types: // -struct mDoCPd_c { - static u8 m_cpadInfo[256]; -}; - class dAttDrawParam_c { public: /* 80070158 */ dAttDrawParam_c(); @@ -30,7 +28,6 @@ public: // Forward References: // -extern "C" static void func_80070018(); extern "C" void __ct__11dAttParam_cFl(); extern "C" void __dt__11dAttParam_cFv(); extern "C" void __ct__15dAttDrawParam_cFv(); @@ -171,8 +168,6 @@ extern "C" extern void* __vt__25mDoExt_McaMorfCallBack1_c[3]; extern "C" u8 dist_table__12dAttention_c[6552]; extern "C" u8 m_cpadInfo__8mDoCPd_c[256]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 data_80450F58[8]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; // @@ -181,14 +176,11 @@ extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; /* 80070018-80070038 06A958 0020+00 2/2 0/0 0/0 .text padLockButton__25@unnamed@d_attention_cpp@Fl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80070018() { - nofralloc -#include "asm/d/d_attention/func_80070018.s" +namespace { +static bool padLockButton(s32 i_padNo) { + return mDoCPd_c::getHoldLockL(i_padNo) != 0; } -#pragma pop +} // namespace /* ############################################################################################## */ /* 8037A770-8037A770 006DD0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -198,26 +190,25 @@ SECTION_DEAD static char const* const stringBase_8037A770 = "D_MN09B"; #pragma pop /* 803A9BF8-803A9C04 006D18 000C+00 2/2 0/0 0/0 .data loc_type_tbl__12dAttention_c */ -SECTION_DATA u8 dAttention_c::loc_type_tbl[12] = { - 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, +SECTION_DATA type_tbl_entry dAttention_c::loc_type_tbl[3] = { + {0, 1}, + {1, 2}, + {2, 4}, }; /* 803A9C04-803A9C18 006D24 0014+00 1/1 0/0 0/0 .data act_type_tbl__12dAttention_c */ -SECTION_DATA u8 dAttention_c::act_type_tbl[20] = { - 0x00, 0x03, 0x00, 0x08, 0x00, 0x04, 0x00, 0x10, 0x00, 0x05, - 0x00, 0x20, 0x00, 0x06, 0x00, 0x40, 0x00, 0x07, 0x00, 0x80, +SECTION_DATA type_tbl_entry dAttention_c::act_type_tbl[5] = { + {3, 8}, {4, 16}, {5, 32}, {6, 64}, {7, 128}, }; /* 803A9C18-803A9C3C 006D38 0024+00 1/1 0/0 0/0 .data ftp_table$4417 */ -SECTION_DATA static u8 ftp_table[36] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, +SECTION_DATA static int ftp_table[9] = { + 4, 1, 2, 8, 16, 32, 64, 128, 256, }; /* 803A9C3C-803A9C48 006D5C 000C+00 1/1 0/0 0/0 .data ang_table2$4419 */ -SECTION_DATA static u8 ang_table2[12] = { - 0x0A, 0xAA, 0x20, 0x00, 0x2A, 0xAA, 0x40, 0x00, 0x4E, 0x38, 0x60, 0x00, +SECTION_DATA static s16 ang_table2[6] = { + 0x0AAA, 0x2000, 0x2AAA, 0x4000, 0x4E38, 0x6000, }; /* 803A9C48-803A9C54 006D68 000C+00 1/1 1/1 0/0 .data __vt__19dAttDraw_CallBack_c */ @@ -287,45 +278,60 @@ SECTION_SDATA2 static f32 lit_4072 = 17.0f / 10.0f; /* 80452658-8045265C 000C58 0004+00 10/10 0/0 0/0 .sdata2 @4073 */ SECTION_SDATA2 static f32 lit_4073 = 1.0f; +/* ############################################################################################## */ +/* 80450F58-80450F60 000458 0008+00 0/0 2/2 0/0 .sbss None */ +extern bool on_final_boss_stg; +bool on_final_boss_stg; + /* 80070038-80070110 06A978 00D8+00 1/1 0/0 0/0 .text __ct__11dAttParam_cFl */ +// matches with literals +#ifdef NONMATCHING +dAttParam_c::dAttParam_c(s32 param_0) { + field_0x4 = 45.0f; + field_0x8 = 30.0f; + field_0xc = 90.0f; + mFlags = 1; + mSWModeDisable = -0.9f; + + mDangerBGMDistance = 3000.0f; + mBGMDistMargin = 1000.0f; + + mSelCursorScaleX = 6.0f; + mSelCursorScaleY = 4.5f; + + mAttnCursorScaleX = 14.0f; + mAttnCursorScaleY = 14.0f; + + mSelCursorOffsetY = 10.0f; + mAttnCursorOffsetY = 0.0f; + + mAttnCursorAppearFrames = 1; + mAttnCursorDisappearFrames = 1; + + field_0x38 = 1.7f; + field_0x3c = 1.0f; + + on_final_boss_stg = strcmp(dComIfGp_getStartStageName(), "D_MN09B") == 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -// asm dAttParam_c::dAttParam_c(s32 param_0) { -extern "C" asm void __ct__11dAttParam_cFl() { +asm dAttParam_c::dAttParam_c(s32 param_0) { nofralloc #include "asm/d/d_attention/__ct__11dAttParam_cFl.s" } #pragma pop +#endif /* 80070110-80070158 06AA50 0048+00 2/1 0/0 0/0 .text __dt__11dAttParam_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dAttParam_c::~dAttParam_c() { -extern "C" asm void __dt__11dAttParam_cFv() { - nofralloc -#include "asm/d/d_attention/__dt__11dAttParam_cFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 8045265C-80452660 000C5C 0004+00 1/1 0/0 0/0 .sdata2 @4084 */ -SECTION_SDATA2 static f32 lit_4084 = 250.0f; - -/* 80452660-80452664 000C60 0004+00 1/1 0/0 0/0 .sdata2 @4085 */ -SECTION_SDATA2 static f32 lit_4085 = 2.0f; +dAttParam_c::~dAttParam_c() {} /* 80070158-80070178 06AA98 0020+00 1/1 0/0 0/0 .text __ct__15dAttDrawParam_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dAttDrawParam_c::dAttDrawParam_c() { -extern "C" asm void __ct__15dAttDrawParam_cFv() { - nofralloc -#include "asm/d/d_attention/__ct__15dAttDrawParam_cFv.s" +dAttDrawParam_c::dAttDrawParam_c() { + mCursorDistance = 250.0f; + field_0xc = 2.0f; } -#pragma pop /* ############################################################################################## */ /* 80452664-80452668 000C64 0004+00 1/1 0/0 0/0 .sdata2 @4092 */ @@ -356,6 +362,105 @@ SECTION_DEAD static char const* const pad_8037A77F = ""; static dAttDrawParam_c g_AttDwHIO; /* 80070198-80070774 06AAD8 05DC+00 0/0 1/1 0/0 .text __ct__12dAttention_cFP10fopAc_ac_cUl */ +// matches with literals +#ifdef NONMATCHING +dAttention_c::dAttention_c(fopAc_ac_c* i_player, u32 i_padNo) { + mpPlayer = i_player; + mPadNo = i_padNo; + + mLockTargetID = -1; + field_0x32e = 0; + field_0x32f = 0; + + mCheckObjectOffset = 0; + mActionOffset = 0; + mLockOnOffset = 0; + initList(-1); + + field_0x10 = 0; + field_0x32a = 0; + mAttnStatus = ST_NONE; + field_0x32b = 4; + field_0x32c = 0; + mAttnBlockTimer = 0; + + heap = mDoExt_createSolidHeapFromGameToCurrent(0x9000, 0); + + J3DModelData* modelDataR = (J3DModelData*)dComIfG_getObjectRes("Always", 0x25); + J3DModelData* modelDataY = (J3DModelData*)dComIfG_getObjectRes("Always", 0x26); + + for (int i = 0; i < 2; i++) { + draw[i].mModel[0] = mDoExt_J3DModel__create(modelDataY, 0x80000, 0x11000285); + draw[i].mModel[1] = mDoExt_J3DModel__create(modelDataR, 0x80000, 0x11000285); + + void* res = dComIfG_getObjectRes("Always", 0x11); + draw[i].mNoticeCursorBck[0].init((J3DAnmTransform*)res, TRUE, 2, 1.0f, 0, -1, false); + + res = dComIfG_getObjectRes("Always", 0x2B); + draw[i].mNoticeCursorBpk[0].init(modelDataY, (J3DAnmColor*)res, TRUE, 2, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0x37); + draw[i].mNoticeCursorBrk[0].init(modelDataY, (J3DAnmTevRegKey*)res, TRUE, 2, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0x3F); + draw[i].mNoticeCursorBtk[0].init(modelDataY, (J3DAnmTextureSRTKey*)res, TRUE, 2, 1.0f, 0, + -1); + + res = dComIfG_getObjectRes("Always", 0x38); + draw[i].mNoticeCursor02Brk[0].init(modelDataY, (J3DAnmTevRegKey*)res, TRUE, 2, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0x10); + draw[i].mNoticeCursorBck[1].init((J3DAnmTransform*)res, TRUE, 2, 1.0f, 0, -1, false); + + res = dComIfG_getObjectRes("Always", 0x2A); + draw[i].mNoticeCursorBpk[1].init(modelDataR, (J3DAnmColor*)res, TRUE, 2, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0x35); + draw[i].mNoticeCursorBrk[1].init(modelDataR, (J3DAnmTevRegKey*)res, TRUE, 2, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0x3E); + draw[i].mNoticeCursorBtk[1].init(modelDataR, (J3DAnmTextureSRTKey*)res, TRUE, 2, 1.0f, 0, + -1); + + res = dComIfG_getObjectRes("Always", 0x36); + draw[i].mNoticeCursor02Brk[1].init(modelDataR, (J3DAnmTevRegKey*)res, TRUE, 2, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0xC); + draw[i].mImpactBck.init((J3DAnmTransform*)res, TRUE, 0, 1.0f, 0, -1, false); + + res = dComIfG_getObjectRes("Always", 0x29); + draw[i].mImpactBpk.init(modelDataR, (J3DAnmColor*)res, TRUE, 0, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0x32); + draw[i].mImpactBrk.init(modelDataR, (J3DAnmTevRegKey*)res, TRUE, 0, 1.0f, 0, -1); + + res = dComIfG_getObjectRes("Always", 0x3D); + draw[i].mImpactBtk.init(modelDataR, (J3DAnmTextureSRTKey*)res, TRUE, 0, 1.0f, 0, -1); + + draw[i].field_0x170 = 0; + draw[i].field_0x171 = 1; + draw[i].field_0x172 = 0; + draw[i].field_0x174 = 1; + draw[i].field_0x173 = 2; + draw[i].field_0x175 = 0; + } + + mDoExt_restoreCurrentHeap(); + if ((int)mDoExt_adjustSolidHeap(heap) >= 0) { + DCStoreRangeNoSync(heap->getStartAddr(), heap->getHeapSize()); + } + + field_0x328 = -1; + mFlags = 0; + + mZHintTarget.init(); + mCatghTarget.init(); + mLookTarget.init(); + new (&mAttParam) dAttParam_c(0); + + g_AttDwHIO.field_0x4 = -1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -364,106 +469,171 @@ asm dAttention_c::dAttention_c(fopAc_ac_c* param_0, u32 param_1) { #include "asm/d/d_attention/__ct__12dAttention_cFP10fopAc_ac_cUl.s" } #pragma pop +#endif /* 80070774-80070844 06B0B4 00D0+00 0/0 2/2 0/0 .text __dt__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dAttention_c::~dAttention_c() { - nofralloc -#include "asm/d/d_attention/__dt__12dAttention_cFv.s" +dAttention_c::~dAttention_c() { + if (heap != NULL) { + mDoExt_destroySolidHeap(heap); + heap = NULL; + } } -#pragma pop /* 80070844-80070880 06B184 003C+00 2/2 2/2 8/8 .text GetLockonList__12dAttention_cFl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::GetLockonList(s32 param_0) { - nofralloc -#include "asm/d/d_attention/GetLockonList__12dAttention_cFl.s" +dAttList_c* dAttention_c::GetLockonList(s32 param_0) { + if (mLockonCount != 0) { + return &mLockOnList[(mLockOnOffset + param_0) % mLockonCount]; + } + + return NULL; } -#pragma pop /* 80070880-80070974 06B1C0 00F4+00 0/0 5/5 2/2 .text getActionBtnB__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::getActionBtnB() { - nofralloc -#include "asm/d/d_attention/getActionBtnB__12dAttention_cFv.s" +dAttList_c* dAttention_c::getActionBtnB() { + int i; + dAttList_c* list = GetLockonList(0); + + if (list != NULL && list->getActor() != NULL && list->mType == 1 && LockonTruth() && + !(list->getActor()->mAttentionInfo.mFlags & 0x2000000)) { + return list; + } + + if (mActionCount == 0) { + return NULL; + } + + for (i = 0; i < mActionCount; i++) { + if (mActionList[i].mType == 3) { + if (!(mActionList[i].getActor()->mAttentionInfo.mFlags & 0x2000000)) { + return &mActionList[i]; + } + continue; + } + return &mActionList[i]; + } + + return NULL; } -#pragma pop /* 80070974-80070A70 06B2B4 00FC+00 0/0 1/1 0/0 .text getActionBtnXY__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::getActionBtnXY() { - nofralloc -#include "asm/d/d_attention/getActionBtnXY__12dAttention_cFv.s" +dAttList_c* dAttention_c::getActionBtnXY() { + int i; + dAttList_c* list = GetLockonList(0); + + if (list != NULL && list->getActor() != NULL && list->mType == 1 && LockonTruth()) { + if (list->getActor()->mEvtInfo.chkCondition(0x20)) { + return list; + } + + return NULL; + } + + if (mActionCount == 0) { + return NULL; + } + + for (i = 0; i < mActionCount; i++) { + if (mActionList[i].mType == 3) { + if (mActionList[i].getActor()->mEvtInfo.chkCondition(0x20)) { + return &mActionList[i]; + } + } + } + + return NULL; } -#pragma pop /* ############################################################################################## */ /* 80450660-80450664 0000E0 0004+00 2/2 0/0 0/0 .sdata loc_type_num__12dAttention_c */ -SECTION_SDATA u32 dAttention_c::loc_type_num = 0x00000003; +SECTION_SDATA int dAttention_c::loc_type_num = 3; /* 80070A70-80070AC0 06B3B0 0050+00 1/1 0/0 0/0 .text chkAttMask__12dAttention_cFUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::chkAttMask(u32 param_0, u32 param_1) { - nofralloc -#include "asm/d/d_attention/chkAttMask__12dAttention_cFUlUl.s" +int dAttention_c::chkAttMask(u32 param_0, u32 param_1) { + for (int i = 0; i < loc_type_num; i++) { + if (param_0 == loc_type_tbl[i].field_0x0) { + return param_1 & loc_type_tbl[i].field_0x2; + } + } + + return 1; } -#pragma pop /* 80070AC0-80070B2C 06B400 006C+00 2/2 0/0 0/0 .text check_event_condition__FUlUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void check_event_condition(u32 param_0, u16 param_1) { - nofralloc -#include "asm/d/d_attention/check_event_condition__FUlUs.s" +static int check_event_condition(u32 i_listType, u16 i_condition) { + switch (i_listType) { + case 3: + case 1: + if (!(i_condition & 1)) { + return true; + } + break; + case 4: + case 2: + break; + case 5: + if (!(i_condition & 4)) { + return true; + } + break; + case 6: + if (!(i_condition & 4)) { + return true; + } + break; + } + + return false; } -#pragma pop /* ############################################################################################## */ /* 80450664-80450668 0000E4 0004+00 1/1 0/0 0/0 .sdata act_type_num__12dAttention_c */ -SECTION_SDATA u32 dAttention_c::act_type_num = 0x00000005; +SECTION_SDATA int dAttention_c::act_type_num = 5; /* 80450668-8045066C 0000E8 0004+00 1/1 0/0 0/0 .sdata chk_type_tbl__12dAttention_c */ -SECTION_SDATA u32 dAttention_c::chk_type_tbl = 0x00080100; - -/* 8045066C-80450670 0000EC 0004+00 1/1 0/0 0/0 .sdata chk_type_num__12dAttention_c */ -SECTION_SDATA u32 dAttention_c::chk_type_num = 0x00000001; - -/* 80450670-80450674 0000F0 0004+00 2/2 0/0 0/0 .sdata None */ -SECTION_SDATA static u32 data_80450670 = 0x01000000; - -/* 80450674-8045067C 0000F4 0006+02 1/1 0/0 0/0 .sdata ang_table$4418 */ -SECTION_SDATA static u8 ang_table[6 + 2 /* padding */] = { - 0x40, - 0x00, - 0x20, - 0x00, - 0x0A, - 0xAA, - /* padding */ - 0x00, - 0x00, +SECTION_SDATA type_tbl_entry dAttention_c::chk_type_tbl[1] = { + {8, 256}, }; +/* 8045066C-80450670 0000EC 0004+00 1/1 0/0 0/0 .sdata chk_type_num__12dAttention_c */ +SECTION_SDATA int dAttention_c::chk_type_num = 1; + +/* 80450670-80450674 0000F0 0004+00 2/2 0/0 0/0 .sdata None */ +SECTION_SDATA static bool attn_opt_hold = true; + /* 80070B2C-80070BF4 06B46C 00C8+00 2/2 0/0 0/0 .text check_flontofplayer__FUlss */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void check_flontofplayer(u32 param_0, s16 param_1, s16 param_2) { - nofralloc -#include "asm/d/d_attention/check_flontofplayer__FUlss.s" +static int check_flontofplayer(u32 param_0, s16 param_1, s16 param_2) { + static s16 ang_table[3] = { + 0x4000, + 0x2000, + 0x0AAA, + }; + + if (param_1 < 0) { + param_1 = -param_1; + } + + if (param_2 < 0) { + param_2 = -param_2; + } + + for (int i = 0; i < 3; i++) { + if (param_0 & ftp_table[i]) { + if (param_1 > ang_table[i]) { + return true; + } + } + } + + for (int i = 8; i > 2; i--) { + if (param_0 & ftp_table[i]) { + if (param_2 > ang_table2[i - 3]) { + return true; + } + } + } + + return false; } -#pragma pop /* ############################################################################################## */ /* 80452668-80452670 000C68 0004+04 2/2 0/0 0/0 .sdata2 @4448 */ @@ -477,24 +647,44 @@ SECTION_SDATA2 static f32 lit_4448[1 + 1 /* padding */] = { SECTION_SDATA2 static f64 lit_4450 = 4503601774854144.0 /* cast s32 to float */; /* 80070BF4-80070C40 06B534 004C+00 2/2 0/0 0/0 .text distace_weight__Ffsf */ +// matches with literals +#ifdef NONMATCHING +static f32 distace_weight(f32 param_0, s16 param_1, f32 param_2) { + f32 tmp = param_1 / 32768.0f; + return param_0 * ((1.0f - param_2) + (param_2 * (tmp * tmp))); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void distace_weight(f32 param_0, s16 param_1, f32 param_2) { +static asm f32 distace_weight(f32 param_0, s16 param_1, f32 param_2) { nofralloc #include "asm/d/d_attention/distace_weight__Ffsf.s" } #pragma pop +#endif /* 80070C40-80070CA0 06B580 0060+00 2/2 0/0 0/0 .text distace_angle_adjust__Ffsf */ +// matches with literals +#ifdef NONMATCHING +static f32 distace_angle_adjust(f32 param_0, s16 param_1, f32 param_2) { + f32 tmp = param_1 / 32768.0f; + if (tmp < 0.0f) { + tmp = -tmp; + } + + return param_0 * ((1.0f - param_2) + (param_2 * ((1.0f - tmp) * (1.0f - tmp)))); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void distace_angle_adjust(f32 param_0, s16 param_1, f32 param_2) { +static asm f32 distace_angle_adjust(f32 param_0, s16 param_1, f32 param_2) { nofralloc #include "asm/d/d_attention/distace_angle_adjust__Ffsf.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80452678-80452680 000C78 0008+00 3/3 0/0 0/0 .sdata2 @4514 */ @@ -510,15 +700,34 @@ SECTION_SDATA2 static u8 lit_4516[8] = { /* 80070CA0-80070E90 06B5E0 01F0+00 3/3 0/0 0/0 .text check_distace__FP4cXyzsP4cXyzffff */ +// matches with literals +#ifdef NONMATCHING +static bool check_distace(cXyz* param_0, s16 param_1, cXyz* param_2, f32 param_3, f32 param_4, + f32 param_5, f32 param_6) { + cXyz tmp = *param_2 - *param_0; + + if (tmp.y <= param_6 || tmp.y >= param_5) { + return false; + } + + f32 adjust = param_3 + distace_angle_adjust(param_4, param_1, 1.0f); + if (adjust < tmp.absXZ()) { + return false; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void check_distace(cXyz* param_0, s16 param_1, cXyz* param_2, f32 param_3, f32 param_4, - f32 param_5, f32 param_6) { +static asm int check_distace(cXyz* param_0, s16 param_1, cXyz* param_2, f32 param_3, f32 param_4, + f32 param_5, f32 param_6) { nofralloc #include "asm/d/d_attention/check_distace__FP4cXyzsP4cXyzffff.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80452690-80452694 000C90 0004+00 3/3 0/0 0/0 .sdata2 @4562 */ @@ -529,18 +738,152 @@ SECTION_SDATA2 static f32 lit_4563 = 0.5f; /* 80070E90-800710C0 06B7D0 0230+00 2/2 0/0 0/0 .text * calcWeight__12dAttention_cFiP10fopAc_ac_cfssPUl */ +// matches with literals +#ifdef NONMATCHING +f32 dAttention_c::calcWeight(int param_0, fopAc_ac_c* param_1, f32 param_2, s16 param_3, + s16 param_4, u32* param_5) { + int i; + int num; + type_tbl_entry* table; + + switch (param_0) { + case 0x4C: + if (chkFlag(0x4000)) { + return 0.0f; + } + + num = loc_type_num; + table = loc_type_tbl; + break; + default: + case 0x41: + num = act_type_num; + table = act_type_tbl; + break; + case 0x43: + num = chk_type_num; + table = chk_type_tbl; + break; + } + + f32 weight = 0.0f; + f32 dvar14 = -1.0f; + + daPy_py_c* player = daPy_getPlayerActorClass(); + if (player != NULL) { + if (param_1 == fopAcM_SearchByID(player->getGrabActorID())) { + return 0.0f; + } + } + + for (i = 0; i < num; i++) { + f32 dvar12; + type_tbl_entry* entry = &table[i]; + + if (field_0x10 & entry->field_0x2 & param_1->mAttentionInfo.mFlags) { + u8 index = param_1->mAttentionInfo.field_0x0[entry->field_0x0]; + dist_entry* d_entry = &dist_table[index]; + + if (fopAcM_checkStatus(param_1, 0x20000000) || + check_event_condition(entry->field_0x0, param_1->mEvtInfo.getCondition())) { + dvar12 = 0.0f; + } else if (check_flontofplayer(d_entry->field_0x18, param_3, param_4)) { + dvar12 = 0.0f; + } else if (!check_distace(&mOwnerAttnPos, param_3, ¶m_1->mAttentionInfo.mPosition, + d_entry->field_0x0, d_entry->field_0x8, d_entry->field_0xc, + d_entry->field_0x10)) { + dvar12 = 0.0f; + } else { + dvar12 = distace_weight(param_2, param_3, 0.5f); + } + + f32 dvar13 = d_entry->field_0x14; + if (dvar12 > 0.0f && dvar13 > dvar14) { + dvar14 = dvar13; + weight = dvar12 / dvar13; + *param_5 = entry->field_0x0; + } + } + } + + return weight; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dAttention_c::calcWeight(int param_0, fopAc_ac_c* param_1, f32 param_2, s16 param_3, - s16 param_4, u32* param_5) { +asm f32 dAttention_c::calcWeight(int param_0, fopAc_ac_c* param_1, f32 param_2, s16 param_3, + s16 param_4, u32* param_5) { nofralloc #include "asm/d/d_attention/calcWeight__12dAttention_cFiP10fopAc_ac_cfssPUl.s" } #pragma pop +#endif /* 800710C0-80071240 06BA00 0180+00 1/1 0/0 0/0 .text * setList__12dAttention_cFiP10fopAc_ac_cff7cSAngleUl */ +#ifdef NONMATCHING +void dAttention_c::setList(int param_0, fopAc_ac_c* param_1, f32 param_2, f32 param_3, + cSAngle param_4, u32 param_5) { + int i; + int max; + int* num; + dAttList_c* list; + + switch (param_0) { + case 0x4C: + if (!chkFlag(0x4000) && (mLockonCount < 1 || param_1 != mLockOnList[0].getActor() || param_5 != mLockOnList[0].mType)) { + max = 8; + num = &mLockonCount; + list = mLockOnList; + break; + } + + return; + default: + case 0x41: + max = 4; + num = &mActionCount; + list = mActionList; + break; + case 0x43: + max = 4; + num = &mCheckObjectCount; + list = mCheckObjectList; + break; + } + + f32 weight = 0.0f; + + if (param_2 > weight) { + int temp_r3 = *num; + int var_r5; + + if (temp_r3 < max) { + var_r5 = temp_r3; + *num = temp_r3 + 1; + } else { + f32 var_f1 = weight; + var_r5 = 0; + for (i = 0; i < max; i++) { + if (list[i].mWeight > var_f1) { + var_f1 = list[i].mWeight; + var_r5 = i; + } + } + } + + list = &list[var_r5]; + if (list->mWeight > param_2) { + list->setActor(param_1); + list->mWeight = param_2; + list->mDistance = param_3; + list->mAngle = param_4; + list->mType = param_5; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -550,6 +893,7 @@ asm void dAttention_c::setList(int param_0, fopAc_ac_c* param_1, f32 param_2, f3 #include "asm/d/d_attention/setList__12dAttention_cFiP10fopAc_ac_cff7cSAngleUl.s" } #pragma pop +#endif /* 80071240-8007138C 06BB80 014C+00 6/6 0/0 0/0 .text initList__12dAttention_cFUl */ #pragma push @@ -563,41 +907,36 @@ asm void dAttention_c::initList(u32 param_0) { /* 8007138C-800713CC 06BCCC 0040+00 1/1 0/0 0/0 .text select_attention__FP10fopAc_ac_cPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void select_attention(fopAc_ac_c* param_0, void* param_1) { - nofralloc -#include "asm/d/d_attention/select_attention__FP10fopAc_ac_cPv.s" +static int select_attention(fopAc_ac_c* param_0, void* i_attention) { + if (param_0->mAttentionInfo.mFlags == 0) { + return 0; + } + + return ((dAttention_c*)i_attention)->SelectAttention(param_0); } -#pragma pop /* 800713CC-80071424 06BD0C 0058+00 4/4 0/0 0/0 .text makeList__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::makeList() { - nofralloc -#include "asm/d/d_attention/makeList__12dAttention_cFv.s" +int dAttention_c::makeList() { + fopAcIt_Executor((fopAcIt_ExecutorFunc)select_attention, this); + setFlag(0x2000); + return mLockonCount + mActionCount + mCheckObjectCount; } -#pragma pop /* 80071424-80071488 06BD64 0064+00 1/1 0/0 0/0 .text setOwnerAttentionPos__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::setOwnerAttentionPos() { - nofralloc -#include "asm/d/d_attention/setOwnerAttentionPos__12dAttention_cFv.s" +void dAttention_c::setOwnerAttentionPos() { + mOwnerAttnPos = mpPlayer->mAttentionInfo.mPosition; + + if (fopAcM_GetName(mpPlayer) == PROC_ALINK) { + mOwnerAttnPos.y -= ((daPy_py_c*)mpPlayer)->getAttentionOffsetY(); + } } -#pragma pop /* 80071488-8007167C 06BDC8 01F4+00 1/1 0/0 0/0 .text * SelectAttention__12dAttention_cFP10fopAc_ac_c */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dAttention_c::SelectAttention(fopAc_ac_c* param_0) { +asm int dAttention_c::SelectAttention(fopAc_ac_c* param_0) { nofralloc #include "asm/d/d_attention/SelectAttention__12dAttention_cFP10fopAc_ac_c.s" } @@ -614,6 +953,52 @@ extern "C" asm void __dt__7cSGlobeFv() { #pragma pop /* 800716B8-800718A4 06BFF8 01EC+00 4/4 0/0 0/0 .text sortList__12dAttention_cFv */ +#ifdef NONMATCHING +void dAttention_c::sortList() { + dAttList_c list; + + if (!chkFlag(0x4000)) { + for (int i = (mLockTargetID != -1); i < mLockonCount - 1; i++) { + dAttList_c* list_1 = &mLockOnList[i]; + for (int j = i + 1; j < mLockonCount; j++) { + dAttList_c* list_2 = &mLockOnList[j]; + + if (list_2->mWeight < list_1->mWeight) { + memcpy(&list, list_2, sizeof(dAttList_c)); + memcpy(list_2, list_1, sizeof(dAttList_c)); + memcpy(list_1, &list, sizeof(dAttList_c)); + } + } + } + } + + for (int i = 0; i < mActionCount - 1; i++) { + dAttList_c* list_1 = &mActionList[i]; + for (int j = i + 1; j < mActionCount; j++) { + dAttList_c* list_2 = &mActionList[j]; + + if (list_2->mWeight < list_1->mWeight) { + memcpy(&list, list_2, sizeof(dAttList_c)); + memcpy(list_2, list_1, sizeof(dAttList_c)); + memcpy(list_1, &list, sizeof(dAttList_c)); + } + } + } + + for (int i = 0; i < mCheckObjectCount - 1; i++) { + dAttList_c* list_1 = &mCheckObjectList[i]; + for (int j = i + 1; j < mCheckObjectCount; j++) { + dAttList_c* list_2 = &mCheckObjectList[j]; + + if (list_2->mWeight < list_1->mWeight) { + memcpy(&list, list_2, sizeof(dAttList_c)); + memcpy(list_2, list_1, sizeof(dAttList_c)); + memcpy(list_1, &list, sizeof(dAttList_c)); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -622,162 +1007,674 @@ asm void dAttention_c::sortList() { #include "asm/d/d_attention/sortList__12dAttention_cFv.s" } #pragma pop +#endif /* 800718A4-80071960 06C1E4 00BC+00 2/2 0/0 0/0 .text stockAttention__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::stockAttention() { - nofralloc -#include "asm/d/d_attention/stockAttention__12dAttention_cFv.s" +void dAttention_c::stockAttention() { + fopAc_ac_c* target = LockonTarget(0); + + initList(-1); + if (makeList()) { + sortList(); + } + + if (target != mLockOnList[0].getActor()) { + if (target != NULL) { + if (mLockOnList[0].getActor() != NULL) { + setFlag(2); + } + } else { + setFlag(1); + } + setFlag(4); + } + + LockonTarget(0); } -#pragma pop /* 80071960-80071A68 06C2A0 0108+00 2/2 0/0 0/0 .text nextAttention__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::nextAttention() { - nofralloc -#include "asm/d/d_attention/nextAttention__12dAttention_cFv.s" +fopAc_ac_c* dAttention_c::nextAttention() { + if (!attn_opt_hold && mLockonCount == 1) { + field_0x32e = 0; + return NULL; + } + + if (field_0x32e != 0) { + mLockOnOffset++; + + if (mLockOnOffset >= mLockonCount) { + mLockOnOffset = 0; + } + return LockonTarget(0); + } + + fopAc_ac_c* actor = fopAcM_SearchByID(mLockTargetID); + initList(-1); + + if (makeList()) { + sortList(); + } + + if (actor == mLockOnList[0].getActor() && mLockonCount > 1) { + mLockOnOffset = 1; + } + + return LockonTarget(0); } -#pragma pop /* 80071A68-80071A98 06C3A8 0030+00 3/3 0/0 0/0 .text freeAttention__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::freeAttention() { - nofralloc -#include "asm/d/d_attention/freeAttention__12dAttention_cFv.s" +int dAttention_c::freeAttention() { + mLockTargetID = -1; + initList(-1); + return 0; } -#pragma pop /* 80071A98-80071CC0 06C3D8 0228+00 2/2 0/0 0/0 .text chaseAttention__12dAttention_cFv */ +#ifdef NONMATCHING +bool dAttention_c::chaseAttention() { + int offset = mLockOnOffset; + fopAc_ac_c* actor = mLockOnList[offset].getActor(); + + if (actor == NULL) { + return false; + } + + if (!chkFlag(0x4000)) { + cSGlobe g1(actor->mAttentionInfo.mPosition - mOwnerAttnPos); + cSAngle a1(g1.U() - mpPlayer->mCollisionRot.y); + + cSGlobe g2(mOwnerAttnPos - actor->mAttentionInfo.mPosition); + cSAngle a2(g2.U() - actor->mCollisionRot.y); + + u32 type; + f32 weight = calcWeight(0x4C, actor, g1.R(), a1.Val(), a2.Val(), &type); + if (weight >= 0.0f) { + int type = mLockOnList[offset].mType; + int tbl_idx = actor->mAttentionInfo.field_0x0[type]; + + if (!chkAttMask(type, actor->mAttentionInfo.mFlags)) { + return false; + } else if (check_event_condition(type, actor->mEvtInfo.getCondition())) { + return false; + } else if (check_flontofplayer(dist_table[tbl_idx].field_0x18, a1.Val(), a2.Val())) { + return false; + } else if (check_distace(&mOwnerAttnPos, a1.Val(), &actor->mAttentionInfo.mPosition, + dist_table[tbl_idx].field_0x4, dist_table[tbl_idx].field_0x8, + dist_table[tbl_idx].field_0xc, + dist_table[tbl_idx].field_0x10)) { + mLockOnList[offset].mWeight = distace_weight(g1.R(), a1.Val(), 0.5f); + return true; + } + + return false; + } + + mLockOnList[offset].setActor(actor); + mLockOnList[offset].mWeight = weight; + mLockOnList[offset].mDistance = g1.R(); + mLockOnList[offset].mType = type; + return true; + } + + return (actor->mAttentionInfo.mFlags & 7) != false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dAttention_c::chaseAttention() { +asm bool dAttention_c::chaseAttention() { nofralloc #include "asm/d/d_attention/chaseAttention__12dAttention_cFv.s" } #pragma pop +#endif /* 80071CC0-80071D6C 06C600 00AC+00 1/1 0/0 0/0 .text EnemyDistance__12dAttention_cFP10fopAc_ac_c */ +// matches with literals +#ifdef NONMATCHING +f32 dAttention_c::EnemyDistance(fopAc_ac_c* i_actor) { + f32 distance; + + if (i_actor == mpPlayer || mpPlayer == NULL) { + distance = -1.0f; + } else if (fopAcM_GetProfName(i_actor) == PROC_ALINK) { + distance = -1.0f; + } else if (!(i_actor->mAttentionInfo.mFlags & 4) && + !(i_actor->mAttentionInfo.mFlags & 0x4000000)) { + distance = -1.0f; + } else { + distance = fopAcM_searchActorDistance(mpPlayer, i_actor); + u8 tmp = i_actor->mAttentionInfo.field_0x0[2]; + + if (distance < dist_table[tmp].field_0x0 + dist_table[tmp].field_0x8) { + return distance; + } + + distance = -1.0f; + } + + return distance; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dAttention_c::EnemyDistance(fopAc_ac_c* param_0) { +asm f32 dAttention_c::EnemyDistance(fopAc_ac_c* param_0) { nofralloc #include "asm/d/d_attention/EnemyDistance__12dAttention_cFP10fopAc_ac_c.s" } #pragma pop +#endif /* 80071D6C-80071DEC 06C6AC 0080+00 1/1 0/0 0/0 .text sound_attention__FP10fopAc_ac_cPv */ +// matches with literals +#ifdef NONMATCHING +static int sound_attention(fopAc_ac_c* param_0, void* i_attention) { + f32 dist = ((dAttention_c*)i_attention)->EnemyDistance(param_0); + + if (dist < 0.0f) { + return 0; + } + + if (dist < ((dAttention_c*)i_attention)->mEnemyDist) { + ((dAttention_c*)i_attention)->mEnemyActorID = fopAcM_GetID(param_0); + ((dAttention_c*)i_attention)->mEnemyDist = dist; + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void sound_attention(fopAc_ac_c* param_0, void* param_1) { +static asm int sound_attention(fopAc_ac_c* param_0, void* param_1) { nofralloc #include "asm/d/d_attention/sound_attention__FP10fopAc_ac_cPv.s" } #pragma pop - -/* ############################################################################################## */ -/* 80452698-8045269C 000C98 0004+00 1/1 0/0 0/0 .sdata2 @5137 */ -SECTION_SDATA2 static f32 lit_5137 = 10000.0f; - -/* 8045269C-804526A0 000C9C 0004+00 1/1 0/0 0/0 .sdata2 @5138 */ -SECTION_SDATA2 static f32 lit_5138 = 1.0f / 10.0f; +#endif /* 80071DEC-80071E84 06C72C 0098+00 1/1 0/0 0/0 .text runSoundProc__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::runSoundProc() { - nofralloc -#include "asm/d/d_attention/runSoundProc__12dAttention_cFv.s" +void dAttention_c::runSoundProc() { + mEnemyActorID = -1; + mEnemyDist = 10000.0f; + + if (!chkFlag(0x80000000)) { + fopAcIt_Executor((fopAcIt_ExecutorFunc)sound_attention, this); + + if (fopAcM_SearchByID(mEnemyActorID) != NULL) { + mDoAud_bgmNowBattle(mEnemyDist * 0.1f); + setFlag(0x100); + } + } } -#pragma pop /* 80071E84-800720F4 06C7C4 0270+00 1/1 0/0 0/0 .text runDrawProc__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::runDrawProc() { - nofralloc -#include "asm/d/d_attention/runDrawProc__12dAttention_cFv.s" +void dAttention_c::runDrawProc() { + if ((mFlags >> 3) & 1) { + draw[0].setAlphaAnm(mAttParam.mAttnCursorAppearFrames, 0); + draw[0].setAnm(1, mAttParam.field_0x3c); + draw[0].field_0x164.x = mAttParam.mAttnCursorScaleX; + draw[0].field_0x164.y = mAttParam.mAttnCursorScaleY; + draw[0].field_0x164.z = mAttParam.mAttnCursorOffsetY; + draw[0].field_0x175 = 1; + + if (!i_dComIfGp_checkPlayerStatus0(0, 0x36a02311) || + i_dComIfGp_checkPlayerStatus1(0, 0x11)) { + lockSoundStart(Z2SE_SY_L_FOCUS_SET); + } + } else if (chkFlag(0x10)) { + draw[0].setAlphaAnm(mAttParam.mAttnCursorDisappearFrames, 1); + if (field_0x328 >= 0) { + field_0x328 = 1; + setFlag(0x40000000); + } + + if (!i_dComIfGp_checkPlayerStatus0(0, 0x36a02311) || + i_dComIfGp_checkPlayerStatus1(0, 0x11)) { + lockSoundStart(Z2SE_SY_L_FOCUS_RESET); + } + } else if (chkFlag(0x1)) { + draw[0].setAnm(0, mAttParam.field_0x38); + draw[0].setAlphaAnm(mAttParam.mAttnCursorAppearFrames, 0); + + draw[0].field_0x164.x = mAttParam.mSelCursorScaleX; + draw[0].field_0x164.y = mAttParam.mSelCursorScaleY; + draw[0].field_0x164.z = mAttParam.mSelCursorOffsetY; + draw[0].field_0x175 = 0; + setFlag(0x40000000); + } else if (chkFlag(0x2)) { + draw[0].setAlphaAnm(mAttParam.mAttnCursorAppearFrames, 0); + draw[1].setAnm(0, mAttParam.field_0x38); + draw[1].setAlphaAnm(mAttParam.mAttnCursorDisappearFrames, 1); + + draw[1].field_0x164.x = mAttParam.mSelCursorScaleX; + draw[1].field_0x164.y = mAttParam.mSelCursorScaleY; + draw[1].field_0x164.z = mAttParam.mSelCursorOffsetY; + draw[1].field_0x175 = 0; + setFlag(0x40000000); + } else if (mLockonCount <= 0 && field_0x328 == 0) { + draw[0].setAlphaAnm(mAttParam.mAttnCursorDisappearFrames, 1); + field_0x328 = 1; + setFlag(0x40000000); + } + + if (mAttnStatus == ST_LOCK) { + if (draw[0].field_0x173 == 3) { + draw[0].field_0x173 = 4; + clrFlag(0x40000000); + } + } else if (draw[0].field_0x173 == 3) { + draw[0].field_0x173 = 4; + clrFlag(0x40000000); + field_0x328 = -1; + } } -#pragma pop /* 800720F4-800720F8 06CA34 0004+00 1/1 0/0 0/0 .text runDebugDisp__12dAttention_cFv */ -void dAttention_c::runDebugDisp() { - /* empty function */ -} +void dAttention_c::runDebugDisp() {} /* 800720F8-800722A0 06CA38 01A8+00 1/1 0/0 0/0 .text checkButton__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::checkButton() { - nofralloc -#include "asm/d/d_attention/checkButton__12dAttention_cFv.s" +void dAttention_c::checkButton() { + if (on_final_boss_stg && dComIfGp_roomControl_getStayNo() == 0 && + !dComIfGs_isSaveDunSwitch(1)) { + if (field_0x32b == 1 && LockonTarget(0) != NULL && chkFlag(0x20000000)) { + setFlag(0x1000000); + } + } + + if (i_dComIfGp_checkPlayerStatus0(0, 0x36a02311) || i_dComIfGp_checkPlayerStatus1(0, 0x11)) { + switch (field_0x32b) { + case 0: + case 1: + clrFlag(0x1000000); + field_0x32b = 4; + break; + } + + return; + } + + switch (field_0x32b) { + case 4: + if (padLockButton(mPadNo) || chkFlag(0x1000000)) { + field_0x32b = 0; + setFlag(0x200); + clrFlag(0x1000000); + } + return; + case 0: + field_0x32b = 1; + case 1: + if (chkFlag(0x1000000)) { + field_0x32b = 0; + field_0x32e = 0x3C; + setFlag(0x200); + clrFlag(0x1000000); + return; + } + + if (!padLockButton(mPadNo)) { + field_0x32b = 4; + } + } } -#pragma pop /* 800722A0-800722EC 06CBE0 004C+00 2/2 0/0 0/0 .text triggerProc__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::triggerProc() { - nofralloc -#include "asm/d/d_attention/triggerProc__12dAttention_cFv.s" +bool dAttention_c::triggerProc() { + if (chaseAttention()) { + setFlag(0x8); + return true; + } + + return false; } -#pragma pop /* 800722EC-80072344 06CC2C 0058+00 2/2 0/0 0/0 .text lostCheck__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::lostCheck() { - nofralloc -#include "asm/d/d_attention/lostCheck__12dAttention_cFv.s" +int dAttention_c::lostCheck() { + if (chaseAttention()) { + return false; + } + + setFlag(0x10); + setFlag(0x40); + return true; } -#pragma pop /* 80072344-800725F0 06CC84 02AC+00 1/1 0/0 0/0 .text judgementStatus4Hold__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::judgementStatus4Hold() { - nofralloc -#include "asm/d/d_attention/judgementStatus4Hold__12dAttention_cFv.s" +void dAttention_c::judgementStatus4Hold() { + switch (mAttnStatus) { + case ST_NONE: + field_0x32f = 0; + field_0x32e = 0; + mLockTargetID = -1; + stockAttention(); + + if (field_0x32b == 0 && triggerProc()) { + mAttnStatus = ST_LOCK; + field_0x32e = 15; + } + break; + case ST_LOCK: + mLockTargetID = LockonTargetPId(0); + field_0x32f = 0; + + if (lostCheck()) { + mLockTargetID = -1; + stockAttention(); + + if (triggerProc()) { + mAttnStatus = ST_LOCK; + } else { + mAttnStatus = ST_NONE; + freeAttention(); + setFlag(0x800000); + } + } else if (field_0x32b == 4) { + mAttnStatus = ST_RELEASE; + setFlag(0x10); + field_0x32f = 10; + } else if (field_0x32e == 0) { + initList(-1); + + if (makeList()) { + sortList(); + } + } + + if (field_0x32e != 0) { + field_0x32e--; + } + + break; + case ST_RELEASE: + setFlag(0x40); + + if (lostCheck()) { + mLockTargetID = -1; + stockAttention(); + + if (triggerProc()) { + mAttnStatus = ST_LOCK; + } else { + mAttnStatus = ST_NONE; + freeAttention(); + setFlag(0x800000); + } + } else if (field_0x32b == 0) { + if (nextAttention()) { + setFlag(0x8); + mAttnStatus = ST_LOCK; + field_0x32e = 15; + } else { + mAttnStatus = ST_NONE; + freeAttention(); + } + } else if (LockonTarget(0) == NULL || field_0x32f == 0) { + mAttnStatus = ST_NONE; + freeAttention(); + } + + if (field_0x32f != 0) { + field_0x32f--; + } + + break; + } + + if (!chkFlag(0x1000)) { + setFlag(0x4000); + initList(-1); + + if (makeList()) { + sortList(); + } + } } -#pragma pop /* 800725F0-80072924 06CF30 0334+00 1/1 0/0 0/0 .text judgementStatus4Switch__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::judgementStatus4Switch() { - nofralloc -#include "asm/d/d_attention/judgementStatus4Switch__12dAttention_cFv.s" +void dAttention_c::judgementStatus4Switch() { + switch (mAttnStatus) { + case ST_NONE: + mLockTargetID = -1; + stockAttention(); + field_0x32f = 0; + field_0x32e = 0; + + if (field_0x32b == 0 && triggerProc()) { + mAttnStatus = ST_LOCK; + field_0x32e = 15; + field_0x32f = 15; + } + break; + case ST_LOCK: + mLockTargetID = LockonTargetPId(0); + + if (field_0x32f == 0) { + mAttnStatus = ST_NONE; + freeAttention(); + } else if (lostCheck()) { + mLockTargetID = -1; + stockAttention(); + + if (triggerProc()) { + mAttnStatus = ST_LOCK; + } else { + mAttnStatus = ST_NONE; + freeAttention(); + setFlag(0x800000); + } + } else if (field_0x32b == 0) { + if (mDoCPd_c::getStickY(mPadNo) < lit_4064) { + mAttnStatus = ST_NONE; + freeAttention(); + } else if (nextAttention()) { + setFlag(0x8); + mAttnStatus = ST_LOCK; + field_0x32e = 15; + } else { + mAttnStatus = ST_NONE; + freeAttention(); + } + } else if (field_0x32e == 0) { + initList(-1); + + if (makeList()) { + sortList(); + } + } + + if (!chkFlag(0x8) && field_0x32e != 0) { + field_0x32e--; + } + + if (field_0x32b == 1) { + if (field_0x32f != 0) { + field_0x32f--; + } + } else { + field_0x32f = 15; + } + + break; + case ST_RELEASE: + setFlag(0x40); + + if (lostCheck()) { + mLockTargetID = -1; + stockAttention(); + + if (triggerProc()) { + mAttnStatus = ST_LOCK; + } else { + mAttnStatus = ST_NONE; + freeAttention(); + setFlag(0x800000); + } + } else if (field_0x32b == 0) { + mAttnStatus = ST_NONE; + + if (triggerProc()) { + mAttnStatus = ST_LOCK; + field_0x32e = 15; + field_0x32f = 15; + } + } else if (LockonTarget(0) == NULL || field_0x32f == 0) { + mAttnStatus = ST_NONE; + freeAttention(); + } + + break; + } + + if (!chkFlag(0x1000)) { + setFlag(0x4000); + initList(-1); + + if (makeList()) { + sortList(); + } + } } -#pragma pop /* 80072924-80072BD4 06D264 02B0+00 0/0 1/1 0/0 .text Run__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::Run() { - nofralloc -#include "asm/d/d_attention/Run__12dAttention_cFv.s" +int dAttention_c::Run() { + clrFlag(0x3FFFFF); + + bool usingHold = dComIfGs_getOptAttentionType() == 0; + if (attn_opt_hold != usingHold) { + setFlag(0x10000); + } + + attn_opt_hold = usingHold; + + if (mAttnBlockTimer != 0) { + mAttnBlockTimer--; + return 1; + } + + if (chkFlag(0x80)) { + mpPlayer = dComIfGp_getPlayer(0); + mPadNo = PAD_1; + } + + setOwnerAttentionPos(); + + if (i_dComIfGp_event_runCheck() || chkFlag(0x10000)) { + mAttnStatus = ST_NONE; + field_0x32b = 4; + field_0x32c = 0; + clrFlag(0x20000000); + clrFlag(0x10000000); + mLockTargetID = -1; + freeAttention(); + } else { + checkButton(); + + if (attn_opt_hold) { + judgementStatus4Hold(); + } else { + judgementStatus4Switch(); + } + + if ((mFlags >> 0x17) & 1) { + freeAttention(); + if (LockonTarget(0) == NULL) { + setFlag(0x20000020); + } + setFlag(0x10000000); + clrFlag(0x800000); + } else if (chkFlag(0x10000000)) { + if (!padLockButton(mPadNo)) { + if (chkFlag(0x20000000)) { + lockSoundStart(Z2SE_SY_CAMERA_L_CANCEL); + clrFlag(0x20000000); + } + + clrFlag(0x10000000); + } + } else { + if (padLockButton(mPadNo)) { + if (LockonTarget(0) == NULL) { + lockSoundStart(Z2SE_SY_CAMERA_L_MOVE); + setFlag(0x20000020); + } + + setFlag(0x10000000); + } + } + } + + field_0x32a = mAttnStatus; + + runSoundProc(); + runDrawProc(); + runDebugDisp(); + + if (mAttnStatus == ST_LOCK) { + dComIfGp_onCameraAttentionStatus(mPadNo, 1); + } else { + dComIfGp_offCameraAttentionStatus(mPadNo, 1); + } + + mZHintTarget.proc(); + mCatghTarget.proc(); + mLookTarget.proc(); + + return 1; } -#pragma pop /* 80072BD4-80072D80 06D514 01AC+00 0/0 1/1 0/0 .text Draw__12dAttention_cFv */ +// reg stuff +#ifdef NONMATCHING +void dAttention_c::Draw() { + if (mAttParam.CheckFlag(0x10)) { + draw[0].field_0x173 = 3; + draw[1].field_0x173 = 3; + return; + } + + Mtx tmp; + PSMTXInverse(dComIfGd_getViewRotMtx(), tmp); + fopAc_ac_c* target = LockonTarget(0); + + if (!i_dComIfGp_event_runCheck()) { + if (target != NULL) { + draw[0].draw(target->mAttentionInfo.mPosition, tmp); + + if (mLockonCount >= 2 && draw[1].field_0x173 == 2) { + int listIdx = mLockOnOffset; + + if (listIdx == 0) { + listIdx = mLockonCount - 1; + } else { + listIdx--; + } + + if (mLockOnList[listIdx].getActor() != NULL) { + fopAc_ac_c* actor = mLockOnList[listIdx].getActor(); + draw[1].draw(actor->mAttentionInfo.mPosition, tmp); + } + } + + mTargetActorID = fopAcM_GetID(target); + mDrawAttnPos = target->mAttentionInfo.mPosition; + field_0x328 = 0; + } else if (field_0x328 > 0) { + fopAc_ac_c* actor = fopAcM_SearchByID(mTargetActorID); + + if (actor != NULL) { + draw[0].draw(actor->mAttentionInfo.mPosition, tmp); + mDrawAttnPos = actor->mAttentionInfo.mPosition; + } else { + draw[0].draw(mDrawAttnPos, tmp); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -786,9 +1683,18 @@ asm void dAttention_c::Draw() { #include "asm/d/d_attention/Draw__12dAttention_cFv.s" } #pragma pop +#endif /* 80072D80-80072DD8 06D6C0 0058+00 2/2 0/0 0/0 .text lockSoundStart__12dAttention_cFUl */ +// matches with literals +#ifdef NONMATCHING +void dAttention_c::lockSoundStart(u32 i_sfxID) { + if (!chkFlag(0x400000)) { + mDoAud_seStart(i_sfxID, NULL, 0, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -797,6 +1703,7 @@ asm void dAttention_c::lockSoundStart(u32 param_0) { #include "asm/d/d_attention/lockSoundStart__12dAttention_cFUl.s" } #pragma pop +#endif /* 80072DD8-80072FE8 06D718 0210+00 1/1 0/0 0/0 .text setAnm__10dAttDraw_cFUcf */ #pragma push @@ -809,14 +1716,12 @@ asm void dAttDraw_c::setAnm(u8 param_0, f32 param_1) { #pragma pop /* 80072FE8-80073004 06D928 001C+00 1/1 0/0 0/0 .text setAlphaAnm__10dAttDraw_cFUcUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttDraw_c::setAlphaAnm(u8 param_0, u8 param_1) { - nofralloc -#include "asm/d/d_attention/setAlphaAnm__10dAttDraw_cFUcUc.s" +void dAttDraw_c::setAlphaAnm(u8 param_0, u8 param_1) { + field_0x171 = param_0; + field_0x172 = 0; + field_0x173 = 2; + field_0x174 = param_1; } -#pragma pop /* ############################################################################################## */ /* 804526A0-804526A8 000CA0 0004+04 1/1 0/0 0/0 .sdata2 @5668 */ @@ -853,190 +1758,243 @@ SECTION_SDATA2 static f32 lit_5784 = 0.01745329238474369f; SECTION_SDATA2 static f32 lit_5785 = -100.0f; /* 800732B0-8007353C 06DBF0 028C+00 1/1 0/0 0/0 .text draw__10dAttDraw_cFR4cXyzPA4_f */ +// matches with literals +#ifdef NONMATCHING +void dAttDraw_c::draw(cXyz& param_0, Mtx param_1) { + J3DModelData* modelData = mModel[field_0x170]->getModelData(); + + mDoMtx_stack_c::transS(param_0.x, param_0.y + field_0x164.z, param_0.z); + mDoMtx_stack_c::concat(param_1); + mModel[field_0x170]->i_setBaseTRMtx(mDoMtx_stack_c::get()); + + view_class* view = dComIfGd_getView(); + f32 temp_f31 = tan(0.01745329238474369f * (0.5f * view->mFovy)); + f32 temp_f30 = (-100.0f - g_AttDwHIO.mCursorDistance) / temp_f31; + + cXyz tmp; + PSMTXMultVec(dComIfGd_getViewMtx(), ¶m_0, &tmp); + + f32 var_f2 = 1.0f; + if (tmp.z < temp_f30) { + var_f2 = (tmp.z * temp_f31) / (-100.0f - g_AttDwHIO.mCursorDistance); + } + + mModel[field_0x170]->setBaseScale( + cXyz(field_0x164.x * var_f2, field_0x164.y * var_f2, field_0x164.x * var_f2)); + + alphaAnm(); + + if (field_0x175 != 0) { + mImpactBck.entry(modelData); + mImpactBpk.entry(modelData); + mImpactBrk.entry(modelData); + mImpactBtk.entry(modelData); + } else { + mNoticeCursorBck[field_0x170].entry(modelData); + mNoticeCursorBpk[field_0x170].entry(modelData); + mNoticeCursorBrk[field_0x170].entry(modelData); + mNoticeCursorBtk[field_0x170].entry(modelData); + mNoticeCursor02Brk[field_0x170].entry(modelData); + } + + dComIfGd_setList3Dlast(); + mDoExt_modelUpdateDL(mModel[field_0x170]); + dComIfGd_setList(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dAttDraw_c::draw(cXyz& param_0, f32 (*param_1)[4]) { +asm void dAttDraw_c::draw(cXyz& param_0, Mtx param_1) { nofralloc #include "asm/d/d_attention/draw__10dAttDraw_cFR4cXyzPA4_f.s" } #pragma pop +#endif /* 8007353C-800735DC 06DE7C 00A0+00 8/8 13/13 21/21 .text LockonTarget__12dAttention_cFl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::LockonTarget(s32 param_0) { - nofralloc -#include "asm/d/d_attention/LockonTarget__12dAttention_cFl.s" +fopAc_ac_c* dAttention_c::LockonTarget(s32 param_0) { + if (i_dComIfGp_checkPlayerStatus0(0, 0x36A02311) || i_dComIfGp_checkPlayerStatus1(0, 0x11)) { + return NULL; + } + + if (param_0 >= mLockonCount) { + return NULL; + } + + int listIdx = mLockOnOffset + param_0; + if (listIdx >= mLockonCount) { + listIdx -= mLockonCount; + } + + fopAc_ac_c* actor = mLockOnList[listIdx].getActor(); + if (actor == NULL || !(actor->mAttentionInfo.mFlags & 7)) { + return NULL; + } + + return actor; } -#pragma pop /* 800735DC-800736CC 06DF1C 00F0+00 0/0 1/1 0/0 .text LockonReleaseDistanse__12dAttention_cFv */ +#ifdef NONMATCHING +f32 dAttention_c::LockonReleaseDistanse() { + if (!LockonTruth()) { + return 0.0f; + } + + fopAc_ac_c* actor = mLockOnList[mLockOnOffset].getActor(); + if (actor == NULL) { + return 0.0f; + } + + int idx = mLockOnList[mLockOnOffset].mType + actor->mAttentionInfo.field_0x0[0]; + cSGlobe tmp_g(actor->mAttentionInfo.mPosition - mOwnerAttnPos); + cSAngle tmp_a(tmp_g.U() - mpPlayer->mCollisionRot.y); + + return distace_angle_adjust(dist_table[idx].field_0x8, tmp_a, 1.0f) + dist_table[idx].field_0x4; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dAttention_c::LockonReleaseDistanse() { +asm f32 dAttention_c::LockonReleaseDistanse() { nofralloc #include "asm/d/d_attention/LockonReleaseDistanse__12dAttention_cFv.s" } #pragma pop +#endif /* 800736CC-80073734 06E00C 0068+00 2/2 0/0 0/0 .text LockonTargetPId__12dAttention_cFl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::LockonTargetPId(s32 param_0) { - nofralloc -#include "asm/d/d_attention/LockonTargetPId__12dAttention_cFl.s" +u32 dAttention_c::LockonTargetPId(s32 param_0) { + if (i_dComIfGp_checkPlayerStatus0(0, 0x36A02311) || i_dComIfGp_checkPlayerStatus1(0, 0x11)) { + return -1; + } + + if (param_0 >= mLockonCount) { + return -1; + } + + int listIdx = mLockOnOffset + param_0; + if (listIdx >= mLockonCount) { + listIdx -= mLockonCount; + } + + return mLockOnList[listIdx].getPid(); } -#pragma pop /* 80073734-8007378C 06E074 0058+00 0/0 3/3 2/2 .text ActionTarget__12dAttention_cFl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::ActionTarget(s32 param_0) { - nofralloc -#include "asm/d/d_attention/ActionTarget__12dAttention_cFl.s" +fopAc_ac_c* dAttention_c::ActionTarget(s32 param_0) { + if (param_0 >= mActionCount) { + return NULL; + } + + int listIdx = mActionOffset + param_0; + if (listIdx >= mActionCount) { + listIdx -= mActionCount; + } + + return mActionList[listIdx].getActor(); } -#pragma pop /* 8007378C-800737E4 06E0CC 0058+00 0/0 3/3 0/0 .text CheckObjectTarget__12dAttention_cFl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::CheckObjectTarget(s32 param_0) { - nofralloc -#include "asm/d/d_attention/CheckObjectTarget__12dAttention_cFl.s" +fopAc_ac_c* dAttention_c::CheckObjectTarget(s32 param_0) { + if (param_0 >= mCheckObjectCount) { + return NULL; + } + + int listIdx = mCheckObjectOffset + param_0; + if (listIdx >= mCheckObjectCount) { + listIdx -= mCheckObjectCount; + } + + return mCheckObjectList[listIdx].getActor(); } -#pragma pop /* 800737E4-80073838 06E124 0054+00 3/3 53/53 37/37 .text LockonTruth__12dAttention_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool dAttention_c::LockonTruth() { - nofralloc -#include "asm/d/d_attention/LockonTruth__12dAttention_cFv.s" +bool dAttention_c::LockonTruth() { + return (mAttnStatus == ST_LOCK || mAttnStatus == ST_RELEASE) && LockonTarget(0); } -#pragma pop /* 80073838-80073864 06E178 002C+00 0/0 1/1 0/0 .text * checkDistance__12dAttention_cFP4cXyzsP4cXyzffff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttention_c::checkDistance(cXyz* param_0, s16 param_1, cXyz* param_2, f32 param_3, - f32 param_4, f32 param_5, f32 param_6) { - nofralloc -#include "asm/d/d_attention/checkDistance__12dAttention_cFP4cXyzsP4cXyzffff.s" +int dAttention_c::checkDistance(cXyz* param_0, s16 param_1, cXyz* param_2, f32 param_3, f32 param_4, + f32 param_5, f32 param_6) { + return check_distace(param_0, param_1, param_2, param_3, param_4, param_5, param_6); } -#pragma pop /* 80073864-80073898 06E1A4 0034+00 11/11 3/3 8/8 .text getActor__10dAttList_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttList_c::getActor() { - nofralloc -#include "asm/d/d_attention/getActor__10dAttList_cFv.s" +fopAc_ac_c* dAttList_c::getActor() { + return fopAcM_SearchByID(mActorID); } -#pragma pop /* 80073898-800738B4 06E1D8 001C+00 3/3 0/0 0/0 .text setActor__10dAttList_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttList_c::setActor(fopAc_ac_c* param_0) { - nofralloc -#include "asm/d/d_attention/setActor__10dAttList_cFP10fopAc_ac_c.s" +void dAttList_c::setActor(fopAc_ac_c* i_actor) { + mActorID = fopAcM_GetID(i_actor); } -#pragma pop /* 800738B4-800738CC 06E1F4 0018+00 1/1 0/0 0/0 .text getPId__10dAttHint_cFPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttHint_c::getPId(void* param_0) { - nofralloc -#include "asm/d/d_attention/getPId__10dAttHint_cFPv.s" +u32 dAttHint_c::getPId(void* i_actor) { + return fopAcM_GetID(i_actor); } -#pragma pop /* 800738CC-800738FC 06E20C 0030+00 0/0 1/1 0/0 .text convPId__10dAttHint_cFUi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttHint_c::convPId(unsigned int param_0) { - nofralloc -#include "asm/d/d_attention/convPId__10dAttHint_cFUi.s" +fopAc_ac_c* dAttHint_c::convPId(unsigned int i_id) { + return fopAcM_SearchByID(i_id); } -#pragma pop /* 800738FC-80073958 06E23C 005C+00 0/0 0/0 6/6 .text request__10dAttHint_cFP10fopAc_ac_ci */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttHint_c::request(fopAc_ac_c* param_0, int param_1) { - nofralloc -#include "asm/d/d_attention/request__10dAttHint_cFP10fopAc_ac_ci.s" +int dAttHint_c::request(fopAc_ac_c* i_actor, int i_priority) { + if (i_priority < 0) { + i_priority = 0x1FF; + } + + if (i_priority <= mPriority) { + mHintActorID = getPId(i_actor); + mPriority = i_priority; + } + + return 1; } -#pragma pop /* 80073958-80073970 06E298 0018+00 1/1 0/0 0/0 .text init__10dAttHint_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttHint_c::init() { - nofralloc -#include "asm/d/d_attention/init__10dAttHint_cFv.s" +void dAttHint_c::init() { + mHintActorID = -1; + field_0x8 = -1; + mPriority = 0x200; } -#pragma pop /* 80073970-8007398C 06E2B0 001C+00 1/1 0/0 0/0 .text proc__10dAttHint_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttHint_c::proc() { - nofralloc -#include "asm/d/d_attention/proc__10dAttHint_cFv.s" +void dAttHint_c::proc() { + field_0x8 = mHintActorID; + mHintActorID = -1; + mPriority = 0x200; } -#pragma pop /* 8007398C-800739BC 06E2CC 0030+00 0/0 4/4 0/0 .text convPId__11dAttCatch_cFUi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm s32 dAttCatch_c::convPId(unsigned int param_0) { - nofralloc -#include "asm/d/d_attention/convPId__11dAttCatch_cFUi.s" +fopAc_ac_c* dAttCatch_c::convPId(unsigned int i_id) { + return fopAcM_SearchByID(i_id); } -#pragma pop /* 800739BC-800739DC 06E2FC 0020+00 1/1 0/0 0/0 .text init__11dAttCatch_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttCatch_c::init() { - nofralloc -#include "asm/d/d_attention/init__11dAttCatch_cFv.s" +void dAttCatch_c::init() { + field_0xc = 0x67; + field_0x0 = -1; + mCatghTargetID = -1; + field_0x4 = 3; } -#pragma pop /* 800739DC-80073A08 06E31C 002C+00 1/1 0/0 0/0 .text proc__11dAttCatch_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttCatch_c::proc() { - nofralloc -#include "asm/d/d_attention/proc__11dAttCatch_cFv.s" +void dAttCatch_c::proc() { + mCatghTargetID = field_0x0; + mChangeItem = field_0xc; + field_0x0 = -1; + field_0x4 = 3; + field_0xc = 0x67; } -#pragma pop /* 80073A08-80073CA4 06E348 029C+00 0/0 0/0 10/10 .text * request__11dAttCatch_cFP10fopAc_ac_cUcfffsi */ @@ -1051,34 +2009,23 @@ asm void dAttCatch_c::request(fopAc_ac_c* param_0, u8 param_1, f32 param_2, f32 #pragma pop /* 80073CA4-80073CD4 06E5E4 0030+00 0/0 1/1 0/0 .text convPId__10dAttLook_cFUi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttLook_c::convPId(unsigned int param_0) { - nofralloc -#include "asm/d/d_attention/convPId__10dAttLook_cFUi.s" +fopAc_ac_c* dAttLook_c::convPId(unsigned int i_id) { + return fopAcM_SearchByID(i_id); } -#pragma pop /* 80073CD4-80073CEC 06E614 0018+00 1/1 0/0 0/0 .text init__10dAttLook_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttLook_c::init() { - nofralloc -#include "asm/d/d_attention/init__10dAttLook_cFv.s" +void dAttLook_c::init() { + field_0x0 = -1; + mLookTargetID = -1; + field_0x4 = 3; } -#pragma pop /* 80073CEC-80073D08 06E62C 001C+00 1/1 0/0 0/0 .text proc__10dAttLook_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dAttLook_c::proc() { - nofralloc -#include "asm/d/d_attention/proc__10dAttLook_cFv.s" +void dAttLook_c::proc() { + mLookTargetID = field_0x0; + field_0x0 = -1; + field_0x4 = 3; } -#pragma pop /* 80073D08-80073FC4 06E648 02BC+00 0/0 0/0 7/7 .text request__10dAttLook_cFP10fopAc_ac_cfffsi */ #pragma push @@ -1092,15 +2039,7 @@ asm void dAttLook_c::request(fopAc_ac_c* param_0, f32 param_1, f32 param_2, f32 #pragma pop /* 80073FC4-8007400C 06E904 0048+00 2/1 0/0 0/0 .text __dt__15dAttDrawParam_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dAttDrawParam_c::~dAttDrawParam_c() { -extern "C" asm void __dt__15dAttDrawParam_cFv() { - nofralloc -#include "asm/d/d_attention/__dt__15dAttDrawParam_cFv.s" -} -#pragma pop +dAttDrawParam_c::~dAttDrawParam_c() {} /* ############################################################################################## */ /* 8045067A-8045067E -00001 0004+00 0/0 0/0 0/0 .sdata None */ diff --git a/src/d/d_demo.cpp b/src/d/d_demo.cpp index ee205a18c86..370e64da471 100644 --- a/src/d/d_demo.cpp +++ b/src/d/d_demo.cpp @@ -5,10 +5,10 @@ #include "d/d_demo.h" #include "d/com/d_com_inf_game.h" +#include "d/msg/d_msg_object.h" #include "dol2asm.h" #include "dolphin/types.h" #include "rel/d/a/d_a_movie_player/d_a_movie_player.h" -#include "d/msg/d_msg_object.h" // // Forward References: @@ -506,37 +506,21 @@ SECTION_DATA extern void* data_803A7BF4[9] = { namespace { /* 80037DE4-80037E44 032724 0060+00 1/0 0/0 0/0 .text * __dt__Q220@unnamed@d_demo_cpp@24jstudio_tAdaptor_messageFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm jstudio_tAdaptor_message::~jstudio_tAdaptor_message() { - nofralloc -#include "asm/d/d_demo/func_80037DE4.s" -} -#pragma pop +jstudio_tAdaptor_message::~jstudio_tAdaptor_message() {} /* 80037E44-80037E74 032784 0030+00 1/0 0/0 0/0 .text * adaptor_do_MESSAGE__Q220@unnamed@d_demo_cpp@24jstudio_tAdaptor_messageFQ37JStudio4data15TEOperationDataPCvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void jstudio_tAdaptor_message::adaptor_do_MESSAGE(JStudio::data::TEOperationData param_0, const void* param_1, u32 param_2) { - nofralloc -#include "asm/d/d_demo/func_80037E44.s" +void jstudio_tAdaptor_message::adaptor_do_MESSAGE(JStudio::data::TEOperationData param_0, + const void* pContent, u32 uSize) { + if (param_0 == JStudio::data::UNK_0x19) { + dMsgObject_setDemoMessage(*(u32*)pContent); + } } -#pragma pop /* 80037E74-80037ED4 0327B4 0060+00 1/0 0/0 0/0 .text * __dt__Q220@unnamed@d_demo_cpp@29jstudio_tCreateObject_messageFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm jstudio_tCreateObject_message::~jstudio_tCreateObject_message() { - nofralloc -#include "asm/d/d_demo/func_80037E74.s" -} -#pragma pop +jstudio_tCreateObject_message::~jstudio_tCreateObject_message() {} /* 80037ED4-80038020 032814 014C+00 1/0 0/0 0/0 .text * create__Q220@unnamed@d_demo_cpp@29jstudio_tCreateObject_messageFPPQ27JStudio7TObjectRCQ47JStudio3stb4data20TParse_TBlock_object @@ -544,7 +528,9 @@ asm jstudio_tCreateObject_message::~jstudio_tCreateObject_message() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void jstudio_tCreateObject_message::create(JStudio::TObject** param_0, const JStudio::stb::data::TParse_TBlock_object& param_1) { +asm void +jstudio_tCreateObject_message::create(JStudio::TObject** param_0, + const JStudio::stb::data::TParse_TBlock_object& param_1) { nofralloc #include "asm/d/d_demo/func_80037ED4.s" } @@ -611,6 +597,18 @@ SECTION_SDATA2 static u8 lit_4040[4] = { SECTION_SDATA2 static f32 lit_4041 = 1.0f; /* 80038020-80038098 032960 0078+00 1/1 0/0 0/0 .text __ct__13dDemo_actor_cFv */ +// matches with literals +#ifdef NONMATCHING +dDemo_actor_c::dDemo_actor_c() { + mFlags = 0; + mTrans.set(0.0f, 0.0f, 0.0f); + mScale.set(1.0f, 1.0f, 1.0f); + mRotate.set(0, 0, 0); + mModel = NULL; + mAnmFrameMax = __float_max[0]; + mTexAnmFrameMax = __float_max[0]; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -619,8 +617,24 @@ asm dDemo_actor_c::dDemo_actor_c() { #include "asm/d/d_demo/__ct__13dDemo_actor_cFv.s" } #pragma pop +#endif /* 80038098-80038128 0329D8 0090+00 1/0 0/0 0/0 .text __dt__13dDemo_actor_cFv */ +// matches with vtable data +#ifdef NONMATCHING +dDemo_actor_c::~dDemo_actor_c() { + fopAc_ac_c* actor = getActor(); + if (actor != NULL) { + actor->mDemoActorId = 0; + } + + mActorId = -1; + mOldAnmId = -1; + mBtpId = -1; + mBtkId = -1; + mBrkId = -1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -630,26 +644,26 @@ extern "C" asm void __dt__13dDemo_actor_cFv() { #include "asm/d/d_demo/__dt__13dDemo_actor_cFv.s" } #pragma pop +#endif /* 80038128-8003815C 032A68 0034+00 1/1 0/0 0/0 .text getActor__13dDemo_actor_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::getActor() { - nofralloc -#include "asm/d/d_demo/getActor__13dDemo_actor_cFv.s" +fopAc_ac_c* dDemo_actor_c::getActor() { + return fopAcM_SearchByID(mActorId); } -#pragma pop /* 8003815C-8003819C 032A9C 0040+00 1/1 1/1 0/0 .text setActor__13dDemo_actor_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::setActor(fopAc_ac_c* param_0) { - nofralloc -#include "asm/d/d_demo/setActor__13dDemo_actor_cFP10fopAc_ac_c.s" +void dDemo_actor_c::setActor(fopAc_ac_c* pActor) { + if (pActor == NULL) { + mActorId = -1; + } else { + mActorId = fopAcM_GetID(pActor); + } + + mOldAnmId = -1; + mBtpId = -1; + mBtkId = -1; + mBrkId = -1; } -#pragma pop /* ############################################################################################## */ /* 80451DB8-80451DC0 0003B8 0008+00 4/4 0/0 0/0 .sdata2 @4127 */ @@ -659,7 +673,7 @@ SECTION_SDATA2 static f64 lit_4127 = 4503601774854144.0 /* cast s32 to float */; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dDemo_actor_c::getPrm_Morf() { +asm f32 dDemo_actor_c::getPrm_Morf() { nofralloc #include "asm/d/d_demo/getPrm_Morf__13dDemo_actor_cFv.s" } @@ -729,7 +743,7 @@ const u8* dDemo_c::m_branchData; static u8 struct_80450E48[4]; /* 80450E4C-80450E50 00034C 0004+00 1/1 0/0 0/0 .sbss it$4206 */ -static u8 it[4]; +static int it; /* 80038338-80038490 032C78 0158+00 0/0 1/1 5/5 .text getDemoIDData__13dDemo_actor_cFPiPiPiPUsPUc */ @@ -747,7 +761,7 @@ asm void dDemo_actor_c::getDemoIDData(int* param_0, int* param_1, int* param_2, #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void dDemo_getJaiPointer(char const* param_0, u32 param_1, int param_2, u16* param_3) { +static asm void* dDemo_getJaiPointer(char const* param_0, u32 param_1, int param_2, u16* param_3) { nofralloc #include "asm/d/d_demo/dDemo_getJaiPointer__FPCcUliPUs.s" } @@ -759,20 +773,93 @@ SECTION_SDATA2 static f32 lit_4152 = -1.0f; /* 80038518-800387A8 032E58 0290+00 0/0 0/0 2/2 .text * dDemo_setDemoData__FP10fopAc_ac_cUcP14mDoExt_McaMorfPCciPUsUlSc */ +// reg alloc +#ifdef NONMATCHING +int dDemo_setDemoData(fopAc_ac_c* param_0, u8 param_1, mDoExt_McaMorf* param_2, char const* param_3, + int param_4, u16* param_5, u32 param_6, s8 param_7) { + dDemo_actor_c* demo_actor = dDemo_c::getActor(param_0->mDemoActorId); + + if (demo_actor == NULL) { + return 0; + } + + u32 flags = demo_actor->checkEnable(param_1); + if (flags & 2) { + param_0->current.pos = demo_actor->getTrans(); + param_0->next.pos = param_0->current.pos; + } + + if (flags & 8) { + param_0->mCollisionRot = demo_actor->getRatate(); + } + + if (flags & 4) { + param_0->mScale = demo_actor->getScale(); + } + + if (flags & 0x80) { + param_0->mGravity = demo_actor->getPrm_Morf(); + } + + if (param_2 == NULL) { + return 1; + } + + demo_actor->setModel(param_2->getModel()); + + if (flags & 0x20) { + u32 anmID = demo_actor->getAnmId(); + + if (anmID != demo_actor->getOldAnmId()) { + const char* a_name; + if (anmID & 0x10000) { + a_name = dStage_roomControl_c::getDemoArcName(); + } else { + a_name = param_3; + } + + demo_actor->setOldAnmId(anmID); + + J3DAnmTransform* i_key = (J3DAnmTransform*)dComIfG_getObjectIDRes(a_name, anmID); + void* ptr = dDemo_getJaiPointer(a_name, anmID, param_4, param_5); + + param_2->setAnm(i_key, -1, demo_actor->getPrm_Morf(), 1.0f, 0.0f, -1.0f, ptr); + demo_actor->setAnmFrameMax(param_2->getEndFrame()); + } + } + + if (flags & 0x40) { + f32 anm_frame = demo_actor->getAnmFrame(); + + if (anm_frame > 1.0f) { + param_2->setFrame(anm_frame - 1.0f); + param_2->play(¶m_0->current.pos, param_6, param_7); + } else { + param_2->setFrame(anm_frame); + } + } else { + param_2->play(¶m_0->current.pos, param_6, param_7); + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dDemo_setDemoData(fopAc_ac_c* param_0, u8 param_1, mDoExt_McaMorf* param_2, - char const* param_3, int param_4, u16* param_5, u32 param_6, + char const* a_name, int param_4, u16* param_5, u32 param_6, s8 param_7) { nofralloc #include "asm/d/d_demo/dDemo_setDemoData__FP10fopAc_ac_cUcP14mDoExt_McaMorfPCciPUsUlSc.s" } #pragma pop +#endif /* 800387A8-800387EC 0330E8 0044+00 1/1 0/0 0/0 .text branchFile__FPCc */ static void branchFile(char const* resName) { - dDemo_c::setBranchData((u8*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), resName)); + dDemo_c::setBranchData( + (u8*)dComIfG_getObjectRes(dStage_roomControl_c::getDemoArcName(), resName)); } /* ############################################################################################## */ @@ -814,258 +901,205 @@ asm void dDemo_actor_c::JSGSetTranslation(Vec const& param_0) { #pragma pop /* 80038980-800389A8 0332C0 0028+00 1/0 0/0 0/0 .text JSGSetScaling__13dDemo_actor_cFRC3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetScaling(Vec const& param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetScaling__13dDemo_actor_cFRC3Vec.s" +void dDemo_actor_c::JSGSetScaling(Vec const& i_scale) { + mScale = i_scale; + onEnable(0x4); } -#pragma pop - -/* ############################################################################################## */ -/* 80451DCC-80451DD0 0003CC 0004+00 1/1 0/0 0/0 .sdata2 @4567 */ -SECTION_SDATA2 static f32 lit_4567 = 182.04444885253906f; /* 800389A8-80038A0C 0332E8 0064+00 1/0 0/0 0/0 .text JSGSetRotation__13dDemo_actor_cFRC3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetRotation(Vec const& param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetRotation__13dDemo_actor_cFRC3Vec.s" +void dDemo_actor_c::JSGSetRotation(Vec const& i_rotate) { + mRotate.x = i_rotate.x * 182.04444885253906f; + mRotate.y = i_rotate.y * 182.04444885253906f; + mRotate.z = i_rotate.z * 182.04444885253906f; + onEnable(0x8); } -#pragma pop /* 80038A0C-80038A20 03334C 0014+00 1/0 0/0 0/0 .text JSGSetShape__13dDemo_actor_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetShape(u32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetShape__13dDemo_actor_cFUl.s" +void dDemo_actor_c::JSGSetShape(u32 i_shape) { + mShape = i_shape; + onEnable(0x10); } -#pragma pop /* 80038A20-80038A40 033360 0020+00 1/0 0/0 0/0 .text JSGSetAnimation__13dDemo_actor_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetAnimation(u32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetAnimation__13dDemo_actor_cFUl.s" +void dDemo_actor_c::JSGSetAnimation(u32 i_anmID) { + mAnmId = i_anmID; + mAnmFrameMax = __float_max[0]; + onEnable(0x20); } -#pragma pop /* 80038A40-80038A54 033380 0014+00 1/0 0/0 0/0 .text JSGSetAnimationFrame__13dDemo_actor_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetAnimationFrame(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetAnimationFrame__13dDemo_actor_cFf.s" +void dDemo_actor_c::JSGSetAnimationFrame(f32 i_frame) { + mAnmFrame = i_frame; + onEnable(0x40); } -#pragma pop /* 80038A54-80038A68 033394 0014+00 1/0 0/0 0/0 .text JSGSetAnimationTransition__13dDemo_actor_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetAnimationTransition(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetAnimationTransition__13dDemo_actor_cFf.s" +void dDemo_actor_c::JSGSetAnimationTransition(f32 i_trans) { + mAnmTransition = i_trans; + onEnable(0x80); } -#pragma pop /* 80038A68-80038A7C 0333A8 0014+00 1/0 0/0 0/0 .text JSGSetTextureAnimation__13dDemo_actor_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetTextureAnimation(u32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetTextureAnimation__13dDemo_actor_cFUl.s" +void dDemo_actor_c::JSGSetTextureAnimation(u32 i_anm) { + mTexAnm = i_anm; + onEnable(0x100); } -#pragma pop /* 80038A7C-80038A90 0333BC 0014+00 1/0 0/0 0/0 .text * JSGSetTextureAnimationFrame__13dDemo_actor_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGSetTextureAnimationFrame(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetTextureAnimationFrame__13dDemo_actor_cFf.s" +void dDemo_actor_c::JSGSetTextureAnimationFrame(f32 i_frame) { + mTexAnmFrame = i_frame; + onEnable(0x200); } -#pragma pop /* 80038A90-80038AC4 0333D0 0034+00 8/8 0/0 0/0 .text getView__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void getView() { - nofralloc -#include "asm/d/d_demo/getView__Fv.s" +static view_class* getView() { + if (dComIfGp_getWindowNum() == 0) { + return NULL; + } + + int camID = dComIfGp_getWindow(0)->getCameraID(); + return dComIfGp_getCamera(camID); } -#pragma pop /* 80038AC4-80038AF8 033404 0034+00 1/0 0/0 0/0 .text JSGGetProjectionNear__14dDemo_camera_cCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm f32 dDemo_camera_c::JSGGetProjectionNear() const { - nofralloc -#include "asm/d/d_demo/JSGGetProjectionNear__14dDemo_camera_cCFv.s" +f32 dDemo_camera_c::JSGGetProjectionNear() const { + view_class* view = getView(); + + if (view == NULL) { + return FLOAT_LABEL(lit_4040); + } + + return view->mNear; } -#pragma pop /* 80038AF8-80038B0C 033438 0014+00 1/0 0/0 0/0 .text JSGSetProjectionNear__14dDemo_camera_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetProjectionNear(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetProjectionNear__14dDemo_camera_cFf.s" +void dDemo_camera_c::JSGSetProjectionNear(f32 i_projNear) { + mProjNear = i_projNear; + onEnable(0x1); } -#pragma pop /* 80038B0C-80038B40 03344C 0034+00 1/0 0/0 0/0 .text JSGGetProjectionFar__14dDemo_camera_cCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm f32 dDemo_camera_c::JSGGetProjectionFar() const { - nofralloc -#include "asm/d/d_demo/JSGGetProjectionFar__14dDemo_camera_cCFv.s" +f32 dDemo_camera_c::JSGGetProjectionFar() const { + view_class* view = getView(); + + if (view == NULL) { + return lit_4041; + } + + return view->mFar; } -#pragma pop /* 80038B40-80038B54 033480 0014+00 1/0 0/0 0/0 .text JSGSetProjectionFar__14dDemo_camera_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetProjectionFar(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetProjectionFar__14dDemo_camera_cFf.s" +void dDemo_camera_c::JSGSetProjectionFar(f32 i_projFar) { + mProjFar = i_projFar; + onEnable(0x2); } -#pragma pop - -/* ############################################################################################## */ -/* 80451DD0-80451DD4 0003D0 0004+00 1/1 0/0 0/0 .sdata2 @4642 */ -SECTION_SDATA2 static f32 lit_4642 = 60.0f; /* 80038B54-80038B88 033494 0034+00 1/0 0/0 0/0 .text JSGGetProjectionFovy__14dDemo_camera_cCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm f32 dDemo_camera_c::JSGGetProjectionFovy() const { - nofralloc -#include "asm/d/d_demo/JSGGetProjectionFovy__14dDemo_camera_cCFv.s" +f32 dDemo_camera_c::JSGGetProjectionFovy() const { + view_class* view = getView(); + + if (view == NULL) { + return 60.0f; + } + + return view->mFovy; } -#pragma pop /* 80038B88-80038B9C 0334C8 0014+00 1/0 0/0 0/0 .text JSGSetProjectionFovy__14dDemo_camera_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetProjectionFovy(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetProjectionFovy__14dDemo_camera_cFf.s" +void dDemo_camera_c::JSGSetProjectionFovy(f32 i_projFovy) { + mProjFovy = i_projFovy; + onEnable(0x4); } -#pragma pop - -/* ############################################################################################## */ -/* 80451DD4-80451DD8 0003D4 0004+00 1/1 0/0 0/0 .sdata2 @4655 */ -SECTION_SDATA2 static f32 lit_4655 = 19.0f / 14.0f; /* 80038B9C-80038BD0 0334DC 0034+00 1/0 0/0 0/0 .text JSGGetProjectionAspect__14dDemo_camera_cCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm f32 dDemo_camera_c::JSGGetProjectionAspect() const { - nofralloc -#include "asm/d/d_demo/JSGGetProjectionAspect__14dDemo_camera_cCFv.s" +f32 dDemo_camera_c::JSGGetProjectionAspect() const { + view_class* view = getView(); + + if (view == NULL) { + return 1.3571428f; + } + + return view->mAspect; } -#pragma pop /* 80038BD0-80038BE4 033510 0014+00 1/0 0/0 0/0 .text JSGSetProjectionAspect__14dDemo_camera_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetProjectionAspect(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetProjectionAspect__14dDemo_camera_cFf.s" +void dDemo_camera_c::JSGSetProjectionAspect(f32 i_aspect) { + mProjAspect = i_aspect; + onEnable(0x8); } -#pragma pop /* 80038BE4-80038C44 033524 0060+00 1/0 0/0 0/0 .text JSGGetViewPosition__14dDemo_camera_cCFP3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGGetViewPosition(Vec* param_0) const { - nofralloc -#include "asm/d/d_demo/JSGGetViewPosition__14dDemo_camera_cCFP3Vec.s" +void dDemo_camera_c::JSGGetViewPosition(Vec* o_position) const { + view_class* view = getView(); + + if (view == NULL) { + f32 tmp_0 = FLOAT_LABEL(lit_4040); + o_position->x = tmp_0; + o_position->y = tmp_0; + o_position->z = tmp_0; + } else { + *o_position = view->mLookat.mEye; + } } -#pragma pop /* 80038C44-80038C6C 033584 0028+00 1/0 0/0 0/0 .text JSGSetViewPosition__14dDemo_camera_cFRC3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetViewPosition(Vec const& param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetViewPosition__14dDemo_camera_cFRC3Vec.s" +void dDemo_camera_c::JSGSetViewPosition(Vec const& i_position) { + mViewPos = i_position; + onEnable(0x10); } -#pragma pop /* 80038C6C-80038CD0 0335AC 0064+00 1/0 0/0 0/0 .text JSGGetViewUpVector__14dDemo_camera_cCFP3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGGetViewUpVector(Vec* param_0) const { - nofralloc -#include "asm/d/d_demo/JSGGetViewUpVector__14dDemo_camera_cCFP3Vec.s" +void dDemo_camera_c::JSGGetViewUpVector(Vec* o_upVec) const { + view_class* view = getView(); + + if (view == NULL) { + f32 tmp_0 = FLOAT_LABEL(lit_4040); + o_upVec->x = tmp_0; + o_upVec->y = lit_4041; + o_upVec->z = tmp_0; + } else { + *o_upVec = view->mLookat.mUp; + } } -#pragma pop /* 80038CD0-80038CF8 033610 0028+00 1/0 0/0 0/0 .text JSGSetViewUpVector__14dDemo_camera_cFRC3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetViewUpVector(Vec const& param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetViewUpVector__14dDemo_camera_cFRC3Vec.s" +void dDemo_camera_c::JSGSetViewUpVector(Vec const& i_upVec) { + mViewUpVector = i_upVec; + onEnable(0x20); } -#pragma pop /* 80038CF8-80038D5C 033638 0064+00 1/0 0/0 0/0 .text * JSGGetViewTargetPosition__14dDemo_camera_cCFP3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGGetViewTargetPosition(Vec* param_0) const { - nofralloc -#include "asm/d/d_demo/JSGGetViewTargetPosition__14dDemo_camera_cCFP3Vec.s" +void dDemo_camera_c::JSGGetViewTargetPosition(Vec* o_targetPos) const { + view_class* view = getView(); + + if (view == NULL) { + f32 tmp_0 = FLOAT_LABEL(lit_4040); + o_targetPos->x = tmp_0; + o_targetPos->y = tmp_0; + o_targetPos->z = lit_4041; + } else { + *o_targetPos = view->mLookat.mCenter; + } } -#pragma pop /* 80038D5C-80038D84 03369C 0028+00 1/0 0/0 0/0 .text * JSGSetViewTargetPosition__14dDemo_camera_cFRC3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetViewTargetPosition(Vec const& param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetViewTargetPosition__14dDemo_camera_cFRC3Vec.s" +void dDemo_camera_c::JSGSetViewTargetPosition(Vec const& i_targetPos) { + mViewTargetVector = i_targetPos; + onEnable(0x40); } -#pragma pop /* ############################################################################################## */ /* 80451DD8-80451DE0 0003D8 0004+04 2/2 0/0 0/0 .sdata2 @4710 */ @@ -1077,6 +1111,18 @@ SECTION_SDATA2 static f32 lit_4710[1 + 1 /* padding */] = { /* 80038D84-80038DDC 0336C4 0058+00 1/0 0/0 0/0 .text JSGGetViewRoll__14dDemo_camera_cCFv */ +// matches with literals +#ifdef NONMATCHING +f32 dDemo_camera_c::JSGGetViewRoll() const { + view_class* view = getView(); + + if (view == NULL) { + return 0.0f; + } + + return view->mBank * 0.0054931640625f; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1085,131 +1131,87 @@ asm f32 dDemo_camera_c::JSGGetViewRoll() const { #include "asm/d/d_demo/JSGGetViewRoll__14dDemo_camera_cCFv.s" } #pragma pop +#endif /* 80038DDC-80038DF0 03371C 0014+00 1/0 0/0 0/0 .text JSGSetViewRoll__14dDemo_camera_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_camera_c::JSGSetViewRoll(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetViewRoll__14dDemo_camera_cFf.s" +void dDemo_camera_c::JSGSetViewRoll(f32 i_roll) { + mViewRoll = i_roll; + onEnable(0x80); } -#pragma pop /* 80038DF0-80038E20 033730 0030+00 1/0 0/0 0/0 .text JSGSetColor__15dDemo_ambient_cF8_GXColor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_ambient_c::JSGSetColor(_GXColor param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetColor__15dDemo_ambient_cF8_GXColor.s" +void dDemo_ambient_c::JSGSetColor(GXColor i_color) { + mColor = i_color; + onEnable(0x1); } -#pragma pop /* 80038E20-80038E34 033760 0014+00 1/0 0/0 0/0 .text * JSGSetLightType__13dDemo_light_cFQ26JStage7TELight */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_light_c::JSGSetLightType(JStage::TELight param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetLightType__13dDemo_light_cFQ26JStage7TELight.s" +void dDemo_light_c::JSGSetLightType(JStage::TELight i_lightType) { + mLightType = i_lightType; + onEnable(0x1); } -#pragma pop /* 80038E34-80038E5C 033774 0028+00 1/0 0/0 0/0 .text JSGSetPosition__13dDemo_light_cFRC3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_light_c::JSGSetPosition(Vec const& param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetPosition__13dDemo_light_cFRC3Vec.s" +void dDemo_light_c::JSGSetPosition(Vec const& i_pos) { + mPosition = i_pos; + onEnable(0x2); } -#pragma pop /* 80038E5C-80038E8C 03379C 0030+00 1/0 0/0 0/0 .text JSGSetColor__13dDemo_light_cF8_GXColor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_light_c::JSGSetColor(_GXColor param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetColor__13dDemo_light_cF8_GXColor.s" +void dDemo_light_c::JSGSetColor(GXColor i_color) { + mColor = i_color; + onEnable(0x4); } -#pragma pop /* 80038E8C-80038EA8 0337CC 001C+00 1/0 0/0 0/0 .text * JSGSetDistanceAttenuation__13dDemo_light_cFff13_GXDistAttnFn */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_light_c::JSGSetDistanceAttenuation(f32 param_0, f32 param_1, _GXDistAttnFn param_2) { - nofralloc -#include "asm/d/d_demo/JSGSetDistanceAttenuation__13dDemo_light_cFff13_GXDistAttnFn.s" +void dDemo_light_c::JSGSetDistanceAttenuation(f32 param_0, f32 param_1, GXDistAttnFn i_distAttenFn) { + field_0x24 = param_0; + field_0x28 = param_1; + mDistAttenFn = i_distAttenFn; + onEnable(0x8); } -#pragma pop /* 80038EA8-80038EC0 0337E8 0018+00 1/0 0/0 0/0 .text * JSGSetAngleAttenuation__13dDemo_light_cFf9_GXSpotFn */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_light_c::JSGSetAngleAttenuation(f32 param_0, _GXSpotFn param_1) { - nofralloc -#include "asm/d/d_demo/JSGSetAngleAttenuation__13dDemo_light_cFf9_GXSpotFn.s" +void dDemo_light_c::JSGSetAngleAttenuation(f32 param_0, GXSpotFn i_spotFn) { + field_0x2c = param_0; + mSpotFn = i_spotFn; + onEnable(0x10); } -#pragma pop /* 80038EC0-80038EE8 033800 0028+00 1/0 0/0 0/0 .text JSGSetDirection__13dDemo_light_cFRC3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_light_c::JSGSetDirection(Vec const& param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetDirection__13dDemo_light_cFRC3Vec.s" +void dDemo_light_c::JSGSetDirection(Vec const& i_direction) { + mDirection = i_direction; + onEnable(0x20); } -#pragma pop /* 80038EE8-80038EFC 033828 0014+00 1/0 0/0 0/0 .text * JSGSetFogFunction__11dDemo_fog_cF10_GXFogType */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_fog_c::JSGSetFogFunction(_GXFogType param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetFogFunction__11dDemo_fog_cF10_GXFogType.s" +void dDemo_fog_c::JSGSetFogFunction(GXFogType i_fogType) { + mFogType = i_fogType; + onEnable(0x1); } -#pragma pop /* 80038EFC-80038F10 03383C 0014+00 1/0 0/0 0/0 .text JSGSetStartZ__11dDemo_fog_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_fog_c::JSGSetStartZ(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetStartZ__11dDemo_fog_cFf.s" +void dDemo_fog_c::JSGSetStartZ(f32 i_startZ) { + mStartZ = i_startZ; + onEnable(0x2); } -#pragma pop /* 80038F10-80038F24 033850 0014+00 1/0 0/0 0/0 .text JSGSetEndZ__11dDemo_fog_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_fog_c::JSGSetEndZ(f32 param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetEndZ__11dDemo_fog_cFf.s" +void dDemo_fog_c::JSGSetEndZ(f32 i_endZ) { + mEndZ = i_endZ; + onEnable(0x4); } -#pragma pop /* 80038F24-80038F54 033864 0030+00 1/0 0/0 0/0 .text JSGSetColor__11dDemo_fog_cF8_GXColor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_fog_c::JSGSetColor(_GXColor param_0) { - nofralloc -#include "asm/d/d_demo/JSGSetColor__11dDemo_fog_cF8_GXColor.s" +void dDemo_fog_c::JSGSetColor(GXColor i_color) { + mColor = i_color; + onEnable(0x8); } -#pragma pop /* 80038F54-80038F70 033894 001C+00 1/1 0/0 0/0 .text __ct__14dDemo_object_cFv */ dDemo_object_c::dDemo_object_c() { @@ -1386,7 +1388,7 @@ extern "C" asm void __dt__15dDemo_ambient_cFv() { /* 80039528-80039678 033E68 0150+00 1/0 0/0 0/0 .text * JSGFindObject__14dDemo_system_cCFPPQ26JStage7TObjectPCcQ26JStage8TEObject */ bool dDemo_system_c::JSGFindObject(JStage::TObject** p_TObj, char const* actorName, - JStage::TEObject objType) const { + JStage::TEObject objType) const { if (mpObject == NULL) { return true; } @@ -1396,7 +1398,8 @@ bool dDemo_system_c::JSGFindObject(JStage::TObject** p_TObj, char const* actorNa if (actor == NULL) { if (objType == JStage::TOBJ_ACTOR && !strncmp(actorName, "d_act", 5)) { - actor = (fopAc_ac_c*)fopAcM_fastCreate(actorName, 0, NULL, -1, NULL, NULL, NULL, NULL); + actor = + (fopAc_ac_c*)fopAcM_fastCreate(actorName, 0, NULL, -1, NULL, NULL, NULL, NULL); if (actor == NULL) { return true; } @@ -1506,7 +1509,7 @@ int dDemo_c::start(u8 const* p_data, cXyz* p_translation, f32 rotationY) { if (m_data == NULL) { m_control->setSuspend(0); } - + m_control->forward(0); m_translation = p_translation; @@ -1617,6 +1620,14 @@ void dDemo_c::reset() { } /* 80039F1C-80039F9C 03485C 0080+00 1/0 0/0 0/0 .text emitter_create__16dDemo_particle_cFUl */ +// matches with literals +#ifdef NONMATCHING +void dDemo_particle_c::emitter_create(u32 param_0) { + cXyz tmp(0.0f, 0.0f, 0.0f); + int stayNo = dComIfGp_roomControl_getStayNo(); + dComIfGp_particle_set(param_0, &tmp, NULL, NULL, 0xFF, NULL, stayNo, NULL, NULL, NULL); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1625,6 +1636,7 @@ asm void dDemo_particle_c::emitter_create(u32 param_0) { #include "asm/d/d_demo/emitter_create__16dDemo_particle_cFUl.s" } #pragma pop +#endif /* 80039F9C-80039FFC 0348DC 0060+00 1/0 0/0 0/0 .text __dt__16dDemo_particle_cFv */ #pragma push @@ -1650,67 +1662,38 @@ extern "C" asm void __dt__14dDemo_camera_cFv() { /* 8003A05C-8003A088 03499C 002C+00 1/0 0/0 0/0 .text JSGFindNodeID__13dDemo_actor_cCFPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGFindNodeID(char const* param_0) const { - nofralloc -#include "asm/d/d_demo/JSGFindNodeID__13dDemo_actor_cCFPCc.s" +s32 dDemo_actor_c::JSGFindNodeID(char const* param_0) const { + return mModel->getModelData()->getJointName()->getIndex(param_0); } -#pragma pop /* 8003A088-8003A0C8 0349C8 0040+00 1/0 0/0 0/0 .text * JSGGetNodeTransformation__13dDemo_actor_cCFUlPA4_f */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGGetNodeTransformation(u32 param_0, f32 (*param_1)[4]) const { - nofralloc -#include "asm/d/d_demo/JSGGetNodeTransformation__13dDemo_actor_cCFUlPA4_f.s" +int dDemo_actor_c::JSGGetNodeTransformation(u32 param_0, Mtx param_1) const { + PSMTXCopy(mModel->i_getAnmMtx((u16)param_0), param_1); + return 1; } -#pragma pop /* 8003A0C8-8003A0D0 034A08 0008+00 1/0 0/0 0/0 .text JSGGetAnimationFrameMax__13dDemo_actor_cCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm f32 dDemo_actor_c::JSGGetAnimationFrameMax() const { - nofralloc -#include "asm/d/d_demo/JSGGetAnimationFrameMax__13dDemo_actor_cCFv.s" +f32 dDemo_actor_c::JSGGetAnimationFrameMax() const { + return mAnmFrameMax; } -#pragma pop /* 8003A0D0-8003A0D8 034A10 0008+00 1/0 0/0 0/0 .text * JSGGetTextureAnimationFrameMax__13dDemo_actor_cCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm f32 dDemo_actor_c::JSGGetTextureAnimationFrameMax() const { - nofralloc -#include "asm/d/d_demo/JSGGetTextureAnimationFrameMax__13dDemo_actor_cCFv.s" +f32 dDemo_actor_c::JSGGetTextureAnimationFrameMax() const { + return mTexAnmFrameMax; } -#pragma pop /* 8003A0D8-8003A0F4 034A18 001C+00 1/0 0/0 0/0 .text JSGGetTranslation__13dDemo_actor_cCFP3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGGetTranslation(Vec* param_0) const { - nofralloc -#include "asm/d/d_demo/JSGGetTranslation__13dDemo_actor_cCFP3Vec.s" +void dDemo_actor_c::JSGGetTranslation(Vec* o_trans) const { + *o_trans = mTrans; } -#pragma pop /* 8003A0F4-8003A110 034A34 001C+00 1/0 0/0 0/0 .text JSGGetScaling__13dDemo_actor_cCFP3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dDemo_actor_c::JSGGetScaling(Vec* param_0) const { - nofralloc -#include "asm/d/d_demo/JSGGetScaling__13dDemo_actor_cCFP3Vec.s" +void dDemo_actor_c::JSGGetScaling(Vec* o_scale) const { + *o_scale = mScale; } -#pragma pop /* 8003A110-8003A188 034A50 0078+00 1/0 0/0 0/0 .text JSGGetRotation__13dDemo_actor_cCFP3Vec */ #pragma push diff --git a/src/d/d_lib.cpp b/src/d/d_lib.cpp index b9cefd23eeb..f2122d1bcf3 100644 --- a/src/d/d_lib.cpp +++ b/src/d/d_lib.cpp @@ -357,49 +357,41 @@ asm u32 dLib_getExpandSizeFromAramArchive(JKRAramArchive* param_0, char const* p /* ############################################################################################## */ /* 80450DD8-80450DDC 0002D8 0004+00 2/2 0/0 0/0 .sbss m_diffTime__11dLib_time_c */ -u8 dLib_time_c::m_diffTime[4]; - -/* 80450DDC-80450DE0 0002DC 0004+00 2/2 0/0 0/0 .sbss None */ -static u8 data_80450DDC[4]; +OSTime dLib_time_c::m_diffTime; /* 80450DE0-80450DE4 0002E0 0004+00 3/3 0/0 0/0 .sbss m_stopTime__11dLib_time_c */ -u8 dLib_time_c::m_stopTime[4]; - -/* 80450DE4-80450DE8 0002E4 0004+00 3/3 0/0 0/0 .sbss None */ -static u8 data_80450DE4[4]; +OSTime dLib_time_c::m_stopTime; /* 80450DE8-80450DF0 0002E8 0008+00 3/3 0/0 0/0 .sbss None */ -static u8 data_80450DE8[8]; +bool dLib_time_c::m_timeStopped; /* 80032804-80032880 02D144 007C+00 0/0 8/8 0/0 .text getTime__11dLib_time_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dLib_time_c::getTime() { - nofralloc -#include "asm/d/d_lib/getTime__11dLib_time_cFv.s" +OSTime dLib_time_c::getTime() { + if (!m_timeStopped) { + return OSGetTime() - m_diffTime; + } + + OSTime time = OSGetTime(); + m_diffTime += (time - m_stopTime); + m_stopTime = time; + return time - m_diffTime; } -#pragma pop /* 80032880-800328BC 02D1C0 003C+00 0/0 1/1 0/0 .text stopTime__11dLib_time_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dLib_time_c::stopTime() { - nofralloc -#include "asm/d/d_lib/stopTime__11dLib_time_cFv.s" +void dLib_time_c::stopTime() { + if (!m_timeStopped) { + m_stopTime = OSGetTime(); + m_timeStopped = true; + } } -#pragma pop /* 800328BC-80032918 02D1FC 005C+00 0/0 1/1 0/0 .text startTime__11dLib_time_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dLib_time_c::startTime() { - nofralloc -#include "asm/d/d_lib/startTime__11dLib_time_cFv.s" +void dLib_time_c::startTime() { + if (m_timeStopped) { + m_diffTime += OSGetTime() - m_stopTime; + m_timeStopped = false; + } } -#pragma pop /* ############################################################################################## */ /* 80450DF0-80450DF8 -00001 0008+00 0/0 4/4 0/0 .sbss None */ @@ -408,4 +400,4 @@ asm void dLib_time_c::startTime() { /* 80450DF2 0001+00 data_80450DF2 None */ /* 80450DF3 0005+00 data_80450DF3 None */ extern u8 struct_80450DF0[8]; -u8 struct_80450DF0[8]; +u8 struct_80450DF0[8] ALIGN_DECL(8); diff --git a/src/d/d_vibration.cpp b/src/d/d_vibration.cpp index cd28eb9a82a..d1eb20366ea 100644 --- a/src/d/d_vibration.cpp +++ b/src/d/d_vibration.cpp @@ -50,7 +50,7 @@ extern "C" void setDefault__12dVibration_cFv(); extern "C" void Init__12dVibration_cFv(); extern "C" void Pause__12dVibration_cFv(); extern "C" void Remove__12dVibration_cFv(); -extern "C" extern u8 data_80450F58[8]; +extern "C" extern u8 on_final_boss_stg[8]; // // External References: @@ -243,9 +243,4 @@ asm void dVibration_c::Remove() { nofralloc #include "asm/d/d_vibration/Remove__12dVibration_cFv.s" } -#pragma pop - -/* ############################################################################################## */ -/* 80450F58-80450F60 000458 0008+00 0/0 2/2 0/0 .sbss None */ -extern u8 data_80450F58[8]; -u8 data_80450F58[8]; +#pragma pop \ No newline at end of file diff --git a/src/d/event/d_event_data.cpp b/src/d/event/d_event_data.cpp index a0dac1edbd7..91faacfcba2 100644 --- a/src/d/event/d_event_data.cpp +++ b/src/d/event/d_event_data.cpp @@ -825,9 +825,9 @@ void dEvDtStaff_c::specialProcSound() { case 'RIDD': int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type"); if (typeP != NULL && *typeP == 1) { - mDoAud_seStart(0xC, NULL, 0, 0); + mDoAud_seStart(Z2SE_READ_RIDDLE_A, NULL, 0, 0); } else { - mDoAud_seStart(0xD, NULL, 0, 0); + mDoAud_seStart(Z2SE_READ_RIDDLE_B, NULL, 0, 0); } break; case 'BGMS': @@ -1087,7 +1087,7 @@ void dEvDtStaff_c::specialProcDirector() { if (soundP != NULL) { switch (*soundP) { case 0: - mDoAud_seStart(0, NULL, 0, 0); + mDoAud_seStart(Z2SE_SY_DUMMY, NULL, 0, 0); } } break;