BVE4向けATS.DLLの作成方法(進化 中?) (第四版)
内容はぬるめです。

このメモで作成したATS-ST互換DLLはこちらのページにあります。
ソースも公開しようと思ったのですが、ATS-SNオンリーの再設計版で許してください。

これだけでは作れないですが、一番自分が疑問に思っていた箇所なので、役に立てばいいと思います。
誤りの個所などがあればご指摘くださいませ。

・車両の制御
どうもFRAME毎にElapseが呼ばれるので、ここでATS_HANDLESの構造体に値を入れて返してやればいいらしい。
通常、ATS_HANDLESには現在自分が持っている状態を返せばいい。

 ・ハンドル制御
 SetPowerが主ハンドル制御で呼ばれるのでこれを自状態構造体に代入すればいい。
 なお、当然戸閉めの時は、動かないようにする工夫が必要です。

 ・ブレーキ制御
 SetBrakeがブレーキ制御で呼ばれるのでこれを自状態構造体に代入すればいい。(非常ブレーキはSetVegucleSpecで渡されるブレーキ段数+1です)(常用ブレーキはSetVegucleSpecのAtsNotchから上です。)
 ATSで非常になった場合は、ブレーキハンドル制御で非常にしてから、解除とかいう心遣いがほしいところです。

 ・リバーサ制御
 SetReverserで同上

 ・定速制御
 何らかの制御で意図的に操作したいときに指定すればいいと思います。

なお、Elapseが呼ばれるときの引数(ATS_VEHICLESTATE)には非常に有益な情報が入っており、時限動作のATSを扱う場合には必須と いえるでしょう。このデータを使えばEBなどは簡単に作れるのではないでしょうか?

・ATSの制御
地上子を通過するとSetBeaconDataがコールされます。この引数のATS_BEACONDATAには次のデータが入っています。
	int Type;	// Type of Beacon
int Signal; // Signal of Connected Section
float Distance; // Distance to Connected Section (m)
int Optional; // Optional Data
これは路線データの
Track.Beacon typeBeacon; structureIndex; section; n
typeBeacon: 地上子種別
structureIndex: ストラクチャ インデックス
section: 対となる閉そく
n: ATS プラグインに送る任意の整数
に依存します。

Type 地上子種別
Signal 対になる閉塞の信号(0=赤...etc)
Distance 次の閉塞開始までの距離?
Optional 路線データのn

実際の使い方は、他の方の路線データを見て参考にすべきでしょう。
ヒントを書いておくと(というか、答え)、TypeがSロングかつSignal==0ならATS-Sを鳴らし、TypeがSN直下などの場合は非常ブレー キにします。

・音の制御
列車のsound.cfgにある[Ats]に依存します。
ここのセクションの
0 = xxx.wav
1 = xxx.wav
が、Elapse関数のポインタ引数soundの配列と一緒です。
この配列に対してATS_SOUND_STOPやらを代入すれば連動します。
なお、初期値はSTOPにしておきます。

なお、配列の数自体はどうなってるかわかりません。対応する列車のsound.cfgにあわせればいいんじゃないでしょか。
一般的?には
0 = ATSの確認前の音(じりりりりりり)
1 = ATS確認後の音(かんこんかんこん)
2 = ATS-Pとかの音(か〜〜〜ん)
のようです。
・パネルへの渡し
列車のpanel2.cfgにある[Pilotlamp]セクションのSubjectがats1から始まるものと連動します。
1でON、0でOFFという具合です。(多分)
mackoy氏の113系は
0 = 白色灯
1 = 赤色灯
2 = P電源
3 = パターン接近
4 = ブレーキ開放
5 = ブレーキ作動
6 = ATS-P
7 = 故障
のようです。
・ドア閉め/ドア開け
このときの音声も制御できます。DoorOpen/DoorClose関数を活用しましょう。

こんなところで作れるんじゃないでしょうか?
あと、VCとか使えれば…。(この辺の説明は追加するかも)
GCCで作成する方法も記載したいですね。

この先は気が向けば書いていくかもしれません。
追記:
mackoy氏の公式ページからサンプルのats1.zipが消えてしまいました。
正直、アレがないと作れないと思うのですが、残念なことです。(幸い私は前に落としていたので助かってますが)
しかし、Cベタベタで自作中ですが、ats1.zipを見ているとC++のかけない自分が情けなくなってくる…。(ある程度、公式ページの保安装置の項を 自分でまとめてから見ないと、はっきり言ってなにやってんのかわかりません…)

もどる