The past year and a half I've been prototyping browser based multiplayer games. I started after leaving my job at thatgamecompany (TGC) where I had been working on their new game Sky. It's a multiplayer game that prioritizes accessibility and fostering positive feels between the people playing - what I tend to call 'prosocial' game design. Fade With Me Forever is the first of the my experiments that I've been able to polish to a point where I feel it's worth sharing.
It's also the most simple from a technical standpoint. Although I spent years working on networked multiplayer gameplay code at TGC, there was a lot of learning required in making the switch to doing everything in browser. I initially collaborated with a coupe other guys who left TGC around the same time as me, they were more experienced engineers who laid a lot of the groundwork for my prototypes. One of them went on to make surviv.io which is now crazy popular.
The design I initially focused on involved simulating flocking was a flocking based game I was calling Hyperboid. It was in the slither.io vein of eating to grow bigger and then consuming other players. What was novel about it was the visual beauty of the flocking, and to a lesser degree that it was team based. While I figured out how to simulate thousands of boids of a server and stream the necessary data required to render each player's local area the game was just too sensitive to latency.
After months of work I decided to shelve it and go back to the drawing board. My wife also had a baby, our first, right about then, so I took a long break from programming.
In the haze of the first few months of taking care of a new baby I did some simple prototypes. One night I stayed up and wrote a couple lines of code that allowed me to render geometry with radial symmetries. The result looked pretty:
Not long after that I had the idea of networking the system to allow multiple people to draw an image together. The cool thing about this system was that all the drawing was done on the client. The only data that needed to be networked was the position of the player's input and whether or not they were inputting. I later added networked events for changing the color, number of reflections and "mood" of the kaleidoscope. Because these events are only sent as needed, the network state that is sent each update was able to fit in a single 16 bit int.
It took another few months to take my initial networked version to where it is now. A lot of that had to do with the challenges of actually deploying the project on a remote server as opposed to testing it locally, and compatibility issues outside of desktop/Chrome. I also added some much needed visual polish and some simple generative music (much thanks to this awesome post by @teropa) to make the whole experience feel more immersive.
I have a vision for this game that includes a more curated "emotional arc" of different moods that players can draw through together, but for now I'm putting it up as a more of a meditative toy. Thanks for checking it out!
Leave a comment
Log in with itch.io to leave a comment.