tp/src/d/actor/d_a_obj_swBallC.cpp

484 lines
16 KiB
C++

//
// d_a_obj_swBallC
//
#include "d/actor/d_a_obj_swBallC.h"
#include "d/actor/d_a_obj_swBallB.h"
#include "d/actor/d_a_obj_carry.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "d/d_com_inf_game.h"
#include "d/d_meter2_info.h"
#include "d/d_item.h"
#include "d/actor/d_a_player.h"
#include "f_op/f_op_msg_mng.h"
#include "f_op/f_op_msg.h"
/* 80CF5B98-80CF5BB8 000078 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */
static int CheckCreateHeap(fopAc_ac_c* param_0) {
return ((daObjSwBallC_c*)param_0)->CreateHeap();
}
/* 80CF5BB8-80CF5C24 000098 006C+00 2/2 0/0 0/0 .text s_swb_sub__FPvPv */
static void* s_swb_sub(void* param_1, void* param_2) {
if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_Obj_SwBallB &&
(u32)((daObjSwBallB_c*)param_1)->getID() == ((daObjSwBallC_c*)param_2)->field_0x582)
{
return param_1;
}
return NULL;
}
/* 80CF5C24-80CF5C7C 000104 0058+00 2/2 0/0 0/0 .text s_ballA_sub__FPvPv */
static void* s_ballA_sub(void* param_1, void* param_2) {
if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_Obj_Carry &&
((daObjCarry_c*)param_1)->getType() == daObjCarry_c::TYPE_BALL_S)
{
return param_1;
}
return NULL;
}
/* 80CF5C7C-80CF5CD4 00015C 0058+00 2/2 0/0 0/0 .text s_ballB_sub__FPvPv */
static void* s_ballB_sub(void* param_1, void* param_2) {
if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_Obj_Carry &&
((daObjCarry_c*)param_1)->getType() == daObjCarry_c::TYPE_BALL_S_2)
{
return param_1;
}
return NULL;
}
/* 80CF5CD4-80CF5CF4 0001B4 0020+00 1/1 0/0 0/0 .text initBaseMtx__14daObjSwBallC_cFv */
void daObjSwBallC_c::initBaseMtx() {
setBaseMtx();
}
/* 80CF5CF4-80CF5D58 0001D4 0064+00 1/1 0/0 0/0 .text setBaseMtx__14daObjSwBallC_cFv */
void daObjSwBallC_c::setBaseMtx() {
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
mModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* ############################################################################################## */
/* 80CF6CD4-80CF6CD8 000000 0004+00 3/3 0/0 0/0 .rodata l_color */
static GXColor const l_color = {0x03, 0x96, 0xFF, 0xFF};
/* 80CF6D90-80CF6D9C 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80CF6D9C-80CF6DB0 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
#pragma push
#pragma force_active on
static u32 lit_1787[1 + 4 /* padding */] = {
0x02000201,
/* padding */
0x40080000,
0x00000000,
0x3FE00000,
0x00000000,
};
#pragma pop
/* 80CF6DB0-80CF6DB4 -00001 0004+00 4/4 0/0 0/0 .data l_arcName */
static char* l_arcName = "P_LBswBC";
/* 80CF6DB4-80CF6DB8 -00001 0004+00 1/1 0/0 0/0 .data l_evName */
static char* l_evName = "REVIVE_MASTER_SWORD";
static f32 dummyFloat() {
return -1.0f;
}
/* 80CF5D58-80CF5EF8 000238 01A0+00 1/1 0/0 0/0 .text Create__14daObjSwBallC_cFv */
int daObjSwBallC_c::Create() {
initBaseMtx();
fopAcM_SetMtx(this, mModel->getBaseTRMtx());
J3DJoint* joint = mModel->getModelData()->getJointNodePointer(0);
fopAcM_setCullSizeBox(this,
joint->getMin()->x, joint->getMin()->y, joint->getMin()->z,
joint->getMax()->x, joint->getMax()->y, joint->getMax()->z);
if (fopAcM_isSwitch(this, 0x3d) && fopAcM_isSwitch(this, 0x3e)) {
field_0x574->setPlaySpeed(1.0f);
field_0x574->setFrame(field_0x574->getEndFrame());
}
GXColor* color = mModel->getModelData()->getMaterialNodePointer(0)->getTevKColor(1);
color->r = l_color.r;
color->g = l_color.g;
color->b = l_color.b;
field_0x57e = -1;
eventInfo.setArchiveName(l_arcName);
field_0x57c = dComIfGp_getEventManager().getEventIdx(this, l_evName, 0xff);
if (fopAcM_isSwitch(this, 0x3f)) {
setLightOnSwB();
setAction(3);
}
execute();
return 1;
}
/* 80CF6DB8-80CF6DBC -00001 0004+00 1/1 0/0 0/0 .data l_staffName */
static char* l_staffName = "lbsw";
/* 80CF5EF8-80CF6024 0003D8 012C+00 1/1 0/0 0/0 .text CreateHeap__14daObjSwBallC_cFv */
int daObjSwBallC_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 6);
JUT_ASSERT(427, modelData != 0);
mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284);
if (mModel == 0) {
return 0;
}
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 10);
JUT_ASSERT(441, pbtk != 0);
field_0x574 = new mDoExt_btkAnm();
if (field_0x574 == NULL || field_0x574->init(modelData, pbtk, 1, 0, 1.0f, 0, -1) == 0) {
return 0;
}
field_0x574->setPlaySpeed(0.0f);
return 1;
}
/* 80CF606C-80CF6120 00054C 00B4+00 1/1 0/0 0/0 .text create__14daObjSwBallC_cFv */
int daObjSwBallC_c::create() {
fopAcM_SetupActor(this, daObjSwBallC_c);
int res = dComIfG_resLoad(&field_0x568, l_arcName);
if (res == cPhs_COMPLEATE_e) {
if (fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x960) == 0) {
return cPhs_ERROR_e;
} else if (Create() == 0) {
return cPhs_ERROR_e;
}
}
return res;
}
/* 80CF6120-80CF6144 000600 0024+00 2/2 0/0 0/0 .text execute__14daObjSwBallC_cFv */
int daObjSwBallC_c::execute() {
event_proc_call();
return 1;
}
/* 80CF6144-80CF6200 000624 00BC+00 1/2 0/0 0/0 .text event_proc_call__14daObjSwBallC_cFv
*/
void daObjSwBallC_c::event_proc_call() {
typedef void (daObjSwBallC_c::*ballfunc)();
static ballfunc l_func[4] = {&daObjSwBallC_c::actionWait, &daObjSwBallC_c::actionOrderEvent, &daObjSwBallC_c::actionEvent, &daObjSwBallC_c::actionDead};
(this->*l_func[field_0x57f])();
}
/* 80CF6E1C-80CF6E50 -00001 0034+00 1/1 0/0 0/0 .data action_table$3966 */
static char* action_table[13] = {
"WAIT", "ON", "OFF", "ON_ALL_B", "OFF_ALL_B", "DEL_BALL", "SOUND",
"SCALING", "INIT", "MESSAGE", "ST_CUT2", "LINK_INIT", "EQUIP_SWD",
};
/* 80CF6200-80CF629C 0006E0 009C+00 1/0 0/0 0/0 .text actionWait__14daObjSwBallC_cFv */
void daObjSwBallC_c::actionWait() {
if (fopAcM_isSwitch(this, 0x3d) && fopAcM_isSwitch(this, 0x3e)) {
setAction(1);
fopAcM_orderOtherEventId(this, field_0x57c, field_0x57e, 0xffff, 0, 1);
eventInfo.onCondition(2);
}
}
/* 80CF629C-80CF6344 00077C 00A8+00 1/0 0/0 0/0 .text actionOrderEvent__14daObjSwBallC_cFv */
void daObjSwBallC_c::actionOrderEvent() {
if (eventInfo.checkCommandDemoAccrpt()) {
setAction(2);
demoProc();
fopAcM_onSwitch(this, 0x3f);
dComIfGs_onTbox(10);
dComIfGs_onTbox(11);
} else {
fopAcM_orderOtherEventId(this, field_0x57c, field_0x57e, 0xffff, 0, 1);
eventInfo.onCondition(2);
}
}
/* 80CF6344-80CF63F0 000824 00AC+00 1/0 0/0 0/0 .text actionEvent__14daObjSwBallC_cFv */
void daObjSwBallC_c::actionEvent() {
if (dComIfGp_evmng_endCheck(field_0x57c)) {
setAction(3);
dComIfGp_event_reset();
fopAcM_onSwitch(this, 0x58);
for (int i = 0; i < 8; i++) {
fopAcM_onSwitch(this, i + 0x50);
}
} else {
demoProc();
}
}
/* 80CF63F0-80CF63F4 0008D0 0004+00 1/0 0/0 0/0 .text actionDead__14daObjSwBallC_cFv */
void daObjSwBallC_c::actionDead() {
/* empty function */
}
/* 80CF63F4-80CF6818 0008D4 0424+00 4/2 0/0 0/0 .text demoProc__14daObjSwBallC_cFv */
int daObjSwBallC_c::demoProc() {
daPy_py_c* player = daPy_getPlayerActorClass();
cXyz acStack_38;
int uVar1 = dComIfGp_evmng_getMyActIdx(field_0x578, action_table, 13, 0, 0);
field_0x578 = dComIfGp_evmng_getMyStaffId(l_staffName, NULL, 0);
player->onShieldBackBone();
if (dComIfGp_evmng_getIsAddvance(field_0x578)) {
switch (uVar1) {
case 0:
int* puVar4 = dComIfGp_evmng_getMyIntegerP(field_0x578, "Timer");
if (puVar4 == NULL) {
field_0x580 = 1;
} else {
field_0x580 = *puVar4;
}
break;
case 1:
field_0x574->setPlaySpeed(1.0f);
break;
case 2:
field_0x574->setPlaySpeed(-1.0f);
break;
case 3:
setLightOnSwB();
break;
case 4:
setLightOffSwB();
break;
case 5:
deleteLightBall();
break;
case 6:
fopAcM_seStart(this, Z2SE_OBJ_L_SWD_DEMO, 0);
break;
case 8:
Z2GetAudioMgr()->bgmStreamPrepare(0x200005e);
field_0x585 = 0x37;
setLightOnSwB();
dMeter2Info_setSword(0x29, 0);
break;
case 11:
player->changeOriginalDemo();
field_0x580 = 2;
acStack_38.set(262.5f, -188.0f, 10712.5f);
player->setPlayerPosAndAngle(&acStack_38, 0, 0);
player->changeDemoMode(4, 1, 0, 0);
break;
case 12:
player->changeOriginalDemo();
field_0x580 = 2;
player->changeDemoMode(4, 1, 0, 0);
break;
case 9:
field_0x588 = -1;
break;
case 10:
field_0x584 = 1;
execItemGet(fpcNm_ITEM_LIGHT_SWORD);
break;
}
}
if (field_0x584 != 0) {
player->onLightSwordGetEffect();
}
switch (uVar1) {
case 0:
if (cLib_calcTimer(&field_0x580) == 0) {
dComIfGp_evmng_cutEnd(field_0x578);
}
break;
case 1:
case 2:
if (field_0x574->play() != 0) {
dComIfGp_evmng_cutEnd(field_0x578);
}
break;
case 3:
case 4:
dComIfGp_evmng_cutEnd(field_0x578);
break;
case 7:
if (calcLightBallScale() != 0) {
deleteLightBall();
dComIfGp_evmng_cutEnd(field_0x578);
}
break;
case 9:
if (field_0x588 == -1) {
field_0x588 = fopMsgM_messageSet(0xae, 1000);
} else {
msg_class* msg = fopMsgM_SearchByID(field_0x588);
if (msg != NULL) {
if (msg->mode == 0xe) {
msg->mode = 0x10;
} else if (msg->mode == 0x12) {
msg->mode = 0x13;
dComIfGp_evmng_cutEnd(field_0x578);
}
}
}
break;
case 11:
case 12:
if (cLib_calcTimer(&field_0x580) == 0) {
player->cancelOriginalDemo();
dComIfGp_evmng_cutEnd(field_0x578);
}
break;
default:
dComIfGp_evmng_cutEnd(field_0x578);
break;
}
if (field_0x585 >= 0) {
field_0x585--;
if (field_0x585 == 0) {
Z2GetAudioMgr()->bgmStreamPlay();
}
}
return 0;
}
/* 80CF6818-80CF6888 000CF8 0070+00 2/2 0/0 0/0 .text setLightOnSwB__14daObjSwBallC_cFv
*/
void daObjSwBallC_c::setLightOnSwB() {
for (u8 i = 0; i < 6; i++) {
field_0x582 = i;
daObjSwBallB_c* ball = (daObjSwBallB_c*)fpcM_Search(s_swb_sub, this);
if (ball != NULL) {
ball->setLightOn();
}
}
}
/* 80CF6888-80CF68F8 000D68 0070+00 1/1 0/0 0/0 .text setLightOffSwB__14daObjSwBallC_cFv
*/
void daObjSwBallC_c::setLightOffSwB() {
for (u8 i = 0; i < 6; i++) {
field_0x582 = i;
daObjSwBallB_c* ball = (daObjSwBallB_c*)fpcM_Search(s_swb_sub, this);
if (ball != NULL) {
ball->setLightOff();
}
}
}
/* 80CF68F8-80CF692C 000DD8 0034+00 1/1 0/0 0/0 .text deleteLightBall__14daObjSwBallC_cFv
*/
void daObjSwBallC_c::deleteLightBall() {
deleteLightBallA();
deleteLightBallB();
}
/* 80CF692C-80CF6964 000E0C 0038+00 1/1 0/0 0/0 .text deleteLightBallA__14daObjSwBallC_cFv */
void daObjSwBallC_c::deleteLightBallA() {
fopAc_ac_c* ball = (fopAc_ac_c*)fpcM_Search(s_ballA_sub, this);
if (ball != NULL) {
fopAcM_delete(ball);
}
}
/* 80CF6964-80CF699C 000E44 0038+00 1/1 0/0 0/0 .text deleteLightBallB__14daObjSwBallC_cFv */
void daObjSwBallC_c::deleteLightBallB() {
fopAc_ac_c* ball = (fopAc_ac_c*)fpcM_Search(s_ballB_sub, this);
if (ball != NULL) {
fopAcM_delete(ball);
}
}
/* 80CF699C-80CF6A74 000E7C 00D8+00 1/1 0/0 0/0 .text calcLightBallScale__14daObjSwBallC_cFv */
int daObjSwBallC_c::calcLightBallScale() {
int uVar3 = 0;
fopAc_ac_c* ball = (fopAc_ac_c*)fpcM_Search(s_ballA_sub, this);
if (ball != NULL) {
fopAcM_OnStatus(ball, 0x800);
uVar3 = cLib_chaseF(&ball->scale.x, 0.0f, 0.05f);
ball->scale.y = ball->scale.x;
ball->scale.z = ball->scale.x;
}
ball = (fopAc_ac_c*)fpcM_Search(s_ballB_sub, this);
if (ball != NULL) {
fopAcM_OnStatus(ball, 0x800);
uVar3 &= cLib_chaseF(&ball->scale.x, 0.0f, 0.05f);
ball->scale.y = ball->scale.x;
ball->scale.z = ball->scale.x;
}
return uVar3;
}
/* 80CF6A74-80CF6BFC 000F54 0188+00 1/1 0/0 0/0 .text draw__14daObjSwBallC_cFv */
int daObjSwBallC_c::draw() {
g_env_light.settingTevStruct(0, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mModel, &tevStr);
dComIfGd_setListDarkBG();
J3DMaterial* material = mModel->getModelData()->getMaterialNodePointer(0);
if (material->getTexGenBlock()->getTexMtx(1) != NULL) {
J3DTexMtxInfo* texMtxInfo = &material->getTexGenBlock()->getTexMtx(1)->getTexMtxInfo();
if (texMtxInfo != NULL) {
Mtx auStack_48;
C_MTXLightOrtho(auStack_48, 100.0f, -100.0f, -100.0f, 100.0f, 1.0f, 1.0f, 0.0f, 0.0f);
mDoMtx_stack_c::XrotS(0x4000);
mDoMtx_stack_c::transM(-current.pos.x, -current.pos.y, -current.pos.z);
cMtx_concat(auStack_48, mDoMtx_stack_c::get(), texMtxInfo->mEffectMtx);
}
}
field_0x574->entry(mModel->getModelData());
mDoExt_modelUpdateDL(mModel);
mDoExt_btkAnmRemove(mModel->getModelData());
dComIfGd_setList();
return 1;
}
/* 80CF6BFC-80CF6C30 0010DC 0034+00 1/1 0/0 0/0 .text _delete__14daObjSwBallC_cFv */
int daObjSwBallC_c::_delete() {
dComIfG_resDelete(&field_0x568, l_arcName);
return 1;
}
/* 80CF6C30-80CF6C50 001110 0020+00 1/0 0/0 0/0 .text daObjSwBallC_Draw__FP14daObjSwBallC_c */
static int daObjSwBallC_Draw(daObjSwBallC_c* param_0) {
return param_0->draw();
}
/* 80CF6C50-80CF6C70 001130 0020+00 1/0 0/0 0/0 .text daObjSwBallC_Execute__FP14daObjSwBallC_c */
static int daObjSwBallC_Execute(daObjSwBallC_c* param_0) {
return param_0->execute();
}
/* 80CF6C70-80CF6C90 001150 0020+00 1/0 0/0 0/0 .text daObjSwBallC_Delete__FP14daObjSwBallC_c */
static int daObjSwBallC_Delete(daObjSwBallC_c* param_0) {
return param_0->_delete();
}
/* 80CF6C90-80CF6CB0 001170 0020+00 1/0 0/0 0/0 .text daObjSwBallC_Create__FP14daObjSwBallC_c */
static int daObjSwBallC_Create(daObjSwBallC_c* param_0) {
return param_0->create();
}
/* 80CF6EB8-80CF6ED8 -00001 0020+00 1/0 0/0 0/0 .data l_daObjSwBallC_Method */
static actor_method_class l_daObjSwBallC_Method = {
(process_method_func)daObjSwBallC_Create,
(process_method_func)daObjSwBallC_Delete,
(process_method_func)daObjSwBallC_Execute,
(process_method_func)NULL,
(process_method_func)daObjSwBallC_Draw,
};
/* 80CF6ED8-80CF6F08 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SwBallC */
extern actor_process_profile_definition g_profile_Obj_SwBallC = {
fpcLy_CURRENT_e,
7,
fpcPi_CURRENT_e,
PROC_Obj_SwBallC,
&g_fpcLf_Method.base,
sizeof(daObjSwBallC_c),
0,
0,
&g_fopAc_Method.base,
0x246,
&l_daObjSwBallC_Method,
0x40100,
fopAc_ACTOR_e,
fopAc_CULLBOX_CUSTOM_e,
};