2023年08月21日
大須
4月になり専門学校に通い始め、通学にも慣れだした頃。
せっかく名古屋という都会に来ているんだしと言う事で、友人と電気街と名高い「大須」に遊びに行きました。
名古屋駅と学校の最寄り駅の間にあるから、途中下車するだけなんですけど…。
そこで田舎者の私と友人は、驚愕しました。
なんとパソコンの専門店がずらりと並んでいるし、パソコン専門の中古販売店もある。
しかもパソコンソフトも大量に売っているし、ソフトの中古店まである!
田舎ではスーパーファミコンなどのゲームの中古は売っていても、PCソフトの中古はほぼ見たことがありませんでした。
今では当たり前かもしれませんが、当時の私たちはとてつもない衝撃を受けました。
パソコン大好きな私にとっては正しく「パラダイス」でした。
もちろんパソコン周辺機器や消耗品の品揃えもよく、この時「ノーブランド」のフロッピーディスクを初めて知りました。
安い!(1枚100円)
でも、気を付けないと、10枚セットで買っても、1〜2枚は必ず不良品がある。
しかも返品不可。
それでもブランド品買うよりはるかに安く、愛用していました。
それから2年間、ほぼ毎週のように大須に通う事になったのでした。
2023年08月20日
MAP16 EDITOR 活用方法A
「MAP16 EDITOR」で作ったデータの活用方法、そのAです。
「MAP16 EDITOR」の最大のメリットは、「MAP8 EDITOR」に比べ、同じメモリ容量で4倍の広さのマップを表示できるところです。
あと、通常ゲームの基本となる16×16キャラクタを配置するのが「MAP8 EDITOR」では、かなり面倒ですが、「MAP16 EDITOR」だと簡単です。
前回、「MAP16 EDITOR」で作成したデータの、全画面キャラクタスクロール(16ドット)版のサンプルを公開しました。
そのサンプルでも、スクロールしない画面切り替え型のパズルゲームや、アクションゲーム等には問題なく使えます。
ただ、やはりドラクエタイプのロールプレイングゲームが作りたいと思った時、最低でも1FONTスクロール(8ドット)であって欲しいですよね。
と言う訳で、今回は表示範囲指定可能な8ドットスクロール版のサンプルを公開します。
「M16SMPL2.BAS」【ダウンロード】
自作プログラムに組み込むには、下記の部分が必要です。
8ドットずらして表示するためには、各アドレスに任意の値をセットしてサブルーチンコールして下さい。
このプログラムでは、最も時間のかかるであろうマップ表示部分をマシン語で組んでいます。
「MAP16SC8.BIN」(70行)
下記機能を提供します。
マシン語アドレスを変えたい人用に、MAP16SC8.BIN作成用のBASICプログラムを用意しました。
起動すると、MAP16SC8.BINを作成します。
「MAP16SC8.BAS」【ダウンロード】
いやはや、なかなかに苦労しました…。
昔に「MAP16 EDITOR」で作成したマップデータを使って作っていたゲームは、全画面のドラクエタイプのロールプレイングゲームでした。
だから気付きませんでしたが、上下スクロールで8ドットずらして表示した時、表示範囲の上下に残りの8ドット分が表示されてしまうバグがなかなか直らず、苦労しました。
おかげでマップ表示のロジック結構長くなったなぁ…。
まぁ、あまり時間かけてる余裕がなかったので、短縮化は図っていません。
「MAP16 EDITOR」の最大のメリットは、「MAP8 EDITOR」に比べ、同じメモリ容量で4倍の広さのマップを表示できるところです。
あと、通常ゲームの基本となる16×16キャラクタを配置するのが「MAP8 EDITOR」では、かなり面倒ですが、「MAP16 EDITOR」だと簡単です。
前回、「MAP16 EDITOR」で作成したデータの、全画面キャラクタスクロール(16ドット)版のサンプルを公開しました。
そのサンプルでも、スクロールしない画面切り替え型のパズルゲームや、アクションゲーム等には問題なく使えます。
ただ、やはりドラクエタイプのロールプレイングゲームが作りたいと思った時、最低でも1FONTスクロール(8ドット)であって欲しいですよね。
と言う訳で、今回は表示範囲指定可能な8ドットスクロール版のサンプルを公開します。
「M16SMPL2.BAS」【ダウンロード】
自作プログラムに組み込むには、下記の部分が必要です。
行番号 | 内容 | 説明 |
70 | MAP16SC8.BIN | FONT単位マップ表示マシン語プログラム |
160〜230 | マップ表示値指定 | 画面に表示する際の座標と、表示する縦横幅、マップ全体の縦横幅、表示する左上の座標を指定 |
300 | マップ表示サブルーチン | マップ表示値を指定し、300行のサブルーチンをコールするとマップを表示するサブルーチン |
8ドットずらして表示するためには、各アドレスに任意の値をセットしてサブルーチンコールして下さい。
方向 | アドレス | 設定値 |
上 | &HC004 | &HFF |
右 | &HC005 | &H01 |
下 | &HC004 | &H01 |
左 | &HC005 | &HFF |
このプログラムでは、最も時間のかかるであろうマップ表示部分をマシン語で組んでいます。
「MAP16SC8.BIN」(70行)
下記機能を提供します。
実行アドレス | 機能 | 詳細 |
&HC0E8 | マップ表示 | 指定されたマップ表示値から表示される先頭アドレスを算出しマップを表示する 最大16キャラクタ×12キャラクタ |
マシン語アドレスを変えたい人用に、MAP16SC8.BIN作成用のBASICプログラムを用意しました。
起動すると、MAP16SC8.BINを作成します。
「MAP16SC8.BAS」【ダウンロード】
いやはや、なかなかに苦労しました…。
昔に「MAP16 EDITOR」で作成したマップデータを使って作っていたゲームは、全画面のドラクエタイプのロールプレイングゲームでした。
だから気付きませんでしたが、上下スクロールで8ドットずらして表示した時、表示範囲の上下に残りの8ドット分が表示されてしまうバグがなかなか直らず、苦労しました。
おかげでマップ表示のロジック結構長くなったなぁ…。
まぁ、あまり時間かけてる余裕がなかったので、短縮化は図っていません。
2023年08月19日
作品LGARAXY WARS
次はこれ。
レトロゲーム「GALAXY WARS」です。
こちらも友人の依頼で懐かしいゲームを真似て作りました。
ホントに懐かしい。
エンドレスなゲームなので、目標にするためにあえてエンディングを付けました。
レトロゲーム「GALAXY WARS」です。
■主な新テクニック
・FONT常時点滅処理
・衝突部位による点数判定
・FONT常時点滅処理
・衝突部位による点数判定
こちらも友人の依頼で懐かしいゲームを真似て作りました。
ホントに懐かしい。
エンドレスなゲームなので、目標にするためにあえてエンディングを付けました。
タイトル | 『 ギャラクシーウォーズ 』 | 作品 | 12 | |
内容 | 侵攻してきた敵機を撃退して下さい。 | |||
操作方法 | 起動し、しばらくしてタイトルが表示されたら、「スペース」バー若しくはAボタンでゲーム開始 開始させたコントローラーで操作します 発射台に自機が表示されたら、いいタイミングで「スペース」バー若しくはAボタンで発射 「←」「→」カーソル若しくは十字キーで、自機移動 「スペース」バー若しくはAボタンを押し続けると加速 | |||
対応機種 | MSX1、MSX2、MSX2+ | 製作年 | 1989年 | |
ダウンロード | リンク先へ | ジャンル | シューティング | |
ライセンス | ギャラクシーウォーズはユニバーサルエンターテインメントの登録商標です。 |
※ゲーム内のキャラクタ、音楽は制作当時の物です。 公開前提に製作していないため、雑誌等から流用している物もあるかも知れませんので、著作権侵害の恐れのあるものは、ご連絡をお願いします。 |
2023年08月18日
入学式
2023年08月17日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第10回
3Dダンジョンロールプレイングゲーム第10回目です。
今回は、前回設定した表示ワークの内容を表示する順番と条件を考えます。
以前に書いたパターン番号で説明します。
プレイヤーに近い順に壁があるパターンを優先して描画していきます。
まず、Vのパターン。
1歩前に壁があるパターン。
この場合は、UVWを壁描画し、X描画に飛びます。
次、2歩前が壁があるパターン。
あとは、壁がないパターン。
次はWのパターン。
1歩前右に壁があるパターン。
あとは、壁がないパターン。
次はUのパターン。
Wのパターンの左右逆に同じです。
次はXのパターン。
左に壁があるパターン。
壁描画し、T描画に飛びます。
左に壁がなく、その1歩前に壁があるパターン。
あとは、壁がないパターン。
最後Tのパターン。
Xのパターンの左右逆に同じです。
描画条件、描画順も、ほぼこのままで大丈夫です。
それ以外のパターンは、ダンジョンの構造上発生しません。
と言うか、発生しないような構造にしました。(奇数行と奇数列を壁とするダンジョン。)
次回は、今回考えたロジックに則った描画ルーチンを組みます。
2023年08月16日
細かく修正H
「ゲーム製作」カテゴリは、主としてゲーム製作関係の記事を扱うカテゴリです。
しかし、開発全般の記事を扱っているため、ツールや、サンプルプログラム等の記事も入ります。
当初それらの記事は少ないだろうと思っていたのですが、現状、かなりの記事数になっております。
しかも、ツールやサンプルプログラム等の記事は、「ダウンロード」から選択可能ですが、「3Dダンジョンロールプレイングゲーム」製作関係の記事だけを読むのが難しい状態です。
そこで、上のリンクを「3Dダンジョンロールプレイングゲーム」のすべての記事の開始位置と終了位置に追加しました。
これで「3Dダンジョンロールプレイングゲーム」の製作記事のみを連続で読むことができるようになります。
「ダウンロード」に追加で新規公開したゲームやツール、サンプルの記事へのリンク追加、「Laboratory」テーマメニューの公開分記事へのリンク追加。
それ以外は、画像の貼り直しや、記事の誤記の修正程度です。
2023年08月15日
卒業
高校を卒業しました。
MSXに始まり、MSXで終わった高校生活でした。
3年間の学生時代なんて、皆さんもそうだったと思いますが、嬉しい事も、楽しい事も、悲しい事も、悔しい事もありましたが、過ぎ去ってみればあっという間。
今となってはいい思い出です。
因みにパソコン同好会の会長は、私が決めずに1年生3人で決めるよう引き継ぎました。
3人ともパソコンを持っていないし、当然プログラミングもできない。
でも、部活開催日には3人揃って毎回出てきてくれてたので、優劣付け難く決められなかったというのが正直なところです。
その後どうなったかは残念ながらわかりません。
今まで通り、おしゃべり同好会でも良いので続けてくれてると嬉しいな。
4月からは電車で遠路はるばる名古屋の専門学校に通うことが決定しました。
なぜか高校の友人も一人、同じ専門学校の2年コースに通うことになり、寂しさもありません。
(私がその専門学校に行くと言ったら、「じゃぁ俺も!」って決めたみたいです…、いいのかお前!?)
それとこっちは本当に偶然ですが、私の中学の時の友人が同じ専門学校の3年コースに居ました。
凄い偶然!
専門学校はたった2年間ですが、この時は「都会へ行く」と言う事も含め、希望と期待に満ち溢れていました。
私の選んだ専門学校は、情報処理技術者資格の取得をメインに学習する学校ですので、当然プログラミングが必須となります。
今まで私と同レベルにプログラムを組める人と会った事がなかったので、「きっとプログラミング仲間がたくさんいる!」と勝手に期待に胸を膨らませていました。
2023年08月14日
本格的BGM演奏ルーチン
以前、Laboratoryにて簡易BGM演奏ルーチンを公開しました。(2023年7月13日記事参照「Laboratoryテーマ14「簡単にBGMを鳴らしたい」」)
「簡易」と付いているからには、「本格的なのはなかったの?」と言う質問もあると思います。
実はあったのです。
前回、「この機能はありません」と言った機能をすべて搭載した優れものでした。
【機能一覧】
コマンド | 意味 | ||
T | テンポを設定する。(1〜255)【例】T150 | ||
V | ボリュームを設定する。【例】V13 | ||
) | ボリュームを1上げる。 | ||
( | ボリュームを1下げる。 | ||
S | エンベロープ形状指定。(0〜15)【例】S5 | ||
M | エンベロープ周期指定。【例】M1000. | ||
{、} | 連符。【例】{4CDD}(3音を4分音符の長さで奏でる。) | ||
[、] | ループ。(1〜9)【例】[3CCDCCDCCD]([、]間を3回ループし3回目で抜ける。3重まで可。) | ||
! | スタッカート。【例】C4!(Cを32分音符で鳴らし、8分音符+16分音符+32分音符の間、無音。 |
※ タイ・スラーは付けずとも勝手に繋がるので機能なし。
なぜ使っていないか?
理由はいくつもあります。
例えば、ゲーム制作仲間の作曲担当が「MuSICA」使いだった事。
「MuSICA」以外にも優秀なツールが沢山出回っていた事など。
中でも決定的なのは、「私が作曲した曲は、これだけの機能が要らなかった。」事です。
機能を使わないのに、プログラムが非常に長いこのルーチンを使うメリットは何もなかったのです。
因みにBGMデータはMMLをコンパイルせず、MMLのまま演奏可能でしたので、BGMデータは多少短くて済みました。
結局日の目を見る事がなかったルーチン、また機会があれば公開するかも?(要らんか…。)
2023年08月13日
ハンドアセンブルについて
ハンドアセンブルの弱点として、飛び先指定の大変さを以前に書きました。(2023年6月1日記事参照「ハンドアセンブル」)
そこで、私はプログラム上で計算し易いように工夫をしています。
何をしているかと言うと、自作サンプルを見ていただければ一目瞭然。
1行のDATA文にコードを8バイトしか書かないようにしています。
1行が8バイト、16進数で&H08。
2行で16バイト、16進数で&H10。
要するにアドレスを数える際、2行毎に10、20、30…と数えてく訳です。(上に行く場合はF0、E0、D0…)
最後1行余ったら、8を加えます。
そして、右に1つ移動したら+1、左なら-1すると言うように数えます。
ただ、これでも問題があります。
1つのロジックを1ブロックとしていますが、1ブロックの最後の行、プログラム終了から次のブロックまでの間に「00」が入ります。
これは単純にプログラムを見易くするための工夫です。
しかし、言ってしまえば無駄です。
MSXのように容量が少なく、制約の多い機種ならなおさら。
しかし、これがあるおかげでロジック追加になった際、この空きを利用してジャンプ命令を入れられます。
うーん、でもアセンブラ使えばその辺の事は気にする必要はありません。(そもそもアドレス指定が不要。)
現状、プログラミングする際、ニーモニック(LD A,01、ADD 02等)を思い浮かべてそれをマシン語コード(3E,01、C6,02等)に変換しているので、アセンブラに移行するのはそれほど苦ではありません。
ただ、やはりアセンブラを起動して、マシン語プログラムをロードし、アセンブリしてから、BASICプログラムをロードして実行...までの手順が、手間に感じてしまう。
今なら全部BASICプログラムだけですからね。
うーん、今更やり方変えるのも面倒だしなぁ...。
まぁ、何か支障が出るまではこのままのスタイルでいきます。
そこで、私はプログラム上で計算し易いように工夫をしています。
何をしているかと言うと、自作サンプルを見ていただければ一目瞭然。
1行のDATA文にコードを8バイトしか書かないようにしています。
1行が8バイト、16進数で&H08。
2行で16バイト、16進数で&H10。
要するにアドレスを数える際、2行毎に10、20、30…と数えてく訳です。(上に行く場合はF0、E0、D0…)
最後1行余ったら、8を加えます。
そして、右に1つ移動したら+1、左なら-1すると言うように数えます。
ただ、これでも問題があります。
1つのロジックを1ブロックとしていますが、1ブロックの最後の行、プログラム終了から次のブロックまでの間に「00」が入ります。
これは単純にプログラムを見易くするための工夫です。
しかし、言ってしまえば無駄です。
MSXのように容量が少なく、制約の多い機種ならなおさら。
しかし、これがあるおかげでロジック追加になった際、この空きを利用してジャンプ命令を入れられます。
うーん、でもアセンブラ使えばその辺の事は気にする必要はありません。(そもそもアドレス指定が不要。)
現状、プログラミングする際、ニーモニック(LD A,01、ADD 02等)を思い浮かべてそれをマシン語コード(3E,01、C6,02等)に変換しているので、アセンブラに移行するのはそれほど苦ではありません。
ただ、やはりアセンブラを起動して、マシン語プログラムをロードし、アセンブリしてから、BASICプログラムをロードして実行...までの手順が、手間に感じてしまう。
今なら全部BASICプログラムだけですからね。
うーん、今更やり方変えるのも面倒だしなぁ...。
まぁ、何か支障が出るまではこのままのスタイルでいきます。
2023年08月12日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第9回
3Dダンジョンロールプレイングゲーム第9回目です。
今回は、プレイヤーの向きに対応した2Dマップデータを読み込み、表示ワークを設定します。
因みに3D表示のやり方は、人によっても、機種によっても、言語によってもやり方は千差万別です。
「この人は、こんなやり方なんだ。」程度に読んで下さい。
表示ワークへは、前回作った2Dマップからデータ取得します。
プレーヤーの向きに対して、@〜Gのポジションの地形を表示ワークに設定します。
例えば、前を向いている時は、下図のようにワークを設定します。
ワーク | @ | A | B | C | D | E | F | G |
壁 | 壁 | 壁 | 通路 | 通路 | 壁 | 壁 | 壁 |
左を向いている時は、下図のようにワークを設定します。
ワーク | @ | A | B | C | D | E | F | G |
通路 | 壁 | 通路 | 通路 | 壁 | 通路 | 通路 | 通路 |
この方法ですと、どこに移動しようと、どの向きだろうとワークさえちゃんと設定できていれば3D表示可能ですので、表示ルーチンは単純なものにできます。
次回は、いよいよ今回設定した表示ワークから、3D表示ロジックを考えます。