[Devlog] Vircon32: Creando mi propia consola

thenanox

#450 bueno a @r2d2rigo quizas le afecta, que es el que mas lleva al limite tu consola :p

1
carra

Bueno durante hoy ya he conseguido en mac...
... dibujar 1 triángulo :weary:

En serio, no me estaban funcionando ni los shaders! Qué manía con cambiar las cosas entre sistemas y versiones jeje. Y lo peor es que muchas veces vas a buscar por internet ejemplos de los supersencillos y te lo complican todo. Meten clases que no hacen falta, usan librerías... ¿gente, sabemos lo que es un "hello world"?

Ya, he terminado de quejarme por hoy.

6 1 respuesta
eondev

#452 si encuentras documentación guay compártela para los curiosos :D

1 respuesta
carra

#453 Pues de momento la que he encontrado no es muy guay... más bien voy teniendo que coger un detalle de aquí y otro de allá :man_shrugging:

Pero bueno, después de unos días muy perros he conseguido armar en mac un ejemplo más completo. Ya carga una imagen, dibuja un rectángulo con ella y aplica los efectos de color de Vircon. Así que ahora ya me debería poder dedicar a portar el emulador.

1
8 días después
carra

Bueno, unos días complicados. Estuve teniendo varios problemas con la librería glad, que es un loader que carga funciones y extensiones de OpenGL de manera multiplataforma.

Esta librería ya la estaba usando en el emulador desde el principio, PEEERO ya ni me acordaba que es una librería que se hace a medida de cada uno (hay un formulario web para ajustarla a lo que necesites usar), y resulta que todavía tenía la versión para OpenGL compatibility (pipeline fija antigua) en lugar de crear una nueva para OpenGL core (pipeline programable nueva). En fin, errores tontos...

Por otra parte, un error menos tonto es que incluso tras haber cambiado a la versión correcta de glad no me estaban funcionando ni siquiera funciones muy básicas como glGetString para escribir logs. Después de buscar por internet descubrí que en teoría hay que poner esta línea para obligar a las funciones a cargarse. En mi caso usando SDL+OpenGL, y después de tener ya el contexto OpenGL creado:

if( !gladLoadGLLoader( (GLADloadproc)SDL_GL_GetProcAddress ) )
  // error

Esta es una de esas cosas que no me explico muy bien. He estado varios años usando glad y nunca me ha hecho falta este paso, hasta que he cambiado a OpenGL core... pero bueno, misterios :man_shrugging:

carra

Uf, lo que me ha costado que funcione en mac. Pero aquí lo tenéis al fin

Todavía hay algunos errores que arreglar en el tema gráfico, pero lo gordo está hecho.

5 1 respuesta
thenanox

#456 jjajajaja joder puto mundo de bajo nivel como se sufre con los OS

1 respuesta
carra

#457 En realidad no habría sido para tanto si los señores de Apple hubieran implementado OpenGL como todo el mundo... pero ya sabemos que son especiales 😝

carra

Ya está todo funcionando bien, he arreglado esos pequeños errores gráficos. Por cierto, la resolución del iMac que estoy usando es tan alta que tuve que añadir una opción de zoom X3 jeje. También he probado a compilar alguna rom en mac y se ha creado sin problemas :relaxed:

El siguiente paso será empaquetar las 3 versiones (Windows, Linux y Mac) tanto de emulador como de dev tools, y crear una "release" en GitHub en la que ya se puedan descargar esos ejecutables directamente (y lo enlazaré desde la web). También tengo que añadir a las instrucciones lo que se necesita hacer para ejecutar cada una de las versiones, como por ejemplo instalar las dependencias o paquetes necesarios.

EDIT: También he simplificado un poco el código unificando las partes de gestión gráfica y sobre todo eliminando cosas que no se usan. Por culpa de aprovechar archivos de otros proyectos tenía algunas clases y métodos que no se necesitan, y he preferido dejar solo lo necesario para que comprender el código sea más fácil.

