The 64th Gamer

:MinecraftGrass: Pneumagination Thoughts

Hello, now that I’m more comfortable with blogging posting on here, I wanna talk my current ideas with Pneumagination.

This game is in a very tricky phase where I’m having to balance scope creep with making a game that will last. From the beginning I had initially planned there to be static player and NPC maps- focused just on animatronics and some decorating. Then I thought about using Source Engine’s Brush system to let players have complete control over the look of their places.

This then brought in worry that if I don’t give players big enough maps to build on, it could restrict the game’s replayability once a player fills out their entire space. The current plan was to then give the player an infinite map where they could load into any tile on the game as a seperate level. The problem with this however is that players worlds would be completely disconnected, and visually you’d just be a single plot of land in a vast sky of nothingness. (Or another option of there being a layer of fog past the world boundary)

But since the game is focused on resource gathering, I’d already have to make pre-generated levels that the player would need to warp to and from. This is fine on its own but these areas would also feel entirely disconnected visually. And it made me wonder if these levels should be destructable like the player’s?

Basically- in my head this game is a fight between “do I just make it minecraft” or “do I sacrifice lots of systems to reduce technical complexity”. Best case for the game is I just make in Minecraft and have an infinite pre-generated world where the other locations to explore are generated structures. This would just completely halt all development though to focus on that. Maybe not for too long as I really don’t need to worry about optimization in this stage, but still a lot of hard questions to think about and plan and code.

I don’t think with my previous ideas that I’ve really hit that perfect balance of letting me control the default feel of the world, giving players the resources to build whatever they want, and also making it a GAME and not just literally the Hammer editor that you can walk around. In the end infinite randomly generated worlds are the only things that give you all three.

NOW, lets say I’ve implemented this infinite world system. One key thing is to make the world out of the Brushes the player uses- which have all vertices independently controllable which can lead to smooth ramps and hills. An important thing to ensure that the world does NOT look voxel-based is to have these brushes cover larger areas than just 1x1x1m. For example one large face of a mountain could be vertical ramps stretched really far out. It’d still look blocky when attempting to make curves or spherical sections- but more in just a low poly vibe.

First question is: “How is this generated?”. Probably make an initial blocky world generation that’s 2-8x the natural smallest block size and then use another layer of brushes to make large ramps and hills. The next is “How does breaking brushes of different sizes work?”. Check the volume of the mesh and make that its breaking speed. Players will also be able to manipulate the vertices and edges of each brush as they can their normal blocks. So far so good.

“How does resource gathering work?”. Ehhhhhhhhhhhhhhhhh that’s where its complicated and I’m not sure. When you wanna make Minecraft- you’re gonna have to now deal with the scope of Minecraft. The main resource gathering of decorations and techincal items is intrinsicly tied to guests/customers, but structure building is tied to mining and exploring other generated structures. I need to be able to fill the world with enough surface things to discourage players from pointlessly digging deep underground, though maybe some fun (non essential) rare things could be in the ground. Maybe also some nice stone types.

Its hard keeping the flow of this article in one piece but quick pivot to how resources work to explain my reasoning. When the player destroys a Brush, they pick up both the Brush “block”, and a sort of “texture/item” for all 6 of its faces. The player will have a permament slot that can hold infinite brushes- which is useful because if a player attempts to stretch a brush in a direction, they actually consume brushes to do that. If they break that single brush they stretched out 6 voxels, they’ll get 6 brushes back. These “texture” items though only need to go on a single face to consume one time. You could have a 1000x1000 brush face but still only need one “brick” item to plaster it with the brick texture.

One idea is definitely to let texture items be crafted together to make new ones. Players are gonna destroy a mountainside to build their store, and then have a bunch of grass/dirt/stone textures left over. Maybe the grass can be crafted with something into a straw texture to use for straw roofs/haybales. Dirt could be crafted into mud and mixed with stone to get bricks. Stone mixed with just dirt or grass could make a grassy/dirt + gravel path texture. ect. ect.

I think a tricky thing though is getting players the heavy essentials for interiors. Tiled slab floors, painted drywall, ceiling tiles, bare metal for roofs, glass for windows, concrete and asphault for raods. Once again theres a balance to be made here: discourage players going underground, don’t make these exclusive to just other generated structures (other stores, abandoned buildings ect.) because they’ll want a lot of it, but also make it reasonable enough to obtain from surface generation/crafting.

OK so next problem: generated structures. Most of these are gonna be currently running or abandoned buildings (depending on the direction of the game this might go 100% abandoned buildings). These are typically connected by roads- and are on flat surfaces. Roads can go up hills but cannot go too high nor attempt to curve around a hill. There’s also the case of having stores generate in proper clusters. If they all have different lot sizes and such- I have to make sure they do not overlap and properly connect to the road.

Ok so some solutions: Stores should generate in clusters inside a predetermined flat area, and then have their roads connect to other independent clusters that can freely go along hills and such. This is possible, but if its to be infinitely generatable- there may be roads that just end once they reach an impossible surface to generate on. I also don’t know how I’d code roads to not just be a straight line from one cluster to another and attempt to curve. This is complicated when you’re dealing with chunked terrain that can’t directly pull from other far away chunks.

I also could populate the world with independent abandoned stores that have no visible roads- but this does not overcome the hurdle of actually having to code the ones with roads. At minimum it can atleast give me a starting point for gathering resources before that code is figured out.

And again there’s lots of complications dealing with having a whole world to deal with. Water is a whole seperate thing idk what I’d do with. Maybe everything below sea level is just flooded and its not any sort of breakable brush or physics interaction. Could be an easy way to also discourage digging too deep without needing to steal the concept of bedrock.

Anyways, that’s my ramblings. Writing it down let me solidify these ideas better. I think I’m more confident now- but I still understand this is a massive massive undertaking to add to this already complicated game. I do think with this new vision though I can carve out a playable prototype much faster. I might have to completely rewrite everything from scratch though which would not be fun.

Oh also lastly, just like my previous post on RDIE, I think it’d be very funny to have the world stuck in eternal rain. I’m in love with beta Minecraft and its really extreme fog- and I definitely want that and a low render distance in this to have that same effect- but that’d double make sense if it was also always cloudy or rainy with no sunshine ever lol.