Текст не сжат, он задаётся через tilemap с позиции PRG $359000 по 0x800 байт. Текст в ctr-eng-orig состоит из уникальных символом, чтобы их записать в VRAM, а в tilemap можно повторять. Например, для It (в начале текста) индексы тайлов 02, 03 и 04, 05, потому что указаны в таком порядке, в tilemap они в PRG 3591C6, 359206 и 3591С8, 359208, для вставки ещё буквы t в tilemap снова указать 04 и 05. Откройте ром в Mesen, Debug > Tile Viewer, Source: Video RAM, Address: 8000, Format: 2 bpp, Tile Layout: 8x16, увидите использованные символы в VRAM. В Debug > Memory Viewer видны недавно прочитанные байты (синим цветом), чтобы быстрее найти расположение данных.
Текст появляется частями сверху вниз с помощью прерываний. Задаются scanline (позиция Y экрана сверху вниз) в нужном месте через код. Запись scanline происходит в WRAM $0DE1, поэтому можно найти по 8D E1 0D (в данной игре), перед этими байтами значение scanline. Точку срабатывания прерывания на экране можно посмотреть в Mesen, Debug > Event Viewer. В ctr-eng-orig добавили доп. код (в конце рома, прыжок PRG $3861: 5C BE 80 F5 = JMP $F580BE) для разделения текста, поэтому "Haha, this is the" начинается сверху и для этого отдельный tilemap.
в переведённых ромах данное значение отличается: 0x1A718 - тут отличаются 2-3 байта.
После текста "It really is." используется PRG $1A718: 07 4B 00 в (J) и 3C 33 01 в ctr-eng-orig, в начале номер команды, потом аргументы. 07 - вывести текст с индексом 004B, 3C - тоже вывести текст, но взять по адресу F50000 + 0133 * 2 = CPU $F50266 (или PRG $350266) значение 09BC и прибавить F50000, получится CPU $F509BC, где список текстов 4B 00 22 02 FF FF - сначала текст 004B, потом 0222 и конец как FFFF.
Остаются вопросы к деталям: настройка времени отображения текста, расположение адресов на нужные данные и т. п.
UPD: Доработал текст. Кстати, ромы лучше архивировать в 7z.