Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - darío

Páginas: [1] 2 3
1
General / BennuGD documentación autogenerada
« en: Junio 14, 2017, 02:23:32 pm »
Algo que ya hice para PixTudio, pero aquí os dejo el resultado de haber pasado los sources de BennuGD por mi script autogenerador de documentación.

BennuGD Autogenerated Docs

Lógicamente la Wiki de BennuGD es más interesante desde un punto de vista de documentación, pero a mí me es útil igualmente tener un listado de funciones.

(josebita, lamento no haber atendido tu pull request antes de que lo quitaras, pero desgraciadamente no pude dedicarle tiempo en su momento).

2
General / Diferentes resultados con y sin --libmode
« en: Junio 11, 2017, 01:45:00 pm »
Haciendo pruebas con --libmode me he topado con un problema que no se si es por que no entiendo algo o con el funcionamiento de libmode, estoy usando algo mal o porque me he topado con un bug.

No se ni como describirlo, así que he preparado un ejemplo.

Ejecutandolo todo sin libmode funciona como me esperaría:
Código: [Seleccionar]
bgdc -DMONOLITIC=1 test.prg
bgdi test

Muestra 0 y 1.

Sin embargo, cuando "modularizo" usando --libmode obtengo un resultado diverso
Código: [Seleccionar]
bgdc --libmode b.lib
bgdc --libmode -Lb.dcl a.lib
bgdc -La.dcl test.prg
bgdi test

Muestra 16, 16.

El archivo zip adjunto contiene el código necesario, que copio a continuación.

b.h
Código: [Seleccionar]
#ifndef __B_H__
#define __B_H__

import "mod_mem"

Type t_sprite
    int id_sprite = -1;
End

#endif

b.lib
Código: [Seleccionar]
#ifndef __SPRITE_LIB__
#define __SPRITE_LIB__

#include "b.h"

Global
    int sprite_CountSprites = 0;
End

Function sprite_new(t_sprite pointer dest)   
Begin   
    [dest].id_sprite = sprite_CountSprites;
   
    sprite_CountSprites++;
End
#endif

a.lib
Código: [Seleccionar]
import "mod_text"
import "mod_proc"

#ifndef __A_LIB__
#define __A_LIB__

#include "b.h"

Global
    t_sprite sprites[10];
End

Function initialize()
Begin
    sprite_new(sprites[0]);   
    sprite_new(sprites[1]); 
End

Process a()
Private
    int a, int b;
Begin
    a = sprites[0].id_sprite;
    b = sprites[1].id_sprite;
   
    write_int(0, 0, 0, 0, 0, &a);
    write_int(0, 0, 10, 0, 0, &b);
   
    Loop
        Frame;
    End
End

#endif
test.prg
Código: [Seleccionar]
import "mod_video"
import "mod_proc"
import "mod_text"
import "mod_key"

#include "b.h"

#ifdef MONOLITIC
#include "b.lib"
#include "a.lib"
#endif

Begin
    set_mode(320, 240, 16);
    set_fps(48, 0);
   
    initialize();
    a();

    Repeat       
        Frame;
    Until(key(_ESC))
   
    let_me_alone();
End

3
General / Exit code de bgdc
« en: Junio 07, 2017, 09:04:13 am »
Intentando automatizar compilar con BennuGD y PixTudio me he dado cuenta de que:
  • bgdc devuelve 1 cuando la compilación es exitosa.
  • pxtb devuelve 0 cuando la compilación es exitosa.
Lo más común es esperar que una salida normal se produzca con un exit code de 0. Hay algún motivo por el que BennuGD no lo haga de dicho modo?

4
Proyectos / Compilando Bennugd en Fedora 25
« en: Junio 06, 2017, 01:16:37 am »
Estoy teniendo problemillas para compilar Bennugd en Fedora 25.

