mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-26 15:24:30 -04:00
a7b3a24ea4
* npc_hoz done * pr * remove include
2539 lines
80 KiB
C++
2539 lines
80 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: d_a_obj_sekizoa
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
|
|
#include "d/actor/d_a_obj_sekizoa.h"
|
|
#include "Z2AudioLib/Z2Instances.h"
|
|
#include "d/actor/d_a_obj_sekidoor.h"
|
|
#include "d/actor/d_a_obj_smtile.h"
|
|
#include "d/actor/d_a_tag_evtarea.h"
|
|
#include "d/actor/d_a_tag_kmsg.h"
|
|
#include "dolphin/types.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "f_op/f_op_msg.h"
|
|
|
|
|
|
/* 80CD5EF8-80CD5F40 000020 0048+00 1/1 0/0 0/0 .data l_bmdData */
|
|
static daNpc_GetParam1 l_bmdData[9] = {
|
|
{36, 1}, {36, 1}, {35, 1}, {37, 1}, {38, 1}, {3, 2}, {3, 2}, {4, 2}, {5, 2},
|
|
};
|
|
|
|
/* 80CD5F40-80CD5F90 -00001 0050+00 3/4 0/0 0/0 .data l_evtList */
|
|
static daNpcT_evtData_c l_evtList[10] = {
|
|
{"", 1}, {"NO_RESPONSE", 1}, {"START", 1}, {"RESTART", 1}, {"TURN", 1},
|
|
{"JUMP", 1}, {"GOAL", 1}, {"EXIT", 1}, {"FREE", 1}, {"EXTINCTION", 1},
|
|
};
|
|
|
|
/* 80CD5F90-80CD5F9C -00001 000C+00 3/4 0/0 0/0 .data l_resNameList */
|
|
static char* l_resNameList[3] = {
|
|
"",
|
|
"sekizoA",
|
|
"seki_1k",
|
|
};
|
|
|
|
/* 80CD5F9C-80CD5FA0 0000C4 0002+02 1/0 0/0 0/0 .data l_loadResPtrn0 */
|
|
static s8 l_loadResPtrn0[2] = {
|
|
0x01,
|
|
0xFF,
|
|
};
|
|
|
|
/* 80CD5FA0-80CD5FA4 0000C8 0003+01 1/0 0/0 0/0 .data l_loadResPtrn1 */
|
|
static s8 l_loadResPtrn1[3] = {
|
|
0x01,
|
|
0x02,
|
|
0xFF,
|
|
};
|
|
|
|
/* 80CD5FA4-80CD5FC4 -00001 0020+00 1/2 0/0 0/0 .data l_loadResPtrnList */
|
|
static s8* l_loadResPtrnList[8] = {
|
|
l_loadResPtrn0, l_loadResPtrn0, l_loadResPtrn0, l_loadResPtrn0,
|
|
l_loadResPtrn1, l_loadResPtrn1, l_loadResPtrn1, l_loadResPtrn1,
|
|
};
|
|
|
|
/* 80CD5FC4-80CD5FE0 0000EC 001C+00 0/1 0/0 0/0 .data l_faceMotionAnmData */
|
|
static daNpcT_faceMotionAnmData_c l_faceMotionAnmData = {
|
|
-1, 0, 0, -1, 0, 0, 0,
|
|
};
|
|
|
|
/* 80CD5FE0-80CD6280 000108 02A0+00 0/1 0/0 0/0 .data l_motionAnmData */
|
|
static daNpcT_motionAnmData_c l_motionAnmData[24] = {
|
|
{daObj_Sekizoa_c::ANM_SEKI_WAIT_A, 2, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_WAIT_R, 2, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_STILL_R, 2, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_R_DEMO, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_R_LASTDEMO, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_WAIT_GAME_R, 2, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_HIT_R, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKIR_JUMP, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKIR_JUMP, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKIR_JUMP, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_NO_JUMP_R, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_STEP_R, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_WAIT_L, 2, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_STILL_L, 2, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_L_DEMO, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_L_LASTDEMO, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_WAIT_GAME_L, 2, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_HIT_L, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKIL_JUMP, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKIL_JUMP, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKIL_JUMP, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_NO_JUMP_L, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_STEP_L, 0, 1, -1, 0, 0, 0},
|
|
{daObj_Sekizoa_c::ANM_SEKI_WAIT_A, 2, 1, -1, 0, 0, 0}};
|
|
|
|
/* 80CD6280-80CD6290 0003A8 0010+00 0/1 0/0 0/0 .data l_faceMotionSequenceData */
|
|
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[4] = {
|
|
{0, -1, 0},
|
|
{-1, 0, 0},
|
|
{-1, 0, 0},
|
|
{-1, 0, 0},
|
|
};
|
|
|
|
/* 80CD6290-80CD6410 0003B8 0180+00 0/1 0/0 0/0 .data l_motionSequenceData */
|
|
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[96] = {
|
|
{0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {1, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{-1, 0, 0}, {2, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {3, -1, 1}, {-1, 0, 0},
|
|
{-1, 0, 0}, {-1, 0, 0}, {4, -1, 1}, {2, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {5, -1, 0},
|
|
{-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {6, 0, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{7, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {8, 0, 1}, {-1, 0, 0}, {-1, 0, 0},
|
|
{-1, 0, 0}, {9, 4, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {10, -1, 1}, {-1, 0, 0},
|
|
{-1, 0, 0}, {-1, 0, 0}, {11, 4, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {12, -1, 0},
|
|
{-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {13, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{14, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {15, -1, 1}, {13, 0, 0}, {-1, 0, 0},
|
|
{-1, 0, 0}, {16, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {17, 0, 1}, {-1, 0, 0},
|
|
{-1, 0, 0}, {-1, 0, 0}, {18, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {19, 0, 1},
|
|
{-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {20, 4, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{21, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {22, 4, 1}, {-1, 0, 0}, {-1, 0, 0},
|
|
{-1, 0, 0}, {23, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}};
|
|
|
|
/* 80CD6410-80CD6434 -00001 0024+00 1/1 0/0 0/0 .data mCutNameList__15daObj_Sekizoa_c */
|
|
char* daObj_Sekizoa_c::mCutNameList[9] = {
|
|
"", "START", "START", "TURN", "JUMP", "GOAL", "EXIT", "FREE", "EXTINCTION",
|
|
};
|
|
|
|
/* 80CD6494-80CD6500 0005BC 006C+00 1/2 0/0 0/0 .data mCutList__15daObj_Sekizoa_c */
|
|
daObj_Sekizoa_c::cutFunc daObj_Sekizoa_c::mCutList[9] = {
|
|
NULL,
|
|
&daObj_Sekizoa_c::cutStart,
|
|
&daObj_Sekizoa_c::cutStart,
|
|
&daObj_Sekizoa_c::cutTurn,
|
|
&daObj_Sekizoa_c::cutJump,
|
|
&daObj_Sekizoa_c::cutGoal,
|
|
&daObj_Sekizoa_c::cutExit,
|
|
&daObj_Sekizoa_c::cutFree,
|
|
&daObj_Sekizoa_c::cutExtinction,
|
|
};
|
|
|
|
/* 80CD692C-80CD6938 000054 000C+00 3/4 0/0 0/0 .bss l_srcPosR */
|
|
static cXyz l_srcPosR(-600.0f, 1000.0f, 1800.0f);
|
|
|
|
/* 80CD6944-80CD6950 00006C 000C+00 3/4 0/0 0/0 .bss l_srcPosL */
|
|
static cXyz l_srcPosL(600.0f, 1000.0f, 1800.0f);
|
|
|
|
daObj_Sekizoa_Param_c::Data const daObj_Sekizoa_Param_c::m = {
|
|
600.0, -10.0, 1.0, 1100.0, 255.0, 550.0, 100.0, 70.0, 0.0, 0.0, 30.0, 0.0, 30.0, -30.0,
|
|
45.0, -45.0, 0.6, 8.0, 0x3, 0x6, 0x5, 0x6, 0.0, 0.0, 0.0, 0.0, 0x3C0008, 0.0,
|
|
0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 600.0, 30.0, 0.004, 0,
|
|
};
|
|
|
|
/* 80CCE34C-80CCE570 0000EC 0224+00 1/0 0/0 0/0 .text __dt__15daObj_Sekizoa_cFv */
|
|
daObj_Sekizoa_c::~daObj_Sekizoa_c() {
|
|
if (mpMorf[0] != NULL) {
|
|
mpMorf[0]->stopZelAnime();
|
|
}
|
|
if (mpMcaMorf != NULL) {
|
|
mpMcaMorf->stopZelAnime();
|
|
}
|
|
if (mpMorf[1] != NULL) {
|
|
mpMorf[1]->stopZelAnime();
|
|
}
|
|
if (mType == TYPE_0) {
|
|
if (daNpcT_chkTmpBit(0x31)) {
|
|
mDoAud_subBgmStop();
|
|
}
|
|
}
|
|
deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CCE570-80CCE8B0 000310 0340+00 1/1 0/0 0/0 .text create__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::create() {
|
|
static u32 const heapSize[8] = {
|
|
0x2390, 0x2380, 0x2390, 0x2380, 0x2350, 0x2340, 0x33E0, 0,
|
|
};
|
|
|
|
daNpcT_ct(this, daObj_Sekizoa_c, &l_faceMotionAnmData, l_motionAnmData,
|
|
l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList,
|
|
l_resNameList);
|
|
|
|
mType = getType();
|
|
mTwilight = 0;
|
|
|
|
int ret = loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
|
|
if (ret == cPhs_COMPLEATE_e) {
|
|
if (isDelete()) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
if (fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType]) == 0) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
J3DModelData* mpModelData = mpMorf[0]->getModel()->getModelData();
|
|
fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox2(this, mpModelData);
|
|
mSound.init(¤t.pos, &eyePos, 3, 1);
|
|
reset();
|
|
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1,
|
|
&mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this),
|
|
fopAcM_GetShapeAngle_p(this));
|
|
mCcStts.Init(daObj_Sekizoa_Param_c::m.field_0x10, 0,
|
|
this);
|
|
|
|
mCyl.Set(mCcDCyl);
|
|
mCyl.SetStts(&mCcStts);
|
|
mCyl.SetTgHitCallback(tgHitCallBack);
|
|
|
|
mCyl2.Set(mCcDCyl);
|
|
mCyl2.SetStts(&mCcStts);
|
|
mCyl2.SetTgHitCallback(tgHitCallBack);
|
|
|
|
mAcch.CrrPos(dComIfG_Bgsp());
|
|
mGndChk = mAcch.m_gnd;
|
|
mGroundH = mAcch.GetGroundH();
|
|
if (mGroundH != -1.0e9f) {
|
|
setEnvTevColor();
|
|
setRoomNo();
|
|
}
|
|
mCreating = true;
|
|
Execute();
|
|
mCreating = false;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CCE8B0-80CCEC54 000650 03A4+00 1/1 0/0 0/0 .text CreateHeap__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::CreateHeap() {
|
|
J3DModelData* modelData;
|
|
int arcIdx;
|
|
int fileIdx;
|
|
|
|
int bmd_idx = 0;
|
|
switch (mType) {
|
|
case TYPE_4:
|
|
case TYPE_5:
|
|
bmd_idx = 5;
|
|
break;
|
|
case TYPE_6:
|
|
bmd_idx = 2;
|
|
break;
|
|
}
|
|
|
|
arcIdx = l_bmdData[bmd_idx].arcIdx;
|
|
fileIdx = l_bmdData[bmd_idx].fileIdx;
|
|
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_resNameList[arcIdx], fileIdx));
|
|
if (modelData == NULL) {
|
|
return 0;
|
|
}
|
|
mpMorf[0] = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound,
|
|
0x80000, 0x11000284);
|
|
|
|
if (mpMorf[0] == NULL || mpMorf[0]->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
if (mType == TYPE_6) {
|
|
int success_create = mInvModel.create(mpMorf[0]->getModel(), 1);
|
|
if (success_create == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mpMorf[1] = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1,
|
|
&mSound, 0x80000, 0x11000284);
|
|
if (mpMorf[1] == NULL || mpMorf[1]->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
} else {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
bmd_idx = 3;
|
|
break;
|
|
case TYPE_1:
|
|
bmd_idx = 4;
|
|
break;
|
|
case TYPE_2:
|
|
bmd_idx = 3;
|
|
break;
|
|
case TYPE_3:
|
|
bmd_idx = 4;
|
|
break;
|
|
case TYPE_4:
|
|
bmd_idx = 7;
|
|
break;
|
|
case TYPE_5:
|
|
bmd_idx = 8;
|
|
break;
|
|
default:
|
|
bmd_idx = 3;
|
|
break;
|
|
}
|
|
arcIdx = l_bmdData[bmd_idx].arcIdx;
|
|
fileIdx = l_bmdData[bmd_idx].fileIdx;
|
|
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_resNameList[arcIdx], fileIdx));
|
|
if (modelData == NULL) {
|
|
return 0;
|
|
}
|
|
mpMcaMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, NULL,
|
|
0x80000, 0x11000284);
|
|
if (mpMcaMorf == NULL || mpMcaMorf->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (mType == TYPE_6) {
|
|
if (setFaceMotionAnm(0, false) && setMotionAnm(0x17, 0.0f, 0)) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
} else {
|
|
if (setFaceMotionAnm(0, false) && setMotionAnm(0, 0.0f, 0)) {
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80CCEC54-80CCEC88 0009F4 0034+00 1/1 0/0 0/0 .text Delete__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::Delete() {
|
|
this->~daObj_Sekizoa_c();
|
|
return 1;
|
|
}
|
|
|
|
/* 80CCEC88-80CCECA8 000A28 0020+00 2/2 0/0 0/0 .text Execute__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::Execute() {
|
|
return execute();
|
|
}
|
|
|
|
/* 80CCECA8-80CCED74 000A48 00CC+00 1/1 0/0 0/0 .text Draw__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::Draw() {
|
|
daNpcT_MatAnm_c* mat_anm = mpMatAnm[0];
|
|
if (mat_anm != NULL) {
|
|
J3DModelData* this_01 = mpMorf[0]->getModel()->getModelData();
|
|
J3DMaterial* mpNodePtr = this_01->getMaterialNodePointer(getEyeballMaterialNo());
|
|
mpNodePtr->setMaterialAnm(mat_anm);
|
|
}
|
|
|
|
int temp_int = 0;
|
|
if (mType == TYPE_2 || mType == TYPE_3 || mType == TYPE_4 || mType == TYPE_5 || mType == TYPE_6)
|
|
{
|
|
temp_int = 1;
|
|
}
|
|
return daNpcT_c::draw(0, 0, mRealShadowSize, NULL, 0.0f, temp_int, (mType == TYPE_6), 0);
|
|
}
|
|
|
|
/* 80CCED74-80CCED94 000B14 0020+00 1/1 0/0 0/0 .text
|
|
* createHeapCallBack__15daObj_Sekizoa_cFP10fopAc_ac_c */
|
|
int daObj_Sekizoa_c::createHeapCallBack(fopAc_ac_c* i_this) {
|
|
static_cast<daObj_Sekizoa_c*>(i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 80CCED94-80CCEE30 000B34 009C+00 1/1 0/0 0/0 .text srchSekizoa__15daObj_Sekizoa_cFPvPv
|
|
*/
|
|
void* daObj_Sekizoa_c::srchSekizoa(void* i_actor, void* i_this) {
|
|
if (mFindCount < 50 && i_actor != NULL && i_actor != i_this) {
|
|
if (fopAcM_IsExecuting(fopAcM_GetID(i_actor)) && fopAcM_GetName(i_actor) == PROC_OBJ_SEKIZOA) {
|
|
mFindActorPtrs[mFindCount] = (fopAc_ac_c*)i_actor;
|
|
mFindCount++;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CCEE30-80CCEFA4 000BD0 0174+00 1/1 0/0 0/0 .text getSekizoaP__15daObj_Sekizoa_cFi */
|
|
fopAc_ac_c* daObj_Sekizoa_c::getSekizoaP(int param_0) {
|
|
fopAc_ac_c* actor = NULL;
|
|
f32 minDistance = 1.0e9f;
|
|
mFindCount = 0;
|
|
daObj_Sekizoa_c* pfVar4 = (daObj_Sekizoa_c*)fopAcM_Search(srchSekizoa, this);
|
|
for (int i = 0; i < mFindCount; i++) {
|
|
pfVar4 = (daObj_Sekizoa_c*)mFindActorPtrs[i];
|
|
if (param_0 == pfVar4->getType() &&
|
|
fopAcM_searchActorDistance(this, pfVar4) < minDistance)
|
|
{
|
|
minDistance = fopAcM_searchActorDistance(this, mFindActorPtrs[i]);
|
|
actor = mFindActorPtrs[i];
|
|
}
|
|
}
|
|
return actor;
|
|
}
|
|
|
|
/* 80CCEFA4-80CCF03C 000D44 0098+00 1/1 0/0 0/0 .text getKMsgTagP__15daObj_Sekizoa_cFv */
|
|
fopAc_ac_c* daObj_Sekizoa_c::getKMsgTagP() {
|
|
mFindCount = 0;
|
|
mSrchName = 0x2eb;
|
|
fopAcM_Search((fopAcIt_JudgeFunc)srchActor, this);
|
|
for (int i = 0; i < mFindCount; i++) {
|
|
if (((daTag_KMsg_c*)mFindActorPtrs[i])->getType() == daTag_KMsg_c::KMSG_TYPE_3) {
|
|
return mFindActorPtrs[i];
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 80CCF03C-80CCF138 000DDC 00FC+00 1/1 0/0 0/0 .text isDelete__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::isDelete() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
case TYPE_1:
|
|
bool ret = false;
|
|
if (getBitSW2() != 0xFF) {
|
|
if (dComIfGs_isSwitch(getBitSW2(), fopAcM_GetRoomNo(this))) {
|
|
ret = true;
|
|
}
|
|
}
|
|
return ret;
|
|
case TYPE_2:
|
|
return false;
|
|
case TYPE_3:
|
|
return false;
|
|
case TYPE_4:
|
|
return false;
|
|
case TYPE_5:
|
|
return false;
|
|
case TYPE_6:
|
|
ret = false;
|
|
if (getBitSW() != 0xFF) {
|
|
if (dComIfGs_isSwitch(getBitSW(), fopAcM_GetRoomNo(this))) {
|
|
ret = true;
|
|
}
|
|
}
|
|
return ret;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 80CCF138-80CCF358 000ED8 0220+00 2/1 0/0 0/0 .text reset__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::reset() {
|
|
csXyz temp_angle;
|
|
int iVar1 = (u8*)&field_0x117C - (u8*)&mInitFunc;
|
|
|
|
if (mpMatAnm[0] != NULL) {
|
|
mpMatAnm[0]->initialize();
|
|
}
|
|
initialize();
|
|
for (int i = 0; i < 8; i++) {
|
|
mActorMngrs[i].initialize();
|
|
}
|
|
memset(&mInitFunc, 0, iVar1);
|
|
temp_angle.setall(0.0f);
|
|
temp_angle.y = home.angle.y;
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
if (daNpcT_chkTmpBit(0x31)) {
|
|
daNpcT_offTmpBit(0x31);
|
|
mSetWolfHowling = true;
|
|
}
|
|
eventInfo.setIdx(0);
|
|
mHide = true;
|
|
break;
|
|
|
|
case TYPE_1:
|
|
eventInfo.setIdx(0);
|
|
mHide = true;
|
|
break;
|
|
|
|
case TYPE_2:
|
|
eventInfo.setIdx(1);
|
|
break;
|
|
|
|
case TYPE_3:
|
|
eventInfo.setIdx(1);
|
|
break;
|
|
|
|
case TYPE_4:
|
|
eventInfo.setIdx(1);
|
|
break;
|
|
|
|
case TYPE_5:
|
|
eventInfo.setIdx(1);
|
|
break;
|
|
|
|
case TYPE_6:
|
|
eventInfo.setIdx(2);
|
|
}
|
|
mReset = true;
|
|
setAngle(temp_angle);
|
|
}
|
|
|
|
/* 80CCF358-80CCF3E4 0010F8 008C+00 1/0 0/0 0/0 .text afterJntAnm__15daObj_Sekizoa_cFi */
|
|
void daObj_Sekizoa_c::afterJntAnm(int param_0) {
|
|
if (param_0 == 1) {
|
|
mDoMtx_stack_c::YrotM(mStagger.getAngleZ(1));
|
|
mDoMtx_stack_c::ZrotM(-mStagger.getAngleX(1));
|
|
} else if (param_0 == 3) {
|
|
mDoMtx_stack_c::YrotM(-mStagger.getAngleZ(0));
|
|
mDoMtx_stack_c::ZrotM(mStagger.getAngleX(0));
|
|
}
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CCF3E4-80CCF6BC 001184 02D8+00 1/0 0/0 0/0 .text setParam__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::setParam() {
|
|
selectAction();
|
|
srchActors();
|
|
attention_info.distances[fopAc_attn_LOCK_e] = 0x12;
|
|
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
|
|
attention_info.distances[fopAc_attn_SPEAK_e] = 0x13;
|
|
attention_info.flags = 0;
|
|
scale.set(daObj_Sekizoa_Param_c::m.field_0x08, daObj_Sekizoa_Param_c::m.field_0x08,
|
|
daObj_Sekizoa_Param_c::m.field_0x08);
|
|
mCcStts.SetWeight(daObj_Sekizoa_Param_c::m.field_0x10);
|
|
mCylH = daObj_Sekizoa_Param_c::m.field_0x14;
|
|
mWallR = daObj_Sekizoa_Param_c::m.field_0x1C;
|
|
mAttnFovY = daObj_Sekizoa_Param_c::m.field_0x50;
|
|
|
|
mAcchCir.SetWallR(mWallR);
|
|
mAcchCir.SetWallH(daObj_Sekizoa_Param_c::m.field_0x18);
|
|
mRealShadowSize = daObj_Sekizoa_Param_c::m.field_0x0C;
|
|
mExpressionMorfFrame = daObj_Sekizoa_Param_c::m.field_0x6C;
|
|
mMorfFrames = daObj_Sekizoa_Param_c::m.field_0x44;
|
|
gravity = daObj_Sekizoa_Param_c::m.field_0x04;
|
|
|
|
if (mType == TYPE_2 || mType == TYPE_3) {
|
|
gravity = 0.0f;
|
|
}
|
|
if (mReset != 0) {
|
|
cXyz cStack_24;
|
|
csXyz cStack_38;
|
|
cStack_38.setall(0);
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
cStack_24 = l_srcPosL;
|
|
} else {
|
|
cStack_24 = l_srcPosR;
|
|
}
|
|
break;
|
|
|
|
case TYPE_1:
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
cStack_24 = l_srcPosR;
|
|
} else {
|
|
cStack_24 = l_srcPosL;
|
|
}
|
|
break;
|
|
|
|
case TYPE_2:
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
cStack_24 = l_srcPosL;
|
|
} else {
|
|
cStack_24 = l_srcPosR;
|
|
}
|
|
break;
|
|
|
|
case TYPE_3:
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
cStack_24 = l_srcPosR;
|
|
} else {
|
|
cStack_24 = l_srcPosL;
|
|
}
|
|
break;
|
|
|
|
case TYPE_4:
|
|
case TYPE_5:
|
|
mReset = 0;
|
|
break;
|
|
|
|
default:
|
|
mReset = 0;
|
|
}
|
|
if (mReset != 0) {
|
|
setPos(cStack_24);
|
|
setAngle(cStack_38.y);
|
|
mReset = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80CCF6BC-80CCF704 00145C 0048+00 1/0 0/0 0/0 .text checkChangeEvt__15daObj_Sekizoa_cFv
|
|
*/
|
|
BOOL daObj_Sekizoa_c::checkChangeEvt() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mEvtNo = 7;
|
|
evtChange();
|
|
return 1;
|
|
case TYPE_1:
|
|
case TYPE_2:
|
|
case TYPE_3:
|
|
case TYPE_4:
|
|
case TYPE_5:
|
|
case TYPE_6:
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* 80CCF704-80CCF708 0014A4 0004+00 1/0 0/0 0/0 .text setAfterTalkMotion__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::setAfterTalkMotion() {
|
|
/* empty function */
|
|
}
|
|
|
|
/* 80CCF708-80CCF9A8 0014A8 02A0+00 1/1 0/0 0/0 .text srchActors__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::srchActors() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
if (mActorMngrs[1].getActorP() == NULL) {
|
|
mActorMngrs[1].entry(getSekizoaP(2));
|
|
}
|
|
if (mActorMngrs[2].getActorP() == NULL) {
|
|
mActorMngrs[2].entry(getSekizoaP(3));
|
|
}
|
|
if (mActorMngrs[3].getActorP() == NULL) {
|
|
mActorMngrs[3].entry(getSekizoaP(1));
|
|
}
|
|
if (mActorMngrs[4].getActorP() == NULL) {
|
|
mActorMngrs[4].entry(getNearestActorP(0x134));
|
|
}
|
|
if (mActorMngrs[5].getActorP() == NULL) {
|
|
mActorMngrs[5].entry(getEvtAreaTagP(1, 0));
|
|
}
|
|
if (mActorMngrs[6].getActorP() == NULL) {
|
|
mActorMngrs[6].entry(getEvtAreaTagP(1, 1));
|
|
}
|
|
if (mActorMngrs[7].getActorP() == NULL) {
|
|
mActorMngrs[7].entry(getNearestActorP(0x132));
|
|
}
|
|
return;
|
|
|
|
case TYPE_1:
|
|
if (mActorMngrs[3].getActorP() == NULL) {
|
|
mActorMngrs[3].entry(getSekizoaP(0));
|
|
}
|
|
if (mActorMngrs[4].getActorP() == NULL) {
|
|
mActorMngrs[4].entry(getNearestActorP(0x134));
|
|
}
|
|
if (mActorMngrs[5].getActorP() == NULL) {
|
|
mActorMngrs[5].entry(getEvtAreaTagP(1, 0));
|
|
}
|
|
if (mActorMngrs[6].getActorP() == NULL) {
|
|
mActorMngrs[6].entry(getEvtAreaTagP(1, 1));
|
|
}
|
|
if (mActorMngrs[7].getActorP() == NULL) {
|
|
mActorMngrs[7].entry(getNearestActorP(0x132));
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case TYPE_2:
|
|
case TYPE_3:
|
|
if (mActorMngrs[3].getActorP() == NULL) {
|
|
mActorMngrs[3].entry(getSekizoaP(0));
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case TYPE_4:
|
|
case TYPE_5:
|
|
break;
|
|
|
|
case TYPE_6:
|
|
if (mActorMngrs[0].getActorP() == NULL) {
|
|
mActorMngrs[0].entry(getKMsgTagP());
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 80CCF9A8-80CCFAA8 001748 0100+00 1/0 0/0 0/0 .text evtTalk__15daObj_Sekizoa_cFv */
|
|
BOOL daObj_Sekizoa_c::evtTalk() {
|
|
if (chkAction(&daObj_Sekizoa_c::talk)) {
|
|
(this->*(mExecuteFunc))(0);
|
|
} else {
|
|
mPreItemNo = 0;
|
|
if (dComIfGp_event_chkTalkXY()) {
|
|
if (!dComIfGp_evmng_ChkPresentEnd()) {
|
|
return 1;
|
|
}
|
|
mEvtNo = 1;
|
|
evtChange();
|
|
return 1;
|
|
}
|
|
setAction(&daObj_Sekizoa_c::talk);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CCFAA8-80CCFBA0 001848 00F8+00 1/0 0/0 0/0 .text evtCutProc__15daObj_Sekizoa_cFv */
|
|
BOOL daObj_Sekizoa_c::evtCutProc() {
|
|
int staff_id = dComIfGp_getEventManager().getMyStaffId("Sekizoa", this, -1);
|
|
if (mType == TYPE_1 || mType == TYPE_3) {
|
|
staff_id = dComIfGp_getEventManager().getMyStaffId("Sekizob", this, -1);
|
|
}
|
|
if (staff_id != -1) {
|
|
mStaffId = staff_id;
|
|
int actIdx = dComIfGp_getEventManager().getMyActIdx(mStaffId, mCutNameList, 9, 0, 0);
|
|
if ((this->*(mCutList[actIdx]))(mStaffId) != 0) {
|
|
dComIfGp_getEventManager().cutEnd(mStaffId);
|
|
}
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 80CCFBA0-80CCFD08 001940 0168+00 1/0 0/0 0/0 .text action__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::action() {
|
|
if (mCyl.ChkTgHit()) {
|
|
mSound.startCollisionSE(mCyl.GetTgHitObjHitSeID(1), 2);
|
|
} else {
|
|
if (mCyl2.ChkTgHit()) {
|
|
mSound.startCollisionSE(mCyl2.GetTgHitObjHitSeID(1), 2);
|
|
}
|
|
}
|
|
if (mStagger.checkRebirth()) {
|
|
mStagger.initialize();
|
|
mMode = 1;
|
|
}
|
|
if (mInitFunc != NULL) {
|
|
if (mExecuteFunc == mInitFunc) {
|
|
(this->*(mExecuteFunc))(0);
|
|
} else {
|
|
setAction(mInitFunc);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80CCFD08-80CCFD80 001AA8 0078+00 1/0 0/0 0/0 .text beforeMove__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::beforeMove() {
|
|
if (checkHide() || mNoDraw != 0) {
|
|
attention_info.flags = 0;
|
|
}
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CCFD80-80CD009C 001B20 031C+00 1/0 0/0 0/0 .text setAttnPos__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::setAttnPos() {
|
|
cXyz vec_pos(30.0f, 30.0f, 0.0f);
|
|
Mtx M_stack;
|
|
|
|
mStagger.calc(0);
|
|
f32 rad_angle_y = cM_s2rad(mCurAngle.y - field_0xd7e.y);
|
|
mJntAnm.setParam(this, mpMorf[0]->getModel(), &vec_pos, getBackboneJointNo(), getNeckJointNo(),
|
|
getHeadJointNo(), daObj_Sekizoa_Param_c::m.field_0x24,
|
|
daObj_Sekizoa_Param_c::m.field_0x20, daObj_Sekizoa_Param_c::m.field_0x2C,
|
|
daObj_Sekizoa_Param_c::m.field_0x28, daObj_Sekizoa_Param_c::m.field_0x34,
|
|
daObj_Sekizoa_Param_c::m.field_0x30, daObj_Sekizoa_Param_c::m.field_0x3C,
|
|
daObj_Sekizoa_Param_c::m.field_0x38, daObj_Sekizoa_Param_c::m.field_0x40, 0.0f,
|
|
NULL);
|
|
mJntAnm.calcJntRad(0.2f, 1.0f, rad_angle_y);
|
|
setMtx();
|
|
|
|
if (mType == TYPE_6) {
|
|
J3DModel* mp_model = mpMorf[1]->getModel();
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::ZXYrotM(mCurAngle);
|
|
mDoMtx_stack_c::scaleM(scale);
|
|
|
|
mp_model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mp_model->setUserArea((uintptr_t)this);
|
|
mpMorf[1]->modelCalc();
|
|
}
|
|
if (mpMcaMorf != NULL) {
|
|
((mDoExt_McaMorfSO*)mpMcaMorf)->play(NULL, 0);
|
|
if (mType == TYPE_1 || mType == TYPE_3 || mType == TYPE_5) {
|
|
mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(7));
|
|
} else {
|
|
mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(13));
|
|
}
|
|
cMtx_copy(mDoMtx_stack_c::get(), M_stack);
|
|
mpMcaMorf->getModel()->setBaseTRMtx(M_stack);
|
|
((mDoExt_McaMorfSO*)mpMcaMorf)->modelCalc();
|
|
}
|
|
mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo()));
|
|
mDoMtx_stack_c::multVec(&vec_pos, &eyePos);
|
|
mJntAnm.setEyeAngleX(eyePos, 1.0f, 0);
|
|
mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0);
|
|
attention_info.position = current.pos;
|
|
attention_info.position.y += daObj_Sekizoa_Param_c::m.field_0x00;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD009C-80CD03C0 001E3C 0324+00 1/0 0/0 0/0 .text setCollision__15daObj_Sekizoa_cFv
|
|
*/
|
|
void daObj_Sekizoa_c::setCollision() {
|
|
u32 temp_1;
|
|
u32 temp_2;
|
|
u32 temp_3;
|
|
cXyz temp_vec2;
|
|
|
|
if (mHide == 0) {
|
|
temp_1 = 0x79;
|
|
temp_2 = 0xd8fafdbf;
|
|
temp_3 = 0x1f;
|
|
if (daNpcT_chkTmpBit(0x31)) {
|
|
temp_1 = 0x69;
|
|
} else if (dComIfGp_event_runCheck()) {
|
|
temp_2 = 0;
|
|
temp_3 = 0;
|
|
} else if (mTwilight != 0) {
|
|
temp_2 = 0;
|
|
temp_3 = 0;
|
|
} else if (mStagger.checkStagger() != 0) {
|
|
temp_2 = 0;
|
|
temp_3 = 0;
|
|
}
|
|
if (mType == TYPE_2 || mType == TYPE_3 || mType == TYPE_4 || mType == TYPE_5) {
|
|
cXyz temp_vec;
|
|
if (mType == TYPE_2 || mType == TYPE_4) {
|
|
temp_vec.set(-160.0f, 0.0f, 120.0f);
|
|
} else {
|
|
temp_vec.set(160.0f, 0.0f, 120.0f);
|
|
}
|
|
mDoMtx_stack_c::YrotS(mCurAngle.y);
|
|
mDoMtx_stack_c::multVec(&temp_vec, &temp_vec);
|
|
f32 height = mCylH;
|
|
temp_vec2 = current.pos + temp_vec;
|
|
mCyl2.SetCoSPrm(temp_1);
|
|
mCyl2.SetTgType(temp_2);
|
|
mCyl2.SetTgSe(9);
|
|
mCyl2.SetTgHitMark(CcG_Tg_UNK_MARK_2);
|
|
mCyl2.SetTgSPrm(temp_3);
|
|
mCyl2.OnTgShield();
|
|
mCyl2.OnTgNoConHit();
|
|
mCyl2.SetH(height);
|
|
mCyl2.SetR(10.0f);
|
|
mCyl2.SetC(temp_vec2);
|
|
dComIfG_Ccsp()->Set(&mCyl2);
|
|
}
|
|
mCyl.SetCoSPrm(temp_1);
|
|
mCyl.SetTgType(temp_2);
|
|
mCyl.SetTgSe(9);
|
|
mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_2);
|
|
mCyl.SetTgSPrm(temp_3);
|
|
mCyl.OnTgShield();
|
|
mCyl.OnTgNoConHit();
|
|
temp_vec2.set(0.0f, 0.0f, 0.0f);
|
|
f32 height = mCylH;
|
|
f32 radius = mWallR;
|
|
if (mType == TYPE_6) {
|
|
temp_vec2.set(0.0f, 0.0f, -40.0f);
|
|
radius = 140.0f;
|
|
}
|
|
mDoMtx_stack_c::YrotS(mCurAngle.y);
|
|
mDoMtx_stack_c::multVec(&temp_vec2, &temp_vec2);
|
|
temp_vec2 += current.pos;
|
|
mCyl.SetH(height);
|
|
mCyl.SetR(radius);
|
|
mCyl.SetC(temp_vec2);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
}
|
|
mCyl2.ClrCoHit();
|
|
mCyl.ClrCoHit();
|
|
mCyl2.ClrTgHit();
|
|
mCyl.ClrTgHit();
|
|
}
|
|
|
|
/* 80CD03C0-80CD03C8 002160 0008+00 1/0 0/0 0/0 .text drawDbgInfo__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::drawDbgInfo() {
|
|
return 0;
|
|
}
|
|
|
|
/* 80CD03C8-80CD04FC 002168 0134+00 1/0 0/0 0/0 .text drawOtherMdl__15daObj_Sekizoa_cFv
|
|
*/
|
|
void daObj_Sekizoa_c::drawOtherMdl() {
|
|
if (mType == TYPE_6) {
|
|
J3DModel* mp_model = mpMorf[1]->getModel();
|
|
mp_model->getModelData();
|
|
g_env_light.settingTevStruct(0, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(mp_model, &tevStr);
|
|
mpMorf[1]->entryDL();
|
|
}
|
|
if (mpMcaMorf != NULL && field_0x1179 != 0) {
|
|
J3DModel* mp_model = mpMcaMorf->getModel();
|
|
J3DModelData* mp_model_data = mp_model->getModelData();
|
|
g_env_light.setLightTevColorType_MAJI(mp_model_data, &tevStr);
|
|
if (mAnmFlags & ANM_PLAY_BTK) {
|
|
mBtkAnm.entry(mp_model_data);
|
|
}
|
|
if (mAnmFlags & ANM_PLAY_BRK) {
|
|
mBrkAnm.entry(mp_model_data);
|
|
}
|
|
mpMcaMorf->entryDL();
|
|
if (mAnmFlags & ANM_PLAY_BRK) {
|
|
mBrkAnm.remove(mp_model_data);
|
|
}
|
|
if (mAnmFlags & ANM_PLAY_BTK) {
|
|
mBtkAnm.remove(mp_model_data);
|
|
}
|
|
dComIfGd_addRealShadow(mShadowKey, mp_model);
|
|
}
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD04FC-80CD05D0 00229C 00D4+00 1/1 0/0 0/0 .text setYariAnm__15daObj_Sekizoa_cFiif
|
|
*/
|
|
int daObj_Sekizoa_c::setYariAnm(int i_frame, int i_mode, f32 i_morf) {
|
|
static struct {
|
|
u32 param_0;
|
|
u32 param_1;
|
|
} yariAnmData[24] = {
|
|
{-1, 0},
|
|
{ANM_YARIA_STILL_L, 1},
|
|
{ANM_YARIA_STILL_L, 1},
|
|
{ANM_YARIA_STILL_L, 1},
|
|
{ANM_YARIA_STILL_L, 1},
|
|
{ANM_YARIA_GAME, 1},
|
|
{ANM_YARIA_GAME, 1},
|
|
{ANM_YARIA_GAME, 1},
|
|
{ANM_YARIA_GAME, 1},
|
|
{ANM_YARIA_GAME, 1},
|
|
{ANM_YARIA_GAME, 1},
|
|
{ANM_YARIA_GAME, 1},
|
|
{ANM_YARIB_STILL_R, 1},
|
|
{ANM_YARIB_STILL_R, 1},
|
|
{ANM_YARIB_STILL_R, 1},
|
|
{ANM_YARIB_STILL_R, 1},
|
|
{ANM_YARIB_GAME, 1},
|
|
{ANM_YARIB_GAME, 1},
|
|
{ANM_YARIB_GAME, 1},
|
|
{ANM_YARIB_GAME, 1},
|
|
{ANM_YARIB_GAME, 1},
|
|
{ANM_YARIB_GAME, 1},
|
|
{ANM_YARIB_GAME, 1},
|
|
{0, 0},
|
|
|
|
};
|
|
|
|
s32 anm_data;
|
|
J3DAnmTransform* anim = NULL;
|
|
field_0x1179 = 0;
|
|
if (mpMcaMorf != NULL) {
|
|
anm_data = yariAnmData[i_frame].param_0;
|
|
if (anm_data > 0) {
|
|
anim = getTrnsfrmKeyAnmP(l_resNameList[yariAnmData[i_frame].param_1], anm_data);
|
|
}
|
|
if (anim != NULL) {
|
|
((mDoExt_McaMorfSO*)mpMcaMorf)->setAnm(anim, i_mode, i_morf, 1.0f, 0.0f, -1.0f);
|
|
field_0x1179 = 1;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 80CD05D0-80CD06BC 002370 00EC+00 1/0 0/0 0/0 .text drawGhost__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::drawGhost() {
|
|
J3DModel* ghost_model = mpMorf[0]->getModel();
|
|
if (mType == TYPE_6) {
|
|
g_env_light.settingTevStruct(7, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(ghost_model->getModelData(), &tevStr);
|
|
mInvModel.entryDL(NULL);
|
|
} else {
|
|
g_env_light.settingTevStruct(16, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(ghost_model->getModelData(), &tevStr);
|
|
dComIfGd_setListBG();
|
|
mpMorf[0]->entryDL();
|
|
dComIfGd_setList();
|
|
}
|
|
}
|
|
|
|
/* 80CD06BC-80CD0A84 00245C 03C8+00 2/0 0/0 0/0 .text afterSetMotionAnm__15daObj_Sekizoa_cFiifi */
|
|
bool daObj_Sekizoa_c::afterSetMotionAnm(int i_frame, int i_mode, f32 i_morf, int param_3) {
|
|
f32 var1;
|
|
static struct {
|
|
int field_0x0;
|
|
u32 field_0x4;
|
|
u32 field_0x8;
|
|
} brkAnmData[6] = {
|
|
{0x2A, 0, 1}, {0x2B, 0, 1}, {0x2C, 0, 1}, {0x2D, 0, 1}, {0x2E, 0, 1}, {0x29, 0, 1},
|
|
};
|
|
|
|
static struct {
|
|
int field_0x0;
|
|
u32 field_0x4;
|
|
u32 field_0x8;
|
|
} btkAnmData[4] = {
|
|
{0x32, 0, 1},
|
|
{-1, 0, 0},
|
|
{-1, 0, 0},
|
|
{0x31, 0, 1},
|
|
};
|
|
|
|
J3DAnmTextureSRTKey* anm_text = NULL;
|
|
J3DAnmTevRegKey* anm_tev = NULL;
|
|
if (mCreating == 1) {
|
|
var1 = 0.0f;
|
|
} else {
|
|
var1 = i_morf;
|
|
}
|
|
int frame_1 = 1;
|
|
int frame_2 = 3;
|
|
switch (i_frame) {
|
|
case 7:
|
|
case 18:
|
|
mpMorf[0]->setStartFrame(0.0f);
|
|
mpMorf[0]->setEndFrame(17.0f);
|
|
break;
|
|
case 8:
|
|
case 19:
|
|
mpMorf[0]->setStartFrame(18.0f);
|
|
mpMorf[0]->setEndFrame(35.0f);
|
|
break;
|
|
case 9:
|
|
case 20:
|
|
mpMorf[0]->setStartFrame(36.0f);
|
|
break;
|
|
case 6:
|
|
case 17:
|
|
mpMorf[0]->setStartFrame(29.0f);
|
|
mpMorf[0]->setEndFrame(41.0f);
|
|
break;
|
|
case 23:
|
|
mpMorf[0]->setStartFrame(0.0f);
|
|
mpMorf[0]->setEndFrame(0.0f);
|
|
mpMorf[0]->setPlaySpeed(0.0f);
|
|
break;
|
|
}
|
|
if (i_frame == 23) {
|
|
frame_1 = 3;
|
|
frame_2 = 5;
|
|
} else if (mFadeLightOn) {
|
|
frame_1 = 2;
|
|
frame_2 = 4;
|
|
if (field_0x1178 != false) {
|
|
frame_2 = 1;
|
|
} else {
|
|
if (field_0x1177 != false) {
|
|
frame_2 = 2;
|
|
} else {
|
|
if (i_frame == 3 || i_frame == 14) {
|
|
frame_1 = 0;
|
|
frame_2 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (btkAnmData[frame_1].field_0x0 != -1) {
|
|
anm_text = getTexSRTKeyAnmP(l_resNameList[btkAnmData[frame_1].field_0x8],
|
|
btkAnmData[frame_1].field_0x0);
|
|
}
|
|
if (anm_text != NULL) {
|
|
if (mBtkAnm.getBtkAnm() == anm_text) {
|
|
mAnmFlags |= ANM_PLAY_BTK;
|
|
} else {
|
|
if (setBtkAnm(anm_text, mpMorf[0]->getModel()->getModelData(), 1.0f,
|
|
btkAnmData[4].field_0x4))
|
|
{
|
|
if (frame_1 == 3) {
|
|
mBtkAnm.setPlaySpeed(0.0f);
|
|
}
|
|
mAnmFlags |= 0x82;
|
|
}
|
|
if ((mAnmFlags & 2) == 0) {
|
|
anm_text = NULL;
|
|
}
|
|
}
|
|
}
|
|
if (anm_text == NULL && btkAnmData[frame_1].field_0x0 != -1) {
|
|
return 0;
|
|
}
|
|
if (brkAnmData[frame_2].field_0x0 != -1) {
|
|
anm_tev = getTevRegKeyAnmP(l_resNameList[brkAnmData[frame_2].field_0x8],
|
|
brkAnmData[frame_2].field_0x0);
|
|
}
|
|
if (anm_tev != NULL) {
|
|
if (mBrkAnm.getBrkAnm() == anm_tev) {
|
|
mAnmFlags |= ANM_PLAY_BRK;
|
|
} else {
|
|
frame_1 = setBrkAnm(anm_tev, mpMorf[0]->getModel()->getModelData(), 1.0,
|
|
brkAnmData[6].field_0x4);
|
|
if (frame_1 != 0) {
|
|
if (frame_2 == 5) {
|
|
mBrkAnm.setPlaySpeed(0.0f);
|
|
}
|
|
mAnmFlags |= 0x104;
|
|
}
|
|
if ((mAnmFlags & 4) == 0) {
|
|
anm_tev = NULL;
|
|
}
|
|
}
|
|
}
|
|
if (anm_tev == NULL && brkAnmData[frame_2].field_0x0 != -1) {
|
|
return 0;
|
|
}
|
|
if (mType == TYPE_6) {
|
|
return 1;
|
|
}
|
|
frame_1 = setYariAnm(i_frame, i_mode, var1);
|
|
if (frame_1 & 0xFF) {
|
|
if (mType == TYPE_2 || mType == TYPE_3 || mType == TYPE_4 || mType == TYPE_5) {
|
|
mpMorf[0]->setPlaySpeed(0.0f);
|
|
if (mpMcaMorf != NULL) {
|
|
mpMcaMorf->setPlaySpeed(0.0f);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80CD0A84-80CD0B08 002824 0084+00 1/1 0/0 0/0 .text selectAction__15daObj_Sekizoa_cFv
|
|
*/
|
|
int daObj_Sekizoa_c::selectAction() {
|
|
mInitFunc = NULL;
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
case TYPE_1:
|
|
mInitFunc = &daObj_Sekizoa_c::puzzle;
|
|
break;
|
|
default:
|
|
mInitFunc = &daObj_Sekizoa_c::wait;
|
|
break;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 80CD0B08-80CD0B34 0028A8 002C+00 1/1 0/0 0/0 .text
|
|
* chkAction__15daObj_Sekizoa_cFM15daObj_Sekizoa_cFPCvPvPv_i */
|
|
int daObj_Sekizoa_c::chkAction(actionFunc i_action) {
|
|
return mExecuteFunc == i_action;
|
|
}
|
|
|
|
/* 80CD0B34-80CD0BDC 0028D4 00A8+00 2/2 0/0 0/0 .text
|
|
* setAction__15daObj_Sekizoa_cFM15daObj_Sekizoa_cFPCvPvPv_i */
|
|
int daObj_Sekizoa_c::setAction(actionFunc i_action) {
|
|
mMode = 3;
|
|
if (mExecuteFunc != NULL) {
|
|
(this->*(mExecuteFunc))(0);
|
|
}
|
|
|
|
mMode = 0;
|
|
mExecuteFunc = i_action;
|
|
if (mExecuteFunc != NULL) {
|
|
(this->*(mExecuteFunc))(0);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD0BDC-80CD0DE8 00297C 020C+00 1/1 0/0 0/0 .text checkMoveDirection__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::checkMoveDirection() {
|
|
cXyz temp_vec;
|
|
cXyz temp_vec2;
|
|
|
|
f32 temp_float_y = daObj_Sekizoa_Param_c::m.field_0x00 * 0.33f;
|
|
fopAc_ac_c* actor_3 = mActorMngrs[3].getActorP();
|
|
temp_vec.set(0.0f, 0.0f, daObj_Sekizoa_Param_c::m.field_0x8C);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&temp_vec, &temp_vec2);
|
|
if (chkPointInArea(actor_3->current.pos, temp_vec2, daObj_Sekizoa_Param_c::m.field_0x8C / 2,
|
|
300.0f, -300.0f, 0) == false)
|
|
{
|
|
temp_vec2.y += 10.0f;
|
|
mGndChk.SetPos(&temp_vec2);
|
|
if (fabsf(dComIfG_Bgsp().GroundCross(&mGndChk) - current.pos.y) < 0.1f) {
|
|
temp_vec.set(0.0f, temp_float_y, daObj_Sekizoa_Param_c::m.field_0x8C);
|
|
mDoMtx_stack_c::YrotS(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&temp_vec, &temp_vec2);
|
|
temp_vec2 = current.pos + temp_vec2;
|
|
temp_vec = current.pos;
|
|
temp_vec.y += temp_float_y;
|
|
mLinChk.Set(&temp_vec, &temp_vec2, this);
|
|
if (!dComIfG_Bgsp().LineCross(&mLinChk)) {
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80CD0DE8-80CD0E30 002B88 0048+00 3/3 0/0 0/0 .text getWaitMotionNo__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::getWaitMotionNo() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
return 1;
|
|
case TYPE_1:
|
|
return 12;
|
|
case TYPE_6:
|
|
return 23;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80CD0E30-80CD0E78 002BD0 0048+00 4/4 0/0 0/0 .text getGameMotionNo__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::getGameMotionNo() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
return 5;
|
|
case TYPE_1:
|
|
return 16;
|
|
case TYPE_6:
|
|
return 23;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80CD0E78-80CD0EAC 002C18 0034+00 1/1 0/0 0/0 .text getNoJumpMotionNo__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::getNoJumpMotionNo() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
return 10;
|
|
case TYPE_1:
|
|
return 21;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* 80CD0EAC-80CD0EE0 002C4C 0034+00 1/1 0/0 0/0 .text getHitMotionNo__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::getHitMotionNo() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
return 6;
|
|
case TYPE_1:
|
|
return 17;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* 80CD0EE0-80CD0F14 002C80 0034+00 2/2 0/0 0/0 .text getStepMotionNo__15daObj_Sekizoa_cFv */
|
|
int daObj_Sekizoa_c::getStepMotionNo() {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
return 11;
|
|
case TYPE_1:
|
|
return 22;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD0F14-80CD14D8 002CB4 05C4+00 2/2 0/0 0/0 .text jump__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::jump() {
|
|
cXyz temp_vec;
|
|
|
|
switch (mJump) {
|
|
case 0:
|
|
if (mMotionSeqMngr.checkEndSequence() != 0) {
|
|
mMotionSeqMngr.setNo(getGameMotionNo(), -1.0f, 0, 0);
|
|
mJump = 5;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (checkMoveDirection() != 0) {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mMotionSeqMngr.setNo(7, -1.0f, 0, 0);
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_JUMP_1, -1);
|
|
break;
|
|
case TYPE_1:
|
|
mMotionSeqMngr.setNo(18, -1.0f, 0, 0);
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_JUMP_2, -1);
|
|
break;
|
|
case TYPE_2:;
|
|
}
|
|
mJump = 2;
|
|
} else {
|
|
mMotionSeqMngr.setNo(getNoJumpMotionNo(), -1.0f, 0, 0);
|
|
if (mType == TYPE_0) {
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_NO_JUMP_1, -1);
|
|
} else if (mType == TYPE_1) {
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_NO_JUMP_2, -1);
|
|
}
|
|
mJump = 0;
|
|
}
|
|
speedF = 0.0f;
|
|
speed.setall(0.0f);
|
|
mJumpHeight = 0.0f;
|
|
mJumpSpeed = 0.0f;
|
|
break;
|
|
|
|
case 2:
|
|
case 3:
|
|
cXyz temp_vec2;
|
|
|
|
if (mMotionSeqMngr.getNo() == 7 || mMotionSeqMngr.getNo() == 18) {
|
|
if (mMotionSeqMngr.checkEndSequence() != 0) {
|
|
switch (mMotionSeqMngr.getNo()) {
|
|
case 7:
|
|
mMotionSeqMngr.setNo(8, -1.0f, 0, 0);
|
|
break;
|
|
case 18:
|
|
mMotionSeqMngr.setNo(19, -1.0f, 0, 0);
|
|
break;
|
|
}
|
|
mCXyzJump = current.pos;
|
|
mJumpSpeed = daObj_Sekizoa_Param_c::m.field_0x90;
|
|
return;
|
|
}
|
|
} else {
|
|
if (mJump == 2 && mCyl.ChkCoHit() != 0 &&
|
|
fopAcM_GetName(mCyl.GetCoHitObj()->GetAc()) == 0x20)
|
|
{
|
|
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER5, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
mMotionSeqMngr.setNo(getHitMotionNo(), -1.0f, 0, 0);
|
|
if (mType == TYPE_0) {
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_COL1, -1);
|
|
} else if (mType == TYPE_1) {
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_COL2, -1);
|
|
mSound.startCreatureSound(Z2SE_SEKI_JUMP_COL, 0, -1);
|
|
}
|
|
mJumpSpeed = daObj_Sekizoa_Param_c::m.field_0x90;
|
|
mJump = 3;
|
|
}
|
|
if (mJump == 2) {
|
|
cLib_chaseF(&mJumpHeight, daObj_Sekizoa_Param_c::m.field_0x8C, mJumpSpeed);
|
|
} else {
|
|
cLib_chaseF(&mJumpHeight, 0.0f, mJumpSpeed);
|
|
}
|
|
|
|
f32 var_f31 = daObj_Sekizoa_Param_c::m.field_0x94;
|
|
f32 var_f29 = var_f31 * ((daObj_Sekizoa_Param_c::m.field_0x8C * 0.5f) *
|
|
(daObj_Sekizoa_Param_c::m.field_0x8C * 0.5f));
|
|
f32 var_f30 = mJumpHeight - (daObj_Sekizoa_Param_c::m.field_0x8C * 0.5f);
|
|
|
|
temp_vec.set(0.0f, var_f29 + (-var_f31 * (var_f30 * var_f30)), mJumpHeight);
|
|
|
|
mDoMtx_stack_c::YrotS(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&temp_vec, &temp_vec2);
|
|
current.pos = mCXyzJump + temp_vec2;
|
|
cLib_chaseF(&mJumpSpeed, daObj_Sekizoa_Param_c::m.field_0x90 * 0.5f, 0.25f);
|
|
if (mJumpHeight <= 0 || daObj_Sekizoa_Param_c::m.field_0x8C <= mJumpHeight) {
|
|
landing();
|
|
mJump = 4;
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if (mMotionSeqMngr.checkEndSequence() != 0) {
|
|
mMotionSeqMngr.setNo(getGameMotionNo(), -1.0f, 0, 0);
|
|
mJump = 5;
|
|
}
|
|
break;
|
|
|
|
case 5:;
|
|
}
|
|
return;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD14D8-80CD1688 003278 01B0+00 2/2 0/0 0/0 .text landing__15daObj_Sekizoa_cFv */
|
|
void daObj_Sekizoa_c::landing() {
|
|
mDoAud_seStart(Z2SE_SEKI_JUMP_LAND, 0, 0, 0);
|
|
if (chkPressPlayer()) {
|
|
mSound.startCreatureSound(Z2SE_SY_MG_SEKI_FAILURE, 0, -1);
|
|
}
|
|
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER7, 15, cXyz(0.0f, 1.0f, 0.0f));
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
|
|
return;
|
|
case TYPE_1:
|
|
mMotionSeqMngr.setNo(20, -1.0f, 0, 0);
|
|
break;
|
|
case TYPE_2:;
|
|
}
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD1688-80CD2708 003428 1080+00 2/0 0/0 0/0 .text cutStart__15daObj_Sekizoa_cFi */
|
|
int daObj_Sekizoa_c::cutStart(int i_staffIdx) {
|
|
cXyz c_stack_9c;
|
|
csXyz c_stack_c8;
|
|
|
|
int ret = 0;
|
|
int prm = -1;
|
|
int timer = 0;
|
|
int msgNo = 0;
|
|
char acStack_90[100];
|
|
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
int* timer_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "timer");
|
|
if (timer_p != NULL) {
|
|
timer = *timer_p;
|
|
}
|
|
int* msgNo_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "msgNo");
|
|
if (msgNo_p != NULL) {
|
|
msgNo = *msgNo_p;
|
|
}
|
|
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
switch (prm) {
|
|
case 0:
|
|
mFaceMotionSeqMngr.setNo(0, 0.0f, 0, 0);
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mMotionSeqMngr.setNo(2, 0.0f, 0, 0);
|
|
break;
|
|
case TYPE_1:
|
|
mMotionSeqMngr.setNo(13, 0.0f, 0, 0);
|
|
break;
|
|
case TYPE_2:;
|
|
}
|
|
if (mType == TYPE_0) {
|
|
daObj_SMTile_c* actor_4 = (daObj_SMTile_c*)mActorMngrs[4].getActorP();
|
|
actor_4->reset();
|
|
dComIfGp_getEvent().setPt2(actor_4);
|
|
strcpy(acStack_90, l_evtList[2].eventName);
|
|
strcat(acStack_90, "@");
|
|
dComIfGp_getEvent().setSkipZev(this, acStack_90);
|
|
dComIfGp_getEvent().onSkipFade();
|
|
if (daNpcT_getPlayerInfoFromPlayerList(1, fopAcM_GetRoomNo(this), &c_stack_9c,
|
|
&c_stack_c8))
|
|
{
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&c_stack_9c, c_stack_c8.y, 0);
|
|
dComIfGp_evmng_setGoal(&c_stack_9c);
|
|
}
|
|
daPy_getPlayerActorClass()->setGiantPuzzle();
|
|
daNpcT_onTmpBit(0x31);
|
|
dComIfGp_2dShowOff();
|
|
mDoAud_seStart(Z2SE_SY_MG_SEKI_BLACK_OUT, 0, 0, 0);
|
|
}
|
|
c_stack_c8.setall(0);
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
c_stack_9c = l_srcPosL;
|
|
} else {
|
|
c_stack_9c = l_srcPosR;
|
|
}
|
|
setPos(c_stack_9c);
|
|
setAngle(c_stack_c8.y);
|
|
break;
|
|
case TYPE_1:
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
c_stack_9c = l_srcPosR;
|
|
} else {
|
|
c_stack_9c = l_srcPosL;
|
|
}
|
|
setPos(c_stack_9c);
|
|
setAngle(c_stack_c8.y);
|
|
break;
|
|
case TYPE_2:;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (mType == TYPE_0) {
|
|
daNpcT_c* actor_1 = (daNpcT_c*)mActorMngrs[1].getActorP();
|
|
actor_1->current.pos.y += 1000.0f;
|
|
actor_1->old.pos = actor_1->current.pos;
|
|
actor_1->hide();
|
|
|
|
daNpcT_c* actor_2 = (daNpcT_c*)mActorMngrs[2].getActorP();
|
|
actor_2->current.pos.y += 1000.0f;
|
|
actor_2->old.pos = actor_2->current.pos;
|
|
actor_2->hide();
|
|
mColsetBlend = 0.0f;
|
|
}
|
|
mHide = 0;
|
|
break;
|
|
|
|
case 2:
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 3:
|
|
if (mType == TYPE_0) {
|
|
mColsetBlend = 0.0f;
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mMotionSeqMngr.setNo(1, -1.0f, 0, 0);
|
|
break;
|
|
case TYPE_1:
|
|
mMotionSeqMngr.setNo(12, -1.0f, 0, 0);
|
|
break;
|
|
case TYPE_2:;
|
|
}
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 5:
|
|
mJump = 1;
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 6:
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mMotionSeqMngr.setNo(8, 0.0f, 0, 0);
|
|
break;
|
|
case TYPE_1:
|
|
mMotionSeqMngr.setNo(19, 0.0f, 0, 0);
|
|
break;
|
|
case TYPE_2:;
|
|
}
|
|
mAcch.ClrGroundHit();
|
|
mAcch.ClrGroundLanding();
|
|
c_stack_9c = home.pos;
|
|
c_stack_9c.y += 500.0f;
|
|
current.pos = c_stack_9c;
|
|
old.pos = current.pos;
|
|
setAngle(home.angle.y);
|
|
speedF = 0.0f;
|
|
speed.setall(0.0f);
|
|
mEventTimer = timer;
|
|
mHide = 0;
|
|
break;
|
|
|
|
case 13:
|
|
case 7:
|
|
if (mType == TYPE_0) {
|
|
daPy_getPlayerActorClass()->setGiantPuzzleEnd();
|
|
if (prm == 13) {
|
|
daObj_SMTile_c* actor_4 = (daObj_SMTile_c*)mActorMngrs[4].getActorP();
|
|
actor_4->reset();
|
|
dComIfGp_getEvent().setPt2(actor_4);
|
|
mDoAud_seStart(Z2SE_SY_MG_SEKI_WHITE_OUT, 0, 0, 0);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 8:
|
|
mFaceMotionSeqMngr.setNo(0, 0.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(getWaitMotionNo(), 0.0f, 0, 0);
|
|
setPos(home.pos);
|
|
setAngle(home.angle.y);
|
|
if (mType == TYPE_0) {
|
|
if (daNpcT_getPlayerInfoFromPlayerList(1, fopAcM_GetRoomNo(this), &c_stack_9c,
|
|
&c_stack_c8))
|
|
{
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&c_stack_9c, c_stack_c8.y, 0);
|
|
dComIfGp_evmng_setGoal(&c_stack_9c);
|
|
}
|
|
dComIfGs_onSwitch(getBitSW(), fopAcM_GetRoomNo(this));
|
|
daObj_SMTile_c* actor_4 = (daObj_SMTile_c*)mActorMngrs[4].getActorP();
|
|
actor_4->reset();
|
|
dKy_custom_colset(10, 10, 0.0f);
|
|
daPy_getPlayerActorClass()->setGiantPuzzle();
|
|
mDoAud_subBgmStart(Z2BGM_STATUE_GAME);
|
|
daNpcT_onTmpBit(0x31);
|
|
dComIfGp_2dShowOff();
|
|
|
|
daNpcT_c* actor_1 = (daNpcT_c*)mActorMngrs[1].getActorP();
|
|
actor_1->current.pos.y += 1000.0f;
|
|
actor_1->old.pos = actor_1->current.pos;
|
|
actor_1->hide();
|
|
|
|
daNpcT_c* actor_2 = (daNpcT_c*)mActorMngrs[2].getActorP();
|
|
actor_2->current.pos.y += 1000.0f;
|
|
actor_2->old.pos = actor_2->current.pos;
|
|
actor_2->hide();
|
|
}
|
|
mHide = 0;
|
|
mFadeLightOn = true;
|
|
break;
|
|
|
|
case 9:
|
|
mMotionSeqMngr.setNo(getGameMotionNo(), -1.0f, 0, 0);
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 10:
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 11:
|
|
mFlow.init(NULL, 0x71, 0, NULL);
|
|
break;
|
|
|
|
case 12:
|
|
if (mType == TYPE_0) {
|
|
if (daNpcT_getPlayerInfoFromPlayerList(1, fopAcM_GetRoomNo(this), &c_stack_9c,
|
|
&c_stack_c8))
|
|
{
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&c_stack_9c, c_stack_c8.y, 0);
|
|
dComIfGp_evmng_setGoal(&c_stack_9c);
|
|
}
|
|
daPy_getPlayerActorClass()->setGiantPuzzle();
|
|
}
|
|
mHide = 1;
|
|
break;
|
|
|
|
case 20:
|
|
break;
|
|
|
|
case 99:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int local_d0[2] = {-1, -1};
|
|
|
|
switch (prm) {
|
|
case 0:
|
|
ret = 1;
|
|
break;
|
|
|
|
case 1:
|
|
if (mType == TYPE_0) {
|
|
dKy_custom_colset(0, 9, mColsetBlend);
|
|
if (mColsetBlend < 1.0f) {
|
|
cLib_chaseF(&mColsetBlend, 1.0f, 0.05f);
|
|
if (mColsetBlend == 1.0f) {
|
|
mDoAud_bgmStop(0x1e);
|
|
}
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mType == TYPE_0) {
|
|
daObj_SMTile_c* actor_4 = (daObj_SMTile_c*)mActorMngrs[4].getActorP();
|
|
if (mEventTimer != 0 || dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
dComIfGs_onSwitch(getBitSW(), fopAcM_GetRoomNo(this));
|
|
actor_4->slide();
|
|
}
|
|
} else if (actor_4->checkEndMove()) {
|
|
ret = 1;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (mType == TYPE_0) {
|
|
dKy_custom_colset(9, 10, mColsetBlend);
|
|
if (mColsetBlend < 1.0f) {
|
|
cLib_chaseF(&mColsetBlend, 1.0f, 0.05f);
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if (mEventTimer != 0 || dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mMotionSeqMngr.setNo(3, -1.0f, 0, 0);
|
|
mSound.startCreatureSound(Z2SE_SEKI_ST_DEMO, 0, -1);
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_KAKUSEI_1, -1);
|
|
mFadeLightOn = true;
|
|
break;
|
|
case TYPE_1:
|
|
mMotionSeqMngr.setNo(14, -1.0f, 0, 0);
|
|
mSound.startCreatureSound(Z2SE_SEKI_ST_DEMO, 0, -1);
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_KAKUSEI_2, -1);
|
|
mFadeLightOn = true;
|
|
break;
|
|
case TYPE_2:;
|
|
}
|
|
}
|
|
} else {
|
|
if (((mType == TYPE_0 && mMotionSeqMngr.getNo() == 3) ||
|
|
(mType == TYPE_1 && mMotionSeqMngr.getNo() == 0xE)) &&
|
|
mMotionSeqMngr.checkEndSequence() != 0)
|
|
{
|
|
ret = 1;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
if (mEventTimer != 0) {
|
|
if (cLib_calcTimer(&mEventTimer) != 0) {
|
|
jump();
|
|
} else {
|
|
mAcch.ClrGroundHit();
|
|
mAcch.ClrGroundLanding();
|
|
c_stack_9c = home.pos;
|
|
c_stack_9c.y += 500.0f;
|
|
current.pos = c_stack_9c;
|
|
old.pos = current.pos;
|
|
setAngle(home.angle.y);
|
|
speedF = 0.0f;
|
|
speed.setall(0.0f);
|
|
}
|
|
}
|
|
if (mEventTimer == 0) {
|
|
gravity = 0.0f;
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
if (mEventTimer != 0) {
|
|
cLib_calcTimer(&mEventTimer);
|
|
gravity = 0.0f;
|
|
} else {
|
|
if (mAcch.ChkGroundHit()) {
|
|
if (mAcch.ChkGroundLanding()) {
|
|
landing();
|
|
} else {
|
|
if (mMotionSeqMngr.getNo() == 9 || mMotionSeqMngr.getNo() == 20) {
|
|
if (mMotionSeqMngr.checkEndSequence() != 0) {
|
|
mMotionSeqMngr.setNo(getWaitMotionNo(), -1.0, 0, 0);
|
|
break;
|
|
} else {
|
|
break;
|
|
}
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
case 8:
|
|
case 13:
|
|
ret = 1;
|
|
break;
|
|
|
|
case 9:
|
|
if ((mEventTimer != 0 || dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) &&
|
|
cLib_calcTimer(&mEventTimer) == 0)
|
|
{
|
|
mDoAud_subBgmStart(Z2BGM_STATUE_GAME);
|
|
}
|
|
ret = (mEventTimer == 0);
|
|
break;
|
|
|
|
case 10:
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 20:
|
|
case 11:
|
|
local_d0[0] = msgNo;
|
|
field_0xe26 = 0;
|
|
if (mFlow.doFlow(NULL, NULL, 0) != 0) {
|
|
if (mFlow.checkEndFlow()) {
|
|
ret = 1;
|
|
}
|
|
} else if (mFlow.getMsg() != NULL) {
|
|
switch (mFlow.getMsg()->mode) {
|
|
case 2:
|
|
case 6:
|
|
for (int i = 0; i < local_d0[i]; i++) {
|
|
if (local_d0[i] == mFlow.getMsgNo()) {
|
|
ret = 1;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 12:
|
|
gravity = 0.0f;
|
|
ret = 1;
|
|
break;
|
|
|
|
case 99:
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 80CD2708-80CD2908 0044A8 0200+00 1/0 0/0 0/0 .text cutTurn__15daObj_Sekizoa_cFi */
|
|
int daObj_Sekizoa_c::cutTurn(int i_staffIdx) {
|
|
int ret = 0;
|
|
int prm = -1;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
switch (prm) {
|
|
case 0:
|
|
mPlayerDirection =
|
|
daPy_getPlayerActorClass()->getGiantPuzzleAimAngle() - mPlayerDirection;
|
|
mPlayerDirection += mCurAngle.y;
|
|
break;
|
|
case 1:
|
|
mPlayerDirection = daPy_getPlayerActorClass()->getGiantPuzzleAimAngle();
|
|
break;
|
|
}
|
|
}
|
|
switch (prm) {
|
|
case 0:
|
|
if (mPlayerDirection == mCurAngle.y) {
|
|
ret = 1;
|
|
} else if (step(mPlayerDirection, -1, getStepMotionNo(), 0x1e, 0)) {
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(getGameMotionNo(), -1.0f, 0, 0);
|
|
mTurnPlayer = 0;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (daPy_getPlayerActorClass()->shape_angle.y ==
|
|
daPy_getPlayerActorClass()->getGiantPuzzleAimAngle())
|
|
{
|
|
ret = 1;
|
|
}
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 80CD2908-80CD2B64 0046A8 025C+00 1/0 0/0 0/0 .text cutJump__15daObj_Sekizoa_cFi */
|
|
int daObj_Sekizoa_c::cutJump(int i_staffIdx) {
|
|
daObj_Sekizoa_c* actor_3;
|
|
|
|
int ret = 0;
|
|
int prm = -1;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
switch (prm) {
|
|
case 0:
|
|
break;
|
|
case 1:;
|
|
mJump = 1;
|
|
break;
|
|
case 2:;
|
|
}
|
|
}
|
|
switch (prm) {
|
|
case 0:
|
|
if (mType == TYPE_0) {
|
|
if (mLatencyTime != 0) {
|
|
cLib_calcTimer(&mLatencyTime);
|
|
}
|
|
ret = (mLatencyTime == 0);
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
|
|
case 1:
|
|
jump();
|
|
gravity = 0.0f;
|
|
speedF = 0.0f;
|
|
speed.setall(0.0f);
|
|
if (mJump == 5) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mType == TYPE_0) {
|
|
actor_3 = (daObj_Sekizoa_c*)mActorMngrs[3].getActorP();
|
|
if (chkPressPlayer() || actor_3->chkPressPlayer()) {
|
|
mEvtNo = 3;
|
|
evtChange();
|
|
return 0;
|
|
}
|
|
if (chkGoal() && actor_3->chkGoal()) {
|
|
mEvtNo = 6;
|
|
evtChange();
|
|
}
|
|
}
|
|
ret = 1;
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 80CD2B64-80CD376C 004904 0C08+00 3/0 0/0 0/0 .text cutGoal__15daObj_Sekizoa_cFi */
|
|
int daObj_Sekizoa_c::cutGoal(int i_staffIdx) {
|
|
cXyz cStack_a8;
|
|
csXyz cStack_b0;
|
|
char acStack_9c[100];
|
|
|
|
int ret = 0;
|
|
int prm = -1;
|
|
int timer = 0;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
int* timer_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "timer");
|
|
if (timer_p != NULL) {
|
|
timer = *timer_p;
|
|
}
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
switch (prm) {
|
|
case 0:
|
|
if (mType == TYPE_0) {
|
|
strcpy(acStack_9c, l_evtList[6].eventName);
|
|
strcat(acStack_9c, "@");
|
|
dComIfGp_getEvent().setSkipZev(this, acStack_9c);
|
|
dComIfGp_getEvent().onSkipFade();
|
|
}
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 1:
|
|
if (mCurAngle.y == 0) {
|
|
mGoalStatueAngle = 65536.0f;
|
|
} else {
|
|
mGoalStatueAngle = (float)-mCurAngle.y;
|
|
}
|
|
mGoalStatueTurnSpeed = fabsf(mGoalStatueAngle / 30.0f);
|
|
mMotionSeqMngr.setNo(getStepMotionNo(), -1.0f, 0, 0);
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 2:
|
|
if (mType == TYPE_0) {
|
|
mMotionSeqMngr.setNo(4, -1.0f, 0, 0);
|
|
mSound.startCreatureSound(Z2SE_SEKI_END_DEMO_1, 0, -1);
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_CLEAR_1, -1);
|
|
dKy_custom_colset(10, 0, 0.0f);
|
|
daPy_getPlayerActorClass()->setGiantPuzzleEnd();
|
|
mDoAud_subBgmStop();
|
|
daNpcT_offTmpBit(0x31);
|
|
mSetWolfHowling = false;
|
|
dComIfGp_2dShowOn();
|
|
daNpcT_onEvtBit(0xEB);
|
|
} else if (mType == TYPE_1) {
|
|
mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
|
|
mSound.startCreatureSound(Z2SE_SEKI_END_DEMO_1, 0, -1);
|
|
mSound.startCreatureVoice(Z2SE_SEKI_V_CLEAR_2, -1);
|
|
}
|
|
field_0x1177 = true;
|
|
break;
|
|
|
|
case 3:
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 4:
|
|
if (mType == TYPE_0) {
|
|
if (daNpcT_getPlayerInfoFromPlayerList(1, fopAcM_GetRoomNo(this), &cStack_a8,
|
|
&cStack_b0))
|
|
{
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&cStack_a8, cStack_b0.y, 0);
|
|
dComIfGp_evmng_setGoal(&cStack_a8);
|
|
}
|
|
if (getBitSW() != 0xFF) {
|
|
dComIfGs_offSwitch(getBitSW(), fopAcM_GetRoomNo(this));
|
|
}
|
|
mFlow.init(NULL, 0x73, 0, NULL);
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 6:
|
|
if (mType == TYPE_0) {
|
|
if (mReverseStatues != 0) {
|
|
daNpcT_onEvtBit(0x25E);
|
|
}
|
|
daObj_Sekizoa_c* actor_1 = (daObj_Sekizoa_c*)mActorMngrs[1].getActorP();
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
actor_1->current.pos = l_srcPosL;
|
|
} else {
|
|
actor_1->current.pos = l_srcPosR;
|
|
}
|
|
actor_1->old.pos = actor_1->current.pos;
|
|
actor_1->show();
|
|
actor_1->setFadeLightOff();
|
|
|
|
daObj_Sekizoa_c* actor_2 = (daObj_Sekizoa_c*)mActorMngrs[2].getActorP();
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
actor_2->current.pos = l_srcPosR;
|
|
} else {
|
|
actor_2->current.pos = l_srcPosL;
|
|
}
|
|
actor_2->old.pos = actor_2->current.pos;
|
|
actor_2->show();
|
|
actor_2->setFadeLightOff();
|
|
}
|
|
mHide = 1;
|
|
break;
|
|
|
|
case 9:
|
|
if (mType == TYPE_0) {
|
|
daObj_SekiDoor_c* actor_7 = (daObj_SekiDoor_c*)mActorMngrs[7].getActorP();
|
|
if (actor_7 != NULL) {
|
|
actor_7->evtSkip();
|
|
}
|
|
if (mReverseStatues != 0) {
|
|
daNpcT_onEvtBit(0x25E);
|
|
}
|
|
|
|
daObj_Sekizoa_c* actor_1 = (daObj_Sekizoa_c*)mActorMngrs[1].getActorP();
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
actor_1->current.pos = l_srcPosL;
|
|
} else {
|
|
actor_1->current.pos = l_srcPosR;
|
|
}
|
|
actor_1->old.pos = actor_1->current.pos;
|
|
actor_1->show();
|
|
actor_1->setFadeLightOff();
|
|
|
|
daObj_Sekizoa_c* actor_2 = (daObj_Sekizoa_c*)mActorMngrs[2].getActorP();
|
|
if (daNpcT_chkEvtBit(0x25E)) {
|
|
actor_2->current.pos = l_srcPosR;
|
|
} else {
|
|
actor_2->current.pos = l_srcPosL;
|
|
}
|
|
actor_2->old.pos = actor_2->current.pos;
|
|
actor_2->show();
|
|
actor_2->setFadeLightOff();
|
|
|
|
if (daNpcT_getPlayerInfoFromPlayerList(1, fopAcM_GetRoomNo(this), &cStack_a8,
|
|
&cStack_b0))
|
|
{
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&cStack_a8, cStack_b0.y, 0);
|
|
dComIfGp_evmng_setGoal(&cStack_a8);
|
|
}
|
|
if (getBitSW() != 0xFF) {
|
|
dComIfGs_offSwitch(getBitSW(), fopAcM_GetRoomNo(this));
|
|
}
|
|
if (getBitSW2() != 0xFF) {
|
|
dComIfGs_onSwitch(getBitSW2(), fopAcM_GetRoomNo(this));
|
|
}
|
|
dKy_custom_colset(0, 0, 0.0f);
|
|
daPy_getPlayerActorClass()->setGiantPuzzleEnd();
|
|
mDoAud_subBgmStop();
|
|
daNpcT_offTmpBit(0x31);
|
|
mSetWolfHowling = false;
|
|
dComIfGp_2dShowOn();
|
|
daNpcT_onEvtBit(0xEB);
|
|
}
|
|
mHide = 1;
|
|
mFadeLightOn = false;
|
|
}
|
|
}
|
|
switch (prm) {
|
|
case 0:
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
f32 temp_float = mGoalStatueAngle;
|
|
cLib_chaseF(&mGoalStatueAngle, 0.0f, mGoalStatueTurnSpeed);
|
|
int temp_diff = mGoalStatueAngle - temp_float;
|
|
current.angle.y -= temp_diff;
|
|
shape_angle.y = current.angle.y;
|
|
mCurAngle.y = current.angle.y;
|
|
if (mMotionSeqMngr.checkEndSequence() != 0) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mMotionSeqMngr.checkEndSequence() != 0) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (cLib_calcTimer(&mEventTimer) == 0 && mType == TYPE_0) {
|
|
daObj_SekiDoor_c* actor_7 = (daObj_SekiDoor_c*)mActorMngrs[7].getActorP();
|
|
if (actor_7->chkDestroy()) {
|
|
if (getBitSW2() != 0xFF) {
|
|
dComIfGs_onSwitch(getBitSW2(), fopAcM_GetRoomNo(this));
|
|
}
|
|
ret = 1;
|
|
} else {
|
|
actor_7->open();
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if (mType == TYPE_0) {
|
|
field_0xe26 = 0;
|
|
if (mFlow.doFlow(NULL, NULL, 0) != 0 && mFlow.checkEndFlow()) {
|
|
ret = 1;
|
|
}
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
ret = 1;
|
|
break;
|
|
|
|
case 9:
|
|
ret = 1;
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 80CD376C-80CD38F0 00550C 0184+00 1/0 0/0 0/0 .text cutExit__15daObj_Sekizoa_cFi */
|
|
int daObj_Sekizoa_c::cutExit(int i_staffIdx) {
|
|
int var_r30 = 0;
|
|
int prm = -1;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
switch (prm) {
|
|
case 0:
|
|
if (mType == TYPE_0) {
|
|
mFlow.init(NULL, 0x72, 0, NULL);
|
|
}
|
|
case 1:
|
|
break;
|
|
}
|
|
}
|
|
switch (prm) {
|
|
case 0:
|
|
if (mType == TYPE_0) {
|
|
field_0xe26 = 0;
|
|
if (mFlow.doFlow(NULL, NULL, 0) != 0 && mFlow.checkEndFlow()) {
|
|
switch (mFlow.getChoiceNo()) {
|
|
case 0:
|
|
mEvtNo = 3;
|
|
evtChange();
|
|
break;
|
|
case 1:
|
|
mEvtNo = 8;
|
|
evtChange();
|
|
break;
|
|
case 2:
|
|
var_r30 = 1;
|
|
break;
|
|
default:
|
|
var_r30 = 1;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
var_r30 = 1;
|
|
}
|
|
break;
|
|
case 1:
|
|
var_r30 = 1;
|
|
break;
|
|
}
|
|
return var_r30;
|
|
}
|
|
|
|
/* 80CD38F0-80CD3BD8 005690 02E8+00 1/0 0/0 0/0 .text cutFree__15daObj_Sekizoa_cFi */
|
|
int daObj_Sekizoa_c::cutFree(int i_staffIdx) {
|
|
cXyz cStack_2c;
|
|
csXyz cStack_34;
|
|
int var_r30 = 0;
|
|
int prm = -1;
|
|
int timer = 0;
|
|
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
int* timer_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "timer");
|
|
if (timer_p != NULL) {
|
|
timer = *timer_p;
|
|
}
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
switch (prm) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
if (mType == TYPE_0) {
|
|
daNpcT_c* actor_1 = (daNpcT_c*)mActorMngrs[1].getActorP();
|
|
actor_1->current.pos = actor_1->home.pos;
|
|
actor_1->old.pos = actor_1->current.pos;
|
|
actor_1->show();
|
|
|
|
daNpcT_c* actor_2 = (daNpcT_c*)mActorMngrs[2].getActorP();
|
|
actor_2->current.pos = actor_2->home.pos;
|
|
actor_2->old.pos = actor_2->current.pos;
|
|
actor_2->show();
|
|
if (daNpcT_getPlayerInfoFromPlayerList(1, fopAcM_GetRoomNo(this), &cStack_2c,
|
|
&cStack_34))
|
|
{
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&cStack_2c, cStack_34.y, 0);
|
|
dComIfGp_evmng_setGoal(&cStack_2c);
|
|
}
|
|
if (getBitSW() != 0xFF) {
|
|
dComIfGs_offSwitch(getBitSW(), fopAcM_GetRoomNo(this));
|
|
}
|
|
dKy_custom_colset(0, 0, 0.0f);
|
|
daPy_getPlayerActorClass()->setGiantPuzzleEnd();
|
|
mDoAud_subBgmStop();
|
|
daNpcT_offTmpBit(0x31);
|
|
mSetWolfHowling = 0;
|
|
dComIfGp_2dShowOn();
|
|
}
|
|
mHide = 1;
|
|
mFadeLightOn = false;
|
|
break;
|
|
case 2:
|
|
mEventTimer = timer;
|
|
break;
|
|
case 3:
|
|
mDoAud_seStart(Z2SE_SY_MG_SEKI_WHITE_OUT, 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
switch (prm) {
|
|
case 0:
|
|
var_r30 = 1;
|
|
break;
|
|
case 1:
|
|
var_r30 = 1;
|
|
break;
|
|
case 2:
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
var_r30 = 1;
|
|
}
|
|
break;
|
|
case 3:
|
|
var_r30 = 1;
|
|
break;
|
|
}
|
|
return var_r30;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD3BD8-80CD3F08 005978 0330+00 1/0 0/0 0/0 .text cutExtinction__15daObj_Sekizoa_cFi
|
|
*/
|
|
int daObj_Sekizoa_c::cutExtinction(int i_staffIdx) {
|
|
cXyz cStack_b0;
|
|
char acStack_a4[100];
|
|
daTag_KMsg_c* actor_0;
|
|
|
|
int ret = 0;
|
|
int prm = -1;
|
|
int timer = 0;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
int* timer_p = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "timer");
|
|
if (timer_p != NULL) {
|
|
timer = *timer_p;
|
|
}
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffIdx) != 0) {
|
|
switch (prm) {
|
|
case 0:
|
|
if (getBitSW2() != 0xff) {
|
|
dComIfGs_onSwitch(getBitSW2(), fopAcM_GetRoomNo(this));
|
|
}
|
|
actor_0 = (daTag_KMsg_c*)mActorMngrs[0].getActorP();
|
|
cStack_b0.set(0.0f, 0.0f, 78.0f);
|
|
mDoMtx_stack_c::YrotS(actor_0->shape_angle.y);
|
|
mDoMtx_stack_c::multVec(&cStack_b0, &cStack_b0);
|
|
cStack_b0 += actor_0->current.pos;
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&cStack_b0,
|
|
actor_0->shape_angle.y - -0x8000, 0);
|
|
strcpy(acStack_a4, l_evtList[9].eventName);
|
|
strcat(acStack_a4, "@");
|
|
dComIfGp_getEvent().setSkipZev(actor_0, acStack_a4);
|
|
dComIfGp_getEvent().onSkipFade();
|
|
actor_0->pullMasterSword();
|
|
dComIfGp_getEvent().setPt2(actor_0);
|
|
break;
|
|
|
|
case 1:
|
|
mBrkAnm.setPlaySpeed(1.0f);
|
|
mBtkAnm.setPlaySpeed(1.0f);
|
|
mSound.startCreatureSound(Z2SE_SEKI_OFF, 0, -1);
|
|
break;
|
|
|
|
case 2:
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 99:
|
|
mBrkAnm.setFrame(mBrkAnm.getEndFrame() - 1.0f);
|
|
mBtkAnm.setFrame(mBtkAnm.getEndFrame() - 1.0f);
|
|
mBrkAnm.setPlaySpeed(1.0f);
|
|
mBtkAnm.setPlaySpeed(1.0f);
|
|
mHide = 1;
|
|
break;
|
|
}
|
|
}
|
|
switch (prm) {
|
|
case 0:
|
|
ret = 1;
|
|
break;
|
|
|
|
case 1:
|
|
mHide = (mBrkAnm.getEndFrame() <= (mBrkAnm.getFrame() + mBrkAnm.getPlaySpeed()));
|
|
if (mHide != 0) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
ret = 1;
|
|
}
|
|
break;
|
|
|
|
case 99:
|
|
ret = 1;
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 80CD3F08-80CD425C 005CA8 0354+00 1/0 0/0 0/0 .text wait__15daObj_Sekizoa_cFPv */
|
|
int daObj_Sekizoa_c::wait(void* param_0) {
|
|
switch (mMode) {
|
|
case 0:
|
|
case 1:
|
|
if (mStagger.checkStagger() == 0) {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
case TYPE_1:
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(getWaitMotionNo(), -1.0f, 0, 0);
|
|
break;
|
|
|
|
case TYPE_2:
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(2, -1.0f, 0, 0);
|
|
break;
|
|
|
|
case TYPE_3:
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(13, -1.0f, 0, 0);
|
|
break;
|
|
|
|
case TYPE_4:
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(2, -1.0f, 0, 0);
|
|
break;
|
|
|
|
case TYPE_5:
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(13, -1.0f, 0, 0);
|
|
break;
|
|
|
|
default:
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
mMotionSeqMngr.setNo(getWaitMotionNo(), -1.0f, 0, 0);
|
|
break;
|
|
}
|
|
mMode = 2;
|
|
}
|
|
case 2:
|
|
if (mStagger.checkStagger() == 0) {
|
|
mJntAnm.lookNone(0);
|
|
}
|
|
attention_info.flags = 0;
|
|
case 3:
|
|
default:
|
|
break;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 80CD425C-80CD45B0 005FFC 0354+00 1/0 0/0 0/0 .text puzzle__15daObj_Sekizoa_cFPv */
|
|
int daObj_Sekizoa_c::puzzle(void* param_0) {
|
|
switch (mMode) {
|
|
case 0:
|
|
case 1:
|
|
if (mStagger.checkStagger() == 0) {
|
|
mFaceMotionSeqMngr.setNo(0, -1.0f, 0, 0);
|
|
if (daNpcT_chkTmpBit(0x31)) {
|
|
mMotionSeqMngr.setNo(getGameMotionNo(), -1.0f, 0, 0);
|
|
} else {
|
|
switch (mType) {
|
|
case TYPE_0:
|
|
mMotionSeqMngr.setNo(2, -1.0f, 0, 0);
|
|
break;
|
|
|
|
case TYPE_1:
|
|
mMotionSeqMngr.setNo(13, -1.0f, 0, 0);
|
|
break;
|
|
|
|
case TYPE_2:
|
|
case TYPE_3:
|
|
case TYPE_4:
|
|
case TYPE_5:
|
|
mMotionSeqMngr.setNo(getWaitMotionNo(), -1.0f, 0, 0);
|
|
break;
|
|
|
|
default:
|
|
mMotionSeqMngr.setNo(getWaitMotionNo(), -1.0f, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
mMode = 2;
|
|
}
|
|
case 2:
|
|
if (mStagger.checkStagger() == 0) {
|
|
if (daNpcT_chkTmpBit(0x31)) {
|
|
if (mType == TYPE_0) {
|
|
attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
|
|
}
|
|
if (daPy_getPlayerActorClass()->checkPlayerFly() != 0) {
|
|
if (mType == TYPE_0) {
|
|
mLatencyTime = daObj_Sekizoa_Param_c::m.field_0x98;
|
|
mEvtNo = 5;
|
|
}
|
|
} else {
|
|
if (mTurnPlayer == 0) {
|
|
if (daPy_getPlayerActorClass()->shape_angle.y !=
|
|
daPy_getPlayerActorClass()->getGiantPuzzleAimAngle())
|
|
{
|
|
mTurnPlayer = 1;
|
|
} else {
|
|
mPlayerDirection = daPy_getPlayerActorClass()->shape_angle.y;
|
|
}
|
|
}
|
|
if (mTurnPlayer != 0 && mType == TYPE_0) {
|
|
mEvtNo = 4;
|
|
}
|
|
}
|
|
} else {
|
|
if (mType == TYPE_0 && mSetWolfHowling != 0 && getBitSW2() != 0xFF) {
|
|
if (!dComIfGs_isSwitch(getBitSW2(), fopAcM_GetRoomNo(this))) {
|
|
field_0xe33 = 1;
|
|
mEvtNo = 2;
|
|
}
|
|
}
|
|
}
|
|
mJntAnm.lookNone(0);
|
|
}
|
|
|
|
case 3:
|
|
default:
|
|
break;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 80CD45B0-80CD4778 006350 01C8+00 2/0 0/0 0/0 .text talk__15daObj_Sekizoa_cFPv */
|
|
int daObj_Sekizoa_c::talk(void* param_0) {
|
|
switch (mMode) {
|
|
case 0:
|
|
case 1:
|
|
if (mStagger.checkStagger() == 0) {
|
|
initTalk(mFlowNodeNo, NULL);
|
|
mMode = 2;
|
|
}
|
|
case 2:
|
|
if (mStagger.checkStagger() == 0) {
|
|
if (mTwilight != 0 || mPlayerAngle == mCurAngle.y) {
|
|
if (talkProc(NULL, 0, NULL, 0) && mFlow.checkEndFlow()) {
|
|
mPlayerActorMngr.entry(daPy_getPlayerActorClass());
|
|
dComIfGp_event_reset();
|
|
mMode = 3;
|
|
}
|
|
mJntAnm.lookPlayer(0);
|
|
if (mTwilight != 0) {
|
|
mJntAnm.lookNone(0);
|
|
}
|
|
} else {
|
|
mJntAnm.lookPlayer(0);
|
|
step(mPlayerAngle, -1, -1, 0xF, 0);
|
|
}
|
|
}
|
|
|
|
case 3:
|
|
default:
|
|
return 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 80CD4778-80CD4798 006518 0020+00 1/0 0/0 0/0 .text daObj_Sekizoa_Create__FPv */
|
|
static int daObj_Sekizoa_Create(void* i_this) {
|
|
return static_cast<daObj_Sekizoa_c*>(i_this)->create();
|
|
}
|
|
|
|
/* 80CD4798-80CD47B8 006538 0020+00 1/0 0/0 0/0 .text daObj_Sekizoa_Delete__FPv */
|
|
static int daObj_Sekizoa_Delete(void* i_this) {
|
|
return static_cast<daObj_Sekizoa_c*>(i_this)->Delete();
|
|
}
|
|
|
|
/* 80CD47B8-80CD47D8 006558 0020+00 1/0 0/0 0/0 .text daObj_Sekizoa_Execute__FPv */
|
|
static int daObj_Sekizoa_Execute(void* i_this) {
|
|
return static_cast<daObj_Sekizoa_c*>(i_this)->Execute();
|
|
}
|
|
|
|
/* 80CD47D8-80CD47F8 006578 0020+00 1/0 0/0 0/0 .text daObj_Sekizoa_Draw__FPv */
|
|
static int daObj_Sekizoa_Draw(void* i_this) {
|
|
return static_cast<daObj_Sekizoa_c*>(i_this)->Draw();
|
|
}
|
|
|
|
/* 80CD47F8-80CD4800 006598 0008+00 1/0 0/0 0/0 .text daObj_Sekizoa_IsDelete__FPv */
|
|
static int daObj_Sekizoa_IsDelete(void* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
|
|
/* 80CD695C-80CD6960 000084 0004+00 0/1 0/0 0/0 .bss l_HIO */
|
|
static daObj_Sekizoa_Param_c l_HIO;
|
|
|
|
/* 80CD671C-80CD673C -00001 0020+00 1/0 0/0 0/0 .data daObj_Sekizoa_MethodTable */
|
|
static actor_method_class daObj_Sekizoa_MethodTable = {
|
|
daObj_Sekizoa_Create, daObj_Sekizoa_Delete, daObj_Sekizoa_Execute,
|
|
daObj_Sekizoa_IsDelete, daObj_Sekizoa_Draw,
|
|
};
|
|
|
|
/* 80CD673C-80CD676C -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_SEKIZOA */
|
|
extern actor_process_profile_definition g_profile_OBJ_SEKIZOA = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
3, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_OBJ_SEKIZOA, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daObj_Sekizoa_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
0x12, // mPriority
|
|
&daObj_Sekizoa_MethodTable, // sub_method
|
|
0x00040000, // mStatus
|
|
fopAc_ACTOR_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|
|
|
|
AUDIO_INSTANCES
|