まず、City.json(以下「City」と表記。)の解説から始める。
まず、City上部から。
"id":"niigata",
"customName":"Niigata",
"customDescription":"Let's lay a metro on the fertile land
between the Shinano and Agano rivers.",
"customLocalName": "新潟",
"customLocalNameLocale": "ja",
"crossingStyle": "Bridge",
"lineCount":8,
"audioLoadoutId ": "osaka",
まずidはそのマップを識別する符号である。これは他のマップと被ってはいけない。
下のcustomNameがトップメニューに表示されるタイトル。customDescriptionはマップの説明。
今回は「信濃川と阿賀野川に挟まれた肥沃な土地にメトロを敷きましょう」という意味にしてみた。
customLocalNameは現地名。もちろん新潟は日本で、「新潟」は日本語表記なのでcustomLocalNameLocaleはja。
crossingstyle(川や海を超える場合)は橋にしてみた。
lineCount(最大線路数)は最初のデバッグ段階では踏襲して5にしてあるが、将来的には9(新幹線・信越線・羽越線・越後線・白新線・磐越線・弥彦線・新潟交通線・新潟空港線)にする予定だ。
「新」だけになってしまったが、続行。
最後に、「audioLoadoutId」はバニラ版の都市ごとに決められた音楽を流せる。今回はバニラで唯一の日本の地名である大阪にしてみる。
"theme":"Neegata"
theme項目は、theme.jsonで指定したIDを入れる。ちなみに無効だとデフォルトになる。
次に、障害物の設定を行う。そして一番面倒くさいところでもある。
inkscapeやAdobeイラストレーターなどを使ってsvgでやったほうがいいらしいが、全然解読できなかったので、目分量でやってみる。
100×100を作った例。だいたいこのグリッド1マスが50のようだ。だいたい右に18、左に22、上に10、下に8といったとこか。
となると、-1100,-550と900,450あたり。
新潟マップの作成については分割→新潟マップ奮闘記
次に、データを紹介。
“visual”: true,
“inverted”: false,
“decoration”: false,
“inPreview”: true,
“cornerRadius”: -1.0,
“color”: {
“day”: [200, 200, 200],
“night”: [55, 55, 55],
},
“parent”: 1,
visualはその障害物がマップで描かれるかどうか。
invertedは水域として描かれるか陸地(島)として描かれるか。
decorationはtrueにするとゲームプレイ要素として無効(飾り)として扱われるようになる。
inPreviewは障害物がプレビュー画像に出てくるかどうか。基本はTrueにして損はないとのこと。
cornerRadiusは0以上にすると角が取れる。
colorは島に色を付けたいときに。
parentsは水域が複数ある時に必要らしい。広島マップで中洲作ったり、滋賀マップで竹生島作ったりするときに役立ちそう。
"origin": [0,0],
"zoom": {
"start": 1.2,
"end": 0.45,
"earlyZoom": 1.0,
"lateZoom": 0.65,
"delay": 7,
"duration": 49
},
"startArea":{
"rightBottom": [-0.1,-0.2],
"leftTop": [-0.1,-0.2]
},
originエリアはこだわりがなければ0,0でいいだろう。
startとendは最初のズーム値と最後のズーム値。
delayはズームが開始される時期、durationはズームが始まってから終わるまでの期間。
earlyZoomとlateZoomをうまく調整すれば拡大する時間も変わる。
startAreaを調整すれば少し時間差が生まれる。
"cityAreas": [
{
"label": "Bandai-Hakusan",
"paths": [
{
"points": [
[-470,0],
[-360,-300],
[0,-300],
[350,-50]
[350,150]
[250,400]
[-470,400]
]
}
],
"density": 1.5,
"stationSpawns": [
{"type": "CIRCLE", "weight": 0.3, "maximum": -1, "activeDay": -1},
{"type": "TRIANGLE", "weight": 0.8, "maximum":
-1, "activeDay": -1}
{"type": "SPECIAL", "weight": 0.2, "maximum":
-1, "activeDay": -1}
{"type": "SQUARE", "weight": 1.0, "maximum":
-1, "activeDay": -1}
]
},
地域ごとに属性を作ることができる。新潟なら、万代や白山はビジネス街に、内野や黒埼は純粋なベッドタウンに、といった感じになるだろう。
だいたい、駅の扱いはこういう解釈。特殊駅はspecial関数で登場する数を選択でき、東京マップは1種類あたり2~4つ登場する。
追記(2020.12.14):日本海の真上に駅がスポーンするバグが発生した。どうやら、面倒くさくなって海まで大まかに引いたのが原因のようだ。なので、面倒くさいので海岸線スレスレにしたら、そこにスポーンするとかなりの方向が海突入というオチになる。
Ver1.2ではとりあえず市域を海岸線まで後退させた。
"upgrades": {
"initial": [
"Line",
"Line",
"Line",
"Tram",
"Tram",
"Crossing",
"Crossing",
"Crossing",
],
"numOptions": [1,2],
"unlocks": [
[
{"type":"Tram","max": 0,"count": 1,"weight": 1.0,"week": 0},
{"type":"Carriage","max": 12,"count": 1,"weight": 0.45,"week": 1},
{"type":"Carriage","max": 12,"count": 2,"weight": 0.45,"week": 4},
{"type":"Locomotive","max": 0,"count": 1,"weight": 0.75,"week": 2}
{"type":"Crossing","max": 6,"count": 1,"weight": 0.5,"week": 2, "maxWeek": 7}
],
[
{"type":"Line","max": 0,"count": 1,"weight": 1,"week": 0},
{"type":"Tram","max": 0,"count": 2,"weight": 0.7,"week": 0},
{"type":"Interchange","max": 4,"count": 1,"weight": 0.5,"week": 3},
{"type":"Locomotive","max": 0,"count": 1,"weight": 0.75,"week": 3}
]
]
},
initial関数は最初に持っている数。新潟マップ(Ver.1.1)では路線3本、トラム3本、橋3本からスタートする。(1.0ではここを変え忘れゲームバランスが滅茶苦茶になっていた)
アップグレードでは