#contents

RIGHT:&size(10){''更新履歴''};
RIGHT:&size(10){いろいろ追加・整理 2010/05/09};

* 設定ファイル/cityrules.tab [#h37fcf7b]
ファイル中の''#''で始まる行はコメントです。

&imgfolder(16/info.png); cityrules.tabの設定はセーブゲームには保存されません。変更後にsimutransを起動すると、すべてのゲームに変更が適用されます。

:minimum_city_distance = 32| 新規マップ作成時の都市間の最低距離
:renovation_percentage = 12| 都市の発展時に、新規建物を多く建設するか、既存の建物をレベルアップさせるかの判断に使用されます。&br;値を大きくすると新規建物が建設されなくなり、逆に値を小さくすると都市が広がりやすくなります。
:industry_increase_every = 2000| 新規産業チェーンが作られるタイミング、人口条件を設定します。pak64のデフォルトは2000で、各都市の人口が2,000、4,000、8,000、1,6000、32,000、64,000、128,000、256,000に達した場合に建設または拡張されます。(ただし、情報ウィンドウに表示されている人口と、実際に建設される時期との間には、ずれがあります)&br;0を指定すると、人口増加で新規産業チェーンは建設されません。
&imgfolder(16/light_off.png); 建設時期は設定値の倍々で8回までです。デフォルトの2000ですと、8回目の256,000が最後で、それ以上人口が増えても建設されません。
:minimum_building_desity = 25| (100.0以降)都市の発展時に、市域を拡張するかどうかの閾値。市域全体のうち、建物の比率が数値より低いときには拡張せず、数値より高いときは拡張します。

*エリアルール [#r5c31567]
市内建築物が建つ場合に、どの種類の建物が建つかという計算に使われます。ルールは新築、建て替えの両方に適用されます。
計算の結果最も期待値の高いものが建設されます。
&imgfolder(16/pencil.png); 工場とは産業施設ではなく、市内建築物の工場です。

:res_start_score = 0|住宅が建つ期待値
:res_near_ind = -8|工場の近くに住宅が建つ期待値
:res_near_com = 0|商店の近くに住宅が建つ期待値
:res_near_res = 8|住宅の近くに住宅が建つ期待値
:com_start_score = -10|商店が建つ期待値
:com_near_ind = 1|工場の近くに商店が建つ期待値
:com_near_com = 8|商店の近くに商店が建つ期待値
:com_near_res = 1|住宅の近くに商店が建つ期待値
:ind_start_score = 0|工場が建つ期待値
:ind_near_ind = 8|工場の近くに工場が建つ期待値
:ind_near_com = 0|商店の近くに工場が建つ期待値
:ind_near_res = -8|住宅の近くに工場が建つ期待値

**計算方法 [#tacb9462]
+住宅、商店、工場が建つ期待値をそれぞれの初期値とします
+建設予定地の周囲2タイル、(-2,-2)-(+2,+2)の計25タイルのタイルを調べます
+見つかった住宅、商店、工場の数だけ、その周囲に建つ期待値をそれぞれ加えます
+商店、工場の期待値に無職者の数÷4を加えます
+住宅の期待値に浮浪者の数を加えます
+最も期待値の高い建物が建ちます(建てられる建物があった場合)

*市道/建物生成ルール [#gc4be9e9]

configディレクトリに存在するcityrules.tabファイルでは、
都市の建物と道路の生成規則を定義しています。

 例) 市道を生成する規則
 road_1 = .H. SnS .sS
 road_1.chance = 8


 例) 建物を生成する規則
 house_1 = ... Hn. sss
 house_1.chance = -2

- "''house_1''" というのは、この規則の名前です。
建物の生成規則には "house_1" から始まる連番を、
道路の生成規則には "road_1" から始まる連番を付けます。

- 右辺の "''... Hn. sss''" の部分が規則の内容です。
ここについては後述します。

- 2行目の "''house_1.chance = -2''" というのは、
この規則が適用される確率を表します。
"-7" が最も高確率で、''数字が大きくなるほど確率が低くなっていきます''。
|~chance|-7|-6|-5|-4|-3|-2|-1|0|1|2|3|4|...|8|h
|~確率|1/1|1/2|1/3|1/4|1/5|1/6|1/7|1/8|1/9|1/10|1/11|1/12|...|1/16|



**アルゴリズム [#jcff96b9]
+市域の中からランダムに1タイルを選択します
+空地でなければ終了します
+最初は道路ルールです。ランダムな道路ルールを選びます
+ルールを適用する確率を試し、はずれたら次の番号のルールを選びます
+ルールに一致するかを試し、一致すれば、道路を建設して終了します
+一致しなければ次の番号のルールを選び、繰り返します(最後まで行ったら最初に戻り、一巡するまですべてのルールを試します)
+どれも一致しなければ、次は建物ルールです。ランダムな建物ルールを選びます
+ルールを適用する確率を試し、はずれたら次の番号のルールを選びます
+ルールに一致するかを試し、一致すれば、建物を建てて終了します
+一致しなければ次の番号のルールを選び、繰り返します(最後まで行ったら最初に戻り、一巡するまですべてのルールを試します)

** 規則の意味 [#e3aa3a48]

1行目の右辺にある "''... Hn. sss''" という部分が、この規則の内容を表します。
これは、以下のように3行3列のパターンを意味しています。

|.|.|.|
|H|n|.|
|s|s|s|

&imgfolder(16/info.png); ルールは3x3、5x5、7x7の3通りが使えます。ルールごとに違うサイズを使用しても構いません。

それぞれの文字は、以下のような意味を持っています。

|CENTER:''文字''|CENTER:''意味''|h
|CENTER:s|道路|
|CENTER:S|道路ではない|
|CENTER:h|建物|
|CENTER:H|建物ではない|
|CENTER:t|駅・駅ビル|
|CENTER:T|駅・駅ビルではない|
|CENTER:n|自然 (建物や道路がないという意味)|
|CENTER:.|何でもよい|

3行3列の範囲がこのパターンに合致するとき、
真ん中のマスに建物や道路が (規則の2行目で指定した確率に従って) 発生します。

パターンは90度単位で回転したものを含みます。
たとえば、上の規則は、それを回転して得られる
|s|H|.|
|s|n|.|
|s|.|.|
や
|s|s|s|
|.|n|H|
|.|.|.|
や
|.|.|s|
|.|n|s|
|.|H|s|
というパターンにも合致します。

一方、パターンは反転を''含みません''。
つまり、上の規則は
|.|.|.|
|.|n|H|
|s|s|s|
というパターンには''合致しません''。
したがって、非対称な規則では、
反転したパターンを別の規則として定義する必要があるでしょう。
例としてデフォルトのcityrules.tabを見ると、
 house_2 = ... .nH sss
 house_2.chance = -2
と定義されています。