Godot 4.3 template for game projects (GDScript).
Fusion of curated plugins, essential features and best practices to kick-start new projects.
๐จ TODO: This template is a work in progress.
- Foundation
- ๐ผ๏ธ Scene Manager - Custom transitions and loading screens.
- ๐ต Audio Manager - Reliable music tracks and sound effects.
- โ๏ธ Configuration - Persistent game options and statistics in INI file.
- ๐พ Save Files - Modular save system for game data, optional encryption.
- Localization
- ๐ Polygot Template with 28 languages and over 600 game words.
- โ๏ธ Google Noto Sans fonts glyphs (Arabic, Hebrew, HK, JP, KR, SC, TC, Thai).
- Accessibility
- ๐ฎ Controller Support - Grab UI focus for joypad and keyboard users.
- ๐ Multiple Resolutions - Video options: display mode, window zoom.
- โก Optimizations - Native web dialog to capture clipboard, and more...
- UI/UX
- ๐ฌ Boot Splash - The main scene, allowing custom transition to main menu.
- ๐ Main Menu - Display buttons to enter other menus, version and author.
- ๐ง Options Menu - Audio, Video (display, vsync), Controls (keybinds), Game.
- ๐ Credits Menu - Renders CREDITS.md file in-game with formatting.
- ๐ Save Files Menu - List of files: Play, Import, Export, Delete, Rename.
- โธ๏ธ Pause Menu - TODO: ...
- Placeholder
- Singletons
- ๐ข Signal Bus - Observer pattern for cleaner global signals.
- ๐ References - Map of preloaded resources for convenience.
- Scripts
- ๐งฐ Utility - Datetime, File, Marshalls, Math, Node, Random, String.
- ๐ ๏ธ Objects - ActionHandler, ConfigStorage (INI File), LinkedMap.
- Tools
- ๐ Logger - Easier debugging and troubleshooting.
- ๐งฉ IDE Plugin - Improves scripting in GDScript in editor.
- ๐ Resource View - Better resource management in editor.
- โจ GDScript Toolkit - Code style formatting on save and linter.
- Workflow
- ๐ Deployment - TODO: ...
- โ Actions - Verify style and formatting in GDScript code on push to Github.
- .github
- docs
- workflows
- godot
- addons (Plugins)
- assets (.png, .mp3, .csv, .ttf, ...)
- autoload (Globals)
- resources (.tres, .gd)
- scenes (.tscn, .gd)
- scripts (static/const/object .gd)
- shaders (.gdshader)
- snippets (.cpp, .js, ...)
- CREDITS.md
- export_presets.cfg
- gdlintrc
- project.godot (ProjectSettings)
- .gitattributes
- .gitignore
- LICENSE
- README.md
- Clean Code
- Use snake_case for files, folders, variables, functions.
- Use PascalCase for nodes, classes, enums, types.
- Use typed variables and functions.
- Use style inspired by GDScript Style (see gdlintrc).
- Function definition order: override, public, private, static.
- Consider using good design patterns when programming.
- Consider maintaining enum values when appropriate.
- Script IDE
- The Script-IDE improves scripting, e.g. Ctrl+U, Ctrl+O.
- Resource Tables
- The Edit Resources as Table adds view for managing Resources.
- GDScript Toolkit
- This project uses addons Format on Save and gdLinter (enforces gdlintrc).
- They require GDScript Toolkit python package being installed.
- Logger
- The Log inspired by Log4J allows logging.
- Scene Manager
- The SceneManager handles Scenes transitions and loadings.
- Audio Manager
- The Resonate addon handles music tracks and sound effects.
- For a complex audio project, consider using FMOD or WWise.
The Globals (autoload Scenes) and Scripts (statics, consts, objects) are available from anywhere in the project. The latter is independent of (not managed by) the Scene Tree.
Otherwise, Scenes must be loaded or added to the Scene Tree.
- Configuration
- Configure Project, use ConfigStorage object for user config presistence.
- Data
- Configure structure of save files, use as setter and getter of save file data.
- Overlay
- Container for debug elements, e.g. FPS counter.
- Reference
- Preloads & holds references to Resources in dictionary by name.
- When creating a new Resource type, consider creating a getter here.
- SignalBus
- Exchange global signals for cleaner observer pattern.
- Wrapper : Extend functionality without modifying the original.
- AudioWrapper - Calls Resonance plugin with enums instead of string names.
- SceneManagerWrapper - Calls SceneManager plugin with custom resource.
- TranslationServerWrapper - Extends localization to work in tool scripts.
Scenes are split into component, node and scene folders.
- Component : Add as a child to extend parent functionality by composition.
- Node : Add as a standalone building block of a larger construction.
- Scene : Presentable collection of other scenes, nodes and components.
- Component
- Audio
- ButtonAudio - Audio events on signals (focus, click, release).
- SliderAudio - Audio events on signals (drag start, drag end).
- TreeAudio - Audio events on signals (cell selected, button clicked).
- Control
- ControlExpandStylebox - Resize target node to fill parent container.
- ControlGrabFocus - Grabs focus of node for controller support.
- ControlResizeTextFont - Custom UI scaling if "stretch mode: disabled".
- Audio
- Node
- Menu
- MenuButton - Localized menu button.
- MenuDropdown - Localized dropdown option button.
- MenuSlider - Localized menu slider with accessibility buttons.
- MenuToggle - Localized menu toggle button (ON or OFF).
- Menu
- Scene
- BootSplashScene (Main Scene) - Smooth transition to menu scene.
- MenuScene - Manages menu scenes as children.
- MainMenu - Display buttons to enter other menus or next scene.
- OptionsMenu - Manages options (persistent app settings) scenes.
- AudioOptions - Configure Music and SFX volume or mute.
- VideoOptions - Display, Resolution, VSync, FPS Limit, Anti-Alias.
- ControlsOptions - Change (add or remove) keybinds.
- GameOptions - Custom options, e.g. toggle autosave.
- CreditsMenu - Renders CREDITS.md file in-game with formatting.
- SaveFilesMenu - List of files: play, import, export, delete, rename.
- PlayScene - TODO: ...
- PauseMenu - TODO: ...
- Const - Collections of commonly used constants.
- Enum - Collections of organised values.
- Object
- ActionHandler - Implements the (light) command pattern design.
- ConfigStorage - Persists (save & load) app settings in INI file.
- LinkedMap - Dictionary data structure that tracks order of keys.
- Util
- DatetimeUtils - Useful for save file metadata (e.g. last played at).
- FileSystemUtils - Robust functions to extract file paths and names.
- MarshallsUtils - Convert data formats with optional encryption.
- MathUtils - Integer power function.
- NodeUtils - Collection of node manipulation functions.
- RandomUtils - Weighted Loot Table and random string functions.
- StringUtils - String functions for validation and transformations.
- ConfirmationDialogJsLoader
- Native HTML/CSS/JS dialog to access clipboard in web build.
- Supports transfer of Theme resource properties to CSS style.
- Useful because Godot Nodes cannot read or write to web clipboard.
- Github Pages
- TODO: ...
- Itch.io
- TODO: ...
- quality_check.yml
- Automatically check gdlintrc coding style standards.
Godot Engine has known issues requiring hacks (workarounds) until officially resolved.
Below is a list of issues needing workarounds implemented in this template.
- Desktop
- Web
TODO: Test the template on following platforms.
- Linux
- MacOS
- iOS
- Android
After setup, you should have no errors and no warnings.
- Click Use this template in Github, then open the project in Godot Engine.
- Setup GDScript Toolkit python package to use formatter and linter plugins.
- Open (Import) the project for the first time in the Godot Editor.
- Enable all plugins, then restart the project "Project > Reload Current Project".
On Godot 4.3 you must also:
- Do font uuid workaround by opening
res://resources/global/theme.tres
and clear then set again the fontnoto_sans.woff
. - Do font fallbacks workaround by editing
noto_sans.woff.import
and pasting lines:
Fallbacks=null
fallbacks=[Resource("res://assets/font/noto_sans/woff/noto_sans_arabic.woff"), Resource("res://assets/font/noto_sans/woff/noto_sans_hebrew.woff"), Resource("res://assets/font/noto_sans/woff/noto_sans_hk.woff"), Resource("res://assets/font/noto_sans/woff/noto_sans_jp.woff"), Resource("res://assets/font/noto_sans/woff/noto_sans_kr.woff"), Resource("res://assets/font/noto_sans/woff/noto_sans_sc.woff"), Resource("res://assets/font/noto_sans/woff/noto_sans_tc.woff"), Resource("res://assets/font/noto_sans/woff/noto_sans_thai.woff")]
For questions and help, open a Github Issue or contact my Discord tiny_takin_teller
.
- Opening the project for the first time, I have errors/warnings?
- Try (re)enable all Plugins and then select "Reload Current Project".
- Warning "ext_resource, invalid UID" when opening the project?
- Resolve by re-saving the mentioned scene (.tscn), e.g. rename root node.
Editor layout can be changed via "Editor > Editor Layout > ..." in Godot Editor.
To use my layout, locate editor_layouts.cfg
in Editor Data Paths and add:
[takin_godot_template]
dock_1_selected_tab_idx=0
dock_5_selected_tab_idx=0
dock_floating={}
dock_bottom=[]
dock_closed=[]
dock_split_1=0
dock_split_3=0
dock_hsplit_1=395
dock_hsplit_2=170
dock_hsplit_3=-382
dock_hsplit_4=0
dock_filesystem_h_split_offset=240
dock_filesystem_v_split_offset=0
dock_filesystem_display_mode=0
dock_filesystem_file_sort=0
dock_filesystem_file_list_display_mode=1
dock_filesystem_selected_paths=PackedStringArray("res://")
dock_filesystem_uncollapsed_paths=PackedStringArray("res://")
dock_1="FileSystem,Scene,Scene Manager"
dock_5="Inspector,Node,Import,History"
- Open a new Issue for discussion first, later Fork and open a pull request.
-
Godot Examples
-
Godot Engine
-
Godot Extensions
-
Godot Templates