champions-of-luneraria/Assets/Luneraria/Tests/Core/Golden/content.json
Martin Stickelbroeck 4d6ed17dca U1: Regelkern in C#, verhaltensgleich zur Godot-Referenz
Vollständiger, engineunabhängiger Regelkern (Luneraria.Core, ohne
UnityEngine): Partie mit sechs Plätzen und zwei Teams, private Planung mit
atomarer Übernahme, Gold, Käufe, Aufwertungen, Formation, drei Lanes mit
zwei Laneturmen und zwei Basistürmen je Team, Ancients, unbegrenzte Wellen,
Helden mit Stufen, Items und Talenten, Angriffschampions, Bossgrotte mit
Anspruch, Entsendung, Kopfgeld und dreirundiger Sperre, Bots und
Siegbedingung (nur Ancient-Fall). Serverautoritative Befehlsschnittstelle.

- Deterministisch: fester Takt, geordnete Maps, fortlaufende IDs, kein
  Zufall, keine Uhr, keine Threads
- Tabellen einmal aus Godot erzeugt (tools/port/gen_content.py)
- Golden-Referenzen aus Godot (tools/godot-golden): 19 Szenarien,
  120 Snapshots, 51.221 Werte, Abweichung 0 (Toleranzen dokumentiert)
- Tests: content 75, core 91, m2 73, golden 157, determinism 6 = 402/402
- Leistung (M5): Simulationsschritt 0,259 ms statt 1,587 ms in GDScript
- Referenzfehler R1 im Bot-Gedächtnis bewusst übernommen und dokumentiert
- Geplante Helden (Lucy, Ghaliga, Siegfried, Feena) im Datenmodell, inaktiv
- Doku unter docs/port (U1-RULES, PORT-STATUS, PORT-QA, U2 bis U5)

