Scratchでポケモンぽいゲームを作る制作過程 #8
今回はPachiMon-8の内容を解説します。今回で現在の制作進行度(PachiMon-9)にほぼ追いついたことになります。
PachiMon-8ではバトルで手持ちのPachiMonを表示する画面を作りました。実装したスクリプトのメインは最初の方でやった"表示/非表示"の切り替えですが、何をいつ表示/非表示にするかを考えるのが面倒でした。一つのメッセージスクリプトだけで全てを管理するのは難しいですし、ある程度の可読性を持たせるにはスクリプトの数を増やさないといけません。増やしすぎると逆に管理しにくくなるのでバランスを取らないといけません。一応動くものはできましたが調整の余地ありです。
PachiMon-7からの主な変更点は以下の通りです。
・PachiMon一覧を表示させる
・今まで変数のみで頑張っていたけど新たに”リスト”機能を試してみた
・バトルで使うmpmごとにパラメータをセットできるようにする
・与えるダメージがマイナスになるバグを修正
ちょっと多めですね。
PachiMon一覧を表示させる
ポケモンといえばバトル中にポケモンを切り替えるのも楽しみの一つですよね。ということで今回はモンスターを選択する画面を作りました。
と言っても表示させるのは2体目だけで、実際にそのモンスターを選択してバトルで使えるところまでは作っていません。
まずはバトルコマンドに「PachiMon」を表示して、それをクリックしたらPachiMon一覧画面に切り替わるようにします。この辺は、以前説明した「表示/非表示」の繰り返しなので詳細は省略しますがざっくりと流れだけ説明しておきます。
まず、PachiMonのスプライト「mpm-inbag-costume」やパラメータ用のスプライト「mpm-inbag-HP-Bar」などを作成します。
バトルコマンドで「PachiMon」がクリックされたら、バトルで表示しているものを非表示にし、mpm-inbag-costumeやmpm-inbag-HP-Barなどを表示させます。
手持ちのモンスターが複数の場合はmpm-inbag-costumeやmpm-inbag-HP-Barのクローンを作成して表示させます。表示させるPachiMonの見た目(コスチューム)や名前、LVやHPの数値はスクリプトで分岐させます(下記画像参照)。
上記画像はスプライト「mpm-inbag-Lv-100」のスクリプトです。リストでinbag-mpm-〇〇のように手持ちのPachiMonごとのデータを作成しそれを参照することで、各PachiMonhごとのLVを表示させています。名前やHPも同じようにして作成しました。
リストはこんな感じになってるんですが、項目名は自由につけられず数字で表されています。ですので、何番目がなんのパラメータなのかは自分で覚えておかないといけません。
ここがPachiMonを作るにあたっての最大の壁なような気がしています。データベース機能がないので、このようにリストで管理するしかなさそうです。ちなみに6番目がLVで7番目はMax-Hpというつもりで運用してます。パラメータの種類が多くなるとわからなくなってくるので、sampleのリストも作ってあります(下記画像参照)。
これで「LVって何番目だっけ」と探しながらスクリプトを作っています。
バトルで使うmpmごとにパラメータをセットできるようにする
複数モンスターを使用できるようにするにあたって、もう一つ課題だったのがパラメータの保持です。
例えばmpm-1がバトル中にダメージを食らったのでmpm-2に変更した時、mpm-1のHPは減った状態にしておかないといけません。この部分もデータベースがないので、実装が難しかったです。
色々考えて以下のようにすることにしました。
・バトル中はfighting-mpm-hpのようにバトル中だけ使うパラメータ変数を用意。
・mpmを変更するためのメッセージスクリプト「change-to-mpm2」などを受け取ったらそのmpmのパラメータをfighting-mpm-〇〇に代入する
一応これでできるようになったはずなんですが、この時点ではまだこの機能は完成してません。あくまでもここでは手持ちのPachiMonを表示させる部分だけ作っているので。
ダメージ計算の部分も変数を変えておきます。この辺りから変数の命名規則を考えた方が良さげだなと思いはじめました(笑)。
でもどんな変数が必要になるのかは実際作ってみないとわからないので、最初は適当であとで修正するといいかなと思います。Scratchの場合は変数は一つ変えると他のところで使われているものも自動で変わるのでその点は便利ですね。
与えるダメージがマイナスになるバグを修正
PachiMon-7ではダメージの計算を以下のような式で行なっていました。
PachiMon-8を作成中に、これだとまずいことに気がつきます。
(attack+skillpower)/2<defenceの場合にダメージがマイナスで計算されることがありそうです。要するにめっちゃ防御力が高い場合、攻撃を食らうと回復しちゃうみたいなバグです。
これを避けるために以下のように修正しました。
ダメージ計算自体を変えるのではなく、計算した結果ダメージが1より小さい場合は一律でHPを1減らすようにしました。もしかしたらダメージ計算の時点でrecieve-damageを1にした方がいいかもしれないですが現時点ではこれでOKとしました。
今回はここまで。次回はPachiMonの数を6体まで増やしても一覧を表示するスクリプトがちゃんと動くのかを確かめたいと思います。
初めましてヒロです。勉強プロデューサー/コーチ:Lv50。無人島:Lv2。サバイバル:Lv2。YouTuber:Lv1。ブログ:Lv3。Twitter:Lv5。Note:Lv2。Lvは全て自称です。