PropBreakableCreateAll
0x0049ab20 · 4339 bytes · __cdecl
_Z22PropBreakableCreateAlliP14IPhysicsObjectRK21breakablepropparams_tP11CBaseEntityibb
Decompiled
undefined (7 params)
/* WARNING: Removing unreachable block (ram,0x0049bc71) */
/* WARNING: Removing unreachable block (ram,0x0049ba38) */
/* WARNING: Removing unreachable block (ram,0x0049b7dd) */
/* WARNING: Removing unreachable block (ram,0x0049bc78) */
/* PropBreakableCreateAll(int, IPhysicsObject*, breakablepropparams_t const&, CBaseEntity*, int,
bool, bool) */
void PropBreakableCreateAll
(int param_1,IPhysicsObject *param_2,breakablepropparams_t *param_3,
CBaseEntity *param_4,int param_5,bool param_6,bool param_7)
{
float fVar1;
int *piVar2;
code *pcVar3;
char cVar4;
int iVar5;
studiohdr_t *psVar6;
CBaseEntity *this;
float *pfVar7;
float *pfVar8;
int *piVar9;
int iVar10;
undefined1 *puVar11;
undefined4 uVar12;
undefined4 *puVar13;
uint uVar14;
int iVar15;
int **ppiVar16;
int in_GS_OFFSET;
longdouble lVar17;
int aiStack_658 [2];
int *local_650;
matrix3x4_t *local_624;
int local_61c;
CBaseAnimating *local_618;
int local_610;
CBaseEntity *local_60c;
Vector *local_608;
int local_604;
undefined1 *local_600 [4];
float local_5f0;
float local_5ec;
float local_5e8;
float local_5e4;
float local_5e0;
float local_5dc;
undefined4 local_5d8 [3];
float local_5cc [3];
float local_5c0;
float local_5bc;
float local_5b8;
float local_5b4;
float local_5b0;
float local_5ac;
float local_5a8;
float local_5a4;
float local_5a0;
float local_59c;
float local_598;
float local_594;
int local_590 [5];
matrix3x4_t local_57c [48];
matrix3x4_t local_54c [48];
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;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
iVar10 = *(int *)(props_break_max_pieces_perframe._28_4_ + 0x30);
if (iVar10 != -1) {
if (*(int *)(gpGlobals + 4) != nFrameNumber) {
nPropBreakablesPerFrameCount = 0;
nFrameNumber = *(int *)(gpGlobals + 4);
}
piVar9 = (int *)&stack0xfffff9b4;
if (iVar10 <= nPropBreakablesPerFrameCount) goto LAB_0049ab96;
}
iVar5 = param_5;
if ((((!param_6) && (iVar15 = *(int *)(props_break_max_pieces._28_4_ + 0x30), iVar15 != -1)) &&
(iVar5 = iVar15, param_5 != -1)) && (param_5 <= iVar15)) {
iVar5 = param_5;
}
param_5 = iVar5;
local_650 = (int *)0x49abf6;
cVar4 = PropBreakableCapEdictsOnCreateAll(param_1,param_2,param_3,param_4,param_5);
if (cVar4 == '\0') {
local_650 = (int *)0x49b3ac;
DevMsg("Failed to create PropBreakable: would exceed MAX_EDICTS\n");
piVar9 = (int *)&stack0xfffff9b4;
}
else {
local_650 = (int *)0x49ac0f;
iVar5 = (**(code **)(*modelinfo + 0x18))();
piVar9 = (int *)&stack0xfffff9b4;
if (iVar5 != 0) {
local_60c = param_4;
if (param_2 != (IPhysicsObject *)0x0) {
local_650 = (int *)0x49ac2b;
local_60c = (CBaseEntity *)(**(code **)(*(int *)param_2 + 0x48))();
}
if (local_60c == (CBaseEntity *)0x0) {
local_618 = (CBaseAnimating *)0x0;
local_61c = 0;
}
else {
local_650 = (int *)0x49ac4a;
local_618 = (CBaseAnimating *)(**(code **)(*(int *)local_60c + 0xf0))();
if (local_618 == (CBaseAnimating *)0x0) {
local_61c = 0;
}
else {
local_61c = *(int *)(local_618 + 0x458);
}
}
local_650 = (int *)0x49ac72;
CStudioHdr::CStudioHdr(local_51c);
/* try { // try from 0049ac80 to 0049ad33 has its CatchHandler @ 0049bcd1 */
local_650 = (int *)0x49ac83;
iVar5 = (**(code **)(*modelinfo + 8))();
if (iVar5 != 0) {
local_650 = (int *)0x49ac99;
psVar6 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
local_650 = (int *)0x49acb3;
CStudioHdr::Init(local_51c,psVar6,(IMDLCache *)0x0);
}
local_5f0 = vec3_origin;
local_5ec = DAT_01053d4c;
local_5e8 = DAT_01053d50;
local_650 = (int *)0x49acea;
iVar5 = Studio_FindAttachment(local_51c,"placementOrigin");
if (iVar5 < 0) {
/* try { // try from 0049bc37 to 0049bc3b has its CatchHandler @ 0049bcd1 */
local_650 = (int *)0x49bc3c;
AngleMatrix((QAngle *)&vec3_angle,local_57c);
}
else {
local_650 = (int *)0x49ad14;
GetAttachmentLocalSpace(local_51c,iVar5,local_57c);
local_650 = (int *)0x49ad34;
MatrixGetColumn(local_57c,3,(Vector *)&local_5f0);
}
local_624 = local_57c;
local_590[0] = 0;
local_590[1] = 0;
local_590[2] = 0;
local_590[3] = 0;
local_590[4] = 0;
/* try { // try from 0049ad85 to 0049ad89 has its CatchHandler @ 0049bccf */
local_650 = (int *)0x49ad8a;
BreakModelList((CUtlVector *)local_590,param_1,*(float *)(param_3 + 0x14),
*(int *)(param_3 + 0x18));
if (local_590[3] == 0) {
ppiVar16 = (int **)&stack0xfffff9b4;
if (param_4 != (CBaseEntity *)0x0) {
local_650 = (int *)0x49b5a8;
piVar9 = (int *)__dynamic_cast();
ppiVar16 = (int **)&stack0xfffff9b4;
if (piVar9 != (int *)0x0) {
/* try { // try from 0049b5c7 to 0049b5c9 has its CatchHandler @ 0049bccf */
local_650 = (int *)0x49b5ca;
(**(code **)(*piVar9 + 0x54))();
ppiVar16 = &local_650;
/* try { // try from 0049b5e0 to 0049b5e2 has its CatchHandler @ 0049bc85 */
if ((local_600[0] != (undefined1 *)0x0) &&
(local_650 = piVar9, iVar10 = (**(code **)(*piVar9 + 100))(), ppiVar16 = &local_650,
iVar10 != 0)) {
local_610 = 0;
ppiVar16 = &local_650;
while( true ) {
iVar10 = *piVar9;
*ppiVar16 = piVar9;
pcVar3 = *(code **)(iVar10 + 100);
ppiVar16[-1] = (int *)0x49b92c;
iVar10 = (*pcVar3)();
if ((iVar10 <= local_610) || ((param_5 <= local_610 && (param_5 != -1)))) break;
iVar10 = *piVar9;
*ppiVar16 = piVar9;
pcVar3 = *(code **)(iVar10 + 0x6c);
ppiVar16[-1] = (int *)0x49b955;
iVar5 = (*pcVar3)();
iVar10 = *piVar9;
ppiVar16[1] = piVar9;
*ppiVar16 = (int *)local_600;
pcVar3 = *(code **)(iVar10 + 0x54);
ppiVar16[-1] = (int *)0x49b96f;
(*pcVar3)();
ppiVar16[1] = (int *)iVar5;
ppiVar16[-1] = (int *)g_PropDataSystem;
puVar11 = &DAT_00d539c2;
if (local_600[0] != (undefined1 *)0x0) {
puVar11 = local_600[0];
}
*ppiVar16 = (int *)puVar11;
ppiVar16[-2] = (int *)0x49b996;
uVar12 = CPropData::GetRandomChunkModel
((CPropData *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
*ppiVar16 = (int *)uVar12;
ppiVar16[1] = (int *)0x200;
ppiVar16[-1] = (int *)local_440;
ppiVar16[-2] = (int *)0x49b9b0;
V_strncpy((char *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
*ppiVar16 = (int *)0x41200000;
ppiVar16[-1] = (int *)0x40a00000;
local_34 = 0x3f800000;
ppiVar16[-2] = (int *)0x49b9cb;
lVar17 = (longdouble)RandomFloat();
local_3c = 0;
local_38 = 0;
local_40 = (float)lVar17;
local_2c = 1;
local_30 = *(undefined4 *)(param_3 + 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 *)0x49bb6c;
iVar10 = __cxa_guard_acquire();
if (iVar10 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
ppiVar16[-2] = (int *)0x49bb80;
__cxa_guard_release();
}
}
if (AllocTempVector()::s_nIndex == '\0') {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
ppiVar16[-2] = (int *)0x49bb34;
iVar10 = __cxa_guard_acquire();
if (iVar10 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
AllocTempVector()::s_nIndex = 0;
ppiVar16[-2] = (int *)0x49bb52;
__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_4 + 0x1a8) - *(float *)(param_4 + 0x19c);
*(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4) =
*(float *)(param_4 + 0x1ac) - *(float *)(param_4 + 0x1a0);
*(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8) =
*(float *)(param_4 + 0x1b0) - *(float *)(param_4 + 0x1a4);
local_5e4 = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
local_5e0 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4);
local_5dc = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8);
if (local_5e4 < local_5e0) {
if (local_5dc <= local_5e4) goto LAB_0049bb00;
pfVar8 = local_5cc;
puVar13 = local_5d8;
}
else if (local_5dc <= local_5e0) {
LAB_0049bb00:
pfVar8 = local_5cc + 2;
puVar13 = local_5d8 + 2;
}
else {
pfVar8 = local_5cc + 1;
puVar13 = local_5d8 + 1;
}
local_608 = (Vector *)local_5cc;
local_5d8[0] = 0;
local_5d8[1] = 0;
local_5d8[2] = 0;
local_5cc[0] = 1.0;
*puVar13 = 0x3f000000;
local_5cc[1] = 1.0;
local_5cc[2] = 1.0;
*pfVar8 = 0.5;
*ppiVar16 = local_5d8;
ppiVar16[2] = (int *)&local_44c;
ppiVar16[1] = (int *)local_608;
ppiVar16[-1] = (int *)(param_4 + 0x194);
/* try { // try from 0049b69c to 0049bc15 has its CatchHandler @ 0049bccf */
ppiVar16[-2] = (int *)0x49b6a1;
CCollisionProperty::RandomPointInBounds
((CCollisionProperty *)ppiVar16[-1],(Vector *)*ppiVar16,
(Vector *)ppiVar16[1],(Vector *)ppiVar16[2]);
pfVar8 = *(float **)param_3;
local_5c0 = local_44c - *pfVar8;
local_5bc = local_448 - pfVar8[1];
fVar1 = pfVar8[2];
ppiVar16[-1] = (int *)&local_5c0;
local_5b8 = local_444 - fVar1;
ppiVar16[-2] = (int *)0x49b6ef;
VectorNormalize((Vector *)ppiVar16[-1]);
fVar1 = *(float *)(param_3 + 0x14);
local_5b4 = local_5c0 * fVar1;
local_5b0 = local_5bc * fVar1;
local_5ac = fVar1 * local_5b8;
if (((byte)param_4[0x14d] & 8) != 0) {
ppiVar16[-1] = (int *)param_4;
ppiVar16[-2] = (int *)0x49b73f;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)ppiVar16[-1]);
}
local_5a8 = *(float *)(param_4 + 0x37c);
local_5a4 = *(float *)(param_4 + 0x380);
local_5a0 = *(float *)(param_4 + 900);
iVar10 = *piVar9;
ppiVar16[-1] = piVar9;
pcVar3 = *(code **)(iVar10 + 0x5c);
ppiVar16[-2] = (int *)0x49b771;
iVar10 = (*pcVar3)();
ppiVar16[5] = (int *)iVar10;
ppiVar16[3] = (int *)&local_5b4;
ppiVar16[2] = (int *)&local_5a8;
ppiVar16[6] = (int *)param_3;
ppiVar16[4] = (int *)&vec3_origin;
ppiVar16[1] = (int *)&local_44c;
*ppiVar16 = (int *)&local_44c;
ppiVar16[-1] = (int *)local_60c;
ppiVar16[-2] = (int *)0x49b7ab;
iVar10 = 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 (iVar10 == 0) {
ppiVar16[-1] = (int *)"PropBreakableCreateAll: Could not create model %s\n";
*ppiVar16 = (int *)local_440;
ppiVar16[-2] = (int *)0x49bc16;
DevWarning((char *)ppiVar16[-1]);
}
else {
if (AllocTempVector()::s_vecTemp == '\0') {
ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
ppiVar16[-2] = (int *)0x49bbdc;
iVar5 = __cxa_guard_acquire();
if (iVar5 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
ppiVar16[-2] = (int *)0x49bbf0;
__cxa_guard_release();
}
}
if (AllocTempVector()::s_nIndex == '\0') {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
ppiVar16[-2] = (int *)0x49bbac;
iVar5 = __cxa_guard_acquire();
if (iVar5 != 0) {
ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
AllocTempVector()::s_nIndex = 0;
ppiVar16[-2] = (int *)0x49bbca;
__cxa_guard_release();
}
}
uVar14 = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
LOCK();
UNLOCK();
iVar5 = uVar14 * 0xc;
AllocTempVector()::s_nIndex = uVar14;
*(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc) =
*(float *)(iVar10 + 0x1a8) - *(float *)(iVar10 + 0x19c);
*(float *)(AllocTempVector()::s_vecTemp + iVar5 + 4) =
*(float *)(iVar10 + 0x1ac) - *(float *)(iVar10 + 0x1a0);
*(float *)(AllocTempVector()::s_vecTemp + iVar5 + 8) =
*(float *)(iVar10 + 0x1b0) - *(float *)(iVar10 + 0x1a4);
local_59c = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
local_598 = *(float *)(AllocTempVector()::s_vecTemp + iVar5 + 4);
local_594 = *(float *)(AllocTempVector()::s_vecTemp + iVar5 + 8);
*ppiVar16 = local_4b4;
ppiVar16[-1] = (int *)&local_5a8;
ppiVar16[-2] = (int *)0x49b86f;
AngleMatrix((QAngle *)ppiVar16[-1],(matrix3x4_t *)*ppiVar16);
ppiVar16[-2] = (int *)0x49b886;
AlignBoxes((matrix3x4_t *)local_4b4,(Vector *)&local_5e4,(Vector *)&local_59c);
*ppiVar16 = (int *)&local_5a8;
ppiVar16[-1] = local_4b4;
ppiVar16[-2] = (int *)0x49b89e;
MatrixAngles((matrix3x4_t *)ppiVar16[-1],(float *)*ppiVar16);
piVar2 = *(int **)(iVar10 + 0x238);
if (piVar2 != (int *)0x0) {
iVar5 = *piVar2;
ppiVar16[1] = (int *)0x0;
*ppiVar16 = (int *)local_54c;
ppiVar16[-1] = piVar2;
pcVar3 = *(code **)(iVar5 + 0xc4);
ppiVar16[-2] = (int *)0x49b8c5;
(*pcVar3)();
piVar2 = *(int **)(iVar10 + 0x238);
iVar5 = *piVar2;
ppiVar16[1] = (int *)&local_5a8;
ppiVar16[2] = (int *)0x1;
*ppiVar16 = (int *)local_54c;
ppiVar16[-1] = piVar2;
pcVar3 = *(code **)(iVar5 + 0xbc);
ppiVar16[-2] = (int *)0x49b8f2;
(*pcVar3)();
}
ppiVar16[-1] = (int *)iVar10;
*ppiVar16 = (int *)&local_5a8;
ppiVar16[-2] = (int *)0x49b904;
CBaseEntity::SetAbsAngles((CBaseEntity *)ppiVar16[-1],(QAngle *)*ppiVar16);
if (((byte)local_60c[0xd4] & 0x10) != 0) {
*ppiVar16 = (int *)0x10;
ppiVar16[-1] = (int *)iVar10;
ppiVar16[-2] = (int *)0x49bb98;
CBaseEntity::AddEffects((CBaseEntity *)ppiVar16[-1],(int)*ppiVar16);
}
}
local_610 = local_610 + 1;
ppiVar16 = ppiVar16 + -1;
}
}
}
}
}
else {
ppiVar16 = (int **)&stack0xfffff9b4;
if (0 < local_590[3]) {
local_604 = 0;
do {
iVar15 = local_604 * 0x42c;
/* try { // try from 0049b134 to 0049b1ce has its CatchHandler @ 0049bccf */
local_650 = (int *)0x49b137;
iVar5 = (**(code **)(*modelinfo + 0xc))();
if (iVar5 < 1) {
/* try { // try from 0049b471 to 0049b475 has its CatchHandler @ 0049bccf */
local_650 = (int *)0x49b476;
Warning();
}
else if (((*(int *)(gpGlobals + 0x14) < 2) ||
(*(int *)(breakable_multiplayer._28_4_ + 0x30) == 0)) ||
((iVar5 = *(int *)(local_590[0] + 0x428 + iVar15), iVar5 != 2 &&
((param_7 || (iVar5 != 0)))))) {
if (((iVar10 != -1) &&
(ppiVar16 = (int **)&stack0xfffff9b4, iVar10 < nPropBreakablesPerFrameCount)) ||
((param_5 <= local_604 && (ppiVar16 = (int **)&stack0xfffff9b4, param_5 != -1))))
break;
local_650 = (int *)0x49b1c1;
AngleMatrix(*(QAngle **)(param_3 + 4),*(Vector **)param_3,local_54c);
local_650 = (int *)0x49b1cf;
CStudioHdr::CStudioHdr((CStudioHdr *)local_4b4);
/* try { // try from 0049b1dd to 0049b398 has its CatchHandler @ 0049bce7 */
local_650 = (int *)0x49b1e0;
iVar5 = (**(code **)(*modelinfo + 8))();
if (iVar5 != 0) {
local_650 = (int *)0x49b1f6;
psVar6 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
local_650 = (int *)0x49b210;
CStudioHdr::Init((CStudioHdr *)local_4b4,psVar6,(IMDLCache *)0x0);
}
local_5cc[0] = vec3_origin;
nPropBreakablesPerFrameCount = nPropBreakablesPerFrameCount + 1;
local_5cc[1] = DAT_01053d4c;
local_5cc[2] = DAT_01053d50;
pfVar8 = *(float **)(param_3 + 4);
local_5c0 = *pfVar8;
local_5bc = pfVar8[1];
local_5b8 = pfVar8[2];
if ((local_618 == (CBaseAnimating *)0x0) ||
(iVar5 = local_590[0] + iVar15, *(char *)(iVar5 + 0x20c) == '\0')) {
local_650 = (int *)0x49b28a;
iVar5 = Studio_FindAttachment((CStudioHdr *)local_4b4,"placementOrigin");
local_5a8 = local_5f0;
local_5a4 = local_5ec;
local_5a0 = local_5e8;
if (-1 < iVar5) {
local_650 = (int *)0x49b2d2;
GetAttachmentLocalSpace((CStudioHdr *)local_4b4,iVar5,local_624);
local_650 = (int *)0x49b2ec;
MatrixGetColumn(local_624,3,(Vector *)&local_5a8);
local_5a8 = local_5a8 - local_5f0;
local_5a4 = local_5a4 - local_5ec;
local_5a0 = local_5a0 - local_5e8;
}
pfVar8 = (float *)(local_590[0] + iVar15);
local_59c = *pfVar8 - local_5a8;
local_598 = pfVar8[1] - local_5a4;
local_594 = pfVar8[2] - local_5a0;
local_650 = (int *)0x49b399;
VectorTransform(&local_59c,local_54c,local_5cc);
}
else if (*(char *)(iVar5 + 0x425) == '\0') {
/* try { // try from 0049b3fa to 0049b43c has its CatchHandler @ 0049bce7 */
local_650 = (int *)0x49b3ff;
iVar5 = Studio_FindAttachment((CStudioHdr *)local_4b4,(char *)(iVar5 + 0x20c));
if (0 < iVar5 + 1) {
local_650 = (int *)0x49b425;
(**(code **)(*(int *)local_618 + 0x370))();
local_650 = (int *)0x49b43d;
MatrixAngles(local_54c,&local_5c0);
}
}
else {
/* try { // try from 0049adcf to 0049af02 has its CatchHandler @ 0049bce7 */
local_650 = (int *)0x49add4;
iVar5 = CBaseAnimating::LookupBone(local_618,(char *)(iVar5 + 0x20c));
if (-1 < iVar5) {
local_650 = (int *)0x49ae08;
CBaseAnimating::GetBonePosition
(local_618,iVar5,(Vector *)local_5cc,(QAngle *)&local_5c0);
local_650 = (int *)0x49ae24;
AngleMatrix((QAngle *)&local_5c0,(Vector *)local_5cc,local_54c);
}
}
local_608 = (Vector *)local_5cc;
pfVar8 = *(float **)(param_3 + 8);
local_5b4 = *pfVar8;
local_5b0 = pfVar8[1];
local_5ac = pfVar8[2];
if (param_2 != (IPhysicsObject *)0x0) {
local_650 = (int *)0x49ae78;
(**(code **)(*(int *)param_2 + 0xdc))();
}
iVar5 = 0;
if (local_61c <= *(int *)(local_4b4[0] + 0xe0)) {
iVar5 = local_61c;
}
local_650 = (int *)0x49aed0;
this = (CBaseEntity *)
BreakModelCreateSingle
(local_60c,(breakmodel_t *)(local_590[0] + iVar15),local_608,
(QAngle *)&local_5c0,(Vector *)&local_5b4,
*(Vector **)(param_3 + 0xc),iVar5,param_3);
if (this != (CBaseEntity *)0x0) {
if ((local_60c != (CBaseEntity *)0x0) && (((byte)local_60c[0xd4] & 0x10) != 0)) {
local_650 = (int *)0x49af03;
CBaseEntity::AddEffects(this,0x10);
}
iVar5 = local_590[0] + iVar15;
if (*(float *)(iVar5 + 0x41c) != 0.0) {
pfVar8 = *(float **)param_3;
local_5a8 = local_5cc[0] - *pfVar8;
local_5a4 = local_5cc[1] - pfVar8[1];
local_5a0 = local_5cc[2] - pfVar8[2];
if (((local_5a8 == vec3_origin) && (local_5a4 == DAT_01053d4c)) &&
(local_5a0 == DAT_01053d50)) {
/* try { // try from 0049af81 to 0049b030 has its CatchHandler @ 0049bcd5 */
local_650 = (int *)0x49af87;
pfVar7 = (float *)(**(code **)(*(int *)this + 0x288))();
local_5a4 = pfVar7[1] - pfVar8[1];
local_5a0 = pfVar7[2] - pfVar8[2];
local_5a8 = *pfVar7 - *pfVar8;
}
local_650 = (int *)0x49afd6;
VectorNormalize((Vector *)&local_5a8);
local_594 = *(float *)(local_590[0] + 0x41c + iVar15);
local_59c = local_5a8 * local_594;
local_598 = local_5a4 * local_594;
local_594 = local_594 * local_5a0;
local_650 = (int *)0x49b031;
CBaseEntity::ApplyAbsVelocityImpulse(this,(Vector *)&local_59c);
iVar5 = local_590[0] + iVar15;
}
if ((*(char *)(iVar5 + 0x426) != '\0') && (*(int **)(this + 0x238) != (int *)0x0)) {
/* try { // try from 0049b059 to 0049b05b has its CatchHandler @ 0049bce7 */
local_650 = (int *)0x49b05c;
(**(code **)(**(int **)(this + 0x238) + 0x40))();
}
}
local_650 = (int *)0x49b070;
CStudioHdr::Term((CStudioHdr *)local_4b4);
local_468 = 0;
local_650 = (int *)0x49b082;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
local_464 = local_474[0];
local_650 = (int *)0x49b09c;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
local_47c = 0;
local_650 = (int *)0x49b0ae;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
local_478 = local_488[0];
local_650 = (int *)0x49b0c8;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
local_4a0 = 0;
local_650 = (int *)0x49b0da;
CUtlMemory<studiohdr_t_const*,int>::Purge
((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
local_49c = local_4ac[0];
local_650 = (int *)0x49b0ee;
CUtlMemory<studiohdr_t_const*,int>::Purge
((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
}
local_604 = local_604 + 1;
ppiVar16 = (int **)&stack0xfffff9b4;
} while (local_604 < local_590[3]);
}
}
local_590[3] = 0;
*ppiVar16 = local_590;
ppiVar16[-1] = (int *)0x49b4ae;
CUtlMemory<breakmodel_t,int>::Purge((CUtlMemory<breakmodel_t,int> *)*ppiVar16);
local_590[4] = local_590[0];
*ppiVar16 = local_590;
ppiVar16[-1] = (int *)0x49b4c8;
CUtlMemory<breakmodel_t,int>::Purge((CUtlMemory<breakmodel_t,int> *)*ppiVar16);
*ppiVar16 = (int *)local_51c;
ppiVar16[-1] = (int *)0x49b4d6;
CStudioHdr::Term((CStudioHdr *)*ppiVar16);
*ppiVar16 = local_4dc;
local_4d0 = 0;
ppiVar16[-1] = (int *)0x49b4e8;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
*ppiVar16 = local_4dc;
local_4cc = local_4dc[0];
ppiVar16[-1] = (int *)0x49b502;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
*ppiVar16 = local_4f0;
local_4e4 = 0;
ppiVar16[-1] = (int *)0x49b514;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
*ppiVar16 = local_4f0;
local_4e0 = local_4f0[0];
ppiVar16[-1] = (int *)0x49b52e;
CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
*ppiVar16 = local_514;
local_508 = 0;
ppiVar16[-1] = (int *)0x49b540;
CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*ppiVar16);
*ppiVar16 = local_514;
local_504 = local_514[0];
ppiVar16[-1] = (int *)0x49b554;
CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*ppiVar16);
piVar9 = (int *)ppiVar16;
}
}
LAB_0049ab96:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(undefined1 **)((int)piVar9 + -4) = &LAB_0049bc85;
__stack_chk_fail();
}
return;
}
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.