Original Source
- Original title: MOG Damage PopUp Script Error when Switching Class
- Original author: fallenlorelei
- Original date: July 25, 2015
- Source thread: https://forums.rpgmakerweb.com/threads/mog-damage-popup-script-error-when-switching-class.42798/
- Source forum path: Game Development Engines > Ruby Game System (RGSS) Scripts > RGSSx Script Support
Summary
In my game, the main character starts off as the class "Student" because she doesn't know her real destiny, yada yada. When she finds out she's secretly magical, I change her class through eventing. That way immersion isn't lost when the player accesses the main menu during the beginning and sees her class. I get an error when playtesting when the class switch is reached - attached. The part it is referring to is: #--------------------------------------------------------------------------
Archived First Post
I get an error when playtesting when the class switch is reached - attached.
The part it is referring to is:
I thought maybe it was another script interference but then I added a class change event into one of the MOG demos (such as this one https://atelierrgss.wordpress.com/download-page-2/), and I get the same error.#--------------------------------------------------------------------------
# ● 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
Anyone know how I'd be able to fix this?
Script:
#==============================================================================
# By Moghunter
# https://atelierrgss.wordpress.com/
#==============================================================================
# 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:AMAGE_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(["Evaded","Evaded"])
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([@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 re_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("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 / 2 ; @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","Evaded","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[4].dup if @value == "Evaded"
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
Downloads / Referenced Files
Log in, then follow the RPG Maker Developers Group to see these download links.
Log in to downloadReferenced Images / Attachments
Creator Claims / Removal
If you are the original creator and want this listing reassigned, edited, or removed, join BMMPlay and contact the moderators with proof that matches the original RPG Maker Web profile, linked GitHub, itch.io page, or another public creator identity.
Replies (0)
No replies yet.
Topic Summary
Loading summary...
