10 dicas de desenvolvimento no RPG Maker MV

Pra você que dá os primeiros passos no popular software de desenvolvimento de RPGs, algumas dicas.
Por: Daniel Lemes
0
81

Como alguns devem ter notado, ando ausente do MB, e um dos motivos é que resolvi criar meu próprio jogo.

Sem experiência em game design (trabalhei um tempo com web design), tentei ferramentas como o Twine — até falei dele por aqui. Mas como planejava um RPG, acabei inevitavelmente no velho conhecido do público, o RPG Maker.

Já tinha lido muito sobre ele e feito uns 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 dos pixel arts, ou tiver um time de artistas, pode acreditar: será capaz de coisas espetaculares com o MV. Se nã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 48x48.
  • 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 tiver 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. Exemplo: tem um NPC que precisa interagir para liberar uma porta. Aí você conversa com ele, muda o switch para A, e a porta precisa checar se A está ligado para ser liberada. 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.

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

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.

Artigo anteriorXeno Crisis: jogo vem para Mega Drive e outras plataformas
Próximo artigoHiroyuki Takahashi e a história de Shining Force
Se não tiver conta no Memória BIT, será criada uma. Nada será publicado em seu perfil.
Se já tem conta no MBIT, faça login nela e vincule-a ao Facebook.

SEM COMENTÁRIOS

X
Todos os comentários passam por moderação antes de publicados. Se o seu for aprovado, vai aparecer em breve!

DEIXE UM COMENTÁRIO