Fairy's Studio制作ブログ

精霊とSimutransアドオン置き場

Simutrans Advent Calendar 2020 Day07 選択~ぼたん~

どうもこんにちは!
参加したいけどネタがないって言ってたら、そういえば、みんなメニューバーに関してほとんど触れないよねっておもったかみやんです。
メニューバーって、結構めんどくさい仕様で、改造しようと思ってもめんどくさいなー……ってやつです。
なので、日本語化wikiのリスト

https://japanese.simutrans.com/index.php?%C0%DF%C4%EA%A5%D5%A5%A1%A5%A4%A5%EB%2Fmenuconf.tab


を見ながら、今日は、 

 

ux.getuploader.com

ux.getuploader.com


を作る時に、他のサイトとかでも書いてなかったことを書いていこうと思います。

まず大前提
当たり前のことですが、simutransのdatやtabはWindowsのメモ帳ではいじることができません。いや、正確にはできるんですけどすごくめんどくさいので、なにかしらいれておきましょう。私は「TeraPad」を使ってます。

次に、バックアップを取りましょう。バックアップを取らないと、万が一に失敗した場合に戻せなくなっちゃうので気を付けましょう。


どういう設計にしたいかをきめよう
これ、メニューバーにおいてはかなり重要です。本当に。
後でも書きますが、「menuconf.tab」、なんと、項目の番号をすべて順番に書いていかないと、メニューバーの表示がそこで止まってしまう仕様になっているようで、その仕様のせいで私も何回心を折られかけたかわからないくらい苦労しました……というわけで、まずはここを決めましょう。それ以外は後回しでいいです。


そもそも:ここでの設計って何を指しているんだい?
使いたい項目をどう配置するかです。
上のアドオンのSSを見てみましょう。

f:id:I_doing_drive_with_fairy:20201125012837p:plain

ほい。
ここでは、「鉄道ツール」が


線路
信号
架線

の順番に並んでいて、それ以外の項目もそれに準ずる並び方をしているのがわかりますね?また、メインのツールバーの中に、122から実装されたスクリプトツールや、本来アイコンがなくて出現していない、セーブ&ロードボタンなどの多数のボタンがついかされていますね……
つまり、こういう感じの配置を最初に決めて作ったほうが楽だよってことです。
これを決めたら、初めて「menuconf.tab」をいじる段階に行けるわけです。

日本語化wikiを見よう

ここで、日本語化wikiの出番です。「menuconf.tab」のルールは、手っ取り早い話、基本的には日本語化wikiのリストが一番しっかりしてるので、そこを開きながら作業することが(完全に記憶してるなら別ですが)絶対になると思います。
なので、そこを見ながら作業しましょう。
ボタンを見よう
Net Simutransでない限りは、どこからからボタンの素材を導入したかわかっている状態でやっているわけですから、「menuconf.tab」をいじる前に、ボタンのpakを見てみることをお勧めします。ボタンのpakは、

  • 「menu.BarTools.pak」
  • 「menu.DialogeTools.pak」
  • 「menu.GeneralTools.pak」
  • 「menu.SimpleTools.pak」

のことです。
やりたいこと例4)ボタンをつくろう、でおいおい解説しますが、このpakには、ボタンのアイコンが番号で設定されていて、「menuconf.tab」は、そこに記述されたものを参照にpakと照らし合わせてボタンを表示していますので、ないものを指定したりしないようにするためにここをちゃんと見ておきましょう。pak128やpak64などのソースもネット上にあがってますが、網羅したらキリがないのでここではリンクを張りません。ご了承ください。
一応、わかっていると思いますが、menuconfとmenu属性pak4種類は絶対ペアで運用してください。当たり前ですが、作者の匙加減次第でボタンに登録されているアイコンは変わっています。これは、誰かのアドオンを改造した関係で互換性を持たせてるとかそういうのがない限りは基本的に絶対です。

ここからは、やりたいこと例にそって解説します。

やりたいこと例1)新しい機能の追加

