スポンサーサイト

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

ゲーム制作日記<36> 畑システム

op.png



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


すみません、最近、激務過ぎて、ブログの更新がおっつきませんでした。
で、激務ついでに新システムができたので、発表します(笑)


今回紹介するシステムは、名付けて「畑システム」です。


イメージとしては、牧場物語?ルーンファクトリー?
そんな感じの、を導入します。


イメージが湧かないかもしれないので、今回も、まずは画像で説明しましょう。


tc26-17.png


目の前に、っぽい敷地があります。


tc26-33.png


そして、手持ちのアイテムはこんな感じ。
肥料を持っています。


tc26-19.png


に踏み入って決定ボタンを押すと、このように「種を撒ける」ことをにおわすアナウンスが流れます。


tc26-20.png


そして、畑レベルの確認と、行動を選択できます。
畑レベルについては、後述します。


tc26-21.png


『種をまく』を選択すると、このように、手持ちの種一覧が表示され、撒きたい種を選択できます。


tc26-22.png


種を撒いてみました。
種の画像は、御味噌屋さんからいただきました。
ありがとうございます。


tc26-23.png


種のある個所で決定ボタンを押すと、今度は、水を撒くことが選択できます。


tc26-24.png


水をやると、このように、給水中の画像が出てきてアナウンスしてくれます。ここには水を撒いてますよ、みたいな。

この画像も、御味噌屋さんからいただきました。
本当に、ありがとうございます。


tc26-25.png


一定時間が経つと、このように成長しました。
まだ、雑草っぽいです。


tc26-26.png


どうやら、まだ水を与えることが出来るようですね。
早速、水を与えてみましょう。


tc26-27.png


給水中のアイコンが表示されました。

ちなみに、手持ちの水は消費されていきますので、水を持っていないと、作物を育てることができません。気を付けましょう。


tc26-28.png


さて、お話ししている間に、が咲きました。
良い感じで成長してきましたね。


tc26-29.png


おや?
どうやら、収穫できるようです。


tc26-30.png


今回はカンタリオンの種を撒いたので、カンタリオンという花を収穫できました。


tc26-34.png


アイテムボックスを見ると、この通り。
カンタリオンの種を1つ消費し、水を2つ消費しました。

その代わり、カンタリオンが8つ増えています。


tc26-32.png


ちなみに、肥料を撒きまくると、このように畑レベルを上げることが出来ます。

畑レベルが上がると、作物の成長速度が速くなり、収穫までの時間を短縮することが出来るようになります。



以上が、畑システムの実際の挙動でした。



仕様を簡潔にまとめると、
・作物を育てて収穫するまでには、種、水が必要です。
・畑があれば、そこに好きな種を撒くことができます。
・作物は、畑に撒いた数だけ収穫できます。(今回は8つにしています)
・作物に水をあげ、しばらく放っておくと成長します。
・成長段階が上がるたびに、水が必要となります。
・畑にはレベルがあり、レベルが高い畑では作物が早く育ちます。


ざっと、こんな感じの仕様です。

ちょっと地味かもしれませんが、放置でアイテムを増やすことのできる、今時なアイテム生成システムです。


しかし、これだけのシステムを作るのに、大変苦労しました(笑)

一見すると、そこまで難しくなさそうなシステムですが……
意外と、シンドイ内容だったりします。


というのも、いろんなパターンで改変できるよう自由度を高めた結果、システムが複雑になりまして。


制作者側としての機能ですが、ある程度コピペで作れ、さらに、好みに合わせて改変が出来るように仕上げました。

制作者側に対する具体的な仕様ですが、

・畑の形は自由に作ることが出来る。(飛び石状も可能)
・畑の大きさは自由に変更できる。
・撒ける種の種類は自由に増やせる。
・作物ごとの成長速度を設定できる。
・作物ごとに成長段階を設定できる。
・畑レベルの上限を設定できる。
・畑レベルを上げるために必要な肥料撒きの回数を設定できる。

こんな感じです。


基本的なシステムはコピペコモンイベントで行い、細かい設定は、複製して中身をいじることで設定可能としています。

ただ、あまりいじり倒すとかなり大規模なイベントシステムになりますので、必要最小限の機能にとどめておいても良いかもしれません。今回の例は、最大限にいじりまくっているので、かなり複雑で大掛かりなものとなっています。


ちょっとだけ、覚悟しておいてください。


