This enables the Blender Mesh Normal panel and exports any double sided
mesh with double sided layers to Plasma. The implication is that the
mesh will be rendered twice in game--the second time with the winding
reversed. Wavesets marked double sided are ignored due to the runtime
generation of layers in game. Trying to make a double sided waveset is
therefore nonsense.
This allows directing the message to *all* modifiers -- this is
primarily only useful for ladders, but some other types may respect the
message. Also exposed the ability to send the message to child objects.
Translation of the rules posted by Sirius @ https://forum.guildofwriters.org/viewtopic.php?p=73757#p73757
PotS is in worldspace when the mass is non-zero. Plasma likely detects
nonzero mass as "this object can move" and expects localspace. MOUL on
the other hand uses localspace if the object has a CI, otherwise
worldspace.
It appears that in Havok-physics enabled versions of Plasma, plEnableMsg
does not affect physics. Therefore, we have to send the PotS-era
plSimSuppressMsg to do this job.
MOUL/DX9 will not rt light any vertex with a near-zero component in its
normal. This prevents shadows and decals from appearing on flat surfaces
in Ages exported for the MOUL engine. Instead of fighting with the
pipeline and vertex buffer code in Plasma, we'll just clamp the values
here.
This allows for objects to print decals at runtime, like the baskets in
Eder Gira. Also, the same functionality can be hijacked for coincident
objects to exist as decals. This is basically a shortcut for adding hack
Z-flags to the base layer of a decal material.
This allows blend textures to be used for mesh transparency without
having to fiddle around too much. It was also a stab at fixing some
regressions in the MOUL engine around decals, but that bit failed,
sadly.
The soft volumes were previously in aproximately the correct location
but the exported normals were not unit vectors. This seems to have made
the resulting soft volumes not function as intended.
This fixes the issue in which python nodes reused in multiple pages
won't get properly exported. The exporter doesn't store which page a
node was exported to, and the "optimization" to prevent dupe python
parameters was over-optimizing in the case of multiple pages. Trivial
attempts to track the pages we exported to failed, so we'll fall back to
checking the PFM's filename. If it's None, then obviously the PFM has
not been exported...
Explanation: The JPEG format in plMipmap does not have to be an actual
JPEG image, it can also hold an RLE bitmap. libHSPlasma currently does
not attempt to compress any images held as uncompressed data and marked
JPEG, rather, it exports them as RLE maps. Maybe a bit odd, but it
works. I guess.
This improves the panel layout and fixes the issue in which
`plShadowMaster` exported with `maxSize` == 0, causing crappy shadows
in PotS and generally no shadows in MOUL.
This fixes two bugs with empty node socket spawning:
- The first time an empty is spawned, the link is moved to the last
socket.
- Unlinking a socket in the middle of the group would cause that socket
to be the one that's empty. This isn't bad per-se, but with Responders
being ID-based, it could result in some confusion.
Previously, Korman exported cameras without the "Maintain LOS" flag
applied, allowing cameras to swing through geometry. In the token of
better defaults and easier to understand objects, all the tracking
options have been audited for clarity and their exporting to the correct
camera type.