Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
- {
- CRand32 *v14; // ebx@1
- signed int v15; // edi@1
- int v16; // esi@1
- int TotalMagicAttack; // eax@3
- SecondaryStat *v18; // esi@3
- int EchoOfHero; // eax@7
- MobStat *mobstat2; // ebx@10
- signed int SharpEye_X; // eax@13
- signed int v22; // ecx@13
- int v23; // eax@13
- int v24; // ecx@17
- int v25; // eax@22
- SKILLLEVELDATA *skill_Level_data; // edi@27
- int v27; // eax@28
- unsigned int v28; // esi@30
- long double v29; // st7@30
- int v30; // edx@30
- double v31; // st7@30
- __int16 v32; // fps@30
- unsigned __int8 v33; // c0@30
- unsigned __int8 v34; // c3@30
- unsigned int v35; // esi@36
- long double v36; // st7@36
- int v37; // edx@36
- __int16 v38; // fps@36
- unsigned __int8 v39; // c0@36
- unsigned __int8 v40; // c3@36
- unsigned int v41; // esi@42
- double v42; // st7@42
- int v43; // edx@42
- long double v44; // st7@44
- long double v45; // st7@45
- SKILLLEVELDATA *v46; // eax@45
- unsigned int v47; // esi@48
- long double v48; // st7@48
- int v49; // edx@48
- SKILLLEVELDATA *v50; // eax@51
- int v51; // eax@52
- long double v52; // st7@52
- int v53; // eax@52
- unsigned int v54; // esi@56
- long double v55; // st7@56
- double v56; // st7@56
- int v57; // edx@56
- __int16 v58; // fps@56
- unsigned __int8 v59; // c0@56
- unsigned __int8 v60; // c3@56
- long double v61; // st7@62
- int v62; // edx@66
- int *v63; // esi@67
- int aRandom[7]; // [sp+20h] [bp-90h]@1
- double M; // [sp+3Ch] [bp-74h]@13
- __int64 v67; // [sp+44h] [bp-6Ch]@50
- double s; // [sp+4Ch] [bp-64h]@13
- __int64 v69; // [sp+54h] [bp-5Ch]@66
- __int64 v70; // [sp+5Ch] [bp-54h]@39
- __int64 v71; // [sp+64h] [bp-4Ch]@61
- __int64 v72; // [sp+6Ch] [bp-44h]@33
- __int64 v73; // [sp+74h] [bp-3Ch]@44
- int nCriticalAttackParam; // [sp+7Ch] [bp-34h]@17
- long double v75; // [sp+80h] [bp-30h]@45
- long double v76; // [sp+88h] [bp-28h]@50
- double damage; // [sp+90h] [bp-20h]@45
- int nAmp; // [sp+98h] [bp-18h]@10
- long double a; // [sp+9Ch] [bp-14h]@30
- long double b; // [sp+A4h] [bp-Ch]@30
- int nIdx; // [sp+ACh] [bp-4h]@1
- signed int v82; // [sp+B8h] [bp+8h]@15
- signed int CalcMagicAtk_WithBuff; // [sp+C0h] [bp+10h]@5
- signed int mob_evasion; // [sp+C4h] [bp+14h]@24
- signed int v85; // [sp+C4h] [bp+14h]@54
- signed int v86; // [sp+C4h] [bp+14h]@62
- int v87; // [sp+C4h] [bp+14h]@67
- unsigned int v88; // [sp+C8h] [bp+18h]@18
- int v89; // [sp+CCh] [bp+1Ch]@11
- int *v90; // [sp+CCh] [bp+1Ch]@18
- int v91; // [sp+DCh] [bp+2Ch]@18
- int char_level; // [sp+E0h] [bp+30h]@28
- nIdx = 0;
- v14 = (CRand32 *)this;
- v16 = (int)aRandom;
- v15 = 7;
- do
- {
- *(_DWORD *)v16 = CRand32__Random(v14);
- v16 += 4;
- --v15;
- }
- while ( v15 );
- v18 = secondarystat;
- TotalMagicAttack = secondarystat->nMAD + secondarystat->nMAD_;
- if ( TotalMagicAttack <= 0 )
- TotalMagicAttack = 0;
- CalcMagicAtk_WithBuff = TotalMagicAttack;
- if ( TotalMagicAttack >= 1999 )
- CalcMagicAtk_WithBuff = 1999;
- EchoOfHero = v18->nMaxLevelBuff_;
- if ( EchoOfHero > 0 )
- {
- CalcMagicAtk_WithBuff += CalcMagicAtk_WithBuff * EchoOfHero / 100;
- if ( CalcMagicAtk_WithBuff >= 1999 )
- CalcMagicAtk_WithBuff = 1999;
- }
- get_weapon_type(nWeaponItemID);
- mobstat2 = mobstat;
- nAmp = 5 * (basicstat->nINT / 10 + basicstat->nLUK / 10);
- if ( mobstat->nLevel - basicstat->nLevel <= 0 )
- v89 = 0;
- else
- v89 = mobstat->nLevel - basicstat->nLevel;
- s = (double)nAmp * 100.0 / ((double)v89 * 10.0 + 255.0);
- M = ((double)SKILLENTRY__GetLevelData(pSkill, nSLV)->nMastery * 5.0 + 10.0) * 0.009000000000000001;
- v23 = get_amplification(characterdata, 0, 0);
- v22 = v18->nSharpEyes_;
- nAmp = v23;
- SharpEye_X = v22 >> 8; // As Sharp eye x and y value is stored in an int_16 together [ret.x << 8 | ret.y]
- if ( v22 >> 8 <= 0 )
- SharpEye_X = 0;
- v82 = SharpEye_X;
- if ( SharpEye_X >= 100 )
- v82 = 100;
- nCriticalAttackParam = (unsigned __int8)v22;
- v24 = nDamagePerMob;
- if ( nDamagePerMob > 0 )
- {
- v90 = aDamage;
- v88 = (char *)abCritical - (char *)aDamage;
- v91 = v24;
- do
- {
- *v90 = 0;
- if ( mobstat2->bInvincible )
- goto LABEL_79;
- if ( mobstat2->nMImmune_ ) // Monster is magic immune
- {
- *v90 = 1;
- goto LABEL_79;
- }
- v25 = mobstat2->nEVA + mobstat2->nEVA_; // Monster total evasion + buffed evasion
- if ( v25 <= 0 ) // If total evasion is zero or below, convert to zero
- v25 = 0;
- mob_evasion = v25;
- if ( v25 >= 999 ) // If total evasion is equal or above 999, convert to 999
- mob_evasion = 999;
- if ( pSkill )
- {
- skill_Level_data = SKILLENTRY__GetLevelData(pSkill, nSLV);
- if ( skill_Level_data->nFixDamage )
- {
- v27 = mobstat2->nLevel - basicstat->nLevel;
- char_level = basicstat->nLevel;
- if ( v27 <= 0 )
- v27 = 0;
- v30 = nIdx++ % 7;
- v31 = (double)char_level * 100.0 / ((double)(150 * v27) + 255.0);
- v28 = aRandom[v30];
- b = v31 * 0.7;
- v29 = v31 * 1.3;
- UNDEF(v32);
- a = v29;
- if ( !(v33 | v34) )
- {
- zswap(&a, &b);
- v29 = a;
- goto LABEL_33;
- }
- if ( v29 != b )
- {
- LABEL_33:
- v72 = v28 % 0x989680;
- v29 = v29 + (b - v29) * (double)v72 * 0.000000100000010000001;
- }
- if ( v29 >= (double)mob_evasion )
- *v90 = skill_Level_data->nFixDamage;
- goto LABEL_79;
- }
- }
- v37 = nIdx % 7;
- b = s * 0.5;
- v36 = s * 1.2;
- UNDEF(v38);
- a = s * 1.2;
- ++nIdx;
- v35 = aRandom[v37];
- if ( v39 | v40 )
- {
- if ( v36 == b )
- goto LABEL_40;
- }
- else
- {
- zswap(&a, &b);
- v36 = a;
- }
- v70 = v35 % 0x989680;
- v36 = v36 + (b - v36) * (double)v70 * 0.000000100000010000001;
- LABEL_40:
- if ( v36 >= (double)mob_evasion )
- {
- if ( pSkill->nSkillID == 2301002 ) // Heal attack
- {
- v42 = (double)basicstat->nINT;
- v43 = nIdx % 7;
- b = v42 * 0.2;
- a = v42 * 0.8;
- ++nIdx;
- v41 = aRandom[v43];
- if ( b > a )
- {
- zswap(&b, &a);
- goto LABEL_44;
- }
- if ( b == a )
- {
- v44 = b;
- }
- else
- {
- LABEL_44:
- v73 = v41 % 0x989680;
- v44 = (a - b) * (double)v73 * 0.000000100000010000001 + b;
- }
- v75 = v44;
- damage = (double)nMobCount;
- v46 = SKILLENTRY__GetLevelData(pSkill, nSLV);
- v45 = (double)v46->nHP
- * 0.01
- * (v75 * 1.5 + (double)basicstat->nLUK)
- * (damage * 0.3 + 1.0)
- * (double)CalcMagicAtk_WithBuff
- * 0.005
- / damage;
- LABEL_52:
- v52 = get_damage_adjusted_by_elemAttr((double)nAmp * v45 * 0.01, pSkill, mobstat2->aDamagedElemAttr, nSLV);
- v53 = mobstat2->nMDD_;
- damage = v52;
- v51 = mobstat2->nMDD + v53;
- if ( v51 <= 0 )
- v51 = 0;
- v85 = v51;
- if ( v51 >= 1999 )
- v85 = 1999;
- v56 = (double)v85;
- v57 = nIdx % 7;
- a = v56 * 0.5;
- v55 = v56 * 0.6;
- UNDEF(v58);
- v76 = v55;
- ++nIdx;
- v54 = aRandom[v57];
- if ( !(v59 | v60) )
- {
- zswap(&v76, &a);
- v55 = v76;
- goto LABEL_61;
- }
- if ( v55 != a )
- {
- LABEL_61:
- v71 = v54 % 0x989680;
- v55 = v55 + (a - v55) * (double)v71 * 0.000000100000010000001;
- }
- v61 = damage - v55;
- v86 = mobstat2->nMGuardUp_;
- if ( mobstat2->nMGuardUp_ )
- v61 = (double)v86 * v61 * 0.01;
- if ( v82 <= 0
- || nCriticalAttackParam <= 0
- || (v62 = nIdx % 7,
- ++nIdx,
- v69 = aRandom[v62] % 0x989680u,
- (double)v69 * 0.0000100000010000001 >= (double)v82) )
- {
- v63 = v90;
- }
- else
- {
- v63 = v90;
- v87 = nCriticalAttackParam - 100;
- *(int *)((char *)v90 + v88) = 1;
- v61 = v61 * ((double)v87 * 0.01 + 1.0);
- }
- if ( tKeyDown )
- v61 = (double)(90 * tKeyDown / 2000 + 10) * v61 * 0.01;
- if ( !mobstat2->nHardSkin_ || *(int *)((char *)v63 + v88) )
- {
- if ( v61 <= 1.0 ) // Convert to 1 if below 1
- v61 = 1.0;
- if ( v61 >= 99999.0 ) // Convert to 99,999 if exceed damage cap
- v61 = 99999.0;
- *v63 = (signed __int64)v61;
- }
- else
- {
- *v63 = 0;
- }
- goto LABEL_79;
- }
- v48 = (double)CalcMagicAtk_WithBuff;
- v49 = nIdx % 7;
- b = v48;
- damage = v48;
- a = v48 * M;
- ++nIdx;
- v47 = aRandom[v49];
- if ( v48 * M < v48 )
- {
- zswap(&damage, &a);
- v48 = damage;
- goto LABEL_50;
- }
- if ( v48 == a )
- {
- v76 = v48;
- }
- else
- {
- LABEL_50:
- v67 = v47 % 0x989680;
- v76 = (a - v48) * (double)v67 * 0.000000100000010000001 + v48;
- }
- v75 = b * 0.058;
- v50 = SKILLENTRY__GetLevelData(pSkill, nSLV);
- v45 = (double)v50->nMAD * ((double)basicstat->nINT * 0.5 + v75 * v75 + v76 * 3.3) * 0.01;
- goto LABEL_52;
- }
- LABEL_79:
- ++v90;
- }
- while ( v91-- != 1 );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment