#################### 戦闘時のダメージの上のテキストの拡張 #################### # # # クリティカルヒットの際に「CRITICAL」と表示される部分に、 # # さまざまなテキストを表示するようにするスクリプトです。 # # # # 設定可能なのは以下のとおり。 # # ・クリティカルヒットの時に表示されるテキスト(デフォルトではCRITICAL) # # ・弱点属性をついた時に表示されるテキスト(属性有効度A or Bの時) # # ・耐性属性をついた時に表示されるテキスト(属性有効度D or Eの時) # # ・吸収属性をついた時に表示されるテキスト(属性有効度Fの時) # # ・ステートが変化した際に表示されるテキスト # # テキストを表示する必要が無い場合は「""」と設定すれば表示されません。 # # ステート変化の際のテキストの設定方法は配列となっており、 # # 一番最初がステートID1のステートにかかった場合、 # # 二番目ががステートID2のステートにかかった場合…… # # といった形で設定してください。 # # # # ダメージを与えずに、ステートだけが変化した場合は、 # # ダメージを表示する位置テキストが表示されます。 # # # # また、クリティカルと属性修正とステート変化が同時に起きた場合は、 # # クリティカルのテキストのみを表示される仕様になっています。 # # 複数のステートに同時にかかった際も、 # #「もっともレーティングが高く、IDが一番若いのもの」のテキストになります。 # # # ############################################################################## # ここから設定 module Annex WORD_CRITICAL = "CRITICAL" # クリティカル時の文字 WORD_WEAKEN = "WEAKNESS" # 弱点属性をついた時の文字 WORD_BLOCK = "BLOCK" # 耐性属性をついた時の文字 WORD_CURE = "REVERSE" # 吸収属性をついた時の文字 WORD_STATES = ["DEAD", "STUN", "POISON", "DAZZLE", "SILENT", "CONFUSION", "SLEEP", "PARALYSIS", "WEAKEN", "CLUMSY", "DELAY", "FEEBLE", "SHARP", "BARRIER", "RESIST", "BLINK"] # ステート付加時に表示される文字 end # ここまで設定 #============================================================================== # □ Sprite #============================================================================== module RPG class Sprite < ::Sprite #-------------------------------------------------------------------------- # ● ダメージの表示 (再定義) # value : ダメージ # critical : クリティカルフラグ #-------------------------------------------------------------------------- def damage(value, critical) dispose_damage if value.is_a?(Numeric) damage_string = value.abs.to_s else damage_string = value.to_s end # ☆ココから変更 bitmap = Bitmap.new(180, 48) # ☆ココまで変更 bitmap.font.name = "Arial Black" bitmap.font.size = 32 bitmap.font.color.set(0, 0, 0) # ☆ココから変更 bitmap.draw_text(-1, 12-1, 180, 36, damage_string, 1) bitmap.draw_text(+1, 12-1, 180, 36, damage_string, 1) bitmap.draw_text(-1, 12+1, 180, 36, damage_string, 1) bitmap.draw_text(+1, 12+1, 180, 36, damage_string, 1) # ☆ココまで変更 if value.is_a?(Numeric) and value < 0 bitmap.font.color.set(176, 255, 144) else bitmap.font.color.set(255, 255, 255) end # ☆ココから変更 bitmap.draw_text(0, 12, 180, 36, damage_string, 1) # ダメージが「Miss」の場合フラグをfalseにする critical = false if damage_string == "Miss" # ☆ココまで変更 if critical # ☆ココから変更 word = critical.is_a?(String) ? critical : Annex::WORD_CRITICAL flag = value == "" ? true : false make_another_texts(bitmap, word, flag) # ☆ココまで変更 end # self.viewportを渡さないで作成 @_damage_sprite = ::Sprite.new(nil) @_damage_sprite.bitmap = bitmap # Viewportのox, oyを参考に @_damage_sprite.ox = self.viewport.ox + 80 @_damage_sprite.oy = self.viewport.oy + 20 # Viewportのrect.x 、 rect.yを足す。 @_damage_sprite.x = self.x + self.viewport.rect.x @_damage_sprite.y = self.y - self.oy / 2 + self.viewport.rect.y @_damage_sprite.z = 3000 @_damage_duration = 40 end #-------------------------------------------------------------------------- # ◎ 追加:ダメージの上に表示するテキストの設定 # bitmap : 操作対象のビットマップ # word : 表示するテキスト # damage : ダメージ表示が無しかどうかのフラグ #-------------------------------------------------------------------------- def make_another_texts(bitmap, word, damage) # ダメージが空文字列(表示されていない)ならダメージの場所に表示。 if damage bitmap.font.size = 32 bitmap.font.color.set(0, 0, 0) bitmap.draw_text(-1, 12-1, 180, 36, word, 1) bitmap.draw_text(+1, 12-1, 180, 36, word, 1) bitmap.draw_text(-1, 12+1, 180, 36, word, 1) bitmap.draw_text(+1, 12+1, 180, 36, word, 1) bitmap.font.color.set(255, 255, 255) bitmap.draw_text(0, 12, 180, 36, word, 1) return end # ダメージの上にテキストを表示 bitmap.font.size = 20 bitmap.font.color.set(0, 0, 0) bitmap.draw_text(-1, -1, 180, 20, word, 1) bitmap.draw_text(+1, -1, 180, 20, word, 1) bitmap.draw_text(-1, +1, 180, 20, word, 1) bitmap.draw_text(+1, +1, 180, 20, word, 1) bitmap.font.color.set(255, 255, 255) bitmap.draw_text(0, 0, 180, 20, word, 1) end end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ○ 属性修正の計算 # element_set : 属性 #-------------------------------------------------------------------------- alias text_extend_elements_correct elements_correct def elements_correct(element_set) # 呼び戻したものを取得 weakest = text_extend_elements_correct(element_set) # 戦闘中の場合 if $game_temp.in_battle # クリティカルフラグがfalseの場合 if self.critical == false # 弱点攻撃を受けた場合 if weakest > 100 self.critical = Annex::WORD_WEAKEN # 吸収属性の場合 elsif weakest < 0 self.critical = Annex::WORD_CURE # 耐性属性の場合 elsif weakest < 100 self.critical = Annex::WORD_BLOCK end end end return weakest end #-------------------------------------------------------------------------- # ○ ステートの付加 # state_id : ステート ID # force : 強制付加フラグ (オートステートの処理で使用) #-------------------------------------------------------------------------- alias text_extend_add_state add_state def add_state(state_id, force = false) # 戦闘中の場合 if $game_temp.in_battle and self.dead? == false # クリティカルフラグがfalseか文字列の場合場合 if self.critical == false or self.critical.is_a?(String) if Annex::WORD_STATES[state_id - 1] != nil and Annex::WORD_STATES[state_id - 1] != "" self.critical = Annex::WORD_STATES[state_id - 1] end end end return text_extend_add_state(state_id, force) end #-------------------------------------------------------------------------- # ○ ステート変化 (+) の適用 # plus_state_set : ステート変化 (+) #-------------------------------------------------------------------------- alias text_extend_states_plus states_plus def states_plus(plus_state_set) # plus_state_setを複製 state_set = plus_state_set.dup # IDの逆順にソート state_set.sort!{|a, b| b <=> a} # レーティングの低い順にソート state_set.sort!{|a, b| $data_states[a].rating <=> $data_states[b].rating} # ソートしたstate_setを渡して呼び戻す。 return text_extend_states_plus(state_set) end #-------------------------------------------------------------------------- # ○ スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- alias text_extend_skill_effect skill_effect def skill_effect(user, skill) # 呼び戻してbool値を取得 boolean = text_extend_skill_effect(user, skill) # スキルの威力が負の数で、属性修正によるテキスト表示が出ている場合 if skill.power < 0 if self.critical == Annex::WORD_WEAKEN or self.critical == Annex::WORD_CURE or self.critical == Annex::WORD_BLOCK # クリティカルフラグをクリア self.critical = false end end return boolean end #-------------------------------------------------------------------------- # ○ アイテムの効果適用 # item : アイテム #-------------------------------------------------------------------------- alias text_extend_item_effect item_effect def item_effect(item) # 呼び戻してbool値を取得 boolean = text_extend_item_effect(item) # アイテムの回復量を取得 recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp # スキルの回復量が正の場合 if not(recover_hp < 0 or recover_sp < 0) if self.critical == Annex::WORD_WEAKEN or self.critical == Annex::WORD_CURE or self.critical == Annex::WORD_BLOCK # クリティカルフラグをクリア self.critical = false end end return boolean end end