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 já
esxite informações documentadas sobre ele.
Dê uma passada
no website do Tile Molester
para as mais recentes notícias e desenvolvimentos. |