mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-06-20 22:51:17 -04:00
1135 lines
44 KiB
C
1135 lines
44 KiB
C
#include "ac_museum_fish_priv.h"
|
|
|
|
// extern data
|
|
// clang-format off
|
|
extern cKF_Skeleton_R_c
|
|
cKF_bs_r_act_mus_funa_a1,
|
|
cKF_bs_r_act_mus_hera_a1,
|
|
cKF_bs_r_act_mus_koi_a1,
|
|
cKF_bs_r_act_mus_nisiki_a1,
|
|
cKF_bs_r_act_mus_namazu_a1,
|
|
cKF_bs_r_act_mus_bass_a1,
|
|
cKF_bs_r_act_mus_bassm_a1,
|
|
cKF_bs_r_act_mus_bassl_a1,
|
|
cKF_bs_r_act_mus_gill_a1,
|
|
cKF_bs_r_act_mus_onamazu_a1,
|
|
cKF_bs_r_act_mus_raigyo_a1,
|
|
cKF_bs_r_act_mus_nigoi_a1,
|
|
cKF_bs_r_act_mus_ugui_a1,
|
|
cKF_bs_r_act_mus_oikawa_a1,
|
|
cKF_bs_r_act_mus_tanago_a1,
|
|
cKF_bs_r_act_mus_dojyo_a1,
|
|
cKF_bs_r_act_mus_wakasa_a1,
|
|
cKF_bs_r_act_mus_ayu_a1,
|
|
cKF_bs_r_act_mus_yamame_a1,
|
|
cKF_bs_r_act_mus_iwana_a1,
|
|
cKF_bs_r_act_mus_niji_a1,
|
|
cKF_bs_r_act_mus_ito_a1,
|
|
cKF_bs_r_act_mus_sake_a1,
|
|
cKF_bs_r_act_mus_kingyo_a1,
|
|
cKF_bs_r_act_mus_pirania_a1,
|
|
cKF_bs_r_act_mus_aroana_a1,
|
|
cKF_bs_r_act_mus_unagi_a1,
|
|
cKF_bs_r_act_mus_donko_a1,
|
|
cKF_bs_r_act_mus_angel_a1,
|
|
cKF_bs_r_act_mus_gupi_a1,
|
|
cKF_bs_r_act_mus_demekin_a1,
|
|
cKF_bs_r_act_mus_kaseki_a1,
|
|
cKF_bs_r_act_mus_zari,
|
|
cKF_bs_r_act_mus_kaeru_a1,
|
|
cKF_bs_r_act_mus_medaka_a1,
|
|
cKF_bs_r_act_mus_suzuki_a1,
|
|
cKF_bs_r_act_mus_tai_a1,
|
|
cKF_bs_r_act_mus_isidai_a1,
|
|
cKF_bs_r_act_mus_pira_a1;
|
|
|
|
extern cKF_Animation_R_c
|
|
cKF_ba_r_act_mus_funa_a1,
|
|
cKF_ba_r_act_mus_hera_a1,
|
|
cKF_ba_r_act_mus_koi_a1,
|
|
cKF_ba_r_act_mus_nisiki_a1,
|
|
cKF_ba_r_act_mus_namazu_a1,
|
|
cKF_ba_r_act_mus_bass_a1,
|
|
cKF_ba_r_act_mus_bassm_a1,
|
|
cKF_ba_r_act_mus_bassl_a1,
|
|
cKF_ba_r_act_mus_gill_a1,
|
|
cKF_ba_r_act_mus_onamazu_a1,
|
|
cKF_ba_r_act_mus_raigyo_a1,
|
|
cKF_ba_r_act_mus_nigoi_a1,
|
|
cKF_ba_r_act_mus_ugui_a1,
|
|
cKF_ba_r_act_mus_oikawa_a1,
|
|
cKF_ba_r_act_mus_tanago_a1,
|
|
cKF_ba_r_act_mus_dojyo_a1,
|
|
cKF_ba_r_act_mus_wakasa_a1,
|
|
cKF_ba_r_act_mus_ayu_a1,
|
|
cKF_ba_r_act_mus_yamame_a1,
|
|
cKF_ba_r_act_mus_iwana_a1,
|
|
cKF_ba_r_act_mus_niji_a1,
|
|
cKF_ba_r_act_mus_ito_a1,
|
|
cKF_ba_r_act_mus_sake_a1,
|
|
cKF_ba_r_act_mus_kingyo_a1,
|
|
cKF_ba_r_act_mus_pirania_a1,
|
|
cKF_ba_r_act_mus_aroana_a1,
|
|
cKF_ba_r_act_mus_unagi_a2,
|
|
cKF_ba_r_act_mus_donko_a1,
|
|
cKF_ba_r_act_mus_angel_a1,
|
|
cKF_ba_r_act_mus_gupi_a1,
|
|
cKF_ba_r_act_mus_demekin_a1,
|
|
cKF_ba_r_act_mus_kaseki_a1,
|
|
cKF_ba_r_act_mus_zari,
|
|
cKF_ba_r_act_mus_kaeru_a1,
|
|
cKF_ba_r_act_mus_medaka_a1,
|
|
cKF_ba_r_act_mus_suzuki_a1,
|
|
cKF_ba_r_act_mus_tai_a1,
|
|
cKF_ba_r_act_mus_isidai_a1,
|
|
cKF_ba_r_act_mus_pira_a1;
|
|
|
|
extern cKF_Skeleton_R_c
|
|
cKF_bs_r_obj_museum5_kusa1,
|
|
cKF_bs_r_obj_museum5_kusa2,
|
|
cKF_bs_r_obj_museum5_kusa3;
|
|
|
|
extern cKF_Animation_R_c
|
|
cKF_ba_r_obj_museum5_kusa1,
|
|
cKF_ba_r_obj_museum5_kusa2,
|
|
cKF_ba_r_obj_museum5_kusa3;
|
|
|
|
// data
|
|
MUSEUM_FISH_ACTOR* MF_Control_Actor;
|
|
|
|
/* Init stuff */
|
|
ACTOR_PROFILE Museum_Fish_Profile = {
|
|
mAc_PROFILE_MUSEUM_FISH,
|
|
ACTOR_PART_BG,
|
|
ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_MOVE_WHILE_CULLED | ACTOR_STATE_NO_DRAW_WHILE_CULLED,
|
|
EMPTY_NO,
|
|
ACTOR_OBJ_BANK_407,
|
|
sizeof(MUSEUM_FISH_ACTOR),
|
|
Museum_Fish_Actor_ct,
|
|
Museum_Fish_Actor_dt,
|
|
Museum_Fish_Actor_move,
|
|
Museum_Fish_Actor_draw,
|
|
NULL
|
|
};
|
|
|
|
static xyz_t suisou_pos[5] = {
|
|
{ 220.0f, 40.0f, 220.0f },
|
|
{ 420.0f, 40.0f, 220.0f },
|
|
{ 220.0f, 40.0f, 460.0f },
|
|
{ 420.0f, 40.0f, 460.0f },
|
|
{ 320.0f, 40.0f, 20.0f }
|
|
};
|
|
|
|
int kusa_group_tbl[14] = {
|
|
mfish_TANK_0,
|
|
mfish_TANK_2,
|
|
mfish_TANK_1,
|
|
mfish_TANK_3,
|
|
mfish_TANK_3,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_0,
|
|
mfish_TANK_2,
|
|
mfish_TANK_1,
|
|
mfish_TANK_3,
|
|
};
|
|
|
|
xyz_t kusa_pos[14] = {
|
|
{ 179.0f, 40.0f, 170.0f },
|
|
{ 253.0f, 40.0f, 495.0f },
|
|
{ 376.0f, 40.0f, 260.0f },
|
|
{ 397.0f, 40.0f, 412.0f },
|
|
{ 467.0f, 40.0f, 432.0f },
|
|
{ 141.0f, 40.0f, -18.0f },
|
|
{ 206.0f, 40.0f, -25.0f },
|
|
{ 346.0f, 40.0f, -38.0f },
|
|
{ 473.0f, 40.0f, -29.0f },
|
|
{ 495.0f, 40.0f, -21.0f },
|
|
{ 210.0f, 40.0f, 215.0f },
|
|
{ 266.0f, 40.0f, 507.0f },
|
|
{ 393.0f, 40.0f, 270.0f },
|
|
{ 415.0f, 40.0f, 415.0f }
|
|
};
|
|
|
|
xyz_t hasu_pos = { 420, 0, 220 };
|
|
|
|
xyz_t suisou_awa_pos[20] = {
|
|
{ 150.0f, 60.0f, -12.0f },
|
|
{ 192.0f, 60.0f, -20.0f },
|
|
{ 216.0f, 60.0f, -4.0f },
|
|
{ 300.0f, 60.0f, -42.0f },
|
|
{ 332.0f, 60.0f, -28.0f },
|
|
{ 356.0f, 60.0f, -46.0f },
|
|
{ 416.0f, 60.0f, -28.0f },
|
|
{ 456.0f, 60.0f, 20.0f },
|
|
{ 190.0f, 60.0f, 173.0f },
|
|
{ 196.0f, 60.0f, 186.0f },
|
|
{ 232.0f, 60.0f, 178.0f },
|
|
{ 372.0f, 60.0f, 254.0f },
|
|
{ 388.0f, 60.0f, 270.0f },
|
|
{ 434.0f, 60.0f, 173.0f },
|
|
{ 180.0f, 60.0f, 408.0f },
|
|
{ 256.0f, 60.0f, 512.0f },
|
|
{ 270.0f, 60.0f, 500.0f },
|
|
{ 406.0f, 60.0f, 414.0f },
|
|
{ 458.0f, 60.0f, 424.0f },
|
|
{ 447.0f, 60.0f, 442.0f }
|
|
};
|
|
|
|
s16 suisou_awa_group[20] = {
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_4,
|
|
mfish_TANK_0,
|
|
mfish_TANK_0,
|
|
mfish_TANK_0,
|
|
mfish_TANK_1,
|
|
mfish_TANK_1,
|
|
mfish_TANK_1,
|
|
mfish_TANK_2,
|
|
mfish_TANK_2,
|
|
mfish_TANK_2,
|
|
mfish_TANK_3,
|
|
mfish_TANK_3,
|
|
mfish_TANK_3,
|
|
};
|
|
|
|
cKF_Skeleton_R_c* mfish_model_tbl[aGYO_TYPE_NUM] = {
|
|
/* CRUCIAN_CARP */ &cKF_bs_r_act_mus_funa_a1,
|
|
/* BROOK_TROUT */ &cKF_bs_r_act_mus_hera_a1,
|
|
/* CARP */ &cKF_bs_r_act_mus_koi_a1,
|
|
/* KOI */ &cKF_bs_r_act_mus_nisiki_a1,
|
|
/* CATFISH */ &cKF_bs_r_act_mus_namazu_a1,
|
|
/* SMALL_BASS */ &cKF_bs_r_act_mus_bass_a1,
|
|
/* BASS */ &cKF_bs_r_act_mus_bassm_a1,
|
|
/* LARGE_BASS */ &cKF_bs_r_act_mus_bassl_a1,
|
|
/* BLUEGILL */ &cKF_bs_r_act_mus_gill_a1,
|
|
/* GIANT_CATFISH */ &cKF_bs_r_act_mus_onamazu_a1,
|
|
/* GIANT_SNAKEHEAD */ &cKF_bs_r_act_mus_raigyo_a1,
|
|
/* BARBEL_STEED */ &cKF_bs_r_act_mus_nigoi_a1,
|
|
/* DACE */ &cKF_bs_r_act_mus_ugui_a1,
|
|
/* PALE_CHUB */ &cKF_bs_r_act_mus_oikawa_a1,
|
|
/* BITTERLING */ &cKF_bs_r_act_mus_tanago_a1,
|
|
/* LOACH */ &cKF_bs_r_act_mus_dojyo_a1,
|
|
/* POND_SMELT */ &cKF_bs_r_act_mus_wakasa_a1,
|
|
/* SWEETFISH */ &cKF_bs_r_act_mus_ayu_a1,
|
|
/* CHERRY_SALMON */ &cKF_bs_r_act_mus_yamame_a1,
|
|
/* LARGE_CHAR */ &cKF_bs_r_act_mus_iwana_a1,
|
|
/* RAINBOW_TROUT */ &cKF_bs_r_act_mus_niji_a1,
|
|
/* STRINGFISH */ &cKF_bs_r_act_mus_ito_a1,
|
|
/* SALMON */ &cKF_bs_r_act_mus_sake_a1,
|
|
/* GOLDFISH */ &cKF_bs_r_act_mus_kingyo_a1,
|
|
/* PIRANHA */ &cKF_bs_r_act_mus_pirania_a1,
|
|
/* AROWANA */ &cKF_bs_r_act_mus_aroana_a1,
|
|
/* EEL */ &cKF_bs_r_act_mus_unagi_a1,
|
|
/* FRESHWATER_GOBY */ &cKF_bs_r_act_mus_donko_a1,
|
|
/* ANGELFISH */ &cKF_bs_r_act_mus_angel_a1,
|
|
/* GUPPY */ &cKF_bs_r_act_mus_gupi_a1,
|
|
/* POPEYED_GOLDFISH */ &cKF_bs_r_act_mus_demekin_a1,
|
|
/* COELACANTH */ &cKF_bs_r_act_mus_kaseki_a1,
|
|
/* CRAWFISH */ &cKF_bs_r_act_mus_zari,
|
|
/* FROG */ &cKF_bs_r_act_mus_kaeru_a1,
|
|
/* KILLIFISH */ &cKF_bs_r_act_mus_medaka_a1,
|
|
/* JELLYFISH */ NULL,
|
|
/* SEA_BASS */ &cKF_bs_r_act_mus_suzuki_a1,
|
|
/* RED_SNAPPER */ &cKF_bs_r_act_mus_tai_a1,
|
|
/* BARRED_KNIFEJAW */ &cKF_bs_r_act_mus_isidai_a1,
|
|
/* ARAPAIMA */ &cKF_bs_r_act_mus_pira_a1
|
|
};
|
|
|
|
cKF_Animation_R_c* mfish_anime_init_tbl[aGYO_TYPE_NUM] = {
|
|
/* CRUCIAN_CARP */ &cKF_ba_r_act_mus_funa_a1,
|
|
/* BROOK_TROUT */ &cKF_ba_r_act_mus_hera_a1,
|
|
/* CARP */ &cKF_ba_r_act_mus_koi_a1,
|
|
/* KOI */ &cKF_ba_r_act_mus_nisiki_a1,
|
|
/* CATFISH */ &cKF_ba_r_act_mus_namazu_a1,
|
|
/* SMALL_BASS */ &cKF_ba_r_act_mus_bass_a1,
|
|
/* BASS */ &cKF_ba_r_act_mus_bassm_a1,
|
|
/* LARGE_BASS */ &cKF_ba_r_act_mus_bassl_a1,
|
|
/* BLUEGILL */ &cKF_ba_r_act_mus_gill_a1,
|
|
/* GIANT_CATFISH */ &cKF_ba_r_act_mus_onamazu_a1,
|
|
/* GIANT_SNAKEHEAD */ &cKF_ba_r_act_mus_raigyo_a1,
|
|
/* BARBEL_STEED */ &cKF_ba_r_act_mus_nigoi_a1,
|
|
/* DACE */ &cKF_ba_r_act_mus_ugui_a1,
|
|
/* PALE_CHUB */ &cKF_ba_r_act_mus_oikawa_a1,
|
|
/* BITTERLING */ &cKF_ba_r_act_mus_tanago_a1,
|
|
/* LOACH */ &cKF_ba_r_act_mus_dojyo_a1,
|
|
/* POND_SMELT */ &cKF_ba_r_act_mus_wakasa_a1,
|
|
/* SWEETFISH */ &cKF_ba_r_act_mus_ayu_a1,
|
|
/* CHERRY_SALMON */ &cKF_ba_r_act_mus_yamame_a1,
|
|
/* LARGE_CHAR */ &cKF_ba_r_act_mus_iwana_a1,
|
|
/* RAINBOW_TROUT */ &cKF_ba_r_act_mus_niji_a1,
|
|
/* STRINGFISH */ &cKF_ba_r_act_mus_ito_a1,
|
|
/* SALMON */ &cKF_ba_r_act_mus_sake_a1,
|
|
/* GOLDFISH */ &cKF_ba_r_act_mus_kingyo_a1,
|
|
/* PIRANHA */ &cKF_ba_r_act_mus_pirania_a1,
|
|
/* AROWANA */ &cKF_ba_r_act_mus_aroana_a1,
|
|
/* EEL */ &cKF_ba_r_act_mus_unagi_a2,
|
|
/* FRESHWATER_GOBY */ &cKF_ba_r_act_mus_donko_a1,
|
|
/* ANGELFISH */ &cKF_ba_r_act_mus_angel_a1,
|
|
/* GUPPY */ &cKF_ba_r_act_mus_gupi_a1,
|
|
/* POPEYED_GOLDFISH */ &cKF_ba_r_act_mus_demekin_a1,
|
|
/* COELACANTH */ &cKF_ba_r_act_mus_kaseki_a1,
|
|
/* CRAWFISH */ &cKF_ba_r_act_mus_zari,
|
|
/* FROG */ &cKF_ba_r_act_mus_kaeru_a1,
|
|
/* KILLIFISH */ &cKF_ba_r_act_mus_medaka_a1,
|
|
/* JELLYFISH */ NULL,
|
|
/* SEA_BASS */ &cKF_ba_r_act_mus_suzuki_a1,
|
|
/* RED_SNAPPER */ &cKF_ba_r_act_mus_tai_a1,
|
|
/* BARRED_KNIFEJAW */ &cKF_ba_r_act_mus_isidai_a1,
|
|
/* ARAPAIMA */ &cKF_ba_r_act_mus_pira_a1
|
|
};
|
|
|
|
MUSEUM_FISH_INIT_DATA mfish_init_data[aGYO_TYPE_NUM] = {
|
|
/* CRUCIAN_CARP */ { 0.0100f, 3.8f, 7.5f, 74.0f, 0.400f, 0.450f, 0.98995f, 0.2f, 0.40f, -3.5f, -6.0f, 120, 120, DEG2SHORT_ANGLE(70) },
|
|
/* BROOK_TROUT */ { 0.0100f, 4.6f, 7.0f, 78.0f, 0.400f, 0.600f, 0.98995f, 0.2f, 0.40f, -3.5f, -6.0f, 100, 160, DEG2SHORT_ANGLE(70) },
|
|
/* CARP */ { 0.0100f, 6.0f, 10.6f, 80.0f, 0.350f, 0.300f, 0.98995f, 0.2f, 0.60f, -5.0f, -9.0f, 100, 150, DEG2SHORT_ANGLE(90) },
|
|
/* KOI */ { 0.0100f, 6.0f, 10.7f, 85.0f, 0.350f, 0.300f, 0.98995f, 0.2f, 0.60f, -5.0f, -9.0f, 100, 120, DEG2SHORT_ANGLE(90) },
|
|
/* CATFISH */ { 0.0110f, 6.0f, 13.6f, 63.0f, 0.050f, 0.075f, 0.995f, 0.4f, 0.85f, -2.5f, -10.0f, 600, 900, DEG2SHORT_ANGLE(60) },
|
|
/* SMALL_BASS */ { 0.0110f, 3.0f, 8.0f, 85.0f, 0.700f, 0.500f, 0.97468f, 0.2f, 0.30f, -4.0f, -6.0f, 100, 100, DEG2SHORT_ANGLE(70) },
|
|
/* BASS */ { 0.0110f, 4.7f, 9.8f, 92.0f, 0.700f, 0.500f, 0.97468f, 0.2f, 0.60f, -5.0f, -8.0f, 150, 110, DEG2SHORT_ANGLE(70) },
|
|
/* LARGE_BASS */ { 0.0110f, 5.5f, 12.0f, 90.0f, 0.600f, 0.500f, 0.97468f, 0.2f, 0.80f, -5.5f, -10.0f, 160, 120, DEG2SHORT_ANGLE(70) },
|
|
/* BLUEGILL */ { 0.0100f, 4.3f, 6.1f, 95.0f, 0.700f, 0.500f, 0.97468f, 0.2f, 0.30f, -3.5f, -5.0f, 80, 80, DEG2SHORT_ANGLE(70) },
|
|
/* GIANT_CATFISH */ { 0.0120f, 7.6f, 19.4f, 65.0f, 0.075f, 0.150f, 0.995f, 0.4f, 0.95f, -6.0f, -18.0f, 720, 1000, DEG2SHORT_ANGLE(60) },
|
|
/* GIANT_SNAKEHEAD */ { 0.0120f, 9.6f, 20.8f, 65.0f, 0.050f, 0.100f, 0.98488998f, 0.4f, 0.95f, -13.0f, -19.0f, 240, 480, DEG2SHORT_ANGLE(90) },
|
|
/* BARBEL_STEED */ { 0.0100f, 4.8f, 10.5f, 102.0f, 0.350f, 0.300f, 0.98995f, 0.2f, 0.70f, -3.5f, -9.0f, 150, 120, DEG2SHORT_ANGLE(70) },
|
|
/* DACE */ { 0.0100f, 3.0f, 10.6f, 75.0f, 0.750f, 1.500f, 0.94867998f, 0.2f, 0.60f, -4.5f, -8.0f, 480, 150, DEG2SHORT_ANGLE(45) },
|
|
/* PALE_CHUB */ { 0.0100f, 2.5f, 7.0f, 90.0f, 0.050f, 0.475f, 0.94867998f, 0.4f, 0.30f, -3.5f, -6.0f, 240, 200, DEG2SHORT_ANGLE(50) },
|
|
/* BITTERLING */ { 0.0100f, 3.5f, 6.0f, 76.0f, 0.350f, 0.400f, 0.98995f, 0.4f, 0.40f, -3.0f, -6.0f, 100, 120, DEG2SHORT_ANGLE(45) },
|
|
/* LOACH */ { 0.0100f, 4.0f, 6.4f, 65.0f, 0.100f, 0.150f, 0.89442998f, 0.4f, 0.20f, -2.0f, -6.0f, 240, 240, DEG2SHORT_ANGLE(50) },
|
|
/* POND_SMELT */ { 0.0100f, 2.0f, 6.0f, 96.0f, 0.100f, 0.450f, 0.92194998f, 0.2f, 0.10f, -3.5f, -6.0f, 300, 120, DEG2SHORT_ANGLE(50) },
|
|
/* SWEETFISH */ { 0.0100f, 3.0f, 9.8f, 75.0f, 1.000f, 1.500f, 0.94867998f, 0.2f, 0.50f, -3.5f, -7.5f, 480, 120, DEG2SHORT_ANGLE(45) },
|
|
/* CHERRY_SALMON */ { 0.0100f, 3.5f, 9.3f, 85.0f, 0.750f, 1.000f, 0.94867998f, 0.2f, 0.50f, -3.0f, -8.0f, 540, 120, DEG2SHORT_ANGLE(45) },
|
|
/* LARGE_CHAR */ { 0.0100f, 2.5f, 10.6f, 80.0f, 0.750f, 1.000f, 0.94867998f, 0.2f, 0.70f, -3.0f, -9.0f, 600, 140, DEG2SHORT_ANGLE(70) },
|
|
/* RAINBOW_TROUT */ { 0.0100f, 2.5f, 8.8f, 80.0f, 0.500f, 1.000f, 0.94867998f, 0.2f, 0.50f, -4.0f, -7.0f, 660, 160, DEG2SHORT_ANGLE(45) },
|
|
/* STRINGFISH */ { 0.0120f, 6.1f, 19.8f, 75.0f, 0.050f, 0.100f, 0.98488998f, 0.4f, 0.95f, -14.0f, -19.0f, 360, 720, DEG2SHORT_ANGLE(90) },
|
|
/* SALMON */ { 0.0140f, 6.2f, 15.0f, 80.0f, 0.300f, 1.000f, 0.995f, 0.1f, 0.70f, -6.0f, -10.0f, 120, 220, DEG2SHORT_ANGLE(40) },
|
|
/* GOLDFISH */ { 0.0080f, 2.2f, 4.9f, 90.0f, 0.000f, 0.250f, 0.89442998f, 0.2f, 0.10f, -1.5f, -3.0f, 120, 240, DEG2SHORT_ANGLE(50) },
|
|
/* PIRANHA */ { 0.0120f, 4.2f, 7.0f, 75.0f, 0.750f, 1.000f, 0.94867998f, 0.2f, 0.40f, -3.5f, -6.0f, 240, 240, DEG2SHORT_ANGLE(90) },
|
|
/* AROWANA */ { 0.0130f, 5.0f, 13.4f, 70.0f, 0.500f, 0.750f, 0.98995f, 0.2f, 0.60f, -4.5f, -12.0f, 240, 300, DEG2SHORT_ANGLE(60) },
|
|
/* EEL */ { 0.0095f, 3.4f, 15.0f, 55.0f, 0.200f, 0.250f, 0.98995f, 0.6f, 0.70f, -13.5f, -4.0f, 60, 1120, DEG2SHORT_ANGLE(70) },
|
|
/* FRESHWATER_GOBY */ { 0.0120f, 3.3f, 8.0f, 75.0f, 0.300f, 0.600f, 0.97468f, 0.2f, 0.20f, -2.0f, -7.0f, 240, 240, DEG2SHORT_ANGLE(70) },
|
|
/* ANGELFISH */ { 0.0100f, 5.1f, 6.0f, 85.0f, 0.200f, 0.200f, 0.94867998f, 0.5f, 0.20f, -3.0f, -4.0f, 120, 360, DEG2SHORT_ANGLE(50) },
|
|
/* GUPPY */ { 0.0080f, 2.7f, 4.9f, 96.0f, 0.200f, 0.400f, 0.89442998f, 0.5f, 0.10f, -3.0f, -3.0f, 120, 360, DEG2SHORT_ANGLE(30) },
|
|
/* POPEYED_GOLDFISH */ { 0.0080f, 2.5f, 4.9f, 102.0f, 0.000f, 0.250f, 0.89442998f, 0.2f, 0.10f, -2.0f, -3.0f, 120, 240, DEG2SHORT_ANGLE(50) },
|
|
/* COELACANTH */ { 0.0160f, 7.1f, 22.8f, 65.0f, 0.100f, 0.300f, 0.98995f, 0.4f, 0.85f, -2.5f, -20.5f, 300, 420, DEG2SHORT_ANGLE(20) },
|
|
/* CRAWFISH */ { 0.0165f, 5.8f, 10.4f, 70.0f, -0.050f, 0.150f, 0.94867998f, 0.2f, 0.40f, 5.0f, -14.0f, 120, 180, DEG2SHORT_ANGLE(70) },
|
|
/* FROG */ { 0.0100f, 1.0f, 1.0f, 70.0f, 0.500f, 0.500f, 0.94867998f, 0.2f, 0.40f, -1.0f, -9.0f, 120, 180, DEG2SHORT_ANGLE(70) },
|
|
/* KILLIFISH */ { 0.0080f, 1.5f, 3.9f, 102.0f, 0.150f, 0.400f, 0.89442998f, 0.1f, 0.40f, -1.0f, -3.0f, 120, 360, DEG2SHORT_ANGLE(30) },
|
|
/* JELLYFISH */ { 0.0100f, 4.0f, 5.5f, 70.0f, 0.200f, 0.150f, 0.94867998f, 0.1f, 0.40f, -1.0f, -3.0f, 60, 120, DEG2SHORT_ANGLE(70) },
|
|
/* SEA_BASS */ { 0.0100f, 4.0f, 9.5f, 80.0f, 0.300f, 0.800f, 0.995f, 0.1f, 0.75f, -3.5f, -5.0f, 160, 200, DEG2SHORT_ANGLE(25) },
|
|
/* RED_SNAPPER */ { 0.0100f, 6.0f, 11.4f, 90.0f, 0.250f, 0.350f, 0.995f, 0.2f, 0.45f, -6.0f, -6.5f, 120, 240, DEG2SHORT_ANGLE(30) },
|
|
/* BARRED_KNIFEJAW */ { 0.0100f, 5.0f, 10.9f, 95.0f, 0.250f, 0.450f, 0.995f, 0.2f, 0.40f, -5.0f, -6.0f, 120, 240, DEG2SHORT_ANGLE(30) },
|
|
/* ARAPAIMA */ { 0.0120f, 9.3f, 31.5f, 75.0f, 0.050f, 0.100f, 0.97468f, 0.2f, 0.90f, -14.0f, -31.0f, 240, 480, DEG2SHORT_ANGLE(90) }
|
|
};
|
|
|
|
s16 mfish_group_tbl[aGYO_TYPE_NUM] = {
|
|
/* CRUCIAN_CARP */ mfish_TANK_0,
|
|
/* BROOK_TROUT */ mfish_TANK_0,
|
|
/* CARP */ mfish_TANK_0,
|
|
/* KOI */ mfish_TANK_0,
|
|
/* CATFISH */ mfish_TANK_1,
|
|
/* SMALL_BASS */ mfish_TANK_1,
|
|
/* BASS */ mfish_TANK_1,
|
|
/* LARGE_BASS */ mfish_TANK_1,
|
|
/* BLUEGILL */ mfish_TANK_1,
|
|
/* GIANT_CATFISH */ mfish_TANK_1,
|
|
/* GIANT_SNAKEHEAD */ mfish_TANK_3,
|
|
/* BARBEL_STEED */ mfish_TANK_0,
|
|
/* DACE */ mfish_TANK_2,
|
|
/* PALE_CHUB */ mfish_TANK_2,
|
|
/* BITTERLING */ mfish_TANK_0,
|
|
/* LOACH */ mfish_TANK_1,
|
|
/* POND_SMELT */ mfish_TANK_2,
|
|
/* SWEETFISH */ mfish_TANK_2,
|
|
/* CHERRY_SALMON */ mfish_TANK_2,
|
|
/* LARGE_CHAR */ mfish_TANK_2,
|
|
/* RAINBOW_TROUT */ mfish_TANK_2,
|
|
/* STRINGFISH */ mfish_TANK_2,
|
|
/* SALMON */ mfish_TANK_4,
|
|
/* GOLDFISH */ mfish_TANK_0,
|
|
/* PIRANHA */ mfish_TANK_3,
|
|
/* AROWANA */ mfish_TANK_3,
|
|
/* EEL */ mfish_TANK_0,
|
|
/* FRESHWATER_GOBY */ mfish_TANK_1,
|
|
/* ANGELFISH */ mfish_TANK_3,
|
|
/* GUPPY */ mfish_TANK_3,
|
|
/* POPEYED_GOLDFISH */ mfish_TANK_0,
|
|
/* COELACANTH */ mfish_TANK_4,
|
|
/* CRAWFISH */ mfish_TANK_2,
|
|
/* FROG */ mfish_TANK_1,
|
|
/* KILLIFISH */ mfish_TANK_0,
|
|
/* JELLYFISH */ mfish_TANK_4,
|
|
/* SEA_BASS */ mfish_TANK_4,
|
|
/* RED_SNAPPER */ mfish_TANK_4,
|
|
/* BARRED_KNIFEJAW */ mfish_TANK_4,
|
|
/* ARAPAIMA */ mfish_TANK_3,
|
|
};
|
|
|
|
PRIV_FISH_CONSTRUCTOR mfish_ct[aGYO_TYPE_NUM] = {
|
|
/* CRUCIAN_CARP */ mfish_afish_ct,
|
|
/* BROOK_TROUT */ mfish_afish_ct,
|
|
/* CARP */ mfish_koi_ct,
|
|
/* KOI */ mfish_koi_ct,
|
|
/* CATFISH */ mfish_namazu_ct,
|
|
/* SMALL_BASS */ mfish_bass_ct,
|
|
/* BASS */ mfish_bass_ct,
|
|
/* LARGE_BASS */ mfish_bass_ct,
|
|
/* BLUEGILL */ mfish_bass_ct,
|
|
/* GIANT_CATFISH */ mfish_namazu_ct,
|
|
/* GIANT_SNAKEHEAD */ mfish_big_fish_ct,
|
|
/* BARBEL_STEED */ mfish_koi_ct,
|
|
/* DACE */ mfish_ani_base_ct,
|
|
/* PALE_CHUB */ mfish_small_fish_ct,
|
|
/* BITTERLING */ mfish_afish_ct,
|
|
/* LOACH */ mfish_dojou_ct,
|
|
/* POND_SMELT */ mfish_small_fish_ct,
|
|
/* SWEETFISH */ mfish_ani_base_ct,
|
|
/* CHERRY_SALMON */ mfish_ani_base_ct,
|
|
/* LARGE_CHAR */ mfish_ani_base_ct,
|
|
/* RAINBOW_TROUT */ mfish_ani_base_ct,
|
|
/* STRINGFISH */ mfish_ito_ct,
|
|
/* SALMON */ mfish_seafish_ct,
|
|
/* GOLDFISH */ mfish_kingyo_ct,
|
|
/* PIRANHA */ mfish_ani_base_ct,
|
|
/* AROWANA */ mfish_aroana_ct,
|
|
/* EEL */ mfish_unagi_ct,
|
|
/* FRESHWATER_GOBY */ mfish_donko_ct,
|
|
/* ANGELFISH */ mfish_small_fish_ct,
|
|
/* GUPPY */ mfish_gupi_ct,
|
|
/* POPEYED_GOLDFISH */ mfish_kingyo_ct,
|
|
/* COELACANTH */ mfish_kaseki_ct,
|
|
/* CRAWFISH */ mfish_zarigani_ct,
|
|
/* FROG */ mfish_kaeru_ct,
|
|
/* KILLIFISH */ mfish_medaka_ct,
|
|
/* JELLYFISH */ mfish_kurage_ct,
|
|
/* SEA_BASS */ mfish_seafish_ct,
|
|
/* RED_SNAPPER */ mfish_tai_ct,
|
|
/* BARRED_KNIFEJAW */ mfish_tai_ct,
|
|
/* ARAPAIMA */ mfish_big_fish_ct
|
|
};
|
|
|
|
PRIV_FISH_MOVE mfish_mv[aGYO_TYPE_NUM] = {
|
|
/* CRUCIAN_CARP */ mfish_afish_mv,
|
|
/* BROOK_TROUT */ mfish_afish_mv,
|
|
/* CARP */ mfish_koi_mv,
|
|
/* KOI */ mfish_koi_mv,
|
|
/* CATFISH */ mfish_namazu_mv,
|
|
/* SMALL_BASS */ mfish_bass_mv,
|
|
/* BASS */ mfish_bass_mv,
|
|
/* LARGE_BASS */ mfish_bass_mv,
|
|
/* BLUEGILL */ mfish_bass_mv,
|
|
/* GIANT_CATFISH */ mfish_namazu_mv,
|
|
/* GIANT_SNAKEHEAD */ mfish_big_fish_mv,
|
|
/* BARBEL_STEED */ mfish_koi_mv,
|
|
/* DACE */ mfish_ani_base_mv,
|
|
/* PALE_CHUB */ mfish_small_fish_mv,
|
|
/* BITTERLING */ mfish_afish_mv,
|
|
/* LOACH */ mfish_dojou_mv,
|
|
/* POND_SMELT */ mfish_small_fish_mv,
|
|
/* SWEETFISH */ mfish_ani_base_mv,
|
|
/* CHERRY_SALMON */ mfish_ani_base_mv,
|
|
/* LARGE_CHAR */ mfish_ani_base_mv,
|
|
/* RAINBOW_TROUT */ mfish_ani_base_mv,
|
|
/* STRINGFISH */ mfish_ito_mv,
|
|
/* SALMON */ mfish_seafish_mv,
|
|
/* GOLDFISH */ mfish_kingyo_mv,
|
|
/* PIRANHA */ mfish_ani_base_mv,
|
|
/* AROWANA */ mfish_aroana_mv,
|
|
/* EEL */ mfish_unagi_mv,
|
|
/* FRESHWATER_GOBY */ mfish_donko_mv,
|
|
/* ANGELFISH */ mfish_small_fish_mv,
|
|
/* GUPPY */ mfish_gupi_mv,
|
|
/* POPEYED_GOLDFISH */ mfish_kingyo_mv,
|
|
/* COELACANTH */ mfish_kaseki_mv,
|
|
/* CRAWFISH */ mfish_zarigani_mv,
|
|
/* FROG */ mfish_kaeru_mv,
|
|
/* KILLIFISH */ mfish_medaka_mv,
|
|
/* JELLYFISH */ mfish_kurage_mv,
|
|
/* SEA_BASS */ mfish_seafish_mv,
|
|
/* RED_SNAPPER */ mfish_tai_mv,
|
|
/* BARRED_KNIFEJAW */ mfish_tai_mv,
|
|
/* ARAPAIMA */ mfish_big_fish_mv
|
|
};
|
|
|
|
|
|
PRIV_FISH_DRAW mfish_dw[aGYO_TYPE_NUM] = {
|
|
/* CRUCIAN_CARP */ mfish_afish_dw,
|
|
/* BROOK_TROUT */ mfish_afish_dw,
|
|
/* CARP */ mfish_koi_dw,
|
|
/* KOI */ mfish_koi_dw,
|
|
/* CATFISH */ mfish_namazu_dw,
|
|
/* SMALL_BASS */ mfish_bass_dw,
|
|
/* BASS */ mfish_bass_dw,
|
|
/* LARGE_BASS */ mfish_bass_dw,
|
|
/* BLUEGILL */ mfish_bass_dw,
|
|
/* GIANT_CATFISH */ mfish_namazu_dw,
|
|
/* GIANT_SNAKEHEAD */ mfish_big_fish_dw,
|
|
/* BARBEL_STEED */ mfish_koi_dw,
|
|
/* DACE */ mfish_ani_base_dw,
|
|
/* PALE_CHUB */ mfish_small_fish_dw,
|
|
/* BITTERLING */ mfish_afish_dw,
|
|
/* LOACH */ mfish_dojou_dw,
|
|
/* POND_SMELT */ mfish_small_fish_dw,
|
|
/* SWEETFISH */ mfish_ani_base_dw,
|
|
/* CHERRY_SALMON */ mfish_ani_base_dw,
|
|
/* LARGE_CHAR */ mfish_ani_base_dw,
|
|
/* RAINBOW_TROUT */ mfish_ani_base_dw,
|
|
/* STRINGFISH */ mfish_ito_dw,
|
|
/* SALMON */ mfish_seafish_dw,
|
|
/* GOLDFISH */ mfish_kingyo_dw,
|
|
/* PIRANHA */ mfish_ani_base_dw,
|
|
/* AROWANA */ mfish_aroana_dw,
|
|
/* EEL */ mfish_unagi_dw,
|
|
/* FRESHWATER_GOBY */ mfish_donko_dw,
|
|
/* ANGELFISH */ mfish_small_fish_dw,
|
|
/* GUPPY */ mfish_gupi_dw,
|
|
/* POPEYED_GOLDFISH */ mfish_kingyo_dw,
|
|
/* COELACANTH */ mfish_kaseki_dw,
|
|
/* CRAWFISH */ mfish_zarigani_dw,
|
|
/* FROG */ mfish_kaeru_dw,
|
|
/* KILLIFISH */ mfish_medaka_dw,
|
|
/* JELLYFISH */ mfish_kurage_dw,
|
|
/* SEA_BASS */ mfish_ani_base_dw,
|
|
/* RED_SNAPPER */ mfish_tai_dw,
|
|
/* BARRED_KNIFEJAW */ mfish_tai_dw,
|
|
/* ARAPAIMA */ mfish_big_fish_dw
|
|
};
|
|
|
|
#include "../src/actor/ac_museum_fish_base.c_inc"
|
|
|
|
// clang-format on
|
|
|
|
void Museum_Fish_Prv_data_init(MUSEUM_FISH_PRIVATE_DATA* actor, GAME* game, int fishNum, int r6) {
|
|
actor->fish_idx = fishNum;
|
|
actor->init_data = mfish_init_data[fishNum];
|
|
actor->tank = mfish_group_tbl[fishNum];
|
|
|
|
if (actor->tank >= 0) {
|
|
actor->position = suisou_pos[actor->tank];
|
|
} else {
|
|
actor->position = ZeroVec;
|
|
}
|
|
|
|
actor->position.y = mfish_init_data[fishNum]._0C + RANDOM2_F(10);
|
|
if (r6 == 1) {
|
|
actor->position.x += RANDOM2_F(90.f);
|
|
actor->position.z += RANDOM2_F(90.f);
|
|
}
|
|
actor->currentProcess = &mfish_normal_process;
|
|
mfish_ct[fishNum](actor, game);
|
|
}
|
|
|
|
// clang-format off
|
|
cKF_Skeleton_R_c* kusa_model[14] = {
|
|
&cKF_bs_r_obj_museum5_kusa1,
|
|
&cKF_bs_r_obj_museum5_kusa1,
|
|
&cKF_bs_r_obj_museum5_kusa1,
|
|
&cKF_bs_r_obj_museum5_kusa1,
|
|
&cKF_bs_r_obj_museum5_kusa1,
|
|
&cKF_bs_r_obj_museum5_kusa2,
|
|
&cKF_bs_r_obj_museum5_kusa2,
|
|
&cKF_bs_r_obj_museum5_kusa2,
|
|
&cKF_bs_r_obj_museum5_kusa2,
|
|
&cKF_bs_r_obj_museum5_kusa2,
|
|
&cKF_bs_r_obj_museum5_kusa3,
|
|
&cKF_bs_r_obj_museum5_kusa3,
|
|
&cKF_bs_r_obj_museum5_kusa3,
|
|
&cKF_bs_r_obj_museum5_kusa3
|
|
};
|
|
cKF_Animation_R_c* kusa_anime[14]= {
|
|
&cKF_ba_r_obj_museum5_kusa1,
|
|
&cKF_ba_r_obj_museum5_kusa1,
|
|
&cKF_ba_r_obj_museum5_kusa1,
|
|
&cKF_ba_r_obj_museum5_kusa1,
|
|
&cKF_ba_r_obj_museum5_kusa1,
|
|
&cKF_ba_r_obj_museum5_kusa2,
|
|
&cKF_ba_r_obj_museum5_kusa2,
|
|
&cKF_ba_r_obj_museum5_kusa2,
|
|
&cKF_ba_r_obj_museum5_kusa2,
|
|
&cKF_ba_r_obj_museum5_kusa2,
|
|
&cKF_ba_r_obj_museum5_kusa3,
|
|
&cKF_ba_r_obj_museum5_kusa3,
|
|
&cKF_ba_r_obj_museum5_kusa3,
|
|
&cKF_ba_r_obj_museum5_kusa3
|
|
};
|
|
|
|
float kusa_start_frame[14] = {
|
|
25.0f, 0.0f, 25.0f, 0.0f, 50.0f, 0.0f, 20.0f, 60.0f, 80.0f, 0.0f, 0.0f, 25.0f, 0.0f, 75.0f
|
|
};
|
|
// clang-format on
|
|
|
|
void Museum_Fish_Actor_ct(ACTOR* actorx, GAME* gamex) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
int i;
|
|
MUSEUM_FISH_PRIVATE_DATA* prv;
|
|
MF_Control_Actor = actor;
|
|
actor->player_area_update_timer = 0x1e;
|
|
|
|
mfish_point_light_ct(actorx, gamex);
|
|
|
|
for (i = 0; i < 14; i++) {
|
|
actor->prvKusa[i]._54C = kusa_model[i];
|
|
cKF_SkeletonInfo_R_ct(&actor->prvKusa[i].keyframe, kusa_model[i], kusa_anime[i], actor->prvKusa[i].work,
|
|
actor->prvKusa[i].morph);
|
|
cKF_SkeletonInfo_R_init_standard_repeat_speedsetandmorph(&actor->prvKusa[i].keyframe, kusa_anime[i], NULL,
|
|
kusa_group_tbl[i] == mfish_TANK_2 ? 1.5f : 0.5f, 0.0f);
|
|
actor->prvKusa[i].keyframe.frame_control.current_frame = kusa_start_frame[i];
|
|
actor->prvKusa[i]._538.x = qrand();
|
|
actor->prvKusa[i]._538.z = qrand();
|
|
}
|
|
|
|
if (mMmd_FishInfo(aGYO_TYPE_FROG)) {
|
|
actor->prvFish[aGYO_TYPE_FROG].hasu_p = &actor->_14788;
|
|
} else {
|
|
mfish_hasu_ct(&actor->_14788, gamex);
|
|
}
|
|
|
|
prv = actor->prvFish;
|
|
for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) {
|
|
prv->_62E_flags &= ~1;
|
|
if (mMmd_FishInfo(i)) {
|
|
prv->kf._54C = mfish_model_tbl[i];
|
|
prv->kf._550[0] = mfish_anime_init_tbl[i];
|
|
prv->_62E_flags |= 1;
|
|
Museum_Fish_Prv_data_init(prv, gamex, i, 1);
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < 20; i++) {
|
|
actor->_14d50[i] = RANDOMF_RANGE(40, 120);
|
|
actor->_14d78[i] = RANDOMF_RANGE(2, 5);
|
|
}
|
|
}
|
|
|
|
void Museum_Fish_Actor_dt(ACTOR* actor, GAME* game) {
|
|
mfish_point_light_dt(actor, game);
|
|
}
|
|
|
|
int Museum_Fish_GetMsgNo(MUSEUM_FISH_ACTOR* actor) {
|
|
// MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
|
|
static u8 item_name[mIN_ITEM_NAME_LEN];
|
|
int itemArticle;
|
|
mMsg_Window_c* msg;
|
|
|
|
int fishInfo = actor->fishDisplayMsgInfo[actor->fishDisplayMsgIter].fishInfo;
|
|
mActor_name_t fishName = mNT_FishIdx2FishItemNo(actor->fishDisplayMsgInfo[actor->fishDisplayMsgIter].fishName);
|
|
mIN_copy_name_str(item_name, fishName);
|
|
mMsg_Set_item_str_art(mMsg_Get_base_window_p(), 0, item_name, 0x10, mIN_get_item_article(fishName));
|
|
|
|
if (fishInfo >= 1 && fishInfo <= 4) {
|
|
mMsg_Set_free_str(mMsg_Get_base_window_p(), 0,
|
|
common_data.save.save.private_data[fishInfo - 1].player_ID.player_name, 8);
|
|
}
|
|
|
|
if (actor->fishDisplayMsgIter < actor->numFishDisplayed - 1) {
|
|
if (fishInfo >= 1 && fishInfo <= 4) {
|
|
return 0x2fa2;
|
|
} else {
|
|
return 0x2fa3;
|
|
}
|
|
}
|
|
|
|
if (fishInfo >= 1 && fishInfo <= 4) {
|
|
return 0x2f9f;
|
|
} else {
|
|
return 0x2fa0;
|
|
}
|
|
}
|
|
|
|
BOOL Museum_Fish_Check_Talk_Distance(GAME* gamex, int index) {
|
|
s16 subAngle;
|
|
xyz_t pos;
|
|
ACTOR* playerx;
|
|
|
|
// fish tank locations?
|
|
static xyz_t kanban_pos[5] = { { 260.0f, 40.0f, 300.0f },
|
|
{ 460.0f, 40.0f, 300.0f },
|
|
{ 260.0f, 40.0f, 540.0f },
|
|
{ 460.0f, 40.0f, 540.0f },
|
|
{ 500.0f, 40.0f, 60.0f } };
|
|
|
|
playerx = GET_PLAYER_ACTOR_GAME_ACTOR(gamex);
|
|
subAngle = DEG2SHORT_ANGLE(-180) + playerx->world.angle.y;
|
|
xyz_t_sub(&playerx->world.position, &kanban_pos[index], &pos);
|
|
|
|
if (ABS(pos.x) < 20.0f && ABS(pos.z) < 20.0f && ABS(subAngle) < 0x3000) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void Museum_Fish_Set_MsgFishInfo(MUSEUM_FISH_ACTOR* actor, int param2) {
|
|
// MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
int i;
|
|
// defines how many fish are in each grouping of fish names
|
|
static int group_max_num[5] = { 10, 9, 9, 6, 6 };
|
|
static int group_A_fish_name[10] = { 0, 1, 2, 3, 11, 14, 26, 23, 30, 34 };
|
|
static int group_B_fish_name[9] = { 4, 9, 15, 8, 5, 6, 7, 27, 33 };
|
|
static int group_C_fish_name[9] = { 12, 13, 16, 17, 18, 20, 19, 21, 32 };
|
|
static int group_D_fish_name[6] = { 10, 29, 28, 24, 25, 39 };
|
|
static int group_E_fish_name[6] = { 22, 31, 35, 36, 37, 38 };
|
|
|
|
static int* group_fish_name[5] = { group_A_fish_name, group_B_fish_name, group_C_fish_name, group_D_fish_name,
|
|
group_E_fish_name };
|
|
|
|
actor->numFishDisplayed = 0;
|
|
actor->fishDisplayMsgIter = 0;
|
|
for (i = 0; i < group_max_num[param2]; i++) {
|
|
s16 fishName = group_fish_name[param2][i];
|
|
s16 fishInfo = mMmd_FishInfo(fishName); // is this fish on display?
|
|
if (fishInfo != 0) {
|
|
actor->fishDisplayMsgInfo[actor->numFishDisplayed].fishName = fishName; // add info to list
|
|
actor->fishDisplayMsgInfo[actor->numFishDisplayed].fishInfo = fishInfo;
|
|
actor->numFishDisplayed++; // incrememnt counter of fish on display
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
void Museum_Fish_set_talk_info(ACTOR* actorx) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
|
|
static rgba_t window_color = { 255, 255, 0xcd, 255 };
|
|
int r3;
|
|
if (actor->numFishDisplayed > 0) { // maybe related to if there are fish in the tank
|
|
r3 = Museum_Fish_GetMsgNo(actor);
|
|
actor->fishDisplayMsgIter++; // maybe iterating through the fish donation record, given which fish are donated?
|
|
} else {
|
|
r3 = 0x2fa1;
|
|
}
|
|
|
|
mDemo_Set_msg_num(r3);
|
|
mDemo_Set_talk_window_color(&window_color);
|
|
mDemo_Set_talk_display_name(0);
|
|
mDemo_Set_ListenAble();
|
|
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
|
|
mDemo_Set_use_zoom_sound(TRUE);
|
|
}
|
|
|
|
void Museum_Fish_Talk_process(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
|
// MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
|
|
if (mDemo_Check(mDemo_TYPE_SPEAK, (ACTOR*)actor) != 0) {
|
|
s_xyz rotation = GET_PLAYER_ACTOR_GAME_ACTOR(game)->shape_info.rotation;
|
|
add_calc_short_angle2(&rotation.y, DEG2SHORT_ANGLE(-180), 0.3f, DEG2SHORT_ANGLE(22.5f), 0);
|
|
GET_PLAYER_ACTOR_NOW()->Set_force_position_angle_proc(gamePT, NULL, &rotation, 32);
|
|
if (mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p()) != 0) {
|
|
int choseNum = mChoice_Get_ChoseNum(mChoice_Get_base_window_p());
|
|
if (choseNum != -1) {
|
|
if (choseNum == 0) {
|
|
mMsg_Window_c* windowC;
|
|
int msgNum = Museum_Fish_GetMsgNo(actor);
|
|
actor->fishDisplayMsgIter += 1;
|
|
mMsg_Set_continue_msg_num(mMsg_Get_base_window_p(), msgNum);
|
|
mMsg_Unset_LockContinue(mMsg_Get_base_window_p());
|
|
} else {
|
|
mMsg_Set_CancelNormalContinue(mMsg_Get_base_window_p());
|
|
mMsg_Unset_LockContinue(mMsg_Get_base_window_p());
|
|
}
|
|
}
|
|
}
|
|
} else if (chkTrigger(BUTTON_A) != 0 && mDemo_Get_talk_actor() == 0) {
|
|
int i;
|
|
for (i = 0; i < 5; i++) {
|
|
if (Museum_Fish_Check_Talk_Distance(game, i)) {
|
|
Museum_Fish_Set_MsgFishInfo(actor, i);
|
|
mDemo_Request(mDemo_TYPE_SPEAK, (ACTOR*)actor, &Museum_Fish_set_talk_info);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void Museum_Fish_Actor_move(ACTOR* actorx, GAME* game) {
|
|
int i;
|
|
int j;
|
|
MUSEUM_FISH_PRIVATE_DATA* prv;
|
|
s16 oldplayer_area;
|
|
f32 v;
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
MUSEUM_FISH_PRIVATE_DATA* prv2;
|
|
mfish_point_light_mv((MUSEUM_FISH_ACTOR*)actorx, game);
|
|
oldplayer_area = actor->player_area;
|
|
mfish_get_player_area((MUSEUM_FISH_ACTOR*)actorx, game);
|
|
|
|
if (actor->player_area != oldplayer_area) {
|
|
xyz_t p;
|
|
prv = actor->prvFish;
|
|
p = GET_PLAYER_ACTOR_GAME_ACTOR(game)->world.position;
|
|
|
|
if (actor->player_area == mfish_TANK_3) {
|
|
actor->prvFish[aGYO_TYPE_GOLDFISH].activityFrameCount = 0;
|
|
actor->prvFish[aGYO_TYPE_POPEYED_GOLDFISH].activityFrameCount = 0;
|
|
actor->prvFish[aGYO_TYPE_PIRANHA].activityFrameCount = 0;
|
|
} else if (actor->player_area == mfish_TANK_0) {
|
|
actor->prvFish[aGYO_TYPE_CARP].activityFrameCount = 20;
|
|
actor->prvFish[aGYO_TYPE_KOI].activityFrameCount = 20;
|
|
}
|
|
|
|
for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) {
|
|
f32 v = search_position_distanceXZ(&p, &prv->position);
|
|
if (actor->player_area == prv->tank && v < 60.0f) {
|
|
prv->activityFrameCount = RANDOM_F(60);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (j = 0; j < 14; j++) {
|
|
cKF_SkeletonInfo_R_play(&actor->prvKusa[j].keyframe);
|
|
if (kusa_group_tbl[j] == mfish_TANK_2) {
|
|
add_calc2(&actor->prvKusa[j]._540.x, -4.0f, 0.5f, 0.5f);
|
|
add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(3.5f), CALC_EASE2(0.1f), 22, 4);
|
|
} else {
|
|
actor->prvKusa[j]._540.x *= 0.98f;
|
|
add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4);
|
|
}
|
|
actor->prvKusa[j]._540.z *= 0.98f;
|
|
|
|
actor->prvKusa[j]._538.x += actor->prvKusa[j]._538.y;
|
|
actor->prvKusa[j]._538.z += actor->prvKusa[j]._538.y >> 1;
|
|
|
|
add_calc_short_angle2(&actor->prvKusa[j]._538.y, DEG2SHORT_ANGLE(0), CALC_EASE2(0.1f), 22, 4);
|
|
}
|
|
|
|
Museum_Fish_Kusa_Check((MUSEUM_FISH_ACTOR*)actorx, game);
|
|
Museum_Fish_Object_Check((MUSEUM_FISH_ACTOR*)actorx, game);
|
|
|
|
for (i = 0; i < 20; i++) {
|
|
actor->_14d50[i]--;
|
|
if (actor->_14d50[i] < 0) {
|
|
eEC_CLIP->effect_make_proc(eEC_EFFECT_SUISOU_AWA, suisou_awa_pos[i], 2, 0, game, RSV_NO,
|
|
suisou_awa_group[i], 0);
|
|
if (actor->_14d78[i] > 0) {
|
|
actor->_14d78[i]--;
|
|
actor->_14d50[i] = RANDOMF_RANGE(2, 10);
|
|
} else {
|
|
actor->_14d50[i] = RANDOMF_RANGE(80, 240);
|
|
actor->_14d78[i] = RANDOMF_RANGE(2, 5);
|
|
}
|
|
}
|
|
}
|
|
|
|
Museum_Fish_Talk_process((MUSEUM_FISH_ACTOR*)actorx, game);
|
|
prv2 = actor->prvFish;
|
|
for (i = 0; i < aGYO_TYPE_NUM; i++, prv2++) {
|
|
if (prv2->_62E_flags & 1) {
|
|
mfish_mv[i](prv2, game);
|
|
}
|
|
}
|
|
|
|
if ((actor->prvFish[aGYO_TYPE_FROG]._62E_flags & 1) == 0) {
|
|
mfish_hasu_mv(&actor->_14788, game);
|
|
}
|
|
|
|
for (i = 0; i < 5; i++) {
|
|
if (i == 2) {
|
|
actor->_14daa[i] += (s16)DEG2SHORT_ANGLE2((float)GETREG(TAKREG, 31) * 0.1f + 0.5f + RANDOM_F(1));
|
|
} else {
|
|
actor->_14daa[i] += 8;
|
|
}
|
|
}
|
|
}
|
|
|
|
extern Gfx obj_suisou1_model[];
|
|
extern Gfx obj_suisou1_modelT[];
|
|
|
|
extern Gfx obj_museum5_model[];
|
|
extern Gfx obj_museum5_modelT[];
|
|
|
|
void Museum_Fish_Suisou_draw(ACTOR* actorx, GAME* game, int r5) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
GRAPH* graph = play->game.graph;
|
|
if (r5 < 4) {
|
|
xyz_t* p = &suisou_pos[r5];
|
|
if (mfish_cull_check(game, &suisou_pos[r5], 350.0f, 20.0f, 650.0f)) {
|
|
Matrix_translate(suisou_pos[r5].x, 0, suisou_pos[r5].z, 0);
|
|
Matrix_scale(0.01f, 0.01f, 0.01f, 1);
|
|
|
|
OPEN_DISP(graph);
|
|
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph),
|
|
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
|
|
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph),
|
|
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
|
|
Setpos_HiliteReflect_xlu_init(&suisou_pos[r5], play);
|
|
|
|
gSPDisplayList(NEXT_POLY_OPA_DISP, obj_suisou1_model);
|
|
gSPDisplayList(NEXT_POLY_XLU_DISP, obj_suisou1_modelT);
|
|
|
|
CLOSE_DISP(graph);
|
|
|
|
if ((actor->prvFish[aGYO_TYPE_FROG]._62E_flags & 1) == 0) {
|
|
mfish_hasu_dw(&actor->_14788, game);
|
|
}
|
|
}
|
|
} else if (mfish_cull_check(game, &suisou_pos[4], 215.0f, 25.0f, 0.0f)) {
|
|
Matrix_scale(0.0625f, 0.0625f, 0.0625f, 0);
|
|
OPEN_DISP(graph);
|
|
|
|
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(play->game.graph),
|
|
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
|
|
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph),
|
|
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
|
|
Setpos_HiliteReflect_xlu_init(&suisou_pos[r5], play);
|
|
|
|
gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_DOLPHIN);
|
|
gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_DOLPHIN);
|
|
gSPDisplayList(NEXT_POLY_OPA_DISP, obj_museum5_model);
|
|
gSPDisplayList(NEXT_POLY_XLU_DISP, obj_museum5_modelT);
|
|
gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_N64);
|
|
gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_N64);
|
|
CLOSE_DISP(graph);
|
|
}
|
|
}
|
|
|
|
BOOL kusa_before_disp(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) {
|
|
MUSEUM_FISH_KUSA_DATA* actor = (MUSEUM_FISH_KUSA_DATA*)arg;
|
|
if (joint_idx > 0) {
|
|
f32 v = (actor->_54C == &cKF_bs_r_obj_museum5_kusa3) ? 35.0f : 20.f;
|
|
|
|
joint_rot->y += (s16)(sin_s(actor->_538.x + (joint_idx * DEG2SHORT_ANGLE(90))) * 1274.0f);
|
|
joint_rot->x += (s16)(sin_s(actor->_538.z + (joint_idx * DEG2SHORT_ANGLE(90))) * 4369.0f);
|
|
|
|
joint_pos->y -= actor->_540.x * (v * joint_idx);
|
|
joint_pos->z += actor->_540.z * (v * joint_idx);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void Museum_Fish_Kusa_Draw(ACTOR* actorx, GAME* game, int r5) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
if (mfish_cull_check(game, &kusa_pos[r5], 0.0f, 0.0f, 120.0f)) {
|
|
Mtx* mtx;
|
|
if (play->game.frame_counter % 2 != 0) {
|
|
mtx = actor->prvKusa[r5].mtx[0];
|
|
} else {
|
|
mtx = actor->prvKusa[r5].mtx[1];
|
|
}
|
|
OPEN_DISP(game->graph);
|
|
Matrix_translate(kusa_pos[r5].x, 0, kusa_pos[r5].z, 0);
|
|
Matrix_scale(0.01f, 0.01f, 0.01f, 1);
|
|
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
CLOSE_DISP(game->graph);
|
|
cKF_Si3_draw_R_SV(game, &actor->prvKusa[r5].keyframe, mtx, kusa_before_disp, NULL, &actor->prvKusa[r5]);
|
|
}
|
|
}
|
|
|
|
extern EVW_ANIME_DATA obj_suisou1_evw_anime, obj_museum5_evw_anime;
|
|
extern Gfx act_mus_fish_set_mode;
|
|
|
|
void Museum_Fish_Actor_draw(ACTOR* actorx, GAME* game) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
int i;
|
|
|
|
_texture_z_light_fog_prim(game->graph);
|
|
_texture_z_light_fog_prim_xlu(game->graph);
|
|
|
|
if (!GETREG(TAKREG, 90)) {
|
|
for (i = 0; i < 14; i++) {
|
|
Museum_Fish_Kusa_Draw(actorx, game, i);
|
|
}
|
|
}
|
|
|
|
if (!GETREG(TAKREG, 92)) {
|
|
MUSEUM_FISH_PRIVATE_DATA* prv;
|
|
GRAPH* graph;
|
|
graph = play->game.graph;
|
|
OPEN_DISP(graph);
|
|
gSPDisplayList(NEXT_POLY_OPA_DISP, &act_mus_fish_set_mode);
|
|
CLOSE_DISP(graph);
|
|
|
|
prv = actor->prvFish;
|
|
for (i = 0; i < aGYO_TYPE_NUM; i++, prv++) {
|
|
if (prv->_62E_flags & 1 && prv->fish_idx != aGYO_TYPE_JELLYFISH && prv->fish_idx != aGYO_TYPE_FROG &&
|
|
mfish_cull_check(game, &prv->objchk_pos, prv->init_data._08 + 50.0f, prv->init_data._08 + 10.0f,
|
|
prv->init_data._08 + 10.0f)) {
|
|
mfish_dw[i](prv, game);
|
|
}
|
|
}
|
|
|
|
if (actor->prvFish[aGYO_TYPE_JELLYFISH]._62E_flags & 1 &&
|
|
mfish_cull_check(game, &actor->prvFish[aGYO_TYPE_JELLYFISH].position,
|
|
actor->prvFish[aGYO_TYPE_JELLYFISH].init_data._08 + 10.0f,
|
|
actor->prvFish[aGYO_TYPE_JELLYFISH].init_data.ofs_y,
|
|
actor->prvFish[aGYO_TYPE_JELLYFISH].init_data.ofs_y)) {
|
|
mfish_dw[0x23](&actor->prvFish[aGYO_TYPE_JELLYFISH], game);
|
|
}
|
|
|
|
if (!GETREG(TAKREG, 82)) {
|
|
mfish_normal_light_set(actorx, game);
|
|
}
|
|
|
|
if (actor->prvFish[aGYO_TYPE_FROG]._62E_flags & 1) {
|
|
mfish_dw[aGYO_TYPE_FROG](&actor->prvFish[aGYO_TYPE_FROG], game);
|
|
}
|
|
|
|
if (GETREG(TAKREG, 82) == 1) {
|
|
mfish_normal_light_set(actorx, game);
|
|
}
|
|
}
|
|
|
|
if (!GETREG(TAKREG, 91)) {
|
|
if (!GETREG(TAKREG, 88)) {
|
|
Evw_Anime_Set(play, &obj_museum5_evw_anime);
|
|
Museum_Fish_Suisou_draw(actorx, game, 0x5);
|
|
}
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
Evw_Anime_Set(play, &obj_suisou1_evw_anime);
|
|
Museum_Fish_Suisou_draw(actorx, game, i);
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL mfish_cull_check(GAME* game, xyz_t* worldPos, f32 x, f32 y, f32 _y) {
|
|
xyz_t screenPos;
|
|
Game_play_Projection_Trans((GAME_PLAY*)game, worldPos, &screenPos);
|
|
if ((-x < screenPos.x) && (screenPos.x < x + 320) && (-y < screenPos.y) && (screenPos.y < _y + 240)) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void mfish_point_ligh_pos_get(ACTOR* actorx, GAME* game, int lightIndex) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
f32 extentRight, extentLeft, extentUp, extentDown;
|
|
xyz_t playerPosition, vecToPlayer, lightPos, tankPos;
|
|
|
|
int tankIndex;
|
|
f32 distLightToPlayer;
|
|
PLAYER_ACTOR* player = get_player_actor_withoutCheck(play);
|
|
|
|
playerPosition = player->actor_class.world.position;
|
|
|
|
if (playerPosition.z < 100.0f) {
|
|
tankIndex = 4;
|
|
} else if (playerPosition.z > 100.0f && playerPosition.z < 340.0f) {
|
|
if (lightIndex == 0) {
|
|
tankIndex = 0;
|
|
} else {
|
|
tankIndex = 1;
|
|
}
|
|
} else if (playerPosition.z > 340.0f && playerPosition.z < 580.0f) {
|
|
if (lightIndex == 0) {
|
|
tankIndex = 2;
|
|
} else {
|
|
tankIndex = 3;
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
if (tankIndex < 4) {
|
|
extentRight = 60.0f;
|
|
extentLeft = 60.0f;
|
|
extentUp = 60.0f;
|
|
extentDown = 60.0f;
|
|
tankPos = suisou_pos[tankIndex];
|
|
lightPos = playerPosition;
|
|
} else {
|
|
extentRight = 200.0f;
|
|
extentLeft = 200.0f;
|
|
extentUp = 35.0f;
|
|
extentDown = 20.0f;
|
|
tankPos = suisou_pos[tankIndex];
|
|
lightPos = playerPosition;
|
|
if (lightIndex == 0) {
|
|
lightPos.x -= extentDown;
|
|
} else {
|
|
lightPos.x += extentDown;
|
|
}
|
|
}
|
|
|
|
if (lightPos.x > tankPos.x + extentRight) {
|
|
lightPos.x = tankPos.x + extentRight;
|
|
} else if (lightPos.x < tankPos.x - extentLeft) {
|
|
lightPos.x = tankPos.x - extentLeft;
|
|
}
|
|
|
|
if (lightPos.z > tankPos.z + extentUp) {
|
|
lightPos.z = tankPos.z + extentUp;
|
|
} else if (lightPos.z < tankPos.z - extentDown) {
|
|
lightPos.z = tankPos.z - extentDown;
|
|
}
|
|
|
|
actor->lightPosition[lightIndex] = lightPos;
|
|
|
|
xyz_t_sub(&lightPos, &playerPosition, &vecToPlayer);
|
|
|
|
distLightToPlayer = sqrtf(SQ(vecToPlayer.x) + SQ(vecToPlayer.z));
|
|
|
|
actor->lightPower[lightIndex] = (u8)(((60.0f - CLAMP(distLightToPlayer, 0.0f, 60.0f)) / 60.0f) * 55.0f);
|
|
}
|
|
|
|
void mfish_point_light_ct(ACTOR* _actor, GAME* game) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)_actor;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
// fill in the light positions
|
|
mfish_point_ligh_pos_get(&actor->actor, game, 0);
|
|
mfish_point_ligh_pos_get(&actor->actor, game, 1);
|
|
// make the lights
|
|
actor->lightID1 = mEnv_ReservePointLight(play, &actor->lightPosition[0], 0, 150, 255, (u8)actor->lightPower[0]);
|
|
actor->lightID2 = mEnv_ReservePointLight(play, &actor->lightPosition[1], 0, 150, 255, (u8)actor->lightPower[1]);
|
|
actor->_14dc0 = 0;
|
|
}
|
|
|
|
void mfish_point_light_dt(ACTOR* actorx, GAME* game) {
|
|
MUSEUM_FISH_ACTOR* actor = (MUSEUM_FISH_ACTOR*)actorx;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
|
|
if (actor->lightID1 != -1) {
|
|
mEnv_CancelReservedPointLight(actor->lightID1, (GAME_PLAY*)game);
|
|
}
|
|
|
|
if (actor->lightID2 != -1) {
|
|
mEnv_CancelReservedPointLight(actor->lightID2, (GAME_PLAY*)game);
|
|
}
|
|
}
|
|
|
|
void mfish_point_light_mv(MUSEUM_FISH_ACTOR* actor, GAME* game) {
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
|
|
mfish_point_ligh_pos_get(&actor->actor, game, 0);
|
|
mfish_point_ligh_pos_get(&actor->actor, game, 1);
|
|
|
|
mEnv_OperateReservedPointLight(actor->lightID1, &actor->lightPosition[0], 0, 150, 255, (u8)actor->lightPower[0]);
|
|
mEnv_OperateReservedPointLight(actor->lightID2, &actor->lightPosition[1], 0, 150, 255, (u8)actor->lightPower[1]);
|
|
actor->actor.world.position = actor->lightPosition[0];
|
|
actor->actor.world.position.x = sin_s(actor->_14dc0) * 200.0f;
|
|
actor->actor.world.position.y = sin_s(actor->_14dc0 * 2) * 10.0f;
|
|
actor->actor.world.position.z = cos_s(actor->_14dc0) * 200.0f;
|
|
actor->_14dc0 += DEG2SHORT_ANGLE(1.5f);
|
|
}
|
|
|
|
void mfish_normal_light_set(ACTOR* actor, GAME* game) {
|
|
LightsN* lights;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
|
|
xyz_t lightPos;
|
|
lightPos.x = 320;
|
|
lightPos.y = 0;
|
|
lightPos.z = 240;
|
|
|
|
lights = Global_light_read(&play->global_light, play->game.graph);
|
|
LightsN_list_check(lights, play->global_light.list, &lightPos);
|
|
LightsN_disp(lights, play->game.graph);
|
|
}
|