Code:
# * Bless & Kurse XP * #
# - Not a Plug & Play Script - #
# Scripter : Kyonides
# 2025-09-21
# Cast a skill or consume an item that will summon some unknown being with
# its own agenda. Will the heroes or the troopers be blessed or cursed by
# that mysterious meddler?
# Set ITEM_ID or SKILL_ID to 0 if you wish to disable any of them.
# ENEMY_AS_SUMMON_IDS holds the ID's for a good and a evil being, both are
# enemies available on the DB.
module BlessKurse
ITEM_ID = 0
SKILL_ID = 24
ENEMY_AS_SUMMON_IDS = { :good => 24, :evil => 23 }
ITEM_PERCENT = { :dmg => 80, :heal => 150 }
SKILL_PERCENT = { :dmg => 120, :heal => 100 }
module BKBattler
def base_maxhp() 100000 end
def base_maxsp() 100000 end
attr_accessor :battler_name, :battler_hue
attr_accessor :screen_x, :screen_y, :screen_z
end
module BKSprite
def summon!
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width
@height = bitmap.height
@battler.screen_x = (640 - @width) / 2
@battler.screen_y = (320 - @height) / 2
self.x = @battler.screen_x
self.y = @battler.screen_y
self.z = @battler.screen_z
self.opacity = 255
self.visible = true
@battler_visible = true
end
end
end
class Spriteset_Battle
def make_bk_summon(summon)
summon.screen_z = @enemy_sprites[-1].z - 50
@bk_summon = Sprite_Battler.new(@viewport1, summon)
@enemy_sprites << @bk_summon
@bk_summon.extend BlessKurse::BKSprite
@bk_summon.summon!
end
def dispose_bk_summon
@bk_summon.dispose
@enemy_sprites.pop
end
end
class Scene_Battle
alias :kyon_bless_kurse_scn_btl_st_trgt_btlrs :set_target_battlers
alias :kyon_bless_kurse_scn_btl_mk_skl_act_res :make_skill_action_result
alias :kyon_bless_kurse_scn_btl_mk_itm_act_res :make_item_action_result
alias :kyon_bless_kurse_scn_btl_up_ph4_stp3 :update_phase4_step3
alias :kyon_bless_kurse_scn_btl_up_ph4_stp4 :update_phase4_step4
alias :kyon_bless_kurse_scn_btl_up_ph4_stp5 :update_phase4_step5
alias :kyon_bless_kurse_scn_btl_up_ph4_stp6 :update_phase4_step6
def set_target_battlers(scope)
change_bk_item_skill
kyon_bless_kurse_scn_btl_st_trgt_btlrs(scope)
end
def change_bk_item_skill
return if @bless_kurse
if @skill
return if BlessKurse::SKILL_ID != @skill.id
@old_skill = @skill.dup
@bk_sign = rand(100) < 50 ? 1 : -1
change_bk_skill_power
else
return if BlessKurse::ITEM_ID != @item.id
@old_item = @item.dup
@bk_sign = rand(100) < 50 ? 1 : -1
change_bk_item_power
end
@bless_kurse = true
end
def change_bk_skill_power
@skill = @old_skill.dup
value = @bk_sign * @skill.power
key = value > 0 ? :dmg : :heal
percent = BlessKurse::SKILL_PERCENT[key]
@skill.power = value * percent / 100
end
def change_bk_item_power
@item = @old_item.dup
perc = BlessKurse::ITEM_PERCENT
key = @bk_sign * @item.recover_hp > 0 ? :heal : :dmg
@item.recover_hp = @bk_sign * @item.recover_hp * perc[key] / 100
key = @bk_sign * @item.recover_hp_rate > 0 ? :heal : :dmg
@item.recover_hp_rate = @bk_sign * @item.recover_hp_rate * perc[key] / 100
key = @bk_sign * @item.recover_sp > 0 ? :heal : :dmg
@item.recover_sp = @bk_sign * @item.recover_sp * perc[key] / 100
key = @bk_sign * @item.recover_sp_rate > 0 ? :heal : :dmg
@item.recover_sp_rate = @bk_sign * @item.recover_sp_rate * perc[key] / 100
end
def make_skill_action_result
kyon_bless_kurse_scn_btl_mk_skl_act_res
return if @phase4_step == 1 or !@bless_kurse
make_skill_bk_action_result
end
def make_skill_bk_action_result
case @skill.scope
when 2
summon_key = @skill.power < 0 ? :evil : :good
when 4
summon_key = @skill.power < 0 ? :good : :evil
end
@bk_summon_id = BlessKurse::ENEMY_AS_SUMMON_IDS[summon_key]
@skill = @old_skill
@bk_sign *= -1
change_bk_skill_power
battler = @active_battler
@old_targets = @target_battlers
scope = @skill.scope == 2 ? 4 : 2
@target_battlers = []
set_target_battlers(scope)
@bk_battlers = @target_battlers
@bk_battlers.each {|target| target.skill_effect(battler, @skill) }
@target_battlers = @old_targets
@old_skill = @bk_sign = nil
end
def make_item_action_result
kyon_bless_kurse_scn_btl_mk_itm_act_res
return if @phase4_step == 1 or !@bless_kurse
make_item_bk_action_result
end
def make_item_bk_action_result
@item = @old_item
@bk_sign *= -1
change_bk_item_power
@old_targets = @target_battlers
scope = @item.scope == 2 ? 4 : 2
@target_battlers = []
set_target_battlers(scope)
@bk_battlers = @target_battlers
@bk_battlers.each {|target| target.item_effect(@item) }
@target_battlers = @old_targets
@old_item = @bk_sign = nil
end
def update_phase4_step3
kyon_bless_kurse_scn_btl_up_ph4_stp3
make_bless_kurse_summon
end
def make_bless_kurse_summon
return unless @bless_kurse
summon = $data_enemies[@bk_summon_id]
unless @bk_summon
@bk_summon = Game_Battler.new
@bk_summon.extend BlessKurse::BKBattler
@bk_summon.hp = 100000
end
@bk_summon.hidden = false
@bk_summon.battler_name = summon.battler_name
@bk_summon.battler_hue = summon.battler_hue
@spriteset.make_bk_summon(@bk_summon)
if @animation1_id == 0
@bk_summon.white_flash = true
else
@bk_summon.animation_id = @animation1_id
@bk_summon.animation_hit = true
end
end
def update_phase4_step4
kyon_bless_kurse_scn_btl_up_ph4_stp4
return unless @bless_kurse
for target in @bk_battlers
target.animation_id = @animation2_id
target.animation_hit = (target.damage != "Miss")
end
end
def update_phase4_step5
kyon_bless_kurse_scn_btl_up_ph4_stp5
bk_summon_exit
end
def bk_summon_exit
return unless @bless_kurse
@bk_battlers.each {|target| target.damage_pop = target.damage != nil }
@bk_summon.hidden = true
@bk_battlers.clear
end
def update_phase4_step6
kyon_bless_kurse_scn_btl_up_ph4_stp6
return unless @bless_kurse
@spriteset.dispose_bk_summon
@bless_kurse = nil
end
end