I've been playing for a while now, I've seen pretty much all the attempts at a usable water system that Notch has made, the infinite "flood everything" system, the "vanishing water" non infinite system, the "not really working" system and now the new "partial block" system.
I'd like to suggest a new, I believe better, system for handling water but first I'll point ouut what I think is good and bad about the current system:
Good
The system is completely predictable if a bit unintuitive at times.
There is little chance of an infinite scale flood.
Water can mostly be treated just like any other block for file storage purposes
It works!
Bad
Water does not obey gravity - Sure, water flows down hill, but it follows it own rule, not gravity.
It's nearly impossible to fill a large hole with water - Try it, dig a hole and fill it with water, it's not easy. This is somethine water is known for doing.
There is no challenge/threat form water - If you mess up and flood your mine, it's easy to fix, just plug the hole and the water drains away.
The current water setup is hard to expand - This is just an opinion but it seems things people want like pumps just don't work with the current set up.
My proposal:
Each block of water should have a "pressure". This can either be expressed with seperate blocks for each pressure level, by assigning each blocks a pressure attribute or with a map file for a water layer. My original Idea had values assigned to each block so I will use that as the basis.
Assign each block with a value for water pressure between 0 and 255. 0 implies air, 255 implies a solid such as cobblestone and any block with a value between between the 2 is water. To process water flow, look at each block in turn. Check it's pressure against every ajacent block, if the current block has 2 or more pressure greater than the block you are checking, then move 1 pressure to the lesser block.
The rules would continue to work after the last example, but the order in which they are processed will change the results.
Now, this only works on a 2D plain, to have the water work correctly we must extend to 3D. It is easy for going down, we simply need to apply the above rule to the block below the water with the difference that if the variance in pressure is 1, then water still flows. IE if the top block has pressure = 1 and the bottom block has pressure = 0 then the top will flow in to the bottom.
In this way we get a flow of water that flows in all directions an eventually settles into a "film" of 1 pressure water so how do we stop a kind of water based heat death as all the water spreads to coat the land? This can be handle in two seperate ways. The first is changing buckets. Now that we have a count of how much water is in a block we can use that to determine how much we put in a bucket and allow buckets to pick up any block. Then, dropping a bucket in to water would increase it's pressure. The second is to make blocks placed on water not delete it (perhaps with the exception of porous materials like sand) but rather push it aside, merging it back in to any adjacent water if posisble. This has the side effect of actually making water a serious imposition and something to gaurd against - no easy clean up if you drain an ocean in to your mine.
So we've seen how water flows sidewise and down, but what about up? It seems prepostorous but natural occuring geysers and springs are faily commonplace, so why not in minecraft? Now we have a pressure system for moving water, if we set a point, say 128, above which water will flow in to the block above otherwise following normal rules, then we suddenly have many interesting possibilities. Imagine a spring, waiting deep underground for some hapless miner to puncture and suddenly water bubbles up from below.
The final possibity that all this presents is the ability to add pumps. These blocks would decrease the pressure on all sides and raise the presure on top allowing a stream of water to pushed pushed from one location to another, even up hill!
So, that is the basic breakdown of my idea, I realise it is very long-winded but I'm looking for some feedback, can anyone see any really terrible points to this method?
This is amazing!!! That's got to be the best and most scientific/awesome way of doing water physics. I did a thread (viewtopic.php?f=1&t=25593) a day or two ago on the finer points of water, and this mechanic is exactly what I was trying to think of.
I think what makes sense from both a physics and gameplay mechanics perspective would be that if water flows a block down, that block will reset to the maximum pressure, and the water would not spread across from there until it's resting on a block surface again.
Also, would there be a way to make the efficiency water spreading based on what block it's resting on? In my thread, I basically suggested that water should flow more efficiently on less porous surfaces. A good mechanic would be to make that 1-1 spread work on the most efficient materials, while more porous materials would drop in efficiency and *lose* points of pressure straight into the ground, taking extra points from the higher pressure material while only gaining the 1.
But yeah otherwise, THIS IS AWESOME!!! You gain +10 internets and a PHD in Mathematics
The genral Idea blue is to keep a constant total amount of water pressure in the map. If a block increases in pressure when dropping rather than moving the pressure, it could be viable to accidently create a wicked flood. Imagine carrying a bucket up to the highest mountain and dropping it, messy. Far better to have a block that is in the air drop pressure downwards, losing it in the process. I would like to figure out a way to make deep water self pressurise though, that would be cool and make deep-water airlocks actually a challenge to make.
I like the idea of friction affecting flow speed, but keep in mind that that would mean defining a friciton variable for each block type and adding all sorts of extra checks ang processing for flow rates that could greatly increase processing time. Since we can expect the world to rapidly setlle to a stable state, I don't want water vanishing from friciton so all it would do is slow/speed up the rate of settling.
The genral Idea blue is to keep a constant total amount of water pressure in the map. If a block increases in pressure when dropping rather than moving the pressure, it could be viable to accidently create a wicked flood. Imagine carrying a bucket up to the highest mountain and dropping it, messy. Far better to have a block that is in the air drop pressure downwards, losing it in the process. I would like to figure out a way to make deep water self pressurise though, that would be cool and make deep-water airlocks actually a challenge to make.
I like the idea of friction affecting flow speed, but keep in mind that that would mean defining a friciton variable for each block type and adding all sorts of extra checks ang processing for flow rates that could greatly increase processing time. Since we can expect the world to rapidly setlle to a stable state, I don't want water vanishing from friciton so all it would do is slow/speed up the rate of settling.
Perhaps. But the only problem I see in your system is that it would limit the flow of water to a finite area, based on the highest possible pressure vale it'd recieve from a source. Would it not?
I don't think it'd be that big of a problem. You can achieve basically the same thing with the current water system; I've done it. And adding "friction" would make it harder to have massive water floods.
And adding "friction" would make it harder to have massive water floods.
That's actually one of his complaints about the current water system, it's too easy to use and it doesn't penalize players enough. Also as he said, adding that friction set of values would make everything lag like The Fist of the North Star
your system is that it would limit the flow of water to a finite area, based on the highest possible pressure vale it'd recieve from a source. Would it not?
True, the basic idea I had was that oceans/ppols would start at 128 perssure - the maximum without geysering. So while it could theoretically run out, the actual total surface area for say a 5X5 pool on a flatgrass map would be 3200 blocks, it's a much less finite coverage than the current system which would only extend 35 blocks in each cardinal direciton.
Of course you have the possibility of a drought occuring if someone goes around drying up oceans with sand (assuming the option exists), but I feel that is a social issue and not a problem inherrant in the system, generally water would be fairly difficult to destroy and that is the point. Water has been the bane of miners since humans first dug holes in the ground, with the way it is now, the stuff is little more than a nuisance.
Quote from spartacuscat »
I love it, this allows us to control the "direction" of the pressure so one can make aquaducts or as your post said gysers and stuff.
Thanks, that is what I mean by it being expandable, current water physics don't really allow this kind of thing because you can't form a chain of water flow, just a starting point. An aqueduct would be very possible, with a pump raising the water up a pipe and then a channel to let the water eventually flow back to the feeding lake.
say there is some sand/gravel with a "pressure" of 80 and some water has settled to a hefty 85 pressure, the water should push the sand/gravel away from it provided it has higher than 80 pressure beside the block.
So you get something like: (> Marks the end of a frame, and Materials are displayed with MaterialPressure.)
Frame 1: Water starts to settle.
Frame 2: The water pressure is equal to the sand.
Frame 3: The Water pushes the sand away because it has a higher pressure than the sand. quickly being occupied by 'Water1'.
Frame 4: The Water is so spread out the pressure is less than the sand so it stops pushing it. (Please note i didn't do the math on the last frame for the water spreading out so i marked it with a # that means its all even with its water neighbor.)
This will only happen with Gravel, Sand, and other materials that fall in mid-air.
Rollback Post to RevisionRollBack
Quote from boxturtle »
The hole the Creeper left in the earth is nothing compared to the hole it left in my heart.
@Amanra, that's one hell of a suggestion, not only that but it could screw with beaches considerably, specially premade ones on people's maps.
It would only really effect dams that are 1 block thick and made of sand, so i believe that a couple people could live with patching up their dams with a less failure-prone material.
Rollback Post to RevisionRollBack
Quote from boxturtle »
The hole the Creeper left in the earth is nothing compared to the hole it left in my heart.
That is a great suggestion amanra, and exactly the lines I was thinking along with the pressure system. I was also thinking breaking pressures for solid blocks like cloth and glass where the block would be naturally destroyed near high-pressure water. The expansion possibilites are quite huge, but I didn't want to overwhelm the basic idea with too much embelishment,
True, the basic idea I had was that oceans/ppols would start at 128 perssure - the maximum without geysering. So while it could theoretically run out, the actual total surface area for say a 5X5 pool on a flatgrass map would be 3200 blocks, it's a much less finite coverage than the current system which would only extend 35 blocks in each cardinal direciton.
Of course you have the possibility of a drought occuring if someone goes around drying up oceans with sand (assuming the option exists), but I feel that is a social issue and not a problem inherrant in the system, generally water would be fairly difficult to destroy and that is the point. Water has been the bane of miners since humans first dug holes in the ground, with the way it is now, the stuff is little more than a nuisance.
Yes, these are good points, though I question the amount of lag that would come from adding a simple feature to check what the ground's like. You already have to check the pressure in both tiles and then make a calculation for each time the water spreads, I don't think modifying the calculation based on another check would kill the system.
And I think that with this, it'd be integral to keep water springs as they are. Only run with my idea. Make it so that the player can't pick up and place water spawners, and they spawn into the map as oceans, lakes, and the sources of rivers (to be added into better map gen as per my suggestion as well.) That means that there's a constant source of water, but pressure would be calculuated in a strictly linear descending fashion from the source (i.e. the source would not keep boosting up the pressure of the stream as water spreads.) But, for that to work, it would require some way of re building up pressure along the water's course, else rivers and aqueducts would have an awkward maximum range. And so we come back to my suggestion.
But still, amazingly good work on this. It's a truly innovative idea.
That is a great suggestion amanra, and exactly the lines I was thinking along with the pressure system. I was also thinking breaking pressures for solid blocks like cloth and glass where the block would be naturally destroyed near high-pressure water. The expansion possibilites are quite huge, but I didn't want to overwhelm the basic idea with too much embelishment,
But, I know many people who are building awesome cities under the sea which happen to be encased by glass.....
D:
I'd be okay with sand and everything else but not glass! I've seen these cities myself and would not want them ruined!
That is a great suggestion amanra, and exactly the lines I was thinking along with the pressure system. I was also thinking breaking pressures for solid blocks like cloth and glass where the block would be naturally destroyed near high-pressure water. The expansion possibilites are quite huge, but I didn't want to overwhelm the basic idea with too much embelishment,
That would be amazing, although, for all those poor people who built a underwater city.... Welcome to Rapture...
Notch needs to see this thread, for real. Like seriously, somebody tell him about this thread.
Rollback Post to RevisionRollBack
Quote from boxturtle »
The hole the Creeper left in the earth is nothing compared to the hole it left in my heart.
Just got a little more depth into my last concept.
Please take note, this demonstration is viewed from the side.(^ Is the sky, < is your left,V is down, > is right.
If the water beside the sand is like this:
[]Air []
[]Air []
:Water:85 :sand:80
Then the water will push the sand unless there is something on top, ie: another sand block.
[]0 []0
[]0 :sand:80
:Water:85 :sand:90
Now the top has its stock pressure, but the bottom has the stock pressure + the weight of the upper block. In this demonstration the effect that gravity & the top block together is 10 which is enough to stop the water flow. (Barely.)
Rollback Post to RevisionRollBack
Quote from boxturtle »
The hole the Creeper left in the earth is nothing compared to the hole it left in my heart.
To post a comment, please login or register a new account.
I've been playing for a while now, I've seen pretty much all the attempts at a usable water system that Notch has made, the infinite "flood everything" system, the "vanishing water" non infinite system, the "not really working" system and now the new "partial block" system.
I'd like to suggest a new, I believe better, system for handling water but first I'll point ouut what I think is good and bad about the current system:
Good
The system is completely predictable if a bit unintuitive at times.
There is little chance of an infinite scale flood.
Water can mostly be treated just like any other block for file storage purposes
It works!
Bad
Water does not obey gravity - Sure, water flows down hill, but it follows it own rule, not gravity.
It's nearly impossible to fill a large hole with water - Try it, dig a hole and fill it with water, it's not easy. This is somethine water is known for doing.
There is no challenge/threat form water - If you mess up and flood your mine, it's easy to fix, just plug the hole and the water drains away.
The current water setup is hard to expand - This is just an opinion but it seems things people want like pumps just don't work with the current set up.
My proposal:
Each block of water should have a "pressure". This can either be expressed with seperate blocks for each pressure level, by assigning each blocks a pressure attribute or with a map file for a water layer. My original Idea had values assigned to each block so I will use that as the basis.
Assign each block with a value for water pressure between 0 and 255. 0 implies air, 255 implies a solid such as cobblestone and any block with a value between between the 2 is water. To process water flow, look at each block in turn. Check it's pressure against every ajacent block, if the current block has 2 or more pressure greater than the block you are checking, then move 1 pressure to the lesser block.
Picotrial:
The rules would continue to work after the last example, but the order in which they are processed will change the results.
Now, this only works on a 2D plain, to have the water work correctly we must extend to 3D. It is easy for going down, we simply need to apply the above rule to the block below the water with the difference that if the variance in pressure is 1, then water still flows. IE if the top block has pressure = 1 and the bottom block has pressure = 0 then the top will flow in to the bottom.
In this way we get a flow of water that flows in all directions an eventually settles into a "film" of 1 pressure water so how do we stop a kind of water based heat death as all the water spreads to coat the land? This can be handle in two seperate ways. The first is changing buckets. Now that we have a count of how much water is in a block we can use that to determine how much we put in a bucket and allow buckets to pick up any block. Then, dropping a bucket in to water would increase it's pressure. The second is to make blocks placed on water not delete it (perhaps with the exception of porous materials like sand) but rather push it aside, merging it back in to any adjacent water if posisble. This has the side effect of actually making water a serious imposition and something to gaurd against - no easy clean up if you drain an ocean in to your mine.
So we've seen how water flows sidewise and down, but what about up? It seems prepostorous but natural occuring geysers and springs are faily commonplace, so why not in minecraft? Now we have a pressure system for moving water, if we set a point, say 128, above which water will flow in to the block above otherwise following normal rules, then we suddenly have many interesting possibilities. Imagine a spring, waiting deep underground for some hapless miner to puncture and suddenly water bubbles up from below.
The final possibity that all this presents is the ability to add pumps. These blocks would decrease the pressure on all sides and raise the presure on top allowing a stream of water to pushed pushed from one location to another, even up hill!
So, that is the basic breakdown of my idea, I realise it is very long-winded but I'm looking for some feedback, can anyone see any really terrible points to this method?
I think what makes sense from both a physics and gameplay mechanics perspective would be that if water flows a block down, that block will reset to the maximum pressure, and the water would not spread across from there until it's resting on a block surface again.
Also, would there be a way to make the efficiency water spreading based on what block it's resting on? In my thread, I basically suggested that water should flow more efficiently on less porous surfaces. A good mechanic would be to make that 1-1 spread work on the most efficient materials, while more porous materials would drop in efficiency and *lose* points of pressure straight into the ground, taking extra points from the higher pressure material while only gaining the 1.
But yeah otherwise, THIS IS AWESOME!!! You gain +10 internets and a PHD in Mathematics
I like the idea of friction affecting flow speed, but keep in mind that that would mean defining a friciton variable for each block type and adding all sorts of extra checks ang processing for flow rates that could greatly increase processing time. Since we can expect the world to rapidly setlle to a stable state, I don't want water vanishing from friciton so all it would do is slow/speed up the rate of settling.
I love it, this allows us to control the "direction" of the pressure so one can make aquaducts or as your post said gysers and stuff.
This is awesome.
Wrap it, Stamp it, Kiss it, and Implement it.
I don't think it'd be that big of a problem. You can achieve basically the same thing with the current water system; I've done it. And adding "friction" would make it harder to have massive water floods.
Ohhhhh Notchyyy-
That's actually one of his complaints about the current water system, it's too easy to use and it doesn't penalize players enough. Also as he said, adding that friction set of values would make everything lag like The Fist of the North Star
True, the basic idea I had was that oceans/ppols would start at 128 perssure - the maximum without geysering. So while it could theoretically run out, the actual total surface area for say a 5X5 pool on a flatgrass map would be 3200 blocks, it's a much less finite coverage than the current system which would only extend 35 blocks in each cardinal direciton.
Of course you have the possibility of a drought occuring if someone goes around drying up oceans with sand (assuming the option exists), but I feel that is a social issue and not a problem inherrant in the system, generally water would be fairly difficult to destroy and that is the point. Water has been the bane of miners since humans first dug holes in the ground, with the way it is now, the stuff is little more than a nuisance.
Thanks, that is what I mean by it being expandable, current water physics don't really allow this kind of thing because you can't form a chain of water flow, just a starting point. An aqueduct would be very possible, with a pump raising the water up a pipe and then a channel to let the water eventually flow back to the feeding lake.
say there is some sand/gravel with a "pressure" of 80 and some water has settled to a hefty 85 pressure, the water should push the sand/gravel away from it provided it has higher than 80 pressure beside the block.
So you get something like: (> Marks the end of a frame, and Materials are displayed with MaterialPressure.)
:Water:75 :Water:75 :Water:75 :sand:80 > :Water:80 :Water:80 :Water:80 :sand:80 > :Water:85 :Water:85 :Water:84 :Water:1 :sand:80 > :Water:# :Water:# :Water:# :Water:# :sand:80 >
:Water:75 :Water:180 :Water:75 :sand:80 > :Water:80 :Water:140 :Water:80 :sand:80 > :Water:85 :Water:100 :Water:84 :Water:1 :sand:80 > :Water:# :Water:# :Water:# :Water:# :sand:80 >
:Water:75 :Water:75 :Water:75 :sand:80 > :Water:80 :Water:80 :Water:80 :sand:80 > :Water:85 :Water:85 :Water:84 :Water:1 :sand:80 > :Water:# :Water:# :Water:# :Water:# :sand:80 >
Frame 1: Water starts to settle.
Frame 2: The water pressure is equal to the sand.
Frame 3: The Water pushes the sand away because it has a higher pressure than the sand. quickly being occupied by 'Water1'.
Frame 4: The Water is so spread out the pressure is less than the sand so it stops pushing it. (Please note i didn't do the math on the last frame for the water spreading out so i marked it with a # that means its all even with its water neighbor.)
This will only happen with Gravel, Sand, and other materials that fall in mid-air.
It would only really effect dams that are 1 block thick and made of sand, so i believe that a couple people could live with patching up their dams with a less failure-prone material.
And I think that with this, it'd be integral to keep water springs as they are. Only run with my idea. Make it so that the player can't pick up and place water spawners, and they spawn into the map as oceans, lakes, and the sources of rivers (to be added into better map gen as per my suggestion as well.) That means that there's a constant source of water, but pressure would be calculuated in a strictly linear descending fashion from the source (i.e. the source would not keep boosting up the pressure of the stream as water spreads.) But, for that to work, it would require some way of re building up pressure along the water's course, else rivers and aqueducts would have an awkward maximum range. And so we come back to my suggestion.
But still, amazingly good work on this. It's a truly innovative idea.
But, I know many people who are building awesome cities under the sea which happen to be encased by glass.....
D:
I'd be okay with sand and everything else but not glass! I've seen these cities myself and would not want them ruined!
That would be amazing, although, for all those poor people who built a underwater city.... Welcome to Rapture...
Notch needs to see this thread, for real. Like seriously, somebody tell him about this thread.
And that's why I will not build an underwater city like some of my pals and people I know now...
Re-inforced glass anyone?
[] [] []
[]
[]
Sigh...
Well It's either working aquaducts or Rapture, I prefer aquaducts...
Gimme that reinforced glass please.
Please take note, this demonstration is viewed from the side.(^ Is the sky, < is your left,V is down, > is right.
If the water beside the sand is like this:
[]Air []
[]Air []
:Water:85 :sand:80
Then the water will push the sand unless there is something on top, ie: another sand block.
[]0 []0
[]0 :sand:80
:Water:85 :sand:90
Now the top has its stock pressure, but the bottom has the stock pressure + the weight of the upper block. In this demonstration the effect that gravity & the top block together is 10 which is enough to stop the water flow. (Barely.)