Обменял скорости между ходьбой/бегом, но не смог изменить спрайты. Из побочных эффектов: прыжок с места перемещает Шанти в сторону быстрее, а в оригинале прыжок с места даже с зажатой B всегда был медленный. Ну и в оригинале приседание при беге не работает, здесь же осталось как было.
Не понял как бежать без удара волосами, на Youtube кто-то побежал с места (не TAS), а в TAS постоянно бежит, как раз такой человек смог бы сделать. Вам никто не помог, потому что умеющие не хотят возиться, за деньги кто-нибудь сделал бы.
Про разбор игры
Не смог сделать правильно, потому что в первый раз разбираю GBC игру, а ассемблер практически не знаю. Понял что там есть две подпрограммы RO1D:4407 call 0C45, RO1D:440A call 1305. Во 2-й на основе нажатий сменяются состояния Шанти, для этого считываются команды (данные) из ROM6, которые указывают последовательность вызова подпрограмм и устанавливают адреса в WRA3, по которым вызываются нужные подпрограммы из ROM6 в 1-й подпрограмме.
Эти выкрутасы просто так не заменить, последовательность команд важна. Я не смог перехватить нажатия кнопок, думаю если узнать какой байт в ОЗУ влияет на бег, то можно сделать правильно.
Использовал отладчик из эмулятора BGB.
Что изменил
В WRA3:D041 записываются значения: FFFEFF - идёт влево, FFFDFF - бежит влево, 000100 - идёт вправо, 000200 - бежит вправо. Также в прыжке.
Меняем инструкции записи:
Ходьба - влево ROM6:519D 3E FE -> 3E FD, вправо ROM6:51B2 3E 01 -> 3E 02.
Бег - влево ROM6:6C09 3E FD -> 3E FE, вправо ROM6:6C1E 3E 02 -> 3E 01.
Ходьба в прыжке - влево ROM6:5642 3E FE -> 3E FD, вправо ROM6:566E 3E 01 -> 3E 02.
Бег в прыжке - влево ROM6:5650 3E FD -> 3E FE, вправо ROM6:567C 3E 02 -> 3E 01.
ROM6 - 6-й банк, адрес в роме вычисляется так 0x4000*6 + ROM6:адрес - 0x4000.
Приложил версию с перестановкой _swap_speed.gbc и только с ускорением ходьбы _fast_walk.gbc.
Если протестируете, то напишите нет ли проблем.