v121でプラットホームを反転させるツールや、間違えて別の駅として建設してしまった駅を合体させるツール、v122でスクリプトツールなどが追加されたりと、バージョンを重ねるごとにsimutransにも様々な機能が追加されて行ってます。というわけで、それをやりましょう。
①追加したいtoolの決定。
まず、日本語化wikiを見てみましょう。様々な機能が羅列されていますね。
今回は、更新が止まってしまっていて機能追加がなされてない、「128japam」のものをお手本にやっていきたいと思います。
で、ここから、「menuconf,tab」に入ってないものを探しましょう。
ここでは、

general_tool[40] TOOL_ROTATE_BUILDING プラットホーム等を反転させるツール


を例にやっていきましょう。
②toolの定義
あとから見てもわかりやすくするため、general_toolの項目を探します。
[40]より小さくて一番近い数字の一行下のところに、上にある物を参考にしながら

general_tool[40]=,,,

と書いてみましょう。これで、menuconf上で、general_tool[40]が定義されます。
ですが、これで終わりではありません。toolを定義したら、次は、それを使うためのリモコンを用意しなければ使えないのです。

f:id:I_doing_drive_with_fairy:20201204180343p:plain
↑こんな感じで

③ショートカットキーとアイコンを付けよう
日本語化wikiを見てみましょう。

general_tool[i],アイコン,カーソル,音,操作キー

と書いてあるはずです。
4つの","の間に、数字や半角英語を記述することで、アイコン、カーソル、使った時になる音、ショートカットキーを設定できるということが記されています。このうち、最低でもショートカットキーを設定しないと、さっき定義したtoolを使うことはできません。
また、アイコンを設定しないと、メニューバーに出すことはできません。なので、それらを設定しましょう。あとは最悪いらないですが、それらもついでに解説しておきましょう。
・アイコン
 アイコンは、1個目のコンマと2個目のコンマの間(Aの部分)に数値を書きます。
 「general_tool」でアイコンを設定した時は、
 「menu.GeneralTools.pak」に設定されているものの番号を参照し、
 記述した数字と同じImage[X]のものをアイコンとして使用します。
 (例:general_tool[i],X,Y,Z,と記述したときは、
  「menu.GeneralTools.pak」でImage[X]=と記述したものが設定されます)
 もし、設定されていないものをあやまって指定してしまった場合は、
 Simutrans上ではその項目が飛ばされて表示されて、
 その機能が使えなくなるので注意しましょう。
 なお、ここで設定しなくても、tool_barでも設定できます。
 もし、ここで何も設定したくないときは何も書かないでください。それでokです。
 (例:general_tool[i],,Y,Z,)
・カーソル
 カーソルも基本的にアイコンと設定方法は同じです。
 2個目と3個目のコンマの間に数値を書きます。
 カーソルの場合は「cursor.GeneralTools.pak」を参照します。
 まぁ、なくてもカーソルは色の違いで見えるのでスルーで大丈夫です。
・音
 3個目と4個目のコンマの間に数値を書きます。
 音は、「sound/soundtab」を参照します。なくても問題ありません。
・ショートカットキー
 キー一つでそこに設定された機能を呼び出して使えます。
 4個目(と場合によっては5個目)のコンマの間に書きます。
 重複してもエラーは出ませんが、後がめんどくさいので重複しないようにしようね。
 開いてるキーを適当に設定すれば、そこを押して使うことができるようになります。
 様々なコマンド?も用意されてますが、応用編なのでここでは省略します。
使うこと自体はショートカットキーを設定した時点でできるので、メニューバーに出す作業は例2)に続きます。

f:id:I_doing_drive_with_fairy:20201204182035p:plain

↑スケジュール移動ツールがそれっぽい絵をしてるので、とりあえずそれと同じ番号を書いておきましょう。
ちなみに、アイコン番号は使っている「menu.GeneralTools.pak」ごとに違うはずなので、各自でgeneral_tool[31]を参照して、そこに書いてある番号を書き写してください。

