Roguelikes are defined by two key things: perma death and procgen. Permadeath is super simple to implement, but that’s not the case with procgen. There are thousands of ways, how you can implement it, and today we are going to look underhood of the Burning Knight engine (it’s called Lens, btw), and see what type of monsters live there.
Code & co
So I’ve been randomly making tweetcarts for the past 2 years, and I’ve been always obsessed with how much cool stuff people can fit into a single tweet! I see a lot of guys out there who try to start with tweetcarts but struggle with fitting their doodles into such a tiny size margin.
So here is a guide on how to do it, and a few tricks that I use myself.
But what are tweetcarts?
In case you didn’t see this magic yet: tweet carts are PICO-8 doodles, that fit into a single tweet. That means that each of those masterpieces is not longer than 280 chars (bytes).
If you’ve stuck with twitter for long enough, you remember, that tweet limitation on twitter was not always 280 chars. It all started out with just 140! So if you check out the early tweetcarts, they all are just a half of the modern ones, compared by the size!
Yay! This was a long-waited moment, but it finally happened! Burning Knight Steam page just went live (please wishlist!)!
Also, hey, I wasn’t sitting without a task for the last month, so here is a short list of things I’ve done, that are somewhat exciting:
- Breakable things!
- Breakable walls!
- Paintings (they are also breakable)!
- New enemies!
- Awesome level editor!
- Items are now defined in json!
- New procgen algs!
- Movement tech!
- New shadows
- New website! (https://burningknight.net/)
Trust me, there are so many not exciting things, that I had to cut from this list, just because… Well, they or wherein java edition, or just too boring.
So let’s dive into it, and have a closer look at all that cool stuff!
Somewhere in the drafts of this blog, I have an article, that explains all the flaws of Java 8 (and a bunch of other languages). It probably will never be released, cause it’s just a pile of boring (and sad) facts, but I will list some of them, to explain my actions, that I did.
- Has really old syntax, compared, to C# or any other more modern language.
- Packing an app requires or packing extra 100mb JVM, or having users to install JVM For example, Steam doesn’t ship JVM with it, and just overall packing .exe on Linux is a big pain.
- "Write once, run anywhere" is a lie Java won’t run on consoles, such as Nintendo Switch.
Might be enough already, but there is also the framework, that BurningKnight Java Edition works on – LibGDX. Overall, it’s a great library, but:
- What’s up with gamepad support? Hotplug works only with LWJGL3, but that crashes on MacOS, gamepad remappings for millions of existing gamepads? No, you gotta figure them all out yourself.
- Audio API is super limited Might seem minor, but all the juice, that comes from lowpass filter, writing notes to audio source on fly, and other, is just impossible.
So yeah. It’s all was piling on me for over a year now, and I’ve been dreaming of porting the whole game to C# for a while now. Burning Knight git repo has csharp branch, that is 7 months, but it didn’t really go far beyond rendering an animation of a mummy.
I’ve knew it was a huge project to port, and I was scared of it.
So around a month ago, I told you all, that January would be the month of bugfixes and forest area. Well, something went really differently… Here is what I’ve got done this month.
- Ancient Library area
- Forest Forest area
- Secret Laboratory area
- Womb Ruins area
- Frozen Ruins area
- Floating Island area is work in progress (renamed/retextured Creep area)
Burning Knight battles
That’s something, that I totally forgot to mention, but the game main focus is on the Burning Knight. And BK battle was pretty boring before, and he had the same attacks for all depths, but that’s not true now. I’m currently in progress of creating 16 attack sets, that BK will choose from to make the game more dynamic and interesting.
This topic might seem really unrelated to gamedev or me. But I’d argue, that programming is one of the core components of huge
mess thing, called game development. And I’ve been playing around with making programming languages for quite a while now, so I have a few things to say in this field.
We have a lot of amazing languages today, why imagine another one? Well, to start off, it’s a great exercise. Not to note that it also a really good topic for discussion, and I’ve been collecting my ideas for ages now.
Modern languages and syntax
So one day, I decided to open the source of all my PICO-8 carts. I threw away a lot of not finished carts, yet I still ended up with a big number of them. And I not only wanted to make the carts downloadable but also to make them previewable in the browser. The typical way to do that with PICO-8 is the following:
> LOAD cart.p8.png > EXPORT index.html
index.js, etc etc. But you know, even doing that with 20 carts will take quite some time.
The perspective of just throwing a cart into the directory near your script to automatically make it playable was too good.
Game jams are truly amazing. They force you to focus on making a game quick, focus on game core, and not polish. If you did not participate in one yet: what are you waiting for?
I’ve learned about game jams in the winter of 2016. It happened so to be that Ludum Dare 37 was around the corner. At that point, I finished just 1 small SDL2 game. And my mind was full with text roguelikes and Terraria, so I went with the toolset I was familiar with: Java and super slow library, that provided a simple way to render a text grid.