diff --git a/src/f_furniture.c b/src/f_furniture.c index ea07b40a..eb723303 100644 --- a/src/f_furniture.c +++ b/src/f_furniture.c @@ -271,18 +271,18 @@ static Gfx* fFTR_GetTwoTileGfx(int width0, int height0, int scroll_x0, int scrol #include "../src/ftr/ac_nog_ari.c" #include "../src/ftr/ac_nog_balloon_common.c" #include "../src/ftr/ac_nog_beachbed.c" -// #include "../src/ftr/ac_nog_beachtable.c" +#include "../src/ftr/ac_nog_beachtable.c" #include "../src/ftr/ac_nog_bishopB.c" #include "../src/ftr/ac_nog_bishopW.c" #include "../src/ftr/ac_nog_dango.c" #include "../src/ftr/ac_nog_collegenote.c" #include "../src/ftr/ac_nog_dump.c" #include "../src/ftr/ac_nog_earth.c" -// #include "../src/ftr/ac_nog_fan01.c" +#include "../src/ftr/ac_nog_fan01.c" #include "../src/ftr/ac_nog_flat.c" #include "../src/ftr/ac_nog_harddiary.c" #include "../src/ftr/ac_nog_isidai.c" -// #include "../src/ftr/ac_nog_ka.c" +#include "../src/ftr/ac_nog_ka.c" #include "../src/ftr/ac_nog_kaeru.c" #include "../src/ftr/ac_nog_kamakura.c" #include "../src/ftr/ac_nog_kera.c" @@ -300,7 +300,7 @@ static Gfx* fFTR_GetTwoTileGfx(int width0, int height0, int scroll_x0, int scrol #include "../src/ftr/ac_nog_museum.c" #include "../src/ftr/ac_nog_myhome2.c" #include "../src/ftr/ac_nog_myhome4.c" -// #include "../src/ftr/ac_nog_nabe.c" +#include "../src/ftr/ac_nog_nabe.c" #include "../src/ftr/ac_nog_pawnB.c" #include "../src/ftr/ac_nog_pawnW.c" #include "../src/ftr/ac_nog_piraluku.c" @@ -325,7 +325,7 @@ static Gfx* fFTR_GetTwoTileGfx(int width0, int height0, int scroll_x0, int scrol // #include "../src/ftr/ac_nog_tri_chest01.c" // #include "../src/ftr/ac_nog_tri_chest02.c" // #include "../src/ftr/ac_nog_tri_chest03.c" -// #include "../src/ftr/ac_nog_tri_clock01.c" +#include "../src/ftr/ac_nog_tri_clock01.c" #include "../src/ftr/ac_nog_tri_rack01.c" #include "../src/ftr/ac_nog_tri_sofa01.c" #include "../src/ftr/ac_nog_tri_table01.c" diff --git a/src/ftr/ac_nog_beachtable.c b/src/ftr/ac_nog_beachtable.c index da193be4..9d6970d2 100644 --- a/src/ftr/ac_nog_beachtable.c +++ b/src/ftr/ac_nog_beachtable.c @@ -1,5 +1,29 @@ static void fNBT_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data); +extern Gfx int_nog_beachtable_bodyT_model[]; +extern Gfx int_nog_beachtable_bubbleT_model[]; +extern Gfx int_nog_beachtable_glassT_model[]; + +static void fNBT_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){ + GAME_PLAY* play = (GAME_PLAY*)game; + + Gfx* gfx = fFTR_GetTwoTileGfx(16, 16, 0, 1, 16, 16, 0, 0, play, ftr_actor, 0); + + if(gfx != NULL){ + OPEN_DISP(game->graph); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(NEXT_POLY_OPA_DISP,int_nog_beachtable_bodyT_model); + gSPSegment(NEXT_POLY_XLU_DISP, G_MWO_SEGMENT_9, gfx); + + gSPDisplayList(NEXT_POLY_XLU_DISP,int_nog_beachtable_glassT_model); + gSPDisplayList(NEXT_POLY_XLU_DISP,int_nog_beachtable_bubbleT_model); + CLOSE_DISP(game->graph); + } +} + static aFTR_vtable_c fNBT_func = { NULL, NULL, diff --git a/src/ftr/ac_nog_fan01.c b/src/ftr/ac_nog_fan01.c index 11ddfb1d..f7c0a5a4 100644 --- a/src/ftr/ac_nog_fan01.c +++ b/src/ftr/ac_nog_fan01.c @@ -3,6 +3,131 @@ static void aNogFan_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u static void aNogFan_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data); static void aNogFan_dt(FTR_ACTOR* ftr_actor, u8* data); +extern cKF_Animation_R_c cKF_ba_r_int_nog_fan; +extern cKF_Skeleton_R_c cKF_bs_r_int_nog_fan; + +extern u8 int_nog_fan_fan1_TA_tex_txt[]; +extern u8 int_nog_fan_fan2_TA_tex_txt[]; +extern u8 int_nog_fan_fan3_TA_tex_txt[]; + +static u8* aNogFan_nog_fan01_anim[] = { + int_nog_fan_fan1_TA_tex_txt,int_nog_fan_fan2_TA_tex_txt,int_nog_fan_fan3_TA_tex_txt, +}; + +void aNogFan_ControlSwitchSE(FTR_ACTOR* ftr_actor){ + if (ftr_actor->switch_bit != FALSE){ + sAdo_OngenTrgStart(0x16,&ftr_actor->position); + } + else{ + sAdo_OngenTrgStart(0x17,&ftr_actor->position); + } +} + +void aNogFan_ChangeSwitch(FTR_ACTOR* ftr_actor){ + if (ftr_actor->switch_changed_flag != FALSE){ + aNogFan_ControlSwitchSE(ftr_actor); + } +} + +static void aNogFan_ct(FTR_ACTOR* ftr_actor, u8* data){ + cKF_SkeletonInfo_R_c* keyf; + + keyf = &ftr_actor->keyframe; + cKF_SkeletonInfo_R_ct(keyf, &cKF_bs_r_int_nog_fan, &cKF_ba_r_int_nog_fan, ftr_actor->joint, ftr_actor->morph); + cKF_SkeletonInfo_R_init_standard_repeat(keyf, &cKF_ba_r_int_nog_fan, NULL); + cKF_SkeletonInfo_R_play(keyf); + keyf->frame_control.speed = 0.5f; + + ftr_actor->dynamic_work_s[0] = 0; + + if(ftr_actor->switch_bit != FALSE){ + ftr_actor->dynamic_work_f[0] = 0.5f; + } + else{ + ftr_actor->dynamic_work_f[0] = 0.0f; + } + +} + +static void aNogFan_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){ + static int fan_kurukuru_data[] = { + 1,1,1,2,2,2,3,0xFFFFFFFF, + }; + int num; + int idx; + + cKF_SkeletonInfo_R_c* keyf; + + keyf = &ftr_actor->keyframe; + + aNogFan_ChangeSwitch(ftr_actor); + if(ftr_actor->switch_bit != FALSE){ + f32 step = sqrtf(2.0f); + + add_calc(&ftr_actor->dynamic_work_f[0],0.5f, 1.0f - step, 0.25f,0.0005f); + + if(aFTR_CAN_PLAY_SE(ftr_actor)){ + sAdo_OngenPos((u32) ftr_actor, 1, &ftr_actor->position); + } + } + else{ + f32 step = sqrtf(2.0f); + + add_calc(&ftr_actor->dynamic_work_f[0],0.0f, 1.0f - step, 0.25f,0.0005f); + + } + + keyf->frame_control.speed = ftr_actor->dynamic_work_f[0]; + cKF_SkeletonInfo_R_play(keyf); + + idx = 9.0f - (2.0f * (ftr_actor->dynamic_work_f[0] * 9.0f)); + ftr_actor->dynamic_work_s[0]++; + + + num = fan_kurukuru_data[idx]; + + if((num != 1) && (ftr_actor->dynamic_work_s[0] >= num )){ + ftr_actor->dynamic_work_s[0] = 0; + ftr_actor->tex_animation.frame++; + + if(ftr_actor->tex_animation.frame >= 6 || ftr_actor->tex_animation.frame < 0){ + ftr_actor->tex_animation.frame = 0; + } + } + +} + +static void aNogFan_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) { + int idx; + cKF_SkeletonInfo_R_c* keyf; + Mtx* mtx; + + keyf = &ftr_actor->keyframe; + + mtx = ftr_actor->skeleton_mtx[game->frame_counter & 1]; + + if(ftr_actor->ctr_type == aFTR_CTR_TYPE_GAME_PLAY){ + idx = ftr_actor->tex_animation.frame >> 1; + } + else{ + int fctr = ABS((int)game->frame_counter % 6); + idx = fctr >> 1; + } + + OPEN_DISP(game->graph); + + gSPMatrix(NEXT_POLY_OPA_DISP,_Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(NEXT_POLY_OPA_DISP, G_MWO_SEGMENT_8,aNogFan_nog_fan01_anim[idx]); + cKF_Si3_draw_R_SV(game, keyf, mtx, NULL, NULL, NULL); + + + CLOSE_DISP(game->graph); +} + +static void aNogFan_dt(FTR_ACTOR* ftr_actor, u8* data){ + +} + static aFTR_vtable_c aNogFan_func = { &aNogFan_ct, &aNogFan_mv, diff --git a/src/ftr/ac_nog_ka.c b/src/ftr/ac_nog_ka.c index 655b61df..95f7be45 100644 --- a/src/ftr/ac_nog_ka.c +++ b/src/ftr/ac_nog_ka.c @@ -1,6 +1,13 @@ extern aFTR_rig_c aNogKa_key_anime_data; static void fNKA_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data); +static void fNKA_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) { + if(aFTR_CAN_PLAY_SE(ftr_actor)) { + sAdo_RoomIncectPos((u32) ftr_actor, 0x43, &ftr_actor->position); + } +} + + static aFTR_vtable_c fNKA_func = { NULL, &fNKA_mv, diff --git a/src/ftr/ac_nog_nabe.c b/src/ftr/ac_nog_nabe.c index 914f99ea..76d5018d 100644 --- a/src/ftr/ac_nog_nabe.c +++ b/src/ftr/ac_nog_nabe.c @@ -3,6 +3,161 @@ static void fNNB_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* static void fNNB_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data); static void fNNB_dt(FTR_ACTOR* ftr_actor, u8* data); +extern cKF_Animation_R_c cKF_ba_r_int_nog_nabe; +extern cKF_Skeleton_R_c cKF_bs_r_int_nog_nabe; + +extern u8 int_nog_nabe_fire1_TA_tex_txt[]; +extern u8 int_nog_nabe_fire2_TA_tex_txt[]; +extern u8 int_nog_nabe_fire3_TA_tex_txt[]; + +u8* fNNB_texture_table[] = { + int_nog_nabe_fire2_TA_tex_txt,int_nog_nabe_fire2_TA_tex_txt,int_nog_nabe_fire3_TA_tex_txt,int_nog_nabe_fire3_TA_tex_txt, +}; + +extern Gfx int_nog_nabe_fire_model[]; +void fNNB_ct(FTR_ACTOR* ftr_actor, u8* data) { + cKF_SkeletonInfo_R_c* keyf; + u32 t; + + keyf = &ftr_actor->keyframe; + cKF_SkeletonInfo_R_ct(keyf, &cKF_bs_r_int_nog_nabe, &cKF_ba_r_int_nog_nabe, ftr_actor->joint, ftr_actor->morph); + cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_nog_nabe, NULL); + keyf->frame_control.speed = 0.0f; + keyf->frame_control.start_frame = 1.0f; + keyf->frame_control.end_frame = cKF_ba_r_int_nog_nabe.frames; + t = 1 - ftr_actor->switch_bit; + ftr_actor->dynamic_work_s[0] = t > 0; + if (ftr_actor->dynamic_work_s[0] == 0) { + keyf->frame_control.current_frame = cKF_ba_r_int_nog_nabe.frames; + } + cKF_SkeletonInfo_R_play(keyf); + ftr_actor->dynamic_work_s[1] = ftr_actor->dynamic_work_s[0]; +} + +void fNNB_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) { + xyz_t pos; + cKF_SkeletonInfo_R_c* keyf = &ftr_actor->keyframe; + + if (ftr_actor->dynamic_work_s[0] == 1) { + if (aFTR_CAN_PLAY_SE(ftr_actor)) { + sAdo_OngenPos((u32)ftr_actor, 0x50, &ftr_actor->position); + if (ftr_actor->dynamic_work_s[2] < 0) { + pos = ftr_actor->position; + + pos.y += 18.0f; + + Common_Get(clip).effect_clip->effect_make_proc(0x71, pos, 1, 0, game, 0xFFFF, 6, 0); + ftr_actor->dynamic_work_s[2] = (int)(10.0f + RANDOM_F(20.0f)); + } else { + ftr_actor->dynamic_work_s[2]--; + } + } + } + if ((ftr_actor->switch_changed_flag != FALSE) && (keyf->frame_control.speed == 0.0f) && + (ftr_actor->dynamic_work_s[3] == 0)) { + ftr_actor->dynamic_work_s[0] = (ftr_actor->dynamic_work_s[0] + 1) & 1; + if (ftr_actor->dynamic_work_s[0] != 0) { + keyf->frame_control.speed = 0.5f; + keyf->frame_control.start_frame = cKF_ba_r_int_nog_nabe.frames; + keyf->frame_control.end_frame = 1.0f; + sAdo_OngenTrgStart(0x17, &ftr_actor->position); + } else { + keyf->frame_control.speed = 0.5f; + keyf->frame_control.start_frame = 1.0f; + keyf->frame_control.end_frame = cKF_ba_r_int_nog_nabe.frames; + sAdo_OngenTrgStart(0x16, &ftr_actor->position); + } + ftr_actor->dynamic_work_s[3] = 0x13; + } + if (ftr_actor->dynamic_work_s[3] == 0) { + ftr_actor->dynamic_work_s[1] = ftr_actor->dynamic_work_s[0]; + } + if (cKF_SkeletonInfo_R_play(keyf) == 1) { + keyf->frame_control.speed = 0.0f; + } + if (ftr_actor->dynamic_work_s[3] > 0) { + ftr_actor->dynamic_work_s[3]--; + } +} + + +void fNNB_dt(FTR_ACTOR* ftr_actor, u8* data) { + if (ftr_actor->dynamic_work_s[0] != 0) { + ftr_actor->switch_bit = TRUE; + } + else{ + ftr_actor->switch_bit = FALSE; + } +} + +static int fNNB_DrawBefore(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg, + s_xyz* joint1, xyz_t* trans){ + + if(jointNum == 2){ + *joint = NULL; + } + + return 1; +} + +static int fNNB_DrawAfter(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg, + s_xyz* joint1, xyz_t* trans){ + + if(jointNum == 2){ + OPEN_DISP(game->graph); + + gSPMatrix(NEXT_POLY_XLU_DISP,_Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(NEXT_POLY_XLU_DISP,int_nog_nabe_fire_model); + CLOSE_DISP(game->graph); + } + + return 1; +} + +void fNNB_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) { + GAME_PLAY* play = (GAME_PLAY*)game; + cKF_SkeletonInfo_R_c* keyf; + Mtx* mtx; + int fctr; + s16 ctr; + + + int txt_type; + u8* txt; + + fctr = game->frame_counter; + keyf = &ftr_actor->keyframe; + ctr = ftr_actor->ctr_type; + mtx = ftr_actor->skeleton_mtx[fctr & 1]; + + if(ctr == aFTR_CTR_TYPE_GAME_PLAY){ + fctr = play->game_frame; + } + + if(ctr == aFTR_CTR_TYPE_GAME_PLAY){ + txt_type = ((ftr_actor->dynamic_work_s[1] == 1) || (ctr != 1)) ? 1 : 0; + txt = (txt_type != 0) ? fNNB_texture_table[fctr & 3] : int_nog_nabe_fire1_TA_tex_txt; + } + else if (keyf->frame_control.end_frame == cKF_ba_r_int_nog_nabe.frames) { + txt_type = ((ftr_actor->dynamic_work_s[1] == 1) || (ctr != 1)) ? 1 : 0; + txt = (txt_type != 0) ? fNNB_texture_table[fctr & 3] : int_nog_nabe_fire1_TA_tex_txt; + } + else{ + txt = int_nog_nabe_fire1_TA_tex_txt; + } + + + OPEN_DISP(game->graph); + + gSPMatrix(NEXT_POLY_OPA_DISP,_Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(NEXT_POLY_XLU_DISP, G_MWO_SEGMENT_8,txt); + cKF_Si3_draw_R_SV(game, keyf, mtx, fNNB_DrawBefore, fNNB_DrawAfter, ftr_actor); + + + CLOSE_DISP(game->graph); +} + static aFTR_vtable_c fNNB_func = { &fNNB_ct, &fNNB_mv, diff --git a/src/ftr/ac_nog_tri_clock01.c b/src/ftr/ac_nog_tri_clock01.c index 6358d56d..78d37bf4 100644 --- a/src/ftr/ac_nog_tri_clock01.c +++ b/src/ftr/ac_nog_tri_clock01.c @@ -3,6 +3,52 @@ static void aNogTriClock01_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* static void aNogTriClock01_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data); static void aNogTriClock01_dt(FTR_ACTOR* ftr_actor, u8* data); +extern cKF_Animation_R_c cKF_ba_r_int_nog_tri_clock01; +extern cKF_Skeleton_R_c cKF_bs_r_int_nog_tri_clock01; + +static int aNogTriClock01_DwAfter(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg, + s_xyz* joint1, xyz_t* trans) { + return 1; +} + +static int aNogTriClock01_DwBefore(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg, + s_xyz* joint1, xyz_t* trans) { + + if(jointNum == 3){ + joint1->z -= Common_Get(time).rad_hour; + } + else if(jointNum == 4){ + joint1->z -= Common_Get(time).rad_min; + } + + return 1; +} + +static void aNogTriClock01_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){ + cKF_Si3_draw_R_SV(game, &ftr_actor->keyframe, ftr_actor->skeleton_mtx[game->frame_counter & 1] , aNogTriClock01_DwBefore, aNogTriClock01_DwAfter, ftr_actor); +} + +static void aNogTriClock01_ct(FTR_ACTOR* ftr_actor, u8* data){ + cKF_SkeletonInfo_R_c* keyf; + + keyf = &ftr_actor->keyframe; + cKF_SkeletonInfo_R_ct(keyf, &cKF_bs_r_int_nog_tri_clock01, &cKF_ba_r_int_nog_tri_clock01, ftr_actor->joint, ftr_actor->morph); + cKF_SkeletonInfo_R_init_standard_repeat(keyf, &cKF_ba_r_int_nog_tri_clock01, NULL); + cKF_SkeletonInfo_R_play(keyf); + keyf->frame_control.speed = 0.5f; + +} +static void aNogTriClock01_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){ + cKF_SkeletonInfo_R_c* keyf; + + keyf = &ftr_actor->keyframe; + cKF_SkeletonInfo_R_play(keyf); +} + +static void aNogTriClock01_dt(FTR_ACTOR* ftr_actor, u8* data){ + +} + static aFTR_vtable_c aNogTriClock01_func = { &aNogTriClock01_ct, &aNogTriClock01_mv,