スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ゲーム制作日記<48> 採取システム拡張 & 釣りシステム

op.png



みなさん、こんばんは。
ネコタです。



今回も恒例の『 コモンイベントで作るちょっとしたシステム 』 のご紹介。


今回のシステムは、「釣りシステム」です。ただし、私のゲームの都合上、アイテム(スキル)を使った採集システムを応用したものとなっています。


以前紹介しましたが、現在制作中のゲーム「ALQMEST」に登場するベン君のマップスキルは、道具を所持している場合に、特定ポイントでの採取が可能となるスキルでした。

ベン君が採取できるものは、鉱石だけではありません。
木の実の採取や、魚も獲ることができます。


彼、とってもサバイバルな男なんです(笑)


と、いう訳で。
今回も、例としてベン君に活躍してもらいましょう。


tc34-1.png


ここに、良い感じの釣り堀があります。
魚たちが悠々と泳いでいますね。


tc34-2.png


ここでベン君、釣り竿を振り下ろしました。
さあ、釣りの開始です。

レッツフィッシング!


tc34-3.png


釣り上げポイントに、仕掛けを落としました。
あとは、魚が来るのを虎視眈々と待つだけです。


tc34-4.png


さあ、魚くんが寄ってきましたよ?
ギョギョギョッ!


tc34-5.png


決定ボタンを押して、はい、確保~。
見事、ホトケドジョウをゲットしました。



ちなみに、ホトケドジョウはこんな魚です。

hotokedojyouWM (2)



さて、挙動はこんな感じです。

ちょっと、ベン君を使って遊んでみたくなったんじゃないでしょうか?(笑)


それでは、今回のシステムの内容を説明していきましょう。


まず、準備するものから確認します。


【必須】
アイテム(スキル)を使った採集システム
・スイッチ ×1
・プラグイン:OuterSelfSwitch.js
・プラグイン:YEP_RegionRestrictions.js
・空イベント ×1


【推奨】
・コモンイベント
・変数 ×1



今回のシステムでは、公式プラグインのYEP_RegionRestrictions.js、準公式プラグインのOuterSelfSwitch.jsを利用します。


tc34-b.png

tc34-a.png


このプラグインが無くても作れなくはないですが、タイルの設定が面倒くさくなってくるのと、将来的に使用スイッチ量が膨大となる可能性があるためです。


推奨のコモンイベントは、採取物をランダムに振り分けるためのコモンイベントですので、なくても構いません。変数も、乱数を一時格納するためのものです。

tc34-11.png




それでは、準備が整ったところで。

システムの内容を解説していきますね。


まずは、このイベントとリージョンの配置を見ていきましょう。


tc34-6.png


湖のタイルは移動不可タイルですので、プラグインYEP_RegionRestrictions.jsにより、イベントのみ通行可にしています(リージョン252番を設定しています)。

また、リージョン36番は以前紹介したアイテム(スキル)を使った採集システムで設定している採取ポイントに敷いておくリージョンとなっています。


252番の中にあるイベントは採取される魚くんのイベントで、その周りの36番は採取ポイントのイベントです。



では、イベントの中身を見ていきましょう。

とりあえず、魚くんのイベントからいきましょうかね。


魚イベント:1ページ目
tc34-12.png

≪実行内容≫
コモンイベント:採集待ち01



魚イベント:2ページ目
tc34-13.png

≪実行内容≫
なし


魚くんは、以前作った採集システムを利用しています。採集されたとき(時間カウントが規定値まで達していないとき)は魚がおらず、時間になると魚が出現するようになっています。

しかし、イベントの中身がないので、これ単体では何もおきません。この挙動は、アイテム(スキル)を使った採集システムに準拠したものとなっていますが、少し異なった仕様となっています。


では、釣りシステムの根幹である、36番の上に乗っているイベントを見てみましょう。

なお、内容はおおむねアイテム(スキル)を使った採集システムと同じですので、変更点だけ解説していきます。


採取ポイント:1ページ目
tc34-7.png

≪実行内容≫
なし


今回は、全部で4ページとなっています。

採集システムで画像が変化する部分については、魚イベントが担当していますので、こちらの方では必要なくなりました。なので、実行内容も無くなってしまっています。



採取ポイント:2ページ目
tc34-14.png

★出現条件: スイッチ 採取用01
★トリガー: 自動実行

≪実行内容≫
注釈:各位置情報と向き情報を取得します。
変数の操作:#0004 【取得情報】現在位置X = プレイヤーのマップX
変数の操作:#0005 【取得情報】現在位置Y = プレイヤーのマップY
変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
条件分岐:【取得情報】現在位置X = 【情報取得】イベントX
条件分岐:【取得情報】現在位置Y = 【情報取得】イベントY
条件分岐:プレイヤーが上を向いている
条件分岐:パーティが釣り竿を持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了
条件分岐:プレイヤーが下を向いている
条件分岐:パーティが釣り竿を持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了
条件分岐:プレイヤーが左を向いている
条件分岐:パーティが釣り竿を持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了
条件分岐:プレイヤーが右を向いている
条件分岐:パーティが釣り竿を持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了

