Files
dusklight/src/d/actor/d_a_npc_fairy.cpp
T
2026-03-12 17:56:51 -07:00

3078 lines
77 KiB
C++

/**
* @file d_a_npc_fairy.cpp
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_fairy.h"
#include "d/actor/d_a_npc4.h"
#include "d/d_s_play.h"
#include "JSystem/JHostIO/JORFile.h"
#include <cstring>
enum fairy_RES_File_ID {
/* BCK */
/* 0x09 */ BCK_FAIRY_F_SAD = 0x9,
/* 0x0A */ BCK_FAIRY_F_SMILE,
/* 0x0B */ BCK_FAIRY_F_TALK,
/* 0x0C */ BCK_FAIRY_FH_SMILE,
/* 0x0D */ BCK_FAIRY_GO,
/* 0x0E */ BCK_FAIRY_GOWAIT,
/* Wing BCKs | "Hane" = Feather */
/* 0x0F */ BCK_FAIRY_HANE_GETUP,
/* 0x10 */ BCK_FAIRY_HANE_NON,
/* 0x11 */ BCK_FAIRY_HANE_SITWAIT,
/* 0x12 */ BCK_FAIRY_HANE_SYUTU,
/* 0x13 */ BCK_FAIRY_HANE_WAIT,
/* 0x14 */ BCK_FAIRY_HANE_WALK,
/* ---------------------------- */
/* 0x15 */ BCK_FAIRY_HOPPE,
/* 0x16 */ BCK_FAIRY_HOPPE_WAIT,
/* 0x17 */ BCK_FAIRY_SIT_A,
/* 0x18 */ BCK_FAIRY_SIT_B,
/* 0x19 */ BCK_FAIRY_SIT_GO,
/* 0x1A */ BCK_FAIRY_SIT_GOWAIT,
/* 0x1B */ BCK_FAIRY_SITTALK,
/* 0x1C */ BCK_FAIRY_STANDUP,
/* 0x1D */ BCK_FAIRY_WAIT,
/* 0x1E */ BCK_FAIRY_WALK,
/* BMDV */
/* 0x21 */ BMDV_FAIRY = 0x21,
/* 0x22 */ BMDV_FAIRY_FEATHER_GT,
/* BPK */
/* 0x25 */ BPK_FAIRY = 0x25,
/* BRK */
/* 0x28 */ BRK_FAIRY = 0x28,
/* 0x29 */ BRK_FAIRY_FEATHER_GT,
/* BTK */
/* 0x2C */ BTK_FAIRY = 0x2C,
/* 0x2D */ BTK_FAIRY_FEATHER_GT,
/* BTP */
/* 0x30 */ BTP_FAIRY = 0x30,
/* 0x31 */ BTP_FAIRY_F_SAD,
/* 0x32 */ BTP_FAIRY_F_SMILE,
/* 0x33 */ BTP_FAIRY_F_TALK,
/* EVT */
/* 0x36 */ EVT_FAIRY_EVENT_LIST = 0x36,
};
enum RES_Name {
/* 0x0 */ NONE,
/* 0x1 */ FAIRY,
};
enum Animation {
/* 0x0 */ ANM_WAIT,
/* 0x1 */ ANM_GO,
/* 0x2 */ ANM_GOWAIT,
/* 0x3 */ ANM_SIT_A,
/* 0x4 */ ANM_SIT_B,
/* 0x5 */ ANM_SIT_GO,
/* 0x6 */ ANM_SIT_GOWAIT,
/* 0x7 */ ANM_SITTALK,
/* 0x8 */ ANM_STANDUP,
/* 0x9 */ ANM_WALK,
/* 0xA */ ANM_HOPPE,
/* 0xB */ ANM_HOPPE_WAIT,
};
enum Feather_Anm {
/* 0x0 */ ANM_FEATHER_NON,
/* 0x1 */ ANM_FEATHER_SYUTU,
/* 0x2 */ ANM_FEATHER_SITWAIT,
/* 0x3 */ ANM_FEATHER_WAIT,
/* 0x4 */ ANM_FEATHER_GETUP,
/* 0x5 */ ANM_FEATHER_WALK,
};
enum Face_Motion {
/* 0x0 */ FACE_MOT_TALK,
/* 0x1 */ FACE_MOT_SMILE,
/* 0x2 */ FACE_MOT_SAD,
/* 0x3 */ FACE_MOT_H_SMILE,
/* 0x4 */ FACE_MOT_NONE,
};
enum Motion {
/* 0x0 */ MOT_SIT_A,
/* 0x1 */ MOT_SITTALK,
/* 0x2 */ MOT_SIT_GO,
/* 0x3 */ MOT_WAIT,
/* 0x4 */ MOT_WALK,
/* 0x5 */ MOT_HOPPE,
/* 0x6 */ MOT_GO,
/* 0x7 */ MOT_HOPPE_WAIT,
/* 0x8 */ MOT_SIT_B,
/* 0x9 */ MOT_SIT_A_2,
/* 0xA */ MOT_STANDUP,
};
enum Event {
/* 0x00 */ EVT_NONE,
/* 0x01 */ EVT_APPEAR_10F_01,
/* 0x02 */ EVT_APPEAR_10F_02,
/* 0x03 */ EVT_APPEAR_20F_01,
/* 0x04 */ EVT_APPEAR_20F_02,
/* 0x05 */ EVT_APPEAR_30F_01,
/* 0x06 */ EVT_APPEAR_30F_02,
/* 0x07 */ EVT_APPEAR_40F_01,
/* 0x08 */ EVT_APPEAR_40F_02,
/* 0x09 */ EVT_APPEAR_50F_01,
/* 0x0A */ EVT_APPEAR_50F_02,
/* 0x0B */ EVT_APPEAR_50F_03,
/* 0x0C */ EVT_APPEAR_50F_04,
/* 0x0D */ EVT_APPEAR_50F_05,
/* 0x0E */ EVT_SELECT_RETURN1,
/* 0x0F */ EVT_SELECT_RETURN2,
/* 0x10 */ EVT_SELECT_RETURN3,
/* 0x11 */ EVT_RETURN_CANCEL,
};
enum Type {
/* 0x0 */ TYPE_10F,
/* 0x1 */ TYPE_20F,
/* 0x2 */ TYPE_30F,
/* 0x3 */ TYPE_40F,
/* 0x4 */ TYPE_50F,
};
const daNpc_Fairy_HIOParam daNpc_Fairy_Param_c::m = {
190.0f,
-3.0f,
1.0f,
700.0f,
255.0f,
170.0f,
35.0f,
30.0f,
0.0f,
0.0f,
10.0f,
-10.0f,
30.0f,
-10.0f,
45.0f,
-45.0f,
0.6f,
12.0f,
3,
6,
5,
6,
110.0f,
0.0f,
0.0f,
0.0f,
60,
8,
0,
0,
0,
0,
0,
4.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
60.0f,
200.0f,
};
#if DEBUG
daNpc_Fairy_HIO_c::daNpc_Fairy_HIO_c() {
m = daNpc_Fairy_Param_c::m;
}
void daNpc_Fairy_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) {
char buffer[2000];
JORReflexible::listenPropertyEvent(event);
JORFile jorFile;
int len;
switch ((u32)event->id) {
case 0x40000002:
if (jorFile.open(6, "", NULL, NULL, NULL)) {
memset(buffer, 0, sizeof(buffer));
len = 0;
daNpcT_cmnListenPropertyEvent(buffer, &len, &m.common);
jorFile.writeData(buffer, len);
jorFile.close();
OS_REPORT("write append success!::%6d\n", len);
} else {
OS_REPORT("write append failure!\n");
}
break;
}
}
void daNpc_Fairy_HIO_c::genMessage(JORMContext* ctx) {
daNpcT_cmnGenMessage(ctx, &m.common);
ctx->genSlider("残留思念の幅", &m.spirit_width, 0.0f, 1000.0f);
ctx->genSlider("残留思念の高さ", &m.spirit_height, 0.0f, 1000.0f);
ctx->genButton("ファイル書き出し", 0x40000002);
}
#endif
BOOL _Fairy_Feather_c::create() {
if (!loadModel()) {
return FALSE;
}
if (!setAnm(ANM_FEATHER_WAIT)) {
OS_REPORT("--------------------------ANIMATION SET FAILED!!\n");
return FALSE;
}
if (!setBrk(0)) {
OS_REPORT("--------------------------BRK SET FAILED!!\n");
return FALSE;
}
if (!setBtk(0)) {
OS_REPORT("--------------------------BTK SET FAILED!!\n");
return FALSE;
}
playAnm();
return TRUE;
}
static char* l_resNameList[2] = {
"",
"fairy",
};
static s8 l_loadResPtrn0[2] = {
1, -1,
};
static s8* l_loadResPtrnList[5] = {
l_loadResPtrn0, l_loadResPtrn0, l_loadResPtrn0,
l_loadResPtrn0, l_loadResPtrn0,
};
static int l_bmdData[1][2] = {
{BMDV_FAIRY, FAIRY},
};
static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[5] = {
{-1, J3DFrameCtrl::EMode_NONE, NONE,BTP_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1},
{BCK_FAIRY_F_SAD, J3DFrameCtrl::EMode_LOOP, FAIRY, BTP_FAIRY_F_SAD, J3DFrameCtrl::EMode_LOOP, FAIRY, 1},
{BCK_FAIRY_F_SMILE, J3DFrameCtrl::EMode_NONE, FAIRY, BTP_FAIRY_F_SMILE, J3DFrameCtrl::EMode_NONE, FAIRY, 1},
{BCK_FAIRY_F_TALK, J3DFrameCtrl::EMode_NONE, FAIRY, BTP_FAIRY_F_TALK, J3DFrameCtrl::EMode_NONE, FAIRY, 1},
{BCK_FAIRY_FH_SMILE, J3DFrameCtrl::EMode_LOOP, FAIRY, BTP_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1},
};
static daNpcT_motionAnmData_c l_motionAnmData[12] = {
{BCK_FAIRY_WAIT, J3DFrameCtrl::EMode_LOOP, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_GO, J3DFrameCtrl::EMode_NONE, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_GOWAIT, J3DFrameCtrl::EMode_LOOP, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_SIT_A, J3DFrameCtrl::EMode_LOOP, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_SIT_B, J3DFrameCtrl::EMode_LOOP, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_SIT_GO, J3DFrameCtrl::EMode_NONE, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_SIT_GOWAIT, J3DFrameCtrl::EMode_LOOP, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_SITTALK, J3DFrameCtrl::EMode_NONE, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_STANDUP, J3DFrameCtrl::EMode_NONE, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_WALK, J3DFrameCtrl::EMode_LOOP, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_HOPPE, J3DFrameCtrl::EMode_NONE, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
{BCK_FAIRY_HOPPE_WAIT, J3DFrameCtrl::EMode_LOOP, FAIRY, BTK_FAIRY, J3DFrameCtrl::EMode_LOOP, FAIRY, 1, 0},
};
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[20] = {
{3, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{2, -1, 1}, {4, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
{1, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{4, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
};
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[44] = {
{3, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{7, -1, 1}, {3, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
{5, -1, 1}, {6, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
{0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{9, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{10, -1, 1}, {11, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
{1, -1, 1}, {2, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
{11, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{4, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{3, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{8, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
};
BOOL _Fairy_Feather_c::loadModel() {
// ----------------Loading wing model.\n
OS_REPORT("---------------- 羽モデルを読み込みます。\n");
J3DModelData* mdlData_p = NULL;
mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[1], BMDV_FAIRY_FEATHER_GT);
OS_REPORT("----------- RESOURCE NAME = %s\n", l_resNameList[1]);
JUT_ASSERT(674, NULL != mdlData_p);
u32 uVar1 = 0x11000284;
mpMorf = JKR_NEW mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, J3DMdlFlag_None, uVar1);
if (mpMorf != NULL && mpMorf->getModel() == NULL) {
mpMorf->stopZelAnime();
mpMorf = NULL;
}
if (mpMorf == NULL) {
// ----------------Failed to load wing model\n
OS_REPORT("---------------- 羽モデル読み込み失敗\n");
return 0;
}
J3DModel* mdl_p = mpMorf->getModel();
for (u16 i = 0; i < 26; i++) {
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
}
// ---------------- Wing model generation complete\n
OS_REPORT("---------------- 羽モデル生成完了\n");
return 1;
}
BOOL _Fairy_Feather_c::setAnm(int i_idx) {
if (i_idx == mPrevAnm) {
return TRUE;
}
static daNpc_GetParam2 const sBckPrm[6] = {
{BCK_FAIRY_HANE_NON, J3DFrameCtrl::EMode_LOOP, FAIRY},
{BCK_FAIRY_HANE_SYUTU, J3DFrameCtrl::EMode_NONE, FAIRY},
{BCK_FAIRY_HANE_SITWAIT, J3DFrameCtrl::EMode_LOOP, FAIRY},
{BCK_FAIRY_HANE_WAIT, J3DFrameCtrl::EMode_LOOP, FAIRY},
{BCK_FAIRY_HANE_GETUP, J3DFrameCtrl::EMode_NONE, FAIRY},
{BCK_FAIRY_HANE_WALK, J3DFrameCtrl::EMode_LOOP, FAIRY},
};
J3DAnmTransform* anm = NULL;
anm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes(l_resNameList[sBckPrm[i_idx].arcIdx], sBckPrm[i_idx].fileIdx));
if (anm == NULL) {
return FALSE;
}
f32 i_morf = 0.0f;
if (i_idx == ANM_FEATHER_WAIT) {
if (mPrevAnm == ANM_FEATHER_WALK) {
i_morf = 12.0f;
}
} else if (i_idx == ANM_FEATHER_WALK && mPrevAnm == ANM_FEATHER_WAIT) {
i_morf = 12.0f;
}
mpMorf->setAnm(anm, sBckPrm[i_idx].attr, i_morf, 1.0f, 0.0f, -1.0f);
mpMorf->setPlaySpeed(1.0f);
mPrevAnm = i_idx;
return TRUE;
}
BOOL _Fairy_Feather_c::setBrk(int i_idx) {
static daNpc_GetParam2 const sBrkPrm[1] = {
{BRK_FAIRY_FEATHER_GT, J3DFrameCtrl::EMode_LOOP, FAIRY},
};
J3DAnmTevRegKey* brk = NULL;
brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_resNameList[sBrkPrm[i_idx].arcIdx], sBrkPrm[i_idx].fileIdx);
if (brk == NULL) {
return FALSE;
}
return mBrkAnm.init(mpMorf->getModel()->getModelData(), brk, 1, sBrkPrm[i_idx].attr, 1.0f, 0, -1);
}
BOOL _Fairy_Feather_c::setBtk(int i_idx) {
static daNpc_GetParam2 const sBtkPrm[1] = {
{BTK_FAIRY_FEATHER_GT, J3DFrameCtrl::EMode_LOOP, FAIRY},
};
J3DAnmTextureSRTKey* btk = NULL;
btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_resNameList[sBtkPrm[i_idx].arcIdx], sBtkPrm[i_idx].fileIdx);
if (btk == NULL) {
return FALSE;
}
return mBtkAnm.init(mpMorf->getModel()->getModelData(), btk, 1, sBtkPrm[i_idx].attr, 1.0f, 0, -1);
}
int _Fairy_Feather_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) {
return 1;
}
void _Fairy_Feather_c::connect(daNpc_Fairy_c* i_this) {
J3DModel* mdl_p = i_this->mpMorf[0]->getModel();
mDoMtx_stack_c::copy(mdl_p->getAnmMtx(JNT_FEATHER1AL1));
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
mpMorf->modelCalc();
}
void _Fairy_Feather_c::draw(daNpc_Fairy_c* i_this) {
cXyz pos(fopAcM_GetPosition(i_this));
dKy_tevstr_c tevStr = i_this->tevStr;
J3DModel* mdl_p = mpMorf->getModel();
g_env_light.settingTevStruct(0, &pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mdl_p, &tevStr);
J3DModelData* mdlData_p = mdl_p->getModelData();
mBtkAnm.entry(mdlData_p);
mBrkAnm.entry(mdlData_p);
mpMorf->entryDL();
mBrkAnm.remove(mdlData_p);
mBtkAnm.remove(mdlData_p);
}
static daNpcT_evtData_c l_evtList[18] = {
{"", 0},
{"APPEAR_10F_01", 1},
{"APPEAR_10F_02", 1},
{"APPEAR_20F_01", 1},
{"APPEAR_20F_02", 1},
{"APPEAR_30F_01", 1},
{"APPEAR_30F_02", 1},
{"APPEAR_40F_01", 1},
{"APPEAR_40F_02", 1},
{"APPEAR_50F_01", 1},
{"APPEAR_50F_02", 1},
{"APPEAR_50F_03", 1},
{"APPEAR_50F_04", 1},
{"APPEAR_50F_05", 1},
{"SELECT_RETURN1", 1},
{"SELECT_RETURN2", 1},
{"SELECT_RETURN3", 1},
{"RETURN_CANCEL", 1},
};
char* daNpc_Fairy_c::mCutNameList[18] = {
"",
"APPEAR_10F_01",
"APPEAR_10F_02",
"APPEAR_20F_01",
"APPEAR_20F_02",
"APPEAR_30F_01",
"APPEAR_30F_02",
"APPEAR_40F_01",
"APPEAR_40F_02",
"APPEAR_50F_01",
"APPEAR_50F_02",
"APPEAR_50F_03",
"APPEAR_50F_04",
"APPEAR_50F_05",
"SELECT_RETURN1",
"SELECT_RETURN2",
"SELECT_RETURN3",
"RETURN_CANCEL",
};
daNpc_Fairy_c::cutFunc daNpc_Fairy_c::mCutList[18] = {
NULL,
&daNpc_Fairy_c::cutAppear_10F_01,
&daNpc_Fairy_c::cutAppear_10F_02,
&daNpc_Fairy_c::cutAppear_20F_01,
&daNpc_Fairy_c::cutAppear_20F_02,
&daNpc_Fairy_c::cutAppear_30F_01,
&daNpc_Fairy_c::cutAppear_30F_02,
&daNpc_Fairy_c::cutAppear_40F_01,
&daNpc_Fairy_c::cutAppear_40F_02,
&daNpc_Fairy_c::cutAppear_50F_01,
&daNpc_Fairy_c::cutAppear_50F_02,
&daNpc_Fairy_c::cutAppear_50F_03,
&daNpc_Fairy_c::cutAppear_50F_04,
&daNpc_Fairy_c::cutAppear_50F_05,
&daNpc_Fairy_c::cutSelect_Return1,
&daNpc_Fairy_c::cutSelect_Return2,
&daNpc_Fairy_c::cutSelect_Return3,
&daNpc_Fairy_c::cutReturnCancel,
};
daNpc_Fairy_c::~daNpc_Fairy_c() {
OS_REPORT("|%06d:%x|daNpc_Fairy_c -> デストラクト\n", g_Counter.mCounter0, this);
if (heap != NULL) {
mpMorf[0]->stopZelAnime();
}
#if DEBUG
if (mHIO != NULL) {
mHIO->removeHIO();
}
#endif
deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
}
static NPC_FAIRY_HIO_CLASS l_HIO;
cPhs_Step daNpc_Fairy_c::Create() {
daNpcT_ct(this, daNpc_Fairy_c, l_faceMotionAnmData, l_motionAnmData,
l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList);
mType = getType();
mFlowNodeNo = getFlowNodeNo();
mTwilight = false;
cPhs_Step phase = loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
if (phase == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x8000)) {
return cPhs_ERROR_e;
}
OS_REPORT("\t(%s:%d) flowNo:%d<%08x> ", fopAcM_getProcNameString(this), mType, mFlowNodeNo, fopAcM_GetParam(this));
if (isDelete()) {
OS_REPORT("===>isDelete:TRUE\n");
return cPhs_ERROR_e;
}
OS_REPORT("\n");
J3DModelData* mdlData_p = mpMorf[0]->getModel()->getModelData();
fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -300.0f, -200.0f, -400.0f, 300.0f, 200.0f, 200.0f);
mSound.init(&current.pos, &eyePos, 3, 1);
#if DEBUG
mHIO = &l_HIO;
mHIO->entryHIO("大妖精");
#endif
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(mHIO->m.common.weight, 0, this);
mCyl.Set(mCcDCyl);
mCyl.SetStts(&mCcStts);
mCyl.SetTgHitCallback(tgHitCallBack);
mAcch.CrrPos(dComIfG_Bgsp());
mGndChk = mAcch.m_gnd;
mGroundH = mAcch.GetGroundH();
if (mGroundH != -G_CM3D_F_INF) {
setEnvTevColor();
setRoomNo();
}
reset();
mCreating = true;
Execute();
mCreating = false;
}
return phase;
}
int daNpc_Fairy_c::CreateHeap() {
int arc_idx = 0;
int file_idx = 0;
J3DModelData* mdlData_p = NULL;
arc_idx = l_bmdData[0][1];
file_idx = l_bmdData[0][0];
mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arc_idx], file_idx);
JUT_ASSERT(1113, NULL != mdlData_p);
u32 uVar1 = 0x11020285;
mpMorf[0] = JKR_NEW mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, J3DMdlFlag_None, uVar1);
if (mpMorf[0] != NULL && mpMorf[0]->getModel() == NULL) {
mpMorf[0]->stopZelAnime();
mpMorf[0] = NULL;
}
if (mpMorf[0] == NULL) {
return 0;
}
J3DModel* mdl_p = mpMorf[0]->getModel();
for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
}
if (!mFairyFeather.create()) {
return 0;
}
mdl_p->setUserArea((uintptr_t)this);
mpMatAnm[0] = JKR_NEW daNpcT_MatAnm_c();
if (mpMatAnm[0] == NULL) {
return 0;
}
setAnmData();
if (setFaceMotionAnm(1, false) && setMotionAnm(ANM_WAIT, 0.0f, 0)) {
return 1;
}
return 1;
}
void daNpc_Fairy_c::setAnmData() {
J3DModelData* mdlData_p = mpMorf[0]->getModel()->getModelData();
J3DAnmColor* bpk = getColorAnmP(l_resNameList[1], BPK_FAIRY);
if (bpk != NULL) {
setBpkAnm(bpk, mdlData_p, 1.0f, J3DFrameCtrl::EMode_LOOP);
}
J3DAnmTevRegKey* brk = getTevRegKeyAnmP(l_resNameList[1], BRK_FAIRY);
if (brk != NULL) {
setBrkAnm(brk, mdlData_p, 1.0f, J3DFrameCtrl::EMode_LOOP);
}
J3DAnmTextureSRTKey* btk = getTexSRTKeyAnmP(l_resNameList[1], BTK_FAIRY);
if (btk != NULL) {
setBtkAnm(btk, mdlData_p, 1.0f, J3DFrameCtrl::EMode_LOOP);
}
mAnmFlags |= ANM_PLAY_BPK | ANM_PLAY_BRK | ANM_PLAY_BTK;
}
bool daNpc_Fairy_c::setMotionAnm(int i_idx, f32 i_morf, int param_3) {
J3DAnmTransformKey* anm = NULL;
J3DAnmTextureSRTKey* btk = NULL;
int unused = 0;
mAnmFlags &= ~(ANM_PLAY_BPK | ANM_PLAY_BRK | ANM_PLAY_BTK | ANM_PLAY_MORF | ANM_PAUSE_BPK | ANM_PAUSE_BRK | ANM_PAUSE_BTK | ANM_PAUSE_MORF);
daNpcT_motionAnmData_c anmData = getMotionAnm(mpMotionAnmData[i_idx]);
if (anmData.mBckFileIdx != -1) {
anm = getTrnsfrmKeyAnmP(mpArcNames[anmData.mBckArcIdx], anmData.mBckFileIdx);
}
if (param_3 != 0 && anm == mpMorf[0]->getAnm()) {
mAnmFlags |= ANM_PLAY_MORF;
mMorfLoops = 0;
unused = 1;
} else if (setMcaMorfAnm(anm, 1.0f, i_morf, anmData.mBckAttr, 0, -1) != 0) {
mAnmFlags |= ANM_PLAY_MORF | ANM_PAUSE_MORF;
mMorfLoops = 0;
} else {
anm = NULL;
}
if (anm == NULL && anmData.mBckFileIdx != -1) {
return false;
}
field_0xe29 = 0;
field_0xe2a = 0;
if (anmData.mBtkFileIdx != -1) {
int arc_idx = anmData.mBtkArcIdx;
int file_idx = anmData.mBtkFileIdx;
changeBtk(&file_idx, &arc_idx);
field_0xe29 = anmData.field_0x18;
field_0xe2a = anmData.field_0x1a;
btk = getTexSRTKeyAnmP(mpArcNames[arc_idx], file_idx);
}
mAnmFlags |= ANM_PLAY_BTK;
if (btk == NULL && anmData.mBtkFileIdx != -1) {
return false;
}
mAnmFlags |= ANM_PLAY_BPK | ANM_PLAY_BRK | ANM_PLAY_BTK;
return daNpc_Fairy_c::afterSetMotionAnm(i_idx, anmData.mBckAttr, i_morf, anmData.mBtkAttr);
}
bool daNpc_Fairy_c::afterSetMotionAnm(int i_idx, int i_bck_attr, f32 i_morf, int i_btk_attr) {
int feather_bck;
if (mUnkFlag == 0) {
return true;
}
switch (i_idx) {
case ANM_SIT_A:
case ANM_SIT_B:
case ANM_SIT_GO:
case ANM_SIT_GOWAIT:
case ANM_SITTALK:
feather_bck = ANM_FEATHER_SITWAIT;
break;
case ANM_STANDUP:
feather_bck = ANM_FEATHER_GETUP;
break;
case ANM_WALK:
feather_bck = ANM_FEATHER_WALK;
break;
default:
feather_bck = ANM_FEATHER_WAIT;
break;
}
OS_REPORT("feather_bck=%d\n", feather_bck);
return mFairyFeather.setAnm(feather_bck);
}
int daNpc_Fairy_c::Delete() {
OS_REPORT("|%06d:%x|daNpc_Fairy_c -> Delete\n", g_Counter.mCounter0, this);
fopAcM_RegisterDeleteID(this, "NPC_FAIRY");
this->~daNpc_Fairy_c();
return 1;
}
int daNpc_Fairy_c::Execute() {
int rv = execute();
mFairyFeather.playAnm();
mFairyFeather.output_anmframe();
return rv;
}
int daNpc_Fairy_c::Draw() {
if (mStatus == 1) {
return 1;
}
if (mpMatAnm[0] != NULL) {
J3DModelData* mdlData_p = mpMorf[0]->getModel()->getModelData();
mdlData_p->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]);
}
return draw(NpcT_CHK_ACTION(daNpc_Fairy_c), TRUE, mRealShadowSize, NULL, 100.0f, FALSE, FALSE, FALSE);
}
void daNpc_Fairy_c::drawOtherMdl() {
mFairyFeather.connect(this);
mFairyFeather.draw(this);
}
int daNpc_Fairy_c::createHeapCallBack(fopAc_ac_c* actor) {
daNpc_Fairy_c* i_this = (daNpc_Fairy_c*)actor;
return i_this->CreateHeap();
}
int daNpc_Fairy_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) {
if (param_2 == 0) {
J3DModel* mdl_p = j3dSys.getModel();
daNpc_Fairy_c* actor = (daNpc_Fairy_c*)mdl_p->getUserArea();
if (actor != NULL) {
actor->ctrlJoint(i_joint, mdl_p);
}
}
return 1;
}
BOOL daNpc_Fairy_c::isDelete() {
return FALSE;
}
void daNpc_Fairy_c::reset() {
initialize();
if (mpMatAnm[0] != NULL) {
mpMatAnm[0]->initialize();
}
mPrtclTimer = 10;
mPaPo.init(&mAcch, mHIO->m.common.height, mHIO->m.common.height);
setAngle(home.angle.y);
initStatus();
mSwitchBit = getSwitchBitNo();
mTempBit = -1;
if (mType == TYPE_50F) {
mTempBit = chk_tempbit();
OS_REPORT("-------------daNpc_Fairy_c::chk temp bit mTempBit=%d\n", mTempBit);
if (mTempBit >= 0) {
mFlowNodeNo = 0xBC8;
}
}
mUnkFlag = 0;
mAction = NULL;
setAction(&daNpc_Fairy_c::wait, 0);
}
void daNpc_Fairy_c::initStatus() {
mStatus = 1;
}
void daNpc_Fairy_c::afterJntAnm(int i_joint) {
if (i_joint == JNT_BACKBONE1) {
mDoMtx_stack_c::YrotM(mStagger.getAngleZ(1));
mDoMtx_stack_c::ZrotM(-mStagger.getAngleX(1));
} else if (i_joint == JNT_HEAD) {
mDoMtx_stack_c::YrotM(mStagger.getAngleZ(0));
mDoMtx_stack_c::ZrotM(-mStagger.getAngleX(0));
}
}
void daNpc_Fairy_c::setParam() {
srchActors();
s16 talk_distance = mHIO->m.common.talk_distance;
s16 talk_angle = mHIO->m.common.talk_angle;
s16 attention_distance = mHIO->m.common.attention_distance;
s16 attention_angle = mHIO->m.common.attention_angle;
if (mStatus == 1) {
talk_distance = 7;
attention_distance = 9;
}
attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
scale.set(mHIO->m.common.scale, mHIO->m.common.scale, mHIO->m.common.scale);
mCcStts.SetWeight(mHIO->m.common.weight);
if (mStatus == 0) {
mCylH = mHIO->m.common.height;
mWallR = mHIO->m.common.width;
} else if (mStatus == 1) {
mCylH = mHIO->m.spirit_height;
mWallR = mHIO->m.spirit_width;
}
mAttnFovY = mHIO->m.common.fov;
mAcchCir.SetWallR(mWallR);
mAcchCir.SetWallH(mHIO->m.common.knee_length);
mRealShadowSize = mHIO->m.common.real_shadow_size;
gravity = mHIO->m.common.gravity;
mExpressionMorfFrame = mHIO->m.common.expression_morf_frame;
mMorfFrames = mHIO->m.common.morf_frame;
}
BOOL daNpc_Fairy_c::checkChangeEvt() {
return FALSE;
}
void daNpc_Fairy_c::setAfterTalkMotion() {
int idx;
switch (mFaceMotionSeqMngr.getNo()) {
case FACE_MOT_SMILE:
idx = FACE_MOT_H_SMILE;
break;
default:
idx = FACE_MOT_NONE;
break;
}
mFaceMotionSeqMngr.setNo(idx, -1.0f, FALSE, 0);
}
void daNpc_Fairy_c::srchActors() {
/* empty function */
}
BOOL daNpc_Fairy_c::evtTalk() {
if (chkAction(&daNpc_Fairy_c::talk)) {
(this->*mAction)(0);
} else {
mPreItemNo = 0;
if (dComIfGp_event_chkTalkXY()) {
if (!dComIfGp_evmng_ChkPresentEnd()) {
return TRUE;
}
dComIfGp_event_reset();
return TRUE;
}
setAction(&daNpc_Fairy_c::talk, 0);
}
return TRUE;
}
BOOL daNpc_Fairy_c::evtCutProc() {
BOOL rv = FALSE;
s32 staffId = dComIfGp_getEventManager().getMyStaffId("Fairy", this, -1);
if (staffId != -1) {
mStaffId = staffId;
int act_idx = dComIfGp_getEventManager().getMyActIdx(mStaffId, mCutNameList, 0x12, FALSE, FALSE);
if ((this->*mCutList[act_idx])(mStaffId)) {
dComIfGp_getEventManager().cutEnd(mStaffId);
}
rv = TRUE;
}
return rv;
}
BOOL daNpc_Fairy_c::evtEndProc() {
OS_REPORT("------------------evt end proc!!\n");
switch (field_0xff4) {
case EVT_SELECT_RETURN1:
case EVT_SELECT_RETURN3:
if (mFlow.getChoiceNo() == 0) {
mEvtNo = EVT_SELECT_RETURN2;
} else {
mEvtNo = EVT_RETURN_CANCEL;
Z2GetAudioMgr()->bgmStreamStop(0x2D);
}
field_0xff4 = mEvtNo;
evtChange();
break;
case EVT_SELECT_RETURN2:
default:
dKy_change_colpat(0);
break;
}
return TRUE;
}
void daNpc_Fairy_c::action() {
if (mStagger.checkRebirth()) {
mStagger.initialize();
mMode = 1;
}
if (mAction) {
(this->*mAction)(0);
}
}
void daNpc_Fairy_c::ptcl_water() {
u32 uVar1 = 0x40002;
cXyz scale(1.1f, 1.1f, 1.1f);
mPrtclTimer--;
if (mPrtclTimer <= 0) {
mPrtclTimer = 10;
} else {
uVar1 |= 0x20000;
}
mPaPo.setEffectCenter(&tevStr, &current.pos, 1, uVar1, NULL, NULL, &scale, fopAcM_GetRoomNo(this), 1.0f, speedF);
}
void daNpc_Fairy_c::ptcl_sprit() {
cXyz pos;
cXyz scale(1.0f, 1.0f, 1.0f);
static u16 const id[3] = {
dPa_RM(ID_ZI_S_FAIRY_SPRIT_A),
dPa_RM(ID_ZI_S_FAIRY_SPRIT_B),
dPa_RM(ID_ZI_S_FAIRY_SPRIT_C),
};
for (int i = 0; i < 3; i++) {
pos = current.pos;
mPrtcls[i] = dComIfGp_particle_set(mPrtcls[i], id[i], &pos, &mCurAngle, &scale);
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mPrtcls[i]);
if (emitter != NULL) {
emitter->setGlobalTranslation(pos.x, pos.y, pos.z);
}
}
}
void daNpc_Fairy_c::_to_FairyField() {
int iVar1 = 4;
if (mTempBit < 0 || mTempBit >= iVar1) {
return;
}
Z2GetAudioMgr()->seStart(Z2SE_SY_WARP_FADE_FAIRY, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
static u8 const sFairyField[4] = {
0x00,
0x01,
0x02,
0x03,
};
dStage_changeScene(sFairyField[mTempBit], 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
}
int daNpc_Fairy_c::chk_tempbit() {
static u32 const sTempBit[4] = {
121, // dSv_event_tmp_flag_c::T_0121 - Program use - Fairy use 1
122, // dSv_event_tmp_flag_c::T_0122 - Program use - Fairy use 2
123, // dSv_event_tmp_flag_c::T_0123 - Program use - Fairy use 3
124, // dSv_event_tmp_flag_c::T_0124 - Program use - Fairy use 4
};
u32 i = 0;
for (; i < 4; i++) {
OS_REPORT("----------chk temp bit no =%d\n ", sTempBit[i]);
if (daNpcT_chkTmpBit(sTempBit[i])) {
OS_REPORT("----------on temp bit no =%d\n ", sTempBit[i]);
daNpcT_offTmpBit(sTempBit[i]);
return i;
}
}
return -1;
}
void daNpc_Fairy_c::beforeMove() {
if (checkHide() || mNoDraw) {
attention_info.flags = 0;
}
}
void daNpc_Fairy_c::afterMoved() {
ptcl_water();
switch (mStatus) {
case 0:
if (mUnkFlag) {
feather_se();
}
break;
case 1:
ptcl_sprit();
if (!dComIfGp_event_runCheck()) {
sprit_se();
}
break;
}
}
void daNpc_Fairy_c::setAttnPos() {
cXyz pos(0.0f, -30.0f, 0.0f);
mStagger.calc(FALSE);
f32 rad = cM_s2rad((s16)(mCurAngle.y - field_0xd7e.y));
mJntAnm.setParam(this, mpMorf[0]->getModel(), &pos, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(),
mHIO->m.common.body_angleX_min, mHIO->m.common.body_angleX_max, mHIO->m.common.body_angleY_min, mHIO->m.common.body_angleY_max,
mHIO->m.common.head_angleX_min, mHIO->m.common.head_angleX_max, mHIO->m.common.head_angleY_min, mHIO->m.common.head_angleY_max,
mHIO->m.common.neck_rotation_ratio, rad, NULL);
mJntAnm.calcJntRad(0.2f, 1.0f, rad);
setMtx();
mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo()));
mDoMtx_stack_c::multVec(&pos, &eyePos);
eyePos.y += 15.0f;
mJntAnm.setEyeAngleX(eyePos, 1.0f, 0);
mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, TRUE, 1.0f, 0);
attention_info.position = current.pos;
attention_info.position.y += mHIO->m.common.attention_offset;
}
void daNpc_Fairy_c::setCollision() {
cXyz pos;
u32 co_s_prm = 0x79;
u32 tg_type = 0xD8FBFDFF;
u32 tg_s_prm = 0x1F;
if (!mHide) {
if (dComIfGp_event_runCheck()) {
tg_type = 0;
tg_s_prm = 0;
co_s_prm = 0;
} else if (mTwilight) {
tg_type = 0;
tg_s_prm = 0;
} else if (mStagger.checkStagger()) {
tg_type = 0;
tg_s_prm = 0;
}
f32 cyl_h = mCylH;
f32 wall_r = mWallR;
pos = current.pos;
mCyl.SetCoSPrm(co_s_prm);
mCyl.SetTgType(tg_type);
mCyl.SetTgSPrm(tg_s_prm);
mCyl.OnTgNoHitMark();
mCyl.SetH(cyl_h);
mCyl.SetR(wall_r);
mCyl.SetC(pos);
dComIfG_Ccsp()->Set(&mCyl);
}
mCyl.ClrCoHit();
mCyl.ClrTgHit();
}
int daNpc_Fairy_c::drawDbgInfo() {
return 0;
}
BOOL daNpc_Fairy_c::setAction(actionFunc action, int param_2) {
mMode = 0xFFFF;
if (mAction) {
(this->*mAction)(0);
}
mMode = 0;
mAction = action;
if (mAction) {
(this->*mAction)(param_2);
}
return TRUE;
}
int daNpc_Fairy_c::wait(int param_1) {
switch (mMode) {
case -1:
break;
case 0:
case 1:
if (!mStagger.checkStagger()) {
if (mType == TYPE_50F && mTempBit >= 0) {
mUnkFlag = 1;
mEvtNo = EVT_APPEAR_50F_03;
field_0xff4 = mEvtNo;
evtChange();
} else {
mFaceMotionSeqMngr.setNo(FACE_MOT_NONE, -1.0f, FALSE, 0);
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mMode = 2;
}
}
break;
case 2:
if (mStatus == 1) {
if (daNpcT_chkDoBtnIsSpeak(this)) {
dComIfGp_setDoStatus(8, 0);
}
} else if (mStatus == 0 && !mStagger.checkStagger()) {
if (mPlayerActorMngr.getActorP() != NULL && !mTwilight) {
mJntAnm.lookNone(0);
if (chkActorInSight(mPlayerActorMngr.getActorP(), mAttnFovY, mCurAngle.y)) {
mJntAnm.lookPlayer(0);
}
if (!srchPlayerActor() && home.angle.y == mCurAngle.y) {
mMode = 1;
}
} else {
mJntAnm.lookNone(0);
if (home.angle.y != mCurAngle.y) {
if (field_0xe34 == 0) {
setAngle(home.angle.y);
mMode = 1;
} else if (step(home.angle.y, -1, -1, 15, 0)) {
mMode = 1;
}
attention_info.flags = 0;
} else {
srchPlayerActor();
}
}
}
break;
}
return 1;
}
int daNpc_Fairy_c::talk(int param_1) {
switch (mMode) {
case -1:
break;
case 0:
case 1:
if (!mStagger.checkStagger()) {
if (mStatus == 1) {
initTalk(-1, NULL);
} else {
initTalk(mFlowNodeNo, NULL);
}
if (checkStep()) {
mStepMode = 0;
}
mMode = 2;
}
break;
case 2:
if (mStatus == 1) {
if (!fopAcM_isSwitch(this, mSwitchBit)) {
AppearDemoCall();
} else {
ReturnDemoCall();
}
evtChange();
return 1;
}
}
return 1;
}
int daNpc_Fairy_c::test(int param_1) {
int rv = 0;
switch (mMode) {
case -1:
break;
case 0:
case 1:
speedF = 0.0f;
speed.setall(0.0f);
mMode = 2;
// fallthrough
case 2:
mFaceMotionSeqMngr.setNo(mHIO->m.common.face_expression, -1.0f, FALSE, 0);
mMotionSeqMngr.setNo(mHIO->m.common.motion, -1.0f, FALSE, 0);
mJntAnm.lookNone(0);
attention_info.flags = 0;
break;
}
return rv;
}
void daNpc_Fairy_c::AppearDemoCall() {
if (mType == TYPE_50F) {
// dSv_event_flag_c::F_0505 - sub-dungeon - Cave of Ordeals - B50 first arrival (clear)
if (daNpcT_chkEvtBit(505)) {
if (dComIfGs_checkEmptyBottle()) {
mEvtNo = EVT_APPEAR_50F_05;
} else {
mEvtNo = EVT_APPEAR_50F_02;
}
} else if (dComIfGs_checkEmptyBottle()) {
mEvtNo = EVT_APPEAR_50F_01;
} else {
mEvtNo = EVT_APPEAR_50F_04;
}
} else {
static u16 const sEvtType1[5] = {
EVT_APPEAR_10F_01,
EVT_APPEAR_20F_01,
EVT_APPEAR_30F_01,
EVT_APPEAR_40F_01,
EVT_APPEAR_50F_01,
};
static u16 const sEvtType2[5] = {
EVT_APPEAR_10F_02,
EVT_APPEAR_20F_02,
EVT_APPEAR_30F_02,
EVT_APPEAR_40F_02,
EVT_APPEAR_50F_02,
};
static s16 const sEvtBitNo[5] = {
501,
502,
503,
504,
505,
};
mEvtNo = sEvtType1[mType];
// dSv_event_flag_c::F_0505 - sub-dungeon - Cave of Ordeals - B50 first arrival (clear)
if (daNpcT_chkEvtBit(505)) {
mEvtNo = sEvtType2[mType];
} else if (daNpcT_chkEvtBit(sEvtBitNo[mType])) {
mEvtNo = sEvtType2[mType];
}
if (mEvtNo != EVT_APPEAR_10F_01) {
mUnkFlag = 1;
}
}
field_0xff4 = mEvtNo;
}
void daNpc_Fairy_c::ReturnDemoCall() {
if (mType == TYPE_10F) {
mEvtNo = EVT_SELECT_RETURN1;
} else {
mEvtNo = EVT_SELECT_RETURN3;
}
field_0xff4 = mEvtNo;
mUnkFlag = 1;
}
void daNpc_Fairy_c::PresentDemoCall() {
int item_no = 0;
if (mFlow.getEventId(&item_no) != 1) {
item_no = 0;
}
fpc_ProcID id = fopAcM_createItemForPresentDemo(&current.pos, item_no, 0, -1, -1, NULL, NULL);
if (id != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(id);
}
}
int daNpc_Fairy_c::cutAppear_10F_01(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_10F_01_Init(*cutId);
}
return _cutAppear_10F_01_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_10F_01_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_SIT_B, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 120;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x15:
mMotionSeqMngr.setNo(MOT_SIT_A_2, -1.0f, FALSE, 0);
break;
case 0x1E:
feather_appear_se();
mFairyFeather.setAnm(ANM_FEATHER_SYUTU);
break;
case 0x28:
break;
case 0x32:
mFairyFeather.setAnmFrame(220.0f);
mFairyFeather.setAnmPlaySpeed(1.0f);
break;
case 0x3C:
mUnkFlag = 1;
initTalk(mFlowNodeNo, NULL);
break;
case 0x46:
Z2GetAudioMgr()->bgmStreamStop(45);
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_10F_01_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
mFairyFeather.setAnm(ANM_FEATHER_NON);
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x15:
rv = 1;
break;
case 0x1E:
if (mFairyFeather.getAnmFrame() >= 140.0f) {
rv = 1;
}
break;
case 0x28:
if (mFairyFeather.getAnmFrame() >= 220.0f) {
rv = 1;
}
break;
case 0x32:
if (mFairyFeather.getAnmFrame() >= 298.0f) {
mFairyFeather.setAnm(ANM_FEATHER_SITWAIT);
rv = 1;
}
break;
case 0x3C:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x46:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_10F_02(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_10F_02_Init(*cutId);
}
return _cutAppear_10F_02_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_10F_02_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_SIT_A, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 120;
dKy_change_colpat(12);
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 0x1E:
initTalk(mFlowNodeNo, NULL);
break;
case 0x28:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_10F_02_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x28:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_20F_01(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_20F_01_Init(*cutId);
}
return _cutAppear_20F_01_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_20F_01_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_SIT_A, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 120;
dKy_change_colpat(12);
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 0x1E:
mMotionSeqMngr.setNo(MOT_STANDUP, -1.0f, FALSE, 0);
break;
case 0x28:
initTalk(mFlowNodeNo, NULL);
break;
case 0x3C:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_20F_01_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (mpMorf[0]->isStop()) {
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
rv = 1;
}
break;
case 0x28:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x3C:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_20F_02(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_20F_02_Init(*cutId);
}
return _cutAppear_20F_02_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_20F_02_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_SIT_A, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 120;
dKy_change_colpat(12);
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 0x1E:
mMotionSeqMngr.setNo(MOT_STANDUP, -1.0f, FALSE, 0);
break;
case 0x28:
initTalk(mFlowNodeNo, NULL);
break;
case 0x32:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_20F_02_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (mpMorf[0]->isStop()) {
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
rv = 1;
}
break;
case 0x28:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x32:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_30F_01(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_30F_01_Init(*cutId);
}
return _cutAppear_30F_01_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_30F_01_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
dKy_change_colpat(12);
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 0x1E:
initTalk(mFlowNodeNo, NULL);
break;
case 0x32:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_30F_01_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x32:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_30F_02(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_30F_02_Init(*cutId);
}
return _cutAppear_30F_02_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_30F_02_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
dKy_change_colpat(12);
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 0x1E:
initTalk(mFlowNodeNo, NULL);
break;
case 0x28:
Z2GetAudioMgr()->bgmStreamStop(0x2D);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_30F_02_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x28:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_40F_01(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_40F_01_Init(*cutId);
}
return _cutAppear_40F_01_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_40F_01_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x1E:
initTalk(mFlowNodeNo, NULL);
break;
case 0x32:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_40F_01_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x32:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_40F_02(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_40F_02_Init(*cutId);
}
return _cutAppear_40F_02_Main(*cutId);
}
int daNpc_Fairy_c::_cutAppear_40F_02_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x1E:
initTalk(mFlowNodeNo, NULL);
break;
case 0x28:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_40F_02_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x28:
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_50F_01(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
int* piVar2 = NULL;
int msgNo = 0;
piVar2 = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
if (piVar2 != NULL) {
msgNo = *piVar2;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_50F_01_Init(*cutId, msgNo);
}
return _cutAppear_50F_01_Main(*cutId, msgNo);
}
int daNpc_Fairy_c::_cutAppear_50F_01_Init(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x1E:
daNpcF_offTmpBit(11);
initTalk(mFlowNodeNo, NULL);
mTimer = 143;
fopAcM_SetSpeedF(this, 2.2f);
mMotionSeqMngr.setNo(MOT_WALK, -1.0f, FALSE, 0);
mFaceMotionSeqMngr.setNo(FACE_MOT_TALK, -1.0f, FALSE, 0);
break;
case 0x1F:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
fopAcM_SetSpeedF(this, 0.0f);
break;
case 0x28:
initTalk(mFlowNodeNo, NULL);
break;
case 0x2A:
mCurrentPosCopy = current.pos;
mTimer = 30;
break;
case 0x32: {
cXyz pos(0.309993f, -61250.0f, -3734.8193f);
fopAcM_SetPosition(this, pos.x, pos.y, pos.z);
fopAcM_SetSpeedF(this, 0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(tREG_F(1) + 32.0f);
initTalk(mFlowNodeNo, NULL);
break;
}
case 0x33:
mpMorf[0]->setFrame(0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(tREG_F(2));
break;
case 0x3C:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_50F_01_Main(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
int msgNos[2] = {-1, -1};
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
msgNos[0] = i_msgNo;
talkProc(msgNos, FALSE, NULL, FALSE);
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1F:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x28:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
PresentDemoCall();
rv = 1;
}
break;
case 0x29:
rv = 1;
break;
case 0x2A:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer--;
if (mTimer <= 0) {
fopAcM_SetSpeedF(this, 0.0f);
rv = 1;
} else if (mTimer == 10) {
fopAcM_SetSpeedF(this, -4.0f);
}
break;
case 0x32:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x33:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x34:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x3C:
Z2GetAudioMgr()->seStart(Z2SE_SY_WARP_FADE_FAIRY, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dStage_changeScene(getSceneNo2(), 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_50F_02(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
int* piVar2 = NULL;
int msgNo = 0;
piVar2 = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
if (piVar2 != NULL) {
msgNo = *piVar2;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_50F_02_Init(*cutId, msgNo);
}
return _cutAppear_50F_02_Main(*cutId, msgNo);
}
int daNpc_Fairy_c::_cutAppear_50F_02_Init(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x1E:
daNpcF_offTmpBit(11);
initTalk(mFlowNodeNo, NULL);
mTimer = 143;
fopAcM_SetSpeedF(this, 2.2f);
mMotionSeqMngr.setNo(MOT_WALK, -1.0f, FALSE, 0);
mFaceMotionSeqMngr.setNo(FACE_MOT_TALK, -1.0f, FALSE, 0);
break;
case 0x1F:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
fopAcM_SetSpeedF(this, 0.0f);
break;
case 0x20: {
cXyz pos(0.309993f, -61250.0f, -3734.8193f);
fopAcM_SetPosition(this, pos.x, pos.y, pos.z);
fopAcM_SetSpeedF(this, 0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(1.0f);
break;
}
case 0x21:
mpMorf[0]->setFrameF(0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(tREG_F(2));
break;
case 0x28:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_50F_02_Main(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
int msgNos[2] = {-1, -1};
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
msgNos[0] = i_msgNo;
talkProc(msgNos, FALSE, NULL, FALSE);
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1F:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x20:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x21:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x22:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x28:
Z2GetAudioMgr()->seStart(Z2SE_SY_WARP_FADE_FAIRY, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dStage_changeScene(getSceneNo2(), 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_50F_03(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
int* piVar2 = NULL;
int msgNo = 0;
piVar2 = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
if (piVar2 != NULL) {
msgNo = *piVar2;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_50F_03_Init(*cutId, msgNo);
}
return _cutAppear_50F_03_Main(*cutId, msgNo);
}
int daNpc_Fairy_c::_cutAppear_50F_03_Init(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 31;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x1E:
initTalk(mFlowNodeNo, NULL);
break;
case 0x20:
mTimer = 10;
break;
case 0x28: {
cXyz pos(0.309993f, -61250.0f, -3734.8193f);
fopAcM_SetPosition(this, pos.x, pos.y, pos.z);
fopAcM_SetSpeedF(this, 0.0f);
mMotionSeqMngr.setNo(MOT_HOPPE, -1.0f, FALSE, 0);
mFaceMotionSeqMngr.setNo(FACE_MOT_SMILE, -1.0f, FALSE, 0);
daPy_getPlayerActorClass()->setAnimeFrame(0.0f);
initTalk(mFlowNodeNo, NULL);
break;
}
case 0x32:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_50F_03_Main(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
int msgNos[2] = {-1, -1};
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
PresentDemoCall();
rv = 1;
}
break;
case 0x1F:
rv = 1;
break;
case 0x20:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x28:
field_0xe26 = false;
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x32:
_to_FairyField();
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_50F_04(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
int* piVar2 = NULL;
int msgNo = 0;
piVar2 = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
if (piVar2 != NULL) {
msgNo = *piVar2;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_50F_04_Init(*cutId, msgNo);
}
return _cutAppear_50F_04_Main(*cutId, msgNo);
}
int daNpc_Fairy_c::_cutAppear_50F_04_Init(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x1E:
daNpcF_offTmpBit(11);
initTalk(mFlowNodeNo, NULL);
mTimer = 143;
fopAcM_SetSpeedF(this, 2.2f);
mMotionSeqMngr.setNo(MOT_WALK, -1.0f, FALSE, 0);
mFaceMotionSeqMngr.setNo(FACE_MOT_TALK, -1.0f, FALSE, 0);
break;
case 0x1F:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
fopAcM_SetSpeedF(this, 0.0f);
break;
case 0x29: {
cXyz pos(0.309993f, -61250.0f, -3734.8193f);
fopAcM_SetPosition(this, pos.x, pos.y, pos.z);
fopAcM_SetSpeedF(this, 0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(tREG_F(1) + 1.0f);
break;
}
case 0x2A:
mpMorf[0]->setFrameF(0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(tREG_F(2));
break;
case 0x32:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_50F_04_Main(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
int msgNos[2] = {-1, -1};
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
msgNos[0] = i_msgNo;
talkProc(msgNos, FALSE, NULL, FALSE);
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1F:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x28:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x29:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x2A:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x2B:
if (talkProc(NULL, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x32:
Z2GetAudioMgr()->seStart(Z2SE_SY_WARP_FADE_FAIRY, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dStage_changeScene(getSceneNo2(), 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutAppear_50F_05(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
int* piVar2 = NULL;
int msgNo = 0;
piVar2 = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
if (piVar2 != NULL) {
msgNo = *piVar2;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutAppear_50F_05_Init(*cutId, msgNo);
}
return _cutAppear_50F_05_Main(*cutId, msgNo);
}
int daNpc_Fairy_c::_cutAppear_50F_05_Init(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
switch (i_cutId) {
case 0xA:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 100;
Z2GetAudioMgr()->bgmStreamPlay();
dKy_change_colpat(12);
break;
case 0x1E:
daNpcF_offTmpBit(11);
initTalk(mFlowNodeNo, NULL);
mTimer = 143;
fopAcM_SetSpeedF(this, 2.2f);
mMotionSeqMngr.setNo(MOT_WALK, -1.0f, FALSE, 0);
mFaceMotionSeqMngr.setNo(FACE_MOT_TALK, -1.0f, FALSE, 0);
break;
case 0x1F:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
fopAcM_SetSpeedF(this, 0.0f);
break;
case 0x28:
break;
case 0x2A:
mCurrentPosCopy = current.pos;
mTimer = 30;
break;
case 0x32: {
cXyz pos(0.309993f, -61250.0f, -3734.8193f);
fopAcM_SetPosition(this, pos.x, pos.y, pos.z);
fopAcM_SetSpeedF(this, 0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(tREG_F(1) + 32.0f);
initTalk(mFlowNodeNo, NULL);
break;
}
case 0x33:
mpMorf[0]->setFrameF(0.0f);
daPy_getPlayerActorClass()->setAnimeFrame(tREG_F(2));
break;
case 0x3C:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutAppear_50F_05_Main(int const& i_cutId, int const& i_msgNo) {
int rv = 0;
int msgNos[2] = {-1, -1};
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
msgNos[0] = i_msgNo;
talkProc(msgNos, FALSE, NULL, FALSE);
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1F:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, TRUE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x28:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
PresentDemoCall();
rv = 1;
}
break;
case 0x29:
rv = 1;
break;
case 0x2A:
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
mTimer--;
if (mTimer <= 0) {
fopAcM_SetSpeedF(this, 0.0f);
rv = 1;
} else if (mTimer == 10) {
fopAcM_SetSpeedF(this, -4.0f);
}
break;
case 0x32:
msgNos[0] = i_msgNo;
if (talkProc(msgNos, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x33:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x3C:
Z2GetAudioMgr()->seStart(Z2SE_SY_WARP_FADE_FAIRY, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dStage_changeScene(getSceneNo2(), 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
rv = 1;
break;
}
return rv;
}
int daNpc_Fairy_c::cutSelect_Return1(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutSelect_Return1_Init(*cutId);
}
return _cutSelect_Return1_Main(*cutId);
}
int daNpc_Fairy_c::_cutSelect_Return1_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (mType == TYPE_10F) {
mMotionSeqMngr.setNo(MOT_SIT_A, -1.0f, FALSE, 0);
} else {
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
}
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 120;
dKy_change_colpat(12);
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 0x1E:
daNpcF_offTmpBit(11);
initTalk(mFlowNodeNo, NULL);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutSelect_Return1_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
}
return rv;
}
int daNpc_Fairy_c::cutSelect_Return2(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutSelect_Return2_Init(*cutId);
}
return _cutSelect_Return2_Main(*cutId);
}
int daNpc_Fairy_c::_cutSelect_Return2_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
initTalk(mFlowNodeNo, NULL);
break;
case 0x14:
Z2GetAudioMgr()->bgmStreamStop(45);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutSelect_Return2_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
case 0x14:
u8 i_exitId;
if (mFlow.getChoiceNo() == 0) {
i_exitId = getSceneNo2();
Z2GetAudioMgr()->seStart(Z2SE_SY_WARP_FADE_FAIRY, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
} else {
i_exitId = getSceneNo1();
}
dStage_changeScene(i_exitId, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1);
rv = 1;
}
return rv;
}
int daNpc_Fairy_c::cutSelect_Return3(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutSelect_Return3_Init(*cutId);
}
return _cutSelect_Return3_Main(*cutId);
}
int daNpc_Fairy_c::_cutSelect_Return3_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (mType == TYPE_10F) {
mMotionSeqMngr.setNo(MOT_SIT_A, -1.0f, FALSE, 0);
} else {
mMotionSeqMngr.setNo(MOT_WAIT, -1.0f, FALSE, 0);
}
mTimer = 61;
dKy_change_colpat(10);
Z2GetAudioMgr()->bgmStreamPrepare(0x200003F);
break;
case 0x14:
mStatus = 0;
mTimer = 120;
dKy_change_colpat(12);
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 0x1E:
daNpcF_offTmpBit(12);
initTalk(mFlowNodeNo, NULL);
break;
}
return rv;
}
int daNpc_Fairy_c::_cutSelect_Return3_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
case 0xA:
if (--mTimer <= 0) {
dKy_change_colpat(11);
rv = 1;
}
break;
case 0x14:
if (--mTimer <= 0) {
rv = 1;
}
break;
case 0x1E:
if (talkProc(NULL, FALSE, NULL, FALSE)) {
rv = 1;
}
break;
}
return rv;
}
int daNpc_Fairy_c::cutReturnCancel(int i_staffId) {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
int* cutId = NULL;
cutId = dComIfGp_evmng_getMyIntegerP(i_staffId, "cutId");
if (cutId == NULL) {
OS_REPORT("---------------CUT FALSE\n");
return 1;
}
if (event_manager.getIsAddvance(i_staffId)) {
_cutReturnCancel_Init(*cutId);
}
return _cutReturnCancel_Main(*cutId);
}
int daNpc_Fairy_c::_cutReturnCancel_Init(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
#if DEBUG
case 0xA:
#endif
default:
break;
}
return rv;
}
int daNpc_Fairy_c::_cutReturnCancel_Main(int const& i_cutId) {
int rv = 0;
switch (i_cutId) {
#if DEBUG
case 0xA:
#endif
default:
break;
}
return rv;
}
static int daNpc_Fairy_Create(void* i_this) {
return static_cast<daNpc_Fairy_c*>(i_this)->Create();
}
static int daNpc_Fairy_Delete(void* i_this) {
return static_cast<daNpc_Fairy_c*>(i_this)->Delete();
}
static int daNpc_Fairy_Execute(void* i_this) {
return static_cast<daNpc_Fairy_c*>(i_this)->Execute();
}
static int daNpc_Fairy_Draw(void* i_this) {
return static_cast<daNpc_Fairy_c*>(i_this)->Draw();
}
static int daNpc_Fairy_IsDelete(void* i_this) {
return true;
}
static actor_method_class daNpc_Fairy_MethodTable = {
(process_method_func)daNpc_Fairy_Create,
(process_method_func)daNpc_Fairy_Delete,
(process_method_func)daNpc_Fairy_Execute,
(process_method_func)daNpc_Fairy_IsDelete,
(process_method_func)daNpc_Fairy_Draw,
};
actor_process_profile_definition g_profile_NPC_FAIRY = {
/* Layer ID */ fpcLy_CURRENT_e,
/* List ID */ 7,
/* List Prio */ fpcPi_CURRENT_e,
/* Proc Name */ fpcNm_NPC_FAIRY_e,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daNpc_Fairy_c),
/* Size Other */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Draw Prio */ fpcDwPi_NPC_FAIRY_e,
/* Actor SubMtd */ &daNpc_Fairy_MethodTable,
/* Status */ fopAcStts_UNK_0x8000000_e | fopAcStts_UNK_0x40000_e | fopAcStts_UNK_0x4000_e | fopAcStts_CULL_e | fopAcStts_UNK_0x8_e,
/* Group */ fopAc_NPC_e,
/* Cull Type */ fopAc_CULLBOX_CUSTOM_e,
};