mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-13 19:35:28 +00:00
z_bgcheck.c, 800430A0.c, 80043480.c (#256)
* beginning of migrating changes * got matching * changed order a bit * clean up bgcheck * fix conflict * fix conflict again * first stab at identifying types, some oks * Clean up most bad structs/pointer math, move relevant structs to z64bgcheck.h, get some OKs * more OKs, z_bgcheck.bss migration, update some sys_math3d.c args * couple more OKs * pushing some OKs * fix compilation issues * code_800430A0.c OK, more files decomp'd * 8003A3E0 big OK :) * Decomp most of func_8003C614, decomp helper funcs * Decomp SurfaceType, CamData, and WaterBox property related functions * more OKs, big OK in 8003C078 * more OKs, more progress, move a function definition in z_collision_check to functions.h * more clean-ups, more OKs, dyn_vtx is now defined as u8* * 8003A5B8, 8003A7D8, 8003C614, 8003DD6C OK, document function args better * data migrated, more OKs * 80041240 OK, func_8003B3C8 and func_8003BB18 disassembled * func_80040284, 800409A8 non_matching, add IS_ZERO macro * All asm files have C representations, some big OKs, lots of minor tweaks * More OKs, non-matching code cleanup * 8003FBF4 and 80040BE4 OK, improve codegen for most functions * format z_bgcheck.c * fix warnings, compile errors on NON_MATCHING * func_8003EE80 is now NON_MATCHING * begin documenting some functions * formatting * more documentation, func_8003A95C OK * fix PHYSICAL_TO_VIRTUAL changes * fix var rename * More documentation, functions 80040E40, 80041648 OK, change types to not be compatible with ZAP * func_8004239C ok, more NON_MATCHING improvements, more documentation * Implement most suggested changes * Convert comments to slower comments * /** * Implement ZAP2 changes * my anti-virus ate my format.sh results * Rename a couple hundred functions, fix minor stuff * rename var so that clang formats correctly * run format.sh * implement Petrie's matches/suggestions * format * matches * and the asm * slight error * Add SSList * two more matches * stuff * implement code changes * clean up Petrie's matchings Co-authored-by: Arthur <arthurtilly413@gmail.com> Co-authored-by: fig02 <fig02srl@gmail.com> Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
This commit is contained in:
parent
209f0d21b8
commit
3cef03f5ff
416 changed files with 6610 additions and 13487 deletions
|
@ -454,7 +454,7 @@ void func_8002F91C(Actor* actor, u16 sfxId);
|
|||
void func_8002F948(Actor* actor, u16 sfxId);
|
||||
void func_8002F974(Actor* actor, u16 sfxId);
|
||||
void func_8002F994(Actor* actor, s32 arg1);
|
||||
s32 func_8002F9EC(GlobalContext* globalCtx, Actor* actor, CollisionPoly* arg2, u32 arg3, Vec3f* arg4);
|
||||
s32 func_8002F9EC(GlobalContext* globalCtx, Actor* actor, CollisionPoly* poly, s32 bgId, Vec3f* pos);
|
||||
void func_800304B0(GlobalContext* globalCtx);
|
||||
void func_800304DC(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEntry* actorEntry);
|
||||
void Actor_UpdateAll(GlobalContext* globalCtx, ActorContext* actorCtx);
|
||||
|
@ -532,178 +532,185 @@ void ActorOverlayTable_LogPrint(void);
|
|||
void ActorOverlayTable_Init(void);
|
||||
void ActorOverlayTable_Cleanup(void);
|
||||
// ? func_80038600(?);
|
||||
// ? func_80038708(?);
|
||||
// ? func_8003871C(?);
|
||||
// ? SSNode_SetValue(?);
|
||||
// ? SSNode_SetNull(?);
|
||||
// ? func_80038728(?);
|
||||
// ? func_80038780(?);
|
||||
// ? func_800387FC(?);
|
||||
// ? func_8003880C(?);
|
||||
// ? func_80038870(?);
|
||||
// ? func_80038878(?);
|
||||
// ? DynaSSNodeList_Initialize(?);
|
||||
// ? DynaSSNodeList_Alloc(?);
|
||||
// ? DynaSSNodeList_ResetCount(?);
|
||||
u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList*);
|
||||
// ? func_800388A8(?);
|
||||
// ? func_800388E8(?);
|
||||
// ? func_80038924(?);
|
||||
// ? func_800389D4(?);
|
||||
void func_80038A28(CollisionPoly* poly, f32 x, f32 y, f32 z, MtxF* mtxF);
|
||||
f32 func_80038B7C(CollisionPoly*, Vec3f*);
|
||||
void func_80038C78(CollisionPoly*, u8, CollisionContext*, Vec3f*);
|
||||
void func_80038A28(CollisionPoly* poly, f32 tx, f32 ty, f32 tz, MtxF* dest);
|
||||
f32 CollisionPoly_GetPointDistanceFromPlane(CollisionPoly* poly, Vec3f* point);
|
||||
void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest);
|
||||
// ? func_80038BE0(?);
|
||||
// ? func_80038D48(?);
|
||||
// ? func_80038E78(?);
|
||||
// ? func_80038F20(?);
|
||||
// ? func_80038F60(?);
|
||||
// ? func_80039000(?);
|
||||
// ? func_800390A0(?);
|
||||
// ? func_8003937C(?);
|
||||
// ? func_80039448(?);
|
||||
// ? CollisionPoly_CheckYIntersectApprox1(?);
|
||||
// ? CollisionPoly_CheckYIntersect(?);
|
||||
// ? CollisionPoly_CheckYIntersectApprox2(?);
|
||||
// ? CollisionPoly_CheckXIntersectApprox(?);
|
||||
// ? CollisionPoly_CheckZIntersectApprox(?);
|
||||
// ? CollisionPoly_LineVsPoly(?);
|
||||
// ? CollisionPoly_SphVsPoly(?);
|
||||
// ? StaticLookup_AddPolyToNodeList(?);
|
||||
// ? func_8003965C(?);
|
||||
// ? func_800396F0(?);
|
||||
// ? func_8003992C(?);
|
||||
// ? func_80039A3C(?);
|
||||
// ? func_80039AEC(?);
|
||||
// ? func_8003A3E0(?);
|
||||
// ? func_8003A5B8(?);
|
||||
// ? BgCheck_ComputeWallDisplacement(?);
|
||||
// ? BgCheck_SphVsStaticWall(?);
|
||||
s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly);
|
||||
s32 func_8003A5B8(SSList* headNodeId, CollisionContext* colCtx, u16 xpFlags1, u16 xpFlags2, Vec3f* posA, Vec3f* posB, Vec3f* outPos, CollisionPoly** outPoly, f32* outDistSq, f32 chkDist, s32 bccFlags);
|
||||
// ? func_8003A7D8(?);
|
||||
// ? func_8003A95C(?);
|
||||
// ? func_8003AB28(?);
|
||||
// ? func_8003AC54(?);
|
||||
// ? func_8003AD00(?);
|
||||
// ? func_8003ADC8(?);
|
||||
// ? BgCheck_SphVsFirstStaticPolyList(?);
|
||||
// ? BgCheck_SphVsFirstStaticPoly(?);
|
||||
// ? BgCheck_GetNearestStaticLookup(?);
|
||||
// ? BgCheck_GetStaticLookup(?);
|
||||
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* arg2);
|
||||
// ? func_8003AEA8(?);
|
||||
// ? func_8003B04C(?);
|
||||
// ? func_8003B218(?);
|
||||
// ? func_8003B3C8(?);
|
||||
// ? func_8003BB18(?);
|
||||
// ? func_8003BF18(?);
|
||||
// ? func_8003BF5C(?);
|
||||
// ? func_8003BFF4(?);
|
||||
// ? func_8003C078(?);
|
||||
// ? T_BGCheck_getBGDataInfo(?);
|
||||
// ? func_8003C55C(?);
|
||||
// ? func_8003C614(?);
|
||||
f32 func_8003C890(CollisionContext*, CollisionPoly**, Vec3f*);
|
||||
f32 func_8003C8EC(GlobalContext*, CollisionContext*, CollisionPoly**, Vec3f*);
|
||||
f32 func_8003C940(CollisionContext*, CollisionPoly**, s32*, Vec3f*);
|
||||
f32 func_8003C9A4(CollisionContext*, CollisionPoly**, UNK_PTR, Actor*, Vec3f*);
|
||||
f32 func_8003CA0C(GlobalContext* globalCtx, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor,
|
||||
Vec3f* pos);
|
||||
f32 func_8003CA64(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 chkDist);
|
||||
f32 func_8003CB30(CollisionContext*, CollisionPoly*, Vec3f*, MtxF*);
|
||||
f32 func_8003CCA4(CollisionContext*, CollisionPoly**, s32*, Vec3f*);
|
||||
// ? func_8003CDD4(?);
|
||||
s32 func_8003D464(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 arg4,
|
||||
CollisionPoly** outPoly, f32 checkHeight);
|
||||
s32 func_8003D52C(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, f32, CollisionPoly**, u32*, Actor*, f32);
|
||||
s32 func_8003D594(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, f32, CollisionPoly**, u32*, Actor*, f32);
|
||||
// ? func_8003D600(?);
|
||||
s32 func_8003D7A0(CollisionContext*, f32*, Vec3f*, f32, UNK_PTR, u32*, Actor*);
|
||||
// ? func_8003D7F0(?);
|
||||
// ? func_8003DD28(?);
|
||||
s32 func_8003DD6C(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE,
|
||||
UNK_PTR);
|
||||
s32 func_8003DE84(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u32, u32, u32, u32, u32*);
|
||||
s32 func_8003DF10(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u32, u32, u32, u32, u32*, Actor*);
|
||||
s32 func_8003DFA0(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u32, u32, u32, u32, u32*, Actor*, f32);
|
||||
s32 func_8003E0B8(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly,
|
||||
s32 chkOneFace);
|
||||
s32 func_8003E0FC(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u32, u32, u32, u32);
|
||||
// ? func_8003E0FC(?);
|
||||
s32 func_8003E188(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u32, u32, u32, u32, f32*);
|
||||
// ? func_8003E214(?);
|
||||
s32 func_8003E30C(CollisionContext* colCtx, Vec3f* center, f32 radius);
|
||||
// ? func_8003E398(?);
|
||||
// ? func_8003E3AC(?);
|
||||
// ? func_8003E4DC(?);
|
||||
// ? func_8003E530(?);
|
||||
// ? func_8003E568(?);
|
||||
// ? func_8003E5B4(?);
|
||||
// ? func_8003E688(?);
|
||||
// ? func_8003E6C4(?);
|
||||
// ? func_8003E6E4(?);
|
||||
// ? func_8003E6EC(?);
|
||||
// ? func_8003E750(?);
|
||||
// ? func_8003E804(?);
|
||||
// ? func_8003E82C(?);
|
||||
// ? func_8003E834(?);
|
||||
// ? func_8003E888(?);
|
||||
// ? func_8003E890(?);
|
||||
// ? func_8003E8EC(?);
|
||||
// ? func_8003E934(?);
|
||||
// ? func_8003E954(?);
|
||||
// ? func_8003E9A0(?);
|
||||
void func_8003EBF8(GlobalContext* globalCtx, DynaCollisionContext* dynaColCtx, UNK_TYPE dynaPolyId);
|
||||
void func_8003EC50(GlobalContext* globalCtx, DynaCollisionContext* dynaColCtx, UNK_TYPE dynaPolyId);
|
||||
void func_8003ECA8(GlobalContext* globalCtx, DynaCollisionContext* dynaColCtx, UNK_TYPE dynaPolyId);
|
||||
u32 DynaPolyInfo_RegisterActor(GlobalContext* globalCtx, DynaCollisionContext* dynaColCtx, Actor* actor, UNK_TYPE arg3);
|
||||
DynaPolyActor* DynaPolyInfo_GetActor(CollisionContext* colCtx, UNK_TYPE dynaPolyId);
|
||||
void DynaPolyInfo_Free(GlobalContext* globalCtx, DynaCollisionContext* dynaColCtx, UNK_TYPE dynaPolyId);
|
||||
// ? func_8003EE80(?);
|
||||
// ? func_8003F8EC(?);
|
||||
// ? func_8003F984(?);
|
||||
// ? func_8003FB64(?);
|
||||
// ? func_8003FBF4(?);
|
||||
// ? func_8003FDDC(?);
|
||||
// ? func_80040284(?);
|
||||
// ? func_800409A8(?);
|
||||
// ? func_80040BE4(?);
|
||||
// ? func_80040E40(?);
|
||||
// ? BgCheck_IsSpotScene(?);
|
||||
// ? BgCheck_TryGetCustomMemsize(?);
|
||||
// ? BgCheck_SetSubdivisionDimension(?);
|
||||
void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, CollisionHeader* colHeader);
|
||||
// ? BgCheck_GetCollisionHeader(?);
|
||||
s32 BgCheck_PosInStaticBoundingBox(CollisionContext* colCtx, Vec3f* pos);
|
||||
f32 BgCheck_EntityRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
|
||||
f32 BgCheck_EntityRaycastFloor2(GlobalContext* globalCtx, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
|
||||
f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
|
||||
f32 BgCheck_EntityRaycastFloor4(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* arg4);
|
||||
f32 BgCheck_EntityRaycastFloor5(GlobalContext* globalCtx, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
|
||||
f32 BgCheck_EntityRaycastFloor6(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 chkDist);
|
||||
f32 BgCheck_EntityRaycastFloor7(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
|
||||
f32 BgCheck_AnyRaycastFloor1(CollisionContext* colCtx, CollisionPoly* outPoly, Vec3f* pos);
|
||||
f32 BgCheck_AnyRaycastFloor2(CollisionContext* colCtx, CollisionPoly* outPoly, s32* bgId, Vec3f* pos);
|
||||
f32 BgCheck_CameraRaycastFloor2(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
|
||||
f32 BgCheck_EntityRaycastFloor8(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
|
||||
f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
|
||||
s32 BgCheck_SphVsWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA);
|
||||
s32 BgCheck_EntitySphVsWall1(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, f32 checkHeight);
|
||||
s32 BgCheck_EntitySphVsWall2(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, f32 checkHeight);
|
||||
s32 BgCheck_EntitySphVsWall3(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
|
||||
s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
|
||||
// ? BgCheck_CheckCeilingImpl(?);
|
||||
s32 BgCheck_AnyCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight);
|
||||
s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* arg1, Vec3f* arg2, f32 arg3, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
|
||||
s32 BgCheck_LineTestImpl(CollisionContext* colCtx, u16 xpFlags1, u16 xpFlags2, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32* bgId, Actor* actor, f32 chkDist, u32 bccFlags);
|
||||
s32 BgCheck_CameraLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
|
||||
s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
|
||||
s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
|
||||
s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId, Actor* actor);
|
||||
s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId, Actor* actor, f32 chkDist);
|
||||
s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
|
||||
s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkOneFace);
|
||||
s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace);
|
||||
s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
|
||||
// ? BgCheck_SphVsFirstPolyImpl(?);
|
||||
s32 BgCheck_SphVsFirstPoly(CollisionContext* colCtx, Vec3f* center, f32 radius);
|
||||
void SSNodeList_Initialize(SSNodeList*);
|
||||
void SSNodeList_Alloc(GlobalContext* globalCtx, SSNodeList* this, s32 tblMax, s32 numPolys);
|
||||
u16 SSNodeList_GetNextNodeIdx(SSNodeList* this);
|
||||
// ? ScaleRotPos_Initialize(?);
|
||||
// ? ScaleRotPos_SetValue(?);
|
||||
// ? ScaleRotPos_Equals(?);
|
||||
// ? DynaLookup_ResetLists(?);
|
||||
// ? DynaLookup_Reset(?);
|
||||
// ? DynaLookup_ResetVtxStartIndex(?);
|
||||
// ? BgActor_Initialize(?);
|
||||
// ? BgActor_SetActor(?);
|
||||
// ? BgActor_HasTransformChanged(?);
|
||||
// ? DynaPoly_NullPolyList(?);
|
||||
// ? DynaPoly_AllocPolyList(?);
|
||||
// ? DynaPoly_NullVtxList(?);
|
||||
// ? DynaPoly_AllocVtxList(?);
|
||||
// ? DynaPoly_SetBgActorPrevTransform(?);
|
||||
s32 DynaPoly_IsBgIdBgActor(s32 bgId);
|
||||
void DynaPoly_Init(GlobalContext* globalCtx, DynaCollisionContext* dyna);
|
||||
void DynaPoly_Alloc(GlobalContext* globalCtx, DynaCollisionContext* dyna);
|
||||
void func_8003EBF8(GlobalContext* globalCtx, DynaCollisionContext* dyna, s32 bgId);
|
||||
void func_8003EC50(GlobalContext* globalCtx, DynaCollisionContext* dyna, s32 bgId);
|
||||
void func_8003ECA8(GlobalContext* globalCtx, DynaCollisionContext* dyna, s32 bgId);
|
||||
s32 DynaPoly_SetBgActor(GlobalContext* globalCtx, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader);
|
||||
Actor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId);
|
||||
void DynaPoly_DeleteBgActor(GlobalContext* globalCtx, DynaCollisionContext* dyna, s32 bgId);
|
||||
// ? DynaPoly_ExpandSRT(?);
|
||||
void func_8003F8EC(GlobalContext* globalCtx, DynaCollisionContext* dyna, Actor* actor);
|
||||
void DynaPoly_Setup(GlobalContext* globalCtx, DynaCollisionContext* dyna);
|
||||
void DynaPoly_UpdateBgActorTransforms(GlobalContext* globalCtx, DynaCollisionContext* dyna);
|
||||
// ? BgCheck_RaycastFloorDynaList(?);
|
||||
f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast);
|
||||
// ? BgCheck_SphVsDynaWallInBgActor(?);
|
||||
s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32* outZ, Vec3f* pos, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
|
||||
// ? BgCheck_CheckDynaCeilingList(?);
|
||||
s32 BgCheck_CheckDynaCeiling(CollisionContext* colCtx, u16 xpFlags, f32* outY, Vec3f* pos, f32 chkDist, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
|
||||
// ? func_80040FA4(?);
|
||||
// ? func_80041128(?);
|
||||
// ? func_80041240(?);
|
||||
// ? func_800413F8(?);
|
||||
// ? func_80041510(?);
|
||||
// ? func_80041648(?);
|
||||
// ? func_800417A0(?);
|
||||
void DynaPolyInfo_Alloc(UNK_PTR arg0, UNK_PTR arg1);
|
||||
// ? func_80041978(?);
|
||||
// ? func_800419B0(?);
|
||||
s32 func_80041A28(CollisionContext* colCtx, CollisionPoly*, u32);
|
||||
s32 func_80041A4C(CollisionContext* colCtx, s32 camDataIdx, s32 arg2);
|
||||
s32 func_80041240(CollisionContext* colCtx, u16 xpFlags, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, f32* distSq, s32* outBgId, Actor* actor, f32 chkDist, s32 bccFlags);
|
||||
// ? BgCheck_SphVsFirstDynaPolyList(?);
|
||||
// ? BgCheck_SphVsFirstDynaPolyInBgActor(?);
|
||||
s32 BgCheck_SphVsFirstDynaPoly(CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* center, f32 radius, Actor* actor, u16 bciFlags);
|
||||
// ? CollisionHeader_SegmentedToVirtual(?);
|
||||
void CollisionHeader_GetVirtual(void* colHeader, CollisionHeader** dest);
|
||||
void BgCheck_ResetPolyCheckTbl(SSNodeList* nodeList, s32 numPolys);
|
||||
// ? SurfaceType_GetData(?);
|
||||
u32 SurfaceType_GetCamDataIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u16 func_80041A4C(CollisionContext* colCtx, u32 camId, s32 bgId);
|
||||
u16 SurfaceType_GetCameraSType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
// ? func_80041B24(?);
|
||||
u16 func_80041B80(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
Vec3s* func_80041C10(CollisionContext* colCtx, s32, s32);
|
||||
Vec3s* func_80041C98(CollisionContext* colCtx, CollisionPoly*, s32);
|
||||
u16 SurfaceType_GetNumCameras(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
Vec3s* func_80041C10(CollisionContext* colCtx, s32 camId, s32 bgId);
|
||||
Vec3s* SurfaceType_GetCamPosData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 func_80041D4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 func_80041E4C(CollisionContext* colCtx, CollisionPoly* wallPoly, u8 source);
|
||||
s32 func_80041EA4(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
u32 func_80041D70(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
// ? func_80041D94(?);
|
||||
s32 func_80041DB8(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
s32 func_80041DE4(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
s32 func_80041E18(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
// ? func_80041EC8(?);
|
||||
// ? func_80041F10(?);
|
||||
u16 func_80041F34(CollisionContext*, CollisionPoly*, u32);
|
||||
s32 func_80041FA0(CollisionContext*, CollisionPoly*, u32);
|
||||
s32 func_80041FC4(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
s32 func_80042048(CollisionContext*, CollisionPoly*, s32);
|
||||
s32 func_80042084(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
s32 func_800420C0(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
s32 func_800420E4(CollisionContext* colCtx, CollisionPoly* floorPoly, s32 source);
|
||||
// ? func_80042108(?);
|
||||
s32 func_8004213C(GlobalContext*, CollisionContext*, f32, f32, f32*, WaterBox**);
|
||||
s32 func_8004239C(GlobalContext* globalCtx, CollisionContext* colCtx, Vec3f* arg2, f32 arg3, WaterBox** arg4);
|
||||
s32 func_80042244(GlobalContext* globalCtx, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface,
|
||||
WaterBox** outWaterBox);
|
||||
u32 func_80042538(CollisionContext* colCtx, WaterBox* waterBox);
|
||||
u16 func_80042548(CollisionContext* colCtx, WaterBox* waterBox);
|
||||
u32 func_8004259C(CollisionContext* colCtx, WaterBox* waterBox);
|
||||
s32 func_800427B4(CollisionPoly*, CollisionPoly*, Vec3f*, Vec3f*, Vec3f*);
|
||||
// ? func_80042868(?);
|
||||
// ? func_80042B2C(?);
|
||||
void func_80042C3C(GlobalContext*, CollisionContext*);
|
||||
// ? func_80042CB8(?);
|
||||
// ? func_80042EF8(?);
|
||||
void func_80042FC4(GlobalContext*, CollisionContext*);
|
||||
s32 func_80041DB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 func_80041DE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 func_80041E18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 func_80041E4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 func_80041EA4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 func_80041EC8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 func_80041F10(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_GetSlope(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 SurfaceType_IsConveyor(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
|
||||
s32 WaterBox_GetSurface1(GlobalContext* globalCtx, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
|
||||
s32 WaterBox_GetSurface2(GlobalContext* globalCtx, CollisionContext* colCtx, Vec3f* pos, f32 surfaceChkDist, WaterBox** outWaterBox);
|
||||
s32 WaterBox_GetSurfaceImpl(GlobalContext* globalCtx, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
|
||||
u32 WaterBox_GetCamDataIndex(CollisionContext* colCtx, WaterBox* waterBox);
|
||||
u16 WaterBox_GetCameraSType(CollisionContext* colCtx, WaterBox* waterBox);
|
||||
u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox);
|
||||
s32 func_80042708(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* point, Vec3f* closestPoint);
|
||||
s32 func_800427B4(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* pointA, Vec3f* pointB, Vec3f* closestPoint);
|
||||
// ? BgCheck_DrawDynaPolyList(?);
|
||||
// ? BgCheck_DrawBgActor(?);
|
||||
void BgCheck_DrawDynaCollision(GlobalContext*, CollisionContext*);
|
||||
// ? BgCheck_DrawStaticPoly(?);
|
||||
// ? BgCheck_DrawStaticPolyList(?);
|
||||
void BgCheck_DrawStaticCollision(GlobalContext*, CollisionContext*);
|
||||
// ? func_800430A0(?);
|
||||
// ? func_800432A0(?);
|
||||
// ? func_80043334(?);
|
||||
// ? func_800433A4(?);
|
||||
void DynaPolyInfo_SetActorMove(DynaPolyActor* actor, DynaPolyMoveFlag flags);
|
||||
void func_80043334(CollisionContext* colCtx, Actor* actor, s32 bgId);
|
||||
s32 func_800433A4(CollisionContext* colCtx, s32 bgId, Actor* actor);
|
||||
void DynaPolyActor_Init(DynaPolyActor* dynaActor, DynaPolyMoveFlag flags);
|
||||
void func_800434A0(DynaPolyActor* dynaActor);
|
||||
void func_800434A8(DynaPolyActor* actor);
|
||||
void func_800434C8(CollisionContext* colCtx, u32 floorPolySource);
|
||||
void func_80043508(CollisionContext* colCtx, u32 floorPolySource);
|
||||
void func_80043538(DynaPolyActor* actor);
|
||||
void func_800434A8(DynaPolyActor* dynaActor);
|
||||
void func_800434C8(CollisionContext* colCtx, s32 floorPolySource);
|
||||
void func_80043508(CollisionContext* colCtx, s32 floorPolySource);
|
||||
void func_80043538(DynaPolyActor* dynaActor);
|
||||
s32 func_80043548(DynaPolyActor* dynaActor);
|
||||
s32 func_8004356C(DynaPolyActor* dynaActor);
|
||||
s32 func_80043590(DynaPolyActor* dynaActor);
|
||||
|
@ -835,7 +842,12 @@ s32 CollisionCheck_SetAC_SAC(GlobalContext* globalCtx, CollisionCheckContext* co
|
|||
s32 CollisionCheck_SetOC(GlobalContext* globalCtx, CollisionCheckContext* colChkCtx, Collider* collider);
|
||||
s32 CollisionCheck_SetOC_SAC(GlobalContext* globalCtx, CollisionCheckContext* colChkCtx, Collider* collider, s32 index);
|
||||
s32 CollisionCheck_SetOCLine(GlobalContext* globalCtx, CollisionCheckContext* colChkCtx, OcLine* collider);
|
||||
void func_8005DFAC(GlobalContext* globalCtx, Collider* collider, Vec3f* v);
|
||||
// ? func_8005DF2C(?);
|
||||
// ? func_8005DF50(?);
|
||||
// ? func_8005DF74(?);
|
||||
void func_8005DFAC(GlobalContext* globalCtx, Collider* collider, Vec3f* pos);
|
||||
void func_8005E10C(GlobalContext* globalCtx, Collider* collider, Vec3f* pos);
|
||||
// ? func_8005E2EC(?);
|
||||
// ? func_8005E4F8(?);
|
||||
// ? func_8005E604(?);
|
||||
// ? func_8005E800(?);
|
||||
|
@ -2633,5 +2645,4 @@ void func_80820434(GlobalContext*, GraphicsContext*);
|
|||
void func_80821C10(GlobalContext*);
|
||||
void func_80825C14(GlobalContext*);
|
||||
void func_808161AC(GlobalContext*);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "ultra64/gs2dex.h"
|
||||
#include "z64save.h"
|
||||
#include "z64light.h"
|
||||
#include "z64bgcheck.h"
|
||||
#include "z64actor.h"
|
||||
#include "z64player.h"
|
||||
#include "z64audio.h"
|
||||
|
@ -188,50 +189,6 @@ typedef struct {
|
|||
/* 0x04 */ s32 counter;
|
||||
} SubGlobalContext7B8; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 xMin;
|
||||
/* 0x02 */ s16 ySurface;
|
||||
/* 0x04 */ s16 zMin;
|
||||
/* 0x06 */ s16 xLength;
|
||||
/* 0x08 */ s16 zLength;
|
||||
/* 0x0C */ u32 properties;
|
||||
|
||||
// 0x0008_0000 = ?
|
||||
// 0x0007_E000 = Room Index, 0x3F = all rooms
|
||||
// 0x0000_1F00 = Lighting Settings Index
|
||||
// 0x0000_00FF = CamData index
|
||||
} WaterBox; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3s colAbsMin;
|
||||
/* 0x06 */ Vec3s colAbsMax;
|
||||
/* 0x0C */ s16 nbVertices;
|
||||
/* 0x10 */ void* vertexArray;
|
||||
/* 0x14 */ s16 nbPolygons;
|
||||
/* 0x18 */ void* polygonArray;
|
||||
/* 0x1C */ void* polygonTypes;
|
||||
/* 0x20 */ void* cameraData;
|
||||
/* 0x24 */ u16 nbWaterBoxes;
|
||||
/* 0x28 */ WaterBox* waterBoxes;
|
||||
} CollisionHeader;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ CollisionHeader* colHeader;
|
||||
/* 0x04 */ char unk_04[0x4C];
|
||||
} StaticCollisionContext; // size = 0x50
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ ActorMesh actorMeshArr[50];
|
||||
/* 0x1388 */ char unk_1388[0x04];
|
||||
/* 0x138C */ u16 flags[50];
|
||||
/* 0x13F0 */ char unk_13F0[0x24];
|
||||
} DynaCollisionContext; // size = 0x1414
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ StaticCollisionContext stat;
|
||||
/* 0x0050 */ DynaCollisionContext dyna;
|
||||
} CollisionContext; // size = 0x1464
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3f pos;
|
||||
/* 0x0C */ f32 unk_0C; // radius?
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
#define INVISIBLE_ACTOR_MAX 20
|
||||
#define AM_FIELD_SIZE 0x27A0
|
||||
|
||||
// From z64.h
|
||||
struct Actor;
|
||||
// From z64.h
|
||||
struct GlobalContext;
|
||||
|
||||
// From z64light.h
|
||||
|
@ -22,11 +22,6 @@ typedef struct {
|
|||
Vec3s rot;
|
||||
} PosRot; // size = 0x14
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ char unk_00[0x8];
|
||||
/* 0x08 */ Vec3s norm; // Normal vector
|
||||
/* 0x0E */ s16 dist; // Plane distance from origin
|
||||
} CollisionPoly; // size = 0x10
|
||||
|
||||
typedef void (*ActorFunc)(struct Actor*, struct GlobalContext*);
|
||||
typedef u16 (*callback1_800343CC)(struct GlobalContext*, struct Actor*);
|
||||
|
@ -127,9 +122,9 @@ typedef struct Actor {
|
|||
/* 0x078 */ CollisionPoly* floorPoly; // Floor polygon an actor is over/touching
|
||||
/* 0x07C */ u8 wallPolySource; // Complex Poly Surface Source. 0x32 = Scene
|
||||
/* 0x07D */ u8 floorPolySource; // Complex Poly Surface Source. 0x32 = Scene. related to 0x80/88
|
||||
/* 0x07E */ s16 wallPolyRot; // Rotation of the wall poly an actor is touching
|
||||
/* 0x080 */ f32 groundY;
|
||||
/* 0x084 */ f32 yDistToWater;
|
||||
/* 0x07E */ s16 wallPolyRot; // Rotation of the wall poly
|
||||
/* 0x080 */ f32 groundY; // Floor poly height
|
||||
/* 0x084 */ f32 yDistToWater; // Distance from water surface
|
||||
/* 0x088 */ u16 bgCheckFlags;
|
||||
/* 0x08A */ s16 yawTowardsLink;
|
||||
/* 0x08C */ f32 xyzDistToLinkSq;
|
||||
|
@ -143,7 +138,7 @@ typedef struct Actor {
|
|||
/* 0x0F4 */ f32 uncullZoneForward; // amount to increase the uncull zone forward by (in projected space)
|
||||
/* 0x0F8 */ f32 uncullZoneScale; // amount to increase the uncull zone scale by (in projected space)
|
||||
/* 0x0FC */ f32 uncullZoneDownward; // amount to increase uncull zone downward by (in projected space)
|
||||
/* 0x100 */ Vec3f pos4;
|
||||
/* 0x100 */ Vec3f pos4; // previous position
|
||||
/* 0x10C */ u8 unk_10C; // Z-Target related
|
||||
/* 0x10D */ u8 unk_10D; // Z-Target related
|
||||
/* 0x10E */ u16 textId; // Text id to pass to link/display when interacting with an actor
|
||||
|
@ -165,26 +160,13 @@ typedef struct Actor {
|
|||
/* 0x13C */ char dbgPad[0x10]; // Padding that only exists in the debug rom
|
||||
} Actor; // size = 0x14C
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ char unk_00[0x04];
|
||||
/* 0x04 */ Actor* actor;
|
||||
/* 0x08 */ void* unk_08; // Struct800417A0*
|
||||
/* 0x0C */ char unk_0C[0x0C];
|
||||
/* 0x18 */ Vec3f scale1;
|
||||
/* 0x24 */ Vec3s rot1;
|
||||
/* 0x2C */ Vec3f pos1;
|
||||
/* 0x38 */ Vec3f scale2;
|
||||
/* 0x44 */ Vec3s rot2;
|
||||
/* 0x4C */ Vec3f pos2;
|
||||
/* 0x58 */ char unk_58[0x0C];
|
||||
} ActorMesh; // size = 0x64
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x14C */ u32 dynaPolyId;
|
||||
typedef struct DynaPolyActor {
|
||||
/* 0x000 */ struct Actor actor;
|
||||
/* 0x14C */ s32 bgId;
|
||||
/* 0x150 */ f32 unk_150;
|
||||
/* 0x154 */ f32 unk_154;
|
||||
/* 0x158 */ s16 unk_158;
|
||||
/* 0x158 */ s16 unk_158; // y rotation?
|
||||
/* 0x15A */ u16 unk_15A;
|
||||
/* 0x15C */ u32 unk_15C;
|
||||
/* 0x160 */ u8 unk_160;
|
||||
|
|
194
include/z64bgcheck.h
Normal file
194
include/z64bgcheck.h
Normal file
|
@ -0,0 +1,194 @@
|
|||
#ifndef _Z_BGCHECK_
|
||||
#define _Z_BGCHECK_
|
||||
|
||||
struct GlobalContext;
|
||||
struct Actor;
|
||||
struct DynaPolyActor;
|
||||
|
||||
#define COLPOLY_NORMAL_FRAC (1.0f / SHT_MAX)
|
||||
#define COLPOLY_SNORMAL(x) ((s16)((x) * SHT_MAX))
|
||||
#define COLPOLY_GET_NORMAL(n) ((n)*COLPOLY_NORMAL_FRAC)
|
||||
#define COLPOLY_VIA_FLAG_TEST(vIA, flags) ((vIA) & (((flags)&7) << 13))
|
||||
#define COLPOLY_VTX_INDEX(vI) ((vI)&0x1FFF)
|
||||
|
||||
#define BGACTOR_NEG_ONE -1
|
||||
#define BG_ACTOR_MAX 50
|
||||
#define BGCHECK_SCENE BG_ACTOR_MAX
|
||||
#define BGCHECK_Y_MIN -32000.0f
|
||||
#define BGCHECK_XYZ_ABSMAX 32760.0f
|
||||
#define BGCHECK_SUBDIV_OVERLAP 50
|
||||
#define BGCHECK_SUBDIV_MIN 150.0f
|
||||
|
||||
#define FUNC_80041EA4_RESPAWN 5
|
||||
#define FUNC_80041EA4_MOUNT_WALL 6
|
||||
#define FUNC_80041EA4_STOP 8
|
||||
#define FUNC_80041EA4_VOID_OUT 12
|
||||
|
||||
#define WATERBOX_ROOM(p) ((p >> 13) & 0x3F)
|
||||
#define RoomPoly CollisionPoly // FIXME: Update ZAP to remove RoomPoly
|
||||
|
||||
typedef struct {
|
||||
Vec3f scale;
|
||||
Vec3s rot;
|
||||
Vec3f pos;
|
||||
} ScaleRotPos;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 type;
|
||||
union {
|
||||
u16 vtxData[3];
|
||||
struct {
|
||||
/* 0x02 */ u16 flags_vIA; // 0xE000 is poly exclusion flags, 0x1FFF is vtxId
|
||||
/* 0x04 */ u16 flags_vIB; // 0xE000 is ? flags, 0x1FFF is vtxId
|
||||
/* 0x06 */ u16 vIC;
|
||||
};
|
||||
};
|
||||
/* 0x08 */ Vec3s normal; // Unit normal vector
|
||||
// Value ranges from -0x7FFF to 0x7FFF, representing -1.0 to 1.0; 0x8000 is invalid
|
||||
|
||||
/* 0x0E */ s16 dist; // Plane distance from origin along the normal
|
||||
} CollisionPoly; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 cameraSType;
|
||||
/* 0x02 */ s16 numCameras;
|
||||
/* 0x04 */ Vec3s* camPosData;
|
||||
} CamData;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 xMin;
|
||||
/* 0x02 */ s16 ySurface;
|
||||
/* 0x04 */ s16 zMin;
|
||||
/* 0x06 */ s16 xLength;
|
||||
/* 0x08 */ s16 zLength;
|
||||
/* 0x0C */ u32 properties;
|
||||
|
||||
// 0x0008_0000 = ?
|
||||
// 0x0007_E000 = Room Index, 0x3F = all rooms
|
||||
// 0x0000_1F00 = Lighting Settings Index
|
||||
// 0x0000_00FF = CamData index
|
||||
} WaterBox; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
u32 data[2];
|
||||
|
||||
// Type 1
|
||||
// 0x0800_0000 = wall damage
|
||||
} SurfaceType;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3s minBounds; // minimum coordinates of poly bounding box
|
||||
/* 0x06 */ Vec3s maxBounds; // maximum coordinates of poly bounding box
|
||||
/* 0x0C */ u16 nbVertices;
|
||||
/* 0x10 */ Vec3s* vtxList;
|
||||
/* 0x14 */ u16 nbPolygons;
|
||||
/* 0x18 */ CollisionPoly* polyList;
|
||||
/* 0x1C */ SurfaceType* surfaceTypeList;
|
||||
/* 0x20 */ CamData* cameraDataList;
|
||||
/* 0x24 */ u16 nbWaterBoxes;
|
||||
/* 0x28 */ WaterBox* waterBoxes;
|
||||
} CollisionHeader; // original name: BGDataInfo
|
||||
|
||||
typedef struct {
|
||||
s16 polyId;
|
||||
u16 next; // next SSNode index
|
||||
} SSNode;
|
||||
|
||||
typedef struct {
|
||||
u16 head; // first SSNode index
|
||||
} SSList;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 max; // original name: short_slist_node_size
|
||||
/* 0x02 */ u16 count; // original name: short_slist_node_last_index
|
||||
/* 0x04 */ SSNode* tbl; // original name: short_slist_node_tbl
|
||||
/* 0x08 */ u8* polyCheckTbl; // points to an array of bytes, one per static poly. Zero initialized when starting a
|
||||
// bg check, and set to 1 if that poly has already been tested.
|
||||
} SSNodeList;
|
||||
|
||||
typedef struct {
|
||||
SSNode* tbl;
|
||||
s32 count;
|
||||
s32 max;
|
||||
} DynaSSNodeList;
|
||||
|
||||
typedef struct {
|
||||
SSList floor;
|
||||
SSList wall;
|
||||
SSList ceiling;
|
||||
} StaticLookup;
|
||||
|
||||
typedef struct {
|
||||
u16 polyStartIndex;
|
||||
SSList ceiling;
|
||||
SSList wall;
|
||||
SSList floor;
|
||||
} DynaLookup;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ struct Actor* actor;
|
||||
/* 0x04 */ CollisionHeader* colHeader;
|
||||
/* 0x08 */ DynaLookup dynaLookup;
|
||||
/* 0x10 */ u16 vtxStartIndex;
|
||||
/* 0x14 */ ScaleRotPos prevTransform;
|
||||
/* 0x34 */ ScaleRotPos curTransform;
|
||||
/* 0x54 */ Sphere16 boundingSphere;
|
||||
/* 0x5C */ f32 minY;
|
||||
/* 0x60 */ f32 maxY;
|
||||
} BgActor; // size = 0x64
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ u8 bitFlag;
|
||||
/* 0x0004 */ BgActor bgActors[BG_ACTOR_MAX];
|
||||
/* 0x138C */ u16 bgActorFlags[BG_ACTOR_MAX]; // & 0x0008 = no dyna ceiling
|
||||
/* 0x13F0 */ CollisionPoly* polyList;
|
||||
/* 0x13F4 */ Vec3s* vtxList;
|
||||
/* 0x13F8 */ DynaSSNodeList polyNodes;
|
||||
/* 0x1404 */ s32 polyNodesMax;
|
||||
/* 0x1408 */ s32 polyListMax;
|
||||
/* 0x140C */ s32 vtxListMax;
|
||||
} DynaCollisionContext; // size = 0x1410
|
||||
|
||||
typedef struct CollisionContext {
|
||||
/* 0x00 */ CollisionHeader* colHeader; // scene's static collision
|
||||
/* 0x04 */ Vec3f minBounds; // minimum coordinates of collision bounding box
|
||||
/* 0x10 */ Vec3f maxBounds; // maximum coordinates of collision bounding box
|
||||
/* 0x1C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision
|
||||
/* 0x28 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths
|
||||
/* 0x34 */ Vec3f subdivLengthInv; // inverse of subdivision length
|
||||
/* 0x40 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount
|
||||
/* 0x44 */ SSNodeList polyNodes;
|
||||
/* 0x50 */ DynaCollisionContext dyna;
|
||||
/* 0x1460 */ u32 memSize; // Size of all allocated memory plus CollisionContext
|
||||
} CollisionContext; // size = 0x1464
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ struct GlobalContext* globalCtx;
|
||||
/* 0x04 */ struct CollisionContext* colCtx;
|
||||
/* 0x08 */ u16 xpFlags;
|
||||
/* 0x0C */ CollisionPoly** resultPoly;
|
||||
/* 0x10 */ f32 yIntersect;
|
||||
/* 0x14 */ Vec3f* pos;
|
||||
/* 0x18 */ s32* bgId;
|
||||
/* 0x1C */ struct Actor* actor;
|
||||
/* 0x20 */ u32 unk_20;
|
||||
/* 0x24 */ f32 chkDist;
|
||||
/* 0x28 */ DynaCollisionContext* dyna;
|
||||
/* 0x2C */ SSList* ssList;
|
||||
} DynaRaycast;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ struct CollisionContext* colCtx;
|
||||
/* 0x04 */ u16 xpFlags;
|
||||
/* 0x08 */ DynaCollisionContext* dyna;
|
||||
/* 0x0C */ SSList* ssList;
|
||||
/* 0x10 */ Vec3f* posA;
|
||||
/* 0x14 */ Vec3f* posB;
|
||||
/* 0x18 */ Vec3f* posResult;
|
||||
/* 0x1C */ CollisionPoly** resultPoly;
|
||||
/* 0x20 */ s32 chkOneFace; // bccFlags & 0x8
|
||||
/* 0x24 */ f32* distSq; // distance from posA to poly squared
|
||||
/* 0x28 */ f32 chkDist; // distance from poly
|
||||
} DynaLineTest;
|
||||
|
||||
#endif
|
|
@ -437,4 +437,4 @@
|
|||
*/
|
||||
#define CS_END() 0xFFFFFFFF, 0x00000000
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -89,8 +89,6 @@ typedef struct {
|
|||
}
|
||||
|
||||
#define IS_ZERO(f) (fabsf(f) < 0.008f)
|
||||
#define COLPOLY_NORM_FRAC (1.0f / 32767)
|
||||
#define BGCHECK_Y_MIN -32000.0f
|
||||
|
||||
// Trig macros
|
||||
#define DEGF_TO_BINANG(degreesf) (s16)(degreesf * 182.04167f + .5f)
|
||||
|
|
|
@ -268,68 +268,6 @@ typedef struct {
|
|||
u16 drawDistance;
|
||||
} LightSettings;
|
||||
|
||||
typedef struct {
|
||||
s16 absMinX, absMinY, absMinZ;
|
||||
s16 absMaxX, absMaxY, absMaxZ;
|
||||
s16 numVerts;
|
||||
s32 vtxSegmentOffset;
|
||||
s16 numPolygons;
|
||||
s32 polySegmentOffset;
|
||||
s32 polyTypeDefSegmentOffset;
|
||||
s32 camDataSegmentOffset;
|
||||
s16 numWaterBoxes;
|
||||
s32 waterBoxSegmentOffset;
|
||||
} ColHeader;
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ Vec3s pos;
|
||||
/* 0x0006 */ Vec3s rot;
|
||||
/* 0x000C */ s16 fov;
|
||||
/* 0x000E */ s16 jfifId;
|
||||
/* 0x0010 */ s16 unk_10;
|
||||
} CamPosData; // size = 0x12
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ s16 cameraSType;
|
||||
/* 0x0002 */ s16 numCameras;
|
||||
/* 0x0004 */ CamPosData* camPosDataSeg;
|
||||
} CamData; // size = 0x08
|
||||
|
||||
typedef struct {
|
||||
u32 unknown;
|
||||
u32 camPosDataSeg;
|
||||
} CamPosDataEntry;
|
||||
|
||||
|
||||
/*
|
||||
typedef union {
|
||||
_CamData data;
|
||||
long long int forceStructAlignment;
|
||||
} CamData;
|
||||
*/
|
||||
|
||||
/*
|
||||
typedef union {
|
||||
_CamPosData data;
|
||||
long long int forceStructAlignment;
|
||||
} CamPosData;
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
s16 type;
|
||||
s16 vtxA, vtxB, vtxC;
|
||||
s16 a, b, c, d;
|
||||
} RoomPoly;
|
||||
|
||||
typedef struct {
|
||||
s16 xMin;
|
||||
s16 ySurface;
|
||||
s16 zMin;
|
||||
s16 xLength;
|
||||
s16 zLength;
|
||||
s32 properties;
|
||||
} WaterBoxHeader;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 count; // number of points in the path
|
||||
/* 0x04 */ Vec3s* points; // Segment Address to the array of points
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue