cd8d566d82
Порт PoP на Sprinter. Текущий PoC — applications/PoP/roomtest/: комната 1 (фон-композиция тайлов) + Kid с управлением на raw-клавиатуре и коллизией с картой. - roomtest — pop_bg (фон), pop_kid (спрайты Kid, column-major флип, seqtbl-анимация), pop_ctrl (порт control() PoP на held-state kbd_raw), pop_map (коллизия seg004/005: бег/стоп у стены, падение/приземление, отскок seq_47, вертикальный прыжок K4.1). MEMORY=small (DATA сразу за CODE, ~23КБ кода не лезет в huge). - toolchain (PoP) — pop_pack_kid/pop_pack_bg/render_room/extract — распаковка res-графики MSDOS в атласы + композиция комнат. - toolchain/ (корень) — make_hdd.sh (быстрый HDD-тест вместо FDD), png_strip.py / room_compose.py (ассет-пайплайн). - docs — PORT_PLAN, KID_PLAN, форматы ресурсов (Apple II / MSDOS / DAT). - bgtest/coltest/poc — ранние PoC (фон, коллизия, первый прототип). .gitignore: build-артефакты applications/*/*/*; исключены внешние референс-репозитории (SDLPoP/mininim/PR/Apple-II — свои git-клоны) и оригинальные game-данные MSDOS/ (копирайт, только для реверса форматов). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
76 lines
3.3 KiB
Python
76 lines
3.3 KiB
Python
#!/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()
|