Great News & MASSIVE UPDATE!
Thanks to @pennyloafers, @HyperJragon, @Frozen_Fried, and @carmxdev, I now know what I need to do to make the netcode work.
It’s a little hard to explain in detail, but I was missing some core pieces of network knowledge that are REQUIRED for multiplayer of any kind (and Monkanics) to work.
I can boil it down to a few things:
Reason #1: The way I structured the project was flat out wrong.
The client attempting to join the server immediately upon opening the game means that ANY failure would result in the GCOD (Grey Screen of Death). There was no main menu or client-side middleman to fallback to.
The server also booted up immediately, but that has some MUCH bigger issues. Which leads me to…
Reason #2: The server setup is impossible for a client to connect to due to the fundamental nature of a router.
Routers, a factor I haven’t truly learned about until today, are essentially bouncers for a home’s PC network using NAT (Network Address Translation). This hides the client’s private IP address with a public one for safety.
From my knowledge, the way clients and servers get past the NAT is by successfully sending a singular packet. This is called a NAT punchthrough. This marks the packet IP as safe, allowing back-and-forth communication.
The IP was also scuffed, as they change all the time and can’t punch through their router. Since I was running the server instance on my machine, there are 2 points of failure, going from my router to the client’s.
That’s also why connections work on the same network. It doesn’t have to go through a different router.
The main way around this is through a relay server on the cloud. Relay server’s don’t have a router and are able to punch through client routers.
So, I have to set this up.
Reason #3: The way I distributed the game to playtesters was VERY inefficient in general.
This isn’t related to the netcode, but I do think this is important to bring up, as this is the thing that currently makes v0.1 unable to be publicly playtestable.
I first had to export 2 different game files (client AND server), then send the client file with WeTransfer. Already annoying for both me and the playtester.
Then, the playtester has to unzip the file and wait for me to start the server file. Making the game unplayable without me there. Even without the netcode issues, this is still very bad.
Lastly, the playtester has to download multiple files for multiple versions, as there’s no installer or patching system.
This last reason was due to my lack of understanding how Godot exports work. The game compiler (EXE), game content (PCK), and player save data (???) are DIFFERENT files. The only thing that changes between patches is how the same data is interpreted.
If the client only needs one application to play all versions of the game and updates are automatic, it’ll make playtesting a breeze.
But I haven’t even begun work on that yet.
Now that I understood ALL of that, version 0.1 is now complete. Now, it’s time to plan the next, better version that’ll make the game actually playable.
Monkanics Version 0.1.1: Revisions of Decisions
This new version will be a complete rewrite of the game’s structure and netcode.
It sounds bad, but this is actually really exciting. As I now know how to get the game working, from real, practical, and harrowing experience. I have my skin in the game, baby!
V0.1.1’s Main Features:
- Main menu
- Relay server implementation
- Netcode rewrite
- Distribution and patch system (Most likely via itch’s butler)
- and more
I can 100% do all of this. I’ll keep you updated via this thread, or even better, the Monkanics discord:
It’s pretty chill over here. I’ve recently added channels for programming and we have a lot of fun with memes and discussion about anything really.
The public development trello will also be updated accordingly:
Funny Monkanics Discord Moments:
Those last 2 were from The Embers Below discord. You should join that too.
I’ll see you in the next (hopefully not horrible) update.




