Yesterday, 12:16 AM (This post was last modified: Yesterday, 05:23 AM by kyonides.)
Bless & Kurse XP
by Kyonides
Introduction
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?
NOTES
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 (an enemy in the DB).
2 Screenshots
The Script
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