Recent Entries
![]() | |
![]() | WC Rosters - How We Got Here Posted by |
Below you will see how I worked with the AI to gather rosters. We had to wait until Tuesday (as in 6 days ago) until all rosters were official and on the FIFA site/Wiki.
I decided on an "approach" for Sweepers (when the AI says Olmec only allows 2 Sweepers that was the AI interpretation of me requesting just 2 as some rosters had 7).
If this goes well I want to do it again for other competitions such as UEFA EURO 2028.
I'm interested in feedback/ideas on roster creation and also takes on Sweepers. Maybe we can find a database on fitness/injuries to setup FIT properly?
Thanks!
=============================
WC 2026 Roster Setup
Player Source & Generation Pipeline
Rosters were built in a multi-step SQL pipeline (wc-setup/ folder):
- 06_players.sql — Bulk-inserts generic squads for all 48 teams (names sourced from Wikipedia API)
- 07_players_real.sql — Overwrites 14 key nations with real player data (Argentina, Brazil, England, France, Spain, Germany, Portugal, Netherlands, Belgium, Croatia, Uruguay, Colombia, Senegal, Morocco)
- 09_players_remaining.sql — Overwrites the other 34 teams with real player names
- 10_fix_sw_positions.sql — Trims sweepers to exactly 2 per team
The Python script generate_players.py drove the data for the 14 key teams, using this structure per player:
(first_name, last_name, position, birth_year, birth_month, quality_tier, jersey_number)
Skill Level Assignment
A deterministic formula based on player caliber tier × FIFA ranking band, capped by age:
|
Caliber |
Rank 1-5 |
Rank 6-15 |
Rank 16-30 |
Rank 31-48 |
|
World class |
16 |
15 |
14 |
13 |
|
Elite |
14 |
13 |
12 |
11 |
|
Solid |
12 |
11 |
10 |
9 |
|
Squad |
10 |
9 |
8 |
7 |
|
Fringe |
8 |
7 |
7 |
6 |
|
Backup |
6 |
6 |
5 |
5 |
Age caps: APP→9, Age I→14, Age II/III→16, Age IV/V→15
The Sweeper Problem
Real-world squads often carry 4-6 centre-backs, but the Olmec engine only supports 2 Sw slots per team lineup. Having more than 2 Sw on a roster means the engine can't properly field them.
Solution (10_fix_sw_positions.sql):
- Keep the highest SL Sw (best CB)
- Keep the lowest SL Sw (depth option)
- Convert all other Sw players to Df (fullback)
The DB trigger UpdatePlayerInfoOnUpdate automatically recalculates pos_num and nls_value when position changes from Sw→Df.
Squad Composition (~26 per team)
|
Position |
Count |
|
Gk |
3 |
|
Sw |
2 |
|
Df |
6-7 |
|
Mf |
8-9 |
|
Fw |
5-6 |
|
Physio (type='B') |
1 |
Fitness Rules
- APP players start at fitness 2, everyone else at 1
- Cap: +2 max, -3 or lower = too injured to play
- Starters lose 1 fitness per match; bench players gain 1 (capped at +2)
|
Olmec Age |
Real Age |
Notes |
|
APP |
18–20 |
Young breakout players |
|
Age I |
21–24 |
Young professionals |
|
Age II |
25–28 |
Peak years — best players cluster here |
|
Age III |
29–32 |
Experienced internationals |
|
Age IV |
33–36 |
Veterans |
|
Age V |
37 |
Very rare, exceptional longevity |
|
SBY |
— |
Not used for WC rosters |
Readers Comments

Al,
Great work in the Pundit's Corner. This game is top notch!

Looks really good to me Al. If you want the full World Cup experience then perhaps a future upgrade is individual ref personalities to reflect the erm, 'variable' qualities of some of those who end up officiating (assuming the host nation lets them into the country of course)

