L L4D2node

Float_CompareDeltas

0x001479a0 · 1964 bytes · __cdecl

_Z19Float_CompareDeltasPK8SendPropP7bf_readS3_

Decompiled

undefined (3 params)

/* Float_CompareDeltas(SendProp const*, bf_read*, bf_read*) */

bool Float_CompareDeltas(SendProp *param_1,bf_read *param_2,bf_read *param_3)

{
  undefined4 *puVar1;
  uint uVar2;
  uint *puVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  longdouble lVar8;
  longdouble lVar9;
  undefined4 uVar10;
  byte local_28;
  uint local_20;
  
  uVar6 = *(uint *)(param_1 + 0x3c);
  if ((uVar6 & 2) != 0) {
    lVar8 = (longdouble)CBitRead::ReadBitCoord((CBitRead *)param_2);
    lVar9 = (longdouble)CBitRead::ReadBitCoord((CBitRead *)param_3);
    return (float)lVar8 != (float)lVar9;
  }
  if ((uVar6 & 0x1000) != 0) {
    lVar8 = (longdouble)CBitRead::ReadBitCoordMP((CBitRead *)param_2,0);
    lVar9 = (longdouble)CBitRead::ReadBitCoordMP((CBitRead *)param_3,0);
    return (float)lVar8 != (float)lVar9;
  }
  if ((uVar6 & 0x2000) != 0) {
    lVar8 = (longdouble)CBitRead::ReadBitCoordMP((CBitRead *)param_2,1);
    lVar9 = (longdouble)CBitRead::ReadBitCoordMP((CBitRead *)param_3,1);
LAB_00147b12:
    return (float)lVar8 != (float)lVar9;
  }
  if ((uVar6 & 0x4000) != 0) {
    lVar8 = (longdouble)CBitRead::ReadBitCoordMP((CBitRead *)param_2,2);
    lVar9 = (longdouble)CBitRead::ReadBitCoordMP((CBitRead *)param_3,2);
    goto LAB_00147bca;
  }
  if ((uVar6 & 4) == 0) {
    if ((uVar6 & 0x20) == 0) {
      if ((uVar6 & 0x8000) == 0) {
        if ((uVar6 & 0x10000) == 0) {
          if ((uVar6 & 0x20000) != 0) {
            lVar8 = (longdouble)
                    CBitRead::ReadBitCellCoord((CBitRead *)param_2,*(undefined4 *)(param_1 + 0xc),2)
            ;
            lVar9 = (longdouble)
                    CBitRead::ReadBitCellCoord((CBitRead *)param_3,*(undefined4 *)(param_1 + 0xc),2)
            ;
            goto LAB_00147b12;
          }
          iVar5 = *(int *)(param_2 + 0x14);
          iVar7 = *(int *)(param_1 + 0xc);
          uVar6 = *(uint *)(param_2 + 0x10);
          if (iVar5 < iVar7) {
            puVar3 = *(uint **)(param_2 + 0x18);
            if (puVar3 == *(uint **)(param_2 + 0x1c)) {
              *(undefined4 *)(param_2 + 0x14) = 1;
              uVar4 = 0;
              *(undefined4 *)(param_2 + 0x10) = 0;
              *(uint **)(param_2 + 0x18) = puVar3 + 1;
              param_2[4] = (bf_read)0x1;
            }
            else {
              if (*(uint **)(param_2 + 0x1c) < puVar3) {
                param_2[4] = (bf_read)0x1;
                *(undefined4 *)(param_2 + 0x10) = 0;
              }
              else {
                *(uint **)(param_2 + 0x18) = puVar3 + 1;
                uVar2 = *puVar3;
                *(uint *)(param_2 + 0x10) = uVar2;
                if (param_2[4] == (bf_read)0x0) {
                  iVar7 = iVar7 - iVar5;
                  local_20._0_1_ = (byte)iVar5;
                  uVar4 = ((&CBitBuffer::s_nMaskTable)[iVar7] & uVar2) << ((byte)local_20 & 0x1f) |
                          uVar6;
                  *(int *)(param_2 + 0x14) = 0x20 - iVar7;
                  local_28 = (byte)iVar7;
                  *(uint *)(param_2 + 0x10) = uVar2 >> (local_28 & 0x1f);
                  goto LAB_00147c43;
                }
              }
              uVar4 = 0;
            }
          }
          else {
            uVar4 = (&CBitBuffer::s_nMaskTable)[iVar7] & uVar6;
            *(int *)(param_2 + 0x14) = iVar5 - iVar7;
            if (iVar5 - iVar7 == 0) {
              puVar1 = *(undefined4 **)(param_2 + 0x18);
              *(undefined4 *)(param_2 + 0x14) = 0x20;
              if (puVar1 == *(undefined4 **)(param_2 + 0x1c)) {
                *(undefined4 *)(param_2 + 0x14) = 1;
                *(undefined4 *)(param_2 + 0x10) = 0;
                *(undefined4 **)(param_2 + 0x18) = puVar1 + 1;
              }
              else if (*(undefined4 **)(param_2 + 0x1c) < puVar1) {
                param_2[4] = (bf_read)0x1;
                *(undefined4 *)(param_2 + 0x10) = 0;
              }
              else {
                *(undefined4 **)(param_2 + 0x18) = puVar1 + 1;
                *(undefined4 *)(param_2 + 0x10) = *puVar1;
              }
            }
            else {
              *(uint *)(param_2 + 0x10) = uVar6 >> ((byte)iVar7 & 0x1f);
            }
          }
LAB_00147c43:
          iVar5 = *(int *)(param_1 + 0xc);
          iVar7 = *(int *)(param_3 + 0x14);
          if (iVar7 < iVar5) {
            puVar3 = *(uint **)(param_3 + 0x18);
            uVar6 = *(uint *)(param_3 + 0x10);
            if (puVar3 == *(uint **)(param_3 + 0x1c)) {
              *(undefined4 *)(param_3 + 0x14) = 1;
              uVar6 = 0;
              *(undefined4 *)(param_3 + 0x10) = 0;
              *(uint **)(param_3 + 0x18) = puVar3 + 1;
              param_3[4] = (bf_read)0x1;
            }
            else {
              if (*(uint **)(param_3 + 0x1c) < puVar3) {
                param_3[4] = (bf_read)0x1;
                *(undefined4 *)(param_3 + 0x10) = 0;
              }
              else {
                *(uint **)(param_3 + 0x18) = puVar3 + 1;
                uVar2 = *puVar3;
                *(uint *)(param_3 + 0x10) = uVar2;
                if (param_3[4] == (bf_read)0x0) {
                  iVar5 = iVar5 - iVar7;
                  uVar6 = ((&CBitBuffer::s_nMaskTable)[iVar5] & uVar2) << ((byte)iVar7 & 0x1f) |
                          uVar6;
                  *(int *)(param_3 + 0x14) = 0x20 - iVar5;
                  *(uint *)(param_3 + 0x10) = uVar2 >> ((byte)iVar5 & 0x1f);
                  goto LAB_00147c71;
                }
              }
              uVar6 = 0;
            }
          }
          else {
            uVar6 = (&CBitBuffer::s_nMaskTable)[iVar5];
            *(int *)(param_3 + 0x14) = iVar7 - iVar5;
            uVar6 = uVar6 & *(uint *)(param_3 + 0x10);
            if (iVar7 - iVar5 == 0) {
              puVar1 = *(undefined4 **)(param_3 + 0x18);
              *(undefined4 *)(param_3 + 0x14) = 0x20;
              if (puVar1 == *(undefined4 **)(param_3 + 0x1c)) {
                *(undefined4 *)(param_3 + 0x14) = 1;
                *(undefined4 *)(param_3 + 0x10) = 0;
                *(undefined4 **)(param_3 + 0x18) = puVar1 + 1;
              }
              else if (*(undefined4 **)(param_3 + 0x1c) < puVar1) {
                param_3[4] = (bf_read)0x1;
                *(undefined4 *)(param_3 + 0x10) = 0;
              }
              else {
                *(undefined4 **)(param_3 + 0x18) = puVar1 + 1;
                *(undefined4 *)(param_3 + 0x10) = *puVar1;
              }
            }
            else {
              *(uint *)(param_3 + 0x10) = *(uint *)(param_3 + 0x10) >> ((byte)iVar5 & 0x1f);
            }
          }
LAB_00147c71:
          return uVar4 != uVar6;
        }
        lVar8 = (longdouble)
                CBitRead::ReadBitCellCoord((CBitRead *)param_2,*(undefined4 *)(param_1 + 0xc),1);
        uVar10 = 1;
      }
      else {
        lVar8 = (longdouble)
                CBitRead::ReadBitCellCoord((CBitRead *)param_2,*(undefined4 *)(param_1 + 0xc),0);
        uVar10 = 0;
      }
      lVar9 = (longdouble)
              CBitRead::ReadBitCellCoord((CBitRead *)param_3,*(undefined4 *)(param_1 + 0xc),uVar10);
LAB_00147bca:
      return (float)lVar8 != (float)lVar9;
    }
    iVar5 = *(int *)(param_2 + 0x14);
    if (iVar5 < 0xc) {
      puVar3 = *(uint **)(param_2 + 0x18);
      uVar6 = *(uint *)(param_2 + 0x10);
      if (puVar3 == *(uint **)(param_2 + 0x1c)) {
        *(undefined4 *)(param_2 + 0x14) = 1;
        *(uint **)(param_2 + 0x18) = puVar3 + 1;
        uVar6 = 0;
        *(undefined4 *)(param_2 + 0x10) = 0;
        param_2[4] = (bf_read)0x1;
      }
      else {
        if (*(uint **)(param_2 + 0x1c) < puVar3) {
          param_2[4] = (bf_read)0x1;
          *(undefined4 *)(param_2 + 0x10) = 0;
        }
        else {
          *(uint **)(param_2 + 0x18) = puVar3 + 1;
          uVar4 = *puVar3;
          *(uint *)(param_2 + 0x10) = uVar4;
          if (param_2[4] == (bf_read)0x0) {
            uVar6 = (uVar4 & (&CBitBuffer::s_nMaskTable)[0xc - iVar5]) << ((byte)iVar5 & 0x1f) |
                    uVar6;
            *(int *)(param_2 + 0x14) = iVar5 + 0x14;
            *(uint *)(param_2 + 0x10) = *(uint *)(param_2 + 0x10) >> ((byte)(0xc - iVar5) & 0x1f);
            goto LAB_00147ab9;
          }
        }
        uVar6 = 0;
      }
    }
    else {
      *(int *)(param_2 + 0x14) = iVar5 + -0xc;
      uVar6 = *(uint *)(param_2 + 0x10) & 0xfff;
      if (iVar5 + -0xc == 0) {
        puVar1 = *(undefined4 **)(param_2 + 0x18);
        *(undefined4 *)(param_2 + 0x14) = 0x20;
        if (puVar1 == *(undefined4 **)(param_2 + 0x1c)) {
          *(undefined4 *)(param_2 + 0x14) = 1;
          *(undefined4 *)(param_2 + 0x10) = 0;
          *(undefined4 **)(param_2 + 0x18) = puVar1 + 1;
        }
        else if (*(undefined4 **)(param_2 + 0x1c) < puVar1) {
          param_2[4] = (bf_read)0x1;
          *(undefined4 *)(param_2 + 0x10) = 0;
        }
        else {
          *(undefined4 **)(param_2 + 0x18) = puVar1 + 1;
          *(undefined4 *)(param_2 + 0x10) = *puVar1;
        }
      }
      else {
        *(uint *)(param_2 + 0x10) = *(uint *)(param_2 + 0x10) >> 0xc;
      }
    }
LAB_00147ab9:
    iVar5 = *(int *)(param_3 + 0x14);
    if (iVar5 < 0xc) {
      local_20 = *(uint *)(param_3 + 0x10);
      puVar3 = *(uint **)(param_3 + 0x18);
      if (puVar3 == *(uint **)(param_3 + 0x1c)) goto LAB_00147ee0;
      if (*(uint **)(param_3 + 0x1c) <= puVar3) goto LAB_00147cd0;
      *(uint **)(param_3 + 0x18) = puVar3 + 1;
      uVar4 = *puVar3;
      *(uint *)(param_3 + 0x10) = uVar4;
      if (param_3[4] == (bf_read)0x0) {
        iVar7 = 0xc - iVar5;
        uVar2 = ((&CBitBuffer::s_nMaskTable)[iVar7] & uVar4) << ((byte)iVar5 & 0x1f);
        iVar5 = iVar5 + 0x14;
        goto LAB_00147cb7;
      }
      goto LAB_00147cdb;
    }
    *(int *)(param_3 + 0x14) = iVar5 + -0xc;
    uVar2 = *(uint *)(param_3 + 0x10) & 0xfff;
    if (iVar5 + -0xc != 0) {
      *(uint *)(param_3 + 0x10) = *(uint *)(param_3 + 0x10) >> 0xc;
      goto LAB_00147a35;
    }
LAB_00147b30:
    puVar1 = *(undefined4 **)(param_3 + 0x18);
    *(undefined4 *)(param_3 + 0x14) = 0x20;
    if (puVar1 == *(undefined4 **)(param_3 + 0x1c)) {
      *(undefined4 *)(param_3 + 0x14) = 1;
      *(undefined4 *)(param_3 + 0x10) = 0;
      *(undefined4 **)(param_3 + 0x18) = puVar1 + 1;
      goto LAB_00147a35;
    }
    if (puVar1 <= *(undefined4 **)(param_3 + 0x1c)) {
      *(undefined4 **)(param_3 + 0x18) = puVar1 + 1;
      *(undefined4 *)(param_3 + 0x10) = *puVar1;
      goto LAB_00147a35;
    }
    param_3[4] = (bf_read)0x1;
  }
  else {
    iVar5 = *(int *)(param_2 + 0x14);
    if (iVar5 < 0x20) {
      puVar3 = *(uint **)(param_2 + 0x18);
      uVar6 = *(uint *)(param_2 + 0x10);
      if (puVar3 == *(uint **)(param_2 + 0x1c)) {
        *(undefined4 *)(param_2 + 0x14) = 1;
        *(uint **)(param_2 + 0x18) = puVar3 + 1;
        uVar6 = 0;
        *(undefined4 *)(param_2 + 0x10) = 0;
        param_2[4] = (bf_read)0x1;
      }
      else {
        if (puVar3 < *(uint **)(param_2 + 0x1c)) {
          *(uint **)(param_2 + 0x18) = puVar3 + 1;
          uVar4 = *puVar3;
          *(uint *)(param_2 + 0x10) = uVar4;
          if (param_2[4] == (bf_read)0x0) {
            *(int *)(param_2 + 0x14) = iVar5;
            uVar6 = ((&CBitBuffer::s_nMaskTable)[0x20 - iVar5] & uVar4) << ((byte)iVar5 & 0x1f) |
                    uVar6;
            *(uint *)(param_2 + 0x10) = uVar4 >> ((byte)(0x20 - iVar5) & 0x1f);
            goto LAB_00147a0c;
          }
        }
        else {
          param_2[4] = (bf_read)0x1;
          *(undefined4 *)(param_2 + 0x10) = 0;
        }
        uVar6 = 0;
      }
    }
    else {
      *(int *)(param_2 + 0x14) = iVar5 + -0x20;
      uVar6 = *(uint *)(param_2 + 0x10);
      if (iVar5 + -0x20 == 0) {
        puVar1 = *(undefined4 **)(param_2 + 0x18);
        *(undefined4 *)(param_2 + 0x14) = 0x20;
        if (puVar1 == *(undefined4 **)(param_2 + 0x1c)) {
          *(undefined4 *)(param_2 + 0x14) = 1;
          *(undefined4 *)(param_2 + 0x10) = 0;
          *(undefined4 **)(param_2 + 0x18) = puVar1 + 1;
        }
        else {
          if (*(undefined4 **)(param_2 + 0x1c) < puVar1) {
            param_2[4] = (bf_read)0x1;
            goto LAB_00147a05;
          }
          *(undefined4 **)(param_2 + 0x18) = puVar1 + 1;
          *(undefined4 *)(param_2 + 0x10) = *puVar1;
        }
      }
      else {
LAB_00147a05:
        *(undefined4 *)(param_2 + 0x10) = 0;
      }
    }
LAB_00147a0c:
    iVar5 = *(int *)(param_3 + 0x14);
    if (iVar5 < 0x20) {
      local_20 = *(uint *)(param_3 + 0x10);
      puVar3 = *(uint **)(param_3 + 0x18);
      if (puVar3 == *(uint **)(param_3 + 0x1c)) {
LAB_00147ee0:
        *(undefined4 *)(param_3 + 0x14) = 1;
        *(uint **)(param_3 + 0x18) = puVar3 + 1;
        uVar2 = 0;
        *(undefined4 *)(param_3 + 0x10) = 0;
        param_3[4] = (bf_read)0x1;
        goto LAB_00147a35;
      }
      if (puVar3 < *(uint **)(param_3 + 0x1c)) {
        *(uint **)(param_3 + 0x18) = puVar3 + 1;
        uVar4 = *puVar3;
        *(uint *)(param_3 + 0x10) = uVar4;
        if (param_3[4] == (bf_read)0x0) {
          iVar7 = 0x20 - iVar5;
          uVar2 = ((&CBitBuffer::s_nMaskTable)[iVar7] & uVar4) << ((byte)iVar5 & 0x1f);
LAB_00147cb7:
          *(int *)(param_3 + 0x14) = iVar5;
          uVar2 = uVar2 | local_20;
          *(uint *)(param_3 + 0x10) = uVar4 >> ((byte)iVar7 & 0x1f);
          goto LAB_00147a35;
        }
      }
      else {
LAB_00147cd0:
        param_3[4] = (bf_read)0x1;
        *(undefined4 *)(param_3 + 0x10) = 0;
      }
LAB_00147cdb:
      uVar2 = 0;
      goto LAB_00147a35;
    }
    *(int *)(param_3 + 0x14) = iVar5 + -0x20;
    uVar2 = *(uint *)(param_3 + 0x10);
    if (iVar5 + -0x20 == 0) goto LAB_00147b30;
  }
  *(undefined4 *)(param_3 + 0x10) = 0;
LAB_00147a35:
  return uVar6 != uVar2;
}

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)