Mario Kart 64
Loading...
Searching...
No Matches
collision.c File Reference
#include <libultraship.h>
#include <macros.h>
#include <libultra/gbi.h>
#include <mk64.h>
#include <common_structs.h>
#include <actor_types.h>
#include "main.h"
#include "memory.h"
#include "collision.h"
#include "math_util.h"
#include "code_800029B0.h"
#include <defines.h>
#include "port/Game.h"
#include <stdio.h>
Include dependency graph for collision.c:

Macros

#define MAX3(a, b, c, out)
 
#define MIN3(a, b, c, out)
 

Functions

void nullify_displaylist (uintptr_t addr)
 
void func_802AAAAC (Collision *collision)
 
f32 get_water_level (Player *player)
 
s32 check_collision_zx (Collision *collision, f32 boundingBoxSize, f32 posX, f32 posY, f32 posZ, u16 index)
 
s32 check_collision_yx (Collision *collision, f32 boundingBoxSize, f32 posX, f32 posY, f32 posZ, u16 index)
 
s32 check_collision_zy (Collision *collision, f32 boundingBoxSize, f32 posX, f32 posY, f32 posZ, u16 index)
 
s32 check_horizontally_colliding_with_triangle (f32 posX, f32 posZ, u16 index)
 
s8 get_surface_type (u16 index)
 
s16 get_track_section_id (u16 index)
 
s16 func_802ABD7C (u16 index)
 
s16 func_802ABDB8 (u16 index)
 
s16 func_802ABDF4 (u16 index)
 
f32 calculate_surface_height (f32 x, f32 y, f32 z, u16 index)
 
f32 func_802ABEAC (Collision *collision, Vec3f pos)
 
void process_shell_collision (Vec3f pos, UNUSED f32 boundingBoxSize, Vec3f velocity, UNUSED f32 unk)
 
void shell_collision (Collision *collision, Vec3f velocity)
 
void adjust_pos_orthogonally (Vec3f pos1, f32 boundingBoxSize, Vec3f pos2, UNUSED f32 unk)
 
UNUSED s32 detect_tyre_collision (KartTyre *tyre)
 
s32 is_colliding_with_drivable_surface (Collision *collision, f32 boundingBoxSize, f32 newX, f32 newY, f32 newZ, u16 index, f32 oldX, f32 oldY, f32 oldZ)
 
s32 is_colliding_with_wall2 (Collision *arg, f32 boundingBoxSize, f32 x1, f32 y1, f32 z1, u16 surfaceIndex, f32 posX, f32 posY, f32 posZ)
 
s32 is_colliding_with_wall1 (Collision *arg, f32 boundingBoxSize, f32 x1, f32 y1, f32 z1, u16 surfaceIndex, f32 posX, f32 posY, f32 posZ)
 
u16 actor_terrain_collision (Collision *collision, f32 boundingBoxSize, f32 newX, f32 newY, f32 newZ, f32 oldX, f32 oldY, f32 oldZ)
 
u16 check_bounding_collision (Collision *collision, f32 boundingBoxSize, f32 posX, f32 posY, f32 posZ)
 
f32 spawn_actor_on_surface (f32 posX, f32 posY, f32 posZ)
 
void add_collision_triangle (Vtx *vtx1, Vtx *vtx2, Vtx *vtx3, s8 surfaceType, u16 sectionId)
 
void set_vtx_from_triangle (u32 triangle, s8 surfaceType, u16 sectionId)
 
void set_vtx_from_tri2 (u32 triangle1, u32 triangle2, s8 surfaceType, u16 sectionId)
 
void set_vtx_from_quadrangle (u32 line, s8 surfaceType, u16 sectionId)
 
void set_vtx_buffer (uintptr_t addr, u32 numVertices, u32 bufferIndex)
 
s32 is_line_intersecting_rectangle (s16 minX, s16 maxX, s16 minZ, s16 maxZ, s16 x1, s16 z1, s16 x2, s16 z2)
 
s32 is_triangle_intersecting_bounding_box (s16 minX, s16 maxX, s16 minZ, s16 maxZ, u16 index)
 
void generate_collision_grid (void)
 
void generate_collision_mesh_with_defaults (Gfx *gfx)
 
void generate_collision_mesh_with_default_section_id (Gfx *gfx, s8 surfaceType)
 
bool is_cull_box (const char *filePath)
 
void generate_collision_mesh (Gfx *addr, s8 surfaceType, u16 sectionId)
 
void find_and_set_tile_size (uintptr_t addr, s32 uls, s32 ult)
 
