RG351MPの小さな画面でDRLを拡大して遊ぶ¶
AIと作った拡大機能の記録 / 2026年10月28日 実機で完成
RG351MPの画面は3.5インチです。ローグライクのDRL(旧DoomRL)を遊ぶと、主人公や敵がとても小さく見えます。そこで、L3ボタンで画面を拡大し、右スティックで見る場所を動かせる機能を、AIと一緒に作りました。
完成までに、うまくいかなかったことが何度もありました。その過程も含めて残します。
完成したもの¶

左がふつうの画面、右が拡大した画面です。主人公のドットまで、はっきり見えます。
| ボタン | 動作 |
|---|---|
| L3(左スティックの押し込み) | 2倍 → 3倍 → 元に戻す |
| 右スティック | 拡大中に見る場所を動かす(倒している間、なめらかに動き続ける) |
- 拡大した画面は、色を混ぜない方法で描いています。ドットがぼやけません。
- ゲームの操作は、これまでどおり使えます。
ゲームは改造していない¶
今回作ったのは、ゲームの外から画面を拡大する「部品」です。
| 変えたもの | 中身 |
|---|---|
拡大用の部品(drl_zoom.so) |
一から書いたプログラム。ゲームが描いた画面を拡大して表示する |
起動用のファイル(DoomRL.sh) |
部品を読み込む1行を足した |
ボタンの設定(drl.gptk2) |
空いていたL3と右スティックに、拡大用のキーを割り当てた |
ゲームのプログラムやデータには、手を入れていません。画面の前に虫眼鏡を置いたようなものです。
きっかけ: ScummVMにはすでにあった¶
この端末では、ScummVMのアドベンチャーゲーム(Beneath a Steel Skyなど)で、L1を押すと拡大できるようにしてありました。同じことをDRLでもできないか、というのが始まりです。
DRLの設定には、マスの大きさを変える項目(tile_multiplier)があります。ただ、これは固定の設定で、ボタンで切り替えるものではありません。2倍にしてみると、マップの見える範囲が狭くなり、ゲームでは不利になりました。必要なときだけ拡大できる仕組みが欲しい、と考えました。
うまくいかなかったこと¶
完成まで、10回以上作り直しました。主なつまずきを順に書きます。
1. 右スティックの「下」と「左」が効かない¶
右スティックの4方向に、F8〜F11のキーを割り当てました。上と右は動くのに、下と左はまったく反応しません。
記録を取って調べると、F9とF10のキーが、この端末ではゲームまで届いていませんでした。ボタンを変換するプログラムはキーを送っています。自分で仮想キーボードを作ってF8・F9・F11を押してみても、F8とF11だけが届き、F9は届きませんでした。どこで止められているかは分かりませんでしたが、下と左をF7とF6に変えて解決しました。
2. 倒したままでも、少ししか動かない¶
ボタンの変換プログラムは、スティックを倒したときに1回、戻したときに1回しかキーを送りません。そこで、部品の側で「今どの方向に倒されているか」を覚えて、時間に合わせて動かし続けるようにしました。
3. 主人公が勝手に歩き出す¶
いちばん苦労したのがこれです。十字キーで一歩動いたあと、拡大して右スティックを倒すと、主人公が最後に動いた方向へ歩き続けてしまいます。
最初は、部品がゲームを起こして画面を描き直させる仕組みが原因だと考えました。そこで、ゲームが描いた画面を毎回写し取っておき、拡大中は部品が自分で描き直す作りに変えました。ゲームを起こす必要がなくなります。それでも、主人公は歩き続けました。
4. テンキーは使えない¶
キーをテンキー(8・2・4・6)に変えたこともあります。ところが、DRLは昔のローグライクと同じく、テンキーを移動キーとして使います。右スティックを倒すと、今度は主人公がその方向に歩きました。
5. 十字キーが効かなくなる¶
拡大用のキーをゲームから見えなくしようとしたら、今度は十字キーが効かなくなりました。
本当の原因¶
記録を細かく取って、ようやく分かりました。
DRLは、入力が来ているかを確かめるとき、入力の待ち行列の先頭を、取り出さずにのぞいています。
- 拡大用のキーが先頭にあると、DRLは「キーが押されている」と思い、最後の移動を繰り返していました(主人公が勝手に歩く)。
- 拡大用のキーを、のぞいたときだけ見えないようにすると、キーは先頭に残ったままです。DRLは「何も来ていない」と思って入力を取り出さず、後ろに並んだ十字キーが詰まっていました(十字キーが効かない)。
そこで、DRLが入力を確かめる前に、毎回、待ち行列から拡大用のキーだけを取り除くようにしました。拡大用のキーは、部品がキーボードの状態から直接読んでいるので、待ち行列から消しても困りません。
これで、拡大、スクロール、ふつうの操作が、すべてうまく動くようになりました。
使えるゲーム、使えないゲーム¶
この部品は、DRL専用に作っています。ほかのゲームでは、そのままでは動きません。
この端末に入っているPortMasterのゲームを調べると、画面の描き方は主に2種類でした。
| 描き方 | ゲーム | この部品 |
|---|---|---|
| OpenGLで直接描く | DRL | 使える |
| SDLのレンダラーで描く | Ultima VI(Nuvie)、Seven Kingdoms、Fallout、OpenTyrianなど | 作り直しが必要 |
レンダラーで描くゲームは、小さな画面を引き伸ばして表示していることが多いので、別の方法で拡大できる見込みがあります。次に挑戦してみます。
元に戻すには¶
変えたファイルは、すべてバックアップしてあります。
ports/DoomRL.sh.bak-20261028をDoomRL.shに戻すports/doomrl/drl.gptk2.bak-20261028をdrl.gptk2に戻す
これだけで、拡大のない元の状態に戻ります。
試すときは自己責任で
端末の設定ファイルを書き換えます。必ずバックアップを取ってから試してください。部品のソースコードは、公開の準備ができたらこのサイトで案内します。
まとめ¶
- RG351MPの小さな画面でも、L3で拡大、右スティックでスクロールして、DRLのドットを大きく見ながら遊べるようになった
- ゲーム本体には手を入れず、外から画面を拡大する部品を作った
- 「主人公が勝手に歩く」原因は、DRLが入力の待ち行列の先頭をのぞく仕組みにあった
- この端末では、F9とF10のキーがゲームまで届かない
画像について
DRLの画像(タイル)は Derek Yu さん、Łukasz Śliwiński さんの作品で、CC BY-SA 4.0 です。