SHARE
TWEET

FX_FireBullets pseudo code, IDA, client.dll

a guest Nov 24th, 2011 330 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void __cdecl sub_10231040(int a1, int a2, int a3, int a4, int a5, int a6, float a7, float a8, float a9)
  2. {
  3.   int v9; // eax@1
  4.   int v10; // edi@1
  5.   int v11; // ebp@3
  6.   int v12; // eax@5
  7.   signed __int16 v13; // di@7
  8.   int v14; // edi@9
  9.   int v15; // eax@15
  10.   float v16; // ST4C_4@26
  11.   double v17; // st7@26
  12.   int v18; // esi@26
  13.   bool v19; // zf@26
  14.   bool v20; // sf@26
  15.   float v21; // ST4C_4@27
  16.   double v22; // st7@27
  17.   unsigned __int8 v23; // of@27
  18.   int i; // esi@28
  19.   int v25; // eax@30
  20.   signed int v26; // [sp+24h] [bp-138h]@12
  21.   int v27; // [sp+3Ch] [bp-120h]@15
  22.   float v28; // [sp+40h] [bp-11Ch]@15
  23.   int v29; // [sp+48h] [bp-114h]@15
  24.   int v30; // [sp+4Ch] [bp-110h]@15
  25.   float v31; // [sp+50h] [bp-10Ch]@26
  26.   int v32; // [sp+54h] [bp-108h]@15
  27.   float v33; // [sp+58h] [bp-104h]@26
  28.   int v34[15]; // [sp+5Ch] [bp-100h]@29
  29.   float v35; // [sp+98h] [bp-C4h]@27
  30.   int v36[16]; // [sp+9Ch] [bp-C0h]@29
  31.   char v37; // [sp+DCh] [bp-80h]@7
  32.  
  33.   v9 = sub_10090A20(a1);
  34.   v10 = v9;
  35.   if ( v9 && (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 496))(v9) )
  36.     v11 = __RTDynamicCast(
  37.             v10,
  38.             0,
  39.             (struct _s_RTTICompleteObjectLocator *)&off_106A73E4,
  40.             (struct TypeDescriptor *)&off_106C110C,
  41.             0);
  42.   else
  43.     v11 = 0;
  44.   v12 = sub_10242390(a4);
  45.   if ( !v12 )
  46.   {
  47.     DevMsg("FX_FireBullets: weapon alias for ID %i not found\n", a4);
  48.     return;
  49.   }
  50.   sub_10322A70(&v37, 0x80u, "weapon_%s", v12);
  51.   v13 = sub_10173BE0((int)&v37);
  52.   if ( v13 == (unsigned __int16)sub_10110B90() )
  53.   {
  54.     DevMsg("FX_FireBullets: LookupWeaponInfoSlot failed for weapon %s\n", &v37);
  55.     return;
  56.   }
  57.   v14 = (int)sub_10173B00(v13);
  58.   if ( v11 && !(unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)(v11 + 8) + 32))(v11 + 8) )
  59.   {
  60.     if ( a5 )
  61.       v26 = 1;
  62.     else
  63.       v26 = 0;
  64.     (***(void (__stdcall ****)(_DWORD, _DWORD))(v11 + 4968))(v26, 0);
  65.   }
  66.   v15 = 1;
  67.   v27 = *(_DWORD *)(v14 + 2184);
  68.   v30 = *(_DWORD *)(v14 + 2188);
  69.   v32 = *(_DWORD *)(v14 + 2180);
  70.   LODWORD(v28) = *(_DWORD *)(v14 + 2192);
  71.   v29 = *(_DWORD *)(v14 + 1728);
  72.   if ( a4 == 2 )
  73.   {
  74.     if ( a5 == 1 )
  75.     {
  76.       v27 = 18;
  77.       v28 = flt_1051FD0C;
  78.     }
  79.     goto LABEL_25;
  80.   }
  81.   if ( a4 == 21 )
  82.   {
  83.     if ( a5 != 1 )
  84.       goto LABEL_25;
  85.     LODWORD(v28) = dword_105324CC;
  86.     goto LABEL_24;
  87.   }
  88.   if ( a4 == 16 && a5 == 1 )
  89.   {
  90.     v27 = 30;
  91. LABEL_24:
  92.     v15 = 11;
  93.   }
  94. LABEL_25:
  95.   sub_10230E60(a1, v15, a2, v14, a9);
  96.   if ( v11 )
  97.   {
  98.     sub_100BE010(sub_10230EF0);
  99.     RandomSeed(a6 + 1);
  100.     v16 = RandomFloat(0.0, 6.2831855);
  101.     v17 = RandomFloat(0.0, LODWORD(a7));
  102.     v18 = 0;
  103.     v19 = *(_DWORD *)(v14 + 2196) == 0;
  104.     v20 = *(_DWORD *)(v14 + 2196) < 0;
  105.     v31 = cos(v16) * v17;
  106.     v33 = v17 * sin(v16);
  107.     if ( !(v20 | v19) )
  108.     {
  109.       do
  110.       {
  111.         v21 = RandomFloat(0.0, 6.2831855);
  112.         v22 = RandomFloat(0.0, LODWORD(a8));
  113.         ++v18;
  114.         v23 = __OFSUB__(v18, *(_DWORD *)(v14 + 2196));
  115.         v20 = v18 - *(_DWORD *)(v14 + 2196) < 0;
  116.         *(&v35 + v18) = cos(v21) * v22;
  117.         *(&v33 + v18) = v22 * sin(v21);
  118.       }
  119.       while ( v20 ^ v23 );
  120.     }
  121.     for ( i = 0; i < *(_DWORD *)(v14 + 2196); ++i )
  122.       sub_1022C5F0(
  123.         *(_DWORD *)a2,
  124.         *(_DWORD *)(a2 + 4),
  125.         *(_DWORD *)(a2 + 8),
  126.         a3,
  127.         v30,
  128.         v32,
  129.         v29,
  130.         v27,
  131.         v28,
  132.         v11,
  133.         1,
  134.         COERCE_INT(*(float *)&v36[i] + v31),
  135.         COERCE_INT(*(float *)&v34[i] + v33));
  136.     v25 = dword_10743CA0;
  137.     dword_10743CAC = 0;
  138.     if ( dword_10743CA8 >= 0 )
  139.     {
  140.       if ( dword_10743CA0 )
  141.       {
  142.         (*(void (__stdcall **)(int))(*(_DWORD *)g_pMemAlloc + 20))(dword_10743CA0);
  143.         v25 = 0;
  144.         dword_10743CA0 = 0;
  145.       }
  146.       dword_10743CA4 = 0;
  147.     }
  148.     dword_10743CB0 = v25;
  149.     sub_100BE010(0);
  150.   }
  151. }
  152.  
RAW Paste Data
Top