Working At Canalside Studios

At the end of my second year at The University of Huddersfield, I was given the choice to take a placement year before my final year to strengthen any skills before tackling final year projects. I was lucky to have gotten onto the placement in the universities indie game studio, Canalside Studios set to start in August of 2018.

Starting August, the team met each other, 8 of us in total (4 Designers and 4 Programmers) along with our Bosses for the year Matt Novak and Duke Gledhill. We then spent the next two weeks working in a game jam type routine to get used to working with each other. After the game jam we was told to come up with some proposals and presentations on the games we would want to work on over the year.

Coming the next meeting a week later we proposed a range of different ideas that we wanted to work on and the following ideas were chosen for development, Myself and Reece Kuby was given the virtual reality experience game to work on while the rest of the team took on the Ori In The Blind Forest as Matt and Duke felt the VR idea may be out of scope but chose to allow us to work on it with a three month time constraint, we were told to have something to show by the end to help decide whether or not to continue development of the game.

Game Ideas Description:

  • Virtual Reality office experience working on stabilizing a power core with an underlying story of that the experience isn’t actually real.
  • An Ori In The Blind Forest esc game with a slime main character that would eat certain things and gain its power/ability to complete sections of the levels.

My work for the next 4 months was mainly getting a working vrtual reality system working within Unreal Engine for the project myself and Reece Kuby was working on. I started with working on the player pawn and hand system. The pawn being the player’s head and management class to pass input/information to each hand.

An earlier issue I had when working with Unreal Engine and virtual reality was that the way SteamVR updates the controller’s position when tracked in a room (for the HTC Vive and Valve Index specifically) it causes a disconnection between the visual representation of the hands and the collision asset of the hands.

This can easily be fixed by checking the Disable Low Latency Update option on the UMotionControllerComponent assigned to one of the VR controllers. You could also implement a better fix for this by dynamically changing Low Latency Updates on the controller based on current collisions, you may want to do this as disabling it does cause the controller to lag behind your hand which is more noticeable in the Steam overlay.

I used Unreal Engines interface class to create my own interface that could be added to any interactable’s I make down the line, significantly reducing the amount of code I would normally have to write to achieve the same result. I preceded to implement grabbing, releasing, twisting, pointing, and teleporting for objects with physics enabled and not attached to the player. The list of virtual reality-based classes made for the game Little Awesome Dudes can be seen below.

List of the main Virtual Reality Classes:

  • VRPawn
  • VRHand
  • VRMovement
  • HandInterface
  • VRFunctionLibrary
  • GrabbableActors
  • RotatableActors
  • SlidableActors
  • Interactable BP version for quick prototyping.
  • PeelableSplineActor.
  • PressableStaticMesh
  • RotatableStaticMesh
  • SlidableStaticMesh
  • SlidableActor
  • SnappingActor.
  • SnappingSlidableComponent.
  • Soft Collision Box Component.
  • Arcade Machine System.
  • Wire Spline Actor.

Steam Page:

Below is a quick video of my testing room I used while developing Little Awesome Dudes to test the functionality of the VR system along with a quick description of the interactable’s used.

The Computer System

One of the things I made that I thought was pretty cool was the fully interactable computer system with a working mouse, mouse wire, keyboard and computer system. I described the technical aspects in the video, but I will mention again that when building the game out to an executable would cause the mouse cursor on the screen to not follow the movement of the mouse. After debugging the game for a while and having Mark at the studio help with the issue, he found that the UWidgetComponents parent was using optimization macros which were causing it to optimize away the functionality we needed.

The culprit of the issue that cost a big chunk of development time was a single definition to prevent optimization. 

					void UVRWidgetInteractionComponent::UVRWidgetInteractionComponent()
	GSlateFastWidgetPath = 0;

The following code  added into in the constructor of the custom widget component fixed the issue.

Rendering the UI for the computer screen was simple enough as the widget renderer built into the widget has a function for drawing the widget to a UTextureRenderTarget2D which can then be passed to the material for the computer screen itself with the correct offsets for its UV location.

