KSwap XP
by Kyonides
Introduction
Did you ever want to swap actors' skills or enemies' actions?
Or perhaps you failed to swap actor's weapons or enemies' atk attribute on you own.
If so, you would also need to be able to nullify such skills, don't you think?
Then you will be glad to find out that this scriptlet will make it possible!
The Script
Code:
# * KSwap XP
# Scripter : Kyonides Arkanthes
# 2022-01-04
# Swap the Skills of your Enemies!
# Heroes can swap the foes' ATK parameters.
# Monsters can also swap the heroes' Weapons at will!
# There is also a Nullify Swaps skill as well!
# Check the KSwap module and edit the CONSTANTS accordingly.
# You can prevent the party from casting the "Skill Swap" skill by turning on
# a specific game switch.
# * Aliased Methods * #
# Game_Battler#skill_effect(user, skill)
# Game_Actor#skill_can_use?(skill_id)
# Game_Enemy#atk and actions
# Scene_Battle#start_phase5
module KSwap
# If Switch is ON, then the player can't cast them
BOSS_BATTLE_SWITCH_ID = 1
# [ Weapon Swap ID, Skill Swap ID, Nullify Swaps ID ]
SKILL_IDS = [81, 82, 83]
# Add Skill IDs that will be forbidden during Boss Battles
FORBIDDEN_SKILL_IDS = [81, 82]
# * END OF SETTINGS SECTION * #
extend self
def clear_all
@weapons = nil
@skills = nil
end
def weapon_skill_id() SKILL_IDS[0] end
def skill_id() SKILL_IDS[1] end
def nullify_skill_id() SKILL_IDS[2] end
attr_accessor :weapons, :skills
end
class Array
def simple_shuffle
ary = []
size.times do |n|
elem = self[n]
case rand(6)
when 0,2,4 then ary.unshift(elem)
when 1,3,5 then ary.push(elem)
end
end
ary.compact
end
end
class Game_Battler
alias :kyon_swap_skill_fx :skill_effect
def skill_effect(user, skill)
case skill.id
when KSwap.weapon_skill_id
return false unless rand(100) < user.hit
team.auto_swap_weapons
return true
when KSwap.skill_id
return false unless rand(100) < user.hit
team.auto_swap_skills
return true
when KSwap.nullify_skill_id
return false unless rand(100) < user.hit
team.nullify_swap
end
kyon_swap_skill_fx(user, skill)
end
end
class Game_Actor
attr_writer :skills, :weapon_id
alias :kyon_swap_gm_actor_skill_use? :skill_can_use?
def skill_can_use?(skid)
switch = KSwap::BOSS_BATTLE_SWITCH_ID
skill_ids = KSwap::FORBIDDEN_SKILL_IDS
return false if $game_switches[switch] and skill_ids.include?(skid)
kyon_swap_gm_actor_skill_use?(skid)
end
def team() $game_party end
end
class Game_Enemy
alias :kyon_swap_gm_nmy_actions :actions
alias :kyon_swap_gm_nmy_base_atk :base_atk
def alter_actions() $data_enemies[@alter_id].actions end
def alter_atk() $data_enemies[@atk_id].atk end
def base_atk
@atk_id ? alter_atk : kyon_swap_gm_nmy_base_atk
end
def actions
@alter_id ? alter_actions : kyon_swap_gm_nmy_actions
end
def team() $game_troop end
attr_writer :atk_id, :alter_id
end
class Game_Party
def auto_swap_weapons
KSwap.weapons ||= @actors.map{|a| a.weapon_id }
lotto = KSwap.weapons.simple_shuffle
@actors.each{|a| a.weapon_id = lotto.shift }
end
def auto_swap_skills
KSwap.skills ||= @actors.map{|a| a.skills }
lotto = KSwap.skills.simple_shuffle
@actors.each{|a| a.skills = lotto.shift }
end
def nullify_swap
list = KSwap.weapons
@actors.each{|a| a.weapon_id = list.shift } if list
list = KSwap.skills
@actors.each{|a| a.skills = list.shift } if list
KSwap.clear_all
end
end
class Game_Troop
def ids() @enemies.map{|e| e.id } end
def auto_swap_weapons
lotto = ids.simple_shuffle
@enemies.each{|a| a.atk_id = lotto.shift }
end
def auto_swap_skills
lotto = ids.simple_shuffle
@enemies.each{|e| e.alter_id = lotto.shift }
end
def nullify_swap
@enemies.each do |e|
e.atk_id = nil
e.alter_id = nil
end
end
end
class Scene_Battle
alias :kyon_swap_scn_bttl_start_ph5 :start_phase5
def start_phase5
$game_party.nullify_swap
kyon_swap_scn_bttl_start_ph5
end
end
Side Notes
As far as I know it is compatible with the Default XP Battle System and those that barely modify it.
Terms & Conditions
Mention my nickname in your game credits scene.
Free for non commercial games. Contact me if you want to go commercial.
That's all, folks!
"For God has not destined us for wrath, but for obtaining salvation through our Lord Jesus Christ," 1 Thessalonians 5:9
Maranatha!
The Internet might be either your friend or enemy. It just depends on whether or not she has a bad hair day.
My Original Stories (available in English and Spanish)
List of Compiled Binary Executables I have published...
HiddenChest & Roole
Give me a free copy of your completed game if you include at least 3 of my scripts!
Just some scripts I've already published on the board...
KyoGemBoost XP VX & ACE, RandomEnkounters XP, KSkillShop XP, Kolloseum States XP, KEvents XP, KScenario XP & Gosu, KyoPrizeShop XP Mangostan, Kuests XP, KyoDiscounts XP VX, ACE & MV, KChest XP VX & ACE 2016, KTelePort XP, KSkillMax XP & VX & ACE, Gem Roulette XP VX & VX Ace, KRespawnPoint XP, VX & VX Ace, GiveAway XP VX & ACE, Klearance XP VX & ACE, KUnits XP VX, ACE & Gosu 2017, KLevel XP, KRumors XP & ACE, KMonsterPals XP VX & ACE, KStatsRefill XP VX & ACE, KLotto XP VX & ACE, KItemDesc XP & VX, KPocket XP & VX, OpenChest XP VX & ACE
Maranatha!
The Internet might be either your friend or enemy. It just depends on whether or not she has a bad hair day.
My Original Stories (available in English and Spanish)
List of Compiled Binary Executables I have published...
HiddenChest & Roole
Give me a free copy of your completed game if you include at least 3 of my scripts!
Just some scripts I've already published on the board...
KyoGemBoost XP VX & ACE, RandomEnkounters XP, KSkillShop XP, Kolloseum States XP, KEvents XP, KScenario XP & Gosu, KyoPrizeShop XP Mangostan, Kuests XP, KyoDiscounts XP VX, ACE & MV, KChest XP VX & ACE 2016, KTelePort XP, KSkillMax XP & VX & ACE, Gem Roulette XP VX & VX Ace, KRespawnPoint XP, VX & VX Ace, GiveAway XP VX & ACE, Klearance XP VX & ACE, KUnits XP VX, ACE & Gosu 2017, KLevel XP, KRumors XP & ACE, KMonsterPals XP VX & ACE, KStatsRefill XP VX & ACE, KLotto XP VX & ACE, KItemDesc XP & VX, KPocket XP & VX, OpenChest XP VX & ACE