Keep the setting as a live document, not baked into the engine or prompts
When building an LLM-driven simulation game, resist letting a genre leak into the engine OR the prompts. Keep ALL setting as a single persistent World Bible (tone, cosmology/power-system, naming style, factions, resources, current-era, canon, name-pools) that the GM authors from conversation, and prepend its rendered preamble to EVERY generative prompt (game master, narrator, era-chronicler, NPC minds) so invented content stays consistent. Two things this unlocks: (1) session zero — an empty bible yields a preamble that tells the GM to discover the world with the player and write the bible before leaning on specifics; (2) genre DRIFT — an amend-canon(note, new_era) call lets the world evolve mid-play (sci-fi salvage -> ancient relics -> mecha-cultivation) and everything downstream follows the new current-era. Concrete de-hardcoding that mattered: replace hardcoded name lists with generators that read the bible pools; make domain nouns generic (a cultivation "realm" becomes an opaque integer power-tier the setting names, read as e.a(tier, e.a(realm,0)) for back-compat); keep a preset that simply SETS a bible so existing content/tests do not regress. Grep test for lock-in: your core mechanics files should have ~0 references to any genre term.