/*
 * 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 <stdint.h>

/* Состояние персонажа (подмножество 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
