Skip to content

Commit

Permalink
rel: Add header and symbols for hitdrv
Browse files Browse the repository at this point in the history
  • Loading branch information
PistonMiner committed Oct 19, 2022
1 parent 9ef9c81 commit c346e99
Show file tree
Hide file tree
Showing 4 changed files with 296 additions and 0 deletions.
43 changes: 43 additions & 0 deletions ttyd-tools/rel/include/ttyd.eu.lst
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,49 @@
80010e28:dispReInit
80010e34:dispInit

// hitdrv.o
80013eb0:hitBindUpdate
80013fbc:hitBindMapObj
800140b4:hitGetDamageReturnPos
800140c0:hitGrpDamageReturnSet
// 80014188:hitDamageReturnSet
800144d4:hitGetAttr
800144ec:hitGetName
80014588:hitObjGetNormal
80014660:hitObjGetPos
// 800147b0:hitObjGetPosSub
80014d1c:hitNameToPtr
80014dcc:hitCheckSphereFilter
80015364:hitCheckAttr
// 80015498:chkFilterAttr
800154b0:hitCheckVecHitObjXZ
// 80015594:checkTriVec_xz
80015940:hitCheckFilter
80015a68:hitCheckVecFilter
// 8001676c:hitCalcVtxPosition
// 80016c20:hitReCalcMatrix2
800170cc:hitReCalcMatrix
8001712c:hitGrpAttrOff
80017204:hitGrpAttrOn
// 800172dc:hitAtrOff
// 800175f0:hitAtrOn
80017900:hitObjAttrOff
800179d4:hitObjAttrOn
80017aa8:hitGrpFlagOff
80017b80:hitGrpFlagOn
// 80017c58:hitFlgOff
// 80017f70:hitFlgOn
80018280:hitObjFlagOff
80018354:hitObjFlagOn
80018428:hitMain
80018674:hitDelete
800187ac:hitEntryMOBJ
8001881c:hitEntry
// 800188b8:hitEntrySub
// 80018b30:_hitEnt
80018fbc:hitReInit
8001905c:hitInit

// seqdrv.o
8002e2cc:seqCheckSeq
8002e2e8:seqGetNextSeq
Expand Down
43 changes: 43 additions & 0 deletions ttyd-tools/rel/include/ttyd.jp.lst
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,49 @@
80010ab8:dispReInit
80010ac4:dispInit

// hitdrv.o
80013a34:hitBindUpdate
80013b40:hitBindMapObj
80013c38:hitGetDamageReturnPos
80013c44:hitGrpDamageReturnSet
// 80013d0c:hitDamageReturnSet
80014058:hitGetAttr
80014070:hitGetName
8001410c:hitObjGetNormal
800141e4:hitObjGetPos
// 80014334:hitObjGetPosSub
800148a0:hitNameToPtr
80014950:hitCheckSphereFilter
80014ee8:hitCheckAttr
// 8001501c:chkFilterAttr
80015034:hitCheckVecHitObjXZ
// 80015118:checkTriVec_xz
800154c4:hitCheckFilter
800155ec:hitCheckVecFilter
// 800162f0:hitCalcVtxPosition
// 800167a4:hitReCalcMatrix2
80016c50:hitReCalcMatrix
80016cb0:hitGrpAttrOff
80016d88:hitGrpAttrOn
// 80016e60:hitAtrOff
// 80017174:hitAtrOn
80017484:hitObjAttrOff
80017558:hitObjAttrOn
8001762c:hitGrpFlagOff
80017704:hitGrpFlagOn
// 800177dc:hitFlgOff
// 80017af4:hitFlgOn
80017e04:hitObjFlagOff
80017ed8:hitObjFlagOn
80017fac:hitMain
800181f8:hitDelete
80018330:hitEntryMOBJ
800183a0:hitEntry
// 80018438:hitEntrySub
// 800186b0:_hitEnt
80018b38:hitReInit
80018bd0:hitInit

