Lights Out

🎮 Lights Out

A point & click game where you turn off the lights.



Summary

Role: Sole Developer
Team Size: 1
Engie: Unity
Platforms: PC, Mac, Linux
Jam Theme: Balance
Jam Length: 3 Days


Lights out is a super simple game where you keep the lights out. The name of the game sums up what you do. However it’s not that simple. There are 7/15/26 malfuntioning lights in the room which constantly turn themselves back on. Your job is to keep them off for as long as you can. If all the lights are on, you lose.


Approach & Post Motrem

This was one of the first game jams I took part in for the fun of it. I wanted to keep the scope low and achieveable and what I ended up with was a good simple project that I’m still happy with to this day. This was my entry into a Score Space game jam, a jam where streamers play the games in the jam and compete to get the highest score. Each entry needed to have a leaderboard or score display in order to be a valid entry.

This jam was certainly an interesting one. What I learnt the most from this one was the fact that the game can look good and run well, but if the theme isn’t glarinly obvious, people won’t pick up on it. This I feel is why I had such a bad score on the theme adherance this time around. I felt this was rather a shame as I though I had a nice interpritation with the job of the player to keep the lights from taking over by turning them off, therefore keeping the balance in the game. But hey ho, next time I’ll be more blunt with the theme in my game.

On another note, I took the time to rate as many games as I could, focusing on the litle guys. These been the games that get ignored / overshadowed by the polished and looked at titles. I’m pretty sure I only got so many rating because of the fact that I took the time to rate and comment on each of their games.

Leaderboard Manager

🟡 Leaderboard Manager

A local leaderboard solution for Unity.


Summary

Role: Sole Developer
Team Size: 1
Engie: Unity
Platforms: Unity
Studio: 🔗 Carter Games


This asset is a local leaderboard solution for developers to make simple leaderboards to their games. It started out as a personal solution to the problem, but after a few interations I decided to make it public as well for all to use.


The Leaderboard Manager asset was designed to allow users to add leaderboards to their games with ease. Like most of the asset I have developed so far, this asset was targeted at beginner developers who might need a little help with some minor functionality. I worked on the asset for a couple of weeks during August 2020, with the aim to release it by the end of the month. The development of the asset was rather simple and problem free. However I did go ahead after I had spent some time in my industry job going through the asset and making it way better.

The latest 2.x version has a lot cleaner code with the option to have multiply leaderboard and more options to display the results with both a standard text & TextMeshPro display script provided. I also did a much better job with the documentaion, scripting refernece & changelog.

Crushing

🎮 Crushing

A survival game where you dodge crushers.



Summary

Role: Sole Developer
Team Size: 1
Engie: Unity
Platforms: Android
Studio: 🔗 Carter Games


Crushing! is an endless survival game where you control and orb which is surrounded by crushers on all sides, your objective is the guide the orb away from the crushers for as long as possible.


This project was initially just a filler project to give me something to think about over the Christmas break of 2019-20. I had lost a family member and had their funeral shortly after and my mood was not the happiest, especially with my last semester coming up. I was updating my portfolio as I did most breaks, and noticed I had a lack of store released projects. Hence I came up with a simple concept for a mobile game and went about making it.

Initially I was wanted to add all of these amazing features into the game as you tend to think when starting a new project, these included:

  • Enemies that would spawn and target you.
  • Economy that would be collected as the player moved around the game scene.
  • Death recovery, where the player could shield against a crush or recover post death for watching an advert or something.

I made a start on a lot of these features in the early days as well as making a basic movement system where the player could tap and drag the player around to dodge the crushers. While this movement system worked, I would it to not be the best system as the player could easily break out of bounds as well as restricting the view for the player on smaller devices as their finger needed to be on the screen the whole time to move.

Shortly after making a prototype I had to direct my focus back onto my university work as my final major project was coming up. Though I later returned to the project after finishing my degree in early June 2020. This first thing I did was remove most of the code I had already made and refactored the remaining code to use the new standards I had been getting into including namespaces and interfaces.

