Elitist Jerks
Register
Blogs
Forums


Go Back   Elitist Jerks » Public Discussion » Class Mechanics

 
 
LinkBack Thread Tools
Old 10/23/07, 1:20 PM   #1
zurmagus
Von Kaiser
 
Troll Mage
 
Lothar
[Mage] DPS Simulator

I started writing a DPS simulator a couple months ago but haven't had as much time as I'd like to keep working on it so one of my guildmates suggested I post it here. I'm not sure how to describe it other than to say it mimics the game rolls and rules which should be the most accurate way of determining how DPS is affected by different elements.

Currently, the program allows the user to input spell damage, crit rate, and hit rate. Then it outputs a log of the spell results and calcuates DPS and other statistics of the simulation. Here's a sample of the program output:

Caster Stats
=========================================
Spell Damage: 1150
Crit Rate: .36
Hit Rate: .16

Combat Log
=========================================
[   3.0] Fireball  hit  3103
[   6.0] Fireball  hit  3007
[   9.0] Fireball  hit  3108
[  12.0] Fireball  hit  2993
[  15.0] Fireball crit  6701
[  18.0] Fireball crit  6183
[  21.0] Fireball crit  6656
[  24.0] Fireball  hit  2988
[  27.0] Fireball  hit  2961
[  30.0] Fireball  hit  2986
[  33.0] Fireball crit  7322
[  36.0] Fireball  hit  3573
=========================================
    Damage: 51581       Time: 36s
 Ideal DPS: 1432.81

Fireball - 12 casts
-----------------------------------------
   Hits: 8      66.7%   Max: 3573
  Crits: 4      33.3%   Max: 7322
Resists: 0      0.0%
You'll notice that for the last 2 spells, the damage is a bit higher thanks to Molten Fury. This is much better than just estimating that Molten Fury is worth 4% overall damage since it is difficult to determine how other dynamics (procs, trinkets, boss dying faster) come into play.

I also have a system in place for managing buffs and proc effects. This simulation was run with the same parameters as the above, except that I increased the targets health and enabled the Mystical Skyfire Diamond (v2.3) proc and Shiffar's Nexus Horn proc.

Caster Stats
=========================================
Spell Damage: 1150
Crit Rate: .36
Hit Rate: .16

