Make Your First Video Game with AI — Expert Skills

Lesson 1.1: Install Godot and Claude Code

Learning objective: Install Godot 4 and Claude Code, connect them to a working project folder, and confirm the setup is ready to build.

1.1.1 What You Are Installing and Why

Most game development tutorials start with weeks of theory before you touch anything. This course skips that. By the end of this lesson you will have two tools installed and connected. By the end of the next lesson you will have a character moving on screen.

Here is what the two tools are and what each one does.

Godot is a game engine. A game engine is software that handles all the technical machinery a game needs to run: physics, graphics, input from the keyboard, sound, and more. Think of it as the stage where your game lives. Your player character lives in Godot. Your level lives in Godot. When you press Play, Godot is what makes everything run. It is free, has no subscription fee, and is used by thousands of indie game developers worldwide.

Claude Code is an AI tool that writes code directly into your Godot project. You open it, describe what you want to build in plain English, and it writes the code files into your project folder automatically. You do not touch the code. You describe. Claude builds.

Together these two tools replace the part of game development that stops most beginners cold: writing code. You do not need to learn a programming language to finish this course. You need to learn how to describe what you want clearly and specifically. That is a skill you already have. This course sharpens it.

One important thing to understand before you install anything. Claude Code works by reading the files inside your Godot project folder on your computer. That means every time you open a new session it can see what already exists in your game and build on top of it. You are not starting from scratch every time. You are directing a developer who has already read the brief.

Two-tool workflow diagram Flow showing the student typing a description into Claude Code in the terminal, Claude Code writing files into the Godot project folder, and Godot reading those files and running the game You Describe what you want plain English Claude Code Writes code files into your project code files Project folder Player.tscn player.gd Level.tscn ... reads files Godot Runs the game terminal in the terminal on your computer the editor
You describe. Claude Code writes. Godot runs. The project folder is the shared space where everything connects.
The Godot 4 editor showing the Scene Tree panel on the top left, FileSystem panel on the bottom left, main Viewport in the center, and Inspector panel on the right
The Godot editor with its four main panels. You will get familiar with each one throughout this course.

1.1.2 Before You Install Anything: What Is a Terminal?

Several installation steps in this lesson use something called a terminal. A terminal is a text-based way to talk to your computer. Instead of clicking icons and buttons, you type commands. The computer reads the command and does what you asked.

It looks plain. It is usually a dark window with a blinking cursor. It feels unfamiliar the first time you see it. That feeling goes away quickly.

You will use the terminal in this course to install Claude Code and to start it before each build session. That is all. You will not be writing code in the terminal. You will be typing short setup commands and then talking to Claude Code in plain English.

How to open the terminal on a Mac: Press Command and Space at the same time. A search bar appears. Type Terminal and press Enter. A window opens with a blinking cursor.

How to open the terminal on Windows: Press the Windows key. Type PowerShell in the search bar. Click Windows PowerShell. A dark window opens with a blinking cursor. On newer versions of Windows you can also search for Terminal and use the Windows Terminal app. Either one works.

When this course tells you to run a command, it means: type that command in your terminal exactly as shown and press Enter.

Side by side view of a Mac Terminal window and a Windows PowerShell window, both showing a blinking cursor ready for input
Left: Mac Terminal. Right: Windows PowerShell. Both work the same way for this course.

1.1.3 Step-by-Step Installation

Work through these steps in order. Do not skip ahead. Each step depends on the one before it.

  1. Download and Install Godot 4

    Open a web browser and go to godotengine.org. Click the Download button. You will see two options:

    • Godot Engine — this is the standard version. Download this one.
    • Godot Engine .NET — this is for a different programming language called C#. Do not download this one.

    The standard version uses a language called GDScript. GDScript is what Claude Code will write throughout this course. You will never write it yourself, but knowing its name will help when Claude Code refers to it.

    Install Godot like any other app. On Mac, open the downloaded file and drag the Godot icon into your Applications folder. On Windows, unzip the downloaded file and move the Godot folder somewhere easy to find, like your Desktop or Documents folder.

    Open Godot once to confirm it launches. You will see a screen called the Project Manager. It will be empty because you have not created any projects yet. Close it for now.

    The godotengine.org download page showing two download options: Godot Engine and Godot Engine .NET, with the standard Godot Engine option highlighted
    Download the standard Godot Engine, not the .NET version.
  2. Install Node.js

    Claude Code needs another piece of software called Node.js to run. Node.js is a free tool that lets programs like Claude Code run on your computer from the terminal. You only need to install it once.

    Go to nodejs.org. You will see two download buttons. One says LTS and one says Current. Download the one that says LTS.

    LTS stands for Long Term Support. It means this version is stable, well tested, and will keep working for a long time. It is the safer choice.

    Install Node.js with the default settings. After it finishes, open your terminal and type exactly this:

    node --version

    Press Enter. The terminal should show a version number like v20.11.0. The exact number does not matter. Any version number means Node.js installed correctly.

    Tip: If the terminal says "command not found" after typing node --version, close the terminal completely, open it again, and try the command one more time. Closing and reopening forces the terminal to recognize newly installed software.
  3. Install Claude Code

    With Node.js installed, you can now install Claude Code. It installs through the terminal using a tool called npm. npm is a package manager, which is a program that downloads and installs other software from the internet. npm comes included with Node.js automatically.

    In your terminal, type exactly this:

    npm install -g @anthropic-ai/claude-code

    Press Enter. You will see text scroll past as it downloads and installs. Wait until it stops and gives you a blinking cursor again. Then confirm it installed correctly by typing:

    claude --version

    A version number should appear. If it does, Claude Code is installed.

  4. Get Your Anthropic API Key

    Claude Code connects to Anthropic's servers to generate code. To use it, you need something called an API key. An API key is a unique password that links your Claude Code sessions to your Anthropic account and tracks usage for billing.

    Open a web browser and go to console.anthropic.com. Create a free account if you do not have one. Once you are logged in:

    1. Click API Keys in the left menu
    2. Click Create Key
    3. Give the key any name, like "Game Course"
    4. Click Create
    5. Copy the key that appears. It starts with sk-ant-
    Important: Save this key somewhere safe, like a notes app or a text file on your desktop. Anthropic will not show it to you again after you close that screen. If you lose it, you will need to create a new one.

    What does it cost? Claude Code charges a small amount per session based on how much text is sent and received. For the amount of building you will do in this course, expect to spend between $1 and $5 total. It is pay as you go with no subscription and no minimum charge.

  5. Connect Claude Code to Your Account

    Open your terminal. Type exactly this:

    claude

    Press Enter. Claude Code will start and ask for your API key. Paste in the key you copied in the previous step and press Enter. Claude Code will confirm the connection.

    Type this to test it:

    Hello. Are you working?

    Claude should respond. If it does, your connection is working. Type /exit to close Claude Code for now.

  6. Create Your First Godot Project

    Open Godot. In the Project Manager screen, click New Project. A dialog box appears. Fill in two things:

    • Project Name: Type MyFirstGame or any name you like
    • Project Path: Click Browse and choose a folder you can find easily. Your Documents folder is a good choice.

    Click Create and Edit. Godot opens your new empty project.

  7. Get Familiar with the Godot Editor

    Take 60 seconds to find these four panels before moving on. You will use them throughout the course.

    • Scene Tree (top left): Where your game objects live. Everything you add to a scene shows up here as a list.
    • FileSystem (bottom left): Shows all the files in your project folder. Scripts, scenes, images, and sounds all appear here.
    • Viewport (center): The main canvas. Shows what your game scene looks like.
    • Inspector (right): When you click on an object in the Scene Tree, its settings appear here. You can change colors, sizes, positions, and more.
    Godot editor layout diagram Mockup of the Godot 4 editor showing four panels: Scene Tree top left, FileSystem bottom left, Viewport center, Inspector right Godot 4 editor Scene Tree top left Lists every object in your scene FileSystem bottom left Shows all files in your project Viewport center The game canvas. What your scene looks like. Inspector right Click any object to edit its size, color, position
    The four main panels in the Godot editor. You will use all of them starting in the next lesson.
  8. Open Claude Code Inside Your Project Folder

    This step connects everything together. You are going to open Claude Code inside your Godot project folder so it can read and write your project files.

    First, find your project folder path. In Godot, go to Project in the top menu and click Open Project Folder. A file browser opens showing your project files. Look at the address bar at the top of that window. That is your folder path. Copy it.

    Now open your terminal. You need to navigate to that folder using the cd command. cd stands for change directory. A directory is another word for a folder. The cd command moves your terminal session into the folder you specify.

    Type cd followed by a space and then paste your project folder path:

    cd /Users/yourname/Documents/MyFirstGame

    On Windows it looks like this:

    cd C:\Users\yourname\Documents\MyFirstGame

    Press Enter. Then type:

    claude

    Press Enter. Claude Code starts and is now reading your Godot project folder. You are fully set up.

1.1.4 Confirming Everything Works

Run these two checks before moving on. They take about two minutes.

Check 1: Claude Code can see your project

In your Claude Code terminal session, type exactly this:

List the files in this Godot project.

Claude should respond with a list of files including project.godot. If it does, Claude Code can read your project correctly. If Claude says it cannot find any files, you are in the wrong folder. Type /exit, use cd to navigate to the correct project folder, and run claude again.

Check 2: Godot runs

Switch to Godot. Press the Play button at the top center of the screen. It looks like a triangle pointing right. A small window appears. It will probably be empty. That is fine. Close the play window by clicking the X.

If both checks pass, you are ready for Lesson 1.2.

Takeaway: Open your terminal, navigate to your Godot project folder using cd, run claude, and ask it to list your project files. If it responds with a file list, you are set up correctly.

Lesson 1.2: Your First AI-Built Game Scene

Learning objective: Use a Claude Code prompt to generate a working player character with movement in Godot without writing any code.

1.2.1 How to Write a Prompt That Gets Results

Claude Code is powerful but it is not a mind reader. The quality of what it builds depends almost entirely on how clearly you describe what you want. This section gives you a simple three-part formula that works every time.

Part 1: Context

Tell Claude Code what kind of game you are building and what files already exist in the project. This stops it from building something that does not fit or recreating files that already exist.

Example context:

I am building a 2D platformer in Godot 4. The project is empty right now.

Part 2: Task

Tell Claude exactly what you want built. Be specific. Name the behavior, the controls, and the numbers. Vague descriptions produce vague results.

Vague (avoid this) Specific (do this)
Make a character that moves. Create a Player scene with a CharacterBody2D that moves left and right with the arrow keys at 200 pixels per second and jumps with the spacebar. Add gravity so the player falls when not on a surface.

The difference is numbers and named actions. "Moves" tells Claude nothing useful. "Moves left and right with arrow keys at 200 pixels per second" tells Claude exactly what to build.

Part 3: Confirmation Request

End every single prompt with this sentence:

Tell me the name of every file you created or changed.

This keeps you in control. If Claude creates a file you did not expect, you will know about it before it causes problems later.

Three-part prompt formula Framework visual showing three boxes labeled Context, Task, and Confirmation Request connected left to right with arrows, leading to a final box labeled A prompt that works Context What game, what files exist Task What you want built, specifically Confirmation request List files you created or changed = A prompt that works
The three-part prompt formula. Use all three parts every time.

1.2.2 The Starter Prompt: Copy, Paste, Run

This is your first real build session. The prompt below is ready to use. Copy it exactly as it appears, paste it into your Claude Code terminal, and press Enter.

I am building a 2D platformer in Godot 4. The project is currently empty. Please do the following:

  1. Create a new scene called Player.tscn with a CharacterBody2D as the root node.
  2. Add a ColorRect node as a child to act as a placeholder visual. Make it 32 pixels wide and 64 pixels tall. Color it blue.
  3. Add a CollisionShape2D with a RectangleShape2D that matches the size of the ColorRect.
  4. Create a script called player.gd and attach it to the CharacterBody2D.
  5. The player should move left with the left arrow key and right with the right arrow key at 200 pixels per second.
  6. The player should jump with the spacebar. Set the jump velocity to -400.
  7. Add gravity so the player falls when not on a surface. Use 980 as the gravity value.

Tell me the name of every file you created and list the nodes inside the Player scene.

After you press Enter, Claude Code will work through the task. This usually takes 15 to 30 seconds.

What Claude's response should look like: Claude will tell you it created two files: Player.tscn and player.gd. It will list the nodes inside the Player scene: a CharacterBody2D at the root, with ColorRect and CollisionShape2D as children.

A scene in Godot is a reusable group of objects saved as a file. Player.tscn is your player character scene. The CharacterBody2D is the root node that Godot uses for physics-based characters that move and collide with things. The ColorRect is a colored rectangle used as a placeholder visual until you add real artwork later. The CollisionShape2D is the invisible shape Godot uses to detect when your player touches other objects.

Player.tscn scene tree hierarchy Hierarchy showing Player.tscn with CharacterBody2D as the root node, and ColorRect and CollisionShape2D as child nodes beneath it Player.tscn CharacterBody2D Root node — handles physics and movement ColorRect Blue placeholder visual, 32×64 pixels CollisionShape2D Invisible shape Godot uses for collisions
The Player.tscn scene tree after running the Starter Prompt. Three nodes total. You never need to edit them manually.

You do not need to read or understand the script. You need to confirm the file names match what you asked for.

Adding the player to your main scene:

Claude Code created the player as a separate scene file. Now you need to place it inside your main game scene so Godot can run it.

  1. Switch to Godot.
  2. Look at the FileSystem panel on the bottom left. You should see Player.tscn listed there.
  3. Look at the Scene Tree panel on the top left. It shows the objects currently in your scene.
  4. Drag Player.tscn from the FileSystem panel up into the Scene Tree panel. Drop it there.
  5. Press the Play button at the top of Godot.

Use the arrow keys. Press the spacebar. Your character moves. You built that by describing it in plain English. That is the complete workflow of this course.

The Godot editor showing Player.tscn dragged into the Scene Tree panel, with the blue placeholder rectangle visible in the Viewport
The Player scene instanced into the main scene. The blue rectangle is the placeholder visual.

1.2.3 What to Do When Something Does Not Work

Most first sessions work correctly on the first try. When they do not, the fix is almost always one short follow-up prompt. Here are the four most common problems and exactly what to do.

