Registrarse

[3DS] Pokémon Esmeralda 3Ds Dual Screen

Zallax

Usuario mítico
​

Buenas a todos.
Para los que no me conozcáis, soy Zallax. Algunos quizá me recordéis de hace ya bastante tiempo, porque hará unos 20 años estuve metido en el mundillo del ROM Hacking.

Desde entonces mi vida profesional ha ido por otros caminos. Actualmente soy Desarrollador Web y trabajo principalmente en proyectos relacionados con la integración de inteligencia artificial en universidades europeas.
Pero Pokémon siempre ha seguido por ahí. Y con el auge en los últimos años de los proyectos decompilados de los juegos clásicos, me empezó a picar otra vez la curiosidad.

¿Cómo empezó todo esto?
Durante los últimos años he estado probando los distintos modelos de lenguaje que han ido apareciendo y viendo hasta qué punto podían trabajar sobre proyectos de software reales.

Una de las pruebas que acabó creciendo bastante más de lo esperado fue utilizar el código decompilado de Pokémon Esmeralda.

Lo primero que hice fue experimentar con llevar Pokémon Esmeralda a ejecutarse de forma nativa en Nintendo DS, añadiendo además algunas funciones adicionales para aprovechar la segunda pantalla de la consola.
A partir de ahí fueron apareciendo diferentes proyectos que llevaban las primeras generaciones de Pokémon hacia una estética Voxel / 2.5D, y me pareció interesante intentar trasladar esa misma idea a la tercera generación.

Hice algunas pruebas iniciales en PC, pero terminé abandonándolas porque, en aquel momento, la capacidad de los LLM para trabajar con este tipo de código todavía era bastante limitada.

Hay algo importante que aclarar aquí: yo no soy desarrollador de C ni de los lenguajes utilizados habitualmente en este tipo de proyectos. Mi experiencia profesional está principalmente en desarrollo web.

Sin embargo, con la mejora bastante considerable que han tenido estos modelos recientemente, decidí volver a intentarlo.

Primero comencé portando Pokémon Esmeralda a Nintendo 3DS y, una vez que la base empezó a funcionar correctamente, comencé también a experimentar con una representación del mundo en Voxel 2.5D.
Viendo que los modelos actuales ya eran capaces de trabajar de forma razonablemente consistente con el proyecto, y comprobando además que era viable hacerlo funcionar con un rendimiento decente en el hardware de Nintendo 3DS, fui avanzando poco a poco con la idea.

Lo que comenzó como un experimento ha terminado convirtiéndose en una versión relativamente estable sobre la que sigo trabajando.

Actualmente estoy modelando progresivamente los mapas del juego en estilo Voxel 2.5D, adaptando elementos del escenario a esta nueva representación, aprovechando las dos pantallas de Nintendo 3DS y corrigiendo errores y problemas de rendimiento conforme van apareciendo.

Además, hay determinadas zonas del juego, como la introducción o las batallas, donde ya se puede activar el efecto 3D estereoscópico de la consola. Según vaya viendo qué posibilidades ofrece el hardware y dónde tiene sentido utilizarlo, iré probando a activarlo también en más partes del juego.

Mi intención es seguir avanzando hasta completar el proyecto.

Rendimiento
Todo el desarrollo y las pruebas principales las estoy realizando personalmente sobre una Nintendo 3DS clásica.

Aunque todavía hay algunos tirones y zonas que requieren optimización, el juego se mueve generalmente a 60 FPS.
Precisamente una de las cosas que quiero mantener como prioridad es que el proyecto siga siendo perfectamente utilizable en el modelo original de Nintendo 3DS, sin depender de una New Nintendo 3DS para funcionar correctamente.

Sobre el uso de Inteligencia Artificial
Quiero dejar esto completamente claro desde el principio: este proyecto está creado utilizando Inteligencia Artificial.
Los modelos de lenguaje han sido la herramienta que me ha permitido experimentar con una base de código y unos lenguajes que están fuera de mi ámbito profesional habitual.

No pretendo ocultarlo ni vender el proyecto como otra cosa.

Tampoco quiero que el hilo se convierta en otro debate sobre inteligencia artificial, programación o sobre si un proyecto desarrollado de esta forma tiene más o menos mérito.

Si no estás de acuerdo con este tipo de desarrollo, simplemente ignora el proyecto y sigue con tu vida.

Prefiero que aquí hablemos del juego, de la parte técnica, de bugs, de posibles mejoras y de Pokémon.

Estado actual
El proyecto se encuentra todavía en una etapa bastante inicial.
Hay errores evidentes, elementos sin terminar, mapas pendientes de adaptar y muchas cosas que todavía quiero mejorar.

