Super Mario 64 Source
A Super Mario 64 decompilation, brought to you by a bunch of clever folks.
Macros | Functions | Variables
object_helpers.c File Reference
#include <ultra64.h>
#include "sm64.h"
#include "behavior_data.h"
#include "engine/behavior_script.h"
#include "camera.h"
#include "debug.h"
#include "helper_macros.h"
#include "mario.h"
#include "mario_actions_cutscene.h"
#include "engine/math_util.h"
#include "memory.h"
#include "level_update.h"
#include "object_list_processor.h"
#include "rendering_graph_node.h"
#include "spawn_object.h"
#include "spawn_sound.h"
#include "engine/surface_collision.h"
#include "area.h"
#include "engine/geo_layout.h"
#include "ingame_menu.h"
#include "game.h"
#include "obj_behaviors.h"
#include "interaction.h"
#include "room.h"
#include "object_helpers.h"
#include "object_helpers2.h"

Macros

#define o   gCurrentObject
 

Functions

void func_8029D704 (Mat4, Mat4, Mat4)
 
void func_8029EA0C (struct Object *)
 
void translate_object_local (struct Object *obj, s16 posIndex, s16 localTranslateIndex)
 Transform the vector at localTranslateIndex into the object's local coordinates, and then add it to the vector at posIndex. More...
 
void copy_object_pos (struct Object *, struct Object *)
 
void copy_object_angle (struct Object *, struct Object *)
 
struct Objectobj_find_nearest_object_with_behavior (void *, f32 *)
 
void obj_move_y (f32, f32, f32)
 
static s32 clear_move_flag (u32 *, s32)
 
void func_802AA618 (s32, s32, f32)
 
void spawn_triangle_break_particles (s32, s32, f32, s32)
 
GfxGeo18_8029D890 (s32 run, UNUSED struct GraphNode *node, f32 mtx[4][4])
 
GfxGeo18_8029D924 (s32 run, struct GraphNode *node, UNUSED s32 sp48)
 
s32 geo_switch_anim_state (s32 run, struct GraphNode *node)
 
s32 geo_switch_area (s32 run, struct GraphNode *node)
 
void func_8029D558 (Mat4 a0, struct Object *a1)
 
void apply_object_scale_to_matrix (struct Object *obj, Mat4 dst, Mat4 src)
 
void set_object_held_state (struct Object *obj, void *heldBehavior)
 
f32 lateral_dist_between_objects (struct Object *obj1, struct Object *obj2)
 
f32 dist_between_objects (struct Object *obj1, struct Object *obj2)
 
void obj_obj_forward_vel_approach_upward (f32 target, f32 increment)
 
s32 approach_f32_signed (f32 *value, f32 target, f32 increment)
 
f32 approach_f32_symmetric (f32 value, f32 target, f32 increment)
 
s16 approach_s16_symmetric (s16 value, s16 target, s16 increment)
 
s32 obj_rotate_yaw_toward (s16 target, s16 increment)
 
s16 angle_to_object (struct Object *obj1, struct Object *obj2)
 
s16 obj_turn_toward_object (struct Object *obj, struct Object *target, s16 angleIndex, s16 turnAmount)
 
void set_object_parent_relative_pos (struct Object *obj, s16 relX, s16 relY, s16 relZ)
 
void set_object_pos (struct Object *obj, s16 x, s16 y, s16 z)
 
void set_object_angle (struct Object *a0, s16 pitch, s16 yaw, s16 roll)
 
struct Objectspawn_object_abs_with_rot (struct Object *parent, s16 uselessArg, u32 model, void *behavior, s16 x, s16 y, s16 z, s16 rx, s16 ry, s16 rz)
 
struct Objectspawn_object_rel_with_rot (struct Object *parent, u32 model, void *behavior, s16 xOff, s16 yOff, s16 zOff, s16 rx, s16 ry, UNUSED s16 rz)
 
struct ObjectUnknown8029E330 (struct Object *sp20, s32 model, void *sp28)
 
struct Objectspawn_water_splash (struct Object *parent, struct WaterSplashParams *params)
 
struct Objectspawn_object_at_origin (struct Object *parent, UNUSED s32 unusedArg, u32 model, void *behavior)
 
struct Objectspawn_object (struct Object *parent, s32 model, void *behavior)
 
struct Objecttry_to_spawn_object (s16 offsetY, f32 scale, struct Object *parent, s32 model, void *behavior)
 
struct Objectspawn_object_with_scale (struct Object *parent, s32 model, void *behavior, f32 scale)
 
static void build_relative_object_transform (struct Object *obj)
 
struct Objectspawn_object_relative (s16 behaviorParam, s16 relativePosX, s16 relativePosY, s16 relativePosZ, struct Object *parent, s32 model, void *behavior)
 
struct Objectspawn_object_relative_with_scale (s16 behaviorParam, s16 relativePosX, s16 relativePosY, s16 relativePosZ, f32 scale, struct Object *parent, s32 model, void *behavior)
 
void obj_move_using_vel (void)
 
void copy_object_graph_y_offset (struct Object *dst, struct Object *src)
 
void copy_object_pos_and_angle (struct Object *dst, struct Object *src)
 
void Unknown8029EA34 (struct Object *sp20, u32 sp24)
 
void linear_mtxf_mul_vec3f (Mat4 m, Vec3f dst, Vec3f v)
 Multiply a vector by a matrix of the form | ? ? ? 0 | | ? ? ? 0 | | ? ? ? 0 | | 0 0 0 1 | i.e. More...
 
void linear_mtxf_transpose_mul_vec3f (Mat4 m, Vec3f dst, Vec3f v)
 Multiply a vector by the transpose of a matrix of the form | ? ? ? 0 | | ? ? ? 0 | | ? ? ? 0 | | 0 0 0 1 | i.e. More...
 
void apply_scale_to_object_transform (struct Object *obj)
 
void copy_object_scale (struct Object *dst, struct Object *src)
 
void scale_object_xyz (struct Object *obj, f32 xScale, f32 yScale, f32 zScale)
 
void scale_object (struct Object *obj, f32 scale)
 
void obj_scale (f32 scale)
 
void SetObjAnimation (s32 arg0)
 
void set_obj_animation_and_sound_state (s32 arg0)
 
void func_8029ED98 (u32 a0, f32 a1)
 
void func_8029EE20 (struct Object *a0, u32 *a1, u32 a2)
 
void obj_enable_rendering_and_become_tangible (struct Object *a0)
 
void obj_enable_rendering (void)
 
void obj_disable_rendering_and_become_intangible (struct Object *a0)
 
void obj_disable_rendering (void)
 
void obj_unhide (void)
 
void obj_hide (void)
 
void obj_set_pos_relative (struct Object *other, f32 dleft, f32 dy, f32 dforward)
 
void obj_set_pos_relative_to_parent (f32 dleft, f32 dy, f32 dforward)
 
void obj_enable_rendering_2 (void)
 
void obj_unused_init_on_floor (void)
 
void obj_set_facing_to_move_angles (struct Object *a0)
 
u32 get_object_list_from_behavior (u32 *behavior)
 
struct Objectobj_nearest_object_with_behavior (void *behavior)
 
f32 obj_dist_to_nearest_object_with_behavior (void *behavior)
 
struct Objectfind_unimportant_object (void)
 
s32 count_unimportant_objects (void)
 
s32 count_objects_with_behavior (void *behavior)
 
struct Objectobj_find_nearby_held_actor (void *behavior, f32 maxDist)
 
static void obj_reset_timer_and_subaction (void)
 
void obj_change_action (s32 action)
 
void func_8029F684 (f32 f12, f32 f14)
 
void func_8029F6F0 (void)
 
void func_8029F728 (void)
 
s32 func_8029F788 (void)
 
s32 func_8029F828 (void)
 
s32 obj_check_anim_frame (s32 frame)
 
s32 obj_check_anim_frame_in_range (s32 startFrame, s32 rangeLength)
 
s32 Unknown8029F930 (s16 *a0)
 
s32 mario_is_in_air_action (void)
 
s32 mario_is_dive_sliding (void)
 
void func_8029FA1C (f32 sp18, s32 sp1C)
 
void func_8029FA5C (s32 sp18, s32 sp1C)
 
static void obj_move_after_thrown_or_dropped (f32 forwardVel, f32 velY)
 
void obj_get_thrown_or_placed (f32 forwardVel, f32 velY, s32 thrownAction)
 
void obj_get_dropped (void)
 
void obj_set_model (s32 a0)
 
void mario_set_flag (s32 flag)
 
s32 obj_clear_interact_status_flag (s32 flag)
 
void mark_object_for_deletion (struct Object *obj)
 Mark an object to be unloaded at the end of the frame. More...
 
void obj_disable (void)
 
void obj_become_intangible (void)
 
void obj_become_tangible (void)
 
void make_object_tangible (struct Object *obj)
 
void obj_update_floor_height (void)
 
struct Surfaceobj_update_floor_height_and_get_floor (void)
 
static void apply_drag_to_value (f32 *value, f32 dragStrength)
 
void obj_apply_drag_xz (f32 dragStrength)
 
static s32 obj_move_xz (f32 steepSlopeNormalY, s32 careAboutEdgesAndSteepSlopes)
 
static void obj_move_update_underwater_flags (void)
 
static void obj_move_update_ground_air_flags (UNUSED f32 gravity, f32 bounce)
 
static f32 obj_move_y_and_get_water_level (f32 gravity, f32 buoyancy)
 
static void nop_802A0964 (void)
 
void obj_unused_resolve_wall_collisions (f32 offsetY, f32 radius)
 
s16 abs_angle_diff (s16 x0, s16 x1)
 
void obj_move_xz_using_fvel_and_yaw (void)
 
void obj_move_y_with_terminal_vel (void)
 
void obj_compute_vel_xz (void)
 
f32 func_802A0BF4 (f32 value, f32 center, f32 zeroThreshold, f32 increment)
 
s32 are_objects_collided (struct Object *obj1, struct Object *obj2)
 
void obj_set_behavior (void *behavior)
 
void set_object_behavior (struct Object *obj, void *behavior)
 
s32 obj_has_behavior (u32 *behavior)
 
s32 object_has_behavior (struct Object *obj, u32 *behavior)
 
f32 obj_lateral_dist_from_mario_to_home (void)
 
f32 obj_lateral_dist_to_home (void)
 
s32 obj_outside_home_square (f32 halfLength)
 
s32 obj_outside_home_rectangle (f32 minX, f32 maxX, f32 minZ, f32 maxZ)
 
void obj_set_pos_to_home (void)
 
void obj_set_pos_to_home_and_stop (void)
 
void obj_shake_y (f32 amount)
 
void func_802A11B4 (UNUSED struct Object *a0, s32 a1)
 
void Unknown802A11E4 (UNUSED s32 sp0, UNUSED s32 sp4, f32 sp8)
 
void obj_set_billboard (struct Object *a0)
 
void obj_set_hitbox_radius_and_height (f32 radius, f32 height)
 
void obj_set_hurtbox_radius_and_height (f32 radius, f32 height)
 
static void spawn_object_loot_coins (struct Object *obj, s32 numCoins, f32 sp30, void *coinBehavior, s16 posJitter, s16 model)
 
void spawn_object_loot_blue_coins (struct Object *obj, s32 numCoins, f32 sp28, s16 posJitter)
 
void spawn_object_loot_yellow_coins (struct Object *obj, s32 numCoins, f32 sp28)
 
