b5d2a81ee3
Одиннадцать наблюдений первого прогона свелись к шести корням, четыре
наблюдения второго — ещё к четырём. Разбор каждого — bug_closed.md.
Первая волна:
- BUG-LVLSTATE-1: уровень стал мутабельным (эталонная копия foretable для
рестарта, pop_level_set_tile вместо таблицы оверрайдов);
- BUG-RESPAWN-1: рестарт = load_level, тайлы возвращаются из эталона;
- BUG-DEATH-1: смерть от меча доигрывается (порт control_kid, seg006:0CD1);
- BUG-GATE-ANIM-1: ворота в отрисованной комнате перерисовываются
(POP_RD_GATE, порт draw_trob seg007:01E6);
- BUG-COLL-1: полный порт check_collisions/bumped (seg004) вместо поиска
стены только в колонке переднего края;
- BUG-STANDUP-1: убран лишний guard в bumped_floor — вставание у стены
роняло Кида сквозь пол.
Вторая волна:
- BUG-RESPAWN-2: рестарт возвращает и СТРАЖЕЙ (в оригинале play_level на
каждой итерации делает load_level + pos_guards);
- BUG-LOOSE-2: падающий кусок привязан к своей комнате и долетает после
ухода Кида (do_mobs крутит mobs[] независимо от drawn_room);
- BUG-DRAWORDER-1: порядок «Кид / страж» задаётся обходом тайлов
(redraw_needed_tiles: ряды 2,1,0, колонки 0..9), а не ролью персонажа.
По BUG-DRAWORDER-1 понадобилось три захода, и два первых были неполны:
1) сам порядок — но общее окно fore-клипа осталось стражьим, и Кид
нарисовался поверх передних столбов (kid_fore_clip_restore);
2) enter_guard брал curr_col из тайла, а leave_guard пишет туда
get_tilepos(0,row) — у запомненного ТРУПА колонка была 0 при
настоящей X. Теперь колонка выводится из X, как в оригинале;
3) ветка actions_1_run_jump в set_objtile_at_char оказалась не
«упрощаемой»: в беге тайл берётся из нижнего ряда и ЛЕВОЙ колонки
габарита, поэтому бегущий Кид уходит за объекты справа. Считается
для обоих персонажей — enter_guard ставит action=1 и стражу.
Проверено в MAME: зелья/меч/плиты переживают выход из комнаты и
восстанавливаются после смерти; кнопка room5 поднимает решётку; падение с
кнопки больше не роняет в комнату 6; убитый страж жив после respawn;
Кид проходит за телом стража. make size-check — роста нет.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
9.9 KiB
9.9 KiB
Активные баги на уровне 1 -
- После того как кувшин со здоровьем выпит и Кид попадает в комнату во второй раз то иногда кувшин мы не показываем (это правильно) но показываем анимацию пузырьков над кувшином (чего показывать больше не должны - нет кувшина, нет пузырьков), а в комнате 14 пузырек вообще восстанавливается полностью после того как Кид выйдет из комнаты и вернется в нее обратно (есть ощущение что даже в одной комнате поведение пузырька - будет ли он восстановлен или нет зависит от чего-то непонятного. (есть еще ощущение что первый выпитый кувшин не восстанавливается а остальные восстанавливаются)
- Меч - один раз подобранный он больше не должен появляться в своей (15-ой) комнате иногда он появляется снова, иногда он больше не появляется но на дальней стене начинают моргать контуры кирпичной кладки (странно что она не впечатана в heal уровень потому что она должна быть отрисована всегда). причем мерцает по странному - не как double-buff а как буд-то вместо искры на мече - изредка на несколько (один логический?) кадров.
- комната 12 - опять проблема с телепортацией через решетку - решетка в 0,9 - Кид стоит за шаг (пол-шага) от решетки - бежит и пробегает через закрытую решетку.
- после respawn - остаются разбитыми плиты что были разбиты, выпитыми пузырьки и прочее - это надо сравнить с оригиналом (SDLPoP) - но главное другое - если до respawn какая-то плита не была разбита то теперь если ее разбить, выйти из комнаты и вернуться - то плита восстановится (еще интереснее вариант когда плита-потолок в комнате 12 разбивается, Кид через проем поднимается в верхнюю комнату и поднявшись плита в новой комнате опять закрывает проем.
- проблема с плитой из комнаты 12 в верхнюю и пузырек в комнате 22 - они возникают даже без respawn - когда Кид заходит в комнату 22 из комнаты 16, выпивает пузырек, выходит опять в комнату 16 и опять возвращается в комнату 22 - пузырек возникает снова. Когда Кид разбивает плиту из комнаты 12 в комнату 16 то после подъема в комнату 16 плита опять возникает. аналогично комната 17 - если войти в нее из комнаты 23, разбить плиты 1,5 и 1,6, опуститься на 2,3 и выпить пузырек. вернуться в комнату 23 и опять в 17 - то и плиты вернутся и пузырек. но могут плита и пузырек не вернуться - такое ощущение что если это первая разбитая плита (Кида мы перенесли в комнату 12 через cheats) - то разбитая плита остается разбитой.
- комната 6 - Кид бежит по уровню ноль справа налево (начало бега 0,9), делает длинный прыжок между 0,6 и 0,7 - он пролетает во внутрь стены и респавнится - скриншоты в bugscreens
- иногда залипают все-таки клавиши (пока замечено на кнопке вверх - отлипает только после следующего нажатия). надо проверить - есть ли возможность не только отслеживать события нажатие/отжатие но и текущий статус нажатых кнопок. Может вообще отказаться от прямой работы с клавиатурой а работать с нею через BIOS ?
- иногда таки залипает и shift =((((
- комната 5 - кнопка на 0,4 не открывает решетку/ворота на 0,5 - это двойная кнопка - она должна сразу открывать ворота на 0,5 и на 0,9 (возможно у нас она работает только на 0,9) возможно что логически решетка на 0,5 открывается но анимации ее открытия нету =(
- комната 5 - Кид падает с кнопки 0,6 на 2,7 - получает урон, присяд в 2,8 - когда встает он проваливается еще ниже в комнату 6 на между 2,7-2,8.
- если стражник убивает Кида то Кид респавнится на месте смерти и стражник тут же его убивает еще раз и так по циклу
- проверить как отрисовывается Кид вместе с мертвым стражником - в оригинале стражник поверх Кида (Кид проходит за телом стража), у нас Кид поверх (перед) стражем;
- сейчас у нас шифт не залипает но теперь он теряет статус нажатости - то есть при нажатом шифте второе-треть-четвертое нажатие стрелки отрабатывает не как осторожный шаг а переводит Кида на бег по идее с новым алгоритмом должно было бы корректно отрабатывать нажатие шифта ? теперь же залипаний нету но есть фантомный отжим ? такое поведение работы с клавиатурой хуже чем залипание шифта (потому что игрок надеется что шифт нажат и будет короткий шаг а Кид начинает бежать и может провалиться в ловушку/яму или набежать на пики и погибнуть). то есть надо как-то более точно проверять статус нажатости шифта. то есть - когда нажат шифт и нажимаются стрелки то вариант редких пропусков стрелок предпочтительнее чем вариант когда мы перестаем понимать что шифт нажат.
- после respawn - должны ли оживать стражники ? сейчас они остаются мертвые.
- небольшой баг отображения (такой баг у нас уже был и ты его фиксил) - комната 12 - две падающие плиты рядом (0,1 и 0,2) - после падения осколки только от одной на 1,2 а от 0,1 на 1,1 осколков нету. при том что в комнате 7 две плиты 0,5 и 0,6 падая на 2,5 и 2,6 дают двое осколков. возможная причина - когда Кид пробегает в комнате 12 по падающим плитам то он убегает сразу в комнату 15 и плита 0,2 успевает упасть и поменять статус пола 1,2 на пол с осколками а плита 0,1 еще остается в падении когда Кид уже уходит в комнату 15 и потому статус пола на 1,1 на 'пол с осколками' измениться не успевает
Подумай вот над чем - интересует возможность покрытия уже написаного кода автотестами (тесткейсами). автотесты внутри MAME я думаю будут достаточно затруднительными, но поскольку это у нас plain-C то можно наверное делать автотесты и на host OS. возможно это нам поможет не создавать ситуации когда нам каждый раз приходится фиксить баги которые мы уже фиксили (по крайней мере постараемся избегать регресса при реализации новых фич) я понимаю что это скорее всего будет достаточно сложно совместить с тем что финальный продукт идет для Sprinter. но подумать над этим надо.
Пока ничего не предпринимай, только подумай что и как можно сделать.