Below is a collection of my personal projects, on each page you'll find details about the projects such as the problems they were designed to overcome and the technologies used to run the systems
MultiMall
2022-Present
Multimall is a business management simulator / sandbox, you're in charge of running and maintaining the shop of your dreams, will your business venture succeed or will the Corporations take you for every penny you're worth.
Features
Images
If you're looking for images of MultiMall I haven't got any "professional" images, you can have a browse of my Mastodon for some in development pictures
I've been working on this game for over 3 years, chipping away at it in my spare time in between a very demanding day job. I've also re-written or 'refactored' several parts of the code as I became more confident with the D programming language.
It isn't a game per say, it's an engine. The system is based around data-based programming, the engine is just running LUA scripts in a simulated environment. This allows for fast iteration of game logic and means the game doesn't need to be re-compiled, only the scripts have to be updated.
Every aspect is customisable, there is enough overhead for custom NPCs, custom Items, Custom Shops, custom anything. I started programming because I wanted to make a minecraft mod when I was younger. I remember making some silly mod for GameDev Tycoon too, that was Javascript though. In some way this is my version of that, letting the user create silly custom shops if they want too, I'm not responsible if you break anything but the engine is written in such a way that it would be hard to do that.
ChimeIn
2018-2019
WebService running on a Debian server. Using the Spotify API to search for songs, add songs to a group queue, remove them from that queue and save to your personal liked songs through the queue.
Images
ChimeIn was a project I created during my 2nd year of computer science studies at Swansea university.
I was going out to mixer events and the music at these events was just on someone's laptop going into a speaker via an AUX cable or on their phone connected to a bluetooth speaker somewhere in their flat.
Spotify was the platform of choice of most students I knew and it became increasingly frustrating to track down the owner of the device, get their password or hope they would put the correct song when you asked them to queue it.
One day I decided I know enough programming to give this a go, how hard can it be.
The idea I had come up with was a group queue, the host shares a room code and everyone else joins the room, from there you can search and add songs to the queue and the system will manage the order and playing of the songs.
The MVP of the project was completed over the course of a week between Christmas and the new semester starting up again.
The completion of a finished product however took about 8 months in between my studies and part time job.
The first problem I came across was how can I add a song to someone's Spotify queue, the short answer is you can't, you can only tell spotify to play songs immediately.
The solution to this was to just keep a seperate queue, users add to our queue and when appropriate ChimeIn tells Spotify to tell the next song in our custom queue.
So when is this 'appropriate' time. Using a different Spotify API we can query the currently playing song, we can get the length of the song and how far through it we currently are.
When this query returns a song that has an earlier play position than the last returned song, ChimeIn 'assumes' you've moved to the next song and we look at the custom queue and just tell Spotify to play that instead of the automatically suggested song
Once the MVP was finished users needed a way easily join rooms, instead of just sending out the room join code. Luckily, smartphones had finally mass adopted QR code scanning from the internal camera, I simply generated a QR code of the join URL with respective room code and let people join that way. Creating this type of social user experience taught me the value of simple but powerful additions to websites to increase value.
Eventually a few people wanted to use the service at their events so I started containerising the application as a Docker Image. Once it could be run in a docker container, I set up a simple webserver that would spin up the container when requested and spin down again once all rooms had been idle for a while. This process taught me how to make scalable software at the cost, no pun intended, of my personal finance. It was running on a $8/month Digital Ocean droplet, but the bandwidth was pushing it to nearly $16/month. By containerising the program and using only when needed the cost came back down to about $9/month.
Google was pushing their Progressive Web App (PWA) platform for the Chrome mobile browser, so I followed their guidelines and converted the app to a PWA. This allowed users to 'install' the app on the mobile devices home screen and interact with the ChimeIn website like it was a real app, it was just a borderless iframe essential but it allowed people to come back to the service often if they liked it and allowed ChimeIn to send notifications about the Session a user was connected to, such as 'You're song is up next'.
Song voting and request limiting. Were some of the last features added, users could upvote songs so they would be played earlier than their default added position. Request limiting was added because some people just can't help themselves and feel like they're the best DJ around, if you had 3 or more people in a session you would have X about of "credits", queuing a song would cost you a credit, 2 if the chosen song was on within the last 15 minutes. You would then get your credit back after your song had played. The host of a session could set the number of credits each user could have.
First projects
2013-2017
This is a smaller collection of 'games' and 'programs' I've made in various languages, platforms and formats. All of them have taught me something about being a better programmer and that making them wasn't just a waste of time but a journey of constant self improvement.
Asteroid Blaster
2013
A simple shoot them up game created in 48 hours for LudumDare 28, the first game I ever made and documented
Language: Java
Ninja
2014
A very small metroid-vainia with a ninja theme. Created as a test to see if I understood some programming concepts, ended up working on it for a couple of months.
Language: Java
LLarie
2014
A small game built for the #OneGameAMonth challenge, this was the first time I'd moved to a new language, Google's Dart to be specific. A simple game inspired by games like Toss the Turtle and BurritoBison
Link: LLarie Game
Language: Dart