[GAME] DoZ's BAR

Proyectos en Desarrollo.

Re: [GAME] DoZ's BAR

Postby DoZ » Wed Jun 15, 2016 10:12 pm

Lo del humo es porque hay mala extracción en el local... :mrgreen: Creo que ya lo tengo corregido; pretendía ser un efecto, no algo que logre incluso dejar a alguien con los ojos llorosos por empatía xD

De momento, y sin ánimo de abusar, por supuesto, expongo un par de dudas que tengo y no logro solventar.

1. Alguien tiene/conoce algún sistema de colisiones decente sin usar mapas de durezas entre objetos fijos y móviles? De necesitar funciones más complejas de colisión entre objetos, cuáles debería empezar a aprender a usar? Cualquier orientación será bienvenida :) Seguro que hay alguna fórmula super obvia y mucho más funcional que la chapuza que tengo ahora. En última instancia podría usar un mapa de durezas, pero estaría bien saber por dónde tirar para hacerlo más fino.

2. Cuál es la forma ideal para identificar individualmente a los aliens? Los llamo usando un bucle con REPEAT y una variable que los va contando, ya que intenté usar el FROM / TO y no entiendo el porqué, si por ejemplo le escribía que llamara a 11 aliens, llamaba solo a 5, cuando todo parecía estar bien o.O Supongo que utilizando una variable local a modo de identificador, no? Es para saber cuándo pueden disparar o no. Ahora, lo que hacen es un parche hypermegacutre marca de la casa, que es que el gráfico pasa de ser un pixel transparente al gráfico de disparo un par de frames después, y si choca con otro alien no le da tiempo a cambiar y se destruye (juajuajuajua, soy el rey de las chapuzas, la virgen; compenso la falta de talento con la imaginación xDD). Pero claro, si se da el caso de que matas a un alien intercalado de refilón, sí se ve el disparo y cómo muere en el alien de más abajo.

Y ya puestos, ¿existe alguna manera de no necesitar incluso una variable local para ello? Algo así como indicar que tal o cual línea modifique el proceso número tres, por ejemplo, en caso de existir tres procesos iguales.

Muchísimas gracias de antemano :)
User avatar
DoZ
 
Posts: 416
Joined: Thu Apr 08, 2010 11:16 pm
Location: Buscando el Big Whoop

Re: [GAME] DoZ's BAR

Postby DoZ » Wed Jun 15, 2016 10:22 pm

Sobre el primer punto no voy a necesitar ayuda (creo). Justo después de escribir el post le he estado dando vueltas y se me han ocurrido un par de soluciones bastante factibles y que puede quedar bastante fino el resultado. Esto es lo que desconocía y engancha realmente de programar :) Gracias CicTec por ofrecer la herramienta ideal, joder. Es el único lenguaje que "conozco" y con el que me he atrevido nunca. Me refiero al estilo DIV ;)

En cualquier caso, de estar desesperado y al borde del suicidio ya pediría ayuda sobre eso :)
User avatar
DoZ
 
Posts: 416
Joined: Thu Apr 08, 2010 11:16 pm
Location: Buscando el Big Whoop

Re: [GAME] DoZ's BAR

Postby CicTec » Wed Jun 15, 2016 10:36 pm

DoZ wrote:De momento, y sin ánimo de abusar, por supuesto, expongo un par de dudas que tengo y no logro solventar.

1. Alguien tiene/conoce algún sistema de colisiones decente sin usar mapas de durezas entre objetos fijos y móviles? De necesitar funciones más complejas de colisión entre objetos, cuáles debería empezar a aprender a usar? Cualquier orientación será bienvenida :) Seguro que hay alguna fórmula super obvia y mucho más funcional que la chapuza que tengo ahora. En última instancia podría usar un mapa de durezas, pero estaría bien saber por dónde tirar para hacerlo más fino.

Un buen sistema esta en el juego MALVADO.PRG del pack de ejemplos de DIV2 bajable en el thread novedades, en particular los procesos "Jack" y "Jack_platform" son un ejemplo de colisiones de objetos (el personaje) con otros objetos (procesos plataformas, etc...), puedes empezar mirando ahi y si tienes alguna duda/dificuldad, un thread en mesa de ayuda para hablar de soluciones mas detalladas.

DoZ wrote:2. Cuál es la forma ideal para identificar individualmente a los aliens? Los llamo usando un bucle con REPEAT y una variable que los va contando, ya que intenté usar el FROM / TO y no entiendo el porqué, si por ejemplo le escribía que llamara a 11 aliens, llamaba solo a 5, cuando todo parecía estar bien o.O Supongo que utilizando una variable local a modo de identificador, no? Es para saber cuándo pueden disparar o no. Ahora, lo que hacen es un parche hypermegacutre marca de la casa, que es que el gráfico pasa de ser un pixel transparente al gráfico de disparo un par de frames después, y si choca con otro alien no le da tiempo a cambiar y se destruye (juajuajuajua, soy el rey de las chapuzas, la virgen; compenso la falta de talento con la imaginación xDD). Pero claro, si se da el caso de que matas a un alien intercalado de refilón, sí se ve el disparo y cómo muere en el alien de más abajo.

