diff --git a/configure.py b/configure.py index 02107c3ee2..7c8704c81f 100755 --- a/configure.py +++ b/configure.py @@ -635,6 +635,7 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_kankyo_data.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_kankyo_wether.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_kankyo_rain.cpp"), + Object(NonMatching, "d/d_kankyo_debug.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_vibration.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_vib_pattern.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_attention.cpp"), diff --git a/include/JSystem/JHostIO/JORMContext.h b/include/JSystem/JHostIO/JORMContext.h index d2c01b3514..daf8bbc5f5 100644 --- a/include/JSystem/JHostIO/JORMContext.h +++ b/include/JSystem/JHostIO/JORMContext.h @@ -69,6 +69,11 @@ height); \ } +#define DEFINE_UPDATE_COMBO_BOX(T) \ + void updateComboBox(u32 mode, T* pSrc, u32 param_2) { \ + updateSelectorSub(mode, (uintptr_t)pSrc, *pSrc, param_2); \ + } + #define DEFINE_UPDATE_SLIDER(T) \ void updateSlider(u32 mode, T* pSrc, T rangeMin, T rangeMax, u32 param_5) { \ updateSliderSub(mode, (uintptr_t)pSrc, *pSrc, rangeMin, rangeMax, param_5); \ @@ -237,6 +242,8 @@ public: DEFINE_START_COMBO_BOX_ID(int, JORPropertyEvent::EKind_ValueID) + DEFINE_UPDATE_COMBO_BOX(u8) + void endComboBox() { endSelectorSub(); } void genComboBoxItem(const char* label, s32 itemNo) { diff --git a/include/c/c_damagereaction.h b/include/c/c_damagereaction.h index 05bd673cbb..0bdc7f2540 100644 --- a/include/c/c_damagereaction.h +++ b/include/c/c_damagereaction.h @@ -23,4 +23,6 @@ extern u8 cDmr_FishingWether; extern u8 data_80450CA0; extern JPTraceParticleCallBack4 JPTracePCB4; +void debug_actor_create(); + #endif /* C_C_DAMAGEREACTION_H */ diff --git a/include/d/actor/d_a_npc.h b/include/d/actor/d_a_npc.h index 858e430bec..537ae86bef 100644 --- a/include/d/actor/d_a_npc.h +++ b/include/d/actor/d_a_npc.h @@ -534,7 +534,7 @@ public: /* 0xA80 */ f32 mExpressionMorfFrame; /* 0xA84 */ f32 mMorfFrames; /* 0xA88 */ bool mCreating; - /* 0xA89 */ bool mTwilight; + /* 0xA89 */ u8 mTwilight; /* 0xA8C */ dBgS_GndChk field_0xa8c; /* 0xAE0 */ dBgS_LinChk mLinChk; /* 0xB50 */ daNpcT_MotionSeqMngr_c mFaceMotionSeqMngr; @@ -938,7 +938,7 @@ public: /* 0x83C */ u16* field_0x83c; /* 0x840 */ u16 field_0x840; /* 0x842 */ u16 field_0x842; - /* 0x844 */ bool field_0x844; + /* 0x844 */ u8 field_0x844; /* 0x845 */ u8 field_0x845[0x848 - 0x845]; /* 0x848 */ s32 field_0x848; /* 0x84C */ dMsgFlow_c mMsgFlow; @@ -1089,7 +1089,7 @@ protected: /* 0x9F1 */ u8 field_0x9f1; /* 0x9F2 */ bool mHide; /* 0x9F3 */ u8 field_0x9f3; - /* 0x9F4 */ bool mTwilight; + /* 0x9F4 */ u8 mTwilight; /* 0x9F5 */ u8 field_0x9f5; /* 0x9F6 */ u8 field_0x9f6; /* 0x9F8 */ dMsgFlow_c mFlow; diff --git a/include/d/actor/d_a_npc_cd2.h b/include/d/actor/d_a_npc_cd2.h index eb6217d0c4..791e8c5074 100644 --- a/include/d/actor/d_a_npc_cd2.h +++ b/include/d/actor/d_a_npc_cd2.h @@ -370,7 +370,7 @@ public: /* 0xAC0 */ s16 field_0xac0; /* 0xAC2 */ s16 field_0xac2; /* 0xAC4 */ s16 field_0xac4; - /* 0xAC6 */ bool mIsDarkWorld; + /* 0xAC6 */ u8 mIsDarkWorld; }; #endif /* A_NPC_D_A_NPC_CD2_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 910a297975..de900f731d 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -2151,6 +2151,10 @@ inline void dComIfGs_revSwitch(int i_no, int i_roomNo) { g_dComIfG_gameInfo.info.revSwitch(i_no, i_roomNo); } +inline s8 dComIfGs_Grass_hide_Check() { + return g_dComIfG_gameInfo.field_0x1ddfc; +} + void dComIfGp_setSelectItem(int index); s32 dComIfGp_offHeapLockFlag(int flag); void dComIfGp_createSubExpHeap2D(); @@ -3406,6 +3410,22 @@ inline dComIfG_MesgCamInfo_c* dComIfGp_getMesgCameraInfo() { return g_dComIfG_gameInfo.play.getMesgCamInfo(); } +inline int dComIfGp_getStageEnvrNumInfo() { + return g_dComIfG_gameInfo.play.getStage().getEnvrNumInfo(); +} + +inline int dComIfGp_getStagePselectNumInfo() { + return g_dComIfG_gameInfo.play.getStage().getPselectNumInfo(); +} + +inline int dComIfGp_getStagePaletteNumInfo() { + return g_dComIfG_gameInfo.play.getStage().getPaletteNumInfo(); +} + +inline int dComIfGp_getStageVrboxcolNumInfo() { + return g_dComIfG_gameInfo.play.getStage().getVrboxcolNumInfo(); +} + inline int dComIfGp_roomControl_getStayNo() { return dStage_roomControl_c::getStayNo(); } diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 145f56b1f4..6360e4330c 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -3,8 +3,10 @@ #include "JSystem/J3DGraphBase/J3DStruct.h" #include "d/d_kankyo_wether.h" +#include "d/d_kankyo_data.h" #include "f_pc/f_pc_base.h" #include "m_Do/m_Do_ext.h" +#include "JSystem/JHostIO/JORReflexible.h" class JPABaseEmitter; class cBgS_PolyInfo; @@ -223,6 +225,13 @@ struct dKy_Odour_Data { /* 0x8 */ dKankyo_odour_Packet* mpOdourPacket; }; +struct dKy_flush_info { + u8 start_frame; + u8 r; + u8 g; + u8 b; +}; + class dScnKy_env_light_c { public: /* 8019F2E8 */ dScnKy_env_light_c(); @@ -505,46 +514,501 @@ inline dScnKy_env_light_c* dKy_getEnvlight() { return &g_env_light; } -// unsure of correct size -class dKankyo_lightHIO_c { +class dKankyo_lightHIO_c : public JORReflexible { public: - void dKankyo_lightHIOInfoUpDateF() { - // NONMATCHING - } + dKankyo_lightHIO_c(); - u8 field_0x0[4]; + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + virtual ~dKankyo_lightHIO_c() {} + + void dKankyo_lightHIOInfoUpDateF(); + + /* 0x04 */ u8 field_0x4; + /* 0x05 */ u8 field_0x5; + /* 0x08 */ int field_0x8; + /* 0x0C */ int field_0xc[10]; + /* 0x34 */ u8 m_fogtype; + /* 0x35 */ u8 field_0x35[0x50 - 0x35]; + /* 0x50 */ u8 m_displayTVColorSettings; + /* 0x51 */ u8 m_HOSTIO_setting; + /* 0x52 */ u8 field_0x52; + /* 0x53 */ u8 m_forcedPalette; + /* 0x54 */ u8 m_displayColorPaletteCheckInfo; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ s16 field_0x5c; + /* 0x5E */ s16 field_0x5e; + /* 0x60 */ u8 field_0x60; + /* 0x61 */ u8 field_0x61; + /* 0x62 */ u8 field_0x62; + /* 0x63 */ u8 field_0x63; + /* 0x64 */ u8 field_0x64; + /* 0x65 */ u8 field_0x65; + /* 0x66 */ u8 field_0x66; + /* 0x67 */ u8 field_0x67; + /* 0x68 */ u8 field_0x68; + /* 0x69 */ u8 field_0x69; + /* 0x6A */ u8 field_0x6a; + /* 0x6B */ u8 field_0x6b; + /* 0x6C */ cXyz m_BG_fakelight_pos; + /* 0x78 */ u8 m_BG_fakelight_R; + /* 0x79 */ u8 m_BG_fakelight_G; + /* 0x7A */ u8 m_BG_fakelight_B; + /* 0x7C */ f32 m_BG_fakelight_power; + /* 0x80 */ u8 field_0x80; }; -class dKankyo_HIO_c { +class dKankyo_vrboxHIO_c : public JORReflexible { public: - /* 0x000 */ u8 field_0x000[0x1c - 0x0]; - /* 0x01C */ dKankyo_lightHIO_c field_0x01c; - /* 0x020 */ u8 field_0x020[0x6d - 0x20]; - /* 0x06D */ u8 field_0x06d; - /* 0x06E */ u8 field_0x06e[0xb4 - 0x6e]; - /* 0x0B4 */ u8 field_0x0b4; - /* 0x0B8 */ f32 field_0x0b8; - /* 0x0BC */ u8 field_0x0bc[0x3f4 - 0xbc]; - /* 0x3F4 */ f32 field_0x3f4; - /* 0x3F8 */ f32 field_0x3f8; - /* 0x3FC */ u8 field_0x3fc[0x686 - 0x3fc]; - /* 0x686 */ u8 field_0x686; - /* 0x687 */ u8 field_0x687[0x694 - 0x687]; - /* 0x694 */ u8 field_0x694; - /* 0x695 */ u8 field_0x695; - /* 0x696 */ u8 field_0x696; - /* 0x697 */ u8 field_0x697[0x698 - 0x697]; - /* 0x698 */ bool field_0x698; - /* 0x699 */ u8 field_0x699[0x69c - 0x699]; - /* 0x69C */ f32 field_0x69c; - /* 0x6A0 */ u8 field_0x6a0[0x6d9 - 0x6a0]; - /* 0x6D9 */ u8 field_0x6d9; - /* 0x6DA */ u8 field_0x6da[0x6e0 - 0x6da]; - /* 0x6E0 */ f32 field_0x6e0; - /* 0x6E4 */ f32 field_0x6e4; - /* 0x6E8 */ f32 field_0x6e8; - /* 0x6EC */ u8 field_0x6ec[0x79b - 0x6ec]; - /* 0x79B */ u8 field_0x79b; + dKankyo_vrboxHIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + virtual ~dKankyo_vrboxHIO_c() {} + + void dKankyo_vrboxHIOInfoUpDateF(); + + /* 0x04 */ u8 m_VrboxSetting; + /* 0x05 */ u8 field_0x5; + /* 0x06 */ u8 m_displayVrboxTVColorSettings; + /* 0x07 */ u8 field_0x7; + /* 0x08 */ u8 field_0x8; + /* 0x09 */ u8 field_0x9; + /* 0x0A */ u8 field_0xa; + /* 0x0B */ u8 field_0xb; + /* 0x0C */ u8 field_0xc; + /* 0x0D */ u8 field_0xd; + /* 0x0E */ s8 field_0xe; + /* 0x0F */ s8 field_0xf; + /* 0x10 */ s8 field_0x10; + /* 0x11 */ s8 field_0x11; + /* 0x12 */ s8 field_0x12; + /* 0x13 */ s8 field_0x13; + /* 0x14 */ u8 field_0x14; + /* 0x18 */ f32 m_horizonHeight; + /* 0x1C */ u8 field_0x1c[0x20 - 0x1C]; +}; + +class dKankyo_bloomHIO_c : public JORReflexible { +public: + dKankyo_bloomHIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + virtual ~dKankyo_bloomHIO_c() {} + + /* 0x004 */ u8 field_0x4; + /* 0x005 */ u8 field_0x5; + /* 0x006 */ u8 m_saturationPattern; + /* 0x007 */ dkydata_bloomInfo_info_class bloom_info[64]; +}; + +class dKankyo_navyHIO_c : public JORReflexible { +public: + dKankyo_navyHIO_c(); + + void genMessage(JORMContext*); + virtual ~dKankyo_navyHIO_c() {} + + /* 0x004 */ u8 field_0x4; + /* 0x005 */ u8 field_0x5; + /* 0x006 */ u8 field_0x6; + /* 0x008 */ s16 field_0x8; + /* 0x00C */ f32 cloud_sunny_wind_influence_rate; + /* 0x010 */ f32 cloud_sunny_bottom_height; + /* 0x014 */ f32 cloud_sunny_top_height; + /* 0x018 */ f32 cloud_cloudy_wind_influence_rate; + /* 0x01C */ f32 cloud_cloudy_bottom_height; + /* 0x020 */ f32 cloud_cloudy_top_height; + /* 0x024 */ f32 cloud_cloudy_height_shrink_rate; + /* 0x028 */ f32 cloud_cloudy_alpha; + /* 0x02C */ f32 cloud_sunny_size; + /* 0x030 */ f32 cloud_cloudy_size; + /* 0x034 */ f32 cloud_sunny_height_shrink_rate; + /* 0x038 */ f32 cloud_sunny_alpha; + /* 0x03C */ f32 field_0x3c; + /* 0x040 */ f32 field_0x40; + /* 0x044 */ f32 field_0x44; + /* 0x048 */ f32 field_0x48; + /* 0x04C */ f32 field_0x4c; + /* 0x050 */ f32 field_0x50; + /* 0x054 */ f32 field_0x54; + /* 0x058 */ f32 field_0x58; + /* 0x05C */ f32 field_0x5c; + /* 0x060 */ f32 field_0x60; + /* 0x064 */ f32 field_0x64; + /* 0x068 */ u8 field_0x68; + /* 0x069 */ u8 field_0x69; + /* 0x06A */ s16 housi_max_number; + /* 0x06C */ f32 housi_max_alpha; + /* 0x070 */ f32 housi_max_scale; + /* 0x074 */ u8 field_0x74; + /* 0x075 */ u8 field_0x75; + /* 0x076 */ u8 field_0x76; + /* 0x077 */ u8 field_0x77; + /* 0x078 */ u8 field_0x78; + /* 0x079 */ u8 field_0x79; + /* 0x07A */ u8 field_0x7a; + /* 0x07C */ f32 field_0x7c; + /* 0x080 */ f32 field_0x80; + /* 0x084 */ f32 field_0x84; + /* 0x088 */ s16 field_0x88; + /* 0x08A */ u8 field_0x8a; + /* 0x08C */ cXyz field_0x8c; + /* 0x098 */ cXyz field_0x98; + /* 0x0A4 */ u8 field_0xA4[0x0A8 - 0x0A4]; + /* 0x0A8 */ GXColor moon_col; + /* 0x0AC */ f32 moon_scale; + /* 0x0B0 */ cXyz field_0xb0; + /* 0x0BC */ f32 field_0xbc; + /* 0x0C0 */ f32 field_0xc0; + /* 0x0C4 */ s16 field_0xc4; + /* 0x0C8 */ f32 field_0xc8; + /* 0x0CC */ f32 field_0xcc; + /* 0x0D0 */ u8 field_0xd0; + /* 0x0D1 */ u8 field_0xd1; + /* 0x0D2 */ u8 field_0xd2; + /* 0x0D3 */ u8 field_0xd3; + /* 0x0D4 */ u8 field_0xd4; + /* 0x0D5 */ u8 field_0xd5; + /* 0x0D6 */ u8 field_0xd6; + /* 0x0D7 */ u8 field_0xd7; + /* 0x0D8 */ u8 field_0xd8; + /* 0x0D9 */ u8 field_0xd9; + /* 0x0DA */ u8 field_0xda; + /* 0x0DB */ u8 field_0xdb; + /* 0x0DC */ u8 field_0xdc; + /* 0x0DD */ u8 field_0xdd; + /* 0x0DE */ u8 field_0xde; + /* 0x0E0 */ s16 field_0xe0; + /* 0x0E4 */ f32 field_0xe4; + /* 0x0E8 */ color_RGB_class sun_col; + /* 0x0EB */ u8 field_0xeb; + /* 0x0EC */ color_RGB_class sun_col2; + /* 0x0EF */ u8 field_0xef; + /* 0x0F0 */ u8 field_0xf0; + /* 0x0F1 */ u8 field_0xf1; + /* 0x0F2 */ u8 field_0xf2; + /* 0x0F3 */ u8 field_0xf3; + /* 0x0F4 */ u8 field_0xf4; + /* 0x0F5 */ u8 field_0xf5; + /* 0x0F6 */ u8 field_0xf6; + /* 0x0F7 */ u8 field_0xf7; + /* 0x0F8 */ u8 field_0xf8; + /* 0x0F9 */ u8 field_0xf9; + /* 0x0FA */ u8 field_0xfa; + /* 0x0FB */ u8 field_0xfb; + /* 0x0FC */ u8 field_0xfc; + /* 0x0FD */ u8 field_0xfd; + /* 0x0FE */ u8 field_0xfe; + /* 0x0FF */ u8 field_0xFF[0x108 - 0x0FF]; + /* 0x108 */ u8 field_0x108; + /* 0x109 */ u8 field_0x109; + /* 0x10A */ u8 field_0x10a; + /* 0x10B */ u8 field_0x10b; + /* 0x10C */ u8 field_0x10c; + /* 0x10D */ u8 field_0x10d; + /* 0x10E */ u8 field_0x10e; + /* 0x10F */ u8 field_0x10f; + /* 0x110 */ u8 field_0x110; + /* 0x111 */ u8 field_0x111; + /* 0x112 */ u8 field_0x112; + /* 0x113 */ u8 field_0x113; + /* 0x114 */ u8 field_0x114; + /* 0x115 */ u8 field_0x115; + /* 0x116 */ u8 field_0x116; + /* 0x117 */ u8 field_0x117[0x120 - 0x117]; + /* 0x120 */ f32 field_0x120; + /* 0x124 */ f32 field_0x124; + /* 0x128 */ u8 constellation_maker_ON; + /* 0x12C */ cXyz constellation_maker_pos[10]; + /* 0x1A4 */ f32 lightning_scale_x_min; + /* 0x1A8 */ f32 lightning_scale_x_max; + /* 0x1AC */ f32 lightning_scale_y_min; + /* 0x1B0 */ f32 lightning_scale_y_max; + /* 0x1B4 */ s16 lightning_tilt_angle; + /* 0x1B6 */ s16 field_0x1b6; + /* 0x1B8 */ cXyz collect_light_reflect_pos; + /* 0x1C4 */ u8 lightning_debug_mode; + /* 0x1C5 */ u8 field_0x1c5; + /* 0x1C6 */ u8 sun_adjust_ON; + /* 0x1C8 */ f32 moya_alpha; + /* 0x1CC */ color_RGB_class thunder_col; + /* 0x1D0 */ f32 thunder_height; + /* 0x1D4 */ f32 thunder_blacken_rate; + /* 0x1D8 */ f32 water_in_col_ratio_R; + /* 0x1DC */ f32 water_in_col_ratio_G; + /* 0x1E0 */ f32 water_in_col_ratio_B; + /* 0x1E4 */ u8 field_0x1e4; + /* 0x1E5 */ u8 field_0x1e5; + /* 0x1E6 */ u8 field_0x1e6; + /* 0x1E8 */ f32 field_0x1e8; + /* 0x1EC */ f32 field_0x1ec; + /* 0x1F0 */ f32 field_0x1f0; + /* 0x1F4 */ f32 field_0x1f4; + /* 0x1F8 */ f32 field_0x1f8; + /* 0x1FC */ u8 field_0x1fc; + /* 0x1FD */ u8 field_0x1fd; + /* 0x1FE */ u8 field_0x1fe; + /* 0x1FF */ u8 field_0x1ff; + /* 0x200 */ u8 field_0x200; + /* 0x204 */ f32 mist_tag_fog_near; + /* 0x208 */ f32 mist_tag_fog_far; + /* 0x20C */ u8 demo_adjust_SW; + /* 0x20D */ u8 wipe_test_ON; + /* 0x210 */ f32 field_0x210; + /* 0x214 */ u8 fade_test_speed; + /* 0x215 */ u8 field_0x215; + /* 0x218 */ f32 smell_railtag_space; + /* 0x21C */ color_RGB_class smell_col; + /* 0x21F */ u8 field_0x21f; + /* 0x220 */ color_RGB_class smell_col2; + /* 0x224 */ f32 smell_alpha; + /* 0x228 */ u8 smell_adjust_ON; + /* 0x22A */ u16 field_0x22a; + /* 0x22C */ u8 field_0x22c; + /* 0x22D */ u8 field_0x22d; + /* 0x22E */ u8 field_0x22E[0x231 - 0x22E]; + /* 0x231 */ u8 light_adjust_ON; + /* 0x232 */ u8 field_0x232[0x23C - 0x232]; + /* 0x23C */ color_RGB_class adjust_light_ambcol; + /* 0x240 */ s16 adjust_light_dif0_col_R; + /* 0x242 */ s16 adjust_light_dif0_col_G; + /* 0x244 */ s16 adjust_light_dif0_col_B; + /* 0x246 */ color_RGB_class adjust_light_dif1_col; + /* 0x24C */ Vec adjust_light_main_pos; + /* 0x258 */ GXColorS10 mist_twilight_c1_col; + /* 0x260 */ GXColor mist_twilight_c2_col; + /* 0x264 */ color_RGB_class field_0x264; + /* 0x267 */ u8 field_0x267; + /* 0x268 */ u8 field_0x268; + /* 0x26A */ s16 adjust_custom_R; + /* 0x26C */ s16 adjust_custom_G; + /* 0x26E */ s16 adjust_custom_B; + /* 0x270 */ u8 adjust_light_mode; + /* 0x274 */ f32 adjust_height; + /* 0x278 */ f32 field_0x278; + /* 0x27C */ f32 field_0x27c; + /* 0x280 */ f32 field_0x280; + /* 0x284 */ f32 field_0x284; + /* 0x288 */ f32 field_0x288; + /* 0x28C */ f32 field_0x28c; + /* 0x290 */ u8 shadow_adjust_ON; + /* 0x294 */ f32 shadow_normal_alpha; + /* 0x298 */ f32 shadow_max_alpha; + /* 0x29C */ u8 field_0x29c; + /* 0x29D */ u8 field_0x29d; + /* 0x29E */ u8 field_0x29e; + /* 0x29F */ u8 field_0x29f; + /* 0x2A0 */ u8 field_0x2a0; + /* 0x2A1 */ u8 field_0x2a1; + /* 0x2A2 */ u8 field_0x2a2; + /* 0x2A3 */ u8 field_0x2a3; + /* 0x2A4 */ u8 field_0x2a4; + /* 0x2A5 */ u8 field_0x2a5; + /* 0x2A6 */ u8 field_0x2a6; + /* 0x2A7 */ u8 field_0x2a7; + /* 0x2A8 */ u8 field_0x2a8; + /* 0x2A9 */ u8 field_0x2a9; + /* 0x2AA */ u8 field_0x2aa; + /* 0x2AB */ color_RGB_class camera_light_col; + /* 0x2AE */ u8 field_0x2ae; + /* 0x2B0 */ f32 camera_light_y_shift; + /* 0x2B4 */ f32 camera_light_power; + /* 0x2B8 */ f32 camera_light_cutoff; + /* 0x2BC */ u8 camera_light_sp; + /* 0x2BD */ u8 camera_light_da; + /* 0x2BE */ u8 room_light_type; + /* 0x2C0 */ s16 demo_focus_pos; + /* 0x2C4 */ f32 demo_focus_offset_x; + /* 0x2C8 */ f32 demo_focus_offset_y; + /* 0x2CC */ color_RGB_class grass_ambcol; + /* 0x2CF */ u8 field_0x2cf; + /* 0x2D0 */ u8 grass_adjust_ON; + /* 0x2D4 */ f32 grass_shine_value; + /* 0x2D8 */ s16 stars_max_number; + /* 0x2DA */ u8 display_save_location; + /* 0x2DB */ u8 door_light_influence_ratio; + /* 0x2DC */ s16 unk_light_influence_ratio; + /* 0x2DE */ u8 fish_pond_colreg_adjust_ON; + /* 0x2E0 */ s16 fish_pond_colreg_c0_R; + /* 0x2E2 */ s16 fish_pond_colreg_c0_G; + /* 0x2E4 */ s16 fish_pond_colreg_c0_B; + /* 0x2E6 */ u8 field_0x2E6[0x2E8 - 0x2E6]; + /* 0x2E8 */ u8 water_mud_adjust_ON; + /* 0x2EA */ s16 field_0x2ea; + /* 0x2EC */ s16 field_0x2ec; + /* 0x2EE */ u8 fish_pond_tree_adjust_ON; + /* 0x2EF */ color_RGB_class fish_pond_tree_ambcol; + /* 0x2F2 */ u8 field_0x2f2; + /* 0x2F3 */ color_RGB_class fish_pond_tree_dif0_col; + /* 0x2F6 */ u8 field_0x2f6; + /* 0x2F7 */ color_RGB_class fish_pond_tree_dif1_col; + /* 0x2FA */ u8 field_0x2fa; + /* 0x2FB */ u8 rainbow_adjust_ON; + /* 0x2FC */ s16 rainbow_separation_dist; + /* 0x2FE */ u8 rainbow_max_alpha; + /* 0x2FF */ u8 field_0x2ff; + /* 0x300 */ u8 grass_light_debug; + /* 0x301 */ u8 grass_light_influence_ratio; + /* 0x302 */ s16 field_0x302; + /* 0x304 */ f32 field_0x304; + /* 0x308 */ u8 field_0x308; + /* 0x309 */ color_RGB_class moya_col; + /* 0x30C */ u8 field_0x30c; + /* 0x30D */ u8 field_0x30d; + /* 0x30E */ u8 twilight_sense_saturation_mode; + /* 0x30F */ u8 twilight_sense_pat; + /* 0x310 */ u8 twilight_sense_pat_tv_display_ON; + /* 0x311 */ u8 field_0x311; + /* 0x312 */ u8 field_0x312; + /* 0x313 */ u8 camera_light_adjust_ON; + /* 0x314 */ f32 field_0x314; + /* 0x318 */ f32 terrain_height_crr; + /* 0x31C */ f32 influence_multiplier; + /* 0x320 */ f32 cutoff_multiplier; + /* 0x324 */ color_RGB_class possessed_zelda_light_col; + /* 0x327 */ u8 field_0x327; + /* 0x328 */ f32 possessed_zelda_light_height; + /* 0x32C */ f32 possessed_zelda_light_power; + /* 0x330 */ color_RGB_class beast_ganon_light_col; + /* 0x333 */ u8 field_0x333; + /* 0x334 */ f32 beast_ganon_light_height; + /* 0x338 */ f32 beast_ganon_light_power; + /* 0x33C */ color_RGB_class water_in_light_col; +}; + +class dKankyo_efflightHIO_c : public JORReflexible { +public: + dKankyo_efflightHIO_c(); + + void genMessage(JORMContext*); + virtual ~dKankyo_efflightHIO_c() {} + + /* 0x04 */ u8 field_0x4; + /* 0x05 */ u8 adjust_ON; + /* 0x08 */ f32 power; + /* 0x0C */ f32 fluctuation; + /* 0x10 */ dKy_flush_info step1; + /* 0x14 */ dKy_flush_info step2; + /* 0x18 */ dKy_flush_info step3; + /* 0x1C */ dKy_flush_info step4; +}; + +class dKankyo_demolightHIO_c : public JORReflexible { +public: + dKankyo_demolightHIO_c(); + + void genMessage(JORMContext*); + virtual ~dKankyo_demolightHIO_c() {} + + /* 0x04 */ u8 field_0x4; + /* 0x05 */ u8 adjust_ON; + /* 0x08 */ LIGHT_INFLUENCE light; +}; + +class dKankyo_windHIO_c : public JORReflexible { +public: + dKankyo_windHIO_c(); + + void genMessage(JORMContext*); + virtual ~dKankyo_windHIO_c() {} + + /* 0x04 */ u8 field_0x04[0x05 - 0x04]; + /* 0x05 */ u8 display_wind_dir; + /* 0x06 */ u8 use_HOSTIO_adjustment; + /* 0x08 */ int field_0x8; + /* 0x0C */ s16 global_x_angle; + /* 0x0E */ s16 global_y_angle; + /* 0x10 */ f32 global_wind_power; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ u8 display_wind_trajectory; + /* 0x22 */ s16 lightsword_x_angle; + /* 0x24 */ f32 lightsword_init_scale; + /* 0x28 */ f32 lightsword_end_scale; + /* 0x2C */ f32 influence; + /* 0x30 */ f32 influence_attenuation; + /* 0x34 */ f32 lightsword_move_speed; + /* 0x38 */ f32 wind_change_speed; + /* 0x3C */ s16 minigame_no_wind_duration; + /* 0x3E */ s16 minigame_low_wind_duration; + /* 0x40 */ s16 minigame_high_wind_duration; +}; + +class dKankyo_dungeonlightHIO_c : public JORReflexible { +public: + dKankyo_dungeonlightHIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + virtual ~dKankyo_dungeonlightHIO_c() {} + + /* 0x4 */ u8 field_0x4; + /* 0x5 */ u8 field_0x5; + /* 0x6 */ u8 displayDebugSphere; + /* 0x7 */ u8 usedLights; + /* 0x8 */ u8 field_0x8; + /* 0x9 */ u8 field_0x9; +}; + +class dKankyo_ParticlelightHIO_c : public JORReflexible { +public: + dKankyo_ParticlelightHIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + virtual ~dKankyo_ParticlelightHIO_c() {} + + /* 0x04 */ u8 field_0x4; + /* 0x05 */ u8 field_0x5; + /* 0x06 */ GXColor prim_col; + /* 0x0A */ GXColor env_col; + /* 0x10 */ f32 blend_ratio; + /* 0x14 */ int field_0x14; + /* 0x18 */ u8 type; + /* 0x19 */ u8 field_0x19; + /* 0x1A */ u8 field_0x1a; + /* 0x1B */ u8 field_0x1B[0x20 - 0x1B]; +}; + +class dKankyo_HIO_c : public JORReflexible { +public: + dKankyo_HIO_c(); + + void genMessage(JORMContext*); + virtual ~dKankyo_HIO_c() {} + + /* 0x004 */ u8 wether_effect; + /* 0x005 */ u8 wether_palette; + /* 0x006 */ u8 time_change; + /* 0x007 */ u8 display_env_tag_debug; + /* 0x008 */ u8 display_wether_debug; + /* 0x009 */ u8 field_0x9; + /* 0x00A */ u8 field_0xa; + /* 0x00B */ u8 display_schedule_bit; + /* 0x00C */ f32 field_0xc; + /* 0x010 */ u8 field_0x10; + /* 0x011 */ u8 start_rain; + /* 0x012 */ u8 effect_light_monitor; + /* 0x013 */ u8 point_light_monitor; + /* 0x014 */ u8 field_0x14; + /* 0x015 */ u8 field_0x15; + /* 0x016 */ u8 field_0x16; + /* 0x017 */ u8 field_0x17; + /* 0x018 */ u8 no_setting_tevstr; + /* 0x019 */ u8 no_color_type; + /* 0x01A */ s8 field_0x1a; + /* 0x01C */ dKankyo_lightHIO_c light; + /* 0x0A0 */ dKankyo_vrboxHIO_c vrbox; + /* 0x0C0 */ dKankyo_bloomHIO_c bloom; + /* 0x3C8 */ dKankyo_navyHIO_c navy; + /* 0x708 */ dKankyo_efflightHIO_c effLight; + /* 0x728 */ dKankyo_demolightHIO_c demoLight; + /* 0x750 */ dKankyo_windHIO_c wind; + /* 0x794 */ dKankyo_dungeonlightHIO_c dungeonLight; + /* 0x7A0 */ dKankyo_ParticlelightHIO_c particleLight; }; extern dKankyo_HIO_c g_kankyoHIO; @@ -611,7 +1075,7 @@ int dKy_WolfEyeLight_set(cXyz* pos_p, f32 angle_x, f32 angle_y, f32 cutoff, GXCo BOOL dKy_TeachWind_existence_chk(); u8 dKy_darkworld_stage_check(char const* stageName, int roomNo); BOOL dKy_withwarp_capture_check(); -bool dKy_darkworld_check(); +u8 dKy_darkworld_check(); void dKy_undwater_filter_draw(); BOOL dKy_camera_water_in_status_check(); int dKy_Outdoor_check(); @@ -675,10 +1139,7 @@ void dKy_bgparts_activelight_cut(int bgpart_id); int dKy_Indoor_check(); void dKy_GfFog_tevstr_set(dKy_tevstr_c* tevstr_p); void dKy_setLight_mine(dKy_tevstr_c* tevstr_p); - -#if DEBUG -inline void dKankyo_lightHIOInfoUpDateF() { -} -#endif +u8 dKy_get_schbit(); +int dKy_get_schbit_timer(); #endif /* D_KANKYO_D_KANKYO_H */ diff --git a/include/d/d_kankyo_data.h b/include/d/d_kankyo_data.h index 69cf99a0e9..2d6e628c48 100644 --- a/include/d/d_kankyo_data.h +++ b/include/d/d_kankyo_data.h @@ -52,9 +52,7 @@ enum BloomType { /* 0x1 */ BLOOM_SOFT }; -#define BLOOMINFO_MAX 64 -class dKydata_BloomInfo_c { -public: +struct dkydata_bloomInfo_info_class { /* 0x0 */ u8 mType; /* 0x1 */ u8 mThreshold; /* 0x2 */ u8 mBlurAmount; @@ -66,7 +64,13 @@ public: /* 0x8 */ u8 mSaturateSubtractR; /* 0x9 */ u8 mSaturateSubtractG; /* 0xA */ u8 mSaturateSubtractB; - /* 0xB */ u8 mSaturateSubtractA; + /* 0xB */ u8 mSaturateSubtractA; +}; + +#define BLOOMINFO_MAX 64 +class dKydata_BloomInfo_c { +public: + dkydata_bloomInfo_info_class info; }; // Size: 0xC void* dKyd_dmpalet_getp(); diff --git a/include/d/d_kankyo_debug.h b/include/d/d_kankyo_debug.h new file mode 100644 index 0000000000..85e371e5bd --- /dev/null +++ b/include/d/d_kankyo_debug.h @@ -0,0 +1,20 @@ +#ifndef D_KANKYO_DEBUG_H +#define D_KANKYO_DEBUG_H + +#include "d/d_kankyo.h" + +void dKydb_color_HIO_update(); +void dKydb_vrbox_HIO_update(); +void dKydb_timedisp(); +void dKydb_HIO_kcolor_debug(u8*, u8*, u8*, u8*); +void dKydb_HIO_vrbox_debug(u8*, u8*, u8*, u8*); +void dKydb_HIO_debug_TVdsp(f32, f32, int, int, u16); +void dKydb_HIO_debug_draw(); +void dKydb_HIO_winddebug_draw(); +void dKydb_HIO_debug_Wind(); +void dKydb_winddisp_draw(); +void dKydb_dungeonlight_draw(); +void dKydb_efplight_monitor(); +void dKydb_plight_monitor(); + +#endif diff --git a/include/d/d_kankyo_rain.h b/include/d/d_kankyo_rain.h index 8644fa695e..7b3e1ef75c 100644 --- a/include/d/d_kankyo_rain.h +++ b/include/d/d_kankyo_rain.h @@ -40,6 +40,9 @@ void dKyr_shstar_init(); void dKyr_star_move(); void dKyr_shstar_move(); void vrkumo_move(); + +class camera_class; void dKyr_get_vectle_calc(cXyz* param_0, cXyz* param_1, cXyz* param_2); +void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* o_out, f32 param_2, f32 param_3); #endif /* D_KANKYO_D_KANKYO_RAIN_H */ diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 9976a4b801..d9b611b5e1 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1364,8 +1364,9 @@ inline s32 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* param_0) { return param_0->field_0x09 >> 1 & 0x1f; } -inline s8 dStage_stagInfo_GetTimeH(stage_stag_info_class* p_info) { - return (p_info->field_0x0c >> 8) & 0xFF; +inline int dStage_stagInfo_GetTimeH(stage_stag_info_class* p_info) { + s8 time = (p_info->field_0x0c >> 8) & 0xFF; + return time; } inline BOOL dStage_staginfo_GetArchiveHeap(stage_stag_info_class* p_info) { @@ -1448,7 +1449,7 @@ inline u8 dStage_FileList_dt_GetDefaultCamera(dStage_FileList_dt_c* p_fList) { return p_fList->mDefaultCamera; } -inline u8 dStage_FileList_dt_GRASSLIGHT(dStage_FileList_dt_c* p_fList) { +inline int dStage_FileList_dt_GRASSLIGHT(dStage_FileList_dt_c* p_fList) { return (p_fList->mParameters >> 7) & 0xFF; } diff --git a/include/f_ap/f_ap_game.h b/include/f_ap/f_ap_game.h index b5cc371d80..5827100a27 100644 --- a/include/f_ap/f_ap_game.h +++ b/include/f_ap/f_ap_game.h @@ -139,6 +139,22 @@ inline u8 fapGmHIO_getHostIO() { return g_HIO.mUsingHostIO; } +inline void fapGmHIO_set2Ddraw(u8 param_0) { + g_HIO.mDisplay2D = param_0; +} + +inline u8 fapGmHIO_get2Ddraw() { + return g_HIO.mDisplay2D; +} + +inline void fapGmHIO_offPrint() { + g_HIO.mDisplayPrint &= (u8)~0x1; +} + +inline void fapGmHIO_onPrint() { + g_HIO.mDisplayPrint |= (u8)0x1; +} + struct fapGm_dataMem { enum HeapType_e { HeapType_Error_e, diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 127daabc0d..f78bcdadd4 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -607,12 +607,7 @@ private: class mDoExt_cubePacket : public J3DPacket { public: - mDoExt_cubePacket(cXyz& i_position, cXyz& i_size, csXyz& i_angle, const GXColor& i_color) { - mPosition = i_position; - mSize = i_size; - mAngle = i_angle; - mColor = i_color; - } + mDoExt_cubePacket(cXyz& i_position, cXyz& i_size, csXyz& i_angle, const GXColor& i_color); virtual void draw(); virtual ~mDoExt_cubePacket() {} @@ -625,13 +620,7 @@ public: class mDoExt_cylinderPacket : public J3DPacket { public: - mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ) { - mPosition = i_position; - mRadius = i_radius; - mHeight = i_height; - mColor = i_color; - mClipZ = i_clipZ; - } + mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ); virtual void draw(); virtual ~mDoExt_cylinderPacket() {} @@ -645,12 +634,7 @@ public: class mDoExt_spherePacket : public J3DPacket { public: - mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ) { - mPosition = i_position; - mSize = i_size; - mColor = i_color; - mClipZ = i_clipZ; - } + mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ); virtual void draw(); virtual ~mDoExt_spherePacket() {} @@ -663,17 +647,7 @@ public: class mDoExt_cube8pPacket : public J3DPacket { public: - mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) { - cXyz* pnt_array = i_points; - - for (int i = 0; i < 8; i++) { - mPoints[i] = *pnt_array; - pnt_array++; - } - - DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 8); - mColor = i_color; - } + mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color); virtual void draw(); virtual ~mDoExt_cube8pPacket() {} @@ -684,18 +658,7 @@ public: class mDoExt_trianglePacket : public J3DPacket { public: - mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { - cXyz* pnt_array = i_points; - - for (int i = 0; i < 3; i++) { - mPoints[i] = *pnt_array; - pnt_array++; - } - - DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 3); - mColor = i_color; - mClipZ = i_clipZ; - } + mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ); virtual void draw(); virtual ~mDoExt_trianglePacket() {} @@ -707,18 +670,7 @@ public: class mDoExt_quadPacket : public J3DPacket { public: - mDoExt_quadPacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { - cXyz* pnt_array = i_points; - - for (int i = 0; i < 4; i++) { - mPoints[i] = *pnt_array; - pnt_array++; - } - - DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 4); - mColor = i_color; - mClipZ = i_clipZ; - } + mDoExt_quadPacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ); virtual void draw(); virtual ~mDoExt_quadPacket() {} @@ -730,13 +682,7 @@ public: class mDoExt_linePacket : public J3DPacket { public: - mDoExt_linePacket(cXyz& i_start, cXyz& i_end, const GXColor& i_color, u8 i_clipZ, u8 i_width) { - mStart = i_start; - mEnd = i_end; - mColor = i_color; - mClipZ = i_clipZ; - mWidth = i_width; - } + mDoExt_linePacket(cXyz& i_start, cXyz& i_end, const GXColor& i_color, u8 i_clipZ, u8 i_width); virtual void draw(); virtual ~mDoExt_linePacket() {} @@ -750,11 +696,7 @@ public: class mDoExt_cylinderMPacket : public J3DPacket { public: - mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ) { - PSMTXCopy(i_mtx, mMatrix); - mColor = i_color; - mClipZ = i_clipZ; - } + mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ); virtual void draw(); virtual ~mDoExt_cylinderMPacket() {} @@ -766,13 +708,7 @@ public: class mDoExt_circlePacket : public J3DPacket { public: - mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { - mPosition = i_position; - mRadius = i_radius; - mColor = i_color; - mClipZ = i_clipZ; - mLineWidth = i_lineWidth; - } + mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth); virtual void draw(); virtual ~mDoExt_circlePacket() {} @@ -786,32 +722,21 @@ public: class mDoExt_ArrowPacket : public J3DPacket { public: - mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { - mPosition = i_position; - field_0x1c = param_1; - mColor = i_color; - mClipZ = i_clipZ; - m_lineWidth = i_lineWidth; - } + mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth); virtual void draw(); virtual ~mDoExt_ArrowPacket() {} - /* 0x10 */ cXyz mPosition; - /* 0x1C */ cXyz field_0x1c; + /* 0x10 */ cXyz mStart; + /* 0x1C */ cXyz mEnd; /* 0x28 */ GXColor mColor; /* 0x2C */ u8 mClipZ; - /* 0x2D */ u8 m_lineWidth; + /* 0x2D */ u8 mLineWidth; }; class mDoExt_pointPacket : public J3DPacket { public: - mDoExt_pointPacket(cXyz& i_position, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { - mPosition = i_position; - mColor = i_color; - mClipZ = i_clipZ; - mLineWidth = i_lineWidth; - } + mDoExt_pointPacket(cXyz& i_position, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth); virtual void draw(); virtual ~mDoExt_pointPacket() {} diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index 2910ab9e50..029aaaa0da 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -21,6 +21,7 @@ public: u8 getEnable() { return mEnable; } void setEnable(u8 i_enable) { mEnable = i_enable; } GXColor* getMonoColor() { return &mMonoColor; } + GXColor* getBlendColor() { return &mBlendColor; } void setPoint(u8 i_point) { mPoint = i_point; } void setBlureSize(u8 i_size) { mBlureSize = i_size; } void setBlureRatio(u8 i_ratio) { mBlureRatio = i_ratio; } @@ -28,6 +29,9 @@ public: void setMonoColor(GXColor i_color) { mMonoColor = i_color; } void setMode(u8 i_mode) { mMode = i_mode; } void* getBuffer() { return m_buffer; } + u8 getPoint() { return mPoint; } + u8 getBlureSize() { return mBlureSize; } + u8 getBlureRatio() { return mBlureRatio; } /* 0x00 */ GXColor mBlendColor; /* 0x04 */ GXColor mMonoColor; diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index 40fe3577ac..c82f7ae173 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -343,7 +343,7 @@ public: * Copies a given matrix `m` to the `now` matrix * @param m The source matrix to copy */ - static void copy(const Mtx m) { MTXCopy(m, now); } + static void copy(const Mtx m) { PSMTXCopy(m, now); } static void rotAxisRadS(const Vec* axis, f32 rad) { MTXRotAxisRad(now, axis, rad); diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h index 05e62b1a05..34b65626aa 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/math.h @@ -11,7 +11,7 @@ #define M_SQRT3 1.73205f #define DEG_TO_RAD(degrees) (degrees * (M_PI / 180.0f)) -#define RAD_TO_DEG(radians) (radians / (180.0f / M_PI)) +#define RAD_TO_DEG(radians) (radians * (180.0f / M_PI)) #ifdef __cplusplus extern "C" { diff --git a/src/d/actor/d_a_npc_chat.cpp b/src/d/actor/d_a_npc_chat.cpp index 7257aa35dc..e9c1a1e54c 100644 --- a/src/d/actor/d_a_npc_chat.cpp +++ b/src/d/actor/d_a_npc_chat.cpp @@ -3023,7 +3023,7 @@ BOOL daNpcChat_c::searchGroup() { /* 80982C10-80982D20 0024B0 0110+00 3/2 0/0 0/0 .text appearTimeCheck__11daNpcChat_cFv */ BOOL daNpcChat_c::appearTimeCheck() { - int time = (dKy_darkworld_check() & 0xFF) ? dKy_getDarktime_hour() : dKy_getdaytime_hour(); + int time = dKy_darkworld_check() ? dKy_getDarktime_hour() : dKy_getdaytime_hour(); BOOL rv = FALSE; switch (mTalkGroupNo) { @@ -3949,7 +3949,7 @@ bool daNpcChat_c::wait(void* param_1) { } if ( - (dKy_darkworld_check() & 0xFF) == 0 && daPy_py_c::checkNowWolf() && + dKy_darkworld_check() == 0 && daPy_py_c::checkNowWolf() && fopAcM_searchPlayerDistanceXZ2(this) < std::pow(500.0, 2.0) || mFear ) { setAction(&daNpcChat_c::fear); diff --git a/src/d/actor/d_a_npc_doorboy.cpp b/src/d/actor/d_a_npc_doorboy.cpp index b4b58443da..df0acf27de 100644 --- a/src/d/actor/d_a_npc_doorboy.cpp +++ b/src/d/actor/d_a_npc_doorboy.cpp @@ -201,7 +201,7 @@ cPhs__Step daNpcDoorBoy_c::Create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -50.0f, -10.0f, -50.0f, 50.0f, 210.0f, 50.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mSound.setMdlType(5, false, 0xFF & dKy_darkworld_check()); + mSound.setMdlType(5, false, dKy_darkworld_check()); mAcchCir.SetWall(daNpcDoorBoy_Param_c::m.common.width, daNpcDoorBoy_Param_c::m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), diff --git a/src/d/actor/d_a_vrbox2.cpp b/src/d/actor/d_a_vrbox2.cpp index f847e207f4..2b91f7296a 100644 --- a/src/d/actor/d_a_vrbox2.cpp +++ b/src/d/actor/d_a_vrbox2.cpp @@ -101,10 +101,10 @@ static int daVrbox2_Draw(vrbox2_class* i_this) { } #ifdef DEBUG - if (g_kankyoHIO.field_0x0b4 != 0) { - var_f31 = g_kankyoHIO.field_0x0b8; + if (g_kankyoHIO.vrbox.field_0x14 != 0) { + var_f31 = g_kankyoHIO.vrbox.m_horizonHeight; } else { - g_kankyoHIO.field_0x0b8 = var_f31; + g_kankyoHIO.vrbox.m_horizonHeight = var_f31; } #endif diff --git a/src/d/actor/d_flower.inc b/src/d/actor/d_flower.inc index f2bd9aae78..4ffd8562e0 100644 --- a/src/d/actor/d_flower.inc +++ b/src/d/actor/d_flower.inc @@ -602,10 +602,10 @@ void dFlower_packet_c::draw() { for (dFlower_data_c* sp44 = sp5C->getData(); sp44 != NULL; sp44 = sp44->mp_next) { #if DEBUG - if (g_kankyoHIO.field_0x698 != 0) { - sp64.r = g_kankyoHIO.field_0x694 * 2; - sp64.g = g_kankyoHIO.field_0x695 * 2; - sp64.b = g_kankyoHIO.field_0x696 * 2; + if (g_kankyoHIO.navy.grass_adjust_ON != 0) { + sp64.r = g_kankyoHIO.navy.grass_ambcol.r * 2; + sp64.g = g_kankyoHIO.navy.grass_ambcol.g * 2; + sp64.b = g_kankyoHIO.navy.grass_ambcol.b * 2; } else { #endif sp64.r = (sp44->field_0x04 & 0x1F) * 2; @@ -680,8 +680,8 @@ void dFlower_packet_c::draw() { } #if DEBUG - if (g_kankyoHIO.field_0x06d != 0) { - sp2C = g_kankyoHIO.field_0x79b; + if (g_kankyoHIO.light.m_HOSTIO_setting != 0) { + sp2C = g_kankyoHIO.dungeonLight.usedLights; } #endif diff --git a/src/d/actor/d_grass.inc b/src/d/actor/d_grass.inc index 672720ea35..a795278506 100644 --- a/src/d/actor/d_grass.inc +++ b/src/d/actor/d_grass.inc @@ -562,8 +562,8 @@ void dGrass_packet_c::draw() { } #if DEBUG - if (g_kankyoHIO.field_0x69c != 0.0f) { - var_f29 = g_kankyoHIO.field_0x69c; + if (g_kankyoHIO.navy.grass_shine_value != 0.0f) { + var_f29 = g_kankyoHIO.navy.grass_shine_value; } #endif @@ -598,8 +598,8 @@ void dGrass_packet_c::draw() { } #if DEBUG - if (g_kankyoHIO.field_0x06d != 0) { - sp48 = g_kankyoHIO.field_0x79b; + if (g_kankyoHIO.light.m_HOSTIO_setting != 0) { + sp48 = g_kankyoHIO.dungeonLight.usedLights; } #endif @@ -665,10 +665,10 @@ void dGrass_packet_c::draw() { GXColor sp38; #if DEBUG - if (g_kankyoHIO.field_0x698) { - sp38.r = g_kankyoHIO.field_0x694 * 2; - sp38.g = g_kankyoHIO.field_0x695 * 2; - sp38.b = g_kankyoHIO.field_0x696 * 2; + if (g_kankyoHIO.navy.grass_adjust_ON) { + sp38.r = g_kankyoHIO.navy.grass_ambcol.r * 2; + sp38.g = g_kankyoHIO.navy.grass_ambcol.g * 2; + sp38.b = g_kankyoHIO.navy.grass_ambcol.b * 2; } else { #endif sp38.r = (var_r29->m_addCol & 0x1F) * 2; diff --git a/src/d/d_debug_pad.h b/src/d/d_debug_pad.h index a9f43ea5f4..b032795ba2 100644 --- a/src/d/d_debug_pad.h +++ b/src/d/d_debug_pad.h @@ -1,9 +1,22 @@ #ifndef D_DEBUG_PAD_H #define D_DEBUG_PAD_H +#include "m_Do/m_Do_controller_pad.h" +#include "JSystem/JUtility/TColor.h" + class dDebugPad_c { public: + dDebugPad_c(); + bool Active(); + bool Update(); + bool Report(int, int, JUtility::TColor, const char*, ...); + bool Enable(s32); + bool Trigger(); + + /* 0x0 */ u8 mIsActive; + /* 0x1 */ u8 mTrigger; + /* 0x4 */ s32 mMode; }; extern dDebugPad_c dDebugPad; diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 5bb188d0d1..e21bd8cd4b 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -9,14 +9,18 @@ #include "d/actor/d_a_kytag08.h" #include "d/actor/d_a_player.h" #include "d/d_debug_viewer.h" +#include "d/d_debug_pad.h" #include "d/d_kankyo_rain.h" #include "d/d_kankyo_static.h" +#include "d/d_kankyo_debug.h" #include "d/d_meter2_info.h" #include "d/d_msg_object.h" #include "f_op/f_op_camera_mng.h" #include "f_op/f_op_kankyo.h" +#include "f_ap/f_ap_game.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" +#include "c/c_damagereaction.h" static void GxXFog_set(); @@ -32,6 +36,90 @@ inline float cosf(float x) { return cos(x); } +/* 803BBDC4-803BBEAC 018EE4 00E8+00 1/1 0/0 0/0 .data lightStatusBase */ +static LightStatus lightStatusBase = { + {-36384.5f, 29096.699f, 17422.199f}, + {377.0f, 5207.3999f, 1220.4f}, + {0xFF, 0xFF, 0xFF, 0xFF}, + 0, + 1.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 0.0f, + {0.0f, -1.0f, -1.0f}, + 90.0f, + GX_SP_OFF, + 500.0f, + 1.0f, + GX_DA_OFF, + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + }, + 320.0f, + -320.0f, + 1000.0f, + 160000.0f, + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + }, + 0.536479f, + 2.726476f, + 0.0f, + 0.5f, +}; + +/* 803BBEAC-803BBEBC 018FCC 0010+00 4/4 0/0 0/0 .data lightMaskData */ +static u16 lightMaskData[8] = { + GX_LIGHT0, GX_LIGHT1, GX_LIGHT2, GX_LIGHT3, GX_LIGHT4, GX_LIGHT5, GX_LIGHT6, GX_LIGHT7, +}; + +/* 8042CA54-8042DD64 059774 1310+00 116/118 128/128 649/649 .bss g_env_light */ +dScnKy_env_light_c g_env_light; + +/* 8042DD70-8042E07C 05AA90 030C+00 1/2 8/8 9/9 .bss g_mEnvSeMgr */ +Z2EnvSeMgr g_mEnvSeMgr; + +#if DEBUG +dKankyo_HIO_c g_kankyoHIO; +#endif + +/* 8042E07C-8042E7BC 05AD9C 0740+00 5/4 0/0 0/0 .bss lightStatusData */ +static LightStatus lightStatusData[8]; + +/* 80450700-80450704 000180 0002+02 2/2 0/0 0/0 .sdata lightMask */ +static u16 lightMask = 0x0001; + +/* 80450704-80450708 -00001 0004+00 3/3 0/0 0/0 .sdata lightStatusPt */ +static LightStatus* lightStatusPt = lightStatusData; + /* 8019C388-8019C3A4 196CC8 001C+00 2/2 0/0 0/0 .text dKy_WolfPowerup_AmbCol__FP11_GXColorS10 */ void dKy_WolfPowerup_AmbCol(GXColorS10* in_col_p) { JUT_ASSERT(185, in_col_p != NULL); @@ -225,76 +313,23 @@ int dKy_sense_pat_get() { return pat; } -/* 803BBDC4-803BBEAC 018EE4 00E8+00 1/1 0/0 0/0 .data lightStatusBase */ -static LightStatus lightStatusBase = { - {-36384.5f, 29096.699f, 17422.199f}, - {377.0f, 5207.3999f, 1220.4f}, - {0xFF, 0xFF, 0xFF, 0xFF}, - 0, - 1.0f, - 0.0f, - 0.0f, - 1.0f, - 0.0f, - 0.0f, - {0.0f, -1.0f, -1.0f}, - 90.0f, - GX_SP_OFF, - 500.0f, - 1.0f, - GX_DA_OFF, - { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - 320.0f, - -320.0f, - 1000.0f, - 160000.0f, - { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - 0.536479f, - 2.726476f, - 0.0f, - 0.5f, -}; - -/* 803BBEAC-803BBEBC 018FCC 0010+00 4/4 0/0 0/0 .data lightMaskData */ -static u16 lightMaskData[8] = { - GX_LIGHT0, GX_LIGHT1, GX_LIGHT2, GX_LIGHT3, GX_LIGHT4, GX_LIGHT5, GX_LIGHT6, GX_LIGHT7, -}; - /* 8019CB0C-8019CCDC 19744C 01D0+00 3/2 0/0 0/0 .text dKy_WolfPowerup_BgAmbCol__FP11_GXColorS10 */ void dKy_WolfPowerup_BgAmbCol(GXColorS10* in_col_p) { + int pattern = 0; JUT_ASSERT(374, in_col_p != NULL); - switch (dKy_sense_pat_get()) { + pattern = dKy_sense_pat_get(); + #if DEBUG + if (g_kankyoHIO.navy.twilight_sense_pat != 0) { + pattern = g_kankyoHIO.navy.twilight_sense_pat; + } + + if (g_kankyoHIO.navy.twilight_sense_pat_tv_display_ON) { + dDbVw_Report(20, 100, "sense pat[%d]", pattern); + } + #endif + + switch (pattern) { case 1: in_col_p->r = 33; in_col_p->g = 48; @@ -367,15 +402,31 @@ void dKy_WolfPowerup_BgAmbCol(GXColorS10* in_col_p) { in_col_p->b = 59; break; } + + #if DEBUG + if (g_kankyoHIO.navy.twilight_sense_pat_tv_display_ON) { + dDbVw_Report(20, 120, "R[%d]", in_col_p->r); + dDbVw_Report(20, 136, "G[%d]", in_col_p->g); + dDbVw_Report(20, 152, "B[%d]", in_col_p->b); + } + #endif } /* 8019CCDC-8019CE5C 19761C 0180+00 4/3 0/0 0/0 .text dKy_WolfPowerup_FogNearFar__FPfPf */ void dKy_WolfPowerup_FogNearFar(f32* near_p, f32* far_p) { + int pattern = 0; JUT_ASSERT(499, near_p != NULL); JUT_ASSERT(500, far_p != NULL); - switch (dKy_sense_pat_get()) { + pattern = dKy_sense_pat_get(); + #if DEBUG + if (g_kankyoHIO.navy.twilight_sense_pat != 0) { + pattern = g_kankyoHIO.navy.twilight_sense_pat; + } + #endif + + switch (pattern) { case 1: *near_p = 750.0f; *far_p = 1750.0f; @@ -437,6 +488,13 @@ void dKy_WolfPowerup_FogNearFar(f32* near_p, f32* far_p) { *far_p = 4750.0f; break; } + + #if DEBUG + if (g_kankyoHIO.navy.twilight_sense_pat_tv_display_ON) { + dDbVw_Report(100, 120, "near[%f]", *near_p); + dDbVw_Report(100, 136, "far [%f]", *far_p); + } + #endif } /* 8019CE5C-8019CFE4 19779C 0188+00 1/1 0/0 0/0 .text dKy_pos2_get_angle__FP4cXyzP4cXyzPsPs */ @@ -448,9 +506,6 @@ void dKy_pos2_get_angle(cXyz* pos1_p, cXyz* pos2_p, s16* pitch_p, s16* yaw_p) { *yaw_p = cM_atan2s(vec.x, vec.z); } -/* 8042CA54-8042DD64 059774 1310+00 116/118 128/128 649/649 .bss g_env_light */ -dScnKy_env_light_c g_env_light; - /* 8019CFE4-8019D1A0 197924 01BC+00 4/4 0/0 0/0 .text dKy_twi_wolflight_set__Fi */ void dKy_twi_wolflight_set(int light_id) { dScnKy_env_light_c* kankyo = dKy_getEnvlight(); @@ -470,7 +525,16 @@ void dKy_twi_wolflight_set(int light_id) { kankyo->field_0x0c18[light_id].mPos.y = camera_p->lookat.eye.y + vectle.y * 300.0f; kankyo->field_0x0c18[light_id].mPos.z = camera_p->lookat.eye.z + vectle.z * 300.0f; - switch (g_env_light.light_size) { + int size = g_env_light.light_size; + #if DEBUG + if (g_kankyoHIO.navy.room_light_type != 0) { + size = g_kankyoHIO.navy.room_light_type - 1; + } + + if (!g_kankyoHIO.navy.camera_light_adjust_ON) { + #endif + + switch (size) { case LIGHT_SIZE_S: kankyo->field_0x0c18[light_id].mPos.y += 1500.0f; break; @@ -488,7 +552,13 @@ void dKy_twi_wolflight_set(int light_id) { break; } - angle_x += 6000; + #if DEBUG + } else { + kankyo->field_0x0c18[light_id].mPos.y += g_kankyoHIO.navy.camera_light_y_shift; + } + #endif + + angle_x += (s16)6000; kankyo->field_0x0c18[light_id].mAngleX = cM_sht2d(-angle_x); kankyo->field_0x0c18[light_id].mAngleY = cM_sht2d(-angle_y) + 90.0f; } @@ -500,13 +570,13 @@ void dKy_lightdir_set(f32 angle_x, f32 angle_y, Vec* out_dir_p) { Vec calc_dir; cXyz dir; - f32 x_deg = RAD_TO_DEG(angle_x); - f32 y_deg = RAD_TO_DEG(angle_y); + f32 x_deg = angle_x / RAD_TO_DEG(1); + f32 y_deg = angle_y / RAD_TO_DEG(1); dir.x = cM_fcos(x_deg) * cM_fcos(y_deg); dir.y = cM_fsin(x_deg); dir.z = cM_fcos(x_deg) * cM_fsin(y_deg); - mDoMtx_inverseTranspose(view_mtx, inv); + cMtx_inverseTranspose(view_mtx, inv); cMtx_multVec(inv, &dir, &calc_dir); out_dir_p->x = calc_dir.x; @@ -520,8 +590,10 @@ void dKy_GXInitLightSpot(J3DLightInfo* light_p, f32 cutoff, u8 spot_type) { spot_type = GX_SP_OFF; } - f32 temp_f1; - f32 var_f4 = cosf((cutoff * M_PI) / 180.0f); + f32 var_f30; + + f32 sp8 = (cutoff * M_PI) / 180.0f; + f32 var_f4 = cosf(sp8); f32 x, y, z; switch (spot_type) { @@ -541,22 +613,22 @@ void dKy_GXInitLightSpot(J3DLightInfo* light_p, f32 cutoff, u8 spot_type) { z = 1.0f / (1.0f - var_f4); break; case GX_SP_SHARP: - temp_f1 = ((1.0f - var_f4) * (1.0f - var_f4)); - x = (var_f4 * (var_f4 - 2.0f)) / temp_f1; - y = 2.0f / temp_f1; - z = -1.0f / temp_f1; + var_f30 = ((1.0f - var_f4) * (1.0f - var_f4)); + x = (var_f4 * (var_f4 - 2.0f)) / var_f30; + y = 2.0f / var_f30; + z = -1.0f / var_f30; break; case GX_SP_RING1: - temp_f1 = ((1.0f - var_f4) * (1.0f - var_f4)); - x = (var_f4 * -4.0f) / temp_f1; - y = ((var_f4 + 1.0f) * 4.0f) / temp_f1; - z = -4.0f / temp_f1; + var_f30 = ((1.0f - var_f4) * (1.0f - var_f4)); + x = (var_f4 * -4.0f) / var_f30; + y = ((var_f4 + 1.0f) * 4.0f) / var_f30; + z = -4.0f / var_f30; break; case GX_SP_RING2: - temp_f1 = ((1.0f - var_f4) * (1.0f - var_f4)); - x = 1.0f - (var_f4 * 2.0f * var_f4) / temp_f1; - y = (var_f4 * 4.0f) / temp_f1; - z = -2.0f / temp_f1; + var_f30 = ((1.0f - var_f4) * (1.0f - var_f4)); + x = 1.0f - (var_f4 * 2.0f * var_f4) / var_f30; + y = (var_f4 * 4.0f) / var_f30; + z = -2.0f / var_f30; break; case GX_SP_OFF: default: @@ -574,10 +646,9 @@ void dKy_GXInitLightSpot(J3DLightInfo* light_p, f32 cutoff, u8 spot_type) { /* 8019D44C-8019D520 197D8C 00D4+00 2/2 0/0 0/0 .text * dKy_GXInitLightDistAttn__FP12J3DLightInfoffUc */ void dKy_GXInitLightDistAttn(J3DLightInfo* light_p, f32 param_1, f32 param_2, u8 distattn_type) { - f32 temp_f3; - f32 z; f32 x; f32 y; + f32 z; if (param_1 < 0.0f) { distattn_type = GX_DA_OFF; @@ -595,9 +666,8 @@ void dKy_GXInitLightDistAttn(J3DLightInfo* light_p, f32 param_1, f32 param_2, u8 break; case GX_DA_MEDIUM: x = 1.0f; - temp_f3 = (1.0f - param_2) * 0.5f; - y = temp_f3 / (param_2 * param_1); - z = temp_f3 / (param_1 * param_2 * param_1); + y = ((1.0f - param_2) * 0.5f) / (param_2 * param_1); + z = ((1.0f - param_2) * 0.5f) / (param_2 * param_1 * param_1); break; case GX_DA_STEEP: x = 1.0f; @@ -619,7 +689,7 @@ void dKy_GXInitLightDistAttn(J3DLightInfo* light_p, f32 param_1, f32 param_2, u8 /* 8019D520-8019D56C 197E60 004C+00 1/1 0/0 0/0 .text u8_data_ratio_set__FUcUcf */ static s16 u8_data_ratio_set(u8 start, u8 end, f32 ratio) { - return start + (int)(ratio * (end - start)); + return start + (int)(ratio * ((s16)end - (s16)start)); } /* 8019D56C-8019D5BC 197EAC 0050+00 1/1 0/0 0/0 .text s16_data_ratio_set__Fssf */ @@ -688,7 +758,8 @@ static f32 float_kankyo_color_ratio_set(f32 color_a_start, f32 color_a_end, f32 f32 a = fl_data_ratio_set(color_a_start, color_a_end, color_ratio); f32 b = fl_data_ratio_set(color_b_start, color_b_end, color_ratio); f32 calc_color = fl_data_ratio_set(a, b, blend_ratio); - calc_color += param_7 * (param_6 - calc_color); + f32 var_f28 = param_7 * (param_6 - calc_color); + calc_color += var_f28; return calc_color; } @@ -730,6 +801,10 @@ static void dKy_FiveSenses_fullthrottle_dark_static1() { particle_size.y = 1.0f; particle_size.z = 1.0f; + #if !PLATFORM_GCN + particle_size.x *= mDoGph_gInf_c::getScale(); + #endif + if (daPy_py_c::checkNowWolfPowerUp()) { kankyo->now_senses_effect = 1; init_mode_change = TRUE; @@ -830,6 +905,8 @@ int dKy_light_influence_id(cXyz position, int param_1) { int closest_plight_no = -1; int var_r27 = -1; + int spC; + int sp8 = 0; int j; int var_r25 = -1; int i; @@ -849,9 +926,7 @@ int dKy_light_influence_id(cXyz position, int param_1) { if (closest_plight_dist > var_f30) { if (i == 0) { closest_plight_no = j; - } - - if (i != 0) { + } else { var_r27 = j; } @@ -860,6 +935,7 @@ int dKy_light_influence_id(cXyz position, int param_1) { } else { closest_plight_dist = position.abs(g_env_light.pointlight[j]->mPosition); if (closest_plight_dist < g_env_light.pointlight[j]->mPow) { + #if PLATFORM_GCN if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && dComIfGp_roomControl_getStayNo() == 0) { @@ -869,6 +945,9 @@ int dKy_light_influence_id(cXyz position, int param_1) { } else { var_r25 = 99; } + #else + var_r25 = 99; + #endif } if (var_r25 != -2) { @@ -893,11 +972,14 @@ int dKy_light_influence_id(cXyz position, int param_1) { closest_plight_dist = 1000000.0f; } + if (param_1 == 0) { - return closest_plight_no; + spC = closest_plight_no; } else { - return var_r27; + spC = var_r27; } + + return spC; } /* 8019E13C-8019E404 198A7C 02C8+00 2/2 0/0 0/0 .text dKy_eflight_influence_id__F4cXyzi @@ -907,6 +989,8 @@ int dKy_eflight_influence_id(cXyz position, int param_1) { int var_r28 = -1; int var_r27 = -1; + int var_r26; + int sp8 = 0; int j, i; for (i = 0; i <= param_1; i++) { @@ -929,39 +1013,40 @@ int dKy_eflight_influence_id(cXyz position, int param_1) { } if (param_1 == 0) { - return var_r28; + var_r26 = var_r28; } else { - return var_r27; + var_r26 = var_r27; } + + return var_r26; } /* 8019E404-8019E430 198D44 002C+00 1/1 0/0 0/0 .text dKy_light_influence_col__Fi */ GXColorS10 dKy_light_influence_col(int light_id) { - dScnKy_env_light_c* kankyo = &g_env_light; - return kankyo->pointlight[light_id >= 0 ? light_id : 0]->mColor; + return g_env_light.pointlight[light_id >= 0 ? light_id : 0]->mColor; } /* 8019E430-8019E520 198D70 00F0+00 4/4 3/3 0/0 .text dKy_light_influence_col__FP8_GXColorf */ GXColor dKy_light_influence_col(GXColor* in_col_p, f32 ratio) { GXColor out_col; - f32 r = in_col_p->r * ratio; - if (r <= 255.0f) { - out_col.r = r; + f32 color = in_col_p->r * ratio; + if (color <= 255.0f) { + out_col.r = color; } else { out_col.r = 255; } - f32 g = in_col_p->g * ratio; - if (g <= 255.0f) { - out_col.g = g; + color = in_col_p->g * ratio; + if (color <= 255.0f) { + out_col.g = color; } else { out_col.g = 255; } - f32 b = in_col_p->b * ratio; - if (b <= 255.0f) { - out_col.b = b; + color = in_col_p->b * ratio; + if (color <= 255.0f) { + out_col.b = color; } else { out_col.b = 255; } @@ -971,14 +1056,12 @@ GXColor dKy_light_influence_col(GXColor* in_col_p, f32 ratio) { /* 8019E520-8019E548 198E60 0028+00 1/1 0/0 0/0 .text dKy_light_influence_power__Fi */ f32 dKy_light_influence_power(int light_id) { - dScnKy_env_light_c* kankyo = &g_env_light; - return kankyo->pointlight[light_id >= 0 ? light_id : 0]->mPow; + return g_env_light.pointlight[light_id >= 0 ? light_id : 0]->mPow; } /* 8019E548-8019E570 198E88 0028+00 1/1 0/0 0/0 .text dKy_light_influence_yuragi__Fi */ f32 dKy_light_influence_yuragi(int light_id) { - dScnKy_env_light_c* kankyo = &g_env_light; - return kankyo->pointlight[light_id >= 0 ? light_id : 0]->mFluctuation; + return g_env_light.pointlight[light_id >= 0 ? light_id : 0]->mFluctuation; } /* 8019E570-8019E694 198EB0 0124+00 1/1 0/0 0/0 .text dKy_light_influence_distance__F4cXyzi */ @@ -1042,11 +1125,40 @@ static void plight_set() { /* 8019E854-8019E874 199194 0020+00 1/1 0/0 0/0 .text bgparts_activelight_init__Fv */ static void bgparts_activelight_init() { - for (int i = 0; i < 2; i++) { + int i; + for (i = 0; i < 2; i++) { g_env_light.bgparts_active_light[0].mIndex = 0; } } +#if DEBUG +static void hostio_init() { + g_kankyoHIO.time_change = 0; + g_kankyoHIO.navy.field_0x6 = 0; + g_kankyoHIO.light.field_0x5 = 0; + g_kankyoHIO.light.field_0x8 = 320; + g_kankyoHIO.light.m_fogtype = 0; + g_kankyoHIO.wether_effect = 0; + g_kankyoHIO.wether_palette = 0; + g_kankyoHIO.display_env_tag_debug = 0; + g_kankyoHIO.display_wether_debug = 0; + g_kankyoHIO.field_0x9 = 0; + g_kankyoHIO.field_0xa = 1; + g_kankyoHIO.display_schedule_bit = 0; + g_kankyoHIO.field_0xc = 1.0f; + g_kankyoHIO.field_0x10 = 0; + g_kankyoHIO.start_rain = 0; + g_kankyoHIO.effect_light_monitor = 0; + g_kankyoHIO.point_light_monitor = 0; + g_kankyoHIO.field_0x14 = 0; + g_kankyoHIO.field_0x15 = 0; + g_kankyoHIO.field_0x16 = 0; + g_kankyoHIO.field_0x17 = 1; + g_kankyoHIO.no_setting_tevstr = 0; + g_kankyoHIO.no_color_type = 0; +} +#endif + /* 8019E874-8019EAA0 1991B4 022C+00 1/1 0/0 0/0 .text dungeonlight_init__Fv */ static void dungeonlight_init() { static Vec test_pos_tbl[] = { @@ -1116,8 +1228,7 @@ static void undwater_init() { g_env_light.undwater_btk = new mDoExt_btkAnm(); if (g_env_light.undwater_btk != NULL) { - J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", 0x3C); - if (!g_env_light.undwater_btk->init(modelData2, pbtk, TRUE, + if (!g_env_light.undwater_btk->init(modelData2, (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", 0x3C), TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) { JUT_ASSERT(1898, FALSE); @@ -1127,7 +1238,7 @@ static void undwater_init() { } } mDoExt_restoreCurrentHeap(); - mDoExt_adjustSolidHeap(g_env_light.undwater_ef_heap); + u32 var_r28 = mDoExt_adjustSolidHeap(g_env_light.undwater_ef_heap); } else { JUT_ASSERT(1917, FALSE); } @@ -1142,7 +1253,7 @@ void dKy_light_size_get(char const* stageName) { for (int i = 0; i < 36; i++) { if (!strcmp(stageName, size_tbl->stageName)) { g_env_light.light_size = size_tbl->size; - return; + break; } size_tbl++; } @@ -1178,7 +1289,7 @@ static void envcolor_init() { g_env_light.mFogAdjEnable = true; g_env_light.mFogAdjTableType = 0; g_env_light.mFogAdjCenter = 0x140; - dKyd_xfog_table_set(0); + dKyd_xfog_table_set(g_env_light.mFogAdjTableType); g_env_light.now_allcol_ratio = 1.0f; g_env_light.now_actcol_ratio = 1.0f; @@ -1220,7 +1331,16 @@ static void envcolor_init() { g_env_light.mDemoAttentionPoint = 0.11f; } + #if DEBUG + if (g_env_light.light_mask_type & 0xF0) { + g_env_light.light_mask_type = g_env_light.light_mask_type & 0xF; + } else { + g_env_light.light_mask_type = 0; + } + #else g_env_light.light_mask_type = 0; + #endif + g_env_light.field_0x130b = 0; g_env_light.light_size = LIGHT_SIZE_M; dKy_light_size_get(dComIfGp_getStartStageName()); @@ -1232,7 +1352,8 @@ static void envcolor_init() { g_env_light.field_0x126c = 999999.9f; g_env_light.field_0x127c = 200.0f; - if (dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo()) == ST_BOSS_ROOM) { + stage_stag_info_class* stageinfo = dComIfGp_getStage()->getStagInfo(); + if (dStage_stagInfo_GetSTType(stageinfo) == ST_BOSS_ROOM) { g_env_light.light_schedule = dKyd_schejule_boss_getp(); } else { g_env_light.light_schedule = dKyd_schejule_getp(); @@ -1331,36 +1452,113 @@ static void envcolor_init() { g_env_light.field_0x1302 = -1; g_env_light.mWaterSurfaceShineRate = 1.0f; - int stage_time = dStage_stagInfo_GetTimeH(dComIfGp_getStage()->getStagInfo()); - if (stage_time >= 0) { - dComIfGs_setTime(stage_time * 15.0f); + #if DEBUG + g_kankyoHIO.navy.camera_light_col.r = 25; + g_kankyoHIO.navy.camera_light_col.g = 90; + g_kankyoHIO.navy.camera_light_col.b = 183; + g_kankyoHIO.navy.field_0x2ae = 0xFF; + g_kankyoHIO.navy.camera_light_y_shift = 1500.0f; + g_kankyoHIO.navy.camera_light_power = 1.25f; + g_kankyoHIO.navy.camera_light_cutoff = 90.0f; + g_kankyoHIO.navy.camera_light_sp = 2; + g_kankyoHIO.navy.camera_light_da = 3; + g_kankyoHIO.navy.room_light_type = 0; + g_kankyoHIO.navy.field_0x311 = 0; + g_kankyoHIO.navy.field_0x312 = 0; + g_kankyoHIO.navy.field_0x314 = 0.0f; + g_kankyoHIO.navy.terrain_height_crr = 200.0f; + g_kankyoHIO.navy.influence_multiplier = 1.0f; + g_kankyoHIO.navy.cutoff_multiplier = 1.0f; + + if (dKy_darkworld_check()) { + g_kankyoHIO.navy.cloud_sunny_wind_influence_rate = 80.0f; + g_kankyoHIO.navy.cloud_sunny_bottom_height = 0.0f; + g_kankyoHIO.navy.cloud_sunny_top_height = 0.0f; + g_kankyoHIO.navy.cloud_sunny_size = 0.8f; + g_kankyoHIO.navy.cloud_sunny_height_shrink_rate = 0.98f; + g_kankyoHIO.navy.cloud_sunny_alpha = 0.75f; + + g_kankyoHIO.navy.cloud_cloudy_wind_influence_rate = g_kankyoHIO.navy.cloud_sunny_wind_influence_rate; + g_kankyoHIO.navy.cloud_cloudy_bottom_height = g_kankyoHIO.navy.cloud_sunny_bottom_height; + g_kankyoHIO.navy.cloud_cloudy_top_height = g_kankyoHIO.navy.cloud_sunny_top_height; + g_kankyoHIO.navy.cloud_cloudy_size = g_kankyoHIO.navy.cloud_sunny_size; + g_kankyoHIO.navy.cloud_cloudy_height_shrink_rate = g_kankyoHIO.navy.cloud_sunny_height_shrink_rate; + g_kankyoHIO.navy.cloud_cloudy_alpha = g_kankyoHIO.navy.cloud_sunny_alpha; + } else { + g_kankyoHIO.navy.cloud_sunny_wind_influence_rate = 10.0f; + g_kankyoHIO.navy.cloud_sunny_bottom_height = 2500.0f; + g_kankyoHIO.navy.cloud_sunny_top_height = 2500.0f; + g_kankyoHIO.navy.cloud_sunny_size = 0.6f; + g_kankyoHIO.navy.cloud_sunny_height_shrink_rate = 0.9999f; + g_kankyoHIO.navy.cloud_sunny_alpha = 1.0f; + + g_kankyoHIO.navy.cloud_cloudy_wind_influence_rate = 25.0f; + g_kankyoHIO.navy.cloud_cloudy_bottom_height = 1200.0f; + g_kankyoHIO.navy.cloud_cloudy_top_height = 1200.0f; + g_kankyoHIO.navy.cloud_cloudy_size = 0.84f; + g_kankyoHIO.navy.cloud_cloudy_height_shrink_rate = 0.96f; + g_kankyoHIO.navy.cloud_cloudy_alpha = 1.0f; + + g_kankyoHIO.navy.cloud_cloudy_bottom_height = 1200.0f; + g_kankyoHIO.navy.cloud_cloudy_top_height = 1200.0f; + g_kankyoHIO.navy.cloud_cloudy_size = 0.84f; + g_kankyoHIO.navy.cloud_cloudy_height_shrink_rate = 0.96f; + g_kankyoHIO.navy.cloud_cloudy_alpha = 1.0f; + } + #endif + + #if DEBUG + if (g_env_light.time_change_rate < 1000.0f) + #endif + { + stage_stag_info_class* stageinfo = dComIfGp_getStage()->getStagInfo(); + int stage_time = dStage_stagInfo_GetTimeH(stageinfo); + if ((s8)stage_time >= 0) { + dComIfGs_setTime((s8)stage_time * 15.0f); + } + } + + #if DEBUG + if (g_env_light.time_change_rate >= 2000.0f) { + g_env_light.time_change_rate = 0.03f; + } else if (g_env_light.time_change_rate >= 1000.0f) { + g_env_light.time_change_rate = 0.0f; + } else + #endif + { + g_env_light.time_change_rate = 0.012f; } - g_env_light.time_change_rate = 0.012f; memset(&g_env_light.moya_se, 0, 0x10); + + #if DEBUG + hostio_init(); + #endif } /* 8019F264-8019F2E8 199BA4 0084+00 1/1 1/1 0/0 .text dKy_clear_game_init__Fv */ void dKy_clear_game_init() { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + dKy_actor_addcol_set(0, 0, 0, 0.0f); - g_env_light.sun_pos.x = 1.0f; - g_env_light.sun_pos.y = 0.0f; - g_env_light.sun_pos.z = 0.0f; + kankyo->sun_pos.x = 1.0f; + kankyo->sun_pos.y = 0.0f; + kankyo->sun_pos.z = 0.0f; - g_env_light.moon_pos.x = -1.0f; - g_env_light.moon_pos.y = 0.0f; - g_env_light.moon_pos.z = 0.0f; + kankyo->moon_pos.x = -1.0f; + kankyo->moon_pos.y = 0.0f; + kankyo->moon_pos.z = 0.0f; - g_env_light.nexttime = -1.0f; - g_env_light.old_time = -1.0f; - g_env_light.dark_daytime = 120.0f; + kankyo->nexttime = -1.0f; + kankyo->old_time = -1.0f; + kankyo->dark_daytime = 120.0f; - g_env_light.darktime_week = 0; - g_env_light.fishing_hole_season = 0; - g_env_light.field_0x130a = 0; - g_env_light.wether = 0; - g_env_light.staffroll_next_timer = 0; + kankyo->darktime_week = 0; + kankyo->fishing_hole_season = 0; + kankyo->field_0x130a = 0; + kankyo->wether = 0; + kankyo->staffroll_next_timer = 0; } /* 8019F2E8-8019F400 199C28 0118+00 1/1 0/0 0/0 .text __ct__18dScnKy_env_light_cFv */ @@ -1374,50 +1572,119 @@ void dScnKy_env_light_c::setDaytime() { mDate = dComIfGs_getDate(); daytime = dComIfGs_getTime(); - if (using_time_control_tag == 0) { - if (!dKy_darkworld_check()) { - if (dComIfGp_event_runCheck() == FALSE) { - msg_class* msg = dMsgObject_c::getActor(); - bool temp_r29 = msg == NULL || msg->mode < 2; + #if DEBUG + switch (g_kankyoHIO.time_change) { + case 0: + #endif + if (using_time_control_tag == 0) { + if (!dKy_darkworld_check()) { + if (dComIfGp_event_runCheck() == FALSE) { + msg_class* msg = dMsgObject_c::getActor(); + u8 temp_r29 = true; + if (msg != NULL && msg->mode >= 2) { + temp_r29 = false; + } - if (dComIfGp_roomControl_getTimePass() && !field_0x130a && temp_r29) { - daytime += time_change_rate; + if (dComIfGp_roomControl_getTimePass() && !field_0x130a && temp_r29) { + daytime += time_change_rate; - // Stage is Fishing Pond or Hena's Hut - if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") || - !strcmp(dComIfGp_getStartStageName(), "R_SP127")) - { - f32 current_time = daytime; - if (current_time >= 300.0f || current_time <= 60.0f) { - daytime += time_change_rate; - daytime += time_change_rate; - } else if (current_time >= 150.0f && current_time <= 195.0f) { - daytime = current_time + time_change_rate; + // Stage is Fishing Pond or Hena's Hut + if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") || + !strcmp(dComIfGp_getStartStageName(), "R_SP127")) + { + if (daytime >= 300.0f || daytime <= 60.0f) { + daytime += time_change_rate; + daytime += time_change_rate; + } else if (daytime >= 150.0f && daytime <= 195.0f) { + daytime = daytime + time_change_rate; + } } - } - if ((u32)daytime >= 360.0f) { - daytime = 0.0f; - mDate++; - dKankyo_DayProc(); + if ((u32)daytime >= 360.0f) { + daytime = 0.0f; + mDate++; + dKankyo_DayProc(); + } + } else { + #if DEBUG + if (fapGmHIO_get2Ddraw()) { + dDbVw_Report(190, 65, "TS"); + } + #endif } + } else { + #if DEBUG + if (fapGmHIO_get2Ddraw()) { + dDbVw_Report(190, 65, "EVENT_PROC!"); + } + #endif } + } else { + dark_daytime += time_change_rate; + if ((u32)dark_daytime >= 360.0f) { + darktime_week++; + dark_daytime = 0.0f; + } + daytime = 0.0f; } - } else { - dark_daytime += time_change_rate; - if ((u32)dark_daytime >= 360.0f) { - darktime_week++; - dark_daytime = 0.0f; - } + } + #if DEBUG + break; + case 1: + daytime = 90.0f; + break; + case 2: + daytime = 105.0f; + break; + case 3: + daytime = 165.0f; + break; + case 4: + daytime = 255.0f; + break; + case 5: + daytime = 285.0f; + break; + case 6: + daytime = 345.0f; + break; + case 7: + daytime += time_change_rate; + if ((u32)daytime >= 360.0f) { daytime = 0.0f; + mDate++; + dKankyo_DayProc(); + } + break; + } + #endif + + #if DEBUG + static u8 data_8074c978; + static u8 data_80745860 = 99; + + if (g_kankyoHIO.time_change != data_80745860) { + if (data_8074c978 >= 2) { + data_8074c978 = 0; + data_80745860 = g_kankyoHIO.time_change; + g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF(); + } else { + data_8074c978++; } } + #endif if (daytime >= 360.0f) { daytime = 0.0f; } dComIfGs_setTime(daytime); + #if DEBUG + if (fapGmHIO_get2Ddraw()) { + dKydb_timedisp(); + } + #endif + mDoAud_setHour(dKy_getdaytime_hour()); mDoAud_setMinute(dKy_getdaytime_minute()); mDoAud_setWeekday(dKy_get_dayofweek()); @@ -1430,23 +1697,23 @@ void dScnKy_env_light_c::setDaytime() { void dScnKy_env_light_c::setSunpos() { camera_class* camera_p = dComIfGp_getCamera(0); cXyz pos; + f32 parcent; + f32 sun_angle; + f32 moon_angle; + f32 moon_time; if (camera_p != NULL && strcmp(dComIfGp_getStartStageName(), "F_SP200") != 0) { - f32 sun_time = g_env_light.daytime; - f32 sun_angle; - f32 moon_time; - f32 moon_angle; - - if (sun_time >= 90.0f && sun_time <= 270.0f) { - f32 percent = get_parcent(270.0f, 90.0f, sun_time); - sun_angle = (percent * 150.0f) + 105.0f; + if (g_env_light.daytime >= 90.0f && g_env_light.daytime <= 270.0f) { + parcent = get_parcent(270.0f, 90.0f, g_env_light.daytime); + sun_angle = (parcent * 150.0f) + 105.0f; } else { - if (sun_time < 90.0f) { - sun_time += 360.0f; + sun_angle = g_env_light.daytime; + if (sun_angle < 90.0f) { + sun_angle += 360.0f; } - f32 percent = get_parcent(450.0f, 270.0f, sun_time); - sun_angle = (percent * 210.0f) + 255.0f; + parcent = get_parcent(450.0f, 270.0f, sun_angle); + sun_angle = (parcent * 210.0f) + 255.0f; if (sun_angle > 360.0f) { sun_angle -= 360.0f; } @@ -1458,15 +1725,16 @@ void dScnKy_env_light_c::setSunpos() { } if (moon_time >= 90.0f && moon_time <= 270.0f) { - f32 percent = get_parcent(270.0f, 90.0f, moon_time); - moon_angle = (percent * 150.0f) + 105.0f; + parcent = get_parcent(270.0f, 90.0f, moon_time); + moon_angle = (parcent * 150.0f) + 105.0f; } else { - if (moon_time < 90.0f) { - moon_time += 360.0f; + moon_angle = moon_time; + if (moon_angle < 90.0f) { + moon_angle += 360.0f; } - f32 percent = get_parcent(450.0f, 270.0f, moon_time); - moon_angle = (percent * 210.0f) + 255.0f; + parcent = get_parcent(450.0f, 270.0f, moon_angle); + moon_angle = (parcent * 210.0f) + 255.0f; if (moon_angle > 360.0f) { moon_angle -= 360.0f; } @@ -1498,13 +1766,15 @@ f32 dScnKy_env_light_c::getDaytime() { /* 8019FA10-8019FA3C 19A350 002C+00 2/2 2/2 32/32 .text dKy_getdaytime_hour__Fv */ int dKy_getdaytime_hour() { - return dComIfGs_getTime() / 15.0f; + f32 time = dComIfGs_getTime(); + return time / 15.0f; } /* 8019FA3C-8019FAB8 19A37C 007C+00 1/1 1/1 26/26 .text dKy_getdaytime_minute__Fv */ int dKy_getdaytime_minute() { - f32 tmp = ((int)(dComIfGs_getTime() * 1000000.0f) % 15000000); - return tmp / 1000000.0f / 15.0f * 60.0f; + f32 time = dComIfGs_getTime(); + f32 var_f30 = ((int)(time * 1000000.0f) % 15000000) / 1000000.0f; + return var_f30 / 15.0f * 60.0f; } /* 8019FAB8-8019FAF4 19A3F8 003C+00 0/0 3/3 6/6 .text dKy_daynight_check__Fv */ @@ -1519,7 +1789,8 @@ BOOL dKy_daynight_check() { /* 8019FAF4-8019FB30 19A434 003C+00 0/0 0/0 22/22 .text dKy_getDarktime_hour__Fv */ int dKy_getDarktime_hour() { - return g_env_light.getDarkDaytime() / 15.0f; + f32 time = g_env_light.getDarkDaytime(); + return time / 15.0f; } /* 8019FB30-8019FBBC 19A470 008C+00 0/0 0/0 19/19 .text dKy_getDarktime_minute__Fv */ @@ -1569,9 +1840,11 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id f32* pattern_ratio_p, u8* init_timer_p) { stage_envr_info_class* envr_p; u8 psel_idx = 0; + int i; + int sp14 = 0; if (*init_timer_p != 0) { - *init_timer_p += 1; + (*init_timer_p)++; if (*init_timer_p > 20) { *init_timer_p = 0; @@ -1588,7 +1861,7 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id } } - for (int i = 0; i < 11; i++) { + for (i = 0; i < 11; i++) { // if time of day is not within light schedule range, then don't calculate light color if (!(daytime >= light_schedule[i].startTime && daytime <= light_schedule[i].endTime)) { continue; @@ -1598,35 +1871,108 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id *end_pat_pal_id_p = light_schedule[i].endTimeLight; *color_ratio_p = get_parcent(light_schedule[i].endTime, light_schedule[i].startTime, daytime); + #if DEBUG + if (dComIfGp_getStageEnvrNumInfo() - 1 < g_env_light.PrevCol) { + sp14 = TRUE; + JUT_WARN(2920, "color error 1:[%d]", g_env_light.PrevCol); + } + #endif + envr_p = &g_env_light.stage_envr_info[*prev_envr_id_p]; switch (*prev_pat_p) { case 0: psel_idx = envr_p->pselect_id[0]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[0]) { + sp14 = TRUE; + JUT_WARN(2936, "color error 2:pat0:[%d]", envr_p->pselect_id[0]); + } + #endif break; case 1: psel_idx = envr_p->pselect_id[1]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[1]) { + sp14 = TRUE; + JUT_WARN(2947, "color error 3:pat1:[%d]", envr_p->pselect_id[1]); + } + #endif break; case 2: psel_idx = envr_p->pselect_id[2]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[2]) { + sp14 = TRUE; + JUT_WARN(2958, "color error 4:pat2:[%d]", envr_p->pselect_id[2]); + } + #endif break; case 3: psel_idx = envr_p->pselect_id[3]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[3]) { + sp14 = TRUE; + JUT_WARN(2969, "color error 5:pat3:[%d]", envr_p->pselect_id[3]); + } + #endif break; case 4: psel_idx = envr_p->pselect_id[4]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[4]) { + sp14 = TRUE; + JUT_WARN(2980, "color error 6:pat4:[%d]", envr_p->pselect_id[4]); + } + #endif break; case 5: psel_idx = envr_p->pselect_id[5]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[5]) { + sp14 = TRUE; + JUT_WARN(2991, "color error 7:pat5:[%d]", envr_p->pselect_id[5]); + } + #endif break; case 6: psel_idx = envr_p->pselect_id[6]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[6]) { + sp14 = TRUE; + JUT_WARN(3002, "color error 8:pat6:[%d]", envr_p->pselect_id[6]); + } + #endif break; case 7: psel_idx = envr_p->pselect_id[7]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[7]) { + sp14 = TRUE; + JUT_WARN(3013, "color error 9:pat7:[%d]", envr_p->pselect_id[7]); + } + #endif break; default: if (*prev_pat_p > 7 && *prev_pat_p < 64) { psel_idx = envr_p->pselect_id[*prev_pat_p]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*prev_pat_p] && + dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*prev_pat_p] && + g_kankyoHIO.light.m_displayColorPaletteCheckInfo == TRUE) + { + sp14 = TRUE; + JUT_WARN(3030, "color error 10:pat8-:[%d]", envr_p->pselect_id[*prev_pat_p]); + } + #endif } break; } @@ -1638,8 +1984,20 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id { if (g_env_light.wether_pat1 == 0) { psel_idx = envr_p->pselect_id[8]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[8]) { + sp14 = TRUE; + } + #endif } else { psel_idx = envr_p->pselect_id[9]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[9]) { + sp14 = TRUE; + } + #endif } } // use a specific palette for rollgoal (camera eye gets set below 0.0) @@ -1699,35 +2057,108 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id break; } + #if DEBUG + if (dComIfGp_getStageEnvrNumInfo() - 1 < g_env_light.UseCol) { + sp14 = TRUE; + JUT_WARN(3107, "color error 11:[%d]", g_env_light.UseCol); + } + #endif + envr_p = &g_env_light.stage_envr_info[*next_envr_id_p]; switch (*next_pat_p) { case 0: psel_idx = envr_p->pselect_id[0]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[0]) { + sp14 = TRUE; + JUT_WARN(3122, "color error 12:pat0:[%d]", envr_p->pselect_id[0]); + } + #endif break; case 1: psel_idx = envr_p->pselect_id[1]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[1]) { + sp14 = TRUE; + JUT_WARN(3133, "color error 13:pat1:[%d]", envr_p->pselect_id[1]); + } + #endif break; case 2: psel_idx = envr_p->pselect_id[2]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[2]) { + sp14 = TRUE; + JUT_WARN(3144, "color error 14:pat2:[%d]", envr_p->pselect_id[2]); + } + #endif break; case 3: psel_idx = envr_p->pselect_id[3]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[3]) { + sp14 = TRUE; + JUT_WARN(3155, "color error 15:pat3:[%d]", envr_p->pselect_id[3]); + } + #endif break; case 4: psel_idx = envr_p->pselect_id[4]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[4]) { + sp14 = TRUE; + JUT_WARN(3166, "color error 16:pat4:[%d]", envr_p->pselect_id[4]); + } + #endif break; case 5: psel_idx = envr_p->pselect_id[5]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[5]) { + sp14 = TRUE; + JUT_WARN(3177, "color error 17:pat5:[%d]", envr_p->pselect_id[5]); + } + #endif break; case 6: psel_idx = envr_p->pselect_id[6]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[6]) { + sp14 = TRUE; + JUT_WARN(3188, "color error 18:pat6:[%d]", envr_p->pselect_id[6]); + } + #endif break; case 7: psel_idx = envr_p->pselect_id[7]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[7]) { + sp14 = TRUE; + JUT_WARN(3199, "color error 19:pat7:[%d]", envr_p->pselect_id[7]); + } + #endif break; default: if (*next_pat_p > 7 && *next_pat_p < 64) { psel_idx = envr_p->pselect_id[*next_pat_p]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*next_pat_p] && + dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*next_pat_p] && + g_kankyoHIO.light.m_displayColorPaletteCheckInfo == TRUE) + { + sp14 = TRUE; + JUT_WARN(3218, "color error 20:pat8-:[%d]", envr_p->pselect_id[*next_pat_p]); + } + #endif } break; } @@ -1769,8 +2200,20 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id { if (g_env_light.wether_pat1 == 0) { pselect_p = &g_env_light.stage_pselect_info[envr_p->pselect_id[8]]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[8]) { + sp14 = TRUE; + } + #endif } else { pselect_p = &g_env_light.stage_pselect_info[envr_p->pselect_id[9]]; + + #if DEBUG + if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[9]) { + sp14 = TRUE; + } + #endif } } // use a specific palette for rollgoal (camera eye gets set below 0.0) @@ -1827,6 +2270,15 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id break; } + #if DEBUG + dKydb_HIO_kcolor_debug(prev_pal_start_id_p, next_pal_start_id_p, prev_pal_end_id_p, next_pal_end_id_p); + if (sp14) { + *prev_pal_start_id_p = 255; + *next_pal_start_id_p = 255; + *prev_pal_end_id_p = 255; + *next_pal_end_id_p = 255; + } + #else if (*prev_pal_start_id_p > 250) { *prev_pal_start_id_p = 0; } @@ -1842,6 +2294,7 @@ void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id if (*next_pal_end_id_p > 250) { *next_pal_end_id_p = 0; } + #endif } /* 801A0340-801A040C 19AC80 00CC+00 3/3 0/0 0/0 .text @@ -1862,10 +2315,6 @@ void dKy_calc_color_set(GXColorS10* out_color_p, color_RGB_class* color_a_start_ color_b_start_p->b, color_b_end_p->b, blend_ratio, add_col.b, scale); } -inline bool checkZoraWearFlg() { - return dComIfGs_getSelectEquipClothes() == fpcNm_ITEM_WEAR_ZORA; -} - /* 801A040C-801A133C 19AD4C 0F30+00 1/1 0/0 0/0 .text setLight__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::setLight() { u8* init_timer = &g_env_light.light_init_timer; @@ -1881,8 +2330,10 @@ void dScnKy_env_light_c::setLight() { if (g_env_light.camera_water_in_status) { dBgS_CamGndChk_Wtr camchk; cXyz chkpos; + f32 sp84; + f32 sp80 = 1.0f; - if (checkZoraWearFlg() && !daPy_py_c::checkNowWolf()) { + if (daPy_py_c::checkZoraWearFlg() && !daPy_py_c::checkNowWolf()) { dKy_WaterIn_Light_set(); } @@ -1890,7 +2341,18 @@ void dScnKy_env_light_c::setLight() { chkpos.y += 100000.0f; camchk.SetPos(&chkpos); - dComIfG_Bgsp().GroundCross(&camchk); + sp84 = dComIfG_Bgsp().GroundCross(&camchk); + + if (sp84 > camera_p->lookat.eye.y) { + sp84 -= camera_p->lookat.eye.y; + sp80 = 1.0f - sp84 / 2250.0f; + if (sp80 < 0.0f) { + sp80 = 0.0f; + } + + sp80 = ((sp80 * 0.7f) * 0.5f) + 0.5f; + } + cLib_addCalc(&g_env_light.field_0x1258, 1.0f, 0.25f, 0.01f, 0.0000000000001f); } else { g_env_light.field_0x1258 = 0.0f; @@ -1925,6 +2387,11 @@ void dScnKy_env_light_c::setLight() { stage_palette_info_class* next_pal_start_p = &g_env_light.stage_palette_info[next_pal_start_id]; stage_palette_info_class* next_pal_end_p = &g_env_light.stage_palette_info[next_pal_end_id]; + #if DEBUG + if (!g_kankyoHIO.light.m_HOSTIO_setting && !g_kankyoHIO.vrbox.m_VrboxSetting) + #endif + { + dKy_calc_color_set(&actor_amb_col, &prev_pal_start_p->actor_amb_col, &next_pal_start_p->actor_amb_col, &prev_pal_end_p->actor_amb_col, &next_pal_end_p->actor_amb_col, color_ratio, g_env_light.pat_ratio, @@ -2013,17 +2480,27 @@ void dScnKy_env_light_c::setLight() { fog_col.b = 0; dKy_WolfPowerup_FogNearFar(&mFogNear, &mFogFar); } + } u8 prev_bloom_start_id = prev_pal_start_p->bloom_tbl_id; u8 next_bloom_start_id = next_pal_start_p->bloom_tbl_id; u8 prev_bloom_end_id = prev_pal_end_p->bloom_tbl_id; u8 next_bloom_end_id = next_pal_end_p->bloom_tbl_id; + #if DEBUG + if (g_kankyoHIO.light.m_HOSTIO_setting) { + prev_bloom_start_id = next_bloom_start_id = prev_bloom_end_id = next_bloom_end_id = g_kankyoHIO.bloom.m_saturationPattern; + } else { + g_kankyoHIO.bloom.m_saturationPattern = prev_pal_end_p->bloom_tbl_id; + } + + if (g_kankyoHIO.navy.twilight_sense_saturation_mode && daPy_py_c::checkNowWolfPowerUp()) { + prev_bloom_start_id = next_bloom_start_id = prev_bloom_end_id = next_bloom_end_id = g_kankyoHIO.navy.twilight_sense_saturation_mode; + } + #endif + if (daPy_py_c::checkNowWolfPowerUp()) { - next_bloom_end_id = 3; - prev_bloom_end_id = 3; - next_bloom_start_id = 3; - prev_bloom_start_id = 3; + prev_bloom_start_id = next_bloom_start_id = prev_bloom_end_id = next_bloom_end_id = 3; } f32 temp_f31; @@ -2044,14 +2521,20 @@ void dScnKy_env_light_c::setLight() { bloomInf1_p = dKyd_BloomInf_tbl_getp(prev_bloom_end_id); bloomInf3_p = dKyd_BloomInf_tbl_getp(next_bloom_end_id); + #if DEBUG + if (bloomInf0_p == NULL || bloomInf2_p == NULL || bloomInf1_p == NULL || bloomInf3_p == NULL) { + JUT_ASSERT(3839, 0); + } + #endif + u8 bloom_point = kankyo_color_ratio_set( - bloomInf0_p->mThreshold, bloomInf1_p->mThreshold, color_ratio, - bloomInf2_p->mThreshold, bloomInf3_p->mThreshold, g_env_light.pat_ratio, 0, 1.0f); + bloomInf0_p->info.mThreshold, bloomInf1_p->info.mThreshold, color_ratio, + bloomInf2_p->info.mThreshold, bloomInf3_p->info.mThreshold, g_env_light.pat_ratio, 0, 1.0f); mDoGph_gInf_c::getBloom()->setPoint(bloom_point); u8 blure_size = (u8)kankyo_color_ratio_set( - bloomInf0_p->mBlurAmount, bloomInf1_p->mBlurAmount, color_ratio, - bloomInf2_p->mBlurAmount, bloomInf3_p->mBlurAmount, g_env_light.pat_ratio, 0, 1.0f); + bloomInf0_p->info.mBlurAmount, bloomInf1_p->info.mBlurAmount, color_ratio, + bloomInf2_p->info.mBlurAmount, bloomInf3_p->info.mBlurAmount, g_env_light.pat_ratio, 0, 1.0f); if (dKy_darkworld_check()) { static s16 S_fuwan_sin; @@ -2063,24 +2546,25 @@ void dScnKy_env_light_c::setLight() { } mDoGph_gInf_c::getBloom()->setBlureSize(blure_size); - mDoGph_gInf_c::getBloom()->setBlureRatio(kankyo_color_ratio_set( - bloomInf0_p->mDensity, bloomInf1_p->mDensity, color_ratio, bloomInf2_p->mDensity, - bloomInf3_p->mDensity, g_env_light.pat_ratio, 0, 1.0f)); + u8 sp21 = kankyo_color_ratio_set( + bloomInf0_p->info.mDensity, bloomInf1_p->info.mDensity, color_ratio, bloomInf2_p->info.mDensity, + bloomInf3_p->info.mDensity, g_env_light.pat_ratio, 0, 1.0f); + mDoGph_gInf_c::getBloom()->setBlureRatio(sp21); GXColor bloom_blend_col; bloom_blend_col.r = kankyo_color_ratio_set( - bloomInf0_p->mColorR, bloomInf1_p->mColorR, color_ratio, bloomInf2_p->mColorR, - bloomInf3_p->mColorR, g_env_light.pat_ratio, 0, 1.0f); + bloomInf0_p->info.mColorR, bloomInf1_p->info.mColorR, color_ratio, bloomInf2_p->info.mColorR, + bloomInf3_p->info.mColorR, g_env_light.pat_ratio, 0, 1.0f); bloom_blend_col.g = kankyo_color_ratio_set( - bloomInf0_p->mColorG, bloomInf1_p->mColorG, color_ratio, bloomInf2_p->mColorG, - bloomInf3_p->mColorG, g_env_light.pat_ratio, 0, 1.0f); + bloomInf0_p->info.mColorG, bloomInf1_p->info.mColorG, color_ratio, bloomInf2_p->info.mColorG, + bloomInf3_p->info.mColorG, g_env_light.pat_ratio, 0, 1.0f); bloom_blend_col.b = kankyo_color_ratio_set( - bloomInf0_p->mColorB, bloomInf1_p->mColorB, color_ratio, bloomInf2_p->mColorB, - bloomInf3_p->mColorB, g_env_light.pat_ratio, 0, 1.0f); + bloomInf0_p->info.mColorB, bloomInf1_p->info.mColorB, color_ratio, bloomInf2_p->info.mColorB, + bloomInf3_p->info.mColorB, g_env_light.pat_ratio, 0, 1.0f); bloom_blend_col.a = - kankyo_color_ratio_set(bloomInf0_p->mOrigDensity, bloomInf1_p->mOrigDensity, - color_ratio, bloomInf2_p->mOrigDensity, - bloomInf3_p->mOrigDensity, g_env_light.pat_ratio, 0, 1.0f); + kankyo_color_ratio_set(bloomInf0_p->info.mOrigDensity, bloomInf1_p->info.mOrigDensity, + color_ratio, bloomInf2_p->info.mOrigDensity, + bloomInf3_p->info.mOrigDensity, g_env_light.pat_ratio, 0, 1.0f); mDoGph_gInf_c::getBloom()->setBlendColor(bloom_blend_col); if (g_env_light.field_0x12fc >= 0) { @@ -2089,20 +2573,20 @@ void dScnKy_env_light_c::setLight() { GXColor bloom_mono_col; bloom_mono_col.r = kankyo_color_ratio_set( - bloomInf0_p->mSaturateSubtractR, bloomInf1_p->mSaturateSubtractR, color_ratio, - bloomInf2_p->mSaturateSubtractR, bloomInf3_p->mSaturateSubtractR, + bloomInf0_p->info.mSaturateSubtractR, bloomInf1_p->info.mSaturateSubtractR, color_ratio, + bloomInf2_p->info.mSaturateSubtractR, bloomInf3_p->info.mSaturateSubtractR, g_env_light.pat_ratio, 0, 1.0f); bloom_mono_col.g = kankyo_color_ratio_set( - bloomInf0_p->mSaturateSubtractG, bloomInf1_p->mSaturateSubtractG, color_ratio, - bloomInf2_p->mSaturateSubtractG, bloomInf3_p->mSaturateSubtractG, + bloomInf0_p->info.mSaturateSubtractG, bloomInf1_p->info.mSaturateSubtractG, color_ratio, + bloomInf2_p->info.mSaturateSubtractG, bloomInf3_p->info.mSaturateSubtractG, g_env_light.pat_ratio, 0, 1.0f); bloom_mono_col.b = kankyo_color_ratio_set( - bloomInf0_p->mSaturateSubtractB, bloomInf1_p->mSaturateSubtractB, color_ratio, - bloomInf2_p->mSaturateSubtractB, bloomInf3_p->mSaturateSubtractB, + bloomInf0_p->info.mSaturateSubtractB, bloomInf1_p->info.mSaturateSubtractB, color_ratio, + bloomInf2_p->info.mSaturateSubtractB, bloomInf3_p->info.mSaturateSubtractB, g_env_light.pat_ratio, 0, 1.0f); bloom_mono_col.a = kankyo_color_ratio_set( - bloomInf0_p->mSaturateSubtractA, bloomInf1_p->mSaturateSubtractA, color_ratio, - bloomInf2_p->mSaturateSubtractA, bloomInf3_p->mSaturateSubtractA, + bloomInf0_p->info.mSaturateSubtractA, bloomInf1_p->info.mSaturateSubtractA, color_ratio, + bloomInf2_p->info.mSaturateSubtractA, bloomInf3_p->info.mSaturateSubtractA, g_env_light.pat_ratio, 0, 1.0f); mDoGph_gInf_c::getBloom()->setMonoColor(bloom_mono_col); @@ -2112,13 +2596,13 @@ void dScnKy_env_light_c::setLight() { u8 mode = 0; mDoGph_gInf_c::getBloom()->setEnable(1); - if (prev_bloom_start_id != 0 && bloomInf0_p->mType != 0) { + if (prev_bloom_start_id != 0 && bloomInf0_p->info.mType != 0) { mode = 1; - } else if (next_bloom_start_id != 0 && bloomInf2_p->mType != 0) { + } else if (next_bloom_start_id != 0 && bloomInf2_p->info.mType != 0) { mode = 1; - } else if (prev_bloom_end_id != 0 && bloomInf1_p->mType != 0) { + } else if (prev_bloom_end_id != 0 && bloomInf1_p->info.mType != 0) { mode = 1; - } else if (next_bloom_end_id != 0 && bloomInf3_p->mType != 0) { + } else if (next_bloom_end_id != 0 && bloomInf3_p->info.mType != 0) { mode = 1; } @@ -2171,16 +2655,37 @@ void dScnKy_env_light_c::setLight() { field_0x123c = 0.55f; } + #if DEBUG + if (g_kankyoHIO.navy.shadow_adjust_ON) { + var_f30 = g_kankyoHIO.navy.shadow_normal_alpha; + field_0x123c = g_kankyoHIO.navy.shadow_max_alpha; + } + #endif + if (g_env_light.light_init_timer != 0) { field_0x1238 = var_f30; } else { cLib_addCalc(&field_0x1238, var_f30, 0.05f, 0.005f, 0.000001f); } - stage_vrboxcol_info_class* prev_vrboxcol_start_p = &g_env_light.stage_vrboxcol_info[prev_pal_start_p->vrboxcol_id]; - stage_vrboxcol_info_class* prev_vrboxcol_end_p = &g_env_light.stage_vrboxcol_info[prev_pal_end_p->vrboxcol_id]; - stage_vrboxcol_info_class* next_vrboxcol_start_p = &g_env_light.stage_vrboxcol_info[next_pal_start_p->vrboxcol_id]; - stage_vrboxcol_info_class* next_vrboxcol_end_p = &g_env_light.stage_vrboxcol_info[next_pal_end_p->vrboxcol_id]; + #if DEBUG + if (!g_kankyoHIO.light.m_HOSTIO_setting && !g_kankyoHIO.vrbox.m_VrboxSetting) + #endif + { + + u8 sp2B = prev_pal_start_p->vrboxcol_id; + u8 sp2A = prev_pal_end_p->vrboxcol_id; + u8 sp29 = next_pal_start_p->vrboxcol_id; + u8 sp28 = next_pal_end_p->vrboxcol_id; + + #if DEBUG + dKydb_HIO_vrbox_debug(&sp2B, &sp2A, &sp29, &sp28); + #endif + + stage_vrboxcol_info_class* prev_vrboxcol_start_p = &g_env_light.stage_vrboxcol_info[sp2B]; + stage_vrboxcol_info_class* prev_vrboxcol_end_p = &g_env_light.stage_vrboxcol_info[sp2A]; + stage_vrboxcol_info_class* next_vrboxcol_start_p = &g_env_light.stage_vrboxcol_info[sp29]; + stage_vrboxcol_info_class* next_vrboxcol_end_p = &g_env_light.stage_vrboxcol_info[sp28]; vrbox_sky_col.r = kankyo_color_ratio_set( prev_vrboxcol_start_p->sky_col.r, prev_vrboxcol_end_p->sky_col.r, color_ratio, @@ -2316,6 +2821,11 @@ void dScnKy_env_light_c::setLight() { vrbox_kasumi_inner_col.g = 0; vrbox_kasumi_inner_col.b = 0; } + } + + #if DEBUG + dKydb_HIO_debug_TVdsp(color_ratio, g_env_light.pat_ratio, start_pat_pal_id, end_pat_pal_id, lightMask); + #endif } } } @@ -2345,7 +2855,7 @@ void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* tevstr_p, GXColorS10* bg_col_ &end_pat_pal_id, &tevstr_p->pat_ratio, &tevstr_p->mInitTimer); if (prev_pal_start_id == 0xFF) { - for (int i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { bg_col_p[i].r = 255; bg_col_p[i].g = 0; bg_col_p[i].b = 0; @@ -2356,21 +2866,27 @@ void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* tevstr_p, GXColorS10* bg_col_ stage_palette_info_class* next_pal_start_p = &g_env_light.stage_palette_info[next_pal_start_id]; stage_palette_info_class* next_pal_end_p = &g_env_light.stage_palette_info[next_pal_end_id]; - for (int i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { dKy_calc_color_set(&bg_col_p[i], &prev_pal_start_p->bg_amb_col[i], &next_pal_start_p->bg_amb_col[i], &prev_pal_end_p->bg_amb_col[i], &next_pal_end_p->bg_amb_col[i], color_ratio, tevstr_p->pat_ratio, bg_addcol_amb, g_env_light.now_bgcol_ratio); } - if (daPy_py_c::checkNowWolfEyeUp()) { + if (daPy_py_c::checkNowWolfPowerUp()) { dKy_WolfPowerup_BgAmbCol(bg_col_p); } + bg_col_p[0].a = + bg_col_p[1].a = + bg_col_p[2].a = bg_col_p[3].a = 255; - bg_col_p[2].a = 255; - bg_col_p[1].a = 255; - bg_col_p[0].a = 255; + + GXColorS10 sp68; + sp68.r = 0; + sp68.g = 0; + sp68.b = 0; + sp68.a = 0; GXColorS10 plight_colors[6]; for (i = 0; i < 6; i++) { @@ -2379,7 +2895,7 @@ void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* tevstr_p, GXColorS10* bg_col_ &next_pal_end_p->plight_col[i], color_ratio, tevstr_p->pat_ratio, bg_addcol_amb, g_env_light.now_bgcol_ratio); - if (daPy_py_c::checkNowWolfEyeUp()) { + if (daPy_py_c::checkNowWolfPowerUp()) { plight_colors[i].r = 0; plight_colors[i].g = 0; plight_colors[i].b = 0; @@ -2408,7 +2924,7 @@ void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* tevstr_p, GXColorS10* bg_col_ next_pal_start_p->fog_end_z, next_pal_end_p->fog_end_z, tevstr_p->pat_ratio, g_env_light.field_0x11f0, g_env_light.field_0x11f4); - if (daPy_py_c::checkNowWolfEyeUp()) { + if (daPy_py_c::checkNowWolfPowerUp()) { fog_col_p->r = 0; fog_col_p->g = 0; fog_col_p->b = 0; @@ -2475,6 +2991,12 @@ void dScnKy_env_light_c::setLight_actor(dKy_tevstr_c* tevstr_p, GXColorS10* fog_ dKy_WolfPowerup_AmbCol(&tevstr_p->AmbCol); } + GXColorS10 spC0; + spC0.r = 0; + spC0.g = 0; + spC0.b = 0; + spC0.a = 0; + GXColorS10 plight_col[6]; for (i = 0; i < 6; i++) { J3DLightInfo* light_info = &tevstr_p->mLights[i].getLightInfo(); @@ -2579,6 +3101,7 @@ void dScnKy_env_light_c::setLight_actor(dKy_tevstr_c* tevstr_p, GXColorS10* fog_ } if (daPy_py_c::checkNowWolfPowerUp()) { + int sp58 = 0; fog_col_p->r = 0; fog_col_p->g = 0; fog_col_p->b = 0; @@ -2594,6 +3117,13 @@ void dScnKy_env_light_c::settingTevStruct_colget_actor(cXyz* unused, dKy_tevstr_ GXColorS10* out_color_p, GXColorS10* fog_col_p, f32* fog_near_p, f32* fog_far_p) { + #if DEBUG + if (tevstr_p->room_no >= 0x80) { + dDbVw_Report(20, 80, "ObjActor RoomNo ga futei.jyoutyuu?[%d]", tevstr_p->room_no); + dDbVw_Report(20, 100, "Tevstr wo jimae de kitte init ha arimasuka?[%d]", tevstr_p->room_no); + } + #endif + if (tevstr_p->YukaCol != 0xFF) { f32 target = tevstr_p->YukaCol / 100.0f; @@ -2606,6 +3136,10 @@ void dScnKy_env_light_c::settingTevStruct_colget_actor(cXyz* unused, dKy_tevstr_ cLib_addCalc(&tevstr_p->field_0x374, 1.0f, 0.25f, 0.05f, 0.000001f); } } else { + #if DEBUG + dDbVw_Report(10, 40, "Non tevstr->room_no x[%d]y[%d]z[%d]", (int)unused->x, (int)unused->y, (int)unused->z); + #endif + tevstr_p->UseCol = 0; } @@ -2625,18 +3159,24 @@ void dScnKy_env_light_c::settingTevStruct_colget_actor(cXyz* unused, dKy_tevstr_ if (tevstr_p->Type != 8) { setLight_actor(tevstr_p, fog_col_p, fog_near_p, fog_far_p); - out_color_p->r = tevstr_p->AmbCol.r; - out_color_p->g = tevstr_p->AmbCol.g; - out_color_p->b = tevstr_p->AmbCol.b; - out_color_p->a = tevstr_p->AmbCol.a; + *out_color_p = tevstr_p->AmbCol; } else { GXColorS10 BG_col[4]; setLight_bg(tevstr_p, BG_col, fog_col_p, fog_near_p, fog_far_p); - out_color_p->r = BG_col[0].r; - out_color_p->g = BG_col[0].g; - out_color_p->b = BG_col[0].b; - out_color_p->a = BG_col[0].a; + *out_color_p = BG_col[0]; } + + #if DEBUG + if (g_kankyoHIO.light.m_HOSTIO_setting) { + if (tevstr_p->UseCol == g_env_light.UseCol && tevstr_p->PrevCol == g_env_light.PrevCol) { + if (tevstr_p->Type != 8) { + *out_color_p = actor_amb_col; + } else { + *out_color_p = g_env_light.bg_amb_col[0]; + } + } + } + #endif } /* 801A1F58-801A2090 19C898 0138+00 1/1 0/0 0/0 .text @@ -2655,6 +3195,18 @@ void dScnKy_env_light_c::settingTevStruct_colget_player(dKy_tevstr_c* tevstr_p) } } + #if DEBUG + if (g_kankyoHIO.light.m_displayTVColorSettings == TRUE) { + dDbVw_Report(228, 80, "RoomColSel"); + dDbVw_Report(228, 95, "YukaCol[%d]", tevstr_p->YukaCol); + dDbVw_Report(228, 110, "HeyaCol[%d]", tevstr_p->room_no); + dDbVw_Report(228, 125, "UseCol [%d]", tevstr_p->UseCol); + dDbVw_Report(228, 140, "wether_pat0 [%d]", g_env_light.wether_pat0); + dDbVw_Report(228, 155, "wether_pat1 [%d]", g_env_light.wether_pat1); + dDbVw_Report(228, 170, "pat_ratio [%f]", g_env_light.pat_ratio); + } + #endif + if (g_env_light.UseCol != tevstr_p->UseCol) { if (tevstr_p->UseCol == g_env_light.PrevCol) { g_env_light.PrevCol = g_env_light.UseCol; @@ -2751,6 +3303,11 @@ void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr field_0x10f8.g = 0; field_0x10f8.b = 0; + #if DEBUG + if (g_kankyoHIO.navy.adjust_light_mode != 0) + #endif + { + if ((light_inf_id <= -2 || (light_inf_id == -1 && dKy_Outdoor_check() == TRUE) || strcmp(dComIfGp_getStartStageName(), "D_MN09A") == 0)) { @@ -2763,6 +3320,10 @@ void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr light_pos = *pos_p + (camfwd * 500.0f); light_pos.y += 40.0f; + #if DEBUG + light_pos.y += g_kankyoHIO.navy.adjust_height; + #endif + if (tevstr_p->Type >= 1 && tevstr_p->Type <= 9) { dKyr_get_vectle_calc(&camera->lookat.center, &camera->lookat.eye, &camfwd); light_pos = camera->lookat.eye + (camfwd * 180.0f); @@ -2787,6 +3348,15 @@ void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr light_pos.y += -800.0f; light_power = 250.0f; + + #if DEBUG + field_0x10f8.r = g_kankyoHIO.navy.possessed_zelda_light_col.r; + field_0x10f8.g = g_kankyoHIO.navy.possessed_zelda_light_col.g; + field_0x10f8.b = g_kankyoHIO.navy.possessed_zelda_light_col.b; + + light_pos.y += g_kankyoHIO.navy.possessed_zelda_light_height; + light_power = g_kankyoHIO.navy.possessed_zelda_light_power; + #endif } } else if (dComIfG_play_c::getLayerNo(0) == 1 && tevstr_p->Type == 0) { field_0x10f8.r = 0x3C; @@ -2794,9 +3364,26 @@ void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr field_0x10f8.b = 0x64; light_pos.y += -800.0f; light_power = 150.0f; + + #if DEBUG + field_0x10f8.r = g_kankyoHIO.navy.beast_ganon_light_col.r; + field_0x10f8.g = g_kankyoHIO.navy.beast_ganon_light_col.g; + field_0x10f8.b = g_kankyoHIO.navy.beast_ganon_light_col.b; + + light_pos.y += g_kankyoHIO.navy.beast_ganon_light_height; + light_power = g_kankyoHIO.navy.beast_ganon_light_power; + #endif } } + #if DEBUG + if (g_kankyoHIO.navy.adjust_light_mode == 2) { + field_0x10f8.r = g_kankyoHIO.navy.adjust_custom_R; + field_0x10f8.g = g_kankyoHIO.navy.adjust_custom_G; + field_0x10f8.b = g_kankyoHIO.navy.adjust_custom_B; + } + #endif + if (tevstr_p != NULL && tevstr_p->mLightInf.a != 0) { field_0x10f8.r = tevstr_p->mLightInf.r * 4; field_0x10f8.g = tevstr_p->mLightInf.g * 4; @@ -2868,6 +3455,10 @@ void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr light_pos.y += sp20 * 500.0f; light_pos.y -= 80.0f; light_power = 300.0f; + + #if DEBUG + light_pos.y += g_kankyoHIO.navy.adjust_height; + #endif break; } case 6: @@ -2881,6 +3472,15 @@ void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr break; } } + + #if DEBUG + if (tevstr_p->Type >= 1 && tevstr_p->Type <= 9 && g_kankyoHIO.navy.adjust_light_mode == 2) { + field_0x10f8.r = (s16)g_kankyoHIO.navy.adjust_light_dif0_col_R; + field_0x10f8.g = (s16)g_kankyoHIO.navy.adjust_light_dif0_col_G; + field_0x10f8.b = (s16)g_kankyoHIO.navy.adjust_light_dif0_col_B; + } + #endif + } } else { light_pos = dKy_light_influence_pos(light_inf_id); field_0x10f8 = dKy_light_influence_col(light_inf_id); @@ -3087,17 +3687,16 @@ void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr } } -/* 8042DD70-8042E07C 05AA90 030C+00 1/2 8/8 9/9 .bss g_mEnvSeMgr */ -Z2EnvSeMgr g_mEnvSeMgr; - -/* 8042E07C-8042E7BC 05AD9C 0740+00 5/4 0/0 0/0 .bss lightStatusData */ -static LightStatus lightStatusData[8]; - /* 801A37C4-801A441C 19E104 0C58+00 2/1 14/14 515/515 .text * settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c */ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevstr_c* tevstr_p) { dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + fopAc_ac_c* player = dComIfGp_getPlayer(0); + int sp58 = 0; + int sp54 = -1; + u8 init_timer = tevstr_p->mInitTimer; + u8 spA = 0; GXColorS10 amb_col; GXColorS10 fog_tev_col; @@ -3116,6 +3715,12 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst pos.set(0.0f, 0.0f, 0.0f); } + #if DEBUG + if (g_kankyoHIO.no_setting_tevstr) { + return; + } + #endif + if (tevstr_p != NULL && g_env_light.mActorLightEffect != 100) { tevstr_p->field_0x374 = g_env_light.mActorLightEffect / 100.0f; } @@ -3125,13 +3730,14 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst if (tevstr_p->Material_use_fg != 123 && tevstr_p->Material_use_fg != 124) { dKy_tevstr_init(tevstr_p, dComIfGp_roomControl_getStayNo(), 0xFF); OS_REPORT_ERROR("\n\ntevstr init Non. Material_use_fg[%d] setroom=[%d]\n", - tevstr_p->Material_use_fg, dComIfGp_roomControl_getStayNo()); + tevstr_p->Material_use_fg, (s8)dComIfGp_roomControl_getStayNo()); } tevstr_p->Material_use_fg = 124; actor_amb_col.a = 255; if (tevstrType == 14) { + MtxPtr sp50 = j3dSys.getViewMtx(); camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0); cXyz calc_pos; tevstr_p->mLightMode = 0; @@ -3154,6 +3760,15 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst field_0x10f0.b = 77; } + #if DEBUG + if (g_kankyoHIO.navy.adjust_light_mode == 2) { + field_0x10f0.r = g_kankyoHIO.navy.adjust_light_ambcol.r; + field_0x10f0.g = g_kankyoHIO.navy.adjust_light_ambcol.g; + field_0x10f0.b = g_kankyoHIO.navy.adjust_light_ambcol.b; + field_0x10f0.a = 255; + } + #endif + fog_tev_col.r = 255; fog_tev_col.g = 255; fog_tev_col.b = 255; @@ -3175,6 +3790,14 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst light_info.mColor.g = 0; light_info.mColor.b = 0; } + + #if DEBUG + if (g_kankyoHIO.navy.adjust_light_mode == 2) { + light_info.mColor.r = g_kankyoHIO.navy.adjust_light_dif0_col_R; + light_info.mColor.g = g_kankyoHIO.navy.adjust_light_dif0_col_G; + light_info.mColor.b = g_kankyoHIO.navy.adjust_light_dif0_col_B; + } + #endif } else if (i == 1) { if (!dKy_darkworld_check()) { light_info.mColor.r = 24; @@ -3185,6 +3808,14 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst light_info.mColor.g = 0; light_info.mColor.b = 0; } + + #if DEBUG + if (g_kankyoHIO.navy.adjust_light_mode == 2) { + light_info.mColor.r = g_kankyoHIO.navy.adjust_light_dif1_col.r; + light_info.mColor.g = g_kankyoHIO.navy.adjust_light_dif1_col.g; + light_info.mColor.b = g_kankyoHIO.navy.adjust_light_dif1_col.b; + } + #endif } else { light_info.mColor.r = 0; light_info.mColor.g = 0; @@ -3192,7 +3823,8 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst } dKy_GXInitLightSpot(&light_info, 90.0f, GX_SP_OFF); - dKy_GXInitLightDistAttn(&light_info, 100000.0f, 0.99999f, GX_DA_STEEP); + f32 var_f31 = 100000.0f; + dKy_GXInitLightDistAttn(&light_info, var_f31, 0.99999f, GX_DA_STEEP); light_info.mLightPosition.x = 0.0f; light_info.mLightPosition.y = 0.0f; @@ -3202,10 +3834,22 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst light_info.mLightPosition.x = 500.0f; light_info.mLightPosition.y = 500.0f; light_info.mLightPosition.z = 500.0f; + + #if DEBUG + light_info.mLightPosition.x = g_kankyoHIO.navy.adjust_light_main_pos.x; + light_info.mLightPosition.y = g_kankyoHIO.navy.adjust_light_main_pos.y; + light_info.mLightPosition.z = g_kankyoHIO.navy.adjust_light_main_pos.z; + #endif } else { light_info.mLightPosition.x = -500.0f; light_info.mLightPosition.y = -500.0f; light_info.mLightPosition.z = -500.0f; + + #if DEBUG + light_info.mLightPosition.x = -g_kankyoHIO.navy.adjust_light_main_pos.x; + light_info.mLightPosition.y = -g_kankyoHIO.navy.adjust_light_main_pos.y; + light_info.mLightPosition.z = -g_kankyoHIO.navy.adjust_light_main_pos.z; + #endif } dKy_lightdir_set(0.0f, 0.0f, &light_info.mLightDirection); @@ -3222,9 +3866,10 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst sp80.x = camera_p->lookat.eye.x; sp80.y = camera_p->lookat.eye.y; sp80.z = camera_p->lookat.eye.z; - cMtx_multVec(view_mtx, &sp80, &sp8C); J3DLightInfo& light_info = tevstr_p->mLightObj.getLightInfo(); + cMtx_multVec(view_mtx, &sp80, &sp8C); + light_info.mLightPosition = sp8C; tevstr_p->field_0x32c = sp80; tevstr_p->mLightPosWorld = sp80; @@ -3242,7 +3887,9 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst light_info.mDistAtten.y = 0.0f; light_info.mDistAtten.z = 0.0f; } else if (tevstrType == 12 || tevstrType == 13) { + MtxP sp3C = j3dSys.getViewMtx(); camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0); + cXyz spD8; tevstr_p->TevColor.r = 0; tevstr_p->TevColor.g = 0; @@ -3273,6 +3920,15 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst field_0x10f0.a = 0xFF; + #if DEBUG + if (g_kankyoHIO.navy.light_adjust_ON) { + field_0x10f0.r = g_kankyoHIO.navy.adjust_light_ambcol.r; + field_0x10f0.g = g_kankyoHIO.navy.adjust_light_ambcol.g; + field_0x10f0.b = g_kankyoHIO.navy.adjust_light_ambcol.b; + field_0x10f0.a = 255; + } + #endif + fog_tev_col.r = 255; fog_tev_col.g = 255; fog_tev_col.b = 255; @@ -3281,6 +3937,7 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst fog_far = 30000.0f; for (int i = 0; i < 6; i++) { + camera_class* sp30 = dComIfGp_getCamera(0); J3DLightInfo& temp_r31 = tevstr_p->mLights[i].getLightInfo(); if (i == 0) { @@ -3299,6 +3956,17 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst temp_r31.mColor.g = 90; temp_r31.mColor.b = 100; } + + #if DEBUG + if (g_kankyoHIO.navy.light_adjust_ON) { + temp_r31.mColor.r = g_kankyoHIO.navy.adjust_light_dif0_col_R; + temp_r31.mColor.g = g_kankyoHIO.navy.adjust_light_dif0_col_G; + temp_r31.mColor.b = g_kankyoHIO.navy.adjust_light_dif0_col_B; + temp_r31.mLightPosition.x = g_kankyoHIO.navy.adjust_light_main_pos.x; + temp_r31.mLightPosition.y = g_kankyoHIO.navy.adjust_light_main_pos.y; + temp_r31.mLightPosition.z = g_kankyoHIO.navy.adjust_light_main_pos.z; + } + #endif } else if (i == 1) { if (tevstrType == 12) { temp_r31.mLightPosition.x = 14400.0f; @@ -3315,6 +3983,17 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst temp_r31.mColor.g = 65; temp_r31.mColor.b = 40; } + + #if DEBUG + if (g_kankyoHIO.navy.light_adjust_ON) { + temp_r31.mColor.r = g_kankyoHIO.navy.adjust_light_dif1_col.r & 0xFF; + temp_r31.mColor.g = g_kankyoHIO.navy.adjust_light_dif1_col.g & 0xFF; + temp_r31.mColor.b = g_kankyoHIO.navy.adjust_light_dif1_col.b & 0xFF; + temp_r31.mLightPosition.x = g_kankyoHIO.navy.collect_light_reflect_pos.x; + temp_r31.mLightPosition.y = g_kankyoHIO.navy.collect_light_reflect_pos.y; + temp_r31.mLightPosition.z = g_kankyoHIO.navy.collect_light_reflect_pos.z; + } + #endif } else { temp_r31.mColor.r = 0; temp_r31.mColor.g = 0; @@ -3322,7 +4001,8 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst } dKy_GXInitLightSpot(&temp_r31, 90.0f, 0); - dKy_GXInitLightDistAttn(&temp_r31, 100000.0f, 0.99999f, 3); + f32 var_f30 = 100000.0f; + dKy_GXInitLightDistAttn(&temp_r31, var_f30, 0.99999f, 3); dKy_lightdir_set(0.0f, 0.0f, &temp_r31.mLightDirection); temp_r31.mLightDirection.x = -temp_r31.mLightDirection.x; @@ -3394,9 +4074,9 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst &fog_far); } - field_0x10f0.r = amb_col.r; - field_0x10f0.g = amb_col.g; - field_0x10f0.b = amb_col.b; + field_0x10f0.r = (s16)amb_col.r; + field_0x10f0.g = (s16)amb_col.g; + field_0x10f0.b = (s16)amb_col.b; field_0x10f0.a = 255; if (tevstrType != 11) { @@ -3408,10 +4088,26 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst } } else { tevstr_p->mLightMode = 0; + + #if DEBUG + if (tevstr_p->room_no >= 128) { + dDbVw_Report(20, 90, "BgActor RoomNo ga futei.jyoutyuu?[%d]", tevstr_p->room_no); + dDbVw_Report(20, 100, "Tevstr wo jimae de kitte init ha arimasuka?[%d]", tevstr_p->room_no); + } + #endif + if (tevstr_p->Type != 20) { tevstr_p->field_0x374 = g_env_light.bg_light_influence; } else { - switch (tevstr_p->mLightInf.r) { + u8 sp9 = tevstr_p->mLightInf.r; + + #if DEBUG + if (g_kankyoHIO.navy.door_light_influence_ratio != 0xFF) { + sp9 = g_kankyoHIO.navy.door_light_influence_ratio; + } + #endif + + switch (sp9) { case 0: tevstr_p->field_0x374 = 0.2f; break; @@ -3436,6 +4132,11 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst case 7: tevstr_p->field_0x374 = 1.2f; break; + #if DEBUG + case 0x99: + tevstr_p->field_0x374 = g_kankyoHIO.navy.unk_light_influence_ratio / 100.0f; + break; + #endif default: tevstr_p->field_0x374 = 1.0f; break; @@ -3452,15 +4153,14 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst GXColorS10 BG_col[4]; setLight_bg(tevstr_p, BG_col, &fog_tev_col, &fog_near, &fog_far); - field_0x10f0 = BG_col[tevstrType & 3]; + sp54 = tevstrType & 3; + field_0x10f0 = BG_col[sp54]; MtxP view_mtx = j3dSys.getViewMtx(); Vec sp5C; cXyz pos; bool var_r25_3 = 0; - pos.z = 0.0f; - pos.y = 0.0f; - pos.x = 0.0f; + pos.x = pos.y = pos.z = 0.0f; int light_inf_id = dKy_light_influence_id(pos, 0); if (light_inf_id >= 0 && g_env_light.pointlight[light_inf_id]->mIndex < 0) { @@ -3509,8 +4209,26 @@ void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevst } tevstr_p->mLightPosWorld = kankyo->base_light.mPosition; + + #if DEBUG + if (g_kankyoHIO.light.m_HOSTIO_setting) { + if (tevstr_p->UseCol == g_env_light.UseCol && tevstr_p->PrevCol == g_env_light.PrevCol) { + field_0x10f0 = bg_amb_col[sp54]; + } + } + #endif } + #if DEBUG + if (g_kankyoHIO.light.m_HOSTIO_setting) { + if (tevstr_p->UseCol == g_env_light.UseCol && tevstr_p->PrevCol == g_env_light.PrevCol) { + fog_tev_col = fog_col; + fog_near = mFogNear; + fog_far = mFogFar; + } + } + #endif + field_0x10f0.a = 255; tevstr_p->AmbCol = field_0x10f0; tevstr_p->FogCol = fog_tev_col; @@ -3524,7 +4242,6 @@ void dScnKy_env_light_c::setLightTevColorType(J3DModelData*, dKy_tevstr_c*) {} /* 801A4420-801A4C08 19ED60 07E8+00 2/2 0/0 0/0 .text * setLightTevColorType_MAJI_sub__FP11J3DMaterialP12dKy_tevstr_ci */ -// NONMATCHING - some minor issues with dKyd_maple_col_getp static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* tevstr_p, int lightType) { int i; @@ -3533,7 +4250,7 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* camera_class* camera = (camera_class*)dComIfGp_getCamera(0); if (tevstr_p != NULL) { - J3DGXColor amb_col; + GXColor amb_col; amb_col.r = tevstr_p->AmbCol.r; amb_col.g = tevstr_p->AmbCol.g; amb_col.b = tevstr_p->AmbCol.b; @@ -3578,9 +4295,22 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* amb_col.g = 0x1E; amb_col.b = 0x23; } + + #if DEBUG + if ((tevstr_p->Type == 4 || tevstr_p->Type == 2 || tevstr_p->Type == 1 || tevstr_p->Type == 7 || + tevstr_p->Type == 6 || tevstr_p->Type == 5 || tevstr_p->Type == 15 || (tevstr_p->Type == 9 && dKy_darkworld_check()))) + { + if (g_kankyoHIO.navy.adjust_light_mode == 2) { + amb_col.r = g_kankyoHIO.navy.adjust_light_ambcol.r & 0xFF; + amb_col.g = g_kankyoHIO.navy.adjust_light_ambcol.g & 0xFF; + amb_col.b = g_kankyoHIO.navy.adjust_light_ambcol.b & 0xFF; + amb_col.a = 0; + } + } + #endif } - material_p->setAmbColor(0, &amb_col); + material_p->setAmbColor(0, (J3DGXColor*)&amb_col); if (lightType != 0) { material_p->setTevColor(0, (J3DGXColorS10*)&tevstr_p->TevColor); @@ -3609,6 +4339,14 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* maple_color.g = dKyd_maple_col_getp()[g_env_light.fishing_hole_season + 7].g; maple_color.b = dKyd_maple_col_getp()[g_env_light.fishing_hole_season + 7].b; + #if DEBUG + if (g_kankyoHIO.navy.fish_pond_tree_adjust_ON) { + maple_color.r = g_kankyoHIO.navy.fish_pond_tree_ambcol.r; + maple_color.g = g_kankyoHIO.navy.fish_pond_tree_ambcol.g; + maple_color.b = g_kankyoHIO.navy.fish_pond_tree_ambcol.b; + } + #endif + amb_col.r = 0xA; amb_col.g = 0xA; amb_col.b = 0xA; @@ -3635,7 +4373,7 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* } amb_col.b = g_env_light.now_bgcol_ratio * (maple_color.b * var_f31); - material_p->setAmbColor(0, &amb_col); + material_p->setAmbColor(0, (J3DGXColor*)&amb_col); for (i = 0; i < 6; i++) { if (i <= 1) { @@ -3658,6 +4396,20 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* maple_color.b = dKyd_maple_col_getp()[(g_env_light.fishing_hole_season - 1 + (i * 4))].b; + #if DEBUG + if (g_kankyoHIO.navy.fish_pond_tree_adjust_ON) { + if (i == 0) { + maple_color.r = g_kankyoHIO.navy.fish_pond_tree_dif0_col.r; + maple_color.g = g_kankyoHIO.navy.fish_pond_tree_dif0_col.g; + maple_color.b = g_kankyoHIO.navy.fish_pond_tree_dif0_col.b; + } else { + maple_color.r = g_kankyoHIO.navy.fish_pond_tree_dif1_col.r; + maple_color.g = g_kankyoHIO.navy.fish_pond_tree_dif1_col.g; + maple_color.b = g_kankyoHIO.navy.fish_pond_tree_dif1_col.b; + } + } + #endif + var_f31 = var_r28->mColor.r / 95.0f; var_f31 *= var_f31; if (var_f31 > 1.0f) { @@ -3693,6 +4445,29 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* if (material_p->getFog() != NULL) { J3DFogInfo* fog_info = material_p->getFog()->getFogInfo(); if (fog_info->mType != 0) { + #if DEBUG + switch (g_kankyoHIO.light.m_fogtype) { + case 1: + fog_info->mType = 0; + break; + case 2: + fog_info->mType = 2; + break; + case 3: + fog_info->mType = 4; + break; + case 4: + fog_info->mType = 5; + break; + case 5: + fog_info->mType = 6; + break; + case 6: + fog_info->mType = 7; + break; + } + #endif + fog_info->mStartZ = tevstr_p->mFogStartZ; fog_info->mEndZ = tevstr_p->mFogEndZ; @@ -3747,12 +4522,12 @@ void dKy_cloudshadow_scroll(J3DModelData* modelData_p, dKy_tevstr_c* tevstr_p, i (mat_name[5] == '1' && mat_name[6] == '6')) { if (mat_name[6] == '0') { - J3DGXColor k_color; - k_color.r = g_env_light.mFogDensity; + GXColor k_color; + k_color.r = g_env_light.mFogDensity & 0xFF; k_color.g = 0; k_color.b = 0; k_color.a = 0; - mat_p->setTevKColor(1, &k_color); + mat_p->setTevKColor(1, (J3DGXColor*)&k_color); } if (mat_p->getTexGenBlock()->getTexMtx(1) != NULL) { @@ -3772,9 +4547,20 @@ void dKy_cloudshadow_scroll(J3DModelData* modelData_p, dKy_tevstr_c* tevstr_p, i * setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c */ void dScnKy_env_light_c::setLightTevColorType_MAJI(J3DModelData* modelData_p, dKy_tevstr_c* tevstr_p) { + #if DEBUG + if (g_kankyoHIO.no_color_type) { + return; + } + #endif + if (tevstr_p->Material_use_fg != 124) { - OS_REPORT_ERROR("\ncoltype tevstr init Non. Material_use_fg[%d]\n", - tevstr_p->Material_use_fg); + #if DEBUG + if (!g_kankyoHIO.no_setting_tevstr) { + OS_REPORT_ERROR("\ncoltype tevstr init Non. Material_use_fg[%d]\n", + tevstr_p->Material_use_fg); + } + #endif + if (tevstr_p->Material_use_fg != 123) { dKy_tevstr_init(tevstr_p, dComIfGp_roomControl_getStayNo(), 0xFF); } @@ -3795,8 +4581,8 @@ void dScnKy_env_light_c::setLightTevColorType_MAJI(J3DModelData* modelData_p, dKy_cloudshadow_scroll(modelData_p, tevstr_p, lightType); } else { for (int i = modelData_p->getMaterialNum() - 1; i >= 0; i--) { - setLightTevColorType_MAJI_sub(modelData_p->getMaterialNodePointer(i), tevstr_p, - lightType); + J3DMaterial* material = modelData_p->getMaterialNodePointer(i); + setLightTevColorType_MAJI_sub(material, tevstr_p, lightType); } } } @@ -3824,19 +4610,12 @@ void dScnKy_env_light_c::Sndpos() { /* 801A4F64-801A516C 19F8A4 0208+00 1/1 0/0 0/0 .text Eflight_flush_proc__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::Eflight_flush_proc() { - struct flush_info { - u8 start_frame; - u8 r; - u8 g; - u8 b; - }; - f32 power; f32 fluctuation; - flush_info* info; + dKy_flush_info* info; if (eflight.mLightType == 0) { - static flush_info flush_col[] = { + static dKy_flush_info flush_col[] = { {1, 0x00, 0x00, 0x00}, {4, 0x43, 0x73, 0x58}, {10, 0x25, 0x3E, 0x2D}, @@ -3847,7 +4626,7 @@ void dScnKy_env_light_c::Eflight_flush_proc() { fluctuation = 100.0f; power = 120.0f; } else if (eflight.mLightType == 1) { - static flush_info flush_col2[] = { + static dKy_flush_info flush_col2[] = { {1, 0x00, 0x00, 0x00}, {4, 0x6E, 0x5A, 0x00}, {8, 0x4B, 0x22, 0x00}, @@ -3858,7 +4637,7 @@ void dScnKy_env_light_c::Eflight_flush_proc() { fluctuation = 0.0f; power = 120.0f; } else { - static flush_info flush_col3[] = { + static dKy_flush_info flush_col3[] = { {1, 0x00, 0x00, 0x00}, {4, 0x46, 0x4D, 0x43}, {15, 0x22, 0x1E, 0x00}, @@ -3870,6 +4649,14 @@ void dScnKy_env_light_c::Eflight_flush_proc() { power = 80.0f; } + #if DEBUG + if (g_kankyoHIO.effLight.adjust_ON) { + info = &g_kankyoHIO.effLight.step1; + power = g_kankyoHIO.effLight.power; + fluctuation = g_kankyoHIO.effLight.fluctuation; + } + #endif + switch (eflight.mState) { case 0: break; @@ -3915,19 +4702,14 @@ void dScnKy_env_light_c::Eflight_flush_proc() { } } -/* 80450700-80450704 000180 0002+02 2/2 0/0 0/0 .sdata lightMask */ -static u16 lightMask = 0x0001; - -/* 80450704-80450708 -00001 0004+00 3/3 0/0 0/0 .sdata lightStatusPt */ -static LightStatus* lightStatusPt = lightStatusData; - /* 801A516C-801A5288 19FAAC 011C+00 1/1 0/0 0/0 .text SetBaseLight__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::SetBaseLight() { dScnKy_env_light_c* kankyo = dKy_getEnvlight(); camera_class* camera = (camera_class*)dComIfGp_getCamera(0); + f32 daytime; if (dKy_SunMoon_Light_Check() == TRUE) { - f32 daytime = g_env_light.getDaytime(); + daytime = g_env_light.getDaytime(); if (daytime > 67.5f && daytime < 292.5f) { base_light.mPosition = kankyo->sun_light_pos; } else if (camera != NULL) { @@ -3949,8 +4731,9 @@ void dScnKy_env_light_c::SetBaseLight() { /* 801A5288-801A56DC 19FBC8 0454+00 1/1 0/0 0/0 .text exeKankyo__18dScnKy_env_light_cFv */ -// NONMATCHING - single regswap void dScnKy_env_light_c::exeKankyo() { + int sp18 = 0; + for (int i = 0; i < 6; i++) { field_0x0c18[i].field_0x26 = 0; @@ -4068,8 +4851,939 @@ void dScnKy_env_light_c::exeKankyo() { cLib_addCalc(&g_env_light.mDemoAttentionPoint, 0.11f, 0.5f, 0.1f, 1E-05f); } } + + #if DEBUG + if (!g_kankyoHIO.light.field_0x5) { + g_kankyoHIO.light.field_0x8 = g_env_light.mFogAdjCenter; + for (int i = 0; i < 10; i++) { + g_kankyoHIO.light.field_0xc[i] = g_env_light.mXFogTbl.r[i]; + } + } else { + g_env_light.mFogAdjCenter = g_kankyoHIO.light.field_0x8; + for (int i = 0; i < 10; i++) { + g_env_light.mXFogTbl.r[i] = g_kankyoHIO.light.field_0xc[i]; + } + } + + dKydb_color_HIO_update(); + dKydb_vrbox_HIO_update(); + + if (mDoCPd_c::getHoldR(PAD_2) && mDoCPd_c::getHoldL(PAD_2) && mDoCPd_c::getTrigL(PAD_2)) { + static u8 data_8074c97c; + if (!data_8074c97c) { + fapGmHIO_set2Ddraw(0); + fapGmHIO_offPrint(); + g_HIO.mDisplayMeter = 0; + data_8074c97c = TRUE; + } else { + fapGmHIO_set2Ddraw(1); + fapGmHIO_onPrint(); + g_HIO.mDisplayMeter = 1; + data_8074c97c = FALSE; + } + } + + cXyz particle_pos; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + if (player != NULL) { + particle_pos = player->current.pos; + particle_pos.y += 10.0f; + + GXColor prim, env; + prim = g_kankyoHIO.particleLight.prim_col; + env = g_kankyoHIO.particleLight.env_col; + + if (g_kankyoHIO.particleLight.field_0x14) { + g_kankyoHIO.particleLight.field_0x14 = 0; + + switch (g_kankyoHIO.particleLight.type) { + case 0: + dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_A01, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 1: + dComIfGp_particle_setColor(ID_ZI_J_DASHSMOKE_A, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 2: + dComIfGp_particle_setColor(ID_ZI_J_DOWNSMOKE_A, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 3: + dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_A02, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 4: + dComIfGp_particle_setColor(dPa_RM(ID_ZI_S_SCREENKAGEROU01), &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + case 5: + dComIfGp_particle_setColor(ID_ZI_J_ZENKAISCREEN2_A, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 6: + dComIfGp_particle_setColor(ID_ZI_J_ZENKAISCREEN2_B, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 7: + dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_B01, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 8: + dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_B02, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 9: + dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_c01, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + case 10: + dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_c02, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a); + break; + } + } + } + #endif } +#if DEBUG +dKankyo_lightHIO_c::dKankyo_lightHIO_c() { + m_HOSTIO_setting = FALSE; + field_0x52 = 0; + m_forcedPalette = FALSE; + m_displayColorPaletteCheckInfo = TRUE; + + field_0x58 = 0.0f; + field_0x60 = 0; + field_0x61 = 0; + field_0x62 = 0; + field_0x63 = 0; + field_0x64 = 0; + field_0x65 = 0; + field_0x66 = 0; + field_0x67 = 0; + field_0x68 = 0; + field_0x69 = 0; + field_0x6a = 0; + field_0x6b = 0; + + m_BG_fakelight_R = 0; + m_BG_fakelight_G = 0; + m_BG_fakelight_B = 0; + m_BG_fakelight_power = 0.0f; + + field_0x80 = 0; +} + +void dKankyo_lightHIO_c::genMessage(JORMContext* mctx) { + mctx->genLabel("「カラーパレット&ライト位置情報の設定」", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->startComboBox("■ HOSTIO設定", &m_HOSTIO_setting, 0, NULL, 0xFFFF, 0xFFFF, 0x100, + 0x1a); + mctx->genComboBoxItem("未使用", 0); + mctx->genComboBoxItem("HOSTIO設定!", 1); + mctx->endComboBox(); + mctx->genLabel("HOSTIO設定にすると、ゲーム内の現在データが入ります!", 0x80000001, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("これをしないとカラー変更が利きません!", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + // ● Adjustment of kantera, wolf lights, and underwater lights. + mctx->genLabel("●カンテラ・狼ライト・水中ライトの調整", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genCheckBox("調整開始", &g_kankyoHIO.navy.field_0x311, 1, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genSlider("地形のみ高さ補正", &g_kankyoHIO.navy.terrain_height_crr, -5000.0, + 5000.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("影響力 倍率", &g_kankyoHIO.navy.influence_multiplier, 0.0, + 100.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("cutoff 倍率", &g_kankyoHIO.navy.cutoff_multiplier, 0.01, + 10.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● 部屋ライトタイプのSmLLL切り替え(調整用)", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->startComboBox("選択", &g_kankyoHIO.navy.room_light_type, 0, NULL, 0xFFFF, + 0xFFFF, 0x100, 0x1a); + mctx->genComboBoxItem("ゲームまかせ", 0); + mctx->genComboBoxItem("( S )", 1); + mctx->genComboBoxItem("( M )", 2); + mctx->genComboBoxItem("( L )", 3); + mctx->genComboBoxItem("(LL)", 4); + mctx->endComboBox(); + + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ポリゴンコードによる設定(ファイル出力無し)", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("ここで取り決めた数値を該当のポリゴンコードのカラーに設定してください", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("「アクタへの生ライトの影響率」", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genSlider("影響率(0%-200%)", &g_env_light.mActorLightEffect, 0, 200, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + //● TEV_TYPE_DOOR attribute set to the actor's argument (no file output) + mctx->genLabel("● TEV_TYPE_DOOR属性アクタの引数へ設定する(ファイル出力無し)", 0x80000001, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("「ドアなど引数へ設定する物への生ライトの影響率」", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->startComboBox("選択", &g_kankyoHIO.navy.door_light_influence_ratio, 0, NULL, + 0xFFFF, 0xFFFF, 0x100, 0x1a); + mctx->genComboBoxItem("ゲームまかせ", 0xff); + mctx->genComboBoxItem("0-20%", 0); + mctx->genComboBoxItem("1-30%", 1); + mctx->genComboBoxItem("2-40%", 2); + mctx->genComboBoxItem("3-60%", 3); + mctx->genComboBoxItem("4-80%", 4); + mctx->genComboBoxItem("5-90%", 5); + mctx->genComboBoxItem("6-100%", 6); + mctx->genComboBoxItem("7-120%", 7); + mctx->genComboBoxItem("↓で新設", 0x99); + mctx->endComboBox(); + mctx->genLabel("新たな%を試したい場合はコチラ、プログラム対応必要です。ささきまで", 0x80000001, + 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("影響率(0%-200%)", &g_kankyoHIO.navy.unk_light_influence_ratio, 0, + 200, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("● カラーパレットごとに入っている設定値", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genSlider("地形ライト影響率 ", &g_env_light.bg_light_influence, 0.0, + 2.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("雲影の濃さ ", &g_env_light.mFogDensity, 0, 0xff, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("●草ライト影響率 「部屋情報」にてセット", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genCheckBox("調整開始", &g_kankyoHIO.navy.grass_light_debug, 1, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("影響率 ", &g_kankyoHIO.navy.grass_light_influence_ratio, 0, 200, + 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● 草Amb 草を配置時に引数にセット", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genCheckBox("調整開始", &g_kankyoHIO.navy.grass_adjust_ON, 1, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("引数1 r", &g_kankyoHIO.navy.grass_ambcol.r, 0, 30, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("引数2 g", &g_kankyoHIO.navy.grass_ambcol.g, 0, 30, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("引数3 b", &g_kankyoHIO.navy.grass_ambcol.b, 0, 30, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->startComboBox("■飽和パターン", &g_kankyoHIO.bloom.m_saturationPattern, 0, + NULL, 0xFFFF, 0xFFFF, 0x100, 0x1a); + mctx->genComboBoxItem("使用しない", 0); + mctx->genComboBoxItem("1 トワイライト(く)", 1); + mctx->genComboBoxItem("2 トワイライト_弱(く)", 2); + mctx->genComboBoxItem("3 センス", 3); + mctx->genComboBoxItem("4 フィールド基準(朝0)", 4); + mctx->genComboBoxItem("5 フィールド基準(朝1)", 5); + mctx->genComboBoxItem("6 フィールド基準(昼)", 6); + mctx->genComboBoxItem("7 フィールド基準(夕0)", 7); + mctx->genComboBoxItem("8 フィールド基準(夕1)", 8); + mctx->genComboBoxItem("9 フィールド基準(夜)", 9); + mctx->genComboBoxItem("10 キャラバン火事", 10); + mctx->genComboBoxItem("11 LV8闇の宮殿", 11); + mctx->genComboBoxItem("12 demo28_03", 12); + mctx->genComboBoxItem("13 虫が光る", 13); + mctx->genComboBoxItem("14 雲海(勇者の間)」", 14); + mctx->genComboBoxItem("15 ゾーラの里 滝TW", 15); + mctx->genComboBoxItem("16 ゾーラの里 玉座TW", 16); + mctx->genComboBoxItem("17 センスもどき", 17); + mctx->genComboBoxItem("18 現在過去切替", 18); + mctx->genComboBoxItem("19 宮城さん下水道", 19); + mctx->genComboBoxItem("20 回想シーン", 20); + mctx->genComboBoxItem("21 トワイライトゲート", 21); + mctx->genComboBoxItem("22 水中(基本)", 22); + mctx->genComboBoxItem("25 ダンジョン基準_弱", 25); + mctx->genComboBoxItem("26 ダンジョン基準_強", 26); + mctx->genComboBoxItem("27 溶岩(く)", 27); + mctx->genComboBoxItem("28 溶岩以外_Lv2(く)", 28); + mctx->genComboBoxItem("29 過去", 29); + mctx->genComboBoxItem("30 城壁", 30); + mctx->genComboBoxItem("40 デモ:回想シーン", 40); + mctx->genComboBoxItem("41 デモ:にせTW", 41); + mctx->genComboBoxItem("42 デモ:demo32_03用", 42); + mctx->genComboBoxItem("43 デモ:TW回想シーン", 43); + mctx->genComboBoxItem("44 デモ:demo31_20用", 44); + mctx->genComboBoxItem("45 デモ:溶岩W", 45); + mctx->endComboBox(); + + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("● CSV情報のファイル書き出し", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("(カラーパレット情報のファイル書き出し)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("パレットWRITE", 0x40000002, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("(生ライト位置情報リストファイル書き出し)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("位置情報WRITE", 0x40000003, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("● CSV情報のファイル読み込み(確認用)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genLabel("(カラーパレット情報のファイル読み込み)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("FILEREAD", 0x40000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("(生ライト位置情報リストファイル読み込み)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("位置情報READ", 0x41000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("● アンビエント", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("(アクタ)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("■ ACTOR_Amb R", &g_env_light.actor_amb_col.r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" G", &g_env_light.actor_amb_col.g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" B", &g_env_light.actor_amb_col.b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 +100", 0x40000010, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000011, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000012, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000013, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000014, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000015, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("(地形)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("■ BG0_Amb R", &g_env_light.bg_amb_col[0].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" G", &g_env_light.bg_amb_col[0].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("    B", &g_env_light.bg_amb_col[0].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 +100", 0x40000016, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000017, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000018, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000019, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 10", 0x4000001a, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 -100", 0x4000001b, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("■ BG1_Amb R", &g_env_light.bg_amb_col[1].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("    G", &g_env_light.bg_amb_col[1].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("    B", &g_env_light.bg_amb_col[1].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 +100", 0x4000001c, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 10", 0x4000001d, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 1", 0x4000001e, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 1", 0x4000001f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000020, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000021, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("水面α A", &g_env_light.bg_amb_col[1].a, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("補佐α A2", &g_env_light.bg_amb_col[2].a, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("■ BG2_Amb R", &g_env_light.bg_amb_col[2].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("    G", &g_env_light.bg_amb_col[2].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("    B", &g_env_light.bg_amb_col[2].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 +100", 0x40000022, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000023, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000024, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000025, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000026, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000027, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("■ BG3_Amb R", &g_env_light.bg_amb_col[3].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("    G", &g_env_light.bg_amb_col[3].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("    B", &g_env_light.bg_amb_col[3].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 +100", 0x40000028, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000029, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 1", 0x4000002a, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 1", 0x4000002b, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 10", 0x4000002c, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 -100", 0x4000002d, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("ウソFog A", &g_env_light.bg_amb_col[3].a, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("● フォグ", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->startComboBox("fog type", &m_fogtype, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0x1a); + mctx->genComboBoxItem("STAN-BY", 2); + mctx->genComboBoxItem("GX_FOG_NONE", 0); + mctx->genComboBoxItem("GX_FOG_LIN", 2); + mctx->genComboBoxItem("GX_FOG_EXP", 4); + mctx->genComboBoxItem("GX_FOG_EXP2", 5); + mctx->genComboBoxItem("GX_FOG_REVEXP", 6); + mctx->genComboBoxItem("GX_FOG_REVEXP2", 7); + mctx->endComboBox(); + mctx->genSlider("■ FOG R", &g_env_light.fog_col.r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" G", &g_env_light.fog_col.g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" B", &g_env_light.fog_col.b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 +100", 0x4000002e, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 10", 0x4000002f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000030, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000031, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000032, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000033, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" near", &g_env_light.mFogNear, -2500000.0, 2500000.0, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" far", &g_env_light.mFogFar, -2500000.0, 2500000.0, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("● 生ライト", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox("デバッグ球の表示", + &g_kankyoHIO.dungeonLight.displayDebugSphere, 1, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->startComboBox("■ 使用ライト", &g_kankyoHIO.dungeonLight.usedLights, 0, NULL, + 0xFFFF, 0xFFFF, 0x100, 0x1a); + mctx->genComboBoxItem("なし", 0); + mctx->genComboBoxItem("2", 1); + mctx->genComboBoxItem("2 3", 2); + mctx->genComboBoxItem("2 3 4", 3); + mctx->genComboBoxItem("2 3 4 5", 4); + mctx->genComboBoxItem("2 3 4 5 6", 5); + mctx->genComboBoxItem("2 3 4 5 6 7", 6); + mctx->endComboBox(); + + for (int i = 0; i < 6; i++) { + switch (i) { + case 0: + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("(ライト0)―えせポイントライト", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("(ライト1)―エフェクトライト", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ● ● ラ イ ト 2 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("※太陽が存在する場合、設定は上書きされます", 0x80000001, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("プレイヤー位置にライト2を移動", 0x40000004, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genButton("カメラCTR 位置にライト2を移動", 0x400000a0, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("(((ライト2位置へワープ!!)))", 0x4000000a, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + break; + case 1: + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ● ● ラ イ ト 3 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("※月が存在する場合、設定が上書きされます", 0x80000001, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("プレイヤー位置にライト3を移動!", 0x40000005, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genButton("カメラCTR 位置にライト3を移動", 0x400000a1, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("(((ライト3位置へワープ!!)))", 0x4000000b, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + break; + case 2: + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ● ● ラ イ ト 4 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("プレイヤー位置にライト4を移動!", 0x40000006, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genButton("カメラCTR 位置にライト4を移動", 0x400000a2, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("(((ライト4位置へワープ!!)))", 0x4000000c, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + break; + case 3: + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ● ● ラ イ ト 5 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("プレイヤー位置にライト5を移動!", 0x40000007, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("カメラCTR 位置にライト5を移動", 0x400000a3, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("(((ライト5位置へワープ!!)))", 0x4000000d, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + break; + case 4: + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ● ● ラ イ ト 6 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("プレイヤー位置にライト6を移動!", 0x40000008, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("カメラCTR 位置にライト6を移動", 0x400000a4, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("(((ライト6位置へワープ!!)))", 0x4000000e, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + break; + case 5: + mctx->genLabel("-----------------------------------------------------------------------------------------", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ● ● ラ イ ト 7 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("プレイヤー位置にライト7を移動!", 0x40000009, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("カメラCTR 位置にライト7を移動", 0x400000a5, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton("(((ライト7位置へワープ!!)))", 0x4000000f, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + break; + } + + mctx->genLabel("※色を変える場合はカラーパレットのファイル作成も忘れずに!", 0x80000001, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("色 R", &g_env_light.dungeonlight[i].mColor.r, 0, + 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" G", &g_env_light.dungeonlight[i].mColor.g, 0, + 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" B", &g_env_light.dungeonlight[i].mColor.b, 0, + 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + switch (i) { + case 0: + mctx->genButton("RGB同時加算 +100", 0x40000034, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000035, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000036, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000037, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000038, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000039, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + break; + case 1: + mctx->genButton("RGB同時加算 +100", 0x4000003a, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 10", 0x4000003b, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 1", 0x4000003c, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 1", 0x4000003d, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 10", 0x4000003e, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 -100", 0x4000003f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + break; + case 2: + mctx->genButton("RGB同時加算 +100", 0x40000040, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000041, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000042, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000043, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000044, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000045, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + break; + case 3: + mctx->genButton("RGB同時加算 +100", 0x40000046, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000047, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000048, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000049, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 10", 0x4000004a, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 -100", 0x4000004b, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + break; + case 4: + mctx->genButton("RGB同時加算 +100", 0x4000004c, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 10", 0x4000004d, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 1", 0x4000004e, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 1", 0x4000004f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000050, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000051, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + break; + case 5: + mctx->genButton("RGB同時加算 +100", 0x40000052, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 10", 0x40000053, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 + 1", 0x40000054, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 1", 0x40000055, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 - 10", 0x40000056, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + mctx->genButton("RGB同時加算 -100", 0x40000057, 0, NULL, 0xFFFF, 0xFFFF, 0x200, + 0x18); + break; + } + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("位置X", &g_env_light.dungeonlight[i].mPosition.x, + -300000.0, 300000.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" Y", &g_env_light.dungeonlight[i].mPosition.y, + -300000.0, 300000.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" Z", &g_env_light.dungeonlight[i].mPosition.z, + -300000.0, 300000.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("ref_distance", + &g_env_light.dungeonlight[i].mRefDistance, 0.01, 10000.0, + 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->startComboBox("距離減衰 ○推奨", + &g_env_light.dungeonlight[i].mDistAttenuation, 0, NULL, + 0xFFFF, 0xFFFF, 0x100, 0x1a); + mctx->genComboBoxItem("※減衰なし [GX_DA_OFF]", 0); + mctx->genComboBoxItem("おだやか [GX_DA_GENTLE]", 1); + mctx->genComboBoxItem("中間 [GX_DA_MEDIUM]", 2); + mctx->genComboBoxItem("○険しい [GX_DA_STEEP]", 3); + mctx->endComboBox(); + mctx->startComboBox("角度減衰 ○推奨", + &g_env_light.dungeonlight[i].mAngleAttenuation, 0, NULL, + 0xFFFF, 0xFFFF, 0x100, 0x1a); + mctx->genComboBoxItem("○ポイント [GX_SP_OFF]", 0); + mctx->genComboBoxItem("※直角 [GX_SP_FLAT]", 1); + mctx->genComboBoxItem("○COS曲線 [GX_SP_COS]", 2); + mctx->genComboBoxItem("COS2曲線 [GX_SP_COS2]", 3); + mctx->genComboBoxItem("シャープ [GX_SP_SHARP]", 4); + mctx->genComboBoxItem("リング状 [GX_SP_RING1]", 5); + mctx->genComboBoxItem("リング状2[GX_SP_RING2]", 6); + mctx->endComboBox(); + mctx->genLabel("角度減衰をポイント以外に設定したらスポットライトなので以下も設定を!", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("カットオフ角度", + &g_env_light.dungeonlight[i].mCutoffAngle, 0.001, 90.0, + 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("X角度(紫軸)", &g_env_light.dungeonlight[i].mAngleX, + -360.0, 360.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("Y角度(緑軸)", &g_env_light.dungeonlight[i].mAngleY, + -360.0, 360.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + } + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("● ● ● えせライト地形反映特別版  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("「地形反映えせライト」を配置した部屋で有効です。", 0x80000001, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genLabel("調整した値をマップツールで「地形反映えせライト」のパラメータへ指定して下さい", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("位置X", &g_kankyoHIO.light.m_BG_fakelight_pos.x, -300000.0, + 300000.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" Y", &g_kankyoHIO.light.m_BG_fakelight_pos.y, -300000.0, + 300000.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" Z", &g_kankyoHIO.light.m_BG_fakelight_pos.z, -300000.0, + 300000.0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("Color R", &g_kankyoHIO.light.m_BG_fakelight_R, 0, 0xff, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" G", &g_kankyoHIO.light.m_BG_fakelight_G, 0, 0xff, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" B", &g_kankyoHIO.light.m_BG_fakelight_B, 0, 0xff, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("Power ", &g_kankyoHIO.light.m_BG_fakelight_power, 0.0, 1000.0, + 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("=========================================================================================", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox("カラー設定TV画面確認表示", &m_displayTVColorSettings, 1, 0, + NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox("カラーパレットチェック画面表示", &m_displayColorPaletteCheckInfo, + 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox("カラーパレットチェック画面表示詳細", &m_displayColorPaletteCheckInfo, + 2, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("=========================================================================================", + 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->startComboBox("強制パレット指定", &m_forcedPalette, 0, NULL, 0xFFFF, 0xFFFF, 0x100, + 0x1a); + mctx->genComboBoxItem("しない", 0); + mctx->genComboBoxItem("パレット0使用", 1); + mctx->genComboBoxItem("パレット1使用", 2); + mctx->genComboBoxItem("パレット2使用", 3); + mctx->genComboBoxItem("パレット3使用", 4); + mctx->genComboBoxItem("パレット4使用", 5); + mctx->genComboBoxItem("パレット5使用", 6); + mctx->genComboBoxItem("パレット6使用", 7); + mctx->genComboBoxItem("パレット7使用", 8); + mctx->genComboBoxItem("パレット8使用", 9); + mctx->genComboBoxItem("パレット9使用", 10); + mctx->genComboBoxItem("パレット10使用", 11); + mctx->genComboBoxItem("パレット11使用", 12); + mctx->genComboBoxItem("パレット12使用", 13); + mctx->genComboBoxItem("パレット13使用", 14); + mctx->genComboBoxItem("パレット14使用", 15); + mctx->genComboBoxItem("パレット15使用", 16); + mctx->endComboBox(); + + mctx->genLabel("=========================================================================================", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} + +void dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF() { + JORMContext* mctx = attachJORMContext(8); + mctx->startUpdateNode(&g_kankyoHIO.light); + + mctx->updateSlider(2, &g_env_light.actor_amb_col.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.actor_amb_col.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.actor_amb_col.b, 0, 0, 0); + + mctx->updateSlider(2, &g_env_light.bg_amb_col[0].r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[0].g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[0].b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[1].r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[1].g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[1].b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[2].r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[2].g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[2].b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[3].r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[3].g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.bg_amb_col[3].b, 0, 0, 0); + + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mColor.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mColor.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mColor.b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mColor.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mColor.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mColor.b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mColor.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mColor.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mColor.b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mColor.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mColor.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mColor.b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mColor.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mColor.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mColor.b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mColor.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mColor.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mColor.b, 0, 0, 0); + + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mPosition.x, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mPosition.y, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mPosition.z, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mPosition.x, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mPosition.y, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mPosition.z, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mPosition.x, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mPosition.y, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mPosition.z, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mPosition.x, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mPosition.y, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mPosition.z, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mPosition.x, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mPosition.y, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mPosition.z, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mPosition.x, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mPosition.y, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mPosition.z, 0.0f, 0.0f, 0); + + mctx->updateSlider(2, &g_env_light.fog_col.r, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.fog_col.g, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.fog_col.b, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.mFogNear, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.mFogFar, 0.0f, 0.0f, 0); + + mctx->updateSlider(2, &g_env_light.bg_light_influence, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.mFogDensity, 0, 0, 0); + mctx->updateSlider(2, &g_env_light.field_0x12f9, 0, 0, 0); + mctx->updateComboBox(2, &g_kankyoHIO.bloom.m_saturationPattern, 0); + + mctx->updateComboBox(2, &g_env_light.dungeonlight[0].mAngleAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[1].mAngleAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[2].mAngleAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[3].mAngleAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[4].mAngleAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[5].mAngleAttenuation, 0); + + mctx->updateComboBox(2, &g_env_light.dungeonlight[0].mDistAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[1].mDistAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[2].mDistAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[3].mDistAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[4].mDistAttenuation, 0); + mctx->updateComboBox(2, &g_env_light.dungeonlight[5].mDistAttenuation, 0); + + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mCutoffAngle, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mCutoffAngle, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mCutoffAngle, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mCutoffAngle, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mCutoffAngle, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mCutoffAngle, 0.0f, 0.0f, 0); + + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mAngleX, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mAngleX, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mAngleX, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mAngleX, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mAngleX, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mAngleX, 0.0f, 0.0f, 0); + + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mAngleY, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mAngleY, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mAngleY, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mAngleY, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mAngleY, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mAngleY, 0.0f, 0.0f, 0); + + mctx->updateSlider(2, &g_env_light.dungeonlight[0].mRefDistance, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[1].mRefDistance, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[2].mRefDistance, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[3].mRefDistance, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[4].mRefDistance, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_env_light.dungeonlight[5].mRefDistance, 0.0f, 0.0f, 0); + + mctx->updateSlider(2, &g_kankyoHIO.navy.terrain_height_crr, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_kankyoHIO.navy.influence_multiplier, 0.0f, 0.0f, 0); + mctx->updateSlider(2, &g_kankyoHIO.navy.cutoff_multiplier, 0.0f, 0.0f, 0); + + releaseJORMContext(mctx); +} + +void dKankyo_lightHIO_c::listenPropertyEvent(const JORPropertyEvent* property) { + // NONMATCHING +} + +dKankyo_vrboxHIO_c::dKankyo_vrboxHIO_c() { + m_VrboxSetting = 0; + field_0x5 = 0; + field_0x7 = 0; + field_0x8 = 0; + field_0x9 = 0; + field_0xa = 0; + field_0xb = 0; + field_0xc = 0; + field_0xd = 0; + field_0xe = -1; + field_0xf = -1; + field_0x10 = -1; + field_0x11 = -1; + field_0x12 = -1; + field_0x13 = -1; + field_0x14 = 0; + m_horizonHeight = 0.0f; +} + +void dKankyo_vrboxHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +void dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF() { + // NONMATCHING +} + +void dKankyo_vrboxHIO_c::listenPropertyEvent(const JORPropertyEvent* property) { + // NONMATCHING +} + +dKankyo_bloomHIO_c::dKankyo_bloomHIO_c() { + field_0x4 = 0; + m_saturationPattern = 0; + field_0x5 = 0; + + for (int i = 0; i < 64; i++) { + dKydata_BloomInfo_c* bloominf = dKyd_BloomInf_tbl_getp(i); + bloom_info[i] = bloominf->info; + } +} + +void dKankyo_bloomHIO_c::listenPropertyEvent(const JORPropertyEvent* property) { + // NONMATCHING +} + +void dKankyo_bloomHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +void dKankyo_dungeonlightHIO_c::listenPropertyEvent(const JORPropertyEvent* property) {} + +dKankyo_navyHIO_c::dKankyo_navyHIO_c() { + // NONMATCHING +} + +void dKankyo_navyHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +dKankyo_efflightHIO_c::dKankyo_efflightHIO_c() { + // NONMATCHING +} + +void dKankyo_efflightHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +dKankyo_windHIO_c::dKankyo_windHIO_c() { + // NONMATCHING +} + +dKankyo_demolightHIO_c::dKankyo_demolightHIO_c() { + // NONMATCHING +} + +void dKankyo_demolightHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +void dKankyo_windHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +dKankyo_dungeonlightHIO_c::dKankyo_dungeonlightHIO_c() { + // NONMATCHING +} + +void dKankyo_dungeonlightHIO_c::genMessage(JORMContext* mctx) {} + +dKankyo_ParticlelightHIO_c::dKankyo_ParticlelightHIO_c() { + // NONMATCHING +} + +void dKankyo_ParticlelightHIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +void dKankyo_ParticlelightHIO_c::listenPropertyEvent(const JORPropertyEvent* property) { + // NONMATCHING +} + +dKankyo_HIO_c::dKankyo_HIO_c() { + light.m_displayTVColorSettings = FALSE; + vrbox.m_displayVrboxTVColorSettings = FALSE; +} + +void dKankyo_HIO_c::genMessage(JORMContext* mctx) { + // NONMATCHING +} + +#endif + /* 801A56DC-801A572C 1A001C 0050+00 1/1 0/0 0/0 .text drawKankyo__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::drawKankyo() { @@ -4083,6 +5797,7 @@ void dScnKy_env_light_c::drawKankyo() { void dKy_undwater_filter_draw() { camera_class* camera = (camera_class*)dComIfGp_getCamera(0); cXyz size; + f32 var_f30 = 60.0f; static cXyz S_old_cameye(0.0f, 0.0f, 0.0f); static cXyz S_old_camctr(0.0f, 0.0f, 0.0f); @@ -4117,6 +5832,10 @@ void dKy_undwater_filter_draw() { size.y = 0.00524f; size.z = 0.00524f; + #if !PLATFORM_GCN + size.x *= mDoGph_gInf_c::getScale(); + #endif + if (g_env_light.undwater_ef_model != NULL) { J3DGXColor sp8; g_env_light.undwater_ef_model->setBaseScale(size); @@ -4137,16 +5856,59 @@ void dKy_undwater_filter_draw() { /* 801A5B6C-801A5B98 1A04AC 002C+00 1/0 0/0 0/0 .text dKy_Draw__FP17sub_kankyo__class */ static int dKy_Draw(sub_kankyo__class* i_this) { + (void)i_this; g_env_light.drawKankyo(); + + #if DEBUG + if ((dDebugPad.Enable(1) || g_kankyoHIO.field_0x15) && g_kankyoHIO.field_0x17) { + dKydb_HIO_debug_draw(); + } + + if (dDebugPad.Enable(2)) { + dKydb_HIO_winddebug_draw(); + } + + dKydb_winddisp_draw(); + dKydb_dungeonlight_draw(); + #endif + return 1; } /* 801A5B98-801A5BCC 1A04D8 0034+00 1/0 0/0 0/0 .text dKy_Execute__FP17sub_kankyo__class */ static int dKy_Execute(sub_kankyo__class* i_this) { + (void)i_this; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); g_env_light.exeKankyo(); dKyw_wind_set(); dKy_twilight_camelight_set(); + + #if DEBUG + if (g_kankyoHIO.display_schedule_bit) { + dDbVw_Report(40, 80, "schbit[0x%02x] timer[%d]", dKy_get_schbit(), dKy_get_schbit_timer()); + } + + if (!dDebugPad.Enable(1)) { + // NOTE: a g_kankyoHIO load is generated here but nothing is done with it + g_kankyoHIO.display_schedule_bit; + } + + if (dDebugPad.Enable(2)) { + dKydb_HIO_debug_Wind(); + } + + if (g_kankyoHIO.effect_light_monitor) { + dKydb_efplight_monitor(); + } + + if (g_kankyoHIO.point_light_monitor) { + dKydb_plight_monitor(); + } + + debug_actor_create(); + #endif + return 1; } @@ -4159,6 +5921,7 @@ static int dKy_IsDelete(sub_kankyo__class* i_this) { /* 801A5BD4-801A5C1C 1A0514 0048+00 1/0 0/0 0/0 .text dKy_Delete__FP17sub_kankyo__class */ static int dKy_Delete(sub_kankyo__class* i_this) { + (void)i_this; plight_init(); mDoAud_mEnvse_resetScene(); @@ -4166,21 +5929,38 @@ static int dKy_Delete(sub_kankyo__class* i_this) { mDoExt_destroySolidHeap(g_env_light.undwater_ef_heap); } + #if DEBUG + mDoHIO_DELETE_CHILD(g_kankyoHIO.field_0x1a); + #endif + return 1; } /* 801A5C1C-801A5E54 1A055C 0238+00 1/0 0/0 0/0 .text dKy_Create__FPv */ static int dKy_Create(void* i_this) { + (void)i_this; BOOL next_time_set = false; stage_envr_info_class* stage_envr_p = dComIfGp_getStageEnvrInfo(); if (stage_envr_p != NULL && dComIfGp_getStartStageRoomNo() != -1) { - if (stage_envr_p[dComIfGp_getStartStageRoomNo()].pselect_id[64] != 0) { + stage_envr_p += dComIfGp_getStartStageRoomNo(); + if (stage_envr_p->pselect_id[64] != 0) { mDoGph_gInf_c::getBloom()->create(); + + #if DEBUG + OS_REPORT("\n-----------------------------------"); + OS_REPORT("\n飽和加算用にRAMを確保しました! "); + OS_REPORT("\n-----------------------------------"); + #endif } } envcolor_init(); + + #if DEBUG + g_kankyoHIO.field_0x1a = mDoHIO_CREATE_CHILD("環境", &g_kankyoHIO); + #endif + g_env_light.field_0x12b0 = 0; g_env_light.field_0x1254 = 1.0f; g_env_light.plight_near_pos.x = 0.0f; @@ -4196,6 +5976,10 @@ static int dKy_Create(void* i_this) { dungeonlight_init(); dKy_setLight_nowroom(dComIfGp_roomControl_getStayNo()); + #if DEBUG + g_kankyoHIO.navy.field_0x22a = 0; + #endif + g_env_light.pol_efftbl = (dKy_pol_efftbl_struct*)dComIfG_getStageRes("pol_efftbl.dat"); g_env_light.pol_effcol = (dKy_pol_effcol_struct*)dComIfG_getStageRes("pol_effcol.dat"); g_env_light.pol_efftbl2 = (dKy_pol_efftbl_struct*)dComIfG_getStageRes("pol_efftbl2.dat"); @@ -4221,6 +6005,14 @@ static int dKy_Create(void* i_this) { } g_env_light.nexttime = -1.0f; + + #if DEBUG + if (strcmp(dComIfGp_getStartStageName(), "T_SASA0") == 0) { + dComIfGs_onEventBit((u16)dSv_event_flag_c::saveBitLabels[142]); + dComIfGs_onEventBit((u16)dSv_event_flag_c::saveBitLabels[167]); + } + #endif + return cPhs_COMPLEATE_e; } @@ -4233,7 +6025,8 @@ void dKy_setLight_init() { /* 801A60BC-801A60E0 1A09FC 0024+00 0/0 1/1 0/0 .text dKy_setLight__Fv */ void dKy_setLight() { - g_env_light.sun_light_pos = g_env_light.sun_pos; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + kankyo->sun_light_pos = kankyo->sun_pos; } /* 801A60E0-801A61F4 1A0A20 0114+00 2/2 0/0 0/0 .text dKy_GlobalLight_set__Fv */ @@ -4263,7 +6056,7 @@ void dKy_GlobalLight_set() { } } -inline u8 dLVI_getSWLight(stage_pure_lightvec_info_class* i_info) { +inline int dLVI_getSWLight(stage_pure_lightvec_info_class* i_info) { return i_info->flags & 0x80; } @@ -4300,6 +6093,12 @@ void dKy_setLight_nowroom_common(char room_no, f32 light_ratio) { room_light_info_num = 6; } + #if DEBUG + if (g_kankyoHIO.light.m_HOSTIO_setting) { + room_light_info_num = g_kankyoHIO.dungeonLight.usedLights; + } + #endif + lightMask = 0; for (int i = 0; i < room_light_info_num; i++) { @@ -4499,7 +6298,12 @@ void dKy_setLight_nowroom_common(char room_no, f32 light_ratio) { /* 801A6C20-801A6C58 1A1560 0038+00 2/2 1/1 0/0 .text dKy_setLight_nowroom__Fc */ void dKy_setLight_nowroom(char room_no) { - if (dComIfGp_getCamera(0) != NULL) { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + camera_class* camera = dComIfGp_getCamera(0); + fopAc_ac_c* player = dComIfGp_getPlayer(0); + MtxPtr var_r28 = j3dSys.getViewMtx(); + + if (camera != NULL) { dKy_setLight_nowroom_common(room_no, 1.0f); } } @@ -4522,6 +6326,13 @@ void dKy_setLight_nowroom_grass(char room_no, f32 light_ratio) { } int grass_light = dStage_FileList_dt_GRASSLIGHT(filelist); + #if DEBUG + if (g_kankyoHIO.navy.grass_light_debug) { + grass_light = g_kankyoHIO.navy.grass_light_influence_ratio; + } else if (room_no == dComIfGp_roomControl_getStayNo()) { + g_kankyoHIO.navy.grass_light_influence_ratio = grass_light; + } + #endif f32 grass_light_ratio; if (grass_light >= 0xFF) { @@ -4595,6 +6406,12 @@ void dKy_setLight_nowroom_actor(dKy_tevstr_c* tevstr_p) { room_light_num = 6; } + #if DEBUG + if (g_kankyoHIO.light.m_HOSTIO_setting) { + room_light_num = g_kankyoHIO.dungeonLight.usedLights; + } + #endif + lightMask = 0; for (int i = 0; i < room_light_num; i++) { @@ -4784,8 +6601,7 @@ cXyz dKy_light_influence_pos(int light_id) { light_id = 0; } - dScnKy_env_light_c* kankyo = &g_env_light; - return kankyo->pointlight[light_id]->mPosition; + return g_env_light.pointlight[light_id]->mPosition; } /* 801A7714-801A7738 1A2054 0024+00 0/0 1/1 0/0 .text dKy_plight_near_pos__Fv */ @@ -4796,36 +6612,57 @@ cXyz dKy_plight_near_pos() { /* 801A7738-801A7790 1A2078 0058+00 0/0 0/0 1/1 .text * dKy_mock_light_every_set__FP15LIGHT_INFLUENCE */ void dKy_mock_light_every_set(LIGHT_INFLUENCE* light_inf_p) { - for (int i = 50; i < 100; i++) { + int i; + BOOL var_r30 = 0; + + for (i = 50; i < 100; i++) { if (g_env_light.pointlight[i] == NULL) { + var_r30 = 1; g_env_light.pointlight[i] = light_inf_p; g_env_light.pointlight[i]->mIndex = i + 1; break; } } + + #if DEBUG + if (i >= 100 && !var_r30) { + OS_WARNING("\nPOINTLIGHT2 COUNT OVER!!!\n"); + } + #endif } /* 801A7790-801A7814 1A20D0 0084+00 1/1 1/1 18/18 .text dKy_plight_set__FP15LIGHT_INFLUENCE */ void dKy_plight_set(LIGHT_INFLUENCE* light_inf_p) { - for (int i = 0; i < 100; i++) { + int i; + BOOL var_r30 = 0; + + for (i = 0; i < 100; i++) { if (g_env_light.pointlight[i] == light_inf_p) { return; } } - for (int i = 0; i < 50; i++) { - if (g_env_light.pointlight[i] == NULL) { + for (i = 0; i < 50; i++) { + if (g_env_light.pointlight[i] == NULL && !var_r30) { + var_r30 = 1; g_env_light.pointlight[i] = light_inf_p; g_env_light.pointlight[i]->mIndex = i + 1; break; } } + + #if DEBUG + if (i >= 100 && !var_r30) { + OS_WARNING("\nPOINTLIGHT COUNT OVER!!!\n"); + } + #endif } /* 801A7814-801A7868 1A2154 0054+00 0/0 0/0 4/4 .text dKy_dalkmist_inf_set__FP18DALKMIST_INFLUENCE */ void dKy_dalkmist_inf_set(DALKMIST_INFLUENCE* dalkmist_inf_p) { - for (int i = 0; i < 10; i++) { + int i; + for (i = 0; i < 10; i++) { if (g_env_light.dalkmist_influence[i] == NULL) { g_env_light.dalkmist_influence[i] = dalkmist_inf_p; g_env_light.dalkmist_influence[i]->mIndex = i; @@ -4864,45 +6701,58 @@ void dKy_plight_priority_set(LIGHT_INFLUENCE* light_inf_p) { /* 801A792C-801A797C 1A226C 0050+00 0/0 1/1 32/32 .text dKy_plight_cut__FP15LIGHT_INFLUENCE */ void dKy_plight_cut(LIGHT_INFLUENCE* light_inf_p) { - if (light_inf_p != NULL) { - if (light_inf_p->mIndex != 0) { - if (light_inf_p->mIndex < 0) { - light_inf_p->mIndex *= -1; - } + int idx; + if (light_inf_p == NULL) { + OS_REPORT("\nd_kankyo.cpp dKy_plight_cut NULL!!"); + } else if (light_inf_p->mIndex == 0) { + OS_REPORT("\x1b[46m\nポイントライト空削除!\n\x1b[m"); + } else { + if (light_inf_p->mIndex < 0) { + light_inf_p->mIndex *= -1; + } - int idx = (light_inf_p->mIndex & 0xFFF) - 1; - if (idx < 50) { - g_env_light.pointlight[idx] = NULL; - } + idx = (light_inf_p->mIndex & 0xFFF) - 1; + if (idx < 50) { + g_env_light.pointlight[idx] = NULL; } } } /* 801A797C-801A7A00 1A22BC 0084+00 1/1 1/1 3/3 .text dKy_efplight_set__FP15LIGHT_INFLUENCE */ void dKy_efplight_set(LIGHT_INFLUENCE* light_inf_p) { - for (int i = 0; i < 5; i++) { + int i; + for (i = 0; i < 5; i++) { if (g_env_light.efplight[i] == light_inf_p) { return; } } - for (int i = 0; i < 5; i++) { + for (i = 0; i < 5; i++) { if (g_env_light.efplight[i] == NULL) { g_env_light.efplight[i] = light_inf_p; g_env_light.efplight[i]->mIndex = i + 1; break; } } + + #if DEBUG + if (i >= 5) { + OS_REPORT("\nEffectLIGHT COUNT OVER!!!"); + } + #endif } /* 801A7A00-801A7A40 1A2340 0040+00 1/1 1/1 3/3 .text dKy_efplight_cut__FP15LIGHT_INFLUENCE */ void dKy_efplight_cut(LIGHT_INFLUENCE* light_inf_p) { - if (light_inf_p != NULL) { - if (light_inf_p->mIndex != 0) { - int idx = light_inf_p->mIndex - 1; - if (idx >= 0 && idx < 5) { - g_env_light.efplight[idx] = NULL; - } + int idx; + if (light_inf_p == NULL) { + OS_REPORT("\nd_kankyo.cpp dKy_plight_cut NULL!!"); + } else if (light_inf_p->mIndex == 0) { + OS_WARNING("\nEFLIGHT CUT nomi!\n"); + } else { + idx = light_inf_p->mIndex - 1; + if (idx >= 0 && idx < 5) { + g_env_light.efplight[idx] = NULL; } } } @@ -4913,6 +6763,8 @@ void dKy_bgparts_activelight_set(LIGHT_INFLUENCE* light_inf_p, int bgpart_id) { if (light_inf_p != NULL) { memcpy(&g_env_light.bgparts_active_light[bgpart_id], light_inf_p, sizeof(LIGHT_INFLUENCE)); g_env_light.bgparts_active_light[bgpart_id].mIndex = bgpart_id + 1; + } else { + JUT_ASSERT(13758, 0); } } @@ -5012,8 +6864,11 @@ void dKy_fog_startendz_set(f32 param_0, f32 param_1, f32 ratio) { /* 801A8168-801A8190 1A2AA8 0028+00 0/0 1/1 0/0 .text dKy_Itemgetcol_chg_on__Fv */ void dKy_Itemgetcol_chg_on() { - if (g_env_light.Itemgetcol_chg == 0 || g_env_light.Itemgetcol_chg == 6) { - g_env_light.Itemgetcol_chg = 1; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + OS_REPORT("\ndKy_Itemgetcol_chg_on[%d]", kankyo->Itemgetcol_chg); + + if (kankyo->Itemgetcol_chg == 0 || kankyo->Itemgetcol_chg == 6) { + kankyo->Itemgetcol_chg = 1; } } @@ -5058,10 +6913,9 @@ SND_INFLUENCE* dKy_Sound_get() { /* 801A8484-801A8538 1A2DC4 00B4+00 0/0 2/2 0/0 .text dKy_SordFlush_set__F4cXyzi */ void dKy_SordFlush_set(cXyz light_pos, int light_type) { dScnKy_env_light_c* light = dKy_getEnvlight(); + EF_THUNDER* thunder = &light->mThunderEff; - if (!dKy_darkworld_check() && - (light->mThunderEff.mState >= 10 || light->mThunderEff.mFlashTimer <= 0.0f)) - { + if (!dKy_darkworld_check() && (thunder->mState >= 10 || thunder->mFlashTimer <= 0.0f)) { if (g_env_light.eflight.mState == 0) { g_env_light.eflight.mState = 1; g_env_light.eflight.mLightType = light_type; @@ -5162,13 +7016,19 @@ static void GxXFog_set() { /* 801A87E4-801A880C 1A3124 0028+00 0/0 0/0 52/52 .text dKy_change_colpat__FUc */ void dKy_change_colpat(u8 colpat) { g_env_light.mColpatCurrGather = colpat; - if (g_env_light.wether_pat1 != colpat) { + if (g_env_light.wether_pat1 != g_env_light.mColpatCurrGather) { g_env_light.mColPatBlendGather = 0.0f; } } /* 801A880C-801A8854 1A314C 0048+00 0/0 0/0 25/25 .text dKy_custom_colset__FUcUcf */ void dKy_custom_colset(u8 prevGather, u8 curGather, f32 blend) { + #if DEBUG + if (g_kankyoHIO.light.m_HOSTIO_setting) { + return; + } + #endif + if (g_env_light.light_init_timer != 1) { if (blend < 1.0f) { g_env_light.mColpatPrevGather = prevGather; @@ -5186,23 +7046,21 @@ void dKy_custom_colset(u8 prevGather, u8 curGather, f32 blend) { */ void dKy_setLight_mine(dKy_tevstr_c* tevstr_p) { GXLightObj light; + J3DLightInfo& info = tevstr_p->mLightObj.getLightInfo(); - GXInitLightPos(&light, tevstr_p->mLightObj.mInfo.mLightPosition.x, - tevstr_p->mLightObj.mInfo.mLightPosition.y, - tevstr_p->mLightObj.mInfo.mLightPosition.z); - GXInitLightDir(&light, tevstr_p->mLightObj.mInfo.mLightDirection.x, - tevstr_p->mLightObj.mInfo.mLightDirection.y, - tevstr_p->mLightObj.mInfo.mLightDirection.z); - GXInitLightColor(&light, tevstr_p->mLightObj.mInfo.mColor); - GXInitLightAttn(&light, tevstr_p->mLightObj.mInfo.mCosAtten.x, - tevstr_p->mLightObj.mInfo.mCosAtten.y, tevstr_p->mLightObj.mInfo.mCosAtten.z, - tevstr_p->mLightObj.mInfo.mDistAtten.x, tevstr_p->mLightObj.mInfo.mDistAtten.y, - tevstr_p->mLightObj.mInfo.mDistAtten.z); + GXInitLightPos(&light, info.mLightPosition.x, info.mLightPosition.y, info.mLightPosition.z); + GXInitLightDir(&light, info.mLightDirection.x, info.mLightDirection.y, info.mLightDirection.z); + GXInitLightColor(&light, info.mColor); + GXInitLightAttn(&light, info.mCosAtten.x, + info.mCosAtten.y, info.mCosAtten.z, + info.mDistAtten.x, info.mDistAtten.y, + info.mDistAtten.z); GXLoadLightObjImm(&light, (GXLightID)*lightMaskData); } /* 801A88EC-801A8A34 1A322C 0148+00 2/2 5/5 11/11 .text dKy_tevstr_init__FP12dKy_tevstr_cScUc */ void dKy_tevstr_init(dKy_tevstr_c* tevstr_p, s8 room_no, u8 floorCol) { + J3DLightInfo* light_info; memset(tevstr_p, 0, sizeof(dKy_tevstr_c)); if (room_no == -1) { @@ -5222,31 +7080,42 @@ void dKy_tevstr_init(dKy_tevstr_c* tevstr_p, s8 room_no, u8 floorCol) { tevstr_p->field_0x374 = 1.0f; tevstr_p->field_0x384 = 0; - tevstr_p->mLightObj.mInfo.mColor.g = 0; - tevstr_p->mLightObj.mInfo.mColor.b = 0; - tevstr_p->mLightObj.mInfo.mColor.a = 255; - tevstr_p->mLightObj.mInfo.mCosAtten.x = 1.0f; - tevstr_p->mLightObj.mInfo.mCosAtten.y = 0.0f; - tevstr_p->mLightObj.mInfo.mCosAtten.z = 0.0f; - tevstr_p->mLightObj.mInfo.mDistAtten.x = 1.0f; - tevstr_p->mLightObj.mInfo.mDistAtten.y = 0.0f; - tevstr_p->mLightObj.mInfo.mDistAtten.z = 0.0f; + light_info = &tevstr_p->mLightObj.getLightInfo(); + light_info->mColor.g = 0; + light_info->mColor.b = 0; + light_info->mColor.a = 255; + light_info->mCosAtten.x = 1.0f; + light_info->mCosAtten.y = 0.0f; + light_info->mCosAtten.z = 0.0f; + light_info->mDistAtten.x = 1.0f; + light_info->mDistAtten.y = 0.0f; + light_info->mDistAtten.z = 0.0f; - for (int i = 0; i < 6; i++) { - J3DLightObj* tev_light_p = &tevstr_p->mLights[i]; - LightStatus* light_data_p = &lightStatusData[i]; + int i; + for (i = 0; i < 6; i++) { + light_info = &tevstr_p->mLights[i].getLightInfo(); - tev_light_p->mInfo.mLightPosition = light_data_p->position; - tev_light_p->mInfo.mColor = light_data_p->color; - tev_light_p->mInfo.mCosAtten.x = 1.0f; - tev_light_p->mInfo.mCosAtten.y = 0.0f; - tev_light_p->mInfo.mCosAtten.z = 0.0f; - tev_light_p->mInfo.mDistAtten.x = 1.0f; - tev_light_p->mInfo.mDistAtten.y = 0.0f; - tev_light_p->mInfo.mDistAtten.z = 0.0f; + light_info->mLightPosition = lightStatusData[i].position; + light_info->mColor = lightStatusData[i].color; + light_info->mCosAtten.x = 1.0f; + light_info->mCosAtten.y = 0.0f; + light_info->mCosAtten.z = 0.0f; + light_info->mDistAtten.x = 1.0f; + light_info->mDistAtten.y = 0.0f; + light_info->mDistAtten.z = 0.0f; } } +u8 dKy_get_schbit() { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + return kankyo->schbit; +} + +int dKy_get_schbit_timer() { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + return kankyo->schbit_timer; +} + /* 801A8A34-801A8A44 1A3374 0010+00 0/0 1/1 0/0 .text dKy_rain_check__Fv */ int dKy_rain_check() { return g_env_light.raincnt; @@ -5254,65 +7123,85 @@ int dKy_rain_check() { /* 801A8A44-801A8A54 1A3384 0010+00 0/0 0/0 5/5 .text dKy_set_allcol_ratio__Ff */ void dKy_set_allcol_ratio(f32 ratio) { - g_env_light.allcol_ratio = ratio; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + kankyo->allcol_ratio = ratio; } /* 801A8A54-801A8A64 1A3394 0010+00 0/0 1/1 1/1 .text dKy_set_actcol_ratio__Ff */ void dKy_set_actcol_ratio(f32 ratio) { - g_env_light.actcol_ratio = ratio; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + kankyo->actcol_ratio = ratio; } /* 801A8A64-801A8A74 1A33A4 0010+00 0/0 1/1 1/1 .text dKy_set_bgcol_ratio__Ff */ void dKy_set_bgcol_ratio(f32 ratio) { - g_env_light.bgcol_ratio = ratio; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + kankyo->bgcol_ratio = ratio; } /* 801A8A74-801A8A84 1A33B4 0010+00 0/0 1/1 1/1 .text dKy_set_fogcol_ratio__Ff */ void dKy_set_fogcol_ratio(f32 ratio) { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); g_env_light.fogcol_ratio = ratio; } /* 801A8A84-801A8AB8 1A33C4 0034+00 0/0 1/1 0/0 .text dKy_set_vrboxcol_ratio__Ff */ void dKy_set_vrboxcol_ratio(f32 ratio) { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); dKy_set_vrboxsoracol_ratio(ratio); dKy_set_vrboxkumocol_ratio(ratio); } /* 801A8AB8-801A8AC8 1A33F8 0010+00 1/1 0/0 0/0 .text dKy_set_vrboxsoracol_ratio__Ff */ void dKy_set_vrboxsoracol_ratio(f32 ratio) { - g_env_light.vrboxsoracol_ratio = ratio; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + kankyo->vrboxsoracol_ratio = ratio; } /* 801A8AC8-801A8AD8 1A3408 0010+00 1/1 0/0 0/0 .text dKy_set_vrboxkumocol_ratio__Ff */ void dKy_set_vrboxkumocol_ratio(f32 ratio) { - g_env_light.vrboxkumocol_ratio = ratio; + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + kankyo->vrboxkumocol_ratio = ratio; } /* 801A8AD8-801A8B38 1A3418 0060+00 0/0 1/1 0/0 .text dKy_itudemo_se__Fv */ void dKy_itudemo_se() { - if (g_env_light.moya_se != 0) { - mDoAud_seStart(g_env_light.moya_se, NULL, 0, 0); + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + int room_no = dComIfGp_roomControl_getStayNo(); + + if (kankyo->moya_se != 0) { + mDoAud_seStart(kankyo->moya_se, NULL, 0, 0); } } /* 801A8B38-801A8B58 1A3478 0020+00 1/1 2/2 11/11 .text dKy_get_dayofweek__Fv */ int dKy_get_dayofweek() { - return dComIfGs_getDate() % 7; + u16 date = dComIfGs_getDate(); + int day_of_week = date % 7; + return day_of_week; } /* 801A8B58-801A8B68 1A3498 0010+00 0/0 3/3 0/0 .text dKy_set_nexttime__Ff */ -void dKy_set_nexttime(f32 nexttime) { - g_env_light.nexttime = nexttime; +void dKy_set_nexttime(f32 next_time) { + OS_REPORT("\n\n\nnext_time=[%f]\n\n\n", next_time); + #if DEBUG + if (next_time > 360.0f) { + JUT_ASSERT(14615, 0); + } + #endif + + g_env_light.nexttime = next_time; } /* 801A8B68-801A8BC8 1A34A8 0060+00 0/0 1/1 0/0 .text dKy_instant_timechg__Ff */ -void dKy_instant_timechg(f32 time) { - if (time < g_env_light.getDaytime()) { +void dKy_instant_timechg(f32 timechg) { + f32 time = g_env_light.getDaytime(); + if (timechg < time) { dComIfGs_setDate(dComIfGs_getDate() + 1); dKankyo_DayProc(); } - dComIfGs_setTime(time); + dComIfGs_setTime(timechg); } /* 801A8BC8-801A8C04 1A3508 003C+00 0/0 1/1 0/0 .text dKy_instant_rainchg__Fv */ @@ -5326,6 +7215,7 @@ void dKy_instant_rainchg() { /* 801A8C04-801A8E20 1A3544 021C+00 3/3 0/0 0/0 .text NewAmbColGet__FP11_GXColorS10 */ static GXColor NewAmbColGet(GXColorS10* in_col_p) { GXColorS10 sp18, sp10; + f32 temp_f31; sp18 = *in_col_p; sp10.r = sp18.r * 4; @@ -5333,24 +7223,24 @@ static GXColor NewAmbColGet(GXColorS10* in_col_p) { sp10.b = sp18.b * 4; if (sp10.r > 0xFF) { - f32 temp_f31 = 255.0f / sp10.r; + temp_f31 = 255.0f / sp10.r; sp10.r *= temp_f31; sp10.g *= temp_f31; sp10.b *= temp_f31; } if (sp10.g > 0xFF) { - f32 temp_f31_2 = 255.0f / sp10.g; - sp10.r *= temp_f31_2; - sp10.g *= temp_f31_2; - sp10.b *= temp_f31_2; + temp_f31 = 255.0f / sp10.g; + sp10.r *= temp_f31; + sp10.g *= temp_f31; + sp10.b *= temp_f31; } if (sp10.b > 0xFF) { - f32 temp_f31_3 = 255.0f / sp10.b; - sp10.r *= temp_f31_3; - sp10.g *= temp_f31_3; - sp10.b *= temp_f31_3; + temp_f31 = 255.0f / sp10.b; + sp10.r *= temp_f31; + sp10.g *= temp_f31; + sp10.b *= temp_f31; } GXColor amb_col; @@ -5950,6 +7840,7 @@ void dKy_twilight_camelight_set() { } /* 801AB01C-801AB270 1A595C 0254+00 1/1 0/0 0/0 .text dKy_WaterIn_Light_set__Fv */ +// NONMATCHING - direct g_env_light member loads instead of storing to temps. matches debug, not retail void dKy_WaterIn_Light_set() { dScnKy_env_light_c* kankyo = dKy_getEnvlight(); fopAc_ac_c* player_p = dComIfGp_getPlayer(0); @@ -6021,8 +7912,8 @@ void dKy_WaterIn_Light_set() { } #if DEBUG - if (g_kankyoHIO.field_0x686 != 0) { - sp8 = g_kankyoHIO.field_0x686 - 1; + if (g_kankyoHIO.navy.room_light_type != 0) { + sp8 = g_kankyoHIO.navy.room_light_type - 1; } switch (sp8) { @@ -6058,7 +7949,7 @@ void dKy_WaterIn_Light_set() { } #if DEBUG - if (g_kankyoHIO.field_0x6d9 == 0) { + if (g_kankyoHIO.navy.field_0x311 == 0) { #endif kankyo->field_0x127c = var_f29; kankyo->field_0x0c18[i].mRefDistance *= var_f28; @@ -6067,19 +7958,19 @@ void dKy_WaterIn_Light_set() { } static int S_mLighSize_pat_old = 0x63; - if (S_mLighSize_pat_old != g_kankyoHIO.field_0x686) { - S_mLighSize_pat_old = g_kankyoHIO.field_0x686; + if (S_mLighSize_pat_old != g_kankyoHIO.navy.room_light_type) { + S_mLighSize_pat_old = g_kankyoHIO.navy.room_light_type; - g_kankyoHIO.field_0x6e0 = var_f29; - g_kankyoHIO.field_0x6e4 = var_f28; - g_kankyoHIO.field_0x6e8 = var_f27; - g_kankyoHIO.field_0x01c.dKankyo_lightHIOInfoUpDateF(); + g_kankyoHIO.navy.terrain_height_crr = var_f29; + g_kankyoHIO.navy.influence_multiplier = var_f28; + g_kankyoHIO.navy.cutoff_multiplier = var_f27; + g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF(); } - if (g_kankyoHIO.field_0x6d9 != 0) { - kankyo->field_0x127c = g_kankyoHIO.field_0x6e0; - kankyo->field_0x0c18[i].mRefDistance *= g_kankyoHIO.field_0x6e4; - kankyo->field_0x0c18[i].mCutoffAngle *= g_kankyoHIO.field_0x6e8; + if (g_kankyoHIO.navy.field_0x311 != 0) { + kankyo->field_0x127c = g_kankyoHIO.navy.terrain_height_crr; + kankyo->field_0x0c18[i].mRefDistance *= g_kankyoHIO.navy.influence_multiplier; + kankyo->field_0x0c18[i].mCutoffAngle *= g_kankyoHIO.navy.cutoff_multiplier; } #endif @@ -6570,7 +8461,8 @@ BOOL dKy_Outdoor_check() { BOOL dKy_Indoor_check() { BOOL indoors = false; - if (dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo()) != ST_FIELD) { + int sttype = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo()); + if (sttype != ST_FIELD) { indoors = true; } @@ -6619,10 +8511,13 @@ void dKy_depth_dist_set(void* process_p) { } /* 801AC57C-801AC5BC 1A6EBC 0040+00 13/13 21/21 134/134 .text dKy_darkworld_check__Fv */ -bool dKy_darkworld_check() { - bool check = false; +u8 dKy_darkworld_check() { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + u8 check = FALSE; + u8 var_r29 = 0; + if (dComIfGp_world_dark_get() == TRUE) { - check = true; + check = TRUE; } return check; diff --git a/src/d/d_kankyo_data.cpp b/src/d/d_kankyo_data.cpp index 26782d30e9..625491f849 100644 --- a/src/d/d_kankyo_data.cpp +++ b/src/d/d_kankyo_data.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: d/kankyo/d_kankyo_data -// - #include "d/dolzel.h" // IWYU pragma: keep #include "d/d_kankyo_data.h" @@ -690,7 +685,6 @@ void* dKyd_dmpalet_getp() { return l_field_data; } -/* ############################################################################################## */ /* 803A987C-803A9894 00699C 0018+00 1/1 0/0 0/0 .data l_pselect_default */ static stage_pselect_info_class l_pselect_default[2] = { { @@ -708,7 +702,6 @@ void* dKyd_dmpselect_getp() { return l_pselect_default; } -/* ############################################################################################## */ /* 803A9894-803A9918 0069B4 0082+02 1/1 0/0 0/0 .data l_envr_default */ static stage_envr_info_class l_envr_default[2] = { { @@ -732,7 +725,6 @@ void* dKyd_dmenvr_getp() { return l_envr_default; } -/* ############################################################################################## */ /* 803A9918-803A9A94 006A38 017A+02 1/1 0/0 0/0 .data l_vr_box_data */ static dKyd_l_vr_box_data_struct l_vr_box_data[18] = { {{0x2F, 0x1A, 0x07, 0x44, 0x1E, 0x10, 0xF5, 0xA5, 0x6C, 0x9A, 0x5C, @@ -800,9 +792,13 @@ static GXFogAdjTable S_xfog_table_data[2] = { /* 80056A24-80056A64 051364 0040+00 0/0 2/2 0/0 .text dKyd_xfog_table_set__FUc */ void dKyd_xfog_table_set(u8 tblIdx) { - for (int i = 0; i < 10; i++) { - u16 fogAdjTableEntry = S_xfog_table_data[tblIdx & 0xff].r[i]; - g_env_light.mXFogTbl.r[i] = fogAdjTableEntry; + #if DEBUG + if (g_kankyoHIO.light.field_0x5 != 1) + #endif + { + for (int i = 0; i < 10; i++) { + g_env_light.mXFogTbl.r[i] = S_xfog_table_data[tblIdx].r[i]; + } } } @@ -828,7 +824,11 @@ dKydata_lightsizeInfo_c* dKyd_light_tw_size_tbl_getp() { /* 80056A94-80056AA8 0513D4 0014+00 0/0 1/1 0/0 .text dKyd_BloomInf_tbl_getp__Fi */ dKydata_BloomInfo_c* dKyd_BloomInf_tbl_getp(int tblIdx) { + #if DEBUG + if (g_kankyoHIO.bloom.field_0x4) { + return (dKydata_BloomInfo_c*)&g_kankyoHIO.bloom.bloom_info[tblIdx]; + } + #endif + return &l_kydata_BloomInf_tbl[tblIdx]; } - -/* 8037A1C0-8037A1C0 006820 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/d_kankyo_debug.cpp b/src/d/d_kankyo_debug.cpp new file mode 100644 index 0000000000..4bc97a4cb7 --- /dev/null +++ b/src/d/d_kankyo_debug.cpp @@ -0,0 +1,962 @@ +#include "d/dolzel.h" // IWYU pragma: keep + +#include "d/d_kankyo.h" +#include "d/d_kankyo_rain.h" +#include "d/d_debug_viewer.h" +#include "d/d_s_play.h" +#include "f_op/f_op_camera_mng.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_graphic.h" + +static void add_update_proc(u8* mode, s16* param_1, s16* param_2, s16* param_3) { + int value; + + if (*mode != 0) { + switch (*mode) { + case 1: + value = 100; + break; + case 2: + value = 10; + break; + case 3: + value = 1; + break; + case 4: + value = -1; + break; + case 5: + value = -10; + break; + case 6: + value = -100; + break; + } + + if (*mode <= 3) { + if (*param_1 + value > 0xFF) { + value = 0xFF - *param_1; + } + if (*param_2 + value > 0xFF) { + value = 0xFF - *param_2; + } + if (*param_3 + value > 0xFF) { + value = 0xFF - *param_3; + } + } else { + if (*param_1 + value < 0) { + value = -*param_1; + } + if (*param_2 + value < 0) { + value = -*param_2; + } + if (*param_3 + value < 0) { + value = -*param_3; + } + } + + *param_1 += (s16)value; + *param_2 += (s16)value; + *param_3 += (s16)value; + *mode = 0; + + g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF(); + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } +} + +void add_update_proc2(u8* mode, u8* param_1, u8* param_2, u8* param_3) { + s16 spC; + s16 spA; + s16 sp8; + u8 update_mode; + + update_mode = *mode; + sp8 = *param_1; + spA = *param_2; + spC = *param_3; + add_update_proc(mode, &sp8, &spA, &spC); + + *param_1 = sp8; + *param_2 = spA; + *param_3 = spC; + + if (update_mode != 0) { + g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF(); + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } +} + +void dKydb_color_HIO_update() { + switch (g_kankyoHIO.light.m_HOSTIO_setting) { + case 0: + g_kankyoHIO.light.field_0x52 = 0; + break; + case 1: + if (g_kankyoHIO.light.field_0x52 == 0) { + g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF(); + } + g_kankyoHIO.light.field_0x52 = 1; + break; + } + + add_update_proc(&g_kankyoHIO.light.field_0x60, &g_env_light.actor_amb_col.r, &g_env_light.actor_amb_col.g, &g_env_light.actor_amb_col.b); + add_update_proc(&g_kankyoHIO.light.field_0x61, &g_env_light.bg_amb_col[0].r, &g_env_light.bg_amb_col[0].g, &g_env_light.bg_amb_col[0].b); + add_update_proc(&g_kankyoHIO.light.field_0x62, &g_env_light.bg_amb_col[1].r, &g_env_light.bg_amb_col[1].g, &g_env_light.bg_amb_col[1].b); + add_update_proc(&g_kankyoHIO.light.field_0x63, &g_env_light.bg_amb_col[2].r, &g_env_light.bg_amb_col[2].g, &g_env_light.bg_amb_col[2].b); + add_update_proc(&g_kankyoHIO.light.field_0x64, &g_env_light.bg_amb_col[3].r, &g_env_light.bg_amb_col[3].g, &g_env_light.bg_amb_col[3].b); + add_update_proc(&g_kankyoHIO.light.field_0x65, &g_env_light.fog_col.r, &g_env_light.fog_col.g, &g_env_light.fog_col.b); + add_update_proc2(&g_kankyoHIO.light.field_0x66, &g_env_light.dungeonlight[0].mColor.r, &g_env_light.dungeonlight[0].mColor.g, &g_env_light.dungeonlight[0].mColor.b); + add_update_proc2(&g_kankyoHIO.light.field_0x67, &g_env_light.dungeonlight[1].mColor.r, &g_env_light.dungeonlight[1].mColor.g, &g_env_light.dungeonlight[1].mColor.b); + add_update_proc2(&g_kankyoHIO.light.field_0x68, &g_env_light.dungeonlight[2].mColor.r, &g_env_light.dungeonlight[2].mColor.g, &g_env_light.dungeonlight[2].mColor.b); + add_update_proc2(&g_kankyoHIO.light.field_0x69, &g_env_light.dungeonlight[3].mColor.r, &g_env_light.dungeonlight[3].mColor.g, &g_env_light.dungeonlight[3].mColor.b); + add_update_proc2(&g_kankyoHIO.light.field_0x6a, &g_env_light.dungeonlight[4].mColor.r, &g_env_light.dungeonlight[4].mColor.g, &g_env_light.dungeonlight[4].mColor.b); + add_update_proc2(&g_kankyoHIO.light.field_0x6b, &g_env_light.dungeonlight[5].mColor.r, &g_env_light.dungeonlight[5].mColor.g, &g_env_light.dungeonlight[5].mColor.b); +} + +void dKydb_vrbox_HIO_update() { + switch (g_kankyoHIO.vrbox.m_VrboxSetting) { + case 0: + g_kankyoHIO.vrbox.field_0x5 = 0; + break; + case 1: + if (g_kankyoHIO.vrbox.field_0x5 == 0) { + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } + g_kankyoHIO.vrbox.field_0x5 = 1; + break; + } +} + +void dKydb_HIO_kcolor_debug(u8* param_0, u8* param_1, u8* param_2, u8* param_3) { + if (g_kankyoHIO.light.m_forcedPalette != 0) { + *param_0 = g_kankyoHIO.light.m_forcedPalette - 1; + *param_1 = g_kankyoHIO.light.m_forcedPalette - 1; + *param_2 = g_kankyoHIO.light.m_forcedPalette - 1; + *param_3 = g_kankyoHIO.light.m_forcedPalette - 1; + } + + if (dComIfGp_getStagePaletteNumInfo() - 1 < *param_0) { + JUT_WARN(244, "db color err 1:[%d]", *param_0); + *param_0 = 0; + } + + if (dComIfGp_getStagePaletteNumInfo() - 1 < *param_1) { + JUT_WARN(260, "db color err 2:[%d]", *param_1); + *param_1 = 0; + } + + if (dComIfGp_getStagePaletteNumInfo() - 1 < *param_2) { + JUT_WARN(274, "db color err 3[%d]", *param_2); + *param_2 = 0; + } + + if (dComIfGp_getStagePaletteNumInfo() - 1 < *param_3) { + JUT_WARN(288, "db color err 4[%d]", *param_3); + *param_3 = 0; + } +} + +void dKydb_HIO_vrbox_debug(u8* param_0, u8* param_1, u8* param_2, u8* param_3) { + if (g_kankyoHIO.vrbox.field_0x7 != 0) { + *param_0 = g_kankyoHIO.vrbox.field_0x7 - 1; + *param_1 = g_kankyoHIO.vrbox.field_0x7 - 1; + *param_2 = g_kankyoHIO.vrbox.field_0x7 - 1; + *param_3 = g_kankyoHIO.vrbox.field_0x7 - 1; + } + + if (dComIfGp_getStageVrboxcolNumInfo() - 1 < *param_0) { + JUT_WARN(327, "db Vrbox err 1[%d]", *param_0); + *param_0 = 0; + } + + if (dComIfGp_getStageVrboxcolNumInfo() - 1 < *param_1) { + JUT_WARN(342, "db Vrbox err 1[%d]", *param_1); + *param_1 = 0; + } + + if (dComIfGp_getStageVrboxcolNumInfo() - 1 < *param_2) { + JUT_WARN(357, "db Vrbox err 1[%d]", *param_2); + *param_2 = 0; + } + + if (dComIfGp_getStageVrboxcolNumInfo() - 1 < *param_3) { + JUT_WARN(372, "db Vrbox err 1[%d]", *param_2); + *param_3 = 0; + } +} + +// NONMATCHING +void dKydb_HIO_debug_TVdsp(f32 param_0, f32 param_1, int param_2, int param_3, u16 param_4) { + u16 sp30[] = { + 0x01, + 0x02, + 0x04, + 0x08, + 0x10, + 0x20, + 0x40, + 0x80, + }; + + if (g_kankyoHIO.light.m_displayTVColorSettings == TRUE) { + int sp28 = 20; + int sp24 = 100; + int sp20 = 11; + int sp1C = 15; + + dDbVw_Report(sp28, sp24, "ACTOR Amb R %03d", g_env_light.actor_amb_col.r); + dDbVw_Report(sp28, sp24 + sp1C, " G %03d", g_env_light.actor_amb_col.g); + dDbVw_Report(sp28, sp24 + (sp1C * 2), " B %03d", g_env_light.actor_amb_col.b); + + for (int i = 0; i < 4; i++) { + dDbVw_Report(sp28, (i * ((sp1C * 4) - sp1C)) + (sp24 + ((sp1C * 4) - sp1C)), "BG%01d Amb R %03d", i, g_env_light.bg_amb_col[i].r); + dDbVw_Report(sp28, (i * ((sp1C * 4) - sp1C)) + (sp24 + (sp1C * 4)), " G %03d", g_env_light.bg_amb_col[i].g); + dDbVw_Report(sp28, (i * ((sp1C * 4) - sp1C)) + (sp24 + (sp1C * 5)), " B %03d", g_env_light.bg_amb_col[i].b); + } + + for (int i = 0; i < 6; i++) { + if (param_4 & sp30[i + 2]) { + dDbVw_Report(sp28 + (sp20 * 20), (i * sp1C) + (sp24 + ((sp1C * 8) - sp1C)), "LIGHT%01d R %03d G %03d B %03d", i, g_env_light.dungeonlight[i].mColor.r, g_env_light.dungeonlight[i].mColor.g, g_env_light.dungeonlight[i].mColor.b); + } + } + + dDbVw_Report(sp28, sp24 + (sp1C * 14), "Fog R %03d", g_env_light.fog_col.r); + dDbVw_Report(sp28, sp24 + ((sp1C * 16) - sp1C), " G %03d", g_env_light.fog_col.g); + dDbVw_Report(sp28, sp24 + (sp1C * 16), " B %03d", g_env_light.fog_col.b); + dDbVw_Report(sp28, sp24 + (sp1C * 17), " StartZ %06f", g_env_light.mFogNear); + dDbVw_Report(sp28, sp24 + (sp1C * 18), " EndZ %06f", g_env_light.mFogFar); + + dDbVw_Report(sp28, sp24 + (sp1C * 21), "Time Change :"); + + switch (param_2) { + case 0: + dDbVw_Report(sp28 + (sp20 * 16), sp24 + (sp1C * 21), "ASA"); + break; + case 1: + dDbVw_Report(sp28 + (sp20 * 16), sp24 + (sp1C * 21), "HIRU"); + break; + case 2: + dDbVw_Report(sp28 + (sp20 * 16), sp24 + (sp1C * 21), "YUU"); + break; + case 3: + dDbVw_Report(sp28 + (sp20 * 16), sp24 + (sp1C * 21), "YORU"); + break; + } + + dDbVw_Report(sp28 + (sp20 * 21), sp24 + (sp1C * 21), "to"); + + switch (param_3) { + case 0: + dDbVw_Report(sp28 + (sp20 * 24), sp24 + (sp1C * 21), "ASA"); + break; + case 1: + dDbVw_Report(sp28 + (sp20 * 24), sp24 + (sp1C * 21), "HIRU"); + break; + case 2: + dDbVw_Report(sp28 + (sp20 * 24), sp24 + (sp1C * 21), "YUU"); + break; + case 3: + dDbVw_Report(sp28 + (sp20 * 24), sp24 + (sp1C * 21), "YORU"); + break; + } + + dDbVw_Report(sp28 + (sp20 * 29), sp24 + (sp1C * 21), "(%f%%)", param_0); + + if (param_1 < 0.0001f) { + dDbVw_Report(sp28, sp24 + (sp1C * 20), "Event Change : NO CHANGE"); + } else { + dDbVw_Report(sp28, sp24 + (sp1C * 20), "Event Change : CHANGE %03d%%", (int)(100.0f * param_1)); + } + } + + if (g_kankyoHIO.vrbox.m_displayVrboxTVColorSettings == 1) { + int var_r29 = 30; + int var_r28 = 80; + int sp10 = 11; + int var_r27 = 15; + + if (g_kankyoHIO.light.m_displayTVColorSettings == 1) { + var_r29 = 350; + } + + dDbVw_Report(var_r29, var_r28 + (var_r27 * 2), "Sky R %03d", g_env_light.vrbox_sky_col.r); + dDbVw_Report(var_r29, var_r28 + ((var_r27 * 4) - var_r27), " G %03d", g_env_light.vrbox_sky_col.g); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 4), " B %03d", g_env_light.vrbox_sky_col.b); + + dDbVw_Report(var_r29, var_r28 + (var_r27 + (var_r27 * 4)), "CloudU R %03d", g_env_light.vrbox_kumo_top_col.r); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 6), " G %03d", g_env_light.vrbox_kumo_top_col.g); + dDbVw_Report(var_r29, var_r28 + ((var_r27 * 8) - var_r27), " B %03d", g_env_light.vrbox_kumo_top_col.b); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 8), "Cloud A %03d", g_env_light.vrbox_kumo_top_col.a); + + dDbVw_Report(var_r29, var_r28 + (var_r27 + (var_r27 * 8)), "CloudD R %03d", g_env_light.vrbox_kumo_bottom_col.r); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 10), " G %03d", g_env_light.vrbox_kumo_bottom_col.g); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 11), " B %03d", g_env_light.vrbox_kumo_bottom_col.b); + + dDbVw_Report(var_r29, var_r28 + (var_r27 * 12), "CloudDDR %03d", g_env_light.vrbox_kumo_shadow_col.r); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 13), " G %03d", g_env_light.vrbox_kumo_shadow_col.g); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 14), " B %03d", g_env_light.vrbox_kumo_shadow_col.b); + + dDbVw_Report(var_r29, var_r28 + ((var_r27 * 16) - var_r27), "kasumiFR %03d", g_env_light.vrbox_kasumi_outer_col.r); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 16), " G %03d", g_env_light.vrbox_kasumi_outer_col.g); + dDbVw_Report(var_r29, var_r28 + (var_r27 + (var_r27 * 16)), " B %03d", g_env_light.vrbox_kasumi_outer_col.b); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 18), " B %03d", g_env_light.vrbox_kasumi_outer_col.a); + + dDbVw_Report(var_r29, var_r28 + (var_r27 * 19), "kasumiBR %03d", g_env_light.vrbox_kasumi_inner_col.r); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 20), " G %03d", g_env_light.vrbox_kasumi_inner_col.g); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 21), " B %03d", g_env_light.vrbox_kasumi_inner_col.b); + dDbVw_Report(var_r29, var_r28 + (var_r27 * 22), " A %03d", g_env_light.vrbox_kasumi_inner_col.a); + + if (g_kankyoHIO.light.m_displayTVColorSettings != 1) { + dDbVw_Report(var_r29, var_r28 + (var_r27 * 23), "Time Change :"); + + switch (param_2) { + case 0: + dDbVw_Report(var_r29 + (sp10 * 0x10), var_r28 + (var_r27 * 23), "ASA"); + break; + case 1: + dDbVw_Report(var_r29 + (sp10 * 0x10), var_r28 + (var_r27 * 23), "HIRU"); + break; + case 2: + dDbVw_Report(var_r29 + (sp10 * 0x10), var_r28 + (var_r27 * 23), "YUU"); + break; + case 3: + dDbVw_Report(var_r29 + (sp10 * 0x10), var_r28 + (var_r27 * 23), "YORU"); + break; + } + + dDbVw_Report(var_r29 + (sp10 * 0x15), var_r28 + (var_r27 * 23), "to"); + + switch (param_3) { + case 0: + dDbVw_Report(var_r29 + (sp10 * 0x18), var_r28 + (var_r27 * 23), "ASA"); + break; + case 1: + dDbVw_Report(var_r29 + (sp10 * 0x18), var_r28 + (var_r27 * 23), "HIRU"); + break; + case 2: + dDbVw_Report(var_r29 + (sp10 * 0x18), var_r28 + (var_r27 * 23), "YUU"); + break; + case 3: + dDbVw_Report(var_r29 + (sp10 * 0x18), var_r28 + (var_r27 * 23), "YORU"); + break; + } + + dDbVw_Report(var_r29 + (sp10 * 0x1D), var_r28 + (var_r27 * 23), "(%f%%)", param_0); + + if (param_1 < 0.0001f) { + dDbVw_Report(var_r29, var_r28 + (var_r27 * 22), "Event Change : NO CHANGE"); + } else { + dDbVw_Report(var_r29, var_r28 + (var_r27 * 22), "Event Change : CHANGE %03d%%", (int)(100.0f * param_1)); + } + } + } + + if (g_kankyoHIO.vrbox.field_0xe >= 0) { + switch (g_kankyoHIO.vrbox.field_0xe) { + case 0: + g_env_light.vrbox_sky_col.r = g_env_light.fog_col.r; + g_env_light.vrbox_sky_col.g = g_env_light.fog_col.g; + g_env_light.vrbox_sky_col.b = g_env_light.fog_col.b; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + add_update_proc((u8*)&g_kankyoHIO.vrbox.field_0xe, &g_env_light.vrbox_sky_col.r, &g_env_light.vrbox_sky_col.g, &g_env_light.vrbox_sky_col.b); + } + + g_kankyoHIO.vrbox.field_0xe = -1; + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } + + if (g_kankyoHIO.vrbox.field_0xf >= 0) { + switch (g_kankyoHIO.vrbox.field_0xf) { + case 0: + g_env_light.vrbox_kumo_top_col.r = g_env_light.fog_col.r; + g_env_light.vrbox_kumo_top_col.g = g_env_light.fog_col.g; + g_env_light.vrbox_kumo_top_col.b = g_env_light.fog_col.b; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + add_update_proc((u8*)&g_kankyoHIO.vrbox.field_0xf, &g_env_light.vrbox_kumo_top_col.r, &g_env_light.vrbox_kumo_top_col.g, &g_env_light.vrbox_kumo_top_col.b); + } + + g_kankyoHIO.vrbox.field_0xf = -1; + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } + + if (g_kankyoHIO.vrbox.field_0x10 >= 0) { + switch (g_kankyoHIO.vrbox.field_0x10) { + case 0: + g_env_light.vrbox_kumo_bottom_col.r = g_env_light.fog_col.r; + g_env_light.vrbox_kumo_bottom_col.g = g_env_light.fog_col.g; + g_env_light.vrbox_kumo_bottom_col.b = g_env_light.fog_col.b; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + add_update_proc((u8*)&g_kankyoHIO.vrbox.field_0x10, &g_env_light.vrbox_kumo_bottom_col.r, &g_env_light.vrbox_kumo_bottom_col.g, &g_env_light.vrbox_kumo_bottom_col.b); + } + + g_kankyoHIO.vrbox.field_0x10 = -1; + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } + + if (g_kankyoHIO.vrbox.field_0x11 >= 0) { + switch (g_kankyoHIO.vrbox.field_0x11) { + case 0: + g_env_light.vrbox_kumo_shadow_col.r = g_env_light.fog_col.r; + g_env_light.vrbox_kumo_shadow_col.g = g_env_light.fog_col.g; + g_env_light.vrbox_kumo_shadow_col.b = g_env_light.fog_col.b; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + add_update_proc((u8*)&g_kankyoHIO.vrbox.field_0x11, &g_env_light.vrbox_kumo_shadow_col.r, &g_env_light.vrbox_kumo_shadow_col.g, &g_env_light.vrbox_kumo_shadow_col.b); + } + + g_kankyoHIO.vrbox.field_0x11 = -1; + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } + + if (g_kankyoHIO.vrbox.field_0x12 >= 0) { + switch (g_kankyoHIO.vrbox.field_0x12) { + case 0: + g_env_light.vrbox_kasumi_outer_col.r = g_env_light.fog_col.r; + g_env_light.vrbox_kasumi_outer_col.g = g_env_light.fog_col.g; + g_env_light.vrbox_kasumi_outer_col.b = g_env_light.fog_col.b; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + add_update_proc((u8*)&g_kankyoHIO.vrbox.field_0x12, &g_env_light.vrbox_kasumi_outer_col.r, &g_env_light.vrbox_kasumi_outer_col.g, &g_env_light.vrbox_kasumi_outer_col.b); + } + + g_kankyoHIO.vrbox.field_0x12 = -1; + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } + + if (g_kankyoHIO.vrbox.field_0x13 >= 0) { + switch (g_kankyoHIO.vrbox.field_0x13) { + case 0: + g_env_light.vrbox_kasumi_inner_col.r = g_env_light.fog_col.r; + g_env_light.vrbox_kasumi_inner_col.g = g_env_light.fog_col.g; + g_env_light.vrbox_kasumi_inner_col.b = g_env_light.fog_col.b; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + add_update_proc((u8*)&g_kankyoHIO.vrbox.field_0x13, &g_env_light.vrbox_kasumi_inner_col.r, &g_env_light.vrbox_kasumi_inner_col.g, &g_env_light.vrbox_kasumi_inner_col.b); + } + + g_kankyoHIO.vrbox.field_0x13 = -1; + g_kankyoHIO.vrbox.dKankyo_vrboxHIOInfoUpDateF(); + } + + if (g_kankyoHIO.bloom.field_0x5 != 0) { + dDbVw_Report(20, 100, "sikii %d", mDoGph_gInf_c::getBloom()->getPoint()); + dDbVw_Report(20, 116, "b_haba %d", mDoGph_gInf_c::getBloom()->getBlureSize()); + dDbVw_Report(20, 132, "b_kosa %d", mDoGph_gInf_c::getBloom()->getBlureRatio()); + + GXColor spC; + spC = *mDoGph_gInf_c::getBloom()->getBlendColor(); + dDbVw_Report(20, 148, "kosa r %d", spC.r); + dDbVw_Report(20, 164, " g %d", spC.g); + dDbVw_Report(20, 180, " b %d", spC.b); + dDbVw_Report(20, 196, "moto A %d", spC.a); + + spC = *mDoGph_gInf_c::getBloom()->getMonoColor(); + dDbVw_Report(20, 212, "mono r %d", spC.r); + dDbVw_Report(20, 228, " g %d", spC.g); + dDbVw_Report(20, 244, " b %d", spC.b); + dDbVw_Report(20, 260, " A %d", spC.a); + } +} + +void dKydb_HIO_debug_Wind() { + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + camera_class* camera = dComIfGp_getCamera(0); + + f32 substick_x = mDoCPd_c::getSubStickX(PAD_3); + f32 substick_y = mDoCPd_c::getSubStickY(PAD_3); + f32 stick_x = mDoCPd_c::getStickX3D(PAD_3); + f32 stick_y = mDoCPd_c::getStickY(PAD_3); + cXyz wind_vec; + + g_env_light.global_wind_influence.pow += 0.01f * substick_y; + if (g_env_light.global_wind_influence.pow > 1.0f) { + g_env_light.global_wind_influence.pow = 1.0f; + } else if (g_env_light.global_wind_influence.pow < 0.0f) { + g_env_light.global_wind_influence.pow = 0.0f; + } + + g_kankyoHIO.light.field_0x5e -= 400.0f * stick_x; + g_kankyoHIO.light.field_0x5c += 400.0f * stick_y; + + s16 temp_r31 = g_kankyoHIO.light.field_0x5c; + s16 temp_r30 = g_kankyoHIO.light.field_0x5e; + wind_vec.x = cM_scos(temp_r31) * cM_scos(temp_r30); + wind_vec.y = cM_ssin(temp_r31); + wind_vec.z = cM_scos(temp_r31) * cM_ssin(temp_r30); + + g_env_light.global_wind_influence.vec = wind_vec; + + if (mDoCPd_c::getHoldA(PAD_3)) { + JUTReport(40, 200, "MAIN STICK : POSITION MOVE LR-Yangle UD-Xangle"); + JUTReport(40, 240, "SUB STICK UD : POWER"); + JUTReport(40, 280, "B BUTTON : TEST DISP OFF"); + + dKy_actor_addcol_amb_set(-0xFF, -0xFF, -0xFF, 1.0f); + dKy_bg_addcol_amb_set(-0xFF, -0xFF, -0xFF, 1.0f); + } else { + dKy_actor_addcol_amb_set(-0xFF, -0xFF, -0xFF, 0.0f); + dKy_bg_addcol_amb_set(-0xFF, -0xFF, -0xFF, 0.0f); + } +} + +void dKydb_HIO_debug_draw() { + csXyz rot; + cXyz pos; + cXyz size; + + camera_class* camera = dComIfGp_getCamera(0); + dKy_set_eyevect_calc2(camera, &pos, 200.0f, 200.0f); + + s16 var_r30 = g_kankyoHIO.light.field_0x5c; + s16 var_r29 = g_kankyoHIO.light.field_0x5e; + + size.x = 2.0f; + size.y = 2.0f; + size.z = 150.0f; + + rot.x = -var_r30; + rot.y = -var_r29 + 0x4000; + rot.z = 0; + + static const GXColor c2 = {0xFF, 0xFF, 0x00, 0x40}; + dDbVw_drawCubeXlu(pos, size, rot, c2); +} + +// NONMATCHING - stack register +void dKydb_HIO_winddebug_draw() { + cXyz size; + csXyz rot; + camera_class* temp_r31 = dComIfGp_getCamera(0); + cXyz pos; + + if (!mDoCPd_c::getHoldB(PAD_3)) { + JUTReport(120, 400, "power=[ %f ]", g_env_light.global_wind_influence.pow); + JUTReport(100, 420, "HELP - A BUTTON TESTDISP OFF - B BUTTON"); + dKy_set_eyevect_calc2(temp_r31, &pos, 500.0f, 500.0f); + + s16 var_r30 = g_kankyoHIO.light.field_0x5c; + s16 var_r29 = g_kankyoHIO.light.field_0x5e; + + rot.x = -var_r30; + rot.y = -var_r29 + 0x4000; + rot.z = 0; + + size.x = 20.0f * g_env_light.global_wind_influence.pow; + size.y = 10.0f * g_env_light.global_wind_influence.pow; + size.z = 1000.0f * g_env_light.global_wind_influence.pow; + + static const GXColor c2 = {0x00, 0x00, 0xFF, 0x50}; + dDbVw_drawCubeXlu(pos, size, rot, c2); + } +} + +// NONMATCHING - stack register +void dKydb_winddisp_draw() { + cXyz size; + csXyz rot; + cXyz pos; + + camera_class* camera = dComIfGp_getCamera(0); + dKy_set_eyevect_calc2(camera, &pos, 200.0f, 200.0f); + + if (g_kankyoHIO.wind.display_wind_dir == TRUE) { + f32 temp_f31 = g_env_light.global_wind_influence.vec.x; + f32 temp_f29 = g_env_light.global_wind_influence.vec.y; + f32 temp_f30 = g_env_light.global_wind_influence.vec.z; + + f32 temp_f28 = JMAFastSqrt(SQUARE(temp_f31) + SQUARE(temp_f30)); + s16 temp_r30 = cM_atan2s(temp_f31, temp_f30); + s16 var_r31 = cM_atan2s(temp_f28, temp_f29); + + rot.x = 16384.0f + var_r31; + rot.y = (s16)temp_r30; + rot.z = 0; + + size.x = 20.0f * g_env_light.global_wind_influence.pow; + size.y = 10.0f * g_env_light.global_wind_influence.pow; + size.z = 1000.0f * g_env_light.global_wind_influence.pow; + + static const GXColor c2 = {0xFF, 0x80, 0x80, 0x80}; + dDbVw_drawCubeXlu(pos, size, rot, c2); + + dDbVw_Report(10, 410, "WIND x[%f]y[%f]z[%f]pow[%f]", + g_env_light.global_wind_influence.vec.x, g_env_light.global_wind_influence.vec.y, g_env_light.global_wind_influence.vec.z, g_env_light.global_wind_influence.pow); + } +} + +void dKydb_timedisp() { + if (g_kankyoHIO.navy.display_save_location) { + dDbVw_Report(20, 16, "ALWAYS SavMem STAGE[%s] Room[%d] Lp[%d]", + g_dComIfG_gameInfo.info.getPlayer().getPlayerReturnPlace().getName(), + g_dComIfG_gameInfo.info.getPlayer().getPlayerReturnPlace().getRoomNo(), + g_dComIfG_gameInfo.info.getPlayer().getPlayerReturnPlace().getPlayerStatus()); + } + + f32 time = g_env_light.getDaytime(); + f32 hour = time / 15.0f; + + f32 var_f30 = ((int)(time * 1000000.0f) % 15000000) / 1000000.0f; + f32 min = var_f30 / 15.0f * 60.0f; + + var_f30 = ((int)(time * 1000000.0f) % 250000) / 1000000.0f; + f32 sec = var_f30 / 0.25f * 60.0f; + + dDbVw_Report(0x1E, 0x41, "TIME %02d:%02d:%02d", (int)hour, (int)min, (int)sec); + + if (strcmp(dComIfGp_getStartStageName(), "F_SP116") == 0) { + time = g_env_light.getDarkDaytime(); + hour = time / 15.0f; + + var_f30 = ((int)(time * 1000000.0f) % 15000000) / 1000000.0f; + min = var_f30 / 15.0f * 60.0f; + + var_f30 = ((int)(time * 1000000.0f) % 250000) / 1000000.0f; + sec = var_f30 / 0.25f * 60.0f; + + dDbVw_Report(0x1E, 0x54, "S_TM %02d:%02d:%02d", (int)hour, (int)min, (int)sec); + } + + static const char* weekString[] = { + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sut", + }; + + dDbVw_Report(0xDC, 0x41, "%s", weekString[g_env_light.mDate % 7]); + dDbVw_Report(0x12C, 0x2D, "%s", dComIfGp_getStartStageName()); + dDbVw_Report(0x12C, 0x41, "Rm %d Lr %d Tw %d", dComIfGp_roomControl_getStayNo(), dComIfG_play_c::getLayerNo(0), dComIfGp_getStartStageDarkArea()); + + if (dComIfGs_Grass_hide_Check()) { + dDbVw_Report(0x12C, 0x55, "orz"); + } + + if (g_env_light.light_mask_type != 0) { + dDbVw_Report(0x12C, 0x1C, "LM[%d]", g_env_light.light_mask_type); + } + + if (!dKy_camera_water_in_status_check()) { + switch (g_env_light.light_size) { + case 0: + dDbVw_Report(0x190, 0x1C, "LS[S]"); + break; + case 1: + dDbVw_Report(0x190, 0x1C, "LS[M]"); + break; + case 2: + dDbVw_Report(0x190, 0x1C, "LS[L]"); + break; + case 3: + dDbVw_Report(0x190, 0x1C, "LS[LL]"); + break; + } + } + + if (g_presetHIO.field_0x2716 != 0) { + dDbVw_Report(0x1E, 0x55, "JYOKYO FILE YOMIKOMI SIPPAI!"); + } + + int var_r31 = 0x55; + if ((g_kankyoHIO.navy.field_0x22a & 1)) { + dDbVw_Report(0x1E, var_r31, "BMD Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 2)) { + dDbVw_Report(0x1E, var_r31, "BMDM Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 4)) { + dDbVw_Report(0x1E, var_r31, "BMDC Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 8)) { + dDbVw_Report(0x1E, var_r31, "BMDS Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x10)) { + dDbVw_Report(0x1E, var_r31, "BSMD Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x20)) { + dDbVw_Report(0x1E, var_r31, "BDL Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x40)) { + dDbVw_Report(0x1E, var_r31, "BDLL Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x80)) { + dDbVw_Report(0x1E, var_r31, "BDLM Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x100)) { + dDbVw_Report(0x1E, var_r31, "BMDP Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x200)) { + dDbVw_Report(0x1E, var_r31, "BDLI Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x400)) { + dDbVw_Report(0x1E, var_r31, "BDLC Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x800)) { + dDbVw_Report(0x1E, var_r31, "BMDA Hakken!! Mada Irimasuka-?"); + var_r31 += 0x14; + } + + if ((g_kankyoHIO.navy.field_0x22a & 0x1000)) { + // unused + } +} + +void dKydb_efplight_monitor() { + int i; + for (i = 0; i < 5; i++) { + if (g_env_light.efplight[i] != NULL) { + OSReport("\n[%d]pos[%f][%f][%f]", i, g_env_light.efplight[i]->mPosition.x, g_env_light.efplight[i]->mPosition.y, g_env_light.efplight[i]->mPosition.z); + } + } +} + +void dKydb_plight_monitor() { + OSReport("\nNow PLIGHT\n"); + + int i; + for (i = 0; i < 100; i++) { + if (g_env_light.pointlight[i] != NULL) { + OSReport("[%d]", i); + if (g_kankyoHIO.point_light_monitor == 2) { + OSReport("pos x[%f]y[%f]z[%f]pow[%f]\n", g_env_light.pointlight[i]->mPosition.x, g_env_light.pointlight[i]->mPosition.y, g_env_light.pointlight[i]->mPosition.z, g_env_light.pointlight[i]->mPow); + } + } + } +} + +void dKydb_dungeonlight_draw() { + cXyz proj; + camera_class* camera = dComIfGp_getCamera(0); + int i; + fopAc_ac_c* player = dComIfGp_getPlayer(0); + + if (g_kankyoHIO.dungeonLight.displayDebugSphere == TRUE) { + for (i = 0; i < g_kankyoHIO.dungeonLight.usedLights; i++) { + cXyz size; + csXyz rot; + cXyz sp34; + cXyz pos; + cXyz sp1C; + + f32 var_f31 = g_env_light.dungeonlight[i].mAngleX / RAD_TO_DEG(1); + f32 var_f30 = -(g_env_light.dungeonlight[i].mAngleY / RAD_TO_DEG(1)); + + rot.x = 65536.0f * (var_f31 / (M_PI * 2)); + rot.y = (65536.0f * (var_f30 / (M_PI * 2))) - 16384.0f; + rot.z = 0; + + size.x = 30.0f; + size.y = 20.0f; + size.z = 50.0f; + + GXColor color; + color = g_env_light.dungeonlight[i].mColor; + color.a = 0xC8; + + if (g_env_light.dungeonlight[i].mAngleAttenuation == 0) { + dDbVw_drawSphereXlu(g_env_light.dungeonlight[i].mPosition, 60.0f, color, 1); + } else { + color.r = 0xFF; + color.g = 0xFF; + color.b = 0xFF; + color.a = 0xFF; + dDbVw_drawCubeXlu(g_env_light.dungeonlight[i].mPosition, size, rot, color); + + pos.x = -(cM_scos(rot.x) * cM_ssin(rot.y)); + pos.y = cM_ssin(rot.x); + pos.z = -(cM_scos(rot.x) * cM_scos(rot.y)); + + pos.x = (8000.0f * pos.x) + g_env_light.dungeonlight[i].mPosition.x; + pos.y = (8000.0f * pos.y) + g_env_light.dungeonlight[i].mPosition.y; + pos.z = (8000.0f * pos.z) + g_env_light.dungeonlight[i].mPosition.z; + + size.x = 3.0f; + size.y = 3.0f; + size.z = 8000.0f; + dDbVw_drawCubeXlu(pos, size, rot, color); + + color.r = 0xFF; + color.g = 0; + color.b = 0xFF; + color.a = 0xFF; + + size.x = 280.0f; + size.y = 2.0f; + size.z = 2.0f; + dDbVw_drawCubeXlu(g_env_light.dungeonlight[i].mPosition, size, rot, color); + } + + color.r = 0; + color.g = 0xFF; + color.b = 0; + color.a = 0xFF; + + size.x = 2.0f; + size.y = 2.0f; + size.z = 280.0f; + + rot.x = 0x4000; + rot.y = 0; + rot.z = 0; + dDbVw_drawCubeXlu(g_env_light.dungeonlight[i].mPosition, size, rot, color); + + color.r = 0xFF; + color.g = 0; + color.b = 0; + color.a = 0xFF; + + size.x = 1.0f; + size.y = 1.0f; + size.z = 140.0f; + + rot.x = 0; + rot.y = 0x4000; + dDbVw_drawCubeXlu(g_env_light.dungeonlight[i].mPosition, size, rot, color); + + color.r = 0; + color.g = 0; + color.b = 0xFF; + color.a = 0xFF; + + rot.x = 0; + rot.y = 0; + dDbVw_drawCubeXlu(g_env_light.dungeonlight[i].mPosition, size, rot, color); + + color.r = 0; + color.g = 0xFF; + color.b = 0; + color.a = 0xFF; + + size.x = 1.0f; + size.y = 1.0f; + size.z = 280.0f; + + rot.x = 0x4000; + rot.y = 0; + rot.z = 0; + dDbVw_drawCubeXlu(player->current.pos, size, rot, color); + + color.r = 0xFF; + color.g = 0; + color.b = 0; + color.a = 0xFF; + + rot.x = 0; + rot.y = 0x4000; + dDbVw_drawCubeXlu(player->current.pos, size, rot, color); + + color.r = 0; + color.g = 0; + color.b = 0xFF; + color.a = 0xFF; + + rot.x = 0; + rot.y = 0; + dDbVw_drawCubeXlu(player->current.pos, size, rot, color); + + mDoLib_project(&g_env_light.dungeonlight[i].mPosition, &proj); + if (proj.x > 30.0f) { + proj.x -= 30.0f; + } + + if (proj.x < 0.0f || proj.x > 640.0f || proj.y < 0.0f || proj.y > 456.0f) { + if (proj.x < 0.0f) { + proj.x = 10.0f; + } + if (proj.x > 640.0f) { + proj.x = 560.0f; + } + if (proj.y < 0.0f) { + proj.y = 40.0f; + } + if (proj.y > 456.0f) { + proj.y = 404.0f; + } + + dDbVw_Report((int)proj.x, (int)proj.y, "OUT %d", i + 2); + } else { + dDbVw_Report((int)proj.x, (int)proj.y, "LIGHT %d", i + 2); + } + } + } + + for (i = 0; i < 6; i++) { + if (g_kankyoHIO.dungeonLight.field_0x8 != 0) { + if ((g_kankyoHIO.dungeonLight.field_0x8 - 1) == i) { + g_env_light.dungeonlight[i].mPosition = player->current.pos; + } else if (g_kankyoHIO.dungeonLight.field_0x8 == i + 160) { + g_env_light.dungeonlight[i].mPosition = camera->lookat.center; + } + } + } + + if (g_kankyoHIO.dungeonLight.field_0x8 >= 10) { + fopAc_ac_c* sp8 = dComIfGp_getPlayer(0); + if (g_kankyoHIO.dungeonLight.usedLights > g_kankyoHIO.dungeonLight.field_0x8 - 10) { + sp8->current.pos = g_env_light.dungeonlight[g_kankyoHIO.dungeonLight.field_0x8 - 10].mPosition; + } + } + + if (g_kankyoHIO.dungeonLight.field_0x8 != 0) { + g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF(); + g_kankyoHIO.dungeonLight.field_0x8 = 0; + } +} diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index 9bd88f053d..298d782e56 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -56,7 +56,7 @@ static void dKy_set_eyevect_calc(camera_class* i_camera, Vec* o_out, f32 param_2 /* 8005B830-8005B92C 056170 00FC+00 6/6 0/0 0/0 .text * dKy_set_eyevect_calc2__FP12camera_classP3Vecff */ -static void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* o_out, f32 param_2, f32 param_3) { +void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* o_out, f32 param_2, f32 param_3) { cXyz calc; DOUBLE_POS pos; @@ -1890,10 +1890,10 @@ void vrkumo_move() { if (filelist != NULL) { sp2C = dStage_FileList_dt_SeaLevel(filelist); #ifdef DEBUG - if (g_kankyoHIO.field_0x0b4) { - sp2C = g_kankyoHIO.field_0x0b8; + if (g_kankyoHIO.vrbox.field_0x14) { + sp2C = g_kankyoHIO.vrbox.m_horizonHeight; } else { - g_kankyoHIO.field_0x0b8 = sp2C; + g_kankyoHIO.vrbox.m_horizonHeight = sp2C; } #endif } @@ -4662,10 +4662,10 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) { } #ifdef DEBUG - if (g_kankyoHIO.field_0x0b4) { - sp70 = g_kankyoHIO.field_0x0b8; + if (g_kankyoHIO.vrbox.field_0x14) { + sp70 = g_kankyoHIO.vrbox.m_horizonHeight; } else { - g_kankyoHIO.field_0x0b8 = sp70; + g_kankyoHIO.vrbox.m_horizonHeight = sp70; } #endif @@ -4752,8 +4752,8 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) { static f32 howa_loop_cnt = 0.0f; #ifdef DEBUG - spAC = g_kankyoHIO.field_0x3f4; - spA8 = g_kankyoHIO.field_0x3f8; + spAC = g_kankyoHIO.navy.cloud_sunny_size; + spA8 = g_kankyoHIO.navy.cloud_cloudy_size; #else spAC = 0.6f; spA8 = 0.84f; diff --git a/src/d/d_s_play.cpp b/src/d/d_s_play.cpp index 92bd1ccbc7..bced5bfc1f 100644 --- a/src/d/d_s_play.cpp +++ b/src/d/d_s_play.cpp @@ -362,11 +362,10 @@ static int phase_01(dScnPly_c* i_this) { mDoAud_setInDarkness(false); } - s8 start_room = dComIfGp_getStartStageRoomNo(); - int layer = dComIfG_play_c::getLayerNo_common(dComIfGp_getStartStageName(), start_room, - dComIfGp_getStartStageLayer()); - - mDoAud_setSceneName(dComIfGp_getStartStageName(), start_room, layer); + mDoAud_setSceneName(dComIfGp_getStartStageName(), + dComIfGp_getStartStageRoomNo(), + dComIfG_play_c::getLayerNo_common(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), + dComIfGp_getStartStageLayer())); if (!mDoAud_load1stDynamicWave()) { return cPhs_INIT_e; diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 1773e33767..80d5a346d3 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -2908,6 +2908,17 @@ void mDoExt_3DlineMatSortPacket::draw() { } #ifdef DEBUG +mDoExt_cube8pPacket::mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 8; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 8); + mColor = i_color; +} + void drawCube(MtxP mtx, cXyz* pos, const GXColor& color) { GXSetArray(GX_VA_POS, pos, sizeof(cXyz)); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); @@ -2950,6 +2961,17 @@ void drawCube(MtxP mtx, cXyz* pos, const GXColor& color) { GXEnd(); } +void mDoExt_cube8pPacket::draw() { + drawCube(j3dSys.getViewMtx(), mPoints, mColor); +} + +mDoExt_cubePacket::mDoExt_cubePacket(cXyz& i_position, cXyz& i_size, csXyz& i_angle, const GXColor& i_color) { + mPosition = i_position; + mSize = i_size; + mAngle = i_angle; + mColor = i_color; +} + void mDoExt_cubePacket::draw() { static cXyz l_pos[8] = { cXyz(-1.0f, 1.0f, -1.0f), cXyz(1.0f, 1.0f, -1.0f), cXyz(-1.0f, 1.0f, 1.0f), @@ -2964,6 +2986,389 @@ void mDoExt_cubePacket::draw() { drawCube(mDoMtx_stack_c::get(), l_pos, mColor); } +mDoExt_quadPacket::mDoExt_quadPacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 4; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 4); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_quadPacket::draw() { + GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, + GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition1x8(0); + GXPosition1x8(1); + GXPosition1x8(2); + GXPosition1x8(3); + GXEnd(); +} + +mDoExt_trianglePacket::mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 3; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 3); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_trianglePacket::draw() { + j3dSys.reinitGX(); + + GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZCompLoc(GX_ENABLE); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetNumIndStages(0); + + GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3); + GXPosition1x8(0); + GXPosition1x8(1); + GXPosition1x8(2); + GXEnd(); + + J3DShape::resetVcdVatCache(); +} + +mDoExt_linePacket::mDoExt_linePacket(cXyz& i_start, cXyz& i_end, const GXColor& i_color, u8 i_clipZ, u8 i_width) { + mStart = i_start; + mEnd = i_end; + mColor = i_color; + mClipZ = i_clipZ; + mWidth = i_width; +} + +void mDoExt_linePacket::draw() { + j3dSys.reinitGX(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZCompLoc(GX_ENABLE); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetNumIndStages(0); + GXSetLineWidth(mWidth, GX_TO_ZERO); + + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition3f32(mStart.x, mStart.y, mStart.z); + GXPosition3f32(mEnd.x, mEnd.y, mEnd.z); + GXEnd(); + + J3DShape::resetVcdVatCache(); +} + +mDoExt_ArrowPacket::mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mStart = i_position; + mEnd = param_1; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_ArrowPacket::draw() { + Mtx sp28; + cXyz sp18; + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetLineWidth(mLineWidth, GX_TO_ZERO); + + sp18 = mEnd - mStart; + MtxTrans(mStart.x, mStart.y, mStart.z, 0); + cMtx_YrotM(*calc_mtx, sp18.atan2sX_Z()); + cMtx_XrotM(*calc_mtx, cM_atan2s(JMAFastSqrt(SQUARE(sp18.x) + SQUARE(sp18.z)), sp18.y)); + cMtx_concat(j3dSys.getViewMtx(), *calc_mtx, sp28); + + GXLoadPosMtxImm(sp28, 0); + GXSetCurrentMtx(0); + + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXPosition3f32(0.0f, sp18.abs(), 0.0f); + GXEnd(); + + f32 var_f29 = sp18.abs(); + f32 var_f31 = var_f29 * 0.1f; + f32 var_f30 = var_f29 * 0.8f; + + GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); + GXPosition3f32(0.0f, var_f29, 0.0f); + GXPosition3f32(0.0f, var_f30, var_f31); + GXPosition3f32(var_f31, var_f30, 0.0f); + GXPosition3f32(0.0f, var_f30, -var_f31); + GXPosition3f32(-var_f31, var_f30, 0.0f); + GXPosition3f32(0.0f, var_f30, var_f31); + GXEnd(); +} + +mDoExt_pointPacket::mDoExt_pointPacket(cXyz& i_position, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mPosition = i_position; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_pointPacket::draw() { + j3dSys.reinitGX(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetPointSize(mLineWidth, GX_TO_ZERO); + + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + GXBegin(GX_POINTS, GX_VTXFMT0, 1); + GXPosition3f32(mPosition.x, mPosition.y, mPosition.z); + GXEnd(); + + j3dSys.reinitGX(); + J3DShape::resetVcdVatCache(); +} + +mDoExt_circlePacket::mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mPosition = i_position; + mRadius = i_radius; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_circlePacket::draw() { + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetLineWidth(mLineWidth, GX_TO_ZERO); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + cXyz sp38; + cXyz sp44; + int numEdges = 36; + sp38.y = sp44.y = mPosition.y; + + GXBegin(GX_LINES, GX_VTXFMT0, numEdges * 2); + for (int i = 0; i < numEdges; i++) { + sp38.x = cM_fcos((i * 6.2831855f) / numEdges) * mRadius; + sp38.z = cM_fsin((i * 6.2831855f) / numEdges) * mRadius; + + sp44.x = cM_fcos(((i + 1) * 6.2831855f) / numEdges) * mRadius; + sp44.z = cM_fsin(((i + 1) * 6.2831855f) / numEdges) * mRadius; + + sp38.x += mPosition.x; + sp38.z += mPosition.z; + sp44.x += mPosition.x; + sp44.z += mPosition.z; + GXPosition3f32(sp38.x, sp38.y, sp38.z); + GXPosition3f32(sp44.x, sp44.y, sp44.z); + } + GXEnd(); +} + +mDoExt_spherePacket::mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ) { + mPosition = i_position; + mSize = i_size; + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_spherePacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + mDoMtx_stack_c::copy(j3dSys.getViewMtx()); + mDoMtx_stack_c::transM(mPosition.x, mPosition.y, mPosition.z); + mDoMtx_stack_c::scaleM(mSize, mSize, mSize); + + GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); + mDoMtx_stack_c::inverseTranspose(); + + GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0); + GXSetCurrentMtx(0); + + GXDrawSphere(8, 8); +} + +mDoExt_cylinderPacket::mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ) { + mPosition = i_position; + mRadius = i_radius; + mHeight = i_height; + mColor = i_color; + mClipZ = i_clipZ; +} + void mDoExt_cylinderPacket::draw() { GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_NONE); @@ -2987,9 +3392,11 @@ void mDoExt_cylinderPacket::draw() { GXSetCullMode(GX_CULL_BACK); GXSetClipMode(GX_CLIP_ENABLE); + f32 var_f31 = mHeight * 0.5f; + mDoMtx_stack_c::copy(j3dSys.getViewMtx()); - mDoMtx_stack_c::transM(mPosition.x, mPosition.y + mHeight * 0.5f, mPosition.z); - mDoMtx_stack_c::scaleM(mRadius, mRadius * 0.5f, mRadius); + mDoMtx_stack_c::transM(mPosition.x, mPosition.y + var_f31, mPosition.z); + mDoMtx_stack_c::scaleM(mRadius, var_f31, mRadius); mDoMtx_stack_c::XrotM(0x4000); GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); @@ -2999,6 +3406,46 @@ void mDoExt_cylinderPacket::draw() { GXSetCurrentMtx(0); GXDrawCylinder(8); } + +mDoExt_cylinderMPacket::mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ) { + cMtx_copy(i_mtx, mMatrix); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_cylinderMPacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + cMtx_concat(j3dSys.getViewMtx(), mMatrix, mMatrix); + + GXLoadPosMtxImm(mMatrix, 0); + cMtx_inverseTranspose(mMatrix, mMatrix); + + GXLoadNrmMtxImm(mMatrix, 0); + GXSetCurrentMtx(0); + + GXDrawCylinder(8); +} #endif /* 80014804-8001494C 00F144 0148+00 3/3 0/0 0/0 .text diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 9d5842e370..da9f8e243e 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -24,6 +24,7 @@ #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h" #include "m_Do/m_Do_main.h" +#include "d/d_debug_viewer.h" /* 80007D9C-80007E44 0026DC 00A8+00 1/1 0/0 0/0 .text createTimg__FUsUsUl */ static ResTIMG* createTimg(u16 width, u16 height, u32 format) { @@ -265,6 +266,10 @@ void mDoGph_BlankingOFF() {} /* 80008424-80008450 002D64 002C+00 1/1 0/0 0/0 .text dScnPly_BeforeOfPaint__Fv */ static void dScnPly_BeforeOfPaint() { dComIfGd_reset(); + + #if DEBUG + dDbVw_deleteDrawPacketList(); + #endif } /* 80008450-80008474 002D90 0024+00 0/0 1/0 0/0 .text mDoGph_BeforeOfDraw__Fv */