1 respuesta
thenanox

#459 para mac entiendo que es una version de instalador que te pedira permisos e historias no? no vas por el flujo oficial como explicaste

1 respuesta
carra

#460 Todavía no lo tengo 100% decidido, pero creo que lo que voy a hacer es lo siguiente:

Windows:
Un simple Zip, que se descomprime y se ejecuta sin instalar nada porque ya trae las DLLs que necesita. Igual que hasta ahora.

Linux:
Ofreceré paquete DEB y RPM. Los pasos son:
1) Instalas el paquete con un comando como

sudo dpkg -i <paquete>

2) Instalas automáticamente sus dependencias con

sudo apt-get install -f

MacOS:
En este caso es también un Zip, pero necesita instalar las depencencias (SDL, etc).
La manera sencilla de instalar dependencias es como paquetes de Homebrew:

brew install sdl2
brew install sdl2_image
...

Hice también algún intento de compilar en mac como un bundle .app, pero no me ha funcionado hasta ahora. Tal vez sea yo que no sé cómo hacerlo, o cómo ejecutarlo después.

1 1 respuesta
thenanox

#461 brew es bastante comun, asi que puedes tirar millas por esa solucion. no se podria montar incluso para brew vircon32? :p

1 respuesta
carra

#462 Quizás sí.
O ya que estamos, convencer a Apple de que incluya vircon de serie en todos los mac :rofl:

carra

Ya he creado todos los binarios y paquetes, para Windows, Linux y Mac.
Acabo de crear releases en GitHub para poder descargarlos:


Emulador v22.6.4
DevTools v22.6.4

En el texto de la release también vienen instrucciones para instalar. Como véis las versiones van a ir por fecha, con el mismo formato que usan en software como Ubuntu o Code::Blocks. Mañana haré que desde la web se enlace directamente a estas releases.

carra

Por si alguno tenéis Macs más recientes, una persona del chat de Discord ha colaborado también compilando las versiones para el chip M1. Tanto emulador como dev tools, está ya subido.

2
9 días después
carra

Después de mucho tiempo, aquí tenéis por fin la siguiente parte de las especificaciones de la consola:

Especificación parte 4: El chip gráfico (GPU) (inglés)


Me ha costado bastantes horas y he reescrito el documento varias veces, pero creo que he logrado darle una estructura y un orden lógico para explicar las cosas. Creo que esto me servirá como "plantilla" a la hora de especificar los demás chips que también son dependientes de la CPU.

6
12 días después
carra

He subido un video contando un poco los ports de Vircon32 a otros sistemas.
El video está en inglés, pero tampoco cuento cosas que no sepáis ya aquí:

Lo único más reciente es que como veréis he empezado a trastear con la raspberry 3 que tengo. El emulador compila y funciona todo (bueno, el sonido no lo sé porque no lo tengo con altavoces) pero es injugable porque OpenGL no parece haberse habilitado bien. Lo tengo que investigar un poco más.

2 1 respuesta
r2d2rigo

#467 que te pasa con OpenGL?

1 respuesta
carra

#468 Pues que funciona pero parece que solo por software. En teoría he habilitado la aceleración por hardware (con raspi-config) pero no parece que esté funcionando. He probado tanto con un contexto OpenGL core como con uno GLES, pero de momento ha dado igual. O me falta algo por hacer o hay algo mal en mi código.

EDIT: Acabo de encontrar aquí que posiblemente me falten por instalar estos paquetes:

sudo apt-get install libgles2-mesa libgles2-mesa-dev xorg-dev

y configurar 128MB de RAM para video

carra

Pues en el Discord, hay alguien que se está haciendo sus pinitos en Vircon. Ya tiene medio hecho un Pong, y dice que quiere hacer una BIOS. Un valiente jeje

2 2 respuestas
Kalgator

#470 Ya tienes tu primer megafan

pasate el discord xdd, que no está en los enlaces de la web

