CnowDrop Engine
Game/project summary
CnowDrop is a simple 2D game engine written in C++ using the Simple DirectMedia Layer library. It allows the user to create top-down or sidescrolling games, includes a rect-based collision system, a system for binding any keyboard and/or mouse action to user-defined functions, a system managing memory, a sprite-sheet-based animation system, a simple system for adding sound effects and music, and simple GUI prefabs like buttons and labels.
Parallax scrolling is just one of the things possible to implement in CnowDrop
Development
This project was made as a group effort as part of a university class on C/C++. The task was to, with the help of SDL, create a 2D game engine. But how this would be done and how advanced or simple was largely up to the students. Most assets are freely available on opengameart.org, save for the GUI components which were made by the group.
​
My contribution
In the development of CnowDrop, our team of three strategically divided responsibilities based on expertise, capability, and availability, rather than assigning specific roles. I was particularly proactive in driving the project's vision and subsequently undertook significant responsibilities, including the:
​
-
Animation system
-
Collision system
-
Input and control binding system
-
Demonstration game showcased above
​
A notable challenge was devising a method to allow users to define controls with multiple simultaneous inputs (e.g., triggering an attack with a combined "shift" and "e" press). Initially, our input system relied solely on SDL events, which processed inputs individually. This limitation necessitated a comprehensive redesign of the event-handling framework. I integrated SDL's keystate with its event system, enhancing the system's adaptability.
​
A shortcoming of the project was our reliance on SDL_Rects for collision detection, as time constraints prevented the implementation of a more precise pixel-perfect collision system. I intend to rectify this in future updates during my personal time.
Code snippet of how functions are bound to controls and keybindings