Aun así, técnicamente el juego debería ser jugable de principio a fin.

Teniendo en cuenta el estado actual del proyecto, existen bugs o situaciones que todavía he encontrado.

En cuanto al modo Voxel 2.5D, todavía queda bastante trabajo por delante. Actualmente solo una parte de los edificios, árboles, carteles y relieves del terreno están modelados, por lo que muchas zonas del mapa y prácticamente todos los interiores todavía se muestran planos. La idea es ir ampliando progresivamente las zonas modeladas conforme avance el desarrollo.

Capturas de pantalla


​

Repositorio
El código del proyecto está disponible aquí:
GitHub - Pokémon Esmeralda 3Ds Dual Screen

El repositorio no distribuye contenido del juego ni archivos extraídos de la ROM. Contiene el código propio del port, las herramientas necesarias y un builder que genera los datos necesarios a partir de tu propia copia de Pokémon Esmeralda.

Cómo jugar
Para jugar necesitas:
  • Una consola de la familia Nintendo 3DS/2DS con Custom Firmware (Luma3DS).
  • Acceso al Homebrew Launcher.
  • Una copia limpia de Pokémon Esmeralda USA/Europa obtenida de tu propio cartucho.

En Windows el proceso es bastante sencillo:
  1. Descarga la última versión de Emerald3DS-vX.Y.Z-Windows.zip desde la sección de Releases:
    GitHub Releases
  2. Extrae el contenido del archivo ZIP.
  3. Ejecuta Emerald3DS-Builder.exe.
  4. Selecciona tu ROM de Pokémon Esmeralda y la tarjeta SD de tu Nintendo 3DS.
  5. Pulsa Install.
  6. Introduce la tarjeta SD en la consola e inicia Pokémon Emerald 3Ds Dual Screen desde el Homebrew Launcher.

El builder instalará automáticamente los archivos necesarios en:
Código:
/3ds/emerald3ds/
La ROM únicamente se utiliza como fuente para generar los datos necesarios. No se copia a la tarjeta SD, no se modifica, no se sube a ningún sitio y el proceso no necesita conexión a Internet.

Cada versión del proyecto incluye su propio builder. Si actualizas a una versión nueva, simplemente tendrás que ejecutar de nuevo el builder para regenerar el paquete de datos correspondiente.

La ROM compatible actualmente es Pokémon Emerald USA/Europa con el siguiente SHA-1:
Código:
f3ae088181bf583e55daf962a92bb46f4f1d07b7
En Linux y macOS también es posible ejecutar el builder directamente desde el código fuente:
Código:
python -m emerald3ds_builder install --rom <ROM> --sd <card>
En el repositorio podéis encontrar también instrucciones más detalladas, información sobre compilación desde código fuente y documentación técnica del proyecto.

Iré actualizando tanto el repositorio como este post conforme vaya avanzando el proyecto.

Feedback
Si alguien se anima a probarlo, cualquier feedback es bienvenido.
Especialmente si encontráis bugs, problemas de rendimiento, errores visuales, comportamientos extraños o zonas del mapa que den problemas.
También me interesa saber qué os parece la adaptación del estilo Voxel a Hoenn, el uso de la segunda pantalla y el efecto 3D en las zonas donde ya está disponible.

Gracias a todos los que os animéis a probarlo, reportar errores o simplemente seguir el desarrollo.
 

M_Alighieri

Dirigente Total del Imperio Kaktiácero
Miembro del equipo
Redactor/a
Miembro de honor
Debo decir que me has impresionado mucho, no esperaba que siguieras en activo con algún proyecto relacionado con Pokémon.

También opino que no estamos en posición de juzgar a una persona por utilizar una IA generativa cuando la mayoría de ROM hackers, tradicionalmente, hemos empezado utilizando herramientas sin siquiera entender qué parte del código máquina de los juegos estábamos tocando, así que te animo a que lo hagas de la forma que más prefieras.

Eso sí, el único detalle en este punto es que entender estos temas técnicos puede ayudarte a optimizar mucho más el código y resolver problemas que tal vez los modelos de IA no sean capaces de gestionar, pero al final, cuando te metes a fondo, terminas aprendiendo y asimilando conocimiento, así que la transferencia llegará tarde o temprano.

Dicho esto, el proyecto sigue una tendencia que se está poniendo muy de moda, me gusta mucho que hayas elegido la Nintendo 3DS original, ya que yo dispongo sólo de ese modelo y habrá muchas otras personas que podrán acceder al juego, así que igual me tendrá que perdonar @Manurocker95, ya que su maná intelectual me hizo ver que es un peñazo tratar con ella, pero lo veo como un punto a favor.