また、このシステムにはデメリットが幾つか存在します。プラグインで解消できるものもいくつかありますが、それなら、もう全てをプラグインで作ってもらいたいというのが正直なところです(笑)

・イベントを大量に用意する必要があります。
・変数を大量に使用する可能性があります。
・スイッチを大量に使用する可能性があります。
・並列処理を多用する可能性があるため、重くなるかも?
・畑は1マップにつき1つまで(大きさ、範囲は自由です)
・畑には1回で全撒きになります(飛び石状の畑でも、全部に撒かれます)

まあ、普通の畑を1個2個作る分には、まず問題ないです。
大規模なモノや特殊なモノを作る場合は、ちょっと都合が悪いかもしれません。




それでは、先ずは必要なモノの確認からいきましょう。


【必須】
・コモンイベント ×5(コアとなる物です)
・スイッチ ×3(コア用)
・変数 ×10(コア用)
・リージョンID ×1
・イベント ×1(コア用)

・コモンイベント ×1×畑の数(畑のあるマップ数です)
・スイッチ ×3×畑の数(畑のあるマップ数です)
・変数 ×4×畑の数(畑のあるマップ数です)
・イベント ×畑のセル数(マスの数)×種の種類×畑の数

・イベント ×畑のセル数(マスの数)


【推奨】
・コモンイベント(マップ範囲取得用)
・コモンイベント(必要であれば、会話用にいくつか)




【推奨】のコモンイベントは、以下のような内容です。

コモンイベント: マップ範囲取得
tc26-35.png

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



変数の操作で、スクリプトを書き込めます。
これにより、マップの大きさを取得できるので、テンプレートとして用意しておくと良いでしょう。

なお、得られる数値は1から始まりますが、実際の座標は0から始まるので、座標を変数で入力する際の都合上、あらかじめ-1しておきます。



コモンイベント: 【会話】表示(右)
tc26-36.png

変数の操作:#0013 【画像】X座標 = 415
変数の操作:#0014 【画像】Y座標 = 23



会話などでグラフィックを表示させる場合には、こういった座標を指定しておくテンプレートを用意しておくと、楽です。

使用する画像は同じ大きさで作成し、あらかじめちょうど良い位置に調整しておいて、X座標とY座標を変数に代入しておきます。

ピクチャの移動や表示の際に、表示先の座標を変数で指定できるので、このテンプレートを差し込むだけで都合の良い場所に表示させることが出来て便利です。




それでは、畑イベントに使用するイベントの構造を説明します。

イベントは、大きく分けると3つの構造に分かれています。


1つ目は、コアとしての機能を担当するイベント群です。
種を撒くための処理だったり、分岐だったり、アイテムの表示を担当しています。
改変・修正するときにまとめて行えるよう、主にコモンイベントを使用しています。

2つ目は、それぞれのマップにある畑を管理するイベント群です。
条件分岐を多用しますが、大部分はコピペで作ることができます。
ただ、作業自体は単純ですが、ちょいちょい内容変えるのが面倒くさいです。

3つ目は、畑そのもののイベントです。
アイコンや初期の動作を担当しています。


構造的には3つに分類されますが、結構、あちこちに処理が点在しています。どこから手を付けていいか悩ましいところですが、まずは下準備から行きましょうか。


まず、アイテムを準備しましょう。
機能として最低限必要なモノは、種アイテムです。

tc26-37.png

tc26-38.png


種アイテムは、通常アイテムとして表示する用のものと、別枠で使用するダミーを用意しておく必要があります。
ダミーは、通常アイテムコピペして作ります。


ちなみに、私のゲームでは、

通常アイテム : フィールドや戦闘などで使用できる消耗品。
大事なもの  : イベントで必要となるアイテム。
隠しアイテムA: 非表示の、システム・イベント上必要となる物。
隠しアイテムB: 都合上、一時的に格納する必要があるアイテム。

といった分類をしています。


ダミー用の種アイテムは、選択肢表示する際、一時的に種だけを格納したいため、隠しアイテムBに分類されるものとなっています。


あとは、拡張機能用として、肥料を用意しています。

水や肥料を使用せず、撒いて放置するだけで良い場合は、必須のアイテムではありません。



それでは、まずはコアの内容から説明していきましょう。


tc26-40.png


このマップでのイベント配置はこんな感じになっています。
畑システムで利用しているイベントは色枠で囲った部分です。

そして、コアとなるのは、赤枠で囲った部分です。


では、コアのイベントの中身を見てみましょう。


tc26-43.png

