To compare a pair of inveterate foes, the Zero and the Wildcat, as regards the conditions for aileron damage being set.
Here we are looking at the relevant section of method hitBone() in each aircraft class. There are considerable differences. What stands out at first glance is is the higher chance of the damage condition being met for the F4F; 70% versus 15%! That alone looks suspicious to me.
I looked at the hit boxes for the aileron control (wire or rod), and for both planes the size is pretty comparable. There is nothing to inspire any alteration here.
I'm not sure how to parse the structure of these, which also differ considerably:
Zero: getEnergyPastArmor(0.99F, shot) > 0.0F
F4F: getEnergyPastArmor(0.1F, shot) > 0.0F
If anyone could educate me on what is being tested, I'd appreciate it!
I would say that some tweaking could well be warranted. Unless it was indeed the case that the Wildcat had terribly delicate/susceptible aileron control cables...
from A6M.hitBone()
==============
if(s.startsWith("xxcontrols"))
{
debuggunnery("Controls: Hit..");
int i = s.charAt(10) - 48;
switch(i)
{
default:
break;
case 1: // '\001'
case 2: // '\002'
if(getEnergyPastArmor(0.99F, shot) > 0.0F && World.Rnd().nextFloat() < 0.15F)
{
debuggunnery("Controls: Ailerones Controls: Out..");
FM.AS.setControlsDamage(shot.initiator, 0);
}
break;
from F4F.hitBone()
=============
if(s.startsWith("xxcontrols"))
{
debuggunnery("Controls: Hit..");
int i = s.charAt(10) - 48;
switch(i)
{
default:
break;
case 1: // '\001'
case 2: // '\002'
if(World.Rnd().nextFloat() < 0.7F && getEnergyPastArmor(0.1F, shot) > 0.0F)
{
debuggunnery("Controls: Ailerones Controls: Disabled..");
FM.AS.setControlsDamage(shot.initiator, 0);
}
break;
Some additional comparisons...
For the F2A:
=========
case 2: // '\002'
if(getEnergyPastArmor(2.2F, shot) > 0.0F)
{
debuggunnery("Controls: Controls Column: Hit, Controls Destroyed..");
FM.AS.setControlsDamage(shot.initiator, 2);
FM.AS.setControlsDamage(shot.initiator, 1);
FM.AS.setControlsDamage(shot.initiator, 0);
}
break;
For the F4U:
=========
if(World.Rnd().nextFloat() < 0.5F && getEnergyPastArmor(0.1F, paramShot) > 0.0F)
{
debuggunnery("Controls: Ailerones Controls: Disabled..");
((FlightModelMain) (super.FM)).AS.setControlsDamage(paramShot.initiator, 0);
}
break;
For the F6F:
=========
if(World.Rnd().nextFloat() < 0.5F && getEnergyPastArmor(0.1F, shot) > 0.0F)
{
debuggunnery("Controls: Ailerones Controls: Disabled..");
FM.AS.setControlsDamage(shot.initiator, 0);
}
break;
From the Ki_43:
===========
if(getEnergyPastArmor(0.99F, shot) > 0.0F && World.Rnd().nextFloat() < 0.175F)
{
debuggunnery("Controls: Ailerones Controls: Out..");
FM.AS.setControlsDamage(shot.initiator, 0);
}
break;
From the Ki_27:
===========
if(getEnergyPastArmor(4.2F, shot) > 0.0F)
{
debuggunnery("Controls: Ailerones Controls: Out..");
FM.AS.setControlsDamage(shot.initiator, 0);
}
break;