じ☆ve冰风 发表于 2026-7-27 13:03:03

Bless & Kurse XP

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 database).

Spoiler: 2 Screenshots





Spoiler: The Script                Ruby:       
# * Bless & Kurse XP * #
# - Not a Plug & Play Script - #
#   Scripter : Kyonides
#   v1.0.0 - 2025-09-24

# 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, :meh => 20 }
ITEM_PERCENT= { :dmg => 80,:heal => 150 }
SKILL_PERCENT = { :dmg => 120, :heal => 100 }

module BKBattler
    def base_maxhp() 100 end
    def base_maxsp() 100 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

module RPG
class Item
    def recover_list
      [@recover_hp, @recover_hp_rate, @recover_sp, @recover_sp_rate]
    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_sign
    @bk_neutral = rand(100) < 50
    @bk_sign = rand(100) < 50 ? 1 : -1
end

def change_bk_item_skill
    return if @bless_kurse
    if @skill
      return if BlessKurse::SKILL_ID != @skill.id
      @old_skill = @skill.dup
      change_bk_sign
      change_bk_skill_power
    else
      return if BlessKurse::ITEM_ID != @item.id
      @old_item = @item.dup
      change_bk_sign
      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
    @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 / 100
    key = @bk_sign * @item.recover_hp_rate >= 0 ? :heal : :dmg
    @item.recover_hp_rate = @bk_sign * @item.recover_hp_rate * perc / 100
    key = @bk_sign * @item.recover_sp >= 0 ? :heal : :dmg
    @item.recover_sp = @bk_sign * @item.recover_sp * perc / 100
    key = @bk_sign * @item.recover_sp_rate >= 0 ? :heal : :dmg
    @item.recover_sp_rate = @bk_sign * @item.recover_sp_rate * perc / 100
    value = @item.recover_list.inject {|a,b| a + b }
    @bk_heal = (@bk_sign * value > 0)
end

def make_skill_action_result
    kyon_bless_kurse_scn_btl_mk_skl_act_res
    make_skill_bk_action_result
end

def make_skill_bk_action_result
    return if @phase4_step == 1 or !@bless_kurse
    case @skill.scope
    when 2
      summon_key = @skill.power < 0 ? :evil : :good
    when 4
      summon_key = @skill.power < 0 ? :good : :evil
    end
    @skill = @old_skill
    if @bk_neutral
      summon_key = :meh
    else
      @bk_sign *= -1
    end
    @bk_summon_id = BlessKurse::ENEMY_AS_SUMMON_IDS
    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
    return if @phase4_step == 1 or !@bless_kurse
    case @item.scope
    when 2
      summon_key = @bk_heal ? :evil : :good
    when 4
      summon_key = @bk_heal ? :good : :evil
    end
    @item = @old_item
    if @bk_neutral
      summon_key = :meh
    else
      @bk_sign *= -1
    end
    @bk_summon_id = BlessKurse::ENEMY_AS_SUMMON_IDS
    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
    bk_dispose_summon
end

def bk_dispose_summon
    return unless @bless_kurse
    @spriteset.dispose_bk_summon
    @bless_kurse = @bk_heal = @bk_summon_id = nil
end
end


DOWNLOAD DEMO NOW!​

Terms & Conditions

Free as in beer for non commercial games.
Include my nickname in your game credits.
Mention this forum in your game credits as well.
That's it!



本贴来自国际rpgmaker官方论坛作者:kyonides处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/bless-kurse-xp.180221/
页: [1]
查看完整版本: Bless &amp; Kurse XP