2016年3月21日月曜日

戦闘中のポーション使用とバグフィックス

今回はコーディング周りの細かい作業を紹介します。

前の記事では、テストプレイをしましたが、プレイしていて、かなり事故死が多いように感じました。
前のめりな戦闘バランスもさることながら、戦闘中の回復手段が無いことが原因でした。

元々、回復手段を限定しショートカットを用意することで、回復の時間を短縮することは今作の大きなコンセプトの一つです。
そのため回復技や回復アイテムは作らない想定だったのでした。
しかし戦闘中の回復は戦略的な選択なので制限することは合理的ではありません。そこでショートカットによる回復と同じスペックの回復手段をスキルとして用意することにしました。


ユーザーデータベースに技能というデータ型があります。こちらに新規登録します。
「効果対象」にイベント呼び出し(バトルのみ)を選択し、イベント番号指定に「500229」を指定しました。この番号はコモンイベントの229番を表します。

既に実装していた、ショートカットキー入力受付部分から、回復処理部分を切り出します。
これが先述のコモンイベント229です。
(最初から切り出しておけば良かったですね)

コモンイベント229の実装はこうなっています。
戦闘中と、それ以外で処理を分けているのは、戦闘中はキャラのHPなどのステータスが戦闘用の一次領域に格納されていることが主な理由です。


さて、実装ができました。
事故率が減っただけではなく、戦闘で追いつめられるとポーションの使用により後々の尿意がきつくなるというジレンマが生まれました。これはゲームを面白くする要素になると思います。


さて、バグフィックスについても書こうと思いましたが眠くなったので、概要だけにしときます。
だいたい以下のような内容でした。

  • メニューを開いている間は尿量の更新処理がストップする仕様とした
  • この仕様を実装したつもりで忘れていたので実装することにした
  • メニューを開いていることを表すシステムデータべースのフラグ値が何故か常に0になる。この事象について言及したブログ記事が見つかる
  • システム側のメニュー関連のコモンイベントを修正して、この値を更新する処理を追加した
  • 実装できたがセーブデータをロードしてから最初にメニューを開くまで尿量が増加しないバグが発生した
  • システム側のセーブ関連のコモンイベントを修正して、セーブする瞬間だけフラグを落とすという対症療法により正常に動作するようになる

そんじゃ、今日はこんくらいでもう寝ます。
次回は、もうちょうバランス整えてから後半の敵も実装ってあたりになると思います。

戦闘バランスの調整

ランダムエンカウントの実装ができたので、敵と敵パーティの情報を登録し、戦闘バランスを調整していきます。

漠然とテストプレイだけを繰り返しているだけでは、手間ばかりかかってなかなか良いバランスにならないと思うので、方針を考えます。キャラが成長し、より強い敵のいる場所へ行くようになっていく過程を実装するにあたり、どうするのが望ましいか。

まず考えたのは、現在攻略中のレベル相応の場所よりも前後の場所に行った場合です。
少し前の場所の敵と戦う場合の楽勝ぶりとレベルの上がりにくさ、およびそれとは逆に、少し先のステージの敵と戦った場合の苦戦ぶりとレベルの上がりやすさは、先に進んでも一定であることが望ましいです。
そういうわけなので、敵の強さ、主人公の強さ、敵の経験値、主人公のレベルアップに必要な経験値は、指数関数的に上昇すべきだと考えました。
また、漠然と"強さ"と言いましたが、基準が必要です。モデルを単純化するため、HPと余ダメージ値だけが設定されており、かつ通常攻撃のみが可能な環境を想定すると、「HP*余ダメージ値」が高いほうが勝つので、この値を"強さ"と言うことができそうです。
回避と命中はHPと余ダメージ値の係数として処理できそうです。防御力、敏捷などはフレーバー的に強さを上下させる要素にはなりそうですが、具体的な値の調整には、個別の検討かテストプレイによる調整が必要です。スキルも、通常攻撃をしてきた場合とどちらが嫌かという基準で考えれば良さそうです。

こうした基準を元に、各エリアに適正レベルをあらかじめ設定し、エリアごとの単独で出現した場合でもそこそこ強い敵の強さを設定し。それを一つの基準として他の敵も設定していきました。

