L1: фиксы прогона уровня 1 — уровень мутабелен, стражи, loose-плиты, порядок
Одиннадцать наблюдений первого прогона свелись к шести корням, четыре
наблюдения второго — ещё к четырём. Разбор каждого — 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>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
Активные баги на уровне 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. но подумать над этим надо.
|
||||
|
||||
Пока ничего не предпринимай, только подумай что и как можно сделать.
|
||||
|
||||
Reference in New Issue
Block a user