Particulas, SpriteBatch, no funciona la lluvia. Ayuda por favor

recox

Argentum Online Libre
Hola, hace unos meses se metio en el proyecto de ao-libre una de las mejoras que hay en este foro sobre carga de texturas dinamicas, aqui les dejo el PR que tiene toda la informacion necesaria para entender que se puso, el post y la fuente del codigo.


Y luego de esto, se pusieron las particulas ORE (si no me equivoco, ya que la liberacion de recursos de IAO 1.6.5 trae un monton de estas)

El problema esta en que lamentablemente dejo de funcionar la lluvia por esto. Estoy tratando de poder volver a ponerla (mi escaso conocimiento en motores graficos tampoco es de ayuda) y github no me deja hacer un revert de ese PR (para al menos ver si haciendo eso funciona) ya que hay mucho trabajo por encima de esto.


Personalmente hice 2 intentos para tratar de recuperar la lluvia (Con mi escaso conocimiento en DX8 y motores graficos)


1- Trate de implementar nuevamente las particulas VBGore en un PR limpio como muestro aqui:

Pero lamentablemente el cliente explota al llover


2- Trate de revertir todo tal cual estaba antes de implementar el spritebatch en ese PR, pero hay mas errores que nunca.


Hay alguien que por favor nos pueda dar una mano con esto, ya sea haciendo un revert de lo que haya que hacer en cuanto al engine e implementar algo clasico pero estable o por que no arreglar el fallo que esta provocando esto o mejor aun haciendo una mejor implementacion de estos cambios propuestos..

Yo sinceramente estoy hace como 10 dias intentando sin exito, lamentablemente.

Gracias a este error en particular implementamos en la organizacion revisiones de los PRS de al menos una persona de la organizacion antes de que pueda ser mergeado al master para que el codigo este mas sano, si quieren ser parte de la revision de PRS no duden en decir que se les dara permisos al repo, pero esta es otra historia.

Desde ya gracias.
 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador
Moderador de Tecnología
¿Podrías explicar qué sucede específicamente cuando la lluvia debería aparecer? ¿Estás utilizando la lluvia clásica de Argentum? ¿No es una alternativa utilizar lluvia con partículas?

¡Saludos!

EDIT: off: Acabo de leer el change-log, en lo personal, deberían dejar al usuario elegir entre Software, Hardware o Mixed, algunos drívers viejos de videos integradas con ciertos problemas iban mejor con modo Software, y algunos en Mixed y/o Hardware directamente lanzaban excepciones y crasheaba la aplicación.
 

Franco77

THUSING
Buenas!! Yo lidie con el mismo problema, al usar spritebatch se me rompia la lluvia o todo lo que tenía que ver con partículas.. mándame mp o hablame al discord así te paso mi solución... Porque soy tan colgado que me voy a olvidar
 

recox

Argentum Online Libre
¿Podrías explicar qué sucede específicamente cuando la lluvia debería aparecer? ¿Estás utilizando la lluvia clásica de Argentum? ¿No es una alternativa utilizar lluvia con partículas?

¡Saludos!

EDIT: off: Acabo de leer el change-log, en lo personal, deberían dejar al usuario elegir entre Software, Hardware o Mixed, algunos drívers viejos de videos integradas con ciertos problemas iban mejor con modo Software, y algunos en Mixed y/o Hardware directamente lanzaban excepciones y crasheaba la aplicación.
Mañana subo el error que tira con poner las particulas vbgore ya que voy a estar haciendo un laburo y ando lejos de mi compu con windows.

Sinceramente no tengo ninguna preferencia si son las ORE o las VBGore, o por que no el sistema clasico que decis vos de lluvia, al menos desde la version que empezamos con el proyecto usa particulas la lluvia (aunque lo ideal seria tener una sola cosa para manejar estas cuestiones y que la misma funcione bien.) pero me gustaria poder dejar esto funcionando asi cualquiera que agarre esto pueda agregar climas (personalmente tengo ganas de jugar con estos efectos y tirar remolinos de arena en desiertos) y que funcione la lluvia normal.

Algo que aun no probe (por que no se hacerlo realmente, tendria que jugar un poco mas con las particulas) es poner la lluvia de nuevo como muestro en el primer PR, pero usando las particulas ORE en ves de las VBGore

Me comentaron que con esta opcion pueden bajar mucho los fps por que no tienen muy bien rendimiento, pero habria que probar cuanto baja realmente.


Buenas!! Yo lidie con el mismo problema, al usar spritebatch se me rompia la lluvia o todo lo que tenía que ver con partículas.. mándame mp o hablame al discord así te paso mi solución... Porque soy tan colgado que me voy a olvidar

Dale ahi te hable a ver si lo podemos solucionar. Muchas gracias de antemano.
 

recox

Argentum Online Libre
Todo bien con el trabajo de mierda que hicieron el con alpha y el angulo en el batch del pobre wolfa pero toma, haceme el favorcito


https://pastebin.com/B6gvadN1

besis


off: Las particulas ORE con el batch andan 100 mejor que las del gore. Besis x 2


Primero que nada muchas gracias, si bien seguro hay un monton que cambiar en el SpriteBatch ahora al menos se mejoro un poco arreglando este error: https://github.com/ao-libre/ao-server/issues/198 y al menos no explota cuando trato de poner la lluvia con vbGore (aunque aun no pude renderizarla)

Agregue esto al changelog.
* 02/12/2019: Gracias a Dr. Miqueas150 por la mejora en el manejo de Alpha y Angle. (jopiortiz)
* 02/12/2019: Gracias a @FrankoH298 por el fix de renderizado de sprites. (jopiortiz)

PR agregando estos cambios:


Pregunta.
Si bien estoy tratando de volver a poner la lluvia que estaba anteriormente con vbGore, como se puede poner un efecto de particulas en todo el render con las particulas ORE? Estoy tratando de encontrarle la vuelta pero yo solo veo estas funciones:


Ya que si el rendimiento de las mismas es mejor con lo implementado, seria lo ideal aparte de no tener dos modulos que hacen lo mismo, renderizar particulas.

Estoy buscando info sobre esto y no encuentro, me baje algunos clientes del foro para ver como se renderiza y los que me baje usan o imagenes o las vbGore.
 

Dr. Miqueas150

The Prophet
Ex-Staff
lo que podes hacer es

lluvia


lluvia = generate partiucla ( numero de la particula, coordenada X ficticia, coordenada y ficiticia, vida)


render screen


if lluvia > 0 then
Particle_render lluvia, esto va en pixeles, podes meterle que se yo -50 ,-50 depende de como este la particula creada en el archivo
end if

Eviten la linea de la particula que la guarda ene l mapdata, ya que usan una variable para eso.

cuando termina la lluvia.


if lluvia > 0 then
particula destruir lluvia
lluvia = 0
end if

chau
 

recox

Argentum Online Libre
lo que podes hacer es

lluvia


lluvia = generate partiucla ( numero de la particula, coordenada X ficticia, coordenada y ficiticia, vida)


render screen


if lluvia > 0 then
Particle_render lluvia, esto va en pixeles, podes meterle que se yo -50 ,-50 depende de como este la particula creada en el archivo
end if

Eviten la linea de la particula que la guarda ene l mapdata, ya que usan una variable para eso.

cuando termina la lluvia.


if lluvia > 0 then
particula destruir lluvia
lluvia = 0
end if

chau
Me tome un tiempito para volver a esto ya que ando en cambio de laburo y ando a mil
Estuve otro par de horas haciendo cosas con el Argentum y con este tema de particulas aun sin exito.

Teniendo esta particula:

Código:
[8]
Name=Lluvia
NumOfParticles=200
X1=-300
Y1=0
X2=300
Y2=0
Angle=0
VecX1=0
VecX2=0
VecY1=100
VecY2=200
Life1=25
Life2=40
Friction=12
Spin=1
Spin_SpeedL=1
Spin_SpeedH=1
Grav_Strength=2
Bounce_Strength=-5
AlphaBlend=1
Gravity=0
XMove=1
YMove=0
move_x1=0
move_x2=75
move_y1=0
move_y2=0
Radio=0
life_counter=-1
Speed= .5
resize=-1
rx=1
ry=1
NumGrhs=1
Grh_List=25566,
ColorSet1=255,127,128
ColorSet2=255,255,255
ColorSet3=255,127,117
ColorSet4=255,255,255



Basicamente lo unico que pude hacer es renderizar la lluvia si la hardcodeo en un punto X del mapa como en la siguiente funcion:

'8 es el numero de la particula que mostre anteriormente
Call General_Particle_Create(8, 50, 50)

Si te fijas en estos cambios hay una funcion Load_Map_Particles que carga particulas por mapa.

y tengo de resultado algo asi:


(mas adelante me gustaria saber como puedo modificar estas particulas ya que busque en internet pero no encontre informacion al respecto)


Si quiero tratar de renderizar la lluvia desde el RenderScreen en el archivo TileEngine no puedo ya que no encuentro una funcion en el archivo mDx8_Particulas para renderizar una simple particula en todo el render.

Código:
    If ClientSetup.ParticleEngine Then
        'Weather Update & Render - Aca se renderiza la lluvia, nieve, etc.
        If bRain Then
            'Call mDx8_Particulas.General_Char_Particle_Create(8, UserCharIndex)
            Call General_Particle_Create(8, X, Y)

        End If
    End If

Trate con algo asi pero sin suerte.

General_Char_Particle_Create trate de renderizar sobre el pj, pero esto no funciona
General_Particle_Create trate de renderizar por cada punto que camino del mapa, una locura casi explota todo.

