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:
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:
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:
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...