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 files
  • assets/ – Imported textures, audio, and fonts
  • ui/ – UI scenes and scripts
  • levels/ – Level scenes and data
  • autoload/ – 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:

  1. Create a new scene called Game with a Node2D as the root and save it as scenes/game.tscn.
  2. Add a Camera2D as a child of the root and enable Current.
  3. Add a simple background using a ColorRect or placeholder sprite so you can see something on screen.

Then set it as the main scene:

  1. Go to Project β†’ Project Settings β†’ Application β†’ Run.
  2. Set Main Scene to scenes/game.tscn.
  3. Press F5 to run and confirm your project boots into the Game scene.

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:

  1. Create a new scene with a CharacterBody2D root, name it Player, and save it as scenes/player/player.tscn.
  2. Add a placeholder Sprite2D and a CollisionShape2D (for now, a rectangle).
  3. Attach a new script scripts/player/player.gd to 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.md with:
    • 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.