<実行内容>
条件分岐:【畑】ID:1使用中がOFF
コモンイベント:【畑】種選択

それ以外のとき

分岐終了


1ページ目は、畑の上で決定ボタンを押したときの処理です。

その畑が使用中でなければ、最初に紹介した畑メニュー画面を表示させます。

畑メニュー画面の処理はコモンイベントで編集していますので、後ほど解説します。


tc26-44.png


2ページ目は、畑に水をあげた時のアイコン表示用ページです。
これは表示だけで、内容は特にありません。
赤枠の部分を設定しておきましょう。


tc26-45.png

<実行内容>
ウェイト:5フレーム
スイッチの操作:#0064 【畑】クリアタイム = OFF


3ページ目は、ウエイトタイムです。

処理の都合上、一瞬だけこの時間を設けないと収穫後に連続して畑メニュー画面が出てしまうためです。





次に、1ページ目の内容にあるコモンイベント:【畑】種選択の解説をしていきます。

tc26-46.png

<実行内容>
コモンイベント:【会話】表示(左)
ピクチャの表示:#2, Alto_2, 左上 ({【画像】X座標},{【画像】Y座標}), (100%,100%), 0, 通常
ピクチャの移動:#2, 左上 ({【画像】X座標},{【画像】Y座標}), (100%,100%), 255, 通常, 20フレーム
変数の操作:#0121 【畑】種ID = 0
文章:なし, ウィンドウ, 下
文章\n<アルト>「この場所は、種を撒けそうだな。
ループ
文章:なし, ウィンドウ, 下
文章\n<アルト>「この畑のレベルは\c[17]\v[221]\c[0]だぜ。
選択肢の表示:種をまく, 肥料をまく, 何もしない (ウィンドウ, 右, #1, #3)
種をまくのとき
コモンイベント:【畑】種ID取得処理
条件分岐:【畑】種不所持がON
文章:なし, ウィンドウ, 下
文章\n<アルト>「あ・\.・\.・\.\.
文章 種をもってねぇや。
コモンイベント:【会話】終了(フェード)
ループの中断

それ以外のとき
プラグインコマンド:KeyItemNumber 4 1
アイテム選択の処理:【畑】種ID, 隠しアイテムB
コモンイベント:【会話】終了

分岐終了
コモンイベント:【畑】種ID取得後処理
コモンイベント:【畑】種まき準備
スイッチの操作:#0062 【畑】種まき = ON
ループの中断

肥料をまくのとき
条件分岐:パーティが肥料を持っている
コモンイベント:【畑】畑レベル処理

それ以外のとき
文章:なし, ウィンドウ, 下
文章\n<アルト>「あ・\.・\.・\.\.
文章 肥料をもってねぇや。
コモンイベント:【会話】終了(フェード)
ループの中断

分岐終了

何もしないのとき
コモンイベント:【会話】終了
ループの中断

分岐終了

以上繰り返し



(処理中にあるプラグインコマンドですが、これは神無月サスケさんのKeyItemNumberというプラグインで、隠しアイテムBにおいても個数表示をさせるためのコマンドです。このプラグインを導入していないなら、必要ない処理です。)


このコモンイベントは、メニュー用の内容となっています。
ざっくり内容を説明すると、会話処理で畑レベルをアナウンスし、次にどうするかの選択分岐を行います。

さて、このコモンイベントの中に、さらに沢山のコモンイベントが散りばめられています。会話用のコモンイベントは都合上扱いやすいようにと作ったので、これはさておき。

畑システムのためのコモンイベントがいくつかありますので、今度はこれらを紹介していきます。

・【畑】種ID取得処理
・【畑】種ID取得後処理
・【畑】種まき準備
・【畑】畑レベル処理


以上の4つが、メインの処理を行っているコモンイベントです。


まずは、【畑】種ID取得処理から説明していきます。

tc26-48.png


<実行内容>
スイッチの操作:#0103 Js.小窓 = OFF
注釈:種の数をカウントし、選択肢用のリストを作成します。
ループ
条件分岐:パーティがカンタリオンの種を持っている
アイテムの増減:カンタリオンの種 - 1
アイテムの増減:カンタリオンの種 + 1
変数の操作:#0123 【畑】種所持判定 += 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがフラウラの種を持っている
アイテムの増減:フラウラの種 - 1
アイテムの増減:フラウラの種 + 1
変数の操作:#0123 【畑】種所持判定 += 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがペンサミエントの種を持っている
アイテムの増減:ペンサミエントの種 - 1
アイテムの増減:ペンサミエントの種 + 1
変数の操作:#0123 【畑】種所持判定 += 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがアヴェンダルの種を持っている
アイテムの増減:アヴェンダルの種 - 1
アイテムの増減:アヴェンダルの種 + 1
変数の操作:#0123 【畑】種所持判定 += 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがベルコルの種を持っている
アイテムの増減:ベルコルの種 - 1
アイテムの増減:ベルコルの種 + 1
変数の操作:#0123 【畑】種所持判定 += 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがサリックスの種を持っている
アイテムの増減:サリックスの種 - 1
アイテムの増減:サリックスの種 + 1
変数の操作:#0123 【畑】種所持判定 += 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがパドゥープの種を持っている
アイテムの増減:パドゥープの種 - 1
アイテムの増減:パドゥープの種 + 1
変数の操作:#0123 【畑】種所持判定 += 1

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

分岐終了

以上繰り返し
注釈:種を1種類でも持っているかどうかの判定を行います。
条件分岐:【畑】種所持判定 ≥ 1
スイッチの操作:#0061 【畑】種不所持 = OFF

それ以外のとき
スイッチの操作:#0061 【畑】種不所持 = ON

分岐終了
変数の操作:#0123 【畑】種所持判定 = 0



(処理中にあるスイッチ操作:Js.小窓=OFFの処理は、神無月サスケさんのTinyGetInfoWndを利用している場合に必要な処理です。このプラグインで使用されているスイッチをOFFにしておかないと、ループ処理により大量の小窓が出現します。プラグインを導入していなのであれば、不要な処理です)


内容は長く見えますが、内容は単純です。
カンタリオンの処理を例に、説明していきますね。


まず、カンタリオンの種を持っているかどうかの条件分岐を組みます。

そして、アイテムの増減を行いますが、アイテムの増減が2つありますね。

同じものが選択されて-1+1されているように見えますが、実は違うアイテムです。

まず、条件分岐では通常アイテムのカンタリオンの種を持っているときという条件分岐を組み、通常アイテムのカンタリオンの種を-1します。
そして、ダミーのカンタリオンの種を+1します。

さらに、種が1個でもダミーと入れ替えられた時の判定のために、フラグ用の変数+1させます。これは、スイッチで代用しても構いません。

この処理をループで囲み、手持ちのカンタリオンの種(通常アイテム)が無くなるまでループさせます。種が無くなったら、この部分の処理を中断します。


そのあとをつらつらっと見てみると、ループ処理がたくさん見えると思います。

これらは、カンタリオンの処理をコピペして、内容をフラウラの種、ペンサミエントの種・・・と変えていっているだけです。

全てのループを終えたら、最後に条件分岐で【畑】種所持判定を行っています。

この値が1以上の時、すなわち、1つでも種が通常アイテム→ダミー用の隠しアイテムBに交換された場合は、何かしらの種を持っていることになるので、スイッチ【畑】種不所持をOFFにします。

種を全く持っていない場合には、この値がのままになるので、スイッチ【畑】種不所持をONにします。

そして、処理が終わったので変数【畑】種不所持判定=0にリセットしておきます。(スイッチを使う場合は、これをOFFにしておきます)


以上が、コモンイベント【畑】種ID取得処理となります。

自分で名前をつけといてなんですが、種IDはこの時点では取得していません(笑)

リストを作る処理でした。

種IDの取得は、【畑】種選択の中で、この処理を行った後に行われるアイテム選択の処理で取得されます。





次に、【畑】種ID取得後処理について説明します。

tc26-49.png

<実行内容>
注釈:リスト作成に使用された種を、通常アイテムに戻します。
ループ
条件分岐:パーティがカンタリオンの種を持っている
アイテムの増減:カンタリオンの種 + 1
アイテムの増減:カンタリオンの種 - 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがフラウラの種を持っている
アイテムの増減:フラウラの種 + 1
アイテムの増減:フラウラの種 - 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがペンサミエントの種を持っている
アイテムの増減:ペンサミエントの種 + 1
アイテムの増減:ペンサミエントの種 - 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがアヴェンダルの種を持っている
アイテムの増減:アヴェンダルの種 + 1
アイテムの増減:アヴェンダルの種 - 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがベルコルの種を持っている
アイテムの増減:ベルコルの種 + 1
アイテムの増減:ベルコルの種 - 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがサリックスの種を持っている
アイテムの増減:サリックスの種 + 1
アイテムの増減:サリックスの種 - 1

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

分岐終了

以上繰り返し
ループ
条件分岐:パーティがパドゥープの種を持っている
アイテムの増減:パドゥープの種 + 1
アイテムの増減:パドゥープの種 - 1

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

分岐終了

以上繰り返し



ここでは、注釈にある通り。
ダミーにされた種をもとの通常アイテムの種に戻します。


先ほどの【畑】種ID取得処理コピペして、内容をちょこちょこいじります。

今度は、ダミー→通常アイテムに戻す処理なので、条件分岐はダミーの種を持っているときに変更し、アイテムの増減では

ダミー用の種-1
通常アイテム用の種+1

というように、符号を逆にしていきます。
(加算と減算のチェックを入れ替えてあげればOKです)


種所持判定は行っても良いですが、既に行っているので、ここでは消しています。

残していても余計な処理が少し行われるだけなので、不都合はそんなに無いかもしれません。




それでは、今度は【畑】種まき準備に参りましょう。

tc26-50.png

<実行内容>
注釈:取得した種IDにより、種まき処理へと移行するための準備を行います。
注釈:ID:152=カンタリオン
注釈:ID:153=フラウラ
注釈:ID:154=ペンサミエント
注釈:ID:155=アヴェンダル
注釈:ID:156=ベルコル
注釈:ID:157=サリックス
注釈:ID:158=パドゥープ
条件分岐:【畑】種ID = 152
アイテムの増減:カンタリオンの種 - 1

分岐終了
条件分岐:【畑】種ID = 153
アイテムの増減:フラウラの種 - 1

分岐終了
条件分岐:【畑】種ID = 154
アイテムの増減:ペンサミエントの種 - 1

分岐終了
条件分岐:【畑】種ID = 155
アイテムの増減:アヴェンダルの種 - 1

分岐終了
条件分岐:【畑】種ID = 156
アイテムの増減:ベルコルの種 - 1

分岐終了
条件分岐:【畑】種ID = 157
アイテムの増減:サリックスの種 - 1

分岐終了
条件分岐:【畑】種ID = 158
アイテムの増減:パドゥープの種 - 1

分岐終了
スイッチの操作:#0103 Js.小窓 = ON
変数の操作:#0018 【取得情報】マップID = マップID
注釈:取得された現在のマップID・種IDにより、変数を指定された畑へ格納します。
注釈:以下、畑のあるマップIDを条件として分岐させ、コピペして内容を変更してください。
注釈:▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
条件分岐:【取得情報】マップID = 5
変数の操作:#0181 【畑】ID:1_種ID = 【畑】種ID

分岐終了
注釈:▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲



ここでの処理は、種の消費種IDの受け渡しを行っています。


まず、選択された種IDにより、消費させる種を条件分岐で選択します。

種IDは0、もしくは、任意のアイテムIDが1つしか入らないので、その他の分岐を作る必要はありません。

これも、カンタリオンの処理を作った後に、コピペで複製して、条件分岐のアイテムをちょこちょこ変えただけです。


種消費の処理が終わったら、変数の操作でマップIDを取得します。

取得したマップIDは、これから種を撒こうとする畑のあるマップを指します。


条件分岐を組み、そのマップ専用の種IDを格納する変数に、先ほど取得した種IDをつっ込んでおきます。





長くなったので、ここで一旦解説を中断させていただきます。

【畑】畑レベル処理は、肥料をあげる場合の拡張機能の処理ですので、肥料を使わない場合は不要な処理です。

なので、メインのコア部分の処理はここまでとなります。



最初に言った通り、なかなかに大規模なシステムでしょ?(笑)

こんなのがまだまだ続くんです(^^;


次回は、各マップで行う処理を説明していきますね。




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





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

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

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

コメント

Secret

No title

おつかれさまです。
超大作おつかれさまです。
いよいよアルトさんが農夫に見えてきますな笑
しかしこれを応用すると
卵→ひよこ→ニワトリ→非常食…じゃなくて卵
の養鶏システムもできそうですな!(笑)

では、続きを楽しみにしてます。

Re: No title

おおー、養鶏システムの発想はなかったですねw

確かに、作物と一緒に歩くニワトリを持って来れば、養鶏システムが出来そうです。
そっちの方が、移動させるものが少なくて楽かもしれないですね。
プロフィール

猫民のんたん

Author:猫民のんたん

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

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


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

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

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

この人とブロともになる

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