L L4D2node

CCarriedProp::CreatePhysObject

0x0052f8d0 · 1666 bytes · __thiscall

_ZN12CCarriedProp16CreatePhysObjectEv

Decompiled

undefined (1 param)

/* CCarriedProp::CreatePhysObject() */

int * __thiscall CCarriedProp::CreatePhysObject(CCarriedProp *this)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  code *pcVar6;
  int *piVar7;
  char cVar8;
  byte bVar9;
  short sVar10;
  CBasePlayer *this_00;
  uint uVar11;
  int iVar12;
  int iVar13;
  int *piVar14;
  uint *puVar15;
  undefined4 *puVar16;
  int in_GS_OFFSET;
  float fVar17;
  float local_31c;
  float local_318;
  float local_314;
  float local_300;
  float local_2fc;
  float local_2f8;
  float local_2f4;
  float local_2f0;
  float local_2ec;
  float local_2e8;
  float local_2e4;
  float local_2e0;
  CTraceFilterSimple local_2dc [16];
  float local_2cc;
  float local_2c8;
  float local_2c4;
  float local_2bc;
  float local_2b8;
  float local_2b4;
  undefined4 local_2ac;
  undefined4 local_2a8;
  undefined4 local_2a4;
  undefined4 local_29c;
  undefined4 local_298;
  undefined4 local_294;
  undefined4 local_28c;
  undefined1 local_288;
  undefined1 local_287;
  Vector local_274 [12];
  float local_268;
  float local_264;
  float local_260;
  float local_248;
  undefined1 local_220 [512];
  int local_20;
  
  puVar15 = (uint *)&stack0xfffffcb4;
  puVar16 = (undefined4 *)&stack0xfffffcb4;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  this_00 = (CBasePlayer *)CBaseCombatWeapon::GetOwner((CBaseCombatWeapon *)this);
  if (this_00 != (CBasePlayer *)0x0) {
    cVar8 = (**(code **)(*(int *)this_00 + 0x16c))();
    piVar7 = mdlcache;
    if (cVar8 != '\0') {
      (**(code **)(*mdlcache + 0x68))();
                    /* try { // try from 0052f929 to 0052fe53 has its CatchHandler @ 0052ff5e */
      uVar11 = (**(code **)(*(int *)this + 0x730))();
      sVar10 = (**(code **)(*mdlcache + 0x18))();
      if (sVar10 == -1) {
LAB_0052fe88:
        piVar14 = (int *)0x0;
      }
      else {
        iVar12 = (**(code **)(*mdlcache + 0x28))();
        if (iVar12 == 0) goto LAB_0052fe88;
        iVar13 = (**(code **)(*mdlcache + 0x30))();
        if (iVar13 == 0) goto LAB_0052fe88;
        fVar17 = *(float *)(iVar12 + 0x68);
        fVar1 = *(float *)(iVar12 + 0x6c);
        fVar2 = *(float *)(iVar12 + 0x70);
        fVar3 = *(float *)(iVar12 + 0x74);
        fVar4 = *(float *)(iVar12 + 0x78);
        fVar5 = *(float *)(iVar12 + 0x7c);
        CBasePlayer::EyeVectors(this_00,(Vector *)&local_300,(Vector *)0x0,(Vector *)0x0);
        (**(code **)(*(int *)this_00 + 0x234))();
        local_314 = (local_300 * 20.0 + local_2f4) - (fVar17 + fVar3) * 0.5;
        local_318 = (local_2fc * 20.0 + local_2f0) - (fVar1 + fVar4) * 0.5;
        local_31c = (local_2f8 * 20.0 + local_2ec) - (fVar2 + fVar5) * 0.5;
        (**(code **)(*(int *)this_00 + 0x234))();
        puVar15 = (uint *)&stack0xfffffcac;
        local_28c = 0;
        local_2bc = local_314 - local_2e8;
        local_2b8 = local_318 - local_2e4;
        local_288 = 1;
        local_2cc = local_2e8;
        local_2b4 = local_31c - local_2e0;
        local_2c8 = local_2e4;
        local_2c4 = local_2e0;
        local_294 = 0;
        local_298 = 0;
        local_29c = 0;
        local_287 = local_2bc * local_2bc + local_2b8 * local_2b8 + local_2b4 * local_2b4 != 0.0;
        local_2a4 = 0;
        local_2a8 = 0;
        local_2ac = 0;
        CTraceFilterSimple::CTraceFilterSimple
                  (local_2dc,(IHandleEntity *)this_00,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
        (**(code **)(*enginetrace + 0x14))();
        if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
          DebugDrawLine(local_274,(Vector *)&local_268,0xff,0,0,true,-1.0);
        }
        if (local_248 < 1.0) {
                    /* try { // try from 0052fe9f to 0052fef7 has its CatchHandler @ 0052ff5e */
          (**(code **)(*(int *)this_00 + 0x234))();
          puVar15 = (uint *)&stack0xfffffca8;
          local_2cc = local_2e8 - local_268;
          local_2c8 = local_2e4 - local_264;
          local_2c4 = local_2e0 - local_260;
          VectorNormalize((Vector *)&local_2cc);
          fVar17 = *(float *)(iVar12 + 0x78);
          if (*(float *)(iVar12 + 0x78) <= *(float *)(iVar12 + 0x74)) {
            fVar17 = *(float *)(iVar12 + 0x74);
          }
          local_314 = local_2cc * fVar17 + local_268;
          local_318 = local_2c8 * fVar17 + local_264;
          local_31c = fVar17 * local_2c4 + local_260;
        }
        puVar15[-1] = 0x52fc45;
        bVar9 = CBaseEntity::IsPrecacheAllowed();
        *puVar15 = 1;
        puVar15[-1] = 0x52fc57;
        CBaseEntity::SetAllowPrecache(SUB41(*puVar15,0));
        puVar15[2] = 1;
        puVar15[1] = 0xffffffff;
        *puVar15 = (uint)"physics_prop";
        puVar15[-1] = 0x52fc73;
        piVar14 = (int *)CreateEntityByName((char *)*puVar15,puVar15[1],SUB41(puVar15[2],0));
        if (piVar14 != (int *)0x0) {
          *(double *)(puVar15 + 7) = (double)local_31c;
          *(double *)(puVar15 + 5) = (double)local_318;
          *(double *)(puVar15 + 3) = (double)local_314;
          puVar15[2] = (uint)&DAT_00c341c0;
          puVar15[1] = 0x200;
          *puVar15 = (uint)local_220;
          puVar15[-1] = 0x52fcce;
          V_snprintf((char *)*puVar15,puVar15[1],(char *)puVar15[2]);
          iVar12 = *piVar14;
          puVar15[2] = (uint)local_220;
          puVar15[1] = (uint)"origin";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fce5;
          (*pcVar6)();
          *(double *)(puVar15 + 7) = (double)DAT_01053d44;
          *(double *)(puVar15 + 5) = (double)DAT_01053d40;
          *(double *)(puVar15 + 3) = (double)vec3_angle;
          puVar15[2] = (uint)&DAT_00c341c0;
          puVar15[1] = 0x200;
          *puVar15 = (uint)local_220;
          puVar15[-1] = 0x52fd30;
          V_snprintf((char *)*puVar15,puVar15[1],(char *)puVar15[2]);
          iVar12 = *piVar14;
          puVar15[2] = (uint)local_220;
          puVar15[1] = (uint)"angles";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fd47;
          (*pcVar6)();
          iVar12 = *piVar14;
          puVar15[1] = (uint)"model";
          *puVar15 = (uint)piVar14;
          puVar15[2] = uVar11;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fd64;
          (*pcVar6)();
          iVar12 = *piVar14;
          puVar15[2] = (uint)&DAT_00c0af6c;
          puVar15[1] = (uint)"fademindist";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fd7f;
          (*pcVar6)();
          iVar12 = *piVar14;
          puVar15[2] = (uint)&DAT_00c09604;
          puVar15[1] = (uint)"fademaxdist";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fd9a;
          (*pcVar6)();
          iVar12 = *piVar14;
          puVar15[2] = (uint)&DAT_00cbe2d5;
          puVar15[1] = (uint)"fadescale";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fdb5;
          (*pcVar6)();
          iVar12 = *piVar14;
          puVar15[2] = (uint)&DAT_00c096e0;
          puVar15[1] = (uint)"inertiaScale";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fdd0;
          (*pcVar6)();
          iVar12 = *piVar14;
          puVar15[2] = (uint)&DAT_00c22998;
          puVar15[1] = (uint)"physdamagescale";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fdeb;
          (*pcVar6)();
          iVar12 = *piVar14;
          puVar15[2] = (uint)&DAT_00cbe2d5;
          puVar15[1] = (uint)"glow";
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x84);
          puVar15[-1] = 0x52fe06;
          (*pcVar6)();
          iVar12 = *piVar14;
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x6c);
          puVar15[-1] = 0x52fe0e;
          (*pcVar6)();
          puVar15[1] = 1;
          *puVar15 = (uint)piVar14;
          puVar15[-1] = 0x52fe1e;
          DispatchSpawn((CBaseEntity *)*puVar15,SUB41(puVar15[1],0));
          iVar12 = *piVar14;
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x94);
          puVar15[-1] = 0x52fe29;
          (*pcVar6)();
          puVar15[1] = 0xb;
          *puVar15 = (uint)piVar14;
          puVar15[-1] = 0x52fe39;
          CBaseEntity::SetCollisionGroup((CBaseEntity *)*puVar15,puVar15[1]);
          iVar12 = *piVar14;
          puVar15[1] = (uint)this_00;
          *puVar15 = (uint)piVar14;
          pcVar6 = *(code **)(iVar12 + 0x50);
          puVar15[-1] = 0x52fe45;
          (*pcVar6)();
        }
        *puVar15 = (uint)bVar9;
        puVar15[-1] = 0x52fe54;
        CBaseEntity::SetAllowPrecache(SUB41(*puVar15,0));
      }
      iVar12 = *piVar7;
      *puVar15 = (uint)piVar7;
      pcVar6 = *(code **)(iVar12 + 0x6c);
      puVar15[-1] = 0x52fe62;
      (*pcVar6)();
      puVar16 = puVar15;
      goto LAB_0052fe6a;
    }
  }
  piVar14 = (int *)0x0;
LAB_0052fe6a:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return piVar14;
  }
                    /* WARNING: Subroutine does not return */
  *(undefined1 **)((int)puVar16 + -4) = &LAB_0052ff5e;
  __stack_chk_fail();
}

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)