Here is my cannon:
```C++
class TEST_Cannon_76mm : mortar_155mm_AMOS {
scope = protected;
cursor="EmptyCursor";
cursorAim="cannon";
showAimCursorInternal=0;
displayName = "Cannon (76mm)";
selectionFireAnim = "mk45_muzzle";
magazines[] = {"TEST_85rnd_76mm_HE_Shells_Mag", "TEST_85rnd_76mm_AP_Shells_Mag", "TEST_15rnd_76mm_DART_Shells_Mag"};
muzzleEnd = "konec hlavne";
muzzlePos = "Usti hlavne"; // position and direction of muzzle
reloadTime = 0.5;
magazineReloadTime = 10;
ballisticsComputer="2 + 16";
FCSMaxLeadSpeed=25;
FCSZeroingDelay=1;
modes[] = {"Single1", "Single2", "Single3"};
class GunParticles {
class Effect {
effectName = "CannonFired";
positionName = "Usti hlavne";
directionName = "Konec hlavne";
};
class Effect1 {
effectName = "ArtilleryFired1";
positionName = "Usti hlavne";
directionName = "Konec hlavne";
};
class Effect2 {
effectName = "ArtilleryFiredL";
positionName = "Usti hlavne";
directionName = "Usti hlavne";
};
class Effect3 {
effectName = "ArtilleryFiredR";
positionName = "Usti hlavne";
directionName = "Usti hlavne";
};
};
class Single1 : Mode_SemiAuto {
displayName = "Cannon";
sounds[] = {"StandardSound"};
class StandardSound {
begin1[] = {"A3\Sounds_F\arsenal\weapons_vehicles\cannon_155mm\sochor_155mm_distant", 2.51189, 1, 1500};
soundBegin[] = {"begin1", 1};
};
reloadSound[] = {"A3\sounds_f\dummysound", 1, 1, 20};
reloadTime = 0.5;
minRange = 0;
midRange = 4000;
maxRange = 8000;
aiRateOfFire=1;
aiRateOfFireDistance=8000;
minRangeProbab=0.0099999998;
midRangeProbab=0.0099999998;
maxRangeProbab=0.0099999998;
};
class Single2 : Single1 {
displayName = "Single - Short";
artilleryDispersion = 0.5;
artilleryCharge = 0.22;
minRange = 0;
midRange = 4000;
maxRange = 8000;
};
/*class Single3 : Single2 {
displayName = "Single - Medium";
artilleryCharge = 0.3;
};
*/
class Single3 : Single2 {
displayName = "Single - Long";
minRange = 8000;
midRange = 11000;
maxRange = 15000;
artilleryCharge = 0.48;
};
};
}
```