赞 | 1 |
VIP | 0 |
好人卡 | 18 |
积分 | 1 |
经验 | 6526 |
最后登录 | 2013-7-5 |
在线时间 | 334 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 334 小时
- 注册时间
- 2011-10-21
- 帖子
- 413
|
于是把STR的脚本改一改……丢上来了~- #==============================================================================
- # ★RGSS2
- # STR11d_XP風バトル#ダメージポップアップ v2.2 09/07/25
- #
- # ・バトラーにダメージ・ステートの変化等のポップアップが
- # 出るようになります。
- # ・数字ポップアップに画像を使用することが出来ます。
- # 使用する数字グラフィックはSystemにインポートしてください。
- #
- # <規格>
- # 並べ方 0123456789
- # 幅 = 数字一コマの幅 * 10
- # 高さ = 数字一コマの高さ * 5
- # 一列目に通常の数字
- # ニ列目に回復用数字
- # 三列目にMPダメージ用数字
- # 四列目にクリティカル用数字
- # 五列目にMP回復用数字 を配置します。
- #
- #------------------------------------------------------------------------------
- #
- # 更新履歴
- # ◇2.1a→2.2
- # 吸収時のポップアップの仕様を変更
- # (ダメージと回復を別々に表示させるようにした)
- # MP回復用のフォントカラーを設定
- # ・これに伴い、数字素材の規格が変更されました。ご注意。
- # ◇2.1→2.1a
- # HP吸収のポップアップ文字が間違っているミスを修正
- # ◇2.0→2.1
- # レベルアップ時にエラーが出るバグを修正
- # ◇1.2s→2.0
- # ★メジャーバージョンアップ
- # ポップアップスプライトの挙動をほぼ全て変更
- # →バウンド機能追加、設定箇所の簡略化
- # スリップダメージ/自動回復のポップアップに対応
- # 0ダメージがポップアップされない仕様は廃止になりました。
- #
- #==============================================================================
- class Scene_Battle < Scene_Base
- # ■ポップアップテキスト定数
- MISS = "Miss!" # ミス
- EVAD = "Evaded!" # 回避
- FAIL = "Failed!" # 失敗
- CRIT = "Critical!" # クリティカル
- MPDA = "MP-Damage" # MPダメージ
- MPRE = "MP-Recovery" # MP回復
- V_MPDA = false # MPダメージのポップアップテキストを表示しない
- V_MPRE = false # MP回復のポップアップテキストを表示しない
- V_SLIP = false # スリップダメージ/自動回復をポップアップしない
- V_EVAD = false # 回避をポップアップしない
- V_FAIL = true # 失敗をポップアップしない
- V_STAT = false # ステートの変化をポップアップしない
- end
- class Sprite_PopUpText < Sprite
- # ■サイズ
- DMPP_FSIZE = 32 # ダメージポップアップのサイズ
- TXPP_FSIZE = 20 # 文字ポップアップのサイズ
- TXPP_SY = 16 # 文字ポップアップのY座標修正
- # ■数字1コマあたりのサイズ(pixel)
- NW = 16 # 数字横幅 グラフィックを指定する場合は グラフィックの横幅 / 10
- NH = 20 # 数字縦幅 グラフィックを指定する場合は グラフィックの縦幅 / 4
- # ■数字グラフィックファイル名 指定しない場合は ""
- FONTFILE = "Btskin_n00" # "Btskin_n02"
- # ■フォント
- FONT = ["Arial Black"] # 数字フォント
- TFONT = ["MS Pゴシック", "UmePlus Gothic"] # 文字フォント
- # ■フォントカラー
- # 通常 中の色 / 縁の色
- COLOR0 = [Color.new(255,255,255), Color.new( 0, 0, 0)]
- # 回復
- COLOR1 = [Color.new(128,255,192), Color.new( 0, 64, 0)]
- # MPダメージ
- COLOR2 = [Color.new(255,128,224), Color.new( 64, 0, 64)]
- # クリティカル
- COLOR3 = [Color.new(255,224,128), Color.new(192, 0, 0)]
- # MP回復
- COLOR4 = [Color.new(128,248,255), Color.new( 0, 0, 64)]
- # ■動力
- GRAV = 0.5 # 重力(この値が高いほど早く落下する)
- JUMP = 4.0 # 上昇初速(この値が高いほど上に上がる)
- BU_Y = 48 # 縦バウンド位置(ポップアップ位置が基準)
- BUND = 5 # 縦バウンドさせる最大回数
- LRMV = 2 # 左右の移動のバラつき(ランダム)
- LRBW = true # 画面左右端でバウンドする
- M_OP = 40 # 透明化開始フレーム数
- OP_S = 16 # 透明度変化スピード
- end
- #==============================================================================
- # ■ Bitmap
- #==============================================================================
- class Bitmap
- #--------------------------------------------------------------------------
- # ● 文字縁取り描画
- #--------------------------------------------------------------------------
- def draw_text_f(x, y, width, height, str, align = 0,
- color = Color.new(64,32,128))
- shadow = self.font.shadow
- b_color = self.font.color.dup
- font.shadow = false
- font.color = color
- draw_text(x + 1, y, width, height, str, align)
- draw_text(x - 1, y, width, height, str, align)
- draw_text(x, y + 1, width, height, str, align)
- draw_text(x, y - 1, width, height, str, align)
- font.color = b_color
- draw_text(x, y, width, height, str, align)
- font.shadow = shadow
- end
- def draw_text_f_rect(r, str, align = 0, color = Color.new(64,32,128))
- draw_text_f(r.x, r.y, r.width, r.height, str, align = 0, color)
- end
- end
- #==============================================================================
- # ■ Sprite_PopUpText
- #==============================================================================
- class Sprite_PopUpText < Sprite
- @@numcache = nil
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(x, y, pop = [""], flag = 0, delay = 0)
- n_cache if @@numcache == nil
- size = DMPP_FSIZE
- # スプライト設定
- super(nil)
- self.bitmap = Bitmap.new(128, pop.size * (size + 4))
- self.ox = self.bitmap.width / 2
- self.oy = self.bitmap.height / 2
- self.x = x
- self.y = y - 56
- self.z += 20
- # フラグ 0 = 通常 1 = 回復 2 = MPダメージ 3 = クリティカル
- case flag
- when 0 ;color = COLOR0
- when 1 ;color = COLOR1
- when 2 ;color = COLOR2
- when 3 ;color = COLOR3
- when 4 ;color = COLOR4
- end
- # 描画
- self.bitmap.font.color = color[0]
- for i in 0...pop.size
- if pop[i].is_a?(Numeric)
- number(pop[i].abs, size * i, flag)
- else
- self.bitmap.font.name = TFONT
- self.bitmap.font.size = TXPP_FSIZE
- sy = TXPP_SY
- h = TXPP_FSIZE
- self.bitmap.draw_text_f(0, size * i + sy, 128, h, pop[i], 1, color[1])
- end
- end
- # 動力設定
- @delay = delay
- @rx = self.x
- @lrmove = (-LRMV * 10 + rand(LRMV*20+1))/10.0
- @jump = JUMP
- @yuka = self.y + BU_Y
- @bound = BUND
- @count = 0
- self.visible = false if @delay > 0
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- self.bitmap.dispose if self.bitmap != nil
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- if @delay > 0
- @delay -= 1
- return
- end
- self.visible = true
- self.x = @rx;@rx += @lrmove
- self.y -= @jump
- @jump -= GRAV
- self.opacity -= OP_S if @count >= M_OP
- # 縦バウンド
- if self.y >= @yuka
- self.y = @yuka
- if @bound > 0
- @jump = -@jump / 3 * 2
- @jump -= 1
- @jump = @lrmove = 0 if @jump.truncate <= 1
- @bound -= 1
- else
- @jump = @lrmove = 0
- end
- end
- # 横バウンド
- if LRBW
- if @rx <= 0
- @rx = 1
- @lrmove = -@lrmove
- elsif @rx >= 544
- @rx = 543
- @lrmove = -@lrmove
- end
- end
- # 更新カウント加算
- @count += 1
- dispose if (self.opacity == 0)
- end
- #--------------------------------------------------------------------------
- # ● 数字キャッシュ作成/確保
- #--------------------------------------------------------------------------
- def n_cache
- if FONTFILE == ""
- c = [COLOR0, COLOR1, COLOR2, COLOR3, COLOR4]
- @@numcache = Bitmap.new(NW * 10, NH * 5)
- @@numcache.font.size = NH
- @@numcache.font.name = FONT
- for f in 0...c.size
- @@numcache.font.color = c[f][0]
- fc = c[f][1]
- for i in 0..9
- @@numcache.draw_text_f(i * NW, f * NH, NW, NH, i, 1, fc)
- end
- end
- else
- @@numcache = Cache.system(FONTFILE)
- end
- end
- #--------------------------------------------------------------------------
- # ● 数字描画
- #--------------------------------------------------------------------------
- def number(n, y, c)
- n = (n.to_s).split('')
- for i in 0...n.size do n[i] = n[i].to_i end
- x = (self.bitmap.width / 2) - ((NW * n.size) / 2)
- rect = Rect.new(0 ,0, NW, NH)
- rect.y = c * NH
- for i in n
- rect.x = i * NW
- self.bitmap.blt(x, y, @@numcache, rect)
- x += NW
- end
- end
- end
- #==============================================================================
- # ■ Game_Battler
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- def hppopup
- @hppopup = [] if @hppopup == nil
- @hppopup
- end
- def hppopup=(a)
- @hppopup = a
- end
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_str11d initialize
- def initialize
- @hppopup = []
- initialize_str11d
- end
- #--------------------------------------------------------------------------
- # ● 行動効果の保持用変数をクリア
- #--------------------------------------------------------------------------
- alias clear_action_results_str11d clear_action_results
- def clear_action_results
- @hppopup = []
- clear_action_results_str11d
- end
- #--------------------------------------------------------------------------
- # ● スリップダメージの効果適用
- #--------------------------------------------------------------------------
- alias slip_damage_effect_str11d slip_damage_effect
- def slip_damage_effect
- ar_hp = self.hp
- slip_damage_effect_str11d
- @hppopup.push(ar_hp - self.hp) if ar_hp != self.hp
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 自動回復の実行 (ターン終了時に呼び出し)
- #--------------------------------------------------------------------------
- alias do_auto_recovery_str11d do_auto_recovery
- def do_auto_recovery
- ar_hp = self.hp
- do_auto_recovery_str11d
- @hppopup.push(ar_hp - self.hp) if ar_hp != self.hp
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ★ エイリアス
- #--------------------------------------------------------------------------
- alias start_str11d start
- def start
- @popup = []
- start_str11d
- end
- alias terminate_str11d terminate
- def terminate
- for i in [email protected]
- @popup[i].dispose if @popup[i] != nil
- end
- @popup = nil
- terminate_str11d
- end
- alias update_basic_str11d update_basic
- def update_basic(main = false)
- update_basic_str11d(main)
- for i in [email protected]
- if @popup[i] != nil
- @popup[i].update
- @popup.delete_at(i) if @popup[i].disposed?
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● バトルイベントの処理
- #--------------------------------------------------------------------------
- alias process_battle_event_str11d process_battle_event
- def process_battle_event
- slippopup unless V_SLIP
- process_battle_event_str11d
- end
- #--------------------------------------------------------------------------
- # ● スリップダメージのポップアップ
- #--------------------------------------------------------------------------
- def slippopup
- for i in $game_party.members + $game_troop.members
- if i.hppopup.size > 0
- for p in i.hppopup
- array = [p]
- @popup.push(Sprite_PopUpText.new(i.position_x, i.position_y, array))
- end
- i.hppopup.clear
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● ミスの表示
- #--------------------------------------------------------------------------
- alias display_miss_str11d display_miss
- def display_miss(target, obj = nil)
- t = target
- tx = MISS
- @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx]))
- display_miss_str11d(target, obj)
- end
- #--------------------------------------------------------------------------
- # ● 回避の表示
- #--------------------------------------------------------------------------
- alias display_evasion_str11d display_evasion
- def display_evasion(target, obj = nil)
- unless V_EVAD
- t = target
- tx = EVAD
- @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx]))
- end
- display_evasion_str11d(target, obj)
- end
-
- def pop_damage(target, obj, action)
- index = @active_battler.index
- actor = @active_battler.actor?
- if obj != nil
- # スキルやアイテムが吸収属性なら
- absorb = absorb_attack(obj, target, index, actor) if obj.absorb_damage
- action.push(true) if absorb == 0
- # 拡張設定でダメージアクション禁止なら
- action[2] = false if obj.extension.include?("NOOVERKILL")
- end
- # 対象のリアクション
- @spriteset.set_damage_action(target.actor?, target.index, action)
- display_damage(target, obj)
- end
- #--------------------------------------------------------------------------
- # ● HP ダメージ表示
- #--------------------------------------------------------------------------
- def display_hp_damage(target, obj = nil)
- t = target
- c = 0
- if target.hp_damage == 0 # ノーダメージ
- return if obj != nil and obj.damage_to_mp
- return if obj != nil and obj.base_damage == 0
- array = [t.hp_damage]
- if target.critical
- array.unshift(CRIT);c = 3
- end
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
- elsif target.absorbed # 吸収
- array = [t.hp_damage]
- n = t.hp_damage
- c = (t.hp_damage >= 0 ? 0 : 1)
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
- # 使用者の回復量を表示
- t = @active_battler
- array = [n]
- c = (t.hp_damage >= 0 ? 1 : 0)
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
- elsif target.hp_damage > 0 # ダメージ
- array = [t.hp_damage]
- if target.critical
- array.unshift(CRIT);c = 3
- end
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
- else # 回復
- array = [t.hp_damage]
- if target.critical
- array.unshift(CRIT)
- end
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, 1))
- end
- # 呼び戻し
- end
- #--------------------------------------------------------------------------
- # ● MP ダメージ表示
- #--------------------------------------------------------------------------
- def display_mp_damage(target, obj = nil)
- return if target.dead?
- return if target.mp_damage == 0
- t = target
- if target.absorbed # 吸収
- array = [t.mp_damage]
- n = t.mp_damage
- if t.mp_damage >= 0
- c = 2 ; array.unshift(MPDA) unless V_MPDA
- else
- c = 4 ; array.unshift(MPRE) unless V_MPRE
- end
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
- t = @active_battler
- array = [n]
- if t.mp_damage >= 0
- c = 4 ; array.unshift(MPRE) unless V_MPRE
- else
- c = 2 ; array.unshift(MPDA) unless V_MPDA
- end
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, c))
- elsif target.mp_damage > 0 # ダメージ
- array = [t.mp_damage]
- array.unshift(MPDA) unless V_MPDA
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, 2))
- else # 回復
- array = [t.mp_damage]
- array.unshift(MPRE) unless V_MPRE
- @popup.push(Sprite_PopUpText.new(t.position_x, t.position_y, array, 4))
- end
- # 呼び戻し
- end
- #--------------------------------------------------------------------------
- # ● 付加されたステートの表示
- #--------------------------------------------------------------------------
- def display_added_states(target, obj = nil)
- unless V_STAT
- t = target
- tx = ""
- delay = 0
- for state in t.added_states
- tx = state.name if state.id != 1
- @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx], 0, delay))
- delay += 24
- end
- end
- # 呼び戻し
- end
- #--------------------------------------------------------------------------
- # ● 解除されたステートの表示
- #--------------------------------------------------------------------------
- def display_removed_states(target, obj = nil)
- unless V_STAT
- t = target
- delay = 0
- for state in t.removed_states
- tx = state.name
- @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx], 1, delay))
- delay += 24
- end
- end
- # 呼び戻し
- end
- #--------------------------------------------------------------------------
- # ● 失敗の表示
- #--------------------------------------------------------------------------
- def display_failure(target, obj)
- unless V_FAIL
- t = target
- tx = FAIL
- @popup.push(Sprite_PopUpText.new(t.position_x,t.position_y,[tx]))
- end
- # 呼び戻し
- end
- end
复制代码 |
|