分岐終了

分岐終了
条件分岐:使用不可がON
ラベル:効果処理
注釈:ここに条件を満たすときの挙動を書き込みます。
セルフスイッチの操作:D = ON

分岐終了
注釈:上記の条件に当てはまらない場合には、プレイヤーが隣接していない、
注釈:あるいは、プレイヤーが対象を向いていないため、そのまま終了処理に進みます。
条件分岐:セルフスイッチ DがOFF
変数の操作:#0039 【採取】カウント数 -= 1

分岐終了
セルフスイッチの操作:B = ON


このページの実行内容は、いくつか変更になっています。

まず、位置判定が変更になりました。

位置はプレーヤーとイベントの位置が一致しているときを条件としています。なので、アイテム(スキル)を使った採集システムで行っていた位置計算が不要となりました。


次に、必要な道具が「釣り竿」になりました。アイテム(スキル)を使った採集システムの例では「つるはし」を利用していましたが、つるはしで釣りはしませんからね(笑)


また、効果処理部分の内容が変更になりました。アイテム(スキル)を使った採集システムでは、ここでアイテム入手処理を行っていましたが、ここでは採取成功による判定を行えませんので、セルフスイッチDをONするだけとなります。

ここで行うのは、採取ポイントで採取行為を行ったかどうかの判定だけです。



採取ポイント:3ページ目
tc34-9.png

≪実行内容≫
なし


待機用ページです。
特に何もありません。


採取イベント:4ページ目
tc34-10.png

★出現条件: スイッチ 採取用02
         セルフスイッチB
★トリガー: 自動実行

≪実行内容≫
変数の操作:#0039 【採取】カウント数 -= 1
セルフスイッチの操作:B = OFF
条件分岐:セルフスイッチ DがON
コモンイベント:【情報取得】プレイヤー情報取得
変数の操作:#0028 【取得情報】イベントID = 0
条件分岐:プレイヤーが下を向いている
ウェイト:30フレーム
SEの演奏:Cursor3 (90, 100, 0)
変数の操作:#0005 【取得情報】現在位置Y += 2
イベントの位置設定:釣りポイント用, ({【取得情報】現在位置X},{【取得情報】現在位置Y})
アニメーションの表示:釣りポイント用, 釣りポイント (ウェイト)
イベントの位置設定:釣りポイント用, (0,0)
スイッチの操作:#0086 【採取】釣り判定開始 = ON

分岐終了
条件分岐:【採取】釣り判定開始がON
ループ
条件分岐:ボタン[決定]が押されている
指定位置の情報取得:【取得情報】イベントID, イベントID, ({【取得情報】現在位置X},{【取得情報】現在位置Y})
ループの中断

分岐終了
条件分岐:ボタン[キャンセル]が押されている
ラベルジャンプ:cancel

分岐終了
ウェイト:2フレーム

以上繰り返し

分岐終了
スイッチの操作:#0086 【採取】釣り判定開始 = OFF
セルフスイッチの操作:D = OFF
条件分岐:【取得情報】イベントID = 20
条件分岐:スクリプト:$gameSelfSwitches.value([60, 20, 'A'])
プラグインコマンド:OuterSelfSwitch off 20 A
ラベルジャンプ:Hit

分岐終了

分岐終了
条件分岐:【取得情報】イベントID = 38
条件分岐:スクリプト:$gameSelfSwitches.value([60, 38, 'A'])
プラグインコマンド:OuterSelfSwitch off 38 A
ラベルジャンプ:Hit

分岐終了

分岐終了
SEの演奏:Cancel2 (90, 100, 0)
条件分岐:使用不可がON
ラベル:Hit
コモンイベント:【採取】釣り獲物

分岐終了
条件分岐:使用不可がON
ラベル:cancel
SEの演奏:Cancel2 (90, 100, 0)
スイッチの操作:#0086 【採取】釣り判定開始 = OFF
セルフスイッチの操作:D = OFF

分岐終了

分岐終了


このページは、内容が大きく変わりました。というのも、このページで採取の判定を行っていくことになるためです。

まず、2ページ目で条件を満たしたイベントはセルフスイッチDがONとなっています。この時に釣りの処理を行うため、釣りの処理はこの条件分岐の中身に書き込んでいきます。

この後の処理でイベントIDを利用するため、処理の最初でいったん変数情報をリセットしておきます。

そして、プレイヤーの向きを判定します。釣り針を落とすポイントはプレイヤーの前方になりますので、ここで、湖のないところでは処理を行えないようにしています。

プレイヤーが指定された方向を向いているときは、適当な間をおいて効果音を鳴らします。

その後、アニメーションを表示させたいのですが、アニメーションはイベントかプレイヤーの上にしか再生できません。

