L L4D2node

ScratchPad_DrawSphere

0x00595800 · 1195 bytes · __cdecl

_Z21ScratchPad_DrawSphereP13IScratchPad3DRK6VectorfS3_i

Decompiled

undefined (5 params)

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

void ScratchPad_DrawSphere
               (IScratchPad3D *param_1,Vector *param_2,float param_3,Vector *param_4,int param_5)

{
  undefined4 uVar1;
  float fVar2;
  float fVar3;
  double dVar4;
  double dVar5;
  int iVar6;
  undefined4 *puVar7;
  float *pfVar8;
  int iVar9;
  int iVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  double dVar14;
  CUtlMemory<Vector,int> *local_ac;
  int local_9c;
  double local_7c;
  double local_74;
  undefined4 *local_68;
  undefined4 local_64;
  undefined4 local_60;
  int local_5c;
  undefined4 *local_58;
  float local_54;
  float local_50;
  float local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  local_68 = (undefined4 *)0x0;
  local_64 = 0;
  local_60 = 0;
  local_5c = 0;
  local_58 = (undefined4 *)0x0;
  if (param_5 != 0) {
    CUtlVector<Vector,CUtlMemory<Vector,int>>::GrowVector
              ((CUtlVector<Vector,CUtlMemory<Vector,int>> *)&local_68,param_5);
    if (local_5c - param_5 < 1) {
      if (param_5 < 1) goto LAB_00595842;
    }
    else {
      if (param_5 < 1) goto LAB_00595842;
      _V_memmove(local_68 + param_5 * 3,local_68,(local_5c - param_5) * 0xc);
    }
    local_9c = 0;
    iVar6 = param_5 + -1;
    fVar3 = (1.0 / (float)iVar6) * 3.1415927;
    do {
      fVar2 = (float)local_9c * fVar3;
      if (local_9c == 0) {
        iVar9 = 0xc;
        iVar10 = 1;
        uVar1 = *(undefined4 *)(param_2 + 4);
        fVar2 = *(float *)(param_2 + 8);
        *local_68 = *(undefined4 *)param_2;
        local_68[1] = uVar1;
        local_68[2] = param_3 + fVar2;
        if (1 < local_5c) {
          do {
            iVar10 = iVar10 + 1;
            puVar7 = (undefined4 *)((int)local_68 + iVar9);
            iVar9 = iVar9 + 0xc;
            *puVar7 = *local_68;
            puVar7[1] = local_68[1];
            puVar7[2] = local_68[2];
          } while (iVar10 < local_5c);
        }
      }
      else {
        iVar9 = 0;
        do {
          fVar13 = (float)iVar9 * fVar3;
          if (local_9c == iVar6) {
            fVar13 = *(float *)param_2;
            fVar11 = *(float *)(param_2 + 4);
            fVar12 = *(float *)(param_2 + 8) - param_3;
          }
          else {
            sincos((double)(fVar13 + fVar13),&local_74,&local_7c);
            dVar5 = local_74;
            dVar4 = local_7c;
            dVar14 = sin((double)fVar2);
            fVar13 = cosf(fVar2);
            fVar12 = fVar13 * param_3 + *(float *)(param_2 + 8);
            fVar13 = (float)(dVar4 * dVar14) * param_3 + *(float *)param_2;
            fVar11 = (float)(dVar14 * dVar5) * param_3 + *(float *)(param_2 + 4);
          }
          local_48 = *(undefined4 *)param_4;
          local_44 = *(undefined4 *)(param_4 + 4);
          local_40 = *(undefined4 *)(param_4 + 8);
          local_20 = 0x3f800000;
          puVar7 = local_68 + iVar9 * 3;
          local_38 = *puVar7;
          local_34 = puVar7[1];
          local_30 = puVar7[2];
          local_3c = 0x3f800000;
          local_54 = fVar13;
          local_50 = fVar11;
          local_4c = fVar12;
          local_2c = local_48;
          local_28 = local_44;
          local_24 = local_40;
                    /* try { // try from 00595ac2 to 00595c38 has its CatchHandler @ 00595cab */
          (**(code **)(*(int *)param_1 + 0x1c))(param_1,&local_54,&local_38);
          iVar10 = iVar9 + 1;
          pfVar8 = (float *)(local_68 + iVar9 * 3);
          *pfVar8 = fVar13;
          pfVar8[1] = fVar11;
          pfVar8[2] = fVar12;
          iVar9 = iVar10;
        } while (iVar10 != param_5);
        if (local_9c != iVar6) {
          iVar9 = 0;
          do {
            iVar9 = iVar9 + 1;
            local_48 = *(undefined4 *)param_4;
            local_44 = *(undefined4 *)(param_4 + 4);
            local_40 = *(undefined4 *)(param_4 + 8);
            local_20 = 0x3f800000;
            puVar7 = local_68 + (iVar9 % param_5) * 3;
            local_38 = *puVar7;
            local_34 = puVar7[1];
            local_30 = puVar7[2];
            pfVar8 = (float *)(local_68 + iVar9 * 3 + -3);
            local_3c = 0x3f800000;
            local_54 = *pfVar8;
            local_50 = pfVar8[1];
            local_4c = pfVar8[2];
            local_2c = local_48;
            local_28 = local_44;
            local_24 = local_40;
            (**(code **)(*(int *)param_1 + 0x1c))(param_1,&local_54,&local_38);
          } while (iVar9 != param_5);
        }
      }
      local_9c = local_9c + 1;
    } while (local_9c != param_5);
  }
LAB_00595842:
  local_ac = (CUtlMemory<Vector,int> *)&local_68;
  local_5c = 0;
  CUtlMemory<Vector,int>::Purge(local_ac);
  local_58 = local_68;
  CUtlMemory<Vector,int>::Purge(local_ac);
  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)