Revolution mechanics

BobTheTerrible

Just Another Bob
Joined
Jan 5, 2003
Messages
927
Location
Middle of Nowhere
So, as many other people have pointed out, rebellions tend to be a long and drawn out affair. I have a few suggestions to try to make them smoother in game terms. Essentially, turning revolutions into a sort of "mini-game" in which both sides vie to get a certain amount of support from a population in a certain timeframe, with the winner of the mini game gaining back control of the civ.

I haven't played colonization, but apparently there's a mechanic that shows support for the rebellion in each city. I think this would be a cool thing to bring over. When a rebellion happens, there could be measures taken in each city: loyalists, rebels, and indifferent. Basically, the goal would be to try to gain as much support from the population (either by converting the indifferent people or reducing the support for rebels) in a certain timeframe. This would be done in a variety of ways - spies spreading propaganda, military victories, etc. If a city got to a certain % of support for the rebels, it would convert, possibly taking some of the units with it.

The rebellion, in most cases, should be lead by one or a few great generals (depending on how the support meters are, and as the rebels gain more support, perhaps they can pop more generals). Victories won by the generals should gain lots of rebel support, but if the general died, the rebels would lose a lot of support. Any other great people the rebels have should also contribute to the rebel support meter when they're used.

There could be a lot of random events happening for each side specific to rebellions, things like other nations supporting the rebellion, etc. Basically, a lot of things happening which could cause one side or the other to gain the upper hand (finding and executing a rebel ringleader, disorganized rebels looting a city, etc).

After a certain amount of turns, the rebels would lose momentum, their support meters going down, and eventually the opposing team would come into command. Basically, the rebellion is given a certain timeframe in which to be successful (gain a certain amount of rebel support or reduce the amount of loyalist support), and failing that, the loyalists should come back into power. My thoughts behind this are to try and prevent the useless rebel civs from forming that the parent civ just can't take out. This type of thing would only happen in civ-wide revolutions, not city specific rebellions. And of course, no matter the outcome, after the revolution is over, the rev index should be greatly reduced for a long time.

Thoughts?
 
What if this measure of % of rebels vs loyalists vs indifferent replaced the Rev Index? I'd been contemplating making the numbers for the rev index visible in game (why hide information?), but the rev index numbers are only meaningful after you've studied them for a while ... these percentages would be much more meaningful to the first time player.

Still thinking about it ... but I think it could be a good change. It also would make things much easier to deal with when a civ captures a city:
- If they're the rebel, the rebel % become loyalists, loyalists become rebels (probably with some shift in support towards the new owner).
- If a civ recaptures a city from rebels, the opposite holds.
- If a third party civ captures a city where they have some significant culture, then they'll start with some loyalists otherwise the population would be split between rebels and indifferent.

On the momentum side, there's some of that in there already on a city-by-city basis and more to come ... it's just hard to see it with the current setup. I like your suggestion, particularly for civil wars ... it's really a battle for momentum and the upstart side only has so much time to establish headway. I hadn't gotten to the point of planning explicit loyalist counter revolts, but that's a good idea ... will help the balkanization issue, more often one side will win the whole territory.

Now that BBAI 0.60 is out, I'm going to focus on getting the next version of Revolution together. Not sure yet what all will make the first cut, but these are great ideas.
 
What if this measure of % of rebels vs loyalists vs indifferent replaced the Rev Index?

I thought about that after I made my post. I think that would be a great change. The question would be: how to generate loyalists vs indifferents?

My suggestion, therefore, is to change the way the happiness system works. It doesn't really make sense that one just has to balance the unhappy people with happy people to make things work - the unhappy people are still unhappy.

The rev index's basic function is a meter of discontent -- basically, it measures what the unhappy faces really should be. The rev index should be directly translatable to unhappy faces, instead of the current reasons. The happy faces would be the people in the loyalist bar (we could also draw the distinction between civ-wide and city-specific rebel supports?).

