L L4D2node

VOX_AddSentenceWavesToResList

0x000f3660 · 594 bytes · unknown

_Z29VOX_AddSentenceWavesToResListv

Decompiled

undefined (0 params)

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* VOX_AddSentenceWavesToResList() */

void VOX_AddSentenceWavesToResList(void)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  undefined4 *puVar6;
  int iVar7;
  code *local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  code *local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  piVar1 = (int *)CommandLine_Tier0();
  iVar2 = (**(code **)(*piVar1 + 0x28))(piVar1,"-makereslists");
  if (iVar2 == 0) {
    piVar1 = (int *)CommandLine_Tier0();
    iVar2 = (**(code **)(*piVar1 + 0x28))(piVar1,"-spewsentences");
    if (iVar2 == 0) {
      return;
    }
  }
  piVar1 = (int *)CommandLine_Tier0();
  iVar3 = (**(code **)(*piVar1 + 0x28))(piVar1,"-spewsentences");
  iVar2 = DAT_00350438;
  local_60 = 0;
  local_5c = 0;
  iVar5 = 0;
  iVar7 = 0;
  local_58 = 0;
  local_54 = 0xffffffff;
  local_50 = 0;
  local_4c = 0xffffffff;
  local_48 = 0xffffffff;
  local_44 = 0;
  local_64 = CaselessStringLessThan;
  local_40 = CCPairLessFunc;
  local_3c = 0;
  local_38 = 0;
  local_34 = 0;
  local_30 = 0xffffffff;
  local_2c = 0;
  local_28 = 0xffffffff;
  local_24 = 0xffffffff;
  local_20 = 0;
  if (0 < DAT_00350438) {
    do {
      while( true ) {
        puVar6 = (undefined4 *)(g_Sentences + iVar5);
                    /* try { // try from 000f3778 to 000f381f has its CatchHandler @ 000f38c0 */
        iVar4 = V_strnicmp((char *)*puVar6,"V_",2);
        if (((iVar4 != 0) && (iVar3 != 0)) &&
           (iVar4 = VOX_LookupString(*puVar6,0,0,0,0), iVar4 != 0)) break;
        iVar7 = iVar7 + 1;
        iVar5 = iVar5 + 0xc;
        if (iVar7 == iVar2) goto LAB_000f3800;
      }
      Msg("%s : %s\n",*puVar6,iVar4);
      iVar7 = iVar7 + 1;
      iVar5 = iVar5 + 0xc;
    } while (iVar7 != iVar2);
  }
LAB_000f3800:
  VOX_TouchSounds((CUtlDict *)&local_64,(CUtlRBTree *)&local_40,iVar3 != 0);
  CUtlDict<int,int>::RemoveAll((CUtlDict<int,int> *)&local_64);
  CUtlRBTree<ccpair,int,bool(*)(ccpair_const&,ccpair_const&),CUtlMemory<UtlRBTreeNode_t<ccpair,int>,int>>
  ::RemoveAll((CUtlRBTree<ccpair,int,bool(*)(ccpair_const&,ccpair_const&),CUtlMemory<UtlRBTreeNode_t<ccpair,int>,int>>
               *)&local_40);
  local_28 = 0xffffffff;
  CUtlMemory<UtlRBTreeNode_t<ccpair,int>,int>::Purge
            ((CUtlMemory<UtlRBTreeNode_t<ccpair,int>,int> *)&local_3c);
  local_24 = 0xffffffff;
  CUtlMemory<UtlRBTreeNode_t<ccpair,int>,int>::Purge
            ((CUtlMemory<UtlRBTreeNode_t<ccpair,int>,int> *)&local_3c);
  CUtlDict<int,int>::RemoveAll((CUtlDict<int,int> *)&local_64);
  CUtlRBTree<CUtlMap<char_const*,int,int>::Node_t,int,CUtlMap<char_const*,int,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char_const*,int,int>::Node_t,int>,int>>
  ::RemoveAll((CUtlRBTree<CUtlMap<char_const*,int,int>::Node_t,int,CUtlMap<char_const*,int,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char_const*,int,int>::Node_t,int>,int>>
               *)&local_64);
  local_4c = 0xffffffff;
  CUtlMemory<UtlRBTreeNode_t<CUtlMap<char_const*,int,int>::Node_t,int>,int>::Purge
            ((CUtlMemory<UtlRBTreeNode_t<CUtlMap<char_const*,int,int>::Node_t,int>,int> *)&local_60)
  ;
  local_48 = 0xffffffff;
  CUtlMemory<UtlRBTreeNode_t<CUtlMap<char_const*,int,int>::Node_t,int>,int>::Purge
            ((CUtlMemory<UtlRBTreeNode_t<CUtlMap<char_const*,int,int>::Node_t,int>,int> *)&local_60)
  ;
  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)