One of the biggest challenges I had around this time was with the google play services, this was due to it being completely new to me. After watching a few tutorials on the matter I was able to install the plugin and then hit my next problem. When following tutorials you had to authenticate the user before you could use the services, I had it all setup, but it was not working! After a couple of weeks of troubleshooting it turned out to be a build setting that was causing the problem and all was fine.

Overall this was a nice project to work on and allowed me to experiment a little with new features

Save Manager

🔵 Save Manager

A game save management system for Unity.



Summary

Role: Sole Developer
Team Size: 1
Engie: Unity
Platforms: Unity
Studio: 🔗 Carter Games


The Save Manager was an idea I had one afternoon after spending most of a day helping an friend with their saving troubles. I felt that, while the code was really quite simple, that some people may find this type of an asset useful, esspecially for beginners.


1.x

The development of the asset was rather simple and only took a few days to get fully working. I already had the code for saving and loading down, I just needed a way of making the save class easy to use. I decided that I would make an editor window for this. The window was reasonably easy to create, though some of the scaling took me a little while to get the hang of again. I had been a while since I had done any editor window programming. The hardest part of the whole asset was writing the code that would convert the user input into lines of code for the SaveData.cs class. I ended up making a method that would convert the lists which held the user values into a list of strings that were formatted correctly for the SaveData.cs class. Then just using File.WriteLine to write each line into the script one by one. This proved to work well and as long as the user didn’t make a typo or move the script it would work perfectly.


2.x

Version 2 which came out in early 2023 was a total re-write of the asset. The save system uses JSON now with scriptable objects to hold the data. With the scriptable object usage, users can reference their save data with direct inspector referencing if they’d like as well as via code. This version also has new features such as a save editor where you can edit the save data in the editor without opening the save data. A save profile system to load states of the save data for testing & support for WebGL & encryption.

Displace

🎮 Displace

A photography heist game prototype.



Summary

Role: Programmer
Team Size: 2
Engie: Unity
Platforms: PC, Mac, Linux
Jam Theme: Two of: Connections, Heist, Utopia
Jam Length: 4 Days


Who says you can’t shoot all of your problems away, in this game you can literally! A wall built in your path, a lazer stopping you robbing the bank? Well no more! The displacement camera 5000 sends all your problems to a parallel universe where its there problem now…


Awards


Approach & Post Motrem

This was a week long game jam at my university during my final year. I took part as I was ahead on most of my modules and had some time free that I felt I should use to add to my portfolio.

As this was a game jam, I pretty much worked on every aspect of the game with the exception being the games art which I had help with this time around.

The jam was about encouraging collaboration and required that everyone work in a team of at least 2 people. Because of this I tried to find someone from the art department to help save time when it came to modelling and texturing assets. By pure luck I ran into an old friend who I almost ended up living with in a house share for my 2nd year of university. As I knew this person a little I asked if she would be interested in working together, and so we did.

This jam was certainly not an easy one, with a theme that made it hard to come up with a good idea. I had recently seen a tutorial on dissolve shaders and had an old project that I was working on for fun that would take and save screenshots of the game to a set folder. My teammate was happy to use this idea and so we did. I felt the teamwork was there and the game came along reasonably given the time we had to work on the project. The final product was a good ‘Proof of concept’ for the game and won the game the award of ‘Game with the Most Potential’ because of it. One day I would like to go back to this project and actually make it into a playable level, as the idea was sound and just needed more time to iron it all out into an actual game.

Micro Arcade Development

Early Developments

20th – 26th Janurary, 2020

The first week was mostly focused on getting everything setup ready to go for the project, this included getting important documents started, researching solutions to potential problems that may come up during the project and beginning to prototype some of the core features of the software product part of the project.

I started this week by completing the project proposal, a formal document that is required before the project can be officially started. This document summarised what the project was about, some of the aims and objectives and a basic risk assessment to start things off.

