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 managment 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 inbetween a very demanding day job. I've also re-written or 'refactored' serveral 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 itteration of game logic and means the game doesn't need to be re-compiled, only the scripts have to be updated.
Every aspect is cusomisable, 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 rember 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 Debain 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 someones laptop going into a speaker via an AUX cable or on their phone connected to a blutooth 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 inbetween my studies and part time job.
The first problem I came across was how can I add a song to someones Spotify queue, the short asnwer is you can't, you can only tell spotify to play songs imediatly.
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 queury 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 automaticaly 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 addopted QR code scanning from the internal camera, I simple generate 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 containerisng 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 container-ising 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 border-less iframe essentaly 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 deafult 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 you're 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 somthing about being a better programmer and that making them wasn't just a waste of time but a journey of constant self improvment.
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
Features
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
Features
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
Features