Desarrollo juego WiiLander. nueva version con muchos cambios

Muy buenas, a ver si alguien me hecha un manilla, como ya tenia mas o menos encarrilado las 2D del Wii Lander decidí, pasar de la versión de la librería GRRLIB 1.6 a la 3.0.1.. el problema es que funciona mejor la GRRLIB 1.6 que la 3.0.1.. por lo que no se que hacer.. si intentar arreglar la 3.0.1, seguir con la 1.6 o utilizar SDL, o cualquier otra base antes de avanzar mas..

Imagen
Atari original version

Por ahora os dejo lo que tengo con las dos librerías.. (y creo que se ve mejor la 1.6)

Controles:
La nave se controla usando el Wiimote en posición vertical.. si lo movemos la nave se mueve a la par... y para dar potencia al motor, tenemos que ir rotando el mando hacia adelante, un pelin difícil.. pero espero que adictivo ;)

Con + y - cambiamos el zoom (en la versión definitiva sera automático)
Con A, centramos la nave
Home para volver al menu

La versión 1.6 tiene varias variables de control... (creo que me tengo que agenciar un USB Gecko )

Version GRRLIB 1.6
http://wiibrew.org/w/images/8/8f/LunarL ... 16.dol.zip

Version GRRLIB 3.0.1
http://wiibrew.org/w/images/7/7f/LunarL ... 1b.dol.zip


Editado 30/12/2008
Y después de la ayudita.. o mejor dicho de la super ayuda de Hermes, aquí tenéis una nueva versión, a ver que os parece.. todavía no es jugable, porque no están activadas las zonas de aterrizaje, pero ya se puede navegar por todo el planeta XD , hay scroll horizontal+ vertical... musica.. etc

http://wiibrew.org/w/images/1/1c/Wiilander.0.1.zip
Solo tenéis que descomprimir el archivo, y copiarlo al directorio apps de la SD

Gracias..

Manny
Una cosa, donde he de meter los archivos dol? En alguna carpeta de la SD? Porque los meto en la carpeta apps y en el HBC no me aparece nada. :-?
La forma mas rápida es que lo lances por red al HBC, usando la utilidad WiiTCPLoadGUI se ejecutara automáticamente y no escribirá nada en la SD, para ver el "hostname" (la ip de tu wii), usa la ayuda del HBC, y muy importante, para poder mandar el fichero tienes que esperar a que el icono de red del HBC deje de parpadear.

Imagen

Puedes descargar la utilidad desde aquí:
http://sourceforge.net/project/showfile ... _id=231481

Otra opción, es que crees un directorio, en el HBC, renombre el fichero a .dol y copies un "meta.xml" y un "icon.png" de otro directorio.

Por cierto a ver si alguien se anima, y crea un "icon.png" chulo,

Gracias,
Manny
Gracias por la explicacion de hacerlo por TCP pero al final lo he hecho por la SD jeje.

Bueno al tema. Yo de esto no entiendo de librerias y demas. Si que es verdad que la 1.6 va mejor, pero la 3.0.1 como que se ve mejor.
El control, buff, todavia no le pillo, jeje, pero tiempo al tiempo. Y el boton A cuando lo mantienes pulsado el vibrador se pone todo cachondo jajajajajaja.

Pero bueno esta muy bien.

Una cosa, se podra disparar y demas? Es que no se de que va el juego jeje. Es para tener un poco de accion. Jajajaja.

EDITO: Vale ahora caigo de que va el juego, jeje. No he dicho nada.

EDITO2: De todas formas me voy a bajar el WiiTCPLoadGUI para la mas comodidad, sin andar con la SD dando vueltas.
Ya siento no poder ayudarte mucho, jeje.
La idea del juego es aterrizar la nave "despacito", en los puntos de aterrizaje establecidos.. una vez se completan todos los puntos de aterrizaje se pasa a la siguiente fase...

Al final no se si lo mejor seria pasar de GRRLIIB e ir directamente a SDL, así podría ver los avances en el PC en vez usar solo la wii, a la que no tengo acceso constantemente..

¿Alguien tiene experiencia con SDL? Es factible que sea fácil compilarlo para Wii y para Ubuntu, o para Wii y para Windows con solo modificar un parámetro en el MAKE?

Gracias,

Manny
manny2008 escribió:¿Alguien tiene experiencia con SDL? Es factible que sea fácil compilarlo para Wii y para Ubuntu, o para Wii y para Windows con solo modificar un parámetro en el MAKE?

