3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

本郷学園マイコン部Advent Calendar 2023

Day 17

【GBA開発】ButanoとC++でGBAのゲーム開発に挑戦してみた話 #1

Last updated at Posted at 2023-12-14

この記事は本郷学園マイコン部 Advent Calender 2023 17日目の記事です。

お久しぶりです。UHAsikakutouです。
98エミュの使い方を載せてからはや数年、完璧にQiita投稿へのモチベーションが無くなっていました...
今回からは、皆さんおなじみゲームボーイ アドバンスのゲームを初心者が0から作っていく話を書いていきたいと思います。よろしくお付き合いください。
今回は環境構築からやっていきたいと思います。(本質とは関係ないのにミスすると一貫の終わり)

動機

  • GBAのゲーム作ってみたい!!
  • C++書けるようになりたい!

です()
AIに淘汰されないツヨツヨエンジニアになるためには最低限の低レイヤ技術は必須かな〜という思惑もあります。

筆者のスペック

ご参考までに。

PC環境

メイン機 持ち運びノート
型番 (自作) MacBook Pro
(13-inch,M1)
CPU Core i7-13700K Apple M1
GPU RTX 3060 (12GB) Apple M1 (8コア)
RAM 64GB 16GB
OS Windows 11 Pro macOS Sonoma

プログラミングスキル

  • Python,Ruby,JSなど比較的高級な言語を「完全に理解した」(一通り触れるだけ)
  • CやC++はほぼ初心
  • メモリ管理?アセンブリ?ナニソレオイシイノ (勉強中です)

ライブラリの選定

では開発の話から入っていこうと思います。
GBA開発を思い立った私は、早速Google先生に「GBAのいいライブラリない?」とばかり聞いてみました。
image.png
Wow.
なにやら良さげなものが。

Butano

Butano は、Game Boy Advance 用のモダンな C++ 高レベルエンジンです。

機能

  • わずか 1 行の C++ コードで、スプライト、背景、テキスト、ラスタエフェクトなどを作成して表示できます
  • ETL をベースにしたヒープ割り当てや例外を使用しないカスタム標準ライブラリを採用しています
  • 独自の資産を 簡単に インポートして使用できます
  • アサート、エミュレータロギング、コードプロファイリングなど、複数の開発ツールを提供しています
  • 共有所有権や RAII など、モダンな C++ の概念に基づいています
  • 詳細な ドキュメント が用意されています
  • エンジンのほとんどの側面を網羅した複数の 例 が用意されています
  • このプロジェクトには、2 つの完全なゲーム (Butano Fighter と Varooom 3D) のソースコードとアセットが含まれています

Google Bardによる翻訳

最終コミットは執筆時点で12h前。コミュニティは活発なようです。

ドキュメントも用意されています。

というわけでこれを試してみることにしました。

早速環境構築していくことにします。

環境構築

環境構築に関してはこちらのページに書かれています。
早速これに沿って進めていくとしましょう。

Butano is built on top of the devkitARM toolchain, so it supports Windows, macOS and Unix-like platforms.
ButanoはdevkitARMツールチェーンの上に構築されているため、Windows、macOS、Unix系の環境がサポートされています。

Deeplによる翻訳

devkitARMとは?
devkitProは、GBAやNintendo DS、PlayStation Portableなどのゲーム機で実行可能なソフト開発のためのツール群です。
中でもdevkitARMはGCCベースの、DS/DSi/GBA用のクロスコンパイラとなっています。
本来であればdevkitARMさえあればゲームを作ることはできるのですが、Butanoはさらにそれを簡単にしてくれるようです。(オイ低レイヤどこいった)

用意するもの

  • GBAのエミュレータ
  • DevKitARM
  • Python
  • お好きなエディタ

GBAエミュレータ

まずは、ビルドしたGBAのゲームを手軽に実行できる環境が必要です。
そのためにエミュレータを導入します。

