I think if you are just starting out, its better start making games in a framework. You can (and many people do) start with Unity or Godot, but those are complicated programs in their own right. Not only do you need to learn how to code in a language, you need to learn how to wrangle the engine's pre-build systems to do the thing you want to do. Most beginners start out in "Tutorial Hell" because of this. Each new feature requires finding a YouTube tutorial to just copy line by line. Escape this hell! Just start learning to code with a basic game framework or library!!!
If you already know how to code in a language, find a framework for that language. If you have no prior coding or gamedev experience, I would recommend:
- Programming In Lua: Lua I think is the easiest first language to learn and it's fast, unlike python. (Sorry DaFluffyPotato...)
- LÖVE: This is your first game framework. It uses Lua. Only supports 2D games. Balatro and MoonShire are made with LÖVE!
- Challacade: A YouTube channel with video tutorials for Lua and LÖVE. I would recommend eventually getting used to searching the Lua and LÖVE documentation, but watching a guide will get you started and moving quickly.
This will get you started drawing images or text to the screen, moving them, keyboard input, playing sounds, etc. Enough for your first game. But if you want to make anything more complicated, like having an inventory, dialogue, saving/loading, procedural generation, etc, you need to learn about Data Structures and Algorithms. Programming In Lua has a chapter on this. w3schools also has a free lesson, though not specific to Lua. Understanding and correctly using data structures and algorithms will lead to performant code that can do complicated thing quickly. (Unlike Undertale)
Low Level Game Dev
Making games using higher level languages and game engines is great! you can speed up production time (depending on your level of understanding of the low level stuff). But the issue is the end product will often be slower and use up more hard drive space than if you build it "from scratch" using a lower level language. If you are looking to make an indie 2D game and are comfortable with programming, I think this is the ideal approach. For 3D indie games, going the low level route is hard mode. It's certainly possible but it takes a lot more time than 2D.
If you go this route I would recommend learning C. If you want to write code that can be ported to any machine, you are looking at C/C++. C is very simple (Simple, not Easy) when compared to learning C++. Also for gamedev, C sort of makes slow and bad design patterns inconvenient where as C++ makes it easy to do bad habits. (I'm looking at the new keyword, It's just begging you to fragment your memory!) But either way learning C sets you up to pivot and learn C++ later, as it's sort of an extension of C. You aren't giving yourself a disadvantage by learning C first. Anyway on to the resources:
- C Programming: A Modern Approach: A textbook for learning C99
- Handmade Hero: Old but still great, Casey makes a game while every step of the process is streamed. This project only uses C style C++ with no libraries (other than windows.h)
- Handmade Penguin: Linux companion to Handmade Hero to port the code to Linux using SDL2 in place of the windows API
- raylib: Amazing game framework, Makes low level gamedev as easy as it can be. Closest you will get to LÖVE in C. Designed for people learning how to make games.
- SDL: The Simple, DirectMedia Layer! You basically view this library as a platform abstraction so you can write your code once and it should build on desktops, mobile, and many other platforms.
- Write Games, Not Engines: The original post was very influential to early indie gamedev. Must read in my opinion.
- Untangling Lifetimes: The Arena Allocator: Rethinking memory management away from OOP's create/destroy individual objects and towards making a second (or third) stack structure on the heap, the "Arena".
- Why I removed Components from my Game Engine: Vid on why ECS is overkill for your hobby indie project.
- The Cherno: YouTube channel on low level engine code. Has industry experience from working at EA. He knows what hes talking about, but his advice isn't always great for a hobbyist. (See above, Write Games, Not Engines)
- Lerp Smoothing is Broken: Talk about how to make Lerp Smoothing frame rate independent.
- Writing an ultra-portable game without using an engine: Talk about how software renders are not dead, and how McPixel 3 only uses a software renderer.
Game Dev Tools:
I prefer to use Free and Open Source Software (FOSS) for game development tools. Relying on a private company to maintain the tools you need to make your art and run your business is a risk you can avoid. With closed source projects, you have no idea if suddenly they will switch to a subscription service or charge more per month. They might even try to use your work, your art, to train their AI.
If you can stick to FOSS tools, everything will always be available for free in your Linux package manager. Yes, switching to these tools and adapting to their workflow is hard, but in my opinion is completely worth it!
Game Engines:
If you want a FOSS full game engine with a map editor, there really is only one option for you: Godot I personally prefer frameworks over engines, despite my big game project I'm working on uses Godot... (Godot has modern physically based rendering (PBR) done for me, and it's required for my Game's unique art style and identity.) If you also decide to use this, I would recommend making your indie game out of Compatibility mode instead of Forward+ to avoid/reduce Shader Compiling and Not working on older hardware
If you are looking for a game framework, almost all of them are open source so just pick one.
Text Editors:
- Notepad++: For windows users I guess
- GNU Emacs: Reasonably fast, very customizable and hackable. Learning curve for a new user isn't too bad, you can treat it like a basic text editor at first. Just don't go crazy with customization like most Emacs users inevitably do.
Modal Text Editors (Harder for beginners, don't start with these!):
-
Neovim: Very customizable and fast text editor that runs inside of a terminal. My recommendation, but default settings aren't great. You will need to customize this to your liking.
-
Helix: More features out of the box than (neo)vim with more sane default settings. Uses different keyboard commands than vim but they more intuitive. The problem is Helix has a smaller community and no plugin support (yet)
Image Editors:
- GNU Image Manipulation Program (GIMP): Does things like Photoshop. Not very intuitive and has a different workflow than Photoshop.
- Krita: Digital Painting
- Inkscape: Vector Art
- Grafx2: Pixel art editor inspired by Deluxe Paint on the Amiga
Audio Editors:
- Audacity: Audio recording and editing
- LMMS: DAW, like GIMP needs work on workflow. Trying to be a FOSS FL Studio
Trackers:
- Milky Tracker: Tracker for old .mod format. Simpler.
- Schism Tracker: Tracker for newer .it format. More Features.
Video Editors and Recording:
- Blender: You will have a better time using this instead of DaVinci Resolve on Linux. Requires use of hotkeys that are used in 3D modeling workflow, so will be hardest to learn but most flexible
- OBS: Open Broadcaster Software. Record your screen and stream.
Operating Systems:
- Linux Mint: Easiest "It Just Works" Linux.
- Debian: Great very stable linux distro. I recommend this one to most people.
- Void Linux: Like Arch, but more stable and lighter. For advanced linux users. What I prefer to use
Gamedev Learning Resources:
I wish game design was a kind of science you can just learn the fundamentals and run with. But that's not the case now and it doesn't seem like that ever will be the case. Experienced devs will describe the game design process as trying to navigate an unexplored jungle searching for the treasure of a good game. The only real guiding compass you have for navigating this space is Fail Faster. This is Extra Credit's best video, it has stuck with me for over a decade.
Art Learning Resources:
- AdamCYoungis: Pixel Art lessons
- Brandon James Greer: More pixel art videos
- Blender Guru Donut: Blender tutorial
- GDQuest's Older Krita/Art tutorials
- Jazza's older art tutorials (scroll down in the playlist)
Music Learning Resources:
Ok I will be the first to admit music is not my thing, not my area of expertise but this is what I have found:
- HOW TO GET STARTED ON FL By Toby 'Radiation' Fox in 2011: Yes this is how I first learned to make sound play in a cracked copy of FL Studio back in the day. Despite having such an accomplished teacher, I never amounted to anything musically lol.
- MilkyTracker Tutorial: Honestly trackers just fascinate me. thats all. You should probably use something else for your game...
Yeah... You probably should look somewhere else for music info...
Gamedev Youtube Channels I like:
I would say most gamedev YouTubers aren't good, they found a way to make a living off of making YouTube videos or streaming rather than like actually making games. Generally the "bad" ones do lots of editing and memes in their videos, stuff that takes alot of time to make while their games stay forever in an early prototype phase.
Most Games start out easy to make new features and its easy to do lots of progress, But eventually you are working mostly content and not the basic systems. This phase takes the most time but it's hard to show to someone what progress you have made. Do you want to spoil the game? no... then you don't have much to show for yourself until its done. Gamedevs who make income from YouTube or streaming their gamedev so far haven't been able to cross over that hurtle...
Despite all that, here are the gamedev channels I enjoy watching:
- Molly Rocket: Guy behind Handmade Hero, which was more of an educational resource than a gamedev project
- jdh: Hes probably a better C programmer than I am.
- AngeTheGreat: Guy is working on an engine simulator that lets users simulate sound from fictional engines. Some crazy stuff.
- Timothy Cain: Guy who created Fallout. He has some interesting things to say about the history of the industry and of CRPGs. Worth seeing this industry veteran's perspective.
- Blargis: Godot game dev making a fun looking Quake inspired melee focused game
- DaFluffyPotato: Showing that Pygame is a valid framework for indies.
So yeah that's all the gamedev resources I have collected over the years
~WR
[rose@roseBox ~]$ cowsay -d
________________________________________
{ I didn't use FOSS so now I am burgers. }
----------------------------------------
\ ^__^
\ (xx)\_______
(__)\ )\/\
U ||----w |
|| ||