Gracias,

Manny


El SDL para Wii solo reconoce el puntero (como ratón) y los botones A y B (como boton izquierdo y derecho del ratón). Pero es muy facilmente modificable para implementar el resto de botones.

Yo lo tengo hecho, pero hacia botones ficticios del ratón que no están en la librería SDL. Lo que tendrias que hacer es modificarla para que simule teclas del teclado (SDLK_UP, SDLK_DOWN, etc) y entonces te compilaria en cualquier sistema que utilize SDL.

EDIT: Acabo de ver que quieres usar un control un poco especial para controlar la nave, en ese caso lo mejor es que utilizes SDL solo para la parte grafica, y para la parte del control uses la Wiiuse de forma normal, luego en el codigo pones algun #ifdef WII para ese control y otro para el control normal de SDL.
como se pueden hacer cosas con estas cosas (me refiero a como programar con el SDL y todo eso)

es que me gustaria haer un juegecillo sencillito pero no tengo ni idea de programacion
civ escribió:como se pueden hacer cosas con estas cosas (me refiero a como programar con el SDL y todo eso)

es que me gustaria haer un juegecillo sencillito pero no tengo ni idea de programacion

Pues si no tienes ni idea de programacion yo que tu primero aprendia c ..
A ver si para mañana te tengo preparado un icono.
kriogeN escribió:El SDL para Wii solo reconoce el puntero (como ratón) y los botones A y B (como boton izquierdo y derecho del ratón). Pero es muy facilmente modificable para implementar el resto de botones.

Yo lo tengo hecho, pero hacia botones ficticios del ratón que no están en la librería SDL. Lo que tendrias que hacer es modificarla para que simule teclas del teclado (SDLK_UP, SDLK_DOWN, etc) y entonces te compilaria en cualquier sistema que utilize SDL.

EDIT: Acabo de ver que quieres usar un control un poco especial para controlar la nave, en ese caso lo mejor es que utilizes SDL solo para la parte grafica, y para la parte del control uses la Wiiuse de forma normal, luego en el codigo pones algun #ifdef WII para ese control y otro para el control normal de SDL.


Muchas gracias kriogeN, ciertamente al utilizar los acelerometros del mando, me va a ser difícil ir probando en el PC.. creo que lo mejor es que me compre un adaptador, para poder conectar la wii al monitor, y así hacer las pruebas en con la wii sin depender de que se este usando la televisión.

Petete_torete escribió:A ver si para mañana te tengo preparado un icono.


Muchas gracias, no te compliques mucho, algo sencillo!! Gracias
He creado el icono:

Imagen

jamonazo2000 escribió: Lo siento pero elotrolado no permite publicidad de tu pagina web por favor sube tus descargas a un mirror como megaupload
Hola.

Me gustaria que le echaras un vistazo a este programa de demostración:

http://mods.elotrolado.net/~hermes/wii/example1.rar

Está hecho con la librería que comenté, solo que le he añadido unas cuantas cosas para conectar con las GX de forma sencilla.

Como explicacion rapida, te comento que es una demo con un generador de "montañas" basado en numeros aleatorios el cual va añadiendo un nuevo elemento a cada frame, para hacer un scroll horizontal de derecha a izquierda, en pasos de 8 pixeles.

Puesto que la pantalla ocupa un ancho de 640 pixeles, para rellenar toda la pantalla se necesitan 80 lineas.

Los primeros 10 segundos (mas o menos), veras que la generación se produce dibujando esas 80 lineas.

Los diez siguientes, veras que se utilizan 320 lineas en forma de matriz de 2x2 para dibujar un trazo mas remarcado.

Y los ultimos 10, se utilizan QUADS, para dibujar montañas rellenas. En esta caso, me aprovecho del gouraud y de una tabla que almacena distintas intensidades de color, para crear un efecto de atenuación a medida que la altura sube.

Como puedes ver, todo se mueve suavecito y eso que le he añadido un MOD de mi amigo Estrayk, para que amenice un poco XD


Por si te interesa, te pego aquí el código grafico que interviene, para dibujar lineas (mas o menos XD):

InitScreen();                       // Inicialización del Vídeo.

........ // inicializacion de las tablas, el mod, etc

while(1) //bucle principal
{
// dibuja la caja
DrawRoundFillBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 0xffafafaf);

// dibuja el borde de la caja
DrawRoundBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 4, 0xff00ffff);
      
