callContext arg name in geo functions

This commit is contained in:
Arceveti
2021-09-29 00:09:11 -07:00
parent 565af70485
commit 67ee6b395b
8 changed files with 65 additions and 135 deletions

View File

@@ -156,12 +156,11 @@ void spawn_mist_particles_variable(s32 count, s32 offsetY, f32 size) {
#include "behaviors/breakable_box.inc.c"
// not sure what this is doing here. not in a behavior file.
Gfx *geo_move_mario_part_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) {
Gfx *geo_move_mario_part_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx) {
Mat4 mtx2;
struct Object *obj;
if (run == TRUE) {
obj = (struct Object *) gCurGraphNodeObject;
if (callContext == GEO_CONTEXT_RENDER) {
struct Object *obj = (struct Object *) gCurGraphNodeObject;
if (obj == gMarioObject && obj->prevObj != NULL) {
create_transformation_from_matrices(mtx2, mtx, *gCurGraphNodeCamera->matrixPtr);
obj_update_pos_from_parent_transformation(mtx2, obj->prevObj);

View File

@@ -551,25 +551,25 @@ void bhv_dust_smoke_loop(void);
void bhv_yoshi_loop(void);
void bhv_volcano_trap_loop(void);
Gfx *geo_move_mario_part_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx);
Gfx *geo_move_mario_part_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx);
// Bowser
Gfx *geo_bits_bowser_coloring(s32 run, struct GraphNode *node, UNUSED s32 a2);
Gfx *geo_update_body_rot_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx);
Gfx *geo_switch_bowser_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *mtx);
Gfx *geo_bits_bowser_coloring(s32 callContext, struct GraphNode *node, UNUSED s32 context);
Gfx *geo_update_body_rot_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx);
Gfx *geo_switch_bowser_eyes(s32 callContext, struct GraphNode *node, UNUSED Mat4 *mtx);
// Tuxie
Gfx *geo_switch_tuxie_mother_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *mtx);
Gfx *geo_switch_tuxie_mother_eyes(s32 callContext, struct GraphNode *node, UNUSED Mat4 *mtx);
// Cap switch
Gfx *geo_update_held_mario_pos(s32 run, UNUSED struct GraphNode *node, Mat4 mtx);
Gfx *geo_update_held_mario_pos(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx);
// Snufit
Gfx *geo_snufit_move_mask(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c);
Gfx *geo_snufit_scale_body(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c);
// Bowser key cutscene
Gfx *geo_scale_bowser_key(s32 run, struct GraphNode *node, UNUSED Mat4 mtx);
Gfx *geo_scale_bowser_key(s32 callContext, struct GraphNode *node, UNUSED Mat4 mtx);
// Water splash
extern struct WaterDropletParams gShallowWaterSplashDropletParams;

View File

