"""Pack the graphical studio ident for the MASM renderer (offline only).""" import argparse import json import struct from pathlib import Path from PIL import Image def main(): parser = argparse.ArgumentParser() parser.add_argument("--source", type=Path, default=Path("assets/sprites/intro/eblan-games-v1.png")) parser.add_argument("--output", type=Path, default=Path("assets/animations/intro/eblan-games.bin")) args = parser.parse_args() image = Image.open(args.source).convert("RGB") if abs(image.width / image.height - 4 / 3) > 0.02: raise ValueError("The intro must use a 4:3 composition, not a stretched crop") image = image.resize((640, 480), Image.Resampling.LANCZOS).convert("RGBA") payload = image.tobytes("raw", "BGRA") args.output.parent.mkdir(parents=True, exist_ok=True) args.output.write_bytes(struct.pack("<4sIII", b"EBG1", 640, 480, len(payload)) + payload) print(json.dumps({"output": str(args.output), "size": args.output.stat().st_size})) if __name__ == "__main__": main()