# mute.ludic - the cards a player has said they know, kept BY KEY: a card added, removed or moved in # the registry leaves every other mute where it was, and a key this build does not know is carried export function hints_muted(hints_st: HintsState, id: int) -> bool { if id < 0 or id >= HINT_COUNT { return false } return hints_st.hn_mute[id] } export function hints_mute(hints_st: mut HintsState, id: int, on: bool) -> void { if id < 0 or id >= HINT_COUNT { return } hints_st.hn_mute[id] = on } export function hints_mute_count(hints_st: HintsState) -> int { var n = 0 for i in 0 .. HINT_COUNT { if hints_st.hn_mute[i] { n += 1 } } return n } # every muted card given back, from the next pass export function hints_unmute_all(hints_st: mut HintsState) -> void { for i in 0 .. HINT_COUNT { hints_st.hn_mute[i] = false } hints_st.hn_foreign = new []string hints_st.hn_t = 0.0 hn_fact(hints_st, HINTS_F_UNMUTED, -1) } # the mutes as a list of keys, for wherever the game keeps the player's own choices export function hints_mutes_save(hints_st: HintsState) -> Val { let l = Value.list() for i in 0 .. HINT_COUNT { if hints_st.hn_mute[i] { Value.add(l, Value.str(Hints[i].key)) } } for i in 0 .. len(hints_st.hn_foreign) { Value.add(l, Value.str(hints_st.hn_foreign[i])) } return l } # a list of keys read back; anything that is not a list is no mutes export function hints_mutes_load(hints_st: mut HintsState, l: Val) -> void { hints_st.hn_mute = hn_mutes() if l == null or Value.kind(l) != 5 { return } for i in 0 .. Value.count(l) { let e = Value.at(l, i) if Value.kind(e) != 4 { continue } let k = Value.as_str(e) let id = hints_find(k) if id >= 0 { hints_st.hn_mute[id] = true } else { push(hints_st.hn_foreign, intern(k)) } # the tree is let go } } function hn_mutes() -> []bool { let out = new []bool for i in 0 .. HINT_COUNT { push(out, false) } return out }