Fórum RPG Maker Brasil  
Voltar   Fórum RPG Maker Brasil Ruby Game Scripting System Scripts
Responder
 
Opções do Tópico Exibição
  #1 (permalink)  
Antigo 26-04-2008, 02:50
Avatar de Falco
Doing a barrel roll!
Pontos: 20,978, Nível: 21 Pontos: 20,978, Nível: 21 Pontos: 20,978, Nível: 21
Atividade: 49% Atividade: 49% Atividade: 49%
 
Data de Entrada: Jan 2008
Posts: 1,444
Reputação: 70
Falco é bem famoso nesta comunidade
Enviar mensagem via MSN para Falco Enviar mensagem via Yahoo para Falco
Lightbulb [RMVX] Menu Oval de Batalha

Menu Oval de Batalha 1.01
por ziifee

Introdução

Este pequeno script muda a aparência da batalha do RPG Maker VX. Agora, o menu é oval, semelhante ao Ring Menu. Janelas reposicionadas e faces na batalha. Muito legal!

Como usar

Salve a imagem abaixo na pasta Graphics\System de seu jogo. O nome da imagem deve ser Spin40.

Spin40.png

Abra o Editor de Scripts, crie um novo script na seção de Scripts Adicionais e cole o código abaixo.

Script

Código:
#==============================================================================
# Menu Oval de Batalha
# Criado por ziifee
#==============================================================================

module Zii
  # Número identificador do ícone (Vertical x 16 + Horizontal - 1)
  FIGHT = 132                               # Lutar
  ESCAPE = 143                              # Fugir
  ATTACK = 1                                # Atacar
  GUARD = 52                                # Defender
  SKILL = 128                               # Habilidades
  ITEM = 144                                # Itens
  
  # Direção da rotação (Esquerda ou Direita)
  TURN = "Direita"
  
  # Usar faces no menu? ("Faces" para usar e "" para nada)
  STATUS_FACE = "Faces"
  
  # Mostrar nome dos heróis no menu? ("Nomes" para usar e "" para nada)
  STATUS_LINE = "Nomes"
  
  # Tamanho das linhas (Padrão: 20)
  LINE_SIZE = 14
  
  #--------------------------------------------------------------------------
  # Configuração de direção da rotação
  #--------------------------------------------------------------------------
  def self.turn_normal?
    return false if TURN == "Esquerda"
    return true  if TURN == "Direita"
    return true
  end
  #--------------------------------------------------------------------------
  # Configuração de exibição
  #--------------------------------------------------------------------------
  def self.battle_face?
    return true if STATUS_FACE == "Faces"
    return false
  end
  #--------------------------------------------------------------------------
  # Configuração de exibição
  #--------------------------------------------------------------------------
  def self.line_name?
    return true if STATUS_LINE == "Nomes"
    return false
  end
end

#==============================================================================
# Window_Base
#==============================================================================

class Window_Base

  def draw_face(face_name, face_index, x, y, size = 96, opacity = 255)
    bitmap = Cache.face(face_name)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = face_index % 4 * 96 + (96 - size) / 2
    rect.y = face_index / 4 * 96 + (96 - size) / 2
    rect.width = size
    rect.height = size
    self.contents.blt(x, y, bitmap, rect, opacity)
    bitmap.dispose
  end

  def draw_actor_face(actor, x, y, size = 96, opacity = 255)
    draw_face(actor.face_name, actor.face_index, x, y, size, opacity)
  end
end

#==============================================================================
# Window_SpinCommand
#------------------------------------------------------------------------------
# Esta classe comanda a rotação do menu
#==============================================================================

