Мид-оверлей не рисовал передний торец плиты (draw_loose из draw_tile2)
Правый конец падающего куска лежал поверх соседней плиты. У оригинала мид-оверлей — draw_tile2(), и его последний вызов draw_loose(0) рисует передний торец плиты; у loose bottom_id = 0, поэтому больше его не рисует никто, и в overlay_mid_tile торца не было вовсе. Заодно снят вопрос про клип объекта: add_mob_to_objtable ставит куску clip.right = 40, но клип применяется только при chtab_flip_clip[chtab_id], а для chtab_6_environment там 0 — поле игнорируется и в оригинале. Значит «клипа нет» у нас верно, MOB-CLIP-RIGHT закрывается как несуществующий. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3304,3 +3304,36 @@ else return;
|
||||
Host-тесты 5106 проверок без расхождений (`pop_room.c` они не линкуют —
|
||||
проверка визуальная, в MAME: уровень 11 комната 14, отделившаяся плита видна
|
||||
три кадра).
|
||||
|
||||
### Продолжение: в мид-оверлее не было переднего торца плиты
|
||||
|
||||
Пользователь тут же нашёл следующий слой (2026-08-18, та же комната): правый
|
||||
конец падающего куска рисовался ПОВЕРХ соседней плиты `(2,6)`, хотя торец той
|
||||
плиты при этом лежал поверх куска — то есть порядок был противоречивым в
|
||||
разных частях перекрытия.
|
||||
|
||||
Сначала я проверил, не нужен ли клип объекта: `add_mob_to_objtable`
|
||||
(seg007:1161) ставит куску `clip.right = 40`. Оказалось — **не нужен и в
|
||||
оригинале не работает**: клип применяется только если
|
||||
`chtab_flip_clip[chtab_id]`, а таблица (`data.h:196`,
|
||||
`{1,0,1,1,1,1,0,0,0,0}`) для `chtab_6_environment` даёт **0**. Поле
|
||||
выставляется и молча игнорируется, так что «клипа нет» у нас — верно. Пункт
|
||||
MOB-CLIP-RIGHT можно закрывать как несуществующий.
|
||||
|
||||
Настоящая причина — состав мид-оверлея. У оригинала это `draw_tile2()`:
|
||||
|
||||
```c
|
||||
draw_tile_right(); draw_tile_anim_right(); draw_tile_base();
|
||||
draw_tile_anim(); draw_tile_bottom(0); draw_loose(0);
|
||||
```
|
||||
|
||||
а у нашего `overlay_mid_tile` последнего вызова не было. У loose в
|
||||
`pop_tile_table` `bottom_id = 0`, поэтому передний торец плиты рисует ТОЛЬКО
|
||||
`draw_loose` — и в оверлее его не рисовал никто. Добавлено; кадр берётся по
|
||||
живому modif, чтобы дрожащая плита осталась дрожащей.
|
||||
|
||||
**Осталось невыясненным:** в `overlay_mid_tile` по-прежнему нет полного
|
||||
`draw_tile_right` (есть только случай пола, спрайт 42) и нет
|
||||
`draw_tile_anim_right` — то есть анимированной правой грани СОСЕДА (пики,
|
||||
ворота, loose). Симптома на это пока не видели; если всплывёт «правая грань
|
||||
соседа под персонажем/куском» — смотреть сюда.
|
||||
|
||||
Reference in New Issue
Block a user