The central question behind the army system is simple: what should survive when a battle ends? Our answer is the soldiers themselves. The campaign should remember who fought, who was wounded and which formations remain available for the next province.
More than an army-size counter
The current campaign state stores four unit families: spearmen, swordsmen, axemen and archers. Each family is divided into three experience levels, and every level separately records healthy and wounded soldiers. That structure is already shared by the campaign map, army interface and fight scene.
This matters because two armies with the same total size can play very differently. One may be a healthy line of lower-level infantry. Another may contain veterans, wounded troops and a narrow composition that is vulnerable to the wrong counter. The player needs to read that difference before committing to a battle.
Army state also records whether a force has moved this turn, whether it is healing, its current stance and any reinforcement packages still travelling toward it. These are not decorative statuses. They stop movement, change what actions are available and make preparation part of the campaign decision.
Composition with a purpose
Lane Wars uses a counter relationship between the three frontline infantry types, while archers provide ranged pressure and need protection. Army generation therefore works from composition profiles rather than distributing every unit evenly. A spearman-focused force can still contain supporting swordsmen or axemen; higher-tier forces can introduce archers in controlled proportions.
Early armies deliberately lean toward melee troops. That keeps the first campaign encounters readable and prevents ranged units from becoming the answer to every problem before the player understands lane positioning.
Current design rule: campaign composition must create a tactical question. If the roster does not affect how a player reads the lanes, it is only bookkeeping.
Movement, recovery and reinforcement
On the map, armies move between connected provinces. They can merge when they occupy the same province, recruit in valid friendly locations, reinforce existing forces and spend food to heal wounded soldiers. Reinforcements have their own unit breakdown, cost and remaining travel time instead of appearing instantly.
The enemy uses the same strategic vocabulary. Its turn logic can recruit, merge small forces, heal wounded armies, pursue movement objectives and choose attacks. This is still being tuned, but building the AI from the same constraints keeps it from feeling like an unrelated system with invisible privileges.
Making a dense system readable on mobile
The shared HTML/CSS UI prototype divides the army panel into Army, Support and Camp views. Army shows the roster, levels, condition and composition. Support presents limited battlefield tools. Camp currently demonstrates Field Camp and Commander cards with placeholder benefits. Heal, Reinforce and Disband remain visible actions rather than disappearing inside another menu. This prototype still needs to be connected to the live campaign map.
The matching enemy-army prototype keeps public strength visible while concealing exact unit counts. It uses question marks and neutral composition treatment instead of merely hiding text while accidentally exposing the same information through bar widths. The presentation is implemented in the UI test scene, while its intelligence rules are still design work.
What we are refining next
The foundations are working, but balance is not final. Reinforcement travel, healing costs, army-size limits and the value of veteran units all need repeated campaign testing. Commander benefits also need to strengthen an army without erasing the importance of its soldiers.
The goal is a force the player can understand at a glance and care about over many turns. Winning a province should feel good. Winning it while preserving the experienced core of an army should feel better.