Lone Star v0.55 -- Update
Ea =)
Siendo que pasado mañana desaparezco en una nube de humo vacacional, aprovecho la relativa calma de esta noche para contarles de que la va la nueva versión del juego.
Antes que nada, conseguí implementar un sencillo memory debugger y arreglé alrededor de 100 memory leaks, consiguiendo estabilidad real por primera vez desde la versión 0.32 =)
También agregué un nuevo helper, asteroid_ring, que produce anillos de asteroides como el que tenemos acá entre Marte y Júpiter. El resultado es muy "chido" según fuentes mexicanas (Hay más feedback desde allá que desde acá, vergüenza debería darles XDDDD). Como siempre, en la documentación está incluída la información sobre como agregar uno en su universe.xml.
A su vez, el asteroid_field recibió un cambio interesante: ahora tiene límites circulares y difusos, haciéndolo ver mucho más natural. Y hablando de natural, los asteroides ahora se generan fractalmente, haciéndolos más... "rocosos" :p
También hay un nuevo helper, binary_star, que permite la creación de sistemas multiestrella (Ambas estrellas orbitando el baricentro común, como debe ser).
Acabo de terminar uno de los módulos de personalidad para la IA (Aunque es como dicen, el código nunca termina de escribirse). Es la personalidad "trader" (Comerciante) y aplica a cualquier nave que tenga los motores standard (Trasero, delantero, laterales y de giro).
Hay una personalidad "Miner", pero por el momento solo recoge pedazos de asteroide del tamaño mínimo (Cuando se ponen verdes).
Gracias a esto, ahora tenemos la posibilidad de agregar pilotos autónomos que busquen "buenos tratos" en estaciones cercanas y se dediquen a comerciar. Si bien es bastante simple y un poco ingenuo en su implementación, el resultado se acerca a mis metas para esta versión del juego:
Un universo más dinámico, una primera aproximación al combate y una muestra mínima de lo que quiero conseguir con respecto a las entidades autónomas y su interacción con el universo.
A nivel técnico, implementé los conocidos algoritmos de steering behaviors básicos, integrándolos con el core del sandbox, el motor de física y la mar en coche.
Con un sistema de lógica difusa para la toma de decisiones y una máquina de estados jerárquica sirviendo de organizador del estado mental de cada entidad (A través de un árbol personalidad->motivación->comportamiento->locomoción), las entidades pueden interactuar con el universo en el que están incorporadas siguiendo reglas sencillas y fáciles de debuggear.
Lo más complicado fue el desarrollar fórmulas que permitiesen aproximar soluciones para la maniobrabilidad de todos los tipos de naves.
Por otro lado, no estoy muy conforme con el algorítmo de evasión de obstáculos... pero en CNTP, con viento sudeste y sin muchas formas cóncavas funciona aceptablemente XD
Para ser mi primer sistema de IA, estoy más que contento. hace dos semanas no existía nada de todo esto =D
Las estaciones fueron rehechas y llevadas al framework nuevo (Nuevo como en v0.5).
Ahora son capaces de producir items a partir de items, tienen la capacidad de comerciar con las naves "trader" y eventualmente van a poseer un sistema de comunicación para hacer del docking algo más realista (Algo así como tienen los aeropuertos acá en la Tierra).
De todas formas, a través del menú contextual pueden tener acceso a la información de la producción de recursos (Pueden ver como comercian los "traders") y en stations.xml pueden crear cualquier tipo de estación y hacerla que comercie cualquier tipo de recursos :D
La carga del universe.xml ahora tiene en cuenta un factor más:
Al meter nodos de XML dentro de otros nodos, automáticamente se calcula la velocidad instantánea con la que tienen que aparecer para orbitar el cuerpo definido en el nodo padre.
Por si no se entendió, les dejo un ejemplo:
<star name="Sol" x="0.0" y="0.0" radius="10000" density="1500" h="100" hspeed="0.0" vspeed="0.0" centercolora="255" centercolorr="240" centercolorg="95" centercolorb="20" surfacecolora="255" surfacecolorr="250" surfacecolorg="35" surfacecolorb="5">
<ship name="Rabbit I" model="fighter" x="40000.0" y="0.0" hspeed="0.0" vspeed="0.0" rotation="0.000000">
</ship>
</star>
Al hacer esto, Rabbit I va a aparecer orbitando a Sol.
Esto es recursivo, haciendo que un nodo dentro de un nodo dentro de otro nodo funcione como un sistema Sol-Tierra-Luna. Esto es realmente cómodo para describir sistemas solares con lunas :)
Ahora el jugador esta ligado a un "piloto" genérico, que mantiene información como el dinero que lleva acumulado o el nombre que decidió ponerse. Por ahora no tiene mucho sentido, pero es mucho muy importante a mediano plazo tener algo así implementado.
También construí un autopiloto que va de la mano del nuevo sistema de targeting, haciendo muchísimo más fácil el orbitar un cuerpo o emparejar vectores de velocidad para mantener una posición relativa a un cuerpo de forma automática (Respectivamente F1 y F2 después de clickear un objeto o elegirlo apretando T las veces que sea necesario).
El autopiloto también tiene un comportamiento más: A través del menú contextual en cualquier punto vacío del espacio, es posible ordenarle a la propia nave a moverse hacia ese punto esquivando obstáculos.
Para esta versión, falta actualizar la documentación bilingüe para incluir todos los cambios (Lo cual es un garrón :D), testear un poco más el algoritmo de evasión de colisiones, empujar el cuchunflo(tm) hasta que haga "click" y armar un universo interesante conteniendo las nuevas mejoras. Si no está mañana, está pasado =)
Para la próxima versión, planeo finalizar el sistema de comercio con las estaciones espaciales, agregar un sistema de waypoints para las IAs (Permitiendo cursos de dockeo predefinidos con las estaciones), puntos de dockeo con las estaciones y una mejor abstracción en la comunicación con el jugador... porque si no lo hago LAN el juego nunca va a ser realmente divertido :p
De todas formas, con un poco de intervención divina, no volveré a tener un teclado entre mis atléticos y pulidos dedos hasta después de mi cumpleaños (Es el 18 de enero BTW, manden regalos xD).
Si esto sucede, la 0.56 va a aparecer en febrero recién. Después no digan que no les avisé :p
También estoy pensando seriamente en liberar versiones más seguido (Una semana, 10 días) con menos cambios. Me rompe MUCHO tener que reescribir la documentación entera mes a mes u_u
Me gustaría saber que piensan de estructuras que descansen en la circunferencia de los planetas (Torretas, pads de aterrizaje para comercio, poblaciones para bombardear desde el espacio, elevadores espaciales que conecten a anillos orbitales como los de Larry Niven o Arthur Clarke, etc, etc, etc ad nauseam xD).
Y ya que estamos, acepto feedback como regalo de navidad.
La última versión del LS fue bajada 314 veces según el contador loco este, media pila señores/damas :p
Me voy a dormir, un saludo grande a todos y que pasen unas muy ebrias fiestas (A mi me quieren hacer cantar karaoke, así que voy a tomar la autopista del ridículo hasta la salida del ananá fizz, ahí bajo a la colectora del coma etílico y termino empotrado en el barco pirata del Parque de la Costa con muchas ganas de que la tierra me trague íntegro y de un saque xD).


