L L4D2node

IntersectRayWithBox

0x0058a880 · 277 bytes · __cdecl

_Z19IntersectRayWithBoxRK6VectorS1_S1_S1_fP14BoxTraceInfo_t

Decompiled

undefined (6 params)

/* IntersectRayWithBox(Vector const&, Vector const&, Vector const&, Vector const&, float,
   BoxTraceInfo_t*) */

BoxTraceInfo_t
IntersectRayWithBox(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,float param_5,
                   BoxTraceInfo_t *param_6)

{
  bool bVar1;
  int iVar2;
  Vector *pVVar3;
  Vector *pVVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  
  pVVar3 = param_1 + -0xc;
  *(undefined4 *)param_6 = 0xbf800000;
  *(undefined4 *)(param_6 + 4) = 0x3f800000;
  *(undefined4 *)(param_6 + 8) = 0xffffffff;
  pVVar4 = param_2 + -0xc;
  param_6[0xc] = (BoxTraceInfo_t)0x1;
  iVar2 = 0;
  do {
    if (iVar2 < 3) {
      fVar5 = *(float *)(param_3 + iVar2 * 4) - *(float *)(pVVar3 + 0xc);
      fVar6 = fVar5 - *(float *)(pVVar4 + 0xc);
    }
    else {
      fVar5 = *(float *)pVVar3 - *(float *)(param_4 + iVar2 * 4 + -0xc);
      fVar6 = *(float *)pVVar4 + fVar5;
    }
    bVar1 = 0.0 < fVar5;
    if ((0.0 < fVar6) && (bVar1 = false, 0.0 < fVar5)) {
      param_6[0xc] = (BoxTraceInfo_t)0x0;
      return (BoxTraceInfo_t)0x0;
    }
    if ((0.0 < fVar6) || (0.0 < fVar5)) {
      if (bVar1) {
        param_6[0xc] = (BoxTraceInfo_t)0x0;
      }
      if (fVar5 <= fVar6) {
        fVar5 = (fVar5 + param_5) / (fVar5 - fVar6);
        if (fVar5 < *(float *)(param_6 + 4)) {
          *(float *)(param_6 + 4) = fVar5;
        }
      }
      else {
        fVar7 = fVar5 - param_5;
        if (fVar7 <= 0.0) {
          fVar7 = 0.0;
        }
        fVar7 = fVar7 / (fVar5 - fVar6);
        if (*(float *)param_6 <= fVar7 && fVar7 != *(float *)param_6) {
          *(float *)param_6 = fVar7;
          *(int *)(param_6 + 8) = iVar2;
        }
      }
    }
    iVar2 = iVar2 + 1;
    pVVar3 = pVVar3 + 4;
    pVVar4 = pVVar4 + 4;
  } while (iVar2 != 6);
  if ((param_6[0xc] == (BoxTraceInfo_t)0x0) && (*(float *)param_6 < *(float *)(param_6 + 4))) {
    return (BoxTraceInfo_t)(0.0 <= *(float *)param_6);
  }
  return param_6[0xc];
}

SourceMod gamedata

paste into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)