ぴゅう太G-BASICにおける、ゲーム制作の効率化手法

コンシューマゲームの開発において、開発およびデバッグ作業はPCのエミュレータ上で行い、実機での作業は最終的なチェックのみという手法がとられることは珍しくない。特に実機の性能が低い場合、メモリやパフォーマンスに余裕があるPCで作業したほうが効率的であることが多い。
ぴゅう太のG-BASICによるゲーム開発においても、エミュレータを使用することは非常に大きなメリットがある。

拙作「脱衣花札 ぎゃるかぶ!」を作成するにあたり、自作ツールを併用することにより、初代ぴゅう太(日本語BASIC)とmark2(英語BASIC)の両方に対応するための環境を構築した。
1.英語版G-BASICで、テキストエディタソースコードを記述(擬似的な英語BASIC)
2.1のソースコードから、実際に入力可能なBASICソースコード(英語と日本語の両方)に変換
3.英語版G-BASICでゲームを制作する。
4.英語版G-BASICのゲームが完成したら、日本語版にコンバートする

テキストエディタソースコードを記述

前述のとおり、実機のテキストエディタでは2行分しか表示されないため、ソースコードの下書きが必須である。G-BASICの書式に準拠してはいるが、一部自分が書きやすい書式で記述した。

  • 命令を小文字で記述(大文字で記述しても問題ない)
  • 「//」以降の記述はコメントとして無視する

// 定数
1 su1=1
2 su2=2
3 su32=32
4 s128=128
5 subk=728    // ブランクセル

// 初期化
100 hp=3
110 huku=su0
120 gsub 1000

// ハート初期化
180 for 200 i=536 to 600 32
190 cell(i)=cell(760)       // ハートセル
200 next

// 札クリア
210 for 250 j=527 to 751 32
220 for 240 k=1 to 8 1
230 cell(j+k-1)=cell(subk)    // ブランクセル
240 next
250 next

この擬似的なG-BASICを、実機で入力可能な文法に変換するツール「gbcacv.exe」を作成した。

(コマンド書式) gbcacv.exe source.txt

実行すると、source.txtから英語版と日本語版の両方のソースコードを生成する。
gbcacv.exeが行う処理は、おおよそ以下の通り。

  • 英小文字を大文字に変換
  • 英語と日本語BASICにおいて、一部順序が異なるものを変換
(例)
GOTO 10 → 10ニイケ

入力元のソースコードを書くにあたり、以下を注意する必要がある。

  • 余分なスペースを入れてはならない
☓ 
10 a = 0
○
10 a=0
  • for(マワレ)文において、STEP(カンカク)が1の場合でも、STEPは省略できない。
(例)
10 for 100 i=1 to 8 1

上記は、「マワレ100 I=1カラ8カンカク1」に相当する。
※「STEP」は記述しないこと。私の手元にある書籍には、日本語BASICの「カンカク」は英語だと「STEP」に相当するとの記述があるが、私が試した限りでは、STEPを記述するとエラーになってしまった。
もう一点、for文を記述する際に注意することがある。ループカウンタの初期値を0に指定すると、英語BASICでは実行できるが日本語BASICだとエラーになってしまうようだ。なので初期値は必ず1以上の値にする必要がある
※日本語と英語のG-BASICはどちらも同じだと思っていたが、まさかこんな違いがあるなんて!

英語版G-BASICでゲームを制作

グラフィックモードで絵を制作し、G-BASICモードに入ってから、ePyutaのメニュー「Control>Paste」で、クリップボードにコピーしたソースコードを自動的に入力することが出来る。
gbascv.exeで出力したソースコード「source.txt.en.txt」を入力し、実行する。
入力途中、もしくは実行時にバグを見つけたら、変換元のソースコードも同時に修正しておく。変換元ソースは後で使うため、バグが無い完全な状態に保っておく。

日本語G-BASICへのコンバート

英語版でゲームが完璧に動作することを確認したら、日本語G-BASICへの移植を行う。
ePyutaで保存したステートファイルでは、英語版と日本語版のデータに互換性はないが、グラフィックデータを保存しているアドレスは同じである。これを利用し、ステートファイル間でグラフィックデータのみをコピーするツール「CellEdit.exe」を作成した。