Lo mejor es crear un array que va a contener los codigos ID de los procesos aliens, si el numero maximo de aliens fuera por ejemplo 30, pues un array de 30:
Source Code (Gemix) [ Download ] [ Hide ]
  • global
  •    aliens_id[29];
  •  
  • begin
  •    aliens_id[0] = alien(....);
  •    aliens_id[1] = alien(....);
  •    aliens_id[2] = alien(....);
  •    ...
  •  

De esa forma identificas cada alien del nivel por medio del indice (el alien 1 es el indice 0, etc...)

Otra opcion es mirar el juego GALAX.PRG del pack de juegos de DIV2 que viene en el threa novedades & releases, viene bien para mirar tecnicas usadas para este tipo de juego.

DoZ wrote:Y ya puestos, ¿existe alguna manera de no necesitar incluso una variable local para ello? Algo así como indicar que tal o cual línea modifique el proceso número tres, por ejemplo, en caso de existir tres procesos iguales.

Para identificar externamente el proceso, como explicado anteriormente por medio del indice del array de ID's es una buena tecnica.
Si se quiere identificar internamente se deberia recorrer el array y comparar si el ID corresponde, por ejemplo:
Source Code (Gemix) [ Download ] [ Hide ]
  •   for(n = 0; n < max_aliens; n++)
  •     if(aliens_id[n] == id)
  •       break;
  •     end
  •   end
  •  

De esta forma la variable "n" tendra el numero de proceso, todavia es un metodo algo lento.

Otra tecnica es crear una variable privada como parametro que identifique el "numero" del proceso, ej:
Source Code (Gemix) [ Download ] [ Hide ]
  •   aliens_id[0] = alien(....., 1);
  •   aliens_id[1] = alien(....., 2);
  •   aliens_id[2] = alien(....., 3);
  •  

Entonces controlar el valor de la variable para saber directamente si el proceso es el 3, etc...
Source Code (Gemix) [ Download ] [ Hide ]
  • process alien(......, number)
  • begin
  •    loop
  •      if(number == 3)
  •        // acciones
  •      end
  •      ...
  •    end
  • end
  •  
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [GAME] DoZ's BAR

Postby DoZ » Wed Jun 15, 2016 11:08 pm

Madre mía, así da gusto!! :claphands: :roll:

Estuve el otro día buscando sin éxito el pack que mencionas, voy de cabeza para allá. Como siempre, muchas gracias :)
User avatar
DoZ
 
Posts: 416
Joined: Thu Apr 08, 2010 11:16 pm
Location: Buscando el Big Whoop

Re: [GAME] DoZ's BAR

Postby CicTec » Wed Jun 15, 2016 11:24 pm

DoZ wrote:Madre mía, así da gusto!! :claphands: :roll:

Estuve el otro día buscando sin éxito el pack que mencionas, voy de cabeza para allá. Como siempre, muchas gracias :)

Aqui tienes el thread: viewtopic.php?f=71&t=34

De nada. ;)
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [GAME] DoZ's BAR

Postby DoZ » Wed Jun 22, 2016 8:02 pm

Buenas!!

Bueno, tras unos días sin poder dedicarle apenas tiempo, hoy pude ponerme un poco con mi pequeño bar :P

Ya está disponible un mini-juego, el de tirar las jarras de cerveza :) Hay que ir a la esquina derecha de la barra, por la parte de dentro para poder acceder a él.

Los gráficos tienen errores de transparencia porque las cabezas las hice este mediodía en el portátil, y uso una versión más antigua y cutre de Corel en cuanto a exportar png's, pero lo que me interesaba, que es el código y el funcionamiento, ya están prácticamente terminados. Me falta añadir la animación de romperse contra el suelo o contra un cliente que no toca, corregir lo de las cabezas, tal vez añadir algún gráfico de animación a la jarra cuando se encuentre en movimiento y poco más.

Bueno, en realidad me encantaría saber si existe alguna forma de que la función de advance() sea más precisa respecto al angle, o me tengo que currar un sistema propio. Lo pregunto para no hacer lo segundo de gratis xD

Respecto a la recreativa, he pulido la parte del código y añadido algo que afecta positivamente a la jugabilidad: tan sencillo como que si mantenemos un cursor, la velocidad será mayor, permitiendo ajustar con toques precisos. Está casi al 100%, 97% diría yo. Faltaría corregir algún problema de sonido con la nave roja extra, y ya estaría al 100%.

Archivo en el post inicial, como siempre..

