市民圧力

市民の圧力による忠誠心変動(1.0.0.341)

シヴィロペディアより

“自文明の市民からの圧力が他文明からの圧力を上回れば、都市の忠誠心は高まります (1ターン最大+20)。”
“他文明からの圧力が上回った場合、都市の忠誠心は下がります (1ターン最大-20)。”
“すべての市民は基本的に圧力1を及ぼしますが、この値はさまざまな修正を受けます。”
“市民の圧力は9タイル以内の都市に影響を与えますが、1タイル離れるごとに影響は10%減少します。”

  • [自文明]市民圧力 > [他文明]市民圧力 : 都市の忠誠心プラス
  • [自文明]市民圧力 < [他文明]市民圧力 : 都市の忠誠心マイナス
  • 人口1 → 圧力1 が基本
  • 圧力は1タイル離れるごとに10%減少。10タイル以降はゼロ

単純な状況での忠誠心表示

相手都市の距離 相手の人口 こちらの人口 市民圧力による忠誠心
4 1 1 +6.7
5 1 1 +10
6 1 1 +15.1

市民圧力による忠誠心の詳細表示

相手都市の距離 市民圧力による忠誠心 256分率
4 +6.71875 +1720 /256
5 +10 +2560 /256
6 +15.078125 +3860 /256

UIでは市民圧力による忠誠心は四捨五入されているので正確な値を確認すると上記に
数値的にいつもの256分率である

市民圧力の影響力

都市からの市民圧力値

市民1人につき圧力1で、1タイル離れるごとに10%減少
という説明にしては細かすぎる数値が出てきたので
ヴェステロースに届いている市民圧力がいかほどか内部数値から確認する

各距離からの市民圧力

相手都市の距離 相手都市の人口 市民圧力値 256分率
4 1 0.59765625 153 /256
5 1 0.5 128 /256
6 1 0.3984375 102 /256

市民圧力の減少率

UPDATE GlobalParameters
SET Value = 0
WHERE Name = 'CITY_MIN_RANGE'
;

都心から3タイル以内にも別の都市を建てられるようにして
各距離での人口に対する市民圧力値を確認すると

距離 市民圧力の減少
1 x 230 /256 256 -25.6 = 230.4
2 x 204 /256 256 -51.2 = 204.8
3 x 179 /256 256 -76.8 = 179.2
4 x 153 /256 256 -102.4 = 153.6
5 x 128 /256 256 -128.0 = 128
6 x 102 /256 256 -153.6 = 102.4
7 x 76 /256 256 -179.2 = 76.8
8 x 51 /256 256 -204.8 = 51.2
9 x 25 /256 256 -230.4 = 25.6
10 x 0 /256 256 -256.0 = 0

10%減少=25.6/256ずつ減少して、分子の小数点以下を切り捨て

(切り捨て)
256 25.6 230.4 230
256 256 256 256
100% 10% 90% 89.84375%

市民圧力距離地点での影響力
= x floor(256 - 25.6 x ) / 256

市民圧力差による忠誠心の最大値

<GlobalParameters>より

GameInfo Name Value
<GlobalParameters> CITIZEN_IDENTITY_PRESSURE_BASE 1
CITIZEN_IDENTITY_PRESSURE_CAPITAL 1
CITIZEN_IDENTITY_PRESSURE_RADIUS_CUTOFF 10
LOYALTY_PER_TURN_FROM_NEARBY_CITIZEN_PRESSURE_MAX_LOYALTY 20
LOYALTY_PER_TURN_FROM_NEARBY_CITIZEN_PRESSURE_MAX_RATIO 3.0
LOYALTY_PER_TURN_FROM_NEARBY_CITIZEN_PRESSURE_NEUTRAL_LOYALTY 0
LOYALTY_PER_TURN_FROM_NEARBY_CITIZEN_PRESSURE_NEUTRAL_RATIO 1.0

