Final Fantasy 6 Save e Load
Compativel com: RMVXAce
Compatibilidade :boa
Facilidade de uso: fácil
Lag gerado: nulo
[box class=titlebg]
Condições de Uso
[/box]
Pode ser modificado, mas peço gentilmente que não modifiquem as linhas de créditos, pode ser divulgado contanto que essas linhas fiquem intactas.
.
[box class=titlebg]
Script.
[/box]
O script simulá o Save/Load do FF6, para quem quiser saber como é que fica, tem imagens abaixo do original e do Save/Load recriado para RMVXAce por mim.
#=======================================================
# Final Fantasy 6 Save/Load
# Autor : Raizen
# Comunidade : www.centrorpg.com
# Save/Load baseado no jogo de GBA Final Fantasy 6
#=======================================================
module RaizenFFSave
# Icone usado para o cursor de decisão"
Icone = 10
# Quantidade de arquivos máximos
Files = 16
end
# Aqui começa o script, apenas mexa se souber o que estiver fazendo.
#==============================================================================
class Game_Party < Game_Unit
def characters_for_savefile
battle_members.collect do |actor|
[actor.character_name, actor.character_index, actor.name, actor.mhp, actor.hp, actor.mmp, actor.mp, actor.class.name, actor.level, actor.face_name]
end
end
end
module DataManager
def self.make_save_header
header = {}
header[:characters] = $game_party.characters_for_savefile
header[:playtime_s] = $game_system.playtime_s
header[:gold] = $game_party.gold
header[:steps] = $game_party.steps
header[:name_display] = $data_mapinfos[$game_map.map_id]
header
end
def self.savefile_max
return RaizenFFSave::Files
end
end
#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de salvar e carregar.
#==============================================================================
class Scene_File < Scene_MenuBase
#--------------------------------------------------------------------------
# * Inicialização do processo
#--------------------------------------------------------------------------
def start
super
@confirmation = true
@savefile_viewport = Viewport.new
create_savefile_windows
init_selection
@savefiletime = Window_SaveFileFF1.new(@index)
@savefilemap = Window_SaveFileFF2.new(@index)
@savefileconfirm = Window_SaveFileFF3.new(@index)
@savefileconf = Window_SaveFileconfirm.new
@savefileconf.visible = false
help_window_text
@y = 0
end
#--------------------------------------------------------------------------
# * Finalização do processo
#--------------------------------------------------------------------------
def terminate
super
@savefile_viewport.dispose
@savefile_windows.each {|window| window.dispose }
end
#--------------------------------------------------------------------------
# * Atualização da tela
#--------------------------------------------------------------------------
def update
super
@savefile_windows.each {|window| window.update }
update_savefile_selection
end
#--------------------------------------------------------------------------
# * Criação da janela de ajuda.
#--------------------------------------------------------------------------
def create_help_window
@help_window = Window_Help.new(1)
@help_window.set_text(help_window_text)
end
#--------------------------------------------------------------------------
# * Aquisição do texto da janela de ajuda
#--------------------------------------------------------------------------
def help_window_text
return ""
end
#--------------------------------------------------------------------------
# * Criação das janelas dos arquivos salvos
#--------------------------------------------------------------------------
def create_savefile_windows
@savefile_windows = Array.new(item_max) do |i|
Window_SaveFile.new(savefile_height, i)
end
@savefile_windows.each {|window| window.viewport = @savefile_viewport }
end
#--------------------------------------------------------------------------
# * Inicialização da seleção
#--------------------------------------------------------------------------
def init_selection
@index = first_savefile_index
@savefile_windows[@index].selected = true
self.top_index = @index - visible_max / 2
ensure_cursor_visible
end
#--------------------------------------------------------------------------
# * Aquisição do número máximo de itens
#--------------------------------------------------------------------------
def item_max
DataManager.savefile_max
end
#--------------------------------------------------------------------------
# * Aquisição do número máximo de arquivos salvos exbidos na tela
#--------------------------------------------------------------------------
def visible_max
return 1
end
#--------------------------------------------------------------------------
# * Aquisição da altura da janela do arquivo salvo.
#--------------------------------------------------------------------------
def savefile_height
@savefile_viewport.rect.height / visible_max
end
#--------------------------------------------------------------------------
# * Aquisição do índice do primeiro arquivo selecionado
#--------------------------------------------------------------------------
def first_savefile_index
return 0
end
#--------------------------------------------------------------------------
# * Aquisição do índice atual
#--------------------------------------------------------------------------
def index
@index
end
#--------------------------------------------------------------------------
# * Aquisição do índice do topo
#--------------------------------------------------------------------------
def top_index
@savefile_viewport.oy / savefile_height
end
#--------------------------------------------------------------------------
# * Definição do índice do topo
# index : novo índice
#--------------------------------------------------------------------------
def top_index=(index)
index = 0 if index < 0
index = item_max - visible_max if index > item_max - visible_max
@savefile_viewport.oy = index * savefile_height
end
#--------------------------------------------------------------------------
# * Aquisição do último índice
#--------------------------------------------------------------------------
def bottom_index
top_index + visible_max - 1
end
#--------------------------------------------------------------------------
# * Definição do último índice
# index : novo índice
#--------------------------------------------------------------------------
def bottom_index=(index)
self.top_index = index - (visible_max - 1)
end
#--------------------------------------------------------------------------
# * Atualização da seleção dos arquivos salvos
#--------------------------------------------------------------------------
def update_savefile_selection
return on_savefile_ok if Input.trigger?(:C)
return on_savefile_cancel if Input.trigger?(:B)
update_cursor
end
#--------------------------------------------------------------------------
# * Salvando o arquivo [Confirmação]
#--------------------------------------------------------------------------
def on_savefile_ok
end
#--------------------------------------------------------------------------
# * Salvando o arquivo [Cancelamento]
#--------------------------------------------------------------------------
def on_savefile_cancel
Sound.play_cancel
if @confirmation
return_scene
else
@confirmation = true
@savefileconfirm.visible = true
@savefileconf.visible = false
@helpwindow.visible = true
@y = 0
end
end
#--------------------------------------------------------------------------
# * Atualização do cursor
#--------------------------------------------------------------------------
def update_cursor
if @confirmation
last_index = @index
cursor_down (Input.trigger?(:DOWN)) if Input.repeat?(:DOWN)
cursor_up (Input.trigger?(:UP)) if Input.repeat?(:UP)
cursor_up (Input.trigger?(:LEFT)) if Input.repeat?(:LEFT)
cursor_down (Input.trigger?(:RIGHT)) if Input.repeat?(:RIGHT)
cursor_pagedown if Input.trigger?(:R)
cursor_pageup if Input.trigger?(:L)
if @index != last_index
Sound.play_cursor
@savefiletime.refresh(@index)
@savefilemap.refresh(@index)
@savefileconfirm.refresh(@index)
@savefile_windows[last_index].selected = false
@savefile_windows[@index].selected = true
end
else
cursor_movedown if Input.trigger?(:DOWN)
cursor_moveup if Input.trigger?(:UP)
end
end
def cursor_movedown
Sound.play_cursor
@y = 0
@savefileconf.refresh(@index, @n, @y)
end
def cursor_moveup
Sound.play_cursor
@y = 1
@savefileconf.refresh(@index, @n, @y)
end
#--------------------------------------------------------------------------
# * Movimento do cursor para baixo
# wrap : cursor retornar a primeira ou ultima posição
#--------------------------------------------------------------------------
def cursor_down(wrap)
@index = (@index + 1) % item_max if @index < item_max - 1 || wrap
ensure_cursor_visible
end
#--------------------------------------------------------------------------
# * Movimento do cursor para cima
# wrap : cursor retornar a primeira ou ultima posição
#--------------------------------------------------------------------------
def cursor_up(wrap)
@index = (@index - 1 + item_max) % item_max if @index > 0 || wrap
ensure_cursor_visible
end
#--------------------------------------------------------------------------
# * Movimento do cursor uma página abaixo
#--------------------------------------------------------------------------
def cursor_pagedown
if top_index + visible_max < item_max
self.top_index += visible_max
@index = [@index + visible_max, item_max - 1].min
end
end
#--------------------------------------------------------------------------
# * Movimento do cursor uma página acima
#--------------------------------------------------------------------------
def cursor_pageup
if top_index > 0
self.top_index -= visible_max
@index = [@index - visible_max, 0].max
end
end
#--------------------------------------------------------------------------
# * Confirmação de visibilidade do cursor
#--------------------------------------------------------------------------
def ensure_cursor_visible
self.top_index = index if index < top_index
self.bottom_index = index if index > bottom_index
end
end
#==============================================================================
# ** Scene_Save
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de salvar.
#==============================================================================
class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# * Aquisição do texto da janela de ajuda
#--------------------------------------------------------------------------
def help_window_text
@helpwindow = Window_SaveFilehelp.new(0)
end
#--------------------------------------------------------------------------
# * Aquisição do índice do primeiro arquivo selecionado
#--------------------------------------------------------------------------
def first_savefile_index
DataManager.last_savefile_index
end
#--------------------------------------------------------------------------
# * Definição de arquivo salvo
#--------------------------------------------------------------------------
def on_savefile_ok
super
if @confirmation == false or DataManager.load_header(@index) == nil
if @y == 1 or DataManager.load_header(@index) == nil
if DataManager.save_game(@index)
on_save_success
else
Sound.play_buzzer
end
else
on_savefile_cancel
end
else
Sound.play_save
@savefileconfirm.visible = false
@helpwindow.visible = false
@savefileconf.visible = true
@n = 1
@savefileconf.refresh(@index, 1, 0)
@confirmation = false
end
end
#--------------------------------------------------------------------------
# * Processo de salvar aquivo bem sucedido
#--------------------------------------------------------------------------
def on_save_success
Sound.play_save
return_scene
end
end
#==============================================================================
# ** Scene_Load
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de carregar.
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# * Aquisição do texto da janela de ajuda
#--------------------------------------------------------------------------
def help_window_text
@helpwindow = Window_SaveFilehelp.new(1)
end
#--------------------------------------------------------------------------
# * Aquisição do índice do primeiro arquivo selecionado
#--------------------------------------------------------------------------
def first_savefile_index
DataManager.latest_savefile_index
end
#--------------------------------------------------------------------------
# * Definição de arquivo salvo
#--------------------------------------------------------------------------
def on_savefile_ok
super
if @confirmation == false
if @y == 0
on_savefile_cancel
else
if DataManager.load_game(@index)
on_load_success
else
Sound.play_buzzer
end
end
elsif @confirmation and DataManager.load_header(@index) != nil
Sound.play_save
@savefileconfirm.visible = false
@helpwindow.visible = false
@savefileconf.visible = true
@n = 0
@savefileconf.refresh(@index, 0, 0)
@confirmation = false
elsif DataManager.load_header(@index) == nil
Sound.play_buzzer
end
end
#--------------------------------------------------------------------------
# * Processo de carregamento aquivo bem sucedido
#--------------------------------------------------------------------------
def on_load_success
Sound.play_load
fadeout_all
$game_system.on_after_load
SceneManager.goto(Scene_Map)
end
end
#==============================================================================
# ** Window_SaveFile
#------------------------------------------------------------------------------
# Esta janela exibe os arquivos salvos nas telas de salvar e carregar.
#==============================================================================
class Window_SaveFile < Window_Base
#--------------------------------------------------------------------------
# * Variáveis públicas
#--------------------------------------------------------------------------
attr_reader :selected # Estado da seleção
#--------------------------------------------------------------------------
# * Inicialização do objeto
# height : altura
# index : índice do arquivo salvo
#--------------------------------------------------------------------------
def initialize(height, index)
super(0, index * height, Graphics.width, height)
@file_index = index
refresh
@selected = false
end
#--------------------------------------------------------------------------
# * Renovação
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_party_characters(0, 0)
end
#--------------------------------------------------------------------------
# * Desenho dos personagens do grupo
# x : coordenada X
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_party_characters(x, y)
header = DataManager.load_header(@file_index)
return unless header
header[:characters].each_with_index do |data, i|
draw_face(data[9], data[1], x, y + i * 100)
contents.font.color = text_color(0)
draw_text(100, -5 + i * 67, 110, 20 + i * 67, data[2] , 0)
draw_text(210, -5 + i * 67, 110, 20 + i * 67, data[7] , 0)
draw_text(240, 28 + i * 67, 40, 53 + i * 67, data[3] , 2)
draw_text(230, 28 + i * 67, 50, 53 + i * 67, "/" , 0)
draw_text(190, 28 + i * 67, 40, 53 + i * 67, data[4] , 2)
draw_text(240, 41 + i * 67, 40, 66 + i * 67, data[5] , 2)
draw_text(230, 41 + i * 67, 50, 66 + i * 67, "/" , 0)
draw_text(190, 41 + i * 67, 40, 66 + i * 67, data[6] , 2)
draw_text(190, 15 + i * 67, 40, 40 + i * 67, data[8] , 2)
contents.font.color = text_color(1)
draw_text(130, 15 + i * 67, 50, 40 + i * 67, "Level" , 1)
draw_text(130, 28 + i * 67, 40, 53 + i * 67, "HP" , 1)
draw_text(130, 41 + i * 67, 40, 66 + i * 67, "MP" , 1)
end
end
#--------------------------------------------------------------------------
# * Desenho do tempo de jogo
# x : coordenada X
# y : coordenada Y
# width : largura
# align : alinhamento
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# * Definição de estado da seleção
# selected : estado da seleção
#--------------------------------------------------------------------------
def selected=(selected)
@selected = selected
end
#--------------------------------------------------------------------------
# * Atualização do cursor
#--------------------------------------------------------------------------
end
class Window_SaveFileFF1 < Window_Base
def initialize(i)
super(354, 300, 190, 116)
refresh(i)
@selected = false
end
def refresh(i)
contents.clear
contents.font.color = text_color(1)
draw_text(0, 0, 100, 40, "Tempo" , 0)
draw_text(0, 30, 100, 40, "Passos" , 0)
draw_text(0, 60, 100, 40, "G" , 0)
contents.font.color = text_color(0)
gold(i)
steps(i)
draw_playtime(i)
end
def draw_playtime(i)
header = DataManager.load_header(i)
return unless header
draw_text(115, 0, 140, 40, header[:playtime_s], 0)
end
def gold(i)
header = DataManager.load_header(i)
return unless header
draw_text(80, 60, 87, 40, header[:gold], 2)
end
def steps(i)
header = DataManager.load_header(i)
return unless header
draw_text(80, 30, 87, 40, header[:steps], 2)
end
def selected=(selected)
@selected = selected
end
end
class Window_SaveFileFF2 < Window_Base
def initialize(i)
super(354, 220, 190, 80)
refresh(i)
@selected = false
end
def refresh(i)
contents.clear
contents.font.color = text_color(0)
map_name(i)
end
def map_name(i)
header = DataManager.load_header(i)
return unless header
draw_text(10, 0, 180, 60, header[:name_display].name, 0)
end
def selected=(selected)
@selected = selected
end
end
class Window_SaveFileFF3 < Window_Base
def initialize(i)
super(354, 70, 190, 150)
refresh(i)
@selected = false
end
def refresh(index)
contents.clear
contents.font.color = text_color(0)
contents.font.size = 30
draw_text(10, 40, 120, 60, "Z", 0)
draw_text(10, 80, 120, 60, "X", 0)
contents.font.size = Font.default_size
draw_text(40, 40, 120, 60, "Confirma", 0)
draw_text(40, 80, 120, 60, "Volta", 0)
draw_text(0, 0, 180, 60, "Arquivo", 0)
draw_text(0, 0, 120, 60, index + 1, 2)
draw_text(125, 0, 120, 60, "/", 0)
draw_text(135, 0, 120, 60, DataManager.savefile_max, 0)
end
def selected=(selected)
@selected = selected
end
end
class Window_SaveFilehelp < Window_Base
def initialize(n)
super(354, 0, 190, 70)
n == 1 ? (draw_text(-10, 0, 190, 50, "Carregar Jogo", 1)) : draw_text(-10, 0, 190, 50, "Salvar Jogo", 1)
end
end
class Window_SaveFileconfirm < Window_Base
def initialize
super(354, 0, 190, 220)
end
def refresh(index, n, y)
contents.clear
contents.font.color = text_color(6)
if n == 1
draw_text(0, 60, 180, 60, "Reescrever esse", 0)
draw_text(0, 80, 180, 60, "Arquivo Salvo?", 0)
elsif n == 0
draw_text(0, 60, 180, 60, "Carregar esse", 0)
draw_text(0, 80, 180, 60, "Arquivo Salvo?", 0)
end
contents.font.color = text_color(0)
draw_text(40, 120, 180, 60, "Sim", 0)
draw_text(40, 140, 180, 60, "Não", 0)
y == 0 ? (draw_icon(RaizenFFSave::Icone, 10, 156)) : draw_icon(RaizenFFSave::Icone, 10, 135)
draw_text(0, 0, 180, 60, "Arquivo", 0)
draw_text(0, 0, 120, 60, index + 1, 2)
draw_text(125, 0, 120, 60, "/", 0)
draw_text(135, 0, 120, 60, DataManager.savefile_max, 0)
end
end
[box class=titlebg]
Imagens
[/box]
Original:
Spoiler
(http://images.wikia.com/finalfantasy/images/b/b4/FFVI_Quicksave_GBA.png)
Spoiler
(http://i.imgur.com/8aX7Y.png)
Spoiler
(http://i.imgur.com/UdcYX.png)
Spoiler
(http://i.imgur.com/IOA18.png)
[box class=titlebg]
Download
[/box]
Não necessário
[box class=titlebg]
Créditos e Avisos
[/box]
Raizen884 por fazer o script.
Eu usaria, mas meu jogo não tem menu então... No mais, muito bom script +Ouro.
Eu usaria caso utilizasse o VXAce! ASOAKsp '
Está legal, entendo que é para ser fiel ao original, mas se ele fosse por imagens, daria para personalizar ele legal hein! :<3:
Muito lindo cara! ;)
Adorei o script Raizen, concerteza irei usar no meu próximo projeto.
Com algumas modificações no Design vira concerteza um ótimo menu de save.
Um grande abraço.
~ Faalco
Coisa mais linda esse script, PQP!
Melhor jogo de RPG esse FF6, Top1 na IGN *-*
E seu script é fantastico, Raizen. Se permitir, posso converter ele pra VX? Claro, linhas de créditos intactas-rs, e eu posto aqui quando terminar. É que to trabalhando num fangame de Final Fantasy.
Enfim, abraços e belo trabalho Raizen!
Kisses and Goodbye!
@HM, Misty: Vlws :3, se um dia usarem o Ace quem sabe kk
@Faalco: Ah ta ai algo que eu deveria fazer, vlws a dica xD indireta que deu rs.
@Tifa: Pode sim, mas deixa eu falar algo, tipo o Ace mudou muitaa coisa o esquema de save/load, é meio complicado converter os "Scene_File", acho que será complicado de fazer pegar no VX, talvez seja mais fácil fazer um do 0, bom boa sorte tifinha e vlws o comment :]
@Raizen: sim, eu percebi quando comparei as scenes t.t ahshsuahshau. Vou tentar fazer um pro VX, como um rewrite da scene normal e pedir alguem pra revisar. Verei se faço rewrite tambem da scene equip e scene status para ficarem parecidos com FFVI. De qualquer forma, quando terminar, posto aqui em primeira mão: seu script me inspirou-rs
Um abraço!
Kisses and Goodbye!
Bom, o Script é realmente muito bom e era necessariamente aquilo que eu procurava. Já o adicionei ao meu projeto há algum tempo, mas agora adicionei uma nova função aos Menus o de utilizar 5 personagens ao mesmo tempo no grupo, isso já está feito no Menu Principal, mas tem um porém no Menu de Save aparecem apenas 4, existe alguma parte do script que eu possa editar para tornar o 5 personagem visivel?
Ixi man, em nenhum momento pensei em mais de 4 personagens... até dá e eu posso editar, mas vai meio que espremer as faces e ficar um pouco feio... :ded: Se quiser ainda.
Entendo Raizen, até porque é algo pouco tentado no maker '-'
Se puder editar eu ficaria bem feliz, você já está nos créditos então tudo que posso fazer a mais é ficar feliz AHUEHE
Mas enfim cara se puder adicionar isso eu agradeceria, mas se não der também, não tiver tempo está de boa. Você pode também me dizer o que modificar (se não for muito complexo e.e). Quanto as faces, isso eu já sei o que fazer é só diminuir o tamanho delas para isso ficar bem dividido no menu.
Certo, veja se isso resolve x.x
#=======================================================
# Final Fantasy 6 Save/Load
# Autor : Raizen
# Comunidade : www.centrorpg.com
# Save/Load baseado no jogo de GBA Final Fantasy 6
#=======================================================
module RaizenFFSave
# Icone usado para o cursor de decisão"
Icone = 10
# Quantidade de arquivos máximos
Files = 16
end
# Aqui começa o script, apenas mexa se souber o que estiver fazendo.
#==============================================================================
class Game_Party < Game_Unit
def characters_for_savefile
battle_members.collect do |actor|
[actor.character_name, actor.character_index, actor.name, actor.mhp, actor.hp, actor.mmp, actor.mp, actor.class.name, actor.level]
end
end
end
module DataManager
def self.make_save_header
header = {}
header[:characters] = $game_party.characters_for_savefile
header[:playtime_s] = $game_system.playtime_s
header[:gold] = $game_party.gold
header[:steps] = $game_party.steps
header[:name_display] = $data_mapinfos[$game_map.map_id]
header
end
def self.savefile_max
return RaizenFFSave::Files
end
end
#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de salvar e carregar.
#==============================================================================
class Scene_File < Scene_MenuBase
#--------------------------------------------------------------------------
# * Inicialização do processo
#--------------------------------------------------------------------------
def start
super
@confirmation = true
@savefile_viewport = Viewport.new
create_savefile_windows
init_selection
@savefiletime = Window_SaveFileFF1.new(@index)
@savefilemap = Window_SaveFileFF2.new(@index)
@savefileconfirm = Window_SaveFileFF3.new(@index)
@savefileconf = Window_SaveFileconfirm.new
@savefileconf.visible = false
help_window_text
@y = 0
end
#--------------------------------------------------------------------------
# * Finalização do processo
#--------------------------------------------------------------------------
def terminate
super
@savefile_viewport.dispose
@savefile_windows.each {|window| window.dispose }
end
#--------------------------------------------------------------------------
# * Atualização da tela
#--------------------------------------------------------------------------
def update
super
@savefile_windows.each {|window| window.update }
update_savefile_selection
end
#--------------------------------------------------------------------------
# * Criação da janela de ajuda.
#--------------------------------------------------------------------------
def create_help_window
@help_window = Window_Help.new(1)
@help_window.set_text(help_window_text)
end
#--------------------------------------------------------------------------
# * Aquisição do texto da janela de ajuda
#--------------------------------------------------------------------------
def help_window_text
return ""
end
#--------------------------------------------------------------------------
# * Criação das janelas dos arquivos salvos
#--------------------------------------------------------------------------
def create_savefile_windows
@savefile_windows = Array.new(item_max) do |i|
Window_SaveFile.new(savefile_height, i)
end
@savefile_windows.each {|window| window.viewport = @savefile_viewport }
end
#--------------------------------------------------------------------------
# * Inicialização da seleção
#--------------------------------------------------------------------------
def init_selection
@index = first_savefile_index
@savefile_windows[@index].selected = true
self.top_index = @index - visible_max / 2
ensure_cursor_visible
end
#--------------------------------------------------------------------------
# * Aquisição do número máximo de itens
#--------------------------------------------------------------------------
def item_max
DataManager.savefile_max
end
#--------------------------------------------------------------------------
# * Aquisição do número máximo de arquivos salvos exbidos na tela
#--------------------------------------------------------------------------
def visible_max
return 1
end
#--------------------------------------------------------------------------
# * Aquisição da altura da janela do arquivo salvo.
#--------------------------------------------------------------------------
def savefile_height
@savefile_viewport.rect.height / visible_max
end
#--------------------------------------------------------------------------
# * Aquisição do índice do primeiro arquivo selecionado
#--------------------------------------------------------------------------
def first_savefile_index
return 0
end
#--------------------------------------------------------------------------
# * Aquisição do índice atual
#--------------------------------------------------------------------------
def index
@index
end
#--------------------------------------------------------------------------
# * Aquisição do índice do topo
#--------------------------------------------------------------------------
def top_index
@savefile_viewport.oy / savefile_height
end
#--------------------------------------------------------------------------
# * Definição do índice do topo
# index : novo índice
#--------------------------------------------------------------------------
def top_index=(index)
index = 0 if index < 0
index = item_max - visible_max if index > item_max - visible_max
@savefile_viewport.oy = index * savefile_height
end
#--------------------------------------------------------------------------
# * Aquisição do último índice
#--------------------------------------------------------------------------
def bottom_index
top_index + visible_max - 1
end
#--------------------------------------------------------------------------
# * Definição do último índice
# index : novo índice
#--------------------------------------------------------------------------
def bottom_index=(index)
self.top_index = index - (visible_max - 1)
end
#--------------------------------------------------------------------------
# * Atualização da seleção dos arquivos salvos
#--------------------------------------------------------------------------
def update_savefile_selection
return on_savefile_ok if Input.trigger?(:C)
return on_savefile_cancel if Input.trigger?(:B)
update_cursor
end
#--------------------------------------------------------------------------
# * Salvando o arquivo [Confirmação]
#--------------------------------------------------------------------------
def on_savefile_ok
end
#--------------------------------------------------------------------------
# * Salvando o arquivo [Cancelamento]
#--------------------------------------------------------------------------
def on_savefile_cancel
Sound.play_cancel
if @confirmation
return_scene
else
@confirmation = true
@savefileconfirm.visible = true
@savefileconf.visible = false
@helpwindow.visible = true
@y = 0
end
end
#--------------------------------------------------------------------------
# * Atualização do cursor
#--------------------------------------------------------------------------
def update_cursor
if @confirmation
last_index = @index
cursor_down (Input.trigger?(:DOWN)) if Input.repeat?(:DOWN)
cursor_up (Input.trigger?(:UP)) if Input.repeat?(:UP)
cursor_up (Input.trigger?(:LEFT)) if Input.repeat?(:LEFT)
cursor_down (Input.trigger?(:RIGHT)) if Input.repeat?(:RIGHT)
cursor_pagedown if Input.trigger?(:R)
cursor_pageup if Input.trigger?(:L)
if @index != last_index
Sound.play_cursor
@savefiletime.refresh(@index)
@savefilemap.refresh(@index)
@savefileconfirm.refresh(@index)
@savefile_windows[last_index].selected = false
@savefile_windows[@index].selected = true
end
else
cursor_movedown if Input.trigger?(:DOWN)
cursor_moveup if Input.trigger?(:UP)
end
end
def cursor_movedown
Sound.play_cursor
@y = 0
@savefileconf.refresh(@index, @n, @y)
end
def cursor_moveup
Sound.play_cursor
@y = 1
@savefileconf.refresh(@index, @n, @y)
end
#--------------------------------------------------------------------------
# * Movimento do cursor para baixo
# wrap : cursor retornar a primeira ou ultima posição
#--------------------------------------------------------------------------
def cursor_down(wrap)
@index = (@index + 1) % item_max if @index < item_max - 1 || wrap
ensure_cursor_visible
end
#--------------------------------------------------------------------------
# * Movimento do cursor para cima
# wrap : cursor retornar a primeira ou ultima posição
#--------------------------------------------------------------------------
def cursor_up(wrap)
@index = (@index - 1 + item_max) % item_max if @index > 0 || wrap
ensure_cursor_visible
end
#--------------------------------------------------------------------------
# * Movimento do cursor uma página abaixo
#--------------------------------------------------------------------------
def cursor_pagedown
if top_index + visible_max < item_max
self.top_index += visible_max
@index = [@index + visible_max, item_max - 1].min
end
end
#--------------------------------------------------------------------------
# * Movimento do cursor uma página acima
#--------------------------------------------------------------------------
def cursor_pageup
if top_index > 0
self.top_index -= visible_max
@index = [@index - visible_max, 0].max
end
end
#--------------------------------------------------------------------------
# * Confirmação de visibilidade do cursor
#--------------------------------------------------------------------------
def ensure_cursor_visible
self.top_index = index if index < top_index
self.bottom_index = index if index > bottom_index
end
end
#==============================================================================
# ** Scene_Save
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de salvar.
#==============================================================================
class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# * Aquisição do texto da janela de ajuda
#--------------------------------------------------------------------------
def help_window_text
@helpwindow = Window_SaveFilehelp.new(0)
end
#--------------------------------------------------------------------------
# * Aquisição do índice do primeiro arquivo selecionado
#--------------------------------------------------------------------------
def first_savefile_index
DataManager.last_savefile_index
end
#--------------------------------------------------------------------------
# * Definição de arquivo salvo
#--------------------------------------------------------------------------
def on_savefile_ok
super
if @confirmation == false or DataManager.load_header(@index) == nil
if @y == 1 or DataManager.load_header(@index) == nil
if DataManager.save_game(@index)
on_save_success
else
Sound.play_buzzer
end
else
on_savefile_cancel
end
else
Sound.play_save
@savefileconfirm.visible = false
@helpwindow.visible = false
@savefileconf.visible = true
@n = 1
@savefileconf.refresh(@index, 1, 0)
@confirmation = false
end
end
#--------------------------------------------------------------------------
# * Processo de salvar aquivo bem sucedido
#--------------------------------------------------------------------------
def on_save_success
Sound.play_save
return_scene
end
end
#==============================================================================
# ** Scene_Load
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de carregar.
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# * Aquisição do texto da janela de ajuda
#--------------------------------------------------------------------------
def help_window_text
@helpwindow = Window_SaveFilehelp.new(1)
end
#--------------------------------------------------------------------------
# * Aquisição do índice do primeiro arquivo selecionado
#--------------------------------------------------------------------------
def first_savefile_index
DataManager.latest_savefile_index
end
#--------------------------------------------------------------------------
# * Definição de arquivo salvo
#--------------------------------------------------------------------------
def on_savefile_ok
super
if @confirmation == false
if @y == 0
on_savefile_cancel
else
if DataManager.load_game(@index)
on_load_success
else
Sound.play_buzzer
end
end
elsif @confirmation and DataManager.load_header(@index) != nil
Sound.play_save
@savefileconfirm.visible = false
@helpwindow.visible = false
@savefileconf.visible = true
@n = 0
@savefileconf.refresh(@index, 0, 0)
@confirmation = false
elsif DataManager.load_header(@index) == nil
Sound.play_buzzer
end
end
#--------------------------------------------------------------------------
# * Processo de carregamento aquivo bem sucedido
#--------------------------------------------------------------------------
def on_load_success
Sound.play_load
fadeout_all
$game_system.on_after_load
SceneManager.goto(Scene_Map)
end
end
#==============================================================================
# ** Window_SaveFile
#------------------------------------------------------------------------------
# Esta janela exibe os arquivos salvos nas telas de salvar e carregar.
#==============================================================================
class Window_SaveFile < Window_Base
#--------------------------------------------------------------------------
# * Variáveis públicas
#--------------------------------------------------------------------------
attr_reader :selected # Estado da seleção
#--------------------------------------------------------------------------
# * Inicialização do objeto
# height : altura
# index : índice do arquivo salvo
#--------------------------------------------------------------------------
def initialize(height, index)
super(0, index * height, Graphics.width, height)
@file_index = index
refresh
@selected = false
end
#--------------------------------------------------------------------------
# * Renovação
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_party_characters(0, 0)
end
#--------------------------------------------------------------------------
# * Desenho dos personagens do grupo
# x : coordenada X
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_party_characters(x, y)
header = DataManager.load_header(@file_index)
return unless header
header[:characters].each_with_index do |data, i|
draw_face(data[0], data[1], x, y + i * 75)
contents.font.color = text_color(0)
ind = 50
draw_text(100, 9 + i * ind, 110, 20 + i * ind, data[2] , 0)
draw_text(210, 9 + i * ind, 110, 20 + i * ind, data[7] , 0)
draw_text(240, 28 + i * ind, 40, 53 + i * ind, data[3] , 2)
draw_text(230, 28 + i * ind, 50, 53 + i * ind, "/" , 0)
draw_text(190, 28 + i * ind, 40, 53 + i * ind, data[4] , 2)
draw_text(240, 41 + i * ind, 40, 66 + i * ind, data[5] , 2)
draw_text(230, 41 + i * ind, 50, 66 + i * ind, "/" , 0)
draw_text(190, 41 + i * ind, 40, 66 + i * ind, data[6] , 2)
draw_text(190, 15 + i * ind, 40, 40 + i * ind, data[8] , 2)
contents.font.color = text_color(1)
draw_text(130, 15 + i * ind, 50, 40 + i * ind, "Level" , 1)
draw_text(130, 28 + i * ind, 40, 53 + i * ind, "HP" , 1)
draw_text(130, 41 + i * ind, 40, 66 + i * ind, "MP" , 1)
end
end
#--------------------------------------------------------------------------
# * Desenho do tempo de jogo
# x : coordenada X
# y : coordenada Y
# width : largura
# align : alinhamento
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# * Definição de estado da seleção
# selected : estado da seleção
#--------------------------------------------------------------------------
def selected=(selected)
@selected = selected
end
#--------------------------------------------------------------------------
# * Atualização do cursor
#--------------------------------------------------------------------------
end
class Window_SaveFileFF1 < Window_Base
def initialize(i)
super(354, 300, 190, 116)
refresh(i)
@selected = false
end
def refresh(i)
contents.clear
contents.font.color = text_color(1)
draw_text(0, 0, 100, 40, "Tempo" , 0)
draw_text(0, 30, 100, 40, "Passos" , 0)
draw_text(0, 60, 100, 40, "G" , 0)
contents.font.color = text_color(0)
gold(i)
steps(i)
draw_playtime(i)
end
def draw_playtime(i)
header = DataManager.load_header(i)
return unless header
draw_text(115, 0, 140, 40, header[:playtime_s], 0)
end
def gold(i)
header = DataManager.load_header(i)
return unless header
draw_text(80, 60, 87, 40, header[:gold], 2)
end
def steps(i)
header = DataManager.load_header(i)
return unless header
draw_text(80, 30, 87, 40, header[:steps], 2)
end
def selected=(selected)
@selected = selected
end
end
class Window_SaveFileFF2 < Window_Base
def initialize(i)
super(354, 220, 190, 80)
refresh(i)
@selected = false
end
def refresh(i)
contents.clear
contents.font.color = text_color(0)
map_name(i)
end
def map_name(i)
header = DataManager.load_header(i)
return unless header
draw_text(10, 0, 180, 60, header[:name_display].name, 0)
end
def selected=(selected)
@selected = selected
end
end
class Window_SaveFileFF3 < Window_Base
def initialize(i)
super(354, 70, 190, 150)
refresh(i)
@selected = false
end
def refresh(index)
contents.clear
contents.font.color = text_color(0)
contents.font.size = 30
draw_text(10, 40, 120, 60, "Z", 0)
draw_text(10, 80, 120, 60, "X", 0)
contents.font.size = Font.default_size
draw_text(40, 40, 120, 60, "Confirma", 0)
draw_text(40, 80, 120, 60, "Volta", 0)
draw_text(0, 0, 180, 60, "Arquivo", 0)
draw_text(0, 0, 120, 60, index + 1, 2)
draw_text(125, 0, 120, 60, "/", 0)
draw_text(135, 0, 120, 60, DataManager.savefile_max, 0)
end
def selected=(selected)
@selected = selected
end
end
class Window_SaveFilehelp < Window_Base
def initialize(n)
super(354, 0, 190, 70)
n == 1 ? (draw_text(-10, 0, 190, 50, "Carregar Jogo", 1)) : draw_text(-10, 0, 190, 50, "Salvar Jogo", 1)
end
end
class Window_SaveFileconfirm < Window_Base
def initialize
super(354, 0, 190, 220)
end
def refresh(index, n, y)
contents.clear
contents.font.color = text_color(6)
if n == 1
draw_text(0, 60, 180, 60, "Reescrever esse", 0)
draw_text(0, 80, 180, 60, "Arquivo Salvo?", 0)
elsif n == 0
draw_text(0, 60, 180, 60, "Carregar esse", 0)
draw_text(0, 80, 180, 60, "Arquivo Salvo?", 0)
end
contents.font.color = text_color(0)
draw_text(40, 120, 180, 60, "Sim", 0)
draw_text(40, 140, 180, 60, "Não", 0)
y == 0 ? (draw_icon(RaizenFFSave::Icone, 10, 156)) : draw_icon(RaizenFFSave::Icone, 10, 135)
draw_text(0, 0, 180, 60, "Arquivo", 0)
draw_text(0, 0, 120, 60, index + 1, 2)
draw_text(125, 0, 120, 60, "/", 0)
draw_text(135, 0, 120, 60, DataManager.savefile_max, 0)
end
end
Muito Obrigado Raizen, funcionou perfeitamente :wow:
Valeu mesmo pela disposição em me ajudar, já é a segunda vez e.e
Agora já que mencionou que talvez as faces ficassem bugadas, como eu disse eu diminui o tamanho e ficou perfeito, dê uma olhada. Depois tiro isso do tópico para não poluir:
Spoiler
(http://static.tumblr.com/eyoufb4/Ihqmify4p/sssdde.jpg)
Não precisa tirar do tópico, mas assim uma última pergunta, você precisava diminuir todas as faces do game... ou só no save?
Eu tive que diminuir as faces em todo o game, tanto para o save quanto para o menu principal senão elas ficavam trepadas umas nas outras. Quanto a isso eu tive que mudar em todo o game, não só no Save (:
Agora uma coisa que eu notei utilizando o sistema, que você não especificou, talvez por não ter notado.
É que é preciso ter a face com o mesmo nome do charset, se a face tiver um nome diferente do charset o jogo exibe um erro dizendo que a face com o nome do char não foi encontrada. Isso não importa se a face já estiver direcionada pelo Database, o sistema exige face com o charset. Não foi algo que me incomodou até foi bom para manter a padronização, mas acho que você esqueceu de especificar isso hehe. Do mais obrigado pela ajuda e pelo ótimo Script Raizen.
Não especifiquei porque não era para ser assim hsuAHSU, eu corrigi aqui, se precisar. Vou corrigir no tópico original também, agora não tem esse problema do charset e faceset.
#==============================================================================
# ** Cache
#------------------------------------------------------------------------------
# Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele.
# Para acelerar o carregamento e preservar memória, este módulo matém o
# objeto de Bitmap em uma Hash interna, permitindo que retorne objetos
# pré-existentes quando mesmo Bitmap é requerido novamente.
#==============================================================================
module Cache
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de animação
# filename : nome do arquivo
# hue : informações da alteração de tonalidade
#--------------------------------------------------------------------------
def self.animation(filename, hue)
load_bitmap("Graphics/Animations/", filename, hue)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de batalha (piso)
# filename : nome do arquivo
# hue : informações da alteração de tonalidade
#--------------------------------------------------------------------------
def self.battleback1(filename)
load_bitmap("Graphics/Battlebacks1/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de batalha (fundo)
# filename : nome do arquivo
# hue : informações da alteração de tonalidade
#--------------------------------------------------------------------------
def self.battleback2(filename)
load_bitmap("Graphics/Battlebacks2/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de batalha
# filename : nome do arquivo
# hue : informações da alteração de tonalidade
#--------------------------------------------------------------------------
def self.battler(filename, hue)
load_bitmap("Graphics/Battlers/", filename, hue)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de personagens
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.character(filename)
load_bitmap("Graphics/Characters/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de face
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.face(filename)
load_bitmap("Graphics/Faces/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de panorama (Parallax)
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.parallax(filename)
load_bitmap("Graphics/Parallaxes/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos em geral (Pictures)
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.picture(filename)
load_bitmap("Graphics/Pictures/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de sistema
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.system(filename)
load_bitmap("Graphics/System/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de tileset
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.tileset(filename)
load_bitmap("Graphics/Tilesets/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de título (fundo)
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.title1(filename)
load_bitmap("Graphics/Titles1/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos gráficos de título (quadro)
# filename : nome do arquivo
#--------------------------------------------------------------------------
def self.title2(filename)
load_bitmap("Graphics/Titles2/", filename)
end
#--------------------------------------------------------------------------
# * Carregamento dos bitmaps
# folder_name : nome da pasta
# filename : nome do arquivo
# hue : informações da alteração de tonalidade
#--------------------------------------------------------------------------
def self.load_bitmap(folder_name, filename, hue = 0)
@cache ||= {}
if filename.empty?
empty_bitmap
elsif hue == 0
normal_bitmap(folder_name + filename)
else
hue_changed_bitmap(folder_name + filename, hue)
end
end
#--------------------------------------------------------------------------
# * Criação de um bitmap vazio
#--------------------------------------------------------------------------
def self.empty_bitmap
Bitmap.new(32, 32)
end
#--------------------------------------------------------------------------
# * Criação de um bitmap normal
#--------------------------------------------------------------------------
def self.normal_bitmap(path)
@cache[path] = Bitmap.new(path) unless include?(path)
@cache[path]
end
#--------------------------------------------------------------------------
# * Criação de um bitmap com alteração de tonalidade
#--------------------------------------------------------------------------
def self.hue_changed_bitmap(path, hue)
key = [path, hue]
unless include?(key)
@cache[key] = normal_bitmap(path).clone
@cache[key].hue_change(hue)
end
@cache[key]
end
#--------------------------------------------------------------------------
# * Verificar existencia de Cache
#--------------------------------------------------------------------------
def self.include?(key)
@cache[key] && !@cache[key].disposed?
end
#--------------------------------------------------------------------------
# * Limpeza de Cache
#--------------------------------------------------------------------------
def self.clear
@cache ||= {}
@cache.clear
GC.start
end
end
Aheuhehue Eu imaginei! de qualquer forma foi bom ter ajudado nesse ponto Raizen. Eu ia comentar isso com você já há algum tempo, mas acabei esquecendo e.e, mas enfim não me atrapalhava, mas já que era algo que nem mesmo você sabia, então vou corrigir \o
Valeu Raizen.