Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
cc7667d
Add reactive Anti-Magic Shell and real Malkorok (AMS) encounter
darkmaster2133 Jul 27, 2026
10c58f9
Update DK Frost/Unholy golden test results for P5 preset changes
darkmaster2133 Jul 27, 2026
a6ecf66
Fix Malkorok encounter per review: move reactive AMS to APL, correct …
darkmaster2133 Jul 30, 2026
7dc7c69
Add dedicated Malkorok reactive-AMS presets for Frost/Unholy DK
darkmaster2133 Jul 30, 2026
78ff346
Fix native Windows dev server setup
darkmaster2133 Jul 30, 2026
bbd551a
Trim Malkorok AI comments per review, ignore throwaway BiS tools
darkmaster2133 Jul 30, 2026
3f29d2f
Update .gitignore to remove unused entries
darkmaster2133 Jul 30, 2026
c3b2770
Fix Malkorok reactive-AMS presets and encounter data per review
darkmaster2133 Jul 31, 2026
4d92ce2
Fix Malkorok reactive-AMS presets and encounter data per review
darkmaster2133 Jul 31, 2026
3f41767
Generate per-spec index.html before starting the dev server
darkmaster2133 Aug 1, 2026
5991fb3
Add boss_spell_is_known APL condition; consolidate Malkorok DK presets
darkmaster2133 Aug 1, 2026
d0fd460
Merge branch 'master' of https://github.com/darkmaster2133/mop--malko…
darkmaster2133 Aug 1, 2026
73d6cd9
Add boss_spell_known to translation schema
darkmaster2133 Aug 1, 2026
ddfc79e
Simplify Windows dev binary naming per review
darkmaster2133 Aug 2, 2026
cb153e5
Merge upstream/master into malkorok-ams
darkmaster2133 Aug 2, 2026
6859340
Fix Glyph of Regenerative Magic CD reduction not refreshing minReady …
darkmaster2133 Aug 5, 2026
08de19b
Fix AMS autocast regression from Malkorok bossSpellIsKnown check
darkmaster2133 Aug 5, 2026
b576515
Merge upstream/master into malkorok-ams
darkmaster2133 Aug 5, 2026
e4f59e5
Simplify clean target to use wowsimmop$(BIN_EXT) instead of separate …
darkmaster2133 Aug 5, 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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ package.json.tmp
/mop/
*.code-workspace
wowsimmop
wowsimmop.exe
Comment thread
hillerstorm marked this conversation as resolved.
Outdated

# old result file
TestAPL.results
Expand Down
13 changes: 1 addition & 12 deletions assets/database/db.json

Large diffs are not rendered by default.

