ESP32ゲーム機o-bakoによるゲームのオンラインダウンロード

o-bakoにゲームのオンラインダウンロード機能が付きました!

o-bakoは、僕が作っているESP32で動作するゲーム機です。

inajob.hatenablog.jp

ゲームのオンラインダウンロード機能を作っているので、その紹介をします。

o-bakoの現在の状況

昨年5月から、ずいぶんと開発が進み、プリント基板化も行いました。

ちなみにこの基板、設計を大量に間違えており、工夫をしないと作ることができません・・

そして、3Dプリンタで筐体を作りました。

 さらに、リチウムイオンポリマー二次電池による、充電機能も付けてみました。

といってもこれは、市販の充電回路と、5V昇圧回路を組み合わせただけですが、、

f:id:inajob:20190131164124p:plain

o-bakoのランチャ

o-bakoはLuaでゲームプログラムが書けるという環境です。描画命令や、キーの入力スキャンなどの処理はネイティブ実装を行っており、Luaの関数から呼び出すことができます。

また、o-bakoのランチャ自体もo-bakoのアプリケーションの一つとしてLua言語で実装されています。要は”ランチャ”というゲームです。

o-bako-esp32/main.lua at master · inajob/o-bako-esp32 · GitHub

この150行程度のプログラムがランチャです。

f:id:inajob:20190131164705p:plain

実行するとこのようにSPIFFS上のファイルを一覧し、十字キーでゲームを選んで実行することができます。

o-bako用のゲーム

ゲームらしいゲームの例を見ていきましょう。

o-bako-esp32/main.lua at master · inajob/o-bako-esp32 · GitHub

この104行のプログラムは、ジャンプで敵キャラをよけるという単純なアクションゲームです。

f:id:inajob:20190131195313p:plain

o-bako固有の命令については o-bako Simulatorに紹介していますので参考にしてください。

 

ゲームを構成するファイルについてみていきます。

o-bako-esp32/example/jump at master · inajob/o-bako-esp32 · GitHub ここにあるように、このゲームを構成するのはgame.jsonとmain.lua、sprite.bmpです。

game.jsonはこのような内容です。

{"title":"jump", "files":["main.lua", "sprite.bmp"]}

これが、このゲームのタイトルと、依存しているファイルの一覧です。

main.luaはゲーム本体のLuaスクリプトです。sprite.bmpは128x128の256色インデックスカラーのビットマップファイルです。

ゲームのオンラインダウンロード

ゲームのオンラインダウンロードのため、まずはダウンロード可能なゲームの一覧をファイルにまとめています。

o-bako-esp32/games.json at master · inajob/o-bako-esp32 · GitHub

{"games":["jump", "loader", "downloader","doteditor"]}

このような内容です。この例では4つのゲームがダウンロード可能となっています。

 

ゲームのオンラインダウンロードを行う機能も一つの”ゲーム”としてLuaで記述しています。

o-bako-esp32/example/downloader at master · inajob/o-bako-esp32 · GitHub

主となるのはmain.luaで、120行程度のプログラムです。

このプログラムが、上記のゲーム一覧のjsonファイルを読み込みます。そして、ゲームをダウンロードします。

f:id:inajob:20190131172555p:plain 

まとめ

ESP32はWiFiが利用でき、非常に高性能なマイコンモジュールです。

o-bakoでは esp32-arduinoでluaを使う - Qiitaで紹介した方法でLuaを利用しています。

これらの強力な機能のおかげで、”インターネットからのオンラインゲームダウンロード機能”を備えた携帯ゲーム機を作ることができてしまいました。

これからもo-bakoの開発を進めていきますので、気になる方は私のTwitterアカウントina_ani (@ina_ani) | Twitterと、このブログを要チェックです。