2008/2/22

SearchPoint暴走列車  VRMスクリプト禅問答
先だって“SearchPoint命令の使い道がない”と書いたんですが、使い道を見つけてしまいました。バカ、バカ、三日前のオレのバカ。使い道ない、なんて言ってゴメンよ、I.MAGiCの中の人。っつーか、中の人に謝れ!謝れ!三日前のオレ。

と、既にネタ臭さをプンプン漂わせておりますが、実現される事柄は至極まともです。ちょっと難がありますけども。

*     *     *

とりあえず、ポイントがたくさんあるけれども行き止まりのないレイアウトを作ります。リバース区間があったりした方が面白いです。面倒臭いと感じる人は、とにかく、フレキシブルレールでたくさんのポイントを手当たり次第につなげばOK。

クリックすると元のサイズで表示します
<たとえば、こんなのでもいい>

ポイントを10コ配置して適当につないでみました。わかりやすいようにポイントをレイヤー分けして表示色を変えていますが、これは必須ではないです。ただし、ポイントの名前はユニークにしてください。ポイントをコピー&貼り付けしていなければ、ユニークな名前になっているはずですが、念のためご確認を。ポイントの名前もユニークでなくてもOK。


次に、レイアウト上のすべてのポイントに以下のスクリプトをコピー&ペーストします。ポイント毎に書き換えなきゃなんないことはまったくないです、全部同じです。
<ポイントスクリプト>

//ポイント分岐数の取得
Var VarBranchCount
GetBranchCount VarBranchCount

BeginFunc MtdChangePoint
  Var Tmp
  //ポイントの位を1つ進める
  GetPointBranch Tmp
  add Tmp 1
  if> Tmp VarBranchCount
    //分岐数を越えたら0に戻す
    set Tmp 0
  endif
  SetPointBranch Tmp
EndFunc
次に、編成を1つ、どこでもいいので適当に配置して、以下のスクリプトをコピー&ペーストします。
<編成スクリプト>

//グローバル変数
Var VarVoltage
setf VarVoltage 1.0
VarPoint ObjPoint
//出発
SetVoltage VarVoltage
call this MtdDoNotStop

BeginFunc MtdDoNotStop
  Var Tmp
  //進行方向のポイントをチェック
  SearchPoint 16.0 ObjPoint
  //ポイントがあったらとりあえず切り替える
  if ObjPoint
    call ObjPoint MtdChangePoint
  endif
  //止まってないかチェック
  GetCurrentVoltage Tmp
  if> Tmp 0.0
    //走っていれば走行電圧を覚えて次回も同様に
    mov VarVoltage Tmp
    SetEventAfter this MtdDoNotStop Tmp 33
  else
  //止まっていたらちょびっと逆走
    Turn
    SetVoltage 1.0
    SetEventAfter this MtdRetryPoint Tmp 1
  endif
EndFunc

BeginFunc MtdRetryPoint
  Var Tmp
  //ポイント切り替え試行
  if ObjPoint
    call ObjPoint MtdChangePoint
  endif
  //元の進行方向へ元の速度で走行再開
  Turn
  SetVoltage VarVoltage
  //また同じことの繰り返し
  SetEventAfter this MtdDoNotStop Tmp 33
EndFunc
ビュワーを起動してみましょう。アラ不思議!(でもないかw)センサーが1つもないのに、編成がポイントにつっかえることなく走り続けます、っつーか止まれませんwww


<こんな感じ>

動画では、この仕掛けの運転台視点の凄まじさとか、カックン具合が伝わらないと思うので、是非各自お手元で同じような実験レイアウトを作って体験してみてください。んでもって、なんか、書いてて自分で阿呆らしくなってきたので、解説はリクエストベースで対応します。まぁ、コメント読めばだいたいわかると思いますけども。
1

2008/2/24  15:45

投稿者:ghost
VSEだけでも買ってみれば?
とりあえずスクリプトで遊べるよ。

2008/2/24  14:16

投稿者:qwerty
僕もやりたいけど、V3だがらできない。。。

2008/2/22  16:15

投稿者:ghost
今試して気づいたんだけども、スクリプトのコード上で一切ポイント名を参照してないから、ポイントの名前が被ってても(っつーか、全部同じでも)動くわ、コレwww

まぁ、部品名のユニークさを保つのは、VRMスクリプトのお約束ってことで(どの場合OKでどの場合駄NGか、なんて、みんな判断つかないでしょ?)よろしく。理由は・・・どうしても知りたい人がいれば書くけど、面倒臭いので後回し。

コメントを書く

この記事にはコメントを投稿できません




teacup.ブログ “AutoPage”
AutoPage最新お知らせ