The way we ended up doing the texturing for the keyboard was interesting as I needed to use the same mesh for the majority of the keys so it was between assigning the key mesh something like 20 UV maps to change location on a texture which is obviously the wrong way to go. So, we decided to instead have a texture for the keycap and another texture with the key letters which were placed using material instances to position them on each key. The key names were then set to the name of what they were which made the rest of the functionality fairly simple to implement.

The functionality of the computer its self physically like the buttons, mouse, keyboard, and the user interface for the opening the start menu and windows were done by myself, the responsibility of the computer system was later handed to Mark and Sonny to finish the window instancing, store among other things.

The Arcade Machine System

The arcade machine uses the following classes/actors to help emulate an arcade machine experience in virtual reality.

  • Arcade Machine
  • Arcade Game Template
  • Arcade Joystick

The arcade machine class keeps track of its current coin count, the game that is slotted into it, and the functionality for placing the rendered game image on the arcade machine screen material. It also takes care of passing the input to the current arcade game from any five of the buttons on the arcade machine (the money release button does nothing just makes a sound) and the input from the joystick direction.

The arcade game template class is a parent abstract class that has a scene capture 2D to render the 2D game to a flat image. It also creates a default name for the game for the arcade machine to use in certain cases and has overridable input functions called again from the arcade machine when pressed/moved.

Classes created for invaders game:

  • Invaders
  • InvadersSprite
  • InvadersFlipbook

The invaders class has the arcade game template as a parent and overrides input, also contains all the game functionality for the invaders game itself like tracking the game state and spawning waves, shooting, etc. The invader’s sprite and flipbook classes are written to have overlap delegates which check the tag of colliding actors to help implement the functionality for the bullets from both enemies and the player.

Extra / Home work

During my time at Canalside Studios developing little awesome dudes there were a lot of ideas that I had that were either too ambitious or didn’t have enough time to allocate to anyone within work hours. So I made sure with my bosses Matt & Duke that it was ok to work on the game at home and as it is a smaller indie studio they didn’t mind as it would improve the game anyway.

I decided to work on a few things that I had suggested, some things took longer than others, especially when I’d get caught up in trying to fix issues/bugs at home instead of working on extra things for the game. The things I managed to work on were.

  • Arcade Machine System
  • Hover Havok RC car
  • Flux 8 Teddy
  • Pen & Paper system
  • Piggy Bank

3D Modelling

All of these was previewed in the video, I started doing a lot of research in my spare time into 3D modelling because if I wanted these things in the game, I would have to model them all myself while making sure they are consistent with Joe and Reece’s models. I was spending so much of my time programming it was really relaxing to do this alongside programming as it was so different. I learnt how to use Blender 2.79 later changing to 2.8 after the new release. I also learnt how to use Marvellous designer to create the Flux8 teddy and Substance painter to texture it and all the other assets I created.

I thought it would be cool to include some assets from other games in the form of the Flux8 teddy and the RC hover havoc hovercraft. There was a challenge to model/texture due to my inexperience with modelling but after a lot of research and practice, I was able to get decent results and skills which I plan to use in projects going forward.

The models I ended up creating were:

  • Arcade Machine
  • Hover Craft (Texturing and re-modeling areas, redid UV’s)
  • Hover Craft Controller
  • Flux 8 Teddy
  • Piggy Bank
  • Coins
  • Players Hands and animations
  • Pen, Paper, and Rubber
  • Cardboard boxes and Tape

After creating all of these assets it gave me a much greater understanding of the designer’s workflows I was working with as well as allowing me to discuss how models needed to be origin wise, or for whatever reason like for physics assets when loops are needed and it needs to be rigged a certain way for grabbing different bodies on the physics asset. Overall, I think it really helped and improved the way I work myself and with others.

Final Words

I feel that working at Canalside Studios has really helped me improve my skills in C++, Unreal Engine, and working as a team to produce a game. My biggest takeaway is teamwork and organizing as it greatly reduces the time it takes to get a polished product. Going into my final year I feel more ready than second-year given the amount of time I had to put into developing this game alongside my colleagues at Canalside. It was overall a very positive and beneficial experience and will go a long way which I hope to show in my projects from this point forward.

4 thoughts on “Working At Canalside Studios”

Leave a Comment

Your email address will not be published.