L L4D2node

ScratchPad_DrawLitCone

0x00594500 · 1794 bytes · __cdecl

_Z22ScratchPad_DrawLitConeP13IScratchPad3DRK6VectorS3_S3_S3_S3_fi

Decompiled

undefined (8 params)

/* ScratchPad_DrawLitCone(IScratchPad3D*, Vector const&, Vector const&, Vector const&, Vector
   const&, Vector const&, float, int) */

void ScratchPad_DrawLitCone
               (IScratchPad3D *param_1,Vector *param_2,Vector *param_3,Vector *param_4,
               Vector *param_5,Vector *param_6,float param_7,int param_8)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  float *pfVar9;
  undefined4 *puVar10;
  int iVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  CUtlMemory<CSPVert,int> *local_c8;
  float local_ac;
  float local_a8;
  float local_a4;
  int local_a0;
  float local_84;
  float local_80 [3];
  float local_74;
  float local_70;
  float local_6c;
  float local_68;
  float local_64;
  float local_60;
  float local_5c;
  float local_58;
  float local_54;
  float local_50;
  float local_4c;
  float local_48;
  int local_44 [5];
  undefined4 *local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 *local_20;
  
  local_74 = *(float *)param_3 - *(float *)param_2;
  local_70 = *(float *)(param_3 + 4) - *(float *)(param_2 + 4);
  local_6c = *(float *)(param_3 + 8) - *(float *)(param_2 + 8);
  VectorNormalize((Vector *)&local_74);
  VectorVectors((Vector *)&local_74,(Vector *)&local_68,(Vector *)&local_5c);
  local_44[0] = 0;
  local_44[1] = 0;
  local_44[2] = 0;
  local_44[3] = 0;
  local_68 = local_68 * param_7;
  local_44[4] = 0;
  local_30 = (undefined4 *)0x0;
  local_2c = 0;
  local_28 = 0;
  local_24 = 0;
  local_64 = local_64 * param_7;
  local_20 = (undefined4 *)0x0;
  local_60 = local_60 * param_7;
  local_5c = local_5c * param_7;
  local_58 = local_58 * param_7;
  local_54 = param_7 * local_54;
  if (param_8 != 0) {
    CUtlVector<CSPVert,CUtlMemory<CSPVert,int>>::GrowVector
              ((CUtlVector<CSPVert,CUtlMemory<CSPVert,int>> *)local_44,param_8);
    CUtlVector<CSPVert,CUtlMemory<CSPVert,int>>::ShiftElementsRight
              ((CUtlVector<CSPVert,CUtlMemory<CSPVert,int>> *)local_44,0,param_8);
    if (0 < param_8) {
      iVar11 = local_44[0];
      do {
        if (iVar11 != 0) {
          *(undefined4 *)(iVar11 + 0x18) = 0x3f800000;
        }
        iVar11 = iVar11 + 0x1c;
      } while (iVar11 != param_8 * 0x1c + local_44[0]);
    }
  }
  local_c8 = (CUtlMemory<CSPVert,int> *)local_44;
  local_24 = 0;
  CUtlVector<CSPVert,CUtlMemory<CSPVert,int>>::GrowVector
            ((CUtlVector<CSPVert,CUtlMemory<CSPVert,int>> *)&local_30,3);
                    /* try { // try from 00594657 to 00594bc9 has its CatchHandler @ 00594c09 */
  CUtlVector<CSPVert,CUtlMemory<CSPVert,int>>::ShiftElementsRight
            ((CUtlVector<CSPVert,CUtlMemory<CSPVert,int>> *)&local_30,0,3);
  if (local_30 == (undefined4 *)0x0) {
    puVar10 = (undefined4 *)0x1c;
  }
  else {
    local_30[6] = 0x3f800000;
    puVar10 = local_30 + 7;
    if (puVar10 == (undefined4 *)0x0) goto LAB_0059467c;
  }
  puVar10[6] = 0x3f800000;
LAB_0059467c:
  if (local_30 != (undefined4 *)0xffffffc8) {
    local_30[0x14] = 0x3f800000;
  }
  fVar1 = *(float *)param_5;
  fVar2 = *(float *)param_4;
  fVar12 = (local_74 * *(float *)param_6 + local_70 * *(float *)(param_6 + 4) + 1.0 +
           local_6c * *(float *)(param_6 + 8)) * 0.5;
  fVar3 = *(float *)(param_4 + 4);
  fVar4 = *(float *)(param_4 + 8);
  fVar5 = *(float *)(param_5 + 4);
  local_a8 = *(float *)(param_2 + 4);
  fVar6 = *(float *)(param_5 + 8);
  local_a4 = *(float *)param_2;
  fVar16 = local_68 + local_a4;
  fVar17 = local_64 + local_a8;
  local_ac = *(float *)(param_2 + 8);
  fVar19 = local_60 + local_ac;
  if (0 < param_8) {
    iVar11 = 0;
    local_a0 = 0;
    while( true ) {
      fVar15 = local_60;
      fVar14 = local_64;
      fVar13 = local_68;
      iVar11 = iVar11 + 1;
      sincosf((float)iVar11 * 6.2831855 * (1.0 / (float)param_8),local_80,&local_84);
      local_a4 = local_5c * local_80[0] + fVar13 * local_84 + local_a4;
      local_a8 = local_58 * local_80[0] + fVar14 * local_84 + local_a8;
      local_ac = local_80[0] * local_54 + local_84 * fVar15 + local_ac;
      fVar18 = local_a8 - *(float *)(param_3 + 4);
      fVar14 = fVar17 - *(float *)(param_3 + 4);
      fVar20 = local_ac - *(float *)(param_3 + 8);
      fVar21 = fVar16 - *(float *)param_3;
      fVar13 = fVar19 - *(float *)(param_3 + 8);
      fVar15 = local_a4 - *(float *)param_3;
      local_50 = fVar20 * fVar14 - fVar18 * fVar13;
      local_4c = fVar13 * fVar15 - fVar20 * fVar21;
      local_48 = fVar21 * fVar18 - fVar14 * fVar15;
      VectorNormalize((Vector *)&local_50);
      uVar7 = *(undefined4 *)(param_3 + 4);
      fVar13 = ((1.0 - (local_50 * *(float *)param_6 + local_4c * *(float *)(param_6 + 4))) -
               local_48 * *(float *)(param_6 + 8)) * 0.5;
      fVar15 = (*(float *)param_4 - *(float *)param_5) * fVar13 + *(float *)param_5;
      fVar14 = (*(float *)(param_4 + 4) - *(float *)(param_5 + 4)) * fVar13 +
               *(float *)(param_5 + 4);
      fVar13 = (*(float *)(param_4 + 8) - *(float *)(param_5 + 8)) * fVar13 +
               *(float *)(param_5 + 8);
      uVar8 = *(undefined4 *)(param_3 + 8);
      *local_30 = *(undefined4 *)param_3;
      local_30[1] = uVar7;
      local_30[2] = uVar8;
      local_30[3] = fVar15;
      local_30[4] = fVar14;
      local_30[5] = fVar13;
      local_30[6] = 0x3f800000;
      local_30[7] = fVar16;
      local_30[8] = fVar17;
      local_30[9] = fVar19;
      local_30[10] = fVar15;
      local_30[0xb] = fVar14;
      local_30[0xc] = fVar13;
      local_30[0xd] = 0x3f800000;
      local_30[0xe] = local_a4;
      local_30[0xf] = local_a8;
      local_30[0x10] = local_ac;
      local_30[0x11] = fVar15;
      local_30[0x12] = fVar14;
      local_30[0x13] = fVar13;
      local_30[0x14] = 0x3f800000;
      (**(code **)(*(int *)param_1 + 0x20))
                (param_1,(CUtlVector<CSPVert,CUtlMemory<CSPVert,int>> *)&local_30);
      pfVar9 = (float *)(local_a0 + local_44[0]);
      pfVar9[1] = local_a8;
      pfVar9[2] = local_ac;
      pfVar9[3] = fVar1 + (fVar2 - fVar1) * fVar12;
      *pfVar9 = local_a4;
      pfVar9[4] = fVar5 + (fVar3 - fVar5) * fVar12;
      pfVar9[5] = fVar6 + fVar12 * (fVar4 - fVar6);
      pfVar9[6] = 1.0;
      if (iVar11 == param_8) break;
      local_a4 = *(float *)param_2;
      local_a8 = *(float *)(param_2 + 4);
      local_ac = *(float *)(param_2 + 8);
      local_a0 = local_a0 + 0x1c;
    }
  }
  (**(code **)(*(int *)param_1 + 0x20))(param_1,local_c8);
  local_24 = 0;
  CUtlMemory<CSPVert,int>::Purge((CUtlMemory<CSPVert,int> *)&local_30);
  local_20 = local_30;
  CUtlMemory<CSPVert,int>::Purge((CUtlMemory<CSPVert,int> *)&local_30);
  local_44[3] = 0;
  CUtlMemory<CSPVert,int>::Purge(local_c8);
  local_44[4] = local_44[0];
  CUtlMemory<CSPVert,int>::Purge(local_c8);
  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)