close
SimulationCraft 7.0

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.

Table of Contents

How This Interface Works

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:

  1. Generate your profile.
  2. Simulate your profile.
  3. Evaluate your results.

Tips and Tricks

Global Parameters

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

Scale factors represent the change in DPS per change in stat value. They are helpful in evaluating incremental gear changes, and 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 longer than a standard DPS run.

ScaleFactor(Stat) = ( DPS(Baseline+StatDelta) - DPS(Baseline) ) / StatDelta

By default, SimulationCraft uses stat deltas between 150 and 300 depending upon the stat. Most stat deltas are positive, measuring the increase in DPS.

Plots

SimulationCraft will optionally generate DPS-per-stat graphs using a +/- 50 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.

Importing from the Armory

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 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.

Saving Results

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.

Priority Lists, Not Rotations

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 Help tab.

Modeling Raid Events

Experimenting with SimulationCraft's various supported events allows one to determine how susceptible 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 Help tab.

Every 30sec, all players and pets are required to move for 5sec

raid_events+=/movement,cooldown=30,duration=5

Every 30sec, all players are required to move for 5sec while pets remain stationary

raid_events+=/movement,players_only=1,cooldown=30,duration=5

Every 40sec, all players within 5yards are required to move for 7sec

raid_events+=/movement,cooldown=40,duration=7,distance<=5

Every 60sec, all players are stunned for 2sec

raid_events+=/stun,cooldown=60,duration=2

Every 1min, 3 additional targets are nearby the boss and remain for 20sec

raid_events+=/adds,count=3,cooldown=60,duration=20

Every 2min, the target becomes invulnerable, interrupting players and shedding all DoTs.

raid_events+=/invulnerable,cooldown=120,duration=3

Interrupt boss's 3 second cast every 30 seconds starting 15sec into fight

raid_events+=casting,cooldown=30,duration=3,first=15