L L4D2node

DrawScreenSpaceRectangle

0x0028a8c0 · 4410 bytes · __cdecl

_Z24DrawScreenSpaceRectangleP9IMaterialiiiiffffiiPviif

Decompiled

undefined (15 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* DrawScreenSpaceRectangle(IMaterial*, int, int, int, int, float, float, float, float, int, int,
   void*, int, int, float) */

void DrawScreenSpaceRectangle
               (IMaterial *param_1,int param_2,int param_3,int param_4,int param_5,float param_6,
               float param_7,float param_8,float param_9,int param_10,int param_11,void *param_12,
               int param_13,int param_14,float param_15)

{
  undefined4 uVar1;
  undefined4 uVar2;
  char cVar3;
  int *piVar4;
  int *piVar5;
  int iVar6;
  undefined4 *puVar7;
  int iVar8;
  int iVar9;
  int *piVar10;
  uint uVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  int *piVar15;
  bool bVar16;
  byte bVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  float fVar30;
  float fVar31;
  float fVar32;
  float fVar33;
  int local_25c;
  float local_240;
  int local_230;
  undefined1 local_21c [4];
  undefined1 local_218 [4];
  int local_214;
  int local_210;
  undefined4 local_20c;
  undefined4 local_208;
  int local_204 [39];
  ushort *local_168;
  int local_164;
  ushort *local_160;
  int local_154;
  int *local_150;
  undefined4 local_14c;
  char local_148;
  ushort *local_144;
  int local_138;
  int *local_134;
  int local_130;
  int local_12c;
  ushort *local_128;
  int local_124;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118;
  undefined1 local_114;
  int local_110 [3];
  int local_104;
  int local_100;
  int local_f8;
  int local_f4;
  int local_f0;
  int local_ec;
  int local_e8;
  int local_e4;
  int local_e0;
  int local_dc;
  int local_d8;
  int local_d4;
  undefined4 local_c4;
  uint local_c0;
  float *local_bc;
  undefined4 *local_b0;
  int local_ac;
  int local_a4 [8];
  int local_84;
  int local_80;
  int *local_6c;
  undefined1 local_68;
  int local_64;
  int local_60;
  int local_5c;
  float *local_58;
  undefined4 *local_54;
  int local_50;
  float *local_4c;
  int local_48;
  int local_44;
  int local_40;
  int local_3c;
  int local_38;
  int local_34;
  int local_30;
  undefined4 local_2c;
  int local_28;
  ushort *local_24;
  
  bVar17 = 0;
  piVar4 = (int *)(**(code **)(*g_pMaterialSystem + 0x180))(g_pMaterialSystem);
  if (piVar4 != (int *)0x0) {
                    /* try { // try from 0028a8ee to 0028a8f0 has its CatchHandler @ 0028ba06 */
    (**(code **)(*piVar4 + 8))(piVar4);
  }
  if ((param_4 < 1) || (param_5 < 1)) {
    if ((piVar4 != (int *)0x0) && ((**(code **)(*piVar4 + 0xc))(piVar4), piVar4 != (int *)0x0)) {
      (**(code **)(*piVar4 + 4))(piVar4);
      return;
    }
  }
  else {
    local_20c = 0;
    local_208 = 0;
    if (_SetSeed == 0) {
      local_25c = 0;
    }
    else {
                    /* try { // try from 0028a97d to 0028a97f has its CatchHandler @ 0028b987 */
      (**(code **)(_SetSeed + 0x50))
                (_SetSeed,&local_20c,0,0,0,0,"/data/src/tier2/renderutils.cpp",0x44a,
                 &DrawScreenSpaceRectangle(IMaterial*,int,int,int,int,float,float,float,float,int,int,void*,int,int,float)
                  ::tm_fmt,&DAT_002c48a3,"DrawScreenSpaceRectangle");
      local_25c = _SetSeed;
    }
    uVar2 = local_208;
    uVar1 = local_20c;
                    /* try { // try from 0028a9b6 to 0028aa74 has its CatchHandler @ 0028b99f */
    (**(code **)(*piVar4 + 0x50))(piVar4,0);
    (**(code **)(*piVar4 + 0x54))(piVar4);
    (**(code **)(*piVar4 + 0x7c))(piVar4);
    (**(code **)(*piVar4 + 0x50))(piVar4,1);
    (**(code **)(*piVar4 + 0x54))(piVar4);
    (**(code **)(*piVar4 + 0x7c))(piVar4);
    (**(code **)(*piVar4 + 0x24))(piVar4,param_1,param_12);
    if (param_13 < 1) {
      param_13 = 1;
    }
    iVar12 = 1;
    if (0 < param_14) {
      iVar12 = param_14;
    }
    (**(code **)(*piVar4 + 0x9c))(piVar4,local_21c,local_218,&local_214,&local_210);
    bVar16 = false;
    if (((param_2 == 0 && param_3 == 0) && (param_4 == local_214)) && (param_5 == local_210)) {
      bVar16 = param_13 == 1 && iVar12 == 1;
    }
    local_148 = 0;
    local_150 = (int *)0x0;
    local_134 = (int *)0x0;
    local_130 = 0;
    local_12c = 0;
    local_124 = 0;
    local_120 = 0;
    local_11c = 0xffffffff;
    local_118 = 0;
    local_6c = (int *)0x0;
    local_28 = -1;
    local_24 = (ushort *)0x0;
    local_60 = 0;
    local_5c = 0;
    local_64 = 0;
    local_2c = 0;
    local_c4 = 0xffffffff;
                    /* try { // try from 0028ab51 to 0028b645 has its CatchHandler @ 0028b9e6 */
    piVar5 = (int *)(**(code **)(*piVar4 + 0xe8))(piVar4,1,0,0,0);
    iVar6 = param_13 * iVar12;
    local_150 = piVar5;
    if (bVar16) {
      local_148 = '\x01';
      iVar13 = iVar6 * 3;
      local_14c = 2;
      (**(code **)(*piVar5 + 0x30))(piVar5,2);
      local_230 = iVar13;
    }
    else {
      local_148 = '\x01';
      local_14c = 7;
      iVar13 = iVar6 * 6;
      (**(code **)(*piVar5 + 0x30))(piVar5,2);
      local_230 = iVar6 * 4;
    }
    (**(code **)(*local_150 + 0x4c))(local_150,local_230,iVar13,local_204);
    local_130 = iVar13;
    iVar6 = 0x29;
    local_68 = 0;
    local_12c = 0;
    local_114 = 0;
    local_6c = piVar5;
    local_134 = (int *)0x0;
    if (piVar5 != (int *)0x0) {
      local_134 = piVar5 + 1;
    }
    local_124 = 0;
    local_60 = 0;
    local_144 = local_160;
    local_128 = local_168;
    local_138 = local_154;
    piVar10 = local_204;
    piVar15 = local_110;
    for (; iVar6 != 0; iVar6 = iVar6 + -1) {
      *piVar15 = *piVar10;
      piVar10 = piVar10 + (uint)bVar17 * -2 + 1;
      piVar15 = piVar15 + (uint)bVar17 * -2 + 1;
    }
    local_64 = local_230;
    local_c0 = ~-(uint)(local_c0 == 0) & 2;
    if (local_28 == -1) {
      local_2c = 0;
      local_24 = local_168;
      local_28 = local_164;
    }
    local_5c = 0;
    local_54 = local_b0;
    local_58 = local_bc;
    piVar10 = local_a4;
    do {
      piVar15 = piVar10 + 1;
      piVar10[0x16] = *piVar10;
      piVar10 = piVar15;
    } while (piVar15 != &local_84);
    local_50 = local_ac;
    if (param_4 == 1) {
      fVar24 = 0.0;
    }
    else {
      fVar24 = ((param_8 - param_6) / (float)(param_4 + -1)) * 0.5;
    }
    fVar19 = 0.0;
    if (param_5 != 1) {
      fVar19 = ((param_9 - param_7) / (float)(param_5 + -1)) * 0.5;
    }
    fVar21 = (param_8 + 0.5 + fVar24) * (1.0 / (float)param_10);
    fVar29 = (param_9 + 0.5 + fVar19) * (1.0 / (float)param_11);
    fVar24 = ((param_6 + 0.5) - fVar24) * (1.0 / (float)param_10);
    fVar19 = ((param_7 + 0.5) - fVar19) * (1.0 / (float)param_11);
    if (bVar16) {
      uVar11 = 0;
      do {
        fVar20 = (float)(uVar11 * 2 & 2) - 0.5 / (float)local_214;
        fVar25 = (float)(uVar11 & 2) - 0.5 / (float)local_210;
        fVar18 = fVar24;
        if ((uVar11 & 1) != 0) {
          fVar18 = (fVar21 + fVar21) - fVar24;
        }
        fVar32 = fVar19;
        if ((uVar11 & 2) != 0) {
          fVar32 = (fVar29 + fVar29) - fVar19;
        }
        local_58[1] = 1.0 - (fVar25 + fVar25);
        *local_58 = (fVar20 + fVar20) - 1.0;
        local_58[2] = param_15;
        *local_54 = 0;
        local_54[1] = 0;
        local_54[2] = 0x3f800000;
        *local_4c = fVar18;
        local_4c[1] = fVar32;
        puVar7 = (undefined4 *)(local_d8 * local_5c + local_84);
        *puVar7 = 0;
        puVar7[1] = 0x3f800000;
        puVar7[2] = 0;
        puVar7 = (undefined4 *)(local_d4 * local_5c + local_80);
        *puVar7 = 0x3f800000;
        puVar7[1] = 0;
        puVar7[2] = 0;
        local_5c = local_5c + 1;
        if (local_60 < local_5c) {
          local_60 = local_5c;
        }
        uVar11 = uVar11 + 1;
        local_54 = (undefined4 *)((int)local_54 + local_104);
        local_58 = (float *)((int)local_58 + local_110[0]);
        local_50 = local_50 + local_100;
        local_4c = (float *)((int)local_4c + local_f8);
        local_48 = local_48 + local_f4;
        local_44 = local_44 + local_f0;
        local_40 = local_40 + local_ec;
        local_3c = local_3c + local_e8;
        local_38 = local_38 + local_e4;
        local_34 = local_34 + local_e0;
        local_30 = local_30 + local_dc;
      } while (uVar11 != 3);
    }
    else {
      fVar18 = (float)(param_2 + param_4) + -0.5;
      fVar25 = ((float)param_2 + -0.5 + (float)param_2 + -0.5) / (float)local_214 - 1.0;
      fVar18 = (fVar18 + fVar18) / (float)local_214 - 1.0;
      fVar20 = (((float)(param_3 + param_5) + -0.5) * -2.0) / (float)local_210 + 1.0;
      fVar32 = (((float)param_3 + -0.5) * -2.0) / (float)local_210 + 1.0;
      if ((param_13 < 2) && (iVar12 < 2)) {
        uVar11 = 0;
        uVar14 = 0;
        bVar16 = true;
        fVar30 = fVar32;
        while( true ) {
          fVar26 = fVar18;
          if (bVar16) {
            fVar26 = fVar25;
          }
          local_58[1] = fVar30;
          *local_58 = fVar26;
          local_58[2] = param_15;
          *local_54 = 0;
          local_54[1] = 0;
          local_54[2] = 0x3f800000;
          fVar30 = fVar29;
          if (uVar14 == 0) {
            fVar30 = fVar19;
          }
          fVar26 = fVar21;
          if (bVar16) {
            fVar26 = fVar24;
          }
          *local_4c = fVar26;
          local_4c[1] = fVar30;
          puVar7 = (undefined4 *)(local_d8 * local_5c + local_84);
          *puVar7 = 0;
          puVar7[1] = 0x3f800000;
          puVar7[2] = 0;
          puVar7 = (undefined4 *)(local_d4 * local_5c + local_80);
          *puVar7 = 0x3f800000;
          puVar7[1] = 0;
          puVar7[2] = 0;
          local_5c = local_5c + 1;
          if (local_60 < local_5c) {
            local_60 = local_5c;
          }
          uVar11 = uVar11 + 1;
          local_54 = (undefined4 *)((int)local_54 + local_104);
          local_58 = (float *)((int)local_58 + local_110[0]);
          local_50 = local_50 + local_100;
          local_4c = (float *)((int)local_4c + local_f8);
          local_48 = local_48 + local_f4;
          local_44 = local_44 + local_f0;
          local_40 = local_40 + local_ec;
          local_3c = local_3c + local_e8;
          local_38 = local_38 + local_e4;
          local_34 = local_34 + local_e0;
          local_30 = local_30 + local_dc;
          if (uVar11 == 4) break;
          bVar16 = uVar11 == 3;
          uVar14 = uVar11 & 2;
          fVar30 = fVar32;
          if (uVar14 != 0) {
            fVar30 = fVar20;
          }
        }
      }
      else {
        iVar6 = 0;
        fVar30 = (fVar29 - fVar19) / (float)iVar12;
        fVar29 = (fVar18 - fVar25) / (float)param_13;
        fVar21 = (fVar21 - fVar24) / (float)param_13;
        fVar18 = (fVar32 - fVar20) / (float)iVar12;
        local_240 = 0.0;
        do {
          iVar6 = iVar6 + 1;
          iVar9 = 0;
          fVar26 = (float)iVar6;
          fVar20 = 0.0;
          fVar33 = fVar29 * local_240 + fVar25;
          fVar31 = local_240 * fVar21 + fVar24;
          fVar28 = fVar29 * fVar26 + fVar25;
          fVar27 = fVar26 * fVar21 + fVar24;
          do {
            *local_58 = fVar33;
            local_58[2] = param_15;
            fVar22 = fVar32 - fVar18 * fVar20;
            fVar20 = fVar20 * fVar30 + fVar19;
            local_58[1] = fVar22;
            *local_54 = 0;
            local_54[1] = 0;
            local_54[2] = 0x3f800000;
            *local_4c = fVar31;
            local_4c[1] = fVar20;
            puVar7 = (undefined4 *)(local_d8 * local_5c + local_84);
            *puVar7 = 0;
            puVar7[1] = 0x3f800000;
            puVar7[2] = 0;
            puVar7 = (undefined4 *)(local_d4 * local_5c + local_80);
            *puVar7 = 0x3f800000;
            puVar7[1] = 0;
            puVar7[2] = 0;
            iVar8 = local_5c + 1;
            if (local_60 < iVar8) {
              local_60 = iVar8;
            }
            local_54 = (undefined4 *)((int)local_54 + local_104);
            local_58 = (float *)((int)local_58 + local_110[0]);
            local_50 = local_50 + local_100 * 4;
            local_4c = (float *)((int)local_4c + local_f8);
            local_48 = local_48 + local_f4 * 4;
            local_44 = local_44 + local_f0 * 4;
            local_40 = local_40 + local_ec * 4;
            local_3c = local_3c + local_e8 * 4;
            local_38 = local_38 + local_e4 * 4;
            local_34 = local_34 + local_e0 * 4;
            local_30 = local_30 + local_dc * 4;
            *local_58 = fVar28;
            local_58[1] = fVar22;
            local_58[2] = param_15;
            *local_54 = 0;
            local_54[1] = 0;
            local_54[2] = 0x3f800000;
            *local_4c = fVar27;
            local_4c[1] = fVar20;
            puVar7 = (undefined4 *)(local_d8 * iVar8 + local_84);
            *puVar7 = 0;
            puVar7[1] = 0x3f800000;
            puVar7[2] = 0;
            puVar7 = (undefined4 *)(local_d4 * iVar8 + local_80);
            *puVar7 = 0x3f800000;
            puVar7[1] = 0;
            puVar7[2] = 0;
            iVar8 = local_5c + 2;
            if (local_60 < iVar8) {
              local_60 = iVar8;
            }
            iVar9 = iVar9 + 1;
            fVar20 = (float)iVar9;
            local_54 = (undefined4 *)((int)local_54 + local_104);
            local_58 = (float *)((int)local_58 + local_110[0]);
            fVar23 = fVar32 - fVar18 * fVar20;
            local_4c = (float *)((int)local_4c + local_f8);
            *local_58 = fVar28;
            local_58[1] = fVar23;
            local_58[2] = param_15;
            fVar22 = fVar30 * fVar20 + fVar19;
            *local_54 = 0;
            local_54[1] = 0;
            local_54[2] = 0x3f800000;
            *local_4c = fVar27;
            local_4c[1] = fVar22;
            puVar7 = (undefined4 *)(local_d8 * iVar8 + local_84);
            *puVar7 = 0;
            puVar7[1] = 0x3f800000;
            puVar7[2] = 0;
            puVar7 = (undefined4 *)(local_d4 * iVar8 + local_80);
            *puVar7 = 0x3f800000;
            puVar7[1] = 0;
            puVar7[2] = 0;
            iVar8 = local_5c + 3;
            if (local_60 < iVar8) {
              local_60 = iVar8;
            }
            local_54 = (undefined4 *)((int)local_54 + local_104);
            local_58 = (float *)((int)local_58 + local_110[0]);
            local_4c = (float *)((int)local_4c + local_f8);
            *local_58 = fVar33;
            local_58[1] = fVar23;
            local_58[2] = param_15;
            *local_54 = 0;
            local_54[1] = 0;
            local_54[2] = 0x3f800000;
            *local_4c = fVar31;
            local_4c[1] = fVar22;
            puVar7 = (undefined4 *)(local_d8 * iVar8 + local_84);
            *puVar7 = 0;
            puVar7[1] = 0x3f800000;
            puVar7[2] = 0;
            puVar7 = (undefined4 *)(local_d4 * iVar8 + local_80);
            *puVar7 = 0x3f800000;
            puVar7[1] = 0;
            puVar7[2] = 0;
            local_5c = local_5c + 4;
            if (local_60 < local_5c) {
              local_60 = local_5c;
            }
            local_54 = (undefined4 *)((int)local_54 + local_104);
            local_58 = (float *)((int)local_58 + local_110[0]);
            local_4c = (float *)((int)local_4c + local_f8);
          } while (iVar9 < iVar12);
          local_240 = fVar26;
        } while (iVar6 < param_13);
      }
    }
    if (local_148 != '\0') {
      switch(local_14c) {
      case 4:
        iVar12 = local_60 * 2 + -2;
        break;
      case 5:
        iVar12 = local_60 * 2;
        break;
      case 6:
        iVar12 = local_60 * 3 + -6;
        break;
      case 7:
        iVar12 = local_60 * 6;
        if (iVar12 < 0) {
          iVar12 = iVar12 + 3;
        }
        iVar12 = iVar12 >> 2;
        break;
      default:
        iVar12 = local_60;
        break;
      case 9:
        iVar12 = 0;
      }
      if (local_154 != 0) {
        if (iVar12 <= iVar13) {
          iVar13 = iVar12;
        }
        if (iVar13 != 0) {
          switch(local_14c) {
          case 0:
          case 9:
            break;
          default:
                    /* try { // try from 0028b92a to 0028b92e has its CatchHandler @ 0028b9e6 */
            GenerateSequentialIndexBuffer(local_160,iVar13,(int)local_168);
            break;
          case 4:
            GenerateLineStripIndexBuffer(local_160,iVar13,(int)local_168);
            break;
          case 5:
            GenerateLineLoopIndexBuffer(local_160,iVar13,(int)local_168);
            break;
          case 6:
            GeneratePolygonIndexBuffer(local_168,(int)local_160,iVar13);
            break;
          case 7:
                    /* try { // try from 0028ba30 to 0028ba85 has its CatchHandler @ 0028b9e6 */
            GenerateQuadIndexBuffer(local_160,iVar13,(int)local_168);
          }
          local_124 = local_124 + local_138 * iVar13;
          if (local_12c < local_124) {
            local_12c = local_124;
          }
        }
      }
    }
    (**(code **)(*local_150 + 0x58))(local_150,local_60,local_12c,local_204);
    local_134 = (int *)0x0;
    local_130 = 0;
    local_64 = 0;
    local_6c = (int *)0x0;
    local_c4 = 0xffffffff;
    local_150 = (int *)0x0;
    (**(code **)(*piVar5 + 0x34))(piVar5,0xffffffff,0);
    (**(code **)(*piVar4 + 0x50))(piVar4,0);
    (**(code **)(*piVar4 + 0x58))(piVar4);
    (**(code **)(*piVar4 + 0x50))(piVar4,1);
    (**(code **)(*piVar4 + 0x58))(piVar4);
    if ((local_6c != (int *)0x0) &&
       (cVar3 = (**(code **)(*local_6c + 0x10))(local_6c), cVar3 != '\0')) {
      (**(code **)(*local_6c + 0x18))(local_6c);
    }
    if ((local_134 != (int *)0x0) &&
       (cVar3 = (**(code **)(*local_134 + 0x10))(local_134), cVar3 != '\0')) {
      (**(code **)(*local_134 + 0x18))(local_134);
    }
    if (local_25c != 0) {
      (**(code **)(local_25c + 0x54))(local_25c,uVar1,uVar2,0,0,0);
    }
    if ((piVar4 != (int *)0x0) && ((**(code **)(*piVar4 + 0xc))(piVar4), piVar4 != (int *)0x0)) {
      (**(code **)(*piVar4 + 4))(piVar4);
    }
  }
  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)