mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-07 13:23:27 -04:00
D_a_obj_doguu (#741)
* createInit for now * _create almost _draw * push for now, some functions finished progress on others * _execute matches * privatecute matching * cleanup, almost matched * data almost matching * added getStartFrame to mDoExt_baseAnm, everything but data 100% matching * cleanup and marked as Equivalent in configure.py * cleanup
This commit is contained in:
+1
-1
@@ -1381,7 +1381,7 @@ config.libs = [
|
||||
ActorRel(Matching, "d_a_obj_cafelmp"),
|
||||
ActorRel(NonMatching, "d_a_obj_coming"),
|
||||
ActorRel(NonMatching, "d_a_obj_demo_barrel"),
|
||||
ActorRel(NonMatching, "d_a_obj_doguu"),
|
||||
ActorRel(Equivalent, "d_a_obj_doguu"), # weak func order
|
||||
ActorRel(Matching, "d_a_obj_doguu_demo"),
|
||||
ActorRel(Matching, "d_a_obj_gryw00", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(Matching, "d_a_obj_hfuck1", extra_cflags=['-pragma "nosyminline on"']),
|
||||
|
||||
@@ -1,32 +1,65 @@
|
||||
#ifndef D_A_OBJ_DOGUU_H
|
||||
#define D_A_OBJ_DOGUU_H
|
||||
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "d/d_npc.h"
|
||||
|
||||
class daObjDoguu_c : public fopAc_ac_c {
|
||||
class daObjDoguu_c : public fopNpc_npc_c {
|
||||
public:
|
||||
daObjDoguu_c();
|
||||
inline cPhs_State _create();
|
||||
inline bool _delete();
|
||||
inline bool _draw();
|
||||
inline bool _execute();
|
||||
void setEffectMtx(const cXyz*, float); // weak but not inlined?
|
||||
inline void setEffectMtx(const cXyz*, float); // weak but not inlined?
|
||||
|
||||
void setPointLight();
|
||||
void CreateHeap();
|
||||
BOOL CreateHeap();
|
||||
void CreateInit();
|
||||
void set_mtx();
|
||||
void next_msgStatus(unsigned long*);
|
||||
void getMsg();
|
||||
u16 next_msgStatus(unsigned long*);
|
||||
u32 getMsg();
|
||||
void setGoal(int);
|
||||
void setPlayerAngle(int);
|
||||
void setQuake(int);
|
||||
void setJDemo(int);
|
||||
void privateCut();
|
||||
void getFinishEventCount();
|
||||
int getFinishEventCount();
|
||||
void setFinishMyEvent();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x6C4 */ request_of_phase_process_class mPhs;
|
||||
/* 0x6CC */ J3DModel* field_0x6CC;
|
||||
/* 0x6D0 */ J3DModel* field_0x6D0;
|
||||
/* 0x6D4 */ J3DModel* field_0x6D4;
|
||||
/* 0x6D8 */ J3DModel* field_0x6D8;
|
||||
/* 0x6DC */ mDoExt_brkAnm mBrk;
|
||||
/* 0x6F4 */ mDoExt_bckAnm mBckHead;
|
||||
/* 0x704 */ mDoExt_bckAnm mBckBody;
|
||||
/* 0x714 */ mDoExt_bckAnm mBckCrystal;
|
||||
/* 0x724 */ dCcD_Stts mStts;
|
||||
/* 0x760 */ dCcD_Cyl mCyl;
|
||||
/* 0x890 */ u8 mItemNo;
|
||||
/* 0x894 */ int field_0x894;
|
||||
/* 0x898 */ u32 mHead1JntNo;
|
||||
/* 0x89C */ u32 field_0x89C;
|
||||
/* 0x8A0 */ bool field_0x8A0;
|
||||
/* 0x8A1 */ bool field_0x8A1;
|
||||
/* 0x8A2 */ bool field_0x8A2;
|
||||
/* 0x8A3 */ bool field_0x8A3;
|
||||
/* 0x8A4 */ s16 mDoguuDemo1EventIdx;
|
||||
/* 0x8A6 */ s16 mDoguuDemo2EventIdx;
|
||||
/* 0x8A8 */ s16 mDoguuDemo3EventIdx;
|
||||
/* 0x8AA */ s16 mMegamiDemoEventIdx;
|
||||
/* 0x8AC */ int field_0x8AC;
|
||||
/* 0x8B0 */ s8 mActIdx;
|
||||
/* 0x8B4 */ cXyz field_0x8B4;
|
||||
/* 0x8C0 */ int mTimer;
|
||||
/* 0x8C4 */ int field_0x8C4;
|
||||
/* 0x8C8 */ f32 mAllColRatio;
|
||||
/* 0x8CC */ u32 mShape;
|
||||
/* 0x8D0 */ cXyz mPos;
|
||||
/* 0x8DC */ LIGHT_INFLUENCE mLightInfluence;
|
||||
/* 0x8FC */ f32 field_0x8FC;
|
||||
}; // Size: 0x900
|
||||
|
||||
#endif /* D_A_OBJ_DOGUU_H */
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
f32 getPlaySpeed() { return mFrameCtrl->getRate(); }
|
||||
void setPlaySpeed(f32 speed) { mFrameCtrl->setRate(speed); }
|
||||
BOOL checkFrame(f32 frame) { return mFrameCtrl->checkPass(frame); }
|
||||
f32 getStartFrame() { return mFrameCtrl->getStart(); }
|
||||
f32 getFrame() { return mFrameCtrl->getFrame(); }
|
||||
f32 getEndFrame() { return mFrameCtrl->getEnd(); }
|
||||
void setFrame(f32 frame) { mFrameCtrl->setFrame(frame); }
|
||||
|
||||
+720
-36
@@ -5,120 +5,804 @@
|
||||
|
||||
#include "d/actor/d_a_obj_doguu.h"
|
||||
#include "d/d_procname.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() {
|
||||
/* Nonmatching */
|
||||
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*) {
|
||||
/* Nonmatching */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
||||
return static_cast<daObjDoguu_c*>(i_this)->CreateHeap();
|
||||
}
|
||||
|
||||
/* 00000188-000007D0 .text CreateHeap__12daObjDoguu_cFv */
|
||||
void daObjDoguu_c::CreateHeap() {
|
||||
/* Nonmatching */
|
||||
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;
|
||||
} else{
|
||||
field_0x89C = 1;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* 000007D0-00000B80 .text CreateInit__12daObjDoguu_cFv */
|
||||
void daObjDoguu_c::CreateInit() {
|
||||
/* Nonmatching */
|
||||
|
||||
|
||||
cullMtx = 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() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daObjDoguu_c::next_msgStatus(unsigned long*) {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daObjDoguu_c::getMsg() {
|
||||
/* Nonmatching */
|
||||
u32 daObjDoguu_c::getMsg() {
|
||||
if (mActIdx == 4) {
|
||||
return 3821;
|
||||
}
|
||||
if (field_0x894 == 0) {
|
||||
return 3822;
|
||||
}
|
||||
if(field_0x894 == 1){
|
||||
return 3823;
|
||||
} else{
|
||||
return 3824;
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000DBC-00000E98 .text setGoal__12daObjDoguu_cFi */
|
||||
void daObjDoguu_c::setGoal(int) {
|
||||
/* Nonmatching */
|
||||
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) {
|
||||
/* Nonmatching */
|
||||
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) {
|
||||
/* Nonmatching */
|
||||
void daObjDoguu_c::setQuake(int i_staffIdx) {
|
||||
// u8 temp[4] = {0x00, 0x10, 0xFF, 0xEE}; // Doesn't match
|
||||
u32 temp2 = 0x0010FFEE;
|
||||
u8* temp = (u8*)&temp2;
|
||||
dComIfGp_getVibration().StartQuake(temp, 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) {
|
||||
/* Nonmatching */
|
||||
dComIfGp_setNextStage("ADMumi", (short)field_0x894, 0, 8);
|
||||
}
|
||||
|
||||
/* 0000100C-000015A8 .text privateCut__12daObjDoguu_cFv */
|
||||
void daObjDoguu_c::privateCut() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daObjDoguu_c::getFinishEventCount() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
if (field_0x894 == 0) {
|
||||
dComIfGs_onEventBit(0x1480);
|
||||
} else if (field_0x894 == 1) {
|
||||
dComIfGs_onEventBit(0x1440);
|
||||
} else {
|
||||
dComIfGs_onEventBit(0x1410);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* 000016A4-000016C4 .text daObjDoguu_Create__FPv */
|
||||
static cPhs_State daObjDoguu_Create(void*) {
|
||||
/* Nonmatching */
|
||||
static cPhs_State daObjDoguu_Create(void* i_this) {
|
||||
return static_cast<daObjDoguu_c*>(i_this)->_create();
|
||||
}
|
||||
|
||||
daObjDoguu_c::daObjDoguu_c() {}
|
||||
|
||||
/* 000016C4-0000178C .text _create__12daObjDoguu_cFv */
|
||||
cPhs_State daObjDoguu_c::_create() {
|
||||
/* Nonmatching */
|
||||
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;
|
||||
} else{
|
||||
CreateInit();
|
||||
}
|
||||
}
|
||||
return phase_state;
|
||||
}
|
||||
|
||||
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*) {
|
||||
/* Nonmatching */
|
||||
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*) {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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);
|
||||
field_0x6CC->getModelData()->getMaterialTable().removeTevRegAnimator(mBrk.getBrkAnm());
|
||||
}
|
||||
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*, float) {
|
||||
/* Nonmatching */
|
||||
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);
|
||||
MTXConcat(mDoMtx_stack_c::now, mtx_adj, mDoMtx_stack_c::now);
|
||||
MTXConcat(mDoMtx_stack_c::now, reflMtx, mDoMtx_stack_c::now);
|
||||
mDoMtx_stack_c::now[0][3] = 0.0f;
|
||||
mDoMtx_stack_c::now[1][3] = 0.0f;
|
||||
mDoMtx_stack_c::now[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::now);
|
||||
}
|
||||
}
|
||||
}
|
||||
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::now);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 00002264-00002288 .text daObjDoguu_Execute__FPv */
|
||||
static BOOL daObjDoguu_Execute(void*) {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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:
|
||||
fopAc_ac_c *ac;
|
||||
if (checkItemGet(mItemNo, TRUE) && mCyl.ChkCoHit()) {
|
||||
cCcD_Obj* hitObj = mCyl.GetCoHitObj();
|
||||
if (hitObj != NULL) {
|
||||
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*) {
|
||||
/* Nonmatching */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static actor_method_class daObj_DoguuMethodTable = {
|
||||
|
||||
Reference in New Issue
Block a user