DESARROLLO SOFTWARE - Proyectos de DarkRyoga

1, 2, 3, 4, 5
Buen dia a todos, soy nuevo en el foro y el primer tema que miro es este que me llamo la atención porque no pensé que todavia exista gente con buena predisposición para hacer algo para estas consolas retro que ya muchos olvidaron, muchas gracias por dedicar tiempo a este desarrollo!

Yo actualmente soy aficionado a las los emuladores y al lenguaje de c# y por eso es que valoro este tipo de post!

Saludos!!
Gracias a los moderadores por mover el hilo. De todas formas hay algo que no me queda claro. El hilo aún se puede consultar en el antiguo sub-foro donde estaba ubicado y las actualizaciones del primer post se ven reflejados en ambos hilos (el original y el que ha sido movido) ¿este funcionamiento del foro es correcto?

Saludos.

PD: He actualizado el post principal con los títulos de lo que se viene encima y alguna cosa más que aún no está puesta.
Remy_LeBeau escribió:Buen dia a todos, soy nuevo en el foro y el primer tema que miro es este que me llamo la atención porque no pensé que todavia exista gente con buena predisposición para hacer algo para estas consolas retro que ya muchos olvidaron, muchas gracias por dedicar tiempo a este desarrollo!

Yo actualmente soy aficionado a las los emuladores y al lenguaje de c# y por eso es que valoro este tipo de post!

Saludos!!


Pues aquí hay mucha gente (en este foro y en otros) programando cosas para nuestras retromaquinas! :-D

Puedes repasarte incluso el articulo que han hecho en Xataka estos días.

Articulo Xataka
Ya veo, muy interesante.. no sabía de este mundo secreto, sabes si ahí algo de c# o visual.net en este foro? no he visto ningún hilo oficial todavía, pero he notado que el foro es grandisimo.

Saludos!
Para cosas retro no, claro.... no se si en la sección de tecnología quizá hay algo...
vaya vi el tutorial tuyo de raycaster en gba hace tiempo, intente trasladarlo a c# sharp en vano xD
Hace poco me preguntaron por twitter acerca de las mierdas que estaba haciendo para consolas modernas y retro (GBA/GBC/NES/NDS) así que pongo algo de eso por aquí. Falta el proyecto "gordo" para NDS/3DS pero ya se andará. Todo irá saliendo poco a poco este año y a comienzos del que viene.

Imagen
Bueno después de una temporada sin postear nada nada, os dejo un video nuevo ene l que muestro como crear un engine de raycasting bastante básico para GBA en el que meto algunos personajes de DooM. Seguí un tutorial bastante bueno de esta web ( Ray-Casting Tutorial ) y el rendimiento mejora bastante con respecto a otro motor de raycasting para GBA que desarrollé hace cosa de año y medio.



Para las texturas de las paredes he usado algunas de las texturas originales de DooM 2 reconvertidas a la resolución de GBA y aplicando otra paleta de colores diferente así como algunas texturas "custom" para dicho juego realizadas por algunos "modders". Los sprites (sin animación de los personajes) están sacados de un juego 2D tipo plataformas que tiene temática DooM (no recuerdo el nombre del juego). La velocidad de movimiento del juego una vez que se ha cargado la ROM es tal cual se ve en el video.

Imagen


Estoy investigando cómo hacer un shooter para GBA/NDS y este es un buen comienzo para construir algo desde cero. El siguiente paso sería tener enemigos con sprites animados y con algo de IA que se mueva por el escenario, algo similar a DooM. También estoy probando cosas usando el motor Yeti3D que tiene compatibilidad con los modelos MD2 de Quake 2 y funciona muy bien en las pruebas que he hecho usando los emuladores VBA/DeSmuME así como en el hardware real.
Que gusto verte de nuevo activo por estos lares. Genial.
Skullomartin escribió:Desarchivado


Gracias. Próximamente actualizaré el contenido del hlo.
@DarkRyoga

Esperando esas novedades maestro.
Hacía un par de meses que no posteaba nada por aquí y ya iba siendo hora. En los últimos post había comentado que me había metido con el desarrollo de algún juego 3D para consolas y después de algún tiempo ya tengo algo que enseñár aunque se encuentra en estado muy inicial.

Imagen

