z_collision_check.c (#58)

* setup

* Progress on z_collision_check.c

* Further progress on z_collision_check.c

* renamed code_0x800E03A0 to z_collision_btltbls, z_collision_check.c decompiled besides bss

* Structs changes

* Document functions

* overlayhelpers folder, colliderinit.py and ichaindis.py

* Flags, format existing ColliderInits

* Fix merge

* Few more small improvements

* Review suggestions
This commit is contained in:
Tharo
2021-03-22 21:48:15 +00:00
committed by GitHub
parent 32d0e622fd
commit 1a2e6d7ffe
28 changed files with 6520 additions and 918 deletions
+232 -232
View File
@@ -934,8 +934,8 @@ s32 BgCheck_PolygonGetMinY(BgPolygon* polygons, BgVertex* vertices);
void BgCheck_PolygonGetNormal(BgPolygon* polygon, f32* normalX, f32* normalY, f32* normalZ);
void func_800C0094(BgPolygon* param_1, f32 xOffset, f32 yOffset, f32 zOffset, z_Matrix* matrix);
f32 func_800C01B8(BgPolygon* param_1, Vec3f* param_2);
void BgCheck_CreateColTriParamsFromPolygon(BgPolygon* polygon, BgVertex* vertices, ColTriParams* tri);
void func_800C02C0(BgPolygon* poly, s32 index, CollisionContext* bgCtxt, ColTriParams* tri);
void BgCheck_CreateTriNormFromPolygon(BgPolygon* polygon, BgVertex* vertices, TriNorm* tri);
void func_800C02C0(BgPolygon* poly, s32 index, CollisionContext* bgCtxt, TriNorm* tri);
// void func_800C0340(BgPolygon* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// UNK_TYPE4 func_800C0474(BgPolygon* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_800C0668(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
@@ -1317,217 +1317,217 @@ s16 Camera_ClearFlags(Camera* camera, s16 flags);
// void func_800E0308(void);
// void func_800E031C(void);
void func_800E0348(Camera* camera);
s800E03A0* func_800E03A0(s32 a0);
void func_800E03CC(u8* param_1);
f32 Collision_GetDamageAndEffectOnBumper(ColCommon* toucher, ColBodyInfo* toucherBody, ColCommon* bumper, ColBodyInfo* bumperBody, u32* effect);
// void func_800E04BC(void);
u32 Collision_GetToucherDamage(ColCommon* toucher, ColBodyInfo* toucherBody, ColCommon* bumper);
s32 Collision_InitCommonDefault(GlobalContext* ctxt, ColCommon* shape);
s32 Collision_FiniCommon(GlobalContext* ctxt, ColCommon* shape);
// void func_800E0594(void);
// void func_800E05D4(void);
s32 Collision_InitCommonWithData(GlobalContext* ctxt, ColCommon* shape, Actor* actor, ColCommonInit* init);
void Collision_ResetCommonForAT(GlobalContext* ctxt, ColCommon* shape);
void Collision_ResetCommonForAC(GlobalContext* ctxt, ColCommon* shape);
void Collision_ResetCommonForOT(GlobalContext* ctxt, ColCommon* shape);
s32 Collision_InitTouchDefault(GlobalContext* ctxt, ColTouch* touch);
s32 Collision_FiniTouch(GlobalContext* ctxt, ColTouch* touch);
s32 Collision_InitTouchWithData(GlobalContext* ctxt, ColTouch* touch, ColTouchInit* init);
void Collision_nop800E0720(GlobalContext* ctxt, ColBodyInfo* body);
s32 Collision_InitBumpDefault(GlobalContext* ctxt, ColBump* bump);
s32 Collision_FiniBump(GlobalContext* ctxt, ColBump* bump);
s32 Collision_InitBumpWithData(GlobalContext* ctxt, ColBump* bump, ColBumpInit* init);
s32 Collision_InitBodyDefault(GlobalContext* ctxt, ColBodyInfo* body);
s32 Collision_FiniBody(GlobalContext* ctxt, ColBodyInfo* body);
s32 Collision_InitBodyWithData(GlobalContext* ctxt, ColBodyInfo* body, ColBodyInfoInit* init);
void Collision_ResetBodyForAT(GlobalContext* ctxt, ColBodyInfo* body);
void Collision_ResetBodyForAC(GlobalContext* ctxt, ColBodyInfo* body);
void Collision_ResetBodyForOT(GlobalContext* ctxt, ColBodyInfo* body);
s32 Collision_InitSphereParamsDefault(GlobalContext* ctxt, ColSphereParams* params);
s32 Collision_FiniSphereParams(GlobalContext* ctxt, ColSphereParams* params);
s32 Collision_InitSphereParamsWithData(GlobalContext* ctxt, ColSphereParams* params, ColSphereParamsInit* init);
s32 Collision_InitSphereGroupElemDefault(GlobalContext* pzParm1, ColSphereGroupElement* elem);
s32 Collision_FiniSphereGroupElem(GlobalContext* ctxt, ColSphereGroupElement* elem);
s32 Collision_InitSphereGroupElemWithData(GlobalContext* ctxt, ColSphereGroupElement* elem, ColSphereGroupElementInit* init);
s32 Collision_ResetSphereGroupElemForAT(GlobalContext* ctxt, ColSphereGroupElement* elem);
s32 Collision_ResetSphereGroupElemForAC(GlobalContext* ctxt, ColSphereGroupElement* elem);
s32 Collision_ResetSphereGroupElemForOT(GlobalContext* ctxt, ColSphereGroupElement* elem);
s32 Collision_InitSphereGroupDefault(GlobalContext* ctxt, ColSphereGroup* sphereGroup);
// void func_800E0B78(void);
s32 Collision_FiniSphereGroup(GlobalContext* ctxt, ColSphereGroup* sphereGroup);
// void func_800E0CA8(void);
// void func_800E0D84(void);
s32 Collision_InitSphereGroupWithData(GlobalContext* ctxt, ColSphereGroup* sphereGroup, Actor* actor, ColSphereGroupInit* init, ColSphereGroupElement* spheres);
s32 Collision_InitSphereGroup(GlobalContext* ctxt, ColSphereGroup* sphereGroup, Actor* actor, ColSphereGroupInit* init, ColSphereGroupElement* spheres);
s32 Collision_ResetSphereGroupForAT(GlobalContext* ctxt, ColSphereGroup* spheres);
s32 Collision_ResetSphereGroupForAC(GlobalContext* ctxt, ColSphereGroup* spheres);
s32 Collision_ResetSphereGroupForOT(GlobalContext* ctst, ColSphereGroup* spheres);
s32 Collision_InitCylinderParamsDefault(GlobalContext* ctxt, ColCylinderParams* params);
s32 Collision_FiniCylinderParams(GlobalContext* ctxt, ColCylinderParams* params);
s32 Collision_InitCylinderParamsWithData(GlobalContext* ctxt, ColCylinderParams* info, ColCylinderParams* init);
s32 Collision_InitCylinderDefault(GlobalContext* ctxt, ColCylinder* cylinder);
s32 Collision_FiniCylinder(GlobalContext* ctxt, ColCylinder* cylinder);
// void func_800E123C(void);
// void func_800E12A4(void);
s32 Collision_InitCylinderWithData(GlobalContext* ctxt, ColCylinder* cylinder, Actor* actor, ColCylinderInit* init);
s32 Collision_InitCylinder(GlobalContext* ctxt, ColCylinder* cylinder, Actor* actor, ColCylinderInit* init);
s32 Collision_ResetCylinderForAT(GlobalContext* ctxt, ColCylinder* cylinder);
s32 Collision_ResetCylinderForAC(GlobalContext* ctxt, ColCylinder* cylinder);
s32 Collision_ReseCylinderForOT(GlobalContext* ctxt, ColCylinder* cylinder);
s32 Collision_InitTriParamsDefault(GlobalContext* ctxt, ColTriParams* coords);
s32 Collision_FiniTriParams(GlobalContext* ctxt, ColTriParams* params);
s32 Collision_InitTriParamsWithData(GlobalContext* ctxt, ColTriParams* params, ColTriParamsInit* init);
s32 Collision_InitTriDefault(GlobalContext* ctxt, ColTri* elem);
s32 Collision_FiniTri(GlobalContext* ctxt, ColTri* elem);
s32 Collision_InitTriWithData(GlobalContext* ctxt, ColTri* elem, ColTriInit* init);
s32 Collision_ResetTriForAT(GlobalContext* ctxt, ColTri* tri);
s32 Collision_ResetTriForAC(GlobalContext* ctxt, ColTri* tri);
s32 func_800E16AC(GlobalContext* ctxt, ColTri* tri);
s32 Collision_InitTriGroupDefault(GlobalContext* ctxt, ColTriGroup* quadGroup);
// void func_800E16FC(void);
s32 Collision_FiniTriGroup(GlobalContext* ctxt, ColTriGroup* triGroup);
// void func_800E1858(void);
s32 Collision_InitTriGroupWithData(GlobalContext* ctxt, ColTriGroup* triGroup, Actor* actor, ColTriGroupInit* init, ColTri* tris);
s32 Collision_InitTriGroup(GlobalContext* ctxt, ColTriGroup* triGroup, Actor* actor, ColTriGroupInit* init, ColTri* tris);
s32 Collision_ResetTriGroupForAT(GlobalContext* ctxt, ColTriGroup* tris);
s32 Collision_ResetTriGroupForAC(GlobalContext* ctxt, ColTriGroup* tris);
s32 Collision_ResetTriGroupForOT(GlobalContext* ctxt, ColTriGroup* tris);
s32 Collision_InitQuadParamsDefault(GlobalContext* ctxt, ColQuadParams* params);
s32 Collision_FiniQuadParams(GlobalContext* ctxt, ColQuadParams* params);
s32 Collision_ResetQuadParamsForAT(GlobalContext* ctxt, ColQuadParams* params);
void Collision_QuadCalcMidpoints(ColQuadParams* params);
s32 Collision_InitQuadParamsWithData(GlobalContext* ctxt, ColQuadParams* params, ColQuadParams* init);
s32 Collision_InitQuadDefault(GlobalContext* ctxt, ColQuad* quad);
s32 Collision_FiniQuad(GlobalContext* ctxt, ColQuad* quad);
// void func_800E1EB8(void);
s32 Collision_InitQuadWithData(GlobalContext* ctxt, ColQuad* quad, Actor* actor, ColQuadInit* init);
s32 Collision_InitQuad(GlobalContext* ctxt, ColQuad* quad, Actor* actor, ColQuadInit* init);
s32 Collision_ResetQuadForAT(GlobalContext* ctxt, ColQuad* quad);
s32 Collision_ResetQuadForAC(GlobalContext* param_1, ColQuad* quad);
s32 Collision_ResetQuadForOT(GlobalContext* ctxt, ColCommon* quad);
// void func_800E20A4(void);
s32 Collision_InitSphereDefault(GlobalContext* ctxt, ColSphere* sphere);
s32 Collision_FiniSphere(GlobalContext* pzParm1, ColSphere* sphere);
s32 Collision_InitSphereWithData(GlobalContext* ctxt, ColSphere* sphere, Actor* actor, ColSphereInit* info);
s32 Collision_InitSphere(GlobalContext* ctxt, ColSphere* sphere, Actor* actor, ColSphereInit* init);
s32 Collision_ResetSphereForAT(GlobalContext* ctxt, ColSphere* sphere);
s32 Collision_ResetSphereForAC(GlobalContext* ctxt, ColSphere* sphere);
s32 Collision_ResetSphereForOT(GlobalContext* ctxt, ColSphere* sphere);
// void func_800E2368(void);
// UNK_TYPE4 func_800E23B0(void);
// void func_800E23C4(void);
// void func_800E2408(void);
s32 func_800E2434(GlobalContext* ctxt, s32 param_2);
void Collision_Init(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void Collision_Fini(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void Collision_Reset(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void Collision_EnableEditMode(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void Collision_EnableAppendMode(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
s32 Collision_AddAT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* shape);
s32 Collision_AddIndexAT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* shape, s32 index);
s32 Collision_AddAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* shape);
s32 collision_AddIndexAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* shape, s32 index);
s32 Collision_AddOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* shape);
s32 Collision_AddIndexOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* shape, s32 index);
s32 Collision_AddGroup4(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* shape);
s32 Collision_CantBeToucherAC(ColBodyInfo* iParm1);
s32 Collision_CantBeBumperAC(ColBodyInfo* iParm1);
s32 Collision_ToucherIsExcluded(ColBodyInfo* toucher, ColBodyInfo* bumper);
// void func_800E2C08(void);
// void func_800E2C1C(void);
// void func_800E2D88(void);
// void func_800E2EF4(void);
// void func_800E2F30(void);
// void func_800E2F54(void);
// void func_800E2F78(void);
// void func_800E30C8(void);
void func_800E3168(GlobalContext* ctxt, ColCommon* toucher, ColBodyInfo* toucherBody, ColCommon* bumper, ColBodyInfo* bumperBody, Vec3f* param_6);
void func_800E3304(ColCommon* toucher, ColCommon* bumper);
s32 Collision_HandleCollisionATWithAC(GlobalContext* ctxt, ColCommon* toucher, ColBodyInfo* toucherBody, Vec3f* toucherLoc, ColCommon* bumper, ColBodyInfo* bumperBody, Vec3f* bumperLoc, Vec3f* param_8);
void Collision_TriCalcAvgPoint(ColTri* tri, Vec3f* avg);
void collision_quad_cal_avg_point(ColQuadParams* quad, Vec3f* avg);
void Collision_SphereGroupWithSphereGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColSphereGroup* bumpee);
void Collision_SphereGroupWithCylinderAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColCylinder* bumpee);
void Collision_SphereGroupWithTriGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColTriGroup* bumpee);
void Collision_SphereGroupWithQuadAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColQuad* bumpee);
void Collision_SphereGroupWithSphereAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColSphere* bumpee);
void Collision_CylinderWithSphereGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColSphereGroup* bumpee);
void Collision_CylinderWithCylinderAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColCylinder* bumpee);
void Collision_CylinderWithTriGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColTriGroup* bumpee);
void Collision_CylinderWithQuadAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColQuad* bumpee);
void Collision_CylinderWithSphereAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColSphere* bumpee);
void Collision_TriGroupWithSphereGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColTriGroup* toucher, ColSphereGroup* bumpee);
void Collision_TriGroupWithCylinderAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColTriGroup* toucher, ColCylinder* bumpee);
void Collision_TriGroupWithTriGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColTriGroup* toucher, ColTriGroup* bumpee);
void Collision_TriGroupWithQuad(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColTriGroup* toucher, ColQuad* bumpee);
void Collision_TriGroupWithSphereAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColTriGroup* toucher, ColSphere* bumpee);
void Collision_QuadWithSphereGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColQuad* toucher, ColSphereGroup* bumpee);
void Collision_QuadWithCylinderAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColQuad* toucher, ColCylinder* bumpee);
void Collision_QuadWithTriGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColQuad* toucher, ColTriGroup* bumpee);
void Collision_QuadWithQuadAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColQuad* toucher, ColQuad* bumpee);
void Collision_QuadWithSphereAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColQuad* toucher, ColSphere* bumpee);
void Collision_SphereWithSphereGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColSphereGroup* bumpee);
void Collision_SphereWithCylinderAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColCylinder* bumpee);
void Collision_SphereWithTriGroupAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColTriGroup* bumpee);
void Collision_SphereWithQuadAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColQuad* bumpee);
void Collision_SphereWithSphereAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColSphere* bumpee);
void func_800E60C0(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* spheres);
// void func_800E61A0(void);
// void func_800E6238(void);
// void func_800E6320(void);
void func_800E63B8(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* sphere);
void func_800E6450(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void Collision_CollideWithAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCommon* colObj);
void Collision_DoATWithAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
// void func_800E6724(void);
void Collision_HandleCollisionOTWithOT(GlobalContext* ctxt, ColCommon* toucher, ColBodyInfo* toucherBody, Vec3f* toucherLoc, ColCommon* bumper, ColBodyInfo* bumperBody, Vec3f* bumperLoc, f32 param_8);
void Collision_SphereGroupWithSphereGroupOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColSphereGroup* bumpee);
void Collision_SphereGroupWithCylinderOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColCylinder* bumpee);
void Collision_SphereGroupWithSphereOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphereGroup* toucher, ColSphere* bumpee);
void Collision_CylinderWithSphereGroupOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColSphereGroup* bumpee);
void Collision_CylinderWithCylinderOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColCylinder* bumpee);
void Collision_CylinderWithSphereOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColCylinder* toucher, ColSphere* bumpee);
void Collision_SphereWithSphereGroupOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColSphereGroup* bumpee);
void Collision_SphereWithCylinderOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColCylinder* bumpee);
void Collision_SphereWithSphereOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, ColSphere* toucher, ColSphere* bumpee);
// UNK_TYPE4 func_800E7264(ColCommon* iParm1);
// UNK_TYPE4 func_800E7288(ColCommon* piParm1, ColCommon* piParm2);
void Collision_DoOTWithOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void func_800E7494(CollisionCheckInfo* param_1);
void func_800E74DC(CollisionCheckInfo* param_1);
void func_800E7508(s32 param_1, UNK_PTR param_2);
void func_800E7530(CollisionCheckInfo* param_1, DamageTable* param_2, UNK_PTR param_3);
void func_800E755C(CollisionCheckInfo* puParm1, DamageTable* uParm2, UNK_PTR puParm3);
// void func_800E7590(void);
// void func_800E75C8(void);
// void func_800E77EC(void);
// void func_800E7894(void);
// void func_800E78B4(void);
// void func_800E7948(void);
// void func_800E7968(void);
void func_800E7988(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
// void func_800E7A48(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_800E7B54(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_800E7BCC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_800E7C64(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_800E7DA8(void);
s32 func_800E7DCC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Vec3f* param_3, Vec3f* param_4, Actor** param_5, s32 param_6);
void Collision_CylinderMoveToActor(Actor* actor, ColCylinder* cylinder);
void Collision_CylinderSetLoc(ColCylinder* cylinder, Vec3s* loc);
void Collision_QuadSetCoords(ColQuad* iParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, Vec3f* param_5);
void Collision_TriGroupSetCoordsAtIndex(ColTriGroup* tris, s32 index, Vec3f* pzParm3, Vec3f* pzParm4, Vec3f* param_5);
void Collision_InitTriParamsAtIndex(GlobalContext* ctxt, ColTriGroup* tris, s32 index, ColTriParamsInit* init);
// void func_800E7FDC(void);
// void func_800E8160(void);
// void func_800E823C(void);
// void func_800E8318(void);
// void func_800E8478(void);
// void func_800E85D4(UNK_TYPE4 param_1, Vec3f* param_2);
void func_800E8668(GlobalContext* globalCtx, Vec3f* arg2);
// void func_800E8690(void);
// void func_800E86C0(void);
// void func_800E86E0(UNK_TYPE4 param_1, Vec3f* param_2, UNK_TYPE4 param_3);
// void func_800E8784(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8);
DamageTable* DamageTable_Get(s32 index); // func_800E03A0
void DamageTable_Clear(DamageTable* damageTable); // func_800E03CC
f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, u32* effect);
f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac);
s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo);
s32 Collider_InitBase(GlobalContext* ctxt, Collider* collider);
s32 Collider_DestroyBase(GlobalContext* ctxt, Collider* collider);
s32 Collider_SetBaseToActor(GlobalContext* ctxt, Collider* collider, ColliderInitToActor* src);
s32 Collider_SetBaseType1(GlobalContext* ctxt, Collider* collider, Actor* actor, ColliderInitType1* src);
s32 Collider_SetBase(GlobalContext* ctxt, Collider* collider, Actor* actor, ColliderInit* src);
void Collider_ResetATBase(GlobalContext* ctxt, Collider* collider);
void Collider_ResetACBase(GlobalContext* ctxt, Collider* collider);
void Collider_ResetOCBase(GlobalContext* ctxt, Collider* collider);
s32 Collider_InitTouch(GlobalContext* ctxt, ColliderTouch* touch);
s32 Collider_DestroyTouch(GlobalContext* ctxt, ColliderTouch* touch);
s32 Collider_SetTouch(GlobalContext* ctxt, ColliderTouch* touch, ColliderTouchInit* src);
void Collider_ResetATInfoUnk(GlobalContext* ctxt, ColliderInfo* info);
s32 Collider_InitBump(GlobalContext* ctxt, ColliderBump* bump);
s32 Collider_DestroyBump(GlobalContext* ctxt, ColliderBump* bump);
s32 Collider_SetBump(GlobalContext* ctxt, ColliderBump* bump, ColliderBumpInit* src);
s32 Collider_InitInfo(GlobalContext* ctxt, ColliderInfo* info);
s32 Collider_DestroyInfo(GlobalContext* ctxt, ColliderInfo* info);
s32 Collider_SetInfo(GlobalContext* ctxt, ColliderInfo* info, ColliderInfoInit* src);
void Collider_ResetATInfo(GlobalContext* ctxt, ColliderInfo* info);
void Collider_ResetACInfo(GlobalContext* ctxt, ColliderInfo* info);
void Collider_ResetOCInfo(GlobalContext* ctxt, ColliderInfo* info);
s32 Collider_InitJntSphElementDim(GlobalContext* ctxt, ColliderJntSphElementDim* dim);
s32 Collider_DestroyJntSphElementDim(GlobalContext* ctxt, ColliderJntSphElementDim* dim);
s32 Collider_SetJntSphElementDim(GlobalContext* ctxt, ColliderJntSphElementDim* dest, ColliderJntSphElementDimInit* src);
s32 Collider_InitJntSphElement(GlobalContext* ctxt, ColliderJntSphElement* element);
s32 Collider_DestroyJntSphElement(GlobalContext* ctxt, ColliderJntSphElement* element);
s32 Collider_SetJntSphElement(GlobalContext* ctxt, ColliderJntSphElement* dest, ColliderJntSphElementInit* src);
s32 Collider_ResetJntSphElementAT(GlobalContext* ctxt, ColliderJntSphElement* collider);
s32 Collider_ResetJntSphElementAC(GlobalContext* ctxt, ColliderJntSphElement* collider);
s32 Collider_ResetJntSphElementOC(GlobalContext* ctxt, ColliderJntSphElement* collider);
s32 Collider_InitJntSph(GlobalContext* ctxt, ColliderJntSph* collider);
s32 Collider_FreeJntSph(GlobalContext* ctxt, ColliderJntSph* collider);
s32 Collider_DestroyJntSph(GlobalContext* ctxt, ColliderJntSph* collider);
s32 Collider_SetJntSphToActor(GlobalContext* ctxt, ColliderJntSph* collider, ColliderJntSphInitToActor* src);
s32 Collider_SetJntSphAllocType1(GlobalContext* ctxt, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInitType1* src);
s32 Collider_SetJntSph(GlobalContext* ctxt, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements);
s32 Collider_InitAndSetJntSph(GlobalContext* ctxt, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements);
s32 Collider_ResetJntSphAT(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetJntSphAC(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetJntSphOC(GlobalContext* ctxt, Collider* collider);
s32 Collider_InitCylinderDim(GlobalContext* ctxt, Cylinder16* dim);
s32 Collider_DestroyCylinderDim(GlobalContext* ctxt, Cylinder16* dim);
s32 Collider_SetCylinderDim(GlobalContext* ctxt, Cylinder16* dim, Cylinder16* src);
s32 Collider_InitCylinder(GlobalContext* ctxt, ColliderCylinder* collider);
s32 Collider_DestroyCylinder(GlobalContext* ctxt, ColliderCylinder* collider);
s32 Collider_SetCylinderToActor(GlobalContext* ctxt, ColliderCylinder* collider, ColliderCylinderInitToActor* src);
s32 Collider_SetCylinderType1(GlobalContext* ctxt, ColliderCylinder* collider, Actor* actor, ColliderCylinderInitType1* src);
s32 Collider_SetCylinder(GlobalContext* ctxt, ColliderCylinder* collider, Actor* actor, ColliderCylinderInit* src);
s32 Collider_InitAndSetCylinder(GlobalContext* ctxt, ColliderCylinder* collider, Actor* actor, ColliderCylinderInit* src);
s32 Collider_ResetCylinderAT(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetCylinderAC(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetCylinderOC(GlobalContext* ctxt, Collider* collider);
s32 Collider_InitTrisElementDim(GlobalContext* ctxt, TriNorm* dim);
s32 Collider_DestroyTrisElementDim(GlobalContext* ctxt, TriNorm* dim);
s32 Collider_SetTrisElementDim(GlobalContext* ctxt, TriNorm* dim, ColliderTrisElementDimInit* src);
s32 Collider_InitTrisElement(GlobalContext* ctxt, ColliderTrisElement* element);
s32 Collider_DestroyTrisElement(GlobalContext* ctxt, ColliderTrisElement* element);
s32 Collider_SetTrisElement(GlobalContext* ctxt, ColliderTrisElement* element, ColliderTrisElementInit* src);
s32 Collider_ResetTrisElementAT(GlobalContext* ctxt, ColliderTrisElement* element);
s32 Collider_ResetTrisElementAC(GlobalContext* ctxt, ColliderTrisElement* element);
s32 Collider_ResetTrisElementOC(GlobalContext* ctxt, ColliderTrisElement* element);
s32 Collider_InitTris(GlobalContext* ctxt, ColliderTris* tris);
s32 Collider_FreeTris(GlobalContext* ctxt, ColliderTris* tris);
s32 Collider_DestroyTris(GlobalContext* ctxt, ColliderTris* tris);
s32 Collider_SetTrisAllocType1(GlobalContext* ctxt, ColliderTris* tris, Actor* actor, ColliderTrisInitType1* src);
s32 Collider_SetTris(GlobalContext* ctxt, ColliderTris* triGroup, Actor* actor, ColliderTrisInit* src, ColliderTrisElement* tris);
s32 Collider_InitAndSetTris(GlobalContext* ctxt, ColliderTris* tris, Actor* actor, ColliderTrisInit* src, ColliderTrisElement* elements);
s32 Collider_ResetTrisAT(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetTrisAC(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetTrisOC(GlobalContext* ctxt, Collider* collider);
s32 Collider_InitQuadDim(GlobalContext* ctxt, ColliderQuadDim* dim);
s32 Collider_DestroyQuadDim(GlobalContext* ctxt, ColliderQuadDim* dim);
s32 Collider_ResetQuadACDist(GlobalContext* ctxt, ColliderQuadDim* dim);
void Collider_SetQuadMidpoints(ColliderQuadDim* dim);
s32 Collider_SetQuadDim(GlobalContext* ctxt, ColliderQuadDim* dim, ColliderQuadDimInit* init);
s32 Collider_InitQuad(GlobalContext* ctxt, ColliderQuad* collider);
s32 Collider_DestroyQuad(GlobalContext* ctxt, ColliderQuad* collider);
s32 Collider_SetQuadType1(GlobalContext* ctxt, ColliderQuad* collider, Actor* actor, ColliderQuadInitType1* src);
s32 Collider_SetQuad(GlobalContext* ctxt, ColliderQuad* collider, Actor* actor, ColliderQuadInit* src);
s32 Collider_InitAndSetQuad(GlobalContext* ctxt, ColliderQuad* collider, Actor* actor, ColliderQuadInit* src);
s32 Collider_ResetQuadAT(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetQuadAC(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetQuadOC(GlobalContext* ctxt, Collider* collider);
s32 Collider_QuadSetNearestAC(GlobalContext* ctxt, ColliderQuad* quad, Vec3f* hitPos);
s32 Collider_InitSphere(GlobalContext* ctxt, ColliderSphere* collider);
s32 Collider_DestroySphere(GlobalContext* ctxt, ColliderSphere* collider);
s32 Collider_SetSphere(GlobalContext* ctxt, ColliderSphere* collider, Actor* actor, ColliderSphereInit* src);
s32 Collider_InitAndSetSphere(GlobalContext* ctxt, ColliderSphere* collider, Actor* actor, ColliderSphereInit* src);
s32 Collider_ResetSphereAT(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetSphereAC(GlobalContext* ctxt, Collider* collider);
s32 Collider_ResetSphereOC(GlobalContext* ctxt, Collider* collider);
s32 Collider_InitLine(GlobalContext* ctxt, OcLine* line);
s32 Collider_DestroyLine(GlobalContext* ctxt, OcLine* line);
s32 Collider_SetLinePoints(GlobalContext* ctxt, OcLine* line, Vec3f* a, Vec3f* b);
s32 Collider_SetLine(GlobalContext* ctxt, OcLine* line, OcLine* src);
s32 Collider_ResetLineOC(GlobalContext* ctxt, OcLine* line);
void CollisionCheck_InitContext(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void CollisionCheck_DestroyContext(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void CollisionCheck_ClearContext(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void CollisionCheck_EnableSAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void CollisionCheck_DisableSAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
s32 CollisionCheck_SetAT(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
s32 CollisionCheck_SetAT_SAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
s32 CollisionCheck_SetAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
s32 CollisionCheck_SetAC_SAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
s32 CollisionCheck_SetOC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
s32 CollisionCheck_SetOC_SAC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider, s32 index);
s32 CollisionCheck_SetOCLine(GlobalContext* ctxt, CollisionCheckContext* colCtxt, OcLine* line);
s32 CollisionCheck_SkipTouch(ColliderInfo* info);
s32 CollisionCheck_SkipBump(ColliderInfo* info);
s32 CollisionCheck_NoSharedFlags(ColliderInfo* toucher, ColliderInfo* bumper);
void CollisionCheck_NoBlood(GlobalContext* ctxt, Collider* collider, Vec3f* v);
void CollisionCheck_BlueBlood(GlobalContext* ctxt, Collider* collider, Vec3f* v);
void CollisionCheck_GreenBlood(GlobalContext* ctxt, Collider* collider, Vec3f* v);
void CollisionCheck_WaterBurst(GlobalContext* ctxt, Collider* collider, Vec3f* v);
void CollisionCheck_RedBlood(GlobalContext* ctxt, Collider* collider, Vec3f* v);
void CollisionCheck_RedBloodUnused(GlobalContext* ctxt, Collider* collider, Vec3f* v);
void CollisionCheck_HitSolid(GlobalContext* ctxt, ColliderInfo* info, Collider* collider, Vec3f* hitPos);
s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo);
void CollisionCheck_HitEffects(GlobalContext* ctxt, Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, Vec3f* hitPos);
void CollisionCheck_SetBounce(Collider* at, Collider* ac);
s32 CollisionCheck_SetATvsAC(GlobalContext* ctxt, Collider* at, ColliderInfo* atInfo, Vec3f* atPos, Collider* ac, ColliderInfo* acInfo, Vec3f* acPos, Vec3f* hitPos);
void CollisionCheck_TrisAvgPoint(ColliderTrisElement* tri, Vec3f* avg);
void CollisionCheck_QuadAvgPoint(ColliderQuad* quad, Vec3f* avg);
void CollisionCheck_AC_JntSphVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_JntSphVsCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_JntSphVsTris(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_JntSphVsQuad(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_JntSphVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_CylVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_CylVsCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_CylVsTris(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_CylVsQuad(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_CylVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_TrisVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_TrisVsCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_TrisVsTris(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_TrisVsQuad(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_TrisVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_QuadVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_QuadVsCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_QuadVsTris(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_QuadVsQuad(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_QuadVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_SphereVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_SphereVsCylinder(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_SphereVsTris(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_SphereVsQuad(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_AC_SphereVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC);
void CollisionCheck_SetJntSphHitFX(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_SetCylHitFX(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_SetTrisHitFX(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_SetQuadHitFX(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_SetSphereHitFX(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_SetHitEffects(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void CollisionCheck_AC(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* colAT);
void CollisionCheck_AT(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
s32 CollisionCheck_GetMassType(u8 mass);
void CollisionCheck_SetOCvsOC(GlobalContext* ctxt, Collider* left, ColliderInfo* leftInfo, Vec3f* leftPos, Collider* right, ColliderInfo* rightInfo, Vec3f* rightPos, f32 overlap);
void CollisionCheck_OC_JntSphVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_JntSphVsCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_JntSphVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_CylVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_CylVsCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_CylVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_SphereVsJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_SphereVsCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
void CollisionCheck_OC_SphereVsSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* l, Collider* r);
s32 CollisionCheck_SkipOC(Collider* collider);
s32 CollisionCheck_Incompatible(Collider* left, Collider* right);
void CollisionCheck_OC(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
void CollisionCheck_InitInfo(CollisionCheckInfo* info);
void CollisionCheck_ResetDamage(CollisionCheckInfo* info);
void CollisionCheck_SetInfoNoDamageTable(CollisionCheckInfo* info, CollisionCheckInfoInit* init);
void CollisionCheck_SetInfo(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit* init);
void CollisionCheck_SetInfo2(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit2* init);
void CollisionCheck_SetInfoGetDamageTable(CollisionCheckInfo* info, s32 index, CollisionCheckInfoInit2* init);
void CollisionCheck_ApplyDamage(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider, ColliderInfo* info);
void CollisionCheck_ApplyDamageJntSph(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_ApplyDamageCyl(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_ApplyDamageTris(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_ApplyDamageQuad(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_ApplyDamageSphere(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Collider* collider);
void CollisionCheck_Damage(GlobalContext* ctxt, CollisionCheckContext* colCtxt);
s32 CollisionCheck_LineOC_JntSph(GlobalContext* globalCtx, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
s32 CollisionCheck_LineOC_Cyl(GlobalContext* globalCtx, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
s32 CollisionCheck_LineOC_Sphere(GlobalContext* globalCtx, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b);
s32 CollisionCheck_LineOC(GlobalContext* globalCtx, CollisionCheckContext* colChkCtx, Vec3f* a, Vec3f* b, Actor** exclusions, s32 numExclusions);
s32 CollisionCheck_LineOCCheckAll(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b);
s32 CollisionCheck_LineOCCheck(GlobalContext* ctxt, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b, Actor** exclusions, s32 numExclusions);
void Collider_UpdateCylinder(Actor* actor, ColliderCylinder* collider);
void Collider_SetCylinderPosition(ColliderCylinder* collider, Vec3s* pos);
void Collider_SetQuadVertices(ColliderQuad* collider, Vec3f* a, Vec3f* b, Vec3f* c, Vec3f* d);
void Collider_SetTrisVertices(ColliderTris* collider, s32 index, Vec3f* a, Vec3f* b, Vec3f* c);
void Collider_SetTrisDim(GlobalContext* ctxt, ColliderTris* collider, s32 index, ColliderTrisElementDimInit* init);
void Collider_UpdateSpheres(s32 limb, ColliderJntSph* collider);
void Collider_UpdateSpheresElement(ColliderJntSph* collider, s32 index, Actor* actor);
void Collider_UpdateSphere(s32 limb, ColliderSphere* collider);
void CollisionCheck_SpawnRedBlood(GlobalContext* ctxt, Vec3f* v);
void CollisionCheck_SpawnWaterDroplets(GlobalContext* ctxt, Vec3f* v);
void CollisionCheck_SpawnShieldParticles(GlobalContext* ctxt, Vec3f* v);
void CollisionCheck_SpawnShieldParticlesMetal(GlobalContext* ctxt, Vec3f* v);
void CollisionCheck_SpawnShieldParticlesMetalSound(GlobalContext* ctxt, Vec3f* v, Vec3f* pos);
void CollisionCheck_SpawnShieldParticlesMetal2(GlobalContext* ctxt, Vec3f* v);
void CollisionCheck_SpawnShieldParticlesWood(GlobalContext* ctxt, Vec3f* v, Vec3f* pos);
s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* actorPos, Vec3f* itemPos, Vec3f* itemProjPos, Vec3f* out1, Vec3f* out2);
void func_800E8EA0(GlobalContext* ctxt, Actor* actor, u16 param_3);
s32 nop_800E8ED0(UNK_TYPE4 param_1);
void nop_800E8EE0(UNK_TYPE4 param_1);
@@ -2268,7 +2268,7 @@ s32 func_801240C8(ActorPlayer* player);
// void func_80125D4C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_801262C8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_801263FC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
void func_80126440(GlobalContext* globalCtx, ColCommon* param_2, s32* param_3, Vec3f* param_4, Vec3f* param_5);
void func_80126440(GlobalContext* globalCtx, Collider* param_2, s32* param_3, Vec3f* param_4, Vec3f* param_5);
// void func_801265C8(void);
// void func_8012669C(void);
// void func_80126808(void);
@@ -2547,7 +2547,7 @@ void SkelAnime_DrawSV(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbD
void func_80134148(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, Vec3s* limbDrawTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, UnkActorDraw unkDraw, Actor* actor, RSPMatrix** mtx);
void func_801343C0(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDrawTable, s32 dListCount, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, UnkActorDraw unkDraw, Actor* actor);
void SkelAnime_AnimateFrame(AnimationHeader* animationSeg, s32 currentFrame, s32 limbCount, Vec3s* dst);
s16 SkelAnime_GetTotalFrames(GenericAnimationHeader *animationSeg);
s16 SkelAnime_GetTotalFrames(GenericAnimationHeader* animationSeg);
s16 SkelAnime_GetFrameCount(GenericAnimationHeader* animationSeg);
Gfx* SkelAnime_Draw2Limb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, Vec3s* limbDrawTable, OverrideLimbDraw2 overrideLimbDraw, PostLimbDraw2 postLimbDraw, Actor* actor, Gfx* gfx);
Gfx* SkelAnime_Draw2(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDrawTable, OverrideLimbDraw2 overrideLimbDraw, PostLimbDraw2 postLimbDraw, Actor* actor, Gfx* gfx);
@@ -2559,8 +2559,8 @@ s16 SkelAnime_GetTotalFrames2(GenericAnimationHeader* animationSeg);
s16 SkelAnime_GetFrameCount2(GenericAnimationHeader* animationSeg);
void SkelAnime_InterpolateVec3s(s32 limbCount, Vec3s* dst, Vec3s* vec2, Vec3s* vec3, f32 unkf);
void SkelAnime_AnimationCtxReset(AnimationContext* animationCtx);
void func_801358D4(GlobalContext *globalCtx);
void func_801358F4(GlobalContext *globalCtx);
void func_801358D4(GlobalContext* globalCtx);
void func_801358F4(GlobalContext* globalCtx);
AnimationEntry* SkelAnime_NextEntry(AnimationContext* animationCtx, AnimationType type);
void SkelAnime_LoadLinkAnimetion(GlobalContext* globalCtx, LinkAnimetionEntry* linkAnimetionSeg, s32 frame, s32 limbCount, void* ram);
void SkelAnime_LoadAnimationType1(GlobalContext* globalCtx, s32 vecCount, Vec3s* dst, Vec3s* src);
@@ -3336,28 +3336,28 @@ f32 Math3D_NormalizedSignedDistanceFromPlane(f32 normX, f32 normY, f32 normZ, f3
// void func_8017D220(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_8017D2FC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8);
// void func_8017D404(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11);
void Math3D_TriSetCoords(ColTriParams* tri, Vec3f* pointA, Vec3f* pointB, Vec3f* pointC);
u32 Math3D_IsPointInSphere(ColSphereCollisionInfo* sphere, Vec3f* point);
void Math3D_TriSetCoords(TriNorm* tri, Vec3f* pointA, Vec3f* pointB, Vec3f* pointC);
u32 Math3D_IsPointInSphere(Sphere16* sphere, Vec3f* point);
// void func_8017D668(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9);
// void func_8017D7C0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7);
// void func_8017D814(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_8017D91C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_8017DA24(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
s32 Math3D_ColSphereLineSeg(ColSphereCollisionInfo* sphere, LineSegment* line);
void func_8017DD34(ColSphereCollisionInfo* sphere, ColTriParams* tri, Vec3f* pfParm3);
s32 Math3D_ColSphereTri(ColSphereCollisionInfo* sphere, ColTriParams* tri, Vec3f* uParm3);
s32 Math3D_ColSphereLineSeg(Sphere16* sphere, LineSegment* line);
void func_8017DD34(Sphere16* sphere, TriNorm* tri, Vec3f* pfParm3);
s32 Math3D_ColSphereTri(Sphere16* sphere, TriNorm* tri, Vec3f* uParm3);
// void func_8017E294(void);
// void func_8017E350(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
s32 Math3D_ColCylinderTri(ColCylinderParams* cylinder, ColTriParams* tri, Vec3f* pzParm3);
s32 Math3D_ColCylinderTri(Cylinder16* cylinder, TriNorm* tri, Vec3f* pzParm3);
// void func_8017F1A0(void);
s32 Math3D_ColSphereSphere(ColSphereCollisionInfo* sphere1, ColSphereCollisionInfo* sphere2);
s32 Math3D_ColSphereSphereIntersect(ColSphereCollisionInfo* sphere1, ColSphereCollisionInfo* sphere2, f32* intersectAmount);
s32 Math3D_ColSphereSphereIntersectAndDistance(ColSphereCollisionInfo* sphere1, ColSphereCollisionInfo* sphere2, f32* intersectAmount, f32* dist);
s32 Math3D_ColSphereCylinderDistance(ColSphereCollisionInfo* sphere, ColCylinderParams* cylinder, f32* dist);
s32 Math3D_ColSphereCylinderDistanceAndAmount(ColSphereCollisionInfo* sphere, ColCylinderParams* cylinder, f32* dist, f32* intersectAmount);
s32 Math3D_ColCylinderCylinderAmount(ColCylinderParams* cylinder1, ColCylinderParams* cylinder2, f32* intersectAmount);
s32 Math3D_ColCylinderCylinderAmountAndDistance(ColCylinderParams* cylinder1, ColCylinderParams* cylinder2, f32* intersectAmount, f32* dist);
s32 Math3d_ColTriTri(ColTriParams* tri1, ColTriParams* tri2, Vec3f* uParm3);
s32 Math3D_ColSphereSphere(Sphere16* sphere1, Sphere16* sphere2);
s32 Math3D_ColSphereSphereIntersect(Sphere16* sphere1, Sphere16* sphere2, f32* intersectAmount);
s32 Math3D_ColSphereSphereIntersectAndDistance(Sphere16* sphere1, Sphere16* sphere2, f32* intersectAmount, f32* dist);
s32 Math3D_ColSphereCylinderDistance(Sphere16* sphere, Cylinder16* cylinder, f32* dist);
s32 Math3D_ColSphereCylinderDistanceAndAmount(Sphere16* sphere, Cylinder16* cylinder, f32* dist, f32* intersectAmount);
s32 Math3D_ColCylinderCylinderAmount(Cylinder16* cylinder1, Cylinder16* cylinder2, f32* intersectAmount);
s32 Math3D_ColCylinderCylinderAmountAndDistance(Cylinder16* cylinder1, Cylinder16* cylinder2, f32* intersectAmount, f32* dist);
s32 Math3d_ColTriTri(TriNorm* tri1, TriNorm* tri2, Vec3f* uParm3);
// void func_8017F9C0(void);
// void func_8017FA34(void);
// void func_8017FAA8(void);
@@ -3833,7 +3833,7 @@ void func_8019E014(void);
void play_sound(u16 param_1);
void func_8019F128(u16 param_1);
// void func_8019F170(void);
void func_8019F1C0(UNK_TYPE4 param_1, u16 param_2);
void func_8019F1C0(Vec3f* pos, u16 sfxId);
// void func_8019F208(void);
// void func_8019F230(void);
// void func_8019F258(void);
+62 -79
View File
@@ -358,11 +358,11 @@ extern DmaEntry dmadata[1568];
// extern UNK_TYPE1 D_801AAAB0;
// extern UNK_TYPE1 D_801AD370;
extern ActorInit En_A_Obj_InitVars;
extern ColCylinderInit enAObjCylinderInit;
extern ColliderCylinderInit enAObjCylinderInit;
extern InitChainEntry enAObjInitVar;
extern u32 enAObjDisplayLists[2];
extern ActorInit En_Item00_InitVars;
extern ColCylinderInit enItem00CylinderInit;
extern ColliderCylinderInit enItem00CylinderInit;
extern InitChainEntry enItem00InitVars[1];
// extern UNK_TYPE1 D_801ADF10;
// extern UNK_TYPE1 D_801ADF14;
@@ -856,39 +856,32 @@ extern camera_update_func cameraUpdateFuncs[71];
// extern UNK_TYPE4 D_801B9ED4;
// extern UNK_TYPE4 D_801B9F04;
// extern UNK_TYPE2 D_801B9F0C;
// extern UNK_TYPE4 D_801B9F10;
extern s800E03A0 D_801B9F20[23];
extern f32 gDamageMultipliers[16];
extern ColCommon defaultColCommon;
extern ColTouch defaultColTouch;
extern ColBump defaultColBump;
extern ColBodyInfo defaultColBodyInfo;
extern ColSphereParams defaultColSphereInfo;
extern ColCylinderParams defaultColCylinderInfo;
extern ColTriParams defaultColTriParams;
extern ColQuadParams defaultColQuadParams;
// extern UNK_TYPE1 D_801BA32C;
extern collision_add_func collisionAddATFuncs[5];
extern collision_add_func collisionAddACFuncs[5];
extern collision_add_func collisionAddOTFuncs[5];
extern UNK_PTR D_801BA374;
// extern UNK_TYPE1 D_801BA38C;
// extern UNK_TYPE1 D_801BA38D;
extern UNK_PTR D_801BA3A8;
extern collision_func collisionFuncTableATwithAC[25];
extern collision_func collisionFuncTableOTwithOT[25];
extern CollisionCheckInfo D_801BA484;
extern UNK_PTR D_801BA4A0;
// extern UNK_TYPE1 D_801BA4B4;
extern EffShieldParticleInit D_801BA4C8;
// extern UNK_TYPE1 D_801BA4F6;
// extern UNK_TYPE1 D_801BA4F8;
// extern UNK_TYPE1 D_801BA4FA;
extern EffShieldParticleInit D_801BA508;
// extern UNK_TYPE1 D_801BA536;
// extern UNK_TYPE1 D_801BA538;
// extern UNK_TYPE1 D_801BA53A;
// extern UNK_TYPE1 D_801BA550;
extern UNK_TYPE4 D_801B9F10;
extern DamageTable sDamageTablePresets[23];
extern f32 damageMultipliers[16];
extern Collider defaultCollider;
extern ColliderTouch defaultColliderTouch;
extern ColliderBump defaultColliderBump;
extern ColliderInfo defaultColliderInfo;
extern ColliderJntSphElementDim defaultColliderJntSphElementDim;
extern Cylinder16 defaultColliderCylinderDim;
extern TriNorm defaultColliderTrisElementDim;
extern ColliderQuadDim defaultColliderQuadDim;
extern Vec3f defaultLinePoint;
extern ColChkResetFunc sATResetFuncs[COLSHAPE_MAX];
extern ColChkResetFunc sACResetFuncs[COLSHAPE_MAX];
extern ColChkResetFunc sOCResetFuncs[COLSHAPE_MAX];
extern ColChkBloodFunc sBloodFuncs[6];
extern HitInfo sHitInfo[14];
extern ColChkApplyFunc sColChkApplyFuncs[COLSHAPE_MAX];
extern ColChkVsFunc sACVsFuncs[COLSHAPE_MAX][COLSHAPE_MAX];
extern ColChkVsFunc sOCVsFuncs[COLSHAPE_MAX][COLSHAPE_MAX];
extern CollisionCheckInfo defaultColChkInfo;
extern ColChkApplyFunc sApplyDamageFuncs[COLSHAPE_MAX];
extern ColChkLineFunc sOCLineCheckFuncs[COLSHAPE_MAX];
extern EffShieldParticleInit shieldParticleInitMetal;
extern EffShieldParticleInit shieldParticleInitWood;
extern UNK_TYPE1 D_801BA550;
// extern UNK_TYPE1 D_801BA750;
// extern UNK_TYPE1 D_801BA790;
// extern UNK_TYPE1 D_801BA7F0;
@@ -940,7 +933,7 @@ extern Actor* actorCutsceneCurrentCutsceneActor;
extern GlobalContext* actorCutscenesGlobalCtxt;
extern s16 actorCutsceneReturnCamera;
extern s16 D_801BD8C6;
extern ColCylinderInit fireObjCollisionInit;
extern ColliderCylinderInit fireObjCollisionInit;
extern FireObjLightParams D_801BD8FC[2];
extern GameStateOverlay initialGameStateInfo;
extern GameStateOverlay D_801BD940;
@@ -3866,8 +3859,8 @@ extern f32 D_801EDB98;
extern f32 D_801EDB9C;
extern f32 D_801EDBA0;
// extern UNK_TYPE1 D_801EDBA4;
extern ColSphereCollisionInfo D_801EDBA8;
extern ColTriParams D_801EDBB0;
extern Sphere16 D_801EDBA8;
extern TriNorm D_801EDBB0;
// extern UNK_TYPE1 D_801EDBD4;
// extern UNK_TYPE1 D_801EDBD8;
// extern UNK_TYPE1 D_801EDBDC;
@@ -3894,54 +3887,44 @@ extern s16 D_801EDBF0;
// extern UNK_TYPE1 D_801EDDE0;
// extern UNK_TYPE1 D_801EDDF0;
extern Vec3f D_801EDE00;
// extern UNK_TYPE1 D_801EDE10;
extern Vec3f D_801EDE10;
extern Vec3f D_801EDE20;
// extern UNK_TYPE1 D_801EDE30;
// extern UNK_TYPE1 D_801EDE40;
// extern UNK_TYPE1 D_801EDE78;
// extern UNK_TYPE1 D_801EDEB0;
// extern UNK_TYPE1 D_801EDEBC;
// extern UNK_TYPE1 D_801EDEC8;
// extern UNK_TYPE1 D_801EDF00;
// extern UNK_TYPE1 D_801EDF38;
// extern UNK_TYPE1 D_801EDF48;
// extern UNK_TYPE1 D_801EDF58;
// extern UNK_TYPE1 D_801EDF90;
// extern UNK_TYPE1 D_801EDFC8;
// extern UNK_TYPE1 D_801EDFD4;
// extern UNK_TYPE1 D_801EDFE0;
// extern UNK_TYPE1 D_801EDFF0;
// extern UNK_TYPE1 D_801EE000;
// extern UNK_TYPE1 D_801EE038;
// extern UNK_TYPE1 D_801EE070;
// extern UNK_TYPE1 D_801EE0A4;
// extern UNK_TYPE1 D_801EE0D8;
// extern UNK_TYPE1 D_801EE0E8;
// extern UNK_TYPE1 D_801EE11C;
// extern UNK_TYPE1 D_801EE150;
// extern UNK_TYPE1 D_801EE188;
// extern UNK_TYPE1 D_801EE1C0;
// extern UNK_TYPE1 D_801EE1C4;
// extern UNK_TYPE1 D_801EE1C8;
// extern UNK_TYPE1 D_801EE1D0;
// extern UNK_TYPE1 D_801EE1D4;
// extern UNK_TYPE1 D_801EE1D8;
// extern UNK_TYPE1 D_801EE1E0;
// extern UNK_TYPE1 D_801EE1E4;
// extern UNK_TYPE1 D_801EE1E8;
// extern UNK_TYPE1 D_801EE1F0;
extern Vec3f D_801EDE30;
extern TriNorm D_801EDE40;
extern TriNorm D_801EDE78;
extern LineSegment D_801EDEB0;
extern TriNorm D_801EDEC8;
extern TriNorm D_801EDF00;
extern Vec3f D_801EDF38;
extern Vec3f D_801EDF48;
extern TriNorm D_801EDF58;
extern TriNorm D_801EDF90;
extern LineSegment D_801EDFC8;
extern Vec3f D_801EDFE0;
extern Vec3f D_801EDFF0;
extern TriNorm D_801EE000;
extern TriNorm D_801EE038;
extern TriNorm D_801EE070[2];
extern Vec3f D_801EE0D8;
extern TriNorm D_801EE0E8[2];
extern TriNorm D_801EE150;
extern TriNorm D_801EE188;
extern Vec3f D_801EE1C0;
extern Vec3f D_801EE1D0;
extern Vec3f D_801EE1E0;
extern Vec3f D_801EE1F0;
// extern UNK_TYPE1 D_801EE1F4;
// extern UNK_TYPE1 D_801EE1F8;
extern EffSparkParams D_801EE200;
extern ColTriParams D_801EE6C8;
extern ColTriParams D_801EE700;
extern TriNorm D_801EE6C8;
extern TriNorm D_801EE700;
extern EffSparkParams D_801EE738;
extern EffSparkParams D_801EEC00;
extern EffSparkParams D_801EF0C8;
// extern UNK_TYPE1 D_801EF590;
// extern UNK_TYPE1 D_801EF5C8;
extern ColTriParams D_801EF600;
extern ColTriParams D_801EF638;
extern TriNorm D_801EF590;
extern TriNorm D_801EF5C8;
extern TriNorm D_801EF600;
extern TriNorm D_801EF638;
// extern UNK_TYPE1 D_801EF66D;
extern SaveContext gSaveContext;
// extern UNK_TYPE2 D_801F3F38;
+16 -23
View File
@@ -446,10 +446,6 @@ typedef void(*osCreateThread_func)(void*);
typedef void*(*printf_func)(void*, char*, size_t);
typedef struct {
/* 0x00 */ UNK_TYPE1 pad0[0x20];
} s800E03A0; // size = 0x20
typedef struct {
/* 0x000 */ OSThread unk0;
/* 0x1B0 */ s8 argCount;
@@ -627,11 +623,6 @@ typedef struct {
/* 0x12 */ OSContPad rel; // X/Y store adjusted
} Input; // size = 0x18
typedef struct {
/* 0x00 */ Vec3f a;
/* 0x0C */ Vec3f b;
} LineSegment; // size = 0x18
// Permanent save context, kept in regular save files
typedef struct {
/* 0x0000 */ u32 entranceIndex; // bits 0-3 : offset; 4-8: spawn index; 9-15: scene index
@@ -1264,6 +1255,12 @@ typedef struct AudioThreadStruct AudioThreadStruct;
typedef struct GlobalContext GlobalContext;
typedef s32 (*ColChkResetFunc)(GlobalContext*, Collider*);
typedef void (*ColChkBloodFunc)(GlobalContext*, Collider*, Vec3f*);
typedef void (*ColChkApplyFunc)(GlobalContext*, CollisionCheckContext*, Collider*);
typedef void (*ColChkVsFunc)(GlobalContext*, CollisionCheckContext*, Collider*, Collider*);
typedef s32 (*ColChkLineFunc)(GlobalContext*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*);
typedef struct {
/* 0x0 */ GlobalContext* ctxt;
/* 0x4 */ s32 type; // bitfield, highest set bit determines type
@@ -1271,10 +1268,6 @@ typedef struct {
/* 0xA */ s16 state; // 0 - stopped, 1 - active, 2 - setup
} Quake2Context; // size = 0xC
typedef s32(*collision_add_func)(GlobalContext*, ColCommon*);
typedef void(*collision_func)(GlobalContext*, CollisionCheckContext*, ColCommon*, ColCommon*);
typedef void(*cutscene_update_func)(GlobalContext* ctxt, CutsceneContext* cCtxt);
typedef void(*draw_func)(GlobalContext* ctxt, s16 index);
@@ -1526,7 +1519,7 @@ struct FireObj {
/* 0x28 */ u8 flags; // bit 0 - ?, bit 1 - ?
/* 0x29 */ UNK_TYPE1 pad29[0x1];
/* 0x2A */ s16 ignitionDelay;
/* 0x2C */ ColCylinder collision;
/* 0x2C */ ColliderCylinder collision;
/* 0x78 */ FireObjLight light;
}; // size = 0x8B
@@ -1687,8 +1680,8 @@ typedef struct {
typedef struct {
/* 0x000 */ Actor base;
/* 0x144 */ ColQuad unk144;
/* 0x1C4 */ ColQuad unk1C4;
/* 0x144 */ ColliderQuad unk144;
/* 0x1C4 */ ColliderQuad unk1C4;
/* 0x244 */ Vec3f unk244;
/* 0x250 */ f32 unk250;
/* 0x254 */ f32 unk254;
@@ -1711,9 +1704,9 @@ struct ActorEnBji01 {
struct ActorEnBom {
/* 0x000 */ Actor base;
/* 0x144 */ ColCylinder unk144;
/* 0x190 */ ColSphereGroup unk190;
/* 0x1B0 */ ColSphereGroupElement unk1B0[1];
/* 0x144 */ ColliderCylinder unk144;
/* 0x190 */ ColliderJntSph unk190;
/* 0x1B0 */ ColliderJntSphElement unk1B0[1];
/* 0x1F0 */ s16 unk1F0;
/* 0x1F2 */ UNK_TYPE1 pad1F2[0x6];
/* 0x1F8 */ u8 unk1F8;
@@ -1741,7 +1734,7 @@ struct ActorEnFirefly {
/* 0x2EC */ f32 unk2EC;
/* 0x2F0 */ f32 unk2F0;
/* 0x2F4 */ UNK_TYPE1 pad2F4[0x28];
/* 0x31C */ ColSphere collision;
/* 0x31C */ ColliderSphere collision;
}; // size = 0x374
struct ActorEnTest {
@@ -1771,8 +1764,8 @@ typedef struct {
struct ActorObjBell {
/* 0x000 */ Actor base;
/* 0x144 */ UNK_TYPE1 pad144[0x18];
/* 0x15C */ ColSphere unk15C;
/* 0x1B4 */ ColSphere unk1B4;
/* 0x15C */ ColliderSphere unk15C;
/* 0x1B4 */ ColliderSphere unk1B4;
/* 0x20C */ UNK_TYPE1 pad20C[0x2];
/* 0x20E */ s16 unk20E;
/* 0x210 */ UNK_TYPE1 pad210[0x4];
@@ -1782,7 +1775,7 @@ struct ActorObjBell {
struct ActorBgIknvObj {
/* 0x000 */ DynaPolyActor bg;
/* 0x15C */ ColCylinder collision;
/* 0x15C */ ColliderCylinder collision;
/* 0x1A8 */ u32 displayListAddr;
/* 0x1AC */ ActorFunc updateFunc;
}; // size = 0x1B0
+35 -18
View File
@@ -6,6 +6,9 @@
#include <z64collision_check.h>
#include <unk.h>
#define MASS_IMMOVABLE 0xFF // Cannot be pushed by OC collisions
#define MASS_HEAVY 0xFE // Can only be pushed by OC collisions with IMMOVABLE and HEAVY objects.
struct Actor;
struct GlobalContext;
struct LightMapper;
@@ -19,9 +22,38 @@ typedef struct {
} PosRot; // size = 0x14
typedef struct {
/* 0x00 */ u8 table[32];
/* 0x00 */ u8 attack[32];
} DamageTable; // size = 0x20
typedef struct {
/* 0x00 */ u8 health;
/* 0x02 */ s16 cylRadius;
/* 0x04 */ s16 cylHeight;
/* 0x06 */ u8 mass;
} CollisionCheckInfoInit;
typedef struct {
/* 0x00 */ u8 health;
/* 0x02 */ s16 cylRadius;
/* 0x04 */ s16 cylHeight;
/* 0x06 */ s16 cylYShift;
/* 0x08 */ u8 mass;
} CollisionCheckInfoInit2;
typedef struct {
/* 0x00 */ DamageTable* damageTable;
/* 0x04 */ Vec3f displacement;
/* 0x10 */ s16 cylRadius;
/* 0x12 */ s16 cylHeight;
/* 0x14 */ s16 cylYShift;
/* 0x16 */ u8 mass;
/* 0x17 */ u8 health;
/* 0x18 */ u8 damage;
/* 0x19 */ u8 damageEffect;
/* 0x1A */ u8 atHitEffect;
/* 0x1B */ u8 acHitEffect;
} CollisionCheckInfo; // size = 0x1C
typedef struct {
/* 0x00 */ s32 unk0;
/* 0x04 */ s32 unk4;
@@ -43,21 +75,6 @@ typedef struct {
/* 0x3A */ s16 unk3A;
} ActorEnTest20C; // size = 0x3C
// Related to collision?
typedef struct {
/* 0x00 */ DamageTable* damageTable;
/* 0x04 */ Vec3f displacement; // Amount to correct velocity (0x5C) by when colliding into a body
/* 0x10 */ s16 cylRadius; // Used for various purposes
/* 0x12 */ s16 cylHeight; // Used for various purposes
/* 0x14 */ s16 cylYShift; // Unused. Purpose inferred from Cylinder16 and CollisionCheck_CylSideVsLineSeg
/* 0x16 */ u8 mass; // Used to compute displacement for OC collisions
/* 0x17 */ u8 health; // Note: some actors may use their own health variable instead of this one
/* 0x18 */ u8 damage; // Amount to decrement health by
/* 0x19 */ u8 damageEffect; // Stores what effect should occur when hit by a weapon
/* 0x1A */ u8 atHitEffect; // Stores what effect should occur when AT connects with an AC
/* 0x1B */ u8 acHitEffect; // Stores what effect should occur when AC is touched by an AT
} CollisionCheckInfo; // size = 0x1C
typedef struct {
/* 0x00 */ s16 id;
/* 0x02 */ u8 type;
@@ -248,14 +265,14 @@ typedef struct {
/* 0x150 */ s16 unk150;
/* 0x152 */ s16 unk152;
/* 0x154 */ f32 unk154;
/* 0x158 */ ColCylinder collision;
/* 0x158 */ ColliderCylinder collision;
/* 0x1A4 */ UNK_TYPE1 pad1A4[0x4];
} ActorEnItem00; // size = 0x1A8
typedef struct {
/* 0x000 */ Actor base;
/* 0x144 */ ActorFunc update;
/* 0x148 */ ColCylinder collision;
/* 0x148 */ ColliderCylinder collision;
/* 0x194 */ UNK_TYPE1 pad194[0x14];
} ActorEnAObj; // size = 0x1A8
+329 -166
View File
@@ -8,224 +8,387 @@
struct Actor;
typedef struct {
/* 0x0 */ u32 unk0;
/* 0x4 */ u8 unk4;
/* 0x5 */ u8 unk5;
} ColBumpInit; // size = 0x8
/* 0x00 */ struct Actor* actor; // Attached actor
/* 0x04 */ struct Actor* at; // Actor attached to what it collided with as an AT collider.
/* 0x08 */ struct Actor* ac; // Actor attached to what it collided with as an AC collider.
/* 0x0C */ struct Actor* oc; // Actor attached to what it collided with as an OC collider.
/* 0x10 */ u8 atFlags; // Information flags for AT collisions.
/* 0x11 */ u8 acFlags; // Information flags for AC collisions.
/* 0x12 */ u8 ocFlags1; // Information flags for OC collisions.
/* 0x13 */ u8 ocFlags2; // Flags related to which colliders it can OC collide with.
/* 0x14 */ u8 colType; // Determines hitmarks and sound effects during AC collisions.
/* 0x15 */ u8 shape; // JntSph, Cylinder, Tris, or Quad
} Collider; // size = 0x18
typedef struct {
/* 0x0 */ u8 unk0;
/* 0x1 */ u8 unk1;
/* 0x2 */ u8 unk2;
/* 0x3 */ u8 unk3;
/* 0x4 */ u8 unk4;
/* 0x5 */ u8 type;
} ColCommonInit; // size = 0x6
/* 0x00 */ u8 colType; // Determines hitmarks and sound effects during AC collisions.
/* 0x01 */ u8 atFlags; // Information flags for AT collisions.
/* 0x02 */ u8 acFlags; // Information flags for OC collisions.
/* 0x03 */ u8 ocFlags1; // Information flags for OC collisions.
/* 0x04 */ u8 ocFlags2; // Flags related to which colliders it can OC collide with.
/* 0x05 */ u8 shape; // JntSph, Cylinder, Tris, or Quad
} ColliderInit; // size = 0x06
typedef struct {
/* 0x0 */ u32 collidesWith;
/* 0x4 */ u8 unk4;
/* 0x5 */ u8 damage;
} ColTouch; // size = 0x8
/* 0x00 */ u8 colType; // Determines hitmarks and sound effects during AC collisions.
/* 0x01 */ u8 atFlags; // Information flags for AT collisions.
/* 0x02 */ u8 acFlags; // Information flags for AC collisions.
/* 0x03 */ u8 ocFlags1; // Information flags for OC collisions.
/* 0x04 */ u8 shape; // JntSph, Cylinder, Tris, or Quad
} ColliderInitType1; // size = 0x05
typedef struct {
/* 0x0 */ u32 unk0;
/* 0x4 */ u8 unk4;
/* 0x5 */ u8 unk5;
} ColTouchInit; // size = 0x8
/* 0x00 */ struct Actor* actor; // Attached actor
/* 0x04 */ u8 atFlags; // Information flags for AT collisions.
/* 0x05 */ u8 acFlags; // Information flags for AC collisions.
/* 0x06 */ u8 ocFlags1; // Information flags for OC collisions.
/* 0x07 */ u8 shape; // JntSph, Cylinder, Tris, or Quad
} ColliderInitToActor; // size = 0x08
typedef struct {
/* 0x00 */ u8 unk0;
/* 0x04 */ ColTouchInit unk4;
/* 0x0C */ ColBumpInit unkC;
/* 0x14 */ u8 unk14;
/* 0x15 */ u8 unk15;
/* 0x16 */ u8 unk16;
} ColBodyInfoInit; // size = 0x18
/* 0x00 */ u32 dmgFlags; // Toucher damage type flags.
/* 0x04 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x05 */ u8 damage; // Damage or Stun Timer
} ColliderTouch; // size = 0x08
typedef struct {
/* 0x0 */ u32 collidesWith;
/* 0x4 */ u8 unk4;
/* 0x5 */ u8 unk5;
/* 0x6 */ Vec3s unk6;
} ColBump; // size = 0xC
/* 0x00 */ u32 dmgFlags; // Toucher damage type flags.
/* 0x04 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x05 */ u8 damage; // Damage or Stun Timer
} ColliderTouchInit; // size = 0x08
typedef struct {
/* 0x0 */ s16 radius;
/* 0x2 */ s16 height;
/* 0x4 */ s16 yOffset;
/* 0x6 */ Vec3s loc;
} ColCylinderParams; // size = 0xC
/* 0x00 */ u32 dmgFlags; // Bumper damage type flags.
/* 0x04 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x05 */ u8 defense; // Damage Resistance
/* 0x06 */ Vec3s hitPos; // Point of contact
} ColliderBump; // size = 0x0C
typedef struct {
/* 0x00 */ Vec3f pointA;
/* 0x0C */ Vec3f pointB;
/* 0x18 */ Vec3f pointC;
/* 0x24 */ Vec3f pointD;
/* 0x30 */ Vec3s unk30;
/* 0x36 */ Vec3s unk36;
/* 0x3C */ f32 unk3C;
} ColQuadParams; // size = 0x40
/* 0x00 */ u32 dmgFlags; // Bumper exclusion mask
/* 0x04 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x05 */ u8 defense; // Damage Resistance
} ColliderBumpInit; // size = 0x08
typedef struct ColliderInfo {
/* 0x00 */ ColliderTouch toucher; // Damage properties when acting as an AT collider
/* 0x08 */ ColliderBump bumper; // Damage properties when acting as an AC collider
/* 0x14 */ u8 elemType; // Affects sfx reaction when attacked by Link and hookability. Full purpose unknown.
/* 0x15 */ u8 toucherFlags; // Information flags for AT collisions
/* 0x16 */ u8 bumperFlags; // Information flags for AC collisions
/* 0x17 */ u8 ocElemFlags; // Information flags for OC collisions
/* 0x18 */ Collider* atHit; // object touching this element's AT collider
/* 0x1C */ Collider* acHit; // object touching this element's AC collider
/* 0x20 */ struct ColliderInfo* atHitInfo; // element that hit the AT collider
/* 0x24 */ struct ColliderInfo* acHitInfo; // element that hit the AC collider
} ColliderInfo; // size = 0x28
typedef struct {
/* 0x00 */ Vec3f pointA;
/* 0x0C */ Vec3f pointB;
/* 0x18 */ Vec3f pointC;
/* 0x24 */ Vec3f pointD;
} ColQuadParamsInit; // size = 0x30
/* 0x00 */ u8 elemType; // Affects sfx reaction when attacked by Link and hookability. Full purpose unknown.
/* 0x04 */ ColliderTouchInit toucher; // Damage properties when acting as an AT collider
/* 0x0C */ ColliderBumpInit bumper; // Damage properties when acting as an AC collider
/* 0x14 */ u8 toucherFlags; // Information flags for AT collisions
/* 0x15 */ u8 bumperFlags; // Information flags for AC collisions
/* 0x16 */ u8 ocElemFlags; // Information flags for OC collisions
} ColliderInfoInit; // size = 0x18
typedef struct {
/* 0x0 */ Vec3s loc;
/* 0x6 */ s16 radius;
} ColSphereCollisionInfo; // size = 0x8
/* 0x00 */ Sphere16 modelSphere; // model space sphere
/* 0x08 */ Sphere16 worldSphere; // world space sphere
/* 0x10 */ f32 scale; // worldsphere = modelsphere * scale * 0.01
/* 0x14 */ u8 limb; // attached limb
} ColliderJntSphElementDim; // size = 0x18
typedef struct {
/* 0x00 */ Vec3s unk0;
/* 0x06 */ s16 unk6;
/* 0x08 */ ColSphereCollisionInfo colInfo;
/* 0x10 */ f32 unk10;
/* 0x14 */ u8 unk14;
/* 0x15 */ UNK_TYPE1 pad15[0x3];
} ColSphereParams; // size = 0x18
/* 0x00 */ u8 limb; // attached limb
/* 0x02 */ Sphere16 modelSphere; // model space sphere
/* 0x0A */ s16 scale; // world space sphere = model * scale * 0.01
} ColliderJntSphElementDimInit; // size = 0x0C
typedef struct {
/* 0x0 */ u8 unk0;
/* 0x1 */ ColSphereCollisionInfo unk1;
/* 0xA */ s16 unkA;
} ColSphereParamsInit; // size = 0xC
/* 0x00 */ ColliderInfo info;
/* 0x28 */ ColliderJntSphElementDim dim;
} ColliderJntSphElement; // size = 0x40
typedef struct {
/* 0x00 */ Vec3f pointA;
/* 0x0C */ Vec3f pointB;
/* 0x18 */ Vec3f pointC;
/* 0x24 */ Vec3f unitNormal;
/* 0x30 */ f32 unk30;
} ColTriParams; // size = 0x34
/* 0x00 */ ColliderInfoInit info;
/* 0x18 */ ColliderJntSphElementDimInit dim;
} ColliderJntSphElementInit; // size = 0x24
typedef struct {
/* 0x00 */ Vec3f unk0;
/* 0x0C */ Vec3f unkC;
/* 0x18 */ Vec3f unk18;
} ColTriParamsInit; // size = 0x24
/* 0x00 */ Collider base;
/* 0x18 */ s32 count;
/* 0x1C */ ColliderJntSphElement* elements;
} ColliderJntSph; // size = 0x20
typedef struct {
/* 0x00 */ ColCommonInit base;
/* 0x08 */ ColBodyInfoInit body;
/* 0x20 */ ColCylinderParams info;
} ColCylinderInit; // size = 0x2C
/* 0x0 */ ColliderInit base;
/* 0x8 */ s32 count;
/* 0xC */ ColliderJntSphElementInit* elements;
} ColliderJntSphInit; // size = 0x10
typedef struct {
/* 0x00 */ ColCommonInit base;
/* 0x08 */ ColBodyInfoInit body;
/* 0x20 */ ColQuadParamsInit params;
} ColQuadInit; // size = 0x50
/* 0x00 */ ColliderInitType1 base;
/* 0x08 */ s32 count;
/* 0x0C */ ColliderJntSphElementInit* elements;
} ColliderJntSphInitType1; // size = 0x10
typedef struct {
/* 0x00 */ ColBodyInfoInit body;
/* 0x18 */ ColSphereParamsInit params;
} ColSphereGroupElementInit; // size = 0x24
/* 0x00 */ ColliderInitToActor base;
/* 0x08 */ s32 count;
/* 0x0C */ ColliderJntSphElementInit* elements;
} ColliderJntSphInitToActor; // size = 0x10
typedef struct {
/* 0x0 */ ColCommonInit base;
/* 0x6 */ UNK_TYPE1 pad6[0x2];
/* 0x8 */ u32 count;
/* 0xC */ ColSphereGroupElementInit* init;
} ColSphereGroupInit; // size = 0x10
/* 0x00 */ Collider base;
/* 0x18 */ ColliderInfo info;
/* 0x40 */ Cylinder16 dim;
} ColliderCylinder; // size = 0x4C
typedef struct {
/* 0x00 */ ColCommonInit base;
/* 0x08 */ ColBodyInfoInit body;
/* 0x20 */ ColSphereParamsInit info;
} ColSphereInit; // size = 0x2C
/* 0x00 */ ColliderInit base;
/* 0x08 */ ColliderInfoInit info;
/* 0x20 */ Cylinder16 dim;
} ColliderCylinderInit; // size = 0x2C
typedef struct {
/* 0x00 */ ColBodyInfoInit body;
/* 0x18 */ ColTriParamsInit params;
} ColTriInit; // size = 0x3C
/* 0x00 */ ColliderInitType1 base;
/* 0x08 */ ColliderInfoInit info;
/* 0x20 */ Cylinder16 dim;
} ColliderCylinderInitType1; // size = 0x2C
typedef struct {
/* 0x0 */ ColCommonInit base;
/* 0x8 */ u32 count;
/* 0xC */ ColTriInit* elemInit;
} ColTriGroupInit; // size = 0x10
/* 0x00 */ ColliderInitToActor base;
/* 0x08 */ ColliderInfoInit info;
/* 0x20 */ Cylinder16 dim;
} ColliderCylinderInitToActor; // size = 0x2C
typedef struct {
/* 0x00 */ struct Actor* actor;
/* 0x04 */ struct Actor* collisionAT;
/* 0x08 */ struct Actor* collisionAC;
/* 0x0C */ struct Actor* collisionOT;
/* 0x10 */ u8 flagsAT;
/* 0x11 */ u8 flagsAC; // bit 1 - collision occured?
/* 0x12 */ u8 unk12;
/* 0x13 */ u8 unk13;
/* 0x14 */ u8 unk14;
/* 0x15 */ u8 type;
/* 0x16 */ UNK_TYPE1 pad16[0x2];
} ColCommon; // size = 0x18
/* 0x00 */ Vec3f vtx[3];
} ColliderTrisElementDimInit; // size = 0x24
typedef struct {
/* 0x000 */ s16 ATgroupLength;
/* 0x002 */ u16 flags; // bit 0: collision bodies can't be added or removed, only swapped out
/* 0x004 */ ColCommon* ATgroup[50];
/* 0x0CC */ s32 ACgroupLength;
/* 0x0D0 */ ColCommon* ACgroup[60];
/* 0x1C0 */ s32 OTgroupLength;
/* 0x1C4 */ ColCommon* OTgroup[50];
/* 0x28C */ s32 group4Length;
/* 0x290 */ ColCommon* group4[3];
/* 0x00 */ ColliderInfo info;
/* 0x28 */ TriNorm dim;
} ColliderTrisElement; // size = 0x5C
typedef struct {
/* 0x00 */ ColliderInfoInit info;
/* 0x18 */ ColliderTrisElementDimInit dim;
} ColliderTrisElementInit; // size = 0x3C
typedef struct {
/* 0x00 */ Collider base;
/* 0x18 */ s32 count;
/* 0x1C */ ColliderTrisElement* elements;
} ColliderTris; // size = 0x20
typedef struct {
/* 0x0 */ ColliderInit base;
/* 0x8 */ s32 count;
/* 0xC */ ColliderTrisElementInit* elements;
} ColliderTrisInit; // size = 0x10
typedef struct {
/* 0x00 */ ColliderInitType1 base;
/* 0x08 */ s32 count;
/* 0x0C */ ColliderTrisElementInit* elements;
} ColliderTrisInitType1; // size = 0x10
typedef struct {
/* 0x00 */ Vec3f quad[4];
/* 0x30 */ Vec3s dcMid; // midpoint of vectors d, c
/* 0x36 */ Vec3s baMid; // midpoint of vectors b, a
/* 0x3C */ f32 acDist; // distance to nearest AC collision this frame.
} ColliderQuadDim; // size = 0x40
typedef struct {
/* 0x00 */ Vec3f quad[4];
} ColliderQuadDimInit; // size = 0x30
typedef struct {
/* 0x00 */ Collider base;
/* 0x18 */ ColliderInfo info;
/* 0x40 */ ColliderQuadDim dim;
} ColliderQuad; // size = 0x80
typedef struct {
/* 0x00 */ ColliderInit base;
/* 0x08 */ ColliderInfoInit info;
/* 0x20 */ ColliderQuadDimInit dim;
} ColliderQuadInit; // size = 0x50
typedef struct {
/* 0x00 */ ColliderInitType1 base;
/* 0x08 */ ColliderInfoInit info;
/* 0x20 */ ColliderQuadDimInit dim;
} ColliderQuadInitType1; // size = 0x50
typedef struct {
/* 0x00 */ Collider base;
/* 0x18 */ ColliderInfo info;
/* 0x40 */ ColliderJntSphElementDim dim;
} ColliderSphere; // size = 0x58
typedef struct {
/* 0x00 */ ColliderInit base;
/* 0x08 */ ColliderInfoInit info;
/* 0x20 */ ColliderJntSphElementDimInit dim;
} ColliderSphereInit; // size = 0x2C
typedef struct {
/* 0x00 */ LineSegment line;
/* 0x18 */ u16 ocFlags;
} OcLine; // size = 0x1C
typedef struct {
/* 0x000 */ s16 colATCount;
/* 0x002 */ u16 sacFlags; // Controls whether new collidors can be added or removed, or only swapped
/* 0x004 */ Collider* colAT[50];
/* 0x0CC */ s32 colACCount;
/* 0x0D0 */ Collider* colAC[60];
/* 0x1C0 */ s32 colOCCount;
/* 0x1C4 */ Collider* colOC[50];
/* 0x28C */ s32 colLineCount;
/* 0x290 */ OcLine* colLine[3];
} CollisionCheckContext; // size = 0x29C
typedef struct ColBodyInfo_t {
/* 0x00 */ ColTouch toucher;
/* 0x08 */ ColBump bumper;
/* 0x14 */ u8 unk14;
/* 0x15 */ u8 unk15; // bit 0: can be toucher in AT-AC collision
/* 0x16 */ u8 unk16; // bit 0: can be bumper in AT-AC collision
/* 0x17 */ u8 unk17;
/* 0x18 */ ColCommon* unk18;
/* 0x1C */ ColCommon* unk1C;
/* 0x20 */ struct ColBodyInfo_t* unk20;
/* 0x24 */ struct ColBodyInfo_t* unk24;
} ColBodyInfo; // size = 0x28
typedef struct {
/* 0x00 */ ColBodyInfo body;
/* 0x28 */ ColSphereParams params;
} ColSphereGroupElement; // size = 0x40
/* 0 */ u8 blood;
/* 1 */ u8 effect;
} HitInfo; // size = 0x2
typedef struct {
/* 0x00 */ ColBodyInfo body;
/* 0x28 */ ColTriParams params;
} ColTri; // size = 0x5C
typedef enum {
/* 0 */ BLOOD_NONE,
/* 1 */ BLOOD_BLUE,
/* 2 */ BLOOD_GREEN,
/* 3 */ BLOOD_WATER,
/* 4 */ BLOOD_RED,
/* 5 */ BLOOD_RED2
} ColChkBloodType;
typedef struct {
/* 0x00 */ ColCommon base;
/* 0x18 */ ColBodyInfo body;
/* 0x40 */ ColCylinderParams params;
} ColCylinder; // size = 0x4C
typedef enum {
/* 0 */ HIT_WHITE,
/* 1 */ HIT_DUST,
/* 2 */ HIT_RED,
/* 3 */ HIT_SOLID,
/* 4 */ HIT_WOOD,
/* 5 */ HIT_NONE
} ColChkHitType;
typedef struct {
/* 0x00 */ ColCommon base;
/* 0x18 */ ColBodyInfo body;
/* 0x40 */ ColQuadParams params;
} ColQuad; // size = 0x80
typedef enum {
/* 0 */ MASSTYPE_IMMOVABLE,
/* 1 */ MASSTYPE_HEAVY,
/* 2 */ MASSTYPE_NORMAL
} ColChkMassType;
typedef struct {
/* 0x00 */ ColCommon base;
/* 0x18 */ ColBodyInfo body;
/* 0x40 */ ColSphereParams params;
} ColSphere; // size = 0x58
typedef enum {
/* 0 */ COLTYPE_HIT0, // Blue blood, white hitmark
/* 1 */ COLTYPE_HIT1, // No blood, dust hitmark
/* 2 */ COLTYPE_HIT2, // Green blood, dust hitmark
/* 3 */ COLTYPE_HIT3, // No blood, white hitmark
/* 4 */ COLTYPE_HIT4, // Water burst, no hitmark
/* 5 */ COLTYPE_HIT5, // No blood, red hitmark
/* 6 */ COLTYPE_HIT6, // Green blood, white hitmark
/* 7 */ COLTYPE_HIT7, // Red blood, white hitmark
/* 8 */ COLTYPE_HIT8, // Blue blood, red hitmark
/* 9 */ COLTYPE_METAL,
/* 10 */ COLTYPE_NONE,
/* 11 */ COLTYPE_WOOD,
/* 12 */ COLTYPE_HARD,
/* 13 */ COLTYPE_TREE
} ColliderType;
typedef struct {
/* 0x00 */ ColCommon base;
/* 0x18 */ u32 count;
/* 0x1C */ ColSphereGroupElement* spheres;
} ColSphereGroup; // size = 0x20
typedef enum {
/* 0 */ COLSHAPE_JNTSPH,
/* 1 */ COLSHAPE_CYLINDER,
/* 2 */ COLSHAPE_TRIS,
/* 3 */ COLSHAPE_QUAD,
/* 4 */ COLSHAPE_SPHERE,
/* 5 */ COLSHAPE_MAX
} ColliderShape;
typedef struct {
/* 0x00 */ ColCommon base;
/* 0x18 */ u32 count;
/* 0x1C */ ColTri* tris;
} ColTriGroup; // size = 0x20
typedef enum {
/* 0 */ ELEMTYPE_UNK0,
/* 1 */ ELEMTYPE_UNK1,
/* 2 */ ELEMTYPE_UNK2,
/* 3 */ ELEMTYPE_UNK3,
/* 4 */ ELEMTYPE_UNK4,
/* 5 */ ELEMTYPE_UNK5,
/* 6 */ ELEMTYPE_UNK6,
/* 7 */ ELEMTYPE_UNK7
} ElementType;
#define SAC_ON (1 << 0) // CollisionContext SAC Flag
#define AT_NONE 0 // No flags set. Cannot have AT collisions when set as AT
#define AT_ON (1 << 0) // Can have AT collisions when set as AT
#define AT_HIT (1 << 1) // Had an AT collision
#define AT_BOUNCED (1 << 2) // Had an AT collision with an AC_HARD collider
#define AT_TYPE_PLAYER (1 << 3) // Has player-aligned damage
#define AT_TYPE_ENEMY (1 << 4) // Has enemy-aligned damage
#define AT_TYPE_OTHER (1 << 5) // Has non-aligned damage
#define AT_SELF (1 << 6) // Can have AT collisions with colliders attached to the same actor
#define AT_TYPE_ALL (AT_TYPE_PLAYER | AT_TYPE_ENEMY | AT_TYPE_OTHER) // Has all three damage alignments
#define AC_NONE 0 // No flags set. Cannot have AC collisions when set as AC
#define AC_ON (1 << 0) // Can have AC collisions when set as AC
#define AC_HIT (1 << 1) // Had an AC collision
#define AC_HARD (1 << 2) // Causes AT colliders to bounce off it
#define AC_TYPE_PLAYER AT_TYPE_PLAYER // Takes player-aligned damage
#define AC_TYPE_ENEMY AT_TYPE_ENEMY // Takes enemy-aligned damage
#define AC_TYPE_OTHER AT_TYPE_OTHER // Takes non-aligned damage
#define AC_NO_DAMAGE (1 << 6) // Collider does not take damage
#define AC_BOUNCED (1 << 7) // Caused an AT collider to bounce off it
#define AC_TYPE_ALL (AC_TYPE_PLAYER | AC_TYPE_ENEMY | AC_TYPE_OTHER) // Takes damage from all three alignments
#define OC1_NONE 0 // No flags set. Cannot have OC collisions when set as OC
#define OC1_ON (1 << 0) // Can have OC collisions when set as OC
#define OC1_HIT (1 << 1) // Had an OC collision
#define OC1_NO_PUSH (1 << 2) // Does not push other colliders away during OC collisions
#define OC1_TYPE_PLAYER (1 << 3) // Can have OC collisions with OC type player
#define OC1_TYPE_1 (1 << 4) // Can have OC collisions with OC type 1
#define OC1_TYPE_2 (1 << 5) // Can have OC collisions with OC type 2
#define OC1_TYPE_ALL (OC1_TYPE_PLAYER | OC1_TYPE_1 | OC1_TYPE_2) // Can have collisions with all three OC types
#define OC2_NONE 0 // No flags set. Has no OC type
#define OC2_HIT_PLAYER (1 << 0) // Had an OC collision with OC type player
#define OC2_UNK1 (1 << 1) // Prevents OC collisions with OC2_UNK2. Some horses and toki_sword have it.
#define OC2_UNK2 (1 << 2) // Prevents OC collisions with OC2_UNK1. Nothing has it.
#define OC2_TYPE_PLAYER OC1_TYPE_PLAYER // Has OC type player
#define OC2_TYPE_1 OC1_TYPE_1 // Has OC type 1
#define OC2_TYPE_2 OC1_TYPE_2 // Has OC type 2
#define OC2_FIRST_ONLY (1 << 6) // Skips AC checks on elements after the first collision. Only used by Ganon
#define TOUCH_NONE 0 // No flags set. Cannot have AT collisions
#define TOUCH_ON (1 << 0) // Can have AT collisions
#define TOUCH_HIT (1 << 1) // Had an AT collision
#define TOUCH_NEAREST (1 << 2) // If a Quad, only collides with the closest bumper
#define TOUCH_SFX_NORMAL (0 << 3) // Hit sound effect based on AC collider's type
#define TOUCH_SFX_HARD (1 << 3) // Always uses hard deflection sound
#define TOUCH_SFX_WOOD (2 << 3) // Always uses wood deflection sound
#define TOUCH_SFX_NONE (3 << 3) // No hit sound effect
#define TOUCH_AT_HITMARK (1 << 5) // Draw hitmarks for every AT collision
#define TOUCH_DREW_HITMARK (1 << 6) // Already drew hitmark for this frame
#define TOUCH_UNK7 (1 << 7) // Unknown purpose. Used by some enemy quads
#define BUMP_NONE 0 // No flags set. Cannot have AC collisions
#define BUMP_ON (1 << 0) // Can have AC collisions
#define BUMP_HIT (1 << 1) // Had an AC collision
#define BUMP_HOOKABLE (1 << 2) // Can be hooked if actor has hookability flags set.
#define BUMP_NO_AT_INFO (1 << 3) // Does not give its info to the AT collider that hit it.
#define BUMP_NO_DAMAGE (1 << 4) // Does not take damage.
#define BUMP_NO_SWORD_SFX (1 << 5) // Does not have a sound when hit by player-attached AT colliders.
#define BUMP_NO_HITMARK (1 << 6) // Skips hit effects.
#define BUMP_DRAW_HITMARK (1 << 7) // Draw hitmark for AC collision this frame.
#define OCELEM_NONE 0 // No flags set. Cannot have OC collisions
#define OCELEM_ON (1 << 0) // Can have OC collisions
#define OCELEM_HIT (1 << 1) // Had an OC collision
#define OCELEM_UNK2 (1 << 2) // Unknown purpose.
#define OCELEM_UNK3 (1 << 3) // Unknown purpose. Used by Dead Hand element 0 and Dodongo element 5
#define OCLINE_NONE 0 // Did not have an OcLine collision
#define OCLINE_HIT (1 << 0) // Had an OcLine collision
#endif
+87 -9
View File
@@ -5,16 +5,94 @@
#define SHT_MAX 32767.0f
typedef struct {
/* 0x0 */ f32 x;
/* 0x4 */ f32 y;
/* 0x8 */ f32 z;
} Vec3f; // size = 0xC
#define VEC_SET(V,X,Y,Z) V.x=X;V.y=Y;V.z=Z
typedef struct {
/* 0x0 */ s16 x;
/* 0x2 */ s16 y;
/* 0x4 */ s16 z;
} Vec3s; // size = 0x6
/* 0x00 */ f32 x;
/* 0x04 */ f32 y;
} Vec2f; // size = 0x08
typedef struct {
/* 0x00 */ f32 x;
/* 0x04 */ f32 y;
/* 0x08 */ f32 z;
} Vec3f; // size = 0x0C
typedef struct {
/* 0x00 */ u16 x;
/* 0x02 */ u16 y;
/* 0x04 */ u16 z;
} Vec3us; // size = 0x06
typedef struct {
/* 0x00 */ s16 x;
/* 0x02 */ s16 y;
/* 0x04 */ s16 z;
} Vec3s; // size = 0x06
typedef struct {
/* 0x00 */ s32 x;
/* 0x04 */ s32 y;
/* 0x08 */ s32 z;
} Vec3i; // size = 0x0C
typedef struct {
/* 0x00 */ Vec3s center;
/* 0x06 */ s16 radius;
} Sphere16; // size = 0x08
typedef struct {
/* 0x00 */ Vec3f center;
/* 0x0C */ f32 radius;
} Spheref; // size = 0x10
typedef struct {
/* 0x00 */ Vec3f normal;
/* 0x0C */ f32 originDist;
} Plane; // size = 0x10
typedef struct {
/* 0x00 */ Vec3f vtx[3];
/* 0x24 */ Plane plane;
} TriNorm; // size = 0x34
typedef struct {
/* 0x00 */ s16 radius;
/* 0x02 */ s16 height;
/* 0x04 */ s16 yShift;
/* 0x06 */ Vec3s pos;
} Cylinder16; // size = 0x0C
typedef struct {
/* 0x00 */ f32 radius;
/* 0x04 */ f32 height;
/* 0x08 */ f32 yShift;
/* 0x0C */ Vec3f pos;
} Cylinderf; // size = 0x18
typedef struct {
/* 0x00 */ Vec3f point;
/* 0x0C */ Vec3f dir;
} InfiniteLine; // size = 0x18
typedef struct {
/* 0x00 */ Vec3f a;
/* 0x0C */ Vec3f b;
} LineSegment; // size = 0x18
// Defines a point in the spherical coordinate system
typedef struct {
/* 0x00 */ f32 r; // radius
/* 0x04 */ s16 pitch; // polar (zenith) angle
/* 0x06 */ s16 yaw; // azimuthal angle
} VecSph; // size = 0x08
#define IS_ZERO(f) (fabsf(f) < 0.008f)
// Vector macros
#define SQXZ(vec) ((vec.x) * (vec.x) + (vec.z) * (vec.z))
#define DOTXZ(vec1, vec2) ((vec1.x) * (vec2.x) + (vec1.z) * (vec2.z))
#define SQXYZ(vec) ((vec.x) * (vec.x) + (vec.y) * (vec.y) + (vec.z) * (vec.z))
#define DOTXYZ(vec1, vec2) ((vec1.x) * (vec2.x) + (vec1.y) * (vec2.y) + (vec1.z) * (vec2.z))
#endif