mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-26 15:44:53 -04:00
3755fbfd39
* 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>
2303 lines
62 KiB
C++
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, ¤t.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(¤t.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(¤t.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,
|
|
};
|