Notas de Instalação

Este programa necessita do Java Runtime Environment (JRE) versão 1.4.0 ou mais recente (a versão usada durante o desenvolvimento foi a 1.4.2), o download do mesmo pode ser feito no site java.sun.com.

Copie o arquivo zipado do Tile Molester para um novo diretótio. 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 vitual; ao ivnvés disso, estava tipicamente associado 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á o truque.

 



O que há de novo

v0.15a:

  • Esta versão doi lançada principalmente para reparar dois bugs relacionados ao salvamento de paletas diretamente na ROM. Não parece, isto é um avanço muito grande (e mesmo documentado muito raramente) saliento que de qualquer maneira eu não acredito que muitos de vocês tenham se deparado nisto.
  • Novo arquivo de especificação oficial incluido para adicionar suporte à extração de paleta de save states de Genecyst, Kega, Gens e FCEUltra, e a dicionado também formatos de paleta 9bpp Genesis e 32bpp BMP.
  • Adicionado suporte para Tiles de 3bpp linear.
  • Tradução para o Espanhol agora incluída.
  • E alguns outros consertos menores.



Introdução

Tile 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 conhecimento da localizã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 od 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, o dado binário que corresponde aos gráficos podem ficar visíveis da forma em que foram planejados, e editável parra a satisfação do usuário.

 



Arquitetura

Tile 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 abastace 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 porcessamento 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 paletaa podem ser definidos, alterados, removidos e adicionados sem necessitar de mudanças na programação do Tile Molester.

A figura 1 ilustra a idéia geral por trás dos codecs gráfigos.


Figura 1: Relações entre formatos de gráfico e codecs

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ífios. 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.


Figura 2: Como um codec de tiles pra Game Boy é construído.

 



Como utilizar

O 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". (Se acontecer de algum leigo ler isso: 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 a funcionalidade 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 grandes porções de arquivos 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 rápidamente 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 legal 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 respectivamentente 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 interpretadoa 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 é enontrado 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 provávelmente 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 habilidas para mostrar os limites entre eles.)

Figura 3: Blocos com tamanho de 4x4 permitindo a exibição de multiplas imagens.

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:


Figure 4: Um bloco de 4x2 não-intercalado (esquerda) versus intercalado (direita).

Portanto no modo intercalado, em vez dos tiles que serem exibibos simplesmente da esquerda para direita, eles serão exibidos em um tipo de padrão de zig-zag, 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.

Figura 5: Sem usar o Intercalar linhas (cima) versus com Intercalar linhas (baixo).


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 se extraidas 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 amarzenados 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 extender 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>
  +
<colorformats>
  +
<tileformats>
  +
<filefilters>
  +
<palettefilters>
  +
<filelisteners>

São explicados cada tag "principal" e subtags permitidas em detalhes a seguir.

directcolor

Descrição:
Define uma cor em termos dos componentes Vermelhos, Verdes, Azuis e Alfa.
Os componentes são especificados como bitmasks (máscara de bits = um bit usado para selecionar o bit desejado de uma palavra ou cadeia) em formato hexadecimal. Por exemplo, se o bitmask para Vermelho é FF0000, isto declara que o componente Vermelho fica situado nos bits 16-23 de uma palavra que retém um pixel (uma instância da cor).
Cada máscara tem que ter 1-bits consecutivo e o número de 1-bits não devem exceder 8.

Atributos:
id - Identificação. String de identificação única. [Requerido]
bpp - Bits per pixel. O número de bits armazenado em um pixel que usa este formato de cor, por exemplo a soma do número de bits nas bitmasks. [Requerido]
rmask - Bitmask para o componente Vermelho. [Requerido]
gmask - Bitmask para o componente Verde. [Requerido]
bmask - Bitmask para o componente Azul. [Requerido]
amask - Bitmask para o componente Alpha. [Opicional]

Subtags:
description - Texto descrevendo o formato de cor. [Requerido]

Exemplo:
<directcolor id="CF00" bpp="15" rmask="001F" gmask="03E0" bmask="7C00">
  <description>15bpp BGR (555)</description>
<directcolor>

indexedcolor

Descrição:
Define um grupo de cores através de uma tabela predefinida de valores RGB (paleta). Quando uma cor neste formato precisar ser interpretada, pode ser observado na tabela para achar sua representação RGB correspondente.

Atributos:
id - Identificação. String de identificação única. [Requerido]
bpp - Bits per pixel. Este valor define o tamanho da tabela de consulta RGB; se 6 bits por pixel forem usados, a tabela tem que possuir 2^6=64 entradas. [Requerido]
format - Se refere ao atributo id de um formato directcolor definido. As entradas na tabela de consulta RGB são armazenadas neste formato.
endianness - A ordem de bytes dos dados da tabela de consulta RGB (carregada para a memória). Pode ser little ou big. [Opcional]

Subtags:
data - A tabela de consulta RGB, armazenadas como uma string de dígitos hexadecimal. A string é interpretada como uma sucessão de bytes armazenados no formato de directcolor apropriado, usando a ordem de bytes especificada ordem. [Requerido]
description - Texto descrevendo o formato de cor. [Requerido]

Exemplo:
<indexedcolor id="CF02" bpp="6" endianness="big">
  <data>757575271B8F (e assim por diante...) 000000</data>
  <description>Nintendo (NES)</description>
</indexedcolor>

planartile

Descrição:
Definição do formato de tile planar paletizado.

Atributos:
id - Identificação. String de identificação única. [Requerido]
bpp - Bits per pixel. Isto define também implicitamente quantos níveis consiste o tile. [Requerido]
planeorder - A ordem dos bytes que compõem uma linha (oito pixels) do tile. Isto é uma lista de offsets relativos a zero separados por vírgula. Os offsets maiores não devem exceder bpp-1. [Requerido]

Subtags:
description - Texto descrevendo o formato de tile. [Requerido]

Exemplo:
<planartile id="PL03" bpp="4" planeorder="0,1,2,3">
  <description>4bpp planar</description>
</planartile>

lineartile

Descrição:
Definição de formato de tile linear paletizado.

Atributos:
id - Identificação. String de identificação única. [Requerido]
bpp - Bits per pixel. Deve ser um de 1, 2, 4 ou 8. [Requerido]
ordering - A ordem dos dados de cada pixel dentro de um byte. Isso é parecido com endianness, mas num nível sub-byte. Pode ser usado como valores in e reverse; o primeiro é o padrão. [Opt]

Subtags:
description - Texto descrevendo o formato de tile. [Requerido]

Exemplo:
<lineartile id="LN03" bpp="2" ordering="reverse">
  <description>2bpp linear, reverse-order</description>
</lineartile>

directcolortile

Descrição:
Define um formato de tile linear de direct-color.

Atributos:
id - Identificação. String de identificação única. [Requerido]
bpp - Bits per pixel. O número de bits usados para armazenar um pixel que usa este formato de cor, por exemplo a soma do número de bits nas bitmasks (máscara de bits). [Requerido]
rmask - Bitmask para o componente Vermelho. [Requerido]
gmask - Bitmask para o componente Verde. [Requerido]
bmask - Bitmask para o componente Azul. [Requerido]
amask - Bitmask para o componente Alpha. [Opicional]

Subtags:
description - Texto descrevendo o formato de tile. [Requerido]

Exemplo:
<directcolortile id="DC00" bpp="15" rmask="7C00" gmask="03E0" bmask="001F">
  <description>15bpp RGB (555)</description>
</directcolortile>

compositetile

Descrição:
Define um formato de tile composto. Um tile composto é um tile formado por dois ou mais tiles separados onde cada tile é de um formato definido em outra parte. Cada tile pode por si mesmo estar composto, assim sendo um tipo de formato recursivo. Por exemplo, os tiles de Nintendo Entertainment System (NES) são 2bpp planar, como os tiles de azulejos de Game Boy, mas o diferente do tile Game Boy, tiles de NES são armazenados como dois tiles 1bpp (separados) sucessivos . Esse modo não pode ser especificado por um formato de planartile; porém, é facilmente definido como um formato de tile composto.

Atributos:
id - Identificação. String de identificação única. [Requerido]
formats - Uma lista de string de identificação de formato de tile separados por vígula; estes se referem aos formatos de tile outro lugar no documento de especificação. Esta lista define a ordem (começando pelos bits menores) e o formato atual dos tiles individuais que compõem o tile composto. É adotado que os tiles serão armazenados consecutivamente na memória. [Requerido]

Subtags:
description - Texto descrevendo o formato de tile. [Requerido]

Exemplo:
<compositetile id="CP01" formats="PL01,PL00">
  <description>3bpp planar, composite (2bpp+1bpp)</description>
</compositetile>

filefilter

Descrição:
Define um filtro de arquivo. Um filtro de arquivo lhe permite associar arquivos de certas extensões com um formato de gráfico e modo de exibição padrão. O filtro é usado pelo diálogo "Abrir arquivo... " no Tile Molester.

Atributos:
extensions - Uma lista de extensões de arquivo (sem o caracter '.' ) separada por vírgula a ser incluído no filtro de arquivo. O caracter coringa '?' é suportado para substituir qualquer caracter. [Requerido]
tileformat - Refere a um formato de tile definido que deverá ser usado para exibir arquivos suportados por este filtro de arquivo. [Requerido]
mode - O modo padrão para exibir gráficos de um arquivo quando suportado por este filtro. Pode ser 1D ou 2D. [Opcional].

Subtags:
description - Texto descrevendo o filtro de arquivo. [Requerido]

Exemplo:
<filefilter extensions="n64,v64,z64" tileformat="DC06" mode="2D">
  <description>Nintendo 64 (*.n64, *.v64, *.z64)</description>
</filefilter>

palettefilter

Descrição:
Define um filtro de paleta. Um filtro de paleta lhe permite associar arquivos de paleta (arquivos que contêm dados de paleta) de certas extensões com informação de como ser os dados da paleta destes arquivos. O filtro é usado pelo diálogo "Importar paleta externa" no Tile Molester.

