L L4D2node

CRopeKeyframe::UpdateBBox

0x00808c00 · 675 bytes · __cdecl

_ZN13CRopeKeyframe10UpdateBBoxEb

Decompiled

undefined (1 param)

/* CRopeKeyframe::UpdateBBox(bool) */

void CRopeKeyframe::UpdateBBox(bool param_1)

{
  char cVar1;
  float *pfVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  undefined3 in_stack_00000005;
  float local_3c;
  float local_38;
  float local_34;
  float local_30;
  float local_2c;
  float local_28;
  float local_24;
  float local_20;
  float local_1c;
  float local_18;
  float local_14;
  float local_10;
  
  cVar1 = GetEndPointPos((int)_param_1,(Vector *)&local_3c);
  if (cVar1 == '\0') {
    local_18 = 0.0;
    local_14 = 0.0;
    local_10 = 0.0;
    local_24 = 0.0;
    local_20 = 0.0;
    local_1c = 0.0;
  }
  else {
    cVar1 = GetEndPointPos((CRopeKeyframe *)_param_1,1,(Vector *)&local_30);
    if (cVar1 == '\0') {
      if (((byte)_param_1[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition(_param_1);
      }
      local_24 = local_3c - *(float *)(_param_1 + 0x2e0);
      local_20 = local_38 - *(float *)(_param_1 + 0x2e4);
      local_1c = local_34 - *(float *)(_param_1 + 0x2e8);
      local_18 = local_24;
      local_14 = local_20;
      local_10 = local_1c;
    }
    else {
      local_24 = local_3c;
      if (local_30 <= local_3c) {
        local_24 = local_30;
      }
      local_20 = local_38;
      if (local_2c <= local_38) {
        local_20 = local_2c;
      }
      if (local_30 <= local_3c) {
        local_30 = local_3c;
      }
      local_1c = local_34;
      if (local_28 <= local_34) {
        local_1c = local_28;
      }
      if (local_2c <= local_38) {
        local_2c = local_38;
      }
      if (local_28 <= local_34) {
        local_28 = local_34;
      }
      local_18 = local_30;
      local_14 = local_2c;
      local_10 = local_28;
      if (((byte)_param_1[0x14d] & 8) == 0) {
        fVar5 = *(float *)(_param_1 + 0x2e0);
        fVar4 = *(float *)(_param_1 + 0x2e8);
        local_24 = local_24 - fVar5;
        local_1c = local_1c - fVar4;
        fVar3 = *(float *)(_param_1 + 0x2e4);
        local_20 = local_20 - fVar3;
      }
      else {
        CBaseEntity::CalcAbsolutePosition(_param_1);
        fVar5 = *(float *)(_param_1 + 0x2e0);
        local_24 = local_24 - fVar5;
        fVar3 = *(float *)(_param_1 + 0x2e4);
        local_20 = local_20 - fVar3;
        fVar4 = *(float *)(_param_1 + 0x2e8);
        local_1c = local_1c - fVar4;
        if ((*(uint *)(_param_1 + 0x14c) & 0x800) != 0) {
          CBaseEntity::CalcAbsolutePosition(_param_1);
          fVar5 = *(float *)(_param_1 + 0x2e0);
          fVar3 = *(float *)(_param_1 + 0x2e4);
          fVar4 = *(float *)(_param_1 + 0x2e8);
        }
      }
      local_18 = local_18 - fVar5;
      local_14 = local_14 - fVar3;
      local_10 = local_10 - fVar4;
    }
  }
  pfVar2 = (float *)(**(code **)(*(int *)(_param_1 + 0x194) + 4))(_param_1 + 0x194);
  if ((((local_24 != *pfVar2) || (local_20 != pfVar2[1])) || (local_1c != pfVar2[2])) ||
     (((pfVar2 = (float *)(**(code **)(*(int *)(_param_1 + 0x194) + 8))(_param_1 + 0x194),
       local_18 != *pfVar2 || (local_14 != pfVar2[1])) || (local_10 != pfVar2[2])))) {
    UTIL_SetSize(_param_1,(Vector *)&local_24,(Vector *)&local_18);
  }
  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)