Переписать старую программу силами ИИ реально, если разбить её на подсистемы и на каждой итерации сверяться с поведением оригинала. Рабочий пример: Tzar: The Burden of the Crown (2000) пересобрали с нуля на Rust + Bevy — исходников не было, Claude Code работал по дизассемблеру оригинального exe. Ниже — как устроен этот цикл, чем он проверяется и где ломается.
Дизассемблер вместо исходников: что это даёт
Дизассемблер — единственная точка опоры, когда код чужой, закрытый и существует только в виде exe. В этом проекте модель читала дизассемблированный код оригинала и переносила по одной системе за раз: боевую механику, ИИ, генератор карт, скрипты миссий. Задача формулировалась не как «перепиши игру», а как «вот модуль, вот как он себя ведёт — воспроизведи поведение на Rust + Bevy».
Это ключевая разница с обычным «попроси ИИ написать игру». Модель не придумывает правила боя — она восстанавливает их из кода, который уже работал.
Как построить цикл «одна система за раз»
Цикл держится на трёх вещах: узкая задача, оригинал под рукой, короткая обратная связь. Порядок шагов:
- Выбрать одну подсистему — бой, ИИ, генератор карт или скрипты миссий. Не две сразу.
- Показать модели дизассемблер нужного участка exe и описать ожидаемое поведение.
- Получить порт на целевом стеке (в примере — Rust + Bevy) и собрать его.
- Запустить оригинал и новую сборку рядом, на одном и том же сценарии.
- Описать расхождение человеческими словами: «здесь не так» — и дать модели проследить его обратно по оригинальному коду.
- Закрыть исправление тестом, чтобы правка не отъехала на следующем шаге.
Шестой пункт — не формальность: без него каждая новая система ломает уже перенесённую. По духу это та же схема «цель → шаги → проверка», только проверка здесь — не текстовый отчёт, а запущенная игра.
Чем проверять: оригинал как эталон
Единственный надёжный тест при таком порте — сравнение с оригиналом вживую. В проекте это делали буквально: играли в новую сборку рядом с оригинальной и сообщали всё, что ощущается неправильно; Claude Code затем находил причину в оригинальном коде. Числа по проекту: 600+ тестов, поддержка Windows 10/11, разрешения вплоть до 4K, работают оригинальные кампании и случайные карты.
Обратите внимание: «ощущается неправильно» здесь — рабочая формулировка, а не эмоция. Ощущение — это сигнал о расхождении, а задача модели — превратить его в конкретный участок кода и конкретную правку.
Что не даёт длинному проекту расползтись
Долгую работу держат две вещи: тесты и заметки между сессиями. 600+ тестов фиксируют уже перенесённое поведение, а memory notes сохраняют контекст между сессиями — без них модель на десятом заходе начинает «забывать», какая система переписана и почему сделано именно так. По сути это то же самое, что экономия контекста у AI-агента: чем дольше проект, тем важнее, что именно остаётся в памяти, а что перечитывается заново.
Порт собран как свободный open-source проект (репозиторий ColCarlo на GitHub), но самой игры внутри нет — сборке нужна любая копия Tzar. Обсуждение и ссылка — в посте автора на Reddit.
Где этот подход не сработает
Метод не сработает там, где нет эталона поведения и нет доступа к бинарнику. Три ограничения:
- Нужен работающий оригинал: если поведение нельзя запустить и сравнить, проверять нечем.
- Нужна легальная копия: пересборка не заменяет покупку игры — данные и контент остаются у правообладателя.
- Дизассемблер даёт объём и сложность: подсистему приходится вырезать маленькой, иначе модель теряет нить.
Для задач без бинарника — например, нового продукта с нуля — выгоднее не порт, а обычная разработка с ИИ-ассистентом: там эталоном становится ТЗ, а не exe.
Частые вопросы
Нужны ли исходники оригинала, чтобы переписать программу с ИИ? Нет. В этом проекте исходников не было: Claude Code работал по дизассемблеру оригинального exe и переносил системы по одной.
Почему нельзя попросить модель сразу переписать всю игру? Потому что проверять нечего: 600+ тестов и сравнение с оригиналом работают только на узкой подсистеме. Большой заход даёт код, который не с чем сверить.
Чем такой порт отличается от эмулятора? Эмулятор запускает оригинальный код. Здесь код написан заново на Rust + Bevy, а оригинал используется как эталон поведения — поэтому работают кампании и случайные карты, но нужна копия игры.
Больше разборов по ИИ и автоматизации — в канале: @il_chum