mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-31 17:31:50 -04:00
2910 lines
66 KiB
C++
2910 lines
66 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_npc_roten.cpp
|
|
//
|
|
|
|
#include "d/actor/d_a_npc_roten.h"
|
|
#include "d/res/res_ro.h"
|
|
#include "m_Do/m_Do_ext.h"
|
|
#include "d/actor/d_a_player_main.h"
|
|
#include "d/actor/d_a_demo_item.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_com_lib_game.h"
|
|
#include "d/d_a_obj.h"
|
|
#include "d/d_snap.h"
|
|
|
|
extern dCcD_SrcCyl dNpc_cyl_src;
|
|
|
|
// Needed for the .data section to match.
|
|
static Vec dummy1 = {1.0f, 1.0f, 1.0f};
|
|
static Vec dummy2 = {1.0f, 1.0f, 1.0f};
|
|
static u8 dummy3[] = {0x02, 0x00, 0x02, 0x01};
|
|
static f64 dummy4[2] = {3.0, 0.5};
|
|
|
|
static const char* l_arcname_tbl[] = {
|
|
"Ro",
|
|
"Ro",
|
|
"Ro",
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_wait[] = {
|
|
0x00,
|
|
0x0E,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_talk[] = {
|
|
0x01,
|
|
0x0E,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_walk[] = {
|
|
0x02,
|
|
0x0E,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_talk2[] = {
|
|
0x03,
|
|
0x0E,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_talk3[] = {
|
|
0x04,
|
|
0x0E,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_talk4[] = {
|
|
0x05,
|
|
0x06,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_talk5[] = {
|
|
0x06,
|
|
0x0A,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_watasu[] = {
|
|
0x07,
|
|
0x0E,
|
|
0x01,
|
|
0x08,
|
|
0x0E,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_itemwait[] = {
|
|
0x08,
|
|
0x0E,
|
|
0xFF,
|
|
};
|
|
|
|
static sRotenAnmDat l_npc_anm_wind[] = {
|
|
0x09,
|
|
0x0E,
|
|
0x01,
|
|
0x00,
|
|
0x14,
|
|
0x01,
|
|
0x0FF,
|
|
0x08,
|
|
0x00,
|
|
};
|
|
|
|
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;
|
|
/* 0x1A */ s16 field_0x1A;
|
|
/* 0x1C */ f32 field_0x1C;
|
|
/* 0x20 */ s16 field_0x20;
|
|
/* 0x24 */ f32 field_0x24;
|
|
/* 0x28 */ f32 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 */ f32 field_0x44;
|
|
/* 0x48 */ s16 field_0x48;
|
|
/* 0x4A */ s16 field_0x4A;
|
|
/* 0x4C */ s16 field_0x4C;
|
|
/* 0x4E */ s16 field_0x4E;
|
|
/* 0x50 */ s16 field_0x50;
|
|
/* 0x52 */ s16 field_0x52;
|
|
}; // Size: 0x54
|
|
|
|
static NpcDatStruct l_npc_dat[] = {
|
|
{
|
|
0.0f,
|
|
0x09C4,
|
|
0x1388,
|
|
0x1388,
|
|
0x1388,
|
|
0xF63C,
|
|
0xEC78,
|
|
0xEC78,
|
|
0xEC78,
|
|
0x03E8,
|
|
0x0352,
|
|
0x0190,
|
|
0x0000,
|
|
190.0f,
|
|
0x7FFF,
|
|
250.0f,
|
|
150.0f,
|
|
120.0f,
|
|
120.0f,
|
|
40.0f,
|
|
60.0f,
|
|
30.0f,
|
|
1.0f,
|
|
1.0f,
|
|
0x0006,
|
|
0x0400,
|
|
0x003C,
|
|
0x005A,
|
|
0x00C8,
|
|
0x012C,
|
|
},
|
|
{
|
|
0.0f,
|
|
0x09C4,
|
|
0x1388,
|
|
0x1388,
|
|
0x1388,
|
|
0xF63C,
|
|
0xEC78,
|
|
0xEC78,
|
|
0xEC78,
|
|
0x03E8,
|
|
0x0352,
|
|
0x0190,
|
|
0x0000,
|
|
190.0f,
|
|
0x7FFF,
|
|
250.0f,
|
|
150.0f,
|
|
120.0f,
|
|
120.0f,
|
|
40.0f,
|
|
50.0f,
|
|
20.0f,
|
|
1.0f,
|
|
1.0f,
|
|
0x0006,
|
|
0x0400,
|
|
0x003C,
|
|
0x005A,
|
|
0x00C8,
|
|
0x012C,
|
|
},
|
|
{
|
|
0.0f,
|
|
0x09C4,
|
|
0x1388,
|
|
0x1388,
|
|
0x1388,
|
|
0xF63C,
|
|
0xEC78,
|
|
0xEC78,
|
|
0xEC78,
|
|
0x03E8,
|
|
0x0352,
|
|
0x0190,
|
|
0x0000,
|
|
190.0f,
|
|
0x7FFF,
|
|
250.0f,
|
|
150.0f,
|
|
120.0f,
|
|
120.0f,
|
|
40.0f,
|
|
60.0f,
|
|
30.0f,
|
|
1.0f,
|
|
1.0f,
|
|
0x0006,
|
|
0x0400,
|
|
0x003C,
|
|
0x005A,
|
|
0x00C8,
|
|
0x012C,
|
|
},
|
|
};
|
|
|
|
static u32 l_msg_1st_talk_A[] = {
|
|
0x2905,
|
|
0x2906,
|
|
0x2907,
|
|
0x2908,
|
|
0x2909,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_1st_talk_B[] = {
|
|
0x2969,
|
|
0x296A,
|
|
0x296B,
|
|
0x296C,
|
|
0x296D,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_1st_talk_C[] = {
|
|
0x29CD,
|
|
0x29CE,
|
|
0x29CF,
|
|
0x29D0,
|
|
0x29D1,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_1st_talk[] = {
|
|
l_msg_1st_talk_A,
|
|
l_msg_1st_talk_B,
|
|
l_msg_1st_talk_C,
|
|
};
|
|
|
|
static u32 l_msg_exchange3_A[] = {
|
|
0x290C,
|
|
0x290D,
|
|
0x290E,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_exchange3_B[] = {
|
|
0x2970,
|
|
0x2971,
|
|
0x2972,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_exchange3_C[] = {
|
|
0x29D4,
|
|
0x29D5,
|
|
0x29D6,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_exchange3[] = {
|
|
l_msg_exchange3_A,
|
|
l_msg_exchange3_B,
|
|
l_msg_exchange3_C,
|
|
};
|
|
|
|
static u32 l_msg_exchange_A[] = {
|
|
0x290F,
|
|
0x2910,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_exchange_B[] = {
|
|
0x2973,
|
|
0x2974,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_exchange_C[] = {
|
|
0x29D7,
|
|
0x29D8,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_exchange[] = {
|
|
l_msg_exchange_A,
|
|
l_msg_exchange_B,
|
|
l_msg_exchange_C,
|
|
};
|
|
|
|
static u32 l_msg_etc_A[] = {
|
|
0x290A,
|
|
0x290B,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_etc_B[] = {
|
|
0x296E,
|
|
0x296F,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_etc_C[] = {
|
|
0x29D2,
|
|
0x29D3,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_etc[] = {
|
|
l_msg_etc_A,
|
|
l_msg_etc_B,
|
|
l_msg_etc_C,
|
|
};
|
|
|
|
static u32 l_msg_xy_exchange3_A[] = {
|
|
0x2911,
|
|
0x2912,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_exchange3_B[] = {
|
|
0x2975,
|
|
0x2976,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_exchange3_C[] = {
|
|
0x29D9,
|
|
0x29DA,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_exchange3[] = {
|
|
l_msg_xy_exchange3_A,
|
|
l_msg_xy_exchange3_B,
|
|
l_msg_xy_exchange3_C,
|
|
};
|
|
|
|
static u32 l_msg_xy_no_roten_item_A[] = {
|
|
0x2914,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_no_roten_item_B[] = {
|
|
0x2978,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_no_roten_item_C[] = {
|
|
0x29DC,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_no_roten_item[] = {
|
|
l_msg_xy_no_roten_item_A,
|
|
l_msg_xy_no_roten_item_B,
|
|
l_msg_xy_no_roten_item_C,
|
|
};
|
|
|
|
static u32 l_msg_xy_invalid_item_A[] = {
|
|
0x2915,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_invalid_item_B[] = {
|
|
0x2979,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_invalid_item_C[] = {
|
|
0x29DD,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_invalid_item[] = {
|
|
l_msg_xy_invalid_item_A,
|
|
l_msg_xy_invalid_item_B,
|
|
l_msg_xy_invalid_item_C,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A0[] = {
|
|
0x2913,
|
|
0x2916,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A1[] = {
|
|
0x2913,
|
|
0x2917,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A2[] = {
|
|
0x2913,
|
|
0x2918,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A3[] = {
|
|
0x2913,
|
|
0x2919,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A4[] = {
|
|
0x2913,
|
|
0x291A,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A5[] = {
|
|
0x2913,
|
|
0x291B,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A6[] = {
|
|
0x2913,
|
|
0x291C,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A7[] = {
|
|
0x2913,
|
|
0x291D,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A8[] = {
|
|
0x2913,
|
|
0x291E,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_A9[] = {
|
|
0x2913,
|
|
0x291F,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_AA[] = {
|
|
0x2913,
|
|
0x2920,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_AB[] = {
|
|
0x2913,
|
|
0x2921,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B0[] = {
|
|
0x2977,
|
|
0x297A,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B1[] = {
|
|
0x2977,
|
|
0x297B,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B2[] = {
|
|
0x2977,
|
|
0x297C,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B3[] = {
|
|
0x2977,
|
|
0x297D,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B4[] = {
|
|
0x2977,
|
|
0x297E,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B5[] = {
|
|
0x2977,
|
|
0x297F,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B6[] = {
|
|
0x2977,
|
|
0x2980,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B7[] = {
|
|
0x2977,
|
|
0x2981,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B8[] = {
|
|
0x2977,
|
|
0x2982,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_B9[] = {
|
|
0x2977,
|
|
0x2983,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_BA[] = {
|
|
0x2977,
|
|
0x2984,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_BB[] = {
|
|
0x2977,
|
|
0x2985,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C0[] = {
|
|
0x29DB,
|
|
0x29DE,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C1[] = {
|
|
0x29DB,
|
|
0x29DF,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C2[] = {
|
|
0x29DB,
|
|
0x29E0,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C3[] = {
|
|
0x29DB,
|
|
0x29E1,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C4[] = {
|
|
0x29DB,
|
|
0x29E2,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C5[] = {
|
|
0x29DB,
|
|
0x29E3,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C6[] = {
|
|
0x29DB,
|
|
0x29E4,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C7[] = {
|
|
0x29DB,
|
|
0x29E5,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C8[] = {
|
|
0x29DB,
|
|
0x29E6,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_C9[] = {
|
|
0x29DB,
|
|
0x29E7,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_CA[] = {
|
|
0x29DB,
|
|
0x29E8,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item_CB[] = {
|
|
0x29DB,
|
|
0x29E9,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_koukan_item[][12] = {
|
|
{
|
|
l_msg_xy_koukan_item_A0,
|
|
l_msg_xy_koukan_item_A1,
|
|
l_msg_xy_koukan_item_A2,
|
|
l_msg_xy_koukan_item_A3,
|
|
l_msg_xy_koukan_item_A4,
|
|
l_msg_xy_koukan_item_A5,
|
|
l_msg_xy_koukan_item_A6,
|
|
l_msg_xy_koukan_item_A7,
|
|
l_msg_xy_koukan_item_A8,
|
|
l_msg_xy_koukan_item_A9,
|
|
l_msg_xy_koukan_item_AA,
|
|
l_msg_xy_koukan_item_AB,
|
|
},
|
|
{
|
|
l_msg_xy_koukan_item_B0,
|
|
l_msg_xy_koukan_item_B1,
|
|
l_msg_xy_koukan_item_B2,
|
|
l_msg_xy_koukan_item_B3,
|
|
l_msg_xy_koukan_item_B4,
|
|
l_msg_xy_koukan_item_B5,
|
|
l_msg_xy_koukan_item_B6,
|
|
l_msg_xy_koukan_item_B7,
|
|
l_msg_xy_koukan_item_B8,
|
|
l_msg_xy_koukan_item_B9,
|
|
l_msg_xy_koukan_item_BA,
|
|
l_msg_xy_koukan_item_BB,
|
|
},
|
|
{
|
|
l_msg_xy_koukan_item_C0,
|
|
l_msg_xy_koukan_item_C1,
|
|
l_msg_xy_koukan_item_C2,
|
|
l_msg_xy_koukan_item_C3,
|
|
l_msg_xy_koukan_item_C4,
|
|
l_msg_xy_koukan_item_C5,
|
|
l_msg_xy_koukan_item_C6,
|
|
l_msg_xy_koukan_item_C7,
|
|
l_msg_xy_koukan_item_C8,
|
|
l_msg_xy_koukan_item_C9,
|
|
l_msg_xy_koukan_item_CA,
|
|
l_msg_xy_koukan_item_CB,
|
|
},
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A0[] = {
|
|
0x2922,
|
|
0x0001,
|
|
0x2930,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A1[] = {
|
|
0x2923,
|
|
0x0001,
|
|
0x2931,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A2[] = {
|
|
0x2924,
|
|
0x0001,
|
|
0x2932,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A3[] = {
|
|
0x2925,
|
|
0x0001,
|
|
0x2933,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A4[] = {
|
|
0x2926,
|
|
0x0001,
|
|
0x2934,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A5[] = {
|
|
0x2927,
|
|
0x0001,
|
|
0x2935,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A6[] = {
|
|
0x2928,
|
|
0x0001,
|
|
0x2936,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A7[] = {
|
|
0x2929,
|
|
0x0001,
|
|
0x2937,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A8[] = {
|
|
0x292A,
|
|
0x0001,
|
|
0x2938,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_A9[] = {
|
|
0x292B,
|
|
0x0001,
|
|
0x2939,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_AA[] = {
|
|
0x292C,
|
|
0x0001,
|
|
0x293A,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_AB[] = {
|
|
0x292D,
|
|
0x0001,
|
|
0x293B,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B0[] = {
|
|
0x2986,
|
|
0x0001,
|
|
0x2994,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B1[] = {
|
|
0x2987,
|
|
0x0001,
|
|
0x2995,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B2[] = {
|
|
0x2988,
|
|
0x0001,
|
|
0x2996,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B3[] = {
|
|
0x2989,
|
|
0x0001,
|
|
0x2997,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B4[] = {
|
|
0x298A,
|
|
0x0001,
|
|
0x2998,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B5[] = {
|
|
0x298B,
|
|
0x0001,
|
|
0x2999,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B6[] = {
|
|
0x298C,
|
|
0x0001,
|
|
0x299A,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B7[] = {
|
|
0x298D,
|
|
0x0001,
|
|
0x299B,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B8[] = {
|
|
0x298E,
|
|
0x0001,
|
|
0x299C,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_B9[] = {
|
|
0x298F,
|
|
0x0001,
|
|
0x299D,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_BA[] = {
|
|
0x2990,
|
|
0x0001,
|
|
0x299E,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_BB[] = {
|
|
0x2991,
|
|
0x0001,
|
|
0x299F,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C0[] = {
|
|
0x29EA,
|
|
0x0001,
|
|
0x29F8,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C1[] = {
|
|
0x29EB,
|
|
0x0001,
|
|
0x29F9,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C2[] = {
|
|
0x29EC,
|
|
0x0001,
|
|
0x29FA,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C3[] = {
|
|
0x29ED,
|
|
0x0001,
|
|
0x29FB,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C4[] = {
|
|
0x29EE,
|
|
0x0001,
|
|
0x29FC,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C5[] = {
|
|
0x29EF,
|
|
0x0001,
|
|
0x29FD,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C6[] = {
|
|
0x29F0,
|
|
0x0001,
|
|
0x29FE,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C7[] = {
|
|
0x29F1,
|
|
0x0001,
|
|
0x29FF,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C8[] = {
|
|
0x29F2,
|
|
0x0001,
|
|
0x2A00,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_C9[] = {
|
|
0x29F3,
|
|
0x0001,
|
|
0x2A01,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_CA[] = {
|
|
0x29F4,
|
|
0x0001,
|
|
0x2A02,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item2_CB[] = {
|
|
0x29F5,
|
|
0x0001,
|
|
0x2A03,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_koukan_item2[][12] = {
|
|
{
|
|
l_msg_xy_koukan_item2_A0,
|
|
l_msg_xy_koukan_item2_A1,
|
|
l_msg_xy_koukan_item2_A2,
|
|
l_msg_xy_koukan_item2_A3,
|
|
l_msg_xy_koukan_item2_A4,
|
|
l_msg_xy_koukan_item2_A5,
|
|
l_msg_xy_koukan_item2_A6,
|
|
l_msg_xy_koukan_item2_A7,
|
|
l_msg_xy_koukan_item2_A8,
|
|
l_msg_xy_koukan_item2_A9,
|
|
l_msg_xy_koukan_item2_AA,
|
|
l_msg_xy_koukan_item2_AB,
|
|
},
|
|
{
|
|
l_msg_xy_koukan_item2_B0,
|
|
l_msg_xy_koukan_item2_B1,
|
|
l_msg_xy_koukan_item2_B2,
|
|
l_msg_xy_koukan_item2_B3,
|
|
l_msg_xy_koukan_item2_B4,
|
|
l_msg_xy_koukan_item2_B5,
|
|
l_msg_xy_koukan_item2_B6,
|
|
l_msg_xy_koukan_item2_B7,
|
|
l_msg_xy_koukan_item2_B8,
|
|
l_msg_xy_koukan_item2_B9,
|
|
l_msg_xy_koukan_item2_BA,
|
|
l_msg_xy_koukan_item2_BB,
|
|
},
|
|
{
|
|
l_msg_xy_koukan_item2_C0,
|
|
l_msg_xy_koukan_item2_C1,
|
|
l_msg_xy_koukan_item2_C2,
|
|
l_msg_xy_koukan_item2_C3,
|
|
l_msg_xy_koukan_item2_C4,
|
|
l_msg_xy_koukan_item2_C5,
|
|
l_msg_xy_koukan_item2_C6,
|
|
l_msg_xy_koukan_item2_C7,
|
|
l_msg_xy_koukan_item2_C8,
|
|
l_msg_xy_koukan_item2_C9,
|
|
l_msg_xy_koukan_item2_CA,
|
|
l_msg_xy_koukan_item2_CB,
|
|
},
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A0[] = {
|
|
0x292E,
|
|
0x2930,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A1[] = {
|
|
0x292E,
|
|
0x2931,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A2[] = {
|
|
0x292E,
|
|
0x2932,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A3[] = {
|
|
0x292E,
|
|
0x2933,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A4[] = {
|
|
0x292E,
|
|
0x2934,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A5[] = {
|
|
0x292E,
|
|
0x2935,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A6[] = {
|
|
0x292E,
|
|
0x2936,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A7[] = {
|
|
0x292E,
|
|
0x2937,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A8[] = {
|
|
0x292E,
|
|
0x2938,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_A9[] = {
|
|
0x292E,
|
|
0x2939,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_AA[] = {
|
|
0x292E,
|
|
0x293A,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_AB[] = {
|
|
0x292E,
|
|
0x293B,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B0[] = {
|
|
0x2992,
|
|
0x2994,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B1[] = {
|
|
0x2992,
|
|
0x2995,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B2[] = {
|
|
0x2992,
|
|
0x2996,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B3[] = {
|
|
0x2992,
|
|
0x2997,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B4[] = {
|
|
0x2992,
|
|
0x2998,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B5[] = {
|
|
0x2992,
|
|
0x2999,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B6[] = {
|
|
0x2992,
|
|
0x299A,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B7[] = {
|
|
0x2992,
|
|
0x299B,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B8[] = {
|
|
0x2992,
|
|
0x299C,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_B9[] = {
|
|
0x2992,
|
|
0x299D,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_BA[] = {
|
|
0x2992,
|
|
0x299E,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_BB[] = {
|
|
0x2992,
|
|
0x299F,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C0[] = {
|
|
0x29F6,
|
|
0x29F8,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C1[] = {
|
|
0x29F6,
|
|
0x29F9,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C2[] = {
|
|
0x29F6,
|
|
0x29FA,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C3[] = {
|
|
0x29F6,
|
|
0x29FB,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C4[] = {
|
|
0x29F6,
|
|
0x29FC,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C5[] = {
|
|
0x29F6,
|
|
0x29FD,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C6[] = {
|
|
0x29F6,
|
|
0x29FE,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C7[] = {
|
|
0x29F6,
|
|
0x29FF,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C8[] = {
|
|
0x29F6,
|
|
0x2A00,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_C9[] = {
|
|
0x29F6,
|
|
0x2A01,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_CA[] = {
|
|
0x29F6,
|
|
0x2A02,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_item3_CB[] = {
|
|
0x29F6,
|
|
0x2A03,
|
|
0x0002,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_koukan_item3[][12] = {
|
|
{
|
|
l_msg_xy_koukan_item3_A0,
|
|
l_msg_xy_koukan_item3_A1,
|
|
l_msg_xy_koukan_item3_A2,
|
|
l_msg_xy_koukan_item3_A3,
|
|
l_msg_xy_koukan_item3_A4,
|
|
l_msg_xy_koukan_item3_A5,
|
|
l_msg_xy_koukan_item3_A6,
|
|
l_msg_xy_koukan_item3_A7,
|
|
l_msg_xy_koukan_item3_A8,
|
|
l_msg_xy_koukan_item3_A9,
|
|
l_msg_xy_koukan_item3_AA,
|
|
l_msg_xy_koukan_item3_AB,
|
|
},
|
|
{
|
|
l_msg_xy_koukan_item3_B0,
|
|
l_msg_xy_koukan_item3_B1,
|
|
l_msg_xy_koukan_item3_B2,
|
|
l_msg_xy_koukan_item3_B3,
|
|
l_msg_xy_koukan_item3_B4,
|
|
l_msg_xy_koukan_item3_B5,
|
|
l_msg_xy_koukan_item3_B6,
|
|
l_msg_xy_koukan_item3_B7,
|
|
l_msg_xy_koukan_item3_B8,
|
|
l_msg_xy_koukan_item3_B9,
|
|
l_msg_xy_koukan_item3_BA,
|
|
l_msg_xy_koukan_item3_BB,
|
|
},
|
|
{
|
|
l_msg_xy_koukan_item3_C0,
|
|
l_msg_xy_koukan_item3_C1,
|
|
l_msg_xy_koukan_item3_C2,
|
|
l_msg_xy_koukan_item3_C3,
|
|
l_msg_xy_koukan_item3_C4,
|
|
l_msg_xy_koukan_item3_C5,
|
|
l_msg_xy_koukan_item3_C6,
|
|
l_msg_xy_koukan_item3_C7,
|
|
l_msg_xy_koukan_item3_C8,
|
|
l_msg_xy_koukan_item3_C9,
|
|
l_msg_xy_koukan_item3_CA,
|
|
l_msg_xy_koukan_item3_CB,
|
|
},
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_yes[] = {
|
|
0x292E,
|
|
0x2992,
|
|
0x29F6,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_no[] = {
|
|
0x292F,
|
|
0x2993,
|
|
0x29F7,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_rupee[] = {
|
|
0x293C,
|
|
0x29A0,
|
|
0x2A04,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_end[] = {
|
|
0x293D,
|
|
0x29A1,
|
|
0x2A05,
|
|
};
|
|
|
|
static u32 l_msg_xy_koukan_first[] = {
|
|
0x293E,
|
|
0x29A2,
|
|
0x2A06,
|
|
};
|
|
|
|
static u32 l_msg_xy_after_get_demo_A[] = {
|
|
0x293F,
|
|
0x2940,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_after_get_demo_B[] = {
|
|
0x29A3,
|
|
0x29A4,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_after_get_demo_C[] = {
|
|
0x2A07,
|
|
0x2A08,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_after_get_demo[] = {
|
|
l_msg_xy_after_get_demo_A,
|
|
l_msg_xy_after_get_demo_B,
|
|
l_msg_xy_after_get_demo_C,
|
|
};
|
|
|
|
static u32 l_msg_xy_after_get_demo2_A[] = {
|
|
0x2941,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_after_get_demo2_B[] = {
|
|
0x29A5,
|
|
0x0000,
|
|
};
|
|
|
|
static u32 l_msg_xy_after_get_demo2_C[] = {
|
|
0x2A09,
|
|
0x0000,
|
|
};
|
|
|
|
static u32* l_msg_xy_after_get_demo2[] = {
|
|
l_msg_xy_after_get_demo2_A,
|
|
l_msg_xy_after_get_demo2_B,
|
|
l_msg_xy_after_get_demo2_C,
|
|
};
|
|
|
|
static u32 l_msg_collect_map[] = {
|
|
0x29A6,
|
|
0x0000
|
|
};
|
|
|
|
static u32 l_msg_try_force[] = {
|
|
0x29A7,
|
|
0x29A8,
|
|
0x29A9,
|
|
0x29AA,
|
|
0x0003,
|
|
0x29AB,
|
|
0x0000
|
|
};
|
|
|
|
static u32 l_get_item_no[] = {
|
|
KAKERA_HEART,
|
|
};
|
|
|
|
static dCcD_SrcSph l_sph_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_WIND,
|
|
/* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_ENEMY,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGSphS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 50.0f,
|
|
},
|
|
};
|
|
|
|
static char* l_npc_staff_id[] = {
|
|
"Roten",
|
|
"Roten",
|
|
"Roten",
|
|
};
|
|
|
|
const char daNpcRoten_c::m_arcname[] = "Ro";
|
|
|
|
static const int l_bmd_ix_tbl[] = {
|
|
RO_BDL_RO,
|
|
RO_BDL_RO,
|
|
RO_BDL_RO,
|
|
};
|
|
|
|
static const int l_bck_ix_tbl[][10] = {
|
|
{
|
|
RO_BCK_RO_WAIT01,
|
|
RO_BCK_RO_TALK01,
|
|
RO_BCK_RO_WALK,
|
|
RO_BCK_RO_TALK02,
|
|
RO_BCK_RO_TALK03,
|
|
RO_BCK_RO_TALK04,
|
|
RO_BCK_RO_TALK05,
|
|
RO_BCK_RO_WATASU,
|
|
RO_BCK_RO_ITEMWAIT,
|
|
RO_BCK_RO_WIND,
|
|
},
|
|
{
|
|
RO_BCK_RO_WAIT01,
|
|
RO_BCK_RO_TALK01,
|
|
RO_BCK_RO_WALK,
|
|
RO_BCK_RO_TALK02,
|
|
RO_BCK_RO_TALK03,
|
|
RO_BCK_RO_TALK04,
|
|
RO_BCK_RO_TALK05,
|
|
RO_BCK_RO_WATASU,
|
|
RO_BCK_RO_ITEMWAIT,
|
|
RO_BCK_RO_WIND,
|
|
},
|
|
{
|
|
RO_BCK_RO_WAIT01,
|
|
RO_BCK_RO_TALK01,
|
|
RO_BCK_RO_WALK,
|
|
RO_BCK_RO_TALK02,
|
|
RO_BCK_RO_TALK03,
|
|
RO_BCK_RO_TALK04,
|
|
RO_BCK_RO_TALK05,
|
|
RO_BCK_RO_WATASU,
|
|
RO_BCK_RO_ITEMWAIT,
|
|
RO_BCK_RO_WIND,
|
|
},
|
|
};
|
|
|
|
static const int l_head_bmd_ix_tbl[] = {
|
|
RO_BDL_RO_HAT,
|
|
RO_BDL_RO_HAT2,
|
|
RO_BDL_RO_HAT3,
|
|
};
|
|
|
|
static const int l_head_bck_ix_tbl[] = {
|
|
RO_BCK_HAT_WID,
|
|
RO_BCK_HAT2_WIND,
|
|
RO_BCK_HAT3_WID,
|
|
};
|
|
|
|
static const int l_btp_ix_tbl[] = {
|
|
RO_BTP_RO,
|
|
RO_BTP_RO,
|
|
RO_BTP_RO,
|
|
};
|
|
|
|
static const int l_bmt_ix_tbl[] = {
|
|
-1,
|
|
RO_BMT_RO2,
|
|
RO_BMT_RO3,
|
|
};
|
|
|
|
static const int l_diff_flag_tbl[] = {
|
|
0x11020022,
|
|
0x37461622,
|
|
0x37461622,
|
|
};
|
|
|
|
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[] = {
|
|
{
|
|
0x1320,
|
|
0xCB03,
|
|
0xC803,
|
|
0x1304,
|
|
},
|
|
{
|
|
0x1310,
|
|
0xCA03,
|
|
0xC703,
|
|
0x1302,
|
|
},
|
|
{
|
|
0x1308,
|
|
0xC903,
|
|
0xC603,
|
|
0x1301,
|
|
},
|
|
};
|
|
|
|
static const u8 l_item_dat[][12] = {
|
|
{
|
|
0x01,
|
|
0x00,
|
|
0x07,
|
|
0x04,
|
|
0x09,
|
|
0x03,
|
|
0x07,
|
|
0x09,
|
|
0x09,
|
|
0x07,
|
|
0x09,
|
|
0x0A,
|
|
},
|
|
{
|
|
0x01,
|
|
0x02,
|
|
0x01,
|
|
0x0A,
|
|
0x09,
|
|
0x03,
|
|
0x02,
|
|
0x09,
|
|
0x09,
|
|
0x08,
|
|
0x09,
|
|
0x0A,
|
|
},
|
|
{
|
|
0x01,
|
|
0x00,
|
|
0x06,
|
|
0x05,
|
|
0x07,
|
|
0x04,
|
|
0x02,
|
|
0x04,
|
|
0x05,
|
|
0x05,
|
|
0x0B,
|
|
0x0A,
|
|
},
|
|
};
|
|
|
|
/* 00000078-000002F0 .text __ct__12daNpcRoten_cFv */
|
|
daNpcRoten_c::daNpcRoten_c() {
|
|
field_0x9BB = 0;
|
|
field_0x98C = NULL;
|
|
field_0x9B2 = 0;
|
|
field_0x990 = 0.0f;
|
|
field_0x9C0 = 0;
|
|
field_0x9C1 = 0;
|
|
field_0x9C4 = 0;
|
|
field_0x99C = 1;
|
|
field_0x9C5 = 3;
|
|
field_0x9BC = 0;
|
|
field_0x9C6 = 0;
|
|
field_0x9C7 = 0;
|
|
field_0x9C8 = 1;
|
|
field_0x9C9 = 0;
|
|
field_0x9CA = 0;
|
|
field_0x6FC = fpcM_ERROR_PROCESS_ID_e;
|
|
field_0x994 = -1.0f;
|
|
}
|
|
|
|
/* 000007B4-000008CC .text daNpc_Roten_nodeCallBack__FP7J3DNodei */
|
|
static BOOL daNpc_Roten_nodeCallBack(J3DNode* node, int param_1) {
|
|
if (!param_1) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
daNpcRoten_c* i_this = (daNpcRoten_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;
|
|
}
|
|
|
|
/* 000008CC-000008EC .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return static_cast<daNpcRoten_c*>(i_this)->createHeap();
|
|
}
|
|
|
|
/* 000008EC-00000974 .text phase_1__FP12daNpcRoten_c */
|
|
static s32 phase_1(daNpcRoten_c* i_this) {
|
|
fopAcM_SetupActor(i_this, daNpcRoten_c);
|
|
|
|
i_this->setNpcNo(i_this->getPrmNpcNo());
|
|
|
|
if(!dComIfGs_isEventBit(0x1108)) {
|
|
return cPhs_UNK3_e;
|
|
}
|
|
|
|
i_this->setResFlag(1);
|
|
return cPhs_NEXT_e;
|
|
}
|
|
|
|
/* 00000974-000009F4 .text phase_2__FP12daNpcRoten_c */
|
|
static s32 phase_2(daNpcRoten_c* i_this) {
|
|
s32 result = dComIfG_resLoad(i_this->getPhaseP(), l_arcname_tbl[i_this->getPrmNpcNo()]);
|
|
if(result == cPhs_COMPLEATE_e) {
|
|
if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, 0x4620)) {
|
|
result = i_this->createInit();
|
|
}
|
|
else {
|
|
i_this->mpMorf = NULL;
|
|
return cPhs_ERROR_e;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/* 000009F4-00000A24 .text _create__12daNpcRoten_cFv */
|
|
s32 daNpcRoten_c::_create() {
|
|
static cPhs__Handler l_method[] = {
|
|
(cPhs__Handler)phase_1,
|
|
(cPhs__Handler)phase_2,
|
|
NULL
|
|
};
|
|
|
|
return dComLbG_PhaseHandler(&mPhs2, l_method, this);
|
|
}
|
|
|
|
/* 00000A24-00000E88 .text createHeap__12daNpcRoten_cFv */
|
|
BOOL daNpcRoten_c::createHeap() {
|
|
J3DModelData* modelData = (J3DModelData*)(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_bmd_ix_tbl[mNpcNo]));
|
|
mpMorf = new mDoExt_McaMorf(
|
|
modelData,
|
|
NULL, NULL,
|
|
(J3DAnmTransformKey*)(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_bck_ix_tbl[mNpcNo][field_0x9C0])),
|
|
J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1,
|
|
NULL,
|
|
0x00080000,
|
|
l_diff_flag_tbl[mNpcNo]
|
|
);
|
|
|
|
if(mpMorf == NULL || mpMorf->getModel() == NULL) {
|
|
return false;
|
|
}
|
|
|
|
J3DModelData* headModelData = (J3DModelData*)(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_head_bmd_ix_tbl[mNpcNo]));
|
|
field_0x6D8 = new mDoExt_McaMorf(
|
|
headModelData,
|
|
NULL, NULL,
|
|
(J3DAnmTransformKey*)(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_head_bck_ix_tbl[mNpcNo])),
|
|
J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1,
|
|
NULL,
|
|
0x00080000,
|
|
0x37441422
|
|
);
|
|
|
|
if(field_0x6D8 == NULL || field_0x6D8->getModel() == NULL) {
|
|
return false;
|
|
}
|
|
|
|
field_0x6D4 = field_0x6D8->getModel();
|
|
|
|
m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head"));
|
|
JUT_ASSERT(0x632, m_jnt.getHeadJntNum() >= 0);
|
|
m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone1"));
|
|
JUT_ASSERT(0x637, m_jnt.getBackboneJntNum() >= 0);
|
|
|
|
if(!initTexPatternAnm(false)) {
|
|
return false;
|
|
}
|
|
|
|
m_hand_L_jnt_num = modelData->getJointName()->getIndex("handL");
|
|
JUT_ASSERT(0x63E, m_hand_L_jnt_num >= 0);
|
|
m_bag_jnt_num = modelData->getJointName()->getIndex("Bag1");
|
|
JUT_ASSERT(0x642, m_bag_jnt_num >= 0);
|
|
|
|
for(u16 i = 0; i < modelData->getJointNum(); i++) {
|
|
if(i == m_jnt.getHeadJntNum() || i == m_jnt.getBackboneJntNum()) {
|
|
modelData->getJointNodePointer(i)->setCallBack(daNpc_Roten_nodeCallBack);
|
|
}
|
|
}
|
|
|
|
mpMorf->getModel()->setUserArea((u32)this);
|
|
mAcchCir.SetWall(30.0f, 30.0f);
|
|
mObjAcch.Set(¤t.pos, &old.pos, this, 1, &mAcchCir, &speed, ¤t.angle, &shape_angle);
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00000E88-00000EA8 .text daNpcRoten_XyEventCB__FPvi */
|
|
static s16 daNpcRoten_XyEventCB(void* i_this, int param_1) {
|
|
return static_cast<daNpcRoten_c*>(i_this)->XyEventCB(param_1);
|
|
}
|
|
|
|
/* 00000EA8-000011C8 .text createInit__12daNpcRoten_cFv */
|
|
s32 daNpcRoten_c::createInit() {
|
|
int weight = 0xFF;
|
|
if(getPrmRailID() != 0xFF) {
|
|
mPathRun.setInf(getPrmRailID(), fopAcM_GetRoomNo(this), true);
|
|
if(mPathRun.mPath == NULL) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
|
|
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
|
|
old.pos = point;
|
|
current.pos = old.pos;
|
|
mPathRun.incIdxLoop();
|
|
point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
|
|
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, ¤t.angle.y);
|
|
field_0x9A6 = 1;
|
|
weight = 0xFE;
|
|
}
|
|
|
|
gravity = -9.0f;
|
|
|
|
field_0x99E = dComIfGp_evmng_getEventIdx("ROTEN_EXCHANGE_1ST");
|
|
field_0x9A0 = dComIfGp_evmng_getEventIdx("ROTEN_EXCHANGE_2ND");
|
|
field_0x9A2 = dComIfGp_evmng_getEventIdx("ROTEN_CHANGE_ITEM");
|
|
field_0x9A4 = dComIfGp_evmng_getEventIdx("ROTEN_GET_MAP");
|
|
mEventCut.setActorInfo2(l_npc_staff_id[mNpcNo], this);
|
|
field_0x9AC = 0;
|
|
field_0x9AE = 0;
|
|
field_0x9B4 = false;
|
|
field_0x9B5 = 0;
|
|
eventInfo.setXyEventCB(daNpcRoten_XyEventCB);
|
|
|
|
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAA;
|
|
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xAA;
|
|
attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e;
|
|
|
|
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -200.0f, 0.0f, -200.0f, 200.0f, 300.0f, 200.0f);
|
|
|
|
mObjAcch.CrrPos(*dComIfG_Bgsp());
|
|
if(-1e9f != mObjAcch.GetGroundH()) {
|
|
current.pos.y = home.pos.y = mObjAcch.GetGroundH();
|
|
}
|
|
|
|
setMtx();
|
|
mpMorf->getModel()->calc();
|
|
|
|
mStts.Init(weight, 0xFF, this);
|
|
mCyl.Set(dNpc_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
mCyl2.Set(dNpc_cyl_src);
|
|
mCyl2.SetStts(&mStts);
|
|
setCollision(l_npc_dat[mNpcNo].field_0x2C, 200.0f);
|
|
setCollisionB();
|
|
mSph.Set(l_sph_src);
|
|
mSph.SetStts(&mStts);
|
|
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 000011C8-0000122C .text _delete__12daNpcRoten_cFv */
|
|
bool daNpcRoten_c::_delete() {
|
|
dComIfG_resDelete(getPhaseP(), l_arcname_tbl[mNpcNo]);
|
|
if(heap && mpMorf) {
|
|
mpMorf->stopZelAnime();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000122C-000013F8 .text _draw__12daNpcRoten_cFv */
|
|
bool daNpcRoten_c::_draw() {
|
|
J3DModel* pModel = mpMorf->getModel();
|
|
J3DModelData* modelData = pModel->getModelData();
|
|
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(mpMorf->getModel(), &tevStr);
|
|
g_env_light.setLightTevColorType(field_0x6D4, &tevStr);
|
|
mBtpAnm.entry(modelData, field_0x9B8);
|
|
|
|
if(l_bmt_ix_tbl[mNpcNo] >= 0) {
|
|
mpMorf->updateDL((J3DMaterialTable*)dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_bmt_ix_tbl[mNpcNo]));
|
|
}
|
|
else {
|
|
mpMorf->updateDL();
|
|
}
|
|
|
|
if(field_0x9C8 != 0) {
|
|
field_0x6D4->setBaseTRMtx(pModel->getAnmMtx(m_jnt.getHeadJntNum()));
|
|
field_0x6D8->updateDL();
|
|
}
|
|
|
|
mBtpAnm.remove(modelData);
|
|
|
|
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(mShadowId != 0) {
|
|
dComIfGd_addRealShadow(mShadowId, field_0x6D4);
|
|
}
|
|
|
|
dSnap_RegistFig(DSNAP_TYPE_ROTEN, this, 1.0f, 1.0f, 1.0f);
|
|
|
|
return true;
|
|
}
|
|
|
|
static daNpcRoten_c::InitFunc_t l_execute_init[] = {
|
|
&daNpcRoten_c::executeWaitInit,
|
|
&daNpcRoten_c::executeTalkInit,
|
|
&daNpcRoten_c::executeWalkInit,
|
|
&daNpcRoten_c::executeTurnInit,
|
|
&daNpcRoten_c::executeWindInit,
|
|
};
|
|
|
|
static daNpcRoten_c::MoveFunc_t moveProc[] = {
|
|
&daNpcRoten_c::executeWait,
|
|
&daNpcRoten_c::executeTalk,
|
|
&daNpcRoten_c::executeWalk,
|
|
&daNpcRoten_c::executeTurn,
|
|
&daNpcRoten_c::executeWind,
|
|
};
|
|
|
|
/* 000013F8-00001604 .text _execute__12daNpcRoten_cFv */
|
|
bool daNpcRoten_c::_execute() {
|
|
chkAttention();
|
|
checkOrder();
|
|
|
|
dBgS* bgs = dComIfG_Bgsp(); // fakematch?
|
|
|
|
if(dComIfGp_event_getMode() == dEvtMode_NONE_e || (eventInfo.checkCommandTalk() && (field_0x9B2 & 0x8000) == 0)) {
|
|
(this->*moveProc[field_0x9BB])();
|
|
}
|
|
else {
|
|
eventMove();
|
|
}
|
|
|
|
eventOrder();
|
|
playTexPatternAnm();
|
|
playAnm();
|
|
|
|
speedF = field_0x990;
|
|
fopAcM_posMoveF(this, mStts.GetCCMoveP());
|
|
mObjAcch.CrrPos(*bgs);
|
|
setCollision(l_npc_dat[mNpcNo].field_0x2C, 200.0f);
|
|
setCollisionH();
|
|
|
|
attention_info.position.set(current.pos.x, current.pos.y + l_npc_dat[mNpcNo].field_0x1C, current.pos.z);
|
|
eyePos.set(current.pos.x, current.pos.y + l_npc_dat[mNpcNo].field_0x28, current.pos.z);
|
|
if(field_0x9C7) {
|
|
m_jnt.setParam(0, 0, 0, 0, l_npc_dat[mNpcNo].field_0x04, l_npc_dat[mNpcNo].field_0x08, l_npc_dat[mNpcNo].field_0x0C, l_npc_dat[mNpcNo].field_0x10, l_npc_dat[mNpcNo].field_0x14);
|
|
}
|
|
else {
|
|
m_jnt.setParam(l_npc_dat[mNpcNo].field_0x06, l_npc_dat[mNpcNo].field_0x0A, l_npc_dat[mNpcNo].field_0x0E, l_npc_dat[mNpcNo].field_0x12, l_npc_dat[mNpcNo].field_0x04, l_npc_dat[mNpcNo].field_0x08, l_npc_dat[mNpcNo].field_0x0C, l_npc_dat[mNpcNo].field_0x10, l_npc_dat[mNpcNo].field_0x14);
|
|
}
|
|
|
|
lookBack();
|
|
setCollisionB();
|
|
setMtx();
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00001604-00001674 .text executeCommon__12daNpcRoten_cFv */
|
|
bool daNpcRoten_c::executeCommon() {
|
|
if(field_0x9B6 != 0 && field_0x9BB != 4) {
|
|
field_0x9B7 = 1;
|
|
}
|
|
else {
|
|
field_0x9B7 = 0;
|
|
}
|
|
|
|
if(field_0x9B4 == true) {
|
|
executeSetMode(1);
|
|
}
|
|
|
|
return field_0x9B4;
|
|
}
|
|
|
|
/* 00001674-000016C8 .text executeSetMode__12daNpcRoten_cFUc */
|
|
void daNpcRoten_c::executeSetMode(u8 param_1) {
|
|
field_0x990 = 0.0f;
|
|
field_0x9BB = (this->*l_execute_init[param_1])();
|
|
}
|
|
|
|
/* 000016C8-00001790 .text executeWaitInit__12daNpcRoten_cFv */
|
|
s32 daNpcRoten_c::executeWaitInit() {
|
|
setAnmTbl(l_npc_anm_wait);
|
|
field_0x9A6 = l_npc_dat[mNpcNo].field_0x4C + cM_rndF(l_npc_dat[mNpcNo].field_0x4E - l_npc_dat[mNpcNo].field_0x4C);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 00001790-00001808 .text executeWait__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::executeWait() {
|
|
if(!executeCommon() && mPathRun.mPath != NULL && field_0x9A6 && !field_0x9B5) {
|
|
field_0x9A6--;
|
|
if(field_0x9A6 == 0) {
|
|
executeSetMode(3);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001808-00001810 .text executeTalkInit__12daNpcRoten_cFv */
|
|
s32 daNpcRoten_c::executeTalkInit() {
|
|
return 1;
|
|
}
|
|
|
|
/* 00001810-000018E0 .text executeTalk__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::executeTalk() {
|
|
executeCommon();
|
|
if(!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) {
|
|
if(talk(1) == fopMsgStts_BOX_CLOSED_e) {
|
|
field_0x9B4 = 0;
|
|
executeSetMode(0);
|
|
dComIfGp_event_reset();
|
|
field_0x9B2 &= ~0x4000;
|
|
field_0x9C6 = 0;
|
|
}
|
|
else {
|
|
setAnmFromMsgTag();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000018E0-000019A8 .text executeWalkInit__12daNpcRoten_cFv */
|
|
s32 daNpcRoten_c::executeWalkInit() {
|
|
setAnmTbl(l_npc_anm_walk);
|
|
field_0x9A6 = l_npc_dat[mNpcNo].field_0x50 + cM_rndF(l_npc_dat[mNpcNo].field_0x52 - l_npc_dat[mNpcNo].field_0x50);
|
|
|
|
return 2;
|
|
}
|
|
|
|
/* 000019A8-00001B54 .text executeWalk__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::executeWalk() {
|
|
if(!executeCommon()) {
|
|
bool temp = false;
|
|
if(mPathRun.chkPointPass(current.pos, mPathRun.mbGoingForwards) && !mPathRun.nextIdxAuto()) {
|
|
temp = true;
|
|
}
|
|
|
|
if(field_0x9B5 != 0) {
|
|
executeSetMode(0);
|
|
}
|
|
else if(!temp) {
|
|
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
|
|
s16 angle;
|
|
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
|
|
field_0x9B0 = angle;
|
|
field_0x99C = 0;
|
|
field_0x9AC = l_npc_dat[mNpcNo].field_0x18;
|
|
field_0x9C4 = 2;
|
|
m_jnt.setTrn();
|
|
field_0x990 = l_npc_dat[mNpcNo].field_0x44;
|
|
if(field_0x9A6 != 0) {
|
|
field_0x9A6--;
|
|
if(field_0x9A6 == 0) {
|
|
executeSetMode(0);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
mPathRun.mbGoingForwards ^= 1;
|
|
executeSetMode(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001B54-00001C98 .text executeTurnInit__12daNpcRoten_cFv */
|
|
s32 daNpcRoten_c::executeTurnInit() {
|
|
int ret = 3;
|
|
|
|
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
|
|
s16 angle;
|
|
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
|
|
if(angle == current.angle.y) {
|
|
ret = 2;
|
|
|
|
setAnmTbl(l_npc_anm_walk);
|
|
field_0x9A6 = l_npc_dat[mNpcNo].field_0x50 + cM_rndF(l_npc_dat[mNpcNo].field_0x52 - l_npc_dat[mNpcNo].field_0x50);\
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 00001C98-00001D5C .text executeTurn__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::executeTurn() {
|
|
if(!executeCommon()) {
|
|
cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex);
|
|
s16 angle;
|
|
dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle);
|
|
field_0x9B0 = angle;
|
|
field_0x99C = 0;
|
|
field_0x9C4 = 2;
|
|
if(!m_jnt.trnChk()) {
|
|
executeSetMode(2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001D5C-00001E00 .text executeWindInit__12daNpcRoten_cFv */
|
|
s32 daNpcRoten_c::executeWindInit() {
|
|
setAnmTbl(l_npc_anm_wind);
|
|
J3DAnmTransform* pAnmRes = static_cast<J3DAnmTransform*>(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_head_bck_ix_tbl[mNpcNo]));
|
|
field_0x6D8->setAnm(pAnmRes, J3DFrameCtrl::LOOP_ONCE_e, 14.0f, 1.0f, 0.0f, 39.0f, NULL);
|
|
|
|
return 4;
|
|
}
|
|
|
|
/* 00001E00-00001E68 .text executeWind__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::executeWind() {
|
|
if(!executeCommon()) {
|
|
field_0x6D8->play(NULL, 0, 0);
|
|
|
|
if(field_0x9C1 & 1) {
|
|
executeSetMode(0);
|
|
field_0x9CA = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001E68-00001FA0 .text checkOrder__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::checkOrder() {
|
|
if(eventInfo.checkCommandDemoAccrpt()) {
|
|
if(dComIfGp_evmng_startCheck(field_0x99E) && field_0x9B7 == 3) {
|
|
field_0x9B7 = 0;
|
|
}
|
|
else if(dComIfGp_evmng_startCheck(field_0x9A0) && field_0x9B7 == 4) {
|
|
field_0x9B7 = 0;
|
|
}
|
|
else if(dComIfGp_evmng_startCheck(field_0x9A2) && field_0x9B7 == 5) {
|
|
field_0x9B7 = 0;
|
|
}
|
|
else if(dComIfGp_evmng_startCheck(field_0x9A4) && field_0x9B7 == 6) {
|
|
field_0x9B7 = 0;
|
|
}
|
|
}
|
|
else if(eventInfo.checkCommandTalk() && (field_0x9B7 == 2 || field_0x9B7 == 1) && field_0x9B4 == false) {
|
|
field_0x9B4 = true;
|
|
field_0x990 = 0.0f;
|
|
field_0x9C6 = 1;
|
|
}
|
|
}
|
|
|
|
/* 00001FA0-0000211C .text eventOrder__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventOrder() {
|
|
if(field_0x9B7 == 2 || field_0x9B7 == 1) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
if(dComIfGs_isEventBit(l_save_dat[mNpcNo].field_0x00)) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
|
|
}
|
|
|
|
if(field_0x9B7 == 2) {
|
|
fopAcM_orderSpeakEvent(this);
|
|
}
|
|
}
|
|
else if(field_0x9B7 == 3) {
|
|
fopAcM_orderOtherEventId(this, field_0x99E, 0xFF, 0xFF7F, 0, 1);
|
|
field_0x9B2 |= 0x4000;
|
|
}
|
|
else if(field_0x9B7 == 4) {
|
|
fopAcM_orderOtherEventId(this, field_0x9A0, 0xFF, 0xFF7F, 0, 1);
|
|
field_0x9B2 |= 0x4000;
|
|
}
|
|
else if(field_0x9B7 == 5) {
|
|
fopAcM_orderOtherEventId(this, field_0x9A2, 0xFF, 0xFF7F, 0, 1);
|
|
field_0x9B2 |= 0x4000;
|
|
}
|
|
else if(field_0x9B7 == 6) {
|
|
fopAcM_orderChangeEventId(dComIfGp_getPlayer(0), this, field_0x9A4, 0, 0xFFFF);
|
|
field_0x9B2 |= 0x4000;
|
|
dComIfGs_setReserveItemEmpty();
|
|
}
|
|
}
|
|
|
|
/* 0000211C-00002314 .text eventMove__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventMove() {
|
|
if(field_0x9B2 & 0x4000) {
|
|
if(dComIfGp_evmng_endCheck(field_0x99E)) {
|
|
dComIfGp_event_reset();
|
|
field_0x9B2 &= ~0xC000;
|
|
executeSetMode(0);
|
|
field_0x9B4 = 0;
|
|
|
|
if(field_0x9B2 & 8) {
|
|
field_0x9B7 = 2;
|
|
eventOnPlrInit();
|
|
}
|
|
else {
|
|
field_0x9B7 = 4;
|
|
}
|
|
}
|
|
else if(dComIfGp_evmng_endCheck(field_0x9A0)) {
|
|
dComIfGp_event_reset();
|
|
field_0x9B2 &= ~0x4000;
|
|
executeSetMode(0);
|
|
if(field_0x9B2 & 0x40) {
|
|
field_0x9B2 &= ~0x40;
|
|
eventOnPlrInit();
|
|
}
|
|
else if(field_0x9B2 & 0x30) {
|
|
field_0x9B7 = 2;
|
|
eventOnPlrInit();
|
|
}
|
|
else {
|
|
field_0x9B7 = 5;
|
|
}
|
|
}
|
|
else if(dComIfGp_evmng_endCheck(field_0x9A2)) {
|
|
field_0x9C6 = 0;
|
|
dComIfGp_event_reset();
|
|
field_0x9B2 &= ~0x4000;
|
|
executeSetMode(0);
|
|
}
|
|
else if(dComIfGp_evmng_endCheck(field_0x9A4)) {
|
|
field_0x9B4 = 0;
|
|
field_0x9C6 = 0;
|
|
dComIfGp_event_reset();
|
|
field_0x9B2 &= ~0xC000;
|
|
executeSetMode(0);
|
|
}
|
|
else {
|
|
bool oldFlag = mEventCut.getAttnFlag();
|
|
if(mEventCut.cutProc()) {
|
|
if(!mEventCut.getAttnFlag()) {
|
|
mEventCut.setAttnFlag(oldFlag);
|
|
}
|
|
}
|
|
else {
|
|
privateCut();
|
|
setAnmFromMsgTag();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/* 00002314-000025FC .text privateCut__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::privateCut() {
|
|
static char* cut_name_tbl[] = {
|
|
"INIT",
|
|
"MES_SET",
|
|
"SET_ITEM",
|
|
"CLR_ITEM",
|
|
"GET_ITEM",
|
|
"SET_ANGLE",
|
|
"ON_PLR",
|
|
"OFF_PLR",
|
|
};
|
|
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId(l_npc_staff_id[mNpcNo]);
|
|
if(staffIdx != -1) {
|
|
field_0x9C3 = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), 1, 0);
|
|
if(field_0x9C3 == -1) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
return;
|
|
}
|
|
|
|
if(dComIfGp_evmng_getIsAddvance(staffIdx)) {
|
|
switch(field_0x9C3) {
|
|
case 0:
|
|
eventInit();
|
|
break;
|
|
case 1:
|
|
eventMesSetInit(staffIdx);
|
|
break;
|
|
case 2:
|
|
eventSetItemInit();
|
|
break;
|
|
case 3:
|
|
eventClrItemInit();
|
|
break;
|
|
case 4:
|
|
eventGetItemInit(staffIdx);
|
|
break;
|
|
case 5:
|
|
eventSetAngleInit();
|
|
break;
|
|
case 6:
|
|
eventOnPlrInit();
|
|
break;
|
|
case 7:
|
|
eventOffPlrInit();
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool temp;
|
|
switch(field_0x9C3) {
|
|
case 1:
|
|
temp = eventMesSet();
|
|
break;
|
|
case 2:
|
|
temp = eventSetItem();
|
|
break;
|
|
default:
|
|
temp = true;
|
|
}
|
|
|
|
if(temp) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
|
|
daDitem_c* pItem;
|
|
if (fopAcM_SearchByID(field_0x6F8, (fopAc_ac_c**)&pItem) && pItem) {
|
|
if(field_0x9C0 == 7 && (s16)mpMorf->getFrame() >= 0x3C) {
|
|
cMtx_copy(mpMorf->getModel()->getAnmMtx(m_hand_L_jnt_num), *calc_mtx);
|
|
mDoMtx_stack_c::transS(20.0f, -30.0f, -30.0f);
|
|
cMtx_concat(*calc_mtx, mDoMtx_stack_c::get(), *calc_mtx);
|
|
|
|
cXyz offset;
|
|
mDoMtx_multVecZero(*calc_mtx, &offset);
|
|
pItem->setOffsetPos(offset);
|
|
pItem->show();
|
|
field_0x714 = offset;
|
|
}
|
|
else if(field_0x9C0 == 8) {
|
|
field_0x708 = field_0x714;
|
|
field_0x99C = 1;
|
|
field_0x9C4 = 1;
|
|
field_0x9C6 = 0;
|
|
field_0x9C7 = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000025FC-00002600 .text eventInit__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventInit() {
|
|
return;
|
|
}
|
|
|
|
/* 00002600-0000280C .text eventMesSetInit__12daNpcRoten_cFi */
|
|
void daNpcRoten_c::eventMesSetInit(int staffIdx) {
|
|
u32* pData = dComIfGp_evmng_getMyIntegerP(staffIdx, "MsgNo");
|
|
if(pData) {
|
|
u32 msgNo = *pData;
|
|
switch(msgNo) {
|
|
case 0x0:
|
|
field_0x98C = l_msg_xy_koukan_item[mNpcNo][field_0x9BE];
|
|
setMessage(field_0x98C[0]);
|
|
dComIfGs_onEventBit(l_save_dat[mNpcNo].field_0x06);
|
|
break;
|
|
case 0x1:
|
|
field_0x98C = l_msg_xy_koukan_item2[mNpcNo][field_0x9BE];
|
|
setMessage(field_0x98C[0]);
|
|
break;
|
|
case 0xA:
|
|
field_0x98C = l_msg_xy_koukan_item3[mNpcNo][field_0x9BE];
|
|
setMessage(field_0x98C[0]);
|
|
break;
|
|
case 0x14:
|
|
field_0x98C = l_msg_xy_after_get_demo[mNpcNo];
|
|
setMessage(field_0x98C[0]);
|
|
break;
|
|
case 0x15:
|
|
field_0x98C = l_msg_xy_after_get_demo2[mNpcNo];
|
|
setMessage(field_0x98C[0]);
|
|
break;
|
|
case 0x63:
|
|
setMessage(getMsg());
|
|
break;
|
|
default:
|
|
setMessage(msgNo);
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
field_0x98C = &field_0x98C[1];
|
|
setMessage(field_0x98C[0]);
|
|
}
|
|
}
|
|
|
|
/* 0000280C-00002840 .text eventMesSet__12daNpcRoten_cFv */
|
|
bool daNpcRoten_c::eventMesSet() {
|
|
return talk(0) == fopMsgStts_BOX_CLOSED_e;
|
|
}
|
|
|
|
/* 00002840-000028C4 .text eventSetItemInit__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventSetItemInit() {
|
|
u8 itemIdx = l_item_dat[mNpcNo][field_0x9BE];
|
|
cXyz pos(0.0f, 0.0f, 0.0f);
|
|
u8 itemNo = itemIdx + FLOWER_1;
|
|
field_0x6F8 = fopAcM_createItemForPresentDemo(&pos, itemNo, 9, -1, fopAcM_GetRoomNo(this));
|
|
}
|
|
|
|
/* 000028C4-0000290C .text eventSetItem__12daNpcRoten_cFv */
|
|
bool daNpcRoten_c::eventSetItem() {
|
|
fopAc_ac_c* pActor;
|
|
if(fopAcM_SearchByID(field_0x6F8, &pActor)) {
|
|
if(pActor) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 0000290C-00002978 .text eventClrItemInit__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventClrItemInit() {
|
|
daDitem_c* pItem;
|
|
if(fopAcM_SearchByID(field_0x6F8, (fopAc_ac_c**)&pItem) && pItem != NULL) {
|
|
pItem->dead();
|
|
}
|
|
|
|
field_0x9C6 = 1;
|
|
field_0x9C7 = 0;
|
|
setAnmTbl(l_npc_anm_wait);
|
|
}
|
|
|
|
/* 00002978-00002A70 .text eventGetItemInit__12daNpcRoten_cFi */
|
|
void daNpcRoten_c::eventGetItemInit(int staffIdx) {
|
|
uint pcId;
|
|
|
|
u32* pData = dComIfGp_evmng_getMyIntegerP(staffIdx, "ItemNo");
|
|
if(pData != NULL) {
|
|
u32 itemNo = *pData; // fakematch?
|
|
itemNo = l_get_item_no[itemNo];
|
|
pcId = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, 0, -1, fopAcM_GetRoomNo(this));
|
|
}
|
|
else {
|
|
u8 temp = l_item_dat[mNpcNo][field_0x9BE];
|
|
u32 itemIdx = temp; // fakematch?
|
|
dComIfGs_onGetItemReserve(temp);
|
|
|
|
u8 itemNo = FLOWER_1;
|
|
itemNo += itemIdx; // fakematch?
|
|
pcId = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, 1, -1, fopAcM_GetRoomNo(this));
|
|
}
|
|
|
|
if(pcId != fpcM_ERROR_PROCESS_ID_e) {
|
|
dComIfGp_event_setItemPartnerId(pcId);
|
|
}
|
|
}
|
|
|
|
/* 00002A70-00002AD4 .text eventSetAngleInit__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventSetAngleInit() {
|
|
daPy_lk_c* player = daPy_getPlayerLinkActorClass();
|
|
cXyz delta = current.pos - player->current.pos;
|
|
player->changeDemoMoveAngle(cM_atan2s(delta.x, delta.z));
|
|
}
|
|
|
|
/* 00002AD4-00002AF0 .text eventOnPlrInit__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventOnPlrInit() {
|
|
daPy_getPlayerLinkActorClass()->offPlayerNoDraw();
|
|
}
|
|
|
|
/* 00002AF0-00002B0C .text eventOffPlrInit__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::eventOffPlrInit() {
|
|
daPy_getPlayerLinkActorClass()->onPlayerNoDraw();
|
|
}
|
|
|
|
/* 00002B0C-00002D5C .text next_msgStatus__12daNpcRoten_cFPUl */
|
|
u16 daNpcRoten_c::next_msgStatus(u32* pMsgNo) {
|
|
u16 status = fopMsgStts_MSG_CONTINUES_e;
|
|
|
|
switch(*pMsgNo) {
|
|
case 0x293D:
|
|
case 0x29A1:
|
|
case 0x2A05:
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
default:
|
|
if(field_0x98C) {
|
|
field_0x98C = &field_0x98C[1];
|
|
switch(field_0x98C[0]) {
|
|
case 0:
|
|
field_0x98C = NULL;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
case 1:
|
|
if(mpCurrMsg->mSelectNum != 0) {
|
|
field_0x9B2 |= 8;
|
|
}
|
|
|
|
field_0x98C = NULL;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
case 2:
|
|
if(mpCurrMsg->mSelectNum == 0) {
|
|
if(dComIfGs_getRupee() < dComIfGp_getMessageRupee()) {
|
|
field_0x9B2 |= 0x20;
|
|
field_0x98C = NULL;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
|
|
dComIfGp_setItemRupeeCount(-dComIfGp_getMessageRupee());
|
|
u8 temp = l_item_dat[mNpcNo][field_0x9BE];
|
|
u8 temp2 = dComIfGs_getEventReg(l_save_dat[mNpcNo].field_0x02);
|
|
dComIfGs_setEventReg(l_save_dat[mNpcNo].field_0x02, temp2 + 1);
|
|
if(dComIfGs_isGetItemReserve(temp)) {
|
|
*pMsgNo = l_msg_xy_koukan_end[mNpcNo];
|
|
field_0x9B2 |= 0x40;
|
|
}
|
|
else {
|
|
*pMsgNo = l_msg_xy_koukan_first[mNpcNo];
|
|
}
|
|
|
|
dComIfGs_setReserveItemChange(field_0x9C5, temp + FLOWER_1);
|
|
field_0x98C = NULL;
|
|
break;
|
|
}
|
|
else {
|
|
field_0x9B2 |= 0x10;
|
|
field_0x98C = NULL;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
|
|
field_0x98C = NULL;
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
case 3:
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
default:
|
|
*pMsgNo = field_0x98C[0];
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
status = fopMsgStts_MSG_ENDS_e;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
/* 00002D5C-000030C0 .text getMsg__12daNpcRoten_cFv */
|
|
u32 daNpcRoten_c::getMsg() {
|
|
u32 msgNo = 0;
|
|
|
|
field_0x98C = NULL;
|
|
if(field_0x9B2 & 8) {
|
|
field_0x9B2 &= ~0x0008;
|
|
msgNo = l_msg_xy_koukan_no[mNpcNo];
|
|
}
|
|
else if(field_0x9B2 & 0x10) {
|
|
field_0x9B2 &= ~0x0010;
|
|
msgNo = l_msg_xy_koukan_no[mNpcNo];
|
|
}
|
|
else if(field_0x9B2 & 0x20) {
|
|
field_0x9B2 &= ~0x0020;
|
|
msgNo = l_msg_xy_koukan_rupee[mNpcNo];
|
|
}
|
|
else if(dComIfGp_event_chkTalkXY()) {
|
|
int itemNo = dComIfGp_event_getPreItemNo();
|
|
if(isGetMap(itemNo)) {
|
|
field_0x98C = l_msg_try_force;
|
|
dComIfGs_setReserveItemEmpty();
|
|
dComIfGs_onEventBit(0x3E04);
|
|
}
|
|
else if(dComIfGs_getEventReg(l_save_dat[mNpcNo].field_0x02) >= 3) {
|
|
field_0x98C = l_msg_xy_exchange3[mNpcNo];
|
|
}
|
|
else if(!isHaitatuItem(itemNo)) {
|
|
field_0x98C = l_msg_xy_no_roten_item[mNpcNo];
|
|
}
|
|
else if(!isKoukanItem(itemNo)) {
|
|
field_0x98C = l_msg_xy_invalid_item[mNpcNo];
|
|
}
|
|
else {
|
|
field_0x9BE = itemNo - FLOWER_1;
|
|
field_0x98C = l_msg_xy_koukan_item[mNpcNo][field_0x9BE];
|
|
dComIfGs_onEventBit(l_save_dat[mNpcNo].field_0x06);
|
|
}
|
|
}
|
|
else {
|
|
if(!dComIfGs_isEventBit(l_save_dat[mNpcNo].field_0x00)) {
|
|
field_0x98C = l_msg_1st_talk[mNpcNo];
|
|
dComIfGs_onEventBit(l_save_dat[mNpcNo].field_0x00);
|
|
}
|
|
else if(dComIfGs_getEventReg(l_save_dat[mNpcNo].field_0x02) >= 3) {
|
|
field_0x98C = l_msg_exchange3[mNpcNo];
|
|
}
|
|
else if(mNpcNo == 1 && dComIfGs_isEventBit(0x3E04)) {
|
|
field_0x98C = l_msg_collect_map;
|
|
}
|
|
else if(dComIfGs_isEventBit(l_save_dat[mNpcNo].field_0x06)) {
|
|
field_0x98C = l_msg_exchange[mNpcNo];
|
|
}
|
|
else {
|
|
field_0x98C = l_msg_etc[mNpcNo];
|
|
}
|
|
}
|
|
|
|
if(field_0x98C) {
|
|
msgNo = field_0x98C[0];
|
|
}
|
|
|
|
return msgNo;
|
|
}
|
|
|
|
/* 000030C0-000030D0 .text setMessage__12daNpcRoten_cFUl */
|
|
void daNpcRoten_c::setMessage(u32 msgNo) {
|
|
mCurrMsgBsPcId = fpcM_ERROR_PROCESS_ID_e;
|
|
mCurrMsgNo = msgNo;
|
|
}
|
|
|
|
/* 000030D0-00003198 .text setAnmFromMsgTag__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::setAnmFromMsgTag() {
|
|
switch(dComIfGp_getMesgAnimeAttrInfo()) {
|
|
case 0:
|
|
setAnmTbl(l_npc_anm_wait);
|
|
break;
|
|
case 1:
|
|
setAnmTbl(l_npc_anm_talk);
|
|
break;
|
|
case 2:
|
|
setAnmTbl(l_npc_anm_talk2);
|
|
break;
|
|
case 3:
|
|
setAnmTbl(l_npc_anm_talk3);
|
|
break;
|
|
case 4:
|
|
setAnmTbl(l_npc_anm_walk);
|
|
break;
|
|
case 5:
|
|
setAnmTbl(l_npc_anm_watasu);
|
|
break;
|
|
case 6:
|
|
setAnmTbl(l_npc_anm_itemwait);
|
|
break;
|
|
case 7:
|
|
setAnmTbl(l_npc_anm_talk4);
|
|
break;
|
|
case 8:
|
|
setAnmTbl(l_npc_anm_talk5);
|
|
break;
|
|
}
|
|
|
|
dComIfGp_clearMesgAnimeAttrInfo();
|
|
}
|
|
|
|
/* 00003198-000031C4 .text getPrmNpcNo__12daNpcRoten_cFv */
|
|
u8 daNpcRoten_c::getPrmNpcNo() {
|
|
return daObj::PrmAbstract(this, PRM_NPC_NO_W, PRM_NPC_NO_S);
|
|
}
|
|
|
|
/* 000031C4-000031F0 .text getPrmRailID__12daNpcRoten_cFv */
|
|
u8 daNpcRoten_c::getPrmRailID() {
|
|
return daObj::PrmAbstract(this, PRM_RAIL_ID_W, PRM_RAIL_ID_S);
|
|
}
|
|
|
|
/* 000031F0-00003278 .text setMtx__12daNpcRoten_cFv */
|
|
void daNpcRoten_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());
|
|
}
|
|
|
|
/* 00003278-00003558 .text chkAttention__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::chkAttention() {
|
|
if(mEventCut.getAttnFlag()) {
|
|
field_0x708 = mEventCut.getAttnPos();
|
|
field_0x9C4 = 1;
|
|
if(field_0x9C6 != 0) {
|
|
field_0x99C = 0;
|
|
m_jnt.setTrn();
|
|
}
|
|
else {
|
|
field_0x99C = 1;
|
|
}
|
|
|
|
if(field_0x9B5 == 0) {
|
|
field_0x9B5 = 1;
|
|
field_0x9B6 = 1;
|
|
}
|
|
}
|
|
else {
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
|
|
f32 temp = l_npc_dat[mNpcNo].field_0x24;
|
|
int temp2 = l_npc_dat[mNpcNo].field_0x20;
|
|
int temp3 = 0x4000;
|
|
if(field_0x9B4 != 0) {
|
|
temp3 = 0x7FFF;
|
|
}
|
|
f32 temp4;
|
|
s16 temp5;
|
|
|
|
dNpc_calc_DisXZ_AngY(current.pos, player->current.pos, &temp4, &temp5);
|
|
if(field_0x9B5 != 0) {
|
|
temp += 40.0f;
|
|
temp2 += 0x071C;
|
|
}
|
|
|
|
temp5 -= current.angle.y;
|
|
if(temp > temp4 && field_0x9CA == 0 && temp3 > abs(temp5)) {
|
|
field_0x708 = dNpc_playerEyePos(l_npc_dat[mNpcNo].field_0x00);
|
|
field_0x9C4 = 1;
|
|
if(field_0x9C6 != 0) {
|
|
field_0x99C = 0;
|
|
}
|
|
else {
|
|
field_0x99C = 1;
|
|
}
|
|
|
|
if(field_0x9B5 == 0) {
|
|
field_0x9B5 = 1;
|
|
}
|
|
|
|
field_0x9B6 = 1;
|
|
}
|
|
else if(temp > temp4 && field_0x9CA == 0 && temp2 > abs(temp5)) {
|
|
if(field_0x9B6 == 0) {
|
|
field_0x9B6 = 1;
|
|
}
|
|
|
|
if(field_0x9B5 == 1) {
|
|
field_0x9B5 = 0;
|
|
field_0x9A8 = 0x1E;
|
|
}
|
|
}
|
|
else {
|
|
if(field_0x9B5 == 1) {
|
|
field_0x9B5 = 0;
|
|
field_0x9A8 = 0x1E;
|
|
}
|
|
|
|
field_0x9B6 = 0;
|
|
field_0x9C4 = 0;
|
|
|
|
if(mPathRun.mPath == NULL) {
|
|
if(field_0x9A8 != 0) {
|
|
field_0x9A8--;
|
|
}
|
|
else {
|
|
field_0x9B0 = home.angle.y;
|
|
field_0x99C = 0;
|
|
field_0x9C4 = 2;
|
|
m_jnt.setTrn();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
field_0x9AC = l_npc_dat[mNpcNo].field_0x16;
|
|
}
|
|
|
|
/* 00003558-000036A4 .text lookBack__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::lookBack() {
|
|
cXyz temp4;
|
|
s16 temp1 = field_0x9AC;
|
|
s16 targetY = current.angle.y;
|
|
cXyz* dstPos = NULL;
|
|
cXyz temp2 = eyePos;
|
|
bool temp3 = field_0x99C;
|
|
|
|
switch(field_0x9C4) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
temp4 = field_0x708;
|
|
dstPos = &temp4;
|
|
break;
|
|
case 2:
|
|
targetY = field_0x9B0;
|
|
break;
|
|
}
|
|
|
|
if(field_0x9B4 != 0 && field_0x9C6 != 0) {
|
|
temp3 = false;
|
|
m_jnt.setTrn();
|
|
}
|
|
|
|
if(m_jnt.trnChk()) {
|
|
s16 speed = mEventCut.getTurnSpeed();
|
|
if(speed != 0) {
|
|
temp1 = speed;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&field_0x9AE, temp1, 4, 0x800);
|
|
}
|
|
else {
|
|
field_0x9AE = 0;
|
|
}
|
|
|
|
m_jnt.lookAtTarget(¤t.angle.y, dstPos, temp2, targetY, field_0x9AE, temp3);
|
|
shape_angle = current.angle;
|
|
}
|
|
|
|
/* 000036A4-000037BC .text initTexPatternAnm__12daNpcRoten_cFb */
|
|
BOOL daNpcRoten_c::initTexPatternAnm(bool modify) {
|
|
J3DModelData* modelData = mpMorf->getModel()->getModelData();
|
|
|
|
m_head_tex_pattern = static_cast<J3DAnmTexPattern*>(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_btp_ix_tbl[mNpcNo]));
|
|
JUT_ASSERT(0xBFF, m_head_tex_pattern != 0);
|
|
|
|
if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, modify, 0)) {
|
|
return false;
|
|
}
|
|
|
|
field_0x9B8 = 0;
|
|
field_0x9AA = 0;
|
|
return true;
|
|
}
|
|
|
|
/* 000037BC-00003828 .text playTexPatternAnm__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::playTexPatternAnm() {
|
|
if(cLib_calcTimer(&field_0x9AA) == 0) {
|
|
if(field_0x9B8 >= m_head_tex_pattern->getFrameMax()) {
|
|
field_0x9B8 -= m_head_tex_pattern->getFrameMax();
|
|
field_0x9AA = 0x78;
|
|
}
|
|
else {
|
|
field_0x9B8++;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00003828-000038E4 .text playAnm__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::playAnm() {
|
|
if(mpMorf->play(NULL, 0, 0) && field_0x988 && field_0x9C2 > 0) {
|
|
field_0x9C2--;
|
|
|
|
if(field_0x9C2 == 0) {
|
|
field_0x988++;
|
|
if(setAnmTbl(field_0x988)) {
|
|
field_0x9C1 |= 1;
|
|
}
|
|
}
|
|
else {
|
|
setAnm(field_0x988->field_0x00, 0, 0.0f);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000038E4-000039C8 .text setAnm__12daNpcRoten_cFUcif */
|
|
void daNpcRoten_c::setAnm(u8 param_1, int param_2, f32 param_3) {
|
|
if(field_0x994 >= 0.0f) {
|
|
param_3 = field_0x994;
|
|
field_0x994 = -1.0f;
|
|
}
|
|
|
|
J3DAnmTransform* pAnmRes = static_cast<J3DAnmTransform*>(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_bck_ix_tbl[mNpcNo][param_1]));
|
|
mpMorf->setAnm(pAnmRes, param_2, param_3, 1.0f, 0.0f, -1.0f, NULL);
|
|
field_0x9C0 = param_1;
|
|
field_0x998 = param_2;
|
|
}
|
|
|
|
/* 000039C8-00003A80 .text setAnmTbl__12daNpcRoten_cFP12sRotenAnmDat */
|
|
bool daNpcRoten_c::setAnmTbl(sRotenAnmDat* param_1) {
|
|
field_0x9C1 &= ~0x1;
|
|
if(param_1->field_0x00 == 0xFF) {
|
|
field_0x988 = 0;
|
|
return true;
|
|
}
|
|
|
|
field_0x988 = param_1;
|
|
field_0x9C2 = field_0x988->field_0x02;
|
|
int temp = 2;
|
|
if(field_0x9C2 > 0) {
|
|
temp = 0;
|
|
}
|
|
if(field_0x9C0 != field_0x988->field_0x00 || temp == 0 || field_0x998 == 0) {
|
|
setAnm(field_0x988->field_0x00, temp, field_0x988->field_0x01);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00003A80-00003AA4 .text isHaitatuItem__12daNpcRoten_cFUc */
|
|
BOOL daNpcRoten_c::isHaitatuItem(u8 itemNo) {
|
|
return FLOWER_1 <= itemNo && itemNo <= XXX_039;
|
|
}
|
|
|
|
/* 00003AA4-00003AC8 .text isKoukanItem__12daNpcRoten_cFUc */
|
|
BOOL daNpcRoten_c::isKoukanItem(u8 itemNo) {
|
|
return FLOWER_1 <= itemNo && itemNo <= PRESIDENT_STATUE;
|
|
}
|
|
|
|
/* 00003AC8-00003B30 .text isGetMap__12daNpcRoten_cFUc */
|
|
BOOL daNpcRoten_c::isGetMap(u8 itemNo) {
|
|
if(mNpcNo == 1 && !dComIfGs_isEventBit(0x3E04) && itemNo == PRESIDENT_STATUE) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00003B30-00003C7C .text XyEventCB__12daNpcRoten_cFi */
|
|
s16 daNpcRoten_c::XyEventCB(int equippedItemIdx) {
|
|
s16 eventIdx;
|
|
|
|
int itemNo = dComIfGp_getSelectItem(equippedItemIdx);
|
|
field_0x9BE = itemNo - FLOWER_1;
|
|
if(isKoukanItem(itemNo) && dComIfGs_getEventReg(l_save_dat[mNpcNo].field_0x02) < 3 && !isGetMap(itemNo)) {
|
|
if(dComIfGp_event_getTalkXYBtn() == 1) {
|
|
field_0x9C5 = 0;
|
|
}
|
|
else if(dComIfGp_event_getTalkXYBtn() == 2) {
|
|
field_0x9C5 = 1;
|
|
}
|
|
else if(dComIfGp_event_getTalkXYBtn() == 3) {
|
|
field_0x9C5 = 2;
|
|
}
|
|
else {
|
|
field_0x9C5 = 3;
|
|
}
|
|
|
|
eventIdx = field_0x99E;
|
|
field_0x9B2 |= 0xC000;
|
|
}
|
|
else {
|
|
if(isGetMap(itemNo)) {
|
|
eventIdx = field_0x9A4;
|
|
field_0x9B2 |= 0xC000;
|
|
}
|
|
else {
|
|
eventIdx = dComIfGp_evmng_getEventIdx("DEFAULT_TALK_XY");
|
|
}
|
|
}
|
|
|
|
return eventIdx;
|
|
}
|
|
|
|
/* 00003C7C-00003DD4 .text setCollisionB__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::setCollisionB() {
|
|
MtxP pMtx = mpMorf->getModel()->getAnmMtx(m_bag_jnt_num);
|
|
|
|
cXyz temp;
|
|
mDoMtx_multVecZero(pMtx, &temp);
|
|
s16 angle;
|
|
dNpc_calc_DisXZ_AngY(current.pos, temp, NULL, &angle);
|
|
|
|
temp.x += l_npc_dat[mNpcNo].field_0x34 * cM_ssin(angle);
|
|
temp.y = current.pos.y;
|
|
temp.z += l_npc_dat[mNpcNo].field_0x34 * cM_scos(angle);
|
|
|
|
mCyl2.SetC(temp);
|
|
mCyl2.SetR(l_npc_dat[mNpcNo].field_0x30);
|
|
mCyl2.SetH(200.0f);
|
|
dComIfG_Ccsp()->Set(&mCyl2);
|
|
}
|
|
|
|
/* 00003DD4-00003F08 .text setCollisionH__12daNpcRoten_cFv */
|
|
void daNpcRoten_c::setCollisionH() {
|
|
cMtx_copy(mpMorf->getModel()->getAnmMtx(m_jnt.getHeadJntNum()), *calc_mtx);
|
|
mDoMtx_stack_c::transS(l_npc_dat[mNpcNo].field_0x3C, 0.0f, 0.0f);
|
|
cMtx_concat(*calc_mtx, mDoMtx_stack_c::get(), *calc_mtx);
|
|
|
|
cXyz temp;
|
|
mDoMtx_multVecZero(*calc_mtx, &temp);
|
|
|
|
mSph.SetC(temp);
|
|
mSph.SetR(l_npc_dat[mNpcNo].field_0x38);
|
|
dComIfG_Ccsp()->Set(&mSph);
|
|
if(field_0x9CA == 0 && mSph.ChkTgHit()) {
|
|
executeSetMode(4);
|
|
field_0x9CA = 1;
|
|
}
|
|
}
|
|
|
|
/* 00003F08-00003F28 .text daNpc_RotenCreate__FPv */
|
|
static s32 daNpc_RotenCreate(void* i_this) {
|
|
return static_cast<daNpcRoten_c*>(i_this)->_create();
|
|
}
|
|
|
|
/* 00003F28-00003F4C .text daNpc_RotenDelete__FPv */
|
|
static BOOL daNpc_RotenDelete(void* i_this) {
|
|
return static_cast<daNpcRoten_c*>(i_this)->_delete();
|
|
}
|
|
|
|
/* 00003F4C-00003F70 .text daNpc_RotenExecute__FPv */
|
|
static BOOL daNpc_RotenExecute(void* i_this) {
|
|
return static_cast<daNpcRoten_c*>(i_this)->_execute();
|
|
}
|
|
|
|
/* 00003F70-00003F94 .text daNpc_RotenDraw__FPv */
|
|
static BOOL daNpc_RotenDraw(void* i_this) {
|
|
return static_cast<daNpcRoten_c*>(i_this)->_draw();
|
|
}
|
|
|
|
/* 00003F94-00003F9C .text daNpc_RotenIsDelete__FPv */
|
|
static BOOL daNpc_RotenIsDelete(void*) {
|
|
return true;
|
|
}
|
|
|
|
static actor_method_class daNpc_RotenMethodTable = {
|
|
(process_method_func)daNpc_RotenCreate,
|
|
(process_method_func)daNpc_RotenDelete,
|
|
(process_method_func)daNpc_RotenExecute,
|
|
(process_method_func)daNpc_RotenIsDelete,
|
|
(process_method_func)daNpc_RotenDraw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_NPC_ROTEN = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_NPC_ROTEN,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daNpcRoten_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ 0x017A,
|
|
/* Actor SubMtd */ &daNpc_RotenMethodTable,
|
|
/* Status */ 0x07 | fopAcStts_SHOWMAP_e | fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|