William McClumpha

I'm William McClumpha, a software developer with a strong focus on computer games development, particularly programming.
Feel free to have a look through my site to find out more about me, along with projects I've been working on.
Thanks for visiting!

Projects

Some of the recent projects I've been working on, either individually, or as part of a team.

Planet Library is a mobile app designed for kids, which aims to simplify digital library experiences, while also providing games to play from within the same app.

CodeDefence is a mobile-based tower defence game, designed to support beginner programmers to help develop their skills, and test their knowledge along the way.

Paddle Rally allows you to battle it out against the computer or a friend, in a top-down combination of ping-pong and air hockey, playable on phones or tablets.

Other Projects

Some other projects I've worked on, either individually, or as part of a team.

GigMate is an event tracking app, focused on concerts and music festivals. GigMate will keep track of events, and provide various functions based on the type of event.

Designed to teach basic money management skills, CashOut tasks players with making choices based on random events, balancing their mood, money, and study hours.

A simple but effective weather web-app, which allows the user to store multiple locations, and will show the current weather for any of those locations when requested.

Beach, Please is a short, fun arcade game, designed using the Phaser JavaScript framework. Players need to complete each level by avoiding various obstacles.

Created as part of a level design-focused class, No Rich, Sherlock gives the player one task: find the key to escape the room as soon as possible.

Planet Library

Continuous Development

Employed By: Solus UK Ltd

Planet Library is a digital library app designed for kids. By simplifying and centralising digital library experiences and functionality with fun games and other interactive elements, the app aims to encourage kids to visit their local library and find the fun in reading.

The app has been designed to automatically change its branding and functionality depending on the requirements of various libraries. Users will be able to enter a library code, along with their user details in order to set the app up for the first time.

Each main page of the app is linked to a related "planet" on the main menu screen, giving users a visually-interesting way of accessing screens. Some of these planets include book search, nearest libraries, events, library card, and rewards screens.

The rewards screen contains the app's various small games, along with a "Pokemon Go" style character hunt. This character hunt is restricted to libraries by using Bluetooth beacons, and allows players to catch characters in AR using their phone's camera.

GigMate

In Development

Team Size: Solo

GigMate, an event tracking app currently in development, is designed to track concerts, music festivals, and other similar events. These events can be added by using details which the user enters, or in the event on a festival, by searching the online clashfinder database.

When adding a concert, the app will keep track of the band, venue, date, and event time. A countdown on the home screen will display the number of days remaining until the event. The user will also have the option of setting a reminder, which will trigger a set number of days before.

Festivals work slightly differently to concerts within the app, as festivals will support clashfinders, which will allow the user to see which bands are on each stage on any specific day of the festival. Users will be able to select the bands they want to go to, and see these separately.

Although the main foundations of the app have already been developed, GigMate is being developed by myself in my spare time, which has resulted in some features taking longer than normal to implement. A list of features still to be added is detailed below.

Features To Be Added

- While concerts have been fully implemented, festivals still require more work in order to be fully implemented. Festival data is currently being parsed, but the clashfinder UI still needs to be created in order to show the user this data in a meaningful way.

- Users can currently search an online database in order to find festival clashfinder lists, which will then be imported into the app. However, the user cannot currently create their own in the app. In the future, users should be able to create a local clashfinder instead.

- UI improvements could be made throughout the app, in particular, the festival clashfinder search page, which feels cluttered in the current version. The concert event creation page could also be tweaked, likely by using smaller colour buttons.

- Currently, no integration exists with could services or social media accounts. For the first release of the app, I would like to have cloud storage implemented, which will allow the user to back up their events. Social integration would also improve the app.

Clear Weather

Team Size: Solo

Clear Weather loads the current weather information from BBC Weather and displays it for any given UK location. This information is gathered using BBC Weather's RSS feed. Multiple locations can be saved for future access. New locations can be added via the user's GPS location, or if preferred, by manually entering a postcode.

The application can be saved to a device to allow faster loading and offline usage, using browser caching. This is done using a progressive web application design. The latest forecast is stored directly in the app's cache, which allows the last forecast information to be checked in the event that the device loses connection to the internet.

Future Updates

- Only the current weather is stored at the moment, with no information given for what the weather will be like in the future. I'll be adding the ability to check the next 24 hours of weather at any given location, which will make the app more useful when used offline.

- Because the app is based on UK postcodes using BBC Weather's RSS feed, the app will only work with UK locations. Ideally, I'll be able to update the app in the future to work worldwide, using an alternative service to gather the relevant weather information.

- While the app will run fine on a desktop browser, it's been mainly designed as a mobile-first experience. Because of this, the layout is far too spread out and contains too much white space. This will need to be updated to suit desktop browsers better.