Combat Log
=========================================
[   3.0] Fireball  hit  3168
[   6.0] Fireball  hit  3172
[   9.0] Fireball  hit  2999
[  12.0] You gain Call of the Nexus.
[  12.0] Fireball crit  6196
[  15.0] Fireball crit  7433
[  18.0] Fireball  hit  3555
[  21.0] Fireball crit  7010
[  22.0] Call of the Nexus fades from you
[  24.0] Fireball crit  6176
[  27.0] Fireball  hit  2977
[  30.0] You gain Focus.
[  30.0] Fireball crit  6586
[  31.5] Focus fades from you.
[  31.5] Fireball crit  6250
[  34.5] Fireball crit  6583
[  37.5] Fireball  hit  2970
[  40.5] Fireball  hit  3165
[  43.5] Fireball  hit  3025
[  46.5] Fireball crit  6354
[  49.5] Fireball crit  6299
[  52.5] Fireball  hit  2956
[  55.5] Fireball  hit  3064
[  58.5] Fireball crit  6413
[  61.5] Fireball  hit  2980
[  64.5] Fireball  hit  3075
[  67.5] Fireball  hit  3016
[  70.5] Fireball  hit  2989
[  73.5] Fireball  hit  3172
[  76.5] You gain Focus.
[  76.5] Fireball crit  6433
[  78.0] Focus fades from you.
[  78.0] Fireball  hit  3179
[  81.0] Fireball  hit  2953
[  84.0] You gain Call of the Nexus.
[  84.0] Fireball crit  6496
[  87.0] Fireball  hit  3341
[  90.0] Fireball crit  7127
[  93.0] Fireball  hit  3418
[  94.0] Call of the Nexus fades from you
[  96.0] Fireball crit  6485
[  99.0] Fireball  hit  3171
[ 102.0] Fireball crit  6380
[ 105.0] Fireball crit  6577
[ 108.0] Fireball  hit  3052
[ 111.0] Fireball  hit  3109
[ 114.0] Fireball crit  6296
[ 117.0] Fireball  hit  2977
[ 120.0] Fireball  hit  3122
[ 123.0] Fireball crit  6435
[ 126.0] Fireball crit  6701
[ 129.0] Fireball  hit  3149
[ 132.0] Fireball crit  6688
[ 135.0] Fireball  hit  3106
[ 138.0] You gain Focus.
[ 138.0] Fireball  hit  3190
[ 139.5] Focus fades from you.
[ 139.5] Fireball  hit  3140
[ 142.5] Fireball  hit  3017
[ 145.5] Fireball  hit  3101
[ 148.5] Fireball  hit  3086
[ 151.5] Fireball crit  6416
[ 154.5] You gain Call of the Nexus.
[ 154.5] Fireball crit  6282
[ 157.5] Fireball  hit  3438
[ 160.5] Fireball crit  7342
[ 163.5] Fireball  hit  3504
[ 164.5] Call of the Nexus fades from you
[ 166.5] Fireball  hit  3063
[ 169.5] Fireball  hit  2991
[ 172.5] Fireball crit  6542
[ 175.5] Fireball  hit  3056
[ 178.5] Fireball crit  6267
[ 181.5] Fireball  hit  3171
[ 184.5] Fireball  hit  3068
[ 187.5] You gain Focus.
[ 187.5] Fireball  hit  3055
[ 189.0] Focus fades from you.
[ 189.0] Fireball  hit  3122
[ 192.0] Fireball  hit  3178
[ 195.0] Fireball  hit  2964
[ 198.0] Fireball  hit  3006
[ 201.0] Fireball  hit  3078
[ 204.0] Fireball  hit  2981
[ 207.0] You gain Call of the Nexus.
[ 207.0] Fireball crit  6519
[ 210.0] Fireball  hit  3418
[ 213.0] Fireball  hit  3459
[ 216.0] Fireball crit  7305
[ 217.0] Call of the Nexus fades from you
[ 219.0] Fireball  hit  3139
[ 222.0] Fireball crit  6370
[ 225.0] Fireball  hit  3058
[ 228.0] Fireball  hit  3113
[ 231.0] Fireball  hit  2953
[ 234.0] Fireball  hit  3061
[ 237.0] Fireball crit  6611
[ 240.0] Fireball  hit  2986
[ 243.0] You gain Focus.
[ 243.0] Fireball  hit  3155
[ 244.5] Focus fades from you.
[ 244.5] Fireball  hit  3056
[ 247.5] Fireball  hit  3046
[ 250.5] Fireball  hit  2993
[ 253.5] Fireball crit  6671
[ 256.5] Fireball  hit  3138
[ 259.5] Fireball  hit  3090
[ 262.5] Fireball  hit  3149
[ 265.5] Fireball  hit  2994
[ 268.5] Fireball  hit  2940
[ 271.5] Fireball  hit  3021
[ 274.5] Fireball  hit  3011
[ 277.5] Fireball crit  6174
[ 280.5] Fireball  hit  3391
[ 283.5] Fireball crit  7395
[ 286.5] Fireball crit  7415
[ 289.5] You gain Call of the Nexus.
[ 289.5] Fireball crit  7079
[ 292.5] Fireball  hit  4015
[ 295.5] Fireball  hit  3987
[ 298.5] Fireball  hit  3874
[ 299.5] Call of the Nexus fades from you
[ 301.5] You gain Focus.
[ 301.5] Fireball  hit  3356
[ 303.0] Focus fades from you.
[ 303.0] Fireball crit  7106
[ 306.0] Fireball crit  7129
[ 309.0] Fireball  hit  3472
[ 312.0] Fireball crit  7211
[ 315.0] Fireball  hit  3504
[ 318.0] Fireball  hit  3507
[ 321.0] Fireball  hit  3354
[ 324.0] Fireball crit  7461
[ 327.0] Fireball  hit  3424
[ 330.0] Fireball  hit  3499
[ 333.0] Fireball  hit  3370
[ 336.0] Fireball crit  7110

=========================================
    Damage: 502925      Time: 336s
 Ideal DPS: 1496.8

Fireball - 115 casts
-----------------------------------------
   Hits: 76     66.1%   Max: 4015
  Crits: 39     33.9%   Max: 7461
Resists: 0      0.0%
I have a very long to do list so I'm looking for anyone interested in further developing this tool. Feel free to download the source below and play with it. See the next two for code documentation and updates.


Download the source code and current build
-http://community.nrguild.org/uploads/DPS-Sim_Beta.zip

10/23/2007: The simulator assumes a raid debuffed target and 10/48/3 fire mage casting fireball. Procs are disabled.

Offline
Old 10/23/07, 1:21 PM   #2
zurmagus
Von Kaiser
 
Troll Mage
 
Lothar
reserved for documentation!

Offline
Old 10/23/07, 1:21 PM   #3
zurmagus
Von Kaiser
 
Troll Mage
 
Lothar
reserved

Offline
Old 10/23/07, 2:16 PM   #4
[DRF]Solmyr
Von Kaiser
 
Undead Mage
 
Spirestone
The first thing to pop into my mind was the lack of latency considerations and lack of ignite ticks... Seems like a solid start to a simple simulator. I hope this project takes off.

Offline
Old 10/23/07, 2:33 PM   #5
Whauror
Glass Joe
 
Undead Mage
 
Mal'Ganis
I couldn't help but notice that your program is not logging partial resists.

Offline
Old 10/23/07, 3:39 PM   #6
Cardynal
Piston Honda
 
Orc Warrior
 
Mug'thol
I see you're not including haste into your calculations either.

Also, another idea. You could program in sepecific fights based off of log parses to see how much actual dps time you'll have.

For example you could take dps times in specific phases for each fight...it would be a bit complicated and a lot of coding but it sounds fun =)

I'll take a look at adding spell haste and other enhancements to this app if i get the time.

Offline
Old 10/23/07, 4:31 PM   #7
valeea
Von Kaiser
 
Blood Elf Mage
 
Tichondrius (EU)
Originally Posted by [DRF]Solmyr View Post
The first thing to pop into my mind was the lack of latency considerations and lack of ignite ticks... Seems like a solid start to a simple simulator. I hope this project takes off.
same for me. saying "fireball1 : 3 sec, fireball2: 6 sec" etc is simply not realistic due to latency and the fact that noones a robot and will never achieve "ideal" dps i would consider 3,2 secs for a fireball cast by a normal human being

Offline
Old 10/23/07, 5:03 PM   #8
zurmagus
Von Kaiser
 
Troll Mage
 
Lothar
Originally Posted by [DRF]Solmyr View Post
The first thing to pop into my mind was the lack of latency considerations and lack of ignite ticks... Seems like a solid start to a simple simulator. I hope this project takes off.
The intent of the current ignite mechanics is to give fire mages 210% crits every time so I just coded a 2.1 crit modifier for fire spells. I have no interest in trying to simulate the bugs in the actual implementation of ignite.

As for latency, that's easy enough to add under the current timer structure. I can just add a small number (i.e. a random number .1 to .2 would be sufficient to simulate 100-200ms of latency) to the simulation timer after each cast is complete.



Originally Posted by Whauror View Post
I couldn't help but notice that your program is not logging partial resists.
That's on the to-do list. I don't know exactly how blizzard breaks down their resistance tables for partial resists so if anyone out there knows how then let me know and I'll try to get it coded.



Originally Posted by Cardynal View Post
I see you're not including haste into your calculations either.
I don't have a haste stat yet but the code structure is there. How else would I have a Mystical Skyfire Diamond proc?

