This commit is contained in:
team3
2026-09-16 12:09:33 +02:00
parent 9410d18ea5
commit 8a188c5d5c
29 changed files with 2016 additions and 564 deletions

View File

@@ -28,6 +28,21 @@ const ROLE_STATS := {
Role.HEILER: {"hp": 520.0, "atk": 38.0, "armor": 0.22, "aspd": 0.70, "range": 3, "mana": 90.0},
}
# Das Hauptelement prägt die Werte: Feuer schlägt hart, Erde hält aus, Wind ist
# schnell, Blitz trifft kritisch, Wasser zaubert öfter, Eis ist zäh und langsam.
const ELEMENT_PROFILE := {
Element.FEUER: {"hp": 0.90, "atk": 1.18, "armor": 0.0, "aspd": 1.0, "mana": 1.0, "crit": 0.0},
Element.WASSER: {"hp": 1.0, "atk": 0.95, "armor": 0.0, "aspd": 1.0, "mana": 0.75, "crit": 0.0},
Element.WIND: {"hp": 0.92, "atk": 0.95, "armor": 0.0, "aspd": 1.20, "mana": 1.0, "crit": 0.0},
Element.BLITZ: {"hp": 0.95, "atk": 1.0, "armor": 0.0, "aspd": 1.05, "mana": 1.0, "crit": 0.15},
Element.ERDE: {"hp": 1.22, "atk": 0.92, "armor": 0.08, "aspd": 0.90, "mana": 1.0, "crit": 0.0},
Element.EIS: {"hp": 1.08, "atk": 0.95, "armor": 0.05, "aspd": 0.95, "mana": 0.9, "crit": 0.0},
}
const PROFILE_HINT := {
Element.FEUER: "hart, aber weich", Element.WASSER: "zaubert oft", Element.WIND: "schnell",
Element.BLITZ: "kritisch", Element.ERDE: "zäh und langsam", Element.EIS: "robust",
}
# Multiplikator pro Sternstufe (Index = star - 1).
const STAR_MULT := [1.0, 1.8, 3.24]
const MAX_STAR := 3
@@ -55,13 +70,29 @@ const START_GOLD := 4
# --- Geteilter Pool --------------------------------------------------------
## Alle 8 Spieler teilen sich diesen Vorrat pro Element. Ein 3-Star bindet
## allein 9 Stück, dazu kommt was auf Bänken und Brettern liegt.
## Bei 180 hält der Vorrat eine ganze Partie und kann im Endspiel trotzdem knapp werden.
const POOL_PER_ELEMENT := 180
## Bei 100 hält der Vorrat eine ganze Partie, geht im Endspiel aber auf rund ein Fünftel.
const POOL_PER_ELEMENT := 100
# --- Board -----------------------------------------------------------------
const BOARD_COLS := 7
const BOARD_ROWS := 4
const MAX_TEAM_SLOTS := 9
# --- Level und Erfahrung ---------------------------------------------------
## Das Spielerlevel ist die Anzahl der Kaderplätze. Jede Runde gibt XP,
## weitere XP kauft man. Level gegen Würfeln ist die TFT-Kernentscheidung.
const START_LEVEL := 3
const MAX_LEVEL := 9
const XP_PER_ROUND := 2
const XP_BUY_COST := 4
const XP_BUY_AMOUNT := 4
const XP_TABLE := {3: 4, 4: 8, 5: 12, 6: 20, 7: 32, 8: 48}
# --- Planung ---------------------------------------------------------------
const PLAN_SECONDS := 30.0
# --- Kampf -----------------------------------------------------------------
## Heiler heilen nur Verbündete in dieser Hex-Reichweite.
const HEAL_RANGE := 2
# --- Element-Traits --------------------------------------------------------
# steps = Anzahl aufgestellter Einheiten mit diesem Element.
@@ -133,9 +164,14 @@ static func trait_tier(element: int, count: int) -> int:
return tier
## Teamgröße wächst mit der Runde.
static func team_slots(round_no: int) -> int:
return mini(3 + int(float(round_no - 1) / 2.0), MAX_TEAM_SLOTS)
## XP bis zum nächsten Level, 0 auf Maximalstufe.
static func xp_needed(level: int) -> int:
return XP_TABLE.get(level, 0)
## Grundschaden einer verlorenen Runde, steigt alle vier Runden.
static func round_base_damage(round_no: int) -> int:
return 2 + int(float(round_no - 1) / 4.0)
## Wahrscheinlichkeit, dass ein Shop-Platz einen neutralen Avatar zeigt.