extends Node ## Katalog aller Booster. Jede Runde bekommt jeder Spieler 3 davon ## zufällig angeboten und wählt genau einen aus. enum Kind { BUFF, DEBUFF } const ALL := [ { "id": "reroll_all", "kind": Kind.BUFF, "target": false, "name": "Neuwurf", "desc": "Wirf alle deine Würfel noch einmal neu.", }, { "id": "reroll_one", "kind": Kind.BUFF, "target": true, "name": "Feinschliff", "desc": "Wirf einen selbst gewählten Würfel neu.", }, { "id": "set_six", "kind": Kind.BUFF, "target": true, "name": "Glücksgriff", "desc": "Ein gewählter Würfel wird zur 6.", }, { "id": "twin", "kind": Kind.BUFF, "target": true, "name": "Zwilling", "desc": "Ein anderer deiner Würfel nimmt den Wert des gewählten an.", }, { "id": "peek", "kind": Kind.BUFF, "target": false, "name": "Spähen", "desc": "Von jedem Gegner wird dir ein zufälliger Würfel aufgedeckt.", }, { "id": "enemy_reroll", "kind": Kind.DEBUFF, "target": false, "name": "Rütteln", "desc": "Jeder Gegner muss einen zufälligen Würfel neu werfen.", }, { "id": "enemy_lower", "kind": Kind.DEBUFF, "target": false, "name": "Absenken", "desc": "Bei jedem Gegner sinkt ein zufälliger Würfel um 1 (1 bleibt 1).", }, { "id": "fog", "kind": Kind.DEBUFF, "target": false, "name": "Nebel", "desc": "Jeder Gegner verliert die Sicht auf einen seiner eigenen Würfel.", }, { "id": "raise_min", "kind": Kind.DEBUFF, "target": false, "name": "Störfeuer", "desc": "Alle Gegner müssen diese Runde um mindestens 2 erhöhen.", }, { "id": "gag", "kind": Kind.DEBUFF, "target": false, "name": "Maulkorb", "desc": "Der nächste Spieler muss bieten und darf nicht anfechten.", }, ] func get_booster(id: String) -> Dictionary: for b in ALL: if b.id == id: return b return {} func needs_target(id: String) -> bool: var b := get_booster(id) return b.get("target", false) func draw_offer(rng: RandomNumberGenerator, amount: int = 3) -> Array: var pool := ALL.duplicate() var out: Array = [] for i in amount: if pool.is_empty(): break var k := rng.randi_range(0, pool.size() - 1) out.append(pool[k].id) pool.remove_at(k) return out