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
+5 -4
View File
@@ -337,9 +337,9 @@ SECTIONS
build/src/code/code_0x800CAE10.o(.text)
build/asm/code/code_0x800CB000.o(.text)
build/asm/code/z_camera.o(.text)
build/src/code/code_0x800E03A0.o(.text)
build/src/code/z_collision_btltbls.o(.text)
. += 0x10;
build/asm/code/z_collision_check.o(.text)
build/src/code/z_collision_check.o(.text)
build/src/code/code_0x800E8EA0.o(.text)
build/asm/code/code_0x800E9360.o(.text)
build/asm/code/z_debug.o(.text)
@@ -473,7 +473,8 @@ SECTIONS
build/src/code/z_actor_dlftbls.o(.data)
build/asm/code/code_data_z_bgcheck.o(.data)
build/asm/code/code_data_z_camera.o(.data)
build/asm/code/code_data_z_collision_check.o(.data)
build/src/code/z_collision_btltbls.o(.data)
build/src/code/z_collision_check.o(.data)
build/asm/code/code_data_z_debug_display.o(.data)
build/asm/code/code_data_z_debug_mode.o(.data)
build/asm/code/code_data_z_draw.o(.data)
@@ -549,7 +550,7 @@ SECTIONS
build/asm/code/code_rodata_z_bgcheck.o(.rodata)
build/asm/code/code_rodata_0x800CB000.o(.rodata)
build/asm/code/code_rodata_z_camera.o(.rodata)
build/asm/code/code_rodata_z_collision_check.o(.rodata)
build/src/code/z_collision_check.o(.rodata)
build/asm/code/code_rodata_0x800E8EA0.o(.rodata)
build/asm/code/code_rodata_z_debug_mode.o(.rodata)
build/asm/code/code_rodata_z_draw.o(.rodata)
+7 -5
View File
@@ -8,16 +8,18 @@ void EnAObj_Init(ActorEnAObj* this, GlobalContext* ctxt) {
s0->base.textId = ((s0->base.params >> 8) & 0xFF) | 0x300;
s0->base.params = (s0->base.params & 0xFF) - 9;
Actor_ProcessInitChain((Actor*)s0, &enAObjInitVar);
Actor_SetDrawParams(&s0->base.shape, 0, (ActorShadowFunc)func_800B3FC0, 12);
Collision_InitCylinder(ctxt, &s0->collision, (Actor*)s0, &enAObjCylinderInit);
Collision_CylinderMoveToActor((Actor*)s0, &s0->collision);
Collider_InitAndSetCylinder(ctxt, &s0->collision, (Actor*)s0, &enAObjCylinderInit);
Collider_UpdateCylinder((Actor*)s0, &s0->collision);
s0->base.colChkInfo.mass = 255;
s0->update = (ActorFunc)EnAObj_Update1;
}
void EnAObj_Destroy(ActorEnAObj* this, GlobalContext* ctxt) {
ColCylinder* a2 = &this->collision;
Collision_FiniCylinder(ctxt, a2);
ColliderCylinder* a2 = &this->collision;
Collider_DestroyCylinder(ctxt, a2);
}
void EnAObj_Update1(ActorEnAObj* this, GlobalContext* ctxt) {
@@ -43,7 +45,7 @@ void EnAObj_Update2(ActorEnAObj* this, GlobalContext* ctxt) {
void EnAObj_Update(ActorEnAObj* this, GlobalContext* ctxt) {
(this->update)((Actor*)this, (GlobalContext*)ctxt);
Actor_SetHeight((Actor*)this, 45.0f);
Collision_AddOT(ctxt, &ctxt->colCheckCtx, (ColCommon*)&this->collision);
CollisionCheck_SetOC(ctxt, &ctxt->colCheckCtx, (Collider*)&this->collision);
}
void EnAObj_Draw(ActorEnAObj* this, GlobalContext* ctxt) {
-17
View File
@@ -1,17 +0,0 @@
#include <ultra64.h>
#include <global.h>
s800E03A0* func_800E03A0(s32 a0) {
if ((a0 < 0) || (a0 > 22)) return 0;
return &(D_801B9F20[a0]);
}
// Probably zeroes out a s800E03A0?
void func_800E03CC(u8* a0) {
s32 i;
u8* v1;
for (i = 0, v1 = a0; i < 32; i++) {
*v1++ = 0;
}
}
+1 -1
View File
@@ -230,7 +230,7 @@ void Actor_InitToDefaultValues(Actor* actor, GlobalContext* ctxt) {
actor->meshAttachedTo = 0x32;
actor->sqrdDistToLink = D_801DCA54;
func_800E7494(&actor->colChkInfo);
CollisionCheck_InitInfo(&actor->colChkInfo);
actor->uncullZoneForward = 1000.0f;
actor->uncullZoneScale = 350.0f;
actor->uncullZoneDownward = 700.0f;
+1 -1
View File
@@ -76,7 +76,7 @@ void BgCheck_CreateVertexFromVec3f(BgVertex* vertex, Vec3f* vector) {
#pragma GLOBAL_ASM("./asm/non_matchings/code/z_bgcheck/func_800C01B8.asm")
#pragma GLOBAL_ASM("./asm/non_matchings/code/z_bgcheck/BgCheck_CreateColTriParamsFromPolygon.asm")
#pragma GLOBAL_ASM("./asm/non_matchings/code/z_bgcheck/BgCheck_CreateTriNormFromPolygon.asm")
#pragma GLOBAL_ASM("./asm/non_matchings/code/z_bgcheck/func_800C02C0.asm")
+74
View File
@@ -0,0 +1,74 @@
#include <ultra64.h>
#include <global.h>
DamageTable sDamageTablePresets[] = {
{ { 0x10, 0x01, 0x01, 0x02, 0xE0, 0x01, 0xF2, 0x10, 0xF1, 0xF2, 0xF2, 0x22, 0x01, 0x01, 0x00, 0x00,
0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x01, 0x02, 0xE0, 0x01, 0xF2, 0x10, 0xF1, 0xF2, 0xF2, 0x22, 0x01, 0x01, 0x00, 0x00,
0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x02, 0x01, 0x02, 0x10, 0x02, 0x02, 0x02, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x01, 0x00, 0x10, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x31, 0x01, 0x00, 0x00,
0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x03, 0x00, 0x06, 0x00, 0x04, 0x04, 0x00, 0x02, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x03, 0x00, 0x06, 0x00, 0x04, 0x04, 0x00, 0x02, 0x06, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00,
0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x00, 0xE2, 0x10, 0x01, 0x02, 0x10, 0xF1, 0xF2, 0xF2, 0x22, 0x32, 0x01, 0x00, 0x00,
0x00, 0x22, 0x32, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x01, 0x02, 0x10, 0x01, 0x02, 0x10, 0x01, 0x02, 0x02, 0x22, 0x01, 0x01, 0x00, 0x00,
0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x00, 0x02, 0x10, 0x01, 0x02, 0x10, 0xF1, 0xF2, 0xF2, 0x22, 0x32, 0x01, 0x00, 0x00,
0x00, 0x22, 0x32, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x01, 0xF2, 0xE0, 0x01, 0xD2, 0x10, 0x01, 0x02, 0x02, 0x00, 0x32, 0x00, 0x00, 0x00,
0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x10, 0x01, 0x00, 0xF0, 0x10, 0x01, 0xF0, 0x10, 0x01, 0x02, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
{ { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 } },
};
/**
* Returns a pointer to one of the 23 damage table presets, or NULL if the index
* is out of range.
*/
DamageTable* DamageTable_Get(s32 index) {
if (index < 0 || index > ARRAY_COUNT(sDamageTablePresets)-1) {
return NULL;
}
return &sDamageTablePresets[index];
}
/**
* Sets all entries in a damage table to 0
*/
void DamageTable_Clear(DamageTable* damageTable) {
s32 i;
for (i = 0; i < ARRAY_COUNT(damageTable->attack); i++) {
damageTable->attack[i] = 0;
}
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -146,7 +146,7 @@ s32 func_8013A530(GlobalContext* globalCtx, Actor* actor, s32 flag, Vec3f* pos,
actors[0] = actor;
actors[1] = globalCtx->actorCtx.actorList[2].first; // TODO PLAYER macro
if (func_800E7DCC(globalCtx, &globalCtx->colCheckCtx, pos, &camera->eye, actors, 2) != 0) {
if (CollisionCheck_LineOCCheck(globalCtx, &globalCtx->colCheckCtx, pos, &camera->eye, actors, 2) != 0) {
func_8013A41C(0x3b);
ret |= 0x3b;
}
+30 -17
View File
@@ -24,10 +24,24 @@ const ActorInit Arms_Hook_InitVars = {
(ActorFunc)ArmsHook_Draw
};
ColQuadInit D_808C1BC0 = {
{ 10, 0x09, 0x00, 0x00, 0x08, 3 },
{ 0x02, { 0x00000080, 0x00, 0x02 }, { 0xF7CFFFFF, 0x00, 0x00 }, 0x05, 0x00, 0x00 },
{ 0 },
ColliderQuadInit D_808C1BC0 = {
{
COLTYPE_NONE,
AT_ON | AT_TYPE_PLAYER,
AC_NONE,
OC1_NONE,
OC2_TYPE_PLAYER,
COLSHAPE_QUAD,
},
{
ELEMTYPE_UNK2,
{ 0x00000080, 0x00, 0x02 },
{ 0xF7CFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_NONE,
},
{ { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } },
};
Vec3f D_808C1C10 = { 0.0f, 0.0f, 0.0f };
@@ -47,8 +61,8 @@ void ArmsHook_SetupAction(ArmsHook* this, ArmsHookActionFunc actionFunc) {
void ArmsHook_Init(Actor* thisx, GlobalContext* globalCtx) {
ArmsHook* this = THIS;
Collision_InitQuadDefault(globalCtx, &this->collider);
Collision_InitQuadWithData(globalCtx, &this->collider, &this->actor, &D_808C1BC0);
Collider_InitQuad(globalCtx, &this->collider);
Collider_SetQuad(globalCtx, &this->collider, &this->actor, &D_808C1BC0);
ArmsHook_SetupAction(this, ArmsHook_Wait);
this->unk1E0 = this->actor.world.pos;
}
@@ -59,7 +73,7 @@ void ArmsHook_Destroy(Actor* thisx, GlobalContext* globalCtx) {
if (this->grabbed != NULL) {
this->grabbed->flags &= ~0x2000;
}
Collision_FiniQuad(globalCtx, &this->collider);
Collider_DestroyQuad(globalCtx, &this->collider);
}
void ArmsHook_Wait(ArmsHook* this, GlobalContext* globalCtx) {
@@ -125,10 +139,11 @@ void ArmsHook_Shoot(ArmsHook* this, GlobalContext* globalCtx) {
func_800B8F98(&player->base, 0x100B);
ArmsHook_CheckForCancel(this);
if (this->timer != 0 && (this->collider.base.flagsAT & 2) && (this->collider.body.unk20->unk14 != 4)) {
Actor* touchedActor = this->collider.base.collisionAT;
if (this->timer != 0 && (this->collider.base.atFlags & AT_HIT) &&
(this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4)) {
Actor* touchedActor = this->collider.base.at;
if ((touchedActor->update != NULL) && (touchedActor->flags & 0x600)) {
if (this->collider.body.unk20->unk16 & 4) {
if (this->collider.info.atHitInfo->bumperFlags & BUMP_HOOKABLE) {
ArmsHook_AttachHookToActor(this, touchedActor);
if ((touchedActor->flags & 0x400) == 0x400) {
func_808C1154(this);
@@ -170,8 +185,7 @@ void ArmsHook_Shoot(ArmsHook* this, GlobalContext* globalCtx) {
{
f32 velocity;
bodyDistDiff =
Math_Vec3f_DistXYZAndStoreDiff(&player->unk368, &this->actor.world.pos, &bodyDistDiffVec);
bodyDistDiff = Math_Vec3f_DistXYZAndStoreDiff(&player->unk368, &this->actor.world.pos, &bodyDistDiffVec);
if (bodyDistDiff < 30.0f) {
velocity = 0.0f;
phi_f16 = 0.0f;
@@ -244,15 +258,14 @@ void ArmsHook_Shoot(ArmsHook* this, GlobalContext* globalCtx) {
if (func_800C9CEC(&globalCtx->colCtx, poly, bgId)) {
{
DynaPolyActor* dynaPolyActor;
if (bgId != 0x32 &&
(dynaPolyActor = BgCheck_GetActorOfMesh(&globalCtx->colCtx, bgId)) != NULL) {
if (bgId != 0x32 && (dynaPolyActor = BgCheck_GetActorOfMesh(&globalCtx->colCtx, bgId)) != NULL) {
ArmsHook_AttachHookToActor(this, &dynaPolyActor->actor);
}
}
func_808C1154(this);
func_8019F1C0(&this->actor.projectedPos, 0x1829);
} else {
func_800E8668(globalCtx, &this->actor.world.pos);
CollisionCheck_SpawnShieldParticlesMetal(globalCtx, &this->actor.world.pos);
func_8019F1C0(&this->actor.projectedPos, 0x1813);
}
} else {
@@ -305,8 +318,8 @@ void ArmsHook_Draw(Actor* thisx, GlobalContext* globalCtx) {
gSPMatrix(sp44->polyOpa.p++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(sp44->polyOpa.p++, D_0601D960);
SysMatrix_InsertTranslation(this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, MTXMODE_NEW);
SysMatrix_InsertTranslation(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z,
MTXMODE_NEW);
Math_Vec3f_Diff(&player->unk368, &this->actor.world.pos, &sp68);
sp48 = SQ(sp68.x) + SQ(sp68.z);
sp4C = sqrtf(sp48);
@@ -9,7 +9,7 @@ typedef void (*ArmsHookActionFunc)(struct ArmsHook*, GlobalContext*);
typedef struct ArmsHook {
/* 0x000 */ Actor actor;
/* 0x144 */ ColQuad collider;
/* 0x144 */ ColliderQuad collider;
/* 0x1C4 */ s32 unk1C4;
/* 0x1C8 */ char unk1C8[0x18];
/* 0x1E0 */ Vec3f unk1E0;
@@ -26,30 +26,28 @@ const ActorInit Bg_Ikana_Ray_InitVars = {
(ActorFunc)BgIkanaRay_Draw
};
// TODO better formatting
ColCylinderInit bgIkanaRayCylinderInit = {
{ 10, 33, 0, 0, 0, 1 },
{ 0, { 0x00200000, 0, 0 }, { 0, 0, 0 }, 25, 0, 1 },
{ 90, 420, 65116}
ColliderCylinderInit bgIkanaRayCylinderInit = {
{ COLTYPE_NONE, AT_ON | AT_TYPE_OTHER, AC_NONE, OC1_NONE, OC2_NONE, COLSHAPE_CYLINDER, },
{ ELEMTYPE_UNK0, { 0x00200000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NONE, BUMP_NONE, OCELEM_ON, },
{ 90, 420, -420, { 0, 0, 0 } },
};
// TODO macro
InitChainEntry bgIkanaRayCompInit[] = {
{1, 6, 0x0FC, 4000},
{1, 6, 0x100, 1000},
{1, 6, 0x104, 1000},
{0, 9, 0x058, 100}
InitChainEntry bgIkanaRayCompInit[] = {
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
void BgIkanaRay_Init(Actor* thisx, GlobalContext* globalCtx) {
ColCylinder* collision = &THIS->collision;
ColliderCylinder* collision = &THIS->collision;
u32 pad;
Actor_ProcessInitChain(thisx, bgIkanaRayCompInit);
Collision_InitCylinderDefault(globalCtx, collision);
Collision_InitCylinderWithData(globalCtx, collision, thisx, &bgIkanaRayCylinderInit);
Collision_CylinderMoveToActor(thisx, &THIS->collision);
Collider_InitCylinder(globalCtx, collision);
Collider_SetCylinder(globalCtx, collision, thisx, &bgIkanaRayCylinderInit);
Collider_UpdateCylinder(thisx, &THIS->collision);
THIS->animatedTextures = (AnimatedTexture*)Lib_PtrSegToVirt(object_ikana_obj_001228);
@@ -61,8 +59,8 @@ void BgIkanaRay_Init(Actor* thisx, GlobalContext* globalCtx) {
}
void BgIkanaRay_Destroy(Actor* thisx, GlobalContext* globalCtx) {
ColCylinder* collision = &THIS->collision;
Collision_FiniCylinder(globalCtx, collision);
ColliderCylinder* collision = &THIS->collision;
Collider_DestroyCylinder(globalCtx, collision);
}
void BgIkanaRay_SetDeactivated(BgIkanaRay* this) {
@@ -84,7 +82,7 @@ void BgIkanaRay_SetActivated(BgIkanaRay* this) {
}
void BgIkanaRay_UpdateActivated(BgIkanaRay* this, GlobalContext* globalCtx) {
Collision_AddAT(globalCtx, &globalCtx->colCheckCtx, &this->collision.base);
CollisionCheck_SetAT(globalCtx, &globalCtx->colCheckCtx, &this->collision.base);
}
void BgIkanaRay_Update(Actor* thisx, GlobalContext* globalCtx) {
@@ -7,7 +7,7 @@ struct BgIkanaRay;
typedef struct BgIkanaRay {
/* 0x000 */ Actor base;
/* 0x144 */ ColCylinder collision;
/* 0x144 */ ColliderCylinder collision;
/* 0x190 */ AnimatedTexture* animatedTextures;
/* 0x194 */ void (*update)(struct BgIkanaRay*, GlobalContext*);
} BgIkanaRay; // size = 0x198
+8 -9
View File
@@ -26,10 +26,9 @@ const ActorInit En_Nnh_InitVars = {
(ActorFunc)EnNnh_Draw
};
ColCylinderInit D_80C08A00 =
{
{ 0x0D, 0x00, 0x09, 0x39, 0x10, 0x01 },
{ 0x01, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, 0x00, 0x01, 0x01 },
ColliderCylinderInit D_80C08A00 = {
{ COLTYPE_TREE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
{ ELEMTYPE_UNK1, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
{ 20, 50, 0, { 0, 0, 0 } },
};
@@ -39,8 +38,8 @@ void EnNnh_Init(Actor *thisx, GlobalContext *globalCtx) {
EnNnh* this = THIS;
Actor_SetScale(&this->actor, 0.01f);
Collision_InitCylinderDefault(globalCtx, &this->collider);
Collision_InitCylinderWithData(globalCtx, &this->collider, &this->actor, &D_80C08A00);
Collider_InitCylinder(globalCtx, &this->collider);
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &D_80C08A00);
this->actor.targetMode = 1;
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 30.0f;
@@ -50,7 +49,7 @@ void EnNnh_Init(Actor *thisx, GlobalContext *globalCtx) {
void EnNnh_Destroy(Actor *thisx, GlobalContext *globalCtx) {
EnNnh* this = THIS;
Collision_FiniCylinder(globalCtx, &this->collider);
Collider_DestroyCylinder(globalCtx, &this->collider);
}
void func_80C08828(EnNnh* this) {
@@ -81,8 +80,8 @@ void EnNnh_Update(Actor *thisx, GlobalContext *globalCtx) {
s32 pad;
this->actionFunc(this, globalCtx);
Collision_CylinderMoveToActor(&this->actor, &this->collider);
Collision_AddOT(globalCtx, &globalCtx->colCheckCtx, &this->collider.base);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(globalCtx, &globalCtx->colCheckCtx, &this->collider.base);
}
void EnNnh_Draw(Actor *thisx, GlobalContext *globalCtx) {
+1 -1
View File
@@ -9,7 +9,7 @@ typedef void (*EnNnhActionFunc)(struct EnNnh*, GlobalContext*);
typedef struct EnNnh {
/* 0x000 */ Actor actor;
/* 0x144 */ ColCylinder collider;
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ EnNnhActionFunc actionFunc;
} EnNnh; // size = 0x194
@@ -24,14 +24,15 @@ const ActorInit En_Tanron6_InitVars = {
(ActorFunc)EnTanron6_Draw
};
DamageTable D_80BE6170 = { 0xF0, 0xF0, 0x00, 0xF1, 0xE1, 0xE1, 0x00, 0xE1, 0xF0, 0xF0, 0xF0,
0xE1, 0xE1, 0x46, 0xF0, 0xF0, 0xE1, 0xF0, 0xF0, 0x00, 0x00, 0xF0,
0xE1, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0 };
DamageTable D_80BE6170 = {
0xF0, 0xF0, 0x00, 0xF1, 0xE1, 0xE1, 0x00, 0xE1, 0xF0, 0xF0, 0xF0, 0xE1, 0xE1, 0x46, 0xF0, 0xF0,
0xE1, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xE1, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
};
void EnTanron6_Init(Actor* thisx, GlobalContext* globalCtx) {
EnTanron6* this = THIS;
this->actor.colChkInfo.mass = 0xA;
this->actor.colChkInfo.mass = 10;
Actor_SetDrawParams(&this->actor.shape, 0, func_800B3FC0, 19.0f);
this->actor.colChkInfo.health = 1;
this->actor.colChkInfo.damageTable = &D_80BE6170;
+212 -212
View File
@@ -924,7 +924,7 @@
0x800C003C:("BgCheck_PolygonGetNormal",),
0x800C0094:("func_800C0094",),
0x800C01B8:("func_800C01B8",),
0x800C0220:("BgCheck_CreateColTriParamsFromPolygon",),
0x800C0220:("BgCheck_CreateTriNormFromPolygon",),
0x800C02C0:("func_800C02C0",),
0x800C0340:("func_800C0340",),
0x800C0474:("func_800C0474",),
@@ -1307,217 +1307,217 @@
0x800E0308:("func_800E0308",),
0x800E031C:("func_800E031C",),
0x800E0348:("func_800E0348",),
0x800E03A0:("func_800E03A0",),
0x800E03CC:("func_800E03CC",),
0x800E0410:("Collision_GetDamageAndEffectOnBumper",),
0x800E04BC:("func_800E04BC",),
0x800E04EC:("Collision_GetToucherDamage",),
0x800E0538:("Collision_InitCommonDefault",),
0x800E0580:("Collision_FiniCommon",),
0x800E0594:("func_800E0594",),
0x800E05D4:("func_800E05D4",),
0x800E0618:("Collision_InitCommonWithData",),
0x800E065C:("Collision_ResetCommonForAT",),
0x800E0678:("Collision_ResetCommonForAC",),
0x800E0694:("Collision_ResetCommonForOT",),
0x800E06BC:("Collision_InitTouchDefault",),
0x800E06E4:("Collision_FiniTouch",),
0x800E06F8:("Collision_InitTouchWithData",),
0x800E0720:("Collision_nop800E0720",),
0x800E0730:("Collision_InitBumpDefault",),
0x800E0760:("Collision_FiniBump",),
0x800E0774:("Collision_InitBumpWithData",),
0x800E079C:("Collision_InitBodyDefault",),
0x800E081C:("Collision_FiniBody",),
0x800E085C:("Collision_InitBodyWithData",),
0x800E08D4:("Collision_ResetBodyForAT",),
0x800E090C:("Collision_ResetBodyForAC",),
0x800E0944:("Collision_ResetBodyForOT",),
0x800E095C:("Collision_InitSphereParamsDefault",),
0x800E09A4:("Collision_FiniSphereParams",),
0x800E09B8:("Collision_InitSphereParamsWithData",),
0x800E0A10:("Collision_InitSphereGroupElemDefault",),
0x800E0A50:("Collision_FiniSphereGroupElem",),
0x800E0A90:("Collision_InitSphereGroupElemWithData",),
0x800E0AE0:("Collision_ResetSphereGroupElemForAT",),
0x800E0B04:("Collision_ResetSphereGroupElemForAC",),
0x800E0B28:("Collision_ResetSphereGroupElemForOT",),
0x800E0B4C:("Collision_InitSphereGroupDefault",),
0x800E0B78:("func_800E0B78",),
0x800E0C18:("Collision_FiniSphereGroup",),
0x800E0CA8:("func_800E0CA8",),
0x800E0D84:("func_800E0D84",),
0x800E0E60:("Collision_InitSphereGroupWithData",),
0x800E0F14:("Collision_InitSphereGroup",),
0x800E0F68:("Collision_ResetSphereGroupForAT",),
0x800E0FF4:("Collision_ResetSphereGroupForAC",),
0x800E1080:("Collision_ResetSphereGroupForOT",),
0x800E110C:("Collision_InitCylinderParamsDefault",),
0x800E1148:("Collision_FiniCylinderParams",),
0x800E115C:("Collision_InitCylinderParamsWithData",),
0x800E119C:("Collision_InitCylinderDefault",),
0x800E11EC:("Collision_FiniCylinder",),
0x800E123C:("func_800E123C",),
0x800E12A4:("func_800E12A4",),
0x800E130C:("Collision_InitCylinderWithData",),
0x800E1374:("Collision_InitCylinder",),
0x800E13C0:("Collision_ResetCylinderForAT",),
0x800E1400:("Collision_ResetCylinderForAC",),
0x800E1440:("Collision_ReseCylinderForOT",),
0x800E1480:("Collision_InitTriParamsDefault",),
0x800E14CC:("Collision_FiniTriParams",),
0x800E14E0:("Collision_InitTriParamsWithData",),
0x800E1594:("Collision_InitTriDefault",),
0x800E15D4:("Collision_FiniTri",),
0x800E1614:("Collision_InitTriWithData",),
0x800E1664:("Collision_ResetTriForAT",),
0x800E1688:("Collision_ResetTriForAC",),
0x800E16AC:("func_800E16AC",),
0x800E16D0:("Collision_InitTriGroupDefault",),
0x800E16FC:("func_800E16FC",),
0x800E17B4:("Collision_FiniTriGroup",),
0x800E1858:("func_800E1858",),
0x800E1958:("Collision_InitTriGroupWithData",),
0x800E1A24:("Collision_InitTriGroup",),
0x800E1A78:("Collision_ResetTriGroupForAT",),
0x800E1B18:("Collision_ResetTriGroupForAC",),
0x800E1BB8:("Collision_ResetTriGroupForOT",),
0x800E1C58:("Collision_InitQuadParamsDefault",),
0x800E1CA4:("Collision_FiniQuadParams",),
0x800E1CB8:("Collision_ResetQuadParamsForAT",),
0x800E1CD4:("Collision_QuadCalcMidpoints",),
0x800E1D90:("Collision_InitQuadParamsWithData",),
0x800E1E18:("Collision_InitQuadDefault",),
0x800E1E68:("Collision_FiniQuad",),
0x800E1EB8:("func_800E1EB8",),
0x800E1F20:("Collision_InitQuadWithData",),
0x800E1F88:("Collision_InitQuad",),
0x800E1FD4:("Collision_ResetQuadForAT",),
0x800E2024:("Collision_ResetQuadForAC",),
0x800E2064:("Collision_ResetQuadForOT",),
0x800E20A4:("func_800E20A4",),
0x800E2154:("Collision_InitSphereDefault",),
0x800E21A4:("Collision_FiniSphere",),
0x800E21F4:("Collision_InitSphereWithData",),
0x800E225C:("Collision_InitSphere",),
0x800E22A8:("Collision_ResetSphereForAT",),
0x800E22E8:("Collision_ResetSphereForAC",),
0x800E2328:("Collision_ResetSphereForOT",),
0x800E2368:("func_800E2368",),
0x800E23B0:("func_800E23B0",),
0x800E23C4:("func_800E23C4",),
0x800E2408:("func_800E2408",),
0x800E2434:("func_800E2434",),
0x800E2450:("Collision_Init",),
0x800E2470:("Collision_Fini",),
0x800E2480:("Collision_Reset",),
0x800E2528:("Collision_EnableEditMode",),
0x800E2540:("Collision_EnableAppendMode",),
0x800E2558:("Collision_AddAT",),
0x800E2634:("Collision_AddIndexAT",),
0x800E2740:("Collision_AddAC",),
0x800E281C:("collision_AddIndexAC",),
0x800E2928:("Collision_AddOT",),
0x800E2A04:("Collision_AddIndexOT",),
0x800E2B10:("Collision_AddGroup4",),
0x800E2B98:("Collision_CantBeToucherAC",),
0x800E2BBC:("Collision_CantBeBumperAC",),
0x800E2BE0:("Collision_ToucherIsExcluded",),
0x800E2C08:("func_800E2C08",),
0x800E2C1C:("func_800E2C1C",),
0x800E2D88:("func_800E2D88",),
0x800E2EF4:("func_800E2EF4",),
0x800E2F30:("func_800E2F30",),
0x800E2F54:("func_800E2F54",),
0x800E2F78:("func_800E2F78",),
0x800E30C8:("func_800E30C8",),
0x800E3168:("func_800E3168",),
0x800E3304:("func_800E3304",),
0x800E3324:("Collision_HandleCollisionATWithAC",),
0x800E35C8:("Collision_TriCalcAvgPoint",),
0x800E362C:("collision_quad_cal_avg_point",),
0x800E36AC:("Collision_SphereGroupWithSphereGroupAC",),
0x800E38F8:("Collision_SphereGroupWithCylinderAC",),
0x800E3B18:("Collision_SphereGroupWithTriGroupAC",),
0x800E3CC0:("Collision_SphereGroupWithQuadAC",),
0x800E3E6C:("Collision_SphereGroupWithSphereAC",),
0x800E4058:("Collision_CylinderWithSphereGroupAC",),
0x800E4298:("Collision_CylinderWithCylinderAC",),
0x800E44C0:("Collision_CylinderWithTriGroupAC",),
0x800E4628:("Collision_CylinderWithQuadAC",),
0x800E47B8:("Collision_CylinderWithSphereAC",),
0x800E494C:("Collision_TriGroupWithSphereGroupAC",),
0x800E4B08:("Collision_TriGroupWithCylinderAC",),
0x800E4C70:("Collision_TriGroupWithTriGroupAC",),
0x800E4E24:("Collision_TriGroupWithQuad",),
0x800E4FE4:("Collision_TriGroupWithSphereAC",),
0x800E5154:("Collision_QuadWithSphereGroupAC",),
0x800E531C:("Collision_QuadWithCylinderAC",),
0x800E54DC:("Collision_QuadWithTriGroupAC",),
0x800E56B8:("Collision_QuadWithQuadAC",),
0x800E5874:("Collision_QuadWithSphereAC",),
0x800E59A4:("Collision_SphereWithSphereGroupAC",),
0x800E5B94:("Collision_SphereWithCylinderAC",),
0x800E5D10:("Collision_SphereWithTriGroupAC",),
0x800E5E54:("Collision_SphereWithQuadAC",),
0x800E5F6C:("Collision_SphereWithSphereAC",),
0x800E60C0:("func_800E60C0",),
0x800E61A0:("func_800E61A0",),
0x800E6238:("func_800E6238",),
0x800E6320:("func_800E6320",),
0x800E63B8:("func_800E63B8",),
0x800E6450:("func_800E6450",),
0x800E6524:("Collision_CollideWithAC",),
0x800E6654:("Collision_DoATWithAC",),
0x800E6724:("func_800E6724",),
0x800E6760:("Collision_HandleCollisionOTWithOT",),
0x800E6A9C:("Collision_SphereGroupWithSphereGroupOT",),
0x800E6C84:("Collision_SphereGroupWithCylinderOT",),
0x800E6DF4:("Collision_SphereGroupWithSphereOT",),
0x800E6F64:("Collision_CylinderWithSphereGroupOT",),
0x800E6F90:("Collision_CylinderWithCylinderOT",),
0x800E7060:("Collision_CylinderWithSphereOT",),
0x800E7130:("Collision_SphereWithSphereGroupOT",),
0x800E715C:("Collision_SphereWithCylinderOT",),
0x800E7188:("Collision_SphereWithSphereOT",),
0x800E7264:("func_800E7264",),
0x800E7288:("func_800E7288",),
0x800E7308:("Collision_DoOTWithOT",),
0x800E7494:("func_800E7494",),
0x800E74DC:("func_800E74DC",),
0x800E7508:("func_800E7508",),
0x800E7530:("func_800E7530",),
0x800E755C:("func_800E755C",),
0x800E7590:("func_800E7590",),
0x800E75C8:("func_800E75C8",),
0x800E77EC:("func_800E77EC",),
0x800E7894:("func_800E7894",),
0x800E78B4:("func_800E78B4",),
0x800E7948:("func_800E7948",),
0x800E7968:("func_800E7968",),
0x800E7988:("func_800E7988",),
0x800E7A48:("func_800E7A48",),
0x800E7B54:("func_800E7B54",),
0x800E7BCC:("func_800E7BCC",),
0x800E7C64:("func_800E7C64",),
0x800E7DA8:("func_800E7DA8",),
0x800E7DCC:("func_800E7DCC",),
0x800E7DF8:("Collision_CylinderMoveToActor",),
0x800E7E3C:("Collision_CylinderSetLoc",),
0x800E7E5C:("Collision_QuadSetCoords",),
0x800E7ECC:("Collision_TriGroupSetCoordsAtIndex",),
0x800E7F8C:("Collision_InitTriParamsAtIndex",),
0x800E7FDC:("func_800E7FDC",),
0x800E8160:("func_800E8160",),
0x800E823C:("func_800E823C",),
0x800E8318:("func_800E8318",),
0x800E8478:("func_800E8478",),
0x800E85D4:("func_800E85D4",),
0x800E8668:("func_800E8668",),
0x800E8690:("func_800E8690",),
0x800E86C0:("func_800E86C0",),
0x800E86E0:("func_800E86E0",),
0x800E8784:("func_800E8784",),
0x800E03A0:("DamageTable_Get",),
0x800E03CC:("DamageTable_Clear",),
0x800E0410:("CollisionCheck_GetDamageAndEffectOnBumper",),
0x800E04BC:("CollisionCheck_ApplyBumperDefense",),
0x800E04EC:("CollisionCheck_GetToucherDamage",),
0x800E0538:("Collider_InitBase",),
0x800E0580:("Collider_DestroyBase",),
0x800E0594:("Collider_SetBaseToActor",),
0x800E05D4:("Collider_SetBaseType1",),
0x800E0618:("Collider_SetBase",),
0x800E065C:("Collider_ResetATBase",),
0x800E0678:("Collider_ResetACBase",),
0x800E0694:("Collider_ResetOCBase",),
0x800E06BC:("Collider_InitTouch",),
0x800E06E4:("Collider_DestroyTouch",),
0x800E06F8:("Collider_SetTouch",),
0x800E0720:("Collider_ResetATInfoUnk",),
0x800E0730:("Collider_InitBump",),
0x800E0760:("Collider_DestroyBump",),
0x800E0774:("Collider_SetBump",),
0x800E079C:("Collider_InitInfo",),
0x800E081C:("Collider_DestroyInfo",),
0x800E085C:("Collider_SetInfo",),
0x800E08D4:("Collider_ResetATInfo",),
0x800E090C:("Collider_ResetACInfo",),
0x800E0944:("Collider_ResetOCInfo",),
0x800E095C:("Collider_InitJntSphElementDim",),
0x800E09A4:("Collider_DestroyJntSphElementDim",),
0x800E09B8:("Collider_SetJntSphElementDim",),
0x800E0A10:("Collider_InitJntSphElement",),
0x800E0A50:("Collider_DestroyJntSphElement",),
0x800E0A90:("Collider_SetJntSphElement",),
0x800E0AE0:("Collider_ResetJntSphElementAT",),
0x800E0B04:("Collider_ResetJntSphElementAC",),
0x800E0B28:("Collider_ResetJntSphElementOC",),
0x800E0B4C:("Collider_InitJntSph",),
0x800E0B78:("Collider_FreeJntSph",),
0x800E0C18:("Collider_DestroyJntSph",),
0x800E0CA8:("Collider_SetJntSphToActor",),
0x800E0D84:("Collider_SetJntSphAllocType1",),
0x800E0E60:("Collider_SetJntSph",),
0x800E0F14:("Collider_InitAndSetJntSph",),
0x800E0F68:("Collider_ResetJntSphAT",),
0x800E0FF4:("Collider_ResetJntSphAC",),
0x800E1080:("Collider_ResetJntSphOC",),
0x800E110C:("Collider_InitCylinderDim",),
0x800E1148:("Collider_DestroyCylinderDim",),
0x800E115C:("Collider_SetCylinderDim",),
0x800E119C:("Collider_InitCylinder",),
0x800E11EC:("Collider_DestroyCylinder",),
0x800E123C:("Collider_SetCylinderToActor",),
0x800E12A4:("Collider_SetCylinderType1",),
0x800E130C:("Collider_SetCylinder",),
0x800E1374:("Collider_InitAndSetCylinder",),
0x800E13C0:("Collider_ResetCylinderAT",),
0x800E1400:("Collider_ResetCylinderAC",),
0x800E1440:("Collider_ResetCylinderOC",),
0x800E1480:("Collider_InitTrisElementDim",),
0x800E14CC:("Collider_DestroyTrisElementDim",),
0x800E14E0:("Collider_SetTrisElementDim",),
0x800E1594:("Collider_InitTrisElement",),
0x800E15D4:("Collider_DestroyTrisElement",),
0x800E1614:("Collider_SetTrisElement",),
0x800E1664:("Collider_ResetTrisElementAT",),
0x800E1688:("Collider_ResetTrisElementAC",),
0x800E16AC:("Collider_ResetTrisElementOC",),
0x800E16D0:("Collider_InitTris",),
0x800E16FC:("Collider_FreeTris",),
0x800E17B4:("Collider_DestroyTris",),
0x800E1858:("Collider_SetTrisAllocType1",),
0x800E1958:("Collider_SetTris",),
0x800E1A24:("Collider_InitAndSetTris",),
0x800E1A78:("Collider_ResetTrisAT",),
0x800E1B18:("Collider_ResetTrisAC",),
0x800E1BB8:("Collider_ResetTrisOC",),
0x800E1C58:("Collider_InitQuadDim",),
0x800E1CA4:("Collider_DestroyQuadDim",),
0x800E1CB8:("Collider_ResetQuadACDist",),
0x800E1CD4:("Collider_SetQuadMidpoints",),
0x800E1D90:("Collider_SetQuadDim",),
0x800E1E18:("Collider_InitQuad",),
0x800E1E68:("Collider_DestroyQuad",),
0x800E1EB8:("Collider_SetQuadType1",),
0x800E1F20:("Collider_SetQuad",),
0x800E1F88:("Collider_InitAndSetQuad",),
0x800E1FD4:("Collider_ResetQuadAT",),
0x800E2024:("Collider_ResetQuadAC",),
0x800E2064:("Collider_ResetQuadOC",),
0x800E20A4:("Collider_QuadSetNearestAC",),
0x800E2154:("Collider_InitSphere",),
0x800E21A4:("Collider_DestroySphere",),
0x800E21F4:("Collider_SetSphere",),
0x800E225C:("Collider_InitAndSetSphere",),
0x800E22A8:("Collider_ResetSphereAT",),
0x800E22E8:("Collider_ResetSphereAC",),
0x800E2328:("Collider_ResetSphereOC",),
0x800E2368:("Collider_InitLine",),
0x800E23B0:("Collider_DestroyLine",),
0x800E23C4:("Collider_SetLinePoints",),
0x800E2408:("Collider_SetLine",),
0x800E2434:("Collider_ResetLineOC",),
0x800E2450:("CollisionCheck_InitContext",),
0x800E2470:("CollisionCheck_DestroyContext",),
0x800E2480:("CollisionCheck_ClearContext",),
0x800E2528:("CollisionCheck_EnableSAC",),
0x800E2540:("CollisionCheck_DisableSAC",),
0x800E2558:("CollisionCheck_SetAT",),
0x800E2634:("CollisionCheck_SetAT_SAC",),
0x800E2740:("CollisionCheck_SetAC",),
0x800E281C:("CollisionCheck_SetAC_SAC",),
0x800E2928:("CollisionCheck_SetOC",),
0x800E2A04:("CollisionCheck_SetOC_SAC",),
0x800E2B10:("CollisionCheck_SetOCLine",),
0x800E2B98:("CollisionCheck_SkipTouch",),
0x800E2BBC:("CollisionCheck_SkipBump",),
0x800E2BE0:("CollisionCheck_NoSharedFlags",),
0x800E2C08:("CollisionCheck_NoBlood",),
0x800E2C1C:("CollisionCheck_BlueBlood",),
0x800E2D88:("CollisionCheck_GreenBlood",),
0x800E2EF4:("CollisionCheck_WaterBurst",),
0x800E2F30:("CollisionCheck_RedBlood",),
0x800E2F54:("CollisionCheck_RedBloodUnused",),
0x800E2F78:("CollisionCheck_HitSolid",),
0x800E30C8:("CollisionCheck_SwordHitAudio",),
0x800E3168:("CollisionCheck_HitEffects",),
0x800E3304:("CollisionCheck_SetBounce",),
0x800E3324:("CollisionCheck_SetATvsAC",),
0x800E35C8:("CollisionCheck_TrisAvgPoint",),
0x800E362C:("CollisionCheck_QuadAvgPoint",),
0x800E36AC:("CollisionCheck_AC_JntSphVsJntSph",),
0x800E38F8:("CollisionCheck_AC_JntSphVsCyl",),
0x800E3B18:("CollisionCheck_AC_JntSphVsTris",),
0x800E3CC0:("CollisionCheck_AC_JntSphVsQuad",),
0x800E3E6C:("CollisionCheck_AC_JntSphVsSphere",),
0x800E4058:("CollisionCheck_AC_CylVsJntSph",),
0x800E4298:("CollisionCheck_AC_CylVsCyl",),
0x800E44C0:("CollisionCheck_AC_CylVsTris",),
0x800E4628:("CollisionCheck_AC_CylVsQuad",),
0x800E47B8:("CollisionCheck_AC_CylVsSphere",),
0x800E494C:("CollisionCheck_AC_TrisVsJntSph",),
0x800E4B08:("CollisionCheck_AC_TrisVsCyl",),
0x800E4C70:("CollisionCheck_AC_TrisVsTris",),
0x800E4E24:("CollisionCheck_AC_TrisVsQuad",),
0x800E4FE4:("CollisionCheck_AC_TrisVsSphere",),
0x800E5154:("CollisionCheck_AC_QuadVsJntSph",),
0x800E531C:("CollisionCheck_AC_QuadVsCyl",),
0x800E54DC:("CollisionCheck_AC_QuadVsTris",),
0x800E56B8:("CollisionCheck_AC_QuadVsQuad",),
0x800E5874:("CollisionCheck_AC_QuadVsSphere",),
0x800E59A4:("CollisionCheck_AC_SphereVsJntSph",),
0x800E5B94:("CollisionCheck_AC_SphereVsCylinder",),
0x800E5D10:("CollisionCheck_AC_SphereVsTris",),
0x800E5E54:("CollisionCheck_AC_SphereVsQuad",),
0x800E5F6C:("CollisionCheck_AC_SphereVsSphere",),
0x800E60C0:("CollisionCheck_SetJntSphHitFX",),
0x800E61A0:("CollisionCheck_SetCylHitFX",),
0x800E6238:("CollisionCheck_SetTrisHitFX",),
0x800E6320:("CollisionCheck_SetQuadHitFX",),
0x800E63B8:("CollisionCheck_SetSphereHitFX",),
0x800E6450:("CollisionCheck_SetHitEffects",),
0x800E6524:("CollisionCheck_AC",),
0x800E6654:("CollisionCheck_AT",),
0x800E6724:("CollisionCheck_GetMassType",),
0x800E6760:("CollisionCheck_SetOCvsOC",),
0x800E6A9C:("CollisionCheck_OC_JntSphVsJntSph",),
0x800E6C84:("CollisionCheck_OC_JntSphVsCyl",),
0x800E6DF4:("CollisionCheck_OC_JntSphVsSphere",),
0x800E6F64:("CollisionCheck_OC_CylVsJntSph",),
0x800E6F90:("CollisionCheck_OC_CylVsCyl",),
0x800E7060:("CollisionCheck_OC_CylVsSphere",),
0x800E7130:("CollisionCheck_OC_SphereVsJntSph",),
0x800E715C:("CollisionCheck_OC_SphereVsCyl",),
0x800E7188:("CollisionCheck_OC_SphereVsSphere",),
0x800E7264:("CollisionCheck_SkipOC",),
0x800E7288:("CollisionCheck_Incompatible",),
0x800E7308:("CollisionCheck_OC",),
0x800E7494:("CollisionCheck_InitInfo",),
0x800E74DC:("CollisionCheck_ResetDamage",),
0x800E7508:("CollisionCheck_SetInfoNoDamageTable",),
0x800E7530:("CollisionCheck_SetInfo",),
0x800E755C:("CollisionCheck_SetInfo2",),
0x800E7590:("CollisionCheck_SetInfoGetDamageTable",),
0x800E75C8:("CollisionCheck_ApplyDamage",),
0x800E77EC:("CollisionCheck_ApplyDamageJntSph",),
0x800E7894:("CollisionCheck_ApplyDamageCyl",),
0x800E78B4:("CollisionCheck_ApplyDamageTris",),
0x800E7948:("CollisionCheck_ApplyDamageQuad",),
0x800E7968:("CollisionCheck_ApplyDamageSphere",),
0x800E7988:("CollisionCheck_Damage",),
0x800E7A48:("CollisionCheck_LineOC_JntSph",),
0x800E7B54:("CollisionCheck_LineOC_Cyl",),
0x800E7BCC:("CollisionCheck_LineOC_Sphere",),
0x800E7C64:("CollisionCheck_LineOC",),
0x800E7DA8:("CollisionCheck_LineOCCheckAll",),
0x800E7DCC:("CollisionCheck_LineOCCheck",),
0x800E7DF8:("Collider_UpdateCylinder",),
0x800E7E3C:("Collider_SetCylinderPosition",),
0x800E7E5C:("Collider_SetQuadVertices",),
0x800E7ECC:("Collider_SetTrisVertices",),
0x800E7F8C:("Collider_SetTrisDim",),
0x800E7FDC:("Collider_UpdateSpheres",),
0x800E8160:("Collider_UpdateSpheresElement",),
0x800E823C:("Collider_UpdateSphere",),
0x800E8318:("CollisionCheck_SpawnRedBlood",),
0x800E8478:("CollisionCheck_SpawnWaterDroplets",),
0x800E85D4:("CollisionCheck_SpawnShieldParticles",),
0x800E8668:("CollisionCheck_SpawnShieldParticlesMetal",),
0x800E8690:("CollisionCheck_SpawnShieldParticlesMetalSound",),
0x800E86C0:("CollisionCheck_SpawnShieldParticlesMetal2",),
0x800E86E0:("CollisionCheck_SpawnShieldParticlesWood",),
0x800E8784:("CollisionCheck_CylSideVsLineSeg",),
0x800E8EA0:("func_800E8EA0",),
0x800E8ED0:("nop_800E8ED0",),
0x800E8EE0:("nop_800E8EE0",),
+3 -2
View File
@@ -274,7 +274,7 @@
0x800CAE10:"",
0x800CB000:"",
0x800CB210:"z_camera",
0x800E03A0:"",
0x800E03A0:"z_collision_btltbls",
0x800E0410:"z_collision_check",
0x800E8EA0:"",
0x800E9360:"",
@@ -405,7 +405,8 @@
0x801AEFD0:"code_data_z_actor_dlftbls",
0x801B4620:"code_data_z_bgcheck",
0x801B4710:"code_data_z_camera",
0x801B9F20:"code_data_z_collision_check",
0x801B9F20:"code_data_z_collision_btltbls",
0x801BA200:"code_data_z_collision_check",
0x801BA550:"code_data_z_debug_display",
0x801BB090:"code_data_z_debug_mode",
0x801BB170:"code_data_z_draw",
+66 -85
View File
@@ -354,11 +354,11 @@
0x801AAAB0:("D_801AAAB0","UNK_TYPE1","",0x1),
0x801AD370:("D_801AD370","UNK_TYPE1","",0x1),
0x801ADE60:("En_A_Obj_InitVars","ActorInit","",0x20),
0x801ADE80:("enAObjCylinderInit","ColCylinderInit","",0x2c),
0x801ADE80:("enAObjCylinderInit","ColliderCylinderInit","",0x2c),
0x801ADEAC:("enAObjInitVar","ActorInitVar","",0x4),
0x801ADEB0:("enAObjDisplayLists","u32","[2]",0x8),
0x801ADEC0:("En_Item00_InitVars","ActorInit","",0x20),
0x801ADEE0:("enItem00CylinderInit","ColCylinderInit","",0x2c),
0x801ADEE0:("enItem00CylinderInit","ColliderCylinderInit","",0x2c),
0x801ADF0C:("enItem00InitVars","ActorInitVar","[1]",0x4),
0x801ADF10:("D_801ADF10","UNK_TYPE1","",0x1),
0x801ADF14:("D_801ADF14","UNK_TYPE1","",0x1),
@@ -853,37 +853,30 @@
0x801B9F04:("D_801B9F04","UNK_TYPE4","",0x4),
0x801B9F0C:("D_801B9F0C","UNK_TYPE2","",0x2),
0x801B9F10:("D_801B9F10","UNK_TYPE4","",0x4),
0x801B9F20:("D_801B9F20","s800E03A0","[23]",0x2e0),
0x801BA200:("gDamageMultipliers","f32","[16]",0x40),
0x801BA240:("defaultColCommon","ColCommon","",0x18),
0x801BA258:("defaultColTouch","ColTouch","",0x8),
0x801BA260:("defaultColBump","ColBump","",0xc),
0x801BA26C:("defaultColBodyInfo","ColBodyInfo","",0x28),
0x801BA294:("defaultColSphereInfo","ColSphereParams","",0x18),
0x801BA2AC:("defaultColCylinderInfo","ColCylinderParams","",0xc),
0x801BA2B8:("defaultColTriParams","ColTriParams","",0x34),
0x801BA2EC:("defaultColQuadParams","ColQuadParams","",0x40),
0x801BA32C:("D_801BA32C","UNK_TYPE1","",0x1),
0x801BA338:("collisionAddATFuncs","collision_add_func","[5]",0x14),
0x801BA34C:("collisionAddACFuncs","collision_add_func","[5]",0x14),
0x801BA360:("collisionAddOTFuncs","collision_add_func","[5]",0x14),
0x801BA374:("D_801BA374","UNK_PTR","",0x4),
0x801BA38C:("D_801BA38C","UNK_TYPE1","",0x1),
0x801BA38D:("D_801BA38D","UNK_TYPE1","",0x1),
0x801BA3A8:("D_801BA3A8","UNK_PTR","",0x4),
0x801BA3BC:("collisionFuncTableATwithAC","collision_func","[25]",0x64),
0x801BA420:("collisionFuncTableOTwithOT","collision_func","[25]",0x64),
0x801BA484:("D_801BA484","CollisionCheckInfo","",0x1c),
0x801BA4A0:("D_801BA4A0","UNK_PTR","",0x4),
0x801BA4B4:("D_801BA4B4","UNK_TYPE1","",0x1),
0x801BA4C8:("D_801BA4C8","EffShieldParticleInit","",0x40),
0x801BA4F6:("D_801BA4F6","UNK_TYPE1","",0x1),
0x801BA4F8:("D_801BA4F8","UNK_TYPE1","",0x1),
0x801BA4FA:("D_801BA4FA","UNK_TYPE1","",0x1),
0x801BA508:("D_801BA508","EffShieldParticleInit","",0x40),
0x801BA536:("D_801BA536","UNK_TYPE1","",0x1),
0x801BA538:("D_801BA538","UNK_TYPE1","",0x1),
0x801BA53A:("D_801BA53A","UNK_TYPE1","",0x1),
0x801B9F20:("sDamageTablePresets","DamageTable","[23]",0x2e0),
0x801BA200:("damageMultipliers","f32","[16]",0x40),
0x801BA240:("defaultCollider","Collider","",0x18),
0x801BA258:("defaultColliderTouch","ColliderTouch","",0x8),
0x801BA260:("defaultColliderBump","ColliderBump","",0xc),
0x801BA26C:("defaultColliderInfo","ColliderInfo","",0x28),
0x801BA294:("defaultColliderJntSphElementDim","ColliderJntSphElementDim","",0x18),
0x801BA2AC:("defaultColliderCylinderDim","Cylinder16","",0xc),
0x801BA2B8:("defaultColliderTrisElementDim","TriNorm","",0x34),
0x801BA2EC:("defaultColliderQuadDim","ColliderQuadDim","",0x40),
0x801BA32C:("defaultLinePoint","Vec3f","",0xC),
0x801BA338:("sATResetFuncs","ColChkResetFunc","[5]",0x14),
0x801BA34C:("sACResetFuncs","ColChkResetFunc","[5]",0x14),
0x801BA360:("sOCResetFuncs","ColChkResetFunc","[5]",0x14),
0x801BA374:("sBloodFuncs","ColChkBloodFunc","[]",0x18),
0x801BA38C:("sHitInfo","HitInfo","[]",0x1C),
0x801BA3A8:("sColChkApplyFuncs","ColChkApplyFunc","",0x14),
0x801BA3BC:("sACVsFuncs","ColChkVsFunc","[5][5]",0x64),
0x801BA420:("sOCVsFuncs","ColChkVsFunc","[5][5]",0x64),
0x801BA484:("defaultColChkInfo","CollisionCheckInfo","",0x1c),
0x801BA4A0:("sApplyDamageFuncs","ColChkApplyFunc","",0x14),
0x801BA4B4:("sOCLineCheckFuncs","ColChkLineFunc","",0x14),
0x801BA4C8:("shieldParticleInitMetal","EffShieldParticleInit","",0x40),
0x801BA508:("shieldParticleInitWood","EffShieldParticleInit","",0x40),
0x801BA550:("D_801BA550","UNK_TYPE1","",0x1),
0x801BA750:("D_801BA750","UNK_TYPE1","",0x1),
0x801BA790:("D_801BA790","UNK_TYPE1","",0x1),
@@ -936,7 +929,7 @@
0x801BD8C0:("actorCutscenesGlobalCtxt","GlobalContext*","",0x4),
0x801BD8C4:("actorCutsceneReturnCamera","s16","",0x2),
0x801BD8C6:("D_801BD8C6","s16","",0x2),
0x801BD8D0:("fireObjCollisionInit","ColCylinderInit","",0x2c),
0x801BD8D0:("fireObjCollisionInit","ColliderCylinderInit","",0x2c),
0x801BD8FC:("D_801BD8FC","FireObjLightParams","[2]",0x10),
0x801BD910:("initialGameStateInfo","GameStateOverlay","",0x30),
0x801BD940:("D_801BD940","GameStateOverlay","",0x30),
@@ -3980,8 +3973,8 @@
0x801EDB9C:("D_801EDB9C","f32","",0x4),
0x801EDBA0:("D_801EDBA0","f32","",0x4),
0x801EDBA4:("D_801EDBA4","UNK_TYPE1","",0x1),
0x801EDBA8:("D_801EDBA8","ColSphereCollisionInfo","",0x8),
0x801EDBB0:("D_801EDBB0","ColTriParams","",0x34),
0x801EDBA8:("D_801EDBA8","Sphere16","",0x8),
0x801EDBB0:("D_801EDBB0","TriNorm","",0x34),
0x801EDBD4:("D_801EDBD4","UNK_TYPE1","",0x1),
0x801EDBD8:("D_801EDBD8","UNK_TYPE1","",0x1),
0x801EDBDC:("D_801EDBDC","UNK_TYPE1","",0x1),
@@ -4008,54 +4001,42 @@
0x801EDDE0:("D_801EDDE0","UNK_TYPE1","",0x1),
0x801EDDF0:("D_801EDDF0","UNK_TYPE1","",0x1),
0x801EDE00:("D_801EDE00","Vec3f","",0xc),
0x801EDE10:("D_801EDE10","UNK_TYPE1","",0x1),
0x801EDE10:("D_801EDE10","Vec3f","",0xc),
0x801EDE20:("D_801EDE20","Vec3f","",0xc),
0x801EDE30:("D_801EDE30","UNK_TYPE1","",0x1),
0x801EDE40:("D_801EDE40","UNK_TYPE1","",0x1),
0x801EDE78:("D_801EDE78","UNK_TYPE1","",0x1),
0x801EDEB0:("D_801EDEB0","UNK_TYPE1","",0x1),
0x801EDEBC:("D_801EDEBC","UNK_TYPE1","",0x1),
0x801EDEC8:("D_801EDEC8","UNK_TYPE1","",0x1),
0x801EDF00:("D_801EDF00","UNK_TYPE1","",0x1),
0x801EDF38:("D_801EDF38","UNK_TYPE1","",0x1),
0x801EDF48:("D_801EDF48","UNK_TYPE1","",0x1),
0x801EDF58:("D_801EDF58","UNK_TYPE1","",0x1),
0x801EDF90:("D_801EDF90","UNK_TYPE1","",0x1),
0x801EDFC8:("D_801EDFC8","UNK_TYPE1","",0x1),
0x801EDFD4:("D_801EDFD4","UNK_TYPE1","",0x1),
0x801EDFE0:("D_801EDFE0","UNK_TYPE1","",0x1),
0x801EDFF0:("D_801EDFF0","UNK_TYPE1","",0x1),
0x801EE000:("D_801EE000","UNK_TYPE1","",0x1),
0x801EE038:("D_801EE038","UNK_TYPE1","",0x1),
0x801EE070:("D_801EE070","UNK_TYPE1","",0x1),
0x801EE0A4:("D_801EE0A4","UNK_TYPE1","",0x1),
0x801EE0D8:("D_801EE0D8","UNK_TYPE1","",0x1),
0x801EE0E8:("D_801EE0E8","UNK_TYPE1","",0x1),
0x801EE11C:("D_801EE11C","UNK_TYPE1","",0x1),
0x801EE150:("D_801EE150","UNK_TYPE1","",0x1),
0x801EE188:("D_801EE188","UNK_TYPE1","",0x1),
0x801EE1C0:("D_801EE1C0","UNK_TYPE1","",0x1),
0x801EE1C4:("D_801EE1C4","UNK_TYPE1","",0x1),
0x801EE1C8:("D_801EE1C8","UNK_TYPE1","",0x1),
0x801EE1D0:("D_801EE1D0","UNK_TYPE1","",0x1),
0x801EE1D4:("D_801EE1D4","UNK_TYPE1","",0x1),
0x801EE1D8:("D_801EE1D8","UNK_TYPE1","",0x1),
0x801EE1E0:("D_801EE1E0","UNK_TYPE1","",0x1),
0x801EE1E4:("D_801EE1E4","UNK_TYPE1","",0x1),
0x801EE1E8:("D_801EE1E8","UNK_TYPE1","",0x1),
0x801EE1F0:("D_801EE1F0","UNK_TYPE1","",0x1),
0x801EE1F4:("D_801EE1F4","UNK_TYPE1","",0x1),
0x801EE1F8:("D_801EE1F8","UNK_TYPE1","",0x1),
0x801EDE30:("D_801EDE30","Vec3f","",0xc),
0x801EDE40:("D_801EDE40","TriNorm","",0x34),
0x801EDE78:("D_801EDE78","TriNorm","",0x34),
0x801EDEB0:("D_801EDEB0","LineSegment","",0x18),
0x801EDEC8:("D_801EDEC8","TriNorm","",0x34),
0x801EDF00:("D_801EDF00","TriNorm","",0x34),
0x801EDF38:("D_801EDF38","Vec3f","",0xC),
0x801EDF48:("D_801EDF48","Vec3f","",0xC),
0x801EDF58:("D_801EDF58","TriNorm","",0x34),
0x801EDF90:("D_801EDF90","TriNorm","",0x34),
0x801EDFC8:("D_801EDFC8","LineSegment","",0x18),
0x801EDFE0:("D_801EDFE0","Vec3f","",0xC),
0x801EDFF0:("D_801EDFF0","Vec3f","",0xC),
0x801EE000:("D_801EE000","TriNorm","",0x34),
0x801EE038:("D_801EE038","TriNorm","",0x34),
0x801EE070:("D_801EE070","TriNorm","[]",0x68),
0x801EE0D8:("D_801EE0D8","Vec3f","",0xC),
0x801EE0E8:("D_801EE0E8","TriNorm","[]",0x68),
0x801EE150:("D_801EE150","TriNorm","",0x34),
0x801EE188:("D_801EE188","TriNorm","",0x34),
0x801EE1C0:("D_801EE1C0","Vec3f","",0xC),
0x801EE1D0:("D_801EE1D0","Vec3f","",0xC),
0x801EE1E0:("D_801EE1E0","Vec3f","",0xC),
0x801EE1F0:("D_801EE1F0","Vec3f","",0xC),
0x801EE200:("D_801EE200","EffSparkParams","",0x4c4),
0x801EE6C8:("D_801EE6C8","ColTriParams","",0x34),
0x801EE700:("D_801EE700","ColTriParams","",0x34),
0x801EE6C8:("D_801EE6C8","TriNorm","",0x34),
0x801EE700:("D_801EE700","TriNorm","",0x34),
0x801EE738:("D_801EE738","EffSparkParams","",0x4c4),
0x801EEC00:("D_801EEC00","EffSparkParams","",0x4c4),
0x801EF0C8:("D_801EF0C8","EffSparkParams","",0x4c4),
0x801EF590:("D_801EF590","UNK_TYPE1","",0x1),
0x801EF5C8:("D_801EF5C8","UNK_TYPE1","",0x1),
0x801EF600:("D_801EF600","ColTriParams","",0x34),
0x801EF638:("D_801EF638","ColTriParams","",0x34),
0x801EF590:("D_801EF590","TriNorm","",0x34),
0x801EF5C8:("D_801EF5C8","TriNorm","",0x34),
0x801EF600:("D_801EF600","TriNorm","",0x34),
0x801EF638:("D_801EF638","TriNorm","",0x34),
0x801EF66D:("D_801EF66D","UNK_TYPE1","",0x1),
0x801EF670:("gSaveContext","SaveContext","",0x48c8),
0x801F3F38:("D_801F3F38","UNK_TYPE2","",0x2),
@@ -6015,9 +5996,9 @@
0x80870DAC:("enOkutaOverlayInfoOffset","u32","",0x4),
0x80872DA0:("En_Bom_InitVars","ActorInit","",0x20),
0x80872DC0:("enBomScales","f32","[2]",0x8),
0x80872DC8:("D_80872DC8","ColCylinderInit","",0x2c),
0x80872DF4:("D_80872DF4","ColSphereGroupElementInit","[1]",0x24),
0x80872E18:("D_80872E18","ColSphereGroupInit","",0x10),
0x80872DC8:("D_80872DC8","ColliderCylinderInit","",0x2c),
0x80872DF4:("D_80872DF4","ColliderJntSphElementInit","[1]",0x24),
0x80872E18:("D_80872E18","ColliderJntSphInit","",0x10),
0x80872E28:("D_80872E28","UNK_TYPE1","",0x1),
0x80872E4C:("D_80872E4C","UNK_TYPE1","",0x1),
0x80872E5C:("D_80872E5C","ActorInitVar","[3]",0xc),
@@ -6154,7 +6135,7 @@
0x80879414:("enDodongoOverlayRelocations","u32","[182]",0x2d8),
0x808796EC:("enDodongoOverlayInfoOffset","u32","",0x4),
0x8087B450:("En_Firefly_InitVars","ActorInit","",0x20),
0x8087B470:("enFireflyCollisionInit","ColSphereInit","",0x2c),
0x8087B470:("enFireflyCollisionInit","ColliderSphereInit","",0x2c),
0x8087B498:("D_8087B498","UNK_TYPE1","",0x1),
0x8087B49C:("D_8087B49C","UNK_TYPE1","",0x1),
0x8087B4A4:("enFireflyDamageTable","DamageTable","",0x20),
@@ -17805,7 +17786,7 @@
0x80BD5314:("bgIkanaBombwallOverlayRelocations","u32","[39]",0x9c),
0x80BD53BC:("bgIkanaBombwallOverlayInfoOffset","u32","",0x4),
0x80BD55D0:("Bg_Ikana_Ray_InitVars","ActorInit","",0x20),
0x80BD55F0:("bgIkanaRayCylinderInit","ColCylinderInit","",0x2c),
0x80BD55F0:("bgIkanaRayCylinderInit","ColliderCylinderInit","",0x2c),
0x80BD561C:("bgIkanaRayCompInit","ActorInitVar","[4]",0x10),
0x80BD5630:("bgIkanaRayOverlayInfo","OverlayRelocationSection","",0x14),
0x80BD5644:("bgIkanaRayOverlayRelocations","u32","[17]",0x44),
@@ -17849,7 +17830,7 @@
0x80BD7A04:("bgIknvDoukutuOverlayRelocations","u32","[39]",0x9c),
0x80BD7AAC:("bgIknvDoukutuOverlayInfoOffset","u32","",0x4),
0x80BD81D0:("Bg_Iknv_Obj_InitVars","ActorInit","",0x20),
0x80BD81F0:("BgIknvObjCollisionInit","ColCylinderInit","",0x2c),
0x80BD81F0:("BgIknvObjCollisionInit","ColliderCylinderInit","",0x2c),
0x80BD8220:("bgIknvObjOverlayInfo","OverlayRelocationSection","",0x14),
0x80BD8234:("bgIknvObjOverlayRelocations","u32","[27]",0x6c),
0x80BD82AC:("bgIknvObjOverlayInfoOffset","u32","",0x4),
+750
View File
@@ -0,0 +1,750 @@
#!/usr/bin/env python3
import argparse, os, struct
actor_names = [
"ovl_Player_Actor",
"ovl_En_Test",
"ovl_En_GirlA",
"ovl_En_Part",
"ovl_En_Light",
"ovl_En_Door",
"ovl_En_Box",
"ovl_En_Pametfrog",
"ovl_En_Okuta",
"ovl_En_Bom",
"ovl_En_Wallmas",
"ovl_En_Dodongo",
"ovl_En_Firefly",
"ovl_En_Horse",
"ovl_En_Item00",
"ovl_En_Arrow",
"ovl_En_Elf",
"ovl_En_Niw",
"ovl_En_Tite",
"",
"ovl_En_Peehat",
"ovl_En_Butte",
"ovl_En_Insect",
"ovl_En_Fish",
"ovl_En_Holl",
"ovl_En_Dinofos",
"ovl_En_Hata",
"ovl_En_Zl1",
"ovl_En_Viewer",
"ovl_En_Bubble",
"ovl_Door_Shutter",
"",
"ovl_En_Boom",
"ovl_En_Torch2",
"ovl_En_Minifrog",
"",
"ovl_En_St",
"",
"ovl_En_A_Obj",
"ovl_Obj_Wturn",
"ovl_En_River_Sound",
"",
"ovl_En_Ossan",
"",
"",
"ovl_En_Famos",
"",
"ovl_En_Bombf",
"",
"",
"ovl_En_Am",
"ovl_En_Dekubaba",
"ovl_En_M_Fire1",
"ovl_ovl_En_M_Thunder",
"ovl_Bg_Breakwall",
"",
"ovl_Door_Warp1",
"ovl_Obj_Syokudai",
"ovl_Item_B_Heart",
"ovl_En_Dekunuts",
"ovl_En_Bbfall",
"ovl_Arms_Hook",
"ovl_En_Bb",
"ovl_Bg_Keikoku_Spr",
"",
"ovl_En_Wood02",
"",
"ovl_En_Death",
"ovl_En_Minideath",
"",
"",
"ovl_En_Vm",
"ovl_Demo_Effect",
"ovl_Demo_Kankyo",
"ovl_En_Floormas",
"",
"ovl_En_Rd",
"ovl_Bg_F40_Flift",
"",
"ovl_Obj_Mure",
"ovl_En_Sw",
"ovl_Object_Kankyo",
"",
"",
"ovl_En_Horse_Link_Child",
"ovl_Door_Ana",
"",
"",
"",
"",
"",
"ovl_En_Encount1",
"ovl_Demo_Tre_Lgt",
"",
"",
"ovl_En_Encount2",
"ovl_En_Fire_Rock",
"ovl_Bg_Ctower_Rot",
"ovl_Mir_Ray",
"",
"ovl_En_Sb",
"ovl_En_Bigslime",
"ovl_En_Karebaba",
"ovl_En_In",
"",
"ovl_En_Ru",
"ovl_En_Bom_Chu",
"ovl_En_Horse_Game_Check",
"ovl_En_Rr",
"",
"",
"",
"",
"",
"",
"ovl_En_Fr",
"",
"",
"",
"",
"",
"",
"ovl_Obj_Oshihiki",
"ovl_Eff_Dust",
"ovl_Bg_Umajump",
"ovl_Arrow_Fire",
"ovl_Arrow_Ice",
"ovl_Arrow_Light",
"ovl_Item_Etcetera",
"ovl_Obj_Kibako",
"ovl_Obj_Tsubo",
"",
"ovl_En_Ik",
"",
"",
"",
"",
"ovl_Demo_Shd",
"ovl_En_Dns",
"ovl_Elf_Msg",
"ovl_En_Honotrap",
"ovl_En_Tubo_Trap",
"ovl_Obj_Ice_Poly",
"ovl_En_Fz",
"ovl_En_Kusa",
"ovl_Obj_Bean",
"ovl_Obj_Bombiwa",
"ovl_Obj_Switch",
"",
"ovl_Obj_Lift",
"ovl_Obj_Hsblock",
"ovl_En_Okarina_Tag",
"",
"ovl_En_Goroiwa",
"",
"",
"ovl_En_Daiku",
"ovl_En_Nwc",
"ovl_Item_Inbox",
"ovl_En_Ge1",
"ovl_Obj_Blockstop",
"ovl_En_Sda",
"ovl_En_Clear_Tag",
"",
"ovl_En_Gm",
"ovl_En_Ms",
"ovl_En_Hs",
"ovl_Bg_Ingate",
"ovl_En_Kanban",
"",
"ovl_En_Attack_Niw",
"",
"",
"",
"ovl_En_Mk",
"ovl_En_Owl",
"ovl_En_Ishi",
"ovl_Obj_Hana",
"ovl_Obj_Lightswitch",
"ovl_Obj_Mure2",
"",
"ovl_En_Fu",
"",
"",
"ovl_En_Stream",
"ovl_En_Mm",
"",
"",
"ovl_En_Weather_Tag",
"ovl_En_Ani",
"",
"ovl_En_Js",
"",
"",
"",
"",
"ovl_En_Okarina_Effect",
"ovl_En_Mag",
"ovl_Elf_Msg2",
"ovl_Bg_F40_Swlift",
"",
"",
"ovl_En_Kakasi",
"ovl_Obj_Makeoshihiki",
"ovl_Oceff_Spot",
"",
"ovl_En_Torch",
"",
"ovl_Shot_Sun",
"",
"",
"ovl_Obj_Roomtimer",
"ovl_En_Ssh",
"",
"ovl_Oceff_Wipe",
"ovl_Oceff_Storm",
"ovl_Obj_Demo",
"ovl_En_Minislime",
"ovl_En_Nutsball",
"",
"",
"",
"",
"ovl_Oceff_Wipe2",
"ovl_Oceff_Wipe3",
"",
"ovl_En_Dg",
"ovl_En_Si",
"ovl_Obj_Comb",
"ovl_Obj_Kibako2",
"",
"ovl_En_Hs2",
"ovl_Obj_Mure3",
"ovl_En_Tg",
"",
"",
"ovl_En_Wf",
"ovl_En_Skb",
"",
"ovl_En_Gs",
"ovl_Obj_Sound",
"ovl_En_Crow",
"",
"ovl_En_Cow",
"",
"",
"ovl_Oceff_Wipe4",
"",
"ovl_En_Zo",
"ovl_Obj_Makekinsuta",
"ovl_En_Ge3",
"",
"ovl_Obj_Hamishi",
"ovl_En_Zl4",
"ovl_En_Mm2",
"",
"ovl_Door_Spiral",
"",
"ovl_Obj_Pzlblock",
"ovl_Obj_Toge",
"",
"ovl_Obj_Armos",
"ovl_Obj_Boyo",
"",
"",
"ovl_En_Grasshopper",
"",
"ovl_Obj_Grass",
"ovl_Obj_Grass_Carry",
"ovl_Obj_Grass_Unit",
"",
"",
"ovl_Bg_Fire_Wall",
"ovl_En_Bu",
"ovl_En_Encount3",
"ovl_En_Jso",
"ovl_Obj_Chikuwa",
"ovl_En_Knight",
"ovl_En_Warp_tag",
"ovl_En_Aob_01",
"ovl_En_Boj_01",
"ovl_En_Boj_02",
"ovl_En_Boj_03",
"ovl_En_Encount4",
"ovl_En_Bom_Bowl_Man",
"ovl_En_Syateki_Man",
"",
"ovl_Bg_Icicle",
"ovl_En_Syateki_Crow",
"ovl_En_Boj_04",
"ovl_En_Cne_01",
"ovl_En_Bba_01",
"ovl_En_Bji_01",
"ovl_Bg_Spdweb",
"",
"",
"ovl_En_Mt_tag",
"ovl_Boss_01",
"ovl_Boss_02",
"ovl_Boss_03",
"ovl_Boss_04",
"ovl_Boss_05",
"ovl_Boss_06",
"ovl_Boss_07",
"ovl_Bg_Dy_Yoseizo",
"",
"ovl_En_Boj_05",
"",
"",
"ovl_En_Sob1",
"",
"",
"ovl_En_Go",
"",
"ovl_En_Raf",
"ovl_Obj_Funen",
"ovl_Obj_Raillift",
"ovl_Bg_Numa_Hana",
"ovl_Obj_Flowerpot",
"ovl_Obj_Spinyroll",
"ovl_Dm_Hina",
"ovl_En_Syateki_Wf",
"ovl_Obj_Skateblock",
"ovl_Obj_Iceblock",
"ovl_En_Bigpamet",
"ovl_En_Syateki_Dekunuts",
"ovl_Elf_Msg3",
"ovl_En_Fg",
"ovl_Dm_Ravine",
"ovl_Dm_Sa",
"ovl_En_Slime",
"ovl_En_Pr",
"ovl_Obj_Toudai",
"ovl_Obj_Entotu",
"ovl_Obj_Bell",
"ovl_En_Syateki_Okuta",
"",
"ovl_Obj_Shutter",
"ovl_Dm_Zl",
"ovl_En_Elfgrp",
"ovl_Dm_Tsg",
"ovl_En_Baguo",
"ovl_Obj_Vspinyroll",
"ovl_Obj_Smork",
"ovl_En_Test2",
"ovl_En_Test3",
"ovl_En_Test4",
"ovl_En_Bat",
"ovl_En_Sekihi",
"ovl_En_Wiz",
"ovl_En_Wiz_Brock",
"ovl_En_Wiz_Fire",
"ovl_Eff_Change",
"ovl_Dm_Statue",
"ovl_Obj_Fireshield",
"ovl_Bg_Ladder",
"ovl_En_Mkk",
"ovl_Demo_Getitem",
"",
"ovl_En_Dnb",
"ovl_En_Dnh",
"ovl_En_Dnk",
"ovl_En_Dnq",
"",
"ovl_Bg_Keikoku_Saku",
"ovl_Obj_Hugebombiwa",
"ovl_En_Firefly2",
"ovl_En_Rat",
"ovl_En_Water_Effect",
"ovl_En_Kusa2",
"ovl_Bg_Spout_Fire",
"",
"ovl_Bg_Dblue_Movebg",
"ovl_En_Dy_Extra",
"ovl_En_Bal",
"ovl_En_Ginko_Man",
"ovl_En_Warp_Uzu",
"ovl_Obj_Driftice",
"ovl_En_Look_Nuts",
"ovl_En_Mushi2",
"ovl_En_Fall",
"ovl_En_Mm3",
"ovl_Bg_Crace_Movebg",
"ovl_En_Dno",
"ovl_En_Pr2",
"ovl_En_Prz",
"ovl_En_Jso2",
"ovl_Obj_Etcetera",
"ovl_En_Egol",
"ovl_Obj_Mine",
"ovl_Obj_Purify",
"ovl_En_Tru",
"ovl_En_Trt",
"",
"",
"ovl_En_Test5",
"ovl_En_Test6",
"ovl_En_Az",
"ovl_En_Estone",
"ovl_Bg_Hakugin_Post",
"ovl_Dm_Opstage",
"ovl_Dm_Stk",
"ovl_Dm_Char00",
"ovl_Dm_Char01",
"ovl_Dm_Char02",
"ovl_Dm_Char03",
"ovl_Dm_Char04",
"ovl_Dm_Char05",
"ovl_Dm_Char06",
"ovl_Dm_Char07",
"ovl_Dm_Char08",
"ovl_Dm_Char09",
"ovl_Obj_Tokeidai",
"",
"ovl_En_Mnk",
"ovl_En_Egblock",
"ovl_En_Guard_Nuts",
"ovl_Bg_Hakugin_Bombwall",
"ovl_Obj_Tokei_Tobira",
"ovl_Bg_Hakugin_Elvpole",
"ovl_En_Ma4",
"ovl_En_Twig",
"ovl_En_Po_Fusen",
"ovl_En_Door_Etc",
"ovl_En_Bigokuta",
"ovl_Bg_Icefloe",
"ovl_Obj_Ocarinalift",
"ovl_En_Time_Tag",
"ovl_Bg_Open_Shutter",
"ovl_Bg_Open_Spot",
"ovl_Bg_Fu_Kaiten",
"ovl_Obj_Aqua",
"ovl_En_Elforg",
"ovl_En_Elfbub",
"",
"ovl_En_Fu_Mato",
"ovl_En_Fu_Kago",
"ovl_En_Osn",
"ovl_Bg_Ctower_Gear",
"ovl_En_Trt2",
"ovl_Obj_Tokei_Step",
"ovl_Bg_Lotus",
"ovl_En_Kame",
"ovl_Obj_Takaraya_Wall",
"ovl_Bg_Fu_Mizu",
"ovl_En_Sellnuts",
"ovl_Bg_Dkjail_Ivy",
"",
"ovl_Obj_Visiblock",
"ovl_En_Takaraya",
"ovl_En_Tsn",
"ovl_En_Ds2n",
"ovl_En_Fsn",
"ovl_En_Shn",
"",
"ovl_En_Stop_heishi",
"ovl_Obj_Bigicicle",
"ovl_En_Lift_Nuts",
"ovl_En_Tk",
"",
"ovl_Bg_Market_Step",
"ovl_Obj_Lupygamelift",
"ovl_En_Test7",
"ovl_Obj_Lightblock",
"ovl_Mir_Ray2",
"ovl_En_Wdhand",
"ovl_En_Gamelupy",
"ovl_Bg_Danpei_Movebg",
"ovl_En_Snowwd",
"ovl_En_Pm",
"ovl_En_Gakufu",
"ovl_Elf_Msg4",
"ovl_Elf_Msg5",
"ovl_En_Col_Man",
"ovl_En_Talk_Gibud",
"ovl_En_Giant",
"ovl_Obj_Snowball",
"ovl_Boss_Hakugin",
"ovl_En_Gb2",
"ovl_En_Onpuman",
"ovl_Bg_Tobira01",
"ovl_En_Tag_Obj",
"ovl_Obj_Dhouse",
"ovl_Obj_Hakaisi",
"ovl_Bg_Hakugin_Switch",
"",
"ovl_En_Snowman",
"ovl_TG_Sw",
"ovl_En_Po_Sisters",
"ovl_En_Pp",
"ovl_En_Hakurock",
"ovl_En_Hanabi",
"ovl_Obj_Dowsing",
"ovl_Obj_Wind",
"ovl_En_Racedog",
"ovl_En_Kendo_Js",
"ovl_Bg_Botihasira",
"ovl_En_Fish2",
"ovl_En_Pst",
"ovl_En_Poh",
"ovl_Obj_Spidertent",
"ovl_En_Zoraegg",
"ovl_En_Kbt",
"ovl_En_Gg",
"ovl_En_Maruta",
"ovl_Obj_Snowball2",
"ovl_En_Gg2",
"ovl_Obj_Ghaka",
"ovl_En_Dnp",
"ovl_En_Dai",
"ovl_Bg_Goron_Oyu",
"ovl_En_Kgy",
"ovl_En_Invadepoh",
"ovl_En_Gk",
"ovl_En_An",
"",
"ovl_En_Bee",
"ovl_En_Ot",
"ovl_En_Dragon",
"ovl_Obj_Dora",
"ovl_En_Bigpo",
"ovl_Obj_Kendo_Kanban",
"ovl_Obj_Hariko",
"ovl_En_Sth",
"ovl_Bg_Sinkai_Kabe",
"ovl_Bg_Haka_Curtain",
"ovl_Bg_Kin2_Bombwall",
"ovl_Bg_Kin2_Fence",
"ovl_Bg_Kin2_Picture",
"ovl_Bg_Kin2_Shelf",
"ovl_En_Rail_Skb",
"ovl_En_Jg",
"ovl_En_Tru_Mt",
"ovl_Obj_Um",
"ovl_En_Neo_Reeba",
"ovl_Bg_Mbar_Chair",
"ovl_Bg_Ikana_Block",
"ovl_Bg_Ikana_Mirror",
"ovl_Bg_Ikana_Rotaryroom",
"ovl_Bg_Dblue_Balance",
"ovl_Bg_Dblue_Waterfall",
"ovl_En_Kaizoku",
"ovl_En_Ge2",
"ovl_En_Ma_Yts",
"ovl_En_Ma_Yto",
"ovl_Obj_Tokei_Turret",
"ovl_Bg_Dblue_Elevator",
"ovl_Obj_Warpstone",
"ovl_En_Zog",
"ovl_Obj_Rotlift",
"ovl_Obj_Jg_Gakki",
"ovl_Bg_Inibs_Movebg",
"ovl_En_Zot",
"ovl_Obj_Tree",
"ovl_Obj_Y2lift",
"ovl_Obj_Y2shutter",
"ovl_Obj_Boat",
"ovl_Obj_Taru",
"ovl_Obj_Hunsui",
"ovl_En_Jc_Mato",
"ovl_Mir_Ray3",
"ovl_En_Zob",
"ovl_Elf_Msg6",
"ovl_Obj_Nozoki",
"ovl_En_Toto",
"ovl_En_Railgibud",
"ovl_En_Baba",
"ovl_En_Suttari",
"ovl_En_Zod",
"ovl_En_Kujiya",
"ovl_En_Geg",
"ovl_Obj_Kinoko",
"ovl_Obj_Yasi",
"ovl_En_Tanron1",
"ovl_En_Tanron2",
"ovl_En_Tanron3",
"ovl_Obj_Chan",
"ovl_En_Zos",
"ovl_En_S_Goro",
"ovl_En_Nb",
"ovl_En_Ja",
"ovl_Bg_F40_Block",
"ovl_Bg_F40_Switch",
"ovl_En_Po_Composer",
"ovl_En_Guruguru",
"ovl_Oceff_Wipe5",
"ovl_En_Stone_heishi",
"ovl_Oceff_Wipe6",
"ovl_En_Scopenuts",
"ovl_En_Scopecrow",
"ovl_Oceff_Wipe7",
"ovl_Eff_Kamejima_Wave",
"ovl_En_Hg",
"ovl_En_Hgo",
"ovl_En_Zov",
"ovl_En_Ah",
"ovl_Obj_Hgdoor",
"ovl_Bg_Ikana_Bombwall",
"ovl_Bg_Ikana_Ray",
"ovl_Bg_Ikana_Shutter",
"ovl_Bg_Haka_Bombwall",
"ovl_Bg_Haka_Tomb",
"ovl_En_Sc_Ruppe",
"ovl_Bg_Iknv_Doukutu",
"ovl_Bg_Iknv_Obj",
"ovl_En_Pamera",
"ovl_Obj_HsStump",
"ovl_En_Hidden_Nuts",
"ovl_En_Zow",
"ovl_En_Talk",
"ovl_En_Al",
"ovl_En_Tab",
"ovl_En_Nimotsu",
"ovl_En_Hit_Tag",
"ovl_En_Ruppecrow",
"ovl_En_Tanron4",
"ovl_En_Tanron5",
"ovl_En_Tanron6",
"ovl_En_Daiku2",
"ovl_En_Muto",
"ovl_En_Baisen",
"ovl_En_Heishi",
"ovl_En_Demo_heishi",
"ovl_En_Dt",
"ovl_En_Cha",
"ovl_Obj_Dinner",
"ovl_Eff_Lastday",
"ovl_Bg_Ikana_Dharma",
"ovl_En_Akindonuts",
"ovl_Eff_Stk",
"ovl_En_Ig",
"ovl_En_Rg",
"ovl_En_Osk",
"ovl_En_Sth2",
"ovl_En_Yb",
"ovl_En_Rz",
"ovl_En_Scopecoin",
"ovl_En_Bjt",
"ovl_En_Bomjima",
"ovl_En_Bomjimb",
"ovl_En_Bombers",
"ovl_En_Bombers2",
"ovl_En_Bombal",
"ovl_Obj_Moon_Stone",
"ovl_Obj_Mu_Pict",
"ovl_Bg_Ikninside",
"ovl_Eff_Zoraband",
"ovl_Obj_Kepn_Koya",
"ovl_Obj_Usiyane",
"ovl_En_Nnh",
"ovl_Obj_Kzsaku",
"ovl_Obj_Milk_Bin",
"ovl_En_Kitan",
"ovl_Bg_Astr_Bombwall",
"ovl_Bg_Iknin_Susceil",
"ovl_En_Bsb",
"ovl_En_Recepgirl",
"ovl_En_Thiefbird",
"ovl_En_Jgame_Tsn",
"ovl_Obj_Jgame_Light",
"ovl_Obj_Yado",
"ovl_Demo_Syoten",
"ovl_Demo_Moonend",
"ovl_Bg_Lbfshot",
"ovl_Bg_Last_Bwall",
"ovl_En_And",
"ovl_En_Invadepoh_Demo",
"ovl_Obj_Danpeilift",
"ovl_En_Fall2",
"ovl_Dm_Al",
"ovl_Dm_An",
"ovl_Dm_Ah",
"ovl_Dm_Nb",
"ovl_En_Drs",
"ovl_En_Ending_Hero",
"ovl_Dm_Bal",
"ovl_En_Paper",
"ovl_En_Hint_Skb",
"ovl_Dm_Tag",
"ovl_En_Bh",
"ovl_En_Ending_Hero2",
"ovl_En_Ending_Hero3",
"ovl_En_Ending_Hero4",
"ovl_En_Ending_Hero5",
"ovl_En_Ending_Hero6",
"ovl_Dm_Gm",
"ovl_Obj_Swprize",
"ovl_En_Invisible_Ruppe",
"ovl_Obj_Ending",
"ovl_En_Rsn",
]
script_dir = os.path.dirname(os.path.realpath(__file__))
repo = script_dir + os.sep + ".." + os.sep + ".." + os.sep
def as_word(b, off=0):
return struct.unpack(">I", b[off:off+4])[0]
def as_word_list(b):
return [i[0] for i in struct.iter_unpack(">I", b)]
def null_or_ptr(w):
return (w == 0) or (w >= 0x80000000 and w < 0x81000000)
# (name, vrom_st, vrom_end, vram_st, vram_end)
def read_actor_ovl_tbl():
actortbl = []
with open(repo + "decomp/code","rb") as codefile:
codefile.seek(0x109510) # actor overlay table offset into code
entry = as_word_list(codefile.read(0x20))
i = 0
while (entry[4] == 0x00000000 and all([null_or_ptr(e) for e in entry[2:4]]) and
((entry[7] & 0xFFFF) == 0) and (null_or_ptr(entry[5]))):
actortbl.append((actor_names[i], entry[0], entry[1], entry[2], entry[3]))
entry = as_word_list(codefile.read(0x20))
i += 1
return actortbl
actor_tbl = read_actor_ovl_tbl()
def resolve_symbol(address):
"""
Returns (overlay file path, file offset) from a given VRAM address
"""
for entry in actor_tbl:
if address >= 0x80000000:
if entry[3] <= address < entry[4]:
return repo + "decomp" + os.sep + entry[0], address - entry[3]
else:
if entry[1] <= address < entry[2]:
return repo + "decomp" + os.sep + entry[0], address - entry[1]
else:
return None, None
def HexParse(s):
return int(s, 16)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('address', help="VRAM or VROM address to get overlay file and offset for", type=HexParse)
args = parser.parse_args()
file_path,offset = resolve_symbol(args.address)
print(f"0x{args.address:08X} is 0x{offset:X} into {file_path}")
+452
View File
@@ -0,0 +1,452 @@
#!/usr/bin/env python3
import os
import struct
import argparse
from actor_symbols import resolve_symbol
T_DEFAULT = ''
TType1 = 'Type1'
T_ACTOR = '_Actor'
TYPE_ENUM = [
"COLTYPE_HIT0",
"COLTYPE_HIT1",
"COLTYPE_HIT2",
"COLTYPE_HIT3",
"COLTYPE_HIT4",
"COLTYPE_HIT5",
"COLTYPE_HIT6",
"COLTYPE_HIT7",
"COLTYPE_HIT8",
"COLTYPE_METAL",
"COLTYPE_NONE",
"COLTYPE_WOOD",
"COLTYPE_HARD",
"COLTYPE_TREE" ]
SHAPE_ENUM = [
"COLSHAPE_JNTSPH",
"COLSHAPE_CYLINDER",
"COLSHAPE_TRIS",
"COLSHAPE_QUAD",
"COLSHAPE_SPHERE" ]
ELEMTYPE_UNKENUM = [
"ELEMTYPE_UNK0",
"ELEMTYPE_UNK1",
"ELEMTYPE_UNK2",
"ELEMTYPE_UNK3",
"ELEMTYPE_UNK4",
"ELEMTYPE_UNK5",
"ELEMTYPE_UNK6"]
ATFLAGS_ENUM = [
"AT_ON",
"AT_HIT",
"AT_BOUNCED",
"AT_TYPE_PLAYER",
"AT_TYPE_ENEMY",
"AT_TYPE_OTHER",
"AT_SELF"]
ACFLAGS_ENUM = [
"AC_ON",
"AC_HIT",
"AC_HARD",
"AC_TYPE_PLAYER",
"AC_TYPE_ENEMY",
"AC_TYPE_OTHER",
"AC_NO_DAMAGE",
"AC_BOUNCED"]
OCFLAGS_ENUM = [
"OC1_ON",
"OC1_HIT",
"OC1_NO_PUSH",
"OC1_TYPE_PLAYER",
"OC1_TYPE_1",
"OC1_TYPE_2"]
OCTYPE_ENUM = [
"OC2_HIT_PLAYER",
"OC2_UNK1",
"OC2_UNK2",
"OC2_TYPE_PLAYER",
"OC2_TYPE_1",
"OC2_TYPE_2",
"OC2_FIRST_ONLY"]
TOUCHERFLAGS_ENUM = [
"TOUCH_ON",
"TOUCH_HIT",
"TOUCH_NEAREST",
"TOUCH_SFX_HARD",
"TOUCH_SFX_WOOD",
"TOUCH_AT_HITMARK",
"TOUCH_DREW_HITMARK",
"TOUCH_UNK7"]
BUMPERFLAGS_ENUM = [
"BUMP_ON",
"BUMP_HIT",
"BUMP_HOOKABLE",
"BUMP_NO_AT_INFO",
"BUMP_NO_DAMAGE",
"BUMP_NO_SWORD_SFX",
"BUMP_NO_HITMARK",
"BUMP_DRAW_HITMARK"]
OCELEMFLAGS_ENUM = [
"OCELEM_ON",
"OCELEM_HIT",
"OCELEM_UNK2",
"OCELEM_UNK3",
"OCELEM_UNK4",
"OCELEM_UNK5",
"OCELEM_UNK6",
"OCELEM_UNK7",]
sf_ColliderInit = ">BBBBBB"
sf_ColliderInitType1 = ">BBBBB"
sf_ColliderInitToActor = ">IBBBB"
sf_ColliderBodyInit = ">B3xIBB2xIBB2xBBB"
sf_JntSph = ">II"
sf_JntSphElement = ">Bx5h"
sf_Cylinder16 = ">6h"
sf_Tris = ">II"
sf_TrisElement = ">9f"
sf_Quad = ">12f"
sf_Sphere = sf_JntSphElement
f_ColliderInit = "{{ {0}, {1}, {2}, {3}, {4}, {5}, }}"
f_ColliderInitType1 = "{{ {0}, {1}, {2}, {3}, {4}, }}"
f_ColliderInitToActor = "{{ {0}, {1}, {2}, {3}, {4}, }}"
f_ColliderBodyInit = "{{ {0}, {{ 0x{1:08X}, 0x{2:02X}, 0x{3:02X} }}, {{ 0x{4:08X}, 0x{5:02X}, 0x{6:02X} }}, {7}, {8}, {9}, }}"
f_JntSph = "{0}, D_{1:08X}"
f_JntSphElement = "{{ {0}, {{ {{ {1}, {2}, {3} }}, {4} }}, {5} }}"
f_Cylinder16 = "{{ {0}, {1}, {2}, {{ {3}, {4}, {5} }} }}"
f_Tris = "{0}, D_{1:08X}"
f_TrisElement = "{{ {{ {{ {0}f, {1}f, {2}f }}, {{ {3}f, {4}f, {5}f }}, {{ {6}f, {7}f, {8}f }} }} }}"
f_Quad = "{{ {{ {{ {0}f, {1}f, {2}f }}, {{ {3}f, {4}f, {5}f }}, {{ {6}f, {7}f, {8}f }}, {{ {9}f, {10}f, {11}f }} }} }}"
f_Sphere = f_JntSphElement
def GetATflags(at):
for i, flag in enumerate(ATFLAGS_ENUM):
if(i == 0):
if(at & (1 << i)):
output = "AT_ON"
else:
output = "AT_NONE"
elif(at & (1 << i)):
output += " | " + flag
return output.replace("AT_TYPE_PLAYER | AT_TYPE_ENEMY | AT_TYPE_OTHER","AT_TYPE_ALL")
def GetACflags(at):
for i, flag in enumerate(ACFLAGS_ENUM):
if(i == 0):
if(at & (1 << i)):
output = "AC_ON"
else:
output = "AC_NONE"
elif(at & (1 << i)):
output += " | " + flag
return output.replace("AC_TYPE_OTHER | AC_TYPE_ENEMY | AC_TYPE_PLAYER","AC_TYPE_ALL")
def GetOCflags(at):
for i, flag in enumerate(OCFLAGS_ENUM):
if(i == 0):
if(at & (1 << i)):
output = "OC1_ON"
else:
output = "OC1_NONE"
elif(at & (1 << i)):
output += " | " + flag
return output.replace("OC1_TYPE_PLAYER | OC1_TYPE_1 | OC1_TYPE_2","OC1_TYPE_ALL")
def GetOCtype(at):
output = ""
for i, flag in enumerate(OCTYPE_ENUM):
if(at & (1 << i)):
output = " | " + flag + output
if(output == ""):
return "OC2_NONE"
else:
return output.strip(" | ")
def GetToucherFlags(at):
for i, flag in enumerate(TOUCHERFLAGS_ENUM):
if(i == 0):
if(at & (1 << i)):
output = "TOUCH_ON"
else:
output = "TOUCH_NONE"
elif(at & (1 << i)):
output += " | " + flag
if(i == 4 and output.find("SFX") == -1 and output.find("OFF") == -1):
output += " | TOUCH_SFX_NORMAL"
return output.replace("TOUCH_SFX_HARD | TOUCH_SFX_WOOD", "TOUCH_SFX_NONE")
def GetBumperFlags(at):
for i, flag in enumerate(BUMPERFLAGS_ENUM):
if(i == 0):
if(at & (1 << i)):
output = "BUMP_ON"
else:
output = "BUMP_NONE"
elif(at & (1 << i)):
output += " | " + flag
return output
def GetOcElemFlags(at):
for i, flag in enumerate(OCELEMFLAGS_ENUM):
if(i == 0):
if(at & (1 << i)):
output = "OCELEM_ON"
else:
output = "OCELEM_NONE"
elif(at & (1 << i)):
output += " | " + flag
return output
def GetColliderFormat(type):
if type == T_DEFAULT:
return (sf_ColliderInit, f_ColliderInit)
if type == TType1:
return (sf_ColliderInitType1, f_ColliderInitType1)
if type == T_ACTOR:
return (sf_ColliderInitToActor, f_ColliderInitToActor)
return None
def GetColliderStr(data, off, type):
cf = GetColliderFormat(type)
cBase = list(struct.unpack_from(cf[0], data, off))
if type == T_ACTOR:
if cBase[0] == 0:
cBase[0] = 'NULL'
else:
cBase[0] = '0x{0:08X}'.format(cBase[0])
else:
if cBase[0] < 14:
cBase[0] = TYPE_ENUM[cBase[0]]
else:
cBase[0] = '0x{0:02X}'.format(cBase[0])
cBase[1] = GetATflags(cBase[1])
cBase[2] = GetACflags(cBase[2])
cBase[3] = GetOCflags(cBase[3])
if type == T_DEFAULT:
cBase[4] = GetOCtype(cBase[4])
i = 5
else:
i = 4
if cBase[i] < 5:
cBase[i] = SHAPE_ENUM[cBase[i]]
else:
cBase[i] = '0x{0:02X}'.format(cBase[i])
return cf[1].format(*cBase)
def GetItems(data, off, count, structf, fmt, size):
result = ''
for i in range(count):
ioff = (i * size)
cBody = list(struct.unpack_from(sf_ColliderBodyInit, data, off + ioff))
cItem = struct.unpack_from(structf, data, off + 0x18 + ioff)
if cBody[0] < 7:
cBody[0] = ELEMTYPE_UNKENUM[cBody[0]]
else:
cBody[0] = '0x{0:02X}'.format(cBody[0])
cBody[7] = GetToucherFlags(cBody[7])
cBody[8] = GetBumperFlags(cBody[8])
cBody[9] = GetOcElemFlags(cBody[9])
result += '''
{{
{0},
{1},
}},'''.format(f_ColliderBodyInit.format(*cBody), fmt.format(*cItem))
return result
def GetJntSphElements(data, off, count):
items = GetItems(data, off, count, sf_JntSphElement, f_JntSphElement, 0x24)
return('''
static ColliderJntSphElementInit sJntSphElementsInit[{0}] = {{{1}
}};
'''.format(count, items))
def GetJntSph(data, off, type):
sBase = GetColliderStr(data, off, type)
cJntSph = struct.unpack_from(sf_JntSph, data, off + 8)
return('''
static ColliderJntSphInit{0} sJntSphInit = {{
{1},
{2},
}};
'''.format(type, sBase, f_JntSph.format(*cJntSph)))
def GetTrisElements(data, off, count):
items = GetItems(data, off, count, sf_TrisElement, f_TrisElement, 0x3C)
return('''
static ColliderTrisElementInit sTrisElementsInit[{0}] = {{{1}
}};
'''.format(count, items))
def GetCylinder(data, off, type):
sBase = GetColliderStr(data, off, type)
cBody = list(struct.unpack_from(sf_ColliderBodyInit, data, off + 0x08))
cCyl16 = struct.unpack_from(sf_Cylinder16, data, off + 0x20)
if cBody[0] < 7:
cBody[0] = ELEMTYPE_UNKENUM[cBody[0]]
else:
cBody[0] = '0x{0:02X}'.format(cBody[0])
cBody[7] = GetToucherFlags(cBody[7])
cBody[8] = GetBumperFlags(cBody[8])
cBody[9] = GetOcElemFlags(cBody[9])
return('''
static ColliderCylinderInit{0} sCylinderInit = {{
{1},
{2},
{3},
}};
'''.format(type,sBase,f_ColliderBodyInit.format(*cBody),f_Cylinder16.format(*cCyl16)))
def GetTris(data, off, type):
sBase = GetColliderStr(data, off, type)
cTris = struct.unpack_from(sf_Tris, data, off + 8)
return('''
static ColliderTrisInit{0} sTrisInit = {{
{1},
{2},
}};
'''.format(type, sBase, f_Tris.format(*cTris)))
def GetQuad(data, off, type):
sBase = GetColliderStr(data, off, type)
cBody = list(struct.unpack_from(sf_ColliderBodyInit, data, off + 0x08))
cQuad = struct.unpack_from(sf_Quad, data, off + 0x20)
if cBody[0] < 7:
cBody[0] = ELEMTYPE_UNKENUM[cBody[0]]
else:
cBody[0] = '0x{0:02X}'.format(cBody[0])
cBody[7] = GetToucherFlags(cBody[7])
cBody[8] = GetBumperFlags(cBody[8])
cBody[9] = GetOcElemFlags(cBody[9])
return('''
static ColliderQuadInit{0} sQuadInit = {{
{1},
{2},
{3},
}};
'''.format(type, sBase, f_ColliderBodyInit.format(*cBody), f_Quad.format(*cQuad)))
def GetSphere(data, off, type):
sBase = GetColliderStr(data, off, type)
cBody = list(struct.unpack_from(sf_ColliderBodyInit, data, off + 0x08))
cSphere = struct.unpack_from(sf_Sphere, data, off + 0x20)
if cBody[0] < 7:
cBody[0] = ELEMTYPE_UNKENUM[cBody[0]]
else:
cBody[0] = '0x{0:02X}'.format(cBody[0])
cBody[7] = GetToucherFlags(cBody[7])
cBody[8] = GetBumperFlags(cBody[8])
cBody[9] = GetOcElemFlags(cBody[9])
return('''
static ColliderSphereInit{0} sSphereInit = {{
{1},
{2},
{3},
}};
'''.format(type, sBase, f_ColliderBodyInit.format(*cBody), f_Sphere.format(*cSphere)))
def GetColliderInit(address, type, num):
TYPE_DICT = {
'ColliderJntSphInit' : (GetJntSph, 'Shape', T_DEFAULT),
'ColliderCylinderInit' : (GetCylinder, 'Shape', T_DEFAULT),
'ColliderTrisInit': (GetTris, 'Shape', T_DEFAULT),
'ColliderQuadInit': (GetQuad, 'Shape', T_DEFAULT),
'ColliderSphereInit': (GetSphere, 'Shape', T_DEFAULT),
'ColliderJntSphElementInit' : (GetJntSphElements, 'Item'),
'ColliderTrisElementInit' : (GetTrisElements, 'Item')
}
update = [(k, v[0]) for k,v in TYPE_DICT.items() if v[1] == 'Shape']
for i in update:
for j in (TType1, T_ACTOR):
TYPE_DICT[i[0] + j] = (i[1], 'Shape', j)
fileResult = resolve_symbol(address)
if fileResult[0] is None:
return("Invalid address")
print(hex(fileResult[1]), "in", fileResult[0].split(os.sep)[-1])
selectedType = TYPE_DICT[type]
arg2 = None
if selectedType[1] == 'Shape':
arg2 = selectedType[2]
elif num > 0:
arg2 = num
else:
return("ItemInit type must specify number of elements")
ovlFile = open(fileResult[0], "rb")
ovlData = bytearray(ovlFile.read())
ovlFile.close()
return selectedType[0](ovlData, fileResult[1], arg2)
def GetColliderInitFull(address, type, num):
if(type.find('Element') != -1):
return GetColliderInit(address, type, num)
base = GetColliderInit(address, type, 0)
if(type.find('JntSph') != -1):
[num, address2, dummy] = base.split('\n')[3].split(',')
hexaddress = int(address2.strip(' D_'), 16)
if(hexaddress == 0):
return base.replace(address2,' NULL')
else:
elements = GetColliderInit(hexaddress, 'ColliderJntSphElementInit', int(num))
return elements + base.replace(address2,' sJntSphElementsInit')
elif(type.find('Tris') != -1):
[num, address2, dummy] = base.split('\n')[3].split(',')
hexaddress = int(address2.strip(' D_'), 16)
if(hexaddress == 0):
return base.replace(address2,' NULL')
else:
elements = GetColliderInit(hexaddress, 'ColliderTrisElementInit', int(num))
return elements + base.replace(address2,' sTrisElementsInit')
else:
return base
def HexParse(s):
return int(s, 16)
parser = argparse.ArgumentParser()
parser.add_argument('address', help="VRAM or VROM address of the struct", type=HexParse)
parser.add_argument('type', help="Type name (e.g. ColliderQuadInit)")
parser.add_argument('num', nargs='?', default=0, type=HexParse, help="Number of elements. Only applies to ItemInit types")
args = parser.parse_args()
print(GetColliderInitFull(args.address, args.type, args.num))
+93
View File
@@ -0,0 +1,93 @@
#!/usr/bin/python3
import os
import sys
import struct
import argparse
import re
from actor_symbols import resolve_symbol
ICHAIN_MACROS = [
'ICHAIN_U8',
'ICHAIN_S8',
'ICHAIN_U16',
'ICHAIN_S16',
'ICHAIN_U32',
'ICHAIN_S32',
'ICHAIN_F32',
'ICHAIN_F32_DIV1000',
'ICHAIN_VEC3F',
'ICHAIN_VEC3F_DIV1000',
'ICHAIN_VEC3S',
]
Z64_ACTOR_PATH = "../../include/z64actor.h"
def get_actor_var_names():
in_actor = False
actor_vars = {}
with open(os.path.dirname(os.path.realpath(__file__)) + os.sep + Z64_ACTOR_PATH) as actor_h:
for line in actor_h:
if in_actor:
if "}" in line:
# Reached the end of the actor struct so break out
break
# Parse out the memory address (from the comment) and the variable name
regex = r'.*\/\* (.*) \*\/\s+(struct)?\s*.+\s+(.+);.*'
actor_var_info = re.match(regex, line)
if actor_var_info:
# Strip off the 0x0* part and store it
new_var_index = re.sub('0x0*', '', actor_var_info[1])
actor_vars[new_var_index] = actor_var_info[3]
elif "typedef struct Actor {" in line:
# Found the Actor struct
in_actor = True
return actor_vars
def HexParse(s):
return int(s, 16)
def main():
parser = argparse.ArgumentParser(description='Decompiles an InitChain')
parser.add_argument('address', help='VRAM or VROM address of an InitChain', type=HexParse)
parser.add_argument('--names', action="store_true", help='Retrieve variable names from the actor struct')
args = parser.parse_args()
file_path, file_offset = resolve_symbol(args.address)
with open(file_path, 'rb') as f:
filedata = f.read()
print ('static InitChainEntry sInitChain[] = {')
if args.names:
actor_variable_names = get_actor_var_names()
while True:
entry = struct.unpack('>I', filedata[file_offset:file_offset+4])[0]
file_offset += 4
cont = entry >> 31
t = (entry >> 27) & 0xF
offset = ((entry) >> 16) & 0x7FF
value = (entry) & 0xFFFF
if value >= 0x8000 and not ICHAIN_MACROS[t].startswith('ICHAIN_U'):
value -= 0x10000
var_name = '{0:X}'.format(offset)
if args.names and var_name in actor_variable_names:
var_name = actor_variable_names[var_name]
else:
var_name = "unk_" + var_name
print(' {0}({1}, {2}, {3}),'.format(ICHAIN_MACROS[t], var_name, value, ('ICHAIN_CONTINUE' if cont == 1 else 'ICHAIN_STOP')))
if cont == 0:
break
print ('};')
if __name__ == "__main__":
main()
-12
View File
@@ -174,7 +174,6 @@ D_801EDE30 = code_bss_start + 0x00009E90;
D_801EDE40 = code_bss_start + 0x00009EA0;
D_801EDE78 = code_bss_start + 0x00009ED8;
D_801EDEB0 = code_bss_start + 0x00009F10;
D_801EDEBC = code_bss_start + 0x00009F1C;
D_801EDEC8 = code_bss_start + 0x00009F28;
D_801EDF00 = code_bss_start + 0x00009F60;
D_801EDF38 = code_bss_start + 0x00009F98;
@@ -182,30 +181,19 @@ D_801EDF48 = code_bss_start + 0x00009FA8;
D_801EDF58 = code_bss_start + 0x00009FB8;
D_801EDF90 = code_bss_start + 0x00009FF0;
D_801EDFC8 = code_bss_start + 0x0000A028;
D_801EDFD4 = code_bss_start + 0x0000A034;
D_801EDFE0 = code_bss_start + 0x0000A040;
D_801EDFF0 = code_bss_start + 0x0000A050;
D_801EE000 = code_bss_start + 0x0000A060;
D_801EE038 = code_bss_start + 0x0000A098;
D_801EE070 = code_bss_start + 0x0000A0D0;
D_801EE0A4 = code_bss_start + 0x0000A104;
D_801EE0D8 = code_bss_start + 0x0000A138;
D_801EE0E8 = code_bss_start + 0x0000A148;
D_801EE11C = code_bss_start + 0x0000A17C;
D_801EE150 = code_bss_start + 0x0000A1B0;
D_801EE188 = code_bss_start + 0x0000A1E8;
D_801EE1C0 = code_bss_start + 0x0000A220;
D_801EE1C4 = code_bss_start + 0x0000A224;
D_801EE1C8 = code_bss_start + 0x0000A228;
D_801EE1D0 = code_bss_start + 0x0000A230;
D_801EE1D4 = code_bss_start + 0x0000A234;
D_801EE1D8 = code_bss_start + 0x0000A238;
D_801EE1E0 = code_bss_start + 0x0000A240;
D_801EE1E4 = code_bss_start + 0x0000A244;
D_801EE1E8 = code_bss_start + 0x0000A248;
D_801EE1F0 = code_bss_start + 0x0000A250;
D_801EE1F4 = code_bss_start + 0x0000A254;
D_801EE1F8 = code_bss_start + 0x0000A258;
D_801EE200 = code_bss_start + 0x0000A260;
D_801EE6C8 = code_bss_start + 0x0000A728;
D_801EE700 = code_bss_start + 0x0000A760;