I only know of this
Specifically for Godot there is one important one for file names if you are planning to export to Windows. All file names and folder names must be snake_case. Uppercase letters in your file names will result in things not being accessible in your project to the Windows OS because of the way that it handles them. It’s also possible to have the same problem with Mac exports.
So, if you just adopt that as a naming convention, you should have no problems. I have a batch file I run to modify file names. I use it before I add them to the project.
Man, I did not know that.
You had me running to my game files. Luckily, I already had everything in snake_case incidentally.
Yeah, it was a nasty surprise for me at the time.
Luckily, we can change file names somewhat safely without obliterating the project thanks to UIDs. (Easily the best feature Godot added recently)
Does anyone else have one MAIN.gd or something like that, which executes all of the game logic?
Yes and no. I talked about this a bit in a previous post. This is a screenshot of my main scene tree for my latest game, Katamari Mech Spacey.
This is the entire code for the Main node.
It’s mostly comments.
@icon("res://addons/dragonforge_game_template/assets/textures/icons/icon_monochrome_dark_16x16.png")
class_name MainTemplate extends Node
## This is here in case we aren't allowing the player to skip the splash
## screens but we want to do so for testing. (See also
## [member GameStateSplashScreen.splash_screens_are_skippable].) It only affects
## debug builds of the game.
@export var bypass_splash_screens_during_debug: bool = false
func _ready() -> void:
ready.connect(_on_ready)
func _on_ready() -> void:
# GameStateMachine starts on Splash Screens by default.
# This is here unless we aren't allowing the player to skip the splash
# screens but we want to do so for testing.
# We wait until the node is fully constructed before running this code to make
# sure that the [GameStateMainMenu] is ready to listen.
if (bypass_splash_screens_during_debug and OS.is_debug_build()) :
Game.splash_screens_complete.emit()
Everything is handled by the Game Stat Machine which is actually a generic StateMachine. It has no custom code in it. Instead, each state handles what happens in that state - which keeps the code atomic. One state does not concern itself with what the other states are doing. (It is based on Kanban project management principles.)

