L3-CHOMP: передние зубья чомпера — блит pop_fore_b и ветка в draw_tile
Две ошибки в одном месте. 1) Кадры 106..110 и передняя кровь 119..123 упакованы в pop_fore.atl (FORE_ENV_IDS в pop_pack_bg.py), а блитились через pop_env_b — id уходил в env-страницу 3 по индексу 10, где записи нет, и передний слой не рисовался вовсе: Кид, стоящий ЗА челюстями, был виден целиком. 2) В draw_tile была только backtable-часть; у оригинала фронт чомпера рисует отдельная ветка draw_tile_fore (через таблицу он не идёт — у записи 0x12 fore_id нулевой), поэтому передние зубья появлялись лишь там, где по тайлу прошёлся fore-проход персонажа.
This commit is contained in:
@@ -335,9 +335,12 @@ static void fore_only_tile(int row, int col)
|
||||
if (code == 0x12) { /* чомпер: передний слой челюстей */
|
||||
uint8_t cm = pop_tile_mod(row, col);
|
||||
uint8_t pose = pop_chomp_pose(cm);
|
||||
pop_env_b(POP_CHOMP_FRAM_FOR[pose], x, dmy);
|
||||
/* Передние куски чомпера и его кровь лежат в pop_fore.atl
|
||||
* (FORE_ENV_IDS в pop_pack_bg.py), а НЕ в env-страницах: блит
|
||||
* обязан быть pop_fore_b, иначе id уходит в чужую страницу. */
|
||||
pop_fore_b(POP_CHOMP_FRAM_FOR[pose], x, dmy);
|
||||
if (cm & 0x80) /* кровь поверх переднего слоя */
|
||||
pop_env_b((uint8_t)(pose + 119), x + 8, dmy - 6);
|
||||
pop_fore_b((uint8_t)(pose + 119), x + 8, dmy - 6);
|
||||
}
|
||||
if (code == 10) { /* зелье: склянка (пузырёк — динамика) */
|
||||
pop_potion_flask(row, col, pop_tile_mod(row, col));
|
||||
|
||||
@@ -300,6 +300,19 @@ static void draw_tile(int row, int col)
|
||||
pop_wall_b(POP_WALL_FRAM_MAIN[wmod], x, dmy); /* основная грань */
|
||||
pop_wall_pattern_b(row, col, 1);
|
||||
}
|
||||
if (code == 0x12) { /* чомпер: передние зубья + кровь.
|
||||
* Отдельной веткой, как в оригинале:
|
||||
* у записи 0x12 fore_id == 0, и через
|
||||
* таблицу этот слой не идёт. */
|
||||
uint8_t cm = pop_tile_mod(row, col);
|
||||
uint8_t pose = pop_chomp_pose(cm);
|
||||
/* Передние куски чомпера и его кровь лежат в pop_fore.atl
|
||||
* (FORE_ENV_IDS в pop_pack_bg.py), а НЕ в env-страницах: блит
|
||||
* обязан быть pop_fore_b, иначе id уходит в чужую страницу. */
|
||||
pop_fore_b(POP_CHOMP_FRAM_FOR[pose], x, dmy);
|
||||
if (cm & 0x80)
|
||||
pop_fore_b((uint8_t)(pose + 119), x + 8, dmy - 6);
|
||||
}
|
||||
if (code == 10) { /* зелье: chtab_1, не env fore_id.
|
||||
* Пузырёк — динамика (pop_potion_draw). */
|
||||
pop_potion_flask(row, col, pop_tile_mod(row, col));
|
||||
|
||||
@@ -79,7 +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]; /* чомпер: передний слой */
|
||||
extern const uint8_t POP_CHOMP_FRAM_FOR[5]; /* чомпер: перед (pop_fore!) */
|
||||
|
||||
/* Режим ЗАПЕЧКИ статического фона (запись идёт и в ОЗУ-копию акселератора,
|
||||
* из которой потом восстанавливает heal). В этом режиме дрожащие кадры
|
||||
|
||||
Reference in New Issue
Block a user