mirror of
https://github.com/zeldaret/tp
synced 2026-06-03 18:36:40 -04:00
1645 lines
55 KiB
C++
1645 lines
55 KiB
C++
/**
|
|
* @file d_a_npc_yelia.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/actor/d_a_npc_yelia.h"
|
|
#include "d/actor/d_a_demo_item.h"
|
|
|
|
UNK_REL_DATA
|
|
|
|
/* 80B524FC-80B52514 000020 0018+00 1/1 0/0 0/0 .data l_bmdData */
|
|
static daNpc_GetParam1 l_bmdData[3] = {
|
|
{3, 1},
|
|
{3, 4},
|
|
{8, 7},
|
|
};
|
|
|
|
/* 80B52514-80B52544 -00001 0030+00 1/2 0/0 0/0 .data l_evtList */
|
|
static daNpcT_evtData_c l_evtList[6] = {
|
|
{"", 0},
|
|
{"NO_RESPONSE", 0},
|
|
{"TW_RESISTANCE1", 7},
|
|
{"TW_RESISTANCE2", 7},
|
|
{"TAKE_WOODSTATUE", 6},
|
|
{"THANK_YOU", 6},
|
|
};
|
|
|
|
/* 80B52544-80B52564 -00001 0020+00 2/3 0/0 0/0 .data l_resNameList */
|
|
static char* l_resNameList[8] = {
|
|
"",
|
|
"Yelia",
|
|
"Yelia0",
|
|
"Yelia1",
|
|
"Yelia2",
|
|
"Yelia3",
|
|
"Yelia4",
|
|
"yelB_TW",
|
|
};
|
|
|
|
/* 80B52564-80B52568 000088 0004+00 1/0 0/0 0/0 .data l_loadResPtrn0 */
|
|
static s8 l_loadResPtrn0[4] = {1, 2, 3, -1};
|
|
|
|
/* 80B52568-80B5256C 00008C 0003+01 1/0 0/0 0/0 .data l_loadResPtrn1 */
|
|
static s8 l_loadResPtrn1[3] = {2, 4, -1};
|
|
|
|
/* 80B5256C-80B52570 000090 0004+00 1/0 0/0 0/0 .data l_loadResPtrn2 */
|
|
static s8 l_loadResPtrn2[4] = {1, 2, 5, -1};
|
|
|
|
/* 80B52570-80B52574 000094 0004+00 1/0 0/0 0/0 .data l_loadResPtrn3 */
|
|
static s8 l_loadResPtrn3[4] = {2, 4, 6, -1};
|
|
|
|
/* 80B52574-80B52578 000098 0004+00 1/0 0/0 0/0 .data l_loadResPtrn4 */
|
|
static s8 l_loadResPtrn4[4] = {2, 7, 6, -1};
|
|
|
|
/* 80B52578-80B52580 00009C 0005+03 1/0 0/0 0/0 .data l_loadResPtrn5 */
|
|
static s8 l_loadResPtrn5[5] = {2, 4, 7, 6, -1};
|
|
|
|
/* 80B52580-80B52588 0000A4 0008+00 1/0 0/0 0/0 .data l_loadResPtrn9 */
|
|
static s8 l_loadResPtrn9[8] = {1, 2, 3, 4, 5, 6, 7, -1};
|
|
|
|
/* 80B52588-80B525B0 -00001 0028+00 1/2 0/0 0/0 .data l_loadResPtrnList */
|
|
static s8* l_loadResPtrnList[10] = {
|
|
l_loadResPtrn0, l_loadResPtrn1, l_loadResPtrn2, l_loadResPtrn3, l_loadResPtrn4,
|
|
l_loadResPtrn5, l_loadResPtrn3, l_loadResPtrn3, l_loadResPtrn9, l_loadResPtrn0,
|
|
};
|
|
|
|
/* 80B525B0-80B528C0 0000D4 0310+00 0/1 0/0 0/0 .data l_faceMotionAnmData */
|
|
static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[] = {
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, 19, J3DFrameCtrl::EMode_LOOP, 2, TRUE},
|
|
{7, J3DFrameCtrl::EMode_NONE, 2, 19, J3DFrameCtrl::EMode_LOOP, 2, TRUE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{5, J3DFrameCtrl::EMode_NONE, 3, 18, J3DFrameCtrl::EMode_NONE, 3, FALSE},
|
|
{6, J3DFrameCtrl::EMode_NONE, 3, 19, J3DFrameCtrl::EMode_NONE, 3, FALSE},
|
|
{6, J3DFrameCtrl::EMode_LOOP, 5, 20, J3DFrameCtrl::EMode_LOOP, 5, FALSE},
|
|
{5, J3DFrameCtrl::EMode_NONE, 5, 19, J3DFrameCtrl::EMode_NONE, 5, FALSE},
|
|
{7, J3DFrameCtrl::EMode_LOOP, 5, 19, J3DFrameCtrl::EMode_LOOP, 2, TRUE},
|
|
{8, J3DFrameCtrl::EMode_NONE, 5, 19, J3DFrameCtrl::EMode_LOOP, 2, TRUE},
|
|
{14, J3DFrameCtrl::EMode_NONE, 6, 49, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{16, J3DFrameCtrl::EMode_NONE, 6, 51, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{15, J3DFrameCtrl::EMode_NONE, 6, 50, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{12, J3DFrameCtrl::EMode_NONE, 6, 47, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{13, J3DFrameCtrl::EMode_NONE, 6, 48, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{10, J3DFrameCtrl::EMode_NONE, 6, 45, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{21, J3DFrameCtrl::EMode_LOOP, 6, 56, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{22, J3DFrameCtrl::EMode_LOOP, 6, 57, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{18, J3DFrameCtrl::EMode_LOOP, 6, 53, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{20, J3DFrameCtrl::EMode_LOOP, 6, 55, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{9, J3DFrameCtrl::EMode_NONE, 6, 44, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{17, J3DFrameCtrl::EMode_LOOP, 6, 52, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{11, J3DFrameCtrl::EMode_NONE, 6, 46, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{19, J3DFrameCtrl::EMode_LOOP, 6, 54, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{5, J3DFrameCtrl::EMode_NONE, 2, 20, J3DFrameCtrl::EMode_NONE, 2, FALSE},
|
|
{8, J3DFrameCtrl::EMode_LOOP, 2, 22, J3DFrameCtrl::EMode_LOOP, 2, FALSE},
|
|
{6, J3DFrameCtrl::EMode_LOOP, 2, 21, J3DFrameCtrl::EMode_LOOP, 2, FALSE},
|
|
{9, J3DFrameCtrl::EMode_LOOP, 2, 23, J3DFrameCtrl::EMode_LOOP, 2, FALSE},
|
|
};
|
|
|
|
/* 80B528C0-80B52C94 0003E4 03D4+00 0/1 0/0 0/0 .data l_motionAnmData */
|
|
static daNpcT_motionAnmData_c l_motionAnmData[] = {
|
|
{13, J3DFrameCtrl::EMode_LOOP, 2, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{10, J3DFrameCtrl::EMode_LOOP, 3, 15, J3DFrameCtrl::EMode_LOOP, 3, FALSE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{11, J3DFrameCtrl::EMode_LOOP, 3, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{9, J3DFrameCtrl::EMode_NONE, 3, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, FALSE},
|
|
{7, J3DFrameCtrl::EMode_NONE, 3, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{8, J3DFrameCtrl::EMode_NONE, 3, 14, J3DFrameCtrl::EMode_NONE, 3, FALSE},
|
|
{10, J3DFrameCtrl::EMode_LOOP, 5, 15, J3DFrameCtrl::EMode_LOOP, 5, FALSE},
|
|
{9, J3DFrameCtrl::EMode_NONE, 5, 14, J3DFrameCtrl::EMode_NONE, 5, FALSE},
|
|
{11, J3DFrameCtrl::EMode_LOOP, 5, 16, J3DFrameCtrl::EMode_LOOP, 5, FALSE},
|
|
{35, J3DFrameCtrl::EMode_LOOP, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{34, J3DFrameCtrl::EMode_LOOP, 6, 41, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{33, J3DFrameCtrl::EMode_LOOP, 6, 40, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{31, J3DFrameCtrl::EMode_NONE, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{30, J3DFrameCtrl::EMode_LOOP, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{27, J3DFrameCtrl::EMode_NONE, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{28, J3DFrameCtrl::EMode_LOOP, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{25, J3DFrameCtrl::EMode_NONE, 6, 38, J3DFrameCtrl::EMode_NONE, 6, FALSE},
|
|
{26, J3DFrameCtrl::EMode_LOOP, 6, 39, J3DFrameCtrl::EMode_LOOP, 6, FALSE},
|
|
{6, J3DFrameCtrl::EMode_NONE, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{8, J3DFrameCtrl::EMode_LOOP, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{12, J3DFrameCtrl::EMode_NONE, 2, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{5, J3DFrameCtrl::EMode_LOOP, 7, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{32, J3DFrameCtrl::EMode_NONE, 6, 16, J3DFrameCtrl::EMode_NONE, 2, FALSE},
|
|
{29, J3DFrameCtrl::EMode_LOOP, 6, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{7, J3DFrameCtrl::EMode_NONE, 6, 16, J3DFrameCtrl::EMode_NONE, 2, FALSE},
|
|
{23, J3DFrameCtrl::EMode_NONE, 6, 16, J3DFrameCtrl::EMode_NONE, 2, FALSE},
|
|
{24, J3DFrameCtrl::EMode_LOOP, 6, 16, J3DFrameCtrl::EMode_NONE, 2, FALSE},
|
|
{10, J3DFrameCtrl::EMode_NONE, 2, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
{11, J3DFrameCtrl::EMode_NONE, 2, 16, J3DFrameCtrl::EMode_NONE, 2, TRUE},
|
|
};
|
|
|
|
/* 80B52C94-80B52E44 0007B8 01B0+00 0/1 0/0 0/0 .data l_faceMotionSequenceData */
|
|
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[] = {
|
|
{1, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{2, -1, 1}, {3, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{7, -1, 1}, {9, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{10, -1, 1}, {16, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{11, -1, 1}, {17, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{12, -1, 1}, {17, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{13, -1, 1}, {18, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{14, -1, 1}, {19, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{15, -1, 1}, {18, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{20, -1, 1}, {21, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{24, -1, 1}, {25, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{26, -1, 1}, {27, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{3, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{4, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{5, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{9, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{6, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{16, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{17, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{18, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{19, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{21, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{25, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{22, -1, 0}, {23, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{23, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{27, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
};
|
|
|
|
/* 80B52E44-80B53064 000968 0220+00 0/1 0/0 0/0 .data l_motionSequenceData */
|
|
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[] = {
|
|
{0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{2, -1, 1}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{3, -1, 1}, {1, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{12, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{7, -1, 1}, {6, -1, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{6, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{13, -1, 1}, {14, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{15, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{16, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{17, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{18, -1, 1}, {19, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{19, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{20, -1, 1}, {21, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{21, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{22, -1, 1}, {23, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{23, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{24, -1, 1}, {25, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{25, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{27, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{29, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{33, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{34, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{4, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{5, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{8, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{9, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{10, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{11, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{14, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{28, -1, 0}, {15, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{26, 4, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{30, 4, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{31, -1, 0}, {32, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
{32, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
|
|
};
|
|
|
|
/* 80B53064-80B5307C -00001 0018+00 1/1 0/0 0/0 .data mCutNameList__13daNpc_Yelia_c */
|
|
char* daNpc_Yelia_c::mCutNameList[6] = {
|
|
"",
|
|
"CONVERSATION_ABOUT_LOOPHOLE",
|
|
"TW_RESISTANCE",
|
|
"TAKE_WOODSTATUE",
|
|
"CLOTH_TRY",
|
|
"THANK_YOU",
|
|
};
|
|
|
|
/* 80B530B8-80B53100 000BDC 0048+00 1/2 0/0 0/0 .data mCutList__13daNpc_Yelia_c */
|
|
BOOL (daNpc_Yelia_c::*daNpc_Yelia_c::mCutList[6])(int) = {
|
|
NULL,
|
|
&cutConversationAboutLoopHole,
|
|
&cutTWResistance,
|
|
&cutTakeWoodStatue,
|
|
&cutClothTry,
|
|
&cutThankYou,
|
|
};
|
|
|
|
enum Type {
|
|
/* 0 */ TYPE_HORSE,
|
|
/* 1 */ TYPE_1,
|
|
/* 2 */ TYPE_REMINISCENCE,
|
|
/* 3 */ TYPE_KAKARIKO,
|
|
/* 4 */ TYPE_TWILIGHT,
|
|
/* 5 */ TYPE_AFTER_ESCORT,
|
|
/* 6 */ TYPE_WOOD_STATUE,
|
|
/* 7 */ TYPE_MEMORIES_RESTORED,
|
|
/* 8 */ TYPE_8,
|
|
};
|
|
|
|
enum Event {
|
|
/* 0 */ EVENT_NONE,
|
|
/* 1 */ EVENT_NO_RESPONSE,
|
|
/* 2 */ EVENT_TW_RESISTANCE1,
|
|
/* 3 */ EVENT_TW_RESISTANCE2,
|
|
/* 4 */ EVENT_TAKE_WOODSTATUE,
|
|
/* 5 */ EVENT_THANK_YOU,
|
|
};
|
|
|
|
enum FaceMotion {
|
|
/* 0x00 */ FACE_TALK_A,
|
|
/* 0x01 */ FACE_1,
|
|
/* 0x02 */ FACE_KAISOU_TALK,
|
|
/* 0x03 */ FACE_SAD,
|
|
/* 0x04 */ FACE_TO_THINK,
|
|
/* 0x05 */ FACE_THINK,
|
|
/* 0x06 */ FACE_REMEMBER,
|
|
/* 0x07 */ FACE_REMEMBERING,
|
|
/* 0x08 */ FACE_INTENSE,
|
|
/* 0x09 */ FACE_ASK,
|
|
/* 0x0A */ FACE_HAPPY_TALK,
|
|
/* 0x0B */ FACE_LISTEN,
|
|
/* 0x0C */ FACE_12,
|
|
/* 0x0D */ FACE_HORSE_LOOKBACK,
|
|
/* 0x0E */ FACE_HORSE_RETURN,
|
|
/* 0x0F */ FACE_H_KAISOU_TALK,
|
|
/* 0x10 */ FACE_KAISOU_WAIT_A,
|
|
/* 0x11 */ FACE_H_SAD,
|
|
/* 0x12 */ FACE_H_THINK,
|
|
/* 0x13 */ FACE_H_INTENSE,
|
|
/* 0x14 */ FACE_H_REMEMBERING,
|
|
/* 0x15 */ FACE_H_ASK,
|
|
/* 0x16 */ FACE_H_HAPPY_TALK,
|
|
/* 0x17 */ FACE_KIZUKU,
|
|
/* 0x18 */ FACE_H_KIZUKU,
|
|
/* 0x19 */ FACE_H_LISTEN,
|
|
/* 0x1A */ FACE_NONE,
|
|
};
|
|
|
|
enum Motion {
|
|
/* 0x00 */ MOTION_WAIT_A,
|
|
/* 0x01 */ MOTION_1,
|
|
/* 0x02 */ MOTION_2,
|
|
/* 0x03 */ MOTION_KAISOU_WAIT_A,
|
|
/* 0x04 */ MOTION_HORSE_TALK_A,
|
|
/* 0x05 */ MOTION_HORSE_WAIT_C,
|
|
/* 0x06 */ MOTION_KAISOU_TALK,
|
|
/* 0x07 */ MOTION_WAIT_WORRY,
|
|
/* 0x08 */ MOTION_WAIT_WONDER,
|
|
/* 0x09 */ MOTION_WAIT_UTUMUKU,
|
|
/* 0x0A */ MOTION_TO_THINK,
|
|
/* 0x0B */ MOTION_THINK,
|
|
/* 0x0C */ MOTION_REMEMBER,
|
|
/* 0x0D */ MOTION_REMEMBERING,
|
|
/* 0x0E */ MOTION_LOOK,
|
|
/* 0x0F */ MOTION_LOOKING,
|
|
/* 0x10 */ MOTION_ASK,
|
|
/* 0x11 */ MOTION_ASKING,
|
|
/* 0x12 */ MOTION_DEMO_WAIT_SIT,
|
|
/* 0x13 */ MOTION_SITTALK_A,
|
|
/* 0x14 */ MOTION_HAPPYTALK,
|
|
/* 0x15 */ MOTION_LISTEN,
|
|
/* 0x16 */ MOTION_HORSE_WAIT_A,
|
|
/* 0x17 */ MOTION_17,
|
|
/* 0x18 */ MOTION_18,
|
|
/* 0x19 */ MOTION_19,
|
|
/* 0x1A */ MOTION_HORSE_LOOKBACK,
|
|
/* 0x1B */ MOTION_HORSE_RETURN,
|
|
/* 0x1C */ MOTION_KAISOU_WAIT_B,
|
|
/* 0x1D */ MOTION_TO_WORRY,
|
|
/* 0x1E */ MOTION_STEP,
|
|
/* 0x1F */ MOTION_ASK_STEP,
|
|
/* 0x20 */ MOTION_KIZUKU,
|
|
/* 0x21 */ MOTION_KIZUKU_WAIT,
|
|
};
|
|
|
|
daNpc_Yelia_Param_c::param const daNpc_Yelia_Param_c::m = {
|
|
170.0f, // mAttnOffsetY
|
|
-3.0f, // mGravity
|
|
1.0f, // mScale
|
|
400.0f, // mShadowDepth
|
|
255.0f, // mCcWeight
|
|
160.0f, // mCylH
|
|
35.0f, // mWallH
|
|
30.0f, // mWallR
|
|
0.0f, // mBodyUpAngle
|
|
0.0f, // mBodyDownAngle
|
|
10.0f, // mBodyLeftAngle
|
|
-10.0f, // mBodyRightAngle
|
|
30.0f, // mHeadUpAngle
|
|
-10.0f, // mHeadDownAngle
|
|
45.0f, // mHeadLeftAngle
|
|
-45.0f, // mHeadRightAngle
|
|
0.6f, // mNeckAngleScl
|
|
12.0f, // mMorfFrames
|
|
3, // mSpeakDistIdx
|
|
6, // mSpeakAngleIdx
|
|
5, // mTalkDistIdx
|
|
6, // mTalkAngleIdx
|
|
110.0f, // mAttnFovY
|
|
0.0f, // mAttnRadius
|
|
0.0f, // mAttnUpperY
|
|
0.0f, // mAttnLowerY
|
|
60,
|
|
8, // mDamageTimer
|
|
0, // mTestExpression
|
|
0, // mTestMotion
|
|
0, // mTestLookMode
|
|
false, // mTest
|
|
4.0f,
|
|
0.0f,
|
|
0.0f,
|
|
0.0f,
|
|
0.0f,
|
|
0.0f,
|
|
0.0f,
|
|
0.0f,
|
|
};
|
|
|
|
/* 80B533FC-80B53400 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */
|
|
static daNpc_Yelia_Param_c l_HIO;
|
|
|
|
/* 80B4D30C-80B4D458 0000EC 014C+00 1/0 0/0 0/0 .text __dt__13daNpc_Yelia_cFv */
|
|
daNpc_Yelia_c::~daNpc_Yelia_c() {
|
|
if (mpMorf[0] != NULL) {
|
|
mpMorf[0]->stopZelAnime();
|
|
}
|
|
deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
|
|
}
|
|
|
|
/* 80B4D458-80B4D754 000238 02FC+00 1/1 0/0 0/0 .text create__13daNpc_Yelia_cFv */
|
|
cPhs__Step daNpc_Yelia_c::create() {
|
|
if (!fopAcM_CheckCondition(this, fopAcCnd_INIT_e)) {
|
|
new (this) daNpc_Yelia_c(l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4,
|
|
l_motionSequenceData, 4, l_evtList, l_resNameList);
|
|
fopAcM_OnCondition(this, fopAcCnd_INIT_e);
|
|
}
|
|
|
|
mType = getType();
|
|
mFlowNodeNo = getFlowNodeNo();
|
|
mTwilight = false;
|
|
if (mType == TYPE_TWILIGHT) {
|
|
mTwilight = true;
|
|
}
|
|
|
|
cPhs__Step step = (cPhs__Step)loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
|
|
|
|
if (step == cPhs_COMPLEATE_e) {
|
|
if (isDelete()) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
static const int heapSize[] = {0x44d0, 0, 0x44d0, 0x44d0, 0x4410,
|
|
0x44d0, 0x44d0, 0x44d0, 0x44d0, 0};
|
|
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0, 200.0f);
|
|
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(l_HIO.m.mCcWeight, 0, this);
|
|
mCcCyl.Set(mCcDCyl);
|
|
mCcCyl.SetStts(&mCcStts);
|
|
mCcCyl.SetTgHitCallback(tgHitCallBack);
|
|
if (mType == TYPE_TWILIGHT || mType == TYPE_AFTER_ESCORT) {
|
|
mAcch.SetGrndNone();
|
|
mAcch.SetWallNone();
|
|
}
|
|
mAcch.CrrPos(dComIfG_Bgsp());
|
|
mGndChk = mAcch.m_gnd;
|
|
mGroundH = mAcch.GetGroundH();
|
|
if (mGroundH != -1.0e9f) {
|
|
setEnvTevColor();
|
|
setRoomNo();
|
|
}
|
|
reset();
|
|
mCreating = true;
|
|
Execute();
|
|
mCreating = false;
|
|
}
|
|
|
|
return step;
|
|
}
|
|
|
|
/* 80B4D754-80B4DA64 000534 0310+00 1/1 0/0 0/0 .text CreateHeap__13daNpc_Yelia_cFv */
|
|
int daNpc_Yelia_c::CreateHeap() {
|
|
int bmd_idx = 1;
|
|
if (mTwilight) {
|
|
bmd_idx = 2;
|
|
} else if (mType == TYPE_HORSE || mType == TYPE_REMINISCENCE || mType == TYPE_8) {
|
|
bmd_idx = 0;
|
|
}
|
|
|
|
J3DModelData* model_data = static_cast<J3DModelData*>(
|
|
dComIfG_getObjectRes(l_resNameList[l_bmdData[bmd_idx].arcIdx], l_bmdData[bmd_idx].fileIdx));
|
|
if (model_data == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mpMorf[0] = new mDoExt_McaMorfSO(model_data, NULL, NULL, NULL, -1, 1.0f, 0, -1,
|
|
&mSound, 0x80000, 0x11020284);
|
|
if (mpMorf[0] == NULL || mpMorf[0]->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
J3DModel* model = mpMorf[0]->getModel();
|
|
for (u16 i = 0; i < model_data->getJointNum(); i++) {
|
|
model_data->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
|
|
}
|
|
model->setUserArea((u32)this);
|
|
|
|
mpMatAnm[0] = new daNpcT_MatAnm_c();
|
|
if (mpMatAnm[0] == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
if (mTwilight) {
|
|
if (setFaceMotionAnm(1, false) && setMotionAnm(0, 0.0f, 0)) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
} else {
|
|
if (setFaceMotionAnm(1, false) && setMotionAnm(0, 0.0f, 0)) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80B4DC20-80B4DC54 000A00 0034+00 1/1 0/0 0/0 .text Delete__13daNpc_Yelia_cFv */
|
|
int daNpc_Yelia_c::Delete() {
|
|
this->~daNpc_Yelia_c();
|
|
return 1;
|
|
}
|
|
|
|
/* 80B4DC54-80B4DC74 000A34 0020+00 2/2 0/0 0/0 .text Execute__13daNpc_Yelia_cFv */
|
|
int daNpc_Yelia_c::Execute() {
|
|
return execute();
|
|
}
|
|
|
|
/* 80B4DC74-80B4DD08 000A54 0094+00 1/1 0/0 0/0 .text Draw__13daNpc_Yelia_cFv */
|
|
int daNpc_Yelia_c::Draw() {
|
|
if (mpMatAnm[0] != NULL) {
|
|
J3DModelData* model_data = mpMorf[0]->getModel()->getModelData();
|
|
model_data->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]);
|
|
}
|
|
return draw(FALSE, FALSE, mRealShadowSize, NULL, 100.0f, FALSE, FALSE, FALSE);
|
|
}
|
|
|
|
/* 80B4DD08-80B4DD28 000AE8 0020+00 1/1 0/0 0/0 .text
|
|
* createHeapCallBack__13daNpc_Yelia_cFP10fopAc_ac_c */
|
|
int daNpc_Yelia_c::createHeapCallBack(fopAc_ac_c* i_this) {
|
|
return static_cast<daNpc_Yelia_c*>(i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 80B4DD28-80B4DD80 000B08 0058+00 1/1 0/0 0/0 .text
|
|
* ctrlJointCallBack__13daNpc_Yelia_cFP8J3DJointi */
|
|
int daNpc_Yelia_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) {
|
|
if (param_1 == 0) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
daNpc_Yelia_c* _this = (daNpc_Yelia_c*)model->getUserArea();
|
|
if (_this != NULL) {
|
|
_this->ctrlJoint(i_joint, model);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 80B4DD80-80B4DDF8 000B60 0078+00 2/1 0/0 0/0 .text getType__13daNpc_Yelia_cFv */
|
|
u8 daNpc_Yelia_c::getType() {
|
|
switch (fopAcM_GetParam(this) & 0xff) {
|
|
case 0:
|
|
return TYPE_HORSE;
|
|
case 1:
|
|
return TYPE_1;
|
|
case 2:
|
|
return TYPE_REMINISCENCE;
|
|
case 3:
|
|
return TYPE_KAKARIKO;
|
|
case 4:
|
|
return TYPE_TWILIGHT;
|
|
case 5:
|
|
return TYPE_AFTER_ESCORT;
|
|
case 6:
|
|
return TYPE_WOOD_STATUE;
|
|
case 7:
|
|
return TYPE_MEMORIES_RESTORED;
|
|
case 8:
|
|
return TYPE_8;
|
|
default:
|
|
return TYPE_REMINISCENCE;
|
|
}
|
|
}
|
|
|
|
/* 80B4DDF8-80B4DF10 000BD8 0118+00 2/1 0/0 0/0 .text isDelete__13daNpc_Yelia_cFv */
|
|
BOOL daNpc_Yelia_c::isDelete() {
|
|
switch (mType) {
|
|
case TYPE_HORSE:
|
|
return false;
|
|
case TYPE_1:
|
|
return false;
|
|
case TYPE_REMINISCENCE:
|
|
return false;
|
|
case TYPE_KAKARIKO:
|
|
return !daNpcT_chkEvtBit(0x108) || daNpcT_chkEvtBit(0x11f);
|
|
case TYPE_TWILIGHT:
|
|
return false;
|
|
case TYPE_AFTER_ESCORT:
|
|
return !daNpcT_chkEvtBit(0x44) || daNpcT_chkEvtBit(0x108);
|
|
case TYPE_WOOD_STATUE:
|
|
return !daNpcT_chkEvtBit(0x11f) || daNpcT_chkEvtBit(0x120);
|
|
case TYPE_MEMORIES_RESTORED:
|
|
return !daNpcT_chkEvtBit(0x120);
|
|
case TYPE_8:
|
|
return false;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 80B4DF10-80B4E068 000CF0 0158+00 1/1 0/0 0/0 .text reset__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::reset() {
|
|
u32 size = (u32)&field_0xfec - (u32)&mpNextAction;
|
|
if (mpMatAnm[0] != NULL) {
|
|
mpMatAnm[0]->initialize();
|
|
}
|
|
initialize();
|
|
for (int i = 0; i < 4; i++) {
|
|
mActorMngr[i].initialize();
|
|
}
|
|
memset(&mpNextAction, 0, size);
|
|
mItemId = -1;
|
|
setAngle(home.angle.y);
|
|
}
|
|
|
|
/* 80B4E068-80B4E0F4 000E48 008C+00 1/0 0/0 0/0 .text afterJntAnm__13daNpc_Yelia_cFi */
|
|
void daNpc_Yelia_c::afterJntAnm(int i_jointNo) {
|
|
if (i_jointNo == 1) {
|
|
mDoMtx_stack_c::YrotM(-mStagger.getAngleZ(1));
|
|
mDoMtx_stack_c::ZrotM(mStagger.getAngleX(1));
|
|
} else if (i_jointNo == 4) {
|
|
mDoMtx_stack_c::YrotM(-mStagger.getAngleZ(0));
|
|
mDoMtx_stack_c::ZrotM(mStagger.getAngleX(0));
|
|
}
|
|
}
|
|
|
|
/* 80B4E0F4-80B4E2C0 000ED4 01CC+00 1/0 0/0 0/0 .text setParam__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::setParam() {
|
|
selectAction();
|
|
srchActors();
|
|
|
|
s16 speak_dist_idx = l_HIO.m.mSpeakDistIdx;
|
|
s16 speak_angle_idx = l_HIO.m.mSpeakAngleIdx;
|
|
s16 talk_dist_idx = l_HIO.m.mTalkDistIdx;
|
|
s16 talk_angle_idx = l_HIO.m.mTalkAngleIdx;
|
|
if (mType == TYPE_8) {
|
|
speak_dist_idx = 16;
|
|
speak_angle_idx = 6;
|
|
talk_dist_idx = 19;
|
|
talk_angle_idx = 6;
|
|
} else if (mType == TYPE_KAKARIKO && !daNpcT_chkEvtBit(0x11f)) {
|
|
speak_angle_idx = 3;
|
|
talk_angle_idx = 3;
|
|
}
|
|
if (daPy_getPlayerActorClass()->checkHorseRide()) {
|
|
if (speak_dist_idx < 7) {
|
|
speak_dist_idx = 7;
|
|
}
|
|
if (talk_dist_idx < 9) {
|
|
talk_dist_idx = 9;
|
|
}
|
|
}
|
|
attention_info.distances[fopAc_attn_LOCK_e] =
|
|
daNpcT_getDistTableIdx(talk_dist_idx, talk_angle_idx);
|
|
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
|
|
attention_info.distances[fopAc_attn_SPEAK_e] =
|
|
daNpcT_getDistTableIdx(speak_dist_idx, speak_angle_idx);
|
|
attention_info.flags = 0xa;
|
|
|
|
scale.set(l_HIO.m.mScale, l_HIO.m.mScale, l_HIO.m.mScale);
|
|
mCcStts.SetWeight(l_HIO.m.mCcWeight);
|
|
mCylH = l_HIO.m.mCylH;
|
|
mWallR = l_HIO.m.mWallR;
|
|
mAttnFovY = l_HIO.m.mAttnFovY;
|
|
if (mType == TYPE_8) {
|
|
mAttnFovY = 135.0f;
|
|
}
|
|
mAcchCir.SetWallR(mWallR);
|
|
mAcchCir.SetWallH(l_HIO.m.mWallH);
|
|
mRealShadowSize = l_HIO.m.mShadowDepth;
|
|
gravity = l_HIO.m.mGravity;
|
|
mExpressionMorfFrame = l_HIO.m.field_0x6c;
|
|
mMorfFrames = l_HIO.m.mMorfFrames;
|
|
if (mType == TYPE_TWILIGHT || mType == TYPE_AFTER_ESCORT) {
|
|
mAcch.SetGrndNone();
|
|
mAcch.SetWallNone();
|
|
gravity = 0.0f;
|
|
}
|
|
}
|
|
|
|
/* 80B4E2C0-80B4E5BC 0010A0 02FC+00 1/0 0/0 0/0 .text checkChangeEvt__13daNpc_Yelia_cFv
|
|
*/
|
|
BOOL daNpc_Yelia_c::checkChangeEvt() {
|
|
if (!chkAction(&talk)) {
|
|
mPreItemNo = 0;
|
|
if (dComIfGp_event_chkTalkXY()) {
|
|
if (dComIfGp_evmng_ChkPresentEnd()) {
|
|
mPreItemNo = dComIfGp_event_getPreItemNo();
|
|
if (mType == TYPE_WOOD_STATUE && daNpcT_chkEvtBit(0x11f)
|
|
&& mPreItemNo == fpcNm_ITEM_IRIAS_PENDANT)
|
|
{
|
|
if (mPendantTimer >= 70) {
|
|
dStage_changeScene(10, 0.0f, 0, fopAcM_GetRoomNo(this), 0,
|
|
dComIfG_play_c::getLayerNo(0));
|
|
} else {
|
|
if (mPendantTimer == 0) {
|
|
mSound.startCreatureVoice(Z2SE_YELIA_V_LOOK_KIBORI, -1);
|
|
} else if (mPendantTimer == 8) {
|
|
mFaceMotionSeqMngr.setNo(FACE_KIZUKU, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_KIZUKU, -1.0f, FALSE, 0);
|
|
}
|
|
mJntAnm.lookPlayer(false);
|
|
cLib_addCalcAngleS2(¤t.angle.y, fopAcM_searchPlayerAngleY(this),
|
|
4, 0x800);
|
|
shape_angle.y = current.angle.y;
|
|
mCurAngle.y = shape_angle.y;
|
|
}
|
|
mPendantTimer++;
|
|
}
|
|
else if (mType == TYPE_KAKARIKO && !daNpcT_chkEvtBit(0x11f)
|
|
&& mPreItemNo == fpcNm_ITEM_WOOD_STATUE)
|
|
{
|
|
mEvtNo = EVENT_TAKE_WOODSTATUE;
|
|
evtChange();
|
|
} else {
|
|
mEvtNo = EVENT_NO_RESPONSE;
|
|
evtChange();
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
switch (mType) {
|
|
case TYPE_TWILIGHT:
|
|
if (daNpcT_chkEvtBit(0x115)) {
|
|
mEvtNo = 3;
|
|
} else {
|
|
mEvtNo = 2;
|
|
}
|
|
evtChange();
|
|
return TRUE;
|
|
case TYPE_AFTER_ESCORT:
|
|
mEvtNo = EVENT_THANK_YOU;
|
|
evtChange();
|
|
return TRUE;
|
|
case TYPE_HORSE:
|
|
case TYPE_1:
|
|
case TYPE_REMINISCENCE:
|
|
case TYPE_KAKARIKO:
|
|
case TYPE_WOOD_STATUE:
|
|
case TYPE_MEMORIES_RESTORED:
|
|
case TYPE_8:
|
|
break;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/* 80B4E5BC-80B4E6A0 00139C 00E4+00 2/0 0/0 0/0 .text setAfterTalkMotion__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::setAfterTalkMotion() {
|
|
int no = FACE_NONE;
|
|
switch (mFaceMotionSeqMngr.getNo()) {
|
|
case FACE_1:
|
|
no = FACE_12;
|
|
break;
|
|
case FACE_KAISOU_TALK:
|
|
no = FACE_H_KAISOU_TALK;
|
|
break;
|
|
case FACE_SAD:
|
|
no = FACE_H_SAD;
|
|
break;
|
|
case FACE_TO_THINK:
|
|
no = FACE_H_THINK;
|
|
break;
|
|
case FACE_THINK:
|
|
no = FACE_H_THINK;
|
|
break;
|
|
case FACE_REMEMBER:
|
|
no = FACE_H_INTENSE;
|
|
break;
|
|
case FACE_REMEMBERING:
|
|
no = FACE_H_REMEMBERING;
|
|
break;
|
|
case FACE_INTENSE:
|
|
no = FACE_H_INTENSE;
|
|
break;
|
|
case FACE_ASK:
|
|
no = FACE_H_ASK;
|
|
break;
|
|
case FACE_HAPPY_TALK:
|
|
no = FACE_H_HAPPY_TALK;
|
|
break;
|
|
case FACE_KIZUKU:
|
|
no = FACE_H_KIZUKU;
|
|
break;
|
|
case FACE_LISTEN:
|
|
no = FACE_H_LISTEN;
|
|
break;
|
|
}
|
|
mFaceMotionSeqMngr.setNo(no, -1.0f, FALSE, 0);
|
|
}
|
|
|
|
/* 80B4E6A0-80B4E7C8 001480 0128+00 1/1 0/0 0/0 .text srchActors__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::srchActors() {
|
|
switch (mType) {
|
|
case TYPE_KAKARIKO:
|
|
if (mActorMngr[2].getActorP() == NULL) {
|
|
mActorMngr[2].entry(getNearestActorP(PROC_NPC_GRD));
|
|
}
|
|
if (mActorMngr[3].getActorP() == NULL) {
|
|
mActorMngr[3].entry(getNearestActorP(PROC_NPC_GRZ));
|
|
}
|
|
break;
|
|
case TYPE_TWILIGHT:
|
|
if (mActorMngr[0].getActorP() == NULL) {
|
|
mActorMngr[0].entry(getNearestActorP(PROC_NPC_THE));
|
|
}
|
|
if (mActorMngr[1].getActorP() == NULL) {
|
|
mActorMngr[1].entry(getNearestActorP(PROC_NPC_ZRC));
|
|
}
|
|
break;
|
|
case TYPE_AFTER_ESCORT:
|
|
if (mActorMngr[1].getActorP() == NULL) {
|
|
mActorMngr[1].entry(getNearestActorP(PROC_NPC_KOLINB));
|
|
}
|
|
break;
|
|
case TYPE_HORSE:
|
|
case TYPE_1:
|
|
case TYPE_REMINISCENCE:
|
|
case TYPE_WOOD_STATUE:
|
|
case TYPE_MEMORIES_RESTORED:
|
|
case TYPE_8:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 80B4E7C8-80B4E868 0015A8 00A0+00 1/0 0/0 0/0 .text evtTalk__13daNpc_Yelia_cFv */
|
|
BOOL daNpc_Yelia_c::evtTalk() {
|
|
if (chkAction(&talk)) {
|
|
(this->*mpAction)(NULL);
|
|
} else {
|
|
setAction(&talk);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80B4E868-80B4E930 001648 00C8+00 1/0 0/0 0/0 .text evtCutProc__13daNpc_Yelia_cFv */
|
|
BOOL daNpc_Yelia_c::evtCutProc() {
|
|
int staff_id = dComIfGp_getEventManager().getMyStaffId("Yelia", this, -1);
|
|
if (staff_id != -1) {
|
|
mStaffId = staff_id;
|
|
int act_idx = dComIfGp_getEventManager().getMyActIdx(mStaffId, mCutNameList, 6, 0, 0);
|
|
if ((this->*mCutList[act_idx])(mStaffId)) {
|
|
dComIfGp_getEventManager().cutEnd(mStaffId);
|
|
}
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
/* 80B4E930-80B4EA28 001710 00F8+00 1/0 0/0 0/0 .text action__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::action() {
|
|
hitChk(&mCcCyl, -1);
|
|
if (mStagger.checkRebirth()) {
|
|
mStagger.initialize();
|
|
mMode = MODE_INIT;
|
|
}
|
|
if (mpNextAction != NULL) {
|
|
if (mpAction == mpNextAction) {
|
|
(this->*mpAction)(NULL);
|
|
} else {
|
|
setAction(mpNextAction);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80B4EA28-80B4EAEC 001808 00C4+00 1/0 0/0 0/0 .text beforeMove__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::beforeMove() {
|
|
fopAcM_OffStatus(this, 0x8000000);
|
|
if (checkHide()) {
|
|
fopAcM_OnStatus(this, 0x8000000);
|
|
}
|
|
if (checkHide() || mNoDraw) {
|
|
attention_info.flags = 0;
|
|
}
|
|
}
|
|
|
|
/* 80B4EAEC-80B4EE4C 0018CC 0360+00 1/0 0/0 0/0 .text setAttnPos__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::setAttnPos() {
|
|
cXyz eye_offset(30.0f, -5.0f, 0.0f);
|
|
cXyz vec(0.0f, -5.0f, 0.0f);
|
|
mStagger.calc(FALSE);
|
|
|
|
f32 angle_diff = cM_s2rad(mCurAngle.y - field_0xd7e.y);
|
|
if (mType == TYPE_TWILIGHT || mType == TYPE_AFTER_ESCORT) {
|
|
mJntAnm.setParam(this, mpMorf[0]->getModel(), &eye_offset, getBackboneJointNo(),
|
|
getNeckJointNo(), getHeadJointNo(), 0.0f, 0.0f, 0.0f, 0.0f,
|
|
l_HIO.m.mHeadDownAngle, l_HIO.m.mHeadUpAngle, l_HIO.m.mHeadRightAngle,
|
|
l_HIO.m.mHeadLeftAngle, l_HIO.m.mNeckAngleScl, angle_diff, &vec);
|
|
} else {
|
|
mJntAnm.setParam(this, mpMorf[0]->getModel(), &eye_offset, getBackboneJointNo(),
|
|
getNeckJointNo(), getHeadJointNo(), l_HIO.m.mBodyDownAngle,
|
|
l_HIO.m.mBodyUpAngle, l_HIO.m.mBodyRightAngle, l_HIO.m.mBodyLeftAngle,
|
|
l_HIO.m.mHeadDownAngle, l_HIO.m.mHeadUpAngle, l_HIO.m.mHeadRightAngle,
|
|
l_HIO.m.mHeadLeftAngle, l_HIO.m.mNeckAngleScl, angle_diff, &vec);
|
|
}
|
|
mJntAnm.calcJntRad(0.2f, 1.0f, angle_diff);
|
|
|
|
setMtx();
|
|
mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo()));
|
|
mDoMtx_stack_c::multVec(&eye_offset, &eyePos);
|
|
mJntAnm.setEyeAngleX(eyePos, 1.0f, -0x1000);
|
|
mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, TRUE, 1.0f, 0);
|
|
|
|
if (mType == TYPE_TWILIGHT || mType == TYPE_AFTER_ESCORT) {
|
|
vec.set(0.0f, 150.0f, 20.0f);
|
|
} else {
|
|
vec.set(0.0f, l_HIO.m.mAttnOffsetY, 10.0f);
|
|
}
|
|
mDoMtx_stack_c::YrotS(mCurAngle.y);
|
|
mDoMtx_stack_c::multVec(&vec, &vec);
|
|
attention_info.position = vec + current.pos;
|
|
}
|
|
|
|
/* 80B4EE4C-80B4EFA4 001C2C 0158+00 1/0 0/0 0/0 .text setCollision__13daNpc_Yelia_cFv */
|
|
void daNpc_Yelia_c::setCollision() {
|
|
cXyz vec;
|
|
|
|
if (!mHide) {
|
|
u32 tg_type = 0xd8fbfdff;
|
|
u32 tg_sprm = 0x1f;
|
|
if (mTwilight) {
|
|
tg_type = 0;
|
|
tg_sprm = 0;
|
|
} else if (mStagger.checkStagger()) {
|
|
tg_type = 0;
|
|
tg_sprm = 0;
|
|
}
|
|
mCcCyl.SetCoSPrm(0x79);
|
|
mCcCyl.SetTgType(tg_type);
|
|
mCcCyl.SetTgSPrm(tg_sprm);
|
|
mCcCyl.OnTgNoHitMark();
|
|
|
|
vec.set(0.0f, 0.0f, 0.0f);
|
|
f32 height = mCylH;
|
|
f32 radius = mWallR;
|
|
mDoMtx_stack_c::YrotS(mCurAngle.y);
|
|
mDoMtx_stack_c::multVec(&vec, &vec);
|
|
vec += current.pos;
|
|
mCcCyl.SetH(height);
|
|
mCcCyl.SetR(radius);
|
|
mCcCyl.SetC(vec);
|
|
dComIfG_Ccsp()->Set(&mCcCyl);
|
|
}
|
|
|
|
mCcCyl.ClrCoHit();
|
|
mCcCyl.ClrTgHit();
|
|
}
|
|
|
|
/* 80B4EFA4-80B4EFAC 001D84 0008+00 1/0 0/0 0/0 .text drawDbgInfo__13daNpc_Yelia_cFv */
|
|
BOOL daNpc_Yelia_c::drawDbgInfo() {
|
|
return FALSE;
|
|
}
|
|
|
|
/* 80B4EFAC-80B4F054 001D8C 00A8+00 1/1 0/0 0/0 .text selectAction__13daNpc_Yelia_cFv */
|
|
BOOL daNpc_Yelia_c::selectAction() {
|
|
mpNextAction = NULL;
|
|
switch (mType) {
|
|
case TYPE_HORSE:
|
|
mpNextAction = &horseWait;
|
|
break;
|
|
case TYPE_REMINISCENCE:
|
|
mpNextAction = &reminiscence;
|
|
break;
|
|
default:
|
|
mpNextAction = &wait;
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80B4F054-80B4F080 001E34 002C+00 2/2 0/0 0/0 .text
|
|
* chkAction__13daNpc_Yelia_cFM13daNpc_Yelia_cFPCvPvPv_i */
|
|
BOOL daNpc_Yelia_c::chkAction(BOOL (daNpc_Yelia_c::*i_action)(void*)) {
|
|
return mpAction == i_action;
|
|
}
|
|
|
|
/* 80B4F080-80B4F128 001E60 00A8+00 2/2 0/0 0/0 .text
|
|
* setAction__13daNpc_Yelia_cFM13daNpc_Yelia_cFPCvPvPv_i */
|
|
BOOL daNpc_Yelia_c::setAction(BOOL (daNpc_Yelia_c::*i_action)(void*)) {
|
|
mMode = MODE_EXIT;
|
|
if (mpAction != NULL) {
|
|
(this->*mpAction)(NULL);
|
|
}
|
|
|
|
mMode = MODE_ENTER;
|
|
mpAction = i_action;
|
|
if (mpAction != NULL) {
|
|
(this->*mpAction)(NULL);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80B4F128-80B4F3E0 001F08 02B8+00 1/0 0/0 0/0 .text
|
|
* cutConversationAboutLoopHole__13daNpc_Yelia_cFi */
|
|
BOOL daNpc_Yelia_c::cutConversationAboutLoopHole(int i_staffId) {
|
|
BOOL ret = FALSE;
|
|
int prm = -1;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
|
|
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffId)) {
|
|
switch (prm) {
|
|
case 0:
|
|
break;
|
|
|
|
case 1:
|
|
mFaceMotionSeqMngr.setNo(FACE_HORSE_LOOKBACK, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_LOOKBACK, -1.0f, FALSE, 0);
|
|
break;
|
|
|
|
case 2:
|
|
mFaceMotionSeqMngr.setNo(FACE_HORSE_RETURN, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_RETURN, -1.0f, FALSE, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (prm) {
|
|
case 0:
|
|
ret = TRUE;
|
|
break;
|
|
|
|
case 1:
|
|
if (mMotionSeqMngr.getNo() == MOTION_HORSE_LOOKBACK) {
|
|
if (mMotionSeqMngr.checkEndSequence()) {
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_WAIT_C, -1.0f, FALSE, 0);
|
|
}
|
|
} else {
|
|
ret = TRUE;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (mMotionSeqMngr.getNo() == MOTION_HORSE_RETURN) {
|
|
if (mMotionSeqMngr.checkEndSequence()) {
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_WAIT_A, -1.0f, FALSE, 0);
|
|
}
|
|
} else {
|
|
ret = TRUE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 80B4F3E0-80B4F534 0021C0 0154+00 1/0 0/0 0/0 .text cutTWResistance__13daNpc_Yelia_cFi
|
|
*/
|
|
BOOL daNpc_Yelia_c::cutTWResistance(int i_staffId) {
|
|
BOOL ret = FALSE;
|
|
int prm = -1;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
|
|
fopAc_ac_c* actors[2] = {this, mActorMngr[0].getActorP()};
|
|
dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], NULL, NULL, NULL, NULL,
|
|
NULL, NULL, NULL, NULL);
|
|
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffId)) {
|
|
switch (prm) {
|
|
case 0:
|
|
break;
|
|
|
|
case 1:
|
|
initTalk(mFlowNodeNo, NULL);
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (prm) {
|
|
case 0:
|
|
ret = TRUE;
|
|
break;
|
|
|
|
case 1:
|
|
if (talkProc(NULL, TRUE, actors, FALSE) && mFlow.checkEndFlow()) {
|
|
ret = TRUE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 80B4F534-80B4FDD8 002314 08A4+00 1/0 0/0 0/0 .text cutTakeWoodStatue__13daNpc_Yelia_cFi */
|
|
BOOL daNpc_Yelia_c::cutTakeWoodStatue(int i_staffId) {
|
|
daDitem_c* item = NULL;
|
|
cXyz pos;
|
|
csXyz angle;
|
|
char name[0x68];
|
|
BOOL ret = FALSE;
|
|
int prm = -1;
|
|
int timer = 0;
|
|
int msgNo = 0;
|
|
int send = 0;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
int* timer_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "timer");
|
|
if (timer_p != NULL) {
|
|
timer = *timer_p;
|
|
}
|
|
int* msgNo_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
|
|
if (msgNo_p != NULL) {
|
|
msgNo = *msgNo_p;
|
|
}
|
|
int* send_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "send");
|
|
if (send_p != NULL) {
|
|
send = *send_p;
|
|
}
|
|
|
|
fopAc_ac_c* actors[2] = {this, mActorMngr[2].getActorP()};
|
|
dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], NULL, NULL, NULL, NULL,
|
|
NULL, NULL, NULL, NULL);
|
|
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffId)) {
|
|
switch (prm) {
|
|
case 0:
|
|
mFaceMotionSeqMngr.setNo(FACE_H_INTENSE, 0.0f, TRUE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_LOOKING, 0.0f, TRUE, 0);
|
|
mSound.startCreatureVoice(Z2SE_YELIA_V_LOOK_KIBORI, -1);
|
|
daNpcT_offTmpBit(0xb);
|
|
daNpcT_offTmpBit(0xc);
|
|
dComIfGs_onSaveSwitch(6, 0x40);
|
|
if (daNpcT_getPlayerInfoFromPlayerList(10, fopAcM_GetRoomNo(this), &pos, &angle)) {
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, angle.y, 0);
|
|
dComIfGp_evmng_setGoal(&pos);
|
|
}
|
|
if (fopAcM_SearchByID(mItemId, (fopAc_ac_c**)&item)
|
|
&& item != NULL && fopAc_IsActor(item)) {
|
|
item->scale.setall(0.55f);
|
|
item->show();
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
case 8:
|
|
initTalk(0x26, NULL);
|
|
break;
|
|
|
|
case 4:
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, 0.0f, TRUE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_ASKING, 0.0f, TRUE, 0);
|
|
break;
|
|
|
|
case 5:
|
|
if (mFaceMotionSeqMngr.getNo() != FACE_H_ASK) {
|
|
mFaceMotionSeqMngr.setNo(FACE_H_ASK, -1.0f, TRUE, 0);
|
|
}
|
|
if (mMotionSeqMngr.getNo() != MOTION_TO_WORRY) {
|
|
mMotionSeqMngr.setNo(MOTION_TO_WORRY, -1.0f, TRUE, 0);
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 9:
|
|
mFaceMotionSeqMngr.setNo(FACE_H_ASK, 0.0f, TRUE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_ASKING, 0.0f, TRUE, 0);
|
|
mEventTimer = timer;
|
|
break;
|
|
|
|
case 11:
|
|
case 99:
|
|
mFaceMotionSeqMngr.setNo(FACE_H_INTENSE, 0.0f, TRUE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_ASKING, 0.0f, TRUE, 0);
|
|
pos = daPy_getPlayerActorClass()->current.pos;
|
|
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, 0, 0);
|
|
dComIfGp_evmng_setGoal(&pos);
|
|
Z2GetAudioMgr()->unMuteSceneBgm(60);
|
|
if (prm == 99) {
|
|
daNpcT_onEvtBit(0x11f);
|
|
daNpcT_onEvtBit(0x17a);
|
|
dComIfGs_setWarashibeItem(0xff);
|
|
daNpcT_offTmpBit(0xb);
|
|
daNpcT_offTmpBit(0xc);
|
|
dComIfGs_onSaveSwitch(6, 0x40);
|
|
dComIfGs_onSaveSwitch(6, 0x1c);
|
|
mFlow.remove();
|
|
}
|
|
break;
|
|
|
|
case 13:
|
|
mItemId = fpcM_ERROR_PROCESS_ID_e;
|
|
mEventTimer = timer;
|
|
Z2GetAudioMgr()->muteSceneBgm(90, 0.0f);
|
|
strcpy(name, l_evtList[EVENT_TAKE_WOODSTATUE].eventName);
|
|
strcat(name, "@");
|
|
dComIfGp_getEvent().setSkipZev(this, name);
|
|
dComIfGp_getEvent().onSkipFade();
|
|
break;
|
|
}
|
|
|
|
if ((prm == 6 || prm == 99) && mItemId != fpcM_ERROR_PROCESS_ID_e
|
|
&& fopAcM_IsExecuting(mItemId)
|
|
&& fopAcM_SearchByID(mItemId, (fopAc_ac_c**)&item)
|
|
&& item != NULL && fopAc_IsActor(item)) {
|
|
fopAcM_delete(item);
|
|
}
|
|
}
|
|
|
|
int msgs[2] = {-1, -1};
|
|
|
|
switch (prm) {
|
|
case 0:
|
|
ret = TRUE;
|
|
break;
|
|
|
|
case 1:
|
|
case 2:
|
|
case 4:
|
|
case 6:
|
|
msgs[0] = msgNo;
|
|
if (talkProc(msgs, send, actors, FALSE)) {
|
|
if (msgNo == 0) {
|
|
if (mFlow.checkEndFlow()) {
|
|
ret = TRUE;
|
|
}
|
|
} else {
|
|
ret = TRUE;
|
|
}
|
|
}
|
|
if (prm == 6 && !send) {
|
|
ret = TRUE;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
case 5:
|
|
case 8:
|
|
if (talkProc(NULL, send, actors, FALSE) && mFlow.checkEndFlow()) {
|
|
ret = TRUE;
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
case 9:
|
|
case 13:
|
|
if (cLib_calcTimer(&mEventTimer) == 0) {
|
|
if (prm == 13) {
|
|
if (mItemId == fpcM_ERROR_PROCESS_ID_e) {
|
|
mItemId = fopAcM_createItemForPresentDemo(¤t.pos,
|
|
fpcNm_ITEM_WOOD_STATUE, 9, -1, fopAcM_GetRoomNo(this), &mCurAngle, &scale);
|
|
}
|
|
if (fopAcM_SearchByID(mItemId, (fopAc_ac_c**)&item)
|
|
&& item != NULL && fopAc_IsActor(item)) {
|
|
pos.set(0.0f, 110.0f, 30.0f);
|
|
mDoMtx_stack_c::YrotS(mCurAngle.y);
|
|
mDoMtx_stack_c::multVec(&pos, &pos);
|
|
pos += current.pos;
|
|
item->setOffsetPos(pos);
|
|
item->setMaxScale(0.55f);
|
|
item->scale.setall(0.0f);
|
|
item->hide();
|
|
ret = TRUE;
|
|
}
|
|
} else {
|
|
ret = TRUE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
case 11:
|
|
case 99:
|
|
ret = TRUE;
|
|
break;
|
|
|
|
case 12:
|
|
ret = TRUE;
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 80B4FDD8-80B4FE78 002BB8 00A0+00 1/0 0/0 0/0 .text cutClothTry__13daNpc_Yelia_cFi */
|
|
BOOL daNpc_Yelia_c::cutClothTry(int i_staffId) {
|
|
BOOL ret = 0;
|
|
int prm = -1;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
|
|
dComIfGp_getEventManager().getIsAddvance(i_staffId);
|
|
|
|
switch (prm) {
|
|
case 0:
|
|
action();
|
|
ret = TRUE;
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 80B4FE78-80B50084 002C58 020C+00 1/0 0/0 0/0 .text cutThankYou__13daNpc_Yelia_cFi */
|
|
BOOL daNpc_Yelia_c::cutThankYou(int i_staffId) {
|
|
BOOL ret = 0;
|
|
int prm = -1;
|
|
int msgNo = 0;
|
|
int msgNo2 = 0;
|
|
int* prm_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
|
if (prm_p != NULL) {
|
|
prm = *prm_p;
|
|
}
|
|
int* msgNo_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo");
|
|
if (msgNo_p != NULL) {
|
|
msgNo = *msgNo_p;
|
|
}
|
|
int* msgNo2_p = dComIfGp_evmng_getMyIntegerP(i_staffId, "msgNo2");
|
|
if (msgNo2_p != NULL) {
|
|
msgNo2 = *msgNo2_p;
|
|
}
|
|
|
|
if (dComIfGp_getEventManager().getIsAddvance(i_staffId)) {
|
|
switch (prm) {
|
|
case 0:
|
|
break;
|
|
|
|
case 1:
|
|
mJntAnm.lookPlayer(false);
|
|
initTalk(mFlowNodeNo, NULL);
|
|
break;
|
|
|
|
case 2:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int msgs[3] = {-1, -1, -1};
|
|
switch (prm) {
|
|
case 0:
|
|
ret = TRUE;
|
|
break;
|
|
|
|
case 1:
|
|
msgs[0] = msgNo;
|
|
msgs[1] = msgNo2;
|
|
if (talkProc(msgs, FALSE, NULL, FALSE)) {
|
|
if (msgNo == 0 || msgNo2 == 0) {
|
|
if (mFlow.checkEndFlow()) {
|
|
ret = TRUE;
|
|
}
|
|
} else {
|
|
ret = TRUE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) {
|
|
ret = TRUE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 80B50084-80B5080C 002E64 0788+00 1/0 0/0 0/0 .text wait__13daNpc_Yelia_cFPv */
|
|
BOOL daNpc_Yelia_c::wait(void* param_0) {
|
|
switch (mMode) {
|
|
case MODE_ENTER:
|
|
case MODE_INIT:
|
|
if (!mStagger.checkStagger()) {
|
|
switch (mType) {
|
|
case TYPE_HORSE:
|
|
case TYPE_1:
|
|
case TYPE_REMINISCENCE:
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0);
|
|
break;
|
|
|
|
case TYPE_KAKARIKO:
|
|
if (daNpcT_chkEvtBit(0x11f)) {
|
|
mFaceMotionSeqMngr.setNo(FACE_H_INTENSE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_ASKING, -1.0f, FALSE, 0);
|
|
} else {
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_WAIT_UTUMUKU, -1.0f, FALSE, 0);
|
|
}
|
|
break;
|
|
|
|
case TYPE_TWILIGHT:
|
|
mFaceMotionSeqMngr.setNo(FACE_H_SAD, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_DEMO_WAIT_SIT, -1.0f, FALSE, 0);
|
|
break;
|
|
|
|
case TYPE_AFTER_ESCORT:
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_DEMO_WAIT_SIT, -1.0f, FALSE, 0);
|
|
break;
|
|
|
|
case TYPE_WOOD_STATUE:
|
|
mFaceMotionSeqMngr.setNo(FACE_H_INTENSE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_ASKING, -1.0f, FALSE, 0);
|
|
break;
|
|
|
|
case TYPE_MEMORIES_RESTORED:
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0);
|
|
break;
|
|
|
|
default:
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0);
|
|
break;
|
|
}
|
|
|
|
mMode = MODE_RUN;
|
|
}
|
|
// fallthrough
|
|
|
|
case MODE_RUN:
|
|
if (mType == TYPE_MEMORIES_RESTORED && !daNpcT_chkEvtBit(0x30c)) {
|
|
mSpeakEvent = true;
|
|
field_0xe33 = true;
|
|
}
|
|
|
|
if (!mStagger.checkStagger()) {
|
|
if (mType == TYPE_TWILIGHT) {
|
|
fopAc_ac_c* ralis = mActorMngr[1].getActorP();
|
|
if (ralis != NULL) {
|
|
mJntAnm.lookPos(&ralis->eyePos, false);
|
|
} else {
|
|
mJntAnm.lookNone(false);
|
|
}
|
|
} else {
|
|
if ((mType == TYPE_KAKARIKO && !daNpcT_chkEvtBit(0x11f))
|
|
|| mType == TYPE_AFTER_ESCORT) {
|
|
mPlayerActorMngr.remove();
|
|
}
|
|
if (mPlayerActorMngr.getActorP() != NULL && !mTwilight) {
|
|
mJntAnm.lookPlayer(false);
|
|
if (!chkActorInSight(mPlayerActorMngr.getActorP(), mAttnFovY, mCurAngle.y)) {
|
|
mJntAnm.lookNone(false);
|
|
}
|
|
if (!srchPlayerActor() && home.angle.y == mCurAngle.y) {
|
|
mMode = MODE_INIT;
|
|
}
|
|
} else {
|
|
mJntAnm.lookNone(false);
|
|
if (mType != TYPE_AFTER_ESCORT) {
|
|
if (home.angle.y != mCurAngle.y) {
|
|
if (field_0xe34) {
|
|
if ((mType == TYPE_KAKARIKO && daNpcT_chkEvtBit(0x11f))
|
|
|| mType == TYPE_WOOD_STATUE) {
|
|
if (step(home.angle.y, FACE_H_ASK, MOTION_ASK_STEP, 15, 0)) {
|
|
mMode = MODE_INIT;
|
|
}
|
|
} else if (step(home.angle.y, FACE_NONE, MOTION_STEP, 15, 0)) {
|
|
mMode = MODE_INIT;
|
|
}
|
|
} else {
|
|
setAngle(home.angle.y);
|
|
mMode = MODE_INIT;
|
|
}
|
|
attention_info.flags = 0;
|
|
} else {
|
|
srchPlayerActor();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
switch (mJntAnm.getMode()) {
|
|
case daNpcT_JntAnm_c::LOOK_NONE:
|
|
switch (mType) {
|
|
case TYPE_AFTER_ESCORT:
|
|
fopAc_ac_c* colin = mActorMngr[1].getActorP();
|
|
if (colin != NULL) {
|
|
mJntAnm.lookPos(&colin->eyePos, false);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case MODE_EXIT:
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80B5080C-80B50A0C 0035EC 0200+00 5/0 0/0 0/0 .text horseWait__13daNpc_Yelia_cFPv */
|
|
BOOL daNpc_Yelia_c::horseWait(void* param_0) {
|
|
switch (mMode) {
|
|
case MODE_ENTER:
|
|
case MODE_INIT:
|
|
mMode = MODE_RUN;
|
|
// fallthrough
|
|
|
|
case MODE_RUN:
|
|
if (!mStagger.checkStagger()) {
|
|
switch (mMotionSeqMngr.getNo()) {
|
|
case MOTION_HORSE_RETURN:
|
|
if (mMotionSeqMngr.checkEndSequence()) {
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_WAIT_A, -1.0f, FALSE, 0);
|
|
}
|
|
break;
|
|
case MOTION_HORSE_WAIT_C:
|
|
mFaceMotionSeqMngr.setNo(FACE_HORSE_RETURN, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_RETURN, -1.0f, FALSE, 0);
|
|
break;
|
|
default:
|
|
if (mMotionSeqMngr.getNo() != MOTION_HORSE_WAIT_A) {
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_WAIT_A, -1.0f, FALSE, 0);
|
|
}
|
|
break;
|
|
}
|
|
mJntAnm.lookNone(false);
|
|
attention_info.flags = 0;
|
|
}
|
|
break;
|
|
|
|
case MODE_EXIT:
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80B50A0C-80B50B60 0037EC 0154+00 1/0 0/0 0/0 .text reminiscence__13daNpc_Yelia_cFPv */
|
|
BOOL daNpc_Yelia_c::reminiscence(void* param_0) {
|
|
switch (mMode) {
|
|
case MODE_ENTER:
|
|
case MODE_INIT:
|
|
mFaceMotionSeqMngr.setNo(FACE_KAISOU_WAIT_A, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_KAISOU_WAIT_A, -1.0f, FALSE, 0);
|
|
mMode = MODE_RUN;
|
|
// fallthrough
|
|
|
|
case MODE_RUN:
|
|
field_0xe2d = false;
|
|
if (dComIfGp_event_runCheck() != FALSE
|
|
&& !strcmp("SMELL_1st", dComIfGp_getEventManager().getRunEventName()))
|
|
{
|
|
dComIfGp_event_setTalkPartner(this);
|
|
field_0xe2d = true;
|
|
}
|
|
if (!mStagger.checkStagger()) {
|
|
mJntAnm.lookNone(false);
|
|
}
|
|
break;
|
|
|
|
case MODE_EXIT:
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80B50B60-80B50EE0 003940 0380+00 3/0 0/0 0/0 .text talk__13daNpc_Yelia_cFPv */
|
|
BOOL daNpc_Yelia_c::talk(void* param_0) {
|
|
switch (mMode) {
|
|
case MODE_ENTER:
|
|
case MODE_INIT:
|
|
if (!mStagger.checkStagger()) {
|
|
if (&horseWait == mpNextAction) {
|
|
mFaceMotionSeqMngr.setNo(FACE_HORSE_LOOKBACK, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_LOOKBACK, -1.0f, FALSE, 0);
|
|
}
|
|
initTalk(mFlowNodeNo, NULL);
|
|
mMode = 2;
|
|
}
|
|
// fallthrough
|
|
|
|
case MODE_RUN:
|
|
if (!mStagger.checkStagger()) {
|
|
if (&horseWait == mpNextAction && mMotionSeqMngr.getNo() == MOTION_HORSE_LOOKBACK) {
|
|
if (mMotionSeqMngr.checkEndSequence()) {
|
|
mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0);
|
|
mMotionSeqMngr.setNo(MOTION_HORSE_WAIT_C, -1.0f, FALSE, 0);
|
|
}
|
|
return FALSE;
|
|
} else if (mTwilight || mPlayerAngle == mCurAngle.y || &horseWait == mpNextAction
|
|
|| (mType == TYPE_KAKARIKO && !daNpcT_chkEvtBit(0x11f))
|
|
|| mType == TYPE_AFTER_ESCORT)
|
|
{
|
|
if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) {
|
|
mPlayerActorMngr.entry(daPy_getPlayerActorClass());
|
|
dComIfGp_event_reset();
|
|
mMode = MODE_EXIT;
|
|
}
|
|
mJntAnm.lookPlayer(false);
|
|
if (mTwilight || &horseWait == mpNextAction) {
|
|
mJntAnm.lookNone(false);
|
|
}
|
|
} else {
|
|
mJntAnm.lookPlayer(false);
|
|
if ((mType == TYPE_KAKARIKO && daNpcT_chkEvtBit(0x11f))
|
|
|| mType == TYPE_WOOD_STATUE)
|
|
{
|
|
step(mPlayerAngle, FACE_H_ASK, MOTION_ASK_STEP, 15, 0);
|
|
} else {
|
|
step(mPlayerAngle, FACE_NONE, MOTION_STEP, 15, 0);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case MODE_EXIT:
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/* 80B50EE0-80B50F00 003CC0 0020+00 1/0 0/0 0/0 .text daNpc_Yelia_Create__FPv */
|
|
static cPhs__Step daNpc_Yelia_Create(void* i_this) {
|
|
return static_cast<daNpc_Yelia_c*>(i_this)->create();
|
|
}
|
|
|
|
/* 80B50F00-80B50F20 003CE0 0020+00 1/0 0/0 0/0 .text daNpc_Yelia_Delete__FPv */
|
|
static int daNpc_Yelia_Delete(void* i_this) {
|
|
return static_cast<daNpc_Yelia_c*>(i_this)->Delete();
|
|
}
|
|
|
|
/* 80B50F20-80B50F40 003D00 0020+00 1/0 0/0 0/0 .text daNpc_Yelia_Execute__FPv */
|
|
static int daNpc_Yelia_Execute(void* i_this) {
|
|
return static_cast<daNpc_Yelia_c*>(i_this)->Execute();
|
|
}
|
|
|
|
/* 80B50F40-80B50F60 003D20 0020+00 1/0 0/0 0/0 .text daNpc_Yelia_Draw__FPv */
|
|
static int daNpc_Yelia_Draw(void* i_this) {
|
|
return static_cast<daNpc_Yelia_c*>(i_this)->Draw();
|
|
}
|
|
|
|
/* 80B50F60-80B50F68 003D40 0008+00 1/0 0/0 0/0 .text daNpc_Yelia_IsDelete__FPv */
|
|
static int daNpc_Yelia_IsDelete(void* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 80B53220-80B53240 -00001 0020+00 1/0 0/0 0/0 .data daNpc_Yelia_MethodTable */
|
|
static actor_method_class daNpc_Yelia_MethodTable = {
|
|
(process_method_func)daNpc_Yelia_Create,
|
|
(process_method_func)daNpc_Yelia_Delete,
|
|
(process_method_func)daNpc_Yelia_Execute,
|
|
(process_method_func)daNpc_Yelia_IsDelete,
|
|
(process_method_func)daNpc_Yelia_Draw,
|
|
};
|
|
|
|
/* 80B53240-80B53270 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_YELIA */
|
|
extern actor_process_profile_definition g_profile_NPC_YELIA = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
7, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_NPC_YELIA, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daNpc_Yelia_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
379, // mPriority
|
|
&daNpc_Yelia_MethodTable, // sub_method
|
|
0x00040108, // mStatus
|
|
fopAc_NPC_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|