f:id:I_doing_drive_with_fairy:20201204182508p:plain

↑128japanにおけるスケジュール移動ツールのアイコンは「14」のようである。カーソルはおこのみで……ちなみに、カーソル「11」は

f:id:I_doing_drive_with_fairy:20201204182827p:plain

↑これ。


やりたいこと例2
)ツールバーの編集(追加)
例1)で設定したtoolなどを追加していきましょう。
①どこに追加するかを決めて配置しよう
前にも述べた通り、番号を順番に並べずに、すっ飛ばしたりあべこべに並べることをしてしまうと、Simutrans上で正しく表示されず、あべこべになってる部分以降の全て項目がでなくなってしまいます。
ですので、まずはメニューのどこに挿入するかをまずは決めましょう。
ここでは、例1)から続いて「general_tool[40]」を例に追加していきましょう。
スケジュール移動ツールや公共化ツールなどと同じ、特殊建築物のタブに追加してみます。
「# specialtools」というところがそこにあたりますから、そこをさがしましょう。

f:id:I_doing_drive_with_fairy:20201204181001p:plain

↑ここ↑
そこには、

toolbar[x][y]=○○_tool,,,,

とかいてあるはずです。追加するだけなら、前述のルールから一番最後に追加するのが楽ですし、変にミスをしたりしませんから、yの部分のうち一番でかい番号が記されているところを探しましょう。そこの一行下に追記します。

f:id:I_doing_drive_with_fairy:20201204181150p:plain

↑# specialtoolsが設定されている「toolbar[8]」の中で一番大きいのは「[14]」なので、その下に追記する。

ツールバーに定義しよう
toolbar上でも、例1)③と同じ要領でアイコンやショートカットキーを設定できます。
日本語化wikiを見てみましょう。

toolbar[x][y]=ツール,アイコン,操作キー,パラメーター,ヘルプファイル

と書いてありますね。
toolbarの場合は、,(カンマ)ではなく=(イコール)でつなぐってこと以外は基本一緒です。
先ほど設定したgeneral_tool[40]を記述して代入しましょう。

f:id:I_doing_drive_with_fairy:20201204183852p:plain
↑「[31]」をコピーして、「[40]」に書き換えるのも手だ。既に設定されているテンプレートは、最強のお手本である。個人用であればコピペでも何の問題もない。お手本プレイでは、例1)③でアイコンやそのほかを設定しているので、ここでは何も考えず「[40]」を代入してしまおう。

なお、例1)③でアイコンやショートカットキーを設定しなかった場合、ここでも別途指定できます。その場合は、「menu.BarTools.pak」から参照されるので、それのdatを見ながら設定しましょう。なお、例1)③でもここでもアイコンを設定しなかった場合は、simutrans上では飛ばされて表示されてしまい、そのツールを使えないので気を付けましょう。
詳しいやり方や、例で出しているホーム反転ツールのアイコンは例1)③で書いたので省略します。
ヘルプファイルに関する説明は例3)①でするので、これも省略します。

③ルールに沿って番号をふりなおそう
「toolbar」上に番号を振りなおします。

toolbar[x][y]=ツール,アイコン,操作キー,パラメーター,ヘルプファイル

となっているyの部分を、0から順番に、欠番や順不同が起こらないように設定しましょう。ここをしっかり行っておかないと、simutrans上でしっかり表示されないので気を付けましょう。例2①で、yの部分が一番デカい項目の一行下に追記しましたから、y+1した数値を書いておきましょう。

f:id:I_doing_drive_with_fairy:20201204185915p:plain
↑例2)②の図のままではうまく読み込んでもらえず、Simutrans上でも出てこない。順番に番号を振分し直そう。

④simutransで確認しよう
menuconfを上書き保存するか、書き換えたものに置き換えたら、simutrans上でしっかり動くか確認しましょう。

f:id:I_doing_drive_with_fairy:20201204190855p:plain

