BluSunrize / ImmersiveEngineering

Wires, transformers, high voltage! Bzzzzt!
Other
777 stars 390 forks source link

Suggestion: Generate excavator veins based on a heatmap, making some areas rich in certain minerals #3220

Closed TheDeviantCrafter closed 4 years ago

TheDeviantCrafter commented 5 years ago

Right now, each chunk gets minerals on what appears to be an entirely random basis. You may find tens of thousands of copper ore in one chunk, and nothing but rock in the one next to it. This isn't how real life works, and to be honest, I think it could be more fun.

I'd like to see the excavator mimic real life veins using a heat map. In most areas, ores would be fairly uncommon, with occasional small and medium sized veins. Every hundred chunks or so, you would find an area that's rich in one particular mineral.

This area would cover a circle between 5 and 25 chunks in diameter. Any excavators placed in this area have a drastically increased chance of finding veins of that mineral, and veins tend to be larger.

Why I think this would be more fun:

willvette commented 5 years ago

Another plus would be for multiplayer servers, forcing players to trade and export in bulk for what they lack. for example: player A is atop a Rich Iron Deposit and Player B, who's about 1000m away, is atop a Rich Coal deposit, both are needed for en'mass Steel production thus trading is a must.

Personally though I'd like to see this as more of an option, keep what it is now as default but allow this as a alternate config option for modpacks and servers.

Yet another option would be to make the perlin noise generator for the deposits configurable. That way one can make a heat map like distribution how ever they see fit. Maybe combined with a in-game admin command that'll show the deposits as a floating ores near the top of the map on a per chunk bases.

BluSunrize commented 5 years ago

Tbf, the system is no longer fully random (like it used to be), it now avoids generating duplicate veins within a certain radius.

One of the things to put to consideration is that by default, IE's ore veins output a very large amount of ore. Usually one vein of copper is enough to sustain your average player base for a long time. Same for any other material really. While "trading" is a possibility on MP servers, I would think the majority of users plays singleplayer, or in server play, plays on their own, without an active trading element.

Additionally, making a large area the same mineral would require players venturing even further to find what they are looking for because suddenly the amount of uninteresting veins has greatly increased.

Now, one of the features recently implemented was that cartographer villagers sell maps to certain veins. I want to see if I can, in line with that, increase the amount of hints/leads/directions a player gets to find the ores they're looking for. Still in design on how to expand that.

Lastly, and quite importantly, a word on the code-based approach: IE currently only generates an ore vein when it is needed. The first time someone uses an excavator or sample drill in a chunk, that is when the mineral for the chunk is set. Doing it this way results in less data that has to be saved with the world (rather than having extra data assigned to every chunk during its generation); which is done to keep save file size lower than it'd otherwise be. If I were to build "heatmaps" or the likes (mind you, I'd need to figure out how to do that first too. Never worked with noise generators and the likes), that would mean saving a lot more data than currently necessary, and I'd prefer to avoid that if possible.

willvette commented 5 years ago

@BluSunrize I see, the system in use is generated on the spot. But a hint system might improve the chances of finding a desired vein. Two ideas come to mind: Surveyors Kit, that can scan multiple chunks around the player and give a approximate location of ore chunks but not telling what they are. However there is a margin of error and the kit may see a ghost vein or overlook a hidden vein. Geologist Villager, who sells geological survey maps to a player showing veins and their approximate location, similar to the treasure map mechanic.

TheDeviantCrafter commented 5 years ago

One of the things to put to consideration is that by default, IE's ore veins output a very large amount of ore. Usually one vein of copper is enough to sustain your average player base for a long time. Same for any other material really. While "trading" is a possibility on MP servers, I would think the majority of users plays singleplayer, or in server play, plays on their own, without an active trading element.

I still feel like this would be more fun in singleplayer. Setting up multiple bases and using carts or trains to connect them would be a fun project. Once you do, like you said, you get a huge supply of ores as a reward.

Additionally, making a large area the same mineral would require players venturing even further to find what they are looking for because suddenly the amount of uninteresting veins has greatly increased.

The exploration aspect itself would probably need some work. Thankfully, it sounds like you have some solutions to this:

Now, one of the features recently implemented was that cartographer villagers sell maps to certain veins. I want to see if I can, in line with that, increase the amount of hints/leads/directions a player gets to find the ores they're looking for. Still in design on how to expand that.

I like this idea. One option would be to create a grayscale heatmap of the area. The player would immediately know which areas are rich in ores, but they'd need to use the current system to figure out which ores are present.

A system similar to the Fog of War in games like Starcraft II could also work. The map would normally be blank, but placing a core sample drill would fill in a fairly large section of map. If you see a vein on the map, you could scan there to get a better look. If not, you move on.

Adding two settings to the core sample drill could also work. One option would be a focused scan, which would tell you exactly how much ore is in the chunk. A second option would tell you general information about a large area, but you'd still want to investigate potential veins further with the first setting.

Lastly, and quite importantly, a word on the code-based approach: IE currently only generates an ore vein when it is needed. The first time someone uses an excavator or sample drill in a chunk, that is when the mineral for the chunk is set. Doing it this way results in less data that has to be saved with the world (rather than having extra data assigned to every chunk during its generation); which is done to keep save file size lower than it'd otherwise be. If I were to build "heatmaps" or the likes (mind you, I'd need to figure out how to do that first too. Never worked with noise generators and the likes), that would mean saving a lot more data than currently necessary, and I'd prefer to avoid that if possible.

When you teleport a thousand chunks in a fresh Minecraft world, the game doesn't need to generate every chunk between those two locations to know what it will look like. It can run the algorithm at any arbitrary location.

Minecraft terrain is generated using noise maps. A similar, and much simpler approach could be used here. There are thousands of algorithms to choose from, so I'm sure one would fit this application.

You can generate any arbitrary section of a noise map and it will magically line up if you create another section next to it a week later. The only extra piece of information that needs to be stored is a seed.

BluSunrize commented 4 years ago

Closing this, given that mineral veins were completely reimplemented in the last release.