Notas de InstalaçãoEste programa necessita do Java Runtime Environment (JRE) versão 1.5.0 ou mais recente (a versão usada durante o desenvolvimento foi a 1.5.1), o download do mesmo pode ser feito no site java.sun.com. Copie o arquivo zipado do Tile Molester para um novo diretório. Extraia os arquivos (faça de modo que preserve a estrutura de diretórios). Agora você pode rodar o Tile Molester com (por exemplo) um duplo clique no tm.jar. Algumas pessoas tiveram problemas para rodar o Tile Molester porque os arquivos JAR não estavam associados ao Java Runtime Environment em sua máquina virtual; ao invés disso, estavam tipicamente associados a um programa de compressão (parece que isso acontece principalmente no Windows (só?), com usuários, por exemplo, do WinZip). Se você não desejar mudar a configuração de associação no programa, você pode: 1) rodar o Tile Molester por linha de comando, estando no diretório raiz do Tile Molester execute o comando java -jar tm.jar, ou 2) ponha esse mesmo comando num arquivo batch e salve no diretório raiz do Tile Molester. Dê um duplo clique nesse arquivo e ele fará a mágica. O que há de novov0.16:
v0.15a:
IntroduçãoTile Molester, ou TM para encurtar, é um programa que facilita a visualização e edição de dados de gráficos raw; isso é, gráficos presentes na maioria dos arquivos binários, onde geralmente não se tem inicialmente o conhecimento da localização e/ou formato dos gráficos. A área principal de aplicação do programa são os binários de console de vídeo game. Na maioria dos casos, esses arquivos contém uma larga variedade de dados, não apenas gráficos, mas também os dados de som e o código do jogo também estão presentes. Podem ser entremeadas coleções de dados em um mesmo arquivo, de qualquer tipo imaginável, isso depende das restrições do hardware/software do ambiente de execução intencionado, assim como também as decisões tomadas pelos produtores do binário (os desenvolvedores). TM é um tipo de explorador visual de tais arquivos, ele permite interpretar o conteúdo desses arquivos e mostrá-los em uma variedade de modos. Lendo o arquivo e adaptando a configuração do interpretador, os dados binários que corresponde aos gráficos podem ficar visíveis da forma em que foram planejados, e editável para a satisfação do usuário. ArquiteturaTile Molester foi projetado para ser tão independente de formatos quanto possível. Isso tem relação com os formatos de gráfico, formatos de arquivos e formatos de paleta. A entidade básica e fundamental que abastece a funcionalidade do TM, é que os "codecs gráficos" foram misturados. Foi posto, simplesmente, um codec gráfico no Tile Molester que é uma definição de uma grande variedade de dados (mais especificamente, uma matriz de bytes) que serão transformados (decodificados) em uma grade de pixels (ou tile), e de pixels de volta para dados (codificado). Em outras palavras, são especificações de formatos de gráficos, são precisamente as informações que o Tile Molester precisa ter em ordem para dar suporte a visualização e edição de um formato em particular. Não há nenhum código de formato dentro do Tile Molester; todos os formatos são definidos em um arquivo de código externo que é lido durante o carregamento do programa. O arquivo de código que vem com esta distribuição do programa contém definições de vários formatos gráficos "padrão" que são bem conhecidos e documentados. Porém, o usuário também tem a possibilidade de editar o arquivo de código e configurar/adicionar outros formatos. Além de definir e descrever codecs gráficos, eles podem ser "puxados" pela extensão do arquivo (filtro) usada no dialogo "abrir arquivo" no Tile Molester. Ao carregar um arquivo com uma determinada extensão, o Tile Molester trocará automaticamente para o modo gráfico associado àquela extensão. Além disso, podem ser registrados os "file listeners" para restringir vários formatos de arquivo. Um "file listener" provê a detecção de um formato de arquivo em particular, e é possível o processamento de dados desse arquivo enquanto é carregado e/ou salvo pelo Tile Molester. Por exemplo, muitos formatos têm cabeçalhos (headers) com campos que deveriam ser atualizados depois que os dados fossem modificados (como checksums). Outros formatos contém dados intercalados; o file listener "desintercala" os dados enquanto carrega, de forma que fiquem visíveis, e "reintercala" quando o arquivo é salvo. Os formatos das paleta e sua associação de extensão de arquivo são controlados de forma muito similar a dos filtro de arquivos. Podem ser definidos o local, o tamanho e o formato de dados da paleta dentro de um arquivo de uma determinada extensão, os dados são automaticamente processados e então a paleta é retirada desse arquivo pelo Tile Molester. A separação das definições de gráficos e de formato de arquivo do programa dá ao Tile Molester uma significativa flexibilidade para lidar com uma grande variedade de arquivos e formatos. Formatos gráficos, de arquivos, e de paletas podem ser definidos, alterados, removidos e adicionados sem necessidade de mudanças na programação do Tile Molester. A figura 1 ilustra a idéia geral por trás
dos codecs gráficos. Uma família de formatos é um grupo de formatos gráficos que têm uma coleção de atributos em comum. Um codec genérico para tal família é um codificador/decodificador gráfico que pode ser configurado para suportar qualquer membro da mesma. Um formato específico é um membro da família. Podemos chegar a tal membro atribuindo uma coleção de atributos com valores específicos. Finalmente, um codec específico pode ser construído fundindo uma descrição do formato específico com o codec genérico. Segue um exemplo na Figura 2. Como utilizarO programa é propositalmente bem parecido com programas como Microsoft Paint e JASC Paintshop Pro em termos de administração geral de arquivo e edição de gráfico. Vou supor que o usuário já teve alguma experiência com estes ou programas similares, e por essa razão não incluirei instruções de uso "Para Leigos". (Caso algum leigo leia isto: Pode demorar um pouco até que eu tenha a verba e os fundos necessários para publicar "Tile Molester Para Leigos" -- tenham paciência.) Eu percebi que essa seção é muito resumida, e será ampliada uma vez que eu receba avaliação relativa à dificuldade em usar/acessar as funcionalidades do Tile Molester. O melhor modo para aprender agora mesmo sobre as características do programa é fazer bagunça e errar (ou fazer perguntas ao desenvolvedor). Pesquisando o arquivo Use o slider (aquela seta que você pode deslizar para cima ou para baixo) no lado esquerdo da janela de arquivo, você poderá usar também os botões da barra de ferramentas ou o teclado. Como mencionado, a maioria dos binários contém mais do que apenas dados gráficos, você terá que pesquisar em grande parte do arquivo antes de encontrar o ouro. Dados gráficos (não comprimidos) são geralmente muito fáceis de encontrar. A estratégia que eu uso é ir rolando rapidamente pelo arquivo usando o slider, tomar nota de manchas interessantes, e então mudar para outros modos de exibição até que (esperançosamente) algo interessante se revele. Mudando o tamanho do quadro de tiles Muitas vezes é necessário mudar o número de colunas e de linhas que são exibidas para que o gráfico possa ser mostrado corretamente, por exemplo se um pedaço do gráfico tiver o comprimento de de oito tiles de largura, você precisará arrumar as dimensões do quadro de tiles adequadamente (caso contrário os gráficos parecerão adulterados). Isso pode ser feito na caixa de diálogo em Imagem > Tamanho do quadro... ou aumentado através dos botões da barra de ferramentas. As teclas de atalho no Teclado para isso são Shift+ Cima|Baixo|Esquerda|Direita. Explicação sobre os modos 1-D e 2-D No menu Visualizar > Modo, você pode selecionar entre os modos 1 Dimensão (1-D) ou 2 Dimensões (2-D). Isso serve para facilitar a visualização de respectivamente os modos gráficos de tile individual e "bitmapped". No modo 1-D, os dados são interpretados como uma sucessão de bitmaps individuais cada um com o tamanho de 8x8 pixels; um por um esses bitmaps (tiles) de 8x8 são armazenado na memória. No modo 2-D, os dados são interpretadora como full bitmaps onde depois cada scanline é armazenado um após o outro na memória. O modo 1-D é mais comum em consoles com pouca memória para gráficos, ou seja, os mais antigos. O modo 2-D é encontrado em consoles cuja a memória para gráficos são grandes e possuem alta resolução, o que virou norma hoje em dia. Versões futuras do TM serão voltadas mais provavelmente para estes sistemas; agora mesmo é um problema que esse tais modos só possam ser vistos com uma resolução horizontal que é um múltiplo de oito. (Mas se eu removesse esta "característica", o programa realmente não seria um Tile Molester, fala sério. : -]) Dividindo o quadro de tiles em blocos Às vezes é muito útil poder dividir a grade de tiles em regiões menores de tiles adjacentes, ou blocos. Estas "sub-grades" se tornam as unidades de exibição. Você pode selecionar e modificar as dimensões dos blocos na caixa de diálogo em Visualizar > Tamanho dos blocos > Definir.... Por exemplo, se você determinou que o arquivo que você está editando contém umas séries de bitmaps cada um com o tamanho de 4x4 tiles, você poderá modificar esse tamanho, adequando o tamanho do bloco e pode "juntar" esses tiles numa quantidade desejada um ao lado do outro redimensionando o quadro de tiles. A Figura 3 ilustra a idéia. (aqui as grades de blocos e tiles estão habilitadas para mostrar os limites entre eles. Quando você modificar o tamanho do bloco este ficará fixo quando você redimensionar o quadro de tiles. Se você desejar que o bloco seja do mesmo tamanho do quadro de tiles (i.e. trate o quadro inteiro como uma imagem que é a ação padrão), selecione a opção Quadro inteiro no menu Visualizar > Tamanho dos blocos. Blocos de ordem intercalada Pelo o que eu sei, isto só é útil para trabalhar com certos formatos 1-D, mas ainda assim é muito útil. Basicamente, os tiles são reordenados dentro de cada bloco como ilustrado nesta figura: Portanto no modo intercalado, em vez dos tiles que serem exibidos simplesmente da esquerda para direita, eles serão exibidos em um tipo de padrão de ziguezague, ou mais formalmente, um par de linhas sucessivas em um bloco, a primeira linha contém os tiles pares (0, 2, 4,...) enquanto a segunda linha contém os tiles ímpares (1, 3, 5,...). Isto realiza o efeito perfeito para exibir corretamente tiles com o tamanho de 8x16 pixels, que era um formato popular para sprites em alguns consoles (NES, Game Boy,...). Para acessar essa opção você deve habilitar Visualizar > Blocos de ordem intercalada. A figura 5 ilustra o impacto dramático que habilitar Blocos de ordem intercalada pode provocar nos gráficos que utilizam este formato. Mudando o codec gráfico Como foi mencionado, quando você abre um arquivo para visualizar/editar, o Tile Molester tenta adivinhar o modo gráfico correto baseado na extensão do nome do arquivo. Porém, pode acontecer de ser necessário mudar manualmente o codec usado para exibir gráficos. Isto ou pode ser feito no menu Visualizar >Modo ou apertando TAB ou Shift+TAB respectivamente para avançar ou voltar, os codecs instalados. Em consoles mais antigos, havia geralmente um único formato gráficos por console, então mudar o codec de tiles não era necessário uma vez que aquele formato foi estabelecido. Mas nos consoles mais novos, há freqüentemente uma variedade de formatos usados; por exemplo, os gráficos no Nintendo 64 do jogo "Zelda: Ocarina of Time" variam de 4-bits à 32-bits. Assim embora o Tile Molester padronize a exibição de arquivos de N64, digamos, no modo 16-bit ARGB, não pense que que é o único modo gráfico que você achará no N64. Marcadores Um marcador registra a maioria das informações do estado visual do momento em que foi criado, inclusive o offset do arquivo, modo gráfico, configuração de bloco e largura e altura do quadro. Você pode restabelecer essas configurações mais tarde simplesmente selecionando o marcador apropriado do menu Navegar. Os marcadores podem ser organizados hierarquicamente em diretórios (pastas). Importando paletas internas Paletas podem ser referenciadas ou podem ser extraídas diretamente do arquivo que você está editando pela caixa de diálogo Paleta > Importar de... > Deste arquivo. Sendo assim se você souber o local, tamanho e formato de uma paleta dentro de um arquivo, você poderá especificar isto aqui. (mostrar onde se encontram tais dados vai além da abrangência deste documento, e fora que pode variar muito de um tipo de arquivo para o outro). O checkbox "Copiar" na caixa de diálogo de importação, especifíca se os dados devem ser copiados do arquivo ou se somente devem ser referenciados. Se forem referenciados, então qualquer mudança nos dados da paleta também afetarão os dados no arquivo. A administração de paleta é, de certo modo, semelhante a dos marcadores. Se você criou ou importou uma paleta e quer manter suas informações/dados em uma base permanente, selecione Paleta > Adicionar às paletas. Arquivos de recurso Para cada arquivo que você abre, é criado um arquivo de recurso correspondente que contém os marcadores e paletas gravadas para esse arquivo. Estes arquivos de recuso, que estão no formato XML, são armazenados na pasta resources. Quando você abre um arquivo, o Tile Molester automaticamente carrega o arquivo de recurso associado a ele. Exportar e importar bitmaps ... pode ser feito do menu Editar: Exportar e Importar, respectivamente. Você pode salvar e carregar bitmaps de uma variedade de formatos. Depois de exportar um grande pedaço de gráficos em um bitmap, você pode editá-lo em um editor de gráfico mais poderoso e pode importá-lo novamente para o Tile Molester quando estiver satisfeito. Configurando o arquivo de especificações (Specs)A seção abaixo é principalmente para usuários avançados que desejam estender suporte de formatos no Tile Molester. As especificações do Tile Molester são armazenadas no arquivo tmspec.xml que está no mesmo diretório do arquivo tm.jar. As especificações são escritas em XML (Extensible Markup Language). Com ela é possível escrever front-ends dos quais seu conteúdo possa ser lido, modificado e gravado de um modo mais amigável ao usuário, apesar desta não ter sido uma prioridade durante o estágio de desenvolvimento da aplicação. Portando, você precisará estar familiarizado com XML para configurar os formatos de gráficos, extensões de arquivo e tal. O esquema do arquivo de especificação é assim: - <tmspec> São explicados cada tag "principal" e subtags permitidas em detalhes a seguir. Descrição: Atributos: Subtags: Exemplo: <directcolor id="CF00"
bpp="15"
rmask="001F"
gmask="03E0"
bmask="7C00"> Descrição: Atributos: Subtags: Exemplo: Descrição: Atributos: Subtags: Exemplo: Descrição: Atributos: Subtags: Exemplo: Descrição: Atributos: Subtags: Exemplo: compositetile Descrição: Atributos: Subtags: Exemplo: Descrição: Atributos: Subtags: Exemplo: Descrição: Atributos: Subtags: Exemplo: Descrição: Atributos: Subtags: Nenhuma. Exemplo: Observações: A estrutura de especificação e tags não estão finalizadas e podem mudar em versões futuras. Sugestões a esse respeito serão bem-vindas. Não altere as especificações se você não entendeu os pecs. Escrevendo File ListenersEscrever um file listener, pode ser feito adicionando subclasses da classe abstrata TMFileListener que se encontra no diretório raiz da distribuição de código de fonte do programa. Os seguintes métodos devem ser implementados: public boolean doFormatDetect(final byte[] data, String extension): Pega uma matriz (array) de bytes que são o conteúdo do
arquivo, e extensão de arquivo em letras minúsculas; retornando
true (verdadeiro) se os dados e extensão obedecem o (s) formato(s)
que o file listener suporta, e false (falso) caso contrário.
(Você pode escolher ignorar a extensão se os próprios
dados sem dúvida podem comprovar que são do formato correto;
porém, isto geralmente não é recomendado).
// verificar
extensão public void fileLoaded(byte[] data, String extension): Invocado após o arquivo ser carregado. Data (dados) são o conteúdo do arquivo; extension é a extensão em letras minúsculas do nome do arquivo. Este método só é invocado quando doFormatDetect(data, extension) retornar true (verdadeiro). public void fileSaving(byte[] data, String extension): Invocado antes do arquivo ser salvo. Os parâmetros são iguais do método fileLoaded . Uma vez que ofile listener foi compilado, deve ser posto no diretório raiz do Tile Molester e registrado na seção <filelisteners> do arquivo de especificação (tmspec.xml). O file listener iniciará eventos receptores da próxima vez que o Tile Molester for inciado. Só é permitido que um file listener processe um arquivo em particular. A ordem de como o file listener está definido no arquivo de especificação define a ordem que o Tile Molester procurará um file listener quando um arquivo for carregado. Assim que um file listener for encontrado, retornará true (verdadeiro) em doFormatDetect, o listener receberá os eventos de fileLoaded e de fileSaved para o arquivo carregado. Para exemplos reais de file listener, confira em um ou mais desses que estão incluídos no código fonte: Estes incluem GameBoyAdvanceFileListener e SegaGenesisFileListener. Suporte de IdiomasO Tile Molester pode ser traduzido facilmente para um idioma diferente. Dois passos são necessários: 1. Faça uma cópia do arquivo language_template (situado no subdiretório language) com o nome language_lc_CC.properties onde lc deve estar em letras minúsculas, código de idioma de duas letras de acordo com as especificações ISO (veja um exemplo em http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt) e CC deve estar em letras maiúsculas, código de país de duas letras em acordo com os padrões ISO (veja um exemplo, http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html). 2. Abra o novo arquivo novo em seu editor de texto preferido. As linhas que começam com # são comentários e não é necessário traduzir. As outras linhas são desta forma TranslationKey = Onde TranslationKey é um nome descritivo de um pedaço de texto e deve permanecer inalterado. À direita do sinal de igualdade, o texto deve ser disposto no próprio idioma. Você pode usar a tradução inglesa padrão (language_en_US.properties) como um guia para fazer novas traduções. O arquivo de ajuda também pode ser traduzido. Faça assim, faça uma cópia do arquivo de ajuda (help_en_US.htm) do diretório de docs com o nome help_lc_CC.htm (onde lc e CC são do padrão acima) e traduza o texto para seu próprio idioma. Problemas conhecidosEstes são alguns dos problemas e falhas atuais que serão (esperançosamente) reparados no futuro. De modo geral serão ignoradas reclamações sobre estes assuntos (embora as pessoas que estarão reclamando, provavelmente não tenham se dado ao trabalho de ler este documento...).
Avaliação e ContribuiçõesAchou bugs? Contate-me. Se você fizer uma tradução completa para um idioma que não é suportado atualmente pelo Tile Molester, você pode enviá-la pra mim, será postado no site e será incluída na próxima versão do programa. O mesmo vale se escrever novos file listeners, e novas definições de formatos gráficos, paleta e filtros. Eu estou particularmente interessado em file listeners para formatos de Nintendo 64 (n64, v64, z64), e definições dos formatos gráficos usados por vários consoles (Playstation, Dreamcast, Atari Lynx, Atari Jaguar, GamePack32, ColecoVision, NeoGeo, Intellivision, Sega Saturn...) Eu também estou interessado em coleções de marcadores e paletas (resource files) para binários de console. A idéia é construir um grande banco de dados de tais recursos, de forma que qualquer um que queira editar um arquivo em particular possa consultar o banco de dados primeiro para ver se já existe informações documentadas sobre ele. Dê uma passada no website do Tile Molester para as mais recentes notícias e desenvolvimentos. |
© Kent Hansen 2003
Tradução Central M.I.B. ® 2005-2006