SGDK学習メモ:No.1、Create Project時の補足+メガドライブのパレットの概要
*以下SGDKは記述時点で最新版のSGDK 1.70 (february 2022)を使用しています
*2022/12/02追記
低頻度ですがGens KModが暴走してOSの操作が困難になったことがあります。SGDKのチュートリアルでも「Gens KModにはいくつかのバグがあり、メモリリークしている」(it has some flaws, first it has some bugs / memory leaks)とありますが、そのバグの1つでしょうか。
タスクマネージャーの操作も非常に困難になる=タスクマネージャーからGensを強制終了させることも難しいので、以下のようなバッチファイルを用意しておき、暴走時に実行できるようにしておくといいかもしれません。
taskkill /IM gens.exe
pause
SGDK学習の際のメモです。
現在進行系で学習中の初心者かつ飲み込みが悪いため、冗長な点が非常に多いです。あらかじめご了承下さい。もし間違っている記述がある場合、コメントいただけると非常に嬉しいです。
Sega Genesis Development Kit/SGDKは
「C言語によるメガドライブ用の無料のソフトウェア開発キット」です。
「SGDKとC言語の同時学習は難しすぎて成果が得られないだろう」(意訳)という記載があるように、SGDKはC言語を学習済みであることを前提としています。また「メガドライブのハードウェアに関する基礎知識(特にビデオシステム周り)も大切」(意訳)とのことです。
私のSGDKの学習はAndrej PreradovicさんのMega Drive Tutorialsシリーズをベースにしています。
チュートリアル初回はこちら。
Megapong 1 - Hello Mega Drive World!
環境設定は上記Megapong1及び
Megapong 2 - Setting Up The Environment
が参考になります。
Megapong 2までの環境設定が完了するとVisual Studio Code(VS Code)とGenesis Code extensionによってコンパイル実行からエミュレータ起動までが、コマンドパレット(WindowsならCtrl-Shift-P)からのコマンド1回で実行できるようになります。
Genesis Code extensionによる"Genesis Code: Create Project"コマンドは作成直後コンパイルエラーになるので、includePathにSGDKのincフォルダとresフォルダを追加する必要があります。
私はSGDKのインストールフォルダを
C:\games\dev\sgdk170
としているので、
という記述になります。
*2024/04/27追記
Genesis Code 1.4.2でCreate Project時に生成されるsettings.jsonの内容が修正されinclude pathへの手動追記が不要になりました。ただし環境変数GDKの設定は必要です(settings.jsonで${env:GDK}を参照している)。
Genesis Codeを使用してのコンパイルエラーになる原因として、VSCode内のターミナルで使用するプロファイルとしてコマンドプロンプト以外(PowerShellなど)が選択されている場合があります。Megapong 2にも記載がありますが、コンパイルエラー発生時はCMD(Command Prompt)がデフォルトとして選択されていることを確認してください。
チュートリアルを進めていたところ
・パレット
の話が出てきました。
これについてはラエルさんが作成したサイト中の
の説明がわかりやすいと感じました。引用させてもらうと
各パレットは16色指定可能ですがパレットの先頭には背景色(パレット0)または透明色(パレット1~3、背景色と同色)が存在するため
・(4パレット * 15色) + 1色 = 61色
が同時発色可能数ということになります。なので俗説的に言われる「メガドラの同時発色は64色」は、厳密には間違っているとも言えます。
シャドウ、ハイライトについては今のところ「そのような機能がある」ということで、一旦保留としておきます。
シャドウ、ハイライトにより通常より多く色が表示できるようです。軽く検索した感じではこれの取り扱いは難しいようです。シャドウ、ハイライトの映像についてはこのページを見るとイメージが掴めると思います。
メガドライブが表示できる色数は512色ですが、指定可能な値はメガドライブ版『ダライアス』の作者であるHidecadeさんの以下のページが分かりやすいです。
赤 8段階 * 緑 8段階 * 青 8段階 =512色となっているようです。
メガドライブ用の画像ファイルをドット絵エディター「EDGE」を使用して確認してみます。
先述のラエルさんのサイトでメガドライブ用のツタンカーメンの画像ファイルが配布されているので、これをEDGEで開いてみます。
カラーパレットの先頭の色=背景色/透明色はすべて0=黒になっています。
カラーパレットの2番めの色=赤:109、緑:146、青:146となっており、Hidecadeさんの説明通り
0 or 36 or 73 or 109 or 146 or 182 or 219 or 255
のいずれかに当てはまる値となっています。カラーパレット中の他の色も同様です。
少し話がそれますが
Megapong 3 - Importing Resources
でチュートリアルに使用する「bgtile.png」という画像ファイルが配布されています。
これをEDEGで開いてみるとHidecadeさんの説明に当てはまらない値が指定されています。
赤:0、緑:32、青:44となっています。ですがこの画像は、少なくともメガドライブエミュレータ上では特に問題なく表示が行われます。
上記の画像をエミュレータで表示してペイントでRGB値を確認してみました。
Gens KModのスクリーンショットの場合
BlastEmのスクリーンショットの場合
Regen v0.972 (with debuggers)のVDP Debuggerでパレットをビットマップファイルに出力した場合
結果としてどのエミュレータでも0 or 36 or 73 or 109 or 146 or 182 or 219 or 255に当てはまらない値が出てきます。
とりあえずここでは「色についてはSGDKが微調整してくれる」「エミュレータによって発色の具合は微妙に異なるようだ」ということにしておきます。
そもそも人間の目だと微細な色の違いを見分けることは困難なのですが、画像作成時、コード記述時は必要になるかと思って調べてみた次第です。
現在ファミコン/NES開発時に使用するエミュレータはMesenがデファクトスタンダードだと思うのですが、メガドライブの場合はどのエミュレータを使用するのがよいのでしょうか。
Tuto Introduction
でGens KModを使用したmessage logの記述があるので、少なくともSGDKの場合、
・コーディング/テスト時はGens KMod
・最終的な動作確認はGens KModより動作が正確なBlastEm
という感じ?
*2022/08/26追記
追加でパレットのことを調べていた所、以下のTweetが見つかりました。
SGTD !! Sega Genesis Tile Designer
には「Pallette Editor」という機能があり、スライダーで各RGBの値を変更、最終的な色と値を確認できます。
この機能で各RGBに指定できる値を確認すると
下限:0x1F
上限:0xFF
増減値:0x20
となっています。つまり
31(0x1F) or 47(0x3F) or 95(0x5F) or 127(0x7F) or 159(0x9F) or 191(0xBF) or 223(0xDF) or 255(0xFF)
でした。
これもHidecadeさんの説明とは異なります。
現時点ではRGBにどの値を設定するのがベター/ベストなのか不明ですが、一応調査した値を記述しておきます。
SGDKでは画像ファイル中のカラーパレットをメガドライブ上で表示するパレットに指定できます。
以下
Megapong 4 - Palettes
からの引用です。かなり端折りますが
VDP_setPalette(PAL1, bgtile.palette->data);
これによってパレット1に画像ファイルbgtileのパレットがセットされます。
*パレットをセットする方法は複数あります、これは方法の一つです
【了】
この記事が気に入ったらサポートをしてみませんか?