Rustで習作ゲーム作ったから公開するよ!

ゲーム制作はゲーマー誰しもあこがれるものだけど、
実際作るとなると結構苦労が待っているものだよね。

dodge_rock タイトル画面画像

今回、なんとかかんとか習作を一つ作り終えたので、
それを公開&裏話をしたいと思います。

スポンサーリンク

記事の要約

  • Rustでゲーム作った
  • LinuxからWindows向けのクロスコンパイルをした
  • ゲームダウンロードURL → dodge_rock_x86_64_windows

制作環境

要素 僕の環境
OS linux/openSUSE Tumbleweed
プログラム言語 Rust
ゲームエンジン ggez

完成品だけを見ると、ツクールウディタ
楽に実現できたなあ……とは僕も思うけど。

linuxだとwine使わなきゃこれらは動かないし。
一度、自前プログラムでゲーム制作もやってみたかったし。

 

とりあえずゲームは完成したから良しとしてます。はい。

Rustの特徴

現状の僕の認識をそのまま言えば、Rustは「モダンなC++」かな。

「厳格で正確なコンパイラ先生のしもべとなって、
強制的に正道を進ませられる言語」といったほうがいいかもしれない。

 

Rustはコンパイラがめちゃんこ厳しいから、
「コンパイル通ったけど挙動が変だ」ってのが起きにくいの。

それでいて、(プログラマがやらかさなければ)
C++と同じくらい速い。場合によってはC++より速い。

 

また、移植性も(Javaなどにはさすがに劣るけど)悪くない。

環境依存の強いライブラリを使用していなければ、
クロスコンパイルも十分視野に入ってくる……。

 

とまあ。

一に実行速度、二に移植性が求められるゲーム制作には
Rustはすごく向いてるのだ……と主張する人は多い。

ワイトもそう思います。

ggezの特徴

ggezはウィンドウ描画やキーインプット取得など、
システム低層をカバーしてくれるRust製ゲームエンジン。

Rust製ゲームエンジンには他にPistonAmethystなどがあるけど、
ggezは2Dゲームに特化していて、シンプルで扱いやすいAPIが特徴。

 

一番面倒でムズかったりするシステム低層はやりたくない、
けどそれ以降はなるべく自分で作りたい。

そういうタイプのワガママさん――つまり僕には向いていた。

制作にあたって目指した部分

作り始めた時から目指していた部分はこのあたり。

  • シンプルなミニゲームであること
  • 上から敵が降りてきて、自機が当たるとゲームオーバーになること
  • windowsPC向けバイナリを用意すること
  • 言語切り替え機能をささやかでも用意すること
  • 手早く完成にこぎつけること

最初の予定にはなかったけど、
楽に実装できそうだから追加した部分はこのあたり。

  • ゲームパッド対応
  • 押している間低速移動する機能
  • ゲームオーバー時のスコア表示機能

手っ取り早い完成のためにオミットした部分はこのあたり。

  • BGM/効果音再生機能
  • 敵バリエーション
  • 自機の特殊攻撃(ブーストとかボムとか)

完成物は世にあふれるゲームからすると素朴、
というかぶっちゃけしょっぱい習作ゲーになったけど。

いちおう目指していた部分にはたどり着けたので、
ひとまずの完成としたの。

言語切り替え機能

以前に海外ノベルゲーの翻訳方法を調べたときから、
僕は「今の時代のゲーム制作者は、すべからく翻訳のことを考えておくべき」
なんだろうなあと考えていてね。

しょっぱい習作ゲーだとしても、
言語切り替えのための機能は必ず入れたかった。

 

この習作ゲームにおいては、
game_config.tomlから翻訳フラグを入り切りできるようにした。

is_translateフラグがtrueの場合にのみ、 同じく指定された翻訳データフォルダが使われる。

 

もし翻訳データフォルダにゲームアセットと同名ファイルがあれば、
ゲーム本体は翻訳データ側のファイルを読み込んで使用する。

……という仕様。
これについては、Renpyの仕様の(劣化させた形での)真似。

 

次にゲーム作るときは、もう少し洗練された言語切り替えシステムにしたいなあ。

LinuxでWindows向けバイナリをビルド

ここ、ちょっと苦労した。
これが理由で公開できないかとも思った。

 

Rustは公式で「別環境向けのツールチェイン」を
楽に導入する手段……rustupを出してる。

なら「ツールチェインを導入してビルドでオッケーじゃん!」
とはならないんだな、これが。

 

win向けexeを作ったり、mac向けmach-oを作ったりには、
その環境向けのlinkerが必要。

僕は今回mingw64を使って
Windows向けクロスコンパイルをしました。

 

まあなんかそれ原因の問題起きてるかもだけど、
一応はWindowsでも動いてくれてる……っぽい。

ゲームのダウンロード

win32bit向けコンパイルも試してみたけど、失敗しちゃった。ごめーんね。

mac向けコンパイルは僕がOSX SDK持ってない関係上無理でした。ごめーんね。

 

linuxについても、openSUSE用のバイナリなら用意できるけど、
ubuntuとかだとglibの関係で動かなかったりなので、無しの方向で。

dodge_rock githubリポジトリでソースコード公開してるので、
興味が出た方はビルドしてみてね。