In Python 2, b'asdf'[0] returns b'a', but in Python 3, it returns 97, which is
the result of ord(b'a'). In other words, there are a lot of ord() calls that
are now unnecessary for Python 3 but still necessary for Python 2.
This can be resolved by using b'asdf'[0:1], which returns b'a' in both versions.
Before, converting a .2bpp.lz file required calling decompress and convert_to_png
on the compressed and decompressed files respectively.
gfx.py unlz {}.lz
gfx.py png {}
Putting a .lz file into convert_to_png would raise an exception.
Instead, passing compressed graphics into convert_to_png will decompress them first.
This skips the (now optional) manual decompress step.
- Use argparse and less redundant commands.
- Make .lz independent of content. Allows tilemaps to not be images.
- Add .[w]x[h] filename argument for transposed images.
- Add .interleave filename argument for 8x16 sprites.
- Refactor some conversion code.
Some images do not occupy a full tile.
In pokered, gfx/minimize_pic.1bpp is 8x5. This is still rectangular.
Previously, converting this image would cause an error.
png has some incompatibilities with 2bpp. Among them:
- 2bpp is tiled, and can be arranged arbitrarily
- 2bpp does not have associated palette data
- png must be rectangular
- png must have specific dimensions
The requirements for an image vary, and are unwritten. One conversion method will not work for all images.
To resolve these conflicts metadata can be attached to images and related data.
So as to not create additional files without changing the file content, the filename is used.
Usage: metadata is defined as pseudoextensions.
.w<width>
- force width to <width> px
.h<height>
- force height to <height> px
.t<num>
- pad the image by <num> tiles so the resulting png can be rectangular
- remove said tiles when converting back to 2bpp
Example:
gfx/title/logo.w160.t4.{lz,2bpp,png}
- width 160px
- pad by 4 tiles
PointerLabelParam.to_asm() returns a label by default.
If no label exists, instead return a bank and address.
This will not compile (maybe it ought to), but it
simplifies debugging.