Skip to content

[Feature] Allow world_preset.toml seed to be omitted for random new-world seeds #65

@yunnwi

Description

@yunnwi

Problem / Motivation

Experience-authored world_preset.toml currently appears to require or encourage a fixed seed.

That is useful for deterministic examples, repros, tests, and curated modpacks, but it is not ideal for normal player-facing world creation.

In most sandbox games, creating a new world without manually entering a seed gives a random seed. If the user wants determinism, they can explicitly provide a seed.

For Freven, a better long-term contract would be:

  • seed present: use that deterministic seed
  • seed omitted: generate a random seed when creating world_bootstrap.toml
  • persisted world_bootstrap.toml then stores the resolved seed forever

This would let examples and games choose between reproducible worlds and normal random new-world UX.

Proposed solution

Allow the seed field in world_preset.toml to be optional.

Example deterministic preset:
[world_preset]
world_id = "example_world"
seed = 1234
primary_dimension_id = "overworld"

Example random-new-world preset:
[world_preset]
world_id = "example_world"
primary_dimension_id = "overworld"

Expected behavior when seed is omitted:

  • on first world creation, DevKit/runtime generates a random seed
  • the generated seed is written into world_bootstrap.toml
  • future launches of the same world reuse the persisted bootstrap seed
  • logs clearly show the resolved seed
  • deterministic behavior remains available when seed is explicitly specified

This keeps authored presets reusable while avoiding fixed-seed behavior for normal player-facing new worlds.

Alternatives considered

  1. Always require seed in world_preset.toml
    Good for reproducibility, but poor default UX for player-created worlds.

  2. Make mod authors/scripts rewrite seed before launch
    Works for development, but it is not a platform-level solution and does not scale to normal users or launchers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions