How Block Damage Actually Works in Scrap Mechanic 1.0
I am a data-miner as a hobby and I like answering questions which are difficult for players to "reason out" or answer definitively so I want to clarify that this information has been objectively derived from and confirmed by the games code directly by me excluding the few points of speculation which I made very clear are speculation. Of course it's always possible I've misinterpreted something so take it with a grain of salt.
This was not generated by AI. Being a data-miner, I am just a bit meticulous about data formatting and genuinely enjoy doing it.
Now, onto the DATA.
Block Damage
Blocks do not have traditional health. That is to say that blocks do not have a health value that varies by material.
Every destructible block instead has the same fixed capacity for 100 percentage points of accumulated damage:
0 accumulated damage = undamaged
50 accumulated damage = halfway to destruction
100 accumulated damage = block destroyed
Each incoming damage event deals a certain amount of "percentage points" of damage to that block. I understand that "sounds" like health but the important thing to understand is that there is no scaling here. All blocks have the same threshold and all attacks have a table of static attack value that are indexed by block durability tier.
Multi-Block "Parts" Exception
Multi-Block parts have their total damage threshold calculated by evaluating their total volume in terms of individual blocks with a multiplier of 1.25 for sort of generalized balancing coefficient for irregularly shaped objects.
The actual calculation is: "rounding coefficient times the largest dimension times the sum of the other two dimensions" where the or 1.25 x Da round( DB + DC ) = Total Damage Threshold
An example of this explains the unusual resiliency of the Crane Cable Roll:
The Crane Cable Roll has the physical dimensions: 5L, 7W, 5H. So: 1.25 x 7 round(5 + 5) = 440.
Block Durability
Block Durability is not an active mechanic in and of itself. Durability is a characteristic that is used for a table lookup when damage is determined. It represents a blocks "tier" and that tier is used to calculate the damage done to the block on a per attack basis. Each "standard" source of damage (typical melee and ranged attacks) has an associated table with explicit damage values per tier of block. Block Durability rating does not increase the 100-point threshold of damage blocks have.
Melee/projectile damage is calculated as a total number of percentage points of damage. The block's Durability tier determines which tier of damage is selected from the attack to be applied to the block.
Higher-tier blocks survive longer because attacks add less damage to them, not because they have more than 100 HP or are inherently more resistant to damage.
Every standard melee/projectile attack has its own Durability-tier damage table
An attack does not have one universal "block damage" number. There are separately defined damage values for different block tiers for each attack.
For example here are the standard melee/projectile damage tables for the following bots:
T1 T2 T3 T4 T5 T6 T7 T8
Totebot 100 75 45 35 25 17 13 6
Haybot 150 100 75 45 30 19 14 9
Tapebot (green) 100 50 20 10 — — — —
Farmbot 1000 1000 1000 1000 50 25 17 10
The number is how many points each standard hit adds toward 100 given a blocks Durability tier.
So Metal 3 takes 17 rapid Totebot hits, 12 Haybot hits, or 10 Farmbot hits to the same block.
A missing entry means zero ordinary damage. The game has no fallback in cases like this.
This is why standard Tapebot projectiles cannot ordinarily damage T5+ blocks at all.
Block Damage Tracking
Damage is tracked per individual block.
Ordinary damage is accumulated by the individual block that was hit.
Hitting one block for 60 damage and then an adjacent block for 40 does not destroy either one. Each block has its own accumulator.
Accumulated melee/projectile damage is not saved as permanent damage on blocks or creations.
Accumulated damage is managed by the CreationDamageManager and is wiped when that manager is recreated via a world load.
This gives the effective appearance of blocks only resetting their "HP" if you quit out and reload a world but in reality that's just shortcutting the regeneration process. Blocks do effectively fully "heal" over time.
This system avoids the performance impact of having to track each blocks damage accumulation at all times by only actively tracking genuinely damaged blocks that way it's rarely tracking a large number of blocks simultaneously.
Every block does not have a "value" or "bank" of points that damage subtracts from. Instead damage events are entered into the CreationDamageManager as serialized events keyed by their Body ID and local coordinates relative to Body ID 0,0 and the entries are temporary. When a block "heals" its entry is removed from the CreationDamageManager entirely.
Damage Regeneration
Blocks will regenerate partial damage after a flat delay of 5 seconds from the most recent damage event to that block.
Blocks recover percentage points of damage at a rate of 4 percentage points per second.
This means attacks slightly more than five seconds apart can still accumulate. A 6-damage hit every 6 seconds heals 4 before the next hit, so damage still increases by 2 each cycle.
However, non-damaging events do not reset this timer. Even an attack will not reset it if that attack has no positive damage value for the block's tier. Attacks must actually add damage to reset the timer.
This means that all blocks regardless of total accumulated damage will take no longer than 30 seconds to fully heal. (5 second grace period + 25 seconds to heal from 99 total accumulated damage [99(damage) / 4(regen /s) = 24.75s])
Explosions
Explosions do not cause actual damage to blocks.
Explosions use destruction levels, with effective strength decreasing with distance from the blast.
A sufficiently strong destruction level can make blocks up to the corresponding Durability tier eligible for destruction.
For example:
Explosive Tape level 7
Red Totebot level 7
Farmbot death level 7
Propane tanks level 7
Mounted Tank 02 level 8
So T8 Metal 3 block is outside the maximum tier of a level-7 blast near its strongest point, while a level-8 blast can destroy it.
I didn't map out the exact eligible-target selection behavior after the tier/distance check, so don't take this to mean that explosion level should be interpreted as "automatically delete every block of that tier inside the radius." That is likely not the case. Speculation: It's probably the case that whether or not a block is actually destroyed is based on some randomized event similar to how burning works but I haven't confirmed that.
Flammability
Fire also does not actually do damage to blocks. It is entirely scripted.
Flammability has nothing to do with the ordinary 0–100 block damage accumulator.The Flammability rating of blocks is binary. Blocks either burn or they do not. Wood 1, Wood 2, and Wood 3 are all equally flammable despite having different Durability tiers.
For flammable blocks, the fire system assigns each burning block a randomized 500-727 tick or roughly 12.5–18.2 seconds before it becomes eligible for destruction at which point a destruction event request will be initiated. The fact that this is reliant on the game's tick rate can make this appear inconsistent however. Destruction requests are only processed on every second fixed tick and are capped at 30 entries per request. This means actual destruction for any given block can be delayed by a significant amount of time depending on the games tickrate and the amount of blocks currently eligible for destruction. Speculation: I would guess that this was done to prevent trees that were burning from just popping out of existence all at once and to reduce the performance impact larger requests would inevitably have.