summaryrefslogtreecommitdiff
path: root/rel
diff options
context:
space:
mode:
authorhev7 <143887945+hev7@users.noreply.github.com>2023-11-15 14:29:30 +0000
committerGitHub <noreply@github.com>2023-11-15 16:29:30 +0200
commit37c0344daaa8e8f83dcf2bc0feea014e2547cb70 (patch)
tree5357ed3c98f6af1241c3097cb765331d9b53297a /rel
parent18cb3aa72f90f81fb2ca7ba7201a835e81a6d6b6 (diff)
d_a_tag_Lv7Gate OK (#1985)
* d_a_tag_Lv7Gate OK * Fix switch cases
Diffstat (limited to 'rel')
-rw-r--r--rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate.cpp743
1 files changed, 349 insertions, 394 deletions
diff --git a/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate.cpp b/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate.cpp
index 6ca91389db..44520e98f5 100644
--- a/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate.cpp
+++ b/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate.cpp
@@ -1,445 +1,400 @@
//
-// Generated By: dol2asm
-// Translation Unit: d_a_tag_Lv7Gate
+// d_a_tag_Lv7Gate.cpp
+// City in the Sky Gate
//
#include "rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate.h"
-#include "dol2asm.h"
+#include "JSystem/JKernel/JKRHeap.h"
+#include "d/a/d_a_player.h"
+#include "d/d_path.h"
+#include "d/d_procname.h"
-//
-// Types:
-//
-
-struct request_of_phase_process_class {};
-
-struct csXyz {
- /* 802673F4 */ csXyz(s16, s16, s16);
-};
-
-struct cXyz {};
-
-struct mDoMtx_stack_c {
- /* 8000CD64 */ void transS(cXyz const&);
- /* 8000CF44 */ void ZXYrotM(csXyz const&);
-
- static u8 now[48];
-};
-
-struct J3DModelData {};
-
-struct J3DAnmTransform {};
-
-struct mDoExt_bckAnm {
- /* 8000D7DC */ void init(J3DAnmTransform*, int, int, f32, s16, s16, bool);
- /* 8000D9CC */ void entry(J3DModelData*, f32);
-};
-
-struct mDoExt_baseAnm {
- /* 8000D428 */ void play();
-};
-
-struct fopAc_ac_c {
- /* 80018B64 */ fopAc_ac_c();
- /* 80018C8C */ ~fopAc_ac_c();
-};
-
-struct daTagLv7Gate_c {
- /* 80D50C64 */ void create();
- /* 80D50D30 */ void create_init();
- /* 80D511C8 */ void execute();
- /* 80D51628 */ void calcFly();
-};
-
-struct dSv_memBit_c {
- /* 80034934 */ void isDungeonItem(int) const;
-};
-
-struct dSv_event_flag_c {
- static u8 saveBitLabels[1644 + 4 /* padding */];
-};
-
-struct dSv_event_c {
- /* 8003498C */ void onEventBit(u16);
- /* 800349BC */ void isEventBit(u16) const;
-};
-
-struct dKy_tevstr_c {};
-
-struct dScnKy_env_light_c {
- /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*);
- /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*);
-};
-
-struct dRes_info_c {};
-
-struct dRes_control_c {
- /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int);
-};
-
-struct dPath {};
-
-struct dEvt_control_c {
- /* 80042468 */ void reset();
-};
-
-struct dEvent_manager_c {
- /* 80046800 */ void setObjectArchive(char*);
- /* 80047758 */ void getEventIdx(fopAc_ac_c*, char const*, u8);
- /* 80047A78 */ void endCheck(s16);
- /* 80047B1C */ void getMyStaffId(char const*, fopAc_ac_c*, int);
- /* 80047D4C */ void getIsAddvance(int);
- /* 80047F5C */ void getMyNowCutName(int);
- /* 8004817C */ void cutEnd(int);
-};
-
-struct JAISoundID {};
+/* 80D51B50-80D51B54 -00001 0004+00 5/5 0/0 0/0 .data l_arcName */
+static char* l_arcName = "Lv7Gate";
-struct Vec {};
+inline int daTagLv7Gate_c::createHeap() {
+ // Watched City in the Sky start cutscene
+ if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[510])) {
+ return 1;
+ }
-struct Z2SeMgr {
- /* 802AC50C */ void seStartLevel(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8);
-};
+ J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 11);
+ mpModel = mDoExt_J3DModel__create(model_data, 0, 0x11000084);
-struct Z2AudioMgr {
- static u8 mAudioMgrPtr[4 + 4 /* padding */];
-};
+ if (mpModel == NULL) {
+ return 0;
+ }
-struct J3DModel {};
+ J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7);
-struct J3DFrameCtrl {
- /* 803283FC */ void init(s16);
- /* 80D50BFC */ ~J3DFrameCtrl();
-};
+ mpBck = new mDoExt_bckAnm();
-//
-// Forward References:
-//
+ if (mpBck == NULL || !mpBck->init(bck, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false)) {
+ return 0;
+ }
-extern "C" static void createSolidHeap__FP10fopAc_ac_c();
-extern "C" void __dt__12J3DFrameCtrlFv();
-extern "C" static void daTagLv7Gate_Create__FP10fopAc_ac_c();
-extern "C" void create__14daTagLv7Gate_cFv();
-extern "C" void create_init__14daTagLv7Gate_cFv();
-extern "C" static void daTagLv7Gate_Execute__FP14daTagLv7Gate_c();
-extern "C" void execute__14daTagLv7Gate_cFv();
-extern "C" void calcFly__14daTagLv7Gate_cFv();
-extern "C" static void daTagLv7Gate_Draw__FP14daTagLv7Gate_c();
-extern "C" static bool daTagLv7Gate_IsDelete__FP14daTagLv7Gate_c();
-extern "C" static void daTagLv7Gate_Delete__FP14daTagLv7Gate_c();
-extern "C" extern char const* const d_a_tag_Lv7Gate__stringBase0;
-
-//
-// External References:
-//
+ return 1;
+}
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
-extern "C" void play__14mDoExt_baseAnmFv();
-extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb();
-extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void __dt__10fopAc_ac_cFv();
-extern "C" void fopAcM_delete__FP10fopAc_ac_c();
-extern "C" void fopAcM_create__FsUlPC4cXyziPC5csXyzPC4cXyzSc();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-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 isDungeonItem__12dSv_memBit_cCFi();
-extern "C" void onEventBit__11dSv_event_cFUs();
-extern "C" void isEventBit__11dSv_event_cCFUs();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void reset__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 dPath_GetPnt__FPC5dPathi();
-extern "C" void dPath_GetRoomPath__Fii();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void __ct__5csXyzFsss();
-extern "C" void cLib_addCalcAngleS2__FPssss();
-extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
-extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz();
-extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void* __nw__FUl();
-extern "C" void __dl__FPv();
-extern "C" void init__12J3DFrameCtrlFs();
-extern "C" void PSMTXCopy();
-extern "C" void PSMTXMultVec();
-extern "C" void PSVECSquareDistance();
-extern "C" void _savegpr_23();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_23();
-extern "C" void _restgpr_29();
-extern "C" extern void* g_fopAc_Method[8];
-extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */];
-extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" extern u8 g_env_light[4880];
-extern "C" extern u32 __float_nan;
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
+/* 80D50AB8-80D50BFC 000078 0144+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */
+static int createSolidHeap(fopAc_ac_c* i_this) {
+ return static_cast<daTagLv7Gate_c*>(i_this)->createHeap();
+}
-//
-// Declarations:
-//
+/* 80D50C44-80D50C64 000204 0020+00 1/0 0/0 0/0 .text daTagLv7Gate_Create__FP10fopAc_ac_c
+ */
+static int daTagLv7Gate_Create(fopAc_ac_c* i_this) {
+ return static_cast<daTagLv7Gate_c*>(i_this)->create();
+}
-/* ############################################################################################## */
-/* 80D51AD4-80D51AD8 000000 0004+00 4/4 0/0 0/0 .rodata @3698 */
-SECTION_RODATA static f32 const lit_3698 = 1.0f;
-COMPILER_STRIP_GATE(0x80D51AD4, &lit_3698);
+/* 80D50C64-80D50D30 000224 00CC+00 1/1 0/0 0/0 .text create__14daTagLv7Gate_cFv */
+int daTagLv7Gate_c::create() {
+ int phase;
+
+ fopAcM_SetupActor(this, daTagLv7Gate_c);
+
+ if (fopAcM_GetPosition_p(daPy_getPlayerActorClass()).y < 7500.0f) {
+ return cPhs_ERROR_e;
+ } else {
+ phase = dComIfG_resLoad(&mPhase, l_arcName);
+
+ if (phase == cPhs_COMPLEATE_e) {
+ if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x5340)) {
+ return cPhs_ERROR_e;
+ } else {
+ create_init();
+ }
+ }
+ }
+
+ return phase;
+}
-/* 80D51B14-80D51B14 000040 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80D51B14 = "Lv7Gate";
-#pragma pop
+inline void daTagLv7Gate_c::setPath(u8 i_path_ID) {
+ mRoomPath = dPath_GetRoomPath(i_path_ID, fopAcM_GetRoomNo(this));
+ if (mRoomPath != NULL) {
+ dStage_dPnt_c* pnt = dPath_GetPnt(mRoomPath, 0);
+ cXyz pos1 = pnt->m_position;
-/* 80D51B50-80D51B54 -00001 0004+00 5/5 0/0 0/0 .data l_arcName */
-SECTION_DATA static void* l_arcName = (void*)&d_a_tag_Lv7Gate__stringBase0;
+ pnt = dPath_GetPnt(mRoomPath, 1);
+ cXyz pos2 = pnt->m_position;
-/* 80D51B54-80D51B74 -00001 0020+00 1/0 0/0 0/0 .data l_daTagLv7Gate_Method */
-SECTION_DATA static void* l_daTagLv7Gate_Method[8] = {
- (void*)daTagLv7Gate_Create__FP10fopAc_ac_c,
- (void*)daTagLv7Gate_Delete__FP14daTagLv7Gate_c,
- (void*)daTagLv7Gate_Execute__FP14daTagLv7Gate_c,
- (void*)daTagLv7Gate_IsDelete__FP14daTagLv7Gate_c,
- (void*)daTagLv7Gate_Draw__FP14daTagLv7Gate_c,
- (void*)NULL,
- (void*)NULL,
- (void*)NULL,
-};
+ mPos1 = pos1;
-/* 80D51B74-80D51BA4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_Lv7Gate */
-SECTION_DATA extern void* g_profile_Tag_Lv7Gate[12] = {
- (void*)0xFFFFFFFD, (void*)0x0007FFFD,
- (void*)0x02CA0000, (void*)&g_fpcLf_Method,
- (void*)0x000005B4, (void*)NULL,
- (void*)NULL, (void*)&g_fopAc_Method,
- (void*)0x01070000, (void*)&l_daTagLv7Gate_Method,
- (void*)0x00040000, (void*)0x000E0000,
-};
+ // Fake match?
+ s16 angle_y = cLib_targetAngleY(&pos1, &pos2);
+ // s16 angle_x = cLib_targetAngleX(&pos1, &pos2);
-/* 80D51BA4-80D51BB0 000054 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */
-SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12J3DFrameCtrlFv,
-};
+ // field_0x594.set(-angle_x, angle_y, 0);
+ field_0x594.x = -cLib_targetAngleX(&pos1, &pos2);
+ // field_0x594.x = -angle_x;
+ field_0x594.y = angle_y;
+ field_0x594.z = 0;
-/* 80D50AB8-80D50BFC 000078 0144+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void createSolidHeap(fopAc_ac_c* param_0) {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/createSolidHeap__FP10fopAc_ac_c.s"
-}
-#pragma pop
-
-/* 80D50BFC-80D50C44 0001BC 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm J3DFrameCtrl::~J3DFrameCtrl() {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/__dt__12J3DFrameCtrlFv.s"
+ mDistance = sqrtf(PSVECSquareDistance((Vec*)&mPos1, (Vec*)&pos2));
+ field_0x5a0 = 1;
+ mPos2 = pos2;
+ }
}
-#pragma pop
-/* 80D50C44-80D50C64 000204 0020+00 1/0 0/0 0/0 .text daTagLv7Gate_Create__FP10fopAc_ac_c
- */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void daTagLv7Gate_Create(fopAc_ac_c* param_0) {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/daTagLv7Gate_Create__FP10fopAc_ac_c.s"
+inline void daTagLv7Gate_c::initBaseMtx() {
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
}
-#pragma pop
-/* ############################################################################################## */
-/* 80D51AD8-80D51ADC 000004 0004+00 1/1 0/0 0/0 .rodata @3829 */
-SECTION_RODATA static f32 const lit_3829 = 7500.0f;
-COMPILER_STRIP_GATE(0x80D51AD8, &lit_3829);
+inline void daTagLv7Gate_c::setBaseMtx() {
+ if (mpModel) {
+ cXyz local_34(0.0f, 0.0f, speedF);
-/* 80D50C64-80D50D30 000224 00CC+00 1/1 0/0 0/0 .text create__14daTagLv7Gate_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daTagLv7Gate_c::create() {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/create__14daTagLv7Gate_cFv.s"
+ mDoMtx_stack_c::transS(mPos1);
+ mDoMtx_stack_c::ZXYrotM((csXyz&)field_0x594);
+ mDoMtx_stack_c::multVec(&local_34, (Vec*)&mPos1);
+ MTXCopy(mDoMtx_stack_c::get(), mpModel->mBaseTransformMtx);
+
+ mAttentionInfo.mPosition = mPos1;
+ }
}
-#pragma pop
-
-/* ############################################################################################## */
-/* 80D51ADC-80D51AE4 000008 0004+04 0/2 0/0 0/0 .rodata @3935 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3935[4 + 4 /* padding */] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- /* padding */
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80D51ADC, &lit_3935);
-#pragma pop
-
-/* 80D51AE4-80D51AEC 000010 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(0x80D51AE4, &lit_3936);
-#pragma pop
-
-/* 80D51AEC-80D51AF4 000018 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(0x80D51AEC, &lit_3937);
-#pragma pop
-
-/* 80D51AF4-80D51AFC 000020 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(0x80D51AF4, &lit_3938);
-#pragma pop
-
-/* 80D51AFC-80D51B00 000028 0004+00 0/1 0/0 0/0 .rodata @3939 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3939 = 1000.0f;
-COMPILER_STRIP_GATE(0x80D51AFC, &lit_3939);
-#pragma pop
-
-/* 80D51B00-80D51B04 00002C 0004+00 0/1 0/0 0/0 .rodata @3940 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u32 const lit_3940 = 0x4522B50A;
-COMPILER_STRIP_GATE(0x80D51B00, &lit_3940);
-#pragma pop
-
-/* 80D51B04-80D51B08 000030 0004+00 0/1 0/0 0/0 .rodata @3941 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3941 = -200.0f;
-COMPILER_STRIP_GATE(0x80D51B04, &lit_3941);
-#pragma pop
-
-/* 80D51B08-80D51B0C 000034 0004+00 0/1 0/0 0/0 .rodata @3942 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u32 const lit_3942 = 0x45AB6F61;
-COMPILER_STRIP_GATE(0x80D51B08, &lit_3942);
-#pragma pop
-
-/* 80D51B14-80D51B14 000040 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80D51B1C = "LV7_NORMAL_START";
-SECTION_DEAD static char const* const stringBase_80D51B2D = "LV7_CANNON_BACK";
-SECTION_DEAD static char const* const stringBase_80D51B3D = "LV7_FIRST_START";
-#pragma pop
/* 80D50D30-80D511A8 0002F0 0478+00 1/1 0/0 0/0 .text create_init__14daTagLv7Gate_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daTagLv7Gate_c::create_init() {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/create_init__14daTagLv7Gate_cFv.s"
+void daTagLv7Gate_c::create_init() {
+ mAttentionInfo.mFlags = 0;
+ mLastFrame = 0;
+ field_0x5ac = 0;
+ mEvtId = -1;
+
+ field_0x5b0 = false;
+ field_0x5b1 = false;
+
+ setPath(getPathID() & 0xFF);
+
+ mAttentionInfo.mPosition = mPos1;
+
+ if (mpModel) {
+ initBaseMtx();
+ setBaseMtx();
+ }
+
+ // City in the Sky clear
+ if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[268])) {
+ mEvName = "LV7_NORMAL_START";
+ } else {
+ // Watched City in the Sky start cutscene
+ if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[510])) {
+ if (dComIfGs_isDungeonItemWarp()) {
+ mEvName = "LV7_CANNON_BACK";
+ } else {
+ mEvName = "LV7_NORMAL_START";
+ }
+ } else {
+ mEvName = "LV7_FIRST_START";
+
+ cXyz pos = current.pos;
+ pos.y -= 1000.0f;
+
+ csXyz local_54(getFlowNodeNo(), -0x4000, 0);
+
+ fopAcM_create(PROC_NPC_TKS, 7, &pos, fopAcM_GetRoomNo(this), &local_54, NULL, -1);
+
+ pos.x = 2603.315f;
+ pos.y = -200.0f;
+ pos.z = 5485.9224f;
+
+ local_54.x = 0.0f;
+ local_54.y = -0x4000;
+ local_54.z = 0.0f;
+
+ fopAcM_create(PROC_NPC_TKJ, 0, &pos, fopAcM_GetRoomNo(this), &local_54, NULL, -1);
+ }
+ }
+ mEvtInfo.setArchiveName(l_arcName);
+ i_dComIfGp_getEventManager().setObjectArchive(mEvtInfo.getArchiveName());
+ mEvtId = i_dComIfGp_getEventManager().getEventIdx(this, mEvName, -1);
+ fopAcM_orderOtherEventId(this, mEvtId, -1, -1, 2, 1);
}
-#pragma pop
/* 80D511A8-80D511C8 000768 0020+00 1/0 0/0 0/0 .text daTagLv7Gate_Execute__FP14daTagLv7Gate_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void daTagLv7Gate_Execute(daTagLv7Gate_c* param_0) {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/daTagLv7Gate_Execute__FP14daTagLv7Gate_c.s"
+static int daTagLv7Gate_Execute(daTagLv7Gate_c* i_this) {
+ return i_this->execute();
}
-#pragma pop
-/* ############################################################################################## */
-/* 80D51B0C-80D51B10 000038 0004+00 0/1 0/0 0/0 .rodata @4046 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4046 = 96.0f;
-COMPILER_STRIP_GATE(0x80D51B0C, &lit_4046);
-#pragma pop
+inline void daTagLv7Gate_c::flyAnime() {
+ J3DAnmTransform* bck = NULL;
+ J3DAnmTransform* bck_anm = mpBck->getBckAnm();
+
+ J3DAnmTransform* bck_anm_1 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 5);
+ J3DAnmTransform* bck_anm_2 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 6);
+ J3DAnmTransform* bck_anm_3 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7);
+ J3DAnmTransform* bck_anm_4 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 8);
+
+ s32 attribute = J3DFrameCtrl::LOOP_REPEAT_e;
+
+ mLastFrame = mpBck->getFrame();
+
+ mpBck->play();
+
+ if (bck_anm == bck_anm_3) {
+ if (field_0x5ac < 150) {
+ field_0x5ac += 1;
+ if (field_0x5ac >= 150) {
+ bck = bck_anm_4;
+ attribute = J3DFrameCtrl::LOOP_ONCE_e;
+ }
+ }
+ } else if (bck_anm == bck_anm_1) {
+ if (mLastFrame > mpBck->getFrame()) {
+ bck = bck_anm_2;
+ attribute = J3DFrameCtrl::LOOP_ONCE_e;
+ }
+ } else {
+ // } else if (mpBck->isStop()) {
+ // Fake match?
+ mDoExt_bckAnm* tmp = mpBck;
+ if (tmp->isStop()) {
+ if (bck_anm == bck_anm_2) {
+ bck = bck_anm_3;
+ attribute = J3DFrameCtrl::LOOP_REPEAT_e;
+ } else if (bck_anm == bck_anm_4) {
+ bck = bck_anm_1;
+ attribute = J3DFrameCtrl::LOOP_REPEAT_e;
+ }
+ }
+ }
+ if (bck != NULL) {
+ mpBck->init(bck, 1, attribute, 1.0f, 0, -1, true);
+ }
+}
/* 80D511C8-80D51628 000788 0460+00 1/1 0/0 0/0 .text execute__14daTagLv7Gate_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daTagLv7Gate_c::execute() {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/execute__14daTagLv7Gate_cFv.s"
+int daTagLv7Gate_c::execute() {
+ // Fake match?
+ dComIfG_play_c& play = g_dComIfG_gameInfo.getPlay();
+ if (i_dComIfGp_event_runCheck() && !mEvtInfo.checkCommandTalk()) {
+ s32 cut_index = i_dComIfGp_evmng_getMyStaffId(l_arcName, NULL, 0);
+ if (cut_index != -1) {
+ // int* cut_name = (int*)i_dComIfGp_getEventManager().getMyNowCutName(cut_index);
+ int* cut_name = (int*)play.getEvtManager().getMyNowCutName(cut_index);
+
+ daPy_getPlayerActorClass()->onShieldBackBone();
+
+ if (dComIfGp_evmng_getIsAddvance(cut_index)) {
+ switch (*cut_name) {
+ case '0002':
+ field_0x5b1 = true;
+ speedF = 96.0f;
+ break;
+ case '0001':
+ break;
+ case '0003':
+ break;
+ }
+ }
+
+ switch (*cut_name) {
+ case '0001':
+ dComIfGp_evmng_cutEnd(cut_index);
+ break;
+ case '0002':
+ i_mDoAud_seStartLevel(Z2SE_EN_DR_DEMO_FIRST, &mPos1, 0, 0);
+ if (!field_0x5b1) {
+ dComIfGp_evmng_cutEnd(cut_index);
+ }
+ break;
+ case '0003':
+ break;
+ }
+
+ if (mEvtInfo.checkCommandDemoAccrpt() && mEvtId != -1) {
+ cut_index = dComIfGp_evmng_endCheck(mEvtId);
+ if (cut_index != 0) {
+ i_dComIfGp_event_reset();
+ mEvtId = -1;
+ fopAcM_delete(this);
+ }
+ }
+
+ field_0x5b0 = true;
+ }
+ } else {
+ if (!field_0x5b0) {
+ mEvtInfo.setArchiveName(l_arcName);
+ i_dComIfGp_getEventManager().setObjectArchive(mEvtInfo.getArchiveName());
+ mEvtId = i_dComIfGp_getEventManager().getEventIdx(this, mEvName, -1);
+ fopAcM_orderOtherEventId(this, mEvtId, -1, -1, 0, 1);
+ field_0x5b0 = true;
+ } else {
+ fopAcM_delete(this);
+ }
+ }
+ if (field_0x5b1) {
+ calcFly();
+ flyAnime();
+ setBaseMtx();
+ }
+ return 1;
+}
+
+inline bool daTagLv7Gate_c::checkPoint(f32 i_speed) {
+ dStage_dPnt_c* pnt = dPath_GetPnt(mRoomPath, field_0x5a0);
+ mDistance -= i_speed;
+ if (sqrtf(PSVECSquareDistance((Vec*)&mPos1, (Vec*)&pnt->m_position)) < i_speed ||
+ mDistance < 0.0f) {
+ return true;
+ }
+ return false;
+}
+
+inline bool daTagLv7Gate_c::setNextPoint() {
+ bool bVar1;
+ dPath_GetPnt(mRoomPath, field_0x5a0);
+ field_0x5a0 += 1;
+ if (field_0x5a0 >= mRoomPath->m_num) {
+ field_0x5a0 = mRoomPath->m_num - 1;
+ mDistance = 0;
+ bVar1 = true;
+ } else {
+ dStage_dPnt_c* pnt = dPath_GetPnt(mRoomPath, field_0x5a0);
+
+ cXyz pos1(mPos1.x, 0.0f, mPos1.z);
+
+ cXyz pos2(pnt->m_position.x, 0.0f, pnt->m_position.z);
+
+ mDistance = sqrtf(PSVECSquareDistance((Vec*)&pos1, (Vec*)&pos2));
+ mPos2 = pnt->m_position;
+ bVar1 = false;
+ }
+ if (bVar1) {
+ field_0x5b1 = false;
+ speedF = 0;
+ }
+ return bVar1;
}
-#pragma pop
/* 80D51628-80D519BC 000BE8 0394+00 1/1 0/0 0/0 .text calcFly__14daTagLv7Gate_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daTagLv7Gate_c::calcFly() {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/calcFly__14daTagLv7Gate_cFv.s"
+void daTagLv7Gate_c::calcFly() {
+ f32 speed = speedF;
+ if (checkPoint(speed)) {
+ setNextPoint();
+ }
+ s16 angle_x = -cLib_targetAngleX(&mPos1, &mPos2);
+ s16 angle_y = cLib_targetAngleY(&mPos1, &mPos2);
+ cLib_addCalcAngleS2(&field_0x594.x, angle_x, 0xF, 0x400);
+ cLib_addCalcAngleS2(&field_0x594.y, angle_y, 0x23, 0x100);
+ cLib_addCalcAngleS2(&field_0x594.z, (field_0x594.y - angle_y) * 4, 0x23, 0x100);
+}
+
+inline int daTagLv7Gate_c::draw() {
+ if (field_0x5b1) {
+ g_env_light.settingTevStruct(0, &mPos1, &mTevStr);
+ g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr);
+ mpBck->entry(mpModel->getModelData());
+ mDoExt_modelUpdateDL(mpModel);
+ mpBck->remove(mpModel->getModelData());
+ }
+ return 1;
}
-#pragma pop
/* 80D519BC-80D51A58 000F7C 009C+00 1/0 0/0 0/0 .text daTagLv7Gate_Draw__FP14daTagLv7Gate_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void daTagLv7Gate_Draw(daTagLv7Gate_c* param_0) {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/daTagLv7Gate_Draw__FP14daTagLv7Gate_c.s"
+static int daTagLv7Gate_Draw(daTagLv7Gate_c* i_this) {
+ return i_this->draw();
}
-#pragma pop
/* 80D51A58-80D51A60 001018 0008+00 1/0 0/0 0/0 .text daTagLv7Gate_IsDelete__FP14daTagLv7Gate_c */
-static bool daTagLv7Gate_IsDelete(daTagLv7Gate_c* param_0) {
- return true;
+static int daTagLv7Gate_IsDelete(daTagLv7Gate_c* i_this) {
+ return 1;
+}
+
+inline daTagLv7Gate_c::~daTagLv7Gate_c() {
+ // Watched City in the Sky start cutscene
+ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[510]);
+ dComIfG_resDelete(&mPhase, l_arcName);
}
/* 80D51A60-80D51ACC 001020 006C+00 1/0 0/0 0/0 .text daTagLv7Gate_Delete__FP14daTagLv7Gate_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void daTagLv7Gate_Delete(daTagLv7Gate_c* param_0) {
- nofralloc
-#include "asm/rel/d/a/tag/d_a_tag_Lv7Gate/d_a_tag_Lv7Gate/daTagLv7Gate_Delete__FP14daTagLv7Gate_c.s"
+static int daTagLv7Gate_Delete(daTagLv7Gate_c* i_this) {
+ i_this->~daTagLv7Gate_c();
+ return 1;
}
-#pragma pop
-/* ############################################################################################## */
-/* 80D51B10-80D51B14 00003C 0004+00 0/0 0/0 0/0 .rodata @4047 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4047 = -1.0f;
-COMPILER_STRIP_GATE(0x80D51B10, &lit_4047);
-#pragma pop
+/* 80D51B54-80D51B74 -00001 0020+00 1/0 0/0 0/0 .data l_daTagLv7Gate_Method */
+static actor_method_class l_daTagLv7Gate_Method = {
+ (process_method_func)daTagLv7Gate_Create, (process_method_func)daTagLv7Gate_Delete,
+ (process_method_func)daTagLv7Gate_Execute, (process_method_func)daTagLv7Gate_IsDelete,
+ (process_method_func)daTagLv7Gate_Draw,
+};
-/* 80D51B14-80D51B14 000040 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 80D51B74-80D51BA4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_Lv7Gate */
+extern actor_process_profile_definition g_profile_Tag_Lv7Gate = {
+ fpcLy_CURRENT_e, // mLayerID
+ 7, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Tag_Lv7Gate, // mProcName
+ &g_fpcLf_Method.mBase, // mSubMtd
+ sizeof(daTagLv7Gate_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // mSubMtd
+ 263, // mPriority
+ &l_daTagLv7Gate_Method, // mSubMtd
+ 0x40000, // mStatus
+ 0, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // mCullType
+};