@@ -1,12 +1,10 @@
// king_bobomb.c.inc
// Copy of geo_update_projectile_pos_from_parent
Gfx *geo_update_held_mario_pos(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) {
Gfx *geo_update_held_mario_pos(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx) {
Mat4 mtx2;
struct Object *obj;
if (run == TRUE) {
obj = (struct Object *) gCurGraphNodeObject;
if (callContext == GEO_CONTEXT_RENDER) {
struct Object *obj = (struct Object *) gCurGraphNodeObject;
if (obj->prevObj != NULL) {
create_transformation_from_matrices(mtx2, mtx, *gCurGraphNodeCamera->matrixPtr);
obj_update_pos_from_parent_transformation(mtx2, obj->prevObj);

View File

@@ -277,34 +277,30 @@ void bhv_small_penguin_loop(void) {
/** Geo switch logic for Tuxie's mother's eyes. Cases 0-4. Interestingly, case
* 4 is unused, and is the eye state seen in Shoshinkai 1995 footage.
*/
Gfx *geo_switch_tuxie_mother_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 *mtx) {
struct Object *obj;
struct GraphNodeSwitchCase *switchCase;
s32 timer;
if (run == TRUE) {
obj = (struct Object *) gCurGraphNodeObject;
switchCase = (struct GraphNodeSwitchCase *) node;
Gfx *geo_switch_tuxie_mother_eyes(s32 callContext, struct GraphNode *node, UNUSED Mat4 *mtx) {
if (callContext == GEO_CONTEXT_RENDER) {
struct Object *obj = (struct Object *) gCurGraphNodeObject;
struct GraphNodeSwitchCase *switchCase = (struct GraphNodeSwitchCase *) node;
switchCase->selectedCase = 0;
// timer logic for blinking. uses cases 0-2.
timer = gGlobalTimer % 50;
if (timer < 43)
s32 timer = gGlobalTimer % 50;
if (timer < 43) {
switchCase->selectedCase = 0;
else if (timer < 45)
} else if (timer < 45) {
switchCase->selectedCase = 1;
else if (timer < 47)
} else if (timer < 47) {
switchCase->selectedCase = 2;
else
} else {
switchCase->selectedCase = 1;
}
/** make Tuxie's Mother have angry eyes if Mario takes the correct baby
* after giving it back. The easiest way to check this is to see if she's
* moving, since she only does when she's chasing Mario.
*/
if (segmented_to_virtual(bhvTuxiesMother) == obj->behavior)
if (obj->oForwardVel > 5.0f)
switchCase->selectedCase = 3;
if ((segmented_to_virtual(bhvTuxiesMother) == obj->behavior) && (obj->oForwardVel > 5.0f)) {
switchCase->selectedCase = 3;
}
}
return NULL;
}

View File

@@ -27,25 +27,18 @@ void handle_cap_ukiki_reset(void) {
* the cap ukiki.
*/
s32 is_cap_ukiki_and_mario_has_normal_cap_on_head(void) {
if (o->oBehParams2ndByte == UKIKI_CAP) {
if (does_mario_have_normal_cap_on_head(gMarioState)) {
return TRUE;
}
}
return FALSE;
return ((o->oBehParams2ndByte == UKIKI_CAP) && does_mario_have_normal_cap_on_head(gMarioState));
}
/**
* Unused copy of geo_update_projectile_pos_from_parent. Perhaps a copy paste mistake.
*/
Gfx *geo_update_projectile_pos_from_parent_copy(s32 run,UNUSED struct GraphNode *node, Mat4 mtx) {
Gfx *geo_update_projectile_pos_from_parent_copy(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx) {
Mat4 mtx2;
struct Object* obj;
if (run == TRUE) {
if (callContext == GEO_CONTEXT_RENDER) {
// TODO: change global type to Object pointer
obj = (struct Object *) gCurGraphNodeObject;
struct Object *obj = (struct Object *) gCurGraphNodeObject;
if (obj->prevObj != NULL) {
create_transformation_from_matrices(mtx2, mtx, *gCurGraphNodeCamera->matrixPtr);

View File

@@ -136,7 +136,6 @@ void gd_rot_mat_about_vec(Mat4f *mtx, struct GdVec3f *vec) {
* translation column of a mat4f matrix.
*/
void gd_add_vec3f_to_mat4f_offset(Mat4f *mtx, struct GdVec3f *vec) {
UNUSED Mat4f temp;
f32 z, y, x;
x = vec->x;
@@ -230,7 +229,6 @@ f32 gd_clamp_f32(f32 a, f32 b) {
} else if (a < -b) {
a = -b;
}
return a;
}
@@ -375,8 +373,7 @@ f32 gd_dot_vec3f(struct GdVec3f *a, struct GdVec3f *b) {
* Inverts each element of src into dst.
*/
void UNUSED gd_invert_elements_mat4f(Mat4f *src, Mat4f *dst) {
s32 i;
s32 j;
s32 i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
@@ -397,8 +394,7 @@ void gd_inverse_mat4f(Mat4f *src, Mat4f *dst) {
gd_adjunct_mat4f(src, dst);
determinant = gd_mat4f_det(dst);
if (ABS(determinant) < 1e-5) //? 1e-5f
{
if (ABS(determinant) < 1e-5) { //? 1e-5f
fatal_print("Non-singular matrix, no inverse!\n");
}
@@ -530,9 +526,7 @@ f32 gd_3x3_det(f32 r0c0, f32 r0c1, f32 r0c2,
* returns the determinant.
*/
f32 gd_2x2_det(f32 a, f32 b, f32 c, f32 d) {
f32 det = a * d - b * c;
return det;
return (a * d) - (b * c);
}
/**
@@ -554,46 +548,6 @@ void UNUSED gd_create_neg_vec_zero_first_mat_row(Mat4f *mtx, struct GdVec3f *vec
}
}
/**
* This function quite literally does nothing.
* Seems to have been meant to create a vector from a quaternion?
*/
void UNUSED gd_broken_quat_to_vec3f(f32 quat[4], struct GdVec3f *vec, f32 zHalf, s32 i, s32 run) {
s32 j;
s32 k;
UNUSED f32 jVal;
UNUSED f32 kVal;
UNUSED struct GdVec3f uVec;
struct GdVec3f tVec;
tVec.x = vec->x;
tVec.y = vec->y;
tVec.z = vec->z;
if (run < 0) {
goto end;
}
if ((j = i + 1) >= 4) {
j = 1;
}
if ((k = j + 1) >= 4) {
k = 1;
}
jVal = quat[j];
kVal = quat[k];
uVec.x = quat[0];
uVec.y = quat[i];
uVec.z = zHalf + zHalf;
end:
vec->x = tVec.x;
vec->y = tVec.y;
vec->z = tVec.z;
}
/**
* This function is a pitch rotation of a quaternion, with the sign allowing both regular
* and inverse multiplication.
@@ -896,8 +850,7 @@ void gd_print_bounding_box(UNUSED const char *prefix, UNUSED const struct GdBoun
* does have a "Matrix:" prefix, so it was definitely used at one point.
*/
void gd_print_mtx(UNUSED const char *prefix, const Mat4f *mtx) {
s32 i;
s32 j;
s32 i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
@@ -927,13 +880,9 @@ void UNUSED gd_print_quat(const char *prefix, const f32 f[4]) {
void UNUSED gd_rot_mat_offset(Mat4f *dst, f32 x, f32 y, f32 z, s32 copy) {
f32 adj = 100.0f;
Mat4f rot;
f32 c;
f32 s;
f32 opp;
f32 mag;
struct GdVec3f vec;
opp = gd_sqrt_f(SQ(x) + SQ(y) + SQ(z));
f32 opp = gd_sqrt_f(SQ(x) + SQ(y) + SQ(z));
if (opp == 0.0f) {
if (copy) {
@@ -942,9 +891,9 @@ void UNUSED gd_rot_mat_offset(Mat4f *dst, f32 x, f32 y, f32 z, s32 copy) {
return;
}
mag = gd_sqrt_f(SQ(adj) + SQ(opp));
c = adj / mag;
s = opp / mag;
f32 mag = gd_sqrt_f(SQ(adj) + SQ(opp));
f32 c = adj / mag;
f32 s = opp / mag;
vec.x = -y / opp;
vec.y = -x / opp;

View File

@@ -37,19 +37,18 @@ static s32 sTmCopyrightAlpha;
/**
* Geo callback to render the "Super Mario 64" logo on the title screen
*/
Gfx *geo_intro_super_mario_64_logo(s32 state, struct GraphNode *node, UNUSED void *context) {
Gfx *geo_intro_super_mario_64_logo(s32 callContext, struct GraphNode *node, UNUSED void *context) {
struct GraphNode *graphNode = node;
Gfx *dl = NULL;
Gfx *dlIter = NULL;
Mtx *scaleMat;
f32 *scaleTable1 = segmented_to_virtual(intro_seg7_table_scale_1);
f32 *scaleTable2 = segmented_to_virtual(intro_seg7_table_scale_2);
if (state != 1) {
if (callContext != GEO_CONTEXT_RENDER) {
sIntroFrameCounter = 0;
} else if (state == 1) {
} else if (callContext == GEO_CONTEXT_RENDER) {
f32 *scaleTable1 = segmented_to_virtual(intro_seg7_table_scale_1);
f32 *scaleTable2 = segmented_to_virtual(intro_seg7_table_scale_2);
SET_GRAPH_NODE_LAYER(graphNode->flags, LAYER_OPAQUE);
scaleMat = alloc_display_list(sizeof(*scaleMat));
Mtx *scaleMat = alloc_display_list(sizeof(*scaleMat));
dl = alloc_display_list(4 * sizeof(*dl));
dlIter = dl;
Vec3f scale;
@@ -83,14 +82,14 @@ Gfx *geo_intro_super_mario_64_logo(s32 state, struct GraphNode *node, UNUSED voi
/**
* Geo callback to render TM and Copyright on the title screen
*/
Gfx *geo_intro_tm_copyright(s32 state, struct GraphNode *node, UNUSED void *context) {
Gfx *geo_intro_tm_copyright(s32 callContext, struct GraphNode *node, UNUSED void *context) {
struct GraphNode *graphNode = node;
Gfx *dl = NULL;
Gfx *dlIter = NULL;
if (state != 1) { // reset
if (callContext != GEO_CONTEXT_RENDER) { // reset
sTmCopyrightAlpha = 0;
} else if (state == 1) { // draw
} else if (callContext == GEO_CONTEXT_RENDER) { // draw
dl = alloc_display_list(5 * sizeof(*dl));
dlIter = dl;
gSPDisplayList(dlIter++, dl_proj_mtx_fullscreen);
@@ -179,7 +178,7 @@ static s8 *introBackgroundTables[] = { introBackgroundIndexTable };
/**
* Geo callback to render the intro background tiles
*/
Gfx *geo_intro_regular_backdrop(s32 state, struct GraphNode *node, UNUSED void *context) {
Gfx *geo_intro_regular_backdrop(s32 callContext, struct GraphNode *node, UNUSED void *context) {
struct GraphNodeMore *graphNode = (struct GraphNodeMore *) node;
s32 index = graphNode->bgTableID & 0xff; // TODO: word at offset 0x18 of struct GraphNode (always ends up being 0)
s8 *backgroundTable = introBackgroundTables[index];
@@ -187,7 +186,7 @@ Gfx *geo_intro_regular_backdrop(s32 state, struct GraphNode *node, UNUSED void *
Gfx *dlIter = NULL;
s32 i;
if (state == 1) { // draw
if (callContext == GEO_CONTEXT_RENDER) { // draw
dl = alloc_display_list(16 * sizeof(*dl));
dlIter = dl;
SET_GRAPH_NODE_LAYER(graphNode->node.flags, LAYER_OPAQUE);
@@ -212,14 +211,13 @@ static s8 gameOverBackgroundTable[] = {
/**
* Geo callback to render the Game Over background tiles
*/
Gfx *geo_intro_gameover_backdrop(s32 state, struct GraphNode *node, UNUSED void *context) {
Gfx *geo_intro_gameover_backdrop(s32 callContext, struct GraphNode *node, UNUSED void *context) {
struct GraphNode *graphNode = node;
Gfx *dl = NULL;
Gfx *dlIter = NULL;
s32 j;
s32 i;
s32 i, j;
if (state != 1) { // reset
if (callContext != GEO_CONTEXT_RENDER) { // reset
sGameOverFrameCounter = 0;
sGameOverTableIndex = -2;
for (i = 0; i < ARRAY_COUNT(gameOverBackgroundTable); ++i)
@@ -376,17 +374,16 @@ u16 *intro_sample_frame_buffer(s32 imageW, s32 imageH, s32 sampleW, s32 sampleH)
return image;
}
Gfx *geo_intro_face_easter_egg(s32 state, struct GraphNode *node, UNUSED void *context) {
Gfx *geo_intro_face_easter_egg(s32 callContext, struct GraphNode *node, UNUSED void *context) {
struct GraphNodeGenerated *genNode = (struct GraphNodeGenerated *)node;
Gfx *dl = NULL;
s32 i;
if (state != 1) {
if (callContext != GEO_CONTEXT_RENDER) {
for (i = 0; i < 48; i++) {
sFaceVisible[i] = 0;
}
} else if (state == 1) {
} else if (callContext == GEO_CONTEXT_RENDER) {
if (sFaceCounter == 0) {
if (gPlayer1Controller->buttonPressed & Z_TRIG) {
play_sound(SOUND_MENU_STAR_SOUND, gGlobalSoundSource);
@@ -399,7 +396,6 @@ Gfx *geo_intro_face_easter_egg(s32 state, struct GraphNode *node, UNUSED void *c
sFaceCounter = 0;
}
}
// Draw while the first or last face is visible.
if (sFaceVisible[0] == 1 || sFaceVisible[17] == 1) {
u16 *image = intro_sample_frame_buffer(40, 40, 2, 2);
@@ -415,18 +411,17 @@ Gfx *geo_intro_face_easter_egg(s32 state, struct GraphNode *node, UNUSED void *c
#endif
#if ENABLE_RUMBLE
Gfx *geo_intro_rumble_pak_graphic(s32 state, struct GraphNode *node, UNUSED void *context) {
Gfx *geo_intro_rumble_pak_graphic(s32 callContext, struct GraphNode *node, UNUSED void *context) {
struct GraphNodeGenerated *genNode = (struct GraphNodeGenerated *)node;
Gfx *dlIter;
Gfx *dl = NULL;
s32 introContext;
s8 backgroundTileSix = 0;
if (state != 1) {
if (callContext != GEO_CONTEXT_RENDER) {
dl = NULL;
} else if (state == 1) {
} else if (callContext == GEO_CONTEXT_RENDER) {
SET_GRAPH_NODE_LAYER(genNode->fnNode.node.flags, LAYER_OPAQUE);
introContext = genNode->parameter & 0xFF;
s32 introContext = (genNode->parameter & 0xFF);
if (introContext == 0) {
backgroundTileSix = introBackgroundIndexTable[6];
} else if (introContext == 1) {

View File

@@ -7,16 +7,16 @@
#include "types.h"
#include "engine/graph_node.h"
Gfx *geo_intro_super_mario_64_logo(s32 state, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_tm_copyright(s32 state, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_regular_backdrop(s32 state, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_gameover_backdrop(s32 state, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_super_mario_64_logo(s32 callContext, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_tm_copyright(s32 callContext, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_regular_backdrop(s32 callContext, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_gameover_backdrop(s32 callContext, struct GraphNode *node, UNUSED void *context);
#ifdef GODDARD_EASTER_EGG
Gfx *geo_intro_face_easter_egg(s32 state, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_face_easter_egg(s32 callContext, struct GraphNode *node, UNUSED void *context);
#endif
#if ENABLE_RUMBLE
Gfx *geo_intro_rumble_pak_graphic(s32 state, struct GraphNode *node, UNUSED void *context);
Gfx *geo_intro_rumble_pak_graphic(s32 callContext, struct GraphNode *node, UNUSED void *context);
#endif
#endif // INTRO_GEO_H