2023年12月04日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第58回
3Dダンジョンロールプレイングゲーム 第58回目です。
今回は、システムメニュー最後の「まほう」処理を作成します。
「どうぐ」の「つかう」処理と同じで、戦闘時にも使いますのでサブルーチン化します。
「どうぐ」では、各用途(回復、状態異常回復など)のアイテムが1種類ずつなので直接アイテムnw定でロジック振り分けていましたが、「まほう」は同用途の魔法が複数存在する為、用途区分を持たせてロジックを振り分けるようにします。
魔法データの先頭1桁が、用途区分です。
0が回復、1が攻撃、2が状態異常回復、9が移動です。
魔法名の後がMP消費量、最低効果、効果加算値(乱数)となっています。
(「回復1」なら、回復値は10±0〜7です。)
まず、システムメニューから、「まほう」を選択。
何も習得していなければメッセージ表示。
習得魔法リストが開くので、唱える魔法を選択。
魔法を唱えます。
「回復」魔法です。
「毒消し」の魔法。
「戻る」の魔法。
フェードアウトし、スタート地点に戻ります。(店屋と宿屋に戻りたい時に使用。)
戦闘時は何も起こりません。
宿屋利用時のフェードと同じなので、余裕があれば別のフェード方法を組みたいと思います。
「攻撃」魔法です。
戦闘中以外は何も起こりません。
戦闘中は効果値を変数(&HD645、&HD646)に格納し、戦闘ロジック側でその値を攻撃値として利用します。
これで「まほう」処理完了です。
次回は、いよいよ戦闘を組んでいきます。
2023年12月03日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第57回
3Dダンジョンロールプレイングゲーム第57回目です。
ここらで再度ゲームの進捗状況の確認をします。
【ゲーム製作進捗】
工程 | 作業 | 進捗 |
1 | ゲーム設計(規模、詳細、メモリマップ) | 完了 |
2 | シナリオ作成 | 完了 |
3 | オープニグ作成 | 完了 |
4 | タイトル作成 | 完了 |
5 | マップ設計(2D) | 完了 |
6 | マップグラフィック | 完了 |
7 | 文字FONT | 完了 |
8 | タイトルFONT | 完了 |
9 | 3D表示 | 完了 |
10 | マップ内移動 | 完了 |
11 | システムメニュー(ステータス、セーブ) | 完了 |
12 | イベント発生処理 | 完了 |
13 | イベント設置 | 完了 |
14 | イベント進行 | 完了 |
15 | イベント移動 | 完了 |
16 | メッセージ表示ロジック作成 | 完了 |
17 | 独自スクリプト作成(全21種、制御コード3種) | 完了 |
18 | BGM作曲(ダンジョン、戦闘、エンディング) | 33%(ダンジョンのみ) |
19 | BGM演奏 | 完了 |
20 | 本番データ登録 | 完了 |
21 | 敵グラフィック(全8種) | 未 |
22 | 敵遭遇 | 未 |
23 | 敵戦闘 | 未 |
24 | レベルアップ | 未 |
25 | 道具屋(武器屋) | 完了 |
26 | 宿屋 | 完了 |
27 | エンディング | 未 |
28 | 道具 | 完了 |
28 | 魔法 | 未 |
29 | CONTINUE処理 | 未 |
結構進みました!
でも、「戦闘」が残ってるので、全体で50%位と言ったところでしょうか…。
経過した時間と進捗が比例していない…。
まぁ、トラブル続きでしたからね…。
難関部分である、「敵との戦闘」が手付かずですので、まだまだ先は長いです。
2023年12月02日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第56回
3Dダンジョンロールプレイングゲーム 第56回目です。
今回は、「まほう」処理作成前に、全てのデータの正式データの登録を行い、データ格納アドレスと容量を確定します。
アドレス | データ名 | 備考 |
9B00〜9CB4 | アイテムデータエリア | 23種類×19バイト=437バイト |
9D00〜9D4D | 魔法データエリア | 6種類×13バイト=78バイト |
9E00〜9EAF | 敵データエリア | 8種類×22バイト=176バイト |
9F00〜9FE7 | レベルアップデータエリア | 29レベル×8バイト=232バイト |
上記4種のデータを、アイテムデータ登録ツールの項目を増減させて改造し、各々の登録ツールを作成し登録していきます。
全て予定通りのアドレスに格納されました。
登録状況の確認をします。
メッセージデータの「IS(店屋)」でアイテム登録状況確認。
システムメニューの「まほう」で魔法登録状況確認。
システムメニューの「ステータス」の「つぎ」でレベル登録状況確認。
問題なく登録出来ています。
「敵」データの確認は、確認できるロジックを組んでからやります。
2023年12月01日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第55.5回
3Dダンジョンロールプレイングゲーム 第55.5回目です。
.5ですが、バグではありません。
前回、システムメニューの「どうぐ」の「つかう」処理を作成しました。
この「つかう」ロジックは、ほぼそのままの形で戦闘時にも使えます。
最初は、「戦闘時のロジックに全く同じものを組み込んでやればいいか。」と、思っていたのですが、ブログで公開している以上、それではあまりに「考えなしと思われかねないな。」と、思い直し「所持品表示〜所持品選択」部分と、「つかう」部分をサブルーチン化します。
「どうぐ」メニューが選択されたらサブルーチンコール。
所持品リスト表示と、選択までをサブルーチン化。
「つかう」処理をサブルーチン化。
戦闘時の「どうぐ」メニューからこのサブルーチンを呼びます。
これでそれなりのメモリ節約が出来ました。
なぜ、「つかう」だけなのか?
私の持論は、「戦闘時に持ち物整理(すてる)や、装備し直し(そうび)なんかしている暇はない。」です。
よって、戦闘メニュー中の「どうぐ」は使うしかできなくします。
2023年11月30日
プログラムのロジック
ゲームで「こういうことがしたい!」と思いロジックを考える時、閃いたロジックにより、プログラミングの難度や、処理速度、プログラムの長さが全然変わります。
結果は全く同じなのに、それを実現するプログラムのロジックは全く違う訳です。
そこがプログラミングの面白いところです。
ただ、全く閃かない時もあります。
そんな時は、無駄に長く、効率の悪いプログラムを組んでしまいます。
後で、「あれ?なんでこんなロジック組んでるの!?」と、猛省する事も…。
例えば、今制作中の3Dロールプレイングゲームのシステムメッセージの表示で、今回、アイテム名+メッセージの表示を組みました。
アイテム名が10桁で、後ろにスペースが付いているのでそれを除いて表示するロジックです。
私は今回、アイテム名をワークにセットし、10桁目から前に(9桁目)スペースかどうかチェックをかけて行き、スペースでなくなった位置から、残りのメッセージをワークにセットし、VRAMに一括転送して表示するロジックとしました。
特に問題はありませんが、桁が変動する部分を前に持ってこなければならないため、回復薬を使った時にこのロジックだと「25たいりょくが、かいふくした。」としか表示できませんし、合成用のメッセージルーチンを専用に組まなければなりません。
他の方法としては、メッセージデータとして「たいりょくが、〇〇〇かいふくした。」と用意しておき、〇部分にゼロサプレス若しくは左詰めで3桁の数値をセットし、表示する際VRAMに一括転送するのではなく、1文字ずつスペースかどうかチェックしながら転送すれば良いです。
これだと他のメッセージ表示ルーチンと共通で使えます。
ただ、この場合メッセージ中にスペースは含められません。
(&H20以外にスペースFONTを用意して、それをメッセージ中のスペース代わりにする事で対応可。)
今回反省点は、標準のメッセージ表示ルーチンがあるのに、それを使わずなぜわざわざシステムメッセージ表示専用のルーチンを作ってしまったのか…!?
言い訳ですが、一応毎日更新しているので、深く考慮できていません。
最初の方に組んだサブルーチンは、ほぼ忘れています。
でも、ここまで進んでしまったので、もう今更修正する気力はありません…。
こんな感じでロジックを考えていきますが、時々、自分でも驚くような、もの凄い効率的なロジックを組むことが出来ます。
凄い感動です。
こうしてプログラミングにハマっていくのでした…。
2023年11月29日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第55回
3Dダンジョンロールプレイングゲーム 第55回目です。
今回もシステムメニューの「どうぐ」処理を作成します。
今回は、最後の「つかう」を組みます。
まず、システムメニューから、「つかう」を選択。
所持品を使ったメッセージと、効果が表示されます。
選択された所持品が装備品の場合は、今作では使えません。
それ以外の所持品は、今作では使っても何も起こりません。
その場合、所持品は無くなりません。
それら所持品は、イベント発生時に勝手に使います。
因みに「どくけしそう」は、毒状態からの回復。
「宿屋」は体力、魔力しか回復しないので、ゲーム序盤では毒状態からの唯一の回復方法です。
「エリクサー」は体力、魔力、状態異常(毒状態)からの全回復です。
今作では、各用途のアイテムが1種類ずつなので直接アイテムnw定でロジック振り分けていますが、本来なら用途区分を持たせ、用途によって振り分けるようにします。
そして、別途効果値を持たせ、その効果値で使用した際の効力を変動させます。
そのあたりは、「魔法」でやります。(回復1(弱)、回復2(強)等)
これで「どうぐ」全ての処理完了です。
次回は「システムメニュー」の最後、「まほう」を作成します。
2023年11月28日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第54.5回
3Dダンジョンロールプレイングゲーム 第54.5回目です。
.5なので、バグです。
システムメニューの「どうぐ」の「そうび」処理を前回作成しました。
その際に発見したバグになります。
ステ−タス表示をするために、メッセージデータに直接値を書き込んでいます。
一度、装備した状態でステータスを表示。
装備を外した状態で、再度、ステータスを表示。
「つよさ」欄の攻撃力には外した状態が反映されているのに、「そうび」欄は装備したままになっています。
これは、装備している時のみメッセージデータに装備品名を書き込んで、装備していないときは何もしていないためです。
何も装備していないときは、「空白」を書き込む必要があります。
と言う訳で、解消するには、ステータス表示する前に一度全装備品名エリアと、状態エリアをスペースクリアすればいいです。
これを忘れていました…。
その他の数字エリアは、必ず上書きするので問題なし。
で、修正。
無事、装備を外した際、装備名が空白になりました。
2023年11月27日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第54回
3Dダンジョンロールプレイングゲーム 第54回目です。
今回もシステムメニューの「どうぐ」処理を作成します。
今回は、「そうび」を組みます。
まず、システムメニューから、「そうび」を選択。
選択された所持品が、装備品でない場合はメッセージ表示。
選択された所持品が、既に装備されている場合は装備を外します。
装備品を装備する際、気を付けなければいけないのが、装備部位(剣、盾、鎧、兜)。
選択した装備品が、剣なら他の剣を装備していないか?、鎧なら他の鎧を装備していないか?と、部位毎にチェックする必要があります。
ロジックを組んでみました。
選択した装備品の部位に、既に他の装備がされていればAレジスタに「1」を、されていなければ「0」を返します。
「1」の時は、HLレジスタに既に装備されている装備品の、所持品格納ワークのアドレスを返します。
装備します。
なお、既に装備されていた装備品は、自動で外します。
いちいち装備外すの面倒ですからね。
ステータスで装備品込みの値が変化したか確認。
「どうのけん」装備時。攻撃力は「10」。
「てつのけん」装備時。攻撃力は「15」。
「そうび」処理完了です。
次回は「どうぐ」の最後、「つかう」を作成します。
2023年11月26日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第53回
2023年11月25日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第52回
3Dダンジョンロールプレイングゲーム 第52回目です。
今回からシステムメニューの「どうぐ」処理を作成します。
その前に、「どうぐ」のシステムメッセージには、「『やくそう』をつかった!」など、アイテム名+メッセージを表示する処理が必要になります。
そこで今回はアイテム名などの後ろにあるスペースを削除(トリミング)し、メッセージと引っ付けて表示するロジックを組んでいきます。
通常はアイテム名を『』で囲って表示するが、ダメージ値の表示など囲わない場合は&HD33Bをコールする。
IN | OUT | |||
HL | アイテム名先頭アドレス | なし | ||
DE | メッセージ先頭アドレス | |||
B | アイテム名桁数(スペース含む) | |||
C | メッセージ桁数 |
やってることは簡単。
アイテム名をワークに転送して、その転送し終わったアドレスから前向きに、スペースか確認していき、スペースではなくなったアドレス+1から今度はメッセージを転送し、それを表示するだけです。
このロジックを使えば、「どうぐ」だけでなく、「『スライム』が、あらわれた!」や「『かいふく』のじゅもんを、となえた!」など、名前+メッセージが簡単に表示できます。
では、次回は「どうぐ」の「すてる」を作成します。