bool nuke::doneCasting(float haste)
{
    bool finished = false;
    timeLeft -= simTick * haste;
    if(timeLeft <= 0)
    {
        finished = true;
        timeLeft = castTime;
    }
    return finished;
}
The haste parameter allows me to speed up casting by whatever factor I choose. If we wanted to give the caster 157 haste rating that would convert to a haste factor of 1.1 for 10% faster casting.




Originally Posted by Cardynal
Also, another idea. You could program in sepecific fights based off of log parses to see how much actual dps time you'll have.

For example you could take dps times in specific phases for each fight...it would be a bit complicated and a lot of coding but it sounds fun =)
I've been working on something like that, as well as support for spell rotations.





Thanks for the input so far guys. I'll try to write up the code documentation at work tomorrow. They might even think I'm doing real work

Last edited by zurmagus : 10/23/07 at 5:28 PM.

Offline
Old 10/23/07, 5:25 PM   #9
zurmagus
Von Kaiser
 
Troll Mage
 
Lothar
Originally Posted by valeea View Post
same for me. saying "fireball1 : 3 sec, fireball2: 6 sec" etc is simply not realistic due to latency and the fact that noones a robot and will never achieve "ideal" dps i would consider 3,2 secs for a fireball cast by a normal human being
I did label it ideal DPS for a reason

As I said in my previous post, latency is trivial to add to the simulator. 2 lines of code was all I needed. Here's a simulation with 0 to 200ms of latency per cast. The numbers are rounded off, so the output is going to show only 3.0, 3.1, or 3.2 seconds per cast.

Caster Stats
=========================================
Spell Damage: 1150
Crit Rate: .36
Hit Rate: .16

