mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
828 lines
27 KiB
C++
828 lines
27 KiB
C++
/**
|
|
* d_a_obj_doguu.cpp
|
|
* Object - Goddess Statues (Triangle Islands)
|
|
*/
|
|
|
|
#include "d/actor/d_a_obj_doguu.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_item.h"
|
|
#include "d/res/res_doguu.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "f_op/f_op_camera.h"
|
|
#include "d/d_kankyo_rain.h"
|
|
|
|
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_VsEnemy_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 */ cCcD_TgSPrm_IsPlayer_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cCcD_SrcCylAttr
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 200.0f,
|
|
/* Height */ 200.0f,
|
|
}
|
|
};
|
|
|
|
const struct {
|
|
int bmt_vgsm[3];
|
|
int bmt_vgsb[3];
|
|
int bck[3];
|
|
int brk[3];
|
|
int bdl_vgsh[3];
|
|
int bdl_vgsp[3];
|
|
} daObjDoguu_idx_table = {
|
|
DOGUU_BMT_VGSMD, DOGUU_BMT_VGSMF, DOGUU_BMT_VGSMN,
|
|
DOGUU_BMT_VGSBD, DOGUU_BMT_VGSBF, DOGUU_BMT_VGSBN,
|
|
DOGUU_BCK_VGSHD, DOGUU_BCK_VGSHF, DOGUU_BCK_VGSHN,
|
|
DOGUU_BRK_VGSMD, DOGUU_BRK_VGSMF, DOGUU_BRK_VGSMN,
|
|
DOGUU_BDL_VGSHD, DOGUU_BDL_VGSHF, DOGUU_BDL_VGSHN,
|
|
DOGUU_BDL_VGSPD, DOGUU_BDL_VGSPF, DOGUU_BDL_VGSPN
|
|
};
|
|
|
|
namespace {
|
|
struct Attr_c {
|
|
/* 0x00 */ float mScale;
|
|
/* 0x04 */ float mOffsetEyePos;
|
|
};
|
|
|
|
static const Attr_c L_attr = {
|
|
0.5f, 125.0f,
|
|
};
|
|
|
|
inline const Attr_c& attr() { return L_attr; }
|
|
}
|
|
|
|
|
|
/* 00000078-00000168 .text setPointLight__12daObjDoguu_cFv */
|
|
void daObjDoguu_c::setPointLight() {
|
|
static const s16 light_color[3][3] = {
|
|
{0x00C8, 0x0032, 0x0032},
|
|
{0x0032, 0x00C8, 0x0032},
|
|
{0x0032, 0x0032, 0x00C8},
|
|
};
|
|
cLib_addCalc2(&field_0x8FC, cM_rndF(0.1f)+ 1.0f,0.5f,0.05f);
|
|
mLightInfluence.mPos = mPos;
|
|
mLightInfluence.mColor.r = light_color[field_0x894][0];
|
|
mLightInfluence.mColor.g = light_color[field_0x894][1];
|
|
mLightInfluence.mColor.b = light_color[field_0x894][2];
|
|
mLightInfluence.mPower = (s16)(field_0x8FC * 300.0f);
|
|
mLightInfluence.mFluctuation = 100.0f;
|
|
}
|
|
|
|
/* 00000168-00000188 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return static_cast<daObjDoguu_c*>(i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 00000188-000007D0 .text CreateHeap__12daObjDoguu_cFv */
|
|
BOOL daObjDoguu_c::CreateHeap() {
|
|
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Doguu", DOGUU_BDL_VGSMA));
|
|
JUT_ASSERT(0x160, modelData != NULL);
|
|
|
|
J3DMaterialTable* bmt = static_cast<J3DMaterialTable*>(dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.bmt_vgsm[field_0x894]));
|
|
modelData->setMaterialTable(bmt, J3DMatCopyFlag_All);
|
|
field_0x6CC = mDoExt_J3DModel__create(modelData, 0x80000, 0x15220202);
|
|
|
|
if (field_0x6CC == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
J3DAnmTevRegKey* brk_doguu = static_cast<J3DAnmTevRegKey *>(dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.brk[field_0x894]));
|
|
JUT_ASSERT(0x170, brk_doguu != NULL);
|
|
|
|
if (mBrk.init(modelData, brk_doguu, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0) == 0) {
|
|
return FALSE;
|
|
}
|
|
|
|
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.bdl_vgsh[field_0x894]));
|
|
JUT_ASSERT(0x177, modelData != NULL);
|
|
field_0x6D0 = mDoExt_J3DModel__create(modelData, 0,0x11020203);
|
|
|
|
if (field_0x6D0 == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
J3DAnmTransform* bck_head = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.bck[field_0x894]));
|
|
JUT_ASSERT(0x17D, bck_head != NULL);
|
|
|
|
if (mBckHead.init(modelData, bck_head, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false) == 0) {
|
|
return FALSE;
|
|
}
|
|
|
|
J3DSkinDeform* deform = new J3DSkinDeform();
|
|
|
|
if (deform){
|
|
field_0x6D0->setSkinDeform(deform, 1);
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
|
|
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Doguu", DOGUU_BDL_VGSBA));
|
|
JUT_ASSERT(0x18f, modelData != NULL);
|
|
bmt = static_cast<J3DMaterialTable *>(dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.bmt_vgsb[field_0x894]));
|
|
modelData->setMaterialTable(bmt, J3DMatCopyFlag_All);
|
|
field_0x6D4 = mDoExt_J3DModel__create(modelData, 0x80000,0x15220202);
|
|
|
|
if (field_0x6D4 == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
JUTNameTab* nameTable = field_0x6D4->getModelData()->getJointName();
|
|
|
|
for (u16 i = 0; i < field_0x6D4->getModelData()->getJointNum(); i++) {
|
|
const char* name = nameTable->getName(i);
|
|
if (strcmp("head1", name) == 0) {
|
|
mHead1JntNo = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
J3DAnmTransform* bck_body = static_cast<J3DAnmTransform *>(dComIfG_getObjectRes("Doguu", DOGUU_BCK_VGSBA));
|
|
JUT_ASSERT(0x1AB, bck_body != NULL);
|
|
|
|
if (mBckBody.init(modelData, bck_body, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false) == 0) {
|
|
return FALSE;
|
|
}
|
|
|
|
deform = new J3DSkinDeform();
|
|
|
|
if(deform) {
|
|
field_0x6D4->setSkinDeform(deform, 1);
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
|
|
modelData = (J3DModelData*)(dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.bdl_vgsp[field_0x894]));
|
|
JUT_ASSERT(0x1bd, modelData != NULL);
|
|
field_0x6D8 = mDoExt_J3DModel__create(modelData, 0,0x11020203);
|
|
|
|
if (field_0x6D8 == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
J3DAnmTransform* bck_crystal = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Doguu", DOGUU_BCK_VGSPA));
|
|
JUT_ASSERT(0x1c3, bck_crystal != NULL);
|
|
|
|
if(mBckCrystal.init(modelData, bck_crystal, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false) == 0){
|
|
return FALSE;
|
|
}
|
|
|
|
field_0x89C = 1;
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000007D0-00000B80 .text CreateInit__12daObjDoguu_cFv */
|
|
void daObjDoguu_c::CreateInit() {
|
|
fopAcM_SetMtx(this, field_0x6CC->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -600.0f, -0.0f, -600.0f, 600.0f, 400.0f, 600.0f);
|
|
fopAcM_setCullSizeFar(this, 1.0f);
|
|
|
|
if (field_0x894 == 0){
|
|
mItemNo = dItem_PEARL_DIN_e;
|
|
} else if(field_0x894 == 1) {
|
|
mItemNo = dItem_PEARL_FARORE_e;
|
|
} else{
|
|
mItemNo = dItem_PEARL_NAYRU_e;
|
|
}
|
|
|
|
mStts.Init(0xff, 0xff, this);
|
|
mCyl.Set(l_cyl_src);
|
|
if(!checkItemGet(mItemNo, TRUE)){
|
|
mCyl.SetR(50.f);
|
|
}
|
|
mCyl.SetStts(&mStts);
|
|
dKy_plight_set(&mLightInfluence);
|
|
if (subtype >= 1) {
|
|
mBckHead.setFrame(mBckHead.getStartFrame());
|
|
mBckBody.setFrame(mBckBody.getStartFrame());
|
|
mBckCrystal.setFrame(mBckCrystal.getStartFrame());
|
|
|
|
field_0x8A0 = true;
|
|
field_0x8A1 = false;
|
|
field_0x8A2 = true;
|
|
field_0x8AC = 14;
|
|
} else if (dComIfGs_isEventBit(0x1480) && dComIfGs_isEventBit(0x1440) && dComIfGs_isEventBit(0x1410)) {
|
|
mBckHead.setFrame(mBckHead.getEndFrame());
|
|
mBckBody.setFrame(mBckBody.getEndFrame());
|
|
mBckCrystal.setFrame(mBckCrystal.getEndFrame());
|
|
field_0x8A0 = true;
|
|
field_0x8A1 = true;
|
|
field_0x8A2 = false;
|
|
field_0x8AC = 14;
|
|
} else {
|
|
field_0x8A1 = false;
|
|
if (
|
|
(field_0x894 == 0 && dComIfGs_isEventBit(0x1480)) ||
|
|
(field_0x894 == 1 && dComIfGs_isEventBit(0x1440)) ||
|
|
(field_0x894 == 2 && dComIfGs_isEventBit(0x1410))
|
|
) {
|
|
field_0x8A2 = true;
|
|
field_0x8A0 = true;
|
|
field_0x8AC = 10;
|
|
} else {
|
|
field_0x8A2 = false;
|
|
field_0x8A0 = false;
|
|
field_0x8AC = 0;
|
|
}
|
|
}
|
|
|
|
eyePos.y += attr().mOffsetEyePos;
|
|
set_mtx();
|
|
|
|
mDoguuDemo1EventIdx = dComIfGp_evmng_getEventIdx("DOGUU_DEMO1", 0xff);
|
|
mDoguuDemo2EventIdx = dComIfGp_evmng_getEventIdx("DOGUU_DEMO2", 0xff);
|
|
mDoguuDemo3EventIdx = dComIfGp_evmng_getEventIdx("DOGUU_DEMO3", 0xff);
|
|
mMegamiDemoEventIdx = dComIfGp_evmng_getEventIdx("MEGAMI_DEMO", 0xff);
|
|
field_0x8FC = 1.0f;
|
|
if (field_0x8A0 == true) {
|
|
field_0x8A3 = true;
|
|
} else {
|
|
field_0x8A3 = false;
|
|
}
|
|
mAllColRatio = 1.0f;
|
|
}
|
|
|
|
/* 00000B80-00000CEC .text set_mtx__12daObjDoguu_cFv */
|
|
void daObjDoguu_c::set_mtx() {
|
|
field_0x6CC->setBaseScale(scale);
|
|
field_0x6D4->setBaseScale(scale);
|
|
field_0x6D8->setBaseScale(scale);
|
|
field_0x6D0->setBaseScale(scale);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
field_0x6CC->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
field_0x6D4->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
field_0x6D8->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
field_0x6D0->setBaseTRMtx(field_0x6D4->getAnmMtx(mHead1JntNo));
|
|
}
|
|
|
|
/* 00000CEC-00000D80 .text next_msgStatus__12daObjDoguu_cFPUl */
|
|
u16 daObjDoguu_c::next_msgStatus(u32* pMsgNo) {
|
|
u16 message_status = fopMsgStts_MSG_CONTINUES_e;
|
|
switch (*pMsgNo) {
|
|
case 3822:
|
|
case 3823:
|
|
case 3824:
|
|
if (getFinishEventCount() == 0) {
|
|
*pMsgNo = 3825;
|
|
} else if (getFinishEventCount() == 1) {
|
|
*pMsgNo = 3826;
|
|
} else {
|
|
message_status = fopMsgStts_MSG_ENDS_e;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
message_status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
return message_status;
|
|
}
|
|
|
|
/* 00000D80-00000DBC .text getMsg__12daObjDoguu_cFv */
|
|
u32 daObjDoguu_c::getMsg() {
|
|
if (mActIdx == 4) {
|
|
return 3821;
|
|
} else if (field_0x894 == 0) {
|
|
return 3822;
|
|
} else if (field_0x894 == 1){
|
|
return 3823;
|
|
} else {
|
|
return 3824;
|
|
}
|
|
}
|
|
|
|
/* 00000DBC-00000E98 .text setGoal__12daObjDoguu_cFi */
|
|
void daObjDoguu_c::setGoal(int i_staffIdx) {
|
|
cXyz pos = *dComIfGp_evmng_getMyXyzP(i_staffIdx, "Posion");
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mDoMtx_stack_c::transM(pos.x, pos.y, pos.z);
|
|
|
|
mDoMtx_stack_c::multVecZero(&pos);
|
|
field_0x8B4 = pos;
|
|
dComIfGp_evmng_setGoal(&field_0x8B4);
|
|
}
|
|
|
|
/* 00000E98-00000F18 .text setPlayerAngle__12daObjDoguu_cFi */
|
|
void daObjDoguu_c::setPlayerAngle(int i_staffIdx) {
|
|
u32 angle = *dComIfGp_evmng_getMyIntegerP(i_staffIdx, "angle");
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
player->setPlayerPosAndAngle(&player->current.pos, current.angle.y + (s16)angle);
|
|
}
|
|
|
|
/* 00000F18-00000FB8 .text setQuake__12daObjDoguu_cFi */
|
|
void daObjDoguu_c::setQuake(int i_staffIdx) {
|
|
u32 pattern = 0x0010FFEE;
|
|
dComIfGp_getVibration().StartQuake((u8*)&pattern, 0, 63, cXyz(0.0f, 1.0f, 0.0f));
|
|
mTimer = *dComIfGp_evmng_getMyIntegerP(i_staffIdx, "Timer");
|
|
|
|
}
|
|
|
|
/* 00000FB8-0000100C .text setJDemo__12daObjDoguu_cFi */
|
|
void daObjDoguu_c::setJDemo(int) {
|
|
dComIfGp_setNextStage("ADMumi", (short)field_0x894, 0, 8);
|
|
}
|
|
|
|
/* 0000100C-000015A8 .text privateCut__12daObjDoguu_cFv */
|
|
void daObjDoguu_c::privateCut() {
|
|
static char* cut_name_tbl[] = {
|
|
"SETGOAL",
|
|
"SETBALL",
|
|
"SETANGLE",
|
|
"EYEFLASH",
|
|
"MESSAGE_KOKOE",
|
|
"MESSAGE_OITA",
|
|
"QUAKE",
|
|
"JDEMO",
|
|
"SETLIGHT",
|
|
};
|
|
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Doguu");
|
|
if (staffIdx != -1) {
|
|
mActIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0);
|
|
if(mActIdx == -1) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
} else{
|
|
bool doCutEnd = false;
|
|
if (dComIfGp_evmng_getIsAddvance(staffIdx)) {
|
|
switch (mActIdx) {
|
|
case 0:
|
|
setGoal(staffIdx);
|
|
break;
|
|
case 1:
|
|
field_0x8A0 = true;
|
|
fopAcM_seStartCurrent(this, JA_SE_LK_PUT_PEARL, 0);
|
|
break;
|
|
case 2:
|
|
setPlayerAngle(staffIdx);
|
|
break;
|
|
case 3:
|
|
field_0x8A2 = true;
|
|
break;
|
|
case 5:
|
|
mDoAud_subBgmStart(JA_BGM_GET_PEARL);
|
|
break;
|
|
case 6:
|
|
setQuake(staffIdx);
|
|
break;
|
|
case 7:
|
|
setJDemo(staffIdx);
|
|
break;
|
|
case 8:
|
|
field_0x8C4 = 0;
|
|
break;
|
|
}
|
|
}
|
|
switch (mActIdx) {
|
|
case 0:
|
|
doCutEnd = true;
|
|
break;
|
|
case 1:
|
|
doCutEnd = true;
|
|
break;
|
|
case 2:
|
|
doCutEnd = true;
|
|
break;
|
|
case 3:
|
|
doCutEnd = true;
|
|
break;
|
|
case 4:
|
|
if (talk(1) == fopMsgStts_BOX_CLOSED_e) {
|
|
doCutEnd = true;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (talk(1) == fopMsgStts_BOX_CLOSED_e) {
|
|
doCutEnd = true;
|
|
}
|
|
break;
|
|
case 6:
|
|
mTimer--;
|
|
if (mTimer == 0) {
|
|
doCutEnd = true;
|
|
dComIfGp_getVibration().StopQuake(63);
|
|
}
|
|
break;
|
|
case 7:
|
|
doCutEnd = true;
|
|
break;
|
|
case 8: {
|
|
int iVar2 = field_0x8C4;
|
|
if(iVar2 >= 200){
|
|
mAllColRatio = 1.0f;
|
|
doCutEnd = true;
|
|
} else {
|
|
field_0x8C4++;
|
|
}
|
|
iVar2 = field_0x8C4;
|
|
if (iVar2 < 21) {
|
|
mAllColRatio = 1.0f - iVar2 * 0.01875f;
|
|
} else if (iVar2 < 41) {
|
|
mAllColRatio = 0.625f - (iVar2 + -20) * 0.0125f;
|
|
} else if (iVar2 < 61) {
|
|
mAllColRatio = 0.375f - (iVar2 + -40) * 0.00625f;
|
|
} else if ((iVar2 >= 130) && (iVar2 < 150)) {
|
|
mAllColRatio = (iVar2 + -130) * 0.00625f + 0.25f;
|
|
} else if((field_0x8C4 >= 150) && (field_0x8C4 < 170)){
|
|
mAllColRatio = (iVar2 + -150) * 0.0125f + 0.375f;
|
|
} else if((iVar2 >= 170) && (iVar2 <= 190)){
|
|
mAllColRatio = (iVar2 + -170) * 0.01875f + 0.625f;
|
|
}
|
|
|
|
if (field_0x8C4 == 40) {
|
|
mPos.x = 0.0f;
|
|
mPos.y = 0.0f;
|
|
mPos.z = 0.0f;
|
|
mDoMtx_stack_c::copy(field_0x6D8->getAnmMtx(field_0x89C));
|
|
mDoMtx_stack_c::multVecZero(&mPos);
|
|
|
|
if (field_0x894 == 0) {
|
|
dComIfGp_particle_set(dPa_name::ID_SCENE_8434, &mPos, ¤t.angle);
|
|
} else if (field_0x894 == 1) {
|
|
dComIfGp_particle_set(dPa_name::ID_SCENE_8436, &mPos, ¤t.angle);
|
|
} else {
|
|
dComIfGp_particle_set(dPa_name::ID_SCENE_8435, &mPos, ¤t.angle);
|
|
}
|
|
} else if (field_0x8C4 == 125) {
|
|
field_0x8A3 = true;
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
doCutEnd = true;
|
|
break;
|
|
}
|
|
if(doCutEnd){
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000015A8-00001630 .text getFinishEventCount__12daObjDoguu_cFv */
|
|
int daObjDoguu_c::getFinishEventCount() {
|
|
int count = 0;
|
|
if (dComIfGs_isEventBit(0x1480)) {
|
|
count += 1;
|
|
}
|
|
if (dComIfGs_isEventBit(0x1440)) {
|
|
count += 1;
|
|
}
|
|
if (dComIfGs_isEventBit(0x1410)) {
|
|
count += 1;
|
|
}
|
|
return count;
|
|
}
|
|
|
|
|
|
/* 00001630-000016A4 .text setFinishMyEvent__12daObjDoguu_cFv */
|
|
void daObjDoguu_c::setFinishMyEvent() {
|
|
if (field_0x894 == 0) {
|
|
dComIfGs_onEventBit(0x1480);
|
|
} else if (field_0x894 == 1) {
|
|
dComIfGs_onEventBit(0x1440);
|
|
} else {
|
|
dComIfGs_onEventBit(0x1410);
|
|
}
|
|
}
|
|
|
|
/* 000016A4-000016C4 .text daObjDoguu_Create__FPv */
|
|
static cPhs_State daObjDoguu_Create(void* i_this) {
|
|
return static_cast<daObjDoguu_c*>(i_this)->_create();
|
|
}
|
|
|
|
/* 000016C4-0000178C .text _create__12daObjDoguu_cFv */
|
|
cPhs_State daObjDoguu_c::_create() {
|
|
fopAcM_SetupActor(this, daObjDoguu_c);
|
|
if(subtype >= 1) {
|
|
field_0x894 = subtype - 1;
|
|
} else {
|
|
field_0x894 = fopAcM_GetParam(this) & 0xFF;
|
|
}
|
|
cPhs_State phase_state = dComIfG_resLoad(&mPhs,"Doguu");
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
if(!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0)){
|
|
return cPhs_ERROR_e;
|
|
}
|
|
CreateInit();
|
|
}
|
|
return phase_state;
|
|
}
|
|
|
|
daObjDoguu_c::daObjDoguu_c() {}
|
|
|
|
bool daObjDoguu_c::_delete(){
|
|
dKy_plight_cut(&mLightInfluence);
|
|
dComIfG_resDelete(&mPhs,"Doguu");
|
|
return true;
|
|
}
|
|
|
|
/* 00001CC8-00001D0C .text daObjDoguu_Delete__FPv */
|
|
static BOOL daObjDoguu_Delete(void* i_this) {
|
|
return static_cast<daObjDoguu_c*>(i_this)->_delete();
|
|
}
|
|
|
|
/* 00001D0C-00001D30 .text daObjDoguu_Draw__FPv */
|
|
static BOOL daObjDoguu_Draw(void* i_this) {
|
|
return static_cast<daObjDoguu_c*>(i_this)->_draw();
|
|
}
|
|
|
|
/* 00001D30-00001F64 .text _draw__12daObjDoguu_cFv */
|
|
bool daObjDoguu_c::_draw() {
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(field_0x6CC, &tevStr);
|
|
g_env_light.setLightTevColorType(field_0x6D0, &tevStr);
|
|
g_env_light.setLightTevColorType(field_0x6D4, &tevStr);
|
|
g_env_light.setLightTevColorType(field_0x6D8, &tevStr);
|
|
|
|
setEffectMtx(&eyePos, attr().mScale);
|
|
|
|
if(field_0x8A1){
|
|
J3DMaterialTable* bmt = (J3DMaterialTable*)dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.bmt_vgsb[field_0x894]);
|
|
|
|
field_0x6D4->getModelData()->setMaterialTable(bmt, J3DMatCopyFlag_All);
|
|
mBckHead.entry(field_0x6D0->getModelData());
|
|
mDoExt_modelUpdateDL(field_0x6D0);
|
|
field_0x6D0->getModelData()->getJointNodePointer(0)->setMtxCalc(NULL);
|
|
|
|
mBckBody.entry(field_0x6D4->getModelData());
|
|
mDoExt_modelUpdateDL(field_0x6D4);
|
|
field_0x6D4->getModelData()->getJointNodePointer(0)->setMtxCalc(NULL);
|
|
} else {
|
|
J3DMaterialTable* bmt = (J3DMaterialTable*)dComIfG_getObjectRes("Doguu", daObjDoguu_idx_table.bmt_vgsm[field_0x894]);
|
|
field_0x6CC->getModelData()->setMaterialTable(bmt, J3DMatCopyFlag_All);
|
|
mBrk.entry(field_0x6CC->getModelData());
|
|
mDoExt_modelUpdateDL(field_0x6CC);
|
|
mBrk.remove(field_0x6CC->getModelData());
|
|
}
|
|
if (field_0x8A0 == true) {
|
|
mBckCrystal.entry(field_0x6D8->getModelData());
|
|
mDoExt_modelUpdateDL(field_0x6D8);
|
|
field_0x6D8->getModelData()->getJointNodePointer(0)->setMtxCalc(NULL);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 00001F64-00002264 .text setEffectMtx__12daObjDoguu_cFPC4cXyzf */
|
|
void daObjDoguu_c::setEffectMtx(const cXyz* i_pos, float i_scale) {
|
|
static Mtx mtx_adj = {
|
|
0.5f, 0.0f, 0.0f, 0.5f,
|
|
0.0f, -0.5f, 0.0f, 0.5f,
|
|
0.0f, 0.0f, 1.0f, 0.0f,
|
|
};
|
|
|
|
float scale = 1.0f /i_scale;
|
|
camera_class* camera = dCam_getCamera();
|
|
cXyz lookDir = *i_pos - camera->mLookat.mEye;
|
|
cXyz lightDir;
|
|
cXyz refl;
|
|
|
|
dKyr_get_vectle_calc(&tevStr.mLightPosWorld, (cXyz*)i_pos, &lightDir);
|
|
|
|
C_VECHalfAngle(&lookDir, &lightDir, &refl);
|
|
Mtx reflMtx;
|
|
C_MTXLookAt(reflMtx, &cXyz::Zero, &cXyz::BaseY, &refl);
|
|
mDoMtx_stack_c::scaleS(scale, scale, 1.0f);
|
|
mDoMtx_stack_c::concat(mtx_adj);
|
|
mDoMtx_stack_c::concat(reflMtx);
|
|
MtxP mtx = mDoMtx_stack_c::get();
|
|
mtx[0][3] = 0.0f;
|
|
mtx[1][3] = 0.0f;
|
|
mtx[2][3] = 0.0f;
|
|
|
|
J3DModelData *modelData = field_0x6D0->getModelData();
|
|
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
|
|
J3DMaterial* mat = modelData->getMaterialNodePointer(i);
|
|
for (u32 j = 0; j < 8; j++) {
|
|
J3DTexMtx* texMtx = mat->getTexMtx(j);
|
|
if (texMtx != NULL && texMtx->getTexMtxInfo().mInfo == 10) {
|
|
texMtx->getTexMtxInfo().setEffectMtx(mDoMtx_stack_c::get());
|
|
}
|
|
}
|
|
}
|
|
|
|
modelData = field_0x6D4->getModelData();
|
|
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
|
|
J3DMaterial* mat = modelData->getMaterialNodePointer(i);
|
|
for (u32 j = 0; j < 8; j++) {
|
|
J3DTexMtx* texMtx = mat->getTexMtx(j);
|
|
if (texMtx != NULL && texMtx->getTexMtxInfo().mInfo == 10) {
|
|
texMtx->getTexMtxInfo().setEffectMtx(mDoMtx_stack_c::get());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00002264-00002288 .text daObjDoguu_Execute__FPv */
|
|
static BOOL daObjDoguu_Execute(void* i_this) {
|
|
return static_cast<daObjDoguu_c*>(i_this)->_execute();
|
|
}
|
|
|
|
/* 00002288-000027AC .text _execute__12daObjDoguu_cFv */
|
|
bool daObjDoguu_c::_execute() {
|
|
if (field_0x8A3 == 1) {
|
|
mPos.x = 0.0f;
|
|
mPos.y = 0.0f;
|
|
mPos.z = 0.0f;
|
|
mDoMtx_stack_c::copy(field_0x6D8->getAnmMtx(field_0x89C));
|
|
mDoMtx_stack_c::multVecZero(&mPos);
|
|
setPointLight();
|
|
}
|
|
|
|
mCyl.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
|
|
if (mAllColRatio != 1.0f) {
|
|
dKy_set_allcol_ratio(mAllColRatio);
|
|
}
|
|
|
|
switch(field_0x8AC) {
|
|
case 0:
|
|
if (checkItemGet(mItemNo, TRUE) && mCyl.ChkCoHit()) {
|
|
cCcD_Obj* hitObj = mCyl.GetCoHitObj();
|
|
if (hitObj != NULL) {
|
|
fopAc_ac_c *ac = hitObj->GetAc();
|
|
if ((ac != NULL) && (fopAcM_GetName(ac) == PROC_PLAYER)) {
|
|
mCyl.SetR(50.0f);
|
|
fopAcM_orderOtherEventId(this, mDoguuDemo1EventIdx);
|
|
field_0x8AC = 1;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if(eventInfo.mCommand == dEvtCmd_INDEMO_e){
|
|
field_0x8AC = 2;
|
|
} else {
|
|
fopAcM_orderOtherEventId(this, mDoguuDemo1EventIdx);
|
|
}
|
|
break;
|
|
case 2:
|
|
privateCut();
|
|
if (dComIfGp_evmng_endCheck(mDoguuDemo1EventIdx)) {
|
|
field_0x8AC = 3;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (getFinishEventCount() == 0) {
|
|
fopAcM_orderChangeEventId(this, mDoguuDemo2EventIdx, 0, 0xFFFF);
|
|
field_0x8AC = 4;
|
|
}
|
|
else {
|
|
fopAcM_orderChangeEventId(this, mDoguuDemo3EventIdx, 0, 0xFFFF);
|
|
field_0x8AC = 7;
|
|
}
|
|
break;
|
|
case 4:
|
|
if(eventInfo.mCommand == dEvtCmd_INDEMO_e){
|
|
field_0x8AC = 5;
|
|
}
|
|
break;
|
|
case 5:
|
|
privateCut();
|
|
if (dComIfGp_evmng_endCheck(mDoguuDemo2EventIdx)) {
|
|
field_0x8AC = 6;
|
|
}
|
|
break;
|
|
case 6:
|
|
fopAcM_orderChangeEventId(this, mDoguuDemo3EventIdx, 0, 0xFFFF);
|
|
field_0x8AC = 7;
|
|
break;
|
|
case 7:
|
|
if(eventInfo.mCommand == dEvtCmd_INDEMO_e){
|
|
field_0x8AC = 8;
|
|
}
|
|
break;
|
|
case 8:
|
|
privateCut();
|
|
if (dComIfGp_evmng_endCheck(mDoguuDemo3EventIdx)) {
|
|
field_0x8AC = 9;
|
|
}
|
|
break;
|
|
case 9:
|
|
setFinishMyEvent();
|
|
|
|
if (getFinishEventCount() >= 3) {
|
|
dComIfGs_onEventBit(0x1e40);
|
|
fopAcM_orderChangeEventId(this, mMegamiDemoEventIdx, 0, 0xFFFF);
|
|
field_0x8AC = 11;
|
|
} else {
|
|
field_0x8AC = 10;
|
|
dComIfGp_event_reset();
|
|
}
|
|
break;
|
|
case 10:
|
|
mCyl.SetR(30.0f);
|
|
break;
|
|
case 11:
|
|
if(eventInfo.mCommand == dEvtCmd_INDEMO_e){
|
|
field_0x8AC = 12;
|
|
}
|
|
break;
|
|
case 12:
|
|
privateCut();
|
|
if (dComIfGp_evmng_endCheck(mMegamiDemoEventIdx)) {
|
|
field_0x8AC = 13;
|
|
}
|
|
break;
|
|
case 14:
|
|
mCyl.SetR(30.0f);
|
|
break;
|
|
}
|
|
|
|
if (!field_0x8A1 && field_0x8A2 == true) {
|
|
if (mBrk.getFrame() < 1.0f) {
|
|
fopAcM_seStartCurrent(this, JA_SE_OBJ_SDOLL_EYE_PULSE, 0);
|
|
}
|
|
mBrk.play();
|
|
}
|
|
|
|
if(demoActorID != 0){
|
|
dDemo_actor_c* demo_actor = dComIfGp_demo_getActor(demoActorID);
|
|
if (demo_actor != NULL) {
|
|
if (demo_actor->checkEnable(dDemo_actor_c::ENABLE_SHAPE_e)) {
|
|
mShape = demo_actor->getShapeId();
|
|
}
|
|
if (demo_actor->checkEnable(dDemo_actor_c::ENABLE_ROTATE_e)) {
|
|
current.angle = *demo_actor->getRatate();
|
|
}
|
|
if (demo_actor->checkEnable(dDemo_actor_c::ENABLE_TRANS_e)) {
|
|
current.pos = *demo_actor->getTrans();
|
|
}
|
|
if(demo_actor->checkEnable(dDemo_actor_c::ENABLE_ANM_FRAME_e)) {
|
|
f32 frame = demo_actor->getAnmFrame();
|
|
mBckHead.setFrame(frame);
|
|
mBckBody.setFrame(frame);
|
|
mBckCrystal.setFrame(frame);
|
|
}
|
|
}
|
|
if (mShape == 0) {
|
|
field_0x8A1 = false;
|
|
}else {
|
|
field_0x8A1 = true;
|
|
}
|
|
}
|
|
set_mtx();
|
|
return true;
|
|
}
|
|
|
|
/* 000027AC-000027B4 .text daObjDoguu_IsDelete__FPv */
|
|
static BOOL daObjDoguu_IsDelete(void*) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class daObj_DoguuMethodTable = {
|
|
(process_method_func)daObjDoguu_Create,
|
|
(process_method_func)daObjDoguu_Delete,
|
|
(process_method_func)daObjDoguu_Execute,
|
|
(process_method_func)daObjDoguu_IsDelete,
|
|
(process_method_func)daObjDoguu_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_Obj_Doguu = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_Obj_Doguu,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daObjDoguu_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_Obj_Doguu,
|
|
/* Actor SubMtd */ &daObj_DoguuMethodTable,
|
|
/* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|