55 { 4, 6, 5 }, { 4, 7, 6 },
56 { 0, 3, 4 }, { 3, 7, 4 },
57 { 3, 2, 7 }, { 2, 6, 7 },
58 { 2, 1, 6 }, { 1, 5, 6 },
59 { 1, 0, 5 }, { 0, 4, 5 },
60 { 0, 1, 2 }, { 0, 2, 3 },
64 { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f },
65 { 1.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f },
66 { 0.0f, 0.0f, -1.0f }, { 0.0f, 0.0f, -1.0f },
67 { -1.0f, 0.0f, 0.0f }, { -1.0f, 0.0f, 0.0f },
68 { 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f },
69 { 0.0f, -1.0f, 0.0f }, { 0.0f, -1.0f, 0.0f },
210 collisionOffset =
map->hitAssetCollisionOffset;
211 if (collisionOffset == 0) {
219 collisionOffset =
map->hitAssetZoneOffset;
220 if (collisionOffset == 0) {
254 numTriangles =
collider->numTriangles;
348 vertexTable[0].
x = vertexTable[1].
x =
vertex->x;
349 vertexTable[0].
y = vertexTable[1].
y =
vertex->y;
350 vertexTable[0].
z = vertexTable[1].
z =
vertex->z;
353 vertexTable =
collider->vertexTable;
366 for (i = 0; i < *
bufSize; i++) {
382 if (*buffer ==
vert) {
412 vertexTable =
collider->vertexTable;
417 for (i = 0; i <
collider->numVertices; vertexTable += 2, i++) {
418 guMtxXFMF(
matrix, vertexTable[1].x, vertexTable[1].y, vertexTable[1].z, &vertexTable[0].x, &vertexTable[0].y, &vertexTable[0].z);
420 if (vertexTable[0].x <
min_x)
422 if (vertexTable[0].x >
max_x)
424 if (vertexTable[0].y <
min_y)
426 if (vertexTable[0].y >
max_y)
428 if (vertexTable[0].z <
min_z)
430 if (vertexTable[0].z >
max_z)
500 *x = (aabb->
min.
x + aabb->
max.
x) * 0.5f;
501 *y = (aabb->
min.
y + aabb->
max.
y) * 0.5f;
502 *z = (aabb->
min.
z + aabb->
max.
z) * 0.5f;
777 if (dirX == 0 &&
dirY == 0 && dirZ == 0) {
937 triangleTable =
collider->triangleTable;
939 for (i = 0; i <
collider->numTriangles; i++)
974 if (dirX == 0 && dirZ == 0 &&
dirY < 0) {
977 }
else if (
dirY == 0) {
1005 if (dist +
dist2 < startY || startY < dist -
dist2) {
1012 if (dist +
dist2 < startY || startY < dist -
dist2) {
1032 for (
j = 0;
j < 12;
j++) {
BSS s32 PopupMenu_SelectedIndex
void load_map_hit_asset(void)
BSS f32 gCollisionNormalY
BSS ColliderBackupEntry * gCollisionDataZoneBackup
BSS f32 gCollisionRayStartZ
BSS f32 gCollisionNormalX
CollisionData gZoneCollisionData
s32 collision_heap_create(void)
void load_battle_hit_asset(const char *hitName)
BSS f32 gCollisionNormalZ
s32 get_collider_flags(s32 colliderID)
void backup_map_collision_data(void)
s32 _get_hit_vert_index_from_buffer(Vec3f **buffer, Vec3f *vert, s32 *bufferSize)
void get_flat_collider_normal(s32 colliderID, f32 *x, f32 *y, f32 *z)
BSS ColliderBackupEntry * gCollisionDataBackup
void update_collider_transform(s16 colliderID)
void initialize_collision(void)
BSS f32 gCollisionRayStartY
BSS f32 gCollisionRayLength
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)
void load_hit_data(s32 idx, HitFile *hit)
void collision_heap_free(void *)
BSS f32 gCollisionRayDirX
CollisionData gCollisionData
void get_collider_center(s32 colliderID, f32 *x, f32 *y, f32 *z)
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.
s32 test_ray_triangle_down(ColliderTriangle *triangle, Vec3f *vertices)
BSS f32 gCollisionRayStartX
s32 test_ray_triangle_general(ColliderTriangle *triangle, Vec3f *vertices)
Vec3f gEntityColliderNormals[]
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)
s16 boundingBoxesDataSize
void _add_hit_vert_to_buffer(Vec3f **buf, Vec3f *vert, s32 *bufSize)
BSS f32 gCollisionRayDirZ
void parent_collider_to_model(s16 colliderID, s16 modelIndex)
void * collision_heap_malloc(s32 size)
void restore_map_collision_data(void)
s32 test_ray_triangle_horizontal(ColliderTriangle *triangle, Vec3f *vertices)
Vec3s gEntityColliderFaces[]
f32 test_ray_collider_horizontal(s32 ignoreFlags, s32 colliderID, f32 x, f32 y, f32 z, f32 length, f32 yaw)
BSS f32 gCollisionRayDirY
struct ColliderTriangle * triangleTable
#define general_heap_malloc
@ COLLIDER_FLAG_IGNORE_PLAYER
@ COLLIDER_FLAG_HAS_MODEL_PARENT
@ ENTITY_FLAG_SKIP_UPDATE
@ ENTITY_FLAG_DISABLE_COLLISION
Entity * get_entity_by_index(s32 index)
void * load_asset_by_name(const char *assetName, u32 *decompressedSize)
struct Model * get_model_from_list_index(s32 listIndex)
void copy_matrix(Matrix4f src, Matrix4f dest)
s32 general_heap_free(void *data)
void decode_yay0(void *src, void *dst)
void sin_cos_rad(f32 rad, f32 *outSinTheta, f32 *outCosTheta)
void * heap_malloc(s32 size)
#define COLLISION_WITH_ENTITY_BIT
MapSettings * get_current_map_settings(void)
Fields other than main, entryList, entryCount, background, and tattle are initialised when the map lo...