papermario
Decompilation of Paper Mario
 
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Loading...
Searching...
No Matches
collision.c File Reference

Data Structures

struct  HitFile
 
struct  ColliderBackupEntry
 
struct  HitFileHeader
 
struct  HitAssetCollider
 

Functions

s32 collision_heap_create (void)
 
void * collision_heap_malloc (s32 size)
 
void collision_heap_free (void *)
 
void load_hit_data (s32 idx, HitFile *hit)
 
void _add_hit_vert_to_buffer (Vec3f **buf, Vec3f *vert, s32 *bufSize)
 
s32 _get_hit_vert_index_from_buffer (Vec3f **buffer, Vec3f *vert, s32 *bufferSize)
 
void backup_map_collision_data (void)
 
void func_8005AF84 (void)
 
void func_8005AF8C (void)
 
void initialize_collision (void)
 
void load_map_hit_asset (void)
 
void restore_map_collision_data (void)
 
void load_battle_hit_asset (const char *hitName)
 
void parent_collider_to_model (s16 colliderID, s16 modelIndex)
 
void update_collider_transform (s16 colliderID)
 
s32 get_collider_flags (s32 colliderID)
 
void get_flat_collider_normal (s32 colliderID, f32 *x, f32 *y, f32 *z)
 
void get_collider_center (s32 colliderID, f32 *x, f32 *y, f32 *z)
 
s32 test_ray_triangle_general (ColliderTriangle *triangle, Vec3f *vertices)
 
s32 test_ray_triangle_down (ColliderTriangle *triangle, Vec3f *vertices)
 
s32 test_ray_triangle_horizontal (ColliderTriangle *triangle, Vec3f *vertices)
 
s32 test_ray_colliders (s32 ignoreFlags, f32 startX, f32 startY, f32 startZ, f32 dirX, f32 dirY, f32 dirZ, f32 *hitX, f32 *hitY, f32 *hitZ, f32 *hitDepth, f32 *hitNx, f32 *hitNy, f32 *hitNz)
 
s32 test_ray_zones (f32 startX, f32 startY, f32 startZ, f32 dirX, f32 dirY, f32 dirZ, f32 *hitX, f32 *hitY, f32 *hitZ, f32 *hitDepth, f32 *hitNx, f32 *hitNy, f32 *hitNz)
 
f32 test_ray_collider_horizontal (s32 ignoreFlags, s32 colliderID, f32 x, f32 y, f32 z, f32 length, f32 yaw)
 
s32 test_ray_entities (f32 startX, f32 startY, f32 startZ, f32 dirX, f32 dirY, f32 dirZ, f32 *hitX, f32 *hitY, f32 *hitZ, f32 *hitDepth, f32 *hitNx, f32 *hitNy, f32 *hitNz)
 Test a general ray from a given starting position and direction against all entities.
 

Variables

CollisionData gCollisionData
 
CollisionData gZoneCollisionData
 
BSS f32 gCollisionRayStartX
 
BSS f32 gCollisionRayStartY
 
BSS f32 gCollisionRayStartZ
 
BSS f32 gCollisionRayDirX
 
BSS f32 gCollisionRayDirY
 
BSS f32 gCollisionRayDirZ
 
BSS f32 gCollisionPointX
 
BSS f32 gCollisionPointY
 
BSS f32 gCollisionPointZ
 
BSS f32 gCollisionRayLength
 
BSS f32 gCollisionNormalX
 
BSS f32 gCollisionNormalY
 
BSS f32 gCollisionNormalZ
 
BSS ColliderBackupEntrygCollisionDataBackup
 
BSS ColliderBackupEntrygCollisionDataZoneBackup
 
Vec3s gEntityColliderFaces []
 
Vec3f gEntityColliderNormals []
 

Data Structure Documentation

◆ HitFile

struct HitFile
Data Fields
u32 collisionOffset
u32 zoneOffset

◆ ColliderBackupEntry

struct ColliderBackupEntry
Data Fields
s32 flags
char pad_06[2]
s16 parentModelIndex

◆ HitFileHeader

struct HitFileHeader
Data Fields
s16 boundingBoxesDataSize
s32 boundingBoxesOffset
s32 collidersOffset
s16 numColliders
s16 numVertices
char pad_02[2]
char pad_0A[2]
char pad_12[2]
s32 verticesOffset

◆ HitAssetCollider

struct HitAssetCollider
Data Fields
s16 boundingBoxOffset
s16 firstChild
s16 nextSibling
s16 numTriangles
s32 trianglesOffset

Function Documentation

◆ _add_hit_vert_to_buffer()

void _add_hit_vert_to_buffer ( Vec3f ** buf,
Vec3f * vert,
s32 * bufSize )

◆ _get_hit_vert_index_from_buffer()

s32 _get_hit_vert_index_from_buffer ( Vec3f ** buffer,
Vec3f * vert,
s32 * bufferSize )

