I'm a technology leader in Colorado speaking about serverless computing, team building, devops, and leadership development.
11 December 2024
So I made a thing! I’ve wanted to build this game for over ten years. If you look through my GitHub, there’re something like six discarded attempts since the early teens. I was handed some free time over the last couple months, and found my way to picking up my most recent attempt and actually getting it up and online! Here’re some thoughts on where it came from, what it is today, and where it might go.
I was enamored by this talk by Luke Muscat since I first saw it all those years ago. The drama that ensues in his office as this game took over 20 people’s lives is such a fun story. They eventually shut down game early as it had people betraying one another and plotting against each other. This explosiveness always appealed to the little stinker in me.
My first version in I attempted in 2017 was attched to Slack, such that there’d be a channel at the office I worked at, and my coworkers and I could spend some idle-time plotting evil against one another. But the first time or two I attempted this I stalled out at actually putting a grid on the screen and having players’ avatars there to throw down. I started versions in C#, Python Chalice, Express-Dynamo, and then finally a fourth time a couple years ago on VueJS/Express/Postgres. It’s a little trip down memory lane to see what I was thinking was the tools I’d want to use to make something like this happen online.
I’m mixed on the stack that I picked up this time. This is my first outing with Vue.js and I must say I like it very much. It’s lean and easy to use. There are lots of great plugins and it’s fast and reactive.
For persistence, I’d chosen Postgres with Sequelize, and these have proven to be easy. However, I don’t like that I’m having to pay a fair amount to run postgres at 99% idle. Starting anew, I’d do something that could scale gracefully to zero like DynamoDB.
Likewise the Express JS environment has been familiar and easy enough, but something in Python would be more testable, less bug-prone. Async/Await
is great, but I must have had a dozen instances of missing an await
statement and having somewhat subtle bugs from that.
In spite of all that I really enjoyed spending a few weeks really leaning into making this little concept come to life. I’ve got a couple dozen players online now taking turns pummeling each other in the spare time.
I’m struggling a bit with how I can get the game to spread into some other Discord servers. There’s a steep tipping point:
Once it’s running it’s pretty easy for players to drop in/out and get some shenanigans.
There’ve been a number of nailbiters and close calls. It’s really quite the thing to see this little creation having such fun little interactions and laugh out loud moments.
I also love how well it works on mobile! By leveraging a Discord channel to announce game updates, you get this awesome mobile experience where you can hop in and do some damage on the road.
Tech costs aside, there are some gameplay patterns that I think should be addressed:
First is that Infight is currently designed to be always on, when one game is won, it immediately starts another. At the same time, the game’s set up as a winner-take-all deathmatch where once you’re dead, you likely remain dead for the duration. This means most players are dead for most of a day before a fresh game starts.
Secondly, the original game is very simplistic on the board, relying on social dynamics to make it interesting. Online, alongside a discord, it doesn’t hold enough interest to have slow day-long turns. There needs to be more to do, and less sitting-around-dead.
So I want to take on an expanded game design that’s more of a King-of-the-hill style scoring system where there’s a designated scoring zone and a player needs to be alive in the zone at tick-time to get a point. Now, when the game ticks and hands out actions, it will sometimes spawn on healing heart. In this new world, I want a few hearts to drop and, crucially, a bunch of action-point clusters to allow for more stuff to be happening.
Further, I think there should be two new player capabilities: walls and fires. Players should be able to spend an action point to drop a wall in a square making it impassible until its destroyed. Letting them spend an action to start a fire, which would occaisonally expand, make the board way more dynamic and challenging.
I’m gonna stick with it. Aside from these gameplay improvements above, I really want to make it easier for users to discover it and get playing. If you’ve got some curiosity, you can join the official Infight discord here. Or if you want to start a little fight of your own, add it to a discord you hang out in from Infight.io.