mirror of https://github.com/zeldaret/tp.git
238 lines
8.6 KiB
C++
238 lines
8.6 KiB
C++
/**
|
|
* @file d_a_obj_crvlh_up.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h"
|
|
|
|
#include "d/actor/d_a_obj_crvhahen.h"
|
|
#include "d/actor/d_a_obj_crvlh_up.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_s_play.h"
|
|
#include "dol2asm.h"
|
|
|
|
/* 80BD4ED8-80BD4EF8 000078 0020+00 1/0 0/0 0/0 .text daObjCRVLH_UP_Create__FP10fopAc_ac_c */
|
|
static int daObjCRVLH_UP_Create(fopAc_ac_c* i_this) {
|
|
return ((daObjCRVLH_UP_c*)i_this)->create();
|
|
}
|
|
|
|
/* 80BD4EF8-80BD4F1C 000098 0024+00 1/0 0/0 0/0 .text daObjCRVLH_UP_Delete__FP15daObjCRVLH_UP_c */
|
|
static int daObjCRVLH_UP_Delete(daObjCRVLH_UP_c* i_this) {
|
|
i_this->MoveBGDelete();
|
|
return 1;
|
|
}
|
|
|
|
/* 80BD5A9C-80BD5AA0 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
|
|
static char* l_arcName = "CrvLH_Up";
|
|
|
|
/* 80BD4F1C-80BD4FB0 0000BC 0094+00 0/0 0/0 1/1 .text HakaiSet__15daObjCRVLH_UP_cFv */
|
|
void daObjCRVLH_UP_c::HakaiSet() {
|
|
fopAcM_GetPosition(daPy_getPlayerActorClass());
|
|
field_0x5db = 1;
|
|
|
|
if (mpBgW != NULL && mpBgW->ChkUsed()) {
|
|
if (dComIfG_Bgsp().Release(mpBgW)) {
|
|
OSReport("Release Error\n");
|
|
}
|
|
}
|
|
field_0x5d6 = cM_rndFX(16000.0f);
|
|
}
|
|
|
|
/* 80BD4FB0-80BD4FD8 000150 0028+00 1/1 0/0 0/0 .text UpMotion__15daObjCRVLH_UP_cFv */
|
|
void daObjCRVLH_UP_c::UpMotion() {
|
|
if (!(field_0x5dc < nREG_F(2) + -120.0f)) {
|
|
field_0x5dc += -5.0f;
|
|
}
|
|
}
|
|
|
|
/* 80BD4FD8-80BD5254 000178 027C+00 1/1 0/0 0/0 .text Hakai__15daObjCRVLH_UP_cFv */
|
|
void daObjCRVLH_UP_c::Hakai() {
|
|
if (cLib_chaseAngleS(&shape_angle.x, 0x3800, field_0x5d8) != 0) {
|
|
fopAcM_seStartCurrent(this, Z2SE_OBJ_YAGURA_LAND, 0);
|
|
field_0x5da = 1;
|
|
csXyz cStack_30(shape_angle.x, field_0x5d6, shape_angle.z);
|
|
csXyz cStack_38(0, 0, 0);
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
mDoMtx_stack_c::transS(current.pos.x, field_0x5d0, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(field_0x5d6);
|
|
mDoMtx_stack_c::transM(0.0f, 0.0f, i * 350.0f + 150.0f);
|
|
mDoMtx_stack_c::YrotM(-field_0x5d6);
|
|
mDoMtx_stack_c::multVec(&field_0x5ac[i], &field_0x5ac[i]);
|
|
}
|
|
|
|
field_0x5a4 = fopAcM_create(PROC_Obj_CRVHAHEN, 1, &field_0x5ac[0], fopAcM_GetRoomNo(this),
|
|
&cStack_30, 0, -1);
|
|
field_0x5a8 = fopAcM_create(PROC_Obj_CRVHAHEN, 1, &field_0x5ac[1], fopAcM_GetRoomNo(this),
|
|
&cStack_30, 0, -1);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZF_S_CRVYAGURA05_SMK), &field_0x5ac[1], &tevStr, &cStack_30,
|
|
0);
|
|
}
|
|
|
|
field_0x5d8 += nREG_F(1) + 148.0f;
|
|
}
|
|
|
|
/* 80BD5254-80BD532C 0003F4 00D8+00 1/1 0/0 0/0 .text setBaseMtx__15daObjCRVLH_UP_cFv */
|
|
void daObjCRVLH_UP_c::setBaseMtx() {
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::transM(0.0f, field_0x5dc, 0.0f);
|
|
mDoMtx_stack_c::YrotM(field_0x5d6 - shape_angle.y);
|
|
mDoMtx_stack_c::transM(0.0f, HREG_F(8) + 150.0f, 0.0f);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
mDoMtx_stack_c::transM(0.0f, HREG_F(7) + -150.0f, 0.0f);
|
|
mDoMtx_stack_c::YrotM(-(field_0x5d6 - shape_angle.y));
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
cMtx_copy(mDoMtx_stack_c::get(), mBgMtx);
|
|
}
|
|
|
|
/* 80BD532C-80BD5358 0004CC 002C+00 1/0 0/0 0/0 .text daObjCRVLH_UP_Draw__FP15daObjCRVLH_UP_c */
|
|
static int daObjCRVLH_UP_Draw(daObjCRVLH_UP_c* i_this) {
|
|
return i_this->Draw();
|
|
}
|
|
|
|
/* 80BD5358-80BD5378 0004F8 0020+00 2/1 0/0 0/0 .text daObjCRVLH_UP_Execute__FP15daObjCRVLH_UP_c
|
|
*/
|
|
static int daObjCRVLH_UP_Execute(daObjCRVLH_UP_c* i_this) {
|
|
return i_this->MoveBGExecute();
|
|
}
|
|
|
|
/* 80BD5378-80BD53F0 000518 0078+00 1/0 0/0 0/0 .text CreateHeap__15daObjCRVLH_UP_cFv */
|
|
int daObjCRVLH_UP_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "U_CrvLH_UP.bmd");
|
|
if (modelData == NULL) {
|
|
JUT_ASSERT(87, modelData != 0);
|
|
}
|
|
|
|
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
return mpModel != NULL ? 1 : 0;
|
|
}
|
|
|
|
/* 80BD53F0-80BD5614 000590 0224+00 1/1 0/0 0/0 .text create__15daObjCRVLH_UP_cFv */
|
|
int daObjCRVLH_UP_c::create() {
|
|
fopAcM_SetupActor(this, daObjCRVLH_UP_c);
|
|
int phase = dComIfG_resLoad(&mPhase, l_arcName);
|
|
|
|
if (phase == cPhs_COMPLEATE_e) {
|
|
gravity = nREG_F(0) + -9.0f;
|
|
int dzb_id = dComIfG_getObjctResName2Index(l_arcName, "U_CrvLH_Up.dzb");
|
|
if (dzb_id == -1) {
|
|
// "dzb data not found!<%s>"
|
|
OS_REPORT("dzbデータが見つかりませんでした!<%s>", l_arcName);
|
|
}
|
|
|
|
JUT_ASSERT(504, dzb_id != -1);
|
|
phase = MoveBGCreate(l_arcName, dzb_id, dBgS_MoveBGProc_TypicalRotY, 0xe80, NULL);
|
|
|
|
if (phase == cPhs_ERROR_e) {
|
|
return phase;
|
|
}
|
|
|
|
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
|
field_0x5ac[0].set(0.0f, 0.0f, 0.0f);
|
|
field_0x5ac[1].set(0.0f, 0.0f, 0.0f);
|
|
|
|
cXyz cStack_28(current.pos.x, current.pos.y + 100.0f, current.pos.z);
|
|
|
|
fopAcM_setCullSizeFar(this, 100.0f);
|
|
field_0x5d0 = current.pos.y;
|
|
field_0x5dc = 0;
|
|
fopAcM_setCullSizeBox(this, -500.0f, -500.0f, -500.0f, 500.0f, 2000.0f, 500.0f);
|
|
daObjCRVLH_UP_Execute(this);
|
|
}
|
|
|
|
return phase;
|
|
}
|
|
|
|
/* 80BD56E4-80BD56EC 000884 0008+00 1/0 0/0 0/0 .text daObjCRVLH_UP_IsDelete__FP15daObjCRVLH_UP_c
|
|
*/
|
|
static int daObjCRVLH_UP_IsDelete(daObjCRVLH_UP_c* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 80BD56EC-80BD5730 00088C 0044+00 1/0 0/0 0/0 .text Create__15daObjCRVLH_UP_cFv */
|
|
int daObjCRVLH_UP_c::Create() {
|
|
fopAcM_setCullSizeBox(this, -1000.0f, -500.0f, -1000.0f, 1000.0f, 500.0f, 1000.0f);
|
|
return 4;
|
|
}
|
|
|
|
/* 80BD5730-80BD593C 0008D0 020C+00 1/0 0/0 0/0 .text Execute__15daObjCRVLH_UP_cFPPA3_A4_f */
|
|
int daObjCRVLH_UP_c::Execute(Mtx** param_0) {
|
|
fopAc_ac_c* local_a4;
|
|
fopAc_ac_c* local_a8;
|
|
|
|
if (field_0x5d4 != 0) {
|
|
fopAcM_delete(this);
|
|
}
|
|
|
|
if (field_0x5da == 0) {
|
|
if (field_0x5db != 0) {
|
|
Hakai();
|
|
UpMotion();
|
|
}
|
|
} else {
|
|
if (fopAcM_SearchByID(field_0x5a4, &local_a4) != 0 &&
|
|
fopAcM_SearchByID(field_0x5a8, &local_a8) != 0 && local_a4 != NULL && local_a8 != NULL)
|
|
{
|
|
cXyz cStack_1c(100.0f, 250.0f, 80.0f);
|
|
cXyz cStack_28(yREG_F(15) + 60.0f, yREG_F(16) + 60.0f, yREG_F(17) + 60.0f);
|
|
cXyz cStack_34(0.0f, 10.0f, 0.0f);
|
|
cXyz cStack_40(10.0f, 20.0f, 20.0f);
|
|
((daObjCRVHAHEN_c*)local_a4)
|
|
->HahenSet(cStack_1c, cStack_34, cStack_28, cStack_40, 3000.0f);
|
|
|
|
// copy pasta mistake?
|
|
cStack_1c.set(100.0f, 250.0f, 80.0f);
|
|
cStack_28.set(yREG_F(15) + 60.0f, yREG_F(16) + 60.0f, yREG_F(17) + 60.0f);
|
|
cStack_1c.set(100.0f, 250.0f, 80.0f);
|
|
cStack_28.set(yREG_F(15) + 60.0f, yREG_F(16) + 60.0f, yREG_F(17) + 60.0f);
|
|
((daObjCRVHAHEN_c*)local_a8)
|
|
->HahenSet(cStack_1c, cStack_34, cStack_28, cStack_40, 3000.0f);
|
|
field_0x5d4 = 1;
|
|
}
|
|
}
|
|
|
|
*param_0 = &mBgMtx;
|
|
setBaseMtx();
|
|
return 1;
|
|
}
|
|
|
|
/* 80BD593C-80BD59C0 000ADC 0084+00 1/0 0/0 0/0 .text Draw__15daObjCRVLH_UP_cFv */
|
|
int daObjCRVLH_UP_c::Draw() {
|
|
g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
|
|
dComIfGd_setListBG();
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
return 1;
|
|
}
|
|
|
|
/* 80BD59C0-80BD59F4 000B60 0034+00 1/0 0/0 0/0 .text Delete__15daObjCRVLH_UP_cFv */
|
|
int daObjCRVLH_UP_c::Delete() {
|
|
dComIfG_resDelete(&mPhase, l_arcName);
|
|
return 1;
|
|
}
|
|
|
|
/* 80BD5AA0-80BD5AC0 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCRVLH_UP_Method */
|
|
static actor_method_class l_daObjCRVLH_UP_Method = {
|
|
(process_method_func)daObjCRVLH_UP_Create, (process_method_func)daObjCRVLH_UP_Delete,
|
|
(process_method_func)daObjCRVLH_UP_Execute, (process_method_func)daObjCRVLH_UP_IsDelete,
|
|
(process_method_func)daObjCRVLH_UP_Draw,
|
|
};
|
|
|
|
/* 80BD5AC0-80BD5AF0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_CRVLH_UP */
|
|
extern actor_process_profile_definition g_profile_Obj_CRVLH_UP = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
3, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_Obj_CRVLH_UP, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daObjCRVLH_UP_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
470, // mPriority
|
|
&l_daObjCRVLH_UP_Method, // sub_method
|
|
0x00040180, // mStatus
|
|
fopAc_ACTOR_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|