L L4D2node

CBasePlayerAnimState::UpdateAimSequenceLayers

0x0041ee90 · 2049 bytes · __thiscall

_ZN20CBasePlayerAnimState23UpdateAimSequenceLayersEfibP21CSequenceTransitionerf

Decompiled

undefined (6 params)

/* CBasePlayerAnimState::UpdateAimSequenceLayers(float, int, bool, CSequenceTransitioner*, float) */

void __thiscall
CBasePlayerAnimState::UpdateAimSequenceLayers
          (CBasePlayerAnimState *this,float param_1,int param_2,bool param_3,
          CSequenceTransitioner *param_4,float param_5)

{
  undefined4 uVar1;
  CBaseEntity *pCVar2;
  uint uVar3;
  CBaseEdict *pCVar4;
  float fVar5;
  CSequenceTransitioner *this_00;
  int iVar6;
  uint *puVar7;
  uint uVar8;
  uint *puVar9;
  int iVar10;
  CStudioHdr *pCVar11;
  CStudioHdr *pCVar12;
  uint *puVar13;
  uint *puVar14;
  uint *puVar15;
  byte bVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float local_20 [4];
  
  this_00 = param_4;
  bVar16 = 0;
  local_20[0] = 1.0;
  iVar6 = (**(code **)(*(int *)this + 0x30))(this,&param_1,local_20,param_3);
  pCVar2 = *(CBaseEntity **)(this + 0x14);
  if (iVar6 == -1) {
    iVar6 = 0;
  }
  pCVar11 = *(CStudioHdr **)(pCVar2 + 0x13e0);
  if (pCVar11 == (CStudioHdr *)0x0) {
    iVar10 = CBaseEntity::GetModel(pCVar2);
    if (iVar10 == 0) {
      pCVar11 = *(CStudioHdr **)(pCVar2 + 0x13e0);
    }
    else {
      CBaseAnimating::LockStudioHdr((CBaseAnimating *)pCVar2);
      pCVar11 = *(CStudioHdr **)(pCVar2 + 0x13e0);
    }
    pCVar12 = (CStudioHdr *)0x0;
    if (pCVar11 != (CStudioHdr *)0x0) goto LAB_0041eee2;
  }
  else {
LAB_0041eee2:
    pCVar12 = (CStudioHdr *)0x0;
    if (*(int *)pCVar11 != 0) {
      pCVar12 = pCVar11;
    }
  }
  CSequenceTransitioner::CheckForSequenceChange(this_00,pCVar12,iVar6,false,true);
  fVar5 = param_1;
  pCVar2 = *(CBaseEntity **)(this + 0x14);
  fVar18 = *(float *)(pCVar2 + 0x528);
  fVar17 = *(float *)(gpGlobals + 0xc);
  fVar19 = *(float *)(pCVar2 + 0x468);
  if (0.0 <= fVar18) {
    if (fVar18 <= 1.0) {
      fVar19 = fVar19 * (1.0 - fVar18);
    }
    else {
      fVar19 = 0.0;
    }
  }
  pCVar11 = *(CStudioHdr **)(pCVar2 + 0x13e0);
  if (pCVar11 == (CStudioHdr *)0x0) {
    iVar10 = CBaseEntity::GetModel(pCVar2);
    if (iVar10 == 0) {
      pCVar11 = *(CStudioHdr **)(pCVar2 + 0x13e0);
    }
    else {
      CBaseAnimating::LockStudioHdr((CBaseAnimating *)pCVar2);
      pCVar11 = *(CStudioHdr **)(pCVar2 + 0x13e0);
    }
    pCVar12 = (CStudioHdr *)0x0;
    if (pCVar11 != (CStudioHdr *)0x0) goto LAB_0041ef57;
  }
  else {
LAB_0041ef57:
    pCVar12 = (CStudioHdr *)0x0;
    if (*(int *)pCVar11 != 0) {
      pCVar12 = pCVar11;
    }
  }
  CSequenceTransitioner::UpdateCurrent(this_00,pCVar12,iVar6,fVar5,fVar19,fVar17);
  puVar7 = (uint *)CBaseAnimatingOverlay::GetAnimOverlay
                             (*(CBaseAnimatingOverlay **)(this + 0x14),param_2);
  uVar8 = param_2 + 1;
  puVar9 = (uint *)CBaseAnimatingOverlay::GetAnimOverlay
                             (*(CBaseAnimatingOverlay **)(this + 0x14),uVar8);
  if (*(int *)(this_00 + 0xc) == 1) {
    puVar14 = *(uint **)this_00;
    puVar13 = puVar7;
    for (iVar6 = 0x13; iVar6 != 0; iVar6 = iVar6 + -1) {
      *puVar13 = *puVar14;
      puVar14 = puVar14 + (uint)bVar16 * -2 + 1;
      puVar13 = puVar13 + (uint)bVar16 * -2 + 1;
    }
    if ((float)puVar7[5] != 1.0) {
      uVar8 = puVar7[0x12];
      if (uVar8 != 0) {
        if (*(char *)(uVar8 + 0x6c) == '\0') {
          pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
          if (pCVar4 != (CBaseEdict *)0x0) {
            *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
            iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
            *(undefined2 *)(iVar6 + 2) = 0;
          }
        }
        else {
          *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
        }
        uVar1 = *(undefined4 *)(gpGlobals + 0xc);
        *(undefined4 *)(uVar8 + 0x78) = 0;
        *(undefined4 *)(uVar8 + 0x74) = uVar1;
      }
      puVar7[5] = 0x3f800000;
    }
    if ((float)puVar9[5] != 0.0) {
      uVar8 = puVar9[0x12];
      if (uVar8 != 0) {
        if (*(char *)(uVar8 + 0x6c) == '\0') {
          pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
          if (pCVar4 != (CBaseEdict *)0x0) {
            *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
            iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
            *(undefined2 *)(iVar6 + 2) = 0;
          }
        }
        else {
          *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
        }
        uVar1 = *(undefined4 *)(gpGlobals + 0xc);
        *(undefined4 *)(uVar8 + 0x78) = 0;
        *(undefined4 *)(uVar8 + 0x74) = uVar1;
      }
      puVar9[5] = 0;
    }
    if (param_2 != puVar7[0xf]) {
      uVar8 = puVar7[0x12];
      if (uVar8 != 0) {
        if (*(char *)(uVar8 + 0x6c) == '\0') {
          pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
          if (pCVar4 != (CBaseEdict *)0x0) {
            *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
            iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
            *(undefined2 *)(iVar6 + 2) = 0;
          }
        }
        else {
          *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
        }
        uVar1 = *(undefined4 *)(gpGlobals + 0xc);
        *(undefined4 *)(uVar8 + 0x78) = 0;
        *(undefined4 *)(uVar8 + 0x74) = uVar1;
      }
      puVar7[0xf] = param_2;
    }
    *puVar7 = *puVar7 | 1;
    goto LAB_0041f0b8;
  }
  if (*(int *)(this_00 + 0xc) < 2) goto LAB_0041f0b8;
  puVar14 = *(uint **)this_00;
  puVar13 = puVar14;
  puVar15 = puVar7;
  for (iVar6 = 0x13; iVar6 != 0; iVar6 = iVar6 + -1) {
    *puVar15 = *puVar13;
    puVar13 = puVar13 + (uint)bVar16 * -2 + 1;
    puVar15 = puVar15 + (uint)bVar16 * -2 + 1;
  }
  puVar14 = puVar14 + 0x13;
  puVar13 = puVar9;
  for (iVar6 = 0x13; iVar6 != 0; iVar6 = iVar6 + -1) {
    *puVar13 = *puVar14;
    puVar14 = puVar14 + (uint)bVar16 * -2 + 1;
    puVar13 = puVar13 + (uint)bVar16 * -2 + 1;
  }
  fVar18 = (float)puVar7[5];
  if (1.0 - fVar18 == (float)puVar9[5]) {
    if (param_2 != puVar7[0xf]) {
LAB_0041effa:
      uVar3 = puVar7[0x12];
      if (uVar3 != 0) {
        if (*(char *)(uVar3 + 0x6c) == '\0') {
          pCVar4 = *(CBaseEdict **)(uVar3 + 0x30);
          if (pCVar4 != (CBaseEdict *)0x0) {
            *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
            iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
            *(undefined2 *)(iVar6 + 2) = 0;
          }
        }
        else {
          *(byte *)(uVar3 + 0x70) = *(byte *)(uVar3 + 0x70) | 1;
        }
        uVar1 = *(undefined4 *)(gpGlobals + 0xc);
        *(undefined4 *)(uVar3 + 0x78) = 0;
        *(undefined4 *)(uVar3 + 0x74) = uVar1;
      }
      puVar7[0xf] = param_2;
    }
  }
  else {
    uVar3 = puVar9[0x12];
    if (uVar3 != 0) {
      if (*(char *)(uVar3 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar3 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar3 + 0x70) = *(byte *)(uVar3 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar3 + 0x78) = 0;
      *(undefined4 *)(uVar3 + 0x74) = uVar1;
    }
    puVar9[5] = (uint)(1.0 - fVar18);
    if (param_2 != puVar7[0xf]) goto LAB_0041effa;
  }
  if (uVar8 != puVar9[0xf]) {
    uVar3 = puVar9[0x12];
    if (uVar3 != 0) {
      if (*(char *)(uVar3 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar3 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar3 + 0x70) = *(byte *)(uVar3 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar3 + 0x78) = 0;
      *(undefined4 *)(uVar3 + 0x74) = uVar1;
    }
    puVar9[0xf] = uVar8;
  }
  *puVar7 = *puVar7 | 1;
  *puVar9 = *puVar9 | 1;
LAB_0041f0b8:
  fVar18 = (float)puVar7[5];
  fVar17 = param_5 * local_20[0] * fVar18;
  if (fVar17 != fVar18) {
    uVar8 = puVar7[0x12];
    if (uVar8 != 0) {
      if (*(char *)(uVar8 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar8 + 0x78) = 0;
      *(undefined4 *)(uVar8 + 0x74) = uVar1;
    }
    puVar7[5] = (uint)fVar17;
    fVar18 = fVar17;
  }
  fVar17 = 0.0;
  if (0.0 <= fVar18) {
    fVar17 = fVar18;
  }
  if (1.0 <= fVar17) {
    fVar17 = 1.0;
  }
  if (fVar18 != fVar17) {
    uVar8 = puVar7[0x12];
    if (uVar8 != 0) {
      if (*(char *)(uVar8 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar8 + 0x78) = 0;
      *(undefined4 *)(uVar8 + 0x74) = uVar1;
    }
    puVar7[5] = (uint)fVar17;
  }
  fVar18 = (float)puVar9[5];
  fVar17 = param_5 * local_20[0] * fVar18;
  if (fVar17 != fVar18) {
    uVar8 = puVar9[0x12];
    if (uVar8 != 0) {
      if (*(char *)(uVar8 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar8 + 0x78) = 0;
      *(undefined4 *)(uVar8 + 0x74) = uVar1;
    }
    puVar9[5] = (uint)fVar17;
    fVar18 = fVar17;
  }
  fVar17 = 0.0;
  if (0.0 <= fVar18) {
    fVar17 = fVar18;
  }
  if (1.0 <= fVar17) {
    fVar17 = 1.0;
  }
  if (fVar18 != fVar17) {
    uVar8 = puVar9[0x12];
    if (uVar8 != 0) {
      if (*(char *)(uVar8 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar8 + 0x78) = 0;
      *(undefined4 *)(uVar8 + 0x74) = uVar1;
    }
    puVar9[5] = (uint)fVar17;
  }
  fVar18 = param_1;
  if (param_1 != (float)puVar7[3]) {
    uVar8 = puVar7[0x12];
    if (uVar8 != 0) {
      if (*(char *)(uVar8 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar8 + 0x78) = 0;
      *(undefined4 *)(uVar8 + 0x74) = uVar1;
    }
    puVar7[3] = (uint)fVar18;
  }
  fVar18 = param_1;
  if (param_1 != (float)puVar9[3]) {
    uVar8 = puVar9[0x12];
    if (uVar8 != 0) {
      if (*(char *)(uVar8 + 0x6c) == '\0') {
        pCVar4 = *(CBaseEdict **)(uVar8 + 0x30);
        if (pCVar4 != (CBaseEdict *)0x0) {
          *(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
          iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
          *(undefined2 *)(iVar6 + 2) = 0;
        }
      }
      else {
        *(byte *)(uVar8 + 0x70) = *(byte *)(uVar8 + 0x70) | 1;
      }
      uVar1 = *(undefined4 *)(gpGlobals + 0xc);
      *(undefined4 *)(uVar8 + 0x78) = 0;
      *(undefined4 *)(uVar8 + 0x74) = uVar1;
    }
    puVar9[3] = (uint)fVar18;
    return;
  }
  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)