The one rule for every problem: Do not open the script file and try to edit the code yourself. Describe what happened and send it to Claude Code. Let Claude fix its own work. You are the director. Claude is the developer.

Problem 1: The character does not appear on screen

The Player scene exists but was not added to the main scene. In Godot, drag Player.tscn from the FileSystem panel into the Scene Tree panel. Press Play again.

Problem 2: The character falls straight through the screen with nothing to land on

There is no floor in the scene yet. That is normal. The full level environment gets built in Module 3. For now, add a temporary floor by typing this into Claude Code:

Add a StaticBody2D with a CollisionShape2D and a ColorRect to the main scene to act as a temporary floor. Make it 1000 pixels wide and 20 pixels tall. Position it near the bottom of the screen. Tell me what file you changed.

A StaticBody2D is a Godot node for objects that do not move, like floors and walls. Your player will land on it and collide with it correctly.

Problem 3: Red text appears in Godot's Output panel

The Output panel is at the bottom of the Godot editor. Red text there means an error occurred. Copy the entire red message. Switch to your Claude Code terminal. Paste the error and type:

Fix this error.

Claude Code will read the error, find the cause in your project files, and fix it. This is called the debug loop. You will use it throughout the course.

Problem 4: The character moves but does not jump

The jump is probably working but there is nothing to land on, so it is hard to see. Add the temporary floor using the prompt from Problem 2 above. With a floor in place, the jump will work as expected.

Takeaway: Run the Starter Prompt. Get your character moving on screen. If something breaks, copy the error and send it to Claude Code with the words "Fix this error." Do not move to Module 2 until you can see your character move left, right, and jump.

Module 1 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: When downloading Godot 4, which version should you choose?

    • A) The .NET version
    • B) The Mono version
    • C) The standard version called Godot Engine
    • D) Whichever version downloads fastest
  2. Question 2: What does the cd command do in a terminal?

    • A) It copies a file from one folder to another
    • B) It moves your terminal session into a different folder
    • C) It closes and restarts the terminal
    • D) It connects Claude Code to the internet
  3. Question 3: You run the Starter Prompt and press Play in Godot but your character does not appear. What is the most likely cause?

    • A) The player.gd script has a syntax error
    • B) Claude Code generated the wrong node type
    • C) Player.tscn was not dragged into the Scene Tree
    • D) Godot needs to be reinstalled
  4. Question 4: Red error text appears in Godot's Output panel after pressing Play. What should you do?

    • A) Open player.gd and try to find the error manually
    • B) Delete Player.tscn and run the Starter Prompt again from scratch
    • C) Copy the error text, paste it into Claude Code, and type "Fix this error"
    • D) Search for the error message on Google
  5. Question 5: Every prompt you send to Claude Code should end with which sentence?

    • A) "Make sure the code is clean and well commented."
    • B) "Tell me the name of every file you created or changed."
    • C) "Run the scene and confirm it works before finishing."
    • D) "Use GDScript and keep the code simple."

Answers

  1. C — The standard version uses GDScript, which is what Claude Code generates throughout this course. The .NET version uses C# and is not needed.
  2. Bcd stands for change directory. It moves your terminal session into the folder you specify. Claude Code must be run from inside your Godot project folder to read and write your files.
  3. C — Claude Code creates the Player scene as a separate file. You have to drag it from the FileSystem panel into the Scene Tree to add it to your main scene before pressing Play.
  4. C — Always send errors back to Claude Code. Do not edit the code manually. Claude can read the error, find the cause in your project files, and fix it in one session.
  5. B — Ending every prompt with a confirmation request keeps you informed of exactly what Claude built or changed. It is the habit that prevents confusion across the whole course.

Lesson 2.1: The One-Page Game Design Document

Learning objective: Complete a one-page GDD template that defines your game's genre, core mechanic, win condition, lose condition, scope, and visual style in plain English.

2.1.1 Why You Need a Plan Before You Prompt

You already have a moving character. The next instinct is to keep building, keep prompting, keep adding things. Do not do that yet.

Here is what happens without a plan. You prompt Claude to add an enemy. Then you prompt it to add coins. Then you decide the enemy should shoot. Then you realize you never defined what winning means. Three hours later you have a collection of systems that do not fit together and no clear finish line.

A plan stops that from happening.

The plan you are going to write is called a Game Design Document, or GDD. In professional game studios a GDD can be hundreds of pages long. Yours will be one page. Six fields. Twenty minutes to complete.

The GDD does two things. First, it forces you to make decisions about your game before you start building. Second, it becomes a reference you paste into Claude Code at the start of every session so Claude always knows what game it is building.

Claude builds better when it knows the full picture. Right now Claude knows you have a player that moves. It does not know what kind of game this is, what the player is trying to do, or what happens when they succeed or fail. The GDD gives Claude that context.

2.1.2 The Six Fields You Need to Fill In

Open a notes app, a Google Doc, or a piece of paper. Fill in these six fields. Keep every answer short. Two sentences maximum per field.

Field 1: Game Type

Describe your game in one sentence. Focus on what the player does and how the screen is oriented.

  • A 2D side-scrolling platformer where the player jumps between platforms and avoids enemies.
  • A top-down game where the player moves through rooms and collects keys.
  • A side-scrolling endless runner where the player dodges obstacles as the speed increases.

Your answer tells Claude which type of scene layout to use and how the camera should behave.

Field 2: Core Mechanic

The core mechanic is the one thing the player does over and over again. Reduce it to a single verb.

  • Jump
  • Dodge
  • Collect
  • Shoot
  • Survive

If you have two verbs, pick one. Your first game needs one core mechanic. You can add a second mechanic to your next game. This constraint is not a limitation. It is what makes a game feel focused and satisfying to play.

Field 3: Win Condition

What does the player do to win a level or complete the game? Be specific.

  • Reach the door at the end of the level.
  • Collect all 10 coins before time runs out.
  • Survive for 60 seconds without being hit.
  • Reach a score of 500 points.

Vague win conditions like "beat the game" are not buildable. A specific win condition like "reach the door" is something Claude can turn into a collision check and a scene transition.

Field 4: Lose Condition

What ends the run and sends the player back to the start?

  • Touch an enemy.
  • Fall off the screen.
  • Run out of time.
  • Lose all three lives.

Keep it specific and keep it to one thing. You can add a health system later. For your first game, one clear lose condition is enough.

Field 5: Scope

How many levels will version one of your game have?

The correct answer is one.

Two is acceptable if your core mechanic genuinely requires more than one level to feel complete. Three or more means your scope is too large and your game will not get finished.

A single well-made level that takes two to four minutes to complete is a real, publishable game. Write: One level or Two levels and nothing else.

Field 6: Visual Style

Pick one word that describes the look of your game.

  • Pixel art
  • Flat
  • Cartoon
  • Minimal

This one word tells Claude what kind of placeholder assets to expect and helps you pick the right Kenney art pack in Module 6. Do not overthink this. You can change the art later.

2.1.3 The Scope Trap and How to Avoid It

The most common reason first games never get published is scope creep. Scope creep is when a project keeps growing because new features get added before the original ones are finished. The idea starts small. Then features get added. The finish line keeps moving. Six months later the project is abandoned.

Here is the test. Read your GDD out loud. If completing this game would take more than one sitting to play, your scope is too large. Cut something.

  • If your win condition involves multiple bosses, cut it to one.
  • If your lose condition involves a complex health system, cut it to one hit.
  • If your scope says three levels, cut it to one.
Scope creep vs contained scope Two side-by-side scenarios. Left shows a game idea that keeps growing with features added, labeled Never ships. Right shows a small contained idea that stays focused, labeled Ships. Scope creep One level, one enemy + boss fight + shop + 3 more levels + multiplayer + achievements + cutscenes Never ships Contained scope One level One enemy One win condition Ships
Every feature you add moves the finish line. Keep the scope fixed and the finish line stays where you put it.

You are not making a lesser game by cutting. You are making a game that will actually exist. A finished simple game beats an unfinished complex game every single time. You can always build a sequel.

Example: A tight, buildable GDD

Field Answer
Game Type A 2D side-scrolling platformer where the player jumps between platforms and avoids one patrolling enemy.
Core Mechanic Jump
Win Condition Reach the door at the far right end of the level.
Lose Condition Touch the enemy.
Scope One level.
Visual Style Pixel art.
Takeaway: Fill out all six fields of your GDD right now before moving to Lesson 2.2. Keep every answer to two sentences or less. Do not move on until all six fields are complete.

Lesson 2.2: Turning Your GDD Into a Build Plan

Learning objective: Convert each section of your completed GDD into a sequence of Claude Code prompts that maps to the build order for your game.

2.2.1 Why Build Order Matters

Claude Code builds one system at a time. That is how it works best. If you ask Claude to build movement, enemies, scoring, and a win screen all in one prompt, the result will be messy, hard to test, and full of errors that are difficult to trace.

The right approach is to build one system, test it, confirm it works, then build the next system on top of it. This is called iterative development. Iterative development means building in small tested steps rather than all at once. Every professional game developer works this way, whether they use AI or not.

There is also a specific order that works better than any other for a simple 2D game. Each system depends on the one before it. Enemies need a level to patrol. Scoring needs a game loop to track. A win screen needs a win condition to trigger it.

The correct build order for your game is:

  1. Player movement (done in Module 1)
  2. Level environment
  3. Enemies or obstacles
  4. Scoring
  5. Win and lose states
  6. Art and sound
  7. Polish and bug fixes
  8. Publish

This course follows that order exactly. Each module from here covers one item on that list.

Eight-step game build order Process flow showing eight build steps from Player Movement down to Publish, each labeled with its corresponding course module number Player movement Module 1 — done Level environment Module 3 Enemies or obstacles Module 4 Scoring, win, and game over Module 5 Art and sound Module 6 Polish and bug fixes Module 7 Publish to itch.io Module 8 Setup and build Challenge and loop Polish Ship
The eight-step build order. Each system depends on the one above it. Follow this order and your game will hold together.

2.2.2 How to Write Your Seven Build Prompts

Before you start building anything in Module 3, you are going to write your prompts in advance. This takes about 15 minutes and saves hours of vague, unfocused Claude Code sessions.

Each prompt follows the same three-part formula from Module 1: context, task, and confirmation request.

The context section of every prompt starts with a two-sentence summary of your GDD. This gives Claude the full picture at the start of every session so it never builds something that does not fit your game. Here is how to write your GDD summary. Take your Game Type field and your Core Mechanic field and combine them into two sentences:

Example GDD summary:

I am making a 2D side-scrolling platformer in Godot 4. The player jumps between platforms, avoids enemies, and reaches the door at the end of the level to win.

GDD fields mapping to prompt parts Diagram showing GDD fields on the left connected by arrows to the three prompt parts on the right. Game Type and Core Mechanic map to Context. Win Condition and Lose Condition map to Task. Confirmation Request is always the same closing line. Your GDD Game Type + Core Mechanic Win Condition + Lose Condition Scope + Visual Style Your prompt Context GDD summary — always the opener Task What to build this session Confirmation request Always the same closing line — "Tell me every file you created or changed"
Your GDD fields slot directly into the three-part prompt formula. The context comes from your GDD. The task changes each session. The confirmation request never changes.

You will paste this summary at the start of every prompt from Module 3 onward.

Now write your seven prompts using the template below. Fill in the task section for each one based on your GDD. The context and confirmation request are the same every time.

Prompt 1: Level Environment (Module 3)

CONTEXT: [Paste your two-sentence GDD summary here]
Existing files: Player.tscn, player.gd

TASK: [Describe the level layout you want. Include floor, platforms or walls, a start point, and an end point. Keep it simple. One screen worth of space.]

CONFIRMATION: Tell me the name of every file you created or changed.

Prompt 2: Core Mechanic Additions (Module 3)

CONTEXT: [Paste your two-sentence GDD summary here]
Existing files: Player.tscn, player.gd, Level.tscn

TASK: [Describe any additions to the core mechanic beyond basic movement. If your mechanic is just movement and jump, write "No additions needed."]

CONFIRMATION: Tell me the name of every file you created or changed.

Prompt 3: Enemy or Obstacle (Module 4)

CONTEXT: [Paste your two-sentence GDD summary here]
Existing files: Player.tscn, player.gd, Level.tscn

TASK: [Describe your enemy or obstacle behavior. Include what it does, how it moves, and what happens when the player touches it.]

CONFIRMATION: Tell me the name of every file you created or changed.

Prompt 4: Score System (Module 5)

CONTEXT: [Paste your two-sentence GDD summary here]
Existing files: Player.tscn, player.gd, Level.tscn, [enemy file]

TASK: [Describe what triggers the score to increase and where the score should display on screen.]

CONFIRMATION: Tell me the name of every file you created or changed.

Prompt 5: Win and Lose States (Module 5)

CONTEXT: [Paste your two-sentence GDD summary here]
Existing files: Player.tscn, player.gd, Level.tscn, [enemy file]

TASK: [Describe your win condition and lose condition exactly as written in your GDD. Include what screen should appear when each one triggers.]

CONFIRMATION: Tell me the name of every file you created or changed.

Prompt 6: Art and Sound (Module 6)

CONTEXT: [Paste your two-sentence GDD summary here]
Existing files: Player.tscn, player.gd, Level.tscn, [enemy file], WinScreen.tscn, GameOver.tscn

TASK: [Describe your visual style. List which scenes need sprites replaced. List what sounds you want: one background music track and one sound effect.]

CONFIRMATION: Tell me the name of every file you created or changed.

Prompt 7: Polish and Bug Fixes (Module 7)

CONTEXT: [Paste your two-sentence GDD summary here]
Existing files: [list all files at this point]

TASK: [Leave this blank for now. You will fill it in during Module 7 based on what the Finish Your Game Checklist identifies as missing or broken.]

CONFIRMATION: Tell me the name of every file you created or changed.

2.2.3 A Completed Example

Here is what a filled-out prompt sequence looks like for a simple platformer. Use this as a reference when writing your own.

Game: 2D platformer. Player jumps between platforms, avoids a patrolling enemy, reaches the door to win. One level. Pixel art style.

GDD Summary:

I am making a 2D side-scrolling platformer in Godot 4. The player jumps between platforms, avoids a patrolling enemy, and reaches the door at the end of the level to win.

Prompt 1 example task:

