icondumper2 (working title)
A JavaScript library (sorta) to read PS2 icons, and their related formats.
What is a "PS2 icon"?
A set of vertices with may or may not include a texture while defining colours for those vertices.
Why?
Current implementations had some issues with rendering some icons. These were mostly:
- Not rendering any color for texture types 0-3.
- Failing to decompress some specific RLE-compressed icons. (types with bit 4 enabled)
- Requires writing/reading a specific format for successful output of data.
- Incorrect analysis of texture types leading to assuming texture type 1 isn't the same group as texture type 3.
- Further incorrect analysis revealing it's that the texture type is a bitmask.
As of writing, there was no exporter that exists for the format that exhibited one of these problems.
icondumper2 is the result of me trying to avoid these problems.
What it supports:
- EMS Memory Adapter export files (.psu)
- PS3 virtual memory card export files (.psv)
- SharkPort export files (.sps)
- X-Port export files (.xps)
- CodeBreaker Save export files (.cbs)
- Max Drive "PowerSave"/export files (.max)
- PS2 icons (.ico, .icn)
- PS2D format (icon.sys)
What can it do:
- Allow any file in a supported virtual filesystem (such as those from export files) to be read.
- Warn of invalid icon.sys display names.
- Export the icon model, with all seperate shapes included as a JavaScript Object.
- CommonJS (that includes node!) module exporting while still being compatible with other JavaScript implementations.
- Convert a 128x128x16 BGR5A1 bitmap to a standard RGB5A1 format.
- Convert an icon or a set of icons to glTF 2, with textures saved as PNG.
- Decompress any LZARI-formatted data.
What it doesn't do:
- Create, manipulate or otherwise taint save files.
- Modify any original input files.
- Use any implementation-specific features.
Client compatibility:
The library currently requires use of const
, let
and class
declarations, template literals, and destructuring assignment for variables.
Any JavaScript implementation should work if they support all of the required features.
Tested clients:
- Chrome (or Blink-based browser) 49 (or higher) - HTML reference client
- Firefox (or Gecko-based browser) 45 (or higher) - HTML reference client
- Node.js 13 (or higher) - Example client and glTF 2 exporter.
Why "icondumper2"?
Because it replaced what was left of icondumper (1).
Included files:
File | Description |
---|---|
icon.js | The library itself. |
index.js | Node.js example client. |
gltf-exporter.js | Node.js client to export icons to glTF 2. |
index.htm | HTML reference client. |
lzari.js | A LZARI decompression-only library. |
tests/iconwriter.js | Node.js. Creates icons with texture types 0-31. |
Included example files:
Directory | Description | Formats |
---|---|---|
/example_001 | A tetrahedron with all 3 base colors set. | PSU, SPS |