SpitterAttack::Update
0x00ada210 · 4792 bytes · __thiscall
_ZN13SpitterAttack6UpdateEP7Spitterf
Decompiled
undefined (3 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* SpitterAttack::Update(Spitter*, float) */
SpitterAttack * __thiscall SpitterAttack::Update(SpitterAttack *this,Spitter *param_1,float param_2)
{
Spitter *pSVar1;
code *pcVar2;
char cVar3;
Spitter SVar4;
int *piVar5;
int *piVar6;
int *piVar7;
uint uVar8;
SpitterPrepareAmbush *pSVar9;
uint *puVar10;
undefined4 *puVar11;
CBaseEntity *pCVar12;
int iVar13;
int iVar14;
int iVar15;
Vector *pVVar16;
CTerrorPlayer *pCVar17;
float fVar18;
uint uVar19;
undefined *puVar20;
float *pfVar21;
int *piVar22;
longdouble lVar23;
int *local_74;
float local_70;
int local_68;
int local_64;
int local_54;
int local_50;
int local_4c;
int local_48;
int local_44;
int local_40;
int local_3c;
int local_38;
undefined **local_34;
float local_30;
CBaseEntity *local_2c;
undefined4 local_28;
undefined4 local_24;
undefined4 local_20;
pfVar21 = (float *)&stack0xffffff54;
piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9b4))();
piVar6 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
piVar7 = (int *)(**(code **)(*(int *)param_2 + 0x9bc))();
if (((param_1[0x4848] != (Spitter)0x0) && (*(float *)(param_1 + 0x4854) <= 0.0)) &&
(((uVar8 = *(uint *)((int)param_2 + 0x4324), uVar8 == 0xffffffff ||
(((puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 == (undefined *)0xfffffffc ||
(*(uint *)(puVar20 + 8) != uVar8 >> 0xc)) || (*(int **)(puVar20 + 4) == (int *)0x0)))) ||
(cVar3 = (**(code **)(**(int **)(puVar20 + 4) + 300))(), cVar3 == '\0')))) {
param_1[0x4848] = (Spitter)0x0;
*(undefined4 *)((int)param_2 + 0x4324) = 0xffffffff;
}
(**(code **)(*(int *)param_2 + 0x99c))();
if (param_1[0x4848] == (Spitter)0x0) {
uVar8 = *(uint *)(param_1 + 0x34);
pCVar17 = (CTerrorPlayer *)0x0;
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
pCVar17 = *(CTerrorPlayer **)(puVar20 + 4);
}
piVar22 = (int *)BossZombiePlayerBot::ChooseVictim
((BossZombiePlayerBot *)param_2,pCVar17,0,(CBaseCombatCharacter *)0x0
);
if (piVar22 == (int *)0x0) {
*(undefined4 *)(param_1 + 0x34) = 0xffffffff;
goto LAB_00ada2a7;
}
puVar10 = (uint *)(**(code **)(*piVar22 + 0xc))();
uVar8 = *puVar10;
*(uint *)(param_1 + 0x34) = uVar8;
}
else {
uVar8 = *(uint *)(param_1 + 0x34);
}
if (uVar8 == 0xffffffff) {
LAB_00ada2a7:
(**(code **)(*piVar6 + 0xe0))();
pSVar9 = ::operator_new(0x481c);
/* try { // try from 00ada2c6 to 00ada2ca has its CatchHandler @ 00adb598 */
SpitterPrepareAmbush::SpitterPrepareAmbush(pSVar9);
*(undefined4 *)this = 1;
*(SpitterPrepareAmbush **)(this + 4) = pSVar9;
*(undefined4 *)(this + 8) = 0;
return this;
}
uVar19 = uVar8 & 0xfff;
piVar22 = (int *)(g_pEntityList + uVar19 * 0x10 + 4);
if (((piVar22 == (int *)0x0) || (*(uint *)(g_pEntityList + uVar19 * 0x10 + 8) != uVar8 >> 0xc)) ||
(*(int *)(g_pEntityList + uVar19 * 0x10 + 4) == 0)) goto LAB_00ada2a7;
if (*(int *)(param_1 + 0x443c) < 1) {
LAB_00ada379:
if ((int *)*piVar22 == (int *)0x0) goto LAB_00adabf2;
puVar11 = (undefined4 *)(**(code **)(*(int *)*piVar22 + 0xc))();
*(undefined4 *)((int)param_2 + 0x4324) = *puVar11;
}
else {
piVar22 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
cVar3 = (**(code **)(*piVar22 + 0x114))();
if (cVar3 != '\0') {
iVar13 = (int)param_2 + 0x4028;
local_34 = &PTR_operator___00d20e60;
local_30 = (float)iVar13;
local_28 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
pCVar12 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
iVar15 = (**(code **)(*(int *)pCVar12 + 0x14c))();
local_24 = 0x3f800000;
if (iVar15 != 0) {
local_24 = *(undefined4 *)(iVar15 + 0x1cec);
}
cVar3 = (**(code **)(*(int *)pCVar12 + 0x16c))();
local_2c = (CBaseEntity *)0x0;
if (cVar3 != '\0') {
local_2c = pCVar12;
}
iVar15 = CBaseEntity::GetTeamNumber(pCVar12);
local_20 = 9;
if (iVar15 == 3) {
local_20 = (**(code **)(*(int *)pCVar12 + 0x544))();
}
uVar8 = *(uint *)(param_1 + 0x34);
local_64 = 0;
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
local_64 = *(int *)(puVar20 + 4);
}
pSVar1 = param_1 + 0x38;
piVar5 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
cVar3 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
if (((cVar3 == '\0') && (cVar3 = (**(code **)(*piVar5 + 0xd4))(), cVar3 == '\0')) &&
((cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0' &&
(cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0')))) {
(**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
piVar6 = (int *)&stack0xffffff50;
local_4c = local_40;
local_48 = local_3c;
local_44 = local_38;
pcVar2 = *(code **)(*piVar5 + 0x158);
(**(code **)(*piVar5 + 300))();
cVar3 = (*pcVar2)();
if (cVar3 != '\0') {
if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
pVVar16 = (Vector *)(**(code **)(*piVar5 + 300))();
cVar3 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar16,(Vector *)&local_40);
if (cVar3 == '\0') goto LAB_00adb469;
}
(**(code **)(*piVar5 + 0x120))();
(**(code **)(*piVar5 + 0xb4))();
piVar5 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc4))();
(**(code **)(*piVar5 + 0xc4))();
(**(code **)(*(int *)(param_1 + 0x38) + 0x48))();
param_1[0x4844] = (Spitter)0x1;
goto LAB_00ada9d4;
}
LAB_00adb469:
piVar5 = &local_4c;
piVar6 = (int *)&stack0xffffff50;
}
else {
piVar5 = (int *)0x0;
piVar6 = (int *)&stack0xffffff54;
}
local_54 = 0;
local_50 = 0;
if (_towlower == 0) {
local_38 = 0;
}
else {
*piVar6 = _towlower;
piVar6[1] = (int)&local_54;
piVar6[0xb] = (int)"ChasePath::Update";
piVar6[10] = (int)"NextBot";
piVar6[9] = (int)"(%s)%s";
piVar6[8] = (int)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::tm_fmt
;
piVar6[7] = 0x68;
piVar6[6] = (int)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
piVar6[5] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
piVar6[2] = 0;
pcVar2 = *(code **)(_towlower + 0x50);
piVar6[-1] = 0xada900;
(*pcVar2)();
local_38 = _towlower;
}
iVar15 = _DAT_0105db00;
local_40 = local_54;
local_3c = local_50;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 00ada92f to 00ada933 has its CatchHandler @ 00adb574 */
piVar6[-1] = 0xada934;
iVar14 = ThreadGetCurrentId();
if (iVar15 == iVar14) {
if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
piVar6[4] = 4;
piVar6[3] = (int)"NextBot";
piVar6[2] = 0;
piVar6[1] = (int)"ChasePath::Update";
*piVar6 = (int)_DAT_0105d15c;
/* try { // try from 00adb340 to 00adb363 has its CatchHandler @ 00adb574 */
piVar6[-1] = 0xadb345;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*piVar6,piVar6[1],(char *)piVar6[2],piVar6[3]);
}
puVar10 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
*puVar10 = *puVar10 | 4;
*piVar6 = (int)_DAT_0105d15c;
piVar6[-1] = 0xadb364;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
piVar6[4] = (int)piVar5;
piVar6[3] = (int)&local_34;
piVar6[1] = iVar13;
*piVar6 = (int)pSVar1;
piVar6[2] = local_64;
/* try { // try from 00ada959 to 00ada969 has its CatchHandler @ 00adb588 */
piVar6[-1] = 0xada95e;
ChasePath::RefreshPath
((ChasePath *)*piVar6,(INextBot *)piVar6[1],(CBaseEntity *)piVar6[2],
(IPathCost *)piVar6[3],(Vector *)piVar6[4]);
piVar6[1] = iVar13;
*piVar6 = (int)pSVar1;
piVar6[-1] = 0xada96a;
PathFollower::Update((PathFollower *)*piVar6,(INextBot *)piVar6[1]);
iVar15 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
piVar6[-1] = 0xada987;
iVar14 = ThreadGetCurrentId();
if (iVar15 == iVar14) {
*piVar6 = (int)_DAT_0105d15c;
piVar6[-1] = 0xadb2ed;
cVar3 = CVProfNode::ExitScope();
if (cVar3 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_38 != 0) {
piVar6[5] = 0;
piVar6[4] = 0;
piVar6[3] = 0;
*piVar6 = local_38;
piVar6[1] = local_40;
piVar6[2] = local_3c;
pcVar2 = *(code **)(local_38 + 0x54);
piVar6[-1] = 0xada9c2;
(*pcVar2)();
}
iVar15 = *(int *)(param_1 + 0x38);
*piVar6 = (int)pSVar1;
pcVar2 = *(code **)(iVar15 + 0x44);
piVar6[-1] = 0xada9ce;
SVar4 = (Spitter)(*pcVar2)();
param_1[0x4844] = SVar4;
LAB_00ada9d4:
piVar6[1] = iVar13;
piVar6[2] = local_64;
*piVar6 = (int)pSVar1;
piVar6[-1] = 0xada9ea;
DirectChasePath::NotifyVictim
((DirectChasePath *)*piVar6,(INextBot *)piVar6[1],(CBaseEntity *)piVar6[2]);
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
uVar8 = *(uint *)(param_1 + 0x34);
if (((uVar8 != 0xffffffff) &&
(piVar22 = (int *)(g_pEntityList + (uVar8 & 0xfff) * 0x10 + 4), piVar22 != (int *)0x0)) &&
(piVar22[1] == uVar8 >> 0xc)) goto LAB_00ada379;
LAB_00adabf2:
*(undefined4 *)((int)param_2 + 0x4324) = 0xffffffff;
}
(**(code **)(*piVar5 + 0xc4))();
if (param_1[0x4848] == (Spitter)0x0) {
fVar18 = (float)((int)param_2 + 0x4028);
local_34 = &PTR_operator___00d20e60;
local_30 = fVar18;
local_28 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
pCVar12 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
iVar13 = (**(code **)(*(int *)pCVar12 + 0x14c))();
if (iVar13 == 0) {
local_24 = 0x3f800000;
}
else {
local_24 = *(undefined4 *)(iVar13 + 0x1cec);
}
cVar3 = (**(code **)(*(int *)pCVar12 + 0x16c))();
local_2c = (CBaseEntity *)0x0;
if (cVar3 != '\0') {
local_2c = pCVar12;
}
iVar13 = CBaseEntity::GetTeamNumber(pCVar12);
local_20 = 9;
if (iVar13 == 3) {
local_20 = (**(code **)(*(int *)pCVar12 + 0x544))();
}
uVar8 = *(uint *)(param_1 + 0x34);
local_70 = 0.0;
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
local_70 = *(float *)(puVar20 + 4);
}
pSVar1 = param_1 + 0x38;
piVar22 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
cVar3 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
if (((cVar3 == '\0') && (cVar3 = (**(code **)(*piVar22 + 0xd4))(), cVar3 == '\0')) &&
((cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0' &&
(cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0')))) {
(**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
pfVar21 = (float *)&stack0xffffff50;
local_4c = local_40;
local_48 = local_3c;
local_44 = local_38;
pcVar2 = *(code **)(*piVar22 + 0x158);
(**(code **)(*piVar22 + 300))();
cVar3 = (*pcVar2)();
if (cVar3 == '\0') {
LAB_00adb50d:
local_74 = &local_4c;
pfVar21 = (float *)&stack0xffffff50;
goto LAB_00ada521;
}
if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
pVVar16 = (Vector *)(**(code **)(*piVar22 + 300))();
cVar3 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar16,(Vector *)&local_40);
if (cVar3 == '\0') goto LAB_00adb50d;
}
(**(code **)(*piVar22 + 0x120))();
(**(code **)(*piVar22 + 0xb4))();
piVar22 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc4))();
(**(code **)(*piVar22 + 0xc4))();
(**(code **)(*(int *)(param_1 + 0x38) + 0x48))();
param_1[0x4844] = (Spitter)0x1;
}
else {
local_74 = (int *)0x0;
pfVar21 = (float *)&stack0xffffff54;
LAB_00ada521:
local_54 = 0;
local_50 = 0;
if (_towlower == 0) {
local_38 = 0;
}
else {
*pfVar21 = (float)_towlower;
pfVar21[1] = (float)&local_54;
pfVar21[0xb] = (float)"ChasePath::Update";
pfVar21[10] = (float)"NextBot";
pfVar21[9] = (float)"(%s)%s";
pfVar21[8] = (float)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::
tm_fmt;
pfVar21[7] = 1.45735e-43;
pfVar21[6] = (float)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
pfVar21[5] = 0.0;
pfVar21[3] = 0.0;
pfVar21[4] = 0.0;
pfVar21[2] = 0.0;
pcVar2 = *(code **)(_towlower + 0x50);
pfVar21[-1] = 1.5946946e-38;
(*pcVar2)();
local_38 = _towlower;
}
iVar13 = _DAT_0105db00;
local_40 = local_54;
local_3c = local_50;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 00adadf8 to 00adae59 has its CatchHandler @ 00adb570 */
pfVar21[-1] = 1.5949956e-38;
iVar15 = ThreadGetCurrentId();
if (iVar13 == iVar15) {
if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
pfVar21[4] = 5.60519e-45;
pfVar21[3] = (float)"NextBot";
pfVar21[2] = 0.0;
pfVar21[1] = (float)"ChasePath::Update";
*pfVar21 = (float)_DAT_0105d15c;
pfVar21[-1] = 1.5950043e-38;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*pfVar21,(int)pfVar21[1],(char *)pfVar21[2],
(int)pfVar21[3]);
}
puVar10 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
*puVar10 = *puVar10 | 4;
*pfVar21 = (float)_DAT_0105d15c;
pfVar21[-1] = 1.5950086e-38;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
*pfVar21 = (float)pSVar1;
pfVar21[4] = (float)local_74;
pfVar21[3] = (float)&local_34;
pfVar21[2] = local_70;
pfVar21[1] = fVar18;
/* try { // try from 00ada5e7 to 00ada5fa has its CatchHandler @ 00adb54f */
pfVar21[-1] = 1.5947062e-38;
ChasePath::RefreshPath
((ChasePath *)*pfVar21,(INextBot *)pfVar21[1],(CBaseEntity *)pfVar21[2],
(IPathCost *)pfVar21[3],(Vector *)pfVar21[4]);
*pfVar21 = (float)pSVar1;
pfVar21[1] = fVar18;
pfVar21[-1] = 1.5947083e-38;
PathFollower::Update((PathFollower *)*pfVar21,(INextBot *)pfVar21[1]);
iVar13 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
pfVar21[-1] = 1.5949855e-38;
iVar15 = ThreadGetCurrentId();
if (iVar13 == iVar15) {
*pfVar21 = (float)_DAT_0105d15c;
pfVar21[-1] = 1.5949886e-38;
cVar3 = CVProfNode::ExitScope();
if (cVar3 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_38 != 0) {
pfVar21[5] = 0.0;
pfVar21[4] = 0.0;
pfVar21[3] = 0.0;
*pfVar21 = (float)local_38;
pfVar21[1] = (float)local_40;
pfVar21[2] = (float)local_3c;
pcVar2 = *(code **)(local_38 + 0x54);
pfVar21[-1] = 1.5947193e-38;
(*pcVar2)();
}
iVar13 = *(int *)(param_1 + 0x38);
*pfVar21 = (float)pSVar1;
pcVar2 = *(code **)(iVar13 + 0x44);
pfVar21[-1] = 1.5947205e-38;
SVar4 = (Spitter)(*pcVar2)();
param_1[0x4844] = SVar4;
}
*pfVar21 = (float)pSVar1;
pfVar21[2] = local_70;
pfVar21[1] = fVar18;
pfVar21[-1] = 1.5947245e-38;
DirectChasePath::NotifyVictim
((DirectChasePath *)*pfVar21,(INextBot *)pfVar21[1],(CBaseEntity *)pfVar21[2]);
if (*(int *)(param_1 + 0x443c) < 1) {
iVar13 = *(int *)param_2;
*pfVar21 = param_2;
pcVar2 = *(code **)(iVar13 + 0x9b0);
pfVar21[-1] = 1.5951545e-38;
piVar5 = (int *)(*pcVar2)();
local_68 = 0;
pcVar2 = *(code **)(*piVar5 + 0xb4);
uVar8 = *(uint *)(param_1 + 0x34);
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
local_68 = *(int *)(puVar20 + 4);
}
if ((*(byte *)(local_68 + 0x14d) & 8) != 0) {
*pfVar21 = (float)local_68;
pfVar21[-1] = 1.5952173e-38;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*pfVar21);
}
*pfVar21 = (float)piVar5;
pfVar21[2] = 1.0;
pfVar21[1] = (float)(local_68 + 0x2e0);
pfVar21[-1] = 1.5951698e-38;
(*pcVar2)();
}
else {
iVar13 = *piVar6;
*pfVar21 = (float)piVar6;
pcVar2 = *(code **)(iVar13 + 200);
pfVar21[-1] = 1.5947284e-38;
cVar3 = (*pcVar2)();
if (cVar3 == '\0') {
iVar13 = *piVar6;
*pfVar21 = (float)piVar6;
pcVar2 = *(code **)(iVar13 + 0x114);
pfVar21[-1] = 1.5947315e-38;
cVar3 = (*pcVar2)();
if (cVar3 == '\0') {
iVar13 = *piVar6;
*pfVar21 = (float)piVar6;
pcVar2 = *(code **)(iVar13 + 0xf8);
pfVar21[-1] = 1.5947345e-38;
cVar3 = (*pcVar2)();
if (cVar3 != '\0') {
iVar13 = *piVar5;
pfVar21[1] = 1.4013e-44;
*pfVar21 = (float)piVar5;
pcVar2 = *(code **)(iVar13 + 0xe4);
pfVar21[-1] = 1.5947387e-38;
cVar3 = (*pcVar2)();
if (cVar3 == '\0') {
iVar13 = *piVar5;
pfVar21[2] = 0.0;
pfVar21[1] = 1.4013e-44;
*pfVar21 = (float)piVar5;
pcVar2 = *(code **)(iVar13 + 0xd8);
pfVar21[-1] = 1.5947441e-38;
(*pcVar2)();
}
}
}
}
}
}
else if (*(float *)(param_1 + 0x4854) <= 0.0) {
uVar8 = *(uint *)((int)param_2 + 0x4324);
pCVar12 = (CBaseEntity *)0x0;
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
pCVar12 = *(CBaseEntity **)(puVar20 + 4);
}
if (((byte)pCVar12[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(pCVar12);
}
local_34 = *(undefined ***)(pCVar12 + 0x2e0);
local_30 = *(float *)(pCVar12 + 0x2e4);
local_2c = *(CBaseEntity **)(pCVar12 + 0x2e8);
if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
}
local_2c = *(CBaseEntity **)((int)param_2 + 0x2e8);
cVar3 = UTIL_IsFacingWithinTolerance
((CBaseEntity *)param_2,(Vector *)&local_34,0.98,(float *)0x0);
pfVar21 = (float *)&stack0xffffff54;
if (((cVar3 != '\0') &&
(cVar3 = CTerrorPlayer::IsCustomAbilityReadyToFire((CTerrorPlayer *)param_2),
pfVar21 = (float *)&stack0xffffff54, cVar3 != '\0')) &&
((**(code **)(*(int *)param_2 + 0x938))(), pfVar21 = (float *)&stack0xffffff54,
*(float *)(param_1 + 0x4854) <= 0.0)) {
lVar23 = (longdouble)CountdownTimer::Now();
if ((float)lVar23 + 1.0 != *(float *)(param_1 + 0x4854)) {
(**(code **)(*(int *)(param_1 + 0x484c) + 4))();
*(float *)(param_1 + 0x4854) = (float)lVar23 + 1.0;
}
pfVar21 = (float *)&stack0xffffff54;
if (*(float *)(param_1 + 0x4850) != 1.0) {
(**(code **)(*(int *)(param_1 + 0x484c) + 4))();
*(undefined4 *)(param_1 + 0x4850) = 0x3f800000;
pfVar21 = (float *)&stack0xffffff54;
}
}
}
else {
lVar23 = (longdouble)CountdownTimer::Now();
if (*(float *)(param_1 + 0x4854) <= (float)lVar23) {
iVar13 = RandomInt();
if (iVar13 < 0x32) {
pSVar9 = ::operator_new(0x481c);
/* try { // try from 00adb495 to 00adb499 has its CatchHandler @ 00adb576 */
SpitterPrepareAmbush::SpitterPrepareAmbush(pSVar9);
*(undefined4 *)this = 1;
*(SpitterPrepareAmbush **)(this + 4) = pSVar9;
*(char **)(this + 8) = "Done spitting";
return this;
}
if (*(float *)(param_1 + 0x4854) != -1.0) {
(**(code **)(*(int *)(param_1 + 0x484c) + 4))();
*(undefined4 *)(param_1 + 0x4854) = 0xbf800000;
}
param_1[0x4848] = (Spitter)0x0;
pfVar21 = (float *)&stack0xffffff54;
}
}
fVar18 = 0.0;
pcVar2 = *(code **)(*piVar7 + 0xf8);
uVar8 = *(uint *)(param_1 + 0x34);
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
fVar18 = *(float *)(puVar20 + 4);
}
pfVar21[2] = 0.0;
pfVar21[1] = fVar18;
*pfVar21 = (float)piVar7;
pfVar21[-1] = 1.5949442e-38;
cVar3 = (*pcVar2)();
if (cVar3 != '\0') {
uVar8 = *(uint *)(param_1 + 0x34);
fVar18 = 0.0;
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
fVar18 = *(float *)(puVar20 + 4);
}
pfVar21[3] = 0.0;
pfVar21[2] = 0.8;
pfVar21[1] = fVar18;
*pfVar21 = param_2;
pfVar21[-1] = 1.594956e-38;
cVar3 = UTIL_IsFacingWithinTolerance
((CBaseEntity *)*pfVar21,(CBaseEntity *)pfVar21[1],pfVar21[2],
(float *)pfVar21[3]);
if ((cVar3 != '\0') && ((*(byte *)((int)param_2 + 0x150) & 1) != 0)) {
*pfVar21 = param_2;
pfVar21[-1] = 1.59496e-38;
cVar3 = CTerrorPlayer::IsCustomAbilityReadyToFire((CTerrorPlayer *)*pfVar21);
if (cVar3 != '\0') {
fVar18 = 0.0;
pcVar2 = *(code **)(*(int *)((int)param_2 + 0x4028) + 300);
uVar8 = *(uint *)(param_1 + 0x34);
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
fVar18 = *(float *)(puVar20 + 4);
}
pfVar21[1] = fVar18;
*pfVar21 = (float)((int)param_2 + 0x4028);
pfVar21[-1] = 1.5951446e-38;
lVar23 = (longdouble)(*pcVar2)();
if ((float)lVar23 <
*(float *)(z_spitter_range._28_4_ + 0x2c) * *(float *)(z_spitter_range._28_4_ + 0x2c)) {
iVar13 = *piVar6;
*pfVar21 = (float)piVar6;
pcVar2 = *(code **)(iVar13 + 0xe0);
pfVar21[-1] = 1.5951509e-38;
(*pcVar2)();
param_1[0x4848] = (Spitter)0x1;
goto LAB_00adad80;
}
}
uVar8 = *(uint *)(param_1 + 0x34);
fVar18 = 0.0;
pcVar2 = *(code **)(*(int *)((int)param_2 + 0x4028) + 300);
if (((uVar8 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar8 >> 0xc)) {
fVar18 = *(float *)(puVar20 + 4);
}
pfVar21[1] = fVar18;
*pfVar21 = (float)((int)param_2 + 0x4028);
pfVar21[-1] = 1.5949723e-38;
lVar23 = (longdouble)(*pcVar2)();
if ((float)lVar23 < 1764.0) {
iVar13 = *(int *)param_2;
pfVar21[1] = -1.0;
*pfVar21 = param_2;
pcVar2 = *(code **)(iVar13 + 0x940);
pfVar21[-1] = 1.594978e-38;
(*pcVar2)();
}
}
}
LAB_00adad80:
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
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.