Tweaked the crashed plane flames on water effect. Now have several fires, instead of just one. Here you can see part of the victim's fuselage next to the fires.

The previous post in which I included the Java was not yet tested code; that's been deleted. I've fixed and further enhanced it, as below. In addition to adding more fires (total of 4, 5 or 6), I made them and the attending smoke column last a bit longer (up to 20 sec). And they can't cluster as tightly as before, where it could be the case that all lay essentially on top of one another.)
This is in the Explosions.class, 4.12. It should work in any game version if added to its Explosions.class, and if the specified effects exist, of course. The AircraftSmokeBoiling.eff is my own original effect, used with land crashes and here.
public static void AirDrop_Water(Point3d point3d) {
if (Config.isUSE_RENDER()) {
float f = 6F; //4.0F;
float f_77_ = 1.0F;
o.set(0.0F, 90.0F, 0.0F);
l.set(point3d, o);
Eff3DActor.New(l, f_77_, "Effects/Explodes/Aircraft/Water/Base.eff", f);
Eff3DActor.New(l, f_77_, "Effects/Explodes/Aircraft/Water/Fontain.eff", f);
Eff3DActor.New(l, f_77_, "Effects/Explodes/Aircraft/Water/Spray.eff", f);
Eff3DActor.New(l, f_77_, "Effects/Explodes/Aircraft/Water/Soot.eff", f);
SfxExplosion.crashAir(point3d, 2);
o.set(0.0F, 0.0F, 0.0F);
l.set(point3d, o);
ExplodeSurfaceWave(1, 110F, 6F);
if (World.rnd().nextFloat() < 0.33F) {
l = new Loc(point3d);
Point3d point3d_87_ = l.getPoint();
World.cur();
point3d_87_.z = World.land().HQ(point3d.x, point3d.y);
o.set(0.0F, 90.0F, 0.0F);
l.set(point3d, o);
Eff3DActor.New(l, f_77_, "Effects/Explodes/Aircraft/Land/Base.eff", f);
Eff3DActor.New(l, f_77_, "Effects/Explodes/Aircraft/Land/Burn.eff", f);
if (World.rnd().nextFloat() < 0.5F) {
Eff3DActor.New(l, f_77_, "Effects/Explodes/Aircraft/Land/Smoke2.eff", 10F);
Eff3DActor.New(l, f_77_, "3DO/Effects/Aircraft/FireGND.eff", 20F);
Eff3DActor.New(l, f_77_, "3DO/Effects/Aircraft/AircraftSmokeBoiling.eff", 20F);
int i = World.rnd().nextInt(3, 5); //add 3 to 5 extra fires, randomly placed
for (int i_88_ = 0; i_88_ < i; i_88_++) {
Point3d point3d_88_ = new Point3d(point3d);
double d = World.rnd().nextDouble(0.0, 16.0) - 8.0; //= -8 to 8
if (d < 2 && d > -2)
d = 2;
point3d_88_.x += d;
d = World.rnd().nextDouble(0.0, 16.0) - 8.0; //= -8 to 8
if (d < 2 && d > -2)
d = 2;
point3d_88_.y += d;
Loc loc = new Loc(point3d_88_);
Point3d point3d_89_ = loc.getPoint();
World.cur();
point3d_89_.z = World.land().HQ(point3d_88_.x, point3d_88_.y);
Eff3DActor.New(loc, f_77_, "3DO/Effects/Aircraft/FireGND.eff", 15F - World.rnd().nextFloat(2F, 5F)); //live 15-18 sec
}
}
}
}
}