WriteUsercmd
0x0057b0f0 · 834 bytes · __cdecl
_Z12WriteUsercmdP8bf_writePK8CUserCmdS3_
Decompiled
undefined (3 params)
/* WriteUsercmd(bf_write*, CUserCmd const*, CUserCmd const*) */
void WriteUsercmd(bf_write *param_1,CUserCmd *param_2,CUserCmd *param_3)
{
char cVar1;
int iVar2;
int iVar3;
float extraout_ECX;
float extraout_ECX_00;
float extraout_ECX_01;
float extraout_ECX_02;
float extraout_ECX_03;
float extraout_ECX_04;
int iVar4;
float extraout_ECX_05;
float extraout_ECX_06;
float extraout_ECX_07;
char *extraout_EDX;
char *extraout_EDX_00;
char *extraout_EDX_01;
char *extraout_EDX_02;
char *extraout_EDX_03;
char *extraout_EDX_04;
byte *pbVar5;
float fVar6;
bf_write *pbVar7;
int in_stack_ffffffd8;
int local_20;
WriteUserCmdDeltaInt
(param_1,(char *)(*(int *)(param_3 + 4) + 1),*(int *)(param_2 + 4),0x20,
in_stack_ffffffd8);
fVar6 = 4.48416e-44;
WriteUserCmdDeltaInt
(param_1,(char *)(*(int *)(param_3 + 8) + 1),*(int *)(param_2 + 8),0x20,
in_stack_ffffffd8);
WriteUserCmdDeltaFloat(param_1,extraout_EDX,extraout_ECX,fVar6);
WriteUserCmdDeltaFloat(param_1,extraout_EDX_00,extraout_ECX_00,fVar6);
WriteUserCmdDeltaFloat(param_1,extraout_EDX_01,extraout_ECX_01,fVar6);
WriteUserCmdDeltaFloat(param_1,extraout_EDX_02,extraout_ECX_02,fVar6);
WriteUserCmdDeltaFloat(param_1,extraout_EDX_03,extraout_ECX_03,fVar6);
WriteUserCmdDeltaFloat(param_1,extraout_EDX_04,extraout_ECX_04,fVar6);
WriteUserCmdDeltaInt
(param_1,*(char **)(param_3 + 0x24),*(int *)(param_2 + 0x24),0x20,in_stack_ffffffd8);
WriteUserCmdDeltaInt
(param_1,(char *)(uint)(byte)param_3[0x28],(uint)(byte)param_2[0x28],8,in_stack_ffffffd8
);
pbVar7 = (bf_write *)0xb;
cVar1 = WriteUserCmdDeltaInt
(param_1,*(char **)(param_3 + 0x2c),*(int *)(param_2 + 0x2c),0xb,
in_stack_ffffffd8);
local_20 = in_stack_ffffffd8;
if (cVar1 != '\0') {
pbVar7 = (bf_write *)0x6;
WriteUserCmdDeltaInt
(param_1,*(char **)(param_3 + 0x30),*(int *)(param_2 + 0x30),6,in_stack_ffffffd8);
local_20 = in_stack_ffffffd8;
}
iVar2 = (int)*(short *)(param_2 + 0x38);
iVar4 = *(int *)(param_1 + 0xc);
if (iVar2 == *(short *)(param_3 + 0x38)) {
iVar3 = *(int *)(param_1 + 8);
if (iVar4 < iVar3) {
if (param_1[0x10] == (bf_write)0x0) {
pbVar5 = (byte *)((iVar4 >> 3) + *(int *)param_1);
*pbVar5 = *pbVar5 & ~(byte)(1 << ((byte)iVar4 & 7));
iVar4 = *(int *)(param_1 + 0xc) + 1;
iVar3 = *(int *)(param_1 + 8);
*(int *)(param_1 + 0xc) = iVar4;
goto LAB_0057b22e;
}
iVar2 = (int)*(short *)(param_2 + 0x3a);
if ((int)*(short *)(param_2 + 0x3a) != (int)*(short *)(param_3 + 0x3a)) goto LAB_0057b242;
goto LAB_0057b384;
}
param_1[0x10] = (bf_write)0x1;
iVar2 = (int)*(short *)(param_2 + 0x3a);
if ((int)*(short *)(param_2 + 0x3a) == (int)*(short *)(param_3 + 0x3a)) goto LAB_0057b3cf;
}
else {
if (iVar4 < *(int *)(param_1 + 8)) {
if (param_1[0x10] == (bf_write)0x0) {
pbVar5 = (byte *)((iVar4 >> 3) + *(int *)param_1);
local_20._0_1_ = (byte)(1 << ((byte)iVar4 & 7));
*pbVar5 = *pbVar5 | (byte)local_20;
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
}
}
else {
param_1[0x10] = (bf_write)0x1;
}
pbVar7 = param_1;
bf_write::WriteShort(param_1,iVar2);
iVar4 = *(int *)(param_1 + 0xc);
iVar3 = *(int *)(param_1 + 8);
local_20 = iVar2;
LAB_0057b22e:
iVar2 = (int)*(short *)(param_2 + 0x3a);
if ((int)*(short *)(param_2 + 0x3a) == (int)*(short *)(param_3 + 0x3a)) {
if (iVar3 <= iVar4) {
LAB_0057b3cf:
param_1[0x10] = (bf_write)0x1;
goto LAB_0057b276;
}
LAB_0057b384:
if (param_1[0x10] == (bf_write)0x0) {
pbVar5 = (byte *)((iVar4 >> 3) + *(int *)param_1);
*pbVar5 = *pbVar5 & ~(byte)(1 << ((byte)iVar4 & 7));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
}
goto LAB_0057b276;
}
}
LAB_0057b242:
local_20 = iVar2;
if (iVar4 < iVar3) {
if (param_1[0x10] == (bf_write)0x0) {
pbVar5 = (byte *)((iVar4 >> 3) + *(int *)param_1);
*pbVar5 = *pbVar5 | (byte)(1 << ((byte)iVar4 & 7));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
}
}
else {
param_1[0x10] = (bf_write)0x1;
}
pbVar7 = param_1;
bf_write::WriteShort(param_1,local_20);
LAB_0057b276:
cVar1 = IsHeadTrackingEnabled();
if (cVar1 != '\0') {
WriteUserCmdDeltaAngle(param_1,(char *)0x10,extraout_ECX_05,(float)pbVar7,local_20);
WriteUserCmdDeltaAngle(param_1,(char *)0x10,extraout_ECX_06,(float)pbVar7,local_20);
WriteUserCmdDeltaAngle(param_1,(char *)0x8,extraout_ECX_07,(float)pbVar7,local_20);
if (((*(float *)(param_2 + 0x4c) != *(float *)(param_3 + 0x4c)) ||
(*(float *)(param_2 + 0x50) != *(float *)(param_3 + 0x50))) ||
(*(float *)(param_2 + 0x54) != *(float *)(param_3 + 0x54))) {
iVar4 = *(int *)(param_1 + 0xc);
if (iVar4 < *(int *)(param_1 + 8)) {
if (param_1[0x10] == (bf_write)0x0) {
pbVar5 = (byte *)((iVar4 >> 3) + *(int *)param_1);
*pbVar5 = *pbVar5 | (byte)(1 << ((byte)iVar4 & 7));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
}
}
else {
param_1[0x10] = (bf_write)0x1;
}
bf_write::WriteBitVec3Coord(param_1,(Vector *)(param_2 + 0x4c));
return;
}
iVar4 = *(int *)(param_1 + 0xc);
if (*(int *)(param_1 + 8) <= iVar4) {
param_1[0x10] = (bf_write)0x1;
return;
}
if (param_1[0x10] == (bf_write)0x0) {
pbVar5 = (byte *)((iVar4 >> 3) + *(int *)param_1);
*pbVar5 = *pbVar5 & ~(byte)(1 << ((byte)iVar4 & 7));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
}
}
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.