{"id":"hurreman/roblox-progression","name":"roblox-progression","scope":"hurreman","platform":"roblox","description":"Progression mechanics for hurreman's Roblox games: cost and reward curves, a multiplier stack, requirements, upgrades, gauntlet gates, rebirth with declared resets, objectives, an idempotent ledger over a roblox-data wallet, an authoritative stat ticker and binding to roblox-world-builder maps","version":"0.1.2","latest":"0.1.2","versions":["0.1.0","0.1.1","0.1.2"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"de17b88a38220dca8914137c50c43143b1af43a478ef9203f5129a4be9b495db","likes":0,"downloads":0,"install":"forest install hurreman/roblox-progression","url":"https://forest.dev/p/roblox/hurreman/roblox-progression","files":"https://api.forest.dev/ai/package/roblox/hurreman/roblox-progression/files","readme":"# roblox-progression\n\nProgression mechanics for hurreman's Roblox games:\n\n- stats that grow, and gates and requirements that need them;\n- upgrades and multipliers;\n- rebirth with declared resets;\n- carry and deposit;\n- objectives;\n- an idempotent ledger;\n- binding to roblox-world-builder maps;\n- an offline balance sim.\n\nThe game writes one config (`shared/Config/Progression`), builds the runtime objects in its own\nservice with adapters, and keeps its own save, remotes and UI.\n\n```toml\n# wally.toml\n[dependencies]\nProgression = \"hurreman/roblox-progression@0.1.2\"\n```\n\n```lua\nlocal Progression = require(ReplicatedStorage.Packages.Progression) -- modules load on first access\nlocal problems = Progression.Config.validate(Config)\n```\n\n## Modules\n\n| Module | Where | What |\n|---|---|---|\n| `Curves` | any | constant / linear / exponential / polynomial / steps / piecewise, with round and cap; `sum`, `maxAffordable` |\n| `State` | any | the `Progress` save section, the view rules read, counter refs, reward amounts |\n| `Requirements` | any | conditions as data with typed blockers, plus custom checks (`Register`) |\n| `Modifiers` | any | the multiplier stack `(base + Σadd) × (1 + Σbonus) × Πmul`, scoped to a stat or source |\n| `Sources` | any | passive, zone and action gains, and their rates |\n| `Upgrades` | any | leveled and tiered prices and effects; quotes against the level the buyer saw |\n| `Gates` | any | gauntlet thresholds, in-order passing, first-time gate and milestone rewards, gate pad pay |\n| `Rebirth` | any | eligibility, cost, reward and a reset plan from declared `reset` / `keep` |\n| `Objectives` | any | the next goal with `{need}` / `{have}` and progress |\n| `Carry` | any | retrieval: access by area, capacity, drops, haul worth |\n| `Config` | any | validation of the whole config with paths; wallet currencies |\n| `Ledger` | server | all-or-nothing grants over a roblox-data wallet, once per op id (ids saved with the grant) |\n| `Stats` | server | the authoritative ticker, zone sources from the server's position check, actions capped per second |\n| `Shop` | server | upgrade purchases as ledger ops |\n| `Gauntlet` | server | gate runs on a bound lane (GateBarrier fields or Breakable walls), put-back positions, first-time rewards, gate pads (free and paid, each ending the run), the finish per run token |\n| `Prestige` | server | rebirth as one ledger op |\n| `Carrier` | server | hauls: picks, hits, deposits per haul token, leave policy |\n| `Binder` | server, client | binds by `WB_World` / `WB_Zone` / `WB_Role` / `WB_Id` keys (or a tag), never names; volumes and world-aligned bounds |\n| `Sim` | offline | a persona playing a config; game-tools Recorder-shaped results |\n\nEvery module's header has its full API. The `roblox-progression-builder` skill has the guide:\nmechanics, archetypes, binding, authority and testing.\n\n## Tests\n\n```bash\nlune run tests/run\n```\n\nThe specs run on luau-spec. The server specs use the real roblox-data `Currency` and `Profiles`\nwith its `FakeProfileStore`: from DevPackages, or else copied from `../roblox-data` into\n`build/`. They cover:\n\n- authoritative gains;\n- costs and grants;\n- requirements;\n- idempotent grants;\n- rebirth resets;\n- replayed requests;\n- crash and rejoin;\n- the sim;\n- binding to world-builder-shaped maps, including a rebuilt zone.\n","readmeTruncated":false}