Unity-Editor-Lauf offen: Die Unity-Lizenz ist noch nicht aktiviert; gebaut
und getestet mit dem .NET 8 SDK auf Unitys Sprachstand (C# 9, .NET
Standard 2.1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 14:31:18 +02:00

2048 lines
No EOL
37 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"engine": "4.7.2-stable (official)",
"units": {
"g01": {
"id": "g01",
"display_name": "Kohlenbeißer",
"cost": 45,
"upgrade_id": "g02",
"max_hp": 260.0,
"damage": 17.0,
"attack_type": 0,
"armor_type": 0,
"attack_range": 1.1,
"speed": 2.4,
"ability": "g01",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 3. Treffer: Brand, 4 Schaden/s für 3 s."
},
"g02": {
"id": "g02",
"display_name": "Schlackenklaue",
"cost": 90,
"upgrade_id": "",
"max_hp": 690.0,
"damage": 44.0,
"attack_type": 0,
"armor_type": 1,
"attack_range": 1.2,
"speed": 2.4,
"ability": "g02",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 3. Treffer: Brand, 12 Schaden/s für 3 s."
},
"g03": {
"id": "g03",
"display_name": "Schlackenwacht",
"cost": 70,
"upgrade_id": "g04",
"max_hp": 650.0,
"damage": 11.0,
"attack_type": 0,
"armor_type": 1,
"attack_range": 1.2,
"speed": 2.4,
"ability": "g03",
"leak_value": 0,
"bounty": 0,
"ability_description": "Erste 8 s: 15 % weniger erlittener Schaden."
},
"g04": {
"id": "g04",
"display_name": "Basaltbastion",
"cost": 150,
"upgrade_id": "",
"max_hp": 1650.0,
"damage": 27.0,
"attack_type": 0,
"armor_type": 1,
"attack_range": 1.4,
"speed": 2.4,
"ability": "g04",
"leak_value": 0,
"bounty": 0,
"ability_description": "Erste 10 s: 25 % weniger Schaden, danach 10 %."
},
"g05": {
"id": "g05",
"display_name": "Funkenlanze",
"cost": 65,
"upgrade_id": "g06",
"max_hp": 240.0,
"damage": 24.0,
"attack_type": 1,
"armor_type": 0,
"attack_range": 5.5,
"speed": 2.0,
"ability": "g05",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 4. Treffer: 50 % zusätzlicher Grundschaden."
},
"g06": {
"id": "g06",
"display_name": "Glasballiste",
"cost": 140,
"upgrade_id": "",
"max_hp": 640.0,
"damage": 65.0,
"attack_type": 1,
"armor_type": 0,
"attack_range": 6.5,
"speed": 2.0,
"ability": "g06",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 4. Treffer: 75 % zusätzlicher Grundschaden."
},
"g07": {
"id": "g07",
"display_name": "Aschenwerfer",
"cost": 95,
"upgrade_id": "g08",
"max_hp": 310.0,
"damage": 23.0,
"attack_type": 2,
"armor_type": 0,
"attack_range": 4.5,
"speed": 2.0,
"ability": "g07",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder Treffer: 30 % Flächenschaden an bis zu 3 weiteren Zielen in 1,5 m."
},
"g08": {
"id": "g08",
"display_name": "Kraterrufer",
"cost": 190,
"upgrade_id": "",
"max_hp": 820.0,
"damage": 58.0,
"attack_type": 2,
"armor_type": 1,
"attack_range": 5.0,
"speed": 2.0,
"ability": "g08",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder Treffer: 40 % Flächenschaden an bis zu 4 weiteren Zielen in 2 m."
},
"g09": {
"id": "g09",
"display_name": "Herdhüter",
"cost": 85,
"upgrade_id": "g10",
"max_hp": 420.0,
"damage": 12.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 3.5,
"speed": 2.0,
"ability": "g09",
"leak_value": 0,
"bounty": 0,
"ability_description": "Alle 6 s: bis zu 3 Verbündete in 3 m erhalten für 4 s +10 % Grundangriffsschaden."
},
"g10": {
"id": "g10",
"display_name": "Sonnenesse",
"cost": 170,
"upgrade_id": "",
"max_hp": 1080.0,
"damage": 30.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 4.0,
"speed": 2.0,
"ability": "g10",
"leak_value": 0,
"bounty": 0,
"ability_description": "Alle 6 s: bis zu 4 Verbündete in 4 m erhalten für 4 s +15 % Grundangriffsschaden und 45 Heilung."
},
"w01": {
"id": "w01",
"display_name": "Dornhopser",
"cost": 50,
"upgrade_id": "w02",
"max_hp": 290.0,
"damage": 18.0,
"attack_type": 0,
"armor_type": 0,
"attack_range": 1.1,
"speed": 2.4,
"ability": "w01",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 3. Treffer: −20 % Bewegung für 2 s."
},
"w02": {
"id": "w02",
"display_name": "Rankenschnapper",
"cost": 100,
"upgrade_id": "",
"max_hp": 800.0,
"damage": 47.0,
"attack_type": 0,
"armor_type": 1,
"attack_range": 1.3,
"speed": 2.4,
"ability": "w02",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 3. Treffer: −30 % Bewegung und −10 % Angriffstempo für 3 s."
},
"w03": {
"id": "w03",
"display_name": "Korkrücken",
"cost": 75,
"upgrade_id": "w04",
"max_hp": 620.0,
"damage": 12.0,
"attack_type": 1,
"armor_type": 1,
"attack_range": 1.2,
"speed": 2.4,
"ability": "w03",
"leak_value": 0,
"bounty": 0,
"ability_description": "Heilt sich alle 5 s um 35 HP, sobald er verwundet ist."
},
"w04": {
"id": "w04",
"display_name": "Ringborke",
"cost": 155,
"upgrade_id": "",
"max_hp": 1560.0,
"damage": 31.0,
"attack_type": 1,
"armor_type": 1,
"attack_range": 1.4,
"speed": 2.4,
"ability": "w04",
"leak_value": 0,
"bounty": 0,
"ability_description": "Heilt sich alle 5 s um 100 HP, sobald er verwundet ist."
},
"w05": {
"id": "w05",
"display_name": "Samenschleuder",
"cost": 60,
"upgrade_id": "w06",
"max_hp": 230.0,
"damage": 23.0,
"attack_type": 1,
"armor_type": 0,
"attack_range": 5.5,
"speed": 2.0,
"ability": "w05",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 4. Treffer: Keimbrand, 3 Schaden/s für 4 s."
},
"w06": {
"id": "w06",
"display_name": "Zapfenkrone",
"cost": 135,
"upgrade_id": "",
"max_hp": 630.0,
"damage": 61.0,
"attack_type": 1,
"armor_type": 0,
"attack_range": 6.0,
"speed": 2.0,
"ability": "w06",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 4. Treffer: Keimbrand, 10 Schaden/s für 4 s."
},
"w07": {
"id": "w07",
"display_name": "Sporenkelch",
"cost": 100,
"upgrade_id": "w08",
"max_hp": 370.0,
"damage": 22.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 4.0,
"speed": 2.0,
"ability": "w07",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 3. Treffer: 60 % Grundschaden an bis zu 3 weiteren Zielen in 2 m."
},
"w08": {
"id": "w08",
"display_name": "Pilzkathedrale",
"cost": 195,
"upgrade_id": "",
"max_hp": 940.0,
"damage": 59.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 4.5,
"speed": 2.0,
"ability": "w08",
"leak_value": 0,
"bounty": 0,
"ability_description": "Jeder 3. Treffer: 80 % Grundschaden an bis zu 4 weiteren Zielen in 2,5 m."
},
"w09": {
"id": "w09",
"display_name": "Tauhüter",
"cost": 90,
"upgrade_id": "w10",
"max_hp": 390.0,
"damage": 10.0,
"attack_type": 2,
"armor_type": 0,
"attack_range": 4.0,
"speed": 2.0,
"ability": "w09",
"leak_value": 0,
"bounty": 0,
"ability_description": "Alle 4 s: heilt den am stärksten verwundeten Verbündeten in 4 m um 65 HP."
},
"w10": {
"id": "w10",
"display_name": "Quellgeflecht",
"cost": 180,
"upgrade_id": "",
"max_hp": 1000.0,
"damage": 27.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 4.5,
"speed": 2.0,
"ability": "w10",
"leak_value": 0,
"bounty": 0,
"ability_description": "Alle 4 s: heilt bis zu 3 verwundete Verbündete in 4,5 m um je 80 HP."
}
},
"enemies": {
"e01": {
"id": "e01",
"display_name": "Splitterling",
"max_hp": 90.0,
"damage": 6.0,
"attack_type": 0,
"armor_type": 0,
"attack_range": 1.0,
"speed": 3.0,
"ability": "e01",
"leak_value": 25,
"bounty": 3
},
"e02": {
"id": "e02",
"display_name": "Schalenläufer",
"max_hp": 240.0,
"damage": 9.0,
"attack_type": 1,
"armor_type": 1,
"attack_range": 1.2,
"speed": 2.0,
"ability": "e02",
"leak_value": 55,
"bounty": 6
},
"e03": {
"id": "e03",
"display_name": "Nebelrest",
"max_hp": 150.0,
"damage": 11.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 3.5,
"speed": 2.2,
"ability": "e03",
"leak_value": 40,
"bounty": 5
},
"e04": {
"id": "e04",
"display_name": "Fadenschütze",
"max_hp": 130.0,
"damage": 12.0,
"attack_type": 1,
"armor_type": 0,
"attack_range": 6.0,
"speed": 2.4,
"ability": "e04",
"leak_value": 35,
"bounty": 5
},
"e05": {
"id": "e05",
"display_name": "Bruchstampfer",
"max_hp": 480.0,
"damage": 16.0,
"attack_type": 0,
"armor_type": 1,
"attack_range": 1.4,
"speed": 1.6,
"ability": "e05",
"leak_value": 90,
"bounty": 10
},
"e06": {
"id": "e06",
"display_name": "Knotenrufer",
"max_hp": 190.0,
"damage": 7.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 4.0,
"speed": 2.0,
"ability": "e06",
"leak_value": 45,
"bounty": 6
},
"e07": {
"id": "e07",
"display_name": "Bruchhirsch",
"max_hp": 1100.0,
"damage": 28.0,
"attack_type": 0,
"armor_type": 0,
"attack_range": 1.4,
"speed": 1.8,
"ability": "e07",
"leak_value": 250,
"bounty": 30,
"is_boss": true
},
"e08": {
"id": "e08",
"display_name": "Riegelkoloss",
"max_hp": 1400.0,
"damage": 30.0,
"attack_type": 1,
"armor_type": 1,
"attack_range": 1.5,
"speed": 1.5,
"ability": "e08",
"leak_value": 330,
"bounty": 40,
"is_boss": true
},
"e09": {
"id": "e09",
"display_name": "Maskenrichter",
"max_hp": 1800.0,
"damage": 34.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 5.0,
"speed": 1.8,
"ability": "e09",
"leak_value": 400,
"bounty": 50,
"is_boss": true
},
"e10": {
"id": "e10",
"display_name": "Schlundkrone",
"max_hp": 3000.0,
"damage": 50.0,
"attack_type": 1,
"armor_type": 1,
"attack_range": 1.5,
"speed": 1.3,
"ability": "e10",
"leak_value": 600,
"bounty": 70,
"is_boss": true
}
},
"sends": {
"s01": {
"id": "s01",
"display_name": "Nadelspäher",
"cost": 20,
"income_gain": 3,
"max_hp": 100.0,
"damage": 8.0,
"attack_type": 1,
"armor_type": 0,
"attack_range": 4.5,
"speed": 2.8,
"ability": "s01",
"leak_value": 30,
"bounty": 3
},
"s02": {
"id": "s02",
"display_name": "Rostschieber",
"cost": 40,
"income_gain": 5,
"max_hp": 240.0,
"damage": 8.0,
"attack_type": 0,
"armor_type": 1,
"attack_range": 1.2,
"speed": 1.8,
"ability": "s02",
"leak_value": 55,
"bounty": 6
},
"s03": {
"id": "s03",
"display_name": "Dunstsänger",
"cost": 80,
"income_gain": 9,
"max_hp": 320.0,
"damage": 10.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 5.0,
"speed": 2.0,
"ability": "s03",
"leak_value": 70,
"bounty": 9
},
"s04": {
"id": "s04",
"display_name": "Keilbrecher",
"cost": 130,
"income_gain": 12,
"max_hp": 650.0,
"damage": 20.0,
"attack_type": 1,
"armor_type": 1,
"attack_range": 1.3,
"speed": 1.6,
"ability": "s04",
"leak_value": 120,
"bounty": 14
},
"s05": {
"id": "s05",
"display_name": "Risszehrer",
"cost": 200,
"income_gain": 17,
"max_hp": 1000.0,
"damage": 30.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 4.0,
"speed": 1.7,
"ability": "s05",
"leak_value": 180,
"bounty": 20
}
},
"faction_names": {
"glutpakt": "Glutpakt",
"wurzelbund": "Wurzelbund"
},
"armor_names": [
"Leicht",
"Schwer",
"Ätherisch"
],
"damage_names": [
"Klinge",
"Durchschlag",
"Impuls"
],
"heroes": {
"held_ringborke": {
"name": "Ringborke",
"title": "Wächterin der Wurzeln",
"model": "w04",
"cost": 260,
"role": "Front / Schutz",
"provisional": true,
"def": {
"max_hp": 2200.0,
"damage": 34.0,
"attack_type": 1,
"armor_type": 1,
"attack_range": 1.4,
"speed": 2.4,
"ability": "w04"
},
"summary": "Hält die Front, heilt sich selbst und schützt nahe Verbündete."
},
"held_quellgeflecht": {
"name": "Quellgeflecht",
"title": "Hüterin der Quelle",
"model": "w10",
"cost": 260,
"role": "Unterstützung / Heilung",
"provisional": true,
"def": {
"max_hp": 1300.0,
"damage": 28.0,
"attack_type": 2,
"armor_type": 2,
"attack_range": 4.5,
"speed": 2.0,
"ability": "w10"
},
"summary": "Heilt Verbündete in 4,5 m und stärkt die Armee im Gefecht."
},
"held_funkenlanze": {
"name": "Funkenlanze",
"title": "Schützin des Glutpakts",
"model": "g05",
"cost": 260,
"role": "Fernkampf / Schaden",
"provisional": true,
"def": {
"max_hp": 950.0,
"damage": 46.0,
"attack_type": 1,
"armor_type": 0,
"attack_range": 6.0,
"speed": 2.0,
"ability": "g05"
},
"summary": "Hoher Einzelschaden aus der zweiten Reihe."
}
},
"level_xp": [
0,
120,
280,
480,
720,
1000,
1320,
1680,
2080,
2520
],
"talent_levels": [
3,
6
],
"talents": {
"held_ringborke": [
[
{
"id": "borkenhaut",
"name": "Borkenhaut",
"text": "Eigenschutz: +15 % Schadensminderung für die Heldin."
},
{
"id": "schutzwurzeln",
"name": "Schutzwurzeln",
"text": "Gruppenschutz: alle 4 s erhalten bis zu 4 Verbündete in 4 m 10 % Schadensminderung für 4,5 s."
}
],
[
{
"id": "stammschlag",
"name": "Stammschlag",
"text": "Einzelziel: jeder 3. Treffer +60 % Schaden."
},
{
"id": "wurzelbeben",
"name": "Wurzelbeben",
"text": "Fläche: jeder 3. Treffer 50 % Schaden an bis zu 3 Gegner in 2 m."
}
]
],
"held_quellgeflecht": [
[
{
"id": "tiefe_quelle",
"name": "Tiefe Quelle",
"text": "Einzelziel: heilt den schwächsten Verbündeten um 190 statt drei um je 80."
},
{
"id": "weite_quelle",
"name": "Weite Quelle",
"text": "Fläche: heilt bis zu 5 Verbündete in 5,5 m um je 65."
}
],
[
{
"id": "quellschild",
"name": "Quellschild",
"text": "Schutz: Geheilte erhalten 4 s lang einen Schild von 70."
},
{
"id": "keimsaat",
"name": "Keimsaat",
"text": "Druck: jeder 2. Treffer setzt Keimbrand, 9 Schaden/s für 4 s."
}
]
],
"held_funkenlanze": [
[
{
"id": "durchschlag",
"name": "Durchschlag",
"text": "Einzelziel: jeder 4. Treffer ×2,1 statt ×1,5."
},
{
"id": "splitterschuss",
"name": "Splitterschuss",
"text": "Fläche: jeder 4. Treffer zusätzlich 45 % an bis zu 3 Gegner in 2 m."
}
],
[
{
"id": "fernsicht",
"name": "Fernsicht",
"text": "+1,5 m Reichweite."
},
{
"id": "glutsalve",
"name": "Glutsalve",
"text": "+20 % Angriffstempo."
}
]
]
},
"items": {
"basaltschild": {
"name": "Basaltschild",
"cost": 180,
"text": "+350 Lebenspunkte",
"hp_flat": 350.0
},
"glutklinge": {
"name": "Glutklinge",
"cost": 180,
"text": "+18 % Schaden",
"damage": 0.18
},
"rankenmantel": {
"name": "Rankenmantel",
"cost": 200,
"text": "+10 % Schadensminderung",
"reduction": 0.1
},
"funkenfokus": {
"name": "Funkenfokus",
"cost": 200,
"text": "+15 % Angriffstempo",
"attack_speed": 0.15
},
"quellamulett": {
"name": "Quellamulett",
"cost": 220,
"text": "Regeneriert 1,5 % der Lebenspunkte pro Sekunde",
"regen": 0.015
},
"kristallsplitter": {
"name": "Kristallsplitter",
"cost": 260,
"text": "Jeder Treffer: 25 % an bis zu 2 Gegner in 1,5 m · ab Stufe 3",
"splash": 0.25,
"min_level": 3
}
},
"champions": {
"ch_schutz": {
"name": "Rostschieber",
"role": "Schutz",
"model": "s02",
"cost": 150,
"base": "s02",
"text": "Schildträger: startet mit Schild, gibt alle 6 s bis zu 4 Verbündeten in 4 m einen Schild von 120.",
"view_scale": 1.25
},
"ch_druck": {
"name": "Dunstsänger",
"role": "Druck auf Unterstützer",
"model": "s03",
"cost": 150,
"base": "s03",
"text": "Sucht Unterstützer und Fernkämpfer und verlangsamt deren Angriffe.",
"priority": "support",
"view_scale": 1.25
},
"ch_belagerung": {
"name": "Keilbrecher",
"role": "Belagerung",
"model": "s04",
"cost": 180,
"base": "s04",
"text": "Greift bevorzugt Gebäude an und verursacht dort ×1,8 Schaden.",
"priority": "building",
"siege_factor": 1.8,
"view_scale": 1.3
}
},
"content_constants": {
"HP_PER_LEVEL": 0.09,
"DAMAGE_PER_LEVEL": 0.07,
"XP_PARTICIPATION": 40,
"XP_PER_ROUND": 6,
"XP_RADIUS": 12.0,
"ITEM_SLOTS": 3,
"ITEM_REFUND": 0.5,
"CHAMPION_HP": 2.2,
"CHAMPION_DAMAGE": 1.6,
"CHAMPION_BOUNTY": 70,
"CHAMPION_BOUNTY_PER_ROUND": 6,
"MAX_BOOKINGS": 2,
"BOSS_MODEL": "e10",
"BOSS_GROTTO_HP": 3600.0,
"BOSS_GROTTO_DAMAGE": 55.0,
"BOSS_DEPLOY_HP": 6800.0,
"BOSS_DEPLOY_DAMAGE": 88.0,
"BOSS_BOUNTY": 520,
"BOSS_BOUNTY_PER_ROUND": 60,
"BOSS_LOCK_ROUNDS": 3,
"BOSS_XP": 220,
"BUILDING_XP": 60
},
"match_roles": {
"g01": "melee",
"g03": "front",
"g05": "ranged",
"g07": "splash",
"g09": "support",
"w01": "melee",
"w03": "front",
"w05": "ranged",
"w07": "splash",
"w09": "support"
},
"hero_roles": {
"held_ringborke": "front",
"held_quellgeflecht": "support",
"held_funkenlanze": "ranged"
},
"row_order": [
"front",
"melee",
"splash",
"ranged",
"support"
],
"bot_names": [
"Eichrufer",
"Aschenzunge",
"Quellwächter",
"Glutfaust",
"Moosauge",
"Basaltherz",
"Rindenkrone",
"Funkenschritt"
],
"bot_profiles": {
"ausgewogen": {
"front": 0.3,
"melee": 0.25,
"ranged": 0.25,
"splash": 0.1,
"support": 0.1,
"upgrade_from": 6,
"support_lane": 0.0,
"hero": "held_ringborke",
"hero_round": 4,
"items": [
"basaltschild",
"glutklinge",
"rankenmantel"
],
"talents": [
0,
1
],
"champion": ""
},
"verteidigung": {
"front": 0.35,
"melee": 0.2,
"ranged": 0.25,
"splash": 0.1,
"support": 0.1,
"upgrade_from": 7,
"support_lane": 0.15,
"hero": "held_ringborke",
"hero_round": 3,
"items": [
"basaltschild",
"rankenmantel",
"glutklinge"
],
"talents": [
1,
1
],
"champion": "ch_schutz"
},
"druck": {
"front": 0.2,
"melee": 0.35,
"ranged": 0.25,
"splash": 0.15,
"support": 0.05,
"upgrade_from": 8,
"support_lane": 0.0,
"hero": "held_funkenlanze",
"hero_round": 3,
"items": [
"glutklinge",
"funkenfokus",
"kristallsplitter"
],
"talents": [
1,
1
],
"champion": "ch_belagerung"
},
"fernkampf": {
"front": 0.25,
"melee": 0.1,
"ranged": 0.4,
"splash": 0.15,
"support": 0.1,
"upgrade_from": 6,
"support_lane": 0.0,
"hero": "held_funkenlanze",
"hero_round": 4,
"items": [
"funkenfokus",
"glutklinge",
"kristallsplitter"
],
"talents": [
0,
0
],
"champion": "ch_druck"
},
"teamhilfe": {
"front": 0.3,
"melee": 0.2,
"ranged": 0.25,
"splash": 0.1,
"support": 0.15,
"upgrade_from": 6,
"support_lane": 0.22,
"hero": "held_quellgeflecht",
"hero_round": 4,
"items": [
"quellamulett",
"rankenmantel",
"basaltschild"
],
"talents": [
1,
0
],
"champion": "ch_schutz"
},
"bossjagd": {
"front": 0.35,
"melee": 0.25,
"ranged": 0.2,
"splash": 0.1,
"support": 0.1,
"upgrade_from": 6,
"support_lane": 0.1,
"hero": "held_ringborke",
"hero_round": 3,
"items": [
"glutklinge",
"basaltschild",
"rankenmantel"
],
"talents": [
1,
1
],
"champion": "ch_belagerung",
"boss_from": 5,
"boss_troops": 5
}
},
"bot_constants": {
"BOSS_BAR": 1.35,
"BOSS_BAR_STEP": 1.25
},
"waves_melee": [
"e01",
"e02",
"e05"
],
"balance": {
"sim_step": 0.05,
"combat_time_limit": 180.0,
"march_speed_factor": 1.6,
"aggro_radius": 7.0,
"leash_radius": 10.0,
"lane_half_width": 2.6,
"start_gold": 220,
"base_income": 70,
"income_per_round": 4,
"income_growth_cap": 80,
"supply_cap": 12,
"sell_refund": 0.75,
"lane_share": 0.5,
"wave_base_count": 3,
"wave_count_every": 3,
"wave_max_count": 7,
"wave_hp_growth": 0.11,
"wave_damage_growth": 0.07,
"wave_growth_quadratic": 0.0015,
"monster_bounty_scale": 2.0,
"bounty_growth": 0.04,
"monster_pool": [
"e01",
"e02",
"e04",
"e03",
"e06",
"e05"
],
"tower_outer_hp": 6000.0,
"tower_inner_hp": 7500.0,
"base_tower_hp": 9000.0,
"core_hp": 12000.0,
"tower_damage": 90.0,
"base_tower_damage": 120.0,
"tower_range": 8.6,
"tower_attack_interval": 1.0,
"building_radius": 1.3,
"bounty_outer_tower": 150,
"bounty_inner_tower": 210,
"bounty_base_tower": 270,
"inner_tower_fraction": 0.17,
"outer_tower_fraction": 0.35,
"tower_side_offset": 3.4
},
"lanes": {
"top": {
"length": 96.82083296775818,
"points": [
[
-27.399999618530273,
21.0
],
[
-27.15199851989746,
19.416000366210938
],
[
-26.856000900268555,
17.847999572753906
],
[
-26.583999633789063,
16.272001266479492
],
[
-26.408000946044922,
14.664000511169434
],
[
-26.399999618530273,
13.0
],
[
-26.675201416015625,
11.263999938964844
],
[
-27.18560028076172,
9.472000122070313
],
[
-27.758399963378906,
7.647999286651611
],
[
-28.22079849243164,
5.815999984741211
],
[
-28.399999618530273,
4.0
],
[
-28.15519905090332,
2.191999912261963
],
[
-27.601600646972656,
0.3759998679161072
],
[
-26.950401306152344,
-1.436000108718872
],
[
-26.412799835205078,
-3.2320003509521484
],
[
-26.200000762939453,
-5.0
],
[
-26.427202224731445,
-6.744799613952637
],
[
-26.953601837158203,
-8.474400520324707
],
[
-27.606401443481445,
-10.181599617004395
],
[
-28.212800979614258,
-11.859200477600098
],
[
-28.600000381469727,
-13.5
],
[
-28.807811737060547,
-15.57265567779541
],
[
-28.862499237060547,
-17.643749237060547
],
[
-28.735937118530273,
-19.567970275878906
],
[
-28.399999618530273,
-21.200000762939453
],
[
-27.518516540527344,
-22.770370483398438
],
[
-26.281478881835938,
-23.90740966796875
],
[
-25.0,
-25.0
],
[
-23.90740966796875,
-26.281478881835938
],
[
-22.770370483398438,
-27.518516540527344
],
[
-21.200000762939453,
-28.399999618530273
],
[
-19.567970275878906,
-28.735937118530273
],
[
-17.643749237060547,
-28.862499237060547
],
[
-15.57265567779541,
-28.807811737060547
],
[
-13.5,
-28.600000381469727
],
[
-11.859200477600098,
-28.212800979614258
],
[
-10.181599617004395,
-27.606401443481445
],
[
-8.474400520324707,
-26.953601837158203
],
[
-6.744799613952637,
-26.427202224731445
],
[
-5.0,
-26.200000762939453
],
[
-3.2320003509521484,
-26.412799835205078
],
[
-1.436000108718872,
-26.950401306152344
],
[
0.3759998679161072,
-27.601600646972656
],
[
2.191999912261963,
-28.15519905090332
],
[
4.0,
-28.399999618530273
],
[
5.815999984741211,
-28.22079849243164
],
[
7.647999286651611,
-27.758399963378906
],
[
9.472000122070313,
-27.18560028076172
],
[
11.263999938964844,
-26.675201416015625
],
[
13.0,
-26.399999618530273
],
[
14.664000511169434,
-26.408000946044922
],
[
16.272001266479492,
-26.583999633789063
],
[
17.847999572753906,
-26.856000900268555
],
[
19.416000366210938,
-27.15199851989746
],
[
21.0,
-27.399999618530273
]
],
"cumulative": [
0.0,
1.6032963991165161,
3.198990821838379,
4.7982892990112305,
6.415893077850342,
8.079913139343262,
9.837591171264648,
11.700860023498535,
13.612686157226563,
15.5021390914917,
17.32695960998535,
19.151456832885742,
21.049962997436523,
22.975425720214844,
24.850160598754883,
26.63092041015625,
28.390451431274414,
30.198381423950195,
32.0261344909668,
33.809967041015625,
35.49583435058594,
37.57888412475586,
39.650699615478516,
41.57907485961914,
43.245323181152344,
45.04617691040039,
46.72639083862305,
48.41041564941406,
50.09444046020508,
51.774658203125,
53.57550811767578,
55.241756439208984,
57.170135498046875,
59.24195098876953,
61.32499694824219,
63.0108642578125,
64.7947006225586,
66.62245178222656,
68.43038177490234,
70.18991088867188,
71.97067260742188,
73.84540557861328,
75.77086639404297,
77.66937255859375,
79.4938735961914,
81.31869506835938,
83.20814514160156,
85.1199722290039,
86.98324584960938,
88.74092102050781,
90.40493774414063,
92.02254486083984,
93.62184143066406,
95.21753692626953,
96.82083129882813
]
},
"mid": {
"length": 61.160152435302734,
"points": [
[
-21.600000381469727,
21.600000381469727
],
[
-20.307029724121094,
20.530467987060547
],
[
-19.01875114440918,
19.481252670288086
],
[
-17.72109603881836,
18.391407012939453
],
[
-16.399999618530273,
17.200000762939453
],
[
-15.041406631469727,
15.864063262939453
],
[
-13.656249046325684,
14.425002098083496
],
[
-12.267967224121094,
12.94843864440918
],
[
-10.899999618530273,
11.5
],
[
-9.567968368530273,
10.09999942779541
],
[
-8.25624942779541,
8.712499618530273
],
[
-6.941405296325684,
7.318749904632568
],
[
-5.599999904632568,
5.900000095367432
],
[
-4.503999710083008,
4.734399795532227
],
[
-3.3959996700286865,
3.5472002029418945
],
[
-2.2759997844696045,
2.352800130844116
],
[
-1.143999457359314,
1.1656004190444946
],
[
0.0,
0.0
],
[
1.1656004190444946,
-1.143999457359314
],
[
2.352800130844116,
-2.2759997844696045
],
[
3.5472002029418945,
-3.3959996700286865
],
[
4.734399795532227,
-4.503999710083008
],
[
5.900000095367432,
-5.599999904632568
],
[
7.318749904632568,
-6.941405296325684
],
[
8.712499618530273,
-8.25624942779541
],
[
10.09999942779541,
-9.567968368530273
],
[
11.5,
-10.899999618530273
],
[
12.94843864440918,
-12.267967224121094
],
[
14.425002098083496,
-13.656249046325684
],
[
15.864063262939453,
-15.041406631469727
],
[
17.200000762939453,
-16.399999618530273
],
[
18.391407012939453,
-17.72109603881836
],
[
19.481252670288086,
-19.01875114440918
],
[
20.530467987060547,
-20.307029724121094
],
[
21.600000381469727,
-21.600000381469727
]
],
"cumulative": [
0.0,
1.6779966354370117,
3.3394761085510254,
5.034077167510986,
6.813050270080566,
8.718438148498535,
10.715826034545898,
12.742539405822754,
14.734851837158203,
16.667287826538086,
18.576675415039063,
20.492753982543945,
22.44524383544922,
24.045194625854492,
25.669111251831055,
27.30648422241211,
28.946870803833008,
30.580076217651367,
32.213279724121094,
33.853668212890625,
35.49103927612305,
37.114959716796875,
38.714908599853516,
40.66740036010742,
42.58347702026367,
44.492862701416016,
46.42530059814453,
48.4176139831543,
50.4443244934082,
52.441715240478516,
54.347103118896484,
56.126075744628906,
57.820674896240234,
59.482154846191406,
61.160152435302734
]
},
"bot": {
"length": 96.8208339214325,
"points": [
[
-21.0,
27.399999618530273
],
[
-19.299999237060547,
27.303998947143555
],
[
-17.600000381469727,
27.191999435424805
],
[
-15.899999618530273,
27.08799934387207
],
[
-14.199999809265137,
27.01599884033203
],
[
-12.5,
27.0
],
[
-10.791999816894531,
27.120418548583984
],
[
-9.076000213623047,
27.361255645751953
],
[
-7.363999366760254,
27.601882934570313
],
[
-5.667999744415283,
27.7216739654541
],
[
-4.0,
27.600000381469727
],
[
-2.367999792098999,
27.093137741088867
],
[
-0.7640000581741333,
26.281503677368164
],
[
0.8240002989768982,
25.380687713623047
],
[
2.4079999923706055,
24.606273651123047
],
[
4.0,
24.173847198486328
],
[
5.6080002784729,
24.166473388671875
],
[
7.223999977111816,
24.4404239654541
],
[
8.836000442504883,
24.871112823486328
],
[
10.431999206542969,
25.33393669128418
],
[
12.0,
25.704309463500977
],
[
14.022655487060547,
26.05635643005371
],
[
16.08125114440918,
26.397808074951172
],
[
17.974220275878906,
26.716434478759766
],
[
19.5,
27.0
],
[
21.143749237060547,
27.65597915649414
],
[
22.200000762939453,
27.799999237060547
],
[
23.59375,
26.625
],
[
25.0,
25.0
],
[
26.625,
23.59375
],
[
27.799999237060547,
22.200000762939453
],
[
27.65597915649414,
21.143749237060547
],
[
27.0,
19.5
],
[
26.716434478759766,
17.974220275878906
],
[
26.397808074951172,
16.08125114440918
],
[
26.05635643005371,
14.022655487060547
],
[
25.704309463500977,
12.0
],
[
25.33393669128418,
10.431999206542969
],
[
24.871112823486328,
8.836000442504883
],
[
24.4404239654541,
7.223999977111816
],
[
24.166473388671875,
5.6080002784729
],
[
24.173847198486328,
4.0
],
[
24.606273651123047,
2.4079999923706055
],
[
25.380687713623047,
0.8240002989768982
],
[
26.281503677368164,
-0.7640000581741333
],
[
27.093137741088867,
-2.367999792098999
],
[
27.600000381469727,
-4.0
],
[
27.7216739654541,
-5.667999744415283
],
[
27.601882934570313,
-7.363999366760254
],
[
27.361255645751953,
-9.076000213623047
],
[
27.120418548583984,
-10.791999816894531
],
[
27.0,
-12.5
],
[
27.01599884033203,
-14.199999809265137
],
[
27.08799934387207,
-15.899999618530273
],
[
27.191999435424805,
-17.600000381469727
],
[
27.303998947143555,
-19.299999237060547
],
[
27.399999618530273,
-21.0
]
],
"cumulative": [
0.0,
1.7027091979980469,
3.406393527984619,
5.109572410583496,
6.81109619140625,
8.511171340942383,
10.223411560058594,
11.956229209899902,
13.685057640075684,
15.385282516479492,
17.057714462280273,
18.766613006591797,
20.564268112182617,
22.389976501464844,
24.153148651123047,
25.802831649780273,
27.41084861755371,
29.04990577697754,
30.718448638916016,
32.38019943237305,
33.99134826660156,
36.04441452026367,
38.131134033203125,
40.05073165893555,
41.602638244628906,
43.3724479675293,
44.438472747802734,
46.26142501831055,
48.41041564941406,
50.559410095214844,
52.382362365722656,
53.448387145996094,
55.21819305419922,
56.77009963989258,
58.689697265625,
60.77642059326172,
62.82948303222656,
64.44063568115234,
66.10238647460938,
67.77092742919922,
69.40998840332031,
71.01800537109375,
72.66768646240234,
74.43085479736328,
76.2565689086914,
78.0542221069336,
79.76312255859375,
81.43555450439453,
83.13577270507813,
84.86460876464844,
86.59741973876953,
88.30966186523438,
90.00973510742188,
91.71125793457031,
93.41444396972656,
95.11812591552734,
96.82083129882813
]
}
},
"buildings": [
{
"id": "blau_top_inner",
"team": 0,
"lane": "top",
"tier": "inner",
"progress": 16.45954160451889,
"position": [
-24.931251525878906,
4.5293378829956055
],
"max_hp": 7500.0,
"damage": 90.0,
"range": 8.6,
"bounty": 210
},
{
"id": "blau_top_outer",
"team": 0,
"lane": "top",
"tier": "outer",
"progress": 33.88729153871536,
"position": [
-24.921451568603516,
-12.715348243713379
],
"max_hp": 6000.0,
"damage": 90.0,
"range": 8.6,
"bounty": 150
},
{
"id": "blau_mid_inner",
"team": 0,
"lane": "mid",
"tier": "inner",
"progress": 10.397225914001465,
"position": [
-11.427590370178223,
17.012392044067383
],
"max_hp": 7500.0,
"damage": 90.0,
"range": 8.6,
"bounty": 210
},
{
"id": "blau_mid_outer",
"team": 0,
"lane": "mid",
"tier": "outer",
"progress": 21.406053352355954,
"position": [
-3.8433847427368164,
8.990991592407227
],
"max_hp": 6000.0,
"damage": 90.0,
"range": 8.6,
"bounty": 150
},
{
"id": "blau_bot_inner",
"team": 0,
"lane": "bot",
"tier": "inner",
"progress": 16.459541766643525,
"position": [
-4.349228858947754,
31.034507751464844
],
"max_hp": 7500.0,
"damage": 90.0,
"range": 8.6,
"bounty": 210
},
{
"id": "blau_bot_outer",
"team": 0,
"lane": "bot",
"tier": "outer",
"progress": 33.88729187250137,
"position": [
11.117134094238281,
28.989334106445313
],
"max_hp": 6000.0,
"damage": 90.0,
"range": 8.6,
"bounty": 150
},
{
"id": "blau_base_1",
"team": 0,
"lane": "base",
"tier": "base",
"progress": -1.0,
"position": [
-29.476999282836914,
24.023000717163086
],
"max_hp": 9000.0,
"damage": 120.0,
"range": 8.6,
"bounty": 270
},
{
"id": "blau_base_2",
"team": 0,
"lane": "base",
"tier": "base",
"progress": -1.0,
"position": [
-24.023000717163086,
29.476999282836914
],
"max_hp": 9000.0,
"damage": 120.0,
"range": 8.6,
"bounty": 270
},
{
"id": "blau_ancient",
"team": 0,
"lane": "base",
"tier": "core",
"progress": -1.0,
"position": [
-30.0,
30.0
],
"max_hp": 12000.0,
"damage": 0.0,
"range": 0.0,
"bounty": 0
},
{
"id": "rot_top_inner",
"team": 1,
"lane": "top",
"tier": "inner",
"progress": 16.45954160451889,
"position": [
4.5293378829956055,
-24.931251525878906
],
"max_hp": 7500.0,
"damage": 90.0,
"range": 8.6,
"bounty": 210
},
{
"id": "rot_top_outer",
"team": 1,
"lane": "top",
"tier": "outer",
"progress": 33.88729153871536,
"position": [
-12.715348243713379,
-24.921451568603516
],
"max_hp": 6000.0,
"damage": 90.0,
"range": 8.6,
"bounty": 150
},
{
"id": "rot_mid_inner",
"team": 1,
"lane": "mid",
"tier": "inner",
"progress": 10.397225914001465,
"position": [
17.012392044067383,
-11.427590370178223
],
"max_hp": 7500.0,
"damage": 90.0,
"range": 8.6,
"bounty": 210
},
{
"id": "rot_mid_outer",
"team": 1,
"lane": "mid",
"tier": "outer",
"progress": 21.406053352355954,
"position": [
8.990991592407227,
-3.8433847427368164
],
"max_hp": 6000.0,
"damage": 90.0,
"range": 8.6,
"bounty": 150
},
{
"id": "rot_bot_inner",
"team": 1,
"lane": "bot",
"tier": "inner",
"progress": 16.459541766643525,
"position": [
31.034507751464844,
-4.349228858947754
],
"max_hp": 7500.0,
"damage": 90.0,
"range": 8.6,
"bounty": 210
},
{
"id": "rot_bot_outer",
"team": 1,
"lane": "bot",
"tier": "outer",
"progress": 33.88729187250137,
"position": [
28.989334106445313,
11.117134094238281
],
"max_hp": 6000.0,
"damage": 90.0,
"range": 8.6,
"bounty": 150
},
{
"id": "rot_base_1",
"team": 1,
"lane": "base",
"tier": "base",
"progress": -1.0,
"position": [
24.023000717163086,
-29.476999282836914
],
"max_hp": 9000.0,
"damage": 120.0,
"range": 8.6,
"bounty": 270
},
{
"id": "rot_base_2",
"team": 1,
"lane": "base",
"tier": "base",
"progress": -1.0,
"position": [
29.476999282836914,
-24.023000717163086
],
"max_hp": 9000.0,
"damage": 120.0,
"range": 8.6,
"bounty": 270
},
{
"id": "rot_ancient",
"team": 1,
"lane": "base",
"tier": "core",
"progress": -1.0,
"position": [
30.0,
-30.0
],
"max_hp": 12000.0,
"damage": 0.0,
"range": 0.0,
"bounty": 0
}
]
}