UTIL_IsGroundLevel
0x00b2f530 · 1156 bytes · __cdecl
_Z18UTIL_IsGroundLevelfRK6VectorfiPK11CBaseEntityb
Decompiled
undefined (6 params)
/* UTIL_IsGroundLevel(float, Vector const&, float, int, CBaseEntity const*, bool) */
undefined1
UTIL_IsGroundLevel(float param_1,Vector *param_2,float param_3,int param_4,CBaseEntity *param_5,
bool param_6)
{
float *pfVar1;
int iVar2;
Vector *pVVar3;
char *pcVar4;
int iVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
float local_3b8;
Vector *local_3b0;
int local_3a8;
undefined4 local_388;
undefined4 local_384;
float local_380;
float local_37c;
float local_378;
undefined4 local_374;
float local_36c;
float local_368;
float local_364;
undefined4 local_35c;
undefined4 local_358;
float local_354;
float local_34c;
float local_348;
undefined4 local_344;
float local_33c;
float local_338;
undefined4 local_334;
undefined4 local_32c;
undefined1 local_328;
undefined1 local_327;
Vector local_310 [20];
float local_2fc [8];
char local_2d9 [701];
Vector local_1c [12];
local_3b0 = local_310;
local_3b8 = -param_1;
do {
local_3a8 = 3;
fVar9 = param_1 * 0.6666667 + local_3b8;
fVar10 = (fVar9 - local_3b8) * 0.5;
fVar7 = (fVar9 + local_3b8) * 0.5;
pVVar3 = local_3b0;
fVar6 = -param_1;
do {
local_35c = 0;
local_358 = 0;
local_364 = param_3 + *(float *)(param_2 + 8);
local_32c = 0;
fVar8 = param_1 * 0.6666667 + fVar6;
local_334 = 0x40a00000;
local_344 = 0xc0a00000;
local_368 = *(float *)(param_2 + 4) + fVar7;
local_354 = (*(float *)(param_2 + 8) - 100.0) - local_364;
local_364 = local_364 + 5.0;
local_327 = local_354 * local_354 != 0.0;
local_33c = (fVar8 - fVar6) * 0.5;
local_328 = local_33c * local_33c + fVar10 * fVar10 + 25.0 < 1e-06;
local_34c = (fVar8 + fVar6) * 0.5;
local_36c = *(float *)param_2 + local_34c;
local_34c = -local_34c;
local_348 = -fVar7;
local_338 = fVar10;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)&local_37c,(IHandleEntity *)param_5,8,
(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_36c,param_4,(CTraceFilterSimple *)&local_37c,pVVar3);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(pVVar3,pVVar3 + 0xc,0xff,0xff,0,true,-1.0);
}
if (param_6) {
local_388 = *(undefined4 *)param_2;
local_384 = *(undefined4 *)(param_2 + 4);
local_364 = 10.0;
local_380 = param_3 + *(float *)(param_2 + 8);
local_378 = local_3b8;
local_374 = 0;
local_37c = fVar6;
local_36c = fVar8;
local_368 = fVar9;
NDebugOverlay::SweptBox
((Vector *)&local_388,pVVar3 + 0xc,(Vector *)&local_37c,(Vector *)&local_36c,
(QAngle *)&vec3_angle,0xff,0xff,0,0xff,5.0);
}
pVVar3 = pVVar3 + 0x54;
local_3a8 = local_3a8 + -1;
fVar6 = fVar8;
} while (local_3a8 != 0);
local_3b0 = local_3b0 + 0xfc;
local_3b8 = fVar9;
} while (local_3b0 != local_1c);
pcVar4 = local_2d9;
iVar5 = 0;
do {
if (*pcVar4 != '\0') {
return 0;
}
if ((*(float *)(pcVar4 + -0xb) <= 1.0 && *(float *)(pcVar4 + -0xb) != 1.0) ||
(pcVar4[-1] != '\0')) {
if (*(float *)(pcVar4 + -0x17) <= 0.9 && *(float *)(pcVar4 + -0x17) != 0.9) {
return 0;
}
pfVar1 = local_2fc;
iVar2 = 0;
do {
if ((iVar5 != iVar2) && (10.0 < ABS(*(float *)(pcVar4 + -0x23) - *pfVar1))) {
return 0;
}
iVar2 = iVar2 + 1;
pfVar1 = pfVar1 + 0x15;
} while (iVar2 != 9);
}
iVar5 = iVar5 + 1;
pcVar4 = pcVar4 + 0x54;
if (iVar5 == 9) {
return 1;
}
} while( true );
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.