CChoreoEvent::RestoreFromBuffer
0x00bab350 · 6023 bytes · __thiscall
_ZN12CChoreoEvent17RestoreFromBufferER10CUtlBufferP12CChoreoSceneP17IChoreoStringPool
Decompiled
undefined (4 params)
/* CChoreoEvent::RestoreFromBuffer(CUtlBuffer&, CChoreoScene*, IChoreoStringPool*) */
undefined4 __thiscall
CChoreoEvent::RestoreFromBuffer
(CChoreoEvent *this,CUtlBuffer *param_1,CChoreoScene *param_2,IChoreoStringPool *param_3)
{
IChoreoStringPool IVar1;
ushort uVar2;
short sVar3;
code *pcVar4;
byte bVar5;
byte bVar6;
byte bVar7;
CChoreoEvent CVar8;
char cVar9;
IChoreoStringPool IVar10;
CChoreoEvent *pCVar11;
int iVar12;
byte bVar13;
int iVar14;
int iVar15;
undefined4 *puVar16;
byte bVar17;
undefined4 uVar18;
int in_GS_OFFSET;
float fVar19;
CUtlBuffer *pCVar20;
IChoreoStringPool *pIVar21;
byte local_b3d;
int local_b38;
undefined4 local_b28;
undefined2 local_b24;
undefined1 local_b22;
undefined1 local_b21;
char local_b20 [256];
char local_a20 [256];
IChoreoStringPool local_920 [256];
char local_820 [2048];
int local_20;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 != '\0') {
CVar8 = *(CChoreoEvent *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00bab3a8;
}
this[4] = (CChoreoEvent)0x0;
LAB_00bac122:
this[0x178] = (CChoreoEvent)((byte)this[0x178] & 0xfe);
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%c",&local_b24);
CVar8 = local_b24._0_1_;
LAB_00bab3a8:
this[4] = CVar8;
if ((CVar8 != (CChoreoEvent)0xb) && (CVar8 != (CChoreoEvent)0x5)) goto LAB_00bac122;
this[0x178] = (CChoreoEvent)((byte)this[0x178] | 1);
}
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar14 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar14 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar15 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar14 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar14,local_b20,0x100);
CUtlString::operator=((CUtlString *)(this + 8),local_b20);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,4);
fVar19 = 0.0;
if (cVar9 != '\0') {
iVar14 = *(int *)(param_1 + 0xc);
fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
local_b28 = fVar19;
if (((byte)param_1[0x34] & 1) != 0) {
local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
local_b22 = local_b28._1_1_;
local_b28._0_1_ = SUB41(fVar19,0);
local_b21 = (undefined1)local_b28;
_V_memcpy(&local_b28,&local_b24,4);
iVar14 = *(int *)(param_1 + 0xc);
}
*(int *)(param_1 + 0xc) = iVar14 + 4;
fVar19 = local_b28;
}
}
else {
local_b28 = 0.0;
CUtlBuffer::Scanf(param_1,"%f",&local_b28);
fVar19 = local_b28;
}
*(float *)(this + 0x48) = fVar19;
if ((*(float *)(this + 0x4c) == -1.0) || (fVar19 <= *(float *)(this + 0x4c))) {
if (((byte)param_1[0x15] & 1) == 0) goto LAB_00bab927;
LAB_00bab49d:
local_b28 = 0.0;
CUtlBuffer::Scanf(param_1,"%f",&local_b28);
fVar19 = local_b28;
}
else {
*(float *)(this + 0x4c) = fVar19;
if (((byte)param_1[0x15] & 1) != 0) goto LAB_00bab49d;
LAB_00bab927:
cVar9 = CUtlBuffer::CheckGet(param_1,4);
fVar19 = 0.0;
if (cVar9 != '\0') {
iVar14 = *(int *)(param_1 + 0xc);
fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
local_b28 = fVar19;
if (((byte)param_1[0x34] & 1) != 0) {
local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
local_b22 = local_b28._1_1_;
local_b28._0_1_ = SUB41(fVar19,0);
local_b21 = (undefined1)local_b28;
_V_memcpy(&local_b28,&local_b24,4);
iVar14 = *(int *)(param_1 + 0xc);
}
*(int *)(param_1 + 0xc) = iVar14 + 4;
fVar19 = local_b28;
}
}
SetEndTime(this,fVar19);
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar14 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar14 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar15 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar14 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar14,local_820,0x800);
CUtlString::operator=((CUtlString *)(this + 0x18),local_820);
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar14 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar14 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar15 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar14 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar14,local_820,0x800);
SetParameters2(this,local_820);
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar14 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar14 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar15 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar14 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar14,local_820,0x800);
SetParameters3(this,local_820);
pCVar11 = this + 0x5c;
pCVar20 = param_1;
pIVar21 = param_3;
cVar9 = CCurveData::RestoreFromBuffer((CUtlBuffer *)pCVar11,(IChoreoStringPool *)param_1);
if (cVar9 != '\0') {
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 != '\0') {
IVar10 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00bab69a;
}
bVar6 = 0;
bVar13 = 0;
bVar7 = 0;
bVar5 = 0;
local_b3d = 0;
bVar17 = 0;
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%u",&local_b24);
IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00bab69a:
local_b3d = (byte)IVar10 & 1;
bVar13 = (byte)IVar10 >> 1 & 1;
bVar17 = (byte)IVar10 >> 2 & 1;
bVar5 = (byte)IVar10 >> 3 & 1;
bVar6 = (byte)IVar10 >> 5 & 1;
bVar7 = (byte)IVar10 >> 4 & 1;
}
this[0x178] = (CChoreoEvent)
((byte)this[0x178] & 0xdc | local_b3d * '\x02' | bVar13 << 5 | bVar17);
this[0x179] = (CChoreoEvent)((byte)this[0x179] & 0x97 | bVar5 << 5 | bVar7 << 3 | bVar6 << 6);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,4);
fVar19 = 0.0;
if (cVar9 != '\0') {
iVar14 = *(int *)(param_1 + 0xc);
fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
local_b28 = fVar19;
if (((byte)param_1[0x34] & 1) != 0) {
local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
local_b22 = local_b28._1_1_;
local_b28._0_1_ = SUB41(fVar19,0);
local_b21 = (undefined1)local_b28;
_V_memcpy(&local_b28,&local_b24,4);
iVar14 = *(int *)(param_1 + 0xc);
}
*(int *)(param_1 + 0xc) = iVar14 + 4;
fVar19 = local_b28;
}
}
else {
local_b28 = 0.0;
CUtlBuffer::Scanf(param_1,"%f",&local_b28);
fVar19 = local_b28;
}
*(float *)(this + 0x134) = fVar19;
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 != '\0') {
IVar10 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00bab7c9;
}
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%u",&local_b24);
IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00bab7c9:
if (IVar10 != (IChoreoStringPool)0x0) {
iVar14 = 1;
do {
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar15 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar12 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar12 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar12 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar15 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar12 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar15 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar15,local_920,0x100);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
fVar19 = 0.0;
if (cVar9 != '\0') {
IVar1 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00bab875;
}
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%u",&local_b24);
IVar1 = (IChoreoStringPool)local_b24._0_1_;
LAB_00bab875:
fVar19 = ((float)(byte)IVar1 + 0.0) * 0.003921569;
}
iVar14 = iVar14 + 1;
AddRelativeTag(this,(char *)local_920,fVar19);
} while (iVar14 != (byte)IVar10 + 1);
}
}
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 != '\0') {
IVar10 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00baba3a;
}
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%u",&local_b24);
IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00baba3a:
if (IVar10 != (IChoreoStringPool)0x0) {
iVar14 = 1;
do {
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar15 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar12 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar12 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar12 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar15 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar12 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar15 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar15,local_920,0x100);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
fVar19 = 0.0;
if (cVar9 != '\0') {
IVar1 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00babae5;
}
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%u",&local_b24);
IVar1 = (IChoreoStringPool)local_b24._0_1_;
LAB_00babae5:
fVar19 = ((float)(byte)IVar1 + 0.0) * 0.003921569;
}
iVar14 = iVar14 + 1;
AddTimingTag(this,(char *)local_920,fVar19,false);
} while (iVar14 != (byte)IVar10 + 1);
}
}
local_b38 = 0;
do {
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 != '\0') {
IVar10 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00babc84;
}
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%u",&local_b24);
IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00babc84:
if (IVar10 != (IChoreoStringPool)0x0) {
iVar14 = 1;
do {
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar15 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar12 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar12 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1)
;
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar12 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar15 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar12 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar15 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar15,local_920,0x100);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
fVar19 = 0.0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
uVar2 = *(ushort *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1)
;
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
uVar2 = (ushort)local_b28;
}
*(int *)(param_1 + 0xc) = iVar15 + 2;
goto LAB_00babd1f;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%u",&local_b28);
uVar2 = (ushort)local_b28;
LAB_00babd1f:
fVar19 = ((float)uVar2 + 0.0) * 0.00024414063;
}
iVar14 = iVar14 + 1;
AddAbsoluteTag(this,local_b38,local_920,fVar19);
} while (iVar14 != (byte)IVar10 + 1);
}
}
local_b38 = local_b38 + 1;
} while (local_b38 != 2);
if (this[4] == (CChoreoEvent)0x6) {
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,4);
if (cVar9 != '\0') {
iVar14 = *(int *)(param_1 + 0xc);
fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
local_b28 = fVar19;
if (((byte)param_1[0x34] & 1) != 0) {
local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
local_b22 = local_b28._1_1_;
local_b28._0_1_ = SUB41(fVar19,0);
local_b21 = (undefined1)local_b28;
_V_memcpy(&local_b28,&local_b24,4);
iVar14 = *(int *)(param_1 + 0xc);
}
*(int *)(param_1 + 0xc) = iVar14 + 4;
goto LAB_00bac6c5;
}
fVar19 = 0.0;
}
else {
local_b28 = 0.0;
CUtlBuffer::Scanf(param_1,"%f",&local_b28);
LAB_00bac6c5:
fVar19 = local_b28;
if (local_b28 == -1.0) goto LAB_00babe4c;
}
*(float *)(this + 0x50) = fVar19;
}
LAB_00babe4c:
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 != '\0') {
IVar10 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
goto LAB_00babe7e;
}
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%c",&local_b24);
IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00babe7e:
if (IVar10 == (IChoreoStringPool)0x1) {
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar14 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar14 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar15 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar14 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar14,local_a20,0x100);
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar14 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar14 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar15 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar14 = (int)(short)(ushort)local_b28;
}
(*pcVar4)(param_3,iVar14,local_920,0x100);
SetUsingRelativeTag(this,true,local_a20,(char *)local_920);
}
}
pCVar11 = this;
pCVar20 = param_1;
pIVar21 = param_3;
uVar18 = RestoreFlexAnimationsFromBuffer(this,param_1,param_3);
if ((char)uVar18 != '\0') {
CVar8 = this[4];
if (CVar8 == (CChoreoEvent)0xc) {
if (((byte)param_1[0x15] & 1) == 0) {
pCVar20 = (CUtlBuffer *)0x1;
pCVar11 = (CChoreoEvent *)param_1;
cVar9 = CUtlBuffer::CheckGet(param_1,1);
iVar14 = 0;
if (cVar9 != '\0') {
iVar14 = (int)*(char *)(*(int *)param_1 +
(*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
if (iVar14 < 0) {
iVar14 = -1;
}
}
}
else {
pIVar21 = (IChoreoStringPool *)&local_b24;
pCVar20 = (CUtlBuffer *)0xd54391;
local_b24 = local_b24 & 0xff00;
pCVar11 = (CChoreoEvent *)param_1;
CUtlBuffer::Scanf(param_1,"%c",pIVar21);
iVar14 = (int)(char)local_b24._0_1_;
if (iVar14 < 0) {
iVar14 = -1;
}
}
*(int *)(this + 0x54) = iVar14;
CVar8 = this[4];
}
if (CVar8 == (CChoreoEvent)0x5) {
CVar8 = (CChoreoEvent)((byte)param_1[0x15] & 1);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 != '\0') {
CVar8 = *(CChoreoEvent *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
}
}
else {
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%c",&local_b24);
CVar8 = local_b24._0_1_;
}
this[5] = CVar8;
pcVar4 = *(code **)(*(int *)param_3 + 4);
if (((byte)param_1[0x15] & 1) == 0) {
cVar9 = CUtlBuffer::CheckGet(param_1,2);
iVar14 = 0;
if (cVar9 != '\0') {
if (((byte)param_1[0x34] & 1) == 0) {
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
}
else {
puVar16 = (undefined4 *)
((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
if (puVar16 == (undefined4 *)0x0) {
puVar16 = &local_b28;
}
local_b24 = (ushort)local_b28;
local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
_V_memcpy(&local_b28,&local_b24,2);
iVar15 = *(int *)(param_1 + 0xc);
sVar3 = (ushort)local_b28;
}
iVar14 = (int)sVar3;
*(int *)(param_1 + 0xc) = iVar15 + 2;
}
}
else {
local_b28 = (float)((uint)local_b28 & 0xffff0000);
CUtlBuffer::Scanf(param_1,"%d",&local_b28);
iVar14 = (int)(short)(ushort)local_b28;
}
pIVar21 = local_920;
(*pcVar4)(param_3,iVar14,local_920,0x100);
CUtlString::operator=((CUtlString *)(this + 0x13c),(char *)local_920);
if (((byte)param_1[0x15] & 1) == 0) {
pCVar20 = (CUtlBuffer *)0x1;
pCVar11 = (CChoreoEvent *)param_1;
cVar9 = CUtlBuffer::CheckGet(param_1,1);
if (cVar9 == '\0') goto LAB_00bab645;
IVar10 = *(IChoreoStringPool *)
(*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
}
else {
pIVar21 = (IChoreoStringPool *)&local_b24;
pCVar20 = (CUtlBuffer *)0xd54391;
local_b24 = local_b24 & 0xff00;
CUtlBuffer::Scanf(param_1,"%c",pIVar21);
IVar10 = (IChoreoStringPool)local_b24._0_1_;
pCVar11 = (CChoreoEvent *)param_1;
}
if (((byte)IVar10 & 1) != 0) {
this[0x178] = (CChoreoEvent)((byte)this[0x178] | 0x80);
}
if (((byte)IVar10 & 2) != 0) {
this[0x179] = (CChoreoEvent)((byte)this[0x179] | 2);
}
if (((byte)IVar10 & 4) != 0) {
this[0x179] = (CChoreoEvent)((byte)this[0x179] | 4);
}
}
goto LAB_00bab645;
}
}
uVar18 = 0;
LAB_00bab645:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail(pCVar11,pCVar20,pIVar21);
}
return uVar18;
}
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.