Visual Pinball で おうちピンボール覚書
お部屋にピンボール

上の写真のように本物のピンボールに近い形で遊ぼうと思い、ちょこちょこやっていたものをまとめます。
ピンボールとは
昔(1970~90ぐらい)はゲームセンターに必ずあった、本当の銀色のボールをフリッパーと呼ばれる物をボタンでパタパタ動かし点数を取っていくゲームです。(ん?ここから?(^^))これは最近あまりないので昔あった面白かったピンボールをおうちであそびたいなあ、というところから始まっています。

何を使っているか
ソフトウエア Visual Pinball X (VPX)
https://www.vpforums.org/
でホストされているピンボールのエディターです。
詳しくはWikipediaにあります。
https://en.wikipedia.org/wiki/Visual_Pinball
ざっくり書くと
2000年にRandyDavisさんが作って様々なアップデートを経て2010年からオープンソースになり
Non-Commercialであれば再配布可能で、今はGPLv3+に変更しようとされています。
このソフトのすごいところは先のフォーラムで1000を超えるピンボールのテーブルが有志によって作られて遊べる、さらに新しいテーブルがつくられていることです。
通常はこんな風にノートやデスクトップのPCで遊べます。でもちょっと味気ない。

さらに面白い所は
Vpinmame という仕組みと連動することで、本当にゲームセンターにあった昔のピンボールをあそぶことができる、またその際に、実際に使用されるROMを使って本物のライトの動きや音を出してあそぶことができることです。
ちょっと詳しく説明すると
ピンボールはボールがプレイフィールドを動いていろんなものにあたります。
そのボールがいろんなものについているスイッチをON、OFFします。
そのスイッチの入力に従って
プレイフィールドのライトを光らせる、スコアを入れる、あるゲームの条件を設定する、という仕組みがあります。
入力に従った反応は比較的新しいピンボールではゲームのシステムボードとそのプログラムで制御されています。
なのでそのプログラムを動かして、スイッチ、ライトを各ピンボールで名前を決めておいて、本物と同じように配置しておけば本物と同じピンボールの反応をシミュレートできます。
そのシステムボードのプログラムをエミュレートするのがVpinmame です。
また、さらに
B2S
という仕組みをいれることで、バックグラスのアニメーションファイルを有志が作ってそれと連動して本物のような、あるいはそれを超えるものを作って動かすことができるようになっています。
それはプレイフィールドと別のモニターに出すことができます。今回の場合24インチの1920x1200ドットのモニターに表示しています。
そして、さらにさらに
DOF
という仕組みによってコンピューター上で映像として動いているピンボールから本物の回転灯などを動かすことができるようになります。また、あらたなLEDライトのエフェクトなども作ることができるようです。
例えば本当のピンボールにはありませんが右のフリッパーのボタンを押すと右のストロボがフラッシュ、左を押すと左にあるストロボがフラッシュ、ということができます。
回転灯の場合、BEACONと名前を決めて、出力がBEACONをONにします、と決めておけば各ピンボールのVPinmameでBEACONがON、という情報がDOFでBEACONはこのポートの出力ときめてあれば、そこのポートをONにする、それを本物の回転灯をONにするような回路を作っておけばおうちにある回転灯が光って回転する、というような仕組みになっています。
インストールや使い方の部分は今回は話をしません。
今回のお話はそのあと、の話です。
コントローラーの詳細について
以前おにたまさんにインタビューを受けたビデオの中で
[OBSLive] 展覧会エンジニアの金築浩史さんと海外ゲームの魅力に迫る生放送
https://www.youtube.com/watch?v=XupD7S4Y7DU
54分58秒ぐらいのところですが
その中でピンボールのコントローラーを作った話をしました。
これはSwitchのピンボールソフト用のコントローラだったのですが
それはもともとPCのVisual Pinballで遊ぶためにも使用できるように作りました。


基本的には黒い箱、それにゲームセンターのジョイスティックやボタンをつけて遊べるようにしています。
ボタンのオンオフを全部外に出して、結線することで遊べるようにしています。
詳細な大きさは以下です。

