🐸 Data Frog SF2000 🐸

hardaway escribió:Pillada barata.... consolon! Y eso tengo la Switch v1 pero esta es plug and play para Roms y ira a más sitios seguro.
Esta consola es de batalla y si se rompe te puedes comprar otra tranquilamente. Una Switch v1 vulnerable es mejor cuidarla bastante. [ginyo]

hardaway escribió:Merecea la pena el firmware update? Se tarda mucho o es complicado? No se si ya viene actualizado o no...
Supongo que no vendrá actualizado. La actualización gana en ciertos aspectos de la emulación.

hardaway escribió:Lo de la pila adicional que comentáis, es por si casca o para tener más capacidad? Hay alguna que calce mejor?
En mi caso es por aumentar la capacidad y guardar la original como repuesto.
Clanger puso este enlace y es muy buena opción.

hardaway escribió:A mi me vino con la tarjeta sd dentro y con una especie de pendrive que pone "micro sd" que no se para que servirá
El pendrive permite insertar SD y microSD para enchufar tarjetas en un puerto USB A del PC. Así se le actualiza el firmware, temas del menú o los juegos.
Joseph K. escribió:



Tiene buena pinta!

Una pregunta, el enlace que habéis puesto la pila, es la que tiene pezón? o es plana?...
Joseph K. escribió:


Buen avance
Me quedo por aquí, me ha llegado esta mañana y estoy bajando el firm 1.5
Ocupa 8Gb, algun tuto para actualizar? Gracias!

Edito: he actualizado y todo muy parecido a como estaba antes, ¿no hay ninguna sección donde ver la versión del firm que tenemos, verdad?
aleqt79 escribió:Una pregunta, el enlace que habéis puesto la pila, es la que tiene pezón? o es plana?...

Pilla con pezón, que yo cogí una plana y hasta que me llegue la pieza extra que he comprado la he tenido que apañar con papel de aluminio para que hiciera contacto.

RaZoR1179 escribió:Me quedo por aquí, me ha llegado esta mañana y estoy bajando el firm 1.5
Ocupa 8Gb, algun tuto para actualizar? Gracias!

Cuadri escribió:
aleqt79 escribió:Una pregunta, el enlace que habéis puesto la pila, es la que tiene pezón? o es plana?...

Pilla con pezón, que yo cogí una plana y hasta que me llegue la pieza extra que he comprado la he tenido que apañar con papel de aluminio para que hiciera contacto.

RaZoR1179 escribió:Me quedo por aquí, me ha llegado esta mañana y estoy bajando el firm 1.5
Ocupa 8Gb, algun tuto para actualizar? Gracias!


Ok gracias
hardaway escribió:Pillada barata.... consolon! Y eso tengo la Switch v1 pero esta es plug and play para Roms y ira a más sitios seguro.

Merecea la pena el firmware update? Se tarda mucho o es complicado? No se si ya viene actualizado o no...

Lo de la pila adicional que comentáis, es por si casca o para tener más capacidad? Hay alguna que calce mejor?

A mi me vino con la tarjeta sd dentro y con una especie de pendrive que pone "micro sd" que no se para que servirá


El firmware vendrá actualizado.
Un truco para saber que fw lleva:
1) Ve a https://vonmillhausen.github.io/sf2000/ ... hanger.htm
2) Carga el bisrv.asd de la carpeta bios y os dirá la versión.
La pila es para aumentar capacidad o mejorar calidad de la batería chinosa que viene.
Y el pendrive es un lector de microSD.
INFO: May 22nd bisrv.asd detected.

Esta es la última update a dia de hoy, ¿verdad?

¿Como se remapean botones? No veo como se hace por ningun lado, jeje
RaZoR1179 escribió:INFO: May 22nd bisrv.asd detected.

Esta es la última update a dia de hoy, ¿verdad?

¿Como se remapean botones? No veo como se hace por ningun lado, jeje


Sí, el último. 22 de mayo o 1.5V.
https://vonmillhausen.github.io/sf2000/ ... s-bisrvasd

Los botones se remapean globalmente por consola desde el menu User Roms & Setings.
Pero a veces da problemas.
De hecho, creo que SFC y MD están intercambiados.
Hazte un backup de la carpeta bios y resources, por si tienes que recuperarlo.
Soy nuevo en esto, he bajado una rom y pone .nes. Es válida? o hay que buscar una rom especial?
anpeasolana escribió:Soy nuevo en esto, he bajado una rom y pone .nes. Es válida? o hay que buscar una rom especial?


Es la extensión para los juegos de nes, sí.
También reconoce nfc, fds, unf.
Para cargarla sin muchas historias, tienes que meterla en la carpeta ROMS.
Se supone que descomprimida va mejor (al menos los de snes).

Para que la reconozca en la carpeta FC, tienes que usar frogtool.
Ahí solo reconoce ficheros .zfc.
Tienes que ponerla ahí comprimida en formato zip.
Junto con una imagen 208x144px en formato png con el mismo nombre que el fichero zip y en la misma carpeta.
Y generarlo a través de frogtool.
https://github.com/tzlion/frogtool
Antes haz backup de la carpeta.
Alguien logro correr el Kof 2002 Magic plus? Según leí sí es compatible pero en mi caso no arranca, alguien ya lo uso?

También encontré una batería a buen costo y con pronto envío, ya que la que postearon no cuenta con seguimiento si son de México creo les ayudara.Enlace
Comienza el testeo con GameBoy Advance en Retroarch:



Estan saliendo una nueva remesa de SF2000 serigrafiadas:

Imagen
La mía me ha venido serigrafíada, pensaba que todas venían así jeje.
F Society escribió:También encontré una batería a buen costo y con pronto envío, ya que la que postearon no cuenta con seguimiento si son de México creo les ayudara.Enlace


Gracias... pues habrá que checarlo pues mande pedir una bateria para una la FC3000 y nunca llego.... [+furioso]
Scissorman escribió:
F Society escribió:También encontré una batería a buen costo y con pronto envío, ya que la que postearon no cuenta con seguimiento si son de México creo les ayudara.Enlace


Gracias... pues habrá que checarlo pues mande pedir una bateria para una la FC3000 y nunca llego.... [+furioso]


Tal vez te llegue pero como a mediados o principios de octubre, yo la ordene y mi envío llegara en 4 o 5 días máximo
He visto que es posible jugar a juegos de SMS. Es posible también hacerlo con juegos de Gamegear?
pjexposito escribió:He visto que es posible jugar a juegos de SMS. Es posible también hacerlo con juegos de Gamegear?


No trae emulador de Game Gear. Sí de Mega Drive
Gracias.

La consola me ha llegado hoy y por lo que estoy investigando es posible jugar a juegos de Master System (SMS) si se copian las roms en la carpeta de Mega. Supongo que esto será porque la Megadrive permite jugar a los juegos de SMS de forma nativa. El tema es que con Gamegear el truco no funciona.
Se que es posible hacer pasar una rom de GG por una de SMS aplicando un IPS, pero termina deformando el juego y se producen varios glitches. Por eso preguntaba si alguien había logrado hacerlas funcionar.

Un saludo.
De SMS yo los he metido en una carpeta que lleva para juegos externos y han funcionado sin ningún problema. Al menos los Alex Kidd, Sonic y demás que he metido. De GG no funcionan.
¿Con los hacks GameGearToMasterSystem de SMS Power! no funcionan?
czt escribió:También se puede probar el emulador drsms

http://www.webpersona.com/drsms/downloads.html


Es una muy buena idea. Lo que pasa es que lo he probado y no funciona bien. En mi primera prueba salía la bios de gba y luego pantalla en negro. En la segunda prueba ni siquiera cargaba la bios. Seguiré probando.
Los juegos de máster system es un rollo el jugar ya que el mapeado de botones no funciona en megadrive y no se puede cambiar. Por lo que el botón b máster system y c de megadrive están en el gatillo. En megadrive en la mayoría de juegos dentro de caso juego en cuestión se puede elegir botones y se puede solucionar pero en máster system no ...a ver si arreglan lo del mapeado....
Pues yo e cambiado el boton R por el Y y ningun problema,pues despues tienes que maoear el R correctamente.
Estos dias estoy con los juegos de Mame,pues hay muchos que funcionan y estan geniales.Hay muchos que estan rotados y es un rollo,como el Outzone,que es de los que mas me gustan y funciona perfectamente,pero rotado y a full screen
[quote="Willysonicteam"]Pues yo e cambiado el boton R por el Y y ningun problema,pues despues tienes que maoear el R correctamente.
Estos dias estoy con los juegos de Mame,pues hay muchos que funcionan y estan geniales.Hay muchos que estan rotados y es un rollo,como el Outzone,que es de los que mas me gustan y funciona perfectamente,pero rotado y a full screen[/quote

Pues es raro a mi no funciona, lo intente con todos los botones para quitar el gatillo R y nada....gracias
Buenas Compis

Alguno sabe que rooms de mame o arcade se le pueden poner?

Un saludo
aleqt79 escribió:
Willysonicteam escribió:Pues yo e cambiado el boton R por el Y y ningun problema,pues despues tienes que maoear el R correctamente.
Estos dias estoy con los juegos de Mame,pues hay muchos que funcionan y estan geniales.Hay muchos que estan rotados y es un rollo,como el Outzone,que es de los que mas me gustan y funciona perfectamente,pero rotado y a full screen[/quote

Pues es raro a mi no funciona, lo intente con todos los botones para quitar el gatillo R y nada....gracias
Creo que alguien mencionó que cuando modificas los controles en Megadrive cambias los de SNES y viceversa.

Otra opción es utilizar la herramienta de la comunidad.
Cuadri escribió:
aleqt79 escribió:
Willysonicteam escribió:Pues yo e cambiado el boton R por el Y y ningun problema,pues despues tienes que maoear el R correctamente.
Estos dias estoy con los juegos de Mame,pues hay muchos que funcionan y estan geniales.Hay muchos que estan rotados y es un rollo,como el Outzone,que es de los que mas me gustan y funciona perfectamente,pero rotado y a full screen[/quote

Pues es raro a mi no funciona, lo intente con todos los botones para quitar el gatillo R y nada....gracias
Creo que alguien mencionó que cuando modificas los controles en Megadrive cambias los de SNES y viceversa.

Otra opción es utilizar la herramienta de la comunidad.


Gracias, la opción de la herramienta de la comunidad tampoco me funciona, pone que es firmware anteriores al 15 de mayo o sea entiendo para los que no llevaban en la actualización el mapeado de botones.
aleqt79 escribió:Gracias, la opción de la herramienta de la comunidad tampoco me funciona, pone que es firmware anteriores al 15 de mayo o sea entiendo para los que no llevaban en la actualización el mapeado de botones.



No entiendo, funciona perfectamente con la 1.5V del 22 de mayo. Con la última.
Yo lo acabo de comprobar.
¿Tu versión está actualizada?
la micro SD que viene con la consola tiene serigrafiado 16gb pero realmente tiene 32gb.

Adjuntos

LM_FUSTERO escribió:la micro SD que viene con la consola tiene serigrafiado 16gb pero realmente tiene 32gb.


Cuidado con eso que los chinos trampean los espacios de disco no sea que expandas y se te corrompa todo.
naxeras escribió:
LM_FUSTERO escribió:la micro SD que viene con la consola tiene serigrafiado 16gb pero realmente tiene 32gb.


Cuidado con eso que los chinos trampean los espacios de disco no sea que expandas y se te corrompa todo.


Sí es de 32 GB lo que pasa es que la iso es de 16 gb pero con mini tool partition puedes absorber ese espacio sin problemas, particularmente cambie la SD por una que tuviera más almacenamiento y me sucedió lo mismo, hizo una partición de 16 y lo demás lo dejo como inactivo, después junte las particiones y sin problemas, después ya hice lo mismo con la de fabrica y todo funciona igual.
Wkr escribió:
aleqt79 escribió:Gracias, la opción de la herramienta de la comunidad tampoco me funciona, pone que es firmware anteriores al 15 de mayo o sea entiendo para los que no llevaban en la actualización el mapeado de botones.



No entiendo, funciona perfectamente con la 1.5V del 22 de mayo. Con la última.
Yo lo acabo de comprobar.
¿Tu versión está actualizada?



Entiendo que es la última si lleva el mapeado de botones, selección del lenguaje y carpeta de favoritos, no?

Yo la compre a primeros de junio, entiendo que venia ya esa versión

Alguien que me pueda explicar como se mapea, es elegir el botón en cuestión que quieres cambiar y señalar que botón asignas no? en el caso de megadrive no hay botón R y L en el mapeado, no la tengo delante creo que es C y Z
Helwem escribió:Buenas Compis

Alguno sabe que rooms de mame o arcade se le pueden poner?

Un saludo

Estoy igual. He probado varias roms de mame y ninguna me carga. Tanto en la carpeta ROMS como en ARCADE y usando frogtool. A ver si alguien ha probado y le ha funcionado.
Me acaba de llegar y las primeras impresiones son muy buenas. Por 11.46€ me parece increíble como se ve y se escucha. Hay que bajarle el volumen a la mitad o te deja sordo. Gracias por descubrirme esta maravilla.
Wkr escribió:Por lo que tengo entendido solo se pueden cargar las roms que tiene en su dataset.
https://vonmillhausen.github.io/sf2000/ ... 0_FBA.html

Lo explica aquí:
https://vonmillhausen.github.io/sf2000/#arcade

Exacto, usa un romset de FBA no de mame y uno especifico, aun asi.no funcionan todos
Cuidado porque el formato que lee es .zip.Yo ando varios dias haciendo un pack,y la verdad que no vale la pena,porque los juegos de mame guapos tienen la pantalla rotada,hasta los juegos de dos rombos,jejeje ;)
Cody_Travers escribió:
Wkr escribió:Por lo que tengo entendido solo se pueden cargar las roms que tiene en su dataset.
https://vonmillhausen.github.io/sf2000/ ... 0_FBA.html

Lo explica aquí:
https://vonmillhausen.github.io/sf2000/#arcade

Exacto, usa un romset de FBA no de mame y uno especifico, aun asi.no funcionan todos



Me he creado un romset con todas las roms soportadas (usando el DAT) y los previews. ¿Cómo meto ahora el contenido en la consola? Resulta que Grogtool aun no es capaz y no consigo entender del todo como están creados los archivos zfb. ¿Es un zip con la imagen y el nombre? Lo digo porque no me permite descomprimirlo y tampoco veo ninguna cabecera reconocible.

A ver si alguien tiene algo más de información y puedo montar un script de Python que haga el trabajo sucio.

Edito:

Estoy tonto. Realmente no es un archivo ZIP. En la web de Frogtool explican como está formado. Es RAW en formato RGB565 de 144x208px. Luego dos ceros (00), el nombre original de la rom y dos ceros más.

A ver si los nenes mañana me dejan un rato y me hago un script para pasar todas las roms y así las puedo probar.
pjexposito escribió:
Cody_Travers escribió:
Wkr escribió:Por lo que tengo entendido solo se pueden cargar las roms que tiene en su dataset.
https://vonmillhausen.github.io/sf2000/ ... 0_FBA.html

Lo explica aquí:
https://vonmillhausen.github.io/sf2000/#arcade

Exacto, usa un romset de FBA no de mame y uno especifico, aun asi.no funcionan todos



Me he creado un romset con todas las roms soportadas (usando el DAT) y los previews. ¿Cómo meto ahora el contenido en la consola? Resulta que Grogtool aun no es capaz y no consigo entender del todo como están creados los archivos zfb. ¿Es un zip con la imagen y el nombre? Lo digo porque no me permite descomprimirlo y tampoco veo ninguna cabecera reconocible.

A ver si alguien tiene algo más de información y puedo montar un script de Python que haga el trabajo sucio.

Edito:

Estoy tonto. Realmente no es un archivo ZIP. En la web de Frogtool explican como está formado. Es RAW en formato RGB565 de 144x208px. Luego dos ceros (00), el nombre original de la rom y dos ceros más.

A ver si los nenes mañana me dejan un rato y me hago un script para pasar todas las roms y así las puedo probar.


Ese archivo se crea cuando utilizas frog tool al meter un rom junto con su imagen en png ejemplo: kof98.zip + kof98.png

Encontraste los previews en alguna web? Y si sí hay link? 👀 Yo encontré varios roms de snes, gbc y gba en español son bastantes tal vez podriamos realizar un pack que se encuentre preparado con los roms y previews traducidos.
F Society escribió:Ese archivo se crea cuando utilizas frog tool al meter un rom junto con su imagen en png ejemplo: kof98.zip + kof98.png

Encontraste los previews en alguna web? Y si sí hay link? 👀 Yo encontré varios roms de snes, gbc y gba en español son bastantes tal vez podriamos realizar un pack que se encuentre preparado con los roms y previews traducidos.


Por ahora Frogtool sólo permite hacer lo que dices con los juegos de consola, no con los de Arcade. De todas formas ya he terminado el script y tengo las roms del archivo "DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat" con sus carátulas y funcionando. Es curioso que el Tetris original no esté en el DAT. Supongo que no funcionará correctamente.
pjexposito escribió:
F Society escribió:Ese archivo se crea cuando utilizas frog tool al meter un rom junto con su imagen en png ejemplo: kof98.zip + kof98.png

Encontraste los previews en alguna web? Y si sí hay link? 👀 Yo encontré varios roms de snes, gbc y gba en español son bastantes tal vez podriamos realizar un pack que se encuentre preparado con los roms y previews traducidos.


Por ahora Frogtool sólo permite hacer lo que dices con los juegos de consola, no con los de Arcade. De todas formas ya he terminado el script y tengo las roms del archivo "DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat" con sus carátulas y funcionando. Es curioso que el Tetris original no esté en el DAT. Supongo que no funcionará correctamente.


Me puuede pasar info o el script para meter alguna rom de Fuera para arcade

Un saludo y gracias compi
pjexposito escribió:
F Society escribió:Ese archivo se crea cuando utilizas frog tool al meter un rom junto con su imagen en png ejemplo: kof98.zip + kof98.png

Encontraste los previews en alguna web? Y si sí hay link? 👀 Yo encontré varios roms de snes, gbc y gba en español son bastantes tal vez podriamos realizar un pack que se encuentre preparado con los roms y previews traducidos.


Por ahora Frogtool sólo permite hacer lo que dices con los juegos de consola, no con los de Arcade. De todas formas ya he terminado el script y tengo las roms del archivo "DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat" con sus carátulas y funcionando. Es curioso que el Tetris original no esté en el DAT. Supongo que no funcionará correctamente.

Sería interesante que mandes video para ver cómo funciona y cómo quedo
Hola de nuevo. Os subo el cutre script para transformar el romset de Arcade.

Los pasos son los siguientes (se que no tienen mucho sentido pero no me ha dado tiempo a más):

-Es necesario crear el nuevo romset usando clrmamepro junto con el DAT que os adjunto.

-Utilizando algún scraper (como Skraper 1.1.1), se descargan los screenshots de los juegos.

-Se copia el script de Python en una carpeta junto con el archivo DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat.

-Se crea una carpeta roms y dentro se incluyen los previews o los screenshots de los juegos (en formato png o jpg). Ojo, no se meten las roms en zip ni nada similar, sólo los png/jpg.

-Se ejecuta el script. Es necesario instalar antes la librería Pillow mediante la orden
pip install pillow


-Este script creará todos los archivos .zfb.

-Se copian los archivos zfb a la carpeta ARCADE de la SD y las roms en zip a la carpeta /ARCADE/bin de la SD.

-Se pasa el frogtool sobre la carpeta ARCADE para generar el listado de roms.


No me deja subir archivos (no se porqué). Os subo el código:
from PIL import Image
import struct
import os
import re
import xml.etree.ElementTree as ET

#Generado por ChatGPT
def crop_and_resize_image(input_path, output_path, target_width, target_height):
    # Abrir la imagen
    image = Image.open(input_path)

    # Obtener las dimensiones de la imagen original
    original_width, original_height = image.size

    # Calcular el recorte en la anchura
    left = (original_width - target_width) // 2
    right = (original_width + target_width) // 2

    # Recortar la imagen manteniendo toda la altura
    cropped_image = image.crop((left, 0, right, original_height))

    # Redimensionar la imagen manteniendo la relación de aspecto
    resized_image = cropped_image.resize((target_width, target_height))

    # Guardar la imagen redimensionada
    resized_image.save(output_path)


#El código de rgb565_convert está sacado del script de Frogtool (https://github.com/tzlion/frogtool)
def rgb565_convert(src_filename, dest_filename, dest_size=None):

    try:
        srcimage = Image.open(src_filename)
    except (OSError, IOError):
        print(f"! Failed opening image file {src_filename} for conversion")
        return False
    try:
        dest_file = open(dest_filename, "wb")
    except (OSError, IOError):
        print(f"! Failed opening destination file {dest_filename} for conversion")
        return False

    # convert the image to RGB if it was not already
    image = Image.new('RGB', srcimage.size, (0, 0, 0))
    image.paste(srcimage, None)

    if dest_size and image.size != dest_size:
        image = image.resize(dest_size)

    image_height = image.size[1]
    image_width = image.size[0]
    pixels = image.load()

    if not pixels:
        print(f"! Failed to load image from {src_filename}")
        return False

    for h in range(image_height):
        for w in range(image_width):
            pixel = pixels[w, h]
            if not type(pixel) is tuple:
                print(f"! Unexpected pixel type at {w}x{h} from {src_filename}")
                return False
            r = pixel[0] >> 3
            g = pixel[1] >> 2
            b = pixel[2] >> 3
            rgb = (r << 11) | (g << 5) | b
            dest_file.write(struct.pack('H', rgb))

    dest_file.close()

    return True

def anade_final(src_filename, nombre_archivo):
    with open(src_filename, 'r+b') as file:
        content = file.read()
        nombre_archivo = nombre_archivo+'.zip'
        # Agrega los dos ceros al final del contenido
        content_with_zeros = content + b'\x00\x00\x00\x00' + nombre_archivo.encode() + b'\x00\x00'
        # Escribe el contenido actualizado en el archivo binario
        file.seek(0, os.SEEK_END)  # Posicionarse al final del archivo
        file.write(content_with_zeros)
        file.flush()  # Asegurarse de que los cambios se escriban sin cerrar el archivo

def obtener_descripcion_por_nombre_de_juego(nombre_juego, juegos_dict):
    return juegos_dict.get(nombre_juego)

def cargar_juegos_descripciones(file_path):
    juegos_dict = {}
    tree = ET.parse(file_path)
    root = tree.getroot()
    for juego in root.findall('game'):
        nombre_juego = juego.attrib['name']
        descripcion = juego.find('description').text
        caracteres_prohibidos = r'[<>:"/\\|?*]'
        nombre_limpio = re.sub(caracteres_prohibidos, '', descripcion)
        juegos_dict[nombre_juego] = nombre_limpio
    return juegos_dict

def procesa_archivos(carpeta):
    # Obtener el diccionario de juegos y descripciones
    juegos_dict = cargar_juegos_descripciones('DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat')
   
    for archivo in os.scandir(carpeta):
        nombre, extension = os.path.splitext(os.path.basename(archivo.path))
        ruta = os.path.dirname(archivo.path)
        mini = os.path.join(ruta, nombre+'_mini'+extension)
        nombre_final = os.path.join(ruta, juegos_dict.get(nombre, 'Unknown') + '.zfb')
        temporal = os.path.join(ruta, 'temp.raw')

        print('Procesando '+nombre+' con extensión '+extension+' en la ruta '+ruta+' como '+nombre_final)
        crop_and_resize_image(archivo.path, mini, target_width, target_height)
        rgb565_convert(mini, temporal)
        anade_final(temporal, nombre)
        os.rename(temporal, nombre_final)
        os.remove(mini)

# Ejemplo de uso
target_width = 144
target_height = 208
procesa_archivos('roms')
Al final ha caído esta en negro, me imagino q es la misma. Dejo el enlace con un mando, porque sin mando ya no hay stock.
Datagrog
Pues ya la tengo en casa por 13 euros. Pantalla muy bien, algo pequeña pero se ve bien, y el sonido también. A ver si sacan un cwf para mejorar SNES y GBA y demás, pero por lo que vale no se le puede pedir mas
pjexposito escribió:Hola de nuevo. Os subo el cutre script para transformar el romset de Arcade.

Los pasos son los siguientes (se que no tienen mucho sentido pero no me ha dado tiempo a más):

-Es necesario crear el nuevo romset usando clrmamepro junto con el DAT que os adjunto.

-Utilizando algún scraper (como Skraper 1.1.1), se descargan los screenshots de los juegos.

-Se copia el script de Python en una carpeta junto con el archivo DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat.

-Se crea una carpeta roms y dentro se incluyen los previews o los screenshots de los juegos (en formato png o jpg). Ojo, no se meten las roms en zip ni nada similar, sólo los png/jpg.

-Se ejecuta el script. Es necesario instalar antes la librería Pillow mediante la orden
pip install pillow


-Este script creará todos los archivos .zfb.

-Se copian los archivos zfb a la carpeta ARCADE de la SD y las roms en zip a la carpeta /ARCADE/bin de la SD.

-Se pasa el frogtool sobre la carpeta ARCADE para generar el listado de roms.


No me deja subir archivos (no se porqué). Os subo el código:
from PIL import Image
import struct
import os
import re
import xml.etree.ElementTree as ET

#Generado por ChatGPT
def crop_and_resize_image(input_path, output_path, target_width, target_height):
    # Abrir la imagen
    image = Image.open(input_path)

    # Obtener las dimensiones de la imagen original
    original_width, original_height = image.size

    # Calcular el recorte en la anchura
    left = (original_width - target_width) // 2
    right = (original_width + target_width) // 2

    # Recortar la imagen manteniendo toda la altura
    cropped_image = image.crop((left, 0, right, original_height))

    # Redimensionar la imagen manteniendo la relación de aspecto
    resized_image = cropped_image.resize((target_width, target_height))

    # Guardar la imagen redimensionada
    resized_image.save(output_path)


#El código de rgb565_convert está sacado del script de Frogtool (https://github.com/tzlion/frogtool)
def rgb565_convert(src_filename, dest_filename, dest_size=None):

    try:
        srcimage = Image.open(src_filename)
    except (OSError, IOError):
        print(f"! Failed opening image file {src_filename} for conversion")
        return False
    try:
        dest_file = open(dest_filename, "wb")
    except (OSError, IOError):
        print(f"! Failed opening destination file {dest_filename} for conversion")
        return False

    # convert the image to RGB if it was not already
    image = Image.new('RGB', srcimage.size, (0, 0, 0))
    image.paste(srcimage, None)

    if dest_size and image.size != dest_size:
        image = image.resize(dest_size)

    image_height = image.size[1]
    image_width = image.size[0]
    pixels = image.load()

    if not pixels:
        print(f"! Failed to load image from {src_filename}")
        return False

    for h in range(image_height):
        for w in range(image_width):
            pixel = pixels[w, h]
            if not type(pixel) is tuple:
                print(f"! Unexpected pixel type at {w}x{h} from {src_filename}")
                return False
            r = pixel[0] >> 3
            g = pixel[1] >> 2
            b = pixel[2] >> 3
            rgb = (r << 11) | (g << 5) | b
            dest_file.write(struct.pack('H', rgb))

    dest_file.close()

    return True

def anade_final(src_filename, nombre_archivo):
    with open(src_filename, 'r+b') as file:
        content = file.read()
        nombre_archivo = nombre_archivo+'.zip'
        # Agrega los dos ceros al final del contenido
        content_with_zeros = content + b'\x00\x00\x00\x00' + nombre_archivo.encode() + b'\x00\x00'
        # Escribe el contenido actualizado en el archivo binario
        file.seek(0, os.SEEK_END)  # Posicionarse al final del archivo
        file.write(content_with_zeros)
        file.flush()  # Asegurarse de que los cambios se escriban sin cerrar el archivo

def obtener_descripcion_por_nombre_de_juego(nombre_juego, juegos_dict):
    return juegos_dict.get(nombre_juego)

def cargar_juegos_descripciones(file_path):
    juegos_dict = {}
    tree = ET.parse(file_path)
    root = tree.getroot()
    for juego in root.findall('game'):
        nombre_juego = juego.attrib['name']
        descripcion = juego.find('description').text
        caracteres_prohibidos = r'[<>:"/\\|?*]'
        nombre_limpio = re.sub(caracteres_prohibidos, '', descripcion)
        juegos_dict[nombre_juego] = nombre_limpio
    return juegos_dict

def procesa_archivos(carpeta):
    # Obtener el diccionario de juegos y descripciones
    juegos_dict = cargar_juegos_descripciones('DataFrog_SF2000_FBA_v0.2.97.42_playable_no_dups.dat')
   
    for archivo in os.scandir(carpeta):
        nombre, extension = os.path.splitext(os.path.basename(archivo.path))
        ruta = os.path.dirname(archivo.path)
        mini = os.path.join(ruta, nombre+'_mini'+extension)
        nombre_final = os.path.join(ruta, juegos_dict.get(nombre, 'Unknown') + '.zfb')
        temporal = os.path.join(ruta, 'temp.raw')

        print('Procesando '+nombre+' con extensión '+extension+' en la ruta '+ruta+' como '+nombre_final)
        crop_and_resize_image(archivo.path, mini, target_width, target_height)
        rgb565_convert(mini, temporal)
        anade_final(temporal, nombre)
        os.rename(temporal, nombre_final)
        os.remove(mini)

# Ejemplo de uso
target_width = 144
target_height = 208
procesa_archivos('roms')


Pero con esto se puede añadir una rom nueva? lo digo porque si usas ese dat , no te puedes salir de los que alli salen?

Un saludo
Exacto. Ese dat tiene todos los juegos que funcionan decentemente en la consola. Son más de los que lleva originalmente pero hay bajas muy llamativas (el Tetris, por ejemplo). Pero hasta que salga con CFW es lo que hay :)
1043 respuestas
14, 5, 6, 7, 821