class Window_SpinCommand < Window_Base
  attr_reader   :index
  attr_reader   :help_window

  def initialize(cx, cy, commands, setting = {})
    @radius    = setting.has_key?("R") ? setting["R"] : 40  
    @speed     = setting.has_key?("S") ? setting["S"] : 36  
    @spin_back = setting.has_key?("G") ? setting["G"] : ""
    @spin_line = setting.has_key?("L") ? setting["L"] : nil 
    x, y = cx - @radius - 28, cy - @radius - 28
    width = height = @radius * 2 + 56
    super(x, y, width, height)
    self.opacity = 0
    @index = 0
    @commands = commands
    @spin_right = true
    @spin_count = 0
    update_cursor
  end

  def draw_spin_graphic(i, cx, cy)
    case command_kind(i)
    when "icon"
      draw_icon(command_pull(i), cx - 12, cy - 12, command_enabled?(i))
    end
  end

  def refresh
    set_spin
  end

  def draw_item(index, enabled = true)
    @commands[index][3] = enabled
    set_spin
  end
  
  def command_name(index = @index)
    return "" if index < 0
    name = @commands[index][0]
    return name != nil ? name : ""
  end
  
  def command_kind(index)
    result = @commands[index][1]
    return result != nil ? result : ""
  end
  
  def command_pull(index)
    result = @commands[index][2]
    return result != nil ? result : ""
  end
  
  def command_enabled?(index)
    result = @commands[index][3]
    return result != nil ? result : true
  end
  
  def set_index(name)
    n = -1
    for i in 0...@commands.size
      n = i if @commands[i][0] == name
    end
    @index = n if n >= 0
    update_cursor
    call_update_help
    set_spin
  end
  
  def index=(index)
    @index = index
    update_cursor
    call_update_help
    set_spin
  end
  
  def center_x
    return contents.width / 2
  end

  def center_y
    return contents.height / 2
  end

  def item_max
    return @commands.size
  end

  def set_background
    return if @spin_back == ""
    bitmap = Cache.system(@spin_back)
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    self.contents.blt(12, 12, bitmap, rect)
  end

  def set_text
    return if @spin_line == nil
    y = center_y - WLH / 2 + @spin_line
    self.contents.draw_text(center_x - 48, y, 96, WLH, command_name, 1)
  end

  def angle_size
    return (Math::PI * 2 / item_max)
  end

  def set_spin_count
    @spin_count = angle_size * 360 / @speed
    set_spin(true)
  end

  def set_spin(spin = false)
    self.contents.clear
    set_background
    angle = spin ? @speed * @spin_count / 360 : 0
    angle = @spin_right ? angle : -angle
    for i in 0...item_max
      n = (i - @index) * angle_size + angle
      cx = @radius * Math.sin(n) + center_x
      cy = - @radius * Math.cos(n) + center_y
      draw_spin_graphic(i, cx, cy)
    end
    set_text
  end

  def update
    super
    update_cursor
    if @spin_count > 0
      @spin_count -= 1
      set_spin(@spin_count >= 1)
      return
    end
    update_command
  end

  def command_movable?
    return false if @spin_count > 0
    return false if (not visible or not active)
    return false if (index < 0 or index > item_max or item_max == 0)
    return false if (@opening or @closing)
    return true
  end

  def command_right
    @index = (@index + 1) % item_max
    @spin_right = true
    set_spin_count
  end

  def command_left
    @index = (@index - 1 + item_max) % item_max
    @spin_right = false
    set_spin_count
  end

  def update_command
    if command_movable?
      if Input.press?(Input::RIGHT)
        Sound.play_cursor
        Zii.turn_normal? ? command_right : command_left
      end
      if Input.press?(Input::LEFT)
        Sound.play_cursor
        Zii.turn_normal? ? command_left : command_right
      end
    end
    call_update_help
  end

  def update_cursor
    if @index < 0
      self.cursor_rect.empty
    else
      rect = Rect.new(0, 0, 24, 24)
      rect.x = center_x - rect.width / 2
      rect.y = center_y - rect.height / 2 - @radius
      self.cursor_rect = rect
    end
  end

  def help_window=(help_window)
    @help_window = help_window
    call_update_help
  end

  def call_update_help
    if self.active and @help_window != nil
       update_help
    end
  end

  def update_help
  end
end

#==============================================================================
# Window_LineHelp
#==============================================================================

class Window_LineHelp < Window_Base

  def initialize
    super(-16, 0, 576, WLH + 32)
    self.opacity = 0
  end

  def set_text(text, align = 0)
    if text != @text or align != @align
      self.contents.clear
      back_color = Color.new(0, 0, 0, 80)
      self.contents.fill_rect(0, y = 12, contents.width, WLH - y, back_color)
      self.contents.font.color = normal_color
      self.contents.draw_text(20, 0, self.width - 72, WLH, text, align)
      @text = text
      @align = align
    end
  end
end

#==============================================================================
# Window_PartyCommand
#==============================================================================

class Window_PartyCommand < Window_SpinCommand
  def initialize
    s1 = [Vocab::fight,  "icon", Zii::FIGHT,  true]
    s2 = [Vocab::escape, "icon", Zii::ESCAPE, $game_troop.can_escape]
    setting = {"R"=>40, "S"=>52, "G"=>"Spin40", "L"=>-12}
    super(72, 356, [s1, s2], setting)
    self.active = false
    set_spin
  end
end

#==============================================================================
# Window_ActorCommand
#==============================================================================