今回は1ステージだけ遊べる体験版ですが、バランス調整の練習も兼ねてある程度のレベルまで成長させたいので、「4回くらい戦うたびにレベルが上がる」「レベルが4上がると強さが2倍になる」という、急勾配な設定でレベル25くらいまで遊べるように作っていこうと思います。

まずは、中ほどまで作って、テストプレイをしてみたので、今回は記録のメモ書きをスクショ代わりに晒そうかと思います。



以下、メモ書きそのまま。
但し、赤字部分はブログ記事作成段階での補足


左まで往復
ここまで問題無し(Lv 4)
なぜかネジミに対して攻撃よりケリのほうが強い性耐性の設定ミスと後に判明

ポイントアーマー回収
少し強い敵が出るが問題無く勝つ
ここで尿意のため一旦戻る(Lv 6)

ボア撃破→Lv 7へ
宝箱の設定を忘れていたので一旦やり直し

----------

再び最初からテストプレイ
ボア撃破まで変わらず
スライムにやけにダメ出る
マッドドッグも楽勝 ハンドアクス強し(Lv 8)

下りたとこのアイテム回収後、尿意のため戻る
初の前おさえ
スケルトンも楽勝(Lv 10)
スケルトンの攻撃で最大HPの40%くらいくらう
シミター入手→Lv 11
ケチョーは真ん中だと見づらい
イ=クァと遭遇 通常×2くらいで倒せるが、相手の攻撃で、
最大HPの70%くらい食らう(Lv 12)

尿意がやばいので戻る
上に上がる前くらいのところでおもらし(425mlくらい)

----------
武器、防具、全体的に修正
武器は上方、防具は下方←単純な記述ミス。実際には武器は下方修正、防具は上方修正

確かこのあたりで、戦闘中に回復ポーション使えるように仕様追加

----------
再び最初からテストプレイ
左往復まで変わらず
ポイントアーマー回収後、余裕があるのでこのまま向かう(Lv 4)
ボア撃破後、犬瞬殺(Lv 6)
少し急いでトイレへ、やや余裕で間に合う(300ml超)

下回収
やはり下の敵も弱い(Lv 8,9)
トイレに戻る(250ml)

ボア2体に割と苦戦、ポーション使う
シミター入手 スケルトンはもろいので弱い
トイレに戻る(200ちょい)

ボア一撃(Lv 11)
イ=クァ撃破→Lv 12
やはり最大HPの40%くらい食らう

ローパー3体に苦戦、スタングレネードとポーションを使って辛勝
一気に倒せないとキツイ 利尿度がやばいので
狩人のお守りだけ回収してから帰ることにする

メニュー開いている間に尿量が止まらないバグ発見
為す術なくおもらし
システム基礎部分のバグなので、テストプレイを中断してバグを修正した
詳細は別記事で

----------
バグ修正後再開
想定外のおもらしにより、
長らくセーブしていないでゲームオーバーになったため、かなり戻った
ボア戦前から再開(Lv 4)
犬2体相手に思わぬ苦戦(Lv 6くらい)
敵グループ指定ミスと思われるバグ発見←敵の一体も設定されていないグループがあったためと後に判明
ローパー2体を倒す スタブ一発で済んだ(Lv 9)
お守り回収してセーブ 尿意がそろそろ来るので
トイレに戻る

蛇、骨、鳥にやられる(Lv 9)
同じのに何度もやられる

セーブデータ読み込み後、一度メニュー開くまで
メニュー開いてるフラグが立ちっぱなしになるバグ発見
メニュー開いてる途中で尿量増加を止める件に関連してのバグ
こちらも修正の詳細は別記事で

バグ修正後
バックラーに持ち替えどうにか戻る
おしっこも間に合う(300ml弱)
この時にはLvは11になっていた
ローパーフィオーレに負ける(Lv 13だっけな?)
狩人、マインゴーシュは強い
スタブが弱い… キックもイマイチ 縮地は強い

攻撃技を色々上方修正



まあ、訳わからないかと思うので、雰囲気だけ伝わればと思います。
次回は、細かいバグの修正模様をお伝えします。

敵データの登録とランダムエンカウントの実装

さて、今回は戦闘の実装から、テストプレイを交えつつのバランス調整、テスト中に見つけたバグ修正諸々やりました。

長いので、記事としては途中途中で切ります。