基本的には4面の箱です。詳細なサイズを下に書きます。

このサイズは厚みを考慮に入れてないので実際に作る際はちょっと考えてください。
エッジはアルミの角あてをつくれば隠れるので、
550-12-12で526mmのサイズの板を切って、アクリルは550mmでつくればいいと思います。
ボタンの位置は手の記憶で作っていて完全に適当でしたが、意外といい線いっていました。
また、横幅を56cmでつくると本物とほぼ同じサイズになるので、
本物の角あてパーツなどを流用出来るかもしれません。
これに上部の角をアルミの薄い板(0.5㎜)を曲げたものでカバーしています。
アルミ板は黒く塗装しています。
アサヒペン アルミスプレー
t.ly/BzgP
これできれいに塗装出来ました。そして剥がれにくいです。おすすめです。
これを90Wx45Dx86H(cm)のスチールラックにのせています。

高さはパイプを切ったかもしれません。パイプは25㎜ぐらいの大きいものが頑丈でいいです。
スティールラックには43インチモニター、ノートPC, USBコントローラ、端子台などが乗っています。


スティールラックの空いているところには本や資料など重くなるものが乗っています。
PCなどが乗っている以外のところは本来のスティールラックとしてものを入れられます。
また、なるべく重いものが良いです。
43インチのモニターは昔のピンボールのサイズに近いです。たまたま家にあったのですが、ぴったりでした。ななめに置いています。

バックグラス用のモニターは24インチです。

回転灯とライトが後ろに取り付けてあります。

ライトはつきっぱなし、回転灯はDOFで制御されています。
回転灯 LED警告灯 信号ライト 安全警告ライト ストロボ フラッシュライト
を使いました。が、今在庫なしになってるので近いものを購入しましょう!
さらに細かい話
ここから細かい制御の話になります。
以下がコントローラの部分です。
左側が端子台で箱のスイッチにつながっています。
真ん中の端子台が回転灯などをON,OFFする端子台です。ここは100Vが来ています。
その右側がコントローラーのUSBです。

左側が LEDwiz Clone です。
https://github.com/cithraidt/lwcloneu2
これはDOFの仕組みを使って回転灯などを回転させる出力と
コントローラーのジョイスティックのボタンの入力
キーボードの入力の3つをサポートする入出力コントローラーです。
もともとLEDWizardというものが市販であり、そのクローンを各種Arduino(Leonardなど)に移植できるようにしたものです。
https://groovygamegear.com/webstore/index.php?main_page=product_info&products_id=239
基本的にはこういうところで購入するのが簡単と思います。コネクターなどもついています。

右側はコントローラーの傾きや各軸の加速度などをセンシングするためのArduino Leonardoです。
下の写真に見えるのが6軸センサーです。これは台を揺らしたりするとソフト上の台が揺れるように
設定するためのものです。
MPU-6050 6DOF
t.ly/ooWr
今買えないようですが、5つで1000円弱でした。
Arduinoのソフトウェアは
https://github.com/SimonMaier/MarioKartHelmet
を使いました。

これはLedwiz Cloneと同じ Arduino Leonardという名前のJoystickとしてPCからは認識されました。アナログのスティックになっています。
LWizcloneのほうは8方向スティックです。




揺らし(Nudge)の設定は上のようになっています。
こういう部分の確認のために
Nudge Test and Calibration.vpx
というテーブルがあるのでそれで調整します。
ここは実はあまりよくわかってないところなんですが
VisualPinball自体が1本のスティックしか対応していないと書いてあった記憶があり、
加速度のほうはうまく使えないと思っていたのですが、両方認識して使えています。
LwcloneV2のほうのfirmwareを作る際に、
32U2のファームウエアにpinmap.hというものがあり
そこでArduinoの入出力のピンアサインなどを行います。
#define LED_MAPPING_TABLE(_map_) \
\
_map_( B, 0, 1 ) /* RX LED */ \
_map_( D, 5, 1 ) /* TX LED */ \
_map_( C, 6, 1 ) /* 5 */ \
_map_( D, 7, 1 ) /* 6 */ \ \
/* end */
これは

DOFの出力として
PB0の TX LEDと
PD5の RX LEDと
PC6 の 5番ピン
PC7の 6番ピンを使うという設定にしています。
そしてスティック、キーボードの設定を
_map_( D, 3, KEY_M, J1_Up ) /* Digital Pin 0 keyboard key*/ \
_map_( D, 2, KEY_2, J1_Button2 ) /* Digital Pin 1 */ \
_map_( B, 1, KEY_1, J1_Down ) /* Digital Pin SCLK */ \
_map_( B, 3, KEY_Z, J1_Left ) /* Digital Pin MISO */ \
_map_( D, 4, KEY_Slash, J1_Right ) /* Digital Pin 4 */ \
_map_( B, 4, KEY_Enter, J1_Button1 ) /* Digital Pin 8 */ \
_map_( B, 5, KEY_S, J1_Button4 ) /* Digital Pin 9 */ \
_map_( B, 6, KEY_N, J1_Button3 ) /* Digital Pin 10 ADC13 */ \
_map_( B, 2, 0, 0 ) /* Digital Pin 16 / MOSI current modifier key index10 */
それぞれ
Arduinoのポート、キーボード、モードキーが押された時 という設定ができるようになっています。
PD3、 キー M、 Joystick1 上
PD2、 キー 2、 J1 ボタン2
PB1、 キー 1、 J1 下
PB3、 キー Z、 J1 右
PD4、 キー スラッシュ、 J1 右
PB4、 キー エンター、 J1 ボタン1
PB5、 キー S、 J1 ボタン4
PB6、 キー N、 J1 ボタン3
PB2、 モード切替 ボタン
に設定しました。これは例なので好きなように設定すればいいようです。
僕の場合キーボードでピンボールのボタン(フリッパーやプランジャーなど)の入力にして
モードを切り替えてメニューから出たり、キーの上下、クレジットを入れる
などにしてあります。
これはVisual Pinballで設定するのですが、一部 Joytokeyなどのユーティリティを使っています。
この設定でアナログのジャイロによるコントローラーの揺れと
ボタンによる入力と
回転灯への出力ができるようになります。


これはソレノイドです。クレジットが上がるとカチンと鳴ります。
これが回転灯の部分です。



部分の写真を以下に

モードスイッチとstart、クレジットスイッチ とその裏側


右フリッパーとマグナセーブボタン(としては使ってないですが) とその裏側


右フリッパーボタン


裏側の写真のこのスイッチはリーフスイッチといって本物のピンボールにも使われていますが
今2つしか手持ちがなく、フリッパーだけこのスイッチを使いました。プレイしたときのフィーリング重視です(^^)。それ以外は通常のビデオゲームで使われるスイッチを使っています。
シフトレバー とその裏側


上下に動きます。これはナス型のジョイスティックをばらして普通のスイッチを付けています。
角あてのアルミ 裏、表、外したところ(すこしスポンジの棒で上にあげています)



角あてはずした右フリッパーボタン

おわりに
ディテールはほんとに粗いんですが、暗くして遊ぶので気にしない!!
皆さんはこれよりかっこよくつくれるでしょう!!
いろいろ書いてありますが、基本的には箱を作ってボタンやレバーを付けて
43インチのモニターを倒して、バックグラスはなくても、
SwitchやPCなどのコントローラーを使ってやれば
揺らしたり、回転灯、バックグラスはなくても遊べてすごく楽しいのでぜひ作ってみてください。
これ全体のサイズは1畳半にはいりますから、常設しておくのもそんなに大変ではないかも??
最後に
ピンボールを作っている会社、デザイナー
VisualPinballとそのソフト、テーブルをホストしているVPForum
ピンボールのテーブルを作っている作者の
githubで使いやすいようにデバイスの作り方などをオープンにしている方々に感謝します。
皆さんも作ってみてください!
今回写真に使用したものは
F-14 Tomcat (Williams 1987) VPX 1.0
F-14 Tomcat (Williams 1987) 1.2 directB2s