Mais de 5 Tilesets no RPG Maker Vx
Por FIKZ
Por FIKZ
1º Passo: Adapte seu Tileset
Umas das mais sérias limitações de sistema é que todos os tilesets devem ter a mesma
configuração de passagem, isto é, os tiles passáveis e não passáveis devem ser os
mesmo em todos os tile sets. Se você ainda não entendeu, deixe-me exemplificar: em
um tileset você colocou uma pedra e a configurou para ser não-passável, se em outro
tileset o tile estiver preenchido com grama esse grama será também não passável. Para
lidar com o problema de forma mais simples, eu divido os tilesets em regiões como as
da imagem abaixo.
Na região cinza devem ficar os tiles não passáveis, na parte amarela ficam os tiles
passáveis e na vermelha os tiles que ficam por cima do herói. Mas claro que você pode adaptar esse template para as necessidades do seu jogo. Vou ficar devendo um template para os tilesets A.
2º Passo: Faça o mapa
Para fazer os mapas você deve fazer uma cópia do tileset e renomeá-lo para TileA1,
TileA2, TileA3, TileA4, TileA5, TileB, TileC, TileD ou TileE dependendo da camada em que
pretende usá-lo. Sempre que você quiser editar o mapa, você deve repetir esse
procedimento. Como você deve querer voltar ao mesmo mapa várias vezes você vai se ver
tendo que repetir esse procedimento chato milhares de vezes, o que é outra
desvandagem do sistema. Outra proibiçao é que você não deve jamais fazer eventos
com gráficos do tilset (embora você possa pegar o tile, transformá-lo num charset
e usá-lo).
3º Passo: Scripting
Não será muito difícil essa parte. Abra o editor de scripts e vá na classe
"Spriteset_Map". Nas linhas 36 a 49 você deve ver o seguinte:
Substiua esse segmento de código por:def create_tilemap
@tilemap = Tilemap.new(@viewport1)
@tilemap.bitmaps[0] = Cache.system("TileA1")
@tilemap.bitmaps[1] = Cache.system("TileA2")
@tilemap.bitmaps[2] = Cache.system("TileA3")
@tilemap.bitmaps[3] = Cache.system("TileA4")
@tilemap.bitmaps[4] = Cache.system("TileA5")
@tilemap.bitmaps[5] = Cache.system("TileB")
@tilemap.bitmaps[6] = Cache.system("TileC")
@tilemap.bitmaps[7] = Cache.system("TileD")
@tilemap.bitmaps[8] = Cache.system("TileE")
@tilemap.map_data = $game_map.data
@tilemap.passages = $game_map.passages
end
Como pode ver, eu só substitui as aspas por um $ antes de cada tileset,def create_tilemap
@tilemap = Tilemap.new(@viewport1)
@tilemap.bitmaps[0] = Cache.system($TileA1)
@tilemap.bitmaps[1] = Cache.system($TileA2)
@tilemap.bitmaps[2] = Cache.system($TileA3)
@tilemap.bitmaps[3] = Cache.system($TileA4)
@tilemap.bitmaps[4] = Cache.system($TileA5)
@tilemap.bitmaps[5] = Cache.system($TileB)
@tilemap.bitmaps[6] = Cache.system($TileC)
@tilemap.bitmaps[7] = Cache.system($TileD)
@tilemap.bitmaps[8] = Cache.system($TileE)
@tilemap.map_data = $game_map.data
@tilemap.passages = $game_map.passages
end
transformando-os em variáveis globais. Se você tentar rodar o jogo, vai receber uma
mensagem de erro, isso porque é preciso inciar as variáveis antes de o script ser
executado. Para isso vá na classe "Main" e no começo adicione as seguintes linhas:
Isso faz com que os tilesets no início do jogo sejam os do RTP (se você não tiver$TileA1 = "TileA1"
$TileA2 = "TileA2"
$TileA3 = "TileA3"
$TileA4 = "TileA4"
$TileA5 = "TileA5"
$TileB = "TileB"
$TileC = "TileC"
$TileD = "TileD"
$TileE = "TileE"
nenhum tileset com mesmo nome na pasta do jogo).
Agora vem o pulo do gato: coloque que a posição inicial do herói seja em um mapa vazio com um evento paralelo com os seguintes comandos:
Chamar Script (digite o código aí em baixo):
Teleport para o mapa$TileA1 = "nome_do_tileset_A1_usado_no_mapa"
$TileA2 = "nome_do_tileset_A2_usado_no_mapa"
.
.
.
$TileE = "nome_do_tileset_E_usado_no_mapa"
Pa-pum! Se você fizer isso toda vez que for fazer um teleport para outro mapa, poderá usar quantos tilesets quiser, é só mudar o nome dos tilesets quando usar o comando "Chamar Script". Mas lembre-se que o "Chamar Script" deve vir antes do teleport.
Apêndice: O Problema do Save
Um bug que o sistema tem é que, como na tela de título os tilesets sempre voltam ao ser o do RTP, quando se salvar o jogo e depois tentar carregá-lo, o mapa em que o jogo foi salvo vai ficar todo estragado. Para contornar este problema é necessário proibir que o jogo seja salvo através do menu e permitir apenas que se salve o jogo através de save points. Os save points devem ser feitos da seguinte maneira:
Fade out
Teleport para um mapa vazio
Neste mapa vazio faça o evento paralelo:
Chamar Menu de Save
Chamar Script:
$TileA1 = "nome_do_tileset_A1_usado_no_mapa"
$TileA2 = "nome_do_tileset_A2_usado_no_mapa"
.
.
.
$TileE = "nome_do_tileset_E_usado_no_mapa"
Teleport para o mapa anterior
Fate in
Pronto, apesar de ficar um pouco devagar e fazer com que cada save point precise de um mapa, o método funciona.