Página 1 de 3

Compilación del juego en LiNUX (Versión 1.0.0 - FINAL)

NotaPublicado: Vie Ene 02, 2009 02:55
por Jorge
Lo primero que hay que hacer es descargar el código fuente: headoverheels-1.0.0.tar.bz2

MD5SUM: 562c25b7d2d5e630e28eeb65341b06be

Lo siguiente es instalar (si no lo están ya) las dependencias del juego. Asumo que el sistema Linux está preparado para construir aplicaciones C++. También que tiene un gestor de paquetes, por lo que cito aquellos necesarios. Si el gestor detecta que para la instalación de alguno de ellos hay que instalar otros paquetes, aceptaremos, como de costumbre.

  • allegro-devel = 4.2.2; sólo funcionará con esta versión que es la última versión estable.
  • libxerces-c-devel >= 2.5.0 y < 3.0.0; recomiendo la versión 2.7.0 ó 2.8.0.
  • libvorbis-devel >= 1.2.0
  • libogg-devel >= 1.1.3

Partiendo del directorio en el que tenemos el archivo comprimido, ejecutamos lo siguiente:
Código: Seleccionar todo
$ tar jxvf headoverheels-src-1.0.0.tar.bz2
$ cd headoverheels-1.0.0
$ ./configure
$ make
$ make install (como usuario 'root')


Si todo ha ido bien, el juego se instalará en /usr/local. Dentro de /usr/local/bin se encuentra el ejecutable. Puede cambiarse la ubicación indicándosela a configure, por ejemplo:
Código: Seleccionar todo
$ ./configure --prefix=/usr/local/games

Los archivos de configuración se instalarán en ~/.headoverheels
Dentro de /usr/local/share/headoverheels están todos los archivos de datos y el icono del juego en formato PNG.

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 03:03
por Bergil
Protesto, esto es una conjura para que no pueda decir nada en este hilo... :mrgreen:
Ahiva, si lo he dicho... :meparto:
Nada, nada, me callo... :oops:

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 13:58
por linutux
EL JUEGO FUNCIONA :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

No me da ningun fallo al compilarlo

Me deja instalarlo, pero al intentar ejecutarlo me sale el siguiente error:

