Files
tww/src/d/actor/d_a_npc_photo.cpp
T
Zeclos 3755fbfd39 D_a_npc_photo (#759)
* bit too difficult for me for now, might go back later

* progress

* getmsg

* logic matching data isnt

* data section matches

* mathubcg 100%

* cleanup

* revert this change

* final cleanup and configure.py

* nevermind cleanup

* Equivalent onstead of matching

* removed padding

* cleanup code comments and a bit more

* Fix build

---------

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>
2025-05-25 17:01:01 -04:00

2303 lines
62 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_npc_photo.cpp
//
#include "d/actor/d_a_npc_photo.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_com_lib_game.h"
#include "d/d_com_inf_game.h"
#include "d/d_a_obj.h"
#include "d/d_path.h"
#include "d/actor/d_a_player_main.h"
#include "d/d_camera.h"
#include "d/res/res_po.h"
#include "d/d_snap.h"
#include "d/d_kankyo_rain.h"
#include "d/d_picture_box.h"
#include "d/actor/d_a_tag_photo.h"
#include "weak_bss_936_to_1036.h" // IWYU pragma: keep
#include "weak_data_1811.h" // IWYU pragma: keep
extern dCcD_SrcCyl dNpc_cyl_src;
const char daNpcPhoto_c::m_arcname[] = "Auc";
static const char* l_arcname_tbl[] = {
"Po"
};
static sPhotoAnmDat l_npc_anm_wait[] = {
{
0x00,
0x08,
0xFF,
},
};
static sPhotoAnmDat l_npc_anm_talk[] = {
{
0x01,
0x08,
0xFF,
},
};
static sPhotoAnmDat l_npc_anm_walk[] = {
{
0x03,
0x08,
0xFF,
},
};
static sPhotoAnmDat l_npc_anm_spit[] = {
{
0x04,
0x08,
0x01
},
{
0x00,
0x08,
0xFF,
},
};
static sPhotoAnmDat l_npc_anm_talk2[] = {
{
0x02,
0x08,
0x03,
},
{
0x00,
0x08,
0xFF,
},
};
static sPhotoAnmDat l_npc_anm_talk4[] = {
{
0x02,
0x08,
0x01,
},
{
0x01,
0x08,
0xFF,
},
};
struct NpcDatStruct {
/* 0x00 */ f32 field_0x00;
/* 0x04 */ s16 field_0x04;
/* 0x06 */ s16 field_0x06;
/* 0x08 */ s16 field_0x08;
/* 0x0A */ s16 field_0x0A;
/* 0x0C */ s16 field_0x0C;
/* 0x0E */ s16 field_0x0E;
/* 0x10 */ s16 field_0x10;
/* 0x12 */ s16 field_0x12;
/* 0x14 */ s16 field_0x14;
/* 0x16 */ s16 field_0x16;
/* 0x18 */ s16 field_0x18;
/* 0x1C */ f32 field_0x1C;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ f32 field_0x24;
/* 0x28 */ s16 field_0x28;
/* 0x2C */ f32 field_0x2C;
/* 0x30 */ f32 field_0x30;
/* 0x34 */ f32 field_0x34;
/* 0x38 */ f32 field_0x38;
/* 0x3C */ f32 field_0x3C;
/* 0x40 */ f32 field_0x40;
/* 0x44 */ s16 field_0x44;
/* 0x46 */ s16 field_0x46;
/* 0x48 */ s16 field_0x48;
/* 0x4A */ s16 field_0x4A;
/* 0x4C */ s16 field_0x4C;
/* 0x4E */ s16 field_0x4E;
/* 0x50 */ s16 field_0x50;
/* 0x52 */ bool field_0x52;
/* 0x53 */ bool field_0x53;
}; // Size: 0x54
static NpcDatStruct l_npc_dat = {
0.0f,
0x09C4,
0x07D0,
0x1388,
0x1F40,
0xFF6A,
0xFE00,
0xFC18,
0xE0C0,
0x01f4,
0x0320,
0x0708,
0.0f,
215.0f,
30.0f,
0x7FFF,
200.0f,
300.0f,
-50.0f,
0.3f,
5.0f,
1.3f,
0x03E8,
0x0006,
0x0400,
0x001E,
0x001E,
0x270F,
0x270F,
true,
true,
};
static u32 l_msg_1st_talk[] = {
0x2A31,
0x2A32,
0x2A33,
0x0000
};
static u32 l_msg_2nd_talk[] = {
0x2A34,
0x0000
};
static u32 l_msg_1st_photo[] = {
0x2A35,
0x2A36,
0x0000
};
static u32 l_msg_2nd_photo[] = {
0x2A37,
0x2A38,
0x0000
};
static u32 l_msg_1st_order[] = {
0x2A39,
0x2A3A,
0x2A3C,
0x2A3D,
0x2A3E,
0x2A3F,
0x2A40,
0x2A41,
0x2A42,
0x2A43,
0x0001,
};
static s16 l_msg_1st_order_c[] = {
0xFFFF,
0xFF00,
0xFF01,
0xFFFF,
0x0002
};
static u32 l_msg_1st_order_not_end[] = {
0x2A44,
0x2A45,
0x0000
};
static u16 l_msg_1st_order_not_end_c[] = {
0xFF02
};
static u32 l_msg_2nd_order[] = {
0x2A46,
0x2A47,
0x2A48,
0x0003
};
static u8 l_msg_2nd_order_c[] = {
0xFF,
0x00,
0xFF
};
static u32 l_msg_2nd_order_not_end[] = {
0x2A49,
0x2A4A,
0x0000
};
static u16 l_msg_2nd_order_not_end_c[] = {
0xFF02
};
static u32 l_msg_3rd_order[] = {
0x2A4B,
0x2A4C,
0x2A4D,
0x2A4E,
0x0005,
};
static u32 l_msg_3rd_order_c[] = {
0xFF00FF02
};
static u32 l_msg_3rd_order_not_end[] = {
0x2A4F,
0x2A50,
0x0000,
};
static u16 l_msg_3rd_order_not_end_c[] = {
0xFFFF
};
static u32 l_msg_3rd_order_end[] = {
0x2A51,
0x0000,
};
static u32 l_msg_not_color[] = {
0x2A52,
0x2A53,
0x0000
};
static u16 l_msg_not_color_c[] = {
0xFF00
};
static u32 l_msg_color[] = {
0x2A54,
0x2A55,
0x0000
};
static u16 l_msg_color_c[] = {
0xFF01
};
static u32 l_msg_week_1st[] = {
0x3781,
0x3782,
0x3783,
0x3784,
0x3785,
0x0000
};
static u32 l_msg_week0[] = {
0x3779,
0x377A,
0x3785,
0x0000
};
static u32 l_msg_week1[] = {
0x3779,
0x377B,
0x3785,
0x0000
};
static u32 l_msg_week2[] = {
0x3779,
0x377C,
0x3785,
0x0000
};
static u32 l_msg_week3[] = {
0x3779,
0x377D,
0x3785,
0x0000
};
static u32 l_msg_week4[] = {
0x3779,
0x377E,
0x3785,
0x0000
};
static u32 l_msg_week5[] = {
0x3779,
0x377F,
0x3785,
0x0000
};
static u32 l_msg_week6[] = {
0x3779,
0x3780,
0x3785,
0x0000
};
static u32* l_msg_week[] = {
l_msg_week0, l_msg_week1, l_msg_week2, l_msg_week3,
l_msg_week4, l_msg_week5, l_msg_week6,
};
static u32 l_msg_1st_talk_photo[] = {
0x2A69,
0x2A6A,
0x2A6B,
0x2A6C,
0x0000
};
static u32 l_msg_talk_photo_0[] = {
0x2A6E,
0x2A6F,
0x0000,
};
static u32 l_msg_talk_photo_1[] = {
0x2A71,
0x2A72,
0x0000,
};
static u32 l_msg_talk_photo_2[] = {
0x2A74,
0x2A75,
0x0000,
};
static u32 l_msg_talk_photo_3[] = {
0x2A77,
0x2A78,
0x0000,
};
static u32 l_msg_talk_photo_4[] = {
0x2A7A,
0x2A7B,
0x0000,
};
static u32 l_msg_talk_photo_5[] = {
0x2A7D,
0x2A7E,
0x0000,
};
static u32 l_msg_talk_photo_6[] = {
0x2A80,
0x2A81,
0x0000,
};
static u32* l_msg_talk_photo[] = {
l_msg_talk_photo_0, l_msg_talk_photo_1, l_msg_talk_photo_2, l_msg_talk_photo_3,
l_msg_talk_photo_4, l_msg_talk_photo_5, l_msg_talk_photo_6,
};
static u32 l_msg_buy_photo[] = {
0x3786,
0x0000
};
static u32 l_msg_get_photo[] = {
0x3785,
0x0000
};
static u32 l_msg_2F[] = {
0x2A82,
0x2A83,
0x2A84
};
static u32 l_msg_down[] = {
0x2A86,
0x0000
};
static u32 l_msg_ub4[] = {
0x2D62,
0x0000,
};
static u32 l_msg_1st_order_xy[] = {
0x2A5E,
0x2A5F,
0x2A60,
0x0002
};
static u32 l_msg_2nd_order_xy[] = {
0x2A61,
0x2A62,
0x2A60,
0x0004
};
static u32 l_msg_3rd_order_xy[] = {
0x2A64,
0x2A60,
0x0006
};
static u32 l_msg_color_xy[] = {
0x2A58,
0x2A59,
0x2A5A,
0x0007,
0x2A85,
0x0008,
0x2A5B,
0x0000
};
static u32 l_msg_xy_buy_photo[] = {
0x3788,
0x3789,
0x0009,
0x378C,
0x000A,
0x378D,
0x000B,
0x3786,
0x0000
};
static dCcD_SrcCyl l_cyl_src2 = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
/* SrcObjTg Type */ 0,
/* SrcObjTg SPrm */ 0,
/* SrcObjCo SPrm */ cCcD_CoSPrm_NoCoHitInfSet_e | cCcD_CoSPrm_VsGrpAll_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_Set_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 */ 40.0f,
/* Height */ 160.0f,
},
};
static char* l_npc_staff_id = {
"Po"
};
static const int l_bck_ix_tbl[] = {
PO_BCK_WAIT01,
PO_BCK_TALK01,
PO_BCK_TALK02,
PO_BCK_WALK01,
PO_BCK_SPIT,
};
static const int l_btp_ix_tbl[] = {
PO_BTP_MABA01,
PO_BTP_MABA02
};
struct SaveDatStruct {
/* 0x00 */ u16 field_0x00;
/* 0x02 */ u16 field_0x02;
/* 0x04 */ u16 field_0x04;
/* 0x06 */ u16 field_0x06;
}; // Size: 0x08
static const SaveDatStruct l_save_dat = {
0x1208,
0x1701,
0x1601,
0xC407,
};
struct PsoData {
/* 0x00 */ f32 field_0x00;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ f32 field_0x0C;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ s16 field_0x14;
/* 0x16 */ u8 field_0x16;
/* 0x17 */ u8 field_0x17;
}; // Size: 0x18
static PsoData l_pso_photo = {
0.0f,
100.0f,
-30.0f,
40.0f,
90.0f,
0x0000,
0xFF,
0x04
};
static cXyz l_counter_pos[] = {
cXyz(-490.0f, 0.0f, -10.0f),
cXyz(-260.0f, 0.0f, -250.0f)
};
static cXyz l_gallery_pos(-260.0f, 500.0f, 400.0f);
/* 000000EC-000002D0 .text __ct__12daNpcPhoto_cFv */
daNpcPhoto_c::daNpcPhoto_c() {
field_0x9C3 = 0;
field_0x9C2 = false;
field_0x9C0 = 0;
field_0x9C1 = 0;
field_0x984 = 0.0f;
field_0x9A8 = 0;
field_0x988 = 60.0f;
field_0x958.x = 0.0f;
field_0x958.y = 0.0f;
field_0x958.z = 0.0f;
field_0x9CD = false;
field_0x9D6 = 0;
field_0x994 = true;
field_0x9AE = home.angle.y;
field_0x9C8 = false;
field_0x9C7 = true;
field_0x98C = -1.0f;
}
/* 00000740-00000858 .text daNpc_Photo_nodeCallBack__FP7J3DNodei */
static BOOL daNpc_Photo_nodeCallBack(J3DNode* node, int calcTiming) {
if (calcTiming == J3DNodeCBCalcTiming_In) {
J3DModel* model = j3dSys.getModel();
J3DJoint* joint = (J3DJoint*)node;
daNpcPhoto_c* i_this = (daNpcPhoto_c*)model->getUserArea();
s32 jntNo = joint->getJntNo();
cMtx_copy(model->getAnmMtx(jntNo), *calc_mtx);
if(jntNo == i_this->m_jnt.getHeadJntNum()) {
mDoMtx_XrotM(*calc_mtx, i_this->m_jnt.getHead_y());
mDoMtx_ZrotM(*calc_mtx, -i_this->m_jnt.getHead_x());
}
if(jntNo == i_this->m_jnt.getBackboneJntNum()) {
mDoMtx_XrotM(*calc_mtx, i_this->m_jnt.getBackbone_y());
mDoMtx_ZrotM(*calc_mtx, -i_this->m_jnt.getBackbone_x());
}
model->setAnmMtx(jntNo, *calc_mtx);
cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx);
}
return TRUE;
}
/* 00000858-00000878 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
return static_cast<daNpcPhoto_c*>(i_this)->createHeap();
}
/* 00000878-0000095C .text phase_1__FP12daNpcPhoto_c */
static cPhs_State phase_1(daNpcPhoto_c* i_this) {
fopAcM_SetupActor(i_this, daNpcPhoto_c);
s16 arg0 = i_this->getPrmArg0();
if(arg0 != 255){
if(arg0 == 0){
if(!dComIfGs_checkGetItem(dItem_COLLECT_MAP_20_e) && arg0 != dComIfGp_getStartStagePoint()){
return cPhs_STOP_e;
}
} else{
if(dComIfGs_checkGetItem(dItem_COLLECT_MAP_20_e) || arg0 != dComIfGp_getStartStagePoint()) {
return cPhs_STOP_e;
}
i_this->field_0x9C1 = 4;
}
}
i_this->field_0x9C2 = true;
return cPhs_NEXT_e;
}
/* 0000095C-000009D4 .text phase_2__FP12daNpcPhoto_c */
static cPhs_State phase_2(daNpcPhoto_c* i_this) {
cPhs_State phase_state = dComIfG_resLoad(i_this->getPhaseP(), l_arcname_tbl[0]);
if (phase_state == cPhs_COMPLEATE_e) {
if (fopAcM_entrySolidHeap(i_this, CheckCreateHeap, 0)) {
return i_this->createInit();
} else {
i_this->mpMorf = NULL;
return cPhs_ERROR_e;
}
}
return phase_state;
}
/* 000009D4-00000A04 .text _create__12daNpcPhoto_cFv */
cPhs_State daNpcPhoto_c::_create() {
static cPhs__Handler l_method[] = {
(cPhs__Handler)phase_1,
(cPhs__Handler)phase_2,
NULL,
};
return dComLbG_PhaseHandler(&mPhs2, l_method, this);
}
/* 00000A04-00000CA0 .text createHeap__12daNpcPhoto_cFv */
BOOL daNpcPhoto_c::createHeap() {
J3DModelData* modelData = (J3DModelData *)dComIfG_getObjectIDRes(l_arcname_tbl[0], PO_BDL_PO);
mpMorf = new mDoExt_McaMorf(
modelData,
NULL, NULL,
(J3DAnmTransform*)dComIfG_getObjectIDRes(l_arcname_tbl[0], l_bck_ix_tbl[field_0x9C8]),
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1, NULL,
0x80000,0x11020022
);
if (mpMorf == NULL || mpMorf->getModel() == NULL) {
return FALSE;
}
m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head"));
JUT_ASSERT(0x4A7, m_jnt.getHeadJntNum() >= 0);
m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone"));
JUT_ASSERT(0x4AC, m_jnt.getBackboneJntNum() >= 0);
if (!initTexPatternAnm(false, -1)) {
return FALSE;
}
for(u16 i = 0; i < modelData->getJointNum(); i++) {
if(i == m_jnt.getHeadJntNum() || i == m_jnt.getBackboneJntNum()) {
modelData->getJointNodePointer(i)->setCallBack(daNpc_Photo_nodeCallBack);
}
}
mpMorf->getModel()->setUserArea((u32)this);
mAcchCir.SetWall(30.0f, 30.0f);
mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
return TRUE;
return FALSE;
}
/* 00000CA0-00000CC0 .text daNpcPhoto_XyCheckCB__FPvi */
static s16 daNpcPhoto_XyCheckCB(void* i_this, int i_itemBtn) {
return ((daNpcPhoto_c*)i_this)->XyCheckCB(i_itemBtn);
}
/* 00000CC0-00000CE0 .text daNpcPhoto_XyEventCB__FPvi */
static s16 daNpcPhoto_XyEventCB(void* i_this, int i_itemBtn) {
return ((daNpcPhoto_c*)i_this)->XyEventCB(i_itemBtn);
}
/* 00000CE0-00001048 .text createInit__12daNpcPhoto_cFv */
cPhs_State daNpcPhoto_c::createInit() {
int temp = 0xFF;
u8 pathIndex = getPrmRailID();
if(pathIndex != 0xFF) {
mPathRun.setInf(pathIndex, fopAcM_GetRoomNo(this), true);
if(mPathRun.mPath == NULL) {
return cPhs_ERROR_e;
}
dPath_GetNextRoomPath(mPathRun.mPath, -1);
if(dComIfGs_isEventBit(l_save_dat.field_0x02)) {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
old.pos = point;
current.pos = old.pos;
mPathRun.incIdxLoop();
field_0x9A8 = 1;
field_0x9C1 = 2;
}
temp = 0xFE;
}
gravity = -9.0f;
mPhotoLinkBackEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_LINK_BACK",0xff);
mPhotoGetItemEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GET_ITEM",0xff);
mPhotoGetItem2EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GET_ITEM2",0xff);
mPhotoGetPhotoEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GET_PHOTO",0xff);
mPhotoGalleryEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GALLERY",0xff);
mPhotoCounterTalk0EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_COUNTER_TALK0",0xff);
mPhotoCounterTalk1EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_COUNTER_TALK1",0xff);
mPhotoDateUB4EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_DATE_UB4",0xff);
field_0x9A6 = mPhotoCounterTalk0EventIdx;
mEventCut.setActorInfo2(l_npc_staff_id, this);
field_0x9B6 = 0;
field_0x9BC = false;
field_0x9BD = false;
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 173;
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 173;
attention_info.flags = fopAc_Attn_UNK1000000_e | fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e;
eventInfo.setXyCheckCB(&daNpcPhoto_XyCheckCB);
eventInfo.setXyEventCB(&daNpcPhoto_XyEventCB);
if (field_0x9C1 == 4) {
field_0x9D7 = false;
field_0x9D8 = false;
} else {
field_0x9D7 = l_npc_dat.field_0x52;
field_0x9D8 = l_npc_dat.field_0x53;
}
field_0x9B2 = l_npc_dat.field_0x28;
mObjAcch.CrrPos(*dComIfG_Bgsp());
if(mObjAcch.GetGroundH() != -G_CM3D_F_INF) {
current.pos.y = home.pos.y = mObjAcch.GetGroundH();
}
setMtx();
mpMorf->getModel()->calc();
mStts.Init(temp, 0xFF, this);
mCyl.Set(dNpc_cyl_src);
mCyl.SetStts(&mStts);
setCollision(&mCyl, current.pos + field_0x958, field_0x988, 150.0f);
field_0x6F8[0].Set(l_cyl_src2);
field_0x6F8[0].SetStts(&mStts);
field_0x6F8[1].Set(l_cyl_src2);
field_0x6F8[1].SetStts(&mStts);
return 4;
}
/* 00001048-000010A4 .text _delete__12daNpcPhoto_cFv */
bool daNpcPhoto_c::_delete() {
dComIfG_resDelete(getPhaseP(), l_arcname_tbl[0]);
if(heap && mpMorf) {
mpMorf->stopZelAnime();
}
return true;
}
/* 000010A4-0000125C .text _draw__12daNpcPhoto_cFv */
bool daNpcPhoto_c::_draw() {
J3DModel* model = mpMorf->getModel();
J3DModelData *model_data = model->getModelData();
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(model, &tevStr);
mBtpAnm.entry(model_data, mFrame);
mpMorf->updateDL();
mBtpAnm.remove(model_data);
cXyz shadowPos(
current.pos.x,
current.pos.y + 150.0f,
current.pos.z
);
mShadowId = dComIfGd_setShadow(
mShadowId, 1, mpMorf->getModel(), &shadowPos, 800.0f, 20.0f,
current.pos.y, mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr
);
if (field_0x9C1 == 4) {
dSnap_Obj obj;
cXyz temp(
l_pso_photo.field_0x00,
l_pso_photo.field_0x04,
l_pso_photo.field_0x08
);
temp += current.pos;
obj.SetInf(5, this, l_pso_photo.field_0x16, l_pso_photo.field_0x17, 0x7FFF);
obj.SetGeo(temp, l_pso_photo.field_0x0C, l_pso_photo.field_0x10, l_pso_photo.field_0x14 + current.angle.y);
dSnap_RegistSnapObj(obj);
} else {
dSnap_RegistFig(DSNAP_TYPE_UNK5E, this, 1.0f, 1.0f, 1.0f);
}
return true;
}
static daNpcPhoto_c::MoveFunc_t moveProc[] = {
&daNpcPhoto_c::executeWait,
&daNpcPhoto_c::executeTalk,
&daNpcPhoto_c::executeWalk,
&daNpcPhoto_c::executeTurn,
};
/* 0000125C-0000151C .text _execute__12daNpcPhoto_cFv */
bool daNpcPhoto_c::_execute() {
m_jnt.setParam(
l_npc_dat.field_0x08, l_npc_dat.field_0x0A, l_npc_dat.field_0x10,
l_npc_dat.field_0x12, l_npc_dat.field_0x04, l_npc_dat.field_0x06,
l_npc_dat.field_0x0C, l_npc_dat.field_0x0E, l_npc_dat.field_0x14
);
chkAttention();
mEyePos.set(
current.pos.x,
current.pos.y + l_npc_dat.field_0x30,
current.pos.z
);
checkOrder();
if (!dComIfGp_event_runCheck() || (eventInfo.checkCommandTalk() && field_0x9C7)) {
(this->*moveProc[field_0x9C0])();
} else {
eventMove();
}
eventOrder();
playTexPatternAnm();
playAnm();
if(field_0x9C8 == 3){
cLib_chaseF(&speedF, field_0x984, 0.1f);
float temp = speedF * l_npc_dat.field_0x38;
if(temp < 0.5f) {
temp = 0.5f;
}
mpMorf->setPlaySpeed(temp);
} else {
cLib_chaseF(&speedF, field_0x984, 0.5f);
}
fopAcM_posMoveF(this, mStts.GetCCMoveP());
mObjAcch.CrrPos(*dComIfG_Bgsp());
setCollision(&mCyl, current.pos + field_0x958, field_0x988, 150.0f);
if (field_0x9C1 == 2) {
for(int i = 0; i < 2; i++) {
setCollision(&field_0x6F8[i],
cXyz(
l_counter_pos[i].x,
l_counter_pos[i].y,
l_counter_pos[i].z
),
110.0f, 150.0f
);
}
}
cXyz temp(
l_npc_dat.field_0x1C,
l_npc_dat.field_0x20,
l_npc_dat.field_0x24
);
mDoMtx_stack_c::YrotS(current.angle.y);
mDoMtx_stack_c::multVec(&temp, &temp);
temp += current.pos;
attention_info.position = temp;
eyePos = mEyePos;
lookBack();
setMtx();
return false;
}
/* 0000151C-00001580 .text executeCommon__12daNpcPhoto_cFv */
bool daNpcPhoto_c::executeCommon() {
if (field_0x9BD) {
field_0x9BE = 1;
} else {
field_0x9BE = 0;
}
if (field_0x9BC == 1) {
executeSetMode(1);
}
return field_0x9BC;
}
/* 00001580-000017D0 .text executeSetMode__12daNpcPhoto_cFUc */
void daNpcPhoto_c::executeSetMode(u8 param_1) {
s16 angle;
field_0x984 = 0.0f;
switch (param_1) {
case 0:
setAnmTbl(l_npc_anm_wait);
field_0x9A8 = l_npc_dat.field_0x4A + cM_rndF(l_npc_dat.field_0x4C - l_npc_dat.field_0x4A);
break;
case 2:
setAnmTbl(l_npc_anm_walk);
field_0x9A8 = l_npc_dat.field_0x4E + cM_rndF(l_npc_dat.field_0x50 - l_npc_dat.field_0x4E);
break;
case 3:
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
if (angle == current.angle.y) {
param_1 = 2;
setAnmTbl(l_npc_anm_walk);
field_0x9A8 = l_npc_dat.field_0x4E + cM_rndF(l_npc_dat.field_0x50 - l_npc_dat.field_0x4E);
}
break;
}
field_0x9C0 = param_1;
}
/* 000017D0-00001A80 .text executeWait__12daNpcPhoto_cFv */
void daNpcPhoto_c::executeWait() {
if(!executeCommon()) {
field_0x988 = 60.0f;
field_0x958.x = 0.0f;
field_0x958.y = 0.0f;
field_0x958.z = 0.0f;
field_0x9CD = false;
if(!dComIfGs_isEventBit(l_save_dat.field_0x02)){
field_0x988 = 150.0f;
f32 zPos = l_npc_dat.field_0x34;
field_0x958.x = 0.0f;
field_0x958.y = 0.0f;
field_0x958.z = zPos;
if(mCyl.ChkCoHit()) {
daNpcPhoto_c* pActor = (daNpcPhoto_c*)mCyl.GetCoHitAc();
if(pActor && fopAcM_GetProfName(pActor) == PROC_PLAYER) {
field_0x9BE = 2;
}
}
} else if(field_0x9C1 == 4 && ((field_0x9C6 & 0x10) == 0)){
daPy_py_c* link = (daPy_py_c*)dComIfGp_getLinkPlayer();
if (link->current.pos.y < 10.0f && link->current.pos.x > -300.0f && link->current.pos.z > -500.0f) {
field_0x9BE = 10;
}
} else {
if(
dComIfGp_getStartStagePoint() == 0 &&
(!dComIfGs_isEventBit(l_save_dat.field_0x04) && field_0x9BE != 7) &&
dComIfGp_getLinkPlayer()->current.pos.y > 400.0f &&
dComIfGp_getLinkPlayer()->current.pos.x > -600.0f){
field_0x9BE = 7;
}
if(field_0x9C1 == 2){
eventInfo.setEventId(-1);
field_0x9C7 = true;
dCcD_GObjInf* pGObjInf;
for (int i = 0; i < 2; i++) {
pGObjInf = &field_0x6F8[i];
if (pGObjInf->ChkCoHit()) {
daNpcPhoto_c* pActor = (daNpcPhoto_c*)pGObjInf->GetCoHitAc();
if(pActor != NULL && fopAcM_GetProfName(pActor) == PROC_PLAYER) {
field_0x9CD = true;
break;
}
}
}
}
if(field_0x9C1 == 1 && !field_0x9BD && dComIfGp_getLinkPlayer()->current.pos.y < current.pos.y + -50.0f) {
executeSetMode(3);
field_0x9C1 = 3;
}
if(field_0x9C1 == 3 && !field_0x9BD) {
if(field_0x9A8 == 0) {
executeSetMode(3);
} else {
field_0x9A8--;
}
}
}
}
}
/* 00001A80-00001BB4 .text executeTalk__12daNpcPhoto_cFv */
void daNpcPhoto_c::executeTalk() {
executeCommon();
if(!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) {
if(talk2(1) == fopMsgStts_BOX_CLOSED_e){
field_0x9BC = false;
executeSetMode(0);
u8 temp = field_0x9C6;
if((temp & 1) != 0){
field_0x9C6 = temp & 254;
mItemNo = 31;
field_0x9BE = 4;
} else {
if((temp & 2) != 0){
field_0x9C6 = temp & ~0x02;
mItemNo = 38;
field_0x9BE = 5;
} else {
if((temp & 4) != 0){
field_0x9C6 = temp & ~0x04;
field_0x9BE = 3;
setAnmTbl(l_npc_anm_spit);
field_0x9C9 |= 4;
} else {
field_0x9C6 = temp | 64;
}
}
}
} else {
setAnmFromMsgTag();
}
}
}
/* 00001BB4-00001D98 .text executeWalk__12daNpcPhoto_cFv */
void daNpcPhoto_c::executeWalk() {
if(!executeCommon()) {
bool temp = false;
if(mPathRun.chkPointPass(current.pos, mPathRun.mbGoingForwards) && !mPathRun.nextIdxAuto()) {
temp = true;
}
if (field_0x9BD != 0) {
executeSetMode(0);
} else if (!temp) {
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
s16 angle;
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
field_0x9BA = angle;
field_0x994 = false;
field_0x9B6 = l_npc_dat.field_0x18;
field_0x9D6 = 2;
m_jnt.setTrn();
field_0x984 = l_npc_dat.field_0x3C;
u8 pointIndex = mPathRun.mCurrPointIndex;
if (mPathRun.mbGoingForwards) {
pointIndex--;
} else {
pointIndex++;
}
cXyz point2 = mPathRun.getPoint(pointIndex);
if (point2.y - point.y > 400.0f) {
field_0x984 = l_npc_dat.field_0x3C * l_npc_dat.field_0x40;
}
} else{
executeSetMode(0);
field_0x9C1 = 2;
field_0x9AE = home.angle.y;
}
}
}
/* 00001D98-00001E5C .text executeTurn__12daNpcPhoto_cFv */
void daNpcPhoto_c::executeTurn() {
if (!executeCommon()) {
s16 angle;
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle); // maybe not oldpos
field_0x9BA = angle;
field_0x994 = false;
field_0x9D6 = 2;
if (!m_jnt.trnChk()) {
executeSetMode(2);
}
}
}
/* 00001E5C-00001FDC .text checkOrder__12daNpcPhoto_cFv */
void daNpcPhoto_c::checkOrder() {
if(eventInfo.mCommand == dEvtCmd_INDEMO_e){
if(dComIfGp_evmng_startCheck(mPhotoLinkBackEventIdx) && field_0x9BE == 3){
field_0x9BE = 0;
} else if(dComIfGp_evmng_startCheck(mPhotoGetItemEventIdx) && field_0x9BE == 4){
field_0x9BE = 0;
} else if(dComIfGp_evmng_startCheck(mPhotoGetItem2EventIdx) && field_0x9BE == 5){
field_0x9BE = 0;
} else if(dComIfGp_evmng_startCheck(mPhotoGetPhotoEventIdx) && field_0x9BE == 6){
field_0x9BE = 0;
} else if(dComIfGp_evmng_startCheck(mPhotoGalleryEventIdx) && field_0x9BE == 7){
field_0x9BE = 0;
} else if(dComIfGp_evmng_startCheck(mPhotoDateUB4EventIdx) && field_0x9BE == 10){
field_0x9BE = 0;
}
} else if(eventInfo.mCommand == dEvtCmd_INTALK_e && (field_0x9BE == 2 || field_0x9BE == 1)){
field_0x9BC = true;
executeSetMode(1);
}
}
/* 00001FDC-000021B8 .text eventOrder__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventOrder() {
if (field_0x9C6 & 0x40) {
field_0x9C6 &= ~0x40;
dComIfGp_event_reset();
initTexPatternAnm(true, -1);
field_0x9C9 &= 0x7F;
field_0x9C7 = true;
field_0x9BC = false;
executeSetMode(0);
}
u8 temp = field_0x9BE;
if(temp == 2 || temp == 1){
eventInfo.onCondition(dEvtCnd_CANTALK_e);
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
if (field_0x9BE == 2) {
fopAcM_orderSpeakEvent(this);
}
} else if(temp == 3){
fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoLinkBackEventIdx, 0, 0xFFFF);
} else if(temp == 4){
fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoGetItemEventIdx, 0, 0xFFFF);
} else if(temp == 5){
fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoGetItem2EventIdx, 0, 0xFFFF);
} else if(temp == 6){
fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoGetPhotoEventIdx, 0, 0xFFFF);
} else if(temp == 7){
fopAcM_orderOtherEventId(this, mPhotoGalleryEventIdx);
} else if(temp == 10){
fopAcM_orderOtherEventId(this, mPhotoDateUB4EventIdx);
}
}
/* 000021B8-00002368 .text eventMove__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventMove() {
if(dComIfGp_evmng_endCheck(mPhotoLinkBackEventIdx)){
field_0x9C6 |= 0x40;
} else if(dComIfGp_evmng_endCheck(field_0x9A6)){
field_0x9C6 |= 0x40;
eventInfo.mEventId = -1;
field_0x9C7 = true;
field_0x9BE = 0;
field_0x9BC = false;
executeSetMode(0);
} else if(dComIfGp_evmng_endCheck(mPhotoGetItemEventIdx)){
field_0x9C6 |= 0x40;
} else if(dComIfGp_evmng_endCheck(mPhotoGetItem2EventIdx)){
field_0x9C6 |= 0x40;
} else if(dComIfGp_evmng_endCheck(mPhotoGetPhotoEventIdx)){
field_0x9C6 |= 0x40;
} else if(dComIfGp_evmng_endCheck(mPhotoGalleryEventIdx)){
field_0x9C6 |= 0x40;
} else if(dComIfGp_evmng_endCheck(mPhotoDateUB4EventIdx)){
field_0x9C6 |= 0x40;
field_0x9C6 |= 0x10;
field_0x9D7 = true;
field_0x9D8 = true;
} else{
bool temp = mEventCut.getAttnFlag();
if(mEventCut.cutProc()) {
if(!mEventCut.getAttnFlag()) {
mEventCut.setAttnFlag(temp);
}
} else {
privateCut();
setAnmFromMsgTag();
}
}
}
/* 00002368-00002560 .text privateCut__12daNpcPhoto_cFv */
void daNpcPhoto_c::privateCut() {
static char* cut_name_tbl[] = {
"MES_SET",
"SE_SET",
"POS_SET",
"GET_ITEM",
"SET_ANGLE",
"SET_EYE",
"TURN_TO_PLAYER",
"CLR_HANME",
"GET_PHOTO",
"MES_SET_UB",
"LOOK_UB"
};
enum {
ACT_MES_SET,
ACT_SE_SET,
ACT_POS_SET,
ACT_GET_ITEM,
ACT_SET_ANGLE,
ACT_SET_EYE,
ACT_TURN_TO_PLAYER,
ACT_CLR_HANME,
ACT_GET_PHOTO,
ACT_MES_SET_UB,
ACT_LOOK_UB,
};
int staffIdx = dComIfGp_evmng_getMyStaffId(l_npc_staff_id);
if (staffIdx == -1) {
return;
}
mActIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0);
if (mActIdx == -1) {
dComIfGp_evmng_cutEnd(staffIdx);
return;
}
if (dComIfGp_evmng_getIsAddvance(staffIdx)) {
switch (mActIdx) {
case ACT_MES_SET:
eventMesSetInit(staffIdx);
break;
case ACT_SE_SET:
eventSeSetInit(staffIdx);
break;
case ACT_POS_SET:
eventPosSetInit();
break;
case ACT_GET_ITEM:
eventGetItemInit();
break;
case ACT_SET_ANGLE:
eventSetAngleInit();
break;
case ACT_SET_EYE:
eventSetEyeInit();
break;
case ACT_TURN_TO_PLAYER:
eventTurnToPlayerInit();
break;
case ACT_CLR_HANME:
eventClrHanmeInit();
break;
case ACT_GET_PHOTO:
eventGetPhotoInit();
break;
case ACT_MES_SET_UB:
eventMesSetUbInit(staffIdx);
break;
}
}
bool evtRes;
switch (mActIdx) {
case ACT_MES_SET:
evtRes = eventMesSet();
break;
case ACT_GET_ITEM:
evtRes = eventGetItem();
break;
case ACT_SET_EYE:
evtRes = eventSetEye();
break;
case ACT_TURN_TO_PLAYER:
evtRes = eventTurnToPlayer();
break;
case ACT_GET_PHOTO:
evtRes = eventGetPhoto();
break;
case ACT_MES_SET_UB:
evtRes = eventMesSetUb();
break;
case ACT_LOOK_UB:
evtRes = eventLookUb();
break;
default:
evtRes = true;
break;
}
if (evtRes) {
dComIfGp_evmng_cutEnd(staffIdx);
}
}
/* 00002560-00002758 .text eventMesSetInit__12daNpcPhoto_cFi */
void daNpcPhoto_c::eventMesSetInit(int i_staffId) {
int* pData = dComIfGp_evmng_getMyIntegerP(i_staffId, "MsgNo");
if(pData) {
field_0x980 = NULL;
field_0x9D0 = NULL;
u32 msgNo = *pData;
switch (msgNo) {
case 0:
if (!dComIfGs_isEventBit(l_save_dat.field_0x04)) {
field_0x980 = l_msg_1st_talk_photo;
field_0x9D0 = NULL;
dComIfGs_onEventBit(l_save_dat.field_0x04);
} else {
int temp = 0;
daTagPhoto_c* ac = (daTagPhoto_c*)dComIfGp_event_getPt2();
if(ac != NULL){
temp = ac->getTagNo();
}
field_0x980 = l_msg_talk_photo[(temp & 0xFF)];
field_0x9D0 = NULL;
}
setMessage(*field_0x980);
break;
case 1:
setMessage(getMsg());
break;
case 99:
mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX);
field_0x980 ++;
if (field_0x9D0 != NULL) {
field_0x9D0++;
}
setMessage(*field_0x980);
break;
default:
setMessage(msgNo);
break;
}
} else {
field_0x980 ++;
if (field_0x9D0 != 0) {
field_0x9D0++;
}
setMessage(*field_0x980);
}
}
/* 00002758-0000278C .text eventMesSet__12daNpcPhoto_cFv */
bool daNpcPhoto_c::eventMesSet() {
return talk2(0) == fopMsgStts_BOX_CLOSED_e;
}
/* 0000278C-0000289C .text eventSeSetInit__12daNpcPhoto_cFi */
void daNpcPhoto_c::eventSeSetInit(int i_staffId) {
int* seNo = dComIfGp_evmng_getMyIntegerP(i_staffId, "SeNo");
if(seNo != NULL) {
switch (*seNo) {
case 0:
mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX);
break;
default:
mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX);
break;
}
} else {
mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX);
}
}
/* 0000289C-00002C60 .text eventPosSetInit__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventPosSetInit() {
s16 angle;
daTagPhoto_c* ac = (daTagPhoto_c*)dComIfGp_event_getPt2();
if(ac){
cXyz temp = ac->current.pos;
dPath* path = dPath_GetNextRoomPath(mPathRun.mPath, fopAcM_GetRoomNo(this));
if(path != NULL){
dPnt* pnt = dPath_GetPnt(path, ac->getTagNo());
if(pnt != NULL){
old.pos = pnt->m_position;
current.pos = old.pos;
dBgS_GndChk gndChk;
Vec temp;
temp.y = current.pos.y;
temp.z = current.pos.z;
temp.y += 50.0f;
temp.x = current.pos.x;
gndChk.SetPos(&temp);
f32 floor_y = dComIfG_Bgsp()->GroundCross(&gndChk);
if(floor_y != -G_CM3D_F_INF){
old.pos.y = floor_y;
current.pos.y = floor_y;
}
}
}
dNpc_calc_DisXZ_AngY(current.pos, temp, NULL, &angle);
shape_angle.y = current.angle.y = field_0x9AE = angle;
} else {
daPy_lk_c* link = daPy_getPlayerLinkActorClass();
old.pos = l_gallery_pos;
current.pos = old.pos;
dNpc_calc_DisXZ_AngY(current.pos, link->current.pos, NULL, &angle);
shape_angle.y = current.angle.y = field_0x9AE = angle;
}
dComIfGp_event_setTalkPartner(this);
mPathRun.mCurrPointIndex = mPathRun.mPath->m_num - 2;
mPathRun.mbGoingForwards = false;
executeSetMode(0);
field_0x9C1 = 1;
int temp = cM_rndF(3.0f);
if (temp == 3) {
temp = 0;
}
mMsgNno = l_msg_2F[temp];
}
/* 00002FE0-0000303C .text eventGetItemInit__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventGetItemInit() {
fpc_ProcID itemID = fopAcM_createItemForPresentDemo(&current.pos, mItemNo, 0, -1, fopAcM_GetRoomNo(this));
if (itemID != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(itemID);
}
}
/* 0000303C-00003044 .text eventGetItem__12daNpcPhoto_cFv */
bool daNpcPhoto_c::eventGetItem() {
return true;
}
/* 00003044-000030A8 .text eventSetAngleInit__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventSetAngleInit() {
daPy_lk_c* link = daPy_getPlayerLinkActorClass();
cXyz pos = current.pos - link->current.pos;
link->changeDemoMoveAngle(cM_atan2s(pos.x, pos.z));
}
/* 000030A8-000030F0 .text eventSetEyeInit__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventSetEyeInit() {
field_0x9B0 = 0;
dComIfGp_event_setTalkPartner(this);
}
/* 000030F0-000031F0 .text eventSetEye__12daNpcPhoto_cFv */
bool daNpcPhoto_c::eventSetEye() {
daPy_lk_c* link = daPy_getPlayerLinkActorClass();
s16 temp = link->shape_angle.y + cM_ssin(field_0x9B0) * 12288.0f;
field_0x9B0 += 0x400;
mEyePos.x = 0.0f;
mEyePos.y = 0.0f;
mEyePos.z = 100.0f;
mDoMtx_stack_c::YrotS(temp);
mDoMtx_stack_c::XrotM(-0x1000);
mDoMtx_stack_c::multVec(&mEyePos, &mEyePos);
mEyePos += link->eyePos;
return TRUE;
}
/* 000031F0-00003260 .text eventTurnToPlayerInit__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventTurnToPlayerInit() {
fopAc_ac_c* link = dComIfGp_getLinkPlayer();
dNpc_calc_DisXZ_AngY(current.pos, link->current.pos, 0, &field_0x9AE);
}
/* 00003260-00003278 .text eventTurnToPlayer__12daNpcPhoto_cFv */
bool daNpcPhoto_c::eventTurnToPlayer() {
return current.angle.y == field_0x9AE ? TRUE : FALSE;
}
/* 00003278-000032B8 .text eventClrHanmeInit__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventClrHanmeInit() {
initTexPatternAnm(true, -1);
field_0x9C9 &= 0x7F;
}
/* 000032B8-00003300 .text eventGetPhotoInit__12daNpcPhoto_cFv */
void daNpcPhoto_c::eventGetPhotoInit() {
dComIfGp_setPictureStatusGetOn(dKy_get_dayofweek());
field_0x9B0 = 10;
}
/* 00003300-0000331C .text eventGetPhoto__12daNpcPhoto_cFv */
bool daNpcPhoto_c::eventGetPhoto() {
field_0x9B0--;
return field_0x9B0 == 0;
}
/* 0000331C-0000333C .text eventMesSetUbInit__12daNpcPhoto_cFi */
void daNpcPhoto_c::eventMesSetUbInit(int i_staffId) {
eventMesSetInit(i_staffId);
}
/* 0000333C-00003370 .text eventMesSetUb__12daNpcPhoto_cFv */
bool daNpcPhoto_c::eventMesSetUb() {
eventLookUb();
return eventMesSet();
}
/* 00003370-000033E4 .text eventLookUb__12daNpcPhoto_cFv */
bool daNpcPhoto_c::eventLookUb() {
fopAc_ac_c* pActor = fopAcM_searchFromName("Ub4", 0, 0);
if (pActor != NULL) {
mLookAtPos = pActor->eyePos;
field_0x9D6 = 1;
field_0x994 = false;
}
return true;
}
/* 000033E4-0000357C .text talk2__12daNpcPhoto_cFi */
u16 daNpcPhoto_c::talk2(int i_param) {
u16 status = 0xFF;
if(mCurrMsgBsPcId == fpcM_ERROR_PROCESS_ID_e) {
if(i_param == 1) {
mCurrMsgNo = getMsg();
}
mCurrMsgBsPcId = fopMsgM_messageSet(mCurrMsgNo, this);
mpCurrMsg = NULL;
field_0x9D5 = 1;
setMsgCamera();
} else if(mpCurrMsg){
status = mpCurrMsg->mStatus;
switch(status) {
case fopMsgStts_MSG_DISPLAYED_e:
mpCurrMsg->mStatus = next_msgStatus(&mCurrMsgNo);
if(mpCurrMsg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
fopMsgM_messageSet(mCurrMsgNo);
}
break;
case fopMsgStts_MSG_TYPING_e:
if (field_0x9D5 != 0) {
field_0x9D5 = 0;
setMsgCamera();
}
break;
case fopMsgStts_BOX_CLOSED_e:
if (field_0x9D4) {
dCamera_c* pCam = dCam_getBody();
pCam->Start();
}
if ((field_0x9C6 & 0x20) != 0) {
field_0x9C6 &= ~0x20;
field_0x9C6 |= 0x40;
}
mpCurrMsg->mStatus = fopMsgStts_MSG_DESTROYED_e;
mCurrMsgBsPcId = fpcM_ERROR_PROCESS_ID_e;
break;
}
if(status != fopMsgStts_MSG_TYPING_e) {
field_0x9D5 = 1;
}
anmAtr(status);
} else {
mpCurrMsg = fopMsgM_SearchByID(mCurrMsgBsPcId);
}
return status;
}
static cXyz l_msg_camera[][2] = {
{cXyz(-1336.0f, -497.0f, 928.0f), cXyz(185.0f, -26.0f, 0.0f)},
{cXyz(-1213.0f, -902.0f, -244.0f), cXyz(284.0f, 36.0f, 280.0f)},
{cXyz(-29.0f, 252.0f, -1634.0f), cXyz(5.0f, -91.0f, 178.0f)},
};
/* 0000357C-000036DC .text setMsgCamera__12daNpcPhoto_cFv */
void daNpcPhoto_c::setMsgCamera() {
if (field_0x9D0 != NULL) {
dCamera_c* pCam = dCam_getBody();
if (*(s8*)field_0x9D0 >= 0) {
pCam->Stop();
cXyz temp = l_msg_camera[*(s8*)field_0x9D0][0];
cXyz temp2 = l_msg_camera[*(s8*)field_0x9D0][1];
mDoMtx_stack_c::YrotS(current.angle.y);
mDoMtx_stack_c::multVec(&temp, &temp);
mDoMtx_stack_c::multVec(&temp2, &temp2);
temp += attention_info.position;
temp2 += attention_info.position;
pCam->Set(temp, temp2, 60.0f, 0);
field_0x9D4 = true;
} else {
pCam->Start();
field_0x9D4 = false;
}
}
}
/* 000036DC-000038E8 .text next_msgStatus__12daNpcPhoto_cFPUl */
u16 daNpcPhoto_c::next_msgStatus(u32* pMsgNo) {
u16 status = fopMsgStts_MSG_CONTINUES_e;
switch(*pMsgNo) {
case 0x378A:
case 0x378B:
field_0x9C6 |= 0x20;
status = fopMsgStts_MSG_ENDS_e;
break;
case 0x2A3A:
case 0x2A3D:
if(mpCurrMsg->mSelectNum != 0) {
*pMsgNo = 0x2A3B;
field_0x980 = NULL;
field_0x9D0 = NULL;
break;
}
default:
if(field_0x980 != NULL) {
field_0x980++;
if (field_0x9D0 != NULL) {
field_0x9D0++;
}
switch(*field_0x980) {
case 7:
case 8:
case 11:
status = fopMsgStts_MSG_ENDS_e;
break;
case 9:
if(mpCurrMsg->mSelectNum == 0) {
if(dComIfGs_getRupee() < dComIfGp_getMessageRupee()){
*pMsgNo = 0x378B;
} else {
field_0x980++;
if (field_0x9D0 != NULL) {
field_0x9D0++;
}
*pMsgNo = *field_0x980;
dComIfGp_setItemRupeeCount(-dComIfGp_getMessageRupee());
dComIfGs_onTmpBit(0x301);
}
} else {
field_0x980 = NULL;
*pMsgNo = 0x378A;
}
break;
case 10:
status = fopMsgStts_MSG_ENDS_e;
break;
case 6:
field_0x9C6 |= 1;
field_0x9CC = true;
case 2:
case 4:
dPb_erasePicture();
case 1:
case 3:
case 5: {
u8 reg = dComIfGs_getEventReg(l_save_dat.field_0x06);
reg++;
dComIfGs_setEventReg(l_save_dat.field_0x06, reg);
}
case 0:
field_0x980 = NULL;
field_0x9D0 = NULL;
status = fopMsgStts_MSG_ENDS_e;
break;
default:
*pMsgNo = *field_0x980;
break;
}
} else {
status = fopMsgStts_MSG_ENDS_e;
}
}
return status;
}
/* 000038E8-00003E68 .text getMsg__12daNpcPhoto_cFv */
u32 daNpcPhoto_c::getMsg() {
u32 msgNo = 0;
u8 eventReg = dComIfGs_getEventReg(l_save_dat.field_0x06);
field_0x980 = 0;
field_0x9D0 = 0;
if(g_dComIfG_gameInfo.play.getEvent().chkPhoto()) {
if (eventReg < 1) {
msgNo = 0x2A5C;
} else if (eventReg < 3) {
if (eventReg == 2) {
msgNo = 0x2A57;
} else {
if (isPhotoOk()) {
field_0x980 = l_msg_1st_order_xy;
field_0x9D0 = 0;
} else {
msgNo = 0x2A5D;
}
}
} else if (eventReg < 5) {
if (eventReg == 4) {
msgNo = 0x2A57;
} else {
if (isPhotoOk()) {
field_0x980 = l_msg_2nd_order_xy;
field_0x9D0 = 0;
} else {
msgNo = 0x2A5D;
}
}
} else if (eventReg < 6) {
if (isPhotoOk()) {
field_0x980 = l_msg_3rd_order_xy;
field_0x9D0 = 0;
} else {
msgNo = 0x2A5D;
}
} else {
msgNo = 0x2A63;
}
} else if(dComIfGp_event_chkTalkXY()) {
u32 itemNo = dComIfGp_event_getPreItemNo();
if(itemNo == CAMERA2 && dComIfGs_isTmpBit(0x302)) {
if (dComIfGs_getPictureNum() < 3) {
field_0x980 = l_msg_xy_buy_photo;
mItemNo = SALVAGE_ITEM1;
} else {
msgNo = 0x3787;
}
} else if(itemNo == dItem_FIREFLY_BOTTLE_e) {
if(eventReg >= 6 && !dComIfGs_checkGetItem(CAMERA2)) {
field_0x980 = l_msg_color_xy;
field_0x9D0 = 0;
dComIfGs_setEquipBottleItemEmpty();
mItemNo = CAMERA2;
} else{
msgNo = 0x2A57;
}
} else {
msgNo = 0x2A56;
}
} else if (field_0x9C1 == 3) {
field_0x980 = l_msg_down;
field_0x9D0 = 0;
} else if (field_0x9C1 == 4) {
field_0x980 = l_msg_ub4;
field_0x9D0 = 0;
} else if (dComIfGs_isEventBit(l_save_dat.field_0x04)) {
if(field_0x9C1 == 1) {
msgNo = mMsgNno;
} else {
if(dComIfGs_checkGetItem(CAMERA2)) {
if(dComIfGs_isTmpBit(0x301)) {
field_0x980 = (u32*)l_msg_buy_photo;
field_0x9D0 = 0;
} else {
if(dComIfGs_isTmpBit(0x302)) {
field_0x980 = l_msg_get_photo;
field_0x9D0 = 0;
} else {
if(isPhotoDxOk()) {
dComIfGs_onTmpBit(0x302);
if(dComIfGs_isEventBit(0x3808) == 0) {
dComIfGs_onEventBit(0x3808);
field_0x980 = (u32*)l_msg_week_1st;
field_0x9D0 = 0;
} else {
field_0x980 = l_msg_week[dKy_get_dayofweek()];
field_0x9D0 = 0;
}
} else {
field_0x980 = l_msg_color;
field_0x9D0 = (u8*)l_msg_color_c;
}
}
}
} else {
eventReg = dComIfGs_getEventReg(l_save_dat.field_0x06);
if (eventReg < 1) {
field_0x980 = l_msg_1st_order;
field_0x9D0 = (u8*)l_msg_1st_order_c;
} else if (eventReg < 2) {
field_0x980 = l_msg_1st_order_not_end;
field_0x9D0 = (u8*)l_msg_1st_order_not_end_c;
} else if (eventReg < 3) {
field_0x980 = l_msg_2nd_order;
field_0x9D0 = (u8*)l_msg_2nd_order_c;
} else if (eventReg < 4) {
field_0x980 = l_msg_2nd_order_not_end;
field_0x9D0 = (u8*)l_msg_2nd_order_not_end_c;
} else if (eventReg < 5) {
field_0x980 = l_msg_3rd_order;
field_0x9D0 = (u8*)l_msg_3rd_order_c;
} else if (eventReg < 6) {
field_0x980 = l_msg_3rd_order_not_end;
field_0x9D0 = (u8*)l_msg_3rd_order_not_end_c;
} else if (field_0x9CC == 1) {
field_0x980 = l_msg_3rd_order_end;
field_0x9D0 = 0;
} else {
field_0x980 = l_msg_not_color;
field_0x9D0 = (u8*)l_msg_not_color_c;
}
}
}
} else if(dComIfGs_checkGetItem(CAMERA) || dComIfGs_checkGetItem(CAMERA2)) {
if(!dComIfGs_isEventBit(l_save_dat.field_0x02)) {
field_0x980 = l_msg_1st_photo;
field_0x9D0 = 0;
dComIfGs_onEventBit(l_save_dat.field_0x02);
initTexPatternAnm(true, 1);
} else {
field_0x980 = l_msg_2nd_photo;
field_0x9D0 = 0;
}
} else {
if(dComIfGs_isEventBit(l_save_dat.field_0x00) == 0) {
field_0x980 = l_msg_1st_talk;
field_0x9D0 = 0;
dComIfGs_onEventBit(l_save_dat.field_0x00);
field_0x9C6 |= 4;
} else {
field_0x980 = l_msg_2nd_talk;
field_0x9D0 = 0;
field_0x9C6 |= 4;
}
}
if (field_0x980 != NULL) {
msgNo = *field_0x980;
}
return msgNo;
}
/* 00003E68-00003E78 .text setMessage__12daNpcPhoto_cFUl */
void daNpcPhoto_c::setMessage(u32 msg) {
mCurrMsgBsPcId = fpcM_ERROR_PROCESS_ID_e;
mCurrMsgNo = msg;
}
/* 00003E78-00003FD8 .text setAnmFromMsgTag__12daNpcPhoto_cFv */
void daNpcPhoto_c::setAnmFromMsgTag() {
switch(dComIfGp_getMesgAnimeAttrInfo()){
case 0:
setAnmTbl(l_npc_anm_wait);
field_0x9C9 &= 0x7f;
break;
case 1:
setAnmTbl(l_npc_anm_talk);
field_0x9C9 &= 0x7f;
break;
case 2:
setAnmTbl(l_npc_anm_talk2);
field_0x9C9 &= 0x7f;
break;
case 3:
setAnmTbl(l_npc_anm_wait);
initTexPatternAnm(true, 0);
field_0x9C9 &= 0x7f;
break;
case 4:
setAnmTbl(l_npc_anm_talk2);
field_0x9C9 &= 0x7f;
break;
case 5:
setAnmTbl(l_npc_anm_wait);
initTexPatternAnm(true, 1);
field_0x9C9 |= 0x80;
mFrame = 1;
break;
case 6:
setAnmTbl(l_npc_anm_talk);
initTexPatternAnm(true, 0);
field_0x9C9 &= 0x7f;
break;
case 9:
setAnmTbl(l_npc_anm_spit);
field_0x9C9 &= 0x7f;
}
dComIfGp_setMesgAnimeAttrInfo(0xFF);
}
/* 00003FD8-00004004 .text getPrmRailID__12daNpcPhoto_cFv */
u8 daNpcPhoto_c::getPrmRailID() {
return daObj::PrmAbstract(this, PRM_RAIL_ID_W, PRM_RAIL_ID_S);
}
/* 00004004-00004030 .text getPrmArg0__12daNpcPhoto_cFv */
u8 daNpcPhoto_c::getPrmArg0() {
return daObj::PrmAbstract(this, PRM_ARG0_W, PRM_ARG0_S);
}
/* 00004030-000040B8 .text setMtx__12daNpcPhoto_cFv */
void daNpcPhoto_c::setMtx() {
mpMorf->getModel()->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(current.angle.y);
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 000040B8-0000432C .text chkAttention__12daNpcPhoto_cFv */
void daNpcPhoto_c::chkAttention() {
if(mEventCut.getAttnFlag()) {
mLookAtPos = mEventCut.getAttnPos();
field_0x9D6 = 1;
if (field_0x9D7) {
field_0x994 = false;
m_jnt.setTrn();
} else {
field_0x994 = true;
}
if (!field_0x9BD) {
field_0x9BD = true;
}
} else {
fopAc_ac_c* link = dComIfGp_getLinkPlayer();
f32 temp = l_npc_dat.field_0x2C;
s16 angle;
f32 temp3;
int temp2 = field_0x9B2;
dNpc_calc_DisXZ_AngY(current.pos, link->current.pos, &temp3, &angle);
if (field_0x9BD != NULL) {
temp += 40.0f;
temp2 += 1820;
}
angle -= shape_angle.y;
if((temp > temp3 && temp2 > abs(angle)) || field_0x9CD != NULL) {
mLookAtPos = dNpc_playerEyePos(l_npc_dat.field_0x00);
field_0x9D6 = 1;
if (field_0x9D7) {
field_0x994 = false;
} else {
field_0x994 = true;
}
if (!field_0x9D8) {
field_0x9BA = field_0x9AE;
field_0x994 = false;
field_0x9D6 = 2;
m_jnt.setTrn();
}
if (!field_0x9BD) {
field_0x9BD = true;
}
} else {
if (field_0x9BD == true) {
field_0x9BD = false;
field_0x9AC = 30;
}
field_0x9D6 = 0;
if ((field_0x9C0 == 0) && (field_0x9C1 != 3)) {
if (field_0x9AC != 0) {
field_0x9AC--;
} else {
field_0x9BA = field_0x9AE;
field_0x994 = false;
field_0x9D6 = 2;
m_jnt.setTrn();
}
}
}
}
field_0x9B6 = l_npc_dat.field_0x16;
}
/* 0000432C-00004478 .text lookBack__12daNpcPhoto_cFv */
void daNpcPhoto_c::lookBack() {
short target = field_0x9B6;
short desiredYRot = current.angle.y;
cXyz* dstTemp = NULL;
cXyz temp2;
cXyz dstPos = eyePos;
bool temp3 = field_0x994;
switch(field_0x9D6) {
case 1:
temp2 = mLookAtPos;
dstTemp = &temp2;
break;
case 2:
desiredYRot = field_0x9BA;
break;
case 0:
default:
break;
}
if (field_0x9BC && field_0x9D7) {
temp3 = false;
m_jnt.setTrn();
}
if (m_jnt.trnChk()) {
if(mEventCut.getTurnSpeed() != 0) {
target = mEventCut.getTurnSpeed();
}
cLib_addCalcAngleS2(&field_0x9B8, target, 4, 0x800);
} else {
field_0x9B8 = 0;
}
m_jnt.lookAtTarget(&current.angle.y, dstTemp, dstPos, desiredYRot, field_0x9B8, temp3);
shape_angle = current.angle;
}
/* 00004478-000045C0 .text initTexPatternAnm__12daNpcPhoto_cFbi */
BOOL daNpcPhoto_c::initTexPatternAnm(bool i_modify, int i_param2) {
J3DModelData *modelData = mpMorf->getModel()->getModelData();
if(i_param2 == -1) {
if(dComIfGs_isEventBit(l_save_dat.field_0x02)) {
i_param2 = 1;
} else {
i_param2 = 0;
}
}
m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(l_arcname_tbl[0], l_btp_ix_tbl[i_param2]);
JUT_ASSERT(0xBAA, m_head_tex_pattern != NULL);
if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, 0)) {
return FALSE;
}
mFrame = 0;
mTimer = 0;
return TRUE;
}
/* 000045C0-00004638 .text playTexPatternAnm__12daNpcPhoto_cFv */
void daNpcPhoto_c::playTexPatternAnm() {
if (((field_0x9C9 & 0x80) == 0) && cLib_calcTimer(&mTimer)== 0) {
if (mFrame >= m_head_tex_pattern->getFrameMax()) {
mFrame -= m_head_tex_pattern->getFrameMax();
mTimer = 0x78;
} else {
mFrame++;
}
}
}
/* 00004638-0000474C .text playAnm__12daNpcPhoto_cFv */
void daNpcPhoto_c::playAnm() {
field_0x9C9 &= 0xFE;
u32 mtrlSndId;
s8 roomNo = fopAcM_GetRoomNo(this);
if (mObjAcch.ChkGroundHit()) {
mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd);
}
else {
mtrlSndId = 0;
}
if(mpMorf->play(&eyePos, mtrlSndId, dComIfGp_getReverb(roomNo))){
field_0x9C9 &= ~0x4;
if (mpAnmDat != 0) {
if (field_0x9CA > 0) {
field_0x9CA--;
if (field_0x9CA == 0) {
mpAnmDat++;
if (setAnmTbl(mpAnmDat) != 0) {
field_0x9C9 |= 1;
}
} else {
setAnm(mpAnmDat->field_0x00, 0, 0.0f);
}
}
}
}
}
/* 0000474C-0000481C .text setAnm__12daNpcPhoto_cFUcif */
void daNpcPhoto_c::setAnm(u8 param_1, int param_2, f32 param_3) {
if(field_0x98C >= 0.0f) {
param_3 = field_0x98C;
field_0x98C = -1.0f;
}
J3DAnmTransform* pAnmRes = static_cast<J3DAnmTransform*>(dComIfG_getObjectIDRes(l_arcname_tbl[0], l_bck_ix_tbl[param_1]));
mpMorf->setAnm(pAnmRes, param_2, param_3, 1.0f, 0.0f, -1.0f, NULL);
field_0x9C8 = param_1;
}
/* 0000481C-000048D0 .text setAnmTbl__12daNpcPhoto_cFP12sPhotoAnmDat */
bool daNpcPhoto_c::setAnmTbl(sPhotoAnmDat* i_anmDat) {
if((field_0x9C9 & 4) != 0){
return false;
}
if(i_anmDat->field_0x00 == 0xFF) {
mpAnmDat = 0;
return true;
}
mpAnmDat = i_anmDat;
field_0x9CA = mpAnmDat->field_0x02;
int temp = 2;
if(field_0x9CA > 0) {
temp = 0;
}
if(field_0x9C8 != mpAnmDat->field_0x00 || temp == 0) {
setAnm(mpAnmDat->field_0x00, temp, mpAnmDat->field_0x01);
}
return false;
}
/* 000048D0-00004950 .text XyCheckCB__12daNpcPhoto_cFi */
s16 daNpcPhoto_c::XyCheckCB(int i_itemBtn) {
if(dComIfGs_isTmpBit(0x302) && !dComIfGs_isTmpBit(0x301)){
attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e;
} else {
attention_info.flags = fopAc_Attn_UNK1000000_e | fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e;
}
return 1;
}
/* 00004950-00004A5C .text XyEventCB__12daNpcPhoto_cFi */
s16 daNpcPhoto_c::XyEventCB(int i_itemBtn) {
s16 eventIdx;
u8 itemNo = dComIfGp_getSelectItem(i_itemBtn);
if(itemNo == CAMERA2 && dComIfGs_isTmpBit(0x302)){
if(dComIfGs_getPictureNum() < 3){
eventIdx = mPhotoGetPhotoEventIdx;
field_0x9C7 = false;
} else {
return dComIfGp_evmng_getEventIdx("DEFAULT_TALK_XY",0xff);
}
} else {
if(itemNo == dItem_FIREFLY_BOTTLE_e && dComIfGs_getEventReg(l_save_dat.field_0x06) >= 6 && !dComIfGs_checkGetItem(CAMERA2)){
eventIdx = mPhotoGetItem2EventIdx;
field_0x9C7 = false;
} else {
eventIdx = dComIfGp_evmng_getEventIdx("DEFAULT_TALK_XY",0xff);
}
}
return eventIdx;
}
/* 00004A5C-00004B08 .text isPhotoOk__12daNpcPhoto_cFv */
BOOL daNpcPhoto_c::isPhotoOk() {
u8 reg = dComIfGs_getEventReg(l_save_dat.field_0x06);
reg = reg & 0xff;
if (reg == 1) {
if (dComIfGp_getPictureResult() == 1) {
return TRUE;
}
} else if (reg == 3) {
if (dComIfGp_getPictureResult() == 2) {
return TRUE;
}
} else if ((reg == 5) && (dComIfGp_getPictureResult() == 3)) {
return TRUE;
}
return FALSE;
}
/* 00004B08-00004CCC .text isPhotoDxOk__12daNpcPhoto_cFv */
BOOL daNpcPhoto_c::isPhotoDxOk() {
switch(dKy_get_dayofweek()){
case 0:
if(dComIfGs_isEventBit(0x2D02)) {
return TRUE;
}
break;
case 1:
if(dComIfGs_isEventBit(0x3910)) {
return TRUE;
}
break;
case 2:
if (dComIfGs_isEventBit(0x3002) ||
dComIfGs_isEventBit(0x3001) ||
dComIfGs_isEventBit(0x3008) ||
dComIfGs_isEventBit(0x3004) ||
dComIfGs_isEventBit(0x3020) ||
dComIfGs_isEventBit(0x3010) ||
dComIfGs_isEventBit(0x3180)) {
return TRUE;
}
break;
case 3:
if(dComIfGs_isEventBit(0x3920)) {
return TRUE;
}
break;
case 4:
if(dComIfGs_isEventBit(0x1001)) {
return TRUE;
}
break;
case 5:
if(dComIfGs_isEventBit(0x2D20)) {
return TRUE;
}
break;
case 6:
if(dComIfGs_isEventBit(0x2D40)) {
return TRUE;
}
break;
}
return FALSE;
}
/* 00004CCC-00004D44 .text setCollision__12daNpcPhoto_cFP8dCcD_Cyl4cXyzff */
void daNpcPhoto_c::setCollision(dCcD_Cyl* cyl, cXyz center, f32 radius, f32 height) {
cyl->SetC(center);
cyl->SetR(radius);
cyl->SetH(height);
dComIfG_Ccsp()->Set(cyl);
}
/* 00004D44-00004D64 .text daNpc_PhotoCreate__FPv */
static s32 daNpc_PhotoCreate(void* i_this) {
return static_cast<daNpcPhoto_c*>(i_this)->_create();
}
/* 00004D64-00004D88 .text daNpc_PhotoDelete__FPv */
static BOOL daNpc_PhotoDelete(void* i_this) {
return static_cast<daNpcPhoto_c*>(i_this)->_delete();
}
/* 00004D88-00004DAC .text daNpc_PhotoExecute__FPv */
static BOOL daNpc_PhotoExecute(void* i_this) {
return static_cast<daNpcPhoto_c*>(i_this)->_execute();
}
/* 00004DAC-00004DD0 .text daNpc_PhotoDraw__FPv */
static BOOL daNpc_PhotoDraw(void* i_this) {
return static_cast<daNpcPhoto_c*>(i_this)->_draw();
}
/* 00004DD0-00004DD8 .text daNpc_PhotoIsDelete__FPv */
static BOOL daNpc_PhotoIsDelete(void*) {
return TRUE;
}
static actor_method_class daNpc_PhotoMethodTable = {
(process_method_func)daNpc_PhotoCreate,
(process_method_func)daNpc_PhotoDelete,
(process_method_func)daNpc_PhotoExecute,
(process_method_func)daNpc_PhotoIsDelete,
(process_method_func)daNpc_PhotoDraw,
};
actor_process_profile_definition g_profile_NPC_PHOTO = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 0x0007,
/* ListPrio */ fpcPi_CURRENT_e,
/* ProcName */ PROC_NPC_PHOTO,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daNpcPhoto_c),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ PRIO_NPC_PHOTO,
/* Actor SubMtd */ &daNpc_PhotoMethodTable,
/* Status */ 0x07 | fopAcStts_SHOWMAP_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLBOX_0_e,
};