more furniture work

This commit is contained in:
Prakxo
2024-03-09 14:05:03 +01:00
parent 5ad350fcf9
commit 737c9d3533
6 changed files with 362 additions and 5 deletions
+5 -5
View File
@@ -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"
+24
View File
@@ -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,
+125
View File
@@ -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,
+7
View File
@@ -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,
+155
View File
@@ -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,
+46
View File
@@ -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,