O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Sistema de save e load automático

Iniciado por math2607, 04/02/2015 às 13:52

Sistema de save e load automático
 
Criado por math2607

 
Introdução
 
     Quem nunca viu um game que você entra nele, não salva, não cria arquivos de saves nem diretórios, e quando você entra de novo, está tudo lá, salvo? Este tutorial tem a finalidade de mostrar a vocês, com simplicidade e clareza, como montar um sistema desse tipo. 
 

Let's Rock

      Antes de tudo, darei um conselho: Esse sistema funcionará muito bem em telas de Título por eventos, ou pelo menos Titles por scripts bem configuráveis. Se o load e save são automáticos, irá perder o sentido utiliza-lo em um jogo cujo o Title já possui uma opção de load. Para falar a verdade, este sistema combina muito bem em mini-games, como o meu Ace Jumpers (Subway Surfers). Dito isto, vamos começar. Aconselho criar um novo mapa, onde a engine irá verificar tudo o que será carregado. O fundo pode ser todo escuro (ou transparente), e o personagem pode começar sem gráfico. Feito isso, crie um evento, e em Condição de Inicio, coloque Início Automático. Agora crie uma condição, e nela vá na última aba e marque a opção Script, e cole o seguinte código:
 
DataManager.save_file_exists?

      Deixe a opção de Exceção ativa e clique em OK. Esse código verifica se tem algum save dentro da pasta do jogo. Dentro da Condição, clique duas vezes em <> e chame um script (na terceira aba). Dentro, cole outro script:
 
DataManager.load_game(0)

      Esse código irá carregar um jogo salvo no primeiro slot de saves. Então, a partir daqui, todo o jogo terá que ser salvo no primeiro slot. Acione uma Switch Local A. Ok, o load automático foi feito, agora em Exceção chame outro script, e cole o seguinte código:
 

      Esse código salva o jogo no primeiro slot. Agora, crie um teleport para o primeiro mapa do jogo e acione também a Switch Local A. Agora, o que resta fazer é criar uma nova página e colocar a switch local A ativada na página anterior. Simples. O que você acabou de fazer é simples. Você criou um sistema para quando ele entrar no jogo, ele vai verificar se tem algum jogo salvo. Se não tiver, ele vai salvar no primeiro slot, e vai iniciar o jogo. Se tiver, ele vai carregar o jogo salvo, sem você precisar mover o dedo. Legal né? Mas, como eu disse, fica estranho quando se usa o title da engine, pois ela já tem uma opção de load. Agora, toda vez que você quiser que o jogo seja salvo, é só chamar um script e colar o último código. Com isso dá para fazer um sisteminha de CheckPoint, como se o jogo fosse estilo Call of Duty. A seguir uma imagem de como deve ter ficado o sistema:
 
      
      Partindo desse sistema, pode-se fazer outras coisinhas muito interessantes para seu projeto. Então, veja agora algumas dicas!
 

Dicas

Dica 1: Diretório único para save.
      Essa sem dúvida é uma dica muito legal para todos. Muitos jogos (como Call of Duty) você escolhe um diretório quando iniciado o jogo, e no meio do jogo é salvo no diretório que você tinha escolhido. Exemplo, eu escolhi iniciar o jogo no slot 4, então, quando eu estiver no meio do jogo, vai dar um save automático no slot 4, sem ter que escolher o slot. Para isso, no primeiro mapa que a gente criou, dentro da condição, mude o script que esta sendo chamado para este:
 
index = DataManager.last_savefile_index
DataManager.load_game(index)

      Ele fará a mesma coisa de dar load automaticamente, porém não vai ser no primeiro slot, mas no último slot em que o jogador salvou o jogo. E em Exceção, exclua o chamar script e chame o menu de save (na terceira aba de <>). O sistema irá verificar se tem algum save. Se tiver, ele dará load no último slot no qual o jogador salvou o jogo. Se não tiver, aparecerá o menu de save, para o jogador escolher o slot. Feito isso, para dar save automático no meio do jogo, chame este script:
 
index = DataManager.last_savefile_index
DataManager.save_game(index)

      Ele salvará no último slot salvo, ou seja, no slot que foi escolhido pelo jogador no inicio de tudo.

 
Dica 2: Iniciando com estilo.
     Quem nunca viu aqueles jogos em que, quando o jogador entra pela primeira vez, ele nem vai para a tela de título, mas vai direto para o primeiro mapa do jogo? Sim, jovem padawan, é possível. Para isso, no evento criado, basta na condição, em vez de chamar um script, colocar para aparecer o título (claro, se for uma por eventos ou uma bem customizável). O evento verificará se tem algum save. Se tiver, a tela de título será exibida e então o jogador pode dar load por lá. Se não tiver, ele iniciará o jogo automaticamente. Simples não?


Dica 3: Simples, porém legal.
      Essa é bem simples. A tela de título da engine, quando iniciada, verifica se tem algum save. Se não tem, o cursor Carregar fica cinza, e não é possível clicar nele. Mas se tem, ele é liberado. Dá para fazer isso, e é só copiar essa condição que criamos no tutorial. Dentro da condição, você coloque a imagem do Carregar como a dos outros cursores. Mas, em Exceção, basta colocar ela mais acinzentada.



Considerações Finais
 
      A base do sistema foi criado por mim, porém o agora Coordenador da MRM Shiroyasha me ajudou fornecendo os códigos. Então quero agradece-lo por todos os códigos que me passou, pois sem eles nada disso seria possível. Grande abraço, e até a próxima!


Bem útil para quem não sabe mexer muito bem com script e tal.

Ficaria melhor se você colocasse as imagens de como fica o sistema, nas 1, 2 e 3. Assim fica mais fácil de se entender.