Combat Log
=========================================
[   3.2] Fireball  hit  3065
[   6.4] Fireball  hit  3182
[   9.6] Fireball crit  6280
[  12.7] Fireball crit  6174
[  15.9] Fireball  hit  3073
[  19.1] Fireball  hit  3062
[  22.2] Fireball crit  6245
[  25.3] Fireball was resisted.
[  28.3] You gain Focus.
[  28.4] Fireball  hit  2972
[  29.9] Focus fades from you.
[  30.1] Fireball  hit  2999
[  33.2] Fireball  hit  3012
[  36.4] Fireball  hit  3046
[  39.5] Fireball  hit  2977
[  42.7] Fireball  hit  2940
[  45.9] Fireball  hit  3056
[  49.1] Fireball crit  6350
[  52.2] Fireball crit  6494
[  55.3] Fireball crit  6343
[  58.4] Fireball  hit  3086
[  61.6] Fireball crit  6335
[  64.8] Fireball crit  6572
[  68.0] Fireball crit  6335
[  71.2] Fireball  hit  2939
[  74.4] Fireball  hit  3019
[  77.4] You gain Call of the Nexus.
[  77.5] Fireball crit  6208
[  80.5] You gain Focus.
[  80.7] Fireball  hit  3386
[  82.2] Focus fades from you.
[  82.4] Fireball  hit  3352
[  85.5] Fireball  hit  3538
[  88.0] Call of the Nexus fades from you
[  88.6] Fireball  hit  3124
[  91.8] Fireball crit  6597
[  94.9] Fireball crit  6186
[  98.0] Fireball  hit  2987
[ 101.1] Fireball  hit  3042
[ 104.3] Fireball  hit  3002
[ 107.4] Fireball  hit  3138
[ 110.5] Fireball  hit  3076
[ 113.6] Fireball  hit  3068
[ 116.8] Fireball  hit  3008
[ 119.9] Fireball  hit  2976
[ 123.1] Fireball  hit  3083
[ 126.1] You gain Call of the Nexus.
[ 126.3] Fireball crit  6656
[ 129.5] Fireball  hit  3497
[ 132.7] Fireball crit  7518
[ 135.7] You gain Focus.
[ 135.8] Fireball  hit  3518
[ 136.8] Call of the Nexus fades from you
[ 137.3] Focus fades from you.
[ 137.5] Fireball crit  6265
[ 140.6] Fireball crit  6607
[ 143.8] Fireball crit  6645
[ 146.9] Fireball  hit  3164
[ 150.1] Fireball  hit  3071
[ 153.2] Fireball  hit  3052
[ 156.4] Fireball crit  6542
[ 159.5] Fireball  hit  3006
[ 162.6] Fireball crit  6380
[ 165.8] Fireball  hit  3057
[ 169.0] Fireball crit  6540
[ 172.2] Fireball crit  6630
[ 175.4] Fireball  hit  2964
[ 178.5] Fireball  hit  2953
[ 181.6] Fireball crit  6483
[ 184.7] Fireball  hit  3096
[ 187.8] Fireball  hit  3129
[ 190.9] Fireball  hit  3099
[ 194.1] Fireball crit  6549
[ 197.1] You gain Call of the Nexus.
[ 197.3] Fireball crit  6377
[ 200.4] Fireball  hit  3405
[ 203.6] Fireball  hit  3379
[ 206.7] Fireball  hit  3456
[ 207.7] Call of the Nexus fades from you
[ 209.8] Fireball  hit  3125
[ 212.9] Fireball  hit  2978
[ 216.1] Fireball crit  6234
[ 219.3] Fireball  hit  3016
[ 222.5] Fireball  hit  3093
[ 225.7] Fireball crit  6389
[ 228.9] Fireball  hit  3050
[ 232.0] Fireball  hit  2963
[ 235.1] Fireball  hit  3179
[ 238.1] You gain Focus.
[ 238.3] Fireball  hit  3050
[ 239.8] Focus fades from you.
[ 240.0] Fireball crit  6546
[ 243.1] Fireball  hit  3073
[ 246.1] You gain Call of the Nexus.
[ 246.2] Fireball crit  6262
[ 249.4] Fireball  hit  3460
[ 252.5] Fireball  hit  3417
[ 255.6] Fireball  hit  3527
[ 256.6] Call of the Nexus fades from you
[ 258.8] Fireball crit  6299
[ 262.0] Fireball  hit  2973
[ 265.2] Fireball  hit  2988
[ 268.4] Fireball was resisted.
[ 271.5] Fireball crit  6318
[ 274.6] Fireball crit  6423
[ 277.8] Fireball  hit  3100
[ 281.0] Fireball crit  6324
[ 284.1] Fireball crit  6433
[ 287.3] Fireball crit  6338
[ 290.4] Fireball  hit  3007
[ 293.5] Fireball  hit  3007
[ 296.7] Fireball  hit  3545
[ 299.7] You gain Focus.
[ 299.8] Fireball  hit  3584
[ 301.3] Focus fades from you.
[ 301.5] Fireball  hit  3368
[ 304.7] Fireball  hit  3446
[ 307.9] Fireball  hit  3392
[ 311.0] Fireball  hit  3570
[ 314.1] Fireball  hit  3569
[ 317.3] Fireball crit  7300
[ 320.5] Fireball  hit  3367
[ 323.7] Fireball crit  7372
[ 326.9] Fireball crit  7403
[ 329.9] You gain Call of the Nexus.
[ 330.1] Fireball crit  7123
[ 333.3] Fireball  hit  3944
[ 336.5] Fireball crit  8198
[ 339.6] Fireball  hit  3909
[ 340.6] Call of the Nexus fades from you
[ 342.8] Fireball crit  7397
[ 346.0] Fireball  hit  3587
[ 349.2] Fireball crit  7077
[ 352.3] Fireball  hit  3564
[ 355.5] Fireball  hit  3418

=========================================
    Damage: 501070      Time: 355.5s
 Ideal DPS: 1409.48

Fireball - 115 casts
-----------------------------------------
   Hits: 72     62.6%   Max: 3944
  Crits: 41     35.7%   Max: 8198
Resists: 2      1.7%

