VRMスクリプトを研究したい人に対しては、「この「減少メソッド」が典型的な「センサーチェーン構造」の使用例だよ」と伝えておくだけにしておきます。

当然ながら、これはcVssへの導入予定機能のテストです。閉塞運転制御のためには、コレ以外に、
・レイアウト スクリプト(VRM4のみ)
・ATS-P(5灯式閉塞編成動作)センサー スクリプト
・5灯式信号機 スクリプト
・cVss編成 改
が必要ですので無理して使わないように。そのうち何処かでサンプルレイアウトを公開するつもりなので。
//----------------------------------------------------------------------
//閉塞構築センサー スクリプト
//----------------------------------------------------------------------
//変数宣言
//一般変数宣言
Var VarStatus
Var VarBlockadeZoneStatus
//(VRM5/ONLINE)
//Var VarBlockadeZoneNo
//オブジェクト変数宣言
VarTrain ObjTrain
VarSensor ObjThisSensor
VarSensor ObjPreviousSensor
//(VRM4)
VarLayout ObjLayout
//イベントID変数宣言
Var SensorEventID
//----------------------------------------------------------------------
//ユーザー設定項目
//使用信号機-1(5灯式:4、4灯式:3、3灯式:2、2灯式:1)
set VarBlockadeZoneStatus 4
//共通ステータス番号(VRM5/ONLINE)
//set VarBlockadeZoneNo 1
//----------------------------------------------------------------------
//スタート
//レイアウト取得(VRM4)
getlayout ObjLayout
//自分取得
get ObjThisSensor this
//センサーが編成を発見したらメソッドへ
SetEventSensor MethodSensorEvent SensorEventID
//メソッド
//閉塞メソッド
BeginFunc MethodSensorEvent
GetSenseTrain ObjTrain
//(VRM4)
mov ObjLayout VarBlockadeZone01 this VarBlockadeZoneStatus
//(VRM5/ONLINE)
//SetCommonStatus VarBlockadeZoneNo VarBlockadeZoneStatus
mov this ObjPreviousSensor ObjTrain ObjBZoneSensor
ifeq VarBlockadeZoneStatus 4
call ObjPreviousSensor Method4to3
endif
ifeq VarBlockadeZoneStatus 3
call ObjPreviousSensor Method3to2
endif
ifeq VarBlockadeZoneStatus 2
call ObjPreviousSensor Method2to1
endif
ifeq VarBlockadeZoneStatus 1
call ObjPreviousSensor Method1to0
endif
mov ObjTrain ObjBZoneSensor this ObjThisSensor
EndFunc
//減少メソッド
BeginFunc Method4to3
//(VRM4)
mov this VarStatus ObjLayout VarBlockadeZone01
//(VRM5/ONLINE)
//GetCommonStatus VarBlockadeZoneNo VarStatus
ifeq VarStatus 4
//(VRM4)
set ObjLayout VarBlockadeZone01 3
//(VRM5/ONLINE)
//SetCommonStatus VarBlockadeZoneNo 3
call ObjPreviousSensor Method3to2
endif
EndFunc
BeginFunc Method3to2
//(VRM4)
mov this VarStatus ObjLayout VarBlockadeZone01
//(VRM5/ONLINE)
//GetCommonStatus VarBlockadeZoneNo VarStatus
ifeq VarStatus 3
//(VRM4)
set ObjLayout VarBlockadeZone01 2
//(VRM5/ONLINE)
//SetCommonStatus VarBlockadeZoneNo 2
call ObjPreviousSensor Method2to1
endif
EndFunc
BeginFunc Method2to1
//(VRM4)
mov this VarStatus ObjLayout VarBlockadeZone01
//(VRM5/ONLINE)
//GetCommonStatus VarBlockadeZoneNo VarStatus
ifeq VarStatus 2
//(VRM4)
set ObjLayout VarBlockadeZone01 1
//(VRM5/ONLINE)
//SetCommonStatus VarBlockadeZoneNo 1
call ObjPreviousSensor Method1to0
endif
EndFunc
BeginFunc Method1to0
//(VRM4)
mov this VarStatus ObjLayout VarBlockadeZone01
//(VRM5/ONLINE)
//GetCommonStatus VarBlockadeZoneNo VarStatus
ifeq VarStatus 1
//(VRM4)
set ObjLayout VarBlockadeZone01 0
//(VRM5/ONLINE)
//SetCommonStatus VarBlockadeZoneNo 0
endif
EndFunc
---*---*---*---
・・・要するに、このスクリプトを使いまわす上で、「赤の部分全部」と「黄色の部分一箇所」を直すのではどちらが楽ですか?という、あまりにも馬鹿馬鹿しい比較。
共通ステータスによって「VRMのオブジェクト間通信は次の時代に移行した」というだけのお話。