segunda-feira, 27 de novembro de 2017

Introdução à programação de Game Boy Advance (GBA)

Primeiramente gostaria de falar que esta é apenas uma introdução a programação de GBA e que foi totalmente baseada em alguns tutoriais da gringa que eu irei por os créditos no final do artigo, a intenção deste tutorial é ensinar a instalar o compilador "DevKit Advance" que se trata de um compilador gratuito feito por fans da plataforma, apesar de você conseguir encontrar o Dev  Kit da Nintendo na internet o mesmo possui propriedades intelectuais da Nintendo e como sempre enfatizo este blog não tem o intuito de espalhar a pirataria. Saber programar para GBA vai lhe permitir desenvolver Intros personalizadas para sua tradução (assim você não precisa modificar elementos do jogo original), Trainers para jogos, Homebrews, Tools para Romhacking, Desenvolvimento de Games, entre outros projetos úteis à cena, eu pessoalmente não sei programar sabendo apenas conceitos de lógica de programação porém da mesma forma que o tutorial do Loirak (em inglês) serviu para mim este tutorial irá servir de ponta pé inicial para quem quiser se aprofundar no assunto pois este tipo de conteúdo você não encontra em português.

O que será necessário:

  • DevKit Advance (postando a versão já configurada com os pacotes necessários para sua conveniência, esta é a Release 5 (Beta 3).)
  • Cygwin (Livraria necessária ao DevKit Advance. Link para o site oficial do instalador, escolha a versão respectiva a seu PC 32 ou 64 Bits descubra o seu aqui.)
  • MinGW (GCC, uma coleção de compiladores que também é necessária ao DevKit Advance)
  • Um editor de texto qualquer, pode ser o proprio bloco de notas do Windows ou o Notepad++
  • Arquivos de demonstração (contém alguns projetos como o Hello World em C para ser compilado) 
1. Introdução:

 No inicio da era dos consoles, programar jogos era em suma uma tarefa árdua e complicada sendo realizada principalmente por engenheiros especializados na época e este fato se deve ao fato de naqueles tempos não existir uma forma simples de programar para certos tipos de processadores restando a opção de se criar os jogos inteiramente em Assembly, uma linguagem de baixo nível nada dinâmica de se trabalhar, com isso as empresas responsáveis pelos consoles tiveram a ideia de criar os DevKits que eram basicamente compiladores específicos à plataforma que se quer programar e o que eles faziam era basicamente traduzir a linguagem usada pelo programador para a linguagem de maquina que o console entendia para ser gravada nos cartuchos.

O que o DevKit  faz é permitir que você programe facilmente o seu projeto e converta-o para a plataforma desejada. Ou seja, ele dinamiza o processo.

A linguagem que o compilador deste tutorial usa assim como a de 90% dos DevKits existentes é a linguagem C. por isso eu recomendo que você aprenda C seja para o que for, pois quase tudo que você vai fazer você consegue fazer em C, antigamente eu não tinha conhecimento de como era feito os jogos para consoles nem como os DevKits funcionavam apesar de já ter ouvido falar, isto me abriu um leque de possibilidades e o intuito é que também se abra para outras pessoas.
2. Instalação:

A parte principal e também a parte mais problemática  de todo o tutorial e que me fez perder algumas horas tentando fazer simplesmente funcionar, por isso estou simplificando ao máximo esta parte para que você já possa sair programando, é como o Loirak disse brincando em seu próprio tutorial "a parte mais difícil é começar"

Eu não vou detalhar a instalação do MinGW nem do Cygwin pois este tipo de coisa se acha facilmente no google, basicamente é aquele negocio de Next, Next, Finish salvo o MinGW  onde haverá um momento da instalação que irá aparecer uma janela com o nome "MinGW Installation Manager" que serve para escolher os pacotes a serem instalados pelo MinGW, certifique-se que os pacotes "Mingw32-base" "Mingw32-binutils" e "Mingw32-gcc" estejam todos marcados (não desmarque os outros, deixe como está) após baixarem pode fechar esta janela pois já está configurado.

Com os dois programas instalados, vamos agora para o que nos interessa a instalação o DevKit Advance, após baixado você deve copiar o arquivo "devkitadv-r5-beta-3.rar" para o diretório C:/ e extrair o arquivo como mostrado na imagem a baixo: (clique para ampliar)

Extraia no diretório C:/
Após isto deverá ficar da seguinte forma:

Ficará dessa forma
O que queremos é a pasta "devkitadv" portanto você já pode apagar o arquivo .rar e o leia-me.