void obj_spawn_loot_coin_at_mario_pos (void)
 
f32 obj_abs_y_dist_to_home (void)
 
s32 Unknown802A1548 ()
 
static s32 obj_detect_steep_floor (s16 steepAngleDegrees)
 
s32 obj_resolve_wall_collisions (void)
 
static void obj_update_floor (void)
 
static void obj_update_floor_and_resolve_wall_collisions (s16 steepSlopeDegrees)
 
void obj_update_floor_and_walls (void)
 
void obj_move_standard (s16 steepSlopeAngleDegrees)
 
static s32 obj_within_12k_bounds (void)
 
void obj_move_using_vel_and_gravity (void)
 
void obj_move_using_fvel_and_gravity (void)
 
void set_object_pos_relative (struct Object *obj, struct Object *other, f32 dleft, f32 dy, f32 dforward)
 
s16 obj_angle_to_home (void)
 
void func_802A2008 (struct Object *a0, struct Object *a1)
 
void build_object_transform_from_pos_and_angle (struct Object *obj, s16 posIndex, s16 angleIndex)
 
void func_802A2270 (struct Object *obj)
 
void build_object_transform_relative_to_parent (struct Object *obj)
 
void Unknown802A2380 (struct Object *a0)
 
void obj_rotate_move_angle_using_vel (void)
 
void obj_rotate_face_angle_using_vel (void)
 
void obj_set_face_angle_to_move_angle (void)
 
s32 obj_follow_path (UNUSED s32 unusedArg)
 
void chain_segment_init (struct ChainSegment *segment)
 
f32 random_f32_around_zero (f32 diameter)
 
f32 scale_object_random (struct Object *obj, f32 rangeLength, f32 minScale)
 
void translate_object_xyz_random (struct Object *obj, f32 rangeLength)
 
void translate_object_xz_random (struct Object *obj, f32 rangeLength)
 
static void func_802A297C (struct Object *a0)
 
void func_802A2A38 (void)
 
s16 obj_reflect_move_angle_off_wall (void)
 
void obj_spawn_particles (struct SpawnParticlesInfo *info)
 
void set_object_hitbox (struct Object *obj, struct ObjectHitbox *hitbox)
 
s32 signum_positive (s32 x)
 
f32 absf (f32 x)
 
s32 absi (s32 a0)
 
s32 obj_wait_then_blink (s32 timeUntilBlinking, s32 numBlinks)
 
s32 obj_is_mario_ground_pounding_platform (void)
 
void func_802A3004 (void)
 
void func_802A3034 (s32 sp18)
 
void obj_push_mario_away (f32 radius)
 
void obj_push_mario_away_from_cylinder (f32 radius, f32 extentY)
 
void BehDustSmokeLoop (void)
 
static void nop_802A3294 (void)
 
s32 func_802A32A4 (s8 *a0)
 
s32 func_802A32E0 (void)
 
static void nop_802A3380 (UNUSED s32 sp0, UNUSED s32 sp4)
 
void func_802A3398 (s32 a0, s32 a1, f32 sp10, f32 sp14)
 
void func_802A3470 (void)
 
static void nop_802A3544 (void)
 
s32 obj_is_mario_on_platform (void)
 
s32 obj_shake_y_until (s32 cycles, s32 amount)
 
s32 func_802A362C (s32 a0)
 
s32 obj_call_action_function (void(*actionFunctions[])(void))
 
static struct Objectfunc_802A36D8 (s32 sp20, s32 sp24)
 
void Unknown802A3750 (void)
 
s32 func_802A377C (s32 a0)
 
s32 obj_mario_far_away (void)
 
s32 obj_is_mario_moving_fast_or_in_air (s32 speedThreshold)
 
s32 item_in_array (s8 item, s8 *array)
 
static void nop_802A3968 (void)
 
void bhv_init_room (void)
 
void obj_enable_rendering_if_mario_in_room (void)
 
s32 obj_set_hitbox_and_die_if_attacked (struct ObjectHitbox *hitbox, s32 deathSound, s32 noLootCoins)
 
void func_802A3C98 (f32 sp18, s32 sp1C)
 
void set_object_collision_data (struct Object *obj, void *segAddr)
 
void obj_if_hit_wall_bounce_away (void)
 
s32 obj_hide_if_mario_far_away_y (f32 distY)
 
GfxGeo18_802A45E4 (s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4])
 
s32 Unknown802A3E84 (s32 a0, struct GraphNode *a1, UNUSED s32 sp8)
 
s32 obj_is_hidden (struct Object *a0)
 
void enable_time_stop (void)
 
void disable_time_stop (void)
 
void set_time_stop_flags (s32 flag)
 
void clear_time_stop_flags (s32 flag)
 
s32 func_802A3FF8 (f32 radius, f32 height, UNUSED s32 unused)
 
s32 obj_is_mario_in_range_and_ready_to_speak (f32 radius, f32 height)
 
static void obj_end_dialog (s32 dialogFlags, s32 dialogResult)
 
s32 obj_update_dialog_unk1 (s32 arg0, s32 dialogFlags, s32 dialogID, UNUSED s32 unusedArg)
 
s32 obj_update_dialog_unk2 (s32 arg0, s32 dialogFlags, s32 dialogID, s32 arg3)
 
s32 obj_has_model (u16 a0)
 
void obj_align_gfx_with_floor (void)
 
s32 mario_is_within_rectangle (s16 minX, s16 maxX, s16 minZ, s16 maxZ)
 
s32 ShakeScreen (s32 sp18)
 
s32 attack_collided_non_mario_object (struct Object *obj)
 
s32 obj_was_attacked_or_ground_pounded (void)
 
void copy_object_behavior_params (struct Object *dst, struct Object *src)
 
void func_802A4A70 (s32 sp18, s32 sp1C)
 
s32 func_802A4AB0 (s32 sp18)
 
