I decided to look a bit deeper into this. In both the 4.12 and B.A.T. House.class we have the method I include below. It appears that the Body type "Flesh" is already supported. I'll do some experimenting to verify this. Of great interest are the algorithms which calculate the minimum and maximum TNT values required for destruction. I'll work up a spreadsheet of a table of values, and post it.
private static Properties LoadHouseProperties(SectFile sectfile, String s, String s1, String s2)
{
Properties properties = new Properties();
properties.SoftClassInnerName = s2;
properties.FingerOfFullClassName = Finger.Int(s1);
String s3 = sectfile.get(s, "equals");
if(s3 == null || s3.length() <= 0)
s3 = s;
properties.MESH0_NAME = getS(sectfile, s, "MeshLive");
properties.MESH1_NAME = sectfile.get(s, "MeshDead");
if(properties.MESH1_NAME == null)
getS(sectfile, s, "MeshDead");
if(properties.MESH1_NAME.equals(""))
properties.MESH1_NAME = null;
properties.ADD_HEIGHT_0 = getF(sectfile, s3, "AddHeightLive", 0.0F, -100F, 100F);
properties.ADD_HEIGHT_1 = getF(sectfile, s3, "AddHeightDead", 0.0F, -100F, 100F);
properties.ALIGN_TO_LAND_NORMAL = getF(sectfile, s3, "AlignToLand", 0.0F, 0.0F, 1.0F) > 0.0F;
properties.ALIGN_TO_LAND_NORMAL = getF(sectfile, s3, "AlignToLand", 0.0F, 0.0F, 1.0F) > 0.0F;
properties.IGNORE_SHADOW_DATA = false;
if(sectfile.get(s, "IgnoreShadowData") != null)
properties.IGNORE_SHADOW_DATA = true;
properties.PANZER = getF(sectfile, s3, "Panzer", 0.0001F, 50F);
String s4 = getS(sectfile, s3, "Body");
if(s4.equalsIgnoreCase("WoodSmall"))
{
properties.MAT_TYPE = 0;
properties.EFF_BODY_MATERIAL = 3;
properties.EXPL_TYPE = 0;
properties.MIN_TNT = 0.25F * (properties.PANZER / 0.025F);
properties.MAX_TNT = properties.MIN_TNT * 2.0F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.01F;
} else
if(s4.equalsIgnoreCase("WoodMiddle"))
{
properties.MAT_TYPE = 0;
properties.EFF_BODY_MATERIAL = 3;
properties.EXPL_TYPE = 1;
properties.MIN_TNT = 5F * (properties.PANZER / 0.15F);
properties.MAX_TNT = properties.MIN_TNT * 1.7F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.01F;
} else
if(s4.equalsIgnoreCase("RockMiddle"))
{
properties.MAT_TYPE = 1;
properties.EFF_BODY_MATERIAL = 4;
properties.EXPL_TYPE = 2;
properties.MIN_TNT = 6F * (properties.PANZER / 0.12F);
properties.MAX_TNT = properties.MIN_TNT * 1.7F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.01F;
} else
if(s4.equalsIgnoreCase("RockBig"))
{
properties.MAT_TYPE = 1;
properties.EFF_BODY_MATERIAL = 4;
properties.EXPL_TYPE = 3;
properties.MIN_TNT = 12F * (properties.PANZER / 0.24F);
properties.MAX_TNT = properties.MIN_TNT * 1.7F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.05F;
} else
if(s4.equalsIgnoreCase("RockHuge"))
{
properties.MAT_TYPE = 1;
properties.EFF_BODY_MATERIAL = 4;
properties.EXPL_TYPE = 4;
properties.MIN_TNT = 30F * (properties.PANZER / 0.48F);
properties.MAX_TNT = properties.MIN_TNT * 1.7F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.05F;
} else
if(s4.equalsIgnoreCase("FuelSmall"))
{
properties.MAT_TYPE = 2;
properties.EFF_BODY_MATERIAL = 2;
properties.EXPL_TYPE = 5;
properties.MIN_TNT = 0.2F * (properties.PANZER / 0.002F);
properties.MAX_TNT = properties.MIN_TNT * 1.7F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.01F;
} else
if(s4.equalsIgnoreCase("FuelBig"))
{
properties.MAT_TYPE = 2;
properties.EFF_BODY_MATERIAL = 2;
properties.EXPL_TYPE = 6;
properties.MIN_TNT = 0.8F * (properties.PANZER / 0.008F);
properties.MAX_TNT = properties.MIN_TNT * 1.7F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.01F;
} else
if(s4.equalsIgnoreCase("Flesh"))
{
properties.MAT_TYPE = 3;
properties.EFF_BODY_MATERIAL = 3;
properties.EXPL_TYPE = 0;
properties.MIN_TNT = 0.01F * (properties.PANZER / 0.002F);
properties.MAX_TNT = properties.MIN_TNT * 1.7F;
properties.PROBAB_DEATH_WHEN_EXPLOSION = 0.1F;
} else
{
System.out.println("House: Undefined Body type in class '" + s1 + "'");
System.out.println("Allowed body types are:WoodSmall,WoodMiddle,RockMiddle,RockBig,RockHuge,FuelSmall,FuelBig,Flesh");
throw new RuntimeException("Can't register house object");
}
return properties;
}