L L4D2node

LightDesc_t::ComputeNonincidenceLightAtPoints

0x00271550 · 521 bytes · __thiscall

_ZNK11LightDesc_t32ComputeNonincidenceLightAtPointsERK11FourVectorsRS0_

Decompiled

undefined (3 params)

/* LightDesc_t::ComputeNonincidenceLightAtPoints(FourVectors const&, FourVectors&) const */

void __thiscall
LightDesc_t::ComputeNonincidenceLightAtPoints
          (LightDesc_t *this,FourVectors *param_1,FourVectors *param_2)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  undefined4 uVar5;
  int iVar6;
  uint uVar7;
  float in_XMM0_Da;
  float in_XMM0_Db;
  float in_XMM0_Dc;
  float in_XMM0_Dd;
  undefined1 auVar8 [16];
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float in_XMM2_Da;
  float in_XMM2_Db;
  float in_XMM2_Dc;
  float in_XMM2_Dd;
  float fVar13;
  float in_XMM3_Da;
  float fVar14;
  float in_XMM3_Db;
  float fVar15;
  float in_XMM3_Dc;
  float fVar16;
  float in_XMM3_Dd;
  float fVar17;
  undefined1 auVar18 [16];
  undefined1 auVar19 [16];
  float fVar21;
  undefined1 auVar20 [16];
  undefined1 auVar22 [16];
  undefined1 auVar23 [16];
  float local_2c;
  float fStack_28;
  float fStack_24;
  float fStack_20;
  undefined1 local_1c [16];
  
  iVar6 = *(int *)this;
  if (iVar6 != 2) {
    if ((iVar6 == 3) || (iVar6 == 1)) {
      fVar9 = *(float *)(this + 0x10);
      fVar10 = *(float *)(this + 0x14);
      fVar11 = *(float *)(this + 0x18);
      in_XMM3_Da = fVar9 - *(float *)param_1;
      in_XMM3_Db = fVar9 - *(float *)(param_1 + 4);
      in_XMM3_Dc = fVar9 - *(float *)(param_1 + 8);
      in_XMM3_Dd = fVar9 - *(float *)(param_1 + 0xc);
      in_XMM2_Da = fVar10 - *(float *)(param_1 + 0x10);
      in_XMM2_Db = fVar10 - *(float *)(param_1 + 0x14);
      in_XMM2_Dc = fVar10 - *(float *)(param_1 + 0x18);
      in_XMM2_Dd = fVar10 - *(float *)(param_1 + 0x1c);
      in_XMM0_Da = fVar11 - *(float *)(param_1 + 0x20);
      in_XMM0_Db = fVar11 - *(float *)(param_1 + 0x24);
      in_XMM0_Dc = fVar11 - *(float *)(param_1 + 0x28);
      in_XMM0_Dd = fVar11 - *(float *)(param_1 + 0x2c);
    }
    uVar7 = *(uint *)(this + 0x50);
    auVar20._0_4_ = in_XMM0_Da * in_XMM0_Da + in_XMM2_Da * in_XMM2_Da + in_XMM3_Da * in_XMM3_Da;
    auVar20._4_4_ = in_XMM0_Db * in_XMM0_Db + in_XMM2_Db * in_XMM2_Db + in_XMM3_Db * in_XMM3_Db;
    auVar20._8_4_ = in_XMM0_Dc * in_XMM0_Dc + in_XMM2_Dc * in_XMM2_Dc + in_XMM3_Dc * in_XMM3_Dc;
    auVar20._12_4_ = in_XMM0_Dd * in_XMM0_Dd + in_XMM2_Dd * in_XMM2_Dd + in_XMM3_Dd * in_XMM3_Dd;
    fVar9 = Four_Ones._0_4_;
    fVar10 = Four_Ones._4_4_;
    fVar11 = Four_Ones._8_4_;
    fVar12 = Four_Ones._12_4_;
    auVar22 = maxps(Four_Ones,auVar20);
    auVar19 = Four_Epsilons;
    if ((uVar7 & 1) != 0) {
      uVar5 = *(undefined4 *)(this + 0x30);
      auVar19._4_4_ = uVar5;
      auVar19._0_4_ = uVar5;
      auVar19._8_4_ = uVar5;
      auVar19._12_4_ = uVar5;
    }
    auVar18 = auVar19;
    if ((uVar7 & 2) != 0) {
      auVar23 = sqrtps(auVar22,auVar22);
      fVar13 = *(float *)(this + 0x34);
      auVar18._0_4_ = auVar19._0_4_ + fVar13 * auVar23._0_4_;
      auVar18._4_4_ = auVar19._4_4_ + fVar13 * auVar23._4_4_;
      auVar18._8_4_ = auVar19._8_4_ + fVar13 * auVar23._8_4_;
      auVar18._12_4_ = auVar19._12_4_ + fVar13 * auVar23._12_4_;
    }
    local_2c = auVar22._0_4_;
    fStack_28 = auVar22._4_4_;
    fStack_24 = auVar22._8_4_;
    fStack_20 = auVar22._12_4_;
    auVar22 = auVar18;
    if ((uVar7 & 4) != 0) {
      fVar13 = *(float *)(this + 0x38);
      auVar22._0_4_ = auVar18._0_4_ + fVar13 * local_2c;
      auVar22._4_4_ = auVar18._4_4_ + fVar13 * fStack_28;
      auVar22._8_4_ = auVar18._8_4_ + fVar13 * fStack_24;
      auVar22._12_4_ = auVar18._12_4_ + fVar13 * fStack_20;
    }
    auVar19 = rcpps(auVar22,auVar22);
    auVar23 = auVar19;
    if (*(float *)(this + 0x28) != 0.0) {
      fVar13 = *(float *)(this + 0x54);
      auVar23._0_4_ = auVar19._0_4_ & -(uint)(local_2c < fVar13);
      auVar23._4_4_ = auVar19._4_4_ & -(uint)(fStack_28 < fVar13);
      auVar23._8_4_ = auVar19._8_4_ & -(uint)(fStack_24 < fVar13);
      auVar23._12_4_ = auVar19._12_4_ & -(uint)(fStack_20 < fVar13);
    }
    auVar19 = rsqrtps(auVar20,auVar20);
    fVar13 = auVar19._0_4_;
    fVar21 = auVar19._4_4_;
    fVar16 = auVar19._8_4_;
    fVar17 = auVar19._12_4_;
    if (iVar6 == 3) {
      fVar1 = *(float *)(this + 0x1c);
      fVar2 = *(float *)(this + 0x20);
      fVar3 = *(float *)(this + 0x24);
      fVar4 = *(float *)(this + 0x4c);
      fVar14 = (float)0 -
               (fVar3 * fVar13 * in_XMM0_Da +
               fVar2 * in_XMM2_Da * fVar13 + fVar1 * in_XMM3_Da * fVar13);
      fVar15 = (float)0 -
               (fVar3 * fVar21 * in_XMM0_Db +
               fVar2 * in_XMM2_Db * fVar21 + fVar1 * in_XMM3_Db * fVar21);
      fVar16 = (float)0 -
               (fVar3 * fVar16 * in_XMM0_Dc +
               fVar2 * in_XMM2_Dc * fVar16 + fVar1 * in_XMM3_Dc * fVar16);
      fVar17 = (float)0 -
               (fVar3 * fVar17 * in_XMM0_Dd +
               fVar2 * in_XMM2_Dd * fVar17 + fVar1 * in_XMM3_Dd * fVar17);
      fVar13 = *(float *)(this + 0x48);
      auVar8._0_4_ = fVar4 * (fVar14 - fVar13);
      auVar8._4_4_ = fVar4 * (fVar15 - fVar13);
      auVar8._8_4_ = fVar4 * (fVar16 - fVar13);
      auVar8._12_4_ = fVar4 * (fVar17 - fVar13);
      fVar21 = *(float *)(this + 0x2c);
      auVar19 = minps(auVar8,Four_Ones);
      if ((fVar21 != 0.0) && (fVar21 != 1.0)) {
        local_1c = auVar19;
        Pow_FixedPoint_Exponent_SIMD((_func_float_int **)local_1c,(int)(fVar21 * 4.0));
        fVar13 = *(float *)(this + 0x48);
      }
      fVar9 = (float)(-(uint)(fVar13 < fVar14) & (uint)(auVar19._0_4_ * fVar9));
      fVar10 = (float)(-(uint)(fVar13 < fVar15) & (uint)(auVar19._4_4_ * fVar10));
      fVar11 = (float)(-(uint)(fVar13 < fVar16) & (uint)(auVar19._8_4_ * fVar11));
      fVar12 = (float)(-(uint)(fVar13 < fVar17) & (uint)(auVar19._12_4_ * fVar12));
    }
    fVar9 = auVar23._0_4_ * fVar9;
    fVar10 = auVar23._4_4_ * fVar10;
    fVar11 = auVar23._8_4_ * fVar11;
    fVar12 = auVar23._12_4_ * fVar12;
    fVar13 = *(float *)(this + 4);
    *(float *)param_2 = fVar13 * fVar9 + *(float *)param_2;
    *(float *)(param_2 + 4) = fVar13 * fVar10 + *(float *)(param_2 + 4);
    *(float *)(param_2 + 8) = fVar13 * fVar11 + *(float *)(param_2 + 8);
    *(float *)(param_2 + 0xc) = fVar13 * fVar12 + *(float *)(param_2 + 0xc);
    fVar13 = *(float *)(this + 8);
    *(float *)(param_2 + 0x10) = fVar13 * fVar9 + *(float *)(param_2 + 0x10);
    *(float *)(param_2 + 0x14) = fVar13 * fVar10 + *(float *)(param_2 + 0x14);
    *(float *)(param_2 + 0x18) = fVar13 * fVar11 + *(float *)(param_2 + 0x18);
    *(float *)(param_2 + 0x1c) = fVar13 * fVar12 + *(float *)(param_2 + 0x1c);
    fVar13 = *(float *)(this + 0xc);
    *(float *)(param_2 + 0x20) = fVar13 * fVar9 + *(float *)(param_2 + 0x20);
    *(float *)(param_2 + 0x24) = fVar13 * fVar10 + *(float *)(param_2 + 0x24);
    *(float *)(param_2 + 0x28) = fVar13 * fVar11 + *(float *)(param_2 + 0x28);
    *(float *)(param_2 + 0x2c) = fVar13 * fVar12 + *(float *)(param_2 + 0x2c);
  }
  return;
}

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)