lunes, 27 de agosto de 2007

FrikiGard Online DS - Proyecto congelado

Lamento tener que escribir este post, pero asi debe ser.
Este proyecto queda congelado porque es demasiado grande para una persona sola, si encuentro gente dispuesta a colaborar seguiré adelante, sino pues nada. No porque sea dificil de programar, sino porque mi tiempo libre es muy escaso como para meterme en algo asi...
Intentaré encontrar algo más corto...

Por eso modifico el nombre del blog y todo... una pena, la verdad :p

domingo, 29 de julio de 2007

Al turrón!!

Aqui empieza todo.

Primero comentaré detalles del planteamiento del juego, y luego ya iremos con la parte de la programación.

Planteamiento
De momento hay pocas cosas claras.
La idea principal surgió al enterarme de que están preparando un Ragnarok Online para Nintendo DS, asi que el apartado gráfico simula (en 2D de momento) a la forma de verse de este gran juego que tantos vicios ha creado.
Los personajes, de momento hecho con charas al estilo RPGMaker, tienen 4 posiciones, y depende del ángulo hacia donde se tengan que mover, se usa una u otra posición. Los que jugasteis al RO, debiseis ver que los personajes tenían 6 posiciones, arriba, arriba izquierda, arriba derecha, y lo mismo para abajo. Pues esta es la idea. Con la publicación podreis verlo más claro.

Se usará el stylus para el movimiento básico, y espero poder hacer el control para zurdos o diestros usando sólo una parte de los controles.
De momento he puesto el botón L o R para comenzar a hacer un hechizo. Y una vez finalizado y soltado el botón, este se ejecuta.
Este modo de juego lo vi en LostMagic, y la verdad es muy intuitivo y te permite hacer muchos tipos de hechizos con sólo el lapiz.

(he decidido poner algunos dibujitos, porque cuando me enrollo a escribir no paro ^^)

Bueno, a la izquierda veis la idea. Una versión básica de esto ya está programada, asi que pronto podreis ver algo.




La conexión cliente-servidor es mediante la conexión WiFi, como no podría ser de otra manera en un juego de este estilo. Tambien está lista, no tengo ningun tipo de comprobación ni forma de configurarla, asi que de momento habrá que conformarse con configurar la red en algun otro juego.

Debo advertiros que no tengo ni idea de diseño gráfico, asi que no voy a ponerme a hacer logotipos para el juego, ni siquiera escenarios chulos. De momento lo haré funcional. Ya veremos más adelante si se me ocurre algo o me da pereza y el juego se queda feito como él solo.

Hacia el final de cada post intentaré poner algunos screenshots. Serán muy cutres, hechos con la cámara del móvil, pero no tengo forma mejor de hacerlos. No se si hay algun emulador para DS que admita conexión.

Detalles técnicos
Este post será algo más largo que el resto a partir de ahora, me gustaría explicar un poco detallado la forma de programación para DS, por si alguien se anima.
Estoy reclutando programadores para este juego, me parece que me supera a mi solo ^^.

Bueno. Antes de nada, debeis saber que lo hago todo sobre Linux, asi que las librerias para las conexiones de red y todo esto se basan en este sistema operativo. El resto no tiene porque haber diferencias, pero no lo se, porque no he necesitado probarlo :p

A todos los que os interese empezar a programar para DS en Linux, os recomiendo este enlace, en él cuenta todo lo necesario para empezar, y una vez en ello ya vereis lo fácil que es.
http://www.elotrolado.net/showthread.php?s=&threadid=543702

Aqui nos explica a instalar las librerias libnds y PAlib, además del devkitpro. Esto será todo lo que necesiteis.

libnds son unas librerías para programar sobre nintendo DS. Trabajan sobre el hardware, haciendo posible juguetear con los botones, pantalla y demas.

PAlib es un grupo de librerías adicionales, que facilitan mucho la tarea de programar en DS. La mayoría de ellas se pueden usar sin más. Aunque ya vereis que he necesitado tocar algunas cosillas porque no me funcionaba del todo como debía.

Todas las pruebas que hago son sobre un M3 Simply, pero como no uso acceso a la memoria ni nada raro, creo que debe ser compatible con cualquier tipo de tarjeta. Pero bueno, ya me direis vosotros si es asi o no :p

Un poco sobre la conexión:
En teoría ya funciona la conexión de clientes simultaneos, pero no está probado. En el servidor uso el comando "select()", que cuando llega alguna acción en alguno de los sockets abiertos, se da cuenta, y permite continuar con la ejecución del programa.
Como ya sabemos que nos ha llegado algo, sólo tenemos que averiguar quien ha sido y actuar en consecuencia. Si es un nuevo cliente, almacenar sus datos y permitirle continuar. Y si es un cliente ya conocido, actualizar sus datos.
Ya pondré el código en siguientes posts.