具体的な手順は以下の通り。

  • 英語版G-BASICで、ゲームの絵が完成した状態で適当な場所でステートをセーブする。
  • 日本語版G-BASICのグラフィックモードで、適当な場所でステートをセーブする。
  • CellEdit.exeを起動し、英語版→日本語版に絵をコピー

ここでいう「適当な場所」とは、具体的には全画面にグラフィックが完全に表示されている状態を指す。
(セルの編集画面や、コマンド入力メニュー等が表示されていない状態)
CellEdit.exeを起動し、コピー元、コピー先のステートファイルを指定し、「コピー実行」を押す。
この場合、セルとアニメのパターンはコピーされるが、アニメの位置と色はコピーされないので、これらは手動で設定する必要がある。

f:id:nicomonger:20180311035207p:plain

コピーされたステートファイルをロードし、グラフィックが正常に表示されることを確認したら、再度gbcacv.exeでソースコードの変換を実行する。変換元ソースがバグを取り除かれた完全な状態であれば、変換された日本語版ソースコードにもバグは無いはず。後はこれをG-BASIC入力モードでPasteすれば、自動的に日本語版のゲームが完成する。
注意点としては、日本語の自動入力を行う場合、オリジナルのePyutaではなく、たなむ氏(@tanam1972)がカスタマイズしたバージョンを使用する必要がある。以下のサイトからダウンロード出来る。

ぴゅう太の拡張スロットにRAM&ROMカートリッジをつないでみる その7 - tanamの日記

このバージョンでは、キー入力の^で英数モード、[でカナモードにそれぞれ移行することが出来る。拙作gbcacv.exeもその仕様に準拠している。

f:id:nicomonger:20180311042344p:plain

以上を準備することにより、制作物の規模にもよるが、頑張れば数日で1本のゲームが制作できるぐらいの環境を構築できた。
※このスピード感が子供時代にもしもあったなら…ベーマガにガンガン投稿して、原稿料をがっぽり稼げたのにw

拙作ツール

gbcacv.exe

http://www.motekin.net/pyuta/tools/gbca.7z

擬似的なG-BASICで記述されたテキストファイルから、日本語版と英語版の両方のソースコードを生成するためのツール。
厳密な構文解析をしている訳ではないので、正しく変換できない場合がありえます。その場合は、サンプルのソースコードの書き方などを参考にしながら記述を修正して下さい。

以下それぞれ、「脱衣花札 ぎゃるかぶ!」のソースコード
・オリジナル

http://www.motekin.net/pyuta/tools/galkabu.txt

・英語版の出力

http://www.motekin.net/pyuta/tools/galkabu.txt.en.txt

・日本語版の出力

http://www.motekin.net/pyuta/tools/galkabu.txt.jp.txt

※日本語版のコードは一見文字化けしているように見えるが、これは日本語版ぴゅう太のキー配列がPCと一部異なるため。(あと半角カナが含まれているため、Webブラウザからだと正常に見えないかも)

CellEdit.exe

http://www.motekin.net/pyuta/tools/CellEdit.7z

ステートファイル間で、グラフィックデータをコピーするツール。
「セルの一部のみコピー」チェックボックスをONにすると、指定した一部分のセルのみをコピーすることが出来る。
「縦横反転」チェックボックスをONにすると、コピー元とコピー先でセルの並び順を変える(横方向→縦方向)。これは拙作「脱衣花札 ぎゃるかぶ!」や、ベーマガに掲載された「ヤキュウケン」等において使用された、画像を見せないためのテクニックである。

※それぞれのツールについて、内容は無保証です。自由に利用していただいて構いません。
ソースコードのビルドにはVisualStudio2015を使用しました。

メモ

  • ePyutaでは、実機のカセットテープから読み込み可能なWAVファイルでセーブすることが出来るが、ロードは正常に機能しない
  • MAMEぴゅう太エミュレータでは、WAVファイルをロードすることが出来るが、ステートセーブが機能しないのと、ジョイパッドからの入力が正常に動作しないため、開発作業には向かない