↑正常に動いていればこんな感じになってホーム反転ツールは設定完了です。お疲れ様でした。
⚠もし表示されてなかったら
アイコン設定か例2)③がうまくいってない可能性があります。慌てず騒がず落ち着いて見直しましょう。

やりたいこと例3
)ツールバーの編集(整理)
たぶん、人によっては例2)以上に需要がありそうな項目です。
増えすぎた景観線路やホームが1ページで一気に表示されるのは作業する上ではきついですよね?
整理自体は、ルールをしっかり守れば例2)の応用なので、例2)をマスターすれば楽勝です。ただ、順番通りに番号を振りなおす作業が地味につらいので、そこは覚悟して取り掛かってください。
①どこに追加するかを決めて配置しよう
前にも述べた通り、番号を順番に並べずに、すっ飛ばしたりあべこべに並べることをしてしまうと、Simutrans上で正しく表示されず、あべこべになってる部分以降の全て項目がでなくなってしまいます。
ですので、まずはメニューのどこに整理するかをまずは決めましょう。
要は、例2)①と一緒です。ですが、全てのメニューを整理するわけですから、ここの重要性は例2より跳ね上がります。しっかりとプランを練ってから取り掛かりましょう。
⚠ルールをもう一度確認⚠
やる前に、ルールをもう一度確認しましょう。
例2)②や日本語化wikiの表をもう一度見直しましょう。

toolbar[x][y]=ツール,アイコン,操作キー,パラメーター,ヘルプファイル

例2)②では、機能の追加に重点を置いたので触れませんでしたが、=と,の間の部分(ツールってとこね)には様々な機能を記述できます。

  • general_tool
  • simple_tool
  • dialog_tool
  • toolbar
  • ways(線路),bridges(橋),tunnels(隧道),signs(信号),wayobj(架線),buildings(駅舎)
    等の建築物

などです。日本語化wikiの方が細かいうえにわかりやすいのでこれらの詳しい説明は省きますが、とりあえず、これらをわかりやすく割り振っていく作業だと思ってください。
toolbarの中に書き込むなら、操作キーの項目は基本的に要らないですが、ツールとアイコン以外にも書かないとダメなものがあります。
ヘルプファイルについてです。toolbarの中にtoolbarを入れるときはヘルプファイルを入れないとなぜか表示されません。理由はわかりませんが、そういう仕様だと割り切って、toolbarを作る時はなんでもいいんでテキトーにヘルプファイルを入れておきましょう。
②toolbarの中にtoolbarを入れよう
シムトランスの画面上にあるバーも、toolbarの一種で、

toolbar=[0][y],,,,

にあたります。
なので、何かをするときは必ずtoolbarの中にtoolbarを入れる必要があります。
で、先述の通り、toolbarの中にtoolbarを入れるときはヘルプファイルの指定が必要です。そこに気を付けながら、①で練ったプラン通りに仮置きをしていきましょう。
なお、toolbar上のアイコンは例2)②でも述べましたが、「menu.BarTools.pak」から参照されます。
ちなみに、この作業はタブわけです。toolそのものは次入れます。
③仮置きしたtoolbarの中にtoolを入れていこう。
タブ分けを②で行ったうえで、toolを入れていきます。ここで注意してほしいのは、あべこべになってる部分以降の全て項目がでなくなってしまうことです。ここを意識してやらないと、せっかくtoolを入れたのにやり直しになってしまいます、気を付けましょう。
(例えば、鉄道ツールのtoolbar、道路ツールのtoolbar……と定義したのに、道路の中身から定義してしまった場合。これをやらかすとやり直しになってしまいます。プランをしっかりねって順番を守りましょう。)
④ルールに沿って番号をふりなおそう

例3)③で仮置きした「ツール」の番号を振りなおします。

toolbar[x][y]=ツール,アイコン,操作キー,パラメーター,ヘルプファイル