void func_802A4AEC (s32 sp18)
 
s32 obj_check_grabbed_mario (void)
 
s32 player_performed_grab_escape_action (void)
 
void obj_unused_play_footstep_sound (s32 animFrame1, s32 animFrame2, s32 sound)
 
void enable_time_stop_including_mario (void)
 
void disable_time_stop_including_mario (void)
 
s32 obj_check_interacted (void)
 
void obj_spawn_loot_blue_coin (void)
 
void obj_spawn_star_at_y_offset (f32 targetX, f32 targetY, f32 targetZ, f32 offsetY)
 

Variables

s8 D_8032F0A0 [] = { 0xF8, 0x08, 0xFC, 0x04 }
 
s16 D_8032F0A4 [] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }
 
static s8 sLevelsWithRooms [] = { LEVEL_BBH, LEVEL_CASTLE, LEVEL_HMC, -1 }
 
s32 sGrabReleaseState
 

Macro Definition Documentation

◆ o

#define o   gCurrentObject

Function Documentation

◆ abs_angle_diff()

s16 abs_angle_diff ( s16  x0,
s16  x1 
)

◆ absf()

f32 absf ( f32  x)

◆ absi()

s32 absi ( s32  a0)

◆ angle_to_object()

s16 angle_to_object ( struct Object obj1,
struct Object obj2 
)

◆ apply_drag_to_value()

static void apply_drag_to_value ( f32 value,
f32  dragStrength 
)
static

Can overshoot if |*value| > 1/(dragStrength * 0.0001)

◆ apply_object_scale_to_matrix()

void apply_object_scale_to_matrix ( struct Object obj,
Mat4  dst,
Mat4  src 
)

◆ apply_scale_to_object_transform()

void apply_scale_to_object_transform ( struct Object obj)

◆ approach_f32_signed()

s32 approach_f32_signed ( f32 value,
f32  target,
f32  increment 
)

◆ approach_f32_symmetric()

f32 approach_f32_symmetric ( f32  value,
f32  target,
f32  increment 
)

◆ approach_s16_symmetric()

s16 approach_s16_symmetric ( s16  value,
s16  target,
s16  increment 
)

◆ are_objects_collided()

s32 are_objects_collided ( struct Object obj1,
struct Object obj2 
)

◆ attack_collided_non_mario_object()

s32 attack_collided_non_mario_object ( struct Object obj)

◆ BehDustSmokeLoop()

void BehDustSmokeLoop ( void  )

◆ bhv_init_room()

void bhv_init_room ( void  )

Technically possible that the room could still be 0 here

◆ build_object_transform_from_pos_and_angle()

void build_object_transform_from_pos_and_angle ( struct Object obj,
s16  posIndex,
s16  angleIndex 
)

◆ build_object_transform_relative_to_parent()

void build_object_transform_relative_to_parent ( struct Object obj)

Sets scale of gCurrentObject instead of obj. Not exploitable since this

◆ build_relative_object_transform()

static void build_relative_object_transform ( struct Object obj)
static

◆ chain_segment_init()

void chain_segment_init ( struct ChainSegment segment)

◆ clear_move_flag()

static s32 clear_move_flag ( u32 bitSet,
s32  flag 
)
static

◆ clear_time_stop_flags()

void clear_time_stop_flags ( s32  flag)

◆ copy_object_angle()

void copy_object_angle ( struct Object dst,
struct Object src 
)

◆ copy_object_behavior_params()

void copy_object_behavior_params ( struct Object dst,
struct Object src 
)

◆ copy_object_graph_y_offset()

void copy_object_graph_y_offset ( struct Object dst,
struct Object src 
)

◆ copy_object_pos()

void copy_object_pos ( struct Object dst,
struct Object src 
)

◆ copy_object_pos_and_angle()

void copy_object_pos_and_angle ( struct Object dst,
struct Object src 
)

◆ copy_object_scale()

void copy_object_scale ( struct Object dst,
struct Object src 
)

◆ count_objects_with_behavior()

s32 count_objects_with_behavior ( void behavior)

◆ count_unimportant_objects()

s32 count_unimportant_objects ( void  )

◆ disable_time_stop()

void disable_time_stop ( void  )

◆ disable_time_stop_including_mario()

void disable_time_stop_including_mario ( void  )

◆ dist_between_objects()

f32 dist_between_objects ( struct Object obj1,
struct Object obj2 
)

◆ enable_time_stop()

void enable_time_stop ( void  )

◆ enable_time_stop_including_mario()

void enable_time_stop_including_mario ( void  )

◆ find_unimportant_object()

struct Object* find_unimportant_object ( void  )

◆ func_8029D558()

void func_8029D558 ( Mat4  a0,
struct Object a1 
)

◆ func_8029D704()

void func_8029D704 ( Mat4  a0,
Mat4  a1,
Mat4  a2 
)

◆ func_8029EA0C()

void func_8029EA0C ( struct Object a0)

◆ func_8029ED98()

void func_8029ED98 ( u32  a0,
f32  a1 
)

◆ func_8029EE20()

void func_8029EE20 ( struct Object a0,
u32 a1,
u32  a2 
)

◆ func_8029F684()

void func_8029F684 ( f32  f12,
f32  f14 
)

◆ func_8029F6F0()

void func_8029F6F0 ( void  )

◆ func_8029F728()

void func_8029F728 ( void  )

◆ func_8029F788()

s32 func_8029F788 ( void  )

◆ func_8029F828()

s32 func_8029F828 ( void  )

◆ func_8029FA1C()

void func_8029FA1C ( f32  sp18,
s32  sp1C 
)

◆ func_8029FA5C()

void func_8029FA5C ( s32  sp18,
s32  sp1C 
)

◆ func_802A0BF4()

f32 func_802A0BF4 ( f32  value,
f32  center,
f32  zeroThreshold,
f32  increment 
)

