mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-06 11:37:25 -04:00
3820 lines
114 KiB
C++
3820 lines
114 KiB
C++
/**
|
|
* d_a_npc_ji1.cpp
|
|
* NPC - Orca
|
|
*/
|
|
|
|
#include "d/actor/d_a_npc_ji1.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/actor/d_a_tsubo.h"
|
|
#include "d/res/res_ji.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_snap.h"
|
|
#include "d/d_lib.h"
|
|
#include "f_op/f_op_msg.h"
|
|
|
|
#include "weak_data_1811.h" // IWYU pragma: keep
|
|
#include "weak_bss_936_to_1036.h" // IWYU pragma: keep
|
|
|
|
static void daNpc_Ji1_setHairAngle(daNpc_Ji1_c*);
|
|
|
|
static daNpc_Ji1_HIO_c l_HIO;
|
|
|
|
static fpc_ProcID l_msgId;
|
|
static msg_class* l_msg;
|
|
|
|
static dCcD_SrcCyl l_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsEnemy_e | cCcD_CoSPrm_VsPlayer_e | cCcD_CoSPrm_VsOther_e,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 60.0f,
|
|
/* Height */ 170.0f,
|
|
},
|
|
};
|
|
|
|
static dCcD_SrcCyl l_cyl2_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 60.0f,
|
|
/* Height */ 200.0f,
|
|
},
|
|
};
|
|
|
|
static dCcD_SrcCyl l_cylAt_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ AT_TYPE_BOMB,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsEnemy_e | cCcD_AtSPrm_VsOther_e,
|
|
/* SrcObjTg Type */ 0,
|
|
/* SrcObjTg SPrm */ 0,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 150.0f,
|
|
/* Height */ 100.0f,
|
|
},
|
|
};
|
|
|
|
static dCcD_SrcCps l_cpsAt_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ AT_TYPE_UNK800,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsPlayer_e | cCcD_AtSPrm_VsOther_e,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL,
|
|
/* SrcObjTg SPrm */ 0,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0x01,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCpsS
|
|
{
|
|
/* Start */ 0.0f, 0.0f, 0.0f,
|
|
/* End */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 80.0f,
|
|
},
|
|
};
|
|
|
|
/* 000000EC-00000380 .text __ct__15daNpc_Ji1_HIO_cFv */
|
|
daNpc_Ji1_HIO_c::daNpc_Ji1_HIO_c() {
|
|
field_0x04 = -1;
|
|
field_0x08 = 100.0f;
|
|
field_0x0C = 7000;
|
|
field_0x0E = 4000;
|
|
field_0x10 = 9000;
|
|
field_0x12 = 7000;
|
|
field_0x14 = 5000;
|
|
field_0x16 = 1;
|
|
field_0x18 = 2000;
|
|
field_0x1C = 0.0f;
|
|
field_0x20 = 20.0f;
|
|
field_0x24 = 20.0f;
|
|
field_0x28 = 0;
|
|
field_0x2C = 200.0f;
|
|
field_0x30 = 0;
|
|
field_0x34 = 150.0f;
|
|
field_0x38 = 20.0f;
|
|
field_0x3C = 90.0f;
|
|
field_0x40 = 10.0f;
|
|
field_0x44 = 2.0f;
|
|
field_0x48 = 2.0f;
|
|
field_0x4C = 1.25f;
|
|
field_0x50 = 1.5f;
|
|
field_0x54[0] = 9;
|
|
field_0x54[1] = 9;
|
|
field_0x54[2] = 9;
|
|
field_0x54[3] = 2;
|
|
field_0x54[4] = 2;
|
|
field_0x54[5] = 2;
|
|
field_0x60[0] = 100;
|
|
field_0x60[1] = 300;
|
|
field_0x60[2] = 500;
|
|
field_0x60[3] = 1000;
|
|
field_0x68 = 0;
|
|
field_0x6C = 0.7;
|
|
field_0x70 = 1.5;
|
|
field_0x78 = 1.4;
|
|
field_0x74 = 1.4;
|
|
field_0x80 = 1.4;
|
|
field_0x7C = 1.2;
|
|
field_0x84 = 0.1;
|
|
field_0x88 = 0xB;
|
|
field_0x8A = 0x32;
|
|
field_0x8C = 0x28;
|
|
field_0x8E = 0x1e;
|
|
field_0x90 = 0x14;
|
|
field_0x92 = 0xf;
|
|
field_0x94 = 10;
|
|
field_0x96 = 0xB4;
|
|
field_0x98 = 0x8C;
|
|
field_0x9A = 100;
|
|
field_0x9C = 0x50;
|
|
field_0x9E = 0x3C;
|
|
field_0xA0 = 0x32;
|
|
field_0xA4 = 6.0f;
|
|
field_0xA8 = 16.0f;
|
|
field_0xAC = 70.0f;
|
|
field_0xB0 = 10.0f;
|
|
field_0xB4 = 1.0f;
|
|
field_0xB8 = 0;
|
|
field_0xBC = 0.25f;
|
|
field_0xC0 = -5.0f;
|
|
field_0xC4[0].x = 90.0;
|
|
field_0xC4[0].y = 5.0;
|
|
field_0xC4[0].z = 30.0;
|
|
field_0xC4[1].x = 90.0;
|
|
field_0xC4[1].y = 5.0;
|
|
field_0xC4[1].z = -30.0;
|
|
field_0xC4[2].x = -20.0;
|
|
field_0xC4[2].y = -20.0;
|
|
field_0xC4[2].z = 0.0;
|
|
field_0xE8 = 0xC800;
|
|
field_0xEA = 0x3800;
|
|
field_0xEC = 0xC600;
|
|
field_0xEE = 0x3A00;
|
|
field_0xF0 = 0xC600;
|
|
field_0xF2 = 0x3A00;
|
|
field_0xF4 = 0xfB00;
|
|
field_0xF6 = 0x3800;
|
|
field_0xF8 = 0xf600;
|
|
field_0xFA = 0x3A00;
|
|
field_0xFC = 0xf100;
|
|
field_0xFE = 0x3A00;
|
|
}
|
|
|
|
/* 000003C0-000003E4 .text daNpc_Ji1_XyCheckCB__FPvi */
|
|
static s16 daNpc_Ji1_XyCheckCB(void*, int i_itemBtn) {
|
|
return dComIfGp_getSelectItem(i_itemBtn) == BOKO_BELT ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 000003E4-00000404 .text daJi1_CoHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
|
|
static void daJi1_CoHitCallback(fopAc_ac_c* i_this, dCcD_GObjInf*, fopAc_ac_c* actor, dCcD_GObjInf*) {
|
|
if(actor == dComIfGp_getPlayer(0)) {
|
|
static_cast<daNpc_Ji1_c*>(i_this)->field_0xC28 = 1;
|
|
}
|
|
}
|
|
|
|
/* 00000404-00000424 .text daJi1_TgHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
|
|
static void daJi1_TgHitCallback(fopAc_ac_c* i_this, dCcD_GObjInf*, fopAc_ac_c* actor, dCcD_GObjInf*) {
|
|
u32 temp = daPy_getPlayerActorClass()->getCutType();
|
|
if(actor) {
|
|
static_cast<daNpc_Ji1_c*>(i_this)->field_0xC24 = temp;
|
|
}
|
|
}
|
|
|
|
/* 00000424-000004A0 .text daJi1_AtHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
|
|
static void daJi1_AtHitCallback(fopAc_ac_c* i_this, dCcD_GObjInf* param_2, fopAc_ac_c* actor, dCcD_GObjInf*) {
|
|
if(fopAc_IsActor(actor)) {
|
|
if(fpcM_GetName(actor) == PROC_PLAYER) {
|
|
if(!param_2->ChkAtShieldHit()) {
|
|
static_cast<daNpc_Ji1_c*>(i_this)->field_0xC3C++;
|
|
}
|
|
else {
|
|
static_cast<daNpc_Ji1_c*>(i_this)->battleSubActionNockBackInit(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000004A0-000004CC .text isGuardAnim__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::isGuardAnim() {
|
|
if((field_0xD64 >= 8 && field_0xD64 <= 10) || field_0xD64 == 0xF) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 000004CC-000004F8 .text isAttackAnim__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::isAttackAnim() {
|
|
if(field_0xD64 == 0x13 || field_0xD64 == 0x14 || field_0xD64 == 7) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 000004F8-0000056C .text isAttackFrame__11daNpc_Ji1_cFv */
|
|
int daNpc_Ji1_c::isAttackFrame() {
|
|
f32 frame = field_0x330->getFrame();
|
|
f32 temp2 = 0.0f;
|
|
f32 temp3 = temp2;
|
|
|
|
if(field_0xD64 == 0x13) {
|
|
temp2 = 28.0f;
|
|
temp3 = 35.0f;
|
|
}
|
|
else if (field_0xD64 == 0x14) {
|
|
temp2 = 25.0f;
|
|
temp3 = 35.0f;
|
|
}
|
|
else {
|
|
if(field_0xD64 == 7) {
|
|
temp2 = 12.0f;
|
|
temp3 = 28.0f;
|
|
}
|
|
}
|
|
|
|
if(temp2 > frame) {
|
|
return -1;
|
|
}
|
|
|
|
return temp3 < frame;
|
|
}
|
|
|
|
/* 0000056C-000005A0 .text isItemWaitAnim__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::isItemWaitAnim() {
|
|
if(field_0xD64 == 0 || field_0xD64 == 0xC || field_0xD64 == 0xD || field_0xD64 == 0x18) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 000005A0-00000630 .text isClearRecord__11daNpc_Ji1_cFs */
|
|
BOOL daNpc_Ji1_c::isClearRecord(s16 param_1) {
|
|
if(dComIfGs_isEventBit(0xF20)) {
|
|
return false;
|
|
}
|
|
|
|
u8 level = dComIfGs_getEventReg(0xD003);
|
|
if (param_1 >= l_HIO.field_0x60[level]) {
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00000630-000006F8 .text setClearRecord__11daNpc_Ji1_cFs */
|
|
void daNpc_Ji1_c::setClearRecord(s16 hits) {
|
|
u8 oldLevel = dComIfGs_getEventReg(0xD003);
|
|
|
|
u8 newLevel = 0;
|
|
while(hits >= l_HIO.field_0x60[newLevel] && newLevel <= 3) {
|
|
newLevel++;
|
|
}
|
|
|
|
if(oldLevel < newLevel) {
|
|
dComIfGs_setEventReg(0xD003, newLevel);
|
|
if(hits >= l_HIO.field_0x60[3]) {
|
|
dComIfGs_onEventBit(0xF20);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000006F8-00000864 .text daNpc_Ji1_plRoomOutCheck__Fv */
|
|
static BOOL daNpc_Ji1_plRoomOutCheck() {
|
|
cXyz plyrPos = daPy_getPlayerActorClass()->current.pos;
|
|
static cXyz out_chk_pos(0.0f, 0.0f, 500.0f);
|
|
|
|
cXyz temp = plyrPos - out_chk_pos;
|
|
if(temp.absXZ() < 100.0f && dComIfGp_getDoStatus() == dActStts_OPEN_e) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00000864-00000E98 .text normalSubActionHarpoonGuard__11daNpc_Ji1_cFs */
|
|
BOOL daNpc_Ji1_c::normalSubActionHarpoonGuard(s16 param_1) {
|
|
/* Nonmatching - regalloc */
|
|
|
|
if(field_0xD6C == 0) {
|
|
if(field_0x7E0.ChkTgHit()) {
|
|
field_0xD6C = 1;
|
|
field_0xD74++;
|
|
field_0xD68 = 0;
|
|
setAnm(9, 0.0f, 1);
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_PURPLE_HIT, field_0x7E0.GetTgHitPosP());
|
|
fopAcM_seStart(this, JA_SE_CV_JI_DEFENCE, 0);
|
|
fopAcM_seStart(this, JA_SE_OBJ_COL_SWS_NMTLP, 0);
|
|
}
|
|
else {
|
|
if(field_0xD64 == 0xD) {
|
|
if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f) && ++field_0xD68 > 1) {
|
|
setAnm(0, 12.0f, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(field_0xD6C == 1) {
|
|
cLib_addCalcAngleS2(¤t.angle.y, param_1, 2, 0x2000);
|
|
if(field_0xD64 == 0xB) {
|
|
if(field_0x330->checkFrame(field_0x330->getEndFrame() - 14.0f)) {
|
|
setParticle(3, 3.0f, 0.5f);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0);
|
|
}
|
|
else if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) {
|
|
dtParticle();
|
|
if(field_0xD68++ > 2) {
|
|
field_0xD6C = 0;
|
|
setAnm(0, 16.0f, 0);
|
|
}
|
|
else {
|
|
setAnm(0xB, 4.0f, 1);
|
|
field_0x330->setPlaySpeed(2.0f);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) {
|
|
field_0xD6C = 0;
|
|
if(field_0xD74 == 3) {
|
|
setAnm(5, 4.0f, 0);
|
|
field_0xC84 = 0xC;
|
|
field_0x2C8 = field_0x2B0;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
}
|
|
else if(field_0xD74 == 5) {
|
|
setAnm(5, 4.0f, 0);
|
|
field_0xC84 = 0xD;
|
|
field_0x2C8 = field_0x2B0;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
}
|
|
else if(field_0xD74 > 5) {
|
|
setAnm(5, 4.0f, 0);
|
|
field_0xC84 = 0xE;
|
|
field_0x2C8 = field_0x2B0;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
|
|
field_0xD74 = 0;
|
|
}
|
|
else {
|
|
setAnm(0xD, 8.0f, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000E98-00001294 .text normalSubActionGuard__11daNpc_Ji1_cFs */
|
|
BOOL daNpc_Ji1_c::normalSubActionGuard(s16 param_1) {
|
|
/* Nonmatching - regalloc */
|
|
|
|
if(field_0xD6C == 0) {
|
|
if(field_0x7E0.ChkTgHit()) {
|
|
field_0xD6C = 1;
|
|
field_0xD68 = 0;
|
|
setAnm(0xF, 0.0f, 1);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_DEFENCE, 0);
|
|
}
|
|
}
|
|
|
|
if(field_0xD6C == 1) {
|
|
cLib_addCalcAngleS2(¤t.angle.y, param_1, 2, 0x2000);
|
|
if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f) && field_0xD68++ > 1) {
|
|
field_0xD6C = 0;
|
|
if(field_0xD74 == 3) {
|
|
setAnm(5, 4.0f, 0);
|
|
field_0xC84 = 0xC;
|
|
field_0x2C8 = field_0x2B0;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
}
|
|
else if(field_0xD74 == 5) {
|
|
setAnm(5, 4.0f, 0);
|
|
field_0xC84 = 0xD;
|
|
field_0x2C8 = field_0x2B0;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
}
|
|
else if(field_0xD74 > 5) {
|
|
setAnm(5, 4.0f, 0);
|
|
field_0xC84 = 0xE;
|
|
field_0x2C8 = field_0x2B0;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
}
|
|
else {
|
|
setAnm(0x1, 8.0f, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001294-000015E4 .text normalAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::normalAction(void*) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
cXyz delta = player->current.pos - current.pos;
|
|
f32 temp = delta.absXZ();
|
|
|
|
if(field_0xC78 == 0) {
|
|
field_0x7E0.OnTgShield();
|
|
if(field_0xD84 == 1) {
|
|
setAnm(0, 8.0f, 0);
|
|
}
|
|
else {
|
|
setAnm(1, 8.0f, 0);
|
|
}
|
|
|
|
if(dComIfGs_isEventBit(0x520)) {
|
|
eventInfo.setXyCheckCB(&daNpc_Ji1_XyCheckCB);
|
|
}
|
|
|
|
field_0xC78 += 1;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
cXyz delta2 = player->current.pos - current.pos;
|
|
s16 temp2 = cM_atan2s(delta2.x, delta2.z);
|
|
|
|
if(eventInfo.checkCommandTalk()) {
|
|
s16 temp3 = cLib_targetAngleY(¤t.pos, &player->current.pos);
|
|
temp3 -= m_jnt.getHead_y();
|
|
temp3 -= m_jnt.getBackbone_y();
|
|
cLib_addCalcAngleS2(¤t.angle.y, temp3, 8, 0x800);
|
|
if(cLib_distanceAngleS(current.angle.y, temp3) < 0x100) {
|
|
setAction(&daNpc_Ji1_c::talkAction, 0);
|
|
}
|
|
}
|
|
|
|
if(temp < l_HIO.field_0x2C && isGuardAnim() == 0 && field_0xD64 != 0xD) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
if(dComIfGs_isEventBit(0x520)) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
|
|
}
|
|
}
|
|
|
|
if(field_0xD84 == 1) {
|
|
normalSubActionHarpoonGuard(temp2);
|
|
}
|
|
else {
|
|
normalSubActionGuard(temp2);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 000015E4-000019B0 .text kaitenExpAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::kaitenExpAction(void*) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
cXyz delta = player->current.pos - current.pos;
|
|
f32 temp = delta.absXZ();
|
|
|
|
if(field_0xD64 == 0x10) {
|
|
if(field_0x330->checkFrame(19.0f)) {
|
|
if(field_0xD68 == 1) {
|
|
dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
|
|
fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0);
|
|
fopAcM_seStart(this, JA_SE_CM_JI_SHOTEI, 0);
|
|
setParticle(3, 3.0f, 0.5f);
|
|
}
|
|
|
|
if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) {
|
|
if(++field_0xD68 > 1) {
|
|
field_0xD68 = 0;
|
|
setAnm(0x11, 4.0f, 0);
|
|
}
|
|
|
|
dtParticle();
|
|
}
|
|
}
|
|
|
|
if(field_0xC78 == 0) {
|
|
setAnm(0x10, 4.0f, 0);
|
|
if(!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderOtherEventId(this, field_0xC54[6]);
|
|
eventInfo.onCondition(dEvtCmd_INDEMO_e);
|
|
|
|
return false;
|
|
}
|
|
|
|
field_0xC78++;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1");
|
|
if(getEventActionNo(staffIdx) == 2) {
|
|
setAction(&daNpc_Ji1_c::kaitenspeakAction, 0);
|
|
}
|
|
else {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 000019B0-00001B9C .text kaitenspeakAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::kaitenspeakAction(void*) {
|
|
if(field_0xC78 == 0) {
|
|
setAnm(1, 8.0f, 0);
|
|
field_0xC78++;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
cXyz temp = daPy_getPlayerActorClass()->current.pos - current.pos;
|
|
s16 temp2 = cM_atan2s(temp.x, temp.z) - current.angle.y;
|
|
m_jnt.setTrn();
|
|
if(abs(temp2) < 0x1000) {
|
|
setAnm(3, 8.0f, 0);
|
|
}
|
|
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1");
|
|
if(getEventActionNo(staffIdx) == 2) {
|
|
if(temp2 == 0) {
|
|
m_jnt.clrTrn();
|
|
|
|
setAction(&daNpc_Ji1_c::talkAction, 0);
|
|
}
|
|
}
|
|
else {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00001B9C-0000214C .text kaitenwaitAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::kaitenwaitAction(void*) {
|
|
daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass();
|
|
cXyz delta = player->current.pos - current.pos;
|
|
f32 temp = delta.absXZ();
|
|
|
|
if(field_0xC78 == 0) {
|
|
if(!dComIfGs_isEventBit(0x501)) {
|
|
setAnm(0x12, 16.0f, 0);
|
|
}
|
|
else {
|
|
setAnm(1, 4.0f, 0);
|
|
}
|
|
|
|
field_0xC78 += 1;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
if(!dComIfGs_isEventBit(0x501) && daNpc_Ji1_plRoomOutCheck()) {
|
|
field_0xC84 = 9;
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
field_0x2C8 = &daNpc_Ji1_c::kaitenwaitAction;
|
|
|
|
return true;
|
|
}
|
|
|
|
daPy_py_c* r27 = (daPy_py_c*)daPy_getPlayerActorClass();
|
|
cXyz delta2 = player->current.pos - current.pos;
|
|
s16 temp2 = cM_atan2s(delta2.x, delta2.z);
|
|
|
|
if(!dComIfGs_isEventBit(0x501) && isGuardAnim() == 0) {
|
|
cXyz delta3 = r27->current.pos - current.pos;
|
|
s16 temp3 = cM_atan2s(delta3.x, delta3.z);
|
|
cLib_addCalcAngleS2(¤t.angle.y, temp3, 0x10, 0x800);
|
|
if(r27->checkFrontRoll()) {
|
|
setAnm(1, 6.0f, 0);
|
|
}
|
|
else {
|
|
setAnm(0x12, 16.0f, 0);
|
|
}
|
|
}
|
|
|
|
if(eventInfo.checkCommandTalk()) {
|
|
s16 temp3 = cLib_targetAngleY(¤t.pos, &player->current.pos);
|
|
temp3 -= m_jnt.getHead_y();
|
|
temp3 -= m_jnt.getBackbone_y();
|
|
cLib_addCalcAngleS2(¤t.angle.y, temp3, 8, 0x800);
|
|
if(cLib_distanceAngleS(current.angle.y, temp3) < 0x100) {
|
|
setAction(&daNpc_Ji1_c::talkAction, 0);
|
|
}
|
|
}
|
|
|
|
if(temp < l_HIO.field_0x2C && isGuardAnim() == 0 && field_0xD64 != 0xD && r27->speedF < 1.0f) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
}
|
|
|
|
if(player->checkFrontRollCrash() && (!dComIfGs_isEventBit(0x501) || l_HIO.field_0x30)) {
|
|
field_0xD79 = 1;
|
|
dComIfGp_getDetect().set_quake(0);
|
|
|
|
setAction(&daNpc_Ji1_c::kaitenAction, 0);
|
|
}
|
|
|
|
if(field_0xD84 == 1) {
|
|
normalSubActionHarpoonGuard(temp2);
|
|
}
|
|
else {
|
|
normalSubActionGuard(temp2);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000214C-00002738 .text kaitenAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::kaitenAction(void*) {
|
|
if(field_0xC78 == 0) {
|
|
if(!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderOtherEventId(this, field_0xC54[5]);
|
|
eventInfo.onCondition(dEvtCmd_INDEMO_e);
|
|
|
|
return false;
|
|
}
|
|
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1");
|
|
l_msgId = -1;
|
|
field_0x2AC = 0x974;
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
current.angle.y = 0;
|
|
field_0xC78 += 1;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1");
|
|
int actionNo = getEventActionNo(staffIdx);
|
|
if(l_msgId == -1) {
|
|
if(actionNo == 2) {
|
|
if(field_0x2AC == 0x974) {
|
|
current.angle.y = -0x8000;
|
|
}
|
|
else if(field_0x2AC == 0x975) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
|
|
l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos);
|
|
}
|
|
else if(actionNo == 1) {
|
|
m_jnt.onHeadLock();
|
|
m_jnt.onBackBoneLock();
|
|
setAnm(4, 8.0f, 0);
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
}
|
|
else if(field_0xC78 == 1) {
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
if(l_msg) {
|
|
if(actionNo == 2) {
|
|
dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f));
|
|
mDoAud_seStart(JA_SE_CM_AJ_ANGRY_FOOT, NULL);
|
|
}
|
|
|
|
field_0xC78 += 1;
|
|
}
|
|
}
|
|
else if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = next_msgStatus(&field_0x2AC);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(field_0x2AC);
|
|
setAnimFromMsgNo(field_0x2AC);
|
|
}
|
|
}
|
|
else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
if(actionNo == 2) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
l_msgId = -1;
|
|
field_0x2AC = 0x975;
|
|
field_0xC78 = 1;
|
|
|
|
return true;
|
|
}
|
|
|
|
if(staffIdx != -1) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
|
|
if(dComIfGp_evmng_endCheck(field_0xC54[5])) {
|
|
dComIfGs_onEventBit(0x501);
|
|
field_0xD28 = home.pos;
|
|
home.angle.y = 0;
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
if(field_0x2AC == 0x967) {
|
|
field_0xD70 = -1;
|
|
fopAcM_seStart(this, JA_SE_VS_JI_OPENING, 0);
|
|
mDoAud_bgmStop(45);
|
|
|
|
setAction(&daNpc_Ji1_c::plmoveAction, 0);
|
|
}
|
|
else {
|
|
setAnm(1, 8.0f, 0);
|
|
setAction(&daNpc_Ji1_c::normalAction, 0);
|
|
}
|
|
|
|
dComIfGp_event_reset();
|
|
}
|
|
}
|
|
else if(dComIfGp_checkMesgSendButton() && actionNo == 3 && field_0x2AC == 0x976) {
|
|
setAnm(2, 4.0f, 0);
|
|
m_jnt.offHeadLock();
|
|
m_jnt.offBackBoneLock();
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
|
|
if(actionNo == 4) {
|
|
cXyz delta = daPy_getPlayerActorClass()->current.pos - current.pos;
|
|
s16 temp = cM_atan2s(delta.x, delta.z);
|
|
cLib_addCalcAngleS2(¤t.angle.y, temp, 4, 0x1000);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00002738-00002870 .text getMsg1stType__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::getMsg1stType() {
|
|
if(!dComIfGs_isEventBit(1)) {
|
|
if(!dComIfGs_isEventBit(0x501)) {
|
|
if(dComIfGs_isEventBit(0x640)) {
|
|
return 0x964;
|
|
}
|
|
|
|
dComIfGs_onEventBit(0x640);
|
|
return 0x961;
|
|
}
|
|
|
|
if(dComIfGs_isEventBit(0x2F40)) {
|
|
return 0x95B;
|
|
}
|
|
|
|
if(field_0xD79) {
|
|
return 0x977;
|
|
}
|
|
|
|
if(!field_0xD78) {
|
|
field_0xD78 = 1;
|
|
return 0x978;
|
|
}
|
|
|
|
return 0x97B;
|
|
}
|
|
|
|
if(dComIfGs_isEventBit(0x2F10)) {
|
|
return 0x973;
|
|
}
|
|
|
|
if(!dComIfGs_isEventBit(0x108)) {
|
|
dComIfGs_onEventBit(0x108);
|
|
eventInfo.setEventId(-1);
|
|
|
|
return 0x965;
|
|
}
|
|
|
|
return 0x94D;
|
|
}
|
|
|
|
/* 00002870-00002A08 .text getMsg2ndType__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::getMsg2ndType() {
|
|
u32 msgNo;
|
|
|
|
if(dComIfGp_event_chkTalkXY()) {
|
|
m_jnt.offBackBoneLock();
|
|
if(!dComIfGs_isEventBit(0xD80)) {
|
|
dComIfGs_onEventBit(0xD80);
|
|
msgNo = 0x9AE;
|
|
}
|
|
else if(dComIfGs_getBeastNum(3) < 10) {
|
|
msgNo = 0x9BB;
|
|
}
|
|
else if(dComIfGs_isEventBit(0xB20)) {
|
|
msgNo = 0x9BC;
|
|
}
|
|
else {
|
|
msgNo = 0x9B0;
|
|
}
|
|
}
|
|
else if(dComIfGs_isEventBit(0x2)) {
|
|
if(dComIfGs_isEventBit(0xF20)) {
|
|
if(dComIfGs_getEventReg(0xCF03) >= 3) {
|
|
msgNo = 0x9AC;
|
|
}
|
|
else {
|
|
msgNo = 0x9AD;
|
|
}
|
|
}
|
|
else if(dComIfGs_getEventReg(0xCF03) >= 3) {
|
|
msgNo = 0x9AA;
|
|
}
|
|
else {
|
|
msgNo = 0x9AB;
|
|
}
|
|
}
|
|
else {
|
|
msgNo = 0x986;
|
|
dComIfGs_onEventBit(0x2);
|
|
}
|
|
|
|
dComIfGs_setEventReg(0xCF03, 0);
|
|
return msgNo;
|
|
}
|
|
|
|
/* 00002A08-00002A60 .text getMsg__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::getMsg() {
|
|
if(dComIfGs_isEventBit(0x520)) {
|
|
return getMsg2ndType();
|
|
}
|
|
|
|
return getMsg1stType();
|
|
}
|
|
|
|
/* 00002A60-00002C64 .text next_msgStatus__11daNpc_Ji1_cFPUl */
|
|
u16 daNpc_Ji1_c::next_msgStatus(u32* pMsgNo) {
|
|
u16 status = fopMsgStts_MSG_CONTINUES_e;
|
|
switch(field_0x2AC) {
|
|
case 0x951:
|
|
case 0x952:
|
|
case 0x956:
|
|
case 0x957:
|
|
case 0x959:
|
|
case 0x95B:
|
|
case 0x95F:
|
|
case 0x961:
|
|
case 0x962:
|
|
case 0x965:
|
|
case 0x975:
|
|
case 0x978:
|
|
case 0x979:
|
|
case 0x986:
|
|
case 0x987:
|
|
case 0x988:
|
|
case 0x989:
|
|
case 0x98B:
|
|
case 0x98D:
|
|
case 0x98F:
|
|
case 0x991:
|
|
case 0x993:
|
|
case 0x99B:
|
|
case 0x99D:
|
|
case 0x99F:
|
|
case 0x9A1:
|
|
case 0x9A7:
|
|
case 0x9AA:
|
|
case 0x9AC:
|
|
case 0x9AE:
|
|
case 0x9B0:
|
|
case 0x9B1:
|
|
case 0x9B2:
|
|
case 0x9B3:
|
|
case 0x9B8:
|
|
case 0x9B9:
|
|
field_0x2AC = field_0x2AC + 1;
|
|
break;
|
|
case 0x97B:
|
|
field_0x2AC = 0x9C0;
|
|
break;
|
|
case 0x9A2:
|
|
if(dComIfGs_isEventBit(0xF10)) {
|
|
field_0x2AC = 0x9A3;
|
|
}
|
|
else {
|
|
field_0x2AC = 0x9A5;
|
|
}
|
|
|
|
break;
|
|
case 0x9AF:
|
|
if(dComIfGs_getBeastNum(3) >= 10) {
|
|
field_0x2AC = 0x9B0;
|
|
}
|
|
else {
|
|
field_0x2AC = 0x9BB;
|
|
}
|
|
|
|
break;
|
|
case 0x997:
|
|
case 0x999:
|
|
field_0x2AC = 0x998;
|
|
break;
|
|
case 0x99A:
|
|
if(dComIfGs_getEventReg(0xD003) == 1) {
|
|
field_0x2AC = 0x99B;
|
|
}
|
|
else if(dComIfGs_getEventReg(0xD003) == 2) {
|
|
field_0x2AC = 0x99D;
|
|
}
|
|
else {
|
|
field_0x2AC = 0x99F;
|
|
}
|
|
|
|
break;
|
|
case 0x95C:
|
|
case 0x973:
|
|
case 0x976:
|
|
case 0x977:
|
|
case 0x97A:
|
|
case 0x9C0:
|
|
field_0x2AC = 0x967;
|
|
break;
|
|
case 0x94D:
|
|
case 0x966:
|
|
field_0x2AC = 0x94E;
|
|
break;
|
|
case 0x967:
|
|
if(l_msg->mSelectNum == 0) {
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
}
|
|
else if (l_msg->mSelectNum == 1) {
|
|
field_0x2AC = 0x968;
|
|
}
|
|
|
|
break;
|
|
case 0x94E:
|
|
if(l_msg->mSelectNum == 0) {
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
}
|
|
else if (l_msg->mSelectNum == 1) {
|
|
field_0x2AC = 0x94F;
|
|
}
|
|
|
|
break;
|
|
case 0x98A:
|
|
case 0x9AB:
|
|
case 0x9AD:
|
|
if(l_msg->mSelectNum == 0) {
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
}
|
|
else if (l_msg->mSelectNum == 1) {
|
|
field_0x2AC = 0x995;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
/* 00002C64-000033D0 .text talkAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::talkAction(void*) {
|
|
if(field_0xC78 == 0) {
|
|
if(dComIfGp_event_chkTalkXY() && !dComIfGp_evmng_ChkPresentEnd()) {
|
|
if(dComIfGs_isEventBit(0xD80) == 0) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
cXyz delta = player->current.pos - current.pos;
|
|
f32 dummy = delta.absXZ();
|
|
|
|
s16 temp = cM_atan2s(delta.x, delta.z);
|
|
cLib_addCalcAngleS2(¤t.angle.y, temp, 8, 0x1000);
|
|
field_0xD7E = 1;
|
|
m_jnt.onBackBoneLock();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
field_0xD7E = 0;
|
|
field_0x2AC = getMsg();
|
|
field_0xC78 += 1;
|
|
l_msgId = -1;
|
|
l_msg = 0;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
if(l_msgId == -1) {
|
|
l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos);
|
|
}
|
|
else if(l_msg == 0) {
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
}
|
|
else {
|
|
setAnimFromMsgNo(field_0x2AC);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = next_msgStatus(&field_0x2AC);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(field_0x2AC);
|
|
setAnimFromMsgNo(field_0x2AC);
|
|
}
|
|
}
|
|
else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
dComIfGp_event_reset();
|
|
|
|
if(field_0x2AC == 0x963 || field_0x2AC == 0x98A) {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1");
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
if(dComIfGp_evmng_endCheck(field_0xC54[6])) {
|
|
if(field_0x2AC == 0x98A) {
|
|
field_0xD70 = -1;
|
|
fopAcM_seStart(this, JA_SE_VS_JI_OPENING, 0);
|
|
mDoAud_bgmStop(45);
|
|
|
|
setAction(&daNpc_Ji1_c::plmoveAction, 0);
|
|
}
|
|
else {
|
|
setAction(&daNpc_Ji1_c::kaitenwaitAction, 0);
|
|
}
|
|
}
|
|
}
|
|
else if(field_0x2AC == 0x94E || field_0x2AC == 0x967 || field_0x2AC == 0x9AB || field_0x2AC == 0x9AD || field_0x2AC == 0x9B4) {
|
|
if(field_0x2AC == 0x9B4) {
|
|
field_0xD7B = 1;
|
|
}
|
|
|
|
field_0xD70 = -1;
|
|
fopAcM_seStart(this, JA_SE_VS_JI_OPENING, 0);
|
|
mDoAud_bgmStop(45);
|
|
|
|
setAction(&daNpc_Ji1_c::plmoveAction, 0);
|
|
}
|
|
else if(field_0x2AC == 0x995) {
|
|
setAction(&daNpc_Ji1_c::plmoveAction, 0);
|
|
}
|
|
else {
|
|
setAction(field_0x2BC, 0);
|
|
}
|
|
}
|
|
|
|
if(field_0xD64 == 0x16 && field_0x330->getFrame() >= l_HIO.field_0xB4) {
|
|
BackSlide(l_HIO.field_0xAC, l_HIO.field_0xB0);
|
|
}
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000033D0-000039AC .text speakAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::speakAction(void*) {
|
|
}
|
|
|
|
/* 000039AC-00003F54 .text speakBadAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::speakBadAction(void*) {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1");
|
|
if(field_0xC78 == 0) {
|
|
if(!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderOtherEventId(this, field_0xC54[3]);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
|
|
return false;
|
|
}
|
|
|
|
if(MoveToPlayer(280.0f, 0)) {
|
|
return false;
|
|
}
|
|
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
switch(field_0xD70) {
|
|
case 0:
|
|
field_0x2AC = 0x96F;
|
|
break;
|
|
case 1:
|
|
field_0x2AC = 0x970;
|
|
break;
|
|
case 2:
|
|
field_0x2AC = 0x971;
|
|
break;
|
|
case 3:
|
|
field_0x2AC = 0x980;
|
|
break;
|
|
case 4:
|
|
field_0x2AC = 0x985;
|
|
break;
|
|
case 5:
|
|
field_0x2AC = 0x972;
|
|
break;
|
|
default:
|
|
field_0x2AC = 0x9B6;
|
|
break;
|
|
}
|
|
|
|
setAnm(7, 4.0f, 0);
|
|
field_0xC78 += 1;
|
|
l_msgId = -1;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
if(l_msgId == -1) {
|
|
if(field_0xD64 == 7) {
|
|
if(field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) {
|
|
l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos);
|
|
field_0xBFC.swing_horizone_init(2, 0x1000, 0x1000, 1);
|
|
setAnm(5, 0.0f, 0);
|
|
}
|
|
else if(field_0x330->checkFrame(field_0x330->getEndFrame() - 10.0f)) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0);
|
|
dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
else if(field_0x330->checkFrame(field_0x330->getEndFrame() - 14.0f)) {
|
|
fopAcM_seStart(this, JA_SE_CM_JI_ATTACK, 0);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if(field_0xC78 == 1) {
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
if(l_msg) {
|
|
field_0xC78 += 1;
|
|
}
|
|
}
|
|
else {
|
|
if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
setAnimFromMsgNo(field_0x2AC);
|
|
l_msg->mStatus = next_msgStatus(&field_0x2AC);
|
|
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(field_0x2AC);
|
|
}
|
|
}
|
|
else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
if(staffIdx != -1) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
|
|
if(dComIfGp_evmng_endCheck(field_0xC54[3])) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
if(field_0x2AC == 0x969) {
|
|
field_0xD70 = 0;
|
|
setAction(&daNpc_Ji1_c::teachAction, 0);
|
|
}
|
|
else {
|
|
setAction(field_0x2BC, 0);
|
|
}
|
|
|
|
dComIfGp_event_reset();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00003F54-00004050 .text initPosObject__11daNpc_Ji1_cFPvPv */
|
|
void* daNpc_Ji1_c::initPosObject(void* pActor, void* pData) {
|
|
if(fopAc_IsActor(pActor) && fopAcM_GetName(pActor) == PROC_TSUBO) {
|
|
((daTsubo::Act_c*)pActor)->pos_init();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 00004050-000040FC .text initPos__11daNpc_Ji1_cFi */
|
|
void daNpc_Ji1_c::initPos(int param_1) {
|
|
if(param_1 >= 0) {
|
|
setAnm(param_1, 0.0f, 0);
|
|
}
|
|
|
|
fopAcM_Search(&initPosObject, this);
|
|
old.pos = field_0xD28;
|
|
current.pos = old.pos;
|
|
current.angle = csXyz(home.angle.y, 0, 0);
|
|
}
|
|
|
|
/* 00004138-00004268 .text createItem__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::createItem() {
|
|
u8 itemNo;
|
|
|
|
if(field_0xD7C) {
|
|
itemNo = dItem_SWORD_e;
|
|
}
|
|
else if(field_0xD7B == 1) {
|
|
itemNo = dItem_HURRICANE_SPIN_e;
|
|
}
|
|
else if(dComIfGs_getEventReg(0xD003) == 1) {
|
|
itemNo = dItem_PURPLE_RUPEE_e;
|
|
}
|
|
else if(dComIfGs_getEventReg(0xD003) == 2) {
|
|
itemNo = dItem_ORANGE_RUPEE_e;
|
|
}
|
|
else if(field_0xD70 >= l_HIO.field_0x60[3] && dComIfGs_isEventBit(0xF10)) {
|
|
itemNo = dItem_SILVER_RUPEE_e;
|
|
}
|
|
else {
|
|
itemNo = dItem_HEART_PIECE_e;
|
|
dComIfGs_onEventBit(0xF10);
|
|
}
|
|
|
|
fpc_ProcID itemPID = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, 0, -1, current.roomNo);
|
|
if(itemPID != fpcM_ERROR_PROCESS_ID_e) {
|
|
dComIfGp_event_setItemPartnerId(itemPID);
|
|
}
|
|
|
|
field_0xD7D = itemNo;
|
|
}
|
|
|
|
/* 00004268-00004448 .text set_mtx__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::set_mtx() {
|
|
J3DModel* pModel = field_0x330->getModel();
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
pModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
field_0x330->calc();
|
|
field_0x3F8->setBaseTRMtx(pModel->getAnmMtx(m_jnt.getHeadJntNum()));
|
|
|
|
if(field_0x430) {
|
|
field_0x430->setGlobalRTMatrix(pModel->getAnmMtx(m_jnt.getHeadJntNum()));
|
|
}
|
|
|
|
if(field_0xD84 == 1) {
|
|
mDoMtx_stack_c::copy(pModel->getAnmMtx(handRJointNo));
|
|
mDoMtx_stack_c::XYZrotM(field_0xD5C);
|
|
mDoMtx_stack_c::transM(field_0xD50);
|
|
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
mpMorf->calc();
|
|
|
|
if(field_0xD84) {
|
|
cXyz temp(0.0f, 0.0f, 100.0f);
|
|
cXyz temp2(0.0f, 0.0f, -100.0f);
|
|
|
|
if(field_0xD64 == 0x14) {
|
|
temp.z = 70.0f;
|
|
}
|
|
|
|
field_0xB90 = field_0xB78;
|
|
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1));
|
|
mDoMtx_stack_c::multVec(&temp, &field_0xB78);
|
|
mDoMtx_stack_c::multVec(&temp2, &field_0xB84);
|
|
}
|
|
}
|
|
|
|
/* 00004448-00004488 .text getEventActionNo__11daNpc_Ji1_cFi */
|
|
s32 daNpc_Ji1_c::getEventActionNo(int staffIdx) {
|
|
static char* ActionNames[] = {
|
|
"00_dummy",
|
|
"01_dummy",
|
|
"02_dummy",
|
|
"03_dummy",
|
|
"04_dummy",
|
|
"05_dummy",
|
|
"06_dummy",
|
|
};
|
|
|
|
return dComIfGp_evmng_getMyActIdx(staffIdx, ActionNames, ARRAY_SIZE(ActionNames), FALSE, 0);
|
|
}
|
|
|
|
/* 00004488-00004714 .text eventAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::eventAction(void*) {
|
|
if(field_0xC78 == 0) {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName());
|
|
if(!eventInfo.checkCommandDemoAccrpt() && staffIdx == -1) {
|
|
fopAcM_orderOtherEventId(this, field_0xC54[field_0xC84]);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
|
|
return false;
|
|
}
|
|
|
|
field_0xC78 += 1;
|
|
}
|
|
else if(field_0xC78 == -1) {
|
|
field_0xC84 = 0x12;
|
|
}
|
|
else {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName());
|
|
privateCut();
|
|
AnimeControlToWait();
|
|
if(dComIfGp_evmng_endCheck(field_0xC54[field_0xC84])) {
|
|
dComIfGp_event_reset();
|
|
|
|
setAction(field_0x2C8, 0);
|
|
}
|
|
else if(staffIdx == -1) {
|
|
setAction(field_0x2C8, 0);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00004714-00004778 .text evn_init_pos_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_init_pos_init(int staffIdx) {
|
|
int* data = dComIfGp_evmng_getMyIntegerP(staffIdx, "AnmNo");
|
|
|
|
u32 value = 0;
|
|
if(data) {
|
|
value = *data;
|
|
}
|
|
|
|
initPos(value);
|
|
return 1;
|
|
}
|
|
|
|
/* 00004778-00004838 .text evn_setAnm_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_setAnm_init(int staffIdx) {
|
|
int* iData = dComIfGp_evmng_getMyIntegerP(staffIdx, "AnmNo");
|
|
f32* fData = dComIfGp_evmng_getMyFloatP(staffIdx, "hokan");
|
|
|
|
if(iData) {
|
|
int iVal = *iData;
|
|
f32 fVal = 0.0f;
|
|
if(fData) {
|
|
fVal = *fData;
|
|
}
|
|
|
|
if(field_0xD84 != 1 && iVal == 5) {
|
|
iVal = 1;
|
|
}
|
|
|
|
setAnm(iVal, fVal, 0);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 00004838-000049AC .text evn_talk_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_talk_init(int staffIdx) {
|
|
int* pMsgNo = dComIfGp_evmng_getMyIntegerP(staffIdx, "MsgNo");
|
|
int* pEndMsgNo = dComIfGp_evmng_getMyIntegerP(staffIdx, "EndMsgNo");
|
|
|
|
l_msgId = fpcM_ERROR_PROCESS_ID_e;
|
|
l_msg = 0;
|
|
if(pMsgNo) {
|
|
field_0x2AC = *pMsgNo;
|
|
if(field_0x2AC == 0x9A4) {
|
|
if(field_0xC38 == 2) {
|
|
field_0x2AC = 0x9A9;
|
|
}
|
|
else if(field_0xD7D == 7) {
|
|
field_0x2AC = 0x9A6;
|
|
}
|
|
}
|
|
else if(field_0x2AC == 0x9A1) {
|
|
if(field_0xC38 == 2) {
|
|
field_0x2AC = 0x9A7;
|
|
}
|
|
}
|
|
else if(field_0x2AC == 0x9B7) {
|
|
if(field_0x2C8 == &daNpc_Ji1_c::kaitenwaitAction) {
|
|
field_0x2AC = 0x95E;
|
|
}
|
|
else if(field_0x2C8 == &daNpc_Ji1_c::teachAction) {
|
|
field_0x2AC = 0x95D;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
field_0x2AC = 0;
|
|
}
|
|
|
|
if(pEndMsgNo) {
|
|
field_0xD80 = *pEndMsgNo;
|
|
}
|
|
else {
|
|
field_0xD80 = 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 000049AC-00004B1C .text evn_talk__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::evn_talk() {
|
|
if(l_msgId == fpcM_ERROR_PROCESS_ID_e) {
|
|
l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos);
|
|
}
|
|
else if(!l_msg) {
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
fopMsgM_demoMsgFlagOn();
|
|
}
|
|
else {
|
|
setAnimFromMsgNo(field_0x2AC);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = next_msgStatus(&field_0x2AC);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(field_0x2AC);
|
|
}
|
|
else if(l_msg->mStatus == fopMsgStts_MSG_ENDS_e) {
|
|
if(field_0x2AC == 0x9BA) {
|
|
field_0xD7B = 0;
|
|
field_0xD6C = 0;
|
|
}
|
|
else if(field_0x2AC == 0x95A) {
|
|
field_0xD7C = 0;
|
|
field_0xD6C = 0;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
l_msg = 0;
|
|
l_msgId = fpcM_ERROR_PROCESS_ID_e;
|
|
|
|
return true;
|
|
}
|
|
|
|
if((l_msg->mStatus == fopMsgStts_BOX_OPENING_e || l_msg->mStatus == fopMsgStts_MSG_TYPING_e) && field_0x2AC == field_0xD80) {
|
|
field_0xD80 = 0;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00004B1C-00004B84 .text evn_continue_talk_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_continue_talk_init(int staffIdx) {
|
|
int* data = dComIfGp_evmng_getMyIntegerP(staffIdx, "EndMsgNo");
|
|
|
|
if(data) {
|
|
field_0xD80 = *data;
|
|
}
|
|
else {
|
|
field_0xD80 = 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 00004B84-00004CF4 .text evn_continue_talk__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::evn_continue_talk() {
|
|
if(l_msgId == fpcM_ERROR_PROCESS_ID_e) {
|
|
l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos);
|
|
}
|
|
else if(!l_msg) {
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
fopMsgM_demoMsgFlagOn();
|
|
}
|
|
else {
|
|
setAnimFromMsgNo(field_0x2AC);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = next_msgStatus(&field_0x2AC);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(field_0x2AC);
|
|
}
|
|
else if(l_msg->mStatus == fopMsgStts_MSG_ENDS_e) {
|
|
if(field_0x2AC == 0x9BA) {
|
|
field_0xD7B = 0;
|
|
field_0xD6C = 0;
|
|
}
|
|
else if(field_0x2AC == 0x95A) {
|
|
field_0xD7C = 0;
|
|
field_0xD6C = 0;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
l_msg = 0;
|
|
l_msgId = fpcM_ERROR_PROCESS_ID_e;
|
|
|
|
return true;
|
|
}
|
|
|
|
if((l_msg->mStatus == fopMsgStts_BOX_OPENING_e || l_msg->mStatus == fopMsgStts_MSG_TYPING_e) && field_0x2AC == field_0xD80) {
|
|
field_0xD80 = 0;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00004CF4-00004D50 .text evn_setAngle_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_setAngle_init(int staffIdx) {
|
|
int* data = dComIfGp_evmng_getMyIntegerP(staffIdx, "angle");
|
|
|
|
if(data) {
|
|
current.angle.y = *data;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 00004D50-00004E8C .text evn_sound_proc_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_sound_proc_init(int staffIdx) {
|
|
int* data = dComIfGp_evmng_getMyIntegerP(staffIdx, "prm");
|
|
|
|
if(data) {
|
|
switch(*data) {
|
|
case 0:
|
|
mDoAud_bgmStop(45);
|
|
break;
|
|
case 1:
|
|
mDoAud_bgmStart(JA_BGM_HOUSE_G);
|
|
break;
|
|
case 2:
|
|
fopAcM_seStart(this, JA_SE_VS_JI_ENDING, 0);
|
|
break;
|
|
case 3:
|
|
dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 00004E8C-00004F60 .text evn_head_swing_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_head_swing_init(int staffIdx) {
|
|
int* pData = dComIfGp_evmng_getMyIntegerP(staffIdx, "prm");
|
|
u32 value;
|
|
if(!pData) {
|
|
value = 0;
|
|
}
|
|
else {
|
|
value = *pData;
|
|
}
|
|
|
|
switch(value) {
|
|
case 0:
|
|
field_0xBFC.swing_horizone_init(2, 0x1000, 0x1000, 1);
|
|
break;
|
|
case 1:
|
|
field_0xBFC.swing_vertical_init(2, 0x1000, 0x800, 1);
|
|
break;
|
|
case 2:
|
|
field_0xBFC.swing_vertical_init(1, 0x1400, 0x1000, 1);
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00004F60-00005008 .text evn_harpoon_proc_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_harpoon_proc_init(int staffIdx) {
|
|
int* pData = dComIfGp_evmng_getMyIntegerP(staffIdx, "prm");
|
|
u32 value;
|
|
if(!pData) {
|
|
value = 0;
|
|
}
|
|
else {
|
|
value = *pData;
|
|
}
|
|
|
|
switch(value) {
|
|
case 0:
|
|
harpoonRelease(0);
|
|
break;
|
|
case 1:
|
|
field_0xD84 = 0;
|
|
break;
|
|
case 2:
|
|
field_0xD84 = 1;
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00005008-00005078 .text evn_RollAtControl_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_RollAtControl_init(int staffIdx) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
field_0xD18 = 400.0f;
|
|
field_0xD16 = cLib_targetAngleY(¤t.pos, &player->current.pos);
|
|
field_0xD16 += 0x2000;
|
|
field_0xC30 = 30;
|
|
field_0xD68 = 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 00005078-00005314 .text evn_RollAtControl__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::evn_RollAtControl() {
|
|
static cXyz hit_scale(1.25f, 1.25f, 1.25f);
|
|
|
|
field_0xD16 += 0x540;
|
|
cLib_chaseF(&field_0xD18, 0.0f, 1.0f);
|
|
field_0xD1C = current.pos;
|
|
field_0xD1C.x += field_0xD18 * cM_ssin(field_0xD16);
|
|
field_0xD1C.z += field_0xD18 * cM_scos(field_0xD16);
|
|
dComIfGp_evmng_setGoal(&field_0xD1C);
|
|
field_0x6B0.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&field_0x6B0);
|
|
field_0x7E0.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&field_0x7E0);
|
|
if(field_0xC30 == 0xA) {
|
|
setAnm(0x19, 0.0f, 0);
|
|
BackSlideInit();
|
|
setHitParticle(&hit_scale, JA_SE_CV_JI_FUTTOBI);
|
|
}
|
|
if(field_0xD64 == 0x19) {
|
|
if(field_0x330->getFrame() < 10.0f) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
cXyz temp = player->current.pos - current.pos;
|
|
cLib_addCalcAngleS2(¤t.angle.y, cM_atan2s(temp.x, temp.z), 2, 0x2000);
|
|
}
|
|
else {
|
|
if(field_0x330->checkFrame(20.0f) && field_0xD68++ < 2) {
|
|
setHitParticle(&hit_scale, JA_SE_CV_JI_FUTTOBI);
|
|
BackSlideInit();
|
|
setAnm(0x19, 4.0f, 1);
|
|
}
|
|
}
|
|
|
|
BackSlide(120.0f, 10.0f);
|
|
}
|
|
|
|
if(field_0xC30 > 0) {
|
|
field_0xC30 -= 1;
|
|
}
|
|
else {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00005314-000053F8 .text evn_game_mode_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_game_mode_init(int staffIdx) {
|
|
int* data = dComIfGp_evmng_getMyIntegerP(staffIdx, "prm");
|
|
|
|
u32 value;
|
|
if(data) {
|
|
value = *data;
|
|
}
|
|
else {
|
|
value = 0;
|
|
}
|
|
|
|
switch(value) {
|
|
case 0:
|
|
dComIfGp_endMiniGame(6);
|
|
break;
|
|
case 1:
|
|
dComIfGp_startMiniGame(6);
|
|
game_life_point = 3;
|
|
case 2:
|
|
dComIfGp_endMiniGame(2);
|
|
break;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 000053F8-0000545C .text evn_turn_to_player__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::evn_turn_to_player() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
s16 target = cLib_targetAngleY(¤t.pos, &player->current.pos);
|
|
if (cLib_addCalcAngleS(¤t.angle.y, target, 4, 0x1000, 0x100) == 0) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* 0000545C-00005508 .text evn_hide_init__11daNpc_Ji1_cFi */
|
|
u32 daNpc_Ji1_c::evn_hide_init(int staffIdx) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
int* pData = dComIfGp_evmng_getMyIntegerP(staffIdx, "prm");
|
|
u32 value;
|
|
if(!pData) {
|
|
value = 0;
|
|
}
|
|
else {
|
|
value = *pData;
|
|
}
|
|
|
|
if((value & 1) == 0) {
|
|
field_0xD85 = 0;
|
|
}
|
|
else {
|
|
field_0xD85 = 1;
|
|
}
|
|
|
|
if(value & 2) {
|
|
player->onPlayerNoDraw();
|
|
}
|
|
else {
|
|
player->offPlayerNoDraw();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00005508-000055E4 .text AnimeControlToWait__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::AnimeControlToWait() {
|
|
/* Nonmatching */
|
|
if(field_0x330->getPlayMode() == J3DFrameCtrl::EMode_NONE) {
|
|
if(field_0x330->checkFrame(field_0x330->getEndFrame() - 1.0f)) {
|
|
if(isAttackAnim() || isGuardAnim()) {
|
|
setAnm(5, 4.0f, 0);
|
|
}
|
|
else if(isItemWaitAnim()) {
|
|
setAnm(0, 4.0f, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000055E4-000057DC .text privateCut__11daNpc_Ji1_cFv */
|
|
u32 daNpc_Ji1_c::privateCut() {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName());
|
|
if(staffIdx == -1) {
|
|
return false;
|
|
}
|
|
|
|
static char* cut_name_tbl[] = {
|
|
"SETANM",
|
|
"TALKMSG",
|
|
"INITPOS",
|
|
"CREATEITEM",
|
|
"SOUND",
|
|
"HEADSWING",
|
|
"HARPOON",
|
|
"ROLLAT_CNT",
|
|
"GAME_MODE",
|
|
"TURN_TO_PLAYER",
|
|
"HIDE",
|
|
"CONTINUETALK",
|
|
"SETANGLE",
|
|
};
|
|
enum {
|
|
ACT_SETANM,
|
|
ACT_TALKMSG,
|
|
ACT_INITPOS,
|
|
ACT_CREATEITEM,
|
|
ACT_SOUND,
|
|
ACT_HEADSWING,
|
|
ACT_HARPOON,
|
|
ACT_ROLLAT_CNT,
|
|
ACT_GAME_MODE,
|
|
ACT_TURN_TO_PLAYER,
|
|
ACT_HIDE,
|
|
ACT_CONTINUETALK,
|
|
ACT_SETANGLE,
|
|
};
|
|
int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), 1, 0);
|
|
if(actIdx == -1) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
else {
|
|
if(dComIfGp_evmng_getIsAddvance(staffIdx)) {
|
|
switch(actIdx) {
|
|
case ACT_SETANM:
|
|
evn_setAnm_init(staffIdx);
|
|
break;
|
|
case ACT_TALKMSG:
|
|
evn_talk_init(staffIdx);
|
|
break;
|
|
case ACT_INITPOS:
|
|
evn_init_pos_init(staffIdx);
|
|
break;
|
|
case ACT_CREATEITEM:
|
|
createItem();
|
|
break;
|
|
case ACT_SOUND:
|
|
evn_sound_proc_init(staffIdx);
|
|
break;
|
|
case ACT_HEADSWING:
|
|
evn_head_swing_init(staffIdx);
|
|
break;
|
|
case ACT_HARPOON:
|
|
evn_harpoon_proc_init(staffIdx);
|
|
break;
|
|
case ACT_ROLLAT_CNT:
|
|
evn_RollAtControl_init(staffIdx);
|
|
break;
|
|
case ACT_GAME_MODE:
|
|
evn_game_mode_init(staffIdx);
|
|
break;
|
|
case ACT_HIDE:
|
|
evn_hide_init(staffIdx);
|
|
break;
|
|
case ACT_CONTINUETALK:
|
|
evn_continue_talk_init(staffIdx);
|
|
break;
|
|
case ACT_SETANGLE:
|
|
evn_setAngle_init(staffIdx);
|
|
break;
|
|
}
|
|
}
|
|
|
|
BOOL end;
|
|
switch(actIdx) {
|
|
case ACT_TALKMSG:
|
|
end = evn_talk();
|
|
break;
|
|
case ACT_ROLLAT_CNT:
|
|
end = evn_RollAtControl();
|
|
break;
|
|
case ACT_TURN_TO_PLAYER:
|
|
end = evn_turn_to_player();
|
|
break;
|
|
case ACT_CONTINUETALK:
|
|
end = evn_continue_talk();
|
|
break;
|
|
default:
|
|
end = true;
|
|
}
|
|
|
|
if(end) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 000057DC-000058B8 .text setParticle__11daNpc_Ji1_cFiff */
|
|
u32 daNpc_Ji1_c::setParticle(int max, f32 rate, f32 spread) {
|
|
dtParticle();
|
|
if(field_0x2E0.getEmitter() == 0) {
|
|
JPABaseEmitter* emitter = dComIfGp_particle_setToon(dPa_name::ID_COMMON_2022, ¤t.pos, 0, 0, 0xB9, &field_0x2E0, fopAcM_GetRoomNo(this));
|
|
if(emitter) {
|
|
emitter->setRate(rate);
|
|
emitter->setSpread(spread);
|
|
emitter->setRandomDirectionSpeed(1.5f);
|
|
emitter->setMaxFrame(max);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 000058B8-000058F0 .text dtParticle__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::dtParticle() {
|
|
if(field_0x2E0.getEmitter()) {
|
|
field_0x2E0.remove();
|
|
}
|
|
}
|
|
|
|
/* 000058F0-000059E8 .text setParticleAT__11daNpc_Ji1_cFiff */
|
|
u32 daNpc_Ji1_c::setParticleAT(int max, f32 rate, f32 spread) {
|
|
if(field_0x300.getEmitter() == 0) {
|
|
JPABaseEmitter* emitter = dComIfGp_particle_setToon(dPa_name::ID_COMMON_2022, &field_0x320, 0, 0, 0xB9, &field_0x300, fopAcM_GetRoomNo(this));
|
|
if(field_0x300.getEmitter()) {
|
|
JGeometry::TVec3<f32> scaleVec;
|
|
scaleVec.x = 2.0f;
|
|
scaleVec.y = 2.0f;
|
|
scaleVec.z = 2.0f;
|
|
emitter->setGlobalParticleScale(scaleVec);
|
|
emitter->setVolumeSweep(0.15f);
|
|
emitter->setRate(rate);
|
|
emitter->setSpread(spread);
|
|
emitter->setRandomDirectionSpeed(1.5f);
|
|
emitter->setMaxFrame(max);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 000059E8-00005A20 .text dtParticleAT__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::dtParticleAT() {
|
|
if(field_0x300.getEmitter()) {
|
|
field_0x300.remove();
|
|
}
|
|
}
|
|
|
|
/* 00005A20-00005F30 .text startspeakAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::startspeakAction(void*) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00005F30-00006238 .text endspeakAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::endspeakAction(void*) {
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1");
|
|
int actionNo = getEventActionNo(staffIdx);
|
|
|
|
if(field_0xC78 == 0) {
|
|
if(!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderOtherEventId(this, field_0xC54[2]);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
|
|
return false;
|
|
}
|
|
|
|
if(actionNo == 0) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
|
|
if(dComIfGs_isEventBit(0x520)) {
|
|
field_0x2AC = 0x996;
|
|
}
|
|
else if(dComIfGs_isEventBit(0x1)) {
|
|
field_0x2AC = 0x96D;
|
|
}
|
|
else if(!dComIfGs_isEventBit(0x2F40)) {
|
|
field_0x2AC = 0x950;
|
|
}
|
|
else {
|
|
field_0x2AC = 0x954;
|
|
}
|
|
|
|
field_0xC78 += 1;
|
|
l_msgId = -1;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
if(l_msgId == -1) {
|
|
l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos);
|
|
setAnm(5, 4.0f, 0);
|
|
}
|
|
else {
|
|
if(field_0xC78 == 1) {
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
if(l_msg) {
|
|
field_0xC78 += 1;
|
|
}
|
|
}
|
|
else {
|
|
if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
setAnimFromMsgNo(field_0x2AC);
|
|
l_msg->mStatus = next_msgStatus(&field_0x2AC);
|
|
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(field_0x2AC);
|
|
}
|
|
}
|
|
else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
mDoAud_bgmStop(45);
|
|
setAction(&daNpc_Ji1_c::reiAction, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00006238-00006728 .text reiAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::reiAction(void*) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00006728-00006C1C .text plmoveAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::plmoveAction(void*) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00006C1C-00007140 .text teachMove__11daNpc_Ji1_cFf */
|
|
void daNpc_Ji1_c::teachMove(f32 param_1) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00007140-00007424 .text teachSpRollCutMove__11daNpc_Ji1_cFf */
|
|
BOOL daNpc_Ji1_c::teachSpRollCutMove(float) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00007424-000074B0 .text calcCoCorrectValue__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::calcCoCorrectValue() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 000074B0-00007548 .text calcBgCorrectValue__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::calcBgCorrectValue() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00007548-00007A80 .text MoveToPlayer__11daNpc_Ji1_cFfUc */
|
|
BOOL daNpc_Ji1_c::MoveToPlayer(f32, u8) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00007A80-00007B14 .text teachSubActionAttackInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::teachSubActionAttackInit() {
|
|
/* Nonmatching */
|
|
|
|
setAnm(0x7, 0.0f, 0);
|
|
field_0x330->setPlaySpeed(0.4f);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0);
|
|
}
|
|
|
|
/* 00007B14-00007D2C .text teachSubActionAttack__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::teachSubActionAttack() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00007D2C-00007D8C .text teachSubActionJumpInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::teachSubActionJumpInit() {
|
|
setAnm(0xB, 0.0f, 1);
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
}
|
|
|
|
/* 00007D8C-00007F14 .text teachSubActionJump__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::teachSubActionJump() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00007F14-00009070 .text teachAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::teachAction(void*) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00009070-00009B64 .text teachSPRollCutAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) {
|
|
/* Nonmatching */
|
|
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
if(field_0xC78 == 0) {
|
|
dComIfGp_setItemMagicCount(dComIfGs_getMaxMagic());
|
|
setAnm(5, 0.0f, 0);
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_MISC_e);
|
|
field_0xC90 = 0;
|
|
field_0xD34 = 0;
|
|
field_0xC30 = 0;
|
|
dComIfGs_onTmpBit(0x402);
|
|
field_0xD70 = 6;
|
|
field_0xC78++;
|
|
}
|
|
else if(field_0xC78 != -1) {
|
|
dComIfGp_setItemMagicCount(dComIfGs_getMaxMagic());
|
|
if(daNpc_Ji1_plRoomOutCheck()) {
|
|
field_0xC84 = 9;
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
field_0x2C8 = &daNpc_Ji1_c::teachSPRollCutAction;
|
|
|
|
return true;
|
|
}
|
|
else {
|
|
cXyz temp = player->current.pos - current.pos;
|
|
cM_atan2s(temp.x, temp.z);
|
|
f32 what = temp.absXZ();
|
|
|
|
s32 cutType = player->getCutType();
|
|
f32 y_diff = std::fabsf(temp.y);
|
|
if(cutType == 9 && y_diff < 20.0f) {
|
|
dComIfGs_onEventBit(0xB20);
|
|
dComIfGs_offTmpBit(0x402);
|
|
dComIfGp_setItemBeastNumCount(3, -10);
|
|
field_0x7E0.OffTgShield();
|
|
field_0xC84 = 10;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
field_0x2C8 = &daNpc_Ji1_c::teachSPRollCutAction;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
if(cutType == 8) {
|
|
field_0xC84 = 0xB;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
field_0x2C8 = &daNpc_Ji1_c::teachSPRollCutAction;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
field_0x7E0.OnTgShield();
|
|
if(field_0x7E0.ChkTgHit() && field_0xD6C != 1) {
|
|
switch(field_0xC24) {
|
|
case 1:
|
|
case 6:
|
|
case 8:
|
|
setAnm(8, 0.0f, 1);
|
|
break;
|
|
case 9:
|
|
break;
|
|
case 10:
|
|
setAnm(10, 0.0f, 1);
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
break;
|
|
default:
|
|
setAnm(9, 0.0f, 1);
|
|
}
|
|
|
|
if(field_0xC24 == 9) {
|
|
setHitParticle(0, 0x4833);
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
setParticle(0x10, 1.0f, 0.1f);
|
|
}
|
|
else {
|
|
setGuardParticle();
|
|
}
|
|
|
|
field_0xD6C = 1;
|
|
field_0xC8C = field_0xC24;
|
|
}
|
|
|
|
if(field_0xD6C == 1) {
|
|
if(!player->getCutAtFlg() || field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) {
|
|
if(field_0xC90 == 0) {
|
|
if(field_0xC8C == 9) {
|
|
field_0xC84 = 0xA;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
|
|
field_0x2C8 = &daNpc_Ji1_c::normalAction;
|
|
|
|
return true;
|
|
}
|
|
|
|
fopAcM_orderOtherEventId(this, field_0xC54[3]);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
field_0xC90 = 2;
|
|
}
|
|
}
|
|
|
|
if(field_0xD64 == 10 && field_0xC8C == 9) {
|
|
cLib_addCalc2(&field_0xC9C, l_HIO.field_0x34 * 2.0f, 0.25f, l_HIO.field_0x38);
|
|
cXyz temp(field_0xD38);
|
|
temp.x -= field_0xC9C * cM_ssin(current.angle.y);
|
|
temp.z -= field_0xC9C * cM_scos(current.angle.y);
|
|
|
|
f32 temp2 = 45.0f;
|
|
if(field_0x434.ChkWallHit()) {
|
|
temp2 = 10.0f;
|
|
}
|
|
|
|
cLib_addCalcPos2(¤t.pos, temp, 0.8f, temp2);
|
|
fopAcM_seStart(this, JA_SE_CM_JI_SLIP, 0);
|
|
}
|
|
|
|
if(field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) {
|
|
field_0x6B0.OffTgShield();
|
|
field_0x7E0.OnTgShield();
|
|
if(field_0xC90 == 2) {
|
|
field_0xD6C = 0;
|
|
field_0xC9C = 0.0f;
|
|
field_0xD38 = current.pos;
|
|
|
|
field_0xC4C = 0.0f;
|
|
field_0xC50 = 0.0f;
|
|
field_0xC2C = 0.0f;
|
|
|
|
setAction(&daNpc_Ji1_c::speakBadAction, 0);
|
|
}
|
|
else {
|
|
field_0xC90 = 0;
|
|
field_0xD6C = 0;
|
|
field_0xC9C = 0.0f;
|
|
field_0xD38 = current.pos;
|
|
|
|
setAction(&daNpc_Ji1_c::speakAction, 0);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if(!teachSpRollCutMove(1.0f)) {
|
|
if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) {
|
|
setAnm(5, 4.0f, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(field_0xD6C != 1) {
|
|
dtParticle();
|
|
}
|
|
if(field_0xD6C != 1 && isGuardAnim()) {
|
|
if(field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) {
|
|
setAnm(5, 4.0f, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00009B64-00009B7C .text playerCutAtCheck__Fv */
|
|
static bool playerCutAtCheck() {
|
|
/* Nonmatching */
|
|
|
|
return daPy_getPlayerActorClass()->getCutAtFlg();
|
|
}
|
|
|
|
/* 00009B7C-00009F1C .text battleGameSetTimer__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleGameSetTimer() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00009F1C-0000A400 .text battleMove__11daNpc_Ji1_cFf */
|
|
void daNpc_Ji1_c::battleMove(f32) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000A400-0000A430 .text battleSubActionWaitInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionWaitInit() {
|
|
/* Nonmatching */
|
|
|
|
field_0xC9C = 0;
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionWait);
|
|
}
|
|
|
|
/* 0000A430-0000A564 .text battleSubActionWait__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionWait() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000A564-0000A5FC .text battleSubActionNockBackInit__11daNpc_Ji1_cFi */
|
|
void daNpc_Ji1_c::battleSubActionNockBackInit(int param_1) {
|
|
if(param_1) {
|
|
setGuardParticle();
|
|
}
|
|
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
field_0x330->setPlaySpeed(-1.0f);
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionNockBack);
|
|
field_0x2A4 = 30.0f;
|
|
}
|
|
|
|
/* 0000A5FC-0000A744 .text battleSubActionNockBack__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionNockBack() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000A744-0000A808 .text battleSubActionAttackInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionAttackInit() {
|
|
/* Nonmatching */
|
|
|
|
setAnm(0x7, 0.0f, 0);
|
|
field_0x330->setPlaySpeed(l_HIO.field_0x6C);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0);
|
|
field_0xC34 = 0;
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionYokoAttack);
|
|
}
|
|
|
|
/* 0000A808-0000AAA4 .text battleSubActionAttack__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionAttack() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000AAA4-0000AB68 .text battleSubActionTateAttackInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionTateAttackInit() {
|
|
/* Nonmatching */
|
|
|
|
setAnm(0x13, 0.0f, 0);
|
|
field_0x330->setPlaySpeed(l_HIO.field_0x78);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0);
|
|
field_0xC34 = 0;
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionYokoAttack);
|
|
}
|
|
|
|
/* 0000AB68-0000AE2C .text battleSubActionTateAttack__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionTateAttack() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000AE2C-0000AEF0 .text battleSubActionYokoAttackInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionYokoAttackInit() {
|
|
/* Nonmatching */
|
|
|
|
setAnm(0x14, 0.0f, 0);
|
|
field_0x330->setPlaySpeed(l_HIO.field_0x80);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0);
|
|
field_0xC34 = 0;
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionYokoAttack);
|
|
}
|
|
|
|
/* 0000AEF0-0000B254 .text battleSubActionYokoAttack__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionYokoAttack() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000B254-0000B2D4 .text battleSubActionJumpInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionJumpInit() {
|
|
/* Nonmatching */
|
|
|
|
setAnm(0xB, 0.0f, 1);
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionJump);
|
|
}
|
|
|
|
/* 0000B2D4-0000B5EC .text battleSubActionJump__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionJump() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000B5EC-0000B67C .text battleSubActionDamageInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionDamageInit() {
|
|
/* Nonmatching */
|
|
|
|
setAnm(0x19, 0.0f, 1);
|
|
field_0x330->setPlaySpeed(1.5f);
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionDamage);
|
|
}
|
|
|
|
/* 0000B67C-0000B8AC .text battleSubActionDamage__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionDamage() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000B8AC-0000B92C .text battleSubActionJpGuardInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionJpGuardInit() {
|
|
/* Nonmatching */
|
|
|
|
setAnm(0xA, 0.0f, 1);
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionJpGuard);
|
|
}
|
|
|
|
/* 0000B92C-0000BAEC .text battleSubActionJpGuard__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionJpGuard() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000BAEC-0000BB6C .text battleSubActionGuardInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleSubActionGuardInit() {
|
|
/* Nonmatching */
|
|
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
setParticle(0x10, 1.0f, 0.1f);
|
|
setSubAction(&daNpc_Ji1_c::battleSubActionGuard);
|
|
}
|
|
|
|
/* 0000BB6C-0000BD8C .text battleSubActionGuard__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleSubActionGuard() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000BD8C-0000BFE0 .text battleAtSet__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::battleAtSet() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 0000BFE0-0000C7E4 .text battleGuardCheck__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::battleGuardCheck() {
|
|
/* Nonmatching */
|
|
|
|
if(field_0x7E0.ChkTgHit() && field_0xD6C != 1) {
|
|
switch(field_0xC24) {
|
|
case 0xF:
|
|
case 0x10:
|
|
battleSubActionJumpInit();
|
|
break;
|
|
case 5:
|
|
current.angle.y += 0x8000;
|
|
battleSubActionDamageInit();
|
|
break;
|
|
case 0x1:
|
|
case 0x6:
|
|
case 0x8:
|
|
case 0x9:
|
|
case 0x1A: {
|
|
if(!isAttackAnim()) {
|
|
if(!checkSubAction(&daNpc_Ji1_c::battleSubActionNockBack)) {
|
|
setAnm(8, 0.0f, 1);
|
|
battleSubActionGuardInit();
|
|
break;
|
|
}
|
|
}
|
|
|
|
int attackFrame = isAttackFrame();
|
|
if(checkSubAction(&daNpc_Ji1_c::battleSubActionNockBack)) {
|
|
setAnm(8, 0.0f, 1);
|
|
battleSubActionGuardInit();
|
|
}
|
|
else {
|
|
if(attackFrame == 0) {
|
|
battleSubActionNockBackInit(1);
|
|
field_0xD6C = 1;
|
|
return 0;
|
|
}
|
|
|
|
if(attackFrame == 1) {
|
|
setAnm(8, 0.0f, 1);
|
|
battleSubActionGuardInit();
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 0xA:
|
|
battleSubActionJpGuardInit();
|
|
break;
|
|
case 0x0:
|
|
case 0x2:
|
|
case 0x3:
|
|
case 0x4:
|
|
case 0x7:
|
|
case 0xB:
|
|
case 0xC:
|
|
case 0xD:
|
|
case 0xE:
|
|
case 0x11:
|
|
case 0x12:
|
|
case 0x13:
|
|
case 0x14:
|
|
case 0x15:
|
|
case 0x16:
|
|
case 0x17:
|
|
case 0x18:
|
|
case 0x19:
|
|
case 0x1B:
|
|
case 0x1C:
|
|
case 0x1D:
|
|
case 0x1E:
|
|
case 0x1F:
|
|
default: {
|
|
if(!isAttackAnim()) {
|
|
if(!checkSubAction(&daNpc_Ji1_c::battleSubActionNockBack)) {
|
|
setAnm(9, 0.0f, 1);
|
|
battleSubActionGuardInit();
|
|
break;
|
|
}
|
|
}
|
|
|
|
int attackFrame = isAttackFrame();
|
|
if(checkSubAction(&daNpc_Ji1_c::battleSubActionNockBack)) {
|
|
setAnm(9, 0.0f, 1);
|
|
battleSubActionGuardInit();
|
|
}
|
|
else {
|
|
if(attackFrame == 0) {
|
|
battleSubActionNockBackInit(1);
|
|
field_0xD6C = 1;
|
|
return 0;
|
|
}
|
|
|
|
if(attackFrame == 1) {
|
|
setAnm(9, 0.0f, 1);
|
|
battleSubActionGuardInit();
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(field_0xC24 == 0) {
|
|
setGuardParticle();
|
|
}
|
|
else {
|
|
if(field_0xC24 == 0xF || field_0xC24 == 0x10 || field_0xC24 == 0x5) {
|
|
fopAcM_seStart(this, JA_SE_LK_SW_CRT_HIT, 0);
|
|
|
|
static cXyz scale(1.25f, 1.25f, 1.25f);
|
|
if(field_0xC24 == 5) {
|
|
setHitParticle(&scale, JA_SE_CV_JI_FUTTOBI);
|
|
}
|
|
else {
|
|
setHitParticle(&scale, JA_SE_CV_JI_DEFENCE);
|
|
}
|
|
|
|
if(field_0xD70 < l_HIO.field_0x60[3] - 1) {
|
|
field_0xD70 += 2;
|
|
|
|
dComIfGp_plusMiniGameRupee(2);
|
|
}
|
|
else {
|
|
field_0xD70 += 1;
|
|
|
|
dComIfGp_plusMiniGameRupee(1);
|
|
}
|
|
}
|
|
else {
|
|
setHitParticle(0, JA_SE_CV_JI_DEFENCE);
|
|
field_0xD70 += 1;
|
|
|
|
dComIfGp_plusMiniGameRupee(1);
|
|
}
|
|
|
|
if(field_0xD70 >= l_HIO.field_0x60[3]) {
|
|
field_0xC84 = 8;
|
|
if(dComIfGs_isEventBit(0xF20)) {
|
|
field_0xC38 = 2;
|
|
}
|
|
else if(dComIfGs_isEventBit(0xF10)) {
|
|
field_0xC38 = 0;
|
|
}
|
|
else {
|
|
field_0xC38 = 1;
|
|
}
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
|
|
dComIfGp_setMessageCountNumber(field_0xD70);
|
|
field_0x2C8 = &daNpc_Ji1_c::normalAction;
|
|
if (dComIfG_getTimerPtr()) {
|
|
dComIfG_TimerDeleteRequest();
|
|
setClearRecord(field_0xD70);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
field_0xD6C = 1;
|
|
field_0x2A4 = 30.0f;
|
|
}
|
|
|
|
if(!field_0xA40.ChkAtShieldHit() && field_0xA40.ChkAtHit()) {
|
|
field_0xA40.ClrAtHit();
|
|
}
|
|
|
|
if(field_0xC3C > 2) {
|
|
if(checkAction(&daNpc_Ji1_c::battleAction)) {
|
|
dComIfG_TimerDeleteRequest();
|
|
|
|
if(isClearRecord(field_0xD70)) {
|
|
setClearRecord(field_0xD70);
|
|
field_0xC84 = 7;
|
|
|
|
setAction(&daNpc_Ji1_c::eventAction, 0);
|
|
|
|
dComIfGp_setMessageCountNumber(field_0xD70);
|
|
field_0x2C8 = &daNpc_Ji1_c::normalAction;
|
|
}
|
|
else {
|
|
setAction(&daNpc_Ji1_c::endspeakAction, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 0000C7E4-0000CA98 .text battleAction__11daNpc_Ji1_cFPv */
|
|
BOOL daNpc_Ji1_c::battleAction(void*) {
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
|
|
if(field_0xC78 == 0) {
|
|
u8 icon;
|
|
switch(dComIfGs_getSelectEquip(0)) {
|
|
case dItem_SWORD_e:
|
|
icon = 1;
|
|
break;
|
|
icon = 2;
|
|
break;
|
|
case dItem_MASTER_SWORD_2_e:
|
|
icon = 2;
|
|
break;
|
|
case dItem_MASTER_SWORD_1_e:
|
|
default:
|
|
icon = 2;
|
|
break;
|
|
}
|
|
|
|
dTimer_createTimer(6, 1000, 2, icon, 221.0f, 439.0f, 32.0f, 419.0f);
|
|
dComIfGp_setMiniGameRupee(0);
|
|
field_0xC3C = 0;
|
|
setAnm(5, 0.0f, 0);
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_MISC_e);
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_BATTLE_e);
|
|
attention_info.distances[fopAc_Attn_TYPE_BATTLE_e] = 3;
|
|
field_0xC30 = (s16)cM_rndF(150.0f) + 30;
|
|
field_0xD70 = 0;
|
|
field_0xD6C = 0;
|
|
battleSubActionWaitInit();
|
|
field_0xC38 = 0;
|
|
field_0xC78++;
|
|
}
|
|
else if(field_0xC78 == -1) {
|
|
cLib_offBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_BATTLE_e);
|
|
attention_info.distances[fopAc_Attn_TYPE_BATTLE_e] = 0xB5;
|
|
}
|
|
else {
|
|
cXyz temp = player->current.pos - current.pos;
|
|
cM_atan2s(temp.x, temp.z);
|
|
f32 what = temp.absXZ();
|
|
field_0x7E0.OffTgShield();
|
|
battleGuardCheck();
|
|
(this->*field_0x2D4)();
|
|
|
|
if(field_0xD6C != 1) {
|
|
dtParticle();
|
|
}
|
|
|
|
if(!isAttackAnim() || checkSubAction(&daNpc_Ji1_c::battleSubActionNockBack)) {
|
|
dtParticleAT();
|
|
}
|
|
|
|
game_life_point = cLib_minLimit<int>(3 - field_0xC3C, 0);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000CA98-0000CC28 .text checkCutType__11daNpc_Ji1_cFii */
|
|
BOOL daNpc_Ji1_c::checkCutType(int param_1, int param_2) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
BOOL ret = false;
|
|
switch(param_2) {
|
|
case 0:
|
|
switch(param_1) {
|
|
case 3:
|
|
case 7:
|
|
case 0x1A:
|
|
case 0x1B:
|
|
case 0x1E:
|
|
case 0x1F:
|
|
ret = true;
|
|
break;
|
|
case 8:
|
|
if(player->checkComboCutTurn()) {
|
|
ret = true;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
switch(param_1) {
|
|
case 0:
|
|
case 3:
|
|
case 6:
|
|
case 0x1A:
|
|
case 0x1B:
|
|
case 0x1E:
|
|
case 0x1F:
|
|
ret = true;
|
|
break;
|
|
case 8:
|
|
if(player->checkComboCutTurn()) {
|
|
ret = true;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
switch(param_1) {
|
|
case 0:
|
|
case 3:
|
|
case 6:
|
|
case 0x1A:
|
|
case 0x1B:
|
|
case 0x1E:
|
|
case 0x1F:
|
|
ret = true;
|
|
break;
|
|
case 8:
|
|
if(player->checkComboCutTurn()) {
|
|
ret = true;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
switch(param_1) {
|
|
case 8:
|
|
case 9:
|
|
ret = true;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 4:
|
|
switch(param_1) {
|
|
case 5:
|
|
case 0xF:
|
|
case 0x10:
|
|
ret = true;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
switch(param_1) {
|
|
case 0xA:
|
|
ret = true;
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 0000CC28-0000CF28 .text setAnimFromMsgNo__11daNpc_Ji1_cFUl */
|
|
void daNpc_Ji1_c::setAnimFromMsgNo(u32 msgNo) {
|
|
/* Nonmatching */
|
|
|
|
if(l_msg) {
|
|
msgNo = l_msg->mMsgNo;
|
|
}
|
|
|
|
// the switch cases for this are annoying to work out
|
|
switch(msgNo) {
|
|
case 0x9B1:
|
|
if(field_0xD84 == 1) {
|
|
setAnm(0, 4.0f, 0);
|
|
return;
|
|
}
|
|
|
|
setAnm(1, 4.0f, 0);
|
|
return;
|
|
case 0x961:
|
|
case 0x986:
|
|
setAnm(3, 8.0f, 0);
|
|
return;
|
|
case 0x962:
|
|
setAnm(3, 4.0f, 0);
|
|
return;
|
|
case 0x9AF:
|
|
case 0x9B3:
|
|
case 0x9B4:
|
|
if(field_0xD84 == 1) {
|
|
setAnm(0, 4.0f, 0);
|
|
return;
|
|
}
|
|
|
|
setAnm(2, 4.0f, 0);
|
|
return;
|
|
case 0x963:
|
|
case 0x964:
|
|
case 0x965:
|
|
case 0x966:
|
|
case 0x967:
|
|
case 0x968:
|
|
setAnm(2, 4.0f, 0);
|
|
return;
|
|
case 0x975:
|
|
setAnm(4, 4.0f, 0);
|
|
return;
|
|
case 0x9AE:
|
|
if(field_0xD64 == 0x16 && field_0x330->checkFrame(field_0x330->getEndFrame() - 1)) {
|
|
setAnm(0x15, l_HIO.field_0xA8, 0);
|
|
return;
|
|
}
|
|
|
|
if(field_0xD64 != 0x15) {
|
|
setAnm(0x16, l_HIO.field_0xA4, 0);
|
|
}
|
|
|
|
return;
|
|
case 0x9B9:
|
|
if(l_msg->mStatus != 0xE) {
|
|
return;
|
|
}
|
|
if(field_0xD64 != 0x17) {
|
|
return;
|
|
}
|
|
|
|
if(field_0x430 != 0) {
|
|
field_0x430->becomeInvalidEmitter();
|
|
field_0x430 = 0;
|
|
field_0x430 = dComIfGp_particle_set(dPa_name::ID_SCENE_81A5, ¤t.pos);
|
|
}
|
|
|
|
setAnm(0x18, 8.0f, 0);
|
|
field_0xD84 = 1;
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
/* 0000CF28-0000DAB0 .text setAnm__11daNpc_Ji1_cFifi */
|
|
BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) {
|
|
/* Nonmatching */
|
|
|
|
if(param_3 == 0 & field_0xD64 - param_1 == 0) {
|
|
return false;
|
|
}
|
|
else {
|
|
field_0xD64 = param_1;
|
|
|
|
f32 speed = 1.0f;
|
|
if(param_1 != field_0xD64 && isGuardAnim()) {
|
|
fopAcM_seStart(this, JA_SE_CM_JI_DEFENSE, 0);
|
|
}
|
|
|
|
J3DAnmTransform* bckAnm;
|
|
s32 loopMode;
|
|
void* pSoundAnimRes;
|
|
|
|
switch(param_1) {
|
|
case 0:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_WAIT01));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_WAIT01);
|
|
|
|
break;
|
|
case 1:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_WAIT02));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_WAIT02);
|
|
|
|
break;
|
|
case 2:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_TALK01));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TALK01);
|
|
|
|
break;
|
|
case 3:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_TALK02));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TALK02);
|
|
|
|
break;
|
|
case 4:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_AKIRE));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_AKIRE);
|
|
|
|
break;
|
|
case 5:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_KAMAE));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_KAMAE);
|
|
|
|
break;
|
|
case 6:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_KROT));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_KROT);
|
|
speed = l_HIO.field_0x48;
|
|
|
|
break;
|
|
case 7:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_INASI));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_INASI);
|
|
speed = l_HIO.field_0x44;
|
|
|
|
break;
|
|
case 8:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_TATEGUARD));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TATEGUARD);
|
|
|
|
break;
|
|
case 9:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_YKGUARD));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_YKGUARD);
|
|
|
|
break;
|
|
case 10:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_JPGUARD));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_JPGUARD);
|
|
|
|
break;
|
|
case 11:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_TOKAMAE));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TOKAMAE);
|
|
|
|
break;
|
|
case 12:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_REI));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_REI);
|
|
|
|
break;
|
|
case 13:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_WARAI));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_WARAI);
|
|
speed = l_HIO.field_0x4C;
|
|
|
|
break;
|
|
case 14:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_JPGUARD));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_JPGUARD);
|
|
speed = 2.0f;
|
|
|
|
break;
|
|
case 15:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_GUARD));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_GUARD);
|
|
speed = 2.0f;
|
|
|
|
break;
|
|
case 16:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_BTKAMASI));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_BTKAMASI);
|
|
|
|
break;
|
|
case 17:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_BTKAMAE));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_BTKAMAE);
|
|
|
|
break;
|
|
case 18:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_UDEGUMI));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_UDEGUMI);
|
|
|
|
break;
|
|
case 19:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_TATEATTACK));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TATEATTACK);
|
|
|
|
break;
|
|
case 20:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_YOKOATTACK));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_YOKOATTACK);
|
|
|
|
break;
|
|
case 21:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_ODOROKU));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_ODOROKU);
|
|
|
|
break;
|
|
case 22:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_BIBIRI));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_BIBIRI);
|
|
|
|
BackSlideInit();
|
|
if(field_0xD84 == 1) {
|
|
harpoonRelease(0);
|
|
}
|
|
|
|
break;
|
|
case 23:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_NAKU));
|
|
loopMode = J3DFrameCtrl::EMode_LOOP;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_NAKU);
|
|
|
|
if(field_0x430 == 0) {
|
|
field_0x430 = dComIfGp_particle_set(dPa_name::ID_SCENE_81A4, ¤t.pos);
|
|
harpoonRelease(0);
|
|
}
|
|
|
|
break;
|
|
case 24:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_NUGUI));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_NUGUI);
|
|
|
|
break;
|
|
case 25:
|
|
bckAnm = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("Ji", JI_BCK_JI_DAMAGE));
|
|
loopMode = J3DFrameCtrl::EMode_NONE;
|
|
pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_DAMAGE);
|
|
|
|
break;
|
|
default:
|
|
return 0;
|
|
}
|
|
|
|
field_0x330->setAnm(bckAnm, loopMode, param_2, speed, 0.0f, -1.0f, pSoundAnimRes);
|
|
if(field_0xD64 == 0x13) {
|
|
mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_TATEATTACK), J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f, 0.0f, -1.0f, NULL);
|
|
}
|
|
else if(field_0xD64 == 0x14) {
|
|
mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_YOKOATTACK), J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f, 0.0f, -1.0f, NULL);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* 0000DAB0-0000DC04 .text nodeCallBack1__FP7J3DNodei */
|
|
static BOOL nodeCallBack1(J3DNode* node, int calcTiming) {
|
|
/* Nonmatching */
|
|
|
|
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
daNpc_Ji1_c* i_this = (daNpc_Ji1_c*)model->getUserArea();
|
|
s32 jntNo = joint->getJntNo();
|
|
|
|
if(i_this) {
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
|
|
if(jntNo == i_this->m_jnt.getHeadJntNum()) {
|
|
mDoMtx_stack_c::XrotM(i_this->field_0xBFC.field_0x02 + i_this->m_jnt.getHead_y());
|
|
mDoMtx_stack_c::ZrotM(i_this->field_0xBFC.field_0x00 - i_this->m_jnt.getHead_x());
|
|
}
|
|
if(jntNo == i_this->m_jnt.getBackboneJntNum()) {
|
|
mDoMtx_stack_c::XrotM(i_this->m_jnt.getBackbone_y());
|
|
mDoMtx_stack_c::ZrotM(-i_this->m_jnt.getBackbone_x());
|
|
|
|
for(int i = 0; i < 3; i++) {
|
|
mDoMtx_stack_c::multVec(&l_HIO.field_0xC4[i], &i_this->field_0xBD8[i]);
|
|
}
|
|
}
|
|
|
|
model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
|
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000DC04-0000DD68 .text nodeCallBack2__FP7J3DNodei */
|
|
static BOOL nodeCallBack2(J3DNode* node, int calcTiming) {
|
|
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
daNpc_Ji1_c* i_this = (daNpc_Ji1_c*)model->getUserArea();
|
|
s32 jntNo = joint->getJntNo();
|
|
|
|
if(i_this) {
|
|
cMtx_copy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
if(jntNo == i_this->hair1JointNo) {
|
|
mDoMtx_ZrotM(*calc_mtx, i_this->field_0xBAA + i_this->field_0xBD2);
|
|
mDoMtx_YrotM(*calc_mtx, i_this->field_0xBAC);
|
|
}
|
|
else if(jntNo == i_this->hair2JointNo) {
|
|
mDoMtx_ZrotM(*calc_mtx, i_this->field_0xBAE + i_this->field_0xBD4);
|
|
mDoMtx_YrotM(*calc_mtx, i_this->field_0xBB0);
|
|
}
|
|
else {
|
|
mDoMtx_ZrotM(*calc_mtx, i_this->field_0xBB2 + i_this->field_0xBD6);
|
|
mDoMtx_YrotM(*calc_mtx, i_this->field_0xBB4);
|
|
}
|
|
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000DD68-0000DE90 .text nodeCallBack3__FP7J3DNodei */
|
|
static BOOL nodeCallBack3(J3DNode* node, int calcTiming) {
|
|
if (calcTiming != J3DNodeCBCalcTiming_In) {
|
|
return true;
|
|
}
|
|
else {
|
|
J3DModel* model = j3dSys.getModel();
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
daNpc_Ji1_c* i_this = (daNpc_Ji1_c*)model->getUserArea();
|
|
|
|
s32 jntNo = joint->getJntNo();
|
|
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
|
|
s16 temp = i_this->field_0xBA2 * cM_ssin(i_this->field_0xBA4);
|
|
if(jntNo == i_this->armLJointNo) {
|
|
mDoMtx_stack_c::XrotM(temp);
|
|
}
|
|
else if(jntNo == i_this->armRJointNo) {
|
|
mDoMtx_stack_c::XrotM(temp);
|
|
}
|
|
|
|
model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
|
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* 0000DE90-0000DEB0 .text daNpc_Ji1_Draw__FP11daNpc_Ji1_c */
|
|
static BOOL daNpc_Ji1_Draw(daNpc_Ji1_c* i_this) {
|
|
return i_this->_draw();
|
|
}
|
|
|
|
/* 0000DEB0-0000DED0 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return static_cast<daNpc_Ji1_c*>(i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 0000DED0-0000DF78 .text _create__11daNpc_Ji1_cFv */
|
|
cPhs_State daNpc_Ji1_c::_create() {
|
|
fopAcM_SetupActor(this, daNpc_Ji1_c);
|
|
|
|
cPhs_State state = dComIfG_resLoad(&field_0xC7C, "Ji");
|
|
if(state == cPhs_COMPLEATE_e) {
|
|
if(!fopAcM_entrySolidHeap(this, &CheckCreateHeap, 0x16840)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
CreateInit();
|
|
}
|
|
|
|
return state;
|
|
}
|
|
|
|
/* 0000E864-0000F324 .text CreateHeap__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::CreateHeap() {
|
|
/* Nonmatching */
|
|
|
|
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Ji", JI_BDL_JI));
|
|
field_0x330 = new mDoExt_McaMorf(
|
|
modelData,
|
|
NULL, NULL,
|
|
static_cast<J3DAnmTransformKey*>(dComIfG_getObjectRes("Ji", JI_BCK_WAIT01)),
|
|
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
|
|
dComIfG_getObjectRes("Ji", JI_BAS_WAIT01),
|
|
0x00000000,
|
|
0x11020203
|
|
);
|
|
|
|
if(field_0x330 == NULL || field_0x330->getModel() == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
field_0x330->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head"));
|
|
JUT_ASSERT(0x15AB, m_jnt.getHeadJntNum() >= 0);
|
|
|
|
m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone1"));
|
|
JUT_ASSERT(0x15B0, m_jnt.getBackboneJntNum() >= 0);
|
|
|
|
armLJointNo = modelData->getJointName()->getIndex("armL1");
|
|
JUT_ASSERT(0x15B4, armLJointNo >= 0);
|
|
|
|
armRJointNo = modelData->getJointName()->getIndex("armR1");
|
|
JUT_ASSERT(0x15B7, armRJointNo >= 0);
|
|
|
|
handRJointNo = modelData->getJointName()->getIndex("handR");
|
|
JUT_ASSERT(0x15BA, handRJointNo >= 0);
|
|
|
|
mpMorf = new mDoExt_McaMorf(
|
|
static_cast<J3DModelData*>(dComIfG_getObjectRes("Ji", JI_BDL_JI_YARI)),
|
|
NULL, NULL,
|
|
static_cast<J3DAnmTransformKey*>(dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_TATEATTACK)),
|
|
J3DFrameCtrl::EMode_NONE, 0.0f, 0, -1, 1,
|
|
0,
|
|
0x00000000,
|
|
0x11020203
|
|
);
|
|
|
|
|
|
if(mpMorf == NULL || mpMorf->getModel() == NULL) {
|
|
return false;
|
|
}
|
|
|
|
modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Ji", JI_BDL_YJITR00));
|
|
field_0x3F8 = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
|
|
|
J3DAnmTevRegKey* a_brk = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectRes("Ji", JI_BRK_YJITR00));
|
|
JUT_ASSERT(0x15CD, a_brk != NULL);
|
|
|
|
J3DAnmTextureSRTKey* a_btk = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes("Ji", JI_BTK_YJITR00));
|
|
JUT_ASSERT(0x15D0, a_btk != NULL);
|
|
|
|
int temp1 = field_0x3FC.init(modelData, a_brk, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0);
|
|
int temp2 = field_0x418.init(modelData, a_btk, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0);
|
|
|
|
if(field_0x3F8 == 0 || temp1 == 0 || temp2 == 0) {
|
|
return false;
|
|
}
|
|
|
|
headTexPattern = static_cast<J3DAnmTexPattern*>(dComIfG_getObjectRes("Ji", JI_BTP_JI));
|
|
JUT_ASSERT(0x15D8, headTexPattern != NULL);
|
|
|
|
if(field_0x3D8.init(modelData, headTexPattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0) == 0) {
|
|
return false;
|
|
}
|
|
|
|
hair1JointNo = modelData->getJointName()->getIndex("hair1");
|
|
JUT_ASSERT(0x15DF, hair1JointNo >= 0);
|
|
hair2JointNo = modelData->getJointName()->getIndex("hair2");
|
|
JUT_ASSERT(0x15E1, hair2JointNo >= 0);
|
|
hair3JointNo = modelData->getJointName()->getIndex("hair3");
|
|
JUT_ASSERT(0x15E3, hair3JointNo >= 0);
|
|
|
|
for(u16 i = 0; i < modelData->getJointNum(); i++) {
|
|
if(i == hair1JointNo || i == hair2JointNo || i == hair3JointNo) {
|
|
modelData->getJointNodePointer(i)->setCallBack(nodeCallBack2);
|
|
}
|
|
}
|
|
for(u16 i = 0; i < modelData->getJointNum(); i++) {
|
|
if(i == m_jnt.getHeadJntNum() || i == m_jnt.getBackboneJntNum()) {
|
|
modelData->getJointNodePointer(i)->setCallBack(nodeCallBack1);
|
|
}
|
|
else if(i == armLJointNo || i == armRJointNo) {
|
|
modelData->getJointNodePointer(i)->setCallBack(nodeCallBack3);
|
|
}
|
|
}
|
|
|
|
field_0x330->getModel()->setUserArea((u32)this);
|
|
|
|
field_0x5F8.SetWall(60.0f, 50.0f);
|
|
field_0x434.Set(¤t.pos, &old.pos, this, 1, &field_0x5F8, &speed);
|
|
field_0x434.OnLineCheck();
|
|
|
|
field_0xC54[0] = dComIfGp_evmng_getEventIdx("Ji1_StartSpeak");
|
|
field_0xC54[1] = dComIfGp_evmng_getEventIdx("Ji1_Speak");
|
|
field_0xC54[2] = dComIfGp_evmng_getEventIdx("Ji1_EndSpeak");
|
|
field_0xC54[3] = dComIfGp_evmng_getEventIdx("Ji1_BadSpeak");
|
|
field_0xC54[4] = dComIfGp_evmng_getEventIdx("Ji1_linkmove");
|
|
field_0xC54[5] = dComIfGp_evmng_getEventIdx("Ji1_kaiten");
|
|
field_0xC54[6] = dComIfGp_evmng_getEventIdx("Ji1_kaiten_exp");
|
|
field_0xC54[7] = dComIfGp_evmng_getEventIdx("Ji1_ItemGetEnd");
|
|
field_0xC54[8] = dComIfGp_evmng_getEventIdx("Ji1_ItemGetTalkEnd");
|
|
field_0xC54[9] = dComIfGp_evmng_getEventIdx("Ji1_pl_backroom");
|
|
field_0xC54[0xA] = dComIfGp_evmng_getEventIdx("Ji1_TeachSpRollCut");
|
|
field_0xC54[0xB] = dComIfGp_evmng_getEventIdx("Ji1_SpRollFail");
|
|
field_0xC54[0xC] = dComIfGp_evmng_getEventIdx("Ji1_NormAng");
|
|
field_0xC54[0xD] = dComIfGp_evmng_getEventIdx("Ji1_NormAng2");
|
|
field_0xC54[0xE] = dComIfGp_evmng_getEventIdx("Ji1_NormAngFin");
|
|
field_0xC54[0xF] = dComIfGp_evmng_getEventIdx("Ji1_SwordGetTalkEnd");
|
|
field_0xC54[0x10] = dComIfGp_evmng_getEventIdx("Ji1_KmonTalk");
|
|
field_0xC54[0x11] = dComIfGp_evmng_getEventIdx("Ji1_EquipTalk");
|
|
|
|
if(dComIfGs_isEventBit(0x1) && !dComIfGs_isEventBit(0x108)) {
|
|
eventInfo.setEventId(field_0xC54[0x11]);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000F324-0000FB0C .text CreateInit__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::CreateInit() {
|
|
/* Nonmatching */
|
|
|
|
cXyz temp(190.0f, 230.0f, -1100.0f);
|
|
csXyz temp2(0, 0, 0);
|
|
|
|
fopAcM_createChild("Kmon", fopAcM_GetID(this), 0, &temp, fopAcM_GetRoomNo(this), &temp2);
|
|
fopAcM_SetMtx(this, field_0x330->getModel()->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -70.0f, 0.0f, -70.0f, 70.0f, 200.0f, 70.0f);
|
|
gravity = -30.0f;
|
|
attention_info.flags = fopAc_Attn_LOCKON_MISC_e | fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e;
|
|
|
|
field_0x638.Init(0xFF, 0xFF, this);
|
|
field_0x674.Init(0xFF, 0xFF, this);
|
|
field_0x6B0.Set(l_cyl_src);
|
|
field_0x6B0.SetStts(&field_0x638);
|
|
field_0x7E0.Set(l_cyl2_src);
|
|
field_0x7E0.SetStts(&field_0x674);
|
|
field_0x7E0.SetTgHitCallback(daJi1_TgHitCallback);
|
|
field_0x7E0.SetCoHitCallback(daJi1_CoHitCallback);
|
|
field_0x6B0.OffTgShield();
|
|
field_0x7E0.OnTgShield();
|
|
field_0x910.Set(l_cylAt_src);
|
|
field_0x910.SetStts(&field_0x638);
|
|
field_0xA40.Set(l_cpsAt_src);
|
|
field_0xA40.SetStts(&field_0x638);
|
|
field_0xA40.SetStartEnd(field_0xB84, field_0xB78);
|
|
field_0xA40.SetR(50.0f);
|
|
field_0xA40.SetAtHitCallback(daJi1_AtHitCallback);
|
|
|
|
field_0x290 = 240.0f;
|
|
field_0x294 = 100.0f;
|
|
field_0xD64 = -1;
|
|
field_0xD68 = 0;
|
|
field_0xD6C = 0;
|
|
field_0xD70 = 0;
|
|
field_0xD74 = 0;
|
|
field_0xD78 = 0;
|
|
field_0xD79 = 0;
|
|
field_0xC94 = 0;
|
|
field_0xC90 = 0;
|
|
field_0xC98 = l_HIO.field_0x54[field_0xD70];
|
|
field_0xC28 = 0;
|
|
field_0xC2C = 0;
|
|
field_0xC4C = 0;
|
|
field_0xC50 = 0;
|
|
field_0xC9C = 0;
|
|
|
|
field_0xD38 = current.pos;
|
|
if(dComIfGs_isEventBit(0x520)) {
|
|
if(!dComIfGs_isEventBit(0x2)) {
|
|
field_0xD84 = 0;
|
|
field_0xD50.x = -13.0f;
|
|
field_0xD50.y = -4.0f;
|
|
field_0xD50.z = 10.0f;
|
|
field_0xD5C.x = 0x4000;
|
|
field_0xD5C.y = 0;
|
|
field_0xD5C.z = 0x7FFF;
|
|
current.pos.x = 0.0f;
|
|
current.pos.y = 0.0f;
|
|
current.pos.z = -850.0f;
|
|
current.angle.y = -0x8000;
|
|
|
|
setAction(&daNpc_Ji1_c::kaitenExpAction, 0);
|
|
}
|
|
else {
|
|
field_0xD84 = 1;
|
|
field_0xD50.x = -13.0f;
|
|
field_0xD50.y = -4.0f;
|
|
field_0xD50.z = 10.0f;
|
|
field_0xD5C.x = 0x4000;
|
|
field_0xD5C.y = 0;
|
|
field_0xD5C.z = 0x7FFF;
|
|
|
|
setAction(&daNpc_Ji1_c::normalAction, 0);
|
|
}
|
|
|
|
field_0xD28 = home.pos;
|
|
}
|
|
else {
|
|
if(dComIfGs_isEventBit(0x501) || dComIfGs_isEventBit(0x1)) {
|
|
field_0xD84 = 1;
|
|
field_0xD50.x = -13.0f;
|
|
field_0xD50.y = -4.0f;
|
|
field_0xD50.z = 10.0f;
|
|
field_0xD5C.x = 0x4000;
|
|
field_0xD5C.y = 0;
|
|
field_0xD5C.z = 0x7FFF;
|
|
field_0xD28 = home.pos;
|
|
|
|
setAction(&daNpc_Ji1_c::normalAction, 0);
|
|
}
|
|
else {
|
|
field_0xD84 = 0;
|
|
if(!dComIfGs_isEventBit(0x640) || l_HIO.field_0x30) {
|
|
field_0xD68 = 0;
|
|
|
|
setAction(&daNpc_Ji1_c::kaitenExpAction, 0);
|
|
}
|
|
else {
|
|
setAction(&daNpc_Ji1_c::kaitenwaitAction, 0);
|
|
}
|
|
|
|
current.pos.x = 0.0f;
|
|
current.pos.y = 0.0f;
|
|
current.pos.z = -850.0f;
|
|
current.angle.y = -0x8000;
|
|
field_0xD28 = current.pos;
|
|
home.angle.y = current.angle.y;
|
|
}
|
|
}
|
|
|
|
dComIfGp_att_offAleart();
|
|
mEventCut.setActorInfo("Ji1", this);
|
|
mEventCut.setJntCtrlPtr(&m_jnt);
|
|
field_0xC84 = 0x12;
|
|
field_0xD7B = 0;
|
|
field_0xD7C = 0;
|
|
field_0xD7E = 0;
|
|
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_MISC_e);
|
|
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xA9;
|
|
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xA9;
|
|
attention_info.distances[fopAc_Attn_TYPE_BATTLE_e] = 0xB5;
|
|
field_0x414 = 0.0f;
|
|
field_0x42C = 0.0f;
|
|
field_0x430 = 0;
|
|
|
|
set_mtx();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000FB0C-0000FC24 .text _delete__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::_delete() {
|
|
if(dComIfGp_getMiniGameType() == 2) {
|
|
dComIfGp_endMiniGame(2);
|
|
}
|
|
if(dComIfGp_getMiniGameType() == 6) {
|
|
dComIfGp_endMiniGame(6);
|
|
}
|
|
|
|
dComIfG_resDelete(&field_0xC7C, "Ji");
|
|
if(heap && field_0x330) {
|
|
field_0x330->stopZelAnime();
|
|
}
|
|
|
|
mDoAud_seDeleteObject(&field_0xB78);
|
|
mDoAud_seDeleteObject(&field_0xB84);
|
|
|
|
dComIfGp_att_revivalAleart();
|
|
|
|
field_0x2E0.remove();
|
|
field_0x300.remove();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000FC24-00010100 .text _execute__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::_execute() {
|
|
/* Nonmatching */
|
|
|
|
if(field_0xD84 == 2) {
|
|
harpoonMove();
|
|
}
|
|
|
|
if(cLib_calcTimer(&field_0x3EE) == 0) {
|
|
field_0x3EC++;
|
|
if(field_0x3EC >= headTexPattern->getFrameMax()) {
|
|
field_0x3EC -= headTexPattern->getFrameMax();
|
|
field_0x3EE = (s16)cM_rndF(100.0f) + 30;
|
|
}
|
|
}
|
|
|
|
s8 roomNo = fopAcM_GetRoomNo(this);
|
|
u32 sound;
|
|
if(field_0x434.ChkGroundHit()) {
|
|
sound = dComIfG_Bgsp()->GetMtrlSndId(field_0x434.m_gnd);
|
|
}
|
|
else {
|
|
sound = 0;
|
|
}
|
|
field_0x330->play(¤t.pos, sound, dComIfGp_getReverb(roomNo));
|
|
field_0x330->calc();
|
|
|
|
if(isItemWaitAnim()) {
|
|
static cXyz aim_offset(-13.0f, -4.0f, 10.0f);
|
|
static csXyz aim_angle(0x4000, 0, 0x7FFF);
|
|
|
|
field_0xD5C = aim_angle;
|
|
cLib_addCalcPos2(&field_0xD50, aim_offset, 0.25f, 5.0f);
|
|
}
|
|
else {
|
|
static cXyz aim_offset(-13.06f, -4.0f, 44.35f);
|
|
static csXyz aim_angle(0x3E84, 0, 0x7E93);
|
|
|
|
field_0xD5C = aim_angle;
|
|
cLib_addCalcPos2(&field_0xD50, aim_offset, 0.25f, 5.0f);
|
|
}
|
|
|
|
if(field_0xD84 == 1 && (field_0xD64 == 0x13 || field_0xD64 == 0x14)) {
|
|
mpMorf->setFrame(field_0x330->getFrame());
|
|
}
|
|
else {
|
|
mpMorf->setFrame(0.0f);
|
|
mpMorf->setPlaySpeed(0.0f);
|
|
}
|
|
|
|
mpMorf->calc();
|
|
|
|
field_0xBFC.move();
|
|
|
|
if(field_0xD64 == 0x17) {
|
|
field_0x42C += 1.0f;
|
|
if(field_0x42C >= 60.0f) {
|
|
field_0x42C = 30.0f;
|
|
}
|
|
}
|
|
else {
|
|
if(field_0xD64 != 0x18 && field_0x430 != 0) {
|
|
field_0x430->becomeInvalidEmitter();
|
|
field_0x430 = 0;
|
|
}
|
|
|
|
if(field_0x42C > 0.0f) {
|
|
field_0x414 += 1.0f;
|
|
if(field_0x414 >= 30.0f) {
|
|
field_0x42C = 0;
|
|
field_0x414 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
(this->*field_0x2B0)(0);
|
|
lookBack();
|
|
daNpc_Ji1_setHairAngle(this);
|
|
|
|
attention_info.position.set(current.pos.x, current.pos.y + 190.0f, current.pos.z);
|
|
shape_angle = current.angle;
|
|
eyePos.set(current.pos.x, current.pos.y + 150.0f, current.pos.z);
|
|
fopAcM_posMoveF(this, field_0x638.GetCCMoveP());
|
|
cXyz temp(current.pos);
|
|
field_0x434.CrrPos(*dComIfG_Bgsp());
|
|
field_0xC40 = current.pos - temp;
|
|
tevStr.mRoomNo = dComIfG_Bgsp()->GetRoomId(field_0x434.m_gnd);
|
|
tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(field_0x434.m_gnd);
|
|
set_mtx();
|
|
field_0x6B0.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&field_0x6B0);
|
|
field_0x7E0.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&field_0x7E0);
|
|
field_0xC28 = 0;
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00010100-0001031C .text _draw__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::_draw() {
|
|
/* Nonmatching */
|
|
|
|
if(field_0xD85) {
|
|
return true;
|
|
}
|
|
else {
|
|
J3DModel* model1 = field_0x330->getModel();
|
|
J3DModelData* modelData1 = model1->getModelData();
|
|
J3DModel* model2 = mpMorf->getModel();
|
|
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(model1, &tevStr);
|
|
g_env_light.setLightTevColorType(model2, &tevStr);
|
|
field_0x3D8.entry(modelData1, field_0x3EC);
|
|
field_0x330->entryDL();
|
|
if(field_0xD84 == 1) {
|
|
mpMorf->entryDL();
|
|
}
|
|
else if(field_0xD84 == 2) {
|
|
mpMorf->updateDL();
|
|
}
|
|
|
|
field_0x418.entry(field_0x3F8->getModelData(), (s16)field_0x42C);
|
|
field_0x3FC.entry(field_0x3F8->getModelData(), (s16)field_0x414);
|
|
mDoExt_modelUpdateDL(field_0x3F8);
|
|
cXyz temp(current.pos.x, current.pos.y + 150.0f, current.pos.z);
|
|
field_0x3F0 = dComIfGd_setShadow(
|
|
field_0x3F0, 1, field_0x330->getModel(), &temp, 800.0f, 20.0f,
|
|
current.pos.y, field_0x434.GetGroundH(), field_0x434.m_gnd, &tevStr
|
|
);
|
|
if(field_0x3F0 != 0 && field_0xD84 != 0) {
|
|
dComIfGd_addRealShadow(field_0x3F0, mpMorf->getModel());
|
|
}
|
|
|
|
dSnap_RegistFig(DSNAP_TYPE_JI1, this, current.pos, current.angle.y, 1.0f, 1.0f, 1.0f);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
static cXyz l_head_front(0.0f, 1.0f, 0.0f);
|
|
static cXyz l_head_top(1.0f, 0.0f, 0.0f);
|
|
|
|
/* 0001031C-00010E3C .text daNpc_Ji1_setHairAngle__FP11daNpc_Ji1_c */
|
|
static void daNpc_Ji1_setHairAngle(daNpc_Ji1_c* i_this) {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00010E3C-00010FC0 .text chkAttention__11daNpc_Ji1_cF4cXyzs */
|
|
BOOL daNpc_Ji1_c::chkAttention(cXyz param_1, s16 param_2) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
f32 temp = 800.0f;
|
|
s32 temp2 = l_HIO.field_0x10 + l_HIO.field_0x12;
|
|
|
|
cXyz temp4;
|
|
temp4.x = player->current.pos.x - param_1.x;
|
|
temp4.z = player->current.pos.z - param_1.z;
|
|
|
|
f32 dist = std::sqrtf(temp4.x * temp4.x + temp4.z * temp4.z);
|
|
s16 angle = cM_atan2s(temp4.x, temp4.z);
|
|
|
|
if(field_0xD7A != 0) {
|
|
temp += 40.0f;
|
|
temp2 += 0x71C;
|
|
}
|
|
|
|
angle -= param_2;
|
|
field_0xD7A = temp2 > abs(angle) && temp > dist;
|
|
|
|
return temp2 > abs(angle) && temp > dist;
|
|
}
|
|
|
|
/* 00010FC0-0001132C .text lookBack__11daNpc_Ji1_cFv */
|
|
BOOL daNpc_Ji1_c::lookBack() {
|
|
BOOL ret = false;
|
|
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
cXyz temp = fopAcM_GetPosition(player) - fopAcM_GetPosition(this);
|
|
f32 dist = temp.absXZ();
|
|
|
|
bool temp2 = true;
|
|
chkAttention(current.pos, current.angle.y);
|
|
|
|
cXyz attnPos;
|
|
if(mEventCut.getAttnFlag()) {
|
|
attnPos = mEventCut.getAttnPos();
|
|
}
|
|
|
|
cXyz* dstPos;
|
|
if(field_0xD7E) {
|
|
attnPos = player->getLeftHandPos();
|
|
dstPos = &attnPos;
|
|
}
|
|
else {
|
|
if(
|
|
(field_0xD7A != 0 || isGuardAnim()) ||
|
|
(checkAction(&daNpc_Ji1_c::kaitenwaitAction) && !dComIfGs_isEventBit(0x501)) ||
|
|
(!checkAction(&daNpc_Ji1_c::normalAction) && dist < 600.0f)
|
|
) {
|
|
if(field_0xD64 == 0xD) {
|
|
dstPos = 0;
|
|
}
|
|
else {
|
|
attnPos = dNpc_playerEyePos(0.0f);
|
|
dstPos = &attnPos;
|
|
}
|
|
}
|
|
else {
|
|
dstPos = 0;
|
|
}
|
|
}
|
|
|
|
s16 maxHeadRot = l_HIO.field_0x10;
|
|
s16 maxSpineRot = l_HIO.field_0x12;
|
|
if(field_0xD64 == 0x10 || field_0xD64 == 0x11) {
|
|
maxHeadRot = 0x3E80;
|
|
maxSpineRot = 0x1F40;
|
|
}
|
|
|
|
m_jnt.setParam(l_HIO.field_0x0E, maxSpineRot, -l_HIO.field_0x0E, -maxHeadRot, l_HIO.field_0x0C, maxHeadRot, -l_HIO.field_0x0C, -maxHeadRot, l_HIO.field_0x14);
|
|
if(m_jnt.trnChk()) {
|
|
cLib_addCalcAngleS2(&field_0xC88, l_HIO.field_0x18, l_HIO.field_0x16, 0x800);
|
|
temp2 = false;
|
|
ret = true;
|
|
}
|
|
else {
|
|
field_0xC88 = 0;
|
|
}
|
|
|
|
m_jnt.lookAtTarget(¤t.angle.y, dstPos, eyePos, current.angle.y, field_0xC88, temp2);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 0001132C-000114EC .text setHitParticle__11daNpc_Ji1_cFP4cXyzUl */
|
|
void daNpc_Ji1_c::setHitParticle(cXyz* param_1, u32 param_2) {
|
|
/* Nonmatching */
|
|
|
|
cXyz* pRVec = field_0x7E0.GetTgRVecP();
|
|
cXyz scale(0.75f, 0.75f, 0.75f);
|
|
csXyz angle;
|
|
angle.y = cM_atan2s(pRVec->x, pRVec->z);
|
|
angle.x = cM_atan2s(pRVec->z, pRVec->y);
|
|
|
|
if(param_1) {
|
|
scale = *param_1;
|
|
}
|
|
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, field_0x7E0.GetTgHitPosP(), &angle, &scale);
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_0010, field_0x7E0.GetTgHitPosP(), 0, &scale);
|
|
fopAcM_seStart(this, JA_SE_CM_JI_DAMAGE, 0);
|
|
fopAcM_seStart(this, param_2, 0);
|
|
dKy_SordFlush_set(*field_0x7E0.GetTgHitPosP(), 0);
|
|
}
|
|
|
|
/* 000114EC-0001161C .text setGuardParticle__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::setGuardParticle() {
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_PURPLE_HIT, field_0x7E0.GetTgHitPosP());
|
|
fopAcM_seStart(this, JA_SE_OBJ_COL_SWS_NMTLP, 0);
|
|
fopAcM_seStart(this, JA_SE_CV_JI_DEFENCE, 0);
|
|
dKy_SordFlush_set(*field_0x7E0.GetTgHitPosP(), 0);
|
|
}
|
|
|
|
/* 0001161C-00011644 .text BackSlideInit__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::BackSlideInit() {
|
|
field_0xC9C = 0;
|
|
field_0xD38 = current.pos;
|
|
}
|
|
|
|
/* 00011644-0001173C .text BackSlide__11daNpc_Ji1_cFff */
|
|
void daNpc_Ji1_c::BackSlide(f32 param_1, f32 param_2) {
|
|
/* Nonmatching */
|
|
|
|
cLib_addCalc2(&field_0xC9C, param_1, 0.25f, 50.0f);
|
|
cXyz temp(field_0xD38);
|
|
temp.x -= field_0xC9C * cM_ssin(current.angle.y);
|
|
temp.z -= field_0xC9C * cM_scos(current.angle.y);
|
|
|
|
if(field_0x434.ChkWallHit()) {
|
|
param_2 *= 0.35f;
|
|
}
|
|
|
|
cLib_addCalcPosXZ(¤t.pos, temp, 0.8f, param_2, 1.0f);
|
|
}
|
|
|
|
/* 0001173C-000118E0 .text harpoonRelease__11daNpc_Ji1_cFP4cXyz */
|
|
void daNpc_Ji1_c::harpoonRelease(cXyz* param_1) {
|
|
MTXCopy(mpMorf->getModel()->getAnmMtx(1), field_0xCA0);
|
|
mpMorf->setFrame(0.0f);
|
|
field_0xCD0.x = field_0xCA0[0][3];
|
|
field_0xCD0.y = field_0xCA0[1][3];
|
|
field_0xCD0.z = field_0xCA0[2][3];
|
|
field_0xCA0[0][3] = 0.0f;
|
|
field_0xCA0[1][3] = 0.0f;
|
|
field_0xCA0[2][3] = 0.0f;
|
|
|
|
if(param_1) {
|
|
field_0xCDC = *param_1;
|
|
}
|
|
else {
|
|
field_0xCDC.set(0.0f, 5.0f, 0.0f);
|
|
}
|
|
|
|
field_0xD14 = 0x400;
|
|
|
|
field_0xD04 = cM_ssin(field_0xD14) * cM_scos(current.angle.y);
|
|
field_0xD08 = 0.0f;
|
|
field_0xD0C = cM_ssin(field_0xD14) * cM_ssin(current.angle.y);
|
|
field_0xD10 = cM_scos(field_0xD14);
|
|
|
|
field_0xCF4 = ZeroQuat;
|
|
|
|
field_0xD84 = 2;
|
|
}
|
|
|
|
/* 000118E0-00011F74 .text harpoonMove__11daNpc_Ji1_cFv */
|
|
void daNpc_Ji1_c::harpoonMove() {
|
|
/* Nonmatching */
|
|
}
|
|
|
|
/* 00011F74-00011F98 .text daNpc_Ji1_Execute__FP11daNpc_Ji1_c */
|
|
static BOOL daNpc_Ji1_Execute(daNpc_Ji1_c* i_this) {
|
|
i_this->_execute();
|
|
return true;
|
|
}
|
|
|
|
/* 00011F98-00011FA0 .text daNpc_Ji1_IsDelete__FP11daNpc_Ji1_c */
|
|
static BOOL daNpc_Ji1_IsDelete(daNpc_Ji1_c*) {
|
|
return true;
|
|
}
|
|
|
|
/* 00011FA0-00011FC0 .text daNpc_Ji1_Delete__FP11daNpc_Ji1_c */
|
|
static BOOL daNpc_Ji1_Delete(daNpc_Ji1_c* i_this) {
|
|
return i_this->_delete();
|
|
}
|
|
|
|
/* 00011FC0-00011FE0 .text daNpc_Ji1_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daNpc_Ji1_Create(fopAc_ac_c* i_this) {
|
|
return static_cast<daNpc_Ji1_c*>(i_this)->_create();
|
|
}
|
|
|
|
static actor_method_class l_daNpc_Ji1_Method = {
|
|
(process_method_func)daNpc_Ji1_Create,
|
|
(process_method_func)daNpc_Ji1_Delete,
|
|
(process_method_func)daNpc_Ji1_Execute,
|
|
(process_method_func)daNpc_Ji1_IsDelete,
|
|
(process_method_func)daNpc_Ji1_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_NPC_JI1 = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_NPC_JI1,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daNpc_Ji1_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_NPC_JI1,
|
|
/* Actor SubMtd */ &l_daNpc_Ji1_Method,
|
|
/* Status */ fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ENEMY_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|