#ifndef _CAMERA_H #define _CAMERA_H #include "types.h" #include "area.h" #include "engine/geo_layout.h" #include "engine/graph_node.h" #define ABS(x) ((x) > 0.f ? (x) : -(x)) #define ABS2(x) ((x) >= 0.f ? (x) : -(x)) #define AREA_BBH 0x0041 #define AREA_CCM_OUTSIDE 0x0051 #define AREA_CCM_SLIDE 0x0052 #define AREA_CASTLE_LOBBY 0x0061 #define AREA_CASTLE_TIPPY 0x0062 #define AREA_CASTLE_BASTEMENT 0x0063 #define AREA_HMC 0x0071 #define AREA_SSL_OUTSIDE 0x0081 #define AREA_SSL_PYRAMID 0x0082 #define AREA_SSL_EYEROK 0x0083 #define AREA_BOB 0x0091 #define AREA_SL_OUTSIDE 0x00A1 #define AREA_SL_IGLOO 0x00A2 #define AREA_WDW_MAIN 0x00B1 #define AREA_WDW_TOWN 0x00B2 #define AREA_JRB_MAIN 0x00C1 #define AREA_JRB_SHIP 0x00C2 #define AREA_THI_HUGE 0x00D1 #define AREA_THI_TINY 0x00D2 #define AREA_THI_WIGGLER 0x00D3 #define AREA_TTC 0x00E1 #define AREA_RR 0x00F1 #define AREA_OUTSIDE_CASTLE 0x0101 #define AREA_BITDW 0x0111 #define AREA_VCUTM 0x0121 #define AREA_BITFS 0x0131 #define AREA_SA 0x0141 #define AREA_BITS 0x0151 #define AREA_LLL_OUTSIDE 0x0161 #define AREA_LLL_VOLCANO 0x0162 #define AREA_DDD_WHIRLPOOL 0x0171 #define AREA_DDD_SUB 0x0172 #define AREA_WF 0x0181 #define AREA_ENDING 0x0191 #define AREA_COURTYARD 0x01A1 #define AREA_PSS 0x01B1 #define AREA_COTMC 0x01C1 #define AREA_TOTWC 0x01D1 #define AREA_BOWSER_1 0x01E1 #define AREA_WMOTR 0x01F1 #define AREA_BOWSER_2 0x0211 #define AREA_BOWSER_3 0x0221 #define AREA_TTM_OUTSIDE 0x0241 #define CAM_MODE_MARIO_ACTIVE 0x01 #define CAM_MODE_LAKITU_WAS_ZOOMED_OUT 0x02 #define CAM_MODE_MARIO_SELECTED 0x04 #define CAM_ANGLE_LAKITU_MARIO 1 #define CAM_ANGLE_LAKITU_FIXED 2 #define CAM_MOVE_RETURN_TO_MIDDLE 0x0001 #define CAM_MOVE_ZOOMED_OUT 0x0002 #define CAM_MOVE_ROTATE_RIGHT 0x0004 #define CAM_MOVE_ROTATE_LEFT 0x0008 #define CAM_MOVE_UNKNOWN_5 0x0010 #define CAM_MOVE_UNKNOWN_6 0x0020 #define CAM_MOVE_UNKNOWN_7 0x0040 #define CAM_MOVE_UNKNOWN_8 0x0080 #define CAM_MOVE_INTO_C_UP 0x0100 #define CAM_MOVE_UNKNOWN_10 0x0200 #define CAM_MOVE_UNKNOWN_11 0x0400 #define CAM_MOVE_INIT_CAMERA 0x0800 #define CAM_MOVE_UNK1000 0x1000 #define CAM_MOVE_C_UP_MODE 0x2000 #define CAM_MOVE_SUBMERGED 0x4000 #define CAM_MOVE_PAUSE_SCREEN 0x8000 #define CAM_FLAG_1_UNKNOWN_0 0x01 #define CAM_FLAG_1_UNKNOWN_1 0x02 #define CAM_FLAG_1_UNKNOWN_2 0x04 #define CAM_FLAG_1_UNUSED_3 0x08 #define CAM_FLAG_1_UNUSED_4 0x10 #define CAM_FLAG_1_UNKNOWN_5 0x20 #define CAM_FLAG_2_SMOOTH_MOVEMENT 0x0001 #define CAM_FLAG_2_UNKNOWN_1 0x0002 #define CAM_FLAG_2_FRAME_AFTER_CAM_INIT 0x0004 #define CAM_FLAG_2_UNKNOWN_3 0x0008 #define CAM_FLAG_2_CCM_SLIDE_SHORTCUT 0x0010 #define CAM_FLAG_2_COLLIDING_WITH_WALL 0x0020 #define CAM_FLAG_2_SLEEPING 0x0040 #define CAM_FLAG_2_UNUSED_7 0x0080 #define CAM_FLAG_2_UNUSED_8 0x0100 #define CAM_FLAG_2_UNKNOWN_9 0x0200 #define CAM_FLAG_2_UNKNOWN_10 0x0400 #define CAM_FLAG_2_UNKNOWN_11 0x0800 #define CAM_FLAG_2_BLOCK_LEVEL_SPECIFIC_UPDATES 0x1000 #define CAM_FLAG_2_UNUSED_13 0x2000 #define CAM_FLAG_2_UNUSED_CUTSCENE_ACTIVE 0x4000 #define CAM_FLAG_2_BEHIND_MARIO_POST_DOOR 0x8000 #define CAM_STATUS_NONE 0 #define CAM_STATUS_MARIO 1 << 0 #define CAM_STATUS_LAKITU 1 << 1 #define CAM_STATUS_FIXED 1 << 2 #define CAM_STATUS_C_DOWN 1 << 3 #define CAM_STATUS_C_UP 1 << 4 #define CAM_STATUS_MODE_GROUP (CAM_STATUS_MARIO | CAM_STATUS_LAKITU | CAM_STATUS_FIXED) #define CAM_STATUS_C_MODE_GROUP (CAM_STATUS_C_DOWN | CAM_STATUS_C_UP) #define SHAKE_ATTACK 1 #define SHAKE_GROUND_POUND 2 #define SHAKE_SMALL_DAMAGE 3 #define SHAKE_MED_DAMAGE 4 #define SHAKE_LARGE_DAMAGE 5 #define SHAKE_HIT_FROM_BELOW 8 #define SHAKE_FALL_DAMAGE 9 #define SHAKE_SHOCK 10 #define SHAKE_2_UNKNOWN_1 1 #define SHAKE_2_UNKNOWN_2 2 #define SHAKE_2_UNKNOWN_3 3 #define SHAKE_2_UNKNOWN_5 5 #define SHAKE_2_UNKNOWN_6 6 #define SHAKE_2_UNKNOWN_7 7 #define SHAKE_2_UNKNOWN_8 8 #define SHAKE_2_JRB_SHIP_DRAIN 9 #define SHAKE_2_FALLING_BITS_PLAT 10 #define CUTSCENE_DOOR_0 130 #define CUTSCENE_DOOR_1 131 #define CUTSCENE_ENTER_CANNON 133 #define CUTSCENE_ENTER_PAINTING 134 #define CUTSCENE_DEATH_EXIT 135 #define CUTSCENE_DOOR_WARP 139 #define CUTSCENE_DOOR_A 140 #define CUTSCENE_DOOR_B 141 #define CUTSCENE_INTRO_PEACH 142 #define CUTSCENE_STAR_DANCE_1_1 143 #define CUTSCENE_ENTER_BOWSER_ARENA 144 #define CUTSCENE_0F_TODO 145 #define CUTSCENE_11_TODO 147 #define CUTSCENE_SLIDING_DOORS_OPEN 149 #define CUTSCENE_PREPARE_CANNON 150 #define CUTSCENE_UNLOCK_KEY_DOOR 151 #define CUTSCENE_STANDING_DEATH 152 #define CUTSCENE_DEATH_2 153 #define CUTSCENE_DEATH_ON_BACK 154 #define CUTSCENE_QUICKSAND_DEATH 155 #define CUTSCENE_SUFFOCATION_DEATH 156 #define CUTSCENE_EXIT_BOWSER_SUCC 157 #define CUTSCENE_1C_TODO 158 #define CUTSCENE_WATER_DEATH 159 //Not in cutscene switch #define CUTSCENE_EXIT_PAINTING_SUCC 160 #define CUTSCENE_CAP_SWITCH_PRESS 161 #define CUTSCENE_DIALOG_1 162 #define CUTSCENE_DIALOG_2 163 #define CUTSCENE_ENTER_PYRAMID_TOP 164 #define CUTSCENE_STAR_DANCE_2 165 #define CUTSCENE_STAR_DANCE_3 166 #define CUTSCENE_KEY_DANCE 167 #define CUTSCENE_26_TODO 168 #define CUTSCENE_EXIT_BBH_SUCC 169 #define CUTSCENE_NONPAINTING_DEATH 170 #define CUTSCENE_READ_MESSAGE 171 #define CUTSCENE_PEACH_END 172 #define CUTSCENE_STAR_SPAWN 173 #define CUTSCENE_GRAND_STAR 174 #define CUTSCENE_STAR_DANCE_1_2 175 #define CUTSCENE_SPECIAL_STAR_SPAWN 176 #define CUTSCENE_END_WAVING 177 #define CUTSCENE_CREDITS 178 #define CUTSCENE_EXIT_WATERFALL 179 #define CUTSCENE_EXIT_FALL_WMOTR 180 #define CUTSCENE_ENTER_POOL 181 // sorted struct CameraPlayerStatus { /*0x00*/ u32 action; /*0x04*/ Vec3f pos; /*0x10*/ Vec3s faceAngle; /*0x16*/ Vec3s unk16; /*0x1C*/ s16 unk1C[2]; //only unk1C[1] seems used, represents an effective cutscene /*0x20*/ struct Object *usedObj; }; struct TransitionCamera { /*0x00*/ s16 pitch1; /*0x02*/ s16 yaw1; /*0x04*/ f32 dist1; /*0x08*/ s16 pitch2; /*0x0A*/ s16 yaw2; /*0x0C*/ f32 dist2; /*0x10*/ s32 timer; /*0x14*/ Vec3f marioPos; /*0x20*/ u8 pad; // for the structs to align, there has to be an extra unused variable here. type is unknown. }; struct Struct8033B2B8 { /*0x00*/ s8 unk0; union { /*0x08*/ Vec3s unk8; /*0x08*/ long long int force_structure_alignment; } myUnion; }; // size = 0x10 // unsorted // Camera command procedures are marked as returning s32, but none of them // actually return a value. This causes undefined behavior, which we'd rather // avoid on modern GCC. Hence, typedef. Interestingly, the void vs s32 // difference doesn't affect -g codegen, only -O2. #if BUGFIXES_CRITICAL typedef void CmdRet; #else typedef s32 CmdRet; #endif typedef CmdRet (*CameraCommandProc)(struct LevelCamera *a); struct TableCamera { s8 area; CameraCommandProc unk4; s16 unk8; s16 unkA; s16 unkC; s16 unkE; s16 unk10; s16 unk12; s16 unk14; }; struct CutsceneTableEntry { CameraCommandProc unk0; s16 unk4; }; struct Struct8033B230 { /*0x00*/ u8 unk0; /*0x04*/ f32 fieldOfView; /*0x08*/ f32 unk8; /*0x0C*/ u32 unkC; /*0x10*/ f32 unk10; /*0x14*/ s16 unk14; /*0x16*/ s16 unk16; /*0x18*/ s16 unk18; }; /** * Information for a control point in a spline segment. */ struct CutsceneSplinePoint { /* The index of this point in the spline. Ignored except for -1, which ends the spline. An index of -1 should come four points after the start of the last segment. */ s8 index; /* Roughly controls the number of frames it takes to progress through the spline segment. See move_point_along_spline() in camera.c */ u8 speed; Vec3s point; }; struct PlayerGeometry { /*0x00*/ struct Surface *currFloor; /*0x04*/ f32 currFloorHeight; /*0x08*/ s16 currFloorType; /*0x0C*/ struct Surface *currCeil; /*0x10*/ s16 currCeilType; /*0x14*/ f32 currCeilHeight; /*0x18*/ struct Surface *prevFloor; /*0x1C*/ f32 prevFloorHeight; /*0x20*/ s16 prevFloorType; /*0x24*/ struct Surface *prevCeil; /*0x28*/ f32 prevCeilHeight; /*0x2C*/ s16 prevCeilType; /*0x30*/ f32 waterHeight; }; struct Struct8033B418_sub { Vec3f unk0; Vec3f unkC; f32 unk18; s16 unk1C; s16 unk1E; }; struct Struct8033B418 { s16 unk0; s16 unk2; s16 unk4; s16 unk6; struct Struct8033B418_sub unk8; struct Struct8033B418_sub unk28; }; struct ParallelTrackingTable { s16 unk0; Vec3f unk4; f32 unk10; f32 unk14; }; struct Struct8033B4B8 { /*0x00*/ Vec3f pos; /*0x0C*/ Vec3f focus; /*0x18*/ f32 unk18; /*0x1C*/ f32 unk1C; }; struct Struct8033B6F0 { s32 unk0; Vec3f unk4; Vec3f unk10; Vec3s unk1C; s16 unk22; }; struct CameraState { /*0x00*/ Vec3f camFocAndPosCurrAndGoal[4]; /*0x30*/ u8 filler30[12]; // extra unused Vec3f? /*0x3C*/ u8 modeActive; /*0x3D*/ u8 modeDefault; /*0x3E*/ u8 filler3E[10]; /*0x48*/ float focusDistance; //unused /*0x4C*/ s16 pitch; //unused /*0x4E*/ s16 yaw; //unused /*0x50*/ u8 filler50[2]; /*0x52*/ Vec3s shakeMagnitude; /*0x58*/ s16 shakePitchOffset; /*0x5A*/ s16 shakePitchIncrement; /*0x5C*/ s16 shakePitchMagIncrement; /*0x5E*/ u8 filler5E[2]; /*0x60*/ Vec3f unk60; //unused /*0x6C*/ Vec3s unk6C; //unused /*0x72*/ u8 filler72[8]; /*0x7A*/ s16 roll; /*0x7C*/ s16 trueYaw; /*0x7E*/ s16 storedYaw; /*0x80*/ Vec3f focus; /*0x8C*/ Vec3f pos; /*0x98*/ s16 shakeRollOffset; /*0x9A*/ s16 shakeRollIncrement; /*0x9C*/ s16 shakeRollMagIncrement; /*0x9E*/ s16 shakeYawOffset; /*0xA0*/ s16 shakeYawIncrement; /*0xA2*/ s16 shakeYawMagIncrement; /*0xA4*/ float unkA4; /*0xA8*/ float unkA8; /*0xAC*/ float unkAC; /*0xB0*/ float unkB0; /*0xB4*/ s16 cameraKeyCutsceneRollOffset; /*0xB8*/ u32 lastFrameAction; /*0xBC*/ s16 unkBC; }; // bss order hack to not affect BSS order. if possible, remove me, but it will be hard to match otherwise #ifndef INCLUDED_FROM_CAMERA_C // BSS extern struct CameraPlayerStatus gPlayerStatusForCamera[2]; extern s16 gCameraModeFlags; extern s16 sCameraSideCFlags; extern s16 gCameraFlags1; extern u16 gCButtonsPressed; extern struct CameraState gCameraStatus; extern s16 gCameraMovementFlags; extern s32 gCutsceneActive; extern struct LevelCamera *gCurrLevelCamera; #endif extern struct Object *gCutsceneFocus; extern struct Object *gSecondCameraFocus; // TODO: sort all of this extremely messy shit out after the split // TODO: bring in some externs from camera.c extern Vec3f sFixedPresetBasePosition; extern u8 D_8032D0B8[]; extern void set_camera_shake(s16); extern void set_camera_shake_2(s16); extern void func_8027F440(s16, f32, f32, f32); extern void operate_c_up_looking(struct LevelCamera *); // static (ASM) extern void init_transitional_movement(UNUSED struct LevelCamera *, s16); extern void func_80285BD8(struct LevelCamera *, s16, s16); extern void update_camera(struct LevelCamera *); extern void reset_camera(struct LevelCamera *); extern void init_camera(struct LevelCamera *); extern void select_mario_cam_mode(void); extern Gfx *geo_camera_preset_and_pos(s32 a, struct GraphNode *b, struct AllocOnlyPool *c); extern void dummy_802877D8(struct LevelCamera *); extern void dummy_802877EC(struct LevelCamera *); extern void vec3f_sub(Vec3f, Vec3f); extern void object_pos_to_vec3f(Vec3f, struct Object *); extern void vec3f_to_object_pos(struct Object *, Vec3f); // static (ASM) extern s32 move_point_along_spline(Vec3f, struct CutsceneSplinePoint[], s16 *, f32 *); extern s32 select_or_activate_mario_cam(s32 angle); extern s32 test_or_set_mario_cam_active(s32); extern void set_spline_values(u8); extern void set_face_angle_from_spline(Vec3f, Vec3f); extern s32 find_c_buttons_pressed(u16, u16, u16); extern s32 update_camera_status(struct LevelCamera *); extern s32 find_and_return_count_wall_collisions(Vec3f, f32, f32); extern s32 clamp_pitch(Vec3f a, Vec3f b, s16 c, s16 d); extern s32 is_within_100_units_of_mario(f32, f32, f32); extern s32 set_or_approach_f32_exponential(f32 *, f32, f32); extern s32 approach_f32_exponential_bool(f32 *, f32, f32); extern f32 approach_f32_exponential(f32, f32, f32); // static (ASM) extern s32 approach_s16_exponential_bool(s16 *, s16, s16); extern s32 approach_s16_exponential(s16, s16, s16); // static (ASM) extern void approach_vec3f_exponential(Vec3f, Vec3f, f32, f32, f32); // static (ASM) extern void set_or_approach_vec3f_exponential(Vec3f, Vec3f, f32, f32, f32); // postdefined // extern ? approach_vec3s_exponential(?); extern s32 camera_approach_s16_symmetric_bool(s16 *a, s16 b, s16 c); // extern ? camera_approach_s16_symmetric(?); extern s32 set_or_approach_s16_symmetric(s16 *a, s16 b, s16 c); // postdefined extern s32 camera_approach_f32_symmetric_bool(f32 *, f32, f32); extern f32 camera_approach_f32_symmetric(f32, f32, f32); void random_vec3s(Vec3s a, s16 b, s16 c, s16 d); // postdefined // extern ? func_80289738(?); extern s32 clamp_positions_and_find_yaw_angle(Vec3f, Vec3f, f32, f32, f32, f32); // extern ? func_80289A98(?); // extern ? is_pos_less_than_bounds(?); // extern ? is_behind_surface(?); extern s32 func_8028A0D4(Vec3f a, Vec3f b, struct Surface *c, s16 d, s16 e); // extern ? is_mario_behind_surface(?); extern void scale_along_line(Vec3f, Vec3f, Vec3f, f32); // extern ? check_if_vector_fits_in_bounds(?); extern s16 calculate_verticle_angle(Vec3f, Vec3f); extern s16 calculate_yaw(Vec3f, Vec3f); extern void calculate_angles(Vec3f, Vec3f, s16 *, s16 *); extern f32 calc_abs_dist(Vec3f, Vec3f); extern f32 calc_hor_dist(Vec3f, Vec3f); extern void rotate_in_xz(Vec3f, Vec3f, s16); extern void rotate_in_yz(Vec3f, Vec3f, s16); extern void set_camera_pitch_shake(s16, s16, s16); extern void set_camera_yaw_shake(s16, s16, s16); extern void set_camera_roll_shake(s16, s16, s16); extern void func_8028AA80(s16, s16, s16, f32, f32, f32, f32); // extern ? Unknown8028AB34(?); // extern ? increment_shake_offset(?); extern void shake_camera_pitch(); // postdefined extern void shake_camera_yaw(); // postdefined extern void shake_camera_roll(s16 *); // postdefined extern s32 func_8028AF24(struct LevelCamera *a, s16 b); // extern ? func_8028B13C(?); // extern ? func_8028B16C(?); extern void play_camera_buzz_if_cdown(void); extern void play_camera_buzz_if_cbutton(void); extern void play_camera_buzz_if_c_sideways(void); extern void play_sound_cbutton_up(void); extern void play_sound_cbutton_down(void); extern void play_sound_cbutton_side(void); extern void play_sound_button_change_blocked(void); // postdefined extern void play_sound_rbutton_changed(void); // postdefined extern void func_8028B36C(void); // postdefined extern s32 func_8028B3DC(struct LevelCamera *a, f32 b); extern s32 stop_mario(s32); extern void handle_c_button_movement(struct LevelCamera *); // extern ? func_8028BA38(?); extern void set_camera_cutscene_table(struct LevelCamera *a, u8 b); // postdefined // extern ? determine_star_fadeout_cutscene_table(?); // extern ? return_table_door_push_or_pull(?); extern u8 return_cutscene_table(); // postdefined extern void instant_warp_camera_update(f32, f32, f32); extern void approach_camera_height(struct LevelCamera *, f32, f32); // extern ? Unknown8028C3AC(?); // extern ? set_focus_position(?); // extern ? Unknown8028C508(?); extern void set_pos_from_face_angle_and_vec3f(Vec3f, Vec3f, Vec3f, Vec3s); // extern ? set_pos_from_face_angle_and_rel_coords(?); // extern ? determine_pushing_or_pulling_door(?); s16 func_8028C824(Vec3f a, Vec3f b, Vec3f c, Vec3f d, Vec3f e, Vec3f f, s16 g); // postdefined // extern ? Unknown8028CE1C(?); // extern ? set_camera_preset_fixed_ref_point(?); // extern ? set_camera_preset_platform_level(?); // extern ? set_camera_preset_boss_fight(?); // extern ? set_camera_preset_close_cam(?); // extern ? set_camera_preset_open_camera(?); // extern ? parallel_tracking_init(?); extern void set_fixed_cam_axis_sa_lobby(s16 preset); // postdefined // extern ? func_8028D32C(?); // extern ? CameraRR00(?); // extern ? CameraRR04(?); // extern ? CameraRR02(?); // extern ? CameraRR0305(?); // extern ? CameraRR01(?); // extern ? CameraCotMC00(?); // extern ? CameraSL00(?); // extern ? camera_change_set_free_roam_mode(?); // extern ? camera_change_hmc_maze_entrance(?); // extern ? CameraHMC02(?); // extern ? CameraHMC03(?); // extern ? CameraHMC04(?); // extern ? CameraHMC05(?); // extern ? CameraSSL00(?); // extern ? CameraSSL0102(?); // extern ? CameraSSL03(?); // extern ? CameraTHI00(?); // extern ? CameraTHI01(?); // extern ? CameraRR07(?); // extern ? CameraRR08(?); // extern ? camera_change_hmc_cotmc_pool_entry(?); // extern ? CameraInside20(?); // extern ? CameraInside1E(?); // extern ? CameraInside1F(?); // extern ? CameraInside01(?); // extern ? CameraInside1213(?); // extern ? CameraUnused(?); // extern ? CameraInside00(?); // extern ? CameraInside0E(?); // extern ? CameraInside0F(?); // extern ? bbh_room_6_camera(?); // extern ? CameraBBH24(?); // extern ? CameraBBH2E2F(?); // extern ? bbh_room_1_camera(?); // extern ? CameraBBH01(?); // extern ? bbh_room_2_lower_camera(?); // extern ? bbh_room_4_camera(?); // extern ? bbh_room_8_camera(?); // extern ? bbh_room_5_library_camera(?); // extern ? bbh_room_5_library_to_hidden_transition(?); // extern ? bbh_room_5_hidden_to_library_transition(?); // extern ? bbh_room_5_hidden_camera(?); // extern ? bbh_room_3_camera(?); // extern ? bbh_room_7_mr_i_camera(?); // extern ? bbh_room_7_mr_i_to_coffins_transition(?); // extern ? bbh_room_7_coffins_to_mr_i_transition(?); // extern ? CameraBBH3033(?); // extern ? CameraBBH34(?); // extern ? CameraBBH38(?); // extern ? bbh_room_12_upper_camera(?); // extern ? CameraBBH00(?); // extern ? bbh_room_2_library_camera(?); // extern ? bbh_room_2_library_to_trapdoor_transition(?); // extern ? bbh_room_2_trapdoor_camera(?); // extern ? bbh_room_2_trapdoor_transition(?); // extern ? bbh_room_9_attic_camera(?); // extern ? bbh_room_9_attic_transition(?); // extern ? bbh_room_9_mr_i_transition(?); // extern ? bbh_room_13_balcony_camera(?); // extern ? bbh_room_0_camera(?); // extern ? camera_change_activate_ccm_slide_flag(?); // extern ? camera_change_deactivate_ccm_slide_flag(?); // extern ? surface_type_presets(?); // extern ? set_preset_via_surface_or_input(?); // extern ? surface_type_presets_thi(?); extern s16 level_specific_camera_update(struct LevelCamera *); // postdefined extern void resolve_geometry_collisions(Vec3f, Vec3f); extern s32 func_8028F2F0(struct LevelCamera *, Vec3f, s16 *, s16); extern void find_mario_relative_geometry(struct PlayerGeometry *); // postdefined // extern ? func_8028F800(?); extern u8 func_8028F834(u8); extern s16 cutscene_object_with_dialog(u8 cutsceneTable, struct Object *, s16); extern s16 cutscene_object_without_dialog(u8, struct Object *); extern s16 cutscene_object(u8, struct Object *); // extern ? set_cam_yaw_from_focus_and_pos(?); // extern ? func_8028FABC(?); // extern ? func_8028FAE0(?); // extern ? cap_switch_save(?); // extern ? func_8028FB80(?); // extern ? func_8028FBD8(?); // extern ? func_8028FD94(?); // extern ? Unknown8028FDE8(?); // extern ? Cutscene26Todo_0(?); // extern ? Unknown8028FE50(?); // extern ? CutsceneIntroPeach0_2(?); // extern ? CutsceneIntroPeach2_1(?); // extern ? func_8028FEDC(?); // extern ? move_credits_camera(?); // extern ? func_80290144(?); // extern ? func_802901B4(?); // extern ? func_80290224(?); // extern ? func_802902A8(?); // extern ? unused_vec3s_to_vec3f(?); // extern ? unused_vec3f_to_vec3s(?); // extern ? rotate_camera(?); // extern ? CutsceneEnterSomething8029041C(?); // extern ? Unknown80290450(?); // extern ? rotate_and_move_vec3f(?); // extern ? func_80290514(?); // extern ? func_80290564(?); // extern ? func_80290598(?); // extern ? Unknown802905C8(?); // extern ? Cutscene0FTodo_0(?); // extern ? Cutscene0FTodo_1(?); // extern ? CutscenePeachEnd80290604(?); // extern ? CutscenePeachEnd8029065C(?); // extern ? CutscenePeachEnd0(?); // extern ? CutscenePeachEnd2(?); // extern ? CutscenePeachEnd367_1(?); // extern ? CutscenePeachEnd80290870(?); // extern ? CutscenePeachEnd3(?); // extern ? CutscenePeachEnd1(?); // extern ? CutscenePeachEnd80290A34(?); // extern ? CutscenePeachEnd4(?); // extern ? CutscenePeachEnd80290B88(?); // extern ? CutscenePeachEnd80290BC8(?); // extern ? CutscenePeachEnd80290C3C(?); // extern ? CutscenePeachEnd80290C78(?); // extern ? CutscenePeachEnd5(?); // extern ? CutscenePeachEnd6(?); // extern ? CutscenePeachEnd80290E8C(?); // extern ? CutscenePeachEnd7(?); // extern ? CutscenePeachEnd8(?); // extern ? CutscenePeachEnd80291014(?); // extern ? CutscenePeachEnd80291078(?); // extern ? CutscenePeachEnd9(?); // extern ? CutscenePeachEnd802911A4(?); // extern ? CutscenePeachEnd8029120C(?); // extern ? CutscenePeachEndA(?); // extern ? CutscenePeachEndB(?); // extern ? CutsceneGrandStar80291324(?); // extern ? CutsceneGrandStar8029139C(?); // extern ? CutsceneGrandStar80291474(?); // extern ? CutsceneGrandStar802914D8(?); // extern ? CutsceneGrandStar80291528(?); // extern ? CutsceneGrandStar802915B4(?); // extern ? CutsceneGrandStar802915FC(?); // extern ? CutsceneGrandStar0(?); // extern ? CutsceneGrandStar80291770(?); // extern ? CutsceneGrandStar80291844(?); // extern ? CutsceneGrandStar802918D8(?); // extern ? CutsceneGrandStar802919F8(?); // extern ? CutsceneGrandStar1(?); // extern ? func_80291BBC(?); // extern ? CutsceneDance80291C4C(?); // extern ? CutsceneStarDance80291CE4(?); // extern ? CutsceneStarDance80291D30(?); // extern ? CutsceneStarDance80291D78(?); // extern ? Unknown80291DC0(?); // extern ? CutsceneStarDance80291DD4(?); // extern ? CutsceneStarDance80291E0C(?); // extern ? CutsceneStarDance80291E44(?); // extern ? CutsceneStarDance1(?); // extern ? func_80291FE8(?); // extern ? CutsceneStarDance8029209C(?); // extern ? CutsceneStarDance80292190(?); // extern ? CutsceneStarDance80292228(?); // extern ? CutsceneStarDance80292334(?); // extern ? CutsceneStarDance802923E0(?); // extern ? CutsceneStarDance8029240C(?); // extern ? CutsceneStarDance3(?); // extern ? CutsceneStarDance802925C0(?); // extern ? CutsceneStarDance80292740(?); // extern ? CutsceneStarDance802927EC(?); // extern ? func_80292884(?); // extern ? CutsceneStarDance80292900(?); // extern ? CutsceneStarDance80292958(?); // extern ? CutsceneStarDance802929A4(?); // extern ? CutsceneStarDance2(?); // extern ? CutsceneKeyDance80292AB0(?); // extern ? CutsceneKeyDance80292B24(?); // extern ? CutsceneKeyDance80292B80(?); // extern ? CutsceneKeyDance80292BE0(?); // extern ? CutsceneKeyDance80292C4C(?); // extern ? CutsceneKeyDance80292CB4(?); // extern ? CutsceneKeyDance80292CE8(?); // extern ? CutsceneKeyDance80292D14(?); // extern ? CutsceneKeyDance(?); // extern ? CutsceneEnterBowserPlatform80292E48(?); // extern ? CutsceneEnterBowserPlatform80292E74(?); // extern ? CutsceneEnterBowserPlatform80292E98(?); // extern ? CutsceneEnterBowserPlatform80292F08(?); // extern ? CutsceneEnterBowserPlatform80292FA0(?); // extern ? CutsceneEnterBowserPlatform80292FE4(?); // extern ? CutsceneEnterBowserPlatform8029305C(?); // extern ? CutsceneEnterBowserPlatform8029309C(?); // extern ? func_802930C8(?); // extern ? CutsceneEnterBowserPlatform802930F4(?); // extern ? CutsceneEnterBowserPlatform802931A8(?); // extern ? CutsceneEnterBowserPlatform1(?); // extern ? CutsceneEnterBowserPlatform2(?); // extern ? CutsceneEnterBowserPlatform0(?); // extern ? CutsceneStarSpawn8029347C(?); // extern ? CutsceneStarSpawn802934A8(?); // extern ? CutsceneStarSpawn80293530(?); // extern ? CutsceneStarSpawn802935B4(?); // extern ? CutsceneStarSpawn0(?); // extern ? CutsceneStarSpawn1(?); // extern ? CutsceneStarSpawn2(?); // extern ? CutsceneExitWaterfall80293750(?); // extern ? Cutscene80293794(?); // extern ? CutsceneExitWaterfall0(?); // extern ? CutsceneFallCommon1(?); // extern ? CutsceneFallToCastleGrounds802938EC(?); // extern ? CutsceneFallToCastleGrounds0(?); // extern ? CutsceneSpecialStarSpawn8029398C(?); // extern ? CutsceneSpecialStarSpawn802939E4(?); // extern ? CutsceneSpecialStarSpawn80293A48(?); // extern ? CutsceneSpecialStarSpawn80293A8C(?); // extern ? CutsceneSpecialStarSpawn80293ACC(?); // extern ? CutsceneSpecialStarSpawn80293C8C(?); // extern ? CutsceneSpecialStarSpawn0(?); // extern ? CutsceneSpecialStarSpawn1(?); // extern ? func_80293DE8(?); // extern ? CutscenePrepareCannon802940D8(?); // extern ? CutscenePrepareCannon80294164(?); // extern ? func_802941CC(?); // extern ? CutscenePrepareCannon80294260(?); // extern ? CutscenePrepareCannon0(?); // extern ? CutscenePrepareCannon1(?); // extern ? func_802944A8(?); // extern ? func_80294538(?); // extern ? CutsceneDeath80294574(?); // extern ? CutsceneDeath802945E8(?); // extern ? CutsceneDeath1(?); // extern ? CutsceneDeath80294684(?); // extern ? CutsceneDeath80294708(?); // extern ? Unknown80294748(?); // extern ? CutsceneDeath2(?); // extern ? CutsceneBBHDeath802947E4(?); // extern ? CutsceneBBHDeath80294868(?); // extern ? CutsceneBBHDeath(?); // extern ? CutsceneQuicksandDeath80294918(?); // extern ? CutsceneQuicksandDeath80294954(?); // extern ? CutsceneQuicksandDeath0(?); // extern ? Cutscene1ATodo80294A70(?); // extern ? Cutscene1ATodo80294B00(?); // extern ? Cutscene1ATodo80294BB0(?); // extern ? Cutscene1ATodo(?); // extern ? CutsceneEnterPool80294CD0(?); // extern ? CutsceneEnterPool80294D9C(?); // extern ? CutsceneEnterPool0(?); // extern ? Cutscene26Todo80294E40(?); // extern ? Cutscene26Todo80294EAC(?); // extern ? Cutscene26Todo80294ED8(?); // extern ? Cutscene26Todo80294F40(?); // extern ? Cutscene26Todo80295030(?); // extern ? Cutscene26Todo80295100(?); // extern ? Cutscene26Todo8029512C(?); // extern ? Cutscene26Todo_1(?); // extern ? Cutscene26Todo_2(?); // extern ? CutsceneEnterPyramidTop80295294(?); // extern ? CutsceneEnterPyramidTop0(?); // extern ? Unknown8029538C(?); // extern ? CutsceneDialog80295418(?); // extern ? CutsceneDialog80295568(?); // extern ? CutsceneDialog8029579C(?); // extern ? CutsceneDialog0(?); // extern ? CutsceneDialog1(?); // extern ? CutsceneDialog2(?); // extern ? CutsceneReadMessage80295998(?); // extern ? Unknown80295A28(?); // extern ? CutsceneReadMessage0(?); // extern ? CutsceneReadMessage1(?); // extern ? CutsceneReadMessage2(?); // extern ? CutsceneExitSuccess1(?); // extern ? CutsceneExitSuccess2(?); // extern ? CutsceneExitSuccess4(?); // extern ? CutsceneExitSuccess3(?); // extern ? CutsceneExitBowserSuccess80296014(?); // extern ? CutsceneExitSuccess5(?); // extern ? CutsceneExitBowserSuccess0(?); // extern ? CutsceneExitNonPainting1(?); // extern ? CutsceneBBHExitSuccess02961D4(?); // extern ? CutsceneBBHExitSuccess0(?); // extern ? CutsceneNonPaintingDeath0_1(?); // extern ? Cutscene1CTodo_0(?); // extern ? CutsceneNonPaintingDeath0_2(?); // extern ? CutsceneNonPaintingDeath0(?); // extern ? CutsceneCapSwitchPress0_1(?); // extern ? CutsceneCapSwitchPress0_4(?); // extern ? CutsceneCapSwitchPress0_5(?); // extern ? CutsceneCapSwitchPress0_2(?); // extern ? CutsceneCapSwitchPress0_3(?); // extern ? CutsceneCapSwitchPress0_6(?); // extern ? Unknown802968E8(?); // extern ? CutsceneCapSwitchPress(?); // extern ? CutsceneUnlockKeyDoor80296AC0(?); // extern ? CutsceneUnlockKeyDoor80296B84(?); // extern ? CutsceneUnlockKeyDoor80296C08(?); // extern ? CutsceneUnlockKeyDoor80296C64(?); // extern ? CutsceneUnlockKeyDoor80296C78(?); // extern ? CutsceneUnlockKeyDoor80296CFC(?); // extern ? CutsceneUnlockKeyDoor0(?); // extern ? func_80296DDC(?); // extern ? peach_letter_text(?); // extern ? CutsceneIntroPeachCommon(?); // extern ? CutsceneIntroPeach4(?); // extern ? CutsceneIntroPeach3_2(?); // extern ? CutsceneIntroPeach2_2(?); // extern ? CutsceneIntroPeach0_1(?); // extern ? CutsceneIntroPeach3_1(?); // extern ? CutsceneIntroPeach3_3(?); // extern ? intro_pipe_exit_text(?); // extern ? CutsceneIntroPeach2(?); // extern ? CutsceneIntroPeach3(?); // extern ? CutsceneIntroPeach1(?); // extern ? CutsceneIntroPeach0(?); // extern ? CutsceneEndWaving0_1(?); // extern ? CutsceneEndWaving0(?); // extern ? CutsceneCredits0_1(?); // extern ? CutsceneCredits0(?); // extern ? CutsceneSlidingDoorsOpen0_1(?); // extern ? CutsceneSlidingDoorsOpen0_2(?); // extern ? CutsceneSlidingDoorsOpen0_3(?); // extern ? CutsceneSlidingDoorsOpen0_4(?); // extern ? CutsceneSlidingDoorsOpen0_5(?); // extern ? CutsceneSlidingDoorsOpen0(?); // extern ? CutsceneDoubleDoorsOpen1(?); // extern ? CutsceneEnterPainting0_1(?); // extern ? CutsceneEnterPainting0(?); // extern ? CutsceneExitPainting80298094(?); // extern ? CutsceneExitPainting80298230(?); // extern ? CutsceneExitPainting802982CC(?); // extern ? CutsceneExitPainting0(?); // extern ? Cutscene11Todo_0(?); // extern ? Cutscene11Todo_1(?); // extern ? CutsceneExitPainting1(?); // extern ? CutsceneEnterCannon2(?); // extern ? CutsceneEnterCannon1(?); // extern ? CutsceneEnterCannon0(?); // extern ? CutsceneDoor0(?); // extern ? CutsceneDoor1(?); // extern ? CutsceneDoorWarp1(?); // extern ? CutsceneDoor2(?); // extern ? CutsceneDoor3(?); // extern ? CutsceneDoor4(?); // extern ? CutsceneDoorAB_2(?); extern void handle_cutscenes(struct LevelCamera *); extern s32 call_cutscene_func_in_time_range(CameraCommandProc, struct LevelCamera *, s16, s16); extern s32 set_cutscene_phase_at_frame(s32 phase, s16 frame); extern void func_80299C98(s16, s16, s16); // extern ? func_80299D00(?); extern void set_fov_function(u8); extern void func_8029A494(u8); extern void func_8029A514(u8, f32, f32, f32); // extern ? Unknown8029A664(?); // extern ? Unknown8029A724(?); extern void func_8029A7DC(struct Object *, Vec3f, s16, s16, s16, s16); // extern ? func_8029A87C(?); // extern ? bhv_intro_peach_loop(?); // extern ? func_8029AB70(?); // extern ? func_8029AC3C(?); // extern ? func_8029ACAC(?); // extern ? bhv_intro_lakitu_loop(?); // extern ? bhv_end_birds_1_loop(?); // extern ? bhv_end_birds_2_loop(?); // extern ? func_8029B964(?); // extern ? bhv_intro_scene_loop(?); extern Gfx *geo_camera_fov(s32 a, struct GraphNode *b, UNUSED struct AllocOnlyPool *c); #endif /* _CAMERA_H */