23 nov. 2004

23/11/04: Felices reyes magos :)

Diario de guerra de Alejandro González, Alias "WaaghMan".Quincuagesimooctava anotación:

Hoy hemos estado haciendo un repaso a los catálogos de juguetes que llegan a casa, llegamos rápidamente a una conclusión...





La industria de los juguetes para niños está estancada :).



En serio, el número de juguetes nuevos (no digo ya originales) respecto a hace unos 10 años se reduce a menos de un 50% del total.



La verdad es que entra la nostalgia al ver ese catálogo, cuando descubres ese juguete que tenías de muy pequeño (Gusiluz) o cuando rememoras esas emocionantes partidas al Risk.



También recuerdas esos injustos berrinches que cogías cuando no te traían lo que querías (Scalextric), y que ahora entiendes al ver que es carísimo :P.



Pero, a lo que iba, la mayoría de juegos ya existían hace 11 años, algunos incluso no han sufrido ni una remodelación de la caja. Ejemplos de esto son el Tragabolas o el Cocodrilo Sacamuelas, pero hay unos cuantos más...



Otros juegos sí que han sido remodelados, pero básicamente siguen siendo los mismos: El Monopoly, el Uno, el Atmosfear...



Hay que ver. Si esto se hiciese en algunas industrias que yo conozco, al carajo que se irían :s. Menos mal que los niños no entienden de eso, que si no...



Y el caso es que, como dijo mi madre, en estos últimos 10 años no ha habido cambios drásticos, pero en la década anterior si que los había habido, y muy grandes: Los coches teledirigidos, Scalextric, transformers, muñecas Barbie, etc.



Es lo que tiene ser joven :D.

22 nov. 2004

22/11/04: Cambios a mejor

Diario de guerra de Alejandro González, Alias "WaaghMan".Quincuagesimoséptima anotación:

Hace mucho tiempo que no escribo algo digno de mención, y creo que hoy no habrá excepción... pero pasemos a un resumen de hechos acontecidos.





1- Me voy (o van) a comprar un portátil :). Esto no implicaría realmente un cambio si no fuese porque el portátil pretende ser para trabajar.



2- Armistice tiene página web propia, así que las mejoras y cambios dejarán de aparecer en este blog :). Su enlace es http://petra.euitio.uniovi.es/~i0886062/Armistice



3- Hemos comenzado una campaña de rol masterizada por mí. Pretende ser una campaña corta mientras Roch (el máster usual) prepara la que llevamos un año (más o menos) jugando.



4- Parece que le estoy cogiendo el gusto a salir por la noche. No es que me emborrache ni que disfrute demasiado :P, pero me parece un cambio de aires en cierto modo interesante, ya que últimamente veo que lo voy necesitando.





Maldita sea, es tarde y no seguiré... pero de verdad, mañana intentaré hacer un post largo y profundo! :D

10 nov. 2004

10/11/04: Y duran, y duran...

Diario de guerra de Alejandro González, Alias "WaaghMan".Quincuagesimosexta anotación:

El sistema "Lista de pequeños retos" ha funcionado. Hoy, por tercer día consecutivo, estoy trabajando a destajo en el proyecto. Para agilizar las cosas, en los momentos "muertos" (es decir, cuando no estoy delante del compilador) apunto las cosas que faltan por añadir o que hay que mejorar, y las añado a la lista.



Además, si la forma de superar ese punto no es obvia, discurro una solución y la explico al lado.



De esta forma, cuando me siento delante del pc, está la mayor parte del trabajo hecho y sólo me toca teclear :).



Lista de cosas por hacer en estos momentos (en paréntesis las superadas hoy desde las 8.45 hasta las 11.00):



(-Disparos: Añadir potenciación a los disparos)

(-Tipos de daño: Añadir robo de vida/energía y daño basado en porcentajes)

(-Añadir regeneración de vida)

(-Mostrar los mapas correctamente)

-Hacer que funcione el Añadir jugador cuando se conectan después

-Hacer animaciones de los personajes

-Poner las animaciones de los personajes en el juego

-Muerte y reaparición de personajes

-Puntuaciones

-Actualización correcta de los estados de los personajes

-Desconexión y desconexión forzosa de personajes

-Menú de opciones durante el juego

-Sonidos

-Efectos de luz

-Icono del ejecutable

-Título de la ventana

-Calcular coste de los cuerpos

-Cambiar controles en el perfil

-Hacer funcionales los menús

-Añadir un interfaz durante el juego

-Poder configurar la velocidad de conexión

-Predicción de movimientos

-Tiempo de vida de los proyectiles

