summaryrefslogtreecommitdiff
path: root/src/d/actor
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-10-16 22:41:21 +0300
committerGitHub <noreply@github.com>2024-10-16 12:41:21 -0700
commitec07abb09bc40293ca18b673678348520bf0473d (patch)
tree730a0c33206265ecc576d7cfb084f741b3a4bb14 /src/d/actor
parent030d6533f0ac320e2dc61a02783134490ff57f43 (diff)
Reintroduce missing changes from pull request #2200 (#2213)
* Reintroduce missing changes from pull request #2200 * m_Do_audio OK
Diffstat (limited to 'src/d/actor')
-rw-r--r--src/d/actor/d_a_obj_twGate.cpp2
-rw-r--r--src/d/actor/d_a_tag_TWgate.cpp689
-rw-r--r--src/d/actor/d_a_tag_qs.cpp549
3 files changed, 569 insertions, 671 deletions
diff --git a/src/d/actor/d_a_obj_twGate.cpp b/src/d/actor/d_a_obj_twGate.cpp
index d32f368f0b..f56e02eef0 100644
--- a/src/d/actor/d_a_obj_twGate.cpp
+++ b/src/d/actor/d_a_obj_twGate.cpp
@@ -416,4 +416,4 @@ void __sinit_d_a_obj_twGate_cpp() {
REGISTER_CTORS(0x80D202B8, __sinit_d_a_obj_twGate_cpp);
#pragma pop
-/* 80D20554-80D20554 00024C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ \ No newline at end of file
+/* 80D20554-80D20554 00024C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
diff --git a/src/d/actor/d_a_tag_TWgate.cpp b/src/d/actor/d_a_tag_TWgate.cpp
index 3a9bcd633c..4493134370 100644
--- a/src/d/actor/d_a_tag_TWgate.cpp
+++ b/src/d/actor/d_a_tag_TWgate.cpp
@@ -1,19 +1,13 @@
//
-// Generated By: dol2asm
-// Translation Unit: d_a_tag_TWgate
+// d_a_tag_TWgate
//
#include "d/actor/d_a_tag_TWgate.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
#include "d/d_msg_object.h"
-#include "dol2asm.h"
#include "f_op/f_op_actor_mng.h"
-//
-// Types:
-//
-
struct daTagTWGate_zevParam {
/* 0x00 */ char* mArcName;
/* 0x04 */ char* mEventName;
@@ -26,195 +20,18 @@ struct daTagTWGate_zevParam {
/* 0x1B */ s8 mLayer;
};
-//
-// Forward References:
-//
-
-extern "C" void initWait__13daTagTWGate_cFv();
-extern "C" void executeWait__13daTagTWGate_cFv();
-extern "C" void initDemoFilone1__13daTagTWGate_cFv();
-extern "C" void executeDemoFilone1__13daTagTWGate_cFv();
-extern "C" void initDemoFilone2__13daTagTWGate_cFv();
-extern "C" void executeDemoFilone2__13daTagTWGate_cFv();
-extern "C" void initDemoFilone3__13daTagTWGate_cFv();
-extern "C" void executeDemoFilone3__13daTagTWGate_cFv();
-extern "C" void initDemoOrdin1__13daTagTWGate_cFv();
-extern "C" void executeDemoOrdin1__13daTagTWGate_cFv();
-extern "C" void initDemoOrdin2__13daTagTWGate_cFv();
-extern "C" void executeDemoOrdin2__13daTagTWGate_cFv();
-extern "C" void initDemoOrdin3__13daTagTWGate_cFv();
-extern "C" void executeDemoOrdin3__13daTagTWGate_cFv();
-extern "C" void initDemoRanail1__13daTagTWGate_cFv();
-extern "C" void executeDemoRanail1__13daTagTWGate_cFv();
-extern "C" void initDemoRanail2__13daTagTWGate_cFv();
-extern "C" void executeDemoRanail2__13daTagTWGate_cFv();
-extern "C" void initDemoRanail3__13daTagTWGate_cFv();
-extern "C" void executeDemoRanail3__13daTagTWGate_cFv();
-extern "C" void initDemoHyral1__13daTagTWGate_cFv();
-extern "C" void executeDemoHyral1__13daTagTWGate_cFv();
-extern "C" void initDemoHyral2__13daTagTWGate_cFv();
-extern "C" void executeDemoHyral2__13daTagTWGate_cFv();
-extern "C" void initDemoHyral3__13daTagTWGate_cFv();
-extern "C" void executeDemoHyral3__13daTagTWGate_cFv();
-extern "C" void initBaseMtx__13daTagTWGate_cFv();
-extern "C" void downloadModels__13daTagTWGate_cFv();
-extern "C" void initTalk__13daTagTWGate_cFiPP10fopAc_ac_c();
-extern "C" void talkProc__13daTagTWGate_cFPiiPP10fopAc_ac_c();
-extern "C" void createHeapCallBack__13daTagTWGate_cFP10fopAc_ac_c();
-extern "C" void CreateHeap__13daTagTWGate_cFv();
-extern "C" static void daTagTWGate_Create__FP10fopAc_ac_c();
-extern "C" static void daTagTWGate_Delete__FP13daTagTWGate_c();
-extern "C" static void daTagTWGate_Execute__FP13daTagTWGate_c();
-extern "C" static void daTagTWGate_Draw__FP13daTagTWGate_c();
-extern "C" static bool daTagTWGate_IsDelete__FP13daTagTWGate_c();
-extern "C" void __sinit_d_a_tag_TWgate_cpp();
-extern "C" u8 const mAttr__13daTagTWGate_c[1 + 3 /* padding */];
-extern "C" extern char const* const d_a_tag_TWgate__stringBase0;
-extern "C" u8 ActionTable__13daTagTWGate_c[312];
-extern "C" extern void* g_profile_Tag_TWGate[12];
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void transM__14mDoMtx_stack_cFfff();
-extern "C" void
-__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl();
-extern "C" void play__16mDoExt_McaMorfSOFUlSc();
-extern "C" void entryDL__16mDoExt_McaMorfSOFv();
-extern "C" void modelCalc__16mDoExt_McaMorfSOFv();
-extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv();
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void __dt__10fopAc_ac_cFv();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-extern "C" void fopAcM_searchActorDistanceXZ2__FPC10fopAc_ac_cPC10fopAc_ac_c();
-extern "C" void fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs();
-extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_setNextStage__FPCcsScSc();
-extern "C" void isDarkClearLV__21dSv_player_status_b_cCFi();
-extern "C" void onEventBit__11dSv_event_cFUs();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void reset__14dEvt_control_cFv();
-extern "C" void reset__14dEvt_control_cFPv();
-extern "C" void dEv_noFinishSkipProc__FPvi();
-extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii();
-extern "C" void onSkipFade__14dEvt_control_cFv();
-extern "C" void setObjectArchive__16dEvent_manager_cFPc();
-extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc();
-extern "C" void endCheck__16dEvent_manager_cFs();
-extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci();
-extern "C" void getIsAddvance__16dEvent_manager_cFi();
-extern "C" void getMyNowCutName__16dEvent_manager_cFi();
-extern "C" void cutEnd__16dEvent_manager_cFi();
-extern "C" void
-set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void offMsgSendControl__12dMsgObject_cFv();
-extern "C" void isMsgSendControl__12dMsgObject_cFv();
-extern "C" void __ct__10dMsgFlow_cFv();
-extern "C" void __dt__10dMsgFlow_cFv();
-extern "C" void init__10dMsgFlow_cFP10fopAc_ac_ciiPP10fopAc_ac_c();
-extern "C" void doFlow__10dMsgFlow_cFP10fopAc_ac_cPP10fopAc_ac_ci();
-extern "C" void getMsgNo__10dMsgFlow_cFv();
-extern "C" void getMsg__10dMsgFlow_cFv();
-extern "C" void __ct__5csXyzFsss();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void* __nw__FUl();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-
-//
-// Declarations:
-//
-
/* 80D525F8-80D52604 000078 000C+00 1/0 0/0 0/0 .text initWait__13daTagTWGate_cFv */
void daTagTWGate_c::initWait() {
mEventID = -1;
}
-/* ############################################################################################## */
-/* 80D55848-80D55852 00009C 000A+00 4/3 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55848;
-
-/* 80D55852-80D55861 0000A6 000F+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55852;
-
-/* 80D55861-80D55875 0000B5 0014+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55861;
-
-/* 80D55875-80D55887 0000C9 0012+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55875;
-
-/* 80D55887-80D5588F 0000DB 0008+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55887;
-
-/* 80D5588F-80D55899 0000E3 000A+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D5588F;
-
-/* 80D55899-80D558A7 0000ED 000E+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55899;
-
-/* 80D558A7-80D558BA 0000FB 0013+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D558A7;
-
-/* 80D558BA-80D558CB 00010E 0011+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D558BA;
-
-/* 80D558CB-80D558D3 00011F 0008+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D558CB;
-
-/* 80D558D3-80D558DD 000127 000A+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D558D3;
-
-/* 80D558DD-80D558EC 000131 000F+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D558DD;
-
-/* 80D558EC-80D55900 000140 0014+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D558EC;
-
-/* 80D55900-80D55912 000154 0012+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55900;
-
-/* 80D55912-80D5591C 000166 000A+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D55912;
-
-/* 80D5591C-80D5592A 000170 000E+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D5591C;
-
-/* 80D5592A-80D5593D 00017E 0013+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D5592A;
-
-/* 80D5593D-80D5594E 000191 0011+00 1/0 0/0 0/0 .rodata None */
-extern "C" char const* const stringBase_80D5593D;
-
/* 80D557AC-80D557B0 000000 0001+03 5/5 0/0 0/0 .rodata mAttr__13daTagTWGate_c */
-SECTION_RODATA u8 const daTagTWGate_c::mAttr[1 + 3 /* padding */] = {
- 0x00,
- /* padding */
- 0x00,
- 0x00,
+u8 const daTagTWGate_c::mAttr[1] = {
0x00,
};
-COMPILER_STRIP_GATE(0x80D557AC, &daTagTWGate_c::mAttr);
/* 80D557B0-80D55820 -00001 0070+00 14/18 0/0 0/0 .rodata l_zevParamTbl */
-SECTION_RODATA static daTagTWGate_zevParam const l_zevParamTbl[4] = {
+static daTagTWGate_zevParam const l_zevParamTbl[4] = {
{
"TWGate_FL",
"TW_GATE_FILONE",
@@ -260,51 +77,16 @@ SECTION_RODATA static daTagTWGate_zevParam const l_zevParamTbl[4] = {
14,
},
};
-COMPILER_STRIP_GATE(0x80D557B0, &l_zevParamTbl);
-
-/* 80D55820-80D55824 000074 0004+00 1/1 0/0 0/0 .rodata @3857 */
-SECTION_RODATA static f32 const lit_3857 = 100.0f;
-COMPILER_STRIP_GATE(0x80D55820, &lit_3857);
-
-/* 80D55824-80D5582C 000078 0008+00 1/1 0/0 0/0 .rodata @3858 */
-SECTION_RODATA static u8 const lit_3858[8] = {
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D55824, &lit_3858);
-
-/* 80D55848-80D55848 00009C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80D55848 = "TWGate_FL";
-SECTION_DEAD static char const* const stringBase_80D55852 = "TW_GATE_FILONE";
-SECTION_DEAD static char const* const stringBase_80D55861 = "TW_GATE_FILONE_TALK";
-SECTION_DEAD static char const* const stringBase_80D55875 = "TW_GATE_FILONE_IN";
-SECTION_DEAD static char const* const stringBase_80D55887 = "F_SP108";
-SECTION_DEAD static char const* const stringBase_80D5588F = "TWGate_OD";
-SECTION_DEAD static char const* const stringBase_80D55899 = "TW_GATE_ORDIN";
-SECTION_DEAD static char const* const stringBase_80D558A7 = "TW_GATE_ORDIN_TALK";
-SECTION_DEAD static char const* const stringBase_80D558BA = "TW_GATE_ORDIN_IN";
-SECTION_DEAD static char const* const stringBase_80D558CB = "F_SP121";
-SECTION_DEAD static char const* const stringBase_80D558D3 = "TWGate_RN";
-SECTION_DEAD static char const* const stringBase_80D558DD = "TW_GATE_RANAIL";
-SECTION_DEAD static char const* const stringBase_80D558EC = "TW_GATE_RANAIL_TALK";
-SECTION_DEAD static char const* const stringBase_80D55900 = "TW_GATE_RANAIL_IN";
-SECTION_DEAD static char const* const stringBase_80D55912 = "TWGate_HY";
-SECTION_DEAD static char const* const stringBase_80D5591C = "TW_GATE_HYRAL";
-SECTION_DEAD static char const* const stringBase_80D5592A = "TW_GATE_HYRAL_TALK";
-SECTION_DEAD static char const* const stringBase_80D5593D = "TW_GATE_HYRAL_IN";
-SECTION_DEAD static char const* const stringBase_80D5594E = "Gate";
-#pragma pop
/* 80D55974-80D55980 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
+static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80D55980-80D55994 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
#pragma push
#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
+static u32 lit_1787[1 + 4 /* padding */] = {
0x02000201,
/* padding */
0x40080000,
@@ -315,10 +97,10 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
#pragma pop
/* 80D55994-80D55998 -00001 0004+00 12/12 0/0 0/0 .data l_myName */
-SECTION_DATA static const char* l_myName = "Gate";
+static const char* l_myName = "Gate";
/* 80D55AD0-80D55C08 00015C 0138+00 14/15 0/0 0/0 .data ActionTable__13daTagTWGate_c */
-SECTION_DATA actionFunc daTagTWGate_c::ActionTable[13][2] = {
+actionFunc daTagTWGate_c::ActionTable[13][2] = {
{&daTagTWGate_c::initWait, &daTagTWGate_c::executeWait},
{&daTagTWGate_c::initDemoFilone1, &daTagTWGate_c::executeDemoFilone1},
{&daTagTWGate_c::initDemoFilone2, &daTagTWGate_c::executeDemoFilone2},
@@ -442,26 +224,22 @@ void daTagTWGate_c::executeDemoFilone1() {
/* 80D52AF4-80D52BF0 000574 00FC+00 1/0 0/0 0/0 .text initDemoFilone2__13daTagTWGate_cFv
*/
-#ifdef NONMATCHING
void daTagTWGate_c::initDemoFilone2() {
fopAcM_onSwitch(this, getSwitch());
eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
- dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
+ dComIfG_play_c& play = g_dComIfG_gameInfo.play;
+ dEvent_manager_c& mng = play.getEvtManager();
+ mng.setObjectArchive(eventInfo.getArchiveName());
mEventID =
- dComIfGp_getEventManager().getEventIdx(this, l_zevParamTbl[mType].mTalkEventName, -1);
+ mng.getEventIdx(this, l_zevParamTbl[mType].mTalkEventName, -1);
- if (dComIfGp_event_runCheck()) {
+ if (play.getEvent().mEventStatus != 0) {
dComIfGp_getEvent().reset(this);
fopAcM_orderChangeEventId(this, mEventID, 1, -1);
} else {
fopAcM_orderOtherEventId(this, mEventID, -1, -1, 4, 1);
}
}
-#else
-void daTagTWGate_c::initDemoFilone2() {
- // NONMATCHING
-}
-#endif
/* 80D52BF0-80D52DB4 000670 01C4+00 1/0 0/0 0/0 .text executeDemoFilone2__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoFilone2() {
@@ -522,38 +300,6 @@ void daTagTWGate_c::initDemoFilone3() {
fopAcM_orderChangeEventId(this, mEventID, 1, -1);
}
-/* ############################################################################################## */
-/* 80D5582C-80D55830 000080 0004+00 1/5 0/0 0/0 .rodata @4079 */
-SECTION_RODATA static f32 const lit_4079 = 1.0f;
-COMPILER_STRIP_GATE(0x80D5582C, &lit_4079);
-
-/* 80D55830-80D55834 000084 0004+00 1/6 0/0 0/0 .rodata @4080 */
-SECTION_RODATA static u8 const lit_4080[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80D55830, &lit_4080);
-
-/* 80D55834-80D55838 000088 0004+00 0/4 0/0 0/0 .rodata @4081 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4081 = 240.0f;
-COMPILER_STRIP_GATE(0x80D55834, &lit_4081);
-#pragma pop
-
-/* 80D55838-80D5583C 00008C 0004+00 0/4 0/0 0/0 .rodata @4082 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4082 = -710.0f;
-COMPILER_STRIP_GATE(0x80D55838, &lit_4082);
-#pragma pop
-
-/* 80D5583C-80D55840 000090 0004+00 1/5 0/0 0/0 .rodata @4083 */
-SECTION_RODATA static f32 const lit_4083 = -1.0f;
-COMPILER_STRIP_GATE(0x80D5583C, &lit_4083);
-
/* 80D52E7C-80D53250 0008FC 03D4+00 1/0 0/0 0/0 .text executeDemoFilone3__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoFilone3() {
s32 staffId = dComIfGp_evmng_getMyStaffId(l_myName, NULL, 0);
@@ -644,7 +390,6 @@ void daTagTWGate_c::executeDemoFilone3() {
}
}
-
/* 80D53250-80D532DC 000CD0 008C+00 1/0 0/0 0/0 .text initDemoOrdin1__13daTagTWGate_cFv
*/
void daTagTWGate_c::initDemoOrdin1() {
@@ -655,18 +400,90 @@ void daTagTWGate_c::initDemoOrdin1() {
/* 80D532DC-80D53454 000D5C 0178+00 1/0 0/0 0/0 .text executeDemoOrdin1__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoOrdin1() {
- // NONMATCHING
+ dEvent_manager_c& evtMng = dComIfGp_getEventManager();
+ int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
+ if (staffId != -1) {
+ int* cutName = (int*)evtMng.getMyNowCutName(staffId);
+ if (evtMng.getIsAddvance(staffId)) {
+ switch (*cutName) {
+ case '0001':
+ dComIfGp_getEvent().startCheckSkipEdge(this);
+ break;
+ }
+ }
+ switch (*cutName) {
+ case '0001':
+ if (dComIfGp_getEvent().checkSkipEdge()) {
+ dComIfGp_getEvent().onSkipFade();
+ setAction(ACT_DEMO_ORDIN_2);
+ }
+ evtMng.cutEnd(staffId);
+ break;
+ }
+ if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
+ setAction(ACT_DEMO_ORDIN_2);
+ }
+ }
}
/* 80D53454-80D53550 000ED4 00FC+00 1/0 0/0 0/0 .text initDemoOrdin2__13daTagTWGate_cFv
*/
void daTagTWGate_c::initDemoOrdin2() {
- // NONMATCHING
+ fopAcM_onSwitch(this, getSwitch());
+ eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
+ dComIfG_play_c& play = g_dComIfG_gameInfo.play;
+ dEvent_manager_c& mng = play.getEvtManager();
+ mng.setObjectArchive(eventInfo.getArchiveName());
+ mEventID = mng.getEventIdx(this, l_zevParamTbl[mType].mTalkEventName, 0xff);
+ if (play.getEvent().mEventStatus != 0) {
+ dComIfGp_getEvent().reset(this);
+ fopAcM_orderChangeEventId(this, mEventID, 1, 0xffff);
+ } else {
+ fopAcM_orderOtherEventId(this, mEventID, 0xff, 0xffff, 4, 1);
+ }
}
/* 80D53550-80D53714 000FD0 01C4+00 1/0 0/0 0/0 .text executeDemoOrdin2__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoOrdin2() {
- // NONMATCHING
+ dEvent_manager_c& evtMng = dComIfGp_getEventManager();
+ int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
+ if (staffId == -1) {
+ return;
+ }
+ int* cutName = (int*)evtMng.getMyNowCutName(staffId);
+ if (evtMng.getIsAddvance(staffId)) {
+ switch(*cutName) {
+ case '0001':
+ break;
+ case '0002':
+ initTalk(0xbc1, NULL);
+ break;
+ case '0003':
+ break;
+ }
+ }
+ switch(*cutName) {
+ case '0001':
+ case '0003':
+ evtMng.cutEnd(staffId);
+ break;
+ case '0002':
+ if (talkProc(NULL, 1, NULL)) {
+ if (mMsgFlow.getChoiceNo() == 0) {
+ setAction(ACT_DEMO_ORDIN_3);
+ }
+ evtMng.cutEnd(staffId);
+ }
+ break;
+ }
+
+ if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
+ evtMng.endCheck(mEventID))
+ {
+ dComIfGp_event_reset();
+ field_0x5e0 = 0;
+ setAction(ACT_WAIT);
+ }
}
/* 80D53714-80D537DC 001194 00C8+00 1/0 0/0 0/0 .text initDemoOrdin3__13daTagTWGate_cFv
@@ -684,7 +501,84 @@ void daTagTWGate_c::initDemoOrdin3() {
/* 80D537DC-80D53BD0 00125C 03F4+00 1/0 0/0 0/0 .text executeDemoOrdin3__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoOrdin3() {
- // NONMATCHING
+ dEvent_manager_c& evtMng = dComIfGp_getEventManager();
+ int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
+ if (staffId == -1) {
+ return;
+ }
+ int* cutName = (int*)evtMng.getMyNowCutName(staffId);
+ if (evtMng.getIsAddvance(staffId)) {
+ switch(*cutName) {
+ case '0001':
+ break;
+ case '0002':
+ dComIfGp_getEvent().startCheckSkipEdge(this);
+ field_0x5e1 = 0;
+ break;
+ case '0003':
+ initBaseMtx();
+ mpMorf->setPlaySpeed(1.0f);
+ field_0x5e0 = 1;
+ break;
+ }
+ }
+ switch(*cutName) {
+ case '0001':
+ int downloadResult = downloadModels();
+ if (downloadResult == 1) {
+ evtMng.cutEnd(staffId);
+ } else if (downloadResult == -1) {
+ dComIfGp_setNextStage(
+ l_zevParamTbl[mType].mStage,
+ l_zevParamTbl[mType].mPoint,
+ l_zevParamTbl[mType].mRoomNo,
+ l_zevParamTbl[mType].mLayer);
+ }
+ break;
+ case '0002':
+ if (dComIfGp_getEvent().checkSkipEdge()) {
+ dComIfGp_getEvent().onSkipFade();
+ dComIfGp_setNextStage(
+ l_zevParamTbl[mType].mStage,
+ l_zevParamTbl[mType].mPoint,
+ l_zevParamTbl[mType].mRoomNo,
+ l_zevParamTbl[mType].mLayer);
+ }
+ int dVar2 = daPy_py_c::i_checkNowWolf() ? 0x2e : 0x4a;
+ if (field_0x5e1++ == dVar2) {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ cXyz cStack_30;
+ csXyz cStack_38(0, fopAcM_GetShapeAngle_p(player)->y + 0x8000, 0);
+ mDoMtx_stack_c::transS(fopAcM_GetPosition(player));
+ mDoMtx_stack_c::YrotM(cStack_38.y);
+ mDoMtx_stack_c::transM(0.0f, 240.0f, -710.0f);
+ mDoMtx_stack_c::multVecZero(&cStack_30);
+ dComIfGp_particle_set(0x86c5, &cStack_30, &cStack_38, NULL);
+ Z2GetAudioMgr()->seStart(Z2SE_OBJ_DARK_GATE_RIPPLE, &cStack_30, 0, 0,
+ 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ evtMng.cutEnd(staffId);
+ }
+ break;
+ case '0003':
+ if (dComIfGp_getEvent().checkSkipEdge()) {
+ dComIfGp_getEvent().onSkipFade();
+ dComIfGp_setNextStage(
+ l_zevParamTbl[mType].mStage,
+ l_zevParamTbl[mType].mPoint,
+ l_zevParamTbl[mType].mRoomNo,
+ l_zevParamTbl[mType].mLayer);
+ }
+ if (mpMorf->isStop()) {
+ evtMng.cutEnd(staffId);
+ }
+ break;
+ }
+
+ if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
+ dComIfGp_event_reset();
+ field_0x5e0 = 0;
+ setAction(ACT_WAIT);
+ }
}
/* 80D53BD0-80D53C5C 001650 008C+00 1/0 0/0 0/0 .text initDemoRanail1__13daTagTWGate_cFv
@@ -697,18 +591,90 @@ void daTagTWGate_c::initDemoRanail1() {
/* 80D53C5C-80D53DD4 0016DC 0178+00 1/0 0/0 0/0 .text executeDemoRanail1__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoRanail1() {
- // NONMATCHING
+ dEvent_manager_c& evtMng = dComIfGp_getEventManager();
+ int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
+ if (staffId != -1) {
+ int* cutName = (int*)evtMng.getMyNowCutName(staffId);
+ if (evtMng.getIsAddvance(staffId)) {
+ switch (*cutName) {
+ case '0001':
+ dComIfGp_getEvent().startCheckSkipEdge(this);
+ break;
+ }
+ }
+ switch (*cutName) {
+ case '0001':
+ if (dComIfGp_getEvent().checkSkipEdge()) {
+ dComIfGp_getEvent().onSkipFade();
+ setAction(ACT_DEMO_RANAIL_2);
+ }
+ evtMng.cutEnd(staffId);
+ break;
+ }
+ if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
+ setAction(ACT_DEMO_RANAIL_2);
+ }
+ }
}
/* 80D53DD4-80D53ED0 001854 00FC+00 1/0 0/0 0/0 .text initDemoRanail2__13daTagTWGate_cFv
*/
void daTagTWGate_c::initDemoRanail2() {
- // NONMATCHING
+ fopAcM_onSwitch(this, getSwitch());
+ eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
+ dComIfG_play_c& play = g_dComIfG_gameInfo.play;
+ dEvent_manager_c& mng = play.getEvtManager();
+ mng.setObjectArchive(eventInfo.getArchiveName());
+ mEventID = mng.getEventIdx(this, l_zevParamTbl[mType].mTalkEventName, 0xff);
+ if (play.getEvent().mEventStatus != 0) {
+ dComIfGp_getEvent().reset(this);
+ fopAcM_orderChangeEventId(this, mEventID, 1, 0xffff);
+ } else {
+ fopAcM_orderOtherEventId(this, mEventID, 0xff, 0xffff, 4, 1);
+ }
}
/* 80D53ED0-80D54094 001950 01C4+00 1/0 0/0 0/0 .text executeDemoRanail2__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoRanail2() {
- // NONMATCHING
+ dEvent_manager_c& evtMng = dComIfGp_getEventManager();
+ int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
+ if (staffId == -1) {
+ return;
+ }
+ int* cutName = (int*)evtMng.getMyNowCutName(staffId);
+ if (evtMng.getIsAddvance(staffId)) {
+ switch(*cutName) {
+ case '0001':
+ break;
+ case '0002':
+ initTalk(0xbc1, NULL);
+ break;
+ case '0003':
+ break;
+ }
+ }
+ switch(*cutName) {
+ case '0001':
+ case '0003':
+ evtMng.cutEnd(staffId);
+ break;
+ case '0002':
+ if (talkProc(NULL, 1, NULL)) {
+ if (mMsgFlow.getChoiceNo() == 0) {
+ setAction(ACT_DEMO_RANAIL_3);
+ }
+ evtMng.cutEnd(staffId);
+ }
+ break;
+ }
+
+ if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 &&
+ evtMng.endCheck(mEventID))
+ {
+ dComIfGp_event_reset();
+ field_0x5e0 = 0;
+ setAction(ACT_WAIT);
+ }
}
/* 80D54094-80D54178 001B14 00E4+00 1/0 0/0 0/0 .text initDemoRanail3__13daTagTWGate_cFv
@@ -727,7 +693,84 @@ void daTagTWGate_c::initDemoRanail3() {
/* 80D54178-80D5456C 001BF8 03F4+00 1/0 0/0 0/0 .text executeDemoRanail3__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoRanail3() {
- // NONMATCHING
+ dEvent_manager_c& evtMng = dComIfGp_getEventManager();
+ int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
+ if (staffId == -1) {
+ return;
+ }
+ int* cutName = (int*)evtMng.getMyNowCutName(staffId);
+ if (evtMng.getIsAddvance(staffId)) {
+ switch(*cutName) {
+ case '0001':
+ break;
+ case '0002':
+ dComIfGp_getEvent().startCheckSkipEdge(this);
+ field_0x5e1 = 0;
+ break;
+ case '0003':
+ initBaseMtx();
+ mpMorf->setPlaySpeed(1.0f);
+ field_0x5e0 = 1;
+ break;
+ }
+ }
+ switch(*cutName) {
+ case '0001':
+ int downloadResult = downloadModels();
+ if (downloadResult == 1) {
+ evtMng.cutEnd(staffId);
+ } else if (downloadResult == -1) {
+ dComIfGp_setNextStage(
+ l_zevParamTbl[mType].mStage,
+ l_zevParamTbl[mType].mPoint,
+ l_zevParamTbl[mType].mRoomNo,
+ l_zevParamTbl[mType].mLayer);
+ }
+ break;
+ case '0002':
+ if (dComIfGp_getEvent().checkSkipEdge()) {
+ dComIfGp_getEvent().onSkipFade();
+ dComIfGp_setNextStage(
+ l_zevParamTbl[mType].mStage,
+ l_zevParamTbl[mType].mPoint,
+ l_zevParamTbl[mType].mRoomNo,
+ l_zevParamTbl[mType].mLayer);
+ }
+ int dVar2 = daPy_py_c::i_checkNowWolf() ? 0x2e : 0x4a;
+ if (field_0x5e1++ == dVar2) {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ cXyz cStack_30;
+ csXyz cStack_38(0, fopAcM_GetShapeAngle_p(player)->y + 0x8000, 0);
+ mDoMtx_stack_c::transS(fopAcM_GetPosition(player));
+ mDoMtx_stack_c::YrotM(cStack_38.y);
+ mDoMtx_stack_c::transM(0.0f, 240.0f, -710.0f);
+ mDoMtx_stack_c::multVecZero(&cStack_30);
+ dComIfGp_particle_set(0x86c5, &cStack_30, &cStack_38, NULL);
+ Z2GetAudioMgr()->seStart(Z2SE_OBJ_DARK_GATE_RIPPLE, &cStack_30, 0, 0,
+ 1.0f, 1.0f, -1.0f, -1.0f, 0);
+ evtMng.cutEnd(staffId);
+ }
+ break;
+ case '0003':
+ if (dComIfGp_getEvent().checkSkipEdge()) {
+ dComIfGp_getEvent().onSkipFade();
+ dComIfGp_setNextStage(
+ l_zevParamTbl[mType].mStage,
+ l_zevParamTbl[mType].mPoint,
+ l_zevParamTbl[mType].mRoomNo,
+ l_zevParamTbl[mType].mLayer);
+ }
+ if (mpMorf->isStop()) {
+ evtMng.cutEnd(staffId);
+ }
+ break;
+ }
+
+ if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
+ dComIfGp_event_reset();
+ field_0x5e0 = 0;
+ setAction(ACT_WAIT);
+ }
}
/* 80D5456C-80D545F8 001FEC 008C+00 1/0 0/0 0/0 .text initDemoHyral1__13daTagTWGate_cFv
@@ -740,30 +783,48 @@ void daTagTWGate_c::initDemoHyral1() {
/* 80D545F8-80D54770 002078 0178+00 1/0 0/0 0/0 .text executeDemoHyral1__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoHyral1() {
- // NONMATCHING
+ dEvent_manager_c& evtMng = dComIfGp_getEventManager();
+ int staffId = evtMng.getMyStaffId(l_myName, NULL, 0);
+ if (staffId != -1) {
+ int* cutName = (int*)evtMng.getMyNowCutName(staffId);
+ if (evtMng.getIsAddvance(staffId)) {
+ switch (*cutName) {
+ case '0001':
+ dComIfGp_getEvent().startCheckSkipEdge(this);
+ break;
+ }
+ }
+ switch (*cutName) {
+ case '0001':
+ if (dComIfGp_getEvent().checkSkipEdge()) {
+ dComIfGp_getEvent().onSkipFade();
+ setAction(ACT_DEMO_HYRAL_2);
+ }
+ evtMng.cutEnd(staffId);
+ break;
+ }
+ if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1 && evtMng.endCheck(mEventID)) {
+ setAction(ACT_DEMO_HYRAL_2);
+ }
+ }
}
/* 80D54770-80D5486C 0021F0 00FC+00 1/0 0/0 0/0 .text initDemoHyral2__13daTagTWGate_cFv
*/
-// load order
-#ifdef NONMATCHING
void daTagTWGate_c::initDemoHyral2() {
fopAcM_onSwitch(this, getSwitch());
eventInfo.setArchiveName(l_zevParamTbl[mType].mArcName);
- dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
- mEventID = dComIfGp_getEventManager().getEventIdx(this, l_zevParamTbl[mType].mTalkEventName, 0xff);
- if (dComIfGp_event_runCheck()) {
+ dComIfG_play_c& play = g_dComIfG_gameInfo.play;
+ dEvent_manager_c& mng = play.getEvtManager();
+ mng.setObjectArchive(eventInfo.getArchiveName());
+ mEventID = mng.getEventIdx(this, l_zevParamTbl[mType].mTalkEventName, 0xff);
+ if (play.getEvent().mEventStatus != 0) {
dComIfGp_getEvent().reset(this);
fopAcM_orderChangeEventId(this, mEventID, 1, 0xffff);
} else {
fopAcM_orderOtherEventId(this, mEventID, 0xff, 0xffff, 4, 1);
}
}
-#else
-void daTagTWGate_c::initDemoHyral2() {
- // NONMATCHING
-}
-#endif
/* 80D5486C-80D54A30 0022EC 01C4+00 1/0 0/0 0/0 .text executeDemoHyral2__13daTagTWGate_cFv */
void daTagTWGate_c::executeDemoHyral2() {
@@ -892,22 +953,6 @@ void daTagTWGate_c::executeDemoHyral3() {
}
}
-
-/* ############################################################################################## */
-/* 80D55840-80D55844 000094 0004+00 0/1 0/0 0/0 .rodata @4790 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4790 = 250.0f;
-COMPILER_STRIP_GATE(0x80D55840, &lit_4790);
-#pragma pop
-
-/* 80D55844-80D55848 000098 0004+00 0/1 0/0 0/0 .rodata @4791 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4791 = -840.0f;
-COMPILER_STRIP_GATE(0x80D55844, &lit_4791);
-#pragma pop
-
/* 80D54ECC-80D54F88 00294C 00BC+00 4/4 0/0 0/0 .text initBaseMtx__13daTagTWGate_cFv */
void daTagTWGate_c::initBaseMtx() {
cullMtx = mpMorf->getModel()->getBaseTRMtx();
@@ -925,7 +970,6 @@ void daTagTWGate_c::initBaseMtx() {
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
}
-
/* 80D54F88-80D5502C 002A08 00A4+00 4/4 0/0 0/0 .text downloadModels__13daTagTWGate_cFv
*/
int daTagTWGate_c::downloadModels() {
@@ -1004,7 +1048,6 @@ int daTagTWGate_c::CreateHeap() {
}
}
-
int daTagTWGate_c::create() {
fopAcM_SetupActor(this, daTagTWGate_c);
@@ -1052,7 +1095,6 @@ static int daTagTWGate_Execute(daTagTWGate_c* i_gate) {
return i_gate->execute();
}
-
/* 80D554E4-80D55518 002F64 0034+00 1/0 0/0 0/0 .text daTagTWGate_Draw__FP13daTagTWGate_c
*/
static int daTagTWGate_Draw(daTagTWGate_c* i_gate) {
@@ -1066,25 +1108,28 @@ static int daTagTWGate_IsDelete(daTagTWGate_c*) {
/* ############################################################################################## */
/* 80D55C08-80D55C28 -00001 0020+00 1/0 0/0 0/0 .data l_daTagTWGate_Method */
-SECTION_DATA static void* l_daTagTWGate_Method[8] = {
- (void*)daTagTWGate_Create__FP10fopAc_ac_c,
- (void*)daTagTWGate_Delete__FP13daTagTWGate_c,
- (void*)daTagTWGate_Execute__FP13daTagTWGate_c,
- (void*)daTagTWGate_IsDelete__FP13daTagTWGate_c,
- (void*)daTagTWGate_Draw__FP13daTagTWGate_c,
- (void*)NULL,
- (void*)NULL,
- (void*)NULL,
+static actor_method_class l_daTagTWGate_Method = {
+ (process_method_func)daTagTWGate_Create, (process_method_func)daTagTWGate_Delete,
+ (process_method_func)daTagTWGate_Execute, (process_method_func)daTagTWGate_IsDelete,
+ (process_method_func)daTagTWGate_Draw,
};
/* 80D55C28-80D55C58 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_TWGate */
-SECTION_DATA extern void* g_profile_Tag_TWGate[12] = {
- (void*)0xFFFFFFFD, (void*)0x0007FFFD,
- (void*)0x02C80000, (void*)&g_fpcLf_Method,
- (void*)0x000005E4, (void*)NULL,
- (void*)NULL, (void*)&g_fopAc_Method,
- (void*)0x01050000, (void*)&l_daTagTWGate_Method,
- (void*)0x00040000, (void*)0x000E0000,
+extern actor_process_profile_definition g_profile_Tag_TWGate = {
+ fpcLy_CURRENT_e,
+ 7,
+ fpcPi_CURRENT_e,
+ PROC_Tag_TWGate,
+ &g_fpcLf_Method.mBase,
+ sizeof(daTagTWGate_c),
+ 0,
+ 0,
+ &g_fopAc_Method.base,
+ 0x105,
+ &l_daTagTWGate_Method,
+ 0x40000,
+ fopAc_ACTOR_e,
+ fopAc_CULLBOX_CUSTOM_e,
};
-/* 80D55848-80D55848 00009C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ \ No newline at end of file
+/* 80D55848-80D55848 00009C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
diff --git a/src/d/actor/d_a_tag_qs.cpp b/src/d/actor/d_a_tag_qs.cpp
index 8bef61ab73..0b7416bc72 100644
--- a/src/d/actor/d_a_tag_qs.cpp
+++ b/src/d/actor/d_a_tag_qs.cpp
@@ -1,111 +1,15 @@
//
-// Generated By: dol2asm
-// Translation Unit: d_a_tag_qs
+// d_a_tag_qs
//
#include "d/actor/d_a_tag_qs.h"
+#include "d/actor/d_a_obj_carry.h"
+#include "d/actor/d_a_player.h"
#include "d/d_cc_d.h"
-#include "dol2asm.h"
-
-//
-// Types:
-//
-
-struct fopAc_ac_c {
- /* 80018B64 */ fopAc_ac_c();
- /* 80018C8C */ ~fopAc_ac_c();
-};
-
-struct daTagQs_c {
- /* 80D5DE78 */ ~daTagQs_c();
- /* 80D5DFB0 */ void create();
- /* 80D5E1FC */ void getPower();
- /* 80D5E220 */ void getSafeArea();
- /* 80D5E244 */ void getPower80();
- /* 80D5E268 */ void getCenterPower();
- /* 80D5E28C */ void calcPower(f32, f32);
- /* 80D5E9F8 */ void execute();
- /* 80D5EBF8 */ bool draw();
-};
-
-struct daItem_c {
- /* 80037BE0 */ void startCtrl();
-};
-
-struct daItemBase_c {
- /* 80037A5C */ void getItemNo();
-};
-
-struct dSv_info_c {
- /* 80035360 */ void isSwitch(int, int) const;
-};
-
-//
-// Forward References:
-//
-
-extern "C" void __dt__9daTagQs_cFv();
-extern "C" void create__9daTagQs_cFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" void __dt__8cM3dGCylFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void getPower__9daTagQs_cFv();
-extern "C" void getSafeArea__9daTagQs_cFv();
-extern "C" void getPower80__9daTagQs_cFv();
-extern "C" void getCenterPower__9daTagQs_cFv();
-extern "C" void calcPower__9daTagQs_cFff();
-extern "C" static void hikiyose__FP4cXyzP4cXyzP4cXyzf();
-extern "C" static void search__FPvPv();
-extern "C" void execute__9daTagQs_cFv();
-extern "C" bool draw__9daTagQs_cFv();
-extern "C" static void daTagQs_Draw__FP9daTagQs_c();
-extern "C" static void daTagQs_Execute__FP9daTagQs_c();
-extern "C" static bool daTagQs_IsDelete__FP9daTagQs_c();
-extern "C" static void daTagQs_Delete__FP9daTagQs_c();
-extern "C" static void daTagQs_Create__FP10fopAc_ac_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-
-//
-// External References:
-//
-
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void __dt__10fopAc_ac_cFv();
-extern "C" void fopAc_IsActor__FPv();
-extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
-extern "C" void fopAcM_delete__FP10fopAc_ac_c();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void dComIfGs_BossLife_public_Set__FSc();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getItemNo__12daItemBase_cFv();
-extern "C" void startCtrl__8daItem_cFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void __dt__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void normalize__4cXyzFv();
-extern "C" void cM_atan2s__Fff();
-extern "C" void cM_rndFX__Ff();
-extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void __dl__FPv();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* g_fopAc_Method[8];
-extern "C" extern void* __vt__8dCcD_Cyl[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_CylAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-
-//
-// Declarations:
-//
+#include "d/d_a_item_static.h"
+#include "d/d_save.h"
+#include "d/d_com_inf_game.h"
+#include "SSystem/SComponent/c_math.h"
/* ############################################################################################## */
/* 80D5ED44-80D5ED88 000000 0044+00 1/1 0/0 0/0 .data l_cc_cyl_src */
@@ -123,295 +27,244 @@ static dCcD_SrcCyl l_cc_cyl_src = {
} // mCyl
};
-/* 80D5ED88-80D5EDA8 -00001 0020+00 1/0 0/0 0/0 .data l_daTagQs_Method */
-SECTION_DATA static void* l_daTagQs_Method[8] = {
- (void*)daTagQs_Create__FP10fopAc_ac_c,
- (void*)daTagQs_Delete__FP9daTagQs_c,
- (void*)daTagQs_Execute__FP9daTagQs_c,
- (void*)daTagQs_IsDelete__FP9daTagQs_c,
- (void*)daTagQs_Draw__FP9daTagQs_c,
- (void*)NULL,
- (void*)NULL,
- (void*)NULL,
-};
-
-/* 80D5EDA8-80D5EDD8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_TAG_QS */
-SECTION_DATA extern void* g_profile_TAG_QS[12] = {
- (void*)0xFFFFFFFD, (void*)0x0007FFFD,
- (void*)0x02230000, (void*)&g_fpcLf_Method,
- (void*)0x000006F0, (void*)NULL,
- (void*)NULL, (void*)&g_fopAc_Method,
- (void*)0x01120000, (void*)&l_daTagQs_Method,
- (void*)0x00040000, (void*)NULL,
-};
-
-/* 80D5EDD8-80D5EDE4 000094 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 80D5EDE4-80D5EDF0 0000A0 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */
-SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGCylFv,
-};
-
-/* 80D5EDF0-80D5EDFC 0000AC 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
-
-/* 80D5EDFC-80D5EE08 0000B8 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
-};
-
/* 80D5DE78-80D5DFB0 000078 0138+00 1/1 0/0 0/0 .text __dt__9daTagQs_cFv */
-daTagQs_c::~daTagQs_c() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 80D5ECE0-80D5ECE4 000000 0004+00 5/5 0/0 0/0 .rodata @3734 */
-SECTION_RODATA static f32 const lit_3734 = 1.0f;
-COMPILER_STRIP_GATE(0x80D5ECE0, &lit_3734);
-
-/* 80D5ECE4-80D5ECE8 000004 0004+00 1/3 0/0 0/0 .rodata @3735 */
-SECTION_RODATA static f32 const lit_3735 = 20.0f;
-COMPILER_STRIP_GATE(0x80D5ECE4, &lit_3735);
-
-/* 80D5ECE8-80D5ECEC 000008 0004+00 0/1 0/0 0/0 .rodata @3736 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3736 = 50.0f;
-COMPILER_STRIP_GATE(0x80D5ECE8, &lit_3736);
-#pragma pop
+daTagQs_c::~daTagQs_c() {}
/* 80D5DFB0-80D5E110 0001B0 0160+00 1/1 0/0 0/0 .text create__9daTagQs_cFv */
-void daTagQs_c::create() {
- // NONMATCHING
+int daTagQs_c::create() {
+ fopAcM_SetupActor(this, daTagQs_c);
+ f32 typeScale;
+ if (getType() == 0) {
+ typeScale = 1.0f;
+ } else {
+ typeScale = 20.0f;
+ }
+ field_0x568 = scale.x * 50.0f * typeScale;
+ field_0x56c = scale.y * 50.0f * typeScale;
+ field_0x570 = 0;
+ field_0x574 = 0;
+ mStts.Init(0xff, 0, this);
+ mCyl.Set(l_cc_cyl_src);
+ mCyl.SetStts(&mStts);
+ return cPhs_COMPLEATE_e;
}
-/* 80D5E110-80D5E16C 000310 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80D5E16C-80D5E1B4 00036C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
-// cM3dGCyl::~cM3dGCyl() {
-extern "C" void __dt__8cM3dGCylFv() {
- // NONMATCHING
-}
-
-/* 80D5E1B4-80D5E1FC 0003B4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 80D5ECEC-80D5ECF0 00000C 0004+00 1/2 0/0 0/0 .rodata @3813 */
-SECTION_RODATA static f32 const lit_3813 = 4.0f;
-COMPILER_STRIP_GATE(0x80D5ECEC, &lit_3813);
-
-/* 80D5ECF0-80D5ECF4 000010 0004+00 1/1 0/0 0/0 .rodata @3814 */
-SECTION_RODATA static f32 const lit_3814 = 5.0f;
-COMPILER_STRIP_GATE(0x80D5ECF0, &lit_3814);
-
/* 80D5E1FC-80D5E220 0003FC 0024+00 2/2 0/0 0/0 .text getPower__9daTagQs_cFv */
-void daTagQs_c::getPower() {
- // NONMATCHING
+f32 daTagQs_c::getPower() {
+ return getType() == 0 ? 4.0f : 5.0f;
}
-/* ############################################################################################## */
-/* 80D5ECF4-80D5ECF8 000014 0004+00 1/2 0/0 0/0 .rodata @3823 */
-SECTION_RODATA static f32 const lit_3823 = 4.0f / 5.0f;
-COMPILER_STRIP_GATE(0x80D5ECF4, &lit_3823);
-
-/* 80D5ECF8-80D5ECFC 000018 0004+00 1/2 0/0 0/0 .rodata @3824 */
-SECTION_RODATA static f32 const lit_3824 = 0.5f;
-COMPILER_STRIP_GATE(0x80D5ECF8, &lit_3824);
-
/* 80D5E220-80D5E244 000420 0024+00 1/1 0/0 0/0 .text getSafeArea__9daTagQs_cFv */
-void daTagQs_c::getSafeArea() {
- // NONMATCHING
+f32 daTagQs_c::getSafeArea() {
+ return getType() == 0 ? 0.8f : 0.5f;
}
-/* ############################################################################################## */
-/* 80D5ECFC-80D5ED00 00001C 0004+00 1/1 0/0 0/0 .rodata @3833 */
-SECTION_RODATA static f32 const lit_3833 = 6.0f;
-COMPILER_STRIP_GATE(0x80D5ECFC, &lit_3833);
-
-/* 80D5ED00-80D5ED04 000020 0004+00 1/1 0/0 0/0 .rodata @3834 */
-SECTION_RODATA static f32 const lit_3834 = 10.0f;
-COMPILER_STRIP_GATE(0x80D5ED00, &lit_3834);
-
/* 80D5E244-80D5E268 000444 0024+00 1/1 0/0 0/0 .text getPower80__9daTagQs_cFv */
-void daTagQs_c::getPower80() {
- // NONMATCHING
+f32 daTagQs_c::getPower80() {
+ return getType() == 0 ? 6.0f : 10.0f;
}
-/* ############################################################################################## */
-/* 80D5ED04-80D5ED08 000024 0004+00 1/1 0/0 0/0 .rodata @3843 */
-SECTION_RODATA static f32 const lit_3843 = 12.0f;
-COMPILER_STRIP_GATE(0x80D5ED04, &lit_3843);
-
/* 80D5E268-80D5E28C 000468 0024+00 1/1 0/0 0/0 .text getCenterPower__9daTagQs_cFv */
-void daTagQs_c::getCenterPower() {
- // NONMATCHING
+f32 daTagQs_c::getCenterPower() {
+ return getType() == 0 ? 12.0f : 20.0f;
}
-/* ############################################################################################## */
-/* 80D5ED08-80D5ED10 000028 0004+04 0/2 0/0 0/0 .rodata @3863 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3863[1 + 1 /* padding */] = {
- 30.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x80D5ED08, &lit_3863);
-#pragma pop
-
-/* 80D5ED10-80D5ED18 000030 0008+00 0/2 0/0 0/0 .rodata @3865 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3865[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D5ED10, &lit_3865);
-#pragma pop
-
/* 80D5E28C-80D5E3F8 00048C 016C+00 1/1 0/0 0/0 .text calcPower__9daTagQs_cFff */
-void daTagQs_c::calcPower(f32 param_0, f32 param_1) {
- // NONMATCHING
+f32 daTagQs_c::calcPower(f32 param_1, f32 param_2) {
+ f32 dVar12 = 1.0f;
+ if (getSwNo() != 0xff) {
+ if (fopAcM_isSwitch(this, getSwNo())) {
+ dVar12 = field_0x570 / 30.0f;
+ } else {
+ dVar12 = (30 - field_0x574) / 30.0f;
+ }
+ }
+ if (param_2 > (param_1 * 0.8f)) {
+ return dVar12 * getPower();
+ }
+
+ return dVar12 *
+ ((1.0f - (param_2 / (param_1 * getSafeArea()))) * (getCenterPower() - getPower80()) +
+ getPower80());
}
-/* ############################################################################################## */
-/* 80D5ED18-80D5ED1C 000038 0004+00 0/2 0/0 0/0 .rodata @3934 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3934[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80D5ED18, &lit_3934);
-#pragma pop
-
-/* 80D5ED1C-80D5ED20 00003C 0004+00 0/2 0/0 0/0 .rodata @3935 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3935 = 100.0f;
-COMPILER_STRIP_GATE(0x80D5ED1C, &lit_3935);
-#pragma pop
-
-/* 80D5ED20-80D5ED28 000040 0008+00 0/2 0/0 0/0 .rodata @3936 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3936[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D5ED20, &lit_3936);
-#pragma pop
-
-/* 80D5ED28-80D5ED30 000048 0008+00 0/2 0/0 0/0 .rodata @3937 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3937[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D5ED28, &lit_3937);
-#pragma pop
-
-/* 80D5ED30-80D5ED38 000050 0008+00 0/2 0/0 0/0 .rodata @3938 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3938[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D5ED30, &lit_3938);
-#pragma pop
-
/* 80D5E3F8-80D5E64C 0005F8 0254+00 1/1 0/0 0/0 .text hikiyose__FP4cXyzP4cXyzP4cXyzf */
-static void hikiyose(cXyz* param_0, cXyz* param_1, cXyz* param_2, f32 param_3) {
- // NONMATCHING
+static int hikiyose(cXyz* param_1, cXyz* param_2, cXyz* param_3, f32 param_4) {
+ cXyz cStack_44 = *param_1 - *param_2;
+ cXyz cStack_50(cStack_44);
+ cStack_50.y = 0.0f;
+ f32 dVar6 = fabsf(cStack_50.getSquareMag());
+ if (dVar6 < 4.0f) {
+ param_2->x = param_1->x + cM_rndFX(1.0f);
+ param_2->y -= 0.5f;
+ param_2->z = param_1->z + cM_rndFX(1.0f);
+ param_3->y = param_2->y;
+ if (param_2->y < param_1->y - 100.0f) {
+ return 2;
+ }
+ return 1;
+ } else if (cStack_44.abs() < param_4) {
+ param_2->x = param_1->x;
+ param_2->y = param_1->y;
+ param_2->z = param_1->z;
+ } else {
+ cStack_44.normalize();
+ cStack_44 *= param_4;
+ *param_2 += cStack_44;
+ }
+ return 0;
}
-/* ############################################################################################## */
-/* 80D5ED38-80D5ED3C 000058 0004+00 0/1 0/0 0/0 .rodata @4042 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4042 = 110.0f;
-COMPILER_STRIP_GATE(0x80D5ED38, &lit_4042);
-#pragma pop
-
-/* 80D5ED3C-80D5ED40 00005C 0004+00 0/1 0/0 0/0 .rodata @4043 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4043 = 9.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80D5ED3C, &lit_4043);
-#pragma pop
-
/* 80D5E64C-80D5E9F8 00084C 03AC+00 1/1 0/0 0/0 .text search__FPvPv */
-static void search(void* param_0, void* param_1) {
- // NONMATCHING
+static void* search(void* param_1, void* param_2) {
+ if (param_1 == NULL || !fopAcM_IsActor(param_1)) {
+ return NULL;
+ }
+ fopAc_ac_c* actor1 = (fopAc_ac_c*) param_1;
+ daTagQs_c* actor2 = (daTagQs_c*) param_2;
+ f32 dVar9 = actor2->current.pos.absXZ(actor1->current.pos);
+ if (dVar9 > actor2->field_0x568) {
+ return NULL;
+ }
+ if (actor2->current.pos.y - 110.0f > actor1->current.pos.y ||
+ actor2->current.pos.y + actor2->field_0x56c < actor1->current.pos.y)
+ {
+ return NULL;
+ }
+ if (actor1->current.pos.y >
+ actor2->current.pos.y + (actor2->field_0x56c * dVar9) / (actor2->field_0x568 * 0.9f) + 20.0f)
+ {
+ return NULL;
+ }
+ if (fopAcM_GetProfName(param_1) == PROC_ITEM) {
+ daItem_c* item = (daItem_c*)param_1;
+ item->getItemNo();
+ if (item->getItemNo() <= 3) {
+ int iVar3 = hikiyose(&actor2->current.pos, &actor1->current.pos, &actor1->old.pos,
+ actor2->calcPower(actor2->field_0x568, dVar9));
+ if (iVar3 == 1) {
+ item->startCtrl();
+ } else if (iVar3 == 2) {
+ fopAcM_delete(actor1);
+ }
+ }
+ return NULL;
+ }
+ if (fopAcM_GetProfName(param_1) == PROC_Obj_Carry) {
+ daObjCarry_c* carry = (daObjCarry_c*)param_1;
+ if (carry->getType() == 7 || carry->getType() == 1 || carry->getType() == 5) {
+ int iVar3 = hikiyose(&actor2->current.pos, &carry->current.pos, &carry->old.pos, actor2->calcPower(actor2->field_0x568, dVar9));
+ if (iVar3 == 1) {
+ carry->startCtrl();
+ } else if (iVar3 == 2) {
+ fopAcM_delete(carry);
+ }
+ }
+ return NULL;
+ }
+ if (param_1 == daPy_getPlayerActorClass()) {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ cXyz local_58 = actor2->current.pos - player->current.pos;
+ if (local_58.getSquareMag() >= actor2->getPower()) {
+ s16 sVar6 = cM_atan2s(local_58.x, local_58.z);
+ if (!player->checkPlayerFly()) {
+ player->setOutPower(actor2->calcPower(actor2->field_0x568, dVar9), sVar6, 0);
+ }
+ }
+ return NULL;
+ }
+
+ return NULL;
}
-/* ############################################################################################## */
-/* 80D5ED40-80D5ED44 000060 0004+00 0/1 0/0 0/0 .rodata @4090 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4090 = -1.0f;
-COMPILER_STRIP_GATE(0x80D5ED40, &lit_4090);
-#pragma pop
-
/* 80D5E9F8-80D5EBF8 000BF8 0200+00 1/1 0/0 0/0 .text execute__9daTagQs_cFv */
-void daTagQs_c::execute() {
- // NONMATCHING
+int daTagQs_c::execute() {
+ fopAcM_Search(search, this);
+ if (getSwNo() != 0xff) {
+ int bossLife;
+ if (fopAcM_isSwitch(this, getSwNo())) {
+ field_0x570++;
+ if (field_0x570 > 30) {
+ field_0x570 = 30;
+ }
+ field_0x574 = 0;
+ bossLife = (field_0x570 * 100.0f) / 30.0f;
+ if (getType() == 0) {
+ Z2GetAudioMgr()->seStartLevel(Z2SE_ENV_QUICKSAND_LOOP, &current.pos, 0,
+ dComIfGp_getReverb(fopAcM_GetRoomNo(this)), 1.0f,
+ 1.0f, -1.0f, -1.0f, 0);
+ }
+ } else {
+ field_0x574++;
+ if (field_0x574 > 30) {
+ field_0x574 = 30;
+ }
+ field_0x570 = 0;
+ bossLife = 100.0f - field_0x574 * 100.0f / 30.0f;
+ }
+ dComIfGs_BossLife_public_Set(bossLife);
+ } else {
+ if (getType() == 0) {
+ Z2GetAudioMgr()->seStartLevel(Z2SE_ENV_QUICKSAND_LOOP, &current.pos, 0,
+ dComIfGp_getReverb(fopAcM_GetRoomNo(this)), 1.0f, 1.0f,
+ -1.0f, -1.0f, 0);
+ }
+ }
+ return 1;
}
/* 80D5EBF8-80D5EC00 000DF8 0008+00 1/1 0/0 0/0 .text draw__9daTagQs_cFv */
-bool daTagQs_c::draw() {
- return true;
+int daTagQs_c::draw() {
+ return 1;
}
/* 80D5EC00-80D5EC20 000E00 0020+00 1/0 0/0 0/0 .text daTagQs_Draw__FP9daTagQs_c */
-static void daTagQs_Draw(daTagQs_c* param_0) {
- // NONMATCHING
+static int daTagQs_Draw(daTagQs_c* i_this) {
+ return i_this->draw();
}
/* 80D5EC20-80D5EC40 000E20 0020+00 1/0 0/0 0/0 .text daTagQs_Execute__FP9daTagQs_c */
-static void daTagQs_Execute(daTagQs_c* param_0) {
- // NONMATCHING
+static int daTagQs_Execute(daTagQs_c* i_this) {
+ return i_this->execute();
}
/* 80D5EC40-80D5EC48 000E40 0008+00 1/0 0/0 0/0 .text daTagQs_IsDelete__FP9daTagQs_c */
-static bool daTagQs_IsDelete(daTagQs_c* param_0) {
- return true;
+static int daTagQs_IsDelete(daTagQs_c* i_this) {
+ return 1;
}
/* 80D5EC48-80D5EC70 000E48 0028+00 1/0 0/0 0/0 .text daTagQs_Delete__FP9daTagQs_c */
-static void daTagQs_Delete(daTagQs_c* param_0) {
- // NONMATCHING
+static int daTagQs_Delete(daTagQs_c* i_this) {
+ i_this->~daTagQs_c();
+ return 1;
}
/* 80D5EC70-80D5EC90 000E70 0020+00 1/0 0/0 0/0 .text daTagQs_Create__FP10fopAc_ac_c */
-static void daTagQs_Create(fopAc_ac_c* param_0) {
- // NONMATCHING
+static int daTagQs_Create(fopAc_ac_c* i_this) {
+ return static_cast<daTagQs_c*>(i_this)->create();
}
-/* 80D5EC90-80D5ECD8 000E90 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
-} \ No newline at end of file
+/* 80D5ED88-80D5EDA8 -00001 0020+00 1/0 0/0 0/0 .data l_daTagQs_Method */
+static actor_method_class l_daTagQs_Method = {
+ (process_method_func)daTagQs_Create, (process_method_func)daTagQs_Delete,
+ (process_method_func)daTagQs_Execute, (process_method_func)daTagQs_IsDelete,
+ (process_method_func)daTagQs_Draw,
+};
+
+/* 80D5EDA8-80D5EDD8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_TAG_QS */
+extern actor_process_profile_definition g_profile_TAG_QS = {
+ fpcLy_CURRENT_e,
+ 7,
+ fpcPi_CURRENT_e,
+ PROC_TAG_QS,
+ &g_fpcLf_Method.mBase,
+ sizeof(daTagQs_c),
+ 0,
+ 0,
+ &g_fopAc_Method.base,
+ 274,
+ &l_daTagQs_Method,
+ 0x40000,
+ fopAc_ACTOR_e,
+ fopAc_CULLBOX_0_e,
+};