Eso sí, como todavía te queda mucho trasteo con el proyecto, te diría que no termino de ver que los minisprites se vean planos, a menos que se les dé un acabado especial y se tenga mucho cuidado con la cámara, tipo Paper Mario, Another Code u Hotel Dusk, nunca me gustó la mezcla del 3D con el 2D en los juegos, porque las perspectivas se mezclan de forma caótica, a menudo se corre el riesgo de distorsionar los sprites y resulta muy fácil perder la coherencia de los elementos (de hecho, las sombras en tu caso no salen directamente de los pies de los NPC, sino que se despegan).

Te animo a continuar con el proyecto, eso sí, me parece una idea fantástica y es bastante probable que termine probándolo, ¡gracias por traerlo!
 

Zallax

Usuario mítico
Debo decir que me has impresionado mucho, no esperaba que siguieras en activo con algún proyecto relacionado con Pokémon.

También opino que no estamos en posición de juzgar a una persona por utilizar una IA generativa cuando la mayoría de ROM hackers, tradicionalmente, hemos empezado utilizando herramientas sin siquiera entender qué parte del código máquina de los juegos estábamos tocando, así que te animo a que lo hagas de la forma que más prefieras.

Eso sí, el único detalle en este punto es que entender estos temas técnicos puede ayudarte a optimizar mucho más el código y resolver problemas que tal vez los modelos de IA no sean capaces de gestionar, pero al final, cuando te metes a fondo, terminas aprendiendo y asimilando conocimiento, así que la transferencia llegará tarde o temprano.

Dicho esto, el proyecto sigue una tendencia que se está poniendo muy de moda, me gusta mucho que hayas elegido la Nintendo 3DS original, ya que yo dispongo sólo de ese modelo y habrá muchas otras personas que podrán acceder al juego, así que igual me tendrá que perdonar @Manurocker95, ya que su maná intelectual me hizo ver que es un peñazo tratar con ella, pero lo veo como un punto a favor.

Eso sí, como todavía te queda mucho trasteo con el proyecto, te diría que no termino de ver que los minisprites se vean planos, a menos que se les dé un acabado especial y se tenga mucho cuidado con la cámara, tipo Paper Mario, Another Code u Hotel Dusk, nunca me gustó la mezcla del 3D con el 2D en los juegos, porque las perspectivas se mezclan de forma caótica, a menudo se corre el riesgo de distorsionar los sprites y resulta muy fácil perder la coherencia de los elementos (de hecho, las sombras en tu caso no salen directamente de los pies de los NPC, sino que se despegan).

Te animo a continuar con el proyecto, eso sí, me parece una idea fantástica y es bastante probable que termine probándolo, ¡gracias por traerlo!
¡Muchas gracias por el comentario!

Estoy bastante de acuerdo con lo que comentas sobre la parte técnica. Aunque la IA me está permitiendo meterme en terrenos que no son mi especialidad, al final conforme vas trasteando con el código terminas entendiendo cada vez más cosas, y seguramente esa parte de aprendizaje sea también importante para poder ir afinando problemas de rendimiento o comportamientos más específicos que los modelos no resuelvan bien por sí solos.

Y sobre lo de los minisprites, sí, coincido contigo. Es uno de los puntos que tengo todavía pendientes de revisar. Ahora mismo el proyecto está en una fase muy temprana y hay bastantes elementos visuales que todavía están ahí de forma provisional o que necesitan bastante ajuste.

La integración de sprites 2D dentro de un entorno con más volumen puede quedar rara muy fácilmente si no se cuidan bien la perspectiva, la cámara, las sombras y la posición de los elementos, y el ejemplo que comentas de las sombras separadas de los pies es precisamente una de esas cosas que tengo que corregir.

Además, uno de mis objetivos con el proyecto es intentar respetar lo máximo posible el arte original de Pokémon Esmeralda. Es una de las cosas que más me preocupan, porque en otros proyectos de este estilo he visto algunas soluciones que, personalmente, me parecen bastante aberrantes y que rompen por completo con la estética original del juego. Mi intención es que el paso al 2.5D aporte profundidad sin convertir Hoenn en algo que deje de parecer Hoenn.

Así que tendré muy en cuenta todo lo que has comentado cuando vaya entrando más a fondo en esa parte.

Gracias también por el apoyo con el enfoque del proyecto y con lo de mantener compatibilidad con la 3DS original. Precisamente una de mis prioridades es no dejar atrás ese modelo si consigo evitarlo.

Abrazo!
 
Arriba