【プチコン3号】TINYRPG_Ver0.014進捗報告
前回方針をまとめた自作ゲームの開発が進みましたので報告します。
これまでに恐る恐る手探りで進めてきた割には「これ面白いゲームになるんじゃない?」と自信が湧いてくるくらいのものができつつあると考えていますが、まだしっかりとゲームシステムやレベルデザイン等々の根幹に手を突っ込んでいないので、ゲームっぽい挙動をするプログラム群の域を出ていません。
今回はその情報をまとめていきます。
テスト画面
起動直後、タイトル代わりにこのような選択画面に移ります。現状、ランダムキャラテスト・ダイスロールテスト・ロールゲームテスト・デフォルトキャラテストの4つを行えます。
ランダムキャラテスト
一体だけランダムキャラを作成し、そのプロフィール画面を表示します。
種本となるプログラムがあるランダムカタカナネーム生成関数(プログラム公開を不安視する要因の一つ)を中心に、先にプチコン4で作成していたプログラムを3号に移植したもので、所々手は加えたのですが最終的に画面の形に落ち着きました。
プロフィール画面やボタン操作の関数が後述するデフォルトキャラテストよりも前のバージョンとはなりますが、カーソル表示とボタン入出力が一通り行えるだけでもそれなりに重要な技術の結晶です。
ダイスロールテスト
変数K個の6面体ダイスを振り(数値入力処理の追加が面倒でプログラムに直接書き込んでいます)、出た乱数値の出目を二次元配列に保存し、6面体ダイスの出目を画面に表示します。
二次元配列確認用のユーザ関数を画面に表示していると25個以上振った時PRINT文の表示が画面下を突き抜けて落ちます(GPUTCHRで出しているダイスの出目も表示限界の都合でほぼ同様の結果になる)が一応乱数値を保存する配列の限界までダイスを振ることはできます。今回は6面体ダイスに特化していますが面がいくつでも問題ないかと。
参考にしたのはおちゃめさんの1行プログラム「サイコロ」。ただしボタン関数やGPUTCHRの使い方などがmkⅡと3号で少し違うのと、2個以上のダイスを同時に見せたい&Aボタンを押したらサイコロのリールが止まるようにしたい(原プログラムはAボタンでリールを回し、B、X、Yボタンのどれかでリールストップ)都合で大きく改造を施しました。結果としてAボタンを押すと一度にゾロっとダイスが表示されるようになりました。
ロールゲームテスト
一回毎に一体ランダムキャラを作成し、ランダムに技能判定を行います。
ここの処理は端的に言ってニンジャスレイヤーTRPGのコアルールをそのまんま右から左へ電子化したものでしかない(これまたひねりがなさ過ぎてプログラム公開を不安視する要因の一つに)のですが、出目6が2個、3個以上の高難度判定は未実装です(乱数値の検索くらいプチコンに備わっているだろ……と思いつつも実際どうすればいいのかわからない)。→たぶん振った全ての乱数値を文字列にまとめて、その中から特定の文字を検索する命令文で6の数をカウントすればいけそうです。
デフォルトキャラテスト
デフォルト生成キャラ最大値DCMAXの数だけランダムキャラを作成し、そのプロフィール画面を表示します。さらにそれらの情報をSLOT1を通してセーブ&ロードできます。
ようやっと二次元配列の処理に手と頭が追い付いてきた自分にとって、大量の数値情報のセーブ&ロードは鬼門でした。ググると上がってくる先のおちゃめさんのホームページを読んでも、さっぱり理解できませんでした。
その愚痴(+「DATA文も使い方がよくわかんないYO!!」)をツイッター上で吐露していると、みむ*mimさんから下記のアドバイスを受けました。ありがとうございます。
最初は説明の意味がよく理解できずただ時だけが過ぎていきましたが、先のおちゃめさんのページ◎区切りを入れて記録する方法からプレイヤーキャラクターのパラメータにあたる各変数およびキャラクター名を文字列変数MEM$(文字列のシステム変数)に入れ、それを仮の終端文字/で区切り、PRGSETでSLOT1に書き込むことでデータセーブが実現しました。ロードの時はそれを1行ずつMEM$に取得して、INSTRで区切りを検索してMID$で取り出した文字列をVALで数値化するなどして配列に格納します。
プレイヤーキャラデータセーブ
プレイヤーキャラデータロード
真っ黒のエディット画面から始めた時には夢物語のように思われたRPG作りがひとつ、またひとつと現実化していく。
プチコンって面白ぇ~~~~!!!! って大興奮した瞬間です。
ただし見るからにこの方法、バグの温床です。
まずデータセーブの為にFOR文を回しているDCMAXの数がセーブデータの行と食い違うと正常な動作にならないし、そもそもセーブデータがいかようにも書き換えられるし、もしもSLOT1に別のプログラムが入っているとそこを侵食するし……。
あんま大丈夫じゃなさそうですが、まあ今のところ一人で楽しむためのゲームなので気にしないでおきましょう。
(てか今更なんですけどFOR文の入れ子をI,JじゃなくてJ,Kにしてるせいでダイスの個数用変数と競合してますね。後で変数名をDKにするとかして直します)
次の目標は
100人のプレイヤーキャラクターを秒で作り、しかもその全員が賽を振って戦える状態までは整えました。
次は戦闘ルーチンの作成に加え、技能判定のイベントをメッセージを含めてDATA文で作れるかどうか試してみてゲームのメインループを構築していく予定です。
又はそろそろCUIを卒業し、メッセージ(ステータス)ウィンドウの関数を作るか?
或いはもっとゲームの体裁を整えるべく、アーケードゲーム風の疑似的な起動画面やRPGらしいプロローグを作るか……絶対的な優先順位のないゲーム作りはいつだってこのようなまとまりのないものです。
また何かあれば報告します。それでは。
(終)
この記事が気に入ったらサポートをしてみませんか?