Autor: Kyonides Arkanthes

Introducción
¿Querían permitirles a sus monstruos que se vengaran de los héroes que matan a sus compañeros de armas? ¡Ahora pueden hacerlo! 😆

Versión XP

# * KMonsterPals XP
#   Scripter : Kyonides Arkanthes
#   2019-10-29

# Este script permite a los monstruos que (sobre)actúen luego de que derroten a
# su amigo monstruoso. Usan una técnica oculta para tratar de vengarse del héroe
# que lo provocó. Se calmarán si logran vengarlo.
# Nota: Si el monstruo vengativo tiene poco mana, el script le provee lo mínimo
#       para que pueda usarlo al menos una vez. (¡Agradézcanselo a su ira!)

module KMonster
  PALS = {} # ¡Ni lo volteen a ver!
  PALS.default = {} # ¡No lo toquen que se rompe!
  # [IDTropa] = { IndiceMonstruo => [IndiceMonstruoAmigo, IDTécnica], etc. }
  # NOTA: IDTécnica puede ser un arreglo o lista de IDs como [1,2,3]
  PALS[1] = { 0 => [1, 1], 1 => [0, 1] }
end

class Game_Battler
  alias :kyon_monsterpals_gm_battler_scu :skill_can_use?
  alias :kyon_monsterpals_gm_battler_se :skill_effect
  def skill_can_use?(sid)
    result = kyon_monsterpals_gm_battler_scu(sid)
    return true if result and @revenge_skill == sid
    result
  end

  def skill_effect(user, skill)
    killed = @hp == 0
    result = kyon_monsterpals_gm_battler_se(user, skill)
    if result and self.kind == :enemy and !killed and @hp == 0
      if (ids = KMonster::PALS[@troop_id][@member_index])
        enemy = $game_troop.enemies[ids[0]]
        enemy.revenge_target = $game_party.actors.index(user)
        sid = ids[1].is_a?(Array)? ids[rand(ids.size)] : ids[1]
        enemy.revenge_skill = sid
        cost = $data_skills[sid].sp_cost
        enemy.sp = cost if cost > enemy.sp
      end
    end
    result
  end
end

class Game_Enemy
  attr_writer :revenge_target, :revenge_skill
  alias :kyon_monsterpals_gm_enemy_ma :make_action
  def make_action
    if @revenge_target and @revenge_skill
      if $game_party.actors[@revenge_target].hp == 0 or
         $data_skills[@revenge_skill].sp_cost > @sp
        @revenge_target = @revenge_skill = nil
      else
        a = self.current_action
        a.kind = 1
        a.basic = 0
        a.skill_id = @revenge_skill
        a.target_index = @revenge_target
        return
      end
    end
    kyon_monsterpals_gm_enemy_ma
  end
  def kind() :enemy end
end

class Game_Actor
  def kind() :actor end
end

Versión VX

# * KMonsterPals VX
#   Scripter : Kyonides Arkanthes
#   2019-10-29

# Este script permite a los monstruos que (sobre)actúen luego de que derroten a
# su amigo monstruoso. Usan una técnica oculta para tratar de vengarse del héroe
# que lo provocó. Se calmarán si logran vengarlo.
# Nota: Si el monstruo vengativo tiene poco mana, el script le provee lo mínimo
#       para que pueda usarlo al menos una vez. (¡Agradézcanselo a su ira!)

module KMonster
  PALS = {} # ¡Ni lo volteen a ver!
  PALS.default = {} # ¡No lo toquen que se rompe!
  # [IDTropa] = { IndiceMonstruo => [IndiceMonstruoAmigo, IDTécnica], etc. }
  # NOTA: IDTécnica puede ser un arreglo o lista de IDs como [1,2,3]
  PALS[1] = { 0 => [1, 1], 1 => [0, 1] }
end

class Game_Battler
  alias :kyon_monsterpals_gm_battler_scu :skill_can_use?
  alias :kyon_monsterpals_gm_battler_se :skill_effect
  def skill_can_use?(skill)
    result = kyon_monsterpals_gm_battler_scu(skill)
    return true if result and @revenge_skill == skill.id
    result
  end

  def skill_effect(user, skill)
    killed = @hp == 0
    result = kyon_monsterpals_gm_battler_se(user, skill)
    return if !result or @skipper or @missed or @evaded
    if self.kind == :enemy and !killed and @hp == 0
      if (ids = KMonster::PALS[@troop_id][@member_index])
        enemy = $game_troop.members[ids[0]]
        enemy.revenge_target = $game_party.members.index(user)
        sid = ids[1].is_a?(Array)? ids[rand(ids.size)] : ids[1]
        enemy.revenge_skill = sid
        cost = $data_skills[sid].sp_cost
        enemy.sp = cost if cost > enemy.sp
      end
    end
  end