class Window_ActorCommand < Window_SpinCommand

  def initialize
    s1 = [Vocab::attack, "icon", Zii::ATTACK, true]
    s2 = [Vocab::skill,  "icon", Zii::SKILL,  true]
    s3 = [Vocab::guard,  "icon", Zii::GUARD,  true]
    s4 = [Vocab::item,   "icon", Zii::ITEM,   true]
    setting = {"R"=>40, "S"=>52, "G"=>"Spin40", "L"=>-12}
    super(72, 356, [s1, s2, s3, s4], setting)
    self.active = false
    set_spin
  end

  def setup(actor)
    @commands[0][2] = Zii::ATTACK
    @commands[1][0] = Vocab::skill
    if actor.weapons[0] != nil
      n = actor.weapons[0].icon_index
      @commands[0][2] = n if n > 0
    end
    @commands[1][0] = actor.class.skill_name if actor.class.skill_name_valid
    self.index = 0
    set_spin
  end
end

#==============================================================================
# Window_BattleStatus
#==============================================================================

class Window_BattleStatus < Window_Selectable

  def initialize
    super(128, 288, 416, 128)
    @column_max = 4
    refresh
    self.active = false
    self.opacity = 0
  end

  def draw_neomemo7_back
    @neomemo7_clear = false
    for index in 0...@item_max
      x = index * 96
      self.contents.clear_rect(x + 72, WLH * 3, 24, 24)
      next unless Zii.battle_face?
      actor = $game_party.members[index]
      next if actor.hp <= 0
      bitmap = Cache.face(actor.face_name)
      rect = Rect.new(0, 0, 22, 22)
      rect.x = actor.face_index % 4 * 96 + 72
      rect.y = actor.face_index / 4 * 96 + 72
      self.contents.blt(x + 72, WLH * 3, bitmap, rect, 192)
    end
  end

  def draw_item(index)
    x = index * 96
    rect = Rect.new(x, 0, 96, 96)
    self.contents.clear_rect(rect)
    self.contents.font.color = normal_color
    actor = $game_party.members[index]
    draw_actor_face(actor, x + 2, 2, 92, 192) if actor.hp > 0 and Zii.battle_face?
    draw_actor_state(actor, x + 72, WLH * 3)
    if Zii.line_name?
      self.contents.font.color = hp_color(actor)
      size = Zii::LINE_SIZE
      self.contents.font.size = size
      self.contents.draw_text(x, WLH * 1 + 20 - size, 80, WLH, actor.name)
      self.contents.font.size = 20
    end
    draw_actor_hp(actor, x, WLH * 2, 80)
    draw_actor_mp(actor, x, WLH * 3, 70)
  end
  def update_cursor
    if @index < 0                  
      self.cursor_rect.empty 
    else                          
      rect = Rect.new(index * 96, 0, 96, 96)
      self.cursor_rect = rect 
    end
  end
end

