Guest User

Untitled

a guest
May 17th, 2010
462
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.14 KB | None | 0 0
  1. void __thiscall CalcDamage__MDamage(CalcDamage *this, CharacterData *characterdata, BasicStat *basicstat, SecondaryStat *secondarystat, MobStat *mobstat, int nDamagePerMob, int nWeaponItemID, int nAction, SKILLENTRY *pSkill, int nSLV, int *aDamage, int *abCritical, int nMobCount, int tKeyDown)
  2. {
  3.   CRand32 *v14; // ebx@1
  4.   signed int v15; // edi@1
  5.   int v16; // esi@1
  6.   int TotalMagicAttack; // eax@3
  7.   SecondaryStat *v18; // esi@3
  8.   int EchoOfHero; // eax@7
  9.   MobStat *mobstat2; // ebx@10
  10.   signed int SharpEye_X; // eax@13
  11.   signed int v22; // ecx@13
  12.   int v23; // eax@13
  13.   int v24; // ecx@17
  14.   int v25; // eax@22
  15.   SKILLLEVELDATA *skill_Level_data; // edi@27
  16.   int v27; // eax@28
  17.   unsigned int v28; // esi@30
  18.   long double v29; // st7@30
  19.   int v30; // edx@30
  20.   double v31; // st7@30
  21.   __int16 v32; // fps@30
  22.   unsigned __int8 v33; // c0@30
  23.   unsigned __int8 v34; // c3@30
  24.   unsigned int v35; // esi@36
  25.   long double v36; // st7@36
  26.   int v37; // edx@36
  27.   __int16 v38; // fps@36
  28.   unsigned __int8 v39; // c0@36
  29.   unsigned __int8 v40; // c3@36
  30.   unsigned int v41; // esi@42
  31.   double v42; // st7@42
  32.   int v43; // edx@42
  33.   long double v44; // st7@44
  34.   long double v45; // st7@45
  35.   SKILLLEVELDATA *v46; // eax@45
  36.   unsigned int v47; // esi@48
  37.   long double v48; // st7@48
  38.   int v49; // edx@48
  39.   SKILLLEVELDATA *v50; // eax@51
  40.   int v51; // eax@52
  41.   long double v52; // st7@52
  42.   int v53; // eax@52
  43.   unsigned int v54; // esi@56
  44.   long double v55; // st7@56
  45.   double v56; // st7@56
  46.   int v57; // edx@56
  47.   __int16 v58; // fps@56
  48.   unsigned __int8 v59; // c0@56
  49.   unsigned __int8 v60; // c3@56
  50.   long double v61; // st7@62
  51.   int v62; // edx@66
  52.   int *v63; // esi@67
  53.   int aRandom[7]; // [sp+20h] [bp-90h]@1
  54.   double M; // [sp+3Ch] [bp-74h]@13
  55.   __int64 v67; // [sp+44h] [bp-6Ch]@50
  56.   double s; // [sp+4Ch] [bp-64h]@13
  57.   __int64 v69; // [sp+54h] [bp-5Ch]@66
  58.   __int64 v70; // [sp+5Ch] [bp-54h]@39
  59.   __int64 v71; // [sp+64h] [bp-4Ch]@61
  60.   __int64 v72; // [sp+6Ch] [bp-44h]@33
  61.   __int64 v73; // [sp+74h] [bp-3Ch]@44
  62.   int nCriticalAttackParam; // [sp+7Ch] [bp-34h]@17
  63.   long double v75; // [sp+80h] [bp-30h]@45
  64.   long double v76; // [sp+88h] [bp-28h]@50
  65.   double damage; // [sp+90h] [bp-20h]@45
  66.   int nAmp; // [sp+98h] [bp-18h]@10
  67.   long double a; // [sp+9Ch] [bp-14h]@30
  68.   long double b; // [sp+A4h] [bp-Ch]@30
  69.   int nIdx; // [sp+ACh] [bp-4h]@1
  70.   signed int v82; // [sp+B8h] [bp+8h]@15
  71.   signed int CalcMagicAtk_WithBuff; // [sp+C0h] [bp+10h]@5
  72.   signed int mob_evasion; // [sp+C4h] [bp+14h]@24
  73.   signed int v85; // [sp+C4h] [bp+14h]@54
  74.   signed int v86; // [sp+C4h] [bp+14h]@62
  75.   int v87; // [sp+C4h] [bp+14h]@67
  76.   unsigned int v88; // [sp+C8h] [bp+18h]@18
  77.   int v89; // [sp+CCh] [bp+1Ch]@11
  78.   int *v90; // [sp+CCh] [bp+1Ch]@18
  79.   int v91; // [sp+DCh] [bp+2Ch]@18
  80.   int char_level; // [sp+E0h] [bp+30h]@28
  81.  
  82.   nIdx = 0;
  83.   v14 = (CRand32 *)this;
  84.   v16 = (int)aRandom;
  85.   v15 = 7;
  86.   do
  87.   {
  88.     *(_DWORD *)v16 = CRand32__Random(v14);
  89.     v16 += 4;
  90.     --v15;
  91.   }
  92.   while ( v15 );
  93.   v18 = secondarystat;
  94.   TotalMagicAttack = secondarystat->nMAD + secondarystat->nMAD_;
  95.   if ( TotalMagicAttack <= 0 )
  96.     TotalMagicAttack = 0;
  97.   CalcMagicAtk_WithBuff = TotalMagicAttack;
  98.   if ( TotalMagicAttack >= 1999 )
  99.     CalcMagicAtk_WithBuff = 1999;
  100.   EchoOfHero = v18->nMaxLevelBuff_;
  101.   if ( EchoOfHero > 0 )
  102.   {
  103.     CalcMagicAtk_WithBuff += CalcMagicAtk_WithBuff * EchoOfHero / 100;
  104.     if ( CalcMagicAtk_WithBuff >= 1999 )
  105.       CalcMagicAtk_WithBuff = 1999;
  106.   }
  107.   get_weapon_type(nWeaponItemID);
  108.   mobstat2 = mobstat;
  109.   nAmp = 5 * (basicstat->nINT / 10 + basicstat->nLUK / 10);
  110.   if ( mobstat->nLevel - basicstat->nLevel <= 0 )
  111.     v89 = 0;
  112.   else
  113.     v89 = mobstat->nLevel - basicstat->nLevel;
  114.   s = (double)nAmp * 100.0 / ((double)v89 * 10.0 + 255.0);
  115.   M = ((double)SKILLENTRY__GetLevelData(pSkill, nSLV)->nMastery * 5.0 + 10.0) * 0.009000000000000001;
  116.   v23 = get_amplification(characterdata, 0, 0);
  117.   v22 = v18->nSharpEyes_;
  118.   nAmp = v23;
  119.   SharpEye_X = v22 >> 8;                        // As Sharp eye x and y value is stored in an int_16 together [ret.x << 8 | ret.y]
  120.   if ( v22 >> 8 <= 0 )
  121.     SharpEye_X = 0;
  122.   v82 = SharpEye_X;
  123.   if ( SharpEye_X >= 100 )
  124.     v82 = 100;
  125.   nCriticalAttackParam = (unsigned __int8)v22;
  126.   v24 = nDamagePerMob;
  127.   if ( nDamagePerMob > 0 )
  128.   {
  129.     v90 = aDamage;
  130.     v88 = (char *)abCritical - (char *)aDamage;
  131.     v91 = v24;
  132.     do
  133.     {
  134.       *v90 = 0;
  135.       if ( mobstat2->bInvincible )
  136.         goto LABEL_79;
  137.       if ( mobstat2->nMImmune_ )                // Monster is magic immune
  138.       {
  139.         *v90 = 1;
  140.         goto LABEL_79;
  141.       }
  142.       v25 = mobstat2->nEVA + mobstat2->nEVA_;   // Monster total evasion + buffed evasion
  143.       if ( v25 <= 0 )                           // If total evasion is zero or below, convert to zero
  144.         v25 = 0;
  145.       mob_evasion = v25;
  146.       if ( v25 >= 999 )                         // If total evasion is equal or above 999, convert to 999
  147.         mob_evasion = 999;
  148.       if ( pSkill )
  149.       {
  150.         skill_Level_data = SKILLENTRY__GetLevelData(pSkill, nSLV);
  151.         if ( skill_Level_data->nFixDamage )
  152.         {
  153.           v27 = mobstat2->nLevel - basicstat->nLevel;
  154.           char_level = basicstat->nLevel;
  155.           if ( v27 <= 0 )
  156.             v27 = 0;
  157.           v30 = nIdx++ % 7;
  158.           v31 = (double)char_level * 100.0 / ((double)(150 * v27) + 255.0);
  159.           v28 = aRandom[v30];
  160.           b = v31 * 0.7;
  161.           v29 = v31 * 1.3;
  162.           UNDEF(v32);
  163.           a = v29;
  164.           if ( !(v33 | v34) )
  165.           {
  166.             zswap(&a, &b);
  167.             v29 = a;
  168.             goto LABEL_33;
  169.           }
  170.           if ( v29 != b )
  171.           {
  172. LABEL_33:
  173.             v72 = v28 % 0x989680;
  174.             v29 = v29 + (b - v29) * (double)v72 * 0.000000100000010000001;
  175.           }
  176.           if ( v29 >= (double)mob_evasion )
  177.             *v90 = skill_Level_data->nFixDamage;
  178.           goto LABEL_79;
  179.         }
  180.       }
  181.       v37 = nIdx % 7;
  182.       b = s * 0.5;
  183.       v36 = s * 1.2;
  184.       UNDEF(v38);
  185.       a = s * 1.2;
  186.       ++nIdx;
  187.       v35 = aRandom[v37];
  188.       if ( v39 | v40 )
  189.       {
  190.         if ( v36 == b )
  191.           goto LABEL_40;
  192.       }
  193.       else
  194.       {
  195.         zswap(&a, &b);
  196.         v36 = a;
  197.       }
  198.       v70 = v35 % 0x989680;
  199.       v36 = v36 + (b - v36) * (double)v70 * 0.000000100000010000001;
  200. LABEL_40:
  201.       if ( v36 >= (double)mob_evasion )
  202.       {
  203.         if ( pSkill->nSkillID == 2301002 )      // Heal attack
  204.         {
  205.           v42 = (double)basicstat->nINT;
  206.           v43 = nIdx % 7;
  207.           b = v42 * 0.2;
  208.           a = v42 * 0.8;
  209.           ++nIdx;
  210.           v41 = aRandom[v43];
  211.           if ( b > a )
  212.           {
  213.             zswap(&b, &a);
  214.             goto LABEL_44;
  215.           }
  216.           if ( b == a )
  217.           {
  218.             v44 = b;
  219.           }
  220.           else
  221.           {
  222. LABEL_44:
  223.             v73 = v41 % 0x989680;
  224.             v44 = (a - b) * (double)v73 * 0.000000100000010000001 + b;
  225.           }
  226.           v75 = v44;
  227.           damage = (double)nMobCount;
  228.           v46 = SKILLENTRY__GetLevelData(pSkill, nSLV);
  229.           v45 = (double)v46->nHP
  230.               * 0.01
  231.               * (v75 * 1.5 + (double)basicstat->nLUK)
  232.               * (damage * 0.3 + 1.0)
  233.               * (double)CalcMagicAtk_WithBuff
  234.               * 0.005
  235.               / damage;
  236. LABEL_52:
  237.           v52 = get_damage_adjusted_by_elemAttr((double)nAmp * v45 * 0.01, pSkill, mobstat2->aDamagedElemAttr, nSLV);
  238.           v53 = mobstat2->nMDD_;
  239.           damage = v52;
  240.           v51 = mobstat2->nMDD + v53;
  241.           if ( v51 <= 0 )
  242.             v51 = 0;
  243.           v85 = v51;
  244.           if ( v51 >= 1999 )
  245.             v85 = 1999;
  246.           v56 = (double)v85;
  247.           v57 = nIdx % 7;
  248.           a = v56 * 0.5;
  249.           v55 = v56 * 0.6;
  250.           UNDEF(v58);
  251.           v76 = v55;
  252.           ++nIdx;
  253.           v54 = aRandom[v57];
  254.           if ( !(v59 | v60) )
  255.           {
  256.             zswap(&v76, &a);
  257.             v55 = v76;
  258.             goto LABEL_61;
  259.           }
  260.           if ( v55 != a )
  261.           {
  262. LABEL_61:
  263.             v71 = v54 % 0x989680;
  264.             v55 = v55 + (a - v55) * (double)v71 * 0.000000100000010000001;
  265.           }
  266.           v61 = damage - v55;
  267.           v86 = mobstat2->nMGuardUp_;
  268.           if ( mobstat2->nMGuardUp_ )
  269.             v61 = (double)v86 * v61 * 0.01;
  270.           if ( v82 <= 0
  271.             || nCriticalAttackParam <= 0
  272.             || (v62 = nIdx % 7,
  273.                 ++nIdx,
  274.                 v69 = aRandom[v62] % 0x989680u,
  275.                 (double)v69 * 0.0000100000010000001 >= (double)v82) )
  276.           {
  277.             v63 = v90;
  278.           }
  279.           else
  280.           {
  281.             v63 = v90;
  282.             v87 = nCriticalAttackParam - 100;
  283.             *(int *)((char *)v90 + v88) = 1;
  284.             v61 = v61 * ((double)v87 * 0.01 + 1.0);
  285.           }
  286.           if ( tKeyDown )
  287.             v61 = (double)(90 * tKeyDown / 2000 + 10) * v61 * 0.01;
  288.           if ( !mobstat2->nHardSkin_ || *(int *)((char *)v63 + v88) )
  289.           {
  290.             if ( v61 <= 1.0 )                   // Convert to 1 if below 1
  291.               v61 = 1.0;
  292.             if ( v61 >= 99999.0 )               // Convert to 99,999 if exceed damage cap
  293.               v61 = 99999.0;
  294.             *v63 = (signed __int64)v61;
  295.           }
  296.           else
  297.           {
  298.             *v63 = 0;
  299.           }
  300.           goto LABEL_79;
  301.         }
  302.         v48 = (double)CalcMagicAtk_WithBuff;
  303.         v49 = nIdx % 7;
  304.         b = v48;
  305.         damage = v48;
  306.         a = v48 * M;
  307.         ++nIdx;
  308.         v47 = aRandom[v49];
  309.         if ( v48 * M < v48 )
  310.         {
  311.           zswap(&damage, &a);
  312.           v48 = damage;
  313.           goto LABEL_50;
  314.         }
  315.         if ( v48 == a )
  316.         {
  317.           v76 = v48;
  318.         }
  319.         else
  320.         {
  321. LABEL_50:
  322.           v67 = v47 % 0x989680;
  323.           v76 = (a - v48) * (double)v67 * 0.000000100000010000001 + v48;
  324.         }
  325.         v75 = b * 0.058;
  326.         v50 = SKILLENTRY__GetLevelData(pSkill, nSLV);
  327.         v45 = (double)v50->nMAD * ((double)basicstat->nINT * 0.5 + v75 * v75 + v76 * 3.3) * 0.01;
  328.         goto LABEL_52;
  329.       }
  330. LABEL_79:
  331.       ++v90;
  332.     }
  333.     while ( v91-- != 1 );
  334.   }
  335. }
Advertisement
Add Comment
Please, Sign In to add comment