CModelLoader::SetupSubModels
0x0019d180 · 966 bytes · __thiscall
_ZN12CModelLoader14SetupSubModelsEP7model_tR10CUtlVectorI8mmodel_t10CUtlMemoryIS3_iEE
Decompiled
undefined (3 params)
/* CModelLoader::SetupSubModels(model_t*, CUtlVector<mmodel_t, CUtlMemory<mmodel_t, int> >&) */
void __thiscall
CModelLoader::SetupSubModels(CModelLoader *this,model_t *param_1,CUtlVector *param_2)
{
uint uVar1;
undefined4 *puVar2;
undefined4 uVar3;
int iVar4;
undefined4 *puVar5;
char *pcVar6;
model_t *pmVar7;
char *pcVar8;
byte bVar9;
int local_20;
bVar9 = 0;
iVar4 = *(int *)(this + 0x68);
*(undefined4 *)(this + 0x5c) = 0;
if (iVar4 != 0) {
CUtlVector<model_t,CUtlMemory<model_t,int>>::GrowVector
((CUtlVector<model_t,CUtlMemory<model_t,int>> *)(this + 0x50),iVar4);
if ((*(int *)(this + 0x5c) - iVar4 < 1) || (iVar4 < 1)) {
iVar4 = *(int *)(this + 0x68);
}
else {
_V_memmove((void *)((int)*(void **)(this + 0x50) + iVar4 * 0x14c),*(void **)(this + 0x50),
(*(int *)(this + 0x5c) - iVar4) * 0x14c);
iVar4 = *(int *)(this + 0x68);
}
if (0 < iVar4) {
local_20 = 0;
do {
puVar2 = (undefined4 *)(local_20 * 0x34 + *(int *)param_2);
puVar5 = (undefined4 *)(local_20 * 0x14c + *(int *)(this + 0x50));
*puVar5 = *(undefined4 *)param_1;
pcVar6 = (char *)(puVar5 + 1);
pmVar7 = param_1 + 4;
pcVar8 = pcVar6;
for (iVar4 = 0x41; iVar4 != 0; iVar4 = iVar4 + -1) {
*(undefined4 *)pcVar8 = *(undefined4 *)pmVar7;
pmVar7 = pmVar7 + (uint)bVar9 * -8 + 4;
pcVar8 = pcVar8 + (uint)bVar9 * -8 + 4;
}
puVar5[0x42] = *(undefined4 *)(param_1 + 0x108);
puVar5[0x43] = *(undefined4 *)(param_1 + 0x10c);
puVar5[0x44] = *(undefined4 *)(param_1 + 0x110);
puVar5[0x45] = *(undefined4 *)(param_1 + 0x114);
puVar5[0x46] = *(undefined4 *)(param_1 + 0x118);
puVar5[0x47] = *(undefined4 *)(param_1 + 0x11c);
puVar5[0x48] = *(undefined4 *)(param_1 + 0x120);
puVar5[0x49] = *(undefined4 *)(param_1 + 0x124);
puVar5[0x4a] = *(undefined4 *)(param_1 + 0x128);
puVar5[0x4b] = *(undefined4 *)(param_1 + 300);
puVar5[0x4c] = *(undefined4 *)(param_1 + 0x130);
puVar5[0x4d] = *(undefined4 *)(param_1 + 0x134);
puVar5[0x4e] = *(undefined4 *)(param_1 + 0x138);
puVar5[0x4f] = *(undefined4 *)(param_1 + 0x13c);
puVar5[0x50] = *(undefined4 *)(param_1 + 0x140);
puVar5[0x51] = *(undefined4 *)(param_1 + 0x144);
puVar5[0x52] = *(undefined4 *)(param_1 + 0x148);
puVar5[0x4e] = puVar2[0xb];
puVar5[0x4f] = puVar2[0xc];
uVar1 = puVar2[10];
*(short *)((int)puVar5 + 0x14a) = (short)uVar1;
if (*(int *)(this + 0xb4) <= (int)(uVar1 & 0xffff)) {
Sys_Error("Inline model %i has bad firstnode",local_20);
}
puVar5[0x49] = puVar2[3];
puVar5[0x4a] = puVar2[4];
puVar5[0x4b] = puVar2[5];
puVar5[0x46] = *puVar2;
puVar5[0x47] = puVar2[1];
puVar5[0x48] = puVar2[2];
puVar5[0x4c] = puVar2[9];
if (local_20 == 0) {
*(undefined4 *)param_1 = *puVar5;
pmVar7 = param_1 + 4;
for (iVar4 = 0x41; iVar4 != 0; iVar4 = iVar4 + -1) {
*(undefined4 *)pmVar7 = *(undefined4 *)pcVar6;
pcVar6 = pcVar6 + (uint)bVar9 * -8 + 4;
pmVar7 = pmVar7 + (uint)bVar9 * -8 + 4;
}
*(undefined4 *)(param_1 + 0x108) = puVar5[0x42];
*(undefined4 *)(param_1 + 0x10c) = puVar5[0x43];
*(undefined4 *)(param_1 + 0x110) = puVar5[0x44];
*(undefined4 *)(param_1 + 0x114) = puVar5[0x45];
*(undefined4 *)(param_1 + 0x118) = puVar5[0x46];
*(undefined4 *)(param_1 + 0x11c) = puVar5[0x47];
*(undefined4 *)(param_1 + 0x120) = puVar5[0x48];
*(undefined4 *)(param_1 + 0x124) = puVar5[0x49];
*(undefined4 *)(param_1 + 0x128) = puVar5[0x4a];
*(undefined4 *)(param_1 + 300) = puVar5[0x4b];
*(undefined4 *)(param_1 + 0x130) = puVar5[0x4c];
*(undefined4 *)(param_1 + 0x134) = puVar5[0x4d];
*(undefined4 *)(param_1 + 0x138) = puVar5[0x4e];
*(undefined4 *)(param_1 + 0x13c) = puVar5[0x4f];
*(undefined4 *)(param_1 + 0x140) = puVar5[0x50];
*(undefined4 *)(param_1 + 0x144) = puVar5[0x51];
*(undefined4 *)(param_1 + 0x148) = puVar5[0x52];
}
else {
V_snprintf(pcVar6,0x104,"*%d",local_20);
uVar3 = (**(code **)(*g_pFileSystem + 0x94))(g_pFileSystem,pcVar6);
*puVar5 = uVar3;
}
local_20 = local_20 + 1;
} while (local_20 < *(int *)(this + 0x68));
}
}
return;
}
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.