ペルリ的な何かなブログ

Simutransとかいろいろ自由気ままに書き散らす

Advent Calendar 2017の記事(Simutransとの出会いin2007)

Advent Calendarの記事として自分とSimutransの出会いについてネタにしたいと思います。

 

※ほぼ半年ぶりの記事ですが、文字だけのつまらない記事です。

 

自分がSimutransに出会ったのはいまから10年ちょっと前の2007年初頭。

記録によればすでに信号システムは現行のシステムに移行したはずなのですが、どういうわけか旧信号システムの88.x系の本体を使っていました。

 

前史としてSimutransに出会う前は”Traffic Giant”というゲームの体験版にはまっていました。

2000年に発売された古いゲームですが、おおざっぱに言うと都市交通を構築してマイカーを減らすゲームです。近年だと”Cities in Motion”が近いかもしれません。

かなりマイナーなゲームゆえに手に入ることもままならず、代わりのゲームを探していました。

その時にサービスが始まったばかりのニコニコ動画で出会ったのがSimutransでした。

 

前述のとおり、初めてSimutransに触った本体は88.x系で、今のSimutransからするとまるで違うもののようにも思えます。

たとえば、前述のとおり鉄道信号システムも刷新されましたが、地下モードも高架橋も実装されておらず、橋の上にようやく駅や信号が設置できるようになったものの、トンネルの中は何もできない時代でした。

高架と言えばモノレールがあったくらいで、思い返せば本当に今のSimutransは充実していると思います。

 

操作感覚はSimcityに似ていたので何とかwikiを見ながら遊び方を覚えたのはいい思い出かもしれません。

当時はまだまだ64も128もアドオンが少なく、毎週のように日本語wikiに新作が出てくる時代でもありました。

 

ほどなく地下モードが実装されました。

この機能は実に革新的で長大トンネルを作ってもそこが信号的な意味でボトルネックになることがないというだけで衝撃的でした。

しかし、ちょっとしたきっかけで簡単に動作が停止するという困りものでもありましたね。

少し作業したらセーブを繰り返して地下鉄を掘った人も少なくないと思います。

同じころに実装された高架橋も非常に落ちやすく、苦労したのも随分と昔の話になりました。

 

あれから11年近くが経ちました。

 

当時学生だった自分は社会人となり、Simutransもあのころとはずいぶんと変わりました。

 

色んなものが増えて当時活動していた人も随分といなくなりました。

でも変わらずSimutransは進化し続けコミュニティの盛り上がりももうしばらく続くのだと思います。

 

みなさんはどんな出会いをしているのでしょうか?

名無しの開発記#11と#12について

続いて11回と12回です。

www.nicovideo.jp

11回では南海な私鉄の登場です。

まずは高野線な桑港線から。

f:id:pm1965:20170630022035p:plain

桑港線の終点は高野山駅です。第4.5回ではバスで山を下りていきましたが、鉄道の開業でずっと便利になりました。ケーブルカーはない。

f:id:pm1965:20170630022205p:plain

橋本っぽい佐土原駅国鉄線は気動車が行き交うローカル線です。

f:id:pm1965:20170630022219p:plain

前回は町田っぽかった桑港の町。

f:id:pm1965:20170630022402p:plain

我●子と思うかもしれませんが、新百■ヶ丘がモデルな早岐線との分岐駅な新守口駅

f:id:pm1965:20170630022535p:plain

その早岐高速鉄道線は水底トンネルで湖のような海のようなものを渡ります。

f:id:pm1965:20170630022541p:plain

新守口からは複々線となります。小田急っぽい。

f:id:pm1965:20170630022542p:plain

玉里岸出駅。岸里玉出+新今宮な駅。首里方面の支線は汐見橋線のつもり。本線と桑港線の急行電車が直通して首里駅方面へ接続。ぶっちゃけこっちのほうが利用者が多い。

f:id:pm1965:20170630022722p:plain

本線と桑港線の複々線区間

f:id:pm1965:20170630022725p:plain

大嵐ターミナル。国電と宇佐鉄道との乗換駅だけど、それほど利用者が多いわけではない。

 

f:id:pm1965:20170630023223p:plain

f:id:pm1965:20170630023242p:plain

本線はだいたいこれらがやりたかっただけシリーズ。

f:id:pm1965:20170630023316p:plain

和歌山市?そんなものはない。そんな名寄駅。

f:id:pm1965:20170630023405p:plain

マップ最南端の名寄駅。

 

続いて12回です。

www.nicovideo.jp

ちまちまとローカル線を延ばしてきて、ようやく全都市の接続が完了しました。

f:id:pm1965:20170630024141p:plain

