Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
231deac
Remove target dummies feature (healing sims not supported)
Bisonpasfute Apr 8, 2026
2017421
feat(feralbear): add Feral Bear Druid sim
Bisonpasfute Apr 8, 2026
3419f46
fix(bear): add self Leader of the Pack
Bisonpasfute Apr 8, 2026
5a44595
fix(bear): fix the interaction between bonusArmor and Thick Hide
Bisonpasfute Apr 9, 2026
9e89016
feat(bear): change bear sim status to alpha
Bisonpasfute Apr 9, 2026
f89ee25
feat(bear): add bear to translation schema
Bisonpasfute Apr 9, 2026
0677650
feat(bear): Bear spell fixes and APL improvements
Bisonpasfute Apr 9, 2026
9772cc9
feat(bear): add encounters, update rotation, add curseOfReck by default
Bisonpasfute Apr 9, 2026
1b6e6e9
fix(bear): remove simple rotation
Bisonpasfute Apr 9, 2026
e2c7d71
fix(bear): fix default encounter + rotation
Bisonpasfute Apr 9, 2026
2378762
feat(bear): add preraid gearset (placeholder)
Bisonpasfute Apr 9, 2026
609879e
fix(bear): fix duplicate after rebasing
Bisonpasfute Apr 9, 2026
2703d48
fix(bear): update tests
Bisonpasfute Apr 9, 2026
c0c67f9
Merge branch 'master' into feature/bear
Bisonpasfute Apr 13, 2026
df484bd
feat(encounter): Add Hydross encounter + Resistance buffs
Bisonpasfute Apr 14, 2026
e92e894
feral(refactor): remove dead mop code
Bisonpasfute Apr 14, 2026
44ca553
feral(fix): fix starting energy to 100
Bisonpasfute Apr 14, 2026
607fa50
fix(encounter): enables crush by default
Bisonpasfute Apr 14, 2026
107eff0
fix(feral): fix ferocious bite implementation
Bisonpasfute Apr 15, 2026
714c4f4
fix(bear+hydross): refactor some bear spells + fix Hydross damage
Bisonpasfute Apr 15, 2026
f5774eb
Revert "Remove target dummies feature (healing sims not supported)"
Bisonpasfute Apr 15, 2026
f608c8e
fix(bear): remove target dummies for tanks
Bisonpasfute Apr 15, 2026
99338d9
fix(hydross+feral): fix hydross min damage, simplify stacks mechanism…
Bisonpasfute Apr 16, 2026
66902a3
refactor(feral): remove dead code from MoP
Bisonpasfute Apr 16, 2026
9956c16
Merge branch 'master' into feature/bear
Bisonpasfute Apr 16, 2026
c1f3734
refactor(hydross): add markDamageMod for hydross marks + update heali…
Bisonpasfute Apr 18, 2026
4e46780
Merge branch 'master' into Bisonpasfute-feature/bear
1337LutZ Apr 19, 2026
8b04330
Various Hydross fixes
1337LutZ Apr 19, 2026
813d5f6
Merge branch 'master' into feature/bear
1337LutZ Apr 19, 2026
67106b7
Add Warrior Hydross gear
1337LutZ Apr 19, 2026
4d9b8b3
Add presets groups
1337LutZ Apr 19, 2026
bd14024
Add encounter group
1337LutZ Apr 19, 2026
a5eca66
Merge pull request #1 from wowsims/feature/bear
Bisonpasfute Apr 19, 2026
86a1b54
fix(bear): fix crit immunity cap + add frost hydross gear
Bisonpasfute Apr 19, 2026
c04b45c
feat(feral): add P1+P2 gearsets
Bisonpasfute Apr 19, 2026
5836c9c
feat(bear): add nature resist set
Bisonpasfute Apr 19, 2026
a0f0074
fix(feral): remove overrides for savage/ice guards + fix tests for ca…
Bisonpasfute Apr 19, 2026
c3b2244
Merge branch 'master' into feature/bear
Bisonpasfute Apr 19, 2026
c0d246b
feat(druid): add 2p pvp set bonus
Bisonpasfute Apr 19, 2026
7dde901
fix(feral): add Weapon Damage to Cat/Bear and update Cat stat weights
Bisonpasfute Apr 21, 2026
212a962
fix(bear): fix threat modifiers for bear spells + add missing stat we…
Bisonpasfute Apr 21, 2026
d52ffa1
Merge branch 'master' into feature/bear
Bisonpasfute Apr 21, 2026
16527cd
fix(tests): fix tests
Bisonpasfute Apr 21, 2026
b0a5e9f
Merge branch 'master' into feature/bear
Bisonpasfute Apr 21, 2026
3777900
fix(bear): fix swipe num max targets to 3
Bisonpasfute Apr 21, 2026
a3f3a04
fix(druid): fix base AP + AP given by forms
Bisonpasfute Apr 21, 2026
1e1f1e1
feat(bear): update P1 BiS + update tests
Bisonpasfute Apr 21, 2026
11c2025
feat(core): add Aspect of the Wild
Bisonpasfute Apr 22, 2026
1908a1e
fix(bear): add inspiration buff
Bisonpasfute Apr 22, 2026
efc85f7
feat(trinkets): add Mark of the Champion trinkets
Bisonpasfute Apr 22, 2026
5930d79
fix(apl): add missing on use trinkets on both cat+bear APLs + prio Ma…
Bisonpasfute Apr 22, 2026
741c71c
fix(trinkets): fix both Marks of the Champions
Bisonpasfute Apr 25, 2026
2735d50
Merge branch 'master' into feature/bear
Bisonpasfute Apr 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified assets/database/db.bin
Binary file not shown.
1,025 changes: 516 additions & 509 deletions assets/database/db.json

