10 dicas de desenvolvimento no RPG Maker MV

Como alguns devem ter notado, ando meio ausente e um dos motivos é que resolvi criar meu próprio jogo. Sem experiência em game design (minha área de trabalho de fato é web design, apesar de não exercer faz tempo), tentei ferramentas como o Twine — até falei dele por aqui.

Mas como planejava um RPG, acabei no velho conhecido do público, o RPG Maker.

Já tinha lido muito sobre ele e feito testes aleatórios. E estava impressionado com as várias opiniões negativas. Que jogos ficam todos iguais. Que não tem flexibilidade. Que é tudo mais do mesmo...

Se você não tiver a mínima noção de programação, nem interesse em sair dos recursos básicos, ainda assim consegue usar. E sim, seu jogo pode se enquadrar naquelas críticas sobre "produto de RPG Maker é tudo igual", como disse tempos atrás.

Mas quem liga? Será o seu jogo ganhando forma.

Com os dois pés atrás, resolvi entrar de cabeça. E a realidade é que ele funciona muito, muito bem. Talvez versões antigas, baseadas em Ruby, não fossem grande coisa, mas a mais recente (hoje é a MV, lançada em 2015), em Javascript, é excelente.

Quem sabe ao menos o básico de Javascript, também sabe do potencial que estou falando. Só ver títulos que tiveram repercussão, como To The Moon, e centenas de outros vendidos na Steam. Se você manjar de pixel art ou tiver um bom artista por perto, pode acreditar: será capaz de coisas espetaculares com o MV. Senão, abuse da criatividade e pode chegar a um resultado digno, no mínimo.

Lembrando que na versão MV houve uma série de mudanças, como:

  • aumento do tamanhos dos tiles para 48 x 48.
  • o Javascript como linguagem básica em vez de Ruby.
  • a possibilidade de exportar o projeto para Linux, Mac e Android.
  • maiores resoluções para o projeto.
  • sistema de batalha com visão lateral (mantendo a visão em primeira pessoa como opção).

Chega de apresentação, até porque se veio parar aqui, você deve saber do que estou falando. Se não, mas tem interesse, comente; estou pensando numa série sobre o assunto, se houver demanda. Ou até um site paralelo.

1. Checar switches em outros eventos

Um dos pontos negativos é não ter, por padrão, a opção de checar o estado de um interruptor (switch) de outro evento.

Situação: um NPC precisa interagir para liberar uma porta. Aí você conversa com ele, muda seu switch para A, e a porta precisa saber se A no NPC está ligado para ser desbloqueada. Use numa condicional:

$gameSelfSwitches.value([$gameMap.mapId(), EV_ID, 'SWITCH']) == true

Só substituir o EV_ID pelo identificador do evento, e o SWITCH por A, B, C ou D. Também dá pra checar interruptores em outros mapas, inserindo o identificador ali em "gameMap.mapId(AQUI)", entre aspas.

Atualização 2020: num projeto recente, essa função não funcionou de jeito nenhum ao testar um evento em outro mapa. Testei num projeto limpo e também nada - será que saiu em alguma atualização recente do RMMV? Em todo caso, há outra enxuta que faz o mesmo:

$gameSelfSwitches.value([MAP_ID,EV_ID,'SWITCH']) == true

2. Alterar switches em outros eventos

Sim, também dá pra alterar o estado do switch de outro evento. Mas precisa de um plugin, o OuterSelfSwitch, quem vem no pacote padrão, basta ativar.

Essa é a base de uso (através de Comandos de Plugin):

OuterSelfSwitch on 3 A - liga o switch A para o evento 3
OuterSelfSwitch on 4 B - liga o switch B para o evento 4
OuterSelfSwitch off 5 C - desliga o switch C para o evento 5
OuterSelfSwitch off 6 D - desliga o switch D para o evento 6
OuterSelfSwitch off all A - desliga o switch A de todos os eventos

Se preferir por script:

$gameSelfSwitches.setValue([MAP_ID,EV_ID,'SWITCH'], valor);

Onde valor é true ou false, de acordo com o que vai fazer com o switch.

3. Direcionar câmera

A câmera pode ser alterada para qualquer posição do mapa através de um script bem simples:

$gamePlayer.center($gameMap.event(9).x, $gameMap.event(9).y)

Isso centraliza a tela na coordenada 9x9y do mapa, independente de onde o jogador estiver no momento. Útil para criação de cutscenes em mapas grandes, por exemplo. Para maior controle do mapa, há plugins como o Camera Core, do SumRndmDde.

4. Checar posição de um evento

Digamos que você quer ativar um texto ou uma cutscene quando um NPC estiver em determinada posição, como a entrada de um castelo. Como conferir se ele chegou lá, se não dá pra ativar eventos pisados por outros eventos?

$gameMap.event(6).x == 14
 $gameMap.event(6).y == 8

Com duas condicionais (uma para a coordenada x e outra dentro dela, para a y), você consegue ativar uma condição quando um evento chegar ao ponto x,y do mapa.

5. Checar se alguém no party tem skill

Isso vai conferir se o líder do grupo tem a habilidade com ID 11:

