"""Offline-only texture packing; runtime generation/rendering stays MASM.""" from pathlib import Path import struct from PIL import Image, ImageDraw, ImageFont ROOT = Path(__file__).resolve().parents[2] def main(): source = ROOT / 'assets/sprites/backrooms' frames = [] for name in ('wall', 'floor', 'ceiling', 'ceiling_lamp'): image = Image.open(source / f'Backrooms_{name}.jpg').convert('RGBA') image = image.resize((128, 128), Image.Resampling.LANCZOS) frames.append(image.tobytes('raw', 'BGRA')) # Exit is an offline-generated material, not a second game implementation. image = Image.new('RGBA', (128, 128), (36, 60, 38, 255)) draw = ImageDraw.Draw(image) draw.rectangle((9, 4, 119, 127), fill=(61, 84, 55), outline=(143, 160, 98), width=5) # Eye-level sign stays visible even when standing in the exit cell. draw.rectangle((18, 45, 110, 73), fill=(32, 170, 77)) font = ImageFont.truetype('arialbd.ttf', 23) draw.text((64, 59), 'EXIT', fill='white', font=font, anchor='mm') draw.rectangle((94, 76, 99, 82), fill=(240, 211, 101)) frames.append(image.tobytes('raw', 'BGRA')) out = source / 'materials.bin' out.write_bytes(struct.pack('<5I', 0x314D4E41, 128, 128, len(frames), len(frames)*65536) + b''.join(frames)) print(f'Packed {len(frames)} Backrooms materials: {out.relative_to(ROOT)}') if __name__ == '__main__': main()