diff options
| author | SuperDude88 <82904174+SuperDude88@users.noreply.github.com> | 2023-09-19 19:49:23 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-19 16:49:23 -0700 |
| commit | 54a8ffbe372c826b048f4cb3399e61623ea55748 (patch) | |
| tree | 3571e2d69c96ebcd6b9cd5dbef9ae1d2e0e10a2c /src/d | |
| parent | 667d1228826678ab2caf7e5faece164637c6fad1 (diff) | |
daObjTpost_c Nearly OK (#60)
* daObjTpost_c Nearly OK
Also a little bit more work on fopNpc_npc_c
* Remove Duplicate Struct
Diffstat (limited to 'src/d')
| -rw-r--r-- | src/d/actor/d_a_obj_toripost.cpp | 1328 | ||||
| -rw-r--r-- | src/d/d_com_inf_game.cpp | 2 | ||||
| -rw-r--r-- | src/d/d_npc.cpp | 108 |
3 files changed, 1086 insertions, 352 deletions
diff --git a/src/d/actor/d_a_obj_toripost.cpp b/src/d/actor/d_a_obj_toripost.cpp index 1e38a03f..3ef8ce3b 100644 --- a/src/d/actor/d_a_obj_toripost.cpp +++ b/src/d/actor/d_a_obj_toripost.cpp @@ -3,421 +3,1099 @@ // Translation Unit: d_a_obj_toripost.cpp // -#include "d_a_obj_toripost.h" -#include "dolphin/types.h" - -/* 000000EC-0000010C .text createHeap_CB__FP10fopAc_ac_c */ -void createHeap_CB(fopAc_ac_c*) { - /* Nonmatching */ -} - -/* 0000010C-0000022C .text _createHeap__12daObjTpost_cFv */ -void daObjTpost_c::_createHeap() { - /* Nonmatching */ +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "f_op/f_op_actor_mng.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include "d/d_lib.h" +#include "d/d_npc.h" +#include "d/d_letter.h" +#include "d/d_item_data.h" +#include "d/d_s_play.h" +#include "d/d_a_obj.h" +#include "d/d_procname.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" + +extern dScnPly_reg_HIO_c g_regHIO; + +struct daObjTpost_c__letter_data { + /* 0x00 */ bool field_0x00; + /* 0x04 */ u32 mMsgId; + /* 0x08 */ u8 mItemId; + /* 0x0A */ u16 mEventReg; +}; + +class daObjTpost_c : public fopNpc_npc_c { +public: + enum Proc_e { + PROC_INIT = 0, + PROC_EXEC = 1 + }; + + bool _createHeap(); + bool cutProc(); + void cutPresentStart(int staffIdx); + void cutPresentProc(int staffIdx); + void cutSetAnmStart(int staffIdx); + void cutSetAnmProc(int staffIdx); + void cutDispLetterStart(int staffIdx); + void cutDispLetterProc(int staffIdx); + void deliverLetter(); + s16 getReceiveLetterNum(); + s32 getReadableLetterNum(); + u8 checkSendPrice(); + int getMsgXY(); + int getMsgNormal(); + u32 getMsg(); + u16 next_msgStatus(u32* msgId); + void anmAtr(u16); + bool checkTalk(); + void eventOrder(); + void checkOrder(); + void setAttention(); + void setAnm(s8 param_1, bool param_2); + void setMtx(); + void modeWaitInit(); + void modeWait(); + void modeTalkInit(); + void modeTalk(); + void modeTalkXYInit(); + void modeTalkXY(); + void modeReceiveInit(); + void modeReceive(); + void modeReceiveDemoInit(); + void modeReceiveDemo(); + void modeProc(Proc_e proc, int newMode); + bool _execute(); + void debugDraw(); + bool _draw(); + void createInit(); + void getArg(); + int _create(); + bool _delete(); + + inline s32 getSendPrice() { return m_send_price[mPayType]; } + + static const char m_arc_name[]; + static const daObjTpost_c__letter_data m_letter[]; + static const dCcD_SrcCyl m_cyl_src; + +private: + static const s32 m_send_price[]; + + /* 0x6C4 */ u32 mCurMode; + /* 0x6C8 */ s8 field_0x6C8; + /* 0x6C9 */ s8 field_0x6C9; + /* 0x6CA */ s8 field_0x6CA; + /* 0x6CC */ request_of_phase_process_class mPhs; + /* 0x6D4 */ mDoExt_McaMorf* mMorf; + /* 0x6D8 */ dBgS_ObjAcch mAcch; + /* 0x89C */ dBgS_AcchCir mAcchCir; + /* 0x8DC */ int field_0x8DC; + /* 0x8E0 */ int field_0x8E0; + /* 0x8E4 */ int field_0x8E4; + /* 0x8E8 */ u8 mPayType; + /* 0x8E9 */ u8 field_0x8E9; + /* 0x8EA */ u8 field_0x8EA; + /* 0x8EB */ u8 field_0x8EB; + /* 0x8EC */ s32 mNumReadable; + /* 0x8F0 */ u32 field_0x8F0; + /* 0x8F4 */ u8 field_0x8F4; + /* 0x8F5 */ u8 field_0x8F5; + /* 0x8F6 */ u8 field_0x8F6; + /* 0x8F7 */ s8 field_0x8F7; +}; + +const char daObjTpost_c::m_arc_name[] = "Toripost"; +const daObjTpost_c__letter_data daObjTpost_c::m_letter[] = { + {false, 0x1AAF, 0x07, 0xAC03}, + {false, 0x0CF9, 0x07, 0xB503}, + {false, 0x0CFA, 0xC3, 0x7D03}, + {false, 0x0CFC, 0x04, 0x7B03}, + {false, 0x0805, 0x04, 0x9D03}, + {false, 0x0CFD, 0x01, 0x7A03}, + {true, 0x0DB6, 0xCB, 0xB203}, + {false, 0x1148, 0x04, 0x8B03}, + {false, 0x1AAF, 0x07, 0xAC03}, + {true, 0x0F76, 0x9D, 0xB003}, + {false, 0x19A6, 0x3F, 0xAE03}, + {true, 0x0CFB, 0x04, 0x7C03}, + {true, 0x0F77, 0x9E, 0xAF03} +}; +const dCcD_SrcCyl daObjTpost_c::m_cyl_src = { + 0, + 0, + 0, + 0, + 0xFFFFFFBF, // Tg damage types + 0xF, + 0x79, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 0, + + // Cylinder + 0.0, // X + 0.0, // Y + 0.0, // Z + 0.0, // Radius + 0.0, // Height +}; +static const s32 daObjTpost_c::m_send_price[] = { + 0x05, + 0x0A, + 0x14 +}; + +class daObjTpost_HIO_c { +public: + daObjTpost_HIO_c(); + virtual ~daObjTpost_HIO_c() {} + + /* 0x04 */ s8 field_0x04; + /* 0x05 */ bool debug_draw; + /* 0x06 */ s8 field_0x06; + /* 0x07 */ u8 field_0x07; + /* 0x08 */ f32 attn_pos_offset; + /* 0x0C */ f32 eye_pos_offset; + /* 0x10 */ f32 talk_distance; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ s16 field_0x16; +}; + +static daObjTpost_HIO_c l_HIO; + +// need to figure out what's putting this data in front of a bunch of rels with the compiler-generated symbol names +static Vec dummy = {1.0f, 1.0f, 1.0f}; +static Vec dummy2 = {1.0f, 1.0f, 1.0f}; +static u8 dummy3[] = { + 2, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0x40, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0x3F, + 0xE0, + 0, + 0, + 0, + 0, + 0 +}; + +static int createHeap_CB(fopAc_ac_c* i_this) { + static_cast<daObjTpost_c*>(i_this)->_createHeap(); +} + +bool daObjTpost_c::_createHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arc_name, 9); + JUT_ASSERT(132, modelData != 0); + + mMorf = new mDoExt_McaMorf(modelData, 0, 0, 0, -1, 1.0f, 0, -1, 1, 0, 0x80000, 0x11000022); + + if(mMorf == 0 || mMorf->getModel() == 0) { + return 0; + } + else { + mMorf->getModel()->setUserArea((u32)this); + + return 1; + } } -/* 0000022C-00000280 .text __ct__16daObjTpost_HIO_cFv */ daObjTpost_HIO_c::daObjTpost_HIO_c() { - /* Nonmatching */ -} - -/* 00000280-000003D4 .text cutProc__12daObjTpost_cFv */ -void daObjTpost_c::cutProc() { - /* Nonmatching */ -} - -/* 000003D4-000003D8 .text cutPresentStart__12daObjTpost_cFi */ -void daObjTpost_c::cutPresentStart(int) { - /* Nonmatching */ -} - -/* 000003D8-00000474 .text cutPresentProc__12daObjTpost_cFi */ -void daObjTpost_c::cutPresentProc(int) { - /* Nonmatching */ -} - -/* 00000474-00000500 .text cutSetAnmStart__12daObjTpost_cFi */ -void daObjTpost_c::cutSetAnmStart(int) { - /* Nonmatching */ -} - -/* 00000500-00000560 .text cutSetAnmProc__12daObjTpost_cFi */ -void daObjTpost_c::cutSetAnmProc(int) { - /* Nonmatching */ + field_0x04 = -1; + debug_draw = false; + field_0x06 = 0; + field_0x07 = 0; + attn_pos_offset = 140.0f; + eye_pos_offset = 100.0f; + talk_distance = 300.0f; + field_0x14 = 30; + field_0x16 = 30; +} + +bool daObjTpost_c::cutProc() { + static const char* action_table[3] = { + "PRESENT", + "SET_ANM", + "DISP_LETTER" + }; + + int staffIdx = dComIfGp_evmng_getMyStaffId("Tpost", 0, 0); + if(staffIdx != -1) { + int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, 3, 1, 0); + if(actIdx == -1) { + dComIfGp_evmng_cutEnd(staffIdx); + } + else { + if(dComIfGp_evmng_getIsAddvance(staffIdx)) { + switch(actIdx) { + case 0: + cutPresentStart(staffIdx); + break; + case 1: + cutSetAnmStart(staffIdx); + break; + case 2: + cutDispLetterStart(staffIdx); + break; + } + } + + switch(actIdx) { + case 0: + cutPresentProc(staffIdx); + break; + case 1: + cutSetAnmProc(staffIdx); + break; + case 2: + cutDispLetterProc(staffIdx); + break; + } + } + } +} + +void daObjTpost_c::cutPresentStart(int staffIdx) { + return; +} + +void daObjTpost_c::cutPresentProc(int staffIdx) { + u32 item = fopAcM_createItemForPresentDemo(¤t.pos, m_letter[mNumReadable].mItemId, 0, -1, -1, 0, 0); + if(item != 0xFFFFFFFF) { + dComIfGp_event_setItemPartnerId(item); + dComIfGp_evmng_cutEnd(staffIdx); + } + else { + dComIfGp_evmng_cutEnd(staffIdx); + } +} + +void daObjTpost_c::cutSetAnmStart(int staffIdx) { + const char* name = dComIfGp_evmng_getMyStringP(staffIdx, "Name"); + if(name != 0 && dEvmng_strcmp(name, "HAKIDASU") == 0) { + setAnm(3, false); + } + else { + setAnm(1, false); + } +} + +void daObjTpost_c::cutSetAnmProc(int staffIdx) { + if(mMorf->isStop()) { //probably regswap in isStop() + dComIfGp_evmng_cutEnd(staffIdx); + } +} + +void daObjTpost_c::cutDispLetterStart(int staffIdx) { + mCurrMsgID = m_letter[mNumReadable].mMsgId; +} + +void daObjTpost_c::cutDispLetterProc(int staffIdx) { + u16 mode = talk(0); + if(mode == 5) { + daPy_getPlayerActorClass()->field_0x2a0 |= 0x4000; // may be a onLetterReadEyeMove__9daPy_py_cFv inline based on debug map + } + if(mode == dNpcMsgStts_BOX_CLOSED_e) { + dComIfGp_evmng_cutEnd(staffIdx); + } } -/* 00000560-00000580 .text cutDispLetterStart__12daObjTpost_cFi */ -void daObjTpost_c::cutDispLetterStart(int) { - /* Nonmatching */ -} - -/* 00000580-000005F4 .text cutDispLetterProc__12daObjTpost_cFi */ -void daObjTpost_c::cutDispLetterProc(int) { - /* Nonmatching */ -} - -/* 000005F4-00000650 .text deliverLetter__12daObjTpost_cFv */ void daObjTpost_c::deliverLetter() { - /* Nonmatching */ -} - -/* 00000650-000006C0 .text getReceiveLetterNum__12daObjTpost_cFv */ -void daObjTpost_c::getReceiveLetterNum() { - /* Nonmatching */ -} - -/* 000006C0-00000750 .text getReadableLetterNum__12daObjTpost_cFv */ -void daObjTpost_c::getReadableLetterNum() { - /* Nonmatching */ -} - -/* 00000750-000007B8 .text checkSendPrice__12daObjTpost_cFv */ -void daObjTpost_c::checkSendPrice() { - /* Nonmatching */ -} - -/* 000007B8-0000092C .text getMsgXY__12daObjTpost_cFv */ -void daObjTpost_c::getMsgXY() { - /* Nonmatching */ + switch(field_0x8F6) { + case 0x9A: + dComIfGs_onEventBit(0x1220); + break; + case 0x99: + dLetter_send(0xAC03); + break; + } +} + +s16 daObjTpost_c::getReceiveLetterNum() { + s16 num = 0; + for(int i = 1; i < 0xD; i++) { + if(dLetter_isStock(m_letter[i].mEventReg)) { + num = num + 1; + } + } + + return num; +} + +s32 daObjTpost_c::getReadableLetterNum() { + s32 num = 0; + s32 startIdx = mNumReadable ? mNumReadable : 1; + s32 readable = mNumReadable; + + if(readable < 0xD) { + for(int i = startIdx; i < 0xD; i++) { + if(dLetter_isStock(m_letter[i].mEventReg) == 0) { + continue; + } + + num = i; + break; + } + } + + return num; +} + +u8 daObjTpost_c::checkSendPrice() { + static const u8 pay_type[49] = { + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 01, + 01, + 01, + 01, + 02, + 01, + 01, + 01, + 01, + 01, + 01, + 02, + 02, + 02, + 02, + 02, + 02, + 02 + }; + + if(strcmp(dComIfGp_getStartStageName(), "sea") != 0) { + return 0; + } + else { + return pay_type[fopAcM_GetRoomNo(this)]; + } +} + +int daObjTpost_c::getMsgXY() { + s32 msgId; + GXColor col = {0x00, 0x00, 0x00, 0x80}; + cXyz pos(g_regHIO.mChild[12].mFloatRegs[0], g_regHIO.mChild[12].mFloatRegs[1], g_regHIO.mChild[12].mFloatRegs[2]); + cXyz scale(2.0f, 2.0f, 2.0f); + + switch(field_0x8F6) { + case 0x99: + case 0x9A: + msgId = 0xCE8; + col.r = g_regHIO.mChild[12].mShortRegs[0] + 0x80; + col.g = g_regHIO.mChild[12].mShortRegs[1] + 0x80; + col.b = g_regHIO.mChild[12].mShortRegs[2] + 0x80; + mDoMtx_stack_c::copy(mMorf->getModel()->mpNodeMtx[2]); + mDoMtx_stack_c::multVec(&pos, &pos); + dComIfGp_particle_set(0x57, &pos, &shape_angle, &scale, 0xFF, 0, -1, &col, 0, 0); + + break; + case 0x98: + case 0x9B: + setAnm(3, false); + field_0x8EA = 1; + msgId = 0xCEA; + + break; + default: + setAnm(3, false); + field_0x8EA = 1; + msgId = 0xCE9; + + break; + } + + return msgId; +} + +int daObjTpost_c::getMsgNormal() { + s32 msgId; + if(field_0x8EB) { + dComIfGp_setMessageCountNumber(field_0x8F0); + msgId = 0xCF7; + field_0x8EB = 0; + } + else { + if(dKy_daynight_check() == false) { + msgId = 0xCE5; + } + else { + msgId = 0xCE6; + } + } + + return msgId; +} + +u32 daObjTpost_c::getMsg() { + if(dComIfGp_event_chkTalkXY()) { + return getMsgXY(); + } + else { + return getMsgNormal(); + } +} + +u16 daObjTpost_c::next_msgStatus(u32* msgId) { + static const u32 pay_msg_num[3] = { + 0x0CEC, + 0x0CED, + 0x0CEE + }; + + u16 status = dNpcMsgStts_MSG_CONTINUES_e; + switch(*msgId) { + case 0xCE5: + case 0xCE6: + if(mNumReadable) { + dComIfGp_setMessageCountNumber(getReceiveLetterNum()); + *msgId = 0xCEB; + } + else { + *msgId = 0xCE7; + } + + break; + case 0xCEB: + dComIfGp_setMessageCountNumber(field_0x8F0); + *msgId = 0xCF7; + break; + case 0xCF7: + if(l_HIO.field_0x07 != 0 || m_letter[mNumReadable].field_0x00 != 0) { + *msgId = 0xCF3; + } + else { + field_0x8E9 = 1; + status = dNpcMsgStts_MSG_ENDS_e; + } + + break; + case 0xCE8: + *msgId = pay_msg_num[mPayType]; + + break; + case 0xCEC: + case 0xCED: + case 0xCEE: + *msgId = 0xCEF; + + break; + case 0xCEF: + if(mpCurrMsg->mSelectedChoiceIdx == 0) { + if(dComIfGs_getRupee() >= getSendPrice()) { + dComIfGp_setItemRupeeCount(-getSendPrice()); + dComIfGs_setReserveItemEmpty(); + deliverLetter(); + *msgId = 0xCF2; + } + else { + setAnm(3, false); + field_0x8EA = 1; + *msgId = 0xCF1; + } + } + else { + setAnm(3, false); + field_0x8EA = 1; + *msgId = 0xCF0; + } + + break; + case 0xCF3: + if(m_letter[mNumReadable].mEventReg == 0xB203) { + *msgId = 0xCF8; + } + else { + *msgId = 0xCF4; + } + + break; + case 0xCF4: + case 0xCF8: + if(mpCurrMsg->mSelectedChoiceIdx == 0) { + s32 price = 0x0A; + if(m_letter[mNumReadable].mEventReg == 0xB203) { + price = 0xC9; + } + if(dComIfGs_getRupee() >= price) { + dComIfGp_setItemRupeeCount(-price); + field_0x8E9 = 1; + status = dNpcMsgStts_MSG_ENDS_e; + } + else { + *msgId = 0xCF6; + } + } + else { + *msgId = 0xCF5; + } + + break; + case 0xCF5: + case 0xCF6: + mNumReadable += 1; + field_0x8F0 += 1; + mNumReadable = getReadableLetterNum(); + if(mNumReadable) { + dComIfGp_setMessageCountNumber(field_0x8F0); + *msgId = 0xCF7; + } + else { + status = dNpcMsgStts_MSG_ENDS_e; + } + + break; + default: + status = dNpcMsgStts_MSG_ENDS_e; + break; + } + + if(mCurrMsgID == m_letter[mNumReadable].mMsgId && status == dNpcMsgStts_MSG_ENDS_e) { + status = dNpcMsgStts_MSG_DISPLAYED_e; + } + + return status; +} + +bool daObjTpost_c::checkTalk() { + return fopAcM_searchPlayerDistanceXZ(this) < l_HIO.talk_distance; } -/* 0000092C-00000990 .text getMsgNormal__12daObjTpost_cFv */ -void daObjTpost_c::getMsgNormal() { - /* Nonmatching */ -} - -/* 00000990-000009EC .text getMsg__12daObjTpost_cFv */ -void daObjTpost_c::getMsg() { - /* Nonmatching */ -} - -/* 000009EC-00000CF4 .text next_msgStatus__12daObjTpost_cFPUl */ -void daObjTpost_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ -} +void daObjTpost_c::eventOrder() { + static char* a_demo_name_tbl[] = { + "DEFAULT_POST" + }; -/* 00000CF4-00000D38 .text checkTalk__12daObjTpost_cFv */ -void daObjTpost_c::checkTalk() { - /* Nonmatching */ -} + if(field_0x8F7 == 1 || field_0x8F7 == 2) { + mEvtInfo.onCondition(1); + mEvtInfo.onCondition(0x20); -/* 00000D38-00000DC0 .text eventOrder__12daObjTpost_cFv */ -void daObjTpost_c::eventOrder() { - /* Nonmatching */ + if(field_0x8F7 == 1) { + fopAcM_orderSpeakEvent(this); + } + } + else if(field_0x8F7 >= 3) { + fopAcM_orderOtherEvent2(this, a_demo_name_tbl[field_0x8F7 - 3], 1, 0x14F); + } } -/* 00000DC0-00000E48 .text checkOrder__12daObjTpost_cFv */ void daObjTpost_c::checkOrder() { - /* Nonmatching */ + if(mEvtInfo.checkCommandDemoAccrpt()) { + field_0x8F7 = 0; + return; + } + + if(mEvtInfo.checkCommandTalk()) { + if(field_0x8F7 == 1 || field_0x8F7 == 2) { + field_0x8F7 = 0; + if(dComIfGp_event_chkTalkXY()) { + field_0x8F5 = 1; + } + else { + field_0x8F4 = 1; + } + } + } + + return; } -/* 00000E48-00000EA4 .text setAttention__12daObjTpost_cFv */ void daObjTpost_c::setAttention() { - /* Nonmatching */ -} - -/* 00000EA4-0000100C .text setAnm__12daObjTpost_cFScb */ -void daObjTpost_c::setAnm(signed char, bool) { - /* Nonmatching */ + mAttentionInfo.mPosition = current.pos; + mAttentionInfo.mPosition.y += l_HIO.attn_pos_offset; + mEyePos = current.pos; + mEyePos.y += l_HIO.eye_pos_offset; +} + +void daObjTpost_c::setAnm(s8 param_1, bool param_2) { + static const int a_anm_bcks_tbl[] = { + 0x04, + 0x05, + 0x06, + }; + static const dLib_anm_prm_c a_anm_prm_tbl[] = { + { + -1, + -1, + 0, + 8.0f, + 1.0f, + 2 + }, + { + 0, + -1, + 0, + 8.0f, + 0.0f, + 0 + }, + { + 0, + -1, + 0, + 8.0f, + 1.0f, + 0 + }, + { + 1, + -1, + 0, + 8.0f, + 1.0f, + 0 + }, + { + 2, + -1, + 0, + 8.0f, + 1.0f, + 2 + }, + }; + + if(param_1 != 5) { + field_0x6C9 = param_1; + } + + if(field_0x6C8 == 0 && mMorf->getFrame() == 1.0f) { + mDoAud_seStart(0x6973, 0, 0, 0); + } + + if(field_0x6C8 == 1) { + cXyz scale; + scale.setAll(1.0f); + if(mMorf->getFrame() == 1.0f) { + dComIfGp_particle_set(0x8190, ¤t.pos, ¤t.angle, &scale, 0xFF, 0, -1, 0, 0, 0); + mDoAud_seStart(0x6974, 0, 0, 0); + } + } + + dLib_bcks_setAnm(m_arc_name, mMorf, &field_0x6C8, &field_0x6C9, &field_0x6CA, a_anm_bcks_tbl, a_anm_prm_tbl, param_2); } -/* 0000100C-00001094 .text setMtx__12daObjTpost_cFv */ void daObjTpost_c::setMtx() { - /* Nonmatching */ + J3DModel* pModel = mMorf->getModel(); + pModel->setBaseScale(mScale); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + MTXCopy(mDoMtx_stack_c::get(), pModel->getBaseTRMtx()); } -/* 00001094-000010E0 .text modeWaitInit__12daObjTpost_cFv */ void daObjTpost_c::modeWaitInit() { - /* Nonmatching */ + field_0x8F0 = 1; + if(mNumReadable) { + setAnm(4, false); + } + else { + setAnm(1, false); + } } -/* 000010E0-00001188 .text modeWait__12daObjTpost_cFv */ void daObjTpost_c::modeWait() { - /* Nonmatching */ + if(mNumReadable) { + setAnm(4, false); + } + else { + setAnm(1, false); + } + + if(field_0x8F4) { + modeProc(PROC_INIT, 1); + } + else { + if(field_0x8F5) { + modeProc(PROC_INIT, 2); + } + else { + if(checkTalk()) { + field_0x8F7 = 2; + } + } + } } -/* 00001188-000011B0 .text modeTalkInit__12daObjTpost_cFv */ void daObjTpost_c::modeTalkInit() { - /* Nonmatching */ + setAnm(1, false); } -/* 000011B0-00001240 .text modeTalk__12daObjTpost_cFv */ void daObjTpost_c::modeTalk() { - /* Nonmatching */ + if(talk(1) == dNpcMsgStts_BOX_CLOSED_e) { + if(field_0x8E9) { + modeProc(PROC_INIT, 3); + field_0x8E9 = 0; + } + else { + modeProc(PROC_INIT, 0); + } + + dComIfGp_event_onEventFlag(8); + field_0x8F4 = 0; + } } -/* 00001240-0000129C .text modeTalkXYInit__12daObjTpost_cFv */ void daObjTpost_c::modeTalkXYInit() { - /* Nonmatching */ + setAnm(1, false); + field_0x8F6 = dComIfGp_event_getPreItemNo(); + field_0x8DC = l_HIO.field_0x14; + field_0x8E0 = l_HIO.field_0x16; } -/* 0000129C-00001490 .text modeTalkXY__12daObjTpost_cFv */ void daObjTpost_c::modeTalkXY() { - /* Nonmatching */ + daPy_py_c* player = daPy_getPlayerActorClass(); + if(field_0x6C9 == 3) { + if(field_0x8EA != 0) { + field_0x8E4 = 10; + field_0x8EA = 0; + } + + if(field_0x8E4 != -1 && cLib_calcTimer(&field_0x8E4) == 0) { + player->mDemo.setOriginalDemoType(); + player->mDemo.setParam0(0); + player->mDemo.setDemoMode(0x18); + + field_0x8E4 = -1; + } + + switch(mCurrMsgID) { + case 0xCE9: + case 0xCEA: + case 0xCF0: + case 0xCF1: + if(player->getBaseAnimeFrameRate() == 0.0f) { + player->mDemo.setOriginalDemoType(); + player->mDemo.setParam0(0); + player->mDemo.setDemoMode(1); + } + + break; + } + } + + if(field_0x6C9 == 1 && dComIfGp_evmng_ChkPresentEnd() && cLib_calcTimer(&field_0x8E0) == 0) { + dComIfGp_evmng_CancelPresent(); + setAnm(2, false); + } + + if(field_0x6C9 == 2 || field_0x6C9 == 3) { + if(mMorf->isStop()) { //probably regswap in isStop() + if(cLib_calcTimer(&field_0x8DC) == 0 && talk(1) == dNpcMsgStts_BOX_CLOSED_e) { + modeProc(PROC_INIT, 0); + dComIfGp_event_onEventFlag(8); + field_0x8F5 = 0; + } + } + } } -/* 00001490-000014D4 .text modeReceiveInit__12daObjTpost_cFv */ void daObjTpost_c::modeReceiveInit() { - /* Nonmatching */ + dComIfGp_event_onEventFlag(8); + field_0x8F7 = 3; + setAnm(1, false); } -/* 000014D4-000014FC .text modeReceive__12daObjTpost_cFv */ void daObjTpost_c::modeReceive() { - /* Nonmatching */ + modeProc(PROC_INIT, 4); } -/* 000014FC-00001500 .text modeReceiveDemoInit__12daObjTpost_cFv */ void daObjTpost_c::modeReceiveDemoInit() { - /* Nonmatching */ + return; } -/* 00001500-000015D8 .text modeReceiveDemo__12daObjTpost_cFv */ void daObjTpost_c::modeReceiveDemo() { - /* Nonmatching */ + if(dComIfGp_getEventManager().endCheckOld("DEFAULT_POST")) { + dLetter_read(m_letter[mNumReadable].mEventReg); + mNumReadable = getReadableLetterNum(); + dComIfGp_event_onEventFlag(8); + + if(mNumReadable != 0) { + modeProc(PROC_INIT, 1); + field_0x8F7 = 1; + field_0x8EB = 1; + field_0x8F0 += 1; + } + else { + modeProc(PROC_INIT, 0); + field_0x8F0 = 1; + } + } +} + +void daObjTpost_c::modeProc(daObjTpost_c::Proc_e proc, int newMode) { + typedef void(daObjTpost_c::*mode_func_t)(void); + struct mode_entry_t { + mode_func_t init; + mode_func_t run; + const char* name; + }; + + static mode_entry_t mode_tbl[] = { + { + &daObjTpost_c::modeWaitInit, + &daObjTpost_c::modeWait, + "WAIT", + }, + { + &daObjTpost_c::modeTalkInit, + &daObjTpost_c::modeTalk, + "TALK", + }, + { + &daObjTpost_c::modeTalkXYInit, + &daObjTpost_c::modeTalkXY, + "TALK_XY", + }, + { + &daObjTpost_c::modeReceiveInit, + &daObjTpost_c::modeReceive, + "RECEIVE", + }, + { + &daObjTpost_c::modeReceiveDemoInit, + &daObjTpost_c::modeReceiveDemo, + "RECEIVE_DEMO", + } + }; + + if(proc == PROC_INIT) { + mCurMode = newMode; + (this->*mode_tbl[mCurMode].init)(); + } + else if(proc == PROC_EXEC) { + (this->*mode_tbl[mCurMode].run)(); + } +} + +bool daObjTpost_c::_execute() { + if(dComIfGs_isSymbol(1)) { + mNumReadable = getReadableLetterNum(); + } + else { + mNumReadable = 0; + } + + checkOrder(); + setAttention(); + setCollision(40.0f, 140.0f); + modeProc(PROC_EXEC, 5); + dBgS* bgs = dComIfG_Bgsp(); + + if(g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0 && mEventCut.cutProc() == false) { + cutProc(); + } + eventOrder(); + + fopAcM_posMoveF(this, 0); + mAcch.CrrPos(*bgs); + mStts.Move(); + if(mCyl.ChkTgHit()) { + daObj::HitSeStart(&mEyePos, current.roomNo, &mCyl, 0x0B); + } + daObj::HitEff_kikuzu(this, &mCyl); + fopAcM_rollPlayerCrash(this, 40.0f, 7); + + mMorf->play(0, 0, 0); + mMorf->calc(); + setMtx(); + setAnm(5, false); + + return 0; } -/* 000015D8-00001758 .text modeProc__12daObjTpost_cFQ212daObjTpost_c6Proc_ei */ -void daObjTpost_c::modeProc(daObjTpost_c::Proc_e, int) { - /* Nonmatching */ -} - -/* 00001758-000018CC .text _execute__12daObjTpost_cFv */ -void daObjTpost_c::_execute() { - /* Nonmatching */ -} - -/* 000018CC-000018D0 .text debugDraw__12daObjTpost_cFv */ void daObjTpost_c::debugDraw() { - /* Nonmatching */ -} - -/* 000018D0-00001980 .text _draw__12daObjTpost_cFv */ -void daObjTpost_c::_draw() { - /* Nonmatching */ -} - -/* 00001980-00001BA4 .text createInit__12daObjTpost_cFv */ -void daObjTpost_c::createInit() { - /* Nonmatching */ -} - -/* 00001BA4-00001BA8 .text getArg__12daObjTpost_cFv */ -void daObjTpost_c::getArg() { - /* Nonmatching */ + GXColor col = {0xFF, 0x00, 0x00, 0x80}; } -/* 00001BA8-00001D88 .text _create__12daObjTpost_cFv */ -void daObjTpost_c::_create() { - /* Nonmatching */ -} - -/* 00001D88-00001E54 .text __dt__8dCcD_CylFv */ -dCcD_Cyl::~dCcD_Cyl() { - /* Nonmatching */ -} +bool daObjTpost_c::_draw() { + if(l_HIO.debug_draw) { + debugDraw(); + } -/* 00001E54-00001E9C .text __dt__8cM3dGCylFv */ -cM3dGCyl::~cM3dGCyl() { - /* Nonmatching */ -} + J3DModel* pModel = mMorf->getModel(); + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(pModel, &mTevStr); + mMorf->entryDL(); + dComIfGd_setSimpleShadow2(getPositionP(), mAcch.GetGroundH(), 40.0f, mAcch.m_gnd, shape_angle.y, 1.0f, 0); -/* 00001E9C-00001EF8 .text __dt__14cCcD_ShapeAttrFv */ -cCcD_ShapeAttr::~cCcD_ShapeAttr() { - /* Nonmatching */ + return 1; } -/* 00001EF8-00001F40 .text __dt__8cM3dGAabFv */ -cM3dGAab::~cM3dGAab() { - /* Nonmatching */ -} - -/* 00001F40-00001F9C .text __dt__10dCcD_GSttsFv */ -dCcD_GStts::~dCcD_GStts() { - /* Nonmatching */ -} - -/* 00001F9C-00002024 .text __dt__12dBgS_AcchCirFv */ -dBgS_AcchCir::~dBgS_AcchCir() { - /* Nonmatching */ -} - -/* 00002024-00002094 .text __dt__12dBgS_ObjAcchFv */ -dBgS_ObjAcch::~dBgS_ObjAcch() { - /* Nonmatching */ -} - -/* 00002094-000020C4 .text _delete__12daObjTpost_cFv */ -void daObjTpost_c::_delete() { - /* Nonmatching */ -} - -/* 000020C4-000020E4 .text daObjTpostCreate__FPv */ -void daObjTpostCreate(void*) { - /* Nonmatching */ -} - -/* 000020E4-00002108 .text daObjTpostDelete__FPv */ -void daObjTpostDelete(void*) { - /* Nonmatching */ -} - -/* 00002108-0000212C .text daObjTpostExecute__FPv */ -void daObjTpostExecute(void*) { - /* Nonmatching */ -} - -/* 0000212C-00002150 .text daObjTpostDraw__FPv */ -void daObjTpostDraw(void*) { - /* Nonmatching */ -} - -/* 00002150-00002158 .text daObjTpostIsDelete__FPv */ -void daObjTpostIsDelete(void*) { - /* Nonmatching */ -} - -/* 00002158-000021A0 .text __dt__13cBgS_PolyInfoFv */ -cBgS_PolyInfo::~cBgS_PolyInfo() { - /* Nonmatching */ -} - -/* 000021A0-000021E8 .text __dt__8cM2dGCirFv */ -cM2dGCir::~cM2dGCir() { - /* Nonmatching */ -} - -/* 000021E8-00002244 .text __dt__8cM3dGCirFv */ -cM3dGCir::~cM3dGCir() { - /* Nonmatching */ -} - -/* 00002244-0000228C .text __dt__10cCcD_GSttsFv */ -cCcD_GStts::~cCcD_GStts() { - /* Nonmatching */ -} +void daObjTpost_c::createInit() { + if(dComIfGs_isSymbol(2)) { + dLetter_autoStock(0xB503); + } -/* 0000228C-0000229C .text GetShapeAttr__8dCcD_CylFv */ -void dCcD_Cyl::GetShapeAttr() { - /* Nonmatching */ -} + if(dComIfGs_checkGetItem(BOMB_BAG)) { + dLetter_autoStock(0x7D03); + } -/* 0000229C-000022A4 .text GetCoCP__12cCcD_CylAttrFv */ -void cCcD_CylAttr::GetCoCP() { - /* Nonmatching */ -} + if(dLetter_isDelivery(0xAC03) && dComIfGs_isStageBossEnemy(6)) { + dLetter_autoStock(0x7C03); + } -/* 000022A4-000022AC .text GetCoCP__12cCcD_CylAttrCFv */ -void cCcD_CylAttr::GetCoCP() const { - /* Nonmatching */ -} + if(dComIfGs_isEventBit(0x1E80)) { + dLetter_autoStock(0x7B03); + } -/* 000022AC-000022B4 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} + if(dComIfGs_getWalletSize() == 1 || dComIfGs_getWalletSize() == 2) { + dLetter_autoStock(0x7A03); + } -/* 000022B4-000022BC .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} + field_0x8F0 = 1; + mCurrMsgBsPcId = -1; + mpCurrMsg = 0; -/* 000022BC-000022F4 .text CrossAtTg__12cCcD_CylAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} + mAttentionInfo.mDistances[1] = 5; + mAttentionInfo.mDistances[3] = 6; + mAttentionInfo.mFlags = 0x2000000A; -/* 000022F4-000022FC .text CrossCo__12cCcD_CylAttrCFRC12cCcD_AabAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} + setAnm(1, false); + setMtx(); + mMorf->calc(); -/* 000022FC-00002304 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_TriAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} + mCullMtx = mMorf->getModel()->getBaseTRMtx(); + fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 70.0f, 200.0f, 70.0f); + mCullSizeFar = 10.0f; -/* 00002304-0000230C .text CrossCo__12cCcD_CylAttrCFRC12cCcD_PntAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} + mStts.Init(0xFF, 0xFF, this); + mCyl.Set(m_cyl_src); + mCyl.SetStts(&mStts); -/* 0000230C-00002344 .text CrossCo__12cCcD_CylAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} + mPayType = checkSendPrice(); + modeProc(PROC_INIT, 0); -/* 00002344-00002348 .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} + mAcchCir.SetWall(30.0f, 30.0f); + mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, &speed, 0, 0); + mAcch.SetRoofNone(); + mGravity = -4.5f; -/* 00002348-00002350 .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ + mEventCut.setActorInfo2("Tpost", this); } -/* 00002350-00002358 .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ +void daObjTpost_c::getArg() { + return; } -/* 00002358-00002360 .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} +int daObjTpost_c::_create() { + fopAcM_SetupActor(this, daObjTpost_c); -/* 00002360-0000236C .text GetCoCP__14cCcD_ShapeAttrFv */ -void cCcD_ShapeAttr::GetCoCP() { - /* Nonmatching */ -} + getArg(); + int step = dComIfG_resLoad(&mPhs, m_arc_name); + if(step == cPhs_COMPLEATE_e) { + if(fopAcM_entrySolidHeap(this, &createHeap_CB, 0x7E0) == 0) { + return cPhs_ERROR_e; + } -/* 0000236C-00002378 .text GetCoCP__14cCcD_ShapeAttrCFv */ -void cCcD_ShapeAttr::GetCoCP() const { - /* Nonmatching */ -} + createInit(); + } -/* 00002378-000023C0 .text __dt__16daObjTpost_HIO_cFv */ -daObjTpost_HIO_c::~daObjTpost_HIO_c() { - /* Nonmatching */ + return step; } -/* 000023C0-000023DC .text cLib_calcTimer<i>__FPi */ -void cLib_calcTimer<int>(int*) { - /* Nonmatching */ +bool daObjTpost_c::_delete() { + dComIfG_resDelete(&mPhs, m_arc_name); + return true; } -/* 00002418-00002420 .text @32@__dt__12dBgS_ObjAcchFv */ -void @32@__dt__12dBgS_ObjAcchFv { - /* Nonmatching */ +static int daObjTpostCreate(void* i_this) { + return static_cast<daObjTpost_c*>(i_this)->_create(); } -/* 00002420-00002428 .text @20@__dt__12dBgS_ObjAcchFv */ -void @20@__dt__12dBgS_ObjAcchFv { - /* Nonmatching */ +static BOOL daObjTpostDelete(void* i_this) { + return static_cast<daObjTpost_c*>(i_this)->_delete(); } -/* 00002428-00002430 .text @280@__dt__8dCcD_CylFv */ -void @280@__dt__8dCcD_CylFv { - /* Nonmatching */ +static BOOL daObjTpostExecute(void* i_this) { + return static_cast<daObjTpost_c*>(i_this)->_execute(); } -/* 00002430-00002438 .text @248@__dt__8dCcD_CylFv */ -void @248@__dt__8dCcD_CylFv { - /* Nonmatching */ +static BOOL daObjTpostDraw(void* i_this) { + return static_cast<daObjTpost_c*>(i_this)->_draw(); } -/* 00002438-00002440 .text next_msgStatus__12fopNpc_npc_cFPUl */ -void fopNpc_npc_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ +static bool daObjTpostIsDelete(void*) { + return true; } -/* 00002440-00002448 .text getMsg__12fopNpc_npc_cFv */ -void fopNpc_npc_c::getMsg() { - /* Nonmatching */ -} -/* 00002448-0000244C .text anmAtr__12fopNpc_npc_cFUs */ -void fopNpc_npc_c::anmAtr(unsigned short) { - /* Nonmatching */ -} +static actor_method_class daObjTpostMethodTable = { + (process_method_func)daObjTpostCreate, + (process_method_func)daObjTpostDelete, + (process_method_func)daObjTpostExecute, + (process_method_func)daObjTpostIsDelete, + (process_method_func)daObjTpostDraw, +}; +extern actor_process_profile_definition g_profile_OBJ_TORIPOST = { + fpcLy_CURRENT_e, + 3, + fpcPi_CURRENT_e, + PROC_OBJ_TORIPOST, + &g_fpcLf_Method.mBase, + sizeof(daObjTpost_c), + 0, + 0, + &g_fopAc_Method.base, + 0x01B3, + &daObjTpostMethodTable, + 0x00240138, + fopAc_ACTOR_e, + fopAc_CULLBOX_4_e, +}; diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index ad4681cc..13f01172 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -87,7 +87,7 @@ void dComIfG_play_c::itemInit() { for (int i = 0; i < 4; i++) { } - mCurrAuctionItemNameMsgID = 0; + mMsgCountNumber = 0; field_0x491a = 0; field_0x491c = 0; field_0x491e = 0; diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index 7572f67e..beaa5877 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -35,9 +35,10 @@ void dNpc_JntCtrl_c::limitter(s16* targetDiff, s16 maxDiff, s16 minDiff) { } } -/* 8021A884-8021A97C .text follow__14dNpc_JntCtrl_cFPsssi */ -void dNpc_JntCtrl_c::follow(short*, short, short, int) { - /* Nonmatching */ +bool dNpc_JntCtrl_c::follow(s16* outY, s16 targetY, s16 maxVel, int param_4) { + angCalcS(outY, targetY, 4, maxVel); + + return *outY != targetY; } /* 8021A97C-8021AABC .text move__14dNpc_JntCtrl_cFsi */ @@ -289,16 +290,18 @@ u8 dNpc_PathRun_c::pointArg(u8 idx) { return arg; } -bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, float param_2) { +bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, f32 param_2) { bool set = false; if(mPath != 0) { f32 max_dist = 1000000000.0f; u8 pointIdx = 0; for(int i = 0; i < maxPoint(); i++) { cXyz point = getPoint(i); + cXyz diff = (*param_1 - point); - f32 temp = diff.getMagXZ(); - f32 dist = sqrtf(param_2 * (diff.y * diff.y) + temp); + f32 xz_mag = diff.getMagXZ(); + f32 y_mag = param_2 * (diff.y * diff.y); + f32 dist = sqrtf(y_mag + xz_mag); if(max_dist > dist) { max_dist = dist; @@ -575,12 +578,12 @@ bool dNpc_setAnm_2(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int } void dNpc_HeadAnm_c::swing_vertical_init(s16 param_1, s16 param_2, s16 param_3, int param_4) { - if(param_4 == 0 || mFunc != &swing_vertical) { + if(param_4 == 0 || mFunc != &swing_horizone) { //these ptmfs should be going in rodata instead of data field_0x1C = 0; field_0x20 = param_1; field_0x1E = param_2; field_0x14 = param_3; - mFunc = &swing_vertical; + mFunc = &swing_vertical; //these ptmfs should be going in rodata instead of data } } @@ -589,14 +592,13 @@ void dNpc_HeadAnm_c::swing_vertical() { /* Nonmatching */ } -/* 8021C3C8-8021C478 .text swing_horizone_init__14dNpc_HeadAnm_cFsssi */ void dNpc_HeadAnm_c::swing_horizone_init(s16 param_1, s16 param_2, s16 param_3, int param_4) { - if(param_4 == 0 || mFunc != &swing_horizone) { + if(param_4 == 0 || mFunc != &swing_vertical) { //these ptmfs should be going in rodata instead of data field_0x1C = 0; field_0x20 = param_1; field_0x1E = param_2; field_0x18 = param_3; - mFunc = &swing_horizone; + mFunc = &swing_horizone; //these ptmfs should be going in rodata instead of data } } @@ -615,9 +617,15 @@ void dNpc_HeadAnm_c::move() { } } -/* 8021C5D8-8021C620 .text chkLim__14dNpc_JntCtrl_cFsii */ -s16 dNpc_JntCtrl_c::chkLim(short, int, int) { - /* Nonmatching */ +s32 dNpc_JntCtrl_c::chkLim(s16 param_1, int param_2, int param_3) { + //if(maxRotations[param_2][param_3] > param_1) { + // param_1 = maxRotations[param_2][param_3]; + //} + //if(param_1 < minRotations[param_2][param_3]) { + // param_1 = minRotations[param_2][param_3]; + //} + + //return param_1; } void dNpc_JntCtrl_c::turn_fromBackbone2Head(s16 param_1, s16* param_2, s16* param_3, bool param_4) { @@ -1026,24 +1034,44 @@ fopAc_ac_c* dNpc_EventCut_c::findActorCallBack(fopAc_ac_c* pActor, void* pData) dNpc_EventCut_c* cut = static_cast<dNpc_EventCut_c*>(pData); if(cut == 0) { - pActor = 0; + return 0; + } + + if(cut->mSetID != 0 && pActor->mSetID == cut->mSetID) { + cut->mTargetActorPos = pActor->current.pos; + cut->mpTargetActor = pActor; + + return pActor; } - else if(cut->mSetID == 0 || pActor->mSetID != cut->mSetID) { + else { if(cut->mpActorName == 0) { - pActor = 0; + return 0; } else { - //if(dStage_searchName(cut->mpActorName) == 0) { - // pActor = 0; - //} - //else { - //} + dStage_objectNameInf* obj = dStage_searchName(cut->mpActorName); + if(obj == 0) { + return 0; + } + else { + if(obj->mProcName == fopAcM_GetProfName(pActor) && obj->mSubtype == pActor->mSubtype) { + f32 mag = sqrtf(cut->mTargetActorPos.getSquareMag()); + + if(mag == 0.0f) { + cut->mTargetActorPos = pActor->current.pos; + cut->mpTargetActor = pActor; + } + else { + f32 mag1 = sqrtf((cut->mTargetActorPos - cut->mpActor->current.pos).getSquareMag()); + f32 mag2 = sqrtf((pActor->current.pos - cut->mpActor->current.pos).getSquareMag()); + if(mag2 < mag1) { + cut->mTargetActorPos = pActor->current.pos; + cut->mpTargetActor = pActor; + } + } + } + } } } - else { - cut->mTargetActorPos = pActor->current.pos; - cut->mpTargetActor = pActor; - } return 0; } @@ -1262,3 +1290,31 @@ void dNpc_EventCut_c::cutTalkMsgProc() { } } } + +dCcD_SrcCyl dNpc_cyl_src = { + 0, + 0, + 0, + 0, + 0xFFFFFFBF, // Tg damage types + 3, + 0x75, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + + // Cylinder + 0.0, // X + 0.0, // Y + 0.0, // Z + 0.0, // Radius + 0.0, // Height +}; |
