diff --git a/config/rel_slices.yml b/config/rel_slices.yml index b3c71abb..2d4ae23d 100644 --- a/config/rel_slices.yml +++ b/config/rel_slices.yml @@ -599,6 +599,11 @@ ac_train_window.c: .text: [0x804AC510, 0x804AD428] .rodata: [0x80645FA8, 0x80645FF8] .data: [0x8068F600, 0x8068F830] +ef_effect_control.c: + .text: [0x804CD474, 0x804CEC5C] + .rodata: [0x80646368, 0x806463C8] + .data: [0x8069BD10, 0x8069BFD0] + .bss: [0x812FE708, 0x81300BD0] ef_lamp_light.c: .text: [0x804CEC5C, 0x804CEF2C] .rodata: [0x806463C8, 0x806463D8] diff --git a/include/ef_effect_control.h b/include/ef_effect_control.h index 99124fef..97160b35 100644 --- a/include/ef_effect_control.h +++ b/include/ef_effect_control.h @@ -408,7 +408,7 @@ typedef struct effect_work_s { eEC_Effect_c effects[eEC_EFFECT_ACTIVE_MAX]; u8 effect_active_flags[eEC_EFFECT_ACTIVE_MAX]; Lights light_info; - int _24A8; + Light_list* light_list; } eEC_work_c; struct effect_control_s { diff --git a/include/m_kankyo.h b/include/m_kankyo.h index d901ed11..99e469ab 100644 --- a/include/m_kankyo.h +++ b/include/m_kankyo.h @@ -22,107 +22,107 @@ extern "C" { #define mEnv_WEATHER_TERM_NUM 20 #define mEnv_WIND_TERM_NUM 4u -#define mEnv_WIND_CHANGE_RATE (f32)(10*mTM_SECONDS_IN_MINUTE*60) // 60fps, 10 minutes +#define mEnv_WIND_CHANGE_RATE (f32)(10 * mTM_SECONDS_IN_MINUTE * 60) // 60fps, 10 minutes enum weather { - mEnv_WEATHER_CLEAR, - mEnv_WEATHER_RAIN, - mEnv_WEATHER_SNOW, - mEnv_WEATHER_SAKURA, - mEnv_WEATHER_LEAVES, - - mEnv_WEATHER_NUM + mEnv_WEATHER_CLEAR, + mEnv_WEATHER_RAIN, + mEnv_WEATHER_SNOW, + mEnv_WEATHER_SAKURA, + mEnv_WEATHER_LEAVES, + + mEnv_WEATHER_NUM }; enum weather_intensity { - mEnv_WEATHER_INTENSITY_NONE, - mEnv_WEATHER_INTENSITY_LIGHT, - mEnv_WEATHER_INTENSITY_NORMAL, - mEnv_WEATHER_INTENSITY_HEAVY, + mEnv_WEATHER_INTENSITY_NONE, + mEnv_WEATHER_INTENSITY_LIGHT, + mEnv_WEATHER_INTENSITY_NORMAL, + mEnv_WEATHER_INTENSITY_HEAVY, - mEnv_WEATHER_INTENSITY_NUM, + mEnv_WEATHER_INTENSITY_NUM, }; enum { - mEnv_LIGHT_TYPE_PLAYER, - mEnv_LIGHT_TYPE_TENT, - mEnv_LIGHT_TYPE_LIGHTHOUSE, + mEnv_LIGHT_TYPE_PLAYER, + mEnv_LIGHT_TYPE_TENT, + mEnv_LIGHT_TYPE_LIGHTHOUSE, - mEnv_LIGHT_TYPE_NUM + mEnv_LIGHT_TYPE_NUM }; enum { - mEnv_SWITCH_STATUS_ON, - mEnv_SWITCH_STATUS_OFF, - mEnv_SWITCH_STATUS_TURNING_OFF, - mEnv_SWITCH_STATUS_TURNING_ON, + mEnv_SWITCH_STATUS_ON, + mEnv_SWITCH_STATUS_OFF, + mEnv_SWITCH_STATUS_TURNING_OFF, + mEnv_SWITCH_STATUS_TURNING_ON, - mEnv_SWITCH_STATUS_NUM + mEnv_SWITCH_STATUS_NUM }; enum { - mEnv_WIND_STATE_STEADY, - mEnv_WIND_STATE_FAST, - mEnv_WIND_STATE_SLOW, - mEnv_WIND_STATE_REDUCING, - - mEnv_WIND_STATE_NUM + mEnv_WIND_STATE_STEADY, + mEnv_WIND_STATE_FAST, + mEnv_WIND_STATE_SLOW, + mEnv_WIND_STATE_REDUCING, + + mEnv_WIND_STATE_NUM }; #define mEnv_SAVE_GET_WEATHER_TYPE(w) (((w) & 0xF0) >> 4) #define mEnv_SAVE_GET_WEATHER_INTENSITY(w) ((w) & 0xF) typedef struct base_light_s { - u8 ambient_color[3]; - s8 sun_dir[3]; - u8 sun_color[3]; - s8 moon_dir[3]; - u8 moon_color[3]; - u8 fog_color[3]; - s16 fog_near; - s16 fog_far; - u8 shadow_color[3]; - u8 room_color[3]; - u8 sun_color_window[3]; - u8 moon_color_window[3]; - u8 background_color[3]; + u8 ambient_color[3]; + s8 sun_dir[3]; + u8 sun_color[3]; + s8 moon_dir[3]; + u8 moon_color[3]; + u8 fog_color[3]; + s16 fog_near; + s16 fog_far; + u8 shadow_color[3]; + u8 room_color[3]; + u8 sun_color_window[3]; + u8 moon_color_window[3]; + u8 background_color[3]; } BaseLight; typedef struct add_light_info_s { - s16 ambient_color[3]; - s16 diffuse_color[3]; - s16 fog_color[3]; - s16 fog_near; - s16 fog_far; + s16 ambient_color[3]; + s16 diffuse_color[3]; + s16 fog_color[3]; + s16 fog_near; + s16 fog_far; } AddLightInfo; typedef void (*NATURE_PROC)(ACTOR*); typedef struct nature_s { - NATURE_PROC proc; - void* arg; + NATURE_PROC proc; + void* arg; } Nature; typedef struct kankyo_s { - /* 0x00 */ Lights sun_light; - /* 0x0E */ Lights moon_light; - /* 0x1C */ Lights* lamp_light; - /* 0x20 */ Lights point_light; - /* 0x30 */ int _30; - /* 0x34 */ u8 _34[0x78 - 0x34]; - /* 0x78 */ AddLightInfo add_light_info; /* extra values added to specific light parameters */ - /* 0x90 */ int _90; - /* 0x94 */ BaseLight base_light; - /* 0xBA */ u8 _BA[0xC0 - 0xBA]; - /* 0xC0 */ f32 shadow_pos; - /* 0xC4 */ u8 shadow_alpha; - /* 0xC5 */ u8 countdown_timer; - /* 0xC8 */ Nature nature; + /* 0x00 */ Lights sun_light; + /* 0x0E */ Lights moon_light; + /* 0x1C */ Lights* lamp_light; + /* 0x20 */ Lights point_light; + /* 0x30 */ int _30; + /* 0x34 */ u8 _34[0x78 - 0x34]; + /* 0x78 */ AddLightInfo add_light_info; /* extra values added to specific light parameters */ + /* 0x90 */ int _90; + /* 0x94 */ BaseLight base_light; + /* 0xBA */ u8 _BA[0xC0 - 0xBA]; + /* 0xC0 */ f32 shadow_pos; + /* 0xC4 */ u8 shadow_alpha; + /* 0xC5 */ u8 countdown_timer; + /* 0xC8 */ Nature nature; } Kankyo; extern void mEnv_regist_nature(Kankyo* kankyo, NATURE_PROC nature_proc, void* arg); extern int mEnv_unregist_nature(Kankyo* kankyo, NATURE_PROC nature_proc); -extern void Global_kankyo_ct(GAME_PLAY* play, Kankyo* kankyo); +extern void Global_kankyo_ct(GAME* game, Kankyo* kankyo); extern void mEnv_GetRoomPrimColor(u8* r, u8* g, u8* b, GAME_PLAY* play); extern void Global_kankyo_set_room_prim(GAME_PLAY* play); extern int mEnv_RequestChangeLightON(GAME_PLAY* play, int light_on_type, int play_sfx); diff --git a/include/m_lights.h b/include/m_lights.h index 98d2d20c..5279ba47 100644 --- a/include/m_lights.h +++ b/include/m_lights.h @@ -36,20 +36,19 @@ typedef struct lights_s { LightParams lights; } Lights; - typedef struct light_list { /* 0x0 */ Lights* info; /* 0x4 */ struct light_list* prev; /* 0x8 */ struct light_list* next; } Light_list; // size = 0xC -typedef struct light_buf_s{ +typedef struct light_buf_s { int current; int idx; Light_list lights[32]; } Light_buffer; -typedef struct lightsn_s{ +typedef struct lightsn_s { u8 diffuse_count; Ambient a; Light_new l[7]; @@ -60,7 +59,7 @@ typedef struct global_light_s { /* 0x4 */ u8 ambientColor[3]; /* 0x7 */ u8 fogColor[3]; /* 0xA */ s16 fogNear; - /* 0xC */ s16 fogFar; + /* 0xC */ s16 fogFar; } Global_light; // size = 0x10 typedef void (*light_point_proc)(LightsN*, LightParams*, xyz_t*); @@ -73,7 +72,7 @@ extern void LightsN_disp(LightsN* lights, GRAPH* graph); extern void LightsN_list_check(LightsN* lights, Light_list* node, xyz_t* pos); extern void Global_light_ct(Global_light* glight); extern LightsN* Global_light_read(Global_light* glight, GRAPH* graph); -extern Light_list* Global_light_list_new(GAME_PLAY*, Global_light* glight, Lights* light); +extern Light_list* Global_light_list_new(GAME* game, Global_light* glight, Lights* light); extern void Global_light_list_delete(Global_light* glight, Light_list* light); extern void Light_list_point_draw(GAME_PLAY* play); diff --git a/include/m_play.h b/include/m_play.h index bef0a01b..e07ca0b2 100644 --- a/include/m_play.h +++ b/include/m_play.h @@ -27,52 +27,52 @@ typedef void (*PLAY_WIPE_PROC)(GAME_PLAY*); /* sizeof(struct game_play_s) == 0x2600 */ struct game_play_s { - /* 0x0000 */ GAME game; - // TODO: finish - /* 0x00E0 */ s16 scene_id; - /* 0x00E4 */ mFI_block_tbl_c block_table; - /* 0x00F4 */ mFI_block_tbl_c last_block_table; - /* 0x0104 */ u8 _0104[0x010C - 0x0104]; - /* 0x010C */ Scene_Word_u* current_scene_data; - /* 0x0110 */ Object_Exchange_c object_exchange; - /* 0x1A68 */ View view; - /* 0x1B88 */ Camera2 camera; - /* 0x1CC0 */ Kankyo kankyo; - /* 0x1D90 */ Global_light global_light; - /* 0x1DA0 */ pause_t pause; - /* 0x1DA8 */ Actor_info actor_info; - /* 0x1DEC */ Submenu submenu; - /* 0x1FA4 */ s8 submenu_ground_idx; - /* 0x1FA8 */ char* submenu_ground_tex[2]; - /* 0x1FB0 */ char* submenu_ground_pallet[2]; - /* 0x1FB8 */ PreRender prerender; - /* 0x2000 */ Door_info_c door_info; - /* 0x2008 */ int next_scene_no; - /* 0x200C */ MtxF projection_matrix; - /* 0x204C */ MtxF billboard_matrix; - /* 0x208C */ Mtx* _208C; - /* 0x2090 */ u32 game_frame; - /* 0x2094 */ u8 _2094; - /* 0x2095 */ u8 actor_data_num; - /* 0x2096 */ u8 ctrl_actor_data_num; - /* 0x2097 */ u8 obj_bank_data_num; - /* 0x2098 */ Actor_data* player_data; - /* 0x209C */ Actor_data* actor_data; - /* 0x20A0 */ s16* ctrl_actor_data; - /* 0x20A4 */ s16* obj_bank_data; - /* 0x20A8 */ int _20A8; - /* 0x20AC */ Event_c event; - /* 0x20D0 */ u8 fb_fade_type; - /* 0x20D1 */ u8 fb_wipe_type; - /* 0x20D2 */ u8 fb_mode; - /* 0x20D3 */ u8 fb_wipe_mode; - /* 0x20D8 */ fbdemo_wipe fbdemo_wipe; - /* 0x2318 */ fbdemo_fade color_fade; - /* 0x2328 */ CollisionCheck_c collision_check; - /* 0x23F8 */ DRAW_CHK_PROC draw_chk_proc; // only used by mikanbox actor - /* 0x23FC */ rgba8888 fade_color_value; - /* 0x2400 */ Scene_data_status_c* scene_data_status; - /* 0x2404 */ u8 _2400[0x2600 - 0x2404]; + /* 0x0000 */ GAME game; + // TODO: finish + /* 0x00E0 */ s16 scene_id; + /* 0x00E4 */ mFI_block_tbl_c block_table; + /* 0x00F4 */ mFI_block_tbl_c last_block_table; + /* 0x0104 */ u8 _0104[0x010C - 0x0104]; + /* 0x010C */ Scene_Word_u* current_scene_data; + /* 0x0110 */ Object_Exchange_c object_exchange; + /* 0x1A68 */ View view; + /* 0x1B88 */ Camera2 camera; + /* 0x1CC0 */ Kankyo kankyo; + /* 0x1D90 */ Global_light global_light; + /* 0x1DA0 */ pause_t pause; + /* 0x1DA8 */ Actor_info actor_info; + /* 0x1DEC */ Submenu submenu; + /* 0x1FA4 */ s8 submenu_ground_idx; + /* 0x1FA8 */ char* submenu_ground_tex[2]; + /* 0x1FB0 */ char* submenu_ground_pallet[2]; + /* 0x1FB8 */ PreRender prerender; + /* 0x2000 */ Door_info_c door_info; + /* 0x2008 */ int next_scene_no; + /* 0x200C */ MtxF projection_matrix; + /* 0x204C */ MtxF billboard_matrix; + /* 0x208C */ Mtx* billboard_mtx_p; + /* 0x2090 */ u32 game_frame; + /* 0x2094 */ u8 _2094; + /* 0x2095 */ u8 actor_data_num; + /* 0x2096 */ u8 ctrl_actor_data_num; + /* 0x2097 */ u8 obj_bank_data_num; + /* 0x2098 */ Actor_data* player_data; + /* 0x209C */ Actor_data* actor_data; + /* 0x20A0 */ s16* ctrl_actor_data; + /* 0x20A4 */ s16* obj_bank_data; + /* 0x20A8 */ int _20A8; + /* 0x20AC */ Event_c event; + /* 0x20D0 */ u8 fb_fade_type; + /* 0x20D1 */ u8 fb_wipe_type; + /* 0x20D2 */ u8 fb_mode; + /* 0x20D3 */ u8 fb_wipe_mode; + /* 0x20D8 */ fbdemo_wipe fbdemo_wipe; + /* 0x2318 */ fbdemo_fade color_fade; + /* 0x2328 */ CollisionCheck_c collision_check; + /* 0x23F8 */ DRAW_CHK_PROC draw_chk_proc; // only used by mikanbox actor + /* 0x23FC */ rgba8888 fade_color_value; + /* 0x2400 */ Scene_data_status_c* scene_data_status; + /* 0x2404 */ u8 _2400[0x2600 - 0x2404]; }; extern fbdemo_c fbdemo; @@ -80,35 +80,35 @@ extern fbdemo_c fbdemo; extern void Game_play_Reset_destiny(); extern void event_title_flag_on(); extern void event_title_flag_off(); -extern void Game_play_camera_proc(GAME_PLAY *); -extern void Game_play_fbdemo_wipe_destroy(GAME_PLAY *); -extern void Game_play_fbdemo_wipe_create_sub(GAME_PLAY *); -extern void Game_play_fbdemo_wipe_create(GAME_PLAY *); -extern void Game_play_fbdemo_wipe_init(GAME_PLAY *); -extern void Game_play_fbdemo_fade_in_move_end(GAME_PLAY *); -extern void Game_play_fbdemo_fade_out_start_emu_move_end(GAME_PLAY *); -extern void Game_play_fbdemo_fade_out_game_end_move_end(GAME_PLAY *); -extern void Game_play_change_scene_move_end(GAME_PLAY *); -extern void Game_play_fbdemo_wipe_move(GAME_PLAY *); -extern void Game_play_fbdemo_wipe_proc(GAME_PLAY *); -extern Gfx* game_play_set_fog(GAME_PLAY *, Gfx *); -extern void Game_play_fbdemo_proc(GAME_PLAY *); -extern void play_cleanup(GAME *); -extern void VR_Box_ct(GAME_PLAY *); -extern void play_init(GAME *); -extern void Game_play_move_fbdemo_not_move(GAME_PLAY *); -extern void Game_play_move(GAME_PLAY *); -extern void setupFog(GAME_PLAY *, GRAPH *); -extern void setupViewer(GAME_PLAY *); -extern void setupViewMatrix(GAME_PLAY *, GRAPH *, GRAPH *); -extern void copy_efb_to_texture(Gfx **, void *); -extern int makeBumpTexture(GAME_PLAY *, GRAPH *, GRAPH *); -extern void draw_version(GRAPH *); -extern void Game_play_draw(GAME *); -extern void play_main(GAME *); -extern void Gameplay_Scene_Init(GAME_PLAY *); +extern void Game_play_camera_proc(GAME_PLAY*); +extern void Game_play_fbdemo_wipe_destroy(GAME_PLAY*); +extern void Game_play_fbdemo_wipe_create_sub(GAME_PLAY*); +extern void Game_play_fbdemo_wipe_create(GAME_PLAY*); +extern void Game_play_fbdemo_wipe_init(GAME_PLAY*); +extern void Game_play_fbdemo_fade_in_move_end(GAME_PLAY*); +extern void Game_play_fbdemo_fade_out_start_emu_move_end(GAME_PLAY*); +extern void Game_play_fbdemo_fade_out_game_end_move_end(GAME_PLAY*); +extern void Game_play_change_scene_move_end(GAME_PLAY*); +extern void Game_play_fbdemo_wipe_move(GAME_PLAY*); +extern void Game_play_fbdemo_wipe_proc(GAME_PLAY*); +extern Gfx* game_play_set_fog(GAME_PLAY*, Gfx*); +extern void Game_play_fbdemo_proc(GAME_PLAY*); +extern void play_cleanup(GAME*); +extern void VR_Box_ct(GAME_PLAY*); +extern void play_init(GAME*); +extern void Game_play_move_fbdemo_not_move(GAME_PLAY*); +extern void Game_play_move(GAME_PLAY*); +extern void setupFog(GAME_PLAY*, GRAPH*); +extern void setupViewer(GAME_PLAY*); +extern void setupViewMatrix(GAME_PLAY*, GRAPH*, GRAPH*); +extern void copy_efb_to_texture(Gfx**, void*); +extern int makeBumpTexture(GAME_PLAY*, GRAPH*, GRAPH*); +extern void draw_version(GRAPH*); +extern void Game_play_draw(GAME*); +extern void play_main(GAME*); +extern void Gameplay_Scene_Init(GAME_PLAY*); extern u8 mPl_SceneNo2SoundRoomType(int); -extern void Gameplay_Scene_Read(GAME_PLAY *, s16); +extern void Gameplay_Scene_Read(GAME_PLAY*, s16); #ifdef __cplusplus } diff --git a/src/ac_weather_snow.c b/src/ac_weather_snow.c index 83fac43c..f59d0d88 100644 --- a/src/ac_weather_snow.c +++ b/src/ac_weather_snow.c @@ -19,53 +19,48 @@ static void aWeatherSnow_set(GAME*); static void aWeatherSnow_draw(aWeather_Priv*, GAME*); aWeather_Profile_c iam_weather_snow = { - aWeatherSnow_make, - aWeatherSnow_ct, - aWeatherSnow_move, - aWeatherSnow_set, - aWeatherSnow_draw, + aWeatherSnow_make, aWeatherSnow_ct, aWeatherSnow_move, aWeatherSnow_set, aWeatherSnow_draw, }; -static int aWeatherSnow_DecideMakeSnowCount(ACTOR* actor, GAME* game){ +static int aWeatherSnow_DecideMakeSnowCount(ACTOR* actor, GAME* game) { WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; - if(weather->current_level == 1){ + if (weather->current_level == 1) { return (game->frame_counter & 7) == 0; - } - else if(weather->current_level == 2){ + } else if (weather->current_level == 2) { return (game->frame_counter & 3) == 0; } - return (game->frame_counter & 1); + return (game->frame_counter & 1); } - -static void aWeatherSnow_make(ACTOR* actor, GAME* game){ + +static void aWeatherSnow_make(ACTOR* actor, GAME* game) { WEATHER_ACTOR* weather = (WEATHER_ACTOR*)actor; GAME_PLAY* play = (GAME_PLAY*)game; - aWeather_Priv* priv; - f32 x,z; + aWeather_Priv* priv; + f32 x, z; xyz_t pos = weather->pos; f32 y = 230.0f + pos.y; - int count = Common_Get(clip.weather_clip)->get_priv_num(actor); - xyz_t base = {0.0f, 0.0f, 0.0f}; + int count = Common_Get(clip.weather_clip)->get_priv_num(actor); + xyz_t base = { 0.0f, 0.0f, 0.0f }; xyz_t mod_pos; - if(aWeatherSnow_DecideMakeSnowCount(actor, game) != 0){ + if (aWeatherSnow_DecideMakeSnowCount(actor, game) != 0) { base.y = -0.5f + (RANDOM_F(-2.0f)); - if(count != -1){ + if (count != -1) { x = -100.0f + (RANDOM_F(200.0f)); z = -200.0f + (RANDOM_F(380.0f)); - + mod_pos = pos; mod_pos.x += x; mod_pos.z += z; mod_pos.y = y; - + priv = Common_Get(clip.weather_clip)->get_priv(2, 280, &mod_pos, &base, actor, count); - if(priv != NULL){ + if (priv != NULL) { aWeatherSnow_ct(priv, game); - priv->work[0]= 0; + priv->work[0] = 0; priv->work[1] = 156.5f + (RANDOM_F(260.5)); priv->currentY = y; } @@ -73,33 +68,30 @@ static void aWeatherSnow_make(ACTOR* actor, GAME* game){ } } - -static void aWeatherSnow_ct(aWeather_Priv*, GAME*){ - +static void aWeatherSnow_ct(aWeather_Priv*, GAME*) { } - -static int aWeatherSnow_CheckSnowBorder(aWeather_Priv* priv, GAME_PLAY* play){ +static int aWeatherSnow_CheckSnowBorder(aWeather_Priv* priv, GAME_PLAY* play) { WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; int ret = 0; f32 wtemp, ptemp; - if(weather != NULL){ + if (weather != NULL) { wtemp = weather->pos.x; - ptemp =priv->pos.x; + ptemp = priv->pos.x; - if(ptemp < (-100.0f + wtemp)){ + if (ptemp < (-100.0f + wtemp)) { ret |= 2; } - if(ptemp > (100.0f + wtemp)){ + if (ptemp > (100.0f + wtemp)) { ret |= 8; } wtemp = weather->pos.z; - ptemp =priv->pos.z; + ptemp = priv->pos.z; - if(ptemp > (180.0f + wtemp)){ + if (ptemp > (180.0f + wtemp)) { ret |= 4; } - if(ptemp < (-200.0f + wtemp)){ + if (ptemp < (-200.0f + wtemp)) { ret |= 1; } } @@ -107,44 +99,44 @@ static int aWeatherSnow_CheckSnowBorder(aWeather_Priv* priv, GAME_PLAY* play){ return ret; } -static void aWeatherSnow_CheckSnowScroll(aWeather_Priv* priv, GAME_PLAY* play){ - int border = aWeatherSnow_CheckSnowBorder(priv,play); +static void aWeatherSnow_CheckSnowScroll(aWeather_Priv* priv, GAME_PLAY* play) { + int border = aWeatherSnow_CheckSnowBorder(priv, play); PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); - if(border != 0){ - if((border >> 1) & 1){ + if (border != 0) { + if ((border >> 1) & 1) { priv->pos.x += 200.0f; } - if((border >> 3) & 1){ + if ((border >> 3) & 1) { priv->pos.x -= 200.0f; } - if((border >> 2) & 1){ + if ((border >> 2) & 1) { priv->pos.z -= 380.0f; } - if(border & 1){ + if (border & 1) { priv->pos.z += 380.0f; } } - if(Common_Get(clip.weather_clip) != NULL){ + if (Common_Get(clip.weather_clip) != NULL) { f32 y; WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; - if(weather != NULL){ + if (weather != NULL) { y = 230.0f + weather->pos.y; - if(priv->pos.y < (40.0f + player->actor_class.world.position.y)){ + if (priv->pos.y < (40.0f + player->actor_class.world.position.y)) { priv->pos.y = (y + (priv->pos.y - priv->currentY)); - priv->currentY = y; + priv->currentY = y; } } } } -static void aWeatherSnow_SetWind2Snow(aWeather_Priv* priv){ +static void aWeatherSnow_SetWind2Snow(aWeather_Priv* priv) { - if(Common_Get(clip.weather_clip) != NULL){ + if (Common_Get(clip.weather_clip) != NULL) { WEATHER_ACTOR* weather = Common_Get(clip.weather_clip)->actor; - if(weather != NULL){ + if (weather != NULL) { priv->pos.x += weather->wind_info.x; priv->pos.y += weather->wind_info.y; priv->pos.z += weather->wind_info.z; @@ -152,16 +144,16 @@ static void aWeatherSnow_SetWind2Snow(aWeather_Priv* priv){ } } -static void aWeatherSnow_move(aWeather_Priv* priv, GAME* game){ - GAME_PLAY* play = (GAME_PLAY*) game; +static void aWeatherSnow_move(aWeather_Priv* priv, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; - xyz_t_add(&priv->pos,&priv->speed, &priv->pos); + xyz_t_add(&priv->pos, &priv->speed, &priv->pos); priv->work[0] += priv->work[1]; aWeatherSnow_SetWind2Snow(priv); - aWeatherSnow_CheckSnowScroll(priv,play); + aWeatherSnow_CheckSnowScroll(priv, play); } -static void aWeatherSnow_set(GAME* game){ +static void aWeatherSnow_set(GAME* game) { _texture_z_light_fog_prim_xlu(game->graph); @@ -169,12 +161,11 @@ static void aWeatherSnow_set(GAME* game){ gSPDisplayList(NEXT_POLY_XLU_DISP, ef_yuki01_setmode); - CLOSE_DISP(game->graph); } -void aWeatherSnow_draw(aWeather_Priv* priv, GAME* game){ - GAME_PLAY* play = (GAME_PLAY*) game; +void aWeatherSnow_draw(aWeather_Priv* priv, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); xyz_t pos; @@ -189,33 +180,34 @@ void aWeatherSnow_draw(aWeather_Priv* priv, GAME* game){ Game_play_Projection_Trans(play, &pos, &screen_pos); - if((0.0f <= screen_pos.x) && (screen_pos.x < SCREEN_WIDTH_F) && (0.0f <= screen_pos.y) && (screen_pos.y < SCREEN_HEIGHT_F)){ + if ((0.0f <= screen_pos.x) && (screen_pos.x < SCREEN_WIDTH_F) && (0.0f <= screen_pos.y) && + (screen_pos.y < SCREEN_HEIGHT_F)) { work = GRAPH_ALLOC_TYPE(game->graph, Mtx, 1); min = pos.y - (40.0f + player->actor_class.world.position.y); - if(min < 0.0f){ + if (min < 0.0f) { min = 0.0f; } scale = min / 20.0f; - if(scale > 1.0f){ + if (scale > 1.0f) { scale = 1.0f; } - OPEN_DISP(game->graph); - - suMtxMakeTS(work, 0.00195999979042f * scale, 0.00195999979042f * scale, 0.00195999979042f * scale, pos.x, pos.y, pos.z); + OPEN_DISP(game->graph); + + suMtxMakeTS(work, 0.00195999979042f * scale, 0.00195999979042f * scale, 0.00195999979042f * scale, pos.x, pos.y, + pos.z); gSPMatrix(NEXT_POLY_XLU_DISP, work, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - gSPMatrix(NEXT_POLY_XLU_DISP, play->_208C,G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + gSPMatrix(NEXT_POLY_XLU_DISP, play->billboard_mtx_p, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); gSPDisplayList(NEXT_POLY_XLU_DISP, ef_yuki01_00_model); - - CLOSE_DISP( game->graph); + CLOSE_DISP(game->graph); } } diff --git a/src/ef_effect_control.c b/src/ef_effect_control.c new file mode 100644 index 00000000..e82ceda4 --- /dev/null +++ b/src/ef_effect_control.c @@ -0,0 +1,444 @@ +#include "ef_effect_control.h" + +#include "m_common_data.h" +#include "sys_matrix.h" +#include "m_rcp.h" +#include "m_player_lib.h" +#include "m_debug.h" + +static eEC_PROFILE_c* profile_tbl[] = { + &iam_ef_shock, + &iam_ef_dust, + &iam_ef_muka, + &iam_ef_warau, + &iam_ef_ha, + &iam_ef_sibuki, + &iam_ef_gimonhu, + &iam_ef_kantanhu, + &iam_ef_ase, + &iam_ef_ase_ch, + &iam_ef_kangaeru, + &iam_ef_otikomi, + &iam_ef_buruburu, + &iam_ef_siawase_hikari, + &iam_ef_siawase_hana, + &iam_ef_siawase_hana_ch, + &iam_ef_takurami, + &iam_ef_takurami_kira, + &iam_ef_kaze, + &iam_ef_kaze_happa, + &iam_ef_lovelove, + &iam_ef_lovelove_heart, + &iam_ef_pun, + &iam_ef_pun_yuge, + &iam_ef_pun_sekimen, + &iam_ef_naku, + &iam_ef_namida, + &iam_ef_hirameki_den, + &iam_ef_hirameki_hikari, + &iam_ef_situren, + &iam_ef_ase2, + &iam_ef_dash_asimoto, + &iam_ef_konpu, + &iam_ef_lovelove2, + &iam_ef_kpun, + &iam_ef_kisha_kemuri, + &iam_ef_neboke, + &iam_ef_neboke_awa, + &iam_ef_hanabi_yanagi, + &iam_ef_hanabi_botan1, + &iam_ef_hanabi_botan2, + &iam_ef_hanabi_hoshi, + &iam_ef_hanabi_set, + &iam_ef_hanabi_switch, + &iam_ef_footprint, + &iam_ef_turn_footprint, + &iam_ef_bubu, + &iam_ef_turn_asimoto, + &iam_ef_string, + &iam_ef_yukihane, + &iam_ef_anahikari, + &iam_ef_bush_happa, + &iam_ef_bush_yuki, + &iam_ef_tumble, + &iam_ef_tumble_bodyprint, + &iam_ef_slip, + &iam_ef_tumble_dust, + &iam_ef_swing_net, + &iam_ef_ami_mizu, + &iam_ef_mizutama, + &iam_ef_yukidama, + &iam_ef_kikuzu, + &iam_ef_swing_axe, + &iam_ef_steam, + &iam_ef_night15_moon, + &iam_ef_night13_moon, + &iam_ef_neboke_akubi, + &iam_ef_slip_footprint, + &iam_ef_walk_asimoto, + &iam_ef_turi_hamon, + &iam_ef_turi_mizu, + &iam_ef_turi_hane0, + &iam_ef_turi_hane1, + &iam_ef_turi_suiteki, + &iam_ef_ongen, + &iam_ef_impact_star, + &iam_ef_sandsplash, + &iam_ef_young_tree, + &iam_ef_swing_rod, + &iam_ef_doyon, + &iam_ef_kagu_happa, + &iam_ef_hanabi_dummy, + &iam_ef_dig_hole, + &iam_ef_dig_scoop, + &iam_ef_dig_mud, + &iam_ef_kigae, + &iam_ef_kigae_light, + &iam_ef_tape, + &iam_ef_clacker, + &iam_ef_kamifubuki, + &iam_ef_car_blight, + &iam_ef_tamaire, + &iam_ef_car_light, + &iam_ef_reset_hole, + &iam_ef_goki, + &iam_ef_hanabira, + &iam_ef_wait_asimoto, + &iam_ef_otosiana, + &iam_ef_ikigire, + &iam_ef_yukidaruma, + &iam_ef_kyousou_onpu, + &iam_ef_douzou_light, + &iam_ef_halloween_smoke, + &iam_ef_halloween, + &iam_ef_motiyuge, + &iam_ef_taberu, + &iam_ef_kasamizu, + &iam_ef_kasamizutama, + &iam_ef_hanatiri, + &iam_ef_uranai, + &iam_ef_suisou_awa, + &iam_ef_break_axe, + &iam_ef_yajirushi, + &iam_ef_soba_yuge, + &iam_ef_furo_yuge, + &iam_ef_shooting, + &iam_ef_shooting_set, + &iam_ef_shooting_kira, + &iam_ef_coin, + &iam_ef_tent_lamp, + &iam_ef_flash, + &iam_ef_flashC, + &iam_ef_killer, + &iam_ef_make_hem, + &iam_ef_make_hem_kira, + &iam_ef_make_hem_light, +}; + +static u8 eEC_effect_feature[] = { + FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, + TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, + TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, + FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, +}; + +static void eEC_actor_ct(ACTOR* actorx, GAME* game); +static void eEC_actor_dt(ACTOR* actorx, GAME* game); +static void eEC_actor_move(ACTOR* actorx, GAME* game); +static void eEC_actor_draw(ACTOR* actorx, GAME* game); + +ACTOR_PROFILE Effect_Control_Profile = { + mAc_PROFILE_EFFECT_CONTROL, + ACTOR_PART_CONTROL, + ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED, + EMPTY_NO, + ACTOR_OBJ_BANK_KEEP, + sizeof(EFFECT_CONTROL_ACTOR), + &eEC_actor_ct, + &eEC_actor_dt, + &eEC_actor_move, + &eEC_actor_draw, + NULL, +}; + +static eEC_work_c eEC_ctrl_work; + +#include "../src/ef_effect_lib.c" + +static void eEC_Name2EffectMake(int effect_id, xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, + s16 arg1) { + if (effect_id >= 0 && effect_id < eEC_EFFECT_NUM) { + if (eEC_effect_feature[effect_id] == FALSE) { + profile_tbl[effect_id]->init_proc(pos, prio, angle, game, item_name, arg0, arg1); + } else if (eEC_effect_feature[effect_id] == TRUE) { + int i; + u8* active_flags = eEC_ctrl_work.effect_active_flags; + eEC_Effect_c* effect = eEC_ctrl_work.effects; + + /* Check if any of the spawned effects are an exact match to this one */ + for (i = 0; i < eEC_EFFECT_ACTIVE_MAX; i++, active_flags++, effect++) { + if (*active_flags && effect->name == effect_id && effect->item_name == item_name) { + return; + } + } + + /* No exact matches, so create effect */ + profile_tbl[effect_id]->init_proc(pos, prio, angle, game, item_name, arg0, arg1); + } + } +} + +static void eEC_Name2EffectKill(int effect_id, u16 item_name) { + int i; + u8* active_flags = eEC_ctrl_work.effect_active_flags; + eEC_Effect_c* effect = eEC_ctrl_work.effects; + + for (i = 0; i < eEC_EFFECT_ACTIVE_MAX; i++, active_flags++, effect++) { + if (*active_flags && effect->name == effect_id && effect->item_name == item_name && effect->prog_idx != -1) { + if (profile_tbl[effect_id]->n_frames == eEC_IMMEDIATE_DEATH) { + *active_flags = 0; + + if (profile_tbl[effect_id]->child_effect_id != eEC_NO_CHILD_ID) { + eEC_Name2EffectKill(profile_tbl[effect_id]->child_effect_id, item_name); + } + } else if (profile_tbl[effect_id]->n_frames != eEC_IGNORE_DEATH) { + effect->timer = profile_tbl[effect_id]->n_frames; + effect->state = eEC_STATE_FINISHED; + + if (profile_tbl[effect_id]->child_effect_id != eEC_NO_CHILD_ID) { + eEC_Name2EffectKill(profile_tbl[effect_id]->child_effect_id, item_name); + } + } + } + } +} + +static void eEC_Name2EffectKillAll(u16 item_name) { + int i; + u8* active_flags = eEC_ctrl_work.effect_active_flags; + eEC_Effect_c* effect = eEC_ctrl_work.effects; + + for (i = 0; i < eEC_EFFECT_ACTIVE_MAX; i++, active_flags++, effect++) { + if (*active_flags && effect->item_name == item_name && effect->prog_idx != -1) { + if (profile_tbl[effect->name]->n_frames == eEC_IMMEDIATE_DEATH) { + *active_flags = FALSE; + } else if (eEC_ctrl_work.program_info[effect->prog_idx].end_frame != eEC_IGNORE_DEATH) { + effect->timer = eEC_ctrl_work.program_info[effect->prog_idx].end_frame; + effect->state = eEC_STATE_FINISHED; + } + } + } +} + +static void eEC_InitEffectControlWork(void) { + eEL_InitUnchar(eEC_ctrl_work.effect_active_flags, eEC_EFFECT_ACTIVE_MAX, 0); + eEC_ctrl_work.active_effect_num = 0; +} + +static eEC_Effect_c* eEC_MakeEffect(s16 effect_id, xyz_t pos, xyz_t* ofs, GAME* game, void* ct_arg, u16 item_name, + int prio, s16 arg0, s16 arg1); + +static void eEC_EffectLib2Clip(ACTOR* actorx) { + EFFECT_CONTROL_ACTOR* effect_ctrl = (EFFECT_CONTROL_ACTOR*)actorx; + + effect_ctrl->clip.effect_make_proc = &eEC_Name2EffectMake; + effect_ctrl->clip.effect_kill_proc = &eEC_Name2EffectKill; + effect_ctrl->clip.effect_kill_all_proc = &eEC_Name2EffectKillAll; + effect_ctrl->clip.vector_rotate_y_proc = &eEL_VectorRoteteY; + effect_ctrl->clip.random_first_speed_proc = &eEL_RandomFirstSpeed; + effect_ctrl->clip.set_continious_env_proc = &eEL_SetContiniousEnv; + effect_ctrl->clip.calc_adjust_proc = &eEL_CalcAdjust; + effect_ctrl->clip.auto_matrix_xlu_proc = &eEL_AutoMatrixXlu; + effect_ctrl->clip.auto_matrix_xlu_offset_proc = &eEL_AutoMatrixXlu_Offset; + effect_ctrl->clip._20 = NULL; + effect_ctrl->clip._24 = NULL; + effect_ctrl->clip.make_effect_proc = &eEC_MakeEffect; + effect_ctrl->clip.morph_combine_proc = &eEC_MorphCombine; + effect_ctrl->clip.regist_effect_light = &eEL_RegistEffectLight; + effect_ctrl->clip.decide_light_power_proc = &eEL_DecideLightPower; + effect_ctrl->clip.check_lookat_block_proc = &mEL_CheckLookAtBlock; + effect_ctrl->clip.effect_light_status = &eEL_EffectLightStatus; + effect_ctrl->clip.special_block_center_pos_proc = &eEL_SpecialBlockCenterPos; + + eEC_CLIP = &effect_ctrl->clip; +} + +static void eEC_MakeEffectLight(GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + + Light_diffuse_ct(&eEC_ctrl_work.light_info, 0, 127, 0, 0, 0, 0); + eEC_ctrl_work.light_list = Global_light_list_new(game, &play->global_light, &eEC_ctrl_work.light_info); +} + +static void eEC_DeleteEffectLight(GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + + Global_light_list_delete(&play->global_light, eEC_ctrl_work.light_list); +} + +int eMH_special_point_light_num = 0; + +static void eEC_actor_ct(ACTOR* actorx, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + + eEC_EffectLib2Clip(actorx); + eEC_InitEffectControlWork(); + eEC_MakeEffectLight(game); + eEL_InitEffectLight(); + + if (Save_Get(scene_no) == SCENE_TENT) { + eEC_CLIP->effect_make_proc(eEC_EFFECT_TENT_LAMP, actorx->world.position, 3, 0, game, RSV_NO, 0, 0); + } + + eMH_special_point_light_num = -1; +} + +static void eEC_actor_dt(ACTOR* actorx, GAME* game) { + eEC_CLIP = NULL; + eEC_DeleteEffectLight(game); +} + +static void eEC_actor_draw(ACTOR* actorx, GAME* game) { + int i; + u8* active_flags = eEC_ctrl_work.effect_active_flags; + eEC_Effect_c* effect = eEC_ctrl_work.effects; + + _texture_z_light_fog_prim(game->graph); + _texture_z_light_fog_prim_xlu(game->graph); + + for (i = 0; i < eEC_EFFECT_ACTIVE_MAX; i++, active_flags++, effect++) { + if (*active_flags) { + profile_tbl[effect->name]->draw_proc(effect, game); + } + } +} + +static int eEC_DistDeath(eEC_Effect_c* effect, GAME* game, s16 prog_idx) { + GAME_PLAY* play = (GAME_PLAY*)game; + int res = FALSE; // in range + + if (prog_idx != -1) { + f32 max_dist = profile_tbl[effect->name]->max_dist; + + if (max_dist != eEC_IGNORE_DEATH_DIST) { + PLAYER_ACTOR* player = GET_PLAYER_ACTOR(play); + + if (ABS(player->actor_class.world.position.x - effect->position.x) > max_dist || + ABS(player->actor_class.world.position.z - effect->position.z) > max_dist || + ABS(player->actor_class.world.position.y - effect->position.y) > max_dist) { + res = TRUE; // out of range + } + } + } + + return res; +} + +static void eEC_AllEffectMove(GAME* game) { + int i; + u8* active_flags = eEC_ctrl_work.effect_active_flags; + eEC_Effect_c* effect = eEC_ctrl_work.effects; + + for (i = 0; i < eEC_EFFECT_ACTIVE_MAX; i++, active_flags++, effect++) { + if (*active_flags) { + s16 prog_idx = effect->prog_idx; + + profile_tbl[effect->name]->move_proc(effect, game); + effect->timer--; + + if (effect->timer <= 0 || eEC_DistDeath(effect, game, prog_idx) == TRUE) { + *active_flags = 0; + effect->timer = 0; + effect->_0A = 0; + } + } + } +} + +static void eEC_actor_move(ACTOR* actorx, GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + PLAYER_ACTOR* player = GET_PLAYER_ACTOR(play); + + eEL_CalcEffectLight_Set(game); + eEC_AllEffectMove(game); + actorx->world.position = player->actor_class.world.position; +} + +static int eEC_GetEffectBuff(int prio) { + int now_idx = eEC_ctrl_work.active_effect_num; + u8* active_flags = eEC_ctrl_work.effect_active_flags; + int i; + + for (i = now_idx; i < eEC_EFFECT_ACTIVE_MAX; i++) { + if (active_flags[i] == 0) { + return i; + } + } + + for (i = 0; i < now_idx - 1; i++) { + if (active_flags[i] == 0) { + return i; + } + } + + for (i = now_idx; i < eEC_EFFECT_ACTIVE_MAX; i++) { + if (active_flags[i] < prio) { + return i; + } + } + + for (i = 0; i < now_idx - 1; i++) { + if (active_flags[i] != 2) { + return i; + } + } + + return -1; +} + +static void eEC_SetFirstOffset(eEC_Effect_c* effect, xyz_t* ofs) { + static xyz_t default_offset = { 0.0f, 0.0f, 0.0f }; + + effect->offset = default_offset; + if (ofs != NULL) { + effect->offset = *ofs; + } +} + +static eEC_Effect_c* eEC_MakeEffect(s16 effect_id, xyz_t pos, xyz_t* ofs, GAME* game, void* ct_arg, u16 item_name, + int prio, s16 arg0, s16 arg1) { + static xyz_t defaultX = { 0.0f, 0.0f, 0.0f }; + static xyz_t scale_default = { 0.01f, 0.01f, 0.01f }; + int* active_effect_num = &eEC_ctrl_work.active_effect_num; + eEC_Effect_c* effect = NULL; + eEC_Effect_c* effects = eEC_ctrl_work.effects; + u8* active_flags = eEC_ctrl_work.effect_active_flags; + int use_idx; + + use_idx = eEC_GetEffectBuff(prio); + if (use_idx != -1) { + active_flags[use_idx] = prio; + effects[use_idx].name = effect_id; + effects[use_idx].position = pos; + effects[use_idx].item_name = item_name; + effects[use_idx].prio = prio; + effects[use_idx].state = eEC_STATE_NORMAL; + eEC_SetFirstOffset(&effects[use_idx], ofs); + effects[use_idx].timer = 10; + effects[use_idx].velocity = defaultX; + effects[use_idx].acceleration = defaultX; + effects[use_idx].scale = scale_default; + effects[use_idx].arg0 = arg0; + effects[use_idx].arg1 = arg1; + + profile_tbl[effect_id]->ct_proc(&effects[use_idx], game, ct_arg); + *active_effect_num = use_idx + 1; + effect = &effects[use_idx]; + } + + return effect; +} diff --git a/src/ef_effect_lib.c b/src/ef_effect_lib.c new file mode 100644 index 00000000..3d5975cc --- /dev/null +++ b/src/ef_effect_lib.c @@ -0,0 +1,251 @@ +static void eEL_InitUnchar(u8* unchar_p, int count, u8 val) { + int i; + + for (i = 0; i < count; i++) { + *unchar_p++ = val; + } +} + +static void eEL_VectorRoteteY(xyz_t* vec, f32 angle) { + xyz_t src = *vec; + f32 cos = cosf_table(angle); + f32 sin = sinf_table(angle); + + vec->x = src.x * cos + src.z * sin; + vec->z = -src.x * sin + src.z * cos; +} + +static s16 eEL_RandomFirstSpeed(xyz_t* speed, f32 y, f32 max_z, f32 max_x) { + xyz_t vec = { 0.0f, 1.0f, 0.0f }; + f32 angle = 0.0f; + + vec.y = y; + + if (max_z != 0.0f) { + f32 rnd_z = RANDOM_F(max_z) - max_z * 0.5f; + + angle = rnd_z; + sMath_RotateZ(&vec, DEG2RAD(rnd_z)); + } + + if (max_x != 0.0f) { + f32 rnd_x = RANDOM_F(max_x) - max_x * 0.5f; + sMath_RotateX(&vec, DEG2RAD(rnd_x)); + } + + if (speed != NULL) { + *speed = vec; + } + + return RAD2SHORT_ANGLE2(DEG2RAD(angle)); +} + +static void eEL_SetContiniousEnv(eEC_Effect_c* effect, s16 unused, s16 timer) { + if (effect->state == eEC_STATE_NORMAL) { + if (effect->timer <= 1) { + effect->state = eEC_STATE_CONTINUOUS; + effect->timer = timer; + } + } else if (effect->state == eEC_STATE_CONTINUOUS) { + if (effect->timer <= 1) { + effect->state = eEC_STATE_CONTINUOUS; + effect->timer = timer; + } + } +} + +static f32 eEL_CalcAdjust(s16 now, s16 start, s16 end, f32 start_val, f32 end_val) { + + if (start == end) { + return start_val; + } + + if (now <= start) { + return start_val; + } + + if (now >= end) { + return end_val; + } + + return start_val + (f32)(now - start) * ((end_val - start_val) / (f32)(end - start)); +} + +static void eEL_AutoMatrixXlu(GAME* game, xyz_t* pos, xyz_t* scale) { + GAME_PLAY* play = (GAME_PLAY*)game; + Mtx* mtx = (Mtx*)GRAPH_ALLOC_TYPE(game->graph, Mtx, 1); + f32 adj_scale; + + OPEN_DISP(game->graph); + + _texture_z_light_fog_prim_xlu(game->graph); + adj_scale = 1.0f + ((f32)(int)GETREG(MYKREG, 27)) * 0.01f; + suMtxMakeTS(mtx, scale->x * adj_scale, scale->y * adj_scale, scale->z * adj_scale, pos->x, pos->y, pos->z); + + gSPMatrix(NEXT_POLY_XLU_DISP, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(NEXT_POLY_XLU_DISP, play->billboard_mtx_p, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + CLOSE_DISP(game->graph); +} + +static void eEL_AutoMatrixXlu_Offset(GAME* game, xyz_t* pos, xyz_t* scale, xyz_t* offset) { + GAME_PLAY* play = (GAME_PLAY*)game; + f32 adj_scale; + + OPEN_DISP(game->graph); + + _texture_z_light_fog_prim_xlu(game->graph); + Matrix_translate(pos->x, pos->y, pos->z, 0); + Matrix_mult(&play->billboard_matrix, 1); + Matrix_translate(offset->x + (f32)(int)GETREG(MYKREG, 24), offset->y + (f32)(int)GETREG(MYKREG, 25), + offset->z + (f32)(int)GETREG(MYKREG, 26), 1); + adj_scale = 1.0f + ((f32)(int)GETREG(MYKREG, 27)) * 0.01f; + Matrix_scale(scale->x * adj_scale, scale->y * adj_scale, scale->z * adj_scale, 1); + + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + CLOSE_DISP(game->graph); +} + +static void eEC_MorphCombine(u8* const result, eEC_morph_data_c* const morph_data, s16 now_timer) { + int i; + + for (i = 0; i < 9; i++) { + if (morph_data[i].morph_flag) { + result[i] = eEL_CalcAdjust(now_timer, morph_data[i].start_frame << 1, morph_data[i].end_frame << 1, + morph_data[i].start_val, morph_data[i].end_val); + } else { + result[i] = morph_data[i].start_val; + } + } +} + +static int eEL_SpecialBlockCenterPos(xyz_t* pos, u32 block_kind) { + int bx; + int bz; + + *pos = ZeroVec; + + if (mFI_BlockKind2BkNum(&bx, &bz, block_kind) && mFI_BkNum2WposXZ(&pos->x, &pos->z, bx, bz)) { + pos->x += mFI_BK_WORLDSIZE_X_F / 2; + pos->z += mFI_BK_WORLDSIZE_Z_F / 2; + return TRUE; + } else { + return FALSE; + } +} + +static eEC_light_data_c eEL_light_data; +static const eEC_light_data_c eEC_light_default = { 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, 0, 0, 0, 0 }; + +static int eEL_EffectLightStatus(rgba_t* color, int* shadow_flag) { + color->r = eEC_ctrl_work.light_info.lights.diffuse.color[0]; + color->g = eEC_ctrl_work.light_info.lights.diffuse.color[1]; + color->b = eEC_ctrl_work.light_info.lights.diffuse.color[2]; + color->a = 0; + + *shadow_flag = eEL_light_data.shadow_flag; + return eEL_light_data.light_state; +} + +static void eEL_InitEffectLight(void) { + eEL_light_data = eEC_light_default; + eEL_light_data.n_frames = 10; +} + +static void eEL_CalcEffectLight_Set(GAME* game) { + int r; + int g; + int b; + + if (eEL_light_data.ctr > eEL_light_data.n_frames) { + eEL_InitEffectLight(); + eEC_ctrl_work.light_info.lights.diffuse.color[0] = 0; + eEC_ctrl_work.light_info.lights.diffuse.color[1] = 0; + eEC_ctrl_work.light_info.lights.diffuse.color[2] = 0; + eEL_light_data.light_state = eEC_LIGHT_COLOR_DISABLED; + } else { + if (eEL_light_data.ctr < eEL_light_data.max_frame) { + r = (int)eEC_CLIP->calc_adjust_proc(eEL_light_data.ctr, 0, eEL_light_data.max_frame, + eEL_light_data.start_color.r, eEL_light_data.target_color.r); + g = (int)eEC_CLIP->calc_adjust_proc(eEL_light_data.ctr, 0, eEL_light_data.max_frame, + eEL_light_data.start_color.g, eEL_light_data.target_color.g); + b = (int)eEC_CLIP->calc_adjust_proc(eEL_light_data.ctr, 0, eEL_light_data.max_frame, + eEL_light_data.start_color.b, eEL_light_data.target_color.b); + + eEL_light_data.light_state = eEC_LIGHT_COLOR_INCREASING; + } else { + r = (int)eEC_CLIP->calc_adjust_proc(eEL_light_data.ctr, eEL_light_data.max_frame, eEL_light_data.n_frames, + eEL_light_data.target_color.r, 0.0f); + g = (int)eEC_CLIP->calc_adjust_proc(eEL_light_data.ctr, eEL_light_data.max_frame, eEL_light_data.n_frames, + eEL_light_data.target_color.g, 0.0f); + b = (int)eEC_CLIP->calc_adjust_proc(eEL_light_data.ctr, eEL_light_data.max_frame, eEL_light_data.n_frames, + eEL_light_data.target_color.b, 0.0f); + + if (eEL_light_data.ctr == eEL_light_data.max_frame) { + eEL_light_data.light_state = eEC_LIGHT_COLOR_MAXIMUM; + } else { + eEL_light_data.light_state = eEC_LIGHT_COLOR_DECREASING; + } + } + + eEC_ctrl_work.light_info.lights.diffuse.color[0] = r; + eEC_ctrl_work.light_info.lights.diffuse.color[1] = g; + eEC_ctrl_work.light_info.lights.diffuse.color[2] = b; + eEL_light_data.ctr++; + } +} + +static void eEL_RegistEffectLight(rgba_t color, s16 max_frames, s16 n_frames, int shadow_flag) { + eEL_light_data.start_color.r = eEC_ctrl_work.light_info.lights.diffuse.color[0]; + eEL_light_data.start_color.g = eEC_ctrl_work.light_info.lights.diffuse.color[1]; + eEL_light_data.start_color.b = eEC_ctrl_work.light_info.lights.diffuse.color[2]; + + eEL_light_data.ctr = 0; + eEL_light_data.target_color = color; + eEL_light_data.max_frame = max_frames; + eEL_light_data.n_frames = n_frames; + eEL_light_data.shadow_flag = shadow_flag; +} + +static void eEL_DecideLightPower(rgba_t* result_color, rgba_t base_color, xyz_t pos, GAME* game, f32 max_power, + f32 min_power, f32 max_dist) { + GAME_PLAY* play = (GAME_PLAY*)game; + PLAYER_ACTOR* player = GET_PLAYER_ACTOR(play); + + if (player != NULL) { + xyz_t player_pos = player->actor_class.world.position; + f32 dist = search_position_distance(&pos, &player_pos); + f32 power; + + if (dist > max_dist) { + power = min_power; + } else { + power = (max_power - min_power) * (1.0f - dist / max_dist); + power += min_power; + } + + result_color->r = (int)(base_color.r * power); + result_color->g = (int)(base_color.g * power); + result_color->b = (int)(base_color.b * power); + result_color->a = 255; + } else { + *result_color = base_color; + } +} + +static int mEL_CheckLookAtBlock(xyz_t pos) { + xyz_t* lookat = Camera2_getCenterPos_p(); + int effect_bx; + int effect_bz; + int lookat_bx; + int lookat_bz; + + if (mFI_Wpos2BlockNum(&effect_bx, &effect_bz, pos) && mFI_Wpos2BlockNum(&lookat_bx, &lookat_bz, *lookat)) { + if (effect_bx == lookat_bx && effect_bz == lookat_bz) { + return TRUE; + } + } + + return FALSE; +} diff --git a/src/ef_lamp_light.c b/src/ef_lamp_light.c index ef0545cf..107d5c28 100644 --- a/src/ef_lamp_light.c +++ b/src/ef_lamp_light.c @@ -4,10 +4,9 @@ #include "m_common_data.h" #include "m_name_table.h" -static void Ef_Lamp_Light_actor_ct(ACTOR* actor, GAME_PLAY* game); -static void Ef_Lamp_Light_actor_dt(ACTOR* actor, GAME_PLAY* game); -static void Ef_Lamp_Light_actor_move(ACTOR* actor, GAME_PLAY* game); - +static void Ef_Lamp_Light_actor_ct(ACTOR* actor, GAME* game); +static void Ef_Lamp_Light_actor_dt(ACTOR* actor, GAME* game); +static void Ef_Lamp_Light_actor_move(ACTOR* actor, GAME* game); ACTOR_PROFILE Lamp_Light_Profile = { mAc_PROFILE_LAMP_LIGHT, @@ -16,51 +15,53 @@ ACTOR_PROFILE Lamp_Light_Profile = { EMPTY_NO, ACTOR_OBJ_BANK_KEEP, sizeof(LAMPLIGHT_ACTOR), - (mActor_proc)Ef_Lamp_Light_actor_ct, - (mActor_proc)Ef_Lamp_Light_actor_dt, + Ef_Lamp_Light_actor_ct, + Ef_Lamp_Light_actor_dt, (mActor_proc)Ef_Lamp_Light_actor_move, NONE_ACTOR_PROC, NULL, }; -static void Ef_Lamp_Light_actor_ct(ACTOR* actor, GAME_PLAY* play) { +static void Ef_Lamp_Light_actor_ct(ACTOR* actor, GAME* game) { LAMPLIGHT_ACTOR* lamp = (LAMPLIGHT_ACTOR*)actor; - + GAME_PLAY* play = (GAME_PLAY*)game; + play->kankyo.lamp_light = &lamp->lights; - Light_diffuse_ct(&lamp->lights, 0, 0x50, 0, 0, 0, 0); - lamp->node_p = Global_light_list_new(play, &play->global_light, &lamp->lights); + Light_diffuse_ct(&lamp->lights, 0, 0x50, 0, 0, 0, 0); + lamp->node_p = Global_light_list_new(game, &play->global_light, &lamp->lights); } -static void Ef_Lamp_Light_actor_dt(ACTOR* actor, GAME_PLAY* play) { +static void Ef_Lamp_Light_actor_dt(ACTOR* actor, GAME* game) { LAMPLIGHT_ACTOR* lamp = (LAMPLIGHT_ACTOR*)actor; + GAME_PLAY* play = (GAME_PLAY*)game; - play->kankyo.lamp_light = NULL; + play->kankyo.lamp_light = NULL; Global_light_list_delete(&play->global_light, lamp->node_p); } -static int eLL_get_light_sw_other_room(){ +static int eLL_get_light_sw_other_room() { int ret = 0; - //Not before 6 p.m or past 6 a.m - if((Common_Get(time.now_sec) < 21600) || (Common_Get(time.now_sec) >= 64800)){ + // Not before 6 p.m or past 6 a.m + if ((Common_Get(time.now_sec) < 21600) || (Common_Get(time.now_sec) >= 64800)) { ret = 1; } return ret; } -static int eLL_get_light_sw_player_room(){ - //6 p.m to 11 p.m - if((Common_Get(time.now_sec) >= 64800 ) && (Common_Get(time.now_sec) < 82800)){ +static int eLL_get_light_sw_player_room() { + // 6 p.m to 11 p.m + if ((Common_Get(time.now_sec) >= 64800) && (Common_Get(time.now_sec) < 82800)) { return 1; } return 0; } -static int eLL_get_light_sw_start_demo(){ +static int eLL_get_light_sw_start_demo() { int ret = 1; - - if(Common_Get(sunlight_flag) == 1){ + + if (Common_Get(sunlight_flag) == 1) { ret = 0; } @@ -100,18 +101,18 @@ static void eLL_ctrl_light_sw(LAMPLIGHT_ACTOR* lamp) { lamp->switch_type = ret; } -static void Ef_Lamp_Light_actor_move(ACTOR* actor, GAME_PLAY* play) { - static s16 add_data_off[] = {2, 2, 1, 0}; - static s16 add_data_on[] = {16, 16, 8, 0}; - static s16* add_data[] = { add_data_off, add_data_on}; +static void Ef_Lamp_Light_actor_move(ACTOR* actor, GAME* game) { + static s16 add_data_off[] = { 2, 2, 1, 0 }; + static s16 add_data_on[] = { 16, 16, 8, 0 }; + static s16* add_data[] = { add_data_off, add_data_on }; static s16 cmp_data_off[] = { 0, 0, 0, 0 }; static s16 cmp_data_on[] = { 0xC8, 0xC8, 0x96, 0 }; - static s16* cmp_data[] = { cmp_data_off, cmp_data_on}; + static s16* cmp_data[] = { cmp_data_off, cmp_data_on }; LAMPLIGHT_ACTOR* lamp = (LAMPLIGHT_ACTOR*)actor; s16 val; - u8* color; + u8* color; s16* add; int type; s16* cmp; @@ -128,4 +129,4 @@ static void Ef_Lamp_Light_actor_move(ACTOR* actor, GAME_PLAY* play) { chase_s(&val, *cmp, (0.5f * *add)); *color = val; } -} \ No newline at end of file +} diff --git a/src/m_kankyo.c b/src/m_kankyo.c index 257465c7..81e4da15 100644 --- a/src/m_kankyo.c +++ b/src/m_kankyo.c @@ -9,909 +9,897 @@ #define mEnv_TIME_TO_SECS(hour, min, sec) ((hour) * mTM_SECONDS_IN_HOUR + (min) * mTM_SECONDS_IN_MINUTE + (sec)) -static int klight_chg_time[mEnv_TERM_NUM + 1] = { - mEnv_TIME_TO_SECS(0, 0, 0), - mEnv_TIME_TO_SECS(4, 0, 0), - mEnv_TIME_TO_SECS(6, 0, 0), - mEnv_TIME_TO_SECS(8, 0, 0), - mEnv_TIME_TO_SECS(12, 0, 0), - mEnv_TIME_TO_SECS(16, 0, 0), - mEnv_TIME_TO_SECS(18, 0, 0), - mEnv_TIME_TO_SECS(20, 0, 0), - mEnv_TIME_TO_SECS(24, 0, 0) -}; +static int klight_chg_time[mEnv_TERM_NUM + 1] = { mEnv_TIME_TO_SECS(0, 0, 0), mEnv_TIME_TO_SECS(4, 0, 0), + mEnv_TIME_TO_SECS(6, 0, 0), mEnv_TIME_TO_SECS(8, 0, 0), + mEnv_TIME_TO_SECS(12, 0, 0), mEnv_TIME_TO_SECS(16, 0, 0), + mEnv_TIME_TO_SECS(18, 0, 0), mEnv_TIME_TO_SECS(20, 0, 0), + mEnv_TIME_TO_SECS(24, 0, 0) }; static BaseLight l_mEnv_kcolor_fine_data[mEnv_TERM_NUM] = { - /* 00:00 -> 03:59 */ - { - { 20, 10, 120 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 0, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 120, 180, 80 }, // moon color + /* 00:00 -> 03:59 */ + { + { 20, 10, 120 }, // ambient color - { 20, 20, 80 }, // fog color - 1799, // fog near - 1000, // fog far + { 73, 73, 73 }, // sun direction + { 0, 0, 0 }, // sun color - { 0, 0, 50 }, // shadow color - { 120, 160, 150 }, // room color - { 120, 160, 150 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 32, 92 } // background color - }, + { 73, 73, 73 }, // moon direction + { 120, 180, 80 }, // moon color - { - { 0, 10, 120 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 20, 40 }, // sun color - - { 73, 73, 73 }, // moon direction - { 150, 200, 100 }, // moon color + { 20, 20, 80 }, // fog color + 1799, // fog near + 1000, // fog far - { 80, 100, 120 }, // fog color - 1774, // fog near - 1000, // fog far + { 0, 0, 50 }, // shadow color + { 120, 160, 150 }, // room color + { 120, 160, 150 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 32, 92 } // background color + }, - { 0, 0, 60 }, // shadow color - { 140, 190, 190 }, // room color - { 150, 170, 170 }, // window sun color - { 230, 230, 120 }, // window moon color - { 44, 52, 112 } // background color - }, + { + { 0, 10, 120 }, // ambient color - { - { 60, 60, 120 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 255, 255, 200 }, // sun color - - { 73, 73, 73 }, // moon direction - { 10, 40, 60 }, // moon color + { 73, 73, 73 }, // sun direction + { 0, 20, 40 }, // sun color - { 120, 150, 150 }, // fog color - 1749, // fog near - 950, // fog far + { 73, 73, 73 }, // moon direction + { 150, 200, 100 }, // moon color - { 0, 10, 70 }, // shadow color - { 180, 210, 210 }, // room color - { 160, 180, 180 }, // window sun color - { 230, 230, 120 }, // window moon color - { 60, 76, 120 } // background color - }, + { 80, 100, 120 }, // fog color + 1774, // fog near + 1000, // fog far - { - { 80, 80, 150 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 180, 220, 220 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 10, 20 }, // moon color + { 0, 0, 60 }, // shadow color + { 140, 190, 190 }, // room color + { 150, 170, 170 }, // window sun color + { 230, 230, 120 }, // window moon color + { 44, 52, 112 } // background color + }, - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far + { + { 60, 60, 120 }, // ambient color - { 0, 20, 70 }, // shadow color - { 210, 240, 240 }, // room color - { 190, 220, 220 }, // window sun color - { 230, 230, 120 }, // window moon color - { 56, 72, 140 } // background color - }, + { 73, 73, 73 }, // sun direction + { 255, 255, 200 }, // sun color - { - { 80, 80, 150 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 200, 240, 240 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 0, 0 }, // moon color + { 73, 73, 73 }, // moon direction + { 10, 40, 60 }, // moon color - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far + { 120, 150, 150 }, // fog color + 1749, // fog near + 950, // fog far - { 0, 30, 70 }, // shadow color - { 220, 250, 250 }, // room color - { 210, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 52, 78, 144 } // background color - }, + { 0, 10, 70 }, // shadow color + { 180, 210, 210 }, // room color + { 160, 180, 180 }, // window sun color + { 230, 230, 120 }, // window moon color + { 60, 76, 120 } // background color + }, - { - { 80, 80, 150 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 200, 240, 240 }, // sun color - - { 73, 73, 73 }, // moon direction - { 10, 0, 30 }, // moon color + { + { 80, 80, 150 }, // ambient color - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far + { 73, 73, 73 }, // sun direction + { 180, 220, 220 }, // sun color - { 0, 30, 90 }, // shadow color - { 220, 250, 250 }, // room color - { 220, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 48, 72, 140 } // background color - }, + { 73, 73, 73 }, // moon direction + { 0, 10, 20 }, // moon color - { - { 60, 60, 150 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 200, 120, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 20, 0, 80 }, // moon color + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far + { 0, 20, 70 }, // shadow color + { 210, 240, 240 }, // room color + { 190, 220, 220 }, // window sun color + { 230, 230, 120 }, // window moon color + { 56, 72, 140 } // background color + }, - { 0, 10, 70 }, // shadow color - { 190, 120, 120 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 32, 32, 92 } // background color - }, + { + { 80, 80, 150 }, // ambient color - { - { 30, 30, 120 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 60, 60, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 120, 180, 80 }, // moon color + { 73, 73, 73 }, // sun direction + { 200, 240, 240 }, // sun color - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far + { 73, 73, 73 }, // moon direction + { 0, 0, 0 }, // moon color - { 0, 0, 60 }, // shadow color - { 130, 160, 160 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 28, 92 } // background color - } + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 70 }, // shadow color + { 220, 250, 250 }, // room color + { 210, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 52, 78, 144 } // background color + }, + + { + { 80, 80, 150 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 200, 240, 240 }, // sun color + + { 73, 73, 73 }, // moon direction + { 10, 0, 30 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 90 }, // shadow color + { 220, 250, 250 }, // room color + { 220, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 48, 72, 140 } // background color + }, + + { + { 60, 60, 150 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 200, 120, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 20, 0, 80 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 10, 70 }, // shadow color + { 190, 120, 120 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 32, 32, 92 } // background color + }, + + { + { 30, 30, 120 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 60, 60, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 120, 180, 80 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 0, 60 }, // shadow color + { 130, 160, 160 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 28, 92 } // background color + } }; -static BaseLight l_mEnv_kcolor_insect_fine_data[mEnv_TERM_NUM] = { - { - { 12, 6, 72 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 0, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 72, 108, 48 }, // moon color - - { 20, 20, 80 }, // fog color - 1799, // fog near - 1000, // fog far - - { 0, 0, 50 }, // shadow color - { 72, 96, 90 }, // room color - { 120, 160, 150 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 32, 92 } // background color - }, - - { - { 0, 6, 72 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 12, 24 }, // sun color - - { 73, 73, 73 }, // moon direction - { 90, 120, 60 }, // moon color - - { 80, 100, 120 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 0, 60 }, // shadow color - { 84, 114, 114 }, // room color - { 150, 170, 170 }, // window sun color - { 230, 230, 120 }, // window moon color - { 44, 52, 112 } // background color - }, - - { - { 36, 36, 72 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 153, 153, 120 }, // sun color - - { 73, 73, 73 }, // moon direction - { 6, 24, 36 }, // moon color - - { 120, 150, 150 }, // fog color - 1749, // fog near - 950, // fog far - - { 0, 10, 70 }, // shadow color - { 108, 126, 126 }, // room color - { 160, 180, 180 }, // window sun color - { 230, 230, 120 }, // window moon color - { 60, 76, 120 } // background color - }, - - { - { 80, 80, 150 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 180, 220, 220 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 10, 20 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 20, 70 }, // shadow color - { 210, 240, 240 }, // room color - { 190, 220, 220 }, // window sun color - { 230, 230, 120 }, // window moon color - { 56, 72, 140 } // background color - }, - - { - { 80, 80, 150 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 200, 240, 240 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 0, 0 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 30, 70 }, // shadow color - { 220, 250, 250 }, // room color - { 210, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 52, 78, 144 } // background color - }, - - { - { 80, 80, 150 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 200, 240, 240 }, // sun color - - { 73, 73, 73 }, // moon direction - { 10, 0, 30 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 30, 90 }, // shadow color - { 220, 250, 250 }, // room color - { 220, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 48, 72, 140 } // background color - }, - - { - { 36, 36, 90 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 120, 72, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 12, 0, 48 }, // moon color - - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 10, 70 }, // shadow color - { 114, 72, 72 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 32, 32, 92 } // background color - }, - - { - { 18, 18, 72 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 36, 36, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 72, 108, 48 }, // moon color - - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 0, 60 }, // shadow color - { 78, 96, 96 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 28, 92 } // background color - } -}; - -static BaseLight l_mEnv_kcolor_rain_data[mEnv_TERM_NUM] = { - { - { 18, 9, 108 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 0, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 108, 162, 72 }, // moon color - - { 20, 20, 80 }, // fog color - 1799, // fog near - 1000, // fog far - - { 0, 0, 50 }, // shadow color - { 108, 144, 135 }, // room color - { 120, 160, 150 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 32, 92 } // background color - }, - - { - { 0, 9, 108 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 18, 36 }, // sun color - - { 73, 73, 73 }, // moon direction - { 135, 180, 90 }, // moon color - - { 80, 100, 120 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 0, 60 }, // shadow color - { 126, 171, 171 }, // room color - { 150, 170, 170 }, // window sun color - { 230, 230, 120 }, // window moon color - { 44, 52, 112 } // background color - }, - - { - { 54, 54, 108 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 229, 229, 180 }, // sun color - - { 73, 73, 73 }, // moon direction - { 9, 36, 54 }, // moon color - - { 120, 150, 150 }, // fog color - 1749, // fog near - 950, // fog far - - { 0, 10, 70 }, // shadow color - { 162, 189, 189 }, // room color - { 160, 180, 180 }, // window sun color - { 230, 230, 120 }, // window moon color - { 60, 76, 120 } // background color - }, - - { - { 72, 72, 135 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 162, 198, 198 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 9, 18 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 20, 70 }, // shadow color - { 189, 216, 216 }, // room color - { 190, 220, 220 }, // window sun color - { 230, 230, 120 }, // window moon color - { 56, 72, 140 } // background color - }, - - { - { 72, 72, 135 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 180, 216, 216 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 0, 0 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 30, 70 }, // shadow color - { 198, 225, 225 }, // room color - { 210, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 52, 78, 144 } // background color - }, - - { - { 72, 72, 135 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 180, 216, 216 }, // sun color - - { 73, 73, 73 }, // moon direction - { 9, 0, 27 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 30, 90 }, // shadow color - { 198, 225, 225 }, // room color - { 220, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 48, 72, 140 } // background color - }, - - { - { 54, 54, 135 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 180, 108, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 18, 0, 72 }, // moon color - - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 10, 70 }, // shadow color - { 171, 108, 108 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 32, 32, 92 } // background color - }, - - { - { 27, 27, 108 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 54, 54, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 108, 162, 72 }, // moon color - - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 0, 60 }, // shadow color - { 117, 144, 144 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 28, 92 } // background color - } -}; - -static BaseLight l_mEnv_kcolor_insect_rain_data[mEnv_TERM_NUM] = { - { - { 10, 5, 64 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 0, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 64, 97, 43 }, // moon color - - { 20, 20, 80 }, // fog color - 1799, // fog near - 1000, // fog far - - { 0, 0, 50 }, // shadow color - { 64, 86, 81 }, // room color - { 120, 160, 150 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 32, 92 } // background color - }, - - { - { 0, 5, 64 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 0, 10, 21 }, // sun color - - { 73, 73, 73 }, // moon direction - { 81, 108, 54 }, // moon color - - { 80, 100, 120 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 0, 60 }, // shadow color - { 75, 102, 102 }, // room color - { 150, 170, 170 }, // window sun color - { 230, 230, 120 }, // window moon color - { 44, 52, 112 } // background color - }, - - { - { 32, 32, 64 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 137, 137, 108 }, // sun color - - { 73, 73, 73 }, // moon direction - { 5, 21, 32 }, // moon color - - { 120, 150, 150 }, // fog color - 1749, // fog near - 950, // fog far - - { 0, 10, 70 }, // shadow color - { 97, 113, 113 }, // room color - { 160, 180, 180 }, // window sun color - { 230, 230, 120 }, // window moon color - { 60, 76, 120 } // background color - }, - - { - { 72, 72, 135 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 162, 198, 198 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 9, 18 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 20, 70 }, // shadow color - { 189, 216, 216 }, // room color - { 190, 220, 220 }, // window sun color - { 230, 230, 120 }, // window moon color - { 56, 72, 140 } // background color - }, - - { - { 72, 72, 135 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 180, 216, 216 }, // sun color - - { 73, 73, 73 }, // moon direction - { 0, 0, 0 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 30, 70 }, // shadow color - { 198, 225, 225 }, // room color - { 210, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 52, 78, 144 } // background color - }, - - { - { 72, 72, 135 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 180, 216, 216 }, // sun color - - { 73, 73, 73 }, // moon direction - { 9, 0, 27 }, // moon color - - { 80, 120, 150 }, // fog color - 1749, // fog near - 1000, // fog far - - { 0, 30, 90 }, // shadow color - { 198, 225, 225 }, // room color - { 220, 240, 240 }, // window sun color - { 230, 230, 120 }, // window moon color - { 48, 72, 140 } // background color - }, - - { - { 32, 32, 81 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 108, 64, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 10, 0, 43 }, // moon color - - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 10, 70 }, // shadow color - { 102, 64, 64 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 32, 32, 92 } // background color - }, - - { - { 16, 16, 64 }, // ambient color - - { 73, 73, 73 }, // sun direction - { 32, 32, 0 }, // sun color - - { 73, 73, 73 }, // moon direction - { 64, 97, 43 }, // moon color - - { 20, 20, 80 }, // fog color - 1774, // fog near - 1000, // fog far - - { 0, 0, 60 }, // shadow color - { 70, 86, 86 }, // room color - { 180, 120, 120 }, // window sun color - { 230, 230, 120 }, // window moon color - { 28, 28, 92 } // background color - } -}; +static BaseLight l_mEnv_kcolor_insect_fine_data[mEnv_TERM_NUM] = { { + { 12, 6, 72 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 0, 0, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 72, 108, 48 }, // moon color + + { 20, 20, 80 }, // fog color + 1799, // fog near + 1000, // fog far + + { 0, 0, 50 }, // shadow color + { 72, 96, 90 }, // room color + { 120, 160, 150 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 32, 92 } // background color + }, + + { + { 0, 6, 72 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 0, 12, 24 }, // sun color + + { 73, 73, 73 }, // moon direction + { 90, 120, 60 }, // moon color + + { 80, 100, 120 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 0, 60 }, // shadow color + { 84, 114, 114 }, // room color + { 150, 170, 170 }, // window sun color + { 230, 230, 120 }, // window moon color + { 44, 52, 112 } // background color + }, + + { + { 36, 36, 72 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 153, 153, 120 }, // sun color + + { 73, 73, 73 }, // moon direction + { 6, 24, 36 }, // moon color + + { 120, 150, 150 }, // fog color + 1749, // fog near + 950, // fog far + + { 0, 10, 70 }, // shadow color + { 108, 126, 126 }, // room color + { 160, 180, 180 }, // window sun color + { 230, 230, 120 }, // window moon color + { 60, 76, 120 } // background color + }, + + { + { 80, 80, 150 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 180, 220, 220 }, // sun color + + { 73, 73, 73 }, // moon direction + { 0, 10, 20 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 20, 70 }, // shadow color + { 210, 240, 240 }, // room color + { 190, 220, 220 }, // window sun color + { 230, 230, 120 }, // window moon color + { 56, 72, 140 } // background color + }, + + { + { 80, 80, 150 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 200, 240, 240 }, // sun color + + { 73, 73, 73 }, // moon direction + { 0, 0, 0 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 70 }, // shadow color + { 220, 250, 250 }, // room color + { 210, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 52, 78, 144 } // background color + }, + + { + { 80, 80, 150 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 200, 240, 240 }, // sun color + + { 73, 73, 73 }, // moon direction + { 10, 0, 30 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 90 }, // shadow color + { 220, 250, 250 }, // room color + { 220, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 48, 72, 140 } // background color + }, + + { + { 36, 36, 90 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 120, 72, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 12, 0, 48 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 10, 70 }, // shadow color + { 114, 72, 72 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 32, 32, 92 } // background color + }, + + { + { 18, 18, 72 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 36, 36, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 72, 108, 48 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 0, 60 }, // shadow color + { 78, 96, 96 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 28, 92 } // background color + } }; + +static BaseLight l_mEnv_kcolor_rain_data[mEnv_TERM_NUM] = { { + { 18, 9, 108 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 0, 0, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 108, 162, 72 }, // moon color + + { 20, 20, 80 }, // fog color + 1799, // fog near + 1000, // fog far + + { 0, 0, 50 }, // shadow color + { 108, 144, 135 }, // room color + { 120, 160, 150 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 32, 92 } // background color + }, + + { + { 0, 9, 108 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 0, 18, 36 }, // sun color + + { 73, 73, 73 }, // moon direction + { 135, 180, 90 }, // moon color + + { 80, 100, 120 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 0, 60 }, // shadow color + { 126, 171, 171 }, // room color + { 150, 170, 170 }, // window sun color + { 230, 230, 120 }, // window moon color + { 44, 52, 112 } // background color + }, + + { + { 54, 54, 108 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 229, 229, 180 }, // sun color + + { 73, 73, 73 }, // moon direction + { 9, 36, 54 }, // moon color + + { 120, 150, 150 }, // fog color + 1749, // fog near + 950, // fog far + + { 0, 10, 70 }, // shadow color + { 162, 189, 189 }, // room color + { 160, 180, 180 }, // window sun color + { 230, 230, 120 }, // window moon color + { 60, 76, 120 } // background color + }, + + { + { 72, 72, 135 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 162, 198, 198 }, // sun color + + { 73, 73, 73 }, // moon direction + { 0, 9, 18 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 20, 70 }, // shadow color + { 189, 216, 216 }, // room color + { 190, 220, 220 }, // window sun color + { 230, 230, 120 }, // window moon color + { 56, 72, 140 } // background color + }, + + { + { 72, 72, 135 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 180, 216, 216 }, // sun color + + { 73, 73, 73 }, // moon direction + { 0, 0, 0 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 70 }, // shadow color + { 198, 225, 225 }, // room color + { 210, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 52, 78, 144 } // background color + }, + + { + { 72, 72, 135 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 180, 216, 216 }, // sun color + + { 73, 73, 73 }, // moon direction + { 9, 0, 27 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 90 }, // shadow color + { 198, 225, 225 }, // room color + { 220, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 48, 72, 140 } // background color + }, + + { + { 54, 54, 135 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 180, 108, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 18, 0, 72 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 10, 70 }, // shadow color + { 171, 108, 108 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 32, 32, 92 } // background color + }, + + { + { 27, 27, 108 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 54, 54, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 108, 162, 72 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 0, 60 }, // shadow color + { 117, 144, 144 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 28, 92 } // background color + } }; + +static BaseLight l_mEnv_kcolor_insect_rain_data[mEnv_TERM_NUM] = { { + { 10, 5, 64 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 0, 0, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 64, 97, 43 }, // moon color + + { 20, 20, 80 }, // fog color + 1799, // fog near + 1000, // fog far + + { 0, 0, 50 }, // shadow color + { 64, 86, 81 }, // room color + { 120, 160, 150 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 32, 92 } // background color + }, + + { + { 0, 5, 64 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 0, 10, 21 }, // sun color + + { 73, 73, 73 }, // moon direction + { 81, 108, 54 }, // moon color + + { 80, 100, 120 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 0, 60 }, // shadow color + { 75, 102, 102 }, // room color + { 150, 170, 170 }, // window sun color + { 230, 230, 120 }, // window moon color + { 44, 52, 112 } // background color + }, + + { + { 32, 32, 64 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 137, 137, 108 }, // sun color + + { 73, 73, 73 }, // moon direction + { 5, 21, 32 }, // moon color + + { 120, 150, 150 }, // fog color + 1749, // fog near + 950, // fog far + + { 0, 10, 70 }, // shadow color + { 97, 113, 113 }, // room color + { 160, 180, 180 }, // window sun color + { 230, 230, 120 }, // window moon color + { 60, 76, 120 } // background color + }, + + { + { 72, 72, 135 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 162, 198, 198 }, // sun color + + { 73, 73, 73 }, // moon direction + { 0, 9, 18 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 20, 70 }, // shadow color + { 189, 216, 216 }, // room color + { 190, 220, 220 }, // window sun color + { 230, 230, 120 }, // window moon color + { 56, 72, 140 } // background color + }, + + { + { 72, 72, 135 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 180, 216, 216 }, // sun color + + { 73, 73, 73 }, // moon direction + { 0, 0, 0 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 70 }, // shadow color + { 198, 225, 225 }, // room color + { 210, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 52, 78, 144 } // background color + }, + + { + { 72, 72, 135 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 180, 216, 216 }, // sun color + + { 73, 73, 73 }, // moon direction + { 9, 0, 27 }, // moon color + + { 80, 120, 150 }, // fog color + 1749, // fog near + 1000, // fog far + + { 0, 30, 90 }, // shadow color + { 198, 225, 225 }, // room color + { 220, 240, 240 }, // window sun color + { 230, 230, 120 }, // window moon color + { 48, 72, 140 } // background color + }, + + { + { 32, 32, 81 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 108, 64, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 10, 0, 43 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 10, 70 }, // shadow color + { 102, 64, 64 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 32, 32, 92 } // background color + }, + + { + { 16, 16, 64 }, // ambient color + + { 73, 73, 73 }, // sun direction + { 32, 32, 0 }, // sun color + + { 73, 73, 73 }, // moon direction + { 64, 97, 43 }, // moon color + + { 20, 20, 80 }, // fog color + 1774, // fog near + 1000, // fog far + + { 0, 0, 60 }, // shadow color + { 70, 86, 86 }, // room color + { 180, 120, 120 }, // window sun color + { 230, 230, 120 }, // window moon color + { 28, 28, 92 } // background color + } }; static BaseLight l_mEnv_kcolor_data_p_sel = { - { 30, 30, 80 }, // ambient color - - { 0, 89, 79 }, // sun direction - { 255, 255, 200 }, // sun color - - { 0, 185, 160 }, // moon direction - { 0, 0, 0 }, // moon color + { 30, 30, 80 }, // ambient color - { 100, 100, 120 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 89, 79 }, // sun direction + { 255, 255, 200 }, // sun color - { 0, 30, 70 }, // shadow color - { 255, 255, 255 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 185, 160 }, // moon direction + { 0, 0, 0 }, // moon color + + { 100, 100, 120 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 30, 70 }, // shadow color + { 255, 255, 255 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_shop = { - { 20, 10, 100 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 150, 160, 130 }, // sun color - - { 0, 223, 115 }, // moon direction - { 50, 40, 20 }, // moon color + { 20, 10, 100 }, // ambient color - { 100, 100, 120 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 150, 160, 130 }, // sun color - { 0, 30, 70 }, // shadow color - { 255, 255, 255 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 50, 40, 20 }, // moon color + + { 100, 100, 120 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 30, 70 }, // shadow color + { 255, 255, 255 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_buggy = { - { 30, 30, 30 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 0, 0, 0 }, // sun color - - { 0, 223, 115 }, // moon direction - { 0, 60, 90 }, // moon color + { 30, 30, 30 }, // ambient color - { 100, 100, 120 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 0, 0, 0 }, // sun color - { 0, 20, 30 }, // shadow color - { 175, 175, 155 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 0, 60, 90 }, // moon color + + { 100, 100, 120 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 20, 30 }, // shadow color + { 175, 175, 155 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_broker = { - { 20, 30, 40 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 100, 80, 80 }, // sun color - - { 0, 223, 115 }, // moon direction - { 20, 10, 0 }, // moon color + { 20, 30, 40 }, // ambient color - { 100, 100, 120 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 100, 80, 80 }, // sun color - { 0, 0, 20 }, // shadow color - { 140, 120, 120 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 20, 10, 0 }, // moon color + + { 100, 100, 120 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 0, 20 }, // shadow color + { 140, 120, 120 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_kamakura = { - { 50, 25, 20 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 50, 40, 5 }, // sun color - - { 0, 223, 115 }, // moon direction - { 50, 80, 85 }, // moon color + { 50, 25, 20 }, // ambient color - { 100, 100, 120 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 50, 40, 5 }, // sun color - { 40, 50, 80 }, // shadow color - { 250, 240, 160 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 50, 80, 85 }, // moon color + + { 100, 100, 120 }, // fog color + 2000, // fog near + 1280, // fog far + + { 40, 50, 80 }, // shadow color + { 250, 240, 160 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_museum_fossil = { - { 50, 50, 60 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 60, 60, 80 }, // sun color - - { 0, 223, 115 }, // moon direction - { 20, 10, 0 }, // moon color + { 50, 50, 60 }, // ambient color - { 0, 0, 0 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 60, 60, 80 }, // sun color - { 0, 10, 60 }, // shadow color - { 255, 255, 255 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 20, 10, 0 }, // moon color + + { 0, 0, 0 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 10, 60 }, // shadow color + { 255, 255, 255 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_museum_fish = { - { 40, 50, 60 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 20, 30, 40 }, // sun color - - { 0, 223, 115 }, // moon direction - { 0, 10, 20 }, // moon color + { 40, 50, 60 }, // ambient color - { 0, 0, 0 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 20, 30, 40 }, // sun color - { 0, 20, 30 }, // shadow color - { 120, 90, 100 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 0, 10, 20 }, // moon color + + { 0, 0, 0 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 20, 30 }, // shadow color + { 120, 90, 100 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_museum_picture = { - { 30, 30, 60 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 120, 100, 80 }, // sun color - - { 0, 223, 115 }, // moon direction - { 0, 10, 20 }, // moon color + { 30, 30, 60 }, // ambient color - { 0, 0, 0 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 120, 100, 80 }, // sun color - { 0, 10, 50 }, // shadow color - { 255, 255, 255 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 0, 10, 20 }, // moon color + + { 0, 0, 0 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 10, 50 }, // shadow color + { 255, 255, 255 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_basement = { - { 35, 30, 25 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 0, 0, 0 }, // sun color - - { 0, 223, 115 }, // moon direction - { 0, 0, 0 }, // moon color + { 35, 30, 25 }, // ambient color - { 0, 0, 0 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 0, 0, 0 }, // sun color - { 0, 5, 10 }, // shadow color - { 53, 53, 33 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 22, 27, 94 } // background color + { 0, 223, 115 }, // moon direction + { 0, 0, 0 }, // moon color + + { 0, 0, 0 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 5, 10 }, // shadow color + { 53, 53, 33 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 22, 27, 94 } // background color }; static BaseLight l_mEnv_kcolor_lighthouse = { - { 35, 30, 25 }, // ambient color - - { 0, 69, 97 }, // sun direction - { 0, 0, 0 }, // sun color - - { 0, 223, 115 }, // moon direction - { 0, 0, 0 }, // moon color + { 35, 30, 25 }, // ambient color - { 0, 0, 0 }, // fog color - 2000, // fog near - 1280, // fog far + { 0, 69, 97 }, // sun direction + { 0, 0, 0 }, // sun color - { 0, 20, 30 }, // shadow color - { 135, 125, 105 }, // room color - { 0, 0, 0 }, // window sun color - { 0, 0, 0 }, // window moon color - { 0, 0, 0 } // background color + { 0, 223, 115 }, // moon direction + { 0, 0, 0 }, // moon color + + { 0, 0, 0 }, // fog color + 2000, // fog near + 1280, // fog far + + { 0, 20, 30 }, // shadow color + { 135, 125, 105 }, // room color + { 0, 0, 0 }, // window sun color + { 0, 0, 0 }, // window moon color + { 0, 0, 0 } // background color }; static BaseLight* l_mEnv_normal_kcolor_data[4] = { - l_mEnv_kcolor_fine_data, /* clear */ - l_mEnv_kcolor_rain_data, /* rain */ - l_mEnv_kcolor_rain_data, /* snow */ - l_mEnv_kcolor_fine_data /* cherry blossoms */ + l_mEnv_kcolor_fine_data, /* clear */ + l_mEnv_kcolor_rain_data, /* rain */ + l_mEnv_kcolor_rain_data, /* snow */ + l_mEnv_kcolor_fine_data /* cherry blossoms */ }; static BaseLight* l_mEnv_normal_kcolor_insect_data[4] = { - l_mEnv_kcolor_insect_fine_data, /* clear */ - l_mEnv_kcolor_insect_rain_data, /* rain */ - l_mEnv_kcolor_insect_rain_data, /* snow */ - l_mEnv_kcolor_insect_fine_data /* cherry blossoms */ + l_mEnv_kcolor_insect_fine_data, /* clear */ + l_mEnv_kcolor_insect_rain_data, /* rain */ + l_mEnv_kcolor_insect_rain_data, /* snow */ + l_mEnv_kcolor_insect_fine_data /* cherry blossoms */ }; typedef struct electric_light_s { - f32 point_light_percent; - u8 point_light_color[3]; - s16 _08; - s16 now_weather; - s16 next_weather; - f32 change_weather_env_rate; - s16 light_animating_on; - s16 light_anime_frame; - int point_light_on_type; - int point_light_off_type; - f32 point_light_off_step; - s16 point_light_is_flame; /* flickering effect when non-zero */ - f32 staffroll_fade_rate; - f32 sun_percent; - f32 shadow_adjust; - f32 windowlight_alpha; - Light_list* current_point_light; - s16 add_moon_color[3]; - Light_list* point_light_list_buf[mEnv_POINT_LIGHT_NUM]; - Lights point_lights[mEnv_POINT_LIGHT_NUM]; - int switch_status; - f32 point_light_min; - f32 diffuse_light_effect_rate; - s16 _98; - s16 shadow_alpha; - f32 diffuse_adjust; - u8 shadow_alpha_adjust; + f32 point_light_percent; + u8 point_light_color[3]; + s16 _08; + s16 now_weather; + s16 next_weather; + f32 change_weather_env_rate; + s16 light_animating_on; + s16 light_anime_frame; + int point_light_on_type; + int point_light_off_type; + f32 point_light_off_step; + s16 point_light_is_flame; /* flickering effect when non-zero */ + f32 staffroll_fade_rate; + f32 sun_percent; + f32 shadow_adjust; + f32 windowlight_alpha; + Light_list* current_point_light; + s16 add_moon_color[3]; + Light_list* point_light_list_buf[mEnv_POINT_LIGHT_NUM]; + Lights point_lights[mEnv_POINT_LIGHT_NUM]; + int switch_status; + f32 point_light_min; + f32 diffuse_light_effect_rate; + s16 _98; + s16 shadow_alpha; + f32 diffuse_adjust; + u8 shadow_alpha_adjust; } mEnv_electric_light_c; static mEnv_electric_light_c l_mEnv_electric_light; @@ -923,1614 +911,1543 @@ static void mEnv_InitWind(); static int mEnv_Pointlight_on_check(); static f32 mEnv_DiffuseLightEffectRate() { - if (mRmTp_GetNowSceneLightSwitchIndex() != -1) { - if ( - !mSc_IS_SCENE_BASEMENT(Save_Get(scene_no)) && - Save_Get(scene_no) != SCENE_LIGHTHOUSE && - Save_Get(scene_no) != SCENE_TENT - ) { - return 0.7f; + if (mRmTp_GetNowSceneLightSwitchIndex() != -1) { + if (!mSc_IS_SCENE_BASEMENT(Save_Get(scene_no)) && Save_Get(scene_no) != SCENE_LIGHTHOUSE && + Save_Get(scene_no) != SCENE_TENT) { + return 0.7f; + } } - } - return l_mEnv_electric_light.diffuse_light_effect_rate; + return l_mEnv_electric_light.diffuse_light_effect_rate; } #include "../src/m_kankyo_weather.c_inc" extern void mEnv_regist_nature(Kankyo* kankyo, NATURE_PROC nature_proc, void* arg) { - kankyo->nature.proc = nature_proc; - kankyo->nature.arg = arg; + kankyo->nature.proc = nature_proc; + kankyo->nature.arg = arg; } extern int mEnv_unregist_nature(Kankyo* kankyo, NATURE_PROC nature_proc) { - int res = FALSE; + int res = FALSE; - if (nature_proc == kankyo->nature.proc) { - mEnv_regist_nature(kankyo, (NATURE_PROC)&none_proc1, NULL); - res = TRUE; - } + if (nature_proc == kankyo->nature.proc) { + mEnv_regist_nature(kankyo, (NATURE_PROC)&none_proc1, NULL); + res = TRUE; + } - return res; + return res; } static int mEnv_GetNowRoomPointLightInfo(GAME_PLAY* play, s_xyz* pos, u8* color, s16* power, s16* is_flame) { - int res = TRUE; + int res = TRUE; - switch (Common_Get(field_draw_type)) { - case FIELD_DRAW_TYPE_INDOORS: - { - color[0] = 160; // r - color[1] = 160; // g - color[2] = 160; // b - power[0] = 1000; + switch (Common_Get(field_draw_type)) { + case FIELD_DRAW_TYPE_INDOORS: { + color[0] = 160; // r + color[1] = 160; // g + color[2] = 160; // b + power[0] = 1000; - switch (Save_Get(scene_no)) { - case SCENE_MY_ROOM_S: - { - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b + switch (Save_Get(scene_no)) { + case SCENE_MY_ROOM_S: { + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b - pos->x = 120; - pos->y = 180; - pos->z = 180; + pos->x = 120; + pos->y = 180; + pos->z = 180; - break; + break; + } + + case SCENE_MY_ROOM_M: + case SCENE_MY_ROOM_LL2: { + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b + + pos->x = 160; + pos->y = 180; + pos->z = 240; + + break; + } + + case SCENE_SHOP0: + case SCENE_POST_OFFICE: { + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b + + pos->x = 160; + pos->y = 180; + pos->z = 240; + + break; + } + + case SCENE_NPC_HOUSE: + case SCENE_COTTAGE_NPC: { + pos->x = 160; + pos->y = 180; + pos->z = 240; + + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b + + break; + } + + case SCENE_BUGGY: { + pos->x = 160; + pos->y = 80; + pos->z = 200; + + color[0] = 205; // r + color[1] = 165; // g + color[2] = 110; // b + + power[0] = 155; + is_flame[0] = TRUE; + + break; + } + + case SCENE_MY_ROOM_BASEMENT_S: + case SCENE_MY_ROOM_BASEMENT_M: + case SCENE_MY_ROOM_BASEMENT_L: + case SCENE_MY_ROOM_BASEMENT_LL1: { + color[0] = 220; // r + color[1] = 190; // g + color[2] = 190; // b + + pos->x = 200; + pos->y = 220; + pos->z = 300; + + break; + } + + case SCENE_MY_ROOM_L: + case SCENE_MY_ROOM_LL1: + case SCENE_COTTAGE_MY: { + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b + + pos->x = 200; + pos->y = 220; + pos->z = 300; + + break; + } + + case SCENE_POLICE_BOX: { + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b + + pos->x = 200; + pos->y = 220; + pos->z = 300; + + break; + } + + case SCENE_KAMAKURA: { + pos->x = 160; + pos->y = 80; + pos->z = 38; + + color[0] = 250; // r + color[1] = 240; // g + color[2] = 120; // b + + power[0] = 300; + is_flame[0] = TRUE; + + break; + } + + case SCENE_MUSEUM_ENTRANCE: { + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b + + pos->x = 240; + pos->y = 220; + pos->z = 280; + + break; + } + + case SCENE_MUSEUM_ROOM_PAINTING: { + color[0] = 180; // r + color[1] = 180; // g + color[2] = 150; // b + + pos->x = 320; + pos->y = 220; + pos->z = 280; + + power[0] = 800; + + break; + } + + case SCENE_MUSEUM_ROOM_FOSSIL: { + color[0] = 200; // r + color[1] = 200; // g + color[2] = 180; // b + + pos->x = 320; + pos->y = 220; + pos->z = 280; + + power[0] = 800; + + break; + } + + case SCENE_MUSEUM_ROOM_INSECT: { + color[0] = 50; // r + color[1] = 50; // g + color[2] = 50; // b + + pos->x = 280; + pos->y = 220; + pos->z = 320; + + break; + } + + case SCENE_MUSEUM_ROOM_FISH: { + pos->x = 320; + pos->y = 220; + pos->z = 320; + + color[0] = 100; // r + color[1] = 120; // g + color[2] = 130; // b + + break; + } + + case SCENE_NEEDLEWORK: { + color[0] = 220; // r + color[1] = 220; // g + color[2] = 200; // b + + pos->x = 200; + pos->y = 160; + pos->z = 280; + + break; + } + + case SCENE_LIGHTHOUSE: { + pos->x = 120; + pos->y = 80; + pos->z = 160; + + color[0] = 235; // r + color[1] = 190; // g + color[2] = 185; // b + + power[0] = 6000; + + break; + } + + case SCENE_TENT: { + pos->x = 120; + pos->y = 80; + pos->z = 120; + + color[0] = 235; // r + color[1] = 190; // g + color[2] = 185; // b + + power[0] = 6000; + + break; + } + + case SCENE_BROKER_SHOP: { + color[0] = 170; // r + color[1] = 170; // g + color[2] = 160; // b + + pos->x = 250; + pos->y = 1000; + pos->z = 378; + + power[0] = 8000; + + break; + } + + default: { + pos->x = 250; + pos->y = 1000; + pos->z = 378; + + power[0] = 8000; + + break; + } + } + + break; } - case SCENE_MY_ROOM_M: - case SCENE_MY_ROOM_LL2: - { - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b + case FIELD_DRAW_TYPE_TRAIN: { + switch (Save_Get(scene_no)) { + case SCENE_START_DEMO: + case SCENE_START_DEMO3: { + Common_Set(sunlight_flag, FALSE); - pos->x = 160; - pos->y = 180; - pos->z = 240; + break; + } + } - break; + l_mEnv_electric_light.sun_percent = 0.0f; + + pos->x = 80; + pos->y = 120; + pos->z = 510; + + color[0] = 255; + color[1] = 255; + color[2] = 160; + + power[0] = 1200; + + break; } - case SCENE_SHOP0: - case SCENE_POST_OFFICE: - { - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b + default: + res = FALSE; + break; + } - pos->x = 160; - pos->y = 180; - pos->z = 240; + return res; +} - break; +static void mEnv_RoomTypePointLightSet(GAME* game) { + GAME_PLAY* play = (GAME_PLAY*)game; + s_xyz pos; + u8 color[3]; + s16 power; + int light_switch; + + if (Save_Get(scene_no) == SCENE_TITLE_DEMO) { + mRmTp_SetDefaultLightSwitchData(FALSE); + mRmTp_IndexLightSwitchOFF(mRmTp_LIGHT_SWITCH_9); + } else if (Save_Get(scene_no) == SCENE_NPC_HOUSE || Save_Get(scene_no) == SCENE_COTTAGE_NPC) { + if (mEnv_CheckNpcRoomPointLightNiceStatus() == FALSE) { + mRmTp_IndexLightSwitchOFF(mRmTp_LIGHT_SWITCH_NPC); + } else { + mRmTp_IndexLightSwitchON(mRmTp_LIGHT_SWITCH_NPC); + } + } + + l_mEnv_electric_light.point_light_is_flame = FALSE; + l_mEnv_electric_light.point_light_percent = 0.0f; + + if (mEnv_GetNowRoomPointLightInfo(play, &pos, color, &power, &l_mEnv_electric_light.point_light_is_flame) == TRUE) { + Light_point_ct(&play->kankyo.point_light, pos.x, pos.y, pos.z, color[0], color[1], color[2], power); + l_mEnv_electric_light.point_light_color[0] = color[0]; + l_mEnv_electric_light.point_light_color[1] = color[1]; + l_mEnv_electric_light.point_light_color[2] = color[2]; + l_mEnv_electric_light.current_point_light = + Global_light_list_new(game, &play->global_light, &play->kankyo.point_light); + + light_switch = mRmTp_GetNowSceneLightSwitchIndex(); + + if (light_switch != -1) { + int switch_status = mRmTp_Index2LightSwitchStatus(light_switch); + + l_mEnv_electric_light.point_light_percent = + switch_status != 0 ? 1.0f : l_mEnv_electric_light.point_light_min; + } else { + l_mEnv_electric_light.point_light_percent = 1.0f; + } + } +} + +static void mEnv_RoomTypediffuseLightSet(GAME* game, Kankyo* kankyo) { + GAME_PLAY* play = (GAME_PLAY*)game; + + Light_diffuse_ct(&kankyo->sun_light, 1, 0, 0, 0, 0, 0); + Global_light_list_new(game, &play->global_light, &kankyo->sun_light); + + Light_diffuse_ct(&kankyo->moon_light, 1, 0, 0, 0, 0, 0); + Global_light_list_new(game, &play->global_light, &kankyo->moon_light); +} + +static void mEnv_RoomTypeLightSet(GAME* game, Kankyo* kankyo) { + mEnv_RoomTypePointLightSet(game); + mEnv_RoomTypediffuseLightSet(game, kankyo); +} + +static void mEnv_rainbow_check_set() { + if (mFI_CheckFieldData() != FALSE && mFI_GET_TYPE(mFI_GetFieldId()) == mFI_FIELD_FG && mEv_CheckTitleDemo() <= 0) { + if (Save_Get(rainbow_reserved)) { + if (Common_Get(time).rtc_time.month == Save_Get(rainbow_month) && + Common_Get(time).rtc_time.day == Save_Get(rainbow_day)) { + int now_sec = Common_Get(time).now_sec; + if (now_sec >= mEnv_RAINBOW_TIME_START && now_sec < mEnv_RAINBOW_TIME_END) { + Save_Set(rainbow_reserved, FALSE); + + if (Common_Get(time).season == mTM_SEASON_SUMMER) { + Common_Set(rainbow_opacity, 1.0f); + } + } + } else { + Save_Set(rainbow_reserved, FALSE); + } + } else if (Common_Get(rainbow_opacity) > 0.0f) { + if (Common_Get(time).rtc_time.month != Save_Get(rainbow_month) || + Common_Get(time).rtc_time.day != Save_Get(rainbow_day) || + Common_Get(time).now_sec < + mEnv_RAINBOW_TIME_START || // might need to break out time.now_sec into its own variable + Common_Get(time).now_sec >= mEnv_RAINBOW_TIME_BYE || + Common_Get(time).season != mTM_SEASON_SUMMER) { + Common_Set(rainbow_opacity, 0.0f); + } + } + } +} + +extern void Global_kankyo_ct(GAME* game, Kankyo* kankyo) { + GAME_PLAY* play = (GAME_PLAY*)game; + + bzero(&l_mEnv_electric_light, sizeof(l_mEnv_electric_light)); + mRmTp_IndexLightSwitchOFF(mRmTp_LIGHT_SWITCH_NPC); + + l_mEnv_electric_light.staffroll_fade_rate = 1.0f; + l_mEnv_electric_light.shadow_adjust = 1.0f; + l_mEnv_electric_light.sun_percent = 1.0f; + l_mEnv_electric_light.current_point_light = NULL; + + if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_INSECT) { + l_mEnv_electric_light.diffuse_adjust = 0.5f; + } else { + l_mEnv_electric_light.diffuse_adjust = 0.4f; + } + + if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_INSECT) { + l_mEnv_electric_light.shadow_alpha_adjust = 100; + } else { + l_mEnv_electric_light.shadow_alpha_adjust = 150; + } + + l_mEnv_electric_light.change_weather_env_rate = 0.0f; + + switch (Save_Get(scene_no)) { + case SCENE_LIGHTHOUSE: + case SCENE_TENT: { + l_mEnv_electric_light.point_light_min = 0.14f; + break; } - case SCENE_NPC_HOUSE: - case SCENE_COTTAGE_NPC: - { - pos->x = 160; - pos->y = 180; - pos->z = 240; + default: { + l_mEnv_electric_light.point_light_min = 0.14f; + break; + } + } - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b + l_mEnv_electric_light.diffuse_light_effect_rate = 1.0f; - break; + bzero(kankyo, sizeof(Kankyo)); + SETREG(MYKREG, 28, 100); + Common_Set(transition._00, 0); + mEnv_set_time(kankyo); + kankyo->countdown_timer = 0xFF; + mEnv_RoomTypeLightSet(game, kankyo); + mEnv_regist_nature(kankyo, (NATURE_PROC)none_proc1, NULL); + mEnv_MakeWindowLightAlpha(FALSE); + mEnv_InitWind(); + l_mEnv_electric_light.switch_status = + (u8)mEnv_Pointlight_on_check() ? mEnv_SWITCH_STATUS_TURNING_OFF : mEnv_SWITCH_STATUS_TURNING_ON; + mEnv_rainbow_check_set(); +} + +static void mEnv_MakeShadowInfo(Kankyo* kankyo) { + f32 time_adjust; + f32 weather_base_adjust; + f32 weather_change_adjust; + f32 shadow_pos; + lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time); + int now_sec; + u8 transition_zero = FALSE; + int switch_index; + int min_sec = (rtc_time->min) * mTM_SECONDS_IN_MINUTE; + int hour_sec = (rtc_time->hour) * mTM_SECONDS_IN_HOUR; + + now_sec = hour_sec + min_sec + rtc_time->sec; + switch_index = mRmTp_GetNowSceneLightSwitchIndex(); // unused + + /* + * Time period overview for shadows + * [0] 00:00:00 - 03:59:29 | 0.4 (rate normal) + * [1] 03:59:30 - 04:00:02 | 0.4 (rate reduced) + * [2] 04:00:03 - 06:00:00 | 0.4 -> 1.0 (rate normal) + * [3] 06:00:01 - 17:59:59 | 1.0 (rate normal) + * [4] 18:00:00 - 19:59:30 | 1.0 -> 0.4 (rate normal) + * [5] 19:59:31 - 20:00:03 | 0.4 (rate reduced) + * [6] 20:00:04 - 23:59:59 | 0.4 (rate normal) + */ + + if (now_sec > mEnv_TIME_TO_SECS(6, 0, 0) && now_sec < mEnv_TIME_TO_SECS(18, 0, 0)) { + time_adjust = 1.0f; + } else if (now_sec < mEnv_TIME_TO_SECS(3, 59, 30) || now_sec > mEnv_TIME_TO_SECS(20, 0, 3)) { + time_adjust = 0.4f; + } else if (now_sec >= mEnv_TIME_TO_SECS(4, 0, 3) && now_sec <= mEnv_TIME_TO_SECS(6, 0, 0)) { + time_adjust = 0.4f + ((f32)(now_sec - mEnv_TIME_TO_SECS(4, 0, 3)) / + (f32)(mEnv_TIME_TO_SECS(6, 0, 0) - mEnv_TIME_TO_SECS(4, 0, 3))) * + 0.6f; + } else if (now_sec >= mEnv_TIME_TO_SECS(18, 0, 0) && now_sec <= mEnv_TIME_TO_SECS(19, 59, 30)) { + time_adjust = 0.4f + ((1.0f - (f32)(now_sec - mEnv_TIME_TO_SECS(18, 0, 0)) / + (f32)(mEnv_TIME_TO_SECS(19, 59, 30) - mEnv_TIME_TO_SECS(18, 0, 0)))) * + 0.6f; + } else { + transition_zero = TRUE; + time_adjust = 0.4f; + } + + if (transition_zero == TRUE) { + if ((now_sec > mEnv_TIME_TO_SECS(3, 59, 55) && now_sec < mEnv_TIME_TO_SECS(4, 0, 3)) || + (now_sec > mEnv_TIME_TO_SECS(19, 59, 55) && now_sec < mEnv_TIME_TO_SECS(20, 0, 3))) { + add_calc(&l_mEnv_electric_light.shadow_adjust, 0.0f, 1.0f - sqrtf(0.5), 0.005f, 0.005f); + } else { + add_calc(&l_mEnv_electric_light.shadow_adjust, 0.0f, 1.0f - sqrtf(0.9), 0.0006f, 0.0004f); + } + } else { + add_calc(&l_mEnv_electric_light.shadow_adjust, 1.0f, 1.0f - sqrtf(0.9), 0.0005f, 0.00005f); + } + + weather_base_adjust = (l_mEnv_electric_light.now_weather == mEnv_WEATHER_RAIN || + l_mEnv_electric_light.now_weather == mEnv_WEATHER_SNOW) + ? 0.75f + : 1.0f; + weather_change_adjust = (l_mEnv_electric_light.next_weather == mEnv_WEATHER_RAIN || + l_mEnv_electric_light.next_weather == mEnv_WEATHER_SNOW) + ? 0.75f + : 1.0f; + + time_adjust *= (weather_base_adjust + + l_mEnv_electric_light.change_weather_env_rate * (weather_change_adjust - weather_base_adjust)); + kankyo->shadow_alpha = (time_adjust * 255.0f * l_mEnv_electric_light.shadow_adjust * 0.75f) * + l_mEnv_electric_light.staffroll_fade_rate; + + if (l_mEnv_electric_light.shadow_alpha != 0) { + kankyo->shadow_alpha = l_mEnv_electric_light.shadow_alpha; + } else if (Save_Get(scene_no) != SCENE_FG && Save_Get(scene_no) != SCENE_MUSEUM_ROOM_INSECT) { + kankyo->shadow_alpha = (f32)kankyo->shadow_alpha + + l_mEnv_electric_light.point_light_percent * + ((f32)l_mEnv_electric_light.shadow_alpha_adjust - (f32)kankyo->shadow_alpha); + } + + if (now_sec >= mEnv_TIME_TO_SECS(4, 0, 0) && now_sec <= mEnv_TIME_TO_SECS(20, 0, 0)) { + f32 diff = now_sec - mEnv_TIME_TO_SECS(4, 0, 0); + shadow_pos = diff / (f32)(mEnv_TIME_TO_SECS(20, 0, 0) - mEnv_TIME_TO_SECS(4, 0, 0)); + } else { + if (now_sec < mEnv_TIME_TO_SECS(20, 0, 0)) { + now_sec += mTM_SECONDS_IN_DAY; } + shadow_pos = (f32)(now_sec - mEnv_TIME_TO_SECS(20, 0, 0)) / + (f32)((mEnv_TIME_TO_SECS(4, 0, 0) + mTM_SECONDS_IN_DAY) - mEnv_TIME_TO_SECS(20, 0, 0)); + } + + kankyo->shadow_pos = shadow_pos * 200.0f - 100.0f; +} + +static void mEnv_set_time(Kankyo* kankyo) { + rgba_t light_color; + int shadows_affected; + + /* Convert day seconds from [0, 86400) -> [-0.5, 0.5) -> [-32768, 32768) (seconds -> bin-angle) */ + s16 time_angle = ((Common_Get(time).now_sec - mTM_SECONDS_IN_HALFDAY) / (f32)mTM_SECONDS_IN_DAY) * 65536.0f; + f32 sin = sin_s(time_angle); // unused + f32 cos = cos_s(time_angle); // unused + mEnv_MakeShadowInfo(kankyo); + + if (Common_Get(clip).effect_clip != NULL && + Common_Get(clip).effect_clip->effect_light_status(&light_color, &shadows_affected) != + eEC_LIGHT_COLOR_DISABLED && + shadows_affected == TRUE) { + f32 color_add = light_color.r + light_color.g + light_color.b; + f32 adjusted_shadow_alpha = kankyo->shadow_alpha; + + color_add = color_add > 200.0f ? 200.0f : color_add; + + adjusted_shadow_alpha += (color_add / 200.0f) * 110.0f; + adjusted_shadow_alpha = adjusted_shadow_alpha > 255.0f ? 255.0f : adjusted_shadow_alpha; + adjusted_shadow_alpha = adjusted_shadow_alpha < 0.0f ? 0.0f : adjusted_shadow_alpha; + + kankyo->shadow_alpha = adjusted_shadow_alpha; + } + + mNPS_schedule_manager(); // This is a very odd place to put this. It would be better suited in game_play_Move(). +} + +static void mEnv_ChangeRGBLight(u8* dst, u8* src_nxt_w0, u8* src_nxt_w1, u8* src_now_w0, u8* src_now_w1, f32 f0, + f32 f1) { + f32 weather_change_bias = l_mEnv_electric_light.change_weather_env_rate; + f32 inverse_weather_change_bias = 1.0f - weather_change_bias; + int i; + + for (i = 0; i < 3; i++) { + dst[0] = weather_change_bias * (f1 * (src_nxt_w0[0] + f0 * ((f32)src_nxt_w1[0] - (f32)src_nxt_w0[0]))) + + inverse_weather_change_bias * (f1 * (src_now_w0[0] + f0 * ((f32)src_now_w1[0] - (f32)src_now_w0[0]))); + + dst++; + src_nxt_w0++; + src_nxt_w1++; + src_now_w0++; + src_now_w1++; + } +} + +static void mEnv_ChangeDiffuseVctlSet(BaseLight* base_light) { + switch (Save_Get(scene_no)) { + case SCENE_BROKER_SHOP: case SCENE_BUGGY: - { - pos->x = 160; - pos->y = 80; - pos->z = 200; - - color[0] = 205; // r - color[1] = 165; // g - color[2] = 110; // b - - power[0] = 155; - is_flame[0] = TRUE; - - break; - } - + case SCENE_CONVENI: + case SCENE_SUPER: + case SCENE_DEPART: + case SCENE_DEPART_2: + case SCENE_KAMAKURA: + case SCENE_MUSEUM_ROOM_PAINTING: + case SCENE_MUSEUM_ROOM_FOSSIL: + case SCENE_MUSEUM_ROOM_FISH: case SCENE_MY_ROOM_BASEMENT_S: case SCENE_MY_ROOM_BASEMENT_M: case SCENE_MY_ROOM_BASEMENT_L: case SCENE_MY_ROOM_BASEMENT_LL1: - { - color[0] = 220; // r - color[1] = 190; // g - color[2] = 190; // b + case SCENE_LIGHTHOUSE: { + base_light->sun_dir[0] = 0; // x + base_light->sun_dir[1] = 69; // y + base_light->sun_dir[2] = 97; // z - pos->x = 200; - pos->y = 220; - pos->z = 300; + base_light->moon_dir[0] = 0; // x + base_light->moon_dir[1] = -33; // y + base_light->moon_dir[2] = 115; // z - break; + break; } - case SCENE_MY_ROOM_L: - case SCENE_MY_ROOM_LL1: - case SCENE_COTTAGE_MY: - { - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b + default: { + f32 dir_x; + f32 dir_y; + f32 dir_z; - pos->x = 200; - pos->y = 220; - pos->z = 300; + switch (Common_Get(field_draw_type)) { + case FIELD_DRAW_TYPE_TRAIN: + case FIELD_DRAW_TYPE_PLAYER_SELECT: { + dir_x = 0.0f; + dir_y = 60.0f; + dir_z = 60.0f; - break; + break; + } + + default: { + /* second in the day -> [-32768, 32767] */ + s16 bin_sec_radial = + ((f32)(Common_Get(time).now_sec - mTM_SECONDS_IN_HALFDAY) / (f32)mTM_SECONDS_IN_HALFDAY) * + (SHT_MAX + 1.0f); + + dir_x = sin_s(bin_sec_radial) * 60.0f; + dir_y = cos_s(bin_sec_radial) * 60.0f; + dir_z = cos_s(bin_sec_radial) * 60.0f; + + break; + } + } + + base_light->sun_dir[0] = -dir_x; // x + base_light->sun_dir[1] = dir_y + 30.0f; // y + base_light->sun_dir[2] = dir_z + 20.0f; // z + + base_light->moon_dir[0] = dir_x; // x + base_light->moon_dir[1] = 30.0f - dir_y; // y + base_light->moon_dir[2] = 20.0f - dir_z; // z + + break; } - - case SCENE_POLICE_BOX: - { - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b - - pos->x = 200; - pos->y = 220; - pos->z = 300; - - break; - } - - case SCENE_KAMAKURA: - { - pos->x = 160; - pos->y = 80; - pos->z = 38; - - color[0] = 250; // r - color[1] = 240; // g - color[2] = 120; // b - - power[0] = 300; - is_flame[0] = TRUE; - - break; - } - - case SCENE_MUSEUM_ENTRANCE: - { - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b - - pos->x = 240; - pos->y = 220; - pos->z = 280; - - break; - } - - case SCENE_MUSEUM_ROOM_PAINTING: - { - color[0] = 180; // r - color[1] = 180; // g - color[2] = 150; // b - - pos->x = 320; - pos->y = 220; - pos->z = 280; - - power[0] = 800; - - break; - } - - case SCENE_MUSEUM_ROOM_FOSSIL: - { - color[0] = 200; // r - color[1] = 200; // g - color[2] = 180; // b - - pos->x = 320; - pos->y = 220; - pos->z = 280; - - power[0] = 800; - - break; - } - - case SCENE_MUSEUM_ROOM_INSECT: - { - color[0] = 50; // r - color[1] = 50; // g - color[2] = 50; // b - - pos->x = 280; - pos->y = 220; - pos->z = 320; - - break; - } - - case SCENE_MUSEUM_ROOM_FISH: - { - pos->x = 320; - pos->y = 220; - pos->z = 320; - - color[0] = 100; // r - color[1] = 120; // g - color[2] = 130; // b - - break; - } - - case SCENE_NEEDLEWORK: - { - color[0] = 220; // r - color[1] = 220; // g - color[2] = 200; // b - - pos->x = 200; - pos->y = 160; - pos->z = 280; - - break; - } - - case SCENE_LIGHTHOUSE: - { - pos->x = 120; - pos->y = 80; - pos->z = 160; - - color[0] = 235; // r - color[1] = 190; // g - color[2] = 185; // b - - power[0] = 6000; - - break; - } - - case SCENE_TENT: - { - pos->x = 120; - pos->y = 80; - pos->z = 120; - - color[0] = 235; // r - color[1] = 190; // g - color[2] = 185; // b - - power[0] = 6000; - - break; - } - - case SCENE_BROKER_SHOP: - { - color[0] = 170; // r - color[1] = 170; // g - color[2] = 160; // b - - pos->x = 250; - pos->y = 1000; - pos->z = 378; - - power[0] = 8000; - - break; - } - - default: - { - pos->x = 250; - pos->y = 1000; - pos->z = 378; - - power[0] = 8000; - - break; - } - } - - break; } - - case FIELD_DRAW_TYPE_TRAIN: - { - switch (Save_Get(scene_no)) { - case SCENE_START_DEMO: - case SCENE_START_DEMO3: - { - Common_Set(sunlight_flag, FALSE); - - break; - } - } - - l_mEnv_electric_light.sun_percent = 0.0f; - - pos->x = 80; - pos->y = 120; - pos->z = 510; - - color[0] = 255; - color[1] = 255; - color[2] = 160; - - power[0] = 1200; - - break; - } - - default: - res = FALSE; - break; - } - - return res; } -static void mEnv_RoomTypePointLightSet(GAME_PLAY* play) { - s_xyz pos; - u8 color[3]; - s16 power; - int light_switch; +static void mEnv_ChangeDiffuseLight(BaseLight* dst, BaseLight* src_nxt_w0, BaseLight* src_nxt_w1, BaseLight* src_now_w0, + BaseLight* src_now_w1, f32 f0) { + f32 diffuse_light_effect_rate = mEnv_DiffuseLightEffectRate(); + f32 f1; - if (Save_Get(scene_no) == SCENE_TITLE_DEMO) { - mRmTp_SetDefaultLightSwitchData(FALSE); - mRmTp_IndexLightSwitchOFF(mRmTp_LIGHT_SWITCH_9); - } - else if (Save_Get(scene_no) == SCENE_NPC_HOUSE || Save_Get(scene_no) == SCENE_COTTAGE_NPC) { - if (mEnv_CheckNpcRoomPointLightNiceStatus() == FALSE) { - mRmTp_IndexLightSwitchOFF(mRmTp_LIGHT_SWITCH_NPC); + mEnv_ChangeDiffuseVctlSet(dst); + if (Common_Get(sunlight_flag) == TRUE) { + add_calc(&l_mEnv_electric_light.sun_percent, 1.0f, 1.0f - sqrtf(0.5), 0.1f, 0.005f); + } else { + add_calc(&l_mEnv_electric_light.sun_percent, 0.0f, 1.0f - sqrtf(0.5), 0.1f, 0.005f); } - else { - mRmTp_IndexLightSwitchON(mRmTp_LIGHT_SWITCH_NPC); + + mEnv_ChangeRGBLight( + dst->sun_color, src_nxt_w0->sun_color, src_nxt_w1->sun_color, src_now_w0->sun_color, src_now_w1->sun_color, f0, + l_mEnv_electric_light.sun_percent * diffuse_light_effect_rate * l_mEnv_electric_light.staffroll_fade_rate); + mEnv_ChangeRGBLight( + dst->moon_color, src_nxt_w0->moon_color, src_nxt_w1->moon_color, src_now_w0->moon_color, src_now_w1->moon_color, + f0, l_mEnv_electric_light.sun_percent * diffuse_light_effect_rate * l_mEnv_electric_light.staffroll_fade_rate); + + if (mRmTp_GetNowSceneLightSwitchIndex() != -1) { + /* If the room has a light switch point light, combine its power with the celestial body colors */ + f32 celestial_adjust = + (l_mEnv_electric_light.diffuse_adjust - 1.0f) * l_mEnv_electric_light.point_light_percent + 1.0f; + + dst->sun_color[0] *= celestial_adjust; + dst->sun_color[1] *= celestial_adjust; + dst->sun_color[2] *= celestial_adjust; + + dst->moon_color[0] *= celestial_adjust; + dst->moon_color[1] *= celestial_adjust; + dst->moon_color[2] *= celestial_adjust; } - } - - l_mEnv_electric_light.point_light_is_flame = FALSE; - l_mEnv_electric_light.point_light_percent = 0.0f; - - if (mEnv_GetNowRoomPointLightInfo(play, &pos, color, &power, &l_mEnv_electric_light.point_light_is_flame) == TRUE) { - Light_point_ct(&play->kankyo.point_light, pos.x, pos.y, pos.z, color[0], color[1], color[2], power); - l_mEnv_electric_light.point_light_color[0] = color[0]; - l_mEnv_electric_light.point_light_color[1] = color[1]; - l_mEnv_electric_light.point_light_color[2] = color[2]; - l_mEnv_electric_light.current_point_light = Global_light_list_new(play, &play->global_light, &play->kankyo.point_light); - - light_switch = mRmTp_GetNowSceneLightSwitchIndex(); - - if (light_switch != -1) { - int switch_status = mRmTp_Index2LightSwitchStatus(light_switch); - - l_mEnv_electric_light.point_light_percent = switch_status != 0 ? 1.0f : l_mEnv_electric_light.point_light_min; - } - else { - l_mEnv_electric_light.point_light_percent = 1.0f; - } - } } -static void mEnv_RoomTypediffuseLightSet(GAME_PLAY* play, Kankyo* kankyo) { - Light_diffuse_ct(&kankyo->sun_light, 1, 0, 0, 0, 0, 0); - Global_light_list_new(play, &play->global_light, &kankyo->sun_light); +static void mEnv_ChangeFogLight(BaseLight* dst, BaseLight* src_nxt_w0, BaseLight* src_nxt_w1, BaseLight* src_now_w0, + BaseLight* src_now_w1, f32 f0) { + f32 weather_change_bias = l_mEnv_electric_light.change_weather_env_rate; + f32 inverse_weather_change_bias = 1.0f - weather_change_bias; + f32 f1 = l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate; + f32 fog_near; + f32 fog_far; - Light_diffuse_ct(&kankyo->moon_light, 1, 0, 0, 0, 0, 0); - Global_light_list_new(play, &play->global_light, &kankyo->moon_light); -} + mEnv_ChangeRGBLight(dst->fog_color, src_nxt_w0->fog_color, src_nxt_w1->fog_color, src_now_w0->fog_color, + src_now_w1->fog_color, f0, f1); -static void mEnv_RoomTypeLightSet(GAME_PLAY* play, Kankyo* kankyo) { - mEnv_RoomTypePointLightSet(play); - mEnv_RoomTypediffuseLightSet(play, kankyo); -} + fog_near = + weather_change_bias * ((f32)(src_nxt_w0->fog_near & 0x3FF) + + f0 * ((f32)(src_nxt_w1->fog_near & 0x3FF) - (f32)(src_nxt_w0->fog_near & 0x3FF))) + + inverse_weather_change_bias * + ((f32)(src_now_w0->fog_near & 0x3FF) + + f0 * ((f32)(src_now_w1->fog_near & 0x3FF) - (f32)(src_now_w0->fog_near & 0x3FF))); -static void mEnv_rainbow_check_set() { - if (mFI_CheckFieldData() != FALSE && mFI_GET_TYPE(mFI_GetFieldId()) == mFI_FIELD_FG && mEv_CheckTitleDemo() <= 0) { - if (Save_Get(rainbow_reserved)) { - if ( - Common_Get(time).rtc_time.month == Save_Get(rainbow_month) && - Common_Get(time).rtc_time.day == Save_Get(rainbow_day) - ) { - int now_sec = Common_Get(time).now_sec; - if ( - now_sec >= mEnv_RAINBOW_TIME_START && - now_sec < mEnv_RAINBOW_TIME_END - ) { - Save_Set(rainbow_reserved, FALSE); + dst->fog_near = fog_near; + fog_far = + weather_change_bias * ((f32)src_nxt_w0->fog_far + f0 * ((f32)src_nxt_w1->fog_far - (f32)src_nxt_w0->fog_far)) + + inverse_weather_change_bias * + ((f32)src_now_w0->fog_far + f0 * ((f32)src_now_w1->fog_far - (f32)src_now_w0->fog_far)); - if (Common_Get(time).season == mTM_SEASON_SUMMER) { - Common_Set(rainbow_opacity, 1.0f); - } - } - } - else { - Save_Set(rainbow_reserved, FALSE); - } - } - else if (Common_Get(rainbow_opacity) > 0.0f) { - if ( - Common_Get(time).rtc_time.month != Save_Get(rainbow_month) || - Common_Get(time).rtc_time.day != Save_Get(rainbow_day) || - Common_Get(time).now_sec < mEnv_RAINBOW_TIME_START || // might need to break out time.now_sec into its own variable - Common_Get(time).now_sec >= mEnv_RAINBOW_TIME_BYE || - Common_Get(time).season != mTM_SEASON_SUMMER - ) { - Common_Set(rainbow_opacity, 0.0f); - } - } - } -} - -extern void Global_kankyo_ct(GAME_PLAY* play, Kankyo* kankyo) { - bzero(&l_mEnv_electric_light, sizeof(l_mEnv_electric_light)); - mRmTp_IndexLightSwitchOFF(mRmTp_LIGHT_SWITCH_NPC); - - l_mEnv_electric_light.staffroll_fade_rate = 1.0f; - l_mEnv_electric_light.shadow_adjust = 1.0f; - l_mEnv_electric_light.sun_percent = 1.0f; - l_mEnv_electric_light.current_point_light = NULL; - - if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_INSECT) { - l_mEnv_electric_light.diffuse_adjust = 0.5f; - } - else { - l_mEnv_electric_light.diffuse_adjust = 0.4f; - } - - if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_INSECT) { - l_mEnv_electric_light.shadow_alpha_adjust = 100; - } - else { - l_mEnv_electric_light.shadow_alpha_adjust = 150; - } - - l_mEnv_electric_light.change_weather_env_rate = 0.0f; - - switch (Save_Get(scene_no)) { - case SCENE_LIGHTHOUSE: - case SCENE_TENT: - { - l_mEnv_electric_light.point_light_min = 0.14f; - break; - } - - default: - { - l_mEnv_electric_light.point_light_min = 0.14f; - break; - } - } - - l_mEnv_electric_light.diffuse_light_effect_rate = 1.0f; - - bzero(kankyo, sizeof(Kankyo)); - SETREG(MYKREG, 28, 100); - Common_Set(transition._00, 0); - mEnv_set_time(kankyo); - kankyo->countdown_timer = 0xFF; - mEnv_RoomTypeLightSet(play, kankyo); - mEnv_regist_nature(kankyo, (NATURE_PROC)none_proc1, NULL); - mEnv_MakeWindowLightAlpha(FALSE); - mEnv_InitWind(); - l_mEnv_electric_light.switch_status = (u8)mEnv_Pointlight_on_check() ? mEnv_SWITCH_STATUS_TURNING_OFF : mEnv_SWITCH_STATUS_TURNING_ON; - mEnv_rainbow_check_set(); -} - -static void mEnv_MakeShadowInfo(Kankyo* kankyo) { - f32 time_adjust; - f32 weather_base_adjust; - f32 weather_change_adjust; - f32 shadow_pos; - lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time); - int now_sec; - u8 transition_zero = FALSE; - int switch_index; - int min_sec = (rtc_time->min) * mTM_SECONDS_IN_MINUTE; - int hour_sec = (rtc_time->hour) * mTM_SECONDS_IN_HOUR; - - now_sec = hour_sec + min_sec + rtc_time->sec; - switch_index = mRmTp_GetNowSceneLightSwitchIndex(); // unused - - /* - * Time period overview for shadows - * [0] 00:00:00 - 03:59:29 | 0.4 (rate normal) - * [1] 03:59:30 - 04:00:02 | 0.4 (rate reduced) - * [2] 04:00:03 - 06:00:00 | 0.4 -> 1.0 (rate normal) - * [3] 06:00:01 - 17:59:59 | 1.0 (rate normal) - * [4] 18:00:00 - 19:59:30 | 1.0 -> 0.4 (rate normal) - * [5] 19:59:31 - 20:00:03 | 0.4 (rate reduced) - * [6] 20:00:04 - 23:59:59 | 0.4 (rate normal) - */ - - if (now_sec > mEnv_TIME_TO_SECS(6, 0, 0) && now_sec < mEnv_TIME_TO_SECS(18, 0, 0)) { - time_adjust = 1.0f; - } - else if (now_sec < mEnv_TIME_TO_SECS(3, 59, 30) || now_sec > mEnv_TIME_TO_SECS(20, 0, 3)) { - time_adjust = 0.4f; - } - else if (now_sec >= mEnv_TIME_TO_SECS(4, 0, 3) && now_sec <= mEnv_TIME_TO_SECS(6, 0, 0)) { - time_adjust = 0.4f + ((f32)(now_sec - mEnv_TIME_TO_SECS(4, 0, 3)) / (f32)(mEnv_TIME_TO_SECS(6, 0, 0) - mEnv_TIME_TO_SECS(4, 0, 3))) * 0.6f; - } - else if (now_sec >= mEnv_TIME_TO_SECS(18, 0, 0) && now_sec <= mEnv_TIME_TO_SECS(19, 59, 30)) { - time_adjust = 0.4f + ((1.0f - (f32)(now_sec - mEnv_TIME_TO_SECS(18, 0, 0)) / (f32)(mEnv_TIME_TO_SECS(19, 59, 30) - mEnv_TIME_TO_SECS(18, 0, 0)))) * 0.6f; - } - else { - transition_zero = TRUE; - time_adjust = 0.4f; - } - - if (transition_zero == TRUE) { - if ( - (now_sec > mEnv_TIME_TO_SECS(3, 59, 55) && now_sec < mEnv_TIME_TO_SECS(4, 0, 3)) || - (now_sec > mEnv_TIME_TO_SECS(19, 59, 55) && now_sec < mEnv_TIME_TO_SECS(20, 0, 3)) - ) { - add_calc(&l_mEnv_electric_light.shadow_adjust, 0.0f, 1.0f - sqrtf(0.5), 0.005f, 0.005f); - } - else { - add_calc(&l_mEnv_electric_light.shadow_adjust, 0.0f, 1.0f - sqrtf(0.9), 0.0006f, 0.0004f); - } - } - else { - add_calc(&l_mEnv_electric_light.shadow_adjust, 1.0f, 1.0f - sqrtf(0.9), 0.0005f, 0.00005f); - } - - weather_base_adjust = (l_mEnv_electric_light.now_weather == mEnv_WEATHER_RAIN || l_mEnv_electric_light.now_weather == mEnv_WEATHER_SNOW) ? 0.75f : 1.0f; - weather_change_adjust = (l_mEnv_electric_light.next_weather == mEnv_WEATHER_RAIN || l_mEnv_electric_light.next_weather == mEnv_WEATHER_SNOW) ? 0.75f : 1.0f; - - time_adjust *= (weather_base_adjust + l_mEnv_electric_light.change_weather_env_rate * (weather_change_adjust - weather_base_adjust)); - kankyo->shadow_alpha = (time_adjust * 255.0f * l_mEnv_electric_light.shadow_adjust * 0.75f) * l_mEnv_electric_light.staffroll_fade_rate; - - if (l_mEnv_electric_light.shadow_alpha != 0) { - kankyo->shadow_alpha = l_mEnv_electric_light.shadow_alpha; - } - else if (Save_Get(scene_no) != SCENE_FG && Save_Get(scene_no) != SCENE_MUSEUM_ROOM_INSECT) { - kankyo->shadow_alpha = (f32)kankyo->shadow_alpha + l_mEnv_electric_light.point_light_percent * ((f32)l_mEnv_electric_light.shadow_alpha_adjust - (f32)kankyo->shadow_alpha); - } - - if (now_sec >= mEnv_TIME_TO_SECS(4, 0, 0) && now_sec <= mEnv_TIME_TO_SECS(20, 0, 0)) { - f32 diff = now_sec - mEnv_TIME_TO_SECS(4, 0, 0); - shadow_pos = diff / (f32)(mEnv_TIME_TO_SECS(20, 0, 0) - mEnv_TIME_TO_SECS(4, 0, 0)); - } - else { - if (now_sec < mEnv_TIME_TO_SECS(20, 0, 0)) { - now_sec += mTM_SECONDS_IN_DAY; - } - - shadow_pos = (f32)(now_sec - mEnv_TIME_TO_SECS(20, 0, 0)) / (f32)((mEnv_TIME_TO_SECS(4, 0, 0) + mTM_SECONDS_IN_DAY) - mEnv_TIME_TO_SECS(20, 0, 0)); - } - - kankyo->shadow_pos = shadow_pos * 200.0f - 100.0f; -} - -static void mEnv_set_time(Kankyo* kankyo) { - rgba_t light_color; - int shadows_affected; - - /* Convert day seconds from [0, 86400) -> [-0.5, 0.5) -> [-32768, 32768) (seconds -> bin-angle) */ - s16 time_angle = ((Common_Get(time).now_sec - mTM_SECONDS_IN_HALFDAY) / (f32)mTM_SECONDS_IN_DAY) * 65536.0f; - f32 sin = sin_s(time_angle); // unused - f32 cos = cos_s(time_angle); // unused - mEnv_MakeShadowInfo(kankyo); - - if ( - Common_Get(clip).effect_clip != NULL && - Common_Get(clip).effect_clip->effect_light_status(&light_color, &shadows_affected) != eEC_LIGHT_COLOR_DISABLED && - shadows_affected == TRUE - ) { - f32 color_add = light_color.r + light_color.g + light_color.b; - f32 adjusted_shadow_alpha = kankyo->shadow_alpha; - - color_add = color_add > 200.0f ? 200.0f : color_add; - - adjusted_shadow_alpha += (color_add / 200.0f) * 110.0f; - adjusted_shadow_alpha = adjusted_shadow_alpha > 255.0f ? 255.0f : adjusted_shadow_alpha; - adjusted_shadow_alpha = adjusted_shadow_alpha < 0.0f ? 0.0f : adjusted_shadow_alpha; - - kankyo->shadow_alpha = adjusted_shadow_alpha; - } - - mNPS_schedule_manager(); // This is a very odd place to put this. It would be better suited in game_play_Move(). -} - -static void mEnv_ChangeRGBLight(u8* dst, u8* src_nxt_w0, u8* src_nxt_w1, u8* src_now_w0, u8* src_now_w1, f32 f0, f32 f1) { - f32 weather_change_bias = l_mEnv_electric_light.change_weather_env_rate; - f32 inverse_weather_change_bias = 1.0f - weather_change_bias; - int i; - - for (i = 0; i < 3; i++) { - dst[0] = - weather_change_bias * (f1 * (src_nxt_w0[0] + f0 * ((f32)src_nxt_w1[0] - (f32)src_nxt_w0[0]))) + - inverse_weather_change_bias * (f1 * (src_now_w0[0] + f0 * ((f32)src_now_w1[0] - (f32)src_now_w0[0]))); - - dst++; - src_nxt_w0++; - src_nxt_w1++; - src_now_w0++; - src_now_w1++; - } -} - -static void mEnv_ChangeDiffuseVctlSet(BaseLight* base_light) { - switch (Save_Get(scene_no)) { - case SCENE_BROKER_SHOP: - case SCENE_BUGGY: - case SCENE_CONVENI: - case SCENE_SUPER: - case SCENE_DEPART: - case SCENE_DEPART_2: - case SCENE_KAMAKURA: - case SCENE_MUSEUM_ROOM_PAINTING: - case SCENE_MUSEUM_ROOM_FOSSIL: - case SCENE_MUSEUM_ROOM_FISH: - case SCENE_MY_ROOM_BASEMENT_S: - case SCENE_MY_ROOM_BASEMENT_M: - case SCENE_MY_ROOM_BASEMENT_L: - case SCENE_MY_ROOM_BASEMENT_LL1: - case SCENE_LIGHTHOUSE: - { - base_light->sun_dir[0] = 0; // x - base_light->sun_dir[1] = 69; // y - base_light->sun_dir[2] = 97; // z - - base_light->moon_dir[0] = 0; // x - base_light->moon_dir[1] = -33; // y - base_light->moon_dir[2] = 115; // z - - break; - } - - default: - { - f32 dir_x; - f32 dir_y; - f32 dir_z; - - switch (Common_Get(field_draw_type)) { - case FIELD_DRAW_TYPE_TRAIN: - case FIELD_DRAW_TYPE_PLAYER_SELECT: - { - dir_x = 0.0f; - dir_y = 60.0f; - dir_z = 60.0f; - - break; - } - - default: - { - /* second in the day -> [-32768, 32767] */ - s16 bin_sec_radial = ((f32)(Common_Get(time).now_sec - mTM_SECONDS_IN_HALFDAY) / (f32)mTM_SECONDS_IN_HALFDAY) * (SHT_MAX + 1.0f); - - dir_x = sin_s(bin_sec_radial) * 60.0f; - dir_y = cos_s(bin_sec_radial) * 60.0f; - dir_z = cos_s(bin_sec_radial) * 60.0f; - - break; - } - } - - base_light->sun_dir[0] = -dir_x; // x - base_light->sun_dir[1] = dir_y + 30.0f; // y - base_light->sun_dir[2] = dir_z + 20.0f; // z - - base_light->moon_dir[0] = dir_x; // x - base_light->moon_dir[1] = 30.0f - dir_y; // y - base_light->moon_dir[2] = 20.0f - dir_z; // z - - break; - } - } -} - -static void mEnv_ChangeDiffuseLight(BaseLight* dst, BaseLight* src_nxt_w0, BaseLight* src_nxt_w1, BaseLight* src_now_w0, BaseLight* src_now_w1, f32 f0) { - f32 diffuse_light_effect_rate = mEnv_DiffuseLightEffectRate(); - f32 f1; - - mEnv_ChangeDiffuseVctlSet(dst); - if (Common_Get(sunlight_flag) == TRUE) { - add_calc(&l_mEnv_electric_light.sun_percent, 1.0f, 1.0f - sqrtf(0.5), 0.1f, 0.005f); - } - else { - add_calc(&l_mEnv_electric_light.sun_percent, 0.0f, 1.0f - sqrtf(0.5), 0.1f, 0.005f); - } - - mEnv_ChangeRGBLight(dst->sun_color, src_nxt_w0->sun_color, src_nxt_w1->sun_color, src_now_w0->sun_color, src_now_w1->sun_color, f0, l_mEnv_electric_light.sun_percent * diffuse_light_effect_rate * l_mEnv_electric_light.staffroll_fade_rate); - mEnv_ChangeRGBLight(dst->moon_color, src_nxt_w0->moon_color, src_nxt_w1->moon_color, src_now_w0->moon_color, src_now_w1->moon_color, f0, l_mEnv_electric_light.sun_percent * diffuse_light_effect_rate * l_mEnv_electric_light.staffroll_fade_rate); - - if (mRmTp_GetNowSceneLightSwitchIndex() != -1) { - /* If the room has a light switch point light, combine its power with the celestial body colors */ - f32 celestial_adjust = (l_mEnv_electric_light.diffuse_adjust - 1.0f) * l_mEnv_electric_light.point_light_percent + 1.0f; - - dst->sun_color[0] *= celestial_adjust; - dst->sun_color[1] *= celestial_adjust; - dst->sun_color[2] *= celestial_adjust; - - dst->moon_color[0] *= celestial_adjust; - dst->moon_color[1] *= celestial_adjust; - dst->moon_color[2] *= celestial_adjust; - } -} - -static void mEnv_ChangeFogLight(BaseLight* dst, BaseLight* src_nxt_w0, BaseLight* src_nxt_w1, BaseLight* src_now_w0, BaseLight* src_now_w1, f32 f0) { - f32 weather_change_bias = l_mEnv_electric_light.change_weather_env_rate; - f32 inverse_weather_change_bias = 1.0f - weather_change_bias; - f32 f1 = l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate; - f32 fog_near; - f32 fog_far; - - mEnv_ChangeRGBLight(dst->fog_color, src_nxt_w0->fog_color, src_nxt_w1->fog_color, src_now_w0->fog_color, src_now_w1->fog_color, f0, f1); - - fog_near = weather_change_bias * ((f32)(src_nxt_w0->fog_near & 0x3FF) + f0 * ((f32)(src_nxt_w1->fog_near & 0x3FF) - (f32)(src_nxt_w0->fog_near & 0x3FF))) + - inverse_weather_change_bias * ((f32)(src_now_w0->fog_near & 0x3FF) + f0 * ((f32)(src_now_w1->fog_near & 0x3FF) - (f32)(src_now_w0->fog_near & 0x3FF))); - - dst->fog_near = fog_near; - fog_far = weather_change_bias * ((f32)src_nxt_w0->fog_far + f0 * ((f32)src_nxt_w1->fog_far - (f32)src_nxt_w0->fog_far)) + - inverse_weather_change_bias * ((f32)src_now_w0->fog_far + f0 * ((f32)src_now_w1->fog_far - (f32)src_now_w0->fog_far)); - - dst->fog_far = fog_far; + dst->fog_far = fog_far; } static void mEnv_CalcSetLight_train(BaseLight* light) { - if (Save_Get(scene_no) == SCENE_START_DEMO || Save_Get(scene_no) == SCENE_START_DEMO3) { - if (l_mEnv_electric_light.sun_percent < 1.0f) { - f32 inv = 1.0f - l_mEnv_electric_light.sun_percent; - int add_r = inv * 35.0f; - int add_g = inv * 30.0f; - int add_b = inv * 40.0f; + if (Save_Get(scene_no) == SCENE_START_DEMO || Save_Get(scene_no) == SCENE_START_DEMO3) { + if (l_mEnv_electric_light.sun_percent < 1.0f) { + f32 inv = 1.0f - l_mEnv_electric_light.sun_percent; + int add_r = inv * 35.0f; + int add_g = inv * 30.0f; + int add_b = inv * 40.0f; - light->ambient_color[0] += (u8)add_r; - light->ambient_color[1] += (u8)add_g; - light->ambient_color[2] += (u8)add_b; + light->ambient_color[0] += (u8)add_r; + light->ambient_color[1] += (u8)add_g; + light->ambient_color[2] += (u8)add_b; + } } - } } -static void mEnv_CalcSetLight(BaseLight* dst, BaseLight* src_nxt_w0, BaseLight* src_nxt_w1, BaseLight* src_now_w0, BaseLight* src_now_w1, Kankyo* kankyo, f32 f0) { - mEnv_ChangeRGBLight(dst->ambient_color, src_nxt_w0->ambient_color, src_nxt_w1->ambient_color, src_now_w0->ambient_color, src_now_w1->ambient_color, f0, l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); - mEnv_CalcSetLight_train(dst); - mEnv_ChangeDiffuseLight(dst, src_nxt_w0, src_nxt_w1, src_now_w0, src_now_w1, f0); - mEnv_ChangeFogLight(dst, src_nxt_w0, src_nxt_w1, src_now_w0, src_now_w1, f0); +static void mEnv_CalcSetLight(BaseLight* dst, BaseLight* src_nxt_w0, BaseLight* src_nxt_w1, BaseLight* src_now_w0, + BaseLight* src_now_w1, Kankyo* kankyo, f32 f0) { + mEnv_ChangeRGBLight(dst->ambient_color, src_nxt_w0->ambient_color, src_nxt_w1->ambient_color, + src_now_w0->ambient_color, src_now_w1->ambient_color, f0, + l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); + mEnv_CalcSetLight_train(dst); + mEnv_ChangeDiffuseLight(dst, src_nxt_w0, src_nxt_w1, src_now_w0, src_now_w1, f0); + mEnv_ChangeFogLight(dst, src_nxt_w0, src_nxt_w1, src_now_w0, src_now_w1, f0); - /* @BUG - devs accidently used the wrong light parameter, should've been src_nxt_w1 but wrote src_now_w1 */ - #ifndef BUGFIXES - mEnv_ChangeRGBLight(dst->shadow_color, src_nxt_w0->shadow_color, src_now_w1->shadow_color, src_now_w0->shadow_color, src_now_w1->shadow_color, f0, l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); - #else - mEnv_ChangeRGBLight(dst->shadow_color, src_nxt_w0->shadow_color, src_nxt_w1->shadow_color, src_now_w0->shadow_color, src_now_w1->shadow_color, f0, l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); - #endif - mEnv_ChangeRGBLight(dst->room_color, src_nxt_w0->room_color, src_nxt_w1->room_color, src_now_w0->room_color, src_now_w1->room_color, f0, l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); - mEnv_ChangeRGBLight(dst->sun_color_window, src_nxt_w0->sun_color_window, src_nxt_w1->sun_color_window, src_now_w0->sun_color_window, src_now_w1->sun_color_window, f0, l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); - mEnv_ChangeRGBLight(dst->moon_color_window, src_nxt_w0->moon_color_window, src_nxt_w1->moon_color_window, src_now_w0->moon_color_window, src_now_w1->moon_color_window, f0, l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); - mEnv_ChangeRGBLight(dst->background_color, src_nxt_w0->background_color, src_nxt_w1->background_color, src_now_w0->background_color, src_now_w1->background_color, f0, l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); +/* @BUG - devs accidently used the wrong light parameter, should've been src_nxt_w1 but wrote src_now_w1 */ +#ifndef BUGFIXES + mEnv_ChangeRGBLight(dst->shadow_color, src_nxt_w0->shadow_color, src_now_w1->shadow_color, src_now_w0->shadow_color, + src_now_w1->shadow_color, f0, + l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); +#else + mEnv_ChangeRGBLight(dst->shadow_color, src_nxt_w0->shadow_color, src_nxt_w1->shadow_color, src_now_w0->shadow_color, + src_now_w1->shadow_color, f0, + l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); +#endif + mEnv_ChangeRGBLight(dst->room_color, src_nxt_w0->room_color, src_nxt_w1->room_color, src_now_w0->room_color, + src_now_w1->room_color, f0, + l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); + mEnv_ChangeRGBLight(dst->sun_color_window, src_nxt_w0->sun_color_window, src_nxt_w1->sun_color_window, + src_now_w0->sun_color_window, src_now_w1->sun_color_window, f0, + l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); + mEnv_ChangeRGBLight(dst->moon_color_window, src_nxt_w0->moon_color_window, src_nxt_w1->moon_color_window, + src_now_w0->moon_color_window, src_now_w1->moon_color_window, f0, + l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); + mEnv_ChangeRGBLight(dst->background_color, src_nxt_w0->background_color, src_nxt_w1->background_color, + src_now_w0->background_color, src_now_w1->background_color, f0, + l_mEnv_electric_light.sun_percent * l_mEnv_electric_light.staffroll_fade_rate); } static int mEnv_GetNowTerm() { - int now_sec = Common_Get(time).now_sec; - int i; + int now_sec = Common_Get(time).now_sec; + int i; - for (i = 0; i < mEnv_TERM_NUM; i++) { - if (klight_chg_time[i + 1] >= now_sec) { - return i; + for (i = 0; i < mEnv_TERM_NUM; i++) { + if (klight_chg_time[i + 1] >= now_sec) { + return i; + } } - } - return 0; + return 0; } static void mEnv_SetBaseLight(Kankyo* kankyo) { - int now_sec = Common_Get(time).now_sec; - int term = mEnv_GetNowTerm(); - int weather = l_mEnv_electric_light.now_weather; - int fog_disabled = TRUE; - int next_term = term + 1; - f32 percent_towards_next_term = get_percent(klight_chg_time[next_term], klight_chg_time[term], now_sec); + int now_sec = Common_Get(time).now_sec; + int term = mEnv_GetNowTerm(); + int weather = l_mEnv_electric_light.now_weather; + int fog_disabled = TRUE; + int next_term = term + 1; + f32 percent_towards_next_term = get_percent(klight_chg_time[next_term], klight_chg_time[term], now_sec); - switch (Common_Get(field_draw_type)) { - case FIELD_DRAW_TYPE_TRAIN: - { - int next_term = (term + 1) % mEnv_TERM_NUM; - BaseLight* src_w1 = l_mEnv_normal_kcolor_data[weather] + next_term; - BaseLight* src_w0 = l_mEnv_normal_kcolor_data[weather] + term; + switch (Common_Get(field_draw_type)) { + case FIELD_DRAW_TYPE_TRAIN: { + int next_term = (term + 1) % mEnv_TERM_NUM; + BaseLight* src_w1 = l_mEnv_normal_kcolor_data[weather] + next_term; + BaseLight* src_w0 = l_mEnv_normal_kcolor_data[weather] + term; - mEnv_CalcSetLight(&kankyo->base_light, src_w0, src_w1, src_w0, src_w1, kankyo, percent_towards_next_term); - break; + mEnv_CalcSetLight(&kankyo->base_light, src_w0, src_w1, src_w0, src_w1, kankyo, percent_towards_next_term); + break; + } + + case FIELD_DRAW_TYPE_PLAYER_SELECT: { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_data_p_sel, &l_mEnv_kcolor_data_p_sel, + &l_mEnv_kcolor_data_p_sel, &l_mEnv_kcolor_data_p_sel, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 200; + + break; + } + + default: { + if (Save_Get(scene_no) == SCENE_CONVENI || Save_Get(scene_no) == SCENE_SUPER || + Save_Get(scene_no) == SCENE_DEPART || Save_Get(scene_no) == SCENE_DEPART_2) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_shop, &l_mEnv_kcolor_shop, &l_mEnv_kcolor_shop, + &l_mEnv_kcolor_shop, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_BUGGY) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_buggy, &l_mEnv_kcolor_buggy, &l_mEnv_kcolor_buggy, + &l_mEnv_kcolor_buggy, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_KAMAKURA) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_kamakura, &l_mEnv_kcolor_kamakura, + &l_mEnv_kcolor_kamakura, &l_mEnv_kcolor_kamakura, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_BROKER_SHOP) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_broker, &l_mEnv_kcolor_broker, + &l_mEnv_kcolor_broker, &l_mEnv_kcolor_broker, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_FISH) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_museum_fish, &l_mEnv_kcolor_museum_fish, + &l_mEnv_kcolor_museum_fish, &l_mEnv_kcolor_museum_fish, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_FOSSIL) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_museum_fossil, &l_mEnv_kcolor_museum_fossil, + &l_mEnv_kcolor_museum_fossil, &l_mEnv_kcolor_museum_fossil, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_PAINTING) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_museum_picture, &l_mEnv_kcolor_museum_picture, + &l_mEnv_kcolor_museum_picture, &l_mEnv_kcolor_museum_picture, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_S || + Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_M || + Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_L || + Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_LL1) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_basement, &l_mEnv_kcolor_basement, + &l_mEnv_kcolor_basement, &l_mEnv_kcolor_basement, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 150; + } else if (Save_Get(scene_no) == SCENE_LIGHTHOUSE) { + mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_lighthouse, &l_mEnv_kcolor_lighthouse, + &l_mEnv_kcolor_lighthouse, &l_mEnv_kcolor_lighthouse, kankyo, 0.5f); + l_mEnv_electric_light.shadow_alpha = 115; + } else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_INSECT) { + BaseLight* now = l_mEnv_normal_kcolor_insect_data[l_mEnv_electric_light.now_weather]; + BaseLight* nxt = l_mEnv_normal_kcolor_insect_data[l_mEnv_electric_light.next_weather]; + int next_term = (term + 1) % mEnv_TERM_NUM; + BaseLight* nxt_w0 = nxt + term; + BaseLight* nxt_w1 = nxt + next_term; + BaseLight* now_w0 = now + term; + BaseLight* now_w1 = now + next_term; + + mEnv_CalcSetLight(&kankyo->base_light, nxt_w0, nxt_w1, now_w0, now_w1, kankyo, + percent_towards_next_term); + } else { + BaseLight* now = l_mEnv_normal_kcolor_data[l_mEnv_electric_light.now_weather]; + BaseLight* nxt = l_mEnv_normal_kcolor_data[l_mEnv_electric_light.next_weather]; + int next_term = (term + 1) % mEnv_TERM_NUM; + BaseLight* nxt_w0 = nxt + term; + BaseLight* nxt_w1 = nxt + next_term; + BaseLight* now_w0 = now + term; + BaseLight* now_w1 = now + next_term; + + mEnv_CalcSetLight(&kankyo->base_light, nxt_w0, nxt_w1, now_w0, now_w1, kankyo, + percent_towards_next_term); + } + + if (Common_Get(field_type) == mFI_FIELDTYPE2_FG) { + fog_disabled = FALSE; + } + + break; + } } - case FIELD_DRAW_TYPE_PLAYER_SELECT: - { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_data_p_sel, &l_mEnv_kcolor_data_p_sel, &l_mEnv_kcolor_data_p_sel, &l_mEnv_kcolor_data_p_sel, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 200; - - break; + if (fog_disabled == TRUE) { + kankyo->base_light.fog_color[2] = 0; + kankyo->base_light.fog_color[1] = 0; + kankyo->base_light.fog_color[0] = 0; + kankyo->base_light.fog_near = 2020; + kankyo->base_light.fog_far = 1000; } - - default: - { - if (Save_Get(scene_no) == SCENE_CONVENI || Save_Get(scene_no) == SCENE_SUPER || Save_Get(scene_no) == SCENE_DEPART || Save_Get(scene_no) == SCENE_DEPART_2) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_shop, &l_mEnv_kcolor_shop, &l_mEnv_kcolor_shop, &l_mEnv_kcolor_shop, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_BUGGY) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_buggy, &l_mEnv_kcolor_buggy, &l_mEnv_kcolor_buggy, &l_mEnv_kcolor_buggy, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_KAMAKURA) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_kamakura, &l_mEnv_kcolor_kamakura, &l_mEnv_kcolor_kamakura, &l_mEnv_kcolor_kamakura, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_BROKER_SHOP) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_broker, &l_mEnv_kcolor_broker, &l_mEnv_kcolor_broker, &l_mEnv_kcolor_broker, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_FISH) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_museum_fish, &l_mEnv_kcolor_museum_fish, &l_mEnv_kcolor_museum_fish, &l_mEnv_kcolor_museum_fish, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_FOSSIL) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_museum_fossil, &l_mEnv_kcolor_museum_fossil, &l_mEnv_kcolor_museum_fossil, &l_mEnv_kcolor_museum_fossil, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_PAINTING) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_museum_picture, &l_mEnv_kcolor_museum_picture, &l_mEnv_kcolor_museum_picture, &l_mEnv_kcolor_museum_picture, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_S || Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_M || Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_L || Save_Get(scene_no) == SCENE_MY_ROOM_BASEMENT_LL1) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_basement, &l_mEnv_kcolor_basement, &l_mEnv_kcolor_basement, &l_mEnv_kcolor_basement, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 150; - } - else if (Save_Get(scene_no) == SCENE_LIGHTHOUSE) { - mEnv_CalcSetLight(&kankyo->base_light, &l_mEnv_kcolor_lighthouse, &l_mEnv_kcolor_lighthouse, &l_mEnv_kcolor_lighthouse, &l_mEnv_kcolor_lighthouse, kankyo, 0.5f); - l_mEnv_electric_light.shadow_alpha = 115; - } - else if (Save_Get(scene_no) == SCENE_MUSEUM_ROOM_INSECT) { - BaseLight* now = l_mEnv_normal_kcolor_insect_data[l_mEnv_electric_light.now_weather]; - BaseLight* nxt = l_mEnv_normal_kcolor_insect_data[l_mEnv_electric_light.next_weather]; - int next_term = (term + 1) % mEnv_TERM_NUM; - BaseLight* nxt_w0 = nxt + term; - BaseLight* nxt_w1 = nxt + next_term; - BaseLight* now_w0 = now + term; - BaseLight* now_w1 = now + next_term; - - mEnv_CalcSetLight( - &kankyo->base_light, - nxt_w0, - nxt_w1, - now_w0, - now_w1, - kankyo, - percent_towards_next_term - ); - } - else { - BaseLight* now = l_mEnv_normal_kcolor_data[l_mEnv_electric_light.now_weather]; - BaseLight* nxt = l_mEnv_normal_kcolor_data[l_mEnv_electric_light.next_weather]; - int next_term = (term + 1) % mEnv_TERM_NUM; - BaseLight* nxt_w0 = nxt + term; - BaseLight* nxt_w1 = nxt + next_term; - BaseLight* now_w0 = now + term; - BaseLight* now_w1 = now + next_term; - - mEnv_CalcSetLight( - &kankyo->base_light, - nxt_w0, - nxt_w1, - now_w0, - now_w1, - kankyo, - percent_towards_next_term - ); - } - - if (Common_Get(field_type) == mFI_FIELDTYPE2_FG) { - fog_disabled = FALSE; - } - - break; - } - } - - if (fog_disabled == TRUE) { - kankyo->base_light.fog_color[2] = 0; - kankyo->base_light.fog_color[1] = 0; - kankyo->base_light.fog_color[0] = 0; - kankyo->base_light.fog_near = 2020; - kankyo->base_light.fog_far = 1000; - } } static u8 mEnv_LimitChkRGBColor(int c) { - if (c > 255) { - c = 255; - } - else if (c < 0) { - c = 0; - } + if (c > 255) { + c = 255; + } else if (c < 0) { + c = 0; + } - return c; + return c; } static void mEnv_AddAndSetRGBColor(u8* dst, u8* src0, s16* src1) { - int i; - - for (i = 0; i < 3; i++) { - dst[0] = mEnv_LimitChkRGBColor(src0[0] + src1[0]); - - dst++; - src0++; - src1++; - } -} - -static void mEnv_SetDiffuseLight(Kankyo* kankyo) { - mEnv_AddAndSetRGBColor(kankyo->sun_light.lights.diffuse.color, kankyo->base_light.sun_color, kankyo->add_light_info.diffuse_color); - mEnv_AddAndSetRGBColor(kankyo->moon_light.lights.diffuse.color, kankyo->base_light.moon_color, l_mEnv_electric_light.add_moon_color); - - kankyo->sun_light.lights.diffuse.x = kankyo->base_light.sun_dir[0]; - kankyo->sun_light.lights.diffuse.y = kankyo->base_light.sun_dir[1]; - kankyo->sun_light.lights.diffuse.z = kankyo->base_light.sun_dir[2]; - - kankyo->moon_light.lights.diffuse.x = kankyo->base_light.moon_dir[0]; - kankyo->moon_light.lights.diffuse.y = kankyo->base_light.moon_dir[1]; - kankyo->moon_light.lights.diffuse.z = kankyo->base_light.moon_dir[2]; -} - -static void mEnv_SetFog(Kankyo* kankyo, Global_light* global_light) { - int field_id = mFI_GetFieldId(); - int fog_near; - int fog_far; - - mEnv_AddAndSetRGBColor(global_light->fogColor, kankyo->base_light.fog_color, kankyo->add_light_info.fog_color); - - fog_near = kankyo->base_light.fog_near + kankyo->add_light_info.fog_near; - if (fog_near <= mEnv_FOG_NEAR_MAX) { - global_light->fogNear = fog_near; - } - else { - global_light->fogNear = mEnv_FOG_NEAR_MAX; - } - - fog_far = kankyo->base_light.fog_far + kankyo->add_light_info.fog_far; - if (fog_far <= mEnv_FOG_FAR_MAX) { - global_light->fogFar = fog_far; - } - else { - global_light->fogFar = mEnv_FOG_FAR_MAX; - } - - if (mFI_GET_TYPE(field_id) != mFI_FIELD_FG) { - global_light->fogFar = 1000; - global_light->fogNear = 1000; - } -} - -static void mEnv_PermitCheckDiffuseLight(Kankyo* kankyo) { - if ( - kankyo->sun_light.lights.diffuse.x == 0 && - kankyo->sun_light.lights.diffuse.y == 0 && - kankyo->sun_light.lights.diffuse.z == 0 - ) { - kankyo->sun_light.lights.diffuse.x = 1; - } - - if ( - kankyo->moon_light.lights.diffuse.x == 0 && - kankyo->moon_light.lights.diffuse.y == 0 && - kankyo->moon_light.lights.diffuse.z == 0 - ) { - kankyo->moon_light.lights.diffuse.x = 1; - } -} - -extern void mEnv_GetRoomPrimColor(u8* r, u8* g, u8* b, GAME_PLAY* play) { - u8 color[3]; - - f32 point_light_percent = l_mEnv_electric_light.point_light_percent; - f32 diffuse_light_effect_rate = mEnv_DiffuseLightEffectRate(); - int c; - f32 f0 = 1.0f + point_light_percent * -0.3f; - f32 f1 = point_light_percent * 0.6f; - s16 flame = l_mEnv_electric_light.point_light_is_flame; - u8* point_light_color = l_mEnv_electric_light.point_light_color; - u8* room_color = play->kankyo.base_light.room_color; - int i; - - for (i = 0; i < 3; i++) { - - if (flame) { - c = (point_light_color[0] >> 1) + (room_color[0] >> 1); // take the average - } - else { - c = room_color[0] * f0 * diffuse_light_effect_rate + point_light_color[0] * f1; - } - - if (c < 0) { - c = 0; - } - else if (c >= 256) { - c = 255; - } - - color[i] = c; - - point_light_color++; - room_color++; - } - - r[0] = color[0]; - g[0] = color[1]; - b[0] = color[2]; -} - -extern void Global_kankyo_set_room_prim(GAME_PLAY* play) { - u8 r; - u8 g; - u8 b; - GRAPH* graph; - - mEnv_GetRoomPrimColor(&r, &g, &b, play); - - { - graph = play->game.graph; - OPEN_DISP(graph); - - gDPPipeSync(NOW_POLY_OPA_DISP++); - gDPSetPrimColor(NOW_POLY_OPA_DISP++, 0, 128, r, g, b, 255); - gDPPipeSync(NOW_POLY_XLU_DISP++); - gDPSetPrimColor(NOW_POLY_XLU_DISP++, 0, 128, r, g, b, 255); - gDPPipeSync(NOW_BG_OPA_DISP++); - gDPSetPrimColor(NOW_BG_OPA_DISP++, 0, 128, r, g, b, 255); - - CLOSE_DISP(graph); - } -} - -static void mEnv_check_countdown_start(GAME_PLAY* play) { - if (mEv_check_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_PLAYSOUND) == FALSE) { - int bx; - int bz; - - mFI_BlockKind2BkNum(&bx, &bz, mRF_BLOCKKIND_POOL); - - if (bx != play->block_table.block_x || bz != play->block_table.block_z) { - if (Common_Get(time).now_sec >= mEnv_TIME_TO_SECS(23, 59, 0)) { - mEv_set_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_PLAYSOUND); - } - } - } -} - -static void mEnv_countdown_proc(GAME_PLAY* play) { - if (Common_Get(field_draw_type) == FIELD_DRAW_TYPE_TRAIN || Common_Get(field_draw_type) == FIELD_DRAW_TYPE_PLAYER_SELECT) { - return; - } - - if (mEv_check_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_ACTIVE) == TRUE) { - mEnv_check_countdown_start(play); - - if (mEv_check_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_PLAYSOUND) == TRUE) { - u8 countdown_timer; - u8 now_countdown = play->kankyo.countdown_timer; - - if (Common_Get(time.rtc_time).month != lbRTC_DECEMBER) { - countdown_timer = 0; - } - else { - countdown_timer = mTM_SECONDS_IN_DAY - Common_Get(time).now_sec; - } - - if (countdown_timer != now_countdown) { - u16 sfx; - - if (countdown_timer == 0) { - sfx = 0x151; - } - else if (countdown_timer <= 10) { - sfx = 0x150; - } - else { - sfx = 0x431; - } - - sAdo_SysTrgStart(sfx); - play->kankyo.countdown_timer = countdown_timer; - } - } - } -} - -extern int mEnv_RequestChangeLightON(GAME_PLAY* play, int light_on_type, int play_sfx) { - if (mRmTp_NowSceneLightSwitchON()) { - l_mEnv_electric_light.point_light_on_type = light_on_type; - - if (light_on_type == mEnv_LIGHT_TYPE_PLAYER) { - PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); // unused - - l_mEnv_electric_light.light_animating_on = TRUE; - l_mEnv_electric_light.light_anime_frame = 0; - - if (play_sfx == TRUE) { - sAdo_SysTrgStart(NA_SE_LIGHT_ON); - } - } - - return TRUE; - } - return FALSE; -} - -extern int mEnv_RequestChangeLightOFF(GAME_PLAY* play, int light_off_type, f32 step) { - if (mRmTp_NowSceneLightSwitchOFF()) { - l_mEnv_electric_light.point_light_off_type = light_off_type; - l_mEnv_electric_light.point_light_off_step = ABS(step); - - if (light_off_type == mEnv_LIGHT_TYPE_PLAYER) { - PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); // unused - - sAdo_SysTrgStart(NA_SE_LIGHT_OFF); - } - return TRUE; - } - - return FALSE; -} - -static void mEnv_LightAnimeToSwitchON() { - static f32 switch_on_anime_percent_table[mEnv_LIGHT_ANIME_FRAMES] = { - 0.00f, - 0.05f, - 0.10f, - 0.15f, - 0.20f, - 0.25f, - 0.30f, - 0.25f, - 0.20f, - 0.15f, - 0.10f, - 0.30f, - 0.35f, - 0.40f, - 0.45f, - 0.50f, - 0.45f, - 0.40f, - 0.35f, - 0.30f - }; - - int frame = l_mEnv_electric_light.light_anime_frame; - - if (frame >= mEnv_LIGHT_ANIME_FRAMES) { - l_mEnv_electric_light.light_animating_on = FALSE; - return; - } - - l_mEnv_electric_light.point_light_percent = l_mEnv_electric_light.point_light_min + (1.0f - l_mEnv_electric_light.point_light_min) * switch_on_anime_percent_table[frame]; - l_mEnv_electric_light.light_anime_frame++; -} - -extern void mEnv_ManagePointLight(GAME_PLAY* play, Kankyo* kankyo, Global_light* global_light) { - PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); // unused - - int lightswitch_on = mRmTp_Index2LightSwitchStatus(mRmTp_GetNowSceneLightSwitchIndex()); - - if (lightswitch_on) { - if (l_mEnv_electric_light.light_animating_on == TRUE) { - mEnv_LightAnimeToSwitchON(); - } - else { - if (l_mEnv_electric_light.point_light_on_type == mEnv_LIGHT_TYPE_LIGHTHOUSE) { - add_calc(&l_mEnv_electric_light.point_light_percent, 1.0f, 0.02f, 0.02f, 0.00007f); - } - else { - add_calc(&l_mEnv_electric_light.point_light_percent, 1.0f, 0.01f, 0.01f, 0.01f); - } - - if (chkTrigger(BUTTON_Z) && mRmTp_PleaseDrawLightSwitch()) { - mEnv_RequestChangeLightOFF(play, mEnv_LIGHT_TYPE_PLAYER, 0.0f); - } - } - } - else { - mActor_name_t field_id = mFI_GetFieldId(); - - if (l_mEnv_electric_light.point_light_off_type == mEnv_LIGHT_TYPE_PLAYER) { - add_calc(&l_mEnv_electric_light.point_light_percent, l_mEnv_electric_light.point_light_min, 0.2f, 0.2f, 0.02f); - } - else { - l_mEnv_electric_light.point_light_percent -= l_mEnv_electric_light.point_light_off_step; - - if (l_mEnv_electric_light.point_light_percent < l_mEnv_electric_light.point_light_min) { - l_mEnv_electric_light.point_light_percent = l_mEnv_electric_light.point_light_min; - } - else if (l_mEnv_electric_light.point_light_percent > 1.0f) { - l_mEnv_electric_light.point_light_percent = 1.0f; - } - } - - if (chkTrigger(BUTTON_Z) && mRmTp_PleaseDrawLightSwitch()) { - mEnv_RequestChangeLightON(play, mEnv_LIGHT_TYPE_PLAYER, TRUE); - } - else if (mFI_GET_TYPE(field_id) == mFI_FIELD_NPCROOM0 && Common_Get(last_scene_no) == SCENE_FG) { - mEnv_CheckNpcRoomPointLightNiceStatus(); - } - } - - if (mRmTp_GetNowSceneLightSwitchIndex() != -1) { - u8* color = play->kankyo.point_light.lights.point.color; int i; for (i = 0; i < 3; i++) { - color[i] = l_mEnv_electric_light.point_light_color[i] * l_mEnv_electric_light.point_light_percent; + dst[0] = mEnv_LimitChkRGBColor(src0[0] + src1[0]); + + dst++; + src0++; + src1++; + } +} + +static void mEnv_SetDiffuseLight(Kankyo* kankyo) { + mEnv_AddAndSetRGBColor(kankyo->sun_light.lights.diffuse.color, kankyo->base_light.sun_color, + kankyo->add_light_info.diffuse_color); + mEnv_AddAndSetRGBColor(kankyo->moon_light.lights.diffuse.color, kankyo->base_light.moon_color, + l_mEnv_electric_light.add_moon_color); + + kankyo->sun_light.lights.diffuse.x = kankyo->base_light.sun_dir[0]; + kankyo->sun_light.lights.diffuse.y = kankyo->base_light.sun_dir[1]; + kankyo->sun_light.lights.diffuse.z = kankyo->base_light.sun_dir[2]; + + kankyo->moon_light.lights.diffuse.x = kankyo->base_light.moon_dir[0]; + kankyo->moon_light.lights.diffuse.y = kankyo->base_light.moon_dir[1]; + kankyo->moon_light.lights.diffuse.z = kankyo->base_light.moon_dir[2]; +} + +static void mEnv_SetFog(Kankyo* kankyo, Global_light* global_light) { + int field_id = mFI_GetFieldId(); + int fog_near; + int fog_far; + + mEnv_AddAndSetRGBColor(global_light->fogColor, kankyo->base_light.fog_color, kankyo->add_light_info.fog_color); + + fog_near = kankyo->base_light.fog_near + kankyo->add_light_info.fog_near; + if (fog_near <= mEnv_FOG_NEAR_MAX) { + global_light->fogNear = fog_near; + } else { + global_light->fogNear = mEnv_FOG_NEAR_MAX; + } + + fog_far = kankyo->base_light.fog_far + kankyo->add_light_info.fog_far; + if (fog_far <= mEnv_FOG_FAR_MAX) { + global_light->fogFar = fog_far; + } else { + global_light->fogFar = mEnv_FOG_FAR_MAX; + } + + if (mFI_GET_TYPE(field_id) != mFI_FIELD_FG) { + global_light->fogFar = 1000; + global_light->fogNear = 1000; + } +} + +static void mEnv_PermitCheckDiffuseLight(Kankyo* kankyo) { + if (kankyo->sun_light.lights.diffuse.x == 0 && kankyo->sun_light.lights.diffuse.y == 0 && + kankyo->sun_light.lights.diffuse.z == 0) { + kankyo->sun_light.lights.diffuse.x = 1; + } + + if (kankyo->moon_light.lights.diffuse.x == 0 && kankyo->moon_light.lights.diffuse.y == 0 && + kankyo->moon_light.lights.diffuse.z == 0) { + kankyo->moon_light.lights.diffuse.x = 1; + } +} + +extern void mEnv_GetRoomPrimColor(u8* r, u8* g, u8* b, GAME_PLAY* play) { + u8 color[3]; + + f32 point_light_percent = l_mEnv_electric_light.point_light_percent; + f32 diffuse_light_effect_rate = mEnv_DiffuseLightEffectRate(); + int c; + f32 f0 = 1.0f + point_light_percent * -0.3f; + f32 f1 = point_light_percent * 0.6f; + s16 flame = l_mEnv_electric_light.point_light_is_flame; + u8* point_light_color = l_mEnv_electric_light.point_light_color; + u8* room_color = play->kankyo.base_light.room_color; + int i; + + for (i = 0; i < 3; i++) { + + if (flame) { + c = (point_light_color[0] >> 1) + (room_color[0] >> 1); // take the average + } else { + c = room_color[0] * f0 * diffuse_light_effect_rate + point_light_color[0] * f1; + } + + if (c < 0) { + c = 0; + } else if (c >= 256) { + c = 255; + } + + color[i] = c; + + point_light_color++; + room_color++; + } + + r[0] = color[0]; + g[0] = color[1]; + b[0] = color[2]; +} + +extern void Global_kankyo_set_room_prim(GAME_PLAY* play) { + u8 r; + u8 g; + u8 b; + GRAPH* graph; + + mEnv_GetRoomPrimColor(&r, &g, &b, play); + + { + graph = play->game.graph; + OPEN_DISP(graph); + + gDPPipeSync(NOW_POLY_OPA_DISP++); + gDPSetPrimColor(NOW_POLY_OPA_DISP++, 0, 128, r, g, b, 255); + gDPPipeSync(NOW_POLY_XLU_DISP++); + gDPSetPrimColor(NOW_POLY_XLU_DISP++, 0, 128, r, g, b, 255); + gDPPipeSync(NOW_BG_OPA_DISP++); + gDPSetPrimColor(NOW_BG_OPA_DISP++, 0, 128, r, g, b, 255); + + CLOSE_DISP(graph); + } +} + +static void mEnv_check_countdown_start(GAME_PLAY* play) { + if (mEv_check_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_PLAYSOUND) == FALSE) { + int bx; + int bz; + + mFI_BlockKind2BkNum(&bx, &bz, mRF_BLOCKKIND_POOL); + + if (bx != play->block_table.block_x || bz != play->block_table.block_z) { + if (Common_Get(time).now_sec >= mEnv_TIME_TO_SECS(23, 59, 0)) { + mEv_set_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_PLAYSOUND); + } + } + } +} + +static void mEnv_countdown_proc(GAME_PLAY* play) { + if (Common_Get(field_draw_type) == FIELD_DRAW_TYPE_TRAIN || + Common_Get(field_draw_type) == FIELD_DRAW_TYPE_PLAYER_SELECT) { + return; + } + + if (mEv_check_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_ACTIVE) == TRUE) { + mEnv_check_countdown_start(play); + + if (mEv_check_status(mEv_EVENT_NEW_YEARS_EVE_COUNTDOWN, mEv_STATUS_PLAYSOUND) == TRUE) { + u8 countdown_timer; + u8 now_countdown = play->kankyo.countdown_timer; + + if (Common_Get(time.rtc_time).month != lbRTC_DECEMBER) { + countdown_timer = 0; + } else { + countdown_timer = mTM_SECONDS_IN_DAY - Common_Get(time).now_sec; + } + + if (countdown_timer != now_countdown) { + u16 sfx; + + if (countdown_timer == 0) { + sfx = 0x151; + } else if (countdown_timer <= 10) { + sfx = 0x150; + } else { + sfx = 0x431; + } + + sAdo_SysTrgStart(sfx); + play->kankyo.countdown_timer = countdown_timer; + } + } + } +} + +extern int mEnv_RequestChangeLightON(GAME_PLAY* play, int light_on_type, int play_sfx) { + if (mRmTp_NowSceneLightSwitchON()) { + l_mEnv_electric_light.point_light_on_type = light_on_type; + + if (light_on_type == mEnv_LIGHT_TYPE_PLAYER) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); // unused + + l_mEnv_electric_light.light_animating_on = TRUE; + l_mEnv_electric_light.light_anime_frame = 0; + + if (play_sfx == TRUE) { + sAdo_SysTrgStart(NA_SE_LIGHT_ON); + } + } + + return TRUE; + } + return FALSE; +} + +extern int mEnv_RequestChangeLightOFF(GAME_PLAY* play, int light_off_type, f32 step) { + if (mRmTp_NowSceneLightSwitchOFF()) { + l_mEnv_electric_light.point_light_off_type = light_off_type; + l_mEnv_electric_light.point_light_off_step = ABS(step); + + if (light_off_type == mEnv_LIGHT_TYPE_PLAYER) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); // unused + + sAdo_SysTrgStart(NA_SE_LIGHT_OFF); + } + return TRUE; + } + + return FALSE; +} + +static void mEnv_LightAnimeToSwitchON() { + static f32 switch_on_anime_percent_table[mEnv_LIGHT_ANIME_FRAMES] = { 0.00f, 0.05f, 0.10f, 0.15f, 0.20f, + 0.25f, 0.30f, 0.25f, 0.20f, 0.15f, + 0.10f, 0.30f, 0.35f, 0.40f, 0.45f, + 0.50f, 0.45f, 0.40f, 0.35f, 0.30f }; + + int frame = l_mEnv_electric_light.light_anime_frame; + + if (frame >= mEnv_LIGHT_ANIME_FRAMES) { + l_mEnv_electric_light.light_animating_on = FALSE; + return; + } + + l_mEnv_electric_light.point_light_percent = + l_mEnv_electric_light.point_light_min + + (1.0f - l_mEnv_electric_light.point_light_min) * switch_on_anime_percent_table[frame]; + l_mEnv_electric_light.light_anime_frame++; +} + +extern void mEnv_ManagePointLight(GAME_PLAY* play, Kankyo* kankyo, Global_light* global_light) { + PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); // unused + + int lightswitch_on = mRmTp_Index2LightSwitchStatus(mRmTp_GetNowSceneLightSwitchIndex()); + + if (lightswitch_on) { + if (l_mEnv_electric_light.light_animating_on == TRUE) { + mEnv_LightAnimeToSwitchON(); + } else { + if (l_mEnv_electric_light.point_light_on_type == mEnv_LIGHT_TYPE_LIGHTHOUSE) { + add_calc(&l_mEnv_electric_light.point_light_percent, 1.0f, 0.02f, 0.02f, 0.00007f); + } else { + add_calc(&l_mEnv_electric_light.point_light_percent, 1.0f, 0.01f, 0.01f, 0.01f); + } + + if (chkTrigger(BUTTON_Z) && mRmTp_PleaseDrawLightSwitch()) { + mEnv_RequestChangeLightOFF(play, mEnv_LIGHT_TYPE_PLAYER, 0.0f); + } + } + } else { + mActor_name_t field_id = mFI_GetFieldId(); + + if (l_mEnv_electric_light.point_light_off_type == mEnv_LIGHT_TYPE_PLAYER) { + add_calc(&l_mEnv_electric_light.point_light_percent, l_mEnv_electric_light.point_light_min, 0.2f, 0.2f, + 0.02f); + } else { + l_mEnv_electric_light.point_light_percent -= l_mEnv_electric_light.point_light_off_step; + + if (l_mEnv_electric_light.point_light_percent < l_mEnv_electric_light.point_light_min) { + l_mEnv_electric_light.point_light_percent = l_mEnv_electric_light.point_light_min; + } else if (l_mEnv_electric_light.point_light_percent > 1.0f) { + l_mEnv_electric_light.point_light_percent = 1.0f; + } + } + + if (chkTrigger(BUTTON_Z) && mRmTp_PleaseDrawLightSwitch()) { + mEnv_RequestChangeLightON(play, mEnv_LIGHT_TYPE_PLAYER, TRUE); + } else if (mFI_GET_TYPE(field_id) == mFI_FIELD_NPCROOM0 && Common_Get(last_scene_no) == SCENE_FG) { + mEnv_CheckNpcRoomPointLightNiceStatus(); + } + } + + if (mRmTp_GetNowSceneLightSwitchIndex() != -1) { + u8* color = play->kankyo.point_light.lights.point.color; + int i; + + for (i = 0; i < 3; i++) { + color[i] = l_mEnv_electric_light.point_light_color[i] * l_mEnv_electric_light.point_light_percent; + } } - } } static void mEnv_ManageChangeWeatherEnvRate() { - if (l_mEnv_electric_light.now_weather != l_mEnv_electric_light.next_weather) { - l_mEnv_electric_light.change_weather_env_rate += (1.0f / 600.0f); + if (l_mEnv_electric_light.now_weather != l_mEnv_electric_light.next_weather) { + l_mEnv_electric_light.change_weather_env_rate += (1.0f / 600.0f); - if (l_mEnv_electric_light.change_weather_env_rate >= 1.0f) { - l_mEnv_electric_light.change_weather_env_rate = 1.0f; + if (l_mEnv_electric_light.change_weather_env_rate >= 1.0f) { + l_mEnv_electric_light.change_weather_env_rate = 1.0f; - if (aWeather_ChangingWeather() == FALSE) { - l_mEnv_electric_light.now_weather = l_mEnv_electric_light.next_weather; + if (aWeather_ChangingWeather() == FALSE) { + l_mEnv_electric_light.now_weather = l_mEnv_electric_light.next_weather; + l_mEnv_electric_light.change_weather_env_rate = 0.0f; + } + } + } else { l_mEnv_electric_light.change_weather_env_rate = 0.0f; - } - } - } - else { - l_mEnv_electric_light.change_weather_env_rate = 0.0f; - if (aWeather_ChangingWeather() == FALSE) { - l_mEnv_electric_light.now_weather = Common_Get(weather); - l_mEnv_electric_light.next_weather = Common_Get(weather); + if (aWeather_ChangingWeather() == FALSE) { + l_mEnv_electric_light.now_weather = Common_Get(weather); + l_mEnv_electric_light.next_weather = Common_Get(weather); + } } - } } static void mEnv_JudgeSwitchStatus() { - switch (l_mEnv_electric_light.switch_status) { - case mEnv_SWITCH_STATUS_ON: - l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_TURNING_OFF; - break; + switch (l_mEnv_electric_light.switch_status) { + case mEnv_SWITCH_STATUS_ON: + l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_TURNING_OFF; + break; - case mEnv_SWITCH_STATUS_OFF: - l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_TURNING_ON; - break; + case mEnv_SWITCH_STATUS_OFF: + l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_TURNING_ON; + break; - case mEnv_SWITCH_STATUS_TURNING_OFF: - if (mRmTp_Index2LightSwitchStatus(mRmTp_GetNowSceneLightSwitchIndex()) == FALSE) { - l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_OFF; - } - break; + case mEnv_SWITCH_STATUS_TURNING_OFF: + if (mRmTp_Index2LightSwitchStatus(mRmTp_GetNowSceneLightSwitchIndex()) == FALSE) { + l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_OFF; + } + break; - case mEnv_SWITCH_STATUS_TURNING_ON: - if (mRmTp_Index2LightSwitchStatus(mRmTp_GetNowSceneLightSwitchIndex()) != FALSE) { - l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_ON; - } - break; - } + case mEnv_SWITCH_STATUS_TURNING_ON: + if (mRmTp_Index2LightSwitchStatus(mRmTp_GetNowSceneLightSwitchIndex()) != FALSE) { + l_mEnv_electric_light.switch_status = mEnv_SWITCH_STATUS_ON; + } + break; + } } static void mEnv_rainbow_power_calc() { - if ( - Save_Get(rainbow_reserved) && - mFI_CheckFieldData() && - mFI_GET_TYPE(mFI_GetFieldId()) == mFI_FIELD_FG && - mEv_CheckTitleDemo() <= 0 && - Common_Get(time.rtc_time).month == Save_Get(rainbow_month) && - Common_Get(time.rtc_time).day == Save_Get(rainbow_day) && - Common_Get(time).now_sec >= mEnv_RAINBOW_TIME_START && Common_Get(time).now_sec < mEnv_RAINBOW_TIME_END && - Common_Get(time).season == mTM_SEASON_SUMMER - ) { - if (chase_f(Common_GetPointer(rainbow_opacity), 1.0f, (1.0f / 1800.0f)) != FALSE) { - Save_Set(rainbow_reserved, FALSE); // rainbow has been shown + if (Save_Get(rainbow_reserved) && mFI_CheckFieldData() && mFI_GET_TYPE(mFI_GetFieldId()) == mFI_FIELD_FG && + mEv_CheckTitleDemo() <= 0 && Common_Get(time.rtc_time).month == Save_Get(rainbow_month) && + Common_Get(time.rtc_time).day == Save_Get(rainbow_day) && Common_Get(time).now_sec >= mEnv_RAINBOW_TIME_START && + Common_Get(time).now_sec < mEnv_RAINBOW_TIME_END && Common_Get(time).season == mTM_SEASON_SUMMER) { + if (chase_f(Common_GetPointer(rainbow_opacity), 1.0f, (1.0f / 1800.0f)) != FALSE) { + Save_Set(rainbow_reserved, FALSE); // rainbow has been shown + } + } else { + chase_f(Common_GetPointer(rainbow_opacity), 0.0f, (1.0f / 108000.0f)); // slowly fade out rainbow } - } - else { - chase_f(Common_GetPointer(rainbow_opacity), 0.0f, (1.0f / 108000.0f)); // slowly fade out rainbow - } } static void mEnv_TaimatuPointLightWaveMoveProc(GAME_PLAY* play); static void mEnv_CheckNpcLight_ToSwitchON(GAME_PLAY* play); extern void Global_kankyo_set(GAME_PLAY* play, Kankyo* kankyo, Global_light* global_light) { - mEnv_JudgeSwitchStatus(); - mEnv_ManageChangeWeatherEnvRate(); - mEnv_set_time(kankyo); - mEnv_SetBaseLight(kankyo); - mEnv_AddAndSetRGBColor(global_light->ambientColor, kankyo->base_light.ambient_color, kankyo->add_light_info.ambient_color); - mEnv_SetDiffuseLight(kankyo); - mEnv_SetFog(kankyo, global_light); - mEnv_PermitCheckDiffuseLight(kankyo); - mEnv_TaimatuPointLightWaveMoveProc(play); - mEnv_CheckNpcLight_ToSwitchON(play); - mEnv_countdown_proc(play); - mEnv_MakeWindowLightAlpha(TRUE); - mEnv_rainbow_power_calc(); + mEnv_JudgeSwitchStatus(); + mEnv_ManageChangeWeatherEnvRate(); + mEnv_set_time(kankyo); + mEnv_SetBaseLight(kankyo); + mEnv_AddAndSetRGBColor(global_light->ambientColor, kankyo->base_light.ambient_color, + kankyo->add_light_info.ambient_color); + mEnv_SetDiffuseLight(kankyo); + mEnv_SetFog(kankyo, global_light); + mEnv_PermitCheckDiffuseLight(kankyo); + mEnv_TaimatuPointLightWaveMoveProc(play); + mEnv_CheckNpcLight_ToSwitchON(play); + mEnv_countdown_proc(play); + mEnv_MakeWindowLightAlpha(TRUE); + mEnv_rainbow_power_calc(); - if (l_mEnv_electric_light._98 < 10) { - l_mEnv_electric_light._98++; - } + if (l_mEnv_electric_light._98 < 10) { + l_mEnv_electric_light._98++; + } } static int mEnv_CheckNpcRoomPointLightNiceStatus() { - mNPS_schedule_c* schedule; - Animal_c* animal; + mNPS_schedule_c* schedule; + Animal_c* animal; - if (Save_Get(scene_no) == SCENE_COTTAGE_NPC) { - animal = Save_GetPointer(island.animal); - schedule = Common_GetPointer(npc_schedule[ANIMAL_NUM_MAX]); - - if (schedule != NULL) { - if ( - schedule->current_type == mNPS_SCHED_IN_HOUSE && - animal->is_home == TRUE && - (Common_Get(time).now_sec < mEnv_NPC_LIGHTS_OFF_TIME || Common_Get(time).now_sec >= mEnv_NPC_LIGHTS_ON_TIME) - ) { - return TRUE; - } - } - } - else { - animal = mNpc_GetAnimalInfoP(Common_Get(house_owner_name)); + if (Save_Get(scene_no) == SCENE_COTTAGE_NPC) { + animal = Save_GetPointer(island.animal); + schedule = Common_GetPointer(npc_schedule[ANIMAL_NUM_MAX]); - if ( - animal != NULL - ) { - schedule = mNPS_get_schedule_area(&animal->id); - - if (schedule != NULL) { - if ( - schedule->current_type == mNPS_SCHED_IN_HOUSE && - animal->is_home == TRUE && - (Common_Get(time).now_sec < mEnv_NPC_LIGHTS_OFF_TIME || Common_Get(time).now_sec >= mEnv_NPC_LIGHTS_ON_TIME) - ) { - return TRUE; + if (schedule != NULL) { + if (schedule->current_type == mNPS_SCHED_IN_HOUSE && animal->is_home == TRUE && + (Common_Get(time).now_sec < mEnv_NPC_LIGHTS_OFF_TIME || + Common_Get(time).now_sec >= mEnv_NPC_LIGHTS_ON_TIME)) { + return TRUE; + } } - } - } - } + } else { + animal = mNpc_GetAnimalInfoP(Common_Get(house_owner_name)); - return FALSE; + if (animal != NULL) { + schedule = mNPS_get_schedule_area(&animal->id); + + if (schedule != NULL) { + if (schedule->current_type == mNPS_SCHED_IN_HOUSE && animal->is_home == TRUE && + (Common_Get(time).now_sec < mEnv_NPC_LIGHTS_OFF_TIME || + Common_Get(time).now_sec >= mEnv_NPC_LIGHTS_ON_TIME)) { + return TRUE; + } + } + } + } + + return FALSE; } static void mEnv_TaimatuPointLightWaveMoveProc(GAME_PLAY* play) { - static s16 point_light_wave_counter; - u8* point_light_color; + static s16 point_light_wave_counter; + u8* point_light_color; - point_light_wave_counter += 400; - point_light_color = l_mEnv_electric_light.point_light_color; + point_light_wave_counter += 400; + point_light_color = l_mEnv_electric_light.point_light_color; - if (l_mEnv_electric_light.point_light_is_flame) { - f32 wave = sin_s(point_light_wave_counter); - u8 c; + if (l_mEnv_electric_light.point_light_is_flame) { + f32 wave = sin_s(point_light_wave_counter); + u8 c; - if (wave >= 0.0f) { - wave = sin_s(point_light_wave_counter); + if (wave >= 0.0f) { + wave = sin_s(point_light_wave_counter); + } else { + wave = -sin_s(point_light_wave_counter); + } + + c = (wave * 40.0f) + 40.0f; + point_light_color[0] = 255 - c; // r + point_light_color[1] = 240 - c; // g } - else { - wave = -sin_s(point_light_wave_counter); - } - - c = (wave * 40.0f) + 40.0f; - point_light_color[0] = 255 - c; // r - point_light_color[1] = 240 - c; // g - } } static void mEnv_CheckNpcLight_ToSwitchON(GAME_PLAY* play) { - // stubbed + // stubbed } static void mEnv_PointLightSet(GAME_PLAY* play, f32 fade_rate) { - PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); - s16* kk_event_data = (s16*)mEv_get_save_area(mEv_EVENT_KK_SLIDER, 10); + PLAYER_ACTOR* player = get_player_actor_withoutCheck(play); + s16* kk_event_data = (s16*)mEv_get_save_area(mEv_EVENT_KK_SLIDER, 10); - Light_point_ct( - &play->kankyo.point_light, - player->actor_class.world.position.x, - player->actor_class.world.position.y, - player->actor_class.world.position.z - 25.0f, - 255, - 255, - 220, - (f32)kk_event_data[0] * (1.0f - fade_rate) - ); + Light_point_ct(&play->kankyo.point_light, player->actor_class.world.position.x, + player->actor_class.world.position.y, player->actor_class.world.position.z - 25.0f, 255, 255, 220, + (f32)kk_event_data[0] * (1.0f - fade_rate)); - l_mEnv_electric_light.point_light_color[0] = 255; - l_mEnv_electric_light.point_light_color[1] = 255; - l_mEnv_electric_light.point_light_color[2] = 220; + l_mEnv_electric_light.point_light_color[0] = 255; + l_mEnv_electric_light.point_light_color[1] = 255; + l_mEnv_electric_light.point_light_color[2] = 220; } static Light_list* S_get_light_list; extern void staffroll_light_init(GAME_PLAY* play) { - l_mEnv_electric_light.staffroll_fade_rate = 1.0f; - mEnv_PointLightSet(play, 1.0f); - S_get_light_list = Global_light_list_new(play, &play->global_light, &play->kankyo.point_light); + l_mEnv_electric_light.staffroll_fade_rate = 1.0f; + mEnv_PointLightSet(play, 1.0f); + S_get_light_list = Global_light_list_new((GAME*)play, &play->global_light, &play->kankyo.point_light); } static void mEnv_DecideStaffrollFadeOutRate() { - l_mEnv_electric_light.staffroll_fade_rate -= 1.0f / (((f32)GETREG(CRV, 91) * 0.01f + 2.8f) * 60.0f); + l_mEnv_electric_light.staffroll_fade_rate -= 1.0f / (((f32)GETREG(CRV, 91) * 0.01f + 2.8f) * 60.0f); - if (l_mEnv_electric_light.staffroll_fade_rate <= 0.0f) { - l_mEnv_electric_light.staffroll_fade_rate = 0.0f; - } + if (l_mEnv_electric_light.staffroll_fade_rate <= 0.0f) { + l_mEnv_electric_light.staffroll_fade_rate = 0.0f; + } } static void mEnv_DecideStaffrollFadeInRate() { - l_mEnv_electric_light.staffroll_fade_rate += 1.0f / (((f32)GETREG(CRV, 91) * 0.01f + 2.8f) * 60.0f); + l_mEnv_electric_light.staffroll_fade_rate += 1.0f / (((f32)GETREG(CRV, 91) * 0.01f + 2.8f) * 60.0f); - if (l_mEnv_electric_light.staffroll_fade_rate > 1.0f) { - l_mEnv_electric_light.staffroll_fade_rate = 1.0f; - } + if (l_mEnv_electric_light.staffroll_fade_rate > 1.0f) { + l_mEnv_electric_light.staffroll_fade_rate = 1.0f; + } } extern void staffroll_light_proc_start(GAME_PLAY* play) { - mEnv_DecideStaffrollFadeOutRate(); - mEnv_PointLightSet(play, l_mEnv_electric_light.staffroll_fade_rate); + mEnv_DecideStaffrollFadeOutRate(); + mEnv_PointLightSet(play, l_mEnv_electric_light.staffroll_fade_rate); } extern int staffroll_light_proc_end(GAME_PLAY* play) { - mEnv_DecideStaffrollFadeInRate(); - mEnv_PointLightSet(play, l_mEnv_electric_light.staffroll_fade_rate); + mEnv_DecideStaffrollFadeInRate(); + mEnv_PointLightSet(play, l_mEnv_electric_light.staffroll_fade_rate); - return l_mEnv_electric_light.staffroll_fade_rate == 1.0f; + return l_mEnv_electric_light.staffroll_fade_rate == 1.0f; } extern void staffroll_light_dt(GAME_PLAY* play) { - Global_light_list_delete(&play->global_light, S_get_light_list); + Global_light_list_delete(&play->global_light, S_get_light_list); } extern void mEnv_GetShadowPrimColor_Light(u8* r, u8* g, u8* b, GAME* game) { - GAME_PLAY* play = (GAME_PLAY*)game; + GAME_PLAY* play = (GAME_PLAY*)game; - r[0] = play->kankyo.base_light.shadow_color[0]; - g[0] = play->kankyo.base_light.shadow_color[1]; - b[0] = play->kankyo.base_light.shadow_color[2]; + r[0] = play->kankyo.base_light.shadow_color[0]; + g[0] = play->kankyo.base_light.shadow_color[1]; + b[0] = play->kankyo.base_light.shadow_color[2]; } static int mEnv_Pointlight_on_check() { - return (l_mEnv_electric_light.point_light_percent <= l_mEnv_electric_light.point_light_min) ? FALSE : TRUE; + return (l_mEnv_electric_light.point_light_percent <= l_mEnv_electric_light.point_light_min) ? FALSE : TRUE; } extern int mEnv_PointLightMin() { - return l_mEnv_electric_light.point_light_percent <= l_mEnv_electric_light.point_light_min; + return l_mEnv_electric_light.point_light_percent <= l_mEnv_electric_light.point_light_min; } /* @unused @fabricated - likely incorrect, real size is 0x68 (DnM+), this is 0x44 */ extern MATCH_FORCESTRIP int mEnv_HereIsPlayerSelect() { - static int place_chk[4] = { SCENE_PLAYERSELECT, SCENE_PLAYERSELECT_2, SCENE_PLAYERSELECT_3, SCENE_PLAYERSELECT_SAVE }; - - int i; + static int place_chk[4] = { SCENE_PLAYERSELECT, SCENE_PLAYERSELECT_2, SCENE_PLAYERSELECT_3, + SCENE_PLAYERSELECT_SAVE }; - for (i = 0; i < 4; i++) { - if (place_chk[i] == Save_Get(scene_no)) { - return TRUE; + int i; + + for (i = 0; i < 4; i++) { + if (place_chk[i] == Save_Get(scene_no)) { + return TRUE; + } } - } - return FALSE; + return FALSE; } static void mEnv_MakeWindowLightAlpha(int enabled) { - f32 step = 1.0f / 100.0f; - f32 target = 0.0f; + f32 step = 1.0f / 100.0f; + f32 target = 0.0f; - if (Common_Get(field_draw_type) == FIELD_DRAW_TYPE_INDOORS) { - int switch_idx = mRmTp_GetNowSceneLightSwitchIndex(); + if (Common_Get(field_draw_type) == FIELD_DRAW_TYPE_INDOORS) { + int switch_idx = mRmTp_GetNowSceneLightSwitchIndex(); - if (enabled == FALSE) { - l_mEnv_electric_light.windowlight_alpha = 0.0f; - step = 1.0f; - } + if (enabled == FALSE) { + l_mEnv_electric_light.windowlight_alpha = 0.0f; + step = 1.0f; + } - if ( - ABS((s16)Common_Get(time).now_sec) < 120 || - ABS((s16)(Common_Get(time).now_sec - mTM_SECONDS_IN_DAY)) < 120 || - ABS((s16)(Common_Get(time).now_sec - mTM_SECONDS_IN_HALFDAY)) < 120 - ) { - target = 0.0f; - } - else if (switch_idx != -1) { - target = (1.0f - l_mEnv_electric_light.point_light_percent) * 0.78f + 0.22f; - } - else if (Common_Get(time).now_sec >= mEnv_NPC_LIGHTS_OFF_TIME && Common_Get(time).now_sec < mEnv_NPC_LIGHTS_ON_TIME) { - target = 1.0f; - } + if (ABS((s16)Common_Get(time).now_sec) < 120 || + ABS((s16)(Common_Get(time).now_sec - mTM_SECONDS_IN_DAY)) < 120 || + ABS((s16)(Common_Get(time).now_sec - mTM_SECONDS_IN_HALFDAY)) < 120) { + target = 0.0f; + } else if (switch_idx != -1) { + target = (1.0f - l_mEnv_electric_light.point_light_percent) * 0.78f + 0.22f; + } else if (Common_Get(time).now_sec >= mEnv_NPC_LIGHTS_OFF_TIME && + Common_Get(time).now_sec < mEnv_NPC_LIGHTS_ON_TIME) { + target = 1.0f; + } - add_calc(&l_mEnv_electric_light.windowlight_alpha, target, 1.0f - sqrtf(0.8), 0.5f * step, 0.5f * step); - } + add_calc(&l_mEnv_electric_light.windowlight_alpha, target, 1.0f - sqrtf(0.8), 0.5f * step, 0.5f * step); + } } extern f32 mKK_windowlight_alpha_get() { - return l_mEnv_electric_light.windowlight_alpha; + return l_mEnv_electric_light.windowlight_alpha; } extern int mEnv_ReqeustChangeWeatherEnviroment(s16 now_weather, s16 next_weather) { - if (l_mEnv_electric_light.now_weather == l_mEnv_electric_light.next_weather) { - if (l_mEnv_normal_kcolor_data[now_weather & 3] != l_mEnv_normal_kcolor_data[next_weather & 3]) { - l_mEnv_electric_light.change_weather_env_rate = 0.0f; - l_mEnv_electric_light.now_weather = now_weather & 3; - l_mEnv_electric_light.next_weather = next_weather & 3; + if (l_mEnv_electric_light.now_weather == l_mEnv_electric_light.next_weather) { + if (l_mEnv_normal_kcolor_data[now_weather & 3] != l_mEnv_normal_kcolor_data[next_weather & 3]) { + l_mEnv_electric_light.change_weather_env_rate = 0.0f; + l_mEnv_electric_light.now_weather = now_weather & 3; + l_mEnv_electric_light.next_weather = next_weather & 3; + } + + return TRUE; } - return TRUE; - } - - return FALSE; + return FALSE; } extern int mEnv_ReservePointLight(GAME_PLAY* play, xyz_t* pos, u8 r, u8 g, u8 b, s16 power) { - Light_list* list; - Lights* point_light; - int i; + Light_list* list; + Lights* point_light; + int i; - for (i = 0; i < mEnv_POINT_LIGHT_NUM; i++) { - if (l_mEnv_electric_light.point_light_list_buf[i] == NULL) { - point_light = &l_mEnv_electric_light.point_lights[i]; + for (i = 0; i < mEnv_POINT_LIGHT_NUM; i++) { + if (l_mEnv_electric_light.point_light_list_buf[i] == NULL) { + point_light = &l_mEnv_electric_light.point_lights[i]; - Light_point_ct(point_light, pos->x, pos->y, pos->z, r, g, b, power); - list = Global_light_list_new(play, &play->global_light, point_light); + Light_point_ct(point_light, pos->x, pos->y, pos->z, r, g, b, power); + list = Global_light_list_new((GAME*)play, &play->global_light, point_light); - if (list != NULL) { - l_mEnv_electric_light.point_light_list_buf[i] = list; - return i; - } + if (list != NULL) { + l_mEnv_electric_light.point_light_list_buf[i] = list; + return i; + } + } } - } - return -1; + return -1; } extern void mEnv_OperateReservedPointLight_Position(int point_light_idx, xyz_t* pos) { - if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { - Lights* l = &l_mEnv_electric_light.point_lights[point_light_idx]; - - l->lights.point.x = pos->x; - l->lights.point.y = pos->y; - l->lights.point.z = pos->z; - } + if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { + Lights* l = &l_mEnv_electric_light.point_lights[point_light_idx]; + + l->lights.point.x = pos->x; + l->lights.point.y = pos->y; + l->lights.point.z = pos->z; + } } extern void mEnv_OperateReservedPointLight_Color(int point_light_idx, u8 r, u8 g, u8 b) { - if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { - Lights* l = &l_mEnv_electric_light.point_lights[point_light_idx]; - - l->lights.point.color[0] = r; - l->lights.point.color[1] = g; - l->lights.point.color[2] = b; - } + if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { + Lights* l = &l_mEnv_electric_light.point_lights[point_light_idx]; + + l->lights.point.color[0] = r; + l->lights.point.color[1] = g; + l->lights.point.color[2] = b; + } } extern void mEnv_OperateReservedPointLight_Power(int point_light_idx, s16 power) { - if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { - Lights* l = &l_mEnv_electric_light.point_lights[point_light_idx]; - - l->lights.point.radius = power; - } + if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { + Lights* l = &l_mEnv_electric_light.point_lights[point_light_idx]; + + l->lights.point.radius = power; + } } extern void mEnv_OperateReservedPointLight(int point_light_idx, xyz_t* pos, u8 r, u8 g, u8 b, s16 power) { - mEnv_OperateReservedPointLight_Position(point_light_idx, pos); - mEnv_OperateReservedPointLight_Color(point_light_idx, r, g, b); - mEnv_OperateReservedPointLight_Power(point_light_idx, power); + mEnv_OperateReservedPointLight_Position(point_light_idx, pos); + mEnv_OperateReservedPointLight_Color(point_light_idx, r, g, b); + mEnv_OperateReservedPointLight_Power(point_light_idx, power); } extern int mEnv_CancelReservedPointLight(int point_light_idx, GAME_PLAY* play) { - if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { - Light_list** list = l_mEnv_electric_light.point_light_list_buf; + if (point_light_idx >= 0 && point_light_idx < mEnv_POINT_LIGHT_NUM) { + Light_list** list = l_mEnv_electric_light.point_light_list_buf; - Global_light_list_delete(&play->global_light, list[point_light_idx]); - list[point_light_idx] = NULL; - point_light_idx = -1; - } + Global_light_list_delete(&play->global_light, list[point_light_idx]); + list[point_light_idx] = NULL; + point_light_idx = -1; + } - return point_light_idx; + return point_light_idx; } diff --git a/src/m_lights.c b/src/m_lights.c index 286f5deb..3423bba7 100644 --- a/src/m_lights.c +++ b/src/m_lights.c @@ -11,26 +11,25 @@ extern Gfx point_light_model[]; static void Light_point_color_set(Lights* lights, u8 r, u8 g, u8 b, s16 radius); static void Global_light_list_ct(Global_light* light); -static void Global_light_ambient_set(Global_light* light, u8 r,u8 g,u8 b); -static void Global_light_fog_set(Global_light* light ,u8 r,u8 g,u8 b,s16 near,s16 far); +static void Global_light_ambient_set(Global_light* light, u8 r, u8 g, u8 b); +static void Global_light_fog_set(Global_light* light, u8 r, u8 g, u8 b, s16 near, s16 far); static LightsN* new_LightsN(GRAPH*, u8 r, u8 g, u8 b); - -static void point_data_set(Lights* lights, s16 x, s16 y, s16 z,u8 r, u8 g, u8 b, s16 radius, int type ){ +static void point_data_set(Lights* lights, s16 x, s16 y, s16 z, u8 r, u8 g, u8 b, s16 radius, int type) { lights->type = type; lights->lights.point.x = x; - lights->lights.point.y = y; - lights->lights.point.z = z; - Light_point_color_set(lights,r,g,b,radius); + lights->lights.point.y = y; + lights->lights.point.z = z; + Light_point_color_set(lights, r, g, b, radius); } -extern void Light_point_ct(Lights* lights, s16 x, s16 y, s16 z, u8 r, u8 g, u8 b, s16 radius){ +extern void Light_point_ct(Lights* lights, s16 x, s16 y, s16 z, u8 r, u8 g, u8 b, s16 radius) { - point_data_set(lights, x, y, z, r,g,b,radius,0); + point_data_set(lights, x, y, z, r, g, b, radius, 0); } -static void Light_point_color_set(Lights* lights, u8 r, u8 g, u8 b, s16 radius){ +static void Light_point_color_set(Lights* lights, u8 r, u8 g, u8 b, s16 radius) { lights->lights.point.color[0] = r; lights->lights.point.color[1] = g; @@ -38,7 +37,7 @@ static void Light_point_color_set(Lights* lights, u8 r, u8 g, u8 b, s16 radius){ lights->lights.point.radius = radius; } -extern void Light_diffuse_ct(Lights* lights, s8 x, s8 y, s8 z, u8 r, u8 g, u8 b){ +extern void Light_diffuse_ct(Lights* lights, s8 x, s8 y, s8 z, u8 r, u8 g, u8 b) { lights->type = 1; lights->lights.diffuse.x = x; @@ -47,22 +46,20 @@ extern void Light_diffuse_ct(Lights* lights, s8 x, s8 y, s8 z, u8 r, u8 g, u8 b) lights->lights.diffuse.color[0] = r; lights->lights.diffuse.color[1] = g; lights->lights.diffuse.color[2] = b; - } -extern void LightsN_disp_BG(LightsN* lights, GRAPH* graph){ +extern void LightsN_disp_BG(LightsN* lights, GRAPH* graph) { Light_new* light; int i; - + OPEN_DISP(graph); gSPNumLights(NOW_BG_OPA_DISP++, lights->diffuse_count); - light = lights->l; - for(i = 0; i < lights->diffuse_count; i){ + for (i = 0; i < lights->diffuse_count; i) { i++; gSPLight(NOW_BG_OPA_DISP++, light, i); gSPLight(NOW_BG_XLU_DISP++, light, i); @@ -72,28 +69,27 @@ extern void LightsN_disp_BG(LightsN* lights, GRAPH* graph){ i++; gSPLight(NOW_BG_OPA_DISP++, &lights->a.l, i); gSPLight(NOW_BG_XLU_DISP++, &lights->a.l, i); - + CLOSE_DISP(graph); } -extern void LightsN_disp(LightsN* lights, GRAPH* graph){ +extern void LightsN_disp(LightsN* lights, GRAPH* graph) { Light_new* light; int i; Gfx* opa_gfx; Gfx* xlu_gfx; - - + OPEN_DISP(graph); opa_gfx = NOW_POLY_OPA_DISP; xlu_gfx = NOW_POLY_XLU_DISP; gSPNumLights(opa_gfx++, lights->diffuse_count); gSPNumLights(xlu_gfx++, lights->diffuse_count); - + light = lights->l; - for(i = 0; i < lights->diffuse_count;){ + for (i = 0; i < lights->diffuse_count;) { i++; gSPLight(opa_gfx++, light, i); gSPLight(xlu_gfx++, light, i); @@ -109,155 +105,143 @@ extern void LightsN_disp(LightsN* lights, GRAPH* graph){ CLOSE_DISP(graph); } -static Light_new* LightsN_new_diffuse(LightsN* lights){ - - if(lights->diffuse_count >= 7){ +static Light_new* LightsN_new_diffuse(LightsN* lights) { + + if (lights->diffuse_count >= 7) { return NULL; } return &lights->l[lights->diffuse_count++]; } -static void LightsN__point_proc(LightsN* lights, LightParams* lightInfo, xyz_t* point){ +static void LightsN__point_proc(LightsN* lights, LightParams* lightInfo, xyz_t* point) { f32 xdiff; - f32 ydiff; + f32 ydiff; f32 zdiff; f32 pointd; f32 rad; Light_new* light; - - if((point != NULL) && (lightInfo->point.radius > 0)){ + + if ((point != NULL) && (lightInfo->point.radius > 0)) { xdiff = lightInfo->point.x - point->x; - ydiff = lightInfo->point.y - point->y; - zdiff = lightInfo->point.z - point->z; + ydiff = lightInfo->point.y - point->y; + zdiff = lightInfo->point.z - point->z; pointd = (xdiff * xdiff) + (ydiff * ydiff) + (zdiff * zdiff); - + rad = lightInfo->point.radius; - if(pointd < (rad * rad)){ + if (pointd < (rad * rad)) { light = LightsN_new_diffuse(lights); - - if(light != NULL){ + + if (light != NULL) { pointd = sqrtf(pointd); rad = pointd / rad; - rad = 1 - (rad* rad); - + rad = 1 - (rad * rad); + light->l.col[0] = light->l.colc[0] = lightInfo->point.color[0] * rad; light->l.col[1] = light->l.colc[1] = lightInfo->point.color[1] * rad; light->l.col[2] = light->l.colc[2] = lightInfo->point.color[2] * rad; - + rad = (pointd < 1) ? 120.0f : 120.0f / pointd; - + light->l.dir[0] = xdiff * rad; light->l.dir[1] = ydiff * rad; light->l.dir[2] = zdiff * rad; - } } } } -static void LightsN__P_point_proc(LightsN* lights, LightParams* lightInfo, xyz_t* pos){ +static void LightsN__P_point_proc(LightsN* lights, LightParams* lightInfo, xyz_t* pos) { f32 rad; xyz_t point; Light_new* light; - f32 kq; + f32 kq; - if(lightInfo->point.radius > 0){ + if (lightInfo->point.radius > 0) { light = LightsN_new_diffuse(lights); - if(light != NULL){ + if (light != NULL) { rad = lightInfo->point.radius; kq = 4500000.0f / (rad * rad); - if(kq > 255.0f){ + if (kq > 255.0f) { kq = 255.0f; - } - else if(kq < 20.0f){ + } else if (kq < 20.0f) { kq = 20.0f; } light->l.col[0] = lightInfo->point.color[0]; light->l.colc[0] = light->l.col[0]; - + light->l.col[1] = lightInfo->point.color[1]; light->l.colc[1] = light->l.col[1]; - + light->l.col[2] = lightInfo->point.color[2]; light->l.colc[2] = light->l.col[2]; - + light->p.pos[0] = lightInfo->point.x; light->p.pos[1] = lightInfo->point.y; light->p.pos[2] = lightInfo->point.z; light->p.kc = 8; light->p.kl = -1; light->p.kq = kq; - } } } - -static void LightsN__diffuse_proc(LightsN* lights, LightParams* lightInfo){ +static void LightsN__diffuse_proc(LightsN* lights, LightParams* lightInfo) { Light_new* light; light = LightsN_new_diffuse(lights); - if(light != NULL){ + if (light != NULL) { light->l.col[0] = light->l.colc[0] = lightInfo->diffuse.color[0]; light->l.col[1] = light->l.colc[1] = lightInfo->diffuse.color[1]; light->l.col[2] = light->l.colc[2] = lightInfo->diffuse.color[2]; light->l.dir[0] = lightInfo->diffuse.x; - light->l.dir[1] = lightInfo->diffuse.y; - light->l.dir[2] = lightInfo->diffuse.z; - + light->l.dir[1] = lightInfo->diffuse.y; + light->l.dir[2] = lightInfo->diffuse.z; } } -extern void LightsN_list_check(LightsN* lights, Light_list* node, xyz_t* pos){ +extern void LightsN_list_check(LightsN* lights, Light_list* node, xyz_t* pos) { - const static light_point_proc poslight_type_proc[] = { - LightsN__point_proc, - (light_point_proc)LightsN__diffuse_proc, - LightsN__point_proc - }; + const static light_point_proc poslight_type_proc[] = { LightsN__point_proc, (light_point_proc)LightsN__diffuse_proc, + LightsN__point_proc }; - const static light_P_point_proc light_type_proc[] = { - LightsN__P_point_proc, - (light_P_point_proc)LightsN__diffuse_proc, - LightsN__P_point_proc - }; + const static light_P_point_proc light_type_proc[] = { LightsN__P_point_proc, + (light_P_point_proc)LightsN__diffuse_proc, + LightsN__P_point_proc }; - if(pos == NULL){ - while(node != NULL) { + if (pos == NULL) { + while (node != NULL) { light_type_proc[node->info->type](lights, &node->info->lights, pos); node = node->next; } - } - else{ - while(node != NULL) { + } else { + while (node != NULL) { poslight_type_proc[node->info->type](lights, &node->info->lights, pos); node = node->next; } } } -static Light_list* Light_list_buf_new(){ +static Light_list* Light_list_buf_new() { Light_list* light; - - if(light_list_buf.current >= 32){ + + if (light_list_buf.current >= 32) { return NULL; } light = &light_list_buf.lights[light_list_buf.idx]; - while(light->info != NULL){ + while (light->info != NULL) { light_list_buf.idx++; - if(light_list_buf.idx < 32){ + if (light_list_buf.idx < 32) { light++; - } - else{ + } else { light_list_buf.idx = 0; light = &light_list_buf.lights[0]; } @@ -267,62 +251,59 @@ static Light_list* Light_list_buf_new(){ return light; } -static void Light_list_buf_delete(Light_list* light){ - if(light != NULL){ +static void Light_list_buf_delete(Light_list* light) { + if (light != NULL) { light_list_buf.current--; light->info = NULL; light_list_buf.idx = (light - light_list_buf.lights) / (int)(sizeof(Light_list)); } } -extern void Global_light_ct(Global_light* glight){ +extern void Global_light_ct(Global_light* glight) { Global_light_list_ct(glight); - Global_light_ambient_set(glight, 80,80,80); - Global_light_fog_set(glight, 0,0,0, 996, 1600); + Global_light_ambient_set(glight, 80, 80, 80); + Global_light_fog_set(glight, 0, 0, 0, 996, 1600); bzero(&light_list_buf, sizeof(Light_buffer)); } -static void Global_light_ambient_set(Global_light* glight, u8 r, u8 g, u8 b){ +static void Global_light_ambient_set(Global_light* glight, u8 r, u8 g, u8 b) { glight->ambientColor[0] = r; glight->ambientColor[1] = g; - glight->ambientColor[2] = b; - + glight->ambientColor[2] = b; } -static void Global_light_fog_set(Global_light* glight, u8 r, u8 g, u8 b, s16 near, s16 far){ +static void Global_light_fog_set(Global_light* glight, u8 r, u8 g, u8 b, s16 near, s16 far) { glight->fogColor[0] = r; glight->fogColor[1] = g; glight->fogColor[2] = b; glight->fogNear = near; glight->fogFar = far; - } - -extern LightsN* Global_light_read(Global_light* glight, GRAPH* graph){ +extern LightsN* Global_light_read(Global_light* glight, GRAPH* graph) { return new_LightsN(graph, glight->ambientColor[0], glight->ambientColor[1], glight->ambientColor[2]); } -static void Global_light_list_ct(Global_light* glight){ +static void Global_light_list_ct(Global_light* glight) { glight->list = NULL; } -extern Light_list* Global_light_list_new(GAME_PLAY* play, Global_light* glight, Lights* light){ +extern Light_list* Global_light_list_new(GAME* game, Global_light* glight, Lights* light) { Light_list* clight; clight = Light_list_buf_new(); - if(clight != NULL){ + if (clight != NULL) { clight->info = light; clight->prev = NULL; clight->next = glight->list; - if(glight->list != NULL){ + if (glight->list != NULL) { glight->list->prev = clight; } @@ -332,75 +313,71 @@ extern Light_list* Global_light_list_new(GAME_PLAY* play, Global_light* glight, return clight; } -extern void Global_light_list_delete(Global_light* glight, Light_list* light){ +extern void Global_light_list_delete(Global_light* glight, Light_list* light) { - if(light != NULL){ - if(light->prev != NULL){ + if (light != NULL) { + if (light->prev != NULL) { light->prev->next = light->next; - } - else{ + } else { glight->list = light->next; } - if(light->next != NULL){ + if (light->next != NULL) { light->next->prev = light->prev; } Light_list_buf_delete(light); } } -static LightsN* new_LightsN(GRAPH* graph, u8 r, u8 g, u8 b){ +static LightsN* new_LightsN(GRAPH* graph, u8 r, u8 g, u8 b) { LightsN* light; light = GRAPH_ALLOC(graph, sizeof(LightsN)); light->a.l.col[0] = light->a.l.colc[0] = r; - light->a.l.col[1] = light->a.l.colc[1] = g; - light->a.l.col[2] = light->a.l.colc[2] = b; + light->a.l.col[1] = light->a.l.colc[1] = g; + light->a.l.col[2] = light->a.l.colc[2] = b; light->diffuse_count = 0; return light; } - - -extern void Light_list_point_draw(GAME_PLAY* play){ +extern void Light_list_point_draw(GAME_PLAY* play) { LightPoint* lightInfo; Light_list* light; GRAPH* g = play->game.graph; f32 rad; Gfx* dl; - light = play->global_light.list; - - + light = play->global_light.list; + OPEN_DISP(g); dl = gfx_softsprite_prim_xlu(NOW_POLY_XLU_DISP); - - gDPSetAlphaDither(dl++, G_AD_NOISE); - gDPSetColorDither(dl++, G_CD_MAGICSQ); - gSPDisplayList(dl++,point_light_init_model); - while(light != NULL) { - if(light->info->type == 2){ + gDPSetAlphaDither(dl++, G_AD_NOISE); + gDPSetColorDither(dl++, G_CD_MAGICSQ); + gSPDisplayList(dl++, point_light_init_model); + + while (light != NULL) { + if (light->info->type == 2) { lightInfo = &light->info->lights.point; - if(lightInfo->drawGlow){ + if (lightInfo->drawGlow) { rad = (lightInfo->radius * lightInfo->radius) * 2.60000001617e-06f; gDPSetPrimColor(dl++, 0, 0, lightInfo->color[0], lightInfo->color[1], lightInfo->color[2], 50); Matrix_translate(lightInfo->x, lightInfo->y, lightInfo->z, 0); - Matrix_scale(rad,rad,rad, 1); + Matrix_scale(rad, rad, rad, 1); - gSPMatrix(dl++, _Matrix_to_Mtx_new(play->game.graph),G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(dl++, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(dl++,point_light_model); - } + gSPDisplayList(dl++, point_light_model); + } } - light = light->next; + light = light->next; } SET_POLY_XLU_DISP(dl); CLOSE_DISP(g); -} \ No newline at end of file +} diff --git a/src/m_play.c b/src/m_play.c index d6180256..667da5f4 100644 --- a/src/m_play.c +++ b/src/m_play.c @@ -42,53 +42,49 @@ fbdemo_c fbdemo; u8 gxbuf[0x140] ATTRIBUTE_ALIGN(32); u8 prbuf[0x12c000] ATTRIBUTE_ALIGN(32); -void Game_play_Reset_destiny(){ +void Game_play_Reset_destiny() { lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time); mPr_destiny_c* destiny = &Common_Get(now_private)->destiny; - if (destiny->type == mPr_DESTINY_NORMAL) { + if (destiny->type == mPr_DESTINY_NORMAL) { return; } - - if( - (rtc_time->year != destiny->received_time.year) || - (rtc_time->month != destiny->received_time.month) || - (rtc_time->day != destiny->received_time.day) - ) { + + if ((rtc_time->year != destiny->received_time.year) || (rtc_time->month != destiny->received_time.month) || + (rtc_time->day != destiny->received_time.day)) { Common_Set(now_private->destiny.type, mPr_DESTINY_NORMAL); } } -void event_title_flag_on(){ - if(Common_Get(event_title_flags) != 0){ - Common_Set(event_notification_active,1); +void event_title_flag_on() { + if (Common_Get(event_title_flags) != 0) { + Common_Set(event_notification_active, 1); } } -void event_title_flag_off(){ +void event_title_flag_off() { - if(Common_Get(event_title_flags) == 2){ - Common_Set(event_title_flags,0); - Common_Set(event_notification_active,0); - + if (Common_Get(event_title_flags) == 2) { + Common_Set(event_title_flags, 0); + Common_Set(event_notification_active, 0); } } -void Game_play_camera_proc(GAME_PLAY* play){ +void Game_play_camera_proc(GAME_PLAY* play) { Camera2_ClearActorTalking_Cull(play); Camera2_process(play); } -void Game_play_fbdemo_wipe_destroy(GAME_PLAY* play){ +void Game_play_fbdemo_wipe_destroy(GAME_PLAY* play) { play->fbdemo_wipe.wipe_procs.cleanup_proc(&play->fbdemo_wipe.wipe_data); play->fb_wipe_mode = 0; play->fbdemo_wipe.wipe_type = -1; -} +} -void Game_play_fbdemo_wipe_create_sub(GAME_PLAY* play){ +void Game_play_fbdemo_wipe_create_sub(GAME_PLAY* play) { static void* wipe_normal_proc[] = { fbdemo_wipe1_init, none_proc1, @@ -124,22 +120,16 @@ void Game_play_fbdemo_wipe_create_sub(GAME_PLAY* play){ }; static void* wipe_proc[] = { - wipe_normal_proc, - wipe_triforce_proc, - wipe_fade_proc, - wipe_fade_proc, - wipe_triforce_proc, - wipe_triforce_proc, - wipe_fade_proc, + wipe_normal_proc, wipe_triforce_proc, wipe_fade_proc, wipe_fade_proc, + wipe_triforce_proc, wipe_triforce_proc, wipe_fade_proc, }; - + int type = play->fb_wipe_type; fbdemo_wipe_proc_c* cur; - - + bzero(&play->fbdemo_wipe, sizeof(fbdemo_wipe)); - if(type >= 7){ + if (type >= 7) { type = 1; } @@ -149,252 +139,237 @@ void Game_play_fbdemo_wipe_create_sub(GAME_PLAY* play){ play->fbdemo_wipe.wipe_procs.cleanup_proc = cur->cleanup_proc; play->fbdemo_wipe.wipe_procs.move_proc = cur->move_proc; play->fbdemo_wipe.wipe_procs.draw_proc = cur->draw_proc; - play->fbdemo_wipe.wipe_procs.startup_proc = cur->startup_proc; + play->fbdemo_wipe.wipe_procs.startup_proc = cur->startup_proc; play->fbdemo_wipe.wipe_procs.settype_proc = cur->settype_proc; play->fbdemo_wipe.wipe_procs.setcolor_proc = cur->setcolor_proc; play->fbdemo_wipe.wipe_procs.isfinished_proc = cur->isfinished_proc; } -void Game_play_fbdemo_wipe_create(GAME_PLAY* play){ +void Game_play_fbdemo_wipe_create(GAME_PLAY* play) { Game_play_fbdemo_wipe_create_sub(play); Game_play_fbdemo_wipe_init(play); } -void Game_play_fbdemo_wipe_init(GAME_PLAY* play){ - fbdemo_wipe* wipe = &play->fbdemo_wipe; +void Game_play_fbdemo_wipe_init(GAME_PLAY* play) { + fbdemo_wipe* wipe = &play->fbdemo_wipe; u8 type; - + play->fbdemo_wipe.wipe_procs.init_proc(&wipe->wipe_data); - + Common_Set(transition.wipe_rate, 28); Common_Set(transition.fade_rate, 30); - wipe->wipe_procs.setcolor_proc(&wipe->wipe_data,0); + wipe->wipe_procs.setcolor_proc(&wipe->wipe_data, 0); type = play->fb_fade_type; - - if(wipe->wipe_type == 4){ + + if (wipe->wipe_type == 4) { type |= 0x80; - } - else if(wipe->wipe_type == 5){ + } else if (wipe->wipe_type == 5) { type |= 0x40; } wipe->wipe_procs.settype_proc(&wipe->wipe_data, type); wipe->wipe_procs.startup_proc(&wipe->wipe_data); - + play->fb_wipe_mode = 3; S_back_title_timer = 120; S_se_endcheck_timeout = 120; } -void Game_play_fbdemo_fade_in_move_end(GAME_PLAY* play){ +void Game_play_fbdemo_fade_in_move_end(GAME_PLAY* play) { Game_play_fbdemo_wipe_destroy(play); - if(play->fb_mode == 3){ - fbdemo_cleanup(&fbdemo); + if (play->fb_mode == 3) { + fbdemo_cleanup(&fbdemo); play->fb_mode = 0; SetGameFrame(3); } } -void Game_play_fbdemo_fade_out_start_emu_move_end(GAME_PLAY* play){ +void Game_play_fbdemo_fade_out_start_emu_move_end(GAME_PLAY* play) { GAME_GOTO_NEXT(&play->game, famicom_emu, FAMICOM_EMU); - } -void Game_play_fbdemo_fade_out_game_end_move_end(GAME_PLAY* play){ +void Game_play_fbdemo_fade_out_game_end_move_end(GAME_PLAY* play) { GAME_GOTO_NEXT(&play->game, trademark, TRADEMARK); } -void Game_play_change_scene_move_end(GAME_PLAY* play){ +void Game_play_change_scene_move_end(GAME_PLAY* play) { game_goto_next_game_play(&play->game); Common_Set(last_scene_no, Save_Get(scene_no)); - Save_Set(scene_no,play->next_scene_no); - + Save_Set(scene_no, play->next_scene_no); } -void Game_play_fbdemo_wipe_move(GAME_PLAY* play){ - fbdemo_wipe* wipe = &play->fbdemo_wipe; +void Game_play_fbdemo_wipe_move(GAME_PLAY* play) { + fbdemo_wipe* wipe = &play->fbdemo_wipe; s16 wipet = FALSE; int isDone = TRUE; - if(wipe->wipe_procs.isfinished_proc(&wipe->wipe_data) != 0) { - if((play->fb_fade_type != 1) && (play->fb_fade_type != 11)){ - if(S_se_endcheck_timeout != 0){ + if (wipe->wipe_procs.isfinished_proc(&wipe->wipe_data) != 0) { + if ((play->fb_fade_type != 1) && (play->fb_fade_type != 11)) { + if (S_se_endcheck_timeout != 0) { S_se_endcheck_timeout--; } - if((sAdo_SeFadeoutCheck() == 0) && (S_se_endcheck_timeout != 0)){ + if ((sAdo_SeFadeoutCheck() == 0) && (S_se_endcheck_timeout != 0)) { isDone = FALSE; - } - else{ - sAdo_Set_ongenpos_refuse_fg(1); + } else { + sAdo_Set_ongenpos_refuse_fg(1); } } - if(play->fb_fade_type == 11){ + if (play->fb_fade_type == 11) { sAdo_Set_ongenpos_refuse_fg(2); } - if(isDone == TRUE){ - switch(play->fb_fade_type){ + if (isDone == TRUE) { + switch (play->fb_fade_type) { case 1: - Game_play_fbdemo_fade_in_move_end(play); - break; + Game_play_fbdemo_fade_in_move_end(play); + break; case 3: - if(S_back_title_timer != 0){ - S_back_title_timer--; - } + if (S_back_title_timer != 0) { + S_back_title_timer--; + } - if((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)){ - Game_play_fbdemo_fade_out_start_emu_move_end(play); - } - else{ - wipet = TRUE; - } - break; + if ((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)) { + Game_play_fbdemo_fade_out_start_emu_move_end(play); + } else { + wipet = TRUE; + } + break; case 4: case 6: - if(S_back_title_timer == 120){ - mBGMPsComp_make_ps_wipe(360); - } + if (S_back_title_timer == 120) { + mBGMPsComp_make_ps_wipe(360); + } case 5: case 10: - if(S_back_title_timer != 0){ - S_back_title_timer--; - } + if (S_back_title_timer != 0) { + S_back_title_timer--; + } - if((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)){ - Game_play_fbdemo_fade_out_game_end_move_end(play); - } - else{ - wipet = TRUE; - } - break; + if ((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)) { + Game_play_fbdemo_fade_out_game_end_move_end(play); + } else { + wipet = TRUE; + } + break; case 8: - if(S_back_title_timer != 0){ - S_back_title_timer--; - } - - if((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)){ - if((Common_Get(clip.animal_logo_clip) != NULL) && - (Common_Get(clip.animal_logo_clip->data_init_proc) != NULL)){ - Common_Get(clip.animal_logo_clip->data_init_proc)(play); - Game_play_change_scene_move_end(play); + if (S_back_title_timer != 0) { + S_back_title_timer--; } - } - else{ - wipet = TRUE; - } - break; - - case 9: - if(S_back_title_timer != 0){ - S_back_title_timer--; - } - if((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)){ - Game_play_change_scene_move_end(play); - } - else{ - wipet = TRUE; - } - break; + if ((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)) { + if ((Common_Get(clip.animal_logo_clip) != NULL) && + (Common_Get(clip.animal_logo_clip->data_init_proc) != NULL)) { + Common_Get(clip.animal_logo_clip->data_init_proc)(play); + Game_play_change_scene_move_end(play); + } + } else { + wipet = TRUE; + } + break; + + case 9: + if (S_back_title_timer != 0) { + S_back_title_timer--; + } + + if ((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)) { + Game_play_change_scene_move_end(play); + } else { + wipet = TRUE; + } + break; case 11: case 12: - Game_play_change_scene_move_end(play); - break; - - - default: - if(S_back_title_timer != 0){ - S_back_title_timer--; - } - - if((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)){ Game_play_change_scene_move_end(play); - } - else{ - wipet = TRUE; - } - break; + break; + + default: + if (S_back_title_timer != 0) { + S_back_title_timer--; + } + + if ((sAdo_BgmFadeoutCheck() == 1) || (S_back_title_timer == 0)) { + Game_play_change_scene_move_end(play); + } else { + wipet = TRUE; + } + break; } - if(!wipet){ + if (!wipet) { play->fb_fade_type = 0; } } - } - else { - wipe->wipe_procs.move_proc(&wipe->wipe_data, game_GameFrame); + } else { + wipe->wipe_procs.move_proc(&wipe->wipe_data, game_GameFrame); } } +void Game_play_fbdemo_wipe_proc(GAME_PLAY* play) { + static PLAY_WIPE_PROC wipe_proc[] = { (PLAY_WIPE_PROC)none_proc1, Game_play_fbdemo_wipe_create, + Game_play_fbdemo_wipe_init, Game_play_fbdemo_wipe_move }; -void Game_play_fbdemo_wipe_proc(GAME_PLAY* play){ - static PLAY_WIPE_PROC wipe_proc[] = { - (PLAY_WIPE_PROC)none_proc1,Game_play_fbdemo_wipe_create, - Game_play_fbdemo_wipe_init,Game_play_fbdemo_wipe_move - }; - - if((play->fb_wipe_mode == 0) && (play->fb_fade_type != 0)){ + if ((play->fb_wipe_mode == 0) && (play->fb_fade_type != 0)) { play->fb_wipe_mode = 1; } wipe_proc[play->fb_wipe_mode](play); } -Gfx* game_play_set_fog(GAME_PLAY* play, Gfx* gfx){ +Gfx* game_play_set_fog(GAME_PLAY* play, Gfx* gfx) { return gfx_set_fog_nosync(gfx, play->global_light.fogColor[0], play->global_light.fogColor[1], - play->global_light.fogColor[2], 0, play->global_light.fogNear, play->global_light.fogFar); + play->global_light.fogColor[2], 0, play->global_light.fogNear, play->global_light.fogFar); } -void Game_play_fbdemo_proc(GAME_PLAY* play){ +void Game_play_fbdemo_proc(GAME_PLAY* play) { - switch(play->fb_mode){ + switch (play->fb_mode) { case 2: - if(fbdemo_init(&fbdemo, 10, 7) == 0){ - play->fb_mode = 0; - } - else{ - play->fb_mode = 3; - SetGameFrame(1); - } - break; + if (fbdemo_init(&fbdemo, 10, 7) == 0) { + play->fb_mode = 0; + } else { + play->fb_mode = 3; + SetGameFrame(1); + } + break; case 3: - fbdemo_move(&fbdemo); - break; + fbdemo_move(&fbdemo); + break; } } -void play_cleanup(GAME* game){ +void play_cleanup(GAME* game) { GAME_PLAY* play = (GAME_PLAY*)game; mMsg_dt(game); banti_dt(); - + play->game.graph->taskEndCallback = NULL; play->game.graph->taskEndData = NULL; play->submenu.mode = 0; - + PreRender_cleanup(&play->prerender); CollisionCheck_dt(&play->game, &play->collision_check); - - if(play->fb_mode == 3){ + + if (play->fb_mode == 3) { fbdemo_cleanup(&fbdemo); play->fb_mode = 0; } - - if(play->fb_wipe_mode == 3){ + + if (play->fb_wipe_mode == 3) { Game_play_fbdemo_wipe_destroy(play); } @@ -402,7 +377,7 @@ void play_cleanup(GAME* game){ mEv_finish(&play->event); mNpc_ClearEventNpc(); mNpc_ClearMaskNpc(); - + mSM_submenu_dt(&play->submenu); play->submenu_ground_idx = -1; mSM_submenu_ovlptr_cleanup(&play->submenu); @@ -414,20 +389,18 @@ void play_cleanup(GAME* game){ mCD_toNextLand(); mEA_CleanCardDLProgram(); - if(my_malloc_current == &my_malloc_func){ + if (my_malloc_current == &my_malloc_func) { my_malloc_current = NULL; } zelda_CleanupArena(); - -} - -void VR_Box_ct(GAME_PLAY* play){ - - Global_kankyo_ct(play, &play->kankyo); } -void play_init(GAME* game){ +void VR_Box_ct(GAME_PLAY* play) { + Global_kankyo_ct((GAME*)play, &play->kankyo); +} + +void play_init(GAME* game) { GAME_PLAY* play = (GAME_PLAY*)game; GRAPH* graph = play->game.graph; @@ -439,10 +412,10 @@ void play_init(GAME* game){ u32 size; game_resize_hyral(&play->game, 0xFFFC1800); - Common_Set(rhythym_updated,0); - + Common_Set(rhythym_updated, 0); + mFI_ChangeClimate_ForEventNotice(); - mTM_time_init(); + mTM_time_init(); sAdo_Set_ongenpos_refuse_fg(0); event_title_flag_on(); mTD_rtc_set(); @@ -456,35 +429,35 @@ void play_init(GAME* game){ initView(&play->view, graph); Init_Camera2(play); CollisionCheck_ct(&play->game, &play->collision_check); - + mCoBG_InitMoveBgData(); mCoBG_InitBlockBgCheckMode(); mCoBG_InitDecalCircle(); play->submenu_ground_idx = -1; - + Gameplay_Scene_Read(play, Save_Get(scene_no)); mSM_submenu_ct(&play->submenu); - play->submenu.mode = 0; + play->submenu.mode = 0; PreRender_init(&play->prerender); - PreRender_setup_savebuf(&play->prerender, SCREEN_WIDTH * 2 ,SCREEN_HEIGHT * 2, 0, 0, 0 ); - PreRender_setup_renderbuf(&play->prerender, SCREEN_WIDTH * 2, SCREEN_HEIGHT * 2, 0,0); + PreRender_setup_savebuf(&play->prerender, SCREEN_WIDTH * 2, SCREEN_HEIGHT * 2, 0, 0, 0); + PreRender_setup_renderbuf(&play->prerender, SCREEN_WIDTH * 2, SCREEN_HEIGHT * 2, 0, 0); play->fb_mode = 0; type = 1; play->fb_wipe_mode = 0; play->fb_fade_type = 1; - - if(Common_Get(transition.wipe_type) != 0xFF){ + + if (Common_Get(transition.wipe_type) != 0xFF) { type = Common_Get(transition.wipe_type); - Common_Set(transition.wipe_type, 0xFF); + Common_Set(transition.wipe_type, 0xFF); } play->fb_wipe_type = type; - + Pause_ct(&play->pause); new_Matrix(&play->game); @@ -492,13 +465,13 @@ void play_init(GAME* game){ play->game.exec = play_main; play->game.cleanup = play_cleanup; - fbdemo_fade_init(fade); + fbdemo_fade_init(fade); fbdemo_fade_settype(fade, 7); fbdemo_fade_setcolor_rgba8888(fade, 0xA0A0A0FF); fbdemo_fade_startup(fade); play->fade_color_value.rgba8888 = 0; - + freebytes = game_getFreeBytes(&play->game); alloc = (u32)THA_alloc16(&play->game.tha, freebytes); aligned = ALIGN_NEXT(alloc, 16); @@ -506,7 +479,7 @@ void play_init(GAME* game){ zelda_InitArena((void*)aligned, freebytes - size); - if(my_malloc_current == NULL){ + if (my_malloc_current == NULL) { my_malloc_current = &my_malloc_func; } @@ -517,16 +490,16 @@ void play_init(GAME* game){ play->draw_chk_proc = none_proc1; mMsg_ct(game); mEv_2nd_init(&play->event); - mTD_player_keydata_init(play); + mTD_player_keydata_init(play); Balloon_init(play); mNtc_set_auto_nwrite_data(); banti_ct(); watch_my_step_ct(); event_title_flag_off(); - mEA_GetCardDLProgram(); + mEA_GetCardDLProgram(); } -void Game_play_move_fbdemo_not_move(GAME_PLAY* play){ +void Game_play_move_fbdemo_not_move(GAME_PLAY* play) { play->game.doing_point = 0; play->game.doing_point_specific = 0x8F; @@ -534,7 +507,7 @@ void Game_play_move_fbdemo_not_move(GAME_PLAY* play){ mSM_submenu_ctrl(play); - if(play->submenu.process_status == 0){ + if (play->submenu.process_status == 0) { play->game.doing_point = 2; mDemo_Main(play); @@ -548,8 +521,8 @@ void Game_play_move_fbdemo_not_move(GAME_PLAY* play){ mSc_dmacopy_data_bank(&play->object_exchange); play->game.doing_point = 6; mSM_submenu_move(&play->submenu); - - if(play->submenu.process_status == 0){ + + if (play->submenu.process_status == 0) { play->game_frame++; mVibctl_clr_force_stop(2); @@ -567,16 +540,14 @@ void Game_play_move_fbdemo_not_move(GAME_PLAY* play){ mCoBG_CalcTimerDecalCircle(); play->game.doing_point = 2; mMsg_Main((GAME*)play); - } - else{ + } else { mVibctl_set_force_stop(2); } - + fbdemo_fade_move(&play->color_fade, game_GameFrame); - } -void Game_play_move(GAME_PLAY* play){ +void Game_play_move(GAME_PLAY* play) { int debug; @@ -591,7 +562,7 @@ void Game_play_move(GAME_PLAY* play){ play->game.doing_point = 0; play->game.doing_point_specific = 0x8E; - if(debug == 0){ + if (debug == 0) { play->game.doing_point = 1; Game_play_fbdemo_wipe_proc(play); @@ -599,12 +570,12 @@ void Game_play_move(GAME_PLAY* play){ Game_play_fbdemo_proc(play); play->game.doing_point = 3; - if(play->fb_mode != 3){ + if (play->fb_mode != 3) { Game_play_move_fbdemo_not_move(play); } } - if(play->submenu.process_status == 0){ + if (play->submenu.process_status == 0) { play->game.doing_point = 0; play->game.doing_point_specific = 0x92; @@ -617,7 +588,6 @@ void Game_play_move(GAME_PLAY* play){ play->game.doing_point = 4; Balloon_move(play); mEnv_ManagePointLight(play, &play->kankyo, &play->global_light); - } play->game.doing_point = 0; @@ -634,68 +604,63 @@ void Game_play_move(GAME_PLAY* play){ title_demo_move(play); play->game.doing_point = 0; play->game.doing_point_specific = 0x95; - } - -void setupFog(GAME_PLAY* play, GRAPH* graph){ +void setupFog(GAME_PLAY* play, GRAPH* graph) { OPEN_DISP(graph); - SET_POLY_OPA_DISP(game_play_set_fog(play, NOW_POLY_OPA_DISP)); - SET_POLY_XLU_DISP(game_play_set_fog(play, NOW_POLY_XLU_DISP)); - + SET_POLY_OPA_DISP(game_play_set_fog(play, NOW_POLY_OPA_DISP)); + SET_POLY_XLU_DISP(game_play_set_fog(play, NOW_POLY_XLU_DISP)); CLOSE_DISP(graph); } void setupViewer(GAME_PLAY* play) { - - showView(&play->view, 0xF); + + showView(&play->view, 0xF); } -void setupViewMatrix(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){ +void setupViewMatrix(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2) { Mtx* t; - + OPEN_DISP(graph1); - Matrix_MtxtoMtxF(&play->view.mtx_viewing, &play->billboard_matrix); - Matrix_MtxtoMtxF(&play->view.mtx_projection, &play->projection_matrix); + Matrix_MtxtoMtxF(&play->view.mtx_projection, &play->projection_matrix); Skin_Matrix_MulMatrix(&play->projection_matrix, &play->billboard_matrix, &play->projection_matrix); play->billboard_matrix.mf[0][3] = 0.0f; play->billboard_matrix.mf[1][3] = 0.0f; play->billboard_matrix.mf[2][3] = 0.0f; play->billboard_matrix.mf[3][0] = 0.0f; - play->billboard_matrix.mf[3][1] = 0.0f; + play->billboard_matrix.mf[3][1] = 0.0f; play->billboard_matrix.mf[3][2] = 0.0f; - + Matrix_reverse(&play->billboard_matrix); t = _MtxF_to_Mtx(&play->billboard_matrix, GRAPH_ALLOC(graph2, sizeof(MtxF) * 1)); - play->_208C = t; + play->billboard_mtx_p = t; - gSPSegment(NEXT_BG_OPA_DISP, 7, play->_208C); - gSPSegment(NEXT_POLY_OPA_DISP, 7, play->_208C); - - - CLOSE_DISP(graph1); -} - - void copy_efb_to_texture(Gfx** graph, void* buf){ - u32 dl; - - GXBeginDisplayList(gxbuf, sizeof(gxbuf)); - GXSetTexCopySrc(0,0,SCREEN_WIDTH * 2,SCREEN_HEIGHT * 2); - GXSetTexCopyDst(SCREEN_WIDTH * 2, SCREEN_HEIGHT *2, GX_TF_RGB565, 0); - GXSetCopyFilter(0,0,0,0); - GXCopyTex(buf, 0); - dl = GXEndDisplayList(); - gGXCallDisplayList((*graph)++, gxbuf ,dl); - } + gSPSegment(NEXT_BG_OPA_DISP, 7, play->billboard_mtx_p); + gSPSegment(NEXT_POLY_OPA_DISP, 7, play->billboard_mtx_p); -int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){ + CLOSE_DISP(graph1); +} + +void copy_efb_to_texture(Gfx** graph, void* buf) { + u32 dl; + + GXBeginDisplayList(gxbuf, sizeof(gxbuf)); + GXSetTexCopySrc(0, 0, SCREEN_WIDTH * 2, SCREEN_HEIGHT * 2); + GXSetTexCopyDst(SCREEN_WIDTH * 2, SCREEN_HEIGHT * 2, GX_TF_RGB565, 0); + GXSetCopyFilter(0, 0, 0, 0); + GXCopyTex(buf, 0); + dl = GXEndDisplayList(); + gGXCallDisplayList((*graph)++, gxbuf, dl); +} + +int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2) { Gfx* newdisp; Gfx* polydisp; @@ -707,17 +672,17 @@ int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){ Gfx* poly; View view; rect rect; - + OPEN_DISP(graph1); - if((GETREG(HREG, 80) != 10) || (GETREG(HREG, 92) != 0)){ - + if ((GETREG(HREG, 80) != 10) || (GETREG(HREG, 92) != 0)) { + newdisp = NOW_POLY_OPA_DISP; polydisp = gfxopen(newdisp); - + gSPDisplayList(NEXT_OVERLAY_DISP, polydisp); - if(play->fb_wipe_mode == 3){ + if (play->fb_wipe_mode == 3) { v = &view; initView(v, graph2); v->flag = 10; @@ -726,13 +691,13 @@ int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){ rect.l = 0; rect.r = SCREEN_WIDTH; setScissorView(v, &rect); - showView1(v, 15, &polydisp); + showView1(v, 15, &polydisp); play->fbdemo_wipe.wipe_procs.draw_proc(&play->fbdemo_wipe.wipe_data, &polydisp); } fbdemo_fade_draw(&play->color_fade, &polydisp); - fade_rgba8888_draw(&polydisp, play->fade_color_value.rgba8888); - + fade_rgba8888_draw(&polydisp, play->fade_color_value.rgba8888); + gSPEndDisplayList(polydisp++); gfxclose(newdisp, polydisp); @@ -740,48 +705,49 @@ int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){ SET_POLY_OPA_DISP(polydisp); } - if(play->fb_mode == 3){ + if (play->fb_mode == 3) { fbdemo_disp = NOW_POLY_OPA_DISP; fbdemo_draw(&fbdemo, &fbdemo_disp); SET_POLY_OPA_DISP(fbdemo_disp); return 1; } - if(play->submenu.mode == 2){ + if (play->submenu.mode == 2) { play->submenu.mode = 3; SETREG(SREG, 3, -(GETREG(SREG, 3))); - } - else if(play->submenu.mode >= 5){ + } else if (play->submenu.mode >= 5) { play->submenu.mode = 0; } - - if(play->submenu.mode == 3){ + + if (play->submenu.mode == 3) { poly = NOW_POLY_OPA_DISP; - - gDPPipeSync(poly++); + + gDPPipeSync(poly++); rect_disp = gfx_rect_moji(poly++); - gDPSetOtherMode(rect_disp++, G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | - G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); + gDPSetOtherMode(rect_disp++, + G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); gDPSetTextureImage_Dolphin(rect_disp++, G_IM_FMT_I, G_IM_SIZ_16b, 480, 640, prbuf); gDPSetTile_Dolphin(rect_disp++, G_DOLPHIN_TLUT_DEFAULT_MODE, 0, 0, 0, 0, 0, 0); - gSPTextureRectangle(rect_disp++, 0, 0, (640-1) << 2, (480-1) << 2, G_TX_RENDERTILE, 0, 0, (256) << 2, (256) << 2); + gSPTextureRectangle(rect_disp++, 0, 0, (640 - 1) << 2, (480 - 1) << 2, G_TX_RENDERTILE, 0, 0, (256) << 2, + (256) << 2); - SET_POLY_OPA_DISP(rect_disp); + SET_POLY_OPA_DISP(rect_disp); return 1; } - if((GETREG(HREG, 80) != 10) || (GETREG(HREG, 85) != 0)){ + if ((GETREG(HREG, 80) != 10) || (GETREG(HREG, 85) != 0)) { Actor_info_draw_actor(play, &play->actor_info); Camera2_draw(play); mMsg_Draw((GAME*)play); } - if((GETREG(HREG, 80) != 10) || (GETREG(HREG, 93) != 0)){ - Debug_Display_output(play); + if ((GETREG(HREG, 80) != 10) || (GETREG(HREG, 93) != 0)) { + Debug_Display_output(play); } - if((play->submenu.mode == 1) || (play->fb_mode == 1)){ + if ((play->submenu.mode == 1) || (play->fb_mode == 1)) { old_fb = NOW_POLY_OPA_DISP; fb_disp = gfxopen(old_fb); @@ -794,11 +760,10 @@ int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){ SET_POLY_OPA_DISP(fb_disp); - if(play->submenu.mode == 1){ + if (play->submenu.mode == 1) { play->submenu.mode = 2; SETREG(SREG, 3, -(GETREG(SREG, 3))); - } - else { + } else { play->fb_mode = 2; } return 1; @@ -809,27 +774,26 @@ int makeBumpTexture(GAME_PLAY* play, GRAPH* graph1, GRAPH* graph2){ void draw_version(GRAPH* graph) { JW_JUTReport(0x82, 0x172, 1, "[CopyDate:%.19s]", boot_copyDate); - JW_JUTReport(0x82, 0x180, 1, "[Date:%s]" , &__DateTime__); + JW_JUTReport(0x82, 0x180, 1, "[Date:%s]", &__DateTime__); JW_JUTReport(0x82, 0x18E, 1, "[Creator:%s]", &__Creator__); } -void Game_play_draw(GAME* game){ +void Game_play_draw(GAME* game) { GRAPH* graph = game->graph; GAME_PLAY* play = (GAME_PLAY*)game; - - DisplayList_initialize(graph, 0,0,0,&play->game); + DisplayList_initialize(graph, 0, 0, 0, &play->game); + + if ((GETREG(HREG, 80) != 10) || (GETREG(HREG, 82) != 0)) { - if((GETREG(HREG, 80) != 10) || (GETREG(HREG, 82) != 0)){ - setupFog(play, graph); setupViewer(play); setupViewMatrix(play, graph, graph); - if((makeBumpTexture(play, graph, graph) == 1) && ((GETREG(HREG, 80) != 10) || (GETREG(HREG, 89) != 0))){ + if ((makeBumpTexture(play, graph, graph) == 1) && ((GETREG(HREG, 80) != 10) || (GETREG(HREG, 89) != 0))) { - watch_my_step_draw(play); - banti_draw(play); + watch_my_step_draw(play); + banti_draw(play); mSM_submenu_draw(&play->submenu, (GAME*)play); } } @@ -854,68 +818,66 @@ void play_main(GAME* game) { game->doing_point = 0; game->doing_point_specific = 0x6E; - fqrand(); + fqrand(); game->doing_point = 0; game->doing_point_specific = 0x78; mCon_main(game); game->doing_point = 0; - game->doing_point_specific = 0x82; + game->doing_point_specific = 0x82; Debug_Display_init(); - if((GETREG(HREG, 80) == 10) && (GETREG(HREG, 94) != 10)){ - SETREG(HREG, 81,1); - SETREG(HREG, 82,1); - SETREG(HREG, 83,1); - SETREG(HREG, 84,3); - SETREG(HREG, 85,1); - SETREG(HREG, 86,1); - SETREG(HREG, 87,1); - SETREG(HREG, 88,1); - SETREG(HREG, 89,1); - SETREG(HREG, 90,15); - SETREG(HREG, 91,1); - SETREG(HREG, 92,1); - SETREG(HREG, 93,1); - SETREG(HREG, 94,10); - + if ((GETREG(HREG, 80) == 10) && (GETREG(HREG, 94) != 10)) { + SETREG(HREG, 81, 1); + SETREG(HREG, 82, 1); + SETREG(HREG, 83, 1); + SETREG(HREG, 84, 3); + SETREG(HREG, 85, 1); + SETREG(HREG, 86, 1); + SETREG(HREG, 87, 1); + SETREG(HREG, 88, 1); + SETREG(HREG, 89, 1); + SETREG(HREG, 90, 15); + SETREG(HREG, 91, 1); + SETREG(HREG, 92, 1); + SETREG(HREG, 93, 1); + SETREG(HREG, 94, 10); } - + game->doing_point = 0; game->doing_point_specific = 0x8C; - - if((GETREG(HREG, 80) != 10) || (GETREG(HREG, 81) != 0)){ - Game_play_move(play); + + if ((GETREG(HREG, 80) != 10) || (GETREG(HREG, 81) != 0)) { + Game_play_move(play); } game->doing_point = 0; game->doing_point_specific = 0xAA; Game_play_draw(game); - + game->doing_point = 0; game->doing_point_specific = 0xB4; - + graph = game->graph; game_debug_draw_last(game, graph); game_draw_last(graph); - + game->doing_point = 0; game->doing_point_specific = 0XBe; } -void Gameplay_Scene_Init(GAME_PLAY* play){ +void Gameplay_Scene_Init(GAME_PLAY* play) { play->player_data = NULL; play->actor_data_num = 0; play->ctrl_actor_data_num = 0; play->obj_bank_data_num = 0; play->_20A8 = 0; - + mSc_data_bank_ct(play, &play->object_exchange); Global_light_ct(&play->global_light); Door_info_ct(&play->door_info); common_data_clear(); Scene_ct(play, play->current_scene_data); mSc_decide_exchange_bank(&play->object_exchange); - } u8 mPl_SceneNo2SoundRoomType(int scene) { @@ -946,73 +908,72 @@ u8 mPl_SceneNo2SoundRoomType(int scene) { default: return 0; - } + } } -void Gameplay_Scene_Read(GAME_PLAY* play, s16 idx){ +void Gameplay_Scene_Read(GAME_PLAY* play, s16 idx) { static Scene_Word_u* scene_word_data[SCENE_NUM] = { - test01_info, - test02_info, - test03_info, - water_test_info, - test_step01_info, - test04_info, - npc_room01_info, - test_fd_npc_land_info, - field_tool_field_info, - shop01_info, - BG_TEST01_info, - BG_TEST01_XLU_info, - broker_shop_info, - fg_tool_in_info, - post_office_info, - start_demo1_info, - start_demo2_info, - police_box_info, - buggy_info, - player_select_info, - player_room_s_info, - player_room_m_info, - player_room_l_info, - shop02_info, - shop03_info, - shop04_1f_info, - test05_info, - PLAYER_SELECT2_info, - PLAYER_SELECT3_info, - shop04_2f_info, - event_notification_info, - kamakura_info, - field_tool_field_info, - title_demo_info, - PLAYER_SELECT4_info, - museum_entrance_info, - museum_picture_info, - museum_fossil_info, - museum_insect_info, - museum_fish_info, - player_room_ll1_info, - player_room_ll2_info, - p_room_bm_s_info, - p_room_bm_m_info, - p_room_bm_l_info, - p_room_bm_ll1_info, - NEEDLEWORK_info, - player_room_island_info, - npc_room_island_info, - start_demo3_info, - lighthouse_info, - tent_info, + test01_info, + test02_info, + test03_info, + water_test_info, + test_step01_info, + test04_info, + npc_room01_info, + test_fd_npc_land_info, + field_tool_field_info, + shop01_info, + BG_TEST01_info, + BG_TEST01_XLU_info, + broker_shop_info, + fg_tool_in_info, + post_office_info, + start_demo1_info, + start_demo2_info, + police_box_info, + buggy_info, + player_select_info, + player_room_s_info, + player_room_m_info, + player_room_l_info, + shop02_info, + shop03_info, + shop04_1f_info, + test05_info, + PLAYER_SELECT2_info, + PLAYER_SELECT3_info, + shop04_2f_info, + event_notification_info, + kamakura_info, + field_tool_field_info, + title_demo_info, + PLAYER_SELECT4_info, + museum_entrance_info, + museum_picture_info, + museum_fossil_info, + museum_insect_info, + museum_fish_info, + player_room_ll1_info, + player_room_ll2_info, + p_room_bm_s_info, + p_room_bm_m_info, + p_room_bm_l_info, + p_room_bm_ll1_info, + NEEDLEWORK_info, + player_room_island_info, + npc_room_island_info, + start_demo3_info, + lighthouse_info, + tent_info, }; Scene_data_status_c* current = &scene_data_status[idx]; - - current->unk13 = 0; + + current->unk13 = 0; play->scene_data_status = current; play->scene_id = idx; play->current_scene_data = scene_word_data[idx]; - current->unk13 = 0; + current->unk13 = 0; Gameplay_Scene_Init(play); sAdo_RoomType(mPl_SceneNo2SoundRoomType(Save_Get(scene_no))); - -} \ No newline at end of file +}