#!/usr/bin/env python3 """ build_room_palette.py — сводит kid.pal (уже собран gen_kid_placeholder.py) + Floor + Wall тайлы в ОДНУ merged-палитру room.pal, грузимую ОДИН раз через gfx_pal_fload (см. poc.c) — экран показывает Kid и тайлы ОДНОВРЕМЕННО, значит их "свои" цвета обязаны жить в одной палитре (см. --seed-pal в toolchain/png_strip.py). На вход — только типы, которые Фаза 1 реально рисует (room_draw рисует только загруженные атласы; Floor/Wall — единственные твёрдые типы с нетривиальной картинкой заглушки, см. gen_tile_placeholders.py draw_floor_like/draw_wall_like). Остальные 30 типов из Фазы 1 исключены полностью (не грузятся, не рисуются, PORT_PLAN.md §5) — добавить сюда, когда понадобятся. Перезаписывает res/tiles/tile01.raw/.atl (Floor) и tile14.raw/.atl (Wall, TILE_WALL=0x14 — room.c ищет "tile%02x.atl" ОБЯЗАТЕЛЬНО в hex, не decimal!) с индексами палитры, согласованными с kid.pal; пишет kid+floor+wall.pal рядом с kid.pal (poc.c грузит её вместо отдельной kid.pal). """ import subprocess import sys from pathlib import Path HERE = Path(__file__).resolve().parent PROJ_ROOT = HERE.parents[3] TILES_DIR = HERE.parent / "res" / "tiles" PNG_STRIP = PROJ_ROOT / "toolchain" / "png_strip.py" MKATLAS = PROJ_ROOT / "toolchain" / "mkatlas.py" ROOM_TILE_W = 32 ROOM_ROW_H = 64 KID_PAL = HERE / "kid.pal" OUT_PAL = HERE / "room.pal" TYPES = [0x01, 0x14, 0x03, 0x13, 0x0E, 0x0B] # Floor, Wall, Pillar, Torch, Debris, Loose # (2026-07-16: временное ограничение до 2 типов снято — корень # вероятностного "снега" найден: tile_atlas_load()/room_draw() трогали # W3 транзитивно (через atlas_load/gfx_blit_part) ИЗ БАНКА, который сам # живёт в W3 — конфликт. Обе функции переехали в room_draw.c (HOME), # см. её шапку.) def run(cmd): print("+", " ".join(str(c) for c in cmd)) subprocess.run([str(c) for c in cmd], check=True) def main(): if not KID_PAL.exists(): sys.exit(f"build_room_palette: нет {KID_PAL} — сначала gen_kid_placeholder.py") seed = KID_PAL for t in TYPES: base = f"tile{t:02x}" # room.c ищет "tile%02x.atl" — hex, не decimal png = TILES_DIR / f"{t:X}-0.png" raw = TILES_DIR / f"{base}.raw" pal = TILES_DIR / f"{base}_merged.pal" atl = TILES_DIR / f"{base}.atl" run([sys.executable, PNG_STRIP, raw, pal, png, "--canvas", f"{ROOM_TILE_W}x{ROOM_ROW_H}", "--anchor", "top-left", "--seed-pal", seed]) run([sys.executable, MKATLAS, atl, f"{raw}:{ROOM_TILE_W}x{ROOM_ROW_H}:1x1"]) seed = pal import shutil shutil.copyfile(seed, OUT_PAL) print(f"build_room_palette: итоговая палитра -> {OUT_PAL}") if __name__ == "__main__": main()