mkworks

シムトラ関係のエントリーまとめ群

学会補足資料:アドオンを効率的に作る

この記事はSimturasn AdventCalenderへの参加記事となります、アドベントカレンダーの詳細については以下のリンクから参照して頂けると助かります。
adventar.org

前日のsuitougreenteaさんによる「拙作パッチとツールで爆速ダイヤ制作 in Extended」は以下のリンクからどうぞ
github.com

自分のプレゼンから

去る9月23日に札幌にてシムトラ学会が主催されました、主催者としてかなり早い時期から検討や各種折衝に振り回されていたのが懐かしいですね。
その時に自分は普段のプレイ・開発環境ということ内容でハードからソフトウェアまでさらけ出すように発表していました、その中で「pak制作の自動化」という要素に触れましたが
つい最近まである問題を先送りにしていました。それは「生成されたpakのコピーが手動であること」ここまでを自動化して初めて完全に自動化が図られているのではないかと思います。
この自動化を先日ツールの作り直し+新規ツール追加という形で達成しましたのでこのエントリーを持って改めて自分の環境をまとめたいと思います。

実際に使っているツールは以下のリンクからご参照ください

github.com

制作フロー

アドオンの制作フローについて改めて整理すると以下の通りになります、自分の環境下においてのフローなので参考になる箇所が少ないかもしれませんが

  • 作業フォルダの用意
    • pakフォルダを作成(出力用)
  • png(画像)の作成
  • dat(性能)の作成
  • makeobjにてpak化、pakフォルダへ出力
  • テスト環境へpakフォルダ内にあるpakをコピー
  • テスト環境のpakセットを指定してsimutransを起動して動作テスト

この中で手を動かすべき要素はpng / datの作成や動作テストですね、それ以外の特にコピーする要素については自動化するべき要素だと思います。
理由としては手動で最新のファイルを指定してコピーするのが面倒な事やdatやpngを書いて(描いて)すぐに動作を見たいというのが挙げられます、書いた次の瞬間には更新されたデータでテストできるというのはかなり楽なのではないでしょうか。

pakの自動化は達成済

既にpak作成の段階は自動化しています、単純にファイル更新を検知してそれをトリガーとしてmakeobjを走らせるだけのシンプルなスクリプトだけですが。
この自動化自体も曲者であり作業スタイルとして2つのパターンが存在します、次の画像は実際にアドオンを制作するディレクトリのツリー構造の出力結果です

f:id:mashita_07_15:20171206221638p:plain
f:id:mashita_07_15:20171206221649p:plain

一枚目は直下にpakフォルダがあり、2枚目は配下のディレクトリの中にそれぞれpakフォルダが存在しています。
それぞれ意味が有り1枚目は1つのセットとしてアドオンを制作するケース、2枚目はあるアドオンの拡張として作るケースです。このような構成でもpak化までの自動化は達成出来ました。
しかし、ここまで進んでもテスト環境へのpakのコピーは手動でやらないといけません。面倒ですよね?

自分でコピーするのが面倒すぎる

というわけでやっとさらなる自動化の話です、ここまで自動化すれば目の前のdatやpngとにらめっこしつつテスト環境を走らせるだけになりました。
面倒なことは徹底的に自動化ということでファイルコピーを自動化する段階に入りましたが、どうやってpakフォルダ内で更新されたファイルを判別するかですが以下のエントリーを参考に実装しました

https://futuremix.org/2011/01/find-newer-file-timestampfuturemix.org

この記事を参考に起動時とファイル更新時にタイムスタンプを取得し、初回は起動時のスタンプを参考に比較して記録し次回からは記録されたタイムスタンプを比較する方式でコピーまで実装出来ました。
まだ自動化スクリプトには問題が残りました、ファイルの組み合わせです。
貨物以外は同名のdatとpngが揃わないとmakeobjが走らない様に構成されており片方が欠けていたら絶対に動きません、しかし自動化はじゃんじゃん走らせたいのも事実。
そこでさらに別のツールが生まれました

ダミーファイルを作れ

そこでダミーファイルが出てきます、中身は空のpngファイルと簡単な定義だけしかないdatファイルです。
makeobjはdatがあればpngが空でもpak化してくれる仕様なのでこのダミーだけでも十分通用します、出来たダミーファイルに中身があるpngやdatを上書きしていけば最終的にアドオンが出来ます。

結局環境としてはどうなの

効率がかなり上がりました、息をするようにdatやpngを書き出したらすぐにテスト環境で更新されたものをテスト出来るなんて最高ですね。
細々とcp * /path/とかしている時間が相当無駄だったというのを改めて感じます、書く(描く)事とチェックに注力すれば問題ない時点でかなりの効率です

今後の課題

  • ja.tabのコピーも自動化したい
  • datのSDL

最後に

学会補足資料と言いつつ補足できているか微妙ですね、普段はこんなもので作ってるよっていう紹介までにはなればと思います。
このツール群は全てLinux上で(ソースを読んで依存するライブラリを入れれば)動きますのでお試しください