From 61c48f6e725000c5cfa70cb62c95ce4cf833e8f8 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Sat, 29 Jun 2024 14:27:21 +0300 Subject: [PATCH] Work on daTag_KMsg_c (#2171) --- .../d_a_tag_kmsg/daTag_KMsg_Create__FPv.s | 9 - .../d_a_tag_kmsg/daTag_KMsg_Delete__FPv.s | 9 - .../d_a_tag_kmsg/daTag_KMsg_Draw__FPv.s | 9 - .../d_a_tag_kmsg/daTag_KMsg_Execute__FPv.s | 9 - include/SSystem/SComponent/c_bg_s_lin_chk.h | 3 + include/d/a/d_a_npc.h | 2 + .../rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.h | 87 +++- .../obj/d_a_obj_smallkey/d_a_obj_smallkey.cpp | 2 +- rel/d/a/tag/d_a_tag_kmsg/Makefile | 1 + rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.cpp | 374 ++++++++++++------ src/d/a/d_a_npc.cpp | 4 +- 11 files changed, 336 insertions(+), 173 deletions(-) delete mode 100644 asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Create__FPv.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Delete__FPv.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Draw__FPv.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Execute__FPv.s diff --git a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Create__FPv.s b/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Create__FPv.s deleted file mode 100644 index 649dccca46e..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Create__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8048E9A8: -/* 8048E9A8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8048E9AC 7C 08 02 A6 */ mflr r0 -/* 8048E9B0 90 01 00 14 */ stw r0, 0x14(r1) -/* 8048E9B4 4B FF F4 C5 */ bl create__12daTag_KMsg_cFv -/* 8048E9B8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8048E9BC 7C 08 03 A6 */ mtlr r0 -/* 8048E9C0 38 21 00 10 */ addi r1, r1, 0x10 -/* 8048E9C4 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Delete__FPv.s b/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Delete__FPv.s deleted file mode 100644 index 77daa38a20a..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Delete__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8048E9C8: -/* 8048E9C8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8048E9CC 7C 08 02 A6 */ mflr r0 -/* 8048E9D0 90 01 00 14 */ stw r0, 0x14(r1) -/* 8048E9D4 4B FF F6 09 */ bl Delete__12daTag_KMsg_cFv -/* 8048E9D8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8048E9DC 7C 08 03 A6 */ mtlr r0 -/* 8048E9E0 38 21 00 10 */ addi r1, r1, 0x10 -/* 8048E9E4 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Draw__FPv.s b/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Draw__FPv.s deleted file mode 100644 index cba72b22805..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Draw__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8048EA08: -/* 8048EA08 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8048EA0C 7C 08 02 A6 */ mflr r0 -/* 8048EA10 90 01 00 14 */ stw r0, 0x14(r1) -/* 8048EA14 4B FF FE A5 */ bl Draw__12daTag_KMsg_cFv -/* 8048EA18 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8048EA1C 7C 08 03 A6 */ mtlr r0 -/* 8048EA20 38 21 00 10 */ addi r1, r1, 0x10 -/* 8048EA24 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Execute__FPv.s b/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Execute__FPv.s deleted file mode 100644 index 88dbc985f8f..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Execute__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8048E9E8: -/* 8048E9E8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8048E9EC 7C 08 02 A6 */ mflr r0 -/* 8048E9F0 90 01 00 14 */ stw r0, 0x14(r1) -/* 8048E9F4 4B FF F6 1D */ bl Execute__12daTag_KMsg_cFv -/* 8048E9F8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8048E9FC 7C 08 03 A6 */ mtlr r0 -/* 8048EA00 38 21 00 10 */ addi r1, r1, 0x10 -/* 8048EA04 4E 80 00 20 */ blr diff --git a/include/SSystem/SComponent/c_bg_s_lin_chk.h b/include/SSystem/SComponent/c_bg_s_lin_chk.h index 72595bc2b4e..ad5be886506 100644 --- a/include/SSystem/SComponent/c_bg_s_lin_chk.h +++ b/include/SSystem/SComponent/c_bg_s_lin_chk.h @@ -33,12 +33,15 @@ public: cXyz* GetCrossP() { return &mLin.GetEndP(); } cM3dGLin* GetLinP() { return &mLin; } bool ChkBackFlag() const { return mBackFlag; } + void onBackFlag() { mBackFlag = true; } bool ChkFrontFlag() const { return mFrontFlag; } + void onFrontFlag() { mFrontFlag = true; } bool GetPreWallChk() const { return mPreWallChk; } bool GetPreGroundChk() const { return mPreGroundChk; } bool GetPreRoofChk() const { return mPreRoofChk; } cXyz* GetStartP() { return &mLin.GetStartP(); } void ClrSttsRoofOff() { field_0x4c &= ~0x20000000; } + void ClrSttsWallOff() { field_0x4c &= ~0x40000000; } }; #endif /* C_BG_S_LIN_CHK_H */ diff --git a/include/d/a/d_a_npc.h b/include/d/a/d_a_npc.h index 461ce645a28..48d39aa28d5 100644 --- a/include/d/a/d_a_npc.h +++ b/include/d/a/d_a_npc.h @@ -421,6 +421,8 @@ STATIC_ASSERT(sizeof(daNpcT_c) == 0xE40); BOOL daNpcT_chkEvtBit(u32 i_idx); BOOL daNpcT_chkPointInArea(cXyz param_0, cXyz param_1, cXyz param_2, s16 param_3, int param_4); +u8 daNpcT_getDistTableIdx(int param_0, int param_1); +BOOL daNpcT_chkDoBtnIsSpeak(fopAc_ac_c* i_ActorP); struct daBaseNpc_matAnm_c { /* 8014D884 */ void calc(J3DMaterial*) const; diff --git a/include/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.h b/include/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.h index 5f9ec1f56f2..f0b028d0138 100644 --- a/include/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.h +++ b/include/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.h @@ -1,15 +1,41 @@ #ifndef D_A_TAG_KMSG_H #define D_A_TAG_KMSG_H +#include "dolphin/types.h" +#include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" +#include "d/msg/d_msg_flow.h" +#include "d/com/d_com_inf_game.h" struct daTag_KMsg_c : public fopAc_ac_c { public: - /* 8048DE78 */ void create(); - /* 8048DFDC */ void Delete(); - /* 8048E010 */ void Execute(); - /* 8048E8B8 */ bool Draw(); - /* 8048E8C0 */ void isDelete(); - /* 8048EA30 */ ~daTag_KMsg_c(); + enum KMsg_Type { + KMSG_TYPE_0, + KMSG_TYPE_1, + KMSG_TYPE_2, + KMSG_TYPE_3, + KMSG_TYPE_4, + KMSG_TYPE_5, + }; + + /* 0x568 */ request_of_phase_process_class mPhase; + /* 0x570 */ dMsgFlow_c mMsgFlow; + /* 0x5BC */ u32 mFlowNodeNo; + /* 0x5C0 */ s16 mEventIdx; + /* 0x5C2 */ u8 field_0x5c2; + /* 0x5C3 */ u8 field_0x5c3; + /* 0x5C4 */ bool field_0x5c4; + + /* 8048DE78 */ int create(); + /* 8048DFDC */ int Delete(); + /* 8048E010 */ int Execute(); + /* 8048E8B8 */ int Draw(); + /* 8048E8C0 */ int isDelete(); + /* 8048EA30 */ virtual ~daTag_KMsg_c() { + if (getType() == KMSG_TYPE_3) { + dComIfG_resDelete(&mPhase, "Lv6Gate"); + } + } void stabMasterSword() { field_0x5c2 = 1; } @@ -26,8 +52,53 @@ public: return type; } - /* 0x568 */ u8 field_0x568[0x5C2 - 0x568]; - /* 0x5C2 */ u8 field_0x5c2; + u32 getFlowNodeNo() { + u16 rv = home.angle.z; + if (rv == 0xffff) { + return -1; + } + return rv; + } + + u8 getBitSW() { + return home.angle.x; + } + + u32 getTalkAngle() { + u32 talkAngle = (fopAcM_GetParam(this) & 0xe0) >> 5; + if (talkAngle == 7) { + return 0; + } else { + return talkAngle > 6 ? 6 : talkAngle; + } + } + + u32 getTalkDis() { + u32 talkDis = fopAcM_GetParam(this) & 0x1f; + if (talkDis == 0x1f) { + return 0; + } else { + return talkDis > 0x13 ? 0x13 : talkDis; + } + } + + f32 getAttnPosOffset() { + u32 attnPosOffset = (fopAcM_GetParam(this) & 0xff0000) >> 0x10; + if (attnPosOffset == 0xff) { + return 1000000000.0f; + } else { + return attnPosOffset; + } + } + + u32 getChkType() { + return home.angle.x & 0x8000; + } + + f32 getEyePosOffset() { + u32 eyeOffset = (fopAcM_GetParam(this) & 0xff00) >> 8; + return (eyeOffset == 0xff) ? 0 : eyeOffset; + } }; #endif /* D_A_TAG_KMSG_H */ diff --git a/rel/d/a/obj/d_a_obj_smallkey/d_a_obj_smallkey.cpp b/rel/d/a/obj/d_a_obj_smallkey/d_a_obj_smallkey.cpp index b7ec728be98..2201a0acc65 100644 --- a/rel/d/a/obj/d_a_obj_smallkey/d_a_obj_smallkey.cpp +++ b/rel/d/a/obj/d_a_obj_smallkey/d_a_obj_smallkey.cpp @@ -6,7 +6,7 @@ #include "rel/d/a/obj/d_a_obj_smallkey/d_a_obj_smallkey.h" #include "d/cc/d_cc_d.h" #include "dol2asm.h" -#include "JSystem/JPArticle/JPAEmitter.h" +#include "JSystem/JParticle/JPAEmitter.h" // diff --git a/rel/d/a/tag/d_a_tag_kmsg/Makefile b/rel/d/a/tag/d_a_tag_kmsg/Makefile index aa5df9df2a1..6c8ea2188ac 100644 --- a/rel/d/a/tag/d_a_tag_kmsg/Makefile +++ b/rel/d/a/tag/d_a_tag_kmsg/Makefile @@ -19,6 +19,7 @@ M35_LIBS := \ M35_CFLAGS := \ -sdata 0 \ -sdata2 0 \ + -sym on \ M35_LDFLAGS := \ -nodefaults \ diff --git a/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.cpp b/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.cpp index 8418cbe37c7..d4bde8809a2 100644 --- a/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.cpp +++ b/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.cpp @@ -3,81 +3,13 @@ // Translation Unit: d_a_tag_kmsg // -// #include "rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.h" -#include "dolphin/types.h" +#include "rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg.h" +#include "d/a/d_a_npc.h" +#include "d/a/d_a_player.h" +#include "SSystem/SComponent/c_counter.h" +#include "string.h" #include "dol2asm.h" -// -// Types: -// - -struct request_of_phase_process_class {}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daTag_KMsg_c { - /* 8048DE78 */ void create(); - /* 8048DFDC */ void Delete(); - /* 8048E010 */ void Execute(); - /* 8048E8B8 */ bool Draw(); - /* 8048E8C0 */ void isDelete(); - /* 8048EA30 */ ~daTag_KMsg_c(); -}; - -struct dSv_info_c { - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct dMsgFlow_c { - /* 80249F00 */ dMsgFlow_c(); - /* 80249F48 */ ~dMsgFlow_c(); - /* 80249F90 */ void init(fopAc_ac_c*, int, int, fopAc_ac_c**); - /* 8024A2D8 */ void doFlow(fopAc_ac_c*, fopAc_ac_c**, int); -}; - -struct dEvt_control_c { - /* 80042468 */ void reset(); - /* 80042518 */ void reset(void*); -}; - -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); - /* 8004817C */ void cutEnd(int); -}; - -struct Vec {}; - -struct cXyz { - /* 80266AE4 */ void operator+(Vec const&) const; - /* 80266B34 */ void operator-(Vec const&) const; - /* 80266B84 */ void operator*(f32) const; - /* 80266CE4 */ void norm() const; -}; - -struct dBgS_LinChk { - /* 80077C68 */ dBgS_LinChk(); - /* 80077CDC */ ~dBgS_LinChk(); - /* 80077D64 */ void Set(cXyz const*, cXyz const*, fopAc_ac_c const*); -}; - -struct cSAngle { - /* 80270F98 */ cSAngle(s16); - /* 802710F8 */ void Sin() const; - /* 80271120 */ void Cos() const; -}; - -struct cBgS_LinChk {}; - -struct cBgS { - /* 800743B4 */ void LineCross(cBgS_LinChk*); -}; - // // Forward References: // @@ -136,11 +68,6 @@ extern "C" void Cos__7cSAngleCFv(); extern "C" void __dl__FPv(); extern "C" void _savegpr_25(); extern "C" void _restgpr_25(); -extern "C" void strlen(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 mStayNo__20dStage_roomControl_c[4]; // // Declarations: @@ -162,21 +89,23 @@ SECTION_DEAD static char const* const stringBase_8048EB17 = "sekizoA"; SECTION_DEAD static char const* const stringBase_8048EB1F = "Lv6Gate"; #pragma pop +struct EventListItem { + char* mEventName; + u32 field_0x4; +}; + /* 8048EB2C-8048EB44 -00001 0018+00 1/1 0/0 0/0 .data l_evtList */ -SECTION_DATA static void* l_evtList[6] = { - (void*)&d_a_tag_kmsg__stringBase0, - (void*)NULL, - (void*)(((char*)&d_a_tag_kmsg__stringBase0) + 0x1), - (void*)0x00000002, - (void*)(((char*)&d_a_tag_kmsg__stringBase0) + 0xC), - (void*)0x00000001, +SECTION_DATA static EventListItem l_evtList[3] = { + {"", 0}, + {"EXTINCTION", 2}, + {"PURCHASE", 1}, }; /* 8048EB44-8048EB50 -00001 000C+00 1/1 0/0 0/0 .data l_resNameList */ -SECTION_DATA static void* l_resNameList[3] = { - (void*)&d_a_tag_kmsg__stringBase0, - (void*)(((char*)&d_a_tag_kmsg__stringBase0) + 0x15), - (void*)(((char*)&d_a_tag_kmsg__stringBase0) + 0x1B), +SECTION_DATA static char* l_resNameList[3] = { + "", + "Bans1", + "sekizoA", }; /* 8048EB50-8048EB70 -00001 0020+00 1/0 0/0 0/0 .data daTag_KMsg_MethodTable */ @@ -209,24 +138,61 @@ SECTION_DATA extern void* __vt__12daTag_KMsg_c[3] = { }; /* 8048DE78-8048DFDC 000078 0164+00 1/1 0/0 0/0 .text create__12daTag_KMsg_cFv */ +// Matches with vtable +#ifdef NONMATCHING +int daTag_KMsg_c::create() { + attention_info.position = current.pos; + eyePos = attention_info.position; + fopAcM_SetupActor(this, daTag_KMsg_c); + int rv; + if (getType() == KMSG_TYPE_3) { + rv = dComIfG_resLoad(&mPhase, "Lv6Gate"); + if (rv != cPhs_COMPLEATE_e) { + return rv; + } + } + if (getType() == KMSG_TYPE_2 || getType() == KMSG_TYPE_5) { + scale.y *= 10.0f; + } + mFlowNodeNo = getFlowNodeNo(); + mEventIdx = -1; + + if (isDelete()) { + return cPhs_ERROR_e; + } else { + return cPhs_COMPLEATE_e; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daTag_KMsg_c::create() { +asm int daTag_KMsg_c::create() { nofralloc #include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/create__12daTag_KMsg_cFv.s" } #pragma pop +#endif /* 8048DFDC-8048E010 0001DC 0034+00 1/1 0/0 0/0 .text Delete__12daTag_KMsg_cFv */ +// Matches with vtable +#ifndef NONMATCHING +int daTag_KMsg_c::Delete() { + OS_REPORT("|%06d:%x|daTag_KMsg_c -> Delete\n", g_Counter, this); + fopAcM_GetID(this); + this->~daTag_KMsg_c(); + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daTag_KMsg_c::Delete() { +asm int daTag_KMsg_c::Delete() { nofralloc #include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/Delete__12daTag_KMsg_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8048EAE0-8048EAE4 000004 0004+00 0/1 0/0 0/0 .rodata @4206 */ @@ -277,80 +243,236 @@ SECTION_DEAD static char const* const stringBase_8048EB27 = "KMsg"; #pragma pop /* 8048E010-8048E8B8 000210 08A8+00 1/1 0/0 0/0 .text Execute__12daTag_KMsg_cFv */ +// Various issues: stack, getTalkAngle +#ifdef NONMATCHING +int daTag_KMsg_c::Execute() { + bool r28 = false; + if (home.roomNo == dComIfGp_roomControl_getStayNo()) { + if (isDelete()) { + fopAcM_delete(this); + return 1; + } + if (getType() == KMSG_TYPE_3) { + if (field_0x5c3 == 0) { + attention_info.flags = 0x80; + attention_info.distances[7] = 0x4a; + } else { + attention_info.flags = 0; + } + } else { + int angle = getTalkAngle(); + int talkDistance = getTalkDis(); + attention_info.distances[1] = daNpcT_getDistTableIdx(talkDistance, angle); + attention_info.distances[3] = attention_info.distances[1]; + if (getAttnPosOffset() != 1000000000.0f) { + attention_info.flags = 0xa; + } else { + attention_info.flags = 0x8; + } + } + if ((getType() == KMSG_TYPE_1 || getType() == KMSG_TYPE_4 || getType() == KMSG_TYPE_5) && + daPy_py_c::i_checkNowWolf()) + { + attention_info.flags = 0; + } + if (dComIfGp_event_runCheck()) { + if (eventInfo.checkCommandTalk()) { + u16 iVar10 = 0; + switch (getType()) { + case KMSG_TYPE_1: + iVar10 = 2; + break; + } + if (iVar10 != 0) { + if (strlen(l_evtList[iVar10].mEventName) != 0) { + if (strlen(l_resNameList[l_evtList[iVar10].field_0x4]) != 0) { + eventInfo.setArchiveName(l_resNameList[l_evtList[iVar10].field_0x4]); + dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName()); + } + mEventIdx = + dComIfGp_getEventManager().getEventIdx(this, l_evtList[iVar10].mEventName, 0xff); + dComIfGp_getEvent().reset(this); + fopAcM_orderChangeEventId(this, mEventIdx, 1, 0xffff); + } + + } else { + r28 = true; + if (!field_0x5c4) { + mMsgFlow.init(this, mFlowNodeNo, 0, NULL); + field_0x5c4 = true; + } + if (mMsgFlow.doFlow(this, NULL, 0) != 0) { + dComIfGp_event_reset(); + field_0x5c4 = false; + } + } + } else { + if (eventInfo.checkCommandDemoAccrpt() && dComIfGp_getEventManager().endCheck(mEventIdx)) { + dComIfGp_event_reset(); + mEventIdx = -1; + } else { + int myStaffId = dComIfGp_getEventManager().getMyStaffId("KMsg", this, -1); + if (myStaffId != -1) { + dComIfGp_getEventManager().cutEnd(myStaffId); + } + } + } + } else if (getType() == KMSG_TYPE_3) { + if (field_0x5c2 != 0x0) { + attention_info.flags &= ~0x10; + fopAcM_cancelCarryNow(this); + if (strlen(l_evtList[1].mEventName) != 0) { + if (strlen(l_resNameList[l_evtList[1].field_0x4]) != 0) { + eventInfo.setArchiveName(l_resNameList[l_evtList[1].field_0x4]); + dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName()); + } + mEventIdx = dComIfGp_getEventManager().getEventIdx(this, l_evtList[1].mEventName, 0xff); + fopAcM_orderOtherEventId(this, mEventIdx, 0xff, 0xffff, 4, 1); + } + } + } else { + eventInfo.i_onCondition(1); + if (getType() != KMSG_TYPE_1 && daNpcT_chkDoBtnIsSpeak(this)) { + if (getChkType() != KMSG_TYPE_0) { + dComIfGp_setDoStatusForce(0x80, 2); + } else { + dComIfGp_setDoStatus(8, 0); + } + } + } + if (getType() == KMSG_TYPE_3) { + attention_info.position = current.pos; + if (getAttnPosOffset() != 1000000000.0f) { + attention_info.position.y += getAttnPosOffset(); + } + eyePos = current.pos; + } else { + attention_info.position = current.pos; + if (getType() == KMSG_TYPE_2 || getType() == KMSG_TYPE_5) { + attention_info.position.y += scale.y; + } + eyePos = attention_info.position; + if (getAttnPosOffset() != 1000000000.0f) { + attention_info.position.y += getAttnPosOffset(); + } + eyePos.y += getEyePosOffset(); + + if (r28) { + f32 f31; + if (getAttnPosOffset() != 1000000000.0f) { + f31 = -0.5f * getAttnPosOffset(); + } else { + f31 = -20.0f; + } + + cSAngle angle = shape_angle.y; + cXyz vec60 = attention_info.position; + vec60.y += f31; + cXyz vec54; + cXyz vec9c; + vec54.x = vec60.x + 80.0f * angle.Sin(); + vec54.y = vec60.y; + vec54.z = vec60.x + 80.0f * angle.Cos(); + dBgS_LinChk lin_chk; + lin_chk.ClrSttsWallOff(); + lin_chk.onBackFlag(); + lin_chk.onFrontFlag(); + lin_chk.Set(&vec54, &vec60, NULL); + if (dComIfG_Bgsp().LineCross(&lin_chk)) { + cXyz vec30 = vec54 - vec60; + // !@bug If decompiled correctly, vec9c is uninitialized + cXyz vec48 = vec9c + vec30.norm() * 10.0f; + attention_info.position.x = vec48.x; + attention_info.position.z = vec48.z; + } + } + } + return 1; + } + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daTag_KMsg_c::Execute() { +asm int daTag_KMsg_c::Execute() { nofralloc #include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/Execute__12daTag_KMsg_cFv.s" } #pragma pop +#endif /* 8048E8B8-8048E8C0 000AB8 0008+00 1/1 0/0 0/0 .text Draw__12daTag_KMsg_cFv */ -bool daTag_KMsg_c::Draw() { - return true; +int daTag_KMsg_c::Draw() { + return 1; } /* 8048E8C0-8048E9A8 000AC0 00E8+00 2/2 0/0 0/0 .text isDelete__12daTag_KMsg_cFv */ +#ifndef NONMATCHING +int daTag_KMsg_c::isDelete() { + switch(getType()) { + case KMSG_TYPE_0: + return 0; + case KMSG_TYPE_1: + return daNpcT_chkEvtBit(0x40) == 0; + case KMSG_TYPE_2: + return 0; + case KMSG_TYPE_3: + bool rv = false; + if (getBitSW() != 0xff && dComIfGs_isSwitch(getBitSW(), fopAcM_GetRoomNo(this))) { + rv = true; + } + return rv; + case KMSG_TYPE_4: + return 0; + case KMSG_TYPE_5: + return 0; + default: + return 0; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daTag_KMsg_c::isDelete() { +asm int daTag_KMsg_c::isDelete() { nofralloc #include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/isDelete__12daTag_KMsg_cFv.s" } #pragma pop +#endif /* 8048E9A8-8048E9C8 000BA8 0020+00 1/0 0/0 0/0 .text daTag_KMsg_Create__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTag_KMsg_Create(void* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Create__FPv.s" +static int daTag_KMsg_Create(void* i_this) { + return static_cast(i_this)->create(); } -#pragma pop /* 8048E9C8-8048E9E8 000BC8 0020+00 1/0 0/0 0/0 .text daTag_KMsg_Delete__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTag_KMsg_Delete(void* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Delete__FPv.s" +static int daTag_KMsg_Delete(void* i_this) { + return static_cast(i_this)->Delete(); } -#pragma pop /* 8048E9E8-8048EA08 000BE8 0020+00 1/0 0/0 0/0 .text daTag_KMsg_Execute__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTag_KMsg_Execute(void* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Execute__FPv.s" +static int daTag_KMsg_Execute(void* i_this) { + return static_cast(i_this)->Execute(); } -#pragma pop /* 8048EA08-8048EA28 000C08 0020+00 1/0 0/0 0/0 .text daTag_KMsg_Draw__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTag_KMsg_Draw(void* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/daTag_KMsg_Draw__FPv.s" +static int daTag_KMsg_Draw(void* i_this) { + return static_cast(i_this)->Draw(); } -#pragma pop /* 8048EA28-8048EA30 000C28 0008+00 1/0 0/0 0/0 .text daTag_KMsg_IsDelete__FPv */ -static bool daTag_KMsg_IsDelete(void* param_0) { - return true; +static int daTag_KMsg_IsDelete(void* param_0) { + return 1; } /* 8048EA30-8048EAD4 000C30 00A4+00 1/0 0/0 0/0 .text __dt__12daTag_KMsg_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daTag_KMsg_c::~daTag_KMsg_c() { +asm void __dt__12daTag_KMsg_cFv() { +//asm daTag_KMsg_c::~daTag_KMsg_c() { nofralloc #include "asm/rel/d/a/tag/d_a_tag_kmsg/d_a_tag_kmsg/__dt__12daTag_KMsg_cFv.s" } diff --git a/src/d/a/d_a_npc.cpp b/src/d/a/d_a_npc.cpp index fef6fed9dd6..c5e8978c623 100644 --- a/src/d/a/d_a_npc.cpp +++ b/src/d/a/d_a_npc.cpp @@ -2775,8 +2775,8 @@ asm void daNpcT_getPlayerInfoFromPlayerList(int param_0, int param_1, cXyz* para #pragma pop /* 8014C5E0-8014C700 146F20 0120+00 0/0 0/0 5/5 .text daNpcT_chkDoBtnIsSpeak__FP10fopAc_ac_c */ -bool daNpcT_chkDoBtnIsSpeak(fopAc_ac_c* i_ActorP) { - bool ret = 0; +BOOL daNpcT_chkDoBtnIsSpeak(fopAc_ac_c* i_ActorP) { + BOOL ret = 0; if (dComIfGp_getDoStatus() == 0x1c) { if (daPy_getPlayerActorClass()->checkPriActorOwn(i_ActorP)) {