summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-04-18 18:14:36 -0400
committerGitHub <noreply@github.com>2023-04-18 18:14:36 -0400
commit38d21bbe9753568ff3c708ec602d037aca6a0f27 (patch)
treebe399fb71b38c8f1974ab10f332a8632da924453 /include
parent4647ebb91b9646d92d85929814815e48fa6e44ac (diff)
Name some `SurfaceType_` functions (#1155)
* enums * renaming functions * fixes * SurfaceType_IsSoft * type fixing * format * Update src/code/z_bgcheck.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_bgcheck.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review Co-authored-by: engineer124 <engineer124engineer124@gmail.com> * SurfaceType_GetFloorEffect Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com> * format * bss * cleanups * extra material docs * cleanup * cleanups * Remove Bg prefix * minor fixes * Remove BG_ * SURFACE_MATERIAL_DIRT_SHALLOW * format * bss * bss * review Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * format * format again * bug * format * namefixer * bss * bss * bss * review --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: engineer124 <engineer124engineer124@gmail.com> Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
Diffstat (limited to 'include')
-rw-r--r--include/functions.h158
-rw-r--r--include/sfx.h2
-rw-r--r--include/ultra64/thread.h20
-rw-r--r--include/z64bgcheck.h293
4 files changed, 292 insertions, 181 deletions
diff --git a/include/functions.h b/include/functions.h
index 5d7c5364f..ac6ad65dd 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -776,164 +776,6 @@ void* ActorOverlayTable_FaultAddrConv(void* address, void* param);
void ActorOverlayTable_Init(void);
void ActorOverlayTable_Cleanup(void);
-void SSNode_SetValue(SSNode* node, s16* polyIndex, u16 next);
-void SSList_SetNull(SSList* ssList);
-void SSNodeList_SetSSListHead(SSNodeList* list, SSList* ssList, s16* polyIndex);
-void DynaSSNodeList_SetSSListHead(DynaSSNodeList* list, SSList* ssList, s16* polyIndex);
-void DynaSSNodeList_Init(PlayState* play, DynaSSNodeList* list);
-void DynaSSNodeList_Alloc(PlayState* play, DynaSSNodeList* list, u32 numNodes);
-void DynaSSNodeList_ResetCount(DynaSSNodeList* list);
-u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* list);
-void BgCheck_Vec3sToVec3f(Vec3s* src, Vec3f* dest);
-void BgCheck_Vec3fToVec3s(Vec3s* dest, Vec3f* src);
-f32 func_800BFD84(CollisionPoly *poly, f32 arg1, f32 arg2);
-s32 func_800BFDEC(CollisionPoly* polyA, CollisionPoly* polyB, u32* outVtxId0, u32* outVtxId1);
-s16 CollisionPoly_GetMinY(CollisionPoly* poly, Vec3s* vertices);
-void CollisionPoly_GetNormalF(CollisionPoly* poly, f32* nx, f32* ny, f32* nz);
-void func_800C0094(CollisionPoly* poly, f32 tx, f32 ty, f32 tz, MtxF* dest);
-f32 CollisionPoly_GetPointDistanceFromPlane(CollisionPoly* poly, Vec3f* point);
-void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest);
-s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius);
-void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
-void StaticLookup_AddPoly(StaticLookup* lookup, CollisionContext* colCtx, CollisionPoly* polyList, Vec3s* vtxList, s16 index);
-void BgCheck_GetSubdivisionMinBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
-void BgCheck_GetSubdivisionMaxBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
-void BgCheck_GetPolySubdivisionBounds(CollisionContext* colCtx, Vec3s* vtxList, CollisionPoly* polyList, s32* subdivMinX, s32* subdivMinY, s32* subdivMinZ, s32* subdivMaxX, s32* subdivMaxY, s32* subdivMaxZ, s16 polyId);
-s32 BgCheck_PolyIntersectsSubdivision(Vec3f* min, Vec3f* max, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
-u32 BgCheck_InitStaticLookup(CollisionContext* colCtx, PlayState* play, StaticLookup* lookupTbl);
-s32 BgCheck_IsSmallMemScene(PlayState* play);
-s32 BgCheck_TryGetCustomMemsize(s32 sceneId, u32* memSize);
-void BgCheck_SetSubdivisionDimension(f32 min, s32 subdivAmount, f32* max, f32* subdivLength, f32* subdivLengthInv);
-s32 BgCheck_GetSpecialSceneMaxObjects(PlayState* play, s32* maxNodes, s32* maxPolygons, s32* maxVertices);
-void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader* colHeader);
-void BgCheck_SetContextFlags(CollisionContext* colCtx, u32 flags);
-void BgCheck_UnsetContextFlags(CollisionContext* colCtx, u32 flags);
-CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId);
-f32 BgCheck_RaycastFloorImpl(PlayState* play, CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* pos, Actor* actor, u32 arg7, f32 checkDist, s32 arg9);
-f32 BgCheck_CameraRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor2(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor2_1(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor5(CollisionContext* colCtx, CollisionPoly** outPoly, s32* outBgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor5_2(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor5_3(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor6(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 checkDist);
-f32 BgCheck_EntityRaycastFloor7(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_AnyRaycastFloor1(CollisionContext* colCtx, CollisionPoly* outPoly, Vec3f* pos);
-f32 BgCheck_AnyRaycastFloor2(CollisionContext* colCtx, CollisionPoly* outPoly, s32* bgId, Vec3f* pos);
-f32 BgCheck_CameraRaycastFloor2(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor8(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
-s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA);
-s32 BgCheck_EntitySphVsWall1(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, f32 checkHeight);
-s32 BgCheck_EntitySphVsWall2(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, f32 checkHeight);
-s32 BgCheck_EntitySphVsWall3(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
-s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
-s32 BgCheck_CheckCeilingImpl(CollisionContext* colCtx, u16 xpFlags, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
-s32 BgCheck_AnyCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight);
-s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
-s32 BgCheck_CameraLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor);
-s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor, f32 checkDist);
-s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkOneFace);
-s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace);
-s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_SphVsFirstPolyImpl(CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* center, f32 radius, Actor* actor, u16 bciFlags);
-s32 BgCheck_SphVsFirstPoly(CollisionContext* colCtx, Vec3f* center, f32 radius);
-s32 BgCheck_SphVsFirstWall(CollisionContext* colCtx, Vec3f* center, f32 radius);
-void SSNodeList_Init(SSNodeList* this);
-void SSNodeList_Alloc(PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys);
-SSNode* SSNodeList_GetNextNode(SSNodeList* this);
-u16 SSNodeList_GetNextNodeIdx(SSNodeList* this);
-void ScaleRotPos_Init(ScaleRotPos* srp);
-void ScaleRotPos_SetValue(ScaleRotPos* srp, Vec3f* scale, Vec3s* rot, Vec3f* pos);
-s32 ScaleRotPos_IsEqual(ScaleRotPos* a, ScaleRotPos* b);
-void DynaLookup_ResetLists(DynaLookup* dynaLookup);
-void DynaLookup_Reset(DynaLookup* dynaLookup);
-void DynaLookup_ResetVtxStartIndex(u16* vtxStartIndex);
-void DynaLookup_ResetWaterBoxStartIndex(u16* waterBoxStartIndex);
-void BgActor_Init(PlayState* play, BgActor* bgActor);
-void BgActor_SetActor(BgActor* bgActor, Actor* actor, CollisionHeader* colHeader);
-s32 BgActor_IsTransformUnchanged(BgActor* bgActor);
-void DynaPoly_NullPolyList(CollisionPoly** polyList);
-void DynaPoly_AllocPolyList(PlayState* play, CollisionPoly** polyList, s32 numPolys);
-void DynaPoly_NullVtxList(Vec3s** vtxList);
-void DynaPoly_AllocVtxList(PlayState* play, Vec3s** vtxList, s32 numVtx);
-void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList);
-void DynaPoly_AllocWaterBoxList(PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes);
-void DynaPoly_SetBgActorPrevTransform(PlayState* play, BgActor* bgActor);
-s32 DynaPoly_IsBgIdBgActor(s32 bgId);
-void DynaPoly_Init(PlayState* play, DynaCollisionContext* dyna);
-void DynaPoly_Alloc(PlayState* play, DynaCollisionContext* dyna);
-s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader);
-DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId);
-void func_800C62BC(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C6314(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C636C(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C63C4(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C641C(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C6474(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C6554(PlayState* play, DynaCollisionContext* dyna);
-void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength);
-void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex);
-void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor);
-void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna);
-void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertices, s32* numWaterBoxes);
-void DynaPoly_UpdateBgActorTransforms(PlayState* play, DynaCollisionContext* dyna);
-void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader);
-void CollisionHeader_GetVirtual(CollisionHeader* colHeader, CollisionHeader** dest);
-void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, PlayState* play);
-
-u32 SurfaceType_GetBgCamIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u16 BgCheck_GetBgCamSettingImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
-u16 BgCheck_GetBgCamSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u16 BgCheck_GetBgCamCountImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
-u16 BgCheck_GetBgCamCount(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-Vec3s* BgCheck_GetBgCamFuncDataImpl(CollisionContext* colCtx, s32 bgCamIndex, s32 bgId);
-Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-
-u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C99D4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9A24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9A4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9A7C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9AB0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9AE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9B18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9B40(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9B68(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9BB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9C24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 arg3);
-u32 SurfaceType_GetSlope(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 SurfaceType_IsFloorConveyor(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
-s32 WaterBox_GetSurface1(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
-s32 WaterBox_GetSurface1_2(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
-s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceCheckDist, WaterBox** outWaterBox, s32* bgId);
-f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId);
-u16 WaterBox_GetBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId);
-void WaterBox_GetSceneBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox);
-u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox);
-s32 func_800CA6F0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
-s32 func_800CA9D0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
-s32 func_800CAA14(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* pointA, Vec3f* pointB, Vec3f* closestPoint);
void BgCheck2_UpdateActorPosition(CollisionContext* colCtx, s32 bgId, Actor* actor);
void BgCheck2_UpdateActorYRotation(CollisionContext* colCtx, s32 bgId, Actor* actor);
void BgCheck2_AttachToMesh(CollisionContext* colCtx, Actor* actor, s32 bgId);
diff --git a/include/sfx.h b/include/sfx.h
index 33c79abf4..b55fbb357 100644
--- a/include/sfx.h
+++ b/include/sfx.h
@@ -16,6 +16,8 @@
#define SFX_FLAG_MASK 0xC00
#define SFX_FLAG 0x800
+#define NA_SE_NONE 0
+
// ------------ PLAYER ------------
#define NA_SE_PL_WALK_GROUND 0x800
diff --git a/include/ultra64/thread.h b/include/ultra64/thread.h
index f3cd68890..62cbdcd1b 100644
--- a/include/ultra64/thread.h
+++ b/include/ultra64/thread.h
@@ -54,16 +54,16 @@ typedef struct {
} __OSThreadprofile; // size = 0x10
typedef struct OSThread {
- /*0x00*/ struct OSThread* next;
- /*0x04*/ OSPri priority;
- /*0x08*/ struct OSThread** queue;
- /*0x0C*/ struct OSThread* tlnext;
- /*0x10*/ u16 state;
- /*0x12*/ u16 flags;
- /*0x14*/ OSId id;
- /*0x18*/ s32 fp;
- /*0x1C*/ __OSThreadprofile* thprof;
- /*0x20*/ __OSThreadContext context;
+ /* 0x00 */ struct OSThread* next;
+ /* 0x04 */ OSPri priority;
+ /* 0x08 */ struct OSThread** queue;
+ /* 0x0C */ struct OSThread* tlnext;
+ /* 0x10 */ u16 state;
+ /* 0x12 */ u16 flags;
+ /* 0x14 */ OSId id;
+ /* 0x18 */ s32 fp;
+ /* 0x1C */ __OSThreadprofile* thprof;
+ /* 0x20 */ __OSThreadContext context;
} OSThread; // size = 0x1B0
#endif
diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h
index ad56599b5..c6210b2c1 100644
--- a/include/z64bgcheck.h
+++ b/include/z64bgcheck.h
@@ -48,11 +48,6 @@ struct DynaPolyActor;
#define COLPOLY_IGNORE_ENTITY (1 << 1)
#define COLPOLY_IGNORE_PROJECTILES (1 << 2)
-// Surface Types
-#define COLPOLY_SURFACE_GROUND 0
-#define COLPOLY_SURFACE_SAND 1
-#define COLPOLY_SURFACE_SNOW 14
-
// CollisionContext flags
#define BGCHECK_FLAG_REVERSE_CONVEYOR_FLOW 1
@@ -114,6 +109,120 @@ typedef struct {
// 0x0000_00FF = bgCam index
} WaterBox; // size = 0x10
+typedef enum FloorType {
+ /* 0 */ FLOOR_TYPE_0,
+ /* 1 */ FLOOR_TYPE_1,
+ /* 2 */ FLOOR_TYPE_2,
+ /* 3 */ FLOOR_TYPE_3,
+ /* 4 */ FLOOR_TYPE_4,
+ /* 5 */ FLOOR_TYPE_5,
+ /* 6 */ FLOOR_TYPE_6,
+ /* 7 */ FLOOR_TYPE_7,
+ /* 8 */ FLOOR_TYPE_8,
+ /* 9 */ FLOOR_TYPE_9,
+ /* 10 */ FLOOR_TYPE_10,
+ /* 11 */ FLOOR_TYPE_11,
+ /* 12 */ FLOOR_TYPE_12,
+ /* 13 */ FLOOR_TYPE_13,
+ /* 14 */ FLOOR_TYPE_14,
+ /* 15 */ FLOOR_TYPE_15
+} FloorType;
+
+typedef enum WallType {
+ /* 0 */ WALL_TYPE_0,
+ /* 1 */ WALL_TYPE_1,
+ /* 2 */ WALL_TYPE_2,
+ /* 3 */ WALL_TYPE_3,
+ /* 4 */ WALL_TYPE_4,
+ /* 5 */ WALL_TYPE_5,
+ /* 6 */ WALL_TYPE_6,
+ /* 7 */ WALL_TYPE_7,
+ /* 8 */ WALL_TYPE_8,
+ /* 9 */ WALL_TYPE_9,
+ /* 10 */ WALL_TYPE_10,
+ /* 11 */ WALL_TYPE_11,
+ /* 12 */ WALL_TYPE_12,
+ /* 32 */ WALL_TYPE_MAX = 32
+} WallType;
+
+#define WALL_FLAG_0 (1 << 0)
+#define WALL_FLAG_1 (1 << 1)
+#define WALL_FLAG_2 (1 << 2)
+#define WALL_FLAG_3 (1 << 3)
+#define WALL_FLAG_4 (1 << 4)
+#define WALL_FLAG_5 (1 << 5)
+#define WALL_FLAG_6 (1 << 6)
+
+// SurfaceType can leave footsteps imprints in the material
+#define MATERIAL_PROPERTY_SOFT_IMPRINT (1 << 0)
+
+typedef enum FloorProperty {
+ /* 0 */ FLOOR_PROPERTY_0,
+ /* 1 */ FLOOR_PROPERTY_1,
+ /* 2 */ FLOOR_PROPERTY_2,
+ /* 5 */ FLOOR_PROPERTY_5 = 5,
+ /* 6 */ FLOOR_PROPERTY_6,
+ /* 7 */ FLOOR_PROPERTY_7,
+ /* 8 */ FLOOR_PROPERTY_8,
+ /* 9 */ FLOOR_PROPERTY_9,
+ /* 11 */ FLOOR_PROPERTY_11 = 11,
+ /* 12 */ FLOOR_PROPERTY_12,
+ /* 13 */ FLOOR_PROPERTY_13
+} FloorProperty;
+
+typedef enum SurfaceSfxOffset {
+ /* 0 */ SURFACE_SFX_OFFSET_DIRT,
+ /* 1 */ SURFACE_SFX_OFFSET_SAND,
+ /* 2 */ SURFACE_SFX_OFFSET_STONE,
+ /* 3 */ SURFACE_SFX_OFFSET_DIRT_SHALLOW,
+ /* 4 */ SURFACE_SFX_OFFSET_WATER_SHALLOW,
+ /* 5 */ SURFACE_SFX_OFFSET_WATER_DEEP,
+ /* 6 */ SURFACE_SFX_OFFSET_TALL_GRASS,
+ /* 7 */ SURFACE_SFX_OFFSET_LAVA, // MAGMA?
+ /* 8 */ SURFACE_SFX_OFFSET_GRASS,
+ /* 9 */ SURFACE_SFX_OFFSET_CARPET,
+ /* 10 */ SURFACE_SFX_OFFSET_WOOD,
+ /* 11 */ SURFACE_SFX_OFFSET_BRIDGE, // WOOD_PLANK?
+ /* 12 */ SURFACE_SFX_OFFSET_VINE, // METAL?
+ /* 13 */ SURFACE_SFX_OFFSET_DIRT_DEEP,
+ /* 14 */ SURFACE_SFX_OFFSET_SNOW,
+ /* 15 */ SURFACE_SFX_OFFSET_ICE
+} SurfaceSfxOffset;
+
+typedef enum SurfaceMaterial {
+ /* 0 */ SURFACE_MATERIAL_DIRT,
+ /* 1 */ SURFACE_MATERIAL_SAND,
+ /* 2 */ SURFACE_MATERIAL_STONE,
+ /* 3 */ SURFACE_MATERIAL_DIRT_SHALLOW,
+ /* 4 */ SURFACE_MATERIAL_WATER_SHALLOW,
+ /* 5 */ SURFACE_MATERIAL_WATER_DEEP,
+ /* 6 */ SURFACE_MATERIAL_TALL_GRASS,
+ /* 7 */ SURFACE_MATERIAL_LAVA, // MAGMA?
+ /* 8 */ SURFACE_MATERIAL_GRASS,
+ /* 9 */ SURFACE_MATERIAL_BRIDGE, // WOOD_PLANK?
+ /* 10 */ SURFACE_MATERIAL_WOOD,
+ /* 11 */ SURFACE_MATERIAL_DIRT_SOFT,
+ /* 12 */ SURFACE_MATERIAL_ICE,
+ /* 13 */ SURFACE_MATERIAL_CARPET,
+ /* 14 */ SURFACE_MATERIAL_SNOW,
+ /* 15 */ SURFACE_MATERIAL_MAX
+} SurfaceMaterial;
+
+typedef enum FloorEffect {
+ /* 0 */ FLOOR_EFFECT_0,
+ /* 1 */ FLOOR_EFFECT_1,
+ /* 2 */ FLOOR_EFFECT_2,
+ /* 3 */ FLOOR_EFFECT_3
+} FloorEffect;
+
+typedef enum ConveyorSpeed {
+ /* 0 */ CONVEYOR_SPEED_DISABLED,
+ /* 1 */ CONVEYOR_SPEED_SLOW,
+ /* 2 */ CONVEYOR_SPEED_MEDIUM,
+ /* 3 */ CONVEYOR_SPEED_FAST,
+ /* 4 */ CONVEYOR_SPEED_MAX
+} ConveyorSpeed;
+
typedef struct {
/* 0x0 */ u32 data[2];
@@ -219,14 +328,14 @@ typedef struct {
} DynaCollisionContext; // size = 0x1418
typedef struct {
- /* 0x00 */ CollisionHeader* colHeader; // scene's static collision
- /* 0x04 */ Vec3f minBounds; // minimum coordinates of collision bounding box
- /* 0x10 */ Vec3f maxBounds; // maximum coordinates of collision bounding box
- /* 0x1C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision
- /* 0x28 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths
- /* 0x34 */ Vec3f subdivLengthInv; // inverse of subdivision length
- /* 0x40 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount
- /* 0x44 */ SSNodeList polyNodes;
+ /* 0x0000 */ CollisionHeader* colHeader; // scene's static collision
+ /* 0x0004 */ Vec3f minBounds; // minimum coordinates of collision bounding box
+ /* 0x0010 */ Vec3f maxBounds; // maximum coordinates of collision bounding box
+ /* 0x001C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision
+ /* 0x0028 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths
+ /* 0x0034 */ Vec3f subdivLengthInv; // inverse of subdivision length
+ /* 0x0040 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount
+ /* 0x0044 */ SSNodeList polyNodes;
/* 0x0050 */ DynaCollisionContext dyna;
/* 0x1468 */ u32 memSize; // Size of all allocated memory plus CollisionContext
/* 0x146C */ u32 flags; // bit 0 reverses conveyor direction (i.e. water flow in Great Bay Temple)
@@ -317,4 +426,162 @@ typedef struct {
/* 0x8 */ s32 nodeListMax; // if -1, dynamically compute max nodes
} BgCheckSceneSubdivisionEntry; // size = 0xC
+void SSNode_SetValue(SSNode* node, s16* polyIndex, u16 next);
+void SSList_SetNull(SSList* ssList);
+void SSNodeList_SetSSListHead(SSNodeList* list, SSList* ssList, s16* polyIndex);
+void DynaSSNodeList_SetSSListHead(DynaSSNodeList* list, SSList* ssList, s16* polyIndex);
+void DynaSSNodeList_Init(struct PlayState* play, DynaSSNodeList* list);
+void DynaSSNodeList_Alloc(struct PlayState* play, DynaSSNodeList* list, u32 numNodes);
+void DynaSSNodeList_ResetCount(DynaSSNodeList* list);
+u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* list);
+void BgCheck_Vec3sToVec3f(Vec3s* src, Vec3f* dest);
+void BgCheck_Vec3fToVec3s(Vec3s* dest, Vec3f* src);
+f32 func_800BFD84(CollisionPoly *poly, f32 arg1, f32 arg2);
+s32 func_800BFDEC(CollisionPoly* polyA, CollisionPoly* polyB, u32* outVtxId0, u32* outVtxId1);
+s16 CollisionPoly_GetMinY(CollisionPoly* poly, Vec3s* vertices);
+void CollisionPoly_GetNormalF(CollisionPoly* poly, f32* nx, f32* ny, f32* nz);
+void func_800C0094(CollisionPoly* poly, f32 tx, f32 ty, f32 tz, MtxF* dest);
+f32 CollisionPoly_GetPointDistanceFromPlane(CollisionPoly* poly, Vec3f* point);
+void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest);
+s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius);
+void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
+void StaticLookup_AddPoly(StaticLookup* lookup, CollisionContext* colCtx, CollisionPoly* polyList, Vec3s* vtxList, s16 index);
+void BgCheck_GetSubdivisionMinBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
+void BgCheck_GetSubdivisionMaxBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
+void BgCheck_GetPolySubdivisionBounds(CollisionContext* colCtx, Vec3s* vtxList, CollisionPoly* polyList, s32* subdivMinX, s32* subdivMinY, s32* subdivMinZ, s32* subdivMaxX, s32* subdivMaxY, s32* subdivMaxZ, s16 polyId);
+s32 BgCheck_PolyIntersectsSubdivision(Vec3f* min, Vec3f* max, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
+u32 BgCheck_InitStaticLookup(CollisionContext* colCtx, struct PlayState* play, StaticLookup* lookupTbl);
+s32 BgCheck_IsSmallMemScene(struct PlayState* play);
+s32 BgCheck_TryGetCustomMemsize(s32 sceneId, u32* memSize);
+void BgCheck_SetSubdivisionDimension(f32 min, s32 subdivAmount, f32* max, f32* subdivLength, f32* subdivLengthInv);
+s32 BgCheck_GetSpecialSceneMaxObjects(struct PlayState* play, s32* maxNodes, s32* maxPolygons, s32* maxVertices);
+void BgCheck_Allocate(CollisionContext* colCtx, struct PlayState* play, CollisionHeader* colHeader);
+void BgCheck_SetContextFlags(CollisionContext* colCtx, u32 flags);
+void BgCheck_UnsetContextFlags(CollisionContext* colCtx, u32 flags);
+CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId);
+f32 BgCheck_RaycastFloorImpl(struct PlayState* play, CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* pos, Actor* actor, u32 arg7, f32 checkDist, s32 arg9);
+f32 BgCheck_CameraRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor2(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor2_1(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor5(CollisionContext* colCtx, CollisionPoly** outPoly, s32* outBgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor5_2(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor5_3(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor6(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 checkDist);
+f32 BgCheck_EntityRaycastFloor7(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_AnyRaycastFloor1(CollisionContext* colCtx, CollisionPoly* outPoly, Vec3f* pos);
+f32 BgCheck_AnyRaycastFloor2(CollisionContext* colCtx, CollisionPoly* outPoly, s32* bgId, Vec3f* pos);
+f32 BgCheck_CameraRaycastFloor2(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor8(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
+s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA);
+s32 BgCheck_EntitySphVsWall1(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, f32 checkHeight);
+s32 BgCheck_EntitySphVsWall2(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, f32 checkHeight);
+s32 BgCheck_EntitySphVsWall3(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
+s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
+s32 BgCheck_CheckCeilingImpl(CollisionContext* colCtx, u16 xpFlags, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
+s32 BgCheck_AnyCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight);
+s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
+s32 BgCheck_CameraLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor);
+s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor, f32 checkDist);
+s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkOneFace);
+s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace);
+s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_SphVsFirstPolyImpl(CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* center, f32 radius, Actor* actor, u16 bciFlags);
+s32 BgCheck_SphVsFirstPoly(CollisionContext* colCtx, Vec3f* center, f32 radius);
+s32 BgCheck_SphVsFirstWall(CollisionContext* colCtx, Vec3f* center, f32 radius);
+void SSNodeList_Init(SSNodeList* this);
+void SSNodeList_Alloc(struct PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys);
+SSNode* SSNodeList_GetNextNode(SSNodeList* this);
+u16 SSNodeList_GetNextNodeIdx(SSNodeList* this);
+void ScaleRotPos_Init(ScaleRotPos* srp);
+void ScaleRotPos_SetValue(ScaleRotPos* srp, Vec3f* scale, Vec3s* rot, Vec3f* pos);
+s32 ScaleRotPos_IsEqual(ScaleRotPos* a, ScaleRotPos* b);
+void DynaLookup_ResetLists(DynaLookup* dynaLookup);
+void DynaLookup_Reset(DynaLookup* dynaLookup);
+void DynaLookup_ResetVtxStartIndex(u16* vtxStartIndex);
+void DynaLookup_ResetWaterBoxStartIndex(u16* waterBoxStartIndex);
+void BgActor_Init(struct PlayState* play, BgActor* bgActor);
+void BgActor_SetActor(BgActor* bgActor, Actor* actor, CollisionHeader* colHeader);
+s32 BgActor_IsTransformUnchanged(BgActor* bgActor);
+void DynaPoly_NullPolyList(CollisionPoly** polyList);
+void DynaPoly_AllocPolyList(struct PlayState* play, CollisionPoly** polyList, s32 numPolys);
+void DynaPoly_NullVtxList(Vec3s** vtxList);
+void DynaPoly_AllocVtxList(struct PlayState* play, Vec3s** vtxList, s32 numVtx);
+void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList);
+void DynaPoly_AllocWaterBoxList(struct PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes);
+void DynaPoly_SetBgActorPrevTransform(struct PlayState* play, BgActor* bgActor);
+s32 DynaPoly_IsBgIdBgActor(s32 bgId);
+void DynaPoly_Init(struct PlayState* play, DynaCollisionContext* dyna);
+void DynaPoly_Alloc(struct PlayState* play, DynaCollisionContext* dyna);
+s32 DynaPoly_SetBgActor(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader);
+DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId);
+void func_800C62BC(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void func_800C6314(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void func_800C636C(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void func_800C63C4(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void func_800C641C(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void func_800C6474(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void func_800C6554(struct PlayState* play, DynaCollisionContext* dyna);
+void DynaPoly_DeleteBgActor(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength);
+void DynaPoly_ExpandSRT(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex);
+void BgCheck_ResetFlagsIfLoadedActor(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor);
+void DynaPoly_Setup(struct PlayState* play, DynaCollisionContext* dyna);
+void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertices, s32* numWaterBoxes);
+void DynaPoly_UpdateBgActorTransforms(struct PlayState* play, DynaCollisionContext* dyna);
+void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader);
+void CollisionHeader_GetVirtual(CollisionHeader* colHeader, CollisionHeader** dest);
+void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, struct PlayState* play);
+
+u32 SurfaceType_GetBgCamIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u16 BgCheck_GetBgCamSettingImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
+u16 BgCheck_GetBgCamSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u16 BgCheck_GetBgCamCountImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
+u16 BgCheck_GetBgCamCount(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+Vec3s* BgCheck_GetBgCamFuncDataImpl(CollisionContext* colCtx, s32 bgCamIndex, s32 bgId);
+Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+
+u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+FloorType SurfaceType_GetFloorType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_GetWallFlags(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_CheckWallFlag0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_CheckWallFlag1(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_CheckWallFlag2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+FloorProperty SurfaceType_GetFloorProperty2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+FloorProperty SurfaceType_GetFloorProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsSoft(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+SurfaceMaterial SurfaceType_GetMaterial(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u16 SurfaceType_GetSfxOffset(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_HasMaterialProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 propertyType);
+FloorEffect SurfaceType_GetFloorEffect(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_IsFloorConveyor(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+ConveyorSpeed SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 WaterBox_GetSurfaceImpl(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
+s32 WaterBox_GetSurface1(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
+s32 WaterBox_GetSurface1_2(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
+s32 WaterBox_GetSurface2(struct PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceCheckDist, WaterBox** outWaterBox, s32* bgId);
+f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId);
+u16 WaterBox_GetBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId);
+void WaterBox_GetSceneBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox);
+u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox);
+s32 func_800CA6F0(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
+s32 func_800CA9D0(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
+s32 func_800CAA14(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* pointA, Vec3f* pointB, Vec3f* closestPoint);
+
#endif