姫路本線との接続駅な吉松駅。

f:id:pm1965:20170630024201p:plain

f:id:pm1965:20170630024237p:plain

f:id:pm1965:20170630024239p:plain

f:id:pm1965:20170630024241p:plain

こんなのどかな風景が広がっている西側のローカル線網。

f:id:pm1965:20170630024332p:plain

東側のローカル線は国電との接続駅が多かったりします。

f:id:pm1965:20170630024335p:plain

中核都市から出ていくローカル線。都市近郊の駅も質素なものが多いです。

f:id:pm1965:20170630024507p:plain

札幌駅のモデルは会津田島だったりします。

f:id:pm1965:20170630024559p:plain

ループ線を往くSL列車。

今回の走行シーンはいろんな乗り物を乗り継いでのローカル線の旅でした。途中天候の変化をつけてみてという実験作でもあります。

 

 

名無しの開発記#09と#10について

毎度不定期更新な幣ブログですが、動画のほうが4回分進んだのでとりあえずそのへんのまとめを。

第9回から12回までは全都市を接続することを目標に私鉄の開業が相次いだりしました。

www.nicovideo.jp

まずは第9回

大田急行というどこかで聞いたことのある会社が登場しました。

f:id:pm1965:20170630015627p:plain

大田急の片側のターミナル駅は大田の街にあります。計画的な開発を行ったという設定の都市で公園の木々が四季を彩ります。

f:id:pm1965:20170630015311p:plain

途中にある稲取の街を高架で横切ります。

f:id:pm1965:20170630015908p:plain

宇佐は枕崎駅の近くでは川と並走する区間もあります。

f:id:pm1965:20170630015857p:plain

宇佐鉄道とも接続する枕崎駅小田急と京阪を足して2で割ったような私鉄でした。

今後存在感が薄いのでテコ入れしていきたいです。

 

そして第10回です。

www.nicovideo.jp

f:id:pm1965:20170630020250p:plain

とりあえず空港が開港しましたというお話。最近の流行であるほかの人との就航は今のところ厳しいです。世界観をある程度守っていきたいので。

f:id:pm1965:20170630020247p:plain

その就航先の空港が出水という東端の中核都市です。そういえば動画では一切登場させてないですね。そのうち出します。

この回では白馬地区に新しい国電線を建設しました。全都市接続へ向けて白馬近郊にありながらずっと放置し続けた都市を結んだ感じです。

今後メイン系統が混雑してきたらバイパスさせる目的もありますが。

f:id:pm1965:20170630020744p:plain

諫早~西都間の複雑な立体交差。白宇線の電車線と列車線が入れ替わりながら西尾線が交差していきます。今後の増線を一切考えてない開発である。

f:id:pm1965:20170630020747p:plain

第1回からずっと通過され続けてきた八日市の町にもようやく速達列車が止まるようになりました。この辺りは京葉線とか埼京線なイメージかもしれません。

f:id:pm1965:20170630021050p:plain

築堤上のホームを持つ三地蔵駅。この雰囲気が好き。

f:id:pm1965:20170630020753p:plain

空港のテストを兼ねて作った五城目飛行場跡。航空機の試験とか訓練目的って設定で残してみました。

この9回10回はほぼ同じタイミングの状態で収録しました。

退避パターンとか気合入れて調整したけど没になった路線があったりもしますがそれはまた別のお話。

NetSimutransに向いてるセーブデータ形式に関する観測とその見解

約2か月ぶりのブログ更新です。

NetSimutransで開発が進むとログイン時間が長くなることがあると思います。

これは2014年頃に行ったセーブデータ形式毎のログイン時間を計測してどのファイル形式がNetSimutransに向いた形式なのかをしました。今更ながら掲載します。

 

最初に結論を出しておきますが、「xml形式でなければどの形式でもログイン時間は変わらないので、より軽量なbzip2形式が最適」です。あくまでも2014年当時の計測に基づく結論です。

 

前提となる知識として、いくつか話をしておきます。

 

まず、Simutransのログイン処理です。

誰かがログインしたときの処理は次のようになっています。

1.サーバーでゲームを保存する

2.すべての参加者に保存したセーブデータを転送する

3-1.各クライアントはセーブデータの転送が完了次第ロードする

3-2.サーバーはすべてのクライアントに転送が完了したらロードする

4.各クライアントはロードが終了したらサーバーのロード完了まで停止状態

5.サーバーでロード完了したら他のクライアントのロード完了を待たずにゲームは動き始める

6.サーバーよりもロードが遅かったクライアントはロード完了次第早送りでサーバーの時間まで追いつく