Create a Level.tscn with a TileMap for the floor and three platforms at different heights. Add a door object at the far right of the level. The level should be about 2000 pixels wide. Use placeholder colored rectangles for all visuals for now. Tell me the name of every file you created or changed.

Prompt 3 example task:

Create an Enemy.tscn with a CharacterBody2D that walks left and right between two points 200 pixels apart. It should reverse direction when it hits a wall. When the player touches the enemy, restart the current scene. Use a red ColorRect as a placeholder visual. Tell me the name of every file you created or changed.

Prompt 5 example task:

When the player touches the door object, load a WinScreen.tscn that shows the text "You Win" and a Retry button that reloads Level.tscn. When the player touches the enemy and the scene restarts, that is the lose condition. No separate game over screen needed for now. Tell me the name of every file you created or changed.

Your prompts will look different because your game is different. The structure is the same. The content comes from your GDD.

Takeaway: Write all seven prompts using the Prompt Sequence template above. Fill in your GDD summary at the top of each one. Fill in the task for prompts 1 through 6. Leave prompt 7 blank for now. Save the document somewhere you can find it. You will use it starting in Module 3.

Module 2 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: What is the purpose of pasting your GDD summary at the start of every Claude Code prompt?

    • A) It tells Claude which programming language to use
    • B) It gives Claude the full context of your game so it does not build something that does not fit
    • C) It replaces the need for a confirmation request at the end of the prompt
    • D) It sets the file name for the scene Claude is about to create
  2. Question 2: Your GDD has two core mechanics: jumping and shooting. What should you do?

    • A) Build both. Two mechanics make the game more interesting.
    • B) Pick one for your first game and save the second for a sequel.
    • C) Combine them into one mechanic called jump-shooting.
    • D) Ask Claude Code to decide which one fits better.
  3. Question 3: What is the correct build order for the first three systems after player movement?

    • A) Art and sound, then enemies, then level environment
    • B) Win and lose states, then scoring, then enemies
    • C) Level environment, then enemies or obstacles, then scoring
    • D) Scoring, then level environment, then win and lose states
  4. Question 4: Your scope field in the GDD says four levels. What should you do?

    • A) Keep it. More levels make the game more valuable.
    • B) Cut it to one level. Ship a complete single level first.
    • C) Cut it to two levels because that is the maximum acceptable scope.
    • D) Leave the scope open and decide after you start building.
  5. Question 5: What does the Visual Style field in the GDD tell Claude Code?

    • A) Which rendering engine to use inside Godot
    • B) How many colors the game is allowed to use
    • C) What kind of placeholder assets to expect and which art pack to pick in Module 6
    • D) Whether to use 2D or 3D scenes

Answers

  1. B — Claude Code has no memory between sessions. Pasting your GDD summary at the start of every prompt gives it the context it needs to build something that fits your specific game.
  2. B — Your first game needs one core mechanic. Two mechanics create balancing problems and double the build time. Pick one and save the other for your next game.
  3. C — Each system depends on the one before it. Enemies need a level to patrol. Scoring needs a game loop. Win and lose states need all of the above to be in place first.
  4. B — One level is the right scope for a first game. Four levels multiplies your build time by four and dramatically increases the chance you never finish. Ship one level first.
  5. C — The visual style word helps Claude know what kind of assets to expect and helps you pick the matching Kenney art pack when you add real art in Module 6.

Lesson 3.1: Prompting Claude Code to Build Your Mechanic

Learning objective: Use your GDD and prompt sequence to generate a working core mechanic in Godot through a structured Claude Code session.

3.1.1 Setting Up Every Claude Code Session the Right Way

You wrote your seven prompts in Module 2. Now you run the first real one. Before you paste anything into Claude Code, there are four habits that make every session work. Build these in now and the rest of the course gets easier.

Habit 1: Always start with your GDD summary. The two-sentence summary you wrote in Lesson 2.2 goes at the top of every session. Claude Code remembers the project files but not the design choices. The summary is how you keep it pointed at the right game.

Habit 2: Tell Claude what already exists before asking for something new. If you have Player.tscn already, say so. This stops Claude from rebuilding the player from scratch and overwriting your work.

Example opener for every session:

Project context: I am building a 2D side-scrolling platformer in Godot 4. The player jumps between platforms and reaches a door to win.

Existing files: Player.tscn and player.gd already exist. The player moves left and right and jumps. Do not modify or recreate these files.

Habit 3: Ask one system at a time. Do not ask for movement and enemies in the same prompt. Do not ask for a level and a score system in the same prompt. One system per session. Test it. Then move to the next.

Habit 4: End every prompt with a confirmation request. The closing line you learned in Lesson 1.2 stays on every prompt for the rest of the course: Tell me the name of every file you created or changed. If Claude touches a file you did not expect, you ask what it is before you press Play.

Four Claude Code session habits Four checklist items showing the habits to follow at the start of every Claude Code session: paste GDD summary, list existing files, one system at a time, end with confirmation request Do these four things at the start of every Claude Code session 1. Paste your GDD summary — two sentences at the top of every prompt 2. List files that already exist — so Claude doesn't rebuild what's already there 3. Ask for one system only — one session, one task, then test before the next 4. End with the confirmation request — "Tell me every file you created or changed"
These four habits take ten seconds to follow and prevent most first-build problems. Skip any one and the session gets harder to debug.

3.1.2 The Core Mechanic Prompt Library

You already have a moving player from Module 1. The Module 1 starter prompt covered basic platformer movement. This section gives you full prompts for three game types so you can pick the one that matches your GDD.

Pick one prompt. Run it as-is the first time. Customize after it works.

If your GDD says platformer:

[Your GDD summary here.]

Existing files: Player.tscn and player.gd. Modify player.gd to add the following: jump height of 400 pixels, gravity of 980, coyote time of 0.1 seconds, and variable jump height (the player jumps higher if the spacebar is held). Do not change movement speed. Tell me the name of every file you created or changed.

Coyote time is a small grace period after the player walks off a ledge where they can still jump. It is named after a cartoon character who could run off cliffs without falling for a second. Adding 0.1 seconds of coyote time makes a platformer feel responsive instead of unfair.

If your GDD says top-down:

[Your GDD summary here.]

Existing files: Player.tscn and player.gd. Replace the movement code in player.gd with eight-directional movement using arrow keys or WASD. Speed should be 200 pixels per second. Remove gravity and jump entirely since this is a top-down game. Tell me the name of every file you created or changed.

If your GDD says endless runner:

[Your GDD summary here.]

Existing files: Player.tscn and player.gd. The player should move automatically to the right at 250 pixels per second. The arrow keys should switch between three vertical lanes spaced 80 pixels apart. Spacebar should make the player jump with a velocity of -400. Keep gravity at 980. Tell me the name of every file you created or changed.

After Claude responds, look at the file list. It should only mention player.gd. If it created a new scene file or changed Player.tscn, ask Claude what it changed and why before pressing Play.

3.1.3 Testing the Mechanic Before Moving On

Press Play in Godot. Move the player around. Do this for a full minute before deciding if it works. First impressions of game feel are unreliable. A minute of play tells the truth.

What you are checking for:

  • Movement responds the moment you press a key, not half a second later
  • Jumping feels predictable. The same press produces the same jump every time.
  • No red error text appears in the Output panel (the bottom panel in Godot, already covered in Lesson 1.2)
  • The player does not slide, drift, or get stuck on edges

If something feels off, the fix is almost always a one-sentence follow-up prompt. Examples that work:

The jump feels too floaty. Increase gravity from 980 to 1400.

The player slides after I let go of the arrow key. Add friction so the player stops immediately.

The player can jump infinite times in mid-air. Limit jumps to one per ground touch.

Do not stack changes. Make one tuning change. Test it. Make the next one. If you ask Claude to change five things at once, you cannot tell which change broke the game when something feels worse.

Takeaway: Run your core mechanic prompt. Play your game for one full minute. Do not move to the next lesson until the movement feels right.

Lesson 3.2: Building Your Level Environment

Learning objective: Use Claude Code to generate a basic level layout that gives the player a space to move through and interact with.

3.2.1 What a Minimal Level Needs

A working mechanic with no level to play it in is not a game. It is a tech demo. This lesson gives the player a place to be.

Your first level needs four things only. A floor so the player does not fall forever. Some platforms or walls so movement is interesting. A start point where the player spawns. An end point where the player can win. That is it.

Resist the urge to build a beautiful, complex level here. Your first level exists to test that your mechanic feels good in real space. You will replace or expand it after the rest of the systems work.

In Godot, 2D levels are built using something called a TileMap. A TileMap is a special node that lets you paint a level using a grid of small image tiles, like building with Lego blocks. Instead of placing every floor piece by hand, you select a tile and paint it onto the grid. Godot handles the spacing and the collision automatically.

The image set the TileMap pulls tiles from is called a tileset. A tileset is just a single image file with a bunch of tiles arranged in a grid. Godot ships with a default placeholder tileset built in, which is what you will use for now. Real art comes in Module 6.

3.2.2 The Level Prompt and What to Expect

Open Claude Code in your Godot project folder. Paste your standard session opener (GDD summary plus list of existing files). Then paste the level prompt below.

Level Environment Prompt:

Create a new scene called Level.tscn. The root node should be a Node2D called Level. Add a TileMap node as a child. Use Godot's built-in placeholder tileset. Build a simple level with: a continuous floor across the bottom of the screen, two floating platforms positioned for jumping between, and boundary walls on the left and right edges so the player cannot walk off screen. Add a Camera2D node that will follow the player. Tell me the name of every file you created or changed and tell me the position of the player spawn point.

Claude Code will create Level.tscn and may also create or modify a level.gd script for the camera follow logic. The Camera2D node is what keeps the view centered on your player as they move. Without it, the player walks off screen and you cannot see them anymore.

Open Level.tscn in Godot. You should see a basic blocky level with a floor, two platforms, and walls on each side. It will not look pretty. That is correct.

Common bug at this point: the player falls straight through the floor when you press Play. This means the collision layers do not match between the player and the TileMap.

A collision layer is how Godot decides which objects can touch each other. Two objects only collide if they share a layer. The player is on layer 1 by default. If Claude put the TileMap on a different layer, they cannot touch.

Send Claude this exact follow-up: The player falls through the floor when I press Play. Set the TileMap collision layer and mask to layer 1 so it matches the player. Confirm what you changed.

Claude fixes the layer in the scene file and the floor becomes solid.

3.2.3 Connecting the Player to the Level

You now have two scenes: Player.tscn from Module 1 and Level.tscn from this lesson. They are separate files. The level scene needs to know about the player scene before they work together. The way scenes use other scenes in Godot is called instancing.

Instancing means you take a finished scene like Player.tscn and drop a copy of it inside another scene like Level.tscn. Each copy is called an instance. You can change the player scene later and every level that uses an instance updates automatically.

Send Claude this prompt:

Instance my Player.tscn inside Level.tscn. Position the player at the start of the level on top of the floor, away from the walls. Make the Camera2D node a child of the player instance so the camera follows the player automatically. Tell me the exact position you placed the player at.

Open Level.tscn and press Play. The player should appear on the floor. Walk left and right. Jump onto the platforms. The camera should follow you. If anything falls flat, send the specific behavior to Claude. Do not edit the scene by hand.

Once everything works, save a backup of your project. On Mac or Windows, right-click the project folder and choose Compress. Name the compressed file game-checkpoint-1. Move it somewhere outside the project folder. If something breaks badly later, you can come back to this point.

Godot Level.tscn scene tree hierarchy Hierarchy diagram showing Level.tscn with Node2D as root, containing TileMap and a Player instance as children, with Camera2D nested inside Player Level.tscn Node2D Root node — named "Level" TileMap Paints floor, platforms, walls Player (instance) Player.tscn placed here Camera2D Follows player as they move Root node Level geometry Player instance Camera (child of player)
The Level.tscn scene tree after both prompts. The Camera2D sits inside the Player so it follows the player as they move.
Takeaway: Build your level. Walk through it with your player. Save a project backup named game-checkpoint-1 outside the project folder.

Module 3 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: You are starting a new Claude Code session to build a level. What should you include at the very top of your first prompt?

    • A) A description of the art style you want
    • B) Your two-sentence GDD summary and a list of files that already exist
    • C) The full text of your Prompt Sequence Document
    • D) A request for Claude to list the files in the project
  2. Question 2: What does coyote time do in a platformer?

    • A) It makes the player fall faster after jumping
    • B) It gives the player a short grace period to jump after walking off a ledge
    • C) It adds a dash move when the player double-taps a direction
    • D) It slows the player down near the edge of a platform
  3. Question 3: What is a TileMap in Godot?

    • A) A script that controls how the player moves through a level
    • B) An image file containing all the sprites for a game
    • C) A node that lets you paint a level using a grid of small image tiles
    • D) A camera that follows the player across a scrolling level
  4. Question 4: You press Play and your player falls straight through the floor. What is the most likely cause?

    • A) The player script has a syntax error
    • B) The TileMap collision layer does not match the player collision layer
    • C) The Camera2D is not attached to the player
    • D) The floor tiles are on the wrong row of the TileMap grid
  5. Question 5: What does instancing a scene mean in Godot?

    • A) Exporting a scene as a playable web build
    • B) Connecting two scripts so they share the same variables
    • C) Placing a copy of one finished scene inside another scene
    • D) Duplicating a node and giving it a new name
  6. Question 6: Your player can walk on the floor and jump between platforms. Everything works. What should you do before moving to Module 4?

    • A) Add a background image so the level does not look empty
    • B) Compress the project folder and save a backup named game-checkpoint-1
    • C) Ask Claude to add placeholder enemies so you can test collision early
    • D) Export the game as a web build to confirm it runs in a browser

Answers

  1. 1. B — Start every session with your GDD summary and a list of existing files. This gives Claude the context it needs and stops it from rebuilding scenes that already exist.
  2. 2. B — Coyote time gives the player a short window to jump after walking off a ledge. It makes platformers feel fair instead of frustrating.
  3. 3. C — A TileMap is a Godot node that lets you build levels by painting tiles onto a grid. Godot handles the spacing and collision automatically.
  4. 4. B — If the player falls through the floor, the TileMap collision layer does not match the player collision layer. Tell Claude to set both to layer 1.
  5. 5. C — Instancing means placing a copy of a finished scene inside another scene. Changes to the original scene update every instance automatically.
  6. 6. B — Save a project backup named game-checkpoint-1 before moving on. Compress the folder and store it outside the project directory.

