Content: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Background: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Pattern: Blank Waves Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Welcome to TerraFirmaCraft Forums

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

  • Announcements

    • Dries007

      ATTENTION Forum Database Breach   03/04/2019

      There has been a breach of our database. Please make sure you change your password (use a password manager, like Lastpass).
      If you used this password anywhere else, change that too! The passwords themselves are stored hashed, but may old accounts still had old, insecure (by today's standards) hashes from back when they where created. This means they can be "cracked" more easily. Other leaked information includes: email, IP, account name.
      I'm trying my best to find out more and keep everyone up to date. Discord (http://invite.gg/TerraFirmaCraft) is the best option for up to date news and questions. I'm sorry for this, but the damage has been done. All I can do is try to make sure it doesn't happen again.
    • Claycorp

      This forum is now READ ONLY!   01/20/2020

      As of this post and forever into the future this forum has been put into READ ONLY MODE. There will be no new posts! A replacement is coming SoonTM . If you wish to stay up-to-date on whats going on or post your content. Please use the Discord or Sub-Reddit until the new forums are running.

      Any questions or comments can be directed to Claycorp on either platform.
Andeerz

Questions Regarding the New Block Physics Demo

31 posts in this topic

Greetings esteemed forum goers, particularly Bioxx!

I am quite happy to see a meaningful simulation of structural physics making it into TFC2!!!  :)  After watching the recent video you (Bioxx) tweeted, I was left wanting to ask you a few questions about what you plan to implement and how.  So far, here is what I have.

I see that a given block type has a set number of other blocks it can laterally support over the air. 

  1. Is this affected by the amount of blocks supported total in addition to the distance?  In other words, if I build a beam five blocks long off of some block that can support 5 blocks laterally, and then stack a million blocks directly on top at the very end, will the structure fall apart?
  2. Alternatively, if I build with this same kind of block a beam 5 blocks out and then build laterally off of the end block, will the structure collapse?  If not, how much can you build off of it?
  3. Can the amount of blocks supported be modified by making arches?
  4. Will this representation of strength be configurable?
  5. Is there a limit to the amount of blocks that can hang down from a block over the air (given that it is a block that obeys this kind of physics you will be implementing)?

I hope my questions are clear...

In any case, I am very excited by this and look forward to where it goes.  If you are looking for any sort of inspiration, by far the best Minecraft mod that simulates structural physics is/was the Block Physics mod by id_miner on the Minecraft Forums.  Enviromine and all the others don't really do a good job with their attempts.  The only problem with that mod was that it was not updated past 1.6.4, or at least not correctly.  The 1.7 and 1.8 versions were updated by others, and they both made mistakes that make certain structures impossible that should be possible.   

2

Share this post


Link to post
Share on other sites

Honestly, the more complicated that I make the structural systems, the more I want to simplify it. I've been working on a somewhat simplified version of block weight and structural collapsing due to being overloaded but, the more that I make it work, the more scenarios pop up where it no longer functions correctly, so it may be tossed entirely.

 

This sole feature isn't the entirety of TFC2 so at some point I'm going to have to decide to limit whats there so that I can move on to other areas. I also don't want to release something that I'm not happy with just to say that X feature is crossed off.

 

My goal is to give the player simple rules to follow where they have to think just a bit more when building. I don't want the player to have to be a structural engineer to figure out how to build a house. That said if I can make load bearing work, I would love to have some version of it. Just don't get your hopes up.

2

Share this post


Link to post
Share on other sites

What's wrong with the system in TFC1? If it ain't broke, don't fix it? Sad to hear about features getting nerfed here and there.


Oops, i should watch the video. 

 

Link for others: 

Edited by Terex
2

Share this post


Link to post
Share on other sites

Ya, I was kind of wondering about the system too.  I'm not sure what it's adding to gameplay.  It's good to have a way to address natural cavern collapses.  But I've been wondering if this will make support beams obsolete, since it seems to have much greater support range.  Personally I feel like the support beam system is more interesting.   I do love the rubble though, how it behaves more unpredictably.

 

I'm really unclear how exactly the system determines where the 'ground' is.  Does there have to be a solid column all the way to bedrock?  or will deep subterranean caves cause unexpected collapses once they receive a block update?   Or does it simply check for a  certain volume of solid blocks, like 5x5x5 or something, and assume that's solid ground?  Regardless of if that 5x5x5 is hovering in air?  It seems like the whole thing is really fraught with complications, and I'm not sure what the gameplay benefit is.

 

