Ver Resposta Única
  #1 (permalink)  
Antigo 26-04-2008, 02:50
Avatar de Falco
Falco Falco está offline
Doing a barrel roll!
Pontos: 26,069, Nível: 23 Pontos: 26,069, Nível: 23 Pontos: 26,069, Nível: 23
Atividade: 85% Atividade: 85% Atividade: 85%
 
Data de Entrada: Jan 2008
Posts: 1,500
Reputação: 79
Falco é bem famoso nesta comunidade
Enviar mensagem via MSN para Falco Enviar mensagem via Yahoo para Falco
Lightbulb 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, 1279 visitas)
Responder com Quote