Feed Rss, Atom Categoría Pascal, 13 entrada(s)
Allegro.pas 5.0 alpha 1 + 2 comentarios

Después de este hiatus ocasionado por problemas técnicos, vuelvo a la carga.

La semana pasada decidí publicar el estado actual de la versión 5 de Allegro.pas.  Todavía está muy verde, pero es bastante más estable que cuando lo utilicé para mi entrada del 2nd. PGD Challenge.  Tanto es así que estoy pensando en publicar una versión precompilada del juego, algo que no pude hacer en su momento.

Este Allegro.pas 5.0 Alpha 1 tiene las siguientes características:

  • Nueva API totalmente redefinida, incompatible con la versión anterior pero mucho más fácil de adaptar a otras plataformas y compiladores.  De hecho, vuelve la compatibilidad con Delphi que se perdió en la versión 4.3.
  • Soporte a OpenGL, algo de lo que adolece la versión 4.x.
  • Mejor integración con el sistema operativo con el uso de múltiples ventanas y diálogos nativos para operaciones como seleccionar archivos de disco.
  • Soporte de formatos de disco más modernos, incluyendo OGG/Vorbis, flac, PNG y JPEG, pero sin olvidar los viejos WAV, mod, PCX, BMP y Targa.  Eso sí, se pierde el soporte a MIDI, VOC y LBM.
  • Sistema de eventos extensible, que incluye eventos del sistema como mover ventanas o pulsaciones de teclado y que puede extenderse con eventos de usuario.

Hay que tener en cuenta que todavía está en desarrollo, por lo que hay cosas de la biblioteca Allegro que todavía no soporta, y tampoco incluye la documentación completa.  Aun así, si quieres probarla puedes descargarte el paquete en este enlace.

Chovinismo informático

No me extraña que la palabra “chovinismo” provenga del francés.  No hace mucho me han encargado hacer un trabajito relacionado con el sistema de gestión de contenidos Spip, de origen francés.  Al ser un sistema abierto y libre, se puede ver su código fuente, y todo él está escrito en francés.

Yo también suelo escribir código en castellano, pero últimamente me he fijado que he dado un giro hacia el inglés.  En proyectos como Allegro.pas esto es comprensible, dado que es un producto destinado a una comunidad internacional concreta y el inglés es la nueva lingua franca;  pero en otros proyectos de índole más personal también he usado el inglés más a menudo de lo que esperaba.  Tras pensarlo un rato, he llegado a la conclusión de que es el propio lenguaje quien me ha llevado por ese camino.

Por ejemplo, un lenguaje como C o PHP, en el que la mayor parte de sus palabras clave son símbolos sin significado lingüístico (como “++”, “->”, “!=:”, “{“, etc) no parece que existan problemas sea cual sea el idioma elegido para describir las variables, funciones y objetos.  La siguiente función de una utilidad de codificación por contraseña que hice hace el año pasado:


/* Realiza la codificación con la clave cargada en la memoria. */
  int CodificaConClaveEnMemoria (void)
  {
    unsigned char *CarClave = NULL, Caracter;

    CarClave = Clave;
    while (LeeCaracter (Origen, &Caracter)) {
      Caracter = (Caracter ^ (*CarClave)) & 0x00FF;
      if (fputc (Caracter, Destino) != (int)Caracter) {
	fprintf (stderr, "ERROR de salida (Caracter %d)\a\n\n", Caracter);
	return FALSE;
      }
      if (*(CarClave++) == '\x00')
	CarClave = Clave;
    }
    return TRUE;
  }

Salvo unas cuantas palabras clave y funciones de biblioteca, el resto está en castellano y no parece llevarse muy mal.

Sin embargo, un lenguaje como Pascal, que uso con más frecuencia últimamente, en el que casi todas las palabras clave tienen significado o son abreviaturas (como “INC”, “BEGIN”, “AND”, etc) parece que no funciona tan bien, y que queda mejor escrito en inglés.  Por ejemplo, el siguiente procedimiento extraído una de un editor de mapas en el que estoy trabajando desde hace tiempo:


(* Lee desde un archivo de disco. *)
  PROCEDURE TMapa.LeeDe (NombreArchivo: STRING);
  VAR
    Archivo: AL_PACKFILEptr;
    Firma, Ancho, Alto, X, Y: LONGINT;
  BEGIN
    Archivo := al_pack_fopen (NombreArchivo, AL_F_READ);
    IF Archivo  NIL THEN
    TRY
    { Firma del archivo. }
      Firma := al_pack_mgetl (Archivo);
      IF Firma  AL_ID ('MAP1') THEN
        RAISE Exception.Create ('Unknown file format');
    { Tamaño del mapa. }
      Ancho := al_pack_mgetw (Archivo);
      Alto := al_pack_mgetw (Archivo);
    { Creamos el mapa. }
      CreaNevoMapa (Ancho, Alto);
    { Casillas. }
      FOR X := LOW (Mapa) TO HIGH (Mapa) DO
        FOR Y := LOW (Mapa[X]) TO HIGH (Mapa[X]) DO
        BEGIN
        { Índice }
          Mapa[X, Y].Ndx := al_pack_mgetw (Archivo);
        { Valores extra. }
          Mapa[X, Y].Val1 := al_pack_mgetw (Archivo);
          Mapa[X, Y].Val2 := al_pack_mgetw (Archivo);
        END;
    FINALLY
      al_pack_fclose (Archivo);
    END
    ELSE
      RAISE Exception.Create ('Can''t open file "'+NombreArchivo+'" for reading.');
  END;

No sé a vosotros, pero a mi me chirría un poco.  Quizá sea, simplemente, porque no estoy acostumbrado.  Aun así, tras haber visto Spip y su éxito estoy experimentando un poco este chovinismo con el proyecto del editor de mapas, a ver qué pasa.

Nada de forzar la máquina

Según el plan, hace como dos meses que debería estar escribiendo como mínimo una entrada a la semana en este blog.  Es evidente que no lo he hecho, de ahí el título que he elegido para hoy.  Lo peor es que no hay muchas escusas.  He estado trabajando, preparando cosas para el futuro, buscando trabajo, actualizando perfiles, reciclando conocimientos...  Sin forzar la máquina pero sin parar mucho.  Pero al no forzarla, tenía tiempo para cumplir.  Y tampoco ha sido por falta de temas que comentar, porque, tanto por lo que he estado haciendo como lo que he encontrado al hacer consultas hay muchas cosas interesantes.

Por ejemplo, hoy mismo he estado leyendo envíos atrasados de la lista de correos de Free Pascal y me he encontrado con el estreno de un congregador RSS (qué palabro más feo) llamado planet object pascal.  Un sitio a tener en cuenta para estar al día de la (maltrecha, pero ahí sigue) blogesfera en lo referente a este lenguaje de programación.

Otro ejemplo, que hace unas semanas se publicó la cuarta versión mayor del motor de juegos llamado Castle, con el que me he estado reciclando la semana pasada.  Un motor interesante, que es de lo mejor que se puede encontrar libre y ahora para Pascal (pero sólo porque todavía no podemos incarle el diente al 3D Gamecask, claro que este último es profesional y Castle no).  Precisamente con este motor he encontrado cosas en mi forma de pensar, a la hora de programar, que necesitarían un pulido.

A parte de esto, me he comprado unos guantes de programar, que en la oficina que me he montado hace frío por las mañanas ya que no encienden la calefacción central hasta bien entrada la hora de comer.  Eso, y que espero que no haya que esperar tanto a mi próxima entrada.

Por fin he terminado una de las cosas que tenía pendientes para después de vacaciones.  Hace unos minutos he subido la última versión de Allegro.pas, que permite utilizar la biblioteca para videojuegos Allegro con Free Pascal.  No hay muchos cambios, salvo la corrección de algún error.  Para más información, pasaros por la página del proyecto.

Ah, y mañana habrá sorpresa.  Ya sabéis, una de esas cosas que se me han ocurrido para ser algo más activo y no quedarme en casa mirando a las abutardas y tal.  A ver si os gusta.

Ayer terminó el plazo del primer mini-concurso de Pascal Game Development.  Aunque sin terminar, sí pude concluir el sistema de juego.  He añadido a un acompañante del protagonista que lleva la antorcha (bueno, en realidad no, pero es que no tuve tiempo para editar sus gráficos) y le sigue para iluminarle.  Este personaje no lo controla el jugador sino que va por libre, y claro, también puede recibir ataques de los enemigos.


¡Nos tienen rodeados! ¡Y hay otro escondido!

Como ya dije, terminaré el juego.  Será un juego corto, que se pueda completar en una hora o incluso menos, en contraposición de los eternos juegos que se ven últimamente.  El estilo final y su desarrollo será similar al de las “viejas” recreativas, de esas que echabas cinco duros.  La historia, o más bien escusa, será la de guiar al duque de Dragonfear para limpiar su feudo de criaturas demoníacas.  Tendrá unos cuatro o cinco niveles cuyos escenarios serán el bosque, una población y las catacumbas; quizá también un cementerio y una cueva, pero no estoy seguro.  El duque se enfrentará, además de los zombis y esqueletos que ya habéis visto, a magos y trolls.

Pero como digo, tardará un poco.  Antes, y espero que antes de que termine la semana, el Hermano Bandrán procurará hacernos otra visita, como prometió.  Nos leemos.