JULY 19 – JULY 25
We got some useful feedback from the playtest, although it was mostly things we knew. This sprint had two endings really, the Final Presentation on Monday the 23rd, and the Exhibition Day on the 25th. We had to do some heavy prioritisation in order to get the stuff we wanted to show done by Monday, and the things we wanted to make them feel done by Wednesday. I totaled 53,5 work hours from July 19 to noon on July 25, excluding the Presentation, with 48 Tickets on HackNPlan.
When I talked to Andreas, he said that almost all character blurbs would be triggered by entering a node, which was easy enough to implement. What he didn’t mention however was that most of those blurbs had a bunch of different conditions attached to them, which caused the implementation of the blurbs to take a lot longer than anticipated. But I got them to work fine. We made a few modifications together, and in the end I think we managed to have some pretty helpful blurbs in the game.
I also made two small QOL improvements to the blurbs. When a new character blurb is displayed, I made it so that the old one disappears, and there is a small delay before the next appears. I got the idea from Mark Brown.
I also implemented that the currently shown blurb is updated to the new language, when the language was changed.
The Camera finally got the love it deserved – and really really needed – in this sprint!
I improved the controlled camera movement in little bits, I limited the rotation, and adjusted the speed to more manageable levels.
I also convinced the team to let me switch the camera from orthographic, or “fake orthographic” to a straight up 90° FOV perspective camera, and I think it made the game look a lot better.
I finally managed to implement the movement swipes to work properly in any camera angle, once again my opponent here was my lack of knowledge in matrice calculations.
We also managed to implement both the “Camera Cutouts”, which is what we called the camera moving to a different transform for every node, and nice transitions between each level!
The Camera cutouts were achieved with lots of empty actors in each level, each corresponding to one of the nodes.
The cloud of small white balls you see hanging over the right side of the level are the camera cutout actors. Tatjana actually placed them, in all levels!
Implementing them is actually pretty easy with unreal:
- You move the viewport view to the angle and position you want for the node
- You create a new empty actor, right-click it in the world outliner and select “Snap Object to View”, which applies the location and rotation transforms on that actor.
- Now you only need to assign the cutout actor to the node, and that’s it!
When the player moves from one node to the next, the camera tweens from one Cutout to the next.
When I had the camera cutouts working, I thought that I could probably use them to create some pretty fancy camera transitions.
I implemented functionality to tween the camera from an “intro cutout” to the first node cutout when the level starts, and from the final node cutout to an “outro cutout” when the final node is reached. Then I placed the nodes so that when you enter a level you do not see it at all, and when you leave it, you also move away far enough to not see it anymore.
The next level loads while the player only sees the skybox of the levels, so the transition feels like you didn’t even switched to a different level.
As Tatjana didn’t have the time to do these cutouts, I was done with the implementation on Tuesday noon, I did them myself.
I arranged them so that you’re leaving each level towards the opposite direction from which you are entering the following level – making it appear like one smooth movement.
I was pretty proud of that. Check them out in the video below!
Bytes and… Bobbers?
Game over screens
I finally got to implement feedback screens for when the player wins or loses. Dmitry set them up in the UI, and I setup the function calls.
We actually had a very heated discussion about some aspect of this, between Tatjana and me on one side, and Andreas and Anna on the other.
I don’t remember if it was only a communication issue in the end, but the main topic was, that Tatjana and I wanted a popup for every win and lose condition, with a Button you needed to press in order to continue, while Andreas and Anna didn’t want more popups or button presses. My argument was that some player feedback was necessary, and making the popups disappear after a certain time was a terrible idea, especially considering the game was designed for kids who might not be fast readers.
In the end we settled on having a popup when the player loses, with the popup itself being a retry button, and one when the player wins the final level, where the button returns the player to the world map.
The missing feedback on the intermediate levels was solved with the camera transitions (which came later).
Tatjana improved a lot on the next iteration of VFX with feedback from most of the team, and I helped her implement it into the levels.
I implemented a game icon, and a splashscreen on the last day, which were kindly provided by tatjana, despite her having almost no time at all.
I also improved on the credits a bit, adding license abiding credits for each of the songs we use in the game.
I’ve had this one itch that I wanted to scratch from when I first implemented the lifeboat. Before, the model of the player would switch to the lifeboat once it reached a flooded node, which would result in the player model visually walking over, or through water. It really annoyed me, so I was very happy when I managed to find the time to fix this Bug at the very end.
That was also the lowest-priority of all Tasks left for me in HacknPlan, so I managed to finish every single task in time!
Many Bugs Were Harmed
Finally, I tackled all of the Bugs that cropped up during development, including but not limited to:
- the water level meter not updating at the start of the level
- the Pickup Icon & Victim icon not being displayed when picked up
- you could enter the goalnode without the victim, but not leave
- not always displaying the ideal number of turns in the UI
- floating characters, caused by slightly changed level environment positions
- a bug where loading levels didn’t work “in standalone” anymore
- a problem where Tatjana accidentally overwrote her last two hours of work in sourcecontrol
- the hitbox for the disastermarker
- some faulted texts, caused by the fact that unreal doesn’t import umlaute into the data tables from csv files
- Lots of other Localisation bugs, and bugs around localisation, like the radio buttons for switching loca not being initializied
- including one Last second bug which caused localisation to not work at all on computers which are not set to german system language
- at least 4 different bugs with camera movements
- a visual bug with switches
- a bug where a “saved up move” would be simulated although the game was in a “game over” state
- a bunch of UI scaling issues (although not all of them)
- removing all of the Debug prints
- a bug where the player wasn’t properly killed by electrocuting the flood on certain nodes
- some error messages that popped up after collecting the victim – apparently not necessary, but annoying and worrying
To close it off, here is a full playthrough video of the version we showed on Game Exhibition Day.
A special thanks goes out to Sourcecontrol for making these Blogposts happen. As I unfortunately didn’t have the time to write the posts during the development process, I did four and a half today, on the 26th, and it was really nice to be able to go back to the last commit on the last day of every sprint, and take screenshots and videos of the state of the game at that point in time.