Los usuarios se van almacenando en un array de tipo "usertype", que es un struct propio donde guardaré todos los datos.
typedef struct {
int x, y;
int angulo;
int sock;
struct sockaddr_in client;
int sprite;
char nombre[LEN_NOMUSR];
char *ip;
time_t lasttrans;
} usertype;
La mayoría de campos se explican con su propio nombre, asi que ya entraremos en detalles en un futuro.

De momento no estoy seguro de si hacer el juego con experiencia como el típico MMORPG, o si hacer todos los PJs del mismo nivel, para poder jugar contra cualquiera sin temor a que haya una diferencia muy alta. Creo que me decantaré por esto, y la diferencia entre los jugadores será la experiencia, y los hechizos aprendidos.

Otra cosa importante es la forma de lanzar los hechizos.
Se hacen mediante reconocimiento de trazos del Stylus.
Uso las librerias que se incluyen en las PAlib para ello. Cumplen muy bien su propósito, aunque he tenido que modificar un poco una función para que funcione bien el reconocimiento de figuras propias.

Me he encontrado algunas limitaciones al programar para DS. La encuentro muy lenta, espero que se puedan ejecutar muchos clientes simultaneos, pero creo que para hacerlo tendre más limitaciones.

Por hoy me he cansado de escribir, asi que os dejaré con un listado de las cosas hechas y las pendientes a corto plazo, y voy a ver si avanzo algo más :p

De momento lo que llevo hecho:
- Utilización de fondos, texto y sprites
- Movimiento del personaje con el stylus al estilo Animal Crossing
- Cambio del dibujo del personaje segun la dirección en la que se mueve.
- Conexión clientes-servidor.
- El cliente manda su estado actual, y el servidor lo recupera y muestra por pantalla.
- El servidor almacena los datos de conexión del cliente, para poder reconocerle en los siguientes envios.
- Uso del botón L o R para comenzar un hechizo.
- Reconocimiento del trazo del hechizo.
- Modificación del personaje cuando está lanzando un hechizo
- Envío al servidor el estado del lanzamiento del hechizo, para que los demás clientes sepan dibujar al personaje que está lanzando.

Por hacer a corto plazo:
- Reordenar el código.
- Crear un sprite al pulsar con el stylus tras el reconocimiento del hechizo.
- El servidor debe almacenar todos los datos del cliente, y su posición concreta en cada momento.
- El servidor debe mandar al cliente los datos de otros clientes y enemigos que hay en zonas cercanas.
- El cliente debe reconocer lo que el servidor le manda de otros personajes. y crear los sprites necesarios.

Screenshots y videos:
Esta vez no puedo enseñar muchos screenshots, ya que los he intentado hacer con la cámara del movil... y la verdad que se ve muy mal.

Pero he podido grabar algo y subirlo a youtube, la calidad es tan mala como las fotos, pero al ser video... se acepta un poco más ^^


Bueno, no se si se verá, youtube dice que si, pero que lo está cargando aun :p
Si se llega a ver podreis ver como la pantalla de la DS hay un puntito en el centro, es el personaje.
Y arriba está el log del servidor, vereis como al mover el personaje con el stylus, el log del servidor cambia, indicando la nueva posición, y si está ejecutando hechizo o no.
Al final tambien se ve como pulso el botón L para empezar a hacer un hechizo, pero no se distingue gran cosa ^^.

FrikiGard Online DS - MMORPG Homebrew

Hola a todos
Creo el que título del post lo dice todo, no?

Bueno, resulta que me ha dado el venazo de empezar con la programación para DS, siempre me había apetecido probar algo de programación gráfica, y ya que empiezo... lo hago con algo grande!

La idea es crear el primer juego MMORPG homebrew (algo asi como "hecho en casa") para la pequeña de Nintendo. Bueno, ahora que lo pienso, no se si hay algun otro MMORPG desarrollandose por ahi, si alguien lo conoce que me lo comente!

Para los que no conozcan este estilo de juego, las siglas MMORPG traducido a castellano significa algo asi como "Juego de rol multijugador masivo". Un ejemplo de este tipo de juegos son el World of Warcraft, el Ultima Online o el Ragnarok Online.

El problema es que si sólo juego yo... pues vaya juego multijugador, verdad? ^^ Asi que la idea es que, entre los lectores del blog me ayudeis a hacer las pruebas, y poco a poco podamos jugar cada vez más.

Todo lo que vaya haciendo lo iré publicando pasito a pasito, no tengo tanto tiempo como querría para dedicarle a este proyecto, asi que no iré muy rápido, pero espero poder avanzar algo cada 2 o 3 dias.

Si alguien llega a leer esto, y a la gente le interesa, iré publicando el código. De momento no es muy limpio, ya que todo lo que he ido haciendo ha sido con pruebas una detras de otra, asi que ahora está todo un poquito lioso. Pero pongo bastantes comentarios para que cualquiera sea capaz de seguirlo sin problemas.

He hecho un poco de trampa, y es que el juego lo empecé hace cosa de una semana, asi que ya hay cosas visibles, pero hablaré más técnicamene en los siguientes posts, aqui sólo quiero saludar ^^.