BlavRaa Post Mortem - Asynchronous Multiplayer
(Actually is a collaborative/competitive asynchronous multiplayer platformer with hats)
I had it in my head to try to make an Async Multiplayer game regardless of the theme for this jam. Something where players are affecting the state of the world and then interacting with it.
Once the theme was chosen I had several ideas that seemed fun to try to execute, but I landed on a collaborative platformer, where players are trying to expand ever upward by building their own routes, with each death getting them higher.

Well, after the first iteration on Friday evening I noticed that this was EXTREMELY BORING, building ever higher with no goal, I just got in a loop of building ladders. So I came back to the theme: Sacrifice. Maybe players were trying to feed their gods to grow stronger. Maybe it's competitive so you aren't just dealing with optimized paths, but also trying to screw up other players.

It was my first time trying to tackle any kind of online multiplayer in a game, so I had some new concepts to learn. I knew in my heart that what I had in my mind was relatively simple (syncing and updating a single file), but I only had a slight idea how to execute it. I had glimpsed Gamemaker's http request functions and asynchronous events in the past, and bookmarked tutorials without actually looking at them.
Eventually I gleaned that I needed a place to host a single json file, and then I needed to be able to access that file remotely and update it.
I was able to find a few free solutions for hosting the files and I settled on https://jsonbin.io/ . The documentation for the API was really straightforward, and by comparing it to the examples I had from tutorials, I was able to figure out the necessary syntax.
example of the json file
{
"god1": 45993,
"god2": 44950,
"objects": {
"24,-667": {
"name": "Jojo",
"dir": 0,
"y": -506,
"obj": "obj_Token",
"x": 24
},
"372,-42": {
"name": "Ravamba",
"dir": 0,
"y": -42,
"obj": "obj_Platform",
"x": 372
},
All of the world data is stored in a singe Gamemaker ds_map. The map contains the scores of the gods, and another map within storing the information on each object. Each object is stored as a (mostly) unique name by it's x and y value, and then referenced that way.
Whenever the game refreshes, it goes through the map of objects and recreates the instances based on the info. I ran into some issues with async events being called before previous ones had ended, which caused some crashes or loops to occur, but eventually I sorted out most of it.
Since I had some fun integrating this, I'm thinking of making a short tutorial, or a Gamemaker asset so others could get this simple async MP in their projects quickly.
I somehow achieved what I set out to. As a game, I'm not really sure it's all that compelling, as there isn't exactly a victory state, though I do find a sort of dreamlike quality to interacting with other players without being at all aware of them... As it stands it's more like a social experiment to determine if people like the color red or blue better.
Right now it seems like people really like red.
Check it oooout : https://ldjam.com/events/ludum-dare/43/bla-v-raa-eternal-god-battle-brothers
P.S. If I had more time there are several things I'd have liked to add: - Leaderboard (tracks your sacrifices and deaths) - Lock names to chosen gods - Better Construction UI - More stuff to build (spikes, traps, monster spawns?) - God Combat ( victory/tallying matches/rounds, some animation ) - MORE HATS