L3-CHOMP: чомперы — анимация, отрисовка и смерть в челюстях
Порт SDLPoP: animate_chomper / start_chompers / start_anim_chomper / next_chomper_timing (seg007) -> pop_trob.c; draw_tile_anim + draw_tile_fore, ветка tiles_18_chomper (seg008) -> pop_room.c (низ/кровь/верх, backtable) и pop_bg.c (передний слой); check_chomped_kid / check_chomped_guard / chomped (seg004) -> pop_map.c. Состояние — в room_modif, как у пик и ворот: младшие 7 бит фаза 1..N, старший бит «перемололо кого-то» (кровь остаётся на тайле навсегда). Номер позы chomper_fram1 и передние куски лежат в РЕЗИДЕНТЕ (pop_tile.c): их читают обе половины слоя фона, а const-таблица банка из чужого банка не видна. start_chompers зовётся там же, где в оригинале: SEQ_UP/SEQ_DOWN в play_seq (pop_kid.c), start_fall и land (pop_map.c), вход в комнату (roomtest.c). Поэтому чомперы щёлкают только пока персонаж в ИХ ряду — так в оригинале. check_chomped_guard у оригинала отдельное тело (страж не проходит через check_collisions). У нас та же формула уже есть в get_row_collision_data, поэтому флаги ряда считаются во ВРЕМЕННЫЙ массив: coll_curr/above/below — это кадр Кида, из них move_coll_to_prev берёт прошлые флаги, затирание сломало бы ему бамп. Период смыкания — POP_CHOMPER_SPEED в pop_tune.h (15, как в оригинале). Заодно: устаревшая заглушка pop_fore_set_clip в tests-host была __banked, хотя функция давно переехала в резидент — всплыло при пересборке. Ассеты уже были упакованы (pop_pack_bg.py, 2026-08-07). Банк 6: 20.0 %, банк 7: 39.7 %, банк 3: 53.8 %. tests-host зелёные (5 наборов). Зубья в MAME рисуются; анимация и смерть — на ручной приёмке.
This commit is contained in:
@@ -79,6 +79,7 @@ extern const uint8_t POP_WALL_FRAM_MAIN[4]; /* основная грань
|
||||
extern const uint8_t POP_SPIKES_FRAM_LEFT[10]; /* кадр пик в своей ячейке */
|
||||
extern const uint8_t POP_LOOSE_FRAM_LEFT[12]; /* верх дрожащей плиты */
|
||||
extern const uint8_t POP_LOOSE_FRAM_BOTTOM[12]; /* низ дрожащей плиты */
|
||||
extern const uint8_t POP_CHOMP_FRAM_FOR[5]; /* чомпер: передний слой */
|
||||
|
||||
/* Режим ЗАПЕЧКИ статического фона (запись идёт и в ОЗУ-копию акселератора,
|
||||
* из которой потом восстанавливает heal). В этом режиме дрожащие кадры
|
||||
@@ -91,6 +92,10 @@ extern uint8_t pop_t_bake_rest;
|
||||
/* Кадр дрожащей/падающей плиты по её room_modif (seg007 loose_fram_*). */
|
||||
uint8_t pop_loose_frame(uint8_t modif);
|
||||
|
||||
/* Номер позы чомпера по его модификатору (seg008 chomper_fram1): 0..4 —
|
||||
* индекс во ВСЕ три набора кусков (низ/верх/перед) и в кровь (+114/+119). */
|
||||
uint8_t pop_chomp_pose(uint8_t modif);
|
||||
|
||||
/* ---- Блит куска атласа ---------------------------------------------- *
|
||||
* НИЗ спрайта на ybottom (room-space, POP_YOFF добавляется внутри), левый
|
||||
* край на x, прозрачно (0xFF). w/h читаются из getimage-заголовка ленты (в
|
||||
|
||||
Reference in New Issue
Block a user