【済】ツクールアドバンス風特技計算式の添削をお願いします

hei
記事: 3
登録日時: 2017年1月19日(木) 20:43

【済】ツクールアドバンス風特技計算式の添削をお願いします

投稿記事by hei » 2018年1月05日(金) 21:48

VXのRGSS2で「RPGツクールアドバンス」の特技ダメージ計算式を再現してみたのですが、
出来に自信が無いのでアドバイスをお願いします。

*ツクールGBAの特技計算式
「魔法」
基本ダメージ-(対象の魔法防御-使用者の魔法防御)
「必殺技」
基本ダメージ-(対象の魔法防御-使用者の攻撃力)
*使用者の値が対象の魔防を上回った場合は基本ダメージが上限となる
*基本ダメージが0以下なら0~3ダメージ

*必須の分岐
  1. 回復魔法かどうか *デフォルトのまま
  2. 魔法か必殺技か *精神関係度が1以上かで判定
  3. 対象の魔防(精神力)より上か
添付ファイル
gba.png
最後に編集したユーザー hei on 2018年1月07日(日) 12:54 [ 編集 1 回目 ]

faida
記事: 177
登録日時: 2015年12月17日(木) 16:44

Re: ツクールアドバンス風特技計算式の添削をお願いします

投稿記事by faida » 2018年1月06日(土) 07:17

重要度が高い順に説明していきますね。
①「case」での比較方法は「===」です。
つまりこの場合、「精神関係度が0か1か」で「1以上」ではないです。
別に0か1かにしかしないなら問題は全くないんですが、それでもわざわざcaseを使う必要性はありません。
「if obj.spi_f == 0」とelseだけで十分です。
②基本ダメージが0~3になった場合でも、属性の影響及び防御、分散度の影響を受けます。
ダメージを0~3にしたい場合は工夫が要ります。
③「damage」とだけある行は書いてあるだけ無駄です。
分かりやすいので別に構いませんが、一応処理を挟むので体感がないくらいには処理時間がかかります。

以上3点、あまり問題はないんですが私が気になった点です。
私なら以下のように組み立てます。

コード: 全て選択

  def make_obj_damage(user, obj)
    flag = false # ②
    damage = obj.base_damage
    if damage > 0
      if obj.spi_f == 0 && user.atk <= self.spi # ①
        damage -= self.spi - user.atk
        flag = true if damage < 0 # ②
      elsif obj.spi_f > 0 && user.spi <= self.spi # ①
        damage -= self.spi - user.spi
        flag = true if damage < 0 # ②
      end
    end
    damage = elements_max_rate(obj.element_set)
    (中略)
    damage = apply_guard(damage)
    damage = rand(4) if flag # ②
    if obj.damage_to_mp
    (中略)
    end
  end
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
hei
記事: 3
登録日時: 2017年1月19日(木) 20:43

Re: ツクールアドバンス風特技計算式の添削をお願いします

投稿記事by hei » 2018年1月06日(土) 22:46

faidaさん返信ありがとうございます。

コードまで添付していただいて恐縮なのですが、
このコードは上の画像で言うと657~679行、682~683行、
(デフォルトの[Game_Battler]657~671行、674~675行)に上書きすればよいのでしょうか?
自分のコードや新規データを上書きしてみたのですが

コード: 全て選択

● スキルの効果適用
    (中略)
    make_obj_damage_value(user, skill)            # ダメージ計算 (デフォルトの881行)

辺りで引っかかってエラーが出てしまうもので。

それともう1つ「アイテムかどうかの判定」を失念していまして、
GBAの能力値非参照&分散度ありを再現するため「ダメージ効果」側に設定した場合
自分のコードだと見事に能力値を参照してしまいました。
一応668行を「when 2」にして『1=必殺技、1=アイテム、3=魔法』と判定させて回避はできたのですが…。
faida
記事: 177
登録日時: 2015年12月17日(木) 16:44

Re: ツクールアドバンス風特技計算式の添削をお願いします

投稿記事by faida » 2018年1月07日(日) 00:54

添付したコードはあくまで参考という形で参照してください。今回はメソッド名が間違っていました。
本来そこは「def make_obj_damage_value(user, obj)」でした。
画像が貼られているのにメソッド名が間違っているとかどんな大ボケだよ
あと私は今現在VXを所持していないので、動作確認はできません。お手数ですが補完等はそちらでお願いします。
スキルかどうかの判別は「if obj.is_a?(RPG::Skill)」でできるはずです。

コード: 全て選択

  def make_obj_damage_value(user, obj)
    flag = false
    damage = obj.base_damage
    if obj.is_a?(RPG::Skill) && damage > 0 # ここ変更
      if obj.spi_f == 0 && user.atk <= self.spi
        damage -= self.spi - user.atk
        flag = true if damage < 0
      elsif obj.spi_f > 0 && user.spi <= self.spi
        damage -= self.spi - user.spi
        flag = true if damage < 0
      end
    end
    (略)
  end
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
hei
記事: 3
登録日時: 2017年1月19日(木) 20:43

Re: ツクールアドバンス風特技計算式の添削をお願いします

投稿記事by hei » 2018年1月07日(日) 12:54

試行錯誤の結果なんとか想定通りの結果を得る事が出来ました。
ありがとうございました!

“VX / Ace:質問” へ戻る