CDispInfo::TesselateDisplacement
0x00134f60 · 6602 bytes · __thiscall
_ZN9CDispInfo21TesselateDisplacementEv
Decompiled
undefined (1 param)
/* CDispInfo::TesselateDisplacement() */
void __thiscall CDispInfo::TesselateDisplacement(CDispInfo *this)
{
short *psVar1;
short *psVar2;
short *psVar3;
short *psVar4;
short *psVar5;
short *psVar6;
CVertIndex *pCVar7;
short sVar8;
short sVar9;
short sVar10;
short sVar11;
short sVar12;
int *piVar13;
undefined2 *puVar14;
undefined4 uVar15;
short sVar16;
int iVar17;
undefined4 *puVar18;
int iVar19;
int iVar20;
uint uVar21;
undefined2 *puVar22;
int iVar23;
int iVar24;
undefined2 *puVar25;
int iVar26;
int iVar27;
undefined2 *puVar28;
int iVar29;
int iVar30;
undefined2 *puVar31;
int iVar32;
int iVar33;
undefined2 *puVar34;
int iVar35;
int iVar36;
short sVar37;
short sVar38;
short sVar39;
short sVar40;
short sVar41;
int iVar42;
undefined4 *puVar43;
int iVar44;
byte bVar45;
undefined2 local_328;
undefined2 local_318;
int local_314;
undefined2 local_308;
int local_304;
CDispInfo *local_300;
int local_2fc;
undefined2 local_2f0;
int local_2e8;
int local_2e4;
undefined2 local_2d8;
int local_2cc;
int local_2c8;
int local_2b8;
int local_2b4;
int local_2b0;
int local_2ac;
undefined2 *local_298;
int local_290;
uint local_280 [24];
CDispInfo *local_220;
int local_21c;
int local_218;
short local_214 [6];
undefined4 local_208 [39];
undefined4 local_16c;
int local_164;
int local_158;
int *local_154;
undefined1 local_14c;
int local_148;
int local_13c;
int *local_138;
int local_134;
int local_130;
undefined4 local_12c;
int local_128;
undefined4 local_124;
undefined4 local_120;
undefined4 local_11c;
undefined1 local_118;
undefined4 local_114 [19];
undefined4 local_c8;
uint local_c4;
undefined4 local_c0;
undefined4 local_b4;
undefined4 local_b0;
undefined4 local_a8 [8];
undefined4 local_88 [6];
int *local_70;
undefined1 local_6c;
undefined4 local_68;
undefined4 local_64;
undefined4 local_60;
undefined4 local_5c;
undefined4 local_58;
undefined4 local_54;
undefined4 local_50 [8];
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
CDispInfo *local_20;
bVar45 = 0;
ClearAllDecalFragments(this);
ClearAllShadowDecalFragments(this);
local_14c = 0;
local_138 = (int *)0x0;
local_134 = 0;
iVar17 = *(int *)(*(int *)(this + 0x1dc) + 0x24) + -1;
local_130 = 0;
local_128 = 0;
local_124 = 0;
local_120 = 0xffffffff;
local_11c = 0;
local_70 = (int *)0x0;
iVar17 = iVar17 * iVar17 * 6;
local_2c = 0xffffffff;
local_28 = 0;
local_20 = this;
local_64 = 0;
local_60 = 0;
local_68 = 0;
local_30 = 0;
local_c8 = 0xffffffff;
piVar13 = (int *)**(int **)(this + 0x28);
/* try { // try from 0013507a to 00135327 has its CatchHandler @ 00136996 */
local_154 = piVar13;
(**(code **)(*piVar13 + 0x5c))(piVar13,0,0,0,*(undefined4 *)(this + 0x24),iVar17,local_208);
local_130 = iVar17;
local_138 = piVar13 + 1;
local_134 = iVar17;
puVar18 = local_208;
puVar43 = local_114;
for (iVar17 = 0x29; iVar17 != 0; iVar17 = iVar17 + -1) {
*puVar43 = *puVar18;
puVar18 = puVar18 + (uint)bVar45 * -2 + 1;
puVar43 = puVar43 + (uint)bVar45 * -2 + 1;
}
local_70 = piVar13;
local_12c = local_16c;
local_118 = 1;
local_128 = 0;
local_64 = 0;
local_148 = local_164;
local_68 = 0;
local_6c = 1;
local_60 = 0;
local_13c = local_158;
local_c4 = ~-(uint)(local_c4 == 0) & 2;
local_5c = local_c0;
local_58 = local_b4;
puVar18 = local_a8;
do {
puVar43 = puVar18 + 1;
puVar18[0x16] = *puVar18;
puVar18 = puVar43;
} while (puVar43 != local_88);
local_54 = local_b0;
local_220 = this + 0x118;
iVar17 = (**(code **)(*(int *)this + 0x48))(this);
local_21c = iVar17;
local_218 = 0;
puVar14 = *(undefined2 **)(local_20 + 0x24c);
if (1 < *(int *)(iVar17 + 0x1c)) {
local_2b8 = 1;
local_290 = 0;
local_2ac = *(int *)(iVar17 + 0x24);
sVar16 = *(short *)(iVar17 + 0x20);
iVar44 = *(short *)(iVar17 + 0x22) * local_2ac;
local_298 = puVar14;
LAB_0013538c:
local_300 = local_220;
local_2b0 = *(int *)(local_21c + 8);
psVar1 = (short *)(local_2b0 + (iVar44 + sVar16) * 0x10 + local_290 * 4);
sVar37 = psVar1[1];
sVar8 = *psVar1;
iVar20 = local_2ac * sVar37 + (int)sVar8;
uVar21 = *(uint *)(local_220 + (iVar20 >> 5) * 4) & 1 << ((byte)iVar20 & 0x1f);
local_280[local_290] = uVar21;
iVar20 = local_218;
if (uVar21 != 0) {
puVar22 = local_298 + local_2b8 * 0xe;
local_2d8 = (undefined2)local_218;
if (2 < *(int *)(local_21c + 0x1c)) {
local_2b4 = 0;
iVar19 = *(int *)(local_21c + 0x24);
local_2cc = local_2b8 + 1;
LAB_0013564d:
iVar23 = local_21c;
psVar2 = (short *)(local_2b0 + ((int)sVar8 + sVar37 * iVar19) * 0x10 + local_2b4 * 4);
sVar38 = psVar2[1];
sVar9 = *psVar2;
iVar24 = local_2ac * sVar38 + (int)sVar9;
uVar21 = *(uint *)(local_300 + (iVar24 >> 5) * 4) & 1 << ((byte)iVar24 & 0x1f);
local_280[local_2b4 + 4] = uVar21;
iVar24 = local_218;
if (uVar21 != 0) {
puVar25 = local_298 + local_2cc * 0xe;
local_2f0 = (undefined2)local_218;
if (3 < *(int *)(iVar23 + 0x1c)) {
iVar26 = *(int *)(iVar23 + 0x24);
local_2e8 = local_2cc + 1;
local_2c8 = 0;
LAB_00135ba2:
psVar3 = (short *)(local_2b0 + ((int)sVar9 + sVar38 * iVar26) * 0x10 + local_2c8 * 4);
sVar39 = psVar3[1];
sVar10 = *psVar3;
iVar27 = local_2ac * sVar39 + (int)sVar10;
uVar21 = *(uint *)(local_300 + (iVar27 >> 5) * 4) & 1 << ((byte)iVar27 & 0x1f);
local_280[local_2c8 + 8] = uVar21;
iVar27 = local_218;
if (uVar21 != 0) {
puVar28 = local_298 + local_2e8 * 0xe;
local_308 = (undefined2)local_218;
if (4 < *(int *)(iVar23 + 0x1c)) {
iVar29 = *(int *)(iVar23 + 0x24);
local_304 = local_2e8 + 1;
local_2e4 = 0;
LAB_00135fa5:
psVar4 = (short *)(local_2b0 + ((int)sVar10 + sVar39 * iVar29) * 0x10 +
local_2e4 * 4);
sVar40 = psVar4[1];
sVar11 = *psVar4;
iVar30 = local_2ac * sVar40 + (int)sVar11;
uVar21 = 1 << ((byte)iVar30 & 0x1f) & *(uint *)(local_300 + (iVar30 >> 5) * 4);
local_280[local_2e4 + 0xc] = uVar21;
iVar30 = local_218;
if (uVar21 != 0) {
local_318 = (undefined2)local_218;
puVar31 = local_298 + local_304 * 0xe;
if (5 < *(int *)(iVar23 + 0x1c)) {
local_2fc = 0;
iVar32 = *(int *)(iVar23 + 0x24);
local_314 = local_304 + 1;
do {
psVar5 = (short *)(((int)sVar11 + sVar40 * iVar32) * 0x10 + local_2b0 +
local_2fc * 4);
sVar41 = psVar5[1];
sVar12 = *psVar5;
iVar33 = local_2ac * sVar41 + (int)sVar12;
uVar21 = *(uint *)(local_300 + (iVar33 >> 5) * 4) & 1 << ((byte)iVar33 & 0x1f)
;
local_280[local_2fc + 0x10] = uVar21;
iVar33 = local_218;
if (uVar21 == 0) {
*(undefined1 *)(local_298 + local_314 * 0xe + 1) = 0;
*(undefined1 *)((int)local_298 + local_314 * 0x1c + 3) = 0;
}
else {
puVar34 = local_298 + local_314 * 0xe;
local_328 = (undefined2)local_218;
if (*(int *)(iVar23 + 0x1c) < 7) {
local_280[0x17] = 0;
local_280[0x16] = 0;
local_280[0x15] = 0;
local_280[0x14] = 0;
LAB_001364be:
*(undefined1 *)((int)puVar34 + 3) = 0;
}
else {
iVar23 = *(int *)(iVar23 + 0x24);
iVar35 = local_314 + 1;
iVar42 = 0;
while( true ) {
pCVar7 = (CVertIndex *)
(local_2b0 + ((int)sVar12 + sVar41 * iVar23) * 0x10 +
iVar42 * 4);
iVar36 = (int)*(short *)pCVar7 + *(short *)(pCVar7 + 2) * local_2ac;
uVar21 = 1 << ((byte)iVar36 & 0x1f) &
*(uint *)(local_300 + (iVar36 >> 5) * 4);
local_280[iVar42 + 0x14] = uVar21;
if (uVar21 == 0) {
iVar36 = iVar35 * 0x1c + *(int *)(local_20 + 0x24c);
*(undefined1 *)(iVar36 + 2) = 0;
*(undefined1 *)(iVar36 + 3) = 0;
}
else {
TesselateDisplacement_R<CEngineTesselateHelper>
((CEngineTesselateHelper *)&local_220,pCVar7,iVar35,6);
}
iVar42 = iVar42 + 1;
if (iVar42 == 4) break;
iVar35 = iVar35 + *(int *)(local_21c + 0x4c);
local_2ac = *(int *)(local_21c + 0x24);
local_2b0 = *(int *)(local_21c + 8);
local_300 = local_220;
}
if (iVar33 == local_218) goto LAB_001364be;
*(undefined1 *)((int)puVar34 + 3) = 1;
local_328 = (undefined2)local_218;
}
local_298 = (undefined2 *)0x0;
uVar15 = *(undefined4 *)(local_21c + 0x1c);
iVar23 = 0;
if (0 < DAT_0033c118) {
do {
psVar6 = (short *)(g_TWinding + iVar23 * 6);
if ((psVar6[2] == -1) || (local_280[psVar6[2] + 0x14] == 0)) {
local_2ac._0_2_ = (short)(1 << ((char)uVar15 - 6U & 0x1f));
iVar33 = *(int *)(local_21c + 0x24);
iVar35 = (int)(short)(*psVar6 * (short)local_2ac + *psVar5) +
(short)(psVar6[1] * (short)local_2ac + psVar5[1]) * iVar33;
if ((*(uint *)(local_220 + (iVar35 >> 5) * 4) &
1 << ((byte)iVar35 & 0x1f)) != 0) {
local_214[(int)local_298] = (short)iVar35;
if (local_298 == (undefined2 *)0x1) {
local_214[2] = *psVar5 + (short)iVar33 * psVar5[1];
sVar41 = (short)*(undefined4 *)(local_20 + 0x2c);
*(short *)(local_148 + local_128 * 2) =
sVar41 + (short)local_12c + local_214[0];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) =
sVar41 + (short)local_12c + local_214[1];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) =
sVar41 + (short)local_12c + local_214[2];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(*(int *)(local_20 + 0xf4) + local_218 * 2) =
sVar41 + local_214[0];
*(short *)(*(int *)(local_20 + 0xf4) + 2 + local_218 * 2) =
sVar41 + local_214[1];
*(short *)(*(int *)(local_20 + 0xf4) + 4 + local_218 * 2) =
sVar41 + local_214[2];
local_218 = local_218 + 3;
local_214[0] = local_214[1];
}
else {
local_298 = (undefined2 *)0x1;
}
}
}
else {
local_298 = (undefined2 *)0x0;
}
iVar23 = iVar23 + 1;
} while (iVar23 < DAT_0033c118);
}
*(char *)(puVar34 + 1) = (char)local_218 - (char)local_328;
*puVar34 = local_328;
}
local_2fc = local_2fc + 1;
local_314 = local_314 + *(int *)(local_21c + 0x48);
if (local_2fc == 4) goto LAB_001365bb;
local_2ac = *(int *)(local_21c + 0x24);
local_2b0 = *(int *)(local_21c + 8);
local_298 = *(undefined2 **)(local_20 + 0x24c);
iVar23 = local_21c;
local_300 = local_220;
} while( true );
}
local_280[0x13] = 0;
local_280[0x12] = 0;
local_280[0x11] = 0;
local_280[0x10] = 0;
goto LAB_001360c8;
}
*(undefined1 *)(local_298 + local_304 * 0xe + 1) = 0;
*(undefined1 *)((int)local_298 + local_304 * 0x1c + 3) = 0;
goto LAB_00136016;
}
local_280[0xf] = 0;
local_280[0xe] = 0;
local_280[0xd] = 0;
local_280[0xc] = 0;
goto LAB_00135cc0;
}
*(undefined1 *)(local_298 + local_2e8 * 0xe + 1) = 0;
*(undefined1 *)((int)local_298 + local_2e8 * 0x1c + 3) = 0;
goto LAB_00135c13;
}
local_280[0xb] = 0;
local_280[10] = 0;
local_280[9] = 0;
local_280[8] = 0;
goto LAB_001358b8;
}
*(undefined1 *)(local_298 + local_2cc * 0xe + 1) = 0;
*(undefined1 *)((int)local_298 + local_2cc * 0x1c + 3) = 0;
goto LAB_001356c2;
}
local_280[7] = 0;
local_280[6] = 0;
local_280[5] = 0;
local_280[4] = 0;
goto LAB_001354ae;
}
*(undefined1 *)(local_298 + local_2b8 * 0xe + 1) = 0;
*(undefined1 *)((int)local_298 + local_2b8 * 0x1c + 3) = 0;
goto LAB_00135407;
}
local_280[3] = 0;
local_280[2] = 0;
local_280[1] = 0;
local_280[0] = 0;
LAB_001351ba:
local_2b0._0_1_ = '\0';
local_2b4._0_2_ = 0;
*(undefined1 *)((int)puVar14 + 3) = 0;
LAB_001351d4:
iVar44 = 0;
local_2ac = 0;
uVar15 = *(undefined4 *)(local_21c + 0x1c);
if (0 < DAT_0033c118) {
do {
while( true ) {
psVar1 = (short *)(g_TWinding + iVar44 * 6);
sVar16 = *(short *)(iVar17 + 0x22);
sVar37 = *(short *)(iVar17 + 0x20);
if ((psVar1[2] == -1) || (local_280[psVar1[2]] == 0)) break;
local_2ac = 0;
LAB_0013521a:
iVar44 = iVar44 + 1;
if (DAT_0033c118 <= iVar44) goto LAB_001352f0;
}
iVar20 = *(int *)(local_21c + 0x24);
local_298._0_2_ = (short)(1 << ((char)uVar15 - 1U & 0x1f));
iVar19 = (int)(short)(*psVar1 * (short)local_298 + sVar37) +
(short)(psVar1[1] * (short)local_298 + sVar16) * iVar20;
if ((*(uint *)(local_220 + (iVar19 >> 5) * 4) & 1 << ((byte)iVar19 & 0x1f)) == 0)
goto LAB_0013521a;
local_214[local_2ac] = (short)iVar19;
if (local_2ac == 1) {
local_214[2] = (short)iVar20 * sVar16 + sVar37;
sVar16 = (short)*(undefined4 *)(local_20 + 0x2c);
*(short *)(local_148 + local_128 * 2) = sVar16 + (short)local_12c + local_214[0];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar16 + (short)local_12c + local_214[1];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar16 + (short)local_12c + local_214[2];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(*(int *)(local_20 + 0xf4) + local_218 * 2) = sVar16 + local_214[0];
*(short *)(*(int *)(local_20 + 0xf4) + 2 + local_218 * 2) = sVar16 + local_214[1];
*(short *)(*(int *)(local_20 + 0xf4) + 4 + local_218 * 2) = sVar16 + local_214[2];
local_218 = local_218 + 3;
local_214[0] = local_214[1];
goto LAB_0013521a;
}
iVar44 = iVar44 + 1;
local_2ac = 1;
} while (iVar44 < DAT_0033c118);
}
LAB_001352f0:
*(char *)(puVar14 + 1) = (char)local_218 - (char)local_2b0;
*puVar14 = (undefined2)local_2b4;
(**(code **)(*local_154 + 0x54))(local_154,local_208);
*(int *)(this + 0x20) = local_218;
return;
LAB_001365bb:
if (iVar30 == local_218) {
LAB_001360c8:
*(undefined1 *)((int)puVar31 + 3) = 0;
}
else {
*(undefined1 *)((int)puVar31 + 3) = 1;
local_318 = (undefined2)local_218;
}
local_298 = (undefined2 *)0x0;
uVar15 = *(undefined4 *)(local_21c + 0x1c);
iVar23 = 0;
if (0 < DAT_0033c118) {
do {
while( true ) {
psVar5 = (short *)(g_TWinding + iVar23 * 6);
if ((psVar5[2] == -1) || (local_280[psVar5[2] + 0x10] == 0)) break;
local_298 = (undefined2 *)0x0;
LAB_0013611a:
iVar23 = iVar23 + 1;
if (DAT_0033c118 <= iVar23) goto LAB_001361e0;
}
local_2ac._0_2_ = (short)(1 << ((char)uVar15 - 5U & 0x1f));
iVar30 = *(int *)(local_21c + 0x24);
iVar32 = (int)(short)(*psVar5 * (short)local_2ac + *psVar4) +
(short)(psVar5[1] * (short)local_2ac + psVar4[1]) * iVar30;
if ((*(uint *)(local_220 + (iVar32 >> 5) * 4) & 1 << ((byte)iVar32 & 0x1f)) == 0)
goto LAB_0013611a;
local_214[(int)local_298] = (short)iVar32;
if (local_298 == (undefined2 *)0x1) {
local_214[2] = *psVar4 + (short)iVar30 * psVar4[1];
sVar40 = (short)*(undefined4 *)(local_20 + 0x2c);
*(short *)(local_148 + local_128 * 2) = sVar40 + (short)local_12c + local_214[0];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar40 + (short)local_12c + local_214[1];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar40 + (short)local_12c + local_214[2];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(*(int *)(local_20 + 0xf4) + local_218 * 2) = sVar40 + local_214[0];
*(short *)(*(int *)(local_20 + 0xf4) + 2 + local_218 * 2) = sVar40 + local_214[1];
*(short *)(*(int *)(local_20 + 0xf4) + 4 + local_218 * 2) = sVar40 + local_214[2];
local_218 = local_218 + 3;
local_214[0] = local_214[1];
goto LAB_0013611a;
}
iVar23 = iVar23 + 1;
local_298 = (undefined2 *)0x1;
} while (iVar23 < DAT_0033c118);
}
LAB_001361e0:
*(char *)(puVar31 + 1) = (char)local_218 - (char)local_318;
*puVar31 = local_318;
LAB_00136016:
local_2e4 = local_2e4 + 1;
if (local_2e4 == 4) goto LAB_00136202;
local_304 = local_304 + *(int *)(local_21c + 0x44);
local_2b0 = *(int *)(local_21c + 8);
local_2ac = *(int *)(local_21c + 0x24);
local_300 = local_220;
local_298 = *(undefined2 **)(local_20 + 0x24c);
iVar23 = local_21c;
goto LAB_00135fa5;
LAB_00136202:
if (iVar27 == local_218) {
LAB_00135cc0:
*(undefined1 *)((int)puVar28 + 3) = 0;
}
else {
*(undefined1 *)((int)puVar28 + 3) = 1;
local_308 = (undefined2)local_218;
}
local_298 = (undefined2 *)0x0;
uVar15 = *(undefined4 *)(local_21c + 0x1c);
iVar23 = 0;
if (0 < DAT_0033c118) {
do {
while( true ) {
psVar4 = (short *)(g_TWinding + iVar23 * 6);
if ((psVar4[2] == -1) || (local_280[psVar4[2] + 0xc] == 0)) break;
local_298 = (undefined2 *)0x0;
LAB_00135d0a:
iVar23 = iVar23 + 1;
if (DAT_0033c118 <= iVar23) goto LAB_00135dd0;
}
local_2ac._0_2_ = (short)(1 << ((char)uVar15 - 4U & 0x1f));
iVar27 = *(int *)(local_21c + 0x24);
iVar29 = (int)(short)(*psVar4 * (short)local_2ac + *psVar3) +
(short)(psVar4[1] * (short)local_2ac + psVar3[1]) * iVar27;
if ((*(uint *)(local_220 + (iVar29 >> 5) * 4) & 1 << ((byte)iVar29 & 0x1f)) == 0)
goto LAB_00135d0a;
local_214[(int)local_298] = (short)iVar29;
if (local_298 == (undefined2 *)0x1) {
local_214[2] = *psVar3 + (short)iVar27 * psVar3[1];
sVar39 = (short)*(undefined4 *)(local_20 + 0x2c);
*(short *)(local_148 + local_128 * 2) = sVar39 + (short)local_12c + local_214[0];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar39 + (short)local_12c + local_214[1];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar39 + (short)local_12c + local_214[2];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(*(int *)(local_20 + 0xf4) + local_218 * 2) = sVar39 + local_214[0];
*(short *)(*(int *)(local_20 + 0xf4) + 2 + local_218 * 2) = sVar39 + local_214[1];
*(short *)(*(int *)(local_20 + 0xf4) + 4 + local_218 * 2) = sVar39 + local_214[2];
local_218 = local_218 + 3;
local_214[0] = local_214[1];
goto LAB_00135d0a;
}
iVar23 = iVar23 + 1;
local_298 = (undefined2 *)0x1;
} while (iVar23 < DAT_0033c118);
}
LAB_00135dd0:
*(char *)(puVar28 + 1) = (char)local_218 - (char)local_308;
*puVar28 = local_308;
LAB_00135c13:
local_2c8 = local_2c8 + 1;
local_2e8 = local_2e8 + *(int *)(local_21c + 0x40);
if (local_2c8 == 4) goto LAB_00135df8;
local_2b0 = *(int *)(local_21c + 8);
local_2ac = *(int *)(local_21c + 0x24);
local_298 = *(undefined2 **)(local_20 + 0x24c);
local_300 = local_220;
iVar23 = local_21c;
goto LAB_00135ba2;
LAB_00135df8:
if (iVar24 == local_218) {
LAB_001358b8:
*(undefined1 *)((int)puVar25 + 3) = 0;
}
else {
*(undefined1 *)((int)puVar25 + 3) = 1;
local_2f0 = (undefined2)local_218;
}
local_298 = (undefined2 *)0x0;
uVar15 = *(undefined4 *)(local_21c + 0x1c);
iVar23 = 0;
if (0 < DAT_0033c118) {
do {
while( true ) {
psVar3 = (short *)(g_TWinding + iVar23 * 6);
if ((psVar3[2] == -1) || (local_280[psVar3[2] + 8] == 0)) break;
local_298 = (undefined2 *)0x0;
LAB_0013590a:
iVar23 = iVar23 + 1;
if (DAT_0033c118 <= iVar23) goto LAB_001359d0;
}
local_2ac._0_2_ = (short)(1 << ((char)uVar15 - 3U & 0x1f));
iVar24 = *(int *)(local_21c + 0x24);
iVar26 = (int)(short)(*psVar3 * (short)local_2ac + *psVar2) +
(short)(psVar3[1] * (short)local_2ac + psVar2[1]) * iVar24;
if ((*(uint *)(local_220 + (iVar26 >> 5) * 4) & 1 << ((byte)iVar26 & 0x1f)) == 0)
goto LAB_0013590a;
local_214[(int)local_298] = (short)iVar26;
if (local_298 == (undefined2 *)0x1) {
local_214[2] = *psVar2 + (short)iVar24 * psVar2[1];
sVar38 = (short)*(undefined4 *)(local_20 + 0x2c);
*(short *)(local_148 + local_128 * 2) = sVar38 + (short)local_12c + local_214[0];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar38 + (short)local_12c + local_214[1];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar38 + (short)local_12c + local_214[2];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(*(int *)(local_20 + 0xf4) + local_218 * 2) = sVar38 + local_214[0];
*(short *)(*(int *)(local_20 + 0xf4) + 2 + local_218 * 2) = sVar38 + local_214[1];
*(short *)(*(int *)(local_20 + 0xf4) + 4 + local_218 * 2) = sVar38 + local_214[2];
local_218 = local_218 + 3;
local_214[0] = local_214[1];
goto LAB_0013590a;
}
iVar23 = iVar23 + 1;
local_298 = (undefined2 *)0x1;
} while (iVar23 < DAT_0033c118);
}
LAB_001359d0:
*(char *)(puVar25 + 1) = (char)local_218 - (char)local_2f0;
*puVar25 = local_2f0;
LAB_001356c2:
local_2b4 = local_2b4 + 1;
local_2cc = local_2cc + *(int *)(local_21c + 0x3c);
if (local_2b4 == 4) goto LAB_001359f8;
local_2b0 = *(int *)(local_21c + 8);
local_2ac = *(int *)(local_21c + 0x24);
local_298 = *(undefined2 **)(local_20 + 0x24c);
local_300 = local_220;
goto LAB_0013564d;
LAB_001359f8:
if (iVar20 == local_218) {
LAB_001354ae:
*(undefined1 *)((int)puVar22 + 3) = 0;
}
else {
*(undefined1 *)((int)puVar22 + 3) = 1;
local_2d8 = (undefined2)local_218;
}
local_298 = (undefined2 *)0x0;
uVar15 = *(undefined4 *)(local_21c + 0x1c);
iVar20 = 0;
if (0 < DAT_0033c118) {
do {
while( true ) {
psVar2 = (short *)(g_TWinding + iVar20 * 6);
if ((psVar2[2] == -1) || (local_280[psVar2[2] + 4] == 0)) break;
local_298 = (undefined2 *)0x0;
LAB_001354fa:
iVar20 = iVar20 + 1;
if (DAT_0033c118 <= iVar20) goto LAB_001355c0;
}
local_2ac._0_2_ = (short)(1 << ((char)uVar15 - 2U & 0x1f));
iVar19 = *(int *)(local_21c + 0x24);
iVar23 = (int)(short)(*psVar2 * (short)local_2ac + *psVar1) +
(short)(psVar2[1] * (short)local_2ac + psVar1[1]) * iVar19;
if ((*(uint *)(local_220 + (iVar23 >> 5) * 4) & 1 << ((byte)iVar23 & 0x1f)) == 0)
goto LAB_001354fa;
local_214[(int)local_298] = (short)iVar23;
if (local_298 == (undefined2 *)0x1) {
local_214[2] = (short)iVar19 * psVar1[1] + *psVar1;
sVar37 = (short)*(undefined4 *)(local_20 + 0x2c);
*(short *)(local_148 + local_128 * 2) = sVar37 + (short)local_12c + local_214[0];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar37 + (short)local_12c + local_214[1];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(local_148 + local_128 * 2) = sVar37 + (short)local_12c + local_214[2];
local_128 = local_128 + local_13c;
if (local_130 < local_128) {
local_130 = local_128;
}
*(short *)(*(int *)(local_20 + 0xf4) + local_218 * 2) = sVar37 + local_214[0];
*(short *)(*(int *)(local_20 + 0xf4) + 2 + local_218 * 2) = sVar37 + local_214[1];
*(short *)(*(int *)(local_20 + 0xf4) + 4 + local_218 * 2) = sVar37 + local_214[2];
local_218 = local_218 + 3;
local_214[0] = local_214[1];
goto LAB_001354fa;
}
iVar20 = iVar20 + 1;
local_298 = (undefined2 *)0x1;
} while (iVar20 < DAT_0033c118);
}
LAB_001355c0:
*(char *)(puVar22 + 1) = (char)local_218 - (char)local_2d8;
*puVar22 = local_2d8;
LAB_00135407:
local_290 = local_290 + 1;
local_2b8 = local_2b8 + *(int *)(local_21c + 0x38);
if (local_290 == 4) goto LAB_001355e8;
local_2ac = *(int *)(local_21c + 0x24);
local_298 = *(undefined2 **)(local_20 + 0x24c);
goto LAB_0013538c;
LAB_001355e8:
if (local_218 != 0) {
*(undefined1 *)((int)puVar14 + 3) = 1;
local_2b0._0_1_ = (char)local_218;
local_2b4._0_2_ = (undefined2)local_218;
goto LAB_001351d4;
}
goto LAB_001351ba;
}
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.