- Currently, the app uses the standard jQuery Mobile design, which doesn't really give the app much personality. I'm planning on completely overhauling the app's design in the future, likely based on the Material Design style, or a similar UI framework.

Beach Please

Team Size: Pair

Beach, Please is a simple side-scrolling game in which the player controls a beach ball rolling along a beach, jumping and avoiding obstacles along the way to reach the end net.

The game takes place across three levels, each set at different times of day. Sandcastles will need to be jumped over, while parasols will need to be jumped onto and rolled over.

Development Experience

The game was designed as a first attempt at a HTML5 / JavaScript 2D game. We used the Phaser game engine to build the game, along with Tiled for the creating level layout, and WebStorm for coding and website designing.

Our team did not have an artist, but because we wanted the game to have a specific style we could not find elsewhere, I had to create the art assets myself. For this, I used Adobe Illustrator and Photoshop for all of the assets.

CashOut

Team Size: Pair

CashOut is a decision-based mobile game which is designed to teach users, especially younger users, the benefits of good money management. The player will be given 30 decisions to make over the course of the game, with each decision affecting the player's cash, mood, and study hours stats.

Players should aim to make decisions which will allow them to build up a decent savings pot, but will also need to make sure to spend money when appropriate to improve their mood and study hours. This should teach players the benefits of creating a healthy balance between saving and spending their money.

After each decision made, the game's date will be increased by a few days at a time. At the start of each month, the player will receive their monthly income, and any monthly debits will be subtracted. At any point in the game, a random event may be triggered which the player has no control over. This will have a either a positive or negative effect.

Throughout the game, players can check their current income and monthly debits to get an overview of their disposable income. Every 10 decisions, players will be shown a summary of their performance so far through the game. There will be a final performance summary at the end of the game, which will be uploaded to a database for analysis.

The game was designed to be highly modular, allowing for new events to be added and removed with ease. Events have the ability to add direct debits to the monthly debits list, along with follow-up events, which may trigger a related event later in the game.

The player's performance and stats are tracked in the background of the game, comparing their current stats, amount of debt, highest spending category, and various other statistics. These were uploaded to a database to allow them to be analysed as part of the project research.

CodeDefence

Team Size: Solo

Designed for beginner programmers as a way to support their learning experience, CodeDefence attempts to combine a tower defence game with programming-based knowledge testing.

The game follows standard tower defence game rules, where waves of enemies spawn in each level, and the player must place down turrets and manage their money in order to destroy the enemies.

Where CodeDefence differs from a standard TD game, is that the player's programming knowledge will be tested along the way. Upon first starting the game, the player will complete a programming quiz, designed to test various parts of computer programming.

After this first test, players will have the opportunity to answer programming questions, based on the current level's learning topic (syntax, parameter passing, etc), and will gain bonus coins for answering correctly, giving them an edge in the game.

Players will be told on the spot which questions they answered wrong or right, giving them instant feedback on their learning. As the player progresses through the game levels, new learning topics are unlocked, along with new enemies and turret types.

When the player has completed the game, one final test will be performed, based on the topics the player has been tested on so far. These results will be compared with previous results, in order to evaluate how the player has progressed since first playing.

Development Experience

As this was one of the first projects I have developed completely solo, I had to find a good balance between my skills and available development time. As this game was part of my final honours year project, I had to complete my research dissertation along with planning, developing, testing and evaluating the game.

Unity was my chosen game engine due to my previous experience with the engine, along with the simplicity of creating mobile game builds. I knew from the start that performance would need to be a strong focus for a mobile-based game, and by focusing on this from the start I was able to create a game which runs well on even the lowest-end devices.

The game was designed to be as modular as possible to allow quick iteration of game levels after the foundations of the game were in place. Using A* pathfinding allowed me to have the enemies automatically find their way through the map, instead of having to manually create waypoints for each level.

Spawn points for the player's turrets were created using a script which defined a grid, based on the object (platform) the script was placed onto. This grid then created spawn points on the outside of the grid square. These spawn points contained information such as a reference to the child turret when spawned, and the intended rotation of the new turret.

Player performance was analysed and tracked in the background of the game, and saved in their player profile. This was then linked to their anonymous online ID using a Firebase database. This allowed the player's performance to be analysed later as part of my dissertation, and also allowed me to inform the player of their progress.

Bug testing was routinely undertaken throughout development of the game. Due to time and skill constraints, creating custom models for each level would have taken up too much time. Instead, I went for a simplistic design, and spent the extra time on bug testing. I felt this was a better approach, as I would prefer the game to be as polished as possible.

Future Updates

- Support for multiple development languages, rather than just C#, could be added to the game through downloadable level packs. Support for more advanced programming techniques, rather than just the basics, could also be added in the same way.

- As the current level design is quite simplistic, I would love to create custom models for each individual level in an attempt to make each level feel more individual and interesting. I would likely still stick with voxel models if new level designs were implemented.

No Rich, Sherlock

Team Size: Pair

No Rich, Sherlock was created as part of a level design module, in which we were to create a level which not only looked aesthetically pleasing, but was also designed around a specific gameplay mechanic.

The player was tasked with exploring the room they were placed in and escape the room as quickly as possible by finding the door key. Players could move various objects throughout the level to look for the key.

Development Experience

This was our first time working with Unreal Engine, and due to this, there was a steep learning curve at first. The blueprint system specifically was strange to get used to at first, due to a background in writing code, rather than connecting up pre-written code modules.

While various objects through the level were pre-made and imported from online sources, the apartment itself was custom modelled using 3DS Max. The skybox was designed by stitching panoramic photos into a sphere, and various level textures were also custom mode.

Paddle Rally

Team Size: Pair

Paddle Rally is a two-player arcade game, allowing players to play against the AI, or another human opponent. Match settings allow the score limit and ball speed / AI difficulty to be tuned to the player's preferences, and are saved between sessions.

Player profiles can be added to the game to keep track of wins and losses, which can be compared in the high scores table. Game options provide the ability to change the game theme, graphics settings, and music, sound, and vibration toggles.

The game has been developed with a mobile focus in mind. Simplified graphics and efficient code ensure the game is playable on a wide range of devices. Scalable UI elements allow the game to be played on any screen size, including tablet devices.

Integration with Unity Remote Settings allows the game's difficulty settings to be changed remotely based on player feedback. Links to social media and email links allow players to provide alternative feedback on the game.

Future Updates

- Facebook and database integration could be included, which would allow players to have a gameplay profile which would track their progress and performance. This would in turn be tied to their Facebook account.

- The gameplay at the moment is quite simple, and while some users may prefer this, others might want a more in-depth game. For this reason, alternate optional gameplay modes could be added alongside the standard game.

- A blackout mode could be added, which would obscure the middle of the gameplay screen. This would leave only the area just above the paddles visible, requiring much faster reactions to hit the ball back to the opponent.

- An arcade gameplay mode could be added to the game as an optional mode. This would include various power-ups to change the course of the match, such as a temporary shield, multi-ball, or changing the ball's speed.

About Me

I'm a software developer, with a strong focus on computer games development, particularly in gameplay and UI programming. I've always had a strong interest in technology and games, and the two go together perfectly. I love not only learning how things work, but why they've been made in that way. I regularly play through games thinking about exactly how certain parts were programmed, and which approach I would follow to achieve similar or better results.I love being on the cutting edge of technology, always reading up on the latest developments in a wide range of subjects. Whenever possible, I try to get the latest gadgets to try them out and develop small programs for them, such as virtual reality, smart watches, and any other new up-and-coming developments.Developing programs and games is something I thoroughly enjoy, all the way from designing the UI and logo, to developing the code and solving problems, and anything in-between. My aim is to develop my programming skills to an expert level, and get plenty of experience in developing programs and games, with an end goal of getting a lead development job in a software company.During my time in university, as well as in my own free time, I have developed various programs, apps, and games, using a wide range of technologies and platforms. I have also recently started working with a friend, Alasdair Hendry, to create games together. We're currently working together under the brand Megabite Studios, and we're hoping to both expand and develop our own skills, and create great experiences for others to enjoy.Details of some of the projects I've worked on individually, or as part of university work, are shown in the "Projects" page, along with online demos of some of the projects. Games I have worked on as part of Megabite Studios are also summed up in the projects page, or can be viewed in more detail on the Megabite Studios website.

My Skills

For the past few years I've been learning mainly C#, with some experience in various other languages, such as JavaScript, Java, and Swift. I've been focusing on C# for desktop programs and games, and JavaScript for websites and web-hosted applications. I've recently been learning Swift for iOS development, and have had some experience in Java when building Android apps. I've also been using Unity to create both desktop and mobile games, and I feel comfortable with my level of knowledge in it.I have worked on web development in university, mainly building persistent web apps which can be used both online and offline using the browser's storage. Along with mobile web apps, I've been practicing developing mobile apps for both Android and iOS in my free time. I've only recently started working on these, but I'm constantly developing my skills in these systems and hope to build up much more experience as I continue working on them.Photo and video editing are areas I've always enjoyed, even before I started working on programming and games development. I've had plenty of experience using Adobe Creative Suite, and many other similar applications. Along with all of these skills, I've also gained a lot of strength in team environments, between working in groups in college and university, working with colleagues in work, and working with friends on personal projects.