mirror of https://github.com/zeldaret/tp.git
2604 lines
78 KiB
C++
2604 lines
78 KiB
C++
/**
|
||
* @file d_a_npc_grz.cpp
|
||
*
|
||
*/
|
||
|
||
#include "d/dolzel_rel.h"
|
||
|
||
#include "d/actor/d_a_npc_grz.h"
|
||
#include "d/actor/d_a_obj_grz_rock.h"
|
||
#include "Z2AudioLib/Z2Instances.h"
|
||
|
||
enum grZ_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x06 */ BCK_GRZ_F_MUKIDASHI = 0x6,
|
||
/* 0x07 */ BCK_GRZ_F_TALK_A,
|
||
/* 0x08 */ BCK_GRZ_FH_TALK_A,
|
||
/* 0x09 */ BCK_GRZ_STEP,
|
||
/* 0x0A */ BCK_GRZ_TALK_A,
|
||
/* 0x0B */ BCK_GRZ_WAIT_A,
|
||
|
||
/* BMDR */
|
||
/* 0x0E */ BMDR_GRZ = 0xE,
|
||
|
||
/* BTK */
|
||
/* 0x11 */ BTK_GRZ = 0x11,
|
||
|
||
/* BTP */
|
||
/* 0x14 */ BTP_GRZ = 0x14,
|
||
};
|
||
|
||
enum grZ1_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x05 */ BCK_GRZ_F_GETUP = 0x5,
|
||
/* 0x06 */ BCK_GRZ_F_LIEDOWN,
|
||
/* 0x07 */ BCK_GRZ_F_WEAK_TALK,
|
||
/* 0x08 */ BCK_GRZ_F_WEAK_TURN,
|
||
/* 0x09 */ BCK_GRZ_F_WEAK_WAIT,
|
||
/* 0x0A */ BCK_GRZ_GETUP,
|
||
/* 0x0B */ BCK_GRZ_LIEDOWN,
|
||
/* 0x0C */ BCK_GRZ_WEAK_STEP,
|
||
/* 0x0D */ BCK_GRZ_WEAK_TURN,
|
||
/* 0x0E */ BCK_GRZ_WEAK_WAIT,
|
||
|
||
/* BTK */
|
||
/* 0x11 */ BTK_GRZ_GETUP = 0x11,
|
||
|
||
/* BTP */
|
||
/* 0x14 */ BTP_GRZ_F_GETUP = 0x14,
|
||
/* 0x15 */ BTP_GRZ_F_LIEDOWN,
|
||
/* 0x16 */ BTP_GRZ_F_WEAK_TALK,
|
||
/* 0x17 */ BTP_GRZ_F_WEAK_TURN,
|
||
/* 0x18 */ BTP_GRZ_F_WEAK_WAIT,
|
||
};
|
||
|
||
enum grZ2_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x05 */ BCK_GRZ_F_LAUGH = 0x5,
|
||
/* 0x06 */ BCK_GRZ_F_SNIFF,
|
||
/* 0x07 */ BCK_GRZ_FH_LAUGH,
|
||
/* 0x08 */ BCK_GRZ_LAUGH,
|
||
/* 0x09 */ BCK_GRZ_SNIFF,
|
||
/* 0x0A */ BCK_GRZ_UNAZUKI,
|
||
/* 0x0B */ BCK_GRZ_WAIT_B,
|
||
/* 0x0C */ BCK_GRZ_WALK_A,
|
||
|
||
/* BTK */
|
||
/* 0x0F */ BTK_GRZ_SNIFF = 0xF,
|
||
|
||
/* BTP */
|
||
/* 0x12 */ BTP_GRZ_F_LAUGH = 0x12,
|
||
/* 0x13 */ BTP_GRZ_F_SNIFF,
|
||
/* 0x14 */ BTP_GRZ_FH_LAUGH,
|
||
};
|
||
|
||
enum grZ3_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x4 */ BCK_GRZ_F_PUNCH = 0x4,
|
||
/* 0x5 */ BCK_GRZ_F_PUNCHING,
|
||
/* 0x6 */ BCK_GRZ_F_RECOVER,
|
||
/* 0x7 */ BCK_GRZ_PUNCH,
|
||
/* 0x8 */ BCK_GRZ_PUNCHING,
|
||
/* 0x9 */ BCK_GRZ_RECOVER,
|
||
/* 0xA */ BCK_GRZ_ROTATE,
|
||
/* 0xB */ BCK_GRZ_TO_STONE_NORMAL,
|
||
|
||
/* BTP */
|
||
/* 0xE */ BTP_GRZ_F_RECOVER = 0xE,
|
||
};
|
||
|
||
enum grZD1_RES_File_ID {
|
||
/* EVT */
|
||
/* 0x3 */ EVT_GRZD1_EVENT_LIST = 0x3,
|
||
};
|
||
|
||
enum grZD3_RES_File_ID {
|
||
/* EVT */
|
||
/* 0x3 */ EVT_GRZD3_EVENT_LIST = 0x3,
|
||
};
|
||
|
||
enum RES_Names {
|
||
/* 0x0 */ GRZ,
|
||
/* 0x1 */ GRZ1,
|
||
/* 0x2 */ GRZ2,
|
||
/* 0x3 */ GRZ3,
|
||
/* 0x4 */ GRZD1,
|
||
/* 0x5 */ GRZD3,
|
||
};
|
||
|
||
enum Joint {
|
||
/* 0x00 */ JNT_CENTER,
|
||
/* 0x01 */ JNT_BACKBONE1,
|
||
/* 0x02 */ JNT_BACKBONE2,
|
||
/* 0x03 */ JNT_NECK,
|
||
/* 0x04 */ JNT_HEAD,
|
||
/* 0x05 */ JNT_CHIN,
|
||
/* 0x06 */ JNT_LIP2,
|
||
/* 0x07 */ JNT_LIP1,
|
||
/* 0x08 */ JNT_MAYUL,
|
||
/* 0x09 */ JNT_MAYUR,
|
||
/* 0x0A */ JNT_MOUTH,
|
||
/* 0x0B */ JNT_SHOULDERL,
|
||
/* 0x0C */ JNT_ARML1,
|
||
/* 0x0D */ JNT_ARML2,
|
||
/* 0x0E */ JNT_HANDL,
|
||
/* 0x0F */ JNT_FINGERL1,
|
||
/* 0x10 */ JNT_THAMBL,
|
||
/* 0x11 */ JNT_SHOULDERR,
|
||
/* 0x12 */ JNT_ARMR1,
|
||
/* 0x13 */ JNT_ARMR2,
|
||
/* 0x14 */ JNT_HANDR,
|
||
/* 0x15 */ JNT_FINGERR1,
|
||
/* 0x16 */ JNT_THAMBR,
|
||
/* 0x17 */ JNT_WAIST,
|
||
/* 0x18 */ JNT_LEGL1,
|
||
/* 0x19 */ JNT_LEGL2,
|
||
/* 0x1A */ JNT_FOOTL,
|
||
/* 0x1B */ JNT_LEGR1,
|
||
/* 0x1C */ JNT_LEGR2,
|
||
/* 0x1D */ JNT_FOOTR,
|
||
/* 0x1E */ JNT_SKIRT,
|
||
};
|
||
|
||
enum Event {
|
||
/* 0x0 */ EVT_NONE,
|
||
/* 0x1 */ EVT_TALK_STAND,
|
||
/* 0x2 */ EVT_STONE_SMASH,
|
||
/* 0x3 */ EVT_STONE_SMASH_SKIP,
|
||
};
|
||
|
||
enum Animation {
|
||
/* 0x00 */ ANM_NONE,
|
||
/* 0x01 */ ANM_F_MUKIDASHI,
|
||
/* 0x02 */ ANM_F_RECOVER,
|
||
/* 0x03 */ ANM_FH_TALK_A,
|
||
/* 0x04 */ ANM_F_TALK_A,
|
||
/* 0x05 */ ANM_LIEDOWN,
|
||
/* 0x06 */ ANM_GETUP,
|
||
/* 0x07 */ ANM_F_WEAK_WAIT,
|
||
/* 0x08 */ ANM_F_WEAK_TURN,
|
||
/* 0x09 */ ANM_F_WEAK_TALK,
|
||
/* 0x0A */ ANM_F_SNIFF,
|
||
/* 0x0B */ ANM_F_LAUGH,
|
||
/* 0x0C */ ANM_FH_LAUGH,
|
||
/* 0x0D */ ANM_F_PUNCHING,
|
||
/* 0x0E */ ANM_F_PUNCH,
|
||
/* 0x0F */ ANM_WAIT_A,
|
||
/* 0x10 */ ANM_TALK_A,
|
||
/* 0x11 */ ANM_TO_STONE_NORMAL,
|
||
/* 0x12 */ ANM_UNK_18,
|
||
/* 0x13 */ ANM_RECOVER,
|
||
/* 0x14 */ ANM_ROTATE,
|
||
/* 0x15 */ ANM_STEP,
|
||
/* 0x16 */ ANM_LIEDOWN_2,
|
||
/* 0x17 */ ANM_GETUP_2,
|
||
/* 0x18 */ ANM_WEAK_WAIT,
|
||
/* 0x19 */ ANM_WEAK_TURN,
|
||
/* 0x1A */ ANM_WEAK_STEP,
|
||
/* 0x1B */ ANM_WAIT_B,
|
||
/* 0x1C */ ANM_SNIFF,
|
||
/* 0x1D */ ANM_LAUGH,
|
||
/* 0x1E */ ANM_UNAZUKI,
|
||
/* 0x1F */ ANM_WALK_A,
|
||
/* 0x20 */ ANM_PUNCHING,
|
||
/* 0x21 */ ANM_PUNCH,
|
||
};
|
||
|
||
enum Expression_BTP {
|
||
/* 0x0 */ EXPR_BTP_GRZ,
|
||
/* 0x1 */ EXPR_BTP_F_LIEDOWN,
|
||
/* 0x2 */ EXPR_BTP_F_GETUP,
|
||
/* 0x3 */ EXPR_BTP_F_WEAK_WAIT,
|
||
/* 0x4 */ EXPR_BTP_F_WEAK_TURN,
|
||
/* 0x5 */ EXPR_BTP_F_WEAK_TALK,
|
||
/* 0x6 */ EXPR_BTP_F_SNIFF,
|
||
/* 0x7 */ EXPR_BTP_F_LAUGH,
|
||
/* 0x8 */ EXPR_BTP_FH_LAUGH,
|
||
/* 0x9 */ EXPR_BTP_F_RECOVER,
|
||
};
|
||
|
||
enum Expression {
|
||
/* 0x0 */ EXPR_TALK_A,
|
||
/* 0x1 */ EXPR_WEAK_TALK,
|
||
/* 0x2 */ EXPR_SNIFF,
|
||
/* 0x3 */ EXPR_LAUGH,
|
||
/* 0x4 */ EXPR_H_TALK_A,
|
||
/* 0x5 */ EXPR_PUNCHING,
|
||
/* 0x6 */ EXPR_PUNCH,
|
||
/* 0x7 */ EXPR_LIEDOWN,
|
||
/* 0x8 */ EXPR_GETUP,
|
||
/* 0x9 */ EXPR_WEAK_WAIT,
|
||
/* 0xA */ EXPR_NONE,
|
||
};
|
||
|
||
enum Motion {
|
||
/* 0x0 */ MOT_WAIT_A,
|
||
/* 0x1 */ MOT_WEAK_WAIT,
|
||
/* 0x2 */ MOT_WEAK_TURN,
|
||
/* 0x3 */ MOT_WAIT_B,
|
||
/* 0x4 */ MOT_SNIFF,
|
||
/* 0x5 */ MOT_LAUGH,
|
||
/* 0x6 */ MOT_PUNCHING,
|
||
/* 0x7 */ MOT_PUNCH,
|
||
/* 0x8 */ MOT_TO_STONE_NORMAL,
|
||
/* 0x9 */ MOT_UNAZUKI,
|
||
/* 0xA */ MOT_WALK_A,
|
||
/* 0xB */ MOT_LIEDOWN,
|
||
/* 0xC */ MOT_GETUP,
|
||
/* 0xD */ MOT_STEP,
|
||
/* 0xE */ MOT_WEAK_STEP,
|
||
};
|
||
|
||
enum Type {
|
||
/* 0x0 */ TYPE_YELIA,
|
||
/* 0x1 */ TYPE_LIEDOWN,
|
||
/* 0x2 */ TYPE_SMASH,
|
||
/* 0x3 */ TYPE_3,
|
||
};
|
||
|
||
enum Event_Cut_Nums {
|
||
/* 0x7 */ NUM_EVT_CUTS_e = 0x7,
|
||
};
|
||
|
||
/* 809EFC54-809EFC58 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */
|
||
static daNpc_Grz_Param_c l_HIO;
|
||
|
||
/* 809EF6C0-809EF6C8 000020 0008+00 1/1 0/0 0/0 .data l_bmdGetParamList */
|
||
static int l_bmdGetParamList[1][2] = {
|
||
{BMDR_GRZ, GRZ},
|
||
};
|
||
|
||
/* 809EF6C8-809EF7D8 000028 0110+00 1/2 0/0 0/0 .data l_bckGetParamList */
|
||
static daNpc_GetParam1 l_bckGetParamList[34] = {
|
||
{-1, GRZ},
|
||
{BCK_GRZ_F_MUKIDASHI, GRZ},
|
||
{BCK_GRZ_F_RECOVER, GRZ3},
|
||
{BCK_GRZ_FH_TALK_A, GRZ},
|
||
{BCK_GRZ_F_TALK_A, GRZ},
|
||
{BCK_GRZ_LIEDOWN, GRZ1},
|
||
{BCK_GRZ_GETUP, GRZ1},
|
||
{BCK_GRZ_F_WEAK_WAIT, GRZ1},
|
||
{BCK_GRZ_F_WEAK_TURN, GRZ1},
|
||
{BCK_GRZ_F_WEAK_TALK, GRZ1},
|
||
{BCK_GRZ_F_SNIFF, GRZ2},
|
||
{BCK_GRZ_F_LAUGH, GRZ2},
|
||
{BCK_GRZ_FH_LAUGH, GRZ2},
|
||
{BCK_GRZ_F_PUNCHING, GRZ3},
|
||
{BCK_GRZ_F_PUNCH, GRZ3},
|
||
{BCK_GRZ_WAIT_A, GRZ},
|
||
{BCK_GRZ_TALK_A, GRZ},
|
||
{BCK_GRZ_TO_STONE_NORMAL, GRZ3},
|
||
{-1, GRZ},
|
||
{BCK_GRZ_RECOVER, GRZ3},
|
||
{BCK_GRZ_ROTATE, GRZ3},
|
||
{BCK_GRZ_STEP, GRZ},
|
||
{BCK_GRZ_LIEDOWN, GRZ1},
|
||
{BCK_GRZ_GETUP, GRZ1},
|
||
{BCK_GRZ_WEAK_WAIT, GRZ1},
|
||
{BCK_GRZ_WEAK_TURN, GRZ1},
|
||
{BCK_GRZ_WEAK_STEP, GRZ1},
|
||
{BCK_GRZ_WAIT_B, GRZ2},
|
||
{BCK_GRZ_SNIFF, GRZ2},
|
||
{BCK_GRZ_LAUGH, GRZ2},
|
||
{BCK_GRZ_UNAZUKI, GRZ2},
|
||
{BCK_GRZ_WALK_A, GRZ2},
|
||
{BCK_GRZ_PUNCHING, GRZ3},
|
||
{BCK_GRZ_PUNCH, GRZ3},
|
||
};
|
||
|
||
/* 809EF7D8-809EF828 000138 0050+00 1/1 0/0 0/0 .data l_btpGetParamList */
|
||
static daNpc_GetParam1 l_btpGetParamList[10] = {
|
||
{BTP_GRZ, GRZ},
|
||
{BTP_GRZ_F_LIEDOWN, GRZ1},
|
||
{BTP_GRZ_F_GETUP, GRZ1},
|
||
{BTP_GRZ_F_WEAK_WAIT, GRZ1},
|
||
{BTP_GRZ_F_WEAK_TURN, GRZ1},
|
||
{BTP_GRZ_F_WEAK_TALK, GRZ1},
|
||
{BTP_GRZ_F_SNIFF, GRZ2},
|
||
{BTP_GRZ_F_LAUGH, GRZ2},
|
||
{BTP_GRZ_FH_LAUGH, GRZ2},
|
||
{BTP_GRZ_F_RECOVER, GRZ3},
|
||
};
|
||
|
||
/* 809EF828-809EF840 000188 0018+00 1/2 0/0 0/0 .data l_btkGetParamList */
|
||
static daNpc_GetParam1 l_btkGetParamList[3] = {
|
||
{BTK_GRZ, GRZ},
|
||
{BTK_GRZ_GETUP, GRZ1},
|
||
{BTK_GRZ_SNIFF, GRZ2},
|
||
};
|
||
|
||
/* 809EF840-809EF860 0001A0 0020+00 0/2 0/0 0/0 .data l_evtGetParamList */
|
||
static daNpc_GetParam1 l_evtGetParamList[4] = {
|
||
{0, GRZ},
|
||
{1, GRZD1},
|
||
{2, GRZD3},
|
||
{3, GRZD3},
|
||
};
|
||
|
||
/* 809EF860-809EF870 -00001 0010+00 1/3 0/0 0/0 .data l_evtNames */
|
||
static char* l_evtNames[4] = {
|
||
NULL,
|
||
"TALK_STAND",
|
||
"STONE_SMASH",
|
||
"STONE_SMASH_SKIP",
|
||
};
|
||
|
||
/* 809EF870-809EF884 0001D0 0014+00 1/0 0/0 0/0 .data l_loadRes_YELIA */
|
||
static int l_loadRes_YELIA[5] = {
|
||
GRZ, GRZ2, -1, -1, -1,
|
||
};
|
||
|
||
/* 809EF884-809EF898 0001E4 0014+00 1/0 0/0 0/0 .data l_loadRes_LieDown */
|
||
static int l_loadRes_LieDown[5] = {
|
||
GRZ, GRZ1, GRZD1, -1, -1,
|
||
};
|
||
|
||
/* 809EF898-809EF8AC 0001F8 0014+00 1/0 0/0 0/0 .data l_loadRes_Smash */
|
||
static int l_loadRes_Smash[5] = {
|
||
GRZ, GRZ2, GRZ3, GRZD3, -1,
|
||
};
|
||
|
||
/* 809EF8AC-809EF8C0 00020C 0014+00 1/0 0/0 0/0 .data l_loadRes_GRZa */
|
||
static int l_loadRes_GRZa[5] = {
|
||
GRZ, GRZ2, -1, -1, -1,
|
||
};
|
||
|
||
/* 809EF8C0-809EF8D4 000220 0014+00 1/0 0/0 0/0 .data l_loadRes_GRZ0 */
|
||
static int l_loadRes_GRZ0[5] = {
|
||
GRZ, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809EF8D4-809EF8E8 -00001 0014+00 2/2 0/0 0/0 .data l_loadRes_list */
|
||
static int* l_loadRes_list[5] = {
|
||
l_loadRes_YELIA, l_loadRes_LieDown, l_loadRes_Smash,
|
||
l_loadRes_GRZa, l_loadRes_GRZ0,
|
||
};
|
||
|
||
/* 809EF8E8-809EF900 -00001 0018+00 6/9 0/0 0/0 .data l_resNames */
|
||
static char* l_resNames[6] = {
|
||
"grZ",
|
||
"grZ1",
|
||
"grZ2",
|
||
"grZ3",
|
||
"grZD1",
|
||
"grZD3",
|
||
};
|
||
|
||
/* 809EF900-809EF904 -00001 0004+00 0/1 0/0 0/0 .data l_myName */
|
||
static char* l_myName = "grZ";
|
||
|
||
/* 809EF904-809EF920 -00001 001C+00 0/1 0/0 0/0 .data mEvtCutNameList__11daNpc_Grz_c */
|
||
char* daNpc_Grz_c::mEvtCutNameList[7] = {
|
||
"",
|
||
"WAIT",
|
||
"REBIRTH",
|
||
"TALK_STAND",
|
||
"GO_OUT",
|
||
"STONE_SMASH",
|
||
"STONE_SMASH_SKIP",
|
||
};
|
||
|
||
/* 809EF968-809EF9BC 0002C8 0054+00 0/2 0/0 0/0 .data mEvtCutList__11daNpc_Grz_c */
|
||
daNpc_Grz_c::cutFunc daNpc_Grz_c::mEvtCutList[7] = {
|
||
NULL,
|
||
&daNpc_Grz_c::doWaitCut,
|
||
&daNpc_Grz_c::doRebirthCut,
|
||
&daNpc_Grz_c::doTalkStandCut,
|
||
&daNpc_Grz_c::doGoOutCut,
|
||
&daNpc_Grz_c::doStoneSmashCut,
|
||
&daNpc_Grz_c::doStoneSmashSkipCut,
|
||
};
|
||
|
||
/* 809E840C-809E8658 0000EC 024C+00 1/1 0/0 0/0 .text __ct__11daNpc_Grz_cFv */
|
||
daNpc_Grz_c::daNpc_Grz_c() {}
|
||
|
||
/* 809E88C0-809E8BA0 0005A0 02E0+00 1/0 0/0 0/0 .text __dt__11daNpc_Grz_cFv */
|
||
daNpc_Grz_c::~daNpc_Grz_c() {
|
||
for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) {
|
||
dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]);
|
||
}
|
||
|
||
if (heap != NULL) {
|
||
mpMorf->stopZelAnime();
|
||
}
|
||
}
|
||
|
||
/* 809EF1F4-809EF274 000000 0080+00 19/19 0/0 0/0 .rodata m__17daNpc_Grz_Param_c */
|
||
daNpc_Grz_HIOParam const daNpc_Grz_Param_c::m = {
|
||
130.0f,
|
||
-3.0f,
|
||
1.0f,
|
||
1200.0f,
|
||
255.0f,
|
||
300.0f,
|
||
35.0f,
|
||
110.0f,
|
||
0.0f,
|
||
0.0f,
|
||
10.0f,
|
||
-10.0f,
|
||
30.0f,
|
||
-10.0f,
|
||
45.0f,
|
||
-45.0f,
|
||
0.6f,
|
||
12.0f,
|
||
7,
|
||
6,
|
||
9,
|
||
6,
|
||
80.0f,
|
||
500.0f,
|
||
300.0f,
|
||
-300.0f,
|
||
60,
|
||
8,
|
||
0,
|
||
0,
|
||
0,
|
||
false,
|
||
false,
|
||
60,
|
||
0xFFD8,
|
||
0xFFD8,
|
||
0xFFD8,
|
||
11.0f,
|
||
35.0f,
|
||
500.0f,
|
||
};
|
||
|
||
/* 809E8BA0-809E8E68 000880 02C8+00 1/1 0/0 0/0 .text create__11daNpc_Grz_cFv */
|
||
cPhs__Step daNpc_Grz_c::create() {
|
||
fopAcM_SetupActor(this, daNpc_Grz_c);
|
||
|
||
mType = getTypeFromParam();
|
||
mSwNo = fopAcM_GetParam(this) >> 16;
|
||
|
||
if (home.angle.x != 0xFFFF) {
|
||
mMsgNo = home.angle.x;
|
||
} else {
|
||
mMsgNo = -1;
|
||
}
|
||
|
||
if (isDelete()) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
int iVar1 = 0;
|
||
int i = 0;
|
||
for (; l_loadRes_list[mType][i] >= 0; i++) {
|
||
cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]);
|
||
if (phase == cPhs_ERROR_e || phase == cPhs_UNK3_e) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
if (phase == cPhs_COMPLEATE_e) {
|
||
iVar1++;
|
||
}
|
||
}
|
||
|
||
if (iVar1 == i) {
|
||
static int const heapSize[5] = {
|
||
0x3AE0, 0x3AF0, 0x3AE0, 0x3AF0, 0x0,
|
||
};
|
||
|
||
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
||
fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f);
|
||
|
||
mSound.init(¤t.pos, &eyePos, 3, 1);
|
||
|
||
mAcchCir.SetWall(daNpc_Grz_Param_c::m.common.width, daNpc_Grz_Param_c::m.common.knee_length);
|
||
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(daNpc_Grz_Param_c::m.common.weight, 0, this);
|
||
resetCol();
|
||
mAcch.CrrPos(dComIfG_Bgsp());
|
||
mGndChk = mAcch.m_gnd;
|
||
mGroundH = mAcch.GetGroundH();
|
||
|
||
setEnvTevColor();
|
||
setRoomNo();
|
||
reset();
|
||
Execute();
|
||
|
||
return cPhs_COMPLEATE_e;
|
||
}
|
||
|
||
return cPhs_INIT_e;
|
||
}
|
||
|
||
/* 809E8E68-809E90F0 000B48 0288+00 1/1 0/0 0/0 .text CreateHeap__11daNpc_Grz_cFv */
|
||
int daNpc_Grz_c::CreateHeap() {
|
||
J3DModelData* mdlData_p = NULL;
|
||
|
||
if (l_bmdGetParamList[0][0] >= 0) {
|
||
mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[0][1]], l_bmdGetParamList[0][0]);
|
||
}
|
||
|
||
JUT_ASSERT(556, 0 != mdlData_p);
|
||
|
||
mpMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11020284);
|
||
if (mpMorf != NULL && mpMorf->getModel() == NULL) {
|
||
mpMorf->stopZelAnime();
|
||
mpMorf = NULL;
|
||
}
|
||
|
||
if (mpMorf == NULL) {
|
||
return 0;
|
||
}
|
||
|
||
J3DModel* model = mpMorf->getModel();
|
||
for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
|
||
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
|
||
}
|
||
model->setUserArea((uintptr_t)this);
|
||
|
||
mpMatAnm = new daNpcF_MatAnm_c();
|
||
if (mpMatAnm == NULL) {
|
||
return 0;
|
||
}
|
||
|
||
if (!setExpressionAnm(ANM_F_MUKIDASHI, FALSE)) {
|
||
return 0;
|
||
}
|
||
|
||
setMotionAnm(ANM_WAIT_A, 0.0f);
|
||
return 1;
|
||
}
|
||
|
||
/* 809E92AC-809E92E0 000F8C 0034+00 1/1 0/0 0/0 .text Delete__11daNpc_Grz_cFv */
|
||
int daNpc_Grz_c::Delete() {
|
||
this->~daNpc_Grz_c();
|
||
return 1;
|
||
}
|
||
|
||
/* 809E92E0-809E9324 000FC0 0044+00 2/2 0/0 0/0 .text Execute__11daNpc_Grz_cFv */
|
||
int daNpc_Grz_c::Execute() {
|
||
int rv = execute();
|
||
setPrtcl();
|
||
return rv;
|
||
}
|
||
|
||
/* 809E9324-809E9568 001004 0244+00 1/1 0/0 0/0 .text Draw__11daNpc_Grz_cFv */
|
||
int daNpc_Grz_c::Draw() {
|
||
J3DModel* model = mpMorf->getModel();
|
||
J3DModelData* mdlData_p = mpMorf->getModel()->getModelData();
|
||
|
||
if (checkHide()) {
|
||
return 1;
|
||
}
|
||
|
||
g_env_light.settingTevStruct(0, ¤t.pos, &tevStr);
|
||
g_env_light.setLightTevColorType_MAJI(model, &tevStr);
|
||
|
||
for (u16 i = 0; i < mdlData_p->getMaterialNum(); i++) {
|
||
J3DMaterial* matNode_p = mdlData_p->getMaterialNodePointer(i);
|
||
J3DGXColorS10* color = matNode_p->getTevColor(0);
|
||
|
||
if (i != 1) {
|
||
color->r = mColor.r;
|
||
color->g = mColor.g;
|
||
color->b = mColor.b;
|
||
} else {
|
||
matNode_p->setMaterialAnm(mpMatAnm);
|
||
}
|
||
}
|
||
|
||
if (drawDbgInfo() == 0) {
|
||
if ((mAnmFlags & ANM_PLAY_BTP) != 0) {
|
||
mBtpAnm.entry(mdlData_p);
|
||
}
|
||
|
||
if ((mAnmFlags & ANM_PLAY_BTK) != 0) {
|
||
mBtkAnm.entry(mdlData_p);
|
||
}
|
||
|
||
if ((mAnmFlags & ANM_PLAY_BRK) != 0) {
|
||
mBrkAnm.entry(mdlData_p);
|
||
}
|
||
|
||
mpMorf->entryDL();
|
||
|
||
if ((mAnmFlags & ANM_PLAY_BTP) != 0) {
|
||
mBtpAnm.remove(mdlData_p);
|
||
}
|
||
|
||
if ((mAnmFlags & ANM_PLAY_BTK) != 0) {
|
||
mBtkAnm.remove(mdlData_p);
|
||
}
|
||
|
||
if ((mAnmFlags & ANM_PLAY_BRK) != 0) {
|
||
mBrkAnm.remove(mdlData_p);
|
||
}
|
||
|
||
mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, daNpc_Grz_Param_c::m.common.real_shadow_size,
|
||
20.0f, current.pos.y, mGroundH, mGndChk, &tevStr,
|
||
0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
|
||
drawOtherMdls();
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809E9568-809E979C 001248 0234+00 1/1 0/0 0/0 .text ctrlJoint__11daNpc_Grz_cFP8J3DJointP8J3DModel */
|
||
int daNpc_Grz_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
|
||
int jntNo = i_joint->getJntNo();
|
||
int i_jointList[3] = {JNT_BACKBONE1, JNT_NECK, JNT_HEAD};
|
||
|
||
if (jntNo == JNT_CENTER) {
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_BACKBONE1));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[0]);
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_NECK));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[1]);
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HEAD));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[2]);
|
||
}
|
||
|
||
mDoMtx_stack_c::copy(i_model->getAnmMtx(jntNo));
|
||
|
||
switch (jntNo) {
|
||
case JNT_BACKBONE1:
|
||
case JNT_NECK:
|
||
case JNT_HEAD:
|
||
setLookatMtx(jntNo, i_jointList, daNpc_Grz_Param_c::m.common.neck_rotation_ratio);
|
||
break;
|
||
}
|
||
|
||
if (jntNo == JNT_BACKBONE1) {
|
||
mDoMtx_stack_c::YrotM(-field_0x908[0].z);
|
||
mDoMtx_stack_c::ZrotM(field_0x908[0].x);
|
||
} else if (jntNo == JNT_HEAD) {
|
||
mDoMtx_stack_c::YrotM(-field_0x908[2].z);
|
||
mDoMtx_stack_c::ZrotM(field_0x908[2].x);
|
||
}
|
||
|
||
i_model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
||
MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
||
|
||
if ((jntNo == JNT_HEAD || jntNo == JNT_MOUTH) && (mAnmFlags & ANM_PLAY_BCK) != 0) {
|
||
J3DAnmTransform* anm = mBckAnm.getBckAnm();
|
||
mBckAnm.changeBckOnly(mpMorf->getAnm());
|
||
mpMorf->changeAnm(anm);
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809E979C-809E97BC 00147C 0020+00 1/1 0/0 0/0 .text createHeapCallBack__11daNpc_Grz_cFP10fopAc_ac_c */
|
||
int daNpc_Grz_c::createHeapCallBack(fopAc_ac_c* a_this) {
|
||
return static_cast<daNpc_Grz_c*>(a_this)->CreateHeap();
|
||
}
|
||
|
||
/* 809E97BC-809E9808 00149C 004C+00 1/1 0/0 0/0 .text ctrlJointCallBack__11daNpc_Grz_cFP8J3DJointi */
|
||
int daNpc_Grz_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) {
|
||
if (param_2 == 0) {
|
||
J3DModel* model = j3dSys.getModel();
|
||
daNpc_Grz_c* i_this = (daNpc_Grz_c*)model->getUserArea();
|
||
|
||
if (i_this != NULL) {
|
||
i_this->ctrlJoint(i_joint, model);
|
||
}
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809E9808-809E9954 0014E8 014C+00 1/0 0/0 0/0 .text setParam__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::setParam() {
|
||
actionFunc action = mNextAction;
|
||
u32 flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
|
||
selectAction();
|
||
|
||
if (!mTwilight && daPy_py_c::checkNowWolf()) {
|
||
flags = 0;
|
||
}
|
||
|
||
if (mNextAction != action) {
|
||
for (int i = 4; i < 4; i++) {
|
||
mActorMngrs[i].initialize();
|
||
}
|
||
}
|
||
|
||
field_0x1a64 = 0;
|
||
field_0x1a68 = 0;
|
||
attention_info.distances[fopAc_attn_LOCK_e] = 67;
|
||
attention_info.distances[fopAc_attn_TALK_e] = 67;
|
||
attention_info.distances[fopAc_attn_SPEAK_e] = 66;
|
||
|
||
switch (mType & 0xFF) {
|
||
case TYPE_SMASH:
|
||
if (daPy_py_c::checkNowWolf()) {
|
||
attention_info.flags = 0;
|
||
} else {
|
||
attention_info.flags = flags;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
attention_info.flags = flags;
|
||
break;
|
||
}
|
||
|
||
scale.set(daNpc_Grz_Param_c::m.common.scale, daNpc_Grz_Param_c::m.common.scale, daNpc_Grz_Param_c::m.common.scale);
|
||
mAcchCir.SetWallR(daNpc_Grz_Param_c::m.common.width);
|
||
mAcchCir.SetWallH(daNpc_Grz_Param_c::m.common.knee_length);
|
||
gravity = daNpc_Grz_Param_c::m.common.gravity;
|
||
}
|
||
|
||
/* 809E9954-809E9AD4 001634 0180+00 1/0 0/0 0/0 .text main__11daNpc_Grz_cFv */
|
||
BOOL daNpc_Grz_c::main() {
|
||
if (!doEvent()) {
|
||
doNormalAction(1);
|
||
}
|
||
|
||
if (checkHide()) {
|
||
attention_info.flags = 0;
|
||
}
|
||
|
||
if (!daNpc_Grz_Param_c::m.common.debug_mode_ON) {
|
||
if (!dComIfGp_event_runCheck() || mOrderNewEvt && dComIfGp_getEvent().isOrderOK()) {
|
||
if (mOrderEvtNo != EVT_NONE) {
|
||
eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]);
|
||
}
|
||
|
||
orderEvent(mOrderSpeakEvt, l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], 0xFFFF, 40, 0xFF, 1);
|
||
}
|
||
}
|
||
|
||
if (field_0x9ee) {
|
||
mExpressionMorfOverride = 0.0f;
|
||
mMotionMorfOverride = 0.0f;
|
||
field_0x9ee = false;
|
||
}
|
||
|
||
playExpression();
|
||
playMotion();
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809E9AD4-809E9BB4 0017B4 00E0+00 1/0 0/0 0/0 .text ctrlBtk__11daNpc_Grz_cFv */
|
||
BOOL daNpc_Grz_c::ctrlBtk() {
|
||
if (mpMatAnm != NULL) {
|
||
J3DAnmTextureSRTKey* btk = NULL;
|
||
|
||
if (l_btkGetParamList[0].fileIdx >= 0) {
|
||
btk = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx);
|
||
}
|
||
|
||
if (btk == mBtkAnm.getBtkAnm()) {
|
||
mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.02f * -1.0f);
|
||
mpMatAnm->setNowOffsetY(cM_ssin(mEyeAngle.x) * 0.02f);
|
||
mpMatAnm->onEyeMoveFlag();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
mpMatAnm->offEyeMoveFlag();
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
/* 809E9BB4-809EA1DC 001894 0628+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::setAttnPos() {
|
||
static cXyz eyeOffset(20.0f, 40.0f, 0.0f);
|
||
|
||
cXyz sp80, sp8c, sp98, spa4;
|
||
f32 attention_offset = daNpc_Grz_Param_c::m.common.attention_offset;
|
||
f32 fVar2 = 0.0f;
|
||
f32 fVar3 = 0.0f;
|
||
|
||
mDoMtx_stack_c::YrotS(field_0x990);
|
||
cLib_addCalc2(&field_0x984[0], 0.0f, 0.1, 125.0f);
|
||
cLib_addCalc2(&field_0x984[2], 0.0f, 0.1f, 125.0f);
|
||
|
||
for (int i = 0; i < 3; i++) {
|
||
sp98.set(0.0f, 0.0f, field_0x984[i] * cM_ssin(field_0x992));
|
||
mDoMtx_stack_c::multVec(&sp98, &spa4);
|
||
field_0x908[i].x = -spa4.z;
|
||
field_0x908[i].z = -spa4.x;
|
||
}
|
||
|
||
cLib_chaseS(&field_0x992, 0, 0x555);
|
||
|
||
if (mLookMode == 1) {
|
||
for (int i = 0; i < 3; i++) {
|
||
mLookatAngle[i].setall(0);
|
||
}
|
||
}
|
||
|
||
setMtx();
|
||
lookat();
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HEAD));
|
||
mDoMtx_stack_c::multVecZero(&mHeadPos);
|
||
mDoMtx_stack_c::multVec(&eyeOffset, &eyePos);
|
||
eyeOffset.x = 0.0f;
|
||
mDoMtx_stack_c::multVec(&eyeOffset, &sp98);
|
||
mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp98);
|
||
mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp98);
|
||
|
||
cXyz* attnPos = mLookat.getAttnPos();
|
||
if (attnPos != NULL) {
|
||
sp8c = *attnPos - eyePos;
|
||
mEyeAngle.y = -(mLookatAngle[2].y + mCurAngle.y);
|
||
mEyeAngle.y += cM_atan2s(sp8c.x, sp8c.z);
|
||
mEyeAngle.x = -cM_atan2s(sp8c.y, sp8c.absXZ());
|
||
} else {
|
||
mEyeAngle.y = 0;
|
||
mEyeAngle.x = 0;
|
||
}
|
||
|
||
if (field_0x1a84 == 2) {
|
||
fVar3 = 100.0f;
|
||
fVar2 = 120.0f;
|
||
sp8c.set(0.0f, 0.0f, 100.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&sp8c, &sp80);
|
||
attention_info.position.set(sp80.x, sp80.y + attention_offset + 120.0f, sp80.z);
|
||
} else if (mMotion == MOT_TO_STONE_NORMAL) {
|
||
attention_info.position = current.pos;
|
||
attention_info.position.y += 200.0f;
|
||
} else {
|
||
fVar3 = 110.0f;
|
||
fVar2 = 50.0f;
|
||
sp8c.set(0.0f, 0.0f, 0.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&sp8c, &sp80);
|
||
attention_info.position.set(mHeadPos.x, mHeadPos.y + attention_offset, mHeadPos.z);
|
||
|
||
if (mType == TYPE_SMASH && !dComIfGp_event_runCheck()) {
|
||
fVar3 = 35.0f;
|
||
sp8c.set(0.0f, 0.0f, 35.0f);
|
||
mDoMtx_stack_c::multVec(&sp8c, &sp80);
|
||
}
|
||
}
|
||
|
||
mCcStts.Move();
|
||
|
||
if (!mHide && !mTwilight) {
|
||
if (!mIsDamaged) {
|
||
mCyl1.SetTgType(0xD8FBFDFF);
|
||
mCyl1.SetTgSPrm(0x1F);
|
||
mCyl1.OnTgNoHitMark();
|
||
} else {
|
||
mCyl1.SetTgType(0);
|
||
mCyl1.SetTgSPrm(0);
|
||
}
|
||
|
||
mCyl1.SetC(sp80);
|
||
mCyl1.SetH(daNpc_Grz_Param_c::m.common.height + fVar2);
|
||
mCyl1.SetR(daNpc_Grz_Param_c::m.common.width + fVar3);
|
||
dComIfG_Ccsp()->Set(&mCyl1);
|
||
}
|
||
|
||
mCyl1.ClrTgHit();
|
||
setCollisionPunch();
|
||
}
|
||
|
||
/* 809EA1DC-809EA734 001EBC 0558+00 1/1 0/0 0/0 .text setCollisionPunch__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::setCollisionPunch() {
|
||
if (mType == TYPE_SMASH) {
|
||
f32 frame = mpMorf->getFrame();
|
||
|
||
if (mAnm == ANM_PUNCHING && ((frame >= 15.0f && frame < 16.0f) || (frame >= 35.0f && frame < 36.0f))) {
|
||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||
f32 fVar2 = (player->current.pos - current.pos).absXZ();
|
||
|
||
if (fVar2 < 500.0f) {
|
||
dComIfGp_getVibration().StartShock(6, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
} else if (fVar2 < 700.0f) {
|
||
dComIfGp_getVibration().StartShock(5, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
} else if (fVar2 < 900.0f) {
|
||
dComIfGp_getVibration().StartShock(4, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
} else if (fVar2 < 1100.0f) {
|
||
dComIfGp_getVibration().StartShock(3, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
} else if (fVar2 < 1300.0f) {
|
||
dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
} else if (fVar2 < 1500.0f) {
|
||
dComIfGp_getVibration().StartShock(1, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
}
|
||
}
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
if (!mHide) {
|
||
if (mAnm == ANM_PUNCHING && ((frame >= 10.0f && frame < 18.0f && i >= 2) || ((frame < 2.0f || frame >= 29.0f) && i < 2))) {
|
||
cXyz sp60;
|
||
mSphs[i].OnAtSetBit();
|
||
J3DModel* model = mpMorf->getModel();
|
||
|
||
static int l_attack_jnt[4] = {
|
||
JNT_ARML2, JNT_HANDL, JNT_ARMR2, JNT_HANDR,
|
||
};
|
||
|
||
mDoMtx_stack_c::copy(model->getAnmMtx(l_attack_jnt[i]));
|
||
mDoMtx_stack_c::scaleM(scale);
|
||
mDoMtx_stack_c::multVecZero(&sp60);
|
||
sp60.y += 10.0f;
|
||
mSphs[i].SetC(sp60);
|
||
mSphs[i].SetR(85.0f);
|
||
dComIfG_Ccsp()->Set(&mSphs[i]);
|
||
} else {
|
||
mSphs[i].OffAtSetBit();
|
||
}
|
||
}
|
||
|
||
mSphs[i].ClrAtHit();
|
||
}
|
||
|
||
if (mAnm == ANM_PUNCHING && !dComIfGp_event_runCheck()) {
|
||
cXyz sp6c(0.0f, 0.0f, 245.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&sp6c, &sp6c);
|
||
mCyl2.SetTgType(0xD8FBFDFF);
|
||
mCyl2.SetTgSPrm(0x1F);
|
||
mCyl2.OnTgNoHitMark();
|
||
mCyl2.SetC(sp6c);
|
||
f32 heightOffset = 50.0f;
|
||
mCyl2.SetH(daNpc_Grz_Param_c::m.common.height + heightOffset);
|
||
f32 widthOffset = 15.0f;
|
||
mCyl2.SetR(daNpc_Grz_Param_c::m.common.width + widthOffset);
|
||
dComIfG_Ccsp()->Set(&mCyl2);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 809EA734-809EAA08 002414 02D4+00 2/0 0/0 0/0 .text setExpressionAnm__11daNpc_Grz_cFib */
|
||
bool daNpc_Grz_c::setExpressionAnm(int i_index, bool i_modify) {
|
||
J3DAnmTransform* anm = NULL;
|
||
int i_attr = J3DFrameCtrl::EMode_NONE;
|
||
|
||
mAnmFlags &= ~ANM_EXPRESSION_FLAGS;
|
||
|
||
if (l_bckGetParamList[i_index].fileIdx >= 0) {
|
||
anm = getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[i_index].arcIdx], l_bckGetParamList[i_index].fileIdx);
|
||
}
|
||
bool bVar1 = false;
|
||
|
||
switch (i_index) {
|
||
case ANM_NONE:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_GRZ);
|
||
break;
|
||
|
||
case ANM_F_MUKIDASHI:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_GRZ);
|
||
i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
break;
|
||
|
||
case ANM_F_RECOVER:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_RECOVER);
|
||
break;
|
||
|
||
case ANM_FH_TALK_A:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_GRZ);
|
||
i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
break;
|
||
|
||
case ANM_F_TALK_A:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_GRZ);
|
||
break;
|
||
|
||
case ANM_LIEDOWN:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_LIEDOWN);
|
||
i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
break;
|
||
|
||
case ANM_GETUP:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_GETUP);
|
||
break;
|
||
|
||
case ANM_F_WEAK_WAIT:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_WEAK_WAIT);
|
||
i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
break;
|
||
|
||
case ANM_F_WEAK_TURN:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_WEAK_TURN);
|
||
break;
|
||
|
||
case ANM_F_WEAK_TALK:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_WEAK_TALK);
|
||
break;
|
||
|
||
case ANM_F_SNIFF:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_SNIFF);
|
||
break;
|
||
|
||
case ANM_F_LAUGH:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_F_LAUGH);
|
||
break;
|
||
|
||
case ANM_FH_LAUGH:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_FH_LAUGH);
|
||
i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
break;
|
||
|
||
case ANM_F_PUNCHING:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_GRZ);
|
||
i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
break;
|
||
|
||
case ANM_F_PUNCH:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_GRZ);
|
||
break;
|
||
|
||
default:
|
||
anm = NULL;
|
||
break;
|
||
}
|
||
|
||
if (!bVar1) {
|
||
return false;
|
||
}
|
||
|
||
if (anm == NULL) {
|
||
return true;
|
||
}
|
||
|
||
if (setBckAnm(anm, 1.0f, i_attr, 0, -1, i_modify)) {
|
||
mAnmFlags |= ANM_PLAY_BCK | ANM_PAUSE_BCK;
|
||
mExpressionLoops = 0;
|
||
return true;
|
||
}
|
||
|
||
OS_REPORT("%s: 表情Bckアニメーションの登録に失敗しました!\n", __FILE__);
|
||
return false;
|
||
}
|
||
|
||
/* 809EAA08-809EAB34 0026E8 012C+00 1/0 0/0 0/0 .text setExpressionBtp__11daNpc_Grz_cFi */
|
||
bool daNpc_Grz_c::setExpressionBtp(int i_index) {
|
||
J3DAnmTexPattern* btp = NULL;
|
||
int i_attr = J3DFrameCtrl::EMode_NONE;
|
||
|
||
mAnmFlags &= 0xFFFFF57F;
|
||
|
||
if (l_btpGetParamList[i_index].fileIdx >= 0) {
|
||
btp = getTexPtrnAnmP(l_resNames[l_btpGetParamList[i_index].arcIdx], l_btpGetParamList[i_index].fileIdx);
|
||
}
|
||
|
||
switch (i_index) {
|
||
case EXPR_BTP_GRZ:
|
||
case EXPR_BTP_F_LIEDOWN:
|
||
case EXPR_BTP_F_WEAK_WAIT:
|
||
case EXPR_BTP_FH_LAUGH:
|
||
i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
break;
|
||
|
||
case EXPR_BTP_F_GETUP:
|
||
case EXPR_BTP_F_RECOVER:
|
||
break;
|
||
|
||
case EXPR_BTP_F_WEAK_TURN:
|
||
case EXPR_BTP_F_WEAK_TALK:
|
||
case EXPR_BTP_F_SNIFF:
|
||
case EXPR_BTP_F_LAUGH:
|
||
break;
|
||
|
||
default:
|
||
btp = NULL;
|
||
break;
|
||
}
|
||
|
||
if (btp == NULL) {
|
||
return true;
|
||
}
|
||
|
||
if (setBtpAnm(btp, mpMorf->getModel()->getModelData(), 1.0f, i_attr)) {
|
||
mAnmFlags |= ANM_PLAY_BTP | ANM_PAUSE_BTP;
|
||
|
||
if (i_index == 0) {
|
||
mAnmFlags |= ANM_FLAG_800;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
OS_REPORT("%s: 表情Btpアニメーションの登録に失敗しました!\n", "d_a_npc_grz.cpp");
|
||
return false;
|
||
}
|
||
|
||
/* 809EAB34-809EAB60 002814 002C+00 1/0 0/0 0/0 .text setExpression__11daNpc_Grz_cFif */
|
||
void daNpc_Grz_c::setExpression(int i_expression, f32 i_morf) {
|
||
if (i_expression >= 0 && i_expression < 0xB) {
|
||
mExpression = i_expression;
|
||
mExpressionMorfOverride = i_morf;
|
||
mExpressionPrevPhase = -1;
|
||
mExpressionPhase = 0;
|
||
}
|
||
}
|
||
|
||
/* 809EAB60-809EAD4C 002840 01EC+00 2/0 0/0 0/0 .text setMotionAnm__11daNpc_Grz_cFif */
|
||
void daNpc_Grz_c::setMotionAnm(int i_index, f32 i_morf) {
|
||
J3DAnmTransformKey* anm = NULL;
|
||
J3DAnmTextureSRTKey* btk = NULL;
|
||
int index = 0;
|
||
int i_attr = J3DFrameCtrl::EMode_LOOP;
|
||
int i_attr2 = J3DFrameCtrl::EMode_LOOP;
|
||
|
||
mAnmFlags &= ~ANM_MOTION_FLAGS;
|
||
|
||
if (l_bckGetParamList[i_index].fileIdx >= 0) {
|
||
anm = getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[i_index].arcIdx], l_bckGetParamList[i_index].fileIdx);
|
||
}
|
||
|
||
mAnm = i_index;
|
||
|
||
switch (i_index) {
|
||
case ANM_WAIT_A:
|
||
case ANM_UNK_18:
|
||
case ANM_ROTATE:
|
||
case ANM_STEP:
|
||
case ANM_LIEDOWN_2:
|
||
case ANM_WEAK_WAIT:
|
||
case ANM_WAIT_B:
|
||
case ANM_WALK_A:
|
||
case ANM_PUNCHING:
|
||
break;
|
||
|
||
case ANM_TALK_A:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_TO_STONE_NORMAL:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_RECOVER:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_GETUP_2:
|
||
index = 1;
|
||
i_attr2 = J3DFrameCtrl::EMode_NONE;
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_WEAK_TURN:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_WEAK_STEP:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_SNIFF:
|
||
index = 2;
|
||
i_attr2 = J3DFrameCtrl::EMode_NONE;
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_LAUGH:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_UNAZUKI:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
case ANM_PUNCH:
|
||
i_attr = J3DFrameCtrl::EMode_NONE;
|
||
break;
|
||
|
||
default:
|
||
anm = NULL;
|
||
btk = NULL;
|
||
break;
|
||
}
|
||
|
||
if (l_btkGetParamList[index].fileIdx >= 0) {
|
||
btk = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[index].arcIdx], l_btkGetParamList[index].fileIdx);
|
||
}
|
||
|
||
if (btk != NULL) {
|
||
if (setBtkAnm(btk, mpMorf->getModel()->getModelData(), 1.0f, i_attr2)) {
|
||
mAnmFlags |= ANM_PLAY_BTK | ANM_PAUSE_BTK;
|
||
}
|
||
}
|
||
|
||
if (anm != NULL && setMcaMorfAnm(anm, 1.0f, i_morf, i_attr, 0, -1)) {
|
||
mAnmFlags |= ANM_PLAY_MORF | ANM_PAUSE_MORF;
|
||
mMotionLoops = 0;
|
||
}
|
||
}
|
||
|
||
/* 809EAD4C-809EAD90 002A2C 0044+00 1/0 0/0 0/0 .text setMotion__11daNpc_Grz_cFifi */
|
||
void daNpc_Grz_c::setMotion(int i_motion, f32 i_morf, int param_3) {
|
||
s16 motion = i_motion;
|
||
if ((param_3 != 0 || mMotion != motion) && i_motion >= 0 && i_motion < 0xF) {
|
||
mMotion = motion;
|
||
mMotionMorfOverride = i_morf;
|
||
mMotionPrevPhase = -1;
|
||
mMotionPhase = 0;
|
||
}
|
||
}
|
||
|
||
/* 809EAD90-809EAD98 002A70 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_Grz_cFv */
|
||
int daNpc_Grz_c::drawDbgInfo() {
|
||
return 0;
|
||
}
|
||
|
||
/* 809EAD98-809EAD9C 002A78 0004+00 1/0 0/0 0/0 .text drawOtherMdls__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::drawOtherMdls() {
|
||
/* empty function */
|
||
}
|
||
|
||
/* 809EAD9C-809EADE8 002A7C 004C+00 1/1 0/0 0/0 .text getTypeFromParam__11daNpc_Grz_cFv */
|
||
int daNpc_Grz_c::getTypeFromParam() {
|
||
switch (fopAcM_GetParam(this) & 0xFF) {
|
||
case 0:
|
||
return TYPE_YELIA;
|
||
|
||
case 1:
|
||
return TYPE_LIEDOWN;
|
||
|
||
case 2:
|
||
return TYPE_SMASH;
|
||
|
||
default:
|
||
return TYPE_3;
|
||
}
|
||
}
|
||
|
||
/* 809EADE8-809EAE88 002AC8 00A0+00 1/1 0/0 0/0 .text isDelete__11daNpc_Grz_cFv */
|
||
BOOL daNpc_Grz_c::isDelete() {
|
||
if (mType == TYPE_3 || mType == TYPE_LIEDOWN) {
|
||
return FALSE;
|
||
}
|
||
|
||
if (mType == TYPE_YELIA) {
|
||
if (daNpcF_chkEvtBit(267) && // dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear
|
||
!daNpcF_chkEvtBit(287)) { // dSv_event_flag_c::F_287 - Kakariko Village - Handed wood carving to Ilia
|
||
return FALSE;
|
||
}
|
||
} else if (mType == TYPE_SMASH) {
|
||
if (!dComIfGs_isSwitch(mSwNo, fopAcM_GetRoomNo(this))) {
|
||
return FALSE;
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809EAE88-809EB154 002B68 02CC+00 1/1 0/0 0/0 .text reset__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::reset() {
|
||
initialize();
|
||
mpMatAnm->initialize();
|
||
mPath.initialize();
|
||
|
||
if (mType == TYPE_SMASH) {
|
||
if (mPath.setPathInfo(getPathNoFromParam(), fopAcM_GetRoomNo(this), 0) != 0) {
|
||
mPath.setRange(100.0f);
|
||
}
|
||
}
|
||
|
||
mLookat.initialize();
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
mActorMngrs[i].initialize();
|
||
}
|
||
|
||
mNextAction = NULL;
|
||
mAction = NULL;
|
||
field_0x1a64 = 0;
|
||
field_0x1a68 = 0;
|
||
field_0x1a6c = 0;
|
||
field_0x1a70 = 0;
|
||
mLookMode = -1;
|
||
mMode = 0;
|
||
current.pos = home.pos;
|
||
old.pos = current.pos;
|
||
current.angle.set(0, home.angle.y, 0);
|
||
old.angle = current.angle;
|
||
shape_angle = current.angle;
|
||
mCurAngle = current.angle;
|
||
mOldAngle = mCurAngle;
|
||
speedF = 0.0f;
|
||
speed.setall(0.0f);
|
||
|
||
for (int i = 0; i < 1; i++) {
|
||
mPrtclMngr[i].mPaPo.init(&mAcch, 0.0f, 0.0f);
|
||
}
|
||
|
||
if (mType == TYPE_LIEDOWN) {
|
||
field_0x1a84 = 2;
|
||
mMsgNo = 208;
|
||
mColor.r = daNpc_Grz_Param_c::m.color_r;
|
||
mColor.g = daNpc_Grz_Param_c::m.color_g;
|
||
mColor.b = daNpc_Grz_Param_c::m.color_b;
|
||
setExpression(EXPR_LIEDOWN, -1.0f);
|
||
setMotion(MOT_LIEDOWN, 0.0f, 0);
|
||
} else {
|
||
field_0x1a84 = 0;
|
||
mColor.r = 0;
|
||
mColor.g = 0;
|
||
mColor.b = 0;
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_A, -1.0f, 0);
|
||
}
|
||
|
||
mTimer = 0;
|
||
field_0x1a88 = 0;
|
||
field_0x1a9c = 0;
|
||
|
||
for (int i = 0; i < 3; i++) {
|
||
field_0x1aa0[i] = -1;
|
||
}
|
||
|
||
field_0x9ee = true;
|
||
}
|
||
|
||
/* 809EB154-809EB234 002E34 00E0+00 1/1 0/0 0/0 .text resetCol__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::resetCol() {
|
||
mCyl1.Set(mCcDCyl);
|
||
mCyl1.SetStts(&mCcStts);
|
||
mCyl1.SetTgHitCallback(tgHitCallBack);
|
||
mCyl2.Set(mCcDCyl);
|
||
mCyl2.SetStts(&mCcStts);
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
mSphs[i].Set(mCcDSph);
|
||
mSphs[i].SetStts(&mCcStts);
|
||
mSphs[i].SetAtSe(dCcD_SE_HARD_BODY);
|
||
mSphs[i].SetAtSpl((dCcG_At_Spl)1);
|
||
mSphs[i].SetAtType(AT_TYPE_800);
|
||
mSphs[i].OnAtSPrmBit(12);
|
||
mSphs[i].SetAtAtp(1);
|
||
mSphs[i].OnTgNoConHit();
|
||
mSphs[i].OffCoSetBit();
|
||
}
|
||
}
|
||
|
||
/* 809EB234-809EB5C0 002F14 038C+00 1/1 0/0 0/0 .text playExpression__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::playExpression() {
|
||
daNpcF_anmPlayData dat0a = {ANM_F_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat0b= {ANM_FH_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat0[2] = {&dat0a, &dat0b};
|
||
daNpcF_anmPlayData dat1a = {ANM_F_WEAK_TALK, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat1b = {ANM_F_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b};
|
||
daNpcF_anmPlayData dat2a = {ANM_F_SNIFF, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat2b = {ANM_FH_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b};
|
||
daNpcF_anmPlayData dat3a = {ANM_F_LAUGH, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat3b = {ANM_NONE, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b};
|
||
daNpcF_anmPlayData dat4 = {ANM_FH_TALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat4[1] = {&dat4};
|
||
daNpcF_anmPlayData dat5 = {ANM_F_PUNCHING, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat5[1] = {&dat5};
|
||
daNpcF_anmPlayData dat6a = {ANM_F_PUNCH, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat6b = {ANM_NONE, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b};
|
||
daNpcF_anmPlayData dat7 = {ANM_LIEDOWN, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat7[1] = {&dat7};
|
||
daNpcF_anmPlayData dat8 = {ANM_GETUP, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData* pDat8[1] = {&dat8};
|
||
daNpcF_anmPlayData dat9 = {ANM_F_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat9[1] = {&dat9};
|
||
daNpcF_anmPlayData dat10 = {ANM_NONE, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat10[1] = {&dat10};
|
||
|
||
daNpcF_anmPlayData** ppDat[11] = {
|
||
pDat0,
|
||
pDat1,
|
||
pDat2,
|
||
pDat3,
|
||
pDat4,
|
||
pDat5,
|
||
pDat6,
|
||
pDat7,
|
||
pDat8,
|
||
pDat9,
|
||
pDat10,
|
||
};
|
||
|
||
if (mExpression >= 0 && mExpression < 0xB) {
|
||
playExpressionAnm(ppDat);
|
||
}
|
||
}
|
||
|
||
/* 809EB5C0-809EBA3C 0032A0 047C+00 1/1 0/0 0/0 .text playMotion__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::playMotion() {
|
||
daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat0[1] = {&dat0};
|
||
daNpcF_anmPlayData dat1 = {ANM_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat1[1] = {&dat1};
|
||
daNpcF_anmPlayData dat2a = {ANM_WEAK_TURN, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat2b = {ANM_WEAK_WAIT, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b};
|
||
daNpcF_anmPlayData dat3 = {ANM_WAIT_B, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat3[1] = {&dat3};
|
||
daNpcF_anmPlayData dat4a = {ANM_SNIFF, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat4b = {ANM_WAIT_B, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b};
|
||
daNpcF_anmPlayData dat5a = {ANM_LAUGH, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat5b = {ANM_WAIT_B, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b};
|
||
daNpcF_anmPlayData dat6 = {ANM_PUNCHING, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat6[1] = {&dat6};
|
||
daNpcF_anmPlayData dat7a = {ANM_PUNCH, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat7b = {ANM_WAIT_A, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b};
|
||
daNpcF_anmPlayData dat8a = {ANM_TO_STONE_NORMAL, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat8b = {ANM_ROTATE, 6.0f, 0};
|
||
daNpcF_anmPlayData* pDat8[2] = {&dat8a, &dat8b};
|
||
daNpcF_anmPlayData dat9a = {ANM_UNAZUKI, daNpc_Grz_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat9b = {ANM_WAIT_A, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b};
|
||
daNpcF_anmPlayData dat10 = {ANM_WALK_A, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat10[1] = {&dat10};
|
||
daNpcF_anmPlayData dat11 = {ANM_LIEDOWN_2, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat11[1] = {&dat11};
|
||
daNpcF_anmPlayData dat12 = {ANM_GETUP_2, daNpc_Grz_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat12[1] = {&dat12};
|
||
daNpcF_anmPlayData dat13 = {ANM_STEP, 6.0f, 0};
|
||
daNpcF_anmPlayData* pDat13[1] = {&dat13};
|
||
daNpcF_anmPlayData dat14 = {ANM_WEAK_STEP, 6.0f, 0};
|
||
daNpcF_anmPlayData* pDat14[1] = {&dat14};
|
||
|
||
daNpcF_anmPlayData** ppDat[15] = {
|
||
pDat0,
|
||
pDat1,
|
||
pDat2,
|
||
pDat3,
|
||
pDat4,
|
||
pDat5,
|
||
pDat6,
|
||
pDat7,
|
||
pDat8,
|
||
pDat9,
|
||
pDat10,
|
||
pDat11,
|
||
pDat12,
|
||
pDat13,
|
||
pDat14,
|
||
};
|
||
|
||
if (mMotion >= 0 && mMotion < 0xF) {
|
||
playMotionAnm(ppDat);
|
||
}
|
||
}
|
||
|
||
/* 809EBA3C-809EBA68 00371C 002C+00 1/1 0/0 0/0 .text chkAction__11daNpc_Grz_cFM11daNpc_Grz_cFPCvPvPv_i */
|
||
BOOL daNpc_Grz_c::chkAction(actionFunc action) {
|
||
return mAction == action;
|
||
}
|
||
|
||
/* 809EBA68-809EBB10 003748 00A8+00 2/2 0/0 0/0 .text setAction__11daNpc_Grz_cFM11daNpc_Grz_cFPCvPvPv_i */
|
||
BOOL daNpc_Grz_c::setAction(actionFunc action) {
|
||
mMode = 3;
|
||
|
||
if (mAction) {
|
||
(this->*mAction)(NULL);
|
||
}
|
||
|
||
mMode = 0;
|
||
mAction = action;
|
||
|
||
if (mAction) {
|
||
(this->*mAction)(NULL);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809EBB10-809EBC04 0037F0 00F4+00 1/1 0/0 0/0 .text selectAction__11daNpc_Grz_cFv */
|
||
BOOL daNpc_Grz_c::selectAction() {
|
||
mNextAction = NULL;
|
||
|
||
if (daNpc_Grz_Param_c::m.common.debug_mode_ON) {
|
||
mNextAction = &daNpc_Grz_c::test;
|
||
} else {
|
||
switch (mType) {
|
||
case TYPE_LIEDOWN:
|
||
if (field_0x1a84 > 0) {
|
||
mNextAction = &daNpc_Grz_c::lieDown;
|
||
} else {
|
||
mNextAction = &daNpc_Grz_c::waitWeak;
|
||
}
|
||
break;
|
||
|
||
case TYPE_SMASH:
|
||
mNextAction = &daNpc_Grz_c::waitSmash;
|
||
break;
|
||
|
||
default:
|
||
mNextAction = &daNpc_Grz_c::wait;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809EBC04-809EBD18 0038E4 0114+00 1/1 0/0 0/0 .text doNormalAction__11daNpc_Grz_cFi */
|
||
void daNpc_Grz_c::doNormalAction(int param_1) {
|
||
if (param_1 != 0 && hitChk2(&mCyl1, TRUE, FALSE)) {
|
||
int damage_time;
|
||
|
||
if (mCutType == 8) {
|
||
damage_time = 20;
|
||
} else {
|
||
damage_time = daNpc_Grz_Param_c::m.common.damage_time;
|
||
}
|
||
|
||
setDamage(damage_time, 10, 0);
|
||
setLookMode(LOOK_RESET);
|
||
} else if (mIsDamaged && mDamageTimer == 0) {
|
||
mMode = 0;
|
||
mIsDamaged = false;
|
||
}
|
||
|
||
mOrderEvtNo = EVT_NONE;
|
||
|
||
if (mNextAction) {
|
||
if (mAction == mNextAction) {
|
||
(this->*mAction)(NULL);
|
||
} else {
|
||
setAction(mNextAction);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 809EBD18-809EC0CC 0039F8 03B4+00 1/1 0/0 0/0 .text doEvent__11daNpc_Grz_cFv */
|
||
BOOL daNpc_Grz_c::doEvent() {
|
||
BOOL rv = FALSE;
|
||
|
||
if (dComIfGp_event_runCheck() != FALSE) {
|
||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||
|
||
if (eventInfo.checkCommandTalk() || eventInfo.checkCommandDemoAccrpt()) {
|
||
mOrderNewEvt = false;
|
||
}
|
||
|
||
if (eventInfo.checkCommandTalk()) {
|
||
if (field_0x1a84 > 0) {
|
||
mOrderEvtNo = EVT_TALK_STAND;
|
||
changeEvent(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx], l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], 1, 0xFFFF);
|
||
} else if (chkAction(&daNpc_Grz_c::talk)) {
|
||
(this->*mAction)(NULL);
|
||
} else if (dComIfGp_event_chkTalkXY() == FALSE || dComIfGp_evmng_ChkPresentEnd()) {
|
||
setAction(&daNpc_Grz_c::talk);
|
||
}
|
||
|
||
rv = TRUE;
|
||
} else {
|
||
int staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
|
||
|
||
if (staffId != -1) {
|
||
mStaffID = staffId;
|
||
int evtCutNo = eventManager.getMyActIdx(staffId, mEvtCutNameList, 7, 0, 0);
|
||
|
||
JUT_ASSERT(2262, (0 <= evtCutNo) && (evtCutNo < NUM_EVT_CUTS_e));
|
||
JUT_ASSERT(2263, 0 != mEvtCutList[evtCutNo]);
|
||
|
||
if ((this->*mEvtCutList[evtCutNo])(staffId)) {
|
||
eventManager.cutEnd(staffId);
|
||
}
|
||
|
||
rv = TRUE;
|
||
}
|
||
|
||
if (eventInfo.checkCommandDemoAccrpt()) {
|
||
if (mEventIdx != -1 && eventManager.endCheck(mEventIdx)) {
|
||
switch (mOrderEvtNo) {
|
||
case EVT_STONE_SMASH:
|
||
dComIfGp_event_reset();
|
||
mOrderEvtNo = EVT_NONE;
|
||
mEventIdx = -1;
|
||
dComIfGs_onSwitch(mSwNo, fopAcM_GetRoomNo(this));
|
||
fopAcM_delete(this);
|
||
break;
|
||
|
||
default:
|
||
dComIfGp_event_reset();
|
||
mOrderEvtNo = EVT_NONE;
|
||
mEventIdx = -1;
|
||
break;
|
||
}
|
||
} else {
|
||
switch (mOrderEvtNo) {
|
||
case EVT_STONE_SMASH:
|
||
setSkipZev(2, 3);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
int msgTimer = mMsgTimer;
|
||
int i_expression, i_motion;
|
||
|
||
if (ctrlMsgAnm(i_expression, i_motion, this, FALSE)) {
|
||
if (!field_0x9eb) {
|
||
setExpression(i_expression, -1.0f);
|
||
setMotion(i_motion, -1.0f, 0);
|
||
}
|
||
} else if (msgTimer != 0 && !field_0x9eb) {
|
||
setExpressionTalkAfter();
|
||
}
|
||
|
||
switch (mExpression) {
|
||
case EXPR_LAUGH:
|
||
case EXPR_SNIFF:
|
||
if (mExpressionPhase != 0) {
|
||
mAnmFlags &= ~ANM_PAUSE_EXPRESSION;
|
||
}
|
||
break;
|
||
}
|
||
} else {
|
||
mMsgTimer = 0;
|
||
|
||
if (mStaffID != -1) {
|
||
mAction = NULL;
|
||
mStaffID = -1;
|
||
}
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809EC0CC-809EC164 003DAC 0098+00 1/1 0/0 0/0 .text setSkipZev__11daNpc_Grz_cFii */
|
||
bool daNpc_Grz_c::setSkipZev(int param_1, int param_2) {
|
||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||
|
||
if (strcmp(eventManager.getRunEventName(), l_evtNames[param_1]) == 0) {
|
||
dComIfGp_getEvent().setSkipZev(this, l_evtNames[param_2]);
|
||
dComIfGp_getEvent().onSkipFade();
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/* 809EC164-809EC188 003E44 0024+00 10/10 0/0 0/0 .text setLookMode__11daNpc_Grz_cFi */
|
||
void daNpc_Grz_c::setLookMode(int i_lookMode) {
|
||
if (i_lookMode >= 0 && i_lookMode < 6 && i_lookMode != mLookMode) {
|
||
mLookMode = i_lookMode;
|
||
}
|
||
}
|
||
|
||
/* 809EC188-809EC424 003E68 029C+00 1/1 0/0 0/0 .text lookat__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::lookat() {
|
||
daPy_py_c* player = NULL;
|
||
J3DModel* model = mpMorf->getModel();
|
||
BOOL bVar1 = FALSE;
|
||
f32 body_angleX_min = daNpc_Grz_Param_c::m.common.body_angleX_min;
|
||
f32 body_angleX_max = daNpc_Grz_Param_c::m.common.body_angleX_max;
|
||
f32 body_angleY_min = daNpc_Grz_Param_c::m.common.body_angleY_min;
|
||
f32 body_angleY_max = daNpc_Grz_Param_c::m.common.body_angleY_max;
|
||
f32 head_angleX_min = daNpc_Grz_Param_c::m.common.head_angleX_min;
|
||
f32 head_angleX_max = daNpc_Grz_Param_c::m.common.head_angleX_max;
|
||
f32 head_angleY_min = daNpc_Grz_Param_c::m.common.head_angleY_min;
|
||
f32 head_angleY_max = daNpc_Grz_Param_c::m.common.head_angleY_max;
|
||
s16 angle_delta = mCurAngle.y - mOldAngle.y;
|
||
cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
|
||
csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
|
||
cXyz spe8;
|
||
|
||
switch (mLookMode) {
|
||
case LOOK_RESET:
|
||
bVar1 = TRUE;
|
||
break;
|
||
|
||
case LOOK_PLAYER:
|
||
case LOOK_PLAYER_TALK:
|
||
player = daPy_getPlayerActorClass();
|
||
|
||
if (mLookMode != LOOK_PLAYER_TALK) {
|
||
break;
|
||
}
|
||
|
||
head_angleY_min = -80.0f;
|
||
head_angleY_max = 80.0f;
|
||
break;
|
||
|
||
case LOOK_ACTOR:
|
||
player = (daPy_py_c*)mActorMngrs[1].getActorP();
|
||
break;
|
||
|
||
case LOOK_ATTN:
|
||
player = (daPy_py_c*)mActorMngrs[2].getActorP();
|
||
break;
|
||
}
|
||
|
||
if (player != NULL) {
|
||
mLookPos = player->attention_info.position;
|
||
|
||
if (mLookMode != 2 && mLookMode != 3 && mLookMode != 4) {
|
||
mLookPos.y -= 40.0f;
|
||
}
|
||
|
||
mLookat.setAttnPos(&mLookPos);
|
||
} else {
|
||
mLookat.setAttnPos(NULL);
|
||
}
|
||
|
||
mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, 0.0f, 0.0f,
|
||
head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, mCurAngle.y, lookat_pos);
|
||
mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, bVar1, angle_delta, FALSE);
|
||
}
|
||
|
||
/* 809EC424-809EC4C4 004104 00A0+00 1/1 0/0 0/0 .text setExpressionTalkAfter__11daNpc_Grz_cFv */
|
||
void daNpc_Grz_c::setExpressionTalkAfter() {
|
||
switch (mExpression) {
|
||
case EXPR_TALK_A:
|
||
setExpression(EXPR_H_TALK_A, -1.0f);
|
||
break;
|
||
|
||
case EXPR_WEAK_TALK:
|
||
setExpression(EXPR_WEAK_WAIT, -1.0f);
|
||
break;
|
||
|
||
case EXPR_SNIFF:
|
||
break;
|
||
|
||
default:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
break;
|
||
}
|
||
}
|
||
|
||
/* 809EC4C4-809EC770 0041A4 02AC+00 1/0 0/0 0/0 .text wait__11daNpc_Grz_cFPv */
|
||
int daNpc_Grz_c::wait(void* param_1) {
|
||
switch (mMode) {
|
||
case 0:
|
||
if (mType == TYPE_LIEDOWN) {
|
||
setExpression(EXPR_WEAK_WAIT, -1.0f);
|
||
setMotion(MOT_WEAK_WAIT, -1.0f, 0);
|
||
} else {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_A, -1.0f, 0);
|
||
}
|
||
|
||
setLookMode(LOOK_NONE);
|
||
mTurnMode = 0;
|
||
mMode = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (mType == TYPE_YELIA && mHide == true) {
|
||
fopAcM_delete(this);
|
||
}
|
||
|
||
if (!mIsDamaged) {
|
||
BOOL bVar1 = mActorMngrs[0].getActorP() != NULL;
|
||
if (chkFindPlayer2(bVar1, shape_angle.y)) {
|
||
if (!bVar1) {
|
||
mActorMngrs[0].entry(daPy_getPlayerActorClass());
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (bVar1) {
|
||
mActorMngrs[0].remove();
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mActorMngrs[0].getActorP() != NULL) {
|
||
setLookMode(LOOK_PLAYER);
|
||
} else {
|
||
setLookMode(LOOK_NONE);
|
||
|
||
if (home.angle.y != mCurAngle.y) {
|
||
if (mType == TYPE_LIEDOWN) {
|
||
if (step(home.angle.y, 9, 14, 45)) {
|
||
mMode = 0;
|
||
}
|
||
} else if (step(home.angle.y, 10, 13, 15)) {
|
||
mMode = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (home.angle.y == mCurAngle.y) {
|
||
fopAc_ac_c* actor_p = getAttnActorP(mActorMngrs[0].getActorP() != NULL, srchAttnActor1,
|
||
daNpc_Grz_Param_c::m.common.search_distance, daNpc_Grz_Param_c::m.common.search_height,
|
||
daNpc_Grz_Param_c::m.common.search_depth, daNpc_Grz_Param_c::m.common.fov,
|
||
shape_angle.y, 120, TRUE);
|
||
if (actor_p != NULL) {
|
||
mActorMngrs[1].entry(actor_p);
|
||
setLookMode(LOOK_ACTOR);
|
||
}
|
||
} else {
|
||
mAttnChangeTimer = 0;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809EC770-809EC7BC 004450 004C+00 1/1 0/0 0/0 .text s_sub__FPvPv */
|
||
static void* s_sub(void* i_actor, void* i_data) {
|
||
if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_GrzRock) {
|
||
return i_actor;
|
||
}
|
||
|
||
return NULL;
|
||
}
|
||
|
||
/* 809EC7BC-809EC808 00449C 004C+00 1/1 0/0 0/0 .text s_sub2__FPvPv */
|
||
static void* s_sub2(void* i_actor, void* i_data) {
|
||
if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_YELIA) {
|
||
return i_actor;
|
||
}
|
||
|
||
return NULL;
|
||
}
|
||
|
||
/* 809EC808-809EC854 0044E8 004C+00 1/1 0/0 0/0 .text s_sub3__FPvPv */
|
||
static void* s_sub3(void* i_actor, void* i_data) {
|
||
if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_GRD) {
|
||
return i_actor;
|
||
}
|
||
|
||
return NULL;
|
||
}
|
||
|
||
/* 809EC854-809ECBF0 004534 039C+00 1/0 0/0 0/0 .text waitSmash__11daNpc_Grz_cFPv */
|
||
int daNpc_Grz_c::waitSmash(void* param_1) {
|
||
switch (mMode) {
|
||
case 0:
|
||
setExpression(EXPR_PUNCHING, -1.0f);
|
||
setMotion(MOT_PUNCHING, -1.0f, 0);
|
||
setLookMode(LOOK_NONE);
|
||
mTurnMode = 0;
|
||
speedF = 0.0f;
|
||
mMode = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (mHide == true) {
|
||
mOrderEvtNo = EVT_NONE;
|
||
mEventIdx = -1;
|
||
dComIfGs_onSwitch(mSwNo, fopAcM_GetRoomNo(this));
|
||
fopAcM_delete(this);
|
||
} else {
|
||
if (mAnm == ANM_PUNCHING) {
|
||
f32 frame = mpMorf->getFrame();
|
||
if ((frame >= 10.0f && frame < 11.0f) || (frame >= 28.0f && frame < 29.0f)) {
|
||
mSound.startCreatureVoice(Z2SE_GRZ_V_BREAK, -1);
|
||
}
|
||
}
|
||
|
||
if (mActorMngrs[3].getActorP() == NULL) {
|
||
fopAc_ac_c* actor_p = (fopAc_ac_c*)fpcM_Search(s_sub, this);
|
||
if (actor_p != NULL) {
|
||
mActorMngrs[3].entry(actor_p);
|
||
cXyz sp3c(0.0f, 100.0f, 400.0f);
|
||
mDoMtx_stack_c::YrotS(actor_p->current.angle.y);
|
||
mDoMtx_stack_c::multVec(&sp3c, &sp3c);
|
||
current.pos = sp3c + actor_p->current.pos;
|
||
|
||
if (fopAcM_gc_c::gndCheck(¤t.pos)) {
|
||
current.pos.y = fopAcM_gc_c::getGroundY();
|
||
}
|
||
|
||
old.pos = current.pos;
|
||
home.pos = old.pos;
|
||
}
|
||
} else if (!daPy_py_c::checkNowWolf()) {
|
||
if ((daPy_getPlayerActorClass()->current.pos - current.pos).absXZ() < daNpc_Grz_Param_c::m.demo_start_distance) {
|
||
mOrderEvtNo = EVT_STONE_SMASH;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809ECBF0-809ECCA0 0048D0 00B0+00 1/0 0/0 0/0 .text lieDown__11daNpc_Grz_cFPv */
|
||
int daNpc_Grz_c::lieDown(void* param_1) {
|
||
switch (mMode) {
|
||
case 0:
|
||
setExpression(EXPR_LIEDOWN, -1.0f);
|
||
setMotion(MOT_LIEDOWN, -1.0f, 0);
|
||
setLookMode(LOOK_RESET);
|
||
mTurnMode = 0;
|
||
field_0x9ea = true;
|
||
mMode = 2;
|
||
break;
|
||
|
||
case 2:
|
||
break;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809ECCA0-809ECD50 004980 00B0+00 1/0 0/0 0/0 .text waitWeak__11daNpc_Grz_cFPv */
|
||
int daNpc_Grz_c::waitWeak(void* param_1) {
|
||
switch (mMode) {
|
||
case 0:
|
||
setExpression(EXPR_WEAK_WAIT, -1.0f);
|
||
setMotion(MOT_WEAK_WAIT, -1.0f, 0);
|
||
setLookMode(LOOK_NONE);
|
||
mTurnMode = 0;
|
||
field_0x9ea = true;
|
||
mMode = 2;
|
||
break;
|
||
|
||
case 2:
|
||
break;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809ECD50-809ECF88 004A30 0238+00 2/0 0/0 0/0 .text talk__11daNpc_Grz_cFPv */
|
||
int daNpc_Grz_c::talk(void* param_1) {
|
||
int rv = 0;
|
||
BOOL bVar1 = FALSE;
|
||
|
||
switch (mMode) {
|
||
case 0:
|
||
if (mIsDamaged) {
|
||
break;
|
||
}
|
||
|
||
initTalk(mMsgNo, NULL);
|
||
mTurnMode = 0;
|
||
mMode = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x9ea) {
|
||
bVar1 = TRUE;
|
||
} else {
|
||
setLookMode(LOOK_PLAYER_TALK);
|
||
mActorMngrs[0].entry(daPy_getPlayerActorClass());
|
||
|
||
if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
|
||
bVar1 = TRUE;
|
||
} else if (mType == TYPE_LIEDOWN) {
|
||
if (step(fopAcM_searchPlayerAngleY(this), 9, 14, 30)) {
|
||
setExpression(EXPR_WEAK_WAIT, -1.0f);
|
||
setMotion(MOT_WEAK_WAIT, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (step(fopAcM_searchPlayerAngleY(this), 10, 13, 15)) {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_A, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
}
|
||
|
||
if (bVar1 && talkProc(NULL, TRUE, NULL)) {
|
||
rv = 1;
|
||
}
|
||
|
||
if (rv != 0) {
|
||
mMode = 3;
|
||
|
||
if (!field_0x9ec) {
|
||
dComIfGp_event_reset();
|
||
}
|
||
|
||
field_0x9ec = false;
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809ECF88-809ED06C 004C68 00E4+00 1/0 0/0 0/0 .text test__11daNpc_Grz_cFPv */
|
||
int daNpc_Grz_c::test(void* param_1) {
|
||
switch (mMode) {
|
||
case 0:
|
||
speedF = 0.0f;
|
||
speed.setall(0.0f);
|
||
mMode = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (daNpc_Grz_Param_c::m.common.face_expression != mExpression) {
|
||
setExpression(daNpc_Grz_Param_c::m.common.face_expression, daNpc_Grz_Param_c::m.common.morf_frame);
|
||
}
|
||
|
||
setMotion(daNpc_Grz_Param_c::m.common.motion, daNpc_Grz_Param_c::m.common.morf_frame, 0);
|
||
setLookMode(daNpc_Grz_Param_c::m.common.look_mode);
|
||
mOrderEvtNo = EVT_NONE;
|
||
attention_info.flags = 0;
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809ED06C-809ED18C 004D4C 0120+00 1/1 0/0 0/0 .text setPrtcl__11daNpc_Grz_cFv */
|
||
int daNpc_Grz_c::setPrtcl() {
|
||
for (int i = 0; i < 1; i++) {
|
||
BOOL bVar1 = i == 0 ? TRUE : FALSE;
|
||
mPrtclMngr[i].mPaPo.setEffectCenter(&tevStr, &mPrtclMngr[i].mPos, bVar1, 0,
|
||
mPrtclMngr[i].field_0x0 == 1 ? &mPrtclMngr[i].mPos : NULL,
|
||
mPrtclMngr[i].field_0x0 == 1 ? &mPrtclMngr[i].mAngle : NULL, NULL,
|
||
fopAcM_GetRoomNo(this), 0.0f, speedF);
|
||
|
||
if (mPrtclMngr[i].field_0x0 != 0) {
|
||
JPABaseEmitter* emitter = mPrtclMngr[i].mPaPo.getCenterEmitter(0, 0);
|
||
if (emitter != NULL) {
|
||
switch (i) {
|
||
case 0:
|
||
mPrtclMngr[0].mScale.set(4.0f, 4.0f, 4.0f);
|
||
emitter->setGlobalParticleScale(mPrtclMngr[0].mScale);
|
||
emitter->setGlobalAlpha(64);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
mPrtclMngr[i].field_0x0 = 0;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 809ED18C-809ED228 004E6C 009C+00 1/0 0/0 0/0 .text doWaitCut__11daNpc_Grz_cFi */
|
||
int daNpc_Grz_c::doWaitCut(int i_staffId) {
|
||
int rv = 0;
|
||
int timer = 0;
|
||
int* piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "timer");
|
||
if (piVar1 != NULL) {
|
||
timer = *piVar1;
|
||
}
|
||
|
||
if (dComIfGp_getEventManager().getIsAddvance(i_staffId)) {
|
||
mEventTimer = timer;
|
||
}
|
||
|
||
if (cLib_calcTimer(&mEventTimer) == 0) {
|
||
rv = 1;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809ED228-809ED3D4 004F08 01AC+00 1/0 0/0 0/0 .text doRebirthCut__11daNpc_Grz_cFi */
|
||
int daNpc_Grz_c::doRebirthCut(int i_staffId) {
|
||
int rv = 0;
|
||
|
||
if (dComIfGp_getEventManager().getIsAddvance(i_staffId)) {
|
||
mTimer = daNpc_Grz_Param_c::m.color_time;
|
||
}
|
||
|
||
if (cLib_calcTimer(&mTimer) == 0) {
|
||
mColor.r = 0;
|
||
mColor.g = 0;
|
||
mColor.b = 0;
|
||
rv = 1;
|
||
} else {
|
||
mColor.r = daNpc_Grz_Param_c::m.color_r * ((f32)mTimer / daNpc_Grz_Param_c::m.color_time);
|
||
mColor.g = daNpc_Grz_Param_c::m.color_g * ((f32)mTimer / daNpc_Grz_Param_c::m.color_time);
|
||
mColor.b = daNpc_Grz_Param_c::m.color_b * ((f32)mTimer / daNpc_Grz_Param_c::m.color_time);
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809ED3D4-809ED5EC 0050B4 0218+00 1/0 0/0 0/0 .text doTalkStandCut__11daNpc_Grz_cFi */
|
||
int daNpc_Grz_c::doTalkStandCut(int i_staffId) {
|
||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||
int rv = 0;
|
||
int prm = -1;
|
||
int* piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
||
if (piVar1 != NULL) {
|
||
prm = *piVar1;
|
||
}
|
||
|
||
if (eventManager.getIsAddvance(i_staffId)) {
|
||
switch (prm) {
|
||
case 0:
|
||
speedF = 0.0f;
|
||
speed.set(0.0f, 0.0f, 0.0f);
|
||
mOrderSpeakEvt = false;
|
||
mTurnMode = 0;
|
||
field_0x1a84 = 0;
|
||
setLookMode(LOOK_NONE);
|
||
setExpression(EXPR_GETUP, -1.0f);
|
||
setMotion(MOT_GETUP, -1.0f, 0);
|
||
break;
|
||
|
||
case 10:
|
||
setExpression(EXPR_WEAK_WAIT, -1.0f);
|
||
setMotion(MOT_WEAK_WAIT, -1.0f, 0);
|
||
break;
|
||
|
||
case 20:
|
||
initTalk(mMsgNo, NULL);
|
||
break;
|
||
}
|
||
}
|
||
|
||
switch (prm) {
|
||
case 0:
|
||
if (mAnm == ANM_GETUP_2) {
|
||
if (mpMorf->isStop()) {
|
||
rv = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 10:
|
||
rv = 1;
|
||
break;
|
||
|
||
case 20:
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
rv = 1;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
rv = 1;
|
||
break;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809ED5EC-809EDBA4 0052CC 05B8+00 1/0 0/0 0/0 .text doGoOutCut__11daNpc_Grz_cFi */
|
||
int daNpc_Grz_c::doGoOutCut(int i_staffId) {
|
||
cXyz sp30(150.0f, 0.0f, 1020.0f);
|
||
dEvent_manager_c* eventManager = (dEvent_manager_c*)&dComIfGp_getEventManager();
|
||
int rv = 0;
|
||
int prm = -1;
|
||
int timer = 0;
|
||
int* piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
||
if (piVar1 != NULL) {
|
||
prm = *piVar1;
|
||
}
|
||
|
||
piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "timer");
|
||
if (piVar1 != NULL) {
|
||
timer = *piVar1;
|
||
}
|
||
|
||
if (eventManager->getIsAddvance(i_staffId)) {
|
||
fopAc_ac_c* actor;
|
||
|
||
switch (prm) {
|
||
case 0:
|
||
actor = (fopAc_ac_c*)fpcM_Search(s_sub2, this);
|
||
|
||
JUT_ASSERT(3349, 0 != actor);
|
||
|
||
mActorMngrs[2].entry(actor);
|
||
setLookMode(LOOK_ATTN);
|
||
break;
|
||
|
||
case 1:
|
||
actor = (fopAc_ac_c*)fpcM_Search(s_sub3, this);
|
||
|
||
JUT_ASSERT(3359, 0 != actor);
|
||
|
||
mActorMngrs[2].entry(actor);
|
||
setLookMode(LOOK_ATTN);
|
||
break;
|
||
|
||
case 10:
|
||
setMotion(MOT_UNAZUKI, -1.0f, 0);
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
mSound.startCreatureVoice(Z2SE_GRZ_V_NOD, -1);
|
||
break;
|
||
|
||
case 20:
|
||
setLookMode(LOOK_NONE);
|
||
setMotion(MOT_WALK_A, -1.0f, 0);
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
speedF = daNpc_Grz_Param_c::m.walk_speed;
|
||
mEventTimer = timer;
|
||
break;
|
||
|
||
case 21:
|
||
mpMorf->setPlaySpeed(0.0f);
|
||
break;
|
||
|
||
case 99:
|
||
current.pos = sp30;
|
||
old.pos = current.pos;
|
||
mHide = true;
|
||
mEventTimer = timer;
|
||
break;
|
||
}
|
||
}
|
||
|
||
switch (prm) {
|
||
case 0: {
|
||
fopAc_ac_c* actor_p = mActorMngrs[2].getActorP();
|
||
|
||
JUT_ASSERT(3415, 0 != actor_p);
|
||
|
||
s16 angleY = fopAcM_searchActorAngleY(this, actor_p);
|
||
if (angleY == mCurAngle.y) {
|
||
mTurnMode = 0;
|
||
rv = 1;
|
||
} else if (step(angleY, 10, 13, 15)) {
|
||
mTurnMode = 0;
|
||
setMotion(MOT_WAIT_A, -1.0f, 0);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case 1:
|
||
case 99:
|
||
rv = 1;
|
||
break;
|
||
|
||
case 10:
|
||
if (mMotion == MOT_UNAZUKI) {
|
||
if (mMotionPhase > 0) {
|
||
rv = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 20:
|
||
if (mEventTimer != 0 || eventManager->getIsAddvance(i_staffId)) {
|
||
if ((current.pos - sp30).abs() > 50.0f) {
|
||
speedF = daNpc_Grz_Param_c::m.walk_speed;
|
||
cLib_addCalcAngleS2(&mCurAngle.y, cLib_targetAngleY(¤t.pos, &sp30), 4, 0x400);
|
||
setAngle(mCurAngle.y);
|
||
} else {
|
||
mEventTimer = 0;
|
||
}
|
||
|
||
if (cLib_calcTimer(&mEventTimer) == 0) {
|
||
speedF = 0.0f;
|
||
}
|
||
} else {
|
||
mHide = true;
|
||
rv = 1;
|
||
}
|
||
break;
|
||
|
||
case 21:
|
||
if ((mEventTimer != 0 || eventManager->getIsAddvance(i_staffId)) && cLib_calcTimer(&mEventTimer) == 0) {
|
||
mDoAud_seStart(Z2SE_GRZ_DOOR_CL, NULL, 0, 0);
|
||
dComIfGp_getVibration().StartShock(7, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
}
|
||
|
||
if (mEventTimer == 0) {
|
||
rv = 1;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
rv = 1;
|
||
break;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809EDBA4-809EE5F0 005884 0A4C+00 1/0 0/0 0/0 .text doStoneSmashCut__11daNpc_Grz_cFi */
|
||
int daNpc_Grz_c::doStoneSmashCut(int i_staffId) {
|
||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||
int iVar1 = 0;
|
||
int rv = 0;
|
||
int* piVar1 = NULL;
|
||
int prm = -1;
|
||
piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
||
if (piVar1 != NULL) {
|
||
prm = *piVar1;
|
||
}
|
||
|
||
if (eventManager.getIsAddvance(i_staffId)) {
|
||
switch (prm) {
|
||
case 0: {
|
||
dComIfGs_offStageSwitch(6, 64);
|
||
cXyz sp58(-250.0f, 0.0f, -250.0f);
|
||
mDoMtx_stack_c::YrotS(shape_angle.y);
|
||
mDoMtx_stack_c::multVec(&sp58, &sp58);
|
||
sp58 += current.pos;
|
||
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp58, shape_angle.y + 0x2000, 0);
|
||
break;
|
||
}
|
||
|
||
case 10:
|
||
break;
|
||
|
||
case 20:
|
||
dComIfGp_getVibration().StartQuake(5, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
setMotion(MOT_PUNCH, -1.0f, 0);
|
||
setExpression(EXPR_PUNCH, -1.0f);
|
||
mSound.startCreatureVoice(Z2SE_GRZ_V_BREAK_FINISH_M, -1);
|
||
break;
|
||
|
||
case 30:
|
||
break;
|
||
|
||
case 40:
|
||
setLookMode(LOOK_PLAYER_TALK);
|
||
mActorMngrs[0].entry(daPy_getPlayerActorClass());
|
||
break;
|
||
|
||
case 50:
|
||
initTalk(mMsgNo, NULL);
|
||
break;
|
||
|
||
case 60:
|
||
setLookMode(LOOK_NONE);
|
||
break;
|
||
|
||
case 70:
|
||
setMotion(MOT_TO_STONE_NORMAL, -1.0f, 0);
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
break;
|
||
|
||
case 75:
|
||
mpMorf->setPlaySpeed(0.0f);
|
||
mpMorf->setEndFrame(10.0f);
|
||
break;
|
||
|
||
case 80:
|
||
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&home.pos, (s16)home.angle.y, 0);
|
||
break;
|
||
}
|
||
}
|
||
|
||
switch (prm) {
|
||
case 0:
|
||
if (mpMorf->getFrame() == mpMorf->getStartFrame()) {
|
||
field_0x1a9c++;
|
||
}
|
||
|
||
if (field_0x1a9c >= 2) {
|
||
if (mpMorf->getFrame() >= 20.0f) {
|
||
rv = 1;
|
||
}
|
||
} else {
|
||
cXyz sp64(-250.0f, 0.0f, -250.0f);
|
||
mDoMtx_stack_c::YrotS(shape_angle.y);
|
||
mDoMtx_stack_c::multVec(&sp64, &sp64);
|
||
sp64 += current.pos;
|
||
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, shape_angle.y + 0x2000, 0);
|
||
}
|
||
|
||
if (mAnm == ANM_PUNCHING) {
|
||
f32 frame = mpMorf->getFrame();
|
||
if ((frame >= 10.0f && frame < 11.0f) || (frame >= 28.0f && frame < 29.0f)) {
|
||
mSound.startCreatureVoice(Z2SE_GRZ_V_BREAK, -1);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 10:
|
||
if (mpMorf->getFrame() == mpMorf->getStartFrame()) {
|
||
rv = 1;
|
||
}
|
||
|
||
if (mAnm == ANM_PUNCHING) {
|
||
f32 frame = mpMorf->getFrame();
|
||
if ((frame >= 10.0f && frame < 11.0f) || (frame >= 28.0f && frame < 29.0f)) {
|
||
mSound.startCreatureVoice(Z2SE_GRZ_V_BREAK, -1);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 20:
|
||
if (mpMorf->getFrame() >= 17.0f) {
|
||
dComIfGp_getVibration().StopQuake(31);
|
||
rv = 1;
|
||
}
|
||
break;
|
||
|
||
case 30:
|
||
if (mMotionPhase > 0) {
|
||
rv = 1;
|
||
} else if (mpMorf->getFrame() == 35.0f) {
|
||
dComIfGp_getVibration().StartShock(8, 15, cXyz(0.0f, 1.0f, 0.0f));
|
||
daObjGrzRock_c* rock_p = (daObjGrzRock_c*)mActorMngrs[3].getActorP();
|
||
if (rock_p != NULL) {
|
||
rock_p->setSmashFlag(1);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 40:
|
||
if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
|
||
rv = 1;
|
||
} else if (step(fopAcM_searchPlayerAngleY(this), 10, 13, 15)) {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_A, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
break;
|
||
|
||
case 50:
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
rv = 1;
|
||
} else if (mAnm == ANM_SNIFF) {
|
||
mSound.startCreatureVoiceLevel(Z2SE_GRZ_V_SNIFF, -1);
|
||
} else {
|
||
mSound.startCreatureVoiceLevel(Z2SE_GRZ_V_BREATH, -1);
|
||
}
|
||
break;
|
||
|
||
case 60:
|
||
if ((s16)(home.angle.y + 0x8000) == mCurAngle.y) {
|
||
rv = 1;
|
||
} else if (step(home.angle.y + 0x8000, 10, 13, 15)) {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_A, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
break;
|
||
|
||
case 70:
|
||
if (mMotion == MOT_TO_STONE_NORMAL) {
|
||
if (mMotionPhase > 0) {
|
||
rv = 1;
|
||
} else if (mpMorf->checkFrame(14.0f)) {
|
||
cXyz sp70(0.0f, 0.0f, 20.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&sp70, &mPrtclMngr[0].mPos);
|
||
mPrtclMngr[0].mAngle = mCurAngle;
|
||
mPrtclMngr[0].field_0x0 = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 80:
|
||
case 75:
|
||
if (mPath.getPathInfo() != NULL) {
|
||
cXyz sp7c;
|
||
mPath.getDstPos(current.pos, sp7c);
|
||
cLib_addCalcAngleS2(&mCurAngle.y, cLib_targetAngleY(¤t.pos, &sp7c), 6, 0x400);
|
||
setAngle(mCurAngle.y);
|
||
f32 playSpeed = mpMorf->getPlaySpeed();
|
||
cLib_addCalc2(&playSpeed, 1.0f, 0.1f, 0.1f);
|
||
mpMorf->setPlaySpeed(playSpeed);
|
||
speedF = daNpc_Grz_Param_c::m.rotation_movement_speed * playSpeed;
|
||
}
|
||
|
||
rv = 1;
|
||
break;
|
||
|
||
default:
|
||
rv = 1;
|
||
break;
|
||
}
|
||
|
||
if (mMotion == MOT_TO_STONE_NORMAL && mMotionPhase > 0 && mpMorf->getPlaySpeed() >= 0.5f) {
|
||
JPABaseEmitter* emitter = NULL;
|
||
cXyz pos(current.pos);
|
||
cXyz scale(1.2f, 1.2f, 1.2f);
|
||
|
||
static u16 const l_prticles_id[3] = {
|
||
dPa_RM(ID_ZF_S_ROLLINGG00_ROCK),
|
||
dPa_RM(ID_ZF_S_ROLLINGG01_SMKTAIL),
|
||
dPa_RM(ID_ZF_S_ROLLINGG02_SMKCRCL),
|
||
};
|
||
|
||
for (int i = 0; i < 3; i++) {
|
||
if (i == 0) {
|
||
field_0x1aa0[i] = dComIfGp_particle_set(field_0x1aa0[i], l_prticles_id[i], &pos, &tevStr, ¤t.angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
||
} else {
|
||
field_0x1aa0[i] = dComIfGp_particle_setPolyColor(field_0x1aa0[i], l_prticles_id[i], mAcch.m_gnd, &pos, &tevStr, ¤t.angle, &scale, 0, NULL, -1, NULL);
|
||
}
|
||
|
||
emitter = dComIfGp_particle_getEmitter(field_0x1aa0[i]);
|
||
if (emitter != NULL) {
|
||
emitter->setGlobalTranslation(pos.x, pos.y, pos.z);
|
||
}
|
||
}
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809EE5F0-809EE724 0062D0 0134+00 1/0 0/0 0/0 .text doStoneSmashSkipCut__11daNpc_Grz_cFi */
|
||
int daNpc_Grz_c::doStoneSmashSkipCut(int i_staffId) {
|
||
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
|
||
int prm = -1;
|
||
int* piVar1 = dComIfGp_evmng_getMyIntegerP(i_staffId, "prm");
|
||
if (piVar1 != NULL) {
|
||
prm = *piVar1;
|
||
}
|
||
|
||
if (eventManager.getIsAddvance(i_staffId)) {
|
||
switch (prm) {
|
||
case 10:
|
||
dComIfGs_offStageSwitch(6, 64);
|
||
setMotion(MOT_WAIT_A, -1.0f, 0);
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&home.pos, home.angle.y, 0);
|
||
mHide = true;
|
||
|
||
fopAc_ac_c* actor_p = mActorMngrs[3].getActorP();
|
||
if (actor_p != NULL) {
|
||
fopAcM_delete(actor_p);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
int rv;
|
||
switch (prm) {
|
||
case 10:
|
||
rv = 1;
|
||
break;
|
||
|
||
default:
|
||
rv = 1;
|
||
break;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 809EE724-809EE744 006404 0020+00 1/0 0/0 0/0 .text daNpc_Grz_Create__FPv */
|
||
static int daNpc_Grz_Create(void* a_this) {
|
||
return static_cast<daNpc_Grz_c*>(a_this)->create();
|
||
}
|
||
|
||
/* 809EE744-809EE764 006424 0020+00 1/0 0/0 0/0 .text daNpc_Grz_Delete__FPv */
|
||
static int daNpc_Grz_Delete(void* a_this) {
|
||
return static_cast<daNpc_Grz_c*>(a_this)->Delete();
|
||
}
|
||
|
||
/* 809EE764-809EE784 006444 0020+00 1/0 0/0 0/0 .text daNpc_Grz_Execute__FPv */
|
||
static int daNpc_Grz_Execute(void* a_this) {
|
||
return static_cast<daNpc_Grz_c*>(a_this)->Execute();
|
||
}
|
||
|
||
/* 809EE784-809EE7A4 006464 0020+00 1/0 0/0 0/0 .text daNpc_Grz_Draw__FPv */
|
||
static int daNpc_Grz_Draw(void* a_this) {
|
||
return static_cast<daNpc_Grz_c*>(a_this)->Draw();
|
||
}
|
||
|
||
/* 809EE7A4-809EE7AC 006484 0008+00 1/0 0/0 0/0 .text daNpc_Grz_IsDelete__FPv */
|
||
static int daNpc_Grz_IsDelete(void* a_this) {
|
||
return 1;
|
||
}
|
||
|
||
AUDIO_INSTANCES;
|
||
|
||
/* 809EFAA8-809EFAC8 -00001 0020+00 1/0 0/0 0/0 .data daNpc_Grz_MethodTable */
|
||
static actor_method_class daNpc_Grz_MethodTable = {
|
||
(process_method_func)daNpc_Grz_Create,
|
||
(process_method_func)daNpc_Grz_Delete,
|
||
(process_method_func)daNpc_Grz_Execute,
|
||
(process_method_func)daNpc_Grz_IsDelete,
|
||
(process_method_func)daNpc_Grz_Draw,
|
||
};
|
||
|
||
/* 809EFAC8-809EFAF8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_GRZ */
|
||
extern actor_process_profile_definition g_profile_NPC_GRZ = {
|
||
fpcLy_CURRENT_e, // mLayerID
|
||
7, // mListID
|
||
fpcPi_CURRENT_e, // mListPrio
|
||
PROC_NPC_GRZ, // mProcName
|
||
&g_fpcLf_Method.base, // sub_method
|
||
sizeof(daNpc_Grz_c), // mSize
|
||
0, // mSizeOther
|
||
0, // mParameters
|
||
&g_fopAc_Method.base, // sub_method
|
||
314, // mPriority
|
||
&daNpc_Grz_MethodTable, // sub_method
|
||
0x00044100, // mStatus
|
||
fopAc_NPC_e, // mActorType
|
||
fopAc_CULLBOX_CUSTOM_e, // cullType
|
||
};
|