Buenas, mi pregunta es la siguiente,  ¿Como podria hacer para que al entrar en un cuarto este se iluminase y al salir de el se viese encima de esa zona más opaco, no negro del todo sino oscurecido, pero mi objetivo no es un efecto linterna que vaya con el jugador por que sino iluminaria toda la room, y me gustaria que se fuese iluminando solo las habitaciones donde va entrando que he ido aciendo dentro de la room.
Saludos!!

ya intentaste usando 'surfaces', ademas deberas de tener un control de todos los rooms que has visitado y poner valor de true a los que has visitado y por ende estan encendidos.
Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala

Podrias crear un objeto de color negro que cubra toda la room o la parte que quieras y usar place_meeting para que cuando el personaje este en la colision del objeto uses image_alpha y se aclare la room


Probablemente no se vaya a servir esto ahora, pero bueno, seguro le podrás hallar un uso a futuro usando la imaginación, solamente debes colocarla en la "room" que quieras que tenga este efecto si lo haces persistente desde la 1° todo tendrá ese efecto.

obj_Luz

CREATE

///Crear la superficie

superficie = surface_create(room_width, room_height);

surface_set_target(superficie);
draw_clear_alpha(c_black, 0);

//Reinicia la superficie
surface_reset_target();


STEP

///Control de la oscuridad
if (surface_exists(superficie)){
    surface_set_target(superficie);
   
    //conjunto oscuridad
    draw_set_colour(c_black);
    draw_set_alpha(0.5); //intencidad de la oscuridad 0 nada 1 absoluta
    draw_rectangle(0, 0, room_width, room_height, false);
   
    //conjunto circulos
    draw_set_blend_mode(bm_subtract);
   
   
    draw_set_colour(c_black);
    draw_set_alpha(0.2);
   
   
    // dibuja circulos
    with (obj_Jugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 80 + random_range(-1, 1), false);
       
        }
       
        draw_set_colour(c_white);
        draw_set_alpha(1);
       
        with (obj_Jugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 45 + random_range(-1, 1), false);
       
        }
       
       
       
    //Reinicia todo el conjunto dibujo
    draw_set_blend_mode(bm_normal);
    draw_set_alpha(1);
    surface_reset_target();
} else {
    superficie = surface_create(room_width, room_height);
    surface_set_target(superficie);
    draw_clear_alpha(c_black, 0);
    surface_reset_target();
}


ROOM_END

/// destruir la superficie
if (surface_exists(superficie)) {
    surface_free(superficie);
}


DRAW

///Dibuja la superficie

if (!surface_exists(superficie)) {
    superficie = surface_create(room_width, room_height);
} else {
    if (view_current == 0) {
        draw_surface(superficie, 0, 0);
    }
}


NOTA: Recuerda poner el objeto a depth con valores negativos en mi caso -999, que te diviertas  ;).