CM_BoxTraceAgainstLeafList
0x0011cdf0 · 4020 bytes · __cdecl
_Z26CM_BoxTraceAgainstLeafListRK5Ray_tRK14CTraceListDataiR10CGameTrace
Decompiled
undefined (4 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CM_BoxTraceAgainstLeafList(Ray_t const&, CTraceListData const&, int, CGameTrace&) */
void CM_BoxTraceAgainstLeafList
(Ray_t *param_1,CTraceListData *param_2,int param_3,CGameTrace *param_4)
{
cbrush_t *pcVar1;
ushort *puVar2;
ushort uVar3;
undefined4 uVar4;
CCollisionBSPData *pCVar5;
char cVar6;
short sVar7;
uint uVar8;
int iVar9;
int iVar10;
Vector *pVVar11;
CCollisionBSPData *pCVar12;
float *pfVar13;
int iVar14;
int iVar15;
ushort *puVar16;
TraceInfo_t *pTVar17;
float fVar18;
float fVar19;
float fVar20;
float fVar21;
TraceInfo_t *local_78;
ushort *local_70;
TraceInfo_t *local_60;
undefined4 local_5c;
undefined4 local_58;
undefined4 local_54;
undefined4 local_50;
undefined4 local_4c;
undefined4 local_48;
float local_44;
undefined4 local_40;
undefined4 local_3c;
float local_38;
float local_34;
float local_30;
float local_2c;
float local_28;
float local_24;
float local_20;
local_5c = 0;
local_58 = 0;
if (_exit == 0.0) {
local_44 = 0.0;
}
else {
(**(code **)((int)_exit + 0x50))
(_exit,&local_5c,0,0,0,0,"/data/src/engine/./cmodel.cpp",0x866,
&CM_BoxTraceAgainstLeafList(Ray_t_const&,CTraceListData_const&,int,CGameTrace&)::
tm_fmt,"(%s)%s","Unaccounted","CM_BoxTraceAgainstLeafList");
local_44 = _exit;
}
iVar14 = _DAT_0040b9d4;
local_4c = local_5c;
local_48 = local_58;
/* try { // try from 0011d0d6 to 0011d124 has its CatchHandler @ 0011de5b */
if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
(iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
if ((char *)*_DAT_0040b030 != "CM_BoxTraceAgainstLeafList") {
_DAT_0040b030 =
(int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2aab49,&DAT_00000001,0x2a054b);
}
CVProfNode::EnterScope();
DAT_0040b02c = '\0';
}
/* try { // try from 0011cea3 to 0011d0ca has its CatchHandler @ 0011de57 */
local_60 = (TraceInfo_t *)BeginTrace();
CM_ClearTrace((CGameTrace *)(local_60 + 0x54));
pTVar17 = local_60;
*(undefined4 *)(local_60 + 0x114) = 0;
*(undefined4 *)(local_60 + 0x108) = 0;
*(undefined4 *)(local_60 + 0x10c) = 0;
*(undefined4 *)(local_60 + 0x110) = 0;
*(int *)(local_60 + 0xfc) = param_3;
*(undefined4 *)local_60 = *(undefined4 *)param_1;
*(undefined4 *)(local_60 + 4) = *(undefined4 *)(param_1 + 4);
*(undefined4 *)(local_60 + 8) = *(undefined4 *)(param_1 + 8);
*(float *)(local_60 + 0xc) = *(float *)(param_1 + 0x10) + *(float *)param_1;
*(float *)(local_60 + 0x10) = *(float *)(param_1 + 0x14) + *(float *)(param_1 + 4);
*(float *)(local_60 + 0x14) = *(float *)(param_1 + 0x18) + *(float *)(param_1 + 8);
*(uint *)(local_60 + 0x18) = *(uint *)(param_1 + 0x30) ^ 0x80000000;
*(uint *)(local_60 + 0x1c) = *(uint *)(param_1 + 0x34) ^ 0x80000000;
*(uint *)(local_60 + 0x20) = *(uint *)(param_1 + 0x38) ^ 0x80000000;
*(undefined4 *)(local_60 + 0x24) = *(undefined4 *)(param_1 + 0x30);
*(undefined4 *)(local_60 + 0x28) = *(undefined4 *)(param_1 + 0x34);
*(undefined4 *)(local_60 + 0x2c) = *(undefined4 *)(param_1 + 0x38);
*(undefined4 *)(local_60 + 0x30) = *(undefined4 *)(param_1 + 0x30);
*(undefined4 *)(local_60 + 0x34) = *(undefined4 *)(param_1 + 0x34);
*(undefined4 *)(local_60 + 0x38) = *(undefined4 *)(param_1 + 0x38);
*(undefined4 *)(local_60 + 0x3c) = *(undefined4 *)(param_1 + 0x10);
*(undefined4 *)(local_60 + 0x40) = *(undefined4 *)(param_1 + 0x14);
*(undefined4 *)(local_60 + 0x44) = *(undefined4 *)(param_1 + 0x18);
if (*(float *)(param_1 + 0x10) == 0.0) {
local_28 = 3.4028235e+38;
}
else {
local_28 = 1.0 / *(float *)(param_1 + 0x10);
}
if (*(float *)(param_1 + 0x14) == 0.0) {
local_24 = 3.4028235e+38;
}
else {
local_24 = 1.0 / *(float *)(param_1 + 0x14);
}
if (*(float *)(param_1 + 0x18) == 0.0) {
local_20 = 3.4028235e+38;
}
else {
local_20 = 1.0 / *(float *)(param_1 + 0x18);
}
*(float *)(local_60 + 0x48) = local_28;
*(float *)(local_60 + 0x4c) = local_24;
*(float *)(local_60 + 0x50) = local_20;
*(Ray_t *)(local_60 + 0x100) = param_1[0x44];
*(Ray_t *)(local_60 + 0x101) = param_1[0x45];
if (param_1[0x45] == (Ray_t)0x0) {
if (0 < *(int *)(param_2 + 0x98)) {
iVar14 = 0;
do {
iVar9 = *(int *)(pTVar17 + 0x104);
uVar8 = (uint)*(ushort *)(*(int *)(param_2 + 8) + iVar14 * 2);
if (*(int *)(iVar9 + 200) <= (int)uVar8) {
Error("Cannot load corrupted map.\n");
pTVar17 = local_60;
}
pcVar1 = (cbrush_t *)(*(int *)(iVar9 + 0xc4) + uVar8 * 8);
} while ((((*(uint *)pcVar1 & *(uint *)(pTVar17 + 0xfc)) == 0) ||
(CM_TestBoxInBrush(pTVar17,pcVar1), pTVar17 = local_60,
local_60[0x8a] == (TraceInfo_t)0x0
/* try { // try from 0011d13a to 0011d39a has its CatchHandler @ 0011de57 */))
&& (iVar14 = iVar14 + 1, iVar14 < *(int *)(param_2 + 0x98)));
}
if ((pTVar17[0x8b] == (TraceInfo_t)0x0) && (*(int *)(param_2 + 0xf0) != 0)) {
CM_TestInDispTree(pTVar17,*(ushort **)(param_2 + 0xa0),*(int *)(param_2 + 0xf0),
(Vector *)pTVar17,(Vector *)(pTVar17 + 0x18),(Vector *)(pTVar17 + 0x24),
*(int *)(pTVar17 + 0xfc),(CGameTrace *)(pTVar17 + 0x54));
pTVar17 = local_60;
}
if (param_2[0x544] != (CTraceListData)0x0) {
fVar21 = *(float *)(pTVar17 + 0x80);
goto LAB_0011d1bc;
}
pTVar17[0x8b] = (TraceInfo_t)0x1;
fVar21 = 0.0;
pTVar17[0x8a] = (TraceInfo_t)0x1;
*(undefined4 *)(pTVar17 + 0x80) = 0;
*(undefined4 *)(pTVar17 + 0x8c) = 0x3f800000;
fVar20 = *(float *)(param_1 + 0x20) + *(float *)param_1;
fVar19 = *(float *)(param_1 + 0x24) + *(float *)(param_1 + 4);
fVar18 = *(float *)(param_1 + 0x28) + *(float *)(param_1 + 8);
}
else {
local_70 = *(ushort **)(param_2 + 8);
iVar14 = *(int *)(local_60 + 0x104);
iVar9 = *(int *)(param_2 + 0x98);
if (param_1[0x44] == (Ray_t)0x0) {
if (0 < iVar9) {
puVar16 = local_70 + iVar9;
do {
uVar3 = *local_70;
if (*(int *)(iVar14 + 200) <= (int)(uint)uVar3) {
/* try { // try from 0011d7a0 to 0011da01 has its CatchHandler @ 0011de57 */
Error("Cannot load corrupted map.\n");
}
pcVar1 = (cbrush_t *)(*(int *)(iVar14 + 0xc4) + (uint)uVar3 * 8);
uVar8 = *(uint *)(pTVar17 + 0xfc) & *(uint *)pcVar1;
if (uVar8 != 0) {
if ((uVar8 == 0x80) && ((*(uint *)(pTVar17 + 0xfc) & 0x2000) != 0)) {
sVar7 = *(short *)(pcVar1 + 4);
if (sVar7 == -1) {
pCVar5 = *(CCollisionBSPData **)(pTVar17 + 0x104);
uVar3 = *(ushort *)(pcVar1 + 6);
pCVar12 = pCVar5;
if (*(int *)(pCVar5 + 0x78) <= (int)(uint)uVar3) {
Error("Cannot load corrupted map.\n");
pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
}
iVar15 = 0;
iVar9 = *(int *)(pCVar5 + 0x74);
while (iVar10 = CCollisionBSPData::GetSurfaceAtIndex
(pCVar12,*(ushort *)
((uint)uVar3 * 0x30 + iVar9 + 0x20 + iVar15 * 2)
), (*(byte *)(iVar10 + 6) & 0x80) == 0) {
iVar15 = iVar15 + 1;
if (iVar15 == 6) goto LAB_0011d850;
pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
}
goto LAB_0011d86c;
}
uVar3 = *(ushort *)(pcVar1 + 6);
iVar9 = *(int *)(pTVar17 + 0x104);
if (*(int *)(iVar9 + 0x6c) <= (int)(uint)uVar3) {
Error("Cannot load corrupted map.\n");
sVar7 = *(short *)(pcVar1 + 4);
}
iVar9 = *(int *)(iVar9 + 0x68);
if (sVar7 != 0) {
iVar15 = 0;
do {
iVar10 = CCollisionBSPData::GetSurfaceAtIndex
(*(CCollisionBSPData **)(pTVar17 + 0x104),
*(ushort *)(iVar9 + (uint)uVar3 * 8 + 4 + iVar15 * 8));
if ((*(byte *)(iVar10 + 6) & 0x80) != 0) goto LAB_0011d86c;
iVar15 = iVar15 + 1;
} while (iVar15 < (int)(uint)*(ushort *)(pcVar1 + 4));
}
}
LAB_0011d850:
CM_ClipBoxToBrush<false>(pTVar17,pcVar1);
if (*(float *)(pTVar17 + 0x80) == 0.0) break;
}
LAB_0011d86c:
local_70 = local_70 + 1;
} while (local_70 != puVar16);
}
}
else if (0 < iVar9) {
puVar16 = local_70 + iVar9;
do {
uVar3 = *local_70;
if (*(int *)(iVar14 + 200) <= (int)(uint)uVar3) {
/* try { // try from 0011d458 to 0011d5e5 has its CatchHandler @ 0011de57 */
Error("Cannot load corrupted map.\n");
}
pcVar1 = (cbrush_t *)(*(int *)(iVar14 + 0xc4) + (uint)uVar3 * 8);
uVar8 = *(uint *)(pTVar17 + 0xfc) & *(uint *)pcVar1;
if (uVar8 != 0) {
if ((uVar8 == 0x80) && ((*(uint *)(pTVar17 + 0xfc) & 0x2000) != 0)) {
sVar7 = *(short *)(pcVar1 + 4);
if (sVar7 == -1) {
pCVar5 = *(CCollisionBSPData **)(pTVar17 + 0x104);
uVar3 = *(ushort *)(pcVar1 + 6);
pCVar12 = pCVar5;
if (*(int *)(pCVar5 + 0x78) <= (int)(uint)uVar3) {
Error("Cannot load corrupted map.\n");
pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
}
iVar15 = 0;
iVar9 = *(int *)(pCVar5 + 0x74);
while (iVar10 = CCollisionBSPData::GetSurfaceAtIndex
(pCVar12,*(ushort *)
((uint)uVar3 * 0x30 + iVar9 + 0x20 + iVar15 * 2)),
(*(byte *)(iVar10 + 6) & 0x80) == 0) {
iVar15 = iVar15 + 1;
if (iVar15 == 6) goto LAB_0011d500;
pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
}
goto LAB_0011d518;
}
uVar3 = *(ushort *)(pcVar1 + 6);
iVar9 = *(int *)(pTVar17 + 0x104);
if (*(int *)(iVar9 + 0x6c) <= (int)(uint)uVar3) {
Error("Cannot load corrupted map.\n");
sVar7 = *(short *)(pcVar1 + 4);
}
iVar9 = *(int *)(iVar9 + 0x68);
if (sVar7 != 0) {
iVar15 = 0;
do {
iVar10 = CCollisionBSPData::GetSurfaceAtIndex
(*(CCollisionBSPData **)(pTVar17 + 0x104),
*(ushort *)(iVar9 + (uint)uVar3 * 8 + 4 + iVar15 * 8));
if ((*(byte *)(iVar10 + 6) & 0x80) != 0) goto LAB_0011d518;
iVar15 = iVar15 + 1;
} while (iVar15 < (int)(uint)*(ushort *)(pcVar1 + 4));
}
}
LAB_0011d500:
CM_ClipBoxToBrush<true>(pTVar17,pcVar1);
if (*(float *)(pTVar17 + 0x80) == 0.0) break;
}
LAB_0011d518:
local_70 = local_70 + 1;
} while (local_70 != puVar16);
}
pTVar17 = local_60;
fVar21 = *(float *)(local_60 + 0x80);
if ((0.0 < fVar21) && (local_60[0x8b] == (TraceInfo_t)0x0)) {
iVar14 = *(int *)(param_2 + 0xf0);
puVar16 = *(ushort **)(param_2 + 0xa0);
if (param_1[0x44] == (Ray_t)0x0) {
local_54 = 0;
local_50 = 0;
if (_exit == 0.0) {
local_38 = 0.0;
}
else {
/* try { // try from 0011db94 to 0011db96 has its CatchHandler @ 0011de57 */
(**(code **)((int)_exit + 0x50))
(_exit,&local_54,0,0,0,0,"/data/src/engine/./cmodel.cpp",0x562,
&CM_TraceToDispList<false,false>(TraceInfo_t*,unsigned_short_const*,int,float,float)
::tm_fmt,"(%s)%s","Unaccounted","CM_TraceToDispList");
local_38 = _exit;
}
iVar9 = _DAT_0040b9d4;
local_40 = local_54;
local_3c = local_50;
/* try { // try from 0011dd49 to 0011dd97 has its CatchHandler @ 0011ddfc */
if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
(iVar15 = ThreadGetCurrentId(), iVar9 == iVar15)) {
if ((char *)*_DAT_0040b030 != "CM_TraceToDispList") {
_DAT_0040b030 =
(int *)CVProfNode::GetSubNode
((char *)_DAT_0040b030,0x2aab36,&DAT_00000001,0x2a054b);
}
CVProfNode::EnterScope();
DAT_0040b02c = '\0';
}
puVar2 = puVar16 + iVar14;
if (0 < iVar14) {
do {
local_78 = pTVar17 + 0x3c;
uVar3 = *puVar16;
pfVar13 = (float *)((uint)uVar3 * 0x30 + g_pDispBounds);
if ((*(uint *)(pTVar17 + 0xfc) & (uint)pfVar13[9]) != 0) {
local_28 = pfVar13[4] + *(float *)(pTVar17 + 0x30);
local_24 = pfVar13[5] + *(float *)(pTVar17 + 0x34);
local_20 = pfVar13[6] + *(float *)(pTVar17 + 0x38);
local_34 = *pfVar13 - *(float *)(pTVar17 + 0x30);
local_30 = pfVar13[1] - *(float *)(pTVar17 + 0x34);
local_2c = pfVar13[2] - *(float *)(pTVar17 + 0x38);
/* try { // try from 0011dc9f to 0011dceb has its CatchHandler @ 0011de28 */
cVar6 = IsBoxIntersectingRay
((Vector *)&local_34,(Vector *)pfVar13[9],(Vector *)&local_34,
(Vector *)&local_28,(Vector *)pTVar17,(float)local_78);
if ((cVar6 != '\0') &&
(CM_TraceToDispTree<false>
(pTVar17,(CDispCollTree *)((uint)uVar3 * 0xf4 + g_pDispCollTrees),0.0,
1.0), *(float *)(pTVar17 + 0x80) == 0.0)) break;
}
puVar16 = puVar16 + 1;
} while (puVar16 != puVar2);
}
CM_PostTraceToDispTree(pTVar17);
iVar14 = _DAT_0040b9d4;
if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
(iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
cVar6 = CVProfNode::ExitScope();
if (cVar6 != '\0') {
_DAT_0040b030 = (int *)_DAT_0040b030[0x19];
}
DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
}
if (local_38 != 0.0) {
(**(code **)((int)local_38 + 0x54))(local_38,local_40,local_3c,0,0,0);
}
}
else {
local_34 = 0.0;
local_30 = 0.0;
if (_exit == 0.0) {
local_20 = 0.0;
}
else {
(**(code **)((int)_exit + 0x50))
(_exit,&local_34,0,0,0,0,"/data/src/engine/./cmodel.cpp",0x562,
&CM_TraceToDispList<true,false>(TraceInfo_t*,unsigned_short_const*,int,float,float)
::tm_fmt,"(%s)%s","Unaccounted","CM_TraceToDispList");
local_20 = _exit;
}
iVar9 = _DAT_0040b9d4;
local_28 = local_34;
local_24 = local_30;
/* try { // try from 0011da4e to 0011da9c has its CatchHandler @ 0011de38 */
if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
(iVar15 = ThreadGetCurrentId(), iVar9 == iVar15)) {
if ((char *)*_DAT_0040b030 != "CM_TraceToDispList") {
_DAT_0040b030 =
(int *)CVProfNode::GetSubNode
((char *)_DAT_0040b030,0x2aab36,&DAT_00000001,0x2a054b);
}
CVProfNode::EnterScope();
DAT_0040b02c = '\0';
}
puVar2 = puVar16 + iVar14;
if (0 < iVar14) {
do {
uVar3 = *puVar16;
pVVar11 = (Vector *)((uint)uVar3 * 0x30 + g_pDispBounds);
/* try { // try from 0011d67e to 0011d6c6 has its CatchHandler @ 0011de47 */
if ((((*(uint *)(pTVar17 + 0xfc) & *(uint *)(pVVar11 + 0x24)) != 0) &&
(cVar6 = IsBoxIntersectingRay
(pVVar11,pVVar11 + 0x10,pVVar11,pVVar11 + 0x10,(Vector *)pTVar17,
(float)(pTVar17 + 0x3c)), cVar6 != '\0')) &&
(CM_TraceToDispTree<true>
(pTVar17,(CDispCollTree *)((uint)uVar3 * 0xf4 + g_pDispCollTrees),0.0,1.0)
, *(float *)(pTVar17 + 0x80) == 0.0)) break;
puVar16 = puVar16 + 1;
} while (puVar16 != puVar2);
}
CM_PostTraceToDispTree(pTVar17);
iVar14 = _DAT_0040b9d4;
if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
(iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
cVar6 = CVProfNode::ExitScope();
if (cVar6 != '\0') {
_DAT_0040b030 = (int *)_DAT_0040b030[0x19];
}
DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
}
if (local_20 != 0.0) {
(**(code **)((int)local_20 + 0x54))(local_20,local_28,local_24,0,0,0);
}
}
fVar21 = *(float *)(local_60 + 0x80);
pTVar17 = local_60;
}
LAB_0011d1bc:
fVar20 = *(float *)(param_1 + 0x20) + *(float *)param_1;
fVar19 = *(float *)(param_1 + 0x24) + *(float *)(param_1 + 4);
fVar18 = *(float *)(param_1 + 0x28) + *(float *)(param_1 + 8);
if (fVar21 == 1.0) {
*(float *)(pTVar17 + 0x60) = *(float *)(param_1 + 0x10) + fVar20;
*(float *)(pTVar17 + 100) = *(float *)(param_1 + 0x14) + fVar19;
*(float *)(pTVar17 + 0x68) = *(float *)(param_1 + 0x18) + fVar18;
fVar21 = *(float *)(pTVar17 + 0x8c);
goto joined_r0x0011d910;
}
}
*(float *)(pTVar17 + 0x60) = *(float *)(param_1 + 0x10) * fVar21 + fVar20;
*(float *)(pTVar17 + 100) = *(float *)(param_1 + 0x14) * fVar21 + fVar19;
*(float *)(pTVar17 + 0x68) = fVar21 * *(float *)(param_1 + 0x18) + fVar18;
fVar21 = *(float *)(pTVar17 + 0x8c);
joined_r0x0011d910:
if (fVar21 == 0.0) {
*(float *)(pTVar17 + 0x54) = fVar20;
*(float *)(pTVar17 + 0x58) = fVar19;
*(float *)(pTVar17 + 0x5c) = fVar18;
}
else {
if (fVar21 == 1.0) {
pTVar17[0x8a] = (TraceInfo_t)0x1;
pTVar17[0x8b] = (TraceInfo_t)0x1;
*(undefined4 *)(pTVar17 + 0x80) = 0;
*(float *)(pTVar17 + 0x60) = fVar20;
*(float *)(pTVar17 + 100) = fVar19;
*(float *)(pTVar17 + 0x68) = fVar18;
}
*(float *)(pTVar17 + 0x54) = *(float *)(param_1 + 0x10) * fVar21 + fVar20;
*(float *)(pTVar17 + 0x58) = *(float *)(param_1 + 0x14) * fVar21 + fVar19;
*(float *)(pTVar17 + 0x5c) = fVar21 * *(float *)(param_1 + 0x18) + fVar18;
}
*(undefined4 *)param_4 = *(undefined4 *)(pTVar17 + 0x54);
*(undefined4 *)(param_4 + 4) = *(undefined4 *)(pTVar17 + 0x58);
*(undefined4 *)(param_4 + 8) = *(undefined4 *)(pTVar17 + 0x5c);
*(undefined4 *)(param_4 + 0xc) = *(undefined4 *)(pTVar17 + 0x60);
*(undefined4 *)(param_4 + 0x10) = *(undefined4 *)(pTVar17 + 100);
*(undefined4 *)(param_4 + 0x14) = *(undefined4 *)(pTVar17 + 0x68);
*(undefined4 *)(param_4 + 0x18) = *(undefined4 *)(pTVar17 + 0x6c);
*(undefined4 *)(param_4 + 0x1c) = *(undefined4 *)(pTVar17 + 0x70);
*(undefined4 *)(param_4 + 0x20) = *(undefined4 *)(pTVar17 + 0x74);
*(undefined4 *)(param_4 + 0x24) = *(undefined4 *)(pTVar17 + 0x78);
*(TraceInfo_t *)(param_4 + 0x28) = pTVar17[0x7c];
*(TraceInfo_t *)(param_4 + 0x29) = pTVar17[0x7d];
*(undefined2 *)(param_4 + 0x2a) = *(undefined2 *)(pTVar17 + 0x7e);
*(undefined4 *)(param_4 + 0x2c) = *(undefined4 *)(pTVar17 + 0x80);
*(undefined4 *)(param_4 + 0x30) = *(undefined4 *)(pTVar17 + 0x84);
*(undefined2 *)(param_4 + 0x34) = *(undefined2 *)(pTVar17 + 0x88);
*(TraceInfo_t *)(param_4 + 0x36) = pTVar17[0x8a];
*(TraceInfo_t *)(param_4 + 0x37) = pTVar17[0x8b];
*(undefined4 *)(param_4 + 0x38) = *(undefined4 *)(pTVar17 + 0x8c);
uVar4 = *(undefined4 *)(pTVar17 + 0x94);
*(undefined4 *)(param_4 + 0x3c) = *(undefined4 *)(pTVar17 + 0x90);
*(undefined4 *)(param_4 + 0x40) = uVar4;
*(undefined4 *)(param_4 + 0x44) = *(undefined4 *)(pTVar17 + 0x98);
*(undefined2 *)(param_4 + 0x48) = *(undefined2 *)(pTVar17 + 0x9c);
*(undefined2 *)(param_4 + 0x4a) = *(undefined2 *)(pTVar17 + 0x9e);
*(undefined4 *)(param_4 + 0x4c) = *(undefined4 *)(pTVar17 + 0xa0);
*(undefined4 *)(param_4 + 0x50) = *(undefined4 *)(pTVar17 + 0xa4);
EndTrace(&local_60);
iVar14 = _DAT_0040b9d4;
if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
(iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
cVar6 = CVProfNode::ExitScope();
if (cVar6 != '\0') {
_DAT_0040b030 = (int *)_DAT_0040b030[0x19];
}
DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
}
if (local_44 != 0.0) {
(**(code **)((int)local_44 + 0x54))(local_44,local_4c,local_48,0,0,0);
}
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.