Skip to content

Conversation

renanthera
Copy link
Member

  • Parse passive effects directly onto player-specific DBC (Parse passive effects directly onto player-specific DBC #10659)
  • [Priest] begin the prune for midnight
  • [DK] Start Midnight Cleanup
  • [DBC] update configuration for 12.0.0
  • regenerate spell data build 12.0.0.63534
  • [Demon Hunter] fix msvc build error
  • update spell data dump build 12.0.0.63534
  • [CI] run build tasks on midnight
  • [Gear] add unique_gear_midnight.cpp
  • [DBC] hardcode mythic target item level to raid test aura
  • [DH] list all new talents
  • [DH] initialize all new talents
  • [DH] compilation pass
  • [Unholy] Start implementing Midnight changes
  • [Unholy] Make Midnight sims actually functional
  • [Priest] initialize all new spells for midnight
  • [Unholy] Implement new infected claws
  • [Unholy] Fix lesser ghoul summons
  • [Unholy] Refactor Lesser Ghoul, and Magus summons
  • [Unholy] Fix Dark Transformation Extensions
  • [Unholy] Implement Unholy Devotion
  • [Unholy] Implement Forbidden Knowledge apex talent
  • [Unholy] Fix Necrotic Coil & adjust reporting
  • [Priest] Voidform and Void Volley base impl
  • [Unholy] Implement disease extension and consumption mechanics
  • [Priest] Tentacle Slam and Mind Flay Insanity reworks
  • [DK] Ensure replacement actions check cost
  • [Priest] Mind Blast insanity will auto parse now
  • [Player] parse all specialization spells automatically
  • fix typo
  • [Priest] adjust Insidious Ire and Mind Blast
  • [Priest] add first Apex talent
  • [Report] allow up to 11 tree rows
  • [Priest] Void Apparitions should spawn with Void Volley
  • [Unholy] More talent implementations
  • [Unholy] Simplify Unholy Aura a bit
  • [Unholy] Fix Unholy Aura
  • Haranir initial setup
  • [Unholy] Fix Pet Vector removals
  • [Unholy] Finish first pass of Midnight Unholy
  • [Unholy] Fix Typo
  • [Base] Apply level 80 base stats.
  • remove invalidated hotfixes
  • [Base] Apply level 80 base stats to live extra data, not just PTR data.
  • [DH] enable Devourer sims
  • [DH] rip out TWW set bonuses
  • [Unholy] Cleanup more unused code & add expression to check remaining duration of oldest lesser ghoul
  • [DK] Remove remaining mentions of TWW tier sets
  • [Base] Add level 90 base stats
  • [DH] conditionally init consume soul
  • [Devourer] find spec aura
  • [DH] update auto attack multipliers
  • [DH] setup basic APL support for Devourer
  • [Devourer] add Consume
  • [Devourer] add Voidblade
  • [Unholy] Implement Rapid Variant
  • [Unholy] Adjust Rapid Variant Reporting
  • [Unholy] Fix Rapid Variant trying to access sleeping targets
  • [Unholy] Adjust Superstrain Proc Rate
  • [Spell Query] print list of spells an effect is modified by
  • update spell data dump
  • [Spell Query] display misc_value2 as decimal by default
  • [Spell Query] also display for effects modified via label
  • update spell data dump
  • [Base] Add estimated base stat values for levels 81-83. - Needs verification for all classes except for Monk.
  • [Priest] finish Void Apparition implementation
  • [DBC] Whitelist some Devourer spells
  • [Priest] Spiritual Guidance and Strength of Soul
  • [Devourer] add Soul Immolation / Spontaneous Immolation
  • [Priest] remove Symbol of Hope
  • [Devourer] clean up Soul Immolation a bit
  • [Devourer] Consume can spawn a Soul Fragment
  • [DH] refactor maximum Soul Fragments
  • [DBC] add Windwalker Combo Strike display spells.
  • [DH] add Reap
  • [DH] add Feast of Souls
  • [DeathKnight] Prune blood for midnight ([DeathKnight] Prune blood for midnight #10663)
  • [Devourer] update NYI
  • [DH] clean up more TWW stuff
  • [Devourer] add Devourer's Bite
  • [Devourer] add The Hunt
  • [Devourer] update NYI's again
  • [monk] Initial Module Cleanup ([monk] Initial Talent Cleanup #10661)
  • [Mage] Remove accidental double dip
  • [DBC] Add Cull for Devourer
  • [DBC] Fix my gen without the monk spells
  • [Spell Data] Dump Update:wq
  • [Devourer] add Devour
  • [DH] fix execution time for ABRs
  • [DH] add Cull
  • [Devourer] remove debug line
  • [Shaman] Disable Wind Gust for now
  • [Shaman] Clean up Enhancement to allow simulating
  • [Shaman] Fix Enhancement data asserts. Runs now.
  • [Shaman] Remove more Enhancement talents
  • [Devourer] invert Meta check for Reap/Consume
  • [Devourer] add Eradicate
  • [Devourer] add Void Ray
  • [Player] Auto parse passive player aura effects ([Player] Auto parse passive player aura effects #10662)
  • [Devourer] add Voidglare Boon
  • [Devourer] apply Eradicate buff on Void Ray channel
  • [DBC] generate PowerType.db2
  • [DBC] add method for out of combat resource decay grace period
  • [DK] Update Infliction for Midnight
  • [Devourer] update NYIs
  • [Devourer] de-parent Eradicate and Cull from Reap
  • [Devourer] de-parent Devour from Consume
  • [Devourer] add Moment of Craving
  • [Devourer] add Entropy
  • [DBC] add bitmask for active classes to power_type_data_t
  • [DBC] apply power divisor to regen_per_second
  • [Devourer] update NYIs
  • [Devourer] fix The Hunt damage spell IDs
  • [Devourer] fix action_ready checks for multiple spells
  • [Devourer] register Void Nova talent
  • [Devourer] basic Shattered Souls implementation
  • [Player] remove mastery spells from auto parsing
  • [Priest] clean up more old code
  • [monk] Get module into a running state ([monk] Get module running #10664)
  • [player] Fix lost std::string_view temporary.
  • [player] Fix int signedness to silence warnings.
  • [player] Fix problematic std::string_view temporaries and make sure all strings are defined.

gastank and others added 30 commits October 2, 2025 10:20
…aft#10659)

Currently the various systems we use to parse spell data effects act upon simc object such as `player_t`, `action_t`, `buff_t`. This can lead to several issues including but not limited to: order of operation dependence for values that have both flat add and pct mul applied, implementation dependence when simc objects use different dbc data for the same object value, effect modifying effect requiring individual manual implementation, easy-to-miss unexpected effects in possibly unrelated passives being missed, and others.

The new system directly modifies the player-specific DBC that is currently used for hotfixes, spell data overrides, and trait effect value modification from trait ranks. As these modifications are directly applied to `spell_data_t`, `spelleffect_data_t`, and `spellpower_data_t` they integrate transparently with all existing dbc data access methods and are agnostic to simc object implementations. For effects that don't directly modify the DBC but instead a base attribute of the object, modifications are pre-registered then applied to the object's base members during construction, either directly or via methods such as `action_t::parse_spell_data()`.

**`player_t::parse_passive_effects( const spell_data_t* )`** is the main entry point. Only spells with the `SX_PASSIVE` flag will be parsed, unless `true` is passed as an optional second argument.

Since modifications are directly made onto the DBC (or pre-registered) it's not necessary to wait until object construction to parse, but it is recommended you wait until various named class module spell_t pointer structs are populated by the end of `init_spells()`.

**`player_t::get_passive_value( const spell_data_t&, string )`**
**`player_t::get_passive_value( const spelleffect_data_t&, string )`**
**`player_t::get_passive_value( const spellpower_data_t&, string )`**
These are used to get the final modified value from the modified DBC for the stat specified. Stat strings can be found in `field_type_map` in player.cpp. A 3-value array will be returned, representing `{ original, flat add, pct mult }`. Variables of type `parsed_value_t<T>` can directly be assigned this array.

**`player_t::parse_all_class_passives()`** will automatically parse all class/spec auras, including additional ones added beyond the first. The table of auras can be found in `_class_passives` in `sc_const_data.cpp`.
**`player_t::parse_all_passive_talents()`** will automatically parse all talents active for the current player, including those from the trait hash, manual talent strings, and enable_all_talents.
**`player_t::parse_all_passive_sets()`** will automatically parse all tier set bonuses for the current expansion.
It is recommended you call these three functions for both convenience and to ensure that no errant effects are missed.

**`player_t::deregister_passive_effects( const spell_data_t* )`** will retroactively remove any existing parsing of the spell and prevent all future parsing of the spell.

**`player_t::register_passive_effect_mask( const spell_data_t*, effect_mask_t )`** will allow you to filter out which effects to be parsed. It uses the same `effect_mask_t` syntax used in `parse_effects()`. This will retroactively adjust any existing parsing of the spell. If the spell has not been parsed yet, `parse_passive_effects()` will still need to be called.
```
// skip effect#1 and effect#5 of the spec spell
register_passive_effect_mask( spec_spell, effect_mask_t( true ).disable( 1, 5 ) )
```

**`player_t::register_passive_affect_list( const spell_data_t*, affect_list_t )`** will allow you to modify which spells are affected by the parsed spell. It uses the same `affect_list_t` syntax used in `parse_effects()`. This will retroactively adjust any existing parsing of the spell. If the spell has not been parsed yet, `parse_passive_effects()` will still need to be called. 
```
// also apply family flag 2 to effect#1 of the spec spell
register_passive_affect_list( spec_spell, affect_list_t( 1 ).add_family( 2 ) )
```

**`player_t::register_passive_spell_override( const spell_data_t&, value, field )`**
**`player_t::register_passive_power_override( const spellpower_data_t& value[, field = "cost" ] )`**
**`player_t::register_passive_effect_override( const spelleffect_data_t&, value[, field = "base_value"] )`**
provides a method within the scope of `player_t` that you can use to directly override the values. Unlike the hotfix system, this can be called as a normal `player_t` method allowing you to use any conditional flows as needed. As this directly manipulates the DBC without any processing, it should be called before any other parse methods are used.

**`player_t::disable_class_spell_auto_cloning`** default `false`. To remain agnostic from order of operations, by default all class spells are cloned into the player DBC when spell_data_t pointers are called via `find_spell()` and related methods. By setting this to `true` you can disable this auto cloning. Be warned that this will means that all spell_data_t pointers before parsing will point to the base unmodified DBC, and any modifications from parsing will not apply to values retrieved from those early pointers.
ToppleTheNun and others added 27 commits October 6, 2025 16:23
* [Player] Automatically Parse Passive Player Auras

Includes every aura subtype currently utilized in any class module, as well as every aura subtype supported by the Parse Effects mixin. 

Reporting is output in the debug log, as well as under `parsed passive effects` in the HTML report, and will output for every effect subtype, with School, Attribute and Rating modifiers providing extra outputs for every affected type.
* [monk] Clean up Assisted Combat APLs for testing.

* [monk] Get BrM and WW into a runnable state.

* [monk] Unify Celestial Conduit implementation.

* [monk] Fix obviously incorrect spell data.

* [monk] Fix error and clean up warnings.
@renanthera renanthera requested a review from a team as a code owner October 7, 2025 09:23
@renanthera renanthera closed this Oct 7, 2025
@renanthera
Copy link
Member Author

oops wrong branch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants