diff --git a/docs/sdk/definition/properties.xml b/docs/sdk/definition/properties.xml
index 12afca454..d2dfd5b5a 100644
--- a/docs/sdk/definition/properties.xml
+++ b/docs/sdk/definition/properties.xml
@@ -174,6 +174,11 @@ Stand = {
MaterialIncinerate
bool
Incineration when submerged in incendiary material.
+
+
+ FireproofContainer
+ bool
+ Anything contained in this object does not catch fire when submerged in incendiary material.
EditCursorCommands
diff --git a/planet/Objects.ocd/Structures.ocd/Armory.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Armory.ocd/Script.c
index 797f9ac87..6fd911774 100644
--- a/planet/Objects.ocd/Structures.ocd/Armory.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Armory.ocd/Script.c
@@ -89,5 +89,6 @@ local Name = "$Name$";
local Description ="$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
-local Components = {Wood = 3, Metal = 2, Loam = 2};
+local Components = {Wood = 3, Metal = 2, Loam = 2};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/ChemicalLab.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/ChemicalLab.ocd/Script.c
index eedd73590..2cdd127c6 100644
--- a/planet/Objects.ocd/Structures.ocd/ChemicalLab.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/ChemicalLab.ocd/Script.c
@@ -82,5 +82,6 @@ local Name = "$Name$";
local Description ="$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
-local Components = {Wood = 3, Metal = 2};
+local Components = {Wood = 3, Metal = 2};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/Flagpole.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Flagpole.ocd/Script.c
index da47ab1cb..0f02b6efc 100644
--- a/planet/Objects.ocd/Structures.ocd/Flagpole.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Flagpole.ocd/Script.c
@@ -129,5 +129,6 @@ public func Definition(def, ...)
local Name = "$Name$";
local Description = "$Description$";
local HitPoints = 60;
+local FireproofContainer = true;
local neutral = false;
local Components = {Wood = 3, Metal = 1};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/Foundry.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Foundry.ocd/Script.c
index 6bac4ace4..56cb1856f 100644
--- a/planet/Objects.ocd/Structures.ocd/Foundry.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Foundry.ocd/Script.c
@@ -200,4 +200,5 @@ local Description = "$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
local HitPoints = 100;
+local FireproofContainer = true;
local Components = {Rock = 4, Wood = 2};
diff --git a/planet/Objects.ocd/Structures.ocd/InventorsLab.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/InventorsLab.ocd/Script.c
index 1d8dc92a8..0e9586388 100644
--- a/planet/Objects.ocd/Structures.ocd/InventorsLab.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/InventorsLab.ocd/Script.c
@@ -78,5 +78,6 @@ local Name = "$Name$";
local Description ="$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
local Components = {Wood = 4, Metal = 3};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/Kitchen.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Kitchen.ocd/Script.c
index 1af077951..64e30af31 100644
--- a/planet/Objects.ocd/Structures.ocd/Kitchen.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Kitchen.ocd/Script.c
@@ -81,5 +81,6 @@ local Name = "$Name$";
local Description ="$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
local Components = {Wood = 3, Rock = 2, Metal = 1};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/Loom.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Loom.ocd/Script.c
index acb96b628..50b0a9b58 100644
--- a/planet/Objects.ocd/Structures.ocd/Loom.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Loom.ocd/Script.c
@@ -102,5 +102,6 @@ local Name = "$Name$";
local Description ="$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
local Components = {Wood = 3, Metal = 1, Rock = 1};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/Pump.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Pump.ocd/Script.c
index af10d12c8..d31bbd9d6 100644
--- a/planet/Objects.ocd/Structures.ocd/Pump.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Pump.ocd/Script.c
@@ -913,9 +913,10 @@ local ActMap = {
local Name = "$Name$";
local Description = "$Description$";
-local BlastIncinerate = 50;
+local BlastIncinerate = 70;
local NoBurnDecay = true;
local HitPoints = 70;
+local FireproofContainer = true;
local Components = {Wood = 1, Metal = 3};
// Pump speed in amount of pixels to pump per 30 frames.
local PumpSpeed = 50;
diff --git a/planet/Objects.ocd/Structures.ocd/Sawmill.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Sawmill.ocd/Script.c
index 7409442d5..986c66a9a 100644
--- a/planet/Objects.ocd/Structures.ocd/Sawmill.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Sawmill.ocd/Script.c
@@ -310,5 +310,6 @@ local Description = "$Description$";
local SpinStep = 30;
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
-local Components = {Rock = 4, Wood = 1};
+local Components = {Rock = 4, Wood = 1};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/Shipyard.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Shipyard.ocd/Script.c
index 6894bb2da..666bae45c 100644
--- a/planet/Objects.ocd/Structures.ocd/Shipyard.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Shipyard.ocd/Script.c
@@ -105,5 +105,6 @@ local Name = "$Name$";
local Description ="$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
-local Components = {Wood = 4, Metal = 3};
+local Components = {Wood = 4, Metal = 3};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/SteamEngine.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/SteamEngine.ocd/Script.c
index 22a96537e..19b728c70 100644
--- a/planet/Objects.ocd/Structures.ocd/SteamEngine.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/SteamEngine.ocd/Script.c
@@ -289,6 +289,7 @@ protected func Definition(def)
local ContainBlast = true;
local BlastIncinerate = 130;
local HitPoints = 100;
+local FireproofContainer = true;
local Name = "$Name$";
local Description = "$Description$";
-local Components = {Rock = 6, Metal = 3};
+local Components = {Rock = 6, Metal = 3};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/ToolsWorkshop.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/ToolsWorkshop.ocd/Script.c
index 1a7814312..157beef48 100644
--- a/planet/Objects.ocd/Structures.ocd/ToolsWorkshop.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/ToolsWorkshop.ocd/Script.c
@@ -103,5 +103,6 @@ local Name = "$Name$";
local Description ="$Description$";
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
-local Components = {Wood = 3, Metal = 2};
+local Components = {Wood = 3, Metal = 2};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/Windmill.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/Windmill.ocd/Script.c
index d1c6d0138..cc977d0da 100644
--- a/planet/Objects.ocd/Structures.ocd/Windmill.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/Windmill.ocd/Script.c
@@ -209,7 +209,8 @@ protected func Definition(def)
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
local Name = "$Name$";
local Description = "$Description$";
-local Components = {Rock = 6, Wood = 2};
+local Components = {Rock = 6, Wood = 2};
\ No newline at end of file
diff --git a/planet/Objects.ocd/Structures.ocd/WoodenCabin.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/WoodenCabin.ocd/Script.c
index eac0a91a1..024032b0a 100644
--- a/planet/Objects.ocd/Structures.ocd/WoodenCabin.ocd/Script.c
+++ b/planet/Objects.ocd/Structures.ocd/WoodenCabin.ocd/Script.c
@@ -71,6 +71,7 @@ func Definition(def) {
}
local ContainBlast = true;
local BlastIncinerate = 100;
+local FireproofContainer = true;
local HitPoints = 70;
local Name = "$Name$";
local Description = "$Description$";
diff --git a/planet/System.ocg/Fire.c b/planet/System.ocg/Fire.c
index c19acd866..bbe6fe676 100644
--- a/planet/System.ocg/Fire.c
+++ b/planet/System.ocg/Fire.c
@@ -78,12 +78,26 @@ global func Incinerate(
// Called if the object is submerged in incendiary material (for example in lava).
global func OnInIncendiaryMaterial()
{
+ if (this->IsInFireproofContainer())
+ return;
this->DoEnergy(-7, false, FX_Call_EngFire, NO_OWNER);
// The object might have removed itself.
if (!this) return true;
return this->Incinerate(15, NO_OWNER);
}
+global func IsInFireproofContainer()
+{
+ if (!this) return false;
+ if (this->Contained())
+ {
+ if (this->Contained().FireproofContainer)
+ return true;
+ return this->Contained()->IsInFireproofContainer();
+ }
+ return false;
+}
+
// Makes the calling object non flammable.
global func MakeNonFlammable()
{