#==============================================================================
# Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base

  alias :neomemo13_create_info_viewport :create_info_viewport
  def create_info_viewport
    neomemo13_create_info_viewport
    @info_viewport.rect.set(0, 0, 544, 416)
    @status_window.x = 128
    @actor_command_window.x = 4
  end

  alias :neomemo13_update_info_viewport :update_info_viewport
  def update_info_viewport
    ox = @info_viewport.ox
    neomemo13_update_info_viewport
    @info_viewport.ox = ox
  end

  alias :neomemo13_start_party_command_selection :start_party_command_selection
  def start_party_command_selection
    if $game_temp.in_battle
      @party_command_window.visible = true
      @actor_command_window.visible = false
    end
    neomemo13_start_party_command_selection
  end

  alias :neomemo13_update_party_command_selection :update_party_command_selection
  def update_party_command_selection
    return unless @party_command_window.command_movable?
    neomemo13_update_party_command_selection
  end

  alias :neomemo13_start_actor_command_selection :start_actor_command_selection
  def start_actor_command_selection
    neomemo13_start_actor_command_selection
    @party_command_window.visible = false
    @actor_command_window.visible = true
  end

  alias :neomemo13_update_actor_command_selection :update_actor_command_selection
  def update_actor_command_selection
    return unless @actor_command_window.command_movable?
    neomemo13_update_actor_command_selection
  end

  alias :neomemo13_start_target_enemy_selection :start_target_enemy_selection
  def start_target_enemy_selection
    x = @info_viewport.rect.x
    ox = @info_viewport.ox
    neomemo13_start_target_enemy_selection
    @info_viewport.rect.x = x
    @info_viewport.ox = ox
    @target_enemy_window.x = 544 - @target_enemy_window.width
    @target_enemy_window.y = 288
    @info_viewport.rect.width -= @target_enemy_window.width
  end

  alias :neomemo13_end_target_enemy_selection :end_target_enemy_selection
  def end_target_enemy_selection
    x = @info_viewport.rect.x
    ox = @info_viewport.ox
    @info_viewport.rect.width += @target_enemy_window.width
    neomemo13_end_target_enemy_selection
    @info_viewport.rect.x = x
    @info_viewport.ox = ox
  end

  alias :neomemo13_start_target_actor_selection :start_target_actor_selection
  def start_target_actor_selection
    x = @info_viewport.rect.x
    ox = @info_viewport.ox
    neomemo13_start_target_actor_selection
    @target_actor_window.y = 288
    @info_viewport.rect.x = x
    @info_viewport.ox = ox
    @info_viewport.rect.width -= @target_actor_window.width
  end

  alias :neomemo13_end_target_actor_selection :end_target_actor_selection
  def end_target_actor_selection
    x = @info_viewport.rect.x
    ox = @info_viewport.ox
    @info_viewport.rect.width += @target_actor_window.width
    neomemo13_end_target_actor_selection
    @info_viewport.rect.x = x
    @info_viewport.ox = ox
  end

  alias :neomemo13_start_skill_selection :start_skill_selection
  def start_skill_selection
    neomemo13_start_skill_selection
    @skill_window.dispose if @skill_window != nil
    @help_window.dispose if @help_window != nil
    @help_window = Window_LineHelp.new
    @skill_window = Window_Skill.new(8, 64, 528, 216, @active_battler)
    @skill_window.help_window = @help_window
  end

  alias :neomemo13_start_item_selection :start_item_selection
  def start_item_selection
    neomemo13_start_item_selection
    @item_window.dispose if @item_window != nil
    @help_window.dispose if @help_window != nil
    @help_window = Window_LineHelp.new
    @item_window = Window_Item.new(8, 64, 528, 216)
    @item_window.help_window = @help_window
  end
end
Créditos e Agradecimentos
  1. Criado por ziifee
Imagens Anexadas
Tipo de Arquivo: jpg sshot-2.jpg (47.8 KB, 1112 visitas)
Responder com Quote
  #2 (permalink)  
Antigo 26-04-2008, 02:56
Avatar de Tenshi Sama
Hikari Animes
Pontos: 19,277, Nível: 20 Pontos: 19,277, Nível: 20 Pontos: 19,277, Nível: 20
Atividade: 20% Atividade: 20% Atividade: 20%
 
Data de Entrada: Mar 2008
Posts: 804
Reputação: 76
Tenshi Sama é bem famoso nesta comunidade
Enviar mensagem via MSN para Tenshi Sama
Re: Menu Oval de Batalha

Kawaiiiiiiiiiiiiiii *--------------------*
__________________
Visite o meu fórum de discussão e download de anime, manga, visual novel, light novel, eroge e cultura japonesa
Responder com Quote
  #3 (permalink)  
Antigo 26-04-2008, 03:22
Avatar de SuperCueca
Super herói cuecudo
Pontos: 7,586, Nível: 12 Pontos: 7,586, Nível: 12 Pontos: 7,586, Nível: 12
Atividade: 25% Atividade: 25% Atividade: 25%
 
Data de Entrada: Jan 2008
Posts: 611
Reputação: 144
SuperCueca é bem famoso nesta comunidadeSuperCueca é bem famoso nesta comunidade
Enviar mensagem via ICQ para SuperCueca Enviar mensagem via MSN para SuperCueca Enviar mensagem via Skype para SuperCueca
Re: Menu Oval de Batalha

Cade o fugir? o_O
__________________

Responder com Quote
  #4 (permalink)  
Antigo 26-04-2008, 03:33
Avatar de Falco
Doing a barrel roll!
Pontos: 20,978, Nível: 21 Pontos: 20,978, Nível: 21 Pontos: 20,978, Nível: 21
Atividade: 49% Atividade: 49% Atividade: 49%
 
Data de Entrada: Jan 2008
Posts: 1,444
Reputação: 70
Falco é bem famoso nesta comunidade
Enviar mensagem via MSN para Falco Enviar mensagem via Yahoo para Falco
Re: Menu Oval de Batalha

Ê Cueca apressada... XD

Quando a batalha começa, você tem duas opções. Lutar e Fugir. Quando você clica em Lutar, aparecem as opções mostradas na screenshot.
Responder com Quote
  #5 (permalink)  
