SamuKata
magmaguy
magmaguy

patreon


Mass dungeon update and EliteMobs 8.6.1 devlog

Hello everyone,

As always, it's been longer than I hoped it would be, and that is because the scope of the update went out of control again.

What follows is just a devlog and a consolidation of the information about what we've been doing and what we are working on next. It's a very long devlog. I may have gone overboard in explaining future plans.

First of all, you have probably noticed that EliteMobs 8.6.1 is now out and that virtually every dungeon has updated. This is because, while testing, and based on feedback from the admins and users, I came to realize that a rift had once again grown from between the last time we tweaked the combat and now, where the way we design encounters had evolved but the combat numbers had not kept up.

From a general standpoint, the mobs are now easier to kill. This is partly because several encounters felt too punishing if not nearly impossible when not moving as a group, but also to make powers stand out more in encounters. It is more interesting to derive the difficulty from the powers that a boss has instead of the boss just doing a lot of damage per hit, and having now lowered the baseline damage that they deal we can make encounters that should be easy actually easy, and we can make encounters that should be hard feel much harder by comparison.

Of note, the Oasis has come out with over 70 quests to complete, making it a type of content very similar to Primis, which I know is something quite a lot of people were looking forward to. It is not 100% finished, but we actually already have it 99.99% done and are just poking away at some details for a truly final release. The version that got released is only missing the final instanced dungeon, which is largely already finished.

Very late, but The Cave became a free dungeon, as was always planned. We are unfortunately very late on our story mode dungeons, but I actually am hoping to release 3 dungeons and 2 sanctums within the next month, on top of all of the other releases we've already done. This might be a bit optimistic though, due to some unforeseen circumstances, but we'll see how far we get.

A lot of feedback has rolled in for BetterStructures and ETD. BetterStructures will be my immediate focus, as there are a few issues in need of urgent fixing (namely spawning issues), and will then work on some low-hanging fruit in ETD.

Now, this is where I announce the next big thing I am working on and then you won't hear about me until the end of the year when I say it took longer than I had hoped. As much as I hope this is a fun joke, it sounds pretty plausible.

So, over the years, I've slowly added what feels like the majority of features people have requested. Not every feature, of course, but the plugins I made are honestly quite big in scope for a reason.

One thing that people have asked for, and that sounds obvious but isn't, is procedurally generated builds. This is as true of a request for EliteMobs as it is for BetterStructures. People either want instanced dungeons that act like something out of Diablo, or builds that assemble themselves like Minecraft's abandoned mineshafts or mansions.

So, in my mind, the plan for EliteMobs was always going to be elites -> custom bosses -> events -> dungeons -> instanced dungeons -> procedural instanced dungeons, with the last one actually representing the last feature I ever wanted to add to EliteMobs. The goal was made to be hilariously ambitious, something I would surely never reach - except, well, it's actually rather close at this point, and something that wouldn't even take that long to make if I was to rush it.

Now, I could rush and, and I'm going to be honest - they would still be a lot of fun to do, and no one would really think to criticize it too much, they would just be a fun little thing to do for a while, though ultimately with enough passes through the tilesets people would eventually feel done with it (which really is only natural of any game).

However, in the background, I've kept looking around at cool generative systems, and one really caught my attention: wave function collapse.

Fair warning: I am going to go very in-depth about this topic here, so feel free to skip to the end if that doesn't interest you.

Here is a quick demonstration of what these can do: 

https://youtu.be/bHr-A2r9N9s?si=Vr0S2xxBxsBiJQB- 

I recommend you take a minute to look at it so you can try to understand why this has gotten me so inspired.

In its simplest form, wave function collapse is a very simple idea: you make a module (like a room in a build, or a piece of road), and then in the code you tell the code to pick from a list of valid modules that can be next to that module. This seems like a simple concept, until you start getting into multiple modules having different sets of rules for what can be adjacent to them. This means two things: firstly that the system has to be able to undo decisions in order to pick a configuration that is valid, and secondly that the system is actually able to "solve" a setup where you put a start and end point, or put modules in specific places but don't specify where they go.

