GOREとにゃんこの桃源郷

主観的にCDのレビューやら、日記やら、色々と。
ゴアとかメタルとかロックとか

RPGツクールVXAceですごろく!

2015-06-30 | RPGツクールMZ,VXace,VX,2000,95,1~5


 1年振り、それとも2年だろうか。かなりご無沙汰していたが、また「RPGツクールVXAce」を更新した。今回作成したのは「すごろく」だ。内容的には、ドラクエ3(SFC)及びドラクエ5(PS2)のすごろくと、いただきストリート・ゴージャスキング(PS)のすごろくを、足して2で割ったようなイメージだ。システムは殆ど、以前RPGツクール2000で作成したものの焼き直しとなる。参考までに、その時の記事はコチラだ。つまりこのすごろくは、サイト「気紛れな空間」様の「すごろく作成講座」が根幹として在り、それをドラクエ的にアレンジし、さらに今回VXAce用にアレンジしたというわけだ。ついでに、以前は無かったすごろくアイテムという要素も取り入れた。ここが、いたスト風と思しき所以である。

 仕様としては、完全1人用のすごろくだ。何かボタンを押すと、「サイコロを振る、設定、リタイア」の項目が出るので、サイコロを振ってゴールを目指し進んでいく。ゴールした時に所持していた金額(すごろく所持金)が賞金となる。そのまま賞金とするか規定の賞金額から差し引きさせるか、細部は思案中である。
 開始時に、すごろく戦士、僧侶、盗賊、魔術士の4種類から、任意の職業を選択する。職業により特性があり、戦闘マスや地形を調べた際のランダムエンカウント時に、戦い方が変わる。どの職業でも、MPを消費して放つ特技、或いは魔法を1つだけ持っている。戦士なら通常攻撃の2倍のダメージを与える攻撃、僧侶はHP回復、盗賊は数ターンだけ自身の回避率を70%上昇させる技、魔術士は魔法攻撃で戦士の2倍攻撃と同等かそれ以上のダメージを与えられる。ただし、魔術士だけ物理攻撃力が他の職業の半分しかないため、MPが切れることが死活問題となる。
 また、何かアイテムを入手した場合、画面右上の所持アイテムの箇所にアイテム名が表示され、先程の項目にも、「アイテムを使う」が追加される。アイテムは任意で使用するもの、所持していると自動で使われるもの、マイナス効果のあるものなど、合計27種類作成した。任意での使用が不可能なアイテムでも、アイテムを使うを選択すれば説明が出るようになっている。



 たとえば、上の画像がアイテム「お金ヘラーズ」が発動した瞬間のもの。このアイテムを所持していると、お金が減るマスに止まった時に、お金が減るのを防いでくれる。発動すると無くなる。また、好きなタイミングで使用することは出来ず、該当マスに止まると必ず発動する。
 似たような効果のものに、ぬかるみマスの効果を防ぐ「ぬかるみガード」、サイコロの残り回数が減らない「サイコロヘラーヌ」、溶岩マスでダメージを受けない「マグマガード」、HP減少マスとMP減少マスをどちらも防ぐ「ショックガード」などがある。
 逆に任意で使用可能なアイテムは、出したい目が出せる各種サイコロ「1の目サイコロ」など、HPを回復する「すごろくやくそう」、所持金を倍にする「ゼニバイン」などがある。
 最後にマイナスアイテムについて。お金が減るマスの効果を倍にしてしまう「蛇口ガマグチ」や、所持している間ずっと、歩いた分だけお金が減る「破れガマグチ」、宿屋と道具屋が利用できなくなる「くさいモノ」などがある。これらがマイナスアイテムとして問題無く機能させるために、拾ったアイテムを捨てることは不可能となっている。また、アイテムは常に1つしか所持できない。既に何かしらのアイテムを所持している場合のみ、新しく取得したものと既に所持しているもののどちらを残すか選べる。たとえば、先に紹介したマイナスアイテムのうち「破れガマグチ」は、消耗しないため、拾ってしまった場合はなるべく早く別のアイテムを取得したほうがいい。
 アイテム自体はツボのマスから手に入る他、森や山地を調べるとたまに拾えたり、戦闘後に敵が落とすこともある。道具屋ではお金を払って購入することも可能だ。つまり、運次第ではあるが割りと簡単に手に入る。



 この画像が、現在作成したすごろく用のマス全てだ。まず左上に並んでいるのが強制的に進ませるマス、下段が強制的に戻されるマス。進むマスの右のサイコロは、サイコロを振って出目の数だけサイコロの残り回数を増やしてくれるマス。その右が宿屋、下段は道具屋だ。
 中央部の上段には、転職マス、回復の井戸マス、戦闘マス、ワープマス、階段2上下、ぬかるみマス、溶岩マスがある。その下はMP減少マス、HP減少マス、ツボマス、空白3箇所、森マス、山地マスが並ぶ。
 サイコロの増減マスとお金の増減マスについては、絵柄で一目瞭然だろう。その横の疑問符と感嘆符があるマスについては、これぞドラクエ式すごろくからそのまま引用している(画像は自分でWin標準のペイント機能を用いて作成)イベントマスとパラメータ変化マスだ。その横が、荒地、砂漠、骨、草原となり、金色の像に関しては、貧乏神マスというものを作った。所持アイテムがあろうが無かろうが、止まると強制的にマイナスアイテムを押し付けられる、という迷惑なマスだ。
 さて、他の特殊なマスと地形マスについて説明する。もし自身ですごろくを作る際に、どのようなマスが考えられるかの参考にされたし。
