8000 Headless balance simulation: seeded trials over a scenario file in enzan-sim · Issue #11 · ynishi/enzan · GitHub
[go: up one dir, main page]

Skip to content

Headless balance simulation: seeded trials over a scenario file in enzan-sim #11

Open

Description

@ynishi

Goal

Measure balance without a screen: run many seeded trials of the core's mechanics natively and report the distributions, so a designer can see what the numbers do before anyone plays.

Scope

enzan-sim, a binary over enzan-core:

  • Input: a scenario file (JSON) describing the data to simulate — rarities, an affix pool, a drop table, a progression rule — plus the number of trials and the base seed. Reading and parsing the file live in the binary; the core receives checked types only.
  • Trials: trial i uses Rng::stream(base_seed, i), so any single trial can be replayed on its own and the run does not depend on how trials are ordered or split.
  • Measurements (first set):
    • loot: how often each rarity and each affix appears, the distribution of the affix count, and of each affix's value (min / mean / percentiles);
    • progression: the level reached after a given amount of experience, and the experience needed to reach given levels.
  • Output: a summary on stdout, as JSON (--json) or a readable table.

Rules

Rule Owner
the same scenario and seed give the same report, natively and wherever the binary runs the binary's run loop (uses only the core's deterministic draws)
trial i is reproducible on its own from (base_seed, i) the trial
the binary holds no mechanics: every number comes from a core function the binary's entry point

Done when

  • A sample scenario under examples/ runs and prints a report.
  • Tests cover: the report is the same for the same seed, a trial replays alone, and a scenario with an error (e.g. a duplicate affix id) is reported with the core's error.
  • just check is green.

Out of scope

The balance lab in the browser, the TypeScript binding, a shared data crate for other front ends, plotting.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementbehaviour that does not exist yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0