<chapter id="technical-reference">
<chapterinfo>

<authorgroup>
<author
><firstname
>Éric</firstname
> <surname
>Bischoff</surname
> </author>
<othercredit role="translator"
> <firstname
>Rafael</firstname
> <surname
>Osuna</surname
> <affiliation
><address
><email
>rosuna@wol.es</email
></address
></affiliation
> <contrib
>Traductor</contrib
> </othercredit
> <othercredit role="translator"
> <firstname
>Miguel</firstname
> <surname
>Revilla Rodríguez</surname
> <affiliation
><address
><email
>yo@miguelrevilla.com</email
></address
></affiliation
> <contrib
>Traductor</contrib
> </othercredit
> <othercredit role="translator"
> <firstname
>Kira</firstname
> <surname
>J. Fernández</surname
> <affiliation
><address
><email
>kirajfdez@gmail.com</email
></address
></affiliation
> <contrib
>Traductora</contrib
> </othercredit
> 
</authorgroup>

<date
>2009-12-15</date>
<releaseinfo
>0.6.0</releaseinfo>

<keywordset>
<keyword
>KDE</keyword>
<keyword
>KTuberling</keyword>
<keyword
>referencia técnica</keyword>
</keywordset>
</chapterinfo>

<title
>Referencia técnica</title>

<para
>&ktuberling; ofrece una interesante y satisfactoria introducción a la personalización y programación de &kde;. Es posible extender la aplicación. Por ejemplo, sin necesidad de programar, se pueden añadir más zonas de juego cambiando los archivos de gráficos. ¡Añadiendo los archivos de sonido adecuados, los traductores pueden poner el audio en su propio idioma! </para>

<para
>Si extiende o añade algo al juego, piense en enviar sus mejoras al desarrollador <ulink url="mailto:alex@eyeos.org"
>Alex Fiestas</ulink
>para incluirlas en futuras versiones. </para>

<sect1 id="for-artists">
<title
>Para los artistas</title>

<para
>Para crear una zona de juego nueva en &ktuberling; debe hacer lo siguiente: </para>

<itemizedlist>

<listitem>
    <para
>Dibujar una zona de juego y guardarla en un archivo SVG, para lo que tiene que: <itemizedlist>
            <listitem
><para
>Llamar a los lugares en los que los elementos se pueden dibujar «background».</para
></listitem>
            <listitem
><para
>Dar nombre a cada uno de los elementos que se pueden dibujar con un nombre único.</para
></listitem>
        </itemizedlist>
    </para>
</listitem>

<listitem>
    <para
>Crear un archivo .theme, de acuerdo al siguiente esquema:</para>
    <programlisting
>&lt;playground gameboard="<replaceable
>suArchivoSVG</replaceable
>" name="<replaceable
>elArchivoEscritorio</replaceable
>"&gt;
    &lt;object name="<replaceable
>nombreElemento</replaceable
>" sound="<replaceable
>nombreSonido</replaceable
>" scale="<replaceable
>algúnValor</replaceable
>" /&gt;
    ...
    ...
    ...
    &lt;/playground&gt;
    </programlisting>
    <itemizedlist>
        <listitem
><para
><replaceable
>suArchivoSVG</replaceable
> es el nombre del archivo SVG que contiene el dibujo.</para
></listitem>
        <listitem
><para
><replaceable
>elArchivoEscritorio</replaceable
> es el nombre del archivo de escritorio que contiene el nombre del tema.</para
></listitem>
        <listitem
><para
>Para cada tipo de objeto necesitará una entrada &lt;object&gt;. <replaceable
>nombreElemento</replaceable
> es el nombre único utilizado en el archivo SVG, <replaceable
>nombreSonido</replaceable
> es el nombre del sonido que se reproducirá cuando lo arrastra. Consulte la sección sobre el sonido para obtener más información.</para
></listitem>
        <listitem
><para
>La escala es opcional, y <replaceable
>algúnValor</replaceable
> es el factor de escala que se utilizará cuando se dibuja este objeto fuera del almacén, si se especifica se utiliza 1.</para
></listitem>
    </itemizedlist>
</listitem>

<listitem>
    <para
>Crear un archivo .desktop, de acuerdo con el siguiente esquema</para>
    <programlisting
>[KTuberlingTheme]
    Name=<replaceable
>nombreTema</replaceable
>
    </programlisting>
    <itemizedlist>
        <listitem
><para
><replaceable
>nombreTema</replaceable
> es el nombre que identifica el tema. Se mostrará en el menú Zona de juego.</para
></listitem>
    </itemizedlist>
</listitem>

<listitem>
    <para
>Si está añadiendo el tema al repositorio de &ktuberling;, añada los archivos .svg, .theme y .desktop a la sección FILES de CMakeLists.txt en la carpeta pics/ </para>
</listitem>

<listitem>
    <para
>Si quiere instalarlo por sí mismo, sitúe los archivos .svg, .theme y .desktop en `kde4-config --prefix`/share/apps/ktuberling/pics </para>
</listitem>

</itemizedlist>

</sect1>

<sect1 id="for-translators">
<title
>Para los traductores</title>

<para
>Además del mecanismo habitual de archivos <literal role="extension"
>.po</literal
> para la traducción de los mensajes escritos del programa, también es posible traducir los sonidos. </para>

<para
>Para crear un nuevo tema de sonido para &ktuberling; debe hacer lo siguiente: </para>

<itemizedlist>

<listitem
><para
>Grabar los sonidos en un archivo de formato OGG Vorbis rc3.</para
></listitem>

<listitem>
<para
>Crear un archivo <replaceable
>CódigoDeDosLetrasDeSuIdioma</replaceable
> soundtheme, de acuerdo al siguiente esquema:</para>
<programlisting
>&lt;language code="<replaceable
>suCódigoDeIdiomaDeDosLetras</replaceable
>"&gt;
&lt;sound name="<replaceable
>nombreSonido</replaceable
>" file="<replaceable
>rutaRelativa</replaceable
>" /&gt;
...
...
...
&lt;/language&gt;
</programlisting>
<itemizedlist>
<listitem
><para
><replaceable
>suCódigoDeIdiomaDeDosLetras</replaceable
> es el código de dos letras de su idioma, por ejemplo, gl para Gallego.</para
></listitem>
<listitem
><para
>Para cada sonido una entrada de &lt;sonido&gt;. <replaceable
>nombreSonido</replaceable
> debería coincidir con el nombreSonido especificado en la zona de juego (consulte el cómo crear temas). <replaceable
>rutaRelativa</replaceable
> debería ser la ruta relativa al lugar en el que se encuentra el archivo con este sonido, que suele ser algunaRutaÚnica/nombreSonido.formato (algunaRutaÚnica puede ser, por ejemplo, el código de dos letras de su idioma).</para
></listitem>
</itemizedlist>
</listitem>

<listitem
><para
>Si está añadiendo el tema de sonido a &ktuberling;: en la carpeta de su idioma:</para>
<itemizedlist>
<listitem
><para
>Añada los archivos de sonido y los archivos .soundtheme a la carpeta data/kdegames/ktuberling de las traducciones de su idioma.</para
></listitem>
<listitem
><para
>En este misma misma carpeta necesitará un CMakeLists.txt que describa cómo instalar los archivos, suele ser:</para>
<programlisting
>FILE(GLOB datafiles *.ogg)
install( FILES <replaceable
>suArchivoSonido1</replaceable
> <replaceable
>suArchivoSonido2</replaceable
> ... <replaceable
>suArchivoSonidoN</replaceable
> DESTINATION  ${DATA_INSTALL_DIR}/ktuberling/sounds/<replaceable
>algunaRutaÚnica</replaceable
> )
install( FILES <replaceable
>suArchivoDeTemaDeSonido</replaceable
> DESTINATION ${DATA_INSTALL_DIR}/ktuberling/sounds/ )
</programlisting>
</listitem>
</itemizedlist>
</listitem>

<listitem>
<para
>Si desea instalarlo por si mismo debe:</para>
<itemizedlist>
<listitem
><para
>Situar el archivo del tema de sonido <replaceable
>CódigoDeDosLetrasDeSuIdioma</replaceable
> en `kde4-config --prefix`/share/apps/ktuberling/sounds</para
></listitem>
<listitem
><para
>Situar suArchivoSonido en `kde4-config --prefix`/share/apps/ktuberling/sounds/algunaRutaÚnica</para
></listitem>
</itemizedlist>
</listitem>

</itemizedlist>

<para
>Hay información disponible sobre el funcionamiento de los mecanismos de traducción de &kde; en <ulink url="http://i18n.kde.org/translation-howto/index.html"
> el manual de traducción</ulink
>. </para>

</sect1>

<sect1 id="for-programmers">

<title
>Para programadores</title>
<para
>&ktuberling; resulta sencillo de extender por programadores.</para>

<sect2 id="classes">
<title
>Clases C++</title>

<variablelist>
<varlistentry>
<term
><classname
>TopLevel</classname
></term>
<listitem>
<para
>Ventana de nivel principal y administración básica del programa.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><classname
>PlayGround</classname
></term>
<listitem>
<para
>Descripción de uno de los niveles del juego.</para
> </listitem>
</varlistentry>

<varlistentry>
<term
><classname
>ToDraw</classname
></term>
<listitem>
<para
>Descripción de uno de los «objetos» gráficos a dibujar.</para
> </listitem>
</varlistentry>

<varlistentry>
<term
><classname
>SoundFactory</classname
></term>
<listitem>
<para
>Descripción de uno de los idiomas y sus sonidos.</para
> </listitem>
</varlistentry>

<varlistentry>
<term
><classname
>Action</classname
></term>
<listitem>
<para
>Una de las manipulaciones del usuario en la pila deshacer/rehacer.</para
> </listitem>
</varlistentry>
</variablelist>

</sect2>

</sect1>
</chapter>
