2016年9月11日日曜日

ポーションの使用

しばらくブログの更新を後回しにしてしましました。
スクリプトを中心に、かなり進んでいます。
今から連投しますが、まずはポーションの使用を。


ポーションは以前にウディタで作った時と同じ以下のような仕様です。

  • HPポーションとSPポーションがあり、どちらも利尿作用があるが前者のほうが強い
  • 特殊コマンドとして実装し、ショートカットキーで使用できる
  • 個数という概念はなく、無限に使用できる
  • 回復量は最大HP・SPの半分


使用方法は以下の3つあります

  1. マップからショートカットキーで使用
  2. 戦闘中に特技として使用
  3. メニュー画面から、特技として使用

実際のゲームプレイの中で主に使われることを想定しているのは、1と2ですが、特技として実装したものをメニューから使えなくするのも不自然ですし、キーボードショートカットに関する説明を書いておけばチュートリアルで見逃された場合の救済にもなるので、残しました。

ツクールでスクリプトをがっつり書いていると、コモンイベントやその他のツクールのGUI機能を使うか自分で書くか迷うものですが、特殊効果のあるアイテムや特技は、ちょうどこの境界上にある要求だと感じました。

結局のところ、以下のようになりました。

  • ショートカットキーからの使用は全てスクリプトで実装する
  • 戦闘中とメニューからの特技使用は、利尿度の更新以外はツクールの機能で実装する


コードはこんな感じになりました。酷いラビオリコードですね。
これがベストプラクティスだったかどうかは疑問ですが、それなりの理由があってこうなっています。

なお、check_inputが、毎フレーム呼び出される部分で、ここから他のメソッドが呼び出されます。


そして特技はこんな感じです。回復やダメージの計算式を書くことができるのは、確かウディタには無かった仕様です。便利ですね。

利尿度だけはスクリプト側でオブジェクトのフィールドとして管理している値なので、コードを介さなければアクセスできません。
しかし、チュートリアルに、アイテム使用時の処理を再定義・拡張してメモ欄を参照するようにする方法がありました。

これに倣って以下のようにしました。また、戦闘中のアイテム使用に関しても同様にしました。

これでアイテムのメモ欄に書いた任意のコードを使用時に実行できます。
これを利用して、別出しした尿意更新の部分の処理だけを読んでいます。コードが断片化してしまったのは、このようなアクセスを可能にするためです。


さて、これでポーションの使用が可能になるはずでしたが、ショートカットキーが反応しないことがあることがわかりました。
どうやらコモンイベントからの呼び出しが良くないようです。必ずしも毎フレーム呼ばれるわけでは無いのでしょうか。
そもそも常時並行実行を目的にコモンイベントを用いる方式は良くないと思っていたところなので、結局インターバル実行のコモンイベントは廃止し、Scene_Map.updateにまとめることにしました。


で、こんな感じになりました。上から順に、ショートカットキー、戦闘中、メニューから。





はい、こんな感じです。
次は何について書こうかな。

0 件のコメント:

コメントを投稿