Цитирую свой второй пост:
Мой движок построен вокруг уникальной архитектуры (было бы великой глупостью клепать просто ещё один клон огра, нэ?).
Фишка: исполняемый код можно менять на лету, не теряя данных.
Технически это организовано как вынесение практически всего кода движка в DLL, которая сохраняет состояние в файл, выгружается, другая загружается, восстанавливает состояние из файла. В чём же уникальность, спросите? Часть данных - а именно, текстуры, прочие объекты OpenGL и даже открытые файлы - сохраняются не в файле, а в памяти EXE-матки. Потом DLL берёт их обратно. Имеем: передёрнули исполняемый код, а все текстуры сохранились.
Конечно, это только на словах просто, а на деле там дофига и больше кода для сериализации, обеспечения совместимости вперёд/назад (состав полей класса после перекомпиляции может быть уже другим, нэ?) и прояая, и прочая.
Но итог таков: полная перезагрузка DLL занимает не дольше пары сотен милисекунд. Это часто даже на глаз незаметно. В итоговой игре данных будет поболе, но и тогда - не дольше 0.3..0.5 секунды.
TL;DR: мгновенность внесения изменений в работающий код.
Что-то отдалённо подобное есть только в Виндовс, которая умеет при накате обновления передёргивать код загруженных и выполняющихся DLL на лету. За счёт специальных NOP-заглушек в каждой ф-ии API, которые лёкким движением руки превращаются в JMP.
Но там структура полей записей и классов фиксирована, а у меня может меняться.
Вторичная фича - мне не надо особенно беспокоиться об утечках памяти. Вместо того, чтобы долго искать ляп в поте лица своего, я могу сделать так, чтобы игра перезапускалась каждые 5 минут незаметно для пользователя, с полным стиранием и перезагрузкой менеджера памяти.
P.S. В настоящий момент проект в состоянии применения кувалды и такой-то матери к базовым классам выгружаемой DLL. Радикально перекорёживаю парадигму и менеджер потоков.
им может быть в том числе какая-то механика, специфичная для небольшой игровой локации,
Нетути там никакой модульности. Да и зачем? Размер екзешника мегабайт с кепкой. Абсолютно монолитное микроядро.
Не будет никаких отдельных локаций. Только монолитный открытый мир с двумя режимами детализации: детально с физикой один квадратный километр вокруг игрока, и схематично, по обобщённым правилам, вся остальная планета.
Пример: объект корован движется вдоль объекта дорога, и каждые сто метров проверяет псевдослучайное число на предмет заметил ли его объект разбойники, сидящий на соседней ячейке глобальной карты. Если да - создаётся объект набигание, и начинают выполняться расчёты сколько тушек с какой стороны полегло.
Если игрок подходит ближе 500м., объект набигание генерирует разбойников, караванщиков и телеги, схематично расставляя их и включается ИИ. Пока игрок подойдёт достаточно близко, чтобы всё это безобразие попало в зону видимости, боевые действия неписей перемешают тусовку, скрыв следы того, что начала схватки не было, и она нарисовалась из воздуха с середины.
(Кстати, в Mount & Blade даже этим не заморачивались, когда с карты мира входишь в уже идущую битву - все уцелевшие войска расставляются по разные концы рандомно сгенерированной локации словно ещё не сражались.)