スポンサーサイト

上記の広告は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は、そんな感じのゲームとなっております(笑)

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





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





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

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

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

ゲーム制作日記<47> 言霊システム

op.png



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



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


今回ご紹介するシステムは、パスワードシステムを応用して作った文字入力型システム、名付けて「言霊システム」です。


このシステムは、文字を入力し、任意の暗号に変換するシステムとなります。

その暗号化されたコードを利用し、様々な挙動へと分岐させるためのシステムですので、これ単体で何かできるというわけではありません。


使い道はいろいろとありますが、今回のシステムを利用した例を紹介しましょう。


tc33-01.png


ということで、4文字の言葉を入力します。


tc33-02.png


文字入力は、1文字ずつ行います。

機能的には4文字一気に入力もできますが、作成する処理が膨大になるので、勘弁してください(笑)


tc33-03.png


最初の一文字目は、『た』を入力します。
オリジナル暗号文ですので、理由は教えません。


tc33-04.png


次に、『く』を入力します。


tc33-05.png


そして、『あ』を入力します。


tc33-06.png


最後に、『い』を入力します。


tc33-07.png


暗号文は『たくあい』です。
これで、決定します。


さあ、この言霊は何を意味するのでしょうか?


tc33-08.png


このように、『たくあい』→”火”に変換されました。

わー、すごい。



という、システムです。

これだけだと、「だから?」で終わりですけどね(笑)



さて、システムの作り方を紹介していきますが、初めに言っておくことがあります。

このシステム、理屈はそれほど複雑ではありませんが、作業量が超膨大です(笑)


まず単純に、文字入力に使われる文字の数だけ暗号コードを作成しなければいけません。


ちなみに、文字数は255文字あります。
はい、条件分岐を255個組みます(笑)


次に、暗号コードを考える必要があります。

今回は、例として私のコードを紹介します。


tc33-14.png


2進数を使って、順番に番号を振っています。

あ=1
い=10
う=11
え=100
お=101

といった具合に、番号が設定されています。


そして、4文字のコードを独自の計算式に当てはめて計算し、対応する文字コードを作り出しています。

これも、自分で頭をひねって考えなければいけないので、シンドイです。
もう、コマンド入力と関係ない部分ですね(笑)



面倒くさいシステムだという事が分かったところで。

それでは、必要なモノから確認していきましょう!



【必須】
・変数×5
・アクター(名前入力用)


【推奨】
・コモンイベント×5


推奨のコモンイベントですが、無くても作れます。

無くても作れますが、イベント編集が非常に煩雑となるため、あった方がよいです。

これから説明する作り方は、コモンイベントの枠を用意して作成しています。



では、イベントの解説をしていきましょう。


tc33-09.png


まずは、パスワードシステムと同様に、名前入力用のアクターを用意します。

名前の欄はシステムで使用しますので、空にしておいてください。



tc33-13.png

≪実行内容≫
文章:なし, ウィンドウ, 下
文章言霊システムを紹介します。
文章始めに4文字の言葉を入力すると、
文章対応した意味を検索できるシステムです。
文章では、実際に入力してみましょう!
ループ
変数の操作:#0389 文字列2進数(合計) = 0
コモンイベント:文字列2進数作成(1文字目)
コモンイベント:文字列2進数作成(2文字目)
コモンイベント:文字列2進数作成(3文字目)
コモンイベント:文字列2進数作成(4文字目)
文章:なし, ウィンドウ, 下
文章『\v[381]\v[382]\v[383]\v[384]』でよろしいですか?
選択肢の表示:はい, やり直す, 文字入力をやめる (ウィンドウ, 右, #1, #3)
はいのとき
ループの中断

やり直すのとき

文字入力をやめるのとき
ラベルジャンプ:文字入力終了

分岐終了

以上繰り返し
コモンイベント:文字列2進数参照
ラベル:文字入力終了


文章や選択肢は演出ですので、適当に組んじゃってください。

最初の変数リセットだけは、忘れないようにしましょう。



システムの根幹は、ほとんどがコモンイベントで構成されています。

この後にコモンイベントの内容が出てきますが、きちんと作成すると内容がとんでもなく長くなります。

コモンイベントにして、通常の記述と分けておかないと、編集の必要が出てきたときに追記するのが面倒くさくなります。



では、コモンイベントの内容を見ていきましょう。


コモンイベント : 文字列2進数作成(1文字目)
tc33-10.png

≪実行内容≫
名前入力の処理:#0044, 1文字
変数の操作:#0381 文字入力(1文字目) = $gameActors._data[44]._name
条件分岐:#0044の名前があ
変数の操作:#0389 文字列2進数(合計) += 1

分岐終了
条件分岐:#0044の名前がい
変数の操作:#0389 文字列2進数(合計) += 10

分岐終了
条件分岐:#0044の名前がく
変数の操作:#0389 文字列2進数(合計) += 1000

分岐終了
条件分岐:#0044の名前がた
変数の操作:#0389 文字列2進数(合計) += 10000

分岐終了


実行内容ですが、まず、最初に用意したアクターの名前入力を行います。

そして、その名前を変数に格納しておきます。この変数は確認メッセージで使うだけですので、メッセージ表示をさせない場合、代入させる必要はありません。


つぎに、条件分岐で指定したアクターの名前が”あ”の時に、コード計算のために用意した変数へ値を突っ込んでいきます。

例を見て頂ければ分かりますが、私の独自計算式は単純に足し算しているだけです(笑)


複雑な計算式を用いる場合には、一時的に格納しておく変数も必要になるかもしれません。


本来は全ての文字に対して条件分岐を用意しなければなりませんが、今回の例では4文字しか使っていないので、4文字分しか作成していません。

コピペと内容編集で、頑張って255個作ってください(笑)


コモンイベント : 文字列2進数作成(2文字目)
tc33-11.png


2つめ以降のコモンイベントは、簡単です。

まず、完成した1つ目のコモンイベントをまるっとコピペします。

そして、代入させる確認メッセージ用の変数(赤枠の部分)を変えて、おしまいです。


この操作で、4文字分のコモンイベントを作成していきます。



ちなみに、コモンイベントを使わない場合には、255個の条件分岐×4=1020個もの条件分岐が並ぶので、イベントにこれを直接書き込んでしまうと後に編集するのがかなり面倒くさくなります。

なので、コモンイベントに区分けして書き込むことを推奨します。



コモンイベント : 文字列2進数参照
tc33-12.png

≪実行内容≫
条件分岐:文字列2進数(合計) = 11011
文章:なし, ウィンドウ, 下
文章その言霊は”火”です!
ラベルジャンプ:参照終了

分岐終了
注釈:何も該当しない場合
文章:なし, ウィンドウ, 下
文章その言霊は”該当なし”です!
ラベル:参照終了


最後のコモンイベントは、計算結果を条件分岐として、対応するメッセージを表示させています。

一応、工夫としては、対応するものがあればラベルジャンプを使って終了まで持っていき、対応するものが無ければ最後のメッセージを通過するようにしているくらいですね。

これで、実質的には「対応するコードが無い場合」という条件分岐のような形となります。



そして、計算結果に対するコードですが、好きなだけ考えて書き込んでいってください。

テンプレートなんかがあると楽かもしれませんね。


ここの条件分岐は、思いつく限りとなりますので、無限です。

アイディア次第では、この作業もけっこう膨大なものになるかと思います。


頑張ってください。





以上、言霊システムでした。

テクニックよりも、アイディアが必要なシステムですので、採用できる方は限られてくると思います。



ちなみに、最初の入力を2文字一緒にした場合には、分岐の文字列が2文字分となるため、”ああ”、”あい”・・・のようになります。

対応文字は255個ありますので、255×255=65025個の条件分岐が必要となります。

こんな感じで考えていくと、3文字列の場合には16581375個の分岐、4文字列の場合には4228250625個の分岐となりますので、事実上、作成不可能と言えます(作ったらすごいと思いますが、そこまでするほどのシステムかどうか、考えてみた方が良いかもしれません)。



なので、1文字ずつ入力してね!っていう結論となるわけでした。




余談ですが、私のオリジナル暗号化式では、言葉によっては複数の文字列が該当することになります。

今回の例でも、『たくあい』のそれぞれの文字は順番を並び替えても成立しますので、『あくたい(悪態)』でもいいわけですね(笑)



私のゲームでは、そういった攻略もほしいなと思っていて、そういう意図で作ったシステムだったりします。

また、派生システムがあるので、それとの組み合わせも考慮したシステムなんですね。


もし、きちんとした1対1の暗号を作る必要がある場合(完全一致のみを前提としている場合)はパスワードシステムで作った方が良いでしょう。







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





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

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

ブログランキング・にほんブログ村へ
にほんブログ村

ゲーム制作日記<46> アイテムを使った採取システム

op.png



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



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


今回のシステムは、採集システムを発展させた『アイテムを利用した採取システム』です。

どういうシステムかというと、特定のアイテムを所持している場合にのみ、特定のポイントで採集ができるシステムです。


過去記事『採集システム』を確認したい方はこちら↓
採集システム


では早速、実際の挙動を見てみましょう。


tc32-02.png


今回は、現在制作中の『ALQMEST』で実演してみます。

以前紹介した、ベン君に活躍してもらいましょう。


tc32-01.png


まずは、所持品の確認です。

現在『つるはし』を所持しています。


これから、岩からアイテムを採取します。
そのとき、この『つるはし』が必要となってきます。


tc32-03.png


画像なので分かりませんが、アルトでは、アイテムを採取できません。

なぜなら、彼は『つるはし』を扱えないからです。


というわけで、ここはベンにお任せ!


tc32-04.png


ここでさりげなく、ベンのマップスキルをご紹介します。

ベンは、通常の接触では採集できないアイテムを採集することができます。

例えば、このような岩。他にも、植物など色々な採集ポイントを用意しています。


ただし、採集のためにはアイテムを所持している必要があります。

今回のように、岩からアイテムを採集するためには『つるはし』が必要となります。


それぞれのポイントで必要なアイテムが異なるため、ベンの採集スキルを利用するためには、専用のアイテムを購入しておく必要があります。


ちなみに、ちょっと面倒くさいですが、マップスキルはメニューのスキルからも使用できるため、それを選択した場合には誰が先頭でも採取可能です。ただ、採取ポイントは尋常じゃないくらいあるため、いちいちそんなことしてられないと思います(笑)



さて、さりげなく宣伝をしたところで、システム説明に戻りましょう。

先ほどの画像のように、今回のシステムは『特定のアイテムを所持していないと採集できない、特殊な採集』を作ることができます。

牧場物語で例えるなら、石を手に入れるためにハンマーが必要だったり、木を伐採するために斧が必要だったり。

そういった類のシステムとなります。


今回紹介する形は『特定のアイテムを所持している場合に、採集可能状態となった特定ポイントで、特定スキルを使用すると採集できるシステム』という少し複雑なシステムとなっていますが、要所を押さえて取捨選択すれば、『特定アイテムを使用して採集』『特定スキルを使用して採集』といった、もう少し簡易的にした形にもできます。



それでは、まずは必要なものの確認から。

【必須】
・変数×10
・スイッチ×2
・コモンイベント×3
・リージョン×1

【推奨】
・コモンイベント(マップ範囲取得)

【カスタマイズ】
採集システム



推奨のコモンイベントですが、これは、以前の記事でも紹介させていただきました。

tc32-05.png

≪実行内容≫
変数の操作:#0029 【取得情報】マップ範囲X = $gameMap.width() -1
変数の操作:#0030 【取得情報】マップ範囲Y = $gameMap.height() -1



現在マップの範囲(X軸の最大値、Y軸の最大値)を取得し、変数に格納するコモンイベントです。

今回はコモンイベントを使わずに同じ形で記述していますが、過去記事の無限ミミックシンボルエンカウント畑システムなど、割といろんなところで利用できる処理内容なので、コモンイベントにしておくと少しだけ制作が楽になります。



また、カスタマイズ元の採集システムですが、コモンイベント内容は以下のとおりです。

tc32-06.png

≪実行内容≫
条件分岐:採集01 ≥ 【採集】時間
セルフスイッチの操作:A = ON
変数の操作:#0061 採集01 = 乱数 0..10

分岐終了
変数の操作:#0061 採集01 += 1
ウェイト:60フレーム


以前の記事とは内容が若干異なりますが、やってることはおおむね同じです。

60フレームごとに変数を+1し、指定した値になったら変数を初期値にリセットして、セルフスイッチAをONにする。これだけ。

セルフスイッチAがONになると採集可能なページに切り替わるように、イベント自体を組みます。



では、準備はこのくらいで。

それでは、実際の処理を見てみましょう。



まずは、イベントの内容から見ていきます。

今回の内容は結構複雑なので、処理順に説明していきます。そのため、イベントだったりコモンイベントだったりと、話があちこちに飛びます。

頑張ってついて来てください。


採集イベント:1ページ目
tc32-09.png

 プライオリティ:キャラの下
 トリガー:並列処理

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



採集イベント:2ページ目
tc32-10.png

(画像変更のみの空ページです)


採集ポイントの1ページ目と2ページ目は、セットの内容となっています。

私のゲームにおいて通常の採集ポイントは、時間が経つと画像が変わり採集可能となります。その処理内容と同じですので、パッと見では同じ感じの印象を受けます。

ただし、2ページ目が空なので、普通に採集できるものではないのが分かるかと思います。


このイベントを起動させるためには、特定のスキル(アイテム)が必要となります。


tc32-11.png

≪実行内容≫
注釈:マップの範囲を取得します。
変数の操作:#0029 【取得情報】マップ範囲X = $gameMap.width() -1
変数の操作:#0030 【取得情報】マップ範囲Y = $gameMap.height() -1
注釈:変数情報をリセットします。
変数の操作:#0039 【採取】カウント数 = 0
変数の操作:#0116 【採取】検索座標X = 0
変数の操作:#0117 【採取】検索座標Y = 0
注釈:以下のループ処理で、マップ上の指定リージョンタイル数をカウントします。
注釈:今回は36番をカウントします。採集ポイントの位置に、あらかじめ指定タイルを敷いてください。
ループ
指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【採取】検索座標X},{【採取】検索座標Y})
条件分岐:【取得情報】リージョン = 36
変数の操作:#0039 【採取】カウント数 += 1

分岐終了
条件分岐:【採取】検索座標X ≠ 【取得情報】マップ範囲X
変数の操作:#0116 【採取】検索座標X += 1

それ以外のとき
変数の操作:#0116 【採取】検索座標X = 0
条件分岐:【採取】検索座標Y ≠ 【取得情報】マップ範囲Y
変数の操作:#0117 【採取】検索座標Y += 1

それ以外のとき
ループの中断

分岐終了

分岐終了

以上繰り返し
スイッチの操作:#0081 採取用01 = ON


これは、スキルやアイテムなど処理の起点となるモノに組み込むコモンイベントです。

内容としては、マップ上の全てのタイルのリージョンを調べて、該当リージョン(ここでは36番)の数をカウントします。

リージョンの上に採集イベントを配置することで、実質的に採集イベントの数をカウントすることができます。

このカウントは、後に行われる処理の終了条件として使われます。


採集ポイントの数をカウントしたら、スイッチ:採取用01ONにし、次の処理に進みます。


採集イベント:3ページ目
tc32-12.png

 出現条件:スイッチ採取用01
 プライオリティ:キャラの下
 トリガー:自動実行

≪実行内容≫
注釈:採集可能状態でないため、終了処理に進みます。
変数の操作:#0039 【採取】カウント数 -= 1
セルフスイッチの操作:C = ON


