[RMVX ACE] TRIHAN MAKES SKILLS FOR YOU!

Posts

Pages: 1
Trihan
"It's more like a big ball of wibbly wobbly...timey wimey...stuff."
3359
I figured rather than just posting neat skills I've made in VX Ace, I'd open up the floor a little. Got a skill idea you're not sure how to implement effectively? Post it here and I'll see if I can get it working for you!
Lightning Jump
Attacks up to 4 targets, one at highest damage, then jumps to a different target and deals 75% damage, then jumps to yet another target doing 50% damage, then jumps again to yet another target doing 25%
Ideally, a target would only ever be hit at most one time (thus if there are less than 4 enemies to target, the spell ends instead of jumping back to an already hit target)

Fireblast
Attacks 1 target at full power, everyone else is damaged by 30% power.

Paladin Strike
A physical attack that heals an ally with the lowest HP by 40% of the dealt damage.

Revenge
Physical attack that scales upwards by the amount of damage taken, where every 1% health lost translates to 2% increased damage

Reboot
A revive skill that can only target robot-type allies. You cannot target dead/defeated humans with this skill

I had another one that I wanted, but it slipped my mind...
Trihan
"It's more like a big ball of wibbly wobbly...timey wimey...stuff."
3359
Those should all be pretty straightforward, I should have formulae for them by tomorrow.
Trihan
"It's more like a big ball of wibbly wobbly...timey wimey...stuff."
3359
For Lightning Jump and Fireblast, was the intention that the player pick the initial target? Also, how are robot type allies identified? Is it a character class?
Yeah the intention was they pick a target.

Other than their sprites and classnames being a robot I dont have any specific identifier. Would a note in the class work? Type=robot or something
Trihan
"It's more like a big ball of wibbly wobbly...timey wimey...stuff."
3359
If the class name is robot I can work with that; what's its ID?
Trihan
"It's more like a big ball of wibbly wobbly...timey wimey...stuff."
3359
Here's everything except Reboot. For Revenge just put this in the formula box of your skill:

hpp=100-(a.hp*100/a.mhp);damage=a.atk*4-b.def*2;ed=(damage*hpp/100).to_i;damage+ed


For Lightning Jump, Fireblast and Paladin Strike copy these into a new script and in the formula box put a.custom_formula_lightningjump(a,b), a.custom_formula_fireblast(a,b) and a.custom_formula_paladinstrike(a,b):

class Scene_Battle < Scene_Base
  attr_accessor :log_window
end

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_lightningjump(a, b)
    log_window = SceneManager.scene.log_window
    targets = a.current_action.opponents_unit.alive_members
    targets.delete(b)
    if targets.length > 3
      targets = targets.shuffle.take(3)
    end
    targets.unshift(b)
    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.25 * standard_formula * index)
          target.manual_make_damage_value(value, a, item)
          target.execute_damage(a)
          log_window.clear
          log_window.add_text("The lightning jumps!")
          log_window.display_action_results(target, item)
        end
      end
    }
    b.result.clear
    return 0
  end
  
  def custom_formula_fireblast(a, b)
    log_window = SceneManager.scene.log_window
    targets = a.current_action.opponents_unit.alive_members
    targets.delete(b)
    targets.unshift(b)
    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))
          if index == 0
            value = standard_formula
          else
            value = standard_formula * 0.3
          end
          target.manual_make_damage_value(value, a, item)
          target.execute_damage(a)
          log_window.clear
          log_window.add_text("The fire spreads!")
          log_window.display_action_results(target, item)
        end
      end
    }
    b.result.clear
    return 0
  end
  
  def custom_formula_paladinstrike(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
    targets = a.current_action.friends_unit.alive_members
    targets.delete_if { |target| target.hp == target.mhp }
    if targets.length > 0
      lowest = targets[0]
      targets.each { |target| p "#{target.name} #{target.hp}"; lowest = target if target.hp < lowest.hp }
      lowest.manual_make_damage_value(-damage * 0.4, a, item)
      lowest.execute_damage(a)
      log_window.clear
      log_window.add_text(sprintf("%s is healed by the strike!", lowest.name))
      log_window.display_action_results(lowest, item)
    end
    b.result.clear
    return 0
  end
awesome! I can't wait to try these out
Trihan
"It's more like a big ball of wibbly wobbly...timey wimey...stuff."
3359
For Reboot, did you want non-robots to not even be chosen as targets, or for the skill simply to not work on a non-robot if one is targeted? Or better yet, have it auto-target a robot if you targeted a non-robot.
Pages: 1