L L4D2node

IsBoxIntersectingRayNoLowest

0x0011c250 · 256 bytes · __regparm2

_Z28IsBoxIntersectingRayNoLowestU8__vectorfS_RKS_S1_S1_S1_

Decompiled

undefined (6 params)

/* IsBoxIntersectingRayNoLowest(float __vector(4), float __vector(4), float __vector(4) const&,
   float __vector(4) const&, float __vector(4) const&, float __vector(4) const&) */

undefined4 __regparm2
IsBoxIntersectingRayNoLowest
          (_func_float_int *param_1,_func_float_int *param_2,_func_float_int **param_3,
          _func_float_int **param_4,_func_float_int **param_5,_func_float_int **param_6)

{
  _func_float_int *p_Var1;
  _func_float_int *p_Var2;
  _func_float_int *p_Var3;
  int iVar4;
  float in_XMM0_Da;
  float fVar5;
  float in_XMM0_Db;
  float fVar7;
  float in_XMM0_Dc;
  float fVar8;
  float in_XMM0_Dd;
  undefined1 auVar6 [16];
  float in_XMM1_Da;
  float fVar9;
  float in_XMM1_Db;
  float fVar12;
  float in_XMM1_Dc;
  float fVar13;
  float in_XMM1_Dd;
  undefined1 auVar10 [16];
  undefined1 auVar11 [16];
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined1 auVar17 [16];
  uint uVar18;
  uint uVar20;
  uint uVar21;
  undefined1 auVar19 [16];
  float local_1c;
  float fStack_18;
  float fStack_14;
  
  uVar14 = -(uint)(-1.1920929e-07 <= (float)*param_4 && (float)*param_4 <= (float)0x34000000);
  uVar15 = -(uint)(-1.1920929e-07 <= (float)param_4[1] && (float)param_4[1] <= (float)0x34000000);
  uVar16 = -(uint)(-1.1920929e-07 <= (float)param_4[2] && (float)param_4[2] <= (float)0x34000000);
  fVar5 = in_XMM0_Da - (float)*param_6;
  fVar7 = in_XMM0_Db - (float)param_6[1];
  fVar8 = in_XMM0_Dc - (float)param_6[2];
  fVar9 = in_XMM1_Da + (float)*param_6;
  fVar12 = in_XMM1_Db + (float)param_6[1];
  fVar13 = in_XMM1_Dc + (float)param_6[2];
  p_Var1 = *param_3;
  p_Var2 = param_3[1];
  p_Var3 = param_3[2];
  uVar18 = -(uint)((float)p_Var1 < fVar5 || fVar9 < (float)p_Var1);
  uVar20 = -(uint)((float)p_Var2 < fVar7 || fVar12 < (float)p_Var2);
  uVar21 = -(uint)((float)p_Var3 < fVar8 || fVar13 < (float)p_Var3);
  auVar6._0_8_ = CONCAT44((fVar7 - (float)p_Var2) * (float)param_5[1],
                          (fVar5 - (float)p_Var1) * (float)*param_5);
  auVar6._8_4_ = (fVar8 - (float)p_Var3) * (float)param_5[2];
  auVar6._12_4_ = ((in_XMM0_Dd - (float)param_6[3]) - (float)param_3[3]) * (float)param_5[3];
  auVar10._0_4_ = (fVar9 - (float)p_Var1) * (float)*param_5;
  auVar10._4_4_ = (fVar12 - (float)p_Var2) * (float)param_5[1];
  auVar10._8_4_ = (fVar13 - (float)p_Var3) * (float)param_5[2];
  auVar10._12_4_ = ((in_XMM1_Dd + (float)param_6[3]) - (float)param_3[3]) * (float)param_5[3];
  auVar17._8_4_ = auVar6._8_4_;
  auVar17._0_8_ = auVar6._0_8_;
  auVar17._12_4_ = auVar6._12_4_;
  auVar17 = maxps(auVar17,auVar10);
  auVar6 = minps(auVar6,auVar10);
  auVar11._4_4_ = -(uint)((float)(uVar20 & uVar15) == (float)0);
  auVar11._0_4_ = -(uint)((float)(uVar18 & uVar14) == (float)0);
  auVar11._8_4_ = -(uint)((float)(uVar21 & uVar16) == (float)0);
  auVar11._12_4_ = 0xffffffff;
  fStack_18 = auVar17._4_4_;
  iVar4 = movmskps(param_2,auVar11);
  local_1c = auVar17._0_4_;
  if (local_1c <= fStack_18) {
    fStack_18 = local_1c;
  }
  fStack_14 = auVar17._8_4_;
  fVar5 = fStack_18;
  if (fStack_14 <= fStack_18) {
    fVar5 = fStack_14;
  }
  fStack_18 = auVar6._4_4_;
  local_1c = auVar6._0_4_;
  if (fStack_18 <= local_1c) {
    fStack_18 = local_1c;
  }
  fStack_14 = auVar6._8_4_;
  if (fStack_18 <= fStack_14) {
    fStack_18 = fStack_14;
  }
  if (iVar4 != 0xf) {
    return 0;
  }
  auVar19._4_4_ =
       -(uint)((float)(~(~uVar20 & uVar15) &
                      -(uint)(((float)0x3f800000 < fStack_18 || fVar5 < (float)0) ||
                             fVar5 < fStack_18)) == (float)0);
  auVar19._0_4_ =
       -(uint)((float)(~(~uVar18 & uVar14) &
                      -(uint)(((float)0x3f800000 < fStack_18 || fVar5 < (float)0) ||
                             fVar5 < fStack_18)) == (float)0);
  auVar19._8_4_ =
       -(uint)((float)(~(~uVar21 & uVar16) &
                      -(uint)(((float)0x3f800000 < fStack_18 || fVar5 < (float)0) ||
                             fVar5 < fStack_18)) == (float)0);
  auVar19._12_4_ = 0xffffffff;
  iVar4 = movmskps(0,auVar19);
  return CONCAT31((int3)((uint)iVar4 >> 8),iVar4 == 0xf);
}

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)