Module 3 Recap

  • Start every Claude Code session with your GDD summary and a list of files that already exist. One system per session. Test before building the next one.
  • The Core Mechanic Prompt Library has ready-to-use prompts for platformer, top-down, and endless runner. Pick one and run it as-is before customizing anything.
  • A minimal level needs a floor, some platforms or walls, a start point, and an end point. Build that first. Complexity comes later.
  • If the player falls through the floor, the TileMap and player collision layers do not match. One follow-up prompt fixes it.
  • Save a project backup named game-checkpoint-1 after your level works. Compress the folder and store it outside the project directory.

Lesson 4.1: Choosing the Right Challenge for Your Game

Learning objective: Select one challenge type that matches your game's core mechanic and describe it precisely enough for Claude Code to build it.

4.1.1 Challenge Type Options and Which Fits Your Mechanic

Your game has a player that moves. It has a level to move through. Right now nothing stops the player from walking to the end and winning immediately. That is not a game. That is a hallway.

A challenge is anything that requires the player to do something skillfully to avoid losing. In most games the challenge is an enemy, a hazard, or an obstacle. Your first game needs exactly one. Not two. One.

Adding a second challenge type before the first one works creates a debugging nightmare. You will not know which system broke the game. Keep it to one and get it right.

There are three challenge types covered in this module. Pick the one that matches your GDD's core mechanic.

Patrol enemy — An enemy that moves back and forth between two fixed points. It reverses direction when it hits a wall or reaches the end of its path. The player must time their movement to get past it or jump over it. This fits platformers best.

Chaser enemy — An enemy that detects the player when they get close enough and then moves toward them. It has a detection radius, which is an invisible circle around the enemy. When the player steps inside that circle, the enemy starts chasing. This fits top-down games best, but also works in platformers where you want the enemy to feel reactive.

Static hazard — A spike, pit, or danger zone that does not move. The player loses on contact. The challenge is pure navigation. This fits any game type but works especially well in endless runners where the level itself moves toward the player.

Three challenge types illustrated Three side-by-side panels showing patrol enemy moving between two points, chaser enemy with detection radius circle around player, and static hazard blocking a path Patrol enemy E patrol path P Times movement to slip past Chaser enemy E 160px P Enemy chases when player enters radius Static hazard HAZARD P safe path Navigate around or over it
The three challenge types. P is the player, E is the enemy. Each type requires a different skill from the player.

Which challenge fits which game type:

Game type Best fit Also works
Platformer Patrol enemy Static hazard
Top-down Chaser enemy Static hazard
Endless runner Static hazard Patrol enemy

Look at your GDD. Find the Core Mechanic field. Match it to the table above and pick your challenge type. If you are genuinely unsure, pick the static hazard. It is the simplest to build and the easiest to tune.

4.1.2 Describing Your Challenge to Claude

The most common mistake at this stage is describing what the challenge looks like instead of what it does. Claude Code builds behavior from code. It cannot build a feeling. It can build a specification.

Two ways to describe the same enemy:

Vague: Add a scary enemy that moves around and hurts the player.

Specific: Add an enemy that moves left and right between two points 200 pixels apart and reverses direction when it hits a wall. When the player touches the enemy, restart the current scene.

The vague version requires Claude to make three or four decisions you should be making. It will make them differently every time, and the result will need multiple rounds of follow-up fixes.

The specific version gives Claude exactly what it needs. One session. One result.

Every challenge description needs three things:

  1. The behavior. What does it do? Move, chase, sit still. How fast. Between which points or within which radius.
  2. The trigger. What counts as a hit? Touching the enemy, entering a zone, falling into a pit.
  3. The consequence. What happens when the player is hit? Restart the scene, lose one life, go to a game over screen.

The Challenge Prompt Library in the next subsection has all three built in. You do not need to write these from scratch. But understanding why those three things matter will help you write follow-up prompts when you need to tune the result.

Three parts of a challenge description Three boxes labeled Behavior, Trigger, and Consequence connected left to right with arrows, each with a short example beneath Behavior What does it do? Moves left and right at 80 px/sec Trigger What counts as a hit? Player touches the enemy Consequence What happens next? Restart the current scene
Every working challenge description answers all three. Missing any one of them means Claude has to guess.

4.1.3 The Challenge Prompt Library

Find your challenge type below. Copy the matching prompt. Paste it into Claude Code after your standard session opener (GDD summary plus list of existing files).

Run each prompt as written before changing anything. Customize after it works, not before.

Patrol enemy prompt (platformer):

[Your GDD summary here.]

Existing files: Player.tscn, player.gd, Level.tscn. Create a new scene called Enemy.tscn with a CharacterBody2D as the root node. Add a ColorRect placeholder visual, 32 by 32 pixels, colored red. Add a CollisionShape2D with a RectangleShape2D matching the visual size. Create an enemy.gd script that moves the enemy left and right at 80 pixels per second. When the enemy hits a wall or reaches the edge of a platform, reverse its direction. Set the enemy collision layer to layer 1. When the player touches the enemy, restart the current scene using get_tree().reload_current_scene(). Instance three copies of Enemy.tscn into Level.tscn at different positions across the level. Tell me the name of every file you created or changed.

Chaser enemy prompt (top-down):

[Your GDD summary here.]

Existing files: Player.tscn, player.gd, Level.tscn. Create a new scene called Enemy.tscn with a CharacterBody2D as the root node. Add a ColorRect placeholder visual, 32 by 32 pixels, colored red. Add a CollisionShape2D with a RectangleShape2D matching the visual size. Create an enemy.gd script with a detection radius of 160 pixels. When the player enters that radius, the enemy moves toward the player at 60 pixels per second. When the player is outside the radius, the enemy stays still. Set the enemy collision layer to layer 1. When the player touches the enemy, restart the current scene using get_tree().reload_current_scene(). Instance two copies of Enemy.tscn into Level.tscn at different positions. Tell me the name of every file you created or changed.

Static hazard prompt (any game type):

[Your GDD summary here.]

Existing files: Player.tscn, player.gd, Level.tscn. Create a new scene called Hazard.tscn with a StaticBody2D as the root node. Add a ColorRect placeholder visual, 32 by 32 pixels, colored orange. Add a CollisionShape2D with a RectangleShape2D matching the visual size. Set the collision layer to layer 1. When the player touches the hazard, restart the current scene using get_tree().reload_current_scene(). Instance four copies of Hazard.tscn into Level.tscn at different positions where the player must navigate around or over them. Tell me the name of every file you created or changed.

Note on get_tree().reload_current_scene(): This is the GDScript command that restarts the current level from the beginning. It is how all three prompts handle the player getting hit. You do not need to understand the code. You need to know what it does: when the player touches something dangerous, the level resets and the player tries again.

Do not add your challenge and a new level in the same session. The collision layer logic between the player, the challenge, and the level geometry is the most common source of bugs at this stage. If you change too many things at once, you will not know where the problem is. Add the challenge first. Test it. Then move on.

Takeaway: Pick your challenge type. Find the matching prompt in the library above. Do not customize it yet. Run it as written first.

Lesson 4.2: Testing and Tuning the Challenge

Learning objective: Test an AI-generated enemy or obstacle in Godot and use follow-up prompts to tune its difficulty to a playable level.

4.2.1 What Playable Difficulty Feels Like

Press Play. Try to reach the end of your level. Count how many attempts it takes before you get there.

If you reach the end on your first try without dying, the challenge is too easy. A player who has never seen your game will find it even easier than you do, because you built it and you know where everything is.

If you die ten times in a row without making meaningful progress, the challenge is too hard. Players quit games that feel unfair. They do not assume they will eventually win. They assume the game is broken.

The target for your first game is two to four attempts to complete. That range is not a design opinion. It is the window where a new player feels challenged but not cheated. Below two attempts and the game is forgettable. Above four and most players will not finish.

Play your level ten times in a row. Track how many runs end in a win versus a death. If you win more than eight out of ten, the challenge needs to get harder. If you win fewer than two out of ten, it needs to get easier. You are the only person who can make this judgment. Claude cannot play your game.

Difficulty tuning target range A horizontal scale from Too Easy on the left to Too Hard on the right, with a highlighted green zone in the middle labeled Playable showing the 2 to 4 attempts target Too easy Playable 2–4 attempts to win Too hard Win 10/10 Win 8/10 Win 2/10 Win 0/10 Tune harder → ← Tune easier Target zone
Aim for the green zone. Outside it, use the follow-up prompts in the next section to adjust enemy speed, patrol range, or detection radius.

Play like a stranger. You know your level. You know where the enemy turns around, how far the hazard reaches, when to jump. A first-time player knows none of that. When you play your own level, try to forget what you know. Take the same routes a stranger would take. If the first route a stranger would try leads to an instant death, that is not a skill check. That is a trap.

4.2.2 Follow-Up Prompts for Tuning

Every tuning change is a one-sentence prompt. Short and specific. One variable at a time.

After each change, press Play and test again before sending the next prompt. If you send three tuning requests at once, you will not know which one made things better or worse.

If the patrol enemy is too fast or too slow:

Reduce the patrol enemy's movement speed from 80 to 50 pixels per second.

Increase the patrol enemy's movement speed from 80 to 120 pixels per second.

If the patrol enemy's patrol range is wrong:

Reduce the patrol enemy's patrol distance from 200 pixels to 120 pixels so it covers less ground.

If the chaser enemy detects the player too early or too late:

Reduce the chaser enemy's detection radius from 160 pixels to 100 pixels.

Increase the chaser enemy's detection radius from 160 pixels to 220 pixels.

If the chaser enemy moves too fast once it detects the player:

Reduce the chaser enemy's chase speed from 60 to 40 pixels per second.

If the static hazard placement is wrong:

Move the hazard instances in Level.tscn so there is at least one clear path through the level that does not require perfect timing to survive.

If the hit response is wrong:

When the player touches the enemy, restart only the current scene instead of going to a game over screen. The player should start back at their spawn point immediately.

One change at a time. This is the rule that saves the most time in this phase. A student who sends five tuning requests at once and then finds the game feels worse cannot tell which change caused the problem. They send five more requests trying to undo the damage. One change, one test, one decision. Every time.

4.2.3 Fixing the Restart Loop

Before you move to Module 5, the death and restart loop needs to work cleanly every single time. This is a requirement, not a suggestion.

A scene reload is what happens when get_tree().reload_current_scene() runs. Godot destroys the current level and loads it fresh from the saved file. The player returns to their starting position. Enemies reset to their starting positions. The score resets if you have one. Everything goes back to zero.

Test the restart loop like this:

  1. Press Play.
  2. Walk into your challenge on purpose.
  3. Confirm the scene reloads and the player spawns at the start.
  4. Walk into the challenge again immediately.
  5. Confirm it reloads cleanly a second time.
  6. Play through to the end of the level.
  7. Die once more after that.
  8. Confirm the reload still works.

If the scene does not reload, or if it reloads but the player spawns in the wrong place, or if the enemies do not reset to their starting positions, send Claude this prompt:

When the player dies the scene does not restart correctly. Specifically: [describe exactly what you see]. Fix the death and restart logic so the player returns to their spawn point and all enemies reset to their starting positions.

Fill in the bracket with what you actually observe. "The enemy does not reset" is a description. "The enemy teleports to the corner of the screen" is more useful. The more specific you are, the faster Claude fixes it.

4.2.4 Saving Checkpoint 2

Once the challenge is in, the difficulty feels right across ten test runs, and the restart loop works every time, save a backup.

Right-click your Godot project folder. Choose Compress (Mac) or Send to Compressed Folder (Windows). Name the compressed file game-checkpoint-2. Move it somewhere outside the project folder, the same place you stored game-checkpoint-1.

If something breaks badly in Module 5 and the fix takes longer than three Claude Code sessions, you can come back to this checkpoint. You lose only the Module 5 work, not everything. Checkpoints are cheap insurance.

What the project folder should contain at this point:

  • Player.tscn and player.gd — the player scene and movement script
  • Level.tscn — the level with TileMap, player instance, and challenge instances
  • Enemy.tscn and enemy.gd (or Hazard.tscn) — your challenge scene and script

If any of those files are missing from your FileSystem panel, tell Claude which one is absent and ask it to create it.

Takeaway: Play your level ten times. Count your wins. Tune the difficulty until completing the level takes two to four attempts. Test the restart loop. Save game-checkpoint-2.

Module 4 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: You are building a top-down game. Which challenge type fits best?

    • A) Patrol enemy
    • B) Chaser enemy
    • C) Static hazard
    • D) Any of the three — game type does not matter
  2. Question 2: What is a detection radius?

    • A) The distance a patrol enemy travels before reversing direction
    • B) An invisible circle around a chaser enemy that triggers it to start moving toward the player
    • C) The area of the level the player must stay inside to avoid losing
    • D) The range of the player's collision shape
  3. Question 3: A student sends Claude this prompt: "Add a scary enemy that moves around and hurts the player." What is the main problem with this prompt?

    • A) It is too long and contains unnecessary words
    • B) It does not specify the behavior, trigger, or consequence, so Claude has to guess
    • C) Claude Code cannot create enemy scenes, only player scenes
    • D) It should use the word "enemy" instead of "scary enemy"
  4. Question 4: What does get_tree().reload_current_scene() do?

    • A) Loads the next level in the sequence
    • B) Saves the current game state to disk
    • C) Restarts the current level from the beginning
    • D) Removes all enemy instances from the scene
  5. Question 5: You play your level ten times and win nine out of ten. What should you do?

    • A) The game is in the playable range. Move to Module 5.
    • B) The challenge is too easy. Use a follow-up prompt to make it harder.
    • C) The challenge is too hard. Use a follow-up prompt to make it easier.
    • D) Add a second challenge type to increase difficulty.

