Pressure Groups


Thinking of some simple upgrade idea that you may consider adding in some upcoming patch, i think it would be interesting to enhance the role Pressure Groups have in the game, especially the peaceful ones like Human Rights society.

Maybe it would be possible to make the actual pressure group membership value a kind of value you could refer to and use as influence in dilemmas, events or effects in policies ?
(the threat value can also be made this way).


Pressure groups can in theory trigger events that are not assassinations or plots. If you look in the attacks folder you will see there is a green protest in there too. I might get around to adding other similar events for the other groups.


I have a question regarding modding the pressure groups and their actions - what do the entries in pressuregroups.csv mean exactly ?
“recruit treshold”,“join_approval”,“leave_approval”,“militancy”,“threat level”.

Also, when modding specific attacks or actions to be placed in the Attacks folder, how high should i set the MinSize,MinStrength and MinCost requirements for them to have a chance to appear in the game ?

The non-militant groups have very different (lower) values set in the pressuregroups.csv than militant groups,so i think the MinSize and MinStrength should be much lower for the non-militant group action. How do the values in the attacks/actions relate to those in the CSV ?


Every voter in the game has a hard coded level of ‘militancy’ which is basically how bothered they are about stuff. If their approval is below a groups join approval and their militancy is above the groups militancy, they will tryb and join that group.
They can only actually join the group if the group is recruiting, and that only happens if the first voter group in the end list has its approval below the recruitment threshold.

in the case of the GreenBrigade, if the environmentalists approval is below 0.2, then anyone whose militancy is over 0.72 (roughly 28% of the population) and who has a personal view of the government below 0.05, will consider joining.
However they need to be ‘valid’ members of the group, (truly committed to the green bridgade) which is where the list of voter type influences at the end come into it. these are added together and compared to PRESSUREGROUP_JOIN_THROTTLE. if its above that, they join. Notice that the ‘leave’ threshold is higher. This allows the group to be ‘sticky’, so it means if you build a nuclear power station loads of people may join Greenpeace, but then demolishing the station will not mean they will all leave (they have friends there now etc).

Complex isn’t it?

a bit of the code:

if(pgroup->IsRecruiting()) { if(approval < pgroup->GetJoinApproval()) { if(Militancy >= pgroup->GetRequiredMilitancy()) { if(pgroup->IsValidMember(this)) { pgroup->Join(this); OrganisationsJoined.push_back(pgroup); } } } }


Thanks !

And how about the chances of the group actually doing something? What does the “threat level” value mean ?

In the particular attacks files there are values named MinSize, MinCost, and MinStrength set as requirements, on what basis they are calculated for the particular groups ?


Aha. I’ll answer that in the morning when I can fire up the code again.


ok here’s how attacks are calculated. Attacks cant occur more frequently than every 4 turns. For an attack to be ‘viable’ a group needs to have a size greater than the minimum size for that event, (in terms of voters, given that there are 2,000 AI voters) and its strength needs to be greater than min strength.
Size is the number of people, strength is the ‘resources’ that group has.

strength changes like this:

Strength += (Members.size() * BaseThreatLevel); if(Strength > (Members.size() * 4)) { Strength = Members.size() * 4; }

so basically the threat level is the way numbers of people get converted into calls for action. High for committed terrorist groups, and low for reasonably sedate pacifist groups.
If there are more than 1 viable attacks, a random one is picked, and the cost of it is subtracted from the current groups strength.