Overview
Role: Tool & Gameplay
This project is a 2D game engine and a puzzle game utilizing it, developed based on the C++ language and libraries such as SDL, OpenGL (Glad), and FMOD. Key systems implemented include rendering, audio, input handling, physics and collision, scene management, an entity-component system (ECS), and level management. Players interact with various objects like doors, switches, and mirrors, with laser puzzles being a core game mechanic. It also features debugging tools and level editor functionality using ImGui, enhancing development convenience.
Jan 2024 ~April 2024
My achievements
Modular Engine Architecture: Designed an architecture where functionalities are separated into system units based on BaseSystem, managed and executed by the Engine class. Efficiently switches and manages various game scenes (menu, levels, splash, etc.) through SceneSystem.
Flexible Entity-Component System (ECS): Implemented an Entity and Component based architecture, managing component and entity creation via ComponentFactory and EntityFactory. EntityContainer efficiently manages created entities, allowing flexible extension and combination of game object behaviors and properties.
Input and Event Handling: Established an SDL-based input handling system (Inputs) for centralized management of keyboard and mouse inputs. Implemented a basic event handling system using the Observer pattern (Observer, Subject).
Level Management and Editor Functionality: Implemented a system for loading and managing level data (tilemaps, entity placement) using JSON files (FileIO, LevelBuilder). Provides level editor functionality through LevelCreatorScene and EntityManager, supporting tile placement, entity property editing, and level saving/loading.
Debugging and Stability: Integrated ImGui for runtime debugging information and cheat functionality. Implemented custom memory leak detection (DebugNew.h) and crash dump generation (CrashHandler.hpp) to ensure stability during development.
Challenges
Managing System Complexity: Integrating multiple complex systems (rendering, physics, audio, ECS, game logic) and managing dependencies and data flow between them was a challenging task in terms of design and debugging.
Level Editor Robustness and Usability: Ensuring the level editor (LevelCreatorScene) operated stably under various conditions and allowed users to easily create levels while correctly saving and loading all entity properties and interconnections required careful implementation.
Wonhyeong Chae
