L L4D2node

IntersectRayWithBox

0x0058a9b0 · 604 bytes · __cdecl

_Z19IntersectRayWithBoxRK6VectorS1_S1_S1_fP10CBaseTracePf

Decompiled

undefined (7 params)

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

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

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  undefined4 uVar5;
  char cVar6;
  float local_20;
  float local_1c;
  int local_18;
  CBaseTrace local_14;
  
  *(undefined4 *)param_6 = *(undefined4 *)param_1;
  *(undefined4 *)(param_6 + 4) = *(undefined4 *)(param_1 + 4);
  *(undefined4 *)(param_6 + 8) = *(undefined4 *)(param_1 + 8);
  fVar1 = *(float *)param_1;
  *(float *)(param_6 + 0xc) = fVar1;
  fVar2 = *(float *)(param_1 + 4);
  *(float *)(param_6 + 0x10) = fVar2;
  fVar3 = *(float *)(param_1 + 8);
  *(float *)(param_6 + 0x14) = fVar3;
  *(float *)(param_6 + 0xc) = fVar1 + *(float *)param_2;
  *(float *)(param_6 + 0x10) = fVar2 + *(float *)(param_2 + 4);
  fVar1 = *(float *)(param_2 + 8);
  param_6[0x37] = (CBaseTrace)0x0;
  param_6[0x36] = (CBaseTrace)0x0;
  *(undefined4 *)(param_6 + 0x2c) = 0x3f800000;
  *(float *)(param_6 + 0x14) = fVar3 + fVar1;
  *(undefined4 *)(param_6 + 0x30) = 0;
  cVar6 = IntersectRayWithBox(param_1,param_2,param_3,param_4,param_5,(BoxTraceInfo_t *)&local_20);
  if (cVar6 != '\0') {
    param_6[0x37] = local_14;
    if ((local_20 < local_1c) && (0.0 <= local_20)) {
      *(float *)(param_6 + 0x2c) = local_20;
      *(float *)(param_6 + 0xc) = *(float *)param_2 * local_20 + *(float *)param_6;
      *(float *)(param_6 + 0x10) = *(float *)(param_2 + 4) * local_20 + *(float *)(param_6 + 4);
      uVar5 = vec3_origin;
      fVar1 = *(float *)(param_2 + 8);
      *(undefined4 *)(param_6 + 0x30) = 1;
      *(undefined4 *)(param_6 + 0x18) = uVar5;
      *(undefined4 *)(param_6 + 0x1c) = DAT_01053d4c;
      *(undefined4 *)(param_6 + 0x20) = DAT_01053d50;
      *(float *)(param_6 + 0x14) = local_20 * fVar1 + *(float *)(param_6 + 8);
      if (2 < local_18) {
        local_18 = local_18 + -3;
        *(undefined4 *)(param_6 + 0x24) = *(undefined4 *)(param_4 + local_18 * 4);
        *(undefined4 *)(param_6 + local_18 * 4 + 0x18) = 0x3f800000;
        param_6[0x28] = SUB41(local_18,0);
        return (CBaseTrace)0x1;
      }
      *(uint *)(param_6 + 0x24) = *(uint *)(param_3 + local_18 * 4) ^ 0x80000000;
      *(undefined4 *)(param_6 + local_18 * 4 + 0x18) = 0xbf800000;
      param_6[0x28] = SUB41(local_18,0);
      return (CBaseTrace)0x1;
    }
    if (local_14 != (CBaseTrace)0x0) {
      param_6[0x36] = (CBaseTrace)(local_1c <= 0.0 || 1.0 <= local_1c);
      *(undefined4 *)(param_6 + 0x2c) = 0;
      if (param_7 != (float *)0x0) {
        *param_7 = local_1c;
      }
      *(undefined4 *)(param_6 + 0x30) = 1;
      *(undefined4 *)(param_6 + 0x18) = 0x3f800000;
      *(undefined4 *)(param_6 + 0x10) = *(undefined4 *)(param_6 + 4);
      *(undefined4 *)(param_6 + 0xc) = *(undefined4 *)param_6;
      *(undefined4 *)(param_6 + 0x14) = *(undefined4 *)(param_6 + 8);
      *(undefined4 *)(param_6 + 0x24) = *(undefined4 *)param_6;
      *(undefined4 *)(param_6 + 0x1c) = 0;
      *(undefined4 *)(param_6 + 0x20) = 0;
      param_6[0x28] = (CBaseTrace)0x0;
      fVar1 = *(float *)(param_2 + 8);
      fVar2 = *(float *)param_2;
      fVar3 = *(float *)(param_1 + 8);
      fVar4 = *(float *)param_1;
      *(float *)(param_6 + 4) = *(float *)(param_2 + 4) * local_1c + *(float *)(param_1 + 4);
      *(float *)(param_6 + 8) = fVar1 * local_1c + fVar3;
      *(float *)param_6 = local_1c * fVar2 + fVar4;
      return local_14;
    }
  }
  return (CBaseTrace)0x0;
}

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)