Hypersomnia — Когда чистый C++ мощнее игровых движков
Знакомо чувство, когда хочется заглянуть «под капот» игрового движка? Команда Hypersomnia пошла дальше — они создали полноценный мультиплеерный шутер вообще без движка, на чистом C++. И результат впечатляет.
Что это за зверь?
Hypersomnia — это:
- 2D-шутер с видом сверху
- Полноценный мультиплеер с детерминированной синхронизацией
- Встроенный редактор карт
- Поддержка браузерной версии (WebAssembly)
- Всего 29 МБ в размере!
Проект развивается с 2013 года и уже собрал 1.2k звезд на GitHub. При этом он остается полностью открытым под лицензией AGPL v3.
Почему это технически впечатляет?
1. Детерминированная синхронизация
Разработчики реализовали хитрую систему, где:
- Только ввод игроков передается по сети
- Весь игровой мир симулируется локально на каждой машине
- Физика (Box2D) полностью детерминирована, включая контакты тел
Это позволило достичь:
- Минимального трафика (~40 кбит/с при 60 fps)
- Синхронизации даже браузерных и нативных клиентов
- Плавного геймплея даже при лагах
2. Гибкая архитектура
В проекте используется:
- Кастомная реализация Entity-Component-System
- Пул объектов с линейным расположением в памяти
- Умная система «перевывода» (cache reinference) состояний
// Пример из кода: обработка движения рыб с групповым поведением
void movement_path_system::advance_creatures(const logic_step step) {
auto& cosm = step.get_cosmos();
cosm.for_each_having<components::movement_path>([&](const auto& it) {
// AI логика здесь
});
}
Кому это будет полезно?
- Разработчикам игр — как пример нетривиальных решений в игровом сеттинге
- Студентам — для изучения современных подходов в C++
- Энтузиастам — чтобы поиграть в необычный шутер с друзьями
Как попробовать?
Вариантов много:
- Браузерная версия
- Нативный клиент для Windows/Linux/macOS
- Через Steam
- Собрать из исходников (требуется Clang)
Редактор карт позволяет моментально тестировать изменения — достаточно одного клика, и вы уже в игре с новой картой.
Фишки для разработчиков
- Встроенный автоапдейтер с проверкой подписи
- Уведомления в Discord/Telegram о событиях сервера
- JSON-формат для карт (легко модифицировать)
- Поддержка пользовательских ресурсов (просто кидаете PNG/WAV в папку)
Hypersomnia — это редкий пример, когда open-source проект:
- Реально полезен как игровой продукт
- Представляет ценность для изучения
- Доказывает, что «движок» — это не всегда необходимость
Для кого-то это будет крутой игрой на вечер, для других — источником вдохновения и готовых решений сложных проблем игровой разработки.