このページは、イベント1ページ目に対応したページとなります。

採集ポイントが採集可能状態でない場合には、採集処理を行わずに終了準備処理へ移行させます。(終了準備処理として、このイベントは待機ページへ切り替えられます)


採集イベント:4ページ目
tc32-13.png

 出現条件:スイッチ採取用01
        セルフスイッチA
 プライオリティ:キャラの下
 トリガー:自動実行

≪実行内容≫
注釈:各位置情報と向き情報を取得します。
変数の操作:#0004 【取得情報】現在位置X = プレイヤーのマップX
変数の操作:#0005 【取得情報】現在位置Y = プレイヤーのマップY
変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
注釈:イベントの位置とプレイヤーの位置を計算します。
変数の操作:#0004 【取得情報】現在位置X -= 【情報取得】イベントX
変数の操作:#0005 【取得情報】現在位置Y -= 【情報取得】イベントY
注釈:計算した位置情報により、条件分岐を組みます。
注釈:以下は、対象に隣接しているとき条件を満たす向きと数値の対応表です。
注釈:↓:X=0、Y=-1
注釈:←:X=+1、Y=0
注釈:→:X=-1、Y=0
注釈:↑:X=0、Y=+1
条件分岐:【取得情報】現在位置X = 0
条件分岐:【取得情報】現在位置Y = 1
条件分岐:プレイヤーが上を向いている
条件分岐:パーティがつるはしを持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了