となっているxの部分もyの部分も、0から順番に、欠番や順不同が起こらないように設定しましょう。ここをしっかり行っておかないと、simutrans上でしっかり表示されないので気を付けましょう。例2)③よりもかなりハードですが、頑張ってください。
⑤simutransで確認しよう
menuconfを上書き保存するか、書き換えたものに置き換えたら、simutrans上でしっかり動くか確認しましょう。ここで正常に動いていれば、設定完了です。お疲れ様でした。
⚠もしプラン通りに表示されてなかったら
アイコン設定か例3)③、例3)④がうまくいってない可能性があります。慌てず騒がず落ち着いて見直しましょう。ぶっちゃけ、これ一発でうまくいくことはそうそうないんで、あきらめずがんばってください……

やりたいこと例4)アイコンを作ろう
ここまで読んできた人はこう思うだろう……
なんでこれ最初にしなかったの?って
筆者的には、アイコンの絵の差し替えや追加はおまけだと思ってる節が何ミリかあるからですね……
とはいえ、2や3と比べるとクッソ簡単です。
⚠まず作る物の確認
アイコンは、2と3で引用してたやつです。

  • 「menu.BarTools.pak」
  • 「menu.DialogeTools.pak」
  • 「menu.GeneralTools.pak」
  • 「menu.SimpleTools.pak」

の4つのpakをつくります。
menuconfは、この4つのpakに登録されているアイコンを番号に沿って参照して表示しています。
なので、もしmenuconfをいじるならここから始めたほうがいいかもしれないですが、画像差し替え自体はそこまでキツイ作業じゃないので後回しでも問題ないです。
①アイコンを描こう
アイコンは、普通のアドオンのアイコンと同じく、アイコンそのものは32×32の規格で作られています。
なので、普通にアドオンを作る感覚でアイコンを描いてしまって、おkです。
アドオン1個分の領域はお好みでいいですが、基本的にどの製作者も64×64で作ってるみたいですね。
②DATを書こう
アイコンだって、メニュー属性のpakですから、当然datを描く必要があります。
ここのdatで、さっきmenuconfで参照させていた数値を登録していくわけです。
日本語化wikiにも書いてあったと思いますが、一応書き方を……


Obj=menu #メニュー属性なのでメニューってかきましょう
name=GeneralTools #どのツールかを表します、前述の4種類は作らないと参照できません
copyright=KPI #おもてに出ないので、最悪なくてもいいです
Image[0]=> ○○.0.1 #いつもアドオンに書いてる通りに、拡大を無効にして登録しましょう。
Image[1]=> ○○.0.2 #Image[X]のXをボタンの番号として登録してます。
Image[2]=> ○○.0.3 #この場合、General_toolで2を指定するとこれを使います。
……


って感じです。
置き換える場合以外、例えば、既存のものに新しいアイコンを追加したい(上の例であれば、ホーム反転ツールのボタンを使いまわしたのでそれを別のやつを新しく作って変えたいよねってなった)時は、既存のものを絶対に編集しないことを強くお勧めします。
というのも、番号で管理されている以上、それを崩したら最後復元するのは超大変です。ですので、新規で書き足す場合は、末尾に書き足しましょう。
後当たり前ですが、これも[0]から末尾まで通し番号じゃないとまずいと思います……
まぁ、管理する上でもそっちの方が圧倒的に楽なので、絶対そうしたほうがいいかもですけど……
③makeobjに通そう
最後は、いつもアドオンを作る要領でmakeobjにpngとdatを通してpakを生成すれば終わりです。お疲れ様でした。

小技
①どうしても番号をすっ飛ばしたい

アイコンの番号をすっ飛ばしたいとき、ありますよね?
設計に余裕を持たせたかったり、キリのいい番号で管理したいとき。
そういう時は、こうしましょう。

Image[6]=> 〇〇.4.7
Image[7]=> -
Image[8]=> -
……

はい、画像を指定するところに-を入れておきます。これでエラーが出てストップしたりすることなく、アイコンをその番号に登録しないでいけちゃいます。

実は、tool_barの番号もすっ飛ばすこと自体はできます。どう書くかというと……