// seqdrv.o
8002dbc0:seqCheckSeq
8002dbdc:seqGetNextSeq
Expand Down
43 changes: 43 additions & 0 deletions ttyd-tools/rel/include/ttyd.us.lst
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,49 @@
80010c64:dispReInit
80010c70:dispInit

// hitdrv.o
80013cec:hitBindUpdate
80013df8:hitBindMapObj
80013ef0:hitGetDamageReturnPos
80013efc:hitGrpDamageReturnSet
// 80013fc4:hitDamageReturnSet
80014310:hitGetAttr
80014328:hitGetName
800143c4:hitObjGetNormal
8001449c:hitObjGetPos
// 800145ec:hitObjGetPosSub
80014b58:hitNameToPtr
80014c08:hitCheckSphereFilter
800151a0:hitCheckAttr
// 800152d4:chkFilterAttr
800152ec:hitCheckVecHitObjXZ
// 800153d0:checkTriVec_xz
8001577c:hitCheckFilter
800158a4:hitCheckVecFilter
// 800165a8:hitCalcVtxPosition
// 80016a5c:hitReCalcMatrix2
80016f08:hitReCalcMatrix
80016f68:hitGrpAttrOff
80017040:hitGrpAttrOn
// 80017118:hitAtrOff
// 8001742c:hitAtrOn
8001773c:hitObjAttrOff
80017810:hitObjAttrOn
800178e4:hitGrpFlagOff
800179bc:hitGrpFlagOn
// 80017a94:hitFlgOff
// 80017dac:hitFlgOn
800180bc:hitObjFlagOff
80018190:hitObjFlagOn
80018264:hitMain
800184b0:hitDelete
800185e8:hitEntryMOBJ
80018658:hitEntry
// 800186f4:hitEntrySub
// 8001896c:_hitEnt
80018df8:hitReInit
80018e98:hitInit

// seqdrv.o
8002e1e4:seqCheckSeq
8002e200:seqGetNextSeq
Expand Down
167 changes: 167 additions & 0 deletions ttyd-tools/rel/include/ttyd/hitdrv.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
#pragma once

#include <cstdint>