分岐終了
条件分岐:【取得情報】現在位置Y = -1
条件分岐:プレイヤーが下を向いている
条件分岐:パーティがつるはしを持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了

分岐終了

分岐終了
条件分岐:【取得情報】現在位置Y = 0
条件分岐:【取得情報】現在位置X = 1
条件分岐:プレイヤーが左を向いている
条件分岐:パーティがつるはしを持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了

分岐終了
条件分岐:【取得情報】現在位置X = -1
条件分岐:プレイヤーが右を向いている
条件分岐:パーティがつるはしを持っている
ラベルジャンプ:効果処理

分岐終了

分岐終了

分岐終了

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

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

分岐終了
セルフスイッチの操作:B = ON
ウェイト:2フレーム


このページは、2ページ目に対応したページとなっています。

採集可能状態であるため、イベントの処理判定を行うページです。

内容としては、プレイヤーとイベントの位置、プレイヤーの向き、所持品の判定をし、全ての条件を満たした場合に採集成功の処理を行い、フラグを立てます。条件を満たせない場合には、成功処理を行わず、そのまま終了準備処理へ向かいます。(終了準備処理として、待機ページへ移行します)

大事なのは、いろんな条件がある中で、パーティがつるはしを持っているという条件分岐です。この条件分岐が、この条件付き採集の肝になる部分ですね。



ところで、このページにはこんな処理が入っています。

条件分岐:使用不可がON
ラベル:効果処理
注釈:ここに条件を満たすときの挙動を書き込みます。
アイテムの増減:何かの鉱石 + 1
セルフスイッチの操作:D = ON

分岐終了


この条件分岐ですが、スイッチ:使用不可ONの時という謎の条件分岐となっていますね。

これは、ゲーム中で絶対に使用しないスイッチを条件分岐とすることで、通常は移行しない聖域を作るための処理です。

しかし、ラベルジャンプではこの条件分岐を無視して飛び込むことができるため、実質的にはラベルジャンプのみで移行することが可能な箇所として扱うことができます。

ページを切り替えたりする処理を省くためのテクニックとして、私は使っています。

今回の使用例としては、採集成功となる場合が独立して4条件あるため、それぞれに同様の処理を書くのが面倒であり、仮に修正が必要となった場合には4か所修正する必要が出てきます。

その作業を短縮させるための工夫として、あらかじめ聖域を作っておき、その中に飛び込ませる処理を組んでやることで、修正箇所を減らしています。



さて、このイベントページがなんでこんな面倒くさそうな構造になっているかというと、採集ポイントを複数作る場合にコピペで作りたかったためです。

イベントが完成した後は、作ったイベントを丸ごとコピペして、リージョンを敷いてやるだけで大量生産できます。そのために、結構面倒くさい処理を組んでいますので、頑張ってください。最初だけ作ってしまえば、あとは楽なんです。

(ただし、採集システムと同様の仕様にする場合は、1ページ目のコモンイベントだけ変更する必要があります。使用している変数が違うためです。詳しくは採集システムを参照してください)



で、そうなるとですね。

このイベントがコピペで大量生産されるということは、実は、スイッチ:採取用01ONになった瞬間、全ての採集ポイントのページが上記のどちらか(3ページ目か4ページ目)に切り替わっています。

それぞれのイベントごとに処理が順番に行われていきますが、この中で条件を満たせるイベントは全くない、あるいは、1つだけです。なので、採集成功処理が重複して起こることはありませんので、安心してください。重複したり、無限ループに陥ってしまった場合には、どこかの処理がおかしくなっています。

そして、上記の処理を行った後に移行する待機ページを作ります。


採集イベント:5ページ目
tc32-14.png

 出現条件:セルフスイッチC

(画像のみの空ページです)