letter_size(16,64);  // tamaño de letra 16x64

PX= 0; PY= 24; color= 0xff000000; bkcolor=0; // ajusta coordenadas y colores

autocenter=1; // modo de letra con centrado horizontal
s_printf("Esto es un test");
autocenter=0;

ConfigureForColor(); // configura para usar GX_Begin con color en vertices

GX_Begin(GX_LINES, GX_VTXFMT0, 80*2); // vamos a dibujar 80 lineas x 2 vertices

// dibuja 80 lineas utilizando una tabla de alturas

for(n=0;n<80;n++)
    {
    AddColorVertex(n*8, tabla[n], 1, 0xffff9000); // primer vertice  (recuerda que x, y y z son enteros con signo de 16 bits)
         
    AddColorVertex((n+1)*8,tabla[n+1], 1, 0xffff9000); // segundo vertice
    }

/* NOTA: AddColorVertex es una funcion inline que niega la Z para que los valores Z de mayor peso, permanezcan detras y los negativos sean invisibles. Tambien se ocupa de invertir el color para que Alpha sea el byte de mayor peso y Rojo el byte de menor peso */

GX_End(); // realmente, es una funcion decorativa  :p

...... // actualiza la tabla

Screen_flip(); // espera a que se dibuje todo, al retrazado vertical e intercambia el buffer de pantalla
}


Pongo lo que me contestate, en otro post.. ya que lo veo muy interesante

Hermes escribió:
manny2008 escribió:
Hermes escribió:
Ademas, teneis otras funciones de dibujo para lineas, cajas, cajas redondeadas, elipses con o sin relleno. Dibujado de caracteres en pantalla con tamaño redimensionable (usa una fuente interna de 16x32 pixeles). Y hay mas funciones para el sonido, etc.


Hola Hermes, perdona que te moleste, estoy haciendo un juego con gráficos vectoriales (o poligonales.. según se vea), he probado con GRRLIB, y no me esta gustando mucho.. por lo que ve, aunque la última versión utiliza GX, lo hace todo en su propio frambuffer y solo utiliza GX al final.. si uso tu librería (screen.c) usando DrawLine me ira mas rápido?

Gracias,

Manny


No conozco cual es el problema que tienes con GRRLIB, luego no se si irá mas rapido. Mi librería tiene un problema porque plantea el dibujo de lineas desde un punto de vista de poder cambiar el grueso, asi que en realidad dibujo dos triangulos para formar una linea gruesa XD y tambien introduzco en cada llamada la informacion del formato de vertices, conectar con textura, etc. Es decir, que no está optimizado para dibujar tus graficos vectoriales, porque el objetivo no es mostrar miles de lineas rapidamente.

Peeero, no hay nada que impida dibujar lineas como tu dices, pasandole un buffer conteniendo una lista de coordenadas y un color y dibujarlo asi o a buenas malas, usar las funciones GX a pelo:

Activa transparencia/translucidez usando esto:

GX_SetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA,GX_BL_INVSRCALPHA, GX_LO_CLEAR);

// activa la transparencia de texturas: los colores con alpha<8 no se dibujan
GX_SetAlphaCompare(GX_GEQUAL, 8, GX_AOP_AND, GX_ALWAYS, 0); // esto deja pasar solo valores entre 8 y 255


Con esto configuras para usar color directo, sin textura

GX_SetNumTevStages(1);
GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORDNULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GX_SetVtxDesc(GX_VA_TEX0, GX_NONE);


Con esto configuras los parametros de los vertices, para pasar color directo de 32 bits y las coordenadas como enteros de 16 bits (para dibujar en un area de 640x480 mas que suficiente)

        GX_ClearVtxDesc();                    // borra los descriptores
   GX_SetVtxDesc(GX_VA_POS, GX_DIRECT);  // selecciona Posicion como directo
   GX_SetVtxDesc(GX_VA_CLR0, GX_DIRECT); // selecciona Color como directo 
   GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS,    GX_POS_XYZ,GX_S16,   0);      // formato de posicion S16 para X, Y ,Z
   GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8,   0);  // color RGBA8 para color0



Con esto dibujarias una o mas lineas
GX_Begin(GX_LINES, GX_VTXFMT0, 2); // el 2 es el numero de vertices

GX_Position3s16(x1, y1, z1);  // primer vertice  (recuerda que x1,y1 y z1 son enteros con signo de 16 bits)
GX_Color1u32(color);

