keimei main -> キハポスト@VRM -> VRM4スクリプト -> スクリプト〜車輌制御回天編

VRM4スクリプト(6)〜車輌制御回天編

この文章を書いた時点でのVRM4のバージョンは「4.0.0.5」です。これ以前のバージョンでは間違いなく動作しません。また、今後のバージョンアップによって仕様が変更される可能性もあります。

何が回天編なのか分かりませんが、Update4.0.0.5により、グローバル変数の受け渡しが出来ないという不具合が直り、さらに、新しい命令も追加されました。また、前回の車輌編で不完全だった所を改善してみました。ということで、制御スクリプト付の編成データを作ってみました。VRM3と同じく、列車の編成データはレイアウトとは別に『***.trn』というファイルに書出せますが、これには編成および車輌に関するスクリプトも一緒に保存されます。つまり、『***.trn』と共にスクリプトも配信できることになります。

今回作ったのは、253系6両編成のデータですが、速度制御と照明制御のスクリプトがプログラム済です。それには以下の機能が含まれています(例によって仕様書ですな)。

メソッド 解説
T_PantOn パンタグラフを開く
T_PantOff パンタグラフを閉じる→全照明オフ
T_LightOn 室内灯・方向幕点灯、パンタが閉じている場合は無視
T_LightOff 室内灯・方向幕消灯
T_HeadOn ヘッドライト・テールライト点灯(自動判別※)、パンタが閉じている場合は無視
T_HeadOff ヘッドライト・テールライト消灯
T_AllOn パンタグラフ開く・全照明点灯(PantOn、LightOn、HeadOnをcall)
T_KasokuFull フルスピード、加速時間3秒
T_KinkyuTeishi 緊急停止、減速時間0秒
T_Teishi 通常停止、減速時間3秒
T_Jokou 徐行、最高速度の30%(それ以下の場合無視)、減速時間3秒
T_Turn 方向転換、速度0の場合のみ可能、ヘッドテールライト制御付
T_Horn 警笛鳴らせ

※HOMEキーで方向転換した場合は、ヘッドライト・テールライトはそのままで、正しい方向とは異なってしまいます。転換後、T_HeadOnを実行すれば正しい方向に切り替わります。

●使い方

編成に対して各メソッドを callします。例えば、キーボードの「1」で全照明オン、「2」で全照明オフとしたい場合、レイアウトメニューのスクリプト編集(これをレイアウトスクリプトと言います)で、以下のようにプログラムします。

//レイアウト(例)
Var mID1
Var mID2

SetEventKey this M1 mID1 1
SetEventKey this M2 mID2 2

BeginFunc M1
  call "T251" T_AllOn
EndFunc

BeginFunc M2
  call "T251" T_PantOff
EndFunc

また、センサの上を通過したら、緊急停止し、ついでに方向転換する場合は、センサのスクリプトに以下を入力します。

//センサ(例)
Var snsID1
VarTrain SnsTrain

SetEventSensor S_Teishi snsID1

BeginFunc S_Teishi
  GetSenseTrain SnsTrain
  call SnsTrain T_KinkyuTeishi
  call SnsTrain T_Turn
EndFunc

これらは、一例ですので、センサの上を通過したらなぜか照明が消える、なんてこともできます。

応用:加減速時間は3秒ですが、これを変更したい場合、適当なスクリプトで『mov "Train変数" AccTime this xx』とします。「xx」は、お好みの数値をsetした変数です。

さて、ここで重要なのは編成名です。デフォルトでは『T251』という名前が付いていますが、これを変更することも出来ます。例えば、この編成を2つ以上レイアウトに配置したい場合、それぞれの編成名を『T251A』『T251B』‥‥‥などと区別できるように変更します。すると、『T251A』の照明を点けたい場合は、『call "T251A" T_AllOn』とすれば、その編成だけを制御できます。これが、(たぶん)オブジェクト指向というやつで、命令を出す場合、その相手を指定することにより、より汎用性のある制御が出来るという訳です(これについては、別編で解説します)。

●解説

車輌制御編では、制御対象となる列車の編成数によってスクリプトを変えないといけないので汎用性に欠けますね、という問題がありました。今回のスクリプトでは、レイアウトやセンサのスクリプトは車輌数を考慮する必要はありません。6両をまとめて制御できます。何をやったかというと、車両数の管理は編成スクリプトに任せたのです。つまり、上記の表にあるメソッドは、照明関係のものも含めて全て編成スクリプトなのです。編成スクリプトで命令を受け、そこから各車両のメソッドを呼び出すという二段構えになっています。編成エディタで車両数を変更した場合、スクリプトも変更しないといけませんが、それは編成データのスクリプトだけで済みます。編成エディタで車両数を変更する訳ですから、ついでに、スクリプトも変更するのは、そう手間ではないでしょう。レイアウトやセンサやスクリプトは変更しないでよいのです。

あと、今回追加したのは、パンタグラフが下がっている場合は照明をオンしない、というものがあります。編成スクリプトと車輌スクリプトでグローバル変数のやりとりをしていますが、実は、これが Update4.0.0.4では出来なかったのです。あと、「GetDirection」なんて命令が追加されたので、これで列車の進行方向が分かり、ヘッドライトとテールライトの区別を自動で判定することが出来るようになりました。先頭車がテールライトを点けてつっ走っていくってことは出来ませんが、まあ、やりたい人も珍しいと思いますので。

‥‥‥と、以上の文章を書いた後で、バージョンが「4.0.0.6」になりました。これにより、「CallCar」命令を使って車輌を一括制御できるようになりました。パンタグラフの状態を取得するため、車輌個別に呼び出す必要はありますが、スクリプトが少しは簡単になっています。また、HOMEキーによる方向転換にも対応しています。という訳で、253系編成データも新しいバージョンのものに差し替えました。

編成データ・ダウンロード:T253.lzh(T253.trn)2kB