採集イベント:6ページ目
tc32-15.png

 出現条件:セルフスイッチB

(画像のみの空ページです)


上記2つの待機ページですが、5ページ目は1・3ページ目に対応したページです。6ページ目は、2・4ページ目に対応したページです。

採集可能状態か、そうでないかで画像を分けると、こういう面倒くさい構造のイベントとなります。並行して作っていくので、頭がこんがらがりそう(笑)


さて、全ての採集イベントが待機状態へ移行したら、いよいよ終了処理へ進みます。

今度は、コモンイベントに飛びますよー。


コモンイベント:終了処理01
tc32-16.png

 トリガー:自動実行
 スイッチ:採取用01

≪実行内容≫
条件分岐:【採取】カウント数 = 0
注釈:全ての採取処理がスルーされた場合の処理です。
注釈:必要に応じて、空振りメッセージなどをここで表示させることができます。

分岐終了
注釈:採取処理がスルーされなかった場合は、カウント数を修正します。
条件分岐:【採取】カウント数 = 1
変数の操作:#0039 【採取】カウント数 -= 1

分岐終了
条件分岐:【採取】カウント数 = 0
注釈:マップの範囲を取得します。
変数の操作:#0029 【取得情報】マップ範囲X = $gameMap.width() -1
変数の操作:#0030 【取得情報】マップ範囲Y = $gameMap.height() -1
注釈:変数情報をリセットします。
変数の操作:#0039 【採取】カウント数 = 0
変数の操作:#0116 【採取】検索座標X = 0
変数の操作:#0117 【採取】検索座標Y = 0
注釈:以下のループ処理で、マップ上の指定リージョンタイル数をカウントします。
注釈:今回は36番をカウントします。採集ポイントの位置に、あらかじめ指定タイルを敷いてください。
ループ
指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【採取】検索座標X},{【採取】検索座標Y})
条件分岐:【取得情報】リージョン = 36
変数の操作:#0039 【採取】カウント数 += 1

分岐終了
条件分岐:【採取】検索座標X ≠ 【取得情報】マップ範囲X
変数の操作:#0116 【採取】検索座標X += 1

それ以外のとき
変数の操作:#0116 【採取】検索座標X = 0
条件分岐:【採取】検索座標Y ≠ 【取得情報】マップ範囲Y
変数の操作:#0117 【採取】検索座標Y += 1

それ以外のとき
ループの中断

分岐終了

分岐終了

以上繰り返し
スイッチの操作:#0082 採取用02 = ON
スイッチの操作:#0081 採取用01 = OFF

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


内容としては、全てのイベントで採集成功処理が行われなかった場合には、空振りメッセージなどの演出を行い、採集成功処理が行われた場合にはフラグを削除します。

そして、次の処理へ進む準備として、再び採集イベントの数(リージョンの数)をカウントします。


最後のスイッチ:採取用02ONされると、採集イベントの終了処理が起動します。

はい、また採集イベントへ戻りますね。


採集イベント:7ページ目
tc32-17.png

 出現条件:スイッチ採取用02
        セルフスイッチC
 プライオリティ:キャラの下
 トリガー:自動実行

≪実行内容≫
変数の操作:#0039 【採取】カウント数 -= 1
セルフスイッチの操作:C = OFF
ウェイト:2フレーム


このページは、採集イベントの1・3・5ページ目に対応したページです。

採集可能状態でない場合には、セルフスイッチCをOFFにして元の状態(1ページ目)に戻します。



採集イベント:8ページ目
tc32-18.png

 出現条件:スイッチ採取用02
        セルフスイッチB
 プライオリティ:キャラと同じ
 トリガー:自動実行

≪実行内容≫
変数の操作:#0039 【採取】カウント数 -= 1
セルフスイッチの操作:B = OFF
条件分岐:セルフスイッチ DがON
セルフスイッチの操作:A = OFF
セルフスイッチの操作:D = OFF

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


このページは、採集イベントの2・4・6ページ目に対応したページです。

採集成功処理が行われた場合には、フラグを削除して1ページ目(採集不可状態)へ、採集処理が行われていない場合には2ページ目(採集可能状態)に戻します。


全ての採集イベントが、これらのどちらかの処理を行います。

