extends Node ## Katalog aller Münzen. ## ## Münzen gibt es nicht rundenweise zur Auswahl. Wer einen Würfel verliert, ## bekommt eine. Gespielt wird jederzeit während der Ansagen - deshalb wirkt ## jede Münze sofort und braucht keine eigene Phase mehr. ## ## Beim Ausspielen wird die Münze geworfen. Wappen oben heißt verstärkt. Die ## Grundwirkung kommt immer, der Wurf legt nur eine Schippe drauf. Deshalb ist ## kein Zug verschenkt, und die Entscheidung bleibt beim Spieler. enum Kind { BUFF, DEBUFF } ## Mehr als das passt nicht auf die Hand; sonst hortet man bis zum Schluss. const HANDLIMIT := 3 ## Eine Münze hat zwei Seiten, also die Hälfte. const WAPPEN_CHANCE := 0.5 ## Die Würfelzahl wird bewusst nie verstärkt. Sie ist die Kernressource - ## ein Würfel mehr aus Glück würde die Partie kippen. const ALL := [ { "id": "reroll_all", "kind": Kind.BUFF, "target": false, "name": "Neuwurf", "desc": "Wirf alle deine Würfel noch einmal neu.", "stark": "Danach wird einer davon zur 6.", }, { "id": "reroll_one", "kind": Kind.BUFF, "target": true, "name": "Feinschliff", "desc": "Wirf einen selbst gewählten Würfel neu.", "stark": "Ein zweiter, zufälliger Würfel kommt mit.", }, { "id": "set_six", "kind": Kind.BUFF, "target": true, "name": "Glücksgriff", "desc": "Ein gewählter Würfel wird zur 6.", "stark": "Ein zweiter, zufälliger Würfel wird auch zur 6.", }, { "id": "gain_die", "kind": Kind.BUFF, "target": false, "name": "Nachschub", "desc": "Du bekommst einen Würfel dazu.", "stark": "Der neue Würfel zeigt sofort eine 6.", }, { "id": "cancel", "kind": Kind.BUFF, "target": false, "name": "Widerruf", "desc": "Hebt Nebel, Störfeuer und Maulkorb auf, die auf dir liegen.", "stark": "Die Münze bleibt dir erhalten.", "behalten": true, }, { "id": "peek", "kind": Kind.BUFF, "target": false, "name": "Spähen", "desc": "Von jedem Gegner wird dir ein zufälliger Würfel aufgedeckt.", "stark": "Es sind zwei Würfel je Gegner.", }, { "id": "bid_up", "kind": Kind.DEBUFF, "target": false, "name": "Erhöhen", "desc": "Die laufende Ansage steigt um 1.", "stark": "Sie steigt um 2.", }, { "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).", "stark": "Er sinkt um 2.", }, { "id": "fog", "kind": Kind.DEBUFF, "target": false, "name": "Nebel", "desc": "Jeder Gegner verliert die Sicht auf einen seiner eigenen Würfel.", "stark": "Es sind zwei 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.", "stark": "Es müssen mindestens 3 sein.", }, { "id": "gag", "kind": Kind.DEBUFF, "target": false, "name": "Maulkorb", "desc": "Wer gerade dran ist, muss bieten und darf nicht anfechten.", "stark": "Alle Gegner müssen bieten.", }, ] func get_booster(id: String) -> Dictionary: for b in ALL: if b.id == id: return b return {} func needs_target(id: String) -> bool: return get_booster(id).get("target", false) ## Münzen, die bei Wappen auf der Hand bleiben, statt in die Mitte zu wandern. func keeps_on_wappen(id: String) -> bool: return get_booster(id).get("behalten", false) ## Eine zufällige Münze, für den, der gerade einen Würfel verloren hat. func zieh(rng: RandomNumberGenerator) -> String: return String(ALL[rng.randi_range(0, ALL.size() - 1)].id)