So, there would be a meter kind of like the culture bar displayed in each city of rebel, indifferent, loyalist. The unhappiness factors from the rebel support would translate to unhappy faces, and the happiness factors from the loyalist support bar would translate to happy faces. Happiness bonuses from difficulty level or unhappy faces from city size wouldn't play a factor. Perhaps these can somehow form the indifferent meter, since neither of these things are really anything to get riled up about (it bugs me that people in crowded cities revolt because they're crowded, but revolting doesn't solve anything...) So, 10 "it's too crowded" neutral faces, 10 "we just enjoy life" neutral faces, 7 "we appreciate our rescources/whatever" happy faces, and 3 "we don't like the religion/war/culture/whatever else in in the rev index" unhappy faces leading to a 15% rebel support, 50% indifferent, and 35% loyalists?

I still don't know if that example above makes any sense in regards to determining the percentages. My thinking is that the support for a rebellion meter slowly fills up (accumulating in the same way the current rev index does), and once it hits 15% of the population or so is when the chances of a revolt start occurring (so instead of the rev index hitting a certain arbitrary threshold, it's a percent of the population).

Still no idea how to work out the indifferent/loyalist percentages. I guess the question becomes do the happy/unhappy faces drive the percentages or do the percentages drive the happy faces? Hmm, I don't even know if translating the rev index into faces makes sense, I'm just kind of thinking out loud. It seems pointless to keep the too-crowded/we-just-enjoy-life faces around if only for the purpose of needing neutrality.
 
Yeah rebels/loyalists it's a nice idea. In terms of mechanics, here's some thoughts on an object oriented approach to Revolutions via an "event" system. You could write three classes in the code for each category of citizen:
Rebel
Indiff
Loyalist

Each City holds one object of each class.
Each Region holds one object of each class
Each Nation holds one object of each class.

The interesting bit is "region". There are a number of really interesting way to form regions within a civ (based on culture/connection etc). Each new Region holds one object of each citizen class and creates new one's as new regions begin to emerge.

These independent citizen objects, depending on what scale they are looking at, decide there own level of satisfaction based on what they see. Each citizen "sees" two conditions:
1) Each citizen is affected only by their category of "event"
2) Each citizen is affected at some diminishing degree by the other citizen levels (local to regional, regional to national etc)

There is a really nice code mechanism for doing this. I was experimenting around a bit and each python class, can have internal local events that fire, as well as signalling their intention to be informed by external game events. Therefore you could have ten's of objects floating around, each object would be automatically informed of it's event's directly.

Spoiler :

Code:
class Rebel:
	def __init__(self, eventManager):
		eventManager.addEventHandler("BeginGameTurn", self.onBeginGameTurn)
		self.eventMgr
		moreEvents = {
			REBEL_EVENT : ('', self.__eventRebelApply,  self.__eventRebelBegin),
		}
		eventManager.Events.update(moreEvents)
		self.satisfaction = 0

	def __eventRebelBegin(self, argsList):		
	def __eventRebelApply(self, argsList):
	def onBeginGameTurn(self, argslist):
		...
		
class Revolt:
....
	def triggerRebel:
		self.eventMgr.beginEvent(REBEL_EVENT)
I could be delusional again, but that mechanism seems hugely powerful for future Revolutions code. The thing is that rebel objects get updated automatically by game events, and other objects like Revolt objects can trigger code in all Rebel objects via the event manager.

Seems nice. The thing about such an approach is that at least you can individually write and test the behaviour or each citizen category independently and because it's object oriented, all the method templates are common and predefined.

This is not about toppling the current Revolutions. It just needs a few tweaks to reach it's ultimate capability. This is just about research and development of possible mechanics.
Cheers.
 
I like this idea! The loyalists vs rebels mechanic could really enhance revolution. I also like the idea of city vs region vs nation. The only problem is how to define a region. I would sugest roughly three criteria:
-Are cities on the same landmass?
-Are cities connected culturally?
-Do cities have the same culture/religion?
And maybe in the case of rebellions a fourth can be added: Do cities have the same reason for revolting?
 
Top Bottom