/* * pop_kid.h — движок анимации/движения Kid (Фаза K1): интерпретатор * seqtbl (play_seq) + frame_table. Порт SDLPoP seg006.c. Данные — * kid_data.h (pop_extract_kid_data.py). * * K1: только проигрывание последовательностей кадров с авторскими * смещениями (движение = SEQ_DX/DY + frame.dx/dy). Управление (K2) и * коллизия карты (K3) — отдельно. */ #ifndef POP_KID_H #define POP_KID_H #include /* Состояние персонажа (подмножество char_type, types.h). */ typedef struct { uint8_t frame; uint8_t x, y; int8_t direction; /* -1 влево, 0 вправо */ int8_t curr_col, curr_row; uint8_t action; int8_t fall_x, fall_y; uint8_t repeat; uint16_t curr_seq; /* адрес в seqtbl (база SEQTBL_BASE) */ } kid_t; extern kid_t Kid; /* Загрузить npages атласов Kid (kid0..kid{npages-1}.atl). ДО initgraph. * 0 — OK, -1 — ошибка. */ int pop_kid_load(uint8_t npages); void pop_kid_free(void); /* Инициализировать Kid: последовательность seq_id, клетка col/row, * направление dir (-1/0). Ставит x/y по x_bump/y_land. */ void kid_init(uint8_t seq_id, int8_t col, int8_t row, int8_t dir); /* Один логический тик: play_seq() — продвинуть последовательность до * следующего кадра (применить SEQ_DX/DY/ACTION/...). */ void kid_tick(void); /* play_seq напрямую (для pop_map start_fall — переход в fall-seq в тот же * physics-шаг, как оригинал). */ void play_seq(void); /* Поля текущего кадра kid_frames[Kid.frame] (pop_map, без дублирования * таблицы во втором TU). */ int8_t kid_cur_dx(void); uint8_t kid_cur_flags(void); /* Сменить последовательность (Kid.curr_seq = kid_seq_off[seq_id]) — единая * точка для pop_ctrl/pop_map (иначе каждый дублировал бы kid_seqtbl ~2.3КБ). */ void kid_set_seq(uint8_t seq_id); /* Нарисовать текущий кадр Kid (банк GFX_BANK_SPRITE — видео-ОЗУ, без * теневой копии; запоминает прямоугольник для kid_heal). */ void kid_draw(void); /* Восстановить фон (из теневой копии) на месте ПРЕДЫДУЩЕГО кадра Kid — * вместо перерисовки всего экрана. Звать ПЕРЕД kid_tick/kid_draw. */ void kid_heal(void); /* Метрики последнего kid_draw для футпринта fore-over-Kid (pop_bg * pop_fore_over_kid): obj_x — ЛОГИЧЕСКАЯ X кадра (до ×8/7), obj_y — низ * спрайта, w/h — размер кадра. */ int kid_fp_obj_x(void); int kid_fp_obj_y(void); uint16_t kid_fp_width(void); uint16_t kid_fp_height(void); #endif