toolbar[x][y]=-,アイコン,操作キー,パラメーター,ヘルプファイル

です。ツールに当たる部分を"-"にすれば、アイコン一個分の空き地を作って番号をすっとばせます。メインのメニューバーってちょくちょく区切りがありますよね?これってこうやって作られてたんですね……
②一つのtoolに複数機能が内包されているものにショートカットキーだけを設定する方法
実は、

toolbar[x][y]=ツール,アイコン,操作キー,パラメーター,ヘルプファイル

の、「アイコン」の部分をすっ飛ばすと、toolbar上に登場させずにショートカットキーだけを登録することができます。これを使うのは、パラメーター欄に色々入力しなければいけないtoolなどで、実際にこの方法は128japanなどで採用されています。

f:id:I_doing_drive_with_fairy:20201126001714p:plain

これは、OTRPで起動したドノーマルの128japanの画面……
一見すると何の変哲もありませんが、menuconf視点でいうと、実は、toolbarにでてないtoolが何個かあります!もったいない
大本の○○_toolの部分で設定しちゃえばいいじゃんと思うかもしれませんが、パラメータで判別を行なう、複数の機能を持つ○○_toolに直接ショートカットキーを付与することはできないんです。
理由は、toolとしての枠は一個なので、登録できるショートカットキーも当然一個ですが、そのショートカットキー1個で機能を完遂するのは不可能だからです。なんで不可能なのか……それは、複数の機能を持つtoolの一例を見ればわかります。
例えば

simple_tool[7] WKZ_CHANGE_GAME_SPEED

これは、ゲームのスピードを上げ下げするtoolです。上げる操作も下げる操作もこのtoolに内包されているので、相反するtoolを1つのキーで設定できるわけないですよね?このtoolも、アイコンがないだけでこの画面上にあるはずなんです(ないけど)
さらに、これとかはもっとすごい

general_tool[34] WKZ_SLICED_AND_UNDERGROUND_VIEW

これは、地下モードやハイカット表示モードに関連したtoolです。
表示設定から使っている、地下モードへの移行、ハイカット表示モードへの移行、ハイカット表示時の階層の上げ下げなどがすべてこのtoolに内包されています。
なので、ショートカットキー1個では絶対になしえないです。
イカット表示モードへの移行ボタンしかありませんが、他も当然しっかり登録されています。アイコンがないのでみえませんけど。
とはいえ、トラブルなどを防止するためにも、アイコンがないやつにアイコンを登録してあげたい!……とかでなければ、基本的にいじらないで上げたほうが絶対いいです。
整理するときの移動もカット&ペーストにしましょう。
③アイコン画像だけ出す方法
実は、何の機能を割り振らずにアイコン画像だけ出すこともできます。

toolbar[x][y]=ツール,アイコン,操作キー,パラメーター,ヘルプファイル

の、「アイコン」の部分以外を小技②とは逆に何も書かないで挿入すると、何の機能も割り振ってないアイコン画像だけを登場させることができます。
この方法は、256Exで採用されています。

f:id:I_doing_drive_with_fairy:20201126230141p:plain

これね。あと、

f:id:I_doing_drive_with_fairy:20201126230603p:plain

256Exはまだアドオンが少ないのであまり効果を発揮できてませんが、こういうインデックスなどでアイコン画像だけだすという手が地味に優秀だったりします。

以上で、「メニューバーを作ってみよう!」を終了します。
正直、こういうの久々だったうえに、アドカレ初参加な上、機能の説明がちゃんとできてるかかなり怪しいと思いますが、こんなちゃらんぽらんな駄文でも参考になれば幸いと思います、じゃ。
(ちなみに、一部で頒布したうぃっふぇシリーズTypeR1巻並みに文字数書いてます……個人製作ラノベに並ぶってやべぇ)

引用/参考:simutrans日本語化wiki(2020年11月12月現在)、ぼくのかんがえたさいきょうのメニューアイコン

この記事は、Simutrans Advent Calendar7日目参加記事です。

adventar.org