Pushover Ant Animation Format
| Format type | Image |
|---|---|
| Hardware | EGA, VGA |
| Colour depth | 4-bit colour + transparency |
| Minimum size (pixels) | Unknown |
| Maximum size (pixels) | Unknown |
| Palette | External |
| Plane count | 5 |
| Transparent pixels? | Yes |
| Hitmap pixels? | No |
| Games |
DATA/ANT00_16.ANX, ANT17_30.ANX, ANT31_46.ANX and ANT47_65.ANX contain G.I. Ant’s animation graphics in Pushover. Decompress RNC first.
File format
| Data type | Name | Description |
|---|---|---|
| UINT16BE | frameCount | Number of frames in this block |
| INT8[frameCount] | yOffsets | Per-frame vertical offsets |
| BYTE[frameCount % 2] | padding | Round offset table length to an even number |
| FRAME[frameCount] | frames | Frames in the shared SPX bitmap layout |
Blocks are concatenated with no file-level directory. Each FRAME uses the two-byte header, placement mask and five-plane bitmap described in Pushover Sprite Format. Its byte size is 2 + widthUnits * 2 * height * 5. After the final frame, the next big-endian count starts the next block.
The signed offset byte is a vertical positioning adjustment, not a frame-duration field. The documented body anchor is X = column * 16 + 8, Y = row * 16 + 6 + frameOffset + activityAdjustment. The blitter subtracts height from Y for the top edge.
Pose numbering
The filenames describe pose ranges, but not every pose has a separately stored block. Some states reverse or alias previously loaded frames. Use the port's pose-mapping tables instead of assigning one consecutive pose number to every block. The export pipeline resolves 66 poses; its pose-32 alias is explicitly an approximation of a more complicated original construction.
Notes
Frame timing belongs to the executable’s animation state machine. The low width bits alone are insufficient for positioning, and treating the per-frame offset table as timing data produces incorrect movement.
Source code
From pushover, the open-source browser port and its reverse-engineering notes:
- docs/formats/ant-sprites.md – reverse-engineering documentation
- docs/formats/ant-rendering.md – reverse-engineering documentation
- tools/asset-convert/anx-decode.js – decoder / format implementation
- tools/asset-convert/export-viewer-data.js – decoder / format implementation
- tools/lib/sprite-unit-mask.js – shared frame placement
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!)