Ответ: Давайте поразмышляем. Что такое комната? Комната - это набор определённых настроек, опции видов и фонов, список всех объектов и тайлов. На самом деле, самая первая, "нулевая" комната - это комната загрузки. В ней, загружается движок GM и все внутренние ресурсы , инициализируется окно игры и загружается первая игровая комната. Под фразой "загружается комната" я подразумеваю следующие действия: 1) Назначаются значения всем переменным комнаты: 1.1) Индекс комнаты - room 1.2) Заголовок комнаты - room_caption 1.3) Ширина и высота комнаты - room_width и room_height 1.4) Скорость комнаты - room_speed 1.5) Постоянность комнаты - room_persistent 1.6) Цвет фона и его видимость - background_color и background_showcolor 2) Загружается массив видов: 2.1) Видимость в момент начала комнаты - view_visible[0..7] 2.2) Позиция, ширина и высота вида: view_xview[0..7], view_yview[0..7], view_wview[0..7] и view_hview[0..7] 2.3) Позиция, ширина и высота порта: view_xport[0..7], view_yport[0..7], view_wport[0..7] и view_hport[0..7] 2.4) Граница вокруг преследуемого объекта: view_hborder[0..7] и view_vborder[0..7] 2.5) Вертикальная и горизонтальная скорость: view_hspeed[0..7] и view_vspeed[0..7] 2.6) Преследуемый объект - view_object[0..7] 2.7) Поворот вида - view_angle[0..7] 3) Загружается массив фонов: 3.1) Видимость в момент начала комнаты - background_visible[0..7] 3.2) Отображать ли фон над объектами - background_foreground[0..7] 3.3) Индекс фонового изображения - background_index[0..7] 3.4) Позиция - background_x[0..7] и background_y[0..7] 3.5) Замощение комнаты по горизонтали/вертикали - background_htiled[0..7] и background_vtiled[0..7] 3.6) Вертикальная и горизонтальная скорость - background_hspeed[0..7] и background_vspeed[0..7] 3.7) Масштаб фона - background_xscale[0..7] и background_yscale[0..7] 3.8) Цвет смешивания для фона - background_blend[0..7] 3.9) Непрозрачность фона - background_alpha[0..7] 4) Создаются все тайлы: 4.1) Позиция тайла - x, y 4.2) Индекс фона - background 4.3) Часть фона - left, top, width, height 4.4) Глубина тайла 4.5) id тайла, начинается с 10 000 001 (включительно) 5) Создаются все объекты, вычисляется instance_count и заполняется массив instance_id: 5.1) Позиция - x, y 5.2) Индекс объекта - object_index. 5.3) id, начинается с 100 001 (включительно) 6) Выполняется creation code объектов (который задаётся в комнате) 7) Выполняется creation event объектов 8) Game start (Выполняется только в момент начала игры) 9) Room creation code (выполняется код, задаваемый в настройках комнаты) 10) Room start event Действия, не обозначенные символами, выполняются в любом случае - при загрузке самой первой комнаты, при загрузке сохранения, при загрузке persistent комнаты и т.д. Действия, обозначенные так - выполняются только при первом попадании в комнату, а так же для всех не persistent комнат. Если вы вышли из постоянной комнаты, а потом вернулись - эти действия не выполнятся. Действия, обозначенные так - выполняются только при сохранении/загрузке игры или сохранении данных/загрузке постоянной комнаты. Эти настройки нельзя изменить в редакторе комнат, потому, при первом попадании в комнату они не загружаются, а получают значения по умолчанию. Действие же обозначенное так - событие начала игры, выполняются только один раз, при первой загрузке самой первой комнаты. Обратите внимание, что вне зависимости от того, является ли комната постоянной - событие Room start выполняется всегда. Этот список действий может внести некоторую ясность в то, что конкретно происходит в начале игры и как реализован механизм сохранения постоянных комнат. Если установлен persistent, при переходе в другую комнату - все данные о текущем состоянии комнаты перезапишутся: массивы видов, фонов, списки объектов и тайлов и т.п., а так же все локальные переменные всех объектов (стоит учесть, хотя массивы сохраняются, динамические структуры данных - нет). При сохранении игры сохраняются данные обо всех persistent комнатах, включая текущую (вне зависимости, постоянная она или нет) + глобальные переменные и, наверняка, что-то ещё. Сурфейсы, новые объекты, загруженные спрайты, фоны, звуки, изменения в действиях объектах (object_event_*), динамические структуры данных, позиции проигрывания звуков, настройки игры (полноэкранность и т.п.), частицы - всё это НЕ сохраняется стандартным механизмом сохранения GM. Что же происходит при загрузке? Всего лишь заменяются данные для всех persistent комнат, включая текущую (не зависимо, постоянная ли она). Я лично предполагаю, что все значения локальных переменных записываются в creation code объектов, и этот код выполняется всегда. Однако, я всё равно обозначил его цветом, так как знать наверняка не могу. Написать свой механизм сохранения проще, чем кажется, стоит только всё продумать. |