What if caves were addressed by making a second class of natural stone - 'cave ceiling' or something (similar to how there is naturally generated living logs, and then player-cut logs), which only generates immediately above air blocks?  And this second type of natural stone is immune to collapse?  The player can't tell the difference, and it acts in all other respects just like normal raw stone.  I assume that's better than using metadata?  This would keep caves and interesting natural overhangs from collapsing due to player mining activity.  But if the player breaks through the ceiling, the stone above will be in danger of collapse, because only stone blocks that naturally generate immediately above air blocks are 'cave ceiling'.  I'm not sure how practical this is, in terms of world gen.  I don't know if caverns are in effect 'dug' through the solid ground?  Which comes first, the stone or the air?  If the air is 'hollowed out' of the stone, then theoretically each air block checks above it for a stone block and if there is one, it changes it to 'cave ceiling'?  That cave ceiling block can then get vaporized by another generated air block, which turns the next block above to ceiling?  This keeps from having to have a fancy way to figure out where the ceiling ends up?   But in any case, assuming it's technically feasible, it seems like this would address the problem of hidden cave collapses, but still keep support beams a necessary part of mining.

 

Just a thought.

0

Share this post


Link to post
Share on other sites

Actually the way it works is fairly simple.

 

When a collapsible block receives an update it begins a recursive scan to test if it is properly supported. First it checks the block directly beneath itself. If it is solid or marked specifically as a support block, then we exit out and assume that the block is fully supported (this prevents unnecessary scanning for a block which gets ticked in a clearly solid location). If this block is not supported vertically, then it begins the recursive scan horizontally and then vertically. So each block N/S/E/W is added to a list to be scanned. Each of those blocks then performs a vertical test. This time if this block is supported vertically, we add the lower block(y-1) to the list and don't bother checking horizontally, otherwise we check each horizontal block to make sure that it can support this type of block, and then add them to the list. This continues until our Y level reaches reaches a predetermined depth or we run out of blocks to scan. The scan is also limited horizontally to whatever the horizontal support range for a block is.

 

So for example if we have a pillar made of stone bricks that is 3 blocks tall, and we build a platform of stone bricks around the top block, any blocks within a 5 block circular radius would be supported as long as they have a valid path back to the pillar (since stone bricks all have a 5 block range). This satisfies the horizontal range, and the pillar, if it is built on solid ground would most likely fill the vertical requirement.

 

Keeping the ranges fairly small makes sure that we aren't scanning hundreds or thousands of blocks multiple times per tick. 

 

As far as the cave stone, I actually thought about doing that, but this works perfectly. The main issues that I'm having have to do with load bearing. If I get rid of that, I can make the current setup work quite well. I'm hoping that I don't have to it as its actually kind of fun to make a support beam or span of horizontal bricks collapse due to too much weight.

 

As far as purpose... I like to add things that I find fun to code. But besides that, the tfc1 system was sloppy and the code was confusing as all hell. This is actually was easier to navigate for when I inevitably have to come back to it in 6 months.

 

Mining collapses are a whole other beast. To offset the obvious nerfing of support beams due to naturally supported ceiling, I'll be implementing mining related caveins in a new way that should hopefully compliment the current system. 

 

Also I really hope you guys aren't afraid of Earth Tremors.

3

Share this post


Link to post
Share on other sites

Thanks for all the info. I'm really liking it! :) Lots of new possibilities i didn't realise before.

1

Share this post


Link to post
Share on other sites

For what I seen on the video it will make buildings a lot more realistic, no more floating bridges. So if you need to build a bridge crossing a river you will need to have pillars every 10 blocks, or 12 depending on how you count.

Looks like different materials have different properties, So maybe wood blocks should allow for more then 5  blocks as it is a lighter material.

I actually like the challenges that it will create when working on big projects.

2

Share this post


Link to post
Share on other sites

I assume the blocks, no matter what type, have infinite compressive strength, but as shown, variable shear strength for lateral support. Kinda like 7 days to die.

1

Share this post


Link to post
Share on other sites

hmm that tfc2 seems quite promising now with that new blocks physic and world generation

Edited by landryx
1

Share this post


Link to post
Share on other sites

This new mechanic reminds me a lot to 7 days to die (7d2d). That said, 7d2d structural integrity showed some weird behaviour when it comes to structural load. What works fine in simplified examples may appear weird when used in complex buildings with mixed materials. Structural integrity is a highly discussed "feature" / "bug" in 7d2d.

 

I like the current attempt a lot: "My goal is to give the player simple rules to follow where they have to think just a bit more when building" - thumbs up!

Edited by McOrigin
0

Share this post


Link to post
Share on other sites

This new mechanic reminds me a lot to 7 days to die (7d2d). That said, 7d2d structural integrity showed some weird behaviour when it comes to structural load. What works fine in simplified examples may appear weird when used in complex buildings with mixed materials. Structural integrity is a highly discussed "feature" / "bug" in 7d2d.

I don't doubt that it is very buggy in 7dtd. In my rather modest experimentation with it here, it is just too much to handle. So for now I've stripped out all of that code. There are just too many variables when we're dealing with a voxel world.

2

Share this post


Link to post
Share on other sites

Also I really hope you guys aren't afraid of Earth Tremors.

am i the only one who noticed this? lol. 

 

EARTHQUAKE!!! lmao

0

Share this post


Link to post
Share on other sites