1 respuesta
carra

#471 Pues no lo he puesto porque al no ser un servidor mío, me da cosa poner el link de invitación así tal cual.

De todas formas os lo dejo aquí: Discord Fantasy Consoles 2.0
Estoy en el canal: Fantasy Consoles > Vircon32

r2d2rigo

#470 me estas diciendo que me puedo hacer una BIOS para darle a la consola compatibilidad con 3D? 🌚

1 respuesta
carra

#473 Bueno después de lo de Virconstein ya todo es posible jajaja

carra

Últimamente veo que llevo mucho tiempo dedicándome a otras cosas de la consola y quería volver a los juegos. El siguiente que tenía en la lista era el solitario, pero me ha dado de repente un antojo de hacer un buscaminas así que en ello estoy.

Todavía no tengo nada corriendo en Vircon pero he estado dibujando pruebas de concepto para ir teniendo algunos sprites, tamaños de tablero, la distribución en pantalla y demás. Así es como me queda ahora mismo:

9
carra

Ya he dibujado todos los gráficos del juego.
Esta es la pantalla de título, la he hecho sencilla:

También he dejado ya encargada la música.
Ya solo me queda escribir el código y algún efecto de sonido.

6
13 días después
carra

Tras algunos días perros he podido avanzar el buscaminas.
Creo que lo podré tener hecho esta semana.

Por otro lado he estado haciendo una lista con ideas de juegos sencillos que me gustaría hacer en la consola. Lo pongo como referencia, no quiere decir que acabe haciéndolos todos (aunque me gustaría si tuviera tiempo!). Esto es lo que tengo de momento, pueden ir añadiéndose o desapareciendo juegos sobre la marcha jeje.

Juegos físicos:


Solitario (ya empezado)
Billar
Dardos
Conecta 4
Las damas
Mahjong
Sudoku
Pinball
Pachinko
Tragaperras
Ping Pong

Juegos digitales:


Pong (Jack Brian ya hizo uno)
2048 (ya hecho)
Buscaminas (en proceso)
Tetris
Pang
Qix / Gals Panic
Puzzle Bobble (demo ya hecha)
Arkanoid (demo ya hecha)
PacMan (Raposo ya hizo uno)
Sokoban
Snake
Galaga
Bubble Bobble / Snow Bros

2 1 respuesta
thenanox

#477 me falta algun beat em up lateral, tipo golden axe, cadillacs & dinosaurs, etc

tambien me falta alguno de carreras quizas, tipo outrunner, o perspectiva isometrica (tipo rally games) o superior

y siendo ya un poco mas cabron, alguno de peleas 2d, street fighter

son solo para darte ideas :)

PD: que diferencia hay entre fisicos y digitales para vircon?

1 respuesta
carra
#478thenanox:

PD: que diferencia hay entre fisicos y digitales para vircon?

Ninguna, solo era por separar las ideas basadas en videojuegos, y las que están basadas en juegos de mesa/deportes... algo físico real. No me refería a ediciones físicas o digitales en Vircon jajaja

Para beat-em'up, para que fuera sencillo (que es lo que tienen todas estas ideas) yo tiraría más a algo tipo Double Dragon. En realidad este juego sería muy fácil de hacer. Lo complicado es dibujarse los personajes con todas sus animaciones... ahora mismo es algo que se me escapa.

Para algo tipo outrun también tengo ya ideas para hacer la carretera con pseudo-3D (ese es el problema, tengo demasiadas ideas y me falta el tiempo jeje)

1
carra

JUEGO TERMINADO: MINESWEEPER PARA VIRCON32


Ya tenéis disponible nuevo juego para la consola: una versión para Vircon32 del clásico buscaminas. Funciona igual que el original, aunque adaptado para una experiencia más tipo "arcade". Como siempre, lo podéis descargar desde LA WEB y el código está disponible en GitHub.

Os dejo este video con gameplay de los 3 modos de dificultad:

4