shingoushori's dialy

音信号処理を専ら研究していた元博士後期課程の学生によるメモ

Simutrans 2018年の取り組み - 本体改造 編

本記事は、Simutrans Advent Calendar 2018 〜 12/20 バグらせて楽しいSimutrans〜増解結、そしてトマソン です 

Simutrans っていう、最高なフリーでオープンソースな交通シミュレーション
それについての、2018年の私のたぶん独自な取り組みについて書きます
Part 3 として、Simutrans本体改造 増解結 + トマソン についてです

[増解結]
増解結とは ...
例えば、鉄道で hoge 駅から foo 駅まで走るとして、
fuga 駅で後ろ2両が切り離されて bar 駅まで走る別の編成になったりする運用のことです。
これは例です。この但し書きの念押しについては、後述。

増解結は2018/12現在、まだ公開できるところまでできていません。
↓ 私の開発環境での現状は、こんな感じです なお、BGMはトマソンです 詳しくは、後述。


本記事の趣旨は増解結にあるのではなく、本体改造に向けての考え方の公開です。
およそ、ひめし (@himeshi_hob) | Twitter さん著のシムトラ本体改造本に、
1人の本体改造をやる者として例示を添えるようなものです。
シムトラ本体改造本を是非読んでください。
本体改造しない方も、本体の機能に満足していない方は、是非読んでください。
きっと、提案内容の実現可能性が上がります。


なお、2018年に実装された本体改造 〜 すでに使える機能については、
ひめしさんの 12/24 分のアドベントカレンダーで紹介されそうです。
あるいは、ひめしさんのシムトラ学会の発表でまとめられています。
私がやったものも色々あります。可愛がっていただけると嬉しいです。

1件、裏技を紹介します。公共駅民営化を使うと、プレイヤー間で資金を移動できます。

 

[まとめ]
・増解結は未完成
・ひめしさんの本体改造本を読もう!
・2018年もいろいろ本体改造しました OTRPに入れてもらえたので、是非使ってください

==============================================================

さあ、以下は本体改造制作途中の混沌です。

[増解結]
さて、増解結。具体的に機能を列挙するとなると、厄介なんです。
要は、"編成 (convoi) に属する何かの物 (object / class) が、増結されたり解結される" それだけのことしか説明していません。それだけの条件しか絞っていません。
これだと抽象的で伝わらないかもしれません。抽象、複数の具体的なケースをまとめているからです。具体化しましょう。

・LA路線のCA編成はNX駅でLB路線のCB編成を分離
・LA路線のCA編成はNX駅で機関車CB編成を増結 NY駅で分離 機関車CB編成はNX駅隣接のDZ車庫所属
・LA路線のCA編成はNX駅から別プレイヤーのLB路線のCB編成として運用
・LA路線のCA編成はNX駅からNB駅まで船舶CB編成にてフェリー輸送
・LA路線のCA編成はNX駅からバス路線CB編成・CC編成としてそれぞれ運行

なぜ抽象化する必要があるか。実装に必要だからです。
複数の具体的なケースを両立できる抽象的な概念が具体化できて、ようやく実装ができます。
しかし、実装できるのは具体的なケースごとになります。
したがって、途中段階での評価は散々なものになることでしょう。
それでも、斬って棄てられるのを覚悟して絞ります。1つずつ積み上げていくしかないのですから。

[積み上げ 〜 バグらせて楽しいSimutrans]
本体改造をやる最大の特権として、実装途中のバグ動作が楽しめることにあると思います。
自分が欲しい機能が作れるかというと、そうでもないんですよ。使ってもらってなんぼなので。

以下に、Twitterにあげた実装の途中経過を並べます。こんな感じの順番で積み上げて行きます。

なお、バグ動作も2種類に大別できます。楽しめるものと楽しめないものです。
楽しめないものは、異常終了です。急に画面が消えます。
変な動きをしている分には眺めていられます。消えてしまうのは、うろたえ、憔悴します。
異常終了の原因は、大抵メモリのアクセス違反です。
増解結は字面の通り、メモリも増やしたり解放したりします。異常終了の嵐です。
ですので、眺めていられる安定した状態のバグ動作までたどり着くと、その日はよく眠れます。

