I've dug around and extended my personal copies of this a couple times in the past. I decided to worm my way into a new copy to play with extending some of the functionality, and finally decided to do some more extensive modding. I've spent the last couple days really understanding this codebase and the framework it's built with.
holy fucking hell
Godot is a massive pile of shit.
All of my fucking sympathy and praise to the guy that's spent literally years shoving his dick in this blender.
The scene system is brain damaged.
The language supports, encourages and sometimes requires all of the worst anti-patterns in programming.
It's a hot heap of trash from one end to the other. The only reason this thing got popular is because they stapled a half-assed copy of visual basic onto the front end of it and marketed it to people that literally don't have the experience to know better. I'm digging through it just from the backend files here, it's fucking incredible how fucking assbackwards they've managed to make this shit.
It's like, they harp on and on about how their language doesn't have globals and how fucking great that is, but the scene system makes passing top-level context an impossible task for the newbies they target, so they just end up forced to use the builtin "SINGLETONS BUT THEY AREN'T GLOBALS THEY'RE TOTALLY DIFFERENT BUT YOU CAN REGISTER THEM SO THEY SHOW UP IN EVERY NAMESPACE LIKE GLOBALS BUT THEY AREN'T I SWEAR" bullshit. Guess what, if your own official solution that's built right into your fucking GUI to fix the problems you've created is to bypass everything you're proud of about it and do things in the shittiest most spaghetti ass code causing ways, your shit sucks.
Everything in here has to know how everything else works and it's got to be absolutely soul draining trying to remember the intimate details of everything going on all at once without fucking anything up.
Part of that is on some obviously newbie structuring in the code. That happens to everyone on their first dozen bigger systems. It can be mitigated over time.
But the lion's share was imposed on them, and the framework taught nothing of good form. It damn near requires the worst solutions at every step, actively punishing anyone that would try to snatch success from this things jaws of infinite fucking failure.
This thing is actively trying to retard its users.
It's all so fucking inside out, it manages to have all the worst qualities of imperative and OOP code while managing to shit on any and all possible virtues they could have brought to the table. They make it so it's damned near impossible to structure the code nicely, because you always have to have references back to shit in the viewport, because they expect you to just have a bunch of fucking chunks you swap around, but the skill required to wrangle this without inordinate complexity cropping up almost immediately is way beyond what anyone that's casually using it will have.
And the fucking people writing and maintaining it have the absolute gall to be condescending pricks to the reams of newbies I see flailing on their bug trackers. These poor fucks think this is normal and probably walk away upset that they aren't getting it when someone sneers down from on high that they're doing things wrong. Because the most obvious shit in the world is a god damned system that can't even exit without asking the top-level window nicely to do it. But, of course, your only options for reaching it are to pretend every fucking object you create needs to be stapled into the view tree, or to use a bunch of globals that work by getting stapled to the root view and then exposed everywhere to make state management a living hell.
And to top shit shit pile off with a cherry, the god damned thing doesn't even have a proper mark and sweep collector. They're expecting people to do manual memory management in the middle of this clusterfuck. It's either nodes that at least cascade their manual deletion down the chain, reference-counted shit with no defenses against memory cycles, or objects that have to be completely manually managed or they just leak memory.
What in the fuck are these morons thinking?
God speed, Maverik. I'm going to keep hollowing out my withered husk fucking around in this code, but if you should ever see this, know I have nothing but sympathy for what this shit has done to you.