21 changes: 16 additions & 5 deletions makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
OUT_DIR := dist/mop
# On native Windows, air (and cmd.exe generally) can't launch a PE binary that's missing its
# .exe extension -- it falls back to the "Select an app to open" file-association prompt instead
# of just running it. Cross-compiled release builds already name their output
# wowsimmop-windows.exe explicitly; this only affects the local dev build, which is otherwise
# platform-agnostic.
ifeq ($(OS),Windows_NT)
BIN_EXT := .exe
else
BIN_EXT :=
endif
TS_CORE_SRC := $(shell find ui/core -name '*.ts' -type f)
ASSETS_INPUT := $(shell find assets/ -type f)
ASSETS := $(patsubst assets/%,$(OUT_DIR)/assets/%,$(ASSETS_INPUT))
Expand Down Expand Up @@ -74,6 +84,7 @@ clean:
rm -rf ui/core/proto/*.ts \
sim/core/proto/*.pb.go \
wowsimmop \
wowsimmop.exe \
Comment thread
hillerstorm marked this conversation as resolved.
Outdated
wowsimmop-windows.exe \
wowsimmop-amd64-darwin \
wowsimmop-arm64-darwin \
Expand Down Expand Up @@ -175,7 +186,7 @@ wowsimmop: binary_dist devserver
.PHONY: devserver
devserver: sim/core/proto/api.pb.go sim/web/main.go binary_dist/dist.go
@echo "Starting server compile now..."
@if go build -o wowsimmop ./sim/web/main.go ; then \
@if go build -o wowsimmop$(BIN_EXT) ./sim/web/main.go ; then \
printf "\033[1;32mBuild Completed Successfully\033[0m\n"; \
else \
printf "\033[1;31mBUILD FAILED\033[0m\n"; \
Expand All @@ -194,9 +205,9 @@ endif
rundevserver: air devserver
ifeq ($(WATCH), 1)
npx tsx vite.build-workers.mts & npx vite build -m development --watch &
ulimit -n 10240 && air -tmp_dir "/tmp" -build.include_ext "go,proto" -build.args_bin "--usefs=true --launch=false" -build.bin "./wowsimmop" -build.cmd "make devserver" -build.exclude_dir "assets,dist,node_modules,ui,tools"
ulimit -n 10240 && air -tmp_dir "/tmp" -build.include_ext "go,proto" -build.args_bin "--usefs=true --launch=false" -build.bin "./wowsimmop$(BIN_EXT)" -build.cmd "make devserver" -build.exclude_dir "assets,dist,node_modules,ui,tools"
else
./wowsimmop --usefs=true --launch=false --host=":3333"
./wowsimmop$(BIN_EXT) --usefs=true --launch=false --host=":3333"
endif

wowsimmop-windows.exe: wowsimmop
Expand Down Expand Up @@ -304,9 +315,9 @@ endif
devmode: air devserver
ifeq ($(WATCH), 1)
npx tsx vite.build-workers.mts & npx vite serve --host &
air -tmp_dir "/tmp" -build.include_ext "go,proto" -build.args_bin "--usefs=true --launch=false --wasm=false" -build.bin "./wowsimmop" -build.cmd "make devserver" -build.exclude_dir "assets,dist,node_modules,ui,tools"
air -tmp_dir "/tmp" -build.include_ext "go,proto" -build.args_bin "--usefs=true --launch=false --wasm=false" -build.bin "./wowsimmop$(BIN_EXT)" -build.cmd "make devserver" -build.exclude_dir "assets,dist,node_modules,ui,tools"
else
./wowsimmop --usefs=true --launch=false --host=":3333"
./wowsimmop$(BIN_EXT) --usefs=true --launch=false --host=":3333"
endif

webworkers:
Expand Down
24 changes: 19 additions & 5 deletions sim/death_knight/anti_magic_shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,16 +143,30 @@ func (dk *DeathKnight) registerAntiMagicShell() {
},
})

// When the user models AMS damage intake, autocast the shell as a low-priority DPS
// cooldown once Runic Power is nearly empty, so the RP from the absorbed magic damage
// tops the bar back up without overcapping. Registered only when intake is configured,
// so the shell stays out of the rotation entirely when the feature is disabled. It is
// cast through the autocastOtherCooldowns action present in every DPS preset.
// Autocast the shell as a low-priority DPS cooldown, cast through the
// autocastOtherCooldowns action present in every DPS preset. Only registered when the user
// has opted into damage-intake modeling (AvgAMSHit > 0): core.AddMajorCooldown has real side
// effects beyond just enabling ShouldActivate (it unconditionally ORs SpellFlagMCD onto the
// spell, sim/core/major_cooldown.go), which measurably changed Blood's golden-output tests
// even with ShouldActivate always returning false -- so this must stay a real conditional
// registration, not "always register but never activate."
//
// Reactive casting against a specific boss's real abilities (e.g. Malkorok) isn't handled
// here -- write it directly into the APL instead, using the existing "Boss Spell Is
// Casting" / "Boss Spell Time to Ready" condition nodes against that boss's SpellFlagAPL
// spells as a manual "Cast Spell" action (see ui/death_knight/blood/apls/iron_juggernaut.apl.json
// and the equivalent Frost/Unholy default rotations for the pattern). A manual "Cast Spell"
// action's APLActionCastSpell.IsReady never looks at ShouldActivate, so a user-authored
// reactive rule like that always takes priority over this flat heuristic.
if dk.Inputs.AvgAMSHit > 0 {
Comment thread
hillerstorm marked this conversation as resolved.
dk.AddMajorCooldown(core.MajorCooldown{
Spell: antiMagicShellSpell,
Type: core.CooldownTypeDPS,
Priority: core.CooldownPriorityLow,

ShouldActivate: func(sim *core.Simulation, character *core.Character) bool {
Comment thread
hillerstorm marked this conversation as resolved.
Outdated
return dk.Inputs.AvgAMSHit > 0
},
})
}
}
Expand Down
Loading
Loading