SPダメージ簡易版



KGCソフトウェアのSPダメージを以下のように改変。
・SPダメージ○%の廃止(SPダメージは常に100%)
・SPダメージ/回復時の色設定をカスタマイズポイントへ移行
・コッソリとダメージポップス(今は無きスクリプトシェルフ)に対応

※このスクリプトの原作者はTOMY様です。

※また、貪藻矢射妥←ダイヤモンドベースモジュール縁取り文字draw_text拡張 カスタムが必要です。

変更点
2009:09:14
・DRAW_SHADOW_BATTLEを必須からオプションに変更
・原作スクリプトアップデートに伴い修正

2009:11:21
・draw_shadow_text関数アップデートに伴い修正

#----------------------------------------------------------------------------
# SPダメージ 貪藻矢射妥←簡易版 by 貪藻矢射妥←
# 微妙に使いづらいです・・・多分(をひ)
#----------------------------------------------------------------------------
# 原作:     ◆ SPダメージ - KGC_SPDamage ◆
#           ◇ Last update : 2009/08/23 ◇
# 原作者:   TOMY様
# HP:       KGC Software
# アドレス: http://ytomy.sakura.ne.jp/
#
# 改造内容:
# ・SPダメージ○%の廃止(SPダメージは常に100% 故に”簡易版”)
# ・SPダメージ/回復時の色設定をカスタマイズポイントへ移行
# ・コッソリとダメージポップス(今は無きスクリプトシェルフ)に対応
# 
# 修正内容:
# ・特になし
# 
#============================================================================
# 変更点
# 2009:09:14
# ・DRAW_SHADOW_BATTLEを必須からオプションに変更
# ・原作スクリプトアップデートに伴い修正
# 
# 2009:11:21
# ・draw_shadow_text関数アップデートに伴い修正

#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

module KGC
  include BM
  # ==== ≪ダメージ表示改造≫を導入していない場合に使用 ====
  # ◆ダメージ数値フォント
  SPD_FONT_NAME = "Times New Roman"
  # ◆ダメージ数値サイズ
  SPD_FONT_SIZE   = 24
  # ◆ダメージ数値ボールド
  SPD_FONT_BOLD   = true
  # ◆ダメージ数値イタリック
  SPD_FONT_ITALIC = true
  
  # ◆SP Damage用属性
  SP_DAMAGE       = 50
  # ◆SPダメージカラー
  COLOR_SPD = Color.new(255, 255, 128, BM::MAX8BIT)
  # ◆SP回復カラー
  COLOR_SPR = Color.new(160, 192, 255, BM::MAX8BIT)
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["SPDamage"] = true

#==============================================================================
# ■ Game_Battler (分割定義 1)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :damage2                # SPダメージ値
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_SPDamage initialize
  def initialize
    initialize_KGC_SPDamage

    @damage2 = nil
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Battler (分割定義 3)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #--------------------------------------------------------------------------
  alias attack_effect_KGC_SPDamage attack_effect
  def attack_effect(attacker)
    result = attack_effect_KGC_SPDamage(attacker)

    # ダメージを受けた場合
    if result && $imported["AttackRecoverSP"]
      recover_sp = -attack_recover_sp_effect(attacker)
      if $game_temp.in_battle
        attacker.damage2 = recover_sp
      else
        # 戦闘中以外に呼び出す、ってこともあるかもしれないので一応
        attacker.damage2 = nil
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_SPDamage skill_effect
  def skill_effect(user, skill)
    last_hp = self.hp

    result = skill_effect_KGC_SPDamage(user, skill)

    # ダメージを受けた場合
    if (result || hp == maxhp) && self.damage.is_a?(Numeric)
      exist_damage2 = false
      if skill.element_set.include?(KGC::SP_DAMAGE)
        self.damage2 = self.damage
        exist_damage2 = true
      end
      
      if exist_damage2
        # SP減少処理
        self.hp = last_hp
        self.sp -= self.damage2
        self.damage = ""
      end
    end

    unless $game_temp.in_battle
      self.damage2 = nil
    end

    return result
  end
  #--------------------------------------------------------------------------
  # ● アイテムの効果適用
  #--------------------------------------------------------------------------
  alias item_effect_KGC_SPDamage item_effect
  def item_effect(item)
    last_sp = self.sp

    result = item_effect_KGC_SPDamage(item)

    # SPダメージ値を設定
    if result
      if $game_temp.in_battle
        self.damage2 = last_sp - self.sp
      else
        self.damage2 = nil
      end
    end
    return result
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Sprite_Battler
#==============================================================================

class Sprite_Battler < RPG::Sprite
  include DAMAGE_OMIT
  include BM
  include DS
