[Devlog] Vircon32: Creando mi propia consola

carra

#689 Gracias!! Pues aparte de la jam hubo alguno que se animó a hacer algún otro juego, hicieron el JellyFish, el SimpleTennis (un pong) y el TicTacToe (3 en raya). Pero no mucho más. A ver si cuando lo termine de integrar en retroarch va habiendo más gente que conozca la consola. También cuando acabe esa parte me quiero poner de vuelta a hacer juegos, de entrada debería terminar alguno de los que empecé como el Triple Bubble. Quizá por ese momento convoque una segunda jam? :smiley:

Y como dice @r2d2rigo, algo tipo Doom no se podría hacer. Más que nada porque la consola no está pensada para el dibujado pixel a pixel, y encima la resolución es relativamente alta. Así que o bien podrías llegar a hacer un Doom pero limitado a una parte pequeña de la pantalla (con unos marcos muy gordos), o bien te tendrías que limitar a algo tipo Wolfenstein. Ya lo que se curró r2d2rigo da una idea de lo que se podría hacer, y además él lo hizo con una velocidad de CPU más bajita (aún no era la definitiva). También me gustaría hacer algo de ese estilo algún día, el problema es que tengo tantas ideas para juegos que no me da para hacer todas jeje

3
carra

He pasado varios días arreglando un par de errores bastante difíciles de encontrar. Pero el núcleo libretro de Vircon32 ya funciona bien con OpenGL ES 3. Lo he probado en la Pi 4 como veis:

Ahora puedo empezar a intentar integrarlo en el sistema de build de libretro (libretro-buildbot). Supongo que me llevará varios intentos hacerlo bien. Quizás debería empezar soportando sólo unos pocos sistemas, aunque no sé si se espera que los núcleos siempre soporten todos los sistemas en los que puede correr libretro.

2
carra

Estoy moviendo las cosas por Discord junto con la gente de libretro y RetroArch. Lleva bastante curro pero la verdad es que han sido bastante majos y me han estado ayudando con varias cosas. Justo ahora se están empezando ya a subir cosas de Vircon32 a sus repos oficiales :grinning:

9
carra

Pues ha vuelto Chandler Kluser, que en su día ya se hizo el 3 en raya para la consola. Ahora me ha ayudado a hacer el core de Vircon32 compatible con sistemas EmuELEC. Y además también ha creado arte de Vircon32 para los temas de EmulationStation:

11
carra

Ya sabéis que Unity ha generado mucha alarma e incertidumbre a desarrolladores.
Frente a esto he pensado que estaría bien recordar las garantías que ofrece Vircon32:

12
carra

Ya he conseguido que me metan también en RetroArch las imágenes de Vircon32. Para cada juego hay 3: un screenshot de gameplay, la pantalla de título y la imagen de la caja o arte promocional del juego.

Para este último, aunque hay un par de juegos que tienen caja, he preferido poner arte del juego porque la mayoría no van a tener. Algunos tienen arte hecho, como 2048. Para los otros he tirado de Photoshop y me he creado un arte básico a partir del título o de elementos del propio juego. Esto es lo que ha quedado (la imagen se puede ampliar para verlo mejor)

10
9 días después
carra

En breve tengo las game jams (la mía y la de MV), así que quiero estar lo más preparado posible para poder hacer diferentes tipos de juegos. Para eso ahora mismo Vircon32 tiene algunas carencias, porque no es como un Unity o Godot que te lo dan todo automático. Las cosas hay que hacerlas más desde cero. Y creo que algo que le falta hasta ahora es poder tener una pequeña librería o sistema para hacer físicas básicas.

Para eso he pensado que podría adaptar el código del Pinball Maker que ya hice, porque no usé ningún motor ni librería y la física funcionaba bien:

Adaptando el código a la consola ya tengo las formas más básicas para colisiones: rectángulos, círculos, cápsulas y arcos. Mezclando esto con un poco de física (rozamiento y rebote) y añadiendo gravedad, ya se puede hacer alguna cosa bastante potable:

Aunque el GIF pega algún tirón, en la consola se ve suave. Aún así sigue siendo un motor MUY básico, y no va a poder manejar formas complejas ni demasiados objetos, pero aún así puede abrir bastantes posibilidades. Ahora mismo solo lo estoy usando yo pero tras las jams cuando tenga más tiempo intentaré ya organizarlo un poco y subirlo con las demás librerías.

14 1 respuesta
r2d2rigo

#697 haz un port de Box2D a VirconC cobarde

1 respuesta
carra

#698 Uf tampoco yo sé tanto de motores físicos. Esto es sencillito en comparación!

18 días después
carra

Últimamente no he escrito aquí porque iba todo por la jam de MediaVida. Así que para quien no siga ese hilo, aquí tenéis un pequeño trailer que he subido de mi juego. Ya os lo podéis descargar en itch.io :smiley:

EDITO: Video resubido, el anterior no se grabó bien del todo.

11 1 respuesta
Damnedlove

#700 es una pasada que los ojos siga la dirección de a donde va, son pequeños detalles.

1 1 respuesta
carra

#701 Gracias! Perdona, pensé que te había contestado pero se me fue. Estoy a tope últimamente.