今回は、ランダムエンカウント戦闘の実装です。

敵キャラのデータを用意します。
ユーザDBに専用のデータ型があります。
(一応、現段階ではネタバレ避けて置きます。)

次に、同じくユーザDBの敵グループデータを弄ります。


続きまして、ランダムエンカウント用のイベントを作ります。エンカウント範囲は範囲拡張によって実現します。

プレイヤー接触で、組み込みのランダムエンカウントのコモンイベントだけを呼び出します。

敵パーティは引数で設定します。


こんだけです。チョロいですね。


歩いてると

敵が出るようになりました。


この記事はここで締めますが、このまま連投いきます。

2016年3月19日土曜日

マップできました

長らく放置してしまいすみません。
制作はサボりながらもボチボチ進めていまして、やっとマップが完成しました。
ネタバレになるのでスクショは貼りませんが、報告までに。

今回はα版にも満たないような体験版ですが、
「だだっ広いマップをトイレの心配をしつつもサクサク探索する」というコンセプトは表現できていると思います。

ところで、気負いすぎて最初だというのにかなり大きいマップになってしまいました。
試しに自分で一周歩いてみたとこと、道を知っている製作者が敵の出ない環境でプレイしているにみ関わらず少しトイレが心配になる場面もありました。
死に覚えゲーならぬ漏らし覚えゲーになる予感がします。


さて、体験版公開までのタスクは以下の通りとなりました


【イラスト関連】

  • ぬい立ち絵(おもらし後)
  • 教授立ち絵


【システム・コンテンツ関連】

  • ランダムエンカウントの実装
  • BGMと効果音の設定


【イベント】

  • オープニング
  • エンディング
  • おもらしによるゲームオーバー


【ゲームバランスの調整】

  • 各宝箱へのアイテムの分配
  • 各エリアに敵グループの設定
  • ドロップ品の設定


かなり完成に近づいて来たような気がします。
それでは今日はこの辺で。
次回は戦闘関連のことを作っていきます。

2016年3月3日木曜日

地図作製補助ツール

ずいぶん更新の間が開いてしまいました。お久しぶりです。

さて、前にも似たようなこと書きましたが、マップ作るのってすごく面倒臭いんですよね。
今回、地面が隆起したり陥没したりした地形を多く作るつもりでいるんですが、
壁や地面を配置し分けるのがとっても面倒。
同じ壁にも右端、中央、左端、両側が端と4種類があり、それぞれに通常のものの他に下端があります。
地面の側にも上下左右の端があります。
それらを地形を考えて、一定の規則に従って延々と配置していくんですね。
間違いがないように気を付けながら。

プログラマからすると、それって人間のする作業じゃないんですよね。
どう考えてもコンピューターにやらせるべき案件だ。
でも、ウディタにはそんな気の利いた機能は無さそう。
誰かが作ったツールがあるかも知れないけども、無い可能性のほうが遥かに高い気がする。
ぶっちゃけ、あるかも分からないものを探すのは面倒。
かと言って自分で作るとしたらバイナリを解析するなんていう大変すぎる作業だ。

うーん…どうしようか

私らプログラマは、プログラムを書こうかなと考える時、常にあることを恐れます。
それは"車輪の再発明"と言って、要するに自分が作ろうとしているものを、既に誰かが作っていて、どこかに似たようなものが存在しているんじゃないかという懸念です。

もしそうだったら、自分の苦労は徒労以外の何物でもなくなる。そんな不安を抱え
まあでも、技術の勉強と思えば書いてもいいんじゃないか、という言い訳を胸に
ぶっちゃけ書いてみたい。そんな好奇心に駆られ
「ちょっと調べてみよう」から、手が止まらなくなって

まあ結局、書くんですね。十の手間を省くために百の手間をかけて。
それが性だから仕方ないんです。


はい、できました。今回は陥没だけです。
対象とする座標にマークとして白い魔法陣を配置することにしました。

ポチっとなー

ボガーン

今のところ、まだ魔法陣は手で取るようにしています。
こんな感じになります。

ちゃんと歩けます。今後ともちゃんと歩けるかどうか不安です。


こういうの作るのが楽になりました。


これでようやく、ゲーム制作らしい作業に戻れます。
先が見えてきました。
疲れたので寝ます。おやすみ。