◆ func_802A11B4()

void func_802A11B4 ( UNUSED struct Object a0,
s32  a1 
)

◆ func_802A2008()

void func_802A2008 ( struct Object a0,
struct Object a1 
)

◆ func_802A2270()

void func_802A2270 ( struct Object obj)

Sets scale of gCurrentObject instead of obj. Not exploitable since this

◆ func_802A297C()

static void func_802A297C ( struct Object a0)
static

◆ func_802A2A38()

void func_802A2A38 ( void  )

◆ func_802A3004()

void func_802A3004 ( void  )

◆ func_802A3034()

void func_802A3034 ( s32  sp18)

◆ func_802A32A4()

s32 func_802A32A4 ( s8 a0)

◆ func_802A32E0()

s32 func_802A32E0 ( void  )

◆ func_802A3398()

void func_802A3398 ( s32  a0,
s32  a1,
f32  sp10,
f32  sp14 
)

◆ func_802A3470()

void func_802A3470 ( void  )

◆ func_802A362C()

s32 func_802A362C ( s32  a0)

◆ func_802A36D8()

static struct Object* func_802A36D8 ( s32  sp20,
s32  sp24 
)
static

◆ func_802A377C()

s32 func_802A377C ( s32  a0)

◆ func_802A3C98()

void func_802A3C98 ( f32  sp18,
s32  sp1C 
)

◆ func_802A3FF8()

s32 func_802A3FF8 ( f32  radius,
f32  height,
UNUSED s32  unused 
)

◆ func_802A4A70()

void func_802A4A70 ( s32  sp18,
s32  sp1C 
)

◆ func_802A4AB0()

s32 func_802A4AB0 ( s32  sp18)

◆ func_802A4AEC()

void func_802A4AEC ( s32  sp18)

◆ func_802AA618()

void func_802AA618 ( s32  ,
s32  ,
f32   
)

◆ Geo18_8029D890()

Gfx* Geo18_8029D890 ( s32  run,
UNUSED struct GraphNode node,
f32  mtx[4][4] 
)

◆ Geo18_8029D924()

Gfx* Geo18_8029D924 ( s32  run,
struct GraphNode node,
UNUSED s32  sp48 
)

◆ Geo18_802A45E4()

Gfx* Geo18_802A45E4 ( s32  run,
struct GraphNode node,
UNUSED f32  mtx[4][4] 
)

◆ geo_switch_anim_state()

s32 geo_switch_anim_state ( s32  run,
struct GraphNode node 
)
Bug:
Every geo function declares the 3 parameters of run, node, and the matrix array.

This one (see also geo_switch_area) doesn't. When executed, the node function executor passes the 3rd argument to a function that doesn't declare it. This is undefined behavior, but harmless in practice due to the o32 calling convention.

◆ geo_switch_area()

s32 geo_switch_area ( s32  run,
struct GraphNode node 
)
Bug:
Same issue as geo_switch_anim_state.

◆ get_object_list_from_behavior()

u32 get_object_list_from_behavior ( u32 behavior)

◆ item_in_array()

s32 item_in_array ( s8  item,
s8 array 
)

◆ lateral_dist_between_objects()

f32 lateral_dist_between_objects ( struct Object obj1,
struct Object obj2 
)

◆ linear_mtxf_mul_vec3f()

void linear_mtxf_mul_vec3f ( Mat4  m,
Vec3f  dst,
Vec3f  v 
)

Multiply a vector by a matrix of the form | ? ? ? 0 | | ? ? ? 0 | | ? ? ? 0 | | 0 0 0 1 | i.e.

a matrix representing a linear transformation over 3 space.

◆ linear_mtxf_transpose_mul_vec3f()

void linear_mtxf_transpose_mul_vec3f ( Mat4  m,
Vec3f  dst,
Vec3f  v 
)

Multiply a vector by the transpose of a matrix of the form | ? ? ? 0 | | ? ? ? 0 | | ? ? ? 0 | | 0 0 0 1 | i.e.

a matrix representing a linear transformation over 3 space.

◆ make_object_tangible()

void make_object_tangible ( struct Object obj)

◆ mario_is_dive_sliding()

s32 mario_is_dive_sliding ( void  )

◆ mario_is_in_air_action()

s32 mario_is_in_air_action ( void  )

◆ mario_is_within_rectangle()

s32 mario_is_within_rectangle ( s16  minX,
s16  maxX,
s16  minZ,
s16  maxZ 
)

◆ mario_set_flag()

void mario_set_flag ( s32  flag)

◆ mark_object_for_deletion()

void mark_object_for_deletion ( struct Object obj)

Mark an object to be unloaded at the end of the frame.

This clears all activeFlags. Since some of these flags disable behavior,

◆ nop_802A0964()

static void nop_802A0964 ( void  )
static

◆ nop_802A3294()

static void nop_802A3294 ( void  )
static

◆ nop_802A3380()

static void nop_802A3380 ( UNUSED s32  sp0,
UNUSED s32  sp4 
)
static

◆ nop_802A3544()

static void nop_802A3544 ( void  )
static

◆ nop_802A3968()

static void nop_802A3968 ( void  )
static

◆ obj_abs_y_dist_to_home()

f32 obj_abs_y_dist_to_home ( void  )

◆ obj_align_gfx_with_floor()

void obj_align_gfx_with_floor ( void  )

◆ obj_angle_to_home()

s16 obj_angle_to_home ( void  )

◆ obj_apply_drag_xz()

void obj_apply_drag_xz ( f32  dragStrength)

◆ obj_become_intangible()

void obj_become_intangible ( void  )

◆ obj_become_tangible()

void obj_become_tangible ( void  )

◆ obj_call_action_function()

