ServerDemoPacket_BaseAnimatingOverlay::CompareAndCacheModifiedFields
0x00597a70 · 324 bytes · __thiscall
_ZN37ServerDemoPacket_BaseAnimatingOverlay29CompareAndCacheModifiedFieldsERKS_
Decompiled
undefined (2 params)
/* ServerDemoPacket_BaseAnimatingOverlay::CompareAndCacheModifiedFields(ServerDemoPacket_BaseAnimatingOverlay
const&) */
undefined4 __thiscall
ServerDemoPacket_BaseAnimatingOverlay::CompareAndCacheModifiedFields
(ServerDemoPacket_BaseAnimatingOverlay *this,
ServerDemoPacket_BaseAnimatingOverlay *param_1)
{
ServerDemoPacket_BaseAnimatingOverlay *pSVar1;
uint uVar2;
undefined4 uVar3;
byte bVar4;
ServerDemoPacket_BaseAnimatingOverlay *pSVar5;
uint uVar6;
int iVar7;
*(undefined4 *)(this + 0x1e4) = 0;
*(undefined4 *)(this + 0x1e8) = 0;
if (*param_1 == (ServerDemoPacket_BaseAnimatingOverlay)0x0) {
uVar2 = 1;
uVar6 = 0;
uVar3 = 0;
}
else {
bVar4 = 0;
iVar7 = 0;
pSVar1 = this;
pSVar5 = param_1;
do {
if (*(float *)(pSVar5 + 4) != *(float *)(pSVar1 + 4)) {
*(float *)(pSVar1 + 4) = *(float *)(pSVar5 + 4);
*(uint *)(this + 0x1e4) = *(uint *)(this + 0x1e4) | (2 << (bVar4 & 0x1f)) * 2 & 0xffU;
}
if (*(int *)(pSVar1 + 8) != *(int *)(pSVar5 + 8)) {
*(int *)(pSVar1 + 8) = *(int *)(pSVar5 + 8);
*(uint *)(this + 0x1e4) = *(uint *)(this + 0x1e4) | (2 << (bVar4 & 0x1f) & 0x3fU) << 2;
}
if (*(float *)(pSVar5 + 0xc) != *(float *)(pSVar1 + 0xc)) {
*(float *)(pSVar1 + 0xc) = *(float *)(pSVar5 + 0xc);
*(uint *)(this + 0x1e4) = *(uint *)(this + 0x1e4) | (2 << (bVar4 & 0x1f) & 0xfU) << 4;
}
if (*(float *)(pSVar5 + 0x10) != *(float *)(pSVar1 + 0x10)) {
*(float *)(pSVar1 + 0x10) = *(float *)(pSVar5 + 0x10);
}
if (*(int *)(pSVar1 + 0x14) != *(int *)(pSVar5 + 0x14)) {
*(int *)(pSVar1 + 0x14) = *(int *)(pSVar5 + 0x14);
}
if (*(float *)(pSVar5 + 0x18) != *(float *)(pSVar1 + 0x18)) {
*(float *)(pSVar1 + 0x18) = *(float *)(pSVar5 + 0x18);
}
if (*(float *)(pSVar5 + 0x1c) != *(float *)(pSVar1 + 0x1c)) {
*(float *)(pSVar1 + 0x1c) = *(float *)(pSVar5 + 0x1c);
}
if (*(float *)(pSVar5 + 0x20) != *(float *)(pSVar1 + 0x20)) {
*(float *)(pSVar1 + 0x20) = *(float *)(pSVar5 + 0x20);
}
iVar7 = iVar7 + 1;
pSVar1 = pSVar1 + 0x20;
pSVar5 = pSVar5 + 0x20;
bVar4 = bVar4 + 9;
} while (iVar7 < (int)(uint)(byte)*param_1);
uVar6 = *(uint *)(this + 0x1e8);
uVar2 = *(uint *)(this + 0x1e4) | uVar6;
uVar3 = CONCAT31((int3)(uVar2 >> 8),uVar2 != 0);
uVar2 = *(uint *)(this + 0x1e4) | 1;
}
*(uint *)(this + 0x1e4) = uVar2;
*(uint *)(this + 0x1e8) = uVar6;
return uVar3;
}
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.