void set_vertex_colours (uintptr_t addr, u32 vertexCount, UNUSED s32 vert3, s8 alpha, u8 red, u8 green, u8 blue)
 
void find_vtx_and_set_colours (Gfx *displayList, s8 alpha, u8 red, u8 green, u8 blue)
 
void subtract_scaled_vector (Vec3f pos1, f32 boundingBoxSize, Vec3f pos2)
 
u16 player_terrain_collision (Player *player, KartTyre *tyre, f32 tyre2X, f32 tyre2Y, f32 tyre2Z)
 

Variables

u8 D_8014F1110
 
u32 D_8015F58C
 
u32 numTimes = 0
 

Macro Definition Documentation

◆ MAX3

#define MAX3 ( a,
b,
c,
out )
Value:
if (a >= b) { \
if (a >= c) { \
out = a; \
} else \
out = c; \
\
} else if (b >= c) { \
out = b; \
} else \
out = c;
uint16_t out
Definition mixer.c:81

◆ MIN3

#define MIN3 ( a,
b,
c,
out )
Value:
if (a <= b) { \
if (a <= c) { \
out = a; \
} else \
out = c; \
\
} else if (b <= c) { \
out = b; \
} else \
out = c;

Function Documentation

◆ actor_terrain_collision()

u16 actor_terrain_collision ( Collision * collision,
f32 boundingBoxSize,
f32 newX,
f32 newY,
f32 newZ,
f32 oldX,
f32 oldY,
f32 oldZ )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_collision_triangle()

void add_collision_triangle ( Vtx * vtx1,
Vtx * vtx2,
Vtx * vtx3,
s8 surfaceType,
u16 sectionId )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ adjust_pos_orthogonally()

void adjust_pos_orthogonally ( Vec3f pos1,
f32 boundingBoxSize,
Vec3f pos2,
UNUSED f32 unk )

Adjusts the position of pos2 based on pos1 but in the orthogonal direction to pos2.

Here is the caller graph for this function:

◆ calculate_surface_height()

f32 calculate_surface_height ( f32 x,
f32 y,
f32 z,
u16 index )
Here is the caller graph for this function:

◆ check_bounding_collision()

u16 check_bounding_collision ( Collision * collision,
f32 boundingBoxSize,
f32 posX,
f32 posY,
f32 posZ )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_collision_yx()

s32 check_collision_yx ( Collision * collision,
f32 boundingBoxSize,
f32 posX,
f32 posY,
f32 posZ,
u16 index )
Here is the caller graph for this function:

◆ check_collision_zx()

s32 check_collision_zx ( Collision * collision,
f32 boundingBoxSize,
f32 posX,
f32 posY,
f32 posZ,
u16 index )
Here is the caller graph for this function:

◆ check_collision_zy()

s32 check_collision_zy ( Collision * collision,
f32 boundingBoxSize,
f32 posX,
f32 posY,
f32 posZ,
u16 index )
Here is the caller graph for this function:

◆ check_horizontally_colliding_with_triangle()

s32 check_horizontally_colliding_with_triangle ( f32 posX,
f32 posZ,
u16 index )
Here is the caller graph for this function:

◆ detect_tyre_collision()

UNUSED s32 detect_tyre_collision ( KartTyre * tyre)
Bug
Here is the call graph for this function:

◆ find_and_set_tile_size()

void find_and_set_tile_size ( uintptr_t addr,
s32 uls,
s32 ult )

Search for G_SETTILESIZE and set its args.

Here is the caller graph for this function:

◆ find_vtx_and_set_colours()

void find_vtx_and_set_colours ( Gfx * displayList,
s8 alpha,
u8 red,
u8 green,
u8 blue )

Recursive search for vertices and set their colour values.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ func_802AAAAC()

void func_802AAAAC ( Collision * collision)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ func_802ABD7C()

s16 func_802ABD7C ( u16 index)
Here is the caller graph for this function:

◆ func_802ABDB8()

s16 func_802ABDB8 ( u16 index)
Here is the caller graph for this function:

◆ func_802ABDF4()

s16 func_802ABDF4 ( u16 index)
Here is the caller graph for this function:

◆ func_802ABEAC()

f32 func_802ABEAC ( Collision * collision,
Vec3f pos )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_collision_grid()

void generate_collision_grid ( void )

Splits the collision mesh into 32x32 sections. This allows the game to check only nearby geography for a collision rather than checking against the whole collision mesh. (checking against the whole mesh for every actor would be expensive)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_collision_mesh()

void generate_collision_mesh ( Gfx * addr,
s8 surfaceType,
u16 sectionId )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_collision_mesh_with_default_section_id()

