mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Merge pull request #105 from Cuyler36/m_camera2
Implement & link m_camera2.c
This commit is contained in:
@@ -363,6 +363,7 @@ TRK_CFLAGS = [
|
||||
BASE_REL_CFLAGS = CFLAGS + [
|
||||
"-sdata 0",
|
||||
f"-sdata2 {REL_SDATA2_SIZE}",
|
||||
"-enum int",
|
||||
#"-pool off",
|
||||
"-sym on"
|
||||
] + REL_DEFINES
|
||||
|
||||
@@ -6,3 +6,4 @@ symbol_aligns:
|
||||
0x8125a7c0 : 0x20 # construct_skip
|
||||
0x81361820 : 0x20 # S_back_title_timer
|
||||
0x806D4D40: 32 # align fFTR_myhome_off_pal_table to 32 bytes
|
||||
0x8064F860: 32 # data right after m_camera2 TU
|
||||
|
||||
@@ -40,6 +40,10 @@ m_bg_item.c:
|
||||
.bss: [0x81263080, 0x81263088]
|
||||
m_calendar.c:
|
||||
.text: [0x8037D190, 0x8037DA54]
|
||||
m_camera2.c:
|
||||
.text: [0x8037DA54, 0x8038344C]
|
||||
.rodata: [0x80641438, 0x80641828]
|
||||
.data: [0x8064F818, 0x8064F860]
|
||||
m_cockroach.c:
|
||||
.text: [0x80385430, 0x80385A80]
|
||||
m_collision_obj.c:
|
||||
|
||||
@@ -2629,6 +2629,9 @@ global:
|
||||
0x8009ae38: _savefpr_28
|
||||
0x8009ae3c: _savefpr_29
|
||||
0x8009ae4c: __restore_fpr
|
||||
0x8009ae78: _restfpr_25
|
||||
0x8009ae80: _restfpr_27
|
||||
0x8009ae84: _restfpr_28
|
||||
0x8009ae88: _restfpr_29
|
||||
0x8009ae98: __save_gpr
|
||||
0x8009ae9c: _savegpr_15
|
||||
|
||||
+2
-2
@@ -144,7 +144,7 @@ n.rule(
|
||||
|
||||
n.rule(
|
||||
"jumptable",
|
||||
command = "$disassembler $in $out -j $addr -q $disassembler",
|
||||
command = "$disassembler $in $out -j $addr -q $disasmflags",
|
||||
description = "Jumptable $addr"
|
||||
)
|
||||
|
||||
@@ -414,7 +414,7 @@ class FloatInclude(GeneratedInclude):
|
||||
# Build
|
||||
for inc in includes:
|
||||
sda = "--sda " if ctx.sdata2_threshold >= 4 else ""
|
||||
asm = "" if inc.manual else "--asm"
|
||||
asm = "" if inc.manual else "" #--asm
|
||||
n.build(
|
||||
inc.path,
|
||||
rule="orderfloats",
|
||||
|
||||
@@ -13,6 +13,10 @@ extern "C" {
|
||||
|
||||
#define SQRTF(f) (__frsqrte(f))
|
||||
|
||||
extern double sin(double deg);
|
||||
extern double cos(double deg);
|
||||
extern double tan(double deg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
+55
-22
@@ -104,7 +104,7 @@ typedef struct camera_main_normal_s {
|
||||
|
||||
typedef struct camera_main_simple_s {
|
||||
xyz_t center_pos;
|
||||
xyz_t eye_pos;
|
||||
s_xyz angle;
|
||||
f32 distance;
|
||||
|
||||
int morph_counter;
|
||||
@@ -175,7 +175,6 @@ typedef struct camera_request_cust_talk_s {
|
||||
ACTOR* speaker_actor;
|
||||
ACTOR* listener_actor;
|
||||
f32 center_ratio;
|
||||
f32 cull_timer;
|
||||
s16 angle_x;
|
||||
s16 angle_y;
|
||||
f32 distance;
|
||||
@@ -283,20 +282,23 @@ typedef union camera_request_data_u {
|
||||
u64 align;
|
||||
} CameraRequestData;
|
||||
|
||||
typedef struct camera_s {
|
||||
struct {
|
||||
xyz_t eye;
|
||||
xyz_t center;
|
||||
xyz_t up;
|
||||
} lookat;
|
||||
typedef struct camera_lookat_s {
|
||||
xyz_t eye;
|
||||
xyz_t center;
|
||||
xyz_t up;
|
||||
} CameraLookat;
|
||||
|
||||
struct {
|
||||
f32 fov_y;
|
||||
f32 aspect_ratio;
|
||||
f32 near;
|
||||
f32 far;
|
||||
f32 scale;
|
||||
} perspective;
|
||||
typedef struct camera_perspective_s {
|
||||
f32 fov_y;
|
||||
f32 aspect_ratio;
|
||||
f32 near;
|
||||
f32 far;
|
||||
f32 scale;
|
||||
} CameraPerspective;
|
||||
|
||||
typedef struct camera_s {
|
||||
CameraLookat lookat;
|
||||
CameraPerspective perspective;
|
||||
|
||||
s_xyz direction; /* camera orientation */
|
||||
s_xyz direction_velocity; /* camera orentation rate of change */
|
||||
@@ -321,15 +323,46 @@ typedef struct camera_s {
|
||||
xyz_t mic_pos; /* mic position */
|
||||
u32 flags; /* camera flags */
|
||||
|
||||
xyz_t unused[2]; // potentially unused, idk if it's even xyz_t
|
||||
xyz_t offset_eye;
|
||||
xyz_t offset_center;
|
||||
} Camera2;
|
||||
|
||||
|
||||
xyz_t* Camera2_getMicPos_p(GAME_PLAY*);
|
||||
void Camera2_ClearActorTalking_Cull(GAME_PLAY*);
|
||||
void Camera2_process(GAME_PLAY*);
|
||||
void Init_Camera2(GAME_PLAY*);
|
||||
void Camera2_draw(GAME_PLAY*);
|
||||
extern s16 getCamera2AngleY(GAME_PLAY* play);
|
||||
extern int Camera2_change_priority(GAME_PLAY* play, int priority);
|
||||
extern xyz_t* Camera2_getEyePos_p();
|
||||
extern xyz_t* Camera2_getCenterPos_p();
|
||||
extern int Camera2_CheckCullingMode();
|
||||
extern int Camera2_CheckEnterCullingArea(f32 pos_x, f32 pos_z, f32 width);
|
||||
extern void Camera2_ClearActorTalking_Cull(GAME_PLAY* play);
|
||||
extern int Camera2_Check_main_index(GAME_PLAY* play, int main_index);
|
||||
extern xyz_t* Camera2_getMicPos_p(GAME_PLAY* play);
|
||||
extern int Camera2NormalState_get(GAME_PLAY* play);
|
||||
extern int Camera2_request_main_wade(GAME_PLAY* play, xyz_t* pos, int priority, f32 goal_time);
|
||||
extern int Camera2_request_main_talk(GAME_PLAY* play, ACTOR* speaker, ACTOR* listener, int priority);
|
||||
extern int Camera2_request_main_talk_pos(GAME_PLAY* play, ACTOR* speaker, xyz_t* listener_pos, int priority);
|
||||
extern int Camera2_request_main_normal(GAME_PLAY* play, int flags, int priority);
|
||||
extern int Camera2_request_main_demo(GAME_PLAY* play, const xyz_t* start_center, const f32 start_dist, const s_xyz* start_dir, const xyz_t* goal_center, const f32 goal_dist, const s_xyz* goal_dir, const f32 goal_delta, const f32 accel_delta, const f32 braking_delta, const int priority);
|
||||
extern int Camera2_request_main_demo_fromNowPos(GAME_PLAY* play, const xyz_t* goal_center, const s_xyz* goal_dir, const f32 goal_dist, const f32 goal_delta, const f32 accel_delta, const f32 braking_delta, const int priority);
|
||||
extern int Camera2_request_main_demo_fromNowPos2(GAME_PLAY* play, const xyz_t* goal_center, const f32 goal_delta, const f32 accel_delta, const f32 braking_delta, const int priority);
|
||||
extern int Camera2_request_main_item(GAME_PLAY* play, int type, int priority);
|
||||
extern int Camera2_request_main_lock(GAME_PLAY* play, xyz_t* center_pos, xyz_t* eye_pos, f32 fov_y, int morph_counter, f32 near, f32 far, int priority);
|
||||
extern int Camera2_request_main_door(GAME_PLAY* play, ACTOR* door_actor, u32 flags, int priority);
|
||||
extern int Camera2_request_main_simple2(GAME_PLAY* play, xyz_t* center, s_xyz* dir, f32 dist, int morph_counter, int mode, int priority);
|
||||
extern int Camera2_request_main_simple_kirin(GAME_PLAY* play, const xyz_t* center, int priority);
|
||||
extern int Camera2_request_main_simple_fishing(GAME_PLAY* play, const xyz_t* player_pos, const xyz_t* bobber_pos, int priority);
|
||||
extern int Camera2_request_main_simple_fishing_return(GAME_PLAY* play, xyz_t* player_pos, int priority);
|
||||
extern int Camera2_request_main_simple(GAME_PLAY* play, xyz_t* pos, s_xyz* dir, f32 dist, int morph_counter, int priority);
|
||||
extern void Camera2_main_Simple_AngleDistStd(GAME_PLAY* play, s_xyz* angle, f32* dist);
|
||||
extern int Camera2_request_main_listen_front_low_talk(GAME_PLAY* play, ACTOR* speaker, ACTOR* listener, int priority);
|
||||
extern int Camera2_request_main_needlework_talk(GAME_PLAY* play, ACTOR* speaker, ACTOR* listener, int priority);
|
||||
extern int Camera2_request_main_cust_talk(GAME_PLAY* play, ACTOR* speaker, ACTOR* listener, f32 center_ratio, int priority, s16 angle_x, s16 angle_y, f32 distance);
|
||||
extern int Camera2_request_BuySikimono_WallPaper(GAME_PLAY* play, xyz_t* center, xyz_t* eye);
|
||||
extern int Camera2_Inter_set_reverse_mode(GAME_PLAY* play);
|
||||
extern int Camera2_request_main_inter(GAME_PLAY* play, xyz_t* start_center, xyz_t* start_eye, xyz_t* goal_center, xyz_t* goal_eye, f32 s0, f32 s1, u32 flags, int morph_counter, int priority);
|
||||
extern int Camera2_request_main_staff_roll(GAME_PLAY* play, ACTOR* speaker, ACTOR* listener, int priority);
|
||||
extern void Init_Camera2(GAME_PLAY* play);
|
||||
extern void Camera2_process(GAME_PLAY* play);
|
||||
extern void Camera2_draw(GAME_PLAY* play);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -116,6 +116,9 @@ extern int mCoBG_Height2GetLayer(f32 height);
|
||||
extern void mCoBG_SetPlussOffset(xyz_t wpos, s16 offset, s16 new_attrib);
|
||||
extern int mCoBG_GetLayer(const xyz_t* wpos);
|
||||
extern int mCoBG_BnumUnum2HoleNumber(int block_x, int block_z, int ut_x, int ut_z);
|
||||
extern u32 mCoBG_UtNum2BgAttr(int ut_x, int ut_z);
|
||||
extern f32 mCoBG_UtNum2UtCenterY(int ut_x, int ut_z);
|
||||
extern int mCoBG_CheckCliffAttr(u32 attribute);
|
||||
|
||||
extern void mCoBG_InitMoveBgData();
|
||||
extern void mCoBG_InitBlockBgCheckMode();
|
||||
|
||||
@@ -118,6 +118,7 @@ enum event_table {
|
||||
mEv_EVENT_HALLOWEEN = 49,
|
||||
mEv_EVENT_FISHING_TOURNEY_2 = 54,
|
||||
mEv_EVENT_GHOST = 64,
|
||||
mEv_EVENT_KK_SLIDER = 71,
|
||||
mEv_EVENT_BROKER_SALE = 75,
|
||||
mEv_EVENT_SHOP_SALE = 78,
|
||||
};
|
||||
@@ -238,6 +239,7 @@ extern int mEv_CheckArbeit();
|
||||
extern int mEv_CheckTitleDemo();
|
||||
extern int mEv_check_status(int event, s16 status);
|
||||
extern s8* mEv_get_common_area(int type, s8 id);
|
||||
extern s8* mEv_get_save_area(int type, s8 id);
|
||||
extern int mEv_ArbeitPlayer(u32 player_no);
|
||||
extern u16 mEv_get_special_event_type();
|
||||
extern int mEv_ClearEventSaveInfo(mEv_event_save_c* event_save_data);
|
||||
|
||||
@@ -52,6 +52,10 @@ enum field_room {
|
||||
/* TODO: others */
|
||||
mFI_FIELD_FG = mFI_TO_FIELD_ID(mFI_FIELDTYPE_FG, 0),
|
||||
|
||||
mFI_FIELD_ROOM0 = mFI_TO_FIELD_ID(mFI_FIELDTYPE_ROOM, 0),
|
||||
|
||||
mFI_FIELD_NPCROOM0 = mFI_TO_FIELD_ID(mFI_FIELDTYPE_NPC_ROOM, 0),
|
||||
|
||||
mFI_FIELD_PLAYER0_ROOM = mFI_TO_FIELD_ID(mFI_FIELDTYPE_PLAYER_ROOM, 0),
|
||||
mFI_FIELD_PLAYER1_ROOM,
|
||||
mFI_FIELD_PLAYER2_ROOM,
|
||||
@@ -155,6 +159,10 @@ extern void mFI_BlockDepositOFF(u16* deposit, int ut_x, int ut_z);
|
||||
extern void mFI_PullTanukiPathTrees();
|
||||
extern int mFI_CheckBlockKind_OR(int block_x, int block_z, u32 kind);
|
||||
extern void mFI_GetIslandBlockNumX(int* island_block_x_nums);
|
||||
extern void mFI_LposInBKtoWpos(xyz_t* wpos, xyz_t lpos, int block_x, int block_z);
|
||||
extern f32 mFI_GetBlockWidth();
|
||||
extern f32 mFI_GetBlockHeight();
|
||||
extern int mFI_Wpos2BkandUtNuminBlock(int* block_x, int* block_z, int* ut_x, int* ut_z, xyz_t wpos);
|
||||
|
||||
extern void mFI_PrintNowBGNum(gfxprint_t* gfxprint);
|
||||
extern void mFI_PrintFgAttr(gfxprint_t* gfxprint);
|
||||
|
||||
@@ -25,6 +25,7 @@ extern void mPlib_Set_goal_player_demo_walk(f32 goal_x, f32 goal_z, f32 speed);
|
||||
extern void mPlib_Set_able_hand_all_item_in_demo(s8 enable);
|
||||
extern void mPlib_change_player_cloth_info_lv2(Private_c* priv, mActor_name_t cloth_name);
|
||||
extern int mPlib_Get_address_able_display();
|
||||
extern int mPlib_get_player_actor_main_index(GAME_PLAY* play);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -122,5 +122,6 @@ extern int mRmTp_FurnitureIdx2FurnitureKind(int ftr_idx);
|
||||
extern int mRmTp_PleaseDrawLightSwitch();
|
||||
extern mActor_name_t mRmTp_Item1ItemNo2FtrItemNo_AtPlayerRoom(mActor_name_t item_no, int flag);
|
||||
extern void mRmTp_SetDefaultLightSwitchData(int state);
|
||||
extern int mRmTp_GetEntranceBasePosition(xyz_t* pos);
|
||||
|
||||
#endif
|
||||
@@ -34,6 +34,9 @@ extern f32 Math3DVecLength(xyz_t* vec);
|
||||
extern void sMath_RotateX(xyz_t* pos, f32 rad);
|
||||
extern void sMath_RotateY(xyz_t* pos, f32 rad);
|
||||
extern void sMath_RotateZ(xyz_t* pos, f32 rad);
|
||||
extern f32 Math3d_normalizeXyz_t(xyz_t* vec);
|
||||
extern f32 Math3DLength(xyz_t* v0, xyz_t* v1);
|
||||
extern void Math3DInDivPos2(xyz_t* v0, xyz_t* v1, xyz_t* v2, f32 percent);
|
||||
extern void Math3DPlane(xyz_t* va, xyz_t* vb, xyz_t* vc, f32* nox, f32* noy, f32* noz, f32* odist);
|
||||
extern int Math3D_sphereCrossSphere_cl(Math3D_sphere_c* a, Math3D_sphere_c* b, f32* in);
|
||||
extern int Math3D_sphereVsPipe_cl(Math3D_sphere_c* s, Math3D_pipe_c* c, f32* in);
|
||||
@@ -41,7 +44,6 @@ extern int Math3D_pipeVsPipe_cl(Math3D_pipe_c* a, Math3D_pipe_c* b , f32* d);
|
||||
extern int Math3D_sphereCrossTriangle3_cp(Math3D_sphere_c* s, Math3D_triangle_c* tri, xyz_t* ip);
|
||||
extern int Math3D_pipeCrossTriangle_cp(Math3D_pipe_c* c,Math3D_triangle_c* tri, xyz_t* in);
|
||||
|
||||
|
||||
extern xyz_t ZeroVec;
|
||||
extern s_xyz ZeroSVec;
|
||||
|
||||
|
||||
@@ -64,6 +64,8 @@ typedef u32 unknown;
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
#define F32_IS_ZERO(v) (fabsf(v) < 0.008f)
|
||||
|
||||
/* ARGB8 color format (32 bits) to RGB5A3 color format (16 bits) */
|
||||
#define ARGB8_to_RGB5A3(argb8) \
|
||||
((u16)(((argb8) & 0xFF000000) >= 0xE0000000 ? \
|
||||
|
||||
+2870
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user