Large diffs are not rendered by default.

Binary file modified assets/database/leftover_db.bin
Binary file not shown.
6 changes: 3 additions & 3 deletions assets/database/leftover_db.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@
{"effectId":66,"spellId":7455,"name":"Enchant Bracer - Minor Stamina","icon":"trade_engraving","type":6,"stats":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":66,"itemId":6376,"spellId":7455,"name":"Enchant Boots - Minor Stamina","icon":"inv_misc_note_01","type":10,"stats":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
{"effectId":66,"spellId":7455,"name":"Enchant Shield - Minor Stamina","icon":"trade_engraving","type":13,"enchantType":2,"stats":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":241,"spellId":7745,"name":"Enchant 2H Weapon - Minor Impact","icon":"trade_engraving","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":241,"spellId":13503,"name":"Enchant Weapon - Lesser Striking","icon":"trade_engraving","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":241,"spellId":7745,"name":"Enchant 2H Weapon - Minor Impact","icon":"trade_engraving","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":242,"spellId":7747,"name":"Enchant Chest - Lesser Health","icon":"trade_engraving","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":243,"itemId":6344,"spellId":7456,"name":"Enchant Bracer - Minor Spirit","icon":"inv_misc_note_01","type":6,"stats":[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
{"effectId":246,"itemId":6346,"spellId":7773,"name":"Enchant Chest - Lesser Mana","icon":"inv_misc_note_01","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
Expand All @@ -86,8 +86,8 @@
{"effectId":254,"spellId":7850,"name":"Enchant Chest - Health","icon":"trade_engraving","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":255,"itemId":6375,"spellId":7851,"name":"Enchant Bracer - Lesser Spirit","icon":"inv_misc_note_01","type":6,"stats":[0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
{"effectId":255,"itemId":11167,"spellId":7851,"name":"Enchant Boots - Lesser Spirit","icon":"inv_misc_note_01","type":10,"stats":[0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
{"effectId":255,"spellId":7851,"name":"Enchant Shield - Lesser Spirit","icon":"trade_engraving","type":13,"enchantType":2,"stats":[0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":255,"itemId":11038,"spellId":7851,"name":"Enchant 2H Weapon - Lesser Spirit","icon":"inv_misc_note_01","type":13,"enchantType":1,"stats":[0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
{"effectId":255,"spellId":7851,"name":"Enchant Shield - Lesser Spirit","icon":"trade_engraving","type":13,"enchantType":2,"stats":[0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":256,"spellId":7852,"name":"Enchant Cloak - Lesser Fire Resistance","icon":"trade_engraving","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0],"quality":1},
{"effectId":463,"itemId":7967,"spellId":9782,"name":"Mithril Shield Spike","icon":"inv_misc_armorkit_02","stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
{"effectId":464,"itemId":7969,"spellId":7215,"name":"Mithril Spurs","icon":"ability_rogue_sprint","type":10,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
Expand Down Expand Up @@ -154,8 +154,8 @@
{"effectId":929,"itemId":16217,"spellId":13827,"name":"Enchant Shield - Greater Stamina","icon":"inv_misc_note_01","type":13,"enchantType":2,"stats":[0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":930,"itemId":11226,"spellId":13927,"name":"Enchant Gloves - Riding Skill","icon":"inv_misc_note_01","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
{"effectId":931,"spellId":13928,"name":"Enchant Gloves - Minor Haste","icon":"trade_engraving","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":943,"spellId":13529,"name":"Enchant 2H Weapon - Lesser Impact","icon":"trade_engraving","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":943,"spellId":13693,"name":"Enchant Weapon - Striking","icon":"trade_engraving","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":943,"spellId":13529,"name":"Enchant 2H Weapon - Lesser Impact","icon":"trade_engraving","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":963,"itemId":22552,"spellId":27967,"name":"Enchant Weapon - Major Striking","icon":"inv_misc_note_01","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":963,"spellId":13937,"name":"Enchant 2H Weapon - Greater Impact","icon":"trade_engraving","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1},
{"effectId":1704,"itemId":12645,"spellId":16624,"name":"Thorium Shield Spike","icon":"inv_misc_armorkit_20","stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2},
Expand Down
35 changes: 27 additions & 8 deletions assets/locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -1572,14 +1572,6 @@
"label": "Totem Remaining Time",
"tooltip": "Returns the amount of time remaining until the totem will expire."
},
"cat_excess_energy": {
"label": "Excess Energy",
"tooltip": "Returns the amount of excess energy available, after subtracting energy that will be needed to maintain DoTs."
},
"cat_new_savage_roar_duration": {
"label": "New Savage Roar Duration",
"tooltip": "Returns duration of savage roar based on current combo points"
},
"warlock_assigned_curse_is_active": {
"label": "Assigned Curse Is Active",
"tooltip": "Returns true is assigned curse is active on target"
Expand Down Expand Up @@ -1823,6 +1815,33 @@
"label": "Maintain Faerie Fire",
"tooltip": "Use Faerie Fire (Feral) whenever it is not active on the target."
}
},
"feral_bear": {
"maul_rage_threshold": {
"label": "Maul Rage Threshold",
"tooltip": "Use Maul when current Rage is at or above this value."
},
"swipe_usage": {
"label": "Swipe Usage",
"tooltip": "When to use Swipe in the rotation.",
"values": {
"never": "Never",
"with_enough_ap": "With Enough AP",
"spam": "Spam"
}
},
"swipe_ap_threshold": {
"label": "Swipe AP Threshold",
"tooltip": "Minimum Attack Power required before Swipe is used in the rotation."
},
"maintain_demo_roar": {
"label": "Maintain Demo Roar",
"tooltip": "Keep Demoralizing Roar active on the primary target."
},
"maintain_faerie_fire": {
"label": "Maintain Faerie Fire",
"tooltip": "Use Faerie Fire (Feral) whenever it is not active on the target."
}
}
},
"guardian": {
Expand Down
15 changes: 10 additions & 5 deletions proto/apl.proto
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ message APLAction {

// Class or Spec-specific actions
APLActionCatOptimalRotationAction cat_optimal_rotation_action = 18;
APLActionBearOptimalRotationAction bear_optimal_rotation_action = 30;
APLActionGuardianHotwDpsRotation guardian_hotw_dps_rotation = 27;
APLActionCastWarlockAssignedCurse cast_warlock_assigned_curse = 29;

Expand Down Expand Up @@ -223,9 +224,7 @@ message APLValue {

// Class or Spec-specific values
APLValueTotemRemainingTime totem_remaining_time = 49;
APLValueCatExcessEnergy cat_excess_energy = 52;
APLValueCatNewSavageRoarDuration cat_new_savage_roar_duration = 61;
APLValueWarlockAssignedCurseIsActive warlock_assigned_curse_is_active = 59;
APLValueWarlockAssignedCurseIsActive warlock_assigned_curse_is_active = 59;
APLValueWarlockIsAssignedCurse warlock_is_assigned_curse = 129;
APLValueCurrentEclipsePhase druid_current_eclipse_phase = 70;
APLValueProtectionPaladinDamageTakenLastGlobal protection_paladin_damage_taken_last_global = 100;
Expand Down Expand Up @@ -376,6 +375,14 @@ message APLActionCatOptimalRotationAction {
bool maintain_faerie_fire = 8;
}

message APLActionBearOptimalRotationAction {
bool maintain_faerie_fire = 1;
bool maintain_demoralizing_roar = 2;
int32 maul_rage_threshold = 3;
FeralBearDruid.Rotation.SwipeUsage swipe_usage = 4;
int32 swipe_ap_threshold = 5;
}

message APLActionGuardianHotwDpsRotation {
enum Strategy {
Caster = 0;
Expand Down Expand Up @@ -751,8 +758,6 @@ message APLValueTotemRemainingTime {
ShamanTotems.TotemType totem_type = 1;
bool include_reaction_time = 2;
}
message APLValueCatExcessEnergy {}
message APLValueCatNewSavageRoarDuration {}
message APLValueWarlockAssignedCurseIsActive {
UnitReference target_unit = 1;
}
Expand Down
11 changes: 10 additions & 1 deletion proto/common.proto
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ message ProtoVersion {
// protos need to define an api_version field so that the UI code knows
// to up-convert these protos to the new format whenever api_version is
// missing (0) or lower than current_version_number.
option (current_version_number) = 11;
option (current_version_number) = 12;

// The actual field value is only used within unit tests.
int32 saved_version_number = 1;
Expand Down Expand Up @@ -511,6 +511,15 @@ message PartyBuffs {

// Mitigation buffs
TristateEffect commanding_shout = 33;

// Resistance aura/totems/aspect
bool frost_resistance_aura = 38;
bool frost_resistance_totem = 39;
bool nature_resistance_totem = 40;
bool fire_resistance_totem = 41;
bool fire_resistance_aura = 42;
bool shadow_resistance_aura = 43;
bool aspect_of_the_wild = 44;
}

// These are usually individual actions taken by other Characters.
Expand Down
18 changes: 12 additions & 6 deletions proto/druid.proto
Original file line number Diff line number Diff line change
Expand Up @@ -119,16 +119,22 @@ message FeralCatDruid {

message FeralBearDruid {
message Rotation {
bool maintain_faerie_fire = 1;
bool maintain_demoralizing_roar = 2;
double demo_time = 3;
double pulverize_time = 4;
bool prepull_stampede = 5;
bool maintain_faerie_fire = 1;
bool maintain_demoralizing_roar = 2;
int32 maul_rage_threshold = 3;

enum SwipeUsage {
SwipeUsage_Never = 0;
SwipeUsage_WithEnoughAP = 1;
SwipeUsage_Spam = 2;
}
SwipeUsage swipe_usage = 4;
int32 swipe_ap_threshold = 5;
}

message Options {
DruidOptions class_options = 1;
Class symbiosis_target = 2;
double starting_rage = 2;
}
Options options = 3;
}
Expand Down
80 changes: 51 additions & 29 deletions schemas/translation.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -5408,32 +5408,6 @@
"additionalProperties": false,
"required": ["label", "tooltip"]
},
"cat_excess_energy": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"tooltip": {
"type": "string"
}
},
"additionalProperties": false,
"required": ["label", "tooltip"]
},
"cat_new_savage_roar_duration": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"tooltip": {
"type": "string"
}
},
"additionalProperties": false,
"required": ["label", "tooltip"]
},
"warlock_assigned_curse_is_active": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -5679,8 +5653,6 @@
"sequence_is_ready",
"sequence_time_to_ready",
"totem_remaining_time",
"cat_excess_energy",
"cat_new_savage_roar_duration",
"warlock_assigned_curse_is_active",
"warlock_is_assigned_curse",
"protection_paladin_damage_taken_last_global",
Expand Down Expand Up @@ -6370,10 +6342,60 @@
},
"additionalProperties": false,
"required": ["finishing_move", "biteweave", "ripweave", "rip_min_combo_points", "bite_min_combo_points", "mangle_trick", "rake_trick", "maintain_faerie_fire"]
},
"feral_bear": {
"type": "object",
"properties": {
"maul_rage_threshold": {
"type": "object",
"properties": {"label": {"type": "string"}, "tooltip": {"type": "string"}},
"additionalProperties": false,
"required": ["label", "tooltip"]
},
"swipe_usage": {
"type": "object",
"properties": {
"label": {"type": "string"},
"tooltip": {"type": "string"},
"values": {
"type": "object",
"properties": {
"never": {"type": "string"},
"with_enough_ap": {"type": "string"},
"spam": {"type": "string"}
},
"additionalProperties": false,
"required": ["never", "with_enough_ap", "spam"]
}
},
"additionalProperties": false,
"required": ["label", "tooltip", "values"]
},
"swipe_ap_threshold": {
"type": "object",
"properties": {"label": {"type": "string"}, "tooltip": {"type": "string"}},
"additionalProperties": false,
"required": ["label", "tooltip"]
},
"maintain_demo_roar": {
"type": "object",
"properties": {"label": {"type": "string"}, "tooltip": {"type": "string"}},
"additionalProperties": false,
"required": ["label", "tooltip"]
},
"maintain_faerie_fire": {
"type": "object",
"properties": {"label": {"type": "string"}, "tooltip": {"type": "string"}},
"additionalProperties": false,
"required": ["label", "tooltip"]
}
},
"additionalProperties": false,
"required": ["maul_rage_threshold", "swipe_usage", "swipe_ap_threshold", "maintain_demo_roar", "maintain_faerie_fire"]
}
},
"additionalProperties": false,
"required": ["feral_cat"]
"required": ["feral_cat", "feral_bear"]
},
"guardian": {
"type": "object",
Expand Down
10 changes: 10 additions & 0 deletions sim/common/tbc/enchants.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,16 @@ func init() {
})
})

// Savage Guard - +10 Nature Resistance (item 22635)
core.NewEnchantEffect(2681, func(agent core.Agent) {
agent.GetCharacter().AddStat(stats.NatureResistance, 10)
})

// Ice Guard - +10 Frost Resistance (item 22636)
core.NewEnchantEffect(2682, func(agent core.Agent) {
agent.GetCharacter().AddStat(stats.FrostResistance, 10)
})

// Scopes
core.NewEnchantEffect(2523, func(agent core.Agent) {
character := agent.GetCharacter()
Expand Down
47 changes: 47 additions & 0 deletions sim/common/tbc/items_trinkets.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"time"

"github.com/wowsims/tbc/sim/core"
"github.com/wowsims/tbc/sim/core/proto"
"github.com/wowsims/tbc/sim/core/stats"
)

Expand Down Expand Up @@ -893,4 +894,50 @@ func init() {
BuffAura: aura,
})
})

// Mark of the Champion (physical): +150 AP vs Undead and Demons.
core.NewItemEffect(23206, func(agent core.Agent) {
character := agent.GetCharacter()
bonus := stats.Stats{stats.AttackPower: 150, stats.RangedAttackPower: 150}
aura := core.MakePermanent(character.RegisterAura(core.Aura{
Label: "Mark of the Champion (Physical)",
ActionID: core.ActionID{ItemID: 23206},
})).
ApplyOnGain(func(_ *core.Aura, _ *core.Simulation) {
for _, at := range character.AttackTables {
at.MobTypeBonusStats[proto.MobType_MobTypeUndead] = at.MobTypeBonusStats[proto.MobType_MobTypeUndead].Add(bonus)
at.MobTypeBonusStats[proto.MobType_MobTypeDemon] = at.MobTypeBonusStats[proto.MobType_MobTypeDemon].Add(bonus)
}
}).
ApplyOnExpire(func(_ *core.Aura, _ *core.Simulation) {
for _, at := range character.AttackTables {
at.MobTypeBonusStats[proto.MobType_MobTypeUndead] = at.MobTypeBonusStats[proto.MobType_MobTypeUndead].Subtract(bonus)
at.MobTypeBonusStats[proto.MobType_MobTypeDemon] = at.MobTypeBonusStats[proto.MobType_MobTypeDemon].Subtract(bonus)
}
})
character.ItemSwap.RegisterProc(23206, aura)
})

// Mark of the Champion (spell): +85 spell damage vs Undead and Demons.
core.NewItemEffect(23207, func(agent core.Agent) {
character := agent.GetCharacter()
bonus := stats.Stats{stats.SpellDamage: 85}
aura := core.MakePermanent(character.RegisterAura(core.Aura{
Label: "Mark of the Champion (Spell)",
ActionID: core.ActionID{ItemID: 23207},
})).
ApplyOnGain(func(_ *core.Aura, _ *core.Simulation) {
for _, at := range character.AttackTables {
at.MobTypeBonusStats[proto.MobType_MobTypeUndead] = at.MobTypeBonusStats[proto.MobType_MobTypeUndead].Add(bonus)
at.MobTypeBonusStats[proto.MobType_MobTypeDemon] = at.MobTypeBonusStats[proto.MobType_MobTypeDemon].Add(bonus)
}
}).
ApplyOnExpire(func(_ *core.Aura, _ *core.Simulation) {
for _, at := range character.AttackTables {
at.MobTypeBonusStats[proto.MobType_MobTypeUndead] = at.MobTypeBonusStats[proto.MobType_MobTypeUndead].Subtract(bonus)
at.MobTypeBonusStats[proto.MobType_MobTypeDemon] = at.MobTypeBonusStats[proto.MobType_MobTypeDemon].Subtract(bonus)
}
})
character.ItemSwap.RegisterProc(23207, aura)
})
}
Loading
Loading