o-bakoにゲームのオンラインダウンロード機能が付きました!
o-bakoは、僕が作っているESP32で動作するゲーム機です。
ゲームのオンラインダウンロード機能を作っているので、その紹介をします。
o-bakoの現在の状況
昨年5月から、ずいぶんと開発が進み、プリント基板化も行いました。
ESP32ゲーム機 試作基板 起動! 試作基盤はたくさん間違えてしまったがなんとか起動した まずはディスプレイのオフセットが違うのをなんとかしたい pic.twitter.com/S0EnSkR8OJ
— ina_ani (@ina_ani) September 16, 2018
ちなみにこの基板、設計を大量に間違えており、工夫をしないと作ることができません・・
そして、3Dプリンタで筐体を作りました。
ドット絵エディタみたいなの作ってみる pic.twitter.com/6OQBVXFSou
— ina_ani (@ina_ani) October 21, 2018
さらに、リチウムイオンポリマー二次電池による、充電機能も付けてみました。
といってもこれは、市販の充電回路と、5V昇圧回路を組み合わせただけですが、、
o-bakoのランチャ
o-bakoはLuaでゲームプログラムが書けるという環境です。描画命令や、キーの入力スキャンなどの処理はネイティブ実装を行っており、Luaの関数から呼び出すことができます。
また、o-bakoのランチャ自体もo-bakoのアプリケーションの一つとしてLua言語で実装されています。要は”ランチャ”というゲームです。
o-bako-esp32/main.lua at master · inajob/o-bako-esp32 · GitHub
この150行程度のプログラムがランチャです。
実行するとこのようにSPIFFS上のファイルを一覧し、十字キーでゲームを選んで実行することができます。
o-bako用のゲーム
ゲームらしいゲームの例を見ていきましょう。
o-bako-esp32/main.lua at master · inajob/o-bako-esp32 · GitHub
この104行のプログラムは、ジャンプで敵キャラをよけるという単純なアクションゲームです。
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ファイルを読み込みます。そして、ゲームをダウンロードします。
まとめ
ESP32はWiFiが利用でき、非常に高性能なマイコンモジュールです。
o-bakoでは esp32-arduinoでluaを使う - Qiitaで紹介した方法でLuaを利用しています。
これらの強力な機能のおかげで、”インターネットからのオンラインゲームダウンロード機能”を備えた携帯ゲーム機を作ることができてしまいました。
これからもo-bakoの開発を進めていきますので、気になる方は私のTwitterアカウントina_ani (@ina_ani) | Twitterと、このブログを要チェックです。