AKAGI Rails

鉄道模型シミュレーターで遊んでいたはずが、気づいたらPythonなども。

誰も言わない,VRMNXの実はすごいこと

みんな気づいてるとは思うけど,誰も取り上げてくれないVRMNXの画期的な仕様が2点あるので,ここに書き留めておこうと思う。

ひとつめは,ビュワー起動時に車両のない「空の編成」がエラーとならなくなったこと。

ふたつめは,Pythonが元来持っている,(ときに過剰とも言われる)エラーチェックの数々である。

この絶妙なエラー処理のバランスによって,部品欠損に対する頑健性がかなりアップしている。もちろん「なんの不都合も起き得ない」わけではないだろうが,他人のレイアウトファイルをダウンロードして入手したときにかなり深刻な部品不足があっても,なんとかビュワーを起動してレイアウトの雰囲気を味わうところまでは多くのユーザーがたどり着くことができるだろう,という話だ。

昔から,人のレイアウトを開こうとするときに手持ちの部品・車両では足りないという悩みはVRMにつきまとっていた。車両のない空の編成部品を探しては,削除するか適当に車両を足すかという「儀式」を行った記憶は,誰にでもあることだろうと思う。それが,「空の編成」が起動時エラーにならなくなったことにより,この儀式を行うことなくビュワー起動にありつけることとなった。(そもそも,バージョン4の時点で,スクリプトによる連結・解放により,車両を持たない編成オブジェクトというのはメモリ空間上に存在し得たわけだが,それはさておき。)

起動時エラーの問題に拍車をかけたのがVRM4で登場したスクリプトの存在である。ビュワー起動時に,オブジェクトや変数の名前解決に失敗したりするとエラーが出る仕様であったが,このエラーを解決するには(スクリプトを全部消す以外には)スクリプトに関する高度な知識と,(部品欠損によってコードの一部が消失している状況下でそれを読み解く)勘と経験が必要で,現実的には諦めていた方も多いだろう。

典型的には,センサーから音源部品を参照して制御するような場面で音源側が欠損した場合にエラーが出ていたことだろう。

しかしVRMNXに搭載されたPythonという言語は,実行時にかなり丁寧なエラーチェックが行われる。この仕様はPythonが遅いと言われる所以でもあるが,これによって,基本的にスクリプトに関してはノーチェックでビュワーが起動するような仕様を実現した(外見上,そのように思われる)。まずいコードは,Python自体の機構でコマンドの実行時にエラーとして検出されその場でPythonエンジンを止めるという機構が取られている。(システムにダメージを与える危険性がゼロとは言い切れないが)

つまるところ,音源部品が欠落しても,信号機部品が欠落しても参照エラーに当たってビュワー起動が絶望的になるという時代は基本的に終わったのである。(それどころか,音源部品とエミッターはスターターキットにバンドルされるようになってるしw)


空の編成部品に対するふるまいの変更と,Pythonベースのスクリプトの導入によって,ユーザーが抱えていた積年の悩みをかなり解決した。この点でVRMNXは非常に画期的である。(編成がぶつかったり止まったりとかというレベルでは,作者の意図しない不具合はいくらでも起きうるだろうが)

VRMNX時代はレイアウトファイルの公開が再び盛んになってもよい環境が,(製品設計のレベルでは)達成されているのではないかと思う今日このごろである。(編成がぶつかったり止まったりするといったヘンテコなレイアウトの挙動が,もともと作者がヘタクソに作ったからなのか,何らかの部品欠損に起因するスクリプトのエラーによるものなのかは,素人さんには判断がつかないだろうから,勘違いに基づくクレームとかは起きるかもしれない。しかし起動もさせないというビギナーを門前払いするようなシステム設計よりはよっぽどマシだと考える。部品の欠落で編成などの挙動が狂うことがあり得るよという共通認識を改めて醸成していくべきだと言える。)