s32 obj_call_action_function ( void(*[])(void actionFunctions)

◆ obj_change_action()

void obj_change_action ( s32  action)

◆ obj_check_anim_frame()

s32 obj_check_anim_frame ( s32  frame)

◆ obj_check_anim_frame_in_range()

s32 obj_check_anim_frame_in_range ( s32  startFrame,
s32  rangeLength 
)

◆ obj_check_grabbed_mario()

s32 obj_check_grabbed_mario ( void  )

◆ obj_check_interacted()

s32 obj_check_interacted ( void  )

◆ obj_clear_interact_status_flag()

s32 obj_clear_interact_status_flag ( s32  flag)

◆ obj_compute_vel_xz()

void obj_compute_vel_xz ( void  )

◆ obj_detect_steep_floor()

static s32 obj_detect_steep_floor ( s16  steepAngleDegrees)
static

◆ obj_disable()

void obj_disable ( void  )

◆ obj_disable_rendering()

void obj_disable_rendering ( void  )

◆ obj_disable_rendering_and_become_intangible()

void obj_disable_rendering_and_become_intangible ( struct Object a0)

◆ obj_dist_to_nearest_object_with_behavior()

f32 obj_dist_to_nearest_object_with_behavior ( void behavior)

◆ obj_enable_rendering()

void obj_enable_rendering ( void  )

◆ obj_enable_rendering_2()

void obj_enable_rendering_2 ( void  )

◆ obj_enable_rendering_and_become_tangible()

void obj_enable_rendering_and_become_tangible ( struct Object a0)

◆ obj_enable_rendering_if_mario_in_room()

void obj_enable_rendering_if_mario_in_room ( void  )

◆ obj_end_dialog()

static void obj_end_dialog ( s32  dialogFlags,
s32  dialogResult 
)
static

◆ obj_find_nearby_held_actor()

struct Object* obj_find_nearby_held_actor ( void behavior,
f32  maxDist 
)

◆ obj_find_nearest_object_with_behavior()

struct Object * obj_find_nearest_object_with_behavior ( void behavior,
f32 dist 
)

◆ obj_follow_path()

s32 obj_follow_path ( UNUSED s32  unusedArg)

◆ obj_get_dropped()

void obj_get_dropped ( void  )

◆ obj_get_thrown_or_placed()

void obj_get_thrown_or_placed ( f32  forwardVel,
f32  velY,
s32  thrownAction 
)

◆ obj_has_behavior()

s32 obj_has_behavior ( u32 behavior)

◆ obj_has_model()

s32 obj_has_model ( u16  a0)

◆ obj_hide()

void obj_hide ( void  )

◆ obj_hide_if_mario_far_away_y()

s32 obj_hide_if_mario_far_away_y ( f32  distY)

◆ obj_if_hit_wall_bounce_away()

void obj_if_hit_wall_bounce_away ( void  )

◆ obj_is_hidden()

s32 obj_is_hidden ( struct Object a0)

◆ obj_is_mario_ground_pounding_platform()

s32 obj_is_mario_ground_pounding_platform ( void  )

◆ obj_is_mario_in_range_and_ready_to_speak()

s32 obj_is_mario_in_range_and_ready_to_speak ( f32  radius,
f32  height 
)

◆ obj_is_mario_moving_fast_or_in_air()

s32 obj_is_mario_moving_fast_or_in_air ( s32  speedThreshold)

◆ obj_is_mario_on_platform()

s32 obj_is_mario_on_platform ( void  )

◆ obj_lateral_dist_from_mario_to_home()

f32 obj_lateral_dist_from_mario_to_home ( void  )

◆ obj_lateral_dist_to_home()

f32 obj_lateral_dist_to_home ( void  )

◆ obj_mario_far_away()

s32 obj_mario_far_away ( void  )

◆ obj_move_after_thrown_or_dropped()

static void obj_move_after_thrown_or_dropped ( f32  forwardVel,
f32  velY 
)
static

OoB failsafe

◆ obj_move_standard()

void obj_move_standard ( s16  steepSlopeAngleDegrees)

Because some objects allow these active flags to be set but don't

◆ obj_move_update_ground_air_flags()

static void obj_move_update_ground_air_flags ( UNUSED f32  gravity,
f32  bounce 
)
static

If OBJ_MOVE_13 tracks bouncing, it overestimates, since velY

◆ obj_move_update_underwater_flags()

static void obj_move_update_underwater_flags ( void  )
static

◆ obj_move_using_fvel_and_gravity()

void obj_move_using_fvel_and_gravity ( void  )

No terminal velocity

◆ obj_move_using_vel()

void obj_move_using_vel ( void  )

◆ obj_move_using_vel_and_gravity()

void obj_move_using_vel_and_gravity ( void  )

No terminal velocity

◆ obj_move_xz()

static s32 obj_move_xz ( f32  steepSlopeNormalY,
s32  careAboutEdgesAndSteepSlopes 
)
static

Returning FALSE but moving anyway (not exploitable; return value is

◆ obj_move_xz_using_fvel_and_yaw()

void obj_move_xz_using_fvel_and_yaw ( void  )

◆ obj_move_y()

void obj_move_y ( f32  gravity,
f32  bounce,
f32  buoyancy 
)

We only handle floor collision if the object does not enter

◆ obj_move_y_and_get_water_level()

static f32 obj_move_y_and_get_water_level ( f32  gravity,
f32  buoyancy 
)
static

◆ obj_move_y_with_terminal_vel()

void obj_move_y_with_terminal_vel ( void  )

◆ obj_nearest_object_with_behavior()

struct Object* obj_nearest_object_with_behavior ( void behavior)

◆ obj_obj_forward_vel_approach_upward()

void obj_obj_forward_vel_approach_upward ( f32  target,
f32  increment 
)

◆ obj_outside_home_rectangle()

s32 obj_outside_home_rectangle ( f32  minX,
f32  maxX,
f32  minZ,
f32  maxZ 
)

◆ obj_outside_home_square()

s32 obj_outside_home_square ( f32  halfLength)

◆ obj_push_mario_away()

void obj_push_mario_away ( f32  radius)

If this function pushes mario out of bounds, it will trigger mario's

◆ obj_push_mario_away_from_cylinder()

void obj_push_mario_away_from_cylinder ( f32  radius,
f32  extentY 
)

◆ obj_reflect_move_angle_off_wall()

s16 obj_reflect_move_angle_off_wall ( void  )

◆ obj_reset_timer_and_subaction()

static void obj_reset_timer_and_subaction ( void  )
static

◆ obj_resolve_wall_collisions()

s32 obj_resolve_wall_collisions ( void  )

◆ obj_rotate_face_angle_using_vel()

void obj_rotate_face_angle_using_vel ( void  )

◆ obj_rotate_move_angle_using_vel()

void obj_rotate_move_angle_using_vel ( void  )

◆ obj_rotate_yaw_toward()

s32 obj_rotate_yaw_toward ( s16  target,
s16  increment 
)

◆ obj_scale()

void obj_scale ( f32  scale)

◆ obj_set_behavior()

void obj_set_behavior ( void behavior)

◆ obj_set_billboard()

void obj_set_billboard ( struct Object a0)

◆ obj_set_face_angle_to_move_angle()

void obj_set_face_angle_to_move_angle ( void  )

◆ obj_set_facing_to_move_angles()

void obj_set_facing_to_move_angles ( struct Object a0)

◆ obj_set_hitbox_and_die_if_attacked()

s32 obj_set_hitbox_and_die_if_attacked ( struct ObjectHitbox hitbox,
s32  deathSound,
s32  noLootCoins 
)

◆ obj_set_hitbox_radius_and_height()

void obj_set_hitbox_radius_and_height ( f32  radius,
f32  height 
)

◆ obj_set_hurtbox_radius_and_height()

void obj_set_hurtbox_radius_and_height ( f32  radius,
f32  height 
)

◆ obj_set_model()

void obj_set_model ( s32  a0)

◆ obj_set_pos_relative()

void obj_set_pos_relative ( struct Object other,
f32  dleft,
f32  dy,
f32  dforward 
)

◆ obj_set_pos_relative_to_parent()

void obj_set_pos_relative_to_parent ( f32  dleft,
f32  dy,
f32  dforward 
)

◆ obj_set_pos_to_home()

void obj_set_pos_to_home ( void  )

◆ obj_set_pos_to_home_and_stop()

void obj_set_pos_to_home_and_stop ( void  )

◆ obj_shake_y()

void obj_shake_y ( f32  amount)

Technically could cause a bit of drift, but not much

◆ obj_shake_y_until()

s32 obj_shake_y_until ( s32  cycles,
s32  amount 
)

◆ obj_spawn_loot_blue_coin()

void obj_spawn_loot_blue_coin ( void  )

◆ obj_spawn_loot_coin_at_mario_pos()

void obj_spawn_loot_coin_at_mario_pos ( void  )

◆ obj_spawn_particles()

void obj_spawn_particles ( struct SpawnParticlesInfo info)

◆ obj_spawn_star_at_y_offset()

void obj_spawn_star_at_y_offset ( f32  targetX,
f32  targetY,
f32  targetZ,
f32  offsetY 
)

◆ obj_turn_toward_object()

s16 obj_turn_toward_object ( struct Object obj,
struct Object target,
s16  angleIndex,
s16  turnAmount 
)

◆ obj_unhide()

void obj_unhide ( void  )

◆ obj_unused_init_on_floor()

void obj_unused_init_on_floor ( void  )

◆ obj_unused_play_footstep_sound()

void obj_unused_play_footstep_sound ( s32  animFrame1,
s32  animFrame2,
s32  sound 
)

◆ obj_unused_resolve_wall_collisions()

void obj_unused_resolve_wall_collisions ( f32  offsetY,
f32  radius 
)

◆ obj_update_dialog_unk1()

s32 obj_update_dialog_unk1 ( s32  arg0,
s32  dialogFlags,
s32  dialogID,
UNUSED s32  unusedArg 
)

◆ obj_update_dialog_unk2()

s32 obj_update_dialog_unk2 ( s32  arg0,
s32  dialogFlags,
s32  dialogID,
s32  arg3 
)

◆ obj_update_floor()

static void obj_update_floor ( void  )
static

This misses SURFACE_VERTICAL_WIND (and maybe SURFACE_WARP)

◆ obj_update_floor_and_resolve_wall_collisions()

static void obj_update_floor_and_resolve_wall_collisions ( s16  steepSlopeDegrees)
static

◆ obj_update_floor_and_walls()

void obj_update_floor_and_walls ( void  )

◆ obj_update_floor_height()

void obj_update_floor_height ( void  )

◆ obj_update_floor_height_and_get_floor()

struct Surface* obj_update_floor_height_and_get_floor ( void  )

◆ obj_wait_then_blink()

s32 obj_wait_then_blink ( s32  timeUntilBlinking,
s32  numBlinks 
)

◆ obj_was_attacked_or_ground_pounded()

s32 obj_was_attacked_or_ground_pounded ( void  )

◆ obj_within_12k_bounds()

static s32 obj_within_12k_bounds ( void  )
static

◆ object_has_behavior()

s32 object_has_behavior ( struct Object obj,
u32 behavior 
)

◆ player_performed_grab_escape_action()

s32 player_performed_grab_escape_action ( void  )

◆ random_f32_around_zero()

f32 random_f32_around_zero ( f32  diameter)

◆ scale_object()

void scale_object ( struct Object obj,
f32  scale 
)

◆ scale_object_random()

f32 scale_object_random ( struct Object obj,
f32  rangeLength,
f32  minScale 
)

◆ scale_object_xyz()

void scale_object_xyz ( struct Object obj,
f32  xScale,
f32  yScale,
f32  zScale 
)

◆ set_obj_animation_and_sound_state()

void set_obj_animation_and_sound_state ( s32  arg0)

◆ set_object_angle()

void set_object_angle ( struct Object a0,
s16  pitch,
s16  yaw,
s16  roll 
)

◆ set_object_behavior()

void set_object_behavior ( struct Object obj,
void behavior 
)

◆ set_object_collision_data()

void set_object_collision_data ( struct Object obj,
void segAddr 
)

◆ set_object_held_state()

void set_object_held_state ( struct Object obj,
void heldBehavior 
)

◆ set_object_hitbox()

void set_object_hitbox ( struct Object obj,
struct ObjectHitbox hitbox 
)

◆ set_object_parent_relative_pos()

void set_object_parent_relative_pos ( struct Object obj,
s16  relX,
s16  relY,
s16  relZ 
)

◆ set_object_pos()

void set_object_pos ( struct Object obj,
s16  x,
s16  y,
s16  z 
)

◆ set_object_pos_relative()

void set_object_pos_relative ( struct Object obj,
struct Object other,
f32  dleft,
f32  dy,
f32  dforward 
)

◆ set_time_stop_flags()

void set_time_stop_flags ( s32  flag)

◆ SetObjAnimation()

void SetObjAnimation ( s32  arg0)

◆ ShakeScreen()

s32 ShakeScreen ( s32  sp18)

◆ signum_positive()

s32 signum_positive ( s32  x)

◆ spawn_object()

struct Object* spawn_object ( struct Object parent,
s32  model,
void behavior 
)

◆ spawn_object_abs_with_rot()

struct Object* spawn_object_abs_with_rot ( struct Object parent,
s16  uselessArg,
u32  model,
void behavior,
s16  x,
s16  y,
s16  z,
s16  rx,
s16  ry,
s16  rz 
)

◆ spawn_object_at_origin()

struct Object* spawn_object_at_origin ( struct Object parent,
UNUSED s32  unusedArg,
u32  model,
void behavior 
)

◆ spawn_object_loot_blue_coins()

void spawn_object_loot_blue_coins ( struct Object obj,
s32  numCoins,
f32  sp28,
s16  posJitter 
)

◆ spawn_object_loot_coins()

static void spawn_object_loot_coins ( struct Object obj,
s32  numCoins,
f32  sp30,
void coinBehavior,
s16  posJitter,
s16  model 
)
static

◆ spawn_object_loot_yellow_coins()

void spawn_object_loot_yellow_coins ( struct Object obj,
s32  numCoins,
f32  sp28 
)

◆ spawn_object_rel_with_rot()

struct Object* spawn_object_rel_with_rot ( struct Object parent,
u32  model,
void behavior,
s16  xOff,
s16  yOff,
s16  zOff,
s16  rx,
s16  ry,
UNUSED s16  rz 
)

◆ spawn_object_relative()

struct Object* spawn_object_relative ( s16  behaviorParam,
s16  relativePosX,
s16  relativePosY,
s16  relativePosZ,
struct Object parent,
s32  model,
void behavior 
)

◆ spawn_object_relative_with_scale()

struct Object* spawn_object_relative_with_scale ( s16  behaviorParam,
s16  relativePosX,
s16  relativePosY,
s16  relativePosZ,
f32  scale,
struct Object parent,
s32  model,
void behavior 
)

◆ spawn_object_with_scale()

struct Object* spawn_object_with_scale ( struct Object parent,
s32  model,
void behavior,
f32  scale 
)

◆ spawn_triangle_break_particles()

void spawn_triangle_break_particles ( s32  ,
s32  ,
f32  ,
s32   
)

◆ spawn_water_splash()

struct Object* spawn_water_splash ( struct Object parent,
struct WaterSplashParams params 
)

◆ translate_object_local()

void translate_object_local ( struct Object obj,
s16  posIndex,
s16  localTranslateIndex 
)

Transform the vector at localTranslateIndex into the object's local coordinates, and then add it to the vector at posIndex.

◆ translate_object_xyz_random()

void translate_object_xyz_random ( struct Object obj,
f32  rangeLength 
)

◆ translate_object_xz_random()

void translate_object_xz_random ( struct Object obj,
f32  rangeLength 
)

◆ try_to_spawn_object()

struct Object* try_to_spawn_object ( s16  offsetY,
f32  scale,
struct Object parent,
s32  model,
void behavior 
)

◆ Unknown8029E330()

struct Object* Unknown8029E330 ( struct Object sp20,
s32  model,
void sp28 
)

◆ Unknown8029EA34()

void Unknown8029EA34 ( struct Object sp20,
u32  sp24 
)

◆ Unknown8029F930()

s32 Unknown8029F930 ( s16 a0)

◆ Unknown802A11E4()

void Unknown802A11E4 ( UNUSED s32  sp0,
UNUSED s32  sp4,
f32  sp8 
)

◆ Unknown802A1548()

s32 Unknown802A1548 ( )

◆ Unknown802A2380()

void Unknown802A2380 ( struct Object a0)

◆ Unknown802A3750()

void Unknown802A3750 ( void  )

◆ Unknown802A3E84()

s32 Unknown802A3E84 ( s32  a0,
struct GraphNode a1,
UNUSED s32  sp8 
)

Variable Documentation

◆ D_8032F0A0

s8 D_8032F0A0[] = { 0xF8, 0x08, 0xFC, 0x04 }

◆ D_8032F0A4

s16 D_8032F0A4[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }

◆ sGrabReleaseState

s32 sGrabReleaseState

◆ sLevelsWithRooms

s8 sLevelsWithRooms[] = { LEVEL_BBH, LEVEL_CASTLE, LEVEL_HMC, -1 }
static