◆ backup_map_collision_data()

void backup_map_collision_data ( void )

◆ collision_heap_create()

s32 collision_heap_create ( void )

Referenced by initialize_collision().

◆ collision_heap_free()

void collision_heap_free ( void * data)

◆ collision_heap_malloc()

void * collision_heap_malloc ( s32 size)

◆ func_8005AF84()

void func_8005AF84 ( void )

◆ func_8005AF8C()

void func_8005AF8C ( void )

◆ get_collider_center()

void get_collider_center ( s32 colliderID,
f32 * x,
f32 * y,
f32 * z )

◆ get_collider_flags()

◆ get_flat_collider_normal()

void get_flat_collider_normal ( s32 colliderID,
f32 * x,
f32 * y,
f32 * z )

◆ initialize_collision()

◆ load_battle_hit_asset()

void load_battle_hit_asset ( const char * hitName)

◆ load_hit_data()

void load_hit_data ( s32 idx,
HitFile * hit )

◆ load_map_hit_asset()

void load_map_hit_asset ( void )

◆ parent_collider_to_model()

void parent_collider_to_model ( s16 colliderID,
s16 modelIndex )

◆ restore_map_collision_data()

void restore_map_collision_data ( void )

◆ test_ray_collider_horizontal()

f32 test_ray_collider_horizontal ( s32 ignoreFlags,
s32 colliderID,
f32 x,
f32 y,
f32 z,
f32 length,
f32 yaw )

◆ test_ray_colliders()

s32 test_ray_colliders ( s32 ignoreFlags,
f32 startX,
f32 startY,
f32 startZ,
f32 dirX,
f32 dirY,
f32 dirZ,
f32 * hitX,
f32 * hitY,
f32 * hitZ,
f32 * hitDepth,
f32 * hitNx,
f32 * hitNy,
f32 * hitNz )

◆ test_ray_entities()

s32 test_ray_entities ( f32 startX,
f32 startY,
f32 startZ,
f32 dirX,
f32 dirY,
f32 dirZ,
f32 * hitX,
f32 * hitY,
f32 * hitZ,
f32 * hitDepth,
f32 * hitNx,
f32 * hitNy,
f32 * hitNz )

Test a general ray from a given starting position and direction against all entities.

If one is hit, returns the position and normal of the hit and the length along the ray on the output params. All output params are invalid when a value of NO_COLLIDER is returned.

Parameters
startXorigin x position of the ray
startYorigin y position of the ray
startZorigin z position of the ray
dirXnormalized x direction of the ray
dirYnormalized y direction of the ray
dirZnormalized z direction of the ray
[out]hitXnormalized x position of the hit
[out]hitYnormalized y position of the hit
[out]hitZnormalized z position of the hit
[in,out]hitDepthas input, maximum length of the ray; as output, distance along the ray of the hit
[out]hitNxx normal direction of the hit
[out]hitNyy normal direction of the hit
[out]hitNzz normal direction of the hit
Returns
entity index or NO_COLLIDER is none is hit

Referenced by entity_raycast_down(), npc_raycast_down(), npc_raycast_general(), npc_raycast_up(), npc_raycast_up_corner(), player_raycast_down(), player_raycast_general(), and player_raycast_up_corner().

◆ test_ray_triangle_down()

s32 test_ray_triangle_down ( ColliderTriangle * triangle,
Vec3f * vertices )

◆ test_ray_triangle_general()

s32 test_ray_triangle_general ( ColliderTriangle * triangle,
Vec3f * vertices )

◆ test_ray_triangle_horizontal()

s32 test_ray_triangle_horizontal ( ColliderTriangle * triangle,
Vec3f * vertices )

◆ test_ray_zones()

s32 test_ray_zones ( f32 startX,
f32 startY,
f32 startZ,
f32 dirX,
f32 dirY,
f32 dirZ,
f32 * hitX,
f32 * hitY,
f32 * hitZ,
f32 * hitDepth,
f32 * hitNx,
f32 * hitNy,
f32 * hitNz )

◆ update_collider_transform()

void update_collider_transform ( s16 colliderID)

Variable Documentation

◆ gCollisionData

◆ gCollisionDataBackup

◆ gCollisionDataZoneBackup

◆ gCollisionNormalX

◆ gCollisionNormalY

◆ gCollisionNormalZ

◆ gCollisionPointX

◆ gCollisionPointY

◆ gCollisionPointZ

◆ gCollisionRayDirX

◆ gCollisionRayDirY

◆ gCollisionRayDirZ

◆ gCollisionRayLength

◆ gCollisionRayStartX

◆ gCollisionRayStartY

◆ gCollisionRayStartZ

◆ gEntityColliderFaces

Vec3s gEntityColliderFaces[]
extern

Referenced by test_ray_entities().

◆ gEntityColliderNormals

Vec3f gEntityColliderNormals[]
extern

Referenced by test_ray_entities().

◆ gZoneCollisionData