<GlobalParameters>からCitizen Pressure(市民圧力)絡みと思われる要素を探すと上記のわかりやすい7項目が出てくる
上の3つに関しては名前と値から、シヴィロペディアにある

  • 市民は基本的に圧力1を及ぼします
  • 首都の市民の圧力には+1の修正
  • 1タイル離れるごとに影響は10%減少

のことだとすぐわかるので、他の4つを見ると
MAX_LOYALTYという名前で値が20なのが、市民圧力での忠誠心の変動が最高20までなことを指してると思われるので

MAX_RATIOがこの"市民双方の圧力の比較により"という部分だと仮定して
計算しやすい5タイル距離間の2都市の人口を調整して検証する

5タイル距離間での市民圧力と忠誠心

ヴェステロース ワンガヌイ
人口 1 2
相手からの市民圧力 1
2 x 50%
0.5
1 x 50%
比率 1: 1
1 : 1
1: 4
0.5 : 2
忠誠心 +0 +20
人口 2 3
相手からの市民圧力 1.5
3 x 50%
1
2 x 50%
比率 1: 1.333...
1.5 : 2
1: 3
1 : 3
忠誠心 +3.3
(+3.28125)
+20
  • 比率1:1 → 忠誠心+0
  • 比率1:3 → 忠誠心+20
  • 比率1:4 → 忠誠心+20

市民圧力による忠誠心は

  • 比率1:3の3倍以上(MAX_RATIO:3.0) → 最大の20(MAX_LOYALTY:20)
  • 比率1:1の同値(NEUTRAL_RATIO:1.0)0(NEUTRAL_LOYALTY:0)

人口を増やしての検証

ヴェステロース ワンガヌイ
人口 20 29
相手からの市民圧力 14.5
29 x 50%
10
20 x 50%
比率 1: 1.379・・・
14.5 : 20
1: 2.9
10 : 29
忠誠心 +3.8
(+3.75)
+19
(+18.984375)
人口 20 30
相手からの市民圧力 15
30 x 50%
10
20 x 50%
比率 1: 1.333...
15 : 20
1: 3
10 : 30
忠誠心 +3.3
(+3.28125)
+20
  • 人口20:29 比率1:2.9 → 忠誠心+19
  • 人口20:30 比率1:3 → 忠誠心+20

3倍の圧力差で、市民圧力による忠誠心は最大の20になる

市民圧力による忠誠心の詳細値

最大レシオと中間レシオ以外の圧力比

最大レシオ(MAX_RATIO)の時に最大忠誠心(MAX_LOYALTY:20)
中間レシオ(NEUTRAL_RATIO)の時に中間値(NEUTRAL_LOYALTY:20)なのはわかりやすいが
その間での忠誠心の数値を求めるには、圧力比を256分率にして忠誠心を当てはめる必要がある

比率 1: 1
1 : 1
1: 1.333...
15 : 20
1: 1.379・・・
14.5 : 20
1: 2.9
10 : 29
1: 3
10 : 30
忠誠心
(UI表示)
+0 +3.3 +3.8 +19 +20
忠誠心
(詳細)
+0 +3.28125 +3.75 +18.984375 +20

検証した中で出てきた圧力比のうち、比率1: 1.333...(15:20)を例にとると

1.0 3.0 20 15
中間レシオ~最大レシオまでの数直線上に20/15を配置して

0 256 R 256 256 256
0/256~256/256までの数直線に変換させて比率R/256を求めるとなると

1.0 3.0 20 15 0x2+256 256 Rx2+256 256 256x2+256 256
上記のようになるので

Rx2+256 20
256 15
R 42.666...
256 256

となるが、Civ6の256分率のお約束で分子の小数点は切り捨てになるので
20/15 ⇒ 42/256になる

圧力比からの忠誠心詳細値

+0 +20 +3.28125 0x20+0 256 42x20+0 256 256x20+0 256
あとは42/256を、+0~+20の数直線と合わせれば
市民圧力による忠誠心+3.28125が出る