2007/1/18

夜行列車の機関車の室内灯は、消えてるのがやっぱ正しいよな  VRM4ポータブル編成
と思いつつ、自分でも徹底できてない、というお話。

ポータブル編成ギミック一発組み込みは、汎用スクロールである関係上、編成に含まれるすべての車両に、有無を言わさずまったく同じスクリプトを書き込みます。

実際には、スクリプトの中で“自分が何号車か”であるとか“先頭/中間/最後尾車か”を調べたりして動作が変わるんですが、基本はまったく同じ動作をしています。そして、VRMスクリプトの車両系命令の中には“自分が機関車か否か”を調べるものはないので、多数派である“電車/気動車”を基本に動作を規定しています。

この結果、普通にスクロールを組み込むとヘッドライトと室内灯が連動するので、特に第5号の目玉となったブルートレインを夜間設定で走らせた場合、室内灯が点灯した状態になってしまって「おい、そりゃ危ないんでないの?」な状態になります。

で。これを改善するのは簡単で、スクロールを組み込んだ後に(または、何処からかダウンロードしたポータブル編成の)機関車の車両スクリプトを開いて、以下の部分を修正すればいいです。
[車両スクリプト]

(前略)

BeginFunc MtdLightOn
//
//点灯メソッド
//
 Var Tmp
 //共通アクション
 SetRoomlight 0
 SetSignlight 1
 //車両位置に応じたアクション
 GetCarPos Tmp
 ifzero Tmp
  SetHeadlight 0
  SetTaillight 0
 endif
 ifeq Tmp 1
  SetHeadlight 1
  SetTaillight 0
 endif
 ifeq Tmp 2
  SetHeadlight 0
  SetTaillight 1
 endif
EndFunc

(後略)
太字になっている行の 0は、ポータブル編成ギミック一発組み込みスクロールを組み込んだ時点では 1 になっています。これを 0 に変える。これだけです。

と自分で言いつつ、最近リリースしたブルートレイン系のポータブル編成のいくつかで(ひょっとすると全部か・・・@)これをやり忘れてるような気がしたので、懺悔しときます。気になる方は、各自で書き換えて上書き保存でもしちゃってください。

なお、電車・気動車の先頭/最後尾車にこれをやると、当然のことながら運転台だけでなく室内灯も消えてしまうのでNGです。これはもうVRM側の仕様なので我々にはどうしようもないですし、多分、今更これを変えるのはI.MAGiCにも無理でしょう。全先頭車モデルを再リリースしろ、と言ってるのに近いので。まぁ、VRM5の課題ですな。ちょっと気が早いけど。そんなモノがあるとして、の話ですが。
0

2007/1/18  15:18

投稿者:ghost
マジレスすると。

スクロールでハンドルするってのは、イコール、スクロール作者は電車先頭車用と機関車用の二種のスクロールを書くことを強いられるので、マヌケな実装です。

一番いいのは GetCarType みたいな命令が実装されて、戻り値が 1だったら機関車、2だったら電車・・・みたいな感じ。VRMの車両データベースは、編成組成時のツリー展開のために各モデルが車種情報を持っているので、不可能ではないはず。

問題は、このデータベースはあくまでもレイアウター用のものなので、スクリプト命令から参照するとすると、ビュワー起動時にメモリ上にそれを展開してやるか、少なくとも編成をオブジェクト化するときにそのプロパティとしてロードしてやんなきゃなんない。

で、勝手な想像だけども、VRMビュワーの現時点の実装は、速度向上のために編成オブジェクト内部の情報は、中間層を作らずに直接参照してるように思うので、ここに新たな要素(ここでは車種情報)を割り込ませる余裕がなかったりするんじゃないかなー、とは思うワケです。

まぁ、定石では将来の拡張用に数バイトは確保してるはずなので、ヤル気があれば出来ると思うんですけどね。でも、その命令を使うのボクだけだったりして。んじゃ、意味ねーじゃん。

2007/1/17  18:11

投稿者:KSMaster
一応各車両データに形式と系統があるんだから、スクロールでparamに機関車を入れてほしいところ。んま、”何両目”をあらわすparamとはちょっとカテゴリが異なりますが。
HEADだとちとキツイですからね。
かならずしも先頭だけが機関車とは限らないし。


http://ksmaster.sblo.jp/

コメントを書く

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




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