このページにはBakinの機能を組み合わせて使うことでさまざまなゲームシステムを実現する制作Tipsを記載しています。
下記に登場するサンプルプロジェクト「Orb Stories」「ダンジョンRPGサンプル」は、Bakinのトップメニュー>ゲームギャラリーにあります。
「ダンジョンRPGサンプル」では一人称カメラにした際プレイヤーを非表示にするために、データベース>キャストの移動用グラフィックに、「グラフィック設定をしないスタンプ」を設定しています。
グリッド単位の移動(地形のマス目単位に動く)は共通イベントを使うことで実現できます。
「ダンジョンRPGサンプル」のバトルでは、パーティ側に前列/後列の概念を設定しています。(シンプルにするためにあえて敵は前列のみにしています。)
後列のメンバーは射程の長い武器を使わないと敵を攻撃できませんし、逆に敵からも素手の攻撃は基本当たりません。
これらの仕組みは下記の機能を設定することで実現しています。
ゲーム定義>ルールと操作>バトルレイアウトの設定や、マップ設定パレット>敵分布、イベントパネル「バトル実行と結果の確認」にてバトル時の敵味方の配置の指定ができます。
バトル中の表示位置だけではなく、敵味方の距離もここで設定した内容をもとに算出されます。
ダンジョンRPGサンプルでは下記の画像のような配置をしています。
射程の概念をバトルに導入するにはまず、ゲーム定義>ルールと操作にて「射程を使用」をONにします。
そして「射程判定タイプ」を後述する「列」または「距離」のどちらかを指定してください。
「列」と「距離」の違いはゲーム定義>ルールと操作>「射程判定タイプ」をご覧ください。
次にデータベース>アイテムや、データベース>キャスト>基本タブにて、武器やキャスト自身(素手攻撃)の射程を設定する必要があります。
射程の単位はバトルレイアウトのグリッドです。
「ダンジョンRPGサンプル」のバトル中にメンバーの上に出ているFront/Backの表示はレイアウトツール>バトルステータスにて表示物を設定しています。
「ダンジョンRPGサンプル」ではバトルシーンにて、パーティのステータス表示部分に攻撃されたときのダメージ値やエフェクトが出るようになっています。
前列/後列の概念がバトルに入ると、深いダメージを負ったメンバーを後列に回す、といった順番の並び替えに意味が出てきます。
「ダンジョンRPGサンプル」ではバトルコマンドとして「場所入れ替え」をできるようにするとともに、戦闘不能になったメンバーを自動的に後列に回すといった処理も行っています。
バトル中に並び替えコマンドを使えるようにするには、データベース>キャスト>バトルタブの「バトルコマンドのメニュー」にて、割り当てる機能に「場所を入れ替える」を指定したコマンドを作成してください。
バトル中の状態によって自動的にメンバーを後列に送るには、まずゲーム定義>ルールと操作にて「バトル中の状態による並び替えを使用」をONにします。
またその際、必要に応じて「状態解除時に元の並びに戻す」をONにしてもいいでしょう。
そして、どの「状態」になったら後方に下がるのかは、データベース>状態定義の基本設定「付与の間、パーティの後方に移動」にて指定します。
「ダンジョンRPGサンプル」では、エンカウントバトルとボスバトルなど必要に応じて背景の2Dグラフィックを切り替えています。
これはイベントを使って実現しています。
「ダンジョンRPGサンプル」では、「アイテムリスト」や「図鑑」にあたる各メニューにて、「武器だけ」や「貴重品のみ」といった表示する項目の絞込みを行っています。
これはデータベースの「管理タグ」とレイアウトツールの機能を組み合わせて実現しています。
データベースの項目ツリーの下に位置する管理タグ+メモ欄に、”#”を付けたタグを自由に設定できます。
またアイテムは基本設定の「消耗品」「武器」「防具」の設定や価格を0に設定することで内部的にタグが生成されています。
タグがついた項目のうちどれを表示するかをレイアウトツールで指定します。
アイテム選択画面などのレイアウトプロパティーにある「表示するアイテムの管理タグ」にてタグを指定することで表示する項目を指定できます。
タグを複数指定するとAND条件(「〇〇かつ××」)になることに留意してください。
「図鑑」タイプのレイアウトでは、データベースの各項目にある「そのほか」タブにて「図鑑登録」をオンにした項目だけが表示されることに注意してください。
ダンジョンRPGサンプルの図鑑、すなわち「探索手帳」のモンスターには、敵キャストだけが表示されるようになっています。
これを実現するために、まずデータベース>キャストでいわゆるモンスターに相当するキャストには#Monsterタグを設定しています
そしてレイアウトツール>キャスト図鑑のレイアウトプロパティー「表示するアイテムの管理タグ」に#Monsterを指定することで実現しています。
「ダンジョンRPGサンプル」では「ナイフ+1」のような強化されたアイテムが宝箱から出てきたり、手持ちのアイテムを強化してくれるイベントが発生します。
下記のような機能を組み合わせてこれを実現しています。
あるアイテムを強化できるアイテムにしたい場合は、まずデータベース>アイテムで強化させたいアイテムの「強化可能」をオンにすることを忘れないでください。
宝箱から出てくるアイテムについては、データベース>アイテムのカスタムイベントに、アイテムを強化する内容のイベントを組んでいます。
カスタムイベントはアイテムを取得したときに起動します。
イベントの中では乱数とループを使って”+1”から”+3"までのアイテムが登場するようになっています。
B1マップでのアイテム強化イベントはレイアウトツールとコモンイベントの組み合わせで実現しています。
レイアウトツール>「強化するアイテム選択」画面のサブメニューコンテナのアクションから、共通イベント「アイテム強化_B1」を呼び出しています。
またレイアウトプロパティー「変数指定」に、コモンイベント側で使う『アイテムの強化』や『複雑な変数ボックスの操作』で使う『アイテム袋のn番目のパラメータ』変数を指定してください。
強化するアイテム選択画面は、コモンイベントとの組み合わせで効力を発揮することに注意してください。
アイテムのどの能力を強化するかはイベント内容で自由に設定できます。
アイテムの強化についてはサンプルイベントを共通イベントの中にもおいてありますので、参考にしてみてください。
(注意)
強化したアイテムはそれぞれ別の種類のアイテムとして扱われます。
ゲーム定義>ルールと操作にて設定できるアイテム袋の容量は持てるアイテムの「種類」の数を指定できるようになっています。
すなわち強化したアイテムはそれぞれ"1種類"とカウントされることになります。
画面上にオートマッピング付きのミニマップを表示しています。
マップ上に発見したドアや宝箱のアイコンも表示されるようにしました。
これらは下記の機能を組み合わせて実現しています。
レイアウトツールで文字列の描画用パネルに特殊書式\minimappreviewを指定するだけでミニマップは表示できます。
ミニマップのサイズや表示位置はパネルの設定が反映されます。
「ダンジョンRPGサンプル」では、レイアウトツール>イベント用フリーレイアウト画面にて”minimap”というレイアウトを作成し、そのレイアウトを共通イベントから呼び出すことでミニマップを表示しています。
プレイヤーが地形・物体の上を歩いた際に足音を鳴らすことができます。
リソース>地形のプロパティーにある「効果音」にて足音を設定できます。
物体の上を歩いた際の足音は、効果音を設定してある「地形」を割り当てることによって鳴らすことができます。
リソース>3D/2Dスタンプの簡易コリジョンのプロパティーにある「地形割り当て」にて、地形を指定してください。
「地形」に設定された「効果音」が適用されます。
ゲーム定義>ルールと操作に足音のボリュームと足音の再生速度の設定があり、一律で変更することができます。
またイベントパネル「足音の設定変更」を使って変更することもできます。
個別の足音のボリュームを調整したい場合は、リソース>サウンドで使用している足音のボリュームを変更するとよいでしょう。
バトルの攻撃時、モンスターに駆け寄って斬りつけるような表現はバトルイベントを使うことで実現できます。
イベント内容については下記の画像を参考にしてください。
一度のスキル攻撃で連続的にダメージを与える表現はコモンイベントを使うことで実現できます。
イベント内容については下記の画像を参考にしてください。
キャストや職業の最大レベルを設定した上で、イベントによってその最大レベルを変更させることができます。
キャストのステータスの変更パネルを活用します。
「第一章が終わったら」や、「あるアイテムを手に入れたら」といったゲームの区切りにイベントを設定すると良いでしょう。
例えば下記のようなことを表現できるようになります。
ゲーム全体の最大レベルは99
ゲームスタート時のキャストAの最大レベルは20。
第一章が終わった時点でイベントによって最大レベルが50までアップする。
a_n_wind_discard や a_n_rm_wind_discard、map_wind_discardなどのシェーダーを使って地面に生えている草が風で揺れているような表現ができます。
『Orb Stories』の3Dスタンプsb_obj_nature002_Grass01aのマテリアルsb_obj_nature002_Grass01a(sb_obj_nature002_Grass01a)を参考にしてみてください。