1 Lição 8.3 - Scenes - As janelas Especiais e a reconfiguração da Scene 16/2/2012, 21:45
Fetelk13
Membro Honorário I
Olá amigos !! Desculpem a demora, mas tenho trabalhado muito e não tenho tido tempo pra nada. resolvi dar um jeito de terminar logo com este menu para que possamos aprender mais, acho que este assunto está muito massante sem uma necessidade real. Devido à quantidade de PMs que eu tenho recebido sobre coisas que, se as pessoas parassem para ler com atenção as aulas, saberiam resolver, e devido a certos Makers que acham que estão me fazendo um favor atrapalhando o desenrolar das aulas, terminarei o menu, e depois disso passaremos para uma nova fase. Vamos ao menu então:
Lição passada eu pedi que fizessem a janela de Atributos do herói e a janela de Equipamento. Vários de vocês, como o morzan, tiveram facilidade, e a maioria não conseguiu nada. então, aqui está o código das janelas:
Peço a todos que fizeram as janelas que renomeiem para os nomes das do exemplo, para evitarmos erros.
Todos conseguiram configurar a posição das janelas? Não? Bem, aqui vai então o código completo do procedimento main da Scene, para que vocês tenham uma idéia:
Observe que já há a declaração das janelas com o nome do mapa e com a janela de ataque do SBAS. elas estão comentadas, para evitar erros. Seu menu deve estar assim agora:
Criar uma janela que mostre o nome do mapa
O RMXP tem muita coisa literalmente escondida. Seria de uma simplicidade enorme haver uma função/procedimento que mostrasse o nome do mapa atual. Mas por padrão não há. Para isso, declaramos numa var global, a $map_infos, os nomes dos mapas, lendo-os no arquivo MapInfos.rxdata. Não fui eu quem inventou este código. e em alguns Menus, como o do FF7 que vem no Help do XP, há esta função, mas ela é dispersa. Aqui, construiremos uma concisa. No topo do seu menu, ou em outra sessão que seja acima da sessão do menu, vamos declarar a função name na classe Game_Map, assim:
Isto ainda não mostra o nome do mapa, precisamos criar a função que lê para a var os nomes dos mapas. Para isso, logo baixo da função acima, declare assim:
O que fizemos?
Criamos uma estrutura for para ler os nomes dos mapas e gravá-los na var $map_infos. E na Classe Game_map criamos o procedimento. Agora, sempre que você quiser, na janela ou não, basta chamar $game_map[id].name.
Para facilitar, vou por aqui o código da janela:
Agora sim, você pode remover o # das linhas:
Agora, o menu está quase pronto:
A ultima janela, que iria mostrar as Habilidades equipadas no SBAS, eu não vou fazer. Decidi isso porque recebi uma msg muito estranha de um Maker que se dizia "inconformado" por eu estar usando um sistema de batalha para dar aulas que não fosse um de minha autoria. O Criador do Sistema, com certeza disponibilizou o código por saber que ele seria bem usado, não me importo, e espero que você também não.
Corrigindo o funcionamento do Menu
Depois de muito mexermos com os códigos, tenho certeza que seu menu está uma bagunça. As opções não funcionam, ou dão erro. Vamos começar pelo principal:
Agora, você não possui mais um menu de Status, que recebia o foco para selecionar um heroi. no procedimento update há a seguinte definição:
Aqui, quando o menu de comandos está ativo, a scene se direciona para o procedimento update_command, quando é a janela de Status, para a update_status. Como nosso menu não terá mais a janela de Status, não precisaremos verificar se ele está ativo, e não precisaremos verificar se a de Status está ativa. remova todo este código e deixe somente a chamada update_command. Seu procedimento update deve estar assim:
Muito bem. Sabendo que o procedimento update_status não será mais usado, você pode removê-lo, para diminuir código inútil. Ele está na linha 185 do menu original.
Feito isso vamos corrigir o update_command. houve um maker ae que achou que eu estava "perdido" e não sabia o que estava fazendo, até se disponibilizou para arrumar o "problema" se eu não soubesse como o fazer... Como tem pessoas ingenuas nesse mundo... ;D
Observe o procedimento update_command:
Procure pela linha case @command_window.index. É aqui que a mágica acontece. Sempre que a janela de comandos está ativa e você pressiona a tecla Enter/Espaço o Scene vem aqui neste case, procura saber qual comando estava selecionado através do index da janela, e executa o comando. A primeira coisa que devemos fazer é trocar o conteúdo do when 3 # Status pelo do when 4 # Salvar, e o do when 5 # Fim de Jogo, pelo do when 4 # Salvar. Podemos apagar o when 5 # Fim de Jogo, pois nossa janela de comandos não possui mais 6 itens, apenas 5. Outra coisa importante. Observe que when 1 e when 2 direcionam para a janela de Status:
Como não estamos mais usando a janela de Status, vamos chamar diretamente as Scenes de Skill e Equip aqui. Mas como? Se você ainda não deletou o procedimento update_status, verá nele que ele passa como parâmetro para essas Scenes o ID do herói na indexação da $game_party, em forma do index da janela, observe:
Ao invés de passarmos o index da janela, como sabemos que nosso herói é o ID do herói na indexação da $game_party é 0 (zero), basta colocarmos assim:
e colocar as linhas nas respectivas when. O código completo do procedimento:
Se foi tudo feito de maneira correta, seu menu está funcionando, e com todas as funções direcionadas ao primeiro herói.
A área que ficou vazia? bem, coloque o que quiser, uma janela de fome, ou algo parecido, ela ia ficar assim:
Mas mude-a de acordo com o seu gosto.
Eu sei, foi terrível. Para uma aula que seria esclarecedora, acho que surgiram muito mais dúvidas. eu pretendo voltar no assunto janelas, exemplificar melhor, mostrar tudo que pode e não pode ser feito com elas. Se você tem seguido as aulas com empenho, já sabe bastante coisa suficiente para aprofundarmos mais nos códigos.
Tentarei não me demorar tanto para postar uma aula e, mais uma vez eu peço desculpas. Estou pensando em algo bem interessante para a próxima aula, para que essa impressão ruim saia.
Até lá, e obrigado.
Ah sim, o código completo da Scene, do jeito que eu fiz aqui:
;D ;D ;D
Lição passada eu pedi que fizessem a janela de Atributos do herói e a janela de Equipamento. Vários de vocês, como o morzan, tiveram facilidade, e a maioria não conseguiu nada. então, aqui está o código das janelas:
- Código:
class Window_Equipamento < Window_Base
def initialize(actor)
super(0, 0, 240, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
refresh
end
def refresh
self.contents.clear
draw_item_name($data_weapons[@actor.weapon_id], 0, 0)
draw_item_name($data_armors[@actor.armor1_id], 0, 32)
draw_item_name($data_armors[@actor.armor2_id], 0, 64)
draw_item_name($data_armors[@actor.armor3_id], 0, 96)
draw_item_name($data_armors[@actor.armor4_id], 0, 128)
end
end
#==============================================================================
class Window_Status2 < Window_Base
def initialize(actor)
super(0, 0, 240, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
refresh
end
def refresh
self.contents.clear
draw_actor_parameter(@actor, 0, 0, 0)
draw_actor_parameter(@actor, 0, 21, 1)
draw_actor_parameter(@actor, 0, 42, 2)
draw_actor_parameter(@actor, 0, 63, 3)
draw_actor_parameter(@actor, 0, 84, 4)
draw_actor_parameter(@actor, 0, 105, 5)
draw_actor_parameter(@actor, 0, 126, 6)
end
end
Peço a todos que fizeram as janelas que renomeiem para os nomes das do exemplo, para evitarmos erros.
Todos conseguiram configurar a posição das janelas? Não? Bem, aqui vai então o código completo do procedimento main da Scene, para que vocês tenham uma idéia:
- Código:
def main
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Salvar"
s5 = "Fim de Jogo"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
@command_window.index = @menu_index
@command_window.x = 640 - 160
@command_window.y = 192
if $game_party.actors.size == 0
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
if $game_system.save_disabled
@command_window.disable_item(4)
end
@playtime_window = Window_PlayTime.new
@playtime_window.x = 640 - @playtime_window.width
@steps_window = Window_Steps.new
@steps_window.x = 640 - @steps_window.width
@steps_window.y = 64
@gold_window = Window_Gold.new
@gold_window.x = 640 - @gold_window.width
@gold_window.y = 128
#@mapname_window = Window_Mapname.new
#@mapname_window.y = 480 - 96
@status_window = Window_Hero_Status.new($game_party.actors[0])
@status_window.y = 0
@equip_window = Window_Equipamento.new($game_party.actors[0])
@equip_window.y = 192
@stats_window = Window_Status2.new($game_party.actors[0])
@stats_window.x = 240
@stats_window.y = 192
#@dummy_window = Window_Dummy.new($game_party.actors[0])
#@dummy_window.x = 320
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@command_window.dispose
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
#@mapname_window.dispose
@equip_window.dispose
@stats_window.dispose
#@dummy_window.dispose
end
Observe que já há a declaração das janelas com o nome do mapa e com a janela de ataque do SBAS. elas estão comentadas, para evitar erros. Seu menu deve estar assim agora:
Criar uma janela que mostre o nome do mapa
O RMXP tem muita coisa literalmente escondida. Seria de uma simplicidade enorme haver uma função/procedimento que mostrasse o nome do mapa atual. Mas por padrão não há. Para isso, declaramos numa var global, a $map_infos, os nomes dos mapas, lendo-os no arquivo MapInfos.rxdata. Não fui eu quem inventou este código. e em alguns Menus, como o do FF7 que vem no Help do XP, há esta função, mas ela é dispersa. Aqui, construiremos uma concisa. No topo do seu menu, ou em outra sessão que seja acima da sessão do menu, vamos declarar a função name na classe Game_Map, assim:
- Código:
class Game_Map
def name
$map_infos[@map_id]
end
end
Isto ainda não mostra o nome do mapa, precisamos criar a função que lê para a var os nomes dos mapas. Para isso, logo baixo da função acima, declare assim:
- Código:
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end
O que fizemos?
Criamos uma estrutura for para ler os nomes dos mapas e gravá-los na var $map_infos. E na Classe Game_map criamos o procedimento. Agora, sempre que você quiser, na janela ou não, basta chamar $game_map[id].name.
Para facilitar, vou por aqui o código da janela:
- Código:
class Window_Mapname < Window_Base
def initialize
super(0, 0, 640, 96)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = 24
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(4, 16, 608, 32, $game_map.name.to_s, 1)
end
end
Agora sim, você pode remover o # das linhas:
- Código:
@mapname_window = Window_Mapname.new
@mapname_window.y = 480 - 96
...
@mapname_window.dispose
Agora, o menu está quase pronto:
A ultima janela, que iria mostrar as Habilidades equipadas no SBAS, eu não vou fazer. Decidi isso porque recebi uma msg muito estranha de um Maker que se dizia "inconformado" por eu estar usando um sistema de batalha para dar aulas que não fosse um de minha autoria. O Criador do Sistema, com certeza disponibilizou o código por saber que ele seria bem usado, não me importo, e espero que você também não.
Corrigindo o funcionamento do Menu
Depois de muito mexermos com os códigos, tenho certeza que seu menu está uma bagunça. As opções não funcionam, ou dão erro. Vamos começar pelo principal:
Agora, você não possui mais um menu de Status, que recebia o foco para selecionar um heroi. no procedimento update há a seguinte definição:
- Código:
if @command_window.active
update_command
return
end
# Se a janela de Status estiver ativa: call update_status
if @status_window.active
update_status
return
end
Aqui, quando o menu de comandos está ativo, a scene se direciona para o procedimento update_command, quando é a janela de Status, para a update_status. Como nosso menu não terá mais a janela de Status, não precisaremos verificar se ele está ativo, e não precisaremos verificar se a de Status está ativa. remova todo este código e deixe somente a chamada update_command. Seu procedimento update deve estar assim:
- Código:
def update
@command_window.update
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
@mapname_window.update
@equip_window.update
@stats_window.update
update_command
end
Muito bem. Sabendo que o procedimento update_status não será mais usado, você pode removê-lo, para diminuir código inútil. Ele está na linha 185 do menu original.
Feito isso vamos corrigir o update_command. houve um maker ae que achou que eu estava "perdido" e não sabia o que estava fazendo, até se disponibilizou para arrumar o "problema" se eu não soubesse como o fazer... Como tem pessoas ingenuas nesse mundo... ;D
Observe o procedimento update_command:
- Código:
def update_command
# Se o botão B for pressionado
if Input.trigger?(Input::B)
# Reproduzir SE de cancelamento
$game_system.se_play($data_system.cancel_se)
# Alternar para a tela do mapa
$scene = Scene_Map.new
return
end
# Se o botão C for pressionado
if Input.trigger?(Input::C)
# Se o comando for outro senão Salvar, Fim de Jogo e o número de Heróis no
# Grupo for 0
if $game_party.actors.size == 0 and @command_window.index < 4
# Reproduzir SE de erro
$game_system.se_play($data_system.buzzer_se)
return
end
# Ramificação por posição do cursor na janela de comandos
case @command_window.index
when 0 # Itens
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Itens
$scene = Scene_Item.new
when 1 # Habilidades
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Ativar o status da janela
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # Equipamentos
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Ativar o status da janela
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # Status
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Ativar o status da janela
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # Salvar
# Se Salvar for proibido
if $game_system.save_disabled
# Reproduzir SE de erro
$game_system.se_play($data_system.buzzer_se)
return
end
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de save
$scene = Scene_Save.new
when 5 # Fim de Jogo
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Fim de Jogo
$scene = Scene_End.new
end
return
end
end
Procure pela linha case @command_window.index. É aqui que a mágica acontece. Sempre que a janela de comandos está ativa e você pressiona a tecla Enter/Espaço o Scene vem aqui neste case, procura saber qual comando estava selecionado através do index da janela, e executa o comando. A primeira coisa que devemos fazer é trocar o conteúdo do when 3 # Status pelo do when 4 # Salvar, e o do when 5 # Fim de Jogo, pelo do when 4 # Salvar. Podemos apagar o when 5 # Fim de Jogo, pois nossa janela de comandos não possui mais 6 itens, apenas 5. Outra coisa importante. Observe que when 1 e when 2 direcionam para a janela de Status:
Como não estamos mais usando a janela de Status, vamos chamar diretamente as Scenes de Skill e Equip aqui. Mas como? Se você ainda não deletou o procedimento update_status, verá nele que ele passa como parâmetro para essas Scenes o ID do herói na indexação da $game_party, em forma do index da janela, observe:
- Código:
$scene = Scene_Equip.new(@status_window.index)
$scene = Scene_Status.new(@status_window.index)
Ao invés de passarmos o index da janela, como sabemos que nosso herói é o ID do herói na indexação da $game_party é 0 (zero), basta colocarmos assim:
- Código:
$scene = Scene_Equip.new(0)
$scene = Scene_Status.new(0)
e colocar as linhas nas respectivas when. O código completo do procedimento:
- Código:
def update_command
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
if $game_party.actors.size == 0 and @command_window.index < 4
$game_system.se_play($data_system.buzzer_se)
return
end
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
$scene = Scene_Item.new
when 1 # Habilidades
#-------------------------------------------------------#
if $game_party.actors[0].restriction >= 2
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$scene = Scene_Skill.new(0)
#-------------------------------------------------------#
when 2 # Equipamentos
#-------------------------------------------------------#
$game_system.se_play($data_system.decision_se)
$scene = Scene_Equip.new(0)
#-------------------------------------------------------#
when 3 # Salvar
if $game_system.save_disabled
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$scene = Scene_Save.new
when 4 # Fim de Jogo
$game_system.se_play($data_system.decision_se)
$scene = Scene_End.new
end
return
end
end
Se foi tudo feito de maneira correta, seu menu está funcionando, e com todas as funções direcionadas ao primeiro herói.
A área que ficou vazia? bem, coloque o que quiser, uma janela de fome, ou algo parecido, ela ia ficar assim:
- Código:
class Window_Dummy < Window_Base
def initialize(actor)
super(0, 0, 160, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
refresh
end
def refresh
self.contents.clear
bitmap = RPG::Cache.windowskin($game_system.windowskin_name)
src_rect = Rect.new(128,64,32,32)
self.contents.blt(0, 0, bitmap, src_rect)
self.contents.blt(0, 42, bitmap, src_rect)
self.contents.blt(0, 84, bitmap, src_rect)
self.contents.blt(0, 126, bitmap, src_rect)
self.contents.draw_text(0,8,32,32,"H",0)
self.contents.draw_text(0,50,32,32,"J",0)
self.contents.draw_text(0,92,32,32,"K",0)
self.contents.draw_text(0,132,32,32,"L",0)
end
end
Mas mude-a de acordo com o seu gosto.
Eu sei, foi terrível. Para uma aula que seria esclarecedora, acho que surgiram muito mais dúvidas. eu pretendo voltar no assunto janelas, exemplificar melhor, mostrar tudo que pode e não pode ser feito com elas. Se você tem seguido as aulas com empenho, já sabe bastante coisa suficiente para aprofundarmos mais nos códigos.
Tentarei não me demorar tanto para postar uma aula e, mais uma vez eu peço desculpas. Estou pensando em algo bem interessante para a próxima aula, para que essa impressão ruim saia.
Até lá, e obrigado.
Ah sim, o código completo da Scene, do jeito que eu fiz aqui:
- Código:
class Game_Map
def name
$map_infos[@map_id]
end
end
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end
#################################################################
class Window_Base
def draw_actor_name2(actor, x, y,align=0)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 64, 32, actor.name ,align)
end
def draw_actor_parameter(actor, x, y, type)
case type
when 0
parameter_name = $data_system.words.atk
parameter_value = actor.atk
when 1
parameter_name = $data_system.words.pdef
parameter_value = actor.pdef
when 2
parameter_name = $data_system.words.mdef
parameter_value = actor.mdef
when 3
parameter_name = $data_system.words.str
parameter_value = actor.str
when 4
parameter_name = $data_system.words.dex
parameter_value = actor.dex
when 5
parameter_name = $data_system.words.agi
parameter_value = actor.agi
when 6
parameter_name = $data_system.words.int
parameter_value = actor.int
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, 32, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 164, y, 36, 32, parameter_value.to_s, 2)
end
alias cbs_draw_actor_hp draw_actor_hp
def draw_actor_hp(actor, x, y, width = 146, height = 15)
bg = Color.new( 0, 0, 0, 160)
c1 = Color.new(255, 0, 0, 0)
c2 = Color.new(255, 255, 0, 160)
self.contents.fill_rect(x, y, width, height, bg)
width2 = width * actor.hp / actor.maxhp
gradient(x + 1, y + 1, width2 - 2, height - 2, c1, c2)
cbs_draw_actor_hp(actor, x, y, width)
end
alias cbs_draw_actor_sp draw_actor_sp
def draw_actor_sp(actor, x, y, width = 146, height = 15)
bg = Color.new( 0, 0, 0, 160)
c1 = Color.new( 0, 0, 255, 0)
c2 = Color.new( 0, 255, 255, 160)
self.contents.fill_rect(x, y, width, height, bg)
if actor.maxsp != 0
width2 = width * actor.sp / actor.maxsp
else
width2 = width * actor.sp / 1
end
gradient(x + 1, y + 1, width2 - 2, height - 2, c1, c2)
cbs_draw_actor_sp(actor, x, y, width)
end
def gradient(x, y, width, height, c1, c2)
for i in 1..width
x2 = x + i - 1
r = c1.red * (width - i) / width + c2.red * i / width
g = c1.green * (width - i) / width + c2.green * i / width
b = c1.blue * (width - i) / width + c2.blue * i / width
a = c1.alpha * (width - i) / width + c2.alpha * i / width
self.contents.fill_rect(x2, y, 1, height, Color.new(r, g, b, a))
end
end
end
#################################################################
class Window_Steps < Window_Base
def initialize
super(0, 0, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Passos")
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, 120, 32, $game_party.steps.to_s, 2)
end
end
#==============================================================================
class Window_PlayTime < Window_Base
def initialize
super(0, 0, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
def refresh
self.contents.clear
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 4, 120, 24, text, 1)
end
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
#==============================================================================
class Window_Gold < Window_Base
def initialize
super(0, 0, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
def refresh
self.contents.clear
cx = contents.text_size($data_system.words.gold).width
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, 120-cx-2, 32, $game_party.gold.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(124-cx, 0, cx, 32, $data_system.words.gold, 2)
end
end
#==============================================================================
class Window_Equipamento < Window_Base
def initialize(actor)
super(0, 0, 240, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
refresh
end
def refresh
self.contents.clear
draw_item_name($data_weapons[@actor.weapon_id], 0, 0)
draw_item_name($data_armors[@actor.armor1_id], 0, 32)
draw_item_name($data_armors[@actor.armor2_id], 0, 64)
draw_item_name($data_armors[@actor.armor3_id], 0, 96)
draw_item_name($data_armors[@actor.armor4_id], 0, 128)
end
end
#==============================================================================
class Window_Status2 < Window_Base
def initialize(actor)
super(0, 0, 240, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
refresh
end
def refresh
self.contents.clear
draw_actor_parameter(@actor, 0, 0, 0)
draw_actor_parameter(@actor, 0, 21, 1)
draw_actor_parameter(@actor, 0, 42, 2)
draw_actor_parameter(@actor, 0, 63, 3)
draw_actor_parameter(@actor, 0, 84, 4)
draw_actor_parameter(@actor, 0, 105, 5)
draw_actor_parameter(@actor, 0, 126, 6)
end
end
#==============================================================================
class Window_Hero_Status < Window_Base
def initialize(actor)
super(0, 0, 320, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
@frame = 0
@pose = 0
refresh
end
def refresh
self.contents.clear
draw_actor_sprite
draw_actor_name2(@actor, 8, 0, 1)
draw_actor_class(@actor, 96, 0)
draw_actor_level(@actor, 96, 24)
draw_actor_state(@actor, 96, 48)
self.contents.font.color = system_color
self.contents.draw_text(96, 72, 80, 32, "EXP:")
self.contents.font.color = normal_color
self.contents.draw_text(96, 72, 160, 32, @actor.exp_s + "/" + @actor.next_exp_s , 2)
draw_actor_hp(@actor, 96, 100, 172)
draw_actor_sp(@actor, 96, 124, 172)
end
def draw_actor_sprite
self.contents.fill_rect(0, 32, 80, 120, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.character(@actor.character_name, @actor.character_hue)
self.contents.stretch_blt(Rect.new(0, 32, 80, 120), bitmap,
Rect.new(bitmap.width / 4 * @frame, bitmap.height / 4 * @pose , bitmap.width / 4 , bitmap.height / 4))
end
def update
super
if Graphics.frame_count % 10 == 0
if @frame == 3
#@pose == 3 ? @pose = 0 : @pose += 1
end
@frame == 3 ? @frame = 0 : @frame += 1
draw_actor_sprite
end
end
end
#==============================================================================
class Window_Dummy < Window_Base
def initialize(actor)
super(0, 0, 160, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
refresh
end
def refresh
self.contents.clear
bitmap = RPG::Cache.windowskin($game_system.windowskin_name)
src_rect = Rect.new(128,64,32,32)
self.contents.blt(0, 0, bitmap, src_rect)
self.contents.blt(0, 42, bitmap, src_rect)
self.contents.blt(0, 84, bitmap, src_rect)
self.contents.blt(0, 126, bitmap, src_rect)
self.contents.draw_text(0,8,32,32,"H",0)
self.contents.draw_text(0,50,32,32,"J",0)
self.contents.draw_text(0,92,32,32,"K",0)
self.contents.draw_text(0,132,32,32,"L",0)
end
end
#==============================================================================
class Window_Mapname < Window_Base
def initialize
super(0, 0, 640, 96)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = 24
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(4, 16, 608, 32, $game_map.name.to_s, 1)
end
end
#==============================================================================
# Scene_Menu
#==============================================================================
class Scene_Menu
def initialize(menu_index = 0)
@menu_index = menu_index
end
def main
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Salvar"
s5 = "Fim de Jogo"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
@command_window.index = @menu_index
@command_window.x = 640 - 160
@command_window.y = 192
if $game_party.actors.size == 0
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
if $game_system.save_disabled
@command_window.disable_item(4)
end
@playtime_window = Window_PlayTime.new
@playtime_window.x = 640 - @playtime_window.width
@steps_window = Window_Steps.new
@steps_window.x = 640 - @steps_window.width
@steps_window.y = 64
@gold_window = Window_Gold.new
@gold_window.x = 640 - @gold_window.width
@gold_window.y = 128
@mapname_window = Window_Mapname.new
@mapname_window.y = 480 - 96
#@mapname_window.visible = false
@status_window = Window_Hero_Status.new($game_party.actors[0])
@status_window.y = 0
@equip_window = Window_Equipamento.new($game_party.actors[0])
@equip_window.y = 192
@stats_window = Window_Status2.new($game_party.actors[0])
@stats_window.x = 240
@stats_window.y = 192
@dummy_window = Window_Dummy.new($game_party.actors[0])
@dummy_window.x = 320
@dummy_window.visible = false
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@command_window.dispose
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
@mapname_window.dispose
@equip_window.dispose
@stats_window.dispose
@dummy_window.dispose
end
def update
@command_window.update
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
@mapname_window.update
@equip_window.update
@stats_window.update
@dummy_window.update
update_command
end
def update_command
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
if $game_party.actors.size == 0 and @command_window.index < 4
$game_system.se_play($data_system.buzzer_se)
return
end
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
$scene = Scene_Item.new
when 1 # Habilidades
#-------------------------------------------------------#
if $game_party.actors[0].restriction >= 2
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$scene = Scene_Skill.new(0)
#-------------------------------------------------------#
when 2 # Equipamentos
#-------------------------------------------------------#
$game_system.se_play($data_system.decision_se)
$scene = Scene_Equip.new(0)
#-------------------------------------------------------#
when 3 # Salvar
if $game_system.save_disabled
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$scene = Scene_Save.new
when 4 # Fim de Jogo
$game_system.se_play($data_system.decision_se)
$scene = Scene_End.new
end
return
end
end
end
;D ;D ;D