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:
@@ -161,6 +161,11 @@ uint8_t tk_log_count(uint8_t kind)
|
||||
void pop_add_trob(uint8_t room, uint8_t tilepos, int8_t type) __banked
|
||||
{ log_put(TK_TROB, room, tilepos, (uint8_t)type); }
|
||||
|
||||
/* Чомперы будит смена ряда (SEQ_UP/SEQ_DOWN, падение, приземление) — в
|
||||
* хост-тестах физики их состояние не проверяется, достаточно не падать. */
|
||||
void pop_start_chompers(uint8_t room, int8_t row) __banked
|
||||
{ (void)room; (void)row; }
|
||||
|
||||
void pop_trigger_button(uint8_t room, uint8_t tilepos,
|
||||
uint8_t button_type, uint8_t modifier) __banked
|
||||
{ (void)modifier; log_put(TK_BUTTON, room, tilepos, button_type); }
|
||||
@@ -181,7 +186,7 @@ uint8_t pop_loose_mob_pos(int *col, int *y) __banked
|
||||
{ (void)col; (void)y; return 0; }
|
||||
|
||||
/* Отрисовочные хвосты, которые физика дёргает напрямую. */
|
||||
void pop_fore_set_clip(int x, int y, int w, int h) __banked
|
||||
void pop_fore_set_clip(int x, int y, int w, int h)
|
||||
{ (void)x; (void)y; (void)w; (void)h; }
|
||||
void pop_clip_sprite(int x, int w, int sy_top, int h) __banked
|
||||
{ (void)x; (void)w; (void)sy_top; (void)h; }
|
||||
|
||||
Reference in New Issue
Block a user