From 4ec50b81235a3dc5bc7f19aa9b6d79a5529687e9 Mon Sep 17 00:00:00 2001 From: Arceveti <73617174+Arceveti@users.noreply.github.com> Date: Tue, 28 Sep 2021 15:42:41 -0700 Subject: [PATCH] #define o gCurrentObject in object_list_processor.h --- src/engine/math_util.c | 32 ++------ src/engine/surface_load.c | 12 +-- src/game/area.c | 10 +-- src/game/area.h | 2 +- src/game/behavior_actions.c | 2 - src/game/behaviors/intro_lakitu.inc.c | 32 ++++---- src/game/behaviors/intro_peach.inc.c | 16 ++-- src/game/camera.c | 112 ++++++++++++-------------- src/game/camera.h | 10 +-- src/game/farcall_helpers.h | 2 - src/game/interaction.h | 10 +-- src/game/mario.c | 60 +++++++------- src/game/mario.h | 2 +- src/game/mario_actions_cutscene.c | 22 ++--- src/game/obj_behaviors.c | 2 - src/game/obj_behaviors_2.c | 2 - src/game/object_helpers.c | 2 - src/game/object_list_processor.h | 1 + 18 files changed, 145 insertions(+), 186 deletions(-) diff --git a/src/engine/math_util.c b/src/engine/math_util.c index 6741ee55..76b8d1a6 100644 --- a/src/engine/math_util.c +++ b/src/engine/math_util.c @@ -568,9 +568,9 @@ void mtxf_to_mtx(void *dest, void *src) { /** * Set 'mtx' to a transformation matrix that rotates around the z axis. */ -#define MATENTRY(a, b) \ - ((s16 *) mtx)[a] = ((s32) b) >> 16; \ - ((s16 *) mtx)[a + 16] = ((s32) b) & 0xFFFF; +#define MATENTRY(a, b) \ + ((s16 *) mtx)[a ] = (((s32) b) >> 16); \ + ((s16 *) mtx)[a + 16] = (((s32) b) & 0xFFFF); void mtxf_rotate_xy(Mtx *mtx, s32 angle) { register s32 i = coss(angle) * 65536; register s32 j = sins(angle) * 65536; @@ -580,10 +580,10 @@ void mtxf_rotate_xy(Mtx *mtx, s32 angle) { *temp = 0; temp++; } - MATENTRY(0, i) - MATENTRY(1, j) + MATENTRY(0, i) + MATENTRY(1, j) MATENTRY(4, -j) - MATENTRY(5, i) + MATENTRY(5, i) ((s16 *) mtx)[10] = 1; ((s16 *) mtx)[15] = 1; } @@ -1087,23 +1087,3 @@ s32 anim_spline_poll(Vec3f result) { return hasEnded; } - -/// Multiply vector 'dest' by a -void vec3f_mul(Vec3f dest, f32 a) { - vec3_mul_val(dest, a); -} - -/// Get length of vector 'a' -f32 vec3f_length(Vec3f a) { - return sqrtf(sqr(a[0]) + sqr(a[1]) + sqr(a[2])); -} - -/// Get dot product of vectors 'a' and 'b' -f32 vec3f_dot(Vec3f a, Vec3f b) { - return vec3_dot(a, b); -} - -/// Make 'dest' the difference of vectors a and b. -void vec3f_dif(Vec3f dest, Vec3f a, Vec3f b) { - vec3_diff(dest, a, b); -} diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 56dafaf4..2014bb1c 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -690,25 +690,25 @@ void load_object_surfaces(TerrainData **data, TerrainData *vertexData) { #ifdef AUTO_COLLISION_DISTANCE // From Kaze -static void get_optimal_coll_dist(struct Object *o) { +static void get_optimal_coll_dist(struct Object *obj) { register f32 thisVertDist, maxDist = 0.0f; Vec3f v; TerrainData *collisionData = gCurrentObject->collisionData; - o->oFlags |= OBJ_FLAG_DONT_CALC_COLL_DIST; + obj->oFlags |= OBJ_FLAG_DONT_CALC_COLL_DIST; collisionData++; register u32 vertsLeft = *(collisionData); collisionData++; // vertices = *data; while (vertsLeft) { - v[0] = *(collisionData + 0) * o->header.gfx.scale[0]; - v[1] = *(collisionData + 1) * o->header.gfx.scale[1]; - v[2] = *(collisionData + 2) * o->header.gfx.scale[2]; + v[0] = *(collisionData + 0) * obj->header.gfx.scale[0]; + v[1] = *(collisionData + 1) * obj->header.gfx.scale[1]; + v[2] = *(collisionData + 2) * obj->header.gfx.scale[2]; thisVertDist = (sqr(v[0]) + sqr(v[1]) + sqr(v[2])); if (thisVertDist > maxDist) maxDist = thisVertDist; collisionData += 3; vertsLeft--; } - o->oCollisionDistance = (sqrtf(maxDist) + 100.0f); + obj->oCollisionDistance = (sqrtf(maxDist) + 100.0f); } #endif diff --git a/src/game/area.c b/src/game/area.c index 88c61e64..030c2534 100644 --- a/src/game/area.c +++ b/src/game/area.c @@ -130,9 +130,9 @@ void print_intro_text(void) { } } -u32 get_mario_spawn_type(struct Object *o) { +u32 get_mario_spawn_type(struct Object *obj) { s32 i; - const BehaviorScript *behavior = virtual_to_segmented(0x13, o->behavior); + const BehaviorScript *behavior = virtual_to_segmented(0x13, obj->behavior); for (i = 0; i < 20; i++) { if (sWarpBhvSpawnTable[i] == behavior) { @@ -153,10 +153,8 @@ struct ObjectWarpNode *area_get_warp_node(u8 id) { return node; } -struct ObjectWarpNode *area_get_warp_node_from_params(struct Object *o) { - u8 id = (o->oBehParams & 0x00FF0000) >> 16; - - return area_get_warp_node(id); +struct ObjectWarpNode *area_get_warp_node_from_params(struct Object *obj) { + return area_get_warp_node((obj->oBehParams & 0x00FF0000) >> 16); } void load_obj_warp_nodes(void) { diff --git a/src/game/area.h b/src/game/area.h index 950a1a26..16239b72 100644 --- a/src/game/area.h +++ b/src/game/area.h @@ -169,7 +169,7 @@ extern s16 gCurrLevelNum; void override_viewport_and_clip(Vp *a, Vp *b, u8 c, u8 d, u8 e); void print_intro_text(void); -u32 get_mario_spawn_type(struct Object *o); +u32 get_mario_spawn_type(struct Object *obj); struct ObjectWarpNode *area_get_warp_node(u8 id); void clear_areas(void); void clear_area_graph_nodes(void); diff --git a/src/game/behavior_actions.c b/src/game/behavior_actions.c index e3e2bcb1..ef80ee68 100644 --- a/src/game/behavior_actions.c +++ b/src/game/behavior_actions.c @@ -46,8 +46,6 @@ #include "rumble_init.h" #include "puppylights.h" -#define o gCurrentObject - struct WFRotatingPlatformData { s16 pad; s16 scale; diff --git a/src/game/behaviors/intro_lakitu.inc.c b/src/game/behaviors/intro_lakitu.inc.c index 97428e7c..a36f8614 100644 --- a/src/game/behaviors/intro_lakitu.inc.c +++ b/src/game/behaviors/intro_lakitu.inc.c @@ -9,7 +9,7 @@ * Add the camera's position to `offset`, rotate the point to be relative to the camera's focus, then * set lakitu's location. */ -void intro_lakitu_set_offset_from_camera(struct Object *o, Vec3f offset) { +void intro_lakitu_set_offset_from_camera(struct Object *obj, Vec3f offset) { f32 dist; Vec3s focusAngles; s16 offsetPitch, offsetYaw; @@ -20,36 +20,36 @@ void intro_lakitu_set_offset_from_camera(struct Object *o, Vec3f offset) { vec3f_get_dist_and_angle(gCamera->pos, offset, &dist, &offsetPitch, &offsetYaw); vec3f_set_dist_and_angle(gCamera->pos, offset, dist, focusAngles[0] + offsetPitch, focusAngles[1] + offsetYaw); - vec3f_to_object_pos(o, offset); + vec3f_copy(&obj->oPosVec, offset); } -void intro_lakitu_set_focus(struct Object *o, Vec3f newFocus) { +void intro_lakitu_set_focus(struct Object *obj, Vec3f newFocus) { f32 dist; s16 pitch, yaw; // newFocus is an offset from lakitu's origin, not a point in the world. vec3f_get_dist_and_angle(gVec3fZero, newFocus, &dist, &pitch, &yaw); - o->oFaceAnglePitch = pitch; - o->oFaceAngleYaw = yaw; + obj->oFaceAnglePitch = pitch; + obj->oFaceAngleYaw = yaw; } /** * Move lakitu along the spline `offset`, relative to the camera, and face him towards the corresponding * location along the spline `focus`. */ -s32 intro_lakitu_set_pos_and_focus(struct Object *o, struct CutsceneSplinePoint offset[], +s32 intro_lakitu_set_pos_and_focus(struct Object *obj, struct CutsceneSplinePoint offset[], struct CutsceneSplinePoint focus[]) { Vec3f newOffset, newFocus; s32 splineFinished = 0; - s16 splineSegment = o->oIntroLakituSplineSegment; + s16 splineSegment = obj->oIntroLakituSplineSegment; - if ((move_point_along_spline(newFocus, offset, &splineSegment, &(o->oIntroLakituSplineSegmentProgress)) == 1) - || (move_point_along_spline(newOffset, focus, &splineSegment, &(o->oIntroLakituSplineSegmentProgress)) == 1)) + if ((move_point_along_spline(newFocus, offset, &splineSegment, &(obj->oIntroLakituSplineSegmentProgress)) == 1) + || (move_point_along_spline(newOffset, focus, &splineSegment, &(obj->oIntroLakituSplineSegmentProgress)) == 1)) splineFinished++; - o->oIntroLakituSplineSegment = splineSegment; - intro_lakitu_set_offset_from_camera(o, newOffset); - intro_lakitu_set_focus(o, newFocus); + obj->oIntroLakituSplineSegment = splineSegment; + intro_lakitu_set_offset_from_camera(obj, newOffset); + intro_lakitu_set_focus(obj, newFocus); return splineFinished; } @@ -142,7 +142,7 @@ void bhv_intro_lakitu_loop(void) { toPoint[0] += gCurrentObject->oIntroLakituEndBirds1DestY; gCurrentObject->oIntroLakituEndBirds1DestY = approach_f32_asymptotic(gCurrentObject->oIntroLakituEndBirds1DestY, 0.f, 0.05f); - vec3f_to_object_pos(gCurrentObject, toPoint); + vec3f_copy(&gCurrentObject->oPosVec, toPoint); if (gCurrentObject->oTimer == 31) { gCurrentObject->oPosY -= 158.f; @@ -169,7 +169,7 @@ void bhv_intro_lakitu_loop(void) { cur_obj_enable_rendering(); vec3f_set(offset, -100.f, 100.f, 300.f); offset_rotated(toPoint, gCamera->pos, offset, sMarioCamState->faceAngle); - vec3f_to_object_pos(gCurrentObject, toPoint); + vec3f_copy(&gCurrentObject->oPosVec, toPoint); gCurrentObject->oMoveAnglePitch = 0x1000; gCurrentObject->oMoveAngleYaw = 0x9000; gCurrentObject->oFaceAnglePitch = gCurrentObject->oMoveAnglePitch / 2; @@ -178,7 +178,7 @@ void bhv_intro_lakitu_loop(void) { break; case 101: - object_pos_to_vec3f(toPoint, gCurrentObject); + vec3f_copy(toPoint, &gCurrentObject->oPosVec); if (gCurrentObject->oTimer > 60) { gCurrentObject->oForwardVel = approach_f32_asymptotic(gCurrentObject->oForwardVel, -10.f, 0.05f); gCurrentObject->oMoveAngleYaw += 0x78; @@ -195,7 +195,7 @@ void bhv_intro_lakitu_loop(void) { break; case 102: - object_pos_to_vec3f(toPoint, gCurrentObject); + vec3f_copy(toPoint, &gCurrentObject->oPosVec); gCurrentObject->oForwardVel = approach_f32_asymptotic(gCurrentObject->oForwardVel, 60.f, 0.05f); vec3f_get_yaw(toPoint, gCamera->pos, &yawToCam); gCurrentObject->oFaceAngleYaw = camera_approach_s16_symmetric(gCurrentObject->oFaceAngleYaw, yawToCam, 0x200); diff --git a/src/game/behaviors/intro_peach.inc.c b/src/game/behaviors/intro_peach.inc.c index 3a234657..ab3706b0 100644 --- a/src/game/behaviors/intro_peach.inc.c +++ b/src/game/behaviors/intro_peach.inc.c @@ -4,18 +4,18 @@ * Set peach's location relative to the camera focus. * If nonzero, make peach's opacity approach targetOpacity by increment */ -void intro_peach_set_pos_and_opacity(struct Object *o, f32 targetOpacity, f32 increment) { +void intro_peach_set_pos_and_opacity(struct Object *obj, f32 targetOpacity, f32 increment) { Vec3f newPos; s16 focusPitch, focusYaw; - f32 UNUSED dist, newOpacity; + f32 newOpacity; - vec3f_get_dist_and_angle(gLakituState.pos, gLakituState.focus, &dist, &focusPitch, &focusYaw); - vec3f_set_dist_and_angle(gLakituState.pos, newPos, o->oIntroPeachDistToCamera, o->oIntroPeachPitchFromFocus + focusPitch, - o->oIntroPeachYawFromFocus + focusYaw); - vec3f_to_object_pos(o, newPos); - newOpacity = o->oOpacity; + vec3f_get_angle(gLakituState.pos, gLakituState.focus, &focusPitch, &focusYaw); + vec3f_set_dist_and_angle(gLakituState.pos, newPos, obj->oIntroPeachDistToCamera, obj->oIntroPeachPitchFromFocus + focusPitch, + obj->oIntroPeachYawFromFocus + focusYaw); + vec3f_copy(&obj->oPosVec, newPos); + newOpacity = obj->oOpacity; camera_approach_f32_symmetric_bool(&newOpacity, targetOpacity, increment); - o->oOpacity = newOpacity; + obj->oOpacity = newOpacity; } void bhv_intro_peach_loop(void) { diff --git a/src/game/camera.c b/src/game/camera.c index ef946406..9768997b 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1456,7 +1456,7 @@ s32 update_fixed_camera(struct Camera *c, Vec3f focus, UNUSED Vec3f pos) { * Updates the camera during a boss fight */ s32 update_boss_fight_camera(struct Camera *c, Vec3f focus, Vec3f pos) { - struct Object *o; + struct Object *obj; f32 focusDistance; s16 yaw; s16 heldState; @@ -1478,9 +1478,9 @@ s32 update_boss_fight_camera(struct Camera *c, Vec3f focus, Vec3f pos) { yaw = sModeOffsetYaw + DEGREES(45); // Get boss's position and whether Mario is holding it. - if ((o = gSecondCameraFocus) != NULL) { - object_pos_to_vec3f(secondFocus, o); - heldState = o->oHeldState; + if ((obj = gSecondCameraFocus) != NULL) { + vec3f_copy(secondFocus, &obj->oPosVec); + heldState = obj->oHeldState; } else { // If no boss is there, just rotate around the area's center point. secondFocus[0] = c->areaCenX; @@ -3306,13 +3306,6 @@ Gfx *geo_camera_main(s32 callContext, struct GraphNode *g, void *context) { return NULL; } -void object_pos_to_vec3f(Vec3f dst, struct Object *o) { - vec3f_copy(dst, &o->oPosVec); -} - -void vec3f_to_object_pos(struct Object *o, Vec3f src) { - vec3f_copy(&o->oPosVec, src); -} /** * Produces values using a cubic b-spline curve. Basically Q is the used output, @@ -3331,9 +3324,9 @@ void evaluate_cubic_spline(f32 u, Vec3f Q, Vec3f a0, Vec3f a1, Vec3f a2, Vec3f a B[1] = (( hcu ) - su + (2.0f / 3.0f)); B[2] = ((-hcu ) + (su / 2.0f) + (u / 2.0f) + (5.0f / 3.0f)); B[3] = ( hcu / 3.0f); - Q[0] = B[0] * a0[0] + B[1] * a1[0] + B[2] * a2[0] + B[3] * a3[0]; - Q[1] = B[0] * a0[1] + B[1] * a1[1] + B[2] * a2[1] + B[3] * a3[1]; - Q[2] = B[0] * a0[2] + B[1] * a1[2] + B[2] * a2[2] + B[3] * a3[2]; + Q[0] = ((B[0] * a0[0]) + (B[1] * a1[0]) + (B[2] * a2[0]) + (B[3] * a3[0])); + Q[1] = ((B[0] * a0[1]) + (B[1] * a1[1]) + (B[2] * a2[1]) + (B[3] * a3[1])); + Q[2] = ((B[0] * a0[2]) + (B[1] * a1[2]) + (B[2] * a2[2]) + (B[3] * a3[2])); } /** @@ -6146,10 +6139,10 @@ void find_mario_floor_and_ceil(struct PlayerGeometry *pg) { * Start a cutscene focusing on an object * This will play if nothing else happened in the same frame, like exiting or warping. */ -void start_object_cutscene(u8 cutscene, struct Object *o) { - sObjectCutscene = cutscene; - gRecentCutscene = 0; - gCutsceneFocus = o; +void start_object_cutscene(u8 cutscene, struct Object *obj) { + sObjectCutscene = cutscene; + gRecentCutscene = 0; + gCutsceneFocus = obj; gObjCutsceneDone = FALSE; } @@ -6177,12 +6170,12 @@ s16 unused_dialog_cutscene_response(u8 cutscene) { } } -s16 cutscene_object_with_dialog(u8 cutscene, struct Object *o, s16 dialogID) { +s16 cutscene_object_with_dialog(u8 cutscene, struct Object *obj, s16 dialogID) { s16 response = DIALOG_RESPONSE_NONE; if ((gCamera->cutscene == 0) && (sObjectCutscene == 0)) { if (gRecentCutscene != cutscene) { - start_object_cutscene(cutscene, o); + start_object_cutscene(cutscene, obj); if (dialogID != DIALOG_NONE) { sCutsceneDialogID = dialogID; } else { @@ -6197,21 +6190,21 @@ s16 cutscene_object_with_dialog(u8 cutscene, struct Object *o, s16 dialogID) { return response; } -s16 cutscene_object_without_dialog(u8 cutscene, struct Object *o) { - s16 response = cutscene_object_with_dialog(cutscene, o, DIALOG_NONE); +s16 cutscene_object_without_dialog(u8 cutscene, struct Object *obj) { + s16 response = cutscene_object_with_dialog(cutscene, obj, DIALOG_NONE); return response; } /** * @return 0 if not started, 1 if started, and -1 if finished */ -s16 cutscene_object(u8 cutscene, struct Object *o) { +s16 cutscene_object(u8 cutscene, struct Object *obj) { s16 status = 0; if ((gCamera->cutscene == 0) && (sObjectCutscene == 0)) { if (gRecentCutscene != cutscene) { - start_object_cutscene(cutscene, o); - status = 1; + start_object_cutscene(cutscene, obj); + status = 1; } else { status = -1; } @@ -7442,7 +7435,7 @@ void cutscene_star_spawn_store_info(struct Camera *c) { void cutscene_star_spawn_focus_star(struct Camera *c) { Vec3f starPos; if (gCutsceneFocus != NULL) { - object_pos_to_vec3f(starPos, gCutsceneFocus); + vec3f_copy(starPos, &gCutsceneFocus->oPosVec); starPos[1] += gCutsceneFocus->hitboxHeight; approach_vec3f_asymptotic(c->focus, starPos, 0.1f, 0.1f, 0.1f); } @@ -7552,7 +7545,7 @@ void cutscene_exit_fall_to_castle_grounds(struct Camera *c) { * Start the red coin star spawning cutscene. */ void cutscene_red_coin_star_start(struct Camera *c) { - object_pos_to_vec3f(sCutsceneVars[1].point, gCutsceneFocus); + vec3f_copy(sCutsceneVars[1].point, &gCutsceneFocus->oPosVec); store_info_star(c); // Store the default fov for after the cutscene sCutsceneVars[2].point[2] = sFOVState.fov; @@ -7586,9 +7579,9 @@ void cutscene_red_coin_star_look_up_at_star(struct Camera *c) { void cutscene_red_coin_star_warp(struct Camera *c) { f32 dist; s16 pitch, yaw, posYaw; - struct Object *o = gCutsceneFocus; + struct Object *obj = gCutsceneFocus; - vec3f_set(sCutsceneVars[1].point, o->oHomeX, o->oHomeY, o->oHomeZ); + vec3f_copy(sCutsceneVars[1].point, &obj->oHomeVec); vec3f_get_dist_and_angle(sCutsceneVars[1].point, c->pos, &dist, &pitch, &yaw); vec3f_get_yaw(sCutsceneVars[1].point, c->pos, &posYaw); vec3f_get_yaw(sCutsceneVars[1].point, sMarioCamState->pos, &yaw); @@ -7707,7 +7700,7 @@ void cutscene_prepare_cannon_start(struct Camera *c) { vec3f_copy(sCutsceneVars[0].point, c->focus); sCutsceneVars[2].point[0] = 30.f; // Store the cannon door's position in sCutsceneVars[3]'s point - object_pos_to_vec3f(sCutsceneVars[3].point, gCutsceneFocus); + vec3f_copy(sCutsceneVars[3].point, &gCutsceneFocus->oPosVec); vec3s_set(sCutsceneVars[5].angle, 0, 0, 0); } @@ -8125,7 +8118,7 @@ void cutscene_dialog_start(struct Camera *c) { sCutsceneVars[8].point[1] += 125.f; // Store gCutsceneFocus's position and yaw - object_pos_to_vec3f(sCutsceneVars[9].point, gCutsceneFocus); + vec3f_copy(sCutsceneVars[9].point, &gCutsceneFocus->oPosVec); sCutsceneVars[9].point[1] += gCutsceneFocus->hitboxHeight + 200.f; vec3f_get_yaw(sCutsceneVars[8].point, sCutsceneVars[9].point, &sCutsceneVars[9].angle[1]); vec3f_get_yaw(sMarioCamState->pos, gLakituState.curPos, &yaw); @@ -9282,7 +9275,7 @@ void cutscene_enter_cannon_end(struct Camera *c) { * Rotate around the cannon as it rises out of the hole. */ void cutscene_enter_cannon_raise(struct Camera *c) { - struct Object *o; + struct Object *obj; f32 floorHeight; struct Surface *floor; Vec3f cannonFocus; @@ -9301,14 +9294,14 @@ void cutscene_enter_cannon_raise(struct Camera *c) { sCutsceneVars[3].point[1] += 2.f; c->pos[1] += sCutsceneVars[3].point[1]; - if ((o = sMarioCamState->usedObj) != NULL) { - sCutsceneVars[0].point[1] = o->oPosY; - cannonAngle[0] = o->oMoveAnglePitch; - cannonAngle[1] = o->oMoveAngleYaw; - cannonAngle[2] = o->oMoveAngleRoll; - c->focus[0] = o->oPosX; - c->focus[1] = o->oPosY; - c->focus[2] = o->oPosZ; + if ((obj = sMarioCamState->usedObj) != NULL) { + sCutsceneVars[0].point[1] = obj->oPosY; + cannonAngle[0] = obj->oMoveAnglePitch; + cannonAngle[1] = obj->oMoveAngleYaw; + cannonAngle[2] = obj->oMoveAngleRoll; + c->focus[0] = obj->oPosX; + c->focus[1] = obj->oPosY; + c->focus[2] = obj->oPosZ; cannonFocus[0] = 0.f; cannonFocus[1] = 100.f; cannonFocus[2] = 0.f; @@ -9326,19 +9319,19 @@ void cutscene_enter_cannon_raise(struct Camera *c) { * Start the cannon entering cutscene */ void cutscene_enter_cannon_start(struct Camera *c) { - struct Object *o; + struct Object *obj; sStatusFlags |= CAM_FLAG_SMOOTH_MOVEMENT; sMarioCamState->cameraEvent = 0; // Store the cannon's position and angle in cvar0 - if ((o = sMarioCamState->usedObj) != NULL) { - sCutsceneVars[0].point[0] = o->oPosX; - sCutsceneVars[0].point[1] = o->oPosY; - sCutsceneVars[0].point[2] = o->oPosZ; - sCutsceneVars[0].angle[0] = o->oMoveAnglePitch; - sCutsceneVars[0].angle[1] = o->oMoveAngleYaw; - sCutsceneVars[0].angle[2] = o->oMoveAngleRoll; + if ((obj = sMarioCamState->usedObj) != NULL) { + sCutsceneVars[0].point[0] = obj->oPosX; + sCutsceneVars[0].point[1] = obj->oPosY; + sCutsceneVars[0].point[2] = obj->oPosZ; + sCutsceneVars[0].angle[0] = obj->oMoveAnglePitch; + sCutsceneVars[0].angle[1] = obj->oMoveAngleYaw; + sCutsceneVars[0].angle[2] = obj->oMoveAngleRoll; } // Store the camera's polar offset from the cannon in cvar1 @@ -10532,34 +10525,33 @@ void set_fov_shake_from_point_preset(u8 preset, f32 posX, f32 posY, f32 posZ) { /** * Offset an object's position in a random direction within the given bounds. */ -static UNUSED void unused_displace_obj_randomly(struct Object *o, f32 xRange, f32 yRange, f32 zRange) { +static UNUSED void unused_displace_obj_randomly(struct Object *obj, f32 xRange, f32 yRange, f32 zRange) { f32 rnd = random_float(); - o->oPosX += (rnd * xRange - xRange / 2.f); - o->oPosY += (rnd * yRange - yRange / 2.f); - o->oPosZ += (rnd * zRange - zRange / 2.f); + obj->oPosX += (rnd * xRange - xRange / 2.f); + obj->oPosY += (rnd * yRange - yRange / 2.f); + obj->oPosZ += (rnd * zRange - zRange / 2.f); } /** * Rotate an object in a random direction within the given bounds. */ -static UNUSED void unused_rotate_obj_randomly(struct Object *o, f32 pitchRange, f32 yawRange) { +static UNUSED void unused_rotate_obj_randomly(struct Object *obj, f32 pitchRange, f32 yawRange) { f32 rnd = random_float(); - o->oMoveAnglePitch += (s16)(rnd * pitchRange - pitchRange / 2.f); - o->oMoveAngleYaw += (s16)(rnd * yawRange - yawRange / 2.f); + obj->oMoveAnglePitch += (s16)(rnd * pitchRange - pitchRange / 2.f); + obj->oMoveAngleYaw += (s16)(rnd * yawRange - yawRange / 2.f); } /** * Rotate the object towards the point `point`. */ -void obj_rotate_towards_point(struct Object *o, Vec3f point, s16 pitchOff, s16 yawOff, s16 pitchDiv, s16 yawDiv) { +void obj_rotate_towards_point(struct Object *obj, Vec3f point, s16 pitchOff, s16 yawOff, s16 pitchDiv, s16 yawDiv) { f32 dist; s16 pitch, yaw; Vec3f oPos; - - object_pos_to_vec3f(oPos, o); + vec3f_copy(oPos, &obj->oPosVec); vec3f_get_dist_and_angle(oPos, point, &dist, &pitch, &yaw); - o->oMoveAnglePitch = approach_s16_asymptotic(o->oMoveAnglePitch, pitchOff - pitch, pitchDiv); - o->oMoveAngleYaw = approach_s16_asymptotic(o->oMoveAngleYaw, yaw + yawOff, yawDiv); + obj->oMoveAnglePitch = approach_s16_asymptotic(obj->oMoveAnglePitch, pitchOff - pitch, pitchDiv); + obj->oMoveAngleYaw = approach_s16_asymptotic(obj->oMoveAngleYaw, yaw + yawOff, yawDiv); } #include "behaviors/intro_peach.inc.c" diff --git a/src/game/camera.h b/src/game/camera.h index 122fb35d..c18e8d56 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -682,8 +682,6 @@ void reset_camera(struct Camera *c); void init_camera(struct Camera *c); void select_mario_cam_mode(void); Gfx *geo_camera_main(s32 callContext, struct GraphNode *g, void *context); -void object_pos_to_vec3f(Vec3f dst, struct Object *o); -void vec3f_to_object_pos(struct Object *o, Vec3f src); s32 move_point_along_spline(Vec3f p, struct CutsceneSplinePoint spline[], s16 *splineSegment, f32 *progress); s32 cam_select_alt_mode(s32 angle); s32 set_cam_angle(s32 mode); @@ -739,9 +737,9 @@ void resolve_geometry_collisions(Vec3f pos); s32 rotate_camera_around_walls(struct Camera *c, Vec3f cPos, s16 *avoidYaw, s16 yawRange); void find_mario_floor_and_ceil(struct PlayerGeometry *pg); u8 start_object_cutscene_without_focus(u8 cutscene); -s16 cutscene_object_with_dialog(u8 cutscene, struct Object *o, s16 dialogID); -s16 cutscene_object_without_dialog(u8 cutscene, struct Object *o); -s16 cutscene_object(u8 cutscene, struct Object *o); +s16 cutscene_object_with_dialog(u8 cutscene, struct Object *obj, s16 dialogID); +s16 cutscene_object_without_dialog(u8 cutscene, struct Object *obj); +s16 cutscene_object(u8 cutscene, struct Object *obj); void play_cutscene(struct Camera *c); s32 cutscene_event(CameraEvent event, struct Camera * c, s16 start, s16 end); s32 cutscene_spawn_obj(u32 obj, s16 frame); @@ -750,7 +748,7 @@ void set_fov_shake(s16 amplitude, s16 decay, s16 shakeSpeed); void set_fov_function(u8 func); void cutscene_set_fov_shake_preset(u8 preset); void set_fov_shake_from_point_preset(u8 preset, f32 posX, f32 posY, f32 posZ); -void obj_rotate_towards_point(struct Object *o, Vec3f point, s16 pitchOff, s16 yawOff, s16 pitchDiv, s16 yawDiv); +void obj_rotate_towards_point(struct Object *obj, Vec3f point, s16 pitchOff, s16 yawOff, s16 pitchDiv, s16 yawDiv); Gfx *geo_camera_fov(s32 callContext, struct GraphNode *g, UNUSED void *context); diff --git a/src/game/farcall_helpers.h b/src/game/farcall_helpers.h index d42daf15..45624e14 100644 --- a/src/game/farcall_helpers.h +++ b/src/game/farcall_helpers.h @@ -25,8 +25,6 @@ #include "level_headers.h" #include "level_misc_macros.h" -#define o gCurrentObject - s32 obj_is_rendering_enabled(void); s16 obj_get_pitch_from_vel(void); s32 obj_update_race_proposition_dialog(s16 dialogID); diff --git a/src/game/interaction.h b/src/game/interaction.h index 24cf1bac..973e5977 100644 --- a/src/game/interaction.h +++ b/src/game/interaction.h @@ -107,19 +107,19 @@ #define INT_STATUS_TOUCHED_BOB_OMB (1 << 23) /* 0x00800000 */ -s16 mario_obj_angle_to_object(struct MarioState *m, struct Object *o); +s16 mario_obj_angle_to_object(struct MarioState *m, struct Object *obj); void mario_stop_riding_object(struct MarioState *m); void mario_grab_used_object(struct MarioState *m); void mario_drop_held_object(struct MarioState *m); void mario_throw_held_object(struct MarioState *m); void mario_stop_riding_and_holding(struct MarioState *m); -u32 does_mario_have_normal_cap_on_head(struct MarioState *m); +u32 does_mario_have_normal_cap_on_head(struct MarioState *m); void mario_blow_off_cap(struct MarioState *m, f32 capSpeed); -u32 mario_lose_cap_to_enemy(u32 enemyType); +u32 mario_lose_cap_to_enemy(u32 enemyType); void mario_retrieve_cap(void); struct Object *mario_get_collided_object(struct MarioState *m, u32 interactType); -u32 mario_check_object_grab(struct MarioState *m); -u32 get_door_save_file_flag(struct Object *door); +u32 mario_check_object_grab(struct MarioState *m); +u32 get_door_save_file_flag(struct Object *door); void mario_process_interactions(struct MarioState *m); void mario_handle_special_floors(struct MarioState *m); diff --git a/src/game/mario.c b/src/game/mario.c index b009a256..1dd100c3 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -42,50 +42,50 @@ * Checks if Mario's animation has reached its end point. */ s32 is_anim_at_end(struct MarioState *m) { - struct Object *o = m->marioObj; + struct Object *marioObj = m->marioObj; - return (o->header.gfx.animInfo.animFrame + 1) == o->header.gfx.animInfo.curAnim->loopEnd; + return (marioObj->header.gfx.animInfo.animFrame + 1) == marioObj->header.gfx.animInfo.curAnim->loopEnd; } /** * Checks if Mario's animation has surpassed 2 frames before its end point. */ s32 is_anim_past_end(struct MarioState *m) { - struct Object *o = m->marioObj; + struct Object *marioObj = m->marioObj; - return o->header.gfx.animInfo.animFrame >= (o->header.gfx.animInfo.curAnim->loopEnd - 2); + return marioObj->header.gfx.animInfo.animFrame >= (marioObj->header.gfx.animInfo.curAnim->loopEnd - 2); } /** * Sets Mario's animation without any acceleration, running at its default rate. */ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID) { - struct Object *o = m->marioObj; + struct Object *marioObj = m->marioObj; struct Animation *targetAnim = m->animList->bufTarget; if (load_patchable_table(m->animList, targetAnimID)) { targetAnim->values = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->values); - targetAnim->index = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->index); + targetAnim->index = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->index); } - if (o->header.gfx.animInfo.animID != targetAnimID) { - o->header.gfx.animInfo.animID = targetAnimID; - o->header.gfx.animInfo.curAnim = targetAnim; - o->header.gfx.animInfo.animAccel = 0; - o->header.gfx.animInfo.animYTrans = m->animYTrans; + if (marioObj->header.gfx.animInfo.animID != targetAnimID) { + marioObj->header.gfx.animInfo.animID = targetAnimID; + marioObj->header.gfx.animInfo.curAnim = targetAnim; + marioObj->header.gfx.animInfo.animAccel = 0; + marioObj->header.gfx.animInfo.animYTrans = m->animYTrans; if (targetAnim->flags & ANIM_FLAG_NO_ACCEL) { - o->header.gfx.animInfo.animFrame = targetAnim->startFrame; + marioObj->header.gfx.animInfo.animFrame = targetAnim->startFrame; } else { if (targetAnim->flags & ANIM_FLAG_FORWARD) { - o->header.gfx.animInfo.animFrame = targetAnim->startFrame + 1; + marioObj->header.gfx.animInfo.animFrame = targetAnim->startFrame + 1; } else { - o->header.gfx.animInfo.animFrame = targetAnim->startFrame - 1; + marioObj->header.gfx.animInfo.animFrame = targetAnim->startFrame - 1; } } } - return o->header.gfx.animInfo.animFrame; + return marioObj->header.gfx.animInfo.animFrame; } /** @@ -93,7 +93,7 @@ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID) { * slowed down via acceleration. */ s16 set_mario_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel) { - struct Object *o = m->marioObj; + struct Object *marioObj = m->marioObj; struct Animation *targetAnim = m->animList->bufTarget; if (load_patchable_table(m->animList, targetAnimID)) { @@ -101,27 +101,27 @@ s16 set_mario_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel) targetAnim->index = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->index); } - if (o->header.gfx.animInfo.animID != targetAnimID) { - o->header.gfx.animInfo.animID = targetAnimID; - o->header.gfx.animInfo.curAnim = targetAnim; - o->header.gfx.animInfo.animYTrans = m->animYTrans; + if (marioObj->header.gfx.animInfo.animID != targetAnimID) { + marioObj->header.gfx.animInfo.animID = targetAnimID; + marioObj->header.gfx.animInfo.curAnim = targetAnim; + marioObj->header.gfx.animInfo.animYTrans = m->animYTrans; if (targetAnim->flags & ANIM_FLAG_NO_ACCEL) { - o->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10); + marioObj->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10); } else { if (targetAnim->flags & ANIM_FLAG_FORWARD) { - o->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10) + accel; + marioObj->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10) + accel; } else { - o->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10) - accel; + marioObj->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10) - accel; } } - o->header.gfx.animInfo.animFrame = (o->header.gfx.animInfo.animFrameAccelAssist >> 0x10); + marioObj->header.gfx.animInfo.animFrame = (marioObj->header.gfx.animInfo.animFrameAccelAssist >> 0x10); } - o->header.gfx.animInfo.animAccel = accel; + marioObj->header.gfx.animInfo.animAccel = accel; - return o->header.gfx.animInfo.animFrame; + return marioObj->header.gfx.animInfo.animFrame; } /** @@ -1554,13 +1554,13 @@ void mario_reset_bodystate(struct MarioState *m) { * Adjusts Mario's graphical height for quicksand. */ void sink_mario_in_quicksand(struct MarioState *m) { - struct Object *o = m->marioObj; + struct Object *marioObj = m->marioObj; - if (o->header.gfx.throwMatrix) { - (*o->header.gfx.throwMatrix)[3][1] -= m->quicksandDepth; + if (marioObj->header.gfx.throwMatrix) { + (*marioObj->header.gfx.throwMatrix)[3][1] -= m->quicksandDepth; } - o->header.gfx.pos[1] -= m->quicksandDepth; + marioObj->header.gfx.pos[1] -= m->quicksandDepth; } /** diff --git a/src/game/mario.h b/src/game/mario.h index ae547b89..b2a5d802 100644 --- a/src/game/mario.h +++ b/src/game/mario.h @@ -12,7 +12,7 @@ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID); s16 set_mario_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel); void set_anim_to_frame(struct MarioState *m, s16 animFrame); s32 is_anim_past_frame(struct MarioState *m, s16 animFrame); -s16 find_mario_anim_flags_and_translation(struct Object *o, s32 yaw, Vec3s translation); +s16 find_mario_anim_flags_and_translation(struct Object *obj, s32 yaw, Vec3s translation); void update_mario_pos_for_anim(struct MarioState *m); s16 return_mario_anim_y_translation(struct MarioState *m); void play_sound_if_no_flag(struct MarioState *m, u32 soundBits, u32 flags); diff --git a/src/game/mario_actions_cutscene.c b/src/game/mario_actions_cutscene.c index f4352e00..2ddb17cb 100644 --- a/src/game/mario_actions_cutscene.c +++ b/src/game/mario_actions_cutscene.c @@ -273,14 +273,14 @@ void handle_save_menu(struct MarioState *m) { * and yaw plus relative yaw. */ struct Object *spawn_obj_at_mario_rel_yaw(struct MarioState *m, s32 model, const BehaviorScript *behavior, s16 relYaw) { - struct Object *o = spawn_object(m->marioObj, model, behavior); + struct Object *obj = spawn_object(m->marioObj, model, behavior); - o->oFaceAngleYaw = m->faceAngle[1] + relYaw; - o->oPosX = m->pos[0]; - o->oPosY = m->pos[1]; - o->oPosZ = m->pos[2]; + obj->oFaceAngleYaw = m->faceAngle[1] + relYaw; + obj->oPosX = m->pos[0]; + obj->oPosY = m->pos[1]; + obj->oPosZ = m->pos[2]; - return o; + return obj; } /** @@ -1983,16 +1983,16 @@ void generate_yellow_sparkles(s16 x, s16 y, s16 z, f32 radius) { // not sure what this does, returns the height of the floor. // (animation related?) -static f32 end_obj_set_visual_pos(struct Object *o) { +static f32 end_obj_set_visual_pos(struct Object *obj) { struct Surface *surf; Vec3s translation; f32 x, y, z; - find_mario_anim_flags_and_translation(o, o->header.gfx.angle[1], translation); + find_mario_anim_flags_and_translation(obj, obj->header.gfx.angle[1], translation); - x = o->header.gfx.pos[0] + translation[0]; - y = o->header.gfx.pos[1] + 10.0f; - z = o->header.gfx.pos[2] + translation[2]; + x = obj->header.gfx.pos[0] + translation[0]; + y = obj->header.gfx.pos[1] + 10.0f; + z = obj->header.gfx.pos[2] + translation[2]; return find_floor(x, y, z, &surf); } diff --git a/src/game/obj_behaviors.c b/src/game/obj_behaviors.c index e4dfd5b4..a9cbefe4 100644 --- a/src/game/obj_behaviors.c +++ b/src/game/obj_behaviors.c @@ -40,8 +40,6 @@ * specific behaviors. Few functions besides the bhv_ functions are used elsewhere in the repo. */ -#define o gCurrentObject - #define OBJ_COL_FLAG_GROUNDED (1 << 0) #define OBJ_COL_FLAG_HIT_WALL (1 << 1) #define OBJ_COL_FLAG_UNDERWATER (1 << 2) diff --git a/src/game/obj_behaviors_2.c b/src/game/obj_behaviors_2.c index dab8f3a7..2be8540f 100644 --- a/src/game/obj_behaviors_2.c +++ b/src/game/obj_behaviors_2.c @@ -53,8 +53,6 @@ #define POS_OP_COMPUTE_VELOCITY 1 #define POS_OP_RESTORE_POSITION 2 -#define o gCurrentObject - /* BSS (declared to force order) */ extern s32 sNumActiveFirePiranhaPlants; extern s32 sNumKilledFirePiranhaPlants; diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index f65557a9..d5281d52 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -33,8 +33,6 @@ static s8 sLevelsWithRooms[] = { LEVEL_BBH, LEVEL_CASTLE, LEVEL_HMC, -1 }; static s32 clear_move_flag(u32 * bitSet, s32 flag); -#define o gCurrentObject - Gfx *geo_update_projectile_pos_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx) { Mat4 mtx2; struct Object *projObj; diff --git a/src/game/object_list_processor.h b/src/game/object_list_processor.h index 1f2be9cd..a5152fbd 100644 --- a/src/game/object_list_processor.h +++ b/src/game/object_list_processor.h @@ -86,6 +86,7 @@ extern struct ObjectNode gFreeObjectList; extern struct Object *gMarioObject; extern struct Object *gLuigiObject; extern struct Object *gCurrentObject; +#define o gCurrentObject extern const BehaviorScript *gCurBhvCommand; extern s16 gPrevFrameObjectCount;