63a3b60524
Фича — плита-ПОТОЛОК (loose ряда 2 комнаты сверху, комн.5 (2,5) над комн.6): - check_press (seg006:1683) портирован целиком: кадры виса 87..99 и подъёма 135..140 «нажимают» тайл, за который Kid держится; кадр 79 — удар снизу (с проверкой action, как в оригинале); стояние — тайл под ним; - ряд −1 в pop_map.get_tile = ряд 2 комнаты сверху (порт find_room_of_tile), состояние тряски/падения — pop_ceil_modif[10]; do_knock(-1) трясёт потолок; - падение: mob переведён на координаты оригинала (y_loose_land/y_something), спавнится в ряду −1, по move_loose находит пол → loose_land: debris + do_knock; heal коридора — по прошлой позиции ДЛЯ КАЖДОЙ страницы; - урон: check_loose_fall_on_kid + fell_on_your_head (seq_52/seq_22, −1 HP) и «брызги» draw_hurt_splash (kid image 218); - колодец наверх: leave_room «вверх» проверяется ПЕРВЫМ (иначе y≈248 при подтягивании ловил check_leave_below и ронял Kid из уровня); - персистентность: общий tile-override (щебень внизу, пустота в комнате сверху) вместо debris-only. Окклюзия — приведена к оригиналу (найдено трассировкой собранного SDLPoP): - draw_tile_right/anim_right/draw_loose кладут спрайты в add_backtable НАПРЯМУЮ, минуя ptr_add_table → правая грань соседа («шахматка» столба 93), blueline и грани loose/пик соседа ВСЕГДА под персонажем. draw_other_overlay поверх Kid даёт только: 42 при левом соседе-поле, base, свои пики, bottom (overlay_mid_tile); - порядок объектов: тайл Kid (set_objtile_at_char) и порядок обхода (ряды 2→0, колонки 0→9), внутри тайла — сортировка по y (sort_curr_objs); то же правило для падающей плиты (pop_loose_mob_draw_over); - fore-слой рисуется ПОСЛЕ оверлеев (foretable после midtable), иначе тёмный скос floor_left_overlay ложился поверх колонны; - fore_tile больше не рисует bottom_id (в оригинале он в backtable) — минус 2..4 блита за кадр; - полоса потолка поверх Kid = draw_tile_bottom(1)+draw_loose(1)+draw_tile_fore (arg_0=1 добавляет в foretable), остальное — под ним; - следы оверлея восстанавливаются на ОБЕИХ страницах (pop_fore_heal). Прочее: - control(): при action bumped/in_freefall управление игнорируется целиком (seg005) — иначе прерванный присед терял dy(1)+dy(1) из medland и Kid навсегда оставался на 2px выше пола; - check_bumped: стена ищется по колонке переднего края (а не curr_col) + гард разворота — Kid больше не проходит сквозь опущенную решётку шва; - pop_floor_bake для смены floor→debris (bake_empty стирал верх стены ряда ниже — чёрный прямоугольник); - в pop_room_redraw_seam_left восстанавливается полоса потолка над решёткой. Проверено в MAME (bridge); эталон — собранный SDLPoP из applications/PoP/SDLPoP. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
37 lines
2.0 KiB
Makefile
37 lines
2.0 KiB
Makefile
# roomtest — проверка порта статического фона PoP (Шаг 3): реальная
|
|
# композиция слоёв (pop_bg.c) для комнаты 1. --memory huge --gfx 256.
|
|
|
|
PROJ_ROOT := $(abspath $(CURDIR)/../../..)
|
|
EXAMPLE := roomtest
|
|
# small: W1+W2 как единое 32КБ-пространство, DATA сразу за CODE (иначе
|
|
# CODE ~23КБ переполняет W1 и лезет в фиксированный DATA@0x8000 в huge).
|
|
MEMORY ?= small
|
|
EXTRA_FLAGS ?= --gfx 256 --w3 pop_trob.c --w3 pop_map.c pop_bg.c
|
|
EXTRA_SRCS := pop_kid.c pop_ctrl.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
|
|
# ВСЕ 28 страниц Kid — иначе кадры торможения/разворота/приседа (image>23)
|
|
# не рисуются (kid_draw пропускает незагруженную страницу). Палитра —
|
|
# ЕДИНАЯ игровая (env+wall+kid).
|
|
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) $(LVL_DATA)
|
|
include $(PROJ_ROOT)/app.mk
|
|
|
|
TC := $(PROJ_ROOT)/applications/PoP/toolchain
|
|
$(BG_DATA): $(TC)/pop_pack_bg.py $(TC)/render_room.py
|
|
cd $(TC) && python3 pop_pack_bg.py
|
|
$(KID_DATA): $(TC)/pop_pack_kid.py $(TC)/pop_pack_bg.py
|
|
cd $(TC) && python3 pop_pack_kid.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 pop_level.c pop_level.h pop_trob.c pop_trob.h kid_data.h $(BG_DATA) $(KID_DATA) $(LVL_DATA)
|