Devlog #2 – Football Legends: putting a face to the players (literally)
Today I want to talk about a visual aspect of Football Legends that might seem minor, but actually carries a lot of weight: your players’ faces.
Quick math
Let’s crunch some numbers to put things into perspective:
- 10 countries
- 8,192 teams per country
- 25 players per team
That gives us 2,048,000 players in main squads.
And if we add a youth team for each club, with, say, 18 more players, the total goes up to 3,522,560 players.
And I’m not even counting staff faces!
Yep — over three and a half million unique faces.
And here’s the big question:
How the heck do you generate 3.5 million different images?
An old idea, a new solution
Luckily, I remembered a technique we used years ago on an animation project. Back then, we created facial expressions using flat images of eyes and mouths, layering them like “stickers” on top of a base model.
It wasn’t exactly what I needed… but it was the perfect starting point.I also looked into how other games tackle this, and everything clicked — this was the ideal solution.
How I apply it in Football Legends
The idea was to break each face down into different interchangeable parts, and create variations for each one.
Then, when generating a new player, I combine those pieces following specific rules to ensure variety and consistency.
Here are the parts I’m using right now:
- backface
- headbase
- facehair
- hair
- eyebrows
- eyes
- nose
- mouth
- facedetails
👉 Here are some examples in Illustrator:
The importance of organization
Each image has a very clear naming structure:
partName_skinTone_variantNumber_hairColor.png
This allows for some super useful things:
- Apply specific rules for certain combinations (for example, red-haired players are very rare in some countries).
- Control how common or rare certain features are based on a player’s nationality.
- Automate the entire image generation and management system.
System advantages
- Lightweight: Each piece takes between 2 and 15 KB, so even with thousands of combinations, disk space stays reasonable.
- Scalable: Creating a new variant is as simple as designing it, naming it properly, and exporting it with a script. Then, just upload it to the server — the game can use it automatically.
How many variants do I have?
Not as many as I’d like. I know the system is visually limited right now, but the important thing is that it works, and it can be expanded with no issues.
All it needs is time — time to keep adding more parts and make player (and staff) faces even richer.
And personally, I’m pretty proud of the result.
What started as an overwhelming problem turned into a flexible, lightweight, and scalable system.
Got feedback or ideas? Get in touch here — I’d love to hear from you!
See you in the next devlog!