Answers

  1. 1. B — The chaser enemy fits top-down games best. It detects the player within a radius and moves toward them, which works well when the player can move in any direction.
  2. 2. B — A detection radius is an invisible circle around a chaser enemy. When the player steps inside it, the enemy starts chasing. The radius determines how far away the player can be before the enemy reacts.
  3. 3. B — A good challenge description needs behavior (what it does), a trigger (what counts as a hit), and a consequence (what happens to the player). The vague prompt provides none of these, leaving Claude to guess on all three.
  4. 4. Cget_tree().reload_current_scene() restarts the current level from the beginning. The player returns to their spawn point and all enemies reset to their starting positions.
  5. 5. B — Winning nine out of ten runs means the challenge is too easy. The target range is two to four attempts to complete, which translates to roughly six to eight deaths out of ten runs. Use a follow-up prompt to increase enemy speed or reduce the patrol range to make it harder.

Module 4 Recap

  • Pick one challenge type that matches your game: patrol enemy for platformers, chaser enemy for top-down games, static hazard for any type. One challenge only.
  • Every challenge description needs three things: behavior (what it does), trigger (what counts as a hit), and consequence (what happens to the player).
  • Run the Challenge Prompt Library prompt as written before customizing anything. Get it working first, then tune.
  • Playable difficulty means two to four attempts to complete. Play ten runs and count your wins. Use one-sentence follow-up prompts to tune, one variable at a time.
  • Test the restart loop before moving on. Die on purpose, confirm the scene reloads cleanly, then save game-checkpoint-2.

Lesson 5.1: Building the Score System

Learning objective: Use Claude Code to add a score counter that increments during play and displays on screen in real time.

5.1.1 How Scoring Works in Godot

A score system has three parts. Every score system, in every game, has exactly these three parts.

The first part is a score variable. A variable is a named container that holds a number. The score variable stores the current score as the player plays. It starts at zero when the level loads. It goes up each time the player does the right thing.

The second part is a trigger. A trigger is the event that causes the score to increase. It could be collecting a coin, defeating an enemy, reaching a checkpoint, or surviving a set amount of time. The trigger depends on your GDD's win condition. Check your Core Mechanic and Win Condition fields now and identify what should add to the score.

The third part is a display label. A Label is a Godot node that shows text on screen. The label reads the score variable and updates every time the variable changes. This is what the player sees.

Claude Code generates all three in one prompt. You just need to tell it what your trigger is.

The label sits inside something called a CanvasLayer. A CanvasLayer is a special Godot node that keeps its children fixed on screen regardless of where the camera moves. Without a CanvasLayer, the score label would scroll with the level and disappear off screen as the player moves. With a CanvasLayer, the score stays pinned to the corner of the screen at all times.

Common score triggers by game type:

  • Platformer: Collecting a coin or gem placed in the level
  • Top-down: Defeating an enemy or picking up an item
  • Endless runner: Surviving each second, or passing through a gate

If your game does not have a collectible or defeatable enemy yet, use time survived as the trigger. One point per second is simple and always works.

5.1.2 The Score Prompt and UI Placement

Open Claude Code with your standard session opener. Then paste the Score System Prompt below. Fill in the trigger line based on your game.

Score System Prompt:

[Your GDD summary here.]

Existing files: Player.tscn, player.gd, Level.tscn, Enemy.tscn, enemy.gd (or Hazard.tscn). Add a score system to this project. Create a CanvasLayer node in Level.tscn with a Label child node. Position the label in the top left corner of the screen with 16 pixels of padding from the edges. The label should display "Score: 0" at the start and update in real time as the score increases. The score should increase by 1 each time [describe your trigger here — e.g. "the player touches a coin", "the player survives one second", "the player reaches a checkpoint"]. Create a separate script to manage the score variable. When the scene reloads, the score should reset to zero. Tell me the name of every file you created or changed.

Replace the bracket at the end of the task with your actual trigger. Keep it to one sentence. Specific beats long every time.

After Claude responds, check the file list. It should mention Level.tscn and at least one new script file for the score manager. If it also created or changed your player or enemy files, ask Claude what it changed in those files before pressing Play.

On UI placement: Top left and top center are the most readable positions for a score. Top right works too. Bottom of the screen is harder to read during play. If Claude places the label somewhere that overlaps important gameplay, send a one-sentence follow-up: Move the score label to the top left corner with 16 pixels of padding from the left and top edges.

5.1.3 Testing the Score Loop

Press Play. Test each of these in order before moving on.

  1. Trigger one score event. Does the number on screen increase? If not, the signal is not connected. Tell Claude: The score does not increase when [trigger]. Fix the signal connection between the trigger and the score variable.
  2. Trigger the score event five more times. Does the number keep going up consistently? If it skips or resets unexpectedly, describe exactly what you see and send it to Claude.
  3. Die and let the scene reload. Does the score reset to zero? If it carries the old score into the new run, tell Claude: The score does not reset to zero when the scene reloads. Fix the score reset logic.
  4. Reach a high score through normal play. Does the label stay in the corner without overlapping enemies, platforms, or other UI? If it overlaps something, move it with a follow-up prompt.

A signal is how Godot objects tell each other that something happened. When the player touches a coin, the coin sends a signal. The score manager listens for that signal and adds a point. If the score is not increasing, the signal is either not being sent or not being received. You do not need to understand how signals work in code. You need to describe the symptom and let Claude diagnose it.

Do not add the win screen in this session. The score needs to work correctly on its own before you connect it to end states. Test the score fully here. Win and game over come in the next lesson.

Score system three parts Three boxes showing the three parts of a score system: score variable stores the number, trigger increases it, label displays it on screen Trigger Coin collected, enemy defeated, etc. adds 1 Score variable Stores the number. Resets on reload. updates Label node Displays "Score: 5" pinned to screen corner
The trigger fires, the variable goes up, the label updates. One prompt builds all three.
Takeaway: Run the Score prompt. Trigger a score event and confirm the number increases. Die and confirm the score resets to zero. Do not move to Lesson 5.2 until all three score tests pass.

Lesson 5.2: Building Win and Game Over States

Learning objective: Use Claude Code to generate a win screen and game over screen that complete the game loop and allow the player to restart.

5.2.1 What a Complete Game Loop Requires

Right now your game has no finish line. The player can walk to the win condition and nothing happens. They can die and the scene restarts, but there is no screen acknowledging it. The game feels unfinished because it is unfinished.

A complete game loop has four states. The player moves through all four during a normal run.

State one is Playing. The player is in the level, moving, and trying to reach the win condition.

State two is Win Screen. The player met the win condition. A screen appears confirming it and showing their score. A button lets them play again.

State three is Game Over Screen. The player hit the lose condition. A screen appears and a button lets them try again.

State four is Restart. The player clicks the retry button. The level reloads and the loop begins again from state one.

Both end screens can be visually simple. A background color, two lines of text, and a button. That is all a first game needs. You can add more later. Ship first, polish second.

Four-state game loop Flowchart showing four game states: Playing leads to either Win Screen or Game Over Screen, both of which lead to Restart, which loops back to Playing Playing Player is in the level win condition met lose condition triggered Win Screen Score shown. Retry button. Game Over What happened. Retry button. Restart loop repeats
The complete game loop. Every game needs all four states before it feels finished.

5.2.2 The Win and Game Over Prompt

This prompt generates both end screens in one session. Run it after the score system is working.

Win and Game Over Prompt:

[Your GDD summary here.]

Existing files: Player.tscn, player.gd, Level.tscn, Enemy.tscn or Hazard.tscn, and the score manager script. Create two new scenes. First: WinScreen.tscn. It should have a dark green background, a label that says "You Win", a label showing the player's final score, and a button labeled "Play Again" that reloads Level.tscn. Second: GameOver.tscn. It should have a dark red background, a label that says "Game Over", and a button labeled "Try Again" that reloads Level.tscn. Connect the win screen to trigger when [describe your win condition exactly as written in your GDD — e.g. "the player touches the door object"]. The game over screen already triggers on scene reload from the enemy or hazard collision. Tell me the name of every file you created or changed.

Fill in the win condition bracket with the exact trigger from your GDD. If your win condition is reaching a door, write that. If it is collecting ten coins, write that. The more specific, the fewer follow-up prompts you will need.

On the game over screen: The prompt above does not ask Claude to create a separate game over trigger because you already have one. When the player touches an enemy or hazard, get_tree().reload_current_scene() fires and the level restarts. You only need a game over screen if you want to intercept that restart and show a screen first. If you do, add this to the prompt: Instead of reloading the scene immediately on player death, load GameOver.tscn first. The retry button in GameOver.tscn then reloads Level.tscn.

5.2.3 Testing the Full Loop

This is the most important test in the entire course. Run it completely before calling Module 5 done.

  1. Press Play. Play normally until you reach the win condition. Does the win screen appear? If not, the win trigger is not connected. Send Claude: The win screen does not appear when [win condition]. Fix the trigger connection to load WinScreen.tscn.
  2. On the win screen, confirm your final score is displayed. If the score shows zero or the wrong number, send Claude: The win screen shows the wrong score. Fix the score value passed to WinScreen.tscn.
  3. Click Play Again on the win screen. Does Level.tscn reload cleanly? Does the score reset to zero?
  4. Play again. This time die on purpose. Does the game over screen appear, or does the level just restart silently? Either is acceptable depending on your choice above — confirm it behaves the way you intended.
  5. Click Try Again. Does the level reload? Does the score reset?
  6. Check that enemies reset to their starting positions after every restart. If a patrol enemy spawns in the wrong place after a retry, send Claude: After reloading Level.tscn via the retry button, the enemy does not reset to its starting position. Fix the scene reload so all nodes reinitialize correctly.

What the loop should feel like at this point: Start level, collect points, reach the win condition, win screen appears with correct score, click Play Again, level restarts at zero, die to an enemy, game over screen appears, click Try Again, level restarts at zero, enemy is back in starting position. If all six steps above pass, your game loop is complete.

Takeaway: Run the full six-step test. Win once. Lose once. Confirm both screens appear, both retry buttons work, and the score resets both times. Do not move to Module 6 until the loop is complete.

Module 5 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: A score system in Godot has three parts. Which of the following correctly names all three?

    • A) Script, scene, and node
    • B) Score variable, trigger, and display label
    • C) CanvasLayer, signal, and collision shape
    • D) Player, enemy, and UI
  2. Question 2: Why does the score label need to sit inside a CanvasLayer?

    • A) So the score can be saved between sessions
    • B) So the label stays fixed on screen and does not scroll with the level
    • C) So the score resets correctly when the scene reloads
    • D) So Claude Code can find the label and update it
  3. Question 3: You press Play and trigger a score event five times. The score stays at zero. What is the most likely cause?

    • A) The CanvasLayer is in the wrong scene
    • B) The score variable is set to the wrong data type
    • C) The signal between the trigger and the score manager is not connected
    • D) The label font is too small to display numbers
  4. Question 4: What are the four states in a complete game loop?

    • A) Start, load, play, quit
    • B) Menu, playing, paused, credits
    • C) Playing, win screen, game over screen, restart
    • D) Level, enemy, score, publish
  5. Question 5: You click Play Again on your win screen and the level reloads, but the score carries over from the previous run instead of resetting to zero. What should you send to Claude?

    • A) Recreate the CanvasLayer with a fresh Label node
    • B) Delete the score manager script and start over
    • C) Tell Claude the score does not reset on scene reload and ask it to fix the reset logic
    • D) Change the Play Again button to reload the entire game instead of just the level
  6. Question 6: After clicking Try Again from the game over screen, your patrol enemy spawns in the wrong position. What should you tell Claude?

    • A) Delete Enemy.tscn and rebuild it from scratch
    • B) After reloading Level.tscn, the enemy does not reset to its starting position — fix the scene reload so all nodes reinitialize correctly
    • C) Increase the enemy's patrol speed so it returns to position faster
    • D) Move the enemy's starting position in the Level.tscn editor manually

Answers

  1. 1. B — Every score system has a score variable that stores the number, a trigger that increases it, and a display label that shows it on screen. Claude builds all three in one prompt.
  2. 2. B — A CanvasLayer keeps its children fixed on screen regardless of camera movement. Without it the score label scrolls with the level and disappears as the player moves.
  3. 3. C — If the score does not increase, the signal between the trigger event and the score manager is not connected. Tell Claude which trigger is failing and ask it to fix the signal connection.
  4. 4. C — The four states are Playing, Win Screen, Game Over Screen, and Restart. A game needs all four to feel complete.
  5. 5. C — Describe the specific problem and delegate the fix. Tell Claude the score does not reset on reload and ask it to fix the reset logic. Never edit the script manually.
  6. 6. B — Describe exactly what is wrong and ask Claude to fix the scene reload so all nodes reinitialize. The more specific the description, the faster Claude resolves it.

Module 5 Recap

  • A score system has three parts: a variable that stores the number, a trigger that increases it, and a Label node inside a CanvasLayer that displays it pinned to the screen.
  • If the score does not increase, the signal between the trigger and the score manager is not connected. Describe the symptom to Claude and let it fix the connection.
  • A complete game loop has four states: playing, win screen, game over screen, and restart. Your game needs all four before it feels finished.
  • Both end screens can be simple: background color, one or two lines of text, and a retry button. Ship first, polish second.
  • Run the full six-step loop test before moving to Module 6: win once, lose once, confirm both screens appear, both buttons work, and the score resets every time.

Lesson 6.1: Finding and Adding Free Art Assets

Learning objective: Locate free game art assets from two approved sources and use Claude Code to integrate them into your Godot project.

6.1.1 The Two Asset Sources Worth Your Time

Your game is built with colored rectangles right now. A blue rectangle is the player. A red rectangle is the enemy. That was correct for building. It is not correct for shipping.

A sprite is a 2D image used as a visual for a game character or object. Replacing your placeholder rectangles with sprites is what makes a game look like a game.

You need free sprites that you can use without legal risk. There are two sources worth your time and nothing else.

Kenney.nl is the first stop. Kenney makes professional-quality game art packs and gives them away for free. No account required. No attribution required. No license to track. Download and use. The packs are organized by genre — platformer, top-down, space, racing, puzzle. Each pack contains sprites, tilesets, and UI elements that all match visually.

OpenGameArt.org is the second stop. It has a larger and more varied library. Before downloading anything from OpenGameArt, check the license on the asset page. Filter your searches to show only CC0 assets. CC0 stands for Creative Commons Zero. It means the creator has placed the work in the public domain. You can use it in any game, for free, without attribution, without restriction. Any license other than CC0 has conditions you need to read and follow.

Do not use Google Images or AI image generators for game sprites. Google Images returns copyrighted work you cannot legally use in a published game. AI-generated images have unclear ownership status and inconsistent art styles. Both create problems at publish time. Kenney and CC0 OpenGameArt assets have zero legal risk.

Choose one Kenney pack that matches your game's visual style field from your GDD. Download the whole pack. Use only that pack. One pack used consistently looks intentional. Two packs mixed together look unfinished, even if both packs are good individually.

Free Asset Resource List — Kenney packs by game type:

Game type Recommended Kenney pack URL
Platformer Platformer Pack Redux kenney.nl/assets/platformer-pack-redux
Top-down Top-Down Shooter kenney.nl/assets/topdown-shooter
Endless runner Endless Runner kenney.nl/assets/endless-runner
Any / minimal style Kenney Shape Characters kenney.nl/assets/shape-characters

If none of these fit your game, go to kenney.nl and browse. Every pack has a preview image. Pick one that matches your visual style word from your GDD.

6.1.2 Replacing Placeholder Assets with Claude's Help

Once you have downloaded a Kenney pack, add the files to your Godot project. Do this before opening Claude Code.

  1. Unzip the downloaded Kenney pack on your computer.
  2. Inside the unzipped folder, find the folder named PNG or Sprites. These are the individual sprite files.
  3. In your Godot project folder on your computer, create a new folder called assets.
  4. Copy the sprite files you want to use into that assets folder.
  5. Switch to Godot. Look at the FileSystem panel. You should see the new assets folder and its contents listed there. Godot automatically detects new files added to the project folder.

Now open Claude Code with your standard session opener. Paste the asset replacement prompt below.

[Your GDD summary here.]

Existing files: Player.tscn, player.gd, Level.tscn, Enemy.tscn or Hazard.tscn, WinScreen.tscn, GameOver.tscn. I have added a Kenney asset pack to my project's assets folder. Replace all ColorRect placeholder nodes in Player.tscn and Enemy.tscn (or Hazard.tscn) with Sprite2D nodes using the appropriate image files from the assets folder. For the level, update Level.tscn to use the tileset image from the assets folder instead of the placeholder tiles. Keep all collision shapes exactly as they are. Tell me the name of every file you created or changed and tell me which image file you used for each scene.

A Sprite2D is the Godot node that displays a 2D image in the game. Claude will swap your ColorRect nodes for Sprite2D nodes and point each one at the correct image file from your assets folder.

After Claude responds, open Godot and press Play. Check three things.

  1. Does the art appear? If a scene still shows a colored rectangle, Claude used the wrong file path. Send: The player still shows a colored rectangle instead of the sprite. Check the Sprite2D texture path in Player.tscn and correct it to point to the right file in the assets folder.
  2. Is the art the right size? A tile size is the pixel dimension of one tile in a set — most Kenney packs use 16x16 or 32x32 pixels. If your player sprite appears too large or too small relative to the level tiles, send: The player sprite appears at the wrong scale. The tileset uses 32x32 pixel tiles. Scale the player Sprite2D to match.
  3. Do collisions still work? Run into a wall. Jump on a platform. Touch an enemy. If anything stopped working after the sprite swap, the collision shapes may have shifted. Send: After replacing the sprites, [describe what broke]. Fix the collision shapes to match the new sprite positions.

6.1.3 Keeping Art Simple and Consistent

Two rules that prevent the most common art problems at this stage.

Rule 1: One tile size throughout the level. If your Kenney pack uses 16x16 tiles, every tile in your TileMap should be 16x16. Mixing tile sizes in one level creates gaps, overlaps, and collision mismatches that are tedious to fix. Check the pack's documentation or the sprite file dimensions before you build with them.

Rule 2: Skip the background art for now. A solid color background is fine. It takes ten seconds to set in Godot and it will not compete visually with your sprites. You can add a background image after the game ships. Every hour you spend on background art before shipping is an hour the game did not get published.

Takeaway: Download one Kenney pack that matches your visual style. Drop the sprites into your project's assets folder. Run the asset replacement prompt. Press Play and confirm real art appears with working collisions.

Lesson 6.2: Adding Sound in Two Prompts

Learning objective: Use Claude Code to add background music and one sound effect to your game using free audio files.

6.2.1 Where to Get Free Game Audio

Sound makes a bigger difference than most first-time developers expect. A game with no audio feels unfinished even when the art looks good. Background music sets the mood. A single sound effect at the right moment makes actions feel satisfying. Both together make the game feel real.

You need three audio files. One background music loop. One sound effect for your main action, such as a jump, a collect, or a hit. One sound effect for the win or game over moment. That is the minimum. Do not chase more than that before shipping.

Kenney has audio packs alongside the art packs. Go back to kenney.nl and look for the Interface Sounds pack and the Music Jingles pack. Both are free, no attribution required, and ready to drop into Godot.

If you need something more specific, go to freesound.org. Search for the sound you want. Before downloading anything, click the sound and check the license. Filter to show only CC0 sounds. Search terms that work well: "jump game", "coin collect", "8bit win", "game over jingle", "platformer music loop".

Godot works best with audio in .ogg format. OGG is an open audio file format that Godot can import and play without any extra setup. Most Kenney audio packs include OGG versions. On freesound.org, look for the OGG download option when available. If a file only comes as MP3 or WAV, use a free online converter to convert it before adding it to your project. Search "convert mp3 to ogg free" and use any of the top results.

6.2.2 The Audio Setup Prompt

Add your audio files to your project before opening Claude Code. Create a folder called sounds inside your Godot project folder. Put all three audio files in there. Name them something clear: music.ogg, jump.ogg, win.ogg. Simple names make the prompt easier to write and easier to debug.

Open Claude Code with your standard session opener. Then paste the Audio Setup Prompt below.

Audio Setup Prompt:

[Your GDD summary here.]

Existing files: Player.tscn, player.gd, Level.tscn, Enemy.tscn or Hazard.tscn, WinScreen.tscn, GameOver.tscn. I have added audio files to a sounds folder in my project. Add the following: Background music that loops continuously using the file sounds/music.ogg. Start playing it when Level.tscn loads. Stop it when the level is left. Add a sound effect using sounds/jump.ogg that plays each time the player jumps. Add a sound effect using sounds/win.ogg that plays when the win screen loads. Use AudioStreamPlayer nodes for all three. Set the music volume to -10 db so it does not overpower the sound effects. Tell me the name of every file you created or changed.

An AudioStreamPlayer is the Godot node that plays audio files. Claude will add one to Level.tscn for the music, one to Player.tscn for the jump sound, and one to WinScreen.tscn for the win sound. The volume_db property controls how loud each AudioStreamPlayer is in decibels. Setting music to -10 db keeps it clearly audible but quieter than the sound effects, which is the right balance for a simple game.

Press Play after Claude responds. Walk around the level. Jump. Listen. Then confirm three things.

  1. Does music play on level load? If not, the AudioStreamPlayer is not set to Autoplay. Send: The background music does not play automatically when the level loads. Set the music AudioStreamPlayer to Autoplay in Level.tscn.
  2. Does the jump sound play? Jump five times in a row. If you hear nothing, the signal connecting the jump action to the AudioStreamPlayer is not wired correctly. Send: The jump sound does not play when the player jumps. Fix the connection between the jump action and the jump AudioStreamPlayer in player.gd.
  3. Does the win sound play on the win screen? Play to your win condition and listen when the win screen loads. If it is silent, send: The win sound does not play when WinScreen.tscn loads. Add an AudioStreamPlayer set to Autoplay in WinScreen.tscn using sounds/win.ogg.

6.2.3 Volume and Overlap Issues

Two audio problems come up almost every time. Both have one-sentence fixes.

Music is too loud relative to sound effects:

The background music is too loud. Set the music AudioStreamPlayer volume_db to -15.

Jump sound overlaps itself when jumping rapidly:

The jump sound overlaps itself when the player jumps repeatedly. Set the jump AudioStreamPlayer so it stops and restarts on each jump instead of playing multiple copies at once.

No sound at all after the prompt: The file path is wrong. Godot is looking for the audio file in a location it does not exist. Send Claude the exact path of your audio files and ask it to check the AudioStream property of each AudioStreamPlayer. Example: There is no sound at all. My audio files are at sounds/music.ogg, sounds/jump.ogg, and sounds/win.ogg inside the project folder. Check that each AudioStreamPlayer points to the correct file path.

Good audio at low volume is better than perfect audio at the wrong volume. If everything is working but the mix feels off, spend five minutes on volume and move on. You can refine audio after the game ships. What matters now is that the game sounds like something, not that it sounds perfect.

Save checkpoint 3 after this lesson. Compress your project folder and name it game-checkpoint-3. Store it alongside your other checkpoints outside the project folder. You now have art and sound working. This is the most complete your game has ever been and worth preserving before you start the polish phase.

Where each audio file goes in the game Three columns showing which scene each audio file is added to: music.ogg in Level.tscn, jump.ogg in Player.tscn, win.ogg in WinScreen.tscn Level.tscn AudioStreamPlayer music.ogg Loops. Autoplay on. volume_db: -10 Player.tscn AudioStreamPlayer jump.ogg Plays on jump. Stops and restarts. WinScreen.tscn AudioStreamPlayer win.ogg Plays on load. Autoplay on.
One AudioStreamPlayer per scene. Each file goes in the scene where it logically belongs.
Takeaway: Add your three audio files to the sounds folder. Run the Audio Setup Prompt. Confirm music plays, jump sound triggers, and win sound fires. Fix any volume issues with one-sentence follow-up prompts. Save game-checkpoint-3.

Module 6 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: You need a free sprite pack for your platformer. Which source should you check first?

    • A) Google Images
    • B) Kenney.nl
    • C) Any AI image generator
    • D) Your game's screenshot folder
  2. Question 2: You find a sprite pack on OpenGameArt.org. What license should you look for before downloading?

    • A) MIT
    • B) GPL
    • C) CC0
    • D) Copyright reserved
  3. Question 3: After running the asset replacement prompt, your player still shows a blue rectangle instead of a sprite. What should you send to Claude?

    • A) Delete Player.tscn and rebuild it from scratch
    • B) Check the Sprite2D texture path in Player.tscn and correct it to point to the right file
    • C) Manually edit player.gd to reference the sprite file
    • D) Re-download the Kenney pack and try again
  4. Question 4: What audio file format works best in Godot and requires no extra setup?

    • A) MP3
    • B) WAV
    • C) FLAC
    • D) OGG
  5. Question 5: Your background music is too loud and drowns out the jump sound. What is the correct one-sentence fix?

    • A) Delete the music AudioStreamPlayer and add it again
    • B) Set the music AudioStreamPlayer volume_db to -15
    • C) Lower the jump AudioStreamPlayer volume_db to 0
    • D) Convert the music file to a lower bitrate and re-import it

Answers

  1. 1. B — Kenney.nl is the first stop for free game art. Packs are professional quality, genre-organized, and completely free with no attribution required. Google Images and AI generators create legal risk at publish time.
  2. 2. C — CC0 (Creative Commons Zero) means the creator has placed the work in the public domain. You can use it in any game, for free, without attribution or restriction. Any other license has conditions you need to read and follow.
  3. 3. B — When a sprite does not appear, the file path in the Sprite2D node is wrong. Tell Claude which scene still shows a placeholder and ask it to correct the texture path to point to the right file in the assets folder.
  4. 4. D — OGG is the audio format Godot imports and plays natively with no extra setup. If your source file is MP3 or WAV, use a free online converter before adding it to your project.
  5. 5. B — Setting volume_db to -15 on the music AudioStreamPlayer reduces its volume without affecting the sound effects. One-sentence fix, one follow-up prompt, test and move on.

Module 6 Recap

  • Kenney.nl is the best first source for free game art and audio. Free, no attribution, no legal risk. Download one pack and use only that pack for visual consistency.
  • On OpenGameArt.org, filter to CC0 assets only. Any other license has conditions you need to read before using the asset in a published game.
  • Drop sprite files into an assets folder inside your project before running the replacement prompt. Godot detects new files automatically.
  • Audio files should be in OGG format. One background music loop, one action sound effect, and one win sound is all you need for your first game.
  • Ship first, polish second. A game with simple music and one sound effect that is published beats a game with a perfect audio mix that never gets finished. Save game-checkpoint-3 and move to Module 7.

Lesson 7.1: The Finish Your Game Checklist

Learning objective: Use the Finish Your Game Checklist to identify every missing element and generate a prioritized fix list before publishing.

7.1.1 What Finished Actually Means

Finished does not mean polished. It does not mean professional. It does not mean bug-free.

Finished means a stranger can open your game, play it from start to end or game over, and understand what happened without any help from you. No explanation. No context. No "if you press this first then that." They open it. They play it. They get it.

That is the bar. Everything in this module is about reaching that bar before you publish.

Most first games get abandoned at this stage because the creator keeps adding features instead of checking completeness. A new mechanic sounds more exciting than testing the restart loop one more time. A new level sounds more interesting than writing two sentences of instructions. That instinct is what keeps games from shipping.

The checklist below stops that pattern. Go through it item by item. Every unchecked item is a Claude Code prompt. Fix them in the order listed. Then move to Module 8.

7.1.2 The Checklist Items

Item 1: Main menu

Does your game have a start screen with the game title and a Play button? A stranger who opens your game should not drop immediately into the level with no context. They need a moment to orient.

If missing, send Claude: Create a MainMenu.tscn with the game title "[your title]" displayed prominently and a Play button that loads Level.tscn. Use a simple background color. Tell me the name of every file you created or changed.

Item 2: Controls displayed

Can a new player figure out how to play without guessing? Arrow keys? WASD? Spacebar to jump? If the controls are not shown somewhere, most players will quit within ten seconds of confusion.

Add a controls label to the main menu or to a small HUD element during play. A HUD, short for heads-up display, is the layer of information shown on screen during gameplay — things like the score, a timer, or a controls reminder. Adding one line of text to the main menu that says "Arrow keys to move. Space to jump." is enough.

If missing, send Claude: Add a text label to MainMenu.tscn that lists the controls. Keep it brief: one line per control. Position it below the Play button.

Item 3: Win screen shows score

When the player reaches the win condition, does the win screen display their final score? If the score label shows zero or nothing, the win moment feels hollow.

If broken, send Claude: The win screen does not display the correct final score. Fix the score value passed to WinScreen.tscn so it shows the score the player had when they won.

Item 4: Game over screen shows what happened

Does the game over screen tell the player what ended their run? "Game Over" alone is fine. "You were caught" or "Time ran out" is better. The player should know why they lost.

If unclear, send Claude: Update the GameOver.tscn label to say "[your lose condition outcome]" instead of just "Game Over."

Item 5: No crashes across five full runs

Play your game five times from the main menu all the way through. Win twice. Lose three times. If anything freezes, crashes, or throws a red error in the Output panel at any point, that is a crash and it must be fixed before you publish. Use the debug process in Lesson 7.2 for any crash you find.

Item 6: Audio plays correctly

Music plays on level load. Music stops when you leave the level. Jump sound triggers on jump. Win sound plays on the win screen. Confirm all four. If any are missing, the one-sentence fix prompts from Lesson 6.2 still apply here.

Item 7: Level is completable by a stranger

Play your level as if you have never seen it. Take the first path a new player would take. Is there a route to the win condition that does not require knowing where hidden hazards are? Is the difficulty in the 2-4 attempt range you set in Module 4? If the level is only completable because you know where everything is, adjust the layout or enemy positions with a follow-up prompt.

7.1.3 Fix Priority Order

If multiple items are unchecked, fix them in this order. Do not jump around.

  1. Crashes first. A game that crashes is unplayable. Nothing else matters until the game runs reliably.
  2. Missing UI second. A player with no main menu, no controls label, and no win screen cannot enjoy the game even if everything else works.
  3. Completability third. If a stranger cannot reach the win condition, the game has no finish line.
  4. Polish last. Volume balance, label fonts, background color — these are last because they do not block the player from finishing the game.

Do not add new features during this phase. If you think of something that would make the game better, write it down for a future update. Adding a new mechanic now will introduce new bugs and push the finish line back. The checklist is about completeness, not expansion.

Takeaway: Print or copy the checklist. Go through every item. Write a Claude Code prompt for each unchecked item. Fix them in priority order — crashes first, missing UI second, completability third, polish last.

Lesson 7.2: Bug Fixing with AI

Learning objective: Use a three-step AI debug process to identify, describe, and fix the most common Godot bugs without reading code manually.

7.2.1 The Three-Step Debug Process

A bug is anything your game does that you did not intend. The player falls through the floor when you expected them to land. The score carries over between runs when you expected it to reset. The enemy walks off the platform edge when you expected it to reverse. Bugs are normal. Every game has them before launch. The question is how fast you fix them.

The three-step process below fixes most bugs in one or two Claude Code sessions. Do not skip steps. Do not guess at the cause. Do not open the script file and try to read the code. Describe and delegate.

Step 1: Reproduce the bug consistently. Before you describe a bug, confirm you can trigger it on purpose. Click the exact sequence of actions that causes the problem three times in a row. If the bug happens every time you do X, it is reproducible. Reproducible bugs are fixable. Bugs that happen randomly and cannot be triggered on purpose are much harder to fix — set those aside and focus on reproducible ones first.

Step 2: Describe what you expected and what actually happened. Do not describe the cause. You do not know the cause — that is Claude's job. Describe the symptom. "When I collect the coin the score should increase but it stays at zero" is a symptom. "The signal is not connected" is a guess at a cause. Send the symptom. Let Claude find the cause.

Step 3: Paste the description plus any error text into Claude Code and say fix this. If the Output panel shows red text, copy it and include it in your message. Red text is Godot's error log — it tells Claude exactly where to look. If there is no red text, tell Claude which scene and which action the problem involves.

Three-step debug loop with branch for when fix does not work Flowchart showing Step 1 Reproduce, Step 2 Describe, Step 3 Fix This, then a branch: if fixed the bug is done, if not fixed add context and try a different approach Step 1: Reproduce Trigger the bug 3 times in a row Step 2: Describe Expected vs actual. Paste error text. Step 3: Fix this Send to Claude. Let it find the cause. Did the fix work? Yes — done No — add context Yes No
If the fix works, the bug is done. If not, add more context and tell Claude to try a different approach. Do not repeat the same prompt.

7.2.2 The AI Debug Prompt Guide

Use this format for every bug report you send to Claude:

When I [exact action], I expected [what should happen] but instead [what actually happens]. Here is the error text if any: [paste red Output panel text, or write "no error text"]. The problem is in [scene name] when [action or trigger].

The ten most common first-game bugs and their pre-written descriptions:

Bug 1: Player falls through the floor on scene reload

When the scene reloads after the player dies, I expected the player to land on the floor but instead they fall through it. No error text. The problem is in Level.tscn after get_tree().reload_current_scene() fires.

Bug 2: Score carries over between runs

When the scene reloads, I expected the score to reset to zero but instead it keeps the score from the previous run. No error text. The problem is in the score manager script.

Bug 3: Enemy does not reset position after retry

When I click Try Again and the level reloads, I expected the enemy to return to its starting position but instead it spawns in the wrong location. No error text. The problem is in Level.tscn after scene reload.

Bug 4: Win screen does not appear

When I reach [win condition], I expected WinScreen.tscn to load but instead nothing happens. No error text. The problem is in Level.tscn — the win trigger is not connected to the scene transition.

Bug 5: Music keeps playing on the win screen

When WinScreen.tscn loads, I expected the level background music to stop but instead it keeps playing. No error text. The problem is that the music AudioStreamPlayer in Level.tscn is not being stopped when the scene changes.

Bug 6: Game freezes on retry

When I click the retry button, I expected Level.tscn to reload but instead the game freezes or shows a black screen. Here is the error text: [paste]. The problem is in the button's pressed signal handler.

Bug 7: Sprite appears at wrong size

After replacing the ColorRect with a Sprite2D, I expected the player to appear at the correct size but instead the sprite is too large or too small relative to the level tiles. No error text. The problem is in Player.tscn — the Sprite2D scale needs adjusting to match the 32x32 tile size.

Bug 8: Jump sound plays too many times

When I jump rapidly, I expected one jump sound per jump but instead multiple copies of the sound overlap each other. No error text. The problem is in player.gd — the AudioStreamPlayer needs to stop and restart on each jump instead of stacking.

Bug 9: Controls label is cut off or overlaps other UI

The controls label in MainMenu.tscn is partially off screen or overlaps the Play button. I expected it to fit neatly below the button. No error text. Fix the label position and size in MainMenu.tscn.

Bug 10: Camera does not follow the player

When the player moves, I expected the camera to follow them but instead the view stays fixed and the player walks off screen. No error text. The problem is in Level.tscn — the Camera2D is not correctly set as a child of the player instance or is not set to Current.

7.2.3 When to Stop Fixing and Ship

There is a bug that has now taken three Claude Code sessions and is still not fixed. What do you do?

You ship anyway.

If the bug does not prevent the player from completing the game — if it is a visual glitch, a minor audio issue, or something that only appears in an unusual edge case — add it to a known issues list and publish the game. Every published game has known issues. The ones that succeeded shipped with them.

If the bug does prevent completion — a crash on the win screen, a broken retry button — then it needs to be fixed. Add one more detail to your description, change the phrase "Fix this" to "Try a different approach," and send it again. If a fourth session does not resolve it, ask Claude to work around it rather than fix it directly.

Your goal is a published game. Not a perfect game. Perfect games do not exist. Move to Module 8.

Takeaway: Run your game five times. Note every problem. Use the three-step debug format for each one. Fix crashes and broken states first. If a non-blocking bug takes more than three sessions, ship it and patch later.

Module 7 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: What does "finished" mean in the context of this checklist?

    • A) The game has no bugs and looks professionally polished
    • B) A stranger can open the game, play it to completion or game over, and understand what happened without any help from you
    • C) The game has a main menu, three levels, and a high score table
    • D) You have tested the game at least twenty times without finding any issues
  2. Question 2: The Finish Your Game Checklist has seven items. In what order should you fix unchecked items?

    • A) Polish first, then UI, then crashes
    • B) Whatever is fastest to fix first
    • C) Crashes first, then missing UI, then completability, then polish
    • D) Completability first, then crashes, then UI, then polish
  3. Question 3: What is a reproducible bug?

    • A) A bug that only appears on certain computers
    • B) A bug you can trigger consistently on purpose by performing the same actions
    • C) A bug that Claude has fixed before in a previous session
    • D) A bug that appears in the Output panel as red text
  4. Question 4: You send Claude a bug report and the fix does not work. What should you do next?

    • A) Send the exact same prompt again
    • B) Open the script file and try to fix the code manually
    • C) Add more context to your description and tell Claude to try a different approach
    • D) Delete the affected scene and rebuild it from scratch
  5. Question 5: A visual glitch has taken three Claude Code sessions and is still not fixed. The player can still complete the game. What should you do?

    • A) Keep working until the glitch is fixed before publishing
    • B) Remove the visual element causing the glitch entirely
    • C) Add it to a known issues list and publish the game anyway
    • D) Ask Claude to rebuild the entire scene from scratch
  6. Question 6: Which of the following is the correct format for a bug report to Claude?

    • A) "The game is broken. Fix it."
    • B) "I think the signal is not connected. Fix the signal."
    • C) "When I collect a coin, I expected the score to increase but it stays at zero. No error text. The problem is in Level.tscn when the player touches the coin."
    • D) "Something is wrong with the score. Here is the script file."

Answers

  1. 1. B — Finished means a stranger can open the game, play it without your help, and understand what happened. Not polished, not bug-free. Complete and comprehensible.
  2. 2. C — Fix crashes first because they make the game unplayable. Then missing UI because players cannot enjoy a game they do not understand. Then completability because the game needs a reachable finish line. Polish is last because it does not block play.
  3. 3. B — A reproducible bug is one you can trigger on purpose by performing the same sequence of actions. Reproducible bugs are fixable. Random bugs that cannot be triggered reliably are much harder to diagnose.
  4. 4. C — If a fix does not work, add more context to your description and tell Claude to try a different approach. Sending the same prompt again gives Claude the same information and usually produces the same result.
  5. 5. C — A non-blocking bug that has resisted three sessions should be added to a known issues list and the game should ship. Every published game has known issues. The goal is a published game, not a perfect one.
  6. 6. C — The correct format describes the action, the expected result, the actual result, any error text, and the location of the problem. This gives Claude exactly what it needs to find and fix the issue without guessing.

Module 7 Recap

  • Finished means a stranger can play your game and understand what happened without your help. Not polished. Not bug-free. Complete.
  • The checklist has seven items. Fix them in order: crashes first, missing UI second, completability third, polish last. Do not add new features during this phase.
  • Every bug report to Claude follows the same format: when I do X, I expected Y, but instead Z happened. Include error text if any. Name the scene and the trigger.
  • If the first fix does not work, add more context and tell Claude to try a different approach. Never send the same prompt twice.
  • If a non-blocking bug takes more than three sessions, ship anyway and patch it later. Your goal is a published game. Move to Module 8.

Lesson 8.1: Exporting Your Game from Godot

Learning objective: Export your finished Godot project as a web build and confirm it runs correctly in a browser before uploading.

8.1.1 Why Web Export Is the Right Choice

You have two options when publishing a game. You can export it as a downloadable file that players install on their computer. Or you can export it as a web build — a set of files that runs inside a browser with no download required.

For your first game, web export is the right choice. Every time.

A downloadable file requires the player to trust you enough to install software from an unknown developer. Most won't. A web build requires nothing. The player clicks your link, the game loads in their browser in ten seconds, and they are playing. The difference in how many people actually try your game is enormous.

itch.io supports web games natively. It shows them in an embedded player directly on your game page — a window on the page that runs the game without leaving the site. No separate app. No download prompt. The player sees your game page, clicks Play, and the game starts.

Web export in Godot is free. It requires no paid license, no developer account, and no extra software beyond what you already have installed.

8.1.2 Installing the Web Export Template and Exporting

Godot needs an export template before it can build your game for the web. An export template is an extra component that Godot downloads once and uses every time you export to a specific platform. You install it once and it stays installed.

Follow these steps exactly.

  1. Open Godot with your project loaded.
  2. In the top menu, click Editor. Then click Manage Export Templates. A window opens.
  3. Click Download and Install. Godot downloads the export templates for all platforms including web. This takes one to three minutes depending on your connection. Wait for it to finish.
  4. Close the Export Templates window when the download completes.
  5. In the top menu, click Project. Then click Export. The Export window opens.
  6. Click Add at the top of the Export window. A list of platforms appears. Click Web.
  7. Look at the Export Path field. Click the folder icon next to it and create a new folder inside your project called web-export. Set the export path to end with index.html inside that folder. The full path should look like: res://web-export/index.html
  8. Click Export Project. A dialog appears. Make sure Export With Debug is unchecked. Click Save. Godot generates the web build files inside your web-export folder.

After the export finishes, open your project folder on your computer. Open the web-export folder. You should see several files inside, including one called index.html. The HTML file is what the browser opens to run your game. The other files in the folder support it — do not move or rename any of them.

Web export process flow Four steps from left to right: Godot project leads to web-export folder, which leads to browser test, which leads to itch.io upload Godot project Export Project web-export folder with index.html Browser test locally. Confirm it works. itch.io upload entire web-export folder
Do not skip the browser test. Problems that appear locally are much easier to fix than problems discovered after uploading.

8.1.3 Testing the Web Build

Open the index.html file in Chrome or Firefox. Do not use Safari for local web game testing — Safari blocks certain features that Godot web builds need, and the game may not load. Chrome or Firefox only for this step.

Play the full game in the browser. Main menu to win or game over. Test everything.

  • Controls respond: Arrow keys, spacebar, all inputs work the same as in the Godot editor.
  • Audio plays: Music starts on the level. Sound effects trigger. Win sound fires.
  • Win and game over screens load: Reach the win condition. Trigger a death. Both screens appear and the retry buttons work.
  • No black screen on load: If the game shows a black screen instead of the main menu, right-click anywhere in the page and look for a console option in your browser. Any red text there is a loading error. Copy it and send it to Claude Code with: The web build shows a black screen when opened locally in Chrome. Here is the browser console error: [paste]. Fix the export so the game loads correctly.

Audio may not play until the player clicks. Browsers block audio from starting automatically before the user has interacted with the page. This is normal browser behavior, not a bug. Your background music will start playing as soon as the player clicks anything — the Play button, a key, anywhere. You do not need to fix this.

