mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-18 15:15:44 -04:00
395 lines
11 KiB
C++
395 lines
11 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_dai.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_dai.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/actor/d_a_dai_item.h"
|
|
#include "d/res/res_fdai.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_item.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "m_Do/m_Do_lib.h"
|
|
|
|
static s16 daDai_XyCheckCB(void*, int);
|
|
static s16 daDai_XyEventCB(void*, int);
|
|
|
|
const char daDai_c::m_arcname[] = "Fdai";
|
|
const char daDai_c::m_cloth_arcname[] = "Cloth";
|
|
|
|
static dCcD_SrcCyl l_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ 0,
|
|
/* SrcObjTg SPrm */ 0,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e,
|
|
/* SrcGObjAt Spl */ dCcG_At_Spl_UNK0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 30.0f,
|
|
/* Height */ 30.0f,
|
|
}},
|
|
};
|
|
|
|
/* 00000078-000000C4 .text _delete__7daDai_cFv */
|
|
bool daDai_c::_delete() {
|
|
dComIfG_resDelete(&mPhsFdai, m_arcname);
|
|
dComIfG_resDelete(&mPhsCloth, m_cloth_arcname);
|
|
return true;
|
|
}
|
|
|
|
/* 000000C4-000000E4 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* a_this) {
|
|
return ((daDai_c*)a_this)->CreateHeap();
|
|
}
|
|
|
|
/* 000000E4-000001A0 .text CreateHeap__7daDai_cFv */
|
|
BOOL daDai_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname, FDAI_BDL_FDAI);
|
|
JUT_ASSERT(415, modelData != NULL);
|
|
|
|
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
|
|
if (mpModel == NULL) {
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000001A0-000003A8 .text CreateInit__7daDai_cFv */
|
|
void daDai_c::CreateInit() {
|
|
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 50.0f, 200.0f, 50.0f);
|
|
|
|
mStts.Init(0xff, 0xff, this);
|
|
mCyl.Set(l_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
|
|
if (mDoLib_clipper::getFar() > 1.0f) {
|
|
fopAcM_setCullSizeFar(this, 5000.0f / mDoLib_clipper::getFar());
|
|
}
|
|
|
|
set_mtx();
|
|
shape_angle = current.angle;
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_TALKFLAG_CHECK_e | fopAc_Attn_ACTION_SPEAK_e);
|
|
|
|
eventInfo.mpCheckCB = daDai_XyCheckCB;
|
|
eventInfo.mpEventCB = daDai_XyEventCB;
|
|
|
|
mEvtDaiItemIdx = dComIfGp_evmng_getEventIdx("DAI_ITEM");
|
|
mEvtDefaultTalkIdx = dComIfGp_evmng_getEventIdx("DEFAULT_TALK");
|
|
mSaveID = fopAcM_GetParam(this);
|
|
m850 = fpcM_ERROR_PROCESS_ID_e;
|
|
|
|
if (dComIfGs_getEventReg(m_savelabel[mSaveID])) {
|
|
#if VERSION <= VERSION_JPN
|
|
void* pfVar3 = fopAcM_fastCreate(PROC_STANDITEM, dComIfGs_getEventReg(m_savelabel[mSaveID]), ¤t.pos, -1, ¤t.angle);
|
|
#else
|
|
void* pfVar3 = fopAcM_fastCreate(PROC_STANDITEM, dComIfGs_getEventReg(m_savelabel[mSaveID]), ¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle);
|
|
#endif
|
|
m850 = fopAcM_GetID(pfVar3);
|
|
incNowItemNum();
|
|
}
|
|
incNowDaizaNum();
|
|
}
|
|
|
|
/* 000003A8-00000494 .text _create__7daDai_cFv */
|
|
cPhs_State daDai_c::_create() {
|
|
fopAcM_SetupActor(this, daDai_c);
|
|
|
|
if (!checkItemGet(dItem_DELIVERY_BAG_e, TRUE)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
cPhs_State PVar2 = dComIfG_resLoad(&mPhsFdai, m_arcname);
|
|
#if VERSION == VERSION_DEMO
|
|
cPhs_State PVar3 = dComIfG_resLoad(&mPhsCloth, m_cloth_arcname);
|
|
|
|
if (PVar2 == cPhs_ERROR_e || PVar3 == cPhs_ERROR_e) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (PVar2 != cPhs_COMPLEATE_e) {
|
|
return PVar2;
|
|
}
|
|
|
|
if (PVar3 != cPhs_COMPLEATE_e) {
|
|
return PVar3;
|
|
}
|
|
|
|
#else
|
|
if (PVar2 != cPhs_COMPLEATE_e) {
|
|
return PVar2;
|
|
}
|
|
|
|
cPhs_State PVar3 = dComIfG_resLoad(&mPhsCloth, m_cloth_arcname);
|
|
if (PVar3 != cPhs_COMPLEATE_e) {
|
|
return PVar3;
|
|
}
|
|
#endif
|
|
|
|
if (PVar2 == cPhs_COMPLEATE_e && PVar3 == cPhs_COMPLEATE_e) {
|
|
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, DEMO_SELECT(0x1000, 0x4C0))) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
CreateInit();
|
|
}
|
|
return PVar2;
|
|
}
|
|
|
|
/* 00000874-000008F4 .text set_mtx__7daDai_cFv */
|
|
void daDai_c::set_mtx() {
|
|
mpModel->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
/* 000008F4-0000091C .text eventOrder__7daDai_cFv */
|
|
void daDai_c::eventOrder() {
|
|
if (m844 == 1) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
|
|
}
|
|
}
|
|
|
|
/* 0000091C-00000AFC .text checkOrder__7daDai_cFv */
|
|
void daDai_c::checkOrder() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
if (eventInfo.checkCommandTalk()) {
|
|
if (dComIfGp_event_chkTalkXY()) {
|
|
if (!isDaizaItem(m84A) || dComIfGs_getEventReg(m_savelabel[mSaveID])) {
|
|
m84C = 1;
|
|
}
|
|
|
|
if (dComIfGp_evmng_startCheck(mEvtDaiItemIdx) && player->getGrabActorID() != fpcM_ERROR_PROCESS_ID_e) {
|
|
m850 = player->getGrabActorID();
|
|
daStandItem_c* pfVar2 = (daStandItem_c*)fopAcM_SearchByID(m850);
|
|
if (pfVar2 != NULL) {
|
|
m84B = pfVar2->mItemNo;
|
|
}
|
|
}
|
|
|
|
if (dComIfGp_evmng_endCheck(mEvtDaiItemIdx)) {
|
|
fopAc_ac_c* pfVar3 = fopAcM_SearchByID(m850);
|
|
if (pfVar3 != NULL) {
|
|
pfVar3->current.pos = current.pos;
|
|
}
|
|
dComIfGs_setEventReg(m_savelabel[mSaveID], m84B);
|
|
dComIfGs_setReserveItemEmpty();
|
|
incNowItemNum();
|
|
dComIfGp_event_reset();
|
|
}
|
|
} else {
|
|
m84C = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000AFC-00000B1C .text daDai_XyCheckCB__FPvi */
|
|
static s16 daDai_XyCheckCB(void* v_this, int arg1) {
|
|
return ((daDai_c*)v_this)->XyCheckCB(arg1);
|
|
}
|
|
|
|
/* 00000B1C-00000BA8 .text XyCheckCB__7daDai_cFi */
|
|
s16 daDai_c::XyCheckCB(int arg1) {
|
|
u8 item = dComIfGp_getSelectItem(arg1);
|
|
|
|
if (isDaizaItem(item) && !dComIfGs_getEventReg(m_savelabel[mSaveID])) {
|
|
m84A = item;
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 00000BA8-00000BC8 .text daDai_XyEventCB__FPvi */
|
|
static s16 daDai_XyEventCB(void* v_this, int arg1) {
|
|
return ((daDai_c*)v_this)->XyEventCB(arg1);
|
|
}
|
|
|
|
/* 00000BC8-00000C18 .text XyEventCB__7daDai_cFi */
|
|
s16 daDai_c::XyEventCB(int arg1) {
|
|
s16 sVar1;
|
|
if (isDaizaItem(dComIfGp_getSelectItem(arg1))) {
|
|
sVar1 = mEvtDaiItemIdx;
|
|
} else {
|
|
sVar1 = mEvtDefaultTalkIdx;
|
|
}
|
|
return sVar1;
|
|
}
|
|
|
|
/* 00000C18-00000C78 .text _execute__7daDai_cFv */
|
|
bool daDai_c::_execute() {
|
|
checkOrder();
|
|
proc();
|
|
eventOrder();
|
|
mCyl.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
return true;
|
|
}
|
|
|
|
/* 00000C78-00000DE8 .text proc__7daDai_cFv */
|
|
void daDai_c::proc() {
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
f32 sqrt = (player->current.pos - current.pos).absXZ();
|
|
f32 tmp1 = 100.0f;
|
|
f32 abs = std::fabsf(player->current.pos.y - current.pos.y);
|
|
f32 tmp2 = 10.0f;
|
|
m844 = 0;
|
|
|
|
if (sqrt < tmp1) {
|
|
if (abs < tmp2) {
|
|
s16 sVar3 = cLib_targetAngleY(&player->current.pos, ¤t.pos);
|
|
s32 sVar4 = cLib_distanceAngleS(sVar3, player->shape_angle.y);
|
|
s16 tmp3 = 12000;
|
|
if (sVar4 < tmp3) {
|
|
m844 = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((m84C != 0) && talk(1) == 0x12) {
|
|
dComIfGp_event_reset();
|
|
m84C = 0;
|
|
}
|
|
}
|
|
|
|
/* 00000DE8-00000E48 .text _draw__7daDai_cFv */
|
|
bool daDai_c::_draw() {
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(mpModel, &tevStr);
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
return true;
|
|
}
|
|
|
|
/* 00000E48-00000EDC .text getMsg__7daDai_cFv */
|
|
u32 daDai_c::getMsg() {
|
|
u32 uVar2;
|
|
if (dComIfGp_event_chkTalkXY()) {
|
|
uVar2 = 0xf13;
|
|
} else if (dComIfGs_getEventReg(m_savelabel[mSaveID])) {
|
|
uVar2 = 0xf0d;
|
|
} else {
|
|
uVar2 = 0xf11;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
/* 00000EDC-0000109C .text next_msgStatus__7daDai_cFPUl */
|
|
u16 daDai_c::next_msgStatus(u32* pMsgNo) {
|
|
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
|
|
|
|
switch (*pMsgNo) {
|
|
case 0xF11:
|
|
*pMsgNo = 0xf12;
|
|
break;
|
|
|
|
case 0xF0D:
|
|
switch (mpCurrMsg->mSelectNum) {
|
|
case 0:
|
|
if (dComIfGs_checkReserveItemEmpty() && getRotenItemNumInBag() < 3) {
|
|
fopAcM_seStart(this, JA_SE_LK_W_DAIZA_TAKEOFF, 0);
|
|
*pMsgNo = 0xf0f;
|
|
|
|
fopAc_ac_c* pfVar4 = fopAcM_SearchByID(m850);
|
|
if (pfVar4 != NULL) {
|
|
fopAcM_delete(pfVar4);
|
|
}
|
|
|
|
u8 uVar5 = dComIfGs_getEventReg(m_savelabel[mSaveID]);
|
|
dComIfGs_setEventReg(m_savelabel[mSaveID], 0);
|
|
dComIfGs_setReserveItem(uVar5);
|
|
decNowItemNum();
|
|
m84A = 0;
|
|
} else {
|
|
*pMsgNo = 0xf0e;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
default:
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 0xF0E:
|
|
case 0xF12:
|
|
default:
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
|
|
return msgStatus;
|
|
}
|
|
|
|
/* 0000109C-000010BC .text daDai_Create__FPv */
|
|
static cPhs_State daDai_Create(void* i_this) {
|
|
return ((daDai_c*)i_this)->_create();
|
|
}
|
|
|
|
/* 000010BC-000010E0 .text daDai_Delete__FPv */
|
|
static BOOL daDai_Delete(void* i_this) {
|
|
return ((daDai_c*)i_this)->_delete();
|
|
}
|
|
|
|
/* 000010E0-00001104 .text daDai_Draw__FPv */
|
|
static BOOL daDai_Draw(void* i_this) {
|
|
return ((daDai_c*)i_this)->_draw();
|
|
}
|
|
|
|
/* 00001104-00001128 .text daDai_Execute__FPv */
|
|
static BOOL daDai_Execute(void* i_this) {
|
|
return ((daDai_c*)i_this)->_execute();
|
|
}
|
|
|
|
/* 00001128-00001130 .text daDai_IsDelete__FPv */
|
|
static BOOL daDai_IsDelete(void*) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class daDaiMethodTable = {
|
|
(process_method_func)daDai_Create,
|
|
(process_method_func)daDai_Delete,
|
|
(process_method_func)daDai_Execute,
|
|
(process_method_func)daDai_IsDelete,
|
|
(process_method_func)daDai_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_DAI = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_DAI,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daDai_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_DAI,
|
|
/* Actor SubMtd */ &daDaiMethodTable,
|
|
/* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|