Hey guys. Did a quick search to see what I could find and... nada.
Well basically I was wondering if water could be revisted, and how it functions physically in mincraft. As it is right now, a single block is the "source" and it flows away from that one block in (all?) directions for about 7 squares before stopping (unless it descends a level).
Well what I would like to see is this:
Water sources are instead found underground and flood in all available directions until either reaching the surface and flowing into the ocean, or until they flow into bedrock (Or maybe Lava? Evaporation?)
I feel the fact that water sources being able to be crammed into a bucket and then moved anywhere you like feels just a bit too OP. For example... creating a river by moving one block? Making a moat by filling a single bucket? These things just don't sit well.
Also, as far as water drainage goes, I was wondering if most blocks could be assigned a numerical value as to the volume of water that can be contained or flow through them. Meaning water would, instead of sitting ontop of soil, sink into it until it reaches it's maximum saturation and THEN pool on top of it. An object's saturation would increase as long as it is contact with a source of water until it reaches it's cap at a specific rate per minute or second (depending on how quickly we want the water to flow through blocks) until it's maximum saturation is met, in which case water would begin to pool ontop of the block and into the surrounding areas.
Soil's maximum water saturation = 6
Stone's maximum water saturation = 1
Plank's maximum water saturation = 2
Gravel's maximum water saturation = 8
Cobbelstone's maximum water saturation = 3
The maximum water volume, or maximum saturation of a block would determine not only how much water that block could hold, but also how quickly water moves through it. This would give the typical image of a dark cave with water dripping from the ceiling and pools of water on the ground, or a leaky wooden aqueduct compared to the more structurally intact stone one.
So now pouring a bucket of water out would function more like this:
Specific volume of water from bucket is poured onto the target square (Lets say for now that it's 10 units).
10 units of volume fill the square and immediately begin to saturate the block beneath it. Water begins to spread out and saturate more blocks, more rapidly dispersing as it seeps into the surrounding area.
I think this could do well for farming as well, as there could be ways to increase the difficulty of managing certain crops. Over saturation of soil could destroy a crop as well as under saturation, and getting the right level of water could be important to how well, or how quickly the crops grow.
In addition, similar mechanics could be implemented for Lava, in the sense that it originates from a certain area and then floods the surrounding area until it can no longer expand, or reaches an ocean. There would have to be some differences, however, because the viscosity of Lava means it would not be able to flow through most materials, but would instead risk igniting them or melting them. Perhaps lava could have a viscosity level if we want to get complicated. The hotter lava is, the more damage it deals and the more likely it is able to seep through blocks just like water does.
What does this mean?
The power to control rivers with just a bucket? Gone.
Possibility of slowly flooding caverns due to seepage from the soil above. Volcanos.
More dynamic crops.
Problems involved? Finding ways to ensure that volcanic activity or springs do not perpetually continue to flood the map making it too uninhabitable. The obvious results of this would be actual rivers, lava flows, lakes, etc. This might make boats more viable in places other than large lakes/oceans that the maps sometimes generate.
What would we need? To add a new value to blocks to determine their ability to contain certain amounts of water, and maybe a new animation for water as it "drips" out of a block.
Funny side-note: What if slimes used this same logic to ooze through certain materials?
I agree that it needs altered...but perhaps not as dramatically as this. I'd be happy if the water would just run farther. I do kinda dislike the idea that I can fill in a hole to make a lake by making water run into it though...
Well, this is great and all, but it's nothing new. Better water has certainly been suggested.
But there are three big problems with this algorithm:
1. it's memory and CPU intensive
2. It's SLOW as hell
3. It's non-local.
The current game works on 16x16x128 chunks of the world. The current water is based on pre-computations in each chunk. Having water to have infinite flow and perfect conservation would imply that you'd have to compute the behavior of way too many things over a way too large area.
Notch DOES want to revisit water eventually, but he has a bittersweet taste for the current water. In a way, it's easy, but in a way, it could be better. So he's probably considering alternatives, but don't keep your high hopes.
Quote from Notch on September 2010 »
As for features I've given up on, I'd say water and large monsters. Water as it is now kind of works, but it's far from perfect. Making it behave nice and run fast is starting to seem like an almost impossible problem.
Quote from Notch on September 2010 »
Yeah, I'm not sure if I'm ever going to fix the water system. Because it's a local model that way and I want to keep it that way.
Quote from Notch on September 2010 »
I won't say I'm happy with the current version [of water] but I think it kinda fits because you can use it, and that's good enough for now. But it's one of those things I'm probably going to rewrite later on.
Well to make water exist realistically, he's either going to have to create specific classifications of water for use upon map generation (naturally generated rivers, lakes, ponds, underground variants, and oceans) so that things at least APPEAR to be natural, or introduce a mechanic like mine that literally does mimic the way water moves around (excluding precipitation, which I thought might be too complex)
I understand that it would be complicated, but if you ask me... Two things that make simulating a world properly are the ground you stand on, and the water that shapes it (assuming we're simulating an earth-like scenario).
Also, would it really be that complicated and lag-inducing? It appears to me that having each block simply contain a single variable based on it's saturation wouldn't be THAT big of a deal, especially considering most saturated blocks would actually be stone, meaning the water would be moving very slowly.
Also... new addition:
Oversaturated sand = Quicksand? Sink in slowly and suffocate?
Saturated Lava = Hardened Lava? You can walk across it with varying degrees of damage?
So lets think of a few ways that could reduce server load?
There's a few ways I can think of on my own, at the moment:
1. Speed at which a block is saturated, reducing movement of the water.
2. Maximum saturation of blocks, also reducing movement of the water.
3. How saturation spreads from one block to the surround blocks (prioritizing blocks directly below it, or diffusing to blocks next to it as well)
4. Evaporation to limit the amount of water in a given map area.
Using these we can limit the spread of water, reducing the amount of blocks it will saturate, as well as how far it will spread.
Also depending on how "springs" are implemented, they could be naturally surrounded by harder materials (Stuff like Stone, that can contain much less water) upon generation of the map to limit large areas of saturated soil and how the water spreads.
Things like these would allow springs to "take the path of least resistance" (areas without blocks) more often so that they would more often reach the surface and create lakes, ponds, and rivers like they should.
Yeah, that would definitely work. But the main issue is performance. Coming up with naive algorithms that definitely work is usually pretty easy, but when they take a long time or space to run, some optimization is required. And that's the hard part.
I'd like to play around with these water algorithms someday.
I am not too bought on the idea of "water saturation" but I do wish water was changed so that it gets rid of having infinite sources of water and have more realistic physical properties.
I would make two suggestions: water conservation and modified water properties. Water conservation would be that there are a finite number of water blocks in any generated area (aka no water sources). A possible variation could include a water source block with an "ammo count".
To modify the properties of water in Minecraft, I suggest to treat each water block as sand; with an additional property to fill surrounding blocks that are lower than its own height--it could fill in gradients (1/8th height etc). In this way, water follows the rules of gravity and attempts to fill containers.
What do you all think? Water conservation could be used as a means to force players to explore for more water. Sources could occur in caves or in the wild as streams. In addition to food, there could be a water component to survival. Maps don't necessarily spawn less water, but rather that spawned water is all there is, no more is generated without moving to new generated portions of the world.