(Créditos no Script)
Bestiário -
Ele é simples, ele guarda as informações dos inimigos que você já derrotou,
*Permite que você possa inclusive programar certas Músicas para tocarem ao acessar certo inimigo, com esta opção você pode personalizar os chefes no bestiário.
*Ele também permite que você edite os inimigos que não aparecerão no Bestiário.
*Permite que você possa inclusive programar certas Músicas para tocarem ao acessar certo inimigo, com esta opção você pode personalizar os chefes no bestiário.
*Ele também permite que você edite os inimigos que não aparecerão no Bestiário.
Screens -
Clique nas imagens para melhor visualização.
Para chamar o Script: $scene = Scene_Bestiary.new
Abaixo segue o Script:
#==============================================================================
# ===== ****** ReinoRPG ****** =====
# ================= Genesis =================
# ---- www.reinorpg.com.br -----
# ** Bestiário** [Versão traduzida para o Português por Genesis/Bahaman
# Para chamar o Bestiário: $scene = Scene_Bestiary.new
#------------------------------------------------------------------------------
# Créditos Originais:
# © Dargor, 2008
# 24/05/08
# Versão 1.3
#------------------------------------------------------------------------------
# História das Versões
# - 1.0 (21/05/08), Primeira Liberação.
# - 1.1 (21/05/08), Primeiros Bugs corrigidos.
# - 1.2 (24/05/08), Bestiário reiniciado e Bugs corrigidos.
# - 1.3 (03/06/08), Tradução para o Português feita por Bahaman.
# - 1.4 (04/06/08), Tradução para o Português Completa !
#------------------------------------------------------------------------------
# Instruções
# 1) Cole o Script acima do Main
# 2) Edit as Variáveis de Vocabulário.
# 2) Edite as Constantes no Modulo do Bestiário
#==============================================================================
#==============================================================================
# ** Configuração do Bestiário.
#==============================================================================
module Bestiary
# Inimigos que não aparecerão no Bestiário
Excluded_Enemies = [31]
# Atributos "Reais" Mostrados no Bestiário
Elements = [9,10,11,12,13,14,15,16]
# Ícone dos Elementos Reais
Element_Icons = { 9 => 104,
10 => 105,
11 => 106,
12 => 107,
13 => 108,
14 => 109,
15 => 110,
16 => 111,
}
# Tocar uma Música no Bestiário
Play_BGM = true
# Lista de Músicas Baseadas no Id de cada inimigo.
BGM = { 19 => 'Battle7',
20 => 'Battle7',
21 => 'Battle7',
22 => 'Battle7',
23 => 'Battle7',
24 => 'Battle7',
25 => 'Battle8',
26 => 'Battle8',
27 => 'Battle8',
28 => 'Battle8',
29 => 'Battle8',
30 => 'Battle8'
}
# Música Padrão
BGM.default = 'Battle1'
end
# Vocabulário
Vocab::Hit = 'Hit'
Vocab::Eva = 'Evasão'
Vocab::Exp = 'EXP'
Vocab::UnknownEnemy = '??????'
Vocab::UnknownDrop = '??????'
#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
# Essa classe cuida do Sistema relacionado a Data. Também de veículos, Músicas e etc.
# A Instância dessa classe se chama: $game_system.
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# * Variáveis de instância Pública
#--------------------------------------------------------------------------
attr_accessor :new_enemy
attr_accessor :enemy_encountered
attr_accessor :enemy_defeated
attr_accessor :enemy_drops
#--------------------------------------------------------------------------
# * Lista de Alias
#--------------------------------------------------------------------------
alias dargor_vx_bestiary_system_initialize initialize
#--------------------------------------------------------------------------
# * Inicialização de objetos
#--------------------------------------------------------------------------
def initialize
@new_enemy = []
@enemy_encountered = []
@enemy_defeated = []
@enemy_drops = []
for i in 1...$data_enemies.size
@new_enemy[i] = true
@enemy_encountered[i] = 0
@enemy_defeated[i] = 0
@enemy_drops[i] = [false, false]
end
dargor_vx_bestiary_system_initialize
end
end
#==============================================================================
# ** Game_Troop
#------------------------------------------------------------------------------
# Essa classe é compreendida pelo Grupo de monstros e também a Data relacionada a Batalha
# E Também Administra os Eventos da Batalha. A Instância dessa classe é referenciada por: $game_troop.
#==============================================================================
class Game_Troop < Game_Unit
#--------------------------------------------------------------------------
# * Lista de Alias
#--------------------------------------------------------------------------
alias dargor_vx_bestiary_troop_setup setup
alias dargor_vx_bestiary_troop_make_drop_items make_drop_items
#--------------------------------------------------------------------------
# * Menu
# Id do Grupo : troop ID
#--------------------------------------------------------------------------
def setup(troop_id)
dargor_vx_bestiary_troop_setup(troop_id)
for member in troop.members
next if $data_enemies[member.enemy_id] == nil
enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
$game_system.enemy_encountered[member.enemy_id] += 1
end
end
#--------------------------------------------------------------------------
# * Criar a Array dos Itens Deixados pelo inimigo.
#--------------------------------------------------------------------------
def make_drop_items
drop_items = []
for enemy in dead_members
for di in [enemy.drop_item1, enemy.drop_item2]
next if di.kind == 0
next if rand(di.denominator) != 0
index = [enemy.drop_item1, enemy.drop_item2].index(di)
$game_system.enemy_drops[enemy.enemy_id][index] = true
if di.kind == 1
drop_items.push($data_items[di.item_id])
elsif di.kind == 2
drop_items.push($data_weapons[di.weapon_id])
elsif di.kind == 3
drop_items.push($data_armors[di.armor_id])
end
end
end
return drop_items
end
end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
# Essa Classe cuida dos Personagens inimigos. É usada pela Classe de Grupo de Inimigos
# ($game_troop).
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# * Lista de Alias
#--------------------------------------------------------------------------
alias dargor_vx_bestiary_enemy_perform_collapse perform_collapse
#--------------------------------------------------------------------------
# * Colapsos
#--------------------------------------------------------------------------
def perform_collapse
dargor_vx_bestiary_enemy_perform_collapse
if $game_temp.in_battle and dead?
$game_system.enemy_defeated[@enemy_id] += 1
end
end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# Essa é Superclasse de todas as janelas do jogo.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# * Configurar a Cor do Texto do HP
# Inimigo: enemy
#--------------------------------------------------------------------------
def hp_color(actor)
return normal_color if actor.is_a?(RPG::Enemy)
return knockout_color if actor.hp == 0
return crisis_color if actor.hp < actor.maxhp / 4
return normal_color
end
#--------------------------------------------------------------------------
# * Ler o Máximo de HP do inimigo: MAXHP
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_maxhp(enemy, x, y, width = 120)
draw_enemy_hp_gauge(enemy, x, y, width)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, Vocab::hp)
self.contents.font.color = hp_color(enemy)
last_font_size = self.contents.font.size
xr = x + width
self.contents.font.color = normal_color
self.contents.draw_text(xr - 80, y, 80, WLH, enemy.maxhp, 2)
end
#--------------------------------------------------------------------------
# * Ler a barra de HP do inimigo: HP gauge
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_hp_gauge(enemy, x, y, width = 120)
gw = width
gc1 = hp_gauge_color1
gc2 = hp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
#--------------------------------------------------------------------------
# * Ler o MP do inimigo
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_maxmp(enemy, x, y, width = 120)
draw_enemy_mp_gauge(enemy, x, y, width)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, Vocab::mp)
self.contents.font.color = hp_color(enemy)
last_font_size = self.contents.font.size
xr = x + width
self.contents.font.color = normal_color
self.contents.draw_text(xr - 80, y, 80, WLH, enemy.maxmp, 2)
end
#--------------------------------------------------------------------------
# * Ler a Barra de HP do inimigo.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_mp_gauge(enemy, x, y, width = 120)
gw = width
gc1 = mp_gauge_color1
gc2 = mp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
#--------------------------------------------------------------------------
# * Ler os Parâmetros inimigos
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# type : Type of parameters (0-7)
#--------------------------------------------------------------------------
def draw_enemy_parameter(enemy, x, y, type)
case type
when 0
parameter_name = Vocab::atk
parameter_value = enemy.atk
when 1
parameter_name = Vocab::def
parameter_value = enemy.def
when 2
parameter_name = Vocab::spi
parameter_value = enemy.spi
when 3
parameter_name = Vocab::agi
parameter_value = enemy.agi
when 4
parameter_name = Vocab::Hit
parameter_value = enemy.hit
when 5
parameter_name = Vocab::Eva
parameter_value = enemy.eva
when 6
parameter_name = Vocab::Exp
parameter_value = enemy.exp
when 7
parameter_name = Vocab::gold
parameter_value = enemy.gold
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, WLH, parameter_name)
self.contents.font.color = normal_color
parameter_value = "#{parameter_value}%" if [4,5].include?(type)
self.contents.draw_text(x + 100, y, 56, WLH, parameter_value, 2)
end
#--------------------------------------------------------------------------
# * Ler os Itens deixados pelo inimigo.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_drop(enemy,x,y)
self.contents.font.color = system_color
self.contents.draw_text(x,y,220,WLH,'Itens Deixados:')
drops = []
drops_index = []
drops << enemy.drop_item1 unless enemy.drop_item1.kind == 0
drops << enemy.drop_item2 unless enemy.drop_item2.kind == 0
drops_index << 0 unless enemy.drop_item1.kind == 0
drops_index << 1 unless enemy.drop_item2.kind == 0
for i in 0...drops.size
drop = drops[i]
index = drops_index[i]
case drop.kind
when 1
item = $data_items[drop.item_id]
when 2
item = $data_weapons[drop.weapon_id]
when 3
item = $data_armors[drop.armor_id]
end
if $game_system.enemy_drops[enemy.id][index]
draw_item_name(item,x,y + (i+1) * WLH)
probability = 100 / drop.denominator
self.contents.draw_text(x,y + (i+1) * WLH,220,WLH, "#{probability}%",2)
else
self.contents.font.color = normal_color
self.contents.draw_text(x+26,y + (i+1) * WLH,220,WLH,Vocab::UnknownDrop)
end
end
end
#--------------------------------------------------------------------------
# * Ler oo número de vezes que o inimigo foi encontrado.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_encountered(enemy,x,y)
self.contents.font.color = system_color
self.contents.draw_text(x,y,120,WLH,'Encontrados:')
times = $game_system.enemy_encountered[enemy.id]
self.contents.font.color = normal_color
self.contents.draw_text(x + 120,y,36,WLH,times,2)
end
#--------------------------------------------------------------------------
# * Ler o Número de Vezes que o inimigo foi derrotado.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_defeated(enemy,x,y)
self.contents.font.color = system_color
self.contents.draw_text(x,y,120,WLH,'Derrotado:')
times = $game_system.enemy_defeated[enemy.id]
self.contents.font.color = normal_color
self.contents.draw_text(x + 120,y,36,WLH,times,2)
end
#--------------------------------------------------------------------------
# * Lê as Fraquezas do Inimigo.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_weakness(enemy,x,y)
enemy = Game_Enemy.new(0, enemy.id)
self.contents.font.color = system_color
self.contents.draw_text(x,y,120,WLH,'Fraquezas')
weakness = []
for element_id in Bestiary::Elements
weakness << element_id if enemy.element_rate(element_id) > 100
end
for i in 0...weakness.size
element_id = weakness[i]
x = 144 * (i % 2)
y2 = WLH * (i / 2)
icon_index = Bestiary::Element_Icons[element_id]
draw_icon(icon_index,x,y2 + (y + WLH))
element = $data_system.elements[element_id]
self.contents.font.color = normal_color
self.contents.draw_text(x+26,y2 + (y + WLH),120,WLH,element)
end
end
end
#==============================================================================
# ** Window_EnemyStatus
#------------------------------------------------------------------------------
# Essa Janela mostra todos os parâmetros de Status do Inimigo.
#==============================================================================
class Window_EnemyStatus < Window_Base
#--------------------------------------------------------------------------
# * Inicialização de Objeto.
#--------------------------------------------------------------------------
def initialize
super(0,0,544,416)
end
#--------------------------------------------------------------------------
# * Menu
# Inimigo : enemy
# Id : id
#--------------------------------------------------------------------------
def setup(enemy, id)
@enemy = enemy
@id = id
$game_system.new_enemy[enemy.id] = false
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
bitmap = Cache.battler(@enemy.battler_name, @enemy.battler_hue)
self.contents.blt(0,32,bitmap,bitmap.rect)
self.contents.font.color = normal_color
self.contents.draw_text(0,0,272,WLH,"#{@id}: #{@enemy.name}")
draw_enemy_maxhp(@enemy,272,WLH * 1,156)
draw_enemy_maxmp(@enemy,272,WLH * 2,156)
for i in 0..7
draw_enemy_parameter(@enemy, 304, WLH * 3 + (WLH * i), i)
end
draw_enemy_drop(@enemy,272,WLH * 11)
draw_enemy_encountered(@enemy,272,WLH * 14)
draw_enemy_defeated(@enemy,272,WLH * 15)
draw_enemy_weakness(@enemy,0,WLH * 11)
end
end
#==============================================================================
# ** Window_EnemyList
#------------------------------------------------------------------------------
# Essa Janela mostra todos os parâmetros da Janela de bestiário
#==============================================================================
class Window_EnemyList < Window_Selectable
#--------------------------------------------------------------------------
# * Inicialização do Objeto.
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def initialize(x,y)
super(x,y,544,360)
self.index = 0
@column_max = 2
refresh
end
#--------------------------------------------------------------------------
# * Inimigo
#--------------------------------------------------------------------------
def enemy
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Inimigos
#--------------------------------------------------------------------------
def enemies
return @data
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = []
for item in $data_enemies
next if Bestiary::Excluded_Enemies.include?(item.id)
@data << item
end
@data.compact!
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# * Ler o Item
# index : index
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
item = @data[index]
if item != nil
rect.width -= 4
if $game_system.enemy_encountered[item.id] > 0
if $game_system.new_enemy[item.id]
self.contents.font.color = power_up_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(rect, "#{index+1}:#{item.name}")
else
self.contents.font.color = normal_color
self.contents.draw_text(rect, "#{index+1}:#{Vocab::UnknownEnemy}")
end
end
end
end
#==============================================================================
# ** Scene_Bestiary
#------------------------------------------------------------------------------
# Essa Classe lê os processos da Janela de Bestiário
#==============================================================================
class Scene_Bestiary < Scene_Base
#--------------------------------------------------------------------------
# * Inicio do Processo
#--------------------------------------------------------------------------
def start
super
create_menu_background
@last_bgm = RPG::BGM.last
@help_window = Window_Help.new
@list_window = Window_EnemyList.new(0,56)
@status_window = Window_EnemyStatus.new
@status_window.visible = false
@status_window.back_opacity = 255
encountered = 0
for enemy in @list_window.enemies
if $game_system.enemy_encountered[enemy.id] > 0
encountered += 1
end
end
completion1 = "#{encountered}/#{@list_window.enemies.size}"
completion2 = (encountered * 100) / @list_window.enemies.size
@help_window.set_text("Completado: #{completion1}(#{completion2}%)")
end
#--------------------------------------------------------------------------
# * Término do Processo
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@help_window.dispose
@list_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# *atualização do Tempo do Processo
#--------------------------------------------------------------------------
def update
super
if @status_window.visible
update_status_selection
return
end
if @list_window.active
@list_window.update
update_list_selection
return
end
end
#--------------------------------------------------------------------------
# * Atalização do Processo de Status
#--------------------------------------------------------------------------
def update_status_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@status_window.visible = false
@last_bgm.play
return
end
if Input.trigger?(Input::L) or Input.repeat?(Input::L)
Sound.play_cursor
loop do
@list_window.index = (@list_window.index + 1)
@list_window.index %= @list_window.enemies.size
break if $game_system.enemy_encountered[@list_window.index+1] > 0
end
process_status_window(@list_window.enemy, @list_window.index+1)
end
if Input.trigger?(Input::R) or Input.repeat?(Input::R)
Sound.play_cursor
loop do
@list_window.index = (@list_window.index - 1) % @list_window.enemies.size
break if $game_system.enemy_encountered[@list_window.index+1] > 0
end
process_status_window(@list_window.enemy, @list_window.index+1)
end
end
#--------------------------------------------------------------------------
# * Atualização da Lista de Processo
#--------------------------------------------------------------------------
def update_list_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
unless $game_system.enemy_encountered[@list_window.enemy.id] > 0
Sound.play_buzzer
return
end
process_status_window(@list_window.enemy, @list_window.index+1)
end
end
#--------------------------------------------------------------------------
# *Processar a Janela.
#--------------------------------------------------------------------------
def process_status_window(enemy, index)
if Bestiary::Play_BGM
bgm_name = Bestiary::BGM[enemy.id]
if bgm_name.nil?
bgm = RPG::BGM.new(Bestiary::BGM.default)
bgm.play
else
bgm = RPG::BGM.new(bgm_name)
bgm.play
end
end
@status_window.setup(enemy, index)
@status_window.visible = true
@list_window.draw_item(index-1)
end
end
# ===== ****** ReinoRPG ****** =====
# ================= Genesis =================
# ---- www.reinorpg.com.br -----
# ** Bestiário** [Versão traduzida para o Português por Genesis/Bahaman
# Para chamar o Bestiário: $scene = Scene_Bestiary.new
#------------------------------------------------------------------------------
# Créditos Originais:
# © Dargor, 2008
# 24/05/08
# Versão 1.3
#------------------------------------------------------------------------------
# História das Versões
# - 1.0 (21/05/08), Primeira Liberação.
# - 1.1 (21/05/08), Primeiros Bugs corrigidos.
# - 1.2 (24/05/08), Bestiário reiniciado e Bugs corrigidos.
# - 1.3 (03/06/08), Tradução para o Português feita por Bahaman.
# - 1.4 (04/06/08), Tradução para o Português Completa !
#------------------------------------------------------------------------------
# Instruções
# 1) Cole o Script acima do Main
# 2) Edit as Variáveis de Vocabulário.
# 2) Edite as Constantes no Modulo do Bestiário
#==============================================================================
#==============================================================================
# ** Configuração do Bestiário.
#==============================================================================
module Bestiary
# Inimigos que não aparecerão no Bestiário
Excluded_Enemies = [31]
# Atributos "Reais" Mostrados no Bestiário
Elements = [9,10,11,12,13,14,15,16]
# Ícone dos Elementos Reais
Element_Icons = { 9 => 104,
10 => 105,
11 => 106,
12 => 107,
13 => 108,
14 => 109,
15 => 110,
16 => 111,
}
# Tocar uma Música no Bestiário
Play_BGM = true
# Lista de Músicas Baseadas no Id de cada inimigo.
BGM = { 19 => 'Battle7',
20 => 'Battle7',
21 => 'Battle7',
22 => 'Battle7',
23 => 'Battle7',
24 => 'Battle7',
25 => 'Battle8',
26 => 'Battle8',
27 => 'Battle8',
28 => 'Battle8',
29 => 'Battle8',
30 => 'Battle8'
}
# Música Padrão
BGM.default = 'Battle1'
end
# Vocabulário
Vocab::Hit = 'Hit'
Vocab::Eva = 'Evasão'
Vocab::Exp = 'EXP'
Vocab::UnknownEnemy = '??????'
Vocab::UnknownDrop = '??????'
#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
# Essa classe cuida do Sistema relacionado a Data. Também de veículos, Músicas e etc.
# A Instância dessa classe se chama: $game_system.
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# * Variáveis de instância Pública
#--------------------------------------------------------------------------
attr_accessor :new_enemy
attr_accessor :enemy_encountered
attr_accessor :enemy_defeated
attr_accessor :enemy_drops
#--------------------------------------------------------------------------
# * Lista de Alias
#--------------------------------------------------------------------------
alias dargor_vx_bestiary_system_initialize initialize
#--------------------------------------------------------------------------
# * Inicialização de objetos
#--------------------------------------------------------------------------
def initialize
@new_enemy = []
@enemy_encountered = []
@enemy_defeated = []
@enemy_drops = []
for i in 1...$data_enemies.size
@new_enemy[i] = true
@enemy_encountered[i] = 0
@enemy_defeated[i] = 0
@enemy_drops[i] = [false, false]
end
dargor_vx_bestiary_system_initialize
end
end
#==============================================================================
# ** Game_Troop
#------------------------------------------------------------------------------
# Essa classe é compreendida pelo Grupo de monstros e também a Data relacionada a Batalha
# E Também Administra os Eventos da Batalha. A Instância dessa classe é referenciada por: $game_troop.
#==============================================================================
class Game_Troop < Game_Unit
#--------------------------------------------------------------------------
# * Lista de Alias
#--------------------------------------------------------------------------
alias dargor_vx_bestiary_troop_setup setup
alias dargor_vx_bestiary_troop_make_drop_items make_drop_items
#--------------------------------------------------------------------------
# * Menu
# Id do Grupo : troop ID
#--------------------------------------------------------------------------
def setup(troop_id)
dargor_vx_bestiary_troop_setup(troop_id)
for member in troop.members
next if $data_enemies[member.enemy_id] == nil
enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
$game_system.enemy_encountered[member.enemy_id] += 1
end
end
#--------------------------------------------------------------------------
# * Criar a Array dos Itens Deixados pelo inimigo.
#--------------------------------------------------------------------------
def make_drop_items
drop_items = []
for enemy in dead_members
for di in [enemy.drop_item1, enemy.drop_item2]
next if di.kind == 0
next if rand(di.denominator) != 0
index = [enemy.drop_item1, enemy.drop_item2].index(di)
$game_system.enemy_drops[enemy.enemy_id][index] = true
if di.kind == 1
drop_items.push($data_items[di.item_id])
elsif di.kind == 2
drop_items.push($data_weapons[di.weapon_id])
elsif di.kind == 3
drop_items.push($data_armors[di.armor_id])
end
end
end
return drop_items
end
end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
# Essa Classe cuida dos Personagens inimigos. É usada pela Classe de Grupo de Inimigos
# ($game_troop).
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# * Lista de Alias
#--------------------------------------------------------------------------
alias dargor_vx_bestiary_enemy_perform_collapse perform_collapse
#--------------------------------------------------------------------------
# * Colapsos
#--------------------------------------------------------------------------
def perform_collapse
dargor_vx_bestiary_enemy_perform_collapse
if $game_temp.in_battle and dead?
$game_system.enemy_defeated[@enemy_id] += 1
end
end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# Essa é Superclasse de todas as janelas do jogo.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# * Configurar a Cor do Texto do HP
# Inimigo: enemy
#--------------------------------------------------------------------------
def hp_color(actor)
return normal_color if actor.is_a?(RPG::Enemy)
return knockout_color if actor.hp == 0
return crisis_color if actor.hp < actor.maxhp / 4
return normal_color
end
#--------------------------------------------------------------------------
# * Ler o Máximo de HP do inimigo: MAXHP
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_maxhp(enemy, x, y, width = 120)
draw_enemy_hp_gauge(enemy, x, y, width)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, Vocab::hp)
self.contents.font.color = hp_color(enemy)
last_font_size = self.contents.font.size
xr = x + width
self.contents.font.color = normal_color
self.contents.draw_text(xr - 80, y, 80, WLH, enemy.maxhp, 2)
end
#--------------------------------------------------------------------------
# * Ler a barra de HP do inimigo: HP gauge
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_hp_gauge(enemy, x, y, width = 120)
gw = width
gc1 = hp_gauge_color1
gc2 = hp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
#--------------------------------------------------------------------------
# * Ler o MP do inimigo
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_maxmp(enemy, x, y, width = 120)
draw_enemy_mp_gauge(enemy, x, y, width)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, Vocab::mp)
self.contents.font.color = hp_color(enemy)
last_font_size = self.contents.font.size
xr = x + width
self.contents.font.color = normal_color
self.contents.draw_text(xr - 80, y, 80, WLH, enemy.maxmp, 2)
end
#--------------------------------------------------------------------------
# * Ler a Barra de HP do inimigo.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# Largura : Width
#--------------------------------------------------------------------------
def draw_enemy_mp_gauge(enemy, x, y, width = 120)
gw = width
gc1 = mp_gauge_color1
gc2 = mp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
#--------------------------------------------------------------------------
# * Ler os Parâmetros inimigos
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
# type : Type of parameters (0-7)
#--------------------------------------------------------------------------
def draw_enemy_parameter(enemy, x, y, type)
case type
when 0
parameter_name = Vocab::atk
parameter_value = enemy.atk
when 1
parameter_name = Vocab::def
parameter_value = enemy.def
when 2
parameter_name = Vocab::spi
parameter_value = enemy.spi
when 3
parameter_name = Vocab::agi
parameter_value = enemy.agi
when 4
parameter_name = Vocab::Hit
parameter_value = enemy.hit
when 5
parameter_name = Vocab::Eva
parameter_value = enemy.eva
when 6
parameter_name = Vocab::Exp
parameter_value = enemy.exp
when 7
parameter_name = Vocab::gold
parameter_value = enemy.gold
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, WLH, parameter_name)
self.contents.font.color = normal_color
parameter_value = "#{parameter_value}%" if [4,5].include?(type)
self.contents.draw_text(x + 100, y, 56, WLH, parameter_value, 2)
end
#--------------------------------------------------------------------------
# * Ler os Itens deixados pelo inimigo.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_drop(enemy,x,y)
self.contents.font.color = system_color
self.contents.draw_text(x,y,220,WLH,'Itens Deixados:')
drops = []
drops_index = []
drops << enemy.drop_item1 unless enemy.drop_item1.kind == 0
drops << enemy.drop_item2 unless enemy.drop_item2.kind == 0
drops_index << 0 unless enemy.drop_item1.kind == 0
drops_index << 1 unless enemy.drop_item2.kind == 0
for i in 0...drops.size
drop = drops[i]
index = drops_index[i]
case drop.kind
when 1
item = $data_items[drop.item_id]
when 2
item = $data_weapons[drop.weapon_id]
when 3
item = $data_armors[drop.armor_id]
end
if $game_system.enemy_drops[enemy.id][index]
draw_item_name(item,x,y + (i+1) * WLH)
probability = 100 / drop.denominator
self.contents.draw_text(x,y + (i+1) * WLH,220,WLH, "#{probability}%",2)
else
self.contents.font.color = normal_color
self.contents.draw_text(x+26,y + (i+1) * WLH,220,WLH,Vocab::UnknownDrop)
end
end
end
#--------------------------------------------------------------------------
# * Ler oo número de vezes que o inimigo foi encontrado.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_encountered(enemy,x,y)
self.contents.font.color = system_color
self.contents.draw_text(x,y,120,WLH,'Encontrados:')
times = $game_system.enemy_encountered[enemy.id]
self.contents.font.color = normal_color
self.contents.draw_text(x + 120,y,36,WLH,times,2)
end
#--------------------------------------------------------------------------
# * Ler o Número de Vezes que o inimigo foi derrotado.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_defeated(enemy,x,y)
self.contents.font.color = system_color
self.contents.draw_text(x,y,120,WLH,'Derrotado:')
times = $game_system.enemy_defeated[enemy.id]
self.contents.font.color = normal_color
self.contents.draw_text(x + 120,y,36,WLH,times,2)
end
#--------------------------------------------------------------------------
# * Lê as Fraquezas do Inimigo.
# Inimigo : enemy
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def draw_enemy_weakness(enemy,x,y)
enemy = Game_Enemy.new(0, enemy.id)
self.contents.font.color = system_color
self.contents.draw_text(x,y,120,WLH,'Fraquezas')
weakness = []
for element_id in Bestiary::Elements
weakness << element_id if enemy.element_rate(element_id) > 100
end
for i in 0...weakness.size
element_id = weakness[i]
x = 144 * (i % 2)
y2 = WLH * (i / 2)
icon_index = Bestiary::Element_Icons[element_id]
draw_icon(icon_index,x,y2 + (y + WLH))
element = $data_system.elements[element_id]
self.contents.font.color = normal_color
self.contents.draw_text(x+26,y2 + (y + WLH),120,WLH,element)
end
end
end
#==============================================================================
# ** Window_EnemyStatus
#------------------------------------------------------------------------------
# Essa Janela mostra todos os parâmetros de Status do Inimigo.
#==============================================================================
class Window_EnemyStatus < Window_Base
#--------------------------------------------------------------------------
# * Inicialização de Objeto.
#--------------------------------------------------------------------------
def initialize
super(0,0,544,416)
end
#--------------------------------------------------------------------------
# * Menu
# Inimigo : enemy
# Id : id
#--------------------------------------------------------------------------
def setup(enemy, id)
@enemy = enemy
@id = id
$game_system.new_enemy[enemy.id] = false
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
bitmap = Cache.battler(@enemy.battler_name, @enemy.battler_hue)
self.contents.blt(0,32,bitmap,bitmap.rect)
self.contents.font.color = normal_color
self.contents.draw_text(0,0,272,WLH,"#{@id}: #{@enemy.name}")
draw_enemy_maxhp(@enemy,272,WLH * 1,156)
draw_enemy_maxmp(@enemy,272,WLH * 2,156)
for i in 0..7
draw_enemy_parameter(@enemy, 304, WLH * 3 + (WLH * i), i)
end
draw_enemy_drop(@enemy,272,WLH * 11)
draw_enemy_encountered(@enemy,272,WLH * 14)
draw_enemy_defeated(@enemy,272,WLH * 15)
draw_enemy_weakness(@enemy,0,WLH * 11)
end
end
#==============================================================================
# ** Window_EnemyList
#------------------------------------------------------------------------------
# Essa Janela mostra todos os parâmetros da Janela de bestiário
#==============================================================================
class Window_EnemyList < Window_Selectable
#--------------------------------------------------------------------------
# * Inicialização do Objeto.
# X : Referente a Coordenada X
# Y : Referente a Cordenada Y
#--------------------------------------------------------------------------
def initialize(x,y)
super(x,y,544,360)
self.index = 0
@column_max = 2
refresh
end
#--------------------------------------------------------------------------
# * Inimigo
#--------------------------------------------------------------------------
def enemy
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Inimigos
#--------------------------------------------------------------------------
def enemies
return @data
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = []
for item in $data_enemies
next if Bestiary::Excluded_Enemies.include?(item.id)
@data << item
end
@data.compact!
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# * Ler o Item
# index : index
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
item = @data[index]
if item != nil
rect.width -= 4
if $game_system.enemy_encountered[item.id] > 0
if $game_system.new_enemy[item.id]
self.contents.font.color = power_up_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(rect, "#{index+1}:#{item.name}")
else
self.contents.font.color = normal_color
self.contents.draw_text(rect, "#{index+1}:#{Vocab::UnknownEnemy}")
end
end
end
end
#==============================================================================
# ** Scene_Bestiary
#------------------------------------------------------------------------------
# Essa Classe lê os processos da Janela de Bestiário
#==============================================================================
class Scene_Bestiary < Scene_Base
#--------------------------------------------------------------------------
# * Inicio do Processo
#--------------------------------------------------------------------------
def start
super
create_menu_background
@last_bgm = RPG::BGM.last
@help_window = Window_Help.new
@list_window = Window_EnemyList.new(0,56)
@status_window = Window_EnemyStatus.new
@status_window.visible = false
@status_window.back_opacity = 255
encountered = 0
for enemy in @list_window.enemies
if $game_system.enemy_encountered[enemy.id] > 0
encountered += 1
end
end
completion1 = "#{encountered}/#{@list_window.enemies.size}"
completion2 = (encountered * 100) / @list_window.enemies.size
@help_window.set_text("Completado: #{completion1}(#{completion2}%)")
end
#--------------------------------------------------------------------------
# * Término do Processo
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@help_window.dispose
@list_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# *atualização do Tempo do Processo
#--------------------------------------------------------------------------
def update
super
if @status_window.visible
update_status_selection
return
end
if @list_window.active
@list_window.update
update_list_selection
return
end
end
#--------------------------------------------------------------------------
# * Atalização do Processo de Status
#--------------------------------------------------------------------------
def update_status_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@status_window.visible = false
@last_bgm.play
return
end
if Input.trigger?(Input::L) or Input.repeat?(Input::L)
Sound.play_cursor
loop do
@list_window.index = (@list_window.index + 1)
@list_window.index %= @list_window.enemies.size
break if $game_system.enemy_encountered[@list_window.index+1] > 0
end
process_status_window(@list_window.enemy, @list_window.index+1)
end
if Input.trigger?(Input::R) or Input.repeat?(Input::R)
Sound.play_cursor
loop do
@list_window.index = (@list_window.index - 1) % @list_window.enemies.size
break if $game_system.enemy_encountered[@list_window.index+1] > 0
end
process_status_window(@list_window.enemy, @list_window.index+1)
end
end
#--------------------------------------------------------------------------
# * Atualização da Lista de Processo
#--------------------------------------------------------------------------
def update_list_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
unless $game_system.enemy_encountered[@list_window.enemy.id] > 0
Sound.play_buzzer
return
end
process_status_window(@list_window.enemy, @list_window.index+1)
end
end
#--------------------------------------------------------------------------
# *Processar a Janela.
#--------------------------------------------------------------------------
def process_status_window(enemy, index)
if Bestiary::Play_BGM
bgm_name = Bestiary::BGM[enemy.id]
if bgm_name.nil?
bgm = RPG::BGM.new(Bestiary::BGM.default)
bgm.play
else
bgm = RPG::BGM.new(bgm_name)
bgm.play
end
end
@status_window.setup(enemy, index)
@status_window.visible = true
@list_window.draw_item(index-1)
end
end