Basicamente após isso o nosso DevKit já foi instalado mas ainda será necessario fazer o computador "entender" que é isto que será utilizado para compilar os arquivos, para isto você deverá ir em "Meu computador" e clicar em "Propriedades"

Iniciar>Meu computador>Propriedades.

Deverá surgir a seguinte tela:

Esta tela irá surgir.
  Clique em "Configurações avançadas do sistema"
Configurações avançadas o sistema.
Irá surgir uma tela chamada "Propriedades do sistema" na aba "Avançado" clique em "Variáveis de Ambiente..."

Variáveis de Ambiente....

Novamente outra tela irá surgir, dessa vez na parte onde está escrito "Variáveis do Sistema" você deverá procurar pela variável "Path" e clicar em "Editar..."

Edite a variável Path.
Na tela seguinte clique em "Novo" e coloque "c:\devkitadv\bin" Sem aspas no espaço que irá pedir para digitar.

Cole o diretório no campo que aparecer.

Após isso o compilador já está apto a compilar jogos de GBA, agora podemos prosseguir para a parte 3 dessa introdução.

3. Hello World 

Agora que já temos nosso compilador funcionando vamos escrever um hello world (nos arquivos de demonstração deixei alguns arquivos prontos para serem compilados para você ir testando e vendo como funciona) este é apenas um exemplo bem básico de programação em C para o GBA

Abra o seu blocos de notas ou editor de texto de preferência e digite o seguinte:


Créditos ao Loirak, o código original pode ser encontrado aqui.

Após isso você deve salvar o arquivo com o nome "hello.c", como isso varia de editor para editor não vou entrar em detalhes mas é basicamente você renomear o arquivo para "hello.c" na hora de salvar.

agora vamos compilar o nosso código, abra o bloco de notas ou um editor de sua preferencia e cole o seguinte codigo:



salve este código como "criar.bat" no mesmo diretório de onde se encontra o "hello.c", após isso dê um duplo clique em cima do "criar.bat" e veja a mágica acontecer.
Um arquivo hello.gba foi criado.
Como vocês podem ver um arquivo com o nome "hello.gba" foi criado abra-o no emulador e veja:

Um singelo "Oi"
Foi formado um "HI" na tela do emulador, mas na realidade é um pouco mais complicado que isso, este "HI" não é "texto" de verdade, o Gameboy não é como programar para um computador com Windows, se você quiser digitar um simples texto, você deve criar um alfabeto, pois a BIOS do console não contém um de referencia como é o Windows em que o texto do programa o próprio sistema se encarrega de mostrar, o que você está vendo na realidade é apenas um desenho na tela feito com linhas horizontais e verticais, tanto que se alterar o tamanho de uma delas no código veja como fica:



Ficou um pouco separado da outra linha.
Um hello world verdadeiro seria assim:

Hello world de "verdade" editado do DMA Text Display do Lupin.
E acredite, pra um hello world o código fica beeem mais extenso, e isso sem falar que além da programação você ainda deve incluir outros parâmetros específicos do Gameboy no código do programa como Mode 3, Mode 4 e etc. Tudo isso é bem documentado na gringa e você encontra navegando na internet, não vou explicar aqui pois além de exceder meu conhecimento pessoal iria fugir do conceito de introdução, nos Arquivos de demonstração contém vários exemplos para que você possa estudar também deixo no final deste artigo alguns links relevantes para o estudo de programação de GBA.

Bem por hoje é só, qualquer dúvida ou problema que esteja ao meu alcance sanar pergunte nos comentários. Espero que tenha sido de utilidade para alguém.

Fontes/links úteis:
http://www.loirak.com/gameboy/gbatutor.php
http://www.hodglim.com/articles/gbatut1.php
http://www.gbadev.org/index.php

sábado, 14 de outubro de 2017

Como Editar Imagens .Tim (ps1)

Com certeza, uma das maiores dificuldades dos Romhackers iniciantes que desejam se aventurar na tradução e edição de jogos é encontrar formas fáceis e intuitivas de interação e aprendizado das técnicas utilizadas pelos Romhackers mais avançados, o que se ver muito são tutoriais confusos e poucos ilustrados que apesar de contar com certo apoio e boas intenções dos nossos anciões dessa arte fica as vezes maçante perguntar em fóruns coisas que as vezes um simples texto poderia sanar e com isso em mente hoje trago a vocês um tutorial simples de como conseguir editar imagens no formato .Tim (formato que jogos de PlayStation usam e alguns do PlayStation 2, porém este tutorial será voltado ao ps1, apesar de crer que o principio seja o mesmo) então mãos na massa.

O que será necessário:

  • Tim2View r89 
  • Plugins para Tims no Photoshop
  • Photoshop CS3 (será necessário esta versão do Photoshop, se você possui uma mais atual terá que instalar esta se quiser editar arquivos .Tim procure no YouTube como instalar o PS CS3, este blog não compactua com pirataria) 
  • O jogo que queres editar (Vou utilizar a ROM Pepsiman (Japonese).iso como exemplo)
  • Emulador de PlayStation 1 de sua preferência.

Primeiramente antes de tudo faça o Backup de seu projeto para uma pasta que possa trabalhar a fim de não prejudicar o processo que você já fez anteriormente em seu projeto.

Primeiro de tudo vamos configurar o nosso Photoshop CS3 para que possa trabalhar com arquivos .Tim

Com o pacote de plugins para Photoshop baixado acesse o diretório de plugins de formato do Photoshop normalmente fica neste diretório

C:\Program Files (x86)\Adobe\Adobe Photoshop CS3\Plug-Ins\File Formats

E extraia os arquivos Timexpe.8be, Timfmte.8bi e TIMformatE.8BI para o diretório como mostra as imagens a baixo: (clique para ver maior)

O diretório do Photoshop CS3 inicialmente deverá estar assim

Arraste os arquivos do WinRAR (ou outro compressor que você use) para dentro do diretório do Photoshop CS3

Repare que após a extração os arquivos passarão a pertencer ao diretório do Photoshop CS3


Após isso o Photoshop CS3 já está apto a editar e salvar alterações nos seus arquivos .Tim

Agora que já podemos editar vamos então extrair uma imagem do jogo Pepsiman para poder testar 

Abra o Tim2View r89 que você baixou e deverá ser apresentado a seguinte tela: (clique para ver maior)

 
Interface do Tim2View r89


Agora selecione o submenu File na parte superior esquerda do programa e clique em "Scan File..." ou simplesmente aperte F6



Clique em "Scan File..." ou aperte F6
Escolha a ROM a ser escaneada pelo programa e clique em "Abrir"

Escolha o jogo desejado.
O programa irá vasculhar o jogo em busca de arquivos .Tim editáveis.

O Tim2View r89 irá escanear a ROM

Após a conclusão da barra do carregamento será apresentada esta tela:

Jogo Carregado.

Agora vamos explicar o funcionamento do Tim2View r89: (clique na imagem para ver maior)

Como funciona o programa
Esqueci de mencionar de que o CLUT (sigla para Colour Look-up Table) mostra a paleta da imagem.

Agora que já está tudo explicado vamos escolher uma imagem para testar, eu escolhi a imagem da produtora do jogo que aparece assim que iniciamos o jogo:
Imagem da produtora
Repare o que fizemos aqui na foto acima, Esta imagem por ser uma imagem que preenche toda a tela no inicio do  jogo não é uma imagem transparente, isso importa pois se você definir errado você irá bugar o jogo, no caso você vai ter que usar a lógica, geralmente os jogos vão usar a cor preta pra representar a transparência de uma imagem, imagens de objetos de cenário com fundo preto imagens que contem comente texto e fundo preto quase sempre são transparentes, com a pratica você entende isso sem problemas. veja os exemplos abaixo extraídos do próprio jogo:

Imagem Opaca
Imagem Transparente
Imagem Opaca
Imagem Transparente



Vocês conseguem perceber a diferença? Exportem a imagem com a configuração certa, No Transparence para imagens opacas e Black Transparence para que usam o preto como transparência, dificilmente você vai usar o Semi Transparence e o Full transparence, somente em casos bem específicos o que não é a maioria dos jogos.

também percebem que eu marquei com uma seta o quadradinho com o valor 16 em "Colors Count" apontando pra paleta, guardem isso em mente que irei explicar na hora de salvar a imagem.

Agora vamos exportar a imagem que escolhemos:

Clique com o botão direito e extraia a imagem.

Clique em cima do nome da imagem escolhida e com um clique direito do mouse escolha a opção "Extract File..." ou simplesmente aperte F2, irar abrir uma janela para salvar recomendo que mantenha o mesmo nome do arquivo e salve no mesmo diretório do jogo para evitar possíveis problemas.

Salve no mesmo diretório do jogo.

Após escolher o local clique em salvar para que possamos editar o arquivo.

Após fazer todo este processo não feche o Tim2View r89 ainda, pois ainda vamos utiliza-lo para reinserir o arquivo na ROM.