On the Wednesday I had the 2nd part of the FMP presentation, this went into more detail about what is next for the projects and how we should be conducting our weekly workflow. They recommend 33 hours a week on the project, which makes sense as it is a double unit. I decided to dedicate Monday, Tuesday, Thursday 9-5 & Saturday 11-7 to the project, making up 32 hours consistently. Then making up the remaining hours each week either on Wednesday afternoons, Friday mornings or on the evenings on the dedicated days.

Later in the week I focused on designing the games for the cabinet. I decided upon a simple 2-layer verses pinball game to be the retro game, it’ll be high score based with lives and bonuses for outlasting your opponent. The modern game is going to be a co-op bullet hell game with 3 parts and a final boss.

Lastly, I worked on the menu system and prototyping the first game. I hope to have the first game feature complete by week 3 and have it tested and ready to go by week 4/5. The menu system is fully setup and works as intended, it is not polished at the moment but that will be worked out as the games get developed.

A Few Weeks Later…

1st – 9th February, 2020

So, this weekend the cabinet got its last piece, the perspex screen. However, there is still a little more to do, as I made a mistake. There has also been a lot of work on the software project since my last post so here is where we are at currently. The main menu has had a lot of work, with a selection of canvases running the system. This is by far one of the biggest parts of the project as it controls all of the settings and game access etc. Below just shows the hierarchy as it currently is along with how the menu system looks right now.

There is still a lot to do on the menu system as the game settings, credits reel & joystick sensitivity needs sorting along with the artwork and sound. This will be worked on periodically while I work on the main games.

Pinball Progress

There has been a lot of work on the code side of things, getting the main systems sorted for the game. Currently I’ve got the following completed:

  • Player Flipper Controls
  • Ball Spawning & Movement
  • Bumper
  • Game Scoring
  • Game Types
  • Game Win States
  • Game Over Screen

Considering I took most of the last week off to take part in a game jam, I feel I did quite well on getting the main mechanics coded. Speaking of game jams…

Game jam???

I took part in the CGFX 2020 game jam last week (Feb 3rd – 7th). I made a game called Displace, where you take photos with a camera to get rid of obstacles and rob the bank. There wasn’t much of a game to show really, due to how much I could do in one week, but the concept is there, and it won the award for most potential which I’m pretty happy with. An extra thing the game does is it saves the photos you take in the game so you can view them afterwards, including the ones the enemies took of you. You can see the game and give it a try by downloading it from it’s itch.io page linked below.
https://carter-games.itch.io/displace

More Cabinet Construction

So, this brings us to this weekend. Where I got the last bit for the cabinet, that being the light strip perspex. But there is a little problem here! This been the fact that it is not quite tall enough for the gap. So, it’s time to get inventive. I have a few ideas to solve this problem:

  • White electrical tape layered up either in front of the Perspex or on the same line as it
  • Modelling wood, cut to size and put on the bottom edge to fill the gap
  • Some kind of corking, not sure if it this idea would work though
  • Get a new bit of perspex, rather not do this though.

I’ve also got a bit more cable management done, having the power strip attached to the back of the monitor mount and a hole in the back board for the power cable to go out of so the box can be closed off and just have a power cord coming out the back.

Last Prgress Update

9th March, 2020

Game Menu

This has had a lot of work and still has a fair bit to go, but a lot of the ground work is there. The script that controls this is by far the biggest script of the entire software product, currently being 585 lines long. There are still a fair few features missing from the menu; currently the game selection is being re-worked to accommodate more than two options & the game settings need implementing entirely. This is work I plan to do before classes on Fridays from now on as I’d like to get it done before April as the last month will be super busy with post production, deadlines & running.

Progress Report

So, on the 2nd of March I had my first graded assessment, this being the progress report. This report had been worked on for the last few months through ungraded mini-reports designed to help make this report easier. 

Ultimate Pinball

So, the first game was planned to be completed by the end of February. Well that didn’t fully happen….Not to say it wasn’t complete, but there were a few missing mechanics that need adding and the game could use some tweaking/polish. But due to the tight schedule and scope of Operation: Starshine (the 2nd game) I had to focus on making that game for March so I can still deliver the two games. Speaking of…

