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

No hay comentarios: