Uvuland is meant to be cute and a little bit gross. The names give it away — Uvulite (yes, the dangly thing at the back of your throat), Nostril, Mega Barf, Rotten Roast. The terrain leans the same way: veins, pustules, meat-flowers. The goal is something you smile at and also wince at.
Reading at a glance
The hardest constraint isn't drawing nice sprites, it's that two people are reading a busy board from across a table, fast. If you can't tell what just walked into your lane in half a second, the art has failed.
So each unit gets a strong silhouette and one dominant color. Nostril, the brute, is big and slow and reads as a wall. Baxter, the assassin, is small and quick. You should know what you're up against before you've read a single number.
Names came from roles
A lot of the cast started as the plain role — knight, assassin, brute, healer — and grew a personality once we knew how it played. The "knight" became the Uvulite, the basic little citizen the whole game is named after. The healer became Blubert, who has his own story (next post). Giving them names made it much easier to argue about them, which we do constantly.
Hits land on the frame, not the clock
The thing I'm most happy with is invisible. Instead of "deal damage every X seconds," each attack animation has a specific frame where the hit actually connects, and the damage fires on that frame. It sounds small, but it's why a Brute's heavy wind-up swing feels completely different from an Assassin's fast jabs, even before you look at the stats. The timing you see is the timing that happens.
This is also why we kept redrawing attack animations as units found their identity — when the feel of a swing changes, the frame the damage lands on changes with it.
What's still rough
Plenty. Several units are on first-pass or placeholder art, a couple of attack poses need redoing, and the sustenance node is, as Sahid keeps reminding me, still a blob. The cast is mostly there in spirit; now it needs the polish pass.