[必要な道具・取らせたい状態]
増解結の実現に必要な道具はなんでしょうか。
その道具はどんな機能 (function) が果たせればいいのでしょうか。
その道具の機能で、何かの物をどういう状態からどういう状態に変えれば良いのでしょうか。
これらが揃って、ようやく実装です。... いや実際には、さらにテストデータが必要です。

現時点で必要と考えている道具・状態を列挙します。
・任意地点での編成の追加・削除 〜 車庫 (depot) でしかできない
・駅停止状態の拡張細分化:増解結前客扱い, 増結対象待ち状態, 増解結中, 増解結後客扱い ...
・任意地点を目的地とする 〜 自動的にホーム先端になる -> 本体改造 advance_to_end で実現
・増解結地点と車庫のペアリング
・増解結情報の格納場所・編集UI

つまり、私の増解結の現状とは、上2つの実現性検証に成功した状況 ということなのです。

[本体改造を取り巻く状況]
誰かに向けての本体改造をするには、2018年12月現況、明るくない状況のように思います。
・何をベースに改造するか : 本家 or OTRP
・どういう形で届けるか : 本家統合 or OTRP統合 ... or 各々でマージ 
・何を作ればいいのか : 複数の人が声をあげるものの、同じものを求めているか不明
・どこまで作ればいいのか : NetSimutrans 対応 ? OTRP 対応 ? 新規アドオン ? 本家統合目指し品質 ?
こういう土台が混沌としています。
2018年、日本のシムトランサーは 本家からOTRP に移行した人が多かったのではないでしょうか。
その一方、ソースコードからビルドする人は、全然増えていなかったのではないでしょうか。
Twitterを眺めている分には、私にはそのように見えます。
ですから、日本のシムトランサー向けに本体改造するなら、OTRPベースでOTRP統合をお願いする。
実質的にこれしかない道です。
これでは、OTRPのオーナー ひめし (@himeshi_hob) | Twitter さんに負担が集中します。
本家からみて異質で多様で日本のシムトランサーの要求を実現する、
それも持続的にメンテしていくとなれば、
せめてソースコードからビルドする人だけでも増えた方が良いと思います。

もっと言えば、ソースコードからビルドできる人が増えないのであれば、
本体改造で日本のシムトランサーの要求を実現しようという人は、増えない方が良いとも言えます。
本体改造がひめしさんを通さずば渡らないのであれば、ひめしさんが全部作った方が早いからです。
本家採用の難しさ同様、ひめしさんとしてのOTRPオーナーなりプログラマーとしての主義があり、
結局のところ調整は発生します。ひょっとすると、私は本体改造しない方がいいとも思っています。
そういう点でも、ソースコードからビルドできる人が増えた方が良いと思います。

なお、本家フォーラムへの投稿については、私が特別に躊躇しているだけとも言えます。
英語が得意じゃないです。... 日本語も別に得意じゃないです。
なので、GitHubにあげたらご自身でサクッと載せちゃえるよう方が増えると助かります。

[おまけ : Mac での本体改造]
Visual Studio Code を使い始めました。なかなか快適です。
プロジェクト単位での管理なので、
開くタブを記憶できるとか、ファイルを跨いで検索できるとか、期待した効果が得られました。

 

[おまけ : トマソン] Simutrans本体改造の方法として、BGM提供という手もあります
私も1曲作りました Where-Thomassons-Lie です

No49に向けて 7拍子 x 7小節を1セクションとして、
1セクションごとに旋律を担当する楽器が増え、7回繰り返しで終わる ...
無調音楽な雰囲気としてカオスな乱開発、赤棒が立ち並んだ混沌を表現してみました
BPMも49です

が、本家フォーラムにて「Simutransの雰囲気に合わないね」となりまして
music.tab ではコメントアウトされ、ついでにNo50にされてしまいました ...
... そんなこともあり、懲りました
本家への提出すらも諦めたのがさらに2曲あったりします


[最後に]
私の最大の期待は、シムトラ乱開発動画が増えることにあります。
増えるといいなぁ ...