GX_Position3s16(x2, y2, z2); // segundo vertice
GX_Color1u32(color);

GX_End();


El ejemplo dibujaria una linea, pero si añades dos vertices mas y pones en GX_Begin 4, serian dos lineas y asi hasta un limite de 65535 vertices "ma o meno" (weno, si te lo soporta el FIFO XD)

Otra cosa, el color se especifica como RGBA a 32 bits (o sea 8 bits por componente), siendo R el de mayor peso y Alpha el de menor peso.

Inconvenientes que te puedes encontrar: si usas mi libreria, con eso, ninguno, porque está preparada para que tu hagas esos cambios desde fuera. Pero desde GRRLIB seguramente desconfigures algo y pete, porque de por supuesto que las GX estan configuradas a su gusto, cuando no es así.

Ventajas de hacerlo asi: Despues de configurar, es mas rapido porque te evitas usar una lista que luego hay que interpretar para hacer lo que te he pegado ahi (obviamente, el dibujado de lineas es lo que hay entre GX_Begin-GX_End y el resto solo lo haces una vez para configurar antes de empezar a dibujar lineas y el numero de vertices hay que conocerlo antes de empezar a enviarlos)


Con respecto al ejemplo que has preparado:

Hermes escribió:Hola.

Me gustaria que le echaras un vistazo a este programa de demostración:

http://mods.elotrolado.net/~hermes/wii/example1.rar

Está hecho con la librería que comenté, solo que le he añadido unas cuantas cosas para conectar con las GX de forma sencilla.

Como explicacion rapida, te comento que es una demo con un generador de "montañas" basado en numeros aleatorios el cual va añadiendo un nuevo elemento a cada frame, para hacer un scroll horizontal de derecha a izquierda, en pasos de 8 pixeles.

Puesto que la pantalla ocupa un ancho de 640 pixeles, para rellenar toda la pantalla se necesitan 80 lineas.

Los primeros 10 segundos (mas o menos), veras que la generación se produce dibujando esas 80 lineas.

Los diez siguientes, veras que se utilizan 320 lineas en forma de matriz de 2x2 para dibujar un trazo mas remarcado.

Y los ultimos 10, se utilizan QUADS, para dibujar montañas rellenas. En esta caso, me aprovecho del gouraud y de una tabla que almacena distintas intensidades de color, para crear un efecto de atenuación a medida que la altura sube.

Como puedes ver, todo se mueve suavecito y eso que le he añadido un MOD de mi amigo Estrayk, para que amenice un poco XD


Por si te interesa, te pego aquí el código grafico que interviene, para dibujar lineas (mas o menos XD):

InitScreen();                       // Inicialización del Vídeo.

........ // inicializacion de las tablas, el mod, etc

while(1) //bucle principal
{
// dibuja la caja
DrawRoundFillBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 0xffafafaf);

// dibuja el borde de la caja
DrawRoundBox(SCR_WIDTH/2-200, 16, 400, 80, 0, 4, 0xff00ffff);
      
letter_size(16,64);  // tamaño de letra 16x64

PX= 0; PY= 24; color= 0xff000000; bkcolor=0; // ajusta coordenadas y colores

autocenter=1; // modo de letra con centrado horizontal
s_printf("Esto es un test");
autocenter=0;

ConfigureForColor(); // configura para usar GX_Begin con color en vertices

GX_Begin(GX_LINES, GX_VTXFMT0, 80*2); // vamos a dibujar 80 lineas x 2 vertices

// dibuja 80 lineas utilizando una tabla de alturas

for(n=0;n<80;n++)
    {
    AddColorVertex(n*8, tabla[n], 1, 0xffff9000); // primer vertice  (recuerda que x, y y z son enteros con signo de 16 bits)
         
    AddColorVertex((n+1)*8,tabla[n+1], 1, 0xffff9000); // segundo vertice
    }

/* NOTA: AddColorVertex es una funcion inline que niega la Z para que los valores Z de mayor peso, permanezcan detras y los negativos sean invisibles. Tambien se ocupa de invertir el color para que Alpha sea el byte de mayor peso y Rojo el byte de menor peso */

GX_End(); // realmente, es una funcion decorativa  :p

...... // actualiza la tabla

Screen_flip(); // espera a que se dibuje todo, al retrazado vertical e intercambia el buffer de pantalla
}




