ラズパイ(RetroPie)でアーケードゲームのデモ画面を延々と流す環境の作り方

変なタイトルになってしまった。
EGRET II miniのデモモードのような、アーケードゲームのデモ画面を延々と流す環境をラズパイで作った時の備忘録。
PCの方が色々と小回りが効いて自由なのだが、既にスクリプトが用意されていたのと、このプロジェクトで使うため、コンパクトで省電力なラズパイを使うことにした。ただこのスクリプト、ちょっと見てみるとプロセスをkillしてプロセスがなくなったのを確認してから次のゲームを起動、というちょっと力技に近いやり方をしている。
PC側の本家MAMEには時間指定で終了するオプションや、次のランダムゲームを起動するといったオプションが用意されているので、PCで作るほうがストレートなものが作れるはずである。
あとRetroPieは少し癖があって、はじめの想定より時間がかかってしまった。
また、長くなってしまったので細かい事は別ページに別けた。

基本方針

  • アーケードゲームのデモ画面を延々と流すのが目的なので、ゲームプレイについては考慮しない
  • 動かすのはアーケードゲームのみ
  • ディスク(SDカード)の書き込みをなるべく減らす

準備(用意するもの)

  • Rasoberry Pi本体とMicroSD(8G以上)
  • アーケードゲームとBIOSをダンプしたファイル
  • PCとSDカードリーダー

初期化

SDカードにイメージを書き込む

PCからRaspberry Pi Imagerを使う。

イメージルファイルは、公式ページからダウンロードしてカスタムイメージを使うか、メニューから「Emulation and game OS」からRetroPieを選択してもよいが常に最新バージョンなのかは不明。
ここでwifi、sshデーモン、hostname等の初期設定を設定しておける。
後からコンソール上やEmulation Stationから設定するより遥かに楽なのでこの時点で設定しておく。


設定

ラズパイを起動して初期設定

イメージを書き込んだMicoSDカードをラズパイにマウントし、キーボードを繋げて電源オン。
初回起動時ではEmulation Stationが起動し、コントローラーのキーコンフィグ画面が表示される。
Emulation Stationはゲームコントローラを使う操作を想定されて作られているようだが、ゲームプレイはしないのと一部のCUIでは結局キーボード操作になる1ので、ここではキーボードのキーを割り当てておく。

まずは任意のキーを長押し。

各キーを設定していき、割り当てないでスキップするキーは任意のキーを長押し。面倒だが上から順にキーを割り当てるか、キーを長押ししてスキップしていく。
私の場合は以下のように割り当てた。

startw
selectq
ax
bz
ya
xs

ホットキー有効ボタンを割り当てないで最後にOKを押すと下記メッセージが出る。
Noを選択するとゲーム終了ボタンがEscになる。
Yesを選択するとSelect + Start(L + Rかもしれない)ボタンになる。

以降、ここで割り当てたAが決定、Bがキャンセルとなる2
ただし上述のようにCUIメニューには割り当てられない。
この設定は /opt/retropie/configs/all/retroarch.cfg に以下のように記録される。LとRは設定しなかったがselect, startに設定したキーが(勝手に)割当てられた。

input_player1_a = "x"
input_player1_b = "z"
input_player1_y = "a"
input_player1_x = "s"
input_player1_start = "w"
input_player1_select = "q"
input_player1_l = "q"
input_player1_r = "w"
input_player1_left = "left"
input_player1_right = "right"
input_player1_up = "up"
input_player1_down = "down"
input_exit_emulator = "escape"

IPアドレスを固定したい場合はここでしておいて良いかもしれない。

IPアドレス固定3

f4を押してコンソールに移行したら、 /etc/dhcpcd.conf ファイルの末尾に設定を追記する4

sudo nano /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.xx.xxx/24
static routers=192.168.x.1
static domain_name_servers=192.168.x.1 8.8.8.8

ROMデータの転送

SSHを有効にしていればsftpでデータを転送できるので、WinSCP等のソフトを使ってラズパイにROM,BIOS等必要なファイルを転送しておく。

BIOSファイルは

/home/pi/RetroPie/BIOS

アーケードゲームのROMは

/home/pi/RetroPie/roms/arcade

にファイルを転送しておく。

デフォルトエミュレータの設定

必要なファイルを置いたら、Emulation Stationからゲームを起動する。
ゲームの初回起動時、デフォルトエミュレータの選択ダイアログが出る。
私は長いことmameに慣れていたので一番下のlr-mame2003を選択した。しかしさすがに20年前のセットだと対応していなかったり英語版のみ対応のゲームが多く、この界隈ではfbneoの方が主流なのかもしれない。ただその分安定していて軽いとのこと。
ちなみにどれも頭にlrが付いているが、これはLibRetro5の略で、RetroArchで利用できるようにエミュレータをライブラリ化したものとでも思っておけば良い。

lr-mame2010の追加

上記mame2003で未対応のゲームに対応させるため、lr-mame2010を追加でインストールする。
Emulation StationのRPSETUPから、Manage optional packages -> lr-mame2010を選択すると、インターネットに繋がっている状態であればパッケージを自動でダウンロード&インストールをしてくれる6

使用するエミュレータ

基本は lr-mame2003 を使用し、NeoGeo後期のGIGA POWERと出るもの7は fbneo+ unibios 、それ以外にlr-mame2010を使用するようにした。

ゲームが起動しない、挙動が変 or 遅いとき

