InfoChangelevel::SaveEntities
0x00864d70 · 2868 bytes · __thiscall
_ZN15InfoChangelevel12SaveEntitiesEv
Decompiled
undefined (1 param)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* InfoChangelevel::SaveEntities() */
void __thiscall InfoChangelevel::SaveEntities(InfoChangelevel *this)
{
float fVar1;
byte bVar2;
code *pcVar3;
char cVar4;
undefined4 *puVar5;
undefined4 uVar6;
int *piVar7;
int *piVar8;
undefined **ppuVar9;
undefined *puVar10;
uint uVar11;
undefined1 *puVar12;
undefined1 *puVar13;
undefined1 *puVar14;
undefined4 uVar15;
int iVar16;
uint *puVar17;
int iVar18;
uint uVar19;
int in_GS_OFFSET;
double local_54;
double local_4c;
double local_44;
undefined1 *local_30;
undefined **local_2c;
undefined4 local_28;
undefined1 local_24;
undefined1 local_23;
undefined1 local_22;
undefined1 local_21;
int local_20;
iVar16 = 0;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
if (0 < (int)DAT_00ffc7e4) {
do {
piVar7 = *(int **)(g_SavedWeapons + iVar16 * 4);
if (piVar7 != (int *)0x0) {
(**(code **)(*piVar7 + 4))();
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)DAT_00ffc7e4);
}
iVar16 = 0;
DAT_00ffc7e4 = 0;
CUtlMemory<SavedWeapon*,int>::Purge((CUtlMemory<SavedWeapon*,int> *)&g_SavedWeapons);
_DAT_00ffc7e8 = g_SavedWeapons;
if (0 < DAT_00ffc7f8) {
do {
piVar7 = *(int **)(g_SavedWeaponSpawns + iVar16 * 4);
if (piVar7 != (int *)0x0) {
(**(code **)(*piVar7 + 4))();
}
iVar16 = iVar16 + 1;
} while (iVar16 < DAT_00ffc7f8);
}
DAT_00ffc7f8 = 0;
CUtlMemory<SavedWeaponSpawn*,int>::Purge
((CUtlMemory<SavedWeaponSpawn*,int> *)&g_SavedWeaponSpawns);
_DAT_00ffc7fc = g_SavedWeaponSpawns;
iVar16 = DAT_00ffc7d0 + -1;
iVar18 = iVar16 * 8;
if (-1 < iVar16) {
do {
iVar16 = iVar16 + -1;
puVar5 = (undefined4 *)(g_SavedPropPhysics + iVar18);
iVar18 = iVar18 + -8;
(**(code **)*puVar5)();
} while (iVar16 != -1);
}
uVar19 = 0;
DAT_00ffc7d0 = 0;
CUtlMemory<SavedPropPhysics,int>::Purge((CUtlMemory<SavedPropPhysics,int> *)&g_SavedPropPhysics);
_DAT_00ffc7d4 = g_SavedPropPhysics;
g_bNeedRestore = 1;
uVar6 = CGlobalEntityList::FindEntityByName
((CGlobalEntityList *)gEntList,(CBaseEntity *)0x0,(char *)(this + 0x589),
(CBaseEntity *)0x0,(CBaseEntity *)0x0,(CBaseEntity *)0x0,
(IEntityFindFilter *)0x0);
puVar17 = (uint *)&stack0xffffff84;
LAB_00864ed0:
do {
while( true ) {
do {
do {
puVar17[1] = uVar19;
*puVar17 = uVar6;
puVar17[-1] = 0x864edf;
uVar19 = UTIL_EntitiesInPVS((CBaseEntity *)*puVar17,(CBaseEntity *)puVar17[1]);
if (uVar19 == 0) {
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
puVar17[-1] = (uint)&LAB_00865a05;
__stack_chk_fail();
}
return;
}
} while ((*(byte *)(uVar19 + 0x14c) & 1) != 0);
puVar17[1] = uVar19;
*puVar17 = (uint)this;
puVar17[-1] = 0x864f01;
cVar4 = IsEntitySaveable((InfoChangelevel *)*puVar17,(CBaseEntity *)puVar17[1]);
} while (cVar4 == '\0');
puVar17[3] = 0;
puVar17[2] = (uint)&CWeaponCSBase::typeinfo;
puVar17[1] = (uint)&CBaseEntity::typeinfo;
*puVar17 = uVar19;
puVar17[-1] = 0x864f25;
piVar7 = (int *)__dynamic_cast();
if (piVar7 == (int *)0x0) break;
iVar16 = *piVar7;
*puVar17 = (uint)piVar7;
pcVar3 = *(code **)(iVar16 + 0x500);
puVar17[-1] = 0x864f3a;
piVar8 = (int *)(*pcVar3)();
if (piVar8 == (int *)0x0) {
iVar16 = *piVar7;
*puVar17 = (uint)piVar7;
pcVar3 = *(code **)(iVar16 + 0x638);
puVar17[-1] = 0x865303;
iVar16 = (*pcVar3)();
if (iVar16 == 0x13) {
*puVar17 = (uint)piVar7;
puVar17[3] = 0;
puVar17[2] = (uint)&CTerrorMeleeWeapon::typeinfo;
puVar17[1] = (uint)&CWeaponCSBase::typeinfo;
puVar17[-1] = 0x86534a;
uVar11 = __dynamic_cast();
if (uVar11 == 0) break;
*puVar17 = 8;
puVar17[-1] = 0x86535c;
ppuVar9 = ::operator_new(*puVar17);
puVar17[1] = uVar11;
*puVar17 = (uint)ppuVar9;
/* try { // try from 00865365 to 00865369 has its CatchHandler @ 00865a35 */
puVar17[-1] = 0x86536a;
SavedWeapon::SavedWeapon((SavedWeapon *)*puVar17,(CWeaponCSBase *)puVar17[1]);
*ppuVar9 = (undefined *)&PTR__SavedTerrorMeleeWeapon_00cda930;
*puVar17 = uVar11;
/* try { // try from 00865373 to 00865377 has its CatchHandler @ 00865a45 */
puVar17[-1] = 0x865378;
uVar11 = CTerrorMeleeWeapon::GetMeleeWeaponInfoHandle((CTerrorMeleeWeapon *)*puVar17);
puVar17[2] = uVar11;
puVar17[1] = (uint)"melee_weapon";
*puVar17 = (uint)ppuVar9[1];
/* try { // try from 0086538a to 0086538e has its CatchHandler @ 00865a5d */
puVar17[-1] = 0x86538f;
KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
local_2c = ppuVar9;
}
else {
*puVar17 = 8;
puVar17[-1] = 0x865314;
ppuVar9 = ::operator_new(*puVar17);
puVar17[1] = (uint)piVar7;
*puVar17 = (uint)ppuVar9;
/* try { // try from 0086531d to 00865321 has its CatchHandler @ 00865a26 */
puVar17[-1] = 0x865322;
SavedWeapon::SavedWeapon((SavedWeapon *)*puVar17,(CWeaponCSBase *)puVar17[1]);
local_2c = ppuVar9;
}
}
else {
*puVar17 = 0x10;
puVar17[-1] = 0x864f50;
ppuVar9 = ::operator_new(*puVar17);
*ppuVar9 = (undefined *)&PTR__SavedEntity_00cda8a0;
*puVar17 = 0x2c;
/* try { // try from 00864f5f to 00864f63 has its CatchHandler @ 00865a05 */
puVar17[-1] = 0x864f64;
puVar10 = KeyValues::operator_new((KeyValues *)*puVar17,puVar17[1]);
puVar17[3] = 0;
puVar17[2] = 0;
puVar17[1] = (uint)"item";
*puVar17 = (uint)puVar10;
/* try { // try from 00864f82 to 00864f86 has its CatchHandler @ 00865a0b */
puVar17[-1] = 0x864f87;
KeyValues::KeyValues
((KeyValues *)*puVar17,(char *)puVar17[1],(IKeyValuesSystem *)puVar17[2],
SUB41(puVar17[3],0));
ppuVar9[1] = puVar10;
puVar13 = (undefined1 *)piVar8[0x1f];
puVar17[1] = (uint)"classname";
*puVar17 = (uint)puVar10;
puVar12 = &DAT_00d539c2;
if (puVar13 != (undefined1 *)0x0) {
puVar12 = puVar13;
}
puVar17[2] = (uint)puVar12;
/* try { // try from 00864fa9 to 008650d6 has its CatchHandler @ 00865a05 */
puVar17[-1] = 0x864fae;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
if ((*(byte *)((int)piVar8 + 0x14d) & 8) != 0) {
*puVar17 = (uint)piVar8;
puVar17[-1] = 0x865280;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
}
*(double *)(puVar17 + 5) = (double)(float)piVar8[0xba];
*(double *)(puVar17 + 3) = (double)(float)piVar8[0xb9];
fVar1 = (float)piVar8[0xb8];
*puVar17 = (uint)"%f %f %f";
*(double *)(puVar17 + 1) = (double)fVar1;
puVar17[-1] = 0x864ffa;
uVar11 = UTIL_VarArgs((char *)*puVar17);
puVar17[2] = uVar11;
puVar17[1] = (uint)"pos";
*puVar17 = (uint)ppuVar9[1];
puVar17[-1] = 0x865011;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
if ((*(byte *)((int)piVar8 + 0x14d) & 8) != 0) {
*puVar17 = (uint)piVar8;
puVar17[-1] = 0x865270;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
}
*(double *)(puVar17 + 5) = (double)(float)piVar8[0xe1];
*(double *)(puVar17 + 3) = (double)(float)piVar8[0xe0];
fVar1 = (float)piVar8[0xdf];
*puVar17 = (uint)"%f %f %f";
*(double *)(puVar17 + 1) = (double)fVar1;
puVar17[-1] = 0x86505d;
uVar11 = UTIL_VarArgs((char *)*puVar17);
puVar17[2] = uVar11;
puVar17[1] = (uint)"angles";
*puVar17 = (uint)ppuVar9[1];
puVar17[-1] = 0x865074;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
if ((*(byte *)((int)piVar8 + 0x14d) & 0x10) != 0) {
*puVar17 = (uint)piVar8;
/* try { // try from 0086525b to 0086527f has its CatchHandler @ 00865a05 */
puVar17[-1] = 0x865260;
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)*puVar17);
}
*(double *)(puVar17 + 5) = (double)(float)piVar8[0x9f];
*(double *)(puVar17 + 3) = (double)(float)piVar8[0x9e];
fVar1 = (float)piVar8[0x9d];
*puVar17 = (uint)"%f %f %f";
*(double *)(puVar17 + 1) = (double)fVar1;
puVar17[-1] = 0x8650c0;
uVar11 = UTIL_VarArgs((char *)*puVar17);
puVar17[2] = uVar11;
puVar17[1] = (uint)"vel";
*puVar17 = (uint)ppuVar9[1];
puVar17[-1] = 0x8650d7;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
*ppuVar9 = (undefined *)&PTR__SavedWeapon_00cda8e8;
if ((*(byte *)((int)piVar8 + 0x14d) & 8) == 0) {
local_4c = (double)(float)piVar8[0xba];
LAB_008650fa:
local_44 = (double)(float)piVar8[0xb9];
}
else {
*puVar17 = (uint)piVar8;
/* try { // try from 0086528b to 0086528f has its CatchHandler @ 008659d7 */
puVar17[-1] = 0x865290;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
local_4c = (double)(float)piVar8[0xba];
if ((*(byte *)((int)piVar8 + 0x14d) & 8) == 0) goto LAB_008650fa;
*puVar17 = (uint)piVar8;
/* try { // try from 008652b0 to 008652b4 has its CatchHandler @ 008659d5 */
puVar17[-1] = 0x8652b5;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
local_44 = (double)(float)piVar8[0xb9];
if ((*(byte *)((int)piVar8 + 0x14d) & 8) != 0) {
*puVar17 = (uint)piVar8;
/* try { // try from 008652d5 to 008652d9 has its CatchHandler @ 008659ac */
puVar17[-1] = 0x8652da;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
}
}
puVar13 = (undefined1 *)piVar8[0x1f];
fVar1 = (float)piVar8[0xb8];
puVar17[1] = (uint)"Saving %s at %.0f, %.0f, %.0f\n";
*(double *)(puVar17 + 3) = (double)fVar1;
*(double *)(puVar17 + 7) = local_4c;
*(double *)(puVar17 + 5) = local_44;
puVar12 = &DAT_00d539c2;
if (puVar13 != (undefined1 *)0x0) {
puVar12 = puVar13;
}
local_24 = 0;
local_23 = 0xff;
puVar17[2] = (uint)puVar12;
*puVar17 = (uint)&local_24;
local_22 = 0xc0;
local_21 = 0xff;
/* try { // try from 00865160 to 00865164 has its CatchHandler @ 00865a09 */
puVar17[-1] = 0x865165;
ConColorMsg((Color *)*puVar17,(char *)puVar17[1]);
uVar11 = piVar8[0x508];
puVar17[1] = (uint)"currentMagazine";
puVar17[2] = uVar11;
*puVar17 = (uint)ppuVar9[1];
/* try { // try from 0086517d to 00865181 has its CatchHandler @ 00865a24 */
puVar17[-1] = 0x865182;
KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
uVar11 = piVar8[0x53f];
puVar17[1] = (uint)"extraAmmo";
puVar17[2] = uVar11;
*puVar17 = (uint)ppuVar9[1];
/* try { // try from 0086519a to 0086519e has its CatchHandler @ 00865a22 */
puVar17[-1] = 0x86519f;
KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
uVar11 = piVar8[0x116];
puVar17[1] = (uint)"weaponskin";
puVar17[2] = uVar11;
*puVar17 = (uint)ppuVar9[1];
/* try { // try from 008651b7 to 008651bb has its CatchHandler @ 00865a1c */
puVar17[-1] = 0x8651bc;
KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
*ppuVar9 = (undefined *)&PTR__SavedTerrorGun_00cda918;
ppuVar9[3] = (undefined *)0x0;
iVar16 = *piVar8;
*puVar17 = (uint)piVar8;
/* try { // try from 008651d4 to 008651d9 has its CatchHandler @ 00865a1a */
pcVar3 = *(code **)(iVar16 + 0x674);
puVar17[-1] = 0x8651da;
uVar11 = (*pcVar3)();
puVar17[1] = (uint)"dual";
puVar17[2] = uVar11 & 0xff;
*puVar17 = (uint)ppuVar9[1];
/* try { // try from 008651ef to 008651f3 has its CatchHandler @ 008659f6 */
puVar17[-1] = 0x8651f4;
KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
bVar2 = *(byte *)((int)piVar8 + 0x17e2);
puVar17[1] = (uint)"reloaded";
puVar17[2] = (uint)(bVar2 ^ 1);
*puVar17 = (uint)ppuVar9[1];
/* try { // try from 00865213 to 00865217 has its CatchHandler @ 008659f4 */
puVar17[-1] = 0x865218;
KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
*puVar17 = (uint)piVar8;
puVar17[1] = (uint)(ppuVar9 + 3);
/* try { // try from 00865222 to 00865226 has its CatchHandler @ 008659d9 */
puVar17[-1] = 0x865227;
CTerrorGun::GetUpgradeBitVec((CTerrorGun *)*puVar17,(CBitVec *)puVar17[1]);
ppuVar9[2] = (undefined *)(uint)*(byte *)(piVar8 + 0x5e4);
local_2c = ppuVar9;
}
*puVar17 = (uint)&g_SavedWeapons;
puVar17[2] = (uint)&local_2c;
puVar17[1] = DAT_00ffc7e4;
puVar17[-1] = 0x865250;
CUtlVector<SavedWeapon*,CUtlMemory<SavedWeapon*,int>>::InsertBefore
((CUtlVector<SavedWeapon*,CUtlMemory<SavedWeapon*,int>> *)*puVar17,puVar17[1],
(SavedWeapon **)puVar17[2]);
}
puVar17[3] = 0;
puVar17[2] = (uint)&CWeaponMeleeSpawn::typeinfo;
puVar17[1] = (uint)&CBaseEntity::typeinfo;
*puVar17 = uVar19;
puVar17[-1] = 0x8653b1;
piVar7 = (int *)__dynamic_cast();
if (piVar7 == (int *)0x0) {
puVar17[3] = 0;
puVar17[2] = (uint)&CWeaponSpawn::typeinfo;
puVar17[1] = (uint)&CBaseEntity::typeinfo;
*puVar17 = uVar19;
puVar17[-1] = 0x86572e;
uVar11 = __dynamic_cast();
if (uVar11 == 0) {
puVar17[1] = uVar19;
*puVar17 = (uint)this;
puVar17[-1] = 0x8657d4;
cVar4 = CBaseTrigger::IsTouching((CBaseTrigger *)*puVar17,(CBaseEntity *)puVar17[1]);
if (cVar4 != '\0') {
puVar17[3] = 0;
puVar17[2] = (uint)&CPhysicsProp::typeinfo;
puVar17[1] = (uint)&CBaseEntity::typeinfo;
*puVar17 = uVar19;
puVar17[-1] = 0x8657fc;
piVar7 = (int *)__dynamic_cast();
if (piVar7 != (int *)0x0) {
puVar17[1] = (uint)piVar7;
*puVar17 = *(undefined4 *)(TheDirector + 0x62c);
puVar17[-1] = 0x86581d;
cVar4 = CDirectorItemManager::ShouldTransitionPhysicsProp
((CDirectorItemManager *)*puVar17,(CPhysicsProp *)puVar17[1]);
if (cVar4 != '\0') {
puVar17[1] = (uint)piVar7;
*puVar17 = (uint)&local_2c;
puVar17[-1] = 0x865834;
SavedEntity::SavedEntity((SavedEntity *)*puVar17,(CBaseEntity *)puVar17[1]);
local_2c = &PTR__SavedPropPhysics_00cda900;
iVar16 = *piVar7;
puVar17[1] = (uint)piVar7;
*puVar17 = (uint)&local_30;
/* try { // try from 00865847 to 00865870 has its CatchHandler @ 008658eb */
pcVar3 = *(code **)(iVar16 + 0x20);
puVar17[-1] = 0x86584a;
(*pcVar3)();
*puVar17 = (uint)"model";
puVar13 = &DAT_00d539c2;
if (local_30 != (undefined1 *)0x0) {
puVar13 = local_30;
}
puVar17[1] = (uint)puVar13;
puVar17[-1] = local_28;
puVar17[-2] = 0x865871;
KeyValues::SetString((KeyValues *)puVar17[-1],(char *)*puVar17,(char *)puVar17[1]);
puVar17[-1] = (uint)&g_SavedPropPhysics;
puVar17[1] = (uint)&local_2c;
*puVar17 = DAT_00ffc7d0;
/* try { // try from 00865888 to 0086588c has its CatchHandler @ 008658cf */
puVar17[-2] = 0x86588d;
CUtlVector<SavedPropPhysics,CUtlMemory<SavedPropPhysics,int>>::InsertBefore
((CUtlVector<SavedPropPhysics,CUtlMemory<SavedPropPhysics,int>> *)
puVar17[-1],*puVar17,(SavedPropPhysics *)puVar17[1]);
local_2c = &PTR__SavedEntity_00cda8a0;
puVar17[-1] = local_28;
puVar17[-2] = 0x86589f;
KeyValues::deleteThis();
puVar17 = puVar17 + -1;
}
}
}
goto LAB_00864ed0;
}
*puVar17 = 8;
puVar17[-1] = 0x865744;
ppuVar9 = ::operator_new(*puVar17);
puVar17[1] = uVar11;
*puVar17 = (uint)ppuVar9;
/* try { // try from 0086574d to 00865751 has its CatchHandler @ 00865909 */
puVar17[-1] = 0x865752;
SavedWeaponSpawn::SavedWeaponSpawn((SavedWeaponSpawn *)*puVar17,(CWeaponSpawn *)puVar17[1]);
}
else {
*puVar17 = 8;
puVar17[-1] = 0x8653c7;
ppuVar9 = ::operator_new(*puVar17);
*ppuVar9 = (undefined *)&PTR__SavedEntity_00cda8a0;
*puVar17 = 0x2c;
/* try { // try from 008653d6 to 008653da has its CatchHandler @ 008659a7 */
puVar17[-1] = 0x8653db;
puVar10 = KeyValues::operator_new((KeyValues *)*puVar17,puVar17[1]);
puVar17[3] = 0;
puVar17[2] = 0;
puVar17[1] = (uint)"item";
*puVar17 = (uint)puVar10;
/* try { // try from 008653f9 to 008653fd has its CatchHandler @ 00865995 */
puVar17[-1] = 0x8653fe;
KeyValues::KeyValues
((KeyValues *)*puVar17,(char *)puVar17[1],(IKeyValuesSystem *)puVar17[2],
SUB41(puVar17[3],0));
ppuVar9[1] = puVar10;
puVar13 = (undefined1 *)piVar7[0x1f];
puVar17[1] = (uint)"classname";
*puVar17 = (uint)puVar10;
puVar12 = &DAT_00d539c2;
if (puVar13 != (undefined1 *)0x0) {
puVar12 = puVar13;
}
puVar17[2] = (uint)puVar12;
/* try { // try from 00865420 to 0086554d has its CatchHandler @ 008659a7 */
puVar17[-1] = 0x865425;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
if ((*(byte *)((int)piVar7 + 0x14d) & 8) != 0) {
*puVar17 = (uint)piVar7;
puVar17[-1] = 0x8657c0;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
}
*(double *)(puVar17 + 5) = (double)(float)piVar7[0xba];
*(double *)(puVar17 + 3) = (double)(float)piVar7[0xb9];
fVar1 = (float)piVar7[0xb8];
*puVar17 = (uint)"%f %f %f";
*(double *)(puVar17 + 1) = (double)fVar1;
puVar17[-1] = 0x865471;
uVar11 = UTIL_VarArgs((char *)*puVar17);
puVar17[2] = uVar11;
puVar17[1] = (uint)"pos";
*puVar17 = (uint)ppuVar9[1];
puVar17[-1] = 0x865488;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
if ((*(byte *)((int)piVar7 + 0x14d) & 8) != 0) {
*puVar17 = (uint)piVar7;
/* try { // try from 008657ae to 008657bf has its CatchHandler @ 008659a7 */
puVar17[-1] = 0x8657b3;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
}
*(double *)(puVar17 + 5) = (double)(float)piVar7[0xe1];
*(double *)(puVar17 + 3) = (double)(float)piVar7[0xe0];
fVar1 = (float)piVar7[0xdf];
*puVar17 = (uint)"%f %f %f";
*(double *)(puVar17 + 1) = (double)fVar1;
puVar17[-1] = 0x8654d4;
uVar11 = UTIL_VarArgs((char *)*puVar17);
puVar17[2] = uVar11;
puVar17[1] = (uint)"angles";
*puVar17 = (uint)ppuVar9[1];
puVar17[-1] = 0x8654eb;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
if ((*(byte *)((int)piVar7 + 0x14d) & 0x10) != 0) {
*puVar17 = (uint)piVar7;
/* try { // try from 00865704 to 00865708 has its CatchHandler @ 008659a7 */
puVar17[-1] = 0x865709;
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)*puVar17);
}
*(double *)(puVar17 + 5) = (double)(float)piVar7[0x9f];
*(double *)(puVar17 + 3) = (double)(float)piVar7[0x9e];
fVar1 = (float)piVar7[0x9d];
*puVar17 = (uint)"%f %f %f";
*(double *)(puVar17 + 1) = (double)fVar1;
puVar17[-1] = 0x865537;
uVar11 = UTIL_VarArgs((char *)*puVar17);
puVar17[2] = uVar11;
puVar17[1] = (uint)"vel";
*puVar17 = (uint)ppuVar9[1];
puVar17[-1] = 0x86554e;
KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
*ppuVar9 = (undefined *)&PTR__SavedWeaponSpawn_00cda8b8;
iVar16 = *piVar7;
puVar17[1] = (uint)piVar7;
*puVar17 = (uint)&local_30;
/* try { // try from 00865560 to 00865562 has its CatchHandler @ 00865985 */
pcVar3 = *(code **)(iVar16 + 0x20);
puVar17[-1] = 0x865563;
(*pcVar3)();
puVar13 = local_30;
if (local_30 == (undefined1 *)0x0) {
puVar13 = &DAT_00d539c2;
}
if ((*(byte *)((int)piVar7 + 0x14d) & 8) == 0) {
local_4c = (double)(float)piVar7[0xba];
LAB_00865593:
local_54 = (double)(float)piVar7[0xb9];
}
else {
puVar17[-1] = (uint)piVar7;
/* try { // try from 00865757 to 0086575b has its CatchHandler @ 00865907 */
puVar17[-2] = 0x86575c;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar17[-1]);
local_4c = (double)(float)piVar7[0xba];
if ((*(byte *)((int)piVar7 + 0x14d) & 8) == 0) goto LAB_00865593;
puVar17[-1] = (uint)piVar7;
/* try { // try from 0086577c to 00865780 has its CatchHandler @ 008658cd */
puVar17[-2] = 0x865781;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar17[-1]);
local_54 = (double)(float)piVar7[0xb9];
if ((*(byte *)((int)piVar7 + 0x14d) & 8) != 0) {
puVar17[-1] = (uint)piVar7;
/* try { // try from 008657a1 to 008657a5 has its CatchHandler @ 008658a4 */
puVar17[-2] = 0x8657a6;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar17[-1]);
}
}
puVar12 = (undefined1 *)piVar7[0x1f];
*(double *)(puVar17 + 2) = (double)(float)piVar7[0xb8];
*puVar17 = (uint)"Saving %s at %.0f, %.0f, %.0f (model %s)\n";
local_24 = 0;
*(double *)(puVar17 + 6) = local_4c;
puVar14 = &DAT_00d539c2;
if (puVar12 != (undefined1 *)0x0) {
puVar14 = puVar12;
}
puVar17[8] = (uint)puVar13;
*(double *)(puVar17 + 4) = local_54;
puVar17[1] = (uint)puVar14;
puVar17[-1] = (uint)&local_24;
local_23 = 0xff;
local_22 = 0xc0;
local_21 = 0xff;
/* try { // try from 00865600 to 00865604 has its CatchHandler @ 00865975 */
puVar17[-2] = 0x865605;
ConColorMsg((Color *)puVar17[-1],(char *)*puVar17);
uVar11 = piVar7[0x513];
*puVar17 = (uint)"itemCount";
puVar17[1] = uVar11;
puVar17[-1] = (uint)ppuVar9[1];
/* try { // try from 0086561d to 00865621 has its CatchHandler @ 00865965 */
puVar17[-2] = 0x865622;
KeyValues::SetInt((KeyValues *)puVar17[-1],(char *)*puVar17,puVar17[1]);
bVar2 = *(byte *)(piVar7 + 0x35);
*puVar17 = (uint)"shadow";
puVar17[1] = (uint)((bVar2 & 0x10) == 0);
puVar17[-1] = (uint)ppuVar9[1];
/* try { // try from 00865640 to 00865644 has its CatchHandler @ 00865955 */
puVar17[-2] = 0x865645;
KeyValues::SetInt((KeyValues *)puVar17[-1],(char *)*puVar17,puVar17[1]);
iVar16 = *piVar7;
*puVar17 = (uint)piVar7;
puVar17[-1] = (uint)&local_30;
/* try { // try from 00865651 to 00865653 has its CatchHandler @ 00865945 */
pcVar3 = *(code **)(iVar16 + 0x20);
puVar17[-2] = 0x865654;
(*pcVar3)();
puVar17[-1] = (uint)"model";
puVar13 = &DAT_00d539c2;
if (local_30 != (undefined1 *)0x0) {
puVar13 = local_30;
}
*puVar17 = (uint)puVar13;
puVar17[-2] = (uint)ppuVar9[1];
/* try { // try from 00865676 to 0086567a has its CatchHandler @ 00865935 */
puVar17[-3] = 0x86567b;
KeyValues::SetString((KeyValues *)puVar17[-2],(char *)puVar17[-1],(char *)*puVar17);
iVar16 = *piVar7;
puVar17[-2] = (uint)piVar7;
/* try { // try from 00865680 to 00865685 has its CatchHandler @ 00865929 */
pcVar3 = *(code **)(iVar16 + 0x3cc);
puVar17[-3] = 0x865686;
uVar15 = (*pcVar3)();
*puVar17 = uVar15;
puVar17[-1] = (uint)"weaponID";
puVar17[-2] = (uint)ppuVar9[1];
/* try { // try from 00865698 to 0086569c has its CatchHandler @ 00865924 */
puVar17[-3] = 0x86569d;
KeyValues::SetInt((KeyValues *)puVar17[-2],(char *)puVar17[-1],*puVar17);
iVar16 = piVar7[0x514];
puVar17[-1] = (uint)"weaponskin";
*puVar17 = iVar16;
puVar17[-2] = (uint)ppuVar9[1];
/* try { // try from 008656b5 to 008656b9 has its CatchHandler @ 00865922 */
puVar17[-3] = 0x8656ba;
KeyValues::SetInt((KeyValues *)puVar17[-2],(char *)puVar17[-1],*puVar17);
*ppuVar9 = (undefined *)&PTR__SavedMeleeWeaponSpawn_00cda8d0;
iVar16 = piVar7[0x51a];
puVar17[-1] = (uint)"melee_weapon";
*puVar17 = iVar16;
puVar17[-2] = (uint)ppuVar9[1];
/* try { // try from 008656d8 to 008656dc has its CatchHandler @ 0086590d */
puVar17[-3] = 0x8656dd;
KeyValues::SetInt((KeyValues *)puVar17[-2],(char *)puVar17[-1],*puVar17);
puVar17 = puVar17 + -2;
}
*puVar17 = (uint)&g_SavedWeaponSpawns;
puVar17[2] = (uint)&local_2c;
puVar17[1] = DAT_00ffc7f8;
puVar17[-1] = 0x8656fc;
local_2c = ppuVar9;
CUtlVector<SavedWeaponSpawn*,CUtlMemory<SavedWeaponSpawn*,int>>::InsertBefore
((CUtlVector<SavedWeaponSpawn*,CUtlMemory<SavedWeaponSpawn*,int>> *)*puVar17,
puVar17[1],(SavedWeaponSpawn **)puVar17[2]);
} while( true );
}
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.