tp/src/d/actor/d_a_obj_dmelevator.cpp

775 lines
25 KiB
C++

/**
* d_a_obj_dmelevator.cpp
*
*/
#include "d/dolzel_rel.h"
#include "d/actor/d_a_obj_dmelevator.h"
#include "Z2AudioLib/Z2Instances.h"
#include "d/actor/d_a_player.h"
#include "d/d_bg_w.h"
#include "d/d_path.h"
/* 80BDF870-80BDF87C 000000 000C+00 11/11 0/0 0/0 .rodata l_swOffset */
static const Vec l_swOffset = {
0.0f,
162.0f,
-77.0f,
};
/* 80BDD96C-80BDDBB4 0000EC 0248+00 1/1 0/0 0/0 .text
* rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
static void rideCallBack(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) {
daObjDmElevator_c* pthis = (daObjDmElevator_c*)param_1;
daPy_py_c* pdVar1 = daPy_getPlayerActorClass();
if (fopAcM_CheckStatus(param_2, 0x400) != 0 && fopAcM_GetName(param_2) == 0xfd) {
static cXyz l_push_check_pos0[4] = {
cXyz(-50.0f, 0.0f, -50.0f),
cXyz(50.0f, 0.0f, -50.0f),
cXyz(50.0f, 0.0f, 50.0f),
cXyz(-50.f, 0.f, 50.f),
};
cXyz local_2c = param_2->current.pos - pthis->mXyz;
mDoMtx_stack_c::YrotS(-param_1->current.angle.y);
mDoMtx_stack_c::multVec(&local_2c, &local_2c);
if (l_push_check_pos0[0].x <= local_2c.x) {
if (l_push_check_pos0[2].x >= local_2c.x) {
if (l_push_check_pos0[0].z <= local_2c.z) {
if (l_push_check_pos0[2].z >= local_2c.z) {
if ((pdVar1->checkEquipHeavyBoots())) {
pthis->field_0x632 = 1;
pthis->field_0x634 = 1;
}
else
{
pthis->field_0x632 = 0;
pthis->field_0x634 = 0;
}
if (fopAcM_CheckCarryType(param_2, fopAcM_CARRY_TYPE_1)) {
pthis->field_0x62f = 2;
} else {
pthis->field_0x62f = 1;
}
}
}
}
}
}
}
/* 80BDDBF0-80BDDCA0 000370 00B0+00 1/1 0/0 0/0 .text nodeCallBackForSw__FP8J3DJointi */
static int nodeCallBackForSw(J3DJoint* param_0, int param_1) {
if (param_1 == 0) {
int jnt_no = param_0->getJntNo();
J3DModel* pmodel = j3dSys.getModel();
daObjDmElevator_c* puser_area = (daObjDmElevator_c*)pmodel->getUserArea();
mDoMtx_copy(pmodel->mMtxBuffer->getAnmMtx(jnt_no), mDoMtx_stack_c::get());
if (jnt_no == 1) {
mDoMtx_stack_c::transM(puser_area->field_0x638, 0.0f, 0.0f);
}
pmodel->mMtxBuffer->setAnmMtx(jnt_no, mDoMtx_stack_c::get());
mDoMtx_copy(mDoMtx_stack_c::get(), j3dSys.mCurrentMtx);
}
return 1;
}
/* 80BDDCA0-80BDDD38 000420 0098+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
static int nodeCallBack(J3DJoint* i_joint, int param_1) {
if (param_1 == 0) {
int jnt_no = i_joint->getJntNo();
J3DModel* pmodel = j3dSys.getModel();
daObjDmElevator_c* puser_area = (daObjDmElevator_c*)pmodel->getUserArea();
mDoMtx_copy(j3dSys.getModel()->mMtxBuffer->getAnmMtx(jnt_no), mDoMtx_stack_c::get());
if (jnt_no == 2) {
mDoMtx_XrotM(mDoMtx_stack_c::get(), puser_area->field_0x5e4);
}
mDoMtx_copy(mDoMtx_stack_c::get(), pmodel->mMtxBuffer->getAnmMtx(jnt_no));
}
return 1;
}
/* 80BDDD38-80BDDD90 0004B8 0058+00 1/1 0/0 0/0 .text initBaseMtx__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::initBaseMtx() {
mpElevatorModel->setBaseScale(scale);
mpSwitchModel->setBaseScale(scale);
setBaseMtx();
}
/* 80BDDD90-80BDDEFC 000510 016C+00 2/2 0/0 0/0 .text setBaseMtx__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::setBaseMtx() {
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpElevatorModel->setBaseTRMtx(mDoMtx_stack_c::now);
PSMTXCopy(mDoMtx_stack_c::now, mBgMtx);
mDoMtx_stack_c::YrotS(shape_angle.y);
cXyz VStack_18;
mDoMtx_stack_c::multVec(&l_swOffset, &VStack_18);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::transM(VStack_18);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpSwitchModel->setBaseTRMtx(mDoMtx_stack_c::now);
PSMTXCopy(mDoMtx_stack_c::now, mMtx);
float fVar1 = field_0x638;
if (fVar1 < -17.f) {
fVar1 = -17.f;
}
mDoMtx_stack_c::transS(current.pos.x, current.pos.y + fVar1, current.pos.z);
mDoMtx_stack_c::transM(VStack_18);
mDoMtx_stack_c::YrotM(shape_angle.y);
PSMTXCopy(mDoMtx_stack_c::now, mMtx);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::transM(VStack_18);
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::multVecZero(&mXyz);
}
/* 80BDF964-80BDF968 -00001 0004+00 3/4 0/0 0/0 .data l_el_arcName */
static const char* l_el_arcName = "H_Elevato";
/* 80BDF968-80BDF96C -00001 0004+00 3/3 0/0 0/0 .data l_sw_arcName */
static const char* l_sw_arcName = "D_Hfsw00";
/* 80BDF96C-80BDF970 -00001 0004+00 0/1 0/0 0/0 .data l_eventName */
static const char* l_eventName = "ELEVATOR_MOVE";
/* 80BDF970-80BDF974 -00001 0004+00 0/1 0/0 0/0 .data l_eventName2 */
static const char* l_eventName2 = "ELEVATOR_MOVE2";
/* 80BDF8EC-80BDF8EC 00007C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
static const char* l_staffName = "dmele";
/* 80BDDEFC-80BDE0A4 00067C 01A8+00 1/0 0/0 0/0 .text Create__17daObjDmElevator_cFv */
int daObjDmElevator_c::Create() {
if (field_0x5e0 == 1) {
field_0x637 = 0xe;
field_0x636 = 1;
field_0x638 = -24.0f;
field_0x62b = 1;
modeSwWaitUpperInit();
}
int success = dComIfG_Bgsp().Regist((dBgW_Base*)mpBgW, this);
if (success != 0) {
success = 0;
} else {
initBaseMtx();
cullMtx = mpElevatorModel->mBaseTransformMtx;
fopAcM_setCullSizeBox(this, -250.0f, -50.0f, -350.0f, 250.0f, 450.0f, 400.0f);
mpElevatorModel->mModelData->getJointTree().getJointNodePointer(2)->setCallBack(
nodeCallBack);
mpElevatorModel->setUserArea((uintptr_t)this);
mpSwitchModel->mModelData->getJointTree().getJointNodePointer(1)->setCallBack(
nodeCallBackForSw);
mpSwitchModel->setUserArea((uintptr_t)this);
mpBgW->SetRideCallback(rideCallBack);
mpBgW->Move();
eventInfo.setArchiveName((char*)l_el_arcName);
success = strcmp(dComIfGp_getStartStageName(), "F_SP110");
if (success == 0) {
mEventIndex = dComIfGp_getEventManager().getEventIdx(this, l_eventName, 0xff);
} else {
success = strcmp(dComIfGp_getStartStageName(), "R_SP110");
if (success == 0) {
mEventIndex = dComIfGp_getEventManager().getEventIdx(this, l_eventName2, 0xff);
}
}
success = 1;
}
return success;
}
/* 80BDE0A4-80BDE2F8 000824 0254+00 1/1 0/0 0/0 .text init__17daObjDmElevator_cFv */
int daObjDmElevator_c::init() {
dPath* path = dPath_GetRoomPath(getPathID() & 0xff, fopAcM_GetRoomNo(this));
daPy_py_c* plink = daPy_getPlayerActorClass();
dPnt* pdVar4 = dPath_GetPnt(path, 0);
dPnt* pdVar5 = dPath_GetPnt(path, 1);
if (plink->current.pos.absXZ(pdVar5->m_position) < 100.0f) {
home.pos = pdVar5->m_position;
home.pos.y = home.pos.y - 200.0f;
field_0x5e0 = 1;
field_0x5e1 = -1;
} else {
home.pos = pdVar4->m_position;
field_0x5e0 = 0;
field_0x5e1 = 1;
}
current.pos = home.pos;
old.pos = home.pos;
mSoundObj.init(&current.pos, 1);
return 1;
}
/* 80BDE2F8-80BDE448 000A78 0150+00 1/0 0/0 0/0 .text CreateHeap__17daObjDmElevator_cFv
*/
int daObjDmElevator_c::CreateHeap() {
J3DModelData* pJVar1 = (J3DModelData*)dComIfG_getObjectRes((const char*)l_el_arcName, 5);
mpElevatorModel = mDoExt_J3DModel__create(pJVar1, 0x80000, 0x11000084);
if (mpElevatorModel == NULL) {
return 0;
}
pJVar1 = (J3DModelData*)dComIfG_getObjectRes((const char*)l_sw_arcName, 4);
mpSwitchModel = mDoExt_J3DModel__create(pJVar1, 0x80000, 0x11000084);
if (mpSwitchModel == NULL) {
return 0;
}
mpBgW = new dBgW();
if (mpBgW != NULL && mpBgW->Set((cBgD_t*)dComIfG_getObjectRes(l_sw_arcName, 8), 1, &mMtx) == 0)
{
mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
} else {
mpBgW = NULL;
return 0;
}
return 1;
}
/* 80BDE448-80BDE500 000BC8 00B8+00 1/1 0/0 0/0 .text create1st__17daObjDmElevator_cFv */
int daObjDmElevator_c::create1st() {
int temp = init();
if (temp == 0) {
return cPhs_ERROR_e;
}
int ret = dComIfG_resLoad(&mPhaseReq2, l_sw_arcName);
if (ret != cPhs_COMPLEATE_e) {
return ret;
}
ret = dComIfG_resLoad(&mPhaseReq, l_el_arcName);
if (ret == cPhs_COMPLEATE_e) {
ret = MoveBGCreate(l_el_arcName, 8, dBgS_MoveBGProc_TypicalRotY, 0x2280, NULL);
if (ret == cPhs_ERROR_e) {
return ret;
}
}
return ret;
}
/* 80BDE500-80BDE5F8 000C80 00F8+00 1/0 0/0 0/0 .text Execute__17daObjDmElevator_cFPPA3_A4_f */
int daObjDmElevator_c::Execute(Mtx** param_1) {
event_proc_call();
setting_ride_flag();
event_sw_proc_call();
mode_sw_proc_call();
calc_top_pos();
*param_1 = &mBgMtx;
setBaseMtx();
mpBgW->Move();
field_0x630 = field_0x62f;
field_0x62f = 0;
field_0x633 = field_0x632;
field_0x632 = 0;
field_0x635 = field_0x634;
field_0x634 = 0;
field_0x5e4 = field_0x5e4 + (s16)((speedF * 65535.0f) / 502.65485f);
mSoundObj.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
return 1;
}
/* 80BDE5F8-80BDE6FC 000D78 0104+00 1/1 0/0 0/0 .text setting_ride_flag__17daObjDmElevator_cFv */
void daObjDmElevator_c::setting_ride_flag() {
if (field_0x62f != 0) {
if (field_0x631 != 0) {
field_0x62e = 8;
} else {
field_0x62e += 1;
if (field_0x62e > 8) {
field_0x631 = 1;
}
}
} else if (field_0x631 != 0) {
field_0x62e -= 1;
if (field_0x62e == 0) {
field_0x631 = 0;
}
} else {
field_0x62e = 0;
}
if (field_0x634 != 0) {
if (field_0x636 != 0) {
field_0x637 = 0xe;
return;
}
field_0x637 = field_0x637 + 1;
if (field_0x637 <= 8) {
return;
}
field_0x636 = 1;
return;
}
if (field_0x636 != 0) {
field_0x637 = field_0x637 - 1;
if (field_0x637 != 0) {
return;
}
field_0x636 = 0;
} else {
field_0x637 = 0;
}
}
/* 80BDE6FC-80BDE7A0 000E7C 00A4+00 1/1 0/0 0/0 .text event_sw_proc_call__17daObjDmElevator_cFv */
void daObjDmElevator_c::event_sw_proc_call() {
typedef void (daObjDmElevator_c::*actionFunc)();
static actionFunc l_func[] = {
&daObjDmElevator_c::actionSwPauseNone,
&daObjDmElevator_c::actionSwPauseOrder,
&daObjDmElevator_c::actionSwPause,
};
(this->*l_func[field_0x629])();
}
/* 80BDE7A0-80BDE7AC 000F20 000C+00 2/2 0/0 0/0 .text actionSwPauseNoneInit__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::actionSwPauseNoneInit() {
field_0x629 = 0;
}
/* 80BDE7AC-80BDE7B0 000F2C 0004+00 1/0 0/0 0/0 .text actionSwPauseNone__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionSwPauseNone() {
/* empty function */
}
/* 80BDE7B0-80BDE808 000F30 0058+00 1/1 0/0 0/0 .text
* actionSwPauseOrderInit__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionSwPauseOrderInit() {
if (field_0x629 != 1) {
field_0x629 = 1;
fopAcM_orderPotentialEvent(this, 2, 0, 0);
eventInfo.mCondition = eventInfo.mCondition | 2;
}
}
/* 80BDE808-80BDE83C 000F88 0034+00 1/0 0/0 0/0 .text actionSwPauseOrder__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionSwPauseOrder() {
if (eventInfo.mCommand == 2) {
actionSwPauseInit();
} else {
actionSwPauseNoneInit();
}
}
/* 80BDE83C-80BDE868 000FBC 002C+00 1/1 0/0 0/0 .text actionSwPauseInit__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionSwPauseInit() {
daPy_getPlayerActorClass()->onWolfEyeKeep();
field_0x62a = 10;
field_0x629 = 2;
}
/* 80BDE868-80BDE8D0 000FE8 0068+00 1/0 0/0 0/0 .text actionSwPause__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionSwPause() {
daPy_getPlayerActorClass()->mEndResetFlg1 = daPy_getPlayerActorClass()->mEndResetFlg1 | 0x200;
field_0x62a += -1;
if (field_0x62a == 0) {
g_dComIfG_gameInfo.play.mEvent.reset();
actionSwPauseNoneInit();
}
}
/* 80BDE8D0-80BDE960 001050 0090+00 1/1 0/0 0/0 .text calc_top_pos__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::calc_top_pos() {
speed.y = speed.y - (field_0x63c - field_0x640) * (0.9f);
speed.y = speed.y - speed.y * 0.5f;
field_0x63c = field_0x63c + speed.y;
field_0x638 = (1.0f - field_0x63c) * -24.0f;
field_0x638 = cLib_minMaxLimit(field_0x638, -24.0f, 0.0f);
}
/* 80BDE960-80BDEA1C 0010E0 00BC+00 1/1 0/0 0/0 .text mode_sw_proc_call__17daObjDmElevator_cFv */
void daObjDmElevator_c::mode_sw_proc_call() {
typedef void (daObjDmElevator_c::*actionFunc)();
static actionFunc l_mode_func[] = {
&daObjDmElevator_c::modeSwWaitLower,
&daObjDmElevator_c::modeSwLower,
&daObjDmElevator_c::modeSwWaitUpper,
&daObjDmElevator_c::modeSwUpper,
};
(this->*l_mode_func[field_0x628])();
}
/* 80BDEA1C-80BDEA44 00119C 0028+00 1/1 0/0 0/0 .text modeSwWaitLowerInit__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::modeSwWaitLowerInit() {
speed.y = 0.0f;
field_0x63c = 1.0f;
field_0x640 = 1.0f;
field_0x628 = 0;
}
/* 80BDEA44-80BDEB88 0011C4 0144+00 1/0 0/0 0/0 .text modeSwWaitLower__17daObjDmElevator_cFv */
void daObjDmElevator_c::modeSwWaitLower() {
if (field_0x631 != 0) {
if (field_0x636 != 0) {
modeSwLowerInit();
} else {
if (field_0x640 == 1.0f) {
fopAcM_seStart(this, Z2SE_OBJ_HEAVY_FUMISW_RIDE, 0);
}
field_0x640 = 0.8f; // 9c
}
} else {
if (field_0x640 != 1.0f) // a8
{
fopAcM_seStart(this, Z2SE_OBJ_HEAVY_FUMISW_DROP, 0);
}
field_0x640 = 1.0f;
}
if (field_0x62f != 0 && field_0x630 == 0) //: 10c
{
actionSwPauseOrderInit();
}
}
/* 80BDEA1c-80BDEA40 001308 0088+00 1/1 0/0 0/0 .text modeSwLowerInit__17daObjDmElevator_cFv */
void daObjDmElevator_c::modeSwLowerInit() {
mDoAud_seStart(Z2SE_OBJ_HEAVY_FUMISW_ON, &mXyz, 0, 0);
field_0x640 = 0;
field_0x628 = 1;
}
/* 80BDEC10-80BDEC94 001390 0084+00 1/0 0/0 0/0 .text modeSwLower__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::modeSwLower() {
if (field_0x638 == -24.0f) {
dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
modeSwWaitUpperInit();
field_0x62b = 1;
field_0x62d = 1;
}
}
/* 80BDEC94-80BDECB4 001414 0020+00 2/2 0/0 0/0 .text modeSwWaitUpperInit__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::modeSwWaitUpperInit() {
speed.y = 0.0f;
field_0x63c = 0.0f;
field_0x640 = 0.0f;
field_0x628 = 2;
}
/* 80BDECB4-80BDECE0 001434 002C+00 1/0 0/0 0/0 .text modeSwWaitUpper__17daObjDmElevator_cFv */
void daObjDmElevator_c::modeSwWaitUpper() {
if (field_0x636 == 0) {
modeSwUpperInit();
}
}
/* 80BDECE0-80BDED64 001460 0084+00 1/1 0/0 0/0 .text modeSwUpperInit__17daObjDmElevator_cFv */
void daObjDmElevator_c::modeSwUpperInit() {
mDoAud_seStart(Z2SE_OBJ_HEAVY_FUMISW_OFF, &mXyz, 0, 0);
field_0x640 = 1.0f;
field_0x628 = 3;
}
/* 80BDED64-80BDEDE0 0014E4 007C+00 1/0 0/0 0/0 .text modeSwUpper__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::modeSwUpper() {
if (field_0x638 == 0.0f) {
dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0, 1.0, 0.0));
modeSwWaitLowerInit();
field_0x62b = 0;
}
}
/* 80BDEDE0-80BDEECC 001560 00EC+00 1/1 0/0 0/0 .text event_proc_call__17daObjDmElevator_cFv */
void daObjDmElevator_c::event_proc_call() {
typedef void (daObjDmElevator_c::*actionFunc)();
static actionFunc l_func[] = {
&daObjDmElevator_c::actionWait, &daObjDmElevator_c::actionOrderEvent,
&daObjDmElevator_c::actionEvent, &daObjDmElevator_c::actionStartEvent,
&daObjDmElevator_c::actionMoveStart, &daObjDmElevator_c::actionDead,
};
(this->*l_func[mAction])();
}
/* 80BDEECC-80BDEF60 00164C 0094+00 1/0 0/0 0/0 .text actionWait__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::actionWait() {
if (field_0x5e0 == 1) {
mAction = 4;
moveInit();
} else if (!dComIfGp_event_runCheck() && (field_0x62d != 0)) {
mAction = 1;
fopAcM_orderOtherEventId(this, mEventIndex, 0xff, 0xffff, 0, 1);
eventInfo.mCondition = eventInfo.mCondition | 2;
}
}
/* 80BDEF60-80BDF000 0016E0 00A0+00 1/0 0/0 0/0 .text actionOrderEvent__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionOrderEvent() {
if (eventInfo.mCommand == 2) {
mAction = 2;
field_0x5dc = dComIfGp_evmng_getMyStaffId(l_staffName, NULL, 0);
demoProc();
field_0x62d = 0;
} else {
fopAcM_orderOtherEventId(this, mEventIndex, 0xff, 0xffff, 0, 1);
eventInfo.mCondition = eventInfo.mCondition | 2;
}
}
/* 80BDF000-80BDF068 001780 0068+00 1/0 0/0 0/0 .text actionEvent__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::actionEvent() {
dEvent_manager_c& evt_manager = dComIfGp_getEventManager();
if (dComIfGp_evmng_endCheck(mEventIndex)) {
setAction(0);
dComIfGp_event_reset();
} else {
demoProc();
}
}
/* 80BDF068-80BDF0A0 0017E8 0038+00 1/0 0/0 0/0 .text actionStartEvent__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionStartEvent() {
if ( fopAcM_CheckStatus(this, 0x1000) != 0) {
demoProc();
} else {
mAction = 0;
}
}
/* 80BDF0A0-80BDF168 001820 00C8+00 1/0 0/0 0/0 .text actionMoveStart__17daObjDmElevator_cFv */
void daObjDmElevator_c::actionMoveStart() {
if (moveProc() != 0) {
dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0, 1.0, 0.0));
mAction = 0;
s8 i_reverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this));
mDoAud_seStart(Z2SE_OBJ_ELEVATOR_STOP, &eyePos, 0, i_reverb);
}
}
/* 80BDF168-80BDF16C 0018E8 0004+00 1/0 0/0 0/0 .text actionDead__17daObjDmElevator_cFv
*/
void daObjDmElevator_c::actionDead() {
/* empty function */
}
/* 80BDF16C-80BDF320 0018EC 01B4+00 3/3 0/0 0/0 .text demoProc__17daObjDmElevator_cFv */
int daObjDmElevator_c::demoProc() {
static char* action_table[2] = {
"WAIT",
"MOVE",
};
int actIdx =
dComIfGp_getEventManager().getMyActIdx(field_0x5dc, &action_table[0], 2, 0, 0); // r30
int isAddvance = dComIfGp_getEventManager().getIsAddvance(field_0x5dc); // r3
if (isAddvance != 0) {
switch (actIdx) {
case 0: {
int* psubstance =
(int*)dComIfGp_getEventManager().getMySubstanceP(field_0x5dc, "Timer", 3);
if (psubstance == NULL) {
field_0x5e3 = 1;
} else {
field_0x5e3 = (char)*psubstance;
}
break;
}
case 1: {
moveInit();
break;
}
}
}
switch (actIdx) {
case 0: {
if ((cLib_calcTimer(&field_0x5e3) & 0xff) == 0) {
dComIfGp_getEventManager().cutEnd(field_0x5dc);
}
break;
}
case 1: {
actIdx = moveProc();
if (actIdx != 0) {
actIdx = strcmp(dComIfGp_getStartStage()->getName(), "F_SP110");
if (actIdx == 0) {
dStage_changeScene(1, 0.0f, 0, (u8)current.roomNo, 0, -1);
break;
} else {
actIdx = strcmp(dComIfGp_getStartStage()->getName(), "R_SP110");
if (actIdx == 0) {
dStage_changeScene(2, 0.0, 0, (u8)current.roomNo, 0, -1);
}
}
}
break;
}
default: {
dComIfGp_getEventManager().cutEnd(field_0x5dc);
break;
}
}
return 0;
}
/* 80BDF320-80BDF3B8 001AA0 0098+00 2/2 0/0 0/0 .text moveInit__17daObjDmElevator_cFv */
void daObjDmElevator_c::moveInit() {
speedF = 0.0f;
if (field_0x5e0 == 0) {
s8 i_reverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this));
Z2AudioMgr::mAudioMgrPtr->seStart(Z2SE_OBJ_ELEVATOR_START, (Vec*)&eyePos, 0, i_reverb, 1.0,
1.0, -1.0, -1.0, 0);
}
}
/* 80BDF3B8-80BDF618 001B38 0260+00 2/2 0/0 0/0 .text moveProc__17daObjDmElevator_cFv */
int daObjDmElevator_c::moveProc() {
dPath* path = dPath_GetRoomPath(getPathID(), fopAcM_GetRoomNo(this));
dPnt* pdVar3 = dPath_GetPnt(path, field_0x5e0 + (char)field_0x5e1);
cXyz path_point(pdVar3->m_position);
if (path_point.y > current.pos.y) {
cLib_chaseF(&speedF, 10.0f, 1.0f);
} else {
cLib_chaseF(&speedF, -10.0f, 1.0f);
}
int uVar1 = cLib_chasePos(&current.pos, path_point, fabsf(speedF));
if (field_0x5e0 + (int)(char)field_0x5e1 == 1) {
const float fVar6 = current.pos.abs(path_point);
uVar1 = ((uint)(char)((fVar6 < 200.0f) << 3) << 0x1c) >> 0x1f;
}
int ret;
if (uVar1 != 0) {
if (field_0x5e0 + field_0x5e1 != 1) {
field_0x5e0 += field_0x5e1;
if (field_0x5e0 == 0) {
field_0x5e1 = 1;
} else {
field_0x5e1 = 0xff;
}
}
speedF = 0.0f;
ret = 1;
} else {
mSoundObj.startLevelSound(Z2SE_OBJ_ELEVATOR_MOVE, 0, -1);
ret = 0;
}
return ret;
}
/* 80BDF618-80BDF6DC 001D98 00C4+00 1/0 0/0 0/0 .text Draw__17daObjDmElevator_cFv */
int daObjDmElevator_c::Draw() {
g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mpSwitchModel, &tevStr);
g_env_light.setLightTevColorType_MAJI(mpElevatorModel, &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mpElevatorModel);
mDoExt_modelUpdateDL(mpSwitchModel);
dComIfGd_setList();
return 1;
}
/* 80BDF6DC-80BDF764 001E5C 0088+00 1/0 0/0 0/0 .text Delete__17daObjDmElevator_cFv */
int daObjDmElevator_c::Delete() {
mSoundObj.deleteObject();
if ((mpBgW != NULL) && mpBgW->ChkUsed()) {
g_dComIfG_gameInfo.play.mBgs.Release(mpBgW);
}
dComIfG_resDelete(&mPhaseReq, l_el_arcName);
dComIfG_resDelete(&mPhaseReq2, l_sw_arcName);
return 1;
}
/* 80BDF764-80BDF7D8 001EE4 0074+00 1/0 0/0 0/0 .text
* daObjDmElevator_create1st__FP17daObjDmElevator_c */
static int daObjDmElevator_create1st(daObjDmElevator_c* i_this) {
fopAcM_SetupActor(i_this, daObjDmElevator_c);
return i_this->create1st();
}
/* 80BDF7D8-80BDF7F8 001F58 0020+00 1/0 0/0 0/0 .text
* daObjDmElevator_MoveBGDelete__FP17daObjDmElevator_c */
static int daObjDmElevator_MoveBGDelete(daObjDmElevator_c* i_this) {
return i_this->MoveBGDelete();
}
/* 80BDF7F8-80BDF818 001F78 0020+00 1/0 0/0 0/0 .text
* daObjDmElevator_MoveBGExecute__FP17daObjDmElevator_c */
static int daObjDmElevator_MoveBGExecute(daObjDmElevator_c* i_this) {
return i_this->MoveBGExecute();
}
/* 80BDF818-80BDF844 001F98 002C+00 1/0 0/0 0/0 .text
* daObjDmElevator_MoveBGDraw__FP17daObjDmElevator_c */
static int daObjDmElevator_MoveBGDraw(daObjDmElevator_c* i_this) {
return i_this->MoveBGDraw();
}
/* 80BDFAB8-80BDFAD8 -00001 0020+00 1/0 0/0 0/0 .data daObjDmElevator_METHODS */
static actor_method_class daObjDmElevator_METHODS = {
(process_method_func)daObjDmElevator_create1st,
(process_method_func)daObjDmElevator_MoveBGDelete,
(process_method_func)daObjDmElevator_MoveBGExecute,
0,
(process_method_func)daObjDmElevator_MoveBGDraw,
};
/* 80BDFAD8-80BDFB08 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Elevator */
extern actor_process_profile_definition g_profile_Obj_Elevator = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_Elevator, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjDmElevator_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
542, // mPriority
&daObjDmElevator_METHODS, // sub_method
0x00044100, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80BDFBF0-80BDFBF4 0000C0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> */
AUDIO_INSTANCES;