Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Hokutoy on May 21, 2010, 10:42:16 AM

Title: Efecto Lupa?
Post by: Hokutoy on May 21, 2010, 10:42:16 AM
Buenas!
Ayer estaba jugando un rato al típico juego flash de los snipers donde haciendo zoom sobre un escenario te dedicabas a hacer headshots y me surgió la duda...
Si quisiera hacer un minijuego en Bennu de ese estilo como se tenfría que hacer el efecto zoom de la mirilla para que agrandase lo que se viera por ella (Background + procesos de enemigos o parte de ellos)?
Me suena a ver visto hace tiempo un ejemplo de algo parecido... pero no lo encuentro.
Hay alguna manera "facil" de hacerlo? O cúal sería su logica (duplicar el tamaño a nivel de pixel o algo así?)

Gracias!
Title: Re: Efecto Lupa?
Post by: La momia que fuma on May 21, 2010, 04:47:13 PM
Había hecho algún experimento en su dia con eso...a ver de memoria que te se decir (Porque el codigo a saber donde lo metí)

Basicamente es cosa de usar map_xput y usando el parametro size para agrandarlo pegarlo todo en el grafico de la lupa...con un poco de arte en las coordenadas que metas haras zoom en la zona que quieras, lo que no quepa en el grafico de la lupa ya queda descartado automaticamente.

En mis pruebas simplemente hacía map_xput del grafico del fondo de pantalla, pero claro, eso no valdría para capturar una pantalla real con sus sprites, scrolls, etc, pero con get_screen supongo que se podría hacer...(Ten en cuenta que debes ocultar "fuera de frame" antes del get_screen cosas que no quieras que salgan en el zoom, como marcadores, o la propia lupa, por ejemplo)

