L L4D2node

CResponseSystem::DescribeResponseGroup

0x005b5210 · 425 bytes · __thiscall

_ZN15CResponseSystem21DescribeResponseGroupEP13ResponseGroupii

Decompiled

undefined (4 params)

/* CResponseSystem::DescribeResponseGroup(ResponseGroup*, int, int) */

void __thiscall
CResponseSystem::DescribeResponseGroup
          (CResponseSystem *this,ResponseGroup *param_1,int param_2,int param_3)

{
  ushort uVar1;
  int iVar2;
  undefined4 uVar3;
  byte bVar4;
  undefined4 uVar5;
  int iVar6;
  undefined *puVar7;
  int iVar8;
  float fVar9;
  double local_24;
  
  iVar2 = *(int *)(param_1 + 8);
  iVar8 = 0;
  if (0 < iVar2) {
    do {
      iVar6 = iVar8 * 0x50 + *(int *)param_1;
      uVar1 = *(ushort *)(iVar6 + 0x2c);
      if ((uVar1 & 0x7fff) == 0x7c00) {
        local_24 = 65504.0;
        if ((short)uVar1 < 0) {
          local_24 = -65504.0;
        }
      }
      else {
        bVar4 = (byte)(uVar1 >> 8);
        if ((bVar4 & 0x7c) == 0x7c) {
          if ((uVar1 & 0x3ff) == 0) goto LAB_005b5368;
          local_24 = 0.0;
        }
        else {
          if (((uVar1 & 0x7c00) == 0) && ((uVar1 & 0x3ff) != 0)) {
            fVar9 = 1.0;
            if ((short)uVar1 < 0) {
              fVar9 = -1.0;
            }
            fVar9 = ((float)(uVar1 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar9;
          }
          else {
LAB_005b5368:
            fVar9 = (float)((uVar1 & 0x3ff) << 0xd | (uint)(bVar4 >> 7) << 0x1f |
                           (uint)((uVar1 >> 10 & 0x1f) != 0) * ((uVar1 >> 10 & 0x1f) + 0x70) *
                           0x800000);
          }
          local_24 = (double)fVar9;
        }
      }
      uVar3 = *(undefined4 *)(iVar6 + 0x28);
      uVar5 = AI_Response::DescribeResponse(*(byte *)(iVar6 + 0x2f) & 0x3f);
      puVar7 = &DAT_00c5783b;
      if (iVar8 != param_2) {
        puVar7 = &DAT_00c5783f;
      }
      iVar8 = iVar8 + 1;
      DebugPrint(this,param_3 + 1,"%s%20s : %40s %5.3f\n",puVar7,uVar5,uVar3,local_24);
    } while (iVar8 != iVar2);
  }
  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)