これが一連の流れとなっています。

2014年当時、自分はサーバーの運営を行っていましたが、ログイン処理に時間がかかること、特にセーブとロードに時間がかかっていることに気が付きました。そこでセーブデータの形式を変えることによって改善できるのではないかと考えました。

 

そこで、Simutransの設定ファイルであるSimuconfでは6種類のセーブデータ形式があります。

設定ファイル/simuconf.tab - Simutrans日本語化・解説

↑に書かれていることをそのままに紹介します。

 

saveformat = bzip2
 セーブデータの圧縮形式を指定します。現在はZipのみ対応で、圧縮しない場合は"binary"を指定してください。
102.2.2以降bzip2での圧縮もサポートされています。
zipped ... zip圧縮保存
bzip2 ... bzip2圧縮保存。zipよりもファイルサイズが小さくなるため、ネットワークゲームに適しています。ただし圧縮解凍はzipよりも若干遅くなります。(102.2.2以降)
binary ... 圧縮せずに保存
xml ... xmlで保存(101.0以降)
xml_zipped ... xmlでzip圧縮して保存(101.0以降)
xml_bzip2 ... xmlでbzip2圧縮して保存(102.2.2以降)
 
とのことで、要するに「非圧縮形式と圧縮する形式が2つ、それぞれにxml方式で保存することができる」わけです。
ここで自分が目を付けたのはセーブデータを圧縮して保存し、それを解凍する時間とゲームの転送時間のどちらを取るか?です。
圧縮すればそれだけ「圧縮解凍に時間がかかる」、それを行わなければセーブデータ容量が大きくなり「転送に時間がかかる」と仮定し、圧縮解凍と転送のどちらを選べば早いのかを検証しました。
 
検証は2014年の5月に行いました。本体バージョンは112.4のナイトリー版r7132です。当時やっていた対戦の環境を誰もいない時間にそのまま使って行いました。
自分はサーバー向けに1台PCを用意して、別のPCでログインして遊んでいましたので回線速度は十分にあり、その変動は少ないと思います。
 
その結果は以下の通りとなっています。
zipped
1st
Client読み込み完了 2'30"
Host読み込み完了  5'15"
データ容量:※記録忘れ
2nd
Client読み込み完了 2'40"
Host読み込み完了  4'20"
データ容量:12631kb
3rd
Client読み込み完了 2'41"
Host読み込み完了  4'27"
データ容量:13014kb
4th
Client読み込み完了 2'43"
Host読み込み完了  4'30"
データ容量:12732kb
bzip2
1st
Client読み込み完了 2'47"
Host読み込み完了  4'35"
データ容量:9086kb
2nd
Client読み込み完了 2'47"
Host読み込み完了  4'25"
データ容量:9016kb
3rd
Client読み込み完了 2'48"
Host読み込み完了  4'34"
データ容量:9198kb
4th
Client読み込み完了 2'50"
Host読み込み完了  4'29"
データ容量:9418kb
xml_bsip2
Client読み込み完了 接続不可(ゲーム保存に時間がかかりすぎてタイムアウト)
Host読み込み完了  計測中止
データ容量:12055kb
binary
1st
Client読み込み完了 2'50"
Host読み込み完了  4'27"
データ容量:64729kb
2nd
Client読み込み完了 2'50"
Host読み込み完了  4'28"
データ容量:65033kb
3rd
Client読み込み完了 2'51"
Host読み込み完了  4'36"
データ容量:65591kb
 
という結果でした。もちろん3年前のバージョン112.4なので、今はもう少し早くなっていると思われますが、当時のデータということで。
 

#NetSimutrans の無人運用をしてみる

思えば今月何も記事を書いてないので、無駄話を兼ねて。

今回はNSのサーバーの無人運用の話です。

自分の場合、夜勤で長時間家を空けたり、遠出で4日くらい平気で開けるので必須の話となります。

しかしながら、Simutransの動作が不安定なので、自動で再起動するような工夫が必要になります。

NSwikiにはDDNS自動登録ツールや自動再起動ソフトも紹介されていて、必須と思っています。

DDNS自動登録はたまに(ルーターの再起動など)グローバルIPが変更されてしまうことがあり、それでログインできなくなるのを防いでくれます。

自動再起動ツールはSimutrans本体が動作を停止したときにそれを自動で判別して再起動してくれるツールです。

http://w-shadow.com/blog/2009/03/04/restart-on-crash/

↑NSWikiなどで紹介されているツールです。

http://www.gigafree.net/security/process/restartoncrash.html

↑その使い方です。

