237f780e0e
Kid — высокий спрайт: голова/руки торчат в ряд выше опорного, floor/wall там должны перекрывать его. Сверено с SDLPoP (seg003 redraw_at_char2 + seg008 draw_tile_fore/draw_other_overlay/draw_floor_overlay): - fore_tile (draw_tile_fore): стена рисует и WALL_FRAM_BOTTOM (нижняя грань-решётка), не только MAIN — руки при прыжке в потолок [2,7]->[1,7] уходят за стену; - диапазон рядов форсит включение ряда над опорным (y_to_row верха спрайта мог схлопнуться из-за +60-сдвига); - other_overlay_tile (draw_other_overlay): на КРОМКЕ пола (сосед слева пуст) перерисовать весь тайл поверх Kid — но ТОЛЬКО в позах захвата (78-79), виса (action 2/6), полёта (3/4), старта падения (bumped 102-106) и начала подъёма (135/136, до SEQ_UP на 141 Kid ещё в ряду ПОД полом). Гейтинг как в redraw_at_char2 — при стоянии/беге ложной окклюзии нет; - отладочный стоп-кадр: '1' заморозить / '2' продолжить (для разбора поз). Проверено в MAME (пользователь): прыжок-в-потолок, короткий прыжок, спрыгивание, подъём на [0,3] — окклюзия корректна. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
40 lines
2.3 KiB
C
40 lines
2.3 KiB
C
/*
|
|
* pop_bg.h — отрисовка СТАТИЧЕСКОГО фона комнаты PoP композицией слоёв
|
|
* (порт seg008.c draw_tile/wall_pattern, Шаг 3). Рисует прямо в текущую
|
|
* страницу (banked GFX_BANK_TRANSPARENT — в видео-ОЗУ + теневую копию,
|
|
* 0xFF прозрачен), ОДИН раз при входе в комнату.
|
|
*
|
|
* Данные: getimage-спрайты в атласах pop_env0..4/pop_wall/pop_fore
|
|
* (toolchain/pop_pack_bg.py), палитра pop_bg.pal. Прямая адресация
|
|
* id: env[id>>5] idx id&31, wall idx=id, fore idx=id — ноль remap-таблиц.
|
|
*/
|
|
#ifndef POP_BG_H
|
|
#define POP_BG_H
|
|
|
|
#include <stdint.h>
|
|
|
|
/* Загрузить 7 атласов фона. Звать ДО initgraph (как poc.c — atlas_load
|
|
* трогает W3; проверенный порядок). Палитру pop_bg.pal грузит ПРИЛОЖЕНИЕ
|
|
* после initgraph (gfx_pal_fload). 0 — OK, -1 — ошибка. */
|
|
int pop_bg_load(void);
|
|
|
|
/* Освободить EMM-страницы атласов. */
|
|
void pop_bg_free(void);
|
|
|
|
/* Нарисовать комнату: fg[30]/bg[30] — foretable-коды/backtable-модификаторы
|
|
* (по строкам, row*10+col). lcol_fg/lcol_bg — 3 тайла правого столбца
|
|
* ЛЕВОЙ соседней комнаты (для границы, напр. решётки ворот), или 0 —
|
|
* тогда левая кромка = стена. room_num — номер комнаты (зерно стен). */
|
|
void pop_room_draw(uint8_t room_num,
|
|
const uint8_t *fg, const uint8_t *bg,
|
|
const uint8_t *lcol_fg, const uint8_t *lcol_bg);
|
|
|
|
/* Перерисовать передний слой (fore) тайлов футпринта Kid ПОВЕРХ него —
|
|
* звать ПОСЛЕ kid_draw. obj_x — ЛОГИЧЕСКАЯ X кадра (до ×8/7), obj_y — низ
|
|
* спрайта, w/h — размер кадра, dir — направление Kid (<0 влево). Метрики
|
|
* берутся из pop_kid (kid_fp_*). См. redraw_at_char/set_char_collision. */
|
|
void pop_fore_over_kid(int obj_x, int obj_y, uint16_t w, uint16_t h,
|
|
int8_t dir, uint8_t frame, uint8_t action);
|
|
|
|
#endif
|