L L4D2node

CSheetExtended::DrawSheet

0x00bdea60 · 3373 bytes · __thiscall

_ZN14CSheetExtended9DrawSheetEP5IMeshRK6Vectorfiffbib

Decompiled

undefined (10 params)

/* CSheetExtended::DrawSheet(IMesh*, Vector const&, float, int, float, float, bool, int, bool) */

void __thiscall
CSheetExtended::DrawSheet
          (CSheetExtended *this,IMesh *param_1,Vector *param_2,float param_3,int param_4,
          float param_5,float param_6,bool param_7,int param_8,bool param_9)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  float fVar4;
  float fVar5;
  int iVar6;
  char cVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  int iVar11;
  int *piVar12;
  int *piVar13;
  byte bVar14;
  undefined4 *local_214;
  char local_20d;
  int local_204 [39];
  ushort *local_168;
  int local_164;
  ushort *local_160;
  int local_154;
  IMesh *local_150;
  undefined4 local_14c;
  char local_148;
  ushort *local_144;
  int local_138;
  IMesh *local_134;
  undefined4 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;
  undefined4 local_c4;
  uint local_c0;
  float *local_bc;
  int local_b0;
  undefined4 *local_ac;
  undefined4 local_a4 [8];
  undefined4 local_84 [6];
  IMesh *local_6c;
  undefined1 local_68;
  undefined4 local_64;
  int local_60;
  int local_5c;
  float *local_58;
  int local_54;
  int local_50;
  undefined4 *local_4c [8];
  undefined4 local_2c;
  int local_28;
  ushort *local_24;
  
  bVar14 = 0;
  local_20d = '\0';
  if ((!param_9) && (piVar12 = *(int **)(this + 4), piVar12 != (int *)0x0)) {
    local_20d = (**(code **)(*piVar12 + 0xcc))(piVar12);
  }
  puVar8 = (undefined4 *)GetSampleForSequence(this,param_5,param_6,param_4,param_7);
  if ((param_8 == -1) || (cVar7 = IsMaterialDualSequence(*(IMaterial **)(this + 4)), cVar7 == '\0'))
  {
    local_214 = (undefined4 *)0x0;
  }
  else {
    local_214 = (undefined4 *)GetSampleForSequence(this,param_5 * 0.1,param_6,param_8,param_7);
  }
  local_134 = (IMesh *)0x0;
  local_130 = 0;
  local_12c = 0;
  local_124 = 0;
  local_150 = param_1;
  local_120 = 0;
  local_11c = 0xffffffff;
  local_118 = 0;
  local_6c = (IMesh *)0x0;
  local_28 = -1;
  local_24 = (ushort *)0x0;
  local_60 = 0;
  local_5c = 0;
  local_64 = 0;
  local_2c = 0;
  local_c4 = 0xffffffff;
  local_148 = '\x01';
  local_14c = 7;
                    /* try { // try from 00bdeb9d to 00bdf4c0 has its CatchHandler @ 00bdf7a7 */
  (**(code **)(*(int *)param_1 + 0x30))(param_1,2);
  (**(code **)(*(int *)local_150 + 0x4c))(local_150,4,6,local_204);
  local_114 = 0;
  local_68 = 0;
  local_12c = 0;
  local_130 = 6;
  local_64 = 4;
  local_134 = param_1 + 4;
  local_128 = local_168;
  local_124 = 0;
  local_60 = 0;
  local_144 = local_160;
  local_138 = local_154;
  local_6c = param_1;
  piVar12 = local_204;
  piVar13 = local_110;
  for (iVar11 = 0x29; iVar11 != 0; iVar11 = iVar11 + -1) {
    *piVar13 = *piVar12;
    piVar12 = piVar12 + (uint)bVar14 * -2 + 1;
    piVar13 = piVar13 + (uint)bVar14 * -2 + 1;
  }
  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;
  puVar9 = local_a4;
  do {
    puVar10 = puVar9 + 1;
    puVar9[0x16] = *puVar9;
    puVar9 = puVar10;
  } while (puVar10 != local_84);
  if (local_20d == '\0') {
    fVar4 = *(float *)param_2;
    fVar5 = *(float *)(param_2 + 8);
    local_bc[1] = *(float *)(param_2 + 4) - param_3;
    *local_bc = fVar4 - param_3;
    local_bc[2] = fVar5;
    uVar1 = *puVar8;
    local_4c[0][1] = puVar8[1];
    *local_4c[0] = uVar1;
  }
  else {
    *local_bc = *(float *)param_2;
    local_bc[1] = *(float *)(param_2 + 4);
    local_bc[2] = *(float *)(param_2 + 8);
    uVar1 = puVar8[3];
    uVar2 = puVar8[1];
    uVar3 = *puVar8;
    local_4c[0][2] = puVar8[2];
    local_4c[0][1] = uVar2;
    *local_4c[0] = uVar3;
    local_4c[0][3] = uVar1;
    uVar1 = puVar8[7];
    uVar2 = puVar8[5];
    uVar3 = puVar8[4];
    local_4c[1][2] = puVar8[6];
    local_4c[1][1] = uVar2;
    *local_4c[1] = uVar3;
    local_4c[1][3] = uVar1;
    uVar1 = puVar8[0x10];
    local_4c[2][1] = 0;
    *local_4c[2] = uVar1;
    local_4c[2][2] = param_3;
    local_4c[2][3] = 0;
    *local_4c[3] = 0;
    local_4c[3][1] = 0;
    uVar1 = puVar8[0xb];
    uVar2 = puVar8[9];
    uVar3 = puVar8[8];
    local_4c[4][2] = puVar8[10];
    local_4c[4][1] = uVar2;
    *local_4c[4] = uVar3;
    local_4c[4][3] = uVar1;
    if (local_214 != (undefined4 *)0x0) {
      uVar1 = local_214[3];
      uVar2 = local_214[1];
      uVar3 = *local_214;
      local_4c[5][2] = local_214[2];
      local_4c[5][1] = uVar2;
      *local_4c[5] = uVar3;
      local_4c[5][3] = uVar1;
      uVar1 = local_214[7];
      uVar2 = local_214[6];
      uVar3 = local_214[5];
      *local_4c[6] = local_214[4];
      local_4c[6][2] = uVar2;
      local_4c[6][1] = uVar3;
      local_4c[6][3] = uVar1;
      *local_4c[7] = local_214[0x10];
      local_4c[7][1] = 0;
      local_4c[7][2] = 0;
      local_4c[7][3] = 0;
    }
  }
  *local_ac = 0xffffffff;
  if (local_60 < 1) {
    local_60 = 1;
  }
  local_54 = local_b0 + local_104 * 4;
  local_bc = (float *)((int)local_bc + local_110[0]);
  local_4c[0] = (undefined4 *)((int)local_4c[0] + local_f8);
  local_4c[1] = (undefined4 *)((int)local_4c[1] + local_f4);
  local_4c[2] = (undefined4 *)((int)local_4c[2] + local_f0);
  local_4c[3] = (undefined4 *)((int)local_4c[3] + local_ec);
  local_4c[4] = (undefined4 *)((int)local_4c[4] + local_e8);
  local_4c[5] = (undefined4 *)((int)local_4c[5] + local_e4);
  local_4c[6] = (undefined4 *)((int)local_4c[6] + local_e0);
  local_4c[7] = (undefined4 *)((int)local_4c[7] + local_dc);
  if (local_20d == '\0') {
    fVar4 = *(float *)(param_2 + 4);
    fVar5 = *(float *)(param_2 + 8);
    *local_bc = param_3 + *(float *)param_2;
    local_bc[1] = fVar4 - param_3;
    local_bc[2] = fVar5;
    uVar1 = puVar8[2];
    local_4c[0][1] = puVar8[1];
    *local_4c[0] = uVar1;
  }
  else {
    *local_bc = *(float *)param_2;
    local_bc[1] = *(float *)(param_2 + 4);
    local_bc[2] = *(float *)(param_2 + 8);
    uVar1 = puVar8[3];
    uVar2 = puVar8[1];
    uVar3 = *puVar8;
    local_4c[0][2] = puVar8[2];
    local_4c[0][1] = uVar2;
    *local_4c[0] = uVar3;
    local_4c[0][3] = uVar1;
    uVar1 = puVar8[7];
    uVar2 = puVar8[5];
    uVar3 = puVar8[4];
    local_4c[1][2] = puVar8[6];
    local_4c[1][1] = uVar2;
    local_4c[1][3] = uVar1;
    *local_4c[1] = uVar3;
    uVar1 = puVar8[0x10];
    local_4c[2][1] = 0;
    *local_4c[2] = uVar1;
    local_4c[2][2] = param_3;
    local_4c[2][3] = 0;
    *local_4c[3] = 0x3f800000;
    local_4c[3][1] = 0;
    uVar1 = puVar8[0xb];
    uVar2 = puVar8[9];
    uVar3 = puVar8[8];
    local_4c[4][2] = puVar8[10];
    local_4c[4][1] = uVar2;
    *local_4c[4] = uVar3;
    local_4c[4][3] = uVar1;
    if (local_214 != (undefined4 *)0x0) {
      uVar1 = local_214[3];
      uVar2 = local_214[1];
      uVar3 = *local_214;
      local_4c[5][2] = local_214[2];
      local_4c[5][1] = uVar2;
      *local_4c[5] = uVar3;
      local_4c[5][3] = uVar1;
      uVar1 = local_214[7];
      uVar2 = local_214[6];
      uVar3 = local_214[5];
      *local_4c[6] = local_214[4];
      local_4c[6][2] = uVar2;
      local_4c[6][1] = uVar3;
      local_4c[6][3] = uVar1;
      *local_4c[7] = local_214[0x10];
      local_4c[7][1] = 0;
      local_4c[7][2] = 0;
      local_4c[7][3] = 0;
    }
  }
  *(undefined4 *)((int)local_ac + local_100) = 0xffffffff;
  if (local_60 < 2) {
    local_60 = 2;
  }
  local_bc = (float *)((int)local_bc + local_110[0]);
  puVar9 = (undefined4 *)((int)local_ac + local_100 + local_100);
  local_4c[0] = (undefined4 *)((int)local_4c[0] + local_f8);
  local_4c[1] = (undefined4 *)((int)local_4c[1] + local_f4);
  local_4c[2] = (undefined4 *)((int)local_4c[2] + local_f0);
  local_4c[3] = (undefined4 *)((int)local_4c[3] + local_ec);
  local_4c[4] = (undefined4 *)((int)local_4c[4] + local_e8);
  local_4c[5] = (undefined4 *)((int)local_4c[5] + local_e4);
  local_4c[6] = (undefined4 *)((int)local_4c[6] + local_e0);
  local_4c[7] = (undefined4 *)((int)local_4c[7] + local_dc);
  if (local_20d == '\0') {
    fVar4 = *(float *)param_2;
    fVar5 = *(float *)(param_2 + 8);
    local_bc[1] = param_3 + *(float *)(param_2 + 4);
    *local_bc = param_3 + fVar4;
    local_bc[2] = fVar5;
    uVar1 = puVar8[2];
    local_4c[0][1] = puVar8[3];
    *local_4c[0] = uVar1;
  }
  else {
    *local_bc = *(float *)param_2;
    local_bc[1] = *(float *)(param_2 + 4);
    local_bc[2] = *(float *)(param_2 + 8);
    uVar1 = puVar8[3];
    uVar2 = puVar8[1];
    uVar3 = *puVar8;
    local_4c[0][2] = puVar8[2];
    local_4c[0][1] = uVar2;
    *local_4c[0] = uVar3;
    local_4c[0][3] = uVar1;
    uVar1 = puVar8[7];
    uVar2 = puVar8[5];
    uVar3 = puVar8[4];
    local_4c[1][2] = puVar8[6];
    local_4c[1][1] = uVar2;
    *local_4c[1] = uVar3;
    local_4c[1][3] = uVar1;
    uVar1 = puVar8[0x10];
    local_4c[2][1] = 0;
    *local_4c[2] = uVar1;
    local_4c[2][2] = param_3;
    local_4c[2][3] = 0;
    *local_4c[3] = 0x3f800000;
    local_4c[3][1] = 0x3f800000;
    uVar1 = puVar8[0xb];
    uVar2 = puVar8[9];
    uVar3 = puVar8[8];
    local_4c[4][2] = puVar8[10];
    local_4c[4][1] = uVar2;
    *local_4c[4] = uVar3;
    local_4c[4][3] = uVar1;
    if (local_214 != (undefined4 *)0x0) {
      uVar1 = local_214[3];
      uVar2 = local_214[1];
      uVar3 = *local_214;
      local_4c[5][2] = local_214[2];
      local_4c[5][1] = uVar2;
      *local_4c[5] = uVar3;
      local_4c[5][3] = uVar1;
      uVar1 = local_214[7];
      uVar2 = local_214[6];
      uVar3 = local_214[5];
      *local_4c[6] = local_214[4];
      local_4c[6][2] = uVar2;
      local_4c[6][1] = uVar3;
      local_4c[6][3] = uVar1;
      *local_4c[7] = local_214[0x10];
      local_4c[7][1] = 0;
      local_4c[7][2] = 0;
      local_4c[7][3] = 0;
    }
  }
  *puVar9 = 0xffffffff;
  if (local_60 < 3) {
    local_60 = 3;
  }
  local_bc = (float *)((int)local_bc + local_110[0]);
  puVar9 = (undefined4 *)((int)puVar9 + local_100);
  local_4c[0] = (undefined4 *)((int)local_4c[0] + local_f8);
  local_4c[1] = (undefined4 *)((int)local_4c[1] + local_f4);
  local_4c[2] = (undefined4 *)((int)local_4c[2] + local_f0);
  local_4c[3] = (undefined4 *)((int)local_4c[3] + local_ec);
  local_4c[4] = (undefined4 *)((int)local_4c[4] + local_e8);
  local_4c[5] = (undefined4 *)((int)local_4c[5] + local_e4);
  local_4c[6] = (undefined4 *)((int)local_4c[6] + local_e0);
  local_4c[7] = (undefined4 *)((int)local_4c[7] + local_dc);
  if (local_20d == '\0') {
    fVar4 = *(float *)(param_2 + 4);
    fVar5 = *(float *)(param_2 + 8);
    *local_bc = *(float *)param_2 - param_3;
    local_bc[1] = param_3 + fVar4;
    local_bc[2] = fVar5;
    uVar1 = *puVar8;
    local_4c[0][1] = puVar8[3];
    *local_4c[0] = uVar1;
  }
  else {
    *local_bc = *(float *)param_2;
    local_bc[1] = *(float *)(param_2 + 4);
    local_bc[2] = *(float *)(param_2 + 8);
    uVar1 = puVar8[3];
    uVar2 = puVar8[1];
    uVar3 = *puVar8;
    local_4c[0][2] = puVar8[2];
    local_4c[0][1] = uVar2;
    *local_4c[0] = uVar3;
    local_4c[0][3] = uVar1;
    uVar1 = puVar8[7];
    uVar2 = puVar8[5];
    uVar3 = puVar8[4];
    local_4c[1][2] = puVar8[6];
    local_4c[1][1] = uVar2;
    *local_4c[1] = uVar3;
    local_4c[1][3] = uVar1;
    uVar1 = puVar8[0x10];
    local_4c[2][1] = 0;
    *local_4c[2] = uVar1;
    local_4c[2][2] = param_3;
    local_4c[2][3] = 0;
    *local_4c[3] = 0;
    local_4c[3][1] = 0x3f800000;
    uVar1 = puVar8[0xb];
    uVar2 = puVar8[9];
    uVar3 = puVar8[8];
    local_4c[4][2] = puVar8[10];
    local_4c[4][1] = uVar2;
    *local_4c[4] = uVar3;
    local_4c[4][3] = uVar1;
    if (local_214 != (undefined4 *)0x0) {
      uVar1 = local_214[3];
      uVar2 = local_214[1];
      uVar3 = *local_214;
      local_4c[5][2] = local_214[2];
      local_4c[5][1] = uVar2;
      *local_4c[5] = uVar3;
      local_4c[5][3] = uVar1;
      uVar1 = local_214[6];
      uVar2 = local_214[5];
      uVar3 = local_214[4];
      local_4c[6][3] = local_214[7];
      local_4c[6][1] = uVar2;
      *local_4c[6] = uVar3;
      local_4c[6][2] = uVar1;
      *local_4c[7] = local_214[0x10];
      local_4c[7][1] = 0;
      local_4c[7][2] = 0;
      local_4c[7][3] = 0;
    }
  }
  *puVar9 = 0xffffffff;
  local_5c = 4;
  if (local_60 < 4) {
    local_60 = local_5c;
  }
  local_58 = (float *)((int)local_bc + local_110[0]);
  local_50 = (int)puVar9 + local_100;
  local_4c[0] = (undefined4 *)((int)local_4c[0] + local_f8);
  local_4c[1] = (undefined4 *)((int)local_4c[1] + local_f4);
  local_4c[2] = (undefined4 *)((int)local_4c[2] + local_f0);
  local_4c[3] = (undefined4 *)((int)local_4c[3] + local_ec);
  local_4c[4] = (undefined4 *)((int)local_4c[4] + local_e8);
  local_4c[5] = (undefined4 *)((int)local_4c[5] + local_e4);
  local_4c[6] = (undefined4 *)((int)local_4c[6] + local_e0);
  local_4c[7] = (undefined4 *)((int)local_4c[7] + local_dc);
  if (local_148 != '\0') {
    switch(local_14c) {
    case 4:
      iVar11 = local_60 * 2 + -2;
      break;
    case 5:
      iVar11 = local_60 * 2;
      break;
    case 6:
      iVar11 = local_60 * 3 + -6;
      break;
    case 7:
      iVar6 = local_60 * 6;
      iVar11 = iVar6 + 3;
      if (-1 < iVar6) {
        iVar11 = iVar6;
      }
      iVar11 = iVar11 >> 2;
      break;
    default:
      iVar11 = local_60;
      break;
    case 9:
      iVar11 = 0;
    }
    if (local_154 != 0) {
      if (6 < iVar11) {
        iVar11 = 6;
      }
      if (iVar11 != 0) {
        switch(local_14c) {
        case 0:
        case 9:
          break;
        default:
          GenerateSequentialIndexBuffer(local_160,iVar11,(int)local_168);
          break;
        case 4:
          GenerateLineStripIndexBuffer(local_160,iVar11,(int)local_168);
          break;
        case 5:
          GenerateLineLoopIndexBuffer(local_160,iVar11,(int)local_168);
          break;
        case 6:
          GeneratePolygonIndexBuffer(local_168,(int)local_160,iVar11);
          break;
        case 7:
                    /* try { // try from 00bdf70a to 00bdf7a1 has its CatchHandler @ 00bdf7a7 */
          GenerateQuadIndexBuffer(local_160,iVar11,(int)local_168);
        }
        local_124 = local_124 + iVar11 * local_138;
        if (local_12c < local_124) {
          local_12c = local_124;
        }
      }
    }
  }
  (**(code **)(*(int *)local_150 + 0x58))(local_150,local_60,local_12c,local_204);
  local_134 = (IMesh *)0x0;
  local_64 = 0;
  local_130 = 0;
  local_6c = (IMesh *)0x0;
  local_c4 = 0xffffffff;
  local_150 = (IMesh *)0x0;
  (**(code **)(*(int *)param_1 + 0x34))(param_1,0xffffffff,0);
  if ((local_6c != (IMesh *)0x0) &&
     (cVar7 = (**(code **)(*(int *)local_6c + 0x10))(local_6c), cVar7 != '\0')) {
    (**(code **)(*(int *)local_6c + 0x18))(local_6c);
  }
  if ((local_134 != (IMesh *)0x0) &&
     (cVar7 = (**(code **)(*(int *)local_134 + 0x10))(local_134), cVar7 != '\0')) {
    (**(code **)(*(int *)local_134 + 0x18))(local_134);
  }
  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)