Files
Sprinter-SDCC/applications/PoP/roomtest/pop_ctrl.h
T
snark13 cd8d566d82 applications/PoP: порт Prince of Persia — PoC (roomtest) + пайплайн
Порт PoP на Sprinter.  Текущий PoC — applications/PoP/roomtest/:
комната 1 (фон-композиция тайлов) + Kid с управлением на raw-клавиатуре
и коллизией с картой.

- roomtest — pop_bg (фон), pop_kid (спрайты Kid, column-major флип,
  seqtbl-анимация), pop_ctrl (порт control() PoP на held-state
  kbd_raw), pop_map (коллизия seg004/005: бег/стоп у стены,
  падение/приземление, отскок seq_47, вертикальный прыжок K4.1).
  MEMORY=small (DATA сразу за CODE, ~23КБ кода не лезет в huge).
- toolchain (PoP) — pop_pack_kid/pop_pack_bg/render_room/extract —
  распаковка res-графики MSDOS в атласы + композиция комнат.
- toolchain/ (корень) — make_hdd.sh (быстрый HDD-тест вместо FDD),
  png_strip.py / room_compose.py (ассет-пайплайн).
- docs — PORT_PLAN, KID_PLAN, форматы ресурсов (Apple II / MSDOS / DAT).
- bgtest/coltest/poc — ранние PoC (фон, коллизия, первый прототип).

.gitignore: build-артефакты applications/*/*/*; исключены внешние
референс-репозитории (SDLPoP/mininim/PR/Apple-II — свои git-клоны) и
оригинальные game-данные MSDOS/ (копирайт, только для реверса форматов).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 17:51:08 +03:00

32 lines
1.7 KiB
C

/*
* pop_ctrl.h — управление Kid (Фаза K2b): порт диспетчера control()
* (SDLPoP seg005.c) + модель ввода read_user_control/user_control
* (seg006.c) поверх held-state клавиатуры <kbd_raw.h>.
*
* Kid-only подмножество: без меча и стражи. Map-запросы (стена/край/
* захват) ЗАСТАБЛЕНЫ «открытый пол» — реальная коллизия (стоп у стены,
* падение в ямы, повисание) приходит в K3/K4. Даёт отклик на клавиши:
* бег влево/вправо, разворот, стоп, присед, прыжок с места, прыжок в
* беге, присед-прыжок.
*
* Раскладка (kbd_raw, PS/2 Set 2): ←/→ = движение, ↓ = присед, ↑ =
* прыжок вверх (с →), Shift = осторожный шаг (K3). ESC — выход (проверяет
* приложение сам, канал raw забирает весь ввод у DSS).
*/
#ifndef POP_CTRL_H
#define POP_CTRL_H
#include <stdint.h>
/* Открыть raw-канал клавиатуры и обнулить память авто-повтора.
* 0 — OK, -1 — ошибка (EBUSY и пр., см. kbd_raw_open). */
int pop_ctrl_init(void);
void pop_ctrl_close(void);
/* Один кадр ввода: прочитать клавиши -> обновить control_* -> прогнать
* диспетчер control() (может сменить Kid.curr_seq). Звать ПЕРЕД
* kid_tick() (play_seq продолжит с новой последовательности). */
void pop_ctrl_tick(void);
#endif