Rexcellent Games - Egor Dorichev makes games and writes about that

Rexcellent Games

Egor Dorichev makes games and writes about that

Showcasing Burning Knight for the first time

Hi, Egor here.

So a few months ago, I got invited to a game conference in Moscow, called White Nights. I’ve never been to a gamecon before, so I got really excited and started preparing my game, Burning Knight, for the showcase section. At first, 1.5 months looked like a huge time frame to get the game ready, but it flew by so fast…

Preparation

When I develop games, I tend to focus on the gameplay aspect more, than on menus and other UI. I knew BK interface was pretty rough, so it was of the biggest things I had to focus on.

The game also had almost no SFX, and since I don’t have a sound designer, I’ve bought Zoom h1n recorder, and spend a few days just running around my house and pocking everything, that I saw. It was a lot of fun, but editing the recordings, adjusting them and picking the right ones takes a lot of time, so I simply picked the most important ones and left the rest of the work for later.

Side note: Github Actions

I’m not sure, how I’ve managed to ignore CI’s for so long. A few months ago, Github rolled out their new CI: Actions, and I’ve signed up for the beta… and did nothing. Until a friend of mine saw me building the game by hand, and helped me to setup Github to build the game for me. It wasn’t easy, debugging Windows scripts on a virtual VM, that gets reset every time, is not easy, especially if you are a Linux user… But I’ve managed to get it done.

I can’t imagine making games without CI anymore. Being able just to merge your commits into the release branch and then press a single button in Steam to publish a new game update… It’s a feeling, that I can’t describe. I really recommend you taking at least a glance at the world of CI.

Playtesting

After I rewrote the game in C#, I didn’t do any playtests what so ever, because I never felt, that the build "was ready enough". But I have to say, having a deadline helped me a lot, but I only managed to finish a playable build 3 days before I had to go. I wish I started collecting feedback on the build earlier…

So anyway, first playtesting round went really well, but it was just my friends playing the game, and not real players destroying testing it. They liked the game a lot, found a few minor bugs, but that’s about it. So I’ve quickly patched the bugs, and the fun of real playtesting begun on the next day…

I’ve dropped the build at my Discord server. It isn’t big, even tho, it’s more than 1.5 years old at this point, but it was just enough, to totally destroy the game. Every tiny glitch, that I thought no one would notice, was reported. So many exploits were found. And they also went data mining into the game assets folder… But it was a lot of fun, both for them and for me. And I also had a huge list of things to fix and change, and I had just 1 day left to do it.

Playtest your games early.

It’s time to go

Late in the evening, I was coding something, and then I’ve noticed, that my laptop’s power supply died. Just a few hours before my train to Moscow. And that was the only laptop I had. And I still had to go and pick up the posters and business cards I’ve ordered. All shops, that I found online, closed by that point, and I had no replacement. Thankfully, I found a matching power supply in my house, that had a slightly different plug. So I combined both wires with some soldering, and it started working again.

I had just enough time to pick up my business cards and leave.

The Conference

As I’ve said, it was my first ever gamecon, so I was excited, when I saw all the game booths and the huge hall, that it was all inside. I have to admit, sitting in one spot for 2 days is pretty boring, so I’ve spent most of my time away from my stand.


Burning Knight booth

The conference was mostly about mobile games and all the business around them, but there were plenty of PC games too.

Sadly, not so many gamers were around. And overall, I got max 20 people to play the game in 2 days, and that was pretty disappointing. But. Big but here. Almost everyone, who came and played the game, stayed around for a few hours, and I’ve gathered yet another huge list of bugs, changes and ideas. The game proved to be a bit hard for the most players, but taking that it was a mostly mobile conference, I did not worry about that too much.

My favorite thing to do was to pretend I’m not the developer, by standing somewhere nearby, wait till someone came to play, and then watch the reaction 😀

What’s next

The feedback received doing the conference motivated me to do a lot more playtesting, and with the new CI system, it’s so easy, since I use git anyway. So if you, by any chance, want to help me with testing the game, hop onto my Discord server 🙂

Since the conference, I’ve showcased the game in a bunch of other smaller events, and this cycle of constantly fixing/adding stuff and then seeing, how the feedback changes feels really good. And it’s great for the game.

Start to playtest your game as soon as you can. It really helps.
Egor.

Steam killed my traffic

Rip my traffic

Hi. I’m a fellow indie developer, who tries to put a word about his game out into the world. And before this September, Steam was by far the most influential platform for me. It allowed me to show my game to thousands of players…

But now it’s over. Steam killed my traffic.

Continue reading →

Burning Knight: the roadmap (part 2)

Hey guys, Egor here.

Remember that post from December 2018, where I talked about development plans for Burning Knight? Well, I was right about one thing for sure: the development did not go according to the plan… So let’s talk about this.

Continue reading →

Procgen in Burning Knight

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.

Popular methods of generating a dungeon layout

Cellular automate

Cellular automate based dungeon
Source was not found, but the gif is too good

Cellular automate algorithms allow you to generate cave-like worlds with really little code.
You create a grid of "cells" (that are usually just booleans, because they have can be only dead or alive), and randomize it.
Then you do a few passes over the whole grid, applying some simple rules over it. In most cases, its all about calculating how many alive neighbor cells does a cell have, and deciding based on that should it live or die.

To be or not to be…

If you want to learn more about this method, I recommend reading this article.

Continue reading →

Guide on minifying tweetcarts

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 is tweetcart?

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).

Tweetjam first started in 2016 on the PICO-8 forums, but quickly moved over to tweetjam hashtag on twitter.

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!

Continue reading →

My experience with Dear ImGui and thoughts about boring UI

What is ImGui?

ImGui is yet another a small C++ UI library.
What makes it different from most other UI libraries, tho, is the way you define
widgets with it. Let’s take a look at a basic example: I want a button, that logs something
to console when pressed. Usual UI libraries would request you to do something like this:

static UiButton* button;

void initGame() {
    button = Ui::getContext()->createButton("Click me!");
    button.sayOnClick("Thanks <3");
}

void updateGame(float dt) {
    button.update(dt);
}

void renderGame() {
    button.render();
}

And here is the ImGui variant:

void renderGame() {
    if (ImGui::Button("Click me!")) {
        std::cout << "Thanks <3\n";
    }
}

Live demo, might take some time to load

I think you see, why this is so handy for prototyping UI really fast. And the API obviously doesn’t end
with buttons. ImGui features context menus, windows, sliders, text inputs, tags, and much more
than you can probably think of. And that all still in this simple form, bloat free (without having to store anything anywhere).

Really neat!

Continue reading →

Burning Knight is now on Steam: Wishlist!

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/)
  • Teasers!

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!

Continue reading →

Porting 60k line Java code base to C#, or a story about mistakes of the past

Preface

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.
So, Java:

  • 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.

Continue reading →

Areas, boss battles and January overall

Burning Knight

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.

New areas

  • 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.

Continue reading →

My thoughts on language design

Preface

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.

Motivation

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

I really like C-family programming languages. Especially I like C#, Java, and JavaScript. C# is one of the most modern languages out there, yet I still see a bunch of space for improvement.

Continue reading →