Awesome
<p> <a href="https://godotengine.org/download"> <img alt="Godot Download badge" src="https://img.shields.io/badge/godot-4.2.1-blue"> </a> <a href="https://github.com/crystal-bit/godot-game-template/releases"> <img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/crystal-bit/godot-game-template"> </a> </p>š You make games, the template handles the boring stuff.
Godot Game Template is a generic starter project for Godot games.
Its main focus is to provide a solid base to build upon.
Get started
You have 2 options:
1. Get started with Github Templates:
- Create a new repo using this template
- Clone the new repository locally
- Open the project in Godot (GDScript)
2. Get started with a local project:
- Go to https://github.com/crystal-bit/godot-game-template/releases
- Download Source code (zip)
- Unzip the project
- Open the project in Godot Engine (GDScript) and create your game!
Used by
Logo | Godot | Title | Link |
---|---|---|---|
3.x | YouAreUto (2019) | Android, iOS, GitHub | |
3.x | Defending Todot (2020) | HTML5, GitHub | |
3.x | Karooto No Gase (2021) | Android, Itch.io | |
3.x | demo-godot-game-template (2021) | Android, GitHub |
Get in contact if you want to be featured here!
How to...
Change scene
Game.change_scene("res://scenes/gameplay/gameplay.tscn")
Change scene and show progress bar
Game.change_scene("res://scenes/gameplay/gameplay.tscn", {
"show_progress_bar": true
})
Change scene and pass parameters
# you can pass whatever value you like: int, float, dictionary, ...
var params = {
"level": 4,
"skin": 'dark'
}
Game.change_scene("res://scenes/gameplay/gameplay.tscn", params)
# gameplay.gd
func pre_start(params):
print(params.level) # 4
print(params.skin) # 'dark'
# setup your scene here
_ready() vs pre_start() vs start()
They are called in this order:
method | description |
---|---|
_ready() | gets called when the graphic transition covers the screen |
pre_start(params) | gets called immediately after _ready, it receives params passed via Game.change_scene(scene_path, params) |
start | it's called as soon as the graphic transition finishes. It's a good place to activate gameplay logic, enemy AI, timers, ... |
Restart the current scene
Game.restart_scene() # old params will be reused
Restart the current scene and override params
var new_params = {
"level": 5,
}
Game.restart_scene_with_params(new_params)
Center a Node2D into the viewport
$Sprite.position = Game.size / 2
# Game.size it's just a shortcut to get_viewport().get_visible_rect().size
Conventions and project structure
assets/
- Contains textures, sprites, sounds, music, fonts, ...
builds/
- output directory for game builds (ignored by .gitignore and .gdignore)
scenes/
- Contains Godot scenes (both entities, reusable scenes and "game screen" scenes)
- Scene folders can contain
.gd
scripts or resources used by the scene
Mostly inspired by the official Godot Engine guidelines:
- snake_case for files and folders (eg: game.gd, game.tscn)
- PascalCase for node names (eg: Game, Player)
Lower Case file names
This convention avoids having filesystem issues on different platforms. Stick with it and it will save you time. Read more here:
Windows and recent macOS versions use case-insensitive filesystems by default, whereas Linux distributions use a case-sensitive filesystem by default. This can cause issues after exporting a project, since Godot's PCK virtual filesystem is case-sensitive. To avoid this, it's recommended to stick to snake_case naming for all files in the project (and lowercase characters in general).
See also this PR that adds is_case_sensitive()
.
Export utilities
release.sh
From your project root:
./release.sh MyGameName # this assumes that you have a "godot" binary/alias in your $PATH
Look inside the ./builds/ directory:
builds
āāā MyGameName
āāā html5
āĀ Ā āāā build.log # an export log + build datetime and git hash
āĀ Ā āāā index.html
āĀ Ā āāā ...
āāā linux
āĀ Ā āāā MyGameName.x86_64
āĀ Ā āāā build.log
āāā osx
āĀ Ā āāā MyGameName.dmg
āĀ Ā āāā build.log
āāā windows
āāā MyGameName.exe
āāā build.log
Github Actions
If you are using Github you can take advantage of:
- automatic exports for every commit push (see push-export.yml)
- manual exports via Github CI (see dispatch-export.yml )
You can read more on Wiki - Continuos Integration
Contributing
If you want to help the project, create games and feel free to get in touch and report any issue.
You can also join the Discord server (#godot-game-template
channel).
Before adding new features please open an issue to discuss it with other contributors.
Contributors
Many features were implemented only thanks to the help of:
Also many tools were already available in the open source community, see the Thanks section.
Thanks
- For support & inspiration:
- All the contributors
- Crystal Bit community
- GameLoop.it
- Godot Engine Italia
- Godot Engine
- For their work on free and open source software: