# Referência técnica

O &ktuberling; oferece uma forma gentil e compensadora de introduzir à personalização e programação do &kde;. A aplicação pode ser extendida. Por exemplo, sem qualquer codificação, poderão ser adicionados novos recreios, alterando os ficheiros gráficos. Ao adicionar os ficheiros de som apropriados, os tradutores poderão alterar os sons para a sua língua-mãe!

Se extender ou adicionar ao jogo, por favor pense na hipótese de enviar as suas adições ao programador Eric Bischoff de modo a inclui-las nas próximas versões.

## Para artistas

O tamanho e a forma do recreio, assim como o número de objectos, poderão ser alterados. Poderão ser adicionados novos recreios. Só é preciso criar dois ficheiros de imagens para cada recreio: um tabuleiro de jogo e uma máscara. É permitido um máximo de 8 recreios, dos quais estão usados 3 neste momento.

São usadas seis imagens no &ktuberling;: `potato-game.png`, `potato-mask.png`, `penguin-game.png`, `penguin-mask.png`, `aquarium-game.png` e `aquarium-mask.png`. A localização normal destes ficheiros é a pasta `$KDEDIR/share/apps/ktuberling/pics/`.

O primeiro tipo de imagens, os `*-game.png` contém o tabuleiro e os objectos que o utilizador selecciona. Este é o gráfico que o utilizador vê enquanto joga.

O segundo tipo de imagens, os `*-mask.png`, contêm apenas as máscaras dos objectos. Estas máscaras são usadas para delimitar os contornos dos objectos e, em alguns casos, dão ao objecto alguma transferência (por exemplo, os espectáculo). É obrigatório pôr os objectos na mesma posição, tanto no ficheiro do tabuleiro como no da máscara.

Na mesma pasta, um ficheiro chamado `layout.xml`. (`$KDEDIR/share/apps/ktuberling/pics/layout.xml`) indica quais as imagens a usar e associa-os aos itens do menu. Contém também os parâmetros de posição do recreio e dos objectos no tabuleiro e nas máscaras. Ele atribui também os sons aos objectos e coloca os objectos em grupos. Finalmente, declara as línguas como sendo conjuntos de sons traduzidos. Este ficheiro segue a sintaxe-padrão do XML (ver os detalhes em baixo).

Ainda na mesma past,a existe um ficheiro chamado `layout.i18n` (`$KDEDIR/share/apps/ktuberling/pics/layout.i18n`) que recapitula os textos no `layout.xml` que podem ser traduzidos:

- As entradas de menu que lhe permitem escolher o recreio e a língua

- Os nomes das categorias de objectos

Uma pasta mais acima, existe um ficheiro chamado `ktuberlingui.rc` (`$KDEDIR/share/apps/ktuberling/ktuberlingui.rc`), o qual é um segundo ficheiro XML que descreve os menus do &ktuberling;. Ele deverá conter uma marca `<action>` por cada recreio e língua. O nome simbólico da acção neste ficheiro deverá ser idêntico ao nome simbólico da acção no `layout.xml`.

## Tradução

Para além do mecanismo normal dos ficheiros `.po` para traduzir os textos do programa e as mensagens, os sons também poderão ser localizados.

Se os vários tradutores puderem gravar a sua voz para um ficheiro `.wav`, eles poderão gravar esse ficheiro para a subpasta específica da língua da pasta de sons. O nome do som é então atribuído a um ficheiro no ficheiro `layout.xml`. Por exemplo, se a língua de destino é o Português, os tradutores poderão gravar a sua voz para os ficheiros `.wav` localizados na pasta `$KDEDIR/share/apps/ktuberling/sounds/pt`. Aí, eles poderão então atribuir o som chamado hat ao nome do ficheiro `pt/chapeu.wav`.

Numa versão futura, o &ktuberling; irá usar o formato de ficheiros OGG Vorbis rc3 para os sons. Nessa altura, será possível converter os ficheiros WAV para o OGG Vorbis rc3 através da seguinte linha de comandos:

    $ oggenc_rc3 -o som.ogg som.wav

A informação sobre como lidar com os mecanismos de tradução no &kde; está disponível no HOWTO de Traduções do KDE.

## Para programadores

Não é difícil aos programadores extenderem o &ktuberling;.

### Classes C++

`TopLevel`

- Janela de topo e gestão básica do programa

`PlayGround`

- Descrição de um dos níveis de jogo

`ToDraw`

- Uma descrição de um dos objectos gráficos a serem desenhados

`SoundFactory`

- Descrição de uma das línguas e dos seus sons

`Action`

- Uma das acções do utilizador na minha de desfazer/refazer.

### Estrutura dos ficheiros `.tuberling`

Um ficheiro `.tuberling` que contém todos os dados necessários para desenhar um boneco. Este poderá ser editado com um editor de texto normal.

A primeira linha contém o número do recreio.

Em todas as outras linhas, existe um objecto gráfico por linha, na ordem que é usada para os desenhar. Cada linha contém 5 números: o identificador do objecto e o rectângulo onde deverá ser desenhado (esquerda, cima, direita, baixo). Os números são separados por espaços.

## Estrutura do ficheiro de disposição (`layout.xml`)

A marca do nível de topo é única e chama-se `<ktuberling>`. Ela contém várias marcas `<playground>`, uma por cada recreio, bem como várias marcas `<language>`, uma para cada língua.

A marca `<playground>` tem dois atributos: o `gameboard` e o `masks`. Estes atributos contêm os nomes dos ficheiros que contêm as imagens. A marca `<playground>` também contém uma marca `<menuitem>`, uma `<editablearea>` e várias marcas `<category>`, tendo ainda várias marcas `<object>`.

A marca `<menuitem>` descreve o identificador da acção do item do menu que permite seleccionar a posição da área onde poderá largar os objectos, assim como a legenda deste item do menu. Este identificador de acção deverá ser idêntico ao do `ktuberlingui.rc`.

A marca `<editablearea>` descreve a posição da área onde você poderá largar os objectos, bem como o nome do som associado a ele.

A marca `<category>` descreve a posição e o texto que descreve um grupo de objectos. Por exemplo, ela pode descrever a posição e o texto do grupo diversos.

A marca `<object>` descreve a posição (no tabuleiro e nas máscaras) de um objecto, assim como o nome do som associado a ele.

A marca `<language>` tem um atributo: o `code`. Este atributo dá o código da localização para essa língua. A marca `<language>` também contém uma marca `<menuitem>` tag e várias `<sound>`.

As marcas de nível inferior não são aqui explicadas, dado que o seu significado é bastante intuitivo. Se você modificar o ficheiro `layout.xml`, não se esqueça de modificar o `layout.i18n` e o `ktuberlingui.rc` na mesma medida.