mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-18 05:08:57 -04:00
d61a31e7ab
Co-authored-by: < >
1204 lines
36 KiB
C++
1204 lines
36 KiB
C++
/**
|
|
* d_a_obj_figure.cpp
|
|
* Object - Nintendo Gallery figurines + stand
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_obj_figure.h"
|
|
#include "res/Object/Figure.h"
|
|
#include "res/Object/Figure1.h"
|
|
#include "res/Object/Figure2.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_com_lib_game.h"
|
|
#include "d/d_snap.h"
|
|
#include "d/d_camera.h"
|
|
#include "d/d_a_obj.h"
|
|
#include "d/actor/d_a_player_main.h"
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
|
|
#define TOTAL_FIGURE_COUNT 0x86
|
|
|
|
static const char* l_arcname_tbl[] = {
|
|
"Figure",
|
|
"Figure2",
|
|
"Figure1",
|
|
"Figure0",
|
|
"Figure6",
|
|
"Figure5",
|
|
"Figure3",
|
|
"Figure4",
|
|
#if VERSION > VERSION_DEMO
|
|
"Figure2a",
|
|
"Figure2b",
|
|
"Figure6a",
|
|
"Figure6b",
|
|
"Figure6c",
|
|
#endif
|
|
};
|
|
|
|
static u16 l_figure_comp[] = {
|
|
dSv_event_flag_c::UNK_95FF,
|
|
dSv_event_flag_c::UNK_94FF,
|
|
dSv_event_flag_c::UNK_93FF,
|
|
dSv_event_flag_c::UNK_92FF,
|
|
dSv_event_flag_c::UNK_91FF,
|
|
dSv_event_flag_c::UNK_90FF,
|
|
dSv_event_flag_c::UNK_8FFF,
|
|
dSv_event_flag_c::UNK_8EFF,
|
|
dSv_event_flag_c::UNK_8DFF,
|
|
dSv_event_flag_c::UNK_8CFF,
|
|
dSv_event_flag_c::UNK_B1FF,
|
|
dSv_event_flag_c::UNK_9CFF,
|
|
dSv_event_flag_c::UNK_84FF,
|
|
dSv_event_flag_c::UNK_83FF,
|
|
dSv_event_flag_c::UNK_82FF,
|
|
dSv_event_flag_c::UNK_81FF,
|
|
dSv_event_flag_c::UNK_80FF,
|
|
};
|
|
|
|
static dCcD_SrcCyl l_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 60.0f,
|
|
/* Height */ 150.0f,
|
|
}},
|
|
};
|
|
|
|
struct FigureData {
|
|
/* 0x00 */ int mBmdId;
|
|
/* 0x04 */ int mModelAttr;
|
|
#if VERSION > VERSION_DEMO
|
|
/* 0x08 */ int mRoomId;
|
|
#endif
|
|
}; // Size: 0x0C
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
#define FIGUREDAT(bmdId, dlistFlags, roomId) \
|
|
{ \
|
|
bmdId, dlistFlags \
|
|
}
|
|
#else
|
|
#define FIGUREDAT(bmdId, dlistFlags, roomId) \
|
|
{ \
|
|
bmdId, dlistFlags, roomId \
|
|
}
|
|
#endif
|
|
|
|
// TODO: use enums for bmdId
|
|
static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = {
|
|
FIGUREDAT(0x00, 0x37441422, -1), // 0x00
|
|
FIGUREDAT(0x01, 0x37441422, -1), // 0x01
|
|
FIGUREDAT(0x02, 0x37441422, -1), // 0x02
|
|
FIGUREDAT(0x03, 0x37441422, -1), // 0x03
|
|
FIGUREDAT(0x0A, 0x37441422, -1), // 0x04
|
|
FIGUREDAT(0x04, 0x37441422, -1), // 0x05
|
|
FIGUREDAT(0x05, 0x37441422, -1), // 0x06
|
|
FIGUREDAT(0x06, 0x37441422, -1), // 0x07
|
|
FIGUREDAT(0x07, 0x37441422, -1), // 0x08
|
|
FIGUREDAT(0x08, 0x37441422, -1), // 0x09
|
|
FIGUREDAT(0x09, 0x11001222, -1), // 0x0A
|
|
FIGUREDAT(0x0B, 0x37441422, -1), // 0x0B
|
|
FIGUREDAT(0x0C, 0x37441422, -1), // 0x0C
|
|
FIGUREDAT(0x0D, 0x37441422, -1), // 0x0D
|
|
FIGUREDAT(0x00, 0x37441422, -1), // 0x0E
|
|
FIGUREDAT(0x01, 0x37441422, -1), // 0x0F
|
|
FIGUREDAT(0x02, 0x37441422, -1), // 0x10
|
|
FIGUREDAT(0x04, 0x37441422, -1), // 0x11
|
|
FIGUREDAT(0x05, 0x37441422, -1), // 0x12
|
|
FIGUREDAT(0x07, 0x37441422, -1), // 0x13
|
|
FIGUREDAT(0x08, 0x37441422, -1), // 0x14
|
|
FIGUREDAT(0x09, 0x37441422, -1), // 0x15
|
|
FIGUREDAT(0x0A, 0x37441422, -1), // 0x16
|
|
FIGUREDAT(0x0B, 0x37441422, -1), // 0x17
|
|
FIGUREDAT(0x0C, 0x37441422, -1), // 0x18
|
|
FIGUREDAT(0x0D, 0x37441422, -1), // 0x19
|
|
FIGUREDAT(0x0E, 0x37441422, -1), // 0x1A
|
|
FIGUREDAT(0x0F, 0x37441422, -1), // 0x1B
|
|
FIGUREDAT(0x10, 0x37441422, -1), // 0x1C
|
|
FIGUREDAT(0x11, 0x37441422, -1), // 0x1D
|
|
FIGUREDAT(0x12, 0x37441422, -1), // 0x1E
|
|
FIGUREDAT(0x13, 0x37441422, -1), // 0x1F
|
|
FIGUREDAT(0x14, 0x37441422, -1), // 0x20
|
|
FIGUREDAT(0x15, 0x37441422, -1), // 0x21
|
|
FIGUREDAT(0x16, 0x37441422, -1), // 0x22
|
|
FIGUREDAT(0x17, 0x37441422, -1), // 0x23
|
|
FIGUREDAT(0x18, 0x37441422, -1), // 0x24
|
|
FIGUREDAT(0x19, 0x37441422, -1), // 0x25
|
|
FIGUREDAT(0x1A, 0x37441422, -1), // 0x26
|
|
FIGUREDAT(0x1B, 0x37441422, -1), // 0x27
|
|
FIGUREDAT(0x1C, 0x37441422, -1), // 0x28
|
|
#if VERSION > VERSION_DEMO
|
|
FIGUREDAT(0x00, 0x37441422, 8), // 0x29 (Retail)
|
|
#endif
|
|
FIGUREDAT(0x01, 0x37441422, 8), // 0x29 (Demo) | 0x2A (Retail)
|
|
FIGUREDAT(0x02, 0x37441422, 8), // 0x2A (Demo) | 0x2B (Retail)
|
|
FIGUREDAT(0x03, 0x37441422, 8), // 0x2B (Demo) | 0x2C (Retail)
|
|
FIGUREDAT(0x04, 0x37441422, 8), // 0x2C (Demo) | 0x2D (Retail)
|
|
FIGUREDAT(0x05, 0x37441422, 8), // 0x2D (Demo) | 0x2E (Retail)
|
|
FIGUREDAT(0x06, 0x37441422, 8), // 0x2E (Demo) | 0x2F (Retail)
|
|
FIGUREDAT(0x07, 0x37441422, 8), // 0x2F (Demo) | 0x30 (Retail)
|
|
FIGUREDAT(0x08, 0x37441422, 8), // 0x30 (Demo) | 0x31 (Retail)
|
|
FIGUREDAT(0x09, 0x37441422, 8), // 0x31 (Demo) | 0x32 (Retail)
|
|
FIGUREDAT(0x0A, 0x37441422, 8), // 0x32 (Demo) | 0x33 (Retail)
|
|
FIGUREDAT(0x0B, 0x37441422, 8), // 0x33 (Demo) | 0x34 (Retail)
|
|
FIGUREDAT(0x0C, 0x37441422, 8), // 0x34 (Demo) | 0x35 (Retail)
|
|
#if VERSION == VERSION_DEMO
|
|
FIGUREDAT(0x17, 0x37441422, -1), // 0x35 (Demo)
|
|
#endif
|
|
FIGUREDAT(0x0D, 0x37441422, 8), // 0x36
|
|
FIGUREDAT(0x0E, 0x37441422, 8), // 0x37
|
|
#if VERSION == VERSION_DEMO
|
|
FIGUREDAT(0x18, 0x37441422, -1), // 0x38 (Demo)
|
|
FIGUREDAT(0x0F, 0x37441422, -1), // 0x39 (Demo)
|
|
FIGUREDAT(0x10, 0x37441422, -1), // 0x3A (Demo)
|
|
FIGUREDAT(0x11, 0x37441422, -1), // 0x3B (Demo)
|
|
FIGUREDAT(0x12, 0x37441422, -1), // 0x3C (Demo)
|
|
FIGUREDAT(0x19, 0x37441422, -1), // 0x3D (Demo)
|
|
FIGUREDAT(0x13, 0x37441422, -1), // 0x3E (Demo)
|
|
FIGUREDAT(0x14, 0x37441422, -1), // 0x3F (Demo)
|
|
FIGUREDAT(0x16, 0x37441422, -1), // 0x40 (Demo)
|
|
#else
|
|
FIGUREDAT(0x0F, 0x37441422, 8), // 0x38 (Retail)
|
|
FIGUREDAT(0x10, 0x37441422, 8), // 0x39 (Retail)
|
|
FIGUREDAT(0x11, 0x37441422, 8), // 0x3A (Retail)
|
|
FIGUREDAT(0x12, 0x37441422, 8), // 0x3B (Retail)
|
|
FIGUREDAT(0x13, 0x37441422, 8), // 0x3C (Retail)
|
|
FIGUREDAT(0x06, 0x37441422, 9), // 0x3D (Retail)
|
|
FIGUREDAT(0x01, 0x37441422, 9), // 0x3E (Retail)
|
|
FIGUREDAT(0x02, 0x37441422, 9), // 0x3F (Retail)
|
|
FIGUREDAT(0x05, 0x37441422, 9), // 0x40 (Retail)
|
|
#endif
|
|
FIGUREDAT(0x00, 0x11001222, -1), // 0x41
|
|
FIGUREDAT(0x01, 0x37441422, -1), // 0x42
|
|
FIGUREDAT(0x02, 0x37441422, -1), // 0x43
|
|
FIGUREDAT(0x03, 0x37441422, -1), // 0x44
|
|
FIGUREDAT(0x04, 0x37441422, -1), // 0x45
|
|
FIGUREDAT(0x05, 0x37441422, -1), // 0x46
|
|
FIGUREDAT(0x06, 0x37441422, -1), // 0x47
|
|
FIGUREDAT(0x07, 0x37441422, -1), // 0x48
|
|
FIGUREDAT(0x08, 0x37441422, -1), // 0x49
|
|
FIGUREDAT(0x09, 0x37441422, -1), // 0x4A
|
|
FIGUREDAT(0x0A, 0x37441422, -1), // 0x4B
|
|
FIGUREDAT(0x0B, 0x37441422, -1), // 0x4C
|
|
FIGUREDAT(0x0C, 0x37441422, -1), // 0x4D
|
|
FIGUREDAT(0x0D, 0x37441422, -1), // 0x4E
|
|
FIGUREDAT(0x0E, 0x37441422, -1), // 0x4F
|
|
FIGUREDAT(0x0F, 0x37441422, -1), // 0x50
|
|
FIGUREDAT(0x10, 0x37441422, -1), // 0x51
|
|
FIGUREDAT(0x11, 0x11001222, -1), // 0x52
|
|
FIGUREDAT(0x00, 0x37441422, -1), // 0x53
|
|
FIGUREDAT(0x05, 0x37441422, -1), // 0x54
|
|
FIGUREDAT(0x06, 0x37441422, -1), // 0x55
|
|
FIGUREDAT(0x07, 0x37441422, -1), // 0x56
|
|
FIGUREDAT(0x08, 0x37441422, -1), // 0x57
|
|
FIGUREDAT(0x09, 0x37441422, -1), // 0x58
|
|
FIGUREDAT(0x0A, 0x37441422, -1), // 0x59
|
|
FIGUREDAT(0x0B, 0x37441422, -1), // 0x5A
|
|
FIGUREDAT(0x0C, 0x37441422, -1), // 0x5B
|
|
FIGUREDAT(0x0D, 0x37441422, -1), // 0x5C
|
|
FIGUREDAT(0x01, 0x37441422, -1), // 0x5D
|
|
FIGUREDAT(0x02, 0x37441422, -1), // 0x5E
|
|
FIGUREDAT(0x03, 0x37441422, -1), // 0x5F
|
|
FIGUREDAT(0x04, 0x37441422, -1), // 0x60
|
|
FIGUREDAT(0x00, 0x37441422, -1), // 0x61
|
|
FIGUREDAT(0x01, 0x37441422, -1), // 0x62
|
|
FIGUREDAT(0x02, 0x37441422, -1), // 0x63
|
|
FIGUREDAT(0x03, 0x37441422, -1), // 0x64
|
|
FIGUREDAT(0x04, 0x37441422, -1), // 0x65
|
|
FIGUREDAT(0x05, 0x37441422, -1), // 0x66
|
|
FIGUREDAT(0x06, 0x37441422, -1), // 0x67
|
|
FIGUREDAT(0x07, 0x37441422, -1), // 0x68
|
|
FIGUREDAT(0x08, 0x37441422, -1), // 0x69
|
|
FIGUREDAT(0x09, 0x37441422, -1), // 0x6A
|
|
FIGUREDAT(0x12, 0x37441422, -1), // 0x6B
|
|
FIGUREDAT(0x0A, 0x11001222, -1), // 0x6C
|
|
FIGUREDAT(0x0B, 0x11001222, -1), // 0x6D
|
|
FIGUREDAT(0x0C, 0x11001222, -1), // 0x6E
|
|
FIGUREDAT(0x0D, 0x37441422, -1), // 0x6F
|
|
FIGUREDAT(0x0E, 0x37441422, -1), // 0x70
|
|
FIGUREDAT(0x0F, 0x37441422, -1), // 0x71
|
|
FIGUREDAT(0x10, 0x37441422, -1), // 0x72
|
|
FIGUREDAT(0x11, 0x37441422, -1), // 0x73
|
|
FIGUREDAT(0x00, 0x37441422, 0xA), // 0x74
|
|
#if VERSION == VERSION_DEMO
|
|
FIGUREDAT(0x10, 0x37441422, -1), // 0x75 (Demo)
|
|
#else
|
|
FIGUREDAT(0x01, 0x37441422, 0xA), // 0x75 (Retail)
|
|
#endif
|
|
FIGUREDAT(0x02, 0x11001222, 0xA), // 0x76
|
|
FIGUREDAT(0x03, 0x11001222, 0xA), // 0x77
|
|
FIGUREDAT(0x04, 0x11001222, 0xA), // 0x78
|
|
FIGUREDAT(0x05, 0x37441422, 0xA), // 0x79
|
|
FIGUREDAT(0x06, 0x37441422, 0xA), // 0x7A
|
|
FIGUREDAT(0x07, 0x37441422, 0xA), // 0x7B
|
|
#if VERSION == VERSION_DEMO
|
|
FIGUREDAT(0x08, 0x37441422, -1), // 0x7C (Demo)
|
|
FIGUREDAT(0x09, 0x11001222, -1), // 0x7D (Demo)
|
|
FIGUREDAT(0x01, 0x11001222, -1), // 0x7E (Demo)
|
|
FIGUREDAT(0x0A, 0x37441422, -1), // 0x7F (Demo)
|
|
FIGUREDAT(0x0B, 0x37441422, -1), // 0x80 (Demo)
|
|
FIGUREDAT(0x0C, 0x11001222, -1), // 0x81 (Demo)
|
|
FIGUREDAT(0x0D, 0x37441422, -1), // 0x82 (Demo)
|
|
FIGUREDAT(0x0E, 0x11001222, -1), // 0x83 (Demo)
|
|
FIGUREDAT(0x11, 0x11001222, -1), // 0x84 (Demo)
|
|
FIGUREDAT(0x0F, 0x37441422, -1), // 0x85 (Demo)
|
|
#else
|
|
FIGUREDAT(0x00, 0x37441422, 0xB), // 0x7C (Retail)
|
|
FIGUREDAT(0x01, 0x11001222, 0xB), // 0x7D (Retail)
|
|
FIGUREDAT(0x02, 0x11001222, 0xB), // 0x7E (Retail)
|
|
FIGUREDAT(0x03, 0x37441422, 0xB), // 0x7F (Retail)
|
|
FIGUREDAT(0x04, 0x37441422, 0xB), // 0x80 (Retail)
|
|
FIGUREDAT(0x00, 0x11001222, 0xC), // 0x81 (Retail)
|
|
FIGUREDAT(0x01, 0x37441422, 0xC), // 0x82 (Retail)
|
|
FIGUREDAT(0x02, 0x11001222, 0xC), // 0x83 (Retail)
|
|
FIGUREDAT(0x03, 0x11001222, 0xC), // 0x84 (Retail)
|
|
FIGUREDAT(0x04, 0x37441422, 0xC), // 0x85 (Retail)
|
|
#endif
|
|
};
|
|
|
|
struct FigureCheckTbl {
|
|
/* 0x00 */ f32 field_0x00;
|
|
/* 0x04 */ f32 field_0x04;
|
|
/* 0x08 */ f32 field_0x08;
|
|
/* 0x0C */ f32 field_0x0C;
|
|
/* 0x10 */ f32 field_0x10;
|
|
/* 0x14 */ f32 field_0x14;
|
|
/* 0x18 */ f32 field_0x18;
|
|
/* 0x1C */ f32 field_0x1C;
|
|
/* 0x20 */ f32 field_0x20;
|
|
/* 0x24 */ f32 field_0x24;
|
|
/* 0x28 */ s16 field_0x28;
|
|
/* 0x2A */ s16 field_0x2A;
|
|
/* 0x2C */ s16 field_0x2C;
|
|
/* 0x2E */ s16 field_0x2E;
|
|
/* 0x30 */ s16 field_0x30;
|
|
/* 0x32 */ s16 field_0x32;
|
|
}; // Size: 0x34
|
|
|
|
static const FigureCheckTbl l_figure_check_tbl[] = {
|
|
{
|
|
200.0f,
|
|
5.0f,
|
|
118.0f,
|
|
80.0f,
|
|
150.0f,
|
|
30.0f,
|
|
50.0f,
|
|
2.0f,
|
|
20.0f,
|
|
60.0f,
|
|
0x0000,
|
|
0x0200,
|
|
0x0200,
|
|
0xE3E0,
|
|
0x0FA0,
|
|
0x0000,
|
|
},
|
|
{
|
|
200.0f,
|
|
5.0f,
|
|
118.0f,
|
|
80.0f,
|
|
150.0f,
|
|
30.0f,
|
|
50.0f,
|
|
2.0f,
|
|
20.0f,
|
|
60.0f,
|
|
0x0000,
|
|
0x0200,
|
|
0x0200,
|
|
0xE3E0,
|
|
0x0FA0,
|
|
0x0000,
|
|
},
|
|
{
|
|
200.0f,
|
|
5.0f,
|
|
150.0f,
|
|
80.0f,
|
|
200.0f,
|
|
30.0f,
|
|
50.0f,
|
|
2.0f,
|
|
20.0f,
|
|
60.0f,
|
|
0x0000,
|
|
0x0200,
|
|
0x0200,
|
|
0xE3E0,
|
|
0x0FA0,
|
|
0x0000,
|
|
},
|
|
{
|
|
200.0f,
|
|
5.0f,
|
|
150.0f,
|
|
80.0f,
|
|
200.0f,
|
|
30.0f,
|
|
50.0f,
|
|
2.0f,
|
|
20.0f,
|
|
60.0f,
|
|
0x0000,
|
|
0x0200,
|
|
0x0200,
|
|
0xE3E0,
|
|
0x0FA0,
|
|
0x0000,
|
|
},
|
|
};
|
|
|
|
/* 000000EC-0000032C .text __ct__13daObjFigure_cFv */
|
|
daObjFigure_c::daObjFigure_c() {
|
|
mFigureNo = getPrmFigureNo();
|
|
if(mFigureNo == 0xFF) {
|
|
mFigureNo = 0;
|
|
}
|
|
if(mFigureNo >= TOTAL_FIGURE_COUNT) {
|
|
mFigureNo = 0;
|
|
}
|
|
|
|
m734 = current.angle.y;
|
|
mbDisplay = isFigureGet(mFigureNo);
|
|
m732 = 0;
|
|
m734 = 0;
|
|
m736 = current.angle.y;
|
|
m73C = 0;
|
|
}
|
|
|
|
/* 00000588-000005A8 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return static_cast<daObjFigure_c*>(i_this)->createHeap();
|
|
}
|
|
|
|
/* 000005A8-00000624 .text phase_1__FP13daObjFigure_c */
|
|
static cPhs_State phase_1(daObjFigure_c* i_this) {
|
|
fopAcM_ct(i_this, daObjFigure_c)
|
|
i_this->setResFlag(0x1);
|
|
|
|
cPhs_State status = dComIfG_resLoad(i_this->getPhase1P(), "Figure");
|
|
if(status != cPhs_ERROR_e && status == cPhs_COMPLEATE_e) {
|
|
return cPhs_NEXT_e;
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
/* 00000624-000006F0 .text phase_2__FP13daObjFigure_c */
|
|
static cPhs_State phase_2(daObjFigure_c* i_this) {
|
|
i_this->setResFlag(0x2);
|
|
u8 figureNo = i_this->getFigureNo();
|
|
int id = dSnap_GetFigRoomId(figureNo);
|
|
#if VERSION > VERSION_DEMO
|
|
if(l_figure_dat_tbl[figureNo].mRoomId >= 0) {
|
|
id = l_figure_dat_tbl[figureNo].mRoomId;
|
|
}
|
|
#endif
|
|
|
|
cPhs_State status = dComIfG_resLoad(i_this->getPhase2P(), l_arcname_tbl[id]);
|
|
|
|
if(status == cPhs_COMPLEATE_e) {
|
|
#if VERSION == VERSION_DEMO
|
|
if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, 0))
|
|
#else
|
|
if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, figureNo == 0x40 ? 0x25000 : 0xCD90))
|
|
#endif
|
|
{
|
|
return i_this->createInit();
|
|
}
|
|
else {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
/* 000006F0-00000720 .text _create__13daObjFigure_cFv */
|
|
cPhs_State daObjFigure_c::_create() {
|
|
static cPhs__Handler l_method[] = {
|
|
(cPhs__Handler)&phase_1,
|
|
(cPhs__Handler)&phase_2,
|
|
NULL,
|
|
};
|
|
|
|
return dComLbG_PhaseHandler(&mPhsLoad, l_method, this);
|
|
}
|
|
|
|
/* 00000720-00000A90 .text createHeap__13daObjFigure_cFv */
|
|
BOOL daObjFigure_c::createHeap() {
|
|
int roomId = dSnap_GetFigRoomId(getFigureNo());
|
|
#if VERSION > VERSION_DEMO
|
|
if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) {
|
|
roomId = l_figure_dat_tbl[getFigureNo()].mRoomId;
|
|
}
|
|
#endif
|
|
|
|
J3DModelData* pModelData;
|
|
const char* arcname = l_arcname_tbl[roomId];
|
|
pModelData = (J3DModelData*)(dComIfG_getObjectIDRes(DEMO_SELECT(l_arcname_tbl[roomId], arcname), getFigureBmd(mFigureNo)));
|
|
if(pModelData == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, l_figure_dat_tbl[mFigureNo].mModelAttr);
|
|
if(mpModel == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if(mFigureNo == 0x3D) {
|
|
J3DAnmTevRegKey* pBrkData = static_cast<J3DAnmTevRegKey*>(dComIfG_getObjectIDRes(DEMO_SELECT(l_arcname_tbl[roomId], arcname), dRes_ID_FIGURE2_BDL_VF_047_e));
|
|
if(pBrkData == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mpBrkAnm = new mDoExt_brkAnm;
|
|
if(mpBrkAnm == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if(!mpBrkAnm->init(pModelData, pBrkData, true, J3DFrameCtrl::EMode_LOOP)) {
|
|
return false;
|
|
}
|
|
}
|
|
J3DModelData* pPedestalData;
|
|
if(mFigureNo == 0x40) {
|
|
pPedestalData = (J3DModelData*)dComIfG_getObjectIDRes(DEMO_SELECT(l_arcname_tbl[roomId], arcname), dRes_ID_FIGURE2_BDL_VF_044_e);
|
|
mpMorf = new mDoExt_McaMorf(
|
|
pPedestalData,
|
|
NULL, NULL,
|
|
(J3DAnmTransformKey*)dComIfG_getObjectIDRes(DEMO_SELECT(l_arcname_tbl[roomId], arcname), dRes_ID_FIGURE2_BCK_VF_064L_e),
|
|
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
|
|
NULL,
|
|
0x80000,
|
|
#if VERSION == VERSION_DEMO
|
|
0x11000022
|
|
#else
|
|
0x11001222
|
|
#endif
|
|
);
|
|
|
|
if(mpMorf == NULL || mpMorf->getModel() == NULL) {
|
|
return false;
|
|
}
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
J3DSkinDeform* pDeform = new J3DSkinDeform;
|
|
if(pDeform == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if(mpMorf->getModel()->setSkinDeform(pDeform, 1) != J3DErrType_Success) {
|
|
return false;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
pPedestalData = static_cast<J3DModelData*>(dComIfG_getObjectIDRes("Figure", dRes_ID_FIGURE_BDL_VF_BS_e));
|
|
if(pPedestalData == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mpPedestalModel = mDoExt_J3DModel__create(pPedestalData, 0x80000, 0x11020022);
|
|
if(mpPedestalModel == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mpPedestalBtp = static_cast<J3DAnmTexPattern*>(dComIfG_getObjectIDRes("Figure", dRes_ID_FIGURE_BTP_VF_BS_e));
|
|
if(mpPedestalBtp == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if(!mBtpAnm1.init(pPedestalData, mpPedestalBtp, TRUE, J3DFrameCtrl::EMode_LOOP)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00000A90-00000BF4 .text createInit__13daObjFigure_cFv */
|
|
cPhs_State daObjFigure_c::createInit() {
|
|
mStts.Init(0xFF, 0xFF, this);
|
|
mCyl1.Set(l_cyl_src);
|
|
mCyl1.SetStts(&mStts);
|
|
mCyl2.Set(l_cyl_src);
|
|
mCyl2.SetStts(&mStts);
|
|
mCyl2.SetCoSPrm(0x129);
|
|
mCyl2.SetR(200.0f);
|
|
mCyl2.SetH(100.0f);
|
|
fopAcM_SetMtx(this, mpPedestalModel->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 50.0f, 200.0f, 50.0f);
|
|
mFigureCheckEvtIdx = dComIfGp_evmng_getEventIdx("FIGURE_CHECK");
|
|
mEventCut.setActorInfo("Figure", this);
|
|
eventInfo.setEventId(mFigureCheckEvtIdx);
|
|
attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xA8;
|
|
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xA8;
|
|
attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e | fopAc_Attn_TALKFLAG_CHECK_e;
|
|
shape_angle = current.angle;
|
|
dKy_tevstr_init(&mTevStrBG2, fopAcM_GetHomeRoomNo(this), 0xFF);
|
|
cMtx_copy(cMtx_getIdentity(), mMtx);
|
|
setMtx();
|
|
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
BOOL daObjFigure_c::_delete() {
|
|
if (mLoadFlags & 1) {
|
|
dComIfG_resDeleteDemo(getPhase1P(), "Figure");
|
|
}
|
|
|
|
if (mLoadFlags & 2) {
|
|
int id = dSnap_GetFigRoomId(getFigureNo());
|
|
dComIfG_resDeleteDemo(getPhase2P(), l_arcname_tbl[id]);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
#else
|
|
/* 00000BF4-00000C78 .text _delete__13daObjFigure_cFv */
|
|
BOOL daObjFigure_c::_delete() {
|
|
dComIfG_resDeleteDemo(getPhase1P(), "Figure");
|
|
|
|
int id = dSnap_GetFigRoomId(getFigureNo());
|
|
if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) {
|
|
id = l_figure_dat_tbl[getFigureNo()].mRoomId;
|
|
}
|
|
|
|
dComIfG_resDelete(getPhase2P(), l_arcname_tbl[id]);
|
|
|
|
return true;
|
|
}
|
|
#endif
|
|
|
|
void linkDraw(mDoExt_McaMorf*);
|
|
|
|
/* 00000C78-00000DE8 .text _draw__13daObjFigure_cFv */
|
|
BOOL daObjFigure_c::_draw() {
|
|
g_env_light.settingTevStruct(TEV_TYPE_BG2, ¤t.pos, &mTevStrBG2);
|
|
g_env_light.setLightTevColorType(mpModel, &mTevStrBG2);
|
|
#if VERSION == VERSION_DEMO
|
|
if(mpMorf) {
|
|
g_env_light.setLightTevColorType(mpMorf->getModel(), &mTevStrBG2);
|
|
}
|
|
#endif
|
|
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(mpPedestalModel, &tevStr);
|
|
|
|
J3DModelData* pModelData = mpPedestalModel->getModelData();
|
|
if(mbDisplay) {
|
|
if(mpBrkAnm) {
|
|
J3DModelData* pModelData2 = mpModel->getModelData();
|
|
mpBrkAnm->entry(pModelData2);
|
|
}
|
|
|
|
mBtpAnm1.entry(pModelData, 1);
|
|
mDoExt_modelUpdateDL(mpPedestalModel);
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
mBtpAnm1.remove(pModelData);
|
|
|
|
if(mpBrkAnm) {
|
|
mpBrkAnm->remove(mpModel->getModelData());
|
|
}
|
|
|
|
if(mpMorf) {
|
|
#if VERSION > VERSION_DEMO
|
|
g_env_light.setLightTevColorType(mpMorf->getModel(), &mTevStrBG2);
|
|
#endif
|
|
linkDraw(mpMorf);
|
|
}
|
|
}
|
|
else {
|
|
if(mFigureNo != 0x40 && mFigureNo != 0x32) {
|
|
mBtpAnm1.entry(pModelData, 0);
|
|
mDoExt_modelUpdateDL(mpPedestalModel);
|
|
mBtpAnm1.remove(pModelData);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
typedef void(daObjFigure_c::*ProcFunc_t)();
|
|
static const ProcFunc_t moveProc[] = {
|
|
&daObjFigure_c::executeNormal,
|
|
};
|
|
|
|
/* 00000DE8-00000F10 .text _execute__13daObjFigure_cFv */
|
|
BOOL daObjFigure_c::_execute() {
|
|
if(!dComIfGp_event_runCheck()) {
|
|
(this->*moveProc[m73C])();
|
|
}
|
|
else {
|
|
eventMove();
|
|
}
|
|
|
|
if(mbDisplay || (getFigureNo() != 0x40 && getFigureNo() != 0x32)) {
|
|
mCyl1.SetC(current.pos);
|
|
mCyl2.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&mCyl1);
|
|
dComIfG_Ccsp()->Set(&mCyl2);
|
|
}
|
|
|
|
attention_info.position.set(current.pos.x, current.pos.y + 200.0f, current.pos.z);
|
|
eyePos.set(current.pos.x, current.pos.y + 150.0f, current.pos.z);
|
|
|
|
if(mpBrkAnm) {
|
|
mpBrkAnm->play();
|
|
}
|
|
|
|
setMtx();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 00000F10-00000FD4 .text executeNormal__13daObjFigure_cFv */
|
|
void daObjFigure_c::executeNormal() {
|
|
if(mbDisplay) {
|
|
fopAc_ac_c* pLink = dComIfGp_getLinkPlayer();
|
|
|
|
f32 f31 = 150.0f;
|
|
int r31 = 13000;
|
|
f32 temp1;
|
|
s16 temp2;
|
|
dNpc_calc_DisXZ_AngY(current.pos, pLink->current.pos, &temp1, &temp2);
|
|
temp2 -= current.angle.y;
|
|
|
|
if(f31 > temp1 && r31 > abs(temp2)) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000FD4-00001060 .text eventMove__13daObjFigure_cFv */
|
|
void daObjFigure_c::eventMove() {
|
|
if(dComIfGp_evmng_endCheck(mFigureCheckEvtIdx)) {
|
|
dComIfGp_event_reset();
|
|
}
|
|
else {
|
|
bool attn = mEventCut.getAttnFlag();
|
|
if (mEventCut.cutProc()) {
|
|
if (!mEventCut.getAttnFlag()) {
|
|
mEventCut.setAttnFlag(attn);
|
|
}
|
|
} else {
|
|
privateCut();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001060-0000119C .text privateCut__13daObjFigure_cFv */
|
|
void daObjFigure_c::privateCut() {
|
|
static char* cut_name_tbl[] = {
|
|
"MES_SET",
|
|
"ON_PLR",
|
|
"OFF_PLR",
|
|
};
|
|
|
|
int staffIdx = dComIfGp_evmng_getMyStaffId("Figure");
|
|
if(staffIdx != -1) {
|
|
m741 = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0);
|
|
if(m741 == -1) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
else {
|
|
if(dComIfGp_evmng_getIsAddvance(staffIdx)) {
|
|
switch(m741) {
|
|
case 0:
|
|
eventMesSetInit(staffIdx);
|
|
break;
|
|
case 1:
|
|
eventOnPlrInit();
|
|
break;
|
|
case 2:
|
|
eventOffPlrInit();
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool end;
|
|
switch(m741) {
|
|
case 0:
|
|
end = eventMesSet();
|
|
break;
|
|
default:
|
|
end = true;
|
|
break;
|
|
}
|
|
|
|
if(end) {
|
|
dComIfGp_evmng_cutEnd(staffIdx);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 0000119C-00001294 .text eventMesSetInit__13daObjFigure_cFi */
|
|
void daObjFigure_c::eventMesSetInit(int staffIdx) {
|
|
int* pMsgNo = dComIfGp_evmng_getMyIntegerP(staffIdx, "MsgNo");
|
|
if(pMsgNo) {
|
|
m72C = NULL;
|
|
switch(*pMsgNo) {
|
|
case 0:
|
|
setMessage(getMsg());
|
|
break;
|
|
case 1:
|
|
break;
|
|
default:
|
|
setMessage(*pMsgNo);
|
|
break;
|
|
}
|
|
|
|
if(m72C) {
|
|
setMessage(*m72C);
|
|
}
|
|
}
|
|
else {
|
|
m72C++;
|
|
setMessage(*m72C);
|
|
}
|
|
|
|
m724 = l_figure_check_tbl[0].field_0x18;
|
|
m728 = l_figure_check_tbl[0].field_0x08;
|
|
m738 = 0;
|
|
m73F = 0;
|
|
m73A = 10;
|
|
}
|
|
|
|
/* 00001294-00001600 .text eventMesSet__13daObjFigure_cFv */
|
|
bool daObjFigure_c::eventMesSet() {
|
|
switch(m73F) {
|
|
case 0: {
|
|
if(m73A != 0) {
|
|
m73A--;
|
|
}
|
|
else {
|
|
dComIfGp_setDoStatusForce(dActStts_INFO_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
if(g_mDoCPd_cpadInfo[0].mMainStickPosX || g_mDoCPd_cpadInfo[0].mMainStickPosY || g_mDoCPd_cpadInfo[0].mCStickPosY) {
|
|
m738 = l_figure_check_tbl[0].field_0x32;
|
|
m734 += (s16)(g_mDoCPd_cpadInfo[0].mMainStickPosX * l_figure_check_tbl[0].field_0x2C);
|
|
m728 += (s16)(g_mDoCPd_cpadInfo[0].mMainStickPosY * l_figure_check_tbl[0].field_0x04);
|
|
|
|
if(m728 < l_figure_check_tbl[0].field_0x0C) {
|
|
m728 = l_figure_check_tbl[0].field_0x0C;
|
|
}
|
|
else if(m728 > l_figure_check_tbl[0].field_0x10) {
|
|
m728 = l_figure_check_tbl[0].field_0x10;
|
|
}
|
|
|
|
m724 -= g_mDoCPd_cpadInfo[0].mCStickPosY * l_figure_check_tbl[0].field_0x1C;
|
|
if(m724 < l_figure_check_tbl[0].field_0x20) {
|
|
m724 = l_figure_check_tbl[0].field_0x20;
|
|
}
|
|
else if(m724 > l_figure_check_tbl[0].field_0x24) {
|
|
m724 = l_figure_check_tbl[0].field_0x24;
|
|
}
|
|
}
|
|
else {
|
|
if(m738 != 0) {
|
|
m738--;
|
|
}
|
|
else {
|
|
m736 += l_figure_check_tbl[0].field_0x28;
|
|
}
|
|
}
|
|
|
|
dComIfGp_setDoStatusForce(dActStts_INFO_e);
|
|
dComIfGp_setAStatusForce(dActStts_CANCEL_e);
|
|
if(CPad_CHECK_TRIG_B(0)) {
|
|
m732 = 0;
|
|
m734 = 0;
|
|
m736 = current.angle.y;
|
|
|
|
return true;
|
|
}
|
|
|
|
if(CPad_CHECK_TRIG_A(0)) {
|
|
m73F = 1;
|
|
}
|
|
}
|
|
|
|
f32 temp = m728 + l_figure_check_tbl[0].field_0x14;
|
|
m70C.set(0.0f, temp, 0.0f);
|
|
temp = m728 + l_figure_check_tbl[0].field_0x14;
|
|
m718.x = 0.0f;
|
|
m718.y = temp;
|
|
m718.z = l_figure_check_tbl[0].field_0x00;
|
|
mDoMtx_stack_c::YrotS(current.angle.y + m734);
|
|
mDoMtx_stack_c::multVec(&m718, &m718);
|
|
m70C += current.pos;
|
|
m718 += current.pos;
|
|
dCam_getBody()->Set(m70C, m718, m724, 0);
|
|
|
|
break;
|
|
}
|
|
case 1:
|
|
talk(0);
|
|
if(m694 != fpcM_ERROR_PROCESS_ID_e) {
|
|
m73F = 2;
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
if(talk(0) == fopMsgStts_BOX_CLOSED_e) {
|
|
m73F = 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 00001600-00001658 .text eventOnPlrInit__13daObjFigure_cFv */
|
|
void daObjFigure_c::eventOnPlrInit() {
|
|
((daPy_lk_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw();
|
|
dCam_getBody()->Reset();
|
|
dCam_getBody()->Start();
|
|
dComIfGs_offTmpBit(dSv_event_tmp_flag_c::UNK_0408);
|
|
}
|
|
|
|
/* 00001658-000016A8 .text eventOffPlrInit__13daObjFigure_cFv */
|
|
void daObjFigure_c::eventOffPlrInit() {
|
|
((daPy_lk_c*)dComIfGp_getLinkPlayer())->onPlayerNoDraw();
|
|
dCam_getBody()->Stop();
|
|
dComIfGs_onTmpBit(dSv_event_tmp_flag_c::UNK_0408);
|
|
}
|
|
|
|
/* 000016A8-00001788 .text talk__13daObjFigure_cFi */
|
|
u16 daObjFigure_c::talk(int param_1) {
|
|
u16 msgStatus = 0xFF;
|
|
|
|
if(m694 == fpcM_ERROR_PROCESS_ID_e) {
|
|
if(param_1 == 1) {
|
|
m69C = getMsg();
|
|
}
|
|
|
|
m694 = fopMsgM_messageSet(m69C, this);
|
|
mpCurrMsg = NULL;
|
|
}
|
|
else {
|
|
if(mpCurrMsg) {
|
|
msgStatus = mpCurrMsg->mStatus;
|
|
|
|
if (msgStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
mpCurrMsg->mStatus = next_msgStatus(&m69C);
|
|
if(mpCurrMsg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(m69C);
|
|
}
|
|
}
|
|
else if (msgStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
mpCurrMsg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
m694 = fpcM_ERROR_PROCESS_ID_e;
|
|
}
|
|
}
|
|
else {
|
|
mpCurrMsg = fopMsgM_SearchByID(m694);
|
|
}
|
|
}
|
|
|
|
return msgStatus;
|
|
}
|
|
|
|
/* 00001788-000017D8 .text next_msgStatus__13daObjFigure_cFPUl */
|
|
u16 daObjFigure_c::next_msgStatus(u32* pMsgNo) {
|
|
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
|
|
|
|
if(m72C) {
|
|
m72C++;
|
|
switch(*m72C) {
|
|
case 0:
|
|
m72C = NULL;
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
default:
|
|
*pMsgNo = *m72C;
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
}
|
|
|
|
return msgStatus;
|
|
}
|
|
|
|
/* 000017D8-000017EC .text getMsg__13daObjFigure_cFv */
|
|
u32 daObjFigure_c::getMsg() {
|
|
m72C = NULL;
|
|
|
|
return 0x37DD + getFigureNo();
|
|
}
|
|
|
|
/* 000017EC-000017FC .text setMessage__13daObjFigure_cFUl */
|
|
void daObjFigure_c::setMessage(u32 msgNo) {
|
|
m694 = fpcM_ERROR_PROCESS_ID_e;
|
|
m69C = msgNo;
|
|
}
|
|
|
|
/* 000017FC-00001828 .text getPrmFigureNo__13daObjFigure_cFv */
|
|
u8 daObjFigure_c::getPrmFigureNo() {
|
|
return daObj::PrmAbstract<Prm_e>(this, PRM_FIGURE_NO_W, PRM_FIGURE_NO_S);
|
|
}
|
|
|
|
/* 00001828-00001954 .text setMtx__13daObjFigure_cFv */
|
|
void daObjFigure_c::setMtx() {
|
|
mpPedestalModel->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mpPedestalModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
cXyz scale(1.0f, 1.0f, 1.0f);
|
|
mpModel->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 100.0f, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(m736);
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
if(mpMorf) {
|
|
mpMorf->getModel()->setBaseScale(scale);
|
|
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
}
|
|
|
|
/* 00001954-000019DC .text isFigureGet__13daObjFigure_cFUc */
|
|
u8 daObjFigure_c::isFigureGet(u8 figureNo) {
|
|
if(figureNo / 8 < 0x11) {
|
|
int r31 = (figureNo % 8);
|
|
u8 reg = dComIfGs_getEventReg(l_figure_comp[figureNo / 8]);
|
|
u32 ret = reg & (1 << r31);
|
|
return ret;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 000019DC-00001A80 .text getFigureBmd__13daObjFigure_cFUc */
|
|
int daObjFigure_c::getFigureBmd(u8 figureNo) {
|
|
u32 bmd = l_figure_dat_tbl[figureNo].mBmdId;
|
|
switch(figureNo) {
|
|
case 0x10: // Mila's Father
|
|
if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_2D01)) {
|
|
bmd = dRes_ID_FIGURE1_BDL_VF_016B_e;
|
|
}
|
|
|
|
break;
|
|
case 0x12: // Maggie's Father
|
|
if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_2D01)) {
|
|
bmd = dRes_ID_FIGURE1_BDL_VF_018B_e;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return bmd;
|
|
}
|
|
|
|
/* 00001A80-00001AA0 .text daSampleCreate__FPv */
|
|
static cPhs_State daSampleCreate(void* i_this) {
|
|
return static_cast<daObjFigure_c*>(i_this)->_create();
|
|
}
|
|
|
|
/* 00001AA0-00001AC0 .text daSampleDelete__FPv */
|
|
static BOOL daSampleDelete(void* i_this) {
|
|
return static_cast<daObjFigure_c*>(i_this)->_delete();
|
|
}
|
|
|
|
/* 00001AC0-00001AE0 .text daSampleExecute__FPv */
|
|
static BOOL daSampleExecute(void* i_this) {
|
|
return static_cast<daObjFigure_c*>(i_this)->_execute();
|
|
}
|
|
|
|
/* 00001AE0-00001B00 .text daSampleDraw__FPv */
|
|
static BOOL daSampleDraw(void* i_this) {
|
|
return static_cast<daObjFigure_c*>(i_this)->_draw();
|
|
}
|
|
|
|
/* 00001B00-00001B08 .text daSampleIsDelete__FPv */
|
|
static BOOL daSampleIsDelete(void*) {
|
|
return true;
|
|
}
|
|
|
|
/* 00001B08-00002148 .text linkDraw__FP14mDoExt_McaMorf */
|
|
void linkDraw(mDoExt_McaMorf* pMorf) {
|
|
pMorf->calc();
|
|
#if VERSION > VERSION_DEMO
|
|
J3DModel* model = pMorf->getModel();
|
|
J3DModelData* modelData = model->getModelData();
|
|
j3dSys.setModel(model);
|
|
j3dSys.setTexture(modelData->getTexture());
|
|
model->unlock();
|
|
#endif
|
|
|
|
static mDoExt_offCupOnAupPacket l_offCupOnAupPacket1;
|
|
static mDoExt_offCupOnAupPacket l_offCupOnAupPacket2;
|
|
static mDoExt_onCupOffAupPacket l_onCupOffAupPacket1;
|
|
static mDoExt_onCupOffAupPacket l_onCupOffAupPacket2;
|
|
|
|
J3DShape* ZOffBlendShape[4];
|
|
J3DShape* ZOffNoneShape[4];
|
|
J3DShape* ZOnShape[4];
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
J3DModel* model = pMorf->getModel();
|
|
J3DModelData* modelData = model->getModelData();
|
|
#endif
|
|
|
|
J3DJoint* link_root_joint = modelData->getJointNodePointer(VF_064L_JNT_LINK_ROOT_e);
|
|
J3DJoint* cl_eye_joint = modelData->getJointNodePointer(VF_064L_JNT_CL_EYE_e);
|
|
J3DJoint* cl_mayu_joint = modelData->getJointNodePointer(VF_064L_JNT_CL_MAYU_e);
|
|
|
|
J3DMaterial* mtl;
|
|
mtl = modelData->getJointNodePointer(VF_064L_JNT_CL_EYE_e)->getMesh();
|
|
int zoff_blend_cnt = 0;
|
|
int zoff_none_cnt = 0;
|
|
int zon_cnt = 0;
|
|
int i;
|
|
for (i = 0; i < 2; i++) {
|
|
while (mtl) {
|
|
mtl->setMaterialMode(1);
|
|
if (mtl->getZMode()->getCompareEnable() == 0) {
|
|
if ((u8)mtl->getBlend()->getType() == GX_BM_BLEND) {
|
|
ZOffBlendShape[zoff_blend_cnt++] = mtl->getShape();
|
|
JUT_ASSERT(DEMO_SELECT(1713, 1767), zoff_blend_cnt <= 4);
|
|
} else {
|
|
ZOffNoneShape[zoff_none_cnt++] = mtl->getShape();
|
|
JUT_ASSERT(DEMO_SELECT(1717, 1770), zoff_none_cnt <= 4);
|
|
}
|
|
} else {
|
|
ZOnShape[zon_cnt++] = mtl->getShape();
|
|
JUT_ASSERT(DEMO_SELECT(1722, 1774), zon_cnt <= 4);
|
|
}
|
|
mtl = mtl->getNext();
|
|
}
|
|
mtl = modelData->getJointNodePointer(VF_064L_JNT_CL_MAYU_e)->getMesh();
|
|
}
|
|
|
|
dComIfGd_setListP0();
|
|
l_onCupOffAupPacket2.entryOpa();
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
ZOffBlendShape[i]->hide();
|
|
ZOnShape[i]->hide();
|
|
ZOffNoneShape[i]->show();
|
|
}
|
|
|
|
cl_eye_joint->entryIn();
|
|
cl_mayu_joint->entryIn();
|
|
l_offCupOnAupPacket2.entryOpa();
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
ZOffBlendShape[i]->show();
|
|
ZOffNoneShape[i]->hide();
|
|
}
|
|
|
|
cl_eye_joint->entryIn();
|
|
cl_mayu_joint->entryIn();
|
|
|
|
mtl = link_root_joint->getMesh();
|
|
for (i = 0; mtl != NULL; i++, mtl = mtl->getNext()) {
|
|
if (i != 2 && i != 5) {
|
|
mtl->getShape()->hide();
|
|
}
|
|
}
|
|
|
|
link_root_joint->entryIn();
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
for (i = 0, mtl = link_root_joint->getMesh(); mtl != NULL; i++, mtl = mtl->getNext()) {
|
|
if (i != 2 && i != 5) {
|
|
mtl->getShape()->show();
|
|
} else {
|
|
mtl->getShape()->hide();
|
|
}
|
|
}
|
|
#endif
|
|
|
|
l_onCupOffAupPacket1.entryOpa();
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
ZOffBlendShape[i]->hide();
|
|
ZOnShape[i]->show();
|
|
ZOffNoneShape[i]->hide();
|
|
}
|
|
|
|
cl_eye_joint->entryIn();
|
|
cl_mayu_joint->entryIn();
|
|
|
|
l_offCupOnAupPacket1.entryOpa();
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
ZOnShape[i]->hide();
|
|
}
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
pMorf->entryDL();
|
|
#else
|
|
dComIfGd_setList();
|
|
mDoExt_modelEntryDL(pMorf->getModel());
|
|
#endif
|
|
|
|
for (mtl = link_root_joint->getMesh(); mtl != NULL; mtl = mtl->getNext()) {
|
|
mtl->getShape()->show();
|
|
}
|
|
|
|
modelData->getJointNodePointer(VF_064L_JNT_CL_HANA_e)->getMesh()->getShape()->show();
|
|
modelData->getJointNodePointer(VF_064L_JNT_CL_BACK_e)->getMesh()->getShape()->show();
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
dComIfGd_setList();
|
|
#endif
|
|
}
|
|
|
|
static actor_method_class daSampleMethodTable = {
|
|
(process_method_func)daSampleCreate,
|
|
(process_method_func)daSampleDelete,
|
|
(process_method_func)daSampleExecute,
|
|
(process_method_func)daSampleIsDelete,
|
|
(process_method_func)daSampleDraw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_OBJ_FIGURE = {
|
|
/* Layer ID */ fpcLy_CURRENT_e,
|
|
/* List ID */ 0x0007,
|
|
/* List Prio */ fpcPi_CURRENT_e,
|
|
/* Proc Name */ fpcNm_OBJ_FIGURE_e,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daObjFigure_c),
|
|
/* Size Other */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Draw Prio */ fpcDwPi_OBJ_FIGURE_e,
|
|
/* Actor SubMtd */ &daSampleMethodTable,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* Cull Type */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|