# Tehniline külg

&ktuberling; pakub omalt poolt hea võimaluse kaasa aidata &kde; kohandamisele ja arendamisele. Ka seda mängu saab laiendada. Nii võib ka ilma programmeerimata lisada uusi mängulaudu lihtsalt graafikafaile redigeerides. Sobivate helifailide lisamisega võivad tõlkijad panna sõnad ka oma emakeeles kõlama!

Kui laiendad mängu või lisad sellele midagi, võiksid saata oma panuse ka arendajale Eric Bischoffile, kes saab siis sinu panuse järgmisse versiooni kaasata.

## Kunstiinimesed

Mängulaua suurust ja kuju ning objektide hulka on võimalik muuta. Lisada saab uusi mängulaudu. Iga mängulaua jaoks on vaja luua vaid kaks pildifaili: mängulaud ja mask. Kokku on lubatud kuni 8 mängulauda, praegu on kasutusel vaid kolm.

&ktuberling; kasutab kuut pilti: `potato-game.png`, `potato-mask.png`, `penguin-game.png`, `penguin-mask.png`, `aquarium-game.png` ja `aquarium-mask.png`. Nende failide standardne asukoht on kataloog `$KDEDIR/share/apps/ktuberling/pics/`.

Esimest tüüpi pildid, nimelt `*-game.png`, sisaldavad endas mängulauda ja kasutajale valikuks pakutavaid objekte. See on graafika, mida kasutaja mängimise ajal näeb.

Teist tüüpi pildid (`*-mask.png`) sisaldavad ainult objektide maske. Maske kasutatakse objektide servade piiritlemiseks ning mõnel juhul ka teatud läbipaistvuse andmiseks (nt. prillide puhul). Kohustuslik on asetada objektid mängulaua failis samasse positsiooni, nagu nad eksisteerivad maskifailis.

Samas kataloogis määrab fail `layout.xml` (`$KDEDIR/share/apps/ktuberling/pics/layout.xml`), milliseid pilte kasutatakse, ning seob nad menüükirjetega. See fail sisaldab ka mänguvälja ning objektide positsioone mängulaua- ja maskifailides. Samuti seob ta helid objektidega ning seab objektid gruppidesse. Ning lõpuks määratleb ta keeled tõlgitud helide komplektina. Fail järgib XML-i standardeid (vt üksikasju allpool).

Sellessamas kataloogis on ka fail `layout.i18n` (`$KDEDIR/share/apps/ktuberling/pics/layout.i18n`), mis võtab failist `layout.xml` tõlgitavad stringid:

- Menüükirjed, mis võimaldavad valida mängulauda ja keelt

- Objektikategooriate nimed

Mainitud kataloogi emakataloogis on veel üks XML fail `ktuberlingui.rc` (`$KDEDIR/share/apps/ktuberling/ktuberlingui.rc`), mis kirjeldab &ktuberling;i menüüsid. See peaks sisaldama ühe sildi `<action>` (tegevus) iga mängulaua ja keele kohta. Tegevuse sümboolne nimi selles failis peaks kattuma tegevuse sümboolse nimega failis `layout.xml`.

## Tõlkimine

Lisaks tavalisemale rakenduse käskude, teadete ja muu nähtava `.po`-failide tõlkimisele saab lokaliseerida ka helisid.

Kui tõlkijad suudavad salvestada oma hääle `.wav`-faili, võivad nad selle salvestada helide kataloogis keelele vastavasse alamkataloogi. Seejärel omistatakse heli nimi failile failis `layout.xml`. Kui näiteks sihtkeel on itaalia keel, võivad tõlkijad salvestada oma hääle `.wav`-failidesse, mis asuvad kataloogis `$KDEDIR/share/apps/ktuberling/sounds/it`. Seejärel saavad nad näiteks seostada heli nimetusega hat (müts) failinimega `it/cappello.wav`.

Tulevastes versioonides hakkab &ktuberling; helivorminguna kasutama OGG Vorbis rc3. Hetkel on võimalik teisendada WAV-failid OGG Vorbis rc3 vormingusse käsurea korraldusega:

    $ oggenc_rc3 -o helifail.ogg helifail.wav

Infot selle kohta, kuidas käib tõlkimine &kde;s, annab KDE tõlkimise HOWTO.

## Programmeerijad

Õigupoolest on &ktuberling; programmeerijatele üsna hõlpsasti laiendatav.

### C++ klassid

`TopLevel`

- Tipptaseme aken ja rakenduse baashaldus

`PlayGround`

- Mingi konkreetse mängutaseme kirjeldus

`ToDraw`

- Mingi konkreetse graafilise objekti kujutamise kirjeldus

`SoundFactory`

- Mingi konkreetse keele ja selle helide kirjeldus

`Action`

- Konkreetne kasutaja tegevus võta tagasi/tee uuesti võimalustega

### `.tuberling`-failide struktuur

`.tuberling`-fail sisaldab kõiki andmeid, mida on vaja kartulimehe kujutamiseks. Seda võib redigeerida ka tavalise tekstiredaktoriga.

Esimene rida sisaldab mängulaua numbrit.

Kõigil ülejäänud ridadel on üks graafiline objekt rea kohta järjekorras, nagu neid kujutatakse. Iga rida sisaldab viis numbrit: objekti identifikaator ning joonistatav nelinurk (vasak, ülemine, parem, alumine). Numbreid eraldavad tühikud.

## Paigutusfaili (`layout.xml`) struktuur

Ülataseme silt on unikaalne ning kannab nime `<ktuberling>`. See sisaldab mitu silti `<playground>`, ühe iga mängulaua kohta, ning mitu silti `<language>`, mida on samuti üks iga keele kohta.

Sildil `<playground>` on kaks atribuuti: `gameboard` ja `masks`. Need määravavad pilte sisaldavate failide nime. Silt `<playground>` sisaldab ka ühe sildi `<menuitem>`, ühe sildi `<editablearea>`, mitu silti `<category>` ja mitu silti `<object>`.

Silt `<menuitem>` kirjeldab menüüelemendi tegevuse identifikaatorit, võimaldades valida positsiooni, kuhu saab objekte kukutada, ning selle menüüelemendi nimetust. See tegevuse identifikaator peab kattuma failis `ktuberlingui.rc` leiduvaga.

Silt `<editablearea>` kirjeldab positsiooni, kuhu saab objekti kukutada, ning sellega seotud heli nime.

Silt `<category>` kirjeldab objektigrupi positsiooni ja nimetust. Nii näiteks saab kirjeldada grupi lisad positsiooni ja nimetust.

Silt `<objekt>` kirjeldab objekti positsiooni (nii mängulaual kui maskis), samuti sellega seonduva heli nime.

Silt `<language>` on ühe atribuudiga: `code`. See atribuut määrab antud keele lokaadi koodi. Silt `<language>` sisaldab ka ühe sildi `<menuitem>` ja mitu silti `<sound>`.

Madalama taseme silte me siin ei kirjelda, sest nende tähendus on iseenesestmõistetav. Kui muudad faili `layout.xml`, ära unusta vastavalt muutmast ka faile `layout.i18n` ja `ktuberlingui.rc`.