Fobly
Fußballmanager

Fußballmanager habe ich schon immer gern mit Freunden gespielt. Irgendwann wollte ich selbst einen bauen. Aus Spaß am Spiel und Freude am Entwickeln wurde Fobly.

Rolle
Solo-Entwicklung
Fokus
Simulation & Produkt
Plattform
Web-App

01 · Die Spieler

Spieler generieren und entwickeln

Was macht einen Spieler gut? Und wie wird er besser? Ich begann mit Attributen, Talent und statistischen Verteilungen. Ich probierte verschiedene Generatoren aus und verglich ihre Ergebnisse mit den Verteilungen, bevor ich mit der Simulation begann. Normalverteilte Talentwerte schaffen unterschiedliche Voraussetzungen. Alter, Training, Einsatzzeit und Leistung beeinflussen die Entwicklung jedes Attributs. Daraus entsteht ein positionsabhängiges Rating. Zwei ähnliche Talente können so ganz unterschiedliche Wege nehmen.

Talentwerte und ihre Wahrscheinlichkeit

Bei der Spielergenerierung werden Talentwerte nach einer Normalverteilung gezogen. Mittlere Talentwerte sind wahrscheinlicher, besonders niedrige und hohe Werte seltener.

1 · SeltenTalent 1–1010 · Selten
Gleicher Start · zwei WegeTag 0

Luca

19 Jahre · ZM · Talent 7/10
2 Einsätze pro Woche

Passen9 /20
Spielintelligenz9 /20
Abschluss9 /20

Emil

19 Jahre · ZM · Talent 7/10
Training ohne Spiele

Passen9 /20
Spielintelligenz9 /20
Abschluss9 /20
Tag 0180 Tage

Lokales Beispiel mit der echten XP-Engine: identisches Talent, tägliches Mittelfeldtraining. Luca spielt zusätzlich mit einer angenommenen Leistung von 7/10. Die Kurve oben zeigt das Prinzip der Talentverteilung.

02 · Die Match-Engine

Wie aus einzelnen Aktionen ein Spiel entsteht

Nach den Spielern kam die Match-Engine. Sie simuliert ein Spiel minutenweise, aber denkt in zusammenhängenden Spielzügen. Ballposition, beteiligte Spieler und vorherige Aktionen verändern die nächste Situation. Ihre Fähigkeiten beeinflussen Erfolgswahrscheinlichkeiten. Ein guter Pass ist deshalb wahrscheinlicher, aber nie garantiert. Bei einem Zweikampf werden dafür die relevanten Werte beider Spieler gegeneinander abgewogen. Eine Ereigniskette kann dabei über die nächste Minute hinauslaufen.

17′ · Vom Aufbau zum Tor

SV Abendlicht← Angriffsrichtung
Richter
Minute 17 · Aktion 1/8

Pass

Nico Richter

→ Milan Berger

Erfolgschance64%

Echte Ereigniskette aus einer lokalen Demo-Simulation, Seed 20261033. Ballpositionen und Erfolgschancen stammen aus der Engine. Ballflugbahn und Schusstempo folgen der Fobly-Live-Visualisierung.

03 · Das Balancing

Stärkeunterschiede nachvollziehbar machen

Die schwierigste Frage war, wie gute Spieler auch klügere Entscheidungen treffen, ohne das Spiel zu dominieren. Ich veränderte Parameter und testete mit 1.000 bis 10.000 Spielen pro Lauf. Dafür ließ ich generierte Mannschaften gegeneinander antreten und verglich Ergebnisse und Ereignisse mit echten Fußballstatistiken. Vieles war Trial and Error. Entscheidend war, ob eine Änderung Stärkeunterschiede nachvollziehbar machte und sich das Spiel weiterhin stimmig anfühlte.

Zwei Mannschaften · 10.000 Testspiele

FC Morgenrot

160

Ø Positionsrating
vs.
SV Abendlicht

108

Ø Positionsrating
8.337 Heimsiege968 Remis695 Auswärtssiege
Durchschnitt je Mannschaft aus 10.000 Spielen
FC MorgenrotStatistikSV Abendlicht
3,40Tore pro Spiel0,98
11,88Schüsse pro Spiel4,54

Neu ausgeführte Demo-Serie mit der aktuellen Engine und gleicher Formation. 10.000 Spiele, Seeds 20261011–20271010. Alle Durchschnittswerte gelten je Team.

04 · Das Produkt

Den Kader verstehen und Entscheidungen treffen

Als die Spielmechaniken standen, begann ich mit der Oberfläche. Was möchte ich nach dem Login sehen? Wie verstehe ich meinen Kader? Die Mannschaftsübersicht führt zu den einzelnen Spielern: Fitness, Positionsrating und Saisonleistungen zeigen, wie sie sich im Spiel bewähren. Talent, Traits und positionsabhängige Attribute erklären ihre Stärken. So werden Aufstellung und Training zu Entscheidungen, die ich nachvollziehen kann. Auch diese Ansichten entwickelte ich iterativ weiter.

05 · Unter der Haube

Simulation, Backend und Oberfläche verbinden

Das Backend steuert die Freigabe vorberechneter Spiele und die Abwicklung von Transfers.

Der Weg eines Spiels

Von der Vorsimulation bis zum Spielabschluss.

Spieltag vorsimulieren01 · Vorab · Cronjob & Match-Engine

Die Engine berechnet jedes Spiel vorab aus Aufstellung und Taktik.

In Staging-Tabellen ablegen02 · Vorab · PostgreSQL

Ergebnis, Aktionen und Spielauswirkungen warten in separaten Staging-Tabellen.

Spiel und Timeline übernehmen03 · 1 Stunde vor Anstoß · Lifecycle-Service

Das Backend übernimmt Spiel und Timeline in die regulären Tabellen.

Live-Ansicht freischalten04 · 30 Minuten vor Anstoß · Lifecycle-Service

Das Spiel wird live geschaltet und der Stream freigegeben.

Den Spielverlauf ausspielen05 · Ab Anstoß · Fastify → Web-App

Fastify sendet die vorberechneten Aktionen zeitgesteuert per SSE an die Web-App.

Spielauswirkungen übernehmen06 · Nach Abpfiff · Lifecycle-Service

Das Backend aktualisiert Tabelle und Spieler und bereinigt die Staging-Daten.

Der Weg eines Transfers

Vom Auktionsangebot bis zum Vereinswechsel.

Spieler zum Verkauf anbieten01 · Web-App → Fastify → Base

Das Backend legt das Angebot an und erstellt die Auktion auf Base.

Gebot im Escrow hinterlegen02 · Smart-Wallet · USDC auf Base

Der Contract hält das Gebot und erstattet überbotene Bieter.

Gebot und Countdown aktualisieren03 · Bestätigte Transaktion · PostgreSQL & SSE

Bestätigte Gebote aktualisieren den Preis, späte Gebote verlängern den Countdown.

Auktionsende prüfen04 · Nach Ablauf · Auktionsmonitor

Der Monitor prüft Ablaufzeit und Auktionszustand auf Base.

Auszahlung auf Base bestätigen05 · Backend → Escrow-Smart-Contract

Das Backend löst die Auszahlung aus und wartet auf Blockchain-Bestätigung.

Spieler dem neuen Verein zuordnen06 · PostgreSQL → Web-App

Der Spieler wechselt zum Gewinnerverein und der Transfer wird gespeichert.

Sofortkäufe werden über einen separaten Transaktionsmonitor abgewickelt.