そのため、あらかじめ適当な位置に空のイベントを用意しておき、それをプレイヤーの数歩先(ここでは、Y=+2としており、2歩下になります)へ移動させています。移動させたイベントの上でアニメーションを再生させ、用済みになったイベントは元の位置へ戻します。

そして、処理が行われたフラグとしてスイッチをONにしておきます。


次に、先ほどたてられたフラグがONの時、という条件分岐を組みます。この中にある処理が、釣りを行っているときの処理となります。

釣りの処理は、プレイヤーが決定かキャンセルボタンを押すまで、永遠とループさせています。ウエイトを入れないと重くなってしまうため、ループ中には必ずウエイトを入れてください。

決定ボタンが押されたときは、釣り針を落としたポイントの位置にあるイベントIDを拾い、ループを中断します。キャンセルが押されたときは、キャンセルボタンを押したときの処理までラベルジャンプで飛ばします。これについては、後述します。

ループが中断されると、その下の処理へと進みます。順番に見ていきましょう。

とりあえず、まずは必要なくなったスイッチをOFFにしていきます。

そして、拾ったイベントIDによって条件分岐を組みます。

イベントIDは、魚イベントのIDを指定します。

その下の条件分岐ですが、スクリプトで $gameSelfSwitches.value([60, 20, 'A']) と書かれています。

これは、マップ60にあるID20のセルフスイッチAの時、という条件分岐です。

$gameSelfSwitches.value()内の[]には、[マップID, イベントID, 'セルフスイッチ']の順番で入ります。

つまり、釣った魚イベントがID20番の魚くんで、かつセルフスイッチAがONのとき(魚の画像のとき)という条件となっています。

この時は、プラグインコマンドで、ID20番の魚イベントのセルフスイッチAをOFFにし、ラベルHitへ飛ばします。

この条件分岐を、その湖にいる魚イベントの数だけ作っていきます。

これらをすべてスルーしたときは、魚が何もHitしていないときを表すので、適当な効果音を鳴らします。



これで、釣り動作の処理は終了です。


条件分岐:使用不可がON
ラベル:Hit
コモンイベント:【採取】釣り獲物

分岐終了
条件分岐:使用不可がON
ラベル:cancel
SEの演奏:Cancel2 (90, 100, 0)
スイッチの操作:#0086 【採取】釣り判定開始 = OFF
セルフスイッチの操作:D = OFF

分岐終了


最後に書いてあるこの処理は、釣れたとき、あるいは、キャンセルボタンを押したときの処理となります。

ゲーム中では使用しないスイッチを条件として囲うことで、ラベルジャンプ以外では処理されない聖域となっています。

Hit時は、最初にお話しした魚獲得処理へと進ませます。

cancel時は、釣り上げポイント上のイベント有無に関わらず、効果音を鳴らして、使用したスイッチをOFFにし処理を終了しています。




以上が、今回の釣りシステムでした。

今回のシステムですが、利用するイベントはマップごとに手直しが必要となります。

というのも、他のイベントに関与する内容となっており、また、条件を満たすプレイヤーの向きがその場その場で異なってくるためです。

例えば、魚イベントのIDはマップによって異なりますし、その数もまちまちでしょう。

釣り堀も、今回の例のように、湖(というか、池?)の周りを囲うような形だったりすると、その場その場でフィッシング可能な向きが変わってきます。例では下向きの場合だけ作っていますが、左から行う釣りポイントでは、右向きの時というように条件が変わっています。

増殖させる場合には、とりあえず大まかには内容が同じですので、テンプレートとして釣り用イベントを1個作っておきます。そして、それを必要なマップ&箇所にコピペして、都度内容をちょちょっと編集する必要があります。

弄る箇所は、条件となっているイベントIDと向きだけですので、テンプレートに全方向の条件分岐を作っておき、必要ない箇所を削除していくと良いかと思います。



さて。

これで、雑草拾い、鉱山での発掘、釣り、畑での栽培と、ほのぼの牧場ライフを送るためのシステムが整ってきました。


私のRPGは、そんな感じのゲームとなっております(笑)

こうやって、自分の好きな要素を突っ込んでいけるのが、ツクールの魅力ですよね。





ではでは、今日はこの辺で。
ネコタでした。





↓お役に立ちましたら、クリックをお願いします↓
にほんブログ村 ゲームブログへ
にほんブログ村

にほんブログ村 ゲームブログ ゲーム制作へ
にほんブログ村

ブログランキング・にほんブログ村へ
にほんブログ村
スポンサーサイト
プロフィール

猫民のんたん

Author:猫民のんたん

ネコタ:ゲーム作りが趣味の薬剤師。本職とゲーム作りの2足の草鞋を履きこなそうと日々奮闘。

毎週曜日と曜日or曜日に更新予定。


ミノン:ゲーム作り初心者で1児の母。前職はSE/PG。子育てをしながらゲーム作りを行おうと、日々奮闘中。

毎週曜日にブログ更新予定♪

最新記事
最新コメント
月別アーカイブ
カテゴリ
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。