内部のデータ構造にゲーム制作の経験値が出るよね【ゲーム制作日記】
こんにちはtozicaです。
今日は月曜日!
カナデエスケイプ
昨日は「カナデエスケイプ」の制作を進めました。
主に戦闘まわりの実装作業をしてた。
本作では冒険の途中でちょいちょいモンスターとの戦闘が発生します。
戦闘自体は(少なくとも現在の仕様では)ほぼオートバトルで、時間経過でそれぞれのユニットの行動ゲージが貯まっていって、行動ゲージが貯まったら自動的に攻撃…というのをどちらかが倒れるまで繰り返すような感じになってる。
そしてプレイヤーの介入要素としては、消費リソースである「ソウル」を使うことで、こちらの攻撃を必中させたり、相手の攻撃を確実に回避したりすることができます。
以前の日記でも書いたように、トラップ回避などの戦闘以外での確率判定でもソウルは使用できるので、ゲーム全体を通じてどうソウルをやりくりするのかという所を主なゲーム性の一つにしていきたいなぁと思ってるわけです。
それでまぁ、そのためには適切な戦闘バランスが必要なわけですけど、今まではそのあたりの調整をするための環境がいまいち整備しきれてなくて。
というのも、個々のキャラクターが行う攻撃などの行動の成功率や基礎ダメージなどの値が、全部ソースコードにべた書きしてたんですよね。
ゲーム制作当初であればゲームの全体像も固まってなかったので仕方ない部分もあったんですけど、流石にそろそろ何とかしておかないと後々大変だよなーって思ったので、昨日はそこらへんの環境を構築する作業を進めていました。
具体的には、各キャラクターの行動についてのパラメーター(ダメージとか成功率とか)を、外部ファイルで管理する仕組みを作りました。
今作ではキャラクターの種別と状態はそれぞれ文字列で管理してるので、今回のテーブルもそれに則ってる。
例えばキャラクター "Slime" の状態 "Attack" の基礎成功率は 70% で、その時の基礎ダメージ値は 20 で…みたいなのを、一つのテーブル上にばばばっと記述して、実際の戦闘時にもこのテーブルを参照してダメージ値とか命中率とかを計算してる。
一個のテーブルで管理してるからゲーム全体の戦闘バランスも俯瞰して見やすいし、キャラクターや状態は文字列で表現されてるからそのままでも解釈性が割と高いし、割といい感じにできた気がします。
ここらへん「カナデロオグ」だと全部ソースコードにべた書きだったし、「うちのこファンタジア」だとキャラごとにファイルが分かれてる上にキャラIDや状態はぜんぶ整数値で表現されててバランス調整がイマイチやりづらい感じだったので、だんだん自分の中でのベストな方法に近づきつつある感じがしますね。
成長を感じる!!!
こんな感じでちょっとずつでもゲーム制作のスキルを高めていきたいね。
おしまい。