Fala pessoal, tudo bem?
Eu não estava muito certo sobre onde colocar esse tópico, é algo meio tutorial, meio discussão e meio contribuições que acho que são válidas.
Como boa parte do que vou escrever aqui é baseado na minha experiência pessoal e algumas reflexões, acho que vale ficar nessa área do fórum.
Como cheguei aqui?
Primeiro vamos para o background, eu uso o RPG Maker desde quando era o jovem Gabriel, na época era só como hobby, e comecei na versão 2k, mas nunca fiz nada sério com ele, só projetos para ganhar experiência, era só um brinquedo mesmo, mas que curiosamente fez eu gostar muito de programar (ou pelo menos da ideia de programar) e acabou influenciando na minha escolha de carreira. Quando a hora chegou decidir fazer Ciência da Computação e segui carreira acadêmica por um tempo, fazendo meu mestrado na área de IA e tendo alguns projetos publicados por aí (quer aprender programação funcional? Tem um monte de material na internet, mas se quiser, tem esse livro legal aqui que ajuda o amiguinho).
Depois de mais ou menos 10 anos de carreira na área, decidi voltar para o começo e fazer um projeto de RPG de uma ideia antiga que tinha, mas dessa vez eu sabia o que queria e que seria um projeto sério (eu to falando de Elidriel, caso não conheça, confira o tópico aqui no fórum mesmo!).
Então naturalmente trouxe minha experiência na área de computação comigo e nesses 5 anos desenvolvendo o projeto tive algumas lições que queria compartilhar, mas novamente, isso é minha experiência pessoal, não quer dizer que seja o jeito certo de fazer, mas são algumas dicas que acho que podem ajudar as pessoas com menos tempo.
Seu primeiro projeto não vai ser o jogo da sua vida
É frustrante? Talvez, mas você provavelmente não vai fazer um bom jogo no seu primeiro projeto. A parada é, não tem nada de errado com isso. O seu primeiro desenho provavelmente ficou ruim, seu primeiro código era ruim e antes de aprender a fazer um bom texto, você provavelmente escrevia bem mal também.
É natural.
Encare isso como um aprendizado (momento coach) e tente se divertir no processo. O jogo pode não ser o melhor de todos, mas é SEU.
Planejamento
Entenda o seu projeto, você não precisa ter 100% das coisas (e provavelmente nem deveria ter) previstas, mas entender o tamanho do projeto, a mensagem que você quer passar, sentimentos que você quer passar e pelo menos os pontos de interesse, são fundamentais para você não ser perder na produção.
Entregas Iterativas
Normalmente não é uma boa ideia você criar 1000 skills, ou fazer 100 mapas ou 100 inimigos antes de partir para a próxima etapa da produção do seu jogo.
Sabe o que é MUITO melhor do que ter 100 inimigos criados? É ter os 4 inimigos que estão presentes na primeira área + mapa + diálogos.
Um projeto que você pode jogar por 10 minutos, tendo meia dúzia de skills e inimigos é muito mais do que ter os seus 1000 inimigos criados.
Principalmente porque você não sabe se os 1000 inimigos vão ser necessários, você não sabe todas as skills ou mapas que vai precisar, você provavelmente tem uma ideia, mas você não sabe.
Entregas iterativas são muito melhores para o seu ciclo de desenvolvimento, você pode colher feedback mais rápido e criar coisas quando elas precisam estar ali, com você e mais pessoas jogando, fica muito mais fácil de notar se você precisa de uma skill de cura em determinado ponto, ou se os inimigos estão parecendo repetitivos em determinada região.
Normalmente nos nossos projetos nós temos um preciosismo gigante para deixar tudo perfeito, mas a verdade é que, principalmente em projetos longos, temos que evitar trabalhar em coisas que no fim, podem ser jogadas fora.
Receba Feedback o mais rápido possível
Demo, Alpha, Beta e Releases de desenvolvimento, todas essas coisas são formas diferentes de expor uma versão não final do seu jogo, quanto mais cedo você puder disponibilizar seu projeto para outras pessoas testarem e dar feedback melhor.
Nessa hora, é deixar de lado o ego e se expor. Ninguém precisa aturar gente babaca, mas tentar separar críticas ao seu jogo de críticas à você é fundamental.
O bloqueio criativo existe, mas isso não significa que o projeto vai ficar parado
Se você desenvolver o projeto de forma iterativa, você vai ter problemas que precisam de criatividade, problemas que precisam de alteração na arte, problemas de balanceamento e problemas que mecânicos, que você precisa só tirar um tempo e arrumar.
Bloqueio criativo vai acontecer em algum momento, essa é a hora de pegar as tarefas que estão na gaveta porque são "chatas" ou mecânicas demais e tirar elas da lista de TODO, porque uma hora elas precisam ser feitas.
E nisso fica outra lição, fazer o jogo é divertido, mas vão ter partes que você vai achar um saco ou que você terá menos habilidade para fazer. Aqui você tem duas escolhas: montar uma equipe ou sentar na cadeira e fazer.
Remova bloqueios
Além do bloqueio criativo, não é incomum vermos na comunidade, desenvolvedores que estão "trancados" em uma parte do projeto por algum outro motivo. Isso ocorre por diferentes causas: não tenho o gráfico X, não tenho o plugin Y, não tenho um bom efeito sonoro e por aí vai.
A verdade é que... Essas coisas não importam, você pode simplesmente continuar desenvolvendo com um placeholder, ou seja, use um gráfico que você sabe que vai substituir depois, use um efeito sonoro do RTP e depois você altera, não achou o plugin? É REALMENTE assim importante? Normalmente a resposta é não, mas caso seja de vital importância, deixe a mecânica em aberto por enquanto e siga fazendo alguma parte que não dependa dela. Em resumo, um projeto tem milhares de tarefas para fazer, se parecer que você está trancado, pega uma tarefa em outro aspecto do projeto. O que nos leva a mais um ponto.
Organize suas Tarefas
Fazer um jogo é um PROJETO, então você precisa organizar suas tarefas. Para isso, um Trello ou aplicativo similar pode te ajudar MUITO.
Apareceu um problema? Anote, nem tudo precisa interromper seu raciocínio. Continua o que você tá fazendo e quando terminar volte nessa tarefa.
Mas repito, ANOTE, porque você vai esquecer.
Parte Técnica - Algumas ajudas
Vamos falar sobre os plugins? Eles são muito legais né? Sim, são. Mas eles não são o seu jogo.
Principalmente plugins públicos e super populares. Eles facilitam a vida e podem te ajudar muito, mas um compilado de plugins públicos não vai fazer seu jogo ser nada diferente do que já existe.
Um plugin faz com que seu jogo se diferencie de jogos que usam puramente o RTP, mas ele não vai ser um diferencial de outros jogos da comunidade, afinal, todo mundo tem acesso aos plugins.
Isso é diferente nos casos onde você tem experiência em programação e faz suas próprias mecânicas, nesses casos, isso pode sim deixar seu jogo mais único.
Mas esse é o ponto, a mecânica implementada fez isso, não o plugin, entende?
A pergunta nunca deveria ser: "Qual plugin legal que tem disponível para eu usar?", mas sim, "Eu quero implementar a mecânica X, como posso fazer isso?" e se a resposta for um plugin, ótimo.
Aliás, falando de plugins, se você pretende disponibilizar seu jogo em mais de um idioma, coloque um mecanismo para isso o mais cedo possível, isso vai te ajudar muito, tem vários plugins que fazem esse trabalho, escolha um e vai fundo!
Últimas Dicas
Faça coisas reutilizáveis. Principalmente em projetos longos. Você vai precisar alterar alguma coisa e quanto mais fácil de dar manutenção, melhor.
Para fazer isso, eventos comuns são um bom aliado.
Quer fazer um teleporte customizado? Não coloque a lógica repetida em 300 eventos, crie um evento comum e simplesmente chame ele.
No futuro, se você quiser alterar o teleporte, você altera o evento comum e tã dã, todos os teleportes do seu projeto foram alterados.
Use essa lógica para todas as funcionalidades que repetem, de verdade. Se você não está conseguindo replicar, provavelmente você ainda precisa estudar variáveis, switches ou algum conceito básico, continue praticando, mas tente sempre que puder, mirar nisso: não copie e cole eventos ou código, dê um jeito de reutilizá-los.
Nessa linha de reutilizar coisas, não use fórmula de danos em suas skills direto pelo banco de dados! Mas então como? Simples, no local da fórmula de dano, chame uma função JavaScript, por exemplo, ao invés de colocar: "4 * a.atk - 2* b.def", use: MeusCalculosDeDano.calculoParaDanoFisico(4, a, 2, b ,item), ou qualquer outro nome de função que queira usar. O ponto é, utilize as mesmas funções para os cálculos de danos que sejam semelhantes (uma para danos físicos, uma para danos mágicos, uma para cura e etc), dessa forma, se você precisar rebalancear seu jogo (acredite, você vai precisar), basta alterar a fórmula em algumas funções e pronto!
Todas estarão atualizadas. Vale lembrar que dei um exemplo para função, mas use quanto e quais parâmetros achar que precise, foque na ideia, não na implementação sugerida.
Outro ponto importante: várias funcionalidades do RPG Maker não são disponíveis em eventos, mas você pode interagir com isso usando JavaScript. Por exemplo, você pode acessar switches locais, através de qualquer evento via JS. Com poucas linhas de código você pode inserir a funcionalidade de variáveis locais que também são bem úteis.
Precisa de qualquer coisa baseada em tempo (Sistema de plantação, respawns e etc)? Utilize $gameSystem.playtime(), isso irá retornar o tempo de jogo do jogador em frames, isso é bastante útil para criar comparações tempo, onde você salva o valor de playtime em alguma varíavel quando a ação inicial ocorre (ex: plantou uma semente) e de tempos em tempos você pode rechecar comparando com o valor de playtime atual, isso vai fazer com que você consiga contar o tempo da semente plantada, mesmo quando o jogador estiver fora de qualquer mapa, além de não precisar manter um evento comum em paralelo para contar isso.
Finalizando
Nem em todo mundo vai gostar do seu jogo e tá tudo bem.
Isso serve para qualquer projeto desenvolvido por qualquer pessoa, a vida é assim.
----------------------------
EDIT: Esqueci de mencionar que esse post veio de uma conversa no WhatsApp e eu só sentei e saí escrevendo, então devo ter esquecido uma porção de coisas.
----------------------------
Não leve o que as outras pessoas escrevem ou digam tão a sério, isso vale para tudo, inclusive para esse post. Eu posso e provavelmente vou tá errado em um ponto ou outro, tenta pegar o que vai te ajudar e deixar de lado o que não vai. E ah, se divirta no processo, é importante!
Eu não estava muito certo sobre onde colocar esse tópico, é algo meio tutorial, meio discussão e meio contribuições que acho que são válidas.
Como boa parte do que vou escrever aqui é baseado na minha experiência pessoal e algumas reflexões, acho que vale ficar nessa área do fórum.
Como cheguei aqui?
Primeiro vamos para o background, eu uso o RPG Maker desde quando era o jovem Gabriel, na época era só como hobby, e comecei na versão 2k, mas nunca fiz nada sério com ele, só projetos para ganhar experiência, era só um brinquedo mesmo, mas que curiosamente fez eu gostar muito de programar (ou pelo menos da ideia de programar) e acabou influenciando na minha escolha de carreira. Quando a hora chegou decidir fazer Ciência da Computação e segui carreira acadêmica por um tempo, fazendo meu mestrado na área de IA e tendo alguns projetos publicados por aí (quer aprender programação funcional? Tem um monte de material na internet, mas se quiser, tem esse livro legal aqui que ajuda o amiguinho).
Depois de mais ou menos 10 anos de carreira na área, decidi voltar para o começo e fazer um projeto de RPG de uma ideia antiga que tinha, mas dessa vez eu sabia o que queria e que seria um projeto sério (eu to falando de Elidriel, caso não conheça, confira o tópico aqui no fórum mesmo!).
Então naturalmente trouxe minha experiência na área de computação comigo e nesses 5 anos desenvolvendo o projeto tive algumas lições que queria compartilhar, mas novamente, isso é minha experiência pessoal, não quer dizer que seja o jeito certo de fazer, mas são algumas dicas que acho que podem ajudar as pessoas com menos tempo.
Seu primeiro projeto não vai ser o jogo da sua vida
É frustrante? Talvez, mas você provavelmente não vai fazer um bom jogo no seu primeiro projeto. A parada é, não tem nada de errado com isso. O seu primeiro desenho provavelmente ficou ruim, seu primeiro código era ruim e antes de aprender a fazer um bom texto, você provavelmente escrevia bem mal também.
É natural.
Encare isso como um aprendizado (momento coach) e tente se divertir no processo. O jogo pode não ser o melhor de todos, mas é SEU.
Planejamento
Entenda o seu projeto, você não precisa ter 100% das coisas (e provavelmente nem deveria ter) previstas, mas entender o tamanho do projeto, a mensagem que você quer passar, sentimentos que você quer passar e pelo menos os pontos de interesse, são fundamentais para você não ser perder na produção.
Entregas Iterativas
Normalmente não é uma boa ideia você criar 1000 skills, ou fazer 100 mapas ou 100 inimigos antes de partir para a próxima etapa da produção do seu jogo.
Sabe o que é MUITO melhor do que ter 100 inimigos criados? É ter os 4 inimigos que estão presentes na primeira área + mapa + diálogos.
Um projeto que você pode jogar por 10 minutos, tendo meia dúzia de skills e inimigos é muito mais do que ter os seus 1000 inimigos criados.
Principalmente porque você não sabe se os 1000 inimigos vão ser necessários, você não sabe todas as skills ou mapas que vai precisar, você provavelmente tem uma ideia, mas você não sabe.
Entregas iterativas são muito melhores para o seu ciclo de desenvolvimento, você pode colher feedback mais rápido e criar coisas quando elas precisam estar ali, com você e mais pessoas jogando, fica muito mais fácil de notar se você precisa de uma skill de cura em determinado ponto, ou se os inimigos estão parecendo repetitivos em determinada região.
Normalmente nos nossos projetos nós temos um preciosismo gigante para deixar tudo perfeito, mas a verdade é que, principalmente em projetos longos, temos que evitar trabalhar em coisas que no fim, podem ser jogadas fora.
Receba Feedback o mais rápido possível
Demo, Alpha, Beta e Releases de desenvolvimento, todas essas coisas são formas diferentes de expor uma versão não final do seu jogo, quanto mais cedo você puder disponibilizar seu projeto para outras pessoas testarem e dar feedback melhor.
Nessa hora, é deixar de lado o ego e se expor. Ninguém precisa aturar gente babaca, mas tentar separar críticas ao seu jogo de críticas à você é fundamental.
O bloqueio criativo existe, mas isso não significa que o projeto vai ficar parado
Se você desenvolver o projeto de forma iterativa, você vai ter problemas que precisam de criatividade, problemas que precisam de alteração na arte, problemas de balanceamento e problemas que mecânicos, que você precisa só tirar um tempo e arrumar.
Bloqueio criativo vai acontecer em algum momento, essa é a hora de pegar as tarefas que estão na gaveta porque são "chatas" ou mecânicas demais e tirar elas da lista de TODO, porque uma hora elas precisam ser feitas.
E nisso fica outra lição, fazer o jogo é divertido, mas vão ter partes que você vai achar um saco ou que você terá menos habilidade para fazer. Aqui você tem duas escolhas: montar uma equipe ou sentar na cadeira e fazer.
Remova bloqueios
Além do bloqueio criativo, não é incomum vermos na comunidade, desenvolvedores que estão "trancados" em uma parte do projeto por algum outro motivo. Isso ocorre por diferentes causas: não tenho o gráfico X, não tenho o plugin Y, não tenho um bom efeito sonoro e por aí vai.
A verdade é que... Essas coisas não importam, você pode simplesmente continuar desenvolvendo com um placeholder, ou seja, use um gráfico que você sabe que vai substituir depois, use um efeito sonoro do RTP e depois você altera, não achou o plugin? É REALMENTE assim importante? Normalmente a resposta é não, mas caso seja de vital importância, deixe a mecânica em aberto por enquanto e siga fazendo alguma parte que não dependa dela. Em resumo, um projeto tem milhares de tarefas para fazer, se parecer que você está trancado, pega uma tarefa em outro aspecto do projeto. O que nos leva a mais um ponto.
Organize suas Tarefas
Fazer um jogo é um PROJETO, então você precisa organizar suas tarefas. Para isso, um Trello ou aplicativo similar pode te ajudar MUITO.
Apareceu um problema? Anote, nem tudo precisa interromper seu raciocínio. Continua o que você tá fazendo e quando terminar volte nessa tarefa.
Mas repito, ANOTE, porque você vai esquecer.
Parte Técnica - Algumas ajudas
Vamos falar sobre os plugins? Eles são muito legais né? Sim, são. Mas eles não são o seu jogo.
Principalmente plugins públicos e super populares. Eles facilitam a vida e podem te ajudar muito, mas um compilado de plugins públicos não vai fazer seu jogo ser nada diferente do que já existe.
Um plugin faz com que seu jogo se diferencie de jogos que usam puramente o RTP, mas ele não vai ser um diferencial de outros jogos da comunidade, afinal, todo mundo tem acesso aos plugins.
Isso é diferente nos casos onde você tem experiência em programação e faz suas próprias mecânicas, nesses casos, isso pode sim deixar seu jogo mais único.
Mas esse é o ponto, a mecânica implementada fez isso, não o plugin, entende?
A pergunta nunca deveria ser: "Qual plugin legal que tem disponível para eu usar?", mas sim, "Eu quero implementar a mecânica X, como posso fazer isso?" e se a resposta for um plugin, ótimo.
Aliás, falando de plugins, se você pretende disponibilizar seu jogo em mais de um idioma, coloque um mecanismo para isso o mais cedo possível, isso vai te ajudar muito, tem vários plugins que fazem esse trabalho, escolha um e vai fundo!
Últimas Dicas
Faça coisas reutilizáveis. Principalmente em projetos longos. Você vai precisar alterar alguma coisa e quanto mais fácil de dar manutenção, melhor.
Para fazer isso, eventos comuns são um bom aliado.
Quer fazer um teleporte customizado? Não coloque a lógica repetida em 300 eventos, crie um evento comum e simplesmente chame ele.
No futuro, se você quiser alterar o teleporte, você altera o evento comum e tã dã, todos os teleportes do seu projeto foram alterados.
Use essa lógica para todas as funcionalidades que repetem, de verdade. Se você não está conseguindo replicar, provavelmente você ainda precisa estudar variáveis, switches ou algum conceito básico, continue praticando, mas tente sempre que puder, mirar nisso: não copie e cole eventos ou código, dê um jeito de reutilizá-los.
Nessa linha de reutilizar coisas, não use fórmula de danos em suas skills direto pelo banco de dados! Mas então como? Simples, no local da fórmula de dano, chame uma função JavaScript, por exemplo, ao invés de colocar: "4 * a.atk - 2* b.def", use: MeusCalculosDeDano.calculoParaDanoFisico(4, a, 2, b ,item), ou qualquer outro nome de função que queira usar. O ponto é, utilize as mesmas funções para os cálculos de danos que sejam semelhantes (uma para danos físicos, uma para danos mágicos, uma para cura e etc), dessa forma, se você precisar rebalancear seu jogo (acredite, você vai precisar), basta alterar a fórmula em algumas funções e pronto!
Todas estarão atualizadas. Vale lembrar que dei um exemplo para função, mas use quanto e quais parâmetros achar que precise, foque na ideia, não na implementação sugerida.
Outro ponto importante: várias funcionalidades do RPG Maker não são disponíveis em eventos, mas você pode interagir com isso usando JavaScript. Por exemplo, você pode acessar switches locais, através de qualquer evento via JS. Com poucas linhas de código você pode inserir a funcionalidade de variáveis locais que também são bem úteis.
Precisa de qualquer coisa baseada em tempo (Sistema de plantação, respawns e etc)? Utilize $gameSystem.playtime(), isso irá retornar o tempo de jogo do jogador em frames, isso é bastante útil para criar comparações tempo, onde você salva o valor de playtime em alguma varíavel quando a ação inicial ocorre (ex: plantou uma semente) e de tempos em tempos você pode rechecar comparando com o valor de playtime atual, isso vai fazer com que você consiga contar o tempo da semente plantada, mesmo quando o jogador estiver fora de qualquer mapa, além de não precisar manter um evento comum em paralelo para contar isso.
Finalizando
Nem em todo mundo vai gostar do seu jogo e tá tudo bem.
Isso serve para qualquer projeto desenvolvido por qualquer pessoa, a vida é assim.
----------------------------
EDIT: Esqueci de mencionar que esse post veio de uma conversa no WhatsApp e eu só sentei e saí escrevendo, então devo ter esquecido uma porção de coisas.
----------------------------
Não leve o que as outras pessoas escrevem ou digam tão a sério, isso vale para tudo, inclusive para esse post. Eu posso e provavelmente vou tá errado em um ponto ou outro, tenta pegar o que vai te ajudar e deixar de lado o que não vai. E ah, se divirta no processo, é importante!
Última edição: