スポンサーサイト

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

製作日誌12

さて、体験版としてのバージョンアップはこれで終了なので、もうあまり書くこともありませんね……
(不具合等があれば修正版は出す予定ですが)

ということで、急遽スクリプト講座的なお話をやってみたいと思います。
ただし、先に言っておきます。
私はスクリプトを作るスキルはほとんどありません。コンピューター言語とか、ほぼ習ったこともありません。
そんな私ですら今の八雲の迷宮のようなシステムを作れるツクールvxはやはり神ツールですね。
また、多数の素材製作者様のおかげです。

まぁそんなこんなで、ココから先はツクールvxのエディタを持っていない方には少し分かりづらい話に
なってしまいますので、追記で。(長文注意)


今回は、「防御・抵抗反映率」について話してみたいと思います。
八雲の迷宮をプレイしていただいた方には分かると思いますが、本作品では東方の迷宮と同じく、
攻撃・魔力に「貫通力」という概念を導入しています。
コレは、防御・抵抗反映率を任意に設定することで、敵の防御が高いとほとんどダメージが通らないけど
防御が低いとかなり高いダメージが期待できるスキル、あるいは敵の高い防御力を突き抜けてダメージを
与えるけど、防御の低い敵にもそれほどのダメージは与えられない、という仕様が可能になります。
本来の機能でも、「基本ダメージ」を高めに設定することで防御をほとんど無視するということは
可能ですが、基本ダメージは能力値を上げても変わらないため、特に後半だとほとんどダメージが固定化
してしまう、というデメリットがあります。(バランスを調整する意味では非常に有効ですが……)
しかし、貫通力の設定を使えば、攻撃・魔力が上がるほどダメージが増え、さらに
反映率も後半の敵にも有効に機能させることができます。

さて、そこでそういった「貫通力」の概念を導入したスクリプトですが、まずはこちらをご覧ください。

class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルまたはアイテムによるダメージ計算   ※再定義
  #--------------------------------------------------------------------------
  def make_obj_damage_value(user, obj)
    damage = 0                        # 基本ダメージを取得
    if obj.physical_attack                          # 物理攻撃にチェックがある場合
      damage += obj.base_damage * user.atk / 50 if obj.atk_f > 0   # 基本ダメージ(攻撃)
      damage += obj.base_damage * user.spi / 50 if obj.spi_f > 0   # 基本ダメージ(魔力)
    else
      damage = obj.base_damage
    end
      if damage > 0                                   # ダメージが正の数
        unless obj.ignore_defense                     # 防御力無視以外
          damage -= self.def * 2 * obj.atk_f / 100 if obj.atk_f > 0   # 打撃関係度: 対象者
          damage -= self.mdef * 2 * obj.spi_f / 100 if obj.spi_f > 0  # 精神関係度: 対象者
        end
        damage = 0 if damage < 0                      # マイナスなら 0 に
      elsif damage < 0                                # ダメージが負の数
      damage -= user.atk * 2 * obj.atk_f / 100      # 打撃関係度: 使用者
      damage -= user.spi * 2 * obj.spi_f / 100      # 精神関係度: 使用者
    end
    damage *= elements_max_rate(obj.element_set)    # 属性修正
    damage /= 100
    damage = apply_variance(damage, obj.variance)   # 分散
    damage = apply_guard(damage)                    # 防御修正
    if obj.damage_to_mp  
      @mp_damage = damage                           # MP にダメージ
    else
      @hp_damage = damage                           # HP にダメージ
    end
  end
end


これが、八雲の迷宮で使用しているスキルのダメージ計算式(一部変更していますが)です。
デフォルトにはない「mdef」というパラメータがありますが、これは抵抗力を表すもので、
回想領域さんの「魔法防御パラメーター追加」スクリプトを使用させていただいています。
スクリプト経験者なら分かるかと思いますが、「かなりの力技」です。
取り敢えず、スクリプト配布とか一切考えず、自分の作品だけで使えればいいやと思ってやった結果がこれです。

さて、「防御反映率」について少し解説しますと……
「damage += obj.base_damage * user.atk / 50 if obj.atk_f > 1 # 基本ダメージ」
で、「基本ダメージ×攻撃力/50がダメージ」、と定義しています。そして、
「damage -= self.def * 2 * obj.atk_f / 100 if obj.atk_f > 1 # 打撃関係度: 対象者」
で、ダメージから「防御関係度×防御力/50」を引く、となります。
(抵抗反映率についても基本的には同じ処理を行っています)

これをデータベース上で見てみると……
データベース2


橙の「飛翔韋駄天」で言うと、基本ダメージを140、打撃関係度を40に設定しています。
この場合、ダメージは140×攻撃力/50-40×防御力/50……つまり、
「1.4×攻撃力-0.4×防御力」×2となり、「攻1.4/防0.4」に対応するわけですね。
本作品では通常攻撃の威力は攻撃力の2倍となっているので、デフォルトの処理(4倍)にしたい場合は
それぞれの数値を2倍してやる必要があります。

これのいい所は、防御反映率を通常より高く設定することもできること。
例えば、敵のスキルは基本的に味方のスキルより防御・抵抗の反映率を高めに設定しています。
リグル(ボス)のナイトバグトルネードは攻1.8/防1.2なので、これをダメージ0に抑える
ことが出来ても、通常攻撃(攻1.0/防0.5)が普通にダメージ通ったりすることも有り得ます。
(そうでもしないと、防御や抵抗より体力を上げる方が安定になるので)

ただし、このスクリプトを用いると、デフォルトの「基本ダメージ」という概念が消失します。
「物理攻撃にチェックがついている」スキルは全て攻撃・魔力依存のダメージになりますので、
デフォルトの基本ダメージを扱いたい場合は物理攻撃のチェックを外さないと基本ダメージは取得できません。
また、基本的に回復用にしか作ってないので、ダメージを与えるスキルでは有効に機能しません。
本来なら、メモ欄に「防御反映率:n」とか書いて反映させるのがスマートなやり方だと思うのですが、
やり方がよく分からなかったのでこういう無理矢理な方法でやってます。
スクリプトはこんな素人でも(競合を無視すれば)少し改変するだけで斬新(?)なシステムを
作ったりもできるので、今までスクリプトを弄ったことがない方も、興味がある方は是非スクリプトの
改造に挑戦してみてください。
スクリプトを一から書ける人は尊敬するなぁ……
(※一般の作品にはこのスクリプトの使用はお薦めできません。理由は、本作品以外では
色々と使い勝手が悪いのと、不具合があってもサポートできるだけのスクリプト知識がないためです。)

ということで、今回はこの辺で。
スポンサーサイト

コメント

非公開コメント

プロフィール

asfil

Author:asfil
FC2ブログへようこそ!

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

この人とブロともになる

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