SudoQ 0.8 (Win,Wiz,N64)

Started by BoMbErLiNk, June 21, 2016, 02:38:52 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BoMbErLiNk

He actualizado SudoQ a la versión 0.8, hasta ahora no había versión Bennu para Windows ni post por aquí (era una antigua de Fenix) y la versión para Wiz era una versión antigua de Bennu que daba problemas si antes se ejecutaba otro juego de Bennu de una versión más moderna, no llegaba a arrancar.




En realidad si he vuelto a este jueguecillo es porque estoy aprendiendo a programar en Nintendo 64 (C + libdragon), para tomar experiencia lo primero que he hecho es portarlo, la idea de programar en una maquina limitada siempre me ha gustado  ;D  (imagen en consola)



Una de las pegas era como portar los gráficos, N64 solo tiene 4KB de cache de texturas si quiero usar aceleración por hardware, así que el fondo son tiles de 64x16 de 16bits, el resto de gráficos eran casi todos de tamaño impar y la consola se cuelga si no le cargas texturas pares.

Una de las maravillas de Bennu, los procesos, tenía tropecientos procesos funcionando cada uno a su bola con su prioridad de pintado independiente, cada uno con su bucle, para N64 tengo un único bucle principal.

Me ha tomado 3 días portarlo, es prácticamente la misma versión, con un algoritmo más rápido para generar los tableros aleatorios, pero solo viene con 1 fondo (he pasado de convertirlos todos), sin submenú, no trae semi transparencias, tengo los efectos básicos y iré programando sobre la marcha, viene con libmikmod para reproducir unos cuantos MOD y XM  que trae dentro de la rom, tampoco hay función de guardado, paso de usar un Controller pak para eso.

Testearlo ha sido un horror, pantallazo negro si se cuelga y no he podido usar emuladores, así que iba para arriba y abajo con la tarjeta SD.

Estoy trabajando en otro proyecto ya más serio para N64, paralelamente también en Bennu teniendo en cuenta las limitaciones y formas de programar de la consola, por lo pronto tengo un scroll tileado de planos infinitos y he visto que puedo colocar infinidad de sprites sin bajar de 60fps, vamos se puede hacer algo muy majo, supongo que ya iré poniendo avances cuando tenga cosas interesantes  :D

Lo único que está siendo un problema es como tener varios hilos de ejecución en N64, porque las interrupciones se comen el rendimiento, especialmente al llamar al audio, ni pthreads, ni fork parecen implementados.


Bueno, dejo las descargas del SudoQ.

DESCARGAS

Windows

Wiz

Nintendo 64

Código Bennu

CAMBIOS

0.8 (10/7/2016)
- Detección de soluciones mejorada

0.7 (7/7/2016)
- Añadido código para detectar combinaciones triples cruzadas

0.6 (5/7/2016)
- Añadido código para detectar lineas o columnas triples inversas

0.5 (4/7/2016)
- Añadido algo de código para evitar tableros con soluciones múltiples
* Lineas o columnas dobles inversas, juntas o separadas
* Diagonales inversas en diferentes formas
* Selección solo de los números más conflictivos (lo cual podría crear soluciones múltiples, por revisar)
- Añadido back tracking para acelerar creación de tablero
- Añadido scale2x para ventana F1/F2 (win)
- En nivel fácil o normal se marcan qué números son repetidos al terminar tablero
- Corregido bug al usar submenú que puede sacar mensajes erróneos de resolución de tablero (win,wiz)
- Corregido leak de memoria al generar tableros (win,wiz)
- Corregido bucle con frame para acelerar creación de tablero (win)
- Se cambia la semilla aleatoria en cada ejecución, al salir del programa y volver a entrar siempre salía la misma en Bennu (win,¿wiz?)
- Código fuente más presentable
- Algunos cambios para el port a Android
- Algunas otras optimizaciones

0.4 (20/6/2016)
- Corregidos varios bugs
- Botón resolver ahora con resultado inmediato
- Presionar X en la ventana cierra y guarda partida (Win)
- Añadido icono de ventana (Win)
- Traducido al inglés
- Posición relativa del ratón con respecto a los controles manuales del tablero
- Botón para marcar casilla con número dudoso (solo en N64)
- Reproductor Mikmod (N64)

0.3 (versión única para Wiz, 2009)
- Soporte táctil
- Submenú al pulsar sobre una casilla
- Reproductor OGG
- Control manual usando mandos

0.2 (2006)
- Fondos alternativos
- Mejoras gráficas
- Corrección de bugs
- Soporte pantalla completa

0.1 (2006)
- Primera versión

SplinterGU

gracias bomber! que bueno es verte de nuevo compartiendo tus creaciones!

gracias!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

y pensaba que habias cambiado de vida por saturacion

panreyes

Holas Bomber,

Dos cosillas:
- La versión de Windows me la bloquea por virus:
http://go.microsoft.com/fwlink/?linkid=142185&name=Trojan:Win32/Spursint.A!cl&threatid=-2147261593&enterprise=0

- ¿El juego es open source? ¿Te parecería que lo portásemos a PixTudio -> Android?

BoMbErLiNk

#4
Que hay Splinter  :) , no sabrás nada del tema de los hilos de ejecución?

Free hace ya 5 años que estaba de descanso xD

Ye Pixel que es un falso positivo en el exe? Cambié la descripción con RESHACK (he actualizado el rar con el exe sin modificar).
Sí, del juego liberé el código en su día, tendría que limpiarlo un poco si lo quieres, es un desastre ahora mismo  :D

(es normal que el foro me haga 2 saltos de linea cada vez que escribo?)

panreyes

Ya no recordaba que yo porté SudoQ a GP32 en su día xD

Seguramente sea un falso positivo, pero siempre asusta :\

Si me pasas el código, probaré a portarlo a Android, por curiosidad :)

SplinterGU

hola bomber! a que te refieres con hilos de ejecucion? a que nivel? bennugd o C?

Tengo idea de incorporar hilos de ejecucion (a nivel interno) en bennugd2, ahora mismo estoy con los 64bits, haciendo pruebas y fixeando cosas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

BoMbErLiNk

#7
Hola Splinter, a nivel de C, el problema que tengo es que el audio debería ser un hilo diferente, en Bennu todo ese tipo de cosas va genial, bennugd2 pinta muy interesante, tengo que ponerme al día y leer todo lo que llevas hecho  :D

Por ejemplo el juego funciona a 60 fps estables, en cada frame hago llamadas a MikMod_Update(); para actualizar el buffer de N64, como solo hay un bucle en todo el programa cuando lo hago baja a 25fps.

El caso es que no es por falta de potencia, he hecho un semáforo para que haga una llamada si y otra no, duplicando el rendimiento pero si hago 3 tiempos y 1 llamada entonces el sonido empieza a petardear, he mirado pthread pero no está implementado (puse bien el link_flags y el include), fork devuelve siempre -1, igual tendría que usar otro método? Uso cygwin + mips64 + libdragon para compilar.

--

Ah Pixel entonces estás acostumbrado al horror xD, te subo el código tal cual  :)
Bennu src

SplinterGU

desconozco si hay threads en el API de N64 (cygwin + mips64 + libdragon), de hecho cero experiencia con N64.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind


panreyes


BoMbErLiNk

Gracias Pixel, lo he probado y el ratón desaparece al tocar los números, también he visto que el nivel de dificultad no se marca (debería ser transparente), en lo demás parece funcionar bien  :D

Ok Splinter, miraré a ver, lo preguntaba por si había algo rudimentario que funcionara en todas las plataformas.

Free ahora mismo lo subo...

Drumpi

Ottia, un Link Bombero por aquí. Cuanto tiempo (otra vez :D)
Anda, pues mola tener un port de Bennu en mi querida N64, una de las consolas que más cariño tengo. Pena no poder probar nada, porque mi consola no admite SDs (a veces, ni los cartuchos originales, los estoy limpiando todos a base de bastoncillo de los oidos y cristasol :D).

Lo cierto es que el juego me encantó en su día, pero los sudokus con múltiples soluciones me ponían de los nervios porque nunca sabía si había hecho algo mal o me había encontrado con uno de estos... y luego no sabía qué hacer. Aun lo debo tener en la mini-negrita.

¿La N64 no usa los cartuchos como RAM para textura y todo lo demás? ¿O es imprescindible copiar en la cache de texturas para mostrarlo? Nunca me he puesto a indagar el HW de la consola.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

panreyes

Quote from: BoMbErLiNk on June 21, 2016, 05:43:22 PM
Gracias Pixel, lo he probado y el ratón desaparece al tocar los números, también he visto que el nivel de dificultad no se marca (debería ser transparente), en lo demás parece funcionar bien  :D

Bueno, es un quick&dirty port. Te recomiendo descargar PixTudioPM, abrir el archivo .pixproject y trastear :)

BoMbErLiNk

#14
Holas Drumpi  :D , es el port de SudoQ, ojalá pudiera portar Bennu porque si se renderiza por hardware es una maquina muy competente.

Para probar las cosas te hace falta un cartucho flash, yo tengo el Everdrive 64, luego hay versiones con solo SD o con USB para desarrollo.

En lo de las soluciones múltiples tienes razón, SudoQ lo primero que hace es generar un tablero 9x9 aleatorio, hasta ahí bien, el problema viene en como borra después las partes del tablero, por ejemplo tendría que ir comprobando si el número 1 y el número 4 está borrado en varias casillas por línea o columna, porque a partir de ahí ya puedes poner el 4 y el 1 al revés y se jode el invento, creo que es algo que pasaba más en el nivel difícil  :P

En N64 puedes usar un buffer temporal para ir cargando cosas desde el cartucho a la RAM, no necesitas tenerlo todo cargado, de hecho la música no se carga en memoria, se va leyendo desde el cartucho, los cartuchos están limitados a 64MB de espacio pero incluso puedes leer cosas desde una SD.

Los sprites por hardware funcionan con memoria dentro del encapsulado del RCP que es el coprocesador de la consola, tienes 8 slots de texturas y 4KB, puedes usar sprites de 16bits y 32bits, esto es una limitación de la libdragon, en el SudoQ cargo un tile cada vez que tengo que pintarlo, descargo y cargo el siguiente, los del fondo son 64x16x16bits/8192=4KB, ya que voy a ir uno a uno almenos que usen toda la memoria y aceleren el pintado.

Si quieres pintar por software no hay limite de tamaño ni tienes que pasar nada a los 4KB, si necesitas que esté en la RAM antes de pintarlo, pero no vas a conseguir tener 2000 sprites a 60fps.

--
Ok Pixel lo miro  :)
PixTudioPM es una variante de Bennu un entorno o algo? Se me hace raro que el flags=4 de los botones no funcione pero sí lo haga el alpha de las casillas.