Давно не затрагивал тему реверс-инжиниринга NES игр. После разбора блочного формата описания уровней), остались несколько игр, отмеченных как comp (уровень в ROM сжат). Сжатие уровней редко используется в играх NES, чаще сжимается текст или данные описания графики. Да и сам блочный формат уровня уже является формой экономии информации.
Тем не менее некоторые игры используют сжатие RLE. В простых формах, как в Contra
, или в более сложных, как в Felix The Cat , где применяется гибрид RLE и словарного метода. Другие применяют формы "описания на холсте"
, когда команды отрисовки задаются в виде “нарисуй что-то в координатах X,Y” (описание карты мира в играх Capcom
или уровней в Super Mario Bros
).
Это относительно простые алгоритмы. Но отдельные игры идут дальше и применяют более совершенные формы сжатия:
Kirby и другие игры HAL
- гибрид LZ алгоритмов и RLE, с несколькими командами вроде “следующие биты развернуть”.
Dizzy и другие игры Codemasters
- сжатие графики цепями Маркова.
Формат уровней этих игр описан. Однако, в моём списке игр, добавленных в CadEditor были ещё две — Jurassic Park
и James Bond Jr
. Я выбрал для разбора Jurassic Park
, потому что знал, что в нём используется разновидность LZ, потому что хотел заодно прочитать про сам алгоритм и его разновидности.