Bajé los fuentes del SVN y después de ejecutar ./configure, make falla
Código: [Seleccionar]
/bin/sh ../../libtool --tag=CC   --mode=link gcc  -g -O2 -finline-functions -fno-strict-aliasing    -o bgdc main.o main_core.o token.o identifier.o segment.o constants.o strings.o varspace.o procedure.o codeblock.o c_main.o c_data.o c_code.o c_debug.o dcbw.o error.o sysstub.o typedef.o debug.o b_crypt.o files.o xctype.o -lc -ldl -lz 
libtool: link: gcc -g -O2 -finline-functions -fno-strict-aliasing -o bgdc main.o main_core.o token.o identifier.o segment.o constants.o strings.o varspace.o procedure.o codeblock.o c_main.o c_data.o c_code.o c_debug.o dcbw.o error.o sysstub.o typedef.o debug.o b_crypt.o files.o xctype.o  -lc -ldl -lz
b_crypt.o: In function `crypt_create':
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:60: undefined reference to `DES_key_sched'
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:61: undefined reference to `DES_key_sched'
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:62: undefined reference to `DES_key_sched'
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:50: undefined reference to `DES_key_sched'
b_crypt.o: In function `crypt_data':
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:113: undefined reference to `DES_ecb_encrypt'
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:114: undefined reference to `DES_ecb_encrypt'
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:115: undefined reference to `DES_ecb_encrypt'
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:95: undefined reference to `DES_ecb_encrypt'
/home/dacucar/Projects/bennugd-code/core/bgdc/src/../../common/b_crypt.c:101: undefined reference to `DES_ecb_encrypt'

Estoy casi seguro que tiene que ver con que me falta algo tipo libcrypto o libcrypt, pero he instalado todos los paquetes que me ha parecido pudieran tener algo que ver y nada, no lo consigo.

A ver si alguien me puede echar un cable, un saludo,

Darío

5
Site / Título incorrecto en noticia
« en: Agosto 31, 2016, 01:56:27 pm »
JaVis,

He visto que has actualizado la sección noticias. Gracias por la mención a mi programa pero hay un error en la palabra "pallete", debería ser "palette" ;)

6
General / Diversos problemas con mod_fsock y conexiones UDP
« en: Junio 20, 2016, 05:49:04 am »
Llevo un par de días intentando entender cómo hacer funcionar mod_fsock para conexiones UDP de un modo correcto y tengo varios problemas. Todos los ejemplos que he visto de uso de la mod_fsock hacen uso de TCP y he intentado leer todo lo posible tanto en la web, como en un "leeme.txt" que acompaña a la mod_fsock así como el propio código de la mod_fsock.

Estoy usando Linux y compilando con PixTudio.

1. El tema del bloqueo (fsock_setblock) que consido solucionar si modifico libsocket.c como ya he expuesto en mi tema anterior.

2. udpsock_recv devuelve siempre -1. Leyendo el código de libsocket.c entiendo que en Linux el valor devuelto se corresponde con recvfrom. En teoría un valor de -1 indicaría que ha habido algún problema, pero sin embargo los datos si que parecen ser recibidos!

3. No entiendo el valor devuelto por udpsock_recv en los dos últimos parámetros:

Código: [Seleccionar]
    char bytes[0];
    unsigned short port;
    unsigned int ip_address;

Código: [Seleccionar]
            received_bytes = udpsock_recv ( socket,
                &bytes,
                1,
                &ip_address,
                &port );

Entiendo que esto viene de:
Código: [Seleccionar]
int libsocket_recv_udp(int socket, void *dest, size_t len, int *ip, int *port) {
    struct sockaddr_in connection_info;
    int received_bytes;
#ifdef WIN32
    int connection_info_size;
#else
    unsigned int connection_info_size;
#endif

    received_bytes =
        recvfrom(socket, dest, len, 0, (SOCKADDR *)&connection_info, &connection_info_size);

    if (socket != -1) {
        *ip   = connection_info.sin_addr.s_addr; // ip
        *port = ntohs(connection_info.sin_port); // puerto
    }

    return received_bytes;
}

Pero no entiendo por qué siempre recibo una dirección IP que no tiene nada que ver con ninguna de las IPs de mi ordenador, ni el puerto tiene nada que ver con el puerto que he habilitado para establecer la comunicación.

Adjunto un video donde se muestra tanto el problema #2 como el problema #3. La ventana de consola de arriba a la derecha es una sesión en una raspberry local que tengo en mi red, y como véis, la información enviada por UDP es correctamente recibida en mi juego. La ventana de abajo a la derecha es un programa en Mono corriendo localmente, y también cuando envío un byte por ahí lo recibo en mi juego, pero no entiendo la IP que se muestra ni tampoco el puerto que se muestra, ya que en teoría yo estoy trabajando sobre el puerto 11000.

Mi código, después de un fsock_init:

Código: [Seleccionar]
Const
    _MULTIPLAYER_RECEIVE_INTERVAL = 300; // 1/100 s
    _MULTIPLAYER_TIMER_RECEIVE = 0;
End
Process multiplayer_receiver ()
Private
    int socket;
   
    char bytes[0];
    unsigned short port;
    unsigned int ip_address;
   
    int received_bytes;
    int n;
    string ip_text;
End
Begin
    socket = udpsock_open ();
    //say ( "Result setblock: " + fsock_setblock ( socket, 0 ) );
    fsock_bind ( socket, 11000 );
     
    timer [ _MULTIPLAYER_TIMER_RECEIVE ] = 0;
   
    Loop
        If ( timer[ _MULTIPLAYER_TIMER_RECEIVE ]
                > _MULTIPLAYER_RECEIVE_INTERVAL )
           
            ip_text = "";
            received_bytes = 0;
            bytes[0] = 0;
            port = 0;
            ip_address = 0;
           
            received_bytes = udpsock_recv ( socket,
                &bytes,
                1,
                &ip_address,
                &port );
           
            say ( "Received: " + received_bytes );
            say ( "Address: ");
            From n=0 To 3;
                ip_text += itoa( ( ip_address & (255 << n * 8) ) >> ( n * 8 ) ) + ".";
            End
            say ( "IP: " + ip_text );
            say ( "Port: " + port );
            say ( "Byte 0: " + bytes[0]);
           
            If ( received_bytes > 0 )
                // multiplayer_process_receive_frame ( &bytes );
            End
           
            say ("");
           
            timer[ _MULTIPLAYER_TIMER_RECEIVE ] = 0;
        End
       
        Frame;
    End

OnExit:
    fsock_close(socket);
End

A ver si alguien me puede echar una mano... Muchas gracias...

7
General / fsock y fsock_setblock con UDP (bug?)
« en: Junio 20, 2016, 02:25:39 am »
Hola,

Estoy teniendo problemillas utilizando mod_fsock. Estoy programando en PixTudio, pero imagino que sería igual en BennuGD ya que la mod_fsock creo no se tocó.

Básicamente quiero poder usar udpsock_recv de un modo no bloqueante, y para ello quiero usar la función fsock_setblock.

Pues bien, he probado a usar fsock_setblock ( socket, 1 ) y fsock_setblock ( socket, 0 ) sin éxito alguno (udpsock_recv SIEMPRE bloquea).

Ejemplo:

Código: [Seleccionar]
Private
    int socket;
    string from_ip;
    byte bytes[256];
    int port;
    int received_bytes;
End
Begin
    fsock_init ( 0 );
    socket = udpsock_open ();
    say ( "Result setblock: " + fsock_setblock ( socket, 1 ) );
    fsock_bind ( socket, 11000 );
     
    timer [0] = 0;
   
    Loop
        If ( timer[ 0 ] > 300 )
           
            received_bytes = udpsock_recv ( socket,
                &bytes,
                3,
                &from_ip,
                &port );
               
            say ( "Received: " + received_bytes );
            say(bytes[0]);
            say(bytes[1]);
            say(bytes[2]);
           
            If ( received_bytes > 0 )
                // multiplayer_process_receive_frame ( &bytes );
            End
           
            timer[ 0 ] = 0;
        End
       
        Frame;
    End

OnExit:
    fsock_close(socket);
    fsock_quit ();

Me puse a mirar el código de libsocket y vi que si lo sustituyo por lo siguiente:

Código: [Seleccionar]
int libsocket_setblock(int fd, u_long ulVal) {
#ifdef WIN32
    return (ioctlsocket(fd, FIONBIO, &ulVal));
#else
    //return (fcntl(fd, O_NONBLOCK, ulVal));
   
    int flags = fcntl(fd, F_GETFL, 0);
   
    if (flags < 0)
        return -1;
   
    flags = (ulVal != 0) ? (flags &~O_NONBLOCK) : (flags|O_NONBLOCK);

    return fcntl(fd, F_SETFL, flags);
#endif
}

Entonces sí que obtengo el comportamiento deseado. Ahora bien, no se si soy yo que no he entendido cómo usar libsocket_setblock o si es un bug.

Lógicamente estoy usando Linux, no tengo ni idea de lo que ocurre en Windows.

Agradecería de vuestro sabio conocimiento :)

EDIT: Edité el código C que siempre metia el flag O_NONBLOCK.
EDIT2: ulVal != 0 en lugar de ulVal == 0.

Un saludo,
Darío

8
PixTudio / Autogenerated PixTudio doc updated.
« en: Junio 13, 2016, 04:04:11 am »
I am having fun with PixTudio to create an Android game.

I took the chance to update my "autogenerated" documentation: http://dacucar.com/pixtudiodocs/

It is usefull to know which functions, variables and constants are exported by each module. There is no description of the functions though.

I added an "identifiers section" that contains an autogenerated list of keywords.



9
PixTudio / load_wav con archivos .ogg en Android
« en: Junio 12, 2016, 02:54:40 pm »
Hay algún motivo que pueda explicar que no consiga reproducir sonidos en formato *.ogg con load_wav y play_wav en Android pero que sí que funcione en Windows y Linux? (quitando los típicos problemas de que la ruta esté bien especificada, etc.)?

10
Es posible saber si la plataforma en la que corre mi juego tiene un "dispositivo apuntador"?

Por ejemplo, el input en Android puede funcionar via touch pero también puedo haber contectado un ratón a una tableta. Es posible saber si hay un "ratón" activo?


11
Hace algún tiempo anunciaba que estaba trabajando en dar soporte a todos los formatos nativos de Div / Bennu / PixTudio desde .NET y Mono.

He trabajado todo lo rápido que mi tiempo libre me permite y la cosa ha avanzado bastante, dando lugar a FenixLib. Todos los formatos gráficos de estos lenguajes, de 1bpp, 8bpp, 16bpp o 32bpp están soportados (aunque siendo justos debo decir que todavía hay algunas cosas no suficientemente testeadas)

Ya estáis tardando en crear editores de Fpg, Map y Fnt... :P

Aquí os dejo un screenshot de lo que se puede hacer con ella:

Código: [Seleccionar]
using FenixLib.Core;
using FenixLib.IO;

var font = new BitmapFont ( GraphicFormat.Format32bppArgb, FontEncoding.ISO85591 );

// Create a 10x10 transparent graphic
var glyphGraphic = new Graphic( GraphicFormat.Format32bppArgb, 10, 10, new byte[10 * 10 * 4] );

// Create the glyph and assign it to the letter 'å'
// å is a character that exists in the ISO8559-1 code page.
font['å'] = new Glyph ( glyphGraphic );

// Save the font to a Fnt file (only 'å' will contain a bitmap)
font.SaveToFnt ( 'myfont.fnt' );

Todo el código descargable desde https://github.com/dacucar/fenixlib.
En la misma página del proyecto encontráis unos ejemplos de como se puede usar en proyectos reales: https://github.com/dacucar/fenixlib/wiki/Examples

Hay algo de documentación pero todavía bastante poca.

Como se que mucha gente tendrá poco interés si no pongo una imagen, la siguiente captura muestra uno de los ejemplos de uso de la librería:



Cuál es el interés de esta librería?
  • Abrir posibilidades para el que quiera poder trabajar con los formatos nativos de Bennu/PixTudio/Div desde .NET sin tener que reinventar la rueda. Esto me incluye a mí mismo
     en el desarrollo del plugin para MonoDevelop / Xamarín del que hablaba hace un mes
  • Permitir que los que desarrolláis juegos podáis utilizar C# para automatizar ciertas tareas que tienen relación con estos formatos.
  • Sí el tiempo me lo permite, poder portar el concepto de Smart Fpg Editor a .NET/Mono o posibilitar que alguien lo haga (Javis??? :) )
Y bueno porque quería experimentar con C#, NUnit, Gtk y algunas otras cosillas.
La verdad es que estoy bastante contento con cómo está quedando estructurada la librería. Espero le veáis las posibilidades que yo le veo :)

Un saludo,
Darío

12
General / Bennu / PixTudio native files wanted!
« en: Febrero 23, 2016, 04:43:17 pm »
Hola,

He terminado prácticamente todo lo que necesitaba para dar soporte a todos los formatos de archivo de Bennu, pero ahora quiero escribir algunos tests con archivos reales...

Alguien tiene:
  • Un .fnt de 16bpp (magic fnx)
  • Un .fnt de 32bpp (magic fnx)
  • Un .fnt de 8bpp (magic fnx) (ojo, fnt de div ya tengo para aburrirme, esos tienen magic fnt).
  • Cualquier archivo de bennu de 1bpp (map, fpg, fnt) (a ser posible uno de cada).
Gracias!

13
General / Formato .FNT de div
« en: Febrero 20, 2016, 04:32:00 am »
Hola,

Estoy trabajando en soporte para las fuentes en mi librería BennuLib y me ha surgido una duda:

En el formato de archivo de Fuentes de DIV (ese en el que los tres primeros bytes son FNT), hay una zona de 4 bytes entre la paletta y la sección información de los caracteres.

En los archivos FNT de Bennu (con magic FNX), esos 4 bytes indican la tabla de caracteres (ISO8559-1 o CP850).

Leyendo el código de file_fnt.c (en los sources de PixTudio, supongo igual en Bennu) me da la sensación de que también en DIV se utilizan para lo mismo (creo que en el antiguo manual de DIV1 se explicaba este campo como FontInfo).

Soportaba Div también los dos tipos de tabla de caracteres? O todas las fuentes Div usan CP850?

De file_fnt.c:
Código: [Seleccionar]
    /* Read the character data (detect old format) */

    if (header[2] == 'x') {
        if (!file_readSint32(fp, &types)) {
            pal_destroy(pal);
            return -1;
        }
        // ...
    } else {
        if (!file_readSint32(fp, &types)) {
            pal_destroy(pal);
            return -1;
        }
        // ...
    }



14
PixTudio / Estado del soporte archivos 1bpp?
« en: Febrero 17, 2016, 04:06:38 pm »
Para poder dar soporte a los archivos nativos de Bennu/PixTudio en MonoDevelop estoy escribiendo una librería en .NET (el código está aquí debido a que todo empezó como un port a VB.NET de la librería bennulib que usaba SmartFpgEditor pero al final acabé migrando todo a C# y en breve crearé un repositorio en particular).

He estado mirando los sources de PixTudio y he visto que las funciones de carga incluyen soporte para archivos gráficos 1bpp (fuentes, maps y fpgs). Se sabe si funcionan este tipo de archivos? No tengo ninguno y antes de crearme uno a mano pregunto si alguien sabe algo...

Muchas gracias, un saludo,
Darío



15
Hola,

De cara a permitir configurar las opciones desde MonoDevelop, me gustaría tener una idea más clara sobre los parámetros que son válidos en PixTudio. He visto que pxtb muestra el mismo output que bgdc.

Código: [Seleccionar]
   -d              Debugging mode
   -o ouputfile    Ouput DCB file
   -i dir          Adds the directory to the PATH
   -a              Automaticaly adds all files to the DCB
   -f file         Adds a single file to the DCB
   -l lang         Specify locale settings
   -s stub         Generate a stubbed executable from the given stub
   -g              Stores debugging information at the DCB
   -c              File uses the MS-DOS character set
   -D macro=text   Set a macro
   -p|--pedantic   Don't use automatic declare
   --libmode       Build a library
   -L library      Include a library
   -C options      Specify compiler options
                   Where options are:
                   a    Enable automatic declare functions
[code]

Dudas:
[list type=decimal]
[li]Qué significa la opción -s (no entiendo la descripción)?[/li]
[li]Funciona la función -a?[/li]
[li]Tiene sentido la función -L en Android/iOs? (He entendido mal o PixTudio es "monolítico"?)[/li]
[li]Que diferencia hay entre usar -C a (automatic declare) y NO usar -p (don't use automatic declare)[/li]
[li]Hay alguna otra opción que solo tenga sentido en determinadas plataformas?[/li]
[/list]Un saludo,
Darío

Páginas: [1] 2 3