このツールはロード/セーブ中にも動作停止を誤検知することがあるので、数分単位で応答しなくなった時にのみ再起動がかかる設定にするといいです(自分の場合は5分程度で設定しています)。

非常に便利なのですが、Simutransが応答なしにならないと動作停止しなく、FATEL ERRORなどが出ている間は動作し続けてることになります。そこで、定期的にキー入力をするようにさらに外部ツールに頼っています。

自動キー入力「まけいぬ」/使用方法|合法便利ツール/MMORPG向けツール

↑コレで一定間隔ごとにSimutransへ特定のキー入力をさせることによってSimutransのエラーから強制停止に持っていけます。(通常であればEnterキーとか押下すると思いますが、その代わりです。)

数秒間隔でもいいのですが、自分の場合はPCの負荷を抑えるために30秒に設定しています。

いまのところ、ABNSもこれで問題なく稼働しています。

#NetSimutrans の回線同士の相性についてのメモ

未検証な内容が多いので先に断っておきます。何一つ検証していないので信頼性に乏しいです。

 

NetSimutransではたびたび切断されたりします。

その関係について今までの経験則から語っていきます。

 

☆ログイン時の挙動について

まず、始めに各クライアントからの接続要求(ゲームに参加する)が来たときの挙動から。

①接続要求→②ゲームをセーブ→③セーブデータ転送→④ロード

こういう流れになっています。

特に③まではすべてのクライアントにセーブデータが転送されるまでサーバー側で待つ仕様みたいで、回線速度の遅いクライアントがいるとよけいに時間がかかりますが、余りに遅すぎるとタイムアウトも発生します。

また、④のロードはクライアントすべてのロードを待つわけではなく、サーバーのロードが終わったらそのままスタートとなります。そして、各クライアントは転送が終わるとほかのクライアントのダウンロード完了を待たずにロードを始める感じなので回線速度とマシン性能がそこそこならばだいたいサーバーよりも早くロードが終わって、サーバーのロード完了を待つ形となります。

ここでサーバーのロードよりも遅いクライアントはサーバーに置いて行かれるので、早回しして追いつく仕様です。このときに同期が取れなくなる場合がありました。

 

仮説ですが、ロード直後に線路等敷設の処理が多いとそれだけで同期が取れなくなる可能性が考えられます。検証する気がないのでそんな気がする程度ですが。

 

☆回線の相性について

ほかのネットゲーム等同様に回線同士の相性があります。

単純にサーバーとクライアントの相性もありますが、クライアント同士の相性もあるような気がします。

自分がサーバーを開いていたときの経験ですが、ある人(以下Aさん)と別の人(以下Bさん)が参加していたときの話です。

AさんがログインしていてBさんがログインするとAさんが切断され、Aさんがログインし直すとBさんが切断され…を繰り返していることがありました。

その後、BさんがログインしなくなるとAさんの接続が安定してきました。

実証はしていないので何とも言えませんが、クライアント同士でも相性がある気がします。

 

中途半端かもしれませんがそんなお話でした。

名無しの開発記#08について

ようやく1950年代編も終わりを迎えて白馬の開発もおおむねひと段落です。

www.nicovideo.jp

 

 

f:id:pm1965:20170202225541p:plain

f:id:pm1965:20170202225543p:plain

おなじみな感じのBGMなOPのロケ地です。収録時はまだ本線直通の列車が走っていませんでしたが今では空気輸送な準急が本線から乗り入れてきます。

 

今回は白馬地区のこまごまとした路線を紹介

f:id:pm1965:20170202225825p:plain

 

f:id:pm1965:20170202225828p:plain

横川電鉄の様子。資本的には白馬急行電鉄の傘下に入っているというか会社は白馬急行そのものです。

微妙だった国鉄線をリニューアルして神戸電鉄のような何かにしました。

f:id:pm1965:20170202230106p:plain

f:id:pm1965:20170202230105p:plain

京阪大津線をイメージした桜井鉄道。こっちは国鉄です。沿線には漁港があったりコンビナートもあったりと短いながらも風景の変化が楽しめます。

f:id:pm1965:20170202230323p:plain

国電白馬駅乗り入れ開始に伴って同駅の南側は複雑な交差になりました。白馬国電中央線のテコ入れは姫路線混雑対策の一環だったりします。

f:id:pm1965:20170202230748p:plain

屋上の看板が特徴的な民衆駅を擁する出水。

f:id:pm1965:20170202230802p:plain

見た目重視な都市開発をするために改装された大田駅。結局白馬のあたりしか弄ってないとか言いつつこんな感じの開発もしています。 

次回は動画にできそうな開発ネタがたまったら作ります。

現在新私鉄の建設をやってるので…