ページ 1 / 1
【済】ツクールアドバンス風特技計算式の添削をお願いします
Posted: 2018年1月05日(金) 21:48
by hei
VXのRGSS2で「RPGツクールアドバンス」の特技ダメージ計算式を再現してみたのですが、
出来に自信が無いのでアドバイスをお願いします。
*ツクールGBAの特技計算式
「魔法」
基本ダメージ-(対象の魔法防御-使用者の魔法防御)
「必殺技」
基本ダメージ-(対象の魔法防御-使用者の攻撃力)
*使用者の値が対象の魔防を上回った場合は基本ダメージが上限となる
*基本ダメージが0以下なら0~3ダメージ
*必須の分岐
- 回復魔法かどうか *デフォルトのまま
- 魔法か必殺技か *精神関係度が1以上かで判定
- 対象の魔防(精神力)より上か
Re: ツクールアドバンス風特技計算式の添削をお願いします
Posted: 2018年1月06日(土) 07:17
by faida
重要度が高い順に説明していきますね。
①「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
Re: ツクールアドバンス風特技計算式の添削をお願いします
Posted: 2018年1月06日(土) 22:46
by hei
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=魔法』と判定させて回避はできたのですが…。
Re: ツクールアドバンス風特技計算式の添削をお願いします
Posted: 2018年1月07日(日) 00:54
by faida
添付したコードはあくまで参考という形で参照してください。今回はメソッド名が間違っていました。
本来そこは「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
Re: ツクールアドバンス風特技計算式の添削をお願いします
Posted: 2018年1月07日(日) 12:54
by hei
試行錯誤の結果なんとか想定通りの結果を得る事が出来ました。
ありがとうございました!