If the game runs slower in the browser than it did in the Godot editor, that is also normal. A small amount of performance difference between the editor and a web build is expected. If the game is unplayably slow, send Claude: The web build runs too slowly in the browser. Optimize the project to reduce the physics process load.

Takeaway: Install the web export template. Export your project to a web-export folder with index.html as the output file. Open it in Chrome or Firefox. Play to completion. Fix anything that broke before uploading to itch.io.

Lesson 8.2: Publishing on itch.io

Learning objective: Create an itch.io game page, upload your web build, and publish a shareable link using the itch.io publishing checklist.

8.2.1 Setting Up Your itch.io Page

itch.io is a platform for independent game developers to publish and sell games. It is free to use, requires no approval process, and lets you publish a game in under ten minutes. Thousands of players browse it every day looking for games exactly like the one you just built.

Work through the itch.io Publishing Checklist below in order.

itch.io Publishing Checklist:

Step 1: Create an account

Go to itch.io and click Create Account. Choose a username. This becomes part of your game's URL, so pick something you are comfortable with. Your real name, a handle, or anything else works.

Step 2: Create a new project

After logging in, click your username in the top right. Click Dashboard. Click Create New Project. A form appears.

Step 3: Set the kind to HTML

Find the field labeled Kind of project. Change it to HTML. This tells itch.io to show your game in an embedded player on the page.

Step 4: Upload your web-export folder

Scroll down to the Uploads section. Click Upload files. Select all the files inside your web-export folder — not the folder itself, but everything inside it. This includes index.html and all the supporting files Godot generated. If you upload only the HTML file, the game will not load.

After uploading, check the box that says This file will be played in the browser next to your upload. itch.io uses this to know which file to open in the embedded player.

Step 5: Set the embedded player size

Find the Embed options section. Set the width and height to match your game's resolution. If you did not set a custom resolution in Godot, use 1280 x 720 as a safe default.

Step 6: Fill in the game page fields

Title: your game's name. Description: two to four sentences (see Lesson 8.2.2). Genre tags: add at least two that match your game type, such as "Platformer", "Action", or "Casual". A cover image: take a screenshot of your game running and upload it as the cover. Players decide whether to click in the first two seconds — a gameplay screenshot is more effective than a blank image.

Step 7: Set visibility to Public and save

Scroll to the top of the form. Find the Visibility field. Set it to Public. Click Save and View Page. Your game is live.

8.2.2 Writing a Game Page Description That Gets Clicks

Your description answers three questions. What kind of game is it. What does the player do. How long does one run take. Two to four sentences. Nothing more.

Vague description — players scroll past:

This is a game I made about jumping and avoiding stuff. It was my first game and I hope you enjoy it. There are enemies and you have to reach the end. Good luck!

Specific description — players click Play:

A short 2D platformer where you jump between platforms and dodge a patrolling enemy to reach the door at the end of the level. One level. Takes about two minutes to complete. Made in Godot 4 using AI-assisted development.

The specific version tells a player in ten seconds whether this game is for them. The vague version tells them nothing useful and signals that the game might not be worth their time.

List the controls on the page below the description. One line. "Arrow keys to move. Space to jump." Players who cannot figure out the controls in five seconds will close the tab.

8.2.3 Sharing Your Game and What Comes Next

Copy your itch.io link the moment the page goes live. Share it the same day. Momentum matters more than waiting for a perfect page. A game shared on launch day gets more plays than the same game shared a week later.

Three places to share that work well for first games:

  • Reddit: Post to r/indiegaming or r/gamedev with the link and two sentences about what makes your game worth trying. Read each community's rules before posting — most welcome first-game posts.
  • Discord: Game development servers have showcase channels. Search for "game dev Discord" and look for servers with an active #showcase or #share-your-game channel.
  • itch.io itself: The platform has community boards where developers share new releases. Post in the "Release Announcements" board.

Read every comment you get. Players will find things you missed and tell you exactly what confused them. That feedback is free design research for your next game.

Your second game will be faster to build. The skills compound quickly. You now know how to take a game idea from zero to published using Claude Code. The first game is always the hardest one. You finished it.

Takeaway: Create your itch.io account. Set the kind to HTML. Upload every file from your web-export folder. Write a two-to-four sentence description that answers what, how, and how long. Set to Public. Copy the link. Share it today.

Module 8 Quiz

Test your understanding of this module. Answers explained at the end.

  1. Question 1: Why is web export the right choice for your first game?

    • A) Web builds have better graphics than downloadable files
    • B) Players can play in their browser with no download required, which removes friction and gets more plays
    • C) itch.io only accepts web games from new developers
    • D) Web export is faster to generate than other export types
  2. Question 2: What does Godot need before it can export your game for the web?

    • A) A paid Godot Pro license
    • B) An itch.io developer account connected to Godot
    • C) An export template downloaded from the Editor menu
    • D) Claude Code to be running in the project folder
  3. Question 3: You upload your web build to itch.io but the game does not load. What is the most likely cause?

    • A) The export template was the wrong version
    • B) You uploaded only the index.html file instead of all files from the web-export folder
    • C) The game was set to Public before testing was complete
    • D) itch.io does not support Godot 4 web builds
  4. Question 4: Your background music does not play when the browser loads your web build. What should you do?

    • A) Re-export the game with a different audio format
    • B) Remove the background music from the game before publishing
    • C) Nothing — browsers block audio until the player interacts with the page, which is normal behavior
    • D) Tell Claude Code to add an audio unlock workaround script
  5. Question 5: Which of the following is a better game page description on itch.io?

    • A) "My first game! Hope you enjoy it. It was really hard to make but I learned a lot."
    • B) "A short 2D platformer where you dodge a patrolling enemy and reach the door to win. One level. Takes about two minutes to complete."
    • C) "This game has jumping, enemies, a score system, a win screen, a game over screen, background music, and pixel art made with Kenney assets."
    • D) "Play my game and leave a comment!"

Answers

  1. 1. B — Web builds run directly in the browser with no download needed. This removes the friction of installing software from an unknown developer, which means significantly more people will actually play your game.
  2. 2. C — Godot needs an export template installed before it can build for any platform. Download it from Editor, then Manage Export Templates, then Download and Install. It is free and only needs to be installed once.
  3. 3. B — itch.io needs all the files Godot generated in the web-export folder, not just index.html. The supporting files contain the game's assets and engine code. Uploading only the HTML file produces a broken page.
  4. 4. C — Browsers block audio from starting automatically before the user interacts with the page. This is standard browser behavior, not a bug. The music will start as soon as the player clicks anything — the Play button, a key, anywhere on the page.
  5. 5. B — A good description answers three questions: what kind of game, what does the player do, and how long is one run. Option B answers all three in two sentences. The other options are either too personal, too listy, or too vague to help a stranger decide whether to play.

Module 8 Recap

  • Web export gets more plays than a downloadable file. Players click a link and the game starts — no install, no friction, no barrier.
  • Install the web export template from Editor then Manage Export Templates before exporting. Set the output path to web-export/index.html inside your project.
  • Test the web build locally in Chrome or Firefox before uploading. Fix any issues you find at this stage, not after publishing.
  • On itch.io, upload every file from the web-export folder, not just index.html. Set the kind to HTML and check the "played in browser" box on your upload.
  • Your description answers three questions: what kind of game, what does the player do, how long is one run. Two to four sentences. Share the link the day the page goes live.

Final Assessment

This assessment covers everything taught across all eight modules. Answer every question, then check your score against the answer key. A score of 12 or higher out of 15 (80%) means you are ready to publish. If you score below 12, the answer key tells you which module to review before uploading your game.

  1. Question 1: What does Claude Code do?

    • A) It runs your Godot project in a browser
    • B) It writes code files directly into your Godot project folder based on your plain English descriptions
    • C) It installs Godot on your computer automatically
    • D) It generates game art and audio for your project
  2. Question 2: Every Claude Code prompt needs three parts. Which answer correctly names all three?

    • A) Scene, script, and node
    • B) Title, description, and screenshot
    • C) Context, task, and confirmation request
    • D) GDD, prompt, and export
  3. Question 3: You press Play in Godot and see red text in the Output panel. What should you do?

    • A) Restart Godot and try pressing Play again
    • B) Open the script file and try to fix the code manually
    • C) Copy the red text, paste it into Claude Code, and say "Fix this error"
    • D) Delete the scene and build it again from scratch
  4. Question 4: What is a GDD and what is it used for?

    • A) A Godot Debug Document — a log of errors generated during play sessions
    • B) A Game Design Document — a one-page reference you paste into Claude Code at the start of every session
    • C) A Graphics Display Driver — software that runs Godot on your computer
    • D) A Git Development Directory — the folder where your project is stored
  5. Question 5: What is the correct build order for a simple 2D game?

    • A) Art, then enemies, then movement, then level, then publish
    • B) Movement, then level, then enemies, then scoring, then win/lose, then art, then polish, then publish
    • C) Level, then movement, then scoring, then art, then enemies, then publish
    • D) Movement, then art, then level, then publish, then add enemies later
  6. Question 6: You start a new Claude Code session to build your level. What should be at the very top of your first prompt?

    • A) A detailed list of every feature you want in the finished game
    • B) Your two-sentence GDD summary and a list of files that already exist
    • C) The export settings for the web build
    • D) A request for Claude to list all the files in the project
  7. Question 7: What does a TileMap node do in Godot?

    • A) It tracks which levels the player has completed
    • B) It manages the player's collision shape during movement
    • C) It lets you paint a level using a grid of small image tiles
    • D) It stores the score variable and updates the display label
  8. Question 8: Your player falls through the floor immediately after instancing them into the level scene. What is the most likely cause?

    • A) The player script has a syntax error that stops gravity from working
    • B) The TileMap collision layer does not match the player collision layer
    • C) The Camera2D is not attached to the player correctly
    • D) The player scene was dragged into the FileSystem panel instead of the Scene Tree
  9. Question 9: You want to add a chaser enemy to your top-down game. Which prompt gives Claude enough information to build it correctly?

    • A) "Add a scary enemy that chases the player."
    • B) "Add an enemy to my game."
    • C) "Create an enemy with a detection radius of 160 pixels that moves toward the player at 60 pixels per second when the player is inside the radius. When the player touches the enemy, restart the current scene."
    • D) "Make the enemy faster and harder to avoid."
  10. Question 10: A score system has three parts. Which answer correctly names all three?

    • A) Player, enemy, and level
    • B) Score variable, trigger, and display label
    • C) CanvasLayer, signal, and CollisionShape2D
    • D) Script, scene, and node
  11. Question 11: What are the four states in a complete game loop?

    • A) Load, play, save, quit
    • B) Menu, level, boss, credits
    • C) Playing, win screen, game over screen, restart
    • D) Start, run, end, retry
  12. Question 12: You need a free sprite pack for your platformer that requires no attribution. Where should you look first?

    • A) Google Images
    • B) An AI image generator
    • C) Kenney.nl
    • D) Your game's screenshot folder
  13. Question 13: A bug has taken three Claude Code sessions and is still not fixed. The player can still complete the game. What should you do?

    • A) Keep fixing until it is resolved before publishing anything
    • B) Delete the affected scene and rebuild it from the beginning
    • C) Add it to a known issues list and publish the game anyway
    • D) Ask Claude to remove the feature causing the bug entirely
  14. Question 14: You export your game and upload it to itch.io but the game page shows an error when players try to load it. What is the most likely cause?

    • A) The export template was out of date
    • B) You uploaded only the index.html file instead of all the files from the web-export folder
    • C) The game was set to Public before the browser test was complete
    • D) itch.io requires a paid account to host web games
  15. Question 15: Which of the following is the best two-sentence description for an itch.io game page?

    • A) "My first game ever! Please be nice in the comments."
    • B) "A 2D platformer with jumping, enemies, a score system, art from Kenney, and music from freesound."
    • C) "A short top-down game where you collect keys to unlock the exit while dodging a chaser enemy. One level, takes about three minutes to complete."
    • D) "This game was made using Godot 4 and Claude Code as part of an online course."

Answers

Score 12 or above (80%): you are ready to publish. Score below 12: review the modules listed next to the questions you missed.

  1. 1. B — Claude Code writes code files into your project folder based on plain English descriptions. You describe. Claude builds. (Module 1)
  2. 2. C — Context (what game, what files exist), task (what to build), and confirmation request (tell me every file you created or changed). Use all three every time. (Module 1)
  3. 3. C — Copy the red error text, paste it into Claude Code, and say "Fix this error." Never edit script files manually. (Module 1)
  4. 4. B — The Game Design Document is a one-page, six-field reference you paste into Claude at the start of every build session. It gives Claude the context it needs to build your specific game. (Module 2)
  5. 5. B — Movement first, then level, then enemies, then scoring, then win and lose states, then art, then polish, then publish. Each system depends on the one before it. (Module 2)
  6. 6. B — Start every session with your two-sentence GDD summary and a list of files that already exist. This gives Claude context and stops it from rebuilding what you already have. (Module 3)
  7. 7. C — A TileMap is a Godot node that lets you build levels by painting tiles onto a grid. Godot handles the spacing and collision automatically. (Module 3)
  8. 8. B — If the player falls through the floor, the TileMap collision layer does not match the player collision layer. Tell Claude to set both to layer 1. (Module 3)
  9. 9. C — A good challenge description includes the behavior (detection radius, chase speed), the trigger (player touches enemy), and the consequence (restart scene). Vague descriptions make Claude guess. (Module 4)
  10. 10. B — A score variable stores the number, a trigger increases it, and a display label shows it on screen in real time. One prompt builds all three. (Module 5)
  11. 11. C — Playing, win screen, game over screen, and restart. All four states are required for the game to feel complete. (Module 5)
  12. 12. C — Kenney.nl provides professional-quality game art packs for free with no attribution required. Google Images and AI generators carry legal risk at publish time. (Module 6)
  13. 13. C — A non-blocking bug that resists three sessions should be added to a known issues list and the game should publish. Every published game has known issues. Your goal is a published game, not a perfect one. (Module 7)
  14. 14. B — itch.io needs all the files from the web-export folder, not just index.html. The supporting files contain the game engine and assets. (Module 8)
  15. 15. C — A good description answers what kind of game, what the player does, and how long one run takes. Option C answers all three in two sentences. (Module 8)