mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Implement & link ac_kamakura_indoor
This commit is contained in:
+1
-1
@@ -991,7 +991,7 @@ config.libs = [
|
||||
Object(Matching, "actor/ac_intro_demo.c"),
|
||||
Object(Matching, "actor/ac_kago.c"),
|
||||
Object(Matching, "actor/ac_kamakura.c"),
|
||||
Object(NonMatching, "actor/ac_kamakura_indoor.c"),
|
||||
Object(Matching, "actor/ac_kamakura_indoor.c"),
|
||||
Object(Matching, "actor/ac_koinobori.c"),
|
||||
Object(NonMatching, "actor/ac_lighthouse_switch.c"),
|
||||
Object(Matching, "actor/ac_lotus.c"),
|
||||
|
||||
@@ -8,6 +8,37 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define aKI_CANDLE_NUM 2
|
||||
|
||||
typedef struct kamakura_indoor_candle_ring_s {
|
||||
rgba_t color;
|
||||
f32 scale;
|
||||
} aKI_candle_ring_c;
|
||||
|
||||
typedef struct kamakura_indoor_candle_fire_s {
|
||||
u8* tex_p;
|
||||
rgba_t color;
|
||||
} aKI_candle_fire_c;
|
||||
|
||||
typedef struct kamakura_indoor_mochi_s {
|
||||
int move_bg_idx;
|
||||
mCoBG_bg_regist_c bg_regist;
|
||||
xyz_t pos;
|
||||
xyz_t old_pos;
|
||||
s16 angle_y;
|
||||
f32 scale_rate;
|
||||
} aKI_mochi_c;
|
||||
|
||||
typedef struct kamakura_indoor_actor_s KAMAKURA_INDOOR_ACTOR;
|
||||
|
||||
struct kamakura_indoor_actor_s {
|
||||
ACTOR actor_class;
|
||||
aKI_candle_ring_c candle_ring[aKI_CANDLE_NUM];
|
||||
aKI_candle_fire_c candle_fire[aKI_CANDLE_NUM];
|
||||
aKI_mochi_c mochi;
|
||||
u8 _1E0[0x200 - 0x1E0];
|
||||
};
|
||||
|
||||
extern ACTOR_PROFILE Kamakura_Indoor_Profile;
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -15,4 +46,3 @@ extern ACTOR_PROFILE Kamakura_Indoor_Profile;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -74,6 +74,8 @@ typedef enum audio_sound_effects {
|
||||
NA_SE_51 = 0x51,
|
||||
NA_SE_52 = 0x52,
|
||||
|
||||
NA_SE_54 = 0x54,
|
||||
|
||||
NA_SE_ITEM_HORIDASHI = 0x57,
|
||||
NA_SE_CLEAN_UP_FTR = 0x58,
|
||||
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ typedef enum bank_id {
|
||||
ACTOR_OBJ_BANK_19,
|
||||
ACTOR_OBJ_BANK_20,
|
||||
ACTOR_OBJ_BANK_21,
|
||||
ACTOR_OBJ_BANK_22,
|
||||
ACTOR_OBJ_BANK_KAMAKURA_INDOOR,
|
||||
ACTOR_OBJ_BANK_23,
|
||||
ACTOR_OBJ_BANK_24,
|
||||
ACTOR_OBJ_BANK_PSNOWMAN,
|
||||
|
||||
+1
-1
@@ -124,7 +124,7 @@ extern void mEnv_regist_nature(Kankyo* kankyo, NATURE_PROC nature_proc, void* ar
|
||||
extern int mEnv_unregist_nature(Kankyo* kankyo, NATURE_PROC nature_proc);
|
||||
extern void Global_kankyo_ct(GAME* game, Kankyo* kankyo);
|
||||
extern void mEnv_GetRoomPrimColor(u8* r, u8* g, u8* b, GAME_PLAY* play);
|
||||
extern void Global_kankyo_set_room_prim(GAME_PLAY* play);
|
||||
extern void Global_kankyo_set_room_prim(GAME* game);
|
||||
extern int mEnv_RequestChangeLightON(GAME_PLAY* play, int light_on_type, int play_sfx);
|
||||
extern int mEnv_RequestChangeLightOFF(GAME_PLAY* play, int light_off_type, f32 step);
|
||||
extern void mEnv_ManagePointLight(GAME_PLAY* play, Kankyo* kankyo, Global_light* global_light);
|
||||
|
||||
@@ -167,7 +167,7 @@ static void Arrange_Room_Actor_draw(ACTOR* actor, GAME* game) {
|
||||
ARRANGE_ROOM_ACTOR* arrange_room = (ARRANGE_ROOM_ACTOR*)actor;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
|
||||
Global_kankyo_set_room_prim((GAME_PLAY*)game);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
aAR_DrawFloor(&arrange_room->actor_class, &play->game);
|
||||
aAR_DrawWall(&arrange_room->actor_class, &play->game);
|
||||
}
|
||||
|
||||
@@ -425,7 +425,7 @@ static void aFD_DrawXluBg(Gfx* gfx, int exists, GAME* game) {
|
||||
}
|
||||
}
|
||||
|
||||
typedef void (*aFD_DRAW_PROC)(GAME_PLAY* play);
|
||||
typedef void (*aFD_DRAW_PROC)(GAME* game);
|
||||
|
||||
static void aFD_DrawBlock(aFD_block_c* block, ACTOR* actorx, GAME* game) {
|
||||
static aFD_DRAW_PROC draw_proc[] = {
|
||||
@@ -461,7 +461,7 @@ static void aFD_DrawBlock(aFD_block_c* block, ACTOR* actorx, GAME* game) {
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
aFD_SetViewerData(anime_data, play);
|
||||
(*draw_proc[Common_Get(field_draw_type)])(play);
|
||||
(*draw_proc[Common_Get(field_draw_type)])(game);
|
||||
|
||||
if (aFD_SetBeachColorOpaSegment(actorx, game, block->bx, block->bz)) {
|
||||
u32 kind = mFI_BkNum2BlockKind(block->bx, block->bz);
|
||||
|
||||
@@ -261,13 +261,12 @@ static int aHC_DrawClockBefore(GAME* game, cKF_SkeletonInfo_R_c* keyframe, int j
|
||||
static int aHC_DrawClockAfter(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) {
|
||||
HOUSE_CLOCK_ACTOR* house_clock = (HOUSE_CLOCK_ACTOR*)arg;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
s16 clock_num = house_clock->clock.clock_num;
|
||||
xyz_t pos;
|
||||
xyz_t ofs = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
if (clock_num == aHC_TYPE_MUSEUM) {
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
}
|
||||
|
||||
if (joint_idx == aHC_draw_data[clock_num].short_joint_no) {
|
||||
|
||||
@@ -0,0 +1,347 @@
|
||||
#include "ac_kamakura_indoor.h"
|
||||
|
||||
#include "m_name_table.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "m_rcp.h"
|
||||
#include "m_play.h"
|
||||
#include "audio.h"
|
||||
#include "m_common_data.h"
|
||||
|
||||
static void Kamakura_Indoor_Actor_ct(ACTOR* actorx, GAME* game);
|
||||
static void Kamakura_Indoor_Actor_dt(ACTOR* actorx, GAME* game);
|
||||
static void Kamakura_Indoor_Actor_move(ACTOR* actorx, GAME* game);
|
||||
static void Kamakura_Indoor_Actor_draw(ACTOR* actorx, GAME* game);
|
||||
|
||||
// clang-format off
|
||||
ACTOR_PROFILE Kamakura_Indoor_Profile = {
|
||||
mAc_PROFILE_KAMAKURA_INDOOR,
|
||||
ACTOR_PART_FG,
|
||||
ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED,
|
||||
EMPTY_NO,
|
||||
ACTOR_OBJ_BANK_KAMAKURA_INDOOR,
|
||||
sizeof(KAMAKURA_INDOOR_ACTOR),
|
||||
&Kamakura_Indoor_Actor_ct,
|
||||
&Kamakura_Indoor_Actor_dt,
|
||||
&Kamakura_Indoor_Actor_move,
|
||||
&Kamakura_Indoor_Actor_draw,
|
||||
NULL,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static mCoBG_bg_size_c aKI_mochi_collision_info = { 25.0f, 25.0f, 25.0f, 25.0f };
|
||||
|
||||
static void Kamakura_Indoor_Actor_ct(ACTOR* actorx, GAME* game) {
|
||||
static xyz_t mochi_pos = { 160.0f, 40.0f, 160.0f };
|
||||
KAMAKURA_INDOOR_ACTOR* k_indoor = (KAMAKURA_INDOOR_ACTOR*)actorx;
|
||||
|
||||
k_indoor->mochi.pos = mochi_pos;
|
||||
k_indoor->mochi.old_pos = mochi_pos;
|
||||
k_indoor->mochi.angle_y = 0;
|
||||
k_indoor->mochi.move_bg_idx = mCoBG_RegistMoveBg(&k_indoor->mochi.bg_regist, &k_indoor->mochi.pos, &k_indoor->mochi.old_pos, &k_indoor->mochi.angle_y, 35.0f, &aKI_mochi_collision_info, NULL, NULL, NULL, mCoBG_FTR_TYPE_NUM, mCoBG_ATTRIBUTE_STONE, 100.0f);
|
||||
}
|
||||
|
||||
static void Kamakura_Indoor_Actor_dt(ACTOR* actorx, GAME* game) {
|
||||
KAMAKURA_INDOOR_ACTOR* k_indoor = (KAMAKURA_INDOOR_ACTOR*)actorx;
|
||||
|
||||
mCoBG_CrossOffMoveBg(k_indoor->mochi.move_bg_idx);
|
||||
}
|
||||
|
||||
extern Gfx rom_kamakura_ring_modelT[];
|
||||
|
||||
static void aKI_DrawKamakuraIndoorCandleRing(KAMAKURA_INDOOR_ACTOR* k_indoor, GAME* game) {
|
||||
static xyz_t candle_ring_pos[] = { { 142.0f, 106.0f, 38.0f }, { 178.0f, 106.0f, 38.0f } };
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
f32 scale;
|
||||
int i;
|
||||
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
for (i = 0; i < aKI_CANDLE_NUM; i++) {
|
||||
Mtx* mtx = GRAPH_ALLOC_TYPE(game->graph, Mtx, 1);
|
||||
|
||||
scale = k_indoor->candle_ring[i].scale * 0.0001f;
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
|
||||
gDPPipeSync(NEXT_POLY_XLU_DISP);
|
||||
suMtxMakeTS(mtx, scale, scale, scale, candle_ring_pos[i].x, candle_ring_pos[i].y, candle_ring_pos[i].z);
|
||||
gSPMatrix(NEXT_POLY_XLU_DISP, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPMatrix(NEXT_POLY_XLU_DISP, play->billboard_mtx_p, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
||||
gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0, 255, k_indoor->candle_ring[i].color.r, k_indoor->candle_ring[i].color.g, k_indoor->candle_ring[i].color.b, k_indoor->candle_ring[i].color.a);
|
||||
gSPDisplayList(NEXT_POLY_XLU_DISP, rom_kamakura_ring_modelT);
|
||||
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
}
|
||||
|
||||
static Gfx* aKI_MakePrimEnvColorXluDisp(u8 r, u8 g, u8 b, u8 a, u8 f, u8 env_r, u8 env_g, u8 env_b, u8 env_a, GAME* game) {
|
||||
Gfx* gfx = GRAPH_ALLOC_TYPE(game->graph, Gfx, 4);
|
||||
|
||||
if (gfx != NULL) {
|
||||
gDPPipeSync(&gfx[0]);
|
||||
gDPSetPrimColor(&gfx[1], 0, f, r, g, b, a);
|
||||
gDPSetEnvColor(&gfx[2], env_r, env_g, env_b, env_a);
|
||||
gSPEndDisplayList(&gfx[3]);
|
||||
return gfx;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
extern u8 rom_kamakura_a1[];
|
||||
extern u8 rom_kamakura_a2_rgb_ci4[];
|
||||
|
||||
static u8* rom_kamakura_evw_anime_4_tex_table[] = { rom_kamakura_a1, rom_kamakura_a2_rgb_ci4 };
|
||||
|
||||
extern Gfx rom_kamakura_model[];
|
||||
extern Gfx rom_kamakura_modelT[];
|
||||
|
||||
static void aKI_DrawKamakuraIndoorBG(KAMAKURA_INDOOR_ACTOR* k_indoor, GAME* game) {
|
||||
Gfx* gfx0 = aKI_MakePrimEnvColorXluDisp(k_indoor->candle_fire[0].color.r, k_indoor->candle_fire[0].color.g, k_indoor->candle_fire[0].color.b, k_indoor->candle_fire[0].color.a, 128, 255, 50, 0, 255, game);
|
||||
Gfx* gfx1 = aKI_MakePrimEnvColorXluDisp(k_indoor->candle_fire[1].color.r, k_indoor->candle_fire[1].color.g, k_indoor->candle_fire[1].color.b, k_indoor->candle_fire[1].color.a, 128, 255, 50, 0, 255, game);
|
||||
Gfx* scroll_gfx;
|
||||
|
||||
if (gfx0 == NULL || gfx1 == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
|
||||
OPEN_DISP(game->graph);
|
||||
|
||||
Matrix_translate(0.0f, 0.0f, 0.0f, 0);
|
||||
Matrix_scale(0.0625f, 0.0625f, 0.0625f, 1);
|
||||
|
||||
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
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, ANIME_2_TXT_SEG, k_indoor->candle_fire[0].tex_p);
|
||||
gSPSegment(NEXT_POLY_XLU_DISP, ANIME_1_TXT_SEG, gfx0);
|
||||
gSPSegment(NEXT_POLY_XLU_DISP, ANIME_3_TXT_SEG, k_indoor->candle_fire[1].tex_p);
|
||||
gSPSegment(NEXT_POLY_XLU_DISP, ANIME_5_TXT_SEG, gfx1);
|
||||
gSPSegment(NEXT_POLY_OPA_DISP, ANIME_4_TXT_SEG, rom_kamakura_evw_anime_4_tex_table[(game->frame_counter / 6) & 1]);
|
||||
scroll_gfx = two_tex_scroll_dolphin(game->graph, 0, -game->frame_counter, 0, 32, 16, 1, -game->frame_counter * -1, -(-game->frame_counter * 2), 32, 16);
|
||||
gSPSegment(NEXT_POLY_XLU_DISP, ANIME_6_TXT_SEG, scroll_gfx);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, rom_kamakura_model);
|
||||
gSPDisplayList(NEXT_POLY_XLU_DISP, rom_kamakura_modelT);
|
||||
|
||||
CLOSE_DISP(game->graph);
|
||||
}
|
||||
|
||||
static void Kamakura_Indoor_Actor_draw(ACTOR* actorx, GAME* game) {
|
||||
KAMAKURA_INDOOR_ACTOR* k_indoor = (KAMAKURA_INDOOR_ACTOR*)actorx;
|
||||
|
||||
aKI_DrawKamakuraIndoorBG(k_indoor, game);
|
||||
aKI_DrawKamakuraIndoorCandleRing(k_indoor, game);
|
||||
}
|
||||
|
||||
// @unused - only used in DnM and DnM+, necessary for float ordering
|
||||
static f32 aKI_MakeSinPointSquare(void) {
|
||||
f32 f = cos_s(1);
|
||||
s16 t = RAD2SHORT_ANGLE2(f);
|
||||
f32 a = t;
|
||||
a += (3.14f);
|
||||
return a;
|
||||
}
|
||||
|
||||
static f32 aKI_MakeSinPointHalf(s16 start_frame, f32 start, s16 end_frame, f32 end, s16 now_frame) {
|
||||
if (start_frame > end_frame || start_frame == end_frame) {
|
||||
return start;
|
||||
}
|
||||
|
||||
if (now_frame <= start_frame) {
|
||||
return start;
|
||||
}
|
||||
|
||||
if (now_frame >= end_frame) {
|
||||
return end;
|
||||
} else {
|
||||
f32 sf = (f32)start_frame;
|
||||
f32 ef = (f32)end_frame;
|
||||
f32 m = ef - sf;
|
||||
f32 midpoint = (start + end) * 0.5f;
|
||||
f32 nf = (f32)now_frame;
|
||||
f32 halfpoint = ABS(end - midpoint);
|
||||
f32 percent = ((nf - sf) * 3.14f) / m;
|
||||
|
||||
if (start >= end) {
|
||||
return midpoint + cos_s(RAD2SHORT_ANGLE2(percent)) * halfpoint;
|
||||
} else {
|
||||
return midpoint + cos_s(RAD2SHORT_ANGLE2(percent)) * -halfpoint;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct candle_color_data_s {
|
||||
s16 frame;
|
||||
f32 scale;
|
||||
f32 g;
|
||||
f32 a;
|
||||
} aKI_candle_color_data_c;
|
||||
|
||||
typedef struct candle_ring_data_s {
|
||||
aKI_candle_color_data_c start_col;
|
||||
aKI_candle_color_data_c end_col;
|
||||
} aKI_candle_ring_data_c;
|
||||
|
||||
static aKI_candle_ring_data_c aKI_candle_ring_anime_data[] = {
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 0, 95.0f, 230.0f, 100.0f }, { 9, 105.0f, 250.0f, 60.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 9, 105.0f, 250.0f, 60.0f }, { 17, 100.0f, 230.0f, 80.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 17, 100.0f, 230.0f, 80.0f }, { 25, 105.0f, 210.0f, 50.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
{ { 25, 105.0f, 210.0f, 50.0f }, { 33, 95.0f, 230.0f, 100.0f } },
|
||||
};
|
||||
|
||||
typedef struct mochi_anim_s {
|
||||
s16 frame;
|
||||
xyz_t scale;
|
||||
f32 ofs_y;
|
||||
} aKI_mochi_anim_c;
|
||||
|
||||
typedef struct mochi_anim_data_s {
|
||||
int type;
|
||||
aKI_mochi_anim_c start;
|
||||
aKI_mochi_anim_c end;
|
||||
} aKI_mochi_anim_data_c;
|
||||
|
||||
static aKI_mochi_anim_data_c aKI_mochi_anime_data[] = {
|
||||
{ 2, { 0, { 70.0f, 40.0f, 70.0f}, -9.0f }, { 240, { 70.0f, 40.0f, 70.0f }, -9.0f } },
|
||||
{ 0, { 240, { 70.0f, 40.0f, 70.0f}, -9.0f }, { 380, { 85.0f, 75.0f, 85.0f }, -4.5 } },
|
||||
{ 2, { 380, { 85.0f, 75.0f, 85.0f}, -4.5 }, { 420, { 85.0f, 75.0f, 85.0f }, -4.5 } },
|
||||
{ 0, { 420, { 85.0f, 75.0f, 85.0f}, -4.5 }, { 600, { 100.0f, 100.0f, 100.0f }, 0.0f } },
|
||||
{ 2, { 600, { 100.0f, 100.0f, 100.0f}, 0.0f }, { 760, { 100.0f, 100.0f, 100.0f }, 0.0f } },
|
||||
{ 1, { 760, { 100.0f, 100.0f, 100.0f}, 0.0f }, { 810, { 70.0f, 40.0f, 70.0f }, -9.0f } },
|
||||
{ 2, { 810, { 70.0f, 40.0f, 70.0f}, -9.0f }, { 970, { 70.0f, 40.0f, 70.0f }, -9.0f } },
|
||||
{ 0, { 970, { 70.0f, 40.0f, 70.0f}, -9.0f }, { 1210, { 100.0f, 100.0f, 100.0f }, 0.0f } },
|
||||
{ 2, { 1210, { 100.0f, 100.0f, 100.0f}, 0.0f }, { 1330, { 100.0f, 100.0f, 100.0f }, 0.0f } },
|
||||
{ 1, { 1330, { 100.0f, 100.0f, 100.0f}, 0.0f }, { 1400, { 70.0f, 40.0f, 70.0f }, -9.0f } },
|
||||
};
|
||||
|
||||
// clang-format off
|
||||
static rgba_t aKI_candle_fire_rgba_data[] = {
|
||||
{ 255, 220, 0, 180 },
|
||||
{ 255, 220, 0, 180 },
|
||||
{ 255, 225, 0, 165 },
|
||||
{ 255, 225, 0, 165 },
|
||||
{ 255, 230, 0, 150 },
|
||||
{ 255, 230, 0, 150 },
|
||||
{ 255, 225, 0, 165 },
|
||||
{ 255, 225, 0, 165 },
|
||||
{ 255, 220, 0, 180 },
|
||||
{ 255, 220, 0, 180 },
|
||||
{ 255, 215, 0, 202 },
|
||||
{ 255, 215, 0, 202 },
|
||||
{ 255, 210, 0, 225 },
|
||||
{ 255, 210, 0, 225 },
|
||||
{ 255, 215, 0, 235 },
|
||||
{ 255, 215, 0, 235 },
|
||||
{ 255, 220, 0, 245 },
|
||||
{ 255, 220, 0, 245 },
|
||||
{ 255, 225, 0, 222 },
|
||||
{ 255, 225, 0, 222 },
|
||||
{ 255, 230, 0, 200 },
|
||||
{ 255, 230, 0, 200 },
|
||||
{ 255, 210, 0, 190 },
|
||||
{ 255, 210, 0, 190 },
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
extern u8 rom_kamakura_fire1_rgb_i4[];
|
||||
extern u8 rom_kamakura_fire2_rgb_i4[];
|
||||
extern u8 rom_kamakura_fire3_rgb_i4[];
|
||||
|
||||
// clang-format off
|
||||
static u8* aKI_candle_fire_anime_data[] = {
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire3_rgb_i4,
|
||||
rom_kamakura_fire3_rgb_i4,
|
||||
rom_kamakura_fire3_rgb_i4,
|
||||
rom_kamakura_fire3_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire2_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
rom_kamakura_fire1_rgb_i4,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static void Kamakura_Indoor_Actor_move(ACTOR* actorx, GAME* game) {
|
||||
KAMAKURA_INDOOR_ACTOR* k_indoor = (KAMAKURA_INDOOR_ACTOR*)actorx;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
aKI_candle_ring_c* ring_p = k_indoor->candle_ring;
|
||||
aKI_candle_fire_c* fire_p = k_indoor->candle_fire;
|
||||
u32 counter = game->frame_counter;
|
||||
static u32 candle_ring_late_frame[] = { 0, 7 };
|
||||
static u32 candle_fire_late_frame[] = { 0, 6 };
|
||||
int i;
|
||||
s16 timer;
|
||||
|
||||
sAdo_OngenPos((u32)actorx, NA_SE_54, &k_indoor->mochi.pos);
|
||||
if ((play->game_frame & 7) == 0) {
|
||||
xyz_t soba_yuge_pos = k_indoor->mochi.pos;
|
||||
|
||||
soba_yuge_pos.y += 42.0f;
|
||||
eEC_CLIP->effect_make_proc(eEC_EFFECT_SOBA_YUGE, soba_yuge_pos, 1, 0, game, RSV_NO, 14, 1);
|
||||
}
|
||||
|
||||
for (i = 0; i < aKI_CANDLE_NUM; i++) {
|
||||
s16 type;
|
||||
|
||||
type = (counter - candle_ring_late_frame[i & 1]) % 34;
|
||||
ring_p->color.r = 255;
|
||||
ring_p->color.g = ABS(aKI_MakeSinPointHalf(aKI_candle_ring_anime_data[type].start_col.frame, aKI_candle_ring_anime_data[type].start_col.g, aKI_candle_ring_anime_data[type].end_col.frame, aKI_candle_ring_anime_data[type].end_col.g, type));
|
||||
ring_p->color.b = 0;
|
||||
ring_p->color.a = ABS(aKI_MakeSinPointHalf(aKI_candle_ring_anime_data[type].start_col.frame, aKI_candle_ring_anime_data[type].start_col.a, aKI_candle_ring_anime_data[type].end_col.frame, aKI_candle_ring_anime_data[type].end_col.a, type));
|
||||
ring_p->scale = aKI_MakeSinPointHalf(aKI_candle_ring_anime_data[type].start_col.frame, aKI_candle_ring_anime_data[type].start_col.scale, aKI_candle_ring_anime_data[type].end_col.frame, aKI_candle_ring_anime_data[type].end_col.scale, type);
|
||||
ring_p++;
|
||||
|
||||
type = (counter - candle_fire_late_frame[i & 1]) % 24;
|
||||
fire_p->tex_p = aKI_candle_fire_anime_data[type];
|
||||
fire_p->color = aKI_candle_fire_rgba_data[type];
|
||||
fire_p++;
|
||||
}
|
||||
}
|
||||
@@ -405,10 +405,9 @@ static void aMI_DrawMyStep(ACTOR* actorx, GAME* game) {
|
||||
};
|
||||
|
||||
MY_INDOOR_ACTOR* my_indoor = (MY_INDOOR_ACTOR*)actorx;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
int i;
|
||||
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
|
||||
for (i = 0; i < aMI_STEP_TYPE_NUM; i++) {
|
||||
@@ -436,7 +435,6 @@ static void aMI_DrawMyStep(ACTOR* actorx, GAME* game) {
|
||||
|
||||
static void aMI_DrawMyFloor(ACTOR* actorx, GAME* game) {
|
||||
MY_INDOOR_ACTOR* my_indoor = (MY_INDOOR_ACTOR*)actorx;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
GRAPH* graph;
|
||||
aMI_bank_c* bank = &my_indoor->banks[my_indoor->floor_bank_idx];
|
||||
u8* data_p = bank->floor_data_p;
|
||||
@@ -446,7 +444,7 @@ static void aMI_DrawMyFloor(ACTOR* actorx, GAME* game) {
|
||||
u8* tex3 = data_p + aMI_PAL_SIZE + 3 * aMI_TEX_SIZE;
|
||||
aMI_disp_wall_floor_c* disp_info = &aMI_size_dsp_table[my_indoor->room_kind].main;
|
||||
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
|
||||
if (disp_info->floor_model != NULL) {
|
||||
graph = game->graph;
|
||||
@@ -596,7 +594,7 @@ static void aMI_DrawMyOriginalFloor(ACTOR* actorx, GAME* game) {
|
||||
disp = &aMI_size_dsp_table[my_indoor->room_kind].new2;
|
||||
}
|
||||
|
||||
Global_kankyo_set_room_prim((GAME_PLAY*)game);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
|
||||
if (disp->floor_model != NULL) {
|
||||
graph = game->graph;
|
||||
@@ -627,7 +625,6 @@ static void aMI_DrawMyOriginalFloor(ACTOR* actorx, GAME* game) {
|
||||
|
||||
static void aMI_DrawMyWall(ACTOR* actorx, GAME* game) {
|
||||
MY_INDOOR_ACTOR* my_indoor = (MY_INDOOR_ACTOR*)actorx;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
GRAPH* graph;
|
||||
aMI_bank_c* bank = &my_indoor->banks[my_indoor->wall_bank_idx];
|
||||
u8* data_p = bank->wall_data_p;
|
||||
@@ -636,7 +633,7 @@ static void aMI_DrawMyWall(ACTOR* actorx, GAME* game) {
|
||||
u8* tex1 = data_p + aMI_PAL_SIZE + 1 * aMI_TEX_SIZE;
|
||||
aMI_disp_wall_floor_c* disp_info = &aMI_size_dsp_table[my_indoor->room_kind].main;
|
||||
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
|
||||
if (disp_info->wall_model != NULL) {
|
||||
graph = game->graph;
|
||||
@@ -678,7 +675,7 @@ static void aMI_DrawMyOriginalWall(ACTOR* actorx, GAME* game) {
|
||||
disp = &aMI_size_dsp_table[my_indoor->room_kind].new2;
|
||||
}
|
||||
|
||||
Global_kankyo_set_room_prim((GAME_PLAY*)game);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
|
||||
if (disp->wall_model != NULL) {
|
||||
graph = game->graph;
|
||||
|
||||
@@ -286,7 +286,6 @@ static void aSI_DrawShopFloor(ACTOR* actorx, GAME* game) {
|
||||
u8* tex1;
|
||||
u8* tex2;
|
||||
u8* tex3;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
|
||||
pal = (u16*)shop_indoor->floor_data_p[data_idx];
|
||||
tex0 = (u8*)(shop_indoor->floor_data_p[data_idx] + aMI_PAL_SIZE);
|
||||
@@ -296,7 +295,7 @@ static void aSI_DrawShopFloor(ACTOR* actorx, GAME* game) {
|
||||
|
||||
_texture_z_light_fog_prim_xlu(game->graph);
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
|
||||
if (shop_indoor->floor_data_p[data_idx] != NULL) {
|
||||
if (aSI_disp_data_table[shop_level].floor_gfx != NULL) {
|
||||
@@ -359,7 +358,7 @@ static void aSI_DrawShopFukubiki(ACTOR* actorx, GAME* game) {
|
||||
Matrix_scale(0.0625f, 0.0625f, 0.0625f, 1);
|
||||
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, aSI_disp_data_table[shop_level].fukubiki_gfx);
|
||||
|
||||
CLOSE_DISP(game->graph);
|
||||
@@ -409,7 +408,7 @@ static void aSI_DrawShopWall(ACTOR* actorx, GAME* game) {
|
||||
Matrix_scale(0.0625f, 0.0625f, 0.0625f, 1);
|
||||
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, aSI_disp_data_table[shop_level].wall_gfx);
|
||||
|
||||
CLOSE_DISP(game->graph);
|
||||
@@ -431,7 +430,7 @@ static void aSI_DrawShopWall(ACTOR* actorx, GAME* game) {
|
||||
Matrix_scale(0.0625f, 0.0625f, 0.0625f, 1);
|
||||
|
||||
gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim(game);
|
||||
gSPDisplayList(NEXT_POLY_XLU_DISP, aSI_disp_data_table[shop_level].wall_xlu_gfx);
|
||||
|
||||
CLOSE_DISP(game->graph);
|
||||
|
||||
@@ -209,7 +209,7 @@ static void BG_draw_Minsect(ACTOR* actor, GAME_PLAY* play) {
|
||||
|
||||
graph = play->game.graph;
|
||||
Matrix_scale(0.0625f, 0.0625f, 0.0625f, 0);
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim((GAME*)play);
|
||||
OPEN_DISP(graph);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, rom_museum4_ue_model);
|
||||
@@ -222,7 +222,7 @@ static void BG_draw_Minsect_niwa(ACTOR* actor, GAME_PLAY* play) {
|
||||
|
||||
graph = play->game.graph;
|
||||
Matrix_scale(0.0625f, 0.0625f, 0.0625f, 0);
|
||||
Global_kankyo_set_room_prim(play);
|
||||
Global_kankyo_set_room_prim((GAME*)play);
|
||||
OPEN_DISP(graph);
|
||||
gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(play->game.graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(NEXT_POLY_OPA_DISP, rom_museum4_model);
|
||||
|
||||
+3
-3
@@ -1929,16 +1929,16 @@ extern void mEnv_GetRoomPrimColor(u8* r, u8* g, u8* b, GAME_PLAY* play) {
|
||||
b[0] = color[2];
|
||||
}
|
||||
|
||||
extern void Global_kankyo_set_room_prim(GAME_PLAY* play) {
|
||||
extern void Global_kankyo_set_room_prim(GAME* game) {
|
||||
u8 r;
|
||||
u8 g;
|
||||
u8 b;
|
||||
GRAPH* graph;
|
||||
|
||||
mEnv_GetRoomPrimColor(&r, &g, &b, play);
|
||||
mEnv_GetRoomPrimColor(&r, &g, &b, (GAME_PLAY*)game);
|
||||
|
||||
{
|
||||
graph = play->game.graph;
|
||||
graph = game->graph;
|
||||
OPEN_DISP(graph);
|
||||
|
||||
gDPPipeSync(NOW_POLY_OPA_DISP++);
|
||||
|
||||
Reference in New Issue
Block a user