Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Pre-BB] MapleStory Formula Compilation
Lei Wrote:Quick question. Is 1.84 + 0.07 calculated first? So is it Acc/(((1.84 + 0.07) * D) * Avoid) - 1 or Acc/(((1.84 + (0.07 * D)* Avoid)-1. And does the number computed directly equal the percentage of hit? e.g. 1=100%, .5=50% ect.

Order of operations says that 0.07*D is computed first. So multiply D by 0.07, add 1.84, and multiply by avoid. That's your denominator. And yes, 1 is 100%.

Takebacker Wrote:Can we include a list of what multipliers work before what? Or a formula that shows all buff damage modifiers in order of what works before what?

In time.

Takebacker Wrote:Since when was the second part true? o.o

I thought that was empirically determined. What's your theory?
Reply
I don't have a theory, i've just have never heard about that aspect of battleship before. If it wasn't that big a deal i wouldn't really care but 1 durability = 10 damage? That's a pretty huge difference. O_o Unless you mean to say that this is what happens after the balance patch, in which case that's ridiculous.
Reply
Takebacker Wrote:I don't have a theory, i've just have never heard about that aspect of battleship before. If it wasn't that big a deal i wouldn't really care but 1 durability = 10 damage? That's a pretty huge difference. O_o Unless you mean to say that this is what happens after the balance patch, in which case that's ridiculous.

No, it's the same as it's always been. Elsewhere the formula is stated directly in terms of damage, so that it would be (Battleship level * 2 + (Character level - 120)) * 2000. I don't remember where the notion of durability came from (maybe the wz files?) but there was some rationale for stating it this way.

Level 1 ship at level 120 has 4000 HP. About right.
Reply
Then why bother confusing everyone? The only thing different is multiplying by 200 or 2000 right? Might as well just make it 2000.
Reply
http://pastebin.com/T2qpEMir

Might be useful to you guys, for figuring out the Heal formula.
Reply
Mm. That tells me that the max and min INT multipliers are 0.8 and 0.2 respectively. That's interesting, because the ones I have written up are 1.2 and 0.3, but it's probably equivalent, because the ratio is constant. I wonder why it's that way, though.

Can you look for where the variable v44 is used later on?
Reply
Lucida Wrote:Mm. That tells me that the max and min INT multipliers are 0.8 and 0.2 respectively. That's interesting, because the ones I have written up are 1.2 and 0.3, but it's probably equivalent, because the ratio is constant. I wonder why it's that way, though.

Can you look for where the variable v44 is used later on?

Sure, I'll get the magic calculation for you too.

Edit :
Here's the full magic attack calculation, I've renamed some of the variables so as to make it more readable.
http://pastebin.com/vGpazJmp


Also, for people who are figuring out the keydown skill formula (big bang) do check out :
Code:
if ( tKeyDown )
            v61 = (double)(90 * tKeyDown / 2000 + 10) * v61 * 0.01;

Where tKeyDown is the total time in millis held and v61 is the calculated damage.
This code acts as the damage multiplier.
Reply
ZakumSlaYers Wrote:Also, for people who are figuring out the keydown skill formula (big bang) do check out :
Code:
if ( tKeyDown )
            v61 = (double)(90 * tKeyDown / 2000 + 10) * v61 * 0.01;

Where tKeyDown is the total time in millis held and v61 is the calculated damage.
This code acts as the damage multiplier.

From this it seems like at max charge (1000ms) you'd be doing 110% of your original range. Well more power to charge skills then, lol.
Reply
Shidoshi Wrote:From this it seems like at max charge (1000ms) you'd be doing 110% of your original range. Well more power to charge skills then, lol.

This looks like an older model where Big Bang was 2000ms, as I see a 99 999 damage cap.

Taking a quick glance, it appears
v45 = (double)v50->nMAD * ((double)basicstat->nINT * 0.5 + v75 * v75 + v76 * 3.3) * 0.01;

Where v76 is either:
v67 = v47 % 0x989680;
v76 = (a - v48) * (double)v67 * 0.000000100000010000001 + v48;
or
MATK,
v48 = MATK
a = v48 * Mastery * 0.9 (60% Mastery = 0.6)
v47 = aRandom[v49];
v49 = nIdx % 7;

I'm not sure if there's another use for % other than modulus in C. nIDx appears to be incremented on occasion but starts defined at 0.
0x989680 = 10 000 000

Thus, I assume it's a random number finding value of some sorts.

Minimum Damage = BA * (INT * 0.5 + (MATK*0.058)² + MATK * 3.3) /100
Maximum Damage = BA * (INT * 0.5 + (MATK*0.058)² + (Mastery * 0.9 * MATK) * 3.3) /100

TEST:
999 INT
1999 MATK

Current Formula:
Min: 174.17703
Max: 204.82837

This:
Min: 175.04265364
Max: 205.38747364

We were close boys. There's a whole slew of other pomegranate to rummage through though, but I see some neat 0.5 and 0.6s in Defense.
Reply
In C, "%" used as a mathematic operator only means modulus. The only other time it's used is in printing statements ("%d")
Reply
It's from brazil MapleStory v.8, should be around GMS v.55 ~ v.58 Smile
Reply
So for Heal we have...

Skill * 0.01 * (INT * 0.8 * 1.5 + LUK) * (0.3 + 1/NumTargets) * Magic / 200

Which I believe is equivalent to our original:
Max = (INT * 1.2 + LUK) * Magic / 1000 * TargetMultiplier

Yeah. My TargetMultiplier is 5 times the value of (0.3 + 1/NumTargets), so that cancels out the denominators.

Also I think I must apologize for the magic formula... that particular one was on Sleepywood a long time ago, but I doubted it because of the 0.058. Guess not.

Edit: As for the postprocessing:
(Damage * Element - rand(0.5, 0.6) * MDEF) * nMGuardUp * Crit * KeyDown. That is all.

Edit: As for the preprocessing:

 Spoiler

Just curious... could you get similar code for physical attacks?
Reply
Physical attack code is slightly longer, you might want to copy it on a C compiler for syntax highlighting so that it can be read easily.

http://pastie.org/private/lq0c82nk9sutdkynaetg
http://pastie.org/private/kggijovue2psvqdbcxftjw


This doesn't include skills for pirates, Evan and Aran. I can try getting those from MapleStory.exe when I am free. Although the chances are low because the exe doesn't come with .PDB file, for the method name and such unlike the leaked Brazil MS official server file.
Reply
Here's the meso explosion formula taken by IDA Pro. It's not pretty. Maybe Slayers can clear it up for us?

--edited out--
Reply
Cleaner version Big Grin
http://pastie.org/private/gngzhqabwgiugtfu7wnbuq

@Fiel
I think you'll need to link your WvsGame.exe with WvsGame.pdb file, it includes most of the method name and structures.
I'm on IDA pro 5.6 btw .
Reply
Please let me know if this is incorrect

Even cleaner version, thanks Pepsi:

Code:
aMoneyAmountDbl = (double)anMoneyAmount;
        if ( aMoneyAmountDbl <= 1000 )
          ratio = (aMoneyAmountDbl * 0.82 + 28.0) / 5300;
        else
          ratio = aMoneyAmountDbl / (double)(aMoneyAmount + 5250);
        randNum = aRandom[nIdx++ % 7] % 10,000,000;
        mastery = (double)randNum / 20,000,000 + 0.5;
        SkillData = SKILLENTRY__GetLevelData(dword_6A7D5C, nSLV);
        aDamage = (signed __int64)((50 * SkillData->nX) * mastery * ratio);

So, assuming you dropped 10 mesos at level 1 ME:

ratio = (10 * 0.82 + 28) / 5300;
ratio = 0.0068301886792453

Next part is just mastery. We'll assume 0.5 for kicks.

Damage = ((50 * SkillData->nX) * 0.5 * 0.0068301886792453);
Damage = (int)((50 * 500) * 0.5 * 0.0068301886792453);
Damage = 85;

And max damage would be double this, assuming perfect results, so the damage range for 10 mesos at level 1 ME is 85 ~ 170


Now let's assume we drop 10 mesos at level 30 ME. The ratio variable would be the same. The only thing that would change here is the SkillData->nX value, which is 1000 at level 30:

Damage = (int)((50 * 1000) * 0.5 * 0.0068301886792453);
Damage = 170 ~ 341

-------------

Now let's test the 1000 vs. 1001 and see which is really better. Let's assume level 30 ME, and you drop 1 bag with 999 mesos.

ratio = (1000 * 0.82 + 28) / 5300
ratio = 0.16

Damage = ((50 * 1000) * 0.5 * 0.1598452830188679
Damage = 4000 ~ 8000

Now with 1001 mesos

ratio = 1001 / (1001 + 5250);
ratio = 0.1601343784994401

Damage = ((50 * 1000) * 0.5 * 0.1601343784994401
Damage = 4003 ~ 8006

So yeah, 1001 mesos is slightly better. But is it more efficient?

Graphing out this formula yields the following (note the following is MINIMUM damage/bag). Also note that this is ONLY CALCULATING ONE BAG OF MESOS.

[Image: 72048841.png]

So you get a lot of benefit from putting mesos up until around 5 - 6k, up until which you start losing mesos/damage ratio massively. But where is the best ratio? What is the most efficient mesos/damage ratio?
Reply
Pickpocket formula :
http://pastebin.com/UGt7uE66
Reply
From the physical attack code i find many formula we don't knows.
it seems very interesting. Whether it is useful or not, I'll list it here....

================================
Line 170~179,321~333:
v148 = acc * 100 / ( dLevel * 10 + 255 )
physical acc rate=P( random (0.7, 1.3) * v148 >= mobEva )
=P( mobEva / v148 <= random (0.7, 1.3 ) )
=( 1.3 - mobEva / v148 ) / ( 1.3 - 0.7 )
=( 1.3 - mobEva / v148 ) / 0.6
=( 1.3 - mobEva * ( dLevel * 10 + 255 )/ acc/100 ) / 0.6
=(130 - mobEva * ( dLevel * 10 + 255 )/ acc ) / 60

finally...
if acc rate = 0
minAcc= mobEva * ( dLevel * 10 + 255 ) / 130
if acc rate = 1
fullAcc= mobEva * ( dLevel * 10 + 255 ) / 70

================================
fixDamage skill has it's unique acc formula...
the same to #691

================================
Line 786~830:
wand/staff is same as the one-hand axe

================================
Line 364~366----->
if ( nSkillID != 3201003 && nSkillID != 3101003 )
{ //some code }
Line 549~564:
some strange formula...deal with action?..
( dex * 3.4 + str ) * watt / 200

================================
Line 333~352,609,652~
darkness has a 80% base Miss chance
Blast and rush and the 2nd damage of brandish has a change of 60% to force the same action as swing.

================================
correct
================================
Claw (punching):
Min = (LUK * 0.1* 0.9 + STR + DEX) * WeaponAttack / 150

from all formula we have got is that..mastery*0.9..
while I have already confirmed in CMS...

also get some other formula. post here~~
==Prostrate Attack Damage:==
Claw/Dagger:
Max = ( luk + str + dex ) * watt / 200
Min = (luk * 0.9 * 0.1 + str + dex ) * watt / 200
Gun:
Max = ( dex + str ) * watt / 200
Min = ( dex * 0.9 * 0.1 + str ) * watt / 200
(watt not include bullet)
Bow:
Max = ( dex * 3.4 + str ) * watt / 150
Min = ( dex * 3.4 * 0.9 * 0.1 + str ) * watt / 150
Others:
Max = ( str + dex ) * watt / 200
Min = ( str * 0.9 * 0.1 + dex ) * watt / 200

==Punch damage:==
Gun:
Max = ( dex + str ) * watt / 200
Min = ( dex * 0.9 * 0.1 + str ) * watt / 200
(watt not include bullet)
Bow:
Max = ( dex * 3.4 + str ) * watt / 150
Min = ( dex * 3.4 * 0.9 * 0.1 + str ) * watt / 150

not test xBow..
================================
Charge/tap damages for Big Bang/Pierce/Screw Punch:
( 10 + 90 * keyDownTime / fullChargeTime )%
as a modifier.so no Charge as 10% and full Charge as 100%.

================================
Demolition ignores defense

================================
Aran skill Modifier : (36+64 / mobCount)%
Assassinate : darksighttime / 3 + 1

================================
Line 435,453~472: something about Hero Combo:
Hero Combo is multiplied before critical.
another word,it is multiplied by base skill%.
eg: Lv.30 brandish + 10 combos=260% * 190% = 4.94
if critical(lv.30 sharpeyes,no critical rings)= 260% * 190% + 140% = 6.34

Correct me plz if my thought is wrong.
Reply
Great. Thanks 50504724!

I'll deal with the Meso Explosion stuff later.
Reply
I tested the final attack and element charge formula
with my friend's paladin.

here's some data.

Lv:170+
str:835
dex:98
watt:19
weapon:one-handed sword
normal attack:361.304~653.22

monster data:
Lv:35
pdd:100
weak in fire

skills data:
Slash Blast:130% base damage
final attack:60% chance ,follow a 250% attack.
Ice charge:Lv30, 110% damage
fire charge:Lv30, 120% damage

==============================

First I test the slash blast FA without charge
but I have not seen a number more than 1000.
In order of damage calculate it seems to be that:
damage after mob'defence:
Min:361.304-100*0.6=301.304
Max:653.22-100*0.5=603.22
and I record my maxDamage of FA of each order of mob:
order:1 2 3 4 5
maxDmg:990 330 108 36 10
while I didn't test more than few minutes
But it's obvious...the right formula is seem to be:
2 * (1/3) ^ OrderHit

==============================

Next..I test the element charge which puzzled me rather a long time.
From formulas we have had now,a full version of physical damage formula is
( base damage * (1 - 0.01 * dLevel) * (Element (dis)advantage modifier) * other modifier A - mobPDD * 0.6(0.5 ))
* (skill percent% * skill modifier (+ critical if exists%))
* other modifier B

the data "120%" of fire charge is A or B?

I test it with the formula I find out #697, it works very well
prostrate attack damage : 52.1455~88.635
when I use Fire Charge, I get a max Damage 109.
It fits the formula A: (52.1455~88.635 * 1.5 * 1.2 - 100 * 0.6(0.5)) = 33.8619~109.543
not BSad52.1455~88.635 * 1.5 - 100 * 0.6(0.5)) * 1.2 = 21.8619~99.543
so everything is clear~~~
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)