d_a_npc_nz: add .inc file, match .data section

This commit is contained in:
LagoLunatic
2024-04-14 11:27:39 -04:00
parent 3fae1c28c3
commit 5b3b66015a
5 changed files with 416 additions and 405 deletions
+3 -3
View File
@@ -14,15 +14,15 @@ class J3DNode;
class daNpc_Nz_c : public fopNpc_npc_c {
public:
enum Proc_e {
PROC_0_e = 0,
PROC_1_e = 1,
PROC_INIT = 0,
PROC_EXEC = 1,
};
// objdiff says this is a weak function
// but defining it here with {} causes it to be inlined with fopAcM_SetupActor which breaks things
daNpc_Nz_c();
void modeProcInit(int) {}
void modeProcInit(int newMode) { modeProc(PROC_INIT, newMode); }
BOOL NodeCallBack(J3DNode*, int);
BOOL TailNodeCallBack(J3DNode*, int);
+1 -1
View File
@@ -9,7 +9,7 @@ class daObj_Hole_c : public fopAc_ac_c {
public:
enum Proc_e {
PROC_INIT = 0,
PROC_EXEC = 1
PROC_EXEC = 1,
};
enum Mode {
+1 -1
View File
@@ -48,7 +48,7 @@ class daRd_c : public fopEn_enemy_c {
public:
enum Proc_e {
PROC_INIT = 0,
PROC_EXEC = 1
PROC_EXEC = 1,
};
enum Mode {
+20 -400
View File
@@ -4,17 +4,14 @@
//
#include "d/actor/d_a_npc_nz.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "d/actor/d_a_player_main.h"
#include "d/actor/d_a_tsubo.h"
#include "d/actor/d_a_obj_barrel.h"
#include "d/actor/d_a_esa.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
#include "d/d_lib.h"
#include "d/d_item.h"
#include "d/d_procname.h"
static u8 dummy_bss[0x58];
// need to figure out what's putting this data in front of a bunch of rels
static f32 dummy[3] = {1.0f, 1.0f, 1.0f};
static f32 dummy2[3] = {1.0f, 1.0f, 1.0f};
@@ -24,10 +21,6 @@ static f64 dummy4[2] = {3.0, 0.5};
const char daNpc_Nz_c::m_arc_name[] = "NZ";
const char daNpc_Nz_c::m_bdl_arc_name[] = "Npcnz";
// I think this file has something like -inline deferred on
// since modeProc() appears before cutProc() in the original dol but the in-function statics
// are in the opposite order in .data
/* 000000EC-00000128 .text daNpcNz_NodeCallBack__FP7J3DNodei */
static BOOL daNpcNz_NodeCallBack(J3DNode* node, int param_1) {
return reinterpret_cast<daNpc_Nz_c*>(j3dSys.getModel()->getUserArea())->NodeCallBack(node, param_1);
@@ -232,10 +225,15 @@ static s16 daNpc_Nz_XyEventCB(void* i_this, int param_1) {
/* 000011C0-00001210 .text XyEventCB__10daNpc_Nz_cFi */
s16 daNpc_Nz_c::XyEventCB(int) {
static char* a_demo_name_tbl[] = {
"DEFAULT_NPC_NZ_ESA",
};
field_0x8FA = dComIfGp_evmng_getEventIdx("DEFAULT_NPC_NZ_ESA", -1);
return field_0x8FA;
}
#include "d/actor/d_a_npc_nz_cut.inc"
/* 00001210-00001268 .text eventOrder__10daNpc_Nz_cFv */
void daNpc_Nz_c::eventOrder() {
if(field_0x8F8 == 1 || field_0x8F8 == 2) {
@@ -251,7 +249,7 @@ void daNpc_Nz_c::eventOrder() {
void daNpc_Nz_c::checkOrder() {
if(eventInfo.checkCommandTalk() && (field_0x8F8 == 1 || field_0x8F8 == 2)) {
if(field_0x8F8 == 2) {
modeProc(PROC_0_e, 1);
modeProcInit(1);
}
field_0x8F8 = 0;
@@ -457,7 +455,7 @@ void daNpc_Nz_c::modeEventEsa() {
shape_angle = home.angle;
current.angle = shape_angle;
modeProc(PROC_0_e, 0);
modeProcInit(0);
}
}
@@ -469,24 +467,27 @@ void daNpc_Nz_c::modeProc(daNpc_Nz_c::Proc_e proc, int newMode) {
struct mode_entry_t {
mode_func_t init;
mode_func_t run;
const char* name;
};
static mode_entry_t mode_tbl[] = {
{
&daNpc_Nz_c::modeWaitInit,
&daNpc_Nz_c::modeWait,
"WAIT",
},
{
&daNpc_Nz_c::modeEventEsaInit,
&daNpc_Nz_c::modeEventEsa,
"WAIT",
}
};
if(proc == PROC_0_e) {
if(proc == PROC_INIT) {
mCurMode = newMode;
(this->*mode_tbl[mCurMode].init)();
}
else if(proc == PROC_1_e) {
else if(proc == PROC_EXEC) {
(this->*mode_tbl[mCurMode].run)();
}
}
@@ -576,7 +577,7 @@ u16 daNpc_Nz_c::next_msgStatus(u32* pMsgNo) {
/* Nonmatching */
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
static u32 shop_next_msg_tbl[4][2] = {
static const u32 shop_next_msg_tbl[4][2] = {
{
0x33FB,
0x33FC
@@ -784,15 +785,15 @@ bool daNpc_Nz_c::_execute() {
cLib_addCalc2(&speedF, field_0x6EC, 0.3f, 4.0f);
checkOrder();
modeProc(PROC_1_e, 2);
modeProc(PROC_EXEC, 2);
LookBack();
eventOrder();
setAttention();
mpMorf->play(0, 0, 0);
mpMorf->play(NULL, 0, 0);
mpMorf->calc();
TailControl();
mAcch.CrrPos(*dComIfG_Bgsp());
mpBait = 0;
mpBait = NULL;
field_0x910 = FLOAT_MAX;
setMtx();
@@ -846,7 +847,7 @@ BOOL daNpc_Nz_c::createInit() {
/* Nonmatching */
setAnm(0, false);
modeProc(PROC_0_e, 0);
modeProcInit(0);
mAcchCir.SetWall(30.0f, 10.0f);
mAcch.Set(&current.pos, &old.pos, this, 1, &mAcchCir, &speed, 0, 0);
@@ -971,387 +972,6 @@ static BOOL daNpc_NzIsDelete(void*) {
return true;
}
/* 000032BC-000032E8 .text searchEsa_CB__FPvPv */
static BOOL searchEsa_CB(void* param_1, void* i_this) {
return static_cast<daNpc_Nz_c*>(i_this)->_searchEsa((fopAc_ac_c*)param_1);
}
/* 000032E8-000034F0 .text _searchEsa__10daNpc_Nz_cFP10fopAc_ac_c */
BOOL daNpc_Nz_c::_searchEsa(fopAc_ac_c* pActor) {
/* Nonmatching */
if(fopAcM_GetName(pActor) == PROC_ESA) {
esa_class* pBait = static_cast<esa_class*>(pActor);
if(pBait->field_0x298 == 0) {
cXyz delta = pBait->current.pos - current.pos;
if(mpMorf->getFrame() < 6.0f) {
cLib_addCalcPos2(&pBait->current.pos, current.pos, 0.1f, 2.5f);
mDoMtx_stack_c::transS(pBait->current.pos);
mDoMtx_stack_c::ZXYrotM(current.angle);
pBait->mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
if(delta.absXZ() < field_0x910) {
mpBait = pBait;
field_0x910 = delta.absXZ();
}
}
}
return false;
}
/* 000034F0-00003528 .text searchNzAndBomb_CB__FPvPv */
static BOOL searchNzAndBomb_CB(void* param_1, void*) {
fopAc_ac_c* pActor = static_cast<fopAc_ac_c*>(param_1);
if(fopAcM_GetName(pActor) == PROC_NZ || fopAcM_GetName(pActor) == PROC_BOMB) {
fopAcM_delete(pActor);
}
return false;
}
/* 00003528-0000377C .text searchTsuboAndBarrel_CB__FPvPv */
static BOOL searchTsuboAndBarrel_CB(void* param_1, void* param_2) {
/* Nonmatching */
fopAc_ac_c* pActor1 = static_cast<fopAc_ac_c*>(param_1);
fopAc_ac_c* pActor2 = static_cast<fopAc_ac_c*>(param_2);
if(fopAcM_GetName(pActor1) == PROC_TSUBO || fopAcM_GetName(pActor1) == PROC_Obj_Barrel) {
cXyz delta = pActor1->current.pos - pActor2->current.pos;
if(delta.absXZ() < 300.0f) {
if(fopAcM_GetName(pActor1) == PROC_TSUBO) {
static_cast<daTsubo::Act_c*>(pActor1)->pos_init();
return true;
}
else if(fopAcM_GetName(pActor1) == PROC_TSUBO) { // this condition seems weird, also has another part with barrel member variables
static_cast<daObjBarrel::Act_c*>(pActor1)->pos_init();
return true;
}
if(fopAcM_GetName(pActor1) == PROC_TSUBO) {
fopAcM_delete(pActor1);
}
}
}
return false;
}
/* 0000377C-00003908 .text searchEsaInit_CB__FPvPv */
static BOOL searchEsaInit_CB(void* pActor1, void* pActor2) {
if(fopAcM_GetName(pActor1) == PROC_ESA) {
esa_class* pBait = static_cast<esa_class*>(pActor1);
daNpc_Nz_c* pNz = static_cast<daNpc_Nz_c*>(pActor2);
cXyz pos(pNz->field_0x6C4);
pos.x += cM_ssin(pNz->current.angle.y) * 150.0f;
pos.z += cM_scos(pNz->current.angle.y) * 150.0f;
s16 angle = cM_rndFX(358.0f) * 182.0444f;
f32 mag = cM_rndF(30.0f);
pos.x += mag * cM_ssin(angle);
pos.z += mag * cM_scos(angle);
pBait->current.pos = pos;
pBait->old.pos = pos;
mDoMtx_stack_c::transS(pBait->current.pos);
mDoMtx_stack_c::ZXYrotM(pBait->current.angle);
pBait->mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
return false;
}
/* 00003908-00003B90 .text cutProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutProc() {
/* Nonmatching */
typedef void(daNpc_Nz_c::*Func_t)(void);
struct mode_entry_t {
Func_t start;
Func_t proc;
};
field_0x8F4 = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName());
if(field_0x8F4 == -1) {
return;
}
static char* action_table[] = {
"EATESA",
"EATESA1ST",
"KILLALL",
"SHOW",
"HIDE",
"SETANM",
"GOHOME",
"CHKGETITEM",
};
static mode_entry_t cut_tbl[] = {
{
&daNpc_Nz_c::cutEatesaStart,
&daNpc_Nz_c::cutEatesaProc,
},
{
&daNpc_Nz_c::cutEatesaFirstStart,
&daNpc_Nz_c::cutEatesaFirstProc,
},
{
&daNpc_Nz_c::cutKillAllStart,
&daNpc_Nz_c::cutKillAllProc,
},
{
&daNpc_Nz_c::cutShowStart,
&daNpc_Nz_c::cutShowProc,
},
{
&daNpc_Nz_c::cutHideStart,
&daNpc_Nz_c::cutHideProc,
},
{
&daNpc_Nz_c::cutSetAnmStart,
&daNpc_Nz_c::cutSetAnmProc,
},
{
&daNpc_Nz_c::cutGoHomeStart,
&daNpc_Nz_c::cutGoHomeProc,
},
{
&daNpc_Nz_c::cutChkGetItemStart,
&daNpc_Nz_c::cutChkGetItemProc,
}
};
int actIdx = dComIfGp_evmng_getMyActIdx(field_0x8F4, action_table, ARRAY_SIZE(action_table), 1, 0);
if(actIdx == -1) {
dComIfGp_evmng_cutEnd(field_0x8F4);
return;
}
if(dComIfGp_evmng_getIsAddvance(field_0x8F4)) {
(this->*cut_tbl[actIdx].start)();
}
(this->*cut_tbl[actIdx].proc)();
}
/* 00003B90-00003BB8 .text cutEatesaStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaStart() {
setAnm(6, false);
}
/* 00003BB8-00003CEC .text cutEatesaProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaProc() {
/* Nonmatching */
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsa_CB, this);
fopAc_ac_c* pBait = mpBait;
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
current.angle.y = shape_angle.y = home.angle.y + (s16)((int)cM_rndFX(4.0f) * 2048);
}
if(pBait) {
fopAcM_delete(pBait);
mpBait = 0;
field_0x910 = FLOAT_MIN;
}
else {
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
current.angle.y = shape_angle.y = home.angle.y;
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
}
/* 00003CEC-00003D40 .text cutEatesaFirstStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaFirstStart() {
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsa_CB, this);
current.angle.y = shape_angle.y = home.angle.y;
setAnm(0xA, false);
}
/* 00003D40-00003F54 .text cutEatesaFirstProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaFirstProc() {
/* Nonmatching */
cXyz target(field_0x6C4);
target.x += cM_ssin(home.angle.y) * 100.0f;
target.z += cM_scos(home.angle.y) * 100.0f;
if(field_0x6D5 == 10) {
f32 temp2 = cLib_addCalcPosXZ(&current.pos, target, 0.25f, 10.0f, 2.0f);
s16 temp3 = cLib_targetAngleY(&current.pos, &target);
cLib_addCalcAngleS2(&shape_angle.y, temp3, 8, 0x1000);
if(cLib_IsZero(temp2) && mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
setAnm(6, false);
field_0x906 = 2;
}
else {
return;
}
}
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsa_CB, this);
fopAc_ac_c* pBait = mpBait;
if(pBait) {
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f) && cLib_calcTimer(&field_0x906) == 0) {
fopAcM_delete(pBait);
mpBait = 0;
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
else {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
/* 00003F54-0000404C .text cutKillAllStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutKillAllStart() {
/* Nonmatching */
fopAcM_Search((fopAcIt_JudgeFunc)&searchNzAndBomb_CB, this);
fopAcM_Search((fopAcIt_JudgeFunc)&searchTsuboAndBarrel_CB, this);
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsaInit_CB, this);
cXyz pos = field_0x6C4;
pos.x += cM_ssin(home.angle.y + 0x8000) * 250.0f;
pos.z += cM_scos(home.angle.y + 0x8000) * 250.0f;
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, home.angle.y + 0x8000);
}
/* 0000404C-00004080 .text cutKillAllProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutKillAllProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
/* 00004080-0000408C .text cutShowStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutShowStart() {
field_0x8FC = true;
}
/* 0000408C-000040C0 .text cutShowProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutShowProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
/* 000040C0-000040CC .text cutHideStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutHideStart() {
field_0x8FC = false;
}
/* 000040CC-00004100 .text cutHideProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutHideProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
/* 00004100-00004204 .text cutSetAnmStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutSetAnmStart() {
/* Nonmatching */
u32* pAnmNo = dComIfGp_evmng_getMyIntegerP(field_0x8F4, "anm_no");
s32 anmNo = 0;
u32* pLoopCount = dComIfGp_evmng_getMyIntegerP(field_0x8F4, "loop_count");
if(pAnmNo) {
anmNo = *pAnmNo;
}
if(pLoopCount) {
field_0x906 = *pLoopCount;
}
else {
field_0x906 = 0;
}
setAnm(anmNo, false);
if(anmNo == 8) {
fopAcM_seStart(this, JA_SE_CV_M_NZ_TALK_IN, 0);
}
}
/* 00004204-000043C0 .text cutSetAnmProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutSetAnmProc() {
/* Nonmatching */
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
field_0x906--;
}
if(field_0x906 <= 0) {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
if(field_0x6D5 == 8) {
if(mpMorf->checkFrame(8.0f)) {
setSmokeParticle();
}
else if (mpMorf->checkFrame(13.0f)) {
J3DModel* pModel = mpMorf->getModel();
cXyz scale(0.65f, 0.65f, 0.65f);
csXyz temp2(current.angle);
temp2.y -= 0x4000;
cXyz temp4(10.0f, 0.0f, 10.0f);
cXyz pos;
GXColor color;
color.r = 0x80;
color.g = 0x80;
color.b = 0x80;
mDoMtx_stack_c::copy(pModel->getAnmMtx(m_jnt.getHeadJntNum()));
mDoMtx_stack_c::multVec(&temp4, &pos);
dComIfGp_particle_set(0x57, &pos, &shape_angle, &scale, 0xFF, 0, -1, &color);
}
}
}
/* 000043C0-000043C4 .text cutGoHomeStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutGoHomeStart() {
return;
}
/* 000043C4-000044D4 .text cutGoHomeProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutGoHomeProc() {
/* Nonmatching */
s16 target = cLib_targetAngleY(&current.pos, &home.pos);
cLib_addCalcAngleS2(&current.angle.y, target, 4, 0x1000);
shape_angle.y = current.angle.y;
s16 dist = cLib_distanceAngleS(target, current.angle.y);
if(dist < 0x4000) {
if(field_0x6D5 != 0xA) {
fopAcM_seStart(this, JA_SE_CV_M_NZ_TALK_OUT, 0);
}
setAnm(0xA, false);
if(cLib_addCalcPosXZ(&current.pos, home.pos, 0.5f, 10.0f, 1.0f) < 1.0f) {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
}
/* 000044D4-00004520 .text cutChkGetItemStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutChkGetItemStart() {
if(field_0x8F8 >= 3) {
fopAcM_orderChangeEventId(dComIfGp_getPlayer(0), this, field_0x8FA, 1, 0xFFFF);
}
}
/* 00004520-00004554 .text cutChkGetItemProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutChkGetItemProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
static actor_method_class daNpc_NzMethodTable = {
(process_method_func)daNpc_NzCreate,
(process_method_func)daNpc_NzDelete,
+391
View File
@@ -0,0 +1,391 @@
// The original name of this file is unknown, but it must exist because d_a_npc_nz's "cut" functions
// are in a separate .text section from the rest of its functions.
#include "d/actor/d_a_npc_nz.h"
#include "d/actor/d_a_esa.h"
#include "d/actor/d_a_tsubo.h"
#include "d/actor/d_a_obj_barrel.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
#include "d/d_procname.h"
/* 000032BC-000032E8 .text searchEsa_CB__FPvPv */
static BOOL searchEsa_CB(void* param_1, void* i_this) {
return static_cast<daNpc_Nz_c*>(i_this)->_searchEsa((fopAc_ac_c*)param_1);
}
/* 000032E8-000034F0 .text _searchEsa__10daNpc_Nz_cFP10fopAc_ac_c */
BOOL daNpc_Nz_c::_searchEsa(fopAc_ac_c* pActor) {
/* Nonmatching */
if(fopAcM_GetName(pActor) == PROC_ESA) {
esa_class* pBait = static_cast<esa_class*>(pActor);
if(pBait->field_0x298 == 0) {
cXyz delta = pBait->current.pos - current.pos;
if(mpMorf->getFrame() < 6.0f) {
cLib_addCalcPos2(&pBait->current.pos, current.pos, 0.1f, 2.5f);
mDoMtx_stack_c::transS(pBait->current.pos);
mDoMtx_stack_c::ZXYrotM(current.angle);
pBait->mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
if(delta.absXZ() < field_0x910) {
mpBait = pBait;
field_0x910 = delta.absXZ();
}
}
}
return false;
}
/* 000034F0-00003528 .text searchNzAndBomb_CB__FPvPv */
static BOOL searchNzAndBomb_CB(void* param_1, void*) {
fopAc_ac_c* pActor = static_cast<fopAc_ac_c*>(param_1);
if(fopAcM_GetName(pActor) == PROC_NZ || fopAcM_GetName(pActor) == PROC_BOMB) {
fopAcM_delete(pActor);
}
return false;
}
/* 00003528-0000377C .text searchTsuboAndBarrel_CB__FPvPv */
static BOOL searchTsuboAndBarrel_CB(void* param_1, void* param_2) {
/* Nonmatching */
fopAc_ac_c* pActor1 = static_cast<fopAc_ac_c*>(param_1);
fopAc_ac_c* pActor2 = static_cast<fopAc_ac_c*>(param_2);
if(fopAcM_GetName(pActor1) == PROC_TSUBO || fopAcM_GetName(pActor1) == PROC_Obj_Barrel) {
cXyz delta = pActor1->current.pos - pActor2->current.pos;
if(delta.absXZ() < 300.0f) {
if(fopAcM_GetName(pActor1) == PROC_TSUBO) {
static_cast<daTsubo::Act_c*>(pActor1)->pos_init();
return true;
}
else if(fopAcM_GetName(pActor1) == PROC_TSUBO) { // this condition seems weird, also has another part with barrel member variables
static_cast<daObjBarrel::Act_c*>(pActor1)->pos_init();
return true;
}
if(fopAcM_GetName(pActor1) == PROC_TSUBO) {
fopAcM_delete(pActor1);
}
}
}
return false;
}
/* 0000377C-00003908 .text searchEsaInit_CB__FPvPv */
static BOOL searchEsaInit_CB(void* pActor1, void* pActor2) {
if(fopAcM_GetName(pActor1) == PROC_ESA) {
esa_class* pBait = static_cast<esa_class*>(pActor1);
daNpc_Nz_c* pNz = static_cast<daNpc_Nz_c*>(pActor2);
cXyz pos(pNz->field_0x6C4);
pos.x += cM_ssin(pNz->current.angle.y) * 150.0f;
pos.z += cM_scos(pNz->current.angle.y) * 150.0f;
s16 angle = cM_rndFX(358.0f) * 182.0444f;
f32 mag = cM_rndF(30.0f);
pos.x += mag * cM_ssin(angle);
pos.z += mag * cM_scos(angle);
pBait->current.pos = pos;
pBait->old.pos = pos;
mDoMtx_stack_c::transS(pBait->current.pos);
mDoMtx_stack_c::ZXYrotM(pBait->current.angle);
pBait->mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
return false;
}
/* 00003908-00003B90 .text cutProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutProc() {
/* Nonmatching */
typedef void(daNpc_Nz_c::*Func_t)(void);
struct mode_entry_t {
Func_t start;
Func_t proc;
};
field_0x8F4 = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName());
if(field_0x8F4 == -1) {
return;
}
static char* action_table[] = {
"EATESA",
"EATESA1ST",
"KILLALL",
"SHOW",
"HIDE",
"SETANM",
"GOHOME",
"CHKGETITEM",
};
static mode_entry_t cut_tbl[] = {
{
&daNpc_Nz_c::cutEatesaStart,
&daNpc_Nz_c::cutEatesaProc,
},
{
&daNpc_Nz_c::cutEatesaFirstStart,
&daNpc_Nz_c::cutEatesaFirstProc,
},
{
&daNpc_Nz_c::cutKillAllStart,
&daNpc_Nz_c::cutKillAllProc,
},
{
&daNpc_Nz_c::cutShowStart,
&daNpc_Nz_c::cutShowProc,
},
{
&daNpc_Nz_c::cutHideStart,
&daNpc_Nz_c::cutHideProc,
},
{
&daNpc_Nz_c::cutSetAnmStart,
&daNpc_Nz_c::cutSetAnmProc,
},
{
&daNpc_Nz_c::cutGoHomeStart,
&daNpc_Nz_c::cutGoHomeProc,
},
{
&daNpc_Nz_c::cutChkGetItemStart,
&daNpc_Nz_c::cutChkGetItemProc,
}
};
int actIdx = dComIfGp_evmng_getMyActIdx(field_0x8F4, action_table, ARRAY_SIZE(action_table), 1, 0);
if(actIdx == -1) {
dComIfGp_evmng_cutEnd(field_0x8F4);
return;
}
if(dComIfGp_evmng_getIsAddvance(field_0x8F4)) {
(this->*cut_tbl[actIdx].start)();
}
(this->*cut_tbl[actIdx].proc)();
}
/* 00003B90-00003BB8 .text cutEatesaStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaStart() {
setAnm(6, false);
}
/* 00003BB8-00003CEC .text cutEatesaProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaProc() {
/* Nonmatching */
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsa_CB, this);
fopAc_ac_c* pBait = mpBait;
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
current.angle.y = shape_angle.y = home.angle.y + (s16)((int)cM_rndFX(4.0f) * 2048);
}
if(pBait) {
fopAcM_delete(pBait);
mpBait = 0;
field_0x910 = FLOAT_MIN;
}
else {
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
current.angle.y = shape_angle.y = home.angle.y;
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
}
/* 00003CEC-00003D40 .text cutEatesaFirstStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaFirstStart() {
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsa_CB, this);
current.angle.y = shape_angle.y = home.angle.y;
setAnm(0xA, false);
}
/* 00003D40-00003F54 .text cutEatesaFirstProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutEatesaFirstProc() {
/* Nonmatching */
cXyz target(field_0x6C4);
target.x += cM_ssin(home.angle.y) * 100.0f;
target.z += cM_scos(home.angle.y) * 100.0f;
if(field_0x6D5 == 10) {
f32 temp2 = cLib_addCalcPosXZ(&current.pos, target, 0.25f, 10.0f, 2.0f);
s16 temp3 = cLib_targetAngleY(&current.pos, &target);
cLib_addCalcAngleS2(&shape_angle.y, temp3, 8, 0x1000);
if(cLib_IsZero(temp2) && mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
setAnm(6, false);
field_0x906 = 2;
}
else {
return;
}
}
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsa_CB, this);
fopAc_ac_c* pBait = mpBait;
if(pBait) {
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f) && cLib_calcTimer(&field_0x906) == 0) {
fopAcM_delete(pBait);
mpBait = 0;
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
else {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
/* 00003F54-0000404C .text cutKillAllStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutKillAllStart() {
/* Nonmatching */
fopAcM_Search((fopAcIt_JudgeFunc)&searchNzAndBomb_CB, this);
fopAcM_Search((fopAcIt_JudgeFunc)&searchTsuboAndBarrel_CB, this);
fopAcM_Search((fopAcIt_JudgeFunc)&searchEsaInit_CB, this);
cXyz pos = field_0x6C4;
pos.x += cM_ssin(home.angle.y + 0x8000) * 250.0f;
pos.z += cM_scos(home.angle.y + 0x8000) * 250.0f;
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, home.angle.y + 0x8000);
}
/* 0000404C-00004080 .text cutKillAllProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutKillAllProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
/* 00004080-0000408C .text cutShowStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutShowStart() {
field_0x8FC = true;
}
/* 0000408C-000040C0 .text cutShowProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutShowProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
/* 000040C0-000040CC .text cutHideStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutHideStart() {
field_0x8FC = false;
}
/* 000040CC-00004100 .text cutHideProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutHideProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
/* 00004100-00004204 .text cutSetAnmStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutSetAnmStart() {
/* Nonmatching */
u32* pAnmNo = dComIfGp_evmng_getMyIntegerP(field_0x8F4, "anm_no");
s32 anmNo = 0;
u32* pLoopCount = dComIfGp_evmng_getMyIntegerP(field_0x8F4, "loop_count");
if(pAnmNo) {
anmNo = *pAnmNo;
}
if(pLoopCount) {
field_0x906 = *pLoopCount;
}
else {
field_0x906 = 0;
}
setAnm(anmNo, false);
if(anmNo == 8) {
fopAcM_seStart(this, JA_SE_CV_M_NZ_TALK_IN, 0);
}
}
/* 00004204-000043C0 .text cutSetAnmProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutSetAnmProc() {
/* Nonmatching */
if(mpMorf->checkFrame(mpMorf->getEndFrame() - 1.0f)) {
field_0x906--;
}
if(field_0x906 <= 0) {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
if(field_0x6D5 == 8) {
if(mpMorf->checkFrame(8.0f)) {
setSmokeParticle();
}
else if (mpMorf->checkFrame(13.0f)) {
J3DModel* pModel = mpMorf->getModel();
cXyz scale(0.65f, 0.65f, 0.65f);
csXyz temp2(current.angle);
temp2.y -= 0x4000;
cXyz temp4(10.0f, 0.0f, 10.0f);
cXyz pos;
GXColor color;
color.r = 0x80;
color.g = 0x80;
color.b = 0x80;
mDoMtx_stack_c::copy(pModel->getAnmMtx(m_jnt.getHeadJntNum()));
mDoMtx_stack_c::multVec(&temp4, &pos);
dComIfGp_particle_set(0x57, &pos, &shape_angle, &scale, 0xFF, 0, -1, &color);
}
}
}
/* 000043C0-000043C4 .text cutGoHomeStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutGoHomeStart() {
return;
}
/* 000043C4-000044D4 .text cutGoHomeProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutGoHomeProc() {
/* Nonmatching */
s16 target = cLib_targetAngleY(&current.pos, &home.pos);
cLib_addCalcAngleS2(&current.angle.y, target, 4, 0x1000);
shape_angle.y = current.angle.y;
s16 dist = cLib_distanceAngleS(target, current.angle.y);
if(dist < 0x4000) {
if(field_0x6D5 != 0xA) {
fopAcM_seStart(this, JA_SE_CV_M_NZ_TALK_OUT, 0);
}
setAnm(0xA, false);
if(cLib_addCalcPosXZ(&current.pos, home.pos, 0.5f, 10.0f, 1.0f) < 1.0f) {
dComIfGp_evmng_cutEnd(field_0x8F4);
}
}
}
/* 000044D4-00004520 .text cutChkGetItemStart__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutChkGetItemStart() {
if(field_0x8F8 >= 3) {
fopAcM_orderChangeEventId(dComIfGp_getPlayer(0), this, field_0x8FA, 1, 0xFFFF);
}
}
/* 00004520-00004554 .text cutChkGetItemProc__10daNpc_Nz_cFv */
void daNpc_Nz_c::cutChkGetItemProc() {
dComIfGp_evmng_cutEnd(field_0x8F4);
}