PathFollower::Climbing
0x00765c40 · 10747 bytes · __cdecl
_ZN12PathFollower8ClimbingEP8INextBotPKN4Path7SegmentERK6VectorS8_f
Decompiled
undefined (5 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* PathFollower::Climbing(INextBot*, Path::Segment const*, Vector const&, Vector const&, float) */
undefined1
PathFollower::Climbing
(INextBot *param_1,Segment *param_2,Vector *param_3,Vector *param_4,float param_5)
{
uint *puVar1;
code *pcVar2;
bool bVar3;
bool bVar4;
bool bVar5;
bool bVar6;
char cVar7;
undefined1 uVar8;
Vector *pVVar9;
int *piVar10;
char *pcVar11;
int iVar12;
int iVar13;
float *pfVar14;
uint uVar15;
IHandleEntity *pIVar16;
undefined4 uVar17;
Vector *pVVar18;
int *piVar19;
int in_GS_OFFSET;
longdouble lVar20;
longdouble lVar21;
longdouble lVar22;
longdouble lVar23;
float fVar24;
float fVar25;
float fVar26;
float fVar27;
float fVar28;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float local_358;
float local_34c;
float local_348;
float local_328;
float local_324;
float local_31c;
float local_310;
undefined4 local_30c;
undefined4 local_308;
undefined4 local_304;
undefined4 local_300;
undefined4 local_2fc;
undefined4 local_2f8;
Vector *local_2f4;
float local_2f0;
float local_2ec;
float local_2e8;
float local_2e4;
float local_2e0;
float local_2dc;
float local_2d8;
float local_2d4;
float local_2d0;
float local_2cc;
float local_2c8;
float local_2c4;
float local_2c0;
float local_2bc;
float local_2b8;
float local_2b4;
float local_2b0;
float local_2ac;
undefined4 local_2a8;
undefined4 local_2a4;
Vector *local_2a0;
float local_29c;
float local_298;
float local_294;
float local_290;
float local_28c;
float local_288;
undefined **local_284 [4];
Segment *local_274;
undefined4 local_270;
float local_26c;
float local_268;
float local_264;
undefined4 local_25c;
undefined4 local_258;
float local_254;
float local_24c;
float local_248;
float local_244;
float local_23c;
float local_238;
float local_234;
undefined4 local_22c;
undefined1 local_228;
undefined1 local_227;
float local_21c;
float local_218;
float local_214;
undefined4 local_20c;
undefined4 local_208;
float local_204;
float local_1fc;
float local_1f8;
float local_1f4;
float local_1ec;
float local_1e8;
float local_1e4;
undefined4 local_1dc;
undefined1 local_1d8;
undefined1 local_1d7;
float local_1cc;
float local_1c8;
float local_1c4;
float local_1bc;
float local_1b8;
float local_1b4;
float local_1ac;
float local_1a8;
float local_1a4;
float local_19c;
float local_198;
float local_194;
undefined4 local_18c;
undefined1 local_188;
undefined1 local_187;
float local_17c;
float local_178;
float local_174;
float local_16c;
float local_168;
float local_164;
float local_15c;
float local_158;
float local_154;
float local_14c;
float local_148;
float local_144;
undefined4 local_13c;
undefined1 local_138;
undefined1 local_137;
float local_12c;
float local_128;
float local_124;
undefined4 local_11c;
undefined4 local_118;
float local_114;
float local_10c;
float local_108;
float local_104;
float local_fc;
float local_f8;
float local_f4;
undefined4 local_ec;
undefined1 local_e8;
undefined1 local_e7;
float local_d0;
float local_cc;
float local_c8;
float local_c4;
float local_c0;
float local_bc;
float local_b8;
float local_b4;
float local_b0;
undefined1 local_a8;
undefined1 local_a7;
undefined2 local_a6;
float local_a4;
undefined2 local_9c;
char local_9a;
char local_99;
undefined4 local_84;
float local_7c;
float local_78;
float local_74;
float local_70;
float local_6c;
float local_68;
float local_64;
float local_60;
float local_5c;
float local_58;
undefined4 local_54;
float local_50;
float local_4c;
undefined4 local_48;
float local_44;
undefined4 local_3c;
bool local_38;
undefined1 auStack_37 [7];
undefined4 local_30;
undefined1 local_24;
undefined1 local_23;
undefined1 local_22;
undefined1 local_21;
int local_20;
local_30c = 0;
local_308 = 0;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
if (_towlower == (Vector *)0x0) {
local_2f4 = (Vector *)0x0;
}
else {
(**(code **)(_towlower + 0x50))
(_towlower,&local_30c,0,0,0,0,
"/data/src/game/server/nextbot/path/nextbotpathfollow.cpp",0x45b,
&Climbing(INextBot*,Path::Segment_const*,Vector_const&,Vector_const&,float)::tm_fmt,
"(%s)%s","NextBot","PathFollower::Climbing");
local_2f4 = _towlower;
}
iVar12 = _DAT_0105db00;
local_2fc = local_30c;
local_2f8 = local_308;
/* try { // try from 00765e36 to 00765e96 has its CatchHandler @ 007686e8 */
if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
(iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
if (*(char **)_DAT_0105d15c != "PathFollower::Climbing") {
_DAT_0105d15c =
(Vector *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xcaa60e,(char *)0x0,0xca8906);
}
puVar1 = (uint *)(_DAT_0105d1e8 + 4 + *(int *)(_DAT_0105d15c + 0x70) * 8);
*puVar1 = *puVar1 | 4;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
/* try { // try from 00765d30 to 00765d5e has its CatchHandler @ 007686d2 */
pVVar9 = (Vector *)(**(code **)(*(int *)param_2 + 0xc0))(param_2);
piVar10 = (int *)(**(code **)(*(int *)param_2 + 0xc4))(param_2);
pcVar11 = (char *)(**(code **)(*(int *)param_2 + 0xb4))(param_2);
iVar12 = (**(code **)(*(int *)pcVar11 + 0x52c))(pcVar11);
/* try { // try from 00765ebd to 007660d4 has its CatchHandler @ 007686d2 */
if ((*(int *)(NextBotAllowClimbing._28_4_ + 0x30) != 0) &&
(pcVar11 = (char *)param_2, cVar7 = (**(code **)(*(int *)param_2 + 0xe4))(param_2),
cVar7 != '\0')) {
local_2e8 = 0.0;
local_2f0 = *(float *)param_4;
local_2ec = *(float *)(param_4 + 4);
VectorNormalize((Vector *)&local_2f0);
lVar20 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
fVar26 = (float)lVar20;
pcVar11 = (char *)pVVar9;
cVar7 = (**(code **)(*(int *)pVVar9 + 200))(pVVar9);
if ((cVar7 == '\0') &&
((pcVar11 = (char *)pVVar9, cVar7 = (**(code **)(*(int *)pVVar9 + 0x118))(pVVar9),
cVar7 == '\0' &&
(pcVar11 = (char *)pVVar9, cVar7 = (**(code **)(*(int *)pVVar9 + 0xf8))(pVVar9),
cVar7 != '\0')))) {
uVar8 = 0;
if (*(int *)(param_1 + 0x4758) == 0) goto LAB_00765d78;
lVar20 = (longdouble)(**(code **)(*piVar10 + 0x124))(piVar10);
local_34c = -1.0;
piVar19 = *(int **)(param_1 + 0x4758);
if (piVar19[6] == 2) {
/* try { // try from 00767d2f to 00767dcd has its CatchHandler @ 007686d2 */
piVar19 = (int *)(**(code **)(*(int *)param_1 + 0x58))(param_1,piVar19);
if ((piVar19 == (int *)0x0) || (*piVar19 == 0)) {
local_34c = -1.0;
piVar19 = *(int **)(param_1 + 0x4758);
}
else {
pVVar18 = (Vector *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
CNavArea::GetClosestPointOnArea((CNavArea *)*piVar19,pVVar18,(Vector *)&local_7c);
pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
local_2ec = local_78 - pfVar14[1];
local_2f0 = local_7c - *pfVar14;
local_34c = local_74 - pfVar14[2];
local_2e8 = 0.0;
VectorNormalize((Vector *)&local_2f0);
piVar19 = *(int **)(param_1 + 0x4758);
}
}
if (((*(byte *)(*piVar19 + 0x55) & 0x10) != 0) ||
((iVar12 != 0 && ((*(byte *)(iVar12 + 0x55) & 0x10) != 0)))) {
pcVar11 = (char *)param_2;
/* try { // try from 0076717b to 007671f8 has its CatchHandler @ 007686d2 */
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if (cVar7 != '\0') {
pVVar9 = (Vector *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
NDebugOverlay::Cross3D(pVVar9,5.0,0,0xff,0xff,true,5.0);
uVar17 = (**(code **)(*(int *)param_2 + 0x13c))(param_2);
pcVar11 = "%3.2f: %s ON STAIRS\n";
DevMsg("%3.2f: %s ON STAIRS\n",(double)*(float *)(gpGlobals + 0xc),uVar17);
}
goto LAB_00765d78;
}
pcVar11 = (char *)param_1;
iVar12 = (**(code **)(*(int *)param_1 + 0x5c))(param_1,piVar19);
if (iVar12 == 0) goto LAB_00765d78;
pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
iVar13 = *(int *)(param_1 + 0x4758);
fVar29 = *(float *)(iVar13 + 8) - *pfVar14;
fVar25 = *(float *)(iVar13 + 0xc) - pfVar14[1];
local_2dc = *(float *)(iVar13 + 0x10) - pfVar14[2];
local_2e4 = fVar29;
local_2e0 = fVar25;
lVar21 = (longdouble)VectorNormalize((Vector *)&local_2e4);
fVar25 = SQRT(fVar25 * fVar25 + fVar29 * fVar29);
lVar22 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
if (fVar25 - (float)lVar22 * 0.25 <= 0.0) {
fVar29 = 0.0;
}
else {
lVar22 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
fVar29 = fVar25 - (float)lVar22 * 0.25;
}
fVar27 = local_2dc;
if (fVar25 <= 0.0) {
local_328 = 0.0;
}
else {
local_328 = (fVar29 / fVar25) * (float)lVar21;
}
/* try { // try from 00766137 to 0076613c has its CatchHandler @ 007686f2 */
lVar21 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x154))(pVVar9);
iVar13 = iVar12;
/* try { // try from 00767ded to 00767e61 has its CatchHandler @ 007686f2 */
if (((fVar27 < (float)lVar21) &&
(cVar7 = (**(code **)(*(int *)pVVar9 + 0x168))(pVVar9), cVar7 == '\0')) &&
(*(int *)(*(int *)(param_1 + 0x4758) + 0x18) != 2)) {
fVar25 = local_2e4 * local_328;
fVar29 = local_2e0 * local_328;
local_328 = local_328 * local_2dc;
pcVar2 = *(code **)(*(int *)pVVar9 + 0x158);
pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
local_7c = fVar25 + *pfVar14;
local_78 = fVar29 + pfVar14[1];
local_74 = local_328 + pfVar14[2];
/* try { // try from 00767e9c to 00767ec1 has its CatchHandler @ 007686f4 */
uVar17 = (**(code **)(*(int *)pVVar9 + 300))(pVVar9);
pcVar11 = (char *)pVVar9;
cVar7 = (*pcVar2)(pVVar9,uVar17,&local_7c,0,0);
if (cVar7 != '\0') goto LAB_00765d78;
}
do {
if (*(int *)(iVar13 + 0x18) == 2) {
/* try { // try from 00767eef to 00767ef1 has its CatchHandler @ 007686d2 */
(**(code **)(*(int *)param_1 + 0x58))(param_1,iVar13);
bVar4 = true;
goto LAB_007661c4;
}
/* try { // try from 00766179 to 007664c3 has its CatchHandler @ 007686d2 */
iVar13 = (**(code **)(*(int *)param_1 + 0x58))(param_1,iVar13);
} while ((iVar13 != 0) &&
((iVar12 == iVar13 ||
(pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9),
fVar25 = *(float *)(iVar13 + 8) - *pfVar14,
fVar29 = *(float *)(iVar13 + 0xc) - pfVar14[1],
fVar25 * fVar25 + fVar29 * fVar29 <= 22500.0))));
bVar4 = false;
LAB_007661c4:
uVar15 = (**(code **)(*piVar10 + 0x130))(piVar10);
pIVar16 = (IHandleEntity *)(**(code **)(*(int *)param_2 + 0xb4))(param_2);
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)local_284,pIVar16,0,IgnoreActorsTraceFilterFunction);
local_274 = param_2;
local_284[0] = &PTR_ShouldHitEntity_00ca96c8;
local_270 = 0;
lVar21 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
fVar25 = (float)lVar21;
fVar31 = fVar25 * 0.5;
lVar21 = (longdouble)(**(code **)(*piVar10 + 0x124))(piVar10);
lVar22 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x130))(pVVar9);
fVar30 = -fVar31;
fVar27 = (float)lVar21 + 0.1;
local_2d8 = fVar30;
local_2d4 = fVar30;
local_2d0 = (float)lVar22 + 0.1;
pfVar14 = (float *)(**(code **)(*(int *)pVVar9 + 300))(pVVar9);
local_2cc = *pfVar14;
local_2c8 = pfVar14[1];
local_2c4 = pfVar14[2];
lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x134))(pVVar9);
local_254 = (float)lVar23;
local_25c = 0;
local_258 = 0;
local_22c = 0;
local_227 = local_254 * local_254 != 0.0;
local_234 = (fVar27 - local_2d0) * 0.5;
local_238 = (fVar31 - local_2d4) * 0.5;
local_23c = (fVar31 - local_2d8) * 0.5;
local_228 = local_23c * local_23c + local_238 * local_238 + local_234 * local_234 < 1e-06;
local_24c = (local_2d8 + fVar31) * 0.5;
local_248 = (local_2d4 + fVar31) * 0.5;
local_244 = (fVar27 + local_2d0) * 0.5;
local_26c = local_2cc + local_24c;
local_24c = -local_24c;
local_268 = local_2c8 + local_248;
local_264 = local_2c4 + local_244;
local_248 = -local_248;
local_244 = -local_244;
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_26c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
fVar29 = local_a4;
local_328 = local_a4;
if ((local_a4 < 1.0) || (local_99 != '\0')) {
fVar24 = fVar25 * 0.25;
fVar32 = local_2cc - local_2f0 * fVar24;
fVar28 = local_2c8 - local_2ec * fVar24;
fVar24 = local_2c4 - fVar24 * local_2e8;
/* try { // try from 0076655f to 00766701 has its CatchHandler @ 007686d4 */
lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x134))(pVVar9);
local_204 = (float)lVar23;
local_20c = 0;
local_208 = 0;
local_1dc = 0;
local_1d7 = local_204 * local_204 != 0.0;
local_1e4 = (fVar27 - local_2d0) * 0.5;
local_1ec = (fVar31 - local_2d8) * 0.5;
local_1e8 = (fVar31 - local_2d4) * 0.5;
local_1fc = (local_2d8 + fVar31) * 0.5;
local_1d8 = local_1e8 * local_1e8 + local_1ec * local_1ec + local_1e4 * local_1e4 < 1e-06;
local_1f8 = (local_2d4 + fVar31) * 0.5;
local_21c = fVar32 + local_1fc;
local_1fc = -local_1fc;
local_1f4 = (fVar27 + local_2d0) * 0.5;
local_218 = fVar28 + local_1f8;
local_1f8 = -local_1f8;
local_214 = fVar24 + local_1f4;
local_1f4 = -local_1f4;
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_21c,uVar15,(CTraceFilterSimple *)local_284,&local_7c);
if ((local_48._3_1_ == '\0') && (fVar29 < local_50)) {
/* try { // try from 00767f9e to 00767fd6 has its CatchHandler @ 007686d4 */
uVar17 = (**(code **)(*(int *)param_2 + 0x13c))(param_2);
local_24 = 0xff;
local_23 = 0xff;
local_22 = 0xff;
local_21 = 0xff;
INextBot::DebugConColorMsg
((INextBot *)param_2,4,&local_24,
"%s backing up when looking for max ledge height\n",uVar17);
local_a8 = (undefined1)local_54;
local_d0 = local_7c;
local_328 = local_50;
local_cc = local_78;
local_a7 = local_54._1_1_;
local_c8 = local_74;
local_c4 = local_70;
local_a6 = local_54._2_2_;
local_c0 = local_6c;
local_bc = local_68;
local_b8 = local_64;
local_b4 = local_60;
local_9c = (undefined2)local_48;
local_b0 = local_5c;
local_9a = local_48._2_1_;
local_99 = local_48._3_1_;
local_84 = local_30;
local_2cc = fVar32;
local_2c8 = fVar28;
local_2c4 = fVar24;
local_a4 = local_328;
}
}
/* try { // try from 0076671f to 00766a59 has its CatchHandler @ 007686d2 */
lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x134))(pVVar9);
local_328 = (float)lVar23 * local_328;
pcVar11 = (char *)pVVar9;
lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x130))(pVVar9);
if (local_328 <= (float)lVar23) goto LAB_00765d78;
local_18c = 0;
local_1bc = local_2f0 * fVar26;
local_1b8 = local_2ec * fVar26;
local_1b4 = fVar26 * local_2e8;
local_2b4 = local_2cc;
local_2b0 = local_2c8;
local_2ac = local_2c4;
local_187 = local_1b8 * local_1b8 + local_1bc * local_1bc + local_1b4 * local_1b4 != 0.0;
local_19c = (fVar31 - local_2d8) * 0.5;
local_198 = (fVar31 - local_2d4) * 0.5;
local_194 = (local_328 - local_2d0) * 0.5;
local_188 = local_198 * local_198 + local_19c * local_19c + local_194 * local_194 < 1e-06;
local_1ac = (local_2d8 + fVar31) * 0.5;
local_1a8 = (local_2d4 + fVar31) * 0.5;
local_1a4 = (local_328 + local_2d0) * 0.5;
local_1cc = local_2cc + local_1ac;
local_1ac = -local_1ac;
local_1c8 = local_2c8 + local_1a8;
local_1a8 = -local_1a8;
local_1c4 = local_2c4 + local_1a4;
local_1a4 = -local_1a4;
local_2c0 = fVar31;
local_2bc = fVar31;
local_2b8 = local_328;
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_1cc,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
pcVar11 = (char *)param_2;
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
pcVar11 = (char *)&local_2cc;
local_78 = local_2ec * fVar26 + local_2c8;
local_74 = local_2e8 * fVar26 + local_2c4;
local_7c = fVar26 * local_2f0 + local_2cc;
NDebugOverlay::SweptBox
((Vector *)pcVar11,(Vector *)&local_7c,(Vector *)&local_2d8,(Vector *)&local_2c0,
(QAngle *)&vec3_angle,0xff,100,0,0xff,0.1);
}
if (((1.0 <= local_a4) && (local_9a == '\0')) || (local_99 != '\0')) goto LAB_00765d78;
local_304 = 0;
local_300 = 0;
if (_towlower == (Vector *)0x0) {
local_2a0 = (Vector *)0x0;
}
else {
/* try { // try from 00766b03 to 00766b05 has its CatchHandler @ 007686e6 */
(**(code **)(_towlower + 0x50))
(_towlower,&local_304,0,0,0,0,
"/data/src/game/server/nextbot/path/nextbotpathfollow.cpp",0x539,
&Climbing(INextBot*,Path::Segment_const*,Vector_const&,Vector_const&,float)::
tm_fmt,"(%s)%s","NextBot","PathFollower::Climbing( Search for ledge to climb )")
;
local_2a0 = _towlower;
}
iVar12 = _DAT_0105db00;
local_2a8 = local_304;
local_2a4 = local_300;
/* try { // try from 00766b47 to 00766b4b has its CatchHandler @ 007686e2 */
if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
(iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
if (*(char **)_DAT_0105d15c != "PathFollower::Climbing( Search for ledge to climb )") {
/* try { // try from 00768186 to 007681a9 has its CatchHandler @ 007686e2 */
_DAT_0105d15c =
(Vector *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xcaa7b8,(char *)0x0,0xca8906)
;
}
puVar1 = (uint *)(_DAT_0105d1e8 + 4 + *(int *)(_DAT_0105d15c + 0x70) * 8);
*puVar1 = *puVar1 | 4;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
/* try { // try from 00766b63 to 00766ce3 has its CatchHandler @ 007686d6 */
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
local_78 = local_2ec * fVar26 + local_2c8;
local_74 = local_2e8 * fVar26 + local_2c4;
local_7c = fVar26 * local_2f0 + local_2cc;
NDebugOverlay::SweptBox
((Vector *)&local_2cc,(Vector *)&local_7c,(Vector *)&local_2d8,
(Vector *)&local_2c0,(QAngle *)&vec3_angle,0xff,100,0,100,4.0);
local_78 = local_2ec * 50.0 + local_2c8;
local_74 = local_2e8 * 50.0 + local_2c4;
local_7c = local_2f0 * 50.0 + local_2cc;
NDebugOverlay::HorzArrow
((Vector *)&local_2cc,(Vector *)&local_7c,2.0,0,0xff,0,0xff,true,4.0);
}
cVar7 = CGameTrace::DidHitNonWorldEntity((CGameTrace *)&local_d0);
/* try { // try from 00768143 to 00768148 has its CatchHandler @ 007686d6 */
if ((cVar7 == '\0') ||
(pcVar11 = (char *)param_2, cVar7 = (**(code **)(*(int *)param_2 + 0xe8))(param_2,local_84)
, cVar7 != '\0')) {
/* try { // try from 00766cf7 to 00767146 has its CatchHandler @ 00768684 */
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if (cVar7 != '\0') {
uVar17 = (**(code **)(*(int *)param_2 + 0x13c))(param_2);
DevMsg("%3.2f: %s at potential ledge climb\n",(double)*(float *)(gpGlobals + 0xc),uVar17);
}
lVar23 = (longdouble)(**(code **)(*piVar10 + 0x118))(piVar10);
fVar29 = (float)lVar23 * 0.5;
local_358 = fVar29;
/* try { // try from 007681c5 to 00768266 has its CatchHandler @ 00768684 */
if (((*(int *)(*(int *)(param_1 + 0x4758) + 0x18) == 2) &&
(piVar19 = (int *)(**(code **)(*(int *)param_1 + 0x58))
(param_1,*(int *)(param_1 + 0x4758)), piVar19 != (int *)0x0)
) && (*piVar19 != 0)) {
local_74 = 0.0;
local_7c = local_2f0 * fVar29;
fVar24 = fVar29 * local_2ec;
iVar12 = *piVar19;
fVar27 = *(float *)(iVar12 + 0x10) - *(float *)(iVar12 + 4);
if (fVar27 < ABS(local_7c)) {
if (local_7c <= 0.0) {
fVar27 = -fVar27;
}
iVar12 = *piVar19;
local_7c = fVar27;
}
fVar27 = *(float *)(iVar12 + 0x14) - *(float *)(iVar12 + 8);
local_78 = fVar24;
if ((fVar27 < ABS(fVar24)) && (local_78 = fVar27, fVar24 <= 0.0)) {
local_78 = -fVar27;
}
lVar23 = (longdouble)VectorNormalize((Vector *)&local_7c);
local_358 = (float)lVar23;
if (fVar29 <= (float)lVar23) {
local_358 = fVar29;
}
}
lVar23 = (longdouble)(**(code **)(*(int *)pVVar9 + 0x130))(pVVar9);
bVar6 = false;
local_294 = 0.0;
fVar29 = (float)lVar23 * 0.5;
bVar3 = true;
local_348 = 0.0;
bVar5 = false;
local_324 = fVar26;
local_31c = (float)lVar22 + 0.1;
local_29c = fVar30;
local_298 = fVar30;
local_290 = fVar31;
local_28c = fVar31;
local_288 = (float)lVar21;
LAB_00766f8b:
local_13c = 0;
local_16c = local_2f0 * local_324;
local_168 = local_2ec * local_324;
local_164 = local_324 * local_2e8;
local_137 = local_168 * local_168 + local_16c * local_16c + local_164 * local_164 != 0.0;
local_144 = (local_288 - local_294) * 0.5;
local_14c = (local_290 - local_29c) * 0.5;
local_148 = (local_28c - local_298) * 0.5;
local_15c = (local_290 + local_29c) * 0.5;
local_158 = (local_298 + local_28c) * 0.5;
local_154 = (local_294 + local_288) * 0.5;
local_17c = local_2cc + local_15c;
local_15c = -local_15c;
local_178 = local_2c8 + local_158;
local_174 = local_31c + local_2c4 + local_154;
local_138 = local_148 * local_148 + local_14c * local_14c + local_144 * local_144 < 1e-06;
local_158 = -local_158;
local_154 = -local_154;
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_17c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
if (bVar3) {
if (local_99 == '\0') {
if ((local_a4 < 1.0) || (local_9a != '\0')) {
bVar3 = 0.7 <= local_b0;
}
goto LAB_00766e99;
}
bVar3 = false;
}
else if (local_99 == '\0') {
LAB_00766e99:
fVar27 = local_324 * local_a4;
if (bVar5) {
if (local_358 <= fVar27 - local_348) {
local_11c = 0;
local_118 = 0;
local_2ac = local_bc;
local_2b4 = local_c4;
local_ec = 0;
local_114 = (local_bc - fVar29) - local_bc;
local_f4 = (local_288 - local_294) * 0.5;
local_2b0 = local_c0;
local_104 = (local_288 + local_294) * 0.5;
local_e7 = local_114 * local_114 != 0.0;
local_fc = (local_290 - local_29c) * 0.5;
local_124 = local_bc + local_104;
local_10c = (local_290 + local_29c) * 0.5;
local_f8 = (local_28c - local_298) * 0.5;
local_108 = (local_28c + local_298) * 0.5;
local_128 = local_c0 + local_108;
local_e8 = local_fc * local_fc + local_f4 * local_f4 + local_f8 * local_f8 < 1e-06;
local_12c = local_c4 + local_10c;
local_10c = -local_10c;
local_108 = -local_108;
local_104 = -local_104;
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_12c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
local_2b4 = local_c4;
local_2b0 = local_c0;
local_2ac = local_bc;
if (((local_9a == '\0') &&
(((local_a4 < 1.0 || (local_99 != '\0')) && (0.7 <= local_b0)))) &&
(((local_34c <= 0.0 ||
(cVar7 = CGameTrace::DidHitWorld((CGameTrace *)&local_d0), cVar7 == '\0')) ||
(ABS((local_bc - local_2c4) - local_34c) <= (float)lVar20)))) {
local_1cc = local_2b4;
local_1c8 = local_2b0;
local_1c4 = local_2ac;
local_17c = local_2b4;
local_178 = local_2b0;
local_174 = local_2ac;
if (fVar25 <= 4.0) goto LAB_00767a07;
local_310 = 4.0;
goto LAB_00767754;
}
}
local_324 = local_358 + 0.1 + fVar27;
local_348 = fVar27;
if (local_324 <= fVar26) {
local_324 = fVar26;
}
}
else if ((local_a4 < 1.0) || (local_9a != '\0')) {
local_324 = local_358 + 0.1 + fVar27;
if (local_324 <= fVar26) {
local_324 = fVar26;
}
/* try { // try from 0076733b to 00767ca8 has its CatchHandler @ 00768684 */
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
bVar5 = true;
local_348 = fVar27;
if (cVar7 != '\0') {
DevMsg("%3.2f: Climbing - found wall.\n");
bVar5 = true;
if (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0) {
local_78 = local_b4 * 20.0 + local_c0;
local_74 = local_b0 * 20.0 + local_bc;
local_7c = local_b8 * 20.0 + local_c4;
NDebugOverlay::HorzArrow
((Vector *)&local_c4,(Vector *)&local_7c,5.0,0xff,100,0,0xff,true,4.0);
bVar5 = true;
}
}
}
else {
/* try { // try from 00767229 to 00767282 has its CatchHandler @ 00768684 */
lVar21 = (longdouble)(**(code **)(*piVar10 + 0x124))(piVar10);
if (((float)lVar21 < local_31c) && (!bVar4)) goto code_r0x0076725b;
}
}
local_31c = local_31c + fVar29;
if (local_328 <= local_31c) {
if (bVar6) goto LAB_00767273;
bVar6 = true;
local_31c = local_328;
}
goto LAB_00766f8b;
}
goto LAB_0076728b;
}
}
goto LAB_00765d71;
while( true ) {
local_2b4 = local_c4;
local_310 = local_310 + 4.0;
local_2b0 = local_c0;
local_2ac = local_bc;
if (fVar25 <= local_310) break;
LAB_00767754:
local_6c = 0.0;
local_68 = 0.0;
local_3c = 0;
local_178 = local_178 - local_2ec * 4.0;
local_174 = local_174 - local_2e8 * 4.0;
local_17c = local_17c - local_2f0 * 4.0;
local_64 = (local_174 - fVar29) - local_174;
local_44 = (local_288 - local_294) * 0.5;
local_54 = (local_288 + local_294) * 0.5;
local_48 = (local_28c - local_298) * 0.5;
local_74 = local_174 + local_54;
local_5c = (local_290 + local_29c) * 0.5;
local_4c = (local_290 - local_29c) * 0.5;
local_58 = (local_28c + local_298) * 0.5;
local_78 = local_178 + local_58;
local_7c = local_17c + local_5c;
_local_38 = CONCAT31(CONCAT21(auStack_37._1_2_,local_64 * local_64 != 0.0),
local_48 * local_48 + local_4c * local_4c + local_44 * local_44 < 1e-06);
local_5c = -local_5c;
local_58 = -local_58;
local_54 = -local_54;
(**(code **)(*enginetrace + 0x14))
(enginetrace,(Vector *)&local_7c,uVar15,(CTraceFilterSimple *)local_284,&local_d0);
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
local_7c = local_17c;
local_78 = local_178;
local_74 = local_174 - fVar29;
NDebugOverlay::SweptBox
((Vector *)&local_17c,(Vector *)&local_7c,(Vector *)&local_29c,(Vector *)&local_290,
(QAngle *)&vec3_angle,0xff,0,0,0xff,4.0);
}
if ((((1.0 <= local_a4) && (local_9a == '\0')) && (local_99 == '\0')) || (local_b0 < 0.7))
break;
}
LAB_00767a07:
local_12c = local_29c;
local_128 = local_298;
local_2b0 = local_2ec * fVar31 + local_2b0;
local_2b4 = fVar31 * local_2f0 + local_2b4;
local_2ac = local_2e8 * fVar31 + local_2ac;
local_124 = local_294;
ILocomotion::TraceHull
((Vector *)&local_1cc,(Vector *)&local_2b4,(Vector *)&local_12c,(Vector *)&local_290,
uVar15,(ITraceFilter *)local_284,(CGameTrace *)&local_d0);
local_2ac = local_bc;
local_74 = local_bc + 18.0;
local_2b4 = local_c4;
local_2b0 = local_c0;
local_7c = local_c4;
local_78 = local_c0;
ILocomotion::TraceHull
((Vector *)&local_7c,(Vector *)&local_2b4,(Vector *)&local_29c,(Vector *)&local_290,
uVar15,(ITraceFilter *)local_284,(CGameTrace *)&local_d0);
if (local_99 == '\0') {
local_2b4 = local_c4;
local_2b0 = local_c0;
local_2ac = local_bc;
}
pcVar11 = (char *)param_2;
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if ((cVar7 != '\0') && (*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
pcVar11 = (char *)&local_2b4;
NDebugOverlay::SweptBox
((Vector *)pcVar11,(Vector *)pcVar11,(Vector *)&local_29c,(Vector *)&local_290,
(QAngle *)&vec3_angle,0,0xff,0,0xff,4.0);
if (0.1 < (local_2b0 - local_1c8) * (local_2b0 - local_1c8) +
(local_2b4 - local_1cc) * (local_2b4 - local_1cc)) {
pcVar11 = (char *)&local_1cc;
NDebugOverlay::SweptBox
((Vector *)pcVar11,(Vector *)pcVar11,(Vector *)&local_29c,(Vector *)&local_290,
(QAngle *)&vec3_angle,0xff,0,0,0xff,4.0);
}
}
uVar8 = 0;
if (!bVar3) {
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if ((cVar7 != '\0') &&
(DevMsg("%3.2f: STARTING LEDGE CLIMB UP\n",(double)*(float *)(gpGlobals + 0xc)),
*(int *)(NextBotDebugClimbing._28_4_ + 0x30) != 0)) {
NDebugOverlay::Cross3D((Vector *)&local_2b4,10.0,0,0xff,0,true,4.0);
fVar25 = local_2f0 * fVar31;
fVar26 = fVar31 * -local_2ec;
local_218 = fVar31 * local_2ec + local_2c8;
local_264 = local_2e8 * fVar31 + local_2c4;
local_26c = fVar26 + local_2cc + fVar25;
local_268 = fVar25 + local_218;
local_21c = (local_2cc + fVar25) - fVar26;
local_218 = local_218 - fVar25;
local_1c4 = local_264 + local_31c;
local_214 = local_264;
local_1cc = local_26c;
local_1c8 = local_268;
local_17c = local_21c;
local_178 = local_218;
local_174 = local_1c4;
NDebugOverlay::Triangle
((Vector *)&local_21c,(Vector *)&local_26c,(Vector *)&local_1cc,0xff,100,0,100,true,
4.0);
NDebugOverlay::Triangle
((Vector *)&local_21c,(Vector *)&local_1cc,(Vector *)&local_17c,0xff,100,0,100,true,
4.0);
local_12c = fVar26 + local_2b4;
local_128 = fVar25 + local_2b0;
local_7c = local_2b4 - fVar26;
local_78 = local_2b0 - fVar25;
local_124 = local_2ac;
local_74 = local_2ac;
NDebugOverlay::Triangle
((Vector *)&local_17c,(Vector *)&local_1cc,(Vector *)&local_12c,0,100,0xff,100,true,
4.0);
NDebugOverlay::Triangle
((Vector *)&local_17c,(Vector *)&local_12c,(Vector *)&local_7c,0,100,0xff,100,true,
4.0);
}
uVar8 = (**(code **)(*(int *)pVVar9 + 0xbc))(pVVar9,&local_2b4,&local_2f0,local_84);
pcVar11 = (char *)pVVar9;
}
iVar12 = _DAT_0105db00;
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
pcVar11 = (char *)_DAT_0105d15c;
cVar7 = CVProfNode::ExitScope();
if (cVar7 != '\0') {
_DAT_0105d15c = *(Vector **)(_DAT_0105d15c + 100);
}
DAT_0105d158 = _DAT_0105d15c == (Vector *)0x105d160;
}
if (local_2a0 != (Vector *)0x0) {
pcVar11 = (char *)local_2a0;
(**(code **)(local_2a0 + 0x54))(local_2a0,local_2a8,local_2a4,0,0,0);
}
goto LAB_00765d78;
code_r0x0076725b:
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
if (cVar7 != '\0') {
DevMsg("%3.2f: Climbing - skipping overhead climb we can walk/crawl under.\n",
(double)*(float *)(gpGlobals + 0xc));
}
LAB_00767273:
cVar7 = INextBot::IsDebugging((INextBot *)param_2,4);
pcVar11 = (char *)param_2;
if (cVar7 != '\0') {
pcVar11 = "%3.2f: CANT FIND LEDGE TO CLIMB\n";
/* try { // try from 0076830f to 0076867e has its CatchHandler @ 00768684 */
DevMsg("%3.2f: CANT FIND LEDGE TO CLIMB\n",(double)*(float *)(gpGlobals + 0xc));
}
LAB_0076728b:
iVar12 = _DAT_0105db00;
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar13 = ThreadGetCurrentId(), iVar12 == iVar13)) {
pcVar11 = (char *)_DAT_0105d15c;
cVar7 = CVProfNode::ExitScope();
if (cVar7 != '\0') {
_DAT_0105d15c = *(Vector **)(_DAT_0105d15c + 100);
}
DAT_0105d158 = _DAT_0105d15c == (Vector *)0x105d160;
}
if (local_2a0 != (Vector *)0x0) {
pcVar11 = (char *)local_2a0;
(**(code **)(local_2a0 + 0x54))(local_2a0,local_2a8,local_2a4,0,0,0);
}
LAB_00765d71:
uVar8 = 0;
LAB_00765d78:
iVar12 = _DAT_0105db00;
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar13 = ThreadGetCurrentId(pcVar11), iVar12 == iVar13)) {
pcVar11 = (char *)_DAT_0105d15c;
cVar7 = CVProfNode::ExitScope();
if (cVar7 != '\0') {
_DAT_0105d15c = *(Vector **)(_DAT_0105d15c + 100);
}
DAT_0105d158 = _DAT_0105d15c == (Vector *)0x105d160;
}
if (local_2f4 != (Vector *)0x0) {
pcVar11 = (char *)local_2f4;
(**(code **)(local_2f4 + 0x54))(local_2f4,local_2fc,local_2f8,0,0,0);
}
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail(pcVar11);
}
return uVar8;
}
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.