roomtest: L1 — данные уровня из сырого res2001.bin вместо хардкода
Отказ от room1_data.h: уровень читается из сырого blueprnt DAT 1.0 (applications/PoP/SDLPoP/data/LEVELS/res2001.bin, формат — Table 6 POP-DAT). - pop_level.c/.h: уровень грузится ОДИН раз в отдельную EMM-страницу (данные с offset 0x100, ISR-стаб в первых байтах — страница безопасна для W0-маппинга, как атласы). pop_room_load(room) извлекает комнату в массивы приложения (W2): fg[30] (тайл-код = байт & 0x1F, верхние биты-модификаторы пока отброшены, как делал render_room.py), bg[30] (raw) + срезы соседей для кромок — правый столбец left-комнаты (leftcol), верхний ряд down-комнаты (belowrow). pop_room_link() — связи для будущих переходов (L2/L3). - Рабочая копия ТЕКУЩЕЙ комнаты — в обычной памяти (W2, мутабельная: loose→ empty); страница уровня маппится в W0 только на время извлечения. - Проверено в MAME: комната 1 рисуется идентично. Данные сверены байт-в-байт (fg&0x1F, bg raw, leftcol из room5 совпали); belowrow теперь из реального room2 (links.down=2), а не из прежнего частично-выдуманного хардкода. - Память (small): DATA до 0xA260, стек от 0xBFFF — запас ~7.5КБ; EMM-страница уровня вне W1/W2. NB: res2001.bin берётся из клона SDLPoP (data/ в .gitignore) — как и генерация атласов через pop_pack_bg.py; в наш репозиторий сырой уровень не тащим. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -7,10 +7,12 @@ EXAMPLE := roomtest
|
||||
# CODE ~23КБ переполняет W1 и лезет в фиксированный DATA@0x8000 в huge).
|
||||
MEMORY ?= small
|
||||
EXTRA_FLAGS ?= --gfx 256
|
||||
EXTRA_SRCS := pop_bg.c pop_kid.c pop_ctrl.c pop_map.c
|
||||
EXTRA_SRCS := pop_bg.c pop_kid.c pop_ctrl.c pop_map.c pop_level.c
|
||||
|
||||
BG_DIR := $(CURDIR)/../poc/res/bg
|
||||
KID_DIR := $(CURDIR)/../poc/res/kid
|
||||
LVL_DIR := $(CURDIR)/../SDLPoP/data/LEVELS
|
||||
LVL_DATA := $(LVL_DIR)/res2001.bin
|
||||
BG_DATA := $(BG_DIR)/pop_env0.atl $(BG_DIR)/pop_env1.atl $(BG_DIR)/pop_env2.atl \
|
||||
$(BG_DIR)/pop_env3.atl $(BG_DIR)/pop_env4.atl \
|
||||
$(BG_DIR)/pop_wall.atl $(BG_DIR)/pop_fore.atl
|
||||
@@ -20,7 +22,7 @@ BG_DATA := $(BG_DIR)/pop_env0.atl $(BG_DIR)/pop_env1.atl $(BG_DIR)/pop_env2.
|
||||
KID_PAGES := $(foreach n,0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27,$(KID_DIR)/kid$(n).atl)
|
||||
KID_DATA := $(KID_PAGES) $(KID_DIR)/kid.pal
|
||||
|
||||
EXTRA_DATA := $(BG_DATA) $(KID_DATA)
|
||||
EXTRA_DATA := $(BG_DATA) $(KID_DATA) $(LVL_DATA)
|
||||
include $(PROJ_ROOT)/app.mk
|
||||
|
||||
TC := $(PROJ_ROOT)/applications/PoP/toolchain
|
||||
@@ -31,4 +33,4 @@ $(KID_DATA): $(TC)/pop_pack_kid.py $(TC)/pop_pack_bg.py
|
||||
kid_data.h: $(TC)/pop_extract_kid_data.py
|
||||
cd $(TC) && python3 pop_extract_kid_data.py
|
||||
|
||||
$(EXAMPLE).exe: pop_bg.c pop_bg.h pop_kid.c pop_kid.h pop_ctrl.c pop_ctrl.h pop_map.c pop_map.h kid_data.h room1_data.h $(BG_DATA) $(KID_DATA)
|
||||
$(EXAMPLE).exe: pop_bg.c pop_bg.h pop_kid.c pop_kid.h pop_ctrl.c pop_ctrl.h pop_map.c pop_map.h pop_level.c pop_level.h kid_data.h $(BG_DATA) $(KID_DATA) $(LVL_DATA)
|
||||
|
||||
Reference in New Issue
Block a user