Key Links gamefromscratch.com/the-best-game-development-frameworks-in-2024/ Sponsor Link: spn.so/gnt9gxtq If you miss the 48 hour Flash sale, you can still use the code GAMEFROMSCRATCH for 15% off Camtasia at checkout ----------------------------------------------------------------------------------------------------------- *Support* : www.patreon.com/gamefromscratch *GameDev News* : gamefromscratch.com *GameDev Tutorials* : devga.me *Discord* : discord.com/invite/R7tUVbD *Twitter* : twitter.com/gamefromscratch -----------------------------------------------------------------------------------------------------------
Another info: Developers of Factorio used Allegro at first but then switched to SDL2 because Allegro is outdated xD There is a Steam vlog where they write about that ;-)
There is a correct answer to "what is best". The answer: what works best for you. Whichever language and flow fits your personality and needs. Jokes aside.
I massively appreciate you. Wish I had this a few years ago. Spent a month or two figuring out the frameworks I want to use. They are still subject to change, and I have everything saved on a spreadsheet, just made the bad ones(for my purposes) red or black. Unfortunately it's too late for this to be much help, but I watched it all the way through, liked, and am commenting. RUclips should think I was ecstatic about it, as I would have been if I saw this when I first found you. Keep up the good work.
Also worth mentioning is LÖVR. Sounds similar to LÖVE2D because it borrows almost the same API, but it's more suitable for 3D (powered by a Vulkan renderer) and especially VR. It can do 2D as well of course and is extremely easy to use. To put things into perspective, you can do a VR "Hello World" in 3 lines of code.
I want add a "correction" about SDL, it's not really a "framework" much less a "2D framework" as depicted here. It's more of a simple set of "write once, run everywhere" functions that abstract away the pain of writing the platform specific code by hand, or worse writing all the specific ways each of your supported platforms wants it. I call it "The jQuery of Game Development". What SDL provides is more akin to "platform normalization", it normalzies input (if you want it), it normalizes image loading (if you want it), it normalizes audio (if you want it), but most importantly it normalizes "context creation" (as part of it's base kit). What does "context creation" mean? It creates the OpenGL or Direct3D rendering context in a very straight forward way through one interface, just one time, and setting them up with a ton of sensible defaults; where otherwise creating these rendering contexts by hand is a lengthy and involved process. Also part of it's base kit is a normalization of window creation, so whether your on windows, linux, mac, whatever, it knows how to create a window for that platform, and slap that rendering context inside of it. Without any further tinkering, it does also provide a very rudamentry sprite blitting api to do extremely simple 2d stuff using OpenGL's "Fixed Function Compatibility Mode" but no one's really using that. You're using SDL to get up and running with a window and a context within a minute or two to then start writing OpenGL or DIrect3D low level api calls directly to it to then start your shader based rendering pipeline (usually). **EDIT:** I appreciate that people took the time to read my comment, because I didn’t even mention Direct3D until way below the Read More button. But there seems to be a lot of confusion over what Direct3D even is, and whether I meant DirectX or not. First of all: No, I didn’t. “DirectX” itself is a brand name referring to a specific collection of SDK’s that all tie together and work together to make Real Time applications on Windows powered platforms easier. There’s DirectInput to deal with user input (keyboard, mouse, joypads, etc), there’s DirectSound for audio, etc. The “X” literally just means “Insert SDK Name Here”, and yes that includes Direct3D which is as the name suggests; the 3D Rendering API. There used to be a Direct2D at one point but that has since been retired as D3D setup with an Ortho camera can pretty much handle that. D3D is both old, and new. The current API level is D3D12, and most of the API calls and macros and functions are named that way (eg: “ID3D12Device::CreateCommandList”). But you’ll still see older D3D api’s in there, slowly being phased out with each new iteration. Popular engines like Unreal and Unity have OGL, D3D11, D3D12, and Vk rendering paths for maximum compatibility across platforms. And unless explicitly told not too, when you play one of these games, it’ll use the rendering path most appropriate for that platform automatically. DirectX is kind of like SDL but just for Windows powered platforms like your PC, Xbox, and Windows Phone (remember those?). SDL is a bit higher level, and includes other contexts like OpenGL.
@@user-og6hl6lv7pSDL supports DX9 through 12, OpenGL (and GLES), Vulkan and if I'm not wrong also Metal. I think our guy here is referring to DirectX as Direct3D.
Thank you for this. As someone who didn't ever use these low level tools I understood you explanation perfectly. I would like that documentation for every tool is this precise and clear.
I did some coding using SDL and SFML when I was younger and had no clues about coding overall. Doing alot in C++ was a challenge but surely helped me understand how a game was built. Thankfully with the amount I looked into it, I managed to acquire some basic knowledge of gamedev and how things work behind some Game Engines.
There are two kinds of programming, Game Play and Game Engine. If you want to make a game, learning to much about the deep concepts behind Game Engine might not be a good idea.
@@bingyu1425 oh trust me, it probably wasn’t but i was also not inspiranced in coding. So grabbing C++ as my first coding language was also not the best choice i made. Then again i learned alot with such a rough entry. Would I recommend it to anyone else? Probably not.
Today, on "Mike screams to everyone who will listen 'You have more than three options for game development'" We'll be featuring more than three frameworks and Mike's Herculian self control.
I would say that this definition is pretty new. Before game engine was code features that could stand alone from the game itself and be used to create another game. Framework was usually the term for “engines” outside of gamedev. Say like Flutter. That a game engine should incorporate and editor is actually a bit to opposite. A framework usually had some tooling like swift for iOS dev. While a game engine if one listen to the name. Was the engine , the motor that the game was running on. While the editor was well editor of data files that the engine might use at runtime. But not always that either. I would say it’s more down to angle and where you come from but for sure a game engine do not need to have any direct advanced tooling. Also several what is here references as framework I would more name as “libs” as purpose is to include them into other frameworks etc.
A perfect example of this is the quake and doom engines, there are loads of editors available for both of them but they don't come with the engines themselves, they're made by the community. But you can launch your game or map directly from the map editors typically. So they technically meet both definitions for an engine at the same time
@@jlewwis1995 exactly. Although I myself still see them as editors that use the engine (not always) to run a game like core for me is that the game itself do not often incl does the editor / frameworks the game is just game code and the game engine code. Well we know what we mean. Loved child has many names. :)
Yes, this definition is very weird. If Godot makes changes to its UI, did the engine really change? The definition suggests yes, but would anybody really think of it that way? Would a framework suddenly have to be called an engine if somebody hacks together a provisional scene editor for it? If not, how complete does the tooling have to be until it becomes an engine. The definition makes no sense. I don't think framework is a useful concept in game development. There are libraries, there are engines, and there are development tools, each building on the level before it.
XNA/MG/FNA for game sale numbers on steam is the third successful "engine/framework" after Unreal and Unity. Don't understand why there is always "Celeste" showing off (which is amazing) when there are Stardew Valley (which is one man job) or Terraria which sold way more..
I thoroughly recommend it. Raylib is so much simpler for 2D than a full editor + engine. Game Engines are tuned for bigger projects (like AAA games), but frameworks can be good too.
@@BoardGameMaker4108 yeah, I've messed around with Love2d and Phaser, but I feel these are better for people who are actually good programmers, unlike me. Even with ai to help with the code, it's just not my thing. I already struggle enough with Gdscript 😂
I think after the fallout of the original Pygame developer people moved on to PyGame CE (Community Edition). So that's the one I would recommend for people who are into Python.
I've mostly only worked with game engines like Unity and Godot. I was a CS major, but I barely ever touched C++ or C programming after my first year. I'm sort of interested in really understanding game programming on a deeper level. Do you recommend trying Raylib to get more into C programming based on my case? Specifically, I want to make 2D games.
There are 3 suggestions I can give you (based on what I have used): 1. Monogame: it is a C# framework, thus you can rely on your C# knowledge while playing with it. Start with it or similar thing. 2. SFML: Used it in C++ project. Somewhat similar to Monogame but still pretty straightforward. 3. Cocos-2dx: distinctly different from SFML and is node-based. A bit higher in terms of features than SFML. Take my suggestion with a grain of salt as I have used them long time ago.
Huh. I've literally been looking at building games with a framework recently (built a couple of simple ones in go with raylib). It's interesting if this is something that's gaining traction again. It can be quite freeing from what I've done so far. More complexity in some places but definitely more simplicity in the sense that I can just draw some simple structs with to screen and define the relationship between structs in a way that makes sense for my game sooner than the way an engine thinks I should do it
XNA was my first introduction to "oh I can make games?!" to the world I had 0 knowledge of what coding even was, but their slogan said you could, so I my life mission in that point became to learn how. EDIT: oh and feedback Camtasia looks amazing, but subscription software is dead to me, shame... I would rent but if there is a permanent option available
SDL... how many memories.... I've used it for my breakout clone something like 25 years ago or so, and then as my output lib for my path tracer. Sometimes it is nice to see that not everything turns into dust...
It's a shame that you didn't include the ebitengine, Go-based game framework... Go is a pretty easy language to learn and it's capable of compiling to cross-platforms...
Yeah, agreed - Ebitengine is a really good option for relatively straightforward, code-focused 2D game development, and Go is an excellent and easy-to-use programming language. Really recommend it.
Perfect timing. Just started to learn Raylib recently, but was looking around for other possible alternatives like Dragonruby 6 that you covered recently
Do these C++ frameworks support modern C++ and how modern? Smart pointers in particular, but modern(ish) C++ offers lots of life improvement features over older versions. It would also be interesting to hear what the differences are between SFML, Allegro and Cocos2d-x and why you would pick one over the others.
Here's a question for anybody who knows: I would love to use a framework. I was wondering is there a universal scene editor that would work with any framework no matter which one I choose?
For 2D, look into Tiled and LDTK. You can just parse the exported file into your game's data structures. For 3D, it's pretty tough. You have Trenchbroom if you're working on a low-poly/quake-style game or something like gtkRadiant. I'm working on one myself but that's ways off still.
I would recommend doing things in code first and if you really need an editor just have a "god mode" in your game. It can be as simple as just using a boolean to enable/disable certain things, like player damage. You can also just add console commands or cheat-codes, like the way Minecraft does. Just modify the way that the game is saved to include any level changes you might make. I thoroughly recommend giving frameworks a go, they are much simpler than game engines, especially for 2D.
honestly I have found that making an editor is easier longer time but if you want one now you should use Tiled (2d) or Blender (3d) There are plugins to convert blender object positions to json which you can load.
My game engine I built on raylib, does not have a level editor, it is for making arcade games. :) I may add one at some point. Also, raylib used XNA as inspiration. I think it is way better than XNA, and I've used XNA/MonoGame for years.
NOTE: SDL2 does **NOT** abstract away graphics! It merely provides windowing and access to those graphics APIs.* * It does have SDL_render, which is a very very basic 2D renderer typically meant for debugging, and SDL3 is getting a cross-API GPU API, but that's not finished yet.
I can't wait for SDL3, the whole overhaul of the system to be modern and compatible with modern GPUs, support for vulkan and Metal, unified GPUs APIs, new shaders system....
@@maxrinehart4177 SDL2 already supports context creation for the new APIs, but it has no rendering system. You have to write the renderer yourself using the APIs.
Definitely would use Bevvy to learn Rust too. just for fun. another great video! man I can't believe i'm hearing about camtasia in 2024, surprised to see em going strong.
i sweetly remember xna. having a blob of geometry moving on the screen to the inputs of my gamepad in no time. ms not known for good UX did good here with the DX.
Shouldn't FNA be included in the 3D framework? when I have time to program again I am going to try it out. The reason I am choosing it over Monogames is because it has Vulcan support. I will try to build a complex 3D scene to test performance. Getting realistic lighting to work on it might be beyond my capability and I might end up moving to Flax.
You should cover SDL3 when it comes out, which should be coming out relatively soon. From the new features what I'm most excited about is the new GPU API. It has a vulkan, directx12 and metal backend and work is underway on a webgpu one. With this SDL3 will support 3D as well.
For me its all about convenience. I'm not a pro, i do 2d development as a hobby. The setup needs to be simple and fast. Secondary i need good documentation.
1:07 Thats not correct. The distinction that you describe is actually between a collection of libraries and a framework. Even the first project you show, SDL, calls itself a library. A framework depends on each other (like KDE or Qt) and libraries have no dependencies on another. I would say a game engine is one step further, gathering a framework under one UI.
Seriously, comparing SDL2, a low-level windowing and input library to Raylib? That's a bit misleading in my opinion because Raylib, as good as it is, is a full-fat framework which in some regard dictates how your game will be built (such as when using it in C, you're not really meant or able to link to system libraries such as windows.h). Also raylib does not support game consoles for the most part and on Desktop is locked to OpenGL, while SDL runs on just about anything.
Sdl is much older. And with that comes plenty of community made solutions to achieve the same results as raylib. You can Frankenstein your way into making SDL more feature rich than Raylib if you want And console porting is only an issue if you're successful enough to warrant it. By that time you can hire someone to make a wrapper around whatever you used to make your game (even pygame!)
@@dukemagus Console porting is a bigger deal than one may think even for indies, not just a "bonus if successful" - I've seen reports from other developers that games which barely sold a couple hundred dollars worth on steam got into the 5-figures on console. And yes, there are a lot of libraries ontop of SDL2, but those all just access graphics contexts via SDL.
I was just looking at frameworks too, esp those that Haxe can hypothetically target, so tired of engine drama and uncertainty edit: not tired of you reporting on it, you're doing awesome
SFML 3 is coming out soon -- from the sfml subreddit -- SFML 3.0.0-rc.1 Released same for SDL -- from the SDL subreddit -- Announcing the SDL 3.1.3 Stable ABI Preview! and you didn't mention pygame-CE -- a fork of pygame (there is a whole drama story going on with pygame, but pygame-CE seems to be the way to go now)
Oh neat, after all the Godot drama I was actually considering if using a framework might be the way to go. I have an interest in minimalism and optimization, and using a framework over a game engine would give me greater control over performance optimization. I also have an interest in simulation, which is notorious for being load intensive. I'm not entirely clear on what the difference is between using a framework and just writing everything from scratch. I assume it's similar, just that the framework has some of the more tedious and difficult (and commonly used) functions already written out so you don't have to do it yourself.
Writing everything from scratch means interfacing with API's like Vulkan, which to me is kind of hell. It's probably a good exercise to do once, to understand what's going on, but things have gotten so complicated (since GPU's have gotten so complex) that I find it's not pleasant to muck around with at the lowest level. Esp if you're like me and are more interested in game design, getting deep into the peculiar technicalities of modern GPU's / API's aren't really going to help you in that area. The rabbit hole just goes too deep. See: lines of code to render a triangle in Vulkan More importantly, there's the issue of dealing with multiple OS / hardware, if you want to run on more than your own system it's going to be a lot of extra tedious work. The frameworks are low level enough that you can still do whatever technical feats you can dream up. Also nice that the popular ones have C bindings, so you can write the project in your language of choice. Though it's still not at all like working with an engine like Godot, if you want an engine and mostly take issue with the politics, there's always the Redot fork.
@@cordlc Yeah, I'm keeping an eye on Redot. And honestly, that level of optimization is probably overkill for most of the games I'd want to make. If I did want to create my own game engine, it sounds like using a framework would be the way to go. I'll keep that in mind should I ever encounter something that I just can't get working in Godot/Redot, or if I decide I want to create my own game engine for fun.
Once you get used to using an engine with a level editor and boffing out a whole bunch of 3D games with almost no effort, it's difficult to go back to making games with just a compiler and a graphics library.
"Disney Works"? What is that? Like Dreamworks and Disney had a baby. Anyway, I think one may use engines in a "framework" mentality. Just build your own tools and things using their API's. Though it might be very limited and you'll be reinventing the wheel in a lot of cases but YMMV.
Hi Mike. I think you're confused between framework and library. For example, SDL is a library, not framework. Basically, if you call it's code, it is a library. If it call your code, it is a framework. Framework is basically a complete software that you can run as is. You can then add your own code to add functionality. Library just provide you building blocks. It will not run as is. Your code, which is not part of the library, is the one that run.
Mike can you do a video on Codea (your first video) in the future. It has upgrade significantly to a new 4.0 version with support of with ui, shades, inputs, physics, objective C support, and a lot more. I make games in it. My channel covers it. I am working on a game on it.
@@gamefromscratchYes a lot of updates. I would show you links but RUclips does not allow it. If you joins their discord in the website (one of the tabs at top) I can show you the updates.
I haven''t looked at Frameworks much in ages (went down a Unity hole for a while, now I do Godot), and I never realized how little there was in the way of 3d frameworks, which is even more surprising in a post-Vulkan world where getting a render pipeline up and running takes a lot more elbow grease than the OGL days. Though now I'm having fond memories of when I messed with SDL and SFML years and years and years ago.
@gamefromscratch all good, I was just seeing if I should not pursue learning it because I just started 😅 panda3d is a great option after I level up. Thank you for the great video's 😁
I'm kind of annoyed that the analytics are apparently darn good at identifying what I'm trying to work on even when I don't tell even my best friends. It's very useful! But still just kinda creepy I guess.
No, a framework controls the application flow, and a library lets you control application flow. A library would be vulkan SDK or OpenGL/OpenCL lib. You would take them to make something like Raylib that would be a framework because it controls the flow of your app to these libraries. Libraries tend to be lower level and frameworks are high level. Frameworks try to take common and best practices of a library or set of libraries and just do it for you. You could say that Godot is batteries included framework, but even then that is a giant leap.
Heaps is kinda odd in that it's kinda a framework and kinda a library and kinda an ecosystem. I am a fan and included it last time but it was an awkward fit.
@@gamefromscratch Yea, that's very true. I forgot how big the ecosystem for Heaps is. I think Deep night's GameBase template does a really job at giving you something to work with. (That would be a batteries included framework, tho) Sadly, they made castledb apart of Hide. Making have you to build hide in order to get the GUI now.
Uh... if you're just learning Rust you won't be happy with Bevy. You should have at least a year of playing around with Rust before you start looking into Bevy since it uses abstractions that take full advantage of the language. You will be overwhelmed otherwise.
@@gamefromscratch like from nothing just a programming language no framework, also omg i got replied im so happy right now, your video helped me thank you so much❤
Might be worth checking out something like the book Game Engine Architecture, which is currently in 3rd edition. It is a book about building an engine written by people in the industry.
@@gamefromscratch you didn't ever try to google, lol! These game engine have official level editors, just like DoomEd, QuakeEd, Build editor. They all have separate content files without hard-coding such as WAD, BSP etc. Next time you do your video, at least check facts.
@@gamefromscratch The fact that Id and 3d Realms made tools to make things to work with their engine doesn't make those part of the engine. Unless you think the factory your car was made in is part of your car's "engine". An engine was originally a set of code libraries that do things that are important to your game. The term has changed over time as language does, but still....
Key Links
gamefromscratch.com/the-best-game-development-frameworks-in-2024/
Sponsor Link: spn.so/gnt9gxtq
If you miss the 48 hour Flash sale, you can still use the code GAMEFROMSCRATCH for 15% off Camtasia at checkout
-----------------------------------------------------------------------------------------------------------
*Support* : www.patreon.com/gamefromscratch
*GameDev News* : gamefromscratch.com
*GameDev Tutorials* : devga.me
*Discord* : discord.com/invite/R7tUVbD
*Twitter* : twitter.com/gamefromscratch
-----------------------------------------------------------------------------------------------------------
Timestamps:
2d frameworks:
1:28 SDL (C and C++)
2:12 SFML (C++)
2:47 Allegro (C++)
3:30 Raylib (C and multiple other languages)
4:27 Cocos2d-x (C++)
5:04 Löve2D (Lua)
5:53 libGDX (Java)
6:47 Phaser (JavaScript or TypeScript)
7:18 HaxeFlixel (Haxe)
7:46 MonoGame (C#)
8:57 FNA (C#)
3d frameworks:
9:41 Babylon.js (JavaScript)
10:39 Three.js (JavaScript)
11:11 OGRE (C++)
11:41 Panda3D (Python)
12:20 bgfx (C and C++)
12:41 Bevy (Rust)
Your welcome
Worth clarifying that Raylib is C in its official version, with almost every known language covered via endorsed third-party ports.
@@safebox36thanks will change
Another info: Developers of Factorio used Allegro at first but then switched to SDL2 because Allegro is outdated xD
There is a Steam vlog where they write about that ;-)
Allegro5 was written with C being the main languange. You can use C++ but its really a second class citizen.
There is a correct answer to "what is best".
The answer: what works best for you. Whichever language and flow fits your personality and needs.
Jokes aside.
I massively appreciate you. Wish I had this a few years ago. Spent a month or two figuring out the frameworks I want to use. They are still subject to change, and I have everything saved on a spreadsheet, just made the bad ones(for my purposes) red or black.
Unfortunately it's too late for this to be much help, but I watched it all the way through, liked, and am commenting. RUclips should think I was ecstatic about it, as I would have been if I saw this when I first found you.
Keep up the good work.
Also worth mentioning is LÖVR. Sounds similar to LÖVE2D because it borrows almost the same API, but it's more suitable for 3D (powered by a Vulkan renderer) and especially VR. It can do 2D as well of course and is extremely easy to use. To put things into perspective, you can do a VR "Hello World" in 3 lines of code.
I'm trying to think if I've covered this one or not.
@@gamefromscratch You did! It was in its infancy back then and is now more mature than ever.
I like the simplicity of love2d and lua, everything is pure and concise
I especially like the combination of love2d and fennel.
I want add a "correction" about SDL, it's not really a "framework" much less a "2D framework" as depicted here. It's more of a simple set of "write once, run everywhere" functions that abstract away the pain of writing the platform specific code by hand, or worse writing all the specific ways each of your supported platforms wants it. I call it "The jQuery of Game Development".
What SDL provides is more akin to "platform normalization", it normalzies input (if you want it), it normalizes image loading (if you want it), it normalizes audio (if you want it), but most importantly it normalizes "context creation" (as part of it's base kit). What does "context creation" mean? It creates the OpenGL or Direct3D rendering context in a very straight forward way through one interface, just one time, and setting them up with a ton of sensible defaults; where otherwise creating these rendering contexts by hand is a lengthy and involved process. Also part of it's base kit is a normalization of window creation, so whether your on windows, linux, mac, whatever, it knows how to create a window for that platform, and slap that rendering context inside of it.
Without any further tinkering, it does also provide a very rudamentry sprite blitting api to do extremely simple 2d stuff using OpenGL's "Fixed Function Compatibility Mode" but no one's really using that. You're using SDL to get up and running with a window and a context within a minute or two to then start writing OpenGL or DIrect3D low level api calls directly to it to then start your shader based rendering pipeline (usually).
**EDIT:** I appreciate that people took the time to read my comment, because I didn’t even mention Direct3D until way below the Read More button. But there seems to be a lot of confusion over what Direct3D even is, and whether I meant DirectX or not. First of all: No, I didn’t. “DirectX” itself is a brand name referring to a specific collection of SDK’s that all tie together and work together to make Real Time applications on Windows powered platforms easier. There’s DirectInput to deal with user input (keyboard, mouse, joypads, etc), there’s DirectSound for audio, etc. The “X” literally just means “Insert SDK Name Here”, and yes that includes Direct3D which is as the name suggests; the 3D Rendering API. There used to be a Direct2D at one point but that has since been retired as D3D setup with an Ortho camera can pretty much handle that.
D3D is both old, and new. The current API level is D3D12, and most of the API calls and macros and functions are named that way (eg: “ID3D12Device::CreateCommandList”). But you’ll still see older D3D api’s in there, slowly being phased out with each new iteration.
Popular engines like Unreal and Unity have OGL, D3D11, D3D12, and Vk rendering paths for maximum compatibility across platforms. And unless explicitly told not too, when you play one of these games, it’ll use the rendering path most appropriate for that platform automatically.
DirectX is kind of like SDL but just for Windows powered platforms like your PC, Xbox, and Windows Phone (remember those?). SDL is a bit higher level, and includes other contexts like OpenGL.
Lamaoooo who tf even uses Direct3D anymore? Why would anyone want to use that? It's far too dated.
@@user-og6hl6lv7p all game engines are using direct3D including unity and unreal.
@@user-og6hl6lv7pSDL supports DX9 through 12, OpenGL (and GLES), Vulkan and if I'm not wrong also Metal.
I think our guy here is referring to DirectX as Direct3D.
@@user-og6hl6lv7p probably he meant DirectX.
Thank you for this. As someone who didn't ever use these low level tools I understood you explanation perfectly. I would like that documentation for every tool is this precise and clear.
I'm ashamed by how much time it took me to understand that it's "Mike here, at GameFromScratch", and that your name is NOT "Miker"
Lol don't worry about it, 90% of people still thing the name of the channel is GAMESfromscratch, so you're ahead on that one ;)
Game Miker
@@dermondMikeer!
@@gamefromscratch guilty!
@@dermond😂😂
raylib can be used for 3d too, theres side step legends to show.
I was actually looking for this and I got your video like a minute after it went public, thanks!
I did some coding using SDL and SFML when I was younger and had no clues about coding overall.
Doing alot in C++ was a challenge but surely helped me understand how a game was built.
Thankfully with the amount I looked into it, I managed to acquire some basic knowledge of gamedev and how things work behind some Game Engines.
There are two kinds of programming, Game Play and Game Engine. If you want to make a game, learning to much about the deep concepts behind Game Engine might not be a good idea.
@@bingyu1425 oh trust me, it probably wasn’t but i was also not inspiranced in coding. So grabbing C++ as my first coding language was also not the best choice i made.
Then again i learned alot with such a rough entry. Would I recommend it to anyone else? Probably not.
THANKS MIKE ...
Did not know that RUclips Studio had an "Inspiration" section.
I'll need to start looking at that section from now on.
Today, on "Mike screams to everyone who will listen 'You have more than three options for game development'" We'll be featuring more than three frameworks and Mike's Herculian self control.
8:18 Terraria was originally made with XNA.
I would say that this definition is pretty new. Before game engine was code features that could stand alone from the game itself and be used to create another game. Framework was usually the term for “engines” outside of gamedev. Say like Flutter.
That a game engine should incorporate and editor is actually a bit to opposite. A framework usually had some tooling like swift for iOS dev. While a game engine if one listen to the name. Was the engine , the motor that the game was running on.
While the editor was well editor of data files that the engine might use at runtime. But not always that either.
I would say it’s more down to angle and where you come from but for sure a game engine do not need to have any direct advanced tooling.
Also several what is here references as framework I would more name as “libs” as purpose is to include them into other frameworks etc.
precisely
A perfect example of this is the quake and doom engines, there are loads of editors available for both of them but they don't come with the engines themselves, they're made by the community. But you can launch your game or map directly from the map editors typically. So they technically meet both definitions for an engine at the same time
@@jlewwis1995 exactly. Although I myself still see them as editors that use the engine (not always) to run a game like core for me is that the game itself do not often incl does the editor / frameworks the game is just game code and the game engine code.
Well we know what we mean. Loved child has many names. :)
Yes, this definition is very weird. If Godot makes changes to its UI, did the engine really change? The definition suggests yes, but would anybody really think of it that way? Would a framework suddenly have to be called an engine if somebody hacks together a provisional scene editor for it? If not, how complete does the tooling have to be until it becomes an engine. The definition makes no sense.
I don't think framework is a useful concept in game development. There are libraries, there are engines, and there are development tools, each building on the level before it.
Its not a new definition.
The reason its a bit fuzzy is because its a spectrum: lib -> framework -> engine
XNA/MG/FNA for game sale numbers on steam is the third successful "engine/framework" after Unreal and Unity. Don't understand why there is always "Celeste" showing off (which is amazing) when there are Stardew Valley (which is one man job) or Terraria which sold way more..
I think it's because Celeste is always focused on the homepage.
I don't think I'll ever use a framework for game development, but it's amazing the tools we have completely free to make amazing stuff
I thoroughly recommend it. Raylib is so much simpler for 2D than a full editor + engine. Game Engines are tuned for bigger projects (like AAA games), but frameworks can be good too.
@@BoardGameMaker4108 yeah, I've messed around with Love2d and Phaser, but I feel these are better for people who are actually good programmers, unlike me. Even with ai to help with the code, it's just not my thing. I already struggle enough with Gdscript 😂
Before switching to Godot, I tried out SFML because the failed indie game Limit Theory used it. It is possible to pair SFML with 3D rendering.
Surprised to find out that you didn't include Pygame.
Love your content btw!
Pygame is not a "true" framework, is a wrapper for SDL and other facilities.
I think after the fallout of the original Pygame developer people moved on to PyGame CE (Community Edition). So that's the one I would recommend for people who are into Python.
I've mostly only worked with game engines like Unity and Godot. I was a CS major, but I barely ever touched C++ or C programming after my first year. I'm sort of interested in really understanding game programming on a deeper level. Do you recommend trying Raylib to get more into C programming based on my case?
Specifically, I want to make 2D games.
There are 3 suggestions I can give you (based on what I have used):
1. Monogame: it is a C# framework, thus you can rely on your C# knowledge while playing with it. Start with it or similar thing.
2. SFML: Used it in C++ project. Somewhat similar to Monogame but still pretty straightforward.
3. Cocos-2dx: distinctly different from SFML and is node-based. A bit higher in terms of features than SFML.
Take my suggestion with a grain of salt as I have used them long time ago.
Huh. I've literally been looking at building games with a framework recently (built a couple of simple ones in go with raylib). It's interesting if this is something that's gaining traction again. It can be quite freeing from what I've done so far. More complexity in some places but definitely more simplicity in the sense that I can just draw some simple structs with to screen and define the relationship between structs in a way that makes sense for my game sooner than the way an engine thinks I should do it
Raylib has 3D support 🤔
Was wondering why would you need triangle draw functions on a 2D game, thought was for physics
XNA was my first introduction to "oh I can make games?!" to the world I had 0 knowledge of what coding even was, but their slogan said you could, so I my life mission in that point became to learn how. EDIT: oh and feedback Camtasia looks amazing, but subscription software is dead to me, shame... I would rent but if there is a permanent option available
I'm really enjoying dragon ruby GTK, which you showed in your previous video.
SDL... how many memories.... I've used it for my breakout clone something like 25 years ago or so, and then as my output lib for my path tracer. Sometimes it is nice to see that not everything turns into dust...
It's a shame that you didn't include the ebitengine, Go-based game framework... Go is a pretty easy language to learn and it's capable of compiling to cross-platforms...
Yeah, agreed - Ebitengine is a really good option for relatively straightforward, code-focused 2D game development, and Go is an excellent and easy-to-use programming language. Really recommend it.
Perfect timing. Just started to learn Raylib recently, but was looking around for other possible alternatives like Dragonruby 6 that you covered recently
Libgdx yeahhhhhh I think I discovered this channel thanks to the libgdx series ages ago, that was nostalgic
Likewise.
I am so happy you exist! It helps expand my ideas on where to go as starting dev.
no Ebiten?
Raylib has a COBOL binding, apparently... I'm sold...
Do these C++ frameworks support modern C++ and how modern? Smart pointers in particular, but modern(ish) C++ offers lots of life improvement features over older versions.
It would also be interesting to hear what the differences are between SFML, Allegro and Cocos2d-x and why you would pick one over the others.
Here's a question for anybody who knows: I would love to use a framework. I was wondering is there a universal scene editor that would work with any framework no matter which one I choose?
For 2D, look into Tiled and LDTK. You can just parse the exported file into your game's data structures.
For 3D, it's pretty tough. You have Trenchbroom if you're working on a low-poly/quake-style game or something like gtkRadiant. I'm working on one myself but that's ways off still.
I don't know why Frameworks don't include a simple scene editor that lets you position objects in your game. There are tutorials on how to make them.
I would recommend doing things in code first and if you really need an editor just have a "god mode" in your game. It can be as simple as just using a boolean to enable/disable certain things, like player damage. You can also just add console commands or cheat-codes, like the way Minecraft does. Just modify the way that the game is saved to include any level changes you might make.
I thoroughly recommend giving frameworks a go, they are much simpler than game engines, especially for 2D.
honestly I have found that making an editor is easier longer time but if you want one now you should use Tiled (2d) or Blender (3d) There are plugins to convert blender object positions to json which you can load.
Good List. I must mention that you can do 3D in Love2d, either with rozenmad/Menori, or with bjornbytes/lovr.
I'll also recommend AFrame (JS built on Three.js) for WebVR and WebAR (on 8th Wall for example).
to be honest I have been waiting for this video since forever, thanks
My game engine I built on raylib, does not have a level editor, it is for making arcade games. :)
I may add one at some point.
Also, raylib used XNA as inspiration. I think it is way better than XNA, and I've used XNA/MonoGame for years.
NOTE: SDL2 does **NOT** abstract away graphics! It merely provides windowing and access to those graphics APIs.*
* It does have SDL_render, which is a very very basic 2D renderer typically meant for debugging, and SDL3 is getting a cross-API GPU API, but that's not finished yet.
I can't wait for SDL3, the whole overhaul of the system to be modern and compatible with modern GPUs, support for vulkan and Metal, unified GPUs APIs, new shaders system....
@@maxrinehart4177 SDL2 already supports context creation for the new APIs, but it has no rendering system. You have to write the renderer yourself using the APIs.
I'm the author of the Ada bindings to SDL2, which adds type safety to the base API.
Sokol is also a framework much like raylib but even more compact but as versatile as raylib with bindings already.
You beat me to it, but I had to do the full pitch. Such a great library.
Definitely would use Bevvy to learn Rust too. just for fun. another great video! man I can't believe i'm hearing about camtasia in 2024, surprised to see em going strong.
Phaser also has an official editor available, bringing it a bit closer to game engine territory.
I am currently using glfw and bgfx
btw, you can do 3D in raylib, it's not just for 2D
i sweetly remember xna. having a blob of geometry moving on the screen to the inputs of my gamepad in no time. ms not known for good UX did good here with the DX.
Shouldn't FNA be included in the 3D framework? when I have time to program again I am going to try it out. The reason I am choosing it over Monogames is because it has Vulcan support. I will try to build a complex 3D scene to test performance. Getting realistic lighting to work on it might be beyond my capability and I might end up moving to Flax.
You can use SDL with C++ as well. Doesn't really matter what it's written in.
an engine you never covered: Irrlicht Engine (+ there is also another version out there called skylicht engine)
Tysm i was looking for this type of videos about framewoks❤
Great video. Thank you very much!
I believe panda has a c++ version. It's is more recent and aside from some minor differences c++ and python version are pretty interchangeable
libGDX can also handle 3D environments. I used it to build a custom map editor for an old MMO game.
Mono but with Lua instead of C# would be perfect. Love2d doesn't seem to offer support for consoles.
What's the state of Phaser in 2024? Still a solid choice?
Literally looking for this two days ago, crazy
Yay I was looking for this.
You should cover SDL3 when it comes out, which should be coming out relatively soon. From the new features what I'm most excited about is the new GPU API. It has a vulkan, directx12 and metal backend and work is underway on a webgpu one. With this SDL3 will support 3D as well.
What a rabbit hole :O
For me its all about convenience. I'm not a pro, i do 2d development as a hobby. The setup needs to be simple and fast. Secondary i need good documentation.
1:07 Thats not correct. The distinction that you describe is actually between a collection of libraries and a framework.
Even the first project you show, SDL, calls itself a library.
A framework depends on each other (like KDE or Qt) and libraries have no dependencies on another.
I would say a game engine is one step further, gathering a framework under one UI.
Also raylib calls itself a library
If you wanna see more on that, read "Library patterns Why frameworks are evil" from Tomas Petricek
Which, if any, frameworks are planning new visual interfaces to bring in non-code centric developers?
Is there a C# GameDev focused Framework to make 3D Games?
From what I know, XNA or monogame is 3D focused. Even 2D games built from it is in 3D environment it just that the camera configuration were fixed
Seriously, comparing SDL2, a low-level windowing and input library to Raylib? That's a bit misleading in my opinion because Raylib, as good as it is, is a full-fat framework which in some regard dictates how your game will be built (such as when using it in C, you're not really meant or able to link to system libraries such as windows.h).
Also raylib does not support game consoles for the most part and on Desktop is locked to OpenGL, while SDL runs on just about anything.
Sdl is much older. And with that comes plenty of community made solutions to achieve the same results as raylib. You can Frankenstein your way into making SDL more feature rich than Raylib if you want
And console porting is only an issue if you're successful enough to warrant it. By that time you can hire someone to make a wrapper around whatever you used to make your game (even pygame!)
@@dukemagus Console porting is a bigger deal than one may think even for indies, not just a "bonus if successful" - I've seen reports from other developers that games which barely sold a couple hundred dollars worth on steam got into the 5-figures on console.
And yes, there are a lot of libraries ontop of SDL2, but those all just access graphics contexts via SDL.
very odd to downplay raylib's decent but simple 3d stuff here
Will you make a game engine one?
I kind feel I've done that a few times, but not sure if there's an exact match.
Yoo an update from my bookmarks(originally I bookmarked best FOSS engines and frameworks)
I was just looking at frameworks too, esp those that Haxe can hypothetically target, so tired of engine drama and uncertainty edit: not tired of you reporting on it, you're doing awesome
SFML 3 is coming out soon -- from the sfml subreddit -- SFML 3.0.0-rc.1 Released
same for SDL -- from the SDL subreddit -- Announcing the SDL 3.1.3 Stable ABI Preview!
and you didn't mention pygame-CE -- a fork of pygame (there is a whole drama story going on with pygame, but pygame-CE seems to be the way to go now)
Yeah a miss by me regarding pygame.
Please, tell me it's technical drama, not some political one again...
Surprised you didn't mention Diligent Engine.
Oh neat, after all the Godot drama I was actually considering if using a framework might be the way to go. I have an interest in minimalism and optimization, and using a framework over a game engine would give me greater control over performance optimization. I also have an interest in simulation, which is notorious for being load intensive.
I'm not entirely clear on what the difference is between using a framework and just writing everything from scratch. I assume it's similar, just that the framework has some of the more tedious and difficult (and commonly used) functions already written out so you don't have to do it yourself.
Writing everything from scratch means interfacing with API's like Vulkan, which to me is kind of hell. It's probably a good exercise to do once, to understand what's going on, but things have gotten so complicated (since GPU's have gotten so complex) that I find it's not pleasant to muck around with at the lowest level. Esp if you're like me and are more interested in game design, getting deep into the peculiar technicalities of modern GPU's / API's aren't really going to help you in that area. The rabbit hole just goes too deep. See: lines of code to render a triangle in Vulkan
More importantly, there's the issue of dealing with multiple OS / hardware, if you want to run on more than your own system it's going to be a lot of extra tedious work.
The frameworks are low level enough that you can still do whatever technical feats you can dream up. Also nice that the popular ones have C bindings, so you can write the project in your language of choice. Though it's still not at all like working with an engine like Godot, if you want an engine and mostly take issue with the politics, there's always the Redot fork.
@@cordlc Yeah, I'm keeping an eye on Redot. And honestly, that level of optimization is probably overkill for most of the games I'd want to make. If I did want to create my own game engine, it sounds like using a framework would be the way to go. I'll keep that in mind should I ever encounter something that I just can't get working in Godot/Redot, or if I decide I want to create my own game engine for fun.
Once you get used to using an engine with a level editor and boffing out a whole bunch of 3D games with almost no effort, it's difficult to go back to making games with just a compiler and a graphics library.
"Disney Works"? What is that? Like Dreamworks and Disney had a baby. Anyway, I think one may use engines in a "framework" mentality. Just build your own tools and things using their API's. Though it might be very limited and you'll be reinventing the wheel in a lot of cases but YMMV.
13:46 - Primagen mentioned
No Pygame :(
But you put Löve2D :)
I -love- more Löve2D than Pygame
Yeah, Techlinked!
Raylib can do 3D tho as well.
Ogre has a Blender to Ogre translator to use Blender for maps.
Hi Mike. I think you're confused between framework and library. For example, SDL is a library, not framework.
Basically, if you call it's code, it is a library.
If it call your code, it is a framework.
Framework is basically a complete software that you can run as is. You can then add your own code to add functionality.
Library just provide you building blocks. It will not run as is. Your code, which is not part of the library, is the one that run.
Mike can you do a video on Codea (your first video) in the future. It has upgrade significantly to a new 4.0 version with support of with ui, shades, inputs, physics, objective C support, and a lot more. I make games in it. My channel covers it. I am working on a game on it.
Oh has it been updated? I looked a year or so back and it seemed a bit static
@@gamefromscratchYes a lot of updates. I would show you links but RUclips does not allow it. If you joins their discord in the website (one of the tabs at top) I can show you the updates.
raylib my beloved
I haven''t looked at Frameworks much in ages (went down a Unity hole for a while, now I do Godot), and I never realized how little there was in the way of 3d frameworks, which is even more surprising in a post-Vulkan world where getting a render pipeline up and running takes a lot more elbow grease than the OGL days. Though now I'm having fond memories of when I messed with SDL and SFML years and years and years ago.
Where is the lovely GLFW
What about pygame-ce?
Same as Pygame but more Community driven ;-)
Yeah a miss by me.
@gamefromscratch all good, I was just seeing if I should not pursue learning it because I just started 😅 panda3d is a great option after I level up. Thank you for the great video's 😁
I'm kind of annoyed that the analytics are apparently darn good at identifying what I'm trying to work on even when I don't tell even my best friends. It's very useful! But still just kinda creepy I guess.
Where is U3d ?
Raylib is 2d only?
Panda3d is awesome! There is a level editor for it.
Raylib is not 2d only, no.
Aren't they libraries?
Wouldn't a "framework" be something like Godot?
No, a framework controls the application flow, and a library lets you control application flow. A library would be vulkan SDK or OpenGL/OpenCL lib. You would take them to make something like Raylib that would be a framework because it controls the flow of your app to these libraries.
Libraries tend to be lower level and frameworks are high level. Frameworks try to take common and best practices of a library or set of libraries and just do it for you.
You could say that Godot is batteries included framework, but even then that is a giant leap.
I thought bevy is a game engine.
Heaps io not found 😔
Heaps is kinda odd in that it's kinda a framework and kinda a library and kinda an ecosystem. I am a fan and included it last time but it was an awkward fit.
@@gamefromscratch Yea, that's very true. I forgot how big the ecosystem for Heaps is. I think Deep night's GameBase template does a really job at giving you something to work with. (That would be a batteries included framework, tho)
Sadly, they made castledb apart of Hide. Making have you to build hide in order to get the GUI now.
What about Irrlicht 😮😅
if i download panda3d, will disney be able to kill my waifu?
GLFW?
I want to try Panda3D, but I have no time.
I am not surprised to see this video. A tweet started another Migration Period after Unity..
Uh... if you're just learning Rust you won't be happy with Bevy.
You should have at least a year of playing around with Rust before you start looking into Bevy since it uses abstractions that take full advantage of the language.
You will be overwhelmed otherwise.
I love raylib!
Im interested in making game from scratch like literally
This ironically could have two meanings. So you mean Scratch as in the language/framework or do you mean from nothing?
@@gamefromscratch like from nothing just a programming language no framework, also omg i got replied im so happy right now, your video helped me thank you so much❤
Might be worth checking out something like the book Game Engine Architecture, which is currently in 3rd edition. It is a book about building an engine written by people in the industry.
Some of these are libraries, not frameworks. There is a difference between a framework and a library.
Raylib! Raylib! Raylib!
Waiting to tomorrow for O3DE 🥵
So what you're saying is the Doom engine wasn't an engine, the Build engine wasn't an engine, and the Quake engine wasn't an engine....
All 3 of those engines had world building tooling? So, no.
@@gamefromscratch you didn't ever try to google, lol! These game engine have official level editors, just like DoomEd, QuakeEd, Build editor. They all have separate content files without hard-coding such as WAD, BSP etc.
Next time you do your video, at least check facts.
@@gamefromscratch The fact that Id and 3d Realms made tools to make things to work with their engine doesn't make those part of the engine.
Unless you think the factory your car was made in is part of your car's "engine".
An engine was originally a set of code libraries that do things that are important to your game. The term has changed over time as language does, but still....