[Juego] Legion3D, eficiencia en Bennu 3D para juego de estrategia

Started by Windgate, November 08, 2009, 02:07:42 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Oh, pensaba que Bennu 3D era ajeno al SVN, gracias Drumpi.

También tenía una consulta que me temo que sólo l1nk3rn3l podría decirme... Una vez añades un modelo a una lista de colisiones, ¿Hay alguna forma de eliminarlo de ella? ¿O al eliminar el modelo se elimina automáticamente de las listas de colisiones? ¿O ninguna de las 2 cosas xD?

Tengo un error de ejecución por ahí y creo que la eliminación de modelos que permanecen en la lista de colisiones podría ser el problema...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

l1nk3rn3l

debe ser que tienes eliminado 2 veces en el mismo codigo del modelo..

modelremove solo usalo una vez... por ahi mire en onexit de tu codigo ,
esta genial para robartelo... el juego...

Windgate

ARG!!!

Lo comprobaré... Creo que tienes razón, algunas veces hago un remove al matar al droide, pero el ONEXIT por su parte hace el otro remove... En la versión que tengo aquí subida no se produce el error de ejecución pero puede que el problema tenga que ver con lo que dices.

En cualquier caso, ¿Sabrías decirme si el remove elimina el modelo de las listas de colisiones?

Por supuesto el juego róbalo y haz lo que quieras de él, no hay proyecto que no comporta al 101%, incluso me pena el tema del concurso por no poder dejar compartido un proyecto desde el principio ;)

Karma++ por tu supervisión, aclaración y forma de ser l1nk
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Windgate: Ah, pensé que habías dicho Bennu a secas, el Bennu 3d dudo que esté en el SVN, eso lo sabe l1nk3rn3l y los que lo han hecho.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Wind, un jueguecico tipo aoe (en vista de pájaro) con estos androides (y en varios niveles, por ejemplo en tres colores diferentes), poder seleccionarlos con el ratón uno a uno o en grupo, darles órdener de mover aqui o atacar allá y usando la mod_espeak para que digan "si señor", "como mande", "a sus órdenes", "entendido", etc molaría taco y como misión pues destruir una base enemiga, no muy grande :D.
Puedes usar los modificadores de voz para caracterizar a cada uno de los robots de forma independiente para cada color y todo.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Gran idea DCelso, no lo había pensado xDDD

La idea es eso, hacer un juego de estrategia, por ahora estoy trabajando en el tablero de juego y lo primero que necesitaba es un grid para comprobar que cada droide se encuentra en la celda correcta y ese tipo de cosas. Había empezado a hacer un grid con "balizas" en 3D, pero había 100x100 balizas y consumía más el grid que el juego en sí xD

Así que he hecho un grid en 2D, que a partir de la posición 3D de las balizas obtiene la posición 2D que le corresponde en pantalla y si es visible en pantalla pone un dibujito en la GUI. El rendimiento es :-*

Aquí la captura del grid:


EDIT: Por si alguien puede ayudarme: Actualmente cuando el cursor se posiciona sobre un modelo obtiene su identificador de modelo, pero necesito obtener el identificador de proceso asociado al modelo. La solución fácil es tener un vector de pares id_modelo/id_proceso, la solución buena es tener una lista dinámica y la solución óptima tener un árbol...

¿Alguien puede aportar algo en ese sentido?
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

l1nk3rn3l

podrias tener un vector de n datos y ordenado por el campo idmodelo..

asi buscar con quicksort o otra busqueda sera eficiente..
pero debe estar ordenado... cada vez que se adiciona un elemento..


struct modelos[100]
  idmodelo;
  idproceso;
 
end;

la otra solucion seria tener un chequeo en el proceso del modelo
y tendria una variable local llamada idmodelo

entonces el chekaria si idmodelo(vlocal) = modeloseleccionado(vglobal) ...
entonces usaria el id del proceso para notificarlo al proceso ppal... mediante
una variable global llamada  idprocesoseleccionado...

seria ineficiente esta 2da solucion ya que cada proceso , chekaria si la variable
corresponde , etc etc-..


no se me ocurre nada + ..

aunque lo que planteas es muy interesante asi que adicionare una variable
nueva a modelos , algo asi como el campo TAG en los formularios de visualbasic
asi guardabas informacion personal en cualquier objeto de un formulario,
esto seria ideal para los modelos asi manualmente guardarias el idproceso en este caso..

Windgate

Un vector ordenado para hacer búsqueda dicotómica, un árbol dinámico para tener coste log(n) en la búsqueda, incluso he pensado en hacer un hasing, que es la solución "tosca" y eficiente... Pero ninguna solución me satisface a largo plazo.

Sería interesante lo que dices link, que el modelo cargado tuviese un TAG con la ID del proceso que lo ha cargado. Por ejemplo con M8E_GETLOADERID ( ) aplicado sobre el identificador de modelo te devuelve el identificador de proceso que lo cargó.

Eso sería :-* :-* :-*

En cuanto al Bennu 3D recompilado para las nuevas DLL de Bennu, hoy he echo un módulo para que mis soldaditos hablen así cuando los selecciono:

string voces [ 8 ] = ( "Sí, señor." , "A sus órdenes, señor." , "Oki doki." , "Cerrado y cargado." ,
"Preparado para la acción." , "Búsqueda y destrucción." , "Morid bastardos." , "No me toques los droid." );


Pero he descubierto que mod_espeak sólo funciona con las nuevas DLL de Bennu por lo que es actualmente incompatible con Bennu 3D :'(

Si puedo ayudarte en algo o si puedes pasarnos parte del trabajo para recompilarlo y/o pasarlo a una .so de Linux... Estoy totalmente absorbido con Bennu 3D, necesito más chicha :-X

También añado un truquito que os puede facilitar la obtención de modelos a partir del ID del proceso (Lo contrario a lo que propongo): Como MUCHOS procesos tienen un único modelo y su textura asociada, yo uso file para cargar el modelo y graph para cargar la textura (Tiene lógica ;)), incluso utilizo y para guardar su rotación en el eje y ya que la mayoría de los modelos sólo rotan en ese eje ;D

EDIT: Aquí os dejo la descarga de un programa de prueba para probar las voces de los droides, es cachondo :D

DESCARGAR: http://trinit.es/DescargaDirecta/Bennu3D/Legion3D/Prueba%20Espeak%20Legion3D.zip

EDIT 2: Y aquí la nueva versión del juego en 3D, sobre todo mejoras de eficiencia y nuevos módulos para el grid y obtener ids de proceso a partir de ids de modelo con el cursor, también he limpiado código y aligerado la descarga de 19 a 12Mb:

DESCARGAR: http://trinit.es/DescargaDirecta/Bennu3D/Legion3D/Legion3D%200.0.2.zip

EDIT 3: He implementado una forma "ineficiente" de obtener el ID de proceso asociado a un modelo, y a partir de él obtengo su posición y gracias a ello puedo poner sobre él un cursor de selección, entre otras muchas posibilidades que dejo para mañana:


Ésto dará juego, creedme...

EDIT 4: Mejora de rendimiento ENORME con la grid, es mejor posicionar TODOS los nuevos elementos de la grid a cada FRAME que destruirlos y crear sólo los necesarios.

EDIT 5: Versión nueva con la grid activa y eficiente, obtención de ids de procesos a partir de ids de modelo, selección de tropas y el selector se va cuando mueren, y el peso total se queda en 9Mb que es la mitad del peso inicial... Llevo +8 horas seguidas de droids, siento tanto edit pero aquí la última versión:

DESCARGA: http://trinit.es/DescargaDirecta/Bennu3D/Legion3D/Legion3D%200.0.3.zip

Así se ve el grid a la luz de la luna según mi zona horaria, observo la captura anterior y veo que el tiempo pasa... Despacico...:


PD: Mañana por la mañana tenía día libre... ¿Qué haré el fin de semana?... Bennu es delito contra la salud pública :-[
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DjSonyk

Esta muy bueno Will Gates,digo Wingate... ^^ :P .... solo una cosa el hacer click en cualquier lugar que no sea un droide y de error con salida del juego ,¿es cosa mia o es la salida rapida?Lo digo porque me quedo con las ganas cada vez que quiero apuntar a un droide y se me rompe... :(

Windgate

Es un error que ya tengo corregido ;)

Mañana subo nueva versión, con IA para que los droides busquen objetivo dentro de un radio :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Prg

QuotePero he descubierto que mod_espeak sólo funciona con las nuevas DLL de Bennu por lo que es actualmente incompatible con Bennu 3D Llorar

creo que las nuevas librerías 3d corren bien con las nuevas de bennu, tengo instaladas en mi pc las nuevas (eso creo, a menos que me equivoque...) y corrí bien las librerías, intenta a ver si funciona :)

¿cómo le das un aspecto tan suave a la textura del piso?, se ve genial :) karma++ amigo
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

Con la r110 todo funciona a la perfección, ya lo tengo "migrado" xD

Quote¿cómo le das un aspecto tan suave a la textura del piso?

El terreno está escalado a 100 veces su tamaño, creo que al hacer eso la textura se escala con algún algoritmo que "difumina" y suaviza. Además la textura es de 512x256, que es "bastante" calidad.

Si quieres texturas y mapas de alturas para el terreno en la primera/segunda versión que colgué había 10 de cada, todas las texturas muy buenas, me las pasó un amigo que las usa para hacer diseño 3D realista de escenas.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Windgate

Tremendísimas novedades, el juego ya tiene IA y los droides detectan objetivos dentro de un radio determinado del "tablero".

Hay algún bug puntual que tengo que pulir, pero con 6 legiones de 36 droides en distintos puntos del escenario el combate se desata con bastante inteligencia, ya que detectan objetivos en sus cercanías. He tenido que implementar un algoritmo de recorrido de una matriz en espiral, pensé en pediros ayuda pero al final lo resolví yo sólo (Ver /prg/droide.prg al final del módulo):P

También he metido un algoritmo sencillito para aumentar los tonos azules al amanecer y los rojos al atardecer, esto último lo he resuelto con un seno (Ver /prg/tiempo.prg)

Aquí os dejo la descarga para que me hagáis el favor de hacer pruebas, pide mucho PC ya que llega a haber 1000+ modelos 3D activos y el grid suponen 10000 elementos 2D en la GUI, aún así la eficiencia no me disgusta en absoluto.

DESCARGA: http://trinit.es/DescargaDirecta/Bennu3D/Legion3D/Legion3D%200.1.2.zip

EDIT: Aquí os dejo las capturas con la nueva IA, la eficiencia ha aumentado mucho, soporta combates de 900 vs 900 droides, a muy bajo FPS, pero voy mejorando la eficiencia y ahorrando cálculos, ahora mismo me limita la CPU

Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

lastima que no me funciona con linux, pero se ve de putisima madre...

ahora, esto me recuerda que hay un juego como este... que es una demo de un motor 3d... donde son 4 bandos de robots, y uno maneja 1 de los bandos... y los mismos se van eliminando 1 a 1, hasta que queda un bando ganador... muy bueno...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2