【BVE5】他列車と信号を連動させる

カウンター カウンター

皆さんはBveをプレイしていて、「信号機と他列車が連動している」シーンを見たことはありますか?

実装路線の例ですが、KKH-Project様制作「JR神戸・京都・湖西線」、coffee&sleep様制作「近鉄奈良線」「近鉄大阪線」

架空路線では、nf4様制作「新浜線(架空)」、Mirai.S様制作「城東急行電鉄」などでしょうか。

ピンと来ない方は下の動画をご覧ください。

 ※お借りしたデータは動画概要欄と当記事の一番下に記載しています

一応ググってみると「PreTrain併用」と「他列車構文にて実装」の2つが出てくると思います。

今回は「PreTrain併用」で連動する方法をサンプルコード(動画撮影時に使用したもの)も含めて自分なりに解説します。(他列車実装から解説するため長くなりますが、お付き合いください)


手順1.他列車を実装する

まずは他列車を実装します。

他列車実装には別に他列車ファイルを作成する必要があります(他列車ファイルの作成方法は省略します。公式のファイル書式を参考に作成してください。公式のファイル書式はこちらから)。

他列車ファイルが完成したら、早速mapファイルに読み込ませます。

構文

Train.Add(trainKey, filePath, trackKey, direction);

Train[trainKe<y].Load(filePath, trackKey, direction);

どちらでも大丈夫です。map 2.02で製作するなら下のTrain.Loadの方が良いかもしれません。

 

設定する値

・trainKey:列車名(任意の文字列を指定できます。Repeaterと違い重複は不可です。)

・filePath:mapファイルから他列車ファイルへの相対パス(相対パスに関する記述は省略します。NT/fiv様が便利なツールを公開しているので、こちらも利用してみてください。)

・trackKey:他列車が走行する軌道を指定します。''、記述無し、0を指定すると自軌道になります。

・direction:自列車から見た進行方向を指定します(-1:並走、1:対向)。

 

サンプルコード

Train['205-0_naha'].Load('Train_object\formation\JRE_205-0_nanbu.txt','train',1);

これで他列車が読み込まれます。ただし距離や動作を設定していないため、を設定していないため、0m地点に動かない状態で読み込まれます。

次は読み込んだ他列車を動かします。bveは自分が運転する列車が基準になるため、対向列車は比較的簡単ですが、並走列車は難しいです。

そこで、以下のような方法をとります。

①出発地点を設定(見えないところから走ってくる方が良いです。地面の下から出てくるとかもあります。)

②停止地点を設定(これは自列車の画面外に消えれば大丈夫なので、無くてもokです。自列車が先行列車に追いつく場合や、先行列車の後ろをついて行くような場合は設定してください。今回は先行列車が途中駅で折り返すため停止位置を設定しています。)

③走行速度、加速度を設定(構文上必須です。停止位置を設定する場合は減速度も必要です。)

④動かすタイミングを設定(構文上2種類を設定できます。追い越しの場合は自列車が停止位置範囲に来て、決めた時間になったら動作有効というのが安定すると思います。)

構文

1. [距離];

Train[trainKey].Stop(decelerate, stopTime, accelerate, speed);

 他列車を動かす基本構文です。

 

設定する値

・decelerate:減速度(単位:km/h/s)(9999など、極端な値にすると一瞬でやってきます)

・stopTime:停車時間(単位:秒)(駅や詰まりの再現で使えます。停車したままで良いなら設定する必要はありません)

・accelerate:加速度(単位:km/h/s)(減速度同様、極端な値にすると一瞬で消え去ります)

・speed:走行速度(単位:km/h)です。使用する他列車に合わせて設定してください。

 

2. [距離];

Train[trainKey].Enable(second);

Train[trainKey].Enable(time);

 

 設定した距離を自列車が通過し、かつ設定された時刻(timeを設定する場合。secondを設定する場合は00:00:00からの経過時間)になったら他列車の動作を有効にします。

 

サンプルコード

16750;

    Train['205-0_naha'].Stop(,,2.5,100);

18755;

    Train['205-0_naha'].Enable('5:33:15');

23675;

    Train['205-0_naha'].Stop(2.5,,,);
値を設定していない箇所がTrain.Stopにありますが、これは省略することで0を代入すると同時に、無駄に0を書かないようにしています。

手順2.閉そくを実装する

次は閉そくを実装します。PreTrainを使用する場合はこれが必要です。sectionとsignal構文が必要になります。どちらの構文でも実装には信号現示リストが必要になるため、こちら(公式書式)を参考に作成してください。

 構文

Section.Begin(signal0, signal1, ... , signalN)

閉そくを実装する構文です。信号現示リストに基づいて、現示(信号インデックス)を入力してください。

地上信号機を使用する場合、信号インデックスは0(停止 R)、1(警戒 YY)、2(注意 Y)、3(減速 YG)、4(進行 G)になると思います。

保安装置によっては高速進行(GG)と抑速(YG点滅)もあります。

 

Signal[signalAspectKey].Put(section, trackKey, x, y)

地上信号機を設置する構文です。Signal.PutでStrcture.PutやRepeater.Putのような値設定もできますが、あまり使うことはないのでこちらを紹介します。

 

設定する値

・signalAspectKey:信号現示名(信号現示リストで定義した現示名)

・section:関連付ける閉そくの相対インデックス(場内、出発、閉そく信号機であれば0で大丈夫です。中継信号機は1を設定しないと自列車より後ろの信号を現示してしまいます。)

・x:軌道からのx座標(単位:m)

・y:軌道からのy座標(単位:m)

