PSXParser can now read textures, and also read PSX files that ONLY have textures.
PSX textures automatically handle their own masking (no longer need to set Magenta mask color) and setting of certain stp bits. There are a lot of convoluted rules on how masking/stp-setting works.
PSX textures are the same as SPT, and must be packed before usage. Unlike SPT, UV coordinates are absolute. PSX UV coordinates are tiled around the texture size, this is why absolute coordinates are used.
Added support for all (observed) semi-transparency flags. It turns out the invisible flag is only invisible when 0x2 in a set of 3 bits. Everything else is either opaque, semi-transparent, or unobserved.
Gouraud palette is now parsed in RGBs tagged chunk. It turns out the chunk can be less than 256 entries. If black repeats itself in the palette, then it has special properties and isn't really black. For now, these special blacks are changed to default gray.
When HIER (hierarchy) tagged chunks are present, vertices have their values divided by 16.0. This fixes many humanoid models looking incomprihensible, but doesn't solve everything entirely. It also fixes these models being incredibly large in comparison to the world. Now their size is accurate.
PSX now flushes triangles after each model is parsed (so we don't need to iterate through objectCount x modelCount sets of grouped triangles every time). This also means all models are now listed in TMDID order.
PSX TMDIDs are now 1-indexed, like everything else usually is.
Added SpriteNoPitch render flag, which is used for sprites that face the camera, but only via yaw rotation. PSX models use these sprites, signaled by vertex pad 16.
Added advanced settings.json option to include invisible faces in PSX models.
Other
Added advanced settings.json options to control the scale divisor for each of the following formats: BFF, MOD, PSX.
Added settings.json option (no UI item yet) to show missing textures when a texture could not be looked up or packed.
Textures now show orange/black missing texture pattern if UVs go out of bounds (when not tiled). This should never happen, since UVs are always read as bytes, but it's a debugging measure in case something is broken.
Some refactoring to BFF and MOD formats to follow the same changes to PSX.
Fixed typo for PSX format tooltip in scanner window.
Added preprocessor define ENABLE_CLIPBOARD (currently only used in debug builds) to enable using Ctrl+C to copy the scene, or texture/VRAM preview.
Added pixel getter functions to Texture.
Changed palette storage to ushort in the native 5/5/5/stp format. This means we no longer need a separate palette for semi-transparency. It also means storage usage goes down by a lot. Added TexturePalette static class to make it easier to manage these palette colors.
All scan results now store their original file offset.
All scan results now store the index of their result type in the current match.
Added debug-toggleable mode to mark pixel semi-transparency in the texure/VRAM preview.
Added debug-toggleable mode to preview a texture's palette instead of the texture.
Added debug-toggleable mode to select models via triangle collision instead of bounds collision.
Added GC.Collect() to ClearScanResults, so that memory is freed up ASAP.
Texture packing now only happens in UpdateSelectedEntity if updateMeshData is true (to reduce lag from small updates).
Changed GL.ClearColor to use alpha of 1.0, so that calling GL.ReadPixels won't return gray for the back color.
PSXParser
Other