やっつけ都市計画 〜 Pythonによるセーブデータいじり編
こちら、↓ こちらへの投稿を目論んでの記事になります。
=======================================================
[口上]
フリーの交通?シミュレーション
Simutrans(http://japanese.simutrans.com)が, 素晴らしい.
それでもって私は人工地盤っぽいことをやっています。
Simutransで人工地盤してみる - shingoushori's dialy
大規模な都市開発をさっさとやるべく、Pythonでセーブデータをいじっています
=======================================================
[要旨]
みなさん、Simutransは何がお好きですか?
あるいは、鉄道・交通をどうお楽しみでしょうか?
私が好きなのは、なんか、眺めること!
そして、その行き交う交通システムに改良を加えて、いいことした気分になること!
しかし、Simutransを普通にプレイしていると、とても眺めてばかりいられません。
改良する元となる在来の交通システム+都市を育てるだけで、何夜も過ぎます。
そうこうしているうちにSimutrans自体のバージョンは上がれば、
パソコンすらも代替わりします。
するとどうでしょう、手塩にかけて育てたセーブデータがロードすらできないことも。
そして気づくのです、
「あれ、Simutransを眺めながらやろうしていた作業が何もできていないぞ」と。
(私の場合、それは学位であり、音楽制作であり、業務改善のための勉強でした。)
このように、私が感じる3大悲劇
・やりたい規模の都市を育てるまでが大変
・セーブデータがロードすらできない!
・技術的な進歩の機会の浪費
を克服する1手法を実践しています。
すなわち、"Pythonによるセーブデータいじり"です。
本稿では、私が2017年にやってきた、
セーブデータの黎明期の都市計画をやっつけ仕事するための、
Pythonによるセーブデータいじりについてまとめます。
楽しい乱開発 #Simutrans pic.twitter.com/850vSDsI4a
— shingoushori (@shingoushori) 2017年10月16日
=======================================================
[やっつけ都市計画]
↓ こんな街路を都市の成長に合わせて張り巡らせ、多層化しています ↓
人工地盤で格子を築いた上に駅(バス停)を設置する座標なら格子点 地形を吸収すべく柱だらけの層で吸収 ... そこに待合室(まるでコインロッカー)的に1つ目を設置 ... 格子点自体は道路,線路層では交差点だが、下層は別の話 そして向きを揃えれば、いい感じ #Simutrans pic.twitter.com/gRCAcjGE7Q
— shingoushori (@shingoushori) 2017年8月31日
[格子状街路 〜 天空編]
格子を敷くにも、
庁舎や産業などの制限から、どういうパラメータの格子にするかで毎回悩みます。
いざ決めても、坂や川に泣きます。
そこで、もういっそのこと天空の街路を作ってしまおうと思い立ったのです
... というわけで、天空に格子状街路を浮かせてしまいます。
高架を重ねた後にその下の建造物を消すことで、GUIででもできますね。
これをセーブデータいじりにより、ダイレクトに機械的に浮かせたところに配置します。
・↓ こんな感じです
PythonでSimutransのマップに天空の市道の碁盤の目を追加してみた - shingoushori's dialy
・↓ バス停も追加できました しかも、交差点にです
PythonでSimutransのマップに天空の市道の格子点にバス停を追加してみた - shingoushori's dialy
・↓ そして、
↓ 専用のプレイヤーも追加できましたし、路線にも登録できました
のどかな新規マップも、自作Pythonスクリプトでいきなり空中に格子状のバス網 + 都市育成用の道路網 やりたいことがかなりやれてきている #simutrans pic.twitter.com/EkuO0RSRaF
— shingoushori (@shingoushori) 2017年9月30日
Pythonで作った格子状のバス網によって育まれた...健やかでない交通需要 放置しすぎてプレイヤー会社を始める機を逃したような #Simutrans pic.twitter.com/oodD5Ij33t
— shingoushori (@shingoushori) 2017年10月2日
ごめんなさい、サンプルコードが未公開でした。
さすがに長くなったこともあり、GitHubを活用しようと思ってあれこれしているうちに、
コードの整理と公開を忘れていました ... 来年の課題です ...
[格子状街路 〜 地上編]
天空に配置はできました、専用のプレイヤーまで建てられました。
とは言っても、配置しただけでは足りませんでした。
天空に道路があっても、地上に道路がないと市街は広がらないんですね ...
・空き地に道路を格子で敷いてみた
PythonでSimutransのマップに空き地に道路を格子で敷いてみた - shingoushori's dialy
乱開発のために、市街を広げさせて交通需要を増やすための布石です.
・特定の行と列を平坦化してみた
PythonでSimutransの特定の行と列を平坦化してみた - shingoushori's dialy
これにより、GUIでも高架が敷設しやすくなります.
・特定の行と列の海底のレベルを持ち上げてみた
PythonでSimutransの特定の行と列の海底のレベルを水面まで持ち上げてみた - shingoushori's dialy
これにより、海を横切る高架が敷設しやすくなります!
↓ こんなことをやるのも楽しいんですけれども ...
うみのなかみち #Simutrans pic.twitter.com/GEZ3xE7Wkn
— shingoushori (@shingoushori) 2017年8月19日
海上油田も鉄道アクセス 無理やり遠浅化 #Simutrans pic.twitter.com/MZGz5WhNCQ
— shingoushori (@shingoushori) 2017年8月26日
=======================================================
[その他]
・悲惨な市道化防止策 : 地下掘って、高架にする
PythonでSimutransの道路の下を掘って、ペデストリアンデッキを設置してみた - shingoushori's dialy
悲惨な市道化防止策 : 地下掘って、高架にする #Simutrans pic.twitter.com/qi3DFnUX28
— shingoushori (@shingoushori) 2017年11月19日
主観的に、一番みなさんの反響が大きかったのが、これです。
こういった、地味に繊細な作業になる、下ごしらえのような開発は、
セーブデータいじりの出番だと思っています。
・線路と道路の持ち主の変更
PythonでSimutransの線路と道路の持ち主を変えてみた - shingoushori's dialy
複数のプレイヤーを行き来していると、
気がつかないうちに線路や道路の持ち主が混ざりませんか?
そして、それが気持ち悪くないですか?
直そうとしても、プレイ画面で探し出すのは困難です。
「セーブデータいじりで補正できる。」
この余裕は、乱開発を地味に後押ししてくれます。
・全乗り物のスケジュールの待機を一括変更
PythonでSimutransの全乗り物の待機を上書きしてみた - shingoushori's dialy
利益率を微調整して、資金のカンストや破産を防ぎたいと思いました。
そこで単純に思いついたのが、待機の待ちの調整です。
でも、1台ずつ、1路線ずつ設定するのが苦しく感じました。
そこで、セーブデータいじりです。
いじってみると、
GUIでは入れられなかった/入れられると気づかなかった値が大丈夫だったりします。
・元々の庁舎を残す方法 : 街の座標を庁舎からずらしておく
PythonでSimutransの街の座標をずらしてみた - shingoushori's dialy
庁舎の建て替え → 移築 → 元々の庁舎の場所、雑居ビルの密集地!
という流れに、どうにもしょんぼりしてしまうのです。
とりあえず、小さい頃こそ庁舎横付けで、街の代表駅を作りたくなりませんか?
初めはpakをいじっていたんです、ランドマーク扱いの。
しかし、セーブデータいじりによって、どうやら実現できてしまいそうです。
副産物 〜 魔改造!
思ったより単純じゃなさそうだけども 副産物として怪しい知見を得た pic.twitter.com/2VnORvSHY5
— shingoushori (@shingoushori) 2017年9月3日
和洋折衷 ? pakいじりなし、セーブデータの数字2ついじっただけ pic.twitter.com/95sqd1kx3V
— shingoushori (@shingoushori) 2017年9月3日
=======================================================
[方法]
やっていることは、実に原始的です。
<用意するもの>
・比較できるテキストエディタ : macでmiを用いています。
・スクロプト化したい差分以外をできるだけ排した、セーブデータ対
<やること>
ひたすら観察 ⇔ トライアンドエラー ⇔ 一般化できないか悩む
今後は、本体のソースコードを参照することでの効率化を検討していきます。
[今後]
・GitHubでいい感じにサンプルコードを管理
・ロードできなくなったセーブデータのサルベージ
そういえば本文中にありませんが、
セーブデータがロードできなくなったことが、セーブデータいじりに手を染めた元々の動機でした。
・Pythonスクリプトのタイマー実施
オートセーブとAI Playerあたりで、擬似的にでもできないものかと妄想中です。
・路線図出力
・ちゃんと都市計画
・なんか賢い自動なんとやら
=======================================================
[用語]
都市計画は幼い頃からなんとなく好きだったものの、
そういえばちゃんとは勉強していないので、用語が覚束ないです。
以下に、本稿執筆に際して「そういえば」で調べて出てきた分を、貼り付けます。
・方格設計
方格設計 - Wikipedia
理解:碁盤の目、格子状に道路を配置する、都市計画の設計
・格子状街路
格子状街路 - Google 検索
専門用語っぽくするとしたらこんなのだろうなと、私が勝手に思っている言葉
採用している論文、実在の自治体のHPがあるあたり、悪くない言葉だとの認識
・碁盤病
↓ 参考文献 11:52 あたり
=======================================================
[さて]
セーブデータいじりによって、本体改造、さらにはセーブデータのフォーマット拡張をせずとも、
ある程度は無茶苦茶なことができるんだということを、感じていただけましたでしょうか。
そして、GUIでのやり直しが発生すると苦しそうな作業を自動化することで、
もっと大規模で徹底的な乱開発に邁進できる希望が膨らみましたでしょうか。
セーブデータをいじっていたら、まるで事故 #Simutrans pic.twitter.com/PZwINGTarr
— shingoushori (@shingoushori) 2017年9月22日
久しぶりにPythonでセーブデータいじり 施設が複数ある停留所で、メインじゃないところにもマーカーが出せた (メインを削除した後にメインになった時に出せるから当然できる) 使い方次第では便利かもしれない #Simutrans pic.twitter.com/EAzjwMserT
— shingoushori (@shingoushori) 2017年10月15日
... 私はこの一連のセーブデータいじりの成果によって、
本体改造したくなってしまいました。
ということで、やっつけ都市計画 〜 ちょっとした本体改造編 に続きます。
ありがとうございました。