wowlab_engine_gamedata/game_data/
stores.rs1use wowlab_engine_macros::ResolvedStore;
4use wowlab_types::{
5 data::WeaponStats,
6 sim::{EffectRef, FastMap, IntMap, SpellIdx},
7};
8
9use super::{
10 AuraProps, ConsumableSpells, EffectValues, PowerTypeProps, ResolvedCurves, ResolvedGameTables,
11 ResolvedMap, SpellClassFlags, SpellProps, default_aura_props, neutral_spell_props,
12};
13
14#[derive(Debug, ResolvedStore)]
15pub(crate) struct EffectStore {
16 pub(crate) values: FastMap<EffectRef, EffectValues>,
17 #[resolved(neutral = 0)]
18 pub(crate) school_masks: ResolvedMap<SpellIdx, i32>,
19}
20
21#[derive(Debug, ResolvedStore)]
22pub(crate) struct SpellStore {
23 #[resolved(neutral = neutral_spell_props())]
24 pub(crate) props: ResolvedMap<SpellIdx, SpellProps>,
25 #[resolved(neutral = default_aura_props())]
26 pub(crate) aura_props: ResolvedMap<SpellIdx, AuraProps>,
27 #[resolved(neutral = PowerTypeProps::default())]
28 pub(crate) power_types: ResolvedMap<i32, PowerTypeProps>,
29 pub(crate) overrides: IntMap<SpellIdx, SpellIdx>,
30 pub(crate) learns: IntMap<SpellIdx, Vec<SpellIdx>>,
31 pub(crate) labels: IntMap<SpellIdx, Vec<i32>>,
32 pub(crate) class_flags: IntMap<SpellIdx, SpellClassFlags>,
33 pub(crate) specialization: Vec<SpellIdx>,
34}
35
36#[derive(Debug, ResolvedStore)]
37pub(crate) struct PassiveStore {
38 pub(crate) direct_damage_mult: IntMap<SpellIdx, f64>,
39 pub(crate) direct_damage_flat: IntMap<SpellIdx, f64>,
40 pub(crate) direct_damage_flat_mastery: IntMap<SpellIdx, f64>,
41 pub(crate) periodic_damage_mult: IntMap<SpellIdx, f64>,
42 pub(crate) crit_chance_bonus: IntMap<SpellIdx, f64>,
43 pub(crate) crit_chance_mult: IntMap<SpellIdx, f64>,
44 pub(crate) crit_damage_bonus: IntMap<SpellIdx, f64>,
45 pub(crate) crit_damage_per_crit_chance: Vec<(i32, f64)>,
46 pub(crate) crit_bonus_per_crit_chance: IntMap<SpellIdx, f64>,
47 #[resolved(default = 1.0)]
48 pub(crate) auto_attack_damage_mult: f64,
49 #[resolved(default = 1.0)]
50 pub(crate) pet_damage_mult: f64,
51 #[resolved(default = 1.0)]
52 pub(crate) guardian_damage_mult: f64,
53 pub(crate) pet_attack_power_inheritance: IntMap<u32, f64>,
54 pub(crate) pet_spell_power_inheritance: IntMap<u32, f64>,
55 pub(crate) folded_spells: Vec<SpellIdx>,
56 pub(crate) class_target_debuffs: Vec<SpellIdx>,
57}
58
59#[derive(Debug, ResolvedStore)]
60pub(crate) struct EnvironmentStore {
61 pub(crate) armor_constant: f64,
62 pub(crate) creature_armor: f64,
63 #[resolved(default = 1.0)]
64 pub(crate) target_armor_mult: f64,
65 #[resolved(default = 1.0)]
66 pub(crate) armor_constant_mod: f64,
67 pub(crate) main_hand: WeaponStats,
68 pub(crate) off_hand: Option<WeaponStats>,
69 pub(crate) consumables: ConsumableSpells,
70}
71
72#[derive(Debug, Default)]
73pub(crate) struct ScalingStore {
74 pub(crate) curves: ResolvedCurves,
75 pub(crate) game_tables: ResolvedGameTables,
76 pub(crate) level: u32,
77}