summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorSuperDude88 <82904174+SuperDude88@users.noreply.github.com>2023-09-19 19:49:23 -0400
committerGitHub <noreply@github.com>2023-09-19 16:49:23 -0700
commit54a8ffbe372c826b048f4cb3399e61623ea55748 (patch)
tree3571e2d69c96ebcd6b9cd5dbef9ae1d2e0e10a2c /src/d
parent667d1228826678ab2caf7e5faece164637c6fad1 (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.cpp1328
-rw-r--r--src/d/d_com_inf_game.cpp2
-rw-r--r--src/d/d_npc.cpp108
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(&current.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, &current.pos, &current.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(&current.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
+};