You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
277 lines
10 KiB
C
277 lines
10 KiB
C
|
|
/**
|
|
* Table that dictates camera movement in bookend room.
|
|
* Due to only the X being varied in the table, this only moves along the X axis linearly.
|
|
* Third entry is seemingly unused.
|
|
*/
|
|
struct ParallelTrackingPoint sBBHLibraryParTrackPath[] = {
|
|
{ 1, { -929.0f, 1619.0f, -1490.0f }, 50.0f, 0.0f },
|
|
{ 0, { -2118.0f, 1619.0f, -1490.0f }, 50.0f, 0.0f },
|
|
{ 0, { 0.0f, 0.0f, 0.0f }, 0.0f, 0.0f },
|
|
};
|
|
|
|
void cam_bbh_room_6(struct Camera *c) {
|
|
parallel_tracking_init(c, sBBHLibraryParTrackPath);
|
|
}
|
|
|
|
void cam_bbh_fall_off_roof(struct Camera *c) {
|
|
set_camera_mode_close_cam(&c->mode);
|
|
}
|
|
|
|
void cam_bbh_fall_into_pool(struct Camera *c) {
|
|
Vec3f dir;
|
|
set_camera_mode_close_cam(&c->mode);
|
|
vec3f_set(dir, 0.f, 0.f, 300.f);
|
|
offset_rotated(gLakituState.goalPos, sMarioCamState->pos, dir, sMarioCamState->faceAngle);
|
|
gLakituState.goalPos[1] = -2300.f;
|
|
vec3f_copy(c->pos, gLakituState.goalPos);
|
|
sStatusFlags &= ~CAM_FLAG_SMOOTH_MOVEMENT;
|
|
}
|
|
|
|
void cam_bbh_room_1(struct Camera *c) {
|
|
set_camera_mode_fixed(c, 956, 440, 1994);
|
|
}
|
|
|
|
void cam_bbh_leave_front_door(struct Camera *c) {
|
|
c->doorStatus = DOOR_LEAVING_SPECIAL;
|
|
cam_bbh_room_1(c);
|
|
}
|
|
|
|
void cam_bbh_room_2_lower(struct Camera *c) {
|
|
set_camera_mode_fixed(c, 2591, 400, 1284);
|
|
}
|
|
|
|
void cam_bbh_room_4(struct Camera *c) {
|
|
set_camera_mode_fixed(c, 3529, 340, -1384);
|
|
}
|
|
|
|
void cam_bbh_room_8(struct Camera *c) {
|
|
set_camera_mode_fixed(c, -500, 740, -1306);
|
|
}
|
|
|
|
/**
|
|
* In BBH's room 5's library (the first floor room with the vanish cap/boo painting)
|
|
* set the camera mode to fixed and position to (-2172, 200, 675)
|
|
*/
|
|
void cam_bbh_room_5_library(struct Camera *c) {
|
|
set_camera_mode_fixed(c, -2172, 200, 675);
|
|
}
|
|
|
|
/**
|
|
* In BBH's room 5 (the first floor room with the vanish cap/boo painting)
|
|
* set the camera mode to to the hidden room's position
|
|
* if coming from the library.
|
|
*/
|
|
void cam_bbh_room_5_library_to_hidden_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, -2172, 200, 675) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_5_hidden_to_library_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, -1542, 320, -307) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_5_hidden(struct Camera *c) {
|
|
c->doorStatus = DOOR_LEAVING_SPECIAL;
|
|
set_camera_mode_fixed(c, -1542, 320, -307);
|
|
}
|
|
|
|
void cam_bbh_room_3(struct Camera *c) {
|
|
set_camera_mode_fixed(c, -1893, 320, 2327);
|
|
}
|
|
|
|
void cam_bbh_room_7_mr_i(struct Camera *c) {
|
|
set_camera_mode_fixed(c, 1371, 360, -1302);
|
|
}
|
|
|
|
void cam_bbh_room_7_mr_i_to_coffins_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, 1371, 360, -1302) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_7_coffins_to_mr_i_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, 2115, 260, -772) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_elevator_room_lower(struct Camera *c) {
|
|
c->doorStatus = DOOR_LEAVING_SPECIAL;
|
|
set_camera_mode_close_cam(&c->mode);
|
|
}
|
|
|
|
void cam_bbh_room_0_back_entrance(struct Camera *c) {
|
|
set_camera_mode_close_cam(&c->mode);
|
|
}
|
|
|
|
void cam_bbh_elevator(struct Camera *c) {
|
|
if (c->mode == CAMERA_MODE_FIXED) {
|
|
set_camera_mode_close_cam(&c->mode);
|
|
c->pos[1] = -405.f;
|
|
gLakituState.goalPos[1] = -405.f;
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_12_upper(struct Camera *c) {
|
|
c->doorStatus = DOOR_LEAVING_SPECIAL;
|
|
set_camera_mode_fixed(c, -2932, 296, 4429);
|
|
}
|
|
|
|
void cam_bbh_enter_front_door(struct Camera *c) {
|
|
set_camera_mode_close_cam(&c->mode);
|
|
}
|
|
|
|
void cam_bbh_room_2_library(struct Camera *c) {
|
|
set_camera_mode_fixed(c, 3493, 440, 617);
|
|
}
|
|
|
|
void cam_bbh_room_2_library_to_trapdoor_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, 3493, 440, 617) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_2_trapdoor(struct Camera *c) {
|
|
set_camera_mode_fixed(c, 3502, 440, 1217);
|
|
}
|
|
|
|
void cam_bbh_room_2_trapdoor_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, 3502, 440, 1217) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_9_attic(struct Camera *c) {
|
|
set_camera_mode_fixed(c, -670, 460, 372);
|
|
}
|
|
|
|
void cam_bbh_room_9_attic_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, -670, 460, 372) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_9_mr_i_transition(struct Camera *c) {
|
|
if (set_camera_mode_fixed(c, 131, 380, -263) == 1) {
|
|
transition_next_state(c, 20);
|
|
}
|
|
}
|
|
|
|
void cam_bbh_room_13_balcony(struct Camera *c) {
|
|
set_camera_mode_fixed(c, 210, 420, 3109);
|
|
}
|
|
|
|
void cam_bbh_room_0(struct Camera *c) {
|
|
c->doorStatus = DOOR_LEAVING_SPECIAL;
|
|
set_camera_mode_fixed(c, -204, 807, 204);
|
|
}
|
|
|
|
/**
|
|
* The BBH triggers are the most complex, they cause the camera to enter fixed mode for each room,
|
|
* transition between rooms, and enter free roam when outside.
|
|
*
|
|
* The triggers are also responsible for warping the camera below platforms.
|
|
*/
|
|
struct CameraTrigger sCamBBH[] = {
|
|
{ 1, cam_bbh_enter_front_door, 742, 0, 2369, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_leave_front_door, 741, 0, 1827, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 222, 0, 1458, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 222, 0, 639, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 435, 0, 222, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 1613, 0, 222, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 1827, 0, 1459, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, -495, 819, 1407, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, -495, 819, 640, 250, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 179, 819, 222, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 1613, 819, 222, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 1827, 819, 486, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 1827, 819, 1818, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_2_lower, 2369, 0, 1459, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_2_lower, 3354, 0, 1347, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_2_lower, 2867, 514, 1843, 512, 102, 409, 0 },
|
|
{ 1, cam_bbh_room_4, 3354, 0, 804, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_4, 1613, 0, -320, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_8, 435, 0, -320, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_5_library, -2021, 0, 803, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_5_library, -320, 0, 640, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_5_library_to_hidden_transition, -1536, 358, -254, 716, 363, 102, 0 },
|
|
{ 1, cam_bbh_room_5_hidden_to_library_transition, -1536, 358, -459, 716, 363, 102, 0 },
|
|
{ 1, cam_bbh_room_5_hidden, -1560, 0, -1314, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_3, -320, 0, 1459, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_3, -2021, 0, 1345, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_2_library, 2369, 819, 486, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_2_library, 2369, 1741, 486, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_2_library_to_trapdoor_transition, 2867, 1228, 1174, 716, 414, 102, 0 },
|
|
{ 1, cam_bbh_room_2_trapdoor_transition, 2867, 1228, 1378, 716, 414, 102, 0 },
|
|
{ 1, cam_bbh_room_2_trapdoor, 2369, 819, 1818, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_9_attic, 1829, 1741, 486, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_9_attic, 741, 1741, 1587, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_9_attic_transition, 102, 2048, -191, 100, 310, 307, 0 },
|
|
{ 1, cam_bbh_room_9_mr_i_transition, 409, 2048, -191, 100, 310, 307, 0 },
|
|
{ 1, cam_bbh_room_13_balcony, 742, 1922, 2164, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_fall_off_roof, 587, 1322, 2677, 1000, 400, 600, 0 },
|
|
{ 1, cam_bbh_room_3, -1037, 819, 1408, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_3, -1970, 1024, 1345, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_8, 179, 819, -320, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_7_mr_i, 1613, 819, -320, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_7_mr_i_to_coffins_transition, 2099, 1228, -819, 102, 414, 716, 0 },
|
|
{ 1, cam_bbh_room_7_coffins_to_mr_i_transition, 2304, 1228, -819, 102, 414, 716, 0 },
|
|
{ 1, cam_bbh_room_6, -1037, 819, 640, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_6, -1970, 1024, 803, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_room_1, 1827, 819, 1818, 200, 200, 200, 0 },
|
|
{ 1, cam_bbh_fall_into_pool, 2355, -1112, -193, 1228, 500, 1343, 0 },
|
|
{ 1, cam_bbh_fall_into_pool, 2355, -1727, 1410, 1228, 500, 705, 0 },
|
|
{ 1, cam_bbh_elevator_room_lower, 0, -2457, 1827, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_elevator_room_lower, 0, -2457, 2369, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_elevator_room_lower, 0, -2457, 4929, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_elevator_room_lower, 0, -2457, 4387, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_room_0_back_entrance, 1887, -2457, 204, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_room_0, 1272, -2457, 204, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_room_0, -1681, -2457, 204, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_room_0_back_entrance, -2296, -2457, 204, 250, 200, 250, 0 },
|
|
{ 1, cam_bbh_elevator, -2939, -605, 5367, 800, 100, 800, 0 },
|
|
{ 1, cam_bbh_room_12_upper, -2939, -205, 5367, 300, 100, 300, 0 },
|
|
{ 1, cam_bbh_room_12_upper, -2332, -204, 4714, 250, 200, 250, 0x6000 },
|
|
{ 1, cam_bbh_room_0_back_entrance, -1939, -204, 4340, 250, 200, 250, 0x6000 },
|
|
NULL_TRIGGER
|
|
};
|
|
|
|
void cutscene_bbh_death_start(struct Camera *c) {
|
|
Vec3f dir = { 0, 40.f, 60.f };
|
|
|
|
offset_rotated(sCutsceneVars[3].point, sMarioCamState->pos, dir, sMarioCamState->faceAngle);
|
|
vec3f_copy(sCutsceneVars[0].point, c->focus);
|
|
}
|
|
|
|
void cutscene_bbh_death_goto_mario(struct Camera *c) {
|
|
cutscene_goto_cvar_pos(c, 400.f, 0x1800, 0, 0x400);
|
|
}
|
|
|
|
/**
|
|
* Cutscene that plays when Mario dies in BBH.
|
|
*/
|
|
void cutscene_bbh_death(struct Camera *c) {
|
|
cutscene_event(cutscene_bbh_death_start, c, 0, 0);
|
|
cutscene_event(cutscene_bbh_death_goto_mario, c, 0, -1);
|
|
sStatusFlags |= CAM_FLAG_SMOOTH_MOVEMENT;
|
|
set_handheld_shake(HAND_CAM_SHAKE_CUTSCENE);
|
|
}
|
|
|
|
struct CutsceneSplinePoint sBbhCreditsSplinePositions[] = {
|
|
{ 1, 0, { 1088, 341, 2447 } },
|
|
{ 2, 0, { 1338, 610, 2808 } },
|
|
{ 3, 0, { 2267, 1612, 2966 } },
|
|
{ -1, 0, { 2296, 1913, 2990 } }
|
|
};
|
|
|
|
struct CutsceneSplinePoint sBbhCreditsSplineFocus[] = {
|
|
{ 1, 50, { 1160, 263, 1958 } },
|
|
{ 2, 50, { 1034, 472, 2436 } },
|
|
{ 3, 50, { 1915, 1833, 2688 } },
|
|
{ -1, 50, { 2134, 2316, 2742 } }
|
|
};
|