Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # • Opacity Menu
- #==============================================================================
- # Autor: Dax
- # Versão: 1.0
- # Site: www.dax-soft.weebly.com
- # Requerimento: N/A
- #==============================================================================
- # • Descrição:
- #------------------------------------------------------------------------------
- # Um menu que não requer imagens e que tem um efeito opaco.
- #==============================================================================
- #==============================================================================
- # • Módulo de configuração.
- #==============================================================================
- module ColiseuSM
- extend self
- #----------------------------------------------------------------------------
- # • Configurações:
- #----------------------------------------------------------------------------
- def [](setting_key)
- case setting_key
- # Velocidade do slide
- when :slide then 8 # Deixe em números pares;
- # Configuração das cores
- when :color then [
- "db4242", # Cor primária ativa do status do personagem.
- "dad7d7", # Cor primária desativa do status do personagem.
- "f69a9a", # Cor secundária ativa do status do personagem.
- "f3f3f3", # Cor secundária desativa do status do personagem.
- "000000", # Cor da barra que ficará o hp e o mp.
- "737373", # Cor do círculo das opções.
- ]
- # Configuração das cores das barras.
- when :bar_color then [
- "eeba7c", # HP,
- "7cacee", # MP
- ]
- # Define logo abaixo os ícones das opções e a descrição das opções;
- when :item then [
- [192, "Abre o inventário de itens."],
- [232, "Opção para ver as habilidades dos heróis."],
- [270, "Opção para ver os equipamentos dos heróis."],
- [233, "Opção para ver a condição dos heróis."],
- [230, "Opção para salvar o progresso do jogo."],
- [121, "Opção para sair do jogo."]
- ]
- # Define logo abaixo a configuração da fonte.
- when :font then {
- name: "Arial",
- size: 20,
- bold: false,
- italic: false,
- shadow: true,
- outline: false,
- color: Color.new(255, 255, 255),
- out_color: Color.new(0, 0, 0),
- }
- end
- end
- end
- #==============================================================================
- # • Complementos retirados do Dax Core.
- #==============================================================================
- # Integer
- class Integer
- #----------------------------------------------------------------------------
- # * Transformar o valor em porcentagem : Útil para fazer barras como por exemplo
- # barras de HP.
- # a : Valor atual.
- # b : Valor máximo.
- #----------------------------------------------------------------------------
- def to_p(a, b)
- self * a / b
- end
- end
- # Cores em hexadécimal
- module ColorBasic
- def self.hex(value)
- Color.new(*value.scan(/../).map { |color| color.to_i(16)})
- end
- end
- # Opacidade na cor.
- class Color
- def opacity(alpha=96)
- self.set(self.red, self.green, self.blue, alpha)
- end
- end
- # Opacity
- module Opacity
- extend self
- @key ||= {}
- #----------------------------------------------------------------------------
- # • Efeito de opacidade + e -.
- #----------------------------------------------------------------------------
- def sprite_opacity(sprite, speed, max, min, hash=nil)
- hash = hash.nil? ? sprite.__id__ : hash
- unless @key[hash]
- sprite.opacity += speed unless sprite.opacity >= max
- @key[hash] = sprite.opacity >= max
- else
- sprite.opacity -= speed unless sprite.opacity <= min
- @key[hash] = false if sprite.opacity <= min
- end
- end
- end
- # Add-ons Sprite
- class Sprite
- #----------------------------------------------------------------------------
- # • Slide pela direita.
- # * speed : Velocidade | point : Ponto da coordenada X que irá chegar.
- #----------------------------------------------------------------------------
- def slide_right(speed, point)
- self.x += speed unless self.x >= point
- end
- end
- # add-on Bitmap.
- class Bitmap
- #----------------------------------------------------------------------------
- # • draw_icon(icon_index, x, y, enabled)
- # icon_index : ID do ícone.
- # x : Coordenadas X.
- # y : Coordenadas Y.
- # enabled : Habilitar flag, translucido quando false
- #----------------------------------------------------------------------------
- #----------------------------------------------------------------------------
- def draw_icon(icon_index, x, y, enabled = true)
- icon_index = icon_index.nil? ? 0 : icon_index
- bitmap = Cache.system("Iconset")
- rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
- self.blt(x, y, bitmap, rect, enabled ? 255 : 128)
- end
- #--------------------------------------------------------------------------
- # • Desenho do gráfico de rosto
- # face_name : nome do gráfico de face
- # face_index : índice do gráfico de face
- # x : coordenada X
- # y : coordenada Y
- # enabled : habilitar flag, translucido quando false
- #--------------------------------------------------------------------------
- def draw_face(face_name, face_index, x, y, enabled = true)
- bitmap = Cache.face(face_name)
- rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
- self.blt(x, y, bitmap, rect, enabled ? 255 : 128)
- end
- #--------------------------------------------------------------------------
- # • Desenho do gráfico de face do herói
- # actor : herói
- # x : coordenada X
- # y : coordenada Y
- # enabled : habilitar flag, translucido quando false
- #--------------------------------------------------------------------------
- def draw_actor_face(actor, x, y, enabled = true)
- draw_face(actor.face_name, actor.face_index, x, y, enabled)
- end
- #----------------------------------------------------------------------------
- # • Para o menu..
- #----------------------------------------------------------------------------
- def fill_status_menu(id, active=false)
- b = []
- actor = $game_party.members[id]
- (0...128).each { |i|
- self.gradient_fill_rect(self.rect, ColorBasic.hex(ColiseuSM[:color][active ? 0 : 1]).opacity(i),
- ColorBasic.hex(ColiseuSM[:color][active ? 2 : 3]).opacity(i-255), 1)
- }
- ["name", "size", "bold", "italic", "shadow", "outline", "color"].each { |i|
- eval("self.font.#{i} = ColiseuSM[:font][:#{i}]")}
- self.draw_text(0, 10, self.width, 20, actor.name, 1)
- self.draw_text(0, 30, self.width, 20, actor.class.name, 1)
- self.draw_actor_face(actor, (self.width - 96)/2, 60)
- [170, 200].each_with_index { |y,i|
- self.fill_rect((self.width-96)/2, y, 96, 20, ColorBasic.hex(ColiseuSM[:color][4]).opacity(186))
- b[i] = Bitmap.new(96, 20)
- b[i].fill_rect(1, 1, b[i].width-2, b[i].height-2, ColorBasic.hex(ColiseuSM[:bar_color][i]))
- eval("self.blt((self.width-96)/2, y, b[i], Rect.new(0,0,
- b[i].width.to_p(actor.#{["hp", "mp"][i]}, actor.m#{["hp", "mp"][i]}), b[i].height))
- self.draw_text((self.width-96)/2, y+1, 96, 20,
- actor.#{["hp", "mp"][i]}.to_s + '/' + actor.m#{["hp", "mp"][i]}.to_s, 1)")
- }
- end
- #----------------------------------------------------------------------------
- # • Desenhar um círuclo preenchido.
- #----------------------------------------------------------------------------
- def fill_circle(x, y, r, c)
- rr = r*r
- for i in 0...r
- adj = Math.sqrt(rr - (i*i)).ceil
- xd = x - adj
- wd = 2 * adj
- self.fill_rect(xd, y-i, wd, 1, c)
- self.fill_rect(xd, y+i, wd, 1, c)
- end
- end
- end
- #==============================================================================
- # • Descrição das opções do menu.
- #==============================================================================
- class Sprite_Desc_Option_Menu < Sprite
- attr_accessor :text
- def initialize text
- super(nil)
- self.bitmap = Bitmap.new(544, 20)
- self.y = Graphics.height - 21
- ["name", "size", "bold", "italic", "shadow", "outline", "color"].each { |i|
- eval("self.bitmap.font.#{i} = ColiseuSM[:font][:#{i}]")}
- self.bitmap.draw_text(self.bitmap.rect, @text, 1)
- self.z = 500
- end
- #----------------------------------------------------------------------------
- # • Renovação dos objetos.
- #----------------------------------------------------------------------------
- def dispose
- self.bitmap.dispose
- super
- end
- #----------------------------------------------------------------------------
- # • Atualização dos objetos.
- #----------------------------------------------------------------------------
- def update
- self.bitmap.clear
- super
- Opacity.sprite_opacity(self, 2, 255, 128)
- ["name", "size", "bold", "italic", "shadow", "outline", "color"].each { |i|
- eval("self.bitmap.font.#{i} = ColiseuSM[:font][:#{i}]")}
- self.bitmap.draw_text(self.bitmap.rect, @text, 1)
- end
- end
- #==============================================================================
- # • Status dos do personagens do menu....
- #==============================================================================
- class Sprite_Status_Menu < Sprite
- #----------------------------------------------------------------------------
- # • Variáveis...
- #----------------------------------------------------------------------------
- attr_accessor :active
- #----------------------------------------------------------------------------
- # • Inicialização dos objetos.
- #----------------------------------------------------------------------------
- def initialize(actor_id)
- super(nil)
- self.bitmap = Bitmap.new(112, Graphics.height)
- @old_active = @active = false
- self.bitmap.fill_status_menu(actor_id, @active)
- @id = actor_id
- end
- #----------------------------------------------------------------------------
- # • Renovação dos objetos.
- #----------------------------------------------------------------------------
- def dispose
- self.bitmap.dispose
- super
- end
- #----------------------------------------------------------------------------
- # • Atualização dos objetos.
- #----------------------------------------------------------------------------
- def update
- super
- self.slide_right(ColiseuSM[:slide], @id == 0 ? 45 : (112 * @id) + 45)
- unless @old_active == @active
- self.bitmap.clear
- self.bitmap.fill_status_menu(@id, @active)
- @old_active = @active
- end
- end
- end
- #==============================================================================
- # • Sprite_Circle_Icon_Menu
- #==============================================================================
- class Sprite_Circle_Icon_Menu < Sprite
- #----------------------------------------------------------------------------
- # • Variáveis...
- #----------------------------------------------------------------------------
- attr_accessor :active
- #----------------------------------------------------------------------------
- # • Inicialização dos objetos.
- #----------------------------------------------------------------------------
- def initialize(x, y, icon_id)
- super(nil)
- self.x, self.y, self.z = x - 32, y - 32, 250
- @y = self.y
- @active = false
- self.bitmap = Bitmap.new(128, 128)
- self.bitmap.fill_circle(32, 32, 32, ColorBasic.hex(ColiseuSM[:color][5]).opacity(224))
- self.bitmap.draw_icon(icon_id, 20, 20)
- end
- #----------------------------------------------------------------------------
- # • Renovação dos objetos.
- #----------------------------------------------------------------------------
- def dispose
- self.bitmap.dispose
- super
- end
- #----------------------------------------------------------------------------
- # • Atualização dos objetos.
- #----------------------------------------------------------------------------
- def update
- super
- unless @active
- self.opacity = 255
- self.y = @y
- else
- Opacity.sprite_opacity(self, 3, 255, 128)
- self.y = @y - 16
- end
- end
- end
- #==============================================================================
- # • Scene Menu
- #==============================================================================
- Object.send(:remove_const, :Scene_Menu)
- class Scene_Menu < Scene_Base
- #----------------------------------------------------------------------------
- # • Inicialização dos objetos.
- #----------------------------------------------------------------------------
- def start
- super
- @s = []
- @i = []
- @index = 0
- @sindex = 0
- @background_sprite = Sprite.new
- @background_sprite.bitmap = SceneManager.background_bitmap
- @background_sprite.color.set(16, 16, 16, 128)
- $game_party.members.size.times { |i|
- @s[i] = Sprite_Status_Menu.new(i) unless i > 3
- }
- ColiseuSM[:item].size.times { |i|
- @i[i] = Sprite_Circle_Icon_Menu.new(96 + (70 * i), Graphics.height - 64,
- ColiseuSM[:item][i][0])
- }
- @text = Sprite_Desc_Option_Menu.new(ColiseuSM[:item][@index][1])
- @status = false
- end
- #----------------------------------------------------------------------------
- # • Renovação dos objetos.
- #----------------------------------------------------------------------------
- def terminate
- super
- @s.each(&:dispose)
- @i.each(&:dispose)
- @text.dispose
- end
- #----------------------------------------------------------------------------
- # • Atualização dos objetos.
- #----------------------------------------------------------------------------
- def update
- super
- return_scene if Input.trigger?(:B) and !@status
- @s.each(&:update)
- @i.each(&:update)
- @text.update
- @text.text = ColiseuSM[:item][@index][1]
- Sound.play_cursor if Input.trigger?(:RIGHT) or Input.trigger?(:LEFT)
- unless @status
- @s.each{|i|i.active=false}
- @index = @index >= 5 ? 0 : @index.next if Input.trigger?(:RIGHT)
- @index = @index <= 0 ? 5 : @index - 1 if Input.trigger?(:LEFT)
- @i[@index].active = true
- @i.size.times { |o|
- next if @index == o
- @i[o].active = false
- }
- case @index
- when 0 then SceneManager.call(Scene_Item) if Input.trigger?(:C)
- when 1..3 then @status = Input.trigger?(:C)
- when 4 then SceneManager.call(Scene_Save) if Input.trigger?(:C)
- when 5 then SceneManager.call(Scene_End) if Input.trigger?(:C)
- end
- else
- @status = false if Input.trigger?(:B)
- @sindex = @sindex >= @s.size-1 ? 0 : @sindex.next if Input.trigger?(:RIGHT)
- @sindex = @sindex <= 0 ? @s.size-1 : @sindex - 1 if Input.trigger?(:LEFT)
- @s[@sindex].active = true
- @s.size.times { |o|
- next if @sindex == o
- @s[o].active = false
- }
- $game_party.menu_actor = $game_party.members[@sindex]
- SceneManager.call(Scene_Equip) if @index == 1 and Input.trigger?(:C)
- SceneManager.call(Scene_Skill) if @index == 2 and Input.trigger?(:C)
- SceneManager.call(Scene_Status) if @index == 3 and Input.trigger?(:C)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment