From 61d2e5a17e3b5da65ff518413cb0c1b1dcb03d7e Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 29 Oct 2023 22:43:31 -0400 Subject: [PATCH] Started d_com_static --- include/d/actor/d_a_agb.h | 7 +- include/d/actor/d_a_agbsw0.h | 3 + include/d/actor/d_a_arrow.h | 3 + include/d/actor/d_a_npc_md.h | 9 +- include/d/actor/d_a_obj_movebox.h | 18 +- include/d/actor/d_a_obj_pirateship.h | 2 + src/d/actor/d_a_agb.cpp | 14 +- src/d/actor/d_a_agbsw0.cpp | 20 +- src/d/actor/d_a_obj_movebox.cpp | 31 ++- src/d/d_com_static.cpp | 298 +++++++++++++++++---------- 10 files changed, 249 insertions(+), 156 deletions(-) diff --git a/include/d/actor/d_a_agb.h b/include/d/actor/d_a_agb.h index 2146f1b6a..65d009467 100644 --- a/include/d/actor/d_a_agb.h +++ b/include/d/actor/d_a_agb.h @@ -73,6 +73,9 @@ public: daAgb_c(); inline void modeProcCall(); + + BOOL isMsgSend() { return mIsMsgSend; } + BOOL isActive() { return mIsActive; } static int mEffect; @@ -165,13 +168,13 @@ public: /* 0x66F */ s8 field_0x66f; /* 0x670 */ u8 field_0x670; /* 0x671 */ u8 field_0x671; - /* 0x672 */ u8 field_0x672; + /* 0x672 */ bool mIsActive; /* 0x673 */ u8 field_0x673; /* 0x674 */ u8 field_0x674; /* 0x675 */ u8 field_0x675; /* 0x676 */ u8 field_0x676; /* 0x677 */ u8 field_0x677; - /* 0x678 */ u8 field_0x678; + /* 0x678 */ bool mIsMsgSend; /* 0x679 */ u8 field_0x679; /* 0x67A */ bool field_0x67a; /* 0x67B */ u8 field_0x67b; diff --git a/include/d/actor/d_a_agbsw0.h b/include/d/actor/d_a_agbsw0.h index 95c6d6ec2..e7592d7ab 100644 --- a/include/d/actor/d_a_agbsw0.h +++ b/include/d/actor/d_a_agbsw0.h @@ -65,6 +65,9 @@ public: return current.angle.x & 0xFFFF; } + static void incTclDispose(); + static void incTclBeat(); + inline BOOL draw(); inline int create(); inline BOOL execute(); diff --git a/include/d/actor/d_a_arrow.h b/include/d/actor/d_a_arrow.h index fc5baef28..0edeedfb8 100644 --- a/include/d/actor/d_a_arrow.h +++ b/include/d/actor/d_a_arrow.h @@ -55,6 +55,9 @@ public: daArrow_c(); BOOL _delete(); + static u8 getKeepType(); + static void setKeepType(u8 type); + // TODO inlines // setAtHitPosBuff__9daArrow_cFP4cXyz // setAtHitNormal__9daArrow_cFv diff --git a/include/d/actor/d_a_npc_md.h b/include/d/actor/d_a_npc_md.h index a29578b5b..d1dbcc0fe 100644 --- a/include/d/actor/d_a_npc_md.h +++ b/include/d/actor/d_a_npc_md.h @@ -363,8 +363,13 @@ public: virtual f32 getBaseAnimeFrame() {} static bool m_flying; - static short m_flyingTimer; - + static bool m_mirror; + static bool m_seaTalk; + static s16 m_flyingTimer; + static bool m_playerRoom; + + static s16 getMaxFlyingTimer(); + public: /* 0x04EC */ request_of_phase_process_class mPhs; /* 0x04F4 */ J3DModel* mpHarpModel; diff --git a/include/d/actor/d_a_obj_movebox.h b/include/d/actor/d_a_obj_movebox.h index 2cda41ee7..335d2820c 100644 --- a/include/d/actor/d_a_obj_movebox.h +++ b/include/d/actor/d_a_obj_movebox.h @@ -10,13 +10,6 @@ #include "d/d_bg_w.h" #include "d/d_path.h" -// Needed for the .data and .bss sections 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}; -u8 dummy5[0x4C]; - namespace daObjMovebox { class Act_c; @@ -192,14 +185,7 @@ namespace daObjMovebox { void off_switch1() const { fopAcM_offSwitch((Act_c*)this, prm_get_swSave1()); }; void off_switch2() const { fopAcM_offSwitch((Act_c*)this, prmZ_get_swSave2()); }; - void mode_proc_call() { - static ModeFunc mode_proc[] = { - &mode_wait, - &mode_walk, - &mode_afl, - }; - (this->*mode_proc[mMode])(); - } + inline void mode_proc_call(); bool chk_walk(cXyz*) { /* TODO */ } void prmZ_init(); @@ -240,7 +226,7 @@ namespace daObjMovebox { int Draw(); int Delete(); - static s16 M_dir_base[4]; + static const s16 M_dir_base[4]; public: /* 0x2C8 */ request_of_phase_process_class mPhs; diff --git a/include/d/actor/d_a_obj_pirateship.h b/include/d/actor/d_a_obj_pirateship.h index bd60ef977..2e230c85b 100644 --- a/include/d/actor/d_a_obj_pirateship.h +++ b/include/d/actor/d_a_obj_pirateship.h @@ -10,6 +10,8 @@ namespace daObjPirateship { /* 0x2CC */ u8 unk2CC; /* 0x2D0 */ J3DModel* mpModel; }; + + static f32 getShipOffsetY(s16*, s16*, f32); } #endif /* D_A_OBJ_PIRATESHIP_H */ diff --git a/src/d/actor/d_a_agb.cpp b/src/d/actor/d_a_agb.cpp index 8d1263bb6..a0e9307d9 100644 --- a/src/d/actor/d_a_agb.cpp +++ b/src/d/actor/d_a_agb.cpp @@ -159,7 +159,7 @@ int daAgb_c::uploadInitCheck() { mUploadAction = 10; } else if (g_mDoGaC_gbaCom.field_0x0 == 0) { field_0x66f = 0; - field_0x678 = 0; + mIsMsgSend = false; JUTGba::getManager()->doInitProbe(1, NULL, NULL); JUTGba::getManager()->doInitProbe(2, NULL, NULL); JUTGba::getManager()->doInitProbe(3, NULL, NULL); @@ -231,7 +231,7 @@ int daAgb_c::uploadSelect() { g_mDoGaC_gbaCom.mDoGaC_GbaReboot(); g_mDoGaC_gbaCom.mPortNo = mPortNo; field_0x66f = 0; - field_0x678 = 0; + mIsMsgSend = false; } } @@ -340,7 +340,7 @@ int daAgb_c::uploadConnect() { /* 800D00C8-800D01F4 .text uploadMessageSend__7daAgb_cFv */ int daAgb_c::uploadMessageSend() { if (g_mDoGaC_gbaCom.field_0x110->field_0x4 == 0) { - field_0x678 = 1; + mIsMsgSend = true; if (field_0x67a != 0) { l_msgCtrl.mpMsg->mMode = 15; fopMsgM_messageSet(8); // "Tingle appeared on your Game Boy Advance!" @@ -867,7 +867,7 @@ void daAgb_c::GbaItemUse() { return; } - field_0x672 = 0; + mIsActive = false; dComIfGp_setItemRupeeCount(-mItem.field_0x1); mEffect = BigLittleChange(temp_r29); field_0x66b = temp_r29; @@ -947,7 +947,7 @@ int daAgb_Execute(daAgb_c* i_this) { } else if (i_this->field_0x680) { i_this->field_0x680 = 0; i_this->resetCursor(true); - i_this->field_0x672 = 0; + i_this->mIsActive = false; if (i_this->field_0x65c != 0) { if (i_this->field_0x66b == 3 || i_this->field_0x66b == 12) { @@ -1035,7 +1035,7 @@ int daAgb_Execute(daAgb_c* i_this) { } else { i_this->mBrk.play(); } - } else if ((((int)i_this->field_0x672 != 0 || i_this->field_0x676 != 0) && + } else if (((i_this->isActive() || i_this->field_0x676 != 0) && ((int)i_this->field_0x671 != 0 || (int)i_this->field_0x677 == 1)) || (i_this->field_0x66b == 14 && i_this->field_0x65c > 120)) { @@ -1174,7 +1174,7 @@ int daAgb_Create(fopAc_ac_c* i_this) { a_this->field_0x65c = 0; a_this->field_0x66b = 0; a_this->field_0x66f = g_mDoGaC_gbaCom.field_0x0; - a_this->field_0x678 = g_mDoGaC_gbaCom.field_0x0 > 0; + a_this->mIsMsgSend = g_mDoGaC_gbaCom.field_0x0 > 0; a_this->field_0x654 = 0; a_this->field_0x650 = -1; a_this->field_0x677 = 0; diff --git a/src/d/actor/d_a_agbsw0.cpp b/src/d/actor/d_a_agbsw0.cpp index 5c3e963a0..a089f6921 100644 --- a/src/d/actor/d_a_agbsw0.cpp +++ b/src/d/actor/d_a_agbsw0.cpp @@ -566,7 +566,7 @@ BOOL daAgbsw0_c::ExeSubF() { } if(g_mDoGaC_gbaCom.mDoGaC_GbaLink() && g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(5)) { daAgb_c* agb = dComIfGp_getAgb(); - if(agb && (int)agb->field_0x672 != 0 && (int)agb->field_0x671 == 0 && (int)agb->field_0x677 == 0 && HitCheck(agb)) { + if(agb && agb->isActive() && (int)agb->field_0x671 == 0 && (int)agb->field_0x677 == 0 && HitCheck(agb)) { MailSend(BigLittleChange(getMsgNo()) >> 0x10, 6, getSw1(), sw, 0); } } @@ -619,7 +619,7 @@ BOOL daAgbsw0_c::ExeSubF2() { if(g_mDoGaC_gbaCom.mDoGaC_GbaLink() && g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(5) && agb) { fopAc_ac_c* player = dComIfGp_getPlayer(0); if(field_0x299 == 0) { - if((int)agb->field_0x672 != 0 && (int)agb->field_0x671 == 0 && (int)agb->field_0x677 == 0 && HitCheck(agb)) { + if(agb->isActive() && (int)agb->field_0x671 == 0 && (int)agb->field_0x677 == 0 && HitCheck(agb)) { MailSend(0x5A00, 6, 0xFF, 0xFF, 0); agb->onFree(); agb->onHold(); @@ -643,7 +643,7 @@ BOOL daAgbsw0_c::ExeSubF2() { } } else if(field_0x299 == 1) { - if((int)agb->field_0x672 != 0 && HitCheck(player->current.pos, 60.0f)) { + if(agb->isActive() && HitCheck(player->current.pos, 60.0f)) { MailSend(BigLittleChange(getMsgNo()) >> 0x10, 5, getSw1(), sw, 0); agb->resetCursor(false); field_0x299 += 1; @@ -684,7 +684,7 @@ BOOL daAgbsw0_c::ExeSubM() { else { if(g_mDoGaC_gbaCom.mDoGaC_GbaLink() && g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(5)) { daAgb_c* agb = dComIfGp_getAgb(); - if(agb && (int)agb->field_0x672 != 0 && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { + if(agb && agb->isActive() && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { MailSend(BigLittleChange(getMsgNo()) >> 0x10, 0x3, 0xFF, 0xFF, 0); field_0x298 = 1; } @@ -724,7 +724,7 @@ BOOL daAgbsw0_c::ExeSubM2() { else { if(g_mDoGaC_gbaCom.mDoGaC_GbaLink() && g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(5)) { daAgb_c* agb = dComIfGp_getAgb(); - if(agb && (int)agb->field_0x672 != 0 && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { + if(agb && agb->isActive() && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { MailSend(BigLittleChange(getMsgNo()) >> 0x10, 0x3, 0xFF, 0xFF, 0); field_0x298 = 1; } @@ -765,7 +765,7 @@ BOOL daAgbsw0_c::ExeSubM3() { else { if(g_mDoGaC_gbaCom.mDoGaC_GbaLink() && g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(5)) { daAgb_c* agb = dComIfGp_getAgb(); - if(agb && (int)agb->field_0x672 != 0 && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { + if(agb && agb->isActive() && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { u16 gbaMsgId = TriforceCheck(agb); MailSend(BigLittleChange(gbaMsgId) >> 0x10, 0xF, 0xFF, 0xFF, 0); field_0x298 = 1; @@ -1046,7 +1046,7 @@ BOOL daAgbsw0_c::ExeSubS() { else if(field_0x299 == 0 && g_mDoGaC_gbaCom.mDoGaC_GbaLink()) { daAgb_c* agb = dComIfGp_getAgb(); if(getParamNo() < 0) { - if(agb && (int)agb->field_0x672 != 0 && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { + if(agb && agb->isActive() && ((int)agb->field_0x671 != 0 || (int)agb->field_0x677 != 1) && HitCheck(agb)) { if(getMsgNo() == 0xFFFF) { fopAcM_onSwitch(this, sw); if(sw1 != 0xFF) { @@ -1118,7 +1118,7 @@ BOOL daAgbsw0_c::ExeSubR() { fopAcM_delete(this); return true; } - else if(agb && (int)agb->field_0x672 != 0) { + else if(agb && agb->isActive()) { if((int)agb->field_0x671 != 0 && HitCheck(agb)) { MailSend(BigLittleChange(getMsgNo()) >> 0x10, 0xA, 0xFF, getSw0(), 0); field_0x299 = 1; @@ -1335,7 +1335,7 @@ BOOL daAgbsw0_c::ExeSubD() { if(g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(5) && agb) { fopAc_ac_c* player = dComIfGp_getPlayer(0); if(field_0x299 == 0) { - if((int)agb->field_0x672 != 0 && (int)agb->field_0x671 != 0 && HitCheck(agb)) { + if(agb->isActive() && (int)agb->field_0x671 != 0 && HitCheck(agb)) { MailSend(0x5F00, 0xC, 0xFF, 0xFF, 0x19); agb->onHold(); agb->field_0x675 = 1; @@ -1359,7 +1359,7 @@ BOOL daAgbsw0_c::ExeSubD() { } } else if(field_0x299 == 1) { - if((int)agb->field_0x672 != 0 && HitCheck(player->current.pos, 60.0f)) { + if(agb->isActive() && HitCheck(player->current.pos, 60.0f)) { MailSend(BigLittleChange(getMsgNo()) >> 0x10, 0xC, getSw1(), 0xFF, 0x1B); agb->shape_angle.x = 0x3FFF; diff --git a/src/d/actor/d_a_obj_movebox.cpp b/src/d/actor/d_a_obj_movebox.cpp index c1381d550..c88c7e88d 100644 --- a/src/d/actor/d_a_obj_movebox.cpp +++ b/src/d/actor/d_a_obj_movebox.cpp @@ -3,6 +3,15 @@ // Translation Unit: d_a_obj_movebox.cpp // +#include "global.h" + +// Needed for the .data and .bss sections 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}; +u8 dummy5[0x4C]; + #include "d/actor/d_a_obj_movebox.h" #include "d/d_cc_d.h" #include "d/d_procname.h" @@ -1070,6 +1079,15 @@ namespace daObjMovebox { }, }; + void Act_c::mode_proc_call() { + static ModeFunc mode_proc[] = { + &mode_wait, + &mode_walk, + &mode_afl, + }; + (this->*mode_proc[mMode])(); + } + /* 000012E0-00001308 .text prm_get_swSave1__Q212daObjMovebox5Act_cCFv */ s32 Act_c::prm_get_swSave1() const { return daObj::PrmAbstract(this, PRM_SWSAVE1_W, PRM_SWSAVE1_S); @@ -1441,16 +1459,17 @@ namespace daObjMovebox { /* 00002214-000024D4 .text afl_sway__Q212daObjMovebox5Act_cFv */ void Act_c::afl_sway() { /* Nonmatching - regalloc */ - bool r30; bool r29; + bool r30; + BgcSrc_c* bgcSrc; + s32 bgcSrcCount; f32 f31; f32 f30; f32 f1; f32 f5; f32 f6; f32 f0; - BgcSrc_c* bgcSrc; - s32 bgcSrcCount; + f32 temp; f31 = m60C*m60C + m610*m610; f30 = i_attr()->m4C*i_attr()->m4C; @@ -1473,9 +1492,9 @@ namespace daObjMovebox { } if (f31 > f30) { - f32 f1 = i_attr()->m4C / sqrtf(f31); - m60C *= f1; - m610 *= f1; + temp = i_attr()->m4C / sqrtf(f31); + m60C *= temp; + m610 *= temp; } f5 = -(m618 - m610) * i_attr()->m50; diff --git a/src/d/d_com_static.cpp b/src/d/d_com_static.cpp index 8fd3f198c..4226a222e 100644 --- a/src/d/d_com_static.cpp +++ b/src/d/d_com_static.cpp @@ -3,161 +3,233 @@ // Translation Unit: d_com_static.cpp // -#include "d_com_static.h" #include "dolphin/types.h" +#include "d/actor/d_a_obj_pirateship.h" +#include "d/actor/d_a_agb.h" +#include "d/actor/d_a_agbsw0.h" +#include "d/actor/d_a_npc_md.h" +#include "d/actor/d_a_arrow.h" +#include "d/actor/d_a_obj_movebox.h" +#include "d/actor/d_a_tag_kb_item.h" +#include "d/actor/d_a_item.h" +#include "d/d_procname.h" +#include "d/actor/d_a_npc_kamome.h" -/* 8005662C-80056638 .text init__12daSteamTag_cFv */ -void daSteamTag_c::init() { - /* Nonmatching */ -} +// /* 8005662C-80056638 .text init__12daSteamTag_cFv */ +// void daSteamTag_c::init() { +// /* Nonmatching */ +// } /* 80056638-800566F0 .text getShipOffsetY__15daObjPirateshipFPsPsf */ -void daObjPirateship::getShipOffsetY(short*, short*, float) { - /* Nonmatching */ +f32 daObjPirateship::getShipOffsetY(s16* param_1, s16* param_2, f32 param_3) { + if (*param_1 > 0x4000 || *param_1 < -0x4000) { + cLib_addCalcAngleS2(param_2, 0x280, 0x10, 0x300); + } else { + cLib_addCalcAngleS2(param_2, 0x180, 0x10, 0x300); + } + *param_1 += *param_2; + return param_3 * cM_ssin(*param_1); } +daAgb_c::daAgb_Flags daAgb_c::mFlags; +u8 daAgbsw0_c::mFigureDispose; +u8 daAgbsw0_c::mFigureBeat; + /* 800566F0-80056728 .text incTclDispose__10daAgbsw0_cFv */ void daAgbsw0_c::incTclDispose() { - /* Nonmatching */ + daAgb_c* agb = dComIfGp_getAgb(); + if (!agb) { + return; + } + if (!agb->isActive()) { + return; + } + if (mFigureDispose >= 2) { + return; + } + mFigureDispose++; } /* 80056728-80056760 .text incTclBeat__10daAgbsw0_cFv */ void daAgbsw0_c::incTclBeat() { - /* Nonmatching */ + daAgb_c* agb = dComIfGp_getAgb(); + if (!agb) { + return; + } + if (!agb->isActive()) { + return; + } + if (mFigureBeat >= 6) { + return; + } + mFigureBeat++; } -/* 80056760-80056790 .text init_room__11daSalvage_cFSc */ -void daSalvage_c::init_room(signed char) { - /* Nonmatching */ -} +// /* 80056760-80056790 .text init_room__11daSalvage_cFSc */ +// void daSalvage_c::init_room(signed char) { +// /* Nonmatching */ +// } -/* 80056790-800567F8 .text renew_light_angle__Q210daObjLight5Act_cFv */ -void daObjLight::Act_c::renew_light_angle() { - /* Nonmatching */ -} +// /* 80056790-800567F8 .text renew_light_angle__Q210daObjLight5Act_cFv */ +// void daObjLight::Act_c::renew_light_angle() { +// /* Nonmatching */ +// } -/* 800567F8-80056824 .text get_light_angle__Q210daObjLight5Act_cFv */ -void daObjLight::Act_c::get_light_angle() { - /* Nonmatching */ -} +// /* 800567F8-80056824 .text get_light_angle__Q210daObjLight5Act_cFv */ +// void daObjLight::Act_c::get_light_angle() { +// /* Nonmatching */ +// } -/* 80056824-8005682C .text get_light_dif_angle__Q210daObjLight5Act_cFv */ -void daObjLight::Act_c::get_light_dif_angle() { - /* Nonmatching */ -} +// /* 80056824-8005682C .text get_light_dif_angle__Q210daObjLight5Act_cFv */ +// void daObjLight::Act_c::get_light_dif_angle() { +// /* Nonmatching */ +// } -/* 8005682C-80056860 .text set_light_dif_angle_LOD__Q210daObjLight5Act_cFs */ -void daObjLight::Act_c::set_light_dif_angle_LOD(short) { - /* Nonmatching */ -} +// /* 8005682C-80056860 .text set_light_dif_angle_LOD__Q210daObjLight5Act_cFs */ +// void daObjLight::Act_c::set_light_dif_angle_LOD(short) { +// /* Nonmatching */ +// } -/* 80056860-800568A8 .text set_light_dif_angle_FRRS__Q210daObjLight5Act_cFs */ -void daObjLight::Act_c::set_light_dif_angle_FRRS(short) { - /* Nonmatching */ -} +// /* 80056860-800568A8 .text set_light_dif_angle_FRRS__Q210daObjLight5Act_cFs */ +// void daObjLight::Act_c::set_light_dif_angle_FRRS(short) { +// /* Nonmatching */ +// } -/* 800568A8-800568B0 .text getMaxDaiza__7daDai_cFv */ -void daDai_c::getMaxDaiza() { - /* Nonmatching */ -} +// /* 800568A8-800568B0 .text getMaxDaiza__7daDai_cFv */ +// void daDai_c::getMaxDaiza() { +// /* Nonmatching */ +// } -/* 800568B0-800568B8 .text getDaizaSetItemNum__7daDai_cFv */ -void daDai_c::getDaizaSetItemNum() { - /* Nonmatching */ -} +// /* 800568B0-800568B8 .text getDaizaSetItemNum__7daDai_cFv */ +// void daDai_c::getDaizaSetItemNum() { +// /* Nonmatching */ +// } + +bool daNpc_Md_c::m_flying; +bool daNpc_Md_c::m_mirror; +bool daNpc_Md_c::m_seaTalk; +s16 daNpc_Md_c::m_flyingTimer; +bool daNpc_Md_c::m_playerRoom; /* 800568B8-800568C0 .text getMaxFlyingTimer__10daNpc_Md_cFv */ -void daNpc_Md_c::getMaxFlyingTimer() { - /* Nonmatching */ +s16 daNpc_Md_c::getMaxFlyingTimer() { + return 15*30; } +u8 daArrow_c::m_keep_type; + /* 800568C0-800568C8 .text getKeepType__9daArrow_cFv */ -void daArrow_c::getKeepType() { - /* Nonmatching */ +u8 daArrow_c::getKeepType() { + return m_keep_type; } /* 800568C8-800568D0 .text setKeepType__9daArrow_cFUc */ -void daArrow_c::setKeepType(unsigned char) { - /* Nonmatching */ +void daArrow_c::setKeepType(u8 type) { + m_keep_type = type; } -/* 800568D0-800568F8 .text init__9daIball_cFv */ -void daIball_c::init() { - /* Nonmatching */ -} +// /* 800568D0-800568F8 .text init__9daIball_cFv */ +// void daIball_c::init() { +// /* Nonmatching */ +// } -/* 800568F8-80056944 .text regist__9daIball_cFP10fopAc_ac_c */ -void daIball_c::regist(fopAc_ac_c*) { - /* Nonmatching */ -} +// /* 800568F8-80056944 .text regist__9daIball_cFP10fopAc_ac_c */ +// void daIball_c::regist(fopAc_ac_c*) { +// /* Nonmatching */ +// } -/* 80056944-80056990 .text remove__9daIball_cFP10fopAc_ac_c */ -void daIball_c::remove(fopAc_ac_c*) { - /* Nonmatching */ -} +// /* 80056944-80056990 .text remove__9daIball_cFP10fopAc_ac_c */ +// void daIball_c::remove(fopAc_ac_c*) { +// /* Nonmatching */ +// } -/* 80056990-80056A18 .text remove_old__9daIball_cFv */ -void daIball_c::remove_old() { - /* Nonmatching */ -} +// /* 80056990-80056A18 .text remove_old__9daIball_cFv */ +// void daIball_c::remove_old() { +// /* Nonmatching */ +// } -/* 80056A18-80056AD0 .text getCreateCount__13daObj_Roten_cFv */ -void daObj_Roten_c::getCreateCount() { - /* Nonmatching */ -} +// /* 80056A18-80056AD0 .text getCreateCount__13daObj_Roten_cFv */ +// void daObj_Roten_c::getCreateCount() { +// /* Nonmatching */ +// } + +const s16 daObjMovebox::Act_c::M_dir_base[4] = { + 0x0000, + 0x4000, + 0x8000, + 0xC000, +}; /* 80056AD0-80056AFC .text kb_dig__13daTagKbItem_cFP10fopAc_ac_c */ -void daTagKbItem_c::kb_dig(fopAc_ac_c*) { - /* Nonmatching */ +void daTagKbItem_c::kb_dig(fopAc_ac_c* i_actor) { + field_0x299 = 1; + mpActor = i_actor; + dig_main(); } /* 80056AFC-80056CC0 .text dig_main__13daTagKbItem_cFv */ void daTagKbItem_c::dig_main() { - /* Nonmatching */ + if (fopAcM_isSwitch(this, field_0x2a4)) { + return; + } + if (field_0x299 == 0) { + return; + } + if (field_0x298 != 0) { + return; + } + + cXyz scale = cXyz::Zero; + csXyz angle = csXyz::Zero; + bool r30 = false; + if (!fopAcM_IsActor(mpActor)) { + return; + } + if (fopAcM_GetName(mpActor) != PROC_KB) { + // Not a pig. + return; + } + if (field_0x2a0 != 0xFF) { + angle.y = cM_rndF((f32)0x7FFE); + s8 roomNo = current.roomNo; + f32 speedY = cM_rndFX(5.0f) + 60.0f; + f32 speedF = cM_rndF(5.0f); + daItem_c* item = (daItem_c*)fopAcM_fastCreateItem( + &mpActor->current.pos, field_0x2a0, roomNo, &angle, + &scale, speedF, speedY, -6.0f, field_0x29c, NULL + ); + if (item) { + fopAcM_OnStatus(item, fopAcStts_UNK4000_e); + } + if (field_0x2a4 != 0xFF) { + fopAcM_onSwitch(this, field_0x2a4); + } else { + fopAcM_delete(this); + } + r30 = true; + } + + if (field_0x2a1 != 0xFF) { + mpActor->orig.angle.z = field_0x2a1; + fopAcM_onSwitch(this, field_0x2a4); + fopAcM_delete(this); + r30 = true; + } + + if (r30) { + field_0x298 = r30; + } + field_0x299 = 0; } -/* 80056CC0-80056CCC .text daTitle_Kirakira_Sound_flag_on__14daTitle_proc_cFv */ -void daTitle_proc_c::daTitle_Kirakira_Sound_flag_on() { - /* Nonmatching */ -} +// /* 80056CC0-80056CCC .text daTitle_Kirakira_Sound_flag_on__14daTitle_proc_cFv */ +// void daTitle_proc_c::daTitle_Kirakira_Sound_flag_on() { +// /* Nonmatching */ +// } -/* 80056CCC-80056DE0 .text daiItemNodeCallBack__13daStandItem_cFP7J3DNodei */ -void daStandItem_c::daiItemNodeCallBack(J3DNode*, int) { - /* Nonmatching */ -} - -/* 80056ED0-80056F4C .text __dt__18dPa_smokeEcallBackFv */ -dPa_smokeEcallBack::~dPa_smokeEcallBack() { - /* Nonmatching */ -} - -/* 80056F4C-80056F50 .text draw__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::draw(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 80056F50-80056F54 .text executeAfter__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::executeAfter(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 80056F54-80056F58 .text execute__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::execute(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 80056F58-80056F5C .text init__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::init(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 80056F5C-80056FA4 .text __dt__34JPACallBackBaseFv */ -JPACallBackBase::~JPACallBackBase() { - /* Nonmatching */ -} - -/* 80056FA4-80057000 .text __dt__18dPa_levelEcallBackFv */ -dPa_levelEcallBack::~dPa_levelEcallBack() { - /* Nonmatching */ -} +// /* 80056CCC-80056DE0 .text daiItemNodeCallBack__13daStandItem_cFP7J3DNodei */ +// void daStandItem_c::daiItemNodeCallBack(J3DNode*, int) { +// /* Nonmatching */ +// } +bool daNpc_kam_c::m_hyoi_kamome;