2019年10月15日火曜日

【ゲーム】simutrans 連続堀割の検討

I want to build a continuous artificial slope to create a city with a street grid.
連続堀割をしたいです、井桁シティ(碁盤目状の街)を作るために。

さて、simutransです。
前の投稿で書いたように僕は井桁シティ派です。バス、トラック、市電、列車、船すべてを含む複合駅を駅範囲の漏洩なく井桁に並べて悦に浸ってます。

井桁シティの作成には手間がかかるのですが、井桁でキレイに並べるために好みのマップも用意できるようになり、下準備の整地がかなり楽になりました。さらに楽にしたいです。

今一番作成に手間がかかるのは、堀割に運河を作成する作業です、運河は連続で引けるのですが、その前段階の堀割に多大な手間がかかります。タルくてダルいです。ソースいじって始点と終点ダダァと堀割するようにしようかと思ったり、ソース見てもピンとせずやる気が出なかったり、しかし一つ一つ堀割するのも大変だし、、、どうしましょう、方法を考えてみました。

【連続堀割の方法の考察】
  1. simutransの画面操作
    • 一つ一つ手で堀割する
      可能だが、そもそもこれがメンドクサイ
      個々人の状況によっては、他人にやってもらう事も可能ではある
    • マウス自動化ツールを使う
      可能、しかし問題あり、単純マウス操作再現では脱調が心配、画像認識系では画面の多様さの対応が面倒
  2. simutransの現状正規の機能で可能か?
    • 設定ファイルの変更
      不可、現状では連続堀割を可能にする設定はない
    • アドオンとして追加
      不可、現状では連続堀割を可能にする設定はない
    • シナリオとして追加
      不可、現状では連続堀割を可能にする設定はない
      Squirrel-APIにも地形変更の口は用意されていない
      仮に可能であっても、普通のゲームの開始後に堀割し井桁シティを作りたい目的に合わない
    • 「町の発展」にやらせる
      不可、現状では連続堀割を可能にする設定はないし、cityrules.tabの設定でも出来ない
      仮に可能であっても、ゲーム内時間がかかり、ゲーム開始の初めの頃に堀割し井桁シティを作りたい目的に合わない
    • 他社AIにやらせる
      不可、現状では連続堀割を可能にする設定はない
      Squirrel-APIにも地形変更の口は用意されていない
      仮に可能であっても、ゲーム内時間がかかり、ゲーム開始の初めの頃に堀割し井桁シティを作りたい目的に合わない
  3. simutransの入出力ファイルの変更
    • マップデータの変更
      無理、ソース変更すれば可能
    • セーブデータの変更
      可能、形式(バイナリ、xml)、圧縮解凍(zip、bzip2)の、情報もソースも公開されているため可能
      編集を汎用のエディタ(テキストエディタ、バイナリエディタ)で行うか、専用の編集ツールを作成するか検討が必要
  4. simutrans本体の変更(ソースコード変更)
    • Squirrel-APIの追加
      可能、地形変更を可能にすることによって、シナリオや他社AIにやらせることが可能、しかし、ゲーム開始の初めの頃に堀割し井桁シティを作りたい目的に合わない
    • 「町の発展」の動作の変更
      可能、地形変更を可能にすることによって、「町の発展」にやらせることが可能
      cityrules.tabの拡張も含めた変更が好ましい
      しかし、ゲーム内時間がかかり、ゲーム開始の初めの頃に堀割し井桁シティを作りたい目的に合わない
    • マップファイル読み込み時の動作の変更
      可能、画像ファイルからゲームデータへの変更時に、特定の条件の高度差1の場合堀割とするとか、別ファイルで堀割箇所指定とか、いろいろ変更はできるが、不自然かな
    • 運河ツールに追加
      可能だが、他の道路や線路ではそのような機能がないため不自然
    • スロープツールに追加
      可能、まあ変更するならここが無難かな

さて、どの方法で対応しますかね。
ぼくはC/C++系のプログラマーだったりするので、ここはスロープツールへの連続堀割機能の追加と行きたいところですが、グータラなのでやめにします。セーブデータをテキストエディタで編集する方法で対応しようと思います、楽だしね。

次回は、セーブデータの中身の説明とか書こうと思ってます。

0 件のコメント:

コメントを投稿