Buenas vengo a preguntarles como haria para hacer que 3 instancias creadas aleatoriamente no se encuentren o que se alejen al ser creadas en la misma posicion

Estoy trabajando en un "Scrolling Shooter" y resulta ser mi primera vez trabajando con funciones aleatorias y ahora descubro mi primer error, les mostrare mi codigo para ver si encuentran una forma de solucionarlo

[gml]/// Evento Create
alarm[0] = room_speed*2
alarm[1] = room_speed*9
alarm[2] = room_speed*14
[/gml]

[gml]/// Alarma 0
var randomx;
randomx = random_range(192,room_height-8);

instance_create(randomx,-100,obj_enemy1)

alarm[0] = room_speed * random(3)
[/gml]

y lo mismo para las otras 2 alarmas, alguna forma para evitar que estas 3 instancias se creen en las mismas posiciones (en muy pocos casos) o que al crearse se alejen

Hola T789

[gml]randomx = random_range(192,room_height-8);[/gml]
Primero: sí sabes que "room_height" es el alto de la room?? para el ancho puedes usar: "room_width".

Lo que se me ocurre para resolver tu problema, es que la instancia creada corra un código de colisión y se desplace hacia el lado en caso de haber detectado colisión.
Ejemplo:
[gml]var inst = instance_create(randomx,-100,obj_enemy1)
with inst {
if place_meeting(x,y,obj_enemy1) { //Nota: Si "obj_enemy" es una variable en vez de un objeto, deberás llamarla con: "ohter.obj_enemy", si es objeto, déjalo tal cual.
var offset = 1,free = false;
while (free = false) {
if !place_meeting(x+offset,y,obj_enemy1) { x = x+offset; free = true } //Revisa "n" pixeles a la derecha
else if !place_meeting(x-offset,y,obj_enemy1) { x = x-offset; free = true } //Revisa "n" pixeles a la izquierda
offset += 1
}
}
}[/gml]

Lo que hace ese código, es que al momento de que crees el objeto (almacenado en la variable local "inst"), ese objeto "inst" creado revisará si colisiona con otro (justo donde fue creado).
En caso de colisionar, hace una Iteración infinita para buscar un espacio vacío a 1 pixel a la derecha o 1 pixel a la izquierda (usé la variable local "offset" para medir la distancia).
Si no encuentra espacios libres, entonces repite la iteración pero ahora buscando un espacio libre a 2 pixeles a la derecha o a 2 pixeles a la izquierda. etc.
La iteración se detiene cuando el objeto encuentra un espacio vacío (cuando la variable local "free" se hace "true").

Advertencia: No he testeado el código antes, espero que no tengas problemas porque al hacer mal un "while", se te congelará el juego jejeje.

Saludos

Disculpa lo escribi mal, se que debi poner room_width
Voy a probar ese codigo justa ahora

Bueno funciono de maravilla aunque tuve que modificarlo un poco para que no hubiera problemas
ahora a hacer lo mismo con las demas alarmas, tengo una duda como haria para vericar distintos objetos a la vez pues me ahorraria duplicar el codigo  ???

Hola T789

Crea un objeto maestro, ejemplo "obj_master_enemy".
Y a todos los objetos enemigo, le asignas ese objeto como padre en la opción "parent" que da el editor de objetos de Game Maker.

Así en el código usas:
[gml]if place_meeting(x,y,obj_master_enemy) {}[/gml]
y eso detectará la colisión también en todos los hijos que ese objeto tenga.

Saludos.

no sabia eso, por que nunca se me ocurren cosas tan simples como esas
igual gracias