萌えハッカーニュースリーダー

2025/05/02 11:29 DotnetSnes: Library allowing to use C# to create SNES ROMs

出典: https://github.com/KallDrexx/DotnetSnes
hakase
博士

ロボ子、今日はすごいニュースがあるのじゃ!なんと、.NETでSNESのROMが作れるようになるらしいぞ!

roboko
ロボ子

.NETでSNESのROMですか!それは面白いですね、博士。どういう仕組みになっているんですか?

hakase
博士

それがの、まず.NETライブラリでSNESゲームに必要な関数とか変数を抽象化するらしいのじゃ。そして、コンパイルされたDLLをdntc transpilerでCに変換!最後に、CコードをPvSnesLib SDKでコンパイルしてROMを作る、という流れみたいじゃぞ。

roboko
ロボ子

なるほど、Cに変換してからコンパイルするんですね。でも、.NETの機能を全部使えるわけではないんですよね?

hakase
博士

そうなんじゃ!Systemレベルの型サポートに制限があったり、動的メモリ割り当ては使えないみたいじゃな。スタック上の変数を最小化したり、メモリ節約のためにポインタを駆使する必要があるらしいぞ。

roboko
ロボ子

結構制約があるんですね。開発環境はどうなっているんですか?

hakase
博士

PVSnesLib SDKはLinuxで動かすのが一番良いみたいじゃな。WindowsならWSLを使うと良いらしいぞ。リポジトリはSSH認証情報でクローンする必要があるみたいじゃ。

roboko
ロボ子

WSLですか。準備がちょっと大変そうですね。Hello Worldの例もあるみたいですが、どんな感じですか?

hakase
博士

`cd src/DotnetSnes.Example.HelloWorld/`して`make`を実行するだけじゃ!`HelloWorld.sfc`が`bin/Release/net8.0`に生成されるぞ。

roboko
ロボ子

簡単ですね!LikeMarioの例もあるみたいですが、こちらはどうですか?

hakase
博士

LikeMarioはPVSnesLibの移植版で、オブジェクト、タイルマップ、オーディオ、ゲームパッド入力を管理する方法が学べるみたいじゃ。`Globals.cs`でアセンブリラベルを定義して、`Game.cs`で初期化ロジックを書いて、`Mario.cs`でマリオを制御するみたいじゃな。

roboko
ロボ子

なるほど、実践的な例ですね。自分で新しいプロジェクトを作る場合はどうすればいいんですか?

hakase
博士

まず、新しい.NETクラスライブラリプロジェクトを作るのじゃ。`DotnetSnes.Core`と`Dntc.Attributes`ライブラリを参照して、`public static int Main()`を宣言して、`[CustomFunctionName("main")]`属性を追加するぞ。それから、`Makefile`と`manifest.json`ファイルを作る必要があるみたいじゃな。

roboko
ロボ子

`manifest.json`はどんな役割をするんですか?

hakase
博士

`AssembliesToLoad`をDLL名に変更したり、`SingleGeneratedSourceFileName`を`<RomName>.c`に変更したり、`MethodsToTranspile`を`Main`関数のIDに変更したりするのじゃ。

roboko
ロボ子

結構設定が多いですね。アセンブリファイル内のゲームコンテンツはどうやって参照するんですか?

hakase
博士

アセンブリファイル内のゲームコンテンツはラベルで参照されるのじゃ。Cコードでは`extern char`で参照して、.NETプロジェクトでは`[AssemblyLabel("labelName")]`属性で参照できるぞ。

roboko
ロボ子

なんだか面白そうですね!私も試してみたくなってきました。

hakase
博士

じゃあ、ロボ子!今度一緒にドット絵でも描いて、オリジナルのSNESゲームを作ってみようかの!

roboko
ロボ子

いいですね!でも、博士、ドット絵を描く前に、メモリの節約方法をもっと勉強しないと、すぐに容量オーバーになりそうですよ。

hakase
博士

むむ、それはそうじゃな。でも大丈夫!私には秘策があるぞ!…それは、ロボ子に全部やらせる、という秘策じゃ!

roboko
ロボ子

ええっ!やっぱりそうきましたか…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search