読者です 読者をやめる 読者になる 読者になる

ど~もeagle0wlです(再)

140文字では収まらないネタを記録するブログ

Raspberry Pi 2B に RetroPie 4.0 を導入する その6 (終) レイアウト改修

f:id:eagle0wl:20161029221423p:plain

EmulationStationの修正

EmulatonStationは日本語文字列の折り返しに対応しておらず、detailed(詳細情報表示)で日本語表示をしようとすると、こんな感じでおかしなことになってしまう。
f:id:eagle0wl:20161002092715p:plain

これをこんな感じに直したい。解説に長文が入っても2秒待つとスクロールが始まる(オリジナルは8秒)。
f:id:eagle0wl:20161029221423p:plain

※開発、販売メーカーやゲーム解説の情報があると生じる問題なので、basic(ファイル名一覧だけの表示)で良いのであれば無視できる。

また、個人的な好き嫌いのレベルになるが若干変更を施してみた。

修正内容

EmulatonStationをforkして修正を行なった。
github.com

変更内容は以下の通り。

日本語のワードラップ&禁則処理の実装

本気の実装(CJKV対応とか)を考えると、QtやFirefoxとかで使われているHarfBuzzというテキストレイアウトエンジンを使うと良いらしいが、今回は日本語を折り返せばいいので実装は簡素に留めた。ついでに最低限の禁則処理も実装した(行頭禁則文字、行末禁則文字、半角英単語は一纏まりで扱うようにした)。
Qt in depth: Qt の禁則処理 - Qt Japanese Blog

フィールド追加

(機種ごとの)ROMイメージの総数と、現在指しているROMは何番目かを指すフィールド md_numberoflist を追加した。レイアウト情報(theme.xml)は、ゲーム一覧だけが表示されるbasicと、一覧や画像や詳細情報が表示されるdetailedの2種類があるが、detailedのみ適用される。

<text name="md_numberoflist">
	<alignment>right</alignment>
	<color>666666</color>
	<fontSize>0.04</fontSize>
	<pos>0.2 0.17</pos>
	<size>0.2 0.038</size>
</text>
詳細表示の修正

detailedにおける、発売日の表記をmm/dd/YYYYから日本式のYYYY/mm/ddに変更。
publisher, developerなどのラベルを日本語表記に変更。

修正版のビルド

Raspberry Pi上でcloneしてビルドを行う。

まずはビルドに必要なライブラリをインストール。

$ cd ~/Dev
$ sudo apt-get install g++-4.7
$ cd ~/Dev
$ wget http://libsdl.org/release/SDL2-2.0.1.tar.gz
$ tar xvfz SDL2-2.0.1.tar.gz
$ rm SDL2-2.0.1.tar.gz
$ pushd SDL2-2.0.1
$ ./configure --disable-video-opengl --host=arm-raspberry-linux-gnueabihf
$ make
$ sudo make install
$ popd

修正版EmulationStationをビルドする。

$ cd ~/Dev
$ git clone https://github.com/eagle0wl/EmulationStation.git
$ cd EmulationStation

$ sudo cmake -DCMAKE_CXX_COMPILER=g++-4.7 .

ここでエラーが出たらもう一度同じコマンドを実行

$ sudo make

Raspberry Pi 2Bでは30分以上かかるので気長に待つ。

[100%] Built target emulationstatio

と出たら成功。

上記の手順でビルドできない場合は、公式の「Installing on Raspberry Pi (Stand-alone)」以下を試すこと。
emulationstation.org

EmulationStationを起動している場合は終了してから、改変版EmulationStationを配置する。

$ sudo mv /usr/bin/emulationstation /usr/bin/emulationstation.master
$ sudo cp emulationstation /usr/bin/

EmulationStationを再起動するとどうなるだろう?

f:id:eagle0wl:20161029222738p:plain

carbonのテーマに合っていない。というより文字が小さすぎるような気がする。
注意:私はPC用ディスプレイではなく、32インチテレビで表示確認を行っている

carbonの修正

EmulationStationのデフォルトテーマであるcarbonを修正したい。

carbonテーマはgithub上でも公開されており、更新も行われている。
github.com

例によってforkして少し変更したcarbonテーマを用意したので、これをインストールする。
github.com

$ cd ~/Dev
$ git clone https://github.com/eagle0wl/es-theme-carbon.git

取得した修正版テーマcarbon(es-theme-carbon)を"carbon-mod"という名前で配置する。

$ sudo cp -r ./es-theme-carbon /etc/emulationstation/themes/carbon-mod

EmulationStationを再起動すると、UI SETTINGに carbon-mod が現れるので選択する。
f:id:eagle0wl:20161105020130p:plain

いくらかのROMイメージを入れていれば、見た目が少し変わっているはずである。

変更点

  • pc88、pc98、x68000を新規に追加
  • 一部の機種のロゴを日本語圏のものに変更
  • MAMEのtheme.xmlだけ大幅に変更

ただし、これだけでは「箱は用意したが中身がない」状態、つまりdetailsで表示する文字情報やスクショがないのであまり意味がない。ということで、MAME用のgamelist.xmlを用意してみたいと思う。

history2gamelistでgamelist.xmlを作る

以前のエントリでさんざん述べたように、自前でデータベースを用意しようとすると死ねる。集合知に頼るべきだが、今のところgamelist.xmlまでカッチリ落とし込めるデータベースは存在しない。
eagle0wl.hatenadiary.jp

しかし、アーケードエミュレータMAMEだけは例外である。日本語のデータベースが実に充実しているのである。ということで、ウェブ上にあるMAME用のファイルからgamelist.xmlに変換するスクリプトhistory2gamelist』を作ったのでここに公開する。

スクリプトの入手と、詳細な使い方はリンク先を読んでほしい。Pythonが必要。
github.com

滞りなく実行できて、出力されたファイルを配置できれば、すでに紹介したこのスクリーンショットのようなメニュー画面が手に入るはずである。
f:id:eagle0wl:20161029221423p:plain

今回はMAMEのデータベースのみの充実と、MAMEだけのtheme.xmlの改修を図った。
他の機種でも表示するデータベースが用意できれば、MAMEのtheme.xmlをコピペすることで同じような表示にできるはずである。つまり、こんな感じである。

$ cd /etc/emulationstation/themes/carbon-mod/
$ sudo cp ./[機種名]/theme.xml ./[機種名]/theme.xml.bak
$ sudo cp ./mame/theme.xml ./[機種名]/theme.xml

RetroPieについては本エントリで一区切りつけたい。