mirror of
https://github.com/zeldaret/tp
synced 2026-05-25 15:25:25 -04:00
214cfce7f6
* d_a_bg_obj equivalent + misc * More Z2LinkMgr Matches
1660 lines
53 KiB
C++
1660 lines
53 KiB
C++
/**
|
|
* @file d_a_bg_obj.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/actor/d_a_bg_obj.h"
|
|
#include "JSystem/J3DGraphBase/J3DMaterial.h"
|
|
#include "stdio.h"
|
|
#include "dol2asm.h"
|
|
#include "dolphin/os.h"
|
|
#include "d/actor/d_a_set_bgobj.h"
|
|
#include "d/d_s_play.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
|
|
SECTION_DATA extern void* __vt__10cCcD_GStts[3];
|
|
SECTION_DATA extern void* __vt__10dCcD_GStts[3];
|
|
SECTION_DATA extern void* __vt__8cM3dGPla[3];
|
|
SECTION_DATA extern void* __vt__8cM3dGTri[3];
|
|
SECTION_DATA extern void* __vt__8cM3dGCyl[3];
|
|
SECTION_DATA extern void* __vt__8cM3dGAab[3];
|
|
SECTION_DATA extern void* __vt__9daBgObj_c[10];
|
|
SECTION_DATA extern void* __vt__12J3DFrameCtrl[3];
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" static void getBmdName__Fii();
|
|
extern "C" static void getBtkName__Fii();
|
|
extern "C" static void getBrkName__Fii();
|
|
extern "C" static void getDzbName__Fi();
|
|
extern "C" void initParticleBlock__Q29daBgObj_c11spec_data_cFPUc();
|
|
extern "C" void initSoundBlock__Q29daBgObj_c11spec_data_cFPUc();
|
|
extern "C" void initTexShareBlock__Q29daBgObj_c11spec_data_cFPUc();
|
|
extern "C" void initFarInfoBlock__Q29daBgObj_c11spec_data_cFPUc();
|
|
extern "C" void Set__Q29daBgObj_c11spec_data_cFPv();
|
|
extern "C" void release__9daBgObj_cFP4dBgW();
|
|
extern "C" void regist__9daBgObj_cFP4dBgW();
|
|
extern "C" void initAtt__9daBgObj_cFv();
|
|
extern "C" void setAttentionInfo__9daBgObj_cFP10fopAc_ac_c();
|
|
extern "C" void initBaseMtx__9daBgObj_cFv();
|
|
extern "C" void setBaseMtx__9daBgObj_cFv();
|
|
extern "C" void settingCullSizeBoxForCo__9daBgObj_cFi();
|
|
extern "C" void settingCullSizeBoxForCull__9daBgObj_cFi();
|
|
extern "C" void CreateInitType0__9daBgObj_cFv();
|
|
extern "C" void CreateInitType1__9daBgObj_cFv();
|
|
extern "C" void Create__9daBgObj_cFv();
|
|
extern "C" void CreateHeapType0__9daBgObj_cFv();
|
|
extern "C" void __dt__12J3DFrameCtrlFv();
|
|
extern "C" void CreateHeapType1__9daBgObj_cFv();
|
|
extern "C" void doShareTexture__9daBgObj_cFv();
|
|
extern "C" void CreateHeap__9daBgObj_cFv();
|
|
extern "C" void create1st__9daBgObj_cFv();
|
|
extern "C" void setColCommon__9daBgObj_cFv();
|
|
extern "C" void set_tri_0__9daBgObj_cFv();
|
|
extern "C" void set_tri_1__9daBgObj_cFv();
|
|
extern "C" void set_cyl_0__9daBgObj_cFv();
|
|
extern "C" void set_tri_2__9daBgObj_cFv();
|
|
extern "C" void set_tri_3__9daBgObj_cFv();
|
|
extern "C" void setParticle__9daBgObj_cFv();
|
|
extern "C" void setSe__9daBgObj_cFv();
|
|
extern "C" void checkDestroy__9daBgObj_cFv();
|
|
extern "C" void checkHitAt__9daBgObj_cFP8cCcD_Obj();
|
|
extern "C" void orderWait_tri__9daBgObj_cFv();
|
|
extern "C" void orderWait_cyl__9daBgObj_cFv();
|
|
extern "C" void orderWait_spec__9daBgObj_cFv();
|
|
extern "C" void actionOrderWait__9daBgObj_cFv();
|
|
extern "C" void actionOrder__9daBgObj_cFv();
|
|
extern "C" void actionEvent__9daBgObj_cFv();
|
|
extern "C" bool actionWait__9daBgObj_cFv();
|
|
extern "C" void ExecuteType0__9daBgObj_cFv();
|
|
extern "C" void ExecuteType1__9daBgObj_cFv();
|
|
extern "C" void Execute__9daBgObj_cFPPA3_A4_f();
|
|
extern "C" void Draw__9daBgObj_cFv();
|
|
extern "C" void indirectProc__9daBgObj_cFP8J3DModel();
|
|
extern "C" void Delete__9daBgObj_cFv();
|
|
extern "C" static void daBgObj_create1st__FP9daBgObj_c();
|
|
extern "C" void __dt__8cM3dGCylFv();
|
|
extern "C" void __dt__8cM3dGAabFv();
|
|
extern "C" void __dt__8dCcD_TriFv();
|
|
extern "C" void __ct__8dCcD_TriFv();
|
|
extern "C" void __dt__8cM3dGTriFv();
|
|
extern "C" void __dt__8cM3dGPlaFv();
|
|
extern "C" void __dt__10dCcD_GSttsFv();
|
|
extern "C" static void daBgObj_MoveBGDelete__FP9daBgObj_c();
|
|
extern "C" static void daBgObj_MoveBGExecute__FP9daBgObj_c();
|
|
extern "C" static void daBgObj_MoveBGDraw__FP9daBgObj_c();
|
|
extern "C" void __dt__10cCcD_GSttsFv();
|
|
extern "C" void __sinit_d_a_bg_obj_cpp();
|
|
extern "C" extern char const* const d_a_bg_obj__stringBase0;
|
|
extern "C" u8 mCreateHeapFunc__9daBgObj_c[48];
|
|
extern "C" u8 mCreateInitFunc__9daBgObj_c[48];
|
|
extern "C" u8 mExecuteFunc__9daBgObj_c[48];
|
|
extern "C" u8 mTgSetFunc__9daBgObj_c[60];
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void mDoMtx_YrotS__FPA4_fs();
|
|
extern "C" void mDoMtx_YrotM__FPA4_fs();
|
|
extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
|
|
extern "C" void play__14mDoExt_baseAnmFv();
|
|
extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
|
|
extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
|
|
extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss();
|
|
extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef();
|
|
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
|
|
extern "C" void mDoExt_setupShareTexture__FP12J3DModelDataP12J3DModelData();
|
|
extern "C" void mDoExt_setupStageTexture__FP12J3DModelData();
|
|
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
|
|
extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
|
|
extern "C" void fopAcM_fastCreate__FsUlPC4cXyziPC5csXyzPC4cXyzScPFPv_iPv();
|
|
extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
|
|
extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs();
|
|
extern "C" void fpcM_Execute__FPv();
|
|
extern "C" void fpcSch_JudgeByID__FPvPv();
|
|
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
|
|
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
|
|
extern "C" void dComIfGp_getReverb__Fi();
|
|
extern "C" void getArcName__12daSetBgObj_cFP10fopAc_ac_c();
|
|
extern "C" void onSwitch__10dSv_info_cFii();
|
|
extern "C" void isSwitch__10dSv_info_cCFii();
|
|
extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci();
|
|
extern "C" void getObjectResName2Index__14dRes_control_cFPCcPCc();
|
|
extern "C" void reset__14dEvt_control_cFv();
|
|
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cUc();
|
|
extern "C" void endCheck__16dEvent_manager_cFs();
|
|
extern "C" void
|
|
setModel__18dPa_modelEcallBackFP14JPABaseEmitterP12J3DModelDataRC12dKy_tevstr_cUcPvUcUc();
|
|
extern "C" void
|
|
set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
|
|
extern "C" void StartShock__12dVibration_cFii4cXyz();
|
|
extern "C" void Release__4cBgSFP9dBgW_Base();
|
|
extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c();
|
|
extern "C" void __ct__16dBgS_MoveBgActorFv();
|
|
extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
|
|
extern "C" bool ToFore__16dBgS_MoveBgActorFv();
|
|
extern "C" bool ToBack__16dBgS_MoveBgActorFv();
|
|
extern "C" void
|
|
MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
|
|
extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
|
|
extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
|
|
extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f();
|
|
extern "C" void __ct__4dBgWFv();
|
|
extern "C" void Move__4dBgWFv();
|
|
extern "C" void GetAc__22dCcD_GAtTgCoCommonBaseFv();
|
|
extern "C" void __ct__10dCcD_GSttsFv();
|
|
extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
|
|
extern "C" void __ct__12dCcD_GObjInfFv();
|
|
extern "C" void __dt__12dCcD_GObjInfFv();
|
|
extern "C" void ChkTgHit__12dCcD_GObjInfFv();
|
|
extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
|
|
extern "C" void Set__8dCcD_TriFRC11dCcD_SrcTri();
|
|
extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
|
|
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
|
|
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
|
|
extern "C" void dKy_bg_MAxx_proc__FPv();
|
|
extern "C" void Set__4cCcSFP8cCcD_Obj();
|
|
extern "C" void __mi__4cXyzCFRC3Vec();
|
|
extern "C" void cM_atan2s__Fff();
|
|
extern "C" void ChkUsed__9cBgW_BgIdCFv();
|
|
extern "C" void SetC__8cM3dGCylFRC4cXyz();
|
|
extern "C" void SetH__8cM3dGCylFf();
|
|
extern "C" void SetR__8cM3dGCylFf();
|
|
extern "C" void setPos__8cM3dGTriFPC3VecPC3VecPC3Vec();
|
|
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
|
|
extern "C" void* __nw__FUl();
|
|
extern "C" void __dl__FPv();
|
|
extern "C" void J3DGetTranslateRotateMtx__FRC16J3DTransformInfoPA4_f();
|
|
extern "C" void init__12J3DFrameCtrlFs();
|
|
extern "C" void __construct_array();
|
|
extern "C" void __ptmf_scall();
|
|
extern "C" void _savegpr_21();
|
|
extern "C" void _savegpr_23();
|
|
extern "C" void _savegpr_24();
|
|
extern "C" void _savegpr_25();
|
|
extern "C" void _savegpr_27();
|
|
extern "C" void _savegpr_28();
|
|
extern "C" void _savegpr_29();
|
|
extern "C" void _restgpr_21();
|
|
extern "C" void _restgpr_23();
|
|
extern "C" void _restgpr_24();
|
|
extern "C" void _restgpr_25();
|
|
extern "C" void _restgpr_27();
|
|
extern "C" void _restgpr_28();
|
|
extern "C" void _restgpr_29();
|
|
extern "C" extern void* __vt__8dCcD_Cyl[36];
|
|
extern "C" extern void* __vt__8dCcD_Tri[36];
|
|
extern "C" extern void* __vt__9dCcD_Stts[11];
|
|
extern "C" extern void* __vt__12cCcD_CylAttr[25];
|
|
extern "C" extern void* __vt__12cCcD_TriAttr[25];
|
|
extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
|
|
extern "C" extern void* __vt__9cCcD_Stts[8];
|
|
extern "C" u8 now__14mDoMtx_stack_c[48];
|
|
extern "C" u8 mStatus__20dStage_roomControl_c[65792];
|
|
extern "C" u8 mEcallback__18dPa_modelEcallBack[4];
|
|
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 80459658-804596C4 000078 006C+00 2/2 0/0 0/0 .text getBmdName__Fii */
|
|
static const char* getBmdName(int param_0, int param_1) {
|
|
static char l_bmdName[16];
|
|
|
|
switch (param_1) {
|
|
case 0:
|
|
sprintf(l_bmdName, "model%d.bmd", param_0);
|
|
break;
|
|
default:
|
|
sprintf(l_bmdName, "model%d_%d.bmd", param_0, param_1);
|
|
break;
|
|
}
|
|
|
|
return l_bmdName;
|
|
}
|
|
|
|
static const char* getBtkName(int param_0, int param_1) {
|
|
static char l_btkName[16];
|
|
|
|
switch (param_1) {
|
|
case 0:
|
|
sprintf(l_btkName, "model%d.btk", param_0);
|
|
break;
|
|
default:
|
|
sprintf(l_btkName, "model%d_%d.btk", param_0, param_1);
|
|
break;
|
|
}
|
|
|
|
return l_btkName;
|
|
}
|
|
|
|
/* 80459734-804597A4 000154 0070+00 2/2 0/0 0/0 .text getBrkName__Fii */
|
|
static const char* getBrkName(int param_0, int param_1) {
|
|
static char l_brkName[16];
|
|
|
|
switch (param_1) {
|
|
case 0:
|
|
sprintf(l_brkName, "model%d.brk", param_0);
|
|
break;
|
|
default:
|
|
sprintf(l_brkName, "model%d_%d.brk", param_0, param_1);
|
|
break;
|
|
}
|
|
|
|
return l_brkName;
|
|
}
|
|
|
|
/* 804597A4-804597E8 0001C4 0044+00 2/2 0/0 0/0 .text getDzbName__Fi */
|
|
static const char* getDzbName(int param_0) {
|
|
static char l_dzbName[16];
|
|
|
|
sprintf(l_dzbName, "model%d.dzb", param_0);
|
|
return l_dzbName;
|
|
}
|
|
|
|
/* 804597E8-80459814 000208 002C+00 1/1 0/0 0/0 .text
|
|
* initParticleBlock__Q29daBgObj_c11spec_data_cFPUc */
|
|
u8* daBgObj_c::spec_data_c::initParticleBlock(u8* i_dataPtr) {
|
|
mpParticleBlock = i_dataPtr;
|
|
mParticleNum = *(u32*)mpParticleBlock >> 4 & 0xFFFFF;
|
|
|
|
return i_dataPtr + ((*(u32*)mpParticleBlock & 0xFFFFFF) + 4);
|
|
}
|
|
|
|
/* 80459814-80459840 000234 002C+00 1/1 0/0 0/0 .text
|
|
* initSoundBlock__Q29daBgObj_c11spec_data_cFPUc */
|
|
u8* daBgObj_c::spec_data_c::initSoundBlock(u8* i_dataPtr) {
|
|
mpSoundBlock = i_dataPtr;
|
|
mSoundNum = *(u32*)mpSoundBlock >> 2 & 0x3FFFFF;
|
|
|
|
return i_dataPtr + ((*(u32*)mpSoundBlock & 0xFFFFFF) + 4);
|
|
}
|
|
|
|
/* 80459840-804598F4 000260 00B4+00 1/1 0/0 0/0 .text
|
|
* initTexShareBlock__Q29daBgObj_c11spec_data_cFPUc */
|
|
u8* daBgObj_c::spec_data_c::initTexShareBlock(u8* i_dataPtr) {
|
|
char sp48[64];
|
|
char sp8[64];
|
|
|
|
mpTexShareBlock = i_dataPtr;
|
|
mTexShareNum = i_dataPtr[4];
|
|
|
|
int i = 0;
|
|
u8* dataPos = i_dataPtr + 8;
|
|
|
|
for (; i < mTexShareNum; i++) {
|
|
strcpy(sp48, (char*)dataPos);
|
|
int len = strlen((char*)dataPos);
|
|
|
|
dataPos += len + 1;
|
|
if (*dataPos != 0) {
|
|
strcpy(sp8, (char*)dataPos);
|
|
dataPos += strlen((char*)dataPos) + 1;
|
|
} else if (*dataPos == 0 && dataPos[1] == 1) {
|
|
dataPos += 2;
|
|
}
|
|
}
|
|
|
|
return dataPos;
|
|
}
|
|
|
|
/* 804598F4-80459904 000314 0010+00 1/1 0/0 0/0 .text
|
|
* initFarInfoBlock__Q29daBgObj_c11spec_data_cFPUc */
|
|
u8* daBgObj_c::spec_data_c::initFarInfoBlock(u8* i_dataPtr) {
|
|
mpFarInfoBlock = *(f32*)(i_dataPtr + 4);
|
|
return i_dataPtr + 8;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 8045CA20-8045CA20 000068 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_8045CA7D = "spec.dat";
|
|
#pragma pop
|
|
|
|
/* 80459904-80459B64 000324 0260+00 1/1 0/0 1/1 .text Set__Q29daBgObj_c11spec_data_cFPv
|
|
*/
|
|
// NONMATCHING - close-ish
|
|
bool daBgObj_c::spec_data_c::Set(void* i_ptr) {
|
|
JUT_ASSERT(496, i_ptr != 0);
|
|
|
|
u8* data = (u8*)i_ptr;
|
|
|
|
mSpecType = *(u16*)i_ptr;
|
|
|
|
u8 block_type;
|
|
u16 temp_r3;
|
|
|
|
switch (mSpecType) {
|
|
case 0: {
|
|
block_type = data[4];
|
|
data += 4;
|
|
|
|
do {
|
|
switch (block_type) {
|
|
case 0:
|
|
break;
|
|
case 3:
|
|
data = initTexShareBlock(data);
|
|
break;
|
|
case 4:
|
|
data = initFarInfoBlock(data);
|
|
break;
|
|
default:
|
|
// Invalid data block type
|
|
OS_REPORT_ERROR("データブロックタイプが不正です<%d>\n", block_type);
|
|
JUT_PANIC(527, "0");
|
|
}
|
|
|
|
if (block_type == 0) {
|
|
break;
|
|
}
|
|
|
|
block_type = *data;
|
|
} while (1);
|
|
break;
|
|
}
|
|
case 1: {
|
|
temp_r3 = *(u16*)(data + 2);
|
|
field_0x02 = temp_r3 & 0xF;
|
|
field_0x03 = (temp_r3 >> 0xE) & 3;
|
|
field_0x15 = (temp_r3 >> 0xC) & 3;
|
|
field_0x14 = (temp_r3 >> 9) & 7;
|
|
field_0x16 = (temp_r3 >> 8) & 1;
|
|
|
|
block_type = data[4];
|
|
data += 4;
|
|
|
|
do {
|
|
switch (block_type) {
|
|
case 0:
|
|
break;
|
|
case 3:
|
|
data = initTexShareBlock(data);
|
|
break;
|
|
case 1:
|
|
data = initParticleBlock(data);
|
|
break;
|
|
case 2:
|
|
data = initSoundBlock(data);
|
|
break;
|
|
case 4:
|
|
data = initFarInfoBlock(data);
|
|
break;
|
|
default:
|
|
// Invalid data block type
|
|
OS_REPORT_ERROR("データブロックタイプが不正です<%d>\n", block_type);
|
|
JUT_PANIC(570, "0");
|
|
}
|
|
|
|
if (block_type == 0) {
|
|
break;
|
|
}
|
|
|
|
block_type = *data;
|
|
} while (1);
|
|
break;
|
|
}
|
|
case 2: {
|
|
temp_r3 = *(u16*)(data + 2);
|
|
field_0x02 = temp_r3 & 0xF;
|
|
field_0x03 = (temp_r3 >> 0xE) & 3;
|
|
field_0x15 = (temp_r3 >> 0xC) & 3;
|
|
field_0x14 = (temp_r3 >> 9) & 7;
|
|
field_0x16 = (temp_r3 >> 8) & 1;
|
|
|
|
block_type = data[4];
|
|
data += 4;
|
|
|
|
do {
|
|
switch (block_type) {
|
|
case 0:
|
|
break;
|
|
case 3:
|
|
data = initTexShareBlock(data);
|
|
break;
|
|
case 1:
|
|
data = initParticleBlock(data);
|
|
break;
|
|
case 2:
|
|
data = initSoundBlock(data);
|
|
break;
|
|
case 4:
|
|
data = initFarInfoBlock(data);
|
|
break;
|
|
default:
|
|
// "Data Block type invalid<%d>\n"
|
|
OSReport_Error("データブロックタイプが不正です<%d>\n", block_type);
|
|
JUT_PANIC(619, "0");
|
|
break;
|
|
}
|
|
|
|
if (block_type == 0) {
|
|
break;
|
|
}
|
|
|
|
block_type = *data;
|
|
} while (1);
|
|
break;
|
|
}
|
|
default:
|
|
// Terrain unit MoveBG: performance undefined error<%d>!!!
|
|
OS_REPORT_ERROR("地形ユニットMoveBG : 性能未定義エラー!!!<%d>\n\n", mSpecType);
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80459B64-80459BB4 000584 0050+00 4/4 0/0 0/0 .text release__9daBgObj_cFP4dBgW */
|
|
void daBgObj_c::release(dBgW* param_0) {
|
|
if (param_0 != NULL && param_0->ChkUsed()) {
|
|
dComIfG_Bgsp().Release(param_0);
|
|
}
|
|
}
|
|
|
|
/* 80459BB4-80459BEC 0005D4 0038+00 3/3 0/0 3/3 .text regist__9daBgObj_cFP4dBgW */
|
|
void daBgObj_c::regist(dBgW* param_0) {
|
|
if (param_0 != NULL) {
|
|
dComIfG_Bgsp().Regist(param_0, this);
|
|
}
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 8045C9B8-8045C9FC 000000 0044+00 6/6 0/0 0/0 .rodata l_cyl_src */
|
|
static const dCcD_SrcCyl l_cyl_src = {
|
|
{
|
|
{0, {{0, 0, 0}, {0xD8400422, 0x11}, 0}},
|
|
{dCcD_SE_NONE, 0, 0, 0, {8}},
|
|
{dCcD_SE_NONE, 0, 0, 0, {4}},
|
|
{0},
|
|
},
|
|
{
|
|
{0.0f, 0.0f, 0.0f},
|
|
0.0f,
|
|
0.0f,
|
|
},
|
|
};
|
|
|
|
/* 80459BEC-80459D0C 00060C 0120+00 1/1 0/0 0/1 .text initAtt__9daBgObj_cFv */
|
|
void daBgObj_c::initAtt() {
|
|
u32 actor_params = 0;
|
|
u32 cd3_val;
|
|
if (mSpecData.field_0x03 == 0) {
|
|
cd3_val = 3;
|
|
} else {
|
|
cd3_val = mSpecData.field_0x03 - 1;
|
|
}
|
|
|
|
u32 ce5_val;
|
|
if (mSpecData.field_0x15 == 0) {
|
|
ce5_val = 3;
|
|
} else {
|
|
ce5_val = mSpecData.field_0x15 - 1;
|
|
}
|
|
|
|
u32 ce4_val;
|
|
if (mSpecData.field_0x14 == 0) {
|
|
ce4_val = 7;
|
|
} else {
|
|
ce4_val = mSpecData.field_0x14 - 1;
|
|
}
|
|
|
|
u32 arg0;
|
|
if (daBgObj_prm::getObjArg0(this) == 0) {
|
|
arg0 = 0;
|
|
} else {
|
|
arg0 = 1;
|
|
}
|
|
|
|
u32 temp = 0;
|
|
u32 swbit = daBgObj_prm::getSwBit(this);
|
|
u32 swbit2 = daBgObj_prm::getSwBit2(this);
|
|
|
|
actor_params =
|
|
(swbit2 << 24) |
|
|
(swbit << 16) |
|
|
(temp << 8) |
|
|
(arg0 << 7) |
|
|
(ce4_val << 4) |
|
|
(ce5_val << 2) |
|
|
(cd3_val);
|
|
|
|
fopAc_ac_c* actor = fopAcM_fastCreate(PROC_Tag_Attp, actor_params, ¤t.pos, fopAcM_GetRoomNo(this),
|
|
¤t.angle, &scale, -1, NULL, NULL);
|
|
|
|
if (actor != NULL) {
|
|
setAttentionInfo(actor);
|
|
} else {
|
|
// Failed to generate focus actor
|
|
OS_REPORT_ERROR("「注目点」生成失敗!!!\n");
|
|
}
|
|
|
|
mAttnActorID = fopAcM_GetID(actor);
|
|
const Vec* box = fopAcM_getCullSizeBoxMax(this);
|
|
eyePos.y += 0.5f * box->y;
|
|
}
|
|
|
|
/* 80459D0C-80459D3C 00072C 0030+00 2/2 0/0 0/0 .text setAttentionInfo__9daBgObj_cFP10fopAc_ac_c
|
|
*/
|
|
void daBgObj_c::setAttentionInfo(fopAc_ac_c* param_0) {
|
|
param_0->eyePos.y += 0.5f * fopAcM_getCullSizeBoxMax(this)->y;
|
|
param_0->attention_info.position.y += fopAcM_getCullSizeBoxMax(this)->y;
|
|
}
|
|
|
|
/* 80459D3C-80459D94 00075C 0058+00 2/2 0/0 0/0 .text initBaseMtx__9daBgObj_cFv */
|
|
void daBgObj_c::initBaseMtx() {
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
|
|
setBaseMtx();
|
|
}
|
|
|
|
/* 80459D94-80459E04 0007B4 0070+00 2/2 0/0 0/0 .text setBaseMtx__9daBgObj_cFv */
|
|
void daBgObj_c::setBaseMtx() {
|
|
for (int i = 0; i < 2; i++) {
|
|
if (field_0x5a8[field_0xcc8][i] != NULL) {
|
|
field_0x5a8[field_0xcc8][i]->setBaseTRMtx(mBgMtx);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80459E04-80459F14 000824 0110+00 1/1 0/0 0/0 .text settingCullSizeBoxForCo__9daBgObj_cFi */
|
|
void daBgObj_c::settingCullSizeBoxForCo(int param_0) {
|
|
J3DModel* cur_model = field_0x5a8[param_0][0];
|
|
if (cur_model != NULL) {
|
|
Vec min_transformed;
|
|
Vec max_transformed;
|
|
|
|
J3DModelData* model_data = cur_model->mModelData;
|
|
mDoMtx_stack_c::identity();
|
|
J3DJointTree& joint_tree = model_data->getJointTree();
|
|
J3DJoint* joint;
|
|
for (u16 i = 0; i < joint_tree.getJointNum(); i++) {
|
|
joint = joint_tree.getJointNodePointer(i);
|
|
Mtx trans_rot_mat;
|
|
J3DGetTranslateRotateMtx(joint->getTransformInfo(), trans_rot_mat);
|
|
mDoMtx_stack_c::concat(trans_rot_mat);
|
|
}
|
|
|
|
PSMTXMultVec(mDoMtx_stack_c::get(), joint->getMin(), &min_transformed);
|
|
PSMTXMultVec(mDoMtx_stack_c::get(), joint->getMax(), &max_transformed);
|
|
|
|
fopAcM_setCullSizeBox(this, min_transformed.x, min_transformed.y, min_transformed.z,
|
|
max_transformed.x, max_transformed.y, max_transformed.z);
|
|
} else {
|
|
fopAcM_setCullSizeBox(this, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
|
}
|
|
}
|
|
|
|
/* 80459F14-8045A0EC 000934 01D8+00 3/3 0/0 0/0 .text settingCullSizeBoxForCull__9daBgObj_cFi */
|
|
void daBgObj_c::settingCullSizeBoxForCull(int param_0) {
|
|
cXyz max(1000000000.0f, 1000000000.0f, 1000000000.0f);
|
|
cXyz min(-1000000000.0f, -1000000000.0f, -1000000000.0f);
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
J3DModel* cur_model = field_0x5a8[param_0][i];
|
|
if (cur_model != NULL) {
|
|
J3DModelData* model_data = cur_model->mModelData;
|
|
mDoMtx_stack_c::identity();
|
|
J3DJoint* joint;
|
|
for (u16 j = 0; j < model_data->getJointNum(); j++) {
|
|
joint = model_data->getJointNodePointer(j);
|
|
Mtx trans_rot_mat;
|
|
J3DGetTranslateRotateMtx(joint->getTransformInfo(), trans_rot_mat);
|
|
MTXConcat(mDoMtx_stack_c::get(), trans_rot_mat, mDoMtx_stack_c::get());
|
|
}
|
|
|
|
Vec min_transformed, max_transformed;
|
|
PSMTXMultVec(mDoMtx_stack_c::get(), joint->getMin(), &min_transformed);
|
|
PSMTXMultVec(mDoMtx_stack_c::get(), joint->getMax(), &max_transformed);
|
|
|
|
if (max.x > min_transformed.x) {
|
|
max.x = min_transformed.x;
|
|
}
|
|
if (max.y > min_transformed.y) {
|
|
max.y = min_transformed.y;
|
|
}
|
|
if (max.z > min_transformed.z) {
|
|
max.z = min_transformed.z;
|
|
}
|
|
|
|
if (min.x < max_transformed.x) {
|
|
min.x = max_transformed.x;
|
|
}
|
|
if (min.y < max_transformed.y) {
|
|
min.y = max_transformed.y;
|
|
}
|
|
if (min.z < max_transformed.z) {
|
|
min.z = max_transformed.z;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (1000000000.0f != max.x) {
|
|
fopAcM_setCullSizeBox(this, max.x, max.y, max.z, min.x, min.y, min.z);
|
|
} else {
|
|
fopAcM_setCullSizeBox(this, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
|
}
|
|
}
|
|
|
|
/* 8045A0EC-8045A160 000B0C 0074+00 1/0 0/0 0/0 .text CreateInitType0__9daBgObj_cFv */
|
|
int daBgObj_c::CreateInitType0() {
|
|
field_0xcc8 = 0;
|
|
initBaseMtx();
|
|
fopAcM_SetMtx(this, field_0x5a8[field_0xcc8][0]->getBaseTRMtx());
|
|
settingCullSizeBoxForCull(field_0xcc8);
|
|
|
|
if (0.0f != mSpecData.mpFarInfoBlock) {
|
|
fopAcM_setCullSizeFar(this, mSpecData.mpFarInfoBlock);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8045A160-8045A2B8 000B80 0158+00 3/0 0/0 0/0 .text CreateInitType1__9daBgObj_cFv */
|
|
int daBgObj_c::CreateInitType1() {
|
|
if (fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this))) {
|
|
field_0xcc8 = 1;
|
|
release(mpBgW);
|
|
regist(mpBgW2);
|
|
mAction = 3;
|
|
} else {
|
|
field_0xcc8 = 0;
|
|
mAction = 0;
|
|
}
|
|
|
|
initBaseMtx();
|
|
|
|
if (field_0xcc8 == 1 && field_0x5a8[field_0xcc8][0] == NULL) {
|
|
fopAcM_SetMtx(this, field_0x5a8[0][0]->getBaseTRMtx());
|
|
} else {
|
|
fopAcM_SetMtx(this, field_0x5a8[field_0xcc8][0]->getBaseTRMtx());
|
|
}
|
|
|
|
settingCullSizeBoxForCo(field_0xcc8);
|
|
|
|
if (0.0f != mSpecData.mpFarInfoBlock) {
|
|
fopAcM_setCullSizeFar(this, mSpecData.mpFarInfoBlock);
|
|
}
|
|
|
|
mStts.Init(0xFF, 0xFF, this);
|
|
setColCommon();
|
|
|
|
settingCullSizeBoxForCull(field_0xcc8);
|
|
|
|
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, daBgObj_prm::getEvId(this));
|
|
|
|
if (mpBgW2 != NULL) {
|
|
mpBgW2->Move();
|
|
}
|
|
|
|
initAtt();
|
|
return 1;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 8045CAC4-8045CAD0 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */
|
|
SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 8045CAD0-8045CAE4 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
|
|
0x02000201,
|
|
/* padding */
|
|
0x40080000,
|
|
0x00000000,
|
|
0x3FE00000,
|
|
0x00000000,
|
|
};
|
|
#pragma pop
|
|
|
|
/* 8045CAE4-8045CB38 000020 0054+00 4/4 0/0 0/0 .data l_tri_src */
|
|
static dCcD_SrcTri l_tri_src = {
|
|
{
|
|
{0, {{0, 0, 0}, {0xD8400422, 0x11}, 0}},
|
|
{dCcD_SE_NONE, 0, 0, 0, {0}},
|
|
{dCcD_SE_NONE, 0, 0, 0, {4}},
|
|
{0},
|
|
},
|
|
{
|
|
{
|
|
{0.0f, 0.0f, 0.0f},
|
|
{0.0f, 0.0f, 0.0f},
|
|
{0.0f, 0.0f, 0.0f},
|
|
},
|
|
},
|
|
};
|
|
|
|
/* 8045CB38-8045CB3C -00001 0004+00 1/1 0/0 0/0 .data l_specName */
|
|
SECTION_DATA static const char* const l_specName = "spec.dat";
|
|
|
|
/* 8045CB6C-8045CB9C 0000A8 0030+00 1/2 0/0 0/0 .data mCreateHeapFunc__9daBgObj_c */
|
|
SECTION_DATA createHeapFunc daBgObj_c::mCreateHeapFunc[] = {
|
|
&daBgObj_c::CreateHeapType0,
|
|
&daBgObj_c::CreateHeapType1,
|
|
&daBgObj_c::CreateHeapType1,
|
|
&daBgObj_c::CreateHeapType1,
|
|
};
|
|
|
|
/* 8045CBCC-8045CBFC 000108 0030+00 1/2 0/0 0/0 .data mCreateInitFunc__9daBgObj_c */
|
|
SECTION_DATA createInitFunc daBgObj_c::mCreateInitFunc[] = {
|
|
&daBgObj_c::CreateInitType0,
|
|
&daBgObj_c::CreateInitType1,
|
|
&daBgObj_c::CreateInitType1,
|
|
&daBgObj_c::CreateInitType1,
|
|
};
|
|
|
|
/* 8045A2B8-8045A2F0 000CD8 0038+00 1/0 0/0 0/0 .text Create__9daBgObj_cFv */
|
|
int daBgObj_c::Create() {
|
|
return (this->*mCreateInitFunc[mSpecData.mSpecType])();
|
|
}
|
|
|
|
/* 8045CC2C-8045CC5C 000168 0030+00 1/2 0/0 0/0 .data mExecuteFunc__9daBgObj_c */
|
|
SECTION_DATA executeFunc daBgObj_c::mExecuteFunc[] = {
|
|
&daBgObj_c::ExecuteType0,
|
|
&daBgObj_c::ExecuteType1,
|
|
&daBgObj_c::ExecuteType1,
|
|
&daBgObj_c::ExecuteType1,
|
|
};
|
|
|
|
/* 8045CC98-8045CCD4 0001D4 003C+00 1/2 0/0 0/0 .data mTgSetFunc__9daBgObj_c */
|
|
SECTION_DATA tgSetFunc daBgObj_c::mTgSetFunc[] = {
|
|
&daBgObj_c::set_tri_0, &daBgObj_c::set_tri_1, &daBgObj_c::set_cyl_0,
|
|
&daBgObj_c::set_tri_2, &daBgObj_c::set_tri_3,
|
|
};
|
|
|
|
/* 8045A2F0-8045A52C 000D10 023C+00 1/0 0/0 0/0 .text CreateHeapType0__9daBgObj_cFv */
|
|
int daBgObj_c::CreateHeapType0() {
|
|
for (int i = 0; i < 2; i++) {
|
|
J3DModelData* modelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), getBmdName(0, i));
|
|
if (modelData != NULL) {
|
|
field_0x5a8[0][i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11001284);
|
|
if (field_0x5a8[0][i] == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
field_0x5b8[0][i] = NULL;
|
|
field_0x5c8[0][i] = NULL;
|
|
|
|
J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(
|
|
daSetBgObj_c::getArcName(this), getBtkName(0, i));
|
|
if (btk != NULL) {
|
|
field_0x5b8[0][i] = new mDoExt_btkAnm();
|
|
if (field_0x5b8[0][i] == NULL ||
|
|
!field_0x5b8[0][i]->init(modelData, btk, TRUE, 2, 1.0f, 0, -1))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
field_0x5b8[0][i]->setPlaySpeed(1.0f);
|
|
}
|
|
|
|
J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(
|
|
daSetBgObj_c::getArcName(this), getBrkName(0, i));
|
|
if (brk != NULL) {
|
|
field_0x5c8[0][i] = new mDoExt_brkAnm();
|
|
if (field_0x5c8[0][i] == NULL ||
|
|
!field_0x5c8[0][i]->init(modelData, brk, TRUE, 2, 1.0f, 0, -1))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
field_0x5c8[0][i]->setPlaySpeed(1.0f);
|
|
}
|
|
|
|
field_0x5a8[1][i] = NULL;
|
|
field_0x5b8[1][i] = NULL;
|
|
field_0x5c8[1][i] = NULL;
|
|
}
|
|
}
|
|
|
|
doShareTexture();
|
|
return 1;
|
|
}
|
|
|
|
/* 8045A574-8045A83C 000F94 02C8+00 3/0 0/0 0/0 .text CreateHeapType1__9daBgObj_cFv */
|
|
int daBgObj_c::CreateHeapType1() {
|
|
for (int i = 0; i < 2; i++) {
|
|
for (int j = 0; j < 2; j++) {
|
|
field_0x5a8[i][j] = NULL;
|
|
field_0x5b8[i][j] = NULL;
|
|
field_0x5c8[i][j] = NULL;
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(
|
|
daSetBgObj_c::getArcName(this), getBmdName(i, j));
|
|
if (modelData != NULL) {
|
|
field_0x5a8[i][j] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11001284);
|
|
if (field_0x5a8[i][j] == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(
|
|
daSetBgObj_c::getArcName(this), getBtkName(i, j));
|
|
if (btk != NULL) {
|
|
field_0x5b8[i][j] = new mDoExt_btkAnm();
|
|
if (field_0x5b8[i][j] == NULL ||
|
|
!field_0x5b8[i][j]->init(modelData, btk, TRUE, 2, 1.0f, 0,
|
|
-1))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
field_0x5b8[i][j]->setPlaySpeed(1.0f);
|
|
}
|
|
|
|
J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(
|
|
daSetBgObj_c::getArcName(this), getBrkName(i, j));
|
|
if (brk != NULL) {
|
|
field_0x5c8[i][j] = new mDoExt_brkAnm();
|
|
if (field_0x5c8[i][j] == NULL ||
|
|
!field_0x5c8[i][j]->init(modelData, brk, TRUE, 2, 1.0f, 0,
|
|
-1))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
field_0x5c8[i][j]->setPlaySpeed(1.0f);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
doShareTexture();
|
|
|
|
cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), getDzbName(1));
|
|
if (dzb != NULL) {
|
|
mpBgW2 = new dBgW();
|
|
if (mpBgW2 == NULL || mpBgW2->Set(dzb, cBgW::MOVE_BG_e, &mBgMtx)) {
|
|
mpBgW2 = NULL;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8045A83C-8045A940 00125C 0104+00 2/2 0/0 0/0 .text doShareTexture__9daBgObj_cFv */
|
|
void daBgObj_c::doShareTexture() {
|
|
char res_name[64];
|
|
char share_res_name[64];
|
|
|
|
u8* spec_res_name = mSpecData.mpTexShareBlock + 8;
|
|
|
|
for (int i = 0; i < mSpecData.mTexShareNum; i++) {
|
|
strcpy(res_name, (char*)spec_res_name);
|
|
spec_res_name += strlen((char*)spec_res_name) + 1;
|
|
|
|
J3DModelData* modelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), res_name);
|
|
|
|
if (*spec_res_name != 0) {
|
|
strcpy(share_res_name, (char*)spec_res_name);
|
|
spec_res_name += strlen((char*)spec_res_name) + 1;
|
|
|
|
J3DModelData* shareModelData =
|
|
(J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), share_res_name);
|
|
mDoExt_setupShareTexture(modelData, shareModelData);
|
|
} else if (*spec_res_name == 0 && spec_res_name[1] == 1) {
|
|
spec_res_name += 2;
|
|
mDoExt_setupStageTexture(modelData);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8045A940-8045A9E8 001360 00A8+00 1/0 0/0 0/0 .text CreateHeap__9daBgObj_cFv */
|
|
int daBgObj_c::CreateHeap() {
|
|
const char* const specName = l_specName;
|
|
void* spec_data_p = dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), specName);
|
|
if (field_0xd02 == 0) {
|
|
if (!mSpecData.Set(spec_data_p)) {
|
|
return 0;
|
|
}
|
|
field_0xd02 = 1;
|
|
}
|
|
|
|
return (this->*mCreateHeapFunc[mSpecData.mSpecType])();
|
|
}
|
|
|
|
/* 8045A9E8-8045AAF0 001408 0108+00 1/1 0/0 0/0 .text create1st__9daBgObj_cFv */
|
|
int daBgObj_c::create1st() {
|
|
if (field_0xcc9 == 0) {
|
|
field_0xcca = home.angle.x;
|
|
field_0xccc = home.angle.z;
|
|
field_0xcc9 = 1;
|
|
|
|
home.angle.z = 0;
|
|
home.angle.x = 0;
|
|
current.angle.z = 0;
|
|
current.angle.x = 0;
|
|
shape_angle.z = 0;
|
|
shape_angle.x = 0;
|
|
}
|
|
|
|
int phase = dComIfG_resLoad(&mPhase, daSetBgObj_c::getArcName(this));
|
|
if (phase == cPhs_COMPLEATE_e) {
|
|
int resnameIdx =
|
|
dComIfG_getObjctResName2Index(daSetBgObj_c::getArcName(this), getDzbName(0));
|
|
phase = MoveBGCreate(daSetBgObj_c::getArcName(this), resnameIdx, NULL, 0x80022110, NULL);
|
|
|
|
if (phase == cPhs_ERROR_e) {
|
|
return phase;
|
|
}
|
|
|
|
MoveBGExecute();
|
|
}
|
|
|
|
return phase;
|
|
}
|
|
|
|
/* 8045AAF0-8045AB80 001510 0090+00 1/1 0/0 0/0 .text setColCommon__9daBgObj_cFv */
|
|
void daBgObj_c::setColCommon() {
|
|
if (field_0xcc8 == 0) {
|
|
(this->*mTgSetFunc[mSpecData.field_0x02])();
|
|
}
|
|
|
|
if (mSpecData.field_0x16 == 1) {
|
|
u32 tg_type = mTris[0].GetTgType();
|
|
|
|
for (int i = 0; i < field_0xcc4; i++) {
|
|
mTris[i].SetTgType(tg_type | 0x40);
|
|
}
|
|
|
|
mCyl.SetTgType(tg_type | 0x40);
|
|
}
|
|
}
|
|
|
|
/* 8045AB80-8045ACC0 0015A0 0140+00 1/0 0/0 0/0 .text set_tri_0__9daBgObj_cFv */
|
|
void daBgObj_c::set_tri_0() {
|
|
field_0xcc4 = 2;
|
|
for (int i = 0; i < field_0xcc4; i++) {
|
|
mTris[i].Set(l_tri_src);
|
|
mTris[i].SetStts(&mStts);
|
|
}
|
|
|
|
cXyz cull_params[4];
|
|
cull_params[0].set(fopAcM_getCullSizeBoxMax(this)->x, fopAcM_getCullSizeBoxMin(this)->y, 0.0f);
|
|
cull_params[1].set(fopAcM_getCullSizeBoxMin(this)->x, fopAcM_getCullSizeBoxMin(this)->y, 0.0f);
|
|
cull_params[2].set(fopAcM_getCullSizeBoxMin(this)->x, fopAcM_getCullSizeBoxMax(this)->y, 0.0f);
|
|
cull_params[3].set(fopAcM_getCullSizeBoxMax(this)->x, fopAcM_getCullSizeBoxMax(this)->y, 0.0f);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
for (int i = 0; i < (s32)(sizeof(cull_params) / sizeof(Vec)); i++) {
|
|
mDoMtx_stack_c::multVec(&cull_params[i], &cull_params[i]);
|
|
}
|
|
mTris[0].setPos(&cull_params[0], &cull_params[1], &cull_params[2]);
|
|
mTris[1].setPos(&cull_params[0], &cull_params[2], &cull_params[3]);
|
|
}
|
|
|
|
/* 8045ACC0-8045AE00 0016E0 0140+00 1/0 0/0 0/0 .text set_tri_1__9daBgObj_cFv */
|
|
void daBgObj_c::set_tri_1() {
|
|
field_0xcc4 = 2;
|
|
for (int i = 0; i < field_0xcc4; i++) {
|
|
mTris[i].Set(l_tri_src);
|
|
mTris[i].SetStts(&mStts);
|
|
}
|
|
|
|
cXyz cull_bounds[4];
|
|
cull_bounds[0].set(fopAcM_getCullSizeBoxMax(this)->x, 0.0f, fopAcM_getCullSizeBoxMin(this)->z);
|
|
cull_bounds[1].set(fopAcM_getCullSizeBoxMin(this)->x, 0.0f, fopAcM_getCullSizeBoxMin(this)->z);
|
|
cull_bounds[2].set(fopAcM_getCullSizeBoxMin(this)->x, 0.0f, fopAcM_getCullSizeBoxMax(this)->z);
|
|
cull_bounds[3].set(fopAcM_getCullSizeBoxMax(this)->x, 0.0f, fopAcM_getCullSizeBoxMax(this)->z);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
for (int i = 0; i < (s32)(sizeof(cull_bounds) / sizeof(Vec)); i++) {
|
|
PSMTXMultVec(mDoMtx_stack_c::get(), &cull_bounds[i], &cull_bounds[i]);
|
|
}
|
|
mTris[0].setPos(&cull_bounds[0], &cull_bounds[1], &cull_bounds[2]);
|
|
mTris[1].setPos(&cull_bounds[0], &cull_bounds[2], &cull_bounds[3]);
|
|
}
|
|
|
|
/* 8045AE00-8045AE98 001820 0098+00 1/0 0/0 0/0 .text set_cyl_0__9daBgObj_cFv */
|
|
void daBgObj_c::set_cyl_0() {
|
|
field_0xcc4 = 0;
|
|
mCyl.Set(l_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
|
|
f32 radius;
|
|
if (fopAcM_getCullSizeBoxMax(this)->x > fopAcM_getCullSizeBoxMax(this)->z) {
|
|
radius = fopAcM_getCullSizeBoxMax(this)->x;
|
|
} else {
|
|
radius = fopAcM_getCullSizeBoxMax(this)->z;
|
|
}
|
|
|
|
mCyl.SetC(current.pos);
|
|
mCyl.SetH(fopAcM_getCullSizeBoxMax(this)->y);
|
|
mCyl.SetR(radius);
|
|
}
|
|
|
|
/* 8045AE98-8045AFD4 0018B8 013C+00 1/0 0/0 0/0 .text set_tri_2__9daBgObj_cFv */
|
|
void daBgObj_c::set_tri_2() {
|
|
field_0xcc4 = 2;
|
|
for (int i = 0; i < field_0xcc4; i++) {
|
|
mTris[i].Set(l_tri_src);
|
|
mTris[i].SetStts(&mStts);
|
|
}
|
|
|
|
cXyz cull_bounds[4];
|
|
cull_bounds[0].set(fopAcM_getCullSizeBoxMax(this)->x,
|
|
fopAcM_getCullSizeBoxMin(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
cull_bounds[1].set(fopAcM_getCullSizeBoxMin(this)->x,
|
|
fopAcM_getCullSizeBoxMin(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
cull_bounds[2].set(fopAcM_getCullSizeBoxMin(this)->x,
|
|
fopAcM_getCullSizeBoxMax(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
cull_bounds[3].set(fopAcM_getCullSizeBoxMax(this)->x,
|
|
fopAcM_getCullSizeBoxMax(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
for (int i = 0; i < (s32)(sizeof(cull_bounds) / sizeof(Vec)); i++) {
|
|
PSMTXMultVec(mDoMtx_stack_c::get(), &cull_bounds[i], &cull_bounds[i]);
|
|
}
|
|
mTris[0].setPos(&cull_bounds[0], &cull_bounds[1], &cull_bounds[2]);
|
|
mTris[1].setPos(&cull_bounds[0], &cull_bounds[2], &cull_bounds[3]);
|
|
}
|
|
|
|
/* 8045AFD4-8045B17C 0019F4 01A8+00 1/0 0/0 0/0 .text set_tri_3__9daBgObj_cFv */
|
|
void daBgObj_c::set_tri_3() {
|
|
field_0xcc4 = 4;
|
|
for (int i = 0; i < field_0xcc4; i++) {
|
|
mTris[i].Set(l_tri_src);
|
|
mTris[i].SetStts(&mStts);
|
|
}
|
|
|
|
cXyz cull_bounds[8];
|
|
cull_bounds[0].set(fopAcM_getCullSizeBoxMax(this)->x,
|
|
fopAcM_getCullSizeBoxMin(this)->y,
|
|
fopAcM_getCullSizeBoxMin(this)->z);
|
|
cull_bounds[1].set(fopAcM_getCullSizeBoxMin(this)->x,
|
|
fopAcM_getCullSizeBoxMin(this)->y,
|
|
fopAcM_getCullSizeBoxMin(this)->z);
|
|
cull_bounds[2].set(fopAcM_getCullSizeBoxMin(this)->x,
|
|
fopAcM_getCullSizeBoxMax(this)->y,
|
|
fopAcM_getCullSizeBoxMin(this)->z);
|
|
cull_bounds[3].set(fopAcM_getCullSizeBoxMax(this)->x,
|
|
fopAcM_getCullSizeBoxMax(this)->y,
|
|
fopAcM_getCullSizeBoxMin(this)->z);
|
|
cull_bounds[4].set(fopAcM_getCullSizeBoxMax(this)->x,
|
|
fopAcM_getCullSizeBoxMin(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
cull_bounds[5].set(fopAcM_getCullSizeBoxMin(this)->x,
|
|
fopAcM_getCullSizeBoxMin(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
cull_bounds[6].set(fopAcM_getCullSizeBoxMin(this)->x,
|
|
fopAcM_getCullSizeBoxMax(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
cull_bounds[7].set(fopAcM_getCullSizeBoxMax(this)->x,
|
|
fopAcM_getCullSizeBoxMax(this)->y,
|
|
fopAcM_getCullSizeBoxMax(this)->z);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
for (int i = 0; i < 8; i++) {
|
|
Vec* src = &cull_bounds[i];
|
|
mDoMtx_stack_c::multVec(src, src);
|
|
}
|
|
mTris[0].setPos(&cull_bounds[0], &cull_bounds[1], &cull_bounds[2]);
|
|
mTris[1].setPos(&cull_bounds[0], &cull_bounds[2], &cull_bounds[3]);
|
|
mTris[2].setPos(&cull_bounds[4], &cull_bounds[5], &cull_bounds[6]);
|
|
mTris[3].setPos(&cull_bounds[4], &cull_bounds[6], &cull_bounds[7]);
|
|
}
|
|
|
|
struct blockItem {
|
|
u32 flags;
|
|
u32 res_id;
|
|
u8 primA;
|
|
u8 primR;
|
|
u8 primG;
|
|
u8 primB;
|
|
u8 envA;
|
|
u8 envR;
|
|
u8 envG;
|
|
u8 envB;
|
|
};
|
|
|
|
/* 8045B17C-8045B3A0 001B9C 0224+00 3/3 0/0 0/0 .text setParticle__9daBgObj_cFv */
|
|
void daBgObj_c::setParticle() {
|
|
u32 partNum = mSpecData.mParticleNum;
|
|
u32* partBlockItems = (u32*)mSpecData.mpParticleBlock;
|
|
partBlockItems++;
|
|
for (; partNum != 0; partNum--) {
|
|
u32 flags = *partBlockItems++;
|
|
u16 res_id = *partBlockItems;
|
|
*partBlockItems++;
|
|
|
|
GXColor prmColor = { 0xFF, 0xFF, 0xFF, 0xFF };
|
|
GXColor envColor = { 0xFF, 0xFF, 0xFF, 0xFF };
|
|
|
|
u8 alpha = 0xff;
|
|
GXColor* prmColorPtr = NULL;
|
|
GXColor* envColorPtr = NULL;
|
|
|
|
u8 hasColor = 0;
|
|
|
|
u8* pColors = (u8*)partBlockItems;
|
|
if ((flags & 0x80000000) != 0) {
|
|
prmColor.r = pColors[1];
|
|
prmColor.g = pColors[2];
|
|
prmColor.b = pColors[3];
|
|
hasColor = 1;
|
|
}
|
|
if ((flags & 0x40000000) != 0) {
|
|
alpha = pColors[0];
|
|
}
|
|
pColors += 4;
|
|
if ((flags & 0x20000000) != 0) {
|
|
envColor.a = pColors[0];
|
|
envColor.r = pColors[1];
|
|
envColor.g = pColors[2];
|
|
envColor.b = pColors[3];
|
|
hasColor = 1;
|
|
}
|
|
f32 fVar2 = 0.0f;
|
|
if (hasColor) {
|
|
prmColorPtr = &prmColor;
|
|
envColorPtr = &envColor;
|
|
fVar2 = 1.0f;
|
|
}
|
|
|
|
dKy_tevstr_c* status;
|
|
u8 modelNumber = (flags & 0xf00000) >> 20;
|
|
u8 unusedFlag = (flags & 0xf0000) >> 16;
|
|
if (modelNumber != 0) {
|
|
J3DModelData* bmd = NULL;
|
|
int unused_sp28 = 0;
|
|
cXyz scale(1.0f, 1.0f, 1.0f);
|
|
switch (modelNumber) {
|
|
case 1:
|
|
bmd = (J3DModelData*)dComIfG_getObjectRes("Always", "BreakWoodBox.bmd");
|
|
JUT_ASSERT(1683, bmd != 0);
|
|
scale.setall(KREG_F(29) + 0.9f);
|
|
break;
|
|
default:
|
|
// Multi MoveBG: Particle model number is invalid <%d>
|
|
OS_REPORT_ERROR("マルチMoveBG:パーティクルモデル番号が不正<%d>\n", modelNumber);
|
|
JUT_PANIC(1689, "0");
|
|
break;
|
|
}
|
|
JPABaseEmitter* emitter = dComIfGp_particle_set(
|
|
res_id,
|
|
¤t.pos,
|
|
&mRotation,
|
|
NULL,
|
|
0xff,
|
|
&dPa_modelEcallBack::getEcallback(),
|
|
fopAcM_GetRoomNo(this),
|
|
NULL,
|
|
NULL,
|
|
&scale
|
|
);
|
|
dPa_modelEcallBack::setModel(emitter, bmd, tevStr, 3, NULL, 0, 0);
|
|
} else {
|
|
fopAc_ac_c* unused_player = dComIfGp_getPlayer(0);
|
|
dComIfGp_particle_setColor(
|
|
res_id,
|
|
¤t.pos,
|
|
dComIfGp_roomControl_getTevStr(fopAcM_GetRoomNo(this)),
|
|
prmColorPtr,
|
|
envColorPtr,
|
|
fVar2,
|
|
alpha,
|
|
&mRotation,
|
|
NULL,
|
|
NULL,
|
|
fopAcM_GetRoomNo(this),
|
|
NULL
|
|
);
|
|
}
|
|
partBlockItems += 2;
|
|
}
|
|
}
|
|
|
|
/* 8045B3A0-8045B44C 001DC0 00AC+00 3/3 0/0 0/0 .text setSe__9daBgObj_cFv */
|
|
void daBgObj_c::setSe() {
|
|
u32 i = mSpecData.mSoundNum;
|
|
u32* temp = (u32*)mSpecData.mpSoundBlock;
|
|
temp++;
|
|
|
|
for (; i != 0; i--) {
|
|
fopAcM_seStart(this, *temp, 0);
|
|
temp++;
|
|
}
|
|
}
|
|
|
|
|
|
/* 8045B44C-8045B534 001E6C 00E8+00 1/1 0/0 0/0 .text checkDestroy__9daBgObj_cFv */
|
|
BOOL daBgObj_c::checkDestroy() {
|
|
if (mSpecData.mSpecType != 1 && mSpecData.mSpecType != 2) {
|
|
return false;
|
|
}
|
|
|
|
if (!fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this)) &&
|
|
(daBgObj_prm::getSwBit2(this) == 0xFF ||
|
|
(fopAcM_isSwitch(this, daBgObj_prm::getSwBit2(this)) &&
|
|
daBgObj_prm::getObjArg0(this) == 0xFF) ||
|
|
(daBgObj_prm::getSwBit2(this) != 0xFF &&
|
|
!fopAcM_isSwitch(this, daBgObj_prm::getSwBit2(this)) &&
|
|
daBgObj_prm::getObjArg0(this) == 0)))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 8045B534-8045B5E0 001F54 00AC+00 2/2 0/0 0/0 .text checkHitAt__9daBgObj_cFP8cCcD_Obj
|
|
*/
|
|
BOOL daBgObj_c::checkHitAt(cCcD_Obj* i_hitObj) {
|
|
u32 hit_flags = 0;
|
|
u32 var_r8 = 0;
|
|
|
|
if (i_hitObj != NULL) {
|
|
switch (mSpecData.mSpecType) {
|
|
case 1:
|
|
var_r8 = i_hitObj->ChkAtType(AT_TYPE_IRON_BALL) && i_hitObj->GetAtAtp() == 3;
|
|
hit_flags = var_r8 | i_hitObj->ChkAtType(AT_TYPE_BOMB);
|
|
break;
|
|
case 2:
|
|
u32 tmp2 = i_hitObj->ChkAtType(AT_TYPE_IRON_BALL);
|
|
var_r8 = tmp2;
|
|
hit_flags =
|
|
tmp2 |
|
|
(i_hitObj->ChkAtType(AT_TYPE_NORMAL_SWORD) | i_hitObj->ChkAtType(AT_TYPE_BOMB) |
|
|
i_hitObj->ChkAtType(AT_TYPE_CSTATUE_SWING) | i_hitObj->ChkAtType(AT_TYPE_UNK));
|
|
break;
|
|
}
|
|
|
|
field_0xd01 = i_hitObj->ChkAtType(AT_TYPE_BOMB) != 0;
|
|
field_0xd01 |= var_r8 != 0;
|
|
}
|
|
|
|
return hit_flags != 0;
|
|
}
|
|
|
|
/* 8045B5E0-8045B7FC 002000 021C+00 1/1 0/0 0/0 .text orderWait_tri__9daBgObj_cFv */
|
|
void daBgObj_c::orderWait_tri() {
|
|
for (int i = 0; i < field_0xcc4; i++) {
|
|
if (mTris[i].ChkTgHit()) {
|
|
if (checkHitAt(mTris[i].GetTgHitObj())) {
|
|
setSe();
|
|
|
|
fopAc_ac_c* hit_ac = mTris[i].GetTgHitAc();
|
|
if (hit_ac != NULL) {
|
|
cXyz sp1C(hit_ac->current.pos);
|
|
sp1C = sp1C - current.pos;
|
|
|
|
mDoMtx_stack_c::YrotS(-shape_angle.y);
|
|
mDoMtx_stack_c::multVec(&sp1C, &sp1C);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
|
|
cXyz sp28;
|
|
if (sp1C.z > 0.0f) {
|
|
sp28 = cXyz(0.0, 0.0, 1.0);
|
|
} else {
|
|
sp28 = cXyz(0.0, 0.0, -1.0);
|
|
}
|
|
|
|
mDoMtx_stack_c::multVec(&sp28, &sp28);
|
|
sp28 = sp28 - current.pos;
|
|
|
|
mRotation.y = cM_atan2s(sp28.x, sp28.z);
|
|
}
|
|
|
|
setParticle();
|
|
setAction(1);
|
|
break;
|
|
}
|
|
|
|
mTris[i].ClrTgHit();
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < field_0xcc4; i++) {
|
|
dComIfG_Ccsp()->Set(&mTris[i]);
|
|
}
|
|
}
|
|
|
|
|
|
/* 8045B7FC-8045B9C4 00221C 01C8+00 1/1 0/0 0/0 .text orderWait_cyl__9daBgObj_cFv */
|
|
void daBgObj_c::orderWait_cyl() {
|
|
if (mCyl.ChkTgHit()) {
|
|
cCcD_Obj* hitObj = mCyl.GetTgHitObj();
|
|
if (checkHitAt(hitObj)) {
|
|
setSe();
|
|
|
|
fopAc_ac_c* hit_ac = mCyl.GetTgHitAc();
|
|
if (hit_ac != NULL) {
|
|
cXyz sp1C(hit_ac->current.pos);
|
|
sp1C = sp1C - current.pos;
|
|
|
|
mDoMtx_stack_c::YrotS(-shape_angle.y);
|
|
mDoMtx_stack_c::multVec(&sp1C, &sp1C);
|
|
cXyz sp28;
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
|
|
if (sp1C.z > 0.0f) {
|
|
sp28 = cXyz(0.0f, 0.0f, 1.0f);
|
|
} else {
|
|
sp28 = cXyz(0.0f, 0.0f, -1.0f);
|
|
}
|
|
|
|
mDoMtx_stack_c::multVec(&sp28, &sp28);
|
|
sp28 = sp28 - current.pos;
|
|
|
|
mRotation.y = cM_atan2s(sp28.x, sp28.z);
|
|
}
|
|
|
|
setParticle();
|
|
setAction(1);
|
|
}
|
|
|
|
mCyl.ClrTgHit();
|
|
}
|
|
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
}
|
|
|
|
/* 8045B9C4-8045BB38 0023E4 0174+00 1/1 0/0 0/0 .text orderWait_spec__9daBgObj_cFv */
|
|
void daBgObj_c::orderWait_spec() {
|
|
setSe();
|
|
|
|
fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
|
|
if (player_p != NULL) {
|
|
cXyz sp1C(player_p->current.pos);
|
|
sp1C = sp1C - current.pos;
|
|
|
|
mDoMtx_stack_c::YrotS(-shape_angle.y);
|
|
mDoMtx_stack_c::multVec(&sp1C, &sp1C);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
|
|
cXyz sp28;
|
|
if (sp1C.z > 0.0f) {
|
|
sp28 = cXyz(0.0, 0.0, 1.0);
|
|
} else {
|
|
sp28 = cXyz(0.0, 0.0, -1.0);
|
|
}
|
|
|
|
mDoMtx_stack_c::multVec(&sp28, &sp28);
|
|
sp28 = sp28 - current.pos;
|
|
|
|
mRotation.y = cM_atan2s(sp28.x, sp28.z);
|
|
}
|
|
|
|
setParticle();
|
|
setAction(1);
|
|
}
|
|
|
|
|
|
/* 8045BB38-8045BBE0 002558 00A8+00 1/0 0/0 0/0 .text actionOrderWait__9daBgObj_cFv */
|
|
int daBgObj_c::actionOrderWait() {
|
|
if (checkDestroy()) {
|
|
switch (mSpecData.field_0x02) {
|
|
case 0:
|
|
case 1:
|
|
case 3:
|
|
case 4:
|
|
orderWait_tri();
|
|
break;
|
|
case 2:
|
|
orderWait_cyl();
|
|
break;
|
|
}
|
|
} else if (fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this))) {
|
|
orderWait_spec();
|
|
field_0xd00 = 1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8045BBE0-8045BD50 002600 0170+00 1/0 0/0 0/0 .text actionOrder__9daBgObj_cFv */
|
|
int daBgObj_c::actionOrder() {
|
|
if (eventInfo.checkCommandDemoAccrpt()) {
|
|
setAction(2);
|
|
|
|
if (field_0xd01 < 5) {
|
|
dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
} else {
|
|
if (daBgObj_prm::getEvId(this) != 0xFF) {
|
|
fopAcM_orderOtherEventId(this, mEventIdx, daBgObj_prm::getEvId(this), 0xFFFF, 0, 1);
|
|
} else {
|
|
setAction(3);
|
|
}
|
|
|
|
if (!fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this)) || field_0xd00 != 0 ||
|
|
field_0xcc8 == 0)
|
|
{
|
|
release(mpBgW);
|
|
regist(mpBgW2);
|
|
field_0xcc8 = 1;
|
|
|
|
settingCullSizeBoxForCull(field_0xcc8);
|
|
|
|
fopAc_ac_c* attn_actor_p = fopAcM_SearchByID(mAttnActorID);
|
|
if (attn_actor_p != NULL) {
|
|
setAttentionInfo(attn_actor_p);
|
|
}
|
|
|
|
fopAcM_onSwitch(this, daBgObj_prm::getSwBit(this));
|
|
field_0xd00 = 0;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
/* 8045BD50-8045BDB0 002770 0060+00 1/0 0/0 0/0 .text actionEvent__9daBgObj_cFv */
|
|
int daBgObj_c::actionEvent() {
|
|
if (dComIfGp_evmng_endCheck(mEventIdx)) {
|
|
setAction(3);
|
|
dComIfGp_event_reset();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8045BDB0-8045BDB8 0027D0 0008+00 1/0 0/0 0/0 .text actionWait__9daBgObj_cFv */
|
|
int daBgObj_c::actionWait() {
|
|
return 1;
|
|
}
|
|
|
|
/* 8045BDB8-8045BED0 0027D8 0118+00 1/0 0/0 0/0 .text ExecuteType0__9daBgObj_cFv */
|
|
int daBgObj_c::ExecuteType0() {
|
|
u8 swBit = daBgObj_prm::getSwBit(this);
|
|
u8 arg0 = daBgObj_prm::getObjArg0(this);
|
|
|
|
if (swBit != 0xFF) {
|
|
if (arg0 == 0xFF) {
|
|
if (fopAcM_isSwitch(this, swBit)) {
|
|
if (field_0xcc8 == 1) {
|
|
regist(mpBgW);
|
|
field_0xcc8 = 0;
|
|
}
|
|
} else if (field_0xcc8 == 0) {
|
|
release(mpBgW);
|
|
field_0xcc8 = 1;
|
|
}
|
|
} else if (arg0 == 0) {
|
|
if (fopAcM_isSwitch(this, swBit)) {
|
|
if (field_0xcc8 == 0) {
|
|
release(mpBgW);
|
|
field_0xcc8 = 1;
|
|
}
|
|
} else if (field_0xcc8 == 1) {
|
|
regist(mpBgW);
|
|
field_0xcc8 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8045BED0-8045BFBC 0028F0 00EC+00 3/0 0/0 0/0 .text ExecuteType1__9daBgObj_cFv */
|
|
int daBgObj_c::ExecuteType1() {
|
|
static actionFunc l_func[] = {&daBgObj_c::actionOrderWait, &daBgObj_c::actionOrder,
|
|
&daBgObj_c::actionEvent, &daBgObj_c::actionWait};
|
|
|
|
(this->*l_func[mAction])();
|
|
|
|
if (field_0xd01 != 0 && field_0xd01 < 100) {
|
|
field_0xd01++;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8045BFBC-8045C078 0029DC 00BC+00 1/0 0/0 0/0 .text Execute__9daBgObj_cFPPA3_A4_f */
|
|
int daBgObj_c::Execute(f32 (**param_0)[3][4]) {
|
|
(this->*mExecuteFunc[mSpecData.mSpecType])();
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
if (field_0x5b8[field_0xcc8][i] != NULL) {
|
|
field_0x5b8[field_0xcc8][i]->play();
|
|
}
|
|
|
|
if (field_0x5c8[field_0xcc8][i] != NULL) {
|
|
field_0x5c8[field_0xcc8][i]->play();
|
|
}
|
|
}
|
|
|
|
*param_0 = &mBgMtx;
|
|
setBaseMtx();
|
|
return 1;
|
|
}
|
|
|
|
/* 8045C078-8045C25C 002A98 01E4+00 1/0 0/0 0/0 .text Draw__9daBgObj_cFv */
|
|
int daBgObj_c::Draw() {
|
|
bool bvar = true;
|
|
for (int i = 0; i < 2; i++) {
|
|
if (field_0x5a8[field_0xcc8][i] != NULL) {
|
|
bvar = false;
|
|
}
|
|
}
|
|
|
|
if (bvar) {
|
|
return 1;
|
|
}
|
|
|
|
g_env_light.settingTevStruct(0x20, ¤t.pos, &tevStr);
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
if (field_0x5a8[field_0xcc8][i] != NULL) {
|
|
g_env_light.setLightTevColorType_MAJI(field_0x5a8[field_0xcc8][i], &tevStr);
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
dComIfGd_setListBG();
|
|
if (field_0x5a8[field_0xcc8][i] != NULL) {
|
|
indirectProc(field_0x5a8[field_0xcc8][i]);
|
|
dKy_bg_MAxx_proc(field_0x5a8[field_0xcc8][i]);
|
|
|
|
if (field_0x5b8[field_0xcc8][i] != NULL) {
|
|
field_0x5b8[field_0xcc8][i]->entry(field_0x5a8[field_0xcc8][i]->getModelData());
|
|
}
|
|
|
|
if (field_0x5c8[field_0xcc8][i] != NULL) {
|
|
field_0x5c8[field_0xcc8][i]->entry(field_0x5a8[field_0xcc8][i]->getModelData());
|
|
}
|
|
|
|
mDoExt_modelUpdateDL(field_0x5a8[field_0xcc8][i]);
|
|
}
|
|
}
|
|
|
|
dComIfGd_setList();
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8045C25C-8045C2E8 002C7C 008C+00 1/1 0/0 0/0 .text indirectProc__9daBgObj_cFP8J3DModel
|
|
*/
|
|
void daBgObj_c::indirectProc(J3DModel* i_model) {
|
|
if (i_model != NULL) {
|
|
J3DModelData* modelData = i_model->getModelData();
|
|
|
|
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
|
|
J3DMaterial* mat_p = modelData->getMaterialNodePointer(i);
|
|
mat_p->change();
|
|
mat_p->setCullMode(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8045C2E8-8045C330 002D08 0048+00 1/0 0/0 0/0 .text Delete__9daBgObj_cFv */
|
|
int daBgObj_c::Delete() {
|
|
release(mpBgW2);
|
|
dComIfG_resDelete(&mPhase, daSetBgObj_c::getArcName(this));
|
|
return 1;
|
|
}
|
|
|
|
/* 8045C330-8045C444 002D50 0114+00 1/0 0/0 0/0 .text daBgObj_create1st__FP9daBgObj_c */
|
|
static int daBgObj_create1st(daBgObj_c* i_this) {
|
|
fopAcM_SetupActor(i_this, daBgObj_c);
|
|
|
|
return i_this->create1st();
|
|
}
|
|
|
|
/* 8045C744-8045C764 003164 0020+00 1/0 0/0 0/0 .text daBgObj_MoveBGDelete__FP9daBgObj_c
|
|
*/
|
|
static int daBgObj_MoveBGDelete(daBgObj_c* i_this) {
|
|
return i_this->MoveBGDelete();
|
|
}
|
|
|
|
/* 8045C764-8045C784 003184 0020+00 1/0 0/0 0/0 .text daBgObj_MoveBGExecute__FP9daBgObj_c
|
|
*/
|
|
static int daBgObj_MoveBGExecute(daBgObj_c* i_this) {
|
|
return i_this->MoveBGExecute();
|
|
}
|
|
|
|
/* 8045C784-8045C7B0 0031A4 002C+00 1/0 0/0 0/0 .text daBgObj_MoveBGDraw__FP9daBgObj_c */
|
|
static int daBgObj_MoveBGDraw(daBgObj_c* i_this) {
|
|
return i_this->MoveBGDraw();
|
|
}
|
|
|
|
/* 8045CD34-8045CD54 -00001 0020+00 1/0 0/0 0/0 .data daBgObj_METHODS */
|
|
static actor_method_class daBgObj_METHODS = {
|
|
(process_method_func)daBgObj_create1st,
|
|
(process_method_func)daBgObj_MoveBGDelete,
|
|
(process_method_func)daBgObj_MoveBGExecute,
|
|
(process_method_func)NULL,
|
|
(process_method_func)daBgObj_MoveBGDraw,
|
|
};
|
|
|
|
/* 8045CD54-8045CD84 -00001 0030+00 0/0 0/0 1/0 .data g_profile_BG_OBJ */
|
|
extern actor_process_profile_definition g_profile_BG_OBJ = {
|
|
fpcLy_CURRENT_e,
|
|
7,
|
|
fpcPi_CURRENT_e,
|
|
PROC_BG_OBJ,
|
|
&g_fpcLf_Method.base,
|
|
sizeof(daBgObj_c),
|
|
0,
|
|
0,
|
|
&g_fopAc_Method.base,
|
|
752,
|
|
&daBgObj_METHODS,
|
|
0x10044100,
|
|
fopAc_ACTOR_e,
|
|
fopAc_CULLBOX_CUSTOM_e,
|
|
};
|