first commit
This commit is contained in:
82
scripts/boosters.gd
Normal file
82
scripts/boosters.gd
Normal file
@@ -0,0 +1,82 @@
|
||||
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
|
||||
Reference in New Issue
Block a user