|

26-04-2008, 02:50
|
 |
Doing a barrel roll!
|
|
Data de Entrada: Jan 2008
Posts: 1,444
Reputação: 70
|
|
[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- Criado por ziifee
|

26-04-2008, 02:56
|
 |
Hikari Animes
|
|
Data de Entrada: Mar 2008
Posts: 804
Reputação: 76
|
|
|
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
|

26-04-2008, 03:22
|
 |
Super herói cuecudo
|
|
Data de Entrada: Jan 2008
Posts: 611
Reputação: 144
|
|
|
Re: Menu Oval de Batalha
Cade o fugir? o_O
|

26-04-2008, 03:33
|
 |
Doing a barrel roll!
|
|
Data de Entrada: Jan 2008
Posts: 1,444
Reputação: 70
|
|
|
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.
|

26-04-2008, 03:34
|
 |
Hikari Animes
|
|
Data de Entrada: Mar 2008
Posts: 804
Reputação: 76
|
|
|
Re: Menu Oval de Batalha
Citação:
Postado originalmente por SuperCueca
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
|

26-04-2008, 14:28
|
 |
Novato
|
|
Data de Entrada: Mar 2008
Posts: 69
Reputação: 10
|
|
|
Re: Menu Oval de Batalha
Bacaníssimo!! Que palavra estranha...
__________________
EM BREVE
|

26-04-2008, 17:34
|
 |
O bom filho a casa torna!
|
|
Data de Entrada: Jan 2008
Posts: 236
Reputação: 20
|
|
|
Re: Menu Oval de Batalha
Nossa esse ai é bom mesmo, muito mais 'clean' ficou a batalha, GOOD :D
|

26-04-2008, 21:30
|
 |
Caçador de aventuras.
|
|
Data de Entrada: Apr 2008
Posts: 395
Reputação: 47
|
|
|
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
|

26-04-2008, 21:52
|
 |
Doing a barrel roll!
|
|
Data de Entrada: Jan 2008
Posts: 1,444
Reputação: 70
|
|
|
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. ^^'
|

26-04-2008, 22:07
|
 |
Caçador de aventuras.
|
|
Data de Entrada: Apr 2008
Posts: 395
Reputação: 47
|
|
|
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!
|
| Opções do Tópico |
|
|
| Exibição |
Modo Linear
|
Horários baseados na GMT -2. Agora são 18:52.
|
|