83 lines
2.1 KiB
GDScript
83 lines
2.1 KiB
GDScript
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
|