Home

Awesome

game-template-overview

šŸŒŸ You make games, the template handles the boring stuff.

<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>

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:

  1. Create a new repo using this template
  2. Clone the new repository locally
  3. Open the project in Godot (GDScript)

2. Get started with a local project:

  1. Go to https://github.com/crystal-bit/godot-game-template/releases
  2. Download Source code (zip)
  3. Unzip the project
  4. Open the project in Godot Engine (GDScript) and create your game!

Used by

LogoGodotTitleLink
YouAreUto icon3.xYouAreUto (2019)Android, iOS, GitHub
Defending Todot icon3.xDefending Todot (2020)HTML5, GitHub
Karooto No Gase icon3.xKarooto No Gase (2021)Android, Itch.io
Godot Game Template Demo3.xdemo-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

Change scene and show progress bar

Game.change_scene("res://scenes/gameplay/gameplay.tscn", {
  "show_progress_bar": true
})

progress

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:

methoddescription
_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)
startit'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

Mostly inspired by the official Godot Engine guidelines:

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:

  1. automatic exports for every commit push (see push-export.yml)
  2. 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.

Discord

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