Speaking of bridges, does this mechanic handle massive structure like this one (arches are between 25 and 30 blocks in diameter, the longest horizontal stretch is about 5 blocks) :

 

n5driKd.png

 

0

Share this post


Link to post
Share on other sites

Wow, that's very impressive!

0

Share this post


Link to post
Share on other sites

I'm trying to figure out some ways to make that feasible, we'll have to see.

0

Share this post


Link to post
Share on other sites

After tweaking the settings a bit i was able to build this http://prntscr.com/aj2476

 

Its not as grand as the above image but its a working proof of concept. Stone bricks now have a scan depth of 3 and a range of 6. Note that the '3' is actually more of a soft 4 for all intents since the block looking for support is searching for 3 blocks vertically that have a block beneath them. So within 6 blocks horizontally there needs to be a 4 vertical blocks of support.

 

think this should allow crystalcrag's bridge to work.

3

Share this post


Link to post
Share on other sites

This is actually was easier to navigate for when I inevitably have to come back to it in 6 months.

 

Mining collapses are a whole other beast. To offset the obvious nerfing of support beams due to naturally supported ceiling, I'll be implementing mining related caveins in a new way that should hopefully compliment the current system. 

 

Also I really hope you guys aren't afraid of Earth Tremors.

 

I'm not really sold on structural integrity computations in block-based games, it seems to always come down to the damn build requiring support in places where it looks hideous. That said, I like the part where you talk about cleaner code, that is always a good sign for me as a developer.

 

Aand about tremors thing. Is it like subtracting an arbitrary number from the structural integrity param and then issuing like couple hundreds random update ricks (backed up by user graphic and sound so we understand why the castle is suddenly flatter)? Or will we see some life forms?

0

Share this post


Link to post
Share on other sites

For the record, when the time comes for me to go to all the places in code that need it, I'll be making some structural stuff toggleable. 

 

As far as the tremors, I have some ideas but its all in my head atm.

0

Share this post


Link to post
Share on other sites

After tweaking the settings a bit i was able to build this http://prntscr.com/aj2476

 

Its not as grand as the above image but its a working proof of concept. Stone bricks now have a scan depth of 3 and a range of 6. Note that the '3' is actually more of a soft 4 for all intents since the block looking for support is searching for 3 blocks vertically that have a block beneath them. So within 6 blocks horizontally there needs to be a 4 vertical blocks of support.

 

think this should allow crystalcrag's bridge to work.

 

So, let's see if I understand this correctly...

For a block of scan depth 3 and range of 6, you would be able to build the following:

 

     000000     0     0     000000000000------------------where "0" is a blockand "------" is the ground

but not the following:

 

     000 000000000000--------------

Is this right?

0

Share this post


Link to post
Share on other sites

That, however, doesn't look believable. Surely second thing is more stable than the first one, no?

 

Assuming there are only those blocks that are explicitly marked, on the first picture there is a (vertical) lever arm that is not present on second picture. Shouldn't these be "swapped" in behavior or am I missing something?

0

Share this post


Link to post
Share on other sites

When a collapsible block receives an update it begins a recursive scan to test if it is properly supported.

...

Keeping the ranges fairly small makes sure that we aren't scanning hundreds or thousands of blocks multiple times per tick. 

Would it be possible to do the checks when a block place or destroy event is triggered instead of a block update?

 

The reason I ask is because we have observed several scenarios where a lot of block updates are generated which have nothing to do with placing or breaking blocks which would require a structural check. The way you describe it these updates would still cause the mechanism to trigger making it quite costly. Take snowfall for example. On our server we have observed more than a million block updates per hour just for snow. When a layer of snow forms it causes a block update to the block below it. Let's say the majority of snow falls on collapsible blocks like grass and dirt. That would require it to check ~70 blocks per tick which wouldn't add anything to the mechanic. Unless snow collapsing a roof becomes a thing of course :)

2

Share this post


Link to post
Share on other sites

I would be very dismayed if this awesome feature didn't make it into TFC2.  I always felt that it was a small but important feature missing from TFC and minecraft in general.  Enviromine's structural integrity system was okay, but I found it lacking and overly confusing in a lot of its features.  And it didn't work with TFC last i knew  :(

0

Share this post


Link to post
Share on other sites

Take snowfall for example. On our server we have observed more than a million block updates per hour just for snow. When a layer of snow forms it causes a block update to the block below it. Let's say the majority of snow falls on collapsible blocks like grass and dirt. That would require it to check ~70 blocks per tick ...

 

Wouldn't snow still count as a block placement?

0

Share this post


Link to post
Share on other sites

World generation stuff is typically registered differently from player interactions. Snow "forms", block placement is an action performed by a player or a block (mod) that places an other block but even then you can detect which is causing the placement.

There are a bunch of different events for blocks. See the Forge Event Reference here: http://www.minecraftforge.net/wiki/Event_Reference

2

Share this post


Link to post
Share on other sites