[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

Me falta lo de controlar a uno de los bandos. Es que tengo otras prioridades como hacer diferentes tipos de droide, tengo preparadas estadísticas para que tengan diferente rango de ataque, latencia de disparo, vida, daño, etc. Y miles de cosas más, estoy disfrutando este proyecto como nunca había disfrutado con Bennu.

No conocía el proyecto del que hablas, pero mi idea es hacer algo parecido.

Debo añadir que la eficiencia es un punto a mejorar y hago todo lo posible, si alguien tiene un PC del que se sienta "orgulloso" y quiera ponerlo a prueba que me pida una versión con 1500 vs 1500 droides que tengo por aquí, funciona a la perfección pero mi portátil se ve limitado por CPU el pobre.

EDIT: Yo soy partidario de dejar al menos 10Gb para una partición de Linux en cada PC, pero en tu caso Splinter también soy partidario de dejar al menos 10Gb para una partición de Windows en cada PC. Windows es una mierda, vale, pero incluso Bennu 3D está condicionado por ese maldito SO...
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

bueno no he visto los fuentes pero se puede optimizar asi:

no dedicarle todo el cpu a todos al tiempo
hay una tecnica que se llama time slicing o partir tiempos..

puedes hacer una variable global que se guarden el tiempo en milisegundos...

cada proceso al iniciar se reparte su tiempo al azar ...

asi en cada frame solo unos se ejecutan y otros no ..

un seudocodigo:

proceso lll(tiempoasignado)

  loop
     si tiempo(globalvar) >= tiempo(localvar)+tiempoasignado(localvar)
         ... ejecutar IA 

          ... guardar tiempo(localvar) con nuevo tiempo(globalvar)
     end 
end

end


y para los wav solo ejecuta iniciando lo de modspeak y usa
los mismos ids generados de los wav en todo el codigo..
me imagino que eso haces?

estas ideas pueden ser utiles si te das cuenta que
fenix puede ejecutar  varios frame en un segundo ..!!!

asi el ususario no sabra como repartes el tiempo!!!!

es usado por los juegos de hoy en dia (time slicing ) ya que no tenemos multicore!!

Windgate

Buena idea l1nk3rn3l, a ver si lo pongo en práctica, karma++

Aquí dejo versión nueva, he implementado "objetivo de objetivo", para que al buscar objetivos, si se observa que un aliado ya tiene objetivo se toma ese y se evita seguir chequeando... Es más realista y eficiente, aunque la ejecución cambia mucho...

También he puesto distintas estadísticas de armas y de droides, ahora según el arma tienen distinto alcance, daño, etc. Y también hay droides más rápidos y lentos. También he mejorado el movimiento del droide, que ahora avanza hacia el objetivo sin "temblar".

También he aumentado el tamaño de los droides, ya que eran minúsculos.

Ahora mismo estoy implementando un disparo que en lugar de ir hacia el objetivo colisiona con lo primero que pilla, incluso puede hacerse fuego amigo o no.

Y lo que me queda por hacer xD

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

PD: ¿Alguien tiene modelos de misiles y granadas para el lanzagrandas y lanzamisiles de los droides? La bolita roja no queda bien ya :(

EDIT: Versión de prueba, la cámara desde arriba y mejoras de eficiencia OBESAS, sólo para que podáis observar la detección de objetivos, os estimulará:

http://trinit.es/DescargaDirecta/Bennu3D/Legion3D/Legion3D%200.1.4.zip

Aquí capturas:





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

Nueva versión, nuevas mejoras de eficiencia, eliminación de parámetros, variables y LOADs innecesario... Ahora los disparos explotan y lanzan humo al impactar, mayor explosión y más humo según el tamaño del disparo, los del lanzamisiles son bestias xD

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

Ahora estoy pillando modelos de misiles, ya que muchos disparos requieren un modelo propio, el misil llevará su colita de humo ::)

Veo que Google SketchUp tiene modelos MUY interesantes, pero para exportarlos a .3ds hay que comprar la versió PRO que vale 500$ :o

Así que estoy echando un vistazo a "otras posibilidades" como las que ofrecen aquí: http://www.taringa.net/posts/downloads/1809330/Google-Sketchup-Pro-7-+-Crack-+-Ruby-PlugIns.html

EDIT: Tengo lista la versión 0.2.0 con 7 escuadrones de droides de distintos equipos y cada uno de ellos con un arma, estoy puliendo algún detalle, la subo en un rato.
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

Juer, me voy dos días y montas una verbena que riete tu de los San Fermines :D :D :D
Está quedando de lujo... por lo que intuyo, es que hay muchas capturas que las has hecho de noche y sin visor nocturno (fade(0,100,0) ;D) y no se ve un gato negro en un pozo de petroleo :D
Por cierto ¿qué máquina tienes tu? no se lo que llamas estar "orgulloso", pero yo lo estoy para el trote que le meto ;)
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

El fin de emana programo de noche, por eso las capturas salen así de oscuras. No uso fade, la niebla y la iluminación se calculan en función de la fecha del sistema, sólo uso fade para los relámpagos, pero no se usan actualmente.

Tengo un portátil 2 cores 2Ghz, 2Gb RAM a 666Mhz y 256Mb de vídeo.

Para miles de droides no puedo con él, pero para 100-200 droides la cosa va sin problemas.
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

No has pillado la ironía del FADE ;D pónsela a un juego tal como te la he escrito, a ver qué pasa :P

Por lo que comentas, no tengo un PC del que estar "orgulloso", mi equipo es más o menos el mismo (bueno, 2400+ MHz por core con 1GB) pero de sobremesa, pero hasta el momento no he conseguido ponerlo a tope nunca (no tengo juegos de ámplios requisitos, sólo algún renderizado con brillo ocasional :P)
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

l1nk3rn3l


Windgate

Entiendo... Pero todos los modelos que uso son md2, intentaré sacarle alguna utilidad exportándolos a 3ds en formato estático y luego haciendo crunching a ver qué sale. Gracias 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


Seifer3x

Acabo de probarlo y es fantástico. Una idea aproximada de lo que se puede hacer con bennu3D.
Me gusta la IA y la selección de cada droide esta bien implementada funciona muy bien.
El único pero es el rendimiento. No he pasado de 6fps.
¿Podrías sacar una versión con menos cantidad de droides?

Windgate

Cielos, pensaba que ya había subido la versión con 7 equipos de droides (pequeños) y cada uno con un arma distinta. Suelen ganar siempre los francotiradores xD

http://trinit.es/DescargaDirecta/Bennu3D/Legion3D/Legion3D 0.2.0.zip

Puedes cambiar la cantidad de droides por escuadrón si en /prg/const.prg cambias el valor de las constantes _ESCUADRON_X y _ESCUADRON_Z

Ahora mismo tengo un error de ejecución sospechoso... Si alguien prueba la nueva versión y le sucede puede aportar algo al respecto, se lo agradecería mucho.
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

HEMOS revisado el codigo , tenemos varias sugerencias:

usar modelos estaticos cuando sean demasiados..

no usar todo el procesador en todos al tiempo te adjuntamos 2 borradores de IA
que pueden servir

logramos obtener 20fps con 600 modelos estaticos ..

http://www.megaupload.com/?d=149UU51B


USAR UN VECTOR para reutilizar los disparos..
EJEMPLO :

     al comienzo cargar los modelos del disparo
   struct
     modelo[n]
     ocupado
   end

     cuando hay un disparo usar una variable disparo que recorra
     el vector , iddisparo++  si la posicion esta ocupada entonces no dispara ese intento
cuando llega iddisparo al final del vector otra vez en cero.

     se le asigna un animador para que la bala recorra sola la trayectoria
M8E_ADDANIMLINE

     cuando hay colision se remueve el animador de la bala
M8E_MODELREMOVEANIM(int model)


    de pronto adicionarle un animador que se destruya cuando pase un determinado tiempo , ejemplo 1s
M8E_ADDANIMDELETE(int model,int timems)


pronto  habra una funcion clone.. para clonar modelos