Uff, it seems that forum has lost some messages from yesterday. So first, attached a patch for pak128.CS which can be applied to pak128 as well.
Parameters:
Smoke=smoke_name - stays as it was
SmokeUplift=x - default is 16 - and that is the speed was used before, and shown in the video above. Special value is 0, which makes the smoke stay in place, and can be used if you want precise control of the animation. Also good for development to see if the tile/offsets are right. Planned use case is flames on oil rig (pak128.britain-ex). Higher values makes the smoke rise up faster.
SmokeLifetime=x - default is 2499 - that is the old default, again used in the video, it is approximately in miliseconds. If the factory makes any noises, it feels good to make the smokelife equal to the noise duration. Special value is 2497, which is used for vehicles. Smokes with lifetime=2497 are properly rotated, while others are just discarded upon rotation.
SmokeTile[0-3]=x,y - the tiles at which the smoke originates. Index is rotation. (0,0) is top (NW) corner, (0,y) is on western side, (x,0) on northern side, no defaults.
SmokeOffset[0-3]=x,y - the offset within the tile (top of chimney). X offset is measured from the center of tile, tile borders are +/- 32. Y offset is measured from the bottom of tile (SE corner), and is always negative. For pak64 the offset is in pixels, for other paksets it has to be divided or multiplied accordingly (pak128 divide by 2, pak192 divide by 3, pak32 multiply by 2, ...); if smoketile[n] is specified smokeoffset[n] must be specified too. No defaults.
Sensible is to specify rotations (0), (0,1), or (0,1,2,3). I have not tried what happens if 3 rotations are specified. Also there is no check if the number of smoke rotation matches the number of factory rotations.
Legacy:
SmokeSpeed is (and was) ignored
SmokeTile=x,y (without index), or if unspecified defaults to (0,0) - tile specified as above, but automatically rotated according to factory rotations. (code unchanged)
SmokeOffset=x,y (without index), default (0,0) - smoke offset as above, but y-offset is internally increased by -8 (i.e. old yoffset -10 has same effect as new offset -18). This -8 was hardcoded and is still used for vehicles. For factories with multiple rotations, the offsets are somewhat rotated, code unmodified. (But the offset rotation algorithm is just weird, and was the primary cause why I started this patch).
Smokelifetime and smokeuplift is ignored if legacy non-indexed smoketile/smokeoffset is used.
So, for factories with one rotation, it is safe to use the legacy specs, just keep in mind the -8 special offset. Otherwise I recommend using the new syntax.