L L4D2node

CCoreDispInfo::CalcRayBoundingBoxes

0x000be9c0 · 368 bytes · __thiscall

_ZN13CCoreDispInfo20CalcRayBoundingBoxesEiPA3_i

Decompiled

undefined (3 params)

/* CCoreDispInfo::CalcRayBoundingBoxes(int, int (*) [3]) */

void __thiscall CCoreDispInfo::CalcRayBoundingBoxes(CCoreDispInfo *this,int param_1,int *param_2)

{
  float *pfVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float local_28;
  float local_24;
  float local_20;
  float local_1c;
  float local_18;
  float local_14;
  
  iVar5 = 0;
  do {
    iVar3 = *(int *)(this + 0x1b8);
    iVar2 = *param_2 * 0x90 + iVar3;
    fVar9 = *(float *)(iVar2 + 0x28);
    fVar12 = *(float *)(iVar2 + 0x2c);
    local_18 = *(float *)(iVar2 + 0x30);
    iVar2 = 0;
    fVar11 = fVar9;
    local_28 = fVar12;
    local_24 = local_18;
    local_20 = fVar9;
    local_1c = fVar12;
    local_14 = local_18;
    while( true ) {
      iVar4 = iVar2 + 3;
      iVar2 = iVar2 + 1;
      iVar4 = param_2[iVar4] * 0x90 + iVar3;
      fVar6 = *(float *)(iVar4 + 0x28);
      fVar7 = *(float *)(iVar4 + 0x2c);
      fVar10 = fVar6;
      if (fVar6 <= fVar9) {
        fVar10 = fVar9;
      }
      if (fVar9 <= fVar6) {
        fVar6 = fVar9;
      }
      if (fVar11 <= fVar10) {
        fVar11 = fVar10;
      }
      if (local_20 <= fVar6) {
        fVar6 = local_20;
      }
      fVar10 = fVar7;
      if (fVar7 <= fVar12) {
        fVar10 = fVar12;
      }
      if (fVar12 <= fVar7) {
        fVar7 = fVar12;
      }
      if (fVar10 <= local_28) {
        fVar10 = local_28;
      }
      if (local_1c <= fVar7) {
        fVar7 = local_1c;
      }
      fVar9 = *(float *)(iVar4 + 0x30);
      fVar8 = fVar9;
      if (fVar9 <= local_14) {
        fVar8 = local_14;
        local_14 = fVar9;
      }
      if (local_14 <= local_18) {
        local_18 = local_14;
      }
      if (fVar8 <= local_24) {
        fVar8 = local_24;
      }
      if (iVar2 == 3) break;
      iVar4 = param_2[iVar2] * 0x90 + iVar3;
      local_14 = *(float *)(iVar4 + 0x30);
      fVar9 = *(float *)(iVar4 + 0x28);
      fVar12 = *(float *)(iVar4 + 0x2c);
      local_28 = fVar10;
      local_24 = fVar8;
      local_20 = fVar6;
      local_1c = fVar7;
    }
    iVar2 = iVar5 * 0x18;
    iVar5 = iVar5 + 1;
    param_2 = param_2 + 6;
    iVar3 = *(int *)(this + 4) + param_1 * 0x200;
    pfVar1 = (float *)(iVar3 + 0x1a0 + iVar2);
    *pfVar1 = fVar6;
    pfVar1[1] = fVar7;
    pfVar1[2] = local_18;
    pfVar1 = (float *)(iVar3 + 0x1ac + iVar2);
    *pfVar1 = fVar11;
    pfVar1[1] = fVar10;
    pfVar1[2] = fVar8;
  } while (iVar5 != 4);
  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)