ORK Framework 3を使ってみよう!(5)〜戦闘計算式を調整する〜


計算式を設定する

  • Game > Formulaでいろんな計算式の登録ができる

  • ノードをつなげていく形式で計算式を組み立てるので、視覚的に分かりやすい

  • ただし四則演算をしない

    • 前から順に計算するので、A + B / C が自動的に ( A + B ) / C なる

    • 四則演算するには A + ( B / C ) と組み立てる必要がある

  • サンプルではPhysical Damage(物理ダメージ)とMagical Damage(魔法ダメージ)が設定されている

  • 「使用者のATK / (( 50 + 対象のDEF ) / 50)」という計算式になっている

    • DEFが50でダメージ半減の扱い

視覚的に分かりやすくはある

物理攻撃計算式を改変する

  • 50という固定値が入ってると融通が効かないので改変する

  • ひとまずツクールに則って「使用者のATK * 4 - 対象のDEF * 2」にしてみる

  • Physical Damageの計算式を変更する

    • 既にAbilityに設定済みの計算式なので、新規作成せずに改変した方が変更の手間が省ける

  • 先頭から2番目のBegin Sub Calculationノードを選択し、Remove Chainボタンで全てのノードを削除する

こうすると
全消し
  • Formula Settingsノードを選択し、Use Mininum Valueを有効化

    • (エディタの誤字)

    • これでダメージ最低値が0になる

      • これを入れないと防御の高い相手は攻撃されると回復しかねない

最低ダメージを1に保証したい場合は1で
  • Add NodeボタンからBase > Begin Sub Calculationで下流にノードを追加

    • 前述の通り、四則演算をしないので()で括る

      • FormulaにはInitial Valueが設定できるので、混ざらないようにする

    • ノードを未選択だと非接続のノードが追加される

    • Status Valueノードの後ろ側の○とValueノードの前側の○をドラッグして繋げば接続される

  • Initial ValueからCombatant > Status Valueを選択

  • Status ValueからATKを選択

