SimulationCraft is a tool to explore combat mechanics in the popular MMO RPG World of Warcraft. It is a multi-player event-driven simulator written in C++ that models raid damage. Increasing class synergy and the prevalence of proc-based combat modifiers have eroded the accuracy of traditional calculators that rely upon closed-form approximations to model very complex mechanics. The goal of this simulator is to close the accuracy gap while maintaining a performance level high enough to calculate relative stat weights to aid gear selection.
One of the common criticisms of theorycrafting tools is that they model Patchwerk style fights in which the DPS players are able to focus exclusively on generating damage without worrying about standing in molten lava or other such trivial distractions. While truly modeling individual boss fights is a near-impossible task, SimulationCraft does support a wide array of raid events. See "Modeling Raid Events" and the Examples tab for details.
At its core, SimulationCraft is a parameter-driven batch simulation tool. This interface is a very light-weight wrapper that simply helps you build configuration scripts, pass them to the simulator, and then evaluate the results. It relies upon existing character profile management sites to provide interactive manipulation of character talents, glyphs, gear, enchants, etc. The three key steps are:
SimulationCraft has many, many options that can be loosely categorized into two groups, those that are applied to the active player and those that are applied globally. The Globals section of the Options tab is dedicated to the more commonly changed global parameters.
Scale factors represent the change in DPS per change in stat value. They are helpful in evaluating incremental gear changes. They are calculated by first making a baseline simulation and then comparing it against subsequent runs in which one stat is increased or decreased. To calculate trustworthy scale factors, the simulation margin of error must be sufficiently smaller than the change in stat value. To reduce the margin of error a large number of iterations is required. Since multiple simulations must be run with a higher-than-normal number of iterations, calculating scale factors can take 50x to 100x more cputime than a standard DPS run.
ScaleFactor(Stat) = ( DPS(Baseline+StatDelta) - DPS(Baseline) ) / StatDelta
By default, SimulationCraft uses stat deltas between 50 and 150 depending upon the stat. Most stat deltas are positive, measuring the increase in DPS. However, due to the cap nature of Hit and Expertise, these stats use negative deltas, measuring the decrease in DPS. To override the default stat deltas, see the Examples tab for the appropriate parameters.
SimulationCraft will optionally generate DPS-per-stat graphs using a +/- 200 stat point range given the initial gear point. It should be noted that simulation is not well suited for plot generation. Precision is not as important so fewer iterations are required. However, the sheer number of sample points needed to generate a plot make it even more cpu-intensive than scale factor generation.
To download a character from the Armory, merely navigate the web view to a character profile page. The easiest way to do this is via the Search mechanism. The Armory Spec toggle under Options controls whether to use the active or the inactive talent/glyph setup. There is no need to wait for the web page to be fully rendered. The import process uses the URL at the command-line. Note that the URL at the command-line can be modified directly in the same manner as a normal web browswer. The Armory tab defaults to US region. See the Options tab to change the region to EU, TW, or CN.
SimulationCraft does not provide a graphical character sheet with which to experiment. Instead we have integrated with the CharDev character planner. CharDev is a powerful profiling tool that strives to be both current and accurate.
If you know the ID number of the profile you wish to simulate, one can simply type chardev=ID in the Simulate tab. If you would like to view the ID before simulating, go to the Import/CharDev tab and change the address from ?planner to ?profile=ID and hit Enter.
If you do not know the ID number of the profile, then you can use Browse under the Import/CharDev tab to search. Note that to search within your own CharDev profiles you will need to log in first.
Creating a new CharDev profile requires that you create an account at their site. This is both free and painless.
Once you log in, you can seed a CharDev profile with a character from the Armory or you can start from scratch.
Remember that you MUST save your profile after editting prior to Importing it into SimulationCraft.
Rawr character XML files can be used to generate a SimulationCraft character profile. While name, race, class, talents, glyphs, gear, and gems are all imported, buff/debuff settings and other module-specific settings that may be in the XML file are all ignored.
Support for Custom Profiles is not yet available.
To save text that may be conveniently cut-and-pasted into an email or forum, go to the Log tab and select the portion of interest. To save the entire log, specify the file name at the command line and press Save!.
To save HTML, go to the Results tab, specify the file name at the command line, and press Save!.
These HTML files are all-inclusive. The images are generate using GoogleCharts which means that the HTML cannot be viewed offline.
A key part of the simulation is the player artificial intelligence. It is important to understand that there is no rotation to specify. Instead, the player is given a priority list of actions. Whenever the player is looking for something to do (just finished an action and not waiting on the GCD), it will simply walk the list of actions and perform the first one that is ready. For example, damage-over-time actions are not ready until they are finished ticking (minus the cast-time, of course). Temporary buffs and cooldowns can also prevent certain actions from being considered ready. There are a large variety of conditionals that can be applied to each action in the priority list that can limit their execution even further. The default action list (actions+=) generated during character import will demonstrate this. For more details, see the Examples tab.
Experimenting with SimulationCraft's various supported events allows one to determine how succeptible talent/gear combinations are to adverse conditions. The intervals and durations of each event are user-specified, as are the degree of randomness applied to each. Supported events include: movement, stuns, AoE damage, adds spawning, boss (in)vulnerability, boss casting requiring use interrupts.
These are only a few examples. For more details, see the Examples tab.
raid_events+=/movement,cooldown=30,duration=5
raid_events+=/movement,players_only=1,cooldown=30,duration=5
raid_events+=/movement,cooldown=40,duration=7,distance<=5
raid_events+=/stun,cooldown=60,duration=2
raid_events+=/adds,count=3,cooldown=60,duration=20
raid_events+=/invulnerable,cooldown=120,duration=3
raid_events+=casting,cooldown=30,duration=3,first=15