Agora abra o Photoshop CS3 e arraste o arquivo .Tim para dentro do programa ou então der um Ctrl + O e edite ao seu gosto, como Photoshop é uma ferramenta bem abrangente eu não vou focar em ensinar a usar ele pois  pois na própria internet você encontra uma gama de excelentes tutoriais de edição e você pode procurar a seu gosto apenas não mecha na resolução e nem no sistema de cores do arquivo, apenas edite elementos da imagem e caso a imagem seja "transparente" nos moldes que expliquei anteriormente evite ultrapassar o limite dos elementos da imagem pois irá bugar o jogo, veja o exemplo anterior do texto transparente:

exemplo de limite nos textos da imagem.

podemos ver que existem varias palavras como Yes, No, No Data e etc. Todas essas palavras estão contidas em um limite que o próprio jogo entende, se você ultrapassar tem grandes chances de bugar o jogo ou o texto invadir o campo de outros e talvez nem mesmo aparecer, é como se fosse um editor de Tiles comum que você já deve ter utilizado em ROMs de consoles mais simples, você sabe que não pode invadir o "quadrado" (Tile) de outro elemento.

É como no Tile Molester, você não pode invadir o Tile de outro elemento para completar o que você quer.

por isso se for testar vá fazendo backups para ver como fica, mas dai você pergunta "é possível alterar o tamanho desses limites?" sim é possível, geralmente este tipo de informação quem indica são ponteiros, editando eles ou até mesmo usando assembly é possível de alterar estes limites, porém é um conhecimento bastante avançado (além do meu atual na data de criação deste tutorial), por isso uma alternativa seria você diminuir o tamanho da fonte para caber a palavra desejada mas lembrando, cada caso é um caso e cada jogo é um jogo. Vá testando.

Faça as alterações desejadas:

Obra de arte.

Talvez você tenha reparado ao editar sua imagem que algumas cores você não consegue usar certo? isto é porque a imagem está configurada para usar a paleta que o jogo oferece, você pode alterar isto antes de exportar a imagem na mesma barrinha que eu tinha marcado com a seta e mandei vocês lembrarem (não avizei antes pra não confundir vocês), e aquilo ainda vai influenciar na parte mais importante que é na hora de salvar, dê um salvar ou um Ctrl + S e irá aparecer as seguintes opções:

Cautela nestas opções
Muita atenção nesta parte, a maioria dos erros ocorre aqui.

Vamos por partes, na parte que fala Image data modes Coloque 4 bit CLUT para imagens que aparecem 16 no Colors Count lá no Tim2View r89 e coloque 8 bit CLUT para imagens que aparecem 256 no Colors Count, No nosso exemplo a imagem que usamos aparecia 16 certo? então vamos marcar a 4 bit CLUT.

CLUT section e Pixel data section você deve manter como está pois a imagem a ser reinserida deve conter a mesma proporção da original, caso contrario bug.

E por fim nas duas ultimas caixinhas você só deve marcar Black -> Transparent Caso a imagem use o preto como transparência como expliquei lá no inicio. A nossa imagem não é transparente por tanto não vamos marcar esta caixa. A primeira caixa Except black -> Translucent é para figuras que são translucidas ou semi invisíveis exceto o preto. Isto é para casos mais específicos, não vem ao caso para a maioria dos jogos.

Veja como ficou nossa configuração:

Agora só salvar.
Pronto agora dê um OK para salvar e alteração estará feita. Agora precisamos reinserir o arquivo no jogo.

Vamos de volta ao Tim2View r89 que você minimizou (se fechou terá que procurar o arquivo e por novamente na sua opção de visualização) agora clique novamente com o botão direito do mouse em cima do nome do arquivo que você extraiu e clique em "Replace File..." ou simplesmente aperte F3.

Replace File... ou F3.
E por fim escolha o arquivo .Tim que você acabou de editar e clique em abrir:

Clique em Abrir.

Se a imagem aparecer sem nenhum Glitch no próprio programa já é um forte indicio que funcionou:

Apareceu normalmente, provavelmente funcionou.
Geralmente quando há erro no processo a imagem já aparece bugada no proprio Tim2View r89:

Aqui uma imagem que deveria ser 8 bit CLUT foi posta como 4 bit CLUT.
 No jogo então...

Podre, nem o Pepsiman quer ver isso.

Após isso a imagem já está importada e não precisa fazer mais nada pois o jogo já está editado, este programa não oferece opção de salvar, por isso cautela com o que você importa pro seu jogo sempre faça backups.

Resultado:

Excelente, sem nenhum bug.
Simples não? apesar de eu me estender bastante num processo que você faz em minutos com a pratica eu decidi aprofundar um pouco na edição de .Tim pois é um processo que você não encontra facilmente tutoriais claros na internet, por tanto fica aqui meu conhecimento que eu espero que lhe seja útil, caro leitor desde blog. Qualquer duvida que esteja ao meu alcance em responder pergunte nos comentários.