CDispInfo::SetupDecalNodeIntersect_R
0x00134450 · 1665 bytes · __thiscall
_ZN9CDispInfo25SetupDecalNodeIntersect_RERK10CVertIndexiP14CDispDecalBasePK12ShadowInfo_tiP20CDecalNodeSetupCache
Decompiled
undefined (7 params)
/* CDispInfo::SetupDecalNodeIntersect_R(CVertIndex const&, int, CDispDecalBase*, ShadowInfo_t
const*, int, CDecalNodeSetupCache*) */
undefined4 __thiscall
CDispInfo::SetupDecalNodeIntersect_R
(CDispInfo *this,CVertIndex *param_1,int param_2,CDispDecalBase *param_3,
ShadowInfo_t *param_4,int param_5,CDecalNodeSetupCache *param_6)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
bool bVar7;
char cVar8;
float *pfVar9;
int iVar10;
short *psVar11;
int iVar12;
short *psVar13;
int iVar14;
CDecalNodeSetupCache *pCVar15;
int iVar16;
float fVar17;
float fVar18;
float fVar19;
float fVar20;
float fVar21;
int local_40;
float local_38;
float local_34;
float local_30;
float local_2c;
float local_28;
int local_20;
iVar10 = *(int *)(this + 0x1dc);
iVar14 = *(int *)(iVar10 + 0x24);
iVar12 = *(short *)(param_1 + 2) * iVar14 + (int)*(short *)param_1;
if (param_5 + 1 < *(int *)(this + 0x184)) {
bVar7 = false;
iVar16 = param_2 + 1;
iVar14 = 0;
do {
cVar8 = SetupDecalNodeIntersect_R
(this,(CVertIndex *)(iVar12 * 0x10 + *(int *)(iVar10 + 8) + iVar14 * 4),
iVar16,param_3,param_4,param_5 + 1,param_6);
if (cVar8 != '\0') {
bVar7 = true;
}
iVar14 = iVar14 + 1;
iVar10 = *(int *)(this + 0x1dc);
iVar16 = iVar16 + *(int *)(iVar10 + 8 + (param_5 + 0xc) * 4);
} while (iVar14 != 4);
if (bVar7) {
LAB_00134850:
*(uint *)(param_3 + (param_2 >> 5) * 4) =
*(uint *)(param_3 + (param_2 >> 5) * 4) | 1 << ((byte)param_2 & 0x1f);
return 1;
}
}
else {
local_40 = *(int *)(param_6 + iVar12 * 4 + 0xd8c);
if (local_40 == *(int *)(param_6 + 0x1210)) {
pCVar15 = param_6 + iVar12 * 0xc;
}
else {
pCVar15 = param_6 + iVar12 * 0xc;
pfVar9 = (float *)(*(int *)(this + 0x34) * iVar12 + *(int *)(this + 0x88));
if (param_4 == (ShadowInfo_t *)0x0) {
*(float *)pCVar15 =
(*(float *)(param_3 + 0x20) * *pfVar9 - *(float *)(*(int *)(param_3 + 0x14) + 0x2c)) +
0.5 + *(float *)(param_3 + 0x24) * pfVar9[1] + *(float *)(param_3 + 0x28) * pfVar9[2];
fVar21 = *(float *)(param_3 + 0x2c);
fVar19 = *pfVar9;
fVar1 = *(float *)(*(int *)(param_3 + 0x14) + 0x30);
fVar2 = *(float *)(param_3 + 0x30);
fVar17 = pfVar9[1];
fVar18 = *(float *)(param_3 + 0x34);
fVar20 = pfVar9[2];
*(float *)(pCVar15 + 8) = 0.0;
*(float *)(pCVar15 + 4) = (fVar21 * fVar19 - fVar1) + 0.5 + fVar2 * fVar17 + fVar18 * fVar20
;
}
else {
fVar21 = *pfVar9;
fVar19 = pfVar9[1];
fVar1 = pfVar9[2];
*(float *)pCVar15 =
*(float *)param_4 * fVar21 + *(float *)(param_4 + 4) * fVar19 +
*(float *)(param_4 + 0xc) + *(float *)(param_4 + 8) * fVar1;
*(float *)(pCVar15 + 4) =
*(float *)(param_4 + 0x10) * fVar21 + *(float *)(param_4 + 0x14) * fVar19 +
*(float *)(param_4 + 0x1c) + *(float *)(param_4 + 0x18) * fVar1;
*(float *)(pCVar15 + 8) =
fVar21 * *(float *)(param_4 + 0x20) + fVar19 * *(float *)(param_4 + 0x24) +
*(float *)(param_4 + 0x2c) + fVar1 * *(float *)(param_4 + 0x28);
}
local_40 = *(int *)(param_6 + 0x1210);
*(int *)(param_6 + iVar12 * 4 + 0xd8c) = local_40;
iVar10 = *(int *)(this + 0x1dc);
iVar14 = *(int *)(iVar10 + 0x24);
}
local_20 = 0;
fVar21 = *(float *)pCVar15;
local_38 = *(float *)(pCVar15 + 8);
local_34 = *(float *)(pCVar15 + 8);
local_30 = *(float *)(pCVar15 + 4);
local_2c = *(float *)(pCVar15 + 4);
local_28 = fVar21;
while( true ) {
psVar13 = (short *)(*(int *)(iVar10 + 4) + iVar12 * 0x10 + local_20 * 4);
psVar11 = (short *)(local_20 * 4 + iVar12 * 0x10 + *(int *)(iVar10 + 0xc));
iVar16 = (int)*psVar13 + psVar13[1] * iVar14;
iVar10 = *(int *)(param_6 + iVar16 * 4 + 0xd8c);
if (iVar10 == local_40) {
pCVar15 = param_6 + iVar16 * 0xc;
}
else {
pCVar15 = param_6 + iVar16 * 0xc;
pfVar9 = (float *)(iVar16 * *(int *)(this + 0x34) + *(int *)(this + 0x88));
if (param_4 == (ShadowInfo_t *)0x0) {
*(float *)pCVar15 =
(*(float *)(param_3 + 0x20) * *pfVar9 + *(float *)(param_3 + 0x24) * pfVar9[1] + 0.5
+ *(float *)(param_3 + 0x28) * pfVar9[2]) -
*(float *)(*(int *)(param_3 + 0x14) + 0x2c);
fVar19 = *(float *)(param_3 + 0x2c);
fVar1 = *pfVar9;
fVar2 = *(float *)(*(int *)(param_3 + 0x14) + 0x30);
fVar17 = *(float *)(param_3 + 0x30);
fVar18 = pfVar9[1];
fVar20 = *(float *)(param_3 + 0x34);
fVar3 = pfVar9[2];
*(float *)(pCVar15 + 8) = 0.0;
*(float *)(pCVar15 + 4) =
(fVar19 * fVar1 - fVar2) + 0.5 + fVar17 * fVar18 + fVar20 * fVar3;
}
else {
fVar19 = *pfVar9;
fVar1 = pfVar9[1];
fVar2 = pfVar9[2];
*(float *)pCVar15 =
*(float *)param_4 * fVar19 + *(float *)(param_4 + 4) * fVar1 +
*(float *)(param_4 + 0xc) + *(float *)(param_4 + 8) * fVar2;
*(float *)(pCVar15 + 4) =
*(float *)(param_4 + 0x10) * fVar19 + *(float *)(param_4 + 0x14) * fVar1 +
*(float *)(param_4 + 0x1c) + *(float *)(param_4 + 0x18) * fVar2;
*(float *)(pCVar15 + 8) =
fVar19 * *(float *)(param_4 + 0x20) + fVar1 * *(float *)(param_4 + 0x24) +
*(float *)(param_4 + 0x2c) + fVar2 * *(float *)(param_4 + 0x28);
}
iVar10 = *(int *)(param_6 + 0x1210);
*(int *)(param_6 + iVar16 * 4 + 0xd8c) = iVar10;
iVar14 = *(int *)(*(int *)(this + 0x1dc) + 0x24);
}
fVar19 = *(float *)pCVar15;
fVar1 = *(float *)(pCVar15 + 4);
fVar2 = *(float *)(pCVar15 + 8);
iVar14 = psVar11[1] * iVar14 + (int)*psVar11;
pCVar15 = param_6 + iVar14 * 0xc;
if (*(int *)(param_6 + iVar14 * 4 + 0xd8c) != iVar10) {
pfVar9 = (float *)(iVar14 * *(int *)(this + 0x34) + *(int *)(this + 0x88));
if (param_4 == (ShadowInfo_t *)0x0) {
*(float *)pCVar15 =
(*(float *)(param_3 + 0x20) * *pfVar9 - *(float *)(*(int *)(param_3 + 0x14) + 0x2c))
+ 0.5 + *(float *)(param_3 + 0x24) * pfVar9[1] +
*(float *)(param_3 + 0x28) * pfVar9[2];
fVar17 = *(float *)(param_3 + 0x2c);
fVar18 = *pfVar9;
fVar20 = *(float *)(*(int *)(param_3 + 0x14) + 0x30);
fVar3 = *(float *)(param_3 + 0x30);
fVar4 = pfVar9[1];
fVar5 = *(float *)(param_3 + 0x34);
fVar6 = pfVar9[2];
*(float *)(pCVar15 + 8) = 0.0;
*(float *)(pCVar15 + 4) = (fVar17 * fVar18 - fVar20) + 0.5 + fVar3 * fVar4 + fVar5 * fVar6
;
}
else {
fVar17 = *pfVar9;
fVar18 = pfVar9[1];
fVar20 = pfVar9[2];
*(float *)pCVar15 =
*(float *)param_4 * fVar17 + *(float *)(param_4 + 4) * fVar18 +
*(float *)(param_4 + 0xc) + fVar20 * *(float *)(param_4 + 8);
*(float *)(pCVar15 + 4) =
*(float *)(param_4 + 0x10) * fVar17 + *(float *)(param_4 + 0x14) * fVar18 +
*(float *)(param_4 + 0x1c) + fVar20 * *(float *)(param_4 + 0x18);
*(float *)(pCVar15 + 8) =
fVar17 * *(float *)(param_4 + 0x20) + fVar18 * *(float *)(param_4 + 0x24) +
*(float *)(param_4 + 0x2c) + fVar20 * *(float *)(param_4 + 0x28);
}
*(undefined4 *)(param_6 + iVar14 * 4 + 0xd8c) = *(undefined4 *)(param_6 + 0x1210);
}
fVar17 = *(float *)pCVar15;
fVar18 = *(float *)(pCVar15 + 4);
local_20 = local_20 + 1;
fVar20 = fVar19;
if (fVar19 <= fVar17) {
fVar20 = fVar17;
fVar17 = fVar19;
}
if (fVar17 <= fVar21) {
fVar21 = fVar17;
}
fVar19 = fVar1;
if (fVar1 <= fVar18) {
fVar19 = fVar18;
fVar18 = fVar1;
}
if (fVar20 <= local_28) {
fVar20 = local_28;
}
if (local_2c <= fVar18) {
fVar18 = local_2c;
}
if (fVar19 <= local_30) {
fVar19 = local_30;
}
fVar1 = *(float *)(pCVar15 + 8);
fVar17 = fVar2;
if (fVar2 <= fVar1) {
fVar17 = fVar1;
fVar1 = fVar2;
}
if (local_38 <= fVar1) {
fVar1 = local_38;
}
if (fVar17 <= local_34) {
fVar17 = local_34;
}
if (local_20 == 4) break;
local_40 = *(int *)(param_6 + 0x1210);
iVar10 = *(int *)(this + 0x1dc);
iVar14 = *(int *)(iVar10 + 0x24);
local_38 = fVar1;
local_34 = fVar17;
local_30 = fVar19;
local_2c = fVar18;
local_28 = fVar20;
}
if (((((fVar21 <= 1.0) && (0.0 <= fVar20)) && (fVar18 <= 1.0)) && (0.0 <= fVar19)) &&
((param_4 == (ShadowInfo_t *)0x0 ||
((0.0 <= fVar17 &&
(fVar1 < *(float *)(param_4 + 0x44) || fVar1 == *(float *)(param_4 + 0x44)))))))
goto LAB_00134850;
}
return 0;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.