Если подробнее, то так:
1) Использовать ds_list (документация)
2) Создать / использовать уже существующий persistent объект
3) В его Create написать что-то вроде:
Код
room_id = 0;
list_rooms = ds_list_create();
ds_list_add(list_rooms, r_1, r_2, r_3, r_4, r_5, r_6, r_7, r_8, r_9, r_10); // Не более 15 за раз
ds_list_shuffle(list_rooms);
4) Создаем User Defined Event 1 (можно так же использовать Alarm):
Код
room_id = 0;
ds_list_shuffle(list_rooms);
5) Создаем User Defined Event 2 (можно так же использовать Alarm):
Код
if (ds_list_size(list_rooms) >= room_id + 1) exit; // Либо любая другая логика аля "выход в меню"
room_goto(list_rooms[| ++room_id]);
Теперь если нужно заново перемешать - вызываем event_user(1) у объекта.
Если перейти к следующей комнате - event_user(2).
P.S> В случае с alarm вызываем через alarm[index] = 1; Производительность не замерял, в теории user-defined быстрее.