pero como dije antes no encuentro una funcion en mDx8_Particulas para renderizar la particula deseada en todo el render sin importar la posicion.


Aca dejo este WIP en un PR para que puedas ver que cambie.

Si bien me gustaria poder solucionar este problema para ya olvidarme de esto y no renegar mas y que la lluvia este de una buena ves, sin embargo me gustaria poder leer un poco mas acerca de esto, ya que busco en internet PARTICULAS ORE y encuentro muy poca informacion como para entender todo esto.

Desde ya gracias.
 
Última edición:

Cr3p-1

6 FEET DEEP
Fíjate en el sourcecode de iao. En el módulo de climas y fíjate como hace para renderizarla.
Clsmeteorologic ahí creo que es por número de clima mandado desde el sv al cl. Para que renderice partículas que estan metidas adentro de un case o un enum.
Bueno cuestión que hay un sub separado por cases( si mal no recuerdo hace un año y medio no toco la pc se me rompio)
Tiene las llamadas a las funciones correspondientes para renderizar el número de partícula. Fíjate si esas funciones te sirve o es lo que buscas para hacer que te funque.

Pd: Si yo tuviera la pc, te paso todo por acá loco.
 
Última edición:

juanjo_22

Destructor Lvl 1
estoy leyendo el codigo que has subido y has probado en el
Código:
LoadWeatherParticles
en el case eWeather.rain que tienes directamente llamar al renderizado de particulas
Código:
Call mDx8_Particulas.Particle_Group_Render(8, 250, 0)

yo en el proyecto que tenia arregle la lluvia llamando en el map_render (o renderscreen) esto
Código:
'Rendering of meteorologic particles
    If meteo_particle <> 0 Then
        'Screen positions were hardcoded by now
        view_x = 250
        view_y = 0
        Call Particle_Group_Render(meteo_particle, view_x, view_y)
    End If
 

recox

Argentum Online Libre
Listo ahora funciona :) muchisimas gracias a todos, en especial a @Dr. Miqueas150 por toda la ayuda.

unknown.png


Este es el Pull Request con el arreglo por si ven algo para mejorar
Post automatically merged:


Post automatically merged:

Fíjate en el sourcecode de iao. En el módulo de climas y fíjate como hace para renderizarla.
Clsmeteorologic ahí creo que es por número de clima mandado desde el sv al cl. Para que renderice partículas que estan metidas adentro de un case o un enum.
Bueno cuestión que hay un sub separado por cases( si mal no recuerdo hace un año y medio no toco la pc se me rompio)
Tiene las llamadas a las funciones correspondientes para renderizar el número de partícula. Fíjate si esas funciones te sirve o es lo que buscas para hacer que te funque.

Pd: Si yo tuviera la pc, te paso todo por acá loco.
Aunque ya se soluciono el problema, me interesa para chusmear ese codigo, es el IAO CLON el que decis vos?

estoy leyendo el codigo que has subido y has probado en el
Código:
LoadWeatherParticles
en el case eWeather.rain que tienes directamente llamar al renderizado de particulas
Código:
Call mDx8_Particulas.Particle_Group_Render(8, 250, 0)

yo en el proyecto que tenia arregle la lluvia llamando en el map_render (o renderscreen) esto
Código:
'Rendering of meteorologic particles
    If meteo_particle <> 0 Then
        'Screen positions were hardcoded by now
        view_x = 250
        view_y = 0
        Call Particle_Group_Render(meteo_particle, view_x, view_y)
    End If

Se ve que justo leiste el branch/pr cuando justo logre solucionar esto ya que el Enum eWeather y la funcion LoadWeatherParticles las cree cuando le habia encontrado la vuelta para dejarlo mas "prolijo" y "entendible"

Muchas gracias por la ayuda :)
 
Última edición:

Cr3p-1

6 FEET DEEP
Listo ahora funciona :) muchisimas gracias a todos, en especial a @Dr. Miqueas150 por toda la ayuda.

unknown.png


Este es el Pull Request con el arreglo por si ven algo para mejorar
Post automatically merged:


Post automatically merged:


Aunque ya se soluciono el problema, me interesa para chusmear ese codigo, es el IAO CLON el que decis vos?
https://www.4shared.com/file/13tNecPG/2006-12-04-IAO-client-13-src.html

Este recox su sourcecode original. Fíjate cls meteorologic.
Yo me atane varias cosas para testear. Como su engine de sonido y climas. (Me faltó mandar los datos del sv al cl) Hasta los nombres del mapa que se desvamecen en el render pero en el sourcecode del 1.4 acá también está pero dudo que tenga desvanecimiento. Fue un dolor de huevos adaptar cosas en ese tiempo ya que para ese entonces mis conocimientos eran escasos.
Te dejo el del 1.4
https://www.4shared.com/file/IB5zDR12/2006-12-04-IAO-client-14-src.html
 
Última edición:
Arriba