デフォルトで選択したエミュレータが対応していない場合はエミュレータを変更する。
また、プロテクトに引っかかっていたり挙動がおかしい場合にエミュレータを変えると正常に動作するケースもある8
エミュレータの変更は起動時のゲーム情報表示中にA/決定ボタンを押すと、エミュレータを選択できるCUIのメニュー9が表示される。

この表示がでている最中に、決定ボタンを押す

Select emulator from…を選択し、

使用したいエミュレータを選んだ後、Launchで起動。1度ここで選択したエミュレータは、次回以降の起動にも反映される。
デフォルトで選択したエミュレータではないエミュレータで起動した場合の設定は下記ファイルに記録されるので、下記ファイルを直接編集しても良い10

/opt/retropie/configs/all/emulators.cfg
arcade_matrim = "lr-fbneo"
arcade_ddpsdoj = "lr-mame2010"

エミュレータを変更しても起動しない場合は Launch with verbose logging を選択してログを見て原因を探る11

ここまで設定したら、以降は基本、別端末上でsshから操作を行う。


スクリプト設置

ここからスクリプトをダウンロードして展開

wget https://github.com/mth75/retropie-demomode/archive/refs/heads/master.zipunzip master.zip -d ~

readmeにあるように各ファイルをコピー

sudo cp ~/retropie-demomode-master/rungames.py /usr/share/pyshared
sudo chmod +x /usr/share/pyshared/rungames.py
cp ~/retropie-demomode-master/demomode.sh /home/pi/RetroPie/retropiemenu
cp ~/retropie-demomode-master/demomode.png /home/pi/RetroPie/retropiemenu/icons
cp ~/retropie-demomode-master/gamelist.xml /home/pi/RetroPie/retropiemenu

この後Emulation Stationを起動するとメニューにDEMO MODEが追加されるのでここで試してみても良いかもしれない。


デモモード用のカスタマイズ

デモモードに都合の悪い設定を削除

各種設定を無効&スキップ等

nano /opt/retropie/configs/all/retroarch-core-options.cfg

警告表示を無効

mame2003_skip_warnings = "enabled"
mame_current_skip_gameinfo = "enabled"
mame_current_skip_nagscreen = "enabled"
mame_current_skip_warnings = "enabled"

NeooGeoのリージョンを日本に一括設定12

mame2003_neogeo_bios = "japan"

ハイスコアの記録を無効

fbneo-hiscores = "disabled"
mame2003_autosave_hiscore = "diabled"

ランチメニューの表示を無効

ゲームの起動前に「Launching …」といったダイアログが表示されるが、これを無効にする。これはプラットフォーム、ゲーム毎に任意の画像に変えることができるので、設定したい人は無効にせずにここらあたりから画像をもらってきても良いかもしれない。

nano /opt/retropie/configs/all/runcommand.cfg
#disable_menu = "0"
disable_menu = "1"

ただしこれを有効にすると上記エミュレータ選択の画面に入れなくなるので設定を全て終えてから1にするのを推奨。

スクリプト修正

sudo nano /usr/share/pyshared/rungames.py
#game_exclusions = [ '.*/gamelist.xml','.*/genesis/.*','.*/apple2/.*','.*/bbcmicro/.*','.*/cdimono1/.*','.*/mame-advmame/.*','.*/nds/*.dsv', '.*/pc/pcdata/.*', '.*/vectrex/overlays/.*', '.*/psx/.bin', '.*/*/*.srm*', '.*/*/*.state*', '.*/snes/*.state','.*/videopac/.*','.*/ti99/.*']
game_exclusions = [ '.*/gamelist.xml','.*/genesis/.*','.*/apple2/.*','.*/bbcmicro/.*','.*/cdimono1/.*','.*/mame-advmame/.*','.*/nds/*.dsv', '.*/pc/pcdata/.*', '.*/vectrex/overlays/.*', '.*/psx/.bin', '.*/*/*.srm*', '.*/*/*.state*', '.*/snes/*.state','.*/videopac/.*','.*/ti99/.*','.*/mame-libretro/.*','.*/fbneo.*','.*/mame2010.*','.*/mame2003.*','.*/images.*']
#INACTIVITY_TIMEOUT = 60
INACTIVITY_TIMEOUT = 120 #デモ時間(秒)

除外パスに mame2003, 2010 と fbneo を追加13し、デモ時間を好みの時間に設定

起動時にデモスクリプトを自動起動

autostart.shはBashの起動前に実行されるようである。ゲームを終了してシェルに移ったあとexitすると、autostart.shが再度実行される。

nano /opt/retropie/configs/all/autostart.sh
#emulationstation #auto
/usr/share/pyshared/rungames.py

ここまで来たら、ラズパイに電源を入れるだけで色々なアーケードゲームのデモがぐるぐるとまわるハズである。

一旦完成だが2ndに続く


  1. 大抵のCUIではEnterが決定、ESCがキャンセル
  2. emulator stationとretroarch上では
  3. ここはraspbianでの設定
  4. 固定なのに何故dhcpなのか謎
  5. 古いゲームの事をレトロゲームと呼ぶのが世界的に主流になってしまったがこの呼び方は気に入らない
  6. コマンドラインからも行えそうだがやり方は知らない
  7. 330メガ以上?
  8. バージョンを上げて重くなったり軽くなったりするが、個々のドライバ次第でもある
  9. Launch Menuと言う
  10. 慣れればこちらの方が早い
  11. 順番が逆な気もするが
  12. NeoGeo後期はmame2003で動かさないので個別に設定
  13. arcadeディレクトリに同名のディレクトリができるが、このディレクトリをゲームとして起動しようとするため

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です