5.2 Stuff

- Fiddling with the GCD stuff to make it fractionally cheaper to calc.
Probably easier to read too.
- MG now suffers from DW hit chance penalty. Was proccing off misses
earlier.
- Reimplemented MG procs from the SS's spent on SnD and Rupture. (Kind
of a wash, really)
- Stop doing swing resets during SB for Sub and Assassination.
- Moved the latency variable to the settings object. Should be stored
in seconds, not milliseconds.

NOTE: All these changes came from me looking for a hypothetical "7.2k
haste bug". I see no evidence to suggest there's a haste breakpoint at
7.2k haste rating in the code. Tested before and after I fiddled with
the GCD calculation, 7.2k haste rating does not appear to put the
player near any caps.

I'm putting this concern aside for now unless further evidence can be
gathered.
5.3 PTR - EXPERIMENTAL

- More precise RPPM calculation. Now factors in overlap and bad luck
prevention. Plus new methods to facilitate that.
- Features geometric series calculations. Properly handles multiple
misses/dodges/whatever in a row. Only used for energy costs and GCD
calculations.
- Berserking impacts RPPM trinkets.
- Removed Cata tier method calls. Many code segments still exist for
example purposes, but never do anything, so it should run a few %
faster than it would otherwise.
- Approximated the value of a full energy bar due to energy capping.

TODO: Simplify RPPM haste calls. Adv_params implementation.
5.3 PTR - EXPERIMENTAL

- Shuffled autoswings to clean up the code.
- PvP Mode shifts hit/exp caps to "same level" soft caps.
- Advanced Params preliminary code. Handles bonus stats.
- Removed a few more old tier proc calls.

TODO:
Stat modifiers, haste and bonus damage modifiers.
5.3 PTR - EXPERIMENTAL

- Cleaning up the pipeline. Initializing values based on buffs that
don't change during attack counts functions.
- Implemented the stat modifier (advanced parameter).
- Added "none" race. Used for baselining calculations.
- Reduced combat setup data use.
- Shifted haste and attack speed modifiers to the true haste modifier.
- Increase marked for death CD using similar method to rupture delay to
realistic values.
5.3 PTR - EXPERIMENTAL

In order to look into why Assassination doesn't seem to be scaling
correctly, I need to make the code cleaner. There are a significant
number of loops, nests and conditions that make stack traces annoying,
and reading the code take longer than I would like.

As a result, I've broken Assassination up into two methods. Work will
progress on the Anticipation calcs first (just because it's easier),
then I will debug the Anticipation-less calculations. The bugs will
start to expose themselves as I trim out excess code and reorganize it
for efficiency.

Or, that's the plan at least.
5.3 PTR - EXPERIMENTAL

- ST Damage and cost.
- Mixology for mop flasks.
- Temporarily skewing the sample script. Using my stats for now while I
compare with testing logs from me.
- Gathering costs from self.get_spell_stats() now handles misses and
cost multipliers.
- Brought CPs from SB back to anticipation calculations.
- Trying to find a better way to support Vendetta + SB stacking.

Note: I really don't want to do what I did for Combat, also for
Assassination. Doing 4 calcs per phase per type, and double that for
the execution phase is 8 iterations. We only do 3 for Combat.
5.3 PTR Update

- Cleaned up code.
- Reduced function calls.
5.3 Performance and Readability Updates

calcs/__init__.py
- get_ep() method supports baseline_dps parameter. Saves compute time
if passed a normalized DPS value. Slightly less than 10% performance
boost when calculated locally.
- get_talents_ranking() returns the original talents to their original
state now. No more blank slate after checking values.

aldriana/__init__.py
- append_damage_on_use(), 'melee_spell_damage' procs now correctly use
melee hit rates and crit rates.
- RoRO. Blegh.
- Removed dead code.
- Implemented a full energy bar for assassination (only factors in
during execute range to consider pooling before 35%), and sub.
- Last few damaging procs properly use new RPPM code.

aldriana/settings.py
- Max parameters implemented.
- Option to not merge damage calculations added in settings object.
Allows users to see the difference between mh and oh values, and mimic
combat log reports.

- Removed some default EP's to quicken code. No one cares about
spell_hit, spell_expertise, or str.
- Cleaned up code for easier reading and (in most cases) faster
execution.
RPPM Model updated, Talisman Model changes, Proc Scaling for 5.3

- made some changes to the rppm model, hopefully now reflect more the ingame results
- talisman model reworked due to rppm model update
- RoRo should be correct now, scales now correct with item level