class Scene_Battle < Scene_Base
attr_accessor :log_window
end
class Game_Battler < Game_BattlerBase
def manual_make_damage_value(value, subject, item)
value *= item_element_rate(subject, item)
value *= mdr
value = apply_critical(value) if @result.critical
value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
@result.make_damage(value.to_i, item)
end
def custom_formula_lightningstrike(a, b )
log_window = SceneManager.scene.log_window
targets =
targets = targets |= [$game_troop.alive_members[[b.index-1, 0].max]]
targets = targets |= [$game_troop.alive_members[[b.index+1, $game_troop.alive_members.size-1].min]]
item = a.current_action.item
targets.each_with_index { |target, index|
standard_formula = 200 + a.mat * 2 - target.mdf * 2
target.result.clear
target.result.used = item_test(a, item)
target.result.missed = (target.result.used && rand >= item_hit(a, item))
target.result.evaded = (!target.result.missed && rand < item_eva(a, item))
if target.result.hit?
unless item.damage.none?
target.result.critical = (rand < item_cri(a, item))
value = standard_formula - (0.5 * standard_formula)
target.manual_make_damage_value(value, a, item)
target.execute_damage(a)
log_window.clear
log_window.add_text("The lightning jumps!") if index > 0
log_window.display_action_results(target, item)
end
end
}
b.result.clear
return 0
end
def custom_formula_souleater(a, b )
log_window = SceneManager.scene.log_window
standard_formula = a.atk * 4 - b.def * 2
item = a.current_action.item
b.result.clear
b.result.used = item_test(a, item)
b.result.missed = (b.result.used && rand >= item_hit(a, item))
b.result.evaded = (!b.result.missed && rand < item_eva(a, item))
if b.result.hit?
unless item.damage.none?
b.result.critical = (rand < item_cri(a, item))
b.manual_make_damage_value(standard_formula, a, item)
damage = b.result.hp_damage
b.execute_damage(a)
log_window.display_action_results(b, item)
end
end
if b.hp <= 0 && a.hp < a.mhp
heal = [(-damage * 0.4), -(a.mhp - a.hp)].max.to_i
a.manual_make_damage_value(heal, a, item)
a.execute_damage(a)
log_window.clear
log_window.add_text(sprintf("%s is healed for %d HP by the strike!", a.name, heal.abs))
log_window.display_action_results(a, item)
end
b.result.clear
return 0
end
end
Add this as a new script above main, then in your skill formula put either a.custom_formula_lightningstrike(a, b ) or a.custom_formula_souleater(a, b ). Remember to replace the standard_formula with whatever calculation you're using.