The reason why I find this to be an incredibly fun idea is just the kind of amazing structures that this system is able to come up with. Infinite cities where no two points look alike, "natural" self-assembling indoor spaces and roads, endless mazes that both make no sense in the total scale of the construction but that make perfect sense on a more localized scale.

The generation can be tweaked to create a structure between two points, or to just endlessly keep generating, and anything in between.

However, this seemingly simple system is actually devilishly hard to actually implement.

The basics of it are easy enough to figure out, if not computationally expensive.

However, the thing that kills it is actually making modules for it, due to the growing complexity.

In minecraft, you can go north, south, east, west, up and down - 6 sides.

Each side needs to hold a list of what that side can have - you can't have air under certain second floor modules. You can't have ground in the middle of the air. You can't have a door that leads to a wall. So, for every module, you write the list of modules that can go next to it.

Now, the plot thickens. If we make - when we make - 500 different modules, we are potentially talking about making 6 lists of modules that contain up to 500 different modules each, and doing that 500 times. That's 1,500,000 elements written into lists. That's absolutely not happening. Even if in real use we only have a fraction of that written into lists, a fraction of 1.5 million is still a number of entries no human person wants to write, read or debug.

I have considered several solutions, and one stands out above the rest. The idea would be to instead of having the wave collapse function act as the entirety of our generator, it could act as a very generic assembler. It would simply tag a spot as floor, or air, or a wall, or indoors, or stairs (there would probably be a lot more but you get the idea) and then a secondary algorithm could read the space that the first generator envisioned and basically picked from a pool of options whichever ones could fit there and then randomized one.

To give you an example, let's imagine that the wave collapse function comes up with a space where there are 4 indoor spaces adjacent to each other. Once that is determined, the second algorithm would read the spaces, realize that they are adjacent and read from the list of tiles that are indoors and adjacent in the same configuration, create a pool of them and then randomize selections for that spot.

This is not without challenge. There are many questions to ask, such as where the responsibility for filling in walls lies, how do I make sure that every indoor space is actually accessible and not just walled in from all sides or in a closed loop, how do I wrangle this system such that even if I am using the same generic assembler for every tileset the builds come out looking themed in significantly different ways and so on. Optimizing this is also no joke, and there is a strong possibility that this will be something you "bake" or in other words pregenerate into a world and then can't really explore beyond what was pregenerated because it just takes a very long time for potentially thousands of modules to resolve all of their adjacency requirements.

It is also something I've been poking at in a couple of livestreams while I was working on Godot on this very concept.

Speaking of, and moving on from this, I have also been spending my time trying to learn game engines properly, which brings me to the Unity debacle. Two days ago, Unity changed its pricing structure. Four days ago, I had switched to Unity (again) because I came to the conclusion that Godot was just not going to work out for me.

For those unaware, Unity just changed their pricing structure, and did so in a way that very seriously risks bankrupting game studios, especially relatively small indie game studios that are barely breaking even. They will now charge game developers -$0.20 every time someone installs their Unity game. Every time. Installed it once and installed it again after upgrading your PC? That's another -$0.20. Bought a console and installed it there? That's another -$0.20. Unity tracking is bad and you just reinstalled it after a long time? That's another -$0.20. Pirated the game? -$0.20. People hate you and want to review bomb you? Get a VM, install the game 1000 times, make a dev lose -$200. Script it to run continuously, have fun bankrupting a dev.

Also, it does get funnier. Game demo? $-0.20. Free weekend? You're bankrupt. Free game with razor thin margins? You're super bankrupt.

Now, I am fortunate in that I ultimately had given up on Unity because I had no faith in their CEO, a former EA executive who very openly thinks game developers are idiots, and says so in public interviews. I am, however, unfortunate in that this is the game engine I learned, alongside with Godot.

In case you don't know Godot, you're probably about to start hearing a lot about it. It's a really cool project - free, open source, doesn't charge for anything. But it's free, open source and makes basically no money, which shows in the quality of the engine.

Shockingly enough, I would argue that Godot's UI is the sleekest out of any game engine I've tried, no contest. It's intuitive, it's fast and it's responsive in ways other engines dream they were. Their documentation is also usually top notch, and leaps and bounds beyond any official Unity documentation.

