Pushover Decoration Format
| Format type | Tileset |
|---|---|
| Hardware | EGA, VGA |
| Max tile count | 24 |
| Palette | External |
| Tile names? | No |
| Minimum tile size (pixels) | 16×16 |
| Maximum tile size (pixels) | 16×16 |
| Plane count | 5 |
| Plane arrangement | Plane-major, MSB-first |
| Transparent pixels? | Yes |
| Hitmap pixels? | No |
| Metadata? | None |
| Supports sub-tilesets? | No |
| Compressed tiles? | Yes |
| Hidden data? | No |
| Games |
THEMES/*.PLX contains foreground and decorative icons for Pushover. Files are RNC-compressed and use the matching .PAL palette. The decompressed icon layout is shared by .BCX and .PLX.
File format
| Relative offset | Size | Description |
|---|---|---|
| 0x00 | 32 | Plane A (pixel bit 0) |
| 0x20 | 32 | Plane B (bit 1) |
| 0x40 | 32 | Plane C (bit 2) |
| 0x60 | 32 | Plane D (bit 3) |
| 0x80 | 32 | Plane E (bit 4) |
There is no header or offset table. Each icon occupies 160 bytes and measures 16×16 pixels. Icon i begins at i * 160. Each plane has sixteen rows of two bytes; the most significant bit is the leftmost pixel.
Combine the five corresponding bits into v = A | B<<1 | C<<2 | D<<3 | E<<4. The repository decoders treat v == 0 as transparent and otherwise use palette index v & 15. Thus value 16 draws opaque palette colour 0. There are 16 displayed colours, not 32 independent palette entries.
Tile numbering
The eleven named theme banks contain 24 icons each. The foreground renderer selects these separately from the SCR background indices. THEMES/BOX.PLX is an exception with nine icons (1440 bytes), forming a box frame; it has no matching .PAL and uses a supplied/active palette.
Source code
From pushover, the open-source browser port and its reverse-engineering notes:
- docs/formats/plx-bcx.md – reverse-engineering documentation
- tools/asset-convert/bcx-plx-to-png.js – decoder / format implementation
- tools/asset-convert/theme-format-writer.js – decoder / format implementation
Credits
This file format was reverse engineered by VorticonCmdr. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)