match furnitures ike_island_*

This commit is contained in:
Prakxo
2024-03-06 08:50:37 +00:00
parent c8e1ab65ae
commit 839408a7f3
3 changed files with 138 additions and 23 deletions
+2 -1
View File
@@ -67,6 +67,7 @@ typedef void (*aMR_OPEN_CLOSE_COMMON_MOVE_PROC)(FTR_ACTOR* ftr_actor, ACTOR* act
f32 end_frame);
typedef void (*aMR_FAMICOM_EMU_COMMON_MOVE_PROC)(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, int rom_no,
int agb_rom_no);
typedef void (*aMR_SOUND_MELODY_PROC)(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, int idx);
typedef struct my_room_clip_s {
MY_ROOM_ACTOR* my_room_actor_p;
@@ -95,7 +96,7 @@ typedef struct my_room_clip_s {
void* ftrNo2bankAddress_proc;
void* call_sit_down_ongen_pos_se_proc;
aMR_clock_info_c* clock_info_p; /* used for playing the clock tick? sfx */
void* sound_melody_proc;
aMR_SOUND_MELODY_PROC sound_melody_proc;
void* check_danna_kill_proc;
} aMR_Clip_c;
+130 -22
View File
@@ -3,30 +3,138 @@ static void fIIH_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8*
static void fIIH_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
static void fIIH_dt(FTR_ACTOR* ftr_actor, u8* data);
extern cKF_Animation_R_c cKF_ba_r_int_ike_island_hako01;
extern cKF_Animation_R_c cKF_ba_r_int_ike_island_hako02;
extern cKF_Skeleton_R_c cKF_bs_r_int_ike_island_hako01;
static void fIIH_ct(FTR_ACTOR* ftr_actor, u8* data) {
cKF_SkeletonInfo_R_c* keyf;
s_xyz* joint_work;
s_xyz* morph_work;
joint_work = ftr_actor->joint;
morph_work = ftr_actor->morph;
keyf = &ftr_actor->keyframe;
if ((Save_Get(scene_no) == SCENE_NPC_HOUSE) || (Save_Get(scene_no) == SCENE_COTTAGE_NPC)) {
ftr_actor->switch_bit = FALSE;
} else {
ftr_actor->dynamic_work_s[0] = ftr_actor->switch_bit == TRUE;
}
if (ftr_actor->dynamic_work_s[0] == TRUE) {
cKF_SkeletonInfo_R_ct(keyf, &cKF_bs_r_int_ike_island_hako01, &cKF_ba_r_int_ike_island_hako01, joint_work,
morph_work);
cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_ike_island_hako01, NULL);
keyf->frame_control.speed = 0.0f;
keyf->frame_control.start_frame = 1.0f;
keyf->frame_control.end_frame = cKF_ba_r_int_ike_island_hako01.frames;
keyf->frame_control.current_frame = cKF_ba_r_int_ike_island_hako01.frames;
} else {
cKF_SkeletonInfo_R_ct(keyf, &cKF_bs_r_int_ike_island_hako01, &cKF_ba_r_int_ike_island_hako02, joint_work,
morph_work);
cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_ike_island_hako02, NULL);
keyf->frame_control.speed = 0.0f;
keyf->frame_control.start_frame = 1.0f;
keyf->frame_control.end_frame = cKF_ba_r_int_ike_island_hako02.frames;
keyf->frame_control.current_frame = cKF_ba_r_int_ike_island_hako02.frames;
}
cKF_SkeletonInfo_R_play(keyf);
}
void fIIH_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
cKF_SkeletonInfo_R_c* keyf;
keyf = &ftr_actor->keyframe;
if ((ftr_actor->switch_changed_flag != FALSE) &&
(aMR_GetContactInfoLayer1()->contact_direction == aMR_CONTACT_DIR_FRONT) &&
(0.0f == keyf->frame_control.speed)) {
ftr_actor->dynamic_work_s[0] = (ftr_actor->dynamic_work_s[0] + 1) & 1;
if (ftr_actor->dynamic_work_s[0] != FALSE) {
cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_ike_island_hako01, NULL);
keyf->frame_control.start_frame = 1.0f;
keyf->frame_control.end_frame = cKF_ba_r_int_ike_island_hako01.frames;
keyf->frame_control.speed = 0.5f;
sAdo_OngenTrgStart(0x16AU, &ftr_actor->position);
} else {
cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_ike_island_hako02, NULL);
keyf->frame_control.start_frame = 1.0f;
keyf->frame_control.end_frame = cKF_ba_r_int_ike_island_hako02.frames;
keyf->frame_control.speed = 0.5f;
sAdo_OngenTrgStart(0x16B, &ftr_actor->position);
}
}
if (aFTR_CAN_PLAY_SE(ftr_actor)) {
if (ftr_actor->dynamic_work_s[0] != 0) {
if (keyf->frame_control.current_frame > 25.0f) {
sAdo_OngenPos((u32)ftr_actor, 0x52, &ftr_actor->position);
}
} else if (keyf->frame_control.current_frame < 25.0f) {
sAdo_OngenPos((u32)ftr_actor, 0x52, &ftr_actor->position);
}
}
if (cKF_SkeletonInfo_R_play(keyf) == 1) {
keyf->frame_control.speed = 0.0f;
}
}
void fIIH_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
GAME_PLAY* play = (GAME_PLAY*)game;
cKF_SkeletonInfo_R_c* keyf = &ftr_actor->keyframe;
Mtx* mtx = ftr_actor->skeleton_mtx[game->frame_counter & 1];
int scroll;
Gfx* gfx1;
Gfx* gfx2;
Gfx* gfx3;
scroll = (mSc_IS_SCENE_BASEMENT(Save_Get(scene_no)) && mEnv_PointLightMin() != 0) ? 0 : 2;
gfx1 = fFTR_GetTwoTileGfx(32, 8, scroll, 0, 32, 8, 0, 0, play, ftr_actor, 0);
gfx2 = fFTR_GetTwoTileGfx(32, 8, scroll, 0, 32, 8, 0, 0, play, ftr_actor, 5);
gfx3 = fFTR_GetTwoTileGfx(32, 8, scroll, 0, 32, 8, 0, 0, play, ftr_actor, 15);
if ((gfx1 != NULL) && (gfx2 != NULL) && (gfx3 != 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);
gSPSegment(NEXT_POLY_OPA_DISP, 8, gfx1);
gSPSegment(NEXT_POLY_OPA_DISP, 9, gfx2);
gSPSegment(NEXT_POLY_OPA_DISP, 10, gfx3);
cKF_Si3_draw_R_SV(game, keyf, mtx, NULL, NULL, NULL);
CLOSE_DISP(game->graph);
}
}
void fIIH_dt(FTR_ACTOR* ftr_actor, u8* data) {
if (ftr_actor->dynamic_work_s[0] != FALSE) {
ftr_actor->switch_bit = TRUE;
} else {
ftr_actor->switch_bit = FALSE;
}
}
static aFTR_vtable_c fIIH_func = {
&fIIH_ct,
&fIIH_mv,
&fIIH_dw,
&fIIH_dt,
NULL,
&fIIH_ct, &fIIH_mv, &fIIH_dw, &fIIH_dt, NULL,
};
aFTR_PROFILE iam_ike_island_hako01 = {
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
15.7f,
0.009f,
aFTR_SHAPE_TYPEA,
mCoBG_FTR_TYPEA,
0,
1,
0,
aFTR_INTERACTION_START_DISABLED,
&fIIH_func,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
15.7f,
0.009f,
aFTR_SHAPE_TYPEA,
mCoBG_FTR_TYPEA,
0,
1,
0,
aFTR_INTERACTION_START_DISABLED,
&fIIH_func,
};
+6
View File
@@ -1,6 +1,12 @@
extern Gfx int_ike_island_uku01_body_model[];
static void fIIUKRR_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
static void fIIUKRR_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){
if (Common_Get(clip).my_room_clip != NULL) {
Common_Get(clip).my_room_clip->sound_melody_proc(ftr_actor,my_room_actor,15);
}
}
static aFTR_vtable_c fIIUKRR_func = {
NULL,
&fIIUKRR_mv,