76f02e76db
Приводим клавиши к keys.txt (раскладка SDLPoP). Работа делится надвое, и
здесь только то, что не трогает игровую логику: переназначения (A) и три
мелкие функции поверх готовых механизмов (B). Читы, требующие правки
логики, и осмотр соседних комнат — фазы C и D, отложены.
ПЕРЕНАЗНАЧЕНИЯ (A)
U -> Shift+I переворот экрана; U отдан «комнате сверху»
Esc -> Backspace меню; Esc остаётся дублёром, как у SDLPoP
F7 / F8 -> - / + ±минута, основной ряд и цифровой блок
- / + -> Ctrl+- / Ctrl++ обход комнат (наш отладочный телепорт)
I -> Ctrl+I бессмертие
P -> Ctrl+P режим скорости
1 и 2 -> Ctrl+F стоп-кадр, теперь одной клавишей
F10 в игре -> Ctrl+Q вторая клавиша выхода; F10 ловится глобально
Плюс новое на готовых путях: Ctrl+A — рестарт уровня, Ctrl+V — версия
сборки (функция была, её показывал только старт), Ctrl+D — отладочная
строка (тот же тумблер, что в Settings; POP.CFG не пишем), Home / Page Up —
дублёры диагональных прыжков (у SDLPoP это не отдельное действие, а те же
Up+Left / Up+Right, поэтому просто добавляются к стрелкам).
Все наши сверхштатные клавиши ушли под Ctrl, чтобы не занимать голые буквы
из раскладки, и вписаны в keys.txt отдельным разделом. Ctrl+B намеренно
не занята: keys.txt держит её под «вернуться в комнату Кида» (фаза D).
ФУНКЦИИ (B)
Space «сколько осталось» (seg000:612). Не печатает сама: поднимает тот
же pop_show_time, которым пользуется автоматическое объявление
минут, и строку собирает time_msg() — «59 MINUTES LEFT» и «11
SECONDS LEFT» остаются в одном месте.
T постоянный показ таймера. Переиспользует поле DBG_F_TIME
отладочной строки, своего рендера нет. У верхней полосы теперь
три состояния, и отслеживается РЕЖИМ (0 нет / 1 таймер / 2 всё),
а не флаг: переход «таймер -> полоса» тоже перерисовывает всё.
Ctrl+R возврат в заставку — тот же переход, что «Restart Game» в меню.
ДВЕ ЛОВУШКИ, найденные по дороге
Модификатор обязан входить в САМО значение, а не в условие блока: с
`if (ctrl) { nav = ...; nav_prev = nav; }` при отпускании Ctrl кромка
застревала ненулевой и следующее нажатие глохло.
Один скан-код на два чита: Shift+I и Ctrl+I — это 0x43 в обоих случаях.
По той же причине ±минута требует ОТПУЩЕННОГО Ctrl (иначе сработает и
время, и обход комнат), а T — отпущенных Shift и Ctrl (Shift+T отдан
«добавить HP» в фазе C).
Обработчики положены в pop_frame_ui (банк 8), а не в резидент: там куча
всего 308 байт. Проверено в MAME: Ctrl+D поднимает строку
«Level 1, Room 1, Speed: NORMAL...», T — один таймер 59:30 без подписей,
Space — watchpoint на pop_show_time ловит запись значения 2 (именно
обработчик клавиши, автообъявление пишет 1).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
79 lines
2.7 KiB
Plaintext
79 lines
2.7 KiB
Plaintext
* Left: turn or run left
|
|
* Right: turn or run right
|
|
* Up: jump or climb up
|
|
* Down: crouch or climb down
|
|
* Down+Left/Right: hop
|
|
* Shift: pick up things
|
|
* Shift+Left/Right: careful step
|
|
* Home or Up+Left: jump left
|
|
* Page Up or Up+Right: jump right
|
|
* Up while running: running jump
|
|
* Shift while falling: grab onto ledge
|
|
|
|
* Left/Right: walk (advance or retreat)
|
|
* Shift: strike (attack)
|
|
* Up: block (defend)
|
|
* Down: put sword away; press Shift to draw your sword again.
|
|
|
|
===
|
|
|
|
* Esc: Pause game.
|
|
* Space: Show how much time is left.
|
|
* Ctrl+A: Restart level.
|
|
|
|
* Ctrl+R: Return to intro.
|
|
* Ctrl+S: Sound on/off.
|
|
* Ctrl+M: Music on/off.
|
|
* Ctrl+V: Show version of SprPoP.
|
|
* Ctrl+Q / F10: Quit game.
|
|
|
|
* F6: Quicksave: Save the exact state of the game.
|
|
* F9: Quickload: Load what the last quicksave saved.
|
|
* F12: Save a screenshot to the screenshots folder (optional - можно пока не делать).
|
|
* Backspace: Display the in-game menu. (Esc will also display the menu by default, but you can turn that off.)
|
|
|
|
* Shift+L: Go to next level.
|
|
* -: Decrease remaining time by one minute. (Both the main row and the keypad.)
|
|
* +: Increase remaining time by one minute. (Both the main row and the keypad.)
|
|
* R: Resurrect kid.
|
|
* K: Kill guard.
|
|
* Shift+I: Flip the screen upside down.
|
|
* Shift+W: Slow falling.
|
|
* Shift+S: Restore a lost hit-point. (Like a small red potion.)
|
|
* Shift+T: Give more hit-points. (Like a big red potion.)
|
|
|
|
===
|
|
|
|
* H: Look at the room to the left.
|
|
* J: Look at the room to the right.
|
|
* U: Look at the room above.
|
|
* N: Look at the room below.
|
|
* Ctrl+B: Go back to the room where the prince is. (Undo H,J,U,N.)
|
|
|
|
===
|
|
|
|
* [: Shift kid 1 pixel to the left.
|
|
* ]: Shift kid 1 pixel to the right.
|
|
* T: Toggle display of timer (remaining minutes:seconds).
|
|
|
|
===
|
|
|
|
Sprinter-specific debug keys (not in the original; all under Ctrl so that no
|
|
plain letter is taken away from the layout above):
|
|
|
|
* Ctrl+I: Immortality, cycling off -> combat only -> combat and minor damage.
|
|
* Ctrl+P: Speed mode.
|
|
* Ctrl+F: Freeze / unfreeze the frame (was 1 and 2).
|
|
* Ctrl+D: Debug bar (level/room/... in the top border) on/off. Same switch
|
|
as the Settings screen has; the shortcut does not write POP.CFG,
|
|
saving stays with Settings.
|
|
(The per-phase colour profiling of the border is a different thing
|
|
and stays a build option: make PROF=1.)
|
|
* Ctrl++ / Ctrl+-: Teleport to the next / previous room by number (ROOMNAV).
|
|
The plain +/- belong to the timer, as in the original; the debug
|
|
walk moved onto the same keys under Ctrl so muscle memory keeps.
|
|
|
|
Note: Ctrl+B is deliberately NOT used here — the layout above reserves it for
|
|
"go back to the room where the prince is".
|
|
|