Pneumagination V0-10a
Pneumagination v0.10a is out!! This release was just supposed to fix the fact that surfaces and texture assignments wouldn’t account for blocks in other chunks- but then tons and tons of more stuff happened.
Performance
Basically there were some issues where I tried to fix blocks on borders, and it led me down a rabbit hole that eventually led to the game rendering the bare minimum of terrain brushes! Originally the border blocks of every single chunk in the entire render distance was rendered- including below ground, but now the game detects once you’re about to mine into a different chunk and updates all the neighbors!
Once again there were lots of stupid mistakes with this, but that led me to doing even more optimizations that basically led to fixing all performance issues so far! Apparently the performance hits came from: -A memory leak causing any fully-air chunks to never be discarded from the chunk list -Chunks would potentially get added to the chunk list multiple times upon completing the mesh -General lag from every single chunk border being rendered -90% crash rate upon bootup due to too many C# tasks being spun up. The game now ramps up amount of chunks that can be loaded at a time from start to the around 10 second mark. 0 crashes now. -Moving too quickly causing potentially the chunk loading tracker to not discard already finished chunks from this list.
Now the only performance hit that remains is destroying the first block on a chunk border that causes all neighboring chunks to render their borders. Eventually this should be replaced with directional border assignment so only the borders on both chunks that are connected are rendered. If you’re curious why I’m not linking brushes that share a border instead of the chunks themselves- I just don’t wanna deal with the billion nullreferenceexception errors that come with having chunks be aware of brushes in other chunks. Like I don’t want any of that mess. I’ll eventually have to deal with it with structures but that’s fine, I don’t wanna deal with these issues for every single possible chunk in the game.
Terrain
Also in this update- updated terrain generation! Lots and lots of it. The terrain only has 2 noise layers affecting height, but there are lots of shaper functions that ease from mountainous terrain to extreme flatlands. People now have the choice to build on nice flat terrain their cities, or have fun mountain builds.
Caves also now generate more reliably! You won’t find them in flatlands except for specific cases- but mountainous terrain will hold many more caverns. The farther you dig down (like really far), the more common and giant caves will be. Eventually though it’ll cutoff to infinite stone generation. If you’re curious- mountains will generate up to 600 “blocks” high, and caves to -1000. This will change over development as mechanics are solidified. Also the sky and fog will now darken as you dig deeper to compensate for light leakage from the SDFGI. Idk if I will stick with SDFGI but if it suits development fine enough I may keep it as the lower end option to a raytracer or pathtracer. For now it works extremely well for very minimal performance cost.
ALSO, DESERTS!!! Just wanted to spice up with some biomes for now. Note for later that I need to make the fog in deserts orange for a sandy look.
ROADS too!!!!!!!! This is the most exciting part for me. These will be where customers will spawn and walk around to visit your store. Roads generate infinitely along terrain, and will turn into gravel paths in deserts! I think roads are gonna be a great mechanic to keep players from getting lost. I’m generally someone who can find myself back home in any Minecraft world without a compass, but having roads means not everyone has to be thinking hard about where to go or where they’re at! I think it’ll highly encourage people to make signs at forks in the road- or have areas be named by their encompassing roads. Its already super fun just walking around and following wherever a road takes you.
Next Update
Next update should finally be on placing Brushes. No manipulating or anything- just placing normal blocks. Theres some refactoring I must do to get things working. Mainly is letting blocks (once they are manipulatable) be able to be stretched past the border of a chunk into another. I will have checks in place to have the center of gravity of a Brush determine which chunk its in, but saving these outside positions is important for letting people achieve really large single brushes. By my calculations the largest any brush can stretch will be just slightly over the size of a chunk. 86 units or 28.6 “blocks”.
Not sure what will come after that- whether I decide to just go ahead and get Brush manipulation working- or now that I can pillar up with blocks I go ahead and generate the Moon- Mars, and gravity flipping.
Plans
Onto writing down more plans. So, the general idea with the game was that you could collect items and use those to either decorate your store by placing them down or putting them on a shelf to be (infinitely) sold. At first I was thinking- lets say the example here is a toy- that placing down the item would place the toy itself. Placing it in a shelf however (the UI would be like a chest, you’ll put the item in the slot) would have the item display with a box to look fancy.
But what if the box was an item too? Lets say you craft a “cardboard box”, and then you can combine it with the toy to turn it into the boxed model. This way to can place the boxed version, and sell the non boxed version! I think selling non-boxed would be fun for places trying to look like second-hand sellers or thrift stores.
Maybe boxes though take a lot to craft though! So in the beginning you’re stuck with a lot of non-boxed items- and over time you can slowly upgrade everything. Maybe there’d be a boost in sales for upgrading- but there should also be some incentive to use non-boxes in certain scenarios so that is also viable. Now fast-food stuff is gonna be available as long as you have the right equipment, but maybe if you want to sell pre-packaged food in a normal store that’s completely locked off until you can obtain enough boxes. Fun ideas!
Next lets discuss water. I’ve been very aprehensive about its inclusion because water opens up the worst parts of how my Brush terrain works. The whole point of my terrain is there’s no way of knowing which Brushes are next to each-other because you can orient them in any manner imaginable. I get to cheat this during generation since the majority of the terrain itself is on a grid- but once player-made meshes are in it becomes impossible to do any sort of physics stuff.
Even if water was just a regular Brush without physics, this would make it extremely annoying to mine and replace with all the different slope types. The whole point of brushes too is that each side can have a different texture, so water would have to be this weird brush that you can’t apply textures to.
Better solution! Just like how I’m taking the idea of Brushes from Source, why don’t we make water a trigger volume! Now- at first this is the same thing I just said before- a brush with only one texture. BUT! These special water brushes would be able to have their vertices placed clipping through other brushes! This would let them be stretched to any arbitrary volume without needing to deal with filling in holes in any complex terrain.
Two slight things are of consequence of this- but I don’t think water is going to be integral to anything outside of it being nice for the landscape and a useful tool. First is that wherever I generate water as these giant volumes- these will likely clip into caves that run close to any lakes or oceans. That will just be a consequence of the fact there’s no water physics and I am okay with that nitpick. The second similar issue is that players who mine the giant water volumes (I’ll probably make it hard to do without a special tool) will now have a giant cube shaped hole in their lakes. Literally nothing I can do about that they’ll just have to try mining inconsequential areas where it wont look weird.
But what if this special volume type brush wasn’t limited to water? This could apply to particle effects- maybe lets say you’re near a volcano and there’s ash particles in the biome. Maybe these chunk-sized volumes can be mined (VERY special tool I’m talking here this is nuts), and allow the player to decorate any other area with it! They could have those ash particles now falling in their third bedroom of their house. (Same with other stuff like lava and fire itself)
Actually wasn’t the whole point of the different planets and aliens so you could obtain alien gear? That’s it- water and particle effects mining tool is a late game alien item. AND- being so late game and alien-obtained, I’ll let these volumes be controlled by the node system. BOOM!!!!!!!!!!!! You can make a lightswitch or a showtape flood your entire fucking building. Holy shit as I’m writing this this is such a fucking amazing idea. I’d definitely have fun making some super hard to find particle volumes like confetti or something. Maybe the gravity flipping in space is also a volume? Godot has nodes for it that literally work as volumes.
Okay now hear me out another interesting idea…. You are locked out of being able to sell any sort of cold item (Frozen-meals, ice cream, ect)- until you’re able to craft it with like snow particles from a snow biome….. Locking an entire type of pretty normal store behind super late game stuff…. Yeah I think I want my players to really work to open an ice cream shop.