Canine 49 is a short 2D point-and-click adventure game. Our client, Nathan Stewart, is an original author of the game script and his wish was for the game to be made based on the short story he wrote. The request was mediated through Rainbow Connection, a wish granting organization located in Michigan, which got our school in touch with Nathan.
Despite Unreal Engine not being the go-to tech for 2D games, we decided to use it nonetheless. The main reason for this was that since I was a sole programmer in the team, I needed all help with technical implementation possible. Having designers in the team with with previous experience with UE Blueprints was thus a deciding factor.
This project was a great experience for me personally. I was responsible for planning of the technical tasks, implementation of the underlying systems, as well as creating specific tools to speed up development process. Fortunately, we had one full-time and two part-time technical designers who helped me with the implementation. To try out the game for yourself and for further information, please refer to the itch.io page.
The first game system that I started working on was the scene system. The purpose was to have a unified tool for creating scenes. Although Unreal has a concept of levels, I opted for implementing the system by means of blueprints. Each scene is a distinct blueprint class deriving from a scene base class and spawned in the game level.
This allowed easier communication between scenes, avoided having to save and load levels when transitioning scenes and made implementing common functionality easier.
The second important feature I implemented was a movement tool. It gave designers a means of defining valid movement paths thorugh the level. The tool is spline-based and is tightly coupled with the scene blueprints.
When movement control point components are added to the scene blueprint and added to a spline component, the splines get recognized as valid movement paths. The control point scale determined the size of area around control point which should make player walk to a given control point. Additionally, a character scale could be specified per control point. The character scale was then interpolated as it moved between the control points, allowing fake perspective.
The pathfinding was implemented using Dijkstra’s pathfinding algorithm.
Interactible system was a very small one, but used widely in the game development cycle. It allowed the designers and artists to spawn interactibles in the scenes using a unified interface. This meant that there was no need to dive in the code just to add an object with animation and/or sound.
The interactible system was composed of several types of interactibles that were used in the game such as pick-ups, animated interactibles and two-state interactibles. It also handled the desired behaviour such as stopping the sound after leaving the scene or changing cursor upon hovering the object. To allow implementing such a unified interface, I had to created a custom component in C++ that could switch between a static sprite and an animated flipbook.
I was also working on some of the gameplay features. The best representation of this is the final game puzzle. Here the player must reorganize his mechanical dog’s internal piping to expose the malfunctioning part that needs to be replaced.
Although this was just a mini-game, there were surprising number of features that had to be implemented. Namely, drag-and-drop for the pieces, snapping to underlying grid, rotation of the pieces and correct solution checking.
Spoiler alert: The video contains correct solution at the end. 🙂
... Erik is a hard worker; he is quick to respond and works with a smile. He is nice to other developers and enjoys cracking a joke. Erik contributed a tremendous amount of work to Canine 49, and I can say that he was a pillar of this project. He ensured that all tech was functional and improved the game even in his own time. Although his enthusiasm for a project may sometimes lead to late nights, he does so happily...