QQ图片20190602153326.png (161.03 KB, 下载次数: 32)
#============================================================================== # +++ MOG - DAMAGEPOPUP (v4.5) +++ #============================================================================== # By Moghunter # [url]https://atelierrgss.wordpress.com/[/url] #============================================================================== # Apresenta danos dos alvos em imagens. #============================================================================== # Ser?o necessários as imagems # # Critical # Evaded # Exp # Gold # Level Up # Missed # MP # Number # TP # # As imagens devem ficar na pasta /GRAPHICS/DAMAGE/ #============================================================================== #============================================================================== # DAMAGE POPUP FOR CHARACTERS (Events) #============================================================================== # Caso desejar ativar manualmente os danos nos characters, basta usar os códigos # abaixo. # # damage_popup(TARGET_ID,VALUE,"TYPE") # # TARGET_ID # 1...999 - Define a ID do evento no mapa # 0 - Define a ID sendo do jogador.(Player) # -1...-3 - Define a ID dos aliados (Followers). # # VALUE # Define o valor em dano (Pode ser valores negativos) ou um texto. # No caso das codi??es defina a ID da condi??o. (Valore negativos # é apresentado a condi??o sendo removida.) # # TYPE (Opcional) # So use está op??o para ativar srtings especiais. # # "Exp" - Valor da string se torna em EXP. # "Gold" - Valor da string se torna em GOLD. # "States" - é apresentado o ícone e o nome da condi??o da condi??o. # #============================================================================== # # damage_popup(1,999) # damage_popup(4,"Save Point.") # damage_popup(0,"I'm hungry!!!") <- (Player) # damage_popup(-1,"Booo!") <- (Follower ID1) # damage_popup(0,2000,"Exp") <- Popup 2000 Exp # damage_popup(0,5000,"Gold") <- Popup 5000 Gold # #============================================================================== # Use o código abaixo se desejar fazer o dano aparecer em todos os personagens. # # damage_popup_party(TARGET_ID,STRING,"TYPE") # #============================================================================== # ATIVAR OU DESATIVAR OS DANOS NO MAPA. #============================================================================== # é possível usar o código abaixo para ativar ou desativar a dano no mapa # no meio do jogo, útil se você n?o quiser que alguma string de item ou # dano apare?a no meio de algum evento ou cena. # # damage_popup_map(true) -> or (false) # #============================================================================== # ● Histórico (Version History) #============================================================================== # v 4.5 - Corre??o de ativar o dano quando o alvo é morto e o dano é zero. #============================================================================== $imported = {} if $imported.nil? $imported[:mog_damage_popup] = true module MOG_DAMAGEPOPUP #Ativar as strings de dano no mapa. (Default / Inicial) DAMAGE_POPUP_MAP = false #Apresentar o item ao ganhar. (Apenas no mapa). ITEM_POPUP_MAP = true #Apresentar a exp e ouro do inimigo. EXP_GOLD_POPUP_BATTLE = true EXP_GOLD_POPUP_MAP = true #Ativar a string de Level UP LEVEL_POPUP_BATTLE = true LEVEL_POPUP_MAP = true #Ativar as strings nas condi??es. STATES_POPUP_BATTLE = true STATES_POPUP_MAP = true #Defini??o da fonte (Nome de itens/ condi??es / etc...). FONT_SIZE = 28 FONT_BOLD = true FONT_ITALIC = false FONT_COLOR = Color.new(255,255,255) FONT_COLOR_ITEM = Color.new(255,255,255) FONT_COLOR_STATUS_PLUS = Color.new(155,155,255) FONT_COLOR_STATUS_MINUS = Color.new(255,150,150) #Defini??o do espa?o entre os danos. Y_SPACE = 28 #Defini??o da posi??o Z do srpite. DAMAGE_Z = 151 end #============================================================================== # ■ Game_System #============================================================================== class Game_System attr_accessor :damage_popup_map #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_popup_initialize initialize def initialize @damage_popup_map = MOG_DAMAGEPOPUP::DAMAGE_POPUP_MAP mog_damage_popup_initialize end #-------------------------------------------------------------------------- # ● Damage Popup Clear #-------------------------------------------------------------------------- def damage_popup_clear $game_party.character_members.each {|t| t.actor.damage.clear; t.actor.skip_dmg_popup = false ; t.damage.clear; t.skip_dmg_popup = false} rescue nil $game_map.events.values.each {|t| t.damage.clear ; t.skip_dmg_popup = false} rescue nil end end #============================================================================== # ■ Game Temp #============================================================================== class Game_Temp attr_accessor :battle_end #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_temp_opup_initialize initialize def initialize @battle_end = false mog_damage_temp_opup_initialize end #-------------------------------------------------------------------------- # ● Sprite Visible #-------------------------------------------------------------------------- def sprite_visible return false if $game_message.visible return false if $game_temp.battle_end return true end end #============================================================================== # ■ Game CharacterBase #============================================================================== class Game_CharacterBase attr_accessor :damage ,:battler ,:skip_dmg_popup #-------------------------------------------------------------------------- # ● Ini Public Members #-------------------------------------------------------------------------- alias mog_damage_popup_init_public_members init_public_members def init_public_members @damage = [] ; @skip_dmg_popup = false mog_damage_popup_init_public_members end #-------------------------------------------------------------------------- # ● Damage Popup #-------------------------------------------------------------------------- def damage_popup(value,type = "String") @damage.push([value,type]) end end #============================================================================== # ■ Scene Map #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● Start #-------------------------------------------------------------------------- alias mog_damage_popup_start start def start $game_system.damage_popup_clear ; $game_temp.battle_end = false mog_damage_popup_start end end #============================================================================== # ■ Game Player #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # ● Battler #-------------------------------------------------------------------------- def battler actor end end #============================================================================== # ■ Game Follower #============================================================================== class Game_Follower < Game_Character #-------------------------------------------------------------------------- # ● Battler #-------------------------------------------------------------------------- def battler actor end end #============================================================================== # ■ Game_BattlerBase #============================================================================== class Game_BattlerBase #-------------------------------------------------------------------------- # ● Change HP #-------------------------------------------------------------------------- alias mog_damage_popup_change_hp change_hp def change_hp(value, enable_death) mog_damage_popup_change_hp(value, enable_death) self.damage.push([-value,"Hp"]) end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler < Game_BattlerBase include MOG_DAMAGEPOPUP attr_accessor :damage , :skip_dmg_popup #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_sprite_initialize initialize def initialize @damage = [] ; @skip_dmg_popup = false mog_damage_sprite_initialize end #-------------------------------------------------------------------------- # ● Item Apply #-------------------------------------------------------------------------- alias mog_damage_pop_item_apply item_apply def item_apply(user, item) mog_damage_pop_item_apply(user, item) execute_damage_popup(user,item) end #-------------------------------------------------------------------------- # ● Execute Damage Popup #-------------------------------------------------------------------------- def execute_damage_popup(user,item) if !@result.missed and !@result.evaded and @result.hit? self.damage.push([@result.hp_damage,"HP",@result.critical]) if item.damage.to_hp? or @result.hp_damage != 0 user.damage.push([-@result.hp_drain,"HP",@result.critical]) if item.damage.type == 5 self.damage.push([@result.mp_damage,"MP",@result.critical]) if item.damage.to_mp? or @result.mp_damage != 0 user.damage.push([-@result.mp_drain,"MP",@result.critical]) if item.damage.type == 6 self.damage.push([@result.tp_damage,"TP",@result.critical]) if @result.tp_damage != 0 elsif !self.dead? if @result.missed ; self.damage.push(["Missed","Missed"]) elsif @result.evaded ; self.damage.push(["Missed","Missed"]) #if @result.critica ; self.damage.push(["baoji","baoji"]) #end end end end #-------------------------------------------------------------------------- # ● Regenerate HP #-------------------------------------------------------------------------- #alias mog_damage_pop_regenerate_hp regenerate_hp #def regenerate_hp #mog_damage_pop_regenerate_hp #self.damage.push(["Regenerate",""]) if @result.hp_damage < 0 #self.damage.push([@result.hp_damage,"HP"]) if @result.hp_damage != 0 #end #-------------------------------------------------------------------------- # ● Regenerate MP #-------------------------------------------------------------------------- #alias mog_damage_pop_regenerate_mp regenerate_mp #def regenerate_mp #mog_damage_pop_regenerate_mp #self.damage.push(["Regenerate",""]) #self.damage.push([@result.mp_damage,"MP"]) if @result.mp_damage != 0 #end #-------------------------------------------------------------------------- # ● Regenerate TP #-------------------------------------------------------------------------- #alias mog_damage_pop_regenerate_tp regenerate_tp #def regenerate_tp #mog_damage_pop_regenerate_tp #tp_damage = 100 * trg #self.damage.push([tp_damage,"TP"]) if tp_damage != 0 #end #-------------------------------------------------------------------------- # ● Added New State #-------------------------------------------------------------------------- alias mog_damage_pop_add_new_state add_new_state def add_new_state(state_id) mog_damage_pop_add_new_state(state_id) execute_popup_add_new_state(state_id) end #-------------------------------------------------------------------------- # ● Execute Popup Add New State #-------------------------------------------------------------------------- def execute_popup_add_new_state(state_id) st = $data_states[state_id] if self.hp > 0 unless (SceneManager.scene_is?(Scene_Battle) and !STATES_POPUP_BATTLE) or (SceneManager.scene_is?(Scene_Map) and !STATES_POPUP_MAP) self.damage.push([st.name.to_s,"States Plus",false,st.icon_index]) end end end #-------------------------------------------------------------------------- # ● Remove State #-------------------------------------------------------------------------- alias mog_damage_pop_remove_state remove_state def remove_state(state_id) execute_popup_remove_state(state_id) mog_damage_pop_remove_state(state_id) end #-------------------------------------------------------------------------- # ● Execute Popup Remove State #-------------------------------------------------------------------------- def execute_popup_remove_state(state_id) if state?(state_id) and self.hp > 0 st = $data_states[state_id] unless (SceneManager.scene_is?(Scene_Battle) and !STATES_POPUP_BATTLE) or (SceneManager.scene_is?(Scene_Map) and !STATES_POPUP_MAP) self.damage.push([st.name.to_s,"States Minus",false,st.icon_index]) unless BattleManager.escape? end end end end #============================================================================== # ■ BattleManager #============================================================================== module BattleManager #-------------------------------------------------------------------------- # ● Escape? #-------------------------------------------------------------------------- def self.escape? @phase == nil end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp attr_accessor :dmg_battle_mode #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_popup_initialize initialize def initialize @dmg_battle_mode = false mog_damage_popup_initialize end end #============================================================================== # ■ Scene Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● Start #-------------------------------------------------------------------------- alias mog_damage_popup_start start def start $game_temp.dmg_battle_mode = true mog_damage_popup_start end #-------------------------------------------------------------------------- # ● Terminate #-------------------------------------------------------------------------- alias mog_damage_popup_terminate terminate def terminate mog_damage_popup_terminate $game_temp.dmg_battle_mode = false end end #============================================================================== # ■ Game Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● Character Members #-------------------------------------------------------------------------- def character_members char_m = [] ; char_m.push($game_player) $game_player.followers.each do |f| char_m.push(f) end return char_m end #-------------------------------------------------------------------------- # ● Gain Gold #-------------------------------------------------------------------------- #alias mog_damage_popup_gain_gold gain_gold #def gain_gold(amount) # mog_damage_popup_gain_gold(amount) #$game_party.members[0].damage.push([amount,"Gold"]) if can_damage_popup_gold? #end #-------------------------------------------------------------------------- # ● Can Damage Popup Gold #-------------------------------------------------------------------------- def can_damage_popup_gold? return false if !SceneManager.scene_is?(Scene_Map) return false if $game_temp.dmg_battle_mode return false if !MOG_DAMAGEPOPUP::EXP_GOLD_POPUP_MAP return false if !$game_system.damage_popup_map return false if !$game_party.members[0] return true end #-------------------------------------------------------------------------- # ● Gain Item #-------------------------------------------------------------------------- alias mog_damage_popup_gain_item gain_item def gain_item(item, amount, include_equip = false) mog_damage_popup_gain_item(item, amount, include_equip) execute_item_popup(item) if can_damage_popup_item?(item) end #-------------------------------------------------------------------------- # ● Can Damage Poupup Item #-------------------------------------------------------------------------- def can_damage_popup_item?(item) return false if item == nil return false if !MOG_DAMAGEPOPUP::ITEM_POPUP_MAP return false if !$game_system.damage_popup_map return false if SceneManager.scene_is?(Scene_Battle) return false if !$game_party.members[0] return false if $game_temp.dmg_battle_mode return true end #-------------------------------------------------------------------------- # ● Execute Item Popup #-------------------------------------------------------------------------- def execute_item_popup(item) it = $data_items[item.id] if item.is_a?(RPG::Item) it = $data_weapons[item.id] if item.is_a?(RPG::Weapon) it = $data_armors[item.id] if item.is_a?(RPG::Armor) $game_party.members[0].damage.push([it.name.to_s,"Item",false,it.icon_index]) end end #============================================================================== # ■ Game Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● Damage Popup Map #-------------------------------------------------------------------------- def damage_popup_map(value) $game_system.damage_popup_map = value end #-------------------------------------------------------------------------- # ● Damage Popup #-------------------------------------------------------------------------- def damage_popup(target_id, value,type = "") return if !$game_system.damage_popup_map target = set_target_dmg(target_id) rescue nil target.damage.push([value,type]) if target end #-------------------------------------------------------------------------- # ● Set Target Dmg #-------------------------------------------------------------------------- def set_target_dmg(target) return $game_player.battler if target == 0 return $game_player.followers.battler[(target_id + 1).abs] if target < 0 $game_map.events.values.each do |event| return event.battler if event.id == target_id and event.battler return event if event.id == target_id end end #-------------------------------------------------------------------------- # * Change MP #-------------------------------------------------------------------------- alias mog_damage_popup_command_312 command_312 def command_312 value = operate_value(@params[2], @params[3], @params[4]) iterate_actor_var(@params[0], @params[1]) do |actor| actor.damage.push([-value,"MP"]) end mog_damage_popup_command_312 end end #============================================================================== # ■ Game Actor #============================================================================== class Game_Actor < Game_Battler include MOG_DAMAGEPOPUP #-------------------------------------------------------------------------- # ● Level UP #-------------------------------------------------------------------------- alias mog_damage_pop_level_up level_up def level_up mog_damage_pop_level_up execute_level_popup end #-------------------------------------------------------------------------- # ● Execute Level Popup #-------------------------------------------------------------------------- def execute_level_popup if (SceneManager.scene_is?(Scene_Battle) and LEVEL_POPUP_BATTLE) or (SceneManager.scene_is?(Scene_Map) and LEVEL_POPUP_MAP) @damage.push(["Level UP","Level_UP"]) unless @skip_dmg_popup @skip_dmg_popup = true end end #-------------------------------------------------------------------------- # ● Change Exp #-------------------------------------------------------------------------- #alias mog_damage_popup_change_exp change_exp #def change_exp(exp, show) #n_exp = self.exp #mog_damage_popup_change_exp(exp, show) #c_exp = n_exp - self.exp #@damage.push([c_exp.abs,"Exp"]) if can_popup_exp?(exp) #end #-------------------------------------------------------------------------- # ● Can Popup EXP #-------------------------------------------------------------------------- def can_popup_exp?(exp) return false if !EXP_GOLD_POPUP_MAP return false if exp <= 0 return false if self.skip_dmg_popup return false if self.max_level? return true end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● Invoke Counter Attack #-------------------------------------------------------------------------- alias mog_damage_popup_invoke_counter_attack invoke_counter_attack def invoke_counter_attack(target, item) mog_damage_popup_invoke_counter_attack(target, item) #target.damage.push(["Counter","Counter"]) end #-------------------------------------------------------------------------- # ● Invoke Counter Attack #-------------------------------------------------------------------------- alias mog_damage_popup_invoke_magic_reflection invoke_magic_reflection def invoke_magic_reflection(target, item) mog_damage_popup_invoke_magic_reflection(target, item) #target.damage.push(["Reflection","Reflection"]) end end #============================================================================== # ■ Cache #============================================================================== module Cache #-------------------------------------------------------------------------- # * Damage #-------------------------------------------------------------------------- def self.damage(filename) load_bitmap("Graphics/Damage/", filename) end end #============================================================================== # ■ Game Temp #============================================================================== class Game_Temp attr_accessor :pre_cache_damage #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_pop_initialize initialize def initialize mog_damage_pop_initialize pre_cache_damage_temp end #-------------------------------------------------------------------------- # ● Pre Cache Damage Temp #-------------------------------------------------------------------------- def pre_cache_damage_temp return if @pre_cache_damage != nil @pre_cache_damage = [] @pre_cache_damage.push(Cache.damage("HP_Number")) @pre_cache_damage.push(Cache.damage("MP")) @pre_cache_damage.push(Cache.damage("TP")) @pre_cache_damage.push(Cache.damage("Missed")) @pre_cache_damage.push(Cache.damage("baoji")) @pre_cache_damage.push(Cache.damage("Evaded")) #@pre_cache_damage.push(Cache.damage("Critical")) #@pre_cache_damage.push(Cache.damage("Exp")) #@pre_cache_damage.push(Cache.damage("Gold")) @pre_cache_damage.push(Cache.damage("Level UP")) @pre_cache_damage.push(Cache.damage("Counter")) @pre_cache_damage.push(Cache.damage("Reflection")) @pre_cache_damage.push(Cache.damage("MP_Number")) @pre_cache_damage.push(Cache.damage("TP_Number")) @pre_cache_damage.push(Cache.damage("EG_Number")) @pre_cache_damage.push(Cache.system("Iconset")) end end #============================================================================== # ■ Sprite Base #============================================================================== class Sprite_Base < Sprite #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_popup_sprite_initialize initialize def initialize(viewport = nil) mog_damage_popup_sprite_initialize(viewport) damage_popup_setup end #-------------------------------------------------------------------------- # ● Damage Popup Setup #-------------------------------------------------------------------------- def damage_popup_setup $game_temp.pre_cache_damage_temp ; @damage_sprites = [] $game_system.damage_popup_clear end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- alias mog_damage_popup_sprite_dispose dispose def dispose mog_damage_popup_sprite_dispose dispose_damage_sprites end #-------------------------------------------------------------------------- # ● Dispose Damage Sprites #-------------------------------------------------------------------------- def dispose_damage_sprites return if @damage_sprites == nil @damage_sprites.each {|sprite| sprite.dispose_damage } end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- alias mog_damage_popup_sprite_update update def update mog_damage_popup_sprite_update update_damage_popup end #-------------------------------------------------------------------------- # ● Update Damage Popup #-------------------------------------------------------------------------- def update_damage_popup return if @damage_sprites == nil create_damage_sprite if can_create_damage? update_damage_sprite if !@damage_sprites.empty? end #-------------------------------------------------------------------------- # ● Can Create Damage? #-------------------------------------------------------------------------- def can_create_damage? return false if $game_message.visible if @battler return false if @battler.damage == nil return false if @battler.damage.empty? if $game_temp.battle_end and @battler.is_a?(Game_Actor) return false if $game_message.visible return false if $imported[:mog_battler_result] and $game_temp.result end elsif @character return false if !$game_system.damage_popup_map if @character.battler return false if @character.battler.damage == nil return false if @character.battler.damage.empty? else return false if @character.damage == nil return false if @character.damage.empty? end end return false if @battler == nil and @character == nil return true end #-------------------------------------------------------------------------- # ● Create Damage Sprite #-------------------------------------------------------------------------- def create_damage_sprite target = @battler ? @battler : @character screen_x_available = target.screen_x rescue nil return if screen_x_available == nil sx = target.screen_x != nil ? target.screen_x : self.x sy = target.screen_y != nil ? target.screen_y : self.y @damage_sprites = [] if @damage_sprites == nil target = @character.battler if @character and @character.battler target.damage.each_with_index do |i, index| @damage_sprites.push(Damage_Sprite.new(nil,sx,sy,i,index,@damage_sprites.size,self)) end if SceneManager.scene_is?(Scene_Battle) @damage_sprites.each_with_index do |i, index| i.set_duration(index) end end target.damage.clear ; target.skip_dmg_popup = false end #-------------------------------------------------------------------------- # ● Update Damage Sprite #-------------------------------------------------------------------------- def update_damage_sprite clear = true @damage_sprites.each_with_index do |sprite, i| sprite.update_damage(@damage_sprites.size,i,@battler) sprite.dispose_damage if sprite.duration <= 0 clear = false if sprite.duration > 0 end @damage_sprites.clear if clear end end #============================================================================== # ■ Damage Sprite #============================================================================== class Damage_Sprite < Sprite include MOG_DAMAGEPOPUP attr_accessor :duration #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil , x,y, value ,index,index_max,target) super(viewport) dispose_damage ; setup_base(value,x,y,index,index_max,target) ; create_sprites end #-------------------------------------------------------------------------- # ● Setup Base #-------------------------------------------------------------------------- def setup_base(value,x,y,index,index_max,target) @target = target ; y2 = 0 if @target.bitmap != nil ; y2 = SceneManager.scene_is?(Scene_Battle) ? @target.bitmap.height / 2 : 0 ; end @animation_type = 0 ; @index = index ; @index_max = index_max + 1 @image = $game_temp.pre_cache_damage ; self.z = index + DAMAGE_Z @cw = @image[0].width / 10 ; @ch = @image[0].height ; @cw2 = 0 @x = x ; @y = y - y2 ; @value = value[0] ; @type = value[1] ; @ch2 = 0 @critical = (value[2] and @value.to_i >= 0) ? true : false; self.opacity = 0 @state_index = value[3] ; @oxy = [0,0,0,0] ; @org_xy = [0,0] ; @spxy = [0,0] @duration = 92 ; @org_oxy = [0,0,0,0] self.visible = false ;set_initial_position(index,nil) end #-------------------------------------------------------------------------- # ● Set Duration #-------------------------------------------------------------------------- def set_duration(index,pre_index = nil) return if @duration != 0 @duration = 82 + (2 * index) if @animation_type == 0 end #-------------------------------------------------------------------------- # ● Set Initial Position #-------------------------------------------------------------------------- def set_initial_position(index,old_duration) @org_xy = [@x,@y] self.zoom_y = self.zoom_x end #-------------------------------------------------------------------------- # ● Dispose Damage #-------------------------------------------------------------------------- def dispose_damage (self.bitmap.dispose ; self.bitmap = nil) if self.bitmap (@sup_sprite.bitmap.dispose ; @sup_sprite.dispose) if @sup_sprite @duration = -1 end #-------------------------------------------------------------------------- # ● Create Sprites #-------------------------------------------------------------------------- def create_sprites if @value.is_a?(Numeric) create_number elsif ["Missed","Level UP","Counter","Reflection"].include?(@value.to_s) create_miss else create_string end set_damage_position end #-------------------------------------------------------------------------- # ● Set Damage Position #-------------------------------------------------------------------------- def set_damage_position return if self.bitmap == nil self.ox = (self.bitmap.width - @cw2) / 2 self.oy = self.bitmap.height / 2 ; self.x = @x ; self.y = @y @org_oxy[0] = self.ox @org_oxy[1] = self.oy set_animation_type if @sup_sprite @sup_sprite.ox = self.bitmap.width / 2 ; @sup_sprite.oy = self.bitmap.height / 2 @org_oxy[2] = @sup_sprite.ox @org_oxy[3] = @sup_sprite.oy if @critical @sup_sprite.x = @x - (@sup_sprite.bitmap.width / 2) + ((@cw / 2) * @number_value.size) @sup_sprite.y = self.y end update_sup_position(@index_max - @index) end end #-------------------------------------------------------------------------- # ● Set Damage Position #-------------------------------------------------------------------------- def set_animation_type s = rand(2) ; s2 = (rand(10) * 0.1).round(2) @oxy[2] = s == 1 ? s2 : -s2 end #-------------------------------------------------------------------------- # ● Create Number #-------------------------------------------------------------------------- def create_number case @type when "MP" number_image = @image[11] ;h = @value >= 0 ? 0 : @ch ; create_sup_sprite when "TP" #number_image = @image[12] ;h = @value >= 0 ? 0 : @ch ; create_sup_sprite #when "Exp" #number_image = @image[13] ;h = 0 ; create_sup_sprite #when "Gold" number_image = @image[13] ;h = @ch ; create_sup_sprite else number_image = @image[0] ; h = @value >= 0 ? 0 : @ch end @number_value = @value.abs.truncate.to_s.split(//) self.bitmap = Bitmap.new(@cw * @number_value.size, @ch) for r in 0...@number_value.size number_value_abs = @number_value[r].to_i src_rect = Rect.new(@cw * number_value_abs, h, @cw, @ch) self.bitmap.blt(@cw * r, 0, number_image, src_rect) end create_sup_sprite if @critical end #-------------------------------------------------------------------------- # ● Create Sup Sprite #-------------------------------------------------------------------------- def create_sup_sprite return if @sup_sprite != nil @sup_sprite = Sprite.new ; @sup_sprite.visible = false ; fy = 0 ; sp = [0,0] if @type == "MP" ; @sup_sprite.bitmap = @image[1].dup elsif @type == "TP" ; @sup_sprite.bitmap = @image[2].dup elsif @critical @sup_sprite.bitmap = @image[5].dup @cw2 = 0 ; @ch2 = @sup_sprite.bitmap.height return elsif @type == "Exp" @sup_sprite.bitmap = @image[6].dup ; fy = @ch ; sp[1] = 1.0 elsif @type == "Gold" @sup_sprite.bitmap = @image[7].dup ; fy = (@ch * 2) ; sp[1] = 0.5 end fy = 0 if !SceneManager.scene_is?(Scene_Battle) @y += fy ; @org_xy[1] += 0 @cw2 = @sup_sprite.bitmap.width + @cw @spxy = [sp[0],sp[1]] end #-------------------------------------------------------------------------- # ● Update Sup Position #-------------------------------------------------------------------------- def update_sup_position(dif_y) @sup_sprite.x = self.x - @cw unless @critical @sup_sprite.y = @critical ? self.y - @ch2 : self.y @sup_sprite.opacity = self.opacity ; @sup_sprite.angle = self.angle @sup_sprite.zoom_x = self.zoom_x ; @sup_sprite.zoom_y = self.zoom_y @sup_sprite.z = self.z ; @sup_sprite.viewport = self.viewport @sup_sprite.visible = self.visible end #-------------------------------------------------------------------------- # ● Create Miss #-------------------------------------------------------------------------- def create_miss self.bitmap = @image[3].dup if @value == "Missed" #self.bitmap = @image[3].dup if @value == "Missed" self.bitmap = @image[8].dup if @value == "Level UP" self.bitmap = @image[9].dup if @value == "Counter" self.bitmap = @image[10].dup if @value == "Reflection" end #-------------------------------------------------------------------------- # ● Create Spring #-------------------------------------------------------------------------- def create_string string_size = @value.to_s.split(//) ; fsize = FONT_SIZE > 10 ? FONT_SIZE : 10 @stg_size = string_size.size > 0 ? ((1 + string_size.size ) * ((fsize / 2) - 2)) : 32 self.bitmap = Bitmap.new(@stg_size,32) self.bitmap.font.color = FONT_COLOR self.bitmap.font.size = fsize ; self.bitmap.font.bold = FONT_BOLD self.bitmap.font.italic = FONT_ITALIC if @type == "Item" self.bitmap.font.color = FONT_COLOR_ITEM elsif @type == "States Plus" self.bitmap.font.color = FONT_COLOR_STATUS_PLUS elsif @type == "States Minus" self.bitmap.font.color = FONT_COLOR_STATUS_MINUS end self.bitmap.draw_text(0, 0, self.bitmap.width, self.bitmap.height, @value.to_s,0) draw_states if @state_index != nil end #-------------------------------------------------------------------------- # ● Draw States #-------------------------------------------------------------------------- def draw_states @sup_sprite = Sprite.new ; @sup_sprite.bitmap = Bitmap.new(24,24) rect = Rect.new(@state_index % 16 * 24, @state_index / 16 * 24, 24, 24) @image[14] = Cache.system("Iconset") if @image[14]== nil or @image[14].disposed? @sup_sprite.bitmap.blt(0, 0, @image[14].dup, rect) (@org_xy[1] += (@ch + 5) ; @y += (@ch + 5)) unless !SceneManager.is_a?(Scene_Battle) @cw2 = @sup_sprite.bitmap.width + @cw / 2 ; @sup_sprite.visible = false end #-------------------------------------------------------------------------- # ● Update Damage #-------------------------------------------------------------------------- def update_damage(index_max,index,battler) @index_max = index_max ; @index = index return if self.bitmap == nil or self.bitmap.disposed? @duration -= 1 self.visible = @duration > 90 ? false : true return if !self.visible dif_y = (@index_max - @index) update_animation(dif_y) update_sprite_position(dif_y,battler) update_sup_position(dif_y) if @sup_sprite dispose_damage if @duration <= 0 end #-------------------------------------------------------------------------- # ● Update Sprite Position #-------------------------------------------------------------------------- def update_sprite_position(dif_y,battler) execute_move(0,self,@org_xy[0] + @oxy[0]) execute_move(1,self,@org_xy[1] + @oxy[1] - (dif_y * Y_SPACE)) self.zoom_y = self.zoom_x update_battle_camera if oxy_camera?(battler) end #-------------------------------------------------------------------------- # ● Update Battle Camera #-------------------------------------------------------------------------- def update_battle_camera self.ox = $game_temp.viewport_oxy[0] + @org_oxy[0] self.oy = $game_temp.viewport_oxy[1] + @org_oxy[1] @sup_sprite.ox = $game_temp.viewport_oxy[0] + @org_oxy[2] if @sup_sprite != nil @sup_sprite.oy = $game_temp.viewport_oxy[1] + @org_oxy[3] if @sup_sprite != nil end #-------------------------------------------------------------------------- # ● OXY_CAMERA #-------------------------------------------------------------------------- def oxy_camera?(battler) return false if $imported[:mog_battle_camera] == nil if battler.is_a?(Game_Actor) return false if $imported[:mog_battle_hud_ex] and SceneManager.face_battler? end return true end #-------------------------------------------------------------------------- # ● Execute Move #-------------------------------------------------------------------------- def execute_move(type,sprite,np) cp = type == 0 ? sprite.x : sprite.y sp = 1 + ((cp - np).abs / 10) sp = 1 if @duration < 60 if cp > np ; cp -= sp ; cp = np if cp < np elsif cp < np ; cp += sp ; cp = np if cp > np end sprite.x = cp if type == 0 ; sprite.y = cp if type == 1 end #-------------------------------------------------------------------------- # ● Update Animation #-------------------------------------------------------------------------- def update_animation(dif_y) @oxy[1] -= 1 case @duration when 60..90 ; self.opacity += 15 when 30..60 ; self.opacity = 255 when 0..30 ; self.opacity -= 9 end end end #============================================================================== # ■ Sprite Battler #============================================================================== class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● Update Collapse #-------------------------------------------------------------------------- alias mog_damage_pop_update_collapse update_collapse def update_collapse mog_damage_pop_update_collapse execute_exp_pop end #-------------------------------------------------------------------------- # ● Update Instant Collapse #-------------------------------------------------------------------------- alias mog_damage_pop_update_instant_collapse update_instant_collapse def update_instant_collapse mog_damage_pop_update_instant_collapse execute_exp_pop end #-------------------------------------------------------------------------- # ● Update Boss Collapse #-------------------------------------------------------------------------- alias mog_damage_pop_update_boss_collapse update_boss_collapse def update_boss_collapse mog_damage_pop_update_boss_collapse execute_exp_pop end #-------------------------------------------------------------------------- # ● Execute Exp Pop #-------------------------------------------------------------------------- def execute_exp_pop return if !MOG_DAMAGEPOPUP::EXP_GOLD_POPUP_BATTLE or @dam_exp != nil return if @battler == nil or @battler.is_a?(Game_Actor) @dam_exp = true if $imported[:mog_active_bonus_gauge] != nil real_exp = $game_troop.bonus_exp? ? @battler.exp * 2 : @battler.exp real_gold = $game_troop.bonus_gold? ? @battler.gold * 2 : @battler.gold else real_exp = @battler.exp ; real_gold = @battler.gold end #@battler.damage.push([real_exp,"Exp"]) if @battler.exp > 0 #@battler.damage.push([real_gold,"Gold"]) if @battler.gold > 0 end end
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |