L L4D2node

SV_StartSound

0x001ff500 · 884 bytes · __cdecl

_Z13SV_StartSoundR16IRecipientFilterP7edict_tiPKcf12soundlevel_tiiPK6VectorfiP10CUtlVectorIS6_10CUtlMemoryIS6_iEE

Decompiled

undefined (12 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* SV_StartSound(IRecipientFilter&, edict_t*, int, char const*, float, soundlevel_t, int, int,
   Vector const*, float, int, CUtlVector<Vector, CUtlMemory<Vector, int> >*) */

void SV_StartSound(IRecipientFilter *param_1,edict_t *param_2,undefined4 param_3,byte *param_4,
                  undefined4 param_5,undefined4 param_6,uint param_7,undefined4 param_8,
                  undefined4 *param_9,float param_10,undefined4 param_11,
                  CUtlVector<Vector,CUtlMemory<Vector,int>> *param_12)

{
  byte bVar1;
  int *piVar2;
  int iVar3;
  int iVar4;
  ICollideable *pIVar5;
  byte *pbVar6;
  longdouble lVar7;
  undefined4 local_74;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  float local_48;
  float local_44;
  undefined4 local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  uint local_30;
  int local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined1 local_20;
  undefined1 local_1f;
  undefined1 local_1e;
  
  local_48 = 0.0;
  local_44 = 0.0;
  local_4c = 0x3f800000;
  local_24 = 0x4b;
  local_34 = 100;
  local_3c = 0;
  local_28 = 0xffffffff;
  local_38 = 6;
  local_2c = 0;
  local_30 = 0;
  local_40 = 0;
  local_50 = 0;
  local_1e = 0;
  local_20 = 0;
  local_1f = 0;
  local_74 = 0;
  local_70 = 0;
  local_6c = 0;
  local_68 = 0;
  local_64 = 0;
  local_60 = 0;
  local_5c = 0;
  local_58 = 0;
  local_54 = 0;
  if (param_2 == (edict_t *)0x0) {
    local_38 = param_3;
    local_4c = param_5;
    local_24 = param_6;
    local_30 = param_7;
    local_34 = param_8;
    local_28 = param_11;
    if (param_9 == (undefined4 *)0x0) goto LAB_001ff617;
  }
  else {
    local_3c = NUM_FOR_EDICT(param_2);
    local_4c = param_5;
    local_38 = param_3;
    local_24 = param_6;
    local_30 = param_7;
    local_34 = param_8;
    local_28 = param_11;
    if (param_9 == (undefined4 *)0x0) {
      if ((((byte)*param_2 & 4) != 0) && (piVar2 = *(int **)(param_2 + 0xc), piVar2 != (int *)0x0))
      {
        pIVar5 = (ICollideable *)(**(code **)(*piVar2 + 0x10))(piVar2);
        CM_WorldSpaceCenter(pIVar5,(Vector *)&local_74);
      }
      goto LAB_001ff617;
    }
  }
  local_24 = param_6;
  local_28 = param_11;
  local_30 = param_7;
  local_34 = param_8;
  local_38 = param_3;
  local_4c = param_5;
  local_74 = *param_9;
  local_70 = param_9[1];
  local_6c = param_9[2];
LAB_001ff617:
  if (param_12 != (CUtlVector<Vector,CUtlMemory<Vector,int>> *)0x0) {
    CUtlVector<Vector,CUtlMemory<Vector,int>>::InsertBefore
              (param_12,*(int *)(param_12 + 0xc),(Vector *)&local_74);
  }
  if (param_10 != 0.0) {
    param_10 = _DAT_003b806c + param_10;
    lVar7 = (longdouble)CBaseServer::GetFinalTickTime((CBaseServer *)&sv);
    local_44 = (float)lVar7;
    lVar7 = (longdouble)CBaseServer::GetFinalTickTime((CBaseServer *)&sv);
    local_30 = local_30 | 0x10;
    local_48 = param_10 - (float)lVar7;
  }
  pbVar6 = param_4;
  if (param_4 == (byte *)0x0) {
LAB_001ff688:
    local_20 = 0;
    local_2c = CGameServer::LookupSoundIndex((CGameServer *)&sv,(char *)param_4);
    if ((local_2c == 0) || (iVar4 = CGameServer::GetSound((CGameServer *)&sv,local_2c), iVar4 == 0))
    {
      ConMsg("SV_StartSound: %s not precached (%d)\n",param_4,local_2c);
      return;
    }
LAB_001ff7a0:
    CGameServer::BroadcastSound((CGameServer *)&sv,(SoundInfo_t *)&local_74,param_1);
    return;
  }
  do {
    bVar1 = *pbVar6;
    if ((bVar1 & 0xfd) == 0x21) {
LAB_001ff6c8:
      if (bVar1 == 0x21) {
        local_20 = 1;
        for (pbVar6 = param_4;
            ((((bVar1 = *pbVar6, bVar1 == 0x21 || ((byte)(bVar1 - 0x23) < 2)) ||
              ((byte)(bVar1 - 0x28) < 3)) || (((byte)(bVar1 - 0x3e) < 3 || (bVar1 == 0x3c)))) ||
            ((bVar1 == 0x5e || (bVar1 == 0x7d)))); pbVar6 = pbVar6 + 1) {
        }
        iVar4 = V_atoi((char *)pbVar6);
        local_2c = iVar4;
        iVar3 = VOX_SentenceCount();
        if (iVar3 <= iVar4) {
          for (; (((bVar1 = *param_4, bVar1 == 0x21 || ((byte)(bVar1 - 0x23) < 2)) ||
                  (((byte)(bVar1 - 0x28) < 3 ||
                   ((((byte)(bVar1 - 0x3e) < 3 || (bVar1 == 0x3c)) || (bVar1 == 0x5e)))))) ||
                 (bVar1 == 0x7d)); param_4 = param_4 + 1) {
          }
          ConMsg("SV_StartSound: invalid sentence number: %s",param_4);
          return;
        }
        goto LAB_001ff7a0;
      }
    }
    else if (2 < (byte)(bVar1 - 0x28)) {
      if (((byte)(bVar1 - 0x3e) < 3) || (bVar1 == 0x3c)) goto LAB_001ff6c8;
      if (((bVar1 != 0x5e) && (bVar1 != 0x7d)) && (bVar1 != 0x24)) goto LAB_001ff688;
    }
    pbVar6 = pbVar6 + 1;
  } while( true );
}

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)