PD. Acabo de darle rápidamente al F11 y F10 tras terminar de editar el post y querer publicarlo. Si esto no es estar enchufado... jajjajaja
User avatar
DoZ
 
Posts: 416
Joined: Thu Apr 08, 2010 11:16 pm
Location: Buscando el Big Whoop

Re: [GAME] DoZ's BAR

Postby CicTec » Wed Jun 22, 2016 8:12 pm

DoZ wrote:Buenas!!
Bueno, en realidad me encantaría saber si existe alguna forma de que la función de advance() sea más precisa respecto al angle, o me tengo que currar un sistema propio. Lo pregunto para no hacer lo segundo de gratis xD

Hola DoZ,

ADVANCE, viniendo de DIV trabaja con INT, lo cual puede haber perdida de precision, para esto puedes probar a usar XADVANCE:
* INT XADVANCE(INT angle, INT distance)
INT XADVANCE(INT process_id, INT angle, INT distance) -> (overload 1)

Para intentar especificar tu el angulo, sino tendrias que montarte una funcion utilizando funciones matematicas disponibles en el modulo math, en particular utilizando FLOAT para obtener mas precision.

Sobre los avances del juego, muy bien, en estos dias probare la nueva version, animo con eso. :)
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [GAME] DoZ's BAR

Postby DoZ » Wed Jun 22, 2016 8:26 pm

Ok, thx for the info, echaré un vistazo :) No es que vaya a hacerlo, pero también podría hacerlo a lo artesano, que podría decirse jajaja Si supieras cómo he solucionado el tema de que no dispare un alien si tiene otro por una fila inferior a él... xDD Qué cojones, lo cuento muahaha

Pues, en lugar de calcular distancias o identificar los aliens, "sencillamente" (según se mire xD) lo que hacen es disparar un disparo "fake", y si se topa con un alien no tiene permiso para disparar, pero si llega abajo de la pantalla, sí. Algo así como un auténtico sónar :P La verdad es que apenas consume recursos, y no se nota. Es un pixel negro con flags a 4. NO SE VE Sé que es cutre, pero no se ve xD

En fin, con todo esto, vengo a decir que también podría hacer que según el ángulo, fuera ganando o perdiendo coordenadas Y, con un contador. Artesano/cutre style xD Pero sin duda, la forma buena y con la que aprenderé es usando FLOAT, que no tengo ni idea de cómo funciona, todo sea dicho :P
User avatar
DoZ
 
Posts: 416
Joined: Thu Apr 08, 2010 11:16 pm
Location: Buscando el Big Whoop

Re: [GAME] DoZ's BAR

Postby CicTec » Wed Jun 22, 2016 8:52 pm

DoZ wrote:Pues, en lugar de calcular distancias o identificar los aliens, "sencillamente" (según se mire xD) lo que hacen es disparar un disparo "fake", y si se topa con un alien no tiene permiso para disparar, pero si llega abajo de la pantalla, sí. Algo así como un auténtico sónar :P La verdad es que apenas consume recursos, y no se nota. Es un pixel negro con flags a 4. NO SE VE Sé que es cutre, pero no se ve xD

Bueno, eso del uso de un mapa de 1 pixel lo haces para no hacer ver el grafico, pero aunque no consume casi nada el renderer siempre lo va a renderizar.
Puedes optimizar este metodo, ya que segun entendi, usas otro proceso "fake" del disparo, simplemente disfrutando la variable LOCAL "visible", a este proceso le indicas simplemente:
Source Code (Gemix) [ Download ] [ Hide ]
  • visible = 0;
  •  

Entonces el proceso nunca sera renderizado en el target, asi podras utilizar el grafico original, o el de 1pixel, puedes ahorrar de usare flags y sobretodo menos carga para el renderer, ya que descarta los graficos que non son visibles.

DoZ wrote:En fin, con todo esto, vengo a decir que también podría hacer que según el ángulo, fuera ganando o perdiendo coordenadas Y, con un contador. Artesano/cutre style xD Pero sin duda, la forma buena y con la que aprenderé es usando FLOAT, que no tengo ni idea de cómo funciona, todo sea dicho :P

Otra alternativa es probar a usar "resolution" para aumentar la precision del movimiento, mira la ayuda de DIV sobre esa variable LOCAL y su utilizo.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [GAME] DoZ's BAR

Postby DoZ » Wed Jun 22, 2016 9:10 pm

Ostras Pedrín, qué bien pensado esto del visible no? jajajaja :roll: Lo acabo de poner y de lujo, ahora no se aprecia ni un pelín cuando hay más humo en la zona. Gracias! :)
User avatar
DoZ
 
Posts: 416
Joined: Thu Apr 08, 2010 11:16 pm
Location: Buscando el Big Whoop

PreviousNext

Return to Proyectos WIP

Who is online

Users browsing this forum: No registered users and 2 guests