Operation: Starshine

While only 9 days into development progress is good for the new game. Currently all the ships the player can choose to have their stats setup on start, can shoot both their weapons and move around the scene. The movement still needs locking so the players can’t escape the camera and shields need to be added as well as some basic artwork and stages. So basically, a lot to do still 😊.

Cabinet Paint Job

The last major progress has been the cabinet itself. As of today, I’ve got an extra £60 which I can put towards the cabinet. I’m planning on producing some artwork this coming weekend to be printed on to vinyl, giving the cabinet some much needed colour. Other than that, I have painted the sides, back and top black to give the cabinet a two-tone colour effect.

What will run the cabinet? Raspberry Pi?

With the cabinet already mostly done. I had to figure out what on earth was going to power it. Now that isn’t exactly a hard question as pretty much any computer can run the cabinet, it’s not exactly demanding kit for modern day computer hardware. However, I don’t exactly have a spare computer from the last five years lying around so It was time to get creative…

Raspberry Pi?

I remembered that I had an old Raspberry Pi from back when I did computing in school. While it felt like a long shot, I gave it a try. It worked, but one thing struck out instantly, it was terribly slow! Doing a little digging, turns out I had an original 2012 model B. The latest Raspberry Pi was the model 4 B which was close to being a full desktop. So naturally I ordered one of those. A few days later I had the 4 B working with the cabinet. But that wasn’t the last hurdle…

Trial & Error

While the Pi worked, it wasn’t able to run the builds from Unity natively. This was a big problem, as the builds needed to run on the cabinet. So, back to google I went, after some digging, I found several solutions which had varying chances of success. The first method I tried was using Quora, a poorly documented tool that would be able to run x86 applications. However, this seemed to either not work or I mucked up somewhere with the install. Considering everything I was doing was command line, there wasn’t much if any feedback the whether or not I was doing it right. So, I decided to leave that option there and try another one…The next one being WINE, which was a package that could actually be install from the package manager and was made to run windows programs on Linux. One large and seeming undocumented problem, it only runs certain windows applications, you can’t run your own. At least I wasn’t able to find a way to do it, next solution… The last method I researched involved making universal platform builds in Unity and doing some command line to get them to run on Linux. I decided to not even both with this method purely based on the forum discussions alone. It was a big no! Those who tried it and got it working only got around 5 frames per second, on a blank project. Now there were other solutions that may have worked, a good example is Exagear, which seemed promising, but based on the previous attempt I decided to leave the Pi there as performance would seemingly be a big problem with it.

Conclusion

So, what is running the cabinet? Well, my current laptop, an old HP 15-inch notebook from 2013/14 makes a good fit for the role. It can run unity games fine, can run a monitor without needing its screen raised, has all the right ports etc. So that is what I’m going with. By far it’s not an ideal solution as means there is some extra setup for the cabinet that requires the back panel to be removed every time, I want to run it. But it should work for the project. I’m sure if I keep the cabinet after University, I’ll find the time to put a compact PC into the cabinet to complete it.

Transform Colours

⚪ Transform Colours

A transform component visual aid for Unity.


Summary

Role: Sole Developer
Team Size: 1
Engie: Unity
Platforms: Unity
Studio: 🔗 Carter Games


The idea for this asset was a simple one, I wanted to have the transform component’s X Y & Z boxes have the matching colours in the scene editor. This was a one day project as it wasn’t super hard to do and I found it to be quite a fun little asset to make. The asset itself is only cosmetic though I do plan to make a Transform Tools asset that will add extra functionality to the transform component as well as having it work with this asset if at all possible.

However, after the initial release I found several rather bad bugs that made using the asset more of a hinderance than a help. Such as having the rotations reset on select which would muck up rotation on any object selected. I addressed the majority of the issues that I found in the 1.1.x updates thanks to some help from a user on my discord server.