Bveでは自列車がz方向に進んでいきます(距離=zという感じ。視点切り替えを行い、内部計算値を表示させて運転すると分かります)。xは自列車から見て左右、yは自列車から見て上下と考えて設定してください。

 

サンプルコード

18850;

    Section.Begin(0,2,4);
    Signal['sig4YG'].Put(0,,2,6.5);
必ず【Section.Begin】→【Signal.Put】の順に、セットで記述してください。
※中継信号機を設置する場合、Section.Beginは必要ありません。

手順3.先行列車構文を記述する

お待たせいたしました。ここから先行列車構文を使用し、実際に信号現示を変えていきます。

手順は以下の通りです。

①:先ほどSectionを設置した距離までワープします。

②:走ってくる他列車を待ち、先頭車が半分くらい信号機の位置を通過した時刻をPreTrainの値として設定します。この際、中継信号機は無視してください(中継する信号機の現示と合わせる必要があるためです)。

③:①と②を繰り返します。

 

構文

[距離];

 

    PreTrain.Pass(time);
    PreTrain.Pass(second);
先行列車が現在の距離を通過する時刻(timeを設定する場合。secondを設定する場合は00:00:00からの経過時間)を設定します。
 

サンプルコード

18850;

    PreTrain.Pass('5:34:51');
この文を各信号機の距離に置いて行ってください。

以上で設定は完了です。これで冒頭の動画のように、他列車に連動して信号機を変えることができるようになりました。

ATS路線ならこれで問題ありませんが、ATC路線で実装する場合【恐らく】Signal.Put→Beacon.Putになると思います。ATC路線作ったことが無いので分かりません(;´・ω・)


おまけ.他列車構文も使って、追い越し挙動をリアルにしてみる

ここからはおまけです。他列車と信号を連動させるだけなら、他列車構文を紹介する必要は無いのです。では何故紹介したのか?というとおまけに関わるからです。まずは下の動画をご覧ください。

※お借りしたデータは動画概要欄と当記事の一番下に記載しています

※背景の山の再現が雑なのは気にしないでください

 

注目ポイントは以下の3つです。

・自列車入線時、出発信号はどちらも停止現示である

・自列車停止後、通過線の出発信号の現示が進行現示に変わる

・追い越し列車通過後、通過線の出発信号の現示が停止に変わる

 

先ほど紹介した先行列車構文では実装できません(やり方によっては可能かもしれないです。ただ他列車を使う方が圧倒的に簡単だと思います)。他者様制作のコードを使用しているため、考え方だけ載せておきます。

考え方(neya様制作「地下試験線V3 C-ATSパッチ」のホームドア表示機、池多摩チャンネル様制作「地下試験線V3 他軌道信号現示動作パッチ」を参考にしています。)

 

何をやっているかというと、「どこかから信号機が見えない速度で走ってきて現示を切り替えて」います。

ホームドア表示機はストラクチャの都合上重ねていても問題なかったのですが、今回は重ねるわけにいかないので、各信号機が0mから走ってきて無限のかなたまで走り去っていくような構文にする必要があります。

 

必要な構文を大まかに書いておきます

①信号機だけstrctureセクションで定義した他列車ファイルを作成し読み込み。必要なものは2つ。

・停止信号の他列車ファイル

・進行信号の他列車ファイル

※通過列車を制限信号で通過させる場合や、途中で現示を上げる必要がある場合は追加してください。

 

②自列車の待避駅停止位置で信号機を有効にする必要があります。

・停止信号のEnable構文で指定するのは、自列車の待避駅到着時刻

・進行信号のEnable構文で指定するのは、PreTrain構文で指定した出発信号を切り替える時刻

 

③動かす文は2つ必要です。

・ロード時に指定の場所に置き、有効になったら指定の場所から走り去る(停止時間以外を設定)

・上の奴が走り去った後、代わりにやってきて置きっぱなしにする信号機(速度以外を設定)

 

④信号機用の軌道を用意してください(track構文でいいです)。


以上で設定は完了です。これで動画のようになると思います。

質問等がありましたら、twitterに連絡してください。答えられる範囲で答えます。

 

長い解説をご覧いただきありがとうございました。皆様の路線製作の参考になれば幸いです。


使用路線データは身内向けに当方が制作しているものです。一般公開の予定はありません。

 

 お借りしたデータ(各動画の概要欄と同じ記述です)

Vehicle

・E129系(Mc_1323様)

 

Strucutres

・架線柱:neya様

・線路、高架橋の壁:cocoa様(Saikyo_Common)

・線路(トンネル内):ask様(路線制作基本詰め合わせセット)

・制限速度標識:おみさん様

・信号機を支えるやつ、制限速度解除目安(代用)、信号機用番線表示(代用):樽モト様(Nagoya_Common)

・架線、ホーム端の柵:とまり様(Bve路線製作キット)

・ホーム:内房線製作チーム様

・山(grasswall)、トンネル、トンネル内架線柱:NT/fiv様(かんたんのゆめ GeneralStr)

・停止位置標識(近鉄):久宝寺様(当方にて改造したデータも使用しています)

・信号機:FCS鉄道員様、いーらいん様(色灯式信号)

 

TrainObject

・205系南武線:おみさん様

 

Sound3D

・通過音:摂津ライナー様(対向列車用音声)

 

自列車待避時の通過線の信号現示変化は、neya様制作「地下試験線V3 C-ATSパッチ」のホームドア表示機、池多摩チャンネル様制作「地下試験線V3 他軌道信号現示動作パッチ」を参考にしています。

 

各作者様、素晴らしいデータをありがとうございます