e36828ae6e
Порт levels_plan.md §2 (шаг 1) — машинерия смены уровня целиком. - Номер уровня стал состоянием: pop_current_level (порт current_level), pop_next_level больше не флаг, а НОМЕР; главный цикл срабатывает по расхождению next != current (порт play_level_2, seg003:0386). - pop_level_load_num(n): LEVELS\res20NN.bin (fallback a:\), старая EMM-страница отпускается только после успешной загрузки новой. На диск кладутся все 15 уровней (34 КБ). - Потабличные различия (data.h:840..848) — таблицы по 16 в pop_level.c: tbl_entry_pose, tbl_guard_hp (HP стража ушло из хардкода 3), tbl_guard_type (−1 = стражей на уровне нет), tbl_level_type. - find_start_level_door (seg003:02E6): на уровне 2 стартовый тайл — правая половина двери уровня, без modif=43 + add_trob(...,3) Кид материализуется внутри глухой створки. Тип 3 = дверь захлопывается за спиной, как в оригинале. - HP через уровень: hitp_beg_lev (seg003) — рестарт уровня откатывает HP к нему, пройденный уровень подтягивает его к hitp_max. Заодно большая склянка add_life (тип зелья 2: +1 к потолку HP до 10) — на уровне 2 она есть, комната 20. - have_sword = level >= 2 (play_level, seg003:106). - Чит Shift+L — следующий уровень (seg000:698). Проверено в MAME: уровень 1 → Shift+L → уровень 2 (комната 5, новые для нас тайлы 8/9 «большая колонна» на месте, дверь захлопнута, HP 3) → влево в комнату 4 со стражем → Shift+L → уровень 3. Вход в стартовую дверь уровня 2 по Up не срабатывает — как и должно (start_room-гард). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
28 lines
1.4 KiB
C
28 lines
1.4 KiB
C
/*
|
|
* pop_cheat.h — режим читов (порт cheats_enabled, seg000:111).
|
|
*
|
|
* В оригинале включается ключом командной строки megahit/debug и меняет
|
|
* набор доступных клавиш. У нас конфигурации/UI пока нет, поэтому это
|
|
* просто глобальный флаг: main ставит его при старте (на время разработки —
|
|
* ВКЛЮЧЁН). Клавиши читов обрабатывает главный цикл.
|
|
*
|
|
* Реализовано: K — убить стража (seg000:786). Остальные читы оригинала
|
|
* (время, перо, воскрешение, переход по комнатам) пока не портированы.
|
|
*/
|
|
#ifndef POP_CHEAT_H
|
|
#define POP_CHEAT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
extern uint8_t pop_cheats; /* 0 = выключены, иначе включены */
|
|
|
|
#define KBD_CHEAT_KILL 0x42 /* K (PS/2 set 2) — kill guard */
|
|
#define KBD_CHEAT_IMMO 0x43 /* I (PS/2 set 2) — бессмертие Кида (toggle) */
|
|
#define KBD_CHEAT_SWORD 0x1B /* S (PS/2 set 2) — выдать Киду меч */
|
|
#define KBD_CHEAT_NEXTLVL 0x4B /* Shift+L (PS/2 set 2) — следующий уровень */
|
|
|
|
/* Последний уровень игры (tbl_* в pop_level рассчитаны на 0..15). */
|
|
#define POP_LAST_LEVEL 15
|
|
|
|
#endif
|