Making a Bartop Arcade Cabinet

Introduction

Making the arcade cabinet was one of the biggest parts of the project. Not only is it a decent size physically, it also is the platform that I’m making the games for, so it needed to be right.

The Design

The design for the cabinet was based on the rough shape of a bar top arcade cabinet. I decided against making a full size one as it would’ve been tricky to move and cost a fair bit more to make. Considering I was doing this project totally out of my own pocket it needed to be as cheap as I could make it while still been good quality.

When it came to getting actual measurements, I used a Legend of Zelda bartop cabinet writeup as a guideline. I mostly used the diagrams to figure out the dimensions I would need for my cabinet. As I was going for a more modern cabinet rather than a retro one, I purchased a budget BenQ 16-9 1080p monitor for the screen. This meant I had to widen the design to suit the monitors dimensions. This actually resulted in a more ergonomic design as the 2 players have a bit more space between their controls.

Materials & Measuring

The material for this project was simple 9 ply, plywood in big sheets. I believe they were 4’ by 8’ but don’t quote me on that. We got 2 sheets cut in half to make squares, due to this we somehow managed to get one for free as the checkout lady, who looked new to the job, but had nice two tone dyed hair got confused and only charged us for the one piece. I’m not complaining as made the materials a tad cheaper.

Measuring each part of the cabinet out was a relatively simple process, having the example project helped getting the right measurements, but measuring it out was tedious as the tools I had to measure with. That being an oversized set square, a bandsaw rail attachment with angles on it and a pencil which was barely visible to me due to my partial colour blindness.

Cutting out the pieces

The next main step was cutting out the pieces. Most of the pieces were simple to cut out as they were 24” wide and varying heights. However not all the pieces were so simple. The sides proved to be difficult as the bandsaw couldn’t get to the line to cut out the shape, the table saw was no better. We ended up getting close with the bandsaw but cutting it out in random shapes in steps and then smoothing it out using a mounted router.

Assembly

Assembling the cabinet together was a puzzle really. It was more or less; get this piece to fit here, at the right angle and with the right depth so it looked good. We put the sides on first so that it could be used as a base for the rest of the pieces and gave the structure some rigidity early on. The bottom piece was a simple fit with a few supports on the interior of the cabinet, though that was the only quote on quote easy piece.

The next piece was the control board, where the joysticks and buttons for both players would be. This was a hard piece as the drill we were using couldn’t handle the cuts for the larger buttons and couldn’t reach over half the buttons on the board. Because of this we ended up using a more powerful hand drill, with one of us drilling while the other held the board as still as possible. This worked surprisingly well all considering. We made two mistakes. The first been the top row of buttons which were there for menus and confirmation in the games. They were supposed to be all in a straight line, but a mistake on measuring meant that the outside hole was slightly higher than intended. We hid that mistake by matching the hole on the other side and making it look natural. However, the left players joystick hole also went a bit weird. While cutting the board wasn’t quite flat on the table and we had a few minor scrapes on the edge which left a not perfect hole. We planned to hide this with the provided covers for the joysticks and left it at that.

After that was probably the next hardest piece which was the monitor. The monitor I had brought for this project was a 21.5” 1080p BenQ monitor. I got this one as the reviews for it on Amazon were good and it had the Vesa 100 x 100, Vesa been a universal wall mounting size format with several variations, most monitors you buy will have them. I planned to use these mounting holes instead of the base that came with the monitor when mounting it into the cabinet as it would be easier to maintain. The piece itself first needed cutting. It was the standard 24” wide but needed a hole in the piece for the monitor screen to show through. I went with the monitor been behind the board, so it added a little depth to piece which was needed. The biggest challenge here was getting the mounting right, which ended up requiring a lot of little pieces to get the mounting screws far enough away to not cause damage to the monitor while also holding it firmly in place. As with the majority of the screws in this project we used a wood glue along with screws to hold everything in place. The exception here is that the monitor could be removed from the piece if needed by unscrewing the 2 screws either side holding it in place. This may prove to be useful later on if I decided to repaint the cabinet.

Next was the speakers. To save on cost and as I happened to already have some, I reused an old Design Tech project that I did in Year 11. This been a RKAmp4 kit which we assembled as part of a speaker project. Now I kept mine and the sound quality is actually not too bad for a simple kit. It does have a downside that is phone signal interference is picked up, but this is something I may be able to fix in the future. The board itself and the speakers all still worked, it did need a heatsink to stay cool, which was mentioned in the documentation for the product when used with high power (12V). Conveniently the amplifier which was the component that needed cooling had a small hole big enough for a screw to go through. So, we attached a left over heatsink which we had found some time ago and mounted it in the optimal position for cooling, drill a hole for a screw and attaching it with a screw through the hole in the amplifier and the heatsink. The speakers were mounted in 2 holes which were cut out with the drill, which took a while as the drill had trouble with the layers in the wood. We managed to get around this by cutting until the drill bit broke through, then flipped the board over and cut in from the other side and meeting in the middle. The speakers also got a little screen which was bit a meshed metal which is just there to protect the speaker from being poked. All the parts were just screwed with standoffs on the PCB board directly to the wood, with some cable management and clips to make the connections to the board less likely to fall out.

The last main panel which is the top front piece is currently not done as I didn’t have the bits for it. This is a part that will be added in part 2. The remaining pieces, those being the back and top pieces were just a simple fit into place with screws so they could be removed as needed. The top had its edges cut at angles so they would end up flush to the front and back pieces.

Painting & Decals

After the main assembly was done it was time to paint. I went with a grey colour for a start, with 2 coats on pretty much every piece, I could always get a new colour and change it later on if needed. I do plan to add some artwork to the sides and control board in the future. This been either acrylic prints or something similar that I can just glue to the pieces with minimal tools to hand.

Conclusion

For a 6-day project, this went rather well. Now its not fully complete, hence this been listed as part 1, but the majority of the work is done. Currently the list of things still to do is:

  • Paint one of the joysticks hole covers white, so it matches the joystick.
  • Attach the joystick covers to control board.
  • Design & print the artwork for the cabinet, though this will probably be done during the unit.
  • Find & attach an opaque material for the top front piece as well as some LED scripts to light it.
  • Drill some holes for air flow
  • Decide on the system to run the cabinet, this being either my laptop or a raspberry pie or something similar.
  • Install internal plugs on an extension bar so the cabinet can be turned on and off when powered at the wall or with a button or switch on the back of the cabinet.

Audio Manager

🔴 Audio Manager

A game audio management tool for Unity.


Summary

Role: Sole Developer
Team Size: 1
Engie: Unity
Platforms: Unity
Studio: 🔗 Carter Games


The Audio Manager is a scripting solution to help developers implement audio into their games. The asset has several scripts for playing sound effects and music with custom editors to make a easier interface for the user.


The idea behind this project first came about in my second year at university where I started to get into unity editor scripts. We were taught how to make a simple audio manager using 2 lists, a dictionary & a simple play clip function. This became the basis for this asset. After I learnt the script and how it operated I added some additional methods that would play the audio in different ways, such as playing from a specific time or with a delay before being played.

A few months later I was introduced to unity editor scripting by some students in the year above in an optional seminar called VGA (Video Games Academy) which was run by final year students. This seminar inspired me to look further into editor scripting. As I learnt editor scripting, I began making custom editors to make the scripts more appealing in the inspector as well as automating the process of adding clips to the lists. I felt the result is a decent asset, with plenty of options to expand the asset in the future. This was the first version of the asset (1.x).

After having the asset out for a while, I decided to improve it further by making the inspector look better. I also changed the backend from lists to scriptable objects in version (2.x) which also re-worked the whole asset for the better in the backend. This helped keep the data clean and hidden while also making it possible to add even more functionality. This also had some more options for hotswapping audio libraries, a better music player & more. This version has been out for around 2 years with several patch updates to fix bugs found.