Отладочный старт перехватывал смену уровня
DBG_START_ROOM/POS подменялись безусловно, а pop_start_level зовётся и на границе уровня. Из-за этого на 7-м стартовой становилась отладочная комната вместо комнаты 17 из данных, и спецсобытие «вход падением» (set_start_pos, seg003:0196) не срабатывало — переход 6->7 выглядел сломанным. Подмена теперь действует только на своём уровне (FIRST_LEVEL); рестарт того же уровня отладочную позицию сохраняет, как и задумано.
This commit is contained in:
@@ -3380,3 +3380,28 @@ draw_tile_anim(); draw_tile_bottom(0); draw_loose(0);
|
||||
Основной кандидат на возврат этих тактов — задача
|
||||
[HEAL-WIDTH](TASKS_OPEN.md#heal-width): heal'ы кусков и плит берут ширину по
|
||||
клеткам, а фактический след — 58/57.
|
||||
|
||||
### BUG-DBGSTART-LEVEL. Отладочный старт ломал переход между уровнями (закрыт 2026-08-20)
|
||||
|
||||
**Симптом** (найден пользователем на сборке `make LEVEL=6 ROOM=1 POS=18`):
|
||||
Кид проваливается в комнате 1 шестого уровня, уровень меняется на 7-й — и
|
||||
Кид появляется не там: приземляется в комнате 1 на 2,8 вместо того, чтобы
|
||||
продолжать падение по своей колонке.
|
||||
|
||||
**Корень.** Отладочный старт (`DBG_START_ROOM`/`DBG_START_POS`,
|
||||
`roomtest_cold.c`) подменял комнату и позицию БЕЗУСЛОВНО, а
|
||||
`pop_start_level` зовётся не только на первом запуске, но и **на каждой
|
||||
смене уровня**. В результате на 7-м уровне стартовой становилась
|
||||
отладочная комната 1 вместо комнаты 17 из данных — и спецсобытие «вход
|
||||
падением» (`set_start_pos`, seg003:0196: уровень 7, комната 17 ->
|
||||
`goto_other_room(3)`) не срабатывало вовсе, потому что его условие
|
||||
сравнивает именно `start_room`.
|
||||
|
||||
Само спецсобытие было портировано и работало; сломан был вход в него.
|
||||
|
||||
**Починка:** подмена применяется только пока `pop_current_level ==
|
||||
FIRST_LEVEL`. Рестарт ТОГО ЖЕ уровня (смерть, чекпойнт) отладочную
|
||||
позицию сохраняет — ради этого она и перебивает чекпойнт.
|
||||
|
||||
**Проверено в MAME:** после провала на 6-м `pop_current_level` = 7, Kid.room
|
||||
= 16, то есть спецсобытие отработало (старт в 17, переход вниз).
|
||||
|
||||
Reference in New Issue
Block a user