You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
#define o gCurrentObject in object_list_processor.h
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -46,8 +46,6 @@
|
||||
#include "rumble_init.h"
|
||||
#include "puppylights.h"
|
||||
|
||||
#define o gCurrentObject
|
||||
|
||||
struct WFRotatingPlatformData {
|
||||
s16 pad;
|
||||
s16 scale;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user