Implement & link ac_kamakura_indoor

This commit is contained in:
Cuyler36
2024-11-05 10:34:47 -05:00
parent 5e6cd98f07
commit b23f4bd984
13 changed files with 401 additions and 27 deletions
+1 -1
View File
@@ -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"),
+31 -1
View File
@@ -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
+2
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+1 -1
View File
@@ -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);
}
+2 -2
View File
@@ -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);
+1 -2
View File
@@ -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) {
+347
View File
@@ -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++;
}
}
+5 -8
View File
@@ -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;
+4 -5
View File
@@ -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);
+2 -2
View File
@@ -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
View File
@@ -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++);