Lo que ya no supe hacer es quitarle la forma cuadrada a la lupa (Quizá un for que recorra el grafico poniendole pixels transparentes, pero quiza sería muy lento...)
Title: Re: Efecto Lupa?
Post by: Drumpi on May 21, 2010, 04:48:32 PM
Hombre, flash tiene la ventaja de usar gráficos vectoriales, por lo que hacer un zoom no afecta (demasiado) a la calidad gráfica. En bennu sólo contamos con size y eso va a pixelar mucho la imagen, deberías poder contar con los mismos gráficos en dos tamaños o aplicar size a los que se ven en el juego normal para reducirlos.
Luego podrías usar regiones para trabajar con ello, pero dado que la mirilla no es cuadrada puede que haya problemas, y la mejor solución pasase por montarse un sistema com map_put_pixel... o algo si va s ausar varios procesos.
Lo cierto es que es una cosa peliaguda, el tema de regiones no cuadradas (usando máscaras o no) es un tema sobre el que ya de ha debatido y para el que, de momento, no hay más solución que ingeniárselas con lo que hay :(

PD: bueno, Momia medio se me ha adelantado ^^U
Title: Re: Efecto Lupa?
Post by: SplinterGU on May 21, 2010, 04:52:32 PM
get_screen es el ultimo frame dibujado... sera un problema eso...
Title: Re: Efecto Lupa?
Post by: BoMbErLiNk on May 21, 2010, 05:23:37 PM
Aquí hay un ejemplo para hacer que la lupa sea circular :
http://forum.divsite.net/viewthread.php?tid=6248

Aunque creo que tomaba mucha cpu.  :P
Title: Re: Efecto Lupa?
Post by: SplinterGU on May 21, 2010, 05:31:54 PM
si, esa version tomaba mucha CPU, pero yo habia hecho una que le pase a theosk, que ocupaba muy, pero muy poca CPU.
Title: Re: Efecto Lupa?
Post by: Hokutoy on June 11, 2010, 10:03:45 AM
Me interesa. Alguna manera de recuperar el codigo?
Si a las buenas no puedo conseguir el efecto que quiero siempre puedo usar el "plan B"... al darle al boton del sniper hacer un zoom global a toda la pantalla y tapa la parte no visible con fondo negro menos la mirilla.
Lo malo... WIZ + sizes = problemas de rendimiento casi siempre.

Splinter, te pregunto desde la ignorancia, se puede hacer algo, a nivel tuyo, para poder mejorar mas aun el port de Bennu a Wiz  para conseguir mas rendimiento/frames en la wiz? Es una jodienda que el frameskip no fuincione como deba... sniff

Saludos
Title: Re: Efecto Lupa?
Post by: SplinterGU on June 11, 2010, 12:54:18 PM
a que te referis con que el frameskip no funciona?
Title: Re: Efecto Lupa?
Post by: BoMbErLiNk on June 11, 2010, 01:18:12 PM
El otro dia hice una especie de " camuflaje óptico " :
(http://www.bombergames.net/sorr/camuflaje.png)
(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.
Title: Re: Efecto Lupa?
Post by: Hokutoy on June 11, 2010, 01:46:35 PM
Quote from: BoMbErLiNk on June 11, 2010, 01:18:12 PM
El otro dia hice una especie de " camuflaje óptico " :
(http://www.bombergames.net/sorr/camuflaje.png)
(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.

Eso es exactamente lo que necesito... gracias por compartir!

Splinter lo del fameskrip en la wiz es algo muy raro... quizá alguien puede arrojar algo mas de luz sobre esto pero a mi me parece que si pones un frameskip de 3 siempre te hace el frameskip 3 aunque el rendimiento en esa parte del programa de para usar un frameskip 0... es decir no hace autoframeskip parece que el frameskip se quede fijo.
Es algo que he notado en todos mis juegos.

Saludos
Title: Re: Efecto Lupa?
Post by: SplinterGU on June 11, 2010, 02:04:21 PM
Quote from: BoMbErLiNk on June 11, 2010, 01:18:12 PM
El otro dia hice una especie de " camuflaje óptico " :
(http://www.bombergames.net/sorr/camuflaje.png)
(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.

y quien te dijo como hacerlo y quien te ayudo???
Title: Re: Efecto Lupa?
Post by: SplinterGU on June 11, 2010, 02:06:22 PM
Quote from: Hokutoy on June 11, 2010, 01:46:35 PM
Quote from: BoMbErLiNk on June 11, 2010, 01:18:12 PM
El otro dia hice una especie de " camuflaje óptico " :
(http://www.bombergames.net/sorr/camuflaje.png)
(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.

Eso es exactamente lo que necesito... gracias por compartir!

Splinter lo del fameskrip en la wiz es algo muy raro... quizá alguien puede arrojar algo mas de luz sobre esto pero a mi me parece que si pones un frameskip de 3 siempre te hace el frameskip 3 aunque el rendimiento en esa parte del programa de para usar un frameskip 0... es decir no hace autoframeskip parece que el frameskip se quede fijo.
Es algo que he notado en todos mis juegos.

Saludos

el frameskip funciona, eso si, lo que sucede es que la wiz no puede hacer la pausa de 60fps porque el minimo sleep no lo permite, proba haciendo tu juego a 50fps.

fijate le echo de drumpi que hace fskip cada tanto, y no siempre.
Title: Re: Efecto Lupa?
Post by: FreeYourMind on June 11, 2010, 02:15:54 PM
Comparte el código con nosotros maestro Bomber. Thanks  :D
Title: Re: Efecto Lupa?
Post by: Hokutoy on June 11, 2010, 02:36:48 PM
Probare a hacer el juego a 50 frames (aunque soy amante de los 60 frames) y a activar el frameskip a ver si noto mejoría en el funcionamiento.

Gracias!

Espero el codigo de la "lupa"! Asias!
Title: Re: Efecto Lupa?
Post by: BoMbErLiNk on June 11, 2010, 06:29:00 PM
Espera, creo que tendre que retocar bastante el código para que haga algo como lo que buscas, pero si quieres ir avanzando en algo te explico un paso muy fácil para hacer el recorte circular de la lupa.

1) Necesitas un "molde" del gráfico de la lupa, parte solida y transparente, el agujero transparente, si son 2 colores quizas quede más claro, yo uso color 0 para el transparente y color 5 para el solido (no funcionará bien en 32bits, a mi desde luego, pero supongo que si es para la Wiz utilizas 16bits).
2) Sobre el gráfico definitivo, antes de mostrarlo en pantalla le haces un MAP_BLOCK_COPY del molde de la lupa con FLAGS 32 en cada frame en el que cambie la imagen (aquí le das las gracias a Splinter, parte en la que me ayudo, antes de que me envie a las TMNT  ;D)
3) Lísto

El " gráfico definitivo ", podría ser un new_map, del tamaño que quieras que sea la lupa (parte visible + el marco de la lupa), ahora faltaría hacer que pegues el gráfico de la pantalla con zoom sobre ese new_map a cada frame, get_screen puede ser difícil de manejar por ser acumulativo, en ese momento quieres añadir movimiento de scroll o algo ?
Title: Re: Efecto Lupa?
Post by: BoMbErLiNk on June 14, 2010, 05:36:30 PM
Hokutoy dime si es así como esperas el efecto y te lo acabo de retocar, necesito un poco de más info.
Si es zoom dinamico o estatico como el que te he puesto de ejemplo
Si hay scroll o son pantallas estaticas, o se queda la pantalla estatica cuando usas el zoom y si hay varias capas
Que tipo de control de enemigos hay en pantalla, cuantos hay, porque se puede usar una forma sencilla de representarlos en la lupa

http://bombergames.net/lupa.zip
Title: Re: Efecto Lupa?
Post by: FreeYourMind on June 14, 2010, 06:37:20 PM
Y es a mi que me riñen por no poner el prg  ;D
Title: Re: Efecto Lupa?
Post by: La momia que fuma on June 15, 2010, 01:02:40 AM
Bomber, eres un crack, macho! :P

Sobre lo de get_screen y que te saque cosas que no debes, creo que las puedes ocultar "fuera de frame" y no salen en la captura, es decir, le pones a (por ejemplo) un marcardor de lo que sea (que no quieres incluir en el zoom) gráfico 0 o alpha 0 antes del get_screen y luego lo dejas como estaba, y no sale en la captura.

Si no funciona, creo que puedes "engañar" a Bennu con un frame(0) por el medio, pero no me acuerdo si era realmente necesario.

No lo he probado muy a fondo, pero con las tonterias que hice en su dia, sin hacer esto con el propio gráfico del zoom (que era a pantalla completa) se autocapturaba en la misma imagen siempre si mal no recuerdo.

Es importante también hacerle un unload a cada captura de get_screen, si no te los va metiendo en el fpg 0 y acabas petando la memoria tontamente a base de capturas de pantalla xD
Title: Re: Efecto Lupa?
Post by: SplinterGU on June 15, 2010, 04:53:07 AM
como ya se hablo en su momento ( estamos muy retro ultimamente :D ), la nueva funcion get_screen devuelve el ultimo frame dibujado y no el actual.

por que esto? por varios motivos:

1) velocidad
2) problemas con el algoritmo que existia para capturar, ya que no solo capturaba pantalla actual, sino que tambien avanzaba timers, modificaba variables de contexto de ultima posicion y areas modificadas (dirty), tambien consumia secuencias en un fade y otras tantas cosas mas que se hacen al final de un frame, pero no deberian hacerse en un capture. Este es el mas importante y grave de los motivos por el cual la implementacion heredada de fenix del getscreen funcionaba mal y se quito. Mas adelante pienso agregar algun parametro a la funcion getscreen para elegir entre un metodo u otro, pero no es de momento una prioridad ni tampoco sera resuelto a la brevedad, porque implica cambios por muchos lugares.
Title: Re: Efecto Lupa?
Post by: FreeYourMind on June 15, 2010, 08:08:15 AM
get_screen no existia en Bennu no ? Si ahora existe en que versión se ha implementado ?
Title: Re: Efecto Lupa?
Post by: Hokutoy on June 15, 2010, 11:31:51 AM
Perdon Bomber por la tardanza... vengo de un viaje largo fuera de casa.

Mi idea es hacer algo así como el Silent Scope:

(http://i.testfreaks.es/images/products/600x400/38/silent-scope.449318.jpg)

Pantalla normal + mirilla con zoom y scroll... aunque si me resulta muy dificil imagino que intentaré cambiar la idea para adaptarlo mejor.


EDIT: Acabo de ver el ejemplo que has puesto y es justo lo que quería... joer tío eres un hacha.
Gracias!
Voy a toquetearlo un poco a ver que saco jejeje

No lo he mirado bien pero si la lupa capta un proceso "enemigo" en movimiento este tambien es aumentado?
Y si el fondo tiene un scroll... tambien funciona el aumento?
Bueno esta noche al llegar a casa lo pruebo a ver... gracias man!
Title: Re: Efecto Lupa?
Post by: BoMbErLiNk on June 15, 2010, 01:25:37 PM
Vale, con esta info ya puedo montar uno más concreto, luego más tarde subo el código que primero toca ver el E3 :)
Title: Re: Efecto Lupa?
Post by: Hokutoy on June 15, 2010, 04:37:18 PM
ASIAS!

KARMA UP!
Title: Re: Efecto Lupa?
Post by: BoMbErLiNk on June 16, 2010, 01:19:40 PM
Aquí lo tienes :
http://bombergames.net/lupaV2.zip

Este test es más lento porque el otro copiaba simplemente el mapa en la lupa, este tiene el sistema entero montado, sin embargo funciona entre 110 / 130 fps en Wiz sin overclock, tiene unas cuantas cosas optimizadas, otras no, como que este diseñado para efectos a pantalla completa (se trabaja sobre un mapa de la pantalla, en lugar del tamaño lupa), pero eso ya lo dejo para quien quiera tocar el código.

Lo que hace es generar un mapa y ir pintando la escena en el, para finalmente ser visualizado por la lupa.

Te he puesto variables para manejer 2 planos de scroll, pero podría soportar más, como no se que sistema usas, tendras que probar como setearlas para que coja bien la posición, lo que hace es siempre acceder directamente al mapa, si mod_scroll te los recoloca de posición tendras que añadirle ese cambio.

Soporta procesos pintados en él, con control absoluto, la lupa puede pasar por otros procesos como textos o barras de vida sin que estas se vean afectadas, pero tienes que copiar unas cuantas lineas de código que veras en el proceso pajaros en el resto que se vayan a usar.

Hay una variable zoom para elegir el aumento de la lupa, es a precisión de 2x, 3x, etc

Hay un modo debug, se activa poniendo debugx=2, con el veras la imagen real que se va a generar a traves de la lupa, para testear escenas, etc
Title: Re: Efecto Lupa?
Post by: SplinterGU on June 16, 2010, 01:28:31 PM
no lo vi aun, pero por lo que cuestas te lo recurraste bomber, ya te di karma.
Title: Re: Efecto Lupa?
Post by: SplinterGU on June 16, 2010, 03:54:38 PM
yo lo modificaria un poquito, agregar un par de locales:

- zoom_number, donde los valores son de 0 a N, e indican en que zoom seran dibujados, 0 es en todos los zoom, -1 dice que este proceso no se se dibuja en ningun zoom (esto puede ser para el caso de querer hacer varios zoom o lupas.
- zoom_graphs[N], array de graficos para cada ampliacion de zoom para el grafico actual, y donde es la cantidad de ampliacion de zooms permitidos, esto nos permite tener mejor calidad de detalle en el zoom. Este array hay que actualizarlo cada vez que se cambia el grafico, puede ser un puntero que apunte a diferentes array previamente definidos. Esta variable seria opcional y solo si se quiere dar mejor definicion al sistema, sino se obvia y se trabaja con el size normal.

algunas estructuras globales

struct zoom_info[10] /* 10 zoom/lupas/miras por ejemplo */
    zoom_file;
    zoom_graph; /* 0 es no zoom, otros valores es el grafico que usa para hacer el zoom */
    zoom_multipler; /* donde indica el factor de zoom actual, 1x, 2x, 3x, etc */
end

La logica

- el tamaño del bitmap de la lupa tiene que ser del tamaño de la lupa y no de toda la pantalla (esto nos permite ganar rendimiento ya que solo dibuja lo que entra en el grafico y lo que queda fuera no se dibuja)

- luego meter un proceso controlador (llamado lupa o zoom) que revisa todos los procesos existentes y considera aquellos que zoom_number es diferente de -1, y toma de los procesos, las coordenadas, el angulo, los graficos, los flags, el size, etc. Dibuja en el zoom que corresponde y lo pone en pantalla. De esta forma uno se despreocupa de dibujar en cada proceso.
Title: Re: Efecto Lupa?
Post by: BoMbErLiNk on June 16, 2010, 05:42:24 PM
Guay, si alguien quiere seguir con ello o perfeccionarlo adelante, yo lo haría pero no tengo tiempo con el resto de proyectos  :D
Title: Re: Efecto Lupa?
Post by: FreeYourMind on June 16, 2010, 06:10:43 PM
Venga, te doy mi karma por el pequeño pero potente código que has soltado  ;D
Title: Re: Efecto Lupa?
Post by: SplinterGU on June 16, 2010, 06:16:09 PM
Quote from: BoMbErLiNk on June 16, 2010, 05:42:24 PM
Guay, si alguien quiere seguir con ello o perfeccionarlo adelante, yo lo haría pero no tengo tiempo con el resto de proyectos  :D

si, estaria bueno que alguien meta esos cambios que propuse y quedaria algo generico, como un mod_scroll pero escrito en bennu.
Title: Re: Efecto Lupa?
Post by: Hokutoy on June 17, 2010, 04:39:39 PM
Gracias Bomber te ha quedado de lujo!
Karma ++

Ya publicaré alguna cosa usando el "motor".

Gracias!