Antigo 26-04-2008, 03:34
Avatar de Tenshi Sama
Hikari Animes
Pontos: 19,277, Nível: 20 Pontos: 19,277, Nível: 20 Pontos: 19,277, Nível: 20
Atividade: 20% Atividade: 20% Atividade: 20%
 
Data de Entrada: Mar 2008
Posts: 804
Reputação: 76
Tenshi Sama é bem famoso nesta comunidade
Enviar mensagem via MSN para Tenshi Sama
Re: Menu Oval de Batalha

Citação:
Postado originalmente por SuperCueca Ver Posts
Cade o fugir? o_O
ahushu eu nem tinha percebido, é mesmo... onde esta o fugir.. deve ter fugido(piadinha sem graça u.u)
__________________
Visite o meu fórum de discussão e download de anime, manga, visual novel, light novel, eroge e cultura japonesa
Responder com Quote
  #6 (permalink)  
Antigo 26-04-2008, 14:28
Avatar de pliniomat
Novato
Pontos: 339, Nível: 2 Pontos: 339, Nível: 2 Pontos: 339, Nível: 2
Atividade: 0% Atividade: 0% Atividade: 0%
 
Data de Entrada: Mar 2008
Posts: 69
Reputação: 10
pliniomat está se destacando por aqui
Re: Menu Oval de Batalha

Bacaníssimo!! Que palavra estranha...
__________________
EM BREVE
Responder com Quote
  #7 (permalink)  
Antigo 26-04-2008, 17:34
Avatar de Ramon Wadry
O bom filho a casa torna!
Pontos: 40,402, Nível: 28 Pontos: 40,402, Nível: 28 Pontos: 40,402, Nível: 28
Atividade: 0% Atividade: 0% Atividade: 0%
 
Data de Entrada: Jan 2008
Posts: 236
Reputação: 20
Ramon Wadry está se destacando por aqui
Enviar mensagem via MSN para Ramon Wadry
Re: Menu Oval de Batalha

Nossa esse ai é bom mesmo, muito mais 'clean' ficou a batalha, GOOD :D
__________________
Responder com Quote
  #8 (permalink)  
Antigo 26-04-2008, 21:30
Avatar de randalbr
Caçador de aventuras.
Pontos: 3,670, Nível: 9 Pontos: 3,670, Nível: 9 Pontos: 3,670, Nível: 9
Atividade: 0% Atividade: 0% Atividade: 0%
 
Data de Entrada: Apr 2008
Posts: 395
Reputação: 47
randalbr está se destacando por aqui
Enviar mensagem via MSN para randalbr
Re: Menu Oval de Batalha

Me lembra os menus usados nos games "Legend of Mana" e "Lufia", mas assim, é possivel editar a posição das imagens do rosto e do menu circular? eu gostaria de fazer um posicionado na direita ao invéz da esquerda, principalmente se você usa o sideview battle.

Valeu pelo script! :D
Responder com Quote
  #9 (permalink)  
Antigo 26-04-2008, 21:52
Avatar de Falco
Doing a barrel roll!
Pontos: 20,978, Nível: 21 Pontos: 20,978, Nível: 21 Pontos: 20,978, Nível: 21
Atividade: 49% Atividade: 49% Atividade: 49%
 
Data de Entrada: Jan 2008
Posts: 1,444
Reputação: 70
Falco é bem famoso nesta comunidade
Enviar mensagem via MSN para Falco Enviar mensagem via Yahoo para Falco
Re: Menu Oval de Batalha

É possível sim, dá uma lida em tutoriais de RGSS que você logo aprende a trocar as janelas de lugar. ^^'
Responder com Quote
  #10 (permalink)  
Antigo 26-04-2008, 22:07
Avatar de randalbr
Caçador de aventuras.
Pontos: 3,670, Nível: 9 Pontos: 3,670, Nível: 9 Pontos: 3,670, Nível: 9
Atividade: 0% Atividade: 0% Atividade: 0%
 
Data de Entrada: Apr 2008
Posts: 395
Reputação: 47
randalbr está se destacando por aqui
Enviar mensagem via MSN para randalbr
Re: Menu Oval de Batalha

Vou fazer isto. Este sistema de menu de combate irá ficar otimo se colocado em conjunto ao sistema de Sideview Battle. Menos menus, mais área para colocar os personagens em campo!
Responder com Quote
Responder


Opções do Tópico
Exibição

Ir para...


Horários baseados na GMT -2. Agora são 18:52.

Powered by vBulletin
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.