L L4D2node

IsBoxIntersectingRay

0x00589ec0 · 307 bytes · __regparm2

_Z20IsBoxIntersectingRayRK6VectorS1_S1_S1_f

Decompiled

undefined (5 params)

/* IsBoxIntersectingRay(Vector const&, Vector const&, Vector const&, Vector const&, float) */

undefined4 __regparm2
IsBoxIntersectingRay(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,float param_5)

{
  undefined4 uVar1;
  int iVar2;
  float fVar3;
  float fVar5;
  float fVar6;
  float fVar7;
  undefined1 auVar4 [16];
  float fVar8;
  float fVar10;
  float fVar11;
  float fVar12;
  undefined1 auVar9 [16];
  undefined1 auVar13 [16];
  undefined1 auVar14 [16];
  undefined1 auVar15 [16];
  undefined1 auVar16 [16];
  undefined1 auVar17 [16];
  float fVar18;
  float fVar23;
  float fVar24;
  undefined1 auVar19 [16];
  float fVar25;
  undefined1 auVar20 [16];
  undefined1 auVar21 [16];
  undefined1 auVar22 [16];
  uint uVar26;
  uint uVar29;
  uint uVar30;
  uint uVar31;
  undefined1 auVar27 [16];
  undefined1 auVar28 [16];
  undefined1 (*in_stack_00000010) [16];
  float in_stack_00000014;
  
  auVar19 = *in_stack_00000010;
  fVar18 = auVar19._12_4_;
  fVar23 = auVar19._0_4_;
  fVar24 = auVar19._4_4_;
  fVar25 = auVar19._8_4_;
  fVar8 = (*(float *)param_3 - *(float *)param_5) - in_stack_00000014;
  fVar10 = (*(float *)(param_3 + 4) - *(float *)((int)param_5 + 4)) - in_stack_00000014;
  fVar11 = (*(float *)(param_3 + 8) - *(float *)((int)param_5 + 8)) - in_stack_00000014;
  fVar12 = (*(float *)(param_3 + 0xc) - *(float *)((int)param_5 + 0xc)) - in_stack_00000014;
  uVar1 = 0;
  fVar3 = (*(float *)param_4 - *(float *)param_5) + in_stack_00000014;
  fVar5 = (*(float *)(param_4 + 4) - *(float *)((int)param_5 + 4)) + in_stack_00000014;
  fVar6 = (*(float *)(param_4 + 8) - *(float *)((int)param_5 + 8)) + in_stack_00000014;
  fVar7 = (*(float *)(param_4 + 0xc) - *(float *)((int)param_5 + 0xc)) + in_stack_00000014;
  auVar15._0_4_ =
       -(uint)(fVar23 < fVar8) & -(uint)((float)0 < fVar8) |
       -(uint)(fVar3 < (float)0) & -(uint)(fVar3 < fVar23);
  auVar15._4_4_ =
       -(uint)(fVar24 < fVar10) & -(uint)((float)0 < fVar10) |
       -(uint)(fVar5 < (float)0) & -(uint)(fVar5 < fVar24);
  auVar15._8_4_ =
       -(uint)(fVar25 < fVar11) & -(uint)((float)0 < fVar11) |
       -(uint)(fVar6 < (float)0) & -(uint)(fVar6 < fVar25);
  auVar15._12_4_ = 0;
  iVar2 = movmskps(param_2,auVar15);
  if (iVar2 == 0) {
    uVar26 = -(uint)((float)0 < fVar8) ^ -(uint)(fVar23 < fVar8) |
             -(uint)(fVar3 < fVar23) ^ -(uint)(fVar3 < (float)0);
    uVar29 = -(uint)((float)0 < fVar10) ^ -(uint)(fVar24 < fVar10) |
             -(uint)(fVar5 < fVar24) ^ -(uint)(fVar5 < (float)0);
    uVar30 = -(uint)((float)0 < fVar11) ^ -(uint)(fVar25 < fVar11) |
             -(uint)(fVar6 < fVar25) ^ -(uint)(fVar6 < (float)0);
    uVar31 = -(uint)(fVar7 < (float)0 != fVar7 < fVar18 || fVar18 < fVar12 != (float)0 < fVar12);
    auVar13._0_8_ =
         CONCAT44(-(uint)(fVar24 == (float)0),-(uint)(fVar23 == (float)0)) & 0x3400000034000000;
    auVar13._8_4_ = -(uint)(fVar25 == (float)0) & 0x34000000;
    auVar13._12_4_ = -(uint)(fVar18 == (float)0) & 0x34000000;
    auVar13 = auVar13 | auVar19;
    auVar19 = rcpps(auVar19,auVar13);
    fVar18 = auVar19._0_4_;
    fVar23 = auVar19._4_4_;
    fVar24 = auVar19._8_4_;
    fVar25 = auVar19._12_4_;
    fVar18 = (fVar18 + fVar18) - fVar18 * fVar18 * auVar13._0_4_;
    fVar23 = (fVar23 + fVar23) - fVar23 * fVar23 * auVar13._4_4_;
    fVar24 = (fVar24 + fVar24) - fVar24 * fVar24 * auVar13._8_4_;
    fVar25 = (fVar25 + fVar25) - fVar25 * fVar25 * auVar13._12_4_;
    auVar19._0_8_ = CONCAT44(~uVar29,~uVar26) & 0xff7fffffff7fffff;
    auVar19._8_4_ = ~uVar30 & 0xff7fffff;
    auVar19._12_4_ = ~uVar31 & 0xff7fffff;
    auVar9._0_4_ = (uint)(fVar8 * fVar18) & uVar26;
    auVar9._4_4_ = (uint)(fVar10 * fVar23) & uVar29;
    auVar9._8_4_ = (uint)(fVar11 * fVar24) & uVar30;
    auVar9._12_4_ = (uint)(fVar12 * fVar25) & uVar31;
    auVar20._0_4_ = (uint)(fVar18 * fVar3) & uVar26;
    auVar20._4_4_ = (uint)(fVar23 * fVar5) & uVar29;
    auVar20._8_4_ = (uint)(fVar24 * fVar6) & uVar30;
    auVar20._12_4_ = (uint)(fVar25 * fVar7) & uVar31;
    auVar21._0_8_ = CONCAT44(~uVar29,~uVar26) & 0x7f7fffff7f7fffff;
    auVar21._8_4_ = ~uVar30 & 0x7f7fffff;
    auVar21._12_4_ = ~uVar31 & 0x7f7fffff;
    auVar27 = minps(auVar9 | auVar19,auVar20 | auVar21);
    auVar21 = maxps(auVar20 | auVar21,auVar9 | auVar19);
    auVar4._0_12_ = auVar27._4_12_;
    auVar4._12_4_ = auVar27._0_4_;
    auVar19 = maxps(auVar4,auVar27);
    auVar14._0_12_ = auVar21._4_12_;
    auVar14._12_4_ = auVar21._0_4_;
    auVar15 = minps(auVar14,auVar21);
    auVar28._0_8_ = auVar27._8_8_;
    auVar28._8_4_ = auVar27._0_4_;
    auVar28._12_4_ = auVar27._4_4_;
    auVar22._0_8_ = auVar21._8_8_;
    auVar22._8_4_ = auVar21._0_4_;
    auVar22._12_4_ = auVar21._4_4_;
    auVar19 = maxps(auVar19,auVar28);
    auVar15 = minps(auVar15,auVar22);
    auVar27._0_4_ = auVar19._0_4_;
    auVar27._4_4_ = auVar27._0_4_;
    auVar27._8_4_ = auVar27._0_4_;
    auVar27._12_4_ = auVar27._0_4_;
    auVar19 = maxps(auVar27,Four_Zeros);
    auVar16._0_4_ = auVar15._0_4_;
    auVar16._4_4_ = auVar16._0_4_;
    auVar16._8_4_ = auVar16._0_4_;
    auVar16._12_4_ = auVar16._0_4_;
    auVar15 = minps(auVar16,Four_Ones);
    auVar17._4_4_ = -(uint)((float)-(uint)(auVar15._4_4_ < auVar19._4_4_) == (float)0);
    auVar17._0_4_ = -(uint)((float)-(uint)(auVar15._0_4_ < auVar19._0_4_) == (float)0);
    auVar17._8_4_ = -(uint)((float)-(uint)(auVar15._8_4_ < auVar19._8_4_) == (float)0);
    auVar17._12_4_ = -(uint)((float)-(uint)(auVar15._12_4_ < auVar19._12_4_) == (float)0);
    iVar2 = movmskps(0,auVar17);
    uVar1 = CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 0xf);
  }
  return uVar1;
}

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)