De hecho pasé esta semana preparándome una charla que di el sábado sobre la consola. Además les hice como sorpresa un pequeño juego de tanques para que jugaran allí, se juega con 4 personas a la vez, unos contra otros y hubo piques XD. La charla la subiré completa a YouTube dentro de un par de días. El juego de los tanques también lo subiré pero lo tendré que pulir un poco antes, le hice a toda prisa y se nota que le falta un poco.

15
carra

Ya he subido el video de la charla completa, aquí lo tenéis.
Es largo pero creo que toca un poco casi todo lo que he hecho.
Lo he editado con las transparencias encima, que no se veían muy bien.

12
r2d2rigo

@carra desgraciao que vircon solo soporte enteros de 32 bits me esta dando mas de un quebradero de cabeza.

1 respuesta
carra

#704 Vas a contar hasta más de 2147 millones?? :scream:

1 respuesta
r2d2rigo

#705 no pero necesito manejarme con valores de 1 y 2 bits.

carra

He creado un pequeño update de las herramientas de desarrollo de Vircon (versión 23.10.27). Es poca cosa, si teníais ya algo en marcha para preparar la vircon jam no hace falta que lo actualicéis.

Las novedades son estas:

  • Corrige un error en las directivas #error y #message.
    Seguramente no las usáis pero hay una de mis librerías recientes que la usa.
  • Añade variables extern. Aunque no exista todavía linker, esto
    ayuda a organizar mejor los archivos separando headers e implementación
  • Permite una coma final en los enum y las inicializaciones.
    Así me adapto a lo que permiten los compiladores normales de C.
3 1 respuesta
r2d2rigo

#707 me ha venido al pelo este update, tenia una version prehistorica de las tools ademas y la convergencia hacia un C mas estandar esta de lujo cuando quieres correr test unitarios.

Por cierto, hay alguna manera de lanzar un bluescreen cuando ocurre algo critico?

2 1 respuesta
carra

#708 Errores de hardware personalizados no. Hay los típicos: dividir por cero, etc, que tú puedes causar a voluntad. Pero en principio no sirven para identificar errores a no ser que los "fabriques" para intentar por ejemplo saltar a una dirección de memoria concreta (que no exista) y ver eso en los datos del pantallazo azul.

Pero para identificar de dónde viene cada error, lo mejor sería que crees tu propio "pantallazo": escribes algo en la pantalla y terminas el programa (parando la CPU). Por ejemplo, esto te va a mostrar un pantallazo blanco con el mensaje que quieras:

void make_error( int* message )
{
    clear_screen( color_white );
    set_multiply_color( color_red );
    print_at( 20, 20, "PROGRAM ERROR" );
    set_multiply_color( color_black );
    print_at( 20, 50, message );
    exit();
}

Esto cuando lo ejecutes se verá así, y el programa se habrá detenido (en el emulador te dirá "CPU PARADA"):

PD: También puedes usar una variante de esto para hacer como si el programa tuviera "breakpoints": pones el mensaje y en vez de detener el programa esperas a que se pulse algún botón del mando y luego continúas. Así sabes por dónde está pasando tu programa.

2 1 respuesta
r2d2rigo

#709 algo así pensé pero no tenía la función de exit() clara del todo, gracias!

1 respuesta
carra

#710 A ti! Además me has hecho pensar, tal vez podría haber alguna forma de implementar "breakpoints" sin tener que hacer un depurador. No daría la misma funcionalidad pero podrías llegar a tener el call stack en cada parada... :thinking:

1 respuesta
r2d2rigo

#711 opciones de developer en el emulador estarian de puta madre (disassembler, etc).

1 1 respuesta
carra

#712 Pues sí, la verdad. Pero hacer algo así me requeriría mucho tiempo, y la verdad no sé hasta dónde sabría llegar... pero bueno, vamos paso a paso. Poco a poco iremos mejorando cosas.

1 respuesta
r2d2rigo

#713 no me hagas sacar un emulador alternativo en .NET que sea mas completo que el tuyo ( ͡° ͜ʖ ͡°)

carra

Bienvenido sería! Y si te pudiera ayudar en algo, lo intento :smiley:

carra

Hoy por fin he subido una librería que va a hacer bastante más fácil crear juegos en Vircon32. Es una librería que nos permite montar en pocas líneas y de manera estructurada un sistema de colisiones basado en rectángulos. El código fuente lo tenéis aquí, y como siempre viene con un ejemplo sencillo que os muestro en este GIF:

Como veis la librería solo soporta formas rectangulares, y el ejemplo aproxima las bolas con cuadrados. Pero en muchos casos solo esto ya va a ser suficiente. De hecho mis juegos hasta ahora siempre han usado colisiones de este tipo. De momento los mapas de tiles solo permiten tiles sólidas (no hay por ejemplo semisólidos) pero por ahora he preferido mantener la librería lo más simple posible de cara a la jam. Ya os adelanto que el ejemplo que voy a publicar para el tema que elegí va a usar esta librería.

7 2 respuestas
Ridote

#716 ah que ya hay tema? Cuál es?

1 respuesta
carra

#717 Haberlo haylo, pero no lo he hecho público aún. Lo pondré junto con mi ejemplo cuando empiece la jam (o un poco antes, tal vez sábado por la noche).

1 respuesta
r2d2rigo

#716 cuántas librerías has hecho ya? Habrá que ir montando un gestor de dependencias no? ( ͡° ͜ʖ ͡°)

1 respuesta
Ridote

#718 pero los temas hay que elegirlos aleatorios y entonces abrir la jam, no seas tramposo

1 respuesta