Inspiration
Tower defense usually has one fixed rule: the map stays put. You read the path, find the chokepoints, and solve your defense around them. I wanted to break that rule.
The inspiration was Mini Motorways, where a growing city forces you to keep adapting. I've always loved tower defense, but not the moment when a map feels solved. What if the enemy could change the roads?
What it does
Tiny TD: Living Roads is a minimalist tower defense game where the map grows during a run. New houses carve fresh routes through your defenses. A carefully protected chokepoint can become a detour, and every tower placement is a bet on where enemies will walk next.
- Four complementary towers: Needle for rapid single-target damage, Bloom for splash damage, Frost for slowing enemies, and Ember for close-range fire as the campaign progresses. Upgrade twice or sell and rethink your placement.
- 100 campaign levels across four environments. Each level uses the same map and assault on every retry, so better decisions make the difference. Earn up to three stars per level.
- Daily survival. Everyone gets the same seed each UTC day, with unlimited attempts and a leaderboard ranked by survival time.
- Weekly leagues. First clears and improved stars earn points; repeating a solved level does not farm points.
- Offline play with local progress. Online leaderboards use an anonymous identity and a nickname, without requiring registration.
- A complete free game. No energy meters or paid gameplay advantages. Occasional ads appear between runs; one optional purchase removes ads permanently.
Tiny TD is available on iOS through the Apple App Store and on Android through Google Play.
How I built it
I built Tiny TD in Flutter and Dart. The game board is drawn on a Canvas: roads, houses, towers, and enemies are geometric shapes rather than a collection of sprite sheets.
The simulation lives separately from Flutter in a pure-Dart engine. It owns map generation, house growth, combat, and the fixed-step game loop. Flutter renders the result and adds presentation effects. A saved run records its seed and player actions, which can be replayed to resume it.
That separation made the game deterministic and let me test it without a screen. Headless scripted defenders exercise campaign levels and daily survival; fingerprint checks catch unintended simulation changes. Balancing became something I could measure as well as playtest.
RevenueCat's Flutter SDK powers the one-time Remove Ads purchase through the no_ads entitlement, with purchase restoration in Settings. AdMob supplies non-personalized interstitials, and paid impression revenue is reported through RevenueCat's ad tracking API when analytics is enabled. Supabase supports the anonymous leaderboards.
Challenges I ran into
Balancing, balancing, balancing. Too easy and the game is boring; too hard and a changing road feels like punishment. Tower damage, enemy speed, health, wave composition, and the shape of a new route all affect each other.
The hardest part was making adaptation feel like a decision rather than a reset. Players need enough information to recognize a changing route, enough options to react, and a reason to keep trying after a close loss. Headless checks helped narrow the numbers, but repeated playtesting decided whether it was actually fun.
Accomplishments that I'm proud of
- Shipping a complete game on iOS and Android with 100 levels, daily survival, leagues, ads, and a working RevenueCat purchase.
- Building a deterministic, replayable simulation with tools that let me check balance without manually playing every run.
- Giving tower defense a changing map without burying it under complicated controls or visual clutter.
- Most of all, making victories feel earned: you survive the last wave and know which decisions got you there.
What I learned
Keep the simulation independent from the renderer. Replay, testing, and balancing become much easier when game rules do not depend on a screen.
Graybox and playtest early. The game has to be fun before it looks good, and a short playable prototype answers questions that a long design document cannot.
What's next for Tiny TD
More enemy variety, more maps, and richer leaderboard competition, guided by feedback from the first players. The immediate priority is learning from players on iOS and Android and improving the game around how people actually play.
Built With
- dart
- flutter
- revenuecat
- supabase
Log in or sign up for Devpost to join the conversation.