/** * @file d_a_npc_ykm.cpp * */ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_midna.h" #include "d/actor/d_a_npc_ykm.h" #include "JSystem/JHostIO/JORFile.h" #include "d/actor/d_a_obj_gadget.h" #include "d/actor/d_a_tag_evtarea.h" #include "d/d_debug_viewer.h" #include "d/d_item.h" #include "d/d_meter2_info.h" #include "d/d_timer.h" #include "d/d_tresure.h" enum ykM_RES_File_ID { /* BCK */ /* 0x06 */ BCK_YKM_F_ASK = 0x6, /* 0x07 */ BCK_YKM_F_LAUGH, /* 0x08 */ BCK_YKM_F_REGRET, /* 0x09 */ BCK_YKM_F_TALK_A, /* 0x0A */ BCK_YKM_F_TALK_B, /* 0x0B */ BCK_YKM_F_TALK_C, /* 0x0C */ BCK_YKM_FH_LAUGH, /* 0x0D */ BCK_YKM_FH_REGRET, /* 0x0E */ BCK_YKM_FUNWAIT, /* 0x0F */ BCK_YKM_STEP, /* 0x10 */ BCK_YKM_TALK_B, /* 0x11 */ BCK_YKM_TALK_C, /* 0x12 */ BCK_YKM_WAIT_A, /* 0x13 */ BCK_YKM_WALK, /* BMDR */ /* 0x16 */ BMDR_YKM = 0x16, /* BTK */ /* 0x19 */ BTK_YKM = 0x19, /* BTP */ /* 0x1C */ BTP_YKM = 0x1C, /* 0x1D */ BTP_YKM_F_ASK, /* 0x1E */ BTP_YKM_F_LAUGH, /* 0x1F */ BTP_YKM_F_REGRET, /* 0x20 */ BTP_YKM_FH_LAUGH, /* 0x21 */ BTP_YKM_FH_REGRET, }; enum ykM1_RES_File_ID { /* BCK */ /* 0x07 */ BCK_YKM_DENY = 0x7, /* 0x08 */ BCK_YKM_F_HAPPY, /* 0x09 */ BCK_YKM_F_SHOUT, /* 0x0A */ BCK_YKM_F_SHUT, /* 0x0B */ BCK_YKM_F_TALK_D, /* 0x0C */ BCK_YKM_F_TALK_X, /* 0x0D */ BCK_YKM_F_TALK_Y, /* 0x0E */ BCK_YKM_FH_HAPPY, /* 0x0F */ BCK_YKM_HOLD, /* 0x10 */ BCK_YKM_HOLD_B, /* 0x11 */ BCK_YKM_PICKUP, /* 0x12 */ BCK_YKM_POUR, /* 0x13 */ BCK_YKM_PUSH, /* 0x14 */ BCK_YKM_RUN, /* 0x15 */ BCK_YKM_STOP, /* 0x16 */ BCK_YKM_TALK_D, /* 0x17 */ BCK_YKM_TALK_E, /* 0x18 */ BCK_YKM_WAIT_B, /* 0x19 */ BCK_YKM_WAIT_C, /* 0x1A */ BCK_YKM_WAIT_X, /* 0x1B */ BCK_YKM_WAITHOLD, /* 0x1C */ BCK_YKM_WAITHOLD_B_B, /* 0x1D */ BCK_YKM_WAITLIE, /* 0x1E */ BCK_YKM_WAITWAKE, /* 0x1F */ BCK_YKM_WAKE, /* BMDR */ /* 0x22 */ BMDR_CHEESE = 0x22, /* 0x23 */ BMDR_TOMATO, /* 0x24 */ BMDR_YKM_CHEESE, /* 0x25 */ BMDR_YKM_TOMATO, /* BTK */ /* 0x28 */ BTK_YKM_PICKUP = 0x28, /* 0x29 */ BTK_YKM_TALK_D, /* 0x2A */ BTK_YKM_WAIT_B, /* BTP */ /* 0x2D */ BTP_YKM_F_HAPPY = 0x2D, /* 0x2E */ BTP_YKM_F_SHUT, /* 0x2F */ BTP_YKM_FH_HAPPY, /* EVT */ /* 0x32 */ EVT_YKM1_EVENT_LIST = 0x32, }; enum ykM2_RES_File_ID { /* BCK */ /* 0x06 */ BCK_YKM_ASK = 0x6, /* 0x07 */ BCK_YKM_LAUGH, /* 0x08 */ BCK_YKM_REGRET, /* 0x09 */ BCK_YKM_REGRETWAIT, /* 0x0A */ BCK_YKM_SB_DAMAGE, /* 0x0B */ BCK_YKM_SB_GOAL, /* 0x0C */ BCK_YKM_SB_GOALWAIT, /* 0x0D */ BCK_YKM_SB_JUMP_A, /* 0x0E */ BCK_YKM_SB_JUMP_B, /* 0x0F */ BCK_YKM_SB_JUMP_C, /* 0x10 */ BCK_YKM_SB_TURNL, /* 0x11 */ BCK_YKM_SB_TURNR, /* 0x12 */ BCK_YKM_SB_WAIT, /* BMDR */ /* 0x15 */ BMDR_YKM_LEAF = 0x15, /* BTK */ /* 0x18 */ BTK_YKM_REGRET = 0x18, /* 0x19 */ BTK_YKM_REGRETWAIT, /* 0x1A */ BTK_YKM_SB_DAMAGE, /* EVT */ /* 0x1D */ EVT_YKM2_EVENT_LIST, }; enum ykM3_RES_File_ID { /* BCK */ /* 0x06 */ BCK_FISH_ATTACK = 0x6, /* 0x07 */ BCK_FISH_JUMP, /* 0x08 */ BCK_FISH_SB_WAIT, /* 0x09 */ BCK_FISH_WAIT_A, /* 0x0A */ BCK_LEAF_FALL, /* 0x0B */ BCK_LEAF_WAIT_A, /* 0x0C */ BCK_LEAF_WAIT_B, /* 0x0D */ BCK_YKM_FISH_ASK, /* 0x0E */ BCK_YKM_FISH_ATTACK, /* 0x0F */ BCK_YKM_FISH_JUMP, /* 0x10 */ BCK_YKM_FISH_LAUGH, /* 0x11 */ BCK_YKM_FISH_LOOK, /* 0x12 */ BCK_YKM_FISH_LOOKWAIT, /* 0x13 */ BCK_YKM_FISH_REGRET, /* 0x14 */ BCK_YKM_FISH_REGRETWAIT, /* 0x15 */ BCK_YKM_FISH_TALK_B, /* 0x16 */ BCK_YKM_FISH_TALK_C, /* 0x17 */ BCK_YKM_FISH_WAIT_A, /* 0x18 */ BCK_YKM_FISH_WAIT_B, /* BMDR */ /* 0x1B */ BMDR_FISH = 0x1B, /* 0x1C */ BMDR_LEAF, /* BTK */ /* 0x1F */ BTK_YKM_FISH_ATTACK = 0x1F, /* 0x20 */ BTK_YKM_FISH_JUMP, /* 0x21 */ BTK_YKM_FISH_LOOK, /* 0x22 */ BTK_YKM_FISH_LOOKWAIT, /* 0x23 */ BTK_YKM_FISH_REGRET, /* 0x24 */ BTK_YKM_FISH_REGRETWAIT, /* 0x25 */ BTK_YKM_FISH_WAIT_B, /* EVT */ /* 0x28 */ EVT_YKM3_EVENT_LIST = 0x28, }; enum RES_Name { /* 0x1 */ YKM = 0x1, /* 0x2 */ YKM1, /* 0x3 */ YKM2, /* 0x4 */ YKM3, }; /* 80B5D794-80B5D85C 000000 00C8+00 23/23 0/0 0/0 .rodata m__17daNpc_ykM_Param_c */ daNpc_ykM_HIOParam const daNpc_ykM_Param_c::m = { 500.0f, -4.0f, 1.0f, 1600.0f, 255.0f, 170.0f, 30.0f, 120.0f, 0.0f, -15.0f, 25.0f, -25.0f, 30.0f, -15.0f, 20.0f, -20.0f, 0.8f, 12.0f, 7, 6, 9, 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, 30, 500.0f, 300.0f, 18.0f, 50.0f, 3.0f, 20.0f, 50.0f, 56.0f, 0.8f, 52.0f, 0x78, 28.0f, 1, 5, 0.6f, }; #if DEBUG daNpc_ykM_HIO_c::daNpc_ykM_HIO_c() { m = daNpc_ykM_Param_c::m; } void daNpc_ykM_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { size_t len; char buf[0x7d0]; JORReflexible::listenPropertyEvent(event); JORFile file; switch ((int)event->id) { case 0x40000002: if (file.open(6, "すべてのファイル(*.*)\0*.*\0", NULL, NULL, NULL)) { memset(buf, 0, sizeof(buf)); len = 0; daNpcT_cmnListenPropertyEvent(buf, (int*)&len, &m.common); sprintf(buf + len, "%d, // ステップの速さ\n", m.step_speed); len = strlen(buf); sprintf(buf + len, "%.3ff, // 注目距離\n", m.attention_dist); len = strlen(buf); sprintf(buf + len, "%.3ff, // 会話距離\n", m.conversation_dist); len = strlen(buf); sprintf(buf + len, "%.3ff, // 飛び出し速度\n", m.jump_speed); len = strlen(buf); sprintf(buf + len, "%.3ff, // 飛び出し角度\n", m.push_out_angle); len = strlen(buf); sprintf(buf + len, "%.3ff, // 飛ばしフレ-ム\n", m.skip_frame); len = strlen(buf); sprintf(buf + len, "%.3ff, // 飛ばし速度\n", m.fly_speed); len = strlen(buf); sprintf(buf + len, "%.3ff, // 飛ばし角度\n", m.fly_angle); len = strlen(buf); sprintf(buf + len, "%.3ff, // ジャンプ初速\n", m.jump_init_speed); len = strlen(buf); sprintf(buf + len, "%.3ff, // 滑り加速\n", m.slide_acceleration); len = strlen(buf); sprintf(buf + len, "%.3ff, // 滑り速度\n", m.slide_speed); len = strlen(buf); sprintf(buf + len, "%d, // ウエイト時間\n", m.wait_time); len = strlen(buf); sprintf(buf + len, "%.3ff, // 走り速度\n", m.run_speed); len = strlen(buf); sprintf(buf + len, "%d, // 競争パラメ-タa\n", m.competition_prm_a); len = strlen(buf); sprintf(buf + len, "%d, // 競争パラメ-タb\n", m.competition_prm_b); len = strlen(buf); sprintf(buf + len, "%.3ff, // 競争パラメ-タc\n", m.competition_prm_c); len = strlen(buf); file.writeData(buf, len); file.close(); OS_REPORT("write append success!::%6d\n", len); } else { OS_REPORT("write append failure!\n"); } break; } } void daNpc_ykM_HIO_c::genMessage(JORMContext* ctx) { daNpcT_cmnGenMessage(ctx, &m.common); ctx->genSlider("ステップの速さ ", &m.step_speed, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("注目距離 ", &m.attention_dist, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("会話距離 ", &m.conversation_dist, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("飛び出し速度 ", &m.jump_speed, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("飛び出し角度 ", &m.push_out_angle, 0.0f, 90.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("飛ばしフレ-ム ", &m.skip_frame, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("飛ばし速度 ", &m.fly_speed, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("飛ばし角度 ", &m.fly_angle, 0.0f, 90.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("ジャンプ初速 ", &m.jump_init_speed, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("滑り加速 ", &m.slide_acceleration, 0.0f, 8.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("滑り速度 ", &m.slide_speed, 0.0f, 128.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("ウエイト時間 ", &m.wait_time, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("走り速度 ", &m.run_speed, 0.0f, 64.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("競争パラメ-タa", &m.competition_prm_a, -100.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("競争パラメ-タb", &m.competition_prm_b, 1.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genSlider("競争パラメ-タc", &m.competition_prm_c, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); ctx->genButton("ファイル書き出し", 0x40000002, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); } #endif /* 80B5DB08-80B5DB38 000020 0030+00 1/1 0/0 0/0 .data l_bmdData */ static int l_bmdData[6][2] = { {BMDR_YKM, YKM}, {BMDR_YKM_TOMATO, YKM1}, {BMDR_YKM_LEAF, YKM2}, {BMDR_YKM_CHEESE, YKM1}, {BMDR_FISH, YKM3}, {BMDR_LEAF, YKM3}, }; enum BmdIndex { BMD_INDEX_YKM, BMD_INDEX_YKM_TOMATO, BMD_INDEX_YKM_LEAF, BMD_INDEX_YKM_CHEESE, BMD_INDEX_FISH, BMD_INDEX_LEAF, }; /* 80B5DB38-80B5DB88 -00001 0050+00 0/1 0/0 0/0 .data l_evtList */ static daNpcT_evtData_c l_evtList[10] = { {"", 0}, {"NO_RESPONSE", 0}, {"SLIDEDOWN", 4}, {"MEETING_AGAIN", 2}, {"GET_TOMATOPUREE", 2}, {"GET_TASTE", 2}, {"FIND_WOLF", 3}, {"START_SNOWBOARDRACE", 3}, {"END_SNOWBOARDRACE", 3}, {"HUG", 2}, }; /* 80B5DB88-80B5DB9C -00001 0014+00 4/5 0/0 0/0 .data l_resNameList */ static char* l_resNameList[5] = { "", "ykM", "ykM1", "ykM2", "ykM3", }; /* 80B5DB9C-80B5DBA0 0000B4 0003+01 1/0 0/0 0/0 .data l_loadResPtrn0 */ static s8 l_loadResPtrn0[3] = {YKM, YKM1, -1}; /* 80B5DBA0-80B5DBA4 0000B8 0003+01 1/0 0/0 0/0 .data l_loadResPtrn1 */ static s8 l_loadResPtrn1[3] = {YKM, YKM2, -1}; /* 80B5DBA4-80B5DBAC 0000BC 0005+03 1/0 0/0 0/0 .data l_loadResPtrn2 */ static s8 l_loadResPtrn2[5] = {YKM, YKM1, YKM2, YKM3, -1}; /* 80B5DBAC-80B5DBB4 0000C4 0005+03 1/0 0/0 0/0 .data l_loadResPtrn9 */ static s8 l_loadResPtrn9[5] = {YKM, YKM1, YKM2, YKM3, -1}; /* 80B5DBB4-80B5DBD4 -00001 0020+00 1/2 0/0 0/0 .data l_loadResPtrnList */ static s8* l_loadResPtrnList[8] = { l_loadResPtrn0, l_loadResPtrn0, l_loadResPtrn2, l_loadResPtrn0, l_loadResPtrn1, l_loadResPtrn1, l_loadResPtrn1, l_loadResPtrn9, }; /* 80B5DBD4-80B5DD94 0000EC 01C0+00 0/1 0/0 0/0 .data l_faceMotionAnmData */ static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[16] = { {-1, J3DFrameCtrl::EMode_NONE, 0, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_TALK_A, J3DFrameCtrl::EMode_NONE, YKM, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_TALK_B, J3DFrameCtrl::EMode_NONE, YKM, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_TALK_C, J3DFrameCtrl::EMode_NONE, YKM, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_TALK_D, J3DFrameCtrl::EMode_NONE, YKM1, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_REGRET, J3DFrameCtrl::EMode_NONE, YKM, BTP_YKM_F_REGRET, J3DFrameCtrl::EMode_NONE, YKM, FALSE}, {BCK_YKM_F_LAUGH, J3DFrameCtrl::EMode_NONE, YKM, BTP_YKM_F_LAUGH, J3DFrameCtrl::EMode_NONE, YKM, FALSE}, {BCK_YKM_F_ASK, J3DFrameCtrl::EMode_NONE, YKM, BTP_YKM_F_ASK, J3DFrameCtrl::EMode_NONE, YKM, FALSE}, {BCK_YKM_FH_LAUGH, J3DFrameCtrl::EMode_LOOP, YKM, BTP_YKM_FH_LAUGH, J3DFrameCtrl::EMode_LOOP, YKM, FALSE}, {BCK_YKM_FH_REGRET, J3DFrameCtrl::EMode_LOOP, YKM, BTP_YKM_FH_REGRET, J3DFrameCtrl::EMode_LOOP, YKM, FALSE}, {BCK_YKM_F_TALK_X, J3DFrameCtrl::EMode_NONE, YKM1, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_TALK_Y, J3DFrameCtrl::EMode_NONE, YKM1, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_SHOUT, J3DFrameCtrl::EMode_NONE, YKM1, BTP_YKM, J3DFrameCtrl::EMode_LOOP, YKM, TRUE}, {BCK_YKM_F_SHUT, J3DFrameCtrl::EMode_NONE, YKM1, BTP_YKM_F_SHUT, J3DFrameCtrl::EMode_NONE, YKM1, FALSE}, {BCK_YKM_F_HAPPY, J3DFrameCtrl::EMode_NONE, YKM1, BTP_YKM_F_HAPPY, J3DFrameCtrl::EMode_NONE, YKM1, FALSE}, {BCK_YKM_FH_HAPPY, J3DFrameCtrl::EMode_LOOP, YKM1, BTP_YKM_FH_HAPPY, J3DFrameCtrl::EMode_LOOP, YKM1, FALSE}, }; /* 80B5DD94-80B5E328 0002AC 0594+00 0/1 0/0 0/0 .data l_motionAnmData */ static daNpcT_motionAnmData_c l_motionAnmData[51] = { {BCK_YKM_WAIT_A, J3DFrameCtrl::EMode_LOOP, YKM, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_WAIT_B, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM_WAIT_B, J3DFrameCtrl::EMode_NONE, YKM1, 0, 0}, {BCK_YKM_WAIT_C, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, 0, 0}, {BCK_YKM_WAIT_X, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_FUNWAIT, J3DFrameCtrl::EMode_LOOP, YKM, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_REGRETWAIT, J3DFrameCtrl::EMode_LOOP, YKM2, BTK_YKM_REGRETWAIT, J3DFrameCtrl::EMode_LOOP, YKM2, 0, 0}, {BCK_YKM_TALK_B, J3DFrameCtrl::EMode_NONE, YKM, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_TALK_C, J3DFrameCtrl::EMode_NONE, YKM, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_TALK_D, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM_TALK_D, J3DFrameCtrl::EMode_NONE, YKM1, 0, 0}, {BCK_YKM_TALK_E, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {-1, J3DFrameCtrl::EMode_NONE, 0, -1, J3DFrameCtrl::EMode_NONE, 0, 0, 0}, {BCK_YKM_PUSH, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_PICKUP, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM_PICKUP, J3DFrameCtrl::EMode_NONE, YKM1, 0, 0}, {BCK_YKM_POUR, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_REGRET, J3DFrameCtrl::EMode_NONE, YKM2, BTK_YKM_REGRET, J3DFrameCtrl::EMode_NONE, YKM2, 0, 0}, {BCK_YKM_LAUGH, J3DFrameCtrl::EMode_NONE, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_ASK, J3DFrameCtrl::EMode_NONE, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_WALK, J3DFrameCtrl::EMode_LOOP, YKM, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_STEP, J3DFrameCtrl::EMode_NONE, YKM, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_FISH_WAIT_A, J3DFrameCtrl::EMode_LOOP, YKM3, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_FISH_ATTACK, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM_FISH_ATTACK, J3DFrameCtrl::EMode_NONE, YKM3, 0, 0}, {BCK_YKM_FISH_WAIT_B, J3DFrameCtrl::EMode_LOOP, YKM3, BTK_YKM_FISH_WAIT_B, J3DFrameCtrl::EMode_LOOP, YKM3, 0, 0}, {BCK_YKM_FISH_JUMP, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM_FISH_JUMP, J3DFrameCtrl::EMode_NONE, YKM3, 0, 0}, {BCK_YKM_FISH_TALK_B, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_FISH_TALK_C, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_FISH_REGRET, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM_FISH_REGRET, J3DFrameCtrl::EMode_NONE, YKM3, 0, 0}, {BCK_YKM_FISH_REGRETWAIT, J3DFrameCtrl::EMode_LOOP, YKM3, BTK_YKM_FISH_REGRETWAIT, J3DFrameCtrl::EMode_LOOP, YKM3, 0, 0}, {BCK_YKM_FISH_LAUGH, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_FISH_ASK, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_FISH_LOOK, J3DFrameCtrl::EMode_NONE, YKM3, BTK_YKM_FISH_LOOK, J3DFrameCtrl::EMode_NONE, YKM3, 0, 0}, {BCK_YKM_FISH_LOOKWAIT, J3DFrameCtrl::EMode_LOOP, YKM3, BTK_YKM_FISH_LOOKWAIT, J3DFrameCtrl::EMode_LOOP, YKM3, 0, 0}, {BCK_YKM_SB_WAIT, J3DFrameCtrl::EMode_LOOP, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_SB_JUMP_A, J3DFrameCtrl::EMode_NONE, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_SB_JUMP_B, J3DFrameCtrl::EMode_LOOP, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_SB_JUMP_C, J3DFrameCtrl::EMode_NONE, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_SB_TURNL, J3DFrameCtrl::EMode_LOOP, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_SB_TURNR, J3DFrameCtrl::EMode_LOOP, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_SB_DAMAGE, J3DFrameCtrl::EMode_NONE, YKM2, BTK_YKM_SB_DAMAGE, J3DFrameCtrl::EMode_NONE, YKM2, 0, 0}, {BCK_YKM_SB_GOAL, J3DFrameCtrl::EMode_NONE, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_SB_GOALWAIT, J3DFrameCtrl::EMode_LOOP, YKM2, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_DENY, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_RUN, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_STOP, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_WAITLIE, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_WAKE, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_WAITWAKE, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 3}, {BCK_YKM_HOLD, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_WAITHOLD, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_HOLD_B, J3DFrameCtrl::EMode_NONE, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, {BCK_YKM_WAITHOLD_B_B, J3DFrameCtrl::EMode_LOOP, YKM1, BTK_YKM, J3DFrameCtrl::EMode_NONE, YKM, 1, 0}, }; /* 80B5E328-80B5E428 000840 0100+00 0/1 0/0 0/0 .data l_faceMotionSequenceData */ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[64] = { {1, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {2, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {3, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {4, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {5, -1, 1}, {9, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {6, -1, 1}, {8, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {7, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xC, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xD, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xA, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xE, -1, 1}, {0xF, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xF, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xB, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {9, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {8, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, }; /* 80B5E428-80B5E718 000940 02F0+00 0/1 0/0 0/0 .data l_motionSequenceData */ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[188] = { {0, 0xF7, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {1, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {7, -1, 1}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {8, -1, 1}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {9, -1, 1}, {1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xA, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xC, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xD, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xD, -1, 1}, {2, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {2, 0xF7, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {5, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xF, -1, 1}, {6, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x10, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x11, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x14, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x18, -1, 1}, {0x14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x19, -1, 1}, {0x14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x1A, -1, 1}, {0x1B, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x1C, -1, 1}, {0x14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x1D, -1, 1}, {0x14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x1E, -1, 1}, {0x1F, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x2C, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x2D, -1, 1}, {0x2E, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x29, -1, 1}, {0x2E, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x2E, 0xF7, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x2F, -1, 1}, {0x30, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x30, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {4, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x32, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x12, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x13, 4, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xE, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x20, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x21, 0, 1}, {0x22, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x23, 4, 1}, {0x20, 4, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x2A, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x2B, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x31, -1, 1}, {0x32, 0, 1}, {-1, 0, 0}, {-1, 0, 0}, {3, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0xB, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x26, 0, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x14, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x15, -1, 1}, {0x16, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x17, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x24, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x25, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0x27, -1, 1}, {0x28, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, }; /* 80B5E718-80B5E740 -00001 0028+00 1/1 0/0 0/0 .data mCutNameList__11daNpc_ykM_c */ char* daNpc_ykM_c::mCutNameList[10] = { "", "SLIDEDOWN", "MEETING_AGAIN", "GET_TOMATOPUREE", "GET_TASTE", "LV5DUNGEON_CLEAR", "FIND_WOLF", "START_SNOWBOARDRACE", "END_SNOWBOARDRACE", "HUG" }; /* 80B5E7AC-80B5E824 000CC4 0078+00 1/2 0/0 0/0 .data mCutList__11daNpc_ykM_c */ daNpc_ykM_c::cutFunc daNpc_ykM_c::mCutList[10] = { NULL, &daNpc_ykM_c::cutSlideDown, &daNpc_ykM_c::cutMeetingAgain, &daNpc_ykM_c::cutGetTomatoPuree, &daNpc_ykM_c::cutGetTaste, &daNpc_ykM_c::cutLv5DungeonClear, &daNpc_ykM_c::cutFindWolf, &daNpc_ykM_c::cutStartSnowboardRace, &daNpc_ykM_c::cutEndSnowboardRace, &daNpc_ykM_c::cutHug, }; /* 80B5ED74-80B5ED80 000054 000C+00 0/1 0/0 0/0 .bss l_SBRaceStartPos */ static cXyz l_SBRaceStartPos; /* 80B5ED8C-80B5ED94 00006C 0006+02 0/1 0/0 0/0 .bss l_SBRaceStartAngle */ static csXyz l_SBRaceStartAngle; /* 80B5EDA0-80B5EDA4 000080 0004+00 0/1 0/0 0/0 .bss l_HIO */ static NPC_YKM_HIO_CLASS l_HIO; /* 80B534EC-80B53698 0000EC 01AC+00 1/0 0/0 0/0 .text __dt__11daNpc_ykM_cFv */ daNpc_ykM_c::~daNpc_ykM_c() { OS_REPORT("|%06d:%x|daNpc_ykM_c -> デストラクト\n", g_Counter.mCounter0, this); if (mpMorf[0] != NULL) { mpMorf[0]->stopZelAnime(); } if (mFishModelMorf != NULL) { mFishModelMorf->stopZelAnime(); } if (mLeafModelMorf != NULL) { mLeafModelMorf->stopZelAnime(); } #if DEBUG if (mpHIO != NULL) { mpHIO->removeHIO(); } #endif deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); if (field_0x157b != 0) { mDoAud_subBgmStop(); } daNpcT_offTmpBit(0x54); // dSv_event_tmp_flag_c::T_0084 - Snowpeak mountain - Racing with Yeto } /* 80B53698-80B53990 000298 02F8+00 1/1 0/0 0/0 .text create__11daNpc_ykM_cFv */ cPhs__Step daNpc_ykM_c::create() { daNpcT_ct(this, daNpc_ykM_c, l_faceMotionAnmData, l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); mType = getType(); mFlowNodeNo = getFlowNodeNo(); mTwilight = false; cPhs__Step phase = (cPhs__Step)loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList); if (phase == cPhs_COMPLEATE_e) { OS_REPORT("\t(%s:%d) flowNo:%d, PathID:%02x, BitTRB:%02x<%08x> ", fopAcM_getProcNameString(this), mType, mFlowNodeNo, getPathID(), getBitTRB() & 0xFF, fopAcM_GetParam(this)); if (isDelete()) { OS_REPORT("===>isDelete:TRUE\n"); return cPhs_ERROR_e; } static int const heapSize[8] = { 0x8000, 0x5460, 0x8000, 0x4460, 0x8000, 0x8000, 0x8000, 0x8000, }; OS_REPORT("\n"); OS_REPORT("YKM: %u 0x%04x\n", mType, heapSize[mType]); if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) { return cPhs_ERROR_e; } J3DModelData* modelData = mpMorf[0]->getModel()->getModelData(); fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -400.0f, -100.0f, -500.0f, 400.0f, 600.0f, 500.0f); mSound.init(¤t.pos, &eyePos, 3, 1); #if DEBUG mpHIO = &l_HIO; mpHIO->entryHIO("雪男"); #endif 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(mpHIO->m.common.weight, 0, this); for (int i = 0; i < 4; i++) { field_0xf94[i].Set(mCcDSph); field_0xf94[i].SetStts(&mCcStts); field_0xf94[i].SetTgHitCallback(tgHitCallBack); } field_0xe58.Set(mCcDCyl); field_0xe58.SetStts(&mCcStts); field_0xe58.SetTgHitCallback(tgHitCallBack); mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); if (mGroundH != -G_CM3D_F_INF) { setEnvTevColor(); setRoomNo(); } mCreating = true; Execute(); mCreating = false; } return phase; } /* 80B53990-80B53F00 000590 0570+00 1/1 0/0 0/0 .text CreateHeap__11daNpc_ykM_cFv */ int daNpc_ykM_c::CreateHeap() { void* mdlData_p = NULL; J3DModel* model = NULL; int sp40 = mTwilight == 1 ? BMD_INDEX_YKM : BMD_INDEX_YKM; int arcNameIdx = l_bmdData[sp40][1]; int resIndex = l_bmdData[sp40][0]; mdlData_p = dComIfG_getObjectRes(l_resNameList[arcNameIdx], resIndex); if (mdlData_p == NULL) { return 1; } int sp34 = 0x11020284; mpMorf[0] = new mDoExt_McaMorfSO((J3DModelData*)mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, sp34); if (mpMorf[0] == NULL || mpMorf[0]->getModel() == NULL) { return 0; } model = mpMorf[0]->getModel(); for (u16 i = 0; i < ((J3DModelData*)mdlData_p)->getJointNum(); i++) { ((J3DModelData*)mdlData_p)->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); } model->setUserArea((uintptr_t)this); mpMatAnm[0] = new daNpcT_MatAnm_c(); if (mpMatAnm[0] == NULL) { return 0; } static BmdIndex const bmdTypeList[3] = {BMD_INDEX_YKM_TOMATO, BMD_INDEX_YKM_LEAF, BMD_INDEX_YKM_CHEESE}; switch (mType) { case TYPE_COOK: for (int i = 0; i < 3; i++) { if (l_bmdData[bmdTypeList[i]][0] >= 0) { mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[l_bmdData[bmdTypeList[i]][1]], l_bmdData[bmdTypeList[i]][0]); } else { mdlData_p = NULL; } // field_0xe4c holds a Pumpkin, Leaf, and Cheese model (in that order) if (mdlData_p != NULL) { field_0xe4c[i] = mDoExt_J3DModel__create((J3DModelData*)mdlData_p, 0x80000, 0x11000084); } else { field_0xe4c[i] = NULL; } } break; case TYPE_2: sp40 = BMD_INDEX_FISH; arcNameIdx = l_bmdData[sp40][1]; resIndex = l_bmdData[sp40][0]; mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arcNameIdx], resIndex); JUT_ASSERT(1595, NULL != mdlData_p); sp34 = 0x11000084; mFishModelMorf = new mDoExt_McaMorfSO((J3DModelData*)mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, NULL, 0x80000, sp34); if (mFishModelMorf == NULL || mFishModelMorf->getModel() == NULL) { return 0; } sp40 = BMD_INDEX_LEAF; arcNameIdx = l_bmdData[sp40][1]; resIndex = l_bmdData[sp40][0]; mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arcNameIdx], resIndex); JUT_ASSERT(1622, NULL != mdlData_p); sp34 = 0x11000084; mLeafModelMorf = new mDoExt_McaMorfSO((J3DModelData*)mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, NULL, 0x80000, sp34); if (mLeafModelMorf == NULL || mLeafModelMorf->getModel() == NULL) { return 0; } setLeafAnm(ANM_LEAF_WAIT_A, 0.0f); mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[l_bmdData[bmdTypeList[1]][1]], l_bmdData[bmdTypeList[1]][0]); if (mdlData_p != NULL) { field_0xe4c[1] = mDoExt_J3DModel__create((J3DModelData*)mdlData_p, 0x80000, 0x11000084); } else { field_0xe4c[1] = NULL; } break; case TYPE_3: break; case TYPE_4: mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[l_bmdData[bmdTypeList[1]][1]], l_bmdData[bmdTypeList[1]][0]); if (mdlData_p != NULL) { field_0xe4c[1] = mDoExt_J3DModel__create((J3DModelData*)mdlData_p, 0x80000, 0x11000084); } else { field_0xe4c[1] = NULL; } break; } if (setFaceMotionAnm(1, false) && setMotionAnm(0, 0.0f, FALSE)) { return 1; } return 0; } /* 80B540BC-80B540F0 000CBC 0034+00 1/1 0/0 0/0 .text Delete__11daNpc_ykM_cFv */ int daNpc_ykM_c::Delete() { OS_REPORT("|%06d:%x|daNpc_ykM_c -> Delete\n", g_Counter.mCounter0, this); fpc_ProcID unusedId = fopAcM_GetID(this); this->~daNpc_ykM_c(); return 1; } static void dummy_string() { OS_REPORT("Delete -> NPC_YKM(id=%d)\n", 0); } /* 80B540F0-80B54110 000CF0 0020+00 2/2 0/0 0/0 .text Execute__11daNpc_ykM_cFv */ int daNpc_ykM_c::Execute() { return execute(); } /* 80B54110-80B541F8 000D10 00E8+00 1/1 0/0 0/0 .text Draw__11daNpc_ykM_cFv */ int daNpc_ykM_c::Draw() { J3DModelData* mdlData_p = mpMorf[0]->getModel()->getModelData(); int rv = 0; if (mpMatAnm[0] != NULL) { mdlData_p->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]); } if (field_0x157a != 0) { mdlData_p->getMaterialNodePointer(3)->getShape()->hide(); } rv = draw( #ifdef DEBUG chkAction(&daNpc_ykM_c::test), #else FALSE, #endif FALSE, mRealShadowSize, NULL, 0.0f, FALSE, field_0x1581 == 1, FALSE ); if (field_0x157a != 0) { mdlData_p->getMaterialNodePointer(3)->getShape()->show(); } return rv; } /* 80B541F8-80B54218 000DF8 0020+00 1/1 0/0 0/0 .text createHeapCallBack__11daNpc_ykM_cFP10fopAc_ac_c */ int daNpc_ykM_c::createHeapCallBack(fopAc_ac_c* a_this) { daNpc_ykM_c* i_this = (daNpc_ykM_c*)a_this; return i_this->CreateHeap(); } /* 80B54218-80B54270 000E18 0058+00 1/1 0/0 0/0 .text ctrlJointCallBack__11daNpc_ykM_cFP8J3DJointi */ int daNpc_ykM_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) { if (param_2 == 0) { J3DModel* model = j3dSys.getModel(); daNpc_ykM_c* i_this = (daNpc_ykM_c*)model->getUserArea(); if (i_this != NULL) { i_this->ctrlJoint(i_joint, model); } } return 1; } /* 80B54270-80B5430C 000E70 009C+00 2/2 0/0 0/0 .text srchGadget__11daNpc_ykM_cFPvPv */ void* daNpc_ykM_c::srchGadget(void* i_actor, void* i_data) { fopAc_ac_c* data = (fopAc_ac_c*)i_data; if (mFindCount < 50) { fopAc_ac_c* actor = (fopAc_ac_c*)i_actor; if (actor != NULL && actor != data) { if (fopAcM_IsExecuting(fopAcM_GetID(actor)) && fopAcM_GetName(actor) == PROC_OBJ_GADGET) { mFindActorPtrs[mFindCount] = actor; mFindCount++; } } } return NULL; } /* 80B5430C-80B543DC 000F0C 00D0+00 1/1 0/0 0/0 .text getTomatoPureeP__11daNpc_ykM_cFv */ fopAc_ac_c* daNpc_ykM_c::getTomatoPureeP() { fopAc_ac_c* actor = NULL; f32 fVar1 = G_CM3D_F_INF; mFindCount = 0; fopAcM_Search(srchGadget, this); for (int i = 0; i < mFindCount; i++) { if (((daObj_Gadget_c*)mFindActorPtrs[i])->getType() == 0 && fopAcM_searchActorDistance(this, mFindActorPtrs[i]) < fVar1) { fVar1 = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); actor = mFindActorPtrs[i]; } } return actor; } /* 80B543DC-80B544B0 000FDC 00D4+00 1/1 0/0 0/0 .text getCheeseP__11daNpc_ykM_cFv */ fopAc_ac_c* daNpc_ykM_c::getCheeseP() { fopAc_ac_c* actor = NULL; f32 fVar1 = G_CM3D_F_INF; mFindCount = 0; fopAcM_Search(srchGadget, this); for (int i = 0; i < mFindCount; i++) { if (((daObj_Gadget_c*)mFindActorPtrs[i])->getType() == 1 && fopAcM_searchActorDistance(this, mFindActorPtrs[i]) < fVar1) { fVar1 = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); actor = mFindActorPtrs[i]; } } return actor; } /* 80B544B0-80B5454C 0010B0 009C+00 1/1 0/0 0/0 .text srchYkm__11daNpc_ykM_cFPvPv */ void* daNpc_ykM_c::srchYkm(void* i_actor, void* i_data) { fopAc_ac_c* data = (fopAc_ac_c*)i_data; if (mFindCount < 50) { fopAc_ac_c* actor = (fopAc_ac_c*)i_actor; if (actor != NULL && actor != data) { if (fopAcM_IsExecuting(fopAcM_GetID(actor)) && fopAcM_GetName(actor) == PROC_NPC_YKM) { mFindActorPtrs[mFindCount] = actor; mFindCount++; } } } return NULL; } /* 80B5454C-80B54628 00114C 00DC+00 4/4 0/0 0/0 .text getOtherYkmP__11daNpc_ykM_cFi */ fopAc_ac_c* daNpc_ykM_c::getOtherYkmP(int param_1) { fopAc_ac_c* actor = NULL; f32 fVar1 = G_CM3D_F_INF; mFindCount = 0; fopAcM_Search(srchYkm, this); for (int i = 0; i < mFindCount; i++) { if (param_1 == ((daNpc_ykM_c*)mFindActorPtrs[i])->getType() && fopAcM_searchActorDistance(this, mFindActorPtrs[i]) < fVar1) { fVar1 = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); actor = mFindActorPtrs[i]; } } return actor; } /* 80B54628-80B546C4 001228 009C+00 1/1 0/0 0/0 .text srchYkw__11daNpc_ykM_cFPvPv */ void* daNpc_ykM_c::srchYkw(void* i_actor, void* i_data) { fopAc_ac_c* data = (fopAc_ac_c*)i_data; if (mFindCount < 50) { fopAc_ac_c* actor = (fopAc_ac_c*)i_actor; if (actor != NULL && actor != data) { if (fopAcM_IsExecuting(fopAcM_GetID(actor)) && fopAcM_GetName(actor) == PROC_NPC_YKW) { mFindActorPtrs[mFindCount] = actor; mFindCount++; } } } return NULL; } /* 80B546C4-80B547A0 0012C4 00DC+00 1/1 0/0 0/0 .text getOtherYkwP__11daNpc_ykM_cFi */ fopAc_ac_c* daNpc_ykM_c::getOtherYkwP(int param_1) { fopAc_ac_c* actor = NULL; f32 fVar1 = G_CM3D_F_INF; mFindCount = 0; fopAcM_Search(srchYkw, this); for (int i = 0; i < mFindCount; i++) { if (param_1 == ((daNpc_ykW_c*)mFindActorPtrs[i])->getType() && fopAcM_searchActorDistance(this, mFindActorPtrs[i]) < fVar1) { fVar1 = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); actor = mFindActorPtrs[i]; } } return actor; } /* 80B547A0-80B54808 0013A0 0068+00 3/2 0/0 1/1 .text getType__11daNpc_ykM_cFv */ u8 daNpc_ykM_c::getType() { u8 param = fopAcM_GetParam(this) & 0xFF; switch (param) { case 0: return TYPE_0; case 1: return TYPE_COOK; case 2: return TYPE_2; case 3: return TYPE_3; case 4: return TYPE_4; case 5: return TYPE_5; case 6: return TYPE_6; default: return TYPE_7; } } /* 80B54808-80B548A8 001408 00A0+00 2/1 0/0 0/0 .text isDelete__11daNpc_ykM_cFv */ BOOL daNpc_ykM_c::isDelete() { switch (mType) { case TYPE_0: return FALSE; case TYPE_COOK: return dComIfGs_isDungeonItemBossKey(); case TYPE_2: return daNpcT_chkEvtBit(0x134); // dSv_event_flag_c::F_0308 - Snowpeak mountain - Watched first meeting event with Yeto at top of mountain (human) case TYPE_3: return dComIfGs_isStageBossEnemy(); case TYPE_4: return FALSE; case TYPE_5: return FALSE; case TYPE_6: return FALSE; default: return TRUE; } } /* 80B548A8-80B54B44 0014A8 029C+00 1/1 0/0 0/0 .text reset__11daNpc_ykM_cFv */ // NONMATCHING - m_nextID load issue, regalloc void daNpc_ykM_c::reset() { csXyz angle; int iVar1 = (u8*)&field_0x1588 - (u8*)&mpNextAction; if (mpMatAnm[0] != NULL) { mpMatAnm[0]->initialize(); } initialize(); for (int i = 0; i < 8; i++) { mActorMngr[i].initialize(); } memset(&mpNextAction, 0, iVar1); if (getPathID() != 0xFF) { mPath.initialize(); mPath.setPathInfo(getPathID(), fopAcM_GetRoomNo(this), 0); mRoomPath = NULL; if (mType == TYPE_4 && mPath.chkNextId()) { //TODO: Separate decl is fakematch, this is fixed by properly matching // daNpcT_DmgStagger_c::initialize in debug but doing so breaks other functions. dPath* path = mPath.getPathInfo(); mRoomPath = dPath_GetRoomPath(path->m_nextID, fopAcM_GetRoomNo(this)); } } angle.setall(0); angle.y = home.angle.y; switch (mType) { case TYPE_0: case TYPE_COOK: break; case TYPE_2: field_0x1568 = -20.0f; field_0x1579 = 1; eventInfo.setIdx(0); break; case TYPE_3: mHide = true; fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x8000000); break; case TYPE_4: eventInfo.setIdx(0); break; case TYPE_5: mHide = true; fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x8000000); eventInfo.setIdx(1); break; case TYPE_6: mHide = true; fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x8000000); eventInfo.setIdx(2); break; } daNpcT_offTmpBit(0x53); // dSv_event_tmp_flag_c::T_0083 - LV5 Dungeon - Speak with Yeta at top of mountain as wolf after clearing Snowpeak Ruins daNpcT_offTmpBit(0x54); // dSv_event_tmp_flag_c::T_0084 - Snowpeak mountain - Racing with Yeto daNpcT_offTmpBit(0x55); // dSv_event_tmp_flag_c::T_0085 - Snowpeak mountain - Racing with Yeta setAngle(angle); } /* 80B54B44-80B54BD0 001744 008C+00 1/0 0/0 0/0 .text afterJntAnm__11daNpc_ykM_cFi */ void daNpc_ykM_c::afterJntAnm(int param_1) { if (param_1 == 1) { mDoMtx_stack_c::YrotM(-mStagger.getAngleZ(1)); mDoMtx_stack_c::ZrotM(mStagger.getAngleX(1)); } else if (param_1 == 4) { mDoMtx_stack_c::YrotM(-mStagger.getAngleZ(0)); mDoMtx_stack_c::ZrotM(mStagger.getAngleX(0)); } } /* 80B54BD0-80B54E48 0017D0 0278+00 1/0 0/0 0/0 .text setParam__11daNpc_ykM_cFv */ void daNpc_ykM_c::setParam() { selectAction(); srchActors(); if (mType != TYPE_5 && mType != TYPE_6) { u32 uVar1 = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); dComIfGp_getAttention()->getDistTable(71).mDistMax = mpHIO->m.attention_dist; dComIfGp_getAttention()->getDistTable(71).mDistMaxRelease = mpHIO->m.attention_dist; dComIfGp_getAttention()->getDistTable(70).mDistMax = mpHIO->m.conversation_dist; dComIfGp_getAttention()->getDistTable(70).mDistMaxRelease = mpHIO->m.conversation_dist; u32 uVar2 = 4; if (mType == TYPE_COOK || mType == TYPE_2) { if (mType == TYPE_COOK) { dComIfGp_getAttention()->getDistTable(71).mDistMax = 350.0f; dComIfGp_getAttention()->getDistTable(71).mDistMaxRelease = 350.0f; dComIfGp_getAttention()->getDistTable(70).mDistMax = 350.0f; dComIfGp_getAttention()->getDistTable(70).mDistMaxRelease = 350.0f; } uVar2 |= 0x80; } else if (mType == TYPE_4) { dComIfGp_getAttention()->getDistTable(71).mDistMax = 800.0f; dComIfGp_getAttention()->getDistTable(71).mDistMaxRelease = 900.0f; dComIfGp_getAttention()->getDistTable(70).mDistMax = 600.0f; dComIfGp_getAttention()->getDistTable(70).mDistMaxRelease = 700.0f; } dComIfGp_getAttention()->getDistTable(71).mAngleSelect = uVar2; dComIfGp_getAttention()->getDistTable(70).mAngleSelect = uVar2; attention_info.distances[fopAc_attn_LOCK_e] = 71; attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = 70; if (daPy_py_c::checkNowWolf()) { uVar1 |= fopAc_AttnFlag_UNK_0x800000; } attention_info.flags = uVar1; } else { attention_info.flags = 0; } scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); mCcStts.SetWeight(mpHIO->m.common.weight); mCylH = mpHIO->m.common.height; mWallR = mpHIO->m.common.width; mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); mAcchCir.SetWallH(mpHIO->m.common.knee_length); fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x100); mRealShadowSize = mpHIO->m.common.real_shadow_size; if (field_0x157b != 0) { fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x100); } if (mType == TYPE_3) { fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x100); mRealShadowSize = 1800.0f; } mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; mMorfFrames = mpHIO->m.common.morf_frame; gravity = mpHIO->m.common.gravity; field_0x1574 = 0; field_0x1575 = 0; field_0xd8a.y = 0; } /* 80B54E5C-80B55004 001A5C 01A8+00 1/0 0/0 0/0 .text checkChangeEvt__11daNpc_ykM_cFv */ BOOL daNpc_ykM_c::checkChangeEvt() { if (!chkAction(&daNpc_ykM_c::talk)) { mPreItemNo = 0; if (dComIfGp_event_chkTalkXY()) { if (dComIfGp_evmng_ChkPresentEnd()) { mEvtNo = EVENT_NO_RESPONSE; evtChange(); } return TRUE; } switch (mType) { case TYPE_0: break; case TYPE_COOK: if (!daNpcT_chkEvtBit(4) /* dSv_event_flag_c::TEST_004 - Snowpeak Ruins - Handed over secret ingredient */ && checkItemGet(fpcNm_ITEM_TASTE, 1)) { mEvtNo = EVENT_GET_TASTE; evtChange(); return TRUE; } if (!daNpcT_chkEvtBit(3) /* dSv_event_flag_c::TEST_003 - Snowpeak Ruins - Handed over tomato puree */ && checkItemGet(fpcNm_ITEM_TOMATO_PUREE, 1)) { mEvtNo = EVENT_GET_TOMATOPUREE; evtChange(); return TRUE; } break; case TYPE_2: break; case TYPE_3: mEvtNo = EVENT_HUG; evtChange(); return TRUE; case TYPE_4: if (daPy_py_c::checkNowWolf()) { mEvtNo = EVENT_FIND_WOLF; evtChange(); return TRUE; } break; case TYPE_5: case TYPE_6: break; } } return FALSE; } /* 80B55004-80B550A4 001C04 00A0+00 1/0 0/0 0/0 .text setAfterTalkMotion__11daNpc_ykM_cFv */ void daNpc_ykM_c::setAfterTalkMotion() { int i_index = FACE_NONE; switch (mFaceMotionSeqMngr.getNo()) { case FACE_REGRET: i_index = FACE_H_REGRET; break; case FACE_LAUGH: i_index = FACE_H_LAUGH; break; case FACE_HAPPY: i_index = FACE_H_HAPPY; break; } mFaceMotionSeqMngr.setNo(i_index, -1.0f, FALSE, 0); } /* 80B550A4-80B55254 001CA4 01B0+00 1/1 0/0 0/0 .text srchActors__11daNpc_ykM_cFv */ void daNpc_ykM_c::srchActors() { switch (mType) { case TYPE_0: break; case TYPE_COOK: if (mActorMngr[6].getActorP() == NULL) { mActorMngr[6].entry(getEvtAreaTagP(14, 0)); } if (mActorMngr[3].getActorP() == NULL) { mActorMngr[3].entry(getTomatoPureeP()); } if (mActorMngr[4].getActorP() == NULL) { mActorMngr[4].entry(getCheeseP()); } break; case TYPE_2: if (mActorMngr[6].getActorP() == NULL) { mActorMngr[6].entry(getEvtAreaTagP(14, 0)); } break; case TYPE_3: if (mActorMngr[5].getActorP() == NULL) { mActorMngr[5].entry(getNearestActorP(PROC_NPC_YKW)); } break; case TYPE_4: if (mActorMngr[6].getActorP() == NULL) { mActorMngr[6].entry(getEvtAreaTagP(14, 1)); } if (mActorMngr[7].getActorP() == NULL) { mActorMngr[7].entry(getEvtAreaTagP(14, 2)); } if (mActorMngr[5].getActorP() == NULL) { mActorMngr[5].entry(getOtherYkwP(3)); } break; case TYPE_5: case TYPE_6: break; } } /* 80B55254-80B552F4 001E54 00A0+00 1/0 0/0 0/0 .text evtTalk__11daNpc_ykM_cFv */ BOOL daNpc_ykM_c::evtTalk() { if (chkAction(&daNpc_ykM_c::talk)) { (this->*mpAction)(NULL); } else { setAction(&daNpc_ykM_c::talk); } return TRUE; } /* 80B552F4-80B553BC 001EF4 00C8+00 1/0 0/0 0/0 .text evtCutProc__11daNpc_ykM_cFv */ BOOL daNpc_ykM_c::evtCutProc() { s32 staffId = dComIfGp_getEventManager().getMyStaffId("ykM", this, -1); if (staffId != -1) { mStaffId = staffId; int actIdx = dComIfGp_getEventManager().getMyActIdx(mStaffId, mCutNameList, 10, 0, 0); if ((this->*mCutList[actIdx])(mStaffId)) { dComIfGp_getEventManager().cutEnd(mStaffId); } return TRUE; } return FALSE; } /* 80B553BC-80B55658 001FBC 029C+00 1/0 0/0 0/0 .text action__11daNpc_ykM_cFv */ void daNpc_ykM_c::action() { fopAc_ac_c* actor = NULL; for (int i = 0; i < 4; i++) { actor = hitChk(&field_0xf94[i], -1); if (actor != NULL) { break; } } if (actor == NULL) { actor = hitChk(&field_0xe58, -1); } if (actor != NULL && field_0x157b != 0) { mStagger.setParam(this, actor, mCurAngle.y); mMotionSeqMngr.setNo(MOTION_SB_DAMAGE, 0.0f, 0, 0); mDamageTimer = mCutType == 8 ? 20 : 8; mDamageTimerStart = 0; mJntAnm.lookNone(1); mSound.startCreatureSound(Z2SE_YM_SNOBO_SPIN, 0, -1); mSound.startCreatureVoice(Z2SE_YM_V_SNOBO_SPIN, -1); } if (mStagger.checkRebirth()) { mStagger.initialize(); mMode = 1; } if (mpNextAction) { if (mpAction == mpNextAction) { (this->*mpAction)(NULL); } else { setAction(mpNextAction); } } if (field_0x1582 != 0 && !dComIfGp_event_runCheck()) { fopAcM_delete(this); } if (field_0x1540 > 0) { field_0x1540--; } else if (field_0x1540 < 0) { field_0x1540 = 0; } } /* 80B55658-80B5571C 002258 00C4+00 1/0 0/0 0/0 .text beforeMove__11daNpc_ykM_cFv */ void daNpc_ykM_c::beforeMove() { fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x8000000); if (checkHide()) { fopAcM_OnStatus(this, fopAcM_STATUS_UNK_0x8000000); } if (checkHide() || mNoDraw) { attention_info.flags = 0; } } /* 80B5571C-80B55A64 00231C 0348+00 1/0 0/0 0/0 .text afterMoved__11daNpc_ykM_cFv */ void daNpc_ykM_c::afterMoved() { f32 var_f31; f32 var_f30; f32 var_f29; f32 var_f28; if (field_0x157b != 0 && field_0x157e == 0) { int polyAtt0 = dComIfG_Bgsp().GetPolyAtt0(mAcch.m_gnd); if (polyAtt0 == 13 && 3.0f < speedF) { cXyz sp70(current.pos); sp70.y -= 30.0f; field_0x1570 = dComIfGp_particle_setPolyColor(field_0x1570, dPa_RM(ID_ZI_S_LK_SB_A), mAcch.m_gnd, &sp70, &tevStr, &mCurAngle, NULL, 0, NULL, -1, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x1570); if (emitter != NULL) { cXyz sp7c; var_f31 = speedF / mpHIO->m.slide_speed; if (var_f31 > 1.0f) { var_f31 = 1.0f; } emitter->setRate(var_f31 * 2.0f + 1.0f); emitter->setAwayFromCenterSpeed(var_f31 * 4.0f + 1.0f); sp7c.x = var_f31 * 0.3f + 0.7f; sp7c.y = sp7c.x; sp7c.z = sp7c.x; emitter->setGlobalParticleScale(sp7c); emitter->setGlobalAlpha(var_f31 * 205.0f + 50.0f); } } var_f29 = mGroundH - current.pos.y; var_f30 = current.pos.absXZ(old.pos) * cM_ssin(mGroundAngle); if (var_f30 < 0.0f) { var_f30 = 0.0f; } if (var_f29 <= 0.000001f && var_f29 >= -mAcchCir.GetWallH() - var_f30) { current.pos.y = mGroundH; mAcch.SetGroundHit(); speed.y = 0.0f; } } } /* 80B55A64-80B560B4 002664 0650+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_ykM_cFv */ // NONMATCHING - HIO load issue void daNpc_ykM_c::setAttnPos() { fopAc_ac_c* otherYkmP = NULL; cXyz sp104(80.0f, 30.0f, 0.0f); cXyz sp110(80.0f, 0.0f, 0.0f); if (field_0x157b != 0) { if (mStagger.checkStagger() && (mMotionSeqMngr.getNo() != MOTION_SB_DAMAGE || mMotionSeqMngr.checkEndSequence())) { mStagger.setRebirth(); } } else { mStagger.calc(FALSE); } f32 fVar1 = cM_s2rad((s16)(mCurAngle.y - field_0xd7e.y)); mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp104, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), field_0x1575 != 0 ? 0.0f : mpHIO->m.common.body_angleX_min, field_0x1575 != 0 ? 0.0f : mpHIO->m.common.body_angleX_max, field_0x1575 != 0 ? 0.0f : mpHIO->m.common.body_angleY_min, field_0x1575 != 0 ? 0.0f : mpHIO->m.common.body_angleY_max, field_0x1574 != 0 ? 0.0f : mpHIO->m.common.head_angleX_min, field_0x1574 != 0 ? 0.0f : mpHIO->m.common.head_angleX_max, field_0x1574 != 0 ? 0.0f : mpHIO->m.common.head_angleY_min, field_0x1574 != 0 ? 0.0f : mpHIO->m.common.head_angleY_max, mpHIO->m.common.neck_rotation_ratio, fVar1, &sp110); if (mJntAnm.getMode() == daNpcT_JntAnm_c::LOOK_MODE_8) { mJntAnm.calcJntRad(0.1f, 1.0f, fVar1); } else { mJntAnm.calcJntRad(0.2f, 1.0f, fVar1); } J3DModel* model = mpMorf[0]->getModel(); J3DModelData* modelData = model->getModelData(); cXyz sp11c(current.pos); sp11c.y += field_0x1568; mDoMtx_stack_c::transS(sp11c); mDoMtx_stack_c::ZXYrotM(mCurAngle); mDoMtx_stack_c::scaleM(scale); model->setBaseTRMtx(mDoMtx_stack_c::get()); model->setUserArea((uintptr_t)this); mpMorf[0]->onMorfNone(); if (cM3d_IsZero(field_0xdfc) != false) { mpMorf[0]->offMorfNone(); } if ((mAnmFlags & 0x400) != 0) { mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame()); } mpMorf[0]->modelCalc(); if (mFishModelMorf != NULL) { cXyz sp128; mFishModelMorf->play(0, 0); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(JNT_FINGERR)); mDoMtx_stack_c::multVecZero(&sp128); Mtx mtx; cMtx_copy(mDoMtx_stack_c::get(), mtx); mFishModelMorf->getModel()->setBaseTRMtx(mtx); mFishModelMorf->modelCalc(); if (field_0x1579 != 0) { mDoAud_seStartLevel(Z2SE_YM_FISH, &sp128, 0, 0); } } if (mLeafModelMorf != NULL) { mLeafModelMorf->play(0, 0); otherYkmP = getOtherYkmP(5); if (otherYkmP != NULL) { mDoMtx_stack_c::transS(otherYkmP->current.pos); mDoMtx_stack_c::ZXYrotM(otherYkmP->shape_angle); mDoMtx_stack_c::scaleM(otherYkmP->scale); mLeafModelMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); mLeafModelMorf->modelCalc(); } } mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); mDoMtx_stack_c::multVec(&sp104, &eyePos); mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y + field_0xd8a.y, TRUE, 1.0f, 0); sp104.set(0.0f, 0.0f, 50.0f); sp104.y = mpHIO->m.common.attention_offset + field_0x1568; if (field_0x1581 != 0) { sp104.set(55.0f, 440.0f, 55.0f); } else if (mType == TYPE_COOK) { sp104.set(0.0f, 480.0f, 50.0f); } mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&sp104, &sp104); attention_info.position = current.pos + sp104; } /* 80B560B4-80B5641C 002CB4 0368+00 1/0 0/0 0/0 .text setCollision__11daNpc_ykM_cFv */ void daNpc_ykM_c::setCollision() { cXyz sp28; if (!mHide && field_0x1580 == 0) { u32 coSPrm = 121; u32 tgType = 0xD8FBFDFF; u32 tgSPrm = 31; int atType = AT_TYPE_IRON_BALL; u32 atSPrm = 0; if (dComIfGp_event_runCheck() || field_0x1581 != 0) { tgType = 0; tgSPrm = 0; } else if (mTwilight) { tgType = 0; tgSPrm = 0; } else { if (mStagger.checkStagger()) { tgType = 0; tgSPrm = 0; } if (field_0x157b != 0) { atSPrm = 19; } } int jointNo[4] = {JNT_BB2, JNT_HANDL, JNT_HANDR, JNT_TAIL}; f32 fVar1[4] = {140.0f, 60.0f, 60.0f, 140.0f}; for (int i = 0; i < 4; i++) { field_0xf94[i].SetCoSPrm(coSPrm); field_0xf94[i].SetTgType(tgType); field_0xf94[i].SetTgSPrm(tgSPrm); field_0xf94[i].SetAtType(atType); field_0xf94[i].SetAtSPrm(atSPrm); field_0xf94[i].OnTgNoHitMark(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(jointNo[i])); if (jointNo[i] == 29) { sp28.set(170.0f, 0.0f, 0.0f); mDoMtx_stack_c::multVec(&sp28, &sp28); } else { mDoMtx_stack_c::multVecZero(&sp28); } field_0xf94[i].SetC(sp28); field_0xf94[i].SetR(fVar1[i]); dComIfG_Ccsp()->Set(&field_0xf94[i]); } field_0xe58.SetCoSPrm(coSPrm); field_0xe58.SetTgType(tgType); field_0xe58.SetTgSPrm(tgSPrm); field_0xe58.SetAtType(atType); field_0xe58.SetAtSPrm(atSPrm); field_0xe58.OnTgNoHitMark(); field_0xe58.SetH(mCylH); field_0xe58.SetR(mWallR); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(JNT_CENTER)); mDoMtx_stack_c::multVecZero(&sp28); sp28.y = current.pos.y; field_0xe58.SetC(sp28); dComIfG_Ccsp()->Set(&field_0xe58); } for (int i = 0; i < 4; i++) { field_0xf94[i].ClrCoHit(); } field_0xe58.ClrCoHit(); for (int i = 0; i < 4; i++) { field_0xf94[i].ClrTgHit(); } field_0xe58.ClrTgHit(); for (int i = 0; i < 4; i++) { field_0xf94[i].ClrAtHit(); } field_0xe58.ClrAtHit(); } /* 80B5641C-80B56424 00301C 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_ykM_cFv */ int daNpc_ykM_c::drawDbgInfo() { #if DEBUG if (mpHIO->m.common.debug_info_ON != 0) { f32 fVar1 = dComIfGp_getAttention()->getDistTable(attention_info.distances[6]).mDistMax; f32 fVar2 = dComIfGp_getAttention()->getDistTable(attention_info.distances[1]).mDistMax; dDbVw_drawCircleOpa(attention_info.position, fVar1, (GXColor){0x0, 0xc8, 0x0, 0xff}, 1, 12); dDbVw_drawCircleOpa(attention_info.position, fVar2, (GXColor){0xc8, 0x0, 0x0, 0xff}, 1, 12); dDbVw_drawSphereXlu(eyePos, 18.0f, (GXColor){0x80, 0x80, 0x80, 0xa0}, 1); dDbVw_drawSphereXlu(attention_info.position, 9.0f, (GXColor){0x80, 0x80, 0x80, 0xa0}, 1); if (mPath.getPathInfo() != 0) { mPath.drawDbgInfo(attention_info.position.y, 3); } } #endif return 0; } /* 80B56424-80B56624 003024 0200+00 1/0 0/0 0/0 .text drawOtherMdl__11daNpc_ykM_cFv */ void daNpc_ykM_c::drawOtherMdl() { J3DModel* model = mpMorf[0]->getModel(); if (mFishModelMorf != NULL) { g_env_light.setLightTevColorType_MAJI(mFishModelMorf->getModel(), &tevStr); if (field_0x1579 == 0) { mFishModelMorf->getModel()->getModelData()->hide(); } else { mFishModelMorf->getModel()->getModelData()->show(); } mFishModelMorf->entryDL(); dComIfGd_addRealShadow(mShadowKey, mFishModelMorf->getModel()); } if (mLeafModelMorf != NULL) { g_env_light.setLightTevColorType_MAJI(mLeafModelMorf->getModel(), &tevStr); if (field_0x1576 != 0) { mLeafModelMorf->getModel()->getModelData()->hide(); } else { mLeafModelMorf->getModel()->getModelData()->show(); } mLeafModelMorf->entryDL(); } static int const jointNo[3] = { JNT_FINGERR, JNT_FOOTR, JNT_FINGERR, }; for (int i = 0; i < 3; i++) { if (field_0xe4c[i] != NULL && ((i == 0 && field_0x1577 != 0) || (i == 2 && field_0x1578 != 0) || (i == 1 && field_0x1576 != 0))) { g_env_light.setLightTevColorType_MAJI(field_0xe4c[i], &tevStr); mDoMtx_stack_c::copy(model->getAnmMtx(jointNo[i])); Mtx mtx; cMtx_copy(mDoMtx_stack_c::get(), mtx); field_0xe4c[i]->setBaseTRMtx(mtx); mDoExt_modelUpdateDL(field_0xe4c[i]); dComIfGd_addRealShadow(mShadowKey, field_0xe4c[i]); } } } /* 80B56624-80B566E8 003224 00C4+00 1/1 0/0 0/0 .text setFishAnm__11daNpc_ykM_cFiif */ bool daNpc_ykM_c::setFishAnm(int i_index, int i_attr, f32 i_morf) { static struct { int resIdx; int arcIdx; } fishAnmData[51] = { {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_ATTACK, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_JUMP, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_WAIT_A, YKM3}, {BCK_FISH_SB_WAIT, YKM3}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, {-1, 0}, }; J3DAnmTransform* anmTransform = NULL; int index = i_index; if (mFishModelMorf != NULL) { if (fishAnmData[index].resIdx > 0) { anmTransform = getTrnsfrmKeyAnmP(l_resNameList[fishAnmData[index].arcIdx], fishAnmData[index].resIdx); } if (anmTransform != NULL) { mFishModelMorf->setAnm(anmTransform, i_attr, i_morf, 1.0f, 0.0f, -1.0f); } } return true; } /* 80B566E8-80B567B4 0032E8 00CC+00 2/2 0/0 0/0 .text setLeafAnm__11daNpc_ykM_cFif */ bool daNpc_ykM_c::setLeafAnm(int i_index, f32 i_morf) { static struct { int resIdx; int attr; int arcIdx; } leafAnmData[3] = { {BCK_LEAF_WAIT_A, J3DFrameCtrl::EMode_LOOP, YKM3}, {BCK_LEAF_FALL, J3DFrameCtrl::EMode_NONE, YKM3}, {BCK_LEAF_WAIT_B, J3DFrameCtrl::EMode_LOOP, YKM3}, }; J3DAnmTransform* anmTransform = NULL; int index = i_index; if (mLeafModelMorf != NULL) { if (leafAnmData[index].resIdx > 0) { anmTransform = getTrnsfrmKeyAnmP(l_resNameList[leafAnmData[index].arcIdx], leafAnmData[index].resIdx); } if (anmTransform != NULL) { mLeafModelMorf->setAnm(anmTransform, leafAnmData[index].attr, i_morf, 1.0f, 0.0f, -1.0f); } } return true; } /* 80B567B4-80B5680C 0033B4 0058+00 1/0 0/0 0/0 .text afterSetMotionAnm__11daNpc_ykM_cFiifi */ bool daNpc_ykM_c::afterSetMotionAnm(int i_index, int i_attr, f32 i_morf, int param_3) { f32 morf = mCreating == true ? 0.0f : i_morf; switch (i_index) { case 0x23: mpMorf[0]->setStartFrame(15.0f); break; } return setFishAnm(i_index, i_attr, morf); } /* 80B5680C-80B56954 00340C 0148+00 1/1 0/0 0/0 .text selectAction__11daNpc_ykM_cFv */ int daNpc_ykM_c::selectAction() { mpNextAction = NULL; #if DEBUG if (mpHIO->m.common.debug_mode_ON != NULL) { mpNextAction = &daNpc_ykM_c::cook; return 1; } #endif switch (mType) { case TYPE_COOK: mpNextAction = &daNpc_ykM_c::cook; break; case TYPE_2: if (field_0x157b != 0) { mpNextAction = &daNpc_ykM_c::race; mAcch.SetWallNone(); } else { mpNextAction = &daNpc_ykM_c::wait; mAcch.ClrWallNone(); } break; case TYPE_4: if (field_0x157b != 0) { mpNextAction = &daNpc_ykM_c::race; mAcch.SetWallNone(); } else { mpNextAction = &daNpc_ykM_c::wait; mAcch.ClrWallNone(); } break; default: mpNextAction = &daNpc_ykM_c::wait; break; } return 1; } /* 80B56954-80B56980 003554 002C+00 2/2 0/0 0/0 .text chkAction__11daNpc_ykM_cFM11daNpc_ykM_cFPCvPvPv_i */ BOOL daNpc_ykM_c::chkAction(ActionFn action) { return mpAction == action; } /* 80B56980-80B56A28 003580 00A8+00 2/2 0/0 0/0 .text setAction__11daNpc_ykM_cFM11daNpc_ykM_cFPCvPvPv_i */ int daNpc_ykM_c::setAction(ActionFn action) { mMode = 3; if (mpAction) { (this->*mpAction)(NULL); } mMode = 0; mpAction = action; if (mpAction) { (this->*mpAction)(NULL); } return 1; } /* 80B56A28-80B56AB4 003628 008C+00 2/2 0/0 0/0 .text chkContinueAttnPlayer__11daNpc_ykM_cFv */ BOOL daNpc_ykM_c::chkContinueAttnPlayer() { if (mType == TYPE_COOK && daNpcT_chkEvtBit(0xB) /* dSv_event_flag_c::F_0007 - Snowpeak Ruins - Spoke to Yeta while holding cheese */) { if (daNpcT_chkEvtBit(4) /* dSv_event_flag_c::TEST_004 - Snowpeak Ruins - Handed over secret ingredient */ && daNpcT_chkEvtBit(8) /* dSv_event_flag_c::F_0004 - Snowpeak Ruins - Handed over secret ingredient and left room */) { return TRUE; } if (daNpcT_chkEvtBit(3) /* dSv_event_flag_c::TEST_003 - Snowpeak Ruins - Handed over tomato puree */ && daNpcT_chkEvtBit(7) /* dSv_event_flag_c::F_0003 - Snowpeak Ruins - Handed over tomato puree and left room */) { return TRUE; } } return FALSE; } /* 80B56AB4-80B56B84 0036B4 00D0+00 1/1 0/0 0/0 .text chkTouchPlayer__11daNpc_ykM_cFv */ BOOL daNpc_ykM_c::chkTouchPlayer() { fopAc_ac_c* actor = NULL; if (20.0f < speedF) { for (int i = 0; i < 4; i++) { if (field_0xf94[i].ChkCoHit()) { actor = field_0xf94[i].GetCoHitAc(); if (actor != NULL && fopAcM_GetName(actor) == PROC_ALINK) { return TRUE; } } } if (field_0xe58.ChkCoHit()) { actor = field_0xe58.GetCoHitAc(); if (actor != NULL && fopAcM_GetName(actor) == PROC_ALINK) { return TRUE; } } } return FALSE; } /* 80B56B84-80B572C8 003784 0744+00 3/0 0/0 0/0 .text cutSlideDown__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutSlideDown(int i_cutIndex) { fopAc_ac_c* actor_p = NULL; cXyz work; csXyz angle; int rv = 0; int* piVar1 = NULL; int prm = -1; int timer = 0; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "timer"); if (piVar1 != NULL) { timer = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex) != 0) { switch (prm) { case 0: mEventTimer = timer; break; case 1: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_FISH_WAIT_A_2, -1.0f, FALSE, 0); work.set(400.0f, 500.0f, -200.0f); angle.y = mCurAngle.y; mDoMtx_stack_c::YrotS(angle.y); mDoMtx_stack_c::multVec(&work, &work); work += current.pos; mGndChk.SetPos(&work); work.y = dComIfG_Bgsp().GroundCross(&mGndChk); JUT_ASSERT(3443, -G_CM3D_F_INF != work.y); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&work, angle.y, 0); work.set(400.0f, 500.0f, 0.0f); angle.y = mCurAngle.y; mDoMtx_stack_c::YrotS(angle.y); mDoMtx_stack_c::multVec(&work, &work); work += current.pos; mGndChk.SetPos(&work); work.y = dComIfG_Bgsp().GroundCross(&mGndChk); JUT_ASSERT(3454, -G_CM3D_F_INF != work.y); dComIfGp_evmng_setGoal(&work); break; case 2: initTalk(mFlowNodeNo, NULL); mEventTimer = timer; break; case 3: mMotionSeqMngr.setNo(MOTION_FISH_ATTACK, 0.0f, TRUE, 0); mJntAnm.lookNone(1); break; case 4: setLeafAnm(ANM_LEAF_FALL, 0.0f); break; case 5: mMotionSeqMngr.setNo(MOTION_FISH_JUMP, 0.0f, TRUE, 0); actor_p = getOtherYkmP(5); JUT_ASSERT(3475, NULL != actor_p); setPos(actor_p->current.pos); setAngle(actor_p->shape_angle.y); field_0x1568 = 0.0f; setLeafAnm(ANM_LEAF_WAIT_B, 0.0f); mSound.startCreatureVoice(Z2SE_YKM_V_JUMP_TO_LEAF, -1); break; case 6: field_0x157b = 1; field_0x1582 = 1; break; } } int unusedIntArr1[2] = {-1, -1}; switch (prm) { case 0: if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } break; case 1: rv = 1; break; case 2: mJntAnm.lookPlayer(0); if (cLib_calcTimer(&mEventTimer) == 0 && talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; case 3: mJntAnm.lookNone(0); if (mMotionSeqMngr.getStepNo() == 0) { if (mpMorf[0]->checkFrame(65.0f)) { rv = 1; } else if (mpMorf[0]->checkFrame(50.0f)) { mSound.startCreatureVoice(Z2SE_YKM_V_ATTACK_TREE, -1); } else if (mpMorf[0]->checkFrame(62.0f)) { cXyz i_sePos(-14483.0f, 2023.0f, -9768.0f); mDoAud_seStart(Z2SE_YM_ATTACK_TREE, &i_sePos, 0, 0); dComIfGp_getVibration().StartShock(5, 15, cXyz(0.0f, 1.0f, 0.0f)); } } break; case 4: mJntAnm.lookNone(0); if (mLeafModelMorf->isStop()) { actor_p = getOtherYkmP(5); JUT_ASSERT(3565, NULL != actor_p); angle.y = fopAcM_searchActorAngleY(daPy_getPlayerActorClass(), actor_p); work = daPy_getPlayerActorClass()->current.pos; daPy_getPlayerActorClass()->setPlayerPosAndAngle(&work, angle.y, 0); rv = 1; } else { actor_p = getOtherYkmP(5); if (actor_p != NULL && mLeafModelMorf->checkFrame(22.0f)) { mDoAud_seStart(Z2SE_OBJ_LEAF_FALL_DOWN, &actor_p->current.pos, 0, 0); } } break; case 5: if (mMotionSeqMngr.checkEndSequence()) { rv = 1; } else if (mpMorf[0]->checkFrame(27.0f)) { mSound.startCreatureSound(Z2SE_YM_RIDE_LEAF, 0, -1); } break; case 6: action(); if (17 < (int)mPath.getIdx()) { rv = 1; } break; } return rv; } /* 80B572C8-80B57638 003EC8 0370+00 1/0 0/0 0/0 .text cutMeetingAgain__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutMeetingAgain(int i_cutIndex) { cXyz work; int rv = 0; int* piVar1 = NULL; int prm = -1; int timer = 0; int unusedInt1 = 0; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "timer"); if (piVar1 != NULL) { timer = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "msgNo"); if (piVar1 != NULL) { unusedInt1 = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (prm) { case 0: daNpcT_offTmpBit(0xB); // General use - General use temporary flag (flow control) A daNpcT_offTmpBit(0xC); // General use - General use temporary flag (flow control) B daNpcT_offTmpBit(0xD); // General use - General use temporary flag (flow control) C initTalk(mFlowNodeNo, NULL); break; case 1: mEventTimer = timer; field_0x156c = fopAcM_searchActorAngleY(daPy_getPlayerActorClass(), this); work.set(0.0f, 0.0f, 1000.0f); mDoMtx_stack_c::YrotS(field_0x156c); mDoMtx_stack_c::multVec(&work, &work); field_0x1520 = work + daPy_getPlayerActorClass()->current.pos; dComIfGp_evmng_setGoal(&field_0x1520); work.set(0.0f, 0.0f, 80.0f); mDoMtx_stack_c::YrotS(field_0x156c); mDoMtx_stack_c::multVec(&work, &work); work += daPy_getPlayerActorClass()->current.pos; daPy_getPlayerActorClass()->setPlayerPosAndAngle(&work, field_0x156c, 0); break; case 2: initTalk(mFlowNodeNo, NULL); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&field_0x1520, field_0x156c, 0); break; case 3: break; } } int unusedIntArr1[2] = {-1, -1}; switch (prm) { case 0: mJntAnm.lookPlayer(0); if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; case 1: if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } break; case 2: mJntAnm.lookPlayer(0); if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; case 3: rv = 1; break; } return rv; } /* 80B57638-80B5806C 004238 0A34+00 3/0 0/0 0/0 .text cutGetTomatoPuree__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutGetTomatoPuree(int i_cutIndex) { fopAc_ac_c* actor_p = NULL; cXyz work; csXyz angle; int rv = 0; int* piVar1 = NULL; int prm = -1; int timer = 0; int msgNo = 0; field_0x1508.set(0.0f, 200.0f, 450.0f); mDoMtx_stack_c::YrotS(home.angle.y); mDoMtx_stack_c::multVec(&field_0x1508, &field_0x1508); field_0x1508 += current.pos; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "timer"); if (piVar1 != NULL) { timer = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "msgNo"); if (piVar1 != NULL) { msgNo = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (prm) { case 0: mJntAnm.lookNone(0); daNpcT_offTmpBit(0xB); // General use - General use temporary flag (flow control) A daNpcT_offTmpBit(0xC); // General use - General use temporary flag (flow control) B daNpcT_offTmpBit(0xD); // General use - General use temporary flag (flow control) C initTalk(mFlowNodeNo, NULL); break; case 1: mEventTimer = timer; break; case 2: initTalk(mFlowNodeNo, NULL); break; case 3: mPlayerAngle = fopAcM_searchPlayerAngleY(this); break; case 4: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_PUSH, 0.0f, FALSE, 0); mEventTimer = timer; break; case 5: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_PICKUP, -1.0f, FALSE, 0); break; case 6: initTalk(mFlowNodeNo, NULL); break; case 7: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_POUR, -1.0f, FALSE, 0); mEventTimer = timer; setAngle(home.angle.y); break; case 8: initTalk(mFlowNodeNo, NULL); break; } } int iVar2[2] = {-1, -1}; f32 fVar1; int iVar1; switch (prm) { case 0: if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; case 1: if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } break; case 2: iVar2[0] = msgNo; if (talkProc(iVar2, FALSE, NULL, FALSE)) { if (msgNo == 0) { if (mFlow.checkEndFlow()) { rv = 1; } } else { rv = 1; } } break; case 3: mJntAnm.lookPlayer(0); if (mPlayerAngle != mCurAngle.y) { step(mPlayerAngle, -1, -1, mpHIO->m.step_speed, 0); } shape_angle.y = mPlayerAngle; if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow() && mPlayerAngle == mCurAngle.y) { rv = 1; } break; case 4: mJntAnm.lookPlayer(0); if (mMotionSeqMngr.getNo() != MOTION_PUSH) break; if (mEventTimer != 0 || dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { if (cLib_calcTimer(&mEventTimer) == 0) { actor_p = (fopAc_ac_c*)mActorMngr[3].getActorP(); if (actor_p != NULL) { ((daObj_Gadget_c*)actor_p)->setCoNone(); ((daObj_Gadget_c*)actor_p)->offHide(); actor_p->current.angle.y = shape_angle.y + 0x8000; ((daObj_Gadget_c*)actor_p)->popup(mpHIO->m.jump_speed, mpHIO->m.push_out_angle, &daPy_getPlayerActorClass()->attention_info.position); } } } if (mMotionSeqMngr.getStepNo() == 0) { if (mpMorf[0]->checkFrame(mpHIO->m.skip_frame)) { mSound.startCreatureVoice(Z2SE_YKM_V_GETFOOD, -1); fVar1 = mpHIO->m.fly_speed; s16 iVar2 = cM_deg2s(mpHIO->m.fly_angle); daPy_getPlayerActorClass()->setThrowDamage(shape_angle.y, fVar1 * cM_scos(iVar2), fVar1 * cM_ssin(iVar2), 0, 1, 0); } } else { rv = 1; } break; case 5: if (mMotionSeqMngr.getNo() == MOTION_PICKUP) { if (mMotionSeqMngr.getStepNo() == 0) { if (mpMorf[0]->checkFrame(19.0f)) { field_0x1577 = 1; actor_p = (daObj_Gadget_c*)mActorMngr[3].getActorP(); if (actor_p != NULL) { ((daObj_Gadget_c*)actor_p)->onHide(); } } } else { rv = 1; } } break; case 7: if (mMotionSeqMngr.getNo() == MOTION_POUR) { if (mMotionSeqMngr.getStepNo() == 0) { if (mpMorf[0]->checkFrame(18.0f)) { if (field_0x1577 != 0) { mDoAud_seStart(Z2SE_CM_BODYFALL_WATER_S, NULL, 0, 0); } field_0x1577 = 0; } } else if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } } break; case 6: if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; case 8: mJntAnm.lookPlayer(0); if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; } field_0x1580 = 1; if (prm == 8) { field_0x1580 = 0; } if (prm == 5 || prm == 6) { if (field_0x1577 != 0) { field_0x1575 = 1; mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(JNT_FINGERR)); mDoMtx_stack_c::multVecZero(&field_0xd6c); mJntAnm.lookPos(&field_0xd6c, 0); } else { actor_p = mActorMngr[3].getActorP(); if (actor_p == NULL) { mJntAnm.lookNone(0); return rv; } field_0xd6c = actor_p->current.pos; } } else if (prm == 7) { mJntAnm.lookPos(&field_0x1508, 0); field_0x1575 = 1; } return rv; } /* 80B5806C-80B58A38 004C6C 09CC+00 3/0 0/0 0/0 .text cutGetTaste__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutGetTaste(int i_cutIndex) { fopAc_ac_c* actor_p = NULL; cXyz work; csXyz angle; int rv = 0; int* piVar1 = NULL; int prm = -1; int timer = 0; int msgNo = 0; field_0x1508.set(0.0f, 200.0f, 450.0f); mDoMtx_stack_c::YrotS(home.angle.y); mDoMtx_stack_c::multVec(&field_0x1508, &field_0x1508); field_0x1508 += current.pos; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "timer"); if (piVar1 != NULL) { timer = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "msgNo"); if (piVar1 != NULL) { msgNo = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (prm) { case 2: mJntAnm.lookNone(0); daNpcT_offTmpBit(0xB); // General use - General use temporary flag (flow control) A daNpcT_offTmpBit(0xC); // General use - General use temporary flag (flow control) B daNpcT_offTmpBit(0xD); // General use - General use temporary flag (flow control) C initTalk(mFlowNodeNo, NULL); break; case 3: mPlayerAngle = fopAcM_searchPlayerAngleY(this); break; case 4: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_PUSH, 0.0f, FALSE, 0); mEventTimer = timer; break; case 5: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_PICKUP, -1.0f, FALSE, 0); break; case 6: initTalk(mFlowNodeNo, NULL); break; case 7: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_POUR, -1.0f, FALSE, 0); mEventTimer = timer; setAngle(home.angle.y); break; case 8: initTalk(mFlowNodeNo, NULL); break; } } int iVar2[2] = {-1, -1}; f32 fVar1; int iVar1; switch (prm) { case 2: iVar2[0] = msgNo; if (talkProc(iVar2, FALSE, NULL, FALSE)) { if (msgNo == 0) { if (mFlow.checkEndFlow()) { rv = 1; } } else { rv = 1; } } break; case 3: mJntAnm.lookPlayer(0); if (mPlayerAngle != mCurAngle.y) { step(mPlayerAngle, -1, -1, mpHIO->m.step_speed, 0); } shape_angle.y = mPlayerAngle; if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow() && mPlayerAngle == mCurAngle.y) { rv = 1; } break; case 4: mJntAnm.lookPlayer(0); if (mMotionSeqMngr.getNo() != MOTION_PUSH) break; if (mEventTimer != 0 || dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { if (cLib_calcTimer(&mEventTimer) == 0) { actor_p = (daObj_Gadget_c*)mActorMngr[4].getActorP(); if (actor_p != NULL) { ((daObj_Gadget_c*)actor_p)->setCoNone(); ((daObj_Gadget_c*)actor_p)->offHide(); actor_p->current.angle.y = shape_angle.y + 0x8000; ((daObj_Gadget_c*)actor_p)->popup(mpHIO->m.jump_speed, mpHIO->m.push_out_angle, &daPy_getPlayerActorClass()->attention_info.position); } } } if (mMotionSeqMngr.getStepNo() == 0) { if (mpMorf[0]->checkFrame(mpHIO->m.skip_frame)) { mSound.startCreatureVoice(Z2SE_YKM_V_GETFOOD, -1); fVar1 = mpHIO->m.fly_speed; s16 iVar3 = cM_deg2s(mpHIO->m.fly_angle); daPy_getPlayerActorClass()->setThrowDamage(shape_angle.y, fVar1 * cM_scos(iVar3), fVar1 * cM_ssin(iVar3), 0, 1, 0); } } else { rv = 1; } break; case 5: if (mMotionSeqMngr.getNo() == MOTION_PICKUP) { if (mMotionSeqMngr.getStepNo() == 0) { if (mpMorf[0]->checkFrame(19.0f)) { field_0x1578 = 1; actor_p = (daObj_Gadget_c*)mActorMngr[4].getActorP(); if (actor_p != NULL) { ((daObj_Gadget_c*)actor_p)->onHide(); } } } else { rv = 1; } } break; case 7: if (mMotionSeqMngr.getNo() == MOTION_POUR) { if (mMotionSeqMngr.getStepNo() == 0) { if (mpMorf[0]->checkFrame(18.0f)) { if (field_0x1578 != 0) { mDoAud_seStart(Z2SE_CM_BODYFALL_WATER_S, NULL, 0, 0); } field_0x1578 = 0; } } else if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } } break; case 6: if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; case 8: mJntAnm.lookPlayer(0); if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) { rv = 1; } break; } field_0x1580 = 1; if (prm == 8) { field_0x1580 = 0; } if (prm == 5 || prm == 6) { if (field_0x1578 != 0) { field_0x1575 = 1; mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(JNT_FINGERR)); mDoMtx_stack_c::multVecZero(&field_0xd6c); mJntAnm.lookPos(&field_0xd6c, 0); } else { actor_p = mActorMngr[4].getActorP(); if (actor_p == NULL) { mJntAnm.lookNone(0); return rv; } field_0xd6c = actor_p->current.pos; } } else if (prm == 7) { mJntAnm.lookPos(&field_0x1508, 0); field_0x1575 = 1; } return rv; } /* 80B58A38-80B59500 005638 0AC8+00 1/0 0/0 0/0 .text cutLv5DungeonClear__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutLv5DungeonClear(int i_cutIndex) { fopAc_ac_c* actor_p = NULL; daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass(); cXyz work; int rv = 0; int* piVar1 = NULL; int prm = -1; int timer = 0; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "timer"); if (piVar1 != NULL) { timer = *piVar1; } s16 angleY; if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (prm) { case 0: mFaceMotionSeqMngr.setNo(FACE_NONE, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_X, 0.0f, FALSE, 0); mJntAnm.lookNone(1); mHide = false; fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x8000000); break; case 1: mMotionSeqMngr.setNo(MOTION_RUN, -1.0f, FALSE, 0); mSound.startCreatureVoice(Z2SE_YKM_V_DASH, -1); mEventTimer = timer; angleY = fopAcM_searchActorAngleY(player, this); ((daPy_py_c*)daPy_getPlayerActorClass())->setPlayerPosAndAngle(&player->current.pos, angleY, 0); dComIfGp_getEvent().setPt2(this); break; case 2: mFaceMotionSeqMngr.setNo(FACE_NONE, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAITLIE, 0.0f, FALSE, 0); mEventTimer = timer; break; case 3: mMotionSeqMngr.setNo(MOTION_WAKE, -1.0f, FALSE, 0); break; case 4: mFaceMotionSeqMngr.setNo(FACE_SHUT, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_DENY, -1.0f, FALSE, 0); break; case 5: mFaceMotionSeqMngr.setNo(FACE_TALK_X, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAITWAKE, 0.0f, FALSE, 0); break; case 6: mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_HOLD, -1.0f, FALSE, 0); break; case 7: mFaceMotionSeqMngr.setNo(FACE_TALK_X, -1.0f, FALSE, 0); break; case 8: mFaceMotionSeqMngr.setNo(FACE_H_HAPPY, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_HOLD_B, -1.0f, FALSE, 0); mSound.startCreatureVoice(Z2SE_YKM_V_HUG, -1); break; case 10: mEventTimer = timer; break; case 12: mFaceMotionSeqMngr.setNo(FACE_SHOUT, -1.0f, FALSE, 0); mEventTimer = timer; daPy_py_c::getMidnaActor()->onTagNoHairLead(); break; case 13: Z2GetAudioMgr()->bgmStreamStop(0x28); break; case 20: mFaceMotionSeqMngr.setNo(FACE_NONE, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_STOP, 0.0f, FALSE, 0); actor_p = mActorMngr[5].getActorP(); JUT_ASSERT(4401, NULL != actor_p); setPos(actor_p->home.pos); setAngle(actor_p->home.angle.y); break; case 21: mFaceMotionSeqMngr.setNo(FACE_TALK_Y, -1.0f, FALSE, 0); break; case 30: field_0x1581 = 1; field_0x157a = 1; break; case 31: field_0x157a = 0; break; case 99: mFaceMotionSeqMngr.setNo(FACE_H_HAPPY, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAITHOLD_B_B, 0.0f, FALSE, 0); actor_p = mActorMngr[5].getActorP(); JUT_ASSERT(4424, NULL != actor_p); setPos(actor_p->home.pos); setAngle(actor_p->home.angle.y); speedF = 0.0f; speed.setall(0.0f); field_0x157a = 0; field_0x1580 = 0; field_0x1581 = 1; break; } } int iVar2[2] = {-1, -1}; switch (prm) { case 0: rv = 1; break; case 11: case 1: if (mEventTimer != 0 || dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { actor_p = mActorMngr[5].getActorP(); JUT_ASSERT(4455, NULL != actor_p); if (cLib_calcTimer(&mEventTimer) == 0) { speedF = 0.0f; } else { current.angle.y = cLib_targetAngleY(¤t.pos, &actor_p->current.pos); cLib_addCalcAngleS2(&shape_angle.y, current.angle.y, 4, 0x800); mCurAngle.y = shape_angle.y; speedF = mpHIO->m.run_speed; } } if (prm == 1) { for (int i = 0; i < 4; i++) { if (field_0xf94[i].ChkCoHit()) { if (daPy_getPlayerActorClass() == field_0xf94[i].GetCoHitAc()) { rv = 1; } } } if (rv == 0 && field_0xe58.ChkCoHit()) { if (daPy_getPlayerActorClass() == field_0xe58.GetCoHitAc()) { rv = 1; } } if (rv != 0) { angleY = fopAcM_searchActorAngleY(this, player); angleY += (s16)0x4000; daPy_getPlayerActorClass()->setPlayerPosAndAngle(&player->current.pos, angleY, 0); field_0x1580 = 1; } } if (prm == 11) { field_0x1580 = 1; rv = mEventTimer == 0; } break; case 2: case 5: case 6: case 7: case 8: case 21: case 30: case 31: case 99: rv = 1; break; case 3: if (mMotionSeqMngr.getStepNo() > 0) { rv = 1; } break; case 4: if (mMotionSeqMngr.getStepNo() > 0) { rv = 1; } break; case 12: case 10: if (mEventTimer != 0) { if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } } else { rv = 1; } break; case 13: rv = 1; break; case 20: field_0x1580 = 1; if (mMotionSeqMngr.checkEndSequence()) { daPy_getPlayerActorClass()->changeDemoMoveAngle(0x7800); rv = 1; } break; } actor_p = mActorMngr[5].getActorP(); if (actor_p != NULL && (prm == 2 || prm == 3 || prm == 4 || prm == 5 || prm == 6 || prm == 7 || prm == 8 || prm == 20 || prm == 21 || prm == 30 || prm == 31)) { field_0xd6c = actor_p->eyePos; field_0xd8a.y = 0xC000; mJntAnm.lookPos(&field_0xd6c, 0); } else { mJntAnm.lookNone(0); } if (prm == 8) { field_0x1580 = 0; } field_0x1575 = 1; field_0x1574 = 1; field_0xe26 = false; return rv; } /* 80B59500-80B59748 006100 0248+00 1/0 0/0 0/0 .text cutFindWolf__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutFindWolf(int i_cutIndex) { int rv = 0; int* piVar1 = NULL; int prm = -1; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } fopAc_ac_c* actors[2] = {mActorMngr[5].getActorP(), this}; dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (prm) { case 0: mPlayerAngle = fopAcM_searchPlayerAngleY(this); break; case 1: mPlayerActorMngr.entry(daPy_getPlayerActorClass()); initTalk(mFlowNodeNo, NULL); break; } } int unusedIntArr1[2] = {-1, -1}; switch (prm) { case 0: mJntAnm.lookPlayer(0); if (mPlayerAngle != mCurAngle.y) { step(mPlayerAngle, 15, 30, mpHIO->m.step_speed, 0); } else { rv = 1; } break; case 1: if (talkProc(NULL, TRUE, &actors[0], FALSE) && mFlow.checkEndFlow()) { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0); rv = 1; } break; } return rv; } /* 80B59748-80B59B90 006348 0448+00 1/0 0/0 0/0 .text cutStartSnowboardRace__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutStartSnowboardRace(int i_cutIndex) { fopAc_ac_c* actor_p = NULL; cXyz work; csXyz angle; int rv = 0; int* piVar1 = NULL; int prm = -1; int timer = 0; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "timer"); if (piVar1 != NULL) { timer = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (prm) { case 0: mEventTimer = timer; break; case 1: mFaceMotionSeqMngr.setNo(FACE_NONE, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_SB_WAIT, 0.0f, FALSE, 0); mJntAnm.lookNone(1); field_0x1585 = 0; field_0x157e = 0; field_0x1576 = 1; field_0x157c = 0; daNpcT_onTmpBit(0x54); // dSv_event_tmp_flag_c::T_0084 - Snowpeak mountain - Racing with Yeto field_0x157e = 0; actor_p = getOtherYkmP(5); JUT_ASSERT(4736, NULL != actor_p); setPos(actor_p->current.pos); setAngle(actor_p->shape_angle.y); if (daNpcT_getPlayerInfoFromPlayerList(20, fopAcM_GetRoomNo(this), &work, &angle)) { daPy_getPlayerActorClass()->setPlayerPosAndAngle(&work, angle.y, 0); dComIfGp_evmng_setGoal(&work); } break; case 2: field_0x157b = 1; mDoAud_subBgmStart(Z2BGM_SNOW_BOARD); break; case 4: field_0x1534 = -1; break; case 5: home.pos.set(-72610.0f, -54260.0f, 56590.0f); home.angle.setall(0); home.angle.y = cM_deg2s(60.0f); setPos(home.pos); setAngle(home.angle.y); break; } } switch (prm) { case 0: if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } break; case 1: rv = 1; break; case 2: if (field_0x1534 != -1) { if ((dTimer_c*)fpcM_SearchByID(field_0x1534) == dComIfG_getTimerPtr() && dComIfG_TimerStart(5, 0) != 0) { rv = 1; } } break; case 3: if (field_0x1534 != -1) { if ((dTimer_c*)fpcM_SearchByID(field_0x1534) == dComIfG_getTimerPtr()) { if (dComIfG_getTimerPtr()->isStart()) { rv = 1; } } } break; case 4: if (field_0x1534 != -1) { if ((dTimer_c*)fpcM_SearchByID(field_0x1534) == dComIfG_getTimerPtr()) { rv = 1; } } else if (dComIfG_getTimerPtr() != NULL) { dComIfG_TimerDeleteRequest(dComIfG_getTimerMode()); } else { field_0x1534 = dTimer_createTimer(5, 0x989298, 1, 0, 210.0f, 410.0f, 32.0f, 419.0f); } break; case 5: rv = 1; break; } return rv; } /* 80B59B90-80B5A0B8 006790 0528+00 1/0 0/0 0/0 .text cutEndSnowboardRace__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutEndSnowboardRace(int i_cutIndex) { fopAc_ac_c* actor_p = NULL; cXyz work; csXyz angle; int rv = 0; int* piVar1 = NULL; int prm = -1; int timer = 0; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "timer"); if (piVar1 != NULL) { timer = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (prm) { case 0: mEventTimer = timer; break; case 2: mFaceMotionSeqMngr.setNo(FACE_NONE, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_A, 0.0f, FALSE, 0); mJntAnm.lookPlayer(0); field_0x1576 = 0; daNpcT_offTmpBit(0x54); // dSv_event_tmp_flag_c::T_0084 - Snowpeak mountain - Racing with Yeto field_0x157b = 0; field_0x1558.field_0x0 = 0; field_0x1560 = 0; mPath.setIdx(0); actor_p = getOtherYkmP(6); JUT_ASSERT(4900, NULL != actor_p); setPos(actor_p->current.pos); angle.setall(0); angle.y = actor_p->shape_angle.y; home.angle.y = angle.y; setAngle(angle); if (field_0x1534 != -1) { if ((dTimer_c*)fpcM_SearchByID(field_0x1534) == dComIfG_getTimerPtr()) { dComIfG_TimerDeleteRequest(5); } } if (daNpcT_getPlayerInfoFromPlayerList(12, fopAcM_GetRoomNo(this), &work, &angle)) { angle.y = fopAcM_searchActorAngleY(daPy_getPlayerActorClass(), this); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&work, angle.y, 0); dComIfGp_evmng_setGoal(&work); } mDoAud_subBgmStop(); speed.setall(0.0f); speedF = 0.0f; break; case 3: daNpcT_onTmpBit(0x56); // dSv_event_tmp_flag_c::T_0086 - Snowpeak mountain - Won race against Yeto/Yeta if (field_0x157c != 0) { daNpcT_offTmpBit(0x56); // dSv_event_tmp_flag_c::T_0086 - Snowpeak mountain - Won race against Yeto/Yeta } mFlowNodeNo = 0x1FE; initTalk(mFlowNodeNo, NULL); break; case 5: mFaceMotionSeqMngr.setNo(FACE_NONE, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_A, 0.0f, FALSE, 0); actor_p = getOtherYkmP(6); JUT_ASSERT(4943, NULL != actor_p); home.pos = actor_p->current.pos; angle.setall(0); angle.y = actor_p->shape_angle.y; home.angle.y = angle.y; setPos(home.pos); setAngle(angle); } } int unusedIntArr1[2] = {-1, -1}; switch (prm) { case 0: action(); if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } break; case 1: action(); rv = 1; break; case 2: rv = 1; break; case 3: { if (talkProc(NULL, FALSE, NULL, FALSE)) { int iVar1; int eventId = mFlow.getEventId(&iVar1); switch (eventId) { case 13: mEvtNo = EVENT_START_SNOWBOARDRACE; evtChange(); break; default: if (mFlow.checkEndFlow()) { rv = 1; } break; } } break; } case 4: rv = 1; break; case 5: mJntAnm.lookPlayer(0); rv = 1; break; } return rv; } /* 80B5A0B8-80B5A128 006CB8 0070+00 1/0 0/0 0/0 .text cutHug__11daNpc_ykM_cFi */ int daNpc_ykM_c::cutHug(int i_cutIndex) { int prm; int rv = 0; int* piVar1 = NULL; prm = -1; piVar1 = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (piVar1 != NULL) { prm = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { (void)0; } field_0xe26 = false; return rv; } /* 80B5A128-80B5A224 006D28 00FC+00 1/1 0/0 0/0 .text setDialogueMotion__11daNpc_ykM_cFv */ void daNpc_ykM_c::setDialogueMotion() { int uVar1 = field_0x154c; uVar1 >>= 1; if (0.5f < cM_rnd()) { int dummy; // force r31 to be used for stack pointer instead of r1 if (cM_rnd() - 0.5f < 0.0f) { uVar1--; } else { uVar1++; } } static int const motionTbl2[4] = { MOTION_TALK_B, MOTION_TALK_C, MOTION_LAUGH, MOTION_TALK_B, }; static int const motionTbl1[2] = { MOTION_TALK_B, MOTION_ASK, }; if ((field_0x154c & 1) != 0) { uVar1 &= 0x3; mMotionSeqMngr.setNo(motionTbl2[uVar1], -1.0f, FALSE, 0); } else { uVar1 &= 0x1; mMotionSeqMngr.setNo(motionTbl1[uVar1], -1.0f, FALSE, 0); } } /* 80B5A224-80B5A3FC 006E24 01D8+00 1/1 0/0 0/0 .text dialogue__11daNpc_ykM_cFv */ int daNpc_ykM_c::dialogue() { daNpc_ykW_c* actor_p = NULL; switch (field_0x1548) { case 0: if (field_0x1544 != 0 && cLib_calcTimer(&field_0x1544) == 0) { field_0x1548++; if ((field_0x154c & 1) != 0) { dComIfGs_offTmpBit(0xD01); dComIfGs_onTmpBit(0xE80); actor_p = (daNpc_ykW_c*)mActorMngr[5].getActorP(); if (actor_p != NULL) { actor_p->setDialogueTmr1(field_0x154c); } } else { dComIfGs_onTmpBit(0xD01); dComIfGs_offTmpBit(0xE80); setDialogueMotion(); } } break; case 1: case 2: if (dComIfGs_isTmpBit(0xD01)) { if (mMotionSeqMngr.getStepNo() > 0) { dComIfGs_offTmpBit(0xD01); dComIfGs_onTmpBit(0xE80); if (field_0x1548 == 1) { actor_p = (daNpc_ykW_c*)mActorMngr[5].getActorP(); if (actor_p != NULL) { actor_p->setDialogueTmr2(field_0x154c); } } field_0x1548++; } } else if (!dComIfGs_isTmpBit(0xE80)) { dComIfGs_onTmpBit(0xD01); dComIfGs_offTmpBit(0xE80); if (field_0x1548 == 1) { setDialogueMotion(); } field_0x1548++; } break; case 3: return 1; } return 0; } /* 80B5A3FC-80B5ABA8 006FFC 07AC+00 3/0 0/0 0/0 .text wait__11daNpc_ykM_cFPv */ BOOL daNpc_ykM_c::wait(void* param_1) { daTag_EvtArea_c* actor_p = NULL; daPy_py_c* player = daPy_getPlayerActorClass(); switch (mMode) { case 0: case 1: if (!mStagger.checkStagger()) { if (field_0x1581 != 0) { mFaceMotionSeqMngr.setNo(FACE_H_HAPPY, 0.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAITHOLD_B_B, 0.0f, FALSE, 0); } else if (mType == TYPE_2) { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_FISH_WAIT_A_2, -1.0f, FALSE, 0); } else if (daNpcT_chkTmpBit(0x55)) { // dSv_event_tmp_flag_c::T_0085 - Snowpeak mountain - Racing with Yeta mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_FUNWAIT, -1.0f, FALSE, 0); } else { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0); } field_0x1544 = cLib_getRndValue(180, 90); field_0x1548 = 0; field_0x154c++; mMode = 2; } // fallthrough case 2: if (!daPy_py_c::checkNowWolf() && field_0x1585 == 0) { for (int i = 0; i < 2; i++) { actor_p = (daTag_EvtArea_c*)mActorMngr[i + 6].getActorP(); if (actor_p != NULL) { if (actor_p->chkPointInArea(player->current.pos)) { if (mType == TYPE_2) { if (!daPy_py_c::checkNowWolf()) { mEvtNo = EVENT_SLIDEDOWN; } } else { mSpeakEvent = true; field_0x1583 = 1; } } } } } if (field_0x1581 != 0) { mJntAnm.lookNone(0); } else if (!mStagger.checkStagger()) { if (mType == TYPE_4) { if (field_0x1583 != 0) { mPlayerActorMngr.entry(daPy_getPlayerActorClass()); } } else if (mType == TYPE_2) { if (mPlayerActorMngr.getActorP() != NULL) { if (cLib_calcTimer(&field_0x1538) == 0) { field_0x1538 = cLib_getRndValue(90, 90); field_0x153c ^= 1; } if (field_0x153c != 0) { mPlayerActorMngr.remove(); } } else { field_0x1538 = 0; field_0x153c = 0; } } if (daNpcT_chkTmpBit(0x55)) { // dSv_event_tmp_flag_c::T_0085 - Snowpeak mountain - Racing with Yeta mPlayerActorMngr.remove(); } if (mPlayerActorMngr.getActorP() != NULL) { mJntAnm.lookPlayer(0); if (mType != TYPE_4) { if (!chkActorInSight(mPlayerActorMngr.getActorP(), mAttnFovY, mCurAngle.y)) { mJntAnm.lookNone(0); } } if (!srchPlayerActor() && home.angle.y == mCurAngle.y) { mMode = 1; } } else { mJntAnm.lookNone(0); if (home.angle.y != mCurAngle.y) { if (field_0xe34 != 0) { if (step(home.angle.y, 15, 30, mpHIO->m.step_speed, 0)) { mMode = 1; } } else { setAngle(home.angle.y); mMode = 1; } attention_info.flags = 0; } else { srchPlayerActor(); } } if (mType == TYPE_4) { dComIfGs_offTmpBit(0xD02); } switch (mJntAnm.getMode()) { case daNpcT_JntAnm_c::LOOK_PLAYER: if (mType == TYPE_4) { dComIfGs_onTmpBit(0xD02); if (mMotionSeqMngr.getNo() != MOTION_WAIT_A) { mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0); } } break; case daNpcT_JntAnm_c::LOOK_NONE: if (mType == TYPE_4) { if (daNpcT_chkTmpBit(0x55)) { // dSv_event_tmp_flag_c::T_0085 - Snowpeak mountain - Racing with Yeta actor_p = (daTag_EvtArea_c*)mActorMngr[5].getActorP(); if (actor_p != NULL) { mJntAnm.lookActor(actor_p, -40.0f, 0); } } else if (dComIfGs_isTmpBit(0xE40)) { mJntAnm.lookPlayer(0); } else { actor_p = (daTag_EvtArea_c*)mActorMngr[5].getActorP(); if (actor_p != NULL) { mJntAnm.lookActor(actor_p, -40.0f, 0); if (dialogue() != 0) { mMode = 1; } } } } break; } } case 3: break; } return TRUE; } /* 80B5ABA8-80B5B260 0077A8 06B8+00 1/0 0/0 0/0 .text cook__11daNpc_ykM_cFPv */ BOOL daNpc_ykM_c::cook(void* param_1) { fopAc_ac_c* actor_p = NULL; daPy_py_c* player = daPy_getPlayerActorClass(); int waitTime = mpHIO->m.wait_time; BOOL bVar1 = FALSE; field_0x1508.set(0.0f, 200.0f, 450.0f); mDoMtx_stack_c::YrotS(home.angle.y); mDoMtx_stack_c::multVec(&field_0x1508, &field_0x1508); field_0x1508 += current.pos; switch (mMode) { case 0: case 1: if (!mStagger.checkStagger()) { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0); field_0x1538 = 0; field_0x153c = 1; mMode = 2; } // fallthrough case 2: { if (!daPy_py_c::checkNowWolf() && !checkItemGet(fpcNm_ITEM_TOMATO_PUREE, 1) && !checkItemGet(fpcNm_ITEM_TASTE, 1) && !daNpcT_chkEvtBit(10) /* dSv_event_flag_c::F_0006 - Snowpeak Ruins - First conversation with Yeto in kitchen */) { actor_p = mActorMngr[6].getActorP(); if (actor_p != NULL && ((daTag_EvtArea_c*)actor_p)->chkPointInArea(player->current.pos)) { mEvtNo = EVENT_MEETING_AGAIN; field_0xe33 = true; } } if (!mStagger.checkStagger()) { if (daNpcT_chkEvtBit(10) /* dSv_event_flag_c::F_0006 - Snowpeak Ruins - First conversation with Yeto in kitchen */) { if (!chkContinueAttnPlayer()) { mPlayerActorMngr.remove(); } if (!daNpcT_chkEvtBit(3) /* dSv_event_flag_c::TEST_003 - Snowpeak Ruins - Handed over tomato puree */) { bVar1 = TRUE; } } if (mPlayerActorMngr.getActorP() != NULL) { mJntAnm.lookPlayer(0); if (!chkActorInSight(mPlayerActorMngr.getActorP(), mAttnFovY, mCurAngle.y)) { mJntAnm.lookPos(&field_0x1508, 0); } if (!srchPlayerActor() && home.angle.y == mCurAngle.y) { mMode = 1; } } else { if (mMotionSeqMngr.getNo() == MOTION_TALK_E && mMotionSeqMngr.getStepNo() > 0) { mJntAnm.lookPos(&field_0x1508, 0); } if (cLib_calcTimer(&field_0x1538) == 0) { if (field_0x153c != 0) { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0); mJntAnm.lookPos(&field_0x1508, 0); field_0x1538 = cLib_getRndValue(waitTime / 2, waitTime); field_0x1538 <<= 1; } else { f32 rnd = cM_rnd(); if (bVar1 && 0.6f < rnd) { mJntAnm.lookAround2(0, 0x2D); } else { rnd = cM_rnd(); if (0.5f < rnd) { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_TALK_E, -1.0f, FALSE, 0); mJntAnm.lookNone(0); } else { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_TALK_D, -1.0f, FALSE, 0); mJntAnm.lookNone(0); } } field_0x1538 = waitTime; } field_0x153c ^= 1; } } switch (mJntAnm.getMode()) { case daNpcT_JntAnm_c::LOOK_NONE: break; case daNpcT_JntAnm_c::LOOK_POS: case daNpcT_JntAnm_c::LOOK_MODE_8: mSound.startCreatureVoiceLevel(Z2SE_YKM_V_HUMMING, -1); } } break; } case 3: break; } return TRUE; } /* 80B5B260-80B5BE08 007E60 0BA8+00 2/0 0/0 0/0 .text race__11daNpc_ykM_cFPv */ BOOL daNpc_ykM_c::race(void* param_1) { cXyz work; fopAc_ac_c* actors[2] = {this, daPy_getPlayerActorClass()}; s16 angleY; switch (mMode) { case 0: case 1: if (!mStagger.checkStagger()) { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_SB_WAIT, -1.0f, FALSE, 0); field_0x1576 = 1; mMode = 2; } // fallthrough case 2: if (daNpcT_chkTmpBit(0x54)) { daNpcT_judgeRace(mRoomPath, actors, &field_0x1558, 2, &field_0x1550); field_0x14fc.x = mRoomPath->m_points[mRoomPath->m_num - 1].m_position.x; field_0x14fc.y = mRoomPath->m_points[mRoomPath->m_num - 1].m_position.y; field_0x14fc.z = mRoomPath->m_points[mRoomPath->m_num - 1].m_position.z; angleY = cLib_targetAngleY(&field_0x14fc, &daPy_getPlayerActorClass()->current.pos); if (field_0x1560 < 0 || #if DEBUG field_0x1558.field_0x0 >= 0 && #endif (field_0x14fc.abs2(daPy_getPlayerActorClass()->current.pos) < 640000.0f && (angleY < -0x4000 || angleY > 0x4000))) { field_0x1560 = -1; mGndChk.SetPos(&daPy_getPlayerActorClass()->current.pos); if (dComIfG_Bgsp().GroundCross(&mGndChk) != -G_CM3D_F_INF) { if (field_0x1534 != -1) { if ((dTimer_c*)fpcM_SearchByID(field_0x1534) == dComIfG_getTimerPtr()) { if (dComIfG_getTimerPtr()->isStart()) { if (field_0x157c != 0) { mDoAud_subBgmStart(Z2BGM_SNOWBOARD_LOSE); dMeter2Info_setMeterString(0x539); } else { mDoAud_subBgmStart(Z2BGM_SNOWBOARD_WIN); dMeter2Info_setMeterString(0x538); } dComIfG_TimerEnd(5, -1); if (dComIfG_getTimerNowTimeMs() < dComIfGs_getRaceGameTime() || dComIfGs_getRaceGameTime() == 0) { dComIfGs_setRaceGameTime(dComIfG_getTimerNowTimeMs()); } } } } mEvtNo = EVENT_END_SNOWBOARDRACE; } } #if DEBUG else if (field_0x1558.field_0x0 < 0) { #else if (field_0x1560 >= 0 && field_0x1558.field_0x0 < 0) { #endif field_0x157c = 1; } } mJntAnm.lookNone(0); if (field_0x1585 != 0) { if (field_0x1576 != 0) { cLib_addCalc2(&speedF, 0.0f, 0.15f, 3.0f); if (speedF <= 0.15f) { field_0x1576 = 0; speedF = 0.0f; speed.setall(0.0f); } } else { mJntAnm.lookNone(0); } } else { if (field_0x157e != 0 && mAcch.ChkGroundHit()) { mMotionSeqMngr.setNo(MOTION_SB_JUMP_C, -1.0f, FALSE, 0); mSound.startCreatureSound(Z2SE_YM_SNOBO_LAND, 0, -1); field_0x157e = 0; } if (field_0x157e == 0) { while (true) { if (mPath.chkPassed1(current.pos, mPath.getNumPnts())) { if (u8(mPath.getArg0()) == 0) { mSound.startCreatureSound(Z2SE_YM_SNOBO_JUMP, 0, -1); mSound.startCreatureVoice(Z2SE_YM_V_SNOBO_JUMP, -1); field_0x157e = 1; } if (mPath.setNextIdx(mPath.getNumPnts()) != 0) { field_0x1585 = 1; mMotionSeqMngr.setNo(MOTION_SB_GOAL, -1.0f, FALSE, 0); } else { if (field_0x157e == 0) { continue; } if (!mStagger.checkStagger()) { mMotionSeqMngr.setNo(MOTION_SB_JUMP_A, -1.0f, FALSE, 0); } field_0x1514 = current.pos; field_0x1520 = mPath.getPntPos(mPath.getIdx()); current.angle.y = cLib_targetAngleY(&field_0x1514, &field_0x1520); int iVar3 = (int)((field_0x1520 - field_0x1514).absXZ() / speedF) + 1; speed.y = (field_0x1520.y - field_0x1514.y) + fabsf(gravity) * iVar3 * iVar3 * 0.5f; speed.y /= iVar3; } } else { work = mPath.getPntPos(mPath.getIdx()); } break; } } if (field_0x1585 == 0 && field_0x157e == 0) { angleY = cLib_targetAngleY(¤t.pos, &work); current.angle.y = angleY; cLib_addCalcAngleS2(&shape_angle.y, current.angle.y, 8, 0x100); mCurAngle.y = shape_angle.y; if (!mStagger.checkStagger() && (mMotionSeqMngr.getNo() != MOTION_SB_JUMP_C || mMotionSeqMngr.checkEndSequence())) { angleY -= mCurAngle.y; if (0.0f < cM_sht2d(angleY)) { if (4.0f < cM_sht2d(angleY)) { mMotionSeqMngr.setNo(MOTION_SB_TURNL, 24.0f, FALSE, 0); } else { mMotionSeqMngr.setNo(MOTION_SB_WAIT, 24.0f, FALSE, 0); } } else { if (cM_sht2d(angleY) < -4.0f) { mMotionSeqMngr.setNo(MOTION_SB_TURNR, 24.0f, FALSE, 0); } else { mMotionSeqMngr.setNo(MOTION_SB_WAIT, 24.0f, FALSE, 0); } } } angleY = -fopAcM_getPolygonAngle(mGndChk, current.angle.y + 0x4000); cLib_addCalcAngleS2(&mCurAngle.x, mGroundAngle, 6, 0x200); cLib_addCalcAngleS2(&mCurAngle.z, angleY, 6, 0x200); int iVar1 = field_0x1560 - field_0x1558.field_0x0; f32 fVar2 = mpHIO->m.slide_speed * cM_scos(mGroundAngle); if (mStagger.checkStagger()) { fVar2 *= 0.0f; } else { if (chkTouchPlayer() && field_0x1540 == 0) { s16 sVar2 = fopAcM_searchPlayerAngleY(this); f32 fVar3 = daPy_getPlayerActorClass()->speedF; s16 iVar3 = cM_deg2s(mpHIO->m.fly_angle); daPy_getPlayerActorClass()->setThrowDamage(sVar2, fVar3 * cM_scos(iVar3), fVar3 * cM_ssin(iVar3), 0, 0, 0); field_0x1540 = 8; } iVar1 += mpHIO->m.competition_prm_a; iVar1 = cLib_minMaxLimit(iVar1, 0, mpHIO->m.competition_prm_b); if (iVar1 > 0) { fVar2 *= abs(iVar1) * 0.1f * mpHIO->m.competition_prm_c + 1.0f; } } cLib_chaseF(&speedF, fVar2, mpHIO->m.slide_acceleration); mSound.startCreatureSoundLevel(Z2SE_YM_SNOBO_RIDE, speedF, -1); mSound.startCreatureVoiceLevel(Z2SE_YM_V_SNOBO_RIDING, -1); } } attention_info.flags = 0; break; case 3: break; } dTres_c::setNpcYkmPosition(getBitTRB() & 0xFF, ¤t.pos); return TRUE; } /* 80B5BE08-80B5C0C4 008A08 02BC+00 3/0 0/0 0/0 .text talk__11daNpc_ykM_cFPv */ BOOL daNpc_ykM_c::talk(void* param_1) { switch (mMode) { case 0: case 1: if (!mStagger.checkStagger()) { initTalk(mFlowNodeNo, NULL); field_0x157f = 0; if (mType == TYPE_COOK) { mFaceMotionSeqMngr.setNo(FACE_NONE, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(MOTION_WAIT_A, -1.0f, FALSE, 0); if (daNpcT_chkEvtBit(10) /* dSv_event_flag_c::F_0006 - Snowpeak Ruins - First conversation with Yeto in kitchen */ && !chkContinueAttnPlayer()) { field_0x157f = 1; } } mMode = 2; } // fallthrough case 2: { if (!mStagger.checkStagger()) { if (mTwilight || mPlayerAngle == mCurAngle.y || mType == TYPE_COOK || mType == TYPE_2) { if (talkProc(NULL, FALSE, NULL, FALSE)) { field_0x1583 = 0; int iVar1; int eventId = mFlow.getEventId(&iVar1); switch (eventId) { case 13: mEvtNo = EVENT_START_SNOWBOARDRACE; evtChange(); break; default: if (mFlow.checkEndFlow()) { mPlayerActorMngr.entry(daPy_getPlayerActorClass()); dComIfGp_event_reset(); mMode = 3; } break; } } mJntAnm.lookPlayer(0); if (mTwilight || field_0x157f != 0) { mJntAnm.lookNone(0); } } else { mJntAnm.lookPlayer(0); step(mPlayerAngle, 15, 30, mpHIO->m.step_speed, 0); } } break; } case 3: break; } return FALSE; } #ifdef DEBUG BOOL daNpc_ykM_c::test(void* param_1) { int rv = FALSE; switch (mMode) { case 0: case 1: speedF = 0.0f; speed.setall(0.0f); mMode = 2; // fallthrough case 2: mFaceMotionSeqMngr.setNo(mpHIO->m.common.face_expression, -1.0f, FALSE, 0); mMotionSeqMngr.setNo(mpHIO->m.common.motion, -1.0f, FALSE, 0); mJntAnm.lookNone(0); attention_info.flags = 0; break; case 3: break; } return rv; } #endif /* 80B5C0C4-80B5C0E4 008CC4 0020+00 1/0 0/0 0/0 .text daNpc_ykM_Create__FPv */ static int daNpc_ykM_Create(void* i_this) { return ((daNpc_ykM_c*)i_this)->create(); } /* 80B5C0E4-80B5C104 008CE4 0020+00 1/0 0/0 0/0 .text daNpc_ykM_Delete__FPv */ static int daNpc_ykM_Delete(void* i_this) { return ((daNpc_ykM_c*)i_this)->Delete(); } /* 80B5C104-80B5C124 008D04 0020+00 1/0 0/0 0/0 .text daNpc_ykM_Execute__FPv */ static int daNpc_ykM_Execute(void* i_this) { return ((daNpc_ykM_c*)i_this)->Execute(); } /* 80B5C124-80B5C144 008D24 0020+00 1/0 0/0 0/0 .text daNpc_ykM_Draw__FPv */ static int daNpc_ykM_Draw(void* i_this) { return ((daNpc_ykM_c*)i_this)->Draw(); } /* 80B5C144-80B5C14C 008D44 0008+00 1/0 0/0 0/0 .text daNpc_ykM_IsDelete__FPv */ static int daNpc_ykM_IsDelete(void* a_this) { return 1; } AUDIO_INSTANCES; /* 80B5EB4C-80B5EB6C -00001 0020+00 1/0 0/0 0/0 .data daNpc_ykM_MethodTable */ static actor_method_class daNpc_ykM_MethodTable = { (process_method_func)daNpc_ykM_Create, (process_method_func)daNpc_ykM_Delete, (process_method_func)daNpc_ykM_Execute, (process_method_func)daNpc_ykM_IsDelete, (process_method_func)daNpc_ykM_Draw, }; /* 80B5EB6C-80B5EB9C -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_YKM */ extern actor_process_profile_definition g_profile_NPC_YKM = { fpcLy_CURRENT_e, // mLayerID 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_NPC_YKM, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(daNpc_ykM_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 380, // mPriority &daNpc_ykM_MethodTable, // sub_method 0x00040107, // mStatus fopAc_NPC_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType };