Ever dreamt of making your own 2D action-adventure game? Then you're in luck.
Whether you're a total newbie or switching to Godot, this course will walk you through creating an amazing game from scratch—no prior experience needed.
We’re talking puzzles, NPCs, combat, and an expansive world to explore. Think classic Zelda-like gameplay, but made by you. By the end, you'll have a fully playable game, plus the skills to build your own adventure-packed worlds.
Ever dreamt of making your own 2D action-adventure game? Then you're in luck.
Whether you're a total newbie or switching to Godot, this course will walk you through creating an amazing game from scratch—no prior experience needed.
We’re talking puzzles, NPCs, combat, and an expansive world to explore. Think classic Zelda-like gameplay, but made by you. By the end, you'll have a fully playable game, plus the skills to build your own adventure-packed worlds.
You'll master GDScript, Godot’s custom scripting language, so you can make enemies chase the player, NPCs drop wisdom, and puzzles actually work. We’ll keep the code beginner-friendly, but powerful enough to level up your dev skills.
You’ll learn to craft tilemaps and terrains to build your world, add hidden rooms and treasure chests, and create a combat system where slimes aren’t just cute—they’re dangerous. (No mercy, they must be defeated.)
Most tutorials teach you how to make tiny, unfinished games. That’s cool and all, but this course goes all the way—from blank project to fully structured, feature-rich game. No half-baked mechanics. No confusing gaps.
You’ll learn by doing, with clear explanations and challenges to make sure you actually understand what you’re coding.
This course is perfect for total beginners, or devs looking to jump into Godot 4 without getting lost. No game dev experience? No problem. You just need a computer (Windows, Linux, or Mac) and a bit of curiosity.
By the end, you'll have more than just a game—you'll have the confidence to build your own.
If you've ever wanted to bring your dream game to life, now’s your chance. Let’s make something awesome together.
Ahmed welcomes you to the course and gives you an overview of what you’ll be learning.
In this lecture, we’ll download Godot and set up our project.
In this lecture, we’ll learn how to use Godot’s interface as well as what Nodes and Scenes are.
In this lecture, we will look into the basics of programming in Godot using GDScript.
We introduce the ways that you can get help, support and contribute to the community.
Any time we change our project during a lecture we will commit that change to a public source control repository for students to access. In this video, we show you how to access that content.
In this lecture, we’ll learn what assets are and import the ones we’ll use in our game.
In this video, I’ll give you a preview of what to expect in the Player Movement section!
In this lecture, we set up the player character scene.
In this lecture, we learn what a variable is, how to create and use one, as well as some basic types like integers and floats.
In this lecture, we’ll learn what an if statement is, as well as how we can use it to read button input via Input Actions.
In this lecture, we’ll start moving the player depending on which buttons were pressed!
In this lecture, we’ll learn what the scope of a variable means and how to use @export to edit a variable from the inspector.
In this lecture, we’ll animate the player movement using the AnimatedSprite2D node.
In this lecture, we’ll use elif and else statements to fix the player’s animations when moving diagonally.
In this video, I’ll give you a preview of what to expect in the Creating Environments section!
In this lecture, we’re going to use TileMapLayers to create a basic environment for our game!
In this lecture, we’ll create and use a Terrain inside of our Tilemap to automatically choose the proper tiles when painting roads, making it much easier to do so.
In this lecture, we’ll learn how to add obstacles (such as trees) with their own collision shapes and how to sort them properly with the player using Y-sorting.
In this lecture, we’ll learn how to swap to a different scene by creating a dungeon entrance!
In this lecture, we’ll learn how to use Autoloads to position the player when entering a new scene.
In this lecture, we’ll create a nice environment for our dungeon scene by adding floors and walls - including terrains for both of them!
In this lecture, we’ll learn the different ways you can scale the window so players can have the same experience regardless of window size.
In this lecture, we’ll learn all the different types of physics bodies and begin creating our block.
In this lecture, we’ll learn how to push the block by detecting and using collision in the player’s script.
In this lecture, we’ll learn how groups work in order to improve our block-detecting code.
In this lecture, we’ll learn what the framerate is and how we can avoid tying our game logic to it using the physics process function.
In this lecture, we’re going to create a button that can be pressed when the player or a block stands over it.
In this lecture, we’ll learn how to create our own signals in order to tell a door to open whenever a puzzle button is pressed!
In this lecture, we’re going to upgrade the locked door code and finally create a block puzzle in the dungeon!
In this lecture, we’re going to variants for the block and button scenes to add more variety to the game, such as an ice block that slides around and a button that stays pressed forever!
In this lecture, we’ll learn what collision layers are and how they can decide which physics bodies can touch others. We’ll use these to stop blocks from going out of bounds!
In this video, I’ll give you a preview of what to expect in the Creating NPCs section!
In this lecture, we’re going to learn how functions work and create our own ones to organize our code.
In this lecture, we’re going to create the base of our NPC scene that we’ll build upon in upcoming lectures.
In this lecture, we’ll learn what a GUI is and how we can create a basic user interface using Control nodes!
In this lecture, we’ll add an Area2D for our player in order to talk to NPCs only when the player is facing them.
In this lecture, we’ll add multiple NPCs in our scene by learning how to access child nodes and replace textures.
In this lecture, we’re going to pause the game whenever the player talks to an NPC so you can’t walk away or get interrupted.
In this lecture, we’ll learn what Arrays are and why they’re useful. Arrays lets you easily store a collection of variables!
In this lecture, we’ll use Arrays to have NPCs say multiple lines of dialogue!
In this video, I’ll give you a preview of what to expect in the Switch Puzzles section!
In this lecture, we’ll add boundaries to the world so the camera and player aren’t able to go out of bounds.
In this lecture, we’re going to create switches that the player can toggle on or off.
In this lecture, we’ll create a secret room that gets revealed or hidden again by pressing a switch.
In this lecture, we’re going to replace our simple switch with a switch puzzle that activates when you enter a specific combination!
In this lecture, we’ll add treasure chests to reward the player whenever they finish a puzzle in the dungeon!
In this lecture, we’ll fix an issue where chests we’ve opened before reset once you leave and re-enter a scene.
In this lecture, we’ll show how much treasure the player has gained by making a small user interface!
In this video, I’ll give you a preview of what to expect in the Combat section!
In this lecture, we’re finally going to add some music and sound effects to liven up our game!
In this lecture, we’ll make our player take damage and restart the scene when the player’s HP reaches 0.
In this lecture, we’ll add a UI showing the player’s HP in the top left of the screen.
In this lecture, we’ll give the player a sword so they can attack the slime!
In this lecture, we’ll animate the player’s attack and sword by using a brand new node called the AnimationPlayer!
In this lecture, we’re going to make the enemy move and chase the player, as well as animate it to face the direction it’s moving in!
In this lecture, we’ll knock back the slime and player when they take damage!
In this lecture we’re going to polish (improve) some rough edges in our combat system by fixing an issue with attacking and adding a death animation for our player!
In this lecture, we’ll make our player & enemy briefly flash a specific color when taking damage!
In this lecture, we’ll fix an issue where we accidentally attack anything interactable.
In this lecture, we’re going to clean up some code and add particle effects to make our slime explode on death!
Congratulations on finishing the course, and good luck on your future endeavors! This video will give you a hearty goodbye and some recommendations on what to do next.
OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.
Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.
Find this site helpful? Tell a friend about us.
We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.
Your purchases help us maintain our catalog and keep our servers humming without ads.
Thank you for supporting OpenCourser.