2024年06月22日
【ゲーム制作】テーブルゲーム 第11回
テーブルゲーム 第11回です。
前回考えたロジックを基にサブルーチンを組んでいきます。
まずは、今作最難関のサブルーチンのひとつ、場に裏返ったカードを並べ描画するサブルーチンです。
処理の考え方は、
・画面を場の色(緑)で塗りつぶし
・カードカウンタを0から開始
・カードカウントを13(横枚数)で割った商を縦座標とする
・割った余りを横座標とする
・縦座標に6を掛けた座標と、横座標に2を掛けた座標のVRAMアドレス算出する
・場ワークのカードカウンタ位置の値を調べ「0」(取得済)ならば描画無し
・「0」でなければカードありとし、カード裏側を描画
・カードカウンタを+1し52枚分繰り返し
なかなか、難しそうです。
まず準備として、場ワーク(52バイト)を用意。
最後の&HFFは場ワークの終わりフラグ。
次に裏返ったカードのキャラクタデータを用意。
次に場を緑のキャラクタで埋めるサブルーチン。
最後に、裏返ったカードを並べ描画するサブルーチンです。
プログラムが組めたのでテストします。
場ワークがすべて「0」では何も表示されないので、仮でオール「1」設定。
うーん、なかなか手ごわい!
上手く動いてくれません…。
試行錯誤の上、なんとか無事動くようになりました!
単純なミスでした…。
ロジック考えるのに凄い時間かかりました…。
次回もサブルーチンの続きです。
2024年06月21日
【ゲーム制作】テーブルゲーム 第10回
テーブルゲーム 第10回です。
今回はメインのマシン語設定プログラムを用意します。
メインのマシン語設定プログラム「BINSET.BAS」を用意します。
こちらもExcelで作成して、「.BAS」にコンバートして、「.BIN」ファイル作成。
今作のサブルーチンは、今まで作成したものの中から
■SPRITEセット
■FONTセット(上・中段、下段の2本)
■乱数発生
■16進数を10進数に変換
■VRAMアドレス計算
■中段画像表示画面セット(タイトル表示用)
■全SPRITEを隠す
■8ビット掛け算
■8ビット割り算
を用意します。
そして数字表示用に、
■数値表示(自分取得枚数、敵取得枚数、経過時間表示、場残枚数)
を作成。
これら以外のサブルーチン(主に描画関連)は新しく作成します。
次回は、各々サブルーチンを組んでいきます。
2024年06月20日
【ゲーム制作】テーブルゲーム 第9回
テーブルゲーム 第9回です。
今回はカードのプログラム処理について考えます。
ロジックを構築していく上での基となる設計です。
この辺りを先にしっかり決めておかないと、後で大変な目に合う…。
まず、場にあるカードについて。
これは、メモリ上に52バイトのメモリを用意しておき、そこにカード種を設定します。
この「場ワーク」値をそのまま画面に描画します。
設定値は、1バイト=8ビットなので、前から1ビット目が1回でも開いたかどうかフラグ、2・3ビット目が記号、後ろ5ビットが数字です。
設定値「&H00」はカードなし(取得済み)です。
設定値の種別・範囲は、
・オープンフラグ 0:未開 1:既開
・記号 0:スペード 1:ダイヤ 2:クローバー 3:ハート
・数字 1〜13
・オール0 カード取得済み
となります。
次にカードの描き方。
カードは左から、縦に4枚6FONTずらして、横に13枚2FONTずらして描いていきます。
こうする事で特に重ね合わせ処理をせずとも、勝手にカードが重なった状態になります。
次にカードを捲った時。
カードを捲ると、一度全サイズ(6FONT×4FONT)のカードが表示されます。
数字を覚えたら、ボタン打下で次のカード選択になります。
その時、1枚目捲ったカードの真右のカードが残っていれば、右2FONT分カードを重ねた状態で表示します。(そうしないと選択する際、そのカードが有るかどうか分らない。)
次回は、この設計を基にサブルーチンを組んでいきます。
2024年06月19日
【ゲーム制作】テーブルゲーム 第8回
テーブルゲーム 第8回です。
今回は走査線割込み処理を組んでいきます。
前作同様、Excel上で走査線割り込み内での処理をプログラミングします。
Excelから「.BAS」にコンバートして、「.BIN」ファイル作成。
今作ではSPRITE利用は2枚のみですので、「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」処理要らないので削除。
その代わり、今作は「経過時間」を表示するので、その処理を行います。
カウンタを3つ用意。
タイムカウンタ(&HE004)、秒カウンタ(&HE005)、分カウンタ(&HE006)です。
割り込みが掛かるたびにタイムカウンタを+1します。
走査線割り込みは60分の1秒、よってタイムカウンタが60になると1秒なので、秒カウンタを+1します。
当然、秒カウンタが60になると分カウンタを+1します。
「経過時間」の表示はメインルーチン内で行います。
走査線割り込みルーチン。
BGM演奏ルーチン(通常版)。
この2つは前作のものをそのまま流用。
次回は、メインのサブルーチン集を組んでいきます。
2024年06月18日
【ゲーム制作】テーブルゲーム 第7回
テーブルゲーム 第7回です。
今回は、FONTキャラクタを作成します。
FONTキャラクタの作成には「FONT EDITOR」を利用します。
前回作成したデザインを基にFONTを描いていきます。
うーん、まぁまぁいい感じになったのでないでしょうか?
凝ったトランプのデザインにするにはMSX1ではきついな…。
せめて、横5FONTあれば、中央横3FONT×縦4FONTでトランプっぽいデザインは出来ると思いますが、今作みたいに横4FONTだと記号が潰れてしまい逆に見難くなってしまう…。
横5FONTでも、なんだかチープ…。
やるとしたら全52枚+JOKERのグラフィックデータをメモリ上に格納しておき、横5FONT×縦6FONTのキャラクタに直接FONT設定するかくらいすれば、それなりには見えると思いますが…。
まぁ、次作ることがあればその時考えます。
次回は「走査線割り込み」処理を組んでいきます。
2024年06月17日
【ゲーム制作】テーブルゲーム 第6回
2024年06月16日
【ゲーム制作】テーブルゲーム 第5回
テーブルゲーム 第5回です。
今回はイメージディスクを作成します。
さて、プログラミングを開始しますが、今作は部品的なサブルーチンはそのままですが(掛け算、割り算など)、画面周りのサブルーチンが前作までとはガラッと変わりますね。
イメージディスクを用意します。
今作もマシン語設定プログラム(「BINSET.BAS」)は、Excelからコンバートするので要りません。
メインのBASICプログラムを前作「PZL.BAS」の名前変えて「TBL.BAS」とします。
走査線割込み処理のロジックも、Excelからコンバートするので不要。
他には「AUTOEXEC.BAS」と、初期値を作成するための、「BINSETIN.BAS」と「BINSETI2.BAS」も入れておきます。
残りは、エディター使って新たに作成します。
4ファイルだけでイメージディスク作成。
「TBL.BAS」のほとんどをコメントで潰してテスト実行できる準備を進めておきます。
次回は、SPRITEキャラクタを作成します。
2024年06月15日
【ゲーム制作】テーブルゲーム 第4回
テーブルゲーム 第4回です。
今回はメモリマップを作成します。
前回設計した内容に沿って必要なメモリ振りをします。
アドレス | データ名 | 備考 |
B000〜BFFF | BGMデータエリア | 4,096バイト |
C000〜CFFF | マシン語エリア | 4,096バイト |
D800〜DAFF | 走査線割込み処理マシン語エリア | 768バイト |
E000〜E0FF | 変数エリア | 256バイト |
マップがないので、こんな感じになります。
スッカスカですね。
ただ、使う予定のBGMデータが大きそうなので、大きくエリアを確保しました。
FONT、SPRITE共に描き変える必要がないので、データ読込エリア(&HB000~&HBFFF)は最初に設定してしまえば後はフリーです。
次回は、メインプログラムを用意します。
2024年06月14日
【ゲーム制作】テーブルゲーム 第3回
テーブルゲーム 第3回です。
今回は詳細設計の画面構成を考えます。
詳細設計で決めたサイズと方法でカードを配置していきます。
こんな感じ。
おぉ、良い感じではないでしょうか?
この配置がいけるなら、「7並べ」も行けそうですね。
両サイド2FONTずつ余る(MSX画面横サイズ32FONT−(12枚×2FONT+4FONT)=4FONT)ので、右サイドに寄せます。
その空スペースを利用して、インフォメーションを表示。
上から自分が取った枚数、CPU(相手)が取った枚数、経過時間、場の残り枚数となります。
なぜ経過時間を表示するかと言うと、神経衰弱なので「タイムアタック」できた方が良いかな?と考えたからです。
次回は、メモリマップを作成します。