You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Some optimizations + cleanup
This commit is contained in:
@@ -13,11 +13,6 @@
|
||||
s16 identityMtx[4][4] = { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 } };
|
||||
s16 zeroMtx[4][4] = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
|
||||
|
||||
Vec3f gVec3fZero = { 0.0f, 0.0f, 0.0f };
|
||||
Vec3s gVec3sZero = { 0, 0, 0 };
|
||||
Vec3f gVec3fOne = { 1.0f, 1.0f, 1.0f };
|
||||
UNUSED Vec3s gVec3sOne = { 1, 1, 1 };
|
||||
|
||||
/**
|
||||
* Initialize a geo node with a given type. Sets all links such that there
|
||||
* are no siblings, parent or children for this node.
|
||||
|
||||
@@ -376,11 +376,6 @@ extern struct GraphNode *gCurGraphNodeList[];
|
||||
|
||||
extern s16 gCurGraphNodeIndex;
|
||||
|
||||
extern Vec3f gVec3fZero;
|
||||
extern Vec3s gVec3sZero;
|
||||
extern Vec3f gVec3fOne;
|
||||
extern Vec3s gVec3sOne;
|
||||
|
||||
void init_scene_graph_node_links(struct GraphNode *graphNode, s32 type);
|
||||
|
||||
struct GraphNodeRoot *init_graph_node_root(struct AllocOnlyPool *pool, struct GraphNodeRoot *graphNode,
|
||||
|
||||
@@ -12,8 +12,40 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wreturn-local-addr"
|
||||
Vec3f gVec3fX = { 1.0f, 0.0f, 0.0f };
|
||||
Vec3f gVec3fY = { 0.0f, 1.0f, 0.0f };
|
||||
Vec3f gVec3fZ = { 0.0f, 0.0f, 1.0f };
|
||||
Vec3f gVec3fNX = { -1.0f, 0.0f, 0.0f };
|
||||
Vec3f gVec3fNY = { 0.0f, -1.0f, 0.0f };
|
||||
Vec3f gVec3fNZ = { 0.0f, 0.0f, -1.0f };
|
||||
Vec3f gVec3fZero = { 0.0f, 0.0f, 0.0f };
|
||||
Vec3f gVec3fOne = { 1.0f, 1.0f, 1.0f };
|
||||
Vec3s gVec3sZero = { 0, 0, 0 };
|
||||
Vec3i gVec3iZero = { 0, 0, 0 };
|
||||
Vec3s gVec3sOne = { 1, 1, 1 };
|
||||
|
||||
/// From Wiseguy
|
||||
static inline s32 roundf(f32 in) {
|
||||
f32 tmp;
|
||||
s32 out;
|
||||
__asm__("round.w.s %0,%1" : "=f" (tmp) : "f" (in));
|
||||
__asm__("mfc1 %0,%1" : "=r" (out) : "f" (tmp));
|
||||
return out;
|
||||
}
|
||||
|
||||
// static inline float absf(float in) {
|
||||
// f32 out;
|
||||
// __asm__("abs.s %0,%1" : "=f" (out) : "f" (in));
|
||||
// return out;
|
||||
// }
|
||||
|
||||
f32 absf(f32 x) {
|
||||
if (x >= 0) {
|
||||
return x;
|
||||
} else {
|
||||
return -x;
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the lowest of three values.
|
||||
s32 min_3i(s32 a0, s32 a1, s32 a2) { if (a1 < a0) a0 = a1; if (a2 < a0) a0 = a2; return a0; }
|
||||
@@ -112,7 +144,7 @@ void vec3f_cross(Vec3f dest, Vec3f a, Vec3f b) {
|
||||
/// Scale vector 'dest' so it has length 1
|
||||
void vec3f_normalize(Vec3f dest) {
|
||||
f32 mag = sqrtf(sqr(dest[0]) + sqr(dest[1]) + sqr(dest[2]));
|
||||
if (mag > __FLT_EPSILON__) {
|
||||
if (mag > NEAR_ZERO) {
|
||||
register f32 invsqrt = 1.0f / mag;
|
||||
vec3_mul_val(dest, invsqrt);
|
||||
} else {
|
||||
@@ -125,7 +157,7 @@ void vec3f_normalize(Vec3f dest) {
|
||||
/// Scale vector 'dest' so it has length -1
|
||||
void vec3f_normalize_negative(Vec3f dest) {
|
||||
f32 mag = sqrtf(sqr(dest[0]) + sqr(dest[1]) + sqr(dest[2]));
|
||||
if (mag > __FLT_EPSILON__) {
|
||||
if (mag > NEAR_ZERO) {
|
||||
register f32 invsqrt = -1.0f / mag;
|
||||
vec3_mul_val(dest, invsqrt);
|
||||
} else {
|
||||
@@ -135,7 +167,6 @@ void vec3f_normalize_negative(Vec3f dest) {
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
struct CopyMe {
|
||||
f32 x; f32 y; f32 z; f32 w;
|
||||
f32 x1; f32 y1; f32 z1; f32 w1;
|
||||
@@ -173,33 +204,31 @@ void mtxf_translate(Mat4 dest, Vec3f b) {
|
||||
void mtxf_rot_trans_mul(Vec3s rot, Vec3f trans, Mat4 dest, Mat4 src) {
|
||||
register f32 sx = sins(rot[0]);
|
||||
register f32 cx = coss(rot[0]);
|
||||
|
||||
register f32 sy = sins(rot[1]);
|
||||
register f32 cy = coss(rot[1]);
|
||||
|
||||
register f32 sz = sins(rot[2]);
|
||||
register f32 cz = coss(rot[2]);
|
||||
register Vec3f entry;
|
||||
|
||||
entry[0] = cy * cz;
|
||||
entry[1] = cy * sz;
|
||||
entry[0] = (cy * cz);
|
||||
entry[1] = (cy * sz);
|
||||
entry[2] = -sy;
|
||||
dest[0][0] = entry[0] * src[0][0] + entry[1] * src[1][0] + entry[2] * src[2][0];
|
||||
dest[0][1] = entry[0] * src[0][1] + entry[1] * src[1][1] + entry[2] * src[2][1];
|
||||
dest[0][2] = entry[0] * src[0][2] + entry[1] * src[1][2] + entry[2] * src[2][2];
|
||||
|
||||
entry[1] = sx * sy;
|
||||
entry[1] = (sx * sy);
|
||||
entry[0] = (entry[1] * cz) - (cx * sz);
|
||||
entry[1] = (entry[1] * sz) + (cx * cz);
|
||||
entry[2] = sx * cy;
|
||||
entry[2] = (sx * cy);
|
||||
dest[1][0] = entry[0] * src[0][0] + entry[1] * src[1][0] + entry[2] * src[2][0];
|
||||
dest[1][1] = entry[0] * src[0][1] + entry[1] * src[1][1] + entry[2] * src[2][1];
|
||||
dest[1][2] = entry[0] * src[0][2] + entry[1] * src[1][2] + entry[2] * src[2][2];
|
||||
|
||||
entry[1] = cx * sy;
|
||||
entry[1] = (cx * sy);
|
||||
entry[0] = (entry[1] * cz) + (sx * sz);
|
||||
entry[1] = (entry[1] * sz) - (sx * cz);
|
||||
entry[2] = cx * cy;
|
||||
entry[2] = (cx * cy);
|
||||
dest[2][0] = entry[0] * src[0][0] + entry[1] * src[1][0] + entry[2] * src[2][0];
|
||||
dest[2][1] = entry[0] * src[0][1] + entry[1] * src[1][1] + entry[2] * src[2][1];
|
||||
dest[2][2] = entry[0] * src[0][2] + entry[1] * src[1][2] + entry[2] * src[2][2];
|
||||
@@ -223,7 +252,7 @@ void mtxf_lookat(Mat4 mtx, Vec3f from, Vec3f to, s32 roll) {
|
||||
register f32 dx = (to[0] - from[0]);
|
||||
register f32 dz = (to[2] - from[2]);
|
||||
register f32 invLength = sqrtf(sqr(dx) + sqr(dz));
|
||||
invLength = -(1.0f / MAX(invLength, __FLT_EPSILON__));
|
||||
invLength = -(1.0f / MAX(invLength, NEAR_ZERO));
|
||||
dx *= invLength;
|
||||
dz *= invLength;
|
||||
f32 sr = sins(roll);
|
||||
@@ -256,30 +285,26 @@ void mtxf_lookat(Mat4 mtx, Vec3f from, Vec3f to, s32 roll) {
|
||||
* axis, and then translates.
|
||||
*/
|
||||
void mtxf_rotate_zxy_and_translate(Mat4 dest, Vec3f translate, Vec3s rotate) {
|
||||
register f32 sx = sins(rotate[0]);
|
||||
register f32 cx = coss(rotate[0]);
|
||||
|
||||
register f32 sy = sins(rotate[1]);
|
||||
register f32 cy = coss(rotate[1]);
|
||||
|
||||
register f32 sz = sins(rotate[2]);
|
||||
register f32 cz = coss(rotate[2]);
|
||||
|
||||
dest[0][0] = cy * cz + sx * sy * sz;
|
||||
dest[1][0] = -cy * sz + sx * sy * cz;
|
||||
dest[2][0] = cx * sy;
|
||||
dest[3][0] = translate[0];
|
||||
|
||||
dest[0][1] = cx * sz;
|
||||
dest[1][1] = cx * cz;
|
||||
register f32 sx = sins(rotate[0]);
|
||||
register f32 cx = coss(rotate[0]);
|
||||
register f32 sy = sins(rotate[1]);
|
||||
register f32 cy = coss(rotate[1]);
|
||||
register f32 sz = sins(rotate[2]);
|
||||
register f32 cz = coss(rotate[2]);
|
||||
register f32 cycz = (cy * cz);
|
||||
register f32 cysz = (cy * sz);
|
||||
register f32 sycz = (sy * cz);
|
||||
register f32 sysz = (sy * sz);
|
||||
dest[0][0] = ((sx * sysz) + cycz);
|
||||
dest[1][0] = ((sx * sycz) - cysz);
|
||||
dest[2][0] = (cx * sy);
|
||||
dest[0][1] = (cx * sz);
|
||||
dest[1][1] = (cx * cz);
|
||||
dest[2][1] = -sx;
|
||||
dest[3][1] = translate[1];
|
||||
|
||||
dest[0][2] = -sy * cz + sx * cy * sz;
|
||||
dest[1][2] = sy * sz + sx * cy * cz;
|
||||
dest[0][2] = ((sx * cysz) - sycz);
|
||||
dest[1][2] = ((sx * cycz) + sysz);
|
||||
dest[2][2] = cx * cy;
|
||||
dest[3][2] = translate[2];
|
||||
|
||||
vec3_copy(dest[3], translate);
|
||||
dest[0][3] = dest[1][3] = dest[2][3] = 0.;
|
||||
((u32 *) dest)[15] = 0x3F800000;
|
||||
}
|
||||
@@ -289,33 +314,29 @@ void mtxf_rotate_zxy_and_translate(Mat4 dest, Vec3f translate, Vec3s rotate) {
|
||||
* axis, and then translates.
|
||||
*/
|
||||
void mtxf_rotate_xyz_and_translate(Mat4 dest, Vec3f b, Vec3s c) {
|
||||
register f32 sx = sins(c[0]);
|
||||
register f32 cx = coss(c[0]);
|
||||
|
||||
register f32 sy = sins(c[1]);
|
||||
register f32 cy = coss(c[1]);
|
||||
|
||||
register f32 sz = sins(c[2]);
|
||||
register f32 cz = coss(c[2]);
|
||||
|
||||
dest[0][0] = cy * cz;
|
||||
dest[0][1] = cy * sz;
|
||||
register f32 sx = sins(c[0]);
|
||||
register f32 cx = coss(c[0]);
|
||||
register f32 sy = sins(c[1]);
|
||||
register f32 cy = coss(c[1]);
|
||||
register f32 sz = sins(c[2]);
|
||||
register f32 cz = coss(c[2]);
|
||||
register f32 cxsz = (cx * sz);
|
||||
register f32 cxcz = (cx * cz);
|
||||
register f32 sxsz = (sx * sz);
|
||||
register f32 sxcz = (sx * cz);
|
||||
dest[0][0] = (cy * cz);
|
||||
dest[0][1] = (cy * sz);
|
||||
dest[0][2] = -sy;
|
||||
dest[1][0] = ((sxcz * sy) - cxsz);
|
||||
dest[1][1] = ((sxsz * sy) + cxcz);
|
||||
dest[1][2] = (sx * cy);
|
||||
dest[2][0] = ((cxcz * sy) + sxsz);
|
||||
dest[2][1] = ((cxsz * sy) - sxcz);
|
||||
dest[2][2] = (cx * cy);
|
||||
dest[0][3] = 0;
|
||||
|
||||
dest[1][0] = sx * sy * cz - cx * sz;
|
||||
dest[1][1] = sx * sy * sz + cx * cz;
|
||||
dest[1][2] = sx * cy;
|
||||
dest[1][3] = 0;
|
||||
|
||||
dest[2][0] = cx * sy * cz + sx * sz;
|
||||
dest[2][1] = cx * sy * sz - sx * cz;
|
||||
dest[2][2] = cx * cy;
|
||||
dest[2][3] = 0;
|
||||
|
||||
dest[3][0] = b[0];
|
||||
dest[3][1] = b[1];
|
||||
dest[3][2] = b[2];
|
||||
vec3_copy(dest[3], b);
|
||||
((u32 *) dest)[15] = 0x3F800000;
|
||||
}
|
||||
|
||||
@@ -333,10 +354,17 @@ void mtxf_billboard(Mat4 dest, Mat4 mtx, Vec3f position, s32 angle) {
|
||||
*temp = 0;
|
||||
temp++;
|
||||
}
|
||||
dest[0][0] = coss(angle);
|
||||
dest[0][1] = sins(angle);
|
||||
dest[1][0] = -dest[0][1];
|
||||
dest[1][1] = dest[0][0];
|
||||
if (angle == 0x0) {
|
||||
dest[0][0] = 1;
|
||||
dest[0][1] = 0;
|
||||
dest[1][0] = 0;
|
||||
dest[1][1] = 1;
|
||||
} else {
|
||||
dest[0][0] = coss(angle);
|
||||
dest[0][1] = sins(angle);
|
||||
dest[1][0] = -dest[0][1];
|
||||
dest[1][1] = dest[0][0];
|
||||
}
|
||||
((u32 *) dest)[10] = 0x3F800000;
|
||||
dest[2][3] = 0;
|
||||
((u32 *) dest)[15] = 0x3F800000;
|
||||
@@ -344,7 +372,7 @@ void mtxf_billboard(Mat4 dest, Mat4 mtx, Vec3f position, s32 angle) {
|
||||
temp = (f32 *)dest;
|
||||
temp2 = (f32 *)mtx;
|
||||
for (i = 0; i < 3; i++) {
|
||||
temp[12] = temp2[0] * position[0] + temp2[4] * position[1] + temp2[8] * position[2] + temp2[12];
|
||||
temp[12] = (temp2[0] * position[0]) + (temp2[4] * position[1]) + (temp2[8] * position[2]) + temp2[12];
|
||||
temp++;
|
||||
temp2++;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,20 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define NEAR_ZERO 0.00001f
|
||||
#define NEARER_ZERO 0.000001f
|
||||
#define NEAR_ONE 0.99999f
|
||||
#define NEAR_ZERO __FLT_EPSILON__
|
||||
#define NEAR_ONE (1.0f - __FLT_EPSILON__)
|
||||
|
||||
extern Vec3f gVec3fX;
|
||||
extern Vec3f gVec3fY;
|
||||
extern Vec3f gVec3fZ;
|
||||
extern Vec3f gVec3fNX;
|
||||
extern Vec3f gVec3fNY;
|
||||
extern Vec3f gVec3fNZ;
|
||||
extern Vec3f gVec3fZero;
|
||||
extern Vec3s gVec3sZero;
|
||||
extern Vec3i gVec3iZero;
|
||||
extern Vec3f gVec3fOne;
|
||||
extern Vec3s gVec3sOne;
|
||||
|
||||
/**
|
||||
* Converts an angle in degrees to sm64's s16 angle units. For example, DEGREES(90) == 0x4000
|
||||
@@ -433,6 +444,7 @@ extern f32 gSineTable[];
|
||||
} \
|
||||
}
|
||||
|
||||
f32 absf(f32 x);
|
||||
s32 min_3i(s32 a0, s32 a1, s32 a2);
|
||||
f32 min_3f(f32 a0, f32 a1, f32 a2);
|
||||
s32 max_3i(s32 a0, s32 a1, s32 a2);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,7 @@ void bhv_bbh_tilting_trap_platform_loop(void) {
|
||||
// the platform more dangerous. This code will not work correctly
|
||||
// without the oAction changes above, since oTimer will not ever
|
||||
// reset to 0 without them.
|
||||
if ((absi(o->oFaceAnglePitch) < 3000) || (o->oTimer >= 16)) {
|
||||
if ((ABSI(o->oFaceAnglePitch) < 3000) || (o->oTimer >= 16)) {
|
||||
// Make the platform return to the horizontal at a speed of
|
||||
// 200 angle units/frame, and clamp it to 0 if it's within 200 units of 0.
|
||||
o->oAngleVelPitch = 0;
|
||||
|
||||
@@ -854,6 +854,17 @@ void bhv_boo_in_castle_loop(void) {
|
||||
cur_obj_move_using_fvel_and_gravity();
|
||||
}
|
||||
|
||||
static s8 sBbhStairJiggleOffsets[] = { -8, 8, -4, 4 };
|
||||
|
||||
s32 jiggle_bbh_stair(s32 index) {
|
||||
if (index >= 4 || index < 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
o->oPosY += sBbhStairJiggleOffsets[index];
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void bhv_boo_staircase(void) {
|
||||
f32 targetY = 0.0f;
|
||||
|
||||
|
||||
@@ -508,10 +508,9 @@ void bhv_wooden_post_update(void) {
|
||||
if (o->oDistanceToMario > 400.0f) {
|
||||
o->oTimer = o->oWoodenPostTotalMarioAngle = 0;
|
||||
} else {
|
||||
// When mario runs around the post 3 times within 200 frames, spawn
|
||||
// coins
|
||||
// When mario runs around the post 3 times within 200 frames, spawn coins
|
||||
o->oWoodenPostTotalMarioAngle += (s16)(o->oAngleToMario - o->oWoodenPostPrevAngleToMario);
|
||||
if (absi(o->oWoodenPostTotalMarioAngle) > 0x30000 && o->oTimer < 200) {
|
||||
if (ABSI(o->oWoodenPostTotalMarioAngle) > 0x30000 && o->oTimer < 200) {
|
||||
obj_spawn_loot_yellow_coins(o, 5, 20.0f);
|
||||
set_object_respawn_info_bits(o, 1);
|
||||
}
|
||||
|
||||
@@ -38,8 +38,9 @@ void checkerboard_plat_act_move_y(UNUSED s32 unused, f32 vel, s32 time) {
|
||||
void checkerboard_plat_act_rotate(s32 nextAction, s16 pitch) {
|
||||
o->oVelY = 0.0f;
|
||||
o->oAngleVelPitch = pitch;
|
||||
if (o->oTimer + 1 == 0x8000 / absi(pitch))
|
||||
if (o->oTimer + 1 == 0x8000 / ABSI(pitch)) {
|
||||
o->oAction = nextAction;
|
||||
}
|
||||
o->oCheckerBoardPlatformRotateAction = nextAction;
|
||||
}
|
||||
|
||||
@@ -72,12 +73,13 @@ void bhv_checkerboard_platform_loop(void) {
|
||||
checkerboard_plat_act_rotate(1, -512);
|
||||
break;
|
||||
}
|
||||
o->oMoveAnglePitch += absi(o->oAngleVelPitch);
|
||||
o->oFaceAnglePitch += absi(o->oAngleVelPitch);
|
||||
o->oMoveAnglePitch += ABSI(o->oAngleVelPitch);
|
||||
o->oFaceAnglePitch += ABSI(o->oAngleVelPitch);
|
||||
o->oFaceAngleYaw = o->oMoveAngleYaw;
|
||||
if (o->oMoveAnglePitch != 0) {
|
||||
o->oForwardVel = signum_positive(o->oAngleVelPitch) * sins(o->oMoveAnglePitch) * radius;
|
||||
o->oVelY = signum_positive(o->oAngleVelPitch) * coss(o->oMoveAnglePitch) * radius;
|
||||
f32 mul = (o->oAngleVelPitch >= 0) ? 1.0f : -1.0f;
|
||||
o->oForwardVel = mul * sins(o->oMoveAnglePitch) * radius;
|
||||
o->oVelY = mul * coss(o->oMoveAnglePitch) * radius;
|
||||
}
|
||||
if (o->oCheckerBoardPlatformRotateAction == 1) {
|
||||
o->oAngleVelPitch = 0;
|
||||
|
||||
@@ -101,7 +101,7 @@ void coffin_act_idle(void) {
|
||||
// It also checks in the case Mario is squished, so he doesn't get permanently squished.
|
||||
if (o->oTimer > 60
|
||||
&& (o->oDistanceToMario > 100.0f || gMarioState->action == ACT_SQUISHED)) {
|
||||
if (gMarioObject->oPosY - o->oPosY < 200.0f && absf(distForwards) < 140.0f) {
|
||||
if (gMarioObject->oPosY - o->oPosY < 200.0f && ABSF(distForwards) < 140.0f) {
|
||||
if (distSideways < 150.0f && distSideways > -450.0f) {
|
||||
cur_obj_play_sound_2(SOUND_GENERAL_BUTTON_PRESS_2_LOWPRIO);
|
||||
o->oAction = COFFIN_ACT_STAND_UP;
|
||||
|
||||
@@ -65,12 +65,13 @@ void bhv_jrb_sliding_box_loop(void) {
|
||||
o->oJrbSlidingBoxAdditiveZ = sins(o->oJrbSlidingBoxAngle) * 20.0f;
|
||||
o->oJrbSlidingBoxAngle += 0x100;
|
||||
o->oParentRelativePosZ += o->oJrbSlidingBoxAdditiveZ;
|
||||
if (gMarioObject->oPosY > 1000.0f)
|
||||
if (absf(o->oJrbSlidingBoxAdditiveZ) > 3.0f)
|
||||
cur_obj_play_sound_1(SOUND_AIR_ROUGH_SLIDE);
|
||||
if ((gMarioObject->oPosY > 1000.0f) && (ABSF(o->oJrbSlidingBoxAdditiveZ) > 3.0f)) {
|
||||
cur_obj_play_sound_1(SOUND_AIR_ROUGH_SLIDE);
|
||||
}
|
||||
obj_set_hitbox(o, &sSkullSlidingBoxHitbox);
|
||||
if (!(o->oJrbSlidingBoxAngle & 0x7FFF))
|
||||
if (!(o->oJrbSlidingBoxAngle & 0x7FFF)) {
|
||||
cur_obj_become_tangible();
|
||||
}
|
||||
if (obj_check_if_collided_with_object(o, gMarioObject)) {
|
||||
o->oInteractStatus = 0;
|
||||
cur_obj_become_intangible();
|
||||
|
||||
@@ -104,9 +104,9 @@ static void klepto_change_target(void) {
|
||||
dx = gMarioObject->oPosX - sKleptoTargetPositions[i][0];
|
||||
dz = gMarioObject->oPosZ - sKleptoTargetPositions[i][2];
|
||||
|
||||
targetDist = sqrtf(sqr(dx) + sqr(dz));
|
||||
if (targetDist < minTargetDist) {
|
||||
minTargetDist = targetDist;
|
||||
targetDist = (sqr(dx) + sqr(dz));
|
||||
if (targetDist < sqr(minTargetDist)) {
|
||||
minTargetDist = sqrtf(targetDist);
|
||||
newTarget = i;
|
||||
}
|
||||
}
|
||||
@@ -114,7 +114,7 @@ static void klepto_change_target(void) {
|
||||
newTarget = random_u16() % 3;
|
||||
}
|
||||
|
||||
o->oKleptoHomeYOffset = 400 * absi(newTarget - o->oKleptoTargetNumber);
|
||||
o->oKleptoHomeYOffset = 400 * ABSI(newTarget - o->oKleptoTargetNumber);
|
||||
o->oKleptoTargetNumber = newTarget;
|
||||
|
||||
o->oHomeX = sKleptoTargetPositions[o->oKleptoTargetNumber][0];
|
||||
|
||||
@@ -182,7 +182,7 @@ static void mr_blizzard_act_rotate(void) {
|
||||
// If Dizziness is not 0 and Mr. Blizzard's FaceRollAngle has a magnitude greater than
|
||||
// 67.5 degrees move to death action, delete the snowball, and make Mr. Blizzard intangible.
|
||||
if (o->oMrBlizzardDizziness != 0.0f) {
|
||||
if (absi(o->oFaceAngleRoll) > 0x3000) {
|
||||
if (ABSI(o->oFaceAngleRoll) > 0x3000) {
|
||||
o->oAction = MR_BLIZZARD_ACT_DEATH;
|
||||
o->prevObj = o->oMrBlizzardHeldObj = NULL;
|
||||
cur_obj_become_intangible();
|
||||
|
||||
@@ -31,7 +31,7 @@ void bhv_seesaw_platform_init(void) {
|
||||
void bhv_seesaw_platform_update(void) {
|
||||
o->oFaceAnglePitch += (s32) o->oSeesawPlatformPitchVel;
|
||||
|
||||
if (absf(o->oSeesawPlatformPitchVel) > 10.0f) {
|
||||
if (ABSF(o->oSeesawPlatformPitchVel) > 10.0f) {
|
||||
cur_obj_play_sound_1(SOUND_ENV_BOAT_ROCKING1);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@ void bhv_sl_snowman_wind_loop(void) {
|
||||
|
||||
// Mario has come close, begin dialog.
|
||||
} else if (o->oSubAction == SL_SNOWMAN_WIND_ACT_TALKING) {
|
||||
if (cur_obj_update_dialog(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TEXT_DEFAULT, DIALOG_153, 0))
|
||||
if (cur_obj_update_dialog(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TEXT_DEFAULT, DIALOG_153, 0)) {
|
||||
o->oSubAction++;
|
||||
|
||||
}
|
||||
// Blowing, spawn wind particles (SL_SNOWMAN_WIND_ACT_BLOWING)
|
||||
} else if (o->oDistanceToMario < 1500.0f && absf(gMarioObject->oPosY - o->oHomeY) < 500.0f) {
|
||||
// Point towards Mario, but only within 0x1500 angle units of the original angle.
|
||||
|
||||
@@ -343,7 +343,7 @@ s32 update_hang_moving(struct MarioState *m) {
|
||||
// Reduce Mario's forward speed by the turn amount, so Mario won't move off sideward from the intended angle when turning around.
|
||||
m->forwardVel *= ((coss(dYaw) + 1.0f) / 2.0f); // 1.0f is turning forwards, 0.0f is turning backwards
|
||||
// Increase turn speed if forwardVel is lower and intendedMag is higher
|
||||
turnRange *= (2.0f - (ABSF(m->forwardVel) / MAX(m->intendedMag, __FLT_EPSILON__))); // 1.0f front, 2.0f back
|
||||
turnRange *= (2.0f - (ABSF(m->forwardVel) / MAX(m->intendedMag, NEAR_ZERO))); // 1.0f front, 2.0f back
|
||||
}
|
||||
m->faceAngle[1] = approach_angle(m->faceAngle[1], m->intendedYaw, turnRange);
|
||||
#else
|
||||
|
||||
@@ -468,7 +468,7 @@ void update_walking_speed(struct MarioState *m) {
|
||||
// Reduce Mario's forward speed by the turn amount, so Mario won't move off sideward from the intended angle when turning around.
|
||||
m->forwardVel *= ((coss(dYaw) + 1.0f) / 2.0f); // 1.0f is turning forwards, 0.0f is turning backwards
|
||||
// Increase turn speed if forwardVel is lower and intendedMag is higher
|
||||
turnRange *= (2.0f - (ABSF(m->forwardVel) / MAX(m->intendedMag, __FLT_EPSILON__))); // 1.0f front, 2.0f back
|
||||
turnRange *= (2.0f - (ABSF(m->forwardVel) / MAX(m->intendedMag, NEAR_ZERO))); // 1.0f front, 2.0f back
|
||||
}
|
||||
m->faceAngle[1] = approach_angle(m->faceAngle[1], m->intendedYaw, turnRange);
|
||||
#elif GROUND_TURN_MODE == 2 // similar to mode 1, but a bit further from vanilla, and allows instant turnaround if Mario is moving slower than a certain threshold.
|
||||
|
||||
@@ -386,10 +386,9 @@ static s32 obj_smooth_turn(s16 *angleVel, s32 *angle, s16 targetAngle, f32 targe
|
||||
s16 currentSpeed;
|
||||
s16 currentAngle = (s16)(*angle);
|
||||
|
||||
*angleVel =
|
||||
approach_s16_symmetric(*angleVel, (targetAngle - currentAngle) * targetSpeedProportion, accel);
|
||||
*angleVel = approach_s16_symmetric(*angleVel, (targetAngle - currentAngle) * targetSpeedProportion, accel);
|
||||
|
||||
currentSpeed = absi(*angleVel);
|
||||
currentSpeed = ABSI(*angleVel);
|
||||
clamp_s16(¤tSpeed, minSpeed, maxSpeed);
|
||||
|
||||
*angle = approach_angle(*angle, targetAngle, currentSpeed);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -219,9 +219,6 @@ struct GraphNode_802A45E4 {
|
||||
};
|
||||
|
||||
void obj_set_hitbox(struct Object *obj, struct ObjectHitbox *hitbox);
|
||||
s32 signum_positive(s32 x);
|
||||
f32 absf(f32 x);
|
||||
s32 absi(s32 a0);
|
||||
s32 cur_obj_wait_then_blink(s32 timeUntilBlinking, s32 numBlinks);
|
||||
s32 cur_obj_is_mario_ground_pounding_platform(void);
|
||||
void spawn_mist_particles(void);
|
||||
@@ -233,7 +230,6 @@ s32 cur_obj_progress_direction_table(void);
|
||||
void cur_obj_scale_over_time(s32 axis, s32 times, f32 start, f32 end);
|
||||
void cur_obj_set_pos_to_home_with_debug(void);
|
||||
s32 cur_obj_is_mario_on_platform(void);
|
||||
s32 jiggle_bbh_stair(s32 timer);
|
||||
void cur_obj_call_action_function(void (*actionFunctions[])(void));
|
||||
void spawn_base_star_with_no_lvl_exit(void);
|
||||
s32 cur_obj_mario_far_away(void);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user