e1846369ad
Три расхождения с оригиналом на сцене подъёма меча (комната 15): 1. Лежащий меч не блестел. Порт animate_sword (seg007:0425) + start_anim_sword (seg007:087C): при входе в комнату тайлу даётся случайная фаза (prandom & 0x1F), каждый кадр счётчик вниз, на 0 — новый период 0x28..0x67. Кадр блеска рисуется РОВНО на modif==1 ((modif==1)+10 в draw_tile), т.е. одиночная вспышка раз в 40..103 тика. Перерисовка тайла — по смене видимого кадра, схемой кнопки (текущая страница сразу, вторая через rest-цикл). 2. В кадрах «нашёл меч» клинка не было видно. Порт add_sword_to_objtable (seg006:1798): клинок — ОТДЕЛЬНЫЙ спрайт chtab_0 поверх Kid со смещением из sword_tbl. Смещения в ЭКРАННЫХ пикселях (оригинал применяет их после calc_screen_x_coord), поэтому берём уже масштабированный obj_x. Из таблицы взяты только строки 35..42 (кадры 229..236) — бой не портирован. Новый атлас sword.atl (8 спрайтов, 1.6 КБ) + палитра chtab_0 в слотах 0x80..0x8F. Прямоугольник heal расширяется объединением с клинком, иначе он оставлял след за габаритом Kid. 3. Не было вспышки фона. do_flash = set_bg_attr(0, color) — оригинал подменяет НУЛЕВУЮ запись палитры, вспыхивает всё чёрное поле экрана; proc_get_object ставит flash_color=14, flash_time=8. У нас gfx_pal_set на обе страницы. ВАЖНО: вызов gfx_pal_set(0,0,0,0,0) пятью литералами ломает SDCC 4.5 (эмитит невалидный `ld hl, a`) — обёрнуто в функцию с параметрами. Попутно: TROBS_MAX 24 -> 30 (как в оригинале) + при входе в комнату из списка выбрасываются «декоративные» trob ДРУГИХ комнат (факелы/зелья/ меч анимируются только в отрисованной). Без этого отладочный обход всех 24 комнат забивал список, и новые анимации молча не заводились. Проверено в MAME: блеск (брейк на редрое тайла срабатывает), клинок в руке виден, фон вспыхивает жёлтым. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
944 B
C
42 lines
944 B
C
/* kid_atlas.h — раскладка атласов Kid. Сгенерировано pop_pack_kid.py. */
|
|
#ifndef KID_ATLAS_H
|
|
#define KID_ATLAS_H
|
|
#define KID_SHIFT 3
|
|
#define KID_MASK 7
|
|
#define KID_PAGES 28
|
|
#define KID_PAL 0x70
|
|
static const char *const kid_atl[KID_PAGES] = {
|
|
"kid0.atl",
|
|
"kid1.atl",
|
|
"kid2.atl",
|
|
"kid3.atl",
|
|
"kid4.atl",
|
|
"kid5.atl",
|
|
"kid6.atl",
|
|
"kid7.atl",
|
|
"kid8.atl",
|
|
"kid9.atl",
|
|
"kid10.atl",
|
|
"kid11.atl",
|
|
"kid12.atl",
|
|
"kid13.atl",
|
|
"kid14.atl",
|
|
"kid15.atl",
|
|
"kid16.atl",
|
|
"kid17.atl",
|
|
"kid18.atl",
|
|
"kid19.atl",
|
|
"kid20.atl",
|
|
"kid21.atl",
|
|
"kid22.atl",
|
|
"kid23.atl",
|
|
"kid24.atl",
|
|
"kid25.atl",
|
|
"kid26.atl",
|
|
"kid27.atl",
|
|
};
|
|
#define KID_PAL_FILE "kid.pal"
|
|
#define KID_SWORD_ATL "sword.atl" /* chtab_0: меч в руке */
|
|
#define KID_SWORD_ID0 20 /* индекс в атласе = sword_tbl.id - ID0 */
|
|
#endif
|