To illustrate my refined treatment of napalm/phosphorous/incendiary ordnance, here's the relevant part of Explosions.generate(). From the weapon class, property powerType=2 applies here, which is variable i. Note the numerous new methods I've created with which to generate the dedicated new effects.
if (i == 2) //if "NAPALM" (all incendiary, including phosphorous and other fire starting ordnance)
{
if (f == 0.0F && f1 == 0.0F) //0, 0 for small incendiary bomblets ONLY...
{
generateIncendiaryBomblet(actor, point3d); //for individual bomblets in a cluster munition
return; //this keeps land/water effects from being reached below...
}
if (f1 > 0.0F && f1 < 3.0F) //if f1 powerRadius < 3.0, phosphorous
{
if (f < 1.0F) //f = power
{
generateWPBurstSmall(actor, point3d); //WP rockets
f = 4.0F; //to use Explode10Kg effects, below...
}
else //if (f >= 1.0F)
{
generateWPBurstLarge(actor, point3d); //WP bombs
f = 15.0F; //to use RS82 effects, below...
}
}
if (f1 >= 3.0F && f1 < 50F) //if f1 powerRadius 3 to < 50, incendiary
{
if (f < 4.0F) //if power < 4 (was 10), small incendary effects; (should NOT include land/water hit effects, below?...)
{
generateIncendiarySmall(actor, point3d); //not for individual bomblets
f = 0.5F; //to use CannonBigExp effects, below...
}
else //if (f >= 4.0F)
{
generateIncendiaryLarge(actor, point3d); //not for individual bomblets
f = 4.0F; //to use Explode10Kg effects, below...
}
}
if (f1 >= 50.0F) //if f1 powerRadius 50+, napalm
{
generateNapalm(actor, point3d);
return; //this keeps land/water effects from being reached below...
}
}
Here's the stock scheme:
if(i == 2)
{
if(f1 < 3F)
{
switch(World.rnd().nextInt(1, 2))
{
case 1: // '\001'
Eff3DActor.New(actor, null, rel, 1.0F, "3DO/Effects/Fireworks/Termit1W.eff", 10F); //4.12: splat.mat, 3.5m
break;
case 2: // '\002'
Eff3DActor.New(actor, null, rel, 1.0F, "3DO/Effects/Fireworks/Termit1SM.eff", -1F); //4.12: smoke, 3 particles, live 6s, 19.5-55.5m
break;
}
} else
{
Vector3d vector3d = new Vector3d();
for(int j = 0; j < 36; j++)
{
vector3d.set(World.rnd().nextDouble(-20D, 20D), World.rnd().nextDouble(-20D, 20D), World.rnd().nextDouble(3D, 20D));
float f2 = World.rnd().nextFloat(3F, 15F);
BallisticProjectile ballisticprojectile = new BallisticProjectile(point3d, vector3d, f2);
Eff3DActor.New(ballisticprojectile, null, null, 1.0F, "3DO/Effects/Fireworks/PhosfourousFire.eff", f2); //4.12: fire, live 1s, 16/s, 2.5-56m
}
}
return;
}