mirror of https://github.com/zeldaret/tp.git
725 lines
24 KiB
C++
725 lines
24 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: d_a_vrbox2
|
|
//
|
|
|
|
#include "rel/d/a/d_a_vrbox2/d_a_vrbox2.h"
|
|
#include "JSystem/J3DGraphBase/J3DMaterial.h"
|
|
#include "JSystem/JKernel/JKRHeap.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "d/com/d_com_inf_game.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/kankyo/d_kankyo_rain.h"
|
|
#include "dol2asm.h"
|
|
|
|
//
|
|
// Types:
|
|
//
|
|
|
|
class vrbox2_class : public fopAc_ac_c {
|
|
public:
|
|
/* 0x568 */ u8 field_0x568[0x56C - 0x568];
|
|
/* 0x56C */ J3DModel* mpKumoModel;
|
|
/* 0x570 */ u8 field_0x570[0x574 - 0x570];
|
|
/* 0x574 */ J3DModel* model2;
|
|
/* 0x578 */ J3DModel* model2_und;
|
|
/* 0x57C */ u8 field_0x57C[0x580 - 0x57C];
|
|
/* 0x580 */ mDoExt_btkAnm mSunBtk;
|
|
/* 0x598 */ J3DModel* mpKasumimModel;
|
|
/* 0x59C */ u8 field_0x59C[0x5A0 - 0x59C];
|
|
};
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" static void texScrollCheck__FRf();
|
|
extern "C" static void daVrbox2_Draw__FP12vrbox2_class();
|
|
extern "C" static void daVrbox2_color_set__FP12vrbox2_class();
|
|
extern "C" static void daVrbox2_Execute__FP12vrbox2_class();
|
|
extern "C" static bool daVrbox2_IsDelete__FP12vrbox2_class();
|
|
extern "C" static bool daVrbox2_Delete__FP12vrbox2_class();
|
|
extern "C" static void daVrbox2_solidHeapCB__FP10fopAc_ac_c();
|
|
extern "C" static void daVrbox2_Create__FP10fopAc_ac_c();
|
|
extern "C" void __dt__12J3DFrameCtrlFv();
|
|
extern "C" extern char const* const d_a_vrbox2__stringBase0;
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void mDoMtx_XrotM__FPA4_fs();
|
|
extern "C" void mDoMtx_YrotM__FPA4_fs();
|
|
extern "C" void mDoMtx_ZrotM__FPA4_fs();
|
|
extern "C" void scaleM__14mDoMtx_stack_cFfff();
|
|
extern "C" void play__14mDoExt_baseAnmFv();
|
|
extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
|
|
extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
|
|
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
|
|
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
|
|
extern "C" void __ct__10fopAc_ac_cFv();
|
|
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
|
|
extern "C" void getStatusRoomDt__20dStage_roomControl_cFi();
|
|
extern "C" void dComIfG_getStageRes__FPCc();
|
|
extern "C" void dKyw_get_wind_vec__Fv();
|
|
extern "C" void dKyw_get_wind_pow__Fv();
|
|
extern "C" void dKyr_get_vectle_calc__FP4cXyzP4cXyzP4cXyz();
|
|
extern "C" void dKy_get_parcent__Ffff();
|
|
extern "C" void dKy_GxFog_set__Fv();
|
|
extern "C" void cM_rndF__Ff();
|
|
extern "C" void cM3d_VectorProduct2d__Fffffff();
|
|
extern "C" void cLib_addCalc__FPfffff();
|
|
extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
|
|
extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz();
|
|
extern "C" void __dl__FPv();
|
|
extern "C" void init__12J3DFrameCtrlFs();
|
|
extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
|
|
extern "C" void _savegpr_17();
|
|
extern "C" void _savegpr_25();
|
|
extern "C" void _restgpr_17();
|
|
extern "C" void _restgpr_25();
|
|
extern "C" u8 now__14mDoMtx_stack_c[48];
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
static int daVrbox2_color_set(vrbox2_class* param_0);
|
|
|
|
/* ############################################################################################## */
|
|
/* 80499A6C-80499A70 000000 0004+00 4/4 0/0 0/0 .rodata @3627 */
|
|
SECTION_RODATA static f32 const lit_3627 = 1.0f;
|
|
COMPILER_STRIP_GATE(0x80499A6C, &lit_3627);
|
|
|
|
/* 80499A70-80499A74 000004 0004+00 1/3 0/0 0/0 .rodata @3628 */
|
|
SECTION_RODATA static u8 const lit_3628[4] = {
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
};
|
|
COMPILER_STRIP_GATE(0x80499A70, &lit_3628);
|
|
|
|
/* 80498A78-80498ACC 000078 0054+00 1/1 0/0 0/0 .text texScrollCheck__FRf */
|
|
// matches with literals
|
|
#ifdef NONMATCHING
|
|
static void texScrollCheck(f32& param_0) {
|
|
while (param_0 < 0.0f)
|
|
param_0 += 1.0f;
|
|
|
|
while (param_0 > 1.0f)
|
|
param_0 -= 1.0f;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm void texScrollCheck(f32& param_0) {
|
|
nofralloc
|
|
#include "asm/rel/d/a/d_a_vrbox2/d_a_vrbox2/texScrollCheck__FRf.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* ############################################################################################## */
|
|
/* 80499A74-80499A78 000008 0004+00 0/1 0/0 0/0 .rodata @3835 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3835 = 9.0f / 100.0f;
|
|
COMPILER_STRIP_GATE(0x80499A74, &lit_3835);
|
|
#pragma pop
|
|
|
|
/* 80499A78-80499A7C 00000C 0004+00 0/1 0/0 0/0 .rodata @3836 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3836 = 8000.0f;
|
|
COMPILER_STRIP_GATE(0x80499A78, &lit_3836);
|
|
#pragma pop
|
|
|
|
/* 80499A7C-80499A80 000010 0004+00 1/3 0/0 0/0 .rodata @3837 */
|
|
SECTION_RODATA static f32 const lit_3837 = 255.0f;
|
|
COMPILER_STRIP_GATE(0x80499A7C, &lit_3837);
|
|
|
|
/* 80499A80-80499A84 000014 0004+00 0/1 0/0 0/0 .rodata @3838 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3838 = 2.0f / 5.0f;
|
|
COMPILER_STRIP_GATE(0x80499A80, &lit_3838);
|
|
#pragma pop
|
|
|
|
/* 80499A84-80499A88 000018 0004+00 0/1 0/0 0/0 .rodata @3839 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3839 = 270.0f;
|
|
COMPILER_STRIP_GATE(0x80499A84, &lit_3839);
|
|
#pragma pop
|
|
|
|
/* 80499A88-80499A8C 00001C 0004+00 0/1 0/0 0/0 .rodata @3840 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3840 = 240.0f;
|
|
COMPILER_STRIP_GATE(0x80499A88, &lit_3840);
|
|
#pragma pop
|
|
|
|
/* 80499A8C-80499A90 000020 0004+00 0/2 0/0 0/0 .rodata @3841 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3841 = 1.0f / 5.0f;
|
|
COMPILER_STRIP_GATE(0x80499A8C, &lit_3841);
|
|
#pragma pop
|
|
|
|
/* 80499A90-80499A94 000024 0004+00 0/1 0/0 0/0 .rodata @3842 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3842 = 300.0f;
|
|
COMPILER_STRIP_GATE(0x80499A90, &lit_3842);
|
|
#pragma pop
|
|
|
|
/* 80499A94-80499A98 000028 0004+00 0/1 0/0 0/0 .rodata @3843 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3843 = 17.0f / 20.0f;
|
|
COMPILER_STRIP_GATE(0x80499A94, &lit_3843);
|
|
#pragma pop
|
|
|
|
/* 80499A98-80499A9C 00002C 0004+00 0/1 0/0 0/0 .rodata @3844 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3844 = 3.0f / 20.0f;
|
|
COMPILER_STRIP_GATE(0x80499A98, &lit_3844);
|
|
#pragma pop
|
|
|
|
/* 80499A9C-80499AA0 000030 0004+00 0/1 0/0 0/0 .rodata @3845 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3845 = 483.0f;
|
|
COMPILER_STRIP_GATE(0x80499A9C, &lit_3845);
|
|
#pragma pop
|
|
|
|
/* 80499AA0-80499AA4 000034 0004+00 0/1 0/0 0/0 .rodata @3846 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_3846 = 100.0f;
|
|
COMPILER_STRIP_GATE(0x80499AA0, &lit_3846);
|
|
#pragma pop
|
|
|
|
/* 80499AC4-80499AC4 000058 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_80499AC4 = "F_SP102";
|
|
SECTION_DEAD static char const* const stringBase_80499ACC = "F_SP127";
|
|
#pragma pop
|
|
|
|
/* 80499B78-80499B7C 000000 0002+02 1/1 0/0 0/0 .bss mangZ$3688 */
|
|
static s16 mangZ;
|
|
|
|
/* 80498ACC-804990DC 0000CC 0610+00 1/0 0/0 0/0 .text daVrbox2_Draw__FP12vrbox2_class */
|
|
// reg alloc
|
|
#ifdef NONMATCHING
|
|
static int daVrbox2_Draw(vrbox2_class* i_this) {
|
|
cXyz sp14;
|
|
cXyz sp8;
|
|
|
|
camera_class* camera_p = dComIfGp_getCamera(0);
|
|
dKankyo_sunlenz_Packet* lenz_p = g_env_light.mpSunLenzPacket;
|
|
J3DModel* kumo_model_p = i_this->mpKumoModel;
|
|
J3DModel* sun_model_p = i_this->model2;
|
|
J3DModel* sun2_model_p = i_this->model2_und;
|
|
J3DModel* kasumim_model_p = i_this->mpKasumimModel;
|
|
dKankyo_sun_Packet* sun_p = g_env_light.mpSunPacket;
|
|
|
|
f32 var_f31 = 0.0f;
|
|
dStage_FileList_dt_c* filelist_p = NULL;
|
|
dKy_GxFog_set();
|
|
|
|
// these casts look like fake matches, but this ptr is used as both J3DModel and J3DModelData?
|
|
for (int i = ((J3DModelData*)kumo_model_p)->getMaterialNum() - 1; i >= 0; i--) {
|
|
J3DMaterial* material_p = ((J3DModelData*)kumo_model_p)->getMaterialNodePointer(i);
|
|
|
|
J3DFogInfo* fogInfo_p;
|
|
if (material_p != NULL) {
|
|
fogInfo_p = material_p->getFog()->getFogInfo();
|
|
}
|
|
|
|
fogInfo_p->field_0x0 = 2;
|
|
}
|
|
|
|
// these casts look like fake matches, but this ptr is used as both J3DModel and J3DModelData?
|
|
for (int i = ((J3DModelData*)sun_model_p)->getMaterialNum() - 1; i >= 0; i--) {
|
|
J3DMaterial* material_p = ((J3DModelData*)sun_model_p)->getMaterialNodePointer(i);
|
|
|
|
J3DFogInfo* fogInfo_p;
|
|
if (material_p != NULL) {
|
|
fogInfo_p = material_p->getFog()->getFogInfo();
|
|
}
|
|
|
|
fogInfo_p->field_0x0 = 2;
|
|
}
|
|
|
|
// these casts look like fake matches, but this ptr is used as both J3DModel and J3DModelData?
|
|
for (int i = ((J3DModelData*)kasumim_model_p)->getMaterialNum() - 1; i >= 0; i--) {
|
|
J3DMaterial* material_p = ((J3DModelData*)kasumim_model_p)->getMaterialNodePointer(i);
|
|
|
|
J3DFogInfo* fogInfo_p;
|
|
if (material_p != NULL) {
|
|
fogInfo_p = material_p->getFog()->getFogInfo();
|
|
}
|
|
|
|
fogInfo_p->field_0x0 = 2;
|
|
}
|
|
|
|
if ((g_env_light.mVrKasumiCol.r + g_env_light.mVrKasumiCol.g +
|
|
g_env_light.mVrKasumiCol.b + g_env_light.mVrSkyCol.r + g_env_light.mVrSkyCol.g +
|
|
g_env_light.mVrSkyCol.b + g_env_light.mVrkumoCol.r + g_env_light.mVrkumoCol.g +
|
|
g_env_light.mVrkumoCol.b) == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
i_this->mSunBtk.entry(i_this->model2->getModelData());
|
|
daVrbox2_color_set(i_this);
|
|
|
|
if (dComIfGp_roomControl_getStayNo() >= 0) {
|
|
s32 stayNo = dComIfGp_roomControl_getStayNo();
|
|
filelist_p = dComIfGp_roomControl_getStatusRoomDt(stayNo)->mRoomDt.getFileListInfo();
|
|
}
|
|
|
|
if (filelist_p != NULL) {
|
|
var_f31 = dStage_FileList_dt_SeaLevel(filelist_p);
|
|
}
|
|
|
|
if (dComIfGd_getView() != NULL) {
|
|
var_f31 = (dComIfGd_getInvViewMtx()[1][3] - var_f31) * 0.09f;
|
|
} else {
|
|
var_f31 = 0.0f;
|
|
}
|
|
|
|
dComIfGd_setListSky();
|
|
mDoMtx_stack_c::transS(dComIfGd_getInvViewMtx()[0][3], dComIfGd_getInvViewMtx()[1][3] - var_f31,
|
|
dComIfGd_getInvViewMtx()[2][3]);
|
|
kasumim_model_p->i_setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mDoExt_modelUpdateDL(kasumim_model_p);
|
|
|
|
mDoMtx_stack_c::transS(dComIfGd_getInvViewMtx()[0][3], dComIfGd_getInvViewMtx()[1][3] - var_f31,
|
|
dComIfGd_getInvViewMtx()[2][3]);
|
|
kumo_model_p->i_setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mDoExt_modelUpdateDL(kumo_model_p);
|
|
|
|
if (dStage_stagInfo_GetArg0(i_dComIfGp_getStage()->getStagInfo()) != 0 && sun_model_p != NULL &&
|
|
sun_p != NULL && sun_p->mSunAlpha > 0.0f)
|
|
{
|
|
sp14 = sun_p->mPos[0];
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "F_SP102") == 0) {
|
|
dKyr_get_vectle_calc(&camera_p->mLookat.mEye, &g_env_light.mSunPos, &sp8);
|
|
sp14.x = camera_p->mLookat.mEye.x + (8000.0f * sp8.x);
|
|
sp14.y = camera_p->mLookat.mEye.y + (8000.0f * sp8.y);
|
|
sp14.z = camera_p->mLookat.mEye.z + (8000.0f * sp8.z);
|
|
}
|
|
|
|
s16 temp_r19 = cLib_targetAngleX(&camera_p->mLookat.mEye, &sp14);
|
|
s16 temp_r18 = cLib_targetAngleY(&camera_p->mLookat.mEye, &sp14);
|
|
mDoMtx_stack_c::transS(sp14.x, sp14.y, sp14.z);
|
|
mDoMtx_stack_c::YrotM((s16)temp_r18);
|
|
mDoMtx_stack_c::XrotM(0x7FFF - temp_r19);
|
|
|
|
f32 scale;
|
|
if (g_env_light.mDaytime < 255.0f) {
|
|
f32 temp_f4 = 1.0f - lenz_p->mDistFalloff;
|
|
scale = 1.0f;
|
|
|
|
if (sun_p->mVisibility > 0.0f) {
|
|
scale = 1.0f + (sun_p->mVisibility * (0.4f * (temp_f4 * temp_f4)));
|
|
}
|
|
} else {
|
|
f32 var_f1;
|
|
if (g_env_light.mDaytime < 270.0f) {
|
|
var_f1 = dKy_get_parcent(270.0f, 240.0f, g_env_light.mDaytime);
|
|
} else {
|
|
var_f1 = 1.0f;
|
|
}
|
|
|
|
scale = 1.0f + (0.2f * var_f1);
|
|
}
|
|
|
|
mDoMtx_stack_c::scaleM(scale, scale, scale);
|
|
sun_model_p->i_setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mDoExt_modelUpdateDL(sun_model_p);
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0) {
|
|
sp14 = sun_p->mPos[0];
|
|
sp14.y = 300.0f - (sp14.y * 0.85f);
|
|
|
|
s16 temp_r19_2 = cLib_targetAngleX(&camera_p->mLookat.mEye, &sp14);
|
|
s16 temp_r18_2 = cLib_targetAngleY(&camera_p->mLookat.mEye, &sp14);
|
|
mDoMtx_stack_c::transS(sp14.x, sp14.y, sp14.z);
|
|
mDoMtx_stack_c::YrotM((s16)temp_r18_2);
|
|
mDoMtx_stack_c::XrotM(0x7FFF - temp_r19_2);
|
|
mDoMtx_stack_c::ZrotM(mangZ);
|
|
|
|
mDoMtx_stack_c::scaleM(scale, scale + 0.15f, scale);
|
|
mDoMtx_stack_c::ZrotM(-mangZ);
|
|
sun2_model_p->i_setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mDoExt_modelUpdateDL(sun2_model_p);
|
|
mangZ += (s16)(483.0f + cM_rndF(100.0f));
|
|
}
|
|
}
|
|
|
|
dComIfGd_setList();
|
|
|
|
if (sun_model_p != NULL) {
|
|
i_this->mSunBtk.remove(i_this->model2->getModelData());
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm int daVrbox2_Draw(vrbox2_class* param_0) {
|
|
nofralloc
|
|
#include "asm/rel/d/a/d_a_vrbox2/d_a_vrbox2/daVrbox2_Draw__FP12vrbox2_class.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* ############################################################################################## */
|
|
/* 80499AA4-80499AA8 000038 0004+00 0/1 0/0 0/0 .rodata @4069 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static u32 const lit_4069 = 0x3A03126F;
|
|
COMPILER_STRIP_GATE(0x80499AA4, &lit_4069);
|
|
#pragma pop
|
|
|
|
/* 80499AA8-80499AAC 00003C 0004+00 0/1 0/0 0/0 .rodata @4070 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_4070 = 3.0f / 10.0f;
|
|
COMPILER_STRIP_GATE(0x80499AA8, &lit_4070);
|
|
#pragma pop
|
|
|
|
/* 80499AAC-80499AB0 000040 0004+00 0/1 0/0 0/0 .rodata @4071 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_4071 = 1.75f;
|
|
COMPILER_STRIP_GATE(0x80499AAC, &lit_4071);
|
|
#pragma pop
|
|
|
|
/* 80499AB0-80499AB4 000044 0004+00 0/1 0/0 0/0 .rodata @4072 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_4072 = 22.0f / 5.0f;
|
|
COMPILER_STRIP_GATE(0x80499AB0, &lit_4072);
|
|
#pragma pop
|
|
|
|
/* 80499AB4-80499AB8 000048 0004+00 0/1 0/0 0/0 .rodata @4073 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_4073 = 11.0f / 5.0f;
|
|
COMPILER_STRIP_GATE(0x80499AB4, &lit_4073);
|
|
#pragma pop
|
|
|
|
/* 80499AB8-80499ABC 00004C 0004+00 0/1 0/0 0/0 .rodata @4074 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_4074 = 97.5f;
|
|
COMPILER_STRIP_GATE(0x80499AB8, &lit_4074);
|
|
#pragma pop
|
|
|
|
/* 80499ABC-80499AC0 000050 0004+00 0/1 0/0 0/0 .rodata @4075 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static f32 const lit_4075 = 1.0f / 10.0f;
|
|
COMPILER_STRIP_GATE(0x80499ABC, &lit_4075);
|
|
#pragma pop
|
|
|
|
/* 80499AC0-80499AC4 000054 0004+00 0/1 0/0 0/0 .rodata @4076 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_RODATA static u32 const lit_4076 = 0x38D1B717;
|
|
COMPILER_STRIP_GATE(0x80499AC0, &lit_4076);
|
|
#pragma pop
|
|
|
|
/* 80499AC4-80499AC4 000058 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_80499AD4 = "R_SP30";
|
|
#pragma pop
|
|
|
|
/* 804990DC-804997E8 0006DC 070C+00 1/1 0/0 0/0 .text daVrbox2_color_set__FP12vrbox2_class */
|
|
// one small weird block and some regalloc at the end
|
|
#ifdef NONMATCHING
|
|
static int daVrbox2_color_set(vrbox2_class* i_this) {
|
|
dKankyo_sun_Packet* sun_p = g_env_light.mpSunPacket;
|
|
|
|
if ((g_env_light.mVrKasumiCol.r + g_env_light.mVrKasumiCol.g +
|
|
g_env_light.mVrKasumiCol.b + g_env_light.mVrSkyCol.r + g_env_light.mVrSkyCol.g +
|
|
g_env_light.mVrSkyCol.b + g_env_light.mVrkumoCol.r + g_env_light.mVrkumoCol.g +
|
|
g_env_light.mVrkumoCol.b) == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
camera_class* camera_p = dComIfGp_getCamera(0);
|
|
|
|
cXyz cam_eye;
|
|
cXyz cam_center;
|
|
cXyz camFwdXZ;
|
|
cXyz wind_vec;
|
|
|
|
cXyz* windVec_p = dKyw_get_wind_vec();
|
|
f32 wind_pow = dKyw_get_wind_pow();
|
|
|
|
wind_vec = *windVec_p;
|
|
|
|
dStage_stagInfo_GetSTType(i_dComIfGp_getStage()->getStagInfo());
|
|
|
|
cam_eye = camera_p->mLookat.mEye;
|
|
cam_center = camera_p->mLookat.mCenter;
|
|
cam_eye.y = 0.0f;
|
|
cam_center.y = 0.0f;
|
|
|
|
dKyr_get_vectle_calc(&cam_eye, &cam_center, &camFwdXZ);
|
|
f32 temp_f30 =
|
|
cM3d_VectorProduct2d(0.0f, 0.0f, -wind_vec.x, -wind_vec.z, camFwdXZ.x, camFwdXZ.z) *
|
|
0.0005f;
|
|
f32 var_f29 = temp_f30 * wind_pow;
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "R_SP30") == 0) {
|
|
dKyw_get_wind_vec();
|
|
var_f29 = temp_f30 * (wind_pow + 0.3f);
|
|
}
|
|
|
|
J3DModelData* modelData = i_this->mpKumoModel->getModelData();
|
|
J3DMaterial* material_0 = modelData->getMaterialNodePointer(0);
|
|
if (material_0 != NULL) {
|
|
material_0->setCullMode(0);
|
|
|
|
if (material_0->getTexMtx(0) != NULL) {
|
|
J3DTexMtxInfo& mtx_info = material_0->getTexMtx(0)->getTexMtxInfo();
|
|
mtx_info.mSRT.mTranslationX += var_f29;
|
|
texScrollCheck(mtx_info.mSRT.mTranslationX);
|
|
}
|
|
|
|
if (material_0->getTexMtx(1) != NULL) {
|
|
J3DTexMtxInfo& mtx_info = material_0->getTexMtx(1)->getTexMtxInfo();
|
|
mtx_info.mSRT.mTranslationX += var_f29 * 1.75f;
|
|
texScrollCheck(mtx_info.mSRT.mTranslationX);
|
|
}
|
|
}
|
|
|
|
J3DMaterial* material_1 = modelData->getMaterialNodePointer(1);
|
|
if (material_1 != NULL) {
|
|
material_1->setCullMode(0);
|
|
|
|
if (material_1->getTexMtx(0) != NULL) {
|
|
J3DTexMtxInfo& mtx_info = material_1->getTexMtx(0)->getTexMtxInfo();
|
|
mtx_info.mSRT.mTranslationX += var_f29 * 4.4f;
|
|
texScrollCheck(mtx_info.mSRT.mTranslationX);
|
|
}
|
|
|
|
if (material_1->getTexMtx(1) != NULL) {
|
|
J3DTexMtxInfo& mtx_info = material_1->getTexMtx(1)->getTexMtxInfo();
|
|
mtx_info.mSRT.mTranslationX += var_f29 * 2.2f;
|
|
texScrollCheck(mtx_info.mSRT.mTranslationX);
|
|
}
|
|
}
|
|
|
|
modelData = i_this->mpKumoModel->getModelData();
|
|
J3DGXColor k_color;
|
|
J3DGXColorS10 color;
|
|
|
|
J3DMaterial* kumo_material0 = modelData->getMaterialNodePointer(0);
|
|
if (kumo_material0 != NULL) {
|
|
kumo_material0->setCullMode(0);
|
|
kumo_material0->change();
|
|
|
|
k_color.r = g_env_light.mVrShitaGumoCol.r;
|
|
k_color.g = g_env_light.mVrShitaGumoCol.g;
|
|
k_color.b = g_env_light.mVrShitaGumoCol.b;
|
|
k_color.a = g_env_light.mVrkumoCol.a;
|
|
kumo_material0->setTevKColor(0, &k_color);
|
|
|
|
color.r = g_env_light.mVrShitaUneiCol.r;
|
|
color.g = g_env_light.mVrShitaUneiCol.g;
|
|
color.b = g_env_light.mVrShitaUneiCol.b;
|
|
color.a = (u8)g_env_light.mVrkumoCol.a;
|
|
kumo_material0->setTevColor(0, &color);
|
|
}
|
|
|
|
J3DMaterial* kumo_material1 = modelData->getMaterialNodePointer(1);
|
|
if (kumo_material1 != NULL) {
|
|
kumo_material1->setCullMode(0);
|
|
kumo_material1->change();
|
|
|
|
k_color.r = g_env_light.mVrShitaGumoCol.r;
|
|
k_color.g = g_env_light.mVrShitaGumoCol.g;
|
|
k_color.b = g_env_light.mVrShitaGumoCol.b;
|
|
k_color.a = g_env_light.mVrkumoCol.a;
|
|
kumo_material1->setTevKColor(0, &k_color);
|
|
|
|
color.r = g_env_light.mVrShitaUneiCol.r;
|
|
color.g = g_env_light.mVrShitaUneiCol.g;
|
|
color.b = g_env_light.mVrShitaUneiCol.b;
|
|
color.a = g_env_light.mVrkumoCol.a;
|
|
kumo_material1->setTevColor(0, &color);
|
|
}
|
|
|
|
modelData = i_this->mpKasumimModel->getModelData();
|
|
J3DMaterial* kasumim_material0 = modelData->getMaterialNodePointer(0);
|
|
if (kasumim_material0 != NULL) {
|
|
kasumim_material0->setCullMode(0);
|
|
kasumim_material0->change();
|
|
|
|
color.r = g_env_light.mVrKasumiCol.r;
|
|
color.g = g_env_light.mVrKasumiCol.g;
|
|
color.b = g_env_light.mVrKasumiCol.b;
|
|
color.a = g_env_light.mVrKasumiCol.a;
|
|
kasumim_material0->setTevColor(0, &color);
|
|
}
|
|
|
|
if (sun_p != NULL) {
|
|
J3DModelData* modelData = i_this->model2->getModelData();
|
|
for (int i = 0; i < 3; i++) {
|
|
J3DMaterial* material_p = modelData->getMaterialNodePointer(i);
|
|
|
|
if (material_p != NULL) {
|
|
material_p->setCullMode(0);
|
|
material_p->change();
|
|
|
|
color.r = sun_p->mColor.r;
|
|
color.g = sun_p->mColor.g;
|
|
color.b = sun_p->mColor.b;
|
|
|
|
k_color.r = sun_p->field_0x74.r;
|
|
k_color.g = sun_p->field_0x74.g;
|
|
k_color.b = sun_p->field_0x74.b;
|
|
k_color.a = sun_p->field_0x74.a;
|
|
|
|
if (i == 1) {
|
|
if (g_env_light.mDaytime > 255.0f || g_env_light.mDaytime < 97.5f) {
|
|
cLib_addCalc(&sun_p->field_0x64, 1.0f, 0.2f, 0.1f, 0.0001f);
|
|
} else {
|
|
cLib_addCalc(&sun_p->field_0x64, 0.0f, 0.2f, 0.1f, 0.0001f);
|
|
}
|
|
|
|
int alpha = sun_p->field_0x64 * 255.0f * sun_p->mSunAlpha;
|
|
color.a = alpha;
|
|
k_color.a = alpha;
|
|
} else if (i == 2) {
|
|
int alpha = sun_p->mSunAlpha * 255.0f * (1.0f - sun_p->field_0x64);
|
|
color.a = alpha;
|
|
k_color.a = alpha;
|
|
} else {
|
|
int alpha = sun_p->mSunAlpha * 255.0f;
|
|
color.a = alpha;
|
|
k_color.a = alpha;
|
|
}
|
|
|
|
material_p->setTevColor(0, &color);
|
|
material_p->setTevKColor(0, &k_color);
|
|
}
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm int daVrbox2_color_set(vrbox2_class* param_0) {
|
|
nofralloc
|
|
#include "asm/rel/d/a/d_a_vrbox2/d_a_vrbox2/daVrbox2_color_set__FP12vrbox2_class.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 804997E8-8049982C 000DE8 0044+00 1/0 0/0 0/0 .text daVrbox2_Execute__FP12vrbox2_class
|
|
*/
|
|
static int daVrbox2_Execute(vrbox2_class* i_this) {
|
|
if (g_env_light.mDaytime > FLOAT_LABEL(lit_3837)) {
|
|
i_this->mSunBtk.play();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8049982C-80499834 000E2C 0008+00 1/0 0/0 0/0 .text daVrbox2_IsDelete__FP12vrbox2_class
|
|
*/
|
|
static int daVrbox2_IsDelete(vrbox2_class* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 80499834-8049983C 000E34 0008+00 1/0 0/0 0/0 .text daVrbox2_Delete__FP12vrbox2_class
|
|
*/
|
|
static int daVrbox2_Delete(vrbox2_class* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 8049983C-80499978 000E3C 013C+00 1/1 0/0 0/0 .text daVrbox2_solidHeapCB__FP10fopAc_ac_c */
|
|
static int daVrbox2_solidHeapCB(fopAc_ac_c* i_this) {
|
|
vrbox2_class* a_this = (vrbox2_class*)i_this;
|
|
|
|
a_this->mpKumoModel = mDoExt_J3DModel__create(
|
|
(J3DModelData*)dComIfG_getStageRes("vrbox_kumo.bmd"), 0x80000, 0x11020202);
|
|
|
|
J3DModelData* sun_modelData = (J3DModelData*)dComIfG_getStageRes("vrbox_sun.bmd");
|
|
if (sun_modelData != NULL) {
|
|
a_this->model2 = mDoExt_J3DModel__create(sun_modelData, 0x80000, 0x11020202);
|
|
a_this->model2_und = mDoExt_J3DModel__create(sun_modelData, 0x80000, 0x11020202);
|
|
|
|
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getStageRes("vrbox_sun.btk");
|
|
if (!a_this->mSunBtk.init(sun_modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, FLOAT_LABEL(lit_3627), 0, -1)) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
J3DModelData* kasumi_modelData = (J3DModelData*)dComIfG_getStageRes("vrbox_kasumiM.bmd");
|
|
if (kasumi_modelData != NULL) {
|
|
a_this->mpKasumimModel = mDoExt_J3DModel__create(kasumi_modelData, 0x80000, 0x11020202);
|
|
}
|
|
|
|
return a_this->mpKumoModel != NULL && a_this->model2 != NULL && a_this->model2_und != NULL;
|
|
}
|
|
|
|
/* 80499978-80499A1C 000F78 00A4+00 1/0 0/0 0/0 .text daVrbox2_Create__FP10fopAc_ac_c */
|
|
static int daVrbox2_Create(fopAc_ac_c* i_this) {
|
|
fopAcM_SetupActor(i_this, vrbox2_class);
|
|
vrbox2_class* a_this = (vrbox2_class*)i_this;
|
|
|
|
int phase = cPhs_COMPLEATE_e;
|
|
if (!fopAcM_entrySolidHeap(a_this, daVrbox2_solidHeapCB, 0x80004340)) {
|
|
phase = cPhs_ERROR_e;
|
|
}
|
|
|
|
return phase;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 80499B18-80499B38 -00001 0020+00 1/0 0/0 0/0 .data l_daVrbox2_Method */
|
|
static actor_method_class l_daVrbox2_Method = {
|
|
(process_method_func)daVrbox2_Create, (process_method_func)daVrbox2_Delete,
|
|
(process_method_func)daVrbox2_Execute, (process_method_func)daVrbox2_IsDelete,
|
|
(process_method_func)daVrbox2_Draw,
|
|
};
|
|
|
|
/* 80499B38-80499B68 -00001 0030+00 0/0 0/0 1/0 .data g_profile_VRBOX2 */
|
|
extern actor_process_profile_definition g_profile_VRBOX2 = {
|
|
-3,
|
|
7,
|
|
-3,
|
|
PROC_VRBOX2,
|
|
&g_fpcLf_Method.mBase,
|
|
sizeof(vrbox2_class),
|
|
0,
|
|
0,
|
|
&g_fopAc_Method.base,
|
|
4,
|
|
&l_daVrbox2_Method,
|
|
0x44000,
|
|
0,
|
|
0,
|
|
};
|