I wrote this free book on how to make games with Ruby using the DragonRuby Game Toolkit. As I've been learning the engine, I've felt really inspired by how quickly I can prototype my ideas and release them for all the major platforms. DragonRuby GTK is a really interesting use of mruby and SDL. To see Ruby be used for anything other than Rails is always exciting. I thought maybe this book would nudge others interested in Ruby game dev to take the plunge. Would love any feedback! Thanks.
Thank you for sharing the book, Brett! I definitely need to revisit the SDK which I had from its early versions, but unfortunately it was always lacking something. That was years ago tho.
Brett, thanks for making this book! You've reinvigorated my interest in DragonRuby. I have a pro license that I haven't done much with; a couple jam "games".
I have a question about FLOSS that I haven't seen the answer to floating around. If I want to make a GPLv3 game, release, and sell it, what are the implications with using DragonRuby?
Is the recommended approach to ship the commercial packages with DragonRuby and have an open source variant running with zif[0]?
Any recommendations? Thank you again for the book!
I can definitely help you here! The code you write is yours to license as you please. So you can release the source for your game under GPLv3, you just can't distribute the engine alongside the source. Someone would have to own the engine and use your source alongside it to contribute to your game. You can compile and sell your game as you normally would, of course!
Zif is an open source community library for DragonRuby Game Toolkit that gives you a lot more classes and structure, if you so choose to use it. So it's not an "instead of" but rather a library you can drop into your DragonRuby Game Toolkit game.
While DragonRuby GTK is not FLOSS, your code is your code, and it's built upon mruby, llvm, and SDL, so it's got a really strong FLOSS core. I'm not a license expert tho, so maybe there are more implications than I'm realizing.
While I love Ruby, and love the concept of DragonRuby, it’s a really naive and simple engine.
It’s basically a wrapper around SDL, which means you’ll have to create everything you want in a game engine. But it’s a really good start to understand graphics and game programming..
I’d recommend cocos (2D) if you wanna create a 2D game. It’s very high performance, full features and is supported on almost any platform. You can write in c++, or use JavaScript / lua.
I can understand where you're coming from, but I disagree with the sentiment of it basically being just a wrapper around SDL and naive.
DragonRuby Game Toolkit's API is simple, and that's a good thing! It provides the foundations needed for building any kind of 2D game without introducing dozens of classes, an inheritance tree, or complex data models. With just a few primitive data types and some methods, everything one needs it there. Combine that with the sample code and the community, and there's not a type of 2D game out there that you can't get going with in DRGTK within a couple of hours.
DRGTK does make it easy to render sprites and text and handle input on top of SDL, which is valuable in and of itself. But it's not just direct bindings where you have to look at and understand how SDL works. I've never once had to look at the SDL docs to understand DragonRuby GTK's API. What the engine then gives you is: cross-platform builds with a single command, its simple API, ability to write games in a fantastic language, live reload of your game while developing without needing to recompile, the ability to use the toolchain of your liking, and more.
I'm personally not interested in using C++ to make games, and I think if someone is, they probably wouldn't want to use DragonRuby GTK anyway. But choosing between JS, Lua, or Ruby, I'd choose Ruby every single time. It's a more enjoyable language to use. That to me is a big factor in why I like DRGTK—the toolchain. After spending 10+ years making 2D games as a hobby by experimenting with XNA/MonoGame, Unity, HaxeFlixel, Love2D (Lua), Phaser.js, Gosu (Ruby), C++, and AS3, I really think DragonRuby has a unique combination of offerings that has me so excited about it and wanting to see it succeed.
Exactly, it handles sprites, textures and some other stuff. It’s an SDL wrapper (ok, a bit more than that in terms of api, which is nice), and tolling to get cross platforms builds.
Like I said, it’s nice for that. And I like that you have an immediate console.
But you’ll have to recreate everything else which you’d wanna use.
I hope it’ll succeed, or at least stay alive, bc it’s a great starting point.
people behind are SDL guy, and another person that did make successful games on apple. it has a lot of features that other engines, have. so what do I miss here?
does cocos2d is so advanced and better than dragon ruby to build a 2d game?
You can generate builds for desktop operating systems and the web with the basic license. With the web builds, you can host them anywhere on the web since they're static files. But a lot of the community uses Itch.io to share their games.
I released a game in rubymagic back in the day and have kicked the tires on DragonRuby a few times. I love the concept but hate the license.
They give it away for free all the time for game jams, but I think the fact that it’s paid is too big of a barrier for wide adoption. I hope your book does well anyway! It’s a fun piece of tech and it would be a good teaching tool if the engine was free (I’ve been using pixi.js with my kids).
Thanks for the kind words! I appreciate where you're coming from.
My perspective on the license and price is that it's a small team of less than 5 people who work on DragonRuby Game Toolkit. To spend $32 for a lifetime basic license is totally worth it to me for everything that comes with it. The work that's gone into the cross-platform support, designing the API, gluing together mruby and SDL, and more without a doubt is an incredibly compelling offering. I want to see DRGTK sustain itself for the long-term, and I think the team getting paid for helps make that happen.
I've thought about what it'd be like if the basic license was always free... The book is free, so it's a little awkward to then have a reader need to pay to use the software it's about. Sure, maybe more people would use it, but for an engine still in its early days (~3 years isn't that long compared to those that have been around for 10+ years), I think having a slight barrier to entry may benefit the project so it's not flooded by needing to support the flood of people that'd come from an always free version while it grows, stabilizes, and establishes itself.
This is fantastic. I would highly recommend DragonRuby if you like Ruby as a language and would like to dip your toes into 2D game development. The community is very welcoming too.
+1 on the community being kind and welcoming. That to me is a major factor. I've learned so much from the community, and it extends beyond just making game dev. The community organizes jams, monthly game clubs, and supports one another.
I think it may be the opposite with regards to Unity and being time constrained, as there's a lot more to learn with Unity when making games rather than something like DragonRuby Game Toolkit. For a hobby that you have only a little bit of time to dedicate to, I think 2D games in an engine with a simple API would be quite a bit easier. But that's just me!
I agree with Brett! Plus, if you're not already experienced with ruby, you'll get some exposure to the mruby variant in DR. It's been a pleasure working in ruby!
I love Ruby, but I always wonder if performance will be an issue if there're many things happening on screen especially on mobile. Does anyone has any experience?
My experience with DragonRuby was really poor. I was dismayed how restrictive it was (e.g. with libraries). Images were particularly painful and I was annoyed that the toolkit couldn't dynamically resize them for me (nor could I pull in ImageMagick). Perhaps it was trying to deal with sprite sheets and having to hardcode pixel offsets. Yes, it uses Ruby syntactically, but it doesn't feel like Ruby to me as far as ecosystem and productivity go. This was a few years ago - maybe this has changed. I probably wouldn't give it another go, but I'd love to see something built in DragonRuby hosted online to see what it can do.
Godot, while not perfect, fit my expectations better. I found myself simply using the prebuilt abstractions I was already building by hand in DragonRuby. Things mostly work. When it came time to cross-compile for hosting on itch.io, I was really delighted by how easy it was to get my games in front of people. That quick feedback loop got me hooked for a while.
Godot is pretty good, I wish I had more time to spend with it. DragonRuby reminds me of RubyMotion, the magical framework to write cross-platform apps that was also hopelessly disappointing and over-hyped. A complete waste of my money.
And then I went to check out the DragonRuby and RubyMotion websites and it turns out that DragonRuby IS RubyMotion.
Kudos to the team for building something clever but I'm not falling for that one again.
There's a C API for Godot and GDExtension. It should be easy and it has been done before (but not maintained). The problem is that it's just far slower than GDScript or C#.
> The problem is that it's just far slower than GDScript or C#.
I'd say that depending on what you're doing, you can get away with a lot even in slower language runtimes, otherwise we'd be writing all of our game code in C, C++ or Rust (or other languages like that) only.
I actually ported the Godot LOD plugin from GDScript to C# a while back to what the performance would be like between the two supported languages: https://blog.kronis.dev/articles/porting-the-godot-lod-plugi... and found that the performance was comparable (so language runtime performance itself doesn't matter that much)
As long as you don't do too much number crunching every frame, you should be fine, especially if the engine itself does most of the heavy lifting. Of course, when it comes to the performance impact of interop between different languages/components, that might be a different story.
But hey, it's not like challenges like that can't be overcome due to some inherent limitations, even the Unity game engine sees popularity of MoonScript (which runs Lua under the hood), as far as I can tell. And in regards to games in general, the whole S.T.A.L.K.E.R. game series used Lua for scripting, if my memory doesn't fail me.
The problem isn't just Ruby speed, it's that GDScript exists and Ruby doesn't really offer any benefit over it. If there were no scripting language, sure, hook up Ruby. But GDScript is good.
Agreed, GDScript is pretty nice for working with the engine.
> The problem isn't just Ruby speed, it's that GDScript exists and Ruby doesn't really offer any benefit over it. If there were no scripting language, sure, hook up Ruby.
However, I'm inclined to say that familiarity with a language might be reason enough to choose to use it, if there are no other significant dealbreakers! If you like C++, use C++. If you like Rust, use Rust. If you like Python, Lua, or Ruby use those... as long as someone has done the work to make that possible (or you want and can do that yourself).
GDScript is nice and easy to pick up, but someone who has used .NET for close to a decade might benefit from using some C#, or maybe they like the refactoring or other functionality that an IDE like JetBrains Rider might provide, especially with the occasional nice plugin for the engine itself popping up: https://plugins.jetbrains.com/plugin/13882-godot-support (to be honest, I really liked the Rider plugin for Unity as well, which made writing code a more pleasant experience).
Secondly, there's also the question of an ecosystem, which may or may not work depending on how well any runtime integrates with the engine and what the situation for packaging various libraries/dependencies is (since sometimes you need to deal with native code in Ruby and others). But when it works, you can get a library for basically anything you might want to do: a novel game with AI processing? There are libraries for that. Want to hook up your own netcode solution? There's probably a solution for that. Want to do compression, or work with a variety of file formats, or add dynamic scripting, or interact with a web service of some description? Those are solved problems in some languages, with the solution being just a library away.
Of course, most games probably don't need anything that fancy and the engine has bits of nifty functionality in it, like making web requests, for example, but overall being able to benefit from a rich ecosystem is also good, especially when you decide to do something a bit more novel.
At the end of the day, use whatever works for you: for someone that might be GDScript with its nice integration with the engine and easy syntax, for someone else that might be C# with its static type system and rich IDE support, whereas someone else might be a bit more brave and go off the beaten path further!
Thanks for sharing your experiences with the engine. I know what you mean by the ecosystem doesn't feel quite like Ruby—you can't pull in gems from RubyGems.org (but there is a dependency tool called Smaug) and it's not as focused on OO as most Ruby is. But after I spent my first few weeks making games with it, I came to realize lack of a huge dependency tree is a benefit. The engine doesn't have strong opinions on how you code your games, but it gives the tools to do so in a more functional mindset than most Ruby code. The API is data-driven, meaning you can work with just hashes or arrays and methods and get really far with your projects. You can abstract away into classes and modules if you need to.
I think any type of 2D game is possible to build with the engine. But it's up to the community (and time) to make great games with it.
+ just wanna say I'm glad you dig Godot! There are so many game engines and libraries out there, and what matters most is finding one that fits your needs and style well. Because ultimately, what's most important, is that the game gets made, regardless of tech.