El caso es que estoy avanzando bastante con el tema de desarrollar juegos 3D basado en Yeti3D-Pro para las portátiles de Nintendo e incluso para plataformas como Android. Ya tengo montado el proyecto para devkitPRO que me permite compilar todo y generar la ROM para 3 targets diferentes GBA, NDS y 3DS (además de generar el binario para la plataforma de origen, el PC de desarrollo) aunque en principio se podría portar a más sistemas (cómo se hizo en su día por ejemplo GP2X Wiz / Caanoo) e incluso se puede utilizar para desarrollar juegos 3D para Android. Lo que me está gustando de Yeti3D-Pro es lo versátil que es para hacer juegos 3D de diferente temática. Supongo que al principio de los tiempos estaba pensado para desarrollar "shooters en primera persona" (FPS) pero se puede perfectamente utilizar para realizar juegos tipo "survival horror", juegos de lucha, plataformas 3D o incluso juegos de carreras.

Imagen

Además el editor de niveles del Yeti3D-Pro es mucho más completo que el de la versión anterior que era más "tosco". El editor nuevo admite comandos a través de la consola lo que hace que sea también más fácil de añadir los elementos al "mapeado" y diseñar el entorno, además de permitir probar los cambios que se programan en el entorno / nivel directamente sobre el editor sin tener que recompilar la ROM ya que el editor incorpora una función que carga el mapa "in-situ".

Imagen

Y luego las herramientas de modelado para generar los "objetos" (enemigos, items, etc...) que se pueden utilizar son muy variadas, la única pega es que hasta la fecha sólo se admiten modelos en formato MD2 (el formato que usaba Quake 2) pero aún así hay muchas herramientas que permiten modelar y hay bastantes repositorios con modelos ya construidos incluyendo personajes clásicos como Mario o Sonic, pero los hay de muchas y variadas temáticas (no se ciñen sólo a desarrollar modelos y "Skins" para juegos tipo FPS).

Por otro lado el motor sólo admite modelos MD2 de Quake 2. De hecho en el código fuente del motor se puede ver lo siguiente:

void animation_mode(animation_t* a, int mode, int speed, int loops)
{
  const u8 frames[][2] =
  {
    {  0, 40},    //MD2_ANIM_STAND
    { 40,  6},    //MD2_ANIM_RUN
    { 46,  8},    //MD2_ANIM_ATTACK
    { 54,  4},    //MD2_ANIM_PAIN1
    { 58,  4},    //MD2_ANIM_PAIN2
    { 62,  4},    //MD2_ANIM_PAIN3
    { 66,  6},    //MD2_ANIM_JUMP
    { 72, 12},    //MD2_ANIM_FLIPOFF
    { 84, 11},    //MD2_ANIM_SALUTE
    { 95, 17},    //MD2_ANIM_TAUNT
    {112, 11},    //MD2_ANIM_WAVE
    {123, 12},    //MD2_ANIM_POINT
    {135, 19},    //MD2_ANIM_CROUCH_STAND
    {154,  6},    //MD2_ANIM_CROUCH_WALK
    {160,  9},    //MD2_ANIM_CROUCH_ATTACK
    {169,  4},    //MD2_ANIM_CROUCH_PAIN
    {173,  5},    //MD2_ANIM_CROUCH_DEATH
    {178,  6},    //MD2_ANIM_DEATH1
    {184,  6},    //MD2_ANIM_DEATH2
    {190,  8}     //MD2_ANIM_DEATH3
  };
  animation_init(a, mode, frames[mode][0], frames[mode][1], speed, loops);
}


La definición de los modelos se hace asumiendo la estructura del MD2 por eso en el método anterior que se usa para animar los modelos 3D que suelen tiener 199 frames de animación distribuidos en 21 animaciones completas. Si se quisiera tener "soporte nativo" para modelos MDL de Quake o MD3 de Quake 3 se podría picar el código correspondiente para cargar y manejar dichos modelos sin tener que usar herramientas de conversión de modelos que permitan pasar de MDL a MD2, de MD3 a MD2 o de OBJ a MD2. Estás herramientas existen y funcionan. Sin embargo esas herramientas convierten tal cual el modelo original a MD2 manteniendo los frames de animación del modelo original. En los modelos MD2 el límite máximo de frames está en 512 frames de animación y en MD3 está en 1024, mientras que en MDL este límite superior está en 256. Si todos los modelos MD3 y MDL que conviertas siguen en el esquema del segmento de código anterior y tienen definidos 199 frames no hay problema a la hora de realizar la conversión. Sin embargo hay varios problemas cuando el modelo tiene menos frames de los soportados por el límite máximo de MD2 (cuando se supera el límite también y supongo que la herramienta no dejará realizar la conversión aunque nunca me he topado con un modelo MD3 de más de 512 frames pero seguro que los hay) porque la estructura anterior te queda descabalada a la hora de leer los "frames" de animación y ya no se puede leer la animación según el esquema anterior. He probado a convertir rápidamente el modelo MDL "KNIGHT" de Quake a MD2.

