まず、wasmbotsとは
という話をしないといけません。これはwasmバイナリを作って、ダンジョン探索をするゲームです。
具体的には?
ダンジョンを探索するためのプログラムを書いて、それを特定のインタフェースを満たしたWASMファイルにコンパイルすれば、あとはそれをアップロードすることでプレイヤーに自動でダンジョン探索をさせることができる、というブラウザゲームです。
プロジェクトのサンプルダンジョンにアクセスしてみれば即イメージが掴めると思います。
アクセスしたら、いくつかプリセットでアルゴリズムが用意されていることがわかります。
適当に1つ選んだら ▶️ のボタンを押すと探索が始まります。
demo用 pic.twitter.com/SEPfMyWcH2
— Uchio Kondo💥 (@udzura) 2025年2月23日
同じように、ダンジョン探索のアルゴリズムを任意の言語で書いて、WASMにコンパイルしてアップロードしたら、自分のコードでプレイヤーにダンジョンを探索させられます。
ただ、任意の言語と言っても、以下の条件を満たしたWASMを生成できないといけません*1。
- 特定の関数をexportするよう指定しなければならない
- 以下の4つ
void clientInitialize(void)size_t setup(size_t requestReserve)bool receiveGameParams(size_t offset)void tick(size_t offset)
- 以下の4つ
- 特定の関数をimportして利用することも可能である
int32_t getRandomInt(int32_t min, int32_t max),void logFunction(int logLevel, unsigned int msgPtr, unsigned int msgLen),void shutdown(void)が用意されている
この条件では例えばGo(GOARCH=wasm などの場合)、そしてRuby.wasmではちょっと難しいかもしれません。また、WASM GCの環境に依存した言語だと動くブラウザと動かないブラウザが出てきそうに思います。
公式のサンプルでは以下の言語が用意されています。
- C
- Rust
- Zig
- AssemblyScript
- tinygo
これらのサンプルをベースにコードを少しずつ変えて遊んでみることができそうです。WASMの素振りにも良い題材ではないでしょうか。
ところで、せっかくなので...
wasmbotsをRubyで遊ぶ手順を紹介しますね...。
*1:インタフェースの表現はC関数に合わせました