COMO MOLA!!!! Muchas gracias, esta genial!!.. me gusta sobre todo el que lineas en forma de matriz de 2x2 para dibujar un trazo mas remarcado, el último con el degradado es mejor.. pero la idea es hacer algo retro ;)

¿Me puedes pasar el código fuente .. para que adapte, a lo que tengo hecho hasta ahora.. así limpio un poco el código y publico las fuentes.

Por cierto Petete_torete, muchísimas gracias por el icono!!


Gracias por todo, así da gusto!!!


Manny
manny2008, mañana intentaré limpiarlo y dejar solo la parte que me has pedido, ademas de pasar a librería grafica el tema y tratar de documentarla. Si quieres hacer uso del sonido, se necesitan cosas que voy a procurar darlas ya compiladas y adaptadas tambien (la ASNDLIB ya es oficial tanto en el git de hackmii y en mi rama tienes lo ultimo en lo que he estado trabajando, junto con los parches al Modplayer, pero tengo cambios que no son faciles de ver al publico)

Necesito un poco de tiempo, eso si (y hoy ya he parado las maquinas XD)

Ayer añadí soporte a la librería para usar paletas (se pueden usar 16 paletas de color, aunque las paletas en Wii son color 16 bits) y texturas de 4 y 8 bits para el uso con paletas.

Tambien he añadido funciones para poder cambiar el Viewport o restablecerlo y para poder recuperar entorno 2D si por ejemplo, un juego pasara a usar 3D y dos nuevas funciones de caja redondeada para imitar el tipo que suele usar Nintendo tipo capsula.

Lo del cambiar el Viewport es util para dos cosas: si necesitas aumentar un area para que ocupe toda la pantalla (o sea, que vas a usar una resolucion menor que la de la salida y quieres que ocupe toda la pantalla o centrarla) y si quieres que de forma interna, se use la misma resolucion fija, independientemente de las lineas de salida (en PAL la resolucion es de 640x528, pues por ejemplo, se puede configurar el Viewport para que trabaje siempre a 640x480, que es la resolucion NTSC y la imagen se estirará de forma automatica: solo hay que ajustar el Viewport al tamaño de 640x480)

Asi la librería permite diseñar la parte grafica de los menús con relativa sencillez y al mismo tiempo, permite meter el salto a las funciones GX de forma sencilla, para tener un rendimiento óptimo (el uso de GX_Begin ya has visto lo sencillo que es: solo hay que tener cuidado de darle exacto el numero de vertices). Esto no es una GRRLIB que pretende que todo lo tengas que hacer desde aquí, si no mas bien se trata de facilitar un trabajo desde las propias funciones GX y que todo se interconecte con sencillez y manteniendo la maxima potencia posible.

En fin, que queda un suspiro para que todo esto lo podais tener a pleno rendimiento ;)

Saludos
Y después de la ayudita.. o mejor dicho de la super ayuda de Hermes, aquí tenéis una nueva versión, a ver que os parece.. todavía no es jugable, porque no están activadas las zonas de aterrizaje, pero ya se puede navegar por todo el planeta XD , hay scroll horizontal+ vertical... musica.. etc

http://wiibrew.org/w/images/1/1c/Wiilander.0.1.zip
Solo tenéis que descomprimir el archivo, y copiarlo al directorio apps de la SD

La nave se maneja con el wiimote en posición vertical, le damos ángulo a la nave inclinándolo hacia los lados, y si realizamos una torsión hacia delante, le damos aceleración.

Ya me contareis.. por cierto si alguien quiera ayudar con el diseño de mapas, para las distintas fases.. que levante la mano!!!

Salu2,

Manny
Probado y funciona perfectamente... yo jugaba este juego creo que en el atary 2600 y me encantaba estaré al pendiente de este juego.

Pd: estaría bien que se pudiera elevar también picándole A o B pero tal como esta ahora funciona perfectamente [sonrisa]

Muchas Gracias!!!
edd2s escribió:Probado y funciona perfectamente... yo jugaba este juego creo que en el atary 2600 y me encantaba estaré al pendiente de este juego.

Pd: estaría bien que se pudiera elevar también picándole A o B pero tal como esta ahora funciona perfectamente [sonrisa]

Muchas Gracias!!!


Muchas gracias a ti por probarlo... tomo nota como futura opción!!! la idea de controlarlo con el wiimote es hacerlo un pelin difícil, y en teoría mas adictivo.

Salu2,

Manny
17 respuestas