Imagen

La herramienta que he usado me saca por pantalla que el número de frames de animación de este modelo es de 160 por tanto hasta 199 tengo 39 frames que pierdo o no tengo en el nuevo modelo MD2. Así con el modelo del ejemplo al cargar al "KNIGHT" en el editor el modelo aparece siempre repitiendo en LOOP la mitad de su animación de ataque (es decir levantando la espada y bajándola a media altura). ¿Eso significa que no puedo usarlo? No, simplemente que tengo que usar otro tipo de distribución para por ejemplo meter dicho modelo con la animación "MD2_ANIM_RUN" en el editor (que es la animación por defecto que se usa al cargar un modelo en el editor, es decir, en modo edición todos los modelos salen corriendo en el sitio cuando se cargan). Esto último se puede hacer por código para cada modelo en concreto y sacando con una herramienta de visionado de modelos cuantos frames pertencen a cada animación una vez convertido a MD2 y picando un handler para cada modelo MDL covertido a MD2 que tenga menos de 199 frames. Esto se me ocurre así a vote pronto, pero no es lo más óptimo. Lo mejor sería coger la "MDL Specification" y picar en el código del engine la definición nativa de los modelos MDL para que el engine sea capaz de tratarlos directamente al leer el fichero MDL con el objeto3D y tenga funciones propias para tratar dichos modelos y animarlos ("¡Que es lo que he terminado haciendo!").

Finalmente dejo por aquí un nuevo video sobre el proyecto del FPS en el que llevo trabajando desde hace algunos meses. Como ya he comentado con anterioriradad el juego está basado en una modificación (profunda) y propia del Yeti3D Pro Engine desarrollado inicialmente por Derek J. Evans y posteriormente modificado por el usuario "NiXot". Actualmente la versión que he modificado permite añadir en el modo "editor" puertas y elevadores que no estaban soportados en las versiones previas así como la carga de modelos 3D en formato MDL y OBJ/MTL ya que hasta la fecha sólo soportaba modelos MD2 (es decir el formato usado en juegos como Quake 2). El video está dividido en dos partes: en la primera se puede apreciar un gameplay corto en el que controlamos al personaje usando diversas armas (modelos Md2 sacados de Quake 2) contra enemigos sacados de diversos repositorios de modelos 3d en Internet, se trata pues de una prueba de carga básica ya que el nivel donde se desarrolla todo es una modificación de un nivel antiguo que tenía pleneado para la realease de GBA. En la segunda parte del video se puede apreciar como es parte del proceso de testeo de modelos MD2 y como estos son cargados en el mapa usando el editor de niveles de Yeti3D Pro.

Imagen

3D FIRST PERSON SHOOTER (GBA / 3DS / ANDROID) (HOMEBREW) Yeti3D Pro Engine BASIC GAMEPLAY (WIP)

Uno de los aspectos que estoy investigando es como asociar a cada modelo MD2 de enemigo otro modelo MD2 de un arma ya que en el estado actual de desarrollo cuando los enemigos disparan se activa su animación correspondiente "MD2_ANIM_ATTACK" y se ponen en postura de ataque pero sólo se ve como "el rayo" del disparo sale objeto MD2 del personaje ya que este no tiene arma asociada, es un poco gracioso la verdad. Creo que esto no estaba contemplado el motor Yeti3D original y tampoco ha sido añadido al Yeti3D-Pro. En todo caso se me ocurren dos formas de solventarlo: la primera es por código y la segunda es hacer un "MERGE" entre el modelo MD2 del enemigo en cuestión y el modelo MD2 del arma. Esto último es posible ya que muchas de las herramientas de modelado ya contemplan este tipo de solución para fusionar modelos.

Las imágenes del video se corresponden con las versiones de PC/Android, cuando haya material de las versiones para GBA y 3DS lo iré subiendo al canal principal de YT así que si estáis interesados en seguir el proceso de creación del juego (con nuevos enemigos y niveles modelados desde cero) como se suele decir... STAY TUNNED.

PD: respecto al resto de proyectos que tengo abiertos para GameBoy y "otros" todo sigue adelante, el tema es que hasta el mes de Julio (más o menos) voy a estar bastante liado con otros temas y es entonces cuando me quedaré libre del todo para ir sacando estas cosillas adelante.

Saludos.
Joder, brutal el curro Ryoga.

A ver si en verano el curro me deja alguna hora libre al día y retomo todo este tema. De todas maneras lo seguiré de cerca.
¡¡¡Grande Ryoga!!! ¿Tienes cuenta en GitHub o algún sucedaneo para seguir tu código?

