自分はM8 Trackerのサブ動作環境 (こちらの詳細は今回は割愛します) としてTrimUI BrickというARM SoC (具体的にはAllwinner A133 Plus) ベースの携帯ゲーム機を使用しているのですが、M8だけに使うのはもったいないなと感じて、色々とゲームを持ち運んだりしています。GBCエミュレーターもあるので、一台でLSDjとM8を切り替えて使えるのが便利です。
ここにPortmaster (記事末尾で概要を解説しています) という仕組みを利用して、エンジン移植で動作するBalatro (一昨年ごろに散々プレイしていました) を試してみていました。小型画面向けにフォントを置き換えたり、画面のスケーリング値を変更したりといった部分も自動化されており、手順を読んで行えば比較的簡単に導入できるようになっています。
ただ、その画面のスケーリング変更が導入スクリプトでパッチされる値では画面が小さくなってしまい、とても読みづらくなってしまいました。
修正しようとしているやりとりをRedditで見かけたのですが、結局誰も核心部分を理解していなかったのか、解決方法を書かないままになっていました。
また、ゲーム自体が重く、もう少し動作を軽く…演出は設定からだいぶ減らせるのですが、さらに踏み込んでアニメーションを止めたいと感じました。
調べてみるとlovely-injectorというMOD環境がBalatroには存在し、アニメーションを止められるMODとしてHandyやSaturnが存在する事は分かったものの…そもそもMODをPortmaster環境で動かしているという事例が見つかりませんでした。
なので、この記事では両方を解決する方法を解説します。どちらかが必要な場合は取捨選択してください。
【前置き】
この記事は、TrimUI Brick, Knulli Gladiator, Balatro v1.0.1o, lovely-injector v0.9.0の環境で確認・執筆されています。
この方法は、恐らくaarch64アーキテクチャー (ARM 64bit) の環境であれば、TrimUI Brick以外にも応用が効きますが、自分の環境と相談してうまく読み替えてください。
また、Portmasterでの動作、MODの導入、共に全て非公式の行為である事は念頭に置いてください。保証はありません。
一応先に書いておくと、アニメーションを止めてもBalatro (v1.0.1o時点) 自体が重いことはあまり変わらないです。でもやらないよりはいいかなと感じました。
【前提】
Steam版のBalatroを購入していること (Androidでも恐らく何とかなりますが、とてもめんどくさいと思います)
TrimUI BrickのOSはKnulli、もしくはPortmasterが動作できるものであること
使用する機種のLinuxカーネルのアーキテクチャーがaarch64であること
rpmのアーカイブを展開できる環境であること (Windowsの場合は7-Zipがあれば大丈夫です)
【手順】
1. Portmaster環境の準備
Knulliで一度もPortsを使った事がない場合は、メニューからPortsを選択し、Install Portmasterを実行しておいてください。
Balatroのportは、今回は手動で導入していきます。こちらのPortmasterのBalatroのページのDownloadから、ZIPアーカイブをダウンロードします。
2. balatro.shの改変
以下に表記する目安行数は、2025/04/03版のもの (ZIPアーカイブのCRC32: 4B1255C5) です。
ZIPアーカイブを展開し、balatro.shをテキストエディターで開きます。
・こちらはTrimUI Brick向けの設定です。
64行目辺りの
if [ $DISPLAY_WIDTH -le 1279 ]; then # increase the scale for smaller screens
sed -i 's/self.TILE_W = .*/self.TILE_W = 18.25/g' globals.lua
sed -i 's/self.TILE_H = .*/self.TILE_H = 18.25/g' globals.lua
fi
のブロックをコメントアウトします。
TrimUI Brickは横1280を切る機種ではあるものの、4:3の液晶ではないため、この設定で行われる4:3または1:1環境向けのスケーリング対応は不要です。
また、いくつかの値を試した結果としても、設定されているデフォルト値 (TILE_W = 20, TILE_H = 11.5)がベストでした。
・こちらはMODローダー導入のための準備です。
126行目辺りの
./bin/love.${DEVICE_ARCH} "$LAUNCH_GAME"
を、
LD_PRELOAD="./libs.aarch64/liblovely.so" ./bin/love.${DEVICE_ARCH} "$LAUNCH_GAME"
と変更します。
こちらはlovely-injectorの公式リリースの起動用シェルスクリプトを参考に設定しています。
恐らくliblovely.soがエンジンをフックして、MODをロードするような仕組みなのだと考えています。
2. lovely-injectorのaarch64バイナリを入手
MODローダーであるlovely-injectorはライブラリの形式をとっているため、事前にビルドされたバイナリ状態のファイルが必要ですが、CPUアーキテクチャ (正確には、動作しているLinuxカーネルのアーキテクチャー) と一致している必要があります。
ここでは、Fedora向けの非公式リポジトリであるTerraプロジェクトの中に、TrimUI Brickで採用されているaarch64のlovely-injectorのパッケージが存在するため、こちらを利用して楽をします。 (手に入らない場合は自前ビルドが必要になります。armhf環境で何とかしたい場合も同様です。)
Linuxパッケージを横断検索できる、 https://pkgs.org/ でlovely-injectorと検索し、結果からFedora向けのaarch64のパッケージ詳細を開きます。
(執筆時点では0.9.0が最新なので、該当URLは https://fedora.pkgs.org/43/terra/lovely-injector-0:0.9.0-1.fc43.aarch64.rpm.html でした。)
ページをスクロールして、Downloadの項目にあるBinary PackageのURLをブラウザのアドレスバーにコピペして、パッケージをダウンロードします。(執筆時点ではこちら)
ダウンロードされたrpmパッケージを7-Zip等で展開して (rpmはcpioアーカイブです) 、usr/lib64 内にある liblovely.so を、Balatroのportディレクトリ内にある balatro/libs.aarch64 内にコピーします。
3. その他必要なデータの配置
Balatro.exe または Balatro.love ファイルを、balatro ディレクトリ内に配置してください。
こちらのファイルはBalatroのSteam版から入手します。PortmasterのBalatroのページの解説を読んで行ってください。
lovely-injector用のMODディレクトリは、balatro/saves/love/Mods です。
基本的には導入したいMODの導入説明をよく読みましょう。
自分はアニメーションを止め、キーコンフィグも調整したかったのでHandyを導入しました。
4. 設定を行ったPortmaster版BalatroをSDカードに移動
ここまで作業が完了した balatro.sh とbalatroディレクトリ内の全てのファイルを、TrimUI BrickのSDカード内、カードリーダーで読み込んだ場合は SHARE:/roms/ports にペーストします (他の機種の場合はそれぞれ適切な場所を利用してください) 。
KnulliのメニューからPortsを開き、Balatroを起動します。正常に起動し、導入したMODがロードされていれば成功です。Handyを導入した場合は、設定メニューに入ると項目が増えています。
【おわりに】
やりたいことが一応全部できました。
lovely-injectorがあれば、多くのMODを利用できるはずです。Windows専用のDLL書き換え系はさすがに無理ですが、Luaスクリプトで改変するものや、多くのMODの前提MODであるSteamoddedも (未確認ですが理屈の上では) 動くはずです。
プレイ画面はこういった状態になります。
プレイの感想としては…MODで調整しても、TrimUI Brickではそもそもの動作がだいぶ重いです。アニメーションを止めることである程度ストレスを減らすことはできますが、前半Anteでも既にそこそこ重く、後半Anteになると非常に操作が重くなります。もうちょっとパワーのあるSoCであればハンディBalatroを快適に楽しめるのかもしれませんが…TrimUI BrickのAllwinner A133 Plusでは厳しい印象でした。それでも一応プレイはできます。
実績などが同期されるわけではないので、この環境ではUnlock Allを使ってカジュアルに遊んでいます。一度は自力で大半のジョーカーとデッキを出現させたので…画面が小さい分、ある程度カードの動作が頭に入っていないと難しいようにも感じました。既プレイ者…いや中毒者のためのもの…自虐的ですが実際そうではないかなと思います。
【補足解説】
・Balatroは、LÖVE (しばしばlove2dと呼ばれる) というエンジンで制作されているのですが、このエンジン自体はフリーかつオープンソースで、プログラム自体もLuaで書かれたコードをインタプリター方式で動作させるというものになっています。
そのため、エンジン自体を移植すれば他の環境でも動作できる可能性があります。そのためか非公式にAndroid版を自前ビルドするツールを整備していた人 (公式なAndroid版がリリースされる前の話) がいたり、Linuxのネイティブ環境で動作させている人もいますし、Portmasterと呼ばれる仕組みを利用して、ARMベースのSoCで動く携帯ゲーム機で動作させる環境が作られています。
・Portmasterは、Linuxベースの携帯ゲーム機を主眼に置いて開発されているソフトウェアマネージャーといった所です。取り扱うソフトウェアは基本的に非公式のPort (=移植) で、ソースコードが公開されているもの、エンジンがオープンソース等で移植可能なものが主です。Balatroは前述の通りLÖVEエンジンで作られており、このportではエンジン部分を移植して動作させています。
コメント
コメントを投稿