Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
2D-Side-View-Roguelite: Sportler aus verschiedenen Sportarten (Fußball, Basketball – Boxen und Tennis folgen) kämpfen sich mit ihrem Ball durch Stages voller Monster-Wellen. Grafik, Animation, Effekte und HUD werden überwiegend zur Laufzeit im Code erzeugt. Stage 1 hat eine eigene, nach einem Referenzbild gemalte Kulisse aus zwölf unterschiedlich schnell mitlaufenden Ebenen und eigene Plattformen – ebenfalls komplett im Code erzeugt.查看完整 README ↗
2D-Side-View-Roguelite: Sportler aus verschiedenen Sportarten (Fußball, Basketball, Boxen – Tennis folgt) kämpfen sich mit Ball oder Fäusten durch Stages voller Monster-Wellen.
Animation, Effekte und HUD werden zur Laufzeit im Code erzeugt. Die neun Spielfiguren sind aus den Figurenbögen des Designs ausgeschnitten (tools/newdesign/characters.js → Assets/Resources/Characters, siehe unten) und werden prozedural animiert. Auch die Monster sind gemalte Bilder aus Inspiration/Monsterpaket (tools/newdesign/monsters.js → Assets/Resources/Monsters/<stage>): jedes Monster wird als ganzes, unverändertes Bild gezeigt und im Spiel wie ein Gummituch verformt (MonsterWarp): unsichtbare Knochen in Flügeln, Schwänzen, Tentakeln, Umhängen, Armen, Beinen, Blättern und Zündschnüren sind gedämpfte Federn, die der Körperbewegung folgen – Tentakel und Mäntel schleifen im Flug nach, Blätter, Hörner und Kronen wippen beim Landen nach, Arme holen beim Ausholen aus, Flügel schlagen schneller bei hohem Tempo, bei Treffern schwingt alles mit, Füße baumeln nur in der Luft. Dazu atmet der Körper, federt wie Gelee über der Sohle und neigt sich beim Angriff (Monster.PoseWhole). Die Spielwelt jeder Stage (Kulisse, Boden, Plattformen, Deko) ist aus ihrem Stage-Bogen des Designs ausgeschnitten (tools/newdesign/stages.js → Assets/Resources/Stages/<stage>, siehe „Arena“) und wird im Spiel zu mitlaufenden Ebenen zusammengesetzt.
Die Bilder sind fertige Körper ohne getrennte Glieder – ein früherer Versuch, Arme, Flügel und Augen herauszuschneiden, ließ die Monster zerrissen und verschmiert aussehen. node tools/newdesign/monsters.js stellt deshalb nur die rechte Ansicht jedes Bogens frei, verkleinert sie und legt Drehpunkt (Sohle oder Mitte), Maßstab und Randlicht-Maske fest (Tabelle LOOKS im Skript); die Blickrichtung entsteht durch Spiegeln. Die Knochen jedes Bildes stehen in tools/newdesign/monsters.rig.js (Prozent-Koordinaten im Bild), node tools/newdesign/rigview.js <stage>/<look>,… <ziel.png> zeichnet sie zur Kontrolle auf die Bilder. Für Kombinationen ohne Bildvorlage bleiben die bisherigen prozeduralen Körper verfügbar. Das Capture-Szenario monster-art prüft die Stage-Gegner und Bosse in acht Darstellungszuständen, monster-motion zeigt ihre Verformung (Ruhe, Ausholen, Flug, Steigen, Fallen, Landung, Nachfedern, Treffer), bestiary zeigt zusätzlich alle Grundtypen in jeder Stage.
Fünf Level: Vor dem Start wird eine endliche Route gewählt. Level 1 ist ab Charakter-Stufe 1 offen und endet nach 3 Stages; Level 2 braucht Stufe 3 und hat 4 Stages, Level 3 braucht Stufe 5 und hat 5 Stages, Level 4 braucht Stufe 7 und hat 6 Stages, Level 5 braucht Stufe 9 und umfasst alle 8 Stage-Themen. Höhere Level beginnen auf einer deutlich stärkeren Schwierigkeitsstufe und zahlen entsprechend mehr Kristalle. Jede Route kann beliebig oft wiederholt und gewonnen werden.
Stage → Wellen → Boss: Stage 1 hat 3 Wellen, Stage 2 hat 4, ab Stage 3 sind es 5, danach kommt der Stage-Boss.
Die Schwierigkeit ist eine durchgehende Kurve (Difficulty.cs): Jede Welle +1 Stufe, jede neue Stage beginnt
0,35 Stufen unter dem Ende der vorigen – die letzte Welle einer Stage ist also etwas härter als die erste der nächsten.
Nach jeder zweiten Runde (Wellen und Bosskämpfe zählen): 3 zufällige Upgrade-Karten (Gewöhnlich / Selten /
Episch / Legendär), eine davon nimmst du (Taste 1/2/3 oder Klick). 74 Upgrades inkl. Synergien, siehe Upgrades.cs.
Deine Fähigkeiten bringst du mit: Neben Schuss und Power-Schuss (und dem Luft-Rückstoß) startet jeder Lauf mit den bis zu vier Fähigkeiten, die du im Menü ausgerüstet hast (siehe „Fortschritt“). Nach jedem Boss gibt es eine Boss-Belohnung (nur Selten+); ist noch ein Platz frei und besitzt du eine nicht ausgerüstete Fähigkeit, darfst du sie für den Rest des Laufs mitnehmen, sonst gibt es eine zweite Belohnungskarte. Hinter der Belohnung entsteht schon die Arena der nächsten Stage.
Münzen: Jeder besiegte Gegner lässt Münzen fallen (Elite 4, Miniboss 12, Boss 30, pro Stage +12 %), jede geschaffte Stage regnet einen Bonus herab. Sie springen auf den Rasen, glitzern kurz und fliegen dann von selbst in den Zähler oben rechts – siehe „Fortschritt“.
Kristalle: Jede geschaffte Welle und jede geschaffte Stage zahlt Kristalle direkt ins Profil. Der Betrag wächst innerhalb eines Laufs mit der Stage und wird in höheren Leveln mit ×1,5 / ×2,1 / ×2,9 / ×4 verstärkt.
8 Stage-Themen mit eigener Welt (Kulisse, Boden, Plattformen, Deko), Wetter, Monster-Aussehen, Gegnern, Miniboss, Boss und Spezialregel: Mondlicht-Ruinen, Bernsteinhain (Windböen), Regenwacht (Blitzeinschläge), Glimmergrotte (Dunkelheit), Glutschmiede (Lavageysire), Frostgipfel (Glatteis), Sternengarten (geringe Schwerkraft), Eklipse (Verstärkungs-Pulse). Danach beginnt der Zyklus von vorn („II“, „III“ …) mit weiter steigender Kurve.
Gegner: 9 Verhaltensarten (Hüpfer, Sturzflieger, Teiler, Spucker, Koloss, Schemen, Laterne, Bombe …), jede mit eigenem Körper (Kröte mit Stielaugen, Panzerbuckel mit Fäusten, Quallenlaterne, Kapuzengeist …), Elite-Gegner mit Eigenschaften (Flink, Gepanzert, Regenerierend, Instabil, Rasend), Minibosse in den späten Wellen und acht Bosse mit Phasen und ganz eigener Gestalt (Düsterkönig, Dornenmutter, Sturmlaterne, Kristallwächter, Magmakoloss, Frostwyrm, Kometen-Orakel, Leerenfürst).
SportFighter hat mehrere Sportarten mit denselben drei Klassen (Angreifer/Stürmer, Verteidiger, Skiller); Tennis
steht schon als „kommt bald“ im Spielermenü. Welt, Monster und Ablauf eines Laufs sind für alle gleich, jede
Sportart bringt aber ihre eigenen Moves, Boss-Fähigkeiten und Upgrade-Karten mit (Run/Characters.cs, Sport).
Basketball (Player/Player.Hoops.cs, Posen in Player/PlayerRig.Hoops.cs): größere Spieler mit eigenen
Knochenlängen (PlayerBody) in Tanktop mit Nummer, Shorts, Crew-Socken und High-Tops. Beim Laufen und Stehen wird der Ball automatisch gedribbelt (reine Optik): Die offene Hand drückt ihn mit dem ganzen Arm nach unten (Ellbogen streckt sich, Handgelenk klappt ab), nimmt ihn auf dem Weg nach oben weich an und federt ihn bis zum Umkehrpunkt – im Spiel und auf dem Titelbild gleich (Player/DribbleMotion.cs). In
der Luft halten ihn beide Hände vor der Brust. Beim Fußball führen die Spieler den Ball beim Laufen abwechselnd mit beiden Füßen und stoßen ihn nach jedem Kontakt kurz nach vorn.
| Spieler | Rechtsklick | |
|---|---|---|
| Angreifer | DRE (Rot-Schwarz, Stirnband, Armsleeve, #3) | Dreier: Step-back, Sprungwurf im hohen Bogen genau aufs Fadenkreuz, kleine Explosion beim Einschlag („+3“) |
| Skiller | NOVA (Türkis-Magenta, Zöpfe, #11) | Crossover: zweimal durch die Beine, danach 3 s schneller, und alle Würfe fliegen durch Gegner hindurch |
| Verteidiger | TITAN (Navy-Gold, Bart, Knieschoner, #34) | Dunk: springt zum Fadenkreuz (bis 7,5 m) und hämmert den Ball in den Boden – Druckwellen in alle Richtungen mit Rückstoß und Schaden |
Linksklick ist ein Wurf, der wie der Schuss zurückkommt; ein Wurf in der Luft stößt ab (Bodenpass, der
Doppelsprung). Boss-Fähigkeiten: Alley-Oop (hoch, kurz hängen, auf den nächsten Gegner), Block (Sprung mit
hochgerissenen Armen, Geschosse fliegen zurück), Fastbreak (unverwundbarer Sprint, Gegner werden umgeworfen),
Stepback und Pump Fake (siehe unten).
83 eigene Upgrade-Karten (die passenden Fußball-Karten umbenannt, dazu Karten für jeden Move sowie z. B. Heiße Hand,
Brettwurf, Downtown, Skywalker, Splash Zone). Treffer und Effekte laufen über Combat/Court.cs.
Ev.Fake). Prüfen: Szenario hoopsmoves.https://splitzghost.github.io/SoccerFight/
Die Seite wird nach jeder Änderung automatisch neu gebaut (siehe Veröffentlichen). Am besten am Desktop mit Maus und Tastatur spielen.
SoccerFight/ mit Unity 6000.6.0f1 öffnenAssets/Scenes/Game.unity öffnenDie Szene enthält nur ein GameObject mit der Komponente Game, der Rest wird beim Start aufgebaut (~2 s).
Das Spiel startet im Titelbildschirm. Dahinter liegt die Ruinenhof-Grafik
Assets/Resources/Menu/Ruinenhof.png; sie füllt den ganzen Bildschirm (auch hinter der durchscheinenden Kopfleiste)
und dunkelt nach oben hin leicht ab. Die freigegebene plastische Cartoon-Kulisse zeigt nahe, verwitterte
Steinbögen, türkise Banner, Fackeln und Mondlicht. Der offene Rasen reicht fast bis zur Bildmitte und
bleibt frei für die separat animierte Spielfigur.
Die ruhigeren Bildränder geben den Bedienelementen Platz. Solange das Menü offen ist, zeichnet die
Kamera nur die Menüoberfläche statt der Arena.
Aufbau: oben das Logo aus Mondstein (Art/LogoArt.cs – eigene Blockbuchstaben, dunkle Steinkante, Moos an den
Kanten, Risse mit Kristalllicht; im O dreht sich ein echter Ball), in der Mitte der gewählte Spieler auf dem
Spielfeld, der den Ball hochhält – wer ihn oder sein Namensschild abschießt, öffnet die Spielerauswahl.
Links steht der Saisonrekord, rechts Spielmodus und der große SPIELEN-Knopf. Der Spielmodus-Knopf zeigt den Namen
des gewählten Levels (ERSTE SCHRITTE, WILDE HAINE, STURMFRONT, GLUTPROBE, FINALE EKLIPSE), darüber eine Zeile mit
Stages und Kristall-Faktor; ein Treffer auf ihn wechselt zum nächsten Level. Gesperrte Level tragen ein Schloss und
nennen die nötige Charakter-Stufe, SPIELEN startet sie nicht. Der Quest-Platzhalter ist entfernt. Die Leiste oben führt
zu Spielern, Shop, Events, Rangliste und Optionen. Rangliste, Freunde und Events sind Platzhalter-Seiten
(„kommt bald“), Info erklärt Steuerung und Spielprinzip. Beim allerersten Start öffnet das Menü auf der
Starterwahl (siehe „Fortschritt“) und lässt einen erst danach aufs Hauptmenü. SPIELEN: das Menü räumt sich weg, der Spieler tritt den
Ball direkt auf die Kamera zu, der Ball füllt das Bild, und hinter dem Aufblitzen beginnt der Lauf. Die Knöpfe und
Seiten verwenden die ursprüngliche Entwurfsgestaltung: gemalte, plastische Steinplatten in Petrol mit
breiten Facettenkanten, eingravierten Spiralen und Sportsymbolen. Gold hebt Hauptaktionen hervor. In der oberen Leiste ist nur der aktive Menüpunkt
hell; die übrigen Platten und Symbole bleiben dunkel, damit der Seiteninhalt im Mittelpunkt steht.
Die Grafiken werden direkt aus den freigegebenen Probebildern ausgeschnitten, einschließlich ihrer gemalten
Symbole und festen Beschriftungen. Es gibt keine vereinfachte oder neu generierte Ersatzgestaltung.
tools/extract-menu-buttons.py --sources Inspiration/MenuPreviews erzeugt die Atlanten unter
Resources/UiButtons/Exact/; layout.json hält Herkunftsbild und Ausschnitt jedes Elements fest. Danach bessert
node tools/fix-exact-art.js einzelne Ausschnitte nach (Spielmodus-Knopf ohne Schriftzug, leere Namensplatte,
AN/AUS-Schalter immer mit AUS links, Symbole ohne dunklen Kasten). Tafeln, Rahmen, Belohnungskarten und Knopfplatten
baut es jedes Mal neu aus dem Probebild: die dunkle Innenfläche folgt genau der Innenkante des Steinrahmens (gestufte
Ecksteine oben, Schrägen unten, Namenslasche der Belohnungskarte), die Knopfplatten haben eine durchgehende Fläche mit
vollständigen Spiralen an beiden Enden. Karten halten ihre Bilder und Knöpfe innerhalb des gemalten Rahmens
(MenuUi.PanelInset); Spieler- und Shopbilder liegen hinter den Ecksteinen (MenuUi.FrameOnTop), der WÄHLEN-Knopf der
Belohnungskarten steht auf der Innenkante des Rahmens. Texte, deren Zeichen die gemalte Schrift nicht kennt
(Ziffern, „·“, Klammern), stehen ganz in der normalen Menüschrift ().
und laden diese Originalgrafiken für Shop, Spielerauswahl, Optionen,
Pause, Duo, Entwicklermenü und Belohnungsbuttons. Leere Flächen für wechselnde Werte stammen ebenfalls
aus denselben Originalplatten; verwendet ausgeschnittene Originalbuchstaben für
veränderliche Menübeschriftungen. Preise, Stufen, Raumcodes und Tastenbelegungen bleiben aktuell und bedienbar.
Die Funktionen bleiben gleich; das Hauptmenü zeigt keine Quests.
Statt eines Mauszeigers gibt es das Fadenkreuz aus dem Spiel. Knöpfe werden nicht angeklickt, sondern abgeschossen: Ein Linksklick tritt einen Ball aus der Ich-Perspektive ins Bild – er startet groß am unteren Rand, wird auf dem Weg nach hinten kleiner und trifft genau dort, wo das Fadenkreuz stand. Erst beim Aufschlag löst der Knopf aus; der Ball prallt zurück in Richtung Kamera und fällt mit Schwerkraft, Drall und Luftwiderstand aus dem Bild, während der Bildschirm dahinter längst wechselt. Ein Schuss ins Leere macht nichts außer fliegen und fallen. Die Einstellungskarte ist die Ausnahme: Innerhalb der Karte arbeiten Schalter, Regler und Tastenfelder ganz normal, geschossen wird nur daneben.
Zurück ins Hauptmenü kommt man über Pause → Hauptmenü (Game.ToMenu).
Charakter-Stufen 1–10 (Meta/CharacterProgression.cs): Jeder gekaufte oder als Starter gewählte Charakter
beginnt auf Stufe 1 und wird separat gespeichert. Verbessert wird er in der Spielerauswahl mit dem UPGRADE-Knopf
(Kristalle). Die Kosten steigen quadratisch. Jede Stufe erhöht allgemeinen Angriff, maximales Leben,
Schadensminderung, Fähigkeits-Abklingzeiten und Wirkungsfläche; kleine Tempoboni kommen dazu. Stufe 10 ist das Maximum.
Die Charakter-Stufen 1 / 3 / 5 / 7 / 9 öffnen die fünf Level.
Spielerauswahl (UI/CharacterPage.cs, Reiter SPIELER oder ein Treffer auf die Figur im Hauptmenü): links steht
der Spieler groß vor seinem Steinbild am Himmel, rechts Stufe (Bronze-Abzeichen), Name und Klasse, die
Klassenfähigkeit der rechten Maustaste als Medaillon, der Klassenbonus in einem Satz, die drei Werte Leben, Schaden
und Tempo (dauerhafte Werte mit Klasse, persönlichem Bonus und Stufe, ohne Laufkarten und Krits) und die Knöpfe
AUSWÄHLEN und UPGRADE. Unten liegt die Figurenleiste mit allen Spielern; sie lässt sich mit den Pfeilen
schieben, dahinter warten Boxen und Tennis als „kommt bald“. Oben bleibt die normale Menüleiste mit der echten
Kristall- und Münzanzeige.
CharacterProgression.UpgradeCost). Zeigt man darauf,
erscheinen über den Werten die Zuwächse in Grün. Ein Upgrade löst eine grüne Welle aus: Ring und Funken am Knopf,
die Stufe springt, die Werte zählen hoch und leuchten nacheinander auf, „+8“ steigt aus den Platten. Zu wenig
Kristalle lassen den Knopf zittern; auf Stufe 10 steht MAX.Alles lebt: Die Figur atmet (einatmen zügig, ausatmen lang), verlagert langsam ihr Gewicht – die Sohlen bleiben
stehen –, neigt den Kopf zum Zeiger, und Zopf oder Flechten schwingen mit Trägheit und im Wind nach. Sie ist dabei ein
ganzes Bild, das über ein feines Gitter weich verformt wird (UI/FigureWarp.cs), kein zerschnittenes. Dunst und
Bodennebel ziehen in böigem Wind, Fackeln flackern, Lichtpunkte treiben, und Kulisse, Steinbild, Figur und Nebel
verschieben sich mit dem Zeiger leicht gegeneinander. Knöpfe, Medaillon und Kacheln heben sich unter dem Zeiger von
ihrem Schatten ab, ein Lichtstreif gleitet darüber; ein möglicher AUSWÄHLEN- oder bezahlbarer UPGRADE-Knopf atmet
leise. Beim Öffnen fahren die Teile gestaffelt ein. Beim Wechsel tritt die alte Figur ab, die neue kommt von links
und federt in den Stand (sie sackt beim Ankommen kurz ein), das Steinbild blendet über, Name, Medaillon und Bonus
folgen, die Werte zählen um. AUSWÄHLEN lässt die Figur kurz aufhüpfen, ein goldener Ring läuft über den Boden.
Die Grafik stammt aus sechs Bildentwürfen (Inspiration/CharacterMenuPreviews, nicht versioniert).
tools/newdesign/playerselect.js zerlegt sie in Ebenen (Resources/Menu/Players): Wo mindestens vier Entwürfe
übereinstimmen, ist die Kulisse bekannt; was abweicht, ist Figur oder Steinbild – getrennt über die Farben. Die
Lücken hinter Figur, Tafel und Leiste werden aufgefüllt, Zahlen aus den Platten entfernt, Figuren und Teile mit
Real-ESRGAN verdoppelt. Auf anderen Bildschirmformaten steht das Bild mittig, seine weichgezeichnete Kulisse füllt
den Rest.
Kristall- und Münzanzeige (UI/CurrencyBar.cs): überall im Menü dieselbe Leiste
(Symbol + Steinleiste, weiße Zahl) – in der oberen Menüleiste Kristalle links, Münzen rechts; ein Treffer öffnet den
Shop. tools/newdesign/currency.js stellt die Leisten aus tools/newdesign/sources/currency.png frei (Resources/Menu/Currency).
Drei Klassen, drei Talente (Meta/ClassDefs.cs, alle Zahlen in ClassTuning):
| Klasse | Talent | Wirkung |
|---|---|---|
| Stürmer | Schussgewalt | +30 % Schaden mit allen Schüssen (Schuss, Rückpraller, Echo-Bälle, Power-Schuss, Fallrückzieher, Abstoß). Verstärkte Treffer schlagen mit einem heißen Wuchtstern ein, die Schadenszahl leuchtet rot |
| Skiller | Technikmeister | Trick-Fähigkeiten (Rainbow Flick, Übersteiger, Tunnel, Lockvogel) laufen 35 % schneller ab (gleiche Strecke in kürzerer Zeit), machen +25 % Schaden und geben danach 1,6 s lang +30 % Tempo mit violetten Nachbildern |
| Verteidiger | Kopfballspezialist | +40 Leben (160 statt 120), 15 % weniger erlittener Schaden (zusätzlich zu Schienbeinschonern), dafür 10 % weniger Schaden. Nur Verteidiger können den Kopfball spielen (+25 % Schaden) |
Boxen (Player/Player.Boxing.cs, Posen in Player/PlayerRig.Boxing.cs, Druckwellen in Combat/FistWaves.cs):
kein Ball – die Boxer kämpfen mit den Fäusten. Grundhaltung ist der Boxstand: Führhand vorn auf Kinnhöhe, Schlaghand am
Kinn, Füße versetzt, die Knie federn auf den Fußballen; beim Laufen pumpen die Fäuste leicht mit. Linksklick schlägt
eine Kombination: Jab (Führhand), Gerade (Schlaghand, die Hüfte dreht ein, die Ferse geht hoch), und der dritte Schlag
in Folge ein Haken (Bogen auf Kopfhöhe, trifft am härtesten). Jeder Schlag drückt die Luft vor dem Handschuh zu einer
hellen Druckwelle zusammen, die ~5 m weiterfliegt, dabei breiter und blasser wird und am Gegner mit einem
Schlagstern platzt – so trifft ein Boxer auch Flieger knapp über ihm. Jeder Arm spielt seinen Schlag als eigene
Zeitlinie (ausholen, schnappen, halten, zurückziehen), damit eine schnelle Eins-Zwei sauber ineinanderläuft. Ein Schlag
nach unten in der Luft stößt hoch (Luftschlag, der Doppelsprung). Das Trikot steckt in der Hose: der Hosenbund liegt
über dem Rumpf (PlayerBody.Tucked).
| Spieler | Rechtsklick | |
|---|---|---|
| Angreifer | KAI (Orange-Schwarz, rote Handschuhe) | Kraftgerade: eindrehen, Schritt nach vorn, eine Gerade mit allem – die große Druckwelle fliegt 11 m weit durch jeden Gegner |
| Verteidigerin | VERA (Blau-Gold, Flechtdutt) | Deckung: Fäuste vors Gesicht, 1,1 s kommt nichts durch; jeder abgefangene Treffer lädt den Konter am Ende auf (+12 Schaden pro Treffer, bis 5) |
| Skillerin | LUZ (Grün-Gelb, Pferdeschwanz) | Konterschritt: blitzschneller, unverwundbarer Schritt in Laufrichtung (auch in der Luft); der nächste Schlag ist ein sicherer Konter – kritisch und durchschlagend |
Boss-Fähigkeiten: Uppercut (aus der Hocke nach oben, schleudert Gegner in die Luft, steile Welle bis zu den
Fliegern), Doppelhaken (zwei Haken aus der Drehung, Ringwellen um den Körper), Bodenschlag (beide Fäuste in den
Boden, Bebenwelle betäubt), Schattenboxer (ein Schatten bleibt stehen, lenkt die Gegner ab und boxt selbst) und
Trommelfeuer (acht schnelle Schläge aufs Fadenkreuz). 74 eigene Upgrade-Karten (UpgradeDb.Boxing): die
allgemeinen in Box-Sprache (Doppelschlag = Fächerwellen, Seilabpraller, Feuerfaust …) und Karten für jeden Move, dazu
z. B. Kombination (+50 % auf den Haken), Durchschlag, Eiserne Faust (jeder Haken mit Ringwelle) und K.O.-König
(angeschlagene normale Gegner gehen sofort zu Boden). Die Figuren kommen aus Inspiration/boxer/Figuren
(characters.def.js, file), Spielerauswahl aus Inspiration/boxer/Auswahlentwuerfe (playerselect.box.js, eigene
Kulisse scene_box), Shop-Karten aus shop.box.js. Prüfen: Szenario boxing (alle Moves, Ultis, Karten, Menüs).
Kopfball (neue Fähigkeit, nur Verteidiger, 4,5 s): Der Fuß lupft den Ball hoch, der Spieler steigt hinein und köpft ihn wuchtig Richtung Fadenkreuz. Der Getroffene wird 1,1 s betäubt, der Ball springt von seinem Kopf hoch und kommt zurück. Dazu drei Upgrade-Karten: Lufthoheit (+15 % Schaden), Kopfnuss (längere Betäubung), Flugkopfball (fliegt durch zwei Gegner).
Neun Spieler (Run/Characters.cs), einer pro Klasse und Sportart: RIO, BRUNO und MIRA (Fußball), DRE, TITAN und
NOVA (Basketball), KAI, VERA und LUZ (Boxen), jeder mit einem kleinen persönlichen Perk zusätzlich zum Klassen-Talent (z. B. DRE: Dreier
+20 % Schaden, TITAN: +25 Leben und größere Druckwellen, NOVA: längerer Crossover-Boost). Die früheren Shop-Spieler
KAI, ZARA, IVO, TALA, LUNA und NICO sind weg; wer sie gekauft hatte, bekommt die Münzen einmalig zurück (Profile, Version 2) –
der neue Boxer KAI gehört damit nicht automatisch dazu.
Erster Start (UI/OnboardingPages.cs): Das Menü öffnet auf Wähle deinen Spieler – ein Tab pro Sportart mit je drei
Karten (Porträt, Klasse, Talent, Rechtsklick-Move und Perk); ein beliebiger Spieler ist gratis, Los geht's speichert die Wahl.
Fähigkeiten-Menü (UI/SkillPage.cs): oben die vier Plätze mit ihren Tasten, darunter alle Fähigkeiten. Eine
gekaufte Fähigkeit abschießen legt sie in den nächsten freien Platz, nochmal (oder ihren Platz) abschießen nimmt sie
heraus. Nicht gekaufte zeigen ihren Preis und führen in den Shop; was das Talent der Klasse verstärkt, steht in der Ecke.
Shop (UI/ShopPage.cs, Karten UI/ShopCard.cs, Logik Meta/Shop.cs): alle Spieler als gemalte Karten in einer
Reihe – hohe Karten einzeln, kleine zu zweit übereinander –, vor der hellen Menüszene. In der schwarzen Namensleiste
steht der Preis mit Münze, bei gekauften Spielern der gelbe Knopf AUSWÄHLEN, beim gewählten grün GEWÄHLT (dazu eine
grüne Linie). Unter dem Zeiger hebt sich die Karte an. Kaufen braucht zwei Treffer – der erste macht aus dem Preis
ein pulsierendes KAUFEN?, der zweite kauft –, damit kein verirrter Ball Münzen ausgibt. Die Karten und Leistenteile
schneidet tools/newdesign/shop.js aus der Vorlage in Inspiration/Shop UI (Resources/Menu/Shop).
Münzen (Run/CoinDrops.cs, UI/CoinCounter.cs, Regeln in Meta/CoinRewards.cs): Münzen springen aus besiegten
Gegnern, klingen beim Aufprall, hüpfen, drehen sich und glitzern, heben nach einer halben Sekunde ab und fliegen auf
einer geschwungenen Bahn mit Funkenschweif in den Zähler oben rechts. Erst dort werden sie gutgeschrieben: der Zähler
ploppt, zählt hoch, ein Ring und Funken springen vom Symbol, ein Glockenton steigt mit jeder weiteren Münze eine Stufe
höher. Was bei Laufende noch unterwegs ist, wird sofort ausgezahlt.
Speicherstand (Meta/Profile.cs): ein JSON-Dokument in PlayerPrefs (im Browser IndexedDB) mit Besitz, Auswahl,
Loadout, Guthaben und Stufen für spätere Upgrades; gespeichert wird nach Käufen, Wellen, Stages, am Laufende und beim
Wechsel ins Menü. Ton (Audio/Sfx.cs): Die Geräusche werden wie die Grafik beim Start synthetisiert,
Lautstärke unter Optionen → Ton.
Figuren-Grafik: Jede Figur ist ein Bogen aus dem Design (Inspiration/CharackterNewDesign, nicht im Repo). Das
Node-Skript tools/newdesign/characters.js schneidet aus der Seitenansicht Kopf, Hals, Rumpf, Hose, Oberschenkel,
Unterschenkel, Schuh, Oberarm, Unterarm und Hand aus (Umrisse und Gelenkpunkte stehen in characters.def.js), gibt
den Gliedern runde, überlappende Gelenkenden, füllt verdeckte Stellen (Rumpf hinter dem Arm) mit dem Grundstoff auf
und legt pro Figur einen Atlas + JSON nach Resources/Characters. Das JSON enthält auch das Skelett (Knochenlängen,
Schulter, Hals, Kopf, Zopf-Wurzel), das PlayerArt beim Start in den PlayerBody der Figur schreibt – das Rig
bewegt die Teile damit wie gehabt (IK, Federn). Miras Pferdeschwanz und Novas Zöpfe schwingen als eigenes Teil nach;
Dre trägt den Kompressionsärmel nur am vorderen Arm. Beim Dribbeln führen DRE, TITAN und NOVA den Ball mit einer offenen
Hand: Oberarm und Ellbogen führen den Druck nach unten und nehmen den aufsteigenden Ball wieder an; das Handgelenk folgt nur leicht. Auf dem Titelbild (und auf der gewählten Spielerkarte) dribbeln sie ruhig mit 1,25 Schlägen pro Sekunde; im Shop und auf den übrigen Karten stehen sie wie die Fußballer locker mit dem Ball am Fuß und wippen leicht im Takt. Die zusätzlichen
Hände stammen aus tools/newdesign/sources/dribble-hands.png und werden von characters.js in die Figurenatlanten aufgenommen.
Für die übrigen Basketball-Moves wird weiterhin die gemessene Faustlänge verwendet (PlayerRig.Palm/GripNear). Der
Ball springt vor der gemessenen Schuhspitze auf statt darauf. Neue oder bessere Bögen → Umrisse/Gelenke in characters.def.js
anpassen und node characters.js laufen lassen (SF_DEBUG=<ordner> schreibt zusätzlich Prüfbilder).
Die Schnitte an den Gelenken laufen weich aus, das Hosenbein ist an der Hüfte rund. Die Konturen von Armen, Beinen und
Schuhen folgen jeweils nur dem vorderen Körperteil der Vorlage; das hintere Bein und der zweite Schuh werden nicht mitkopiert.
Neben dem Atlas entsteht eine Umriss-Maske (<id>_rim.png): Der
Shader SF_Character setzt das Mondlicht nur an die echte Außenkante, nicht an die Schnittkanten zwischen den Teilen.
Die Atlanten haben normales (nicht vormultipliziertes) Alpha; im Menü zeichnet SF_UIFigure die Teile.
Die Farben im Kit (Characters.cs) färben nur noch Akzente wie das Leuchten unter den Schuhen.
| Taste | Aktion |
|---|---|
| A / D | Laufen |
| Leertaste | Springen (länger halten = höher), auch durch Plattformen hindurch nach oben |
| S | Durch die Plattform unter dir nach unten fallen (in der Luft gehalten: durch alle Plattformen) |
| Linksklick | Schuss Richtung Mauszeiger (Cooldown 0,45 s). Gedrückt halten = Dauerfeuer: geschossen wird, sobald der Ball zurück ist und der Cooldown abläuft. In der Luft stößt dich der Rückstoß in die Gegenrichtung: einmal pro Sprung, nach unten geschossen wie ein Doppelsprung |
| Rechtsklick | Power-Schuss (nur im Stand, Cooldown 3,5 s): langes Ausholen, dann ein gerader goldener Schuss, der durch alle Gegner hindurchfliegt. Macht dafür weniger Schaden (12 statt 18) |
| E / Q / R / F | Fähigkeit 1 bis 4 – die vier Plätze deines Loadouts (siehe unten) |
| V | Ulti – die große Attacke deines Spielers, sobald ihre Leiste voll ist (siehe „Ultis“) |
| 1 / 2 / 3 | Upgrade- bzw. Fähigkeitskarte wählen |
| Esc | Pausemenü (Weiter, Einstellungen, Neu starten, Hauptmenü, Beenden) |
| F1 | FPS-Anzeige an/aus |
| F2 | VSync an/aus (aus = unbegrenzte FPS) |
| F3 | Developer-Modus (auch im Pausemenü): Unverwundbar, keine Abklingzeiten, Ein-Treffer-Kills, Spieltempo, Stage-Sprung, Welle überspringen, Boss/Gegner rufen, Karten öffnen, jedes Upgrade gezielt hinzufügen, Live-Zahlen. Dev-Läufe zählen nicht für den Rekord |
| Enter | Neuer Lauf nach Niederlage |
Tod-Menü: Endet ein Lauf (Niederlage oder Sieg), erscheint eine Steintafel mit der Bilanz – wo der Lauf endete, besiegte Gegner, Zeit, Upgrades, verdiente Münzen, Rekord und die gesammelten Upgrades – und zwei Knöpfen: Nochmal spielen (auch Enter) und Hauptmenü. Im Duo startet nur der Host den nächsten Lauf.
Jeder Spieler hat eine eigene Ulti auf V (im Pausemenü umbelegbar). Ihre Leiste ist das große Abzeichen mit dem
Gesicht des Spielers links neben den Fähigkeiten: Sie füllt sich mit dem Schaden, den du machst (an Bossen zählt er
halb, die Ulti selbst zählt nicht). Eine volle Leiste kostet so viel Schaden, wie eine Welle ungefähr an Leben mitbringt
(Player.UltiCostPerBudget × Wellen-Budget × Lebens-Skalierung, Stage 1 rund 300), also etwa eine Ulti pro Welle. Ist sie voll, leuchtet
das Abzeichen, ein Lichtpunkt kreist, und an den Füßen steigen Funken auf.
Jede Ulti beginnt mit einem Kinomoment: kurze Zeitlupe, das Bild wird dunkler und blasser, die Kamera geht nah ran,
hinter der Figur ein Lichtkranz mit Strahlen, und der Name der Ulti fährt groß ins Bild. Während der Ulti ist der Spieler
unverwundbar. Ihr Schaden wächst mit gut der Hälfte der Monster-Stärke mit (Player.UltiPower).
| Spieler | Ulti | Was passiert |
|---|---|---|
| RIO | Jahrhundert-Volley | Lupft den Ball mit der Fußspitze hoch über den Kopf, schaut ihm nach und nimmt ihn volley: ein Feuerkomet (Ball in Flammen, Glut, Rauch) fliegt geradeaus durch die ganze Arena, trifft jeden Gegner auf dem Weg und setzt ihn in Brand; am Ende (Wand, Boden, Himmel) eine große Explosion mit Funkenregen und brennendem Boden |
| BRUNO | Bollwerk | Knie hoch, Arme weit, dann ein Stampfer (Druckwelle, Staubwände, Risse) und eine goldene Kuppel aus Sechseck-Glas um ihn, 5 s lang: feindliche Geschosse prallen ab und fliegen auf die Monster zurück, Gegner werden hinausgedrückt und bekommen Schaden. Am Ende zerspringt die Kuppel in goldene Scherben und trifft alles in der Nähe |
| MIRA | Ballzauber-Sturm | Lupft den Ball über den Kopf und schwebt ein Stück hoch, der Ball teilt sich in fünf Zauberbälle in Regenbogenfarben. Sie kreisen immer schneller um sie (vorne groß, hinten kleiner und hinter ihr) und schießen dann nacheinander mit Regenbogenspur auf die nächsten Gegner; Mira zeigt jedem sein Ziel |
| DRE | Buzzer Beater | Auf bis zu fünf Gegnern rasten Fadenkreuze ein, Dre springt hoch und wirft fünf Bälle im hohen Bogen; eine Wurfuhr zählt 3-2-1, die Würfe folgen ihren Gegnern und schlagen beim BUZZER! alle zugleich ein (je „+3“) |
| TITAN | Meteor-Dunk | Am Ziel wächst ein Schatten, Titan springt aus dem Bild (die Kamera bleibt am Ziel), hängt kurz und kracht brennend wie ein Meteor herunter: drei Druckwellen, Gesteinsbrocken, Feuer, ein glühender Krater, der langsam abkühlt |
| KAI | K.O.-Schlag | Die Schlaghand lädt sich auf (Funken strömen hinein), dann hechtet Kai flach zum stärksten Gegner in Reichweite und schlägt eine Gerade, die die Arena erschüttert: sicherer kritischer Treffer, Explosion, eine große Druckwelle fliegt weiter durch alles dahinter, „K.O.!“ |
| VERA | Dreifach-Beben | Dreimal die Fäuste über den Kopf und mit dem ganzen Körper in den Boden, dazwischen ein kleiner Satz nach oben; jede Bebenwelle rollt weiter als die letzte und betäubt alles am Boden |
| LUZ | Schmetterlingstanz | Tanzt von Gegner zu Gegner (bis zu sieben in der Nähe), landet hinter jedem und setzt eine Eins-Zwei, jeder ist betäubt; am Ende die Faust in die Höhe, grüne und goldene Lichtschwingen, alle Getroffenen bekommen noch einen mit |
Code: Leiste, Ablauf und Zahlen in Player/Player.Ulti.cs, Posen in Player/PlayerRig.Ulti.cs, Komet, Kuppel, Zauberbälle,
Würfe, Fadenkreuze, Meteor-Marke und Krater in Combat/Ultis.cs, Abzeichen, Name und Wurfuhr in UI/Hud.Ulti.cs. Im Duo
sieht der Partner alles mit (Ereignis Ev.Ulti); Schaden macht nur, wer die Ulti auslöst. Screenshots: Szenario ultis.
Schuss und Power-Schuss liegen fest auf den Maustasten. Alles andere wird nicht einzeln belegt: Es gibt vier Plätze auf E, Q, R und F, und das Loadout aus dem Fähigkeiten-Menü liegt der Reihe nach darin – die erste Fähigkeit auf Platz 1, die zweite auf Platz 2 und so weiter. Mehr als vier gibt es pro Lauf nicht; ist das Loadout voll, bringt jeder Boss eine zweite Belohnungskarte. Elf Fähigkeiten gibt es (eine davon nur für Verteidiger), drei suchst du dir beim ersten Start aus, die anderen kaufst du im Shop:
| Fähigkeit | Was sie tut |
|---|---|
| Rainbow Flick | Der Ball fliegt im Regenbogen über die Gegner und schlägt mit Flächenschaden ein (Cooldown 6 s) |
| Ball hochhalten | Im Takt tippen, jede Berührung heilt; perfekt getimt doppelt, alle 10 Berührungen ein Bonus |
| Übersteiger | Täuschung über den Ball, dann ein unverwundbarer Dash (~5 m) mitten durch die Gegner (3,5 s) |
| Fallrückzieher | Nur in der Luft: Salto mit Scherenschlag, der Ball explodiert beim ersten Aufprall (5 s) |
| Grätsche | Rutscht flach über den Rasen (4 s): wirft Gegner um, die dann kurz gar nichts tun, und duckt sich unter brusthohen Geschossen weg. Auf Eis rutschst du deutlich weiter |
| Abstoß | Drischt den Ball aus dem Bild (8 s). Nach gut einer Sekunde kommt er als Meteor genau auf dem markierten Punkt herunter (55 Flächenschaden) – in der Wartezeit bist du ohne Ball |
| Mauer | Drei Geister-Spieler stellen sich 4 s lang in den Weg (12 s): sie schlucken Geschosse, halten Gegner auf, und dein eigener Ball prallt von ihnen ab |
| Tunnel | Der Ball geht durch die Beine (6 s): Der Getunnelte taumelt und nimmt 3 s lang 40 % mehr Schaden von allem |
| Lockvogel | Körpertäuschung zur Seite (7 s). Das Nachbild bleibt stehen, die Gegner greifen es an und es platzt am Ende mit einem Stoß |
| Schlusspfiff | Keine Abklingzeit, sondern eine Leiste, die sich mit jedem Sieg füllt: Ein Pfiff friert alle Gegner 2 s ein und lässt ihre Geschosse aus der Luft fallen (nur im Shop) |
| Kopfball | Nur Verteidiger (4,5 s): Ball hochlupfen, hineinsteigen, wuchtig aufs Fadenkreuz köpfen – der Getroffene ist 1,1 s betäubt, der Ball springt zurück |
Bewegung, die beiden Schüsse und die vier Fähigkeits-Plätze lassen sich im Pausemenü unter Einstellungen → Steuerung frei belegen (auch Maustasten). Dort gibt es außerdem Vollbild (nur im Build), VSync, FPS-Anzeige, Bildschirmwackeln, Leuchten (Bloom), den Farbsaum-Effekt und die Lautstärke. Alles wird automatisch gespeichert.
Level.Generate), Stage 1 immer gleich, ab
Stage 2 gewürfelt aus dem Lauf-Seed: mal wenige, mal viele Ebenen, mal kleine, mal große Stücke, mal stillstehende, mal
seitlich gleitende oder als Aufzug fahrende. Stehende Stücke (Sockel auf Säulen, Riesenpilze, Baumstümpfe, Gestelle,
Eis- und Runensäulen) reichen bis auf den Rasen und werden gleichmäßig so skaliert, dass ihre Oberkante einen Sprung
hoch liegt; schwebende Inseln, Schollen, Platten und Träger bilden die höheren Ebenen. Hängende Bretter (Seile,
Bernsteinhain), Balken (Ketten, Regenwacht) und Ambosse (Ketten, Glutschmiede) hängen an Seilen bzw. Ketten, die über
den Bildrand reichen. Bretter und Ambosse haben genau zwei Aufhängungen, ohne zusätzliche Gestelle oder Tragbalken. Unter manchen schwebenden Stücken
hängt eine Laterne, ein Banner oder ein Stern. Bilder werden nie verzerrt, nur gleichmäßig skaliert. Alle Plattformen
sind von unten durchspringbar; wer auf einer bewegten steht, fährt mit. Blobs springen dem Spieler gezielt hinterher
(erkennbar am langen Ducken davor) und hüpfen von der Kante, wenn der Spieler unten ist. Ball, Schatten, Gras und
Rainbow Flick funktionieren auf jeder Ebene.Inspiration/StagesNewDesigns: oben eine
Szene, darunter 12 Nahaufnahmen). tools/newdesign/stages.js (Einstellungen in stages.def.js) schneidet daraus:
die Kulisse (die Szene ohne Plattformen, Figur und Rahmenobjekte, im selben Maßstab wie in der Vorlage; die Lücken
füllt ein inhaltsbasiertes Auffüllverfahren in inpaint.js aus passenden Stücken der Szene – Mond, Eklipse & Co.
werden nie kopiert –, darüber geht der Himmel weiter, seitlich gespiegelt, darunter eine Nebelbank),
den Boden (nahtlos kachelbar, nach unten weitergemalt und abgedunkelt) und alle Einzelteile der Nahaufnahmen,
freigestellt vom dunklen Hintergrund (cutout.js; Leuchthöfe werden entfernt, das Spiel malt den Schein selbst).
Daraus erzeugt: schwebende Plattformköpfe ohne Säule mit gebrochener Unterkante, hängende Bretter, Balken und Ambosse,
kachelbares Seil und Kette. Alles wird per KI (Real-ESRGAN, aiup.js) auf die dreifache Auflösung gebracht, die
Kulisse bis 4096 px Breite; im Browser werden die Bilder komprimiert (Crunch). Im Spiel (WorldEnvironment) von hinten
nach vorn: Himmel, Kulisse mit eigenen Lichtern (Mond, Laternen, Fenster, Lava, Polarlicht, Eklipse-Ring, Sterne),
Nebelbänder, wenige schwebende Brocken im Sternengarten und in der Eklipse, der Boden ohne kleine nicht benutzbare Deko-Objekte und an den Arenaenden hinter den Toren der
Bodenabschluss mit Fels plus ein großes Rahmenstück (Baum, Monolith, Flutlichtmast …). Bewegt: flackernde Lichter,
pulsierende Kristalle mit Lichtfunken, schaukelnde Laternen, wippende Brocken, ziehender Nebel, Glühwürmchen
(Mondlicht, Bernstein, Grotte), Gras im Wind (Mondlicht) und das Wetter der Stage. Beim Stage-Wechsel wird die ganze
Welt hinter dem Belohnungsbildschirm ausgetauscht, die Bilder der alten Stage werden wieder freigegeben.SoccerFight/Assets/Scripts)| Ordner | Inhalt |
|---|---|
Core/ | Game (Einstiegspunkt + Update-Reihenfolge), Input, Federn/Easing/IK (MathUtil), Hit-Stop & Slow-Mo (TimeFx) |
Art/ | SDF-Rasterizer (SdfCanvas, Sdf), Farbpalette, Laden der ausgeschnittenen Spielfiguren (PlayerArt), prozedurale Grafiken für Ball, die 17 Monster-Körper (MonsterArt), die Welt jeder Stage aus ihrem Design-Bogen (StageKit), Pflanzen-Atlas und Sprite-Material (DesignArt), Titelbildschirm-Grafiken (MenuArt), Pflanzen (FoliageArt); ArtJobs erzeugt prozedurale Grafiken parallel auf Worker-Threads (im Browser nacheinander, siehe Par), ArtQueue die Grafik neuer Stages zur Laufzeit |
World/ | Begehbare Geometrie, Plattform-Layouts und -Bewegung (Level), Plattform-Darstellung (PlatformViews), die Spielwelt aus Parallax-Ebenen (WorldEnvironment), Vegetations-Meshes mit GPU-Wind (FoliageLayer + Shader SF_Foliage), lebendige Details wie Wolken, Fledermäuse, Wasserfälle, Blätter, Laternen, Geisterlichter (Ambient) |
Player/ | Bewegung & Fähigkeiten inkl. Hochhalten und Luft-Rückstoß (Player), prozedurale Animation mit IK, Bremsen und Drehung (PlayerRig), Nachbilder |
Ball/ | Dribbeln, Schuss, Regenbogen-Bogen, Rückkehr |
Meta/ | Fortschritt über Läufe hinweg, alles datengetrieben: Währungen (Currencies), Speicherstand und Geldbörse (Profile, Wallet), Klassen und ihre Talente (ClassDefs, Zahlen in ClassTuning), dauerhafte Passive aus Talent/Perk/gekauften Stufen (Passives), Fähigkeiten mit Kategorie, Preis und Klassen-Sperre (SkillCatalog), Shop-Katalog und Kasse (Shop), Münz-Regeln (CoinRewards) |
Audio/ | Synthetisierte Geräusche und ihr Stimmen-Pool (Sfx) |
Run/ | Roguelite-Lauf: Zustandsautomat (RunDirector), Spielerfiguren mit Klasse, Perk, Preis und Farb-Kit (), Münzen im Spiel (), Lauf-Zustand (), Schwierigkeitskurve (), Upgrade-Datenbank und Kartenziehung (), Werte des Builds (), Fähigkeiten (), Stage-Themen (), Spezialregeln und Gefahren (), Arena und Körper einer Stage vorbereiten und eintauschen () |
Difficulty.cs (Leben, Schaden, Tempo, Budget, Elite-Chance, Minibosse, Boss-Werte), Grundwerte der Gegner in EnemyDefs.cs, Heilung nach Welle/Boss in RunDirectorDevMode.cs, Panel in UI/DevPanel.cs, Aktionen (Dev*-Methoden) in RunDirectorUpgradeDb (Upgrades.cs), Seltenheits-Gewichte in UpgradeRoller.WeightsKit), Wetter, Gegner, Boss (samt Körper Look) und Regel in StageThemes.csRunState.RoundsPerUpgrade (heute 2)MonsterArt.cs (Form, Teile, Augen, Ketten, Animationsart)RunState.MaxSkills (heute 4); welche Fähigkeit auf welcher Taste liegt, ergibt sich aus der Reihenfolge in RunState.Skills (Player.PressSkill, Hud.LayoutSlots)Player.cs (Tackle*, Punt*, Wall*, Nutmeg*, Decoy*, Whistle*), Wirkung in den gleichnamigen Start/Update-Methoden; Mauer in Combat/Barrier.cs, Lockvogel in Combat/Decoys.cs, Meteor im Ball.Punt-ZustandCombat.OnKill, Wirkung in Player.BlowWhistlePlayer.UltiCostPerBudget, Timing und Schaden als Konstanten oben in Player/Player.Ulti.cs, welcher Spieler welche Ulti hat in UltiDefs.OfPlayer.cs (Tempo, Sprung, Cooldowns, Schaden)KickWindup/KickContact/... und FlickSet/FlickRoll/... in Player.csNach jeder Antwort von Claude Code startet ein Stop-Hook (.claude/settings.local.json) im Hintergrund tools/publish.ps1:
main gepusht.Assets, Packages oder ProjectSettings geändert haben, wird das Projekt nach .build/project gespiegelt
(der offene Editor sperrt das Original) und dort per Batchmode als WebGL gebaut.gh-pages, den GitHub Pages ausliefert.Von Hand geht es mit powershell -File tools\publish.ps1 (mit -Force wird auch ohne Änderung neu gebaut).
Visuelle Prüfung: tools\capture.ps1 -Scenario run (Stage-Karte, Welle, Karten, Fähigkeitswahl, Boss, alle 8 Themen,
Zusammenfassung), -Scenario bestiary (alle Monster-Körper), -Scenario layouts (die Arenen aller Stages samt
Mitfahr-Test), -Scenario stages (die Welt jeder Stage aus mehreren Blickwinkeln, Layout im Log), -Scenario blackhole (Singularität am Zielpunkt), -Scenario menu (Titelbildschirm, Ballschuss, Seitenwechsel), -Scenario newskills (Grätsche, Abstoß, Mauer, Tunnel, Lockvogel, Schlusspfiff) und -Scenario sim (ein Bot spielt einen echten Lauf
und protokolliert jede Phase im Unity-Log).
Protokoll: .build/publish.log, Unity-Log des letzten Builds: .build/unity-build.log.
Für die Pushes muss die GitHub-CLI eingeloggt sein (gh auth login).
Inter (SIL Open Font License 1.1) liegt in SoccerFight/Assets/Resources/Fonts.
Bosse: Jeder Boss bringt nur so viele Begleiter mit, wie Difficulty.BossAdds (0,5) erlaubt – ein Faktor für
alle Bosse, damit sie weiter aufeinander aufbauen (Beschwörung und Wutphase: 1 / 2 / 2 statt 2 / 3 / 4 Monster,
Nachschub aus den Toren halb so oft und nur bis 3 Gegner). Vor Sprung, Sturmlauf, Salven, Rundumschuss und
Teleport zeigt eine kleine rot leuchtende Markierung, wann der Angriff kommt (sie füllt sich und blitzt auf)
und wo (Landepunkt, Laufbahn, Ring, Zielort) – Enemies/BossTells.cs. Minibosse bekommen sie auch.
Upgrades sieht man (Player/UpgradeVisuals.cs): Schadens-Upgrades machen den Ball bis zu 30 % größer
(auch seine Trefferfläche), Feuer, Frost, Kettenfunke und Explosionen geben ihm Glühen, Partikel und eine passende
Schweif-Farbe, schnellere Bälle ziehen einen längeren Schweif, Echo-Bälle kreisen um den Ball am Fuß, der goldene
Schuh glänzt vor seinem Goldschuss, das Kapitänsschild ist eine sichtbare Blase, Tempo-Upgrades lassen die Schuhe
heller leuchten und Streifen ziehen, Sprung-Upgrades puffen beim Absprung, Regeneration funkelt grün, Blutrausch
glüht rot. Verlangsamte Gegner bekommen einen leichten Eisüberzug mit wachsenden Eiskristallen, eingefrorene
einen stärkeren, brennende glühen und züngeln.
ExactMenuFont.CoversUI/ExactButtonArt.csUI/ButtonSkin.csUI/ExactMenuFont.cs| NOVA | Ankle Breaker | Springt mit blitzschnellen Crossovers von Gegner zu Gegner (bis zu sieben in der Nähe), jeder fällt um, ist betäubt und nimmt mehr Schaden; am Ende steht Nova da, die Hand in der Hüfte, und lässt den Ball auf dem Finger kreiseln, ein letzter Schlag trifft alle Gefallenen. Ohne Gegner in der Nähe startet sie nicht |
WorldEnvironment.AddLayer). Die Kulisse folgt seitlich fast ganz, in der Höhe nur zu einem Drittel:
beim Springen sinkt sie leicht ab, statt vom Rasen abzuheben.CharactersCoinDropsRunStateDifficultyUpgradesPlayerStatsAbilitiesStageThemesStageMechanicsStageArtCombat/ | Zentrale Trefferberechnung mit Krits, Brand, Frost, Kettenfunken, Explosionen und Kill-Effekten (Combat), Echo-Bälle, Wirbel/Schwarzes Loch, Zwillingssonne, Freistoß-Mauer (Barrier), Lockvogel (Decoys) |
Enemies/ | Monster mit 9 Verhaltensarten, Elite-Eigenschaften, Minibossen und Bossen und einem Rig für alle Körper (Teile, Augen, Ketten; Monster, EnemyDefs), Gegner-Geschosse, Monster-Pool je Körper und Kollisionen (WaveDirector) |
FX/ | Partikelsystem, Blitze, Kamera (Follow, Shake, Zoom), Post-Processing (inkl. Eklipse und Dunkelheit) |
UI/ | HUD (Healthbar, Build-Leiste, Stage-/Wellen-Anzeige, Boss-Leiste, Namensschilder, gesperrte Fähigkeiten, Stage- und Boss-Intro), Karten-Bildschirm (RewardScreen), Upgrade-Symbole (UpgradeIcons), Titelbildschirm mit Ball-Beschuss (MainMenu), Menü-Spielerfigur (MenuFigure), Glas-Knöpfe und Rahmen des Menüs (MenuWidgets), Unterseiten (MenuPages), Spielerauswahl (CharacterPage, Grafik PlayerSelectArt, verformte Figur FigureWarp), erster Start (OnboardingPages), Fähigkeiten-Menü (SkillPage), Shop (ShopPage), deren Karten, Kacheln und Preisschilder (MetaWidgets), Münzzähler mit einfliegenden Münzen (CoinCounter), Pausemenü (PauseMenu), gemeinsame Optionsseite (SettingsPanel), Widgets in UiKit |
World/ThemeGrade | Wetterpartikel und Dunkelheit pro Stage; die Farbmatrix für Umgebungsmaterialien (_EnvGraded) bleibt neutral, seit jede Stage ihre eigene Grafik hat |
Core/ (Einstellungen) | KeyBindings (frei belegbare Tasten), GameSettings (Optionen, in PlayerPrefs gespeichert) |
DevTools/, Editor/ | Screenshot-Tool für automatisierte Prüfung, Szenen-Setup, WebGL-Build (WebGLBuilder) |
Juggle*Player.csAirKickBoost / BoostControlTime in Player.csPower*, StepOver*/DashTime/DashSpeed, Bicycle*/Blast* in Player.cs (Timing, Cooldowns, Schaden, Explosionsradius)PoseKick (auch Power-Schuss) / PoseFlick / PoseJuggle / PoseStepOver / PoseBicycle in PlayerRig.cs, Salto über BicycleSpintools/newdesign/characters.def.js, danach node characters.js; Mondlicht-Randlicht und Bodenreflex im Shader SF_CharacterPalette.csRun/Characters.cs (neue Figur = neuer Eintrag, hinten anhängen); das Kartenlayout in UI/MetaWidgets.cs (CharacterCard) und UI/ShopCard.cs (ShopCharacterCard, Bild aus tools/newdesign/shop.js), die Figur-Posen (Stehen, Hochhalten, Schuss) in UI/MenuFigure.csClassTuning (Meta/ClassDefs.cs); eine neue Klasse = Enum-Wert + ClassDef mit Talent (PassiveDef)SkillCatalog.All (Meta/SkillCatalog.cs); Kopfball-Werte Header* oben in Player.cs, Pose PoseHeader in PlayerRig.csMeta/CoinRewards.cs; Sprung, Zeigezeit und Flug in Run/CoinDrops.cs (ShowTime) und UI/CoinCounter.csShopKind + Eintrag in Shop.Build; Währung = Eintrag in Currencies; kaufbare Stufen = PassiveDef mit MaxLevel in MetaPassives.Leveled (Stufe liegt in Profile.Level)UI/MainMenu.cs; Hintergrund in Resources/Menu/Ruinenhof.png; Spielerauswahl in UI/CharacterPage.cs (Entwürfe zerlegt tools/newdesign/playerselect.js); Logo-Buchstaben und -Farben in Art/LogoArt.cs; Knopf-, Symbol- und Schriftstil in Art/MenuArt.cs; Platzhalter-Seiten in UI/MenuPages.cs; Flugbahn und Fall des Balls in Shoot/UpdateShots/Land, der Einstieg ins Spiel in UpdateTransitionBaseSize (Zoom) und BaseY in CameraRig.cs; wie stark sie der Plattformhöhe folgt in CameraRig.TargetLevel.Generate, Aussehen, Seile und Laternen in PlatformViews.cs, Sprungverhalten der Blobs in Monster.PlanLeaptools/newdesign/stages.def.js, danach node stages.js [stage] (--fast lässt die Kulissen stehen); Maßstab in stages.js; Freistellen in cutout.js, Auffüllen in inpaint.js; Platzierung der Deko, Lichter in der Kulisse und Parallax-Faktoren in World/WorldEnvironment.cs; Pflanzen-Atlas in tools/newdesign/build.jsPostFx.cs und die Material-Intensitäten in Art.csWorldEnvironment.Update, Wellenform im Shader SF_FoliageWorldEnvironment.BuildNear/BuildGround/BuildRuins