Pushover Preview Animation Format
| Format type | Image |
|---|---|
| Hardware | EGA, VGA |
| Colour depth | 8-bit colour |
| Minimum size (pixels) | 320×200 |
| Maximum size (pixels) | 320×200 |
| Palette | Internal |
| Plane count | 1 (packed pixels) |
| Transparent pixels? | No |
| Hitmap pixels? | No |
| Games |
DATA/PUSHOVER.FLX and CC0.FLX–CC5.FLX contain front-end preview/animation data for Pushover. They are RNC-compressed. They do not contain the playable grids, which are in .SCR files.
File format
Multi-byte fields are little-endian. The decompressed preamble is 128 bytes:
| Offset | Data type | Description |
|---|---|---|
| 0x00 | UINT32LE | Total decompressed file size |
| 0x04 | UINT16LE | Signature 0xAF11 |
| 0x06 | UINT16LE | Preview-slot count after the initial shared keyframe |
| 0x08 | UINT16LE | 320 (image width) |
| 0x0A | UINT16LE | 200 (image height) |
| 0x0C | UINT16LE | 8 (consistent with 8-bit screen pixels; original field semantics not separately traced) |
| 0x0E | UINT16LE | 3; precise meaning unconfirmed |
| 0x10 | BYTE[112] | Reserved/padding; zero in the closely inspected sample |
Frame blocks
At offset 0x80, read consecutive blocks. Each begins with a self-inclusive UINT32LE size, UINT16LE signature 0xF1FA, UINT16LE subrecord count, and eight padding bytes. The first block carries the shared palette/keyframe. The header slot count counts subsequent blocks, including empty 16-byte blocks.
A subrecord has UINT16LE self-inclusive length, UINT16LE flags, UINT16LE type, then its payload. This is the interpretation used by the repository's exploratory parser; it does not establish a generic parser for every similarly signed animation format.
| Type | Operation |
|---|---|
| 0x0B | Partial palette update: skip/write runs of RGB triples |
| 0x0C | Partial image update with row offset/count and signed-control RLE |
| 0x0D | Clear 64000 screen bytes (handler present) |
| 0x0F | Full-image signed-control RLE |
| 0x10 | Raw 64000-byte image (handler present) |
The documented RLE uses positive controls for repeated values and negative controls for literal runs. The research establishes these operations but the supplied structural parser does not fully decode their payloads; consult the traced handlers before implementing a writer.
All seven examined files contain types 0x0B, 0x0C and 0x0F. No type 0x0E occurs. Slot counts are 148 for PUSHOVER, then 18, 56, 29, 12, 18 and 42 for CC0–CC5.
Notes
Early “level archive” descriptions and the proposed bytes-per-grid-cell meaning of header value 8 were superseded by the rendering-command investigation. Preserve the distinction between confirmed structural fields and incompletely documented payload encodings.
Source code
From pushover, the open-source browser port and its reverse-engineering notes:
- docs/formats/flx.md – reverse-engineering documentation
- tools/asset-convert/flx-explore.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!)