Battleship looming in the distance

Historia Highlights #2

Wars & Campaigns

An exclusive look into the custom war system of Historia: Wars, Campaigns, Battles, Objectives, Exhaustion, Balancing and more!

Hello Historians,

I'm here today with a new Historia Highlight on the server's War System, made in-house!

War is one of the largest systems that I've built custom for TownyCivics -- the server's flagship towny expansion plugin. Our goal is not to turn every conflict into unrestricted raiding, like how many SiegeWar servers can become. Our goal is also not to over-restrict the war system, forcing staff to arbitrarily moderate each and every battle, like many EventWar servers can become.

Instead, we want to strike a balance between fairness and fun. Wars will become structured political events with clear, player-defined objectives, server-scheduled battles, and real consequences that give way to true diplomacy and negotiation.


Every war begins with a reason

A nation cannot simply attack another nation without warning. Before declaring war, it must prepare a war goal against a specific nation or town.

War goals are not cheap. They take time and money to justify. Their cost scales with the population and size of their target, and different types of war goals may incur additional costs or requirements. This gives defenders adequate time to prepare and forces attackers to consider war as a meaningful strategic decision, rather than starting one simply because "why not."

There are 6 currently supported war goal types:

  • Conquest, for taking occupied towns from an enemy.
  • Humiliation, for defeating a rival without pursuing territorial annexation.
  • Reunification, for reclaiming eligible former territory.
  • Regime Change, for installing a chosen government in another nation.
  • Subjugation, for establishing a new vassal relationship with predefined terms.
  • Independence, allowing a subject nation to fight for freedom from its overlord.

You must have a war goal to be able to declare war. The war goal you use to declare war determines what outcomes the war can have. A subjugation goal, for instance, will use the goal's predefined terms for tribute, military obligations, autonomy, defensive guarantees, and the minimum term of vassalage. This system is designed to be fair and non-toxic; you cannot wait until victory and then invent entirely new demands.

Declarations and war goal justifications also hook into your government's procedures. Depending on how it is configured, these decisions may require approval from certain offices or be decided through votes.

Once approved, the war is declared and the attacking nation may open campaigns against enemy towns.


Campaigns

A war between two nations is divided into campaigns against individual towns. This makes territory the focus of the conflict without placing an entire nation under constant attack.

Each campaign is composed of up to a maximum of 9 battles. During these battles, each side will collect points, and the first nation to reach the point threshold -- scaled by the size of the target town -- will win the campaign. If the attackers win, they will occupy the town. If the defenders win, or neither side reaches the required threshold within the available window, the defenders will keep the town.

Campaigns may be launched in both directions, with multiple active at a time. This allows you to effectively open fronts during a war, enabling strategic counterattacks or attempts to recapture lost towns. However, opening multiple fronts also spreads your forces thinner, since their battles may take place at the same time.


Battles

Combat is organized into scheduled battle sessions rather than happening at a nation's whim. Each day has 3 eligible battle times, meaning that with the 9-battle limit, a campaign can last for up to 3 days. Battles will always happen at the same times each day, at the server's discretion, and these times will be clearly communicated before they begin.

Battles are focused around warfare in the towns themselves. To safeguard innocent bystanders -- those without the ability to participate in the battle -- attackers may not enter the town until a session has started. Even during a session, bystanders may not attack or be attacked. This keeps battles non-toxic without overly restricting them.

Sessions last for an hour at a time before going on break until the next session. This means you can fight, then recover. It also means you need to be careful about opening multiple campaigns, since battles across those campaigns may all open at the same time.

To gain points in a battle, you can either kill members of the enemy team or capture objectives.


Objectives

Battle sessions generate randomly placed objectives within the contested town. These objectives are placed in reasonable locations, favoring common areas that are flat and accessible. This preserves immersion: instead of fighting on the outskirts of a town, you get to fight within the town itself, through its streets and around what its players have actually built.

Multiple objectives can spawn in a town, up to a maximum of 3 depending on the town's size. By standing near an objective, you will slowly accumulate control for your team. Once your team has full control, you will begin gaining points.

Objective
An objective placed at a busy intersection in a city.

To encourage dynamic gameplay, score bonuses are added depending on the circumstances of the battle. For instance, reversing control of an objective grants an immediate bonus, and the more objectives your team controls, the more points you will gain. Controlling all objectives will grant an additional point bonus.

Kills also give points, but to discourage kill farming and prioritize objectives, their value is weaker. Control the battlefield, and you win.

Capturing
Taking control of an objective for the attackers

Battles shouldn't ruin towns

To actually fight inside of a town, players need to be able to break and place blocks so they can build defenses and break through enemy obstacles. At the same time, we don't want a town to be left as a ruined crater at the end of a campaign.

To fix this, TownyCivics records block changes made within the town's borders during a battle and automatically restores them after every session. You can fortify positions, break through walls, and reshape the battlefield as much as you need to during a fight, but none of it has a long-term impact on the town.

We also have measures in place to protect people's storage and prevent duplication glitches. Broken blocks will not drop items, and storage blocks may not be destroyed.

Like I previously mentioned, combat is restricted exclusively to valid participants. Innocent bystanders and non-aligned members of other nations cannot participate. They can hypothetically be there and spectate, but they can have no influence on the battle itself. We also have other anti-toxicity measures in place for things like respawn protection and kill farming.

Extremely destructive actions like placing lava or water and using TNT or other explosives are also disabled, at least until we can figure out how to properly allow them without creating opportunities for abuse.


War Exhaustion

Wars are not intended to continue forever, and you aren't intended to open infinite campaigns against your opponent. To combat that, both sides accumulate war exhaustion over time and through battles.

All battles, regardless of their result, will give you war exhaustion. However, the result will determine just how much. Winning a battle will only increase your exhaustion by a small percentage, while losing will increase it significantly. War exhaustion will also scale with the importance and consequences of the battle. Fighting over a capital, for example, can be especially costly, and losing there could massively increase your side's exhaustion.

Once a side reaches 100% exhaustion, the war is automatically resolved through a status-quo peace settlement rather than being allowed to continue indefinitely.

War exhaustion
The great war of Pineland vs Thikland.

Occupation, Peace, and the Aftermath

Winning a campaign places the targeted town under occupation. Occupied towns can then be included in the final peace settlement if the initial war goal allowed annexation.

Peace agreements are customizable, allowing you to negotiate:

  • Transfer of occupied towns
  • Reparations paid by either side
  • A truce lasting 14-60 days
  • Other political outcomes for regime change, subjugation, or independence

Both the sending and accepting of a peace agreement pass through each nation's government procedures. You may review, counter, accept, and reject proposals as you wish. A nation can also surrender at any time.

After a war ends, the participants receive at least 14 days of immunity from another war, and their towns receive 7 days of campaign immunity. Newly annexed towns are also temporarily prevented from voluntarily leaving their new nation for up to 60 days.


Wars should matter, but losing one shouldn't mean watching everything you've built get destroyed.

My goal is to make war something nations have to prepare for, fight strategically, and ultimately resolve politically. Victory should have real consequences, but how you get there, and what you demand afterward, should be just as important.

Thank you all for tuning in for this Historia Highlight! As always, feel free to discuss or make suggestions in Discord.

Credits for image backgrounds: Greenfield

Discussion

Responses to Wars & Campaigns

Loading discussion…