#include "m_banti.h" #include "m_play.h" #include "libultra/libultra.h" #include "m_player_lib.h" #include "m_demo.h" #include "sys_matrix.h" #include "m_font.h" #include "m_common_data.h" static Banti_c banti; static void banti_animation_init_hiduke(Banti_anim_c* anim); static void banti_animation_init_jikan(Banti_anim_c* anim); extern cKF_Skeleton_R_c cKF_bs_r_clk_hiniti; extern cKF_Skeleton_R_c cKF_bs_r_clk_jikan; extern void banti_ct() { bzero(&banti, sizeof(Banti_c)); banti.addressable_type = 0; banti.disabled = 0; banti.timer = 0; banti.alpha = 0.0f; banti.disp_left = 0; banti.move_left = 0; banti.move_timer = 0.0f; cKF_SkeletonInfo_R_ct(&banti.month_anim.keyframe, &cKF_bs_r_clk_hiniti, NULL, banti.month_anim.work, banti.month_anim.morph); banti_animation_init_hiduke(&banti.month_anim); banti.month_anim.keyframe.frame_control.speed = 0.0f; cKF_SkeletonInfo_R_ct(&banti.day_anim.keyframe, &cKF_bs_r_clk_hiniti, NULL, banti.day_anim.work, banti.day_anim.morph); banti_animation_init_hiduke(&banti.day_anim); banti.day_anim.keyframe.frame_control.speed = 0.0f; cKF_SkeletonInfo_R_ct(&banti.hour_upper_anim.keyframe, &cKF_bs_r_clk_jikan, NULL, banti.hour_upper_anim.work, banti.hour_upper_anim.morph); banti_animation_init_jikan(&banti.hour_upper_anim); banti.hour_upper_anim.keyframe.frame_control.speed = 0.0f; cKF_SkeletonInfo_R_ct(&banti.hour_lower_anim.keyframe, &cKF_bs_r_clk_jikan, NULL, banti.hour_lower_anim.work, banti.hour_lower_anim.morph); banti_animation_init_jikan(&banti.hour_lower_anim); banti.hour_lower_anim.keyframe.frame_control.speed = 0.0f; cKF_SkeletonInfo_R_ct(&banti.min_upper_anim.keyframe, &cKF_bs_r_clk_jikan, NULL, banti.min_upper_anim.work, banti.min_upper_anim.morph); banti_animation_init_jikan(&banti.min_upper_anim); banti.min_upper_anim.keyframe.frame_control.speed = 0.0f; cKF_SkeletonInfo_R_ct(&banti.min_lower_anim.keyframe, &cKF_bs_r_clk_jikan, NULL, banti.min_lower_anim.work, banti.min_lower_anim.morph); banti_animation_init_jikan(&banti.min_lower_anim); banti.min_lower_anim.keyframe.frame_control.speed = 0.0f; lbRTC_TimeCopy(&banti.next_time, Common_GetPointer(time.rtc_time)); lbRTC_TimeCopy(&banti.displayed_time, Common_GetPointer(time.rtc_time)); } extern void banti_dt() { cKF_SkeletonInfo_R_dt(&banti.month_anim.keyframe); cKF_SkeletonInfo_R_dt(&banti.day_anim.keyframe); cKF_SkeletonInfo_R_dt(&banti.hour_upper_anim.keyframe); cKF_SkeletonInfo_R_dt(&banti.hour_lower_anim.keyframe); cKF_SkeletonInfo_R_dt(&banti.min_upper_anim.keyframe); cKF_SkeletonInfo_R_dt(&banti.min_lower_anim.keyframe); } static void banti_chk_disp_left(GAME_PLAY* play) { xyz_t player_pos_screen; Game_play_Projection_Trans(play, &get_player_actor_withoutCheck(play)->actor_class.world.position, &player_pos_screen); if (player_pos_screen.x >= 180.0f && player_pos_screen.y >= 150.0f) { if (banti.move_left == FALSE) { banti.move_left = TRUE; banti.move_timer = 0.0f; } banti.move_timer += 1.0f; if (banti.move_timer > 10.0f) { banti.move_timer = 10.0f; if (banti.alpha < 0.01f) { banti.disp_left = TRUE; banti.disabled = FALSE; } else if (banti.disp_left == FALSE) { banti.disabled = TRUE; } } } else { if (banti.move_left == TRUE) { banti.move_left = FALSE; banti.move_timer = 0.0f; } banti.move_timer += 1.0f; if (banti.move_timer > 10.0f) { banti.move_timer = 10.0f; if (banti.alpha < 0.01f) { banti.disp_left = FALSE; banti.disabled = FALSE; } else if (banti.disp_left == TRUE) { banti.disabled = TRUE; } } } } static f32 banti_calc_disp_alpha_rate(GAME_PLAY* play) { if (mDemo_CheckDemo() || mEv_CheckTitleDemo() > 0 || banti.disabled) { banti.addressable_type = mPlayer_ADDRESSABLE_FALSE_MOVEMENT; add_calc(&banti.alpha, 0.0f, 1.0f - sqrtf(0.8), 0.1f, 0.005f); /* quickly fade out on demo screen or title or force disabled */ } else if (banti.addressable_type == mPlayer_ADDRESSABLE_TRUE && play->submenu.process_status == mSM_PROCESS_WAIT) { add_calc(&banti.alpha, 1.0f, 1.0f - sqrtf(0.8), 0.0425f, 0.0005f); /* fade in */ } else { add_calc(&banti.alpha, 0.0f, 1.0f - sqrtf(0.8), 0.0425f, 0.0005f); /* fade out */ } } extern cKF_Animation_R_c cKF_ba_r_clk_hiniti; static void banti_animation_init_hiduke(Banti_anim_c* anim) { cKF_SkeletonInfo_R_init(&anim->keyframe, anim->keyframe.skeleton, &cKF_ba_r_clk_hiniti, 1.0f, 15.0f, 1.0f, 0.5f, 0.0f, cKF_FRAMECONTROL_STOP, NULL); } extern cKF_Animation_R_c cKF_ba_r_clk_jikan; static void banti_animation_init_jikan(Banti_anim_c* anim) { cKF_SkeletonInfo_R_init(&anim->keyframe, anim->keyframe.skeleton, &cKF_ba_r_clk_jikan, 1.0f, 15.0f, 1.0f, 0.5f, 0.0f, cKF_FRAMECONTROL_STOP, NULL); } static void banti_anime_proc() { if (cKF_SkeletonInfo_R_play(&banti.month_anim.keyframe) == cKF_STATE_STOPPED) { banti.month_anim.keyframe.frame_control.current_frame = 1.0f; banti.month_anim.keyframe.frame_control.speed = 0.0f; banti.month_anim.state = banti_ANIM_STATE_STOPPED; } if (cKF_SkeletonInfo_R_play(&banti.day_anim.keyframe) == cKF_STATE_STOPPED) { banti.day_anim.keyframe.frame_control.current_frame = 1.0f; banti.day_anim.keyframe.frame_control.speed = 0.0f; banti.day_anim.state = banti_ANIM_STATE_STOPPED; } if (cKF_SkeletonInfo_R_play(&banti.hour_upper_anim.keyframe) == cKF_STATE_STOPPED) { banti.hour_upper_anim.keyframe.frame_control.current_frame = 1.0f; banti.hour_upper_anim.keyframe.frame_control.speed = 0.0f; banti.hour_upper_anim.state = banti_ANIM_STATE_STOPPED; } if (cKF_SkeletonInfo_R_play(&banti.hour_lower_anim.keyframe) == cKF_STATE_STOPPED) { banti.hour_lower_anim.keyframe.frame_control.current_frame = 1.0f; banti.hour_lower_anim.keyframe.frame_control.speed = 0.0f; banti.hour_lower_anim.state = banti_ANIM_STATE_STOPPED; } if (cKF_SkeletonInfo_R_play(&banti.min_upper_anim.keyframe) == cKF_STATE_STOPPED) { banti.min_upper_anim.keyframe.frame_control.current_frame = 1.0f; banti.min_upper_anim.keyframe.frame_control.speed = 0.0f; banti.min_upper_anim.state = banti_ANIM_STATE_STOPPED; } if (cKF_SkeletonInfo_R_play(&banti.min_lower_anim.keyframe) == cKF_STATE_STOPPED) { banti.min_lower_anim.keyframe.frame_control.current_frame = 1.0f; banti.min_lower_anim.keyframe.frame_control.speed = 0.0f; banti.min_lower_anim.state = banti_ANIM_STATE_STOPPED; } } static void banti_chk_anime_start() { lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time); u8 banti_hour; u8 rtc_hour; u8 banti_min; u8 rtc_min; int work1; int work0; int disp0; int disp1; if (banti.month_anim.state == banti_ANIM_STATE_STOPPED && banti.displayed_time.month != Common_GetPointer(time.rtc_time)->month) { banti_animation_init_hiduke(&banti.month_anim); banti.month_anim.state = banti_ANIM_STATE_PLAYING; } if (banti.day_anim.state == banti_ANIM_STATE_STOPPED && banti.displayed_time.day != Common_GetPointer(time.rtc_time)->day) { banti_animation_init_hiduke(&banti.day_anim); banti.day_anim.state = banti_ANIM_STATE_PLAYING; } banti_hour = banti.displayed_time.hour; if (banti_hour == 0 || banti_hour == 12) { work0 = 12; } else if (banti_hour > 11) { work0 = banti_hour - 12; } else { work0 = banti_hour; } rtc_hour = Common_GetPointer(time.rtc_time)->hour; if (rtc_hour == 0 || rtc_hour == 12) { work1 = 12; } else if (rtc_hour > 11) { work1 = rtc_hour - 12; } else { work1 = rtc_hour; } disp0 = work0 / 10; disp1 = work1 / 10; if (banti.hour_upper_anim.state == banti_ANIM_STATE_STOPPED && disp0 != disp1) { banti_animation_init_jikan(&banti.hour_upper_anim); banti.hour_upper_anim.state = banti_ANIM_STATE_PLAYING; } disp0 = work0 % 10; disp1 = work1 % 10; if (banti.hour_lower_anim.state == banti_ANIM_STATE_STOPPED && disp0 != disp1) { banti_animation_init_jikan(&banti.hour_lower_anim); banti.hour_lower_anim.state = banti_ANIM_STATE_PLAYING; } disp0 = banti.displayed_time.min / 10; disp1 = Common_GetPointer(time.rtc_time)->min / 10; if (banti.min_upper_anim.state == banti_ANIM_STATE_STOPPED && disp0 != disp1) { banti_animation_init_jikan(&banti.min_upper_anim); banti.min_upper_anim.state = banti_ANIM_STATE_PLAYING; } disp0 = banti.displayed_time.min % 10; disp1 = Common_GetPointer(time.rtc_time)->min % 10; if (banti.min_lower_anim.state == banti_ANIM_STATE_STOPPED && disp0 != disp1) { banti_animation_init_jikan(&banti.min_lower_anim); banti.min_lower_anim.state = banti_ANIM_STATE_PLAYING; } } static void banti_time_check() { int pre_state; int post_state; pre_state = banti.month_anim.state | banti.day_anim.state | banti.hour_upper_anim.state | banti.hour_lower_anim.state | banti.min_upper_anim.state | banti.min_lower_anim.state; if (pre_state == banti_ANIM_STATE_STOPPED) { banti_chk_anime_start(); } banti_anime_proc(); post_state = banti.month_anim.state | banti.day_anim.state | banti.hour_upper_anim.state | banti.hour_lower_anim.state | banti.min_upper_anim.state | banti.min_lower_anim.state; if (pre_state != post_state) { if (pre_state == banti_ANIM_STATE_STOPPED) { lbRTC_TimeCopy(&banti.next_time, Common_GetPointer(time.rtc_time)); } else { lbRTC_TimeCopy(&banti.displayed_time, &banti.next_time); } } } extern void banti_move(GAME_PLAY* play) { int addressable_type; int update; banti_chk_disp_left(play); addressable_type = mPlib_Get_address_able_display(); if (banti.addressable_type != addressable_type) { update = FALSE; banti.timer++; if (addressable_type == mPlayer_ADDRESSABLE_FALSE_USING_TOOL) { if (banti.timer > 50) { update = TRUE; } } else if (banti.addressable_type != mPlayer_ADDRESSABLE_TRUE) { if (banti.timer > 30 || addressable_type == mPlayer_ADDRESSABLE_FALSE_TALKING) { update = TRUE; } } else if (banti.timer > 50 || addressable_type == mPlayer_ADDRESSABLE_FALSE_TALKING) { update = TRUE; } if (update == TRUE) { banti.timer = 0; banti.addressable_type = addressable_type; } } else { banti.timer = 0; } banti_calc_disp_alpha_rate(play); banti_time_check(); } static int banti_draw_before(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int joint_idx, Gfx** joint_shape, u8* joint_flags, void* arg, s_xyz* joint_rot, xyz_t* joint_pos) { Gfx** gfx_pp; Mtx* mtx; Banti_callback_c* callback_data = (Banti_callback_c*)arg; gfx_pp = callback_data->gfx_pp; mtx = callback_data->mtx; Matrix_softcv3_mult(joint_pos, joint_rot); if (*joint_shape != NULL) { _Matrix_to_Mtx(mtx); gSPMatrix(gfx_pp[0]++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (callback_data->state == banti_ANIM_STATE_STOPPED) { if (joint_idx != 2) { gSPDisplayList(gfx_pp[0]++, *joint_shape); } } else { gSPDisplayList(gfx_pp[0]++, *joint_shape); } callback_data->mtx++; } return 0; } extern u8 clk_win_suuji1_TA_tex_txt[]; extern u8 clk_win_suuji2_TA_tex_txt[]; extern u8 clk_win_suuji3_TA_tex_txt[]; extern u8 clk_win_suuji4_TA_tex_txt[]; extern u8 clk_win_suuji5_TA_tex_txt[]; extern u8 clk_win_suuji6_TA_tex_txt[]; extern u8 clk_win_suuji7_TA_tex_txt[]; extern u8 clk_win_suuji8_TA_tex_txt[]; extern u8 clk_win_suuji9_TA_tex_txt[]; extern u8 clk_win_suuji10_TA_tex_txt[]; extern u8 clk_win_suuji11_TA_tex_txt[]; extern u8 clk_win_suuji12_TA_tex_txt[]; extern u8 clk_win_suuji13_TA_tex_txt[]; extern u8 clk_win_suuji14_TA_tex_txt[]; extern u8 clk_win_suuji15_TA_tex_txt[]; extern u8 clk_win_suuji16_TA_tex_txt[]; extern u8 clk_win_suuji17_TA_tex_txt[]; extern u8 clk_win_suuji18_TA_tex_txt[]; extern u8 clk_win_suuji19_TA_tex_txt[]; extern u8 clk_win_suuji20_TA_tex_txt[]; extern u8 clk_win_suuji21_TA_tex_txt[]; extern u8 clk_win_suuji22_TA_tex_txt[]; extern u8 clk_win_suuji23_TA_tex_txt[]; extern u8 clk_win_suuji24_TA_tex_txt[]; extern u8 clk_win_suuji25_TA_tex_txt[]; extern u8 clk_win_suuji26_TA_tex_txt[]; extern u8 clk_win_suuji27_TA_tex_txt[]; extern u8 clk_win_suuji28_TA_tex_txt[]; extern u8 clk_win_suuji29_TA_tex_txt[]; extern u8 clk_win_suuji30_TA_tex_txt[]; extern u8 clk_win_suuji31_TA_tex_txt[]; static void banti_draw_hiduke_sub(Gfx** gfx_pp, GAME* game, Banti_anim_c* anim, int tex0_idx, int tex1_idx, int pos_idx) { static u8* hiniti_tex_table[31] = { clk_win_suuji1_TA_tex_txt, clk_win_suuji2_TA_tex_txt, clk_win_suuji3_TA_tex_txt, clk_win_suuji4_TA_tex_txt, clk_win_suuji5_TA_tex_txt, clk_win_suuji6_TA_tex_txt, clk_win_suuji7_TA_tex_txt, clk_win_suuji8_TA_tex_txt, clk_win_suuji9_TA_tex_txt, clk_win_suuji10_TA_tex_txt, clk_win_suuji11_TA_tex_txt, clk_win_suuji12_TA_tex_txt, clk_win_suuji13_TA_tex_txt, clk_win_suuji14_TA_tex_txt, clk_win_suuji15_TA_tex_txt, clk_win_suuji16_TA_tex_txt, clk_win_suuji17_TA_tex_txt, clk_win_suuji18_TA_tex_txt, clk_win_suuji19_TA_tex_txt, clk_win_suuji20_TA_tex_txt, clk_win_suuji21_TA_tex_txt, clk_win_suuji22_TA_tex_txt, clk_win_suuji23_TA_tex_txt, clk_win_suuji24_TA_tex_txt, clk_win_suuji25_TA_tex_txt, clk_win_suuji26_TA_tex_txt, clk_win_suuji27_TA_tex_txt, clk_win_suuji28_TA_tex_txt, clk_win_suuji29_TA_tex_txt, clk_win_suuji30_TA_tex_txt, clk_win_suuji31_TA_tex_txt }; static xyz_t set_pos_table[2] = { { 64.0f, -70.0f, 0.0f }, { 94.0f, -70.0f, 0.0f } }; GRAPH* g = game->graph; xyz_t* set_pos = &set_pos_table[pos_idx]; Mtx* m; int joint; Banti_callback_c callback_data; Matrix_push(); Matrix_translate(set_pos->x, set_pos->y, set_pos->z, 1); m = (Mtx*)GRAPH_ALLOC_TYPE(g, Mtx, anim->keyframe.skeleton->num_shown_joints); callback_data.mtx = m; if (m != NULL) { joint = 0; callback_data.gfx_pp = gfx_pp; callback_data.state = anim->state; gSPSegment(gfx_pp[0]++, G_MWO_SEGMENT_8, hiniti_tex_table[tex0_idx]); gSPSegment(gfx_pp[0]++, G_MWO_SEGMENT_9, hiniti_tex_table[tex1_idx]); cKF_Si3_draw_SV_R_child(game, &anim->keyframe, &joint, &banti_draw_before, NULL, &callback_data, NULL); } Matrix_pull(); } static void banti_draw_hiduke(Gfx** gfx_pp, GAME_PLAY* play, int alpha) { u8 a = alpha; gDPSetPrimColor(gfx_pp[0]++, 0, a, 235, 255, 120, a); gDPSetEnvColor(gfx_pp[0]++, 80, 40, 40, a); banti_draw_hiduke_sub(gfx_pp, (GAME*)play, &banti.month_anim, banti.displayed_time.month - 1, banti.next_time.month - 1, 0); banti_draw_hiduke_sub(gfx_pp, (GAME*)play, &banti.day_anim, banti.displayed_time.day - 1, banti.next_time.day - 1, 1); } extern u8 clk_win_jikan0_TA_tex_txt[]; extern u8 clk_win_jikan1_TA_tex_txt[]; extern u8 clk_win_jikan2_TA_tex_txt[]; extern u8 clk_win_jikan3_TA_tex_txt[]; extern u8 clk_win_jikan4_TA_tex_txt[]; extern u8 clk_win_jikan5_TA_tex_txt[]; extern u8 clk_win_jikan6_TA_tex_txt[]; extern u8 clk_win_jikan7_TA_tex_txt[]; extern u8 clk_win_jikan8_TA_tex_txt[]; extern u8 clk_win_jikan9_TA_tex_txt[]; extern u8 clk_win_jikan_TA_tex_txt[]; static void banti_draw_jikan_sub(Gfx** gfx_pp, GAME* game, Banti_anim_c* anim, int idx0, int idx1, int hide_zero, int pos_idx) { static u8* jikan_tex_table[11] = { clk_win_jikan0_TA_tex_txt, clk_win_jikan1_TA_tex_txt, clk_win_jikan2_TA_tex_txt, clk_win_jikan3_TA_tex_txt, clk_win_jikan4_TA_tex_txt, clk_win_jikan5_TA_tex_txt, clk_win_jikan6_TA_tex_txt, clk_win_jikan7_TA_tex_txt, clk_win_jikan8_TA_tex_txt, clk_win_jikan9_TA_tex_txt, clk_win_jikan_TA_tex_txt }; static xyz_t set_pos_table[4] = { { 60.0f, -91.0f, 0.0f }, { 76.0f, -91.0f, 0.0f }, { 98.0f, -91.0f, 0.0f }, { 113.0f, -91.0f, 0.0f } }; GRAPH* g = game->graph; xyz_t* set_pos = &set_pos_table[pos_idx]; Mtx* m; int joint; Banti_callback_c callback_data; Matrix_push(); Matrix_translate(set_pos->x, set_pos->y, set_pos->z, 1); if (hide_zero == TRUE) { if (idx0 == 0) { idx0 = 10; } if (idx1 == 0) { idx1 = 10; } } m = (Mtx*)GRAPH_ALLOC_TYPE(g, Mtx, anim->keyframe.skeleton->num_shown_joints); callback_data.mtx = m; if (m != NULL) { joint = 0; callback_data.gfx_pp = gfx_pp; callback_data.state = anim->state; gSPSegment(gfx_pp[0]++, G_MWO_SEGMENT_8, jikan_tex_table[idx0]); gSPSegment(gfx_pp[0]++, G_MWO_SEGMENT_9, jikan_tex_table[idx1]); cKF_Si3_draw_SV_R_child(game, &anim->keyframe, &joint, &banti_draw_before, NULL, &callback_data, NULL); } Matrix_pull(); } static void banti_draw_jikan(Gfx** gfx_pp, GAME_PLAY* play, int alpha) { u8 a = alpha; int now_hour; int next_hour; gDPSetPrimColor(gfx_pp[0]++, 0, a, 255, 255, 255, a); gDPSetEnvColor(gfx_pp[0]++, 60, 25, 10, a); now_hour = banti.displayed_time.hour; if (now_hour == 0 || now_hour == 12) { now_hour = 12; } else if (now_hour > 11) { now_hour -= 12; } next_hour = banti.next_time.hour; if (next_hour == 0 || next_hour == 12) { next_hour = 12; } else if (next_hour > 11) { next_hour -= 12; } banti_draw_jikan_sub(gfx_pp, (GAME*)play, &banti.hour_upper_anim, now_hour / 10, next_hour / 10, TRUE, 0); banti_draw_jikan_sub(gfx_pp, (GAME*)play, &banti.hour_lower_anim, now_hour % 10, next_hour % 10, FALSE, 1); banti_draw_jikan_sub(gfx_pp, (GAME*)play, &banti.min_upper_anim, banti.displayed_time.min / 10, banti.next_time.min / 10, FALSE, 2); banti_draw_jikan_sub(gfx_pp, (GAME*)play, &banti.min_lower_anim, banti.displayed_time.min % 10, banti.next_time.min % 10, FALSE, 3); } extern u8 clk_win_pm_tex_rgb_ia8[]; extern u8 clk_win_am_tex_rgb_ia8[]; extern Gfx clk_win_mode[]; extern u8 clk_win_sun_tex_rgb_ia8[]; extern u8 clk_win_mon_tex_rgb_ia8[]; extern u8 clk_win_tue_tex_rgb_ia8[]; extern u8 clk_win_wed_tex_rgb_ia8[]; extern u8 clk_win_thu_tex_rgb_ia8[]; extern u8 clk_win_fri_tex_rgb_ia8[]; extern u8 clk_win_sat_tex_rgb_ia8[]; extern Gfx clk_win_youbiT_model[]; extern Gfx clk_win_maruT_model[]; extern Gfx clk_win_maru2T_model[]; extern Gfx clk_win_ampmT_model[]; extern void banti_draw(GAME_PLAY* play) { static u8* week_tex_table[lbRTC_WEEK] = { clk_win_sun_tex_rgb_ia8, clk_win_mon_tex_rgb_ia8, clk_win_tue_tex_rgb_ia8, clk_win_wed_tex_rgb_ia8, clk_win_thu_tex_rgb_ia8, clk_win_fri_tex_rgb_ia8, clk_win_sat_tex_rgb_ia8 }; if (mFI_GET_TYPE(mFI_GetFieldId()) == mFI_FIELDTYPE_FG && mEv_CheckFirstIntro() != TRUE && banti.alpha > 0.01f) { GRAPH* g = play->game.graph; int poly_render = FALSE; Mtx* m = (Mtx*)GRAPH_ALLOC_TYPE(g, Mtx, 1); /* TODO: submenu mode enums */ if (play->submenu.process_status != mSM_PROCESS_WAIT && play->submenu.mode > 2) { poly_render = TRUE; } OPEN_DISP(g); if (m != NULL) { mFont_CulcOrthoMatrix(m); if (poly_render == TRUE) { gSPMatrix(NOW_POLY_OPA_DISP++, m, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); } else { gSPMatrix(NOW_FONT_DISP++, m, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); } } Matrix_scale(16.0f, 16.0f, 16.0f, 0); if (banti.disp_left == TRUE) { Matrix_translate(-184.0f, 0.0f, 0.0f, 1); } { Gfx** gfx_pp; u8* am_pm_tex = banti.displayed_time.hour < 12 ? clk_win_am_tex_rgb_ia8 : clk_win_pm_tex_rgb_ia8; int alpha; u8 a; Gfx* gfx; u32 rendermode0; u32 rendermode1; if (poly_render == TRUE) { gfx = NOW_POLY_OPA_DISP; } else { gfx = NOW_FONT_DISP; } gfx_pp = &gfx; gSPMatrix(gfx_pp[0]++, _Matrix_to_Mtx_new(g), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); alpha = banti.alpha * 255.0f; if (banti.alpha >= 0.4f) { rendermode0 = G_RM_PASS; rendermode1 = G_RM_XLU_SURF2; } else { rendermode0 = G_RM_PASS; rendermode1 = G_RM_CLD_SURF2; } gSPDisplayList(gfx_pp[0]++, clk_win_mode); gDPSetRenderMode(gfx_pp[0]++, rendermode0, rendermode1); if (banti.displayed_time.weekday == lbRTC_SUNDAY) { u8 a = alpha; gDPSetPrimColor(gfx_pp[0]++, 0, a, 255, 255, 225, a); gDPSetEnvColor(gfx_pp[0]++, 165, 30, 30, a); } else { u8 a = alpha; gDPSetPrimColor(gfx_pp[0]++, 0, a, 255, 255, 225, a); gDPSetEnvColor(gfx_pp[0]++, 80, 40, 0, a); } gSPSegment(gfx_pp[0]++, G_MWO_SEGMENT_9, week_tex_table[banti.displayed_time.weekday]); gSPDisplayList(gfx_pp[0]++, clk_win_youbiT_model); if ((Common_Get(time.rtc_time).sec & 1) == 1) { u8 a = alpha; gDPSetPrimColor(gfx_pp[0]++, 0, a, 215, 120, 0, a); gDPSetEnvColor(gfx_pp[0]++, 70, 50, 50, a); gSPDisplayList(gfx_pp[0]++, clk_win_maru2T_model); } a = alpha; gDPSetPrimColor(gfx_pp[0]++, 0, a, 255, 255, 120, a); gDPSetEnvColor(gfx_pp[0]++, 70, 10, 10, a); gSPSegment(gfx_pp[0]++, G_MWO_SEGMENT_A, am_pm_tex); gSPDisplayList(gfx_pp[0]++, clk_win_ampmT_model); gDPSetPrimColor(gfx_pp[0]++, 0, a, 255, 255, 0, a); gDPSetEnvColor(gfx_pp[0]++, 70, 50, 50, a); gSPDisplayList(gfx_pp[0]++, clk_win_maruT_model); banti_draw_hiduke(&gfx, play, alpha); banti_draw_jikan(&gfx, play, alpha); if (poly_render == TRUE) { SET_POLY_OPA_DISP(*gfx_pp); } else { SET_FONT_DISP(*gfx_pp); } } CLOSE_DISP(g); } }