feat(packages): ludic.settings - a settings store as data: typed reads and writes by id, clamping, rescue values, per-key persistence, a fact per change

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-25 05:51:04 +03:00
parent 3514d46954
commit 4318adc98c
9 changed files with 338 additions and 0 deletions

View file

@ -0,0 +1,35 @@
# ludic.settings/rules.ludic - the whole store at once: every setting to its default, every one
# held to its range, and the rescue set. None of these is news: whoever calls them applies it all
export function settings_reset_all() -> void {
sg_init()
for i in 0 .. len(sg_defs) {
sg_num[i] = sg_defs[i].num
sg_text[i] = sg_defs[i].text
}
}
# a hand-edited file, or one from a build with more choices, never hands the game a value it has
# no case for
export function settings_clamp_all() -> void {
sg_init()
for i in 0 .. len(sg_defs) { sg_num[i] = settings_held(i, sg_num[i]) }
}
# the values every machine can run: each setting marked `rescue` back to its default, and the
# rest (keys, language, volume) left the player's
export function settings_rescue() -> void {
sg_init()
for i in 0 .. len(sg_defs) {
if sg_defs[i].rescue {
sg_num[i] = sg_defs[i].num
sg_text[i] = sg_defs[i].text
}
}
}
# whether a setting is on the rescue list at its safe value
export function settings_is_safe(id: int) -> bool {
let d = sg_defs[id]
if not d.rescue { return true }
return sg_num[id] == d.num and sg_text[id] == d.text
}