2D Game Engine
Движок написан с нуля для 2D-игры. Работа над ним велась в свободное время с середины 2024 до начала 2026 года.
Из библиотек только Raylib для рендеринга.
Видео с одной из версий:
Эта версия одна из ранних и игра тут представляла из себя динамичнейший экшн-платформер.
В дальнейшем от этой задумки я отошёл и пробовал всякое разное.
По графической составляющей - в более поздних версиях добавил поддержку запекания света:
А также поддержку карт нормалей для статических текстур:
Много работы было вложено в редактор уровней.
Манипуляция объектами, undo/redo:
Множественный выбор объектов, undo/redo с ними, копирование/вставка на разные уровни:
Триггеры, более сложные undo/redo со связанными объектами:
Стресс-тест undo/redo с множественным выбором объектов:
Переключение между уровнями:
Во время редактирования уровней движок держит сразу несколько из них в памяти для быстрого переключения. Также есть возможность копировать/вставлять объекты с разных уровней.
Динамическое освещение:
Была сделана система для записи и воспроизведения ввода. Это было сделано в первую очередь для тестирования проходимости уровней после изменений в коде, но также было использовано в одном из уровней (сверху - заранее записанный ввод игрока, снизу - настоящий игрок):
Это, конечно, далеко не всё. Большая часть работы была вложена в саму игру и разные её итерации, но тут всё это показывать особого смысла нет.
В сумме в проекте около 20 000 строк C++ кода. Я всегда стараюсь заново посещать, упрощать и уничтожать части кода, так что эти 20тыщь дались недаром. Меньший объём кода позволяет легче его понимать, менять и отлаживать, поэтому я много времени уделяю рефакторингу.
STL не использовался - большая часть структур данных написана мной. Такой подход я практикую во всех собственных проектах в первую очередь потому, что хочу точно понимать, что происходит в моей программе. Также я активно пользуюсь собственными аллокаторами (в основном аренами), и собственные структуры данных сильно упрощают эту работу. Ну и большинство структур данных написать самостоятельно совсем несложно, поэтому для собственных проектов я не вижу смысла опираться на чёрный ящик STL.
Исходники
Из библиотек только Raylib для рендеринга.
Видео с одной из версий:
Эта версия одна из ранних и игра тут представляла из себя динамичнейший экшн-платформер.
В дальнейшем от этой задумки я отошёл и пробовал всякое разное.
По графической составляющей - в более поздних версиях добавил поддержку запекания света:
А также поддержку карт нормалей для статических текстур:
Много работы было вложено в редактор уровней.
Манипуляция объектами, undo/redo:
Множественный выбор объектов, undo/redo с ними, копирование/вставка на разные уровни:
Триггеры, более сложные undo/redo со связанными объектами:
Стресс-тест undo/redo с множественным выбором объектов:
Переключение между уровнями:
Во время редактирования уровней движок держит сразу несколько из них в памяти для быстрого переключения. Также есть возможность копировать/вставлять объекты с разных уровней.
Динамическое освещение:
Была сделана система для записи и воспроизведения ввода. Это было сделано в первую очередь для тестирования проходимости уровней после изменений в коде, но также было использовано в одном из уровней (сверху - заранее записанный ввод игрока, снизу - настоящий игрок):
Это, конечно, далеко не всё. Большая часть работы была вложена в саму игру и разные её итерации, но тут всё это показывать особого смысла нет.
В сумме в проекте около 20 000 строк C++ кода. Я всегда стараюсь заново посещать, упрощать и уничтожать части кода, так что эти 20тыщь дались недаром. Меньший объём кода позволяет легче его понимать, менять и отлаживать, поэтому я много времени уделяю рефакторингу.
STL не использовался - большая часть структур данных написана мной. Такой подход я практикую во всех собственных проектах в первую очередь потому, что хочу точно понимать, что происходит в моей программе. Также я активно пользуюсь собственными аллокаторами (в основном аренами), и собственные структуры данных сильно упрощают эту работу. Ну и большинство структур данных написать самостоятельно совсем несложно, поэтому для собственных проектов я не вижу смысла опираться на чёрный ящик STL.
Исходники