namespace ttyd::hitdrv {

struct HitCheckQuery
{
uint32_t bCurrentHitSingleSided;
uint32_t wUser0;
uint32_t wUser1;
gc::vec3 targetPosition;
gc::vec3 targetDirection;
gc::vec3 hitPosition;
gc::vec3 hitNormal;
float inOutTargetDistance;
} __attribute__((__packed__));

static_assert(sizeof(HitCheckQuery) == 0x40);

struct HitEntryTriangleData
{
gc::vec3 worldSpaceVertex0Position;
gc::vec3 worldSpaceVertex1Position;
gc::vec3 worldSpaceVertex2Position;
gc::vec3 edgeV0V2;
gc::vec3 edgeV1V0;
gc::vec3 edgeV2V1;
gc::vec3 realNormal;
} __attribute__((__packed__));

static_assert(sizeof(HitEntryTriangleData) == 0x54);

struct HitDamageReturn
{
const char *mapobjName;
gc::vec3 returnPosition;
} __attribute__((__packed__));

static_assert(sizeof(HitDamageReturn) == 0x10);

enum HitEntryFlags
{
HitEntryFlags_ShipOnly = 0x80,

HitEntryFlags_MaterialShallowWater = 0x100,
HitEntryFlags_WaterHazard = 0x200,
HitEntryFlags_Unk1Hazard = 0x400,
HitEntryFlags_Unk2Hazard = 0x800,
HitEntryFlags_UnkMaterial3_waterRelated = 0x1000,

HitEntryFlags_UnkMaterial1 = 0x100000,
HitEntryFlags_UnkMaterial2 = 0x200000,
HitEntryFlags_MaterialMetal = 0x400000,

HitEntryFlags_Bero = 0x800000,

HitEntryFlags_DamageReturnSet = 0x40000000,
};

struct HitEntry
{
uint16_t flags;

uint8_t pad_2[0x2];

uint32_t attributes;
void *pSourceJoint; // Reference to unimplemented type MapDataFileJoint
gc::mat3x4 localSpaceToWorldSpaceMatrix;
gc::mat3x4 wTransformMtx_2;

uint8_t gap_6c[0x30];

gc::vec3 localSpaceOrigin;
uint16_t triangleDataCount;
int16_t mapSubgroupIndex;
HitEntryTriangleData *pTriangleData;
HitDamageReturn *pDamageReturn;

uint8_t gap_b4[0xc];

gc::vec3 worldSpaceOrigin;
float worldSpaceBboxRadius;
void *pMobj; // Reference to unimplemented type MobjEntry
HitEntry *pParent;
HitEntry *pChild;
HitEntry *pNext;
HitEntry *pNextActive;
} __attribute__((__packed__));

static_assert(sizeof(HitEntry) == 0xe4);

typedef int32_t (* PFN_HitFilterFunction)(HitCheckQuery* query, HitEntry* hit);

extern "C" {

void hitInit();
void hitReInit();

// local: _hitEnt
// local: hitEntrySub
HitEntry *hitEntry(void *pJoint, gc::mat3x4 *mat, int supgroupIndex);
HitEntry *hitEntryMOBJ(void *pJoint, gc::mat3x4 *mat);
void hitDelete(const char *mapobjName);

void hitMain();

void hitObjFlagOn(const char *mapobjName, uint16_t flags);
void hitObjFlagOff(const char *mapobjName, uint16_t flags);
// local: hitFlgOn
// local: hitFlgOff
void hitGrpFlagOn(const char *mapobjName, uint16_t flags);
void hitGrpFlagOff(const char *mapobjName, uint16_t flags);
void hitObjAttrOn(const char* mapobjName, uint32_t attr);
void hitObjAttrOff(const char* mapobjName, uint32_t attr);
// local: hitAtrOn
// local: hitAtrOff
void hitGrpAttrOn(const char* mapobjName, uint32_t attr);
void hitGrpAttrOff(const char* mapobjName, uint32_t attr);

void hitReCalcMatrix(HitEntry *hit, gc::mat3x4 *mat);
// local: hitReCalcMatrix2
// local: hitCalcVtxPosition

HitEntry* hitCheckVecFilter(
HitCheckQuery* pQuery,
PFN_HitFilterFunction filterFunction
);
HitEntry* hitCheckFilter(
PFN_HitFilterFunction filterFunction,
float* pHitX, float* pHitY, float* pHitZ,
float* pInOutDistance,
float* pHitNX, float* pHitNY, float* pHitNZ,
float x, float y, float z,
float nx, float ny, float nz
);
// local: checkTriVec_xz
int hitCheckVecHitObjXZ(HitCheckQuery *pQuery, HitEntry *hit);
// local: chkFilterAttr
HitEntry* hitCheckAttr(
uint32_t bitMask,
float* pOutPositionX, float* pOutPositionY, float* pOutPositionZ,
float* pInOutDistance,
float* pOutNormalX, float* pOutNormalY, float* pOutNormalZ,
float targetPosX, float targetPosY, float targetPosZ,
float targetNormX, float targetNormY, float targetNormZ
);
// hitCheckSphereFilter

HitEntry *hitNameToPtr(const char *mapobjName);

// local: hitObjGetPosSub
void hitObjGetPos(const char *mapobjName, gc::vec3 *pOutPosition);
void hitObjGetNormal(const char *mapobjName, gc::vec3 *pOutNormal);
char *hitGetName(HitEntry *hit);
uint32_t hitGetAttr(HitEntry *hit);

// local: hitDamageReturnSet
void hitGrpDamageReturnSet(const char *mapobjName, HitDamageReturn *pDamageReturn);
gc::vec3 *hitGetDamageReturnPos(HitEntry *hit);

void hitBindMapObj(const char *mapobjName, const char *bindMapObjName);
void hitBindUpdate(const char *mapobjName);

}

}

0 comments on commit c346e99

Please sign in to comment.