$gameParty.members()[0].hasSkill(11)

Para conferir múltiplos membros, crie várias condicionais com índices de 0 a 3 (4 membros).

$gameParty.members()[0].hasSkill(11) || $gameParty.members()[1].hasSkill(11)

O sinal || é um operador lógico que equivale à condicional "ou". Exemplo: se número X é 1 OU 2, seria if (x == 1 || x == 2).

6. Checar tamanho do grupo (em batalha)

Você quer criar uma condição de batalha, mas precisa conferir primeiro o tamanho do grupo para definir se e como será aplicado.

$gameParty.battleMembers().length == 1

Isso seria uma condicional verdadeira caso seu grupo tenha apenas 1 membro. Aí é só alterar com operadores de comparação de acordo com sua necessidade.

E para checar o tamanho do grupo de inimigos?

$gameTroop.Members().length

7. Contar os turnos

Quero criar um efeito que muda de acordo com quantos turnos se passaram em combate. Como uma recompensa de acordo com a rapidez da vitória, digamos.

$gameTroop._turnCount

Retorna o número de turnos de uma batalha em andamento ou da mais recente. Dá pra contar os turnos na luta contra um chefe, por exemplo, e mudar os eventos pós-batalha. Tantas possibilidades...

8. Obter dados dos inimigos

É possível obter dados completos dos inimigos durante o combate via script.

$gameTroop.members()[0].agi

Retorna o valor da agilidade do inimigo 0 (primeiro) do bando.

Os parâmetros são: agi, atk, cev, cnt, cri, def, eva, exr, fdr, grd, hit, hp, hrg, luk, mat, mcr, mdf, mdr, mev, mhp, mmp, mp, mrf, mrg, pdr, pha, rec, tcr, tgr, tp, trg.

Para obter a quantidade de experiência recompensada pelo inimigo, use:

$gameTroop.members()[0].exp()

Para obter a quantidade de ouro recompensada, use:

$gameTroop.members()[0].gold()

Lembrando que todos esses scripts são para o primeiro membro do grupo. Quer somar a agilidade de todos pra uma operação? Só criar uma expressão e ir alterando a posição do inimigo, como [0], [1], etc. Note que se criar isso e não houver o número de inimigos que o script procurar, vai dar erro. Boa ideia seria fazer no início do combate, e na janela de criação da Troop (pra ter certeza do tamanho do bando), ou numa condicional que cheque o tamanho antes.

9. Perda de 50% de HP do jogador

Outra coisa negativa é não haver possibilidade de criar custos em HP, por exemplo ao lançar uma mágica. Plugins resolvem, mas você pode ir direto ao ponto com:

$gameParty.members()[0].setHp(Math.ceil($gameParty.members()[0].hp * 50 / 100))

Isso causa imediatamente a perda de 50% do HP do primeiro membro do grupo. Altere a expressão para outros danos. Conhecer um básico de Javascript ajuda nesse momento.

10. Checar o nível do personagem

Você quer criar um efeito super destruidor, mas só se seu ator tiver alcançado determinado nível. Ou vai criar um sistema de promoções de cargo, tipo Shining Force, em que o nível precisa ser conferido.

$gameParty.members()[0]._level

Isso retorna o nível do primeiro membro do seu grupo.

Daniel Lemes
Daniel Lemes
Fundador do MB, mais de mil artigos publicados, mais de dez anos pesquisando e escrevendo sobre games. Ex-seguista, fã de Smashing Pumpkins e Yu Suzuki.

7 COMENTÁRIOS

  1. Estou aprendendo a usar o RPGmaker, parece bom para principiantes mas não sei se vou conseguir personalizar muito o jogo, pra isso depende demais de ter ilustradores e um time, muita coisa pra uma pessoa só fazer. Mesmo assim parece bom antes de estudar outra coisa tipo Unity ou GameMaker, vale a experiência.

  2. jogar é uma coisa, programar é outra coisa e tentar juntar as duas coisas já é outra coisa!!!!kabuloso!!!! Estudei um pouco de programação, algoritmo e toda aquela matemática que ali paira e confesso...é para quem tem vontade e inspiração mesmo. Apesar que hoje em dia existem softewares e aplicativos que podem ajudar a ter criatividade em forma de gráficos e animações. De uma maneira real, a programação hoje em dia está mais divertida...porque há 10 anos atrás era outros tempos e outra tecnologia. O mundo é globlizado, a tecnologia é globalizada e tudo está sendo globalizado. Programar jogos e aplicativos, tem que ter imaginação, tempo e um pouco de influência talvez. Não sei, cada um tem a sua maneira de ver as coisas. Idéias e opiniões são bem vindas, o difícil mesmo é chegar ao objetivo final: ao jogo, software ou aplicativo em si. valeu!!!!

    • Estou estudando Python, já tinha estudado algoritmo a 15 anos atrás... Fiz um programa com 30 linhas... Sei que não é tanto mas é o bastante para RPG Maker! Tbm usei ele lá em meados de 2005 acho que era o Maker 2000.

Deixe seu comentário

Digite seu comentário!
Digite seu nome aqui

Mais recentes

Análises