summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2023-10-26 23:57:58 -0400
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2023-10-26 23:57:58 -0400
commit828c8672e0436d7dd14eacb85d6123bec085bbd7 (patch)
treeb4d60e7401eba6724fb9bbc294c5bb564a5da99a /src/d
parentfebaa8ff151910b1d6686dcdbf2933b37cc3eeb1 (diff)
d_a_npc_md progress
Diffstat (limited to 'src/d')
-rw-r--r--src/d/actor/d_a_am.cpp2
-rw-r--r--src/d/actor/d_a_am2.cpp4
-rw-r--r--src/d/actor/d_a_npc_md.cpp471
-rw-r--r--src/d/actor/d_a_obj_barrier.cpp2
-rw-r--r--src/d/actor/d_a_obj_paper.cpp2
-rw-r--r--src/d/d_kankyo_rain.cpp2
6 files changed, 420 insertions, 63 deletions
diff --git a/src/d/actor/d_a_am.cpp b/src/d/actor/d_a_am.cpp
index 94e0362c..1fa13770 100644
--- a/src/d/actor/d_a_am.cpp
+++ b/src/d/actor/d_a_am.cpp
@@ -1367,7 +1367,7 @@ static s32 daAM_Create(fopAc_ac_c* i_actor) {
/* SrcObjAt Type */ AT_TYPE_UNK1000,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
- /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_UNK800000),
+ /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
/* SrcObjTg SPrm */ 0x03,
/* SrcObjCo SPrm */ 0x75,
/* SrcGObjAt Se */ 0,
diff --git a/src/d/actor/d_a_am2.cpp b/src/d/actor/d_a_am2.cpp
index 5f104ce3..fbaa2dfd 100644
--- a/src/d/actor/d_a_am2.cpp
+++ b/src/d/actor/d_a_am2.cpp
@@ -1450,7 +1450,7 @@ static s32 daAM2_Create(fopAc_ac_c* i_actor) {
/* SrcObjAt Type */ AT_TYPE_UNK1000,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
- /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_UNK800000),
+ /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
/* SrcObjTg SPrm */ 0x03,
/* SrcObjCo SPrm */ 0,
/* SrcGObjAt Se */ 0,
@@ -1482,7 +1482,7 @@ static s32 daAM2_Create(fopAc_ac_c* i_actor) {
/* SrcObjAt Type */ AT_TYPE_UNK1000,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
- /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_UNK800000),
+ /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
/* SrcObjTg SPrm */ 0x03,
/* SrcObjCo SPrm */ 0x75,
/* SrcGObjAt Se */ 0,
diff --git a/src/d/actor/d_a_npc_md.cpp b/src/d/actor/d_a_npc_md.cpp
index 30aa50b6..364a100b 100644
--- a/src/d/actor/d_a_npc_md.cpp
+++ b/src/d/actor/d_a_npc_md.cpp
@@ -7,6 +7,160 @@
#include "d/d_procname.h"
#include "JSystem/JKernel/JKRHeap.h"
+// Needed for the .data section to match.
+static f32 dummy1[3] = {1.0f, 1.0f, 1.0f};
+static f32 dummy2[3] = {1.0f, 1.0f, 1.0f};
+static u8 dummy3[4] = {0x02, 0x00, 0x02, 0x01};
+static f64 dummy4[2] = {3.0, 0.5};
+
+static char* l_arc_name = "Md";
+static char* l_arc_name_ship = "Md_ship";
+static char* l_staff_name = "Md1";
+
+static char* event_name_tbl[] = {
+ "Md_ItemGet",
+ "Md_RopeGet",
+ "MD_FLY",
+ "md_cliff",
+ "Md_Fly2",
+ "Md_Tact",
+ "Md_TactTrue",
+ "Md_HarpTalk",
+ "OPTION_CHAR_END",
+ "DEFAULT_TALK_XY",
+};
+
+static dCcD_SrcCyl l_cyl_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ ~(AT_TYPE_BOOMERANG | AT_TYPE_LEAF_WIND | AT_TYPE_LIGHT),
+ /* SrcObjTg SPrm */ 0x05,
+ /* SrcObjCo SPrm */ 0x75,
+ /* SrcGObjAt Se */ 0,
+ /* SrcGObjAt HitMark */ 0,
+ /* SrcGObjAt Spl */ 0,
+ /* SrcGObjAt Mtrl */ 0,
+ /* SrcGObjAt GFlag */ 0,
+ /* SrcGObjTg Se */ 0,
+ /* SrcGObjTg HitMark */ 0,
+ /* SrcGObjTg Spl */ 0,
+ /* SrcGObjTg Mtrl */ 0,
+ /* SrcGObjTg GFlag */ 0x04,
+ /* SrcGObjCo GFlag */ 0,
+ },
+ // cM3dGCylS
+ {
+ /* Center */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 30.0f,
+ /* Height */ 80.0f,
+ },
+};
+
+static dCcD_SrcCyl l_light_cyl_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ AT_TYPE_LIGHT,
+ /* SrcObjTg SPrm */ 0x03,
+ /* SrcObjCo SPrm */ 0,
+ /* SrcGObjAt Se */ 0,
+ /* SrcGObjAt HitMark */ 0,
+ /* SrcGObjAt Spl */ 0,
+ /* SrcGObjAt Mtrl */ 0,
+ /* SrcGObjAt GFlag */ 0,
+ /* SrcGObjTg Se */ 0,
+ /* SrcGObjTg HitMark */ 0,
+ /* SrcGObjTg Spl */ 0,
+ /* SrcGObjTg Mtrl */ 0,
+ /* SrcGObjTg GFlag */ 0x04,
+ /* SrcGObjCo GFlag */ 0,
+ },
+ // cM3dGCylS
+ {
+ /* Center */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 30.0f,
+ /* Height */ 80.0f,
+ },
+};
+
+static dCcD_SrcCps l_fan_light_cps_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ AT_TYPE_LIGHT,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0x0F,
+ /* SrcObjTg Type */ 0,
+ /* SrcObjTg SPrm */ 0,
+ /* SrcObjCo SPrm */ 0,
+ /* SrcGObjAt Se */ 0,
+ /* SrcGObjAt HitMark */ 0,
+ /* SrcGObjAt Spl */ 0,
+ /* SrcGObjAt Mtrl */ 0,
+ /* SrcGObjAt GFlag */ 0x02,
+ /* SrcGObjTg Se */ 0,
+ /* SrcGObjTg HitMark */ 0,
+ /* SrcGObjTg Spl */ 0,
+ /* SrcGObjTg Mtrl */ 0,
+ /* SrcGObjTg GFlag */ 0,
+ /* SrcGObjCo GFlag */ 0,
+ },
+ // cM3dGCpsS
+ {
+ /* Start */ 0.0f, 0.0f, 0.0f,
+ /* End */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 70.0f,
+ },
+};
+
+static dCcD_SrcCyl l_wind_cyl_src = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ AT_TYPE_LEAF_WIND,
+ /* SrcObjTg SPrm */ 0x03,
+ /* SrcObjCo SPrm */ 0,
+ /* SrcGObjAt Se */ 0,
+ /* SrcGObjAt HitMark */ 0,
+ /* SrcGObjAt Spl */ 0,
+ /* SrcGObjAt Mtrl */ 0,
+ /* SrcGObjAt GFlag */ 0,
+ /* SrcGObjTg Se */ 0,
+ /* SrcGObjTg HitMark */ 0,
+ /* SrcGObjTg Spl */ 0,
+ /* SrcGObjTg Mtrl */ 0,
+ /* SrcGObjTg GFlag */ 0x04,
+ /* SrcGObjCo GFlag */ 0,
+ },
+ // cM3dGCylS
+ {
+ /* Center */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 30.0f,
+ /* Height */ 80.0f,
+ },
+};
+
+static char* hairName[] = {
+ "hair1",
+ "hair2",
+ "hair3",
+ "hair4",
+ "hair5",
+ "hair6",
+ "hair7",
+};
+
+
/* 000000EC-0000013C .text __ct__15daNpc_Md_HIO6_cFv */
daNpc_Md_HIO6_c::daNpc_Md_HIO6_c() {
m04 = 500.0f;
@@ -163,8 +317,8 @@ daNpc_Md_HIO_c::daNpc_Md_HIO_c() {
}
/* 000006DC-000006FC .text daNpc_Md_XyCheckCB__FPvi */
-static void daNpc_Md_XyCheckCB(void*, int) {
- /* Nonmatching */
+static void daNpc_Md_XyCheckCB(void* i_this, int param_1) {
+ return static_cast<daNpc_Md_c*>(i_this)->XyCheckCB(param_1);
}
/* 000006FC-000007FC .text XyCheckCB__10daNpc_Md_cFi */
@@ -173,8 +327,8 @@ void daNpc_Md_c::XyCheckCB(int) {
}
/* 000007FC-0000081C .text daNpc_Md_XyEventCB__FPvi */
-static void daNpc_Md_XyEventCB(void*, int) {
- /* Nonmatching */
+static void daNpc_Md_XyEventCB(void* i_this, int param_1) {
+ return static_cast<daNpc_Md_c*>(i_this)->XyEventCB(param_1);
}
/* 0000081C-00000864 .text XyEventCB__10daNpc_Md_cFi */
@@ -183,8 +337,8 @@ void daNpc_Md_c::XyEventCB(int) {
}
/* 00000864-00000884 .text CheckCreateHeap__FP10fopAc_ac_c */
-static void CheckCreateHeap(fopAc_ac_c*) {
- /* Nonmatching */
+static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
+ return static_cast<daNpc_Md_c*>(i_this)->createHeap();
}
/* 00000884-00000D80 .text create__10daNpc_Md_cFv */
@@ -194,17 +348,17 @@ s32 daNpc_Md_c::create() {
}
/* 000012C0-00001444 .text nodeCallBack__FP7J3DNodei */
-static void nodeCallBack(J3DNode*, int) {
+static int nodeCallBack(J3DNode*, int) {
/* Nonmatching */
}
/* 00001444-0000154C .text waistNodeCallBack__FP7J3DNodei */
-static void waistNodeCallBack(J3DNode*, int) {
+static int waistNodeCallBack(J3DNode*, int) {
/* Nonmatching */
}
/* 0000154C-0000160C .text armNodeCallBack__FP7J3DNodei */
-static void armNodeCallBack(J3DNode*, int) {
+static int armNodeCallBack(J3DNode*, int) {
/* Nonmatching */
}
@@ -214,7 +368,7 @@ static void hairCross(cXyz*, cXyz*, cXyz*) {
}
/* 00001CBC-00001D0C .text hairTopNodeCallBack__FP7J3DNodei */
-static void hairTopNodeCallBack(J3DNode*, int) {
+static int hairTopNodeCallBack(J3DNode*, int) {
/* Nonmatching */
}
@@ -224,37 +378,240 @@ static void vecChange(cXyz*, cXyz*, short) {
}
/* 00001F5C-0000240C .text hairNodeCallBack__FP7J3DNodei */
-static void hairNodeCallBack(J3DNode*, int) {
+static int hairNodeCallBack(J3DNode*, int) {
/* Nonmatching */
}
/* 0000240C-00002F80 .text createHeap__10daNpc_Md_cFv */
-void daNpc_Md_c::createHeap() {
- /* Nonmatching */
+BOOL daNpc_Md_c::createHeap() {
+ /* Nonmatching */
+ char wait_anim_name[32];
+ char arm_wait_anim_name[32];
+ if (m3138 == 7) {
+ strcpy(wait_anim_name, "md_shipwait.bck");
+ strcpy(arm_wait_anim_name, "mdarm_shipwait.bck");
+ } else {
+ strcpy(wait_anim_name, "md_wait01.bck");
+ strcpy(arm_wait_anim_name, "mdarm_wait01.bck");
+ }
+
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "md.bdl");
+ JUT_ASSERT(1995, modelData != 0);
+
+ mpMorf = new mDoExt_McaMorf2(
+ modelData,
+ NULL, NULL,
+ (J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, wait_anim_name),
+ NULL,
+ J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1,
+ NULL,
+ 0x00080000,
+ 0x11020022
+ );
+ if (!mpMorf || !mpMorf->getModel()) {
+ return FALSE;
+ }
+
+ m_backbone1_jnt_num = modelData->getJointName()->getIndex("backbone1");
+ JUT_ASSERT(2013, m_backbone1_jnt_num >= 0);
+ m_backbone2_jnt_num = modelData->getJointName()->getIndex("backbone2");
+ JUT_ASSERT(2016, m_backbone2_jnt_num >= 0);
+ m_armR_jnt_num = modelData->getJointName()->getIndex("armR");
+ JUT_ASSERT(2019, m_armR_jnt_num >= 0);
+ m_armL_jnt_num = modelData->getJointName()->getIndex("armL");
+ JUT_ASSERT(2022, m_armL_jnt_num >= 0);
+ m_neck_jnt_num = modelData->getJointName()->getIndex("neck");
+ JUT_ASSERT(2025, m_neck_jnt_num >= 0);
+
+ s16 neck_jnt_num = modelData->getJointName()->getIndex("neck");
+ if (neck_jnt_num >= 0) {
+ modelData->getJointNodePointer(neck_jnt_num)->setCallBack(nodeCallBack);
+ }
+ modelData->getJointNodePointer(m_backbone1_jnt_num)->setCallBack(waistNodeCallBack);
+ m_hair_jnt_nums[0] = modelData->getJointName()->getIndex(hairName[0]);
+ if (m_hair_jnt_nums[0] >= 0) {
+ modelData->getJointNodePointer(m_hair_jnt_nums[0])->setCallBack(hairTopNodeCallBack);
+ }
+ for (int i = 1; i < 8; i++) {
+ m_hair_jnt_nums[i] = modelData->getJointName()->getIndex(hairName[i]);
+ if (m_hair_jnt_nums[i] >= 0) {
+ modelData->getJointNodePointer(m_hair_jnt_nums[i])->setCallBack(hairNodeCallBack);
+ }
+ }
+
+ mpMorf->getModel()->setUserArea((u32)this);
+
+ modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "md.bdl");
+ JUT_ASSERT(2051, modelData != 0);
+
+ mpArmMorf = new mDoExt_McaMorf2(
+ modelData,
+ NULL, NULL,
+ (J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, arm_wait_anim_name),
+ NULL,
+ J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 0,
+ NULL,
+ 0x00000000,
+ 0x11020203
+ );
+ if (!mpArmMorf || !mpArmMorf->getModel()) {
+ return FALSE;
+ }
+
+ m_armRloc_jnt_num = modelData->getJointName()->getIndex("armRloc");
+ JUT_ASSERT(2065, m_armRloc_jnt_num >= 0);
+ m_armLloc_jnt_num = modelData->getJointName()->getIndex("armLloc");
+ JUT_ASSERT(2068, m_armLloc_jnt_num >= 0);
+ m_handL_jnt_num = modelData->getJointName()->getIndex("handL");
+ JUT_ASSERT(2071, m_handL_jnt_num >= 0);
+
+ modelData->getJointNodePointer(m_armRloc_jnt_num)->setCallBack(armNodeCallBack);
+ modelData->getJointNodePointer(m_armLloc_jnt_num)->setCallBack(armNodeCallBack);
+
+ mpArmMorf->getModel()->setUserArea((u32)this);
+
+ if (m3138 != 7) {
+ modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "mdwing.bdl");
+ JUT_ASSERT(2077, modelData != 0);
+
+ mpWingMorf = new mDoExt_McaMorf(
+ modelData,
+ NULL, NULL,
+ (J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, "mdwing_wait01.bck"),
+ J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 0,
+ NULL,
+ 0x00000000,
+ 0x11020203
+ );
+ if (!mpWingMorf || !mpWingMorf->getModel()) {
+ return FALSE;
+ }
+
+ m_wingRloc_jnt_num = modelData->getJointName()->getIndex("wingRloc");
+ JUT_ASSERT(2097, m_wingRloc_jnt_num >= 0);
+ m_wingLloc_jnt_num = modelData->getJointName()->getIndex("wingLloc");
+ JUT_ASSERT(2100, m_wingLloc_jnt_num >= 0);
+ m_wingR2_jnt_num = modelData->getJointName()->getIndex("wingR2");
+ JUT_ASSERT(2103, m_wingR2_jnt_num >= 0);
+ m_wingL2_jnt_num = modelData->getJointName()->getIndex("wingL2");
+ JUT_ASSERT(2106, m_wingL2_jnt_num >= 0);
+ m_wingR3_jnt_num = modelData->getJointName()->getIndex("wingR3");
+ JUT_ASSERT(2109, m_wingR3_jnt_num >= 0);
+ m_wingL3_jnt_num = modelData->getJointName()->getIndex("wingL3");
+ JUT_ASSERT(2112, m_wingL3_jnt_num >= 0);
+
+ modelData->getJointNodePointer(m_wingRloc_jnt_num)->setCallBack(armNodeCallBack);
+ modelData->getJointNodePointer(m_wingLloc_jnt_num)->setCallBack(armNodeCallBack);
+
+ mpWingMorf->getModel()->setUserArea((u32)this);
+ }
+
+ modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "mdharp.bdl");
+ mpHarpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
+ if (!mpHarpModel) {
+ return FALSE;
+ }
+
+ modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "ymdhp00.bdl");
+ mpHarpLightModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
+ if (!mpHarpLightModel) {
+ return FALSE;
+ }
+
+ if (!initLightBtkAnm(false)) {
+ return FALSE;
+ }
+ if (!initTexPatternAnm(0, 0)) {
+ return FALSE;
+ }
+
+ mAcchCir[0].SetWall(20.0f, 20.0f);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mAcch.Set(&current.pos, &next.pos, this, ARRAY_SIZE(mAcchCir), mAcchCir, &speed, NULL, NULL);
+ mAcch.ClrRoofNone();
+ mAcch.SetRoofCrrHeight(120.0f);
+ mAcch.OnLineCheck();
+ mAcch.ClrWaterNone();
+
+ return TRUE;
}
/* 00002F80-00003050 .text setAction__10daNpc_Md_cFPM10daNpc_Md_cFPCvPvPv_iM10daNpc_Md_cFPCvPvPv_iPv */
-void daNpc_Md_c::setAction(int (daNpc_Md_c::**)(void*), int (daNpc_Md_c::*)(void*), void*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::setAction(ActionFunc* pCurrActionFunc, ActionFunc newActionFunc, void* arg) {
+ if (*pCurrActionFunc != newActionFunc) {
+ if (*pCurrActionFunc) {
+ mActionStatus = ACTION_ENDING;
+ (this->**pCurrActionFunc)(arg);
+ }
+ *pCurrActionFunc = newActionFunc;
+ mActionStatus = ACTION_STARTING;
+ m3144 = 0;
+ m3146 = 0;
+ m3148 = 0;
+ m314A = 0;
+ m3150 = 0.0f;
+ (this->**pCurrActionFunc)(arg);
+ }
+ return TRUE;
}
/* 00003050-00003124 .text npcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::npcAction(void*) {
- /* Nonmatching */
+void daNpc_Md_c::npcAction(void* arg) {
+ if (!mCurrNpcActionFunc) {
+ speedF = 0.0f;
+ if (m3104 == 0x20) {
+ setNpcAction(&mwaitNpcAction, NULL);
+ } else {
+ setNpcAction(&waitNpcAction, NULL);
+ }
+ }
+
+ (this->*mCurrNpcActionFunc)(arg);
}
/* 00003124-00003194 .text setNpcAction__10daNpc_Md_cFM10daNpc_Md_cFPCvPvPv_iPv */
-void daNpc_Md_c::setNpcAction(int (daNpc_Md_c::*)(void*), void*) {
- /* Nonmatching */
+void daNpc_Md_c::setNpcAction(ActionFunc actionFunc, void* arg) {
+ m_flying = false;
+ mCurrPlayerActionFunc = NULL;
+ setAction(&mCurrNpcActionFunc, actionFunc, arg);
}
/* 00003194-00003360 .text playerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::playerAction(void*) {
- /* Nonmatching */
+void daNpc_Md_c::playerAction(void* arg) {
+ /* Nonmatching */
+ if (!mCurrPlayerActionFunc) {
+ speedF = 0.0f;
+ setPlayerAction(&waitPlayerAction, NULL);
+ }
+
+ if (mAcch.ChkGroundHit() && isOldLightBodyHit()) {
+ dComIfGp_setRStatusForce(0x07); // Show "Return" on the R button
+ if (chkPlayerAction(mkamaePlayerAction)) {
+ dComIfGp_setDoStatus(0x00); // Show the A button without anything on it
+ dComIfGp_setAStatus(0x08); // TODO
+ } else {
+ dComIfGp_setDoStatus(0x2E); // TODO
+ dComIfGp_setAStatus(0x3E); // Do not display the B button icon at all
+ if (!m3140) {
+ dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
+ }
+ }
+ } else {
+ dComIfGp_setDoStatus(0x23); // Show "Fly" on the A button
+ if (chkPlayerAction(flyPlayerAction)) {
+ dComIfGp_setRStatusForce(0x3E); // TODO
+ dComIfGp_setAStatus(0x06); // Show "Let Go" on the B button icon
+ } else {
+ dComIfGp_setRStatusForce(0x07); // Show "Return" on the R button
+ dComIfGp_setAStatus(0x3E); // Do not display the B button icon at all
+ }
+ }
+
+ (this->*mCurrPlayerActionFunc)(arg);
}
/* 00003360-000033C4 .text setPlayerAction__10daNpc_Md_cFM10daNpc_Md_cFPCvPvPv_iPv */
-void daNpc_Md_c::setPlayerAction(int (daNpc_Md_c::*)(void*), void*) {
+void daNpc_Md_c::setPlayerAction(ActionFunc actionFunc, void* arg) {
/* Nonmatching */
}
@@ -369,12 +726,12 @@ void daNpc_Md_c::chkAdanmaeDemoOrder() {
}
/* 000043D4-00004B04 .text waitNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::waitNpcAction(void*) {
+int daNpc_Md_c::waitNpcAction(void*) {
/* Nonmatching */
}
/* 00004B04-00004CFC .text harpWaitNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::harpWaitNpcAction(void*) {
+int daNpc_Md_c::harpWaitNpcAction(void*) {
/* Nonmatching */
}
@@ -384,37 +741,37 @@ void daNpc_Md_c::XYTalkCheck() {
}
/* 00004D40-0000504C .text talkNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::talkNpcAction(void*) {
+int daNpc_Md_c::talkNpcAction(void*) {
/* Nonmatching */
}
/* 0000504C-000051FC .text shipTalkNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::shipTalkNpcAction(void*) {
+int daNpc_Md_c::shipTalkNpcAction(void*) {
/* Nonmatching */
}
/* 000051FC-00005308 .text kyohiNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::kyohiNpcAction(void*) {
+int daNpc_Md_c::kyohiNpcAction(void*) {
/* Nonmatching */
}
/* 00005308-00005534 .text shipNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::shipNpcAction(void*) {
+int daNpc_Md_c::shipNpcAction(void*) {
/* Nonmatching */
}
/* 00005534-000057B0 .text mwaitNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::mwaitNpcAction(void*) {
+int daNpc_Md_c::mwaitNpcAction(void*) {
/* Nonmatching */
}
/* 000057B0-000058E0 .text squatdownNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::squatdownNpcAction(void*) {
+int daNpc_Md_c::squatdownNpcAction(void*) {
/* Nonmatching */
}
/* 000058E0-00005A74 .text sqwait01NpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::sqwait01NpcAction(void*) {
+int daNpc_Md_c::sqwait01NpcAction(void*) {
/* Nonmatching */
}
@@ -424,17 +781,17 @@ void daNpc_Md_c::changeCaught02() {
}
/* 00005AB0-000061A8 .text carryNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::carryNpcAction(void*) {
+int daNpc_Md_c::carryNpcAction(void*) {
/* Nonmatching */
}
/* 000061A8-00006450 .text throwNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::throwNpcAction(void*) {
+int daNpc_Md_c::throwNpcAction(void*) {
/* Nonmatching */
}
/* 00006450-00006764 .text glidingNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::glidingNpcAction(void*) {
+int daNpc_Md_c::glidingNpcAction(void*) {
/* Nonmatching */
}
@@ -444,47 +801,47 @@ void daNpc_Md_c::windProc() {
}
/* 00006B24-00006C80 .text fallNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::fallNpcAction(void*) {
+int daNpc_Md_c::fallNpcAction(void*) {
/* Nonmatching */
}
/* 00006C80-00006F70 .text fall02NpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::fall02NpcAction(void*) {
+int daNpc_Md_c::fall02NpcAction(void*) {
/* Nonmatching */
}
/* 00006F70-000071E4 .text wallHitNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::wallHitNpcAction(void*) {
+int daNpc_Md_c::wallHitNpcAction(void*) {
/* Nonmatching */
}
/* 000071E4-000073BC .text land01NpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::land01NpcAction(void*) {
+int daNpc_Md_c::land01NpcAction(void*) {
/* Nonmatching */
}
/* 000073BC-000074C0 .text land02NpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::land02NpcAction(void*) {
+int daNpc_Md_c::land02NpcAction(void*) {
/* Nonmatching */
}
/* 000074C0-000075C4 .text land03NpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::land03NpcAction(void*) {
+int daNpc_Md_c::land03NpcAction(void*) {
/* Nonmatching */
}
/* 000075C4-00007824 .text piyo2NpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::piyo2NpcAction(void*) {
+int daNpc_Md_c::piyo2NpcAction(void*) {
/* Nonmatching */
}
/* 00007824-0000786C .text deleteNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::deleteNpcAction(void*) {
+int daNpc_Md_c::deleteNpcAction(void*) {
/* Nonmatching */
}
/* 0000786C-00007A98 .text demoFlyNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::demoFlyNpcAction(void*) {
+int daNpc_Md_c::demoFlyNpcAction(void*) {
/* Nonmatching */
}
@@ -514,12 +871,12 @@ void daNpc_Md_c::routeCheck(float, short*) {
}
/* 00008858-00008CEC .text searchNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::searchNpcAction(void*) {
+int daNpc_Md_c::searchNpcAction(void*) {
/* Nonmatching */
}
/* 00008CEC-00008E54 .text hitNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::hitNpcAction(void*) {
+int daNpc_Md_c::hitNpcAction(void*) {
/* Nonmatching */
}
@@ -539,52 +896,52 @@ void daNpc_Md_c::walkProc(float, short) {
}
/* 00009180-000092E0 .text jumpNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::jumpNpcAction(void*) {
+int daNpc_Md_c::jumpNpcAction(void*) {
/* Nonmatching */
}
/* 000092E0-000095C8 .text escapeNpcAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::escapeNpcAction(void*) {
+int daNpc_Md_c::escapeNpcAction(void*) {
/* Nonmatching */
}
/* 000095C8-00009894 .text waitPlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::waitPlayerAction(void*) {
+int daNpc_Md_c::waitPlayerAction(void*) {
/* Nonmatching */
}
/* 00009894-00009B08 .text walkPlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::walkPlayerAction(void*) {
+int daNpc_Md_c::walkPlayerAction(void*) {
/* Nonmatching */
}
/* 00009B08-00009CCC .text hitPlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::hitPlayerAction(void*) {
+int daNpc_Md_c::hitPlayerAction(void*) {
/* Nonmatching */
}
/* 00009CCC-00009E7C .text jumpPlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::jumpPlayerAction(void*) {
+int daNpc_Md_c::jumpPlayerAction(void*) {
/* Nonmatching */
}
/* 00009E7C-0000A534 .text flyPlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::flyPlayerAction(void*) {
+int daNpc_Md_c::flyPlayerAction(void*) {
/* Nonmatching */
}
/* 0000A534-0000A698 .text landPlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::landPlayerAction(void*) {
+int daNpc_Md_c::landPlayerAction(void*) {
/* Nonmatching */
}
/* 0000A698-0000A8D0 .text mkamaePlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::mkamaePlayerAction(void*) {
+int daNpc_Md_c::mkamaePlayerAction(void*) {
/* Nonmatching */
}
/* 0000A8D0-0000A9BC .text carryPlayerAction__10daNpc_Md_cFPv */
-void daNpc_Md_c::carryPlayerAction(void*) {
+int daNpc_Md_c::carryPlayerAction(void*) {
/* Nonmatching */
}
@@ -788,7 +1145,7 @@ void daNpc_Md_c::getAnmType(unsigned char) {
}
/* 0000CDF4-0000CF18 .text initTexPatternAnm__10daNpc_Md_cFUcb */
-void daNpc_Md_c::initTexPatternAnm(unsigned char, bool) {
+BOOL daNpc_Md_c::initTexPatternAnm(unsigned char, bool) {
/* Nonmatching */
}
@@ -798,7 +1155,7 @@ void daNpc_Md_c::playTexPatternAnm() {
}
/* 0000CFCC-0000D0B8 .text initLightBtkAnm__10daNpc_Md_cFb */
-void daNpc_Md_c::initLightBtkAnm(bool) {
+BOOL daNpc_Md_c::initLightBtkAnm(bool) {
/* Nonmatching */
}
diff --git a/src/d/actor/d_a_obj_barrier.cpp b/src/d/actor/d_a_obj_barrier.cpp
index 9ac41853..6349ebf1 100644
--- a/src/d/actor/d_a_obj_barrier.cpp
+++ b/src/d/actor/d_a_obj_barrier.cpp
@@ -139,7 +139,7 @@ static const dCcD_SrcCyl l_cyl_tg_src = {
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
- /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_UNK800000),
+ /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
/* SrcObjTg SPrm */ 9,
/* SrcObjCo SPrm */ 0,
/* SrcGObjAt Se */ 0,
diff --git a/src/d/actor/d_a_obj_paper.cpp b/src/d/actor/d_a_obj_paper.cpp
index 33b8ef1d..c8235e2c 100644
--- a/src/d/actor/d_a_obj_paper.cpp
+++ b/src/d/actor/d_a_obj_paper.cpp
@@ -62,7 +62,7 @@ namespace daObjPaper {
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
- /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_UNK800000),
+ /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT),
/* SrcObjTg SPrm */ 0x0F,
/* SrcObjCo SPrm */ 0x79,
/* SrcGObjAt Se */ 0,
diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp
index d5a84295..60d172df 100644
--- a/src/d/d_kankyo_rain.cpp
+++ b/src/d/d_kankyo_rain.cpp
@@ -743,7 +743,7 @@ BOOL light_at_hit_check(cXyz* pPos) {
bool ret = false;
fopAc_ac_c * pActor;
u32 res = dComIfG_Ccsp()->mMass_Mng.Chk(pPos, &pActor, &hitInfo);
- if (((res & 1) != 0) && (hitInfo.GetAtHitObj()->GetAtType() & AT_TYPE_UNK800000) != 0)
+ if (((res & 1) != 0) && (hitInfo.GetAtHitObj()->GetAtType() & AT_TYPE_LIGHT) != 0)
ret = true;
return ret;
}