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>
104 lines
6.1 KiB
C#
104 lines
6.1 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace Luneraria.Core
|
|
{
|
|
/// <summary>How a hero power is triggered.</summary>
|
|
public enum PowerTrigger
|
|
{
|
|
/// <summary>Automatic in combat (like the existing abilities).</summary>
|
|
Automatic,
|
|
/// <summary>Released by the player through the command menu during combat.</summary>
|
|
Command,
|
|
}
|
|
|
|
/// <summary>
|
|
/// Description of an ability or ultimate. Numbers are balance parameters; null means "not
|
|
/// decided yet". Nothing here is simulated until a hero is activated in a hero phase.
|
|
/// </summary>
|
|
public sealed class HeroPower
|
|
{
|
|
public string Id = "";
|
|
public string Name = "";
|
|
public string Text = "";
|
|
public PowerTrigger Trigger = PowerTrigger.Automatic;
|
|
/// <summary>Effect family in the rules vocabulary (slow, splash, damage buff, dot, ...).</summary>
|
|
public string Effect = "";
|
|
public double? Radius;
|
|
public double? Duration;
|
|
public double? Amount;
|
|
public int? MaxTargets;
|
|
public double? Cooldown;
|
|
/// <summary>Stun length for powers that stun (a new rule, see docs/port/U1-RULES.md).</summary>
|
|
public double? Stun;
|
|
/// <summary>Open design questions of this power.</summary>
|
|
public string Note = "";
|
|
}
|
|
|
|
/// <summary>A planned hero from the owner's hero concept (docs/luneraria/HELDEN-KONZEPT.md in the reference).</summary>
|
|
public sealed class PlannedHero
|
|
{
|
|
public string Id = "";
|
|
public string Name = "";
|
|
public string People = "";
|
|
public string Role = "";
|
|
/// <summary>Row in the formation, as for troops: front, melee, ranged, splash or support.</summary>
|
|
public string FormationRole = "";
|
|
public string Weapon = "";
|
|
public string Look = "";
|
|
public HeroPower Ability = new HeroPower();
|
|
public HeroPower Ultimate = new HeroPower();
|
|
public string Goal = "";
|
|
/// <summary>False until a hero phase implements and balances the kit; not purchasable before.</summary>
|
|
public bool Active;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The four heroes the owner defined for Champions of Luneraria (Lucy, Ghaliga, Siegfried,
|
|
/// Feena). Part of the data model so HUD and command menu can be designed against them;
|
|
/// the match still offers only the three reference heroes (ContentData.Heroes), so the port
|
|
/// keeps behavioural parity. Ultimates are released through the command menu; the rest of
|
|
/// the combat stays automatic.
|
|
/// </summary>
|
|
public static class PlannedHeroes
|
|
{
|
|
public static readonly IReadOnlyList<PlannedHero> All = new List<PlannedHero>
|
|
{
|
|
new PlannedHero
|
|
{
|
|
Id = "lucy", Name = "Lucy", People = "Dunkelelfe", Role = "Kontrolle / Fernkampf", FormationRole = "ranged", Weapon = "Bogen",
|
|
Look = "Lange weiße Haare, grüne Augen, dunkle Haut, dunkle Lederrüstung mit dunkelblauen Akzenten, frostige Nachtästhetik.",
|
|
Ability = new HeroPower { Id = "frostpfeile", Name = "Frostpfeile", Text = "Treffer verlangsamen Gegner.", Effect = "movement_slow" },
|
|
Ultimate = new HeroPower { Id = "multischuss", Name = "Multischuss", Text = "Mehrere Pfeile auf mehrere Ziele; Kontrolle und Flächendruck statt rohem Burst.",
|
|
Trigger = PowerTrigger.Command, Effect = "multi_target_volley" },
|
|
Goal = "Gefährliche Gegnerwellen verlangsamen und Formationen stören.",
|
|
},
|
|
new PlannedHero
|
|
{
|
|
Id = "ghaliga", Name = "Ghaliga", People = "Zwerg", Role = "Frontkämpfer / Bruiser", FormationRole = "front", Weapon = "Axt",
|
|
Look = "Rote Haare, langer Bart, blaue Augen, goldene Zwergenrüstung, schwere robuste Silhouette.",
|
|
Ability = new HeroPower { Id = "wirbelhieb", Name = "Wirbelhieb", Text = "Flächenangriff um ihn herum.", Effect = "splash_around_self" },
|
|
Ultimate = new HeroPower { Id = "versteinerung", Name = "Versteinerung", Text = "Absorbiert massiv Schaden und wird extrem zäh.",
|
|
Trigger = PowerTrigger.Command, Effect = "shield_and_reduction", Note = "Bindungs-/Aggroeffekt optional: wäre eine neue Zielwahlregel." },
|
|
Goal = "Front halten, Gegner binden, Wellen abfangen.",
|
|
},
|
|
new PlannedHero
|
|
{
|
|
Id = "siegfried", Name = "Siegfried", People = "Mensch", Role = "Anführer / Frontkämpfer / Support", FormationRole = "front", Weapon = "Schwert (gold-blau)",
|
|
Look = "Kurze blonde Haare, blaue Augen, goldene Paladinrüstung.",
|
|
Ability = new HeroPower { Id = "schlachtruf", Name = "Schlachtruf", Text = "Stärkt nahe Verbündete.", Effect = "damage" },
|
|
Ultimate = new HeroPower { Id = "excalibur", Name = "Excalibur", Text = "Großer kritischer Flächenangriff mit kurzer Betäubung; trifft nicht die ganze Karte.",
|
|
Trigger = PowerTrigger.Command, Effect = "area_strike_stun", Note = "Wirkbereich (Radius) und Betäubungsdauer sind Balanceparameter; Betäubung ist eine neue Regel." },
|
|
Goal = "Verbündete stärken und kritische Kämpfe drehen.",
|
|
},
|
|
new PlannedHero
|
|
{
|
|
Id = "feena", Name = "Feena", People = "Waldelfe", Role = "Fernkampf-DPS / Boss- und Elitejägerin", FormationRole = "ranged", Weapon = "Bogen",
|
|
Look = "Lange rote Haare, grüne Augen, grün-braune Lederrüstung, flinke naturverbundene Schützin.",
|
|
Ability = new HeroPower { Id = "giftpfeile", Name = "Giftpfeile", Text = "Schaden über Zeit.", Effect = "dot" },
|
|
Ultimate = new HeroPower { Id = "turbopfeile", Name = "Turbopfeile", Text = "Stark erhöhtes Angriffstempo für kurze Zeit.",
|
|
Trigger = PowerTrigger.Command, Effect = "attack_speed", Note = "Das Angriffstempo ist heute auf +50 % gedeckelt; das Ultimate braucht eine Ausnahme oder einen höheren Deckel." },
|
|
Goal = "Hoher anhaltender Fernkampfschaden, besonders gegen starke Einzelziele.",
|
|
},
|
|
};
|
|
}
|
|
}
|