/*
 * pop_map.h — коллизия Kid с картой комнаты (Фаза K3): тайловые запросы
 * + физика падения + приземление.  Порт SDLPoP seg005/seg006
 * (check_on_floor/start_fall/do_fall/fall_accel/fall_speed/land/in_wall).
 *
 * K3.2 (падение): Kid, сойдя/сбежав с края пола (тайл под ним не floor),
 * начинает падать (fall_y-ускорение, Char.y растёт), приземляется на пол
 * ниже (soft/medium land) или продолжает вниз.  Стена под персонажем —
 * in_wall (выталкивание).  Бег В стену (check_bumped) — отдельным шагом.
 */
#ifndef POP_MAP_H
#define POP_MAP_H

#include <stdint.h>

/* Задать карту текущей комнаты: fg[30] = коды тайлов (row*10+col, 3×10).
 * col<0/>9 или row<0/>2 трактуются как стена (край уровня). */
void pop_map_set(const uint8_t *fg);

/* Установлен в 1, когда Kid упал ниже комнаты (комнаты снизу нет в этом
 * тесте).  Приложение должно сбросить Kid (kid_init) и снять флаг. */
extern uint8_t pop_fell_out;

/* Пер-кадровая физика ПОСЛЕ kid_tick(play_seq): fall_accel + fall_speed +
 * determine_col + check_action (триггер падения / do_fall / приземление).
 * Порядок как в оригинале (seg000 play_kid_frame). */
void pop_phys_tick(void);

/* Тип препятствия/края ВПЕРЕДИ по направлению (pop_edge_type после
 * pop_edge_distance): для control (бежать / осторожный шаг / стоп у стены). */
#define EDGE_CLOSER  0   /* край уступа над ямой (дистанция = до кромки)   */
#define EDGE_WALL    1   /* стена впереди/под персонажем                   */
#define EDGE_FLOOR   2   /* пол (нет препятствия рядом, дистанция = 11)     */

/* Расстояние до края/стены впереди + побочно g_edge_type (pop_edge_type). */
int     pop_edge_distance(void);
uint8_t pop_edge_type(void);

/* Стена впереди в пределах стопа? Если да — прижимает Kid.x к корректной
 * позиции (передний край у стены, симметрично) и возвращает 1.  Для
 * control_running (чистый стоп у стены). */
int     pop_wall_ahead(void);

/* Прыжок вверх в стойке (↑): seq чистого прыжка (seq_28/seq_14) ЛИБО
 * прыжка-с-зацепом за уступ выше (seq_8/24/16) + выравнивание Kid.x.
 * check_jump_up/grab_up (K4.4).  control_up гасит caller. */
uint8_t pop_jump_up_seq(void);

/* ---- Вис/зацеп/спуск (K4.2/K4.3) — тайловые решения для pop_ctrl --- *
 * Управление (control_hanging/can_climb_up/hang_fall/down_pressed) в
 * pop_ctrl; здесь — предикаты + выбор seq (+ выравнивание Kid.x). */
uint8_t pop_hang_grab_ready(void);   /* grab_timer истёк — можно climb-up   */
uint8_t pop_hang_climb_up_seq(void); /* seq_10 / seq_73 (подтягивание)       */
int8_t  pop_hang_wall(void);         /* Shift в висе: 1=у стены,-1=fall,0=держ.*/
uint8_t pop_hang_fall_seq(void);     /* seq_23 / seq_11 (сорваться), +Kid.x  */
uint8_t pop_down_action(void);       /* 1=обработано(спуск/отступ), 0=присед */

#endif
