Porkbrick Posted October 15, 2024 Report Posted October 15, 2024 Just throwing down an idea I’ve been thinking about. Water source blocks shouldn’t be moveable. What if lakes, ponds, and springs were all water sources, you can take water from them, but placing water wouldn’t result in a permanent source. Extent the distance water flows horizontally so that digging irrigation canals and aqueducts would be a practical way of getting water to where you need it. Could even adjust to flow distance based on the block below. Sand and gravel would flow the least distance while stone and wood would go really far. Possibly having water source blocks propagate similar to mine craft. If you enlarged a pond, it would propagate to fill up to, but not necessarily above the surface level. Only 3 wide could propagate. Maybe too easily abused, but could offer a way to make large scale aqueducts and canals. It would be fun to be able to craft flumes, pipes, and pumps. Windmill pumps! something like a rawhide/pelt waterskin might be nice for early game water movement. No idea if it’s practical or not, but could be cool. if rivers are ever implemented, I would be really interesting to explore an erosion mechanic. Erosion could be tied to flowing water, and maybe even rain. Your dirt hut would eventually wash away in the rain if you didn’t put a roof on it! cheers 2
Porkbrick Posted October 15, 2024 Author Report Posted October 15, 2024 Another thought on the erosion idea: untilled soil next to moving water could turn into muddy gravel. Could then have muddy gravel turn into gravel or sand. Soil next to still water would stop at muddy gravel. Moving water could also affect soil stability. Banks 2 or more blocks tall next to flowing water would destabilize.
Maelstrom Posted October 17, 2024 Report Posted October 17, 2024 So the "how can I abuse this" part of my brain jolted into hyperdrive... Dig a canal to transport water from the nearest water source to where I want my farm to be. Then dig out a large enough area so source blocks start spawning (may have to do this a couple of times if my farm is too far from the water source). Finish off by filling in newly created pond/lake to be my farm with the single water block surrounded by farmland configuration. In the end I get the same result as we can achieve currently but with a bunch more frustrating work. Roadmap indicates rivers and water wheels are desired for the end game. I suspect that river generation and more importantly, flowing water mechanics are the hold up on this.
Brady_The Posted October 17, 2024 Report Posted October 17, 2024 (edited) Water could have some very exciting mechanics. Particularly moving water with manmade structures. Aqueducts, furrows and overhead irrigation like in Primitive Survival, Waterwheels like in Medieval Expansion, and all sorts of other contraptions. Water locks would be fantastic, particularly with the upcoming boat in mind. Propagation, floodings, high and low tide, holes filling up from rain fall would be awesome, but all of those mechanics would most likely require some serious computing power. 1.20 will actually add the option to Homo Sapiens and Wilderness Survival to disable the creation of water source blocks with a bucket. Edited October 17, 2024 by Brady_The 1
Porkbrick Posted October 17, 2024 Author Report Posted October 17, 2024 There are two main motives for me with this idea. One is a little more “realism” with how water works real world. And the other is just thinking of ways to model water behavior so that it interacts well with mechanical systems. On the first one, being able to spawn infinite water once you’ve got a bucket is a little too easy and doesn’t really fit with the other aspects of the game that try to stay closer to reality (but obviously only to a point). Having to dig a canal is kind of the point as far as that goes. I don’t know if propagating source blocks is the best way to go about it, but the other realism breaking mechanic that bothers me is having random flowing water surrounded by full water blocks. It should somehow fill back up when you remove blocks. Maybe some other way would work. Maybe water source blocks and “full” water blocks could be separate objects. Lakes, ponds, rivers, etc could all have “springs” feeding them, so digging a canal would fill with water by as soon as it gets cut off from the source it would go dry. the second motive, interaction with mechanical systems, just aims to make water power balanced in some way. It would strike me as a little too easy if you could just build a mill wherever and bucket down some water to make it work. I would rather the player have to consider the location based on the location of the water sources. with boats coming with 1.20 I don’t look forward to manually filling canals if I want to connect lakes etc. I think having the option to toggle bucket source block on and of would definitely need to be an option. I don’t want to force anyone to dig irrigation ditches who doesn’t want to! 1
Thorfinn Posted October 17, 2024 Report Posted October 17, 2024 (edited) 2 hours ago, Porkbrick said: I think having the option to toggle bucket source block on and of would definitely need to be an option. Good thing it already is, then. "Off" is even the default in Wilderness Survival. Edited October 17, 2024 by Thorfinn 1
Porkbrick Posted October 19, 2024 Author Report Posted October 19, 2024 Maybe this is too much, but just trying to distill this down Water spawns only from “spring” meta blocks. They are unbreakable and immovable. As long as the bottom or a side is unobstructed they will continuously spawn water. The do not spawn water from the upper face. They cannot be destroyed by placing a block in them. Spawners will not spawn water above their own level. At spawn, all bodies of water generate with one or more spawn block somewhere in them, at least one of which will spawn at the surface water level and always next to a solid block (no spawners in the middle of the water column). Rivers/streams would spawn with one or more springs as their source. Water behavior. An exposed spring block will propagate flowing water outwards in any open direction until it reaches the flow distance limit, flows over an edge or hits a solid block face or still water block. If it flows over an edge it will reset flow distance and continue, like vanilla does now. If it hits a solid block face it will become a full still water block. This transformation will propagate back towards the source of the flow. If the propagation reaches the spring block it will stop. If there is no path for the water to flow out of a body of water, the entire body of water should be still water blocks. As long as there is at least one open space somewhere at or below the spring level there should be a path of moving water from the spring to the outlet opening. If the still water propagation leads back to a flowing water block above its level, and there are not other flowing water blocks in the body of water, then flowing water will start to propagate at the next block level up. This propagation back and forth will continue until the water flows over an edge. If at any point a still water block is not connected in an uninterrupted line to a spring, it will dissipate (the rate at which it dissipates can be based on a simple timer or tied to other factors like rainfall, substrate, temperature, etc.). Water propagation and basin filling continues all the way to sea level. At sea level some mechanism stops horizontal flowing from propagation above saltwater blocks. That way water can flow into the ocean, but it will never raise the surface level, or cause any odd water mounds or flowing water on top of sea water. Yes this probably leads to computing nightmares, but I don’t care. Just trying figure out the mechanics first. Interactions: gravel sand and mud don’t count as solid blocks in this system as far as water goes. These blocks will waterlog and flowing water will pass through them. Optionally they could waterlog but water could only flow through a limited number of contiguous blocks(maybe only one or two). That would prevent whole deserts from becoming waterlogged. Waterlogged mud, sand and gravel would allow for the possible creation of aquifers and swamps with minimal spring blocks. Waterlogging could also make for some fun with peat. A live peat moss block would be neat. It can propagate waterlogged infinitely from one to the other but would not allow flowing water to pass through. That could make for a peat bog to be a thing. Water flow distance over block could vary based on material. Sand and gravel have the shortest flow distance, followed by mud and soil. Rock and wood have the longest flow distance by a lot. This allows for stone aqueducts and craft-able wood troughs and flumes. Craft-able ceramic and metal water pipes. Axe and logs to make wood water troughs. Pumps (wind, water). Dowsing sticks for finding underground water sources? Things that need to be worked out: Obviously it would be not good to have a bunch of water propagating and path finding from scratch on world gen or as chunks load. Somehow it would need to be fully calculated out during world gen. Either all the spring blocks would need to be contained (so only lakes and ponds like vanilla generation is now) so there is no flowing water, or streams and rivers would need to be pre calculated and pre-filled before hand. That way you don’t spawn into a map where half the valleys are filling up with water and eating up your frame rates. How would large areas fill? If the water behaved like I described above, I think that if caused water to start flowing into a basin it would fill the basin as long as there wasn’t a flat stretch of ground exceeding the surface flow distance. If say water is set to only flow 8 blocks horizontally then any basin with a flat area wider than that would stop filling at that point. Otherwise would continue to fill until it overflowed somewhere. Any body of water with an inflow and an outflow would have a channel of moving water leading between them. Saturated blocks could be used to stop flowing water and prevent basins from filling and overflowing? I’m not sure about this one. I think it would be good if there was a way to stop a basin from overflowing, but maybe placing gravel anywhere along the edge is too simple? Digging a canal the irrigate farmland should end up flooding the entire valley. again: I have no clue how any of this would be programmed, or if it’s even possible In a way that doesn’t eat too much processing. Just fun. To think about. Cheers! 2
Minj Posted October 20, 2024 Report Posted October 20, 2024 Some time ago I was thinking about how some water physics could be implemented into VS. In an ideal conditions we should be able to do two major things with water: fill an area (transport canal, irrigation canals, decorative ponds) with water, and drain water from an area that we want to be dry. Here is a crude idea of how it could be done: Water blocks are not able to create adjacent source blocks if required conditions are not met. Single water blocks that are required by world gen for waterfalls to exist are also unable to create new water blocks, even if another water block is placed near them, but water from them behaves as normal and lore-friendly explanation to that is: small mountain water source is not enough to fill any reservoirs; water from such source flows for a while and than it soaks into the ground and the rest evaporates) For water to be able to create adjacent water blocks it has to have large enough volume. It could be determined by dimensions (e.g. 12x12x3) or by block count (e.g. 864 adjacent blocks of water). Also in case of canals: if a body of water, even 1 block wide is long enough that it reaches render distance it would be considered as a body of water capable of creating new adjacent water blocks. Lore-friendly explanation would be: if a body of water is large enough it means that the area surrounding this body of water is collecting enough water during rains that it replenishes any loss of water thus this reservoir can't be drained. If large enough body of water is opened to new space that it can flood it will do that to a level of highest placed water block in this original body of water (as in communicating vessels principle - you can find it working in Timberborn update 6) New water blocks can't be created via bucket. Adding more water from smaller reservoirs to reservoirs carrying large enough volume to be considered infinite won't change their level so player can not overfill an ocean, a sea, or even a lake. Small reservoirs of water will persist if untouched. Loosing more than 25% of it's original volume (creating more space for this water via digging, or some terrain collapsing) will start a process of slow, but noticeable evaporation. Only those water blocks that are a part of large bodies of water (and naturally occurring mountain springs) would be considered infinite. From any small reservoir a player would be able to drain water (rule of 25% water loss would be still in place and said reservoir would start so slowly evaporate). Those points don't cover every situation and are not exploit-proof. But I think that with enough tinkering it could work like that. I know nothing about coding, so I don't even know what is possible with VS game engine and how much manpower would it take to implement water physics into the game. 4
Porkbrick Posted October 20, 2024 Author Report Posted October 20, 2024 I was thinking that with water only created from meta block “springs” you could assign a flow rate to those blocks. If the all had a standard flow rate the you would spawn more springs the larger the water body. Or you could vary the flow rate of blocks based on how big the body they nee to feed. In either case, if you dig an outflow into a body it wouldn’t empty unless to outflow exceeds the input. So a single spring block could keep up with a single block size trench, but if you widened it out to two it would start to drain. The larger the outflow the faster it drains.
Recommended Posts