Атлас Тени: запечённый набор вместо спрайтов стража
Оригинал кладёт спрайт дважды — прозрачным блитом в x и XOR-блиттером в x+1; пакетный блит так не умеет, поэтому результат запечён упаковщиком. Две половины, как и у оригинала: sk* — кадры вне боя (спрайты Кида), sf* — кадры 150..189 (SHADOW.DAT, тоже графика Кида). 251 спрайт, 32 EMM-страницы, палитра 16 цветов в 0xA0..0xAF. Закрывает BUG-SHADOW-SET: раньше тип 4 уходил в guard_names, и Тень в бою дралась серым стражем. Грабля: kid.pal заливает все 256 записей и затирает слоты Тени — палитра вынесена в pop_shadow_pal_apply рядом с pop_bg_pal_apply. Проверено в MAME на 6-м уровне: силуэт с контуром, как в оригинале.
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
| [GRAB-KBD-TIMING](#grab-kbd-timing) | зацеп в падении срабатывает менее стабильно, чем в оригинале | **после всех уровней** | открыт: подозрение на клавиатурный модуль, не на физику |
|
||||
| [GUARD-ENTRY-DEATH](#guard-entry-death) | вход в комнату вплотную к стражу = мгновенная смерть (не портирован `bump_into_opponent`) | порт | **фикс есть, ждёт проверки в MAME** |
|
||||
| [BUG-SHADOW-SET](#bug-shadow-set) | Тень на 12-м уровне дерётся спрайтами СТРАЖА: SHADOW.DAT у нас нет вовсе | порт | открыт, разбор готов |
|
||||
| [BUG-CORPSE-AIR](#bug-corpse-air) | труп Кида висит в воздухе, когда убившая его плита улетела вниз | физика | открыт |
|
||||
| [LOOSE-ROOM-CHANGE](#loose-room-change) | расшатанная плита не доваливается, если Кид ушёл в соседнюю комнату | порт | закрыт 2026-08-13, кроме [LOOSE-SEAM-ANIM](#loose-seam-anim) |
|
||||
| [JUMP-FLOOR-LEGS](#jump-floor-legs) | в прыжке с пола ноги Кида рисуются ПОВЕРХ кромки пола, а должны за ней | окклюзия | **корень найден и починен, ждёт проверки в MAME** |
|
||||
| [MOB-CLIP-RIGHT](#mob-clip-right) | окна и узор кладки рисуются ПОВЕРХ падающих плит | окклюзия | открыт: корень найден 2026-08-13 |
|
||||
@@ -870,3 +871,25 @@ Makefile правила нет.
|
||||
**Оговорка.** `pop_guard_set_palette` для типа 4 звать НЕЛЬЗЯ — она
|
||||
затрёт палитру Тени палитрой стража (`curr_guard_color` у не-стражей = 0,
|
||||
`seg002:183`).
|
||||
|
||||
### <a id="bug-corpse-air"></a>BUG-CORPSE-AIR. Труп висит в воздухе после падения плиты
|
||||
|
||||
**Симптом** (найдено пользователем 2026-08-20, ур. 12 к. 15, старт с
|
||||
`POS=15`): Кид встал на проваливающийся пол (0,6), плита обрушилась и
|
||||
убила его, но ТЕЛО осталось лежать на уровне исчезнувшего пола, а плита
|
||||
улетела дальше вниз. Труп висит в пустоте.
|
||||
|
||||
**Где смотреть.** Кадр смерти — `actions_5_bumped` (см. seq в
|
||||
`kid_data`), а гравитация в `check_action` (seg006:05CD) для действия 5
|
||||
включается только на кадрах приседа: у оригинала есть отдельные фиксы
|
||||
`FIX_DEAD_FLOATING_IN_AIR` (кадры 177..185) именно про этот случай —
|
||||
значит **в оригинале 1989 года труп в воздухе тоже висит**, и SDLPoP
|
||||
чинит это опциональным фиксом, по умолчанию выключенным.
|
||||
|
||||
**Отсюда вопрос к решению**, а не сразу правка: чинить ли вообще. Если
|
||||
чинить — портировать `fix_dead_floating_in_air` и записать как
|
||||
осознанное расхождение в `../docs/impl_diff.md` (мы уже отказались от
|
||||
двух других опциональных фиксов SDLPoP в `bump_into_opponent`).
|
||||
|
||||
**Приоритет низкий:** ситуация возникает только когда труп остаётся на
|
||||
проваливающемся полу, играбельности не мешает.
|
||||
|
||||
Reference in New Issue
Block a user