end

class Game_Enemy
  attr_writer :revenge_target, :revenge_skill
  alias :kyon_monsterpals_gm_enemy_ma :make_action
  def restriction
    if @revenge_target and @revenge_skill
      @states.delete_if{|s| s.restriction == 1 }
    end
    super
  end

  def make_action
    if @revenge_target and @revenge_skill
      if $game_party.members[@revenge_target].hp == 0 or
         $data_skills[@revenge_skill].sp_cost > @sp
        @revenge_target = @revenge_skill = nil
      else
        a = self.current_action
        a.kind = 1
        a.basic = 0
        a.skill_id = @revenge_skill
        a.target_index = @revenge_target
        return
      end
    end
    kyon_monsterpals_gm_enemy_ma
  end
  def kind() :enemy end
end

class Game_Actor
  def kind() :actor end
end

Versión VX Ace

# * KMonsterPals ACE
#   Scripter : Kyonides Arkanthes
#   2019-10-29

# Este script permite a los monstruos que (sobre)actúen luego de que derroten a
# su amigo monstruoso. Usan una técnica oculta para tratar de vengarse del héroe
# que lo provocó. Se calmarán si logran vengarlo.
# Nota: Si el monstruo vengativo tiene poco mana, el script le provee lo mínimo
#       para que pueda usarlo al menos una vez. (¡Agradézcanselo a su ira!)

module KMonster
  PALS = {} # ¡Ni lo volteen a ver!
  PALS.default = {} # ¡No lo toquen que se rompe!
  # [IDTropa] = { IndiceMonstruo => [IndiceMonstruoAmigo, IDTécnica], etc. }
  # NOTA: IDTécnica puede ser un arreglo o lista de IDs como [1,2,3]
  PALS[1] = { 0 => [1, 1], 1 => [0, 1] }
end

class Game_BattlerBase
  alias :kyon_monsterpals_gm_battlerbase_scm :skill_conditions_met?
  def skill_conditions_met?(skill)
    result = kyon_monsterpals_gm_battlerbase_scm(skill)
    return true if result and @revenge_skill == skill.id
    result
  end
end

class Game_Battler
  alias :kyon_monsterpals_gm_battler_ed :execute_damage
  def execute_damage(user)
    killed = @hp == 0
    kyon_monsterpals_gm_battler_ed(user)
    return if user.kind == :enemy or kind != :enemy or killed or @hp > 0
    ids = KMonster::PALS[$game_troop.troop_id][@index]
    return unless ids
    enemy = $game_troop.members[ids[0]]
    enemy.revenge_target = $game_party.index_id(user.id)
    sid = ids[1].is_a?(Array)? ids[rand(ids.size)] : ids[1]
    enemy.revenge_skill = sid
    cost = $data_skills[sid].mp_cost
    enemy.mp = cost if cost > enemy.mp
  end
end

class Game_Enemy
  attr_writer :revenge_target, :revenge_skill
  alias :kyon_monsterpals_gm_enemy_ma :make_actions
  def make_actions
    if @revenge_target and @revenge_skill
      @actions.clear
      if $game_party.members[@revenge_target].hp == 0 or
         $data_skills[@revenge_skill].sp_cost > @sp
        @revenge_target = @revenge_skill = nil
      else
        @actions << action = Game_Action.new(self)
        action.set_skill(@revenge_skill)
        action.target_index = @revenge_target
        return
      end
    end
    kyon_monsterpals_gm_enemy_ma
  end
  def kind() :enemy end
end

class Game_Actor
  def kind() :actor end
end

class Game_Party
  def index_id(aid) @actors.index(aid) end
end

class Game_Troop
  attr_reader :troop_id
end

Términos de Uso

Deben incluir mi seudónimo y el URL del sitio del que lo copiaron.
Es gratuito para demos y juegos no comerciales.

kyonides cambió el título a KMonsterPals XP & VX .

Les informo que he agregado una versión de mi script para el RMVX. Sé muy bien que los usuarios que lo usan no son muy abundantes, pero ya no podrán quejarse de que no los tomo en cuenta. 🤣

kyonides cambió el título a KMonsterPals XP VX & ACE .