headoverheels: GuiManager.cpp:44: gui::GuiManager::GuiManager(): Assertion `bitmap' failed.
Shutting down Allegro due to signal #6
Abortado

Me imagino que es el mismo que te sale a ti.

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 14:36
por Jorge
Da ese error porque no encuentra los gráficos.

El problema es que para seguir la estructura fijada por GNU para distribuir aplicaciones (uso de autoconf y automake) debe haber presentes varios directorios obligatoriamente (bin, share, doc ,man y lib), además de varios archivos (NEWS, README, ChangeLog, etc). Ahora mismo el juego no está preparado para seguir esa estructura. Además, sólo puede ejecutarse desde la carpeta del usuario porque se necesitan permisos de escritura para el archivo configuration.xml y el directorio savegame.

Lo suyo es que una vez instalado quedase así:

Código: Seleccionar todo
/usr/local/bin/
                headoverheels

/usr/local/share/
                headoverheels/
                                gfx/
                                map/
                                music/
                                sound/
                                text/
                                items.xml
                                items.xsd
                                sounds.xml
                                sounds.xsd

/home/linutux/
                .headoverheels/
                                savegave/
                                configuration.xml
                                configuration.xsd

Es algo que tengo pendiente. Pero bueno, lo importante es que te ha funcionado. :boing: Tú ya puedes dar fe de que el juego no son cuatro archivos con seis líneas de código cada uno. :D

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 14:50
por Bergil
No, si yo ya pensaba que no había ni tantos archivos ni tantas líneas de código... :meparto:

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 15:15
por linutux
Para probar las betas no hace falta que se instale en el sistema. Eso dejalo para la versión final.

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 15:21
por linutux
De cuatro lineas nada. He estado echandole un vistazo por encima y solo puedo decir una cosa :babas:

Tengo ganas de ver la documentación de como está echo. Por lo que veo has utilizado los ficheros XML para definir todo lo relativo a especificación, salas, sonidos, etc... en vez de meterlo dentro del codigo. Esto me ha gustado porque por un lado te será más sencillo modificarlo y por otro no tocas nada de codigo, pero ¿no ralentiza el tener que leer los ficheros en vez de que esten dentro del codigo?.

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 17:29
por Jorge
Todos los archivos a excepción de los archivos de las salas se leen al cargar la aplicación. Por tanto, la cosa no va más lenta, pero sí ocupa más memoria que empotrando los datos en el código. De todas maneras estamos hablando de que el juego necesita menos de 64 MB para funcionar por lo que me lo puedo permitir. :mrgreen:

Si os fijáis cada vez que entráis a una sala nueva se lee del disco. Esto si puede ralentizar el cambio de salas. Casi hubiese preferido leer todos los datos al principio, pero al final ha quedado así. :roll:

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 19:38
por Bergil
Va bene...

Re: Compilación del juego en LiNUX

NotaPublicado: Vie Ene 02, 2009 22:27
por linutux
El problema de cargar los datos de todas las salas al principio es que entonces el juego ocuparia demasiada memoria.

Re: Compilación del juego en LiNUX

NotaPublicado: Sab Ene 03, 2009 03:21
por Bergil
Ah... :shock:

Re: Compilación del juego en LiNUX

NotaPublicado: Sab Ene 03, 2009 07:24
por Jorge
No creas que se dispararía el número de megas necesarios. Al menos es lo que creo. Si le echáis un vistazo a un archivo de sala lo único que tiene son referencias a elementos, no los elementos en sí. A ver si un día os cuento cómo está estructurada la aplicación, pero vaya por delante esto:

En el archivo de la sala nº 1 (donde aparece Head, la sala de Heels es la nº 23) aparte de las losetas, las paredes y la puerta hay estructuras de datos como esta:

Código: Seleccionar todo
<item x="0" y="0" z="0">
      <label>35</label>
      <direction>none</direction>
      <behavior>23</behavior>
      <type>griditem</type>
</item>


Este registro dice todo esto:
  1. Hay un elemento situado en la celda (0,0,0) del espacio isométrico.
  2. El elemento está identificado por la etiqueta nº 35. Si miráis el archivo items.xml y buscáis esa etiqueta, veréis que es un telepuerto.
  3. La dirección inicial del elemento es ninguna. Los telepuertos no pueden mirar al norte o al este. Sólo tiene una dirección y no está definida.
  4. El comportamiento del elemento es el nº23. Para ver los comportamientos hay que mirar la estructura BehaviorId que está en el archivo Ism.hpp. Lógicamente el telepuerto se comporta como un telepuerto.
  5. El tipo de elemento es rejilla. Hay elementos rejilla y libres (como en Isomot) más las puertas que son especiales.

Básicamente una sala se compone a base de este tipo de datos. Para almacenar los datos de ese telepuerto de la sala nº 1 sólo harían falta un puñadito de bytes.

Re: Compilación del juego en LiNUX

NotaPublicado: Sab Ene 03, 2009 11:50
por Bergil
Ah (de nuevo...) :shock: :shock:

Re: Compilación del juego en LiNUX

NotaPublicado: Sab Ene 03, 2009 13:53
por linutux
Lo que no entiendo es porque defines los items como un fichero xml y en cambio BehaviorId es codigo. No se optimizaria si tuvieras los items dentro de otra estructura.

El fichero items.xml lo lees del disco duro cada vez que entras en una sala , ¿no?

Re: Compilación del juego en LiNUX

NotaPublicado: Sab Ene 03, 2009 19:45
por Jorge
Los items están dentro de otra estructura, concretamente una lista que se crea al arrancar el juego tras leer el archivo items.xml. Este archivo sólo se lee una vez. Cuando se carga del disco una sala, por cada etiqueta identificativa de un item que se encuentre se busca en esa lista para saber qué elemento es.

Un item tiene múchos datos (velocidad, peso, tamaño, imagen, sombra, etc) pero el comportamiento sólo uno: su identificador.