Skip to content

Latest commit

 

History

132 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forever Sims

DPS and tank simulators for every class/spec in World of Warcraft: Forever — live at foreversims.com. Every simulation runs entirely in the visitor's browser (a Rust engine compiled to WebAssembly); there's no server-side compute in production.

Join the community on Discord for discussion, bug reports, and sourcing corrections.

This is an unofficial fan project. It is not affiliated with, endorsed by, or associated with Blizzard Entertainment. World of Warcraft and World of Warcraft: Forever are trademarks or registered trademarks of Blizzard Entertainment, Inc.

What this is

See the v0.22.0 accuracy release notes for the latest audit fixes, validation coverage and remaining model limitations.

World of Warcraft: Forever is a not-yet-released Classic-era ruleset with its own talent changes, new race/class combinations, and reworked abilities layered on top of Classic Anniversary mechanics. Build-pinned Wago client tables take precedence for verified spell values and talent curves. Wowhead Forever provides roster and calculator information; derived data sites provide discovery and freshness signals, not independent confirmation of the same client values. WoWSims Classic supplies baseline combat mechanics where Forever behavior has not been established. Client numbers do not prove server-side proc rules or spell availability. See the Wago verification report for exact coverage and remaining assumptions. FOREVER_VS_CLASSIC.md is a standing summary of every sourced Forever-vs-Classic mechanic change, organized by class.

23 specs are modeled: every class/spec except the three healer specializations, split across two engines that share no code:

  • The shared engine (forever/engine.py/forever/engine_data.py, 21 specs) — an event-driven simulator (swing timers, cast times, GCD, DoTs, combo points, resource ticks, the full Classic attack table, procs, racials, tank incoming-damage modeling) covering every non-Paladin spec.
  • The Paladin engine (forever/sim.py/forever/gear_data.py, Protection and Retribution) — a separate, independently maintained model built first and kept apart because Paladin's seal/Judgement mechanics don't map onto the shared engine's ability table.

Both engines are written once in Python (the reference implementation, and what the test suite checks against) and ported by hand to Rust (engine-rs/), compiled to WebAssembly, and run in a pool of Web Workers in the browser. tests/test_parity.py fails if the two ever disagree by more than floating-point noise, across all 23 specs — this is checked before every deploy.

Features

  • Per-spec simulators (all-specs.html for the 21 shared-engine specs, paladin.html for the two Paladin specs) with full gear/talent/buff/consumable control, a searchable item picker, and a results breakdown that reconciles ability-by-ability.
  • Multi-target simulation (1-5 targets) — abilities that actually cleave, AoE-nuke, or multi-dot scale with the chosen target count; most single-target-only rotations don't.
  • Two comparison pages (dps-comparison.html, tank-comparison.html), each covering every spec/race combination at every target count, generated by a parallelized benchmark script.
  • A "Changes" panel on the home page summarizing sourced Forever-vs-Classic mechanic changes by class, and an "About this model" card on every spec page explaining how that spec's DPS and TPS are actually calculated.
  • WoWSims Exporter import (paste an addon export to fill in race/gear/talents) on the Paladin page.
  • A feedback form wired to a small Cloudflare Worker (D1 storage, optional Discord/GitHub-issue forwarding).

Repository layout

forever/                      the Python package
  engine.py, engine_data.py     shared 21-spec engine + sourced data tables
  sim.py, gear_data.py          Paladin engine + gear/racial handling
  all_specs.py                  public API surface (item catalog, spec listing, simulate_spec)
data/                          sourced JSON data tables (items, talents, gear, benchmarks, ...)
server.py                      local dev server + JSON API (not used in production)
engine-rs/                     Rust port, compiled to WebAssembly (engine-rs/src/, data/)
web/                           the deployed site: HTML/CSS/JS, exported data, the built engine
tools/                         data export, engine build, version stamping, benchmark generation
tests/                         Python test suite (mechanics, parity, gear, server)
FOREVER_VS_CLASSIC.md          standing reference: every sourced Forever-vs-Classic change
CHANGELOG.md                   dated log of fixes and findings as the project developed
HOSTING.md                     how the production deploy works, and how to deploy your own

Running locally

Requires Python 3.10+ (no third-party packages) and, only if you're changing the Rust engine, a Rust toolchain plus wasm-bindgen-cli and Node (for tools/stamp_version.js).

python server.py            # serves the site locally at http://127.0.0.1:8765

The UI itself never calls the server's API in production — it loads web/data/*.json and runs the WebAssembly engine client-side. server.py exists for local development, the test suite, and benchmark generation.

Making a change

  1. Edit the Python source (forever/engine.py/forever/engine_data.py or forever/sim.py/forever/gear_data.py/data/data.json).
  2. python -m unittest discover — the test suite.
  3. If the change affects simulation output, port it to the matching Rust file in engine-rs/src/.
  4. bash tools/build_engine.sh — re-exports data, rebuilds the Rust engine (native + WASM), and runs tools/parity_check.py (must show 0.000% diff across all 23 specs).
  5. If default rotations, talents, or gear changed, regenerate benchmarks: python tools/generate_benchmarks.py.
  6. See HOSTING.md for deploying.

Data sourcing

Every ability, talent, and racial value in the data tables is either sourced directly (cited inline, usually with a Wowhead URL) or explicitly marked "provisional" with an explanation of what's assumed and why — surfaced in the UI's result configuration, not just in comments. See THIRD_PARTY_NOTICES.md for the WoWSims Classic license this project's Classic-era baseline values are adapted from.

Contributing

Bug reports, sourcing corrections, and pull requests are welcome — see CONTRIBUTING.md for the workflow and CODE_OF_CONDUCT.md for community expectations.

License

MIT — see LICENSE.

About

Forever Sims: WoW Forever DPS/tank simulator, runs in the browser (Rust/WASM)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages