From 9773c9dbf11bf68b24d66b7718af02d131ad300a Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Tue, 1 Aug 2023 00:11:24 -0700 Subject: [PATCH] some more kankyo work --- include/JSystem/J3DGraphBase/J3DMatBlock.h | 27 +- include/d/com/d_com_inf_game.h | 2 +- include/d/kankyo/d_kankyo.h | 22 +- .../rel/d/a/kytag/d_a_kytag08/d_a_kytag08.h | 18 +- libs/JSystem/J3DGraphBase/J3DMatBlock.cpp | 4 +- rel/d/a/d_a_vrbox/d_a_vrbox.cpp | 6 +- rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp | 18 +- rel/d/a/kytag/d_a_kytag08/d_a_kytag08.cpp | 62 +--- rel/d/a/kytag/d_a_kytag15/d_a_kytag15.cpp | 4 +- rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp | 2 +- src/d/kankyo/d_kankyo.cpp | 348 +++++++++++++++++- src/m_Do/m_Do_ext.cpp | 4 +- 12 files changed, 411 insertions(+), 106 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index a976be81c9b..65c064050f3 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -9,13 +9,11 @@ #include "dolphin/types.h" #include "m_Do/m_Do_lib.h" -struct J3DGXColorS10 { +struct J3DGXColorS10 : public GXColorS10 { /* 8000E460 */ J3DGXColorS10() {} - - _GXColorS10 mColor; }; -struct J3DGXColor : public _GXColor { +struct J3DGXColor : public GXColor { /* 8000E538 */ J3DGXColor() {} }; @@ -542,10 +540,25 @@ private: extern const u16 j3dDefaultZModeID; +inline u16 calcZModeID(u8 param_0, u8 param_1, u8 param_2) { + return param_0 * 0x10 + param_2 + param_1 * 2; +} + +struct J3DZModeInfo { + /* 0x0 */ u8 field_0x0; + /* 0x1 */ u8 field_0x1; + /* 0x2 */ u8 field_0x2; +}; + struct J3DZMode { J3DZMode() { mZModeID = j3dDefaultZModeID; } + + void setZModeInfo(const J3DZModeInfo& info) { + mZModeID = calcZModeID(info.field_0x0, info.field_0x1, info.field_0x2); + } + /* 0x0 */ u16 mZModeID; }; @@ -646,7 +659,7 @@ public: /* 8000DF4C */ virtual bool getBlend(); /* 80317374 */ virtual void setZMode(J3DZMode const*); /* 8000E014 */ virtual void setZMode(J3DZMode); - /* 8000DF44 */ virtual bool getZMode(); + /* 8000DF44 */ virtual J3DZMode* getZMode(); /* 80317378 */ virtual void setZCompLoc(u8 const*); /* 8000E010 */ virtual void setZCompLoc(u8); /* 8000DF3C */ virtual bool getZCompLoc() const; @@ -708,7 +721,7 @@ public: /* 80321A00 */ virtual bool getBlend(); /* 80321A14 */ virtual void setZMode(J3DZMode const*); /* 80321A08 */ virtual void setZMode(J3DZMode); - /* 80321A20 */ virtual bool getZMode(); + /* 80321A20 */ virtual J3DZMode* getZMode(); /* 80321A30 */ virtual void setZCompLoc(u8 const*); /* 80321A28 */ virtual void setZCompLoc(u8); /* 80321A3C */ virtual bool getZCompLoc() const; @@ -750,7 +763,7 @@ public: /* 80321B64 */ virtual bool getBlend(); /* 80321B78 */ virtual void setZMode(J3DZMode const*); /* 80321B6C */ virtual void setZMode(J3DZMode); - /* 80321B84 */ virtual bool getZMode(); + /* 80321B84 */ virtual J3DZMode* getZMode(); /* 80321B94 */ virtual void setZCompLoc(u8 const*); /* 80321B8C */ virtual void setZCompLoc(u8); /* 80321BA0 */ virtual bool getZCompLoc() const; diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 23ff32697d1..78d2775b0f0 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -3392,7 +3392,7 @@ inline void dComIfGd_setListDark() { g_dComIfG_gameInfo.drawlist.setXluListDark(); } -inline void dComIfGd_setListInvisible() { +inline void dComIfGd_setListInvisisble() { g_dComIfG_gameInfo.drawlist.setOpaListInvisible(); g_dComIfG_gameInfo.drawlist.setXluListInvisible(); } diff --git a/include/d/kankyo/d_kankyo.h b/include/d/kankyo/d_kankyo.h index e9735f1ec32..ab6d295cd3d 100644 --- a/include/d/kankyo/d_kankyo.h +++ b/include/d/kankyo/d_kankyo.h @@ -235,6 +235,7 @@ class stage_pselect_info_class; class stage_envr_info_class; class stage_vrbox_info_class; class stage_plight_info_class; +class kytag08_class; struct dKy_pol_arg_struct { u8 data[8]; @@ -384,7 +385,7 @@ public: /* 0x1054 */ int field_0x1054; /* 0x1058 */ dKankyo_evil_Packet* mpEvilPacket; /* 0x105C */ mDoExt_btkAnm* field_0x105c; - /* 0x1060 */ fopAc_ac_c* field_0x1060; + /* 0x1060 */ kytag08_class* field_0x1060; /* 0x1064 */ Vec field_0x1064; /* 0x1070 */ cXyz mSunPos2; /* 0x107C */ cXyz mPLightNearPos; @@ -403,20 +404,11 @@ public: /* 0x10FA */ s16 field_0x10fa; /* 0x10FC */ s16 field_0x10fc; /* 0x10FE */ s16 field_0x10fe; - /* 0x1100 */ _GXColorS10 mActorAmbience; - /* 0x1108 */ _GXColorS10 mTerrainAmbienceBG0; - /* 0x1110 */ s16 mTerrainAmbienceBG1_R; - /* 0x1112 */ s16 mTerrainAmbienceBG1_G; - /* 0x1114 */ s16 mTerrainAmbienceBG1_B; - /* 0x1116 */ s16 mWaterSurfaceAlphaA; - /* 0x1118 */ s16 mTerrainAmbienceBG2_R; - /* 0x111A */ s16 mTerrainAmbienceBG2_G; - /* 0x111C */ s16 mTerrainAmbienceBG2_B; - /* 0x111E */ s16 mAuxAlphaA2; - /* 0x1120 */ s16 mTerrainAmbienceBG3_R; - /* 0x1122 */ s16 mTerrainAmbienceBG3_G; - /* 0x1124 */ s16 mTerrainAmbienceBG3_B; - /* 0x1126 */ s16 mFakeFogA; + /* 0x1100 */ GXColorS10 mActorAmbience; + /* 0x1108 */ GXColorS10 mTerrainAmbienceBG0; + /* 0x1110 */ GXColorS10 mTerrainAmbienceBG1; + /* 0x1118 */ GXColorS10 mTerrainAmbienceBG2; + /* 0x1120 */ GXColorS10 mTerrainAmbienceBG3; /* 0x1128 */ GXColorS10 field_0x1128; /* 0x1130 */ u8 field_0x1130[0x28]; /* 0x1158 */ GXColorS10 mFogColor; diff --git a/include/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.h b/include/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.h index c2f14b187e3..47195eacb66 100644 --- a/include/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.h +++ b/include/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.h @@ -1,6 +1,22 @@ #ifndef D_A_KYTAG08_H #define D_A_KYTAG08_H -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" + +class kytag08_class : public fopAc_ac_c { +public: + /* 0x568 */ J3DModel* mpModel; + /* 0x56C */ mDoExt_btkAnm field_0x56c; + /* 0x584 */ mDoExt_brkAnm field_0x584; + /* 0x59C */ JPABaseEmitter* field_0x59c; + /* 0x5A0 */ JPABaseEmitter* field_0x5a0; + /* 0x5A4 */ request_of_phase_process_class mPhase; + /* 0x5AC */ cXyz field_0x5ac; + /* 0x5B8 */ cXyz field_0x5b8; + /* 0x5C4 */ cXyz field_0x5c4; + /* 0x5D0 */ f32 field_0x5d0; + /* 0x5D4 */ int field_0x5d4; + /* 0x5D8 */ u8 field_0x5d8; +}; #endif /* D_A_KYTAG08_H */ diff --git a/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp b/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp index 8acc4b81cc1..aadfb6de372 100644 --- a/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp +++ b/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp @@ -2221,7 +2221,7 @@ asm void J3DPEBlockFull::setZMode(J3DZMode const* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm bool J3DPEBlockFull::getZMode() { +asm J3DZMode* J3DPEBlockFull::getZMode() { nofralloc #include "asm/JSystem/J3DGraphBase/J3DMatBlock/getZMode__14J3DPEBlockFullFv.s" } @@ -2443,7 +2443,7 @@ asm void J3DPEBlockFogOff::setZMode(J3DZMode const* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm bool J3DPEBlockFogOff::getZMode() { +asm J3DZMode* J3DPEBlockFogOff::getZMode() { nofralloc #include "asm/JSystem/J3DGraphBase/J3DMatBlock/getZMode__16J3DPEBlockFogOffFv.s" } diff --git a/rel/d/a/d_a_vrbox/d_a_vrbox.cpp b/rel/d/a/d_a_vrbox/d_a_vrbox.cpp index afd1bb4cbb2..a9f8fe5aa00 100644 --- a/rel/d/a/d_a_vrbox/d_a_vrbox.cpp +++ b/rel/d/a/d_a_vrbox/d_a_vrbox.cpp @@ -78,7 +78,7 @@ static int daVrbox_color_set(vrbox_class* i_this) { g_env_light.mVrboxInvisible = false; J3DModelData* modelData = i_this->mpSoraModel->getModelData(); - GXColorS10 color; + J3DGXColorS10 color; J3DMaterial* material_0 = modelData->getMaterialNodePointer(0); if (material_0 != NULL) { @@ -89,7 +89,7 @@ static int daVrbox_color_set(vrbox_class* i_this) { color.g = g_env_light.mSkyColor.g; color.b = g_env_light.mSkyColor.b; color.a = 255; - material_0->setTevColor(0, (J3DGXColorS10*)&color); + material_0->setTevColor(0, &color); } J3DMaterial* material_1 = modelData->getMaterialNodePointer(1); @@ -101,7 +101,7 @@ static int daVrbox_color_set(vrbox_class* i_this) { color.g = g_env_light.mCloudInnerHazeColor.g; color.b = g_env_light.mCloudInnerHazeColor.b; color.a = g_env_light.mCloudInnerHazeColor.a; - material_1->setTevColor(0, (J3DGXColorS10*)&color); + material_1->setTevColor(0, &color); } return 1; diff --git a/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp b/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp index 1d2bb916f5d..4980d6a1744 100644 --- a/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp +++ b/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp @@ -609,13 +609,13 @@ static void daKytag06_type_07_Execute(kytag06_class* i_this) { if (camera != NULL) { if (camera->mLookat.mEye.y > 0.0f) { dKy_BossLight_set(&spX, &color, i_this->mWindPower * 2.0f, 0); - g_env_light.mTerrainAmbienceBG3_R = (u8)(i_this->mWindPower * 230.0f + 25.0f); - g_env_light.mTerrainAmbienceBG3_G = (u8)(i_this->mWindPower * 215.0f + 30.0f); - g_env_light.mTerrainAmbienceBG3_B = (u8)(i_this->mWindPower * 155.0f + 25.0f); + g_env_light.mTerrainAmbienceBG3.r = (u8)(i_this->mWindPower * 230.0f + 25.0f); + g_env_light.mTerrainAmbienceBG3.g = (u8)(i_this->mWindPower * 215.0f + 30.0f); + g_env_light.mTerrainAmbienceBG3.b = (u8)(i_this->mWindPower * 155.0f + 25.0f); } else { - g_env_light.mTerrainAmbienceBG3_R = 0; - g_env_light.mTerrainAmbienceBG3_G = 0; - g_env_light.mTerrainAmbienceBG3_B = 0; + g_env_light.mTerrainAmbienceBG3.r = 0; + g_env_light.mTerrainAmbienceBG3.g = 0; + g_env_light.mTerrainAmbienceBG3.b = 0; g_env_light.mThunderEff.mMode = 0; } } @@ -777,9 +777,9 @@ static void daKytag06_type_06_Execute(kytag06_class* i_this) { break; } - g_env_light.mTerrainAmbienceBG3_R = (u8)(i_this->mWindPower * 245.0f + 10.0f); - g_env_light.mTerrainAmbienceBG3_G = (u8)(i_this->mWindPower * 185.0f + 15.0f); - g_env_light.mTerrainAmbienceBG3_B = (u8)(i_this->mWindPower * 130.0f + 20.0f); + g_env_light.mTerrainAmbienceBG3.r = (u8)(i_this->mWindPower * 245.0f + 10.0f); + g_env_light.mTerrainAmbienceBG3.g = (u8)(i_this->mWindPower * 185.0f + 15.0f); + g_env_light.mTerrainAmbienceBG3.b = (u8)(i_this->mWindPower * 130.0f + 20.0f); static cXyz c_pos(0.0f, 0.0f, 0.0f); diff --git a/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.cpp b/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.cpp index 08dd11bfa8a..eb3763c543c 100644 --- a/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.cpp +++ b/rel/d/a/kytag/d_a_kytag08/d_a_kytag08.cpp @@ -5,60 +5,14 @@ #include "rel/d/a/kytag/d_a_kytag08/d_a_kytag08.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" // // Types: // -struct request_of_phase_process_class {}; - -struct kytag08_class {}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dPa_levelEcallBack {}; - -struct dKy_tevstr_c {}; - -struct csXyz {}; - -struct _GXColor {}; - -struct cXyz {}; - -struct dPa_control_c { - /* 8004CA90 */ void set(u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, cXyz const*, - u8, dPa_levelEcallBack*, s8, _GXColor const*, _GXColor const*, - cXyz const*, f32); -}; - -struct Vec {}; - -struct Z2EnvSeMgr { - /* 802C92EC */ void startFogWipeTrigger(Vec*); - /* 802C93A0 */ void setFogWipeWidth(f32); -}; - -struct JPABaseEmitter { - /* 8027EC60 */ void deleteAllParticle(); -}; - -struct J3DModelData {}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); - /* 8085B23C */ ~J3DFrameCtrl(); -}; - // // Forward References: // @@ -94,17 +48,10 @@ extern "C" void startFogWipeTrigger__10Z2EnvSeMgrFP3Vec(); extern "C" void setFogWipeWidth__10Z2EnvSeMgrFf(); extern "C" void __dl__FPv(); extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void PSVECSquareDistance(); extern "C" void _savegpr_27(); extern "C" void _savegpr_28(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 g_mEnvSeMgr[780]; -extern "C" extern u32 __float_nan; // // Declarations: @@ -422,7 +369,8 @@ static asm void daKytag08_Create(fopAc_ac_c* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DFrameCtrl::~J3DFrameCtrl() { +// asm J3DFrameCtrl::~J3DFrameCtrl() { +extern "C" asm void __dt__12J3DFrameCtrlFv() { nofralloc #include "asm/rel/d/a/kytag/d_a_kytag08/d_a_kytag08/__dt__12J3DFrameCtrlFv.s" } diff --git a/rel/d/a/kytag/d_a_kytag15/d_a_kytag15.cpp b/rel/d/a/kytag/d_a_kytag15/d_a_kytag15.cpp index 7859faff052..75a314d9cc8 100644 --- a/rel/d/a/kytag/d_a_kytag15/d_a_kytag15.cpp +++ b/rel/d/a/kytag/d_a_kytag15/d_a_kytag15.cpp @@ -20,7 +20,7 @@ static int daKytag15_Draw(kytag15_class* i_this) { scale.z = 0.00524f; if (i_this->mpModel != NULL && i_this->field_0x590 > 0.0f) { - GXColorS10 color; + J3DGXColorS10 color; J3DMaterial* mat_p = i_this->mpModel->getModelData()->getMaterialNodePointer(0); color.b = 0; color.g = 0; @@ -33,7 +33,7 @@ static int daKytag15_Draw(kytag15_class* i_this) { color.a = (color.a + 255.0f) * i_this->field_0x590 + -255.0f; - mat_p->setTevColor(0, (J3DGXColorS10*)&color); + mat_p->setTevColor(0, &color); i_this->mpModel->setBaseScale(scale); i_this->mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); diff --git a/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp b/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp index 648a69f81ee..81890649556 100644 --- a/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp +++ b/rel/d/a/obj/d_a_obj_onsen/d_a_obj_onsen.cpp @@ -105,7 +105,7 @@ int daObjOnsen_c::Draw() { dKy_bg_MAxx_proc(mpModel[0]); mDoExt_modelUpdateDL(mpModel[0]); mpBtk->entry(mpModel[1]->getModelData()); - dComIfGd_setListInvisible(); + dComIfGd_setListInvisisble(); dKy_bg_MAxx_proc(mpModel[1]); mDoExt_modelUpdateDL(mpModel[1]); dComIfGd_setList(); diff --git a/src/d/kankyo/d_kankyo.cpp b/src/d/kankyo/d_kankyo.cpp index 0cd0bd0daa0..caf8334ad8a 100644 --- a/src/d/kankyo/d_kankyo.cpp +++ b/src/d/kankyo/d_kankyo.cpp @@ -19,6 +19,7 @@ #include "dolphin/types.h" #include "global.h" #include "m_Do/m_Do_audio.h" +#include "rel/d/a/kytag/d_a_kytag08/d_a_kytag08.h" // // Types: @@ -5027,19 +5028,21 @@ SECTION_DEAD static char const* const pad_80394F35 = "\0\0"; #pragma pop /* 80450708-8045070C 000188 0004+00 1/1 0/0 0/0 .sdata l_zmodeUpEnable */ -SECTION_SDATA static u32 l_zmodeUpEnable = 0x01030100; +SECTION_SDATA static J3DZModeInfo l_zmodeUpEnable = {1, 3, 1}; /* 8045070C-80450710 00018C 0004+00 1/1 0/0 0/0 .sdata l_zmodeUpDisable */ -SECTION_SDATA static u32 l_zmodeUpDisable = 0x01030000; +SECTION_SDATA static J3DZModeInfo l_zmodeUpDisable = {1, 3, 0}; /* 80450710-80450718 000190 0008+00 1/1 0/0 0/0 .sdata l_alphaCompInfoOPA */ -SECTION_SDATA static u8 l_alphaCompInfoOPA[8] = { - 0x07, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, +SECTION_SDATA static J3DAlphaCompInfo l_alphaCompInfoOPA[2] = { + {0x07, 0x00, 0x01, 0x07}, + {0x00, 0x00, 0x00, 0x00}, }; /* 80450718-80450720 000198 0008+00 1/1 0/0 0/0 .sdata l_alphaCompInfo */ -SECTION_SDATA static u8 l_alphaCompInfo[8] = { - 0x04, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, +SECTION_SDATA static J3DAlphaCompInfo l_alphaCompInfo[2] = { + {0x04, 0x80, 0x00, 0x03}, + {0xFF, 0x00, 0x00, 0x00}, }; /* 80453E10-80453E14 002410 0004+00 1/1 0/0 0/0 .sdata2 @10916 */ @@ -5098,6 +5101,338 @@ SECTION_SDATA2 static f32 lit_10932[1 + 1 /* padding */] = { }; /* 801ACD24-801ADBBC 1A7664 0E98+00 0/0 0/0 7/7 .text dKy_bg_MAxx_proc__FPv */ +// stack / couple instructions at the end +#ifdef NONMATCHING +void dKy_bg_MAxx_proc(void* param_0) { + dScnKy_env_light_c* env_light = i_dKy_getEnvlight(); + s8 cam_id = dComIfGp_getWindow(0)->getCameraID(); + camera_class* camera_p = dComIfGp_getCamera(cam_id); + fopAc_ac_c* player_p = dComIfGp_getPlayer(0); + + if (param_0 != NULL && player_p != NULL) { + J3DModelData* modelData = static_cast(param_0)->getModelData(); + + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterial* mat_p = modelData->getMaterialNodePointer(i); + const char* mat_name = modelData->getMaterialName()->getName(i); + + if (mat_name[3] == 'M' && mat_name[4] == 'A') { + if (memcmp(&mat_name[3], "MA06", 4) == 0) { + dKy_murky_set(mat_p); + } + + if (memcmp(&mat_name[3], "MA03", 4) == 0 || memcmp(&mat_name[3], "MA09", 4) == 0 || + memcmp(&mat_name[3], "MA17", 4) == 0 || memcmp(&mat_name[3], "MA19", 4) == 0) + { + if (mat_name[5] != '1') { + dComIfGd_setListDarkBG(); + } else if (mat_name[6] == '9') { + dComIfGd_setListInvisisble(); + } + + if (mat_p->getFog() != NULL) { + J3DFogInfo* fog_info_p = mat_p->getFog()->getFogInfo(); + + if (fog_info_p != NULL) { + if (mat_name[5] == '0' && mat_name[6] == '9') { + fog_info_p->field_0x0 = 6; + + J3DGXColor k_color; + k_color.r = 245.0f - g_env_light.mWaterSurfaceShineRate * 45.0f; + k_color.g = 245.0f - g_env_light.mWaterSurfaceShineRate * 45.0f; + k_color.b = 245.0f - g_env_light.mWaterSurfaceShineRate * 35.0f; + k_color.a = 255; + mat_p->setTevKColor(1, &k_color); + } else { + fog_info_p->field_0x0 = 7; + + J3DGXColorS10 color; + J3DGXColor k_color; + color.r = g_env_light.mTerrainAmbienceBG2.r; + color.g = g_env_light.mTerrainAmbienceBG2.g; + color.b = g_env_light.mTerrainAmbienceBG2.b; + color.a = g_env_light.mTerrainAmbienceBG2.a; + + k_color.a = g_env_light.mTerrainAmbienceBG1.a; + k_color.r = 0; + k_color.g = 0; + k_color.b = 0; + + mat_p->setTevColor(1, &color); + mat_p->setTevKColor(3, &k_color); + } + } + } + } + + if (memcmp(&mat_name[3], "MA07", 4) == 0) { + J3DGXColorS10 color; + color.r = (u8)(g_env_light.mThunderEff.field_0x8 * 100.0f); + color.g = (u8)(g_env_light.mThunderEff.field_0x8 * 100.0f); + color.b = (u8)(g_env_light.mThunderEff.field_0x8 * 100.0f); + color.a = 255; + + mat_p->setTevColor(0, &color); + } + + if (memcmp(&mat_name[3], "MA10", 4) == 0 || memcmp(&mat_name[3], "MA02", 4) == 0) { + dComIfGd_setListInvisisble(); + + if (mat_p->getTexGenBlock()->getTexMtx(0) != NULL) { + J3DTexMtxInfo* tex_mtx_inf = + &mat_p->getTexGenBlock()->getTexMtx(0)->getTexMtxInfo(); + if (tex_mtx_inf != NULL) { + dKyw_get_wind_vec(); + + Mtx sp170; + if (mat_name[6] == '2') { + C_MTXLightPerspective(sp170, dComIfGd_getView()->mFovy, + camera_p->mAspect, 1.0f, 1.0f, -0.01f, 0.0f); + } else { + C_MTXLightPerspective(sp170, dComIfGd_getView()->mFovy, + camera_p->mAspect, 0.49f, -0.49f, 0.5f, 0.5f); + } + tex_mtx_inf->setEffectMtx(sp170); + modelData->simpleCalcMaterial(0, (MtxP)j3dDefaultMtx); + } + } + } + + if (memcmp(&mat_name[3], "MA00", 4) == 0 || memcmp(&mat_name[3], "MA01", 4) == 0 || + memcmp(&mat_name[3], "MA04", 4) == 0 || memcmp(&mat_name[3], "MA16", 4) == 0) + { + J3DGXColor k_color; + k_color.r = g_env_light.mFogDensity; + k_color.g = 0; + k_color.b = 0; + if (mat_name[6] == '1') { + J3DPEBlock* peblock_p = mat_p->getPEBlock(); + mat_p->change(); + + if (dKy_camera_water_in_status_check()) { + k_color.a = 255; + peblock_p->getAlphaComp()->setAlphaCompInfo(l_alphaCompInfo); + peblock_p->getZMode()->setZModeInfo(l_zmodeUpEnable); + } else { + k_color.a = 0; + peblock_p->getAlphaComp()->setAlphaCompInfo(l_alphaCompInfoOPA); + peblock_p->getZMode()->setZModeInfo(l_zmodeUpDisable); + } + } else { + k_color.a = 0; + } + + mat_p->setTevKColor(1, &k_color); + } + + if (memcmp(&mat_name[3], "MA11", 4) == 0) { + if (dKy_darkworld_check()) { + dComIfGd_setListDarkBG(); + + J3DGXColorS10 color; + color.r = 170; + color.g = 160; + color.b = 255; + color.a = 255; + mat_p->setTevColor(1, &color); + + color.r = 50; + color.g = 20; + color.b = 90; + color.a = 255; + mat_p->setTevColor(2, &color); + } else { + cXyz spA4; + cXyz sp98; + J3DGXColorS10 color; + color.r = 120; + color.g = 90; + color.b = 180; + color.a = 255; + + if (dComIfG_play_c::getLayerNo(0) == 1) { + color.a = 0; + } + + mat_p->setTevColor(1, &color); + + color.r = 40; + color.g = 30; + color.b = 65; + color.a = 255; + mat_p->setTevColor(2, &color); + + if (env_light->field_0x1060 != NULL) { + sp98 = env_light->field_0x1060->field_0x5b8; + f32 var_f29 = env_light->field_0x1060->field_0x5ac.x * + env_light->field_0x1060->field_0x5d0; + if (var_f29 < 0.1f) { + var_f29 = 0.1f; + } + + if (mat_p->getTexGenBlock()->getTexMtx(0) != NULL) { + J3DTexMtxInfo* tex_mtx_inf = + &mat_p->getTexGenBlock()->getTexMtx(0)->getTexMtxInfo(); + + if (tex_mtx_inf != NULL) { + Mtx sp140; + Mtx sp110; + C_MTXLightPerspective(sp140, var_f29 * 2.8f, 1.0f, 0.5f, 0.5f, + 0.0f, 0.0f); + spA4.x = sp98.x; + spA4.y = 100.0f; + spA4.z = sp98.z; + + cXyz sp8C(sp98.x, -1000.0f, sp98.z); + mDoMtx_lookAt(sp110, &sp8C, &spA4, 0); + cMtx_concat(sp140, sp110, sp110); + tex_mtx_inf->setEffectMtx(sp110); + } + } + } + } + } else if (memcmp(&mat_name[3], "MA20", 4) == 0) { + cXyz sp80; + if (mat_p->getFog() != NULL) { + J3DFogInfo* fog_inf = mat_p->getFog()->getFogInfo(); + if (fog_inf != NULL) { + fog_inf->field_0x0 = 7; + } + + J3DGXColorS10 sp3C; + sp3C.r = g_env_light.mTerrainAmbienceBG3.r; + sp3C.g = g_env_light.mTerrainAmbienceBG3.g; + sp3C.b = g_env_light.mTerrainAmbienceBG3.b; + sp3C.a = 255; + + mat_p->setTevColor(1, &sp3C); + + if (mat_p->getTexGenBlock()->getTexMtx(2) != NULL) { + J3DTexMtxInfo* tex_mtx_inf = + &mat_p->getTexGenBlock()->getTexMtx(2)->getTexMtxInfo(); + + if (tex_mtx_inf != NULL) { + Mtx spE0; + Mtx spB0; + C_MTXLightPerspective(spE0, 170.0f, 1.0f, 1.5f, 1.5f, 0.0f, 0.0f); + sp80.x = player_p->current.pos.x; + sp80.y = -14770.0f; + sp80.z = player_p->current.pos.z; + + cXyz sp74(player_p->current.pos.x, -14570.0f, + player_p->current.pos.z); + mDoMtx_lookAt(spB0, &sp74, &sp80, 0); + cMtx_concat(spE0, spB0, spB0); + tex_mtx_inf->setEffectMtx(spB0); + } + } + } + } else if (memcmp(&mat_name[3], "MA13", 4) == 0) { + J3DGXColorS10 color; + color.r = g_env_light.mTerrainAmbienceBG3.r; + color.g = g_env_light.mTerrainAmbienceBG3.g; + color.b = g_env_light.mTerrainAmbienceBG3.b; + color.a = g_env_light.mTerrainAmbienceBG3.a; + mat_p->setTevColor(1, &color); + } else if (memcmp(&mat_name[3], "MA14", 4) == 0) { + J3DGXColorS10 color; + J3DGXColor k_color; + color.r = g_env_light.mFogColor.r; + color.g = g_env_light.mFogColor.g; + color.b = g_env_light.mFogColor.b; + color.a = g_env_light.mFogColor.a; + mat_p->setTevColor(1, &color); + + k_color.r = 0; + k_color.g = 0; + k_color.b = 0; + k_color.a = g_env_light.mTerrainAmbienceBG3.a; + mat_p->setTevKColor(3, &k_color); + } else if (memcmp(&mat_name[3], "MA16", 4) == 0) { + J3DGXColorS10 color; + J3DGXColor k_color; + color.r = g_env_light.mTerrainAmbienceBG1.r; + color.g = g_env_light.mTerrainAmbienceBG1.g; + color.b = g_env_light.mTerrainAmbienceBG1.b; + color.a = g_env_light.mTerrainAmbienceBG1.a; + mat_p->setTevColor(1, &color); + + k_color.r = 0; + k_color.g = 0; + k_color.b = 0; + k_color.a = g_env_light.mTerrainAmbienceBG3.a; + mat_p->setTevKColor(3, &k_color); + } + } + + if (memcmp(&mat_name[3], "Rainbow", 7) == 0) { + f32 temp_f31 = g_env_light.getDaytime(); + cXyz sp68; + camera_class* temp_r16_2 = dComIfGp_getCamera(0); + J3DGXColor color; + + cXyz sp5C; + sp5C.x = -5853.0f; + sp5C.y = temp_r16_2->mLookat.mEye.y; + sp5C.z = -879.0f; + + f32 var_f1 = sp5C.abs(temp_r16_2->mLookat.mEye); + f32 var_f29_2 = -0.2f + (var_f1 / 4500.0f); + if (var_f29_2 > 1.0f) { + var_f29_2 = 1.0f; + } else if (var_f29_2 < 0.0f) { + var_f29_2 = 0.0f; + } + + color.b = 255; + color.g = 255; + color.r = 255; + color.a = 255; + + f32 var_f30 = 0.0f; + if (temp_f31 >= 270.0f) { + if (temp_f31 < 285.0f) { + var_f30 = (285.0f - temp_f31) / 15.0f; + } + } else if (temp_f31 < 75.0f) { + if (temp_f31 >= 60.0f) { + var_f30 = 1.0f - ((75.0f - temp_f31) / 15.0f); + } + } else { + var_f30 = 1.0f; + } + + if (g_env_light.mColpatWeather != 0) { + var_f30 = 0.0f; + } + + color.b = 255; + color.g = 255; + color.r = 255; + + sp5C = temp_r16_2->mLookat.mCenter; + sp5C.y = temp_r16_2->mLookat.mEye.y; + dKyr_get_vectle_calc(&temp_r16_2->mLookat.mEye, &sp5C, &sp68); + + f32 temp_f1_2 = cM3d_VectorProduct2d(0.0f, 0.0f, -0.81f, 0.583f, sp68.x, sp68.z); + f32 var_f0; + if (temp_f1_2 < 0.2f) { + color.a = 0; + } else { + if (temp_f1_2 > 0.6f) { + var_f0 = 1.0f; + } else { + var_f0 = (temp_f1_2 - 0.2f) / 0.4f; + } + color.a = 1.0f * (var_f29_2 * (115.0f * var_f0 * var_f30)); + } + + mat_p->setTevKColor(3, &color); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5106,6 +5441,7 @@ asm void dKy_bg_MAxx_proc(void* param_0) { #include "asm/d/kankyo/d_kankyo/dKy_bg_MAxx_proc__FPv.s" } #pragma pop +#endif /* 801ADBBC-801ADCA4 1A84FC 00E8+00 2/1 0/0 0/0 .text __dt__18dScnKy_env_light_cFv */ #pragma push diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 6cbf0a20020..28bb0bb673a 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -1604,8 +1604,8 @@ bool J3DPEBlock::getZCompLoc() const { } /* 8000DF44-8000DF4C 008884 0008+00 0/0 5/0 0/0 .text getZMode__10J3DPEBlockFv */ -bool J3DPEBlock::getZMode() { - return false; +J3DZMode* J3DPEBlock::getZMode() { + return NULL; } /* 8000DF4C-8000DF54 00888C 0008+00 0/0 5/0 0/0 .text getBlend__10J3DPEBlockFv */