Files
tww/src/d/actor/d_a_dai_item.cpp
T
2026-08-13 16:19:28 -04:00

887 lines
29 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_dai_item.cpp
//
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/actor/d_a_dai_item.h"
#include "SSystem/SComponent/c_math.h"
#include "d/d_kankyo_wether.h"
#include "d/d_s_play.h"
#include "res/Object/Fdai.h"
#include "res/Object/Cloth.h"
const char daStandItem_c::m_arcname[] = "Fdai";
const s16 daStandItem_c::m_bmdidx[] = {
dRes_INDEX_FDAI_BDL_FOBJ00_e, /* dItemNo_TOWN_FLOWER_e */
dRes_INDEX_FDAI_BDL_FOBJ01_e, /* dItemNo_SEA_FLOWER_e */
dRes_INDEX_FDAI_BDL_FOBJ02_e, /* dItemNo_EXOTIC_FLOWER_e */
dRes_INDEX_FDAI_BDL_FOBJ03_e, /* dItemNo_HEROS_FLAG_e */
dRes_INDEX_FDAI_BDL_FOBJ04_e, /* dItemNo_BIG_CATCH_FLAG_e */
dRes_INDEX_FDAI_BDL_FOBJ05_e, /* dItemNo_BIG_SALE_FLAG_e */
dRes_INDEX_FDAI_BDL_FOBJ06_e, /* dItemNo_PINWHEEL_e */
dRes_INDEX_FDAI_BDL_FOBJ07_e, /* dItemNo_SICKLE_MOON_FLAG_e */
dRes_INDEX_FDAI_BDL_FOBJ08_e, /* dItemNo_SKULL_TOWER_IDOL_e */
dRes_INDEX_FDAI_BDL_FOBJ09_e, /* dItemNo_FOUNTAIN_IDOL_e */
dRes_INDEX_FDAI_BDL_FOBJ10_e, /* dItemNo_POSTMAN_STATUE_e */
dRes_INDEX_FDAI_BDL_FOBJ11_e, /* dItemNo_SHOP_GURU_STATUE_e */
};
const s16 daStandItem_c::m_bckidx[] = {
dRes_INDEX_FDAI_BCK_FOBJ00_e, /* dItemNo_TOWN_FLOWER_e */
dRes_INDEX_FDAI_BCK_FOBJ01_e, /* dItemNo_SEA_FLOWER_e */
dRes_INDEX_FDAI_BCK_FOBJ02_e, /* dItemNo_EXOTIC_FLOWER_e */
-1, /* dItemNo_HEROS_FLAG_e */
-1, /* dItemNo_BIG_CATCH_FLAG_e */
dRes_INDEX_FDAI_BCK_FOBJ05_e, /* dItemNo_BIG_SALE_FLAG_e */
-1, /* dItemNo_PINWHEEL_e */
dRes_INDEX_FDAI_BCK_FOBJ07_e, /* dItemNo_SICKLE_MOON_FLAG_e */
dRes_INDEX_FDAI_BCK_FOBJ08_e, /* dItemNo_SKULL_TOWER_IDOL_e */
dRes_INDEX_FDAI_BCK_FOBJ09_e, /* dItemNo_FOUNTAIN_IDOL_e */
dRes_INDEX_FDAI_BCK_FOBJ10_e, /* dItemNo_POSTMAN_STATUE_e */
dRes_INDEX_FDAI_BCK_FOBJ11_e, /* dItemNo_SHOP_GURU_STATUE_e */
};
const u16 daStandItem_c::m_heapsize[] = {
0x2000, /* dItemNo_TOWN_FLOWER_e */
0x2000, /* dItemNo_SEA_FLOWER_e */
0x2000, /* dItemNo_EXOTIC_FLOWER_e */
0x2000, /* dItemNo_HEROS_FLAG_e */
0x2000, /* dItemNo_BIG_CATCH_FLAG_e */
0x2000, /* dItemNo_BIG_SALE_FLAG_e */
0x2000, /* dItemNo_PINWHEEL_e */
0x2000, /* dItemNo_SICKLE_MOON_FLAG_e */
0x2000, /* dItemNo_SKULL_TOWER_IDOL_e */
0x2000, /* dItemNo_FOUNTAIN_IDOL_e */
0x2000, /* dItemNo_POSTMAN_STATUE_e */
0x2000, /* dItemNo_SHOP_GURU_STATUE_e */
};
const s16 daStandItem_c::m_anim_min_time[] = {
50, /* dItemNo_TOWN_FLOWER_e */
50, /* dItemNo_SEA_FLOWER_e */
50, /* dItemNo_EXOTIC_FLOWER_e */
50, /* dItemNo_HEROS_FLAG_e */
50, /* dItemNo_BIG_CATCH_FLAG_e */
50, /* dItemNo_BIG_SALE_FLAG_e */
50, /* dItemNo_PINWHEEL_e */
50, /* dItemNo_SICKLE_MOON_FLAG_e */
30, /* dItemNo_SKULL_TOWER_IDOL_e */
20, /* dItemNo_FOUNTAIN_IDOL_e */
50, /* dItemNo_POSTMAN_STATUE_e */
50, /* dItemNo_SHOP_GURU_STATUE_e */
};
const s16 daStandItem_c::m_anim_max_time[] = {
100, /* dItemNo_TOWN_FLOWER_e */
100, /* dItemNo_SEA_FLOWER_e */
100, /* dItemNo_EXOTIC_FLOWER_e */
100, /* dItemNo_HEROS_FLAG_e */
100, /* dItemNo_BIG_CATCH_FLAG_e */
100, /* dItemNo_BIG_SALE_FLAG_e */
100, /* dItemNo_PINWHEEL_e */
100, /* dItemNo_SICKLE_MOON_FLAG_e */
100, /* dItemNo_SKULL_TOWER_IDOL_e */
20, /* dItemNo_FOUNTAIN_IDOL_e */
100, /* dItemNo_POSTMAN_STATUE_e */
100, /* dItemNo_SHOP_GURU_STATUE_e */
};
const s16 daStandItem_c::m_stop_min_time[] = {
50, /* dItemNo_TOWN_FLOWER_e */
50, /* dItemNo_SEA_FLOWER_e */
50, /* dItemNo_EXOTIC_FLOWER_e */
50, /* dItemNo_HEROS_FLAG_e */
50, /* dItemNo_BIG_CATCH_FLAG_e */
50, /* dItemNo_BIG_SALE_FLAG_e */
50, /* dItemNo_PINWHEEL_e */
50, /* dItemNo_SICKLE_MOON_FLAG_e */
50, /* dItemNo_SKULL_TOWER_IDOL_e */
600, /* dItemNo_FOUNTAIN_IDOL_e */
50, /* dItemNo_POSTMAN_STATUE_e */
0, /* dItemNo_SHOP_GURU_STATUE_e */
};
const s16 daStandItem_c::m_stop_max_time[] = {
100, /* dItemNo_TOWN_FLOWER_e */
100, /* dItemNo_SEA_FLOWER_e */
100, /* dItemNo_EXOTIC_FLOWER_e */
100, /* dItemNo_HEROS_FLAG_e */
100, /* dItemNo_BIG_CATCH_FLAG_e */
100, /* dItemNo_BIG_SALE_FLAG_e */
100, /* dItemNo_PINWHEEL_e */
100, /* dItemNo_SICKLE_MOON_FLAG_e */
200, /* dItemNo_SKULL_TOWER_IDOL_e */
1000, /* dItemNo_FOUNTAIN_IDOL_e */
100, /* dItemNo_POSTMAN_STATUE_e */
0, /* dItemNo_SHOP_GURU_STATUE_e */
};
/* 800E3638-800E36C8 .text convItemNo__FUc */
static u32 convItemNo(u8 itemNo) {
switch (itemNo) {
case dItemNo_TOWN_FLOWER_e: return 0;
case dItemNo_SEA_FLOWER_e: return 1;
case dItemNo_EXOTIC_FLOWER_e: return 2;
case dItemNo_HEROS_FLAG_e: return 3;
case dItemNo_BIG_CATCH_FLAG_e: return 4;
case dItemNo_BIG_SALE_FLAG_e: return 5;
case dItemNo_PINWHEEL_e: return 6;
case dItemNo_SICKLE_MOON_FLAG_e: return 7;
case dItemNo_SKULL_TOWER_IDOL_e: return 8;
case dItemNo_FOUNTAIN_IDOL_e: return 9;
case dItemNo_POSTMAN_STATUE_e: return 10;
case dItemNo_SHOP_GURU_STATUE_e: return 11;
default: return 0;
}
}
static dCcD_SrcCyl l_cyl_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
/* SrcObjTg Type */ AT_TYPE_ALL,
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
/* SrcGObjAt Se */ 0,
/* SrcGObjAt HitMark */ 0,
/* SrcGObjAt Spl */ 0,
/* SrcGObjAt Mtrl */ 0,
/* SrcGObjAt SPrm */ 0,
/* SrcGObjTg Se */ 0,
/* SrcGObjTg HitMark */ 0,
/* SrcGObjTg Spl */ 0,
/* SrcGObjTg Mtrl */ 0,
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
/* SrcGObjCo SPrm */ 0,
},
// cM3dGCylS
{{
/* Center */ {0.0f, 0.0f, 0.0f},
/* Radius */ 0.0f,
/* Height */ 0.0f,
}},
};
static cXyz Vobj03_pos0[25];
static cXyz Vobj03_pos1[25];
static cXyz Vobj04_pos0[25];
static cXyz Vobj04_pos1[25];
static cXyz Vobj05_pos0[25];
static cXyz Vobj05_pos1[25];
static cXyz Vobj07_0_pos0[25];
static cXyz Vobj07_0_pos1[25];
static cXyz* Vobj03_pos[] = { Vobj03_pos0, Vobj03_pos1, };
static cXyz* Vobj04_pos[] = { Vobj04_pos0, Vobj04_pos1, };
static cXyz* Vobj05_pos[] = { Vobj05_pos0, Vobj05_pos1, };
static cXyz* Vobj07_0_pos[] = { Vobj07_0_pos0, Vobj07_0_pos1, };
static cXyz** VobjFlagPosTbl[] = {
Vobj03_pos,
Vobj04_pos,
Vobj05_pos,
Vobj07_0_pos,
};
/* 800E36C8-800E3798 .text _delete__13daStandItem_cFv */
bool daStandItem_c::_delete() {
if (m694 != NULL) {
m694->becomeInvalidEmitter();
m694 = NULL;
}
if (m690 != NULL) {
m690->becomeInvalidEmitter();
m690 = NULL;
}
if (m698 != NULL) {
m698->quitImmortalEmitter();
m698->becomeInvalidEmitter();
m698 = NULL;
}
dComIfG_resDeleteDemo(&mPhsDai, m_arcname);
dComIfG_resDeleteDemo(&mPhsCloth, "Cloth");
return true;
}
/* 800E3798-800E37B8 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c* i_ac) {
return ((daStandItem_c*)i_ac)->CreateHeap();
}
/* 800E37B8-800E3AF8 .text CreateHeap__13daStandItem_cFv */
BOOL daStandItem_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname, m_bmdidx[mItemType]);
JUT_ASSERT(DEMO_SELECT(566, 569), modelData != NULL);
if (mItemNo == dItemNo_SHOP_GURU_STATUE_e) {
mpModel = mDoExt_J3DModel__create(modelData, 0x0, 0x11020203);
} else {
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
}
if (mpModel == NULL)
return FALSE;
if (m_bckidx[mItemType] != -1) {
J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(m_arcname, m_bckidx[mItemType]);
JUT_ASSERT(DEMO_SELECT(589, 592), pbck != NULL);
mpBckAnm = new mDoExt_bckAnm();
static const u32 playmode[] = {
/* dItemNo_TOWN_FLOWER_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_SEA_FLOWER_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_EXOTIC_FLOWER_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_HEROS_FLAG_e */ -1,
/* dItemNo_BIG_CATCH_FLAG_e */ -1,
/* dItemNo_BIG_SALE_FLAG_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_PINWHEEL_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_SICKLE_MOON_FLAG_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_SKULL_TOWER_IDOL_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_FOUNTAIN_IDOL_e */ J3DFrameCtrl::EMode_NONE,
/* dItemNo_POSTMAN_STATUE_e */ J3DFrameCtrl::EMode_LOOP,
/* dItemNo_SHOP_GURU_STATUE_e */ J3DFrameCtrl::EMode_LOOP,
};
if (mpBckAnm == NULL || !mpBckAnm->init(modelData, pbck, TRUE, playmode[mItemType]))
return FALSE;
mpBckAnm->setPlaySpeed(0.0f);
}
if (mItemNo == dItemNo_HEROS_FLAG_e || mItemNo == dItemNo_BIG_CATCH_FLAG_e || mItemNo == dItemNo_BIG_SALE_FLAG_e || mItemNo == dItemNo_SICKLE_MOON_FLAG_e) {
typedef dCloth_packet_c* (*ClothFunc)(ResTIMG*, ResTIMG*, dKy_tevstr_c*, cXyz**);
ClothFunc clothFunc[] = {
(ClothFunc)dClothVobj03_create,
(ClothFunc)dClothVobj04_create,
(ClothFunc)dClothVobj05_create,
(ClothFunc)dClothVobj07_0_create,
};
u32 clothTimgRes[] = {
dRes_INDEX_FDAI_BTI_FTEX03_e,
dRes_INDEX_FDAI_BTI_FTEX04_e,
dRes_INDEX_FDAI_BTI_FTEX05_e,
dRes_INDEX_FDAI_BTI_FTEX07_e,
};
switch (mItemNo) {
case dItemNo_HEROS_FLAG_e:
mClothType = 0;
break;
case dItemNo_BIG_CATCH_FLAG_e:
mClothType = 1;
break;
case dItemNo_BIG_SALE_FLAG_e:
mClothType = 2;
break;
default:
case dItemNo_SICKLE_MOON_FLAG_e:
mClothType = 3;
break;
}
ResTIMG* clothTimg = (ResTIMG*)dComIfG_getObjectRes(m_arcname, clothTimgRes[mClothType]);
ResTIMG* clothToonTimg = (ResTIMG*)dComIfG_getObjectRes("Cloth", dRes_INDEX_CLOTH_BTI_CLOTHTOON_e);
mpCloth = clothFunc[mClothType](clothTimg, clothToonTimg, &tevStr, VobjFlagPosTbl[mClothType]);
if (mpCloth == NULL)
return FALSE;
} else {
mpCloth = NULL;
}
return TRUE;
}
#if VERSION == VERSION_DEMO
// Note: Retail moved this into d_com_static.cpp as daStandItem_c::daiItemNodeCallBack
static BOOL nodeCallBack(J3DNode* node, int calcTiming) {
if (calcTiming == J3DNodeCBCalcTiming_In) {
J3DJoint* joint = (J3DJoint*)node;
s32 jntNo = joint->getJntNo();
J3DModel* model = j3dSys.getModel();
void* userArea = (void*)model->getUserArea();
if (userArea && fopAcM_IsActor(userArea) && fopAcM_GetName(userArea) == fpcNm_STANDITEM_e) {
daStandItem_c* i_this = (daStandItem_c*)userArea;
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
switch (i_this->getItemNo()) {
case dItemNo_PINWHEEL_e:
mDoMtx_stack_c::XrotM(i_this->m6B4);
break;
case dItemNo_FOUNTAIN_IDOL_e:
if (jntNo == FOBJ09_JNT_TUBOKO_BASE_e) {
mDoMtx_copy(mDoMtx_stack_c::get(), i_this->m630);
} else if (jntNo == FOBJ09_JNT_TUBOKO_HEAD_e) {
mDoMtx_copy(mDoMtx_stack_c::get(), i_this->m660);
}
break;
}
model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
}
}
return TRUE;
}
#endif
/* 800E3AF8-800E3E94 .text CreateInit__13daStandItem_cFv */
void daStandItem_c::CreateInit() {
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -100.0f, -0.0f, -100.0f, 100.0f, 300.0f, 100.0f);
mAcchCir.SetWall(30.0f, 30.0f);
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this));
if (fopAcM_checkCarryNow(this))
mode_carry_init();
else
mode_wait_init();
mCarry = 0;
m6A4 = *dKyw_get_wind_vec();
m6A2 = cM_atan2s(m6A4.x, m6A4.z);
set_mtx();
#if VERSION > VERSION_DEMO
mpModel->setUserArea(NULL);
#endif
JUTNameTab* jointNameTab = mpModel->getModelData()->getJointName();
const char* jointName;
u16 i;
switch (mItemNo) {
case dItemNo_PINWHEEL_e:
{
for (i = 0; i < mpModel->getModelData()->getJointNum(); i++) {
jointName = jointNameTab->getName(i);
if (strcmp("top", jointName) == 0) {
mpModel->getModelData()->getJointNodePointer(i)->setCallBack(DEMO_SELECT(nodeCallBack, daiItemNodeCallBack));
break;
}
}
mpModel->setUserArea((u32)this);
mpModel->calc();
}
break;
case dItemNo_FOUNTAIN_IDOL_e:
{
for (i = 0; i < mpModel->getModelData()->getJointNum(); i++) {
jointName = jointNameTab->getName(i);
if (strcmp("tuboko_head", jointName) == 0 || strcmp("tuboko_base", jointName) == 0)
mpModel->getModelData()->getJointNodePointer(i)->setCallBack(DEMO_SELECT(nodeCallBack, daiItemNodeCallBack));
}
mpModel->setUserArea((u32)this);
mpModel->calc();
}
break;
}
m6BC = dKyw_get_wind_pow();
s16 animMinTime = m_anim_min_time[mItemType];
s16 animMaxTime = m_anim_max_time[mItemType];
s16 stopMinTime = m_stop_min_time[mItemType];
s16 stopMaxTime = m_stop_max_time[mItemType];
s16 r29 = (animMinTime + animMaxTime) / 2;
s16 r28 = (animMaxTime - animMinTime) / 2;
s16 temp3 = (stopMinTime + stopMaxTime) / 2;
s16 temp = (stopMaxTime - stopMinTime) / 2;
mBckPlayTimer = 0;
f32 temp2 = cM_rndFX(temp);
mBckStopTimer = temp3 + temp2;
if (stopMaxTime == 0) {
mBckPlayTimer = r29 + cM_rndFX(r28);
}
#if VERSION > VERSION_DEMO
m690 = NULL;
m694 = NULL;
m698 = NULL;
#endif
#if VERSION > VERSION_JPN
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
#endif
}
/* 800E3E94-800E4048 .text _create__13daStandItem_cFv */
cPhs_State daStandItem_c::_create() {
fopAcM_ct(this, daStandItem_c);
mItemNo = fopAcM_GetParam(this);
mItemType = convItemNo(mItemNo);
#if VERSION == VERSION_DEMO
cPhs_State rt;
cPhs_State cloth_rt;
rt = dComIfG_resLoad(&mPhsDai, m_arcname);
cloth_rt = dComIfG_resLoad(&mPhsCloth, "Cloth");
if (rt == cPhs_ERROR_e || cloth_rt == cPhs_ERROR_e) {
return cPhs_ERROR_e;
}
if (rt != cPhs_COMPLEATE_e) {
return rt;
}
// !@bug They meant to check cloth_rt here, instead they check rt a second time.
if (rt != cPhs_COMPLEATE_e) {
return cloth_rt;
}
#else
cPhs_State rt = dComIfG_resLoad(&mPhsDai, m_arcname);
if (rt != cPhs_COMPLEATE_e)
return rt;
cPhs_State cloth_rt = dComIfG_resLoad(&mPhsCloth, "Cloth");
if (cloth_rt != cPhs_COMPLEATE_e)
return cloth_rt;
#endif
if (rt == cPhs_COMPLEATE_e && cloth_rt == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, m_heapsize[mItemType]))
return cPhs_ERROR_e;
CreateInit();
}
return rt;
}
/* 800E4114-800E443C .text set_mtx__13daStandItem_cFv */
void daStandItem_c::set_mtx() {
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(current.angle);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
if (mpCloth != NULL) {
cXyz offs[4];
offs[0] = cXyz(0.0f, REG10_F(15) + 180.0f, 0.0f);
offs[1] = cXyz(0.0f, REG10_F(15) + 180.0f, 0.0f);
offs[2] = cXyz(0.0f, REG10_F(15) + 195.0f, 0.0f);
offs[3] = cXyz(0.0f, REG10_F(15) + 180.0f, 0.0f);
cXyz wind;
cXyz pt = current.pos + offs[mClothType];
wind = dKyw_get_AllWind_vecpow(&pt);
f32 windStrength = wind.abs();
f32 currStrength = m6A4.abs();
if (windStrength - currStrength > 0.25f) {
m6A4 = wind;
s16 windAngle = cM_atan2s(m6A4.x, m6A4.z);
cLib_addCalcAngleS2(&m6A2, windAngle, 4, 0x1000);
} else {
cLib_addCalcPos2(&m6A4, wind, 0.1f, 0.1f);
s16 windAngle = cM_atan2s(m6A4.x, m6A4.z);
cLib_addCalcAngleS2(&m6A2, windAngle, 16, 0x400);
}
mDoMtx_stack_c::transM(offs[mClothType]);
mDoMtx_stack_c::YrotM(m6A2 - current.angle.y);
mpCloth->setMtx(mDoMtx_stack_c::get());
}
}
/* 800E443C-800E44A4 .text _execute__13daStandItem_cFv */
bool daStandItem_c::_execute() {
mTimer++;
execAction();
itemProc();
set_mtx();
if (mpCloth != NULL)
mpCloth->cloth_move();
return true;
}
typedef bool (daStandItem_c::* ActionFunc)();
static const ActionFunc item_action_tbl[] = {
&daStandItem_c::actionFobj00,
&daStandItem_c::actionFobj01,
&daStandItem_c::actionFobj02,
&daStandItem_c::actionFobj03,
&daStandItem_c::actionFobj04,
&daStandItem_c::actionFobj05,
&daStandItem_c::actionFobj06,
&daStandItem_c::actionFobj07,
&daStandItem_c::actionFobj08,
&daStandItem_c::actionFobj09,
&daStandItem_c::actionFobj10,
&daStandItem_c::actionFobj11,
};
/* 800E44A4-800E4518 .text itemProc__13daStandItem_cFv */
void daStandItem_c::itemProc() {
if (mMode == MODE_WAIT && item_action_tbl[mItemType] != NULL)
(this->*(item_action_tbl[mItemType]))();
}
/* 800E4518-800E453C .text actionFobj00__13daStandItem_cFv */
bool daStandItem_c::actionFobj00() {
animTest();
return true;
}
/* 800E453C-800E4560 .text actionFobj01__13daStandItem_cFv */
bool daStandItem_c::actionFobj01() {
animTest();
return true;
}
/* 800E4560-800E4584 .text actionFobj02__13daStandItem_cFv */
bool daStandItem_c::actionFobj02() {
animTest();
return true;
}
/* 800E4584-800E458C .text actionFobj03__13daStandItem_cFv */
bool daStandItem_c::actionFobj03() {
return true;
}
/* 800E458C-800E4594 .text actionFobj04__13daStandItem_cFv */
bool daStandItem_c::actionFobj04() {
return true;
}
/* 800E4594-800E45E0 .text actionFobj05__13daStandItem_cFv */
bool daStandItem_c::actionFobj05() {
f32 windPow = dKyw_get_wind_pow();
if (mpBckAnm != NULL && windPow > 0.0f)
mpBckAnm->play();
return true;
}
/* 800E45E0-800E4770 .text actionFobj06__13daStandItem_cFv */
bool daStandItem_c::actionFobj06() {
cXyz wind = dKyw_get_AllWind_vecpow(&current.pos);
f32 windStrength = wind.absXZ();
cXyz zero(0.0f, 0.0f, 0.0f);
s16 angle = cLib_targetAngleY(&zero, &wind);
cLib_distanceAngleS(angle, current.angle.y);
f32 temp = 1.0f;
m6C4 += fabs(windStrength * temp);
if (m6C4 > 4.0f) {
m6C4 = 4.0f;
}
int r0 = 0x600;
m6B2 = (f32)r0 * m6C4;
cLib_addCalc(&m6C4, 0.0f, 0.08f, dKyw_get_wind_pow() + 0.3f, dKyw_get_wind_pow() + 0.1f);
m6B4 += m6B2;
return true;
}
/* 800E4770-800E47BC .text actionFobj07__13daStandItem_cFv */
bool daStandItem_c::actionFobj07() {
f32 windPow = dKyw_get_wind_pow();
if (mpBckAnm != NULL && windPow > 0.0f)
mpBckAnm->play();
return true;
}
/* 800E47BC-800E47E0 .text actionFobj08__13daStandItem_cFv */
bool daStandItem_c::actionFobj08() {
animTest();
return true;
}
/* 800E47E0-800E4B94 .text actionFobj09__13daStandItem_cFv */
bool daStandItem_c::actionFobj09() {
fopAc_ac_c* link = dComIfGp_getLinkPlayer();
f32 f31 = (link->current.pos - current.pos).absXZ();
animTestForOneTime();
if (f31 < 500.0f && !mbBckDidPlay) {
if (m694) {
m694->becomeInvalidEmitter();
m694 = NULL;
}
if (m698) {
m698->quitImmortalEmitter();
m698->becomeInvalidEmitter();
m698 = NULL;
}
if (m690 == NULL) {
m690 = dComIfGp_particle_set(dPa_name::ID_AK_SN_FOUNTAINFIGURE00, &current.pos, &current.angle, NULL, 0xFF, NULL, fopAcM_GetRoomNo(this), &tevStr.mColorK0);
} else {
m690->setGlobalRTMatrix(m660);
}
} else if (!mbBckDidPlay) {
if (m690) {
m690->becomeInvalidEmitter();
m690 = NULL;
}
if (m694) {
m694->becomeInvalidEmitter();
m694 = NULL;
}
if (m698) {
m698->quitImmortalEmitter();
m698->becomeInvalidEmitter();
m698 = NULL;
}
} else if (mbBckDidPlay) {
if (!m6B1) {
if (m690) {
m690->becomeInvalidEmitter();
m690 = NULL;
}
if (m694 == NULL) {
m694 = dComIfGp_particle_set(dPa_name::ID_AK_SN_FOUNTAINFIGURE01, &current.pos, &current.angle, NULL, 0xFF, NULL, fopAcM_GetRoomNo(this), &tevStr.mColorK0);
}
#if VERSION > VERSION_DEMO
if (m698 == NULL)
#endif
{
m698 = dComIfGp_particle_set(dPa_name::ID_AK_SN_FOUNTAINFIGURE02, &current.pos, &current.angle);
}
if (m698) {
m698->becomeImmortalEmitter();
}
}
if (m694) {
m694->setGlobalRTMatrix(m660);
}
if (m698) {
m698->setGlobalRTMatrix(m630);
}
}
m6B1 = mbBckDidPlay;
return true;
}
/* 800E4B94-800E4BB8 .text actionFobj10__13daStandItem_cFv */
bool daStandItem_c::actionFobj10() {
animTest();
return true;
}
/* 800E4BB8-800E4BE4 .text actionFobj11__13daStandItem_cFv */
bool daStandItem_c::actionFobj11() {
mBckSpeed = 1.0f;
animTest();
return true;
}
/* 800E4BE4-800E4E44 .text animTest__13daStandItem_cFv */
void daStandItem_c::animTest() {
s16 animMinTime = m_anim_min_time[mItemType];
s16 animMaxTime = m_anim_max_time[mItemType];
s16 stopMinTime = m_stop_min_time[mItemType];
s16 stopMaxTime = m_stop_max_time[mItemType];
mbBckDidPlay = false;
if (mBckPlayTimer > 0) {
mBckPlayTimer--;
if (mpBckAnm) {
mpBckAnm->play();
mbBckDidPlay = true;
}
if (stopMaxTime == 0) {
mBckPlayTimer = 16;
mpBckAnm->setPlaySpeed(1.0f);
}
if (mBckPlayTimer < 15 && stopMaxTime != 0) {
cLib_addCalc(&mBckSpeed, 0.0f, 0.1f, 0.1f, 0.05f);
mpBckAnm->setPlaySpeed(mBckSpeed);
}
if (mBckSpeed == 0.0f || mBckPlayTimer == 0) {
mpBckAnm->setPlaySpeed(0.0f);
s16 temp2 = (stopMinTime + stopMaxTime) / 2;
s16 temp = (stopMaxTime - stopMinTime) / 2;
mBckStopTimer = temp2 + cM_rndFX(temp);
}
} else if (mBckStopTimer > 0) {
mBckStopTimer--;
if (animMaxTime == 0) {
mBckStopTimer = 1;
}
if (mBckStopTimer == 0) {
s16 temp2 = (animMinTime + animMaxTime) / 2;
s16 temp = (animMaxTime - animMinTime) / 2;
mBckPlayTimer = temp2 + cM_rndFX(temp);
mBckSpeed = 1.0f;
if (mpBckAnm) {
mpBckAnm->setPlaySpeed(mBckSpeed);
}
}
}
}
/* 800E4E44-800E509C .text animTestForOneTime__13daStandItem_cFv */
void daStandItem_c::animTestForOneTime() {
s16 animMinTime = m_anim_min_time[mItemType];
s16 animMaxTime = m_anim_max_time[mItemType];
s16 stopMinTime = m_stop_min_time[mItemType];
s16 stopMaxTime = m_stop_max_time[mItemType];
mbBckDidPlay = false;
BOOL isStop = mpBckAnm->play();
if (mBckStopTimer > 0) {
mBckStopTimer--;
if (mBckStopTimer == 0) {
mpBckAnm->setPlaySpeed(1.0f);
mpBckAnm->setFrame(0.0f);
s16 temp2 = (animMinTime + animMaxTime) / 2;
s16 temp = (animMaxTime - animMinTime) / 2;
mBckPlayTimer = temp2 + cM_rndFX(temp);
}
} else if (mBckPlayTimer > 0) {
mBckPlayTimer--;
if (mBckPlayTimer > 0 && isStop) {
mpBckAnm->setPlaySpeed(1.0f);
mpBckAnm->setFrame(0.0f);
} else if (mBckPlayTimer == 0 && isStop) {
s16 temp2 = (stopMinTime + stopMaxTime) / 2;
s16 temp = (stopMaxTime - stopMinTime) / 2;
mBckStopTimer = temp2 + cM_rndFX(temp);
} else if (mBckPlayTimer == 0) {
mBckPlayTimer = 1;
}
}
if (stopMaxTime == 0 && isStop) {
mpBckAnm->setPlaySpeed(1.0f);
mpBckAnm->setFrame(0.0f);
}
if (!isStop) {
mbBckDidPlay = true;
}
}
/* 800E509C-800E5190 .text execAction__13daStandItem_cFv */
void daStandItem_c::execAction() {
typedef void (daStandItem_c::*ModeFunc)();
static const ModeFunc mode_proc[] = {
&daStandItem_c::mode_carry,
&daStandItem_c::mode_wait,
&daStandItem_c::mode_drop,
};
bool carry = fopAcM_checkCarryNow(this);
if (carry && !mCarry)
mode_carry_init();
if (mCarry && !carry)
mode_wait_init();
(this->*(mode_proc[mMode]))();
mCarry = carry;
}
/* 800E5190-800E51D8 .text mode_carry_init__13daStandItem_cFv */
void daStandItem_c::mode_carry_init() {
fopAcM_SetSpeedF(this, 0.0f);
speed = cXyz::Zero;
cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
mCyl.OffCoSetBit();
mMode = MODE_CARRY;
}
/* 800E51D8-800E5204 .text mode_carry__13daStandItem_cFv */
void daStandItem_c::mode_carry() {
if (!fopAcM_checkCarryNow(this))
mode_drop_init();
}
/* 800E5204-800E5230 .text mode_wait_init__13daStandItem_cFv */
void daStandItem_c::mode_wait_init() {
fopAcM_SetSpeedF(this, 0.0f);
fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f);
mCyl.OnCoSetBit();
mMode = MODE_WAIT;
}
/* 800E5230-800E5234 .text mode_wait__13daStandItem_cFv */
void daStandItem_c::mode_wait() {
}
/* 800E5234-800E5240 .text mode_drop_init__13daStandItem_cFv */
void daStandItem_c::mode_drop_init() {
mMode = MODE_DROP;
}
/* 800E5240-800E52D0 .text mode_drop__13daStandItem_cFv */
void daStandItem_c::mode_drop() {
fopAcM_posMoveF(this, NULL);
mAcch.CrrPos(*dComIfG_Bgsp());
if (mAcch.ChkGroundHit()) {
fopAcM_seStart(this, JA_SE_LK_W_DAIZA_ATTACH, 0);
mode_wait_init();
}
}
/* 800E52D0-800E53B8 .text _draw__13daStandItem_cFv */
bool daStandItem_c::_draw() {
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpModel, &tevStr);
#if VERSION == VERSION_DEMO
if (mpBckAnm != NULL)
mpBckAnm->entry(mpModel->getModelData());
if (mItemNo == dItemNo_PINWHEEL_e)
mDoExt_bckAnmRemove(mpModel->getModelData());
#else
if (mItemNo == dItemNo_PINWHEEL_e)
mDoExt_bckAnmRemove(mpModel->getModelData());
else if (mpBckAnm != NULL)
mpBckAnm->entry(mpModel->getModelData());
#endif
if (mItemNo == dItemNo_SHOP_GURU_STATUE_e) {
f32 scale = 1.0f;
dDlst_texSpecmapST(&eyePos, &tevStr, mpModel->getModelData(), scale);
}
mDoExt_modelUpdateDL(mpModel);
if (mpCloth != NULL)
mpCloth->cloth_draw();
return true;
}
/* 800E53B8-800E53D8 .text daStandItem_Create__FPv */
static cPhs_State daStandItem_Create(void* i_this) {
return ((daStandItem_c*)i_this)->_create();
}
/* 800E53D8-800E53FC .text daStandItem_Delete__FPv */
static BOOL daStandItem_Delete(void* i_this) {
return ((daStandItem_c*)i_this)->_delete();
}
/* 800E53FC-800E5420 .text daStandItem_Draw__FPv */
static BOOL daStandItem_Draw(void* i_this) {
return ((daStandItem_c*)i_this)->_draw();
}
/* 800E5420-800E5444 .text daStandItem_Execute__FPv */
static BOOL daStandItem_Execute(void* i_this) {
return ((daStandItem_c*)i_this)->_execute();
}
/* 800E5444-800E544C .text daStandItem_IsDelete__FPv */
static BOOL daStandItem_IsDelete(void* i_this) {
return TRUE;
}
static actor_method_class daStandItemMethodTable = {
(process_method_func)daStandItem_Create,
(process_method_func)daStandItem_Delete,
(process_method_func)daStandItem_Execute,
(process_method_func)daStandItem_IsDelete,
(process_method_func)daStandItem_Draw,
};
actor_process_profile_definition g_profile_STANDITEM = {
/* Layer ID */ fpcLy_CURRENT_e,
/* List ID */ 0x0008,
/* List Prio */ fpcPi_CURRENT_e,
/* Proc Name */ fpcNm_STANDITEM_e,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daStandItem_c),
/* Size Other */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Draw Prio */ fpcDwPi_STANDITEM_e,
/* Actor SubMtd */ &daStandItemMethodTable,
/* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* Cull Type */ fopAc_CULLBOX_CUSTOM_e,
};