私はWindowsではmGBA、MacではVisual Boy Advanceを元から使っていたのでそのまま使用しました。
RetroArchを使用している方はGBAのコアを使用されると良いと思います。

devkitARM

Windows

こちらからインストーラを落としてください。
image.png
https://gvaliente.github.io/butano/devkitpro.png

インストール時はGBA Developmentを選択します。(他に開発したいものがあれば合わせてどうぞ)
さらに何をインストールするか尋ねられた場合は、gba-dev内の全てのものを選択してください。

macOS

devkitPro用のパッケージマネージャである(本来はArch Linux用ですが...)Pacmanをインストールし、そこからGBAの開発コンポーネントをインストールします。

ダウンロードした.pkgファイルを実行します。
インストール先は/opt/devkitpro/pacman/binです。パスを通しておいてください。

インストールができたら、

Terminal
$ sudo pacman -S gba-dev

を実行してください。

Linux

同じくpacmanをインストールします。
環境がないためコマンドをここより転記します。

Terminal
$ wget https://apt.devkitpro.org/install-devkitpro-pacman
$ chmod +x ./install-devkitpro-pacman
$ sudo ./install-devkitpro-pacman
$ sudo pacman -S gba-dev

This should also work on WSL but a symlink may need to be created first.
これはWSLでも動作するはずですが、最初にシンボリックリンクを作成する必要があるかもしれません。

Terminal
$ sudo ln -s /proc/self/mounts /etc/mtab

(Deeplによる翻訳)

Python

Butanoの動作にはPythonが必要です。
ググればインストール方法は大量に出てくるので省略します。
バージョンは古いかもしれませんがmacOSやLinuxの多くでは初期状態で入っています。

お好きなエディタ

自分の気分がアガるお好きなエディタでどうぞ。
初めての方はVSCodeが一番無難かと。
エディタ名 c++ などでググればC++用の設定方法などがわかると思います。

Butanoを入れよう

用意は終わりましたので、Butanoを入れていきましょう。

Gitをお持ちの方はClone、
そうでない方はこちらから最新のZipファイルをダウンロードして展開してください。

ただこのリポジトリに全ての例が入っていますので、フォルダ内でビルドしたり改変したりしてみたい場合はCloneせずにZipでダウンロードした方が安全かもしれません。

これで、準備は完了です。

動作確認

Butanoのインストール先に行きます。
Exampleフォルダ内にたくさんのサンプル・作例が入っていますので、一つ動かしてみます。
ここでは、文字を出すサンプルであるtextをビルドして実行します。
皆さんはお好みで好きなものをお選びください。(フォルダ以外は変わらないはずです)

Terminal
$ make -j8

コマンドmakeは、Makefileというファイルの情報を使ってC/C++のソフトをビルドするものです。
-j(数字)は、ビルドに使用するCPUのコア数です。自分のPCの環境と相談して調整してください。

すると、フォルダ内に

  • text.gba
  • text.elf

の2つのファイルが新たにできると思います。
早速.gbaのファイルをエミュレータで開いてみましょう。

image.png

この画面が出ていれば成功です!
お疲れ様でした!!

エラーが出たら

pythonがないぞ!!と言われたら

OSや環境によってはPythonのコマンドがPythonではなくPython3なことがあります。確認した上で、
Python3な場合は書き換えてください。

Makefile
(略)
  LIBBUTANO   :=  ../../butano
- PYTHON      :=  python
+ PYTHON      :=  python3
  SOURCES     :=  src ../../common/src
(略)

あとがき

執筆時点では海外ニキの素晴らしい動画に出会いその方のサンプルを改変しながら色々といじってみています。
書こうと思えばもっと書けるのですが、いかんせんAdvent Calenderに間に合いそうにないというのと、少し長くなりすぎたのと...で、今回の記事では環境構築までになってしまいました。
冬休みに入ったので、随時次の記事も投稿していければと思っています。

それでは皆さん、良きGBAライフを!

次回は、@scratch221171さんのUnityで機械学習ネタです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?