Dev.to WebDev πŸ›  Dev πŸ‘ 0 πŸ“– 4 min read

Twenty maps, one spreadsheet: keeping a solo turn-based artillery game from feeling repetitive

Cannon King (Wind Tank Battle) has 20 maps, 48 tanks and 53 stages, and I built all of it alone. The number people react to is 48. The number that actually decides whether the game feels alive is 20, and it is the one I

Cannon King (Wind Tank Battle) has 20 maps, 48 tanks and 53 stages, and I built all of it alone. The number people react to is 48. The number that actually decides whether the game feels alive is 20, and it is the one I nearly got wrong.

A map is not a background

In a turn-based artillery game, the map is the third player. It decides what a shot costs, what a safe position looks like, and how long a match takes to become interesting. Two matches on the same map with different tanks feel similar. Two matches with the same tank on different maps feel like different games.

So when I started filling the map list, I did not think in terms of "more themes". I made a spreadsheet with one row per map and five columns:

  1. Ceiling or no ceiling. A map with a solid ceiling removes high arcs. That single fact changes the whole aiming vocabulary, because the reliable shot becomes the low, direct one.
  2. Number of hard floors above the starting position. This is what makes craters matter. If everything above you is diggable, then a missed shot is still progress; if it is not, a miss is just a miss.
  3. Wind range. Some maps keep wind low and steady, so players learn angles first. Some push it high and shifting, so reading wind is mandatory from turn one.
  4. Distance between spawns. Close spawns reward double shots and fast finishing. Long spawns reward shields and patience.
  5. Escape routes. If a map has a third lane or a tunnel, teleport becomes a real option instead of a panic button.

That is it. Five yes/no-ish columns, filled for 20 maps. When a new map row looked like an existing row in all five columns, I threw it out and started again. The rule was simple: if I cannot name the decision this map changes, it is a skin, not a map.

What 20 maps does to the stage list

The 53 stages are not the content. They are the tutorial that the player does not notice. Each stretch of stages introduces one map property at a time: first flat ground and wind, then a ceiling that forces flat shots, then a spawn layout where digging under yourself is a legitimate move.

Once the maps are doing that work, stages do not need new mechanics to feel different. They only need to put the player in a map where the previously learned habit stops working. That is much cheaper to build and much easier to balance than adding a mechanic per stage.

Tanks and maps have to be tuned against each other

48 tanks, each with its own shell and skill, sounds like a variety problem. It is actually a matching problem. A tank whose skill depends on vertical space is worthless on the ceiling maps. A tank that wants long, flat lanes is a bad pick on the tunnel map.

So the balance question stopped being "is this tank strong?" and became "on how many of the 20 maps can this tank do something worth a turn?" A tank that answers 4 maps is a specialist. A tank that answers 14 is a default pick, and that is fine as long as it is not also the strongest in every one of them. Whenever one tank started winning everything, the fix was usually a map property, not a number.

The cheap version of playtesting

I do not have a QA team. What I do have is a rule for my own matches: after every match I lost, I write one line β€” the map, the tank, and the turn where it went wrong. Twenty of those lines tell you more than a hundred matches of gut feeling. Three lines about the same ceiling map means the map is teaching the wrong thing, not that the player is bad.

That is also how the 53 stages got tuned: I played them in order, badly, and wrote down where I got bored. Boredom is a bug.

The part I still do not know

Whether a player who never pays can reach the turn where they "need a different tank" without feeling pushed. That is the honest open question in a game with 48 tanks and a free start. The coupon is POTANKING2027 (5,000 credits and 10 premium gacha tickets, once per account, valid until 31 December 2027), so the first few hours are generous by design. Whether generosity reads as generosity, or as a teaser, is something only real players can answer.

If you want to see whether the 20 maps actually feel different, the game is free on both stores: Google Play and the App Store. I would genuinely like to know which map you throw away first.

πŸ“° Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.