さて、USO800鉄道氏から「西濃鉄道ホッキホキ(仮称)」の修正変更依頼がありまして、その中の一部がちょっと無理そうだなぁと思う部分がありました。そこで、現状の「西濃鉄道ホッキホキ(仮称)」のスクリプトを再確認していたのですが、非常におかしな部分が見つかりました。
いや、外見的にはちゃんと想定通り動いているんです。でも、スクリプトを見るとそのように動くはずがないのに想定通り動いているんです。だから、おかしいんです(笑)。
どういうことかと言うと、機関車は連結・解放を繰り返し、名称が変わっていきます。しかし、連結・解放を繰り返す前の状態をレイアウトスクリプトのグローバル変数に収納してあったのですが、連結・解放を繰り返した後にその変数とその時点の機関車のオブジェクトを比較して条件分岐させているにもかかわらず、当初の想定通り(この想定がおかしいんですが)同じ値になって動作しているのです。摩訶不思議・・・・・・って、何のこっちゃサッパリ解らんでしょうね、文章じゃ。書いている本人がうまく状況を説明できているとは思ってはいないですし(笑)。
スクリプトマニュアルには、
車両オブジェクトは、移動します。このため、スクリプトは複製されず、新しい編成に移動します。変数、イベントは、維持されます。この違いですが、次のようになります。
編成"Train10" : スクリプト"Script10"
分割すると
編成"Train10" : スクリプト"Script10"
編成"Train10_1" : スクリプト"Script10'"
となります。Script10をもとにScript10'が複製されます。
ということが書かれていますが、これとはあまり関係なく、恐らくマニュアルの何処にも書かれていない編成の連結・解放の動作の多分重要なポイントをこれから書きます。自動運転で機回し等をしたい人には必見(?)の実験結果です。

<こんな感じで実験>
---*---*---*---

まず、レイアウトのスクリプトにObjTrainHOKIとObjTrainDE10というオブジェクト変数を準備し、センサー上を走らせて入力します。

で、DE10をぶつけて連結。

すると、DE10は消滅し、HOKIになります。ここまでは問題ないですね。この時点のオブジェクト変数の値も予想通りです。次に解放しますがココがポイント。

解放すると、それぞれHOKI、HOKI_1になるのは予想通りなんですが、オブジェクト変数の値が自動的に変わり、しかもこの時点で逆転状態になっています。
詳しくは調べていませんが、何か変だなぁと思う動作もあったので、この状態の時が怪しいのかも。まぁそれはさておき、収納していたオブジェクト変数の値が自動的に変わるという点が最大のポイントです。

再び連結で、

HOKI_1になり、

再び解放でオブジェクト変数の値が自動的に変わり、本来あるべき姿のオブジェクト変数の値になります。図中では「逆の逆で」と書きましたが、「もう一方も入れ替わり」と書くべきだったね。
第1回目の解放時には変な状態ですが、第2回目の解放時にはうまいこといっている。つまり、機関車を連結した出発駅では編成の分岐区別の制御はしやすいが、機回しする到着駅では注意が必要ということになるでしょう。
これが「西濃鉄道ホッキホキ(仮称)」がちゃんと動いていた理由な訳です。
更に「西濃鉄道ホッキホキ(仮称)」で具体的に考えると、美濃赤坂でのDE10は制御しやすく、難しそうだったUSO800鉄道氏の要望にも多分応えられる。また乙女坂でのDE10は制御しにくいが、機回しだけで他の機関車との区別が必要ないので問題はない。一方大垣のEF65は扱いやすいが、美濃赤坂でのEF65はDE10と区別する必要があるので少々厄介。しかし、EF65はEF65しか入らない線路があるので、そこでオブジェクトを取得すれば良く、現状のやり方でOK。ということで、多分出来るんじゃないでしょうかね。
---*---*---*---
最後に、連結・解放に関する他の記事も紹介しておきましょう。
VRM入道「編成を解結する話・その1」
VRM入道「編成を解結する話・その2」
VRM入道「編成を解結する話・その3」
Such a Cool「Uncoupleの怪」
VRM入道「編成を解結する話・追補」
(Rosso Laboratory「PLAN-6 鉄橋通過音テストエディション Part-2」)
Rosso Laboratory「機関車入換えホッキホキ」
---*---*---*---
実験結果の報告は以上で終わりなんですが、多分次回も続きます。