void generate_collision_mesh_with_default_section_id ( Gfx * gfx,
s8 surfaceType )

Recursive search for vtx and set sectionId's to 0xFF

Here is the call graph for this function:
Here is the caller graph for this function:

◆ generate_collision_mesh_with_defaults()

void generate_collision_mesh_with_defaults ( Gfx * gfx)

Recursive search for vtx and set surfaceTypes to -1 and sectionId's to 0xFF

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_surface_type()

s8 get_surface_type ( u16 index)
Here is the caller graph for this function:

◆ get_track_section_id()

s16 get_track_section_id ( u16 index)
Here is the caller graph for this function:

◆ get_water_level()

f32 get_water_level ( Player * player)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_colliding_with_drivable_surface()

s32 is_colliding_with_drivable_surface ( Collision * collision,
f32 boundingBoxSize,
f32 newX,
f32 newY,
f32 newZ,
u16 index,
f32 oldX,
f32 oldY,
f32 oldZ )
Here is the caller graph for this function:

◆ is_colliding_with_wall1()

s32 is_colliding_with_wall1 ( Collision * arg,
f32 boundingBoxSize,
f32 x1,
f32 y1,
f32 z1,
u16 surfaceIndex,
f32 posX,
f32 posY,
f32 posZ )

This is actually more like colliding with face X/Y/Z

Here is the caller graph for this function:

◆ is_colliding_with_wall2()

s32 is_colliding_with_wall2 ( Collision * arg,
f32 boundingBoxSize,
f32 x1,
f32 y1,
f32 z1,
u16 surfaceIndex,
f32 posX,
f32 posY,
f32 posZ )

Wall collision

Here is the caller graph for this function:

◆ is_cull_box()

bool is_cull_box ( const char * filePath)

Generate via a recursive search and set for vertex data.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_line_intersecting_rectangle()

s32 is_line_intersecting_rectangle ( s16 minX,
s16 maxX,
s16 minZ,
s16 maxZ,
s16 x1,
s16 z1,
s16 x2,
s16 z2 )
Returns
1 intersecting triangle, 0 not intersecting.
Here is the caller graph for this function:

◆ is_triangle_intersecting_bounding_box()

s32 is_triangle_intersecting_bounding_box ( s16 minX,
s16 maxX,
s16 minZ,
s16 maxZ,
u16 index )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nullify_displaylist()

void nullify_displaylist ( uintptr_t addr)
Here is the caller graph for this function:

◆ player_terrain_collision()

u16 player_terrain_collision ( Player * player,
KartTyre * tyre,
f32 tyre2X,
f32 tyre2Y,
f32 tyre2Z )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_shell_collision()

void process_shell_collision ( Vec3f pos,
UNUSED f32 boundingBoxSize,
Vec3f velocity,
UNUSED f32 unk )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_vertex_colours()

void set_vertex_colours ( uintptr_t addr,
u32 vertexCount,
UNUSED s32 vert3,
s8 alpha,
u8 red,
u8 green,
u8 blue )
Here is the caller graph for this function:

◆ set_vtx_buffer()

void set_vtx_buffer ( uintptr_t addr,
u32 numVertices,
u32 bufferIndex )

Generates a list of pointers to course vtx.

Here is the caller graph for this function:

◆ set_vtx_from_quadrangle()

void set_vtx_from_quadrangle ( u32 line,
s8 surfaceType,
u16 sectionId )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_vtx_from_tri2()

void set_vtx_from_tri2 ( u32 triangle1,
u32 triangle2,
s8 surfaceType,
u16 sectionId )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_vtx_from_triangle()

void set_vtx_from_triangle ( u32 triangle,
s8 surfaceType,
u16 sectionId )

Triangle contains three indices that are used to get the actual vertices.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shell_collision()

void shell_collision ( Collision * collision,
Vec3f velocity )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ spawn_actor_on_surface()

f32 spawn_actor_on_surface ( f32 posX,
f32 posY,
f32 posZ )

If unable to spawn actor on the surface set to -3000.0f or if outside the collision grid, spawn in the air (3000.0f).

Here is the call graph for this function:
Here is the caller graph for this function:

◆ subtract_scaled_vector()

void subtract_scaled_vector ( Vec3f pos1,
f32 boundingBoxSize,
Vec3f pos2 )
Here is the caller graph for this function:

Variable Documentation

◆ D_8014F1110

u8 D_8014F1110
extern

◆ D_8015F58C

u32 D_8015F58C
extern

◆ numTimes

u32 numTimes = 0