Loading
Lade/Simuliere...
(Bitte das Browserfenster nicht schließen!)
x
⚠️

Eine Woche Feinschliff: schnellere Seiten, weniger Ballast, Beta-Einladung

Tino H. Tino H.

Nach dem großen Aufräumen vor einer Woche ging es weiter — diesmal weniger spektakulär, dafür an vielen kleinen Stellen. Ein paar Seiten waren immer noch zäh, zwei Abstürze wollten gefunden werden, und für Android-Spieler gibt es jetzt eine Einladung direkt im Spiel.

⚡ Die nächsten langsamen Seiten

  • Die neue Überwachung meldete zuverlässig, welche Seiten hakten — Team-Übersicht, Bestenlisten und Franchise standen ganz oben.
  • Das Muster war jedes Mal dasselbe: Der Datenbank fehlten schlicht die passenden Suchregister, also musste sie sich durch riesige Datenmengen wühlen, obwohl sie nur ein paar Zeilen brauchte.
  • Bei den Saison-Bestenlisten kam ein zweites Problem dazu: Die Datenbank hatte die Wahl zwischen zwei Wegen und nahm hartnäckig den langsameren. Erst als ich ihr den schlechten Weg weggenommen habe, wurde es schnell.
  • Alle drei Seiten sind seitdem spürbar flotter.

📦 Box Scores: was bleibt, was geht

  • Damit das nicht wieder ausufert, gilt ab sofort eine Aufbewahrungsregel: Detail-Statistiken einzelner Spiele — also wer in Match X wie viele Yards hatte — werden für die letzten drei Saisons jedes Spielstands aufgehoben. Ältere werden automatisch entfernt.
  • Ehrlich gesagt: Das ist die eine Änderung, die dir etwas wegnimmt. Deshalb genau, was bleibt: alle Ergebnisse, Tabellen, Bilanzen, Rekorde, die Saison-Statistiken deiner Spieler, Transferhistorie, Trophäen und Achievements. Nichts davon wird angefasst.
  • Ein altes Spiel lässt sich weiterhin öffnen — mit Endstand und Scoring-Verlauf. Nur die Einzelzeile pro beteiligtem Spieler fehlt dann.

🐛 Zwei Abstürze, beide selbst verschuldet

  • Beim Weiterschalten der Woche konnte es von bestimmten Seiten aus krachen. Den Fehler hatte ich mir wenige Stunden vorher selbst eingebaut — er ist wieder weg.
  • Das Power Ranking zeigte in einer bestimmten Konstellation eine weiße Seite statt Inhalt.
  • Beide fielen der automatischen Überwachung auf, nicht mir. Genau dafür ist sie da.

🤖 Android-App: geschlossener Test läuft

  • Die App steckt weiterhin im geschlossenen Test bei Google Play. Ein Datum für die Veröffentlichung nenne ich bewusst nicht, solange es keines gibt.
  • Wenn du am Handy spielst, siehst du im Spiel jetzt eine Einladung zum Test.
  • Der Ablauf ist zweistufig und die Reihenfolge zählt: erst der Google-Gruppe beitreten, dann den Play-Test-Link mit demselben Google-Account öffnen. Andersherum findet Google Play die Testversion nicht.

Zwei Wochen ohne ein einziges neues Feature — von außen sieht das nach wenig aus. Aber ein Manager-Spiel, in dem man auf jede Seite wartet, macht keinen Spaß, egal wie viel drinsteckt. Ab jetzt geht es wieder um Inhalte. Wenn dir trotzdem etwas zäh vorkommt: Sag Bescheid.

Die Startseite brauchte 25 Sekunden — und niemand hatte es mir gesagt

Tino H. Tino H.

Ein Spieler schrieb mir, die Startseite lade ewig. Ich habe nachgemessen und bin ziemlich blass geworden: fast 25 Sekunden, bis der Server überhaupt antwortete. Das war der Anfang von zwei Tagen unter der Haube — mit einem Fund, der deutlich unangenehmer war als die Ladezeit selbst.

⚡ 25 Sekunden für eine einzige Seite

  • Die Ursache war weder exotisch noch clever. Die Startseite berechnete bei jedem einzelnen Aufruf sämtliche ligaweiten Statistiken komplett neu — für jeden Besucher, jedes Mal aufs Neue.
  • Solange es wenige Spielstände gab, fiel das nicht auf. Mit jedem neuen Spielstand wurde die Rechnung größer. Am Ende reichte sie für eine halbe Minute Wartezeit.
  • Diese Werte werden jetzt einmal vorbereitet statt bei jedem Besuch neu ermittelt. Die Startseite antwortet seitdem in Bruchteilen einer Sekunde.

🔍 Warum es zwei Wochen niemand gemeldet hat

  • Das ist der Teil, der mich mehr beschäftigt als die Ladezeit: Der Zustand bestand vermutlich seit Wochen. Gemeldet hat ihn eine einzige Person.
  • Die meisten schließen den Tab und kommen nicht wieder. Fehlermeldungen bekomme ich, Langsamkeit meldet fast niemand.
  • Deshalb gibt es jetzt eine automatische Überwachung: Das Spiel misst selbst, wie lange jede Seite braucht, und meldet mir Ausreißer — ohne dass jemand ein Ticket schreiben muss.

🧹 Sechs Millionen Zeilen, die es nicht geben dürfte

  • Beim Aufräumen der Datenbank stieß ich auf über sechs Millionen Zeilen, die zu Spielständen gehörten, die es längst nicht mehr gibt.
  • Der Grund war ein Fehler von mir, und zwar kein kleiner: Die Funktion „Spielstand löschen“ räumte 19 von 28 Tabellen ab. Nicht dabei war ausgerechnet die größte — die Einzelspieler-Statistiken pro Match.
  • Jeder gelöschte Spielstand ließ seine komplette Match-Historie zurück. Und weil danach der Spielstand fehlte, fand auch die nächtliche Aufräum-Routine diese Reste nie wieder.

🗄️ Was jetzt anders ist

  • Die Löschfunktion liest die Tabellenliste inzwischen selbst aus der Datenbank, statt einer Liste zu folgen, die ich pflegen muss. Sie kann damit nicht mehr veralten.
  • Zusätzlich räumt die nächtliche Routine jetzt auch Altlasten ab — Reste, für die es keinen Spielstand mehr gibt.
  • Die größte Tabelle schrumpfte von rund 20 auf gut 9 Millionen Zeilen, etwa 1,8 GB gingen an den Server zurück.
  • Für dich merkbar ist das vor allem indirekt: Eine kleinere Datenbank ist eine schnellere Datenbank.

Zwei Tage Arbeit ohne ein einziges neues Feature — und trotzdem die sinnvollste Zeit seit Langem. Falls dir eine Seite zäh vorkommt: Schreib mir das ruhig. Ich sehe inzwischen zwar vieles selbst, aber längst nicht alles.

Football Franchise kommt in den Google Play Store — die Android-App ist im geschlossenen Test

Tino H. Tino H.

Es ist offiziell: Football Franchise kommt als native Android-App in den Google Play Store. Die App steckt gerade in der geschlossenen Testphase — dem letzten Schritt, den Google verlangt, bevor eine neue App für alle freigegeben wird. Hier die wichtigsten Infos: was kommt, wie es läuft und wie du jetzt schon dabei sein kannst.

📱 Was die App bringt

  • Football Franchise auf dem Homescreen — ein Tap, Vollbild, ohne Browser-Adressleiste. Eigenes App-Icon, eigener Splashscreen mit dem Maskottchen.
  • Dieselbe Spielwelt, alle Features: Draft, Trades, Salary Cap, Simulation, Hall of Fame — die komplette Tiefe der Web-Version, für unterwegs optimiert.
  • Schlankere App-Oberfläche: aufgeräumter Header und Footer, größere Touch-Flächen, auf die Smartphone-Nutzung zugeschnitten.

🧪 Warum „geschlossener Test"?

  • Google verlangt für neue Entwickler-Accounts einen geschlossenen Test mit mindestens 12 Testern über 14 Tage, bevor eine App in die Produktion — also die öffentliche Veröffentlichung — darf.
  • Genau da stecken wir gerade: echte Tester spielen die App, wir sammeln Feedback und bügeln die letzten Kanten aus. Viele der kleinen Bugfixes der letzten Wochen kamen direkt aus diesem Testbetrieb.
  • Sobald die Testphase besteht und Google die finale Prüfung durchwinkt, geht die App offiziell live.

🙌 Jetzt schon dabei sein

  • Du willst die App vor allen anderen auf dem Handy haben? Werde Tester! Tritt unserem Discord bei — dort teilen wir den Opt-in-Link für den geschlossenen Test.
  • Beitreten, App installieren, ein paar echte Sessions spielen — jede aktive Teilnahme bringt uns der Freigabe näher.
  • Zum Start nur Android. Eine iOS-Version ist perspektivisch geplant, sobald die Android-App stabil draußen ist.

Die Browser-Version läuft natürlich unverändert weiter — die App ist ein Zusatz, kein Ersatz. Aber für alle, die ihre Franchise lieber vom Sofa, aus der Bahn oder in der Mittagspause managen: Es wird bald einen 🏈 Tap dafür geben. Wir halten dich hier auf dem Laufenden, sobald der Play-Store-Link live ist.

Spielerentwicklung-Tracker, MaxPot-Chip & die finale Card-Welle

Tino H. Tino H.

Eine neue Seite und ein Schwung Detailarbeit auf den bestehenden: players_development.php zeigt dir die kumulative Stärke-Entwicklung jedes aktiven Spielers seit Spielstart, game.php und player.php sind die letzten DataTables losgeworden, ein neuer 🎯 Max Pot.-Chip macht ausgereizte Spieler unabhängig vom Scout-Level sichtbar — und unter der Haube haben wir das Demo-Spielerlebnis für Cookie-User repariert.

📈 Neue Seite: Spielerentwicklung-Tracker

  • Im Seitenmenü unter „Beste Spieler" findest du jetzt Spielerentwicklung — eine AJAX-gefilterte Player-Card-Grid mit allen aktiven Spielern der Liga (ohne Draft-Pool, ohne Karriereende)
  • Pro Spieler wird die älteste oldstaerke aus der player_progression-Tabelle als Start-OVR verwendet — daraus ergibt sich die kumulative Aufwertung/Abwertung seit dem ersten Saisonwechsel, prominent als bunter Δ-Chip auf jeder Karte (grün/rot/grau)
  • Sortier-Pills: Aufwertung (Default ↓), aktueller OVR/POT, Start-OVR, Alter, Name. Positions-Filter, Mini-Pager, persistenter State via localStorage — gleicher UX-Standard wie players.php / players_stats.php
  • Performance-Trick: das Start-OVR wird über eine einzige GROUP BY player + MIN(id)-Pre-Aggregation als LEFT JOIN aufgelöst statt mit einem korrelierten Subquery pro Row — der erste Wurf brauchte 5+ Sekunden pro Sortier-Klick, jetzt sind es <100 ms auf einer ~3500-Spieler-Liga
  • 5-Schritt-Tutorial mit explizitem W1-Hinweis: ohne Saisonübergang stehen noch keine Daten fest, dann liest alles „+0" — sobald die erste Saison vorbei ist, füllt sich die Liste automatisch

🎯 Persistent „Max Pot."-Chip auf jeder Player-Card

  • Sobald staerke >= potential ist (Spieler hat sein Limit erreicht), erscheint ein dezenter gold-amber Chip „🎯 Max Pot." im Badges-Cluster neben Rookie/Retire/Injury
  • Sichtbar unabhängig vom Scout-Director-Level — wer auf Lvl 3 sitzt und nur Pot-Sterne sieht, weiß jetzt trotzdem auf einen Blick, wer sein Potenzial schon ausgereizt hat. Reine Binär-Info, kein exakter Pot-Wert-Reveal
  • Eingebaut in alle Card-Render-Sites: players_pcard.php, team_pcard.php, contracts.php, _contracts_blocks.php und der player.php Hero-Card-Statusrow. Karriereende-Spieler bekommen den Chip nicht — redundant zum Retire-Icon

🃏 game.php — finale 7 DataTables raus

  • 📊 Spielübersicht ist jetzt eine Vergleichs-Card im H2H-Stil: pro Stat-Zeile [Away-Wert] ━━━ [Home-Wert] mit proportional gesplittetem Farbbalken in beiden Team-Farben, plus Sektions-Divider 🛡️ Defense / 🥅 Special Teams / 🤕 Injuries
  • Spieler-Statistiken pro Team: die 3 alten OFF/DEF/SPE-Tabellen sind in eine filterbare .gpc-grid pro Team gemerged. Drei Toolbars: Positions-Filter, Positionsgruppen-Filter (Alle/OFF/DEF/SPE — farbcodiert), Sort-Pills (Pos/TD/Ru Yds/Pa Yds/Rec Yds/T/S/Int/FG), plus zusätzlicher Statistik-Filter (zeigt nur Spieler mit ≥ 1 in der gewählten Stat — z.B. „nur Spieler mit mindestens einem Touchdown")
  • Per-Spieler-Card mit positions-aware Stat-Pill-Block (Pills mit Wert = 0 werden ausgeblendet), Phase-farbcodierter Left-Border, Game-MVP-Highlight läuft jetzt über document.querySelectorAll('.gpc-card[data-pid=...]') statt jQuery-Row-Painter
  • Die Dev-Debug-Box (lokal) nutzt jetzt die Snapshot-Werte aus der schedule-Row (ovr_home, off_home …) statt der Live-Team-Werte. Damit zeigt die Hero-Card und der Debug-Block dieselbe OVR, statt 82 oben und 73,89 unten

📋 player.php — alle Tabellen umgebaut, Action-Toolbar in die Hero-Card

  • 7 legacy DataTables sind raus: Renewal-Offers, Player-BIA, Awards, Statistiken, Entwicklung, Verletzungen, History — alles jetzt Cards. Die player-history-Lokalisierungslogik (über 20 verschiedene Action-Patterns) bleibt 1:1 erhalten
  • Die Player-BIA-Strip ist komplett entfallen — sie dupliziert nur, was schon in der Hero-Card oben steht. Stattdessen wurden alle Action-Buttons (Favorit, Sign FA, Trade-Offer, Quick-Resign, Negotiate, Release, Persuade) in die Hero-Card direkt unter den Stat-Tiles integriert, kontextabhängig sichtbar
  • Sortierbar nach Saison + Woche in der Awards-, Injury- und History-Card-Liste

📝 contracts.php + Auslaufende Verträge

  • Auf contracts.php tauchen jetzt auch Karriereende-Spieler in der Vertragsübersicht auf — ihre Restverträge zählen weiterhin gegen den Cap, also gehören sie in die Übersicht. Visuell deutlich abgegrenzt: dunklerer Grau-Rahmen, diagonale Schraffur, filter: saturate(0.6) und Retire-Badge im Header
  • Das gemeinsame Partial _contracts_blocks.php (start.php + team.php) ist auf das pcard-Vokabular migriert: 📋 Auslaufende Verträge mit Negotiate/Quick-Resign/Release-Actions, 🪦 Karriereende-Spieler mit Release + Persuade (Gold-CTA) — Negotiate/Quick-Resign machen bei Retirern keinen Sinn und sind raus

🔍 Demo-Modus für Cookie-User repariert

  • Bisher griff der Demo-Fallback nur, wenn der Cookie komplett leer war — Visitors mit einem alten oder kaputten eigenen Spiel im Cookie landeten auf einer leeren Shell statt der Demo
  • Neu: ein kurzlebiges ff_demo_session-Cookie (2 h TTL, jeder Demo-Hit refresht). ?demo=1 setzt es, jeder Navigationsschritt bleibt in der Demo, ?exitdemo=1 (Banner-CTA) oder ein Wechsel via ?continuegame=ID / ?changegame=1 löscht es
  • Zusätzlich ein Hollow-Game-Safety-Net im header_connect.php: wenn das eigene Spiel im Cookie 0 Spielerzeilen hat (kaputter Zustand), wird es ignoriert und auf Demo durchgegriffen

🐛 Sammelsurium

  • players.php: zwei neue Filter-Checkboxen „ohne Draft-Spieler" und „ohne Free Agents" (mutually exclusive zu „nur Draft" / „nur FA"); bei „nur Draft" + „nur FA" gleichzeitig wird jetzt korrekt per OR gefiltert statt 0 Ergebnisse zu liefern
  • Stärke „? n/a"-Bug: gedraftete Rookies mit draft=2 wurden fälschlich durch den Draft-Scout-v2-Render geschickt und zeigten dauerhaft „? n/a" statt ihrer echten Stärke. Gate jetzt strikt auf draft=1 (nur Draft-Pool)
  • EOS-Forecast (franchise.php) berücksichtigt jetzt die Kosten der Draft-Scout-Abteilung für die restlichen Saison-Wochen — bei mehreren Scouts machte das vorher mehrere Millionen Diskrepanz aus
  • Scouting v2 Auto-Priority: wenn die Automatik vor Phase 3 aktiviert ist, materialisiert der Phase-3-Generator die Auto-Pick-IDs in team.scouting_priority und sperrt die Liste ab W21. Davor wurde der Boost zwar applied, aber die UI zeigte „0 / 24 Slots belegt" — verwirrend bis zur Unbenutzbarkeit
  • Notification-Bar Dismiss: sticky Tab-Leisten auf draft.php und team.php waren beim Schließen einer Benachrichtigung mitten im Bild hängen geblieben — jetzt rutschen sie korrekt unter den Newsticker
  • Team-Schedule-Highlight: am Saisonende (kein „nächstes Spiel" mehr) wurden alle 25 gespielten User-Team-Spiele in color2 hervorgehoben. Jetzt: kein Highlight, wenn kein nächstes Spiel mehr ansteht
  • Entwicklung-Roh-HTML: die grund-Spalte enthält serverseitig gebautes <font color="green">…</font>-Markup — wurde auf team.php und player.php fälschlich escaped und als Roh-Text angezeigt. Jetzt korrekt als Farb-Reasons gerendert
  • Vertragsverhandlungs-Overlay: POT zeigte „?" statt der Sterne bei Scout Director Lvl 2-3 — Gate war off-by-one. Jetzt konsistent mit allen anderen Player-Cards

Mit dem Spielerentwicklung-Tracker hast du endlich einen einzigen Ort, an dem du sehen kannst, welche Talente sich in deinem Spiel am stärksten verbessert haben — und der MaxPot-Chip macht endlich klar, wer aus dem Wachstum schon raus ist, ohne dass du auf Scout Director Lvl 4 hochziehen musst. Plus: zwei der drei zentralen Spiel-Detail-Seiten (game.php, player.php) sind jetzt komplett tabellenfrei, mobile-first und konsistent mit dem Rest der App.

Großer Card-Design-Rollout: Sticky-Toolbars, Mini-Pager und mobiles Komprimieren auf 14 Seiten

Tino H. Tino H.

In den letzten zwei Wochen haben wir nahezu jede Listen- und Tabellenseite im Spiel auf das neue Card-System umgestellt: einheitlicher Rahmen, sticky Filter- und Sortierleisten, Mini-Pager direkt neben den Sortier-Pills und ein eigener Mobile-Komprimierungs-Layer unter 640 px. Tabellen mit horizontaler Scroll-Hölle auf dem Handy sind damit endgültig Geschichte.

🃏 Einheitliches Card-Chrome überall

  • Alle Cards (Player, Schedule, Standings, Picks, Trades, Achievements, Watchlist, Coins-History, Tickets & Merchandise) teilen jetzt die gleiche Optik: 2 px Border #c8d0dd, weicher Schatten 0 3px 10px, Hover-Lift
  • User-Team-Highlights laufen überall über das gleiche Pattern: Team-Color-Border + 2 px inset shadow, mit auto-berechnetem Text-Kontrast
  • Per-Karten-Akzent in Spezialfällen: Heim/Auswärts auf Tickets (grün/blau), Income/Spend in Coins-History (grün/rot), Kategorie-Top-Border in News (10 Farben)

📌 Sticky-Toolbar-Stack

  • Tab-Leisten (team-color t5-tabs) sind jetzt sticky auf team.php, franchise.php, achievements.php, players_watchlist.php, halloffame.php — Navigation bleibt beim Scrollen langer Listen immer erreichbar
  • Positions-Filter und Sortierleisten stapeln darunter: top: calc(var(--team-sticky-top) + var(--t5-tabs-h)) sorgt für saubere Stack-Reihenfolge ohne Magic Numbers
  • Eine kleine JS-IIFE pro Seite misst Header + Newsticker + NotificationBar und schreibt die CSS-Variable — passt sich an jedes Chrome-Setup an

⏪ ⏩ Mini-Pager direkt in der Sortierleiste

  • Auf players.php, freeagents.php und draft.php (Draft-Spieler Tab) sitzt rechts in der Sortierleiste ein kompakter Mini-Pager mit ‹ Seite X / Y ›
  • Kein Scrollen mehr bis zum Listenende um die nächste Seite anzusteuern — beide Pager (oben kompakt, unten ausführlich) teilen sich dieselben goPrev/goNext Handler
  • Ghost-Buttons mit Navy-Fill bei Hover, automatisch deaktiviert bei leerem Filter

📱 Mobile-Komprimierung unter 640 px

  • Eigener Media-Query-Block in pcard_styles.php kürzt jedes Toolbar- und Card-Sub-Element auf Mobile: Padding/Gap/Font/Logo/Foto/Position-Badge — eine voll bestückte Player-Card schrumpft von ~200 px auf ~135 px Höhe
  • t5-Tabs werden in der mobilen Variante schlanker (Padding 0.5→0.35rem, Font 0.72→0.68rem) — Offense/Defense/Special/Practice/Stats Reihe dominiert nicht mehr den halben Bildschirm
  • Position-Filter „Alle"/„Keine" wandern auf Mobile als Mini-Pillen direkt neben die Pos-Buttons — keine zusätzliche Zeile mehr

♻️ Neue oder erweiterte umgebaute Seiten

  • powerranking.php — Tabelle → Hero-Card-Grid, prominenter Power-Rang-Badge oben links, aufklappbarer „Bestandteile"-Block mit allen 11 Positions-Chips + Faktor-Gewicht in % am Rang
  • trade.php selectteamtable — Hero-Cards für Trade-Partner-Auswahl mit prominentem gold „🤝 Angebot machen" CTA
  • draft.php Draft-Reihenfolge + Mock-Drafts — Zwei-Zeilen-Karten pro Pick (oben Pick/Team/Wert/Trade, unten gepickter Spieler) statt 13-Spalten DataTable; Mock-Draft-Zellen mit gleichem Card-Chrome
  • franchise.php Tickets & Merchandise — Spielzeilen als Cards mit farbcodierter Heim/Auswärts-Border und gold-getöntem User-Anteil
  • coins.php Coins-History — Single-Line-Cards mit Season/Week-Pill, signed +/− Pille, Beschreibung und gold Total-Chip
  • players_stats.php — Eine filterbare Grid statt OFF/DEF/SPE-Tabs, Stat-Pills in optgroups gruppiert, „📊 Statistiken"-Block standardmäßig aufgeklappt
  • players_watchlist.php — Drei Tabs mit Player-Cards via shared players_pcard.php; sticky Position-Filter + Sort-Bar pro Tab
  • halloffame.php — Player-Awards und MVPs als pll-cards, gruppiert nach Saison; Game-MVPs paginiert über shared AJAX, optionaler Saison-Filter wenn Saison > 1
  • tradehistory.php — Pro Trade eine team-color-Gradient-Karte im simresult-Top-Trade-Stil, mit ⇄ Gegenüberstellung, Saison/Woche/Gesamtwert sortierbar
  • news.php — Random Events als News-Cards mit Kategorie-Top-Border, Saison/Woche/Team-Filter, Sortier-Pills (Neueste/Älteste/Wichtigkeit), Filter persistiert in sessionStorage
  • achievements.php — Tab-Leiste sticky
  • draft.php Scouting Tab — Container-Cards mit verstärkter Border, damit sie sich besser von der Seite abheben

🔁 Geteilte Helper für visuelle Konsistenz

  • _game_mvp_card.php — extrahierte ff_render_game_mvp_card() + CSS-Emitter, jetzt von player_stats_leaders und halloffame verwendet (Saison-Pille nur in Multi-Saison-View)
  • _player_leaders_card.phpff_render_player_leaders_css() als standalone-Funktion ausgelagert, damit Sister-Card-Familien (.mvp-card) die pll-* CSS sicher mitziehen
  • pcard_styles.php — bekommt den Mini-Pager und den Mobile-Komprimierungs-Layer, beides automatisch auf allen pcard-Pages aktiv

🐛 Sammelsurium

  • Custom-Game „Bestehende Spiele"-Karten auf index.php lesen Team-Farben jetzt aus der hochgeladenen CSV/JSON statt der Stand-In-Defaults — der Gradient passt direkt zur Markenfarbe des importierten Teams
  • Schedule-Cards „Noch nicht gespielt": dunklerer Text + dezenter Hintergrund, damit der Hinweis auf jedem User-Team-Hintergrund lesbar bleibt
  • Mobile Mock-Draft-Zellen + Standings-Cards: Layout-Cleanups gegen Überlappungen
  • Newsticker-Stärke-Pille leicht vergrößert (1.2→1.45rem), damit die Stärke-Zahl bei Trade- und FA-Meldungen lesbar ist

Unterm Strich: ein einheitliches, mobile-first Card-System auf 14 Seiten, ein gemeinsames Helper-Set für Player-/MVP-Cards und ein vorhersagbares Verhalten von Filter/Sort/Paging über die ganze App hinweg. Das Spiel fühlt sich auf dem Handy zum ersten Mal richtig benutzbar an — und auf dem Desktop bleibt die volle Informationsdichte erhalten.

Draft-Scouting reloaded: das neue Coverage-Modell

Tino H. Tino H.

Das größte System-Update seit dem Salary-Rework: Das alte Sampling-Scouting (alle paar Wochen ein einzelner Report) ist Geschichte. An seine Stelle tritt ein Coverage-Modell, das deine Scouting-Stunden Phase für Phase fair über die gesamte Draft-Klasse verteilt — mit klaren Hebeln, sichtbaren Wahrscheinlichkeiten und einem cinematic Combine-Reveal in Woche 25. Wer den Draft ernst nimmt, hat ab sofort echte Stellschrauben statt Würfel.

🧮 Coverage statt Sampling

  • Jeder Scout produziert 18 Stunden pro Phase. Mit dem Maximum von 10 Scouts macht das 180 h pro Phase — über ~396 Prospects verteilt landen rund +11 % Accuracy pro Spieler in der Standard-Verteilung „Alle Positionen"
  • Stunden werden per Water-Fill verteilt: weiter unauffällige Spieler bekommen Priorität gegenüber bereits gescouteten, sodass die Klasse gleichmäßig auf ein Niveau gehoben wird, bevor du vertiefst
  • Drei Schichten teilen sich das Budget: Priority (pauschal +30 %, siehe unten), dann der Filter (alle Positionen / Top Team Need / Top Estimate / Unscouted / Manuell), und schließlich Random Fill für übrige Stunden
  • Wöchentliche Kosten = Saisongesamt / 26, separat als „Draft Scout Department" in deiner Bilanz gebucht. Scout-Zahl reduzieren geht nur in Phase 1 (W1–8); upgraden jederzeit

⏳ Vier Phasen, vier Reports

  • Phase 1 (W1–8) — erster Scan. Report fällt in W8
  • Phase 2 (W9–16) — vertieft die Abdeckung. Report in W16. Die Filter Top Estimate und Nur Unscouted werden hier freigeschaltet
  • Phase 3 (W17–21) — Priority Players werden aktiv. Report in W21
  • Phase 4 (W22–25) — Combine läuft zu Beginn von W22. Finaler Report + Combine-Recap in W25
  • Am Ende jeder Phase öffnet sich ein türkises Zwischenbericht-Overlay: Spieler-Anzahl pro Confidence-Bucket (100 % / 75–99 / 40–74 / 1–39 %), die Top-5 nach OVR-Estimate, plus Teaser für die nächste Phase. Eine Glocken-Benachrichtigung auf jeder Seite verlinkt direkt rein

⭐ Priority Players (ab Phase 3)

  • Sterne deine Wunsch-Prospects direkt auf dem Big Board (Draft-Players-Tab) oder schalte Auto-Pick ein
  • Slot-Limit: Scouts × 2 plus Bonus-Slots durch den Scout Director (+2 / +4 / +6 bei Lvl 2 / 3 / 4)
  • Priority-Spieler bekommen pro Phase pauschal +30 % Accuracy (gedeckelt bei 100 %), unabhängig vom Filter. Ein Pick mit ~30 % zu Beginn von Phase 3 landet typischerweise bei ~60 % nach Phase 3 und ~90 % nach Phase 4 — fast voll erkannt, aber mit einer Restüberraschung
  • Die Liste ist editierbar durch W17–W21, lockt erst in W22, sobald Phase 4 sie konsumiert hat. Ein harter Block in W16 verhindert das Versehentlich-Übersimulieren mit leerer Liste — entweder Sterne setzen oder Auto-Pick aktivieren

🏃 Combine in W22 — Reveal in W25

  • Eingeladene: alle Priority-Spieler + Scouts × 3 Top-Prospects nach aktueller Schätzung (kein Team-Need-Bias — die besten Athleten zeigen sich)
  • Verteilung des signed Shift: -3 (1 %) / -2 (3 %) / -1 (10 %) / 0 (59 %) / +1 (20 %) / +2 (5 %) / +3 (2 %). Wird direkt auf den realen OVR des Spielers angewandt — kein Trick, kein temporärer Modifier
  • Die Combine-Spalte auf dem Big Board bleibt bis W25 versteckt, damit der Reveal-Moment im finalen Zwischenbericht landet (mit Severity-Farben: grün für positive Shifts, amber/rot für Abstürze)

🎯 Big Board & UI

  • Jeder Prospect zeigt OVR + POT als Range-Pills (z. B. „78–84" mit 56 % Confidence). Bei 100 % Scouting kollabiert die Range auf einen einzelnen Wert
  • Pick-Reveal-Overlay wird automatisch übersprungen, sobald Confidence = 100 % — kein Lärm, wenn du schon alles weißt
  • Mock Drafts in W8 (#1, nur Runde 1), W16 (#2, alle Runden) und W21 (#3, Final) liefern Kontext zur Liga-weiten Wahrnehmung

Coverage statt Sampling, sichtbare Phasen statt Black Box, Priority + Combine als finale Hebel: Das neue Draft-Scouting belohnt Vorbereitung — und macht jedes Saison-Finale zu einem kleinen Reveal-Event. Probier es aus, der Big Board fühlt sich endlich an wie ein echtes Front-Office-Tool.

Tutorial-Pagination, W16-Hard-Block, Top-3-Podium und saubere Lang-Keys

Tino H. Tino H.

Begleitend zum großen Draft-Scouting-Rework (siehe Feature-Artikel) ist eine ganze Reihe kleinerer Verbesserungen gelandet: das Tutorial bekommt eine vollwertige Pagination + Inhaltsverzeichnis, der Phase-3-Übergang wird abgesichert, die Power-Ranking-Seite startet mit einem neuen Top-3-Podium, und alle deutschen Tutorial-Texte sind endlich vollständig übersetzt.

📚 Tutorial: Pagination + Inhaltsverzeichnis

  • Tutorial-Schritte sind nicht mehr eine endlose Wand — jeder Step ist eine eigene Seite mit „Letzter Schritt"/„Nächster Schritt"-Buttons und einem Zähler oben („Tutorial-Schritt X von Y")
  • Auf Schritt 1 liegt jetzt eine vollständige Inhaltsverzeichnis-Tabelle über alle 17 Steps — direkter Sprung in jeden Abschnitt per „Öffnen"-Button
  • Schritt 6 (Franchise) und Schritt 10 (Draft & Scouting) sind komplett neu geschrieben — passen jetzt zur aktuellen UI mit allen Cards (Partner, Staff, Facilities, Finanzen) und dem neuen Coverage-Modell
  • 105 fehlende DE/EN-Sprachschlüssel ergänzt — die deutsche Tutorial-Version zeigt nicht mehr stellenweise englische Fallback-Texte (z. B. „Top 3 Overview", „1) Scouting Department")

🛑 W16 → W17 Hard-Block

  • Bisher war der Hinweis „Du hast keine Priority-Spieler gesetzt" in W16 nur ein Soft-Overlay, das man mit „Ja" wegklicken konnte — jetzt ist es ein echter Blocker
  • Solange Scouts existieren, Scout Director ≥ Lvl 1 und Auto-Pick aus ist: keine Simulation von W16 nach W17 ohne mindestens einen Priority-Stern oder aktivierten Auto-Modus
  • Symmetrische Korrektur: die Priority-Liste bleibt ab sofort durch W17–W21 editierbar und lockt erst in W22 — vorher konnte sie versehentlich nach dem ersten Stern „einrasten"

🥇 Top-3-Podium auf der Power-Ranking-Seite

  • Power-Ranking öffnet jetzt mit einem Gold-/Silber-/Bronze-Podium der drei stärksten Teams: Logo, effektiver Team-OVR, Division und aktuelle Bilanz auf einen Blick
  • Schneller Bench­mark „wo stehe ich vs. die Contender", bevor man in die vollständige Tabelle scrollt
  • Pro-Team-Quote unter dem Podium hebt den jeweils stärksten Faktor hervor (Stärke, Offense, QB-Talent, O-Line, Draft-Pick-Kapital etc.)

🔧 Unter der Haube

  • Drei neue idempotente DB-Migrationen (049 Spalten-Cleanup, 050 manuelle Positionen, 051 signed Combine-Shift) — sicher mehrfach ausführbar bei Production-Deploys
  • Saisonwechsel setzt scouting_set_pN zuverlässig auf „all" zurück und generiert die Draft-Klasse mit Faktor 6 (statt 8) — synchron zu startgame.php, kein 523-Spieler-Bug mehr
  • Legacy-Combine-Kicker entfernt, der OVR-Ranges auf „1–81" zerschoss
  • Sim-Warnung im Footer wird nach Slider- und Sterne-Toggle live über AJAX aktualisiert — keine eingefrorenen Hinweise mehr
  • Apache-Limit für Request-Header auf 32 KB angehoben + Cookie-Reset-Endpoint für Edge-Cases mit übergroßem Session-Cookie

Viele kleine Schrauben, aber das Tutorial fühlt sich jetzt navigierbar an, der Übergang in Phase 3 ist wasserdicht, und die Liga-Übersicht öffnet mit etwas Glanz. Pull-Empfehlung: ja.

Tab-Revolution, Vereinsumfeld-Visualisierung & monatliches Season Ranking

Tino H. Tino H.

Der größte UI-Sprung seit langem: Lange Scroll-Wüsten werden auf nahezu allen Spielseiten in aufgeräumte Tab-Ansichten umgebaut, die Franchise-Seite bekommt eine eigene Top-down-Vereinsumfeld-Visualisierung samt 8-köpfigem Personal-Konferenztisch, Sponsoren/TV/Ausrüster/Versicherer wandern in eine Hero-Box mit benutzerdefinierten SVG-Logos, und neu eingeführt wird ein monatliches Season Ranking als kompetitive Bestenliste pro Schwierigkeitsgrad.

🏟️ Vereinsumfeld & Personal als Stadium-View

  • Neue Top-down-Yard-Ansicht auf franchise.php mit 12×8-Grid: Stadion, Trainingsanlagen, Gym, Sportakademie, Medical/Therapy Center, Merch-Store, Bürogebäude und Datacenter — jedes Gebäude als generative SVG mit Per-Level-Features (z.B. Tribünen, Flutlicht, Eckfahnen am Spielfeld), Level-Badge oben rechts, Kosten-Overlay beim Klick
  • Per-Klick öffnet das einheitliche Upgrade-Overlay mit aktuellem vs. nächstem Benefit, Kosten und Kontostand-Vorschau — funktioniert für alle 9 Gebäudetypen über eine geteilte Modal-Logik
  • Darüber das neue Personal-Konferenzraum-Layout: 8 Mitarbeiter (HC/OC/DC/SC, Scout, Marketing, Physio, Doctor) als Portraits um einen Konferenztisch — generative SVG-Köpfe mit Haaren, Sakko in Teamfarbe und VAKANT-Marker bei Level 0
  • CPU-Teams sehen den gleichen Yard + Konferenzraum read-only (keine Upgrade-Overlays)
  • Neue Sprachschlüssel und Benefit-Texte für L6-L10 (DE/EN), DB-Spalten-Fallback wenn ein Lang-Key fehlt

🤝 Partner & Verträge: Hero-Box statt 4 DataTables

  • Neue fpc-hero-Box ersetzt die alten 4 Sponsoren/TV/Ausrüster/Versicherungs-Tabellen: Sponsoren in voller Breite (Zeile 1) mit allen 7 Boni direkt sichtbar (pro Spiel · pro Saison · 8 Siege · Playoffs · Conference Final · SB · SB Sieg) plus Maximalsumme und Ambitions-Badge (Contending/Retooling/Rebuilding)
  • TV-Partner / Ausrüster / Versicherungen in Zeile 2 als 3-spaltige Panels — kompakte Karten mit Hover-Tooltip, klickbar zur Unterzeichnung
  • Neue generative SVG-Logos pro Marke (ChipsFresh als Chips-Tüte, JellyFish als Qualle, MyTube als roter Play-Button, Lovely Cat als Katzenkopf, …) — kein PNG-Brei mehr
  • Bestätigungs-Overlay zeigt Kontostand jetzt → −Kosten → Kontostand danach mit grünem/rotem Akzent. Enter-Taste = Unterzeichnen, ESC oder × oben rechts = Abbrechen
  • Sponsor-Klassifizierung nach Varianz (`summax/summin`) ergibt automatisch das richtige Ambitionsniveau, mit manuellen Overrides für JellyFish und Shirts4Friends

🎟️ Tickets-Slider + Fanbase im Hero

  • Ticketpreis wird statt 6 separater +/−-Anker jetzt über einen Slider mit Number-Input auf den Euro genau eingestellt (50–500€); ein gelbes Toleranzband visualisiert die Empfehlung des Marketing-Managers (Range schrumpft mit steigendem Marketing-Lvl)
  • Standalone-Fanbase-Block raus — die Fanbase-Zahl + ℹ️-Verlauf-Modal sitzt jetzt direkt im Hero-Stat-Tile

📑 Tab-Ansichten überall im gleichen Stil

  • Einheitliches Tab-System (color2 als Bar-Hintergrund, color1 als aktiver Tab, kontrast-sicherer Text) auf 11 Seiten ausgerollt: team.php (5 Tabs), franchise.php (5), trade.php (4 mit Team-Logos), schedule.php (6 für Preseason → Super Bowl), players_watchlist.php (3), achievements.php (11), halloffame.php (3), draft.php (3 inkl. Post-Draft-Summary), player_stats_leaders.php (4), conference.php/division.php/table.php (2 für AFC/NFC), seasonranking.php (4)
  • Aktiver Tab wird je Seite in localStorage persistiert; Hash-basierte Aktivierung greift weiterhin (z.B. „Vertrag verlängern"-Redirect mit #playerN öffnet automatisch den Offense-Tab und scrollt zur Zeile)
  • DataTables-Spaltenbreiten werden beim Tab-Wechsel via columns.adjust() neu berechnet — keine 0-px-Spalten mehr nach dem Switch
  • Mobil bricht die Tab-Bar in 2 Zeilen um statt horizontal zu scrollen

🏟️ Conference + Division als Hero-Karten-Grid

  • Auf conference.php + division.php wird die alte 1-Zeilen-Liste durch ein 4-Karten-Grid pro Division ersetzt — jede Karte im selben „th-card"-Look wie die Team-Hero-Card auf team.php (Diagonal-Gradient color1 → dunkel → color2, animiertes Sheen-Streifen, halb-transparentes Team-Logo im Hintergrund)
  • Pro Karte: Logo, Name, Color-Swatches, Strategy-Badge (Contending/Retooling/Rebuilding), Saison-Record, OVR/OFF/DEF/SPE-Rating-Kreise und Durchschnittsalter (Team + 3 Positionsgruppen)
  • User-Team bekommt einen weißen Outline-Ring, damit es im Grid sofort ins Auge fällt
  • Sortierung: nach Saison-Bilanz (Wins desc, Losses asc), sonst alphabetisch

🎨 Icons + Title-Case-Sweep über die ganze App

  • Passende Emoji-Icons vor jeder <h1> und Section-<h2>: 💰 Finanzen · 🎟️ Tickets & Merch · 🤝 Partner · 👔 Personal · 🏟️ Vereinsumfeld · 🟢 Offense · 🔴 Defense · 🟡 Special Teams · 🩹 Practice Squad · 📊 Stats · 🏆 Top League Players · 📈 Power Ranking · 🏛️ Hall of Fame · 🔍 Spielersuche · 🆓 Free Agents · 🎯 Draft · 📋 Vertragsübersicht · 🪙 Coins · 📰 News · 📖 Glossar — die Liste ist lang
  • Sämtliche Block-Caps-Lang-Strings (DE + EN) auf normale Schreibweise normalisiert: „BEOBACHTUNGSLISTE" → „Beobachtungsliste", „SPIELER SUCHEN" → „Spieler suchen", „TOP-LIGASPIELER" → „Top-Ligaspieler", „SCHEDULE" → „Schedule" usw. — kein Geschrei mehr in den Headern
  • Schließen-X (×) konsistent oben rechts in allen Bestätigungs-Overlays (Yard, Personal, Partner)

🏆 Neues monatliches Season Ranking

  • Neue Seite seasonranking.php mit 4 Tabs: Easy / Medium / Hard jeweils gefiltert auf Spielstände, die im aktuellen Kalendermonat gestartet wurden — am 1. um 0:00h startet automatisch eine neue Season; plus All-Time für die ewige Bestenliste über alle Schwierigkeiten
  • Volle DataTable mit Pagination, Suche, sortierbaren Spalten — gleiche Score-Formel und Spalten wie die index.php-Top-10-Box (SB · CF · Playoffs · Achievements · Peak-OVR · Saisons · W-L-D · Trades · Drafted · Kontostand)
  • Easy/Medium/Hard kommen mit „Daten: Fiktiv" als Voreinstellung; All-Time hat beide Filter (Schwierigkeit + Daten) wie auf der Startseite
  • Erreichbar per goldenem Button unter „🏆 Top 10 Spielstände (All-Time)" auf der index.php oder via Sidebar im Spiel
  • Funktioniert mit und ohne aktive Spiel-ID — Public-Header außerhalb, Ingame-Header sobald ein Spiel läuft

📝 Entwickler-Blog auf der Startseite

  • Neuer 📝-Button neben dem Discord-Banner (gleiche Höhe) führt zum Entwickler-Blog
  • Direkt darunter ein Auto-aktualisierender Teaser-Block der letzten 3 Artikel: Tag, Datum, Titel, 50-Wort-Excerpt + „Weiterlesen »"-Link mit Anker zum jeweiligen Artikel
  • Single Source of Truth: _blog_posts.php definiert die Reihenfolge — neue Artikel oben einfügen, Teaser + blog.php aktualisieren sich automatisch

Tag 1 fühlt sich an wie ein neuer Anstrich für jede Seite, die regelmäßig im Blickfeld ist. Tab-Bars sparen Scrollen, Hero-Karten machen aus reinen Tabellen visuelle Geschichten, und das neue monatliche Season Ranking bringt einen frischen Wettbewerbs-Hook für alle, die gerne ihren Score gegen die Community messen.

Onboarding-Schliff: Custom-Imports validiert, Tutorial mit Step-Indicator, Discord-CTA

Tino H. Tino H.

Diesmal liegt der Fokus auf Onboarding und Custom-Games: Eigene Liga-Imports werden serverseitig validiert (mit i18n-Fehlermeldungen), Custom-Team-Logos rendern jetzt als SVG mit transparentem PNG-Fallback, das Tutorial bekommt einen klaren Step-Counter, und ein dezenter Discord-CTA unterhalb der Spielstände-Liste lädt zur Community-Session ein.

📥 Custom-Imports: Datei-Upload + Validator

  • Importseite akzeptiert jetzt direkt CSV-File-Uploads (Teams, Spieler) statt nur URL-Eingaben — schnellerer Einstieg für Liga-Importe vom Tabletop oder aus eigenen Tools
  • Server-Validator prüft beim Upload: Spaltenanzahl, Pflichtfelder, Wertebereiche (Stärke 0–100, Alter 18–45 etc.) und schlankere Schema-Variante mit weniger Pflicht-Spalten
  • Fehlermeldungen in DE + EN mit lokal-spezifischen Tausender-Trennzeichen (z.B. „Zu wenig Fans (1.000.000) — Mindestwert 1,5 Mio." vs. EN „Fanbase too low (1,000,000) — minimum 1.5M")
  • Off-by-One-Bug in den CSV-Templates beim ersten Spieler-Datensatz behoben — Templates laden ab sofort sauber
  • Generator nfl-import53.py auf das schlankere Schema synchronisiert

🛡️ Custom-Game-Logos jetzt als SVG

  • Custom-Game-Spielstände rendern Team-Logos jetzt primär als SVG (statt PNG) — gestochen scharf in jeder Größe, kleinerer Footprint
  • Pre-Cache vor startgame.php: Sobald die Logo-URL bekannt ist, wird die SVG asynchron im Hintergrund geholt; ein generischer fake-SVG-Fallback steht bereit, falls der Download fehlschlägt
  • .htaccess-Rewrite leitet fehlende .svg-Anfragen automatisch auf .png um — alte Custom-Spielstände ohne SVG-Asset funktionieren weiter
  • Permanent fehlgeschlagene Downloads werden bei Wiederholung übersprungen, parallele Retries werden gebündelt — sauberer Custom-Game-Onboarding-Flow auch bei wackeligen Quell-CDNs

🎓 Tutorial-Schliff

  • Neuer Step-Indicator direkt unter der Tutorial-Navigation: zeigt jederzeit „Schritt X von Y", damit klar wird, wie viel noch ansteht
  • EN-Typo „+5%% OVR" → „+5% OVR" gefixt
  • Aktualisierter Roster-Depth-Screenshot in Tutorial-Schritt 4
  • DE-Wording auf franchise.php: „Konto" → „Balance" für die EN-Version, damit das Vokabular international konsistent bleibt

💬 Discord-CTA prominent platziert

  • Neuer Discord-Banner direkt unter dem „Bestehende Spiele"-Block auf der Startseite — sofort sichtbar für jeden, der die Seite öffnet
  • Im Feedback-Overlay landet ebenfalls ein Discord-CTA unter dem Submit-Button — Bug-Reports und Feature-Wünsche bekommen damit einen direkten Live-Channel
  • Asset grafiken/discord.png ausgeliefert

🎨 Team-Polishings

  • teams.php: neue Spalte „Team-Farben" mit kleinem Gradient-Chip (color1 → color2) — sortier- und durchsuchbar
  • 12 fiktive Teams mit zu hellem color2 bekommen einen Kontrast-Boost, damit weiße Schrift auf der Sekundärfarbe zuverlässig lesbar bleibt — keine grauweißen Player-Namen mehr im Trade- oder Roster-Overlay

🤝 Trade-Cap-Konsistenz

  • trade.php bekommt einen 3-Pick-Cap pro Seite als Pendant zum bereits existierenden 5-Player-Cap — verhindert mega-übergroße Pick-Pakete, die das Draftroom-Limit später sprengen würden
  • checkTeamNeeds() respektiert die Cap-Sperre: bereits limitierte Checkboxen werden nicht mehr fälschlich wieder aktiviert, wenn die Bedarfs-Highlights neu gerendert werden
  • Selektierte Spieler werden jetzt zuverlässig aus dem idstring gezählt statt aus :checked — funktioniert auch nach DataTable-Filter-Wechseln, die nicht-passende Zeilen aus dem DOM detachen

Onboarding-Tag: Custom-Imports werden defensiver, Tutorial wird klarer, Custom-Logos werden schöner, und der Discord-Eingang ist für alle sichtbar. Plus die letzten Lücken im Trade-Cap-System geschlossen, damit Pick-Pakete nicht mehr aus dem Ruder laufen.

Hall-of-Fame-Relaunch: Award-Hero-Boxen, Trophäen-Wand & saisonbezogene Stats

Tino H. Tino H.

Die halloffame.php wird vom statischen Tabellen-Friedhof zur eigenen Bühne: Oben prangen die aktuellen Titelträger als Award-Hero-Boxen im Team-Farbverlauf — mit positions­spezifischen Saison-Stats, scout-bewusster Stärke/Potenzial-Anzeige und einer Trophäen-Wand für die letzten 5 Champions der Liga. Plus dem gleichen Hero-Block in Woche 26 in player_stats_leaders.php und einem Bug-Fix im Saisonrückblick-Overlay, der orange Rating-Kreise bei OVR 88-90 endgültig grün macht.

👑 Award-Hero-Boxen auf HOF + Player Stats

  • Neuer geteilter Partial _player_awards_hero.php rendert 5–7 Trophy-Cards (MVP, SBMVP, OPY, DPY, ORY, DRY, OCPY, DCPY) im selben po-stage-bg-Stil wie die simresult-W26-Awards-Box — Team-Farbverlauf mit dunklem Mittelpunkt, animierter Sheen-Streifen, Crosshatch-Textur, gold-umrahmte MVP/SBMVP-Karten
  • Pro Karte ein positions­spezifischer Stat-Streifen für die Award-Saison: QB → PA YDS / PA TD / QBR · RB → RU YDS / TD / YPR (Yards pro Lauf) · WR/TE → RE YDS / REC / TD · DL/LB → TKL / SACK / INT · CB/S → TKL / INT / SACK · K → FGM / FG% · P → PUNTS / AVG YDS
  • Stärke- und Potenzial-Sterne in den Karten deutlich vergrößert (14px → 32px), damit sie zum Stärke-Rating-Kreis passen — kein optisches Ungleichgewicht mehr
  • Karte des eigenen Teams bekommt einen blauen Glow-Border, damit eigene Award-Spieler sofort ins Auge stechen
  • SBMVP-Fallback: existiert keine dedizierte „sbmvp"-Zeile, zieht die Box automatisch den Game-MVP des Super-Bowl-Spiels nach
  • Auf halloffame.php permanent sichtbar (W1-25 = Vorjahres-Sieger, ab W26 = aktuelle Saison-Sieger) — auf player_stats_leaders.php nur in W26 mit den frisch announceten Award-Spielern

🏆 Trophäen-Wand auf der Hall of Fame

  • Neuer Block oberhalb der Teams-Tabelle: zeigt die letzten 5 Saisons mit Super Bowl, AFC- und NFC-Champion in einer fh-cabinet-Vitrine im Holzschrank-Stil (deselbe Optik wie auf der Franchise-Seite)
  • Pro Saison ein eigenes Glasregal mit Saison-Pille als Label, darin nebeneinander die 3 Trophäen-Karten (Super Bowl gold, AFC rot, NFC navy) inkl. Team-Logo-Badge des jeweiligen Champions — alles klickbar zur jeweiligen team.php
  • Älter als 5 Jahre? Dezenter Hinweis-Banner unter der Vitrine („Es werden nur die Titel der letzten 5 Saisons angezeigt …") verhindert, dass der Schrank in Saison 12+ unendlich lang wird
  • Voll responsive: ab 540px Viewport wird das Grid auf 120px-Kacheln und kleinere Trophäen umgeschaltet

📅 W26-Announce-Gating überall einheitlich

  • Award-Sieger werden konsistent erst ab Woche 26 sichtbar — passend dazu, dass die offizielle Verleihung im simresult-Overlay genau dort stattfindet
  • HOF-DataTable, Hero-Box und Trophäen-Wand respektieren alle dieselbe Regel: Saison N nur dann anzeigen, wenn die Saison über W26 hinaus ist (oder eine spätere Saison schon läuft)
  • Game MVPs auf player_stats_leaders.php sind ab sofort immer sichtbar — nicht mehr nur in Woche 26
  • Redundante alte „Saison-Awards"-Tabelle in player_stats_leaders rausgeworfen — die Hero-Box ersetzt sie vollständig

🐞 Saisonrückblick-Overlay: Rating-Farbe endlich korrekt

  • Im Block „🔮 Saisonausblick" zeigten die Conference-Favoriten-Kreise bei OVR 88-90 hartnäckig orange-gelb statt grün — Ursache war ein Builder-Pfad in saisonwechsel.php, der die abgeleiteten bereich/color-Felder nicht mitbefüllt hat
  • Render-Site fällt jetzt nicht mehr auf r70 zurück, sondern berechnet die Rating-Klasse + Farbe immer frisch aus dem dargestellten OVR — Farbe und Zahl können nicht mehr auseinanderlaufen, egal welcher Builder die Daten geliefert hat

🧹 Kleinere Polishings

  • Newsticker im Header: $logos_ext wurde im Closure nicht erfasst → Warnings auf jeder Seite, behoben
  • simresult-W26-Awards-Box: Team-Logos für Award-Spieler funktionieren jetzt auch in Custom-Games (logos_custom/Game-ID-Pfad mit korrekter Extension)
  • Menüpunkt + h1: DE „Teamstärken" → „Power Ranking", damit die Bezeichnung 1:1 zum englischen Pendant passt
  • Stat-Label „YPC" → „YPR" (Yards pro Laufversuch), zusätzlich neue Language Keys stat_pa_yds, stat_qbr, stat_tkl & Co. für saubere Übersetzbarkeit

Hall of Fame fühlt sich jetzt wie eine echte Ruhmes-Halle an — mit Hero-Stage für aktuelle Champions, klickbarer Trophäen-Wand für die jüngere Liga-Historie und positions­bezogenen Stats, die zeigen, warum der MVP MVP geworden ist. Und der lästige Orange-vs-Grün-Bug im Saisonrückblick ist nach drei Anläufen endlich erledigt.

Achievements als Sammelkarten, Power-Ranking-Podium & AFC/NFC-Redesign

Tino H. Tino H.

Die Achievements-Seite wird zum Sammelkarten-Album, das Power Ranking bekommt ein Top-3-Podium über der Tabelle, und Conference-Logos werden auf neue SVGs umgestellt — inklusive vertauschter Farb­paletten zwischen AFC und NFC, damit die Optik 1:1 zur echten NFL passt. Plus ein größerer Trade-Refactor, der Asset-Werte zum Trade-Zeitpunkt einfriert, statt nachträglich umzurechnen.

🏅 Achievements als Sammelkarten-Grid

  • Komplett neuer Look: Achievements werden als Karten-Grid mit Tier-Akzenten gerendert (Bronze, Silber, Gold, Platin) — jede Karte mit eigenem Icon, Fortschrittsbalken und farbigem Border je nach Tier
  • Locked Achievements werden deutlich stärker entsättigt + abgedunkelt, damit erspielte Erfolge optisch sofort herausstechen
  • Sortierung: Achievement-Familien zusammen (z.B. alle „Trade Master"-Stufen nebeneinander), erspielte Karten zuerst, innerhalb der Familie aufsteigend nach Wert — kein Suchen mehr nach der nächsten Stufe
  • DE-Wording-Pass: Redundantes „mal" in Staff- und Facilities-Labels rausgeflogen („3 mal aufrüsten" → „3× aufrüsten")

🥇 Power Ranking — Top-3-Podium über der Tabelle

  • Direkt unterhalb der Seitenüberschrift jetzt ein Hero-Podium für Platz 1, 2 und 3: Gold-Karte größer + zentriert, Silber links, Bronze rechts (auf Mobile rückt Gold automatisch ganz nach oben)
  • Jede Podium-Karte zeigt einen kontext­bezogenen Quote pro Team („Die Saison gehört uns" / „Wir sind hungrig"), Rang-Pille auf 2.5rem hochgezogen, Power-Score als .rating-Kreis im selben Stärke-Look wie der Rest des Spiels
  • DE: „Team-OVR" im Podium-Quote auf „Team-Stärke" umbenannt — konsistent zum Spiel-Vokabular

🆕 AFC/NFC-Logo-Redesign + SB-Hero-Box

  • Neue handgezeichnete SVG-Logos für AFC und NFC (statt der alten PNGs) — schärfer auf Retina, kleiner im Repo, skalieren sauber auf Mobile
  • Farbpaletten zwischen den beiden Conferences getauscht, damit AFC-rot / NFC-navy 1:1 zur echten NFL passt
  • Eigene Hero-Box für den Super Bowl auf der Conferences-Seite mit beiden Champion-Teams + SB-Trophäe
  • Konsequente Sweep durch alle .png-Referenzen — verbleibende PNG-Pfade auf SVG umgezogen

📦 Trade-Wert-Snapshot statt Live-Rechnung

  • Neue Spalte userteamtradehistory + Snapshot pro Asset: der Wert eines Spielers / Picks zum Trade-Zeitpunkt wird eingefroren und gespeichert, statt nachträglich live aus dem heutigen OVR herzuleiten
  • Render-Layer auf Tradingblock und in der Trade-History zieht jetzt aus dem Snapshot — historische Trades zeigen genau die Werte, die zum Trade-Datum gegolten haben
  • CPU-Trades: Off-by-One in der Pick-Auswahl gefixt, der bisher den ersten Pick von Team 2 verschluckt + den Wert über­schätzt hat — Trade-Engine bewertet jetzt sauber
  • Provisorische Pick-Nummern in der Trade-History bekommen einen Footnote-Hinweis, damit unklar nicht zu „kaputt" wird

🎨 Custom-Games + fiktive Modi polishen

  • Custom-Games kopieren ab sofort die League-SVG-Assets (AFC, NFC, Super Bowl, Pro Bowl) automatisch nach logos_custom/<game-id>/ — kein 404 mehr beim ersten Aufruf neuer Custom-Spiele
  • Heal-Script erkennt fehlende SVG-Assets in bestehenden Custom-Games und schiebt sie nach — auch alte Spielstände bekommen das Redesign
  • Neue Spalte team.name_kurz_fake: im Fake-Mode darf jedes Team eigene Kurzcodes haben (NYE / NYS / STR), die sich von den realen Codes unterscheiden — saubere Trennung zwischen Real- und Fake-Liga
  • Index-Top10: Ranking-Box zieht den Fake-Namen jetzt aus team_start statt aus der Live-Tabelle — kanonischer SVG-Pfad selbst für noch nicht gestartete Spiele

Achievements wirken jetzt wie ein echtes Trophy-Cabinet, das Power Ranking bekommt seine Champagner-Bühne ganz oben, und die AFC/NFC-Optik passt endlich zur NFL-Realität. Plus ein Trade-Refactor, der historische Werte sauber konserviert — ein Rückblick in die Trade-History zeigt jetzt, was die Assets damals wirklich wert waren.

Tutorial-Ausbau, Top-3-Trades-Box & frische Screenshots

Tino H. Tino H.

Das Tutorial wurde komplett überarbeitet: 17 Schritte mit Step-Counter, fancy Button-Navigation, frischen Screenshots aus dem aktuellen Build und ein neuer Events-Step, der das Sim-Result-Overlay in eigener Etappe vorstellt. Parallel kommt im Sim-Result-Overlay eine neue Top-3-Trades-Box dazu — du siehst sofort, welche CPU-Trades die Liga in deinen simulierten Wochen umgekrempelt haben.

📚 Tutorial-Ausbau

  • Neuer Events-Step in der Tutorial-Tour: das Sim-Result-Overlay bekommt seine eigene Etappe mit Erklärung zu News-der-Woche-Box, Top-3-Trades und Super-Bowl-Stage
  • Schritte 6–9 (Trading Block, Direct Trade, Free Agents, Draft) wurden inhaltlich deutlich erweitert — neue Sub-Bereiche für CPU-Offer-Overlay, FA-Negotiation, Mock-Drafts und cinematic Pick-Overlay
  • Step-Counter oben rechts zeigt jederzeit „Schritt X von 17" — kein Verlieren mehr in der Tour
  • Fancy-Button-Nav: aus den schlichten Next/Stop-Links sind jetzt richtige Action-Buttons im Spielstil geworden
  • Body-Background von Grau auf Weiß umgestellt — Tutorial-Inhalte mit deutlich besserem Kontrast und Lesbarkeit
  • Komplett neue Screenshots aus dem aktuellen Build (statt synthetischer Platzhalter), inkl. präziser DE-Wording-Fixes in mehreren Steps

📰 Top-3-Trades-Box im Sim-Result

  • Neue CPU-only-Box im Sim-Result-Overlay direkt neben dem News-Block: zeigt die drei wertvollsten Trades zwischen CPU-Teams aus deinen simulierten Wochen
  • Logos und Teamnamen sind verlinkt, jeder Spieler kommt mit Scout-aware Stärke + Potential, Picks mit Saison + Runde + Slot
  • Spot-on, um zu erkennen, welche Rivalen ihren Kader gerade um dich herum umbauen — bevor du in der nächsten Sim-Runde überrascht wirst

🛠️ news.php „Alle"-Filter-Fix

  • Nach einem Game-Switch zeigte der „Alle"-Filter auf news.php manchmal eine leere Tabelle — typisch nach Wechsel zwischen zwei aktiven Spielständen
  • Fix sorgt dafür, dass der Filter den aktuellen Game-Kontext sauber neu auswertet, sodass alle News des aktiven Spiels wieder erscheinen

🏆 Footer-Awards-Refresh

  • Awards-Karten im Footer haben jetzt: Name auf eigener Zeile, Meta-Zeile darunter, gleiche Karten-Höhe in der Reihe
  • Statt generischer Platzhalter zitieren die Karten jetzt fiktive Presse-Outlets („GridironGazette", „PressboxWeekly", …) — deutlich mehr Atmosphäre auf der Public-Landing-Page

Tutorial wirkt jetzt aus einem Guss — mit echten Screenshots, klarer Schritt-Logik und einem eigenen Events-Step, der den wichtigsten Sim-Moment der Woche erklärt. Und die neue Top-3-Trades-Box bringt das Liga-Geschehen direkt ins Sim-Result-Overlay, damit du nichts Wichtiges mehr verpasst.

Cinematic Draft: Pick-Overlay, Featured-Pick-Stage & Mock-Draft-Wochen

Tino H. Tino H.

Der Draft bekommt seinen großen Auftritt: Pick für Pick öffnet sich jetzt ein cinematic Overlay mit Spielerfoto, Pick-Nummer und Live-Grade — und für den stärksten Wert-Pick einer Sim-Runde gibt es eine eigene Featured-Pick-Bühne. Dazu kommen drei vorgezogene Mock-Draft-Wochen (17/21/25), ein gepushter Pre-Draft-Banner und eine deutlich aufgeräumte Mock-Draft-Box mit Team-Color-Header und responsiven Prospect-Cards.

🏈 Pick-by-Pick-Overlay

  • Pre-Draft-Welcome-Banner mit On-the-Clock-Card lenkt den Einstieg in die Draft-Sim — beim ersten Pick ploppt das Overlay direkt auf
  • Cinematic Single-Pick-Overlay: großes Spielerfoto, Pick-Nummer mit Stamp-In-Animation (bleibt nach dem Einblenden sichtbar), Team-Logo, Stärke/POT-Ringe und Live-Grade — alles in einem klar lesbaren Stack
  • Trade-Pick-Vorauswahl: bei aktivem Trade-Workflow ist der relevante Pick automatisch vorausgewählt, kein Suchen mehr in der Pick-Liste
  • Welcome-Icon entdoppelt — der Header zeigt das Logo nur noch einmal sauber pro Visit

🎬 Featured-Pick-Stage & Closing-Box

  • Bei Multi-Pick-Sims (z.B. ganze Runde durchsimuliert) bekommt der wertvollste Pick eine eigene cinematic Bühne mit Highlight-Animation — Label: „Bester Pick im Simulationslauf"
  • Closing-Box am Ende der Sim: Value-Gain-Feature mit Steigerung pro Team, Champion-Strip mit den drei besten Draft-Klassen und ein zusammenfassender Abschluss-Card
  • Der Featured-Pick wird unabhängig von der Pick-Reihenfolge gezeigt — auch ein Round-3-Steal kann zum Star der Runde werden

🎯 Mock-Drafts in Wochen 17 / 21 / 25

  • Drei Round-1-Mock-Drafts werden jetzt automatisch in Woche 17 (Trade-Deadline-Mock), Woche 21 (Mid-Saison) und Woche 25 (Final-Mock) erzeugt und in draft.php verlinkt
  • Pre-Draft-Banner deutlich aufgewertet: größerer Hero-Block mit Countdown-Vibe, klare Hierarchie auf der Draft-Page
  • Draft-Class-, Players- und Order-Links sind jetzt durchgängig lokalisiert (DE/EN)

🪟 Mock-Draft-Box Polish

  • Header der Mock-Draft-Box nutzt jetzt color1 des User-Teams + 📋-Clipboard-Icon — visueller Anker, der zum Team passt
  • Header-Text bleibt links-bündig, auch bei langen Box-Titeln
  • Responsive Prospect-Card-Grid: Cards kollabieren sauber auf engen Screens, ohne dass Stärke/POT-Ringe oder Sterne abreißen
  • Dünnere Stärke/POT-Ringe und größere Sterne in den Mock-Draft-Cells — der Inhalt steht stärker im Fokus, weniger UI-Chrome

🧹 Kleinere Polishings

  • news.php-Filter „Alle" zeigte nach einem Game-Switch keine Einträge mehr — Fix sorgt jetzt für korrekte Anzeige aller News auch nach Spielwechsel
  • Footer-Awards: Name auf eigener Zeile, Meta-Zeile darunter, gleiche Karten-Höhe — und fiktive Presse-Outlets für mehr Atmosphäre

Der Draft-Sim fühlt sich jetzt wie ein eigener Event-Moment an — mit Welcome-Banner, cinematic Pick-Overlay, einer eigenen Bühne für den besten Wert-Pick und einer Closing-Card, die deine Draft-Klasse einordnet. Plus drei Mock-Draft-Wochen über die Saison verteilt, damit das Hype-Building schon vor Woche 25 startet.

Salary-System-Rework, echte NFL-Guides & Weekly-Sim-Sicherheitsnetz

Tino H. Tino H.

Der große Cap-Re-Balance ist da: Spielergehälter sind jetzt hart gedeckelt auf 25 Mio€ für Veteranen und 7,5 Mio€ für den #1-Rookie-Pick. Die Grundgehälter je Schwierigkeitsgrad wurden neu kalibriert (2,0 / 2,2 / 2,4 Mio€), und der wöchentliche Sim bringt jetzt ein Cap-Fallback-Sicherheitsnetz auch für Userteams im Auto-Modus mit. Parallel wurden die beiden SEO-Guides salary-cap-guide.php und draft-guide.php komplett neu geschrieben — mit echten NFL-Inhalten statt spielspezifischer Werte.

💰 Harte Gehaltsdeckelung

  • Neue globale Konstanten FF_MAX_PLAYER_SALARY = 25.000.000€ und FF_MAX_ROOKIE_PICK1_SALARY = 7.500.000€ in functions.php (damit für alle Einstiegspfade verfügbar)
  • Cap wird angewendet in: Spielbeginn, CPU-Vertragsverlängerung, User-Verlängerung, Quick-Re-Sign, Rookie-Draft-Gehälter, Reset-Skript und allen UI-Vorschauen
  • Ziel: Bei Salary Cap 200 Mio€ und Roster 53 sollen selbst Superstar-Verträge das Budget nicht sprengen — und die CPU kann Verträge zuverlässig verlängern, statt Stars als FA abzustoßen

⚖️ Grundgehalts-Rebalance

  • Leicht: 2,0 Mio€ (war 2,2)
  • Mittel: 2,2 Mio€ (war 2,4)
  • Schwer: 2,4 Mio€ (war 2,6)
  • Angewendet in header_connect.php (Spielstart), saisonwechsel.php (Backfill-Defaults) und dem Schwierigkeits-Overlay auf index.php

🛡️ Weekly-Sim Cap-Fallback für User

  • Beim Wochenübergang (Woche 3 → 4 und jeder weiteren) läuft jetzt das volle Sicherheitsnetz auch für das Userteam, wenn depthchart_mode != manual: PS-Optimizer → Depth-Chart-Neuberechnung → Cap-Enforcement → Lineup-Refresh
  • Enforcer bekommt das Userteam als no_release mitgegeben: Demotes in die PS sind erlaubt, Releases bleiben strikt User-Only
  • Nach dem Enforcer läuft update_lineupuserteam_bymode() erneut, damit Demotions im Lineup ankommen und der Cap Space sauber > 0 angezeigt wird

📚 Echte NFL-Guides (GEO/SEO)

  • salary-cap-guide.php komplett neu: Signing-Bonus-Proration, Dead Cap, June-1-Designation, Franchise & Transition Tag, Rookie Wage Scale, 5th-Year-Option, Cap-Carryover, Restructures und Void Years — mit Cap-Historie 2020–2025 und der echten 279,2 Mio USD Zahl für 2025
  • draft-guide.php komplett neu: Pick-Reihenfolge mit Slots 1–30, Compensatory-Picks-Formel, 5th-Year-Option, Jimmy-Johnson- und Chase-Stuart-Trade-Value-Chart, Scouting-Combine-Drills und Underclassman-Declaration-Deadline
  • Beide Guides haben nun FAQ-Schema und Article-Schema mit korrekten datePublished/dateModified und verlinken wechselseitig

🧹 Kleinere Polishings

  • Header: grafiken/beta.png-Icon entfernt (sowohl neben dem User-Teamnamen als auch neben dem Conference-Logo)
  • Footer-Version auf v1.0-20260424 aktualisiert
  • team.php: Transaction-History-Tabelle zeigt keine "Practice Squad"-Typ-Zeilen mehr — die stehen schon eine Tabelle weiter oben in "Kaderbewegungen"

Mit harten Gehaltsdeckeln, stabilerem Grundgehalts-Rebalance und dem neuen Weekly-Sim-Sicherheitsnetz ist die Cap-Ökonomie jetzt belastbar genug für lange Franchise-Läufe — und die beiden neuen NFL-Guides bringen reale Football-Inhalte auf die SEO-Seite, damit Google & Co. echten redaktionellen Mehrwert finden.

Cap-Enforcer-Tiefgang: Injury-Swaps, Roster-Trim & User-Sicherheitsnetz

Tino H. Tino H.

Ein Blick tief in den Salary-Cap-Enforcer: Ein Spielstand im lokalen Test (Game 206, Saison 3, Woche 1) zeigte, dass der Enforcer bestimmte Spieler übersah — mit dem Effekt, dass Teams bis zu 58 aktive Spieler bei Roster-Limit 53 und einen negativen Cap Space von über 26 Mio€ behielten. Diese Runde bringt drei neue Enforcer-Phasen, schützt Userteams vor ungewollten Releases und behebt einen hartnäckigen Blind Spot in der Roster-Abfrage.

🔍 Der Enforcer-Blind-Spot

  • Die Roster-Abfrage des Enforcers filterte bisher AND karriereende=0 AND draft!=2 — gut gemeint, aber die gehaltszahlende Datenbank-Spalte team.salarycap enthält alle Spieler
  • Folge: Der Enforcer sah 53 Spieler bei einer realen Kaderstärke von 58 und rechnete mit ~189M Gehalt, während die echte Summe bei 228,7M lag
  • Fix: Filter entfernt, Enforcer sieht jetzt die komplette Realität — inklusive Spieler mit bevorstehendem Karriereende oder Draft-In-Progress-Flag

🏥 Phase 0A: Injury-Swaps

  • Neuer Phase-Block, der vor dem Roster-Trim läuft: Verletzte aktive Spieler werden 1:1 gegen den stärksten gesunden Non-Retired PS-Spieler derselben Position getauscht
  • Läuft in Schleife, bis keine Tausche mehr möglich sind — stabil auch bei mehreren Verletzten pro Team
  • Phase 2 (Promotion) überspringt jetzt explizit verletzte und zurücktretende PS-Spieler, damit sie nie wieder hochgezogen werden

📉 Phase 0: Roster-Trim auf maxroster (53)

  • Explizite Demote-to-PS-Logik bei Kadergröße > maxroster, die die am höchsten bezahlten Spieler über dem Positions-Optimal zuerst demoten
  • Fallback: Falls keine über-optimale Position existiert, wird von Positionen oberhalb min_lineup demoten — so bleibt ein spielbarer Kader garantiert
  • Löst das Szenario mit 58/53 (6 CB bei Optimum 5, 5 QB bei Optimum 3, 2 P bei Optimum 1) in einem Durchgang auf

🛡️ User-Team-Sicherheitsnetz (keine Releases!)

  • Neuer Parameter $no_release_tids im enforce_cpu_salary_cap()-Aufruf — Teams auf dieser Liste dürfen vom Enforcer nur demoten, aber nie Spieler entlassen
  • Der User-Team wird bei depthchart_mode != 'manual' jetzt immer auf diese Liste gesetzt: Releases bleiben strikt eine User-Entscheidung
  • Neuer Action-Zweig act_demote_above_min springt ein, wenn andere Aktionen für geschützte Teams blockiert sind

🎚️ Depth-Chart-Mode-Toggle als Trigger

  • Wechsel von manual auf eine Auto-Sortierung (z.B. "Stärke absteigend") triggert jetzt optimizer + Cap-Enforcement, damit der Kader sofort sauber unter dem Cap liegt — ohne Releases beim User
  • Language-Key autosort_auto_disabled_hint präzisiert: "…wechsle den Modus oberhalb oder im Seitenmenü auf „Manuell""

Der Enforcer ist jetzt deutlich präziser, Userteams können nicht mehr unwillentlich Spieler verlieren, und verletzte Spieler landen automatisch dort, wo sie hingehören — auf der Practice / Injury Squad. Ein großer Schritt für die Balance aller Franchise-Modi.

Neue Spielstruktur, SEO-Feinschliff & Multi-Game-Sicherheit

Tino H. Tino H.

Ein umfangreicher Umbau steht an: Die index.php ist jetzt eine reine öffentliche Landing Page, während das Ingame-Zuhause in die neue start.php wandert. Dazu gibt es drei Sicherheitsnetze, damit ein User nie zwei aktive Spiele gleichzeitig in der DB haben kann, einen kritischen Canonical-Fix für Google und 19 weitere Seiten im Nogame-Modus für die AdSense-Integration.

🏠 Neue Startseiten-Architektur

  • index.php läuft jetzt ausschließlich als öffentliche Landing Page (SEO-Header, Spielauswahl, Neues-Spiel-Formular) — auch bei aktiver gameid bleibt die Seite als Landing Page sichtbar, via $is_public_page = true
  • Die neue start.php ist das zentrale Ingame-Zuhause und enthält alle bisherigen Ingame-Elemente der Startseite (Money-EOS, Expiring Contracts, Standings, Player Leaders …)
  • Menüpunkt "START", Klick auf den Teamnamen im Header und das Home-Icon im Icon-Menü verlinken jetzt auf start.php
  • Buttons "Spielen" und "Starten" leiten nach Spielstart korrekt auf start.php weiter — startgame.php und alle Ingame-Error-Redirects wurden entsprechend angepasst

🛡️ Multi-Active-Game Safeguards

  • Drei Schutzschichten verhindern, dass ein User je zwei aktive Spiele gleichzeitig in der Datenbank hat:
  • Continuegame-Handler: Deaktiviert jetzt in einem einzigen bulk-SQL-Statement alle Cookie-eigenen Spiele, bevor das Ziel-Spiel aktiviert wird — keine Race-Condition mehr möglich
  • Newgame-Handler: Vor dem INSERT werden ebenfalls alle bisherigen Spiele des Users deaktiviert
  • Gameid-Resolution: Sollte trotzdem je mehr als ein aktives Spiel gefunden werden, werden die Extras automatisch deaktiviert und im error_log als MULTI-ACTIVE GUARD vermerkt

🔗 Canonical-URL-Fix

  • Google Search Console meldete /index.php und / als zwei separate URLs mit unterschiedlichen Canonicals — beide zeigten aber denselben Inhalt
  • header.php normalisiert jetzt /index.php/ für das <link rel="canonical">-Tag, sowohl auf footballfranchise.de als auch auf football-franchise.com
  • Die www-vs-non-www-Canonicalisierung war bereits korrekt — Besuche auf www.footballfranchise.de/index.php zeigen jetzt ein einheitliches canonical → https://footballfranchise.de/

🕸️ AdSense-Ready: 19 weitere Seiten

  • Der $allow_nogame_ingame-Flag wurde auf alle zentralen Ingame-Seiten ausgerollt: franchise, tradingblock, trade, players, freeagents, draft, teams, table, conference, division, schedule, players_stats, player_stats_leaders, halloffame, powerranking, players_watchlist, tradehistory, achievements, coins
  • Alle Seiten rendern jetzt ohne aktive gameid ihre vollständige HTML-Struktur mit leeren Tabellen — perfekt für den AdSense-Crawler, um Block-IDs für Anzeigenplatzierungen zu referenzieren

🧹 Cronjob-Schutz

  • cron_cleanup_old_games.php schützt jetzt Spiel-ID 1 (Seed-/Demo-Spiel) vor der automatischen Löschung nach 30 Tagen Inaktivität
  • Doppelte Sicherung: WHERE id <> 1 im SELECT und zusätzlich ein Hard-Guard in der Delete-Loop

Mit der sauberen Trennung zwischen öffentlicher Landing Page und Ingame-Home sowie den Multi-Active-Game-Schutzmechanismen ist die App deutlich robuster geworden. Parallel kann der Crawler jetzt alle wichtigen Seiten indexieren — ein riesiger Schritt Richtung produktiver SEO- und AdSense-Integration.

Trade-Regeln, Tutorial-Hinweise & SEO-Vorbereitungen

Tino H. Tino H.

Die Tage rund um die Wochenmitte standen ganz im Zeichen kleiner, aber wirkungsvoller Verbesserungen: Rookies in ihrer frühen Karriere sind jetzt trade-geschützt, das Tutorial erklärt verständlicher, welche Spieler warum ausgegraut sind, und im Hintergrund wurden die Weichen für eine saubere AdSense-Integration gestellt. Dazu kommt ein überarbeitetes robots.txt, damit Google-Crawler das Spiel vollständig indexieren können.

🔒 Rookie-Schutz bei Trades

  • Rookies im 1. und 2. Jahr nach dem Draft können nicht mehr gehandelt werden — sie sollen sich beim drafteten Team entwickeln dürfen
  • Rookies im 3. und 4. Jahr bleiben handelbar
  • Betroffene Spieler werden in trade.php und tradingblock.php automatisch ausgegraut (Opacity 0.4, Checkbox deaktiviert) mit Tooltip-Hinweis
  • CPU-Trade-Angebote enthalten ebenfalls keine jungen Rookies mehr — egal ob User- oder CPU-Seite

📚 Tutorial-Hinweise

  • Tutorial-Schritt 6 (Trades) erklärt jetzt zusätzlich die Rookie-Sperre und dass Spieler auf Basis von Roster-Größe, Positions- und Stärke-Bedarf ausgegraut werden können
  • Tutorial-Schritt 7 (Trading Block) wurde um identische Hinweise erweitert
  • Alle neuen Texte in beiden Sprachen (DE/EN) über Language Keys gepflegt

🕷️ AdSense-Vorbereitung

  • Die team.php ist jetzt auch ohne aktive gameid vollständig erreichbar — alle <div>-Container und Block-IDs bleiben erhalten, DataTables rendern ohne Daten
  • Dafür wurde ein neuer Flag $allow_nogame_ingame eingeführt, der in header.php, footer.php und header_connect.php greift und Default-Stubs für $game, $team, $userteam etc. bereitstellt
  • Das ermöglicht dem AdSense-Crawler, die Seitenstruktur zu sehen und Block-IDs für die Anzeigenplatzierung zu referenzieren

🤖 Google-Crawler-Freigabe

  • robots.txt neu strukturiert: Alle Google-Bots explizit whitelistet (Googlebot, Googlebot-Image, Googlebot-News, Mediapartners-Google, AdsBot-Google, AdsBot-Google-Mobile, APIs-Google, Google-InspectionTool, GoogleOther)
  • Alle anderen Bots werden weiterhin komplett geblockt (User-agent: * / Disallow: /)
  • Sensible Endpunkte (header_connect.php, functions.php, startgame.php, /db_migrations/, /.claude/ usw.) bleiben auch für Google gesperrt

Mit dem Rookie-Schutz bekommt die Trade-Logik ein wichtiges Stück Realismus — und mit der AdSense-Vorbereitung ist jetzt der Weg frei, das Spiel dauerhaft werbefinanziert und kostenlos anzubieten.

Roster-Management, Salary Cap & Balancing

Tino H. Tino H.

Das bisher umfangreichste Gameplay-Update ist live: Ein vollständiger Roster Composition Optimizer sorgt dafür, dass die Kaderaufstellung automatisch optimiert wird, CPU-Teams halten sich jetzt strikt an den Salary Cap und die Spielerentwicklung im Practice Squad wurde realistischer gestaltet. Dazu kommen zahlreiche Quality-of-Life-Verbesserungen.

🧩 Roster Composition Optimizer

  • Neues System gleicht Spieler automatisch zwischen Spieltagskader und Practice Squad ab — basierend auf der optimalen Anzahl pro Position
  • Funktioniert für CPU-Teams (immer Stärke absteigend) und für den Spieler (nach gewähltem Depth-Chart-Modus: Stärke, Potential, Alter oder Wert)
  • Verletzte Spieler werden automatisch ins Practice Squad verschoben, gesunde Ersatzspieler rücken nach
  • Der Optimizer läuft jetzt sowohl vor als auch nach der Spielberechnung — neue Verletzungen aus dem Spiel werden sofort behandelt

💵 Salary Cap Enforcement

  • CPU-Teams müssen ab Woche 4 dauerhaft unter dem Salary Cap bleiben — nicht mehr nur am Cut Day
  • Alle Roster-Verschiebungen (PS-Promotions, Swaps, Optimizer) prüfen jetzt den Salary Cap bevor sie ausgeführt werden
  • Neue Funktion enforce_cpu_salary_cap() als wöchentliches Sicherheitsnetz: entlässt Spieler bis der Cap passt
  • Bei Spieler-Entlassungen wird eine Ablösegebühr je nach Schwierigkeitsgrad berechnet

📈 Practice Squad Entwicklung

  • Die PS-Entwicklung pro Saison ist jetzt auf maximal +4 Stärke gedeckelt
  • Stärkere Spieler (höherer Stärke) profitieren weniger vom PS — ein 80er Spieler bekommt maximal +1 bis +2, ein 67er die vollen +4
  • Behebt das Problem, dass junge Spieler im PS unverhältnismäßig stark aufgewertet wurden

📊 Fanbase & Balancing

  • Fanzuwachs/-verlust pro Saison auf maximal ±10% begrenzt (vorher bis zu +25%/-12%)
  • Verhindert unrealistische Fanbase-Explosionen bei mehreren guten Saisons in Folge
  • Free-Agent-Pool beim Spielstart um ca. 30% erhöht für alle Positionen

⏩ Sim-Button & UI

  • Der Sim-Button zeigt jetzt wochenspezifische Beschriftungen: z.B. "Sim Woche 4 (RS #1 + Cut)", "Sim Woche 21 (PO Wildc.)" oder "Sim Woche 24 (SuperBowl)"
  • Preseason-Kaderlimit wird direkt im Sim-Overlay geprüft — bei zu vielen Spielern ist der Ja-Button deaktiviert

Mit dem Roster Optimizer und der Salary-Cap-Enforcement fühlt sich das Kader-Management jetzt deutlich realistischer an. CPU-Teams agieren wirtschaftlich vernünftiger und die automatische Kader-Optimierung nimmt dem Spieler im Nicht-Manuell-Modus viel Mikromanagement ab. Weiter geht's!

Entwicklungsupdate: Spielsimulation & Bugfixes

Tino H. Tino H.

Der Fokus der letzten Tage lag auf der Stabilisierung der Spielsimulation und der Behebung einiger hartnäckiger Bugs, die sich beim Testen über mehrere Saisons gezeigt haben. Die Wochensimulation läuft jetzt deutlich zuverlässiger und die Finanzberechnungen stimmen endlich teamübergreifend überein.

🎯 Spielberechnung

  • Kritischer Bug behoben: Bei der Simulation mehrerer Wochen am Stück wurden Spiele der Wochen 9-11 übersprungen (alle 0:0). Ursache war ein PHP-Typ-Juggling-Problem in der Branch-Logik von spielberechnung.php
  • Die drei Ausführungspfade (Einzelspiel, alle Saisonspiele, Wochensimulation) sind jetzt sauber als if / elseif / else Kette implementiert

💰 Finanzen

  • Kontostand zum Saisonende (EOS) auf franchise.php und teams.php zeigt jetzt identische Werte — vorher gab es eine Abweichung von bis zu 120 Mio., da franchise.php fälschlicherweise die Daten des eingeloggten Spielers statt des angezeigten Teams verwendete
  • Die EOS-Berechnung auf der index.php berücksichtigt jetzt korrekt nur die aktuelle Saison — zuvor wurden Spiele aller vergangenen Saisons mitgezählt und die Heimspielanzahl war 4x zu hoch
  • CPU-Teams können jetzt nicht mehr Gebäude und Staff aufwerten, wenn der prognostizierte Kontostand am Saisonende dies nicht hergibt

🏆 Award-Benachrichtigungen

  • Saison-Nummer wird jetzt korrekt in der Notification Bar angezeigt (z.B. "Saison 3 Most Valuable Player" statt nur "Most Valuable Player")
  • Doppelte Award-Anzeigen behoben — Spieler mit Awards in mehreren Saisons erzeugten Duplikate
  • Alle Award-Texte auf Deutsch übersetzt ("Saison" statt "Season")

📋 Depth Chart

  • Kadergröße wird jetzt rot hervorgehoben wenn über dem Maximum oder unter 40 Spielern
  • Practice Squad Anzeige wird rot bei mehr als 16 Spielern

Diese Fixes bilden die Grundlage für die nächsten größeren Features. Besonders die saubere Spielberechnung war überfällig und macht das Testen über viele Saisons hinweg jetzt erst richtig möglich.

Entwicklungsupdate: März 2026

Tino H. Tino H.

Football Franchise hat in den vergangenen Wochen einen gewaltigen Entwicklungsschub erlebt – und dieses Update ist der Beweis dafür. Von einem vollständigen zweisprachigen Sprachsystem über rechtssichere Pflichtseiten bis hin zu einem neu gestalteten responsiven Header und einem brandneuen Blog: Das Spiel hat echte Fortschritte gemacht. Ein weiterer Schwerpunkt war die Performance, bei der die Anzahl der Datenbankabfragen auf zentralen Seiten drastisch gesenkt wurde. Dieser Beitrag fasst die wichtigsten Änderungen und Verbesserungen unseres Entwicklungssprints im März 2026 zusammen. Weitere Features und Feinschliffe sind bereits in Arbeit!

🌍 Sprachsystem

  • Vollständiges DE/EN-Sprachsystem mit Flaggen-Switcher im Header eingebaut
  • Sprachauswahl bleibt seitenübergreifend via Cookie (ff_lang) erhalten
  • Nach dem Sprachwechsel bleibt man auf der aktuellen Seite – kein Redirect zur Startseite
  • Alle UI-Texte auf Language Keys in lang/de.php und lang/en.php umgestellt

⚖️ Rechtliche Seiten

  • Impressum (imprint.php) vollständig neu geschrieben – §5 TMG, DSGVO-konform, zweisprachig
  • Datenschutzerklärung (privacy.php) vollständig neu – 7 Abschnitte, Art. 6 Abs. 1 lit. f DSGVO, Google Analytics, Aufsichtsbehörde

📱 Responsiver Header

  • 5 Breakpoints umgesetzt: 1-Zeilen-Layout (≥1600px) bis 4-Zeilen-Layout (<600px)
  • Header-Höhe wird per JS dynamisch gemessen – Inhalte überlappen den fixierten Header nicht mehr
  • Hamburger-Menü-Position bei mittleren Viewport-Breiten korrigiert

🏠 Startseite

  • Screenshot-Galerie (2×2-Raster) unterhalb der Spielbeschreibung ergänzt
  • Difficulty-Modal im einheitlichen Seiten-Stil neu gestaltet
  • Trade-Factor-Info-Button nutzt nun den gemeinsamen .ff-info-btn-Stil
  • Version auf v1.0-20260331-beta aktualisiert, Copyright-Jahr auf 2026 angepasst

⚡ Performance

  • game.php: 5 Einzelabfragen zu 1 JOIN-Query zusammengefasst
  • index.php: ~550 Queries auf ~10 reduziert (Money EOS, Spielplan-Schleifen, Division-Standings)
  • team.php: ~350 Queries auf ~18 reduziert (Aggregate, Spielerstats, Trade-History)
  • DataTables-Sortierbug behoben – JS blockierte Klick-Events auf Desktop-Viewports

Das war einer der produktivsten Entwicklungssprints bisher. Mit dem nun stabilen Fundament – Sprachsystem, Rechtskonformität, Performance und responsives Design – können wir uns in den kommenden Wochen auf mehr Spieltiefe und neue Features konzentrieren. Bleibt gespannt!

NFL Shop