As to aim accuracy for ships' guns, a quick look turned up this seemingly relevant method in BigshipGeneric.class. Note the setting and scaling of AimingError, and the utilization of SKILL.
public Actor findEnemy(Aim aim)
{
if(isNetMirror())
return null;
ShipPartProperties shippartproperties = GetGunProperties(aim);
Actor actor = null;
switch(shippartproperties.ATTACK_FAST_TARGETS)
{
case 0: // '\0'
NearestEnemies.set(shippartproperties.WEAPONS_MASK, -9999.9F, KmHourToMSec(100F));
break;
case 1: // '\001'
NearestEnemies.set(shippartproperties.WEAPONS_MASK);
break;
default:
NearestEnemies.set(shippartproperties.WEAPONS_MASK, KmHourToMSec(100F), 9999.9F);
break;
}
actor = NearestEnemies.getAFoundEnemy(pos.getAbsPoint(), shippartproperties.ATTACK_MAX_RADIUS, getArmy(), shippartproperties.partOffs.z);
if(actor == null)
return null;
if(!(actor instanceof Prey))
{
System.out.println("bigship: nearest enemies: non-Prey");
return null;
}
FiringDevice firingdevice = GetFiringDevice(aim);
BulletProperties bulletproperties = null;
if(firingdevice.gun.prop != null)
{
int i = ((Prey)actor).chooseBulletType(firingdevice.gun.prop.bullet);
if(i < 0)
return null;
bulletproperties = firingdevice.gun.prop.bullet[i];
}
int j = ((Prey)actor).chooseShotpoint(bulletproperties);
if(j < 0)
return null;
aim.shotpoint_idx = j;
double d = distance(actor);
d /= AttackMaxDistance(aim);
aim.setAimingError(World.Rnd().nextFloat(-1F, 1.0F), World.Rnd().nextFloat(-1F, 1.0F), 0.0F);
aim.scaleAimingError(23.47F * (float)(4 - SKILL_IDX) * (float)(4 - SKILL_IDX));
if(actor instanceof Aircraft)
d *= 0.25D;
aim.scaleAimingError((float)d);
if(targetControl() > 0)
aim.scaleAimingError(0.5F);
return actor;
}