But the reality is that the 3d capabilities of Godot just don't stack up against Unity, let alone Unreal. It's basic, it's clunky, it's buggy even on the machine I'm developing on, and I shudder to think what would happen if I tried to port it to just about anywhere. It may be an amazing option 5 years from now, but I need something I can work on today.

So, while the time I spent learning these engines isn't exactly wasted as many concepts are replicated in some way across all of them, it is unfortunate that it is the engine I have spent only a few minutes looking at which will ultimately probably be the one I end up using.

Using for what, you may ask? I've mentioned it a number of times before - I want to turn ETD into a simple-ish standalone game. I think it could be a lot of fun, a great learning experience and a way for me to work on something that isn't entirely Minecraft now and then. Obviously, I am not stepping away from Minecraft - nowadays it pays my bills, the bills of our team and plus it's great fun to do - but Minecraft is not eternal (well, at least probably not) and I would like to develop the skills required to work on my own titles. Also, the freedom to actually just make assets and not be limited by Minecraft mechanics is fantastic.

I have some things planned for ETD while or before I work on the procedural generation system, specifically to document the plugin, create a making of video and promote the plugin a bit - it's a really fun experience and it deserves some visibility and a real launch, not the soft launch I gave it.

As for EliteMobs, I mentioned at the start that we have some 5 pieces of dungeon content already cooking, plus the Primis release and a final Oasis update. Frostcone has also started working on the arena that goes from level 100-150, and Dali has begun working on the last part of chapter 1 of the story-mode dungeons. If/when I figure out this procedural generation thing, I will be releasing it with features that both BetterStructures and EliteMobs will benefit from. Right now I am planning to make this a new feature within BetterStructures, but if it reveals itself to become too large of a beast, I may split it into a separate plugin, which might be wiser.

Oh! And I almost forgot! I will be working on FreeMinecraftModels quite a bit as well. I bet you even forgot I made that! I am adding basic usability features to it which I believe will seriously boost its popularity, and depending on how inspired I am I might even try to start working on animation rotations, which will eventually lead to it replacing ModelEngine entirely. At the very least I plan to release the first model pack with that update! We'll see how it goes, this is a lot of plans and not an infinite amount of time to work on them!

Also, youtube. I am two months late but I will finally get around to making the guides, showcases, trailers and devlogs I've been meaning to make.

Anyhow, I hope you guys are satisfied with the releases and the many, many plans for the future. 

I know I keep saying it, but I think I am at the point where I want to sit down and formalize this within our team. I want to force more frequent releases. With 8.6.1, EliteMobs celebrated its 100th release. Which is actually... very little. If we were to count dev builds, we would probably be closer to 500 releases. And my dev builds are chunky. I usually have to break the changes up into different discord posts because I keep hitting the discord character limit, even with Nitro.

I think that what needs to happen is that I need to pick a day of the week and just do releases on that day, every week. It's a really bad habit of mine that I try to make every single release a release that fixes absolutely everything and implements several large new systems or reworks every time. I end up hoarding fixing for weeks or months. People get tired of having issues, or lose interest due to a lack of releases. It's just bad overall, and I think fixing this, more than anything else, is going to be my focus for the rest of the year. Let's call it Monday. I'll do releases on Mondays, every Monday.

In closing, I'll also mention it's my birthday so we're doing our yearly birthday sale on itch! you can get everything at a big discount here if you're interested: https://itch.io/s/102962/happy-birthday-magmaguy 

That's it, I need to get some sleep.

Happy adventuring,

- MagmaGuy

Comments

Considering how many things are on the table, there certainly is a pretty good chance that some kind of vote for direction will be going up, possibly before the end of the month.

MagmaGuy

oh, and thanks for the update! I do enjoy reading stuff like this and think things are going great for you guys!

jam k

Models! Models! Models! If you were taking votes or feedbacks, that is where i would put my opinion. meg is fine, but it was created by someone who used it as a project to learn java with. and there is nothing wrong with that, but it could use some competition. : )

jam k


More Creators