Booster-Phase raus, Karten auf die Hand
Die Boosterwahl kostete jede Runde eine eigene Phase mit 30 Sekunden Frist. Zwischen Wurf und Ansage lag damit eine Wartezeit, die den Ablauf zerriss. Jetzt gibt es Karten statt einer Phase: * Wer einen Wuerfel abgibt, zieht eine Karte. Das ist der einzige Nachschub, also bekommt der etwas zurueck, der gerade hinten liegt. * Gespielt wird jederzeit waehrend der Ansagen, nicht nur am eigenen Zug. * Hoechstens drei Karten auf der Hand. * Die Hand liegt offen unten links, ein Klick spielt. Nur Feinschliff und Gluecksgriff fragen noch nach dem Wuerfel. Der Katalog ist angepasst, weil jede Karte jetzt sofort wirken muss: neu sind Erhoehen (Ansage +1), Widerruf (hebt Nebel, Stoerfeuer und Maulkorb auf dir auf) und Nachschub (ein Wuerfel dazu). Zwilling und Ruetteln sind raus - beide brauchten den festen Zeitpunkt vor dem Wurf. Bots spielen ihre Karten am eigenen Zug, bei voller Hand immer. Zwei Karten gleichzeitig wuerden sich beim Wuerfeln in die Quere kommen, deshalb wird immer nur eine aufgeloest. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,15 @@
|
||||
extends Node
|
||||
## Katalog aller Booster. Jede Runde bekommt jeder Spieler 3 davon
|
||||
## zufällig angeboten und wählt genau einen aus.
|
||||
## Katalog aller Karten.
|
||||
##
|
||||
## Karten gibt es nicht mehr rundenweise zur Auswahl. Wer einen Würfel
|
||||
## verliert, zieht eine. Gespielt wird jederzeit während der Ansagen - deshalb
|
||||
## wirkt jede Karte sofort und braucht keine eigene Phase mehr.
|
||||
|
||||
enum Kind { BUFF, DEBUFF }
|
||||
|
||||
## Mehr als das passt nicht auf die Hand; sonst hortet man bis zum Schluss.
|
||||
const HANDLIMIT := 3
|
||||
|
||||
const ALL := [
|
||||
{
|
||||
"id": "reroll_all", "kind": Kind.BUFF, "target": false,
|
||||
@@ -21,9 +27,14 @@ const ALL := [
|
||||
"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": "gain_die", "kind": Kind.BUFF, "target": false,
|
||||
"name": "Nachschub",
|
||||
"desc": "Du bekommst einen Würfel dazu.",
|
||||
},
|
||||
{
|
||||
"id": "cancel", "kind": Kind.BUFF, "target": false,
|
||||
"name": "Widerruf",
|
||||
"desc": "Hebt Nebel, Störfeuer und Maulkorb auf, die auf dir liegen.",
|
||||
},
|
||||
{
|
||||
"id": "peek", "kind": Kind.BUFF, "target": false,
|
||||
@@ -31,9 +42,9 @@ const ALL := [
|
||||
"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": "bid_up", "kind": Kind.DEBUFF, "target": false,
|
||||
"name": "Erhöhen",
|
||||
"desc": "Die laufende Ansage steigt um 1.",
|
||||
},
|
||||
{
|
||||
"id": "enemy_lower", "kind": Kind.DEBUFF, "target": false,
|
||||
@@ -53,7 +64,7 @@ const ALL := [
|
||||
{
|
||||
"id": "gag", "kind": Kind.DEBUFF, "target": false,
|
||||
"name": "Maulkorb",
|
||||
"desc": "Der nächste Spieler muss bieten und darf nicht anfechten.",
|
||||
"desc": "Wer gerade dran ist, muss bieten und darf nicht anfechten.",
|
||||
},
|
||||
]
|
||||
|
||||
@@ -66,17 +77,9 @@ func get_booster(id: String) -> Dictionary:
|
||||
|
||||
|
||||
func needs_target(id: String) -> bool:
|
||||
var b := get_booster(id)
|
||||
return b.get("target", false)
|
||||
return get_booster(id).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
|
||||
## Eine zufällige Karte, 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)
|
||||
|
||||
Reference in New Issue
Block a user