8 months ago - Sleipnir - Direct link
Heeeello!

I know it has taken way too long for me to post an update on the game, and I apologize. I've been working on a large amount of systems all at once, and it's taken a while for me to have all the moving parts working together. Let's dive into that, shall we.



Soundtrack by Matt Creamer Before I get into things, I just wanted to say that the Odd Realm soundtrack can now be purchased via the steam store page:

Soundtrack (Steam Page)

The amazing Matt Creamer created it and all the sales go straight to him. So, it would mean a lot if you guys supported his incredible work and went and bought a copy if you can.

World Generation Mega Upgrade This was the main reason I had to delay the update, and why it has taken me so long to post anything of substance.

To release the 1.0 version of Odd Realm, I knew I'd need to touch up the world generation tech. The version you are playing now is slow, difficult to tune, and outputs terrain that is passable, but not necessarily interesting. As well, the tiles have almost no situational awareness, meaning, they don't transition. I call this, "stitching." This is a huge feature to me because I want players to be able to go to other settlements with their settlers, and for the world to feel connected.

I knew that the longer I held off improving terrain generation, the harder it would be. The main issue with tuning terrain generation while a game is live, is that, as soon as you change these values, saved files are no longer backwards compatible. Loosely, this is all due to world generation being based on a seed number that uses those tuning values to output cool terrain. I won't get into the details, but, at a high level, that's what's happening.

Ok, cool, so what's what?

Well, I went ahead and improved those things. That's what. And--AND--it's all much faster.



Terrain Stitching


Take a look at this little gif above. We can see the Taiga biome blending with both the Ocean and Desert biomes. This is the stitching I mentioned. Tiles now incorporate their surrounding tiles into their own generation. This not only includes blocks, but flaura, fauna, and any exciting prop generation stuff that a biome has.



This gives players soooooo many more interesting options when choosing their settlement locations.

More Biome Variation A truckload of work has gone into how I generate terrain to avoid simply outputting hills. I've tried to create way more extremes of terrain. Plains are now way flatter, mountains have epic peaks, and oceans have deep trenches. This combined with stitching, produces tons of surprising results.



A tile that's on the edge of mountain range (like the above gif) will start to rise sharply up to meet that neighboring altitude.



Likewise, plains might sharply drop to meet the depths of the ocean.

Caves! I revamped the cave gen stuff too. Before I was generating caves by hand and, well, it was painful. You'll notice caves have more unique layouts, and are more common. They also vary as you go deeper into the earth.

Layers! 256 Layers! Worlds are now 256 levels instead of 128. This means way more underground stuff to find, and also more vertical space to build in, and have huge mountains in. Also, I'm sure you've noticed in these gifs that the minimap now shows you a cutout of the layer you're on. This applies to both the overworld map...



...and to the settlement map...



The two maps do vary, though. The overworld map preview shows you some subterranean hints to a certain depth. While the loaded settlement preview shows you exactly what you've discovered.



The new layer cutout is extremely helpful when navigating underground. Wish I had added this years ago.

General Improvements I've added a lot of functionality to the controls for navigating a map. You can now hold Q/E to move layers. You can also use the arrow keys to navigate between tiles. No more needing to click the tile on the overworld map. You can even use these arrow keys to load neighboring tiles from the settlement view.

Speed. The terrain gen is fast, so loading maps is very quick. This makes navigating around to neighboring tiles really easy and not a pain for players to wait on.

Simulation A big feature that I have wanted in the game is proper simulation. I want players to enter a tile and for time to have passed based on when they were there last. Did they leave their settlement for a year and come back? What happened?

This is almost as big of a change as the terrain gen stuff. The problem I had with Odd Realm's live version is that nothing is really simulated. A lot of it is just entities updating per frame, no concept of a timeline. I offload them once you leave the tile, and that's it.

Now, everything that can simulate will. And they'll do it based on elapsed time. What do I mean by this. Well, let's take a tree sapling as an example. When you load a new tile, the game looks at the terrain that's generated and collects all the simulated objects. It then looks at how much time has passed since you were last there. If you've never been to a tile, it will spit out a number of years to run the simulation. So far, I'm just using a year's worth of time for these new tiles (it's actually a range of time that varies for each object. Say, 0-1 year). I think I'll let players edit this. If you left a tile for a day and came back, it would simulate a day. We take that elapsed time, and then process our simulated tree sapling through it.

Here's a gif of me spawning an oak tree sapling and simulating it over a year's worth of time:



Wow, wow, wow. What's even happening here. Well, I've set up every object in the game to follow some rules. These are, "simulations rules." Trees, for example, follow a set of sim rules that say things like, "Spawn a tree branch if x, y, and z conditions are met." Then, the branch has its own rules that dictate, "Spawn some leaves if a, b, and c conditions are met." And, so on.

These simulation rules can be shared by any world object. Heck, water blocks could follow these same rules and produce a little water tree. Now, they have their own "liquid" simulation rules, but one can dream. You can start to see the possibility space for this sort of system.

Modding I've developed a bunch of tools for modders to create simulation rules. I needed these tools for myself to understand the systems, so it's a nice bonus that modders can use them too.



Above, you can see what the editor looks like. It's complicated to look at and I'll need to create a tutorial for all this, but it's extremely robust. You can edit the conditions, actions, and locations for a simulation, and each has a multitude of options, and I'm still adding more.

Notes About Performance and Simulation Accuracy Warning: this probably won't make sense and is mostly technical mumbo jumbo, but some of you might like these details. Idk.



The real problem with simulations is that they are costly over long periods of time. The way that I get around this is to sacrifice some accuracy to make sure the simulation doesn't take ages. Simulations use minutes (game minutes) to iterate through simulation rules. Imagine iterating through a year's worth of in-game minutes. That's 86400 minutes (in Odd Realm years lol) for just one simulated object. Multiply that by all the other objects we want to simulate. My computer would be a melted heap of slag by the end.

Ok, so, instead of iterating every minute, I iterate steps. And, this is something players will be able to tune if they want. Faster, less accurate simulations? Fewer steps! Slower, more accurate sims? More steps!

What's a step? Essentially, how many times I want to check our rules for an object each time we run a simulation. Keep in mind, a "simulation" is just processing an object's rules over x minutes. 5 steps per simulation? I'll check our rules 5 times. So, if 100 minutes have passed, each step will be 20 minutes of elapsed time to check rules against. We then use the amount of passed time (20 mins) to factor into the successful pass of certain conditions. For example, if you have a random chance to spawn something once every 100 minutes, well, we can reduce 100 by 20 to improve how likely it is to spawn. Or, if you want to simulate a condition in a specific age range, I'll check if that condition requirement is between the simulation step start and end times.

I could go on for ages about this new sim stuff, but that sounds absolutely dreadful to read. But, hopefully, that kind of makes sense. Not really important if it doesn't. That knowledge won't be required to play the game.

Final Thoughts When is the update coming out? It's not soon. All this stuff is still a big work in progress. I would say the most difficult stuff has passed, but now I'm working on the million smaller details for things. The good news is, this update is going to kick some serious ass. You just have to wait a bit longer for things to be completed. I've learned my lesson and am not going to say any timeframes here. All I can say is that I reaaaaaaally appreciate you all and your immense amount of patience with me. And, don't worry, it's not years out. I want all this stuff done too. I'm working like mad.

Thanks so much for reading this far, and for supporting the game. I'll definitely try to put out another post much sooner next time. Cheers!

8 months ago - /u/ - Direct link
A lil somethin somethin: You can find the details for this event on the announcement page here.