Currently all inputs to simulations, situations, voter approval and membership, voter group happiness, events and dilemmas are completely linear.

That it’s simply sum of all influences.

This is nice and simple, but simple addition means its exceedingly to reach bounds - 0 to 1 or -1 to 1 with lots of policies and stuff.

Stuff is unbalanced, if it routinely crashes on floor or ceiling.

Now I suggest to sum all positive influences (X) and negative influences (Y) to two separate variables.

X + Y, if X and Y are between -1 and 1, as 1 is natural bound before normalizing inputs happens - everything is capped in 0 - 1 or -1 - 1.

(X+Y)/Max(X,Y) if X or Y are bigger than 1, pick biggest value as divisor.

This way if sum of all positive or negative factors is greater than 1, then game will start acting nonlinearly in that node - this will prevent it from reaching 0 and 1.

If X or Y is 0, then its always linear (will be 1 or -1). If X = Y, then its linear too (will be 0).

If X and Y is <1, then it acts as normal.

In case of division by 0: Set value to middle (or other default), but most likely there is always at least one influencing thing.

If you really want to set something at min or max value, for example state/private stuff, or banning something, then you could introduce special constant.

Examples:

X=0, Y=0.5: X-Y=-0.5, acts naturally.

X=2, Y=0; (X-Y)/X=1, normalized itself to upper bound - upward pressure very strong, and no downward pressure (would be capped at 1 anyway).

X=1, Y=1.1: (X-Y)/Y=-0.1/1.1 = -0.0909…, currently its -0.1, weak normalizing effect.

X=4, Y=3: (X-Y)/X=1/4 = 0.25, currently its 1, very strong normalizing effect - despite almost being comparable stuff crashes to ceiling. 0.25 would be much more realistic.

Strongest normalizing effect would happen if one variable is half of other variable - assuming bigger one is >1.

X=1, Y=2: (X-Y)/Y=-1/2=-0.5, currently its -1.

With this diminishing returns effects would naturally appear - caused by input side.

There would be visible point when normalization kicks in, when larger variable reaches 1, if smaller one is pretty small.

Piecewise normalizing function:

X - Y, if X <= 1 and Y <= 1 (can’t be other than 1 or discontinuity would appear)

(X - Y)/Max(X, Y), if X > 1 or Y > 1.

X is sum of all positive influences.

Y is absolute sum of all negative influences.