diff --git a/include/d/d_a_obj.h b/include/d/d_a_obj.h index 77d073e47..c664b1cf7 100644 --- a/include/d/d_a_obj.h +++ b/include/d/d_a_obj.h @@ -9,6 +9,9 @@ namespace daObj { u32 param = fopAcM_GetParam(actor); return ((1 << width) - 1) & (param >> shift); } + + void HitSeStart(const cXyz*, int, const dCcD_GObjInf*, unsigned long); + void HitEff_hibana(const fopAc_ac_c*, const dCcD_Cyl*); }; #endif /* D_A_OBJ */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 9bdb035b9..88eb44254 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -112,6 +112,10 @@ public: void removeWood(); void executeWood(); void drawWood(); + + BOOL checkCameraAttentionStatus(int idx, u32 flag) { + return mCameraInfo[idx].mCameraAttentionStatus & flag; + } ~dComIfG_play_c(); @@ -141,6 +145,7 @@ public: fopAc_ac_c* getPlayerPtr(int idx) { return (fopAc_ac_c*)mpPlayerPtr[idx]; } fopAc_ac_c* getPlayer(int idx) { return (fopAc_ac_c*)mpPlayer[idx]; } + s8 getPlayerCameraID(int idx) { return mCurCamera[idx]; } /* 0x0000 */ dBgS mBgS; /* 0x1404 */ dCcS mCcS; @@ -544,6 +549,14 @@ inline daPy_lk_c* daPy_getPlayerLinkActorClass() { return (daPy_lk_c*)g_dComIfG_gameInfo.play.getPlayerPtr(0); } +inline s8 dComIfGp_getPlayerCameraID(int idx) { + return g_dComIfG_gameInfo.play.getPlayerCameraID(idx); +} + +inline BOOL dComIfGp_checkCameraAttentionStatus(int idx, u32 flag) { + return g_dComIfG_gameInfo.play.checkCameraAttentionStatus(idx, flag); +} + /** * === EVENT ===*/ diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index f857d33cb..560b3a161 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -63,6 +63,7 @@ extern dScnKy_env_light_c g_env_light; int dKy_getdaytime_hour(); BOOL dKy_checkEventNightStop(); void dKy_set_nexttime(f32); +void dKy_Sound_set(cXyz i_pos, int param_1, unsigned int i_actorID, int param_3); #endif /* D_KANKYO_D_KANKYO_H */ diff --git a/include/f_op/f_op_msg_mng.h b/include/f_op/f_op_msg_mng.h index 8f981ceee..9ae2018ab 100644 --- a/include/f_op/f_op_msg_mng.h +++ b/include/f_op/f_op_msg_mng.h @@ -52,6 +52,7 @@ f32 fopMsgM_valueIncrease(int param_0, int param_1, u8 param_2); s32 fopMsgM_setStageLayer(void*); int fopMsgM_messageSet(u32 i_msgIdx, fopAc_ac_c* i_actorP, u32 param_2); int fopMsgM_messageSet(u32 param_0, u32 param_1); +int fopMsgM_messageSet(u32 param_0, cXyz* param_1); int fopMsgM_messageSetDemo(u32 param_0); msg_class* fopMsgM_SearchByID(unsigned int param_0); char* fopMsgM_messageGet(char* msg, u32 string_id); diff --git a/src/d/actor/d_a_branch.cpp b/src/d/actor/d_a_branch.cpp index ba3e2f4d8..f89c130e0 100644 --- a/src/d/actor/d_a_branch.cpp +++ b/src/d/actor/d_a_branch.cpp @@ -63,6 +63,7 @@ void daBranch_c::set_mtx() { mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::XYZrotM(getAngle().x, getAngle().y, getAngle().z); + pMdl->i_setBaseTRMtx(mDoMtx_stack_c::get()); } } diff --git a/src/d/actor/d_a_obj_paper.cpp b/src/d/actor/d_a_obj_paper.cpp index b8fd50047..8d653ce80 100644 --- a/src/d/actor/d_a_obj_paper.cpp +++ b/src/d/actor/d_a_obj_paper.cpp @@ -3,241 +3,401 @@ // Translation Unit: d_a_obj_paper.cpp // -#include "d_a_obj_paper.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_msg.h" +#include "f_op/f_op_msg_mng.h" +#include "d/d_procname.h" +#include "d/d_cc_d.h" +#include "d/d_com_inf_game.h" +#include "d/d_kankyo.h" +#include "d/d_a_obj.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" #include "dolphin/types.h" -/* 00000078-0000009C .text solidHeapCB__Q210daObjPaper5Act_cFP10fopAc_ac_c */ -void daObjPaper::Act_c::solidHeapCB(fopAc_ac_c*) { - /* Nonmatching */ -} +namespace daObjPaper { + namespace { + struct L_attr_entry { + char* ResName; + int mHeapSize; + short mModelId; + short mEyeOffset; + short mAttentionOffset; + short mCullSphereRadius; + short mCullSphereYOffset; -/* 0000009C-00000170 .text create_heap__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::create_heap() { - /* Nonmatching */ -} + s8 mAttentionDist1; + s8 mAttentionDist2; -/* 00000170-000004E0 .text _create__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::_create() { - /* Nonmatching */ -} + bool TevType; + short mHasCc; -/* 000004E0-0000053C .text __dt__10dCcD_GSttsFv */ -dCcD_GStts::~dCcD_GStts() { - /* Nonmatching */ -} + short mColCylinderRadius; + short mColCylinderHeight; -/* 0000053C-00000608 .text __dt__8dCcD_CylFv */ -dCcD_Cyl::~dCcD_Cyl() { - /* Nonmatching */ -} + const char* getResName() const { return ResName; } + int getHeapSize() const { return mHeapSize; } + int getModelId() const { return mModelId; } + int getTevType() const { return TevType == 0 ? TEV_TYPE_BG0 : TEV_TYPE_ACTOR; } + }; -/* 00000608-00000650 .text __dt__8cM3dGCylFv */ -cM3dGCyl::~cM3dGCyl() { - /* Nonmatching */ -} + static const L_attr_entry L_attr[3] = { + { "Opaper", 0x04C0, 3, 0x00, 0x28, 0x28, 0x00, 0x1D, 0x1E, 0x100, 0x00, 0x00 }, + { "Ppos", 0x04C0, 3, 0x00, 0x32, 0x3C, 0x00, 0x1F, 0x20, 0x100, 0x00, 0x00 }, + { "Piwa", 0x04C0, 3, 0x3C, 0x82, 0x50, 0x3C, 0x1D, 0x1E, 0x000, 0x37, 0x73 } + }; -/* 00000650-000006AC .text __dt__14cCcD_ShapeAttrFv */ -cCcD_ShapeAttr::~cCcD_ShapeAttr() { - /* Nonmatching */ -} + inline static const char* getEntryResName(int idx) { return L_attr[idx].getResName(); } + inline static int getEntryModelId(int idx) { return L_attr[idx].getModelId(); } + } -/* 000006AC-000006F4 .text __dt__8cM3dGAabFv */ -cM3dGAab::~cM3dGAab() { - /* Nonmatching */ -} + static cXyz a(1.0f, 1.0f, 1.0f); -/* 000006F4-00000730 .text _delete__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::_delete() { - /* Nonmatching */ -} + static const dCcD_SrcCyl M_cyl_src = { + 0, + 0, + 0, + 0, + 0xFF1DFEFF, + 0xF, + 0x79, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + + // Cylinder + 0.0f, // X + 0.0f, // Y + 0.0f, // Z + 0.0f, // Radius + 0.0f, // Height + }; -/* 00000730-00000748 .text mode_wait_init__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_wait_init() { - /* Nonmatching */ -} + class Act_c : public fopAc_ac_c { + public: + static int solidHeapCB(fopAc_ac_c*); + bool create_heap(); + s32 _create(); + bool _delete(); -/* 00000748-00000784 .text mode_wait__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_wait() { - /* Nonmatching */ -} + void mode_wait_init(); + void mode_wait(); -/* 00000784-000007A4 .text mode_talk0_init__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_talk0_init() { - /* Nonmatching */ -} + void mode_talk0_init(); + void mode_talk0(); + + void mode_talk1_init(); + void mode_talk1(); -/* 000007A4-00000820 .text mode_talk0__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_talk0() { - /* Nonmatching */ -} + void mode_talk2_init(); + void mode_talk2(); -/* 00000820-0000082C .text mode_talk1_init__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_talk1_init() { - /* Nonmatching */ -} + void set_mtx(); + void init_mtx(); -/* 0000082C-00000874 .text mode_talk1__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_talk1() { - /* Nonmatching */ -} + void damage_cc_proc(); + bool _execute(); + bool _draw(); -/* 00000874-00000880 .text mode_talk2_init__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_talk2_init() { - /* Nonmatching */ -} + public: + /* 0x0290 */ request_of_phase_process_class mPhs; + /* 0x0298 */ J3DModel* mpModel; -/* 00000880-000008DC .text mode_talk2__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::mode_talk2() { - /* Nonmatching */ -} + /* 0x029C */ dCcD_Cyl mCylinderCol; + /* 0x03CC */ dCcD_Stts mColStatus; + /* 0x0408 */ bool mbHasCc; -/* 000008DC-00000948 .text set_mtx__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::set_mtx() { - /* Nonmatching */ -} + /* 0x040C */ int mMode; + /* 0x0410 */ int mMsgId; + /* 0x0414 */ msg_class* mpMsg; + /* 0x0418 */ int mType; -/* 00000948-00000984 .text init_mtx__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::init_mtx() { - /* Nonmatching */ -} + int getMsgId() const { return mMsgId; } -/* 00000984-00000A38 .text damage_cc_proc__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::damage_cc_proc() { - /* Nonmatching */ -} + enum Prm_e { + PRM_MSG_ID_W = 0x10, + PRM_MSG_ID_S = 0x00, -/* 00000A38-00000B58 .text _execute__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::_execute() { - /* Nonmatching */ -} + PRM_TYPE_W = 0x04, + PRM_TYPE_S = 0x10, + }; + }; -/* 00000B58-00000BD4 .text _draw__Q210daObjPaper5Act_cFv */ -void daObjPaper::Act_c::_draw() { - /* Nonmatching */ -} + /* 00000078-0000009C .text solidHeapCB__Q210daObjPaper5Act_cFP10fopAc_ac_c */ + int Act_c::solidHeapCB(fopAc_ac_c* i_this) { + return static_cast(i_this)->create_heap(); + } -/* 00000BD4-00000BF4 .text Mthd_Create__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ -void daObjPaper::@unnamed@d_a_obj_paper_cpp@::Mthd_Create(void*) { - /* Nonmatching */ -} + /* 0000009C-00000170 .text create_heap__Q210daObjPaper5Act_cFv */ + bool Act_c::create_heap() { + /* Nonmatching */ + bool val = false; -/* 00000BF4-00000C18 .text Mthd_Delete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ -void daObjPaper::@unnamed@d_a_obj_paper_cpp@::Mthd_Delete(void*) { - /* Nonmatching */ -} + const L_attr_entry* f = &L_attr[mType]; + J3DModelData* mdl_data = (J3DModelData*)dComIfG_getObjectRes(L_attr[mType].getResName(), L_attr[mType].getModelId()); -/* 00000C18-00000C3C .text Mthd_Execute__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ -void daObjPaper::@unnamed@d_a_obj_paper_cpp@::Mthd_Execute(void*) { - /* Nonmatching */ -} + JUT_ASSERT(0x13E, mdl_data != 0); -/* 00000C3C-00000C60 .text Mthd_Draw__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ -void daObjPaper::@unnamed@d_a_obj_paper_cpp@::Mthd_Draw(void*) { - /* Nonmatching */ -} + mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000022); + val = mpModel != 0; -/* 00000C60-00000C68 .text Mthd_IsDelete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ -void daObjPaper::@unnamed@d_a_obj_paper_cpp@::Mthd_IsDelete(void*) { - /* Nonmatching */ -} + return val; + } -/* 00000C68-00000CB0 .text __dt__10cCcD_GSttsFv */ -cCcD_GStts::~cCcD_GStts() { - /* Nonmatching */ -} + /* 00000170-000004E0 .text _create__Q210daObjPaper5Act_cFv */ + s32 Act_c::_create() { + /* Nonmatching */ + const L_attr_entry* attributes = L_attr; -/* 00000CB0-00000CC0 .text GetShapeAttr__8dCcD_CylFv */ -void dCcD_Cyl::GetShapeAttr() { - /* Nonmatching */ -} + fopAcM_SetupActor(this, Act_c); + + mType = daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); -/* 00000CC0-00000CC8 .text GetCoCP__12cCcD_CylAttrFv */ -void cCcD_CylAttr::GetCoCP() { - /* Nonmatching */ -} + s32 result = dComIfG_resLoad(&mPhs, attributes[mType].getResName()); -/* 00000CC8-00000CD0 .text GetCoCP__12cCcD_CylAttrCFv */ -void cCcD_CylAttr::GetCoCP() const { - /* Nonmatching */ -} + if (result == cPhs_COMPLEATE_e) { + s32 solidHeapStatus = fopAcM_entrySolidHeap(this, (heapCallbackFunc)solidHeapCB, attributes[mType].getHeapSize()); -/* 00000CD0-00000CD8 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} + if (solidHeapStatus & 0xFF == 0) { + result = cPhs_ERROR_e; + } + else { + mEyePos.y += attributes[mType].mEyeOffset; -/* 00000CD8-00000CE0 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} + mAttentionInfo.mPosition.y += attributes[mType].mAttentionOffset; + mAttentionInfo.mDistances[1] = attributes[mType].mAttentionDist1; + mAttentionInfo.mDistances[3] = attributes[mType].mAttentionDist2; + mAttentionInfo.setFlag(0x4000000A); -/* 00000CE0-00000D18 .text CrossAtTg__12cCcD_CylAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} + mMsgId = -1; -/* 00000D18-00000D20 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_AabAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} + if (mType == 2) { + mStatus &= 0xFFFFFFC0 | 0x38; + } -/* 00000D20-00000D28 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_TriAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} + if (attributes[mType].mHasCc == 0) { + mbHasCc = false; + } + else { + mbHasCc = true; -/* 00000D28-00000D30 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_PntAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} + mColStatus.Init(0xFF, 0xFF, this); + mCylinderCol.Set(M_cyl_src); -/* 00000D30-00000D68 .text CrossCo__12cCcD_CylAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} + mCylinderCol.SetStts(&mColStatus); -/* 00000D68-00000D6C .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} + mCylinderCol.SetR(attributes[mType].mColCylinderRadius); + mCylinderCol.SetH(attributes[mType].mColCylinderHeight); + } -/* 00000D6C-00000D74 .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ -} + fopAcM_setCullSizeSphere(this, 0.0f, attributes[mType].mCullSphereYOffset, 0.0f, attributes[mType].mCullSphereRadius); + mCullMtx = mpModel->mBaseTransformMtx; -/* 00000D74-00000D7C .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} + init_mtx(); + mode_wait_init(); + } + } -/* 00000D7C-00000D84 .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} + return result; + } -/* 00000D84-00000D90 .text GetCoCP__14cCcD_ShapeAttrFv */ -void cCcD_ShapeAttr::GetCoCP() { - /* Nonmatching */ -} + /* 000006F4-00000730 .text _delete__Q210daObjPaper5Act_cFv */ + bool daObjPaper::Act_c::_delete() { + dComIfG_resDelete(&mPhs, L_attr[mType].getResName()); + return TRUE; + } -/* 00000D90-00000D9C .text GetCoCP__14cCcD_ShapeAttrCFv */ -void cCcD_ShapeAttr::GetCoCP() const { - /* Nonmatching */ -} + /* 00000730-00000748 .text mode_wait_init__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_wait_init() { + mStatus |= 0x80; + mMode = 0; + } -/* 00000D9C-00000DB8 .text PrmAbstract__5daObjFPC10fopAc_ac_cQ310daObjPaper5Act_c5Prm_eQ310daObjPaper5Act_c5Prm_e */ -void daObj::PrmAbstract(const fopAc_ac_c*, daObjPaper::Act_c::Prm_e, daObjPaper::Act_c::Prm_e) { - /* Nonmatching */ -} + /* 00000748-00000784 .text mode_wait__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_wait() { + if (mEvtInfo.mCommand == 1) { + mode_talk0_init(); + } + else { + mEvtInfo.mCondition |= 1; + } + } -/* 00000DB8-00000DC0 .text @280@__dt__8dCcD_CylFv */ -void @280@__dt__8dCcD_CylFv { - /* Nonmatching */ -} + /* 00000784-000007A4 .text mode_talk0_init__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_talk0_init() { + mStatus &= ~0x80; + mMsgId = -1; + mMode = 1; + } -/* 00000DC0-00000DC8 .text @248@__dt__8dCcD_CylFv */ -void @248@__dt__8dCcD_CylFv { - /* Nonmatching */ -} + /* 000007A4-00000820 .text mode_talk0__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_talk0() { + if (getMsgId() == 0xFFFFFFFF && dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), 4)) { + int msgId = daObj::PrmAbstract(this, PRM_MSG_ID_W, PRM_MSG_ID_S); + msgId = fopMsgM_messageSet(msgId, &mEyePos); + mMsgId = msgId; + mode_talk1_init(); + } + } + + /* 00000820-0000082C .text mode_talk1_init__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_talk1_init() { + mMode = 2; + } + + /* 0000082C-00000874 .text mode_talk1__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_talk1() { + mpMsg = fopMsgM_SearchByID(mMsgId); + if (mpMsg) { + mode_talk2_init(); + } + } + + /* 00000874-00000880 .text mode_talk2_init__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_talk2_init() { + mMode = 3; + } + + /* 00000880-000008DC .text mode_talk2__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::mode_talk2() { + if (mpMsg->mMode == 0x12) { + mpMsg->mMode = 0x13; + mpMsg = 0; + mMsgId = -1; + + g_dComIfG_gameInfo.play.mEvtCtrl.mEventFlag |= 8; + mode_wait_init(); + } + } + + /* 000008DC-00000948 .text set_mtx__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::set_mtx() { + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + + mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + } + + /* 00000948-00000984 .text init_mtx__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::init_mtx() { + mpModel->setBaseScale(mScale); + set_mtx(); + } + + /* 00000984-00000A38 .text damage_cc_proc__Q210daObjPaper5Act_cFv */ + void daObjPaper::Act_c::damage_cc_proc() { + u32 hitResult = mCylinderCol.ChkTgHit(); + if (hitResult) { + daObj::HitSeStart(&mEyePos, getRoomNo(), &mCylinderCol, 0x0D); + dKy_Sound_set(getPosition(), 4, fopAcM_GetID(this), 100); + + daObj::HitEff_hibana(this, &mCylinderCol); + + mCylinderCol.ClrTgHit(); + } + + mColStatus.Move(); + } + + typedef void (Act_c::*daObjPaper_mode_t)(void); + + /* 00000A38-00000B58 .text _execute__Q210daObjPaper5Act_cFv */ + bool daObjPaper::Act_c::_execute() { + /* Nonmatching */ + static const daObjPaper_mode_t mode_proc[] = { + &Act_c::mode_wait, + &Act_c::mode_talk0, + &Act_c::mode_talk1, + &Act_c::mode_talk2 + }; + + if (mbHasCc) { + damage_cc_proc(); + } + + (this->*mode_proc[mMode])(); + + set_mtx(); + if (mbHasCc) { + mCylinderCol.SetC(getPosition()); + g_dComIfG_gameInfo.play.mCcS.Set(&mCylinderCol); + } + + return true; + } + + /* 00000B58-00000BD4 .text _draw__Q210daObjPaper5Act_cFv */ + bool daObjPaper::Act_c::_draw() { + /* Nonmatching */ + g_env_light.settingTevStruct(L_attr[mType].getTevType(), getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); + + mDoExt_modelUpdateDL(mpModel); + + return TRUE; + } + + namespace { + /* 00000BD4-00000BF4 .text Mthd_Create__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ + static s32 Mthd_Create(void* i_this) { + return static_cast(i_this)->_create(); + } + + /* 00000BF4-00000C18 .text Mthd_Delete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ + static s32 Mthd_Delete(void* i_this) { + return static_cast(i_this)->_delete(); + } + + /* 00000C18-00000C3C .text Mthd_Execute__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ + static s32 Mthd_Execute(void* i_this) { + return static_cast(i_this)->_execute(); + } + + /* 00000C3C-00000C60 .text Mthd_Draw__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ + static s32 Mthd_Draw(void* i_this) { + return static_cast(i_this)->_draw(); + } + + /* 00000C60-00000C68 .text Mthd_IsDelete__Q210daObjPaper27@unnamed@d_a_obj_paper_cpp@FPv */ + static s32 Mthd_IsDelete(void* i_this) { + return TRUE; + } + + static actor_method_class Mthd_Table = { + (process_method_func)Mthd_Create, + (process_method_func)Mthd_Delete, + (process_method_func)Mthd_Execute, + (process_method_func)Mthd_IsDelete, + (process_method_func)Mthd_Draw, + }; + } + + extern actor_process_profile_definition g_profile_Obj_Paper = { + fpcLy_CURRENT_e, + 7, + fpcLy_CURRENT_e, + PROC_Obj_Paper, + &g_fpcLf_Method.mBase, + sizeof(Act_c), + 0, + 0, + &g_fopAc_Method.base, + 0x0108, + &Mthd_Table, + 0x00040180, + fopAc_ACTOR_e, + fopAc_CULLSPHERE_8_e, + }; +}