BuildDispSurfInit
0x00139750 · 918 bytes · __regparm3
_ZL17BuildDispSurfInitP7model_tP13CCoreDispInfoP11msurface2_t.isra.19
Decompiled
undefined (3 params)
/* BuildDispSurfInit(model_t*, CCoreDispInfo*, msurface2_t*) [clone .isra.19] */
void __regparm3 BuildDispSurfInit(model_t *param_1,CCoreDispInfo *param_2,msurface2_t *param_3)
{
undefined4 *puVar1;
model_t *pmVar2;
model_t *pmVar3;
int iVar4;
int iVar5;
float *pfVar6;
uint local_158;
model_t *local_154;
undefined4 *local_150;
float *local_14c;
int local_140;
undefined4 local_134;
undefined4 local_130;
undefined4 local_12c;
undefined4 local_128;
undefined4 local_124;
undefined4 local_120;
undefined4 local_11c [8];
float local_fc;
float local_f8;
float local_f4;
float local_f0;
float local_ec;
float local_e8;
float local_d8;
float local_d4;
float local_d0;
float local_cc;
float local_c8;
float local_c4;
float local_c0;
float local_bc;
float local_b8;
float local_b4;
float local_b0;
float local_ac;
float local_a8;
float local_a4;
float local_a0;
float local_9c [35];
if ((param_2 != (CCoreDispInfo *)0x0) && (param_2[3] == (CCoreDispInfo)0x4)) {
iVar5 = 1;
local_9c[0] = (local_d4 - local_f8) * (local_e8 - local_f4) -
(local_d0 - local_f4) * (local_ec - local_f8);
local_9c[1] = (local_d0 - local_f4) * (local_f0 - local_fc) -
(local_e8 - local_f4) * (local_d8 - local_fc);
local_9c[2] = (local_ec - local_f8) * (local_d8 - local_fc) -
(local_f0 - local_fc) * (local_d4 - local_f8);
VectorNormalize((Vector *)local_9c);
local_cc = local_9c[0];
local_158 = *(uint *)(param_1 + 0x188);
local_c8 = local_9c[1];
local_c4 = local_9c[2];
local_c0 = local_9c[0];
local_bc = local_9c[1];
local_b8 = local_9c[2];
local_b4 = local_9c[0];
local_b0 = local_9c[1];
local_ac = local_9c[2];
local_a8 = local_9c[0];
local_a4 = local_9c[1];
local_a0 = local_9c[2];
if (((byte)*param_2 & 8) != 0) {
local_158 = local_158 | 1;
iVar5 = 4;
}
local_140 = 0;
local_14c = &local_fc;
local_150 = local_11c;
pfVar6 = &local_cc;
*(undefined4 *)(param_1 + 0x14) = 4;
pmVar3 = param_1;
local_154 = param_1;
do {
*(float *)(pmVar3 + 0x18) = *local_14c;
*(float *)(pmVar3 + 0x1c) = local_14c[1];
*(float *)(pmVar3 + 0x20) = local_14c[2];
*(float *)(pmVar3 + 0x48) = *pfVar6;
*(float *)(pmVar3 + 0x4c) = pfVar6[1];
*(float *)(pmVar3 + 0x50) = pfVar6[2];
*(undefined4 *)(local_154 + 0x78) = *local_150;
iVar4 = 0;
*(undefined4 *)(local_154 + 0x7c) = local_150[1];
puVar1 = (undefined4 *)((int)local_9c + local_140);
pmVar2 = local_154;
do {
iVar4 = iVar4 + 1;
*(undefined4 *)(pmVar2 + 0x98) = *puVar1;
*(undefined4 *)(pmVar2 + 0x9c) = puVar1[1];
puVar1 = puVar1 + 2;
pmVar2 = pmVar2 + 0x20;
} while (iVar4 < iVar5);
local_140 = local_140 + 0x20;
pmVar3 = pmVar3 + 0xc;
pfVar6 = pfVar6 + 3;
local_14c = local_14c + 3;
local_150 = local_150 + 2;
local_154 = local_154 + 8;
} while (local_140 != 0x80);
puVar1 = (undefined4 *)
((uint)(*(ushort *)(param_2 + 0x16) >> 1) * 0x50 + *(int *)(DAT_003a172c + 0x5c));
local_134 = *puVar1;
local_130 = puVar1[1];
local_12c = puVar1[2];
local_128 = puVar1[4];
local_124 = puVar1[5];
local_120 = puVar1[6];
VectorNormalize((Vector *)&local_134);
VectorNormalize((Vector *)&local_128);
*(undefined4 *)(param_1 + 400) = local_134;
*(undefined4 *)(param_1 + 0x194) = local_130;
*(uint *)(param_1 + 0x188) = local_158;
*(undefined4 *)(param_1 + 0x198) = local_12c;
*(undefined4 *)(param_1 + 0x19c) = local_128;
*(undefined4 *)(param_1 + 0x1a0) = local_124;
*(undefined4 *)(param_1 + 0x1a4) = local_120;
CCoreDispSurface::FindSurfPointStartIndex((CCoreDispSurface *)(param_1 + 0x10));
CCoreDispSurface::AdjustSurfPointData((CCoreDispSurface *)(param_1 + 0x10));
return;
}
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.