"""Synthetic whole-animation dormant admission; no real art/engine/registrar main.""" import copy import hashlib import json import os from pathlib import Path import struct import subprocess import sys import tempfile import unittest from unittest.mock import patch from PIL import Image import hd_dormant_enemy_review as dormant import hd_register_reviewed as registrar from hd_candidate_review import binding_digest class DormantEnemyAnimationTests(unittest.TestCase): def setUp(self): self.temp = tempfile.TemporaryDirectory() self.addCleanup(self.temp.cleanup) self.project = Path(self.temp.name) / "Renamed 游戏 bundle" self.data = self.project / "data" self.root = self.data / "hd" self.directory = self.root / "jobs/dormant" for p in [self.directory / "raw", self.root / "proof", self.data / "sprites", self.data / "misc", self.data / "maps", self.project / "src", self.project / "target"]: p.mkdir(parents=True, exist_ok=True) for name in ["assets", "content", "simulation", "hd"]: (self.project / f"src/{name}.rs").write_text(f"synthetic {name} Source gate fixture") gates = {p: self.sha(self.project / p) for p in dormant.SUPPORTED_GATE_SOURCES} gate_patch = patch.dict(dormant.SUPPORTED_GATE_SOURCES, gates, clear=True) gate_patch.start() self.addCleanup(gate_patch.stop) lib = self.project / "target/fixture.rlib" lib.write_bytes(b"synthetic immutable library, not an actual game execution") os.utime(lib, ns=(2_000_000_000_000_000_000,) * 2) palette = self.data / "misc/PALETTE_DAT" palette.write_bytes(bytes(v // 4 for v in range(256) for _ in range(3))) self.index = [(1, "misc/PALETTE_DAT")] self.assets = [f"{0x100+i:05x}" for i in range(6)] self.rows, targets, reports, artwork = {}, [], [], {} for i, asset in enumerate(self.assets): route = "sprites/DORMANT_PIC" + (f".{i}" if i else "") source = self.data / route source.write_bytes(struct.pack("<5i", 1, 0, 0, 4, 4) + bytes([i+1] * 16)) self.index.append((0x100+i, route)) target = dict(asset=asset, source_path=route, source_sha256=self.sha(source), logical_canvas=[4, 4], origin=[0, 0], source_palette="PALETTE_DAT", source_palette_sha256=self.sha(palette)) targets.append(target) raw = self.directory / f"raw/{asset}.png" Image.new("RGBA", (8, 8), (4*(i+1),)*3 + (255,)).save(raw) frame = dict(frame=i, file=f"jobs/dormant/raw/{asset}.png", logical_width=4, logical_height=4, origin=[0, 0], source_sha256=self.sha(source), original_detail_cells=[[0, 0]]) self.rows[asset] = frame artwork[frame["file"]] = self.sha(raw) mask = dict(palette_indices_240_to_255_counts=[0]*16, visible_pixels=16) reports.append(dict(asset=asset, source_sha256=frame["source_sha256"], logical_canvas=[4, 4], source_mask=mask, source_palette="PALETTE_DAT", hd_masks=[dict(scale=k, mask=mask) for k in range(1, 5)])) self.sprite = bytearray(528) self.sprite[:11] = b"DORMANT_PIC" struct.pack_into("