xcube2d

For this project, I developed a lightweight 2D top-down shooter built in C++ using SDL2 and the xcube2d framework. The main focus of the project was designing and implementing my own Entity Component System (ECS) architecture to manage gameplay systems such as movement, AI, animation, collision handling, rendering, and projectile management. I wanted the engine structure to stay modular and component-driven, allowing systems to work independently while keeping the codebase easier to expand and maintain. Alongside gameplay features, I also implemented layered rendering, camera smoothing, sprite animation handling, HUD rendering, and audio integration to give the game a more polished feel overall.

A large part of the project involved solving lower-level engine problems rather than just gameplay programming. I created a collision system that handled axis-separated movement and interactions between entities, including pickups, enemy damage, level progression, and projectile impacts. I also implemented projectile pooling to avoid unnecessary runtime allocations, improving performance when firing repeatedly. The rendering pipeline was designed around stable sorting and layer-based drawing so entities would render correctly based on depth and world position. Throughout development, I spent a lot of time researching ECS architecture, SDL rendering behaviour, and optimisation techniques, which helped shape the final implementation.

One of the most valuable parts of the project was critically reviewing my own architecture decisions after development. While the final result was fully functional, I identified several areas that would need restructuring in a future iteration, particularly around separating engine logic from game-specific behaviour and improving scalability within the ECS. That process gave me a much stronger understanding of engine design, API usability, runtime performance, and how important planning is when building systems intended for expansion. Overall, the project gave me hands-on experience developing engine-level systems from scratch and strengthened both my technical programming skills and my approach to software architecture.

Video Demo