match furnitures ike_jny_*

This commit is contained in:
Prakxo
2024-03-06 09:23:27 +00:00
parent 839408a7f3
commit f5cef5c0f1
8 changed files with 387 additions and 10 deletions
+3
View File
@@ -109,6 +109,9 @@ extern int aMR_GetFurnitureUnit(mActor_name_t ftr);
extern mActor_name_t aMR_FurnitureFg_to_FurnitureFgWithDirect(mActor_name_t ftr, int direct);
extern void aMR_SameFurnitureSwitchOFF(u16 ftr_name);
extern aMR_contact_info_c* aMR_GetContactInfoLayer1(void);
extern FTR_ACTOR* aMR_GetParentFactor();
extern s16 aMR_GetParentAngleOffset(FTR_ACTOR* ftr_actor, MY_ROOM_ACTOR* my_room_actor);
extern void aMR_SetSurprise(ACTOR* my_room_actor, s16 rot);
#ifdef __cplusplus
}
+9 -9
View File
@@ -172,31 +172,31 @@ static Gfx* fFTR_GetTwoTileGfx(int width0, int height0, int scroll_x0, int scrol
#include "../src/ftr/ac_din_trikera_tail.c"
#include "../src/ftr/ac_din_trilobite.c"
#include "../src/ftr/ac_famicom_common.c"
// #include "../src/ftr/ac_fmanekin.c"
// #include "../src/ftr/ac_fumbrella.c"
#include "../src/ftr/ac_fmanekin.c"
#include "../src/ftr/ac_fumbrella.c"
#include "../src/ftr/ac_hnw_common.c"
#include "../src/ftr/ac_ike_art_ang.c"
#include "../src/ftr/ac_ike_art_fel.c"
// #include "../src/ftr/ac_ike_island_hako01.c"
#include "../src/ftr/ac_ike_island_hako01.c"
#include "../src/ftr/ac_ike_island_sensui01.c"
// #include "../src/ftr/ac_ike_island_uku01.c"
#include "../src/ftr/ac_ike_island_uku01.c"
#include "../src/ftr/ac_ike_jny_afmen01.c"
#include "../src/ftr/ac_ike_jny_botle01.c"
#include "../src/ftr/ac_ike_jny_gate01.c"
#include "../src/ftr/ac_ike_jny_gojyu01.c"
// #include "../src/ftr/ac_ike_jny_hariko01.c"
// #include "../src/ftr/ac_ike_jny_houi01.c"
#include "../src/ftr/ac_ike_jny_hariko01.c"
#include "../src/ftr/ac_ike_jny_houi01.c"
#include "../src/ftr/ac_ike_jny_kibori01.c"
#include "../src/ftr/ac_ike_jny_makada01.c"
#include "../src/ftr/ac_ike_jny_moai01.c"
#include "../src/ftr/ac_ike_jny_ningyo01.c"
#include "../src/ftr/ac_ike_jny_pisa01.c"
// #include "../src/ftr/ac_ike_jny_rosia01.c"
#include "../src/ftr/ac_ike_jny_rosia01.c"
#include "../src/ftr/ac_ike_jny_sirser01.c"
#include "../src/ftr/ac_ike_jny_sirser201.c"
// #include "../src/ftr/ac_ike_jny_syon01.c"
#include "../src/ftr/ac_ike_jny_syon01.c"
#include "../src/ftr/ac_ike_jny_tower01.c"
// #include "../src/ftr/ac_ike_jny_truth01.c"
#include "../src/ftr/ac_ike_jny_truth01.c"
// #include "../src/ftr/ac_ike_jpn_tansu01.c"
// #include "../src/ftr/ac_ike_kama_danro01.c"
// #include "../src/ftr/ac_ike_k_count01.c"
+1 -1
View File
@@ -73,7 +73,7 @@ void fIIH_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
sAdo_OngenPos((u32)ftr_actor, 0x52, &ftr_actor->position);
}
}
if (cKF_SkeletonInfo_R_play(keyf) == 1) {
if (cKF_SkeletonInfo_R_play(keyf) == cKF_STATE_STOPPED) {
keyf->frame_control.speed = 0.0f;
}
}
+51
View File
@@ -2,6 +2,57 @@ static void fIJH_ct(FTR_ACTOR* ftr_actor, u8* data);
static void fIJH_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
static void fIJH_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
extern cKF_Skeleton_R_c cKF_bs_r_int_ike_jny_hariko01;
extern cKF_Animation_R_c cKF_ba_r_int_ike_jny_hariko01;
static void fIJH_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_ike_jny_hariko01, &cKF_ba_r_int_ike_jny_hariko01, ftr_actor->joint, ftr_actor->morph);
cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_ike_jny_hariko01, NULL);
cKF_SkeletonInfo_R_play(keyf);
keyf->frame_control.speed = 0.0f;
}
static void fIJH_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->keyframe.frame_control.speed == 0.0f){
if (ftr_actor->switch_changed_flag != 0){
if (aFTR_CAN_PLAY_SE(ftr_actor)){
sAdo_OngenTrgStart(0x7B, &ftr_actor->position);
}
keyf->frame_control.current_frame = 1.0f;
cKF_SkeletonInfo_R_play(keyf);
keyf->frame_control.speed = 0.25f;
}
}
else{
if (cKF_SkeletonInfo_R_play(keyf) != cKF_STATE_STOPPED){
cKF_SkeletonInfo_R_play(keyf);
keyf->frame_control.speed = 0.25f;
}
else{
keyf->frame_control.speed = 0.0f;
}
}
}
static void fIJH_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){
Mtx* mtx = ftr_actor->skeleton_mtx[game->frame_counter & 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);
cKF_Si3_draw_R_SV(game,&ftr_actor->keyframe,mtx,NULL,NULL,NULL);
CLOSE_DISP(game->graph);
}
static aFTR_vtable_c fIJH_func = {
&fIJH_ct,
&fIJH_mv,
+128
View File
@@ -2,6 +2,134 @@ static void fIJHOUI_ct(FTR_ACTOR* ftr_actor, u8* data);
static void fIJHOUI_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
static void fIJHOUI_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
extern cKF_Animation_R_c cKF_ba_r_int_ike_jny_houi01;
extern cKF_Skeleton_R_c cKF_bs_r_int_ike_jny_houi01;
static void fIJHOUI_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_ike_jny_houi01, &cKF_ba_r_int_ike_jny_houi01, ftr_actor->joint,
ftr_actor->morph);
cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_ike_jny_houi01, NULL);
cKF_SkeletonInfo_R_play(keyf);
keyf->frame_control.speed = 0.0f;
ftr_actor->dynamic_work_s[0] = ftr_actor->state;
}
static void fIJHOUI_Status2SetMode(FTR_ACTOR* arg0, FTR_ACTOR* ftr_actor) {
switch (arg0->state) {
case aFTR_STATE_STOP:
case aFTR_STATE_PUSH:
case aFTR_STATE_PULL:
default:
break;
case aFTR_STATE_WAIT_LROTATE:
case aFTR_STATE_WAIT_RROTATE:
ftr_actor->dynamic_work_s[1] = 0;
break;
case aFTR_STATE_LROTATE:
ftr_actor->dynamic_work_s[1]++;
if (ftr_actor->dynamic_work_s[1] == 8) {
ftr_actor->dynamic_work_s[2] = 0;
ftr_actor->dynamic_work_f[0] =
(ftr_actor->dynamic_work_f[0] * sin_s(ftr_actor->dynamic_work_s[2])) - 45.0f;
if (ftr_actor->dynamic_work_f[0] < -45.0f) {
ftr_actor->dynamic_work_f[0] = -45.0f;
}
}
break;
case aFTR_STATE_RROTATE:
ftr_actor->dynamic_work_s[1]++;
if (ftr_actor->dynamic_work_s[1] == 8) {
ftr_actor->dynamic_work_s[2] = 0;
ftr_actor->dynamic_work_f[0] =
45.0f + (ftr_actor->dynamic_work_f[0] * sin_s(ftr_actor->dynamic_work_s[2]));
if (ftr_actor->dynamic_work_f[0] > 45.0f) {
ftr_actor->dynamic_work_f[0] = 45.0f;
}
}
break;
}
}
static void fIJHOUI_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
cKF_SkeletonInfo_R_c* keyf = &ftr_actor->keyframe;
FTR_ACTOR* parent;
parent = aMR_GetParentFactor();
fIJHOUI_Status2SetMode(ftr_actor, ftr_actor);
if (parent != NULL) {
fIJHOUI_Status2SetMode(parent, ftr_actor);
}
cKF_SkeletonInfo_R_play(keyf);
if (ftr_actor->dynamic_work_f[0] > 0.0f) {
ftr_actor->dynamic_work_f[0] -= (0.2f + (0.01f * GETREG(CRV, 81)));
if (ftr_actor->dynamic_work_f[0] < 0.0f) {
ftr_actor->dynamic_work_f[0] = 0.0f;
}
} else if (ftr_actor->dynamic_work_f[0] < 0.0f) {
ftr_actor->dynamic_work_f[0] = ftr_actor->dynamic_work_f[0] + (0.2f + (0.01f * GETREG(CRV, 81)));
if (ftr_actor->dynamic_work_f[0] > 0.0f) {
ftr_actor->dynamic_work_f[0] = 0.0f;
}
}
if (0.0f != ftr_actor->dynamic_work_f[0]) {
ftr_actor->dynamic_work_s[2] += 0x320 + GETREG(CRV, 80);
} else {
ftr_actor->dynamic_work_s[2] = 0;
}
add_calc(&ftr_actor->dynamic_work_f[1], ftr_actor->dynamic_work_f[0] * sin_s(ftr_actor->dynamic_work_s[2]), 0.3f,
100.0f, 0.0001f);
ftr_actor->dynamic_work_s[0] = ftr_actor->state;
}
static int fIJHOUI_DrawBefore(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg,
s_xyz* joint1, xyz_t* trans) {
FTR_ACTOR* actor = (FTR_ACTOR*)arg;
int offset = 10430.378f * (0.017453292f * actor->dynamic_work_f[1]);
if (jointNum == 3) {
MY_ROOM_ACTOR* my_room_actor;
int exists = FALSE;
if ((Common_Get(clip).my_room_clip != NULL && Common_Get(clip).my_room_clip->my_room_actor_p != NULL)) {
exists = TRUE;
}
if (exists != FALSE) {
my_room_actor = Common_Get(clip).my_room_clip->my_room_actor_p;
} else {
my_room_actor = NULL;
}
joint1->y -= actor->s_angle_y + (aMR_GetParentAngleOffset(actor, my_room_actor)) + offset;
}
return 1;
}
static int fIJHOUI_DrawAfter(GAME* game, cKF_SkeletonInfo_R_c* keyf, int jointNum, Gfx** joint, u8* jointFlag, void* arg,
s_xyz* joint1, xyz_t* trans) {
return 1;
}
static void fIJHOUI_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
Mtx* mtx = ftr_actor->skeleton_mtx[game->frame_counter & 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);
cKF_Si3_draw_R_SV(game, &ftr_actor->keyframe, mtx, fIJHOUI_DrawBefore, fIJHOUI_DrawAfter, ftr_actor);
CLOSE_DISP(game->graph);
}
static aFTR_vtable_c fIJHOUI_func = {
&fIJHOUI_ct,
&fIJHOUI_mv,
+60
View File
@@ -3,6 +3,66 @@ static void aIkeJnyRosia01_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME*
static void aIkeJnyRosia01_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
static void aIkeJnyRosia01_dt(FTR_ACTOR* ftr_actor, u8* data);
extern cKF_Animation_R_c cKF_ba_r_int_ike_jny_rosia01;
extern cKF_Skeleton_R_c cKF_bs_r_int_ike_jny_rosia01;
static void aIkeJnyRosia01_ct(FTR_ACTOR* ftr_actor, u8* data) {
cKF_SkeletonInfo_R_c* keyf = &ftr_actor->keyframe;
cKF_SkeletonInfo_R_ct(keyf, &cKF_bs_r_int_ike_jny_rosia01, &cKF_ba_r_int_ike_jny_rosia01, ftr_actor->joint,
ftr_actor->morph);
cKF_SkeletonInfo_R_init_standard_stop(keyf, &cKF_ba_r_int_ike_jny_rosia01, NULL);
keyf->frame_control.speed = 0.0f;
keyf->frame_control.start_frame = 1.0f;
keyf->frame_control.end_frame = cKF_ba_r_int_ike_jny_rosia01.frames;
ftr_actor->dynamic_work_s[0] = (ftr_actor->switch_bit == TRUE);
if (ftr_actor->dynamic_work_s[0] == 0) {
keyf->frame_control.current_frame = cKF_ba_r_int_ike_jny_rosia01.frames;
}
cKF_SkeletonInfo_R_play(keyf);
}
static void aIkeJnyRosia01_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
cKF_SkeletonInfo_R_c* keyf = &ftr_actor->keyframe;
if ((ftr_actor->switch_changed_flag != FALSE) && (keyf->frame_control.speed == 0.0f)) {
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_ike_jny_rosia01.frames;
keyf->frame_control.end_frame = 1.0f;
sAdo_OngenTrgStart(0x7A, &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_ike_jny_rosia01.frames;
sAdo_OngenTrgStart(0x7A, &ftr_actor->position);
}
}
if (cKF_SkeletonInfo_R_play(keyf) == cKF_STATE_STOPPED) {
keyf->frame_control.speed = 0.0f;
}
}
static void aIkeJnyRosia01_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
Mtx* mtx = ftr_actor->skeleton_mtx[game->frame_counter & 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);
cKF_Si3_draw_R_SV(game, &ftr_actor->keyframe, mtx, NULL, NULL, NULL);
CLOSE_DISP(game->graph);
}
static void aIkeJnyRosia01_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 aIkeJnyRosia01_func = {
&aIkeJnyRosia01_ct,
&aIkeJnyRosia01_mv,
+85
View File
@@ -2,6 +2,91 @@ static void fIJS_ct(FTR_ACTOR* ftr_actor, u8* data);
static void fIJS_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
static void fIJS_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
extern Gfx int_ike_jny_syon01_off_model[];
extern Gfx int_ike_jny_syon01_on_model[];
static void fIJS_ct(FTR_ACTOR* ftr_actor, u8* data){
f32 alpha;
if (ftr_actor->switch_bit == 1) {
ftr_actor->dynamic_work_s[0] = TRUE;
} else {
ftr_actor->dynamic_work_s[0] = FALSE;
}
if (ftr_actor->dynamic_work_s[0] == TRUE) {
alpha = 255.0f;
} else {
alpha = 0.0f;
}
ftr_actor->dynamic_work_f[0] = alpha;
}
static void fIJS_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
f32 alpha;
if (ftr_actor->dynamic_work_s[0] == TRUE) {
alpha = 255.0f;
} else {
alpha = 0.0f;
}
if (ftr_actor->dynamic_work_s[0] == TRUE) {
if (aFTR_CAN_PLAY_SE(ftr_actor)) {
sAdo_OngenPos((u32) ftr_actor, 0x4B, &ftr_actor->position);
}
}
if (ftr_actor->dynamic_work_f[0] > alpha) {
ftr_actor->dynamic_work_f[0] -= 6.0f;
if (ftr_actor->dynamic_work_f[0] < alpha) {
ftr_actor->dynamic_work_f[0] = alpha;
}
} else if (ftr_actor->dynamic_work_f[0] < alpha) {
ftr_actor->dynamic_work_f[0] += 6.0f;
if (ftr_actor->dynamic_work_f[0] > alpha) {
ftr_actor->dynamic_work_f[0] = alpha;
}
} else if (ftr_actor->switch_changed_flag != FALSE) {
ftr_actor->dynamic_work_s[0] = ((ftr_actor->dynamic_work_s[0] + 1) & 1);
}
}
static Gfx* fIJS_GetTwoTileGfx(int x0, int y0, int x1, int y1, GAME* game) {
return two_tex_scroll_dolphin(game->graph, 0, x0, y0, 32, 32, 1, x1, y1, 32, 32);
}
static void fNS_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data) {
GAME_PLAY* play = (GAME_PLAY*)game;
u32 ctr_ofs;
Gfx* scroll;
u8 alpha;
if (ftr_actor->ctr_type == aFTR_CTR_TYPE_GAME_PLAY) {
ctr_ofs = play->game_frame;
} else {
ctr_ofs = game->frame_counter;
}
scroll = fIJS_GetTwoTileGfx(0,ctr_ofs * 6, 0, 0, game);
if (ftr_actor->ctr_type == aFTR_CTR_TYPE_GAME_PLAY) {
alpha = (u8)(int)ftr_actor->dynamic_work_f[0];
} else {
alpha = 255;
}
if (scroll != 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_ike_jny_syon01_on_model);
gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0,255, 120,160,255, alpha);
gSPSegment(NEXT_POLY_XLU_DISP, G_MWO_SEGMENT_9, scroll);
gSPDisplayList(NEXT_POLY_XLU_DISP, int_ike_jny_syon01_off_model);
CLOSE_DISP(game->graph);
}
}
static aFTR_vtable_c fIJS_func = {
&fIJS_ct,
&fIJS_mv,
+50
View File
@@ -3,6 +3,56 @@ static void fIJT_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8*
static void fIJT_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data);
static void fIJT_dt(FTR_ACTOR* ftr_actor, u8* data);
extern u8 int_ike_jny_truthface1_TA_tex_txt[];
extern u8 int_ike_jny_truthface2_TA_tex_txt[];
extern Gfx int_ike_jny_truth01_body_model[];
static void fIJT_ct(FTR_ACTOR* ftr_actor, u8* data){
ftr_actor->dynamic_work_s[0] = 0;
ftr_actor->dynamic_work_s[1] = 0;
}
static void fIJT_mv(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){
GAME_PLAY* play = (GAME_PLAY*)game;
PLAYER_ACTOR* player;
player = GET_PLAYER_ACTOR(play);
if (ftr_actor->dynamic_work_s[1] == 0){
if (ftr_actor->switch_changed_flag != 0){
aMR_SetSurprise(my_room_actor, player->actor_class.shape_info.rotation.y);
ftr_actor->dynamic_work_s[0] = 0x32;
ftr_actor->dynamic_work_s[1] = 1;
}
}
else{
ftr_actor->dynamic_work_s[0]--;
if (ftr_actor->dynamic_work_s[0] == 0x14){
mVibctl_entry(100, 1, 1, 13, 0, 7, 7, 0.0f);
}
if (ftr_actor->dynamic_work_s[0] < 0){
ftr_actor->dynamic_work_s[0] = 0;
ftr_actor->dynamic_work_s[1] = 0;
}
}
}
static void fIJT_dw(FTR_ACTOR* ftr_actor, ACTOR* my_room_actor, GAME* game, u8* data){
static u8* tex_table[] = {
int_ike_jny_truthface1_TA_tex_txt,int_ike_jny_truthface2_TA_tex_txt,
};
int idx;
OPEN_DISP(game->graph);
idx = ftr_actor->dynamic_work_s[1] & 1;
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,tex_table[idx]);
gSPDisplayList(NEXT_POLY_OPA_DISP,int_ike_jny_truth01_body_model);
CLOSE_DISP(game->graph);
}
static aFTR_vtable_c fIJT_func = {
&fIJT_ct,
&fIJT_mv,