結果としては、採集が行われたイベントだけが1ページ目へ変更され、それ以外のイベントは元の状態に戻されます。よって、見かけ上は何の変化も起きていないように見えるというわけです。


さて、全ての採集イベントが無事終了処理を行ったら、最後にコモンイベントも終了処理を行います。

次が、最後に行われる処理となります。


コモンイベント:終了処理02
tc32-19.png

 トリガー:自動実行
 スイッチ:採取用02

≪実行内容≫
条件分岐:【採取】カウント数 = 0
スイッチの操作:#0082 採取用02 = OFF

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


内容としては、全ての採集イベントが終了処理を行った場合に、自分のスイッチをOFFにしてクローズします。これだけ。



以上で、全てのイベントが元に戻されて、最終的には採集が1か所だけ行われる、もしくは、何も起こらないという形で終了します。

ちなみに、私のゲームはプラグインの影響のためか、自動実行中でメッセージを出したときに何故かキャラを動かすことが出来るため、そのバグを封じるためにウエイト2フレームをすべてに入れています。多分、普通はいらない処理ですので、外してもいいかもしれません。でも、なぜウエイトを入れるとバグが治るかは分かっていません(笑)



さて、これで解説は終わりです。

プレイヤーとしては、アイテムやスキルを使っただけなのに、内部ではこんな複雑な処理が行われていたんですね。


作るの大変でした(笑)


しかし、これらのイベントは1回作ってしまえば、あとは楽ちん。

採集ポイントはマップを超えていくつでもコピペとリージョン配置で量産でき、コモンイベントの内容もいじる必要がありません。なんて画期的!




最後になりますが、参考までに制作中のRPG『ALQMEST』において、今回のシステムの起点となるスキルをご紹介します。

tc32-20.png

使用効果のところに、コモンイベント:カウント処理を入れるだけでOKです。あとは、メニュー画面以外では用途がないので、対象なし、使用可能時をメニュー画面にしているだけですね。




このシステムを導入して、皆さんも心置きなく採集を楽しみましょう!

てかこれ、ほんとにRPGなんでしょうか(笑)




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





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

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

ブログランキング・にほんブログ村へ
にほんブログ村

ゲーム制作日記<45> ALQMEST制作状況14

op.png



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



さて、今年は心機一転。
ゲーム制作を頑張っていきましょう。


cr8.png


現在、街の人々やイベントが粗方できあがり、ストーリーを進行させています。

ようやく、街が1つできました。

しかし、まだ細かい部分は出来上がっていませんし、ほんとに骨子だけ。

とりあえず、メインストーリーだけでも完成させておきたいという感じですね。



で、上の画像ですが。

以前紹介しました「ベン」くんの登場です。


仲間は、結構序盤から揃っちゃう予定です。

目標レベルとしては、5か6くらいですね。



システムがいくつかあるので、最初のボスありダンジョンまでに結構色々説明しなきゃいけないので、大変です。

チュートリアルをどうするかも、課題ですね。



現在、実装されているシステムとしては、


・採集システム……マップ上の特定ポイントを調べるとアイテムを手に入れることが出来るシステムです。


・調合システム……特定アイテムを材料として、アイテムを作り出すシステムです。原料の総価格より売却価格も上がるため、積極的に行っていくと良いでしょう。


・キャラクターチェンジシステム……キーボードの「Cキー」あるいは、コントローラーの「RT」を押すことで先頭キャラクターを変更できます。先頭キャラクターによって、使用されるマップスキルが異なり、会話が変わることもあります。


・マップスキルシステム……キーボードの「Sキー」、コントローラーの「LT」を押す、もしくは、メニューのスキルから直接選択することで使用できるスキルです。マップ上で使える様々な便利スキルが、キャラクターごとに設定されています。


・イベント経験値……マップ上の特定のギミックを攻略すると手に入る経験値。この経験値は直接キャラクターに入らず、いったん別の場所にプールされます。その後、任意のタイミングで好きなキャラクターへ振り分けることができます。


・バックアタックシステム……シンボルエンカウントにおいて、敵の背後から接触することで必ず先制攻撃を取ることができます。




このほかにも、戦闘のやり方とか、ショップの仕組みとか、序盤に説明しなきゃいけないことがいっぱいあります(^^;

今後、実装していく予定のシステムもまだいくつかあります。

1つ1つはそれほど複雑なモノではないんですが、オリジナルの要素が多いので、ちょっと説明が大変です。

これらをユーザーの負担にならないように覚えてもらうわけですから、出すタイミングや順番も気をつけなきゃいけないし、ストーリーに沿って載せていけるように考えて作っています。





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





↓クリック応援をお願いします↓

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

ツクールMVテクニック「背もたれの後ろを通りたい」

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


さて、今日はちょっとした小ネタを紹介します。

ツクールMVでゲームを作っていて、皆さんは、この画像のような状況で困ってないでしょうか?

バグ09

この画像は、タイルセットの椅子の後ろ側を通れるようにしたときに発生する現象です。

tc31-04.png

椅子の背もたれ部分を★にすることで、画像のプライオリティが上となるため、後ろを歩けるようになります。

ところが、最初の困った画像のように、椅子に座っているキャラクターの頭が一部切れてしまうという不具合が起きます。


この不具合ですが、実はとあるプラグインを使用すると下の画像のように解消できます。

tc31.png

そのプラグインですが、準公式プラグインの「OverpassTile.js」を使います。

このプラグインは、本来「橋」などの立体交差で使用するプラグインですが、この機能を応用します。




まず、このプラグインで適当なリージョンを設定しておきます。

デフォルトでは、橋の端に置くリージョンが「254」、橋に置くリージョンが「255」となっているかと思います。

tc31-05.png

リージョンを指定したら、マップの作成で椅子と背もたれにリージョンを置きます。

tc31-01.png

こんな感じに設置したら、キャラクターをリージョン「254」に置きます。

tc31-02.png

これで、キャラクターが背もたれの上に表示されるようになります。

また、プレイヤーはリージョン「254」の上を通ることが出来ないため、背もたれを通過しても背もたれの下にしか表示されません。

(本来は、リージョン「254」を通過したイベントあるいはプレイヤーを「255」の上のみ通過させるという機能のプラグインなのですが、その機能を応用して、「254」の上にあるイベントあるいはプレイヤーのみを「255」の上に表示させる機能として活用しています)




ところで、椅子の後ろ側を通れるようになると、問題が1つ発生します。

プレイヤーとイベントが隣接できるようになるため、背もたれの向こうから話しかけることが出来るようになってしまいます。


なので、イベントの実行内容を少し工夫する必要があります。

tc31-03.png

ポイントは、赤枠の部分のように、向き固定にチェックを入れておきます。

これにより、後ろから話しかけても方向が変わらなくなります。


しかし、これでは横から話しかけてもプレイヤーの方を向いてくれないため、実行内容の最初に条件分岐を入れます。

条件分岐:プレイヤーが下を向いている

それ以外のとき
移動ルートの設定:このイベント (ウェイト)
移動ルートの設定:◇向き固定OFF
移動ルートの設定:◇プレイヤーの方を向く
移動ルートの設定:◇向き固定ON

分岐終了


困るのは後ろから話しかけられるときだけなので、条件「プレイヤーが下を向いている」ときはイベントを空にし、それ以外の時には移動ルートの設定で「このイベント」の「向き固定をOFF」にした後に「プレイヤーの方を向く」ようにします。

そのままだと後ろから話しかけれるようになってしまうため、最後に「向き固定ON」するのを忘れないようにしましょう。


あとは、内容を緑枠のところから書き込んでいけば大丈夫です。

これで、椅子の後ろを通れるようにし、かつ、後ろからは話しかけられないイベントの出来上がりです。


ただ、もしイベントを座らせない可能性も想定しておくなら、タイルセットの進行可能方向を以下のように設定しておきましょう。

tc31-06.png

これで、椅子をぶち破って通過することが出来なくなります。




ただまぁ、よくよく考えると、この背もたれってデカすぎですよね。

半分くらいの高さの背もたれの画像って、無いんですかね?

それか、キャラクターが半歩分くらい上に行くようなプラグインとか。



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





↓クリック応援をお願いします↓

にほんブログ村 ゲームブログ ゲーム制作へ
にほんブログ村
プロフィール

猫民のんたん

Author:猫民のんたん

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

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


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

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

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

この人とブロともになる

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