CreateGibsFromList
0x00499850 · 4684 bytes · __cdecl
_Z18CreateGibsFromListR10CUtlVectorI12breakmodel_t10CUtlMemoryIS0_iEEiP14IPhysicsObjectRK21breakablepropparams_tP11CBaseEntityibbPS_I7CHandleISA_ES1_ISD_iEEb
Decompiled
undefined (10 params)
/* WARNING: Removing unreachable block (ram,0x0049aac7) */
/* WARNING: Removing unreachable block (ram,0x0049a6fc) */
/* WARNING: Removing unreachable block (ram,0x0049a44d) */
/* WARNING: Removing unreachable block (ram,0x0049aad7) */
/* CreateGibsFromList(CUtlVector<breakmodel_t, CUtlMemory<breakmodel_t, int> >&, int,
IPhysicsObject*, breakablepropparams_t const&, CBaseEntity*, int, bool, bool,
CUtlVector<CHandle<CBaseEntity>, CUtlMemory<CHandle<CBaseEntity>, int> >*, bool) */
CBaseEntity *
CreateGibsFromList(CUtlVector *param_1,int param_2,IPhysicsObject *param_3,
breakablepropparams_t *param_4,CBaseEntity *param_5,int param_6,bool param_7,
bool param_8,CUtlVector *param_9,bool param_10)
{
float fVar1;
code *pcVar2;
char cVar3;
int iVar4;
studiohdr_t *psVar5;
CBaseEntity *pCVar6;
float *pfVar7;
float *pfVar8;
int *piVar9;
int iVar10;
undefined4 *puVar11;
undefined1 *puVar12;
undefined4 uVar13;
uint uVar14;
int iVar15;
int **ppiVar16;
int *piVar17;
int in_GS_OFFSET;
longdouble lVar18;
int aiStack_648 [2];
int *local_640;
matrix3x4_t *local_614;
int local_60c;
CBaseAnimating *local_604;
CBaseEntity *local_5f4;
Vector *local_5f0;
CBaseEntity *local_5ec;
int local_5e8;
undefined1 *local_5e0;
float local_5dc;
float local_5d8;
float local_5d4;
float local_5d0;
float local_5cc;
float local_5c8;
undefined4 local_5c4 [3];
float local_5b8 [3];
float local_5ac;
float local_5a8;
float local_5a4;
float local_5a0;
float local_59c;
float local_598;
float local_594;
float local_590;
float local_58c;
float local_588;
float local_584;
float local_580;
matrix3x4_t local_57c [48];
undefined4 local_54c [12];
CStudioHdr local_51c [8];
undefined4 local_514 [3];
undefined4 local_508;
undefined4 local_504;
undefined4 local_4f0 [3];
undefined4 local_4e4;
undefined4 local_4e0;
undefined4 local_4dc [3];
undefined4 local_4d0;
undefined4 local_4cc;
int local_4b4 [2];
undefined4 local_4ac [3];
undefined4 local_4a0;
undefined4 local_49c;
undefined4 local_488 [3];
undefined4 local_47c;
undefined4 local_478;
undefined4 local_474 [3];
undefined4 local_468;
undefined4 local_464;
float local_44c;
float local_448;
float local_444;
undefined1 local_440 [512];
undefined1 local_240;
float local_40;
undefined4 local_3c;
undefined4 local_38;
undefined4 local_34;
undefined4 local_30;
undefined4 local_2c;
undefined1 local_28;
undefined1 local_27;
undefined1 local_26;
int local_20;
piVar17 = (int *)&stack0xfffff9c4;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
iVar10 = *(int *)(props_break_max_pieces_perframe._28_4_ + 0x30);
if (iVar10 == -1) {
LAB_004998dc:
iVar4 = param_6;
if ((((!param_7) && (iVar15 = *(int *)(props_break_max_pieces._28_4_ + 0x30), iVar15 != -1)) &&
(iVar4 = iVar15, param_6 != -1)) && (param_6 <= iVar15)) {
iVar4 = param_6;
}
param_6 = iVar4;
local_640 = (int *)0x499905;
cVar3 = PropBreakableCapEdictsOnCreateAll(param_2,param_3,param_4,param_5,param_6);
if (cVar3 == '\0') {
local_640 = (int *)0x49aa7c;
DevMsg("Failed to create PropBreakable: would exceed MAX_EDICTS\n");
}
else {
local_640 = (int *)0x49991e;
iVar4 = (**(code **)(*modelinfo + 0x18))();
if (iVar4 != 0) {
local_5ec = param_5;
if (param_3 != (IPhysicsObject *)0x0) {
local_640 = (int *)0x49993e;
local_5ec = (CBaseEntity *)(**(code **)(*(int *)param_3 + 0x48))();
}
if (local_5ec == (CBaseEntity *)0x0) {
local_604 = (CBaseAnimating *)0x0;
local_60c = 0;
}
else {
local_640 = (int *)0x499972;
local_604 = (CBaseAnimating *)__dynamic_cast();
if (local_604 == (CBaseAnimating *)0x0) {
local_60c = 0;
}
else {
local_60c = *(int *)(local_604 + 0x458);
}
}
local_640 = (int *)0x49999a;
CStudioHdr::CStudioHdr(local_51c);
/* try { // try from 004999a8 to 00499a55 has its CatchHandler @ 0049aaf4 */
local_640 = (int *)0x4999ab;
iVar4 = (**(code **)(*modelinfo + 8))();
if (iVar4 != 0) {
local_640 = (int *)0x4999c1;
psVar5 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
local_640 = (int *)0x4999db;
CStudioHdr::Init(local_51c,psVar5,(IMDLCache *)0x0);
}
local_5dc = vec3_origin;
local_5d8 = DAT_01053d4c;
local_5d4 = DAT_01053d50;
local_640 = (int *)0x499a12;
iVar4 = Studio_FindAttachment(local_51c,"placementOrigin");
if (iVar4 < 0) {
/* try { // try from 0049a92f to 0049aa5d has its CatchHandler @ 0049aaf4 */
local_640 = (int *)0x49a934;
AngleMatrix((QAngle *)&vec3_angle,local_57c);
}
else {
local_640 = (int *)0x499a3c;
GetAttachmentLocalSpace(local_51c,iVar4,local_57c);
local_640 = (int *)0x499a56;
MatrixGetColumn(local_57c,3,(Vector *)&local_5dc);
}
local_614 = local_57c;
if (*(int *)(param_1 + 0xc) == 0) {
ppiVar16 = (int **)&stack0xfffff9c4;
if (param_5 != (CBaseEntity *)0x0) {
local_640 = (int *)0x49a218;
piVar9 = (int *)__dynamic_cast();
ppiVar16 = (int **)&stack0xfffff9c4;
if (piVar9 != (int *)0x0) {
/* try { // try from 0049a237 to 0049a239 has its CatchHandler @ 0049aaf4 */
local_640 = (int *)0x49a23a;
(**(code **)(*piVar9 + 0x54))();
ppiVar16 = &local_640;
/* try { // try from 0049a250 to 0049a252 has its CatchHandler @ 0049aadc */
if ((local_5e0 != (undefined1 *)0x0) &&
(local_640 = piVar9, iVar10 = (**(code **)(*piVar9 + 100))(), ppiVar16 = &local_640
, iVar10 != 0)) {
local_5e8 = 0;
local_5f4 = (CBaseEntity *)0x0;
ppiVar16 = &local_640;
while( true ) {
iVar10 = *piVar9;
*ppiVar16 = piVar9;
pcVar2 = *(code **)(iVar10 + 100);
ppiVar16[-1] = (int *)0x49a5f0;
iVar10 = (*pcVar2)();
piVar17 = (int *)ppiVar16;
if ((iVar10 <= local_5e8) || ((param_6 <= local_5e8 && (param_6 != -1)))) break;
iVar10 = *piVar9;
*ppiVar16 = piVar9;
pcVar2 = *(code **)(iVar10 + 0x6c);
ppiVar16[-1] = (int *)0x49a619;
iVar4 = (*pcVar2)();
iVar10 = *piVar9;
ppiVar16[1] = piVar9;
*ppiVar16 = (int *)&local_5e0;
pcVar2 = *(code **)(iVar10 + 0x54);
ppiVar16[-1] = (int *)0x49a633;
(*pcVar2)();
ppiVar16[1] = (int *)iVar4;
ppiVar16[-1] = (int *)g_PropDataSystem;
puVar12 = &DAT_00d539c2;
if (local_5e0 != (undefined1 *)0x0) {
puVar12 = local_5e0;
}
*ppiVar16 = (int *)puVar12;
ppiVar16[-2] = (int *)0x49a65a;
uVar13 = CPropData::GetRandomChunkModel
((CPropData *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
*ppiVar16 = (int *)uVar13;
ppiVar16[1] = (int *)0x200;
ppiVar16[-1] = (int *)local_440;
ppiVar16[-2] = (int *)0x49a674;
V_strncpy((char *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
*ppiVar16 = (int *)0x41200000;
ppiVar16[-1] = (int *)0x40a00000;
local_34 = 0x3f800000;
ppiVar16[-2] = (int *)0x49a68f;
lVar18 = (longdouble)RandomFloat();
local_3c = 0;
local_38 = 0;
local_40 = (float)lVar18;
local_2c = 1;
local_30 = *(undefined4 *)(param_4 + 0x14);
local_28 = 0;
local_26 = 0;
local_240 = 0;
local_27 = 0;
if (AllocTempVector()::s_vecTemp == '\0') {
ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
ppiVar16[-2] = (int *)0x49a9bc;
iVar10 = __cxa_guard_acquire();
if (iVar10 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
ppiVar16[-2] = (int *)0x49a9d0;
__cxa_guard_release();
}
}
if (AllocTempVector()::s_nIndex == '\0') {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
ppiVar16[-2] = (int *)0x49a984;
iVar10 = __cxa_guard_acquire();
if (iVar10 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
AllocTempVector()::s_nIndex = 0;
ppiVar16[-2] = (int *)0x49a9a2;
__cxa_guard_release();
}
}
uVar14 = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
LOCK();
UNLOCK();
iVar10 = uVar14 * 0xc;
AllocTempVector()::s_nIndex = uVar14;
*(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc) =
*(float *)(param_5 + 0x1a8) - *(float *)(param_5 + 0x19c);
*(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4) =
*(float *)(param_5 + 0x1ac) - *(float *)(param_5 + 0x1a0);
*(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8) =
*(float *)(param_5 + 0x1b0) - *(float *)(param_5 + 0x1a4);
local_5d0 = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
local_5cc = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4);
local_5c8 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8);
if (local_5d0 < local_5cc) {
if (local_5c8 <= local_5d0) goto LAB_0049a950;
pfVar8 = local_5b8;
puVar11 = local_5c4;
}
else if (local_5c8 <= local_5cc) {
LAB_0049a950:
pfVar8 = local_5b8 + 2;
puVar11 = local_5c4 + 2;
}
else {
pfVar8 = local_5b8 + 1;
puVar11 = local_5c4 + 1;
}
local_5f0 = (Vector *)local_5b8;
local_5c4[0] = 0;
local_5c4[1] = 0;
local_5c4[2] = 0;
local_5b8[0] = 1.0;
*puVar11 = 0x3f000000;
local_5b8[1] = 1.0;
local_5b8[2] = 1.0;
*pfVar8 = 0.5;
*ppiVar16 = local_5c4;
ppiVar16[2] = (int *)&local_44c;
ppiVar16[1] = (int *)local_5f0;
ppiVar16[-1] = (int *)(param_5 + 0x194);
/* try { // try from 0049a30c to 0049a68e has its CatchHandler @ 0049aaf4 */
ppiVar16[-2] = (int *)0x49a311;
CCollisionProperty::RandomPointInBounds
((CCollisionProperty *)ppiVar16[-1],(Vector *)*ppiVar16,
(Vector *)ppiVar16[1],(Vector *)ppiVar16[2]);
pfVar8 = *(float **)param_4;
local_5ac = local_44c - *pfVar8;
local_5a8 = local_448 - pfVar8[1];
fVar1 = pfVar8[2];
ppiVar16[-1] = (int *)&local_5ac;
local_5a4 = local_444 - fVar1;
ppiVar16[-2] = (int *)0x49a35f;
VectorNormalize((Vector *)ppiVar16[-1]);
fVar1 = *(float *)(param_4 + 0x14);
local_5a0 = local_5ac * fVar1;
local_59c = local_5a8 * fVar1;
local_598 = fVar1 * local_5a4;
if (((byte)param_5[0x14d] & 8) != 0) {
ppiVar16[-1] = (int *)param_5;
ppiVar16[-2] = (int *)0x49a3af;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)ppiVar16[-1]);
}
local_594 = *(float *)(param_5 + 0x37c);
local_590 = *(float *)(param_5 + 0x380);
local_58c = *(float *)(param_5 + 900);
iVar10 = *piVar9;
ppiVar16[-1] = piVar9;
pcVar2 = *(code **)(iVar10 + 0x5c);
ppiVar16[-2] = (int *)0x49a3e1;
iVar10 = (*pcVar2)();
ppiVar16[5] = (int *)iVar10;
ppiVar16[3] = (int *)&local_5a0;
ppiVar16[2] = (int *)&local_594;
ppiVar16[6] = (int *)param_4;
ppiVar16[4] = (int *)&vec3_origin;
ppiVar16[1] = (int *)&local_44c;
*ppiVar16 = (int *)&local_44c;
ppiVar16[-1] = (int *)local_5ec;
ppiVar16[-2] = (int *)0x49a41b;
pCVar6 = (CBaseEntity *)
BreakModelCreateSingle
((CBaseEntity *)ppiVar16[-1],(breakmodel_t *)*ppiVar16,
(Vector *)ppiVar16[1],(QAngle *)ppiVar16[2],
(Vector *)ppiVar16[3],(Vector *)ppiVar16[4],(int)ppiVar16[5],
(breakablepropparams_t *)ppiVar16[6]);
if (pCVar6 == (CBaseEntity *)0x0) {
ppiVar16[-1] = (int *)"PropBreakableCreateAll: Could not create model %s\n";
*ppiVar16 = (int *)local_440;
ppiVar16[-2] = (int *)0x49aa5e;
DevWarning((char *)ppiVar16[-1]);
}
else {
if (AllocTempVector()::s_vecTemp == '\0') {
ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
ppiVar16[-2] = (int *)0x49aa2c;
iVar10 = __cxa_guard_acquire();
if (iVar10 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
ppiVar16[-2] = (int *)0x49aa40;
__cxa_guard_release();
}
}
if (AllocTempVector()::s_nIndex == '\0') {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
ppiVar16[-2] = (int *)0x49a9fc;
iVar10 = __cxa_guard_acquire();
if (iVar10 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
AllocTempVector()::s_nIndex = 0;
ppiVar16[-2] = (int *)0x49aa1a;
__cxa_guard_release();
}
}
uVar14 = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
LOCK();
UNLOCK();
iVar10 = uVar14 * 0xc;
AllocTempVector()::s_nIndex = uVar14;
*(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc) =
*(float *)(pCVar6 + 0x1a8) - *(float *)(pCVar6 + 0x19c);
*(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4) =
*(float *)(pCVar6 + 0x1ac) - *(float *)(pCVar6 + 0x1a0);
*(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8) =
*(float *)(pCVar6 + 0x1b0) - *(float *)(pCVar6 + 0x1a4);
local_588 = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
local_584 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4);
local_580 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8);
*ppiVar16 = local_4b4;
ppiVar16[-1] = (int *)&local_594;
ppiVar16[-2] = (int *)0x49a4df;
AngleMatrix((QAngle *)ppiVar16[-1],(matrix3x4_t *)*ppiVar16);
ppiVar16[-2] = (int *)0x49a4f6;
AlignBoxes((matrix3x4_t *)local_4b4,(Vector *)&local_5d0,(Vector *)&local_588);
*ppiVar16 = (int *)&local_594;
ppiVar16[-1] = local_4b4;
ppiVar16[-2] = (int *)0x49a50e;
MatrixAngles((matrix3x4_t *)ppiVar16[-1],(float *)*ppiVar16);
piVar17 = *(int **)(pCVar6 + 0x238);
if (piVar17 != (int *)0x0) {
iVar10 = *piVar17;
ppiVar16[1] = (int *)0x0;
*ppiVar16 = local_54c;
ppiVar16[-1] = piVar17;
pcVar2 = *(code **)(iVar10 + 0xc4);
ppiVar16[-2] = (int *)0x49a535;
(*pcVar2)();
piVar17 = *(int **)(pCVar6 + 0x238);
iVar10 = *piVar17;
ppiVar16[1] = (int *)&local_594;
ppiVar16[2] = (int *)0x1;
*ppiVar16 = local_54c;
ppiVar16[-1] = piVar17;
pcVar2 = *(code **)(iVar10 + 0xbc);
ppiVar16[-2] = (int *)0x49a562;
(*pcVar2)();
}
ppiVar16[-1] = (int *)pCVar6;
*ppiVar16 = (int *)&local_594;
ppiVar16[-2] = (int *)0x49a574;
CBaseEntity::SetAbsAngles((CBaseEntity *)ppiVar16[-1],(QAngle *)*ppiVar16);
if (((byte)local_5ec[0xd4] & 0x10) != 0) {
*ppiVar16 = (int *)0x10;
ppiVar16[-1] = (int *)pCVar6;
ppiVar16[-2] = (int *)0x49a9e8;
CBaseEntity::AddEffects((CBaseEntity *)ppiVar16[-1],(int)*ppiVar16);
}
if (local_5f4 == (CBaseEntity *)0x0) {
local_5f4 = pCVar6;
}
if (param_9 != (CUtlVector *)0x0) {
local_54c[0] = 0xffffffff;
iVar10 = *(int *)pCVar6;
ppiVar16[-1] = (int *)pCVar6;
pcVar2 = *(code **)(iVar10 + 0xc);
ppiVar16[-2] = (int *)0x49a5b4;
puVar11 = (undefined4 *)(*pcVar2)();
local_54c[0] = *puVar11;
ppiVar16[1] = local_54c;
uVar13 = *(undefined4 *)(param_9 + 0xc);
ppiVar16[-1] = (int *)param_9;
*ppiVar16 = (int *)uVar13;
ppiVar16[-2] = (int *)0x49a5db;
CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>::
InsertBefore((CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>
*)ppiVar16[-1],(int)*ppiVar16,(CHandle *)ppiVar16[1]);
}
}
local_5e8 = local_5e8 + 1;
ppiVar16 = ppiVar16 + -1;
}
goto LAB_0049a842;
}
}
}
LAB_0049a838:
local_5f4 = (CBaseEntity *)0x0;
piVar17 = (int *)ppiVar16;
}
else {
ppiVar16 = (int **)&stack0xfffff9c4;
if (*(int *)(param_1 + 0xc) < 1) goto LAB_0049a838;
local_5e8 = 0;
local_5f4 = (CBaseEntity *)0x0;
do {
iVar15 = local_5e8 * 0x42c;
/* try { // try from 00499f59 to 00499fee has its CatchHandler @ 0049aaf4 */
local_640 = (int *)0x499f5c;
iVar4 = (**(code **)(*modelinfo + 0xc))();
if ((0 < iVar4) &&
(((*(int *)(gpGlobals + 0x14) < 2 ||
(*(int *)(breakable_multiplayer._28_4_ + 0x30) == 0)) ||
((iVar4 = *(int *)(*(int *)param_1 + 0x428 + iVar15), iVar4 != 2 &&
((param_8 || (iVar4 != 0)))))))) {
if (((iVar10 != -1) &&
(piVar17 = (int *)&stack0xfffff9c4, iVar10 < nPropBreakablesPerFrameCount)) ||
((param_6 <= local_5e8 && (piVar17 = (int *)&stack0xfffff9c4, param_6 != -1))))
break;
local_640 = (int *)0x499fe1;
AngleMatrix(*(QAngle **)(param_4 + 4),*(Vector **)param_4,(matrix3x4_t *)local_54c);
local_640 = (int *)0x499fef;
CStudioHdr::CStudioHdr((CStudioHdr *)local_4b4);
/* try { // try from 00499ffd to 0049a1b6 has its CatchHandler @ 0049aaf6 */
local_640 = (int *)0x49a000;
iVar4 = (**(code **)(*modelinfo + 8))();
if (iVar4 != 0) {
local_640 = (int *)0x49a016;
psVar5 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
local_640 = (int *)0x49a030;
CStudioHdr::Init((CStudioHdr *)local_4b4,psVar5,(IMDLCache *)0x0);
}
local_5b8[0] = vec3_origin;
nPropBreakablesPerFrameCount = nPropBreakablesPerFrameCount + 1;
local_5b8[1] = DAT_01053d4c;
local_5b8[2] = DAT_01053d50;
pfVar8 = *(float **)(param_4 + 4);
local_5ac = *pfVar8;
local_5a8 = pfVar8[1];
local_5a4 = pfVar8[2];
if ((local_604 == (CBaseAnimating *)0x0) ||
(iVar4 = *(int *)param_1 + iVar15, *(char *)(iVar4 + 0x20c) == '\0')) {
local_640 = (int *)0x49a0ac;
iVar4 = Studio_FindAttachment((CStudioHdr *)local_4b4,"placementOrigin");
local_594 = local_5dc;
local_590 = local_5d8;
local_58c = local_5d4;
if (-1 < iVar4) {
local_640 = (int *)0x49a0f4;
GetAttachmentLocalSpace((CStudioHdr *)local_4b4,iVar4,local_614);
local_640 = (int *)0x49a10e;
MatrixGetColumn(local_614,3,(Vector *)&local_594);
local_594 = local_594 - local_5dc;
local_590 = local_590 - local_5d8;
local_58c = local_58c - local_5d4;
}
pfVar8 = (float *)(*(int *)param_1 + iVar15);
local_588 = *pfVar8 - local_594;
local_584 = pfVar8[1] - local_590;
local_580 = pfVar8[2] - local_58c;
local_640 = (int *)0x49a1b7;
VectorTransform(&local_588,(matrix3x4_t *)local_54c,local_5b8);
}
else if (*(char *)(iVar4 + 0x425) == '\0') {
/* try { // try from 0049a7d2 to 0049a818 has its CatchHandler @ 0049aaf6 */
local_640 = (int *)0x49a7d7;
iVar4 = Studio_FindAttachment((CStudioHdr *)local_4b4,(char *)(iVar4 + 0x20c));
if (0 < iVar4 + 1) {
local_640 = (int *)0x49a801;
(**(code **)(*(int *)local_604 + 0x370))();
local_640 = (int *)0x49a819;
MatrixAngles((matrix3x4_t *)local_54c,&local_5ac);
}
}
else {
/* try { // try from 00499aa7 to 00499cd4 has its CatchHandler @ 0049aaf6 */
local_640 = (int *)0x499aac;
iVar4 = CBaseAnimating::LookupBone(local_604,(char *)(iVar4 + 0x20c));
if (-1 < iVar4) {
local_640 = (int *)0x499adc;
CBaseAnimating::GetBonePosition
(local_604,iVar4,(Vector *)local_5b8,(QAngle *)&local_5ac);
local_640 = (int *)0x499af8;
AngleMatrix((QAngle *)&local_5ac,(Vector *)local_5b8,(matrix3x4_t *)local_54c);
}
}
pfVar8 = *(float **)(param_4 + 8);
local_5a0 = *pfVar8;
local_59c = pfVar8[1];
local_598 = pfVar8[2];
local_640 = (int *)0x499b2b;
lVar18 = (longdouble)VectorNormalize((Vector *)&local_5a0);
fVar1 = (float)lVar18;
local_640 = (int *)0x499b45;
lVar18 = (longdouble)RandomFloat();
local_5a0 = (float)lVar18 + local_5a0;
local_640 = (int *)0x499b77;
lVar18 = (longdouble)RandomFloat();
local_59c = (float)lVar18 + local_59c;
local_640 = (int *)0x499ba9;
lVar18 = (longdouble)RandomFloat();
local_598 = (float)lVar18 + local_598;
local_640 = (int *)0x499bcf;
VectorNormalize((Vector *)&local_5a0);
local_5a0 = local_5a0 * fVar1;
local_59c = local_59c * fVar1;
local_598 = local_598 * fVar1;
if (param_3 != (IPhysicsObject *)0x0) {
local_640 = (int *)0x499c48;
(**(code **)(*(int *)param_3 + 0xdc))();
}
local_5f0 = (Vector *)local_5b8;
iVar4 = 0;
if (local_60c <= *(int *)(local_4b4[0] + 0xe0)) {
iVar4 = local_60c;
}
local_640 = (int *)0x499ca2;
pCVar6 = (CBaseEntity *)
BreakModelCreateSingle
(local_5ec,(breakmodel_t *)(*(int *)param_1 + iVar15),local_5f0,
(QAngle *)&local_5ac,(Vector *)&local_5a0,
*(Vector **)(param_4 + 0xc),iVar4,param_4);
if (pCVar6 != (CBaseEntity *)0x0) {
if ((local_5ec != (CBaseEntity *)0x0) && (((byte)local_5ec[0xd4] & 0x10) != 0)) {
local_640 = (int *)0x499cd5;
CBaseEntity::AddEffects(pCVar6,0x10);
}
iVar4 = *(int *)param_1 + iVar15;
if (*(float *)(iVar4 + 0x41c) != 0.0) {
pfVar8 = *(float **)param_4;
local_594 = local_5b8[0] - *pfVar8;
local_590 = local_5b8[1] - pfVar8[1];
local_58c = local_5b8[2] - pfVar8[2];
if (((local_594 == vec3_origin) && (local_590 == DAT_01053d4c)) &&
(local_58c == DAT_01053d50)) {
/* try { // try from 00499d55 to 00499e02 has its CatchHandler @ 0049ab08 */
local_640 = (int *)0x499d5b;
pfVar7 = (float *)(**(code **)(*(int *)pCVar6 + 0x288))();
local_590 = pfVar7[1] - pfVar8[1];
local_58c = pfVar7[2] - pfVar8[2];
local_594 = *pfVar7 - *pfVar8;
}
local_640 = (int *)0x499da6;
VectorNormalize((Vector *)&local_594);
local_580 = *(float *)(*(int *)param_1 + 0x41c + iVar15);
local_588 = local_594 * local_580;
local_584 = local_590 * local_580;
local_580 = local_580 * local_58c;
local_640 = (int *)0x499e03;
CBaseEntity::ApplyAbsVelocityImpulse(pCVar6,(Vector *)&local_588);
iVar4 = *(int *)param_1 + iVar15;
}
if ((*(char *)(iVar4 + 0x426) != '\0') && (*(int **)(pCVar6 + 0x238) != (int *)0x0))
{
/* try { // try from 00499e2d to 00499e83 has its CatchHandler @ 0049aaf6 */
local_640 = (int *)0x499e30;
(**(code **)(**(int **)(pCVar6 + 0x238) + 0x40))();
}
if (local_5f4 == (CBaseEntity *)0x0) {
local_5f4 = pCVar6;
}
if (param_9 != (CUtlVector *)0x0) {
local_588 = -NAN;
local_640 = (int *)0x499e5d;
pfVar8 = (float *)(**(code **)(*(int *)pCVar6 + 0xc))();
local_588 = *pfVar8;
local_640 = (int *)0x499e84;
CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>::
InsertBefore((CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>
*)param_9,*(int *)(param_9 + 0xc),(CHandle *)&local_588);
}
}
local_640 = (int *)0x499e98;
CStudioHdr::Term((CStudioHdr *)local_4b4);
local_468 = 0;
local_640 = (int *)0x499eaa;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
local_464 = local_474[0];
local_640 = (int *)0x499ec4;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
local_47c = 0;
local_640 = (int *)0x499ed6;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
local_478 = local_488[0];
local_640 = (int *)0x499ef0;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
local_4a0 = 0;
local_640 = (int *)0x499f02;
CUtlMemory<studiohdr_t_const*,int>::Purge
((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
local_49c = local_4ac[0];
local_640 = (int *)0x499f16;
CUtlMemory<studiohdr_t_const*,int>::Purge
((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
}
local_5e8 = local_5e8 + 1;
piVar17 = (int *)&stack0xfffff9c4;
} while (local_5e8 < *(int *)(param_1 + 0xc));
}
LAB_0049a842:
*piVar17 = (int)local_51c;
piVar17[-1] = 0x49a856;
CStudioHdr::Term((CStudioHdr *)*piVar17);
*piVar17 = (int)local_4dc;
local_4d0 = 0;
piVar17[-1] = 0x49a868;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
*piVar17 = (int)local_4dc;
local_4cc = local_4dc[0];
piVar17[-1] = 0x49a882;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
*piVar17 = (int)local_4f0;
local_4e4 = 0;
piVar17[-1] = 0x49a894;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
*piVar17 = (int)local_4f0;
local_4e0 = local_4f0[0];
piVar17[-1] = 0x49a8ae;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
*piVar17 = (int)local_514;
local_508 = 0;
piVar17[-1] = 0x49a8c0;
CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*piVar17);
*piVar17 = (int)local_514;
local_504 = local_514[0];
piVar17[-1] = 0x49a8d4;
CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*piVar17);
goto LAB_0049a8da;
}
}
}
else {
if (*(int *)(gpGlobals + 4) != nFrameNumber) {
nPropBreakablesPerFrameCount = 0;
nFrameNumber = *(int *)(gpGlobals + 4);
}
if (nPropBreakablesPerFrameCount < iVar10) goto LAB_004998dc;
}
local_5f4 = (CBaseEntity *)0x0;
LAB_0049a8da:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(undefined4 *)((int)piVar17 + -4) = 0x49aad5;
__stack_chk_fail();
}
return local_5f4;
}
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.