Offline
Old 10/23/07, 5:37 PM   #10
[DRF]Solmyr
Von Kaiser
 
Undead Mage
 
Spirestone
Too much time on the WoW forums, sorry.

Last edited by [DRF]Solmyr : 10/23/07 at 5:44 PM. Reason: Restating the Obvious...

Offline
Old 10/23/07, 6:20 PM   #11
Ariakis_Uther
Glass Joe
 
Human Warrior
 
Kilrogg
It appears that the zip file is missing the following files.

buff.h
lib\mersenne\MersenneTwister.h

I just thought I'd load it up and compile it and mess around a bit. Do you have a site up yet to handle the actual project? I'd be interested in seeing what you have in mind for the project and possibly lending a hand.

Offline
Old 10/23/07, 6:39 PM   #12
marloz
Feed Me A Stray Cat
 
Human Mage
 
Twilight's Hammer (EU)
Originally Posted by zurmagus View Post
The intent of the current ignite mechanics is to give fire mages 210% crits every time so I just coded a 2.1 crit modifier for fire spells. I have no interest in trying to simulate the bugs in the actual implementation of ignite.
It's been a while since I've been playing a fire mage, but if you get 2 consecutive crits in a row does the last ignite-tick still go through? Or is it overwritten by the new ignite. If that's the case just using a 2.1 crit modifier would be off.

Offline
Old 10/23/07, 7:16 PM   #13
Plankel
Von Kaiser
 
Troll Mage
 
Scarshield Legion (EU)
seems nice.

For more info about partial resists you probably want to have a look at
this thread

Offline
Old 10/23/07, 8:00 PM   #14
zurmagus
Von Kaiser
 
Troll Mage
 
Lothar
Originally Posted by Ariakis_Uther View Post
It appears that the zip file is missing the following files.

buff.h
lib\mersenne\MersenneTwister.h

I just thought I'd load it up and compile it and mess around a bit.
Thanks, I just realized I was missing the mersenneTwister files. Its just a publicly available random number generator class I used for the damage rolls and stuff. Download the C++ implementation here and just extract it to a lib subdirectory in the project directory.

http://www-personal.umich.edu/~wagnerr/Mersenne-1.0.zip

Mersenne Twister Random Number Generator

Inventor's homepage:
Mersenne Twister: A random number generator (since 1997/10)


Here's the buff.h file I have on my home PC:
http://community.nrguild.org/uploads/buff.h

I have another copy of it on my PC at work that might be newer. I'll see if I can VPN in and check after I finish this post.



Originally Posted by Ariakis_Uther
Do you have a site up yet to handle the actual project? I'd be interested in seeing what you have in mind for the project and possibly lending a hand.
I don't have a site set up at the moment but it is a possibility. So far this program has just been a side project for me when I had spare time at work. A few months ago I just learned the basics of Perl, so the simulator started off as short perl script I wrote for practice. I kept adding to it and started developing an object oriented model as I learned more. At that point I decided it was time to re-write it in C++ for better performance among other things.

For now I just want to get some documentation written and posted here, and if it looks like there is enough support I'll set up a site.

Offline
Old 10/23/07, 8:16 PM   #15
Ariakis_Uther
Glass Joe
 
Human Warrior
 
Kilrogg
It looks like buffs.h is referring to a spelldata.h that is also missing

Offline
 

Go Back   Elitist Jerks » Public Discussion » Class Mechanics

Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
[Mage] Mage fireball spam + Mystic Meta gem, +2.5% dps? Searix Class Mechanics 2 08/19/08 10:00 AM
[Mage] Molten Armor vs. Mage armor Cheddar Class Mechanics 9 08/11/08 9:01 PM
[Shaman] Experimental combat simulator draghkar Class Mechanics 182 08/30/07 4:33 AM
[Tanking] Java Tanking Simulator Twid Class Mechanics 12 05/08/07 5:50 AM
Program: Tanking simulator for druids/paladins/warriors Athinira Class Mechanics 5 04/14/07 6:36 AM