-Más mapas, Más cuerpos, Más armas



Como se puede comprobar, la lista es larga pero se reduce rápidamente (13% en dos horas).



Seguiremos informando :)

9 nov. 2004

9/11/04: Recuento

Diario de guerra de Alejandro González Fiel, Alias "WaaghMan".Quincuagesimoquinta anotación:

Bueno, por fin ha sucedido. Por fin me he concienciado y me he puesto a trabajar duramente en el proyecto. Y se nota. Con solo un día y medio de trabajo he hecho muchas cosas y he terminado (o perfilado) muchas partes del proyecto, unas más difíciles que otras.



Pero este post no pretende contar esos cambios (entre otras cosas porque, por extraño que parezca, no recuerdo qué hice ayer, sólo recuerdo que fue importante :S).



Entonces, de qué hablaré hoy? Pues hoy va un recuento de datos sobre el proyecto que pueden darnos una idea de su envergadura:



Y aquí van, divididos en las 4 partes del proyecto:

-TinyXML: No está hecho por mí, pero he de compilarlo.

Archivos .CPP - 4

Archivos .H - 2

Espacio ocupado por temporales (Modo Debug): 4,33Mb

Espacio ocupado por temporales (Modo Release): 537Kb

Espacio ocupado por la librería (Modo Release): 117Kb



-Engine: La parte del Engine que no depende de OpenGL (aunque sigue sin ser realmente genérica, ya que incluye clases que utilizan directX y otras que usan la API de windows. No pretendo que lo sea.):

Archivos .CPP - 22

Archivos .H - 29

Espacio ocupado por temporales (Modo debug): 9Mb

Espacio ocupado por temporales (Modo release): 6Mb

Espacio ocupado por la librería (Modo release): 521Kb



-EngineOGL: La parte que implementa OpenGL del motor.

Archivos .CPP - 11

Archivos .H - 10

Espacio ocupado por temporales (Modo debug): 21.2Mb

Espacio ocupado por temporales (Modo release): 6.97Mb

Espacio ocupado por la librería (Modo release): 761Kb



-Armistice: El juego en sí, y el gran tocho del proyecto

Archivos .CPP - 99

Archivos .H - 105

Espacio ocupado por temporales (Modo debug): 150Mb

Espacio ocupado por temporales (Modo release): 100Mb

Espacio ocupado por el ejecutable (Modo release): 420Kb





Como vemos, cantidades nada despreciables. Y lo que nos quede :).



Y, para terminar por hoy, contestaré a una pregunta: ¿Para cuando se podrán jugar partidas?





Pues, según lo que entiendas como "jugar partidas", ya se puede. Falta por hacer que funcione correctamente cuando hay más de dos jugadores (simplemente, aún no se avisa a los clientes de que se conectan nuevas personas). Falta por hacer que los jugadores puedan morir y ganar puntuaciones (aunque ya pierden vida). Faltan más variedades de armas y personajes (esto lo puede hacer cualquiera). Falta hacer que funcionen los atributos.Faltan animaciones para los diferentes movimientos. Falta el propulsor.



Pero lo básico (mapas, personajes que interactúan) ya está puesto :). Así que cuando queráis :).

2 nov. 2004

2/11/04: Contradicción

Diario de guerra de Alejandro González, Alias "WaaghMan".Quincuagesimocuarta anotación:

Veamos... La cosa es sencilla.





Soy una persona que se distrae con mucha facilidad. Enseguida pierdo la concentración de lo que estoy haciendo, y eso suele incurrir en a) Hago algo varias veces sin darme cuenta b) No hago lo que debería hacer c) Hago mal lo que está chupado.



Un ejemplo sencillo de esto puede verse por ejemplo a la hora de comer. Por un pacto no escrito, mi hermana pone la mesa y yo la recojo. Realmente es un pacto injusto, es más fácil poner la mesa que recogerla, pero por no pelearme, lo soporto. Pues el caso es que tras la comida, mientras recojo los platos y limpio la mesa, mis padres a veces hacen la tristemente famosa "ronda de preguntas". A veces son preguntas sobre qué he hecho hoy en el "trabajo", o qué tal llevo el proyecto, sobre las que puedo contestar (o mentir) fácilmente, sin desconcentrarme.



Pero otros días, son preguntas realmente insidiosas, de las que te hacen pensar e incluso dudar. ¿Cuáles son las siglas de TFT? ¿Qué es mejor, Plasma o TFT? ¿En qué consiste una partida de rol? ¿La gente que juega al rol contigo está desequilibrada? ¿Este móvil está bien de precio? ¿Se puede piratear CSD? ¿Qué le puede suceder al PC de mi compañero de trabajo que no funciona?



Etcétera. Estas preguntas, en su mayor parte, requieren pensarse la respuesta. Y eso me desconcentra hasta tal punto, que guardo el ketchup donde no es, o vuelvo a poner cosas ya recogidas en la mesa :|. En serio. Me hago un enorme lío.





Wow, me he ido por las ramas. A lo que íbamos, me desconcentro muy fácilmente y con catastróficas consecuencias.



Pues el caso es que eso me está sucediendo en este proyecto. Cualquier cosa me desconcentra, y sumado a la falta de motivación genérica, provoca que la cosa avance muuuy despacio.



Para evitar estas cosas, he decidido hacer un simple experimento que, espero, contrarreste las distracciones (ya que es imposible anularlas).



Al igual que me desconcentro fácilmente, soy una persona con mucha autoestima (esta mañana leí en una revista que los videojuegos aumentan la autoestima, y los recomendaban a los adultos). No es que me considere mejor que los demás, es que me esfuerzo en demostrarlo :).



Que nadie se lo tome a mal. No estoy diciendo que los demás sean basura comparados conmigo, ni mucho menos. Simplemente, ante los desafíos y similares, siempre intento superar al otro. Esto viene (y conlleva) de un terrible mal perder que tenía de pequeño (y sigo teniendo, pero en mucha menor medida).



De nuevo me lío. A lo que íbamos (again). El experimento consiste en plantearme pequeños retos que, uno tras otro, lleven a la consecución del proyecto.



Dicho así, parece sencillo (y en cierto modo lo es), pero el nº de pequeños retos, me temo que será demasiado grande. Pero bueno, con trabajo duro se irán completando...



Ahora mismo no tengo la lista a mano, pero ya hay unos 15 retos que superar.





Ahora, explicaré el estado actual del proyecto:



Recordemos:

-Menús funcionan, pero no hacen lo que deberían aún

-El servidor sirve y el cliente clientea.

-Los personajes se mueven y saltan, chocan y disparan, pero no reciben daños.



Últimamente:

-El cliente se une por IP. El servidor le indica el nombre del mapa, el nº de jugadores y su posición y cuerpo actuales. Una vez cargada la partida, el cliente escoje cuerpo y el servidor le dice dónde se ha de colocar. A partir de entonces, el servidor envía posiciones actualizadas del resto de clientes, y el cliente envía sus acciones, y posiciones actualizadas cada cierto intervalo de tiempo.





Últimos aspectos:

-El sistema de sincronización de cliente y servidor consiste en un sistema acción-evento. Esto quiere decir que el cliente envía acciones al servidor (me muevo, salto, disparo, etc.), y el servidor procesa la información. Cuando ocurra algo que afecte a ese jugador, se generará un evento (recibes impacto, mueres, ganas un punto, etc.) que se enviará al cliente para que lo procese.



Con ping 0, este sistema es ideal. Las acciones se enviarían de forma instantánea y la sincronización sería total. No es el caso. Dado que el ping puede ser variable, puede ocurrir que la acción envíada no se pueda efectuar, y el personaje no se comporte como debería. Esto se soluciona parcialmente con la previsión de movimientos usando el ping actual, pero no es suficiente, ya que pueden suceder cosas que el servidor y el cliente interpreten de forma diferente (por ejemplo caer verticalmente sobre un pico: Puede irse a la izquierda en el cliente y a la derecha en el servidor). Para evitar eso, también se actualizará la posición de los personajes utilizando los valores X e Y y enviándolos periódicamente.



Cuestión: ¿Quién actualiza los valores?

Respuesta: Ambos pueden. Por ejemplo, en el Half-Life es el servidor quien envía al cliente su posición verdadera. De esta forma, un cliente nunca podrá hacer trampas para mentir al servidor sobre su posición real, y no podrá hacer otra cosa que decirle que se mueve hacia una dirección concreta. ¿Desventajas? Con lag puede ocurrir que creas estar moviéndote correctamente, y de repente seas reposicionado en otro lugar. La acción puede volverse entrecortada y molesta.

Por tanto, en este caso se usará la actualización desde el cliente. Así, ocurra lo que le ocurra a la red, un cliente siempre verá su propia posición de forma fluída (aunque seguirá siendo el servidor quien determinará si sus disparos dan a los demás, etc). Esto conlleva el problema de que un programa en segundo plano podría modificar los paquetes enviados para engañar sobre la posición actual, pero eso es mucho suponer para un juego así :P.



Mañana más. Espero ponerme a saco con el tema... hay veces que creo estar dividido en dos :S