・転職マス⇒すごろく戦士、すごろく僧侶、すごろく盗賊、すごろく魔術士の中から、好きな職業に転職できる。レベルは引き継がれるが、イベントで増減した能力値はリセットされる。
・回復の井戸マス⇒HPとMPを全回復できる。ただし、マイナスアイテムである「みずいらず」を所持している場合、利用できない。
・戦闘マス⇒強制的に戦闘に突入する。地形マスでのランダムエンカウントよりも、強い敵が出易くなっているが、逃げることも可能。戦闘用アイテム「ダメージハーフ」は、その戦闘中に受けるダメージを半分にする。そして「攻撃プラスワン」は、通常攻撃が2回(実質2倍ダメージ)になる。どちらも所持していれば、戦闘開始時点で使用するかを問われる。
・ワープマス⇒近くのワープマスまで強制的にワープさせられる。場所によってはワープで先に進む場合もある。マス上で止まらないと効果は発揮されない。
・ぬかるみマス⇒次に振るサイコロの出目が、半分(1~3のいずれか)になってしまう。「ぬかるみガード」があれば効果を防げる。
・溶岩マス⇒自身のレベルに応じたダメージを受ける。レベル4までは2ダメージだけ。「マグマガード」でダメージ受けず、このアイテムは発動しても消耗しない。
・森、山地、荒地、砂漠、草原マス⇒所謂、地形マス。足元を調べるか選択可能。結果は、何も無い、お金が拾える、戦闘が起きる、アイテムが拾えるなど。草原は何も無いことが多く、お金が拾える額も少ない。森は何も無いことが少ない。山地は、戦闘とアイテムが多いが、マイナスアイテムが出ることもある。荒地は、草原とほぼ同じ。砂漠は、調べることでぬかるみマスと同じ効果を受けてしまう可能性がある。
・イベントマス(?マス)⇒様々なことが起きるが、何が起こるかは完全にランダム。キャラグラが変化することもあるし、所持金が倍になることもある。
・能力変化マス(!マス)⇒サイコロを3回振る。1回目のサイコロで、最大HP、最大MP、攻撃力、防御力、魔法防御、素早さのどのパラメータに効果を示すか抽選。2回目のサイコロで変動するポイントを最低1、最大6抽選。3回目のサイコロが4以上なら上昇、3以下なら下降となる。
・骨マス⇒ランダムで、何も起こらない、MP全快、アイテム入手または消失(アイテムに関しては未所持なら確実に入手、所持していれば確実に消失)というよくわからないマスになった。本来はゲーム本編中で利用できる素材アイテムを手に入れられるマスにしたかったのだが、本編を有利に進めるためにすごろくを強いられる事態になりかねないと危惧し、現在の仕様にした。
・貧乏神マス⇒マイナスアイテムを押し付けられる。すでに所持しているアイテムは失われる。

 よくある「振り出しへ戻る」や、「落とし穴(はじきバネ)」などのマスを、まだ拵えていない。それは今回作ったのが「無限すごろく」というテーマのためである。無限と銘打っているが、実際は無限に続くわけではない。とはいえ、サイコロを100回振ってもまったくゴールの見えない「まるで終わりの無い回廊に迷い込んだ」ような雰囲気にしたかったため、無限すごろくとした。
 これは実際にテストプレイしてみて思ったことだが、無限すごろくは精神的に疲弊する。また、一度の挑戦失敗で再スタートをする気になれない。何故なら、たとえばサイコロを200回振った地点まで戻るため、また200回のサイコロを振ることに気が滅入る。さらに、途中セーブが出来るわけでもない為、一回の挑戦に時間がかかりすぎることが問題だ。
 以上のことから、やはり難易度の違う複数のマップを作り、マップの難易度に合わせて景品を豪華にする仕様が、月並だが結局は一番良いのかという結論に達した。とは言え、途中までにしろかなり作成してしまったため、まずは今回の無限すごろくマップを完成させてから、他のマップに取り掛かろうと考えている。どれくらいまで作成したのかについては、次の画像を見てほしい。



 310×150のマップに、ほとんどびっしり敷き詰めたタイル。分岐あり、ワープありの凝ったマップだ。無限と謳っているのに、ゴールが見えては興醒めなので、敢えて「マップを見る」という機能は排除している。もしそれを取り入れるのであれば、作り方は簡単。プレイヤーの座標、向きを取得して同じ場所に同じグラフィックのキャラを表示させ、プレイヤーの透明可とすり抜けを設定すれば、自由にマップの移動が可能になる。更に、スイッチで並列処理イベントを起動させ、キャンセルキーなどが押された場合に設定を戻せばいい。はず(まだ作っていないため未検証)だ。

 さて、久し振りに長い記事を書こうと思い立った今回の内容は、いよいよイベントの作り方などに触れていく。何かの参考にされたし。途中でツクール2000に有ったがVXAceでは削除されてしまった、イベントの呼び出しを使うため、それが可能になるスクリプト素材を導入しておく必要もある。無くても可能だが、あると格段にイベント作成の手間が少なくて済む。分岐とワープの処理に関して、毎回使うため、非常に重宝する。
[01]スクリプトエディタ(イベントコマンドのスクリプトではない)で、サイコロの残り回数など表示するウィンドウを作ります。既存のWindow_Goldをコピペして改変すると楽です。initializeのfitting_height(1)という部分で、このウィンドウが何行分のものか指定します。例えば、この記事の画像と同様に表示させるには3行必要なため、カッコ内は3にします。HPを表示させるdraw_textには$game_party.members[0].hpでいいと思います。イベントコマンドのスクリプトでも、この取得方法で構いません。

[02]すごろく開始時の自動実行イベントを作る。基本的に任意ですが、プレイヤーの向きは変数に入れておくといいでしょう。また、イベントコマンドのスクリプトで、$window = Window_Sycoro.newと入力します。これは、01番の工程で用意したウィンドウを表示させるためのものです。私の場合は、Window_Sycoroという名称にしたため、このようになっています。それから、すごろく開始のスイッチをonにします。

[03]すごろく開始のスイッチがonになった場合のイベントを、先のイベントの次ページに作成します。これも自動実行です。ラベル「入力待ち」を作ります。次に条件分岐のスクリプトで、Input.trigger?(:A) or Input.trigger?(:B)、などを作ります。この条件に適合した際のイベントは、ラベルジャンプ「メニュー選択」です。次にウェイトを1フレームだけ入れ、ラベルジャンプ「入力待ち」、さらにラベル「メニュー選択」を作ります。
※解説:こうイベントを組む事で、AボタンまたはBボタンが押されたときはメニュー選択(これから作成する)に飛び、押されない限りは画面上何も起きない、という挙動になります。

[04]主人公の座標などを各変数に代入しておきます。次に「すごろくアイテム」という変数を用意し、これが0ではない場合と、条件に当てはまらない場合とで分岐させます。該当の場合、選択肢の表示で、サイコロを振る、アイテムを使う、設定、リタイアです。該当しない場合は上記から、アイテムを使うだけを削った選択肢にします。
※解説:すごろくアイテムという変数で、アイテムを所持しているか判定します。つまり、データベースのアイテム欄は利用しません。変数0ならアイテム無しと見なします。変数が1なら○○を所持中、2なら××、というように設定します。マイナスアイテムだけ番号を離しておくと後の設定で楽になる部分があります。使用可能アイテムと自動発動アイテムは混在していても自分で覚えていさえすればいいです。

[05]先程の選択肢から、サイコロを振るはラベルジャンプ「サイコロを振る」、アイテムを使うは変数すごろくアイテムの数値ごとに条件分岐を入れ、それぞれアイテムの説明メッセージを入れて、任意使用が可能なアイテムならば「使いますか?」と選択肢はい、いいえ、で分岐させます。たとえば次のサイコロが必ず5になるアイテムを使う場合のイベントを書きます。アニメーションの表示(何か相応しいものを任意で)、スイッチ操作「出目操作済み」on、変数「サイコロの出目」に5を代入、変数「すごろくアイテム」に0を代入、スクリプト「$window.refresh」。
※解説:今回私はほぼラベルとラベルジャンプを利用してイベントを組んだのですが、作り終わってみると実行内容が非常に長くなり、修正箇所などを探すために注釈を挿入していても時間がかかったため、動作ごとにコモンイベントにして分けたほうが良いかもしれません。さて、出目操作済みのスイッチは出目を指定する時に毎回onにして、後に作るサイコロを振るイベントの際に分岐で使います。また、最後の$window.refreshは、工程01で作成した自作ウィンドウを更新する場合は毎回入れます。何故ならこのウィンドウは、自動的に更新させる命令が無いため、スクリプトで更新命令を都度出してやらないと、情報の書き換えが行われないのです。

[06]すごろくアイテム毎の条件分岐は最後に、ラベルジャンプ「メニュー選択」を入れます。

[07]メニュー選択時の条件分岐の設定には、任意の設定を作ってください。同じく条件分岐リタイアは、すごろくを途中で止める場合の設定を作ります。必要に応じて変数をリセットしたり、任意で結構ですが、スクリプトで「$window.dispose」と「$window = nil」の命令を何処かに入れます。
※解説:最後のスクリプトコマンドで入力する命令は、自作ウィンドウの解放と消去です。これを入れ忘れると、いつまでもウインドウが出続けます。

[08]メニュー選択の分岐の後、ラベル「サイコロを振る」を作ります。ここがサイコロを振る際の処理です。まず変数「サイコロの残り回数」を減算1して$window.refreshを入れます。次にサイコロが何回、回転するのかを変数に代入します。絵が描ける人なら、回転に関しては戦闘アニメーションとして作成すると、見映えが良いと思います。条件分岐のスイッチで出目操作済みがoffの場合に限り、サイコロの出目に乱数1~6を代入します。この後は、特にオリジナルのものではないため、省きます。
※解説:出目操作済みがonの場合にもサイコロの出目を指定すると、操作が無効になるため、offの場合だけにします。

 これ以降は先に紹介したサイトを参考にした方が良いため、具体的な処理については大幅に省きます。

[09]サイコロが回転した後に、条件分岐でスイッチ「ぬかるみ」がonの場合に、サイコロの出目を2で除算する処理を入れました。ただし、入れ子にした条件分岐、サイコロの出目が2以上の場合に限ります。除算した後は各サイコロピクチャを非表示にし、最終的な出目に応じたピクチャを出します。この処理も済んだら、スイッチの出目操作済みとぬかるみ、どちらもoffにします。
※解説:最終的なサイコロの出目は任意の別の変数にも代入しておきます。そうしておけば、移動直後にキャンセルを可能にする時、利用できます。(例、このマスに止まりますか?→はい、いいえ)

[10]移動開始の処理です。ラベル「移動開始」を設定します。また、移動前のプレイヤーの座標から、上下左右2マスずつの地点に、何が存在するかを調べます。ただし、プレイヤーの向きと逆方向に限り、そもそも進むことが出来ないようにするため、除外します。予め、すごろく用マップの各タイル、左上のマスにだけ地形タグ1を設定しておきます。地形タグ1且つそこがプレイヤーの向きの逆方向でない場合、移動可能を判定するためのスイッチをonにします。また、変数の分岐数に1を加算します。
※解説:地形タグで何のマスか判定できれば便利ですが、タグの数が圧倒的に足りない(7まで)ため、「すごろくのタイルか?」を判定すること限定で利用します。ちなみにプレイヤーの向きには変数、2,4,6,8のいずれかが入ります。キーボードにテンキーがある人は、それを見ると簡単です。そう、2なら下、4なら左、というように、数字と方向が一致します。最後の分岐数は、進める方向がいくつあるかを数えるためのものです。

[11]工程10の結果、変数の分岐数が2以上(進める方向が1箇所ではなかった)の時に、分岐点の処理を入れます。細かい作り方は省きます。現在地のイベントIDを調べて、イベントが存在しなければダミーイベント(空のイベント)番号を変数に入れます。マスとしては複数の移動可能な方向が存在しても、都合によりそのマスから進ませたくない方向がある場合に、該当の移動可能スイッチをoffにする処理が必要です。現在地に対するイベントの呼び出しで対処します。結果的にやはり進行可能な分岐がある場合、どちらに進むことが可能かをプレイヤーに教えるための画像を表示します。
※解説:ワープマスに関してもそうですが、該当マスのイベントを発生させる(イベント呼び出しを行う)場合、直前に任意のスイッチを入れ、そのスイッチがonの時だけ、イベントの中身が実行されるようにします。VXAceでは、デフォルトでマップイベントの呼び出し機能が無いため、トリガーに「開始しない」がありません。接触やキー入力でマップイベントが実行されると不都合が生じる場合があるため、スイッチを設定します。

[12]移動可能な進行方向のキーが入力された場合、移動ルートの設定でプレイヤーの移動(ウェイト)、すり抜けon、歩くSE、(下に移動するのであれば)下に移動を2回、すり抜けと向きという流れにしました。○歩戻る、という戻るマスのために、戻るマス用スイッチがonの場合には、すり抜けの他に向き固定をonにしています。また、移動するたびにサイコロのピクチャを出目が1つ少ないものに変更します。そしてサイコロの出目が1以上である限り、移動する度に移動開始の処理に戻らせます。
※解説:移動開始の処理(工程10)からこの工程までは、一連の流れになるため、移動するマス(サイコロの出目)の分だけ繰り返します。マスを進むたびに、ラベルジャンプでラベル「移動開始」に飛ばします。移動可能な方向を調べる→分岐について確認する→出目1つぶん移動させる、の流れです。

[13]メニューで設定の確認機能をonにしている場合のみの分岐処理です。このマスに止まらないという選択をした際、サイコロを振り終えた時点まで戻さなくてはなりません。画面フェードアウト、予め記憶しておいたプレイヤーの場所へ移動、サイコロの出目に元の出目を代入(工程09の解説参照)、前回の向きによってプレイヤーの向きを移動ルートで指定、サイコロのピクチャを元の出目数に則ったピクチャにして画面をフェードイン、移動開始の時点にラベルジャンプ。
※解説:1マスずつ戻れるようにするより、このやり方のほうが作成する手間がかからないため、こうしています。前回の向きに関しては、サイコロを振る際に設定しておきます。

[14]出目の数だけ移動させたら、現在の向きを変数に入れておき、戻るマス用スイッチをoffにします。

[15]ようやくマスの効果を発動させるためのイベント処理です。現在のプレイヤー座標(出目の分だけ進めてたどり着いたマス)を変数に格納します。その座標の「タイルID」を任意の変数に取得させます。タイルIDによって、それが何のマスか判別するため、マスの分だけそれぞれ条件分岐を設定し、何が起こるか設定します。
※解説:タイルIDはコンソールで調べてもいいですが、何か別ですごろく用のマスを敷き詰めたマップを作成し、調査に必要な箇所にイベントを設定して、1つずつ調べるほうが分かり易いです。座標代入→情報取得→メッセージ表示で該当変数の値を出力(\V[100]など)させる。ちなみに調べるタイルIDのレイヤーは、今回タイルセットEにすごろく用マップチップを導入しているため、レイヤー3のみ調査します。他のレイヤーは使用しません。

[16]各マスの効果を設定した後に、条件分岐で死亡した場合の処理を作ります。まず復活だけさせて、挑戦失敗に関するアナウンスなど、何かしら任意で作成したらいいと思います。


 すごろくも然ることながら、この記事を書くことも疲れた次第だ。これを書く時間があるのであれば、サンプルプロジェクトを作れたかもしれなかったとさえ思う。(いや、とりあえず動く、だけの組み方だとサンプルとして不適切なので俺には出来ない気もする)何にしても明日から忙しいため、結局、落とし穴など色々な要素が作れないまま終わってしまい不完全燃焼だ。もっと趣味に没頭できる時間が欲しいものだ。世紀単位で。


最新の画像もっと見る

コメントを投稿