ここまでで「( 使用者のATK 」
  • Add NodeボタンからValue > Valueで下流にノードを追加

  • OperatorからMultiplyを選択し、Valueを4に設定

  • AddボタンからBase > End Sub Calculationで下流にノードを追加

    • しっかり()を閉じる

ここまでで「( 使用者のATK * 4 )」
  • Add NodeボタンからBase > Begin Sub Calculationで下流にノードを追加

  • OperatorからSubを選択

  • Initial ValueからCombatant > Status Valueを選択

  • Status ValueからDEFを選択

  • Game ObjectからTargetを選択

ここまでで「( 使用者のATK * 4 ) - ( 対象のDEF 」
  • Add NodeボタンからValue > Valueで下流にノードを追加

  • OperatorからMultiplyを選択し、Valueを2に設定

  • AddボタンからBase > End Sub Calculationで下流にノードを追加

これで「( 使用者のATK * 4 ) - ( 対象のDEF * 2 )」

魔法攻撃計算式を改変する

  • MATKとMDEFに置き換えてMagical Damageも同様に変更する。

    • ツクールの魔法攻撃は「固定値 + 使用者のMATK * 2 - 対象のMDEF * 2」

    • Formulaで設定するのは「使用者のMATK * 2 - 対象のMDEF * 2」

      • 固定値の設定方法は後で

やることは大体同じ

状態異常成功率の計算式を作る

  • せっかくLUCKを追加したから状態異常の付与成功率に使ってみる

  • ツクールにおける付与成功率は「100 +(使用者の運 - 対象の運) * 0.1」%らしい

    • LUCKが1上がるごとに0.1%成功率が上がる計算

  • 流石にしょっぱすぎるので1%くらいは変動させたい

    • 「100 + 使用者の運 - 対象の運」%にしてみる

    • Formula Addボタンから新しい計算式を追加し、適当に名前をつける

      • とりあえずEffects Chanceにしとく

    • Add NodeボタンからValue > Valueで下流にノードを追加

    • Valueを100に設定

    • Add NodeボタンからCombatant > Status Valueで下流にノードを追加

    • Status ValueからLUCKを選択

    • Add NodeボタンからCombatant > Status Valueで下流にノードを追加

    • OperatorからSubを選択

    • Status OriginからTargetを選択

    • Status ValueからLUCKを選択

基本は一緒

逃走成功率の計算式を作る

  • AGIを使って逃走確率も計算式を作ってみる

  • ツクールの逃走成功率は「0.5 * パーティの敏捷性 / トループの敏捷性」

    • ORKの形式に合わせて「( 0.5 * パーティの敏捷性 / トループの敏捷性 * 100 )」%にする

    • Formula Addボタンから新しい計算式を追加し、適当に名前をつける

      • とりあえずEscape Chanceにしとく

    • Add NodeボタンからBase > Begin Sub Calculationで下流にノードを追加

    • Initial Valueを0.5に設定

    • Add NodeボタンからCombatant > Status Valueで下流にノードを追加

    • OperatorからMultiplyを選択

    • Staus ValueからAGIを選択

    • Combatant ScopeからBattleを選択

      • 戦闘に参加しているメンバー全員を対象にする

      • 設定次第では戦闘不参加の控えメンバーも設定できるので、戦闘参加中メンバーを指定すると後々便利かも

ここまでで「( 0.5 * パーティの素早さ」
  • Add NodeボタンからCombatant > Status Valueで下流にノードを追加

  • OperatorからDivideを選択

  • Status OriginからTargetを選択

  • Status ValueからAGIを選択

  • Combatant ScopeからBattleを選択

  • Add NodeボタンからValue > Valueで下流にノードを追加

  • OperatorからMultiplyを選択

  • Valueを100に設定

  • Add NodeボタンからBase > End Sub Calculationで下流にノードを追加

これで「( 0.5 * パーティの素早さ / トループの素早さ * 100 )」

先制攻撃と不意打ちの計算式を作る

  • AGIを使って先制攻撃と不意打ちの計算式も作ってみる

  • ツクールではパーティの敏捷性の合計値がトループの敏捷性の合計値より大きいか小さいかで固定値が適用される

    • パーティの敏捷性合計値が高い場合、先制10%、不意打ち3%

    • トループの敏捷性合計値が高い場合、先制5%、不意打ち10%

  • これを再現するにはIF構文が必要

    • 一応該当するノードはある

  • Formula Addボタンから新しい計算式を追加し、適当に名前をつける

    • とりあえずPreemptive Chanceにしとく

  • Add NodeボタンからCombatant > Status Valueで下流にノードを追加

  • Status ValueからAGIを選択

  • Combatant ScopeからBattleを選択

    • ここまでで「味方AGIの合計値」

  • Add NodeボタンからCombatant > Status Valueで下流にノードを追加

  • OperatorからSubを選択

  • Status OriginからTargetを選択

  • Status ValueからAGIを選択

  • Combatant ScopeからBattleを選択

    • ここまでで「味方AGIの合計値 ー 敵AGIの合計値」

  • Add NodeボタンからCheck > Check Valueで下流にノードを追加

    • 2つの数値を比較するノード

  • ValueからValue > Current Value (Formula)を選択

    • 現在の値「味方AGIの合計値 ー 敵AGIの合計値」を判定する

  • Check TypeからIs Greaterを選択

    • これで『「味方AGIの合計値 ー 敵AGIの合計値」が0以上かどうか』というIF構文になる

    • 先頭のキャラクターに依存するなら直接UserのAGIを指定してもいい

IF構文の代わり
  • Add NodeボタンからValue > Valueで下流にノードを追加

    • 先にSuccess(Trueの場合)に繋がる

  • OperatorからSetを選択

    • 既に「味方AGIの合計値 ー 敵AGIの合計値」が入っているので上書きする

  • Valueを10に設定

  • Check Valueノードを選択する

  • Add NodeボタンからValue > Valueで下流にノードを追加

    • Successが接続済みの場合Failed(Falseの場合)に繋がる

  • OperatorからSetを選択

  • Valueを5に設定

値はお好みで
  • Formula CopyボタンでPreemptive Chanceを複製し、適当に名前をつける

    • とりあえずSneak Chanceにしとく

  • Successに繋がるValueを3に変更

  • Failedに繋がるValueを10に変更

Successが低い方なので注意

この記事が気に入ったらサポートをしてみませんか?