FC2ブログ

ゲーム制作日記<55> 簡易シンボルエンカウント

op.png



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



いやぁ、暑いですね。というかもう、熱いですね。
溶けそう。

そんな中、なかなか更新できない日が続いておりますが、今日は暇を見つけて更新。


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


今回ご紹介するのは、『簡易シンボルエンカウント』です。

シンボルエンカウントは過去にも作ってみました(http://nekotaminontan.blog.fc2.com/blog-entry-31.html)が、結構複雑な内容だったと思います。

そこで、今回はもっと機能を簡素に、そして手軽にシンボルエンカウントを導入できる方法は無いかを模索してみました。




仕様


今回紹介するシンボルエンカウントの特徴ですが、以下の機能を備えています。

・単純にプレイヤーへ近づきます。触れたら戦闘開始です。

・倒したら、その場で30フレームかけて消えます。300フレーム(5秒)後に、同じところに出現します。出現時には音が出ます。

・逃走した場合、その場で180フレーム(3秒)半透明になって停止します。3秒経つと元に戻って索敵を開始します。

・敵はプレイヤーの平均レベルによって自動的に選択されます。シンボルの見た目とはあまり関係ありません。その代わり、コピペだけでどこのダンジョンにも配置が可能です。


(拡張機能)
・索敵ページ、戦闘ページ、勝利後処理ページ、逃走後処理ページの4つに分けて作成しているため、それぞれのページで改変可能です。やろうと思えば、索敵ページを編集したり、移動を制御するイベントを設置することで高度な索敵を可能にすることもできます。

・コモンイベントの内容を編集することで、もっと細かなグループ選択を設定できます。

・コモンイベントの内容を編集することで、出現時や消失時の演出を設定できます。


今回の仕様は以上となります。
一見それなりの機能がありそうですが、内容は大分簡単です。


それでは、まずは準備するものを確認していきましょう。



準備するもの


【必須】
・イベント
・コモンイベント ×4
・変数 ×3(+1)


【推奨】
・創作工房春巻様のデータベースサンプル・ネオ


今回のブログ公開にあたり、創作工房春巻様よりデータベースサンプル・ネオの紹介許可を戴いております。このデータベースサンプル・ネオですが、アクターやエネミーデータ、アイテムや装備、マップデータといった基本的なデータベースが整っており、中編規模の作品をすぐに作れるように用意してあるという優れものです。

そして、今回のシンボルエンカウント作成は、これをそのまま使っておりますので、真似していただければすぐにシンボルエンカウントを導入できるようになっております。

ぜひ、併せてご利用くださいませ。



作り方


それでは、イベントの内容と作り方を説明していきます。まずは、コモンイベントから作っていきます。


コモンイベント
tc39-006.png


コモンイベントは全部で4つ。それぞれの役割ですが、

・【戦闘】トループ決定・・・敵のIDを振り分ける。
・【戦闘】平均レベル算出・・・パーティの平均レベルを算出する。
・【エフェクト】ゆっくり消失・・・イベントの消失演出の処理。
・【エフェクト】ゆっくり出現・・・イベントの復活演出の処理。

となっています。

では、順番に説明していきます。


コモン:【戦闘】トループ決定

≪実行内容≫
条件分岐:【仲間】平均レベル ≤ 4
変数の操作:#0011 【戦闘】トループID = 乱数 2..7
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 8
変数の操作:#0011 【戦闘】トループID = 乱数 11..16
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 12
変数の操作:#0011 【戦闘】トループID = 乱数 20..25
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 16
変数の操作:#0011 【戦闘】トループID = 乱数 29..34
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 20
変数の操作:#0011 【戦闘】トループID = 乱数 38..43
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 24
変数の操作:#0011 【戦闘】トループID = 乱数 47..52
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 28
変数の操作:#0011 【戦闘】トループID = 乱数 56..59
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 32
変数の操作:#0011 【戦闘】トループID = 乱数 65..70
ラベルジャンプ:①

分岐終了
条件分岐:【仲間】平均レベル ≤ 36
変数の操作:#0011 【戦闘】トループID = 乱数 74..79
ラベルジャンプ:①

分岐終了
注釈:パーティ平均レベルが 37 以上の時
変数の操作:#0011 【戦闘】トループID = 乱数 83..88
ラベル:①


今回、使用しております創作工房春巻様のデータベースサンプル・ネオにおける敵グループデータでは、レベルごとにグループ作成されております。上記コモンイベントの内容はそれに合わせてIDの振り分けを行っています。

内容ですが、算出した平均レベルによって敵グループIDをランダムに選択しています。なお、敵グループにある「ミミック」は宝箱の罠として利用することを考慮して選択肢から除外させていただいてます(ID:60-61)。



コモン:【戦闘】平均レベル算出

≪実行内容≫
変数の操作:#0012 【仲間】レベル = 0
変数の操作:#0013 【仲間】人数 = 0
条件分岐:ハロルドがパーティにいる
変数の操作:#0012 【仲間】レベル += ハロルドのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:アレンがパーティにいる
変数の操作:#0012 【仲間】レベル += アレンのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:テレーゼがパーティにいる
変数の操作:#0012 【仲間】レベル += テレーゼのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:リョウがパーティにいる
変数の操作:#0012 【仲間】レベル += リョウのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:ヴァイスがパーティにいる
変数の操作:#0012 【仲間】レベル += ヴァイスのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:フレデリックがパーティにいる
変数の操作:#0012 【仲間】レベル += フレデリックのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:エリザがパーティにいる
変数の操作:#0012 【仲間】レベル += エリザのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:セリーヌがパーティにいる
変数の操作:#0012 【仲間】レベル += セリーヌのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:マーシャがパーティにいる
変数の操作:#0012 【仲間】レベル += マーシャのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:ルキウスがパーティにいる
変数の操作:#0012 【仲間】レベル += ルキウスのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:ウェンディがパーティにいる
変数の操作:#0012 【仲間】レベル += ウェンディのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:ノエルがパーティにいる
変数の操作:#0012 【仲間】レベル += ノエルのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:イリアがパーティにいる
変数の操作:#0012 【仲間】レベル += イリアのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:ダグラスがパーティにいる
変数の操作:#0012 【仲間】レベル += ダグラスのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:アヤメがパーティにいる
変数の操作:#0012 【仲間】レベル += アヤメのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:レオナがパーティにいる
変数の操作:#0012 【仲間】レベル += レオナのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:オリバーがパーティにいる
変数の操作:#0012 【仲間】レベル += オリバーのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:ピーターがパーティにいる
変数の操作:#0012 【仲間】レベル += ピーターのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
条件分岐:アニエスがパーティにいる
変数の操作:#0012 【仲間】レベル += アニエスのレベル
変数の操作:#0013 【仲間】人数 += 1

分岐終了
変数の操作:#0012 【仲間】レベル /= 【仲間】人数
変数の操作:#0014 【仲間】平均レベル = 【仲間】レベル


今回使用しております創作工房春巻様のデータベースサンプル・ネオのアクター全員の条件分岐を記載しています。これにより、作中でどのアクターがパーティーに居ても、現時点でのパーティーにおける平均レベルを算出できるように作っております。なので、作中で全員を使うことが無くとも、とりあえずこの通りに内容を入れておけば、勝手に計算してくれます。

最初の変数操作で、変数の内容を0にリセットするのを忘れずに。

あと、最後に平均レベルを別の変数にしていますが、変数【仲間】レベルをそのまま使用しても構いません。その場合は、【戦闘】トループ決定の条件分岐で使う変数も修正してください。

一応、ここでは他のイベントなどでレベル関連を扱うことがあるかもしれないと思い、念のため変数を分けているだけです。


コモン:【エフェクト】ゆっくり消失

≪実行内容≫
移動ルートの設定:このイベント (ウェイト)
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:252
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:244
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:231
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:213
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:190
移動ルートの設定:◇すり抜けON
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:162
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:129
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:91
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:48
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:0


イベントを30フレームかけて、ゆっくりと消失させていく演出用コモンイベントです。好みに合わせて編集して構いません。

さりげなく、「すり抜けON」が入っておりますが、これはイベントの組み方次第ではなくても大丈夫です。一応、透過度が低いときにすり抜けられると変かな、と思って途中でいれてるだけだったりします。



コモン:【エフェクト】ゆっくり出現

≪実行内容≫
移動ルートの設定:このイベント (ウェイト)
移動ルートの設定:◇不透明度:3
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:11
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:24
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:42
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:65
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:93
移動ルートの設定:◇すり抜けOFF
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:126
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:164
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:207
移動ルートの設定:◇ウェイト:3フレーム
移動ルートの設定:◇不透明度:255


イベントを30フレームかけてゆっくり出現させる演出用コモンイベントです。好みに合わせて編集して構いません。

これも、さりげなく「すり抜けOFF」が入っていますが、透明度が高いうちに通れなくなると不自然かなと思って途中に挟んでいるだけです。


コモンイベントの説明は、以上になります。



それでは、シンボルエンカウントの作り方に入りましょう。


今回のシンボルエンカウントは、全部で4ページ構成です。


EV:1ページ目
tc39-001.png

<トリガー>
イベントからの接触

<実行内容>
注釈:索敵ページ
セルフスイッチの操作:A = ON


任意の画像に設定し、<トリガー>をイベントからの接触に変えておきます。

今回の自律移動タイプは「近づく」にしております。頻度や速度は初期設定なので、何となくプレイヤーに向かってノロノロ歩いてきます。ここを「ランダム」にすると、ただウロウロするだけになります。ここは、好みで変更してください。

プレイヤーに接触すると、イベントの内容が走りセルフスイッチAをONにします。

セルフスイッチAがONになると、戦闘用のページに切り替わります。



EV:2ページ目
tc39-009.png

<トリガー>
自動実行

<実行内容>
注釈:戦闘処理ページ
移動ルートの設定:このイベント (ウェイト)
移動ルートの設定:◇プレイヤーの方を向く
コモンイベント:【戦闘】平均レベル算出
コモンイベント:【戦闘】トループ決定
戦闘の処理:{【戦闘】トループID}
勝ったとき
SEの演奏:Collapse1 (90, 100, 0)
コモンイベント:【エフェクト】ゆっくり消失
セルフスイッチの操作:B = ON

逃げたとき
セルフスイッチの操作:C = ON

分岐終了


イベントがプレイヤーに接触することで切り替わるページです。ここでは、戦闘する敵グループを決定し、戦闘を開始します。

最初に向き変更の操作を入れていますが、稀にバグで、チラッと接触した後に元の方向を向きなおすことがあるので、念のためこのコマンドを入れておいてます。

内容は、最初に作成したコモンイベントでパーティの平均レベルを算出、その後に戦闘グループのIDを決定して、イベントコマンドで戦闘を開始します。雑魚戦闘を想定していますので、基本的には下の画像のように、逃走可にチェックを入れておきます。

tc39-010.png

この時、敗北可にチェックを入れておけば、負けても全滅しないでイベントを起こす仕様にできます。今回の仕様では、敗北可にチェックを入れていませんので、負けたらゲームオーバーとなります。

あとは、それぞれ勝った時と逃走した時で演出を入れ、セルフスイッチで分岐させます。

勝ったときには適当なSEを入れ、最初に作成した演出用コモンイベントを入れた後にセルフスイッチBをONにして、復活待機ページに移行させます。なお、消失演出はこのページに記述してください。理由は後述します。


逃走した時は、そのままセルフスイッチCをONにします。逃走した場合の演出もありますが、今回はページ切り替え後に演出を入れております。理由は後述します。


EV:3ページ目
tc39-008.png

<トリガー>
並列処理

<実行内容>
注釈:戦闘勝利後ページ
移動ルートの設定:このイベント (ウェイト)
移動ルートの設定:◇不透明度:0
移動ルートの設定:◇すり抜けON
ウェイト:300フレーム
SEの演奏:Darkness2 (50, 100, 0)
コモンイベント:【エフェクト】ゆっくり出現
セルフスイッチの操作:A = OFF
セルフスイッチの操作:B = OFF


戦闘勝利後のページです。ここでは、復活までウエイトで待機させ、時間になったら効果音と共に現れるようにしています。

内容としては、まず不透明度を0にし、すり抜けONをかけておきます。

その理由ですが、この待機ページの状態でプレイヤーがマップ移動を行った場合を想定しなければならないからです。

ウエイト中にプレイヤーがマップ移動を行い再び戻ってきた時、イベントは待機状態から開始されることとなります。ここの最初に消失演出を入れている場合、何もしていないのに消失演出が開始されてしまいます。また、最初に不透明度0+すり抜けON処理をしないと待機中のシンボルエンカウントが突っ立っていることになります。

なので、上記の不透明度0+すり抜けON処理を忘れずに入れておきましょう。

一応、イベントが開始した瞬間はチラッと居ることにはなるのですが、並列処理なのでフェードインしている間に消えてくれると思います。もし、この不具合が不安であれば、初期位置を画面外になるように調節しておくと、一瞬で処理してくれることなのでチラッと見えることも無いでしょう。


で、その後の処理ですが、ここで入れるウエイトが再出現までの時間になります。プラグインなどで弄っていなければ60フレーム=1秒ですので、300フレーム=5秒となります。短いと思えばフレームを増やせばいいでしょうし、長いと思えば短くすることでインターバルを調節できます。

あとは、演出でSEとコモンイベントを入れています。上記のとおりに入力すれば、効果音と共にゆっくり出現してくれると思います。

最後に、セルフスイッチをOFFにして最初のページに戻してあげてください。



EV:4ページ目
tc39-004.png

<トリガー>
並列処理

<オプション>
向き固定
すり抜け

<実行内容>
注釈:逃走後ページ
移動ルートの設定:このイベント (ウェイト)
移動ルートの設定:◇不透明度:120
ウェイト:180フレーム
移動ルートの設定:このイベント (ウェイト)
移動ルートの設定:◇不透明度:255
セルフスイッチの操作:A = OFF
セルフスイッチの操作:C = OFF


逃走後に移行するページです。半透明の状態で3秒待機します。3秒後に、元の状態に戻って再度プレイヤーに向かってノロノロ歩き出します。

一応、すり抜け状態なので向き固定を入れなくても大丈夫だと思いますが、念のため入れてます。すり抜けなのに向きが変わると嫌なので。でも、忘れても困らないはず。

このページの最初に、半透明にする処理を入れていますが、これも先に述べた通り。この処理が入らないと、マップ移動後に戻って来たとき半透明になっていないためです。

今回は、逃走後のインターバルをウエイト180フレーム(=3秒)としていますが、これも調節していただいて構いません。あまり短いと、逃げたのに即戦闘となってしまって厄介なので、少なくとも60フレーム(1秒)はあった方が良いと思います。

あとは、時間になったら元の不透明度に戻して、セルフスイッチをOFFにし最初のページに戻してあげます。



以上、シンボルエンカウントの作り方でした。



終わりに


今回のシンボルエンカウントの作り方講座は、いかがでしたでしょうか。

一番大変なところは、戦闘グループIDの振り分けだけで、他は記述も少ないし、比較的簡単な仕様だと思います。

私は、こんな感じに、ただウロウロして倒したら一定時間で戻ってきてくれる程度のシンボルエンカウントで十分だと思っています。やろうと思えば、○マス以内に近づいてきたときに追いかけて――なんてこともできなくはないと思いますが。面倒くさいので、そういうのはいらない派です(笑)

ちなみに、複製するときはコピペするだけです。画像は適宜変えてください。今回の仕様だと、実際に戦うエネミーの画像とシンボルエンカウントの画像がリンクしていないため、マップの雰囲気に合わせた画像を使うだけです。

もし、ダンジョンやエネミーのタイプで画像を変えたい場合には、コモンイベントの【戦闘】トループ決定の内容を編集したり、複数の敵グループ選択用のコモンイベントを作り適宜内容を変更するなどすると良いでしょう。そこら辺は、好みの問題ですね。

ちなみに、敵グループをトループと呼んでいるのは、ツクールXPの名残だったりします(笑)
”隊”、”群れ”という意味らしいです。



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





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

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

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

近況報告 5/20

続きを読む

ゲーム制作日記<54> デフォルト計算式

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


最近、ご無沙汰していますが、細々とツクツクしております。
とは言っても、いろんなものが中途半端ですけどね(笑)

さて、中途半端とはいえ、いろんなものが出来てきたので、そろそろ戦闘関連にメスを入れ始めようかと思いました。


今、デフォルト素材だけで作るプロジェクトを進めているのですが、戦闘もデフォルト計算式にこだわりたい。

ということで、ダメージの計算式は、デフォルトの式である

a.ATK*4-b.DEF*2

に決定。この計算式は、凄くシンプルで分かりやすい。
けど、シンプル故に、ユーザーは割といじりたがる(笑)


今回は、このデフォルト計算式のお話をしようかと思います。



■ツクールMVデフォルト計算式


RPGツクールMVの基本ダメージ計算式は、先ほど示した通り。

a.ATK*4 - b.DEF*2


さて、まずはこの計算式の意味ですが、とっても単純な構造をしています。

・ユーザーの攻撃力が1上がる→ダメ―ジは4増える。

・対象の防御力が1上がる→ダメージは2減る。


これだけ。

ダメージを完璧に相殺するには、相手の攻撃力に対して2倍の防御力があれば良い計算になります。

分かりやすいですね。



しかし、戦闘の計算は、これで完結するわけではありません。
ダメージの処理には、他にもいくつかの処理が関わっているんですね。

それらをちゃんと把握していないと、上手いゲームバランスを組み立てることが難しいんです。


では、他にどんな処理があるのか見てみましょう。

・命中判定と回避判定(命中率)
・会心率(クリティカルによるダメージUP)
・バフ・デバフによる強化・弱体化
・分散(ダメージのブレ幅)


これらの処理が、どのように行われているか、ご存知でしょうか?

実は、デフォルト戦闘の設計には、これらが固定で設定されています。

順番に見ていきましょう。


命中率
攻撃の命中判定は、命中率による命中判定の後に、回避率による回避判定を行います。

具体的には、ユーザーの命中率95%、ターゲットの回避率5%とした場合、

命中判定:95%の確率で命中
回避判定:(100%-5%)で命中


命中率による命中判定を先に処理しますので、まずは、命中率を計算します。

命中率①:100%×95%=95%

このフィルターを通ったものに対して、さらに回避判定による命中率計算を行います。

命中率②:95%×(100%-5%)=0.95*0.95=0.9025

したがって、トータルした命中率は、90.25%の命中率となるわけですね。

命中率と回避率は、職業や敵キャラで設定されているので、その数値を変更すれば良いのですが、この計算式自体は固定となります。

※参照するのは、ユーザーの命中率と対象の回避率の組み合わせとなります。


簡略化したいときは、回避率を削除するいか、命中率を100%にすればどちらか一方だけの計算となるため、分かりやすくなります。


会心の一撃
固定で3倍のダメージです。変更するためには、スクリプトを弄るかプラグインの導入が必要となります。


バフ、デバフについて
バフ・デバフによる数値変化は1段階につき25%です。そして、2段階までとなっています。

1段階バフ・デバフをかけると、数値が25%増減して計算されます。

この幅や重ねがけの回数を変更するためには、スクリプトを弄るか、プラグインの導入が必要となります。


分散
ダメージの幅です。

たとえば、分散20%、ダメージ計算の結果が100の場合、実際のダメージは100から前後20%(80~120)の値になります。


以上が、戦闘に関わる固定設定です。


あとは、防御しているかどうかもありますが、これは防御状態の時に応じて最終ダメージに50%を掛け算したりします。


で、これらの仕様が分かるとですね。

実際にテストプレイをしなくても、Excelなどの表計算ソフトを利用してシミュレートすることが出来ます。

計算に必要な設定項目は、以下の通りです。

・a.ATK(スキル使用者の攻撃力)
・b.DEF(ターゲットの防御力)
・命中率(ユーザー)
・回避率(ターゲット)
・分散
・会心率
・バフ・デバフ効果(25%)


これらを使うと、ダメージの期待値を割り出すことが出来ます。



■期待値計算


まずは、期待値が何なのかというと、

ここで言う期待値とは「無限回数この計算式で攻撃した場合において、ミス(0ダメージ)やクリティカル(3倍ダメージ)も含む、毎回の平均ダメージ」を言います。

期待値の数式的な定義ですが、

(数値*発生確率)の総和

です。理屈は簡単ですね。

これを計算できると、実際にテストをしなくても、計算だけでおおよその戦闘の経過をシミュレートでき、実際に組んでから数回テストするだけで済みます。

なので、計算できるようになっておくとすごく便利。


で、さっそく期待値を出したいんですが。

これを出すために、まずは各攻撃の発生確率を調べなければなりません。


各攻撃って何かというと、

・通常のヒットした時(1倍ダメージ)
・攻撃がミスした時(0ダメージ)
・クリティカルヒットした時(3倍ダメージ)


この3つですね。それぞれが、どのくらいの確率で発生するかを考えていきます。



●攻撃がミスした時

まず、攻撃がミスした時を考えてみましょう。

攻撃がミスする場合というのは、命中判定で命中しなかった場合を考えます。

即ち、先ほど出した命中率を全体から引いた値ですね。

全体は100%で、トータル命中率は90.25%でしたね。


ミス発生率:100%-90.25%=9.75%


よって、9.75%の確率で0ダメージとなります。



●クリティカルヒットの時

次に、クリティカルヒットの時の発生確率を出してみましょう。

クリティカルヒットは、攻撃が命中した場合に、会心率の確率で発生します。

会心率は、デフォルトだと4%に設定されているので、これで計算してみましょう。


まずは、攻撃が命中する確率ですが、


命中率:90.25%


これに対して、会心率は4%ですので、


会心発生率:90.25%*4%=3.61%


よって、この攻撃をしたときの会心発生率は3.61%の確率となります。



●通常の攻撃ヒット時

さて、通常のヒット時について発生率を考えてみましょう。

これは、ミスでもクリティカルでもないときには通常のヒットとなりますから、全体から今までのものを差し引くことで計算できます。

全体の確率は100%、ミスは9.75%、クリティカルは3.61%ですので、


100%-9.75%-3.61%=86.64%


すなわち、通常のヒットは86.64%の確率で発生することが分かりました。



さて、以上でそれぞれの発生率が分かりましたので、下に一旦まとめておきましょう。

・通常ヒット:86.64%
・ミス:9.75%
・クリティカルヒット:3.61%



それでは、いよいよ期待値の計算です。

今回は、a.atk=120、b.def=80として計算します。

まず、デフォルトのダメージ計算式からダメージを計算します。


 a.ATK*4-b.DEF*2=120*4-80*2
=480-160
=320


次に、それぞれ通常ヒット時、ミス時、クリティカルヒット時の倍率を掛け算します。


・通常ヒット時:320*1=320
・ミス時:320*0=0
・クリティカルヒット時:320*3=960


そして、それぞれに発生確率を掛け算します。


・通常ヒット時:320*0.8664=277.248
・ミス時:0*0.0975=0
・クリティカルヒット時:960*0.0361=34.656


最後にこれらを全て足し算します。


277.248+0+34.656=311.904
≒312


よって、期待値は312ダメージとなります。


●期待値計算結果

RPGツクールMVのデフォルト計算式である、下記計算式

a.ATK*4-b.DEF*2

について、

命中率:95%
回避率:5%
会心率:4%
a.atk:120
b.def:80

上記の条件において攻撃を行った場合には、平均すると

約312ダメージ

が、毎回入ると考えられます。


これを基に、例えば、1回の戦闘を平均3ターン程度としたい場合には、

312*3=936

敵のHPを936程度に設定すると、大体3ターンで倒せるということになります。


今回は1対1の戦闘を想定しましたが、このように、期待値を用いて実際の戦闘をシミュレートすることで、戦闘テストを何度も行わずに、平均的な戦闘結果を知ることが出来ます。

また、この考え方を応用すれば敵のHP・ATK・DEFの決定にも利用できます。

少し難しい話だったかもしれませんが、ぜひ試してみてくださいね。



■デフォルト計算式用サンプル


私が考えた、デフォルト計算式用の基本設定サンプルをここに提示しておきます。どうしようか迷ったら、参考にしてみてください。

ちなみに、期待値の計算結果が元の計算式になるようになっていますので、この設定にしておくと、期待値計算をしなくても数値を把握できるようになっています。


●標準型
命中率:98%
回避率:3%
会心率:3%

(トータル命中率: 約95%です)


●ギャンブル型
命中率:95%
回避率:5%
会心率:6%

(トータル命中率: 約90%です)


●安定型
命中率:99%
回避率:1%
会心率:1%

(トータル命中率: 約98%です)



■分散


スキルに分散を設定しておくと、計算結果に対してダメージの値に範囲を持たせることが出来ます。

例えば、基準となるダメージが100、分散が20%だった場合、ダメージは100±20の範囲で決定されます。

分散がどのくらいになろうとも、平均ダメージは概ね計算式の通りとなりますが、実際にダメージがばらつくとプレイヤーの印象が変わってきます。

例えば、先ほどの例の場合には、最低ダメージが80で、最高ダメージが120となりますから、設定した側からすればたった20%のつもりでも、プレイヤーからすると80と120で1.5倍ほどのブレがあるように見えるわけです。

なので、設定する分散の値によって、どのくらいの振れ幅になるのかは把握しておいた方が良いでしょう。


ざっと、一覧を載せてみますので、参考にしてみてください。
個人的にオススメは5%です。


●分散範囲一覧
分散・・・範囲 (プレイヤー視点の範囲格差)
1%・・・99%~101% (2%差)
3%・・・97%~103% (6%差)
5%・・・95%~105% (10%差)
10%・・・90%~110% (22%差)
15%・・・85%~115% (35%差)
20%・・・80%~120% (50%差)
25%・・・75%~125% (67%差)
30%・・・70%~130% (86%差)
33%・・・67%~137% (2倍差)
50%・・・50%~150% (3倍差)
60%・・・40%~160% (4倍差)
67%・・・34%~167% (5倍差)
72%・・・28%~172% (6倍差)
75%・・・25%~175% (7倍差)
78%・・・22%~178% (8倍差)
80%・・・20%~180% (9倍差)
82%・・・18%~182% (10倍差)
91%・・・9%~191% (21倍差)
94%・・・6%~194% (32倍差)
95%・・・5%~195% (39倍差)
96%・・・4%~196% (49倍差)
100%・・・0%~200% (カオス)



■バフ・デバフを考慮した能力値設定


RPGツクールMVには、ステートとは別にバフ・デバフというものがあります。

バフ:数ターンの間、能力値が上がる。1段階につき25%UPする。(最大2段階)

デバフ:数ターンの間、能力値が下がる。1段階につき25%DOWNする。(最大2段階)



バフとデバフは、それぞれ各能力値に付与することができますが、とりわけATK(MAT)やDEF(MDF)は計算式に直接かかわってくるため、この影響は無視できません。

最大で50%~150%まで変動させることが出来るので、何も考えずにバフ・デバフを付与できるようにすると、戦闘バランスが大きく崩れることになります。

そこで、バフとデバフの影響があるときの、基本ダメージ式の変化を見てみましょう。

ここでは、a.ATKとb.DEFについてのみ考えてみます。


●a.ATKを強化(バフ)

基本式: a.ATK*4-b.DEF*2

a.ATKが関わるのはa.ATK*4の部分ですね。ここがバフによって変化します。

1段階:a.ATK*4*1.25=a.ATK*5
2段階:a.ATK*4*1.5=a.ATK*6

a.ATKにバフをかけると、ダメージがa.ATKの値ずつ増えていくことになります。結構な影響力ですね。


次に、a.ATKにデバフをかける場合を見てみましょう。

●a.ATKを弱体化(デバフ)

1段階:a.ATK*4*0.75=a.ATK*3
2段階:a.ATK*4*0.5=a.ATK*2

このように、デバフをかけていくと、a.ATKの値ずつダメージが減っていきます。2段階もかかると、計算式がb.defと同じになってしまうため、値が同じ場合にはダメージが0となってしまいますね。


このことから、a.ATKはb.DEFよりも大きい値の方が良いと分かります。同じ値以下だと、デバフで完封されかねないということになりますから、慎重に導入する必要が出てくるわけですね。


次に、b.DEFに注目してみましょう。

●b.DEFを強化(バフ)

基本式: a.ATK*4-b.DEF*2

b.defが関わるのはb.DEF*2の部分ですね。ここがバフによって変化します。

1段階:b.DEF*2*1.25=b.DEF*2.5
2段階:b.DEF*2*1.5=b.DEF*3

b.DEFにバフをかけると、元数値の50%ずつダメージが減少していきます。a.ATKの時に比べて効果は小さくなりますので、実はb.DEFを操作するバフ・デバフは単純に考えるとa.ATKに対するバフ・デバフの劣化版となるんですね。


では、同様にb.DEFにデバフをかける場合を見てみましょう。


●b.DEFを弱体化(デバフ)

1段階:b.DEF*2*0.75=b.DEF*1.5
2段階:b.DEF*2*0.5=b.DEF*1

もう分かるかと思いますが、b.DEFの50%ずつ減少ダメージが減っていくので、結果として、b.DEFの50%ずつダメージが上がっていきます。





さて、ここまで見て来ると、バフとデバフが最大の効果を発揮する状況というのが、想像できてこないでしょうか。

すなわち、

・a.ATKに2段階のバフをかけ、b.DEFに2段階のデバフをかけた場合
・a.ATKに2段階のデバフをかけ、b.DEFに2段階のバフをかけた場合


この2つの状況ですね。

これらについて、確認してみましょう。

●a.ATKに2段階のバフ&b.DEFに2段階のデバフ

a.ATKに2段階バフ:a.ATK*4→a.ATK*6
b.DEFに2段階デバフ:b.DEF*2→b.DEF*1

よって、ダメージ式は、

a.ATK*6-b.DEF*1

上記のように変化して計算されます。能力値の差によって、カッチリ何倍になるという比は出せないのですが、

・a.ATK=b.DEFの場合:2.5倍
・a.ATKがb.DEFの1.5倍:2倍
・a.ATKがb.DEFの2倍:1.7倍

というように、a.ATKがb.DEFに対して大きくなっていく毎に、バフ・デバフによる効率は減っていきます。



次に、a.ATKに2段階のデバフをかけ、b.DEFに2段階のバフをかけた場合を見てみましょう。


●a.ATKに2段階のデバフ&b.DEFに2段階のバフ

a.ATKに2段階デバフ:a.ATK*4→a.ATK*2
b.DEFに2段階バフ:b.DEF*2→b.DEF*3

よって、ダメージ式は、

a.ATK*2-b.DEF*3

上記のように変化して計算されます。こうなると、a.ATKとb.DEFの関係が逆転していますので、もともとのa.ATKがb.DEFの1.5倍は無いとダメージが通らなくなってしまいますね。


よって、a.ATKはb.DEFに対して、少なくとも1.5倍よりは大きくないと、バフ・デバフだけで封殺される可能性が出てきます。


このギミックをあえて仕込むのも一興ですが、意識していないと思わぬ落とし穴となりそうな問題です。

バフ・デバフを導入する場合には、能力値についても注意しておく必要があります。



■おわり


以上、RPGツクールMVのダメージ計算式について、現時点での考察でした。


世の中には、いろんなダメージ計算式があります。

自分が扱う計算式の特徴をしっかりと理解することが、戦闘バランス調整の第一歩となります。

どの数値がどのように変化するのか。
それによって、ダメージにどの程度の変化がもたらされ、どの程度期待されるのか。

きちんと把握して、より良い戦闘バランスになるよう心がけたいものですね。


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

ゲーム素材の発注について

皆さんこんばんは。
ここのところ、風邪でダウンしてしまい、グロッキーなネコタです。

最近は、製作したくても、もう体力が限界で厳しいです。
帰ったらご飯食べて子供の面倒見て寝る。

一応、子供を寝かした後に2時間程度時間を取れることは取れるので、今までどうにかぼちぼちやっていたんですが、やっぱり体力が落ちてるんですね。子どもから風邪うつされました(苦笑)。


さて、それでは本題。

ゲームを制作しているコミュニティの方々とお話ししていると、何かしら素材が作れる人を結構見ます。
私は素材が全く作れないので、うらやましい限り。
一応、必要そうな本は買ってさらっと勉強はしてたりするんですけど。

ツクールMVなら、プラグイン開発のためにJAVAscriptの知識が必要となるため、初心者向けのプログラミングの本(JAVAscript関連)を数冊購入しています。

また、歩行や戦闘グラフィックをいじるためにはドット絵の知識や技術も必要になるので、ドット絵の本も数冊購入しています。

立ち絵や顔グラも描けるようになりたくて、イラストの本も数冊購入。

音楽関係はまあ、現状足りてるのでやってない(笑)

アニメーションも、まだ何とかなってるのでやってない。


とまあ、それなりに手広くできるようには考えていますが、結局、ものにしている訳ではないため、私に出来ることなんてシナリオ作成とツクールMVを弄るくらいなんですよね。


そんな私がゲーム開発するためには外部の素材が必要不可欠となるわけです。

ということで、素材発注の話。


素材発注するときには、いくつか考えておかなければならないことがあります。

・予算
・納期
・具体的な仕様
・著作権について

とりあえず大別すると、この4つですね。


まず、予算ですが、いくらまで出すことが出来るかを考えておきましょう。

予算は単価ではなく、全体の予算です。1本のゲームを作るために用意することができる金額。
これを把握しないと、発注してから種銭切れになり、結果として中途半端な作品になったり断念することになりかねません。

個人製作なら借金してまで作ろうとは思わないでしょうが、商用である場合には、借金も必要になるかもしれませんからね。お金の話は、結構しっかり考えておいた方が良いです。

ちなみに、こまめに発注してこまめに支出するよりは、しっかりお金を確保しておき一気にたくさん発注した方が、結果的にローコストになりやすいです。



次に、納期です。これも決めておいた方が良いでしょう。

どのくらいで出来るのかが分からなければ、いつまでに必要になるかを考えて発注すると良いです。大体、向こうもこちらの都合に合わせてやってくれます。

連絡をこまめに取り合える環境なら、納期はちょっと短いくらいでも構わないと思います。簡単な案件であれば、極論即日でも良いわけですね(受け手が出来るかどうかになりますが)。


次に、具体的な仕様ですね。

絵なら、ポーズとか衣服の資料を添付してあげた方が良いです。あまりに漠然としていると、向こうも描くことができないので、資料は出来るだけ用意してあげた方が良いでしょう。必要なら画像のサイズ(ピクセル)も指定した方が良いです。

音楽の素材は発注したことがないので分からないのですが、音源や想定されるシーン、曲の長さなど具体的に示した方が良いと思います。

プログラムなら、PCのスペックや容量(どのくらいの空き容量を確保できるか)、使われる言語なんかを伝えといた方がよさそうです。データベースがあるなら、それを提供する必要があるかもしれません。


最後に、著作権についてです。

著作権は、基本的にもらわなくて良いと思いますが、何に使うか目的を明示しておいた方がよいでしょう。案件を受けてくれる場合には提示した使用目的については合意したものと見なすことを、あらかじめお話ししておくと良いと思います。それ以外に使用したいと思ったら、都度著作者に確認する必要があります。

ただ、二次利用(素材そのものの再配布)も検討している場合には、著作権をいただく必要があります。なお、著作権料は話し合いで決めます。具体的にどのくらいという規定はないみたいですが、概ね販売価格の数%~20%程度のようです。


素材の中にはMITライセンスのもと公開されているものもあります。自由に使っていいよというものですが、著作権を放棄したわけではないので注意してください(著作権者の表示は必須です)。



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


ところで、シナリオ制作って案外需要あるんでしょうかね。
気が向いたらお仕事始めてみようかしら?

RPG作りは大変です。

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


最近、思うのが、RPG作りって本当に大変だなぁということ。

学生時代は時間もあったので、長期休暇の時にバーッと作っちゃったりしてましたが、社会人になって時間が取れなくなってからは、ホント進まなくなりましたね(;'∀')

たぶん、最初は誰もが考えると思うのですが、「欲しい素材がすべて揃ってればゲーム作るのなんて簡単じゃね?」と。

実際には、欲しい素材がすべて揃っていても、作るのが大変であることに変わりないです。
欲しい素材が揃ってなければ、それをそろえるのに更に大変になるだけで(´-∀-`;)


素材をそろえても、それを使って組み立てていく作業って、思ったより膨大な作業量だったりするんですよね。

私は現在、ツクールMVでゲーム制作していますが、これにはデフォルト素材も結構入っています。

やろうと思えば、すぐにRPGは作り始めることが出来ます(満足いくものであるかは別として)。


しかし、デフォ素材とデフォ設定だけで面白そうなゲームを作るというのは、それはそれで非常に大変な作業です。

まず、面白いって何だ?というところから始まります。

とりあえず、面白いをスキップして作ってみようと思っても、何をどうすればいいか分かりません(笑)

ツールの使い方から覚えなければいけないんですね。


色々触って試してみて、試行錯誤しているうちに1か月なんてあっという間だと思います。それで、イベントの動かし方を学んでから、ようやくスタート地点。1か月程度では、まだ満足に使いこなせないでしょうから、この時点でやりたいことを全て表現できる、というわけにはいかないんですけど。

作り方を覚えて、簡単な仕組みを作って、動かしてみて・・・

ゲームとして何とか動作をするところまで行けたとします。
しかし、ここからが本番です。
だって、まだ表現したいことが出来る段階ではないですから。

この後に待っていることは、表現したいことを表現できるように、ツールを使いこなせるようになる努力と、必要な素材を作っていく作業、公開のための準備、それらの情報収集です。


ゲームって、作るだけじゃなくて、公開することも考えなきゃいけないんですよね。なんでもそうですけど、作って自己満足で終わっても良いですが、やっぱり他の人にも見てもらいたいですよね。ゲームなら、普通、誰かに遊んでもらいたいもんでしょう。

そのためには、デバッグ(バグを取り除くこと)作業、公開先の登録、デプロイメント(配布できる形にすること)、他人の配布物を使うならクレジットの作成など、やることがたくさんあります。

公開先だって、投稿できるファイルサイズに制限があったりすることも多いので、出来上がったものの容量も考えなければいけません。


こうやってみると、ゲーム作りって、考えることもやることもいっぱいあって大変なんですよね。

でも、やりがいは半端ないですし、やっぱりいろんなことを表現できるのも強みです。ゲームって、実質的になんでもできますから。

漫画は音が出ないけど、ゲームなら音が出ます。小説は文字しかないけど、ゲームならアニメーションも出せます(文字だけのゲームもできる)。アニメは見せるだけで体験させられないけど、ゲームはプレイヤーに参加してもらって体験させることもできます(アニメーションだけ見せることもできます)。

多分、表現媒体として最強だと思います。自由度が高すぎて、詰むことも多いですけど(笑)


そんなゲーム作り。私は、一生続けていくんだろうなぁ。

だって、楽しいもの。
それが一番の原動力です。


ではでは、今日はこの辺で。
ネコタでした。
プロフィール

猫民のんたん

Author:猫民のんたん

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

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

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

育児中のため活動休止中

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

この人とブロともになる

QRコード
QR