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(approval < pgroup->GetJoinApproval())
if(Militancy >= pgroup->GetRequiredMilitancy())