Atributos:
extensions - Uma lista de extensões de arquivo (sem o caracter '.') a serem incluidas no filtro de paletas. O caracter coringa '?' é suportado, serve para substituir qualquer caracter. [Requerido]
colorformat - String de identificação de um formato de cor definito que será usado para ler a paleta do arquivo. [Requerido]
size - O tamanho da paleta (número de entradas). [Requerido]
offset - O offset onde inicia os dados da paleta no arquivo. [Requerido]
endianness - Ordem de bytes dos dados da paleta. Pode ser little ou big; o primeiro é o padrão. [Opcional]

Subtags:
description - Texto que descreve o filtro de paleta. [Requerido]

Exemplo:
<palettefilter extensions="zs?" colorformat="CF00" size="256" offset="52243" endianness="little">
  <description>ZSNES Save States (*.zs?)</description>
</palettefilter>

filelistener

Descrição:
Registra um file listener. Um file listener recebe notificações quando um arquivo é carregado e no momento de ser salvo. Nestas ocasiões podem ser executadas várias operações nos dados. Por exemplo, quando o arquivo é salvo, os checksums podem ser recalculados. O primeiro critério para um file listener receber notificações de leitura/gravação de um arquivo, é a extensão do tal arquivo salvo, estar entre as extensões ligadas àquele file listener. O segundo critério é que o file listener tem que determinar qual os dados do arquivo realmente é do formato correto (e não, digamos, um arquivo de formato X salvo com a extensão tipicamente relacionado ao formato Y). Isto é normalmente feito conferindo campos de cabeçalho (ID strings e tal). O próprio file listener é implementado como uma classe de Java (mais sobre isto na próxima seção).

Atributos:
classname - O nome da classe (class) em Java onde está implementada o file listener. [Req]

Subtags:
Nenhuma.

Exemplo:
<filelistener classname="NESFileListener"/>

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 Listeners

Escrever um file listener, pode ser feito adicionando subclasses na 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):
Peque 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 obedece o (s) formato(s) que o file listener suporta, e false (falso) caso contrário. (A pessoa pode escolher ignorar a extensão se os próprios dados sem dúvida podem comprovar que os dados são do formato correto; porém, isto geralmente não é recomendado).
O código parecerá com isso:

// verificar extensão
if (!extension.equals("gba")) return false;
// verificar alguns campos do header
// ...
if (!header_valid) return false;
// formato verificado
return true;

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 para fileLoaded (carregar arquivo).

Uma vez que o file 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 um file listener processar um arquivo em particular. A ordem de como o file listener está definido no arquivo de especificação define a ordem em qual 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 que possui os dados.

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 Idiomas

O 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 conhecidos

Estes são alguns dos problemas e falhas atuais que serão (esperançosamente) consertados 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...).

  • Erro de falta de memória ao carregar arquivos realmente grandes. Não há muita coisa que eu possa fazer a respeito disso, isso é causado pela Máquina Virtua Javal (JVM). Mas isso pode ser pode ser retificado forçando o JVM a pegar mais memória do sistema ao iniciar. Rode o Tile Molester por linha de comando com a opção - mxXm onde X é o número de megabytes que você deseja; i.e. java -mx500M -jar tm.jar para alocar 500MB.
  • Desfazer e refazer operações de Copiar/Colar não estão perfeitos.
  • Editar cores no menu Paleta não faz nada. Julga-se que abrirá uma caixa de diálogo onde você verá todas as cores da paleta atual e ao clicar nelas possa editá-las. Até o momento o único modo para editar cores é clicando duas vezes em uma cor diretamente no painel de paleta.
  • Problema estranho relacionado ao modo Tela cheia em alguns emuladores. Se você estiver rodando o Tile Molester, então vamos dizer que você rode o FCEUltra em modo de Tela cheia, e depois volte para o TM, às vezes a interface gráfica aparece totalmente estranha. O jeito para arrumar isto é mudando o estado de janela principal, por exemplo minimizando e maximizando-a subseqüentemente. Isto acontece devido a um BUG na restauração de modo de tela do FCEUltra, ou um BUG no Java GUI runtimes, ou ainda à ambos; não há muito que eu possa fazer sobre isto.
  • O botão Mover na caixa de diálogo Organizar Marcadores/Paletas não faz nada. É suposto que mostrará uma nova caixa de diálogo onde você seleciona uma pasta para onde você moverá o(s) item(s). Mas isso é de qualquer forma redundante, por que você pode mover os ítens arrastando e soltando. Fácil implementar, mas é de baixa prioridade.
  • A tradução não se aplica a 100% do programa.
  • A ferramenta de Mover (usado para "arrastar" o foco em uma tela com zoom) vai meio aos trancos.
  • Para mudar idiomas depois da primeira vez você rodou o programa, você deverá apagar o arquivo settings.xml e reiniciar o Tile Molester.
  • Muitas outras coisas minúsculas que servem para obscurecer o meu dia. Apostp que você sabe o quais são elas.



Avaliação e Contribuições

Achou 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, GamePark32, 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 esxite 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