Un saludo y a por ello [beer]
Bueno señores, tras el verano y unos meses ajetreados traigo alguna que otra novedad. Para empezar he conseguido terminar mi primera ROM para Game Boy Color. Se trata de un clón del Tetris para esta consola en parte inspirado en el juego Tetris: The Soviet Mind Game desarrollado por TENGEN para NES.

Imagen



El juego en principio iba a tener varios modos de juego e iba a incluir piezas "raras" de estás que aparecían en las máquinas de Tetris de "los chinos" pero al final por falta de tiempo no creo que lo añada y el juego se quede en el estado actual.

Por otro lado, sigo con el desarrollo del juego 3D multiplataforma (GBA / 3DS / SWITCH / PC / Android) así que en los próximos meses tendréis noticias de ello por este hilo. Además de eso tengo nuevos proyectos para GBA y NDS que creo que pueden interesar a más a de uno.

Estos proyectos (así como otros) van a tener también continuidad y entradas explicativas en el siguiente blog: THE RYOGA´S GYROSCOPE

Saludos.
wow, qué currado todo! felicidades!!!
@Troopa Jr gracias. Espero poder ir actualizando el hilo más a menudo ahora que tengo algo más de tiempo.
Da mucha alegria saber de la existencia de los proyectos de alguien que conoce tan bien estas consolas, y tiene un acerbo tal de conocimiento y programación de los juegos del sistema, asi que te animo a que sigas con estos proyectos.
Hola amigos. Hacía algunos meses que no posteaba nada por aquí y en esta ocasión lo hago simplemente para indicaros que hace poco he empezado un pequeño proyecto de BLOG THE RYOGA´S GYROSCOPE. De momento en el BLOG estoy incluyendo análisis de juegos 8 bits y de algunos animes, pero la idea es que vaya creciendo haciendo entradas más técnicas sobre programación tanto en consolas como en otras plataformas. Las entradas técnicas en principio podrán ser en inglés o en castellano mientras que las entradas de análisis sólo las estoy desarrollando en castellano.

Sea como fuere no os preocupéis porque seguiré actualizando mis proyectos por aquí, sólo pongo lo del blog por si alguno está interesado en seguirlo más de cerca porque las entradas técnicas se publicarán antes allí y después se trasladarán al foro.

@Ilichsoviet gracias. He empezado el año con bastantes novedades en el plano del homebrew y la programación para consolas y poco a poco las voy a ir posteando por aquí.
Hace poco estuve probando a realizar un pequeño engine-2D en GBA para realizar animaciones sobre sprite-sheets. Ahora esto lo tengo un poco más dominado y he estado probando varios tipos de sprite-sheets con personajes de juegos de 8 y 16 bits a ver que tal quedaba el resultado.



Para la animación de los sprites me he creado una pequeña librería que tiene las funciones que permiten dado un sprite-sheet de entrada poder mover el "objeto" a la vez que se anima a lo largo de la dirección X o Y de la pantalla:

Imagen

[b]void DrawBitmapWithTransparency( u16 x, u16 y, u16 height, u16 width, u16* data );[/b]


Como sprite-sheets he utilizado algunas procedentes de juegos bastante conocidos en general:
Imagen

A partir de aquí la idea sería intentar tener las animaciones completas de un personaje para a partir de la librería que he generado crear una máquina de estados controlada por las pulsaciones de los botones de la GBA para así mover al personaje por la pantalla con sus diferentes animaciones en función de si está caminando, saltando, disparando, caminando+disparando, etc.

PD: he seguido trabajando en el engine-3D para GBA / 3DS / Android basado en Yeti3D-Pro y tengo algunas cosas nuevas, así que espero poder enseñar nuevos avances pronto.
Imagen

animo con todos tus proyectos, me das envidia sana
Después de unos meses de pausa he vuelto a la carga con la creación del juego 3D para GBA basado en el Yeti3D-Pro-enhanced engine. Ya conseguí tener unas releases estables del engine para Pc / Android y 3DS y me quedaba hacer lo propio con GBA.



Este video es sólo de demostración de uno de los mapas nuevos generados con el editor de niveles y ejecutado desde el emulador Visual Boy Advance. En realidad lo único que falta para que la versión del engine en GBA sea potable es la inclusión de modelos MD2 en el mismo y es algo en lo que estoy trabajando, por lo que espero (con el tiempo libre que tengo ahora, que no es demasiado) poder avanzar y mostrar algo de "acción" en un par de meses.

Stay tunned!
Joe... si no fuera por la resolución, casi casi que como una PSX; e incluso parece que con mayor solidez en las texturas. Gran curro. [oki]
Dejo esto por aquí, para ir haciendo la boca agua. Se trata de una versión casí final de una DEMO programada usando el Yeti3d-Pro-EnHaNcEd-Engine para NDS y 3DS.

Imagen

Espero tener dentro de poco algo más potable para GBA. Stay Tunned!!!
Hace bastante que no entraba al hilo. Gran curro que te has pegado. Espero que sigas con tus proyectos. [beer]
Aprovechando que ahora tengo más tiempo libre después del trabajo he continuado el desarrollo de este emulador de Master System que dejé en el tintero hace unos años. No es nada pretencioso, simplemente una prueba de concepto, pero no va nada mal. El emulador en cuestión está desarrollado en lenguaje de programación JAVA (ahora que tengo tiempo libre, he actualizado el código fuente a la versión JAVA8) y permite emular los juegos de las siguientes plataformas:

Sega Master System / Game Gear
Sega SG-1000


Para hacer del emulador algo más completo le he incluido algunas herramientas que pueden ser de interés. La herramienta más interesante (desde mi punto de vista) es un debbuger (o depurador). El depurador proporciona muchas características que pueden ser útiles para descubrir trucos en ROMs de juegos licenciados y no licenciados así como en el desarrollo de juegos Homebrew. Proporciona resaltado de sintaxis personalizable, registro de seguimiento, puntos de interrupción y puntos de observación. Dejo a continuación un pequeño vídeo del emulador corriendo varios juegos de Master System. El trabajo está en su mayor parte completado pero aún quedan algunos pequeños flecos, así que espero poder actualizar mi repositorio local en breve con los últimos cambios para que el código fuente sea distribuido a un repositorio de GitHub público.



Por otro lado, estos meses he seguido (y sigo) trabajando en mi versión "EnHanCeD" del Yeti3D-Pro-Engine a la que le he añadido nuevos elementos interesantes a nivel de mapeados y texturas de cara a la versión multi-plataforma para GBA / 3DS / Switch / Android / PC. Ahora mismo estoy trabajando con algunos modelos de pruebas para testear en las plataformas menos potentes (especificamente GBA y NDS) como el rendimiento global cuando se cargan varios modelos MD2 en el entorno, mientras que ya he empezado a probar algunos conceptos para desarrollar juegos "más grandes" en plataformas como Android o PC. El ENGINE puede leer modelos MDL, MD2 y MD3. De esta forma el usuario se ahorra tener que hacer conversiones de MDL a MD2 o de MD3 a MD2, ya que MD2 era el tipo nativo que leía el Yeti3D original de forma nativa.

Yeti3D-PRO-Engine-EnHanCeD (GBA/3DS CAPTURE-1)
Imagen


Yeti3D-PRO-Engine-EnHanCeD (GBA/3DS CAPTURE-2)
Imagen


Yeti3D-PRO-Engine-EnHanCeD (GBA/3DS CAPTURE-3)
Imagen


Yeti3D-PRO-Engine-EnHanCeD (GBA/3DS CAPTURE-4)
Imagen


Yeti3D-PRO-Engine-EnHanCeD (GBA/3DS CAPTURE-5)
Imagen


Yeti3D-PRO-Engine-EnHanCeD (GBA/3DS CAPTURE-6)
Imagen


Alguna DEMO sacaré en el caso de GBA/3DS para que se pueda probar cuando acabe con las pruebas. Después de eso me gustaría realizar algunos juegos 3D usando mi versión mejorada del engine para las diferentes plataformas y alguna idea tengo ya en el tintero.

Saludos.
Vaya pintaza que tiene el emulador de master system.
En estos meses he seguido trabajando en mi versión "EnHanCeD" del Yeti3D-Pro-Engine. Ya tengo una versión estable para Nintendo Switch y he estado probando a realizar varios tipos de pruebas para intentar desarrollar diferentes tipos de juegos pertenecientes a géneros que no sean First Person Shooter. En este caso he realizado una pequeña prueba de concepto para intentar desarrollar un pequeño juego de plataformas 3D estilo Mario64.



Ahora mismo estoy trabajando con algunos modelos de pruebas para testear en las plataformas menos potentes (especificamente GBA y NDS) como el rendimiento global cuando se cargan varios modelos MD2 en el entorno.
El Yeti3D en la Switch va quedando muy bien y éso que comentas que es una prueba de concepto.
Estoy interesado en hacer algo 2D para la Switch podrías darme unos pasos inciales de por dónde tirar para empezar a programar para ella (me valen enlaces o lo que sea). He buscado, pero todo remitía a https://developer.nintendo.com/

Gracias!
232 respuestas
1, 2, 3, 4, 5