After discussing this idea on Discord I was suggested to post it here for the developers to consider. So here it is:
1. What I'm proposing
A mechanism by which a vassal node can declare a node siege on its parent mode. The exact details of how this happens is less interesting to me, but I will describe my own vision of how this could happen in section 3. The most important thing to me is that in some way a node can stand up to its masters and fight for freedom!
2. Why
If the citizens of a node want to keep growing their node, but can't because they are being blocked by their parent node, they currently have no direct means of solving this problem. The current system ties the politics of a vassal node to its parent, and prevents the citizens from aiding attacks against their current vassal chain
[1]. The best the vassal citizens can do to rebel is to not show up to defend in case some external party declares a siege. The other rebellion option would be to revoke their own citizenship and join the attackers, but now they've lost their hard earned standing in their home node and have no reason to fight anymore. To me, this hope based passive approach to vassal politics could be made more interactive.
Also, in my opinion the enemies within are just as interesting as the enemies without. Giving vassals a chance to revolt would mean that the parent node now has an incentive to keep their vassals happy to prevent civil war, instead of just unilaterally taxing their vassals. It would also add an extra dimension to node politics, where enemy nodes could try to incite rebellion within the opposing faction with promises of future alliances and wealth.
Finally, I feel that adding the ability to revolt would aid in adding instability to the node system. One of the key considerations with the node system in my opinion is that it can't be allowed to grow stable, where the metropolises collude with each other to stay in power. Giving the vassals a tool that can shake the balance of power could be another check on the system.
3. An example implementation and cost analysis
Once a node has been vassalized by zone of influence changes, it will be put on a cooldown period of one real time week before it can revolt and declare a siege on it's parent. To revolt, the mayor of the node would have to initiate a majority vote for the node citizens on whether they should rebel. If the vote passes, I have two ideas on what could happen next:
a) The mayor can now use a siege scroll
[2] and declare a siege on the parent node exactly like any other node siege, with the exact same proceedings. The only difference would be that once the siege timer is up, the rebelling node and its vassals would now be automatically registered as attackers instead of defenders of the parent node. The rebelling node risks the cost of a siege scroll and the parent risks losing their node, just like a regular siege. Should the rebellion fail, the ability to rebel goes on cooldown again. Additionally, the parent node might want to reconsider their tax and trade policies on their naughty children...
b) Same as above, but failure would mean that the revolting node would be destroyed instead of the parent. The rebels would additionally be branded as enemies of state by the old parent node
[3]. Perhaps the cost of the siege scroll could be reduced because of the high risks involved to make rebellion possible for poorer nodes.
The development costs of this proposition shouldn't be very high code wise. Both rebellion options a) and b) use already in place code with no additional changes required on questing, trade or node dynamics, with two exceptions: How the node citizens are registered for attack and defense, and how the initial rebellion vote is called. The former could be solved with a more granular database search for the list of participants, while the latter would require the repurposing of economy type node election vote system for a more general vote called by the Mayor. This repurposing could be useful for the introduction of other mayor driven referendums, which could be included later into the system for other reasons. The main costs associated with the system would therefore be testing and balancing related, where the system would have to be examined for potential abuse and values tweaked so that revolting would be a viable option for a stuck node, but not so viable that Verra would plunge into an eternal cycle of uprising.
Conclusions and acknowledgements
I want to thank the Discord community for discussing this idea with me and showing potential flaws with it. I've merged some of the feedback into this write-up and given more thought to other parts that were initially questioned. In any case I think this proposal is sound and follows the risk versus reward principle of AoC. Just like you can attack your neighbor at the risk of corruption, you should also be able to betray your parent node and risk loss. I personally don't like the forced cooperation the current vassalization system imposes.
The revolt mechanic could also be extended in many ways, for example allowing rebellion during an ongoing siege declaration to join the attackers, or adding more custom penalties for failing a revolt, but I don't have the systems insight necessary to say how costly adding these extensions would be. Thus my proposal is as it is, in it's simplest form.
Give it a think and thanks for reading.