FenixLib - Soporte multiplataforma para Map, Fpg, Fnt y Pal desde .NET / Mono

Started by darío, March 22, 2016, 07:53:15 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

darío

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:


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
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

JaViS

Felicidades! es un excelente aporte a la comunidad :D


Pues, ahora me pones a pensar en hacer un IDE en .NET jaja. Pero vamos por partes, que tengo un juego que terminar.


Saludos y gracias !
Working on Anarkade. A couch multiplayer 2D shooter.

Drumpi

Mola. .NET es una plataforma que siempre me ha atraido por curiosidad (la de gente que programa o dice que le gusta programar en .NET es grande). Este puede ser el incentivo que faltaba :D

Enhorabuena por el proyecto, has llegado muy lejos si has dado soporte a los formatos de 1bit y a todos los FNT :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

warrior_rockk

¡Me viene de maravilla! Me desarrollé una librería Bennu para .NET para el editor de niveles de mi juego pero sólo incluí lectura de fpg de 8 bits, que era los que utilizaba. Ahora quería cambiar de tipo de fpg y me veía teniendo que implementarlo, así que me viene como anillo al dedo. ¡Muchas gracias!

FreeYourMind

Mil gracias, si tuviera tiempo incluso podria terminar mi editor fpg con tu preciada ayuda  ;D

l1nk3rn3l

Excelente aporte ... para crear herramientas con xamarin y visualstudio + multiplataforma

darío

Pues me alegra que haya interés. Si alguien tiene pensado hacer algo con ella y necesita ayuda, no hay más que preguntar. Os mantendré informados, y a los que tengáis cuenta en github podéis seguir el proyecto por ahí.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

darío

Avances:

Los archivos 8bpp que genera la librería son retro-compatibles con DIV games studio (antes no lo eran devido a que la sección "gamma" se generaba con 0). Probablemente poco útil para la mayoría pero necesario para poder decir que efectivamente la librería soporta los archivos de Div...




My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

¿La sección gamma a cero no la leía DIV? ¿Y con qué la has rellenado?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

darío

Pues básicamente he trasteado con DIV para intentar entender como funcionaba, luego examinado algún archivo .MAP de div en un editor hexadecimal y luego he escrito lo siguiente (es quizás un poco sucio porque era importante para mí ser explícito con lo que estaba haciendo).


public void WriteReservedPaletteGammaSection ()
{
    byte[] bytes = new byte[NativeFormat.ReservedBytesSize];
    const int rowSize = 36;

    // Compatibility for DIV requires that at least the byte indicating the number
    // of colors of each Gamma stride is not 0.
    // Note: this is not required for BennuGD / PixTudio, but it does not harm
    for ( int row = 0 ; row < 16 ; row++ )
    {
        // Reference: Analysis of Div Games Studio beta map editor
        bytes[row * rowSize + 0] = 32; // Number of colors (8, 16, 32)
        bytes[row * rowSize + 1] = 0;  // Edit every N colors (0, 1, 4, 8)
        bytes[row * rowSize + 2] = 0;  // Editorial / Fix (0, 1)
        bytes[row * rowSize + 3] = 0;  // ?

        for ( int color = 0 ; color < 16 ; color++ )
        {
            var value = ( byte ) ( row * 16 + color );
            bytes[row * rowSize + 4 + color] = value;
            bytes[row * rowSize + 4 + 16 + color] = ( byte ) ( ( value + 16 ) % 256 );
        }
    }

    base.Write ( bytes );
}


No tengo mucha idea de para que sirven estas cosas en el editor de DIV (no tengo el manual de DIV conmigo ni ganas de experimentar mucho más), pero la conclusion a la que llegué era:

Hay 16 "filas gamma".
Cada una ocupa 36bytes.
Los primeros 4bytes de esos son "la cabecera", los restantes 32 tienen un número de 0 a 255 que indica un color en la paleta. Los relleno de forma análoga a lo que he visto hace el editor de DIV games studio.
El primer byte de esos 36 tiene NO puede ser 0 si quieres que el archivo sea compatible con DIV. (Tiene que ser 8, 16 o 32). Esta es la única condición necesaria en realidad.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats


darío

Gracias :). Miré de enlazar a DIV-GO desde la página del proyecto, pero me pareció que DIV-GO no permite subir archivos FPG creados en el ordenador y entonces no tenía mucho sentido decir que la librería sirve también para DIV-GO, es correcto?
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

Mmm, vale, esa información es vital para los Gammas.
En teoría es para rellenar esa sección de colores que hay en la parte derecha de la ventana de selección de color de la paleta, esa que has puesto en la última imágen. Se usan para, por ejemplo, cuando abres el generador de explosiones, y quieres usar un degradado de color, poder seleccionar de forma rápida un degradado personalizado (una fila de esas de 16 colores de la sección gammas, creo que el acceso rápido era CTRL y cursor arriba/abajo).
Pero es eso, información para usar con los editores de DIV, no tienen mucho uso en el propio código porque no hay forma de acceder a esa información, a menos que leas el fichero de forma manual.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

AmakaSt

Quote from: darío on March 30, 2016, 04:17:16 PM
Gracias :) . Miré de enlazar a DIV-GO desde la página del proyecto, pero me pareció que DIV-GO no permite subir archivos FPG creados en el ordenador y entonces no tenía mucho sentido decir que la librería sirve también para DIV-GO, es correcto?

Desde la versión online (divgo.net) no se puede subir archivos fpg, ni map, ni fnt... ningún archivo en realidad. :P
Para utilizar los archivos fpg, map, fnt, xm, s3m, etc... del ordenador mejor es descargar Div GO para trabajar en local que entonces si se puede cargar cualquier archivo del ordenador. La versión online sirve para realizar testeos, pruebas, ejemplos, tutoriales y para documentar... también se puede hacer juegos pero sin usar archivos locales salvo imágenes y tampoco se suben al servidor, los datos quedan guardados en el navegador local. :)

Un saludo.

darío

No traigo muchas novedades pero quería comentar que he empaquetado fenixlib como un NuGet y subido al repositorio NuGet.org, que debería hacer más fácil su uso.

https://www.nuget.org/packages/FenixLib/

Lo he hecho principalmente porque tengo unos proyectos a medias que hacen uso de la librería y andar con submodulos git me parecía un engorro...
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats