#define o gCurrentObject in object_list_processor.h

This commit is contained in:
Arceveti
2021-09-28 15:42:41 -07:00
parent 51f7679208
commit 4ec50b8123
18 changed files with 145 additions and 186 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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);

View File

@@ -46,8 +46,6 @@
#include "rumble_init.h"
#include "puppylights.h"
#define o gCurrentObject
struct WFRotatingPlatformData {
s16 pad;
s16 scale;

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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"

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}
/**

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;