if $imported["DamageAlter"]
  #--------------------------------------------------------------------------
  # ● SPダメージ値作成
  #--------------------------------------------------------------------------
  def damage2(value, critical)
    @_damage2_flag = true
    damage(value, critical)
  end
else  # <-- $imported["DamageAlter"]
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     viewport : ビューポート
  #     battler  : バトラー (Game_Battler)
  #--------------------------------------------------------------------------
  alias initialize_KGC_SPDamage initialize
  def initialize(viewport, battler = nil)
    initialize_KGC_SPDamage(viewport, battler)

    @_damage2_duration = 0
  end
  #------------------------------------------------------------------------
  # ● 解放
  #------------------------------------------------------------------------
  alias dispose_KGC_SPDamage dispose
  def dispose
    dispose_damage2

    dispose_KGC_SPDamage
  end
  include DIAMOND
  include RUBY_SYS
  #--------------------------------------------------------------------------
  # ● SPダメージ値作成
  #--------------------------------------------------------------------------
  def damage2(value, critical = false)
    dispose_damage2
    if value.is_a?(Numeric)
      damage_string = value.abs.to_s
    else
      damage_string = value.to_s
    end
    
    omit = false
    if value.is_a?(Numeric)
      if value.abs >= 10000
        damage_string = damage_omit(value)
        omit = true
      else
        damage_string = value.abs.to_s
      end
    else
      damage_string = value.to_s
    end
    
    bitmap = Bitmap.new(160, 48)
    
    if omit
      bitmap.font.name =  ["HGP創英角ポップ体", Font.default_name]
    else
      bitmap.font.name = ["手書き文字", Font.default_name]
    end
    
    bitmap.font.size =   KGC::SPD_FONT_SIZE
    bitmap.font.bold =   KGC::SPD_FONT_BOLD
    bitmap.font.italic = KGC::SPD_FONT_ITALIC
    bitmap.font.color =  BM::BLCOLOR
    
    
    if value.is_a?(Numeric) && value < 0
      draw_color = KGC::COLOR_SPR
    else
      draw_color = KGC::COLOR_SPD
    end
    
    draw_shadow_text_root(bitmap, [0, 12, 160, 36], damage_string, draw_color, 1)
    
    @_damage2_sprite = ::Sprite.new
    @_damage2_sprite.bitmap = bitmap
    @_damage2_sprite.ox = 80
    @_damage2_sprite.oy = 20
    @_damage2_sprite.x = self.x
    @_damage2_sprite.y = self.y - self.oy / 4
    @_damage2_sprite.z = 3000
    @_damage2_duration = 40
  end
  #--------------------------------------------------------------------------
  # ● SPダメージ値破棄
  #--------------------------------------------------------------------------
  def dispose_damage2
    if @_damage2_sprite != nil
      @_damage2_sprite.bitmap.dispose
      @_damage2_sprite.dispose
      @_damage2_sprite = nil
      @_damage2_duration = 0
    end
  end
end  # <-- $imported["DamageAlter"]
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_KGC_SPDamage update
  def update
    # SPダメージ表示
    if @battler != nil && @battler_visible && @battler.damage_pop &&
        @battler.damage2 != nil && @battler.damage2 != 0
      damage2(@battler.damage2, @battler.critical)
      @battler.damage2 = nil
    end

    update_KGC_SPDamage

    if !$imported["DamageAlter"] && @_damage2_duration > 0
      @_damage2_duration -= 1
      @_damage2_sprite.x = self.x
      if @_damage2_duration > 27
        @_damage2_sprite.y -= [(@_damage2_duration - 33) / 2 + 1, 1].max
      end
      @_damage2_sprite.opacity = 256 - (12 - @_damage2_duration) * 32
      if @_damage2_duration == 0
        dispose_damage2
      end
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 1)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias main_KGC_SPDamage main
  def main
    # SPダメージを消去
    (1...$data_actors.size).each { |i|
      actor = $game_actors[i]
      if actor != nil
        actor.damage2 = nil
      end
    }

    main_KGC_SPDamage
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias update_phase4_step5_KGC_SPDamage update_phase4_step5
  def update_phase4_step5
    update_phase4_step5_KGC_SPDamage

    # SPダメージ表示
    ($game_party.actors + $game_troop.enemies).each { |battler|
      if battler.damage2 != nil
        battler.damage_pop = true
      end
    }
  end
end
※SP/HP同時にダメージを与えるようなスキルは無理です。 薄緑色の属性をスキルにセットするだけでSPに対してダメージを与えることができます。 また、SP消費の改造と組み合わせればHPを消費してSPにダメージを与えるというスキルも作成可能です。

戻る