Lesson 1: Game Concept and Godot 4 Project Setup
In this first lesson you will choose a focused 2D action game concept and set up a clean Godot 4 project so you are not fighting your own project structure later.
You are not trying to design the perfect game. You are choosing a small, finishable design that still feels exciting to build.
Step 1 β Pick a Small but Punchy Game Concept
For this course, constrain your game to:
- One core verb (for example: dash, slash, shoot, or jump)
- Short sessions (5β10 minutes per run)
- One primary environment type (for example: city rooftops, cave, forest)
Good examples:
- A fast dash-and-slash arena where you clear waves in a single screen
- A compact platform brawler where you climb a tower and fight minibosses
- A simple room-based action crawler with a handful of room layouts
Write down:
- A one-sentence pitch
- The core verb
- The win/lose condition
- The main mood or fantasy you want players to feel
Keep this in a docs/ folder in your repo as concept.md so you can refine it later.
Step 2 β Create a Clean Folder Structure in Godot 4
Open Godot 4 and create a new project:
- Name:
godot4-complete-action-game - Renderer: Forward+ (default is fine for most 2D projects)
- Location: Your usual dev folder
Inside the project, create these top-level folders in the FileSystem panel:
scenes/β All scenes (player, enemies, levels, UI)scripts/β GDScript filesassets/β Imported textures, audio, and fontsui/β UI scenes and scriptslevels/β Level scenes and dataautoload/β Global scripts such as game state
This small amount of structure eliminates a lot of early chaos.
Example structure
scenes/
main_menu.tscn
game.tscn
player/
enemies/
scripts/
player/
enemies/
assets/
sprites/
audio/
fonts/
ui/
levels/
autoload/
You do not need every folder filled yet; you only need clear places for the content you are about to create.
Step 3 β Build a Minimal Main Scene
Create a basic playable shell:
- Create a new scene called
Gamewith aNode2Das the root and save it asscenes/game.tscn. - Add a
Camera2Das a child of the root and enableCurrent. - Add a simple background using a
ColorRector placeholder sprite so you can see something on screen.
Then set it as the main scene:
- Go to Project β Project Settings β Application β Run.
- Set
Main Scenetoscenes/game.tscn. - Press F5 to run and confirm your project boots into the
Gamescene.
At this point your game does nothing, but you now have:
- A named project
- A main scene wired up
- A camera and visible background
You have crossed the βblank projectβ threshold.
Step 4 β Create a Reusable Player Scene Shell
Next, create a root for your player:
- Create a new scene with a
CharacterBody2Droot, name itPlayer, and save it asscenes/player/player.tscn. - Add a placeholder
Sprite2Dand aCollisionShape2D(for now, a rectangle). - Attach a new script
scripts/player/player.gdto the root.
In player.gd add minimal movement scaffolding:
extends CharacterBody2D
const SPEED := 200.0
func _physics_process(delta: float) -> void:
var input := Vector2.ZERO
input.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
input.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
velocity = input.normalized() * SPEED
move_and_slide()
Make sure the default input map includes ui_left, ui_right, ui_up, and ui_down (Godot 4 templates do).
Finally, instance the player in game.tscn and hit play. You should now be able to move a placeholder character around the screen.
Step 5 β Capture Constraints and Next Steps
Before moving on, write down a few constraints that will keep the project finishable:
- Maximum number of enemy types (for example: 3)
- Maximum number of levels or areas (for example: 3β5)
- Maximum number of weapons or abilities (for example: 2β3 core options)
Put these in your concept.md file under a Scope heading so you can check against them any time a βcool ideaβ appears mid-course.
Common Mistakes to Avoid in Lesson 1
- Starting with a huge world or story. Focus on a short, replayable loop first.
- Skipping folder structure. Throwing everything into one folder makes refactors later painful.
- Over-engineering code early. You only need simple movement and a clean scene layout right now.
Mini Challenge
By the end of this lesson:
- Your Godot 4 project should open directly into
game.tscn. - You should be able to move a placeholder player around with the keyboard.
- You should have a short
concept.mdwith:- One-sentence pitch
- Core verb
- Win/lose condition
- Scope constraints
If all of that is in place, you are ready for Lesson 2, where you will dig into GDScript fundamentals and a more robust project architecture for the rest of the course.