Jigsaw Puzzle- Post Mortem


Puzzle Game Post-Mortem

Goals

My goal for this game was not to create a fun game. Since the narrative game was the “fun” game for me but had absolutely zero technical sophistication to it, I decided to do the complete opposite for the puzzle game. I decided to focus entirely on the technical side while working on the puzzle game. Over the summer, I started using C++ in Unreal Engine. I didn’t want to lose the skills I had gained (as we all know, “if you don’t use it, you lose it”), so I needed to practice C++ during the semester. Also, I want to be a technical artist after I graduate, and I think being proficient in C++ will be very helpful for me. As a result, I decided to choose a simple game concept and try to code as much of it in C++ as I could.

I wanted to push my learning as much as I could, so I decided to avoid following any tutorial C++ puzzle game tutorials. I wanted to test my existing knowledge of C++ in Unreal, as well as my ability to figure out coding tasks in Unreal without being spoon fed code by a tutorial. However, while I know the basics of coding in C++, there’s a big difference between that and understanding Unreal Engine’s complex ecosystem with its five million different functions. I felt it would be too hard to focus on both Unreal Engine’s mechanics and the coding side. Hence, I settled on a middle ground between following a C++ tutorial step-by-step and figuring out everything from scratch: I decided to follow a UE4 jigsaw puzzle tutorial and convert some of it to C++.

Problems Encountered

Some Difficulties Finding the Appropriate C++ Function that is Equivalent to the Blueprint Function in the Tutorial

It would frequently take me quite a bit of digging to find the appropriate functions, parameters, namespaces, etc. that I had to use. I think on average, I spent at least an hour researching per four lines of code I wrote. One huge problem that I came upon is when I was trying to find a way to override the ‘on drag detected’ functions.


I used the following functions:

virtual FReply OnMouseButtonDown(FGeometry MyGeometry, const FPointerEvent& MouseEvent); 	
virtual FReply OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent);

When I was supposed to be using these functions:

virtual FReply NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
virtual void NativeOnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& InMouseEvent, UDragDropOperation*& OutOperation) override;

The functions have very similar names but do very different things, so it was easy for me to get them confused.

Bad Documentation

Unreal Engine has pretty terrible documentation, especially for C++. You usually have to  rely not on the documentation itself, but content created by the community. I spent days browsing through past forums and looking for snippets of code and fragmented explanations on how a particular function is meant to be used.

To make matters worse, Unreal Engine recently nuked its documentation website. I think Epic Games was trying to do an overhaul of the documentation, but what happened instead is that a bunch of documentation just got straight up deleted. Unreal Engine 4’s documentation website was better than the new thing they have now. And the icing on the cake is that the old documentation website is basically impossible to find right now. They keep trying to redirect users to their new website, and the new website is shit. Even if a page describing a class or function exists, it doesn’t show up in the website’s search engine at all. In order to access it, you have to go through very specific links in order to reach it. Google isn’t too helpful either. 

Genuinely, sometimes looking through UE5’s source code is a faster way to get information than searching it up on google. God, I hate it here. I still love Unreal Engine, and this isn’t my first time going through this struggle. However, it really is hard for me to recommend this game engine to other people (at least, the C++, I think blueprints has better documentation).

Conclusion

Did I have a hard time making this game? Yes. Did I make a good game? Absolutely not. Did I accomplish my main goal of reinforcing and expanding my knowledge of C++ and Unreal Engine? Yes, and I suppose at the end of the day, that’s what truly matters.

I think one of the most important things I learned is the difference between UMG and Slate for UI. For the User Interface Game project I have this semester, I want to try making a user interface for a simple unreal technical tool. After all, that is what the core of my capstone project will be about. During this project, I got good practice on how to integrate C++ and Blueprints when creating UI.

Get Fyolai Puzzle Game

Leave a comment

Log in with itch.io to leave a comment.