Описание
Я прошел TIS-100 полностью, включая скрытые сегменты и оптимизации. Игра представляет собой набор задач на восстановление работы поврежденного компьютера TIS-100 (Tessellated Intelligence System) 1970-х годов. Вы получаете машину от тети после смерти дяди Рэнди, который работал с ней. Задача - писать код на собственном ассемблере для каждого узла, чтобы обрабатывать входные сигналы и выдавать требуемые выходы.
Сюжет
Сюжет раскрывается через заметки дяди Рэнди в поврежденных узлах. Он купил машину на блошином рынке в 1979 году. Сначала думает, что это секретная разработка для анализа сигналов. По мере прогресса записи становятся более хаотичными: Рэнди теряет работу, отношения с тетей Дорис ухудшаются, он углубляется в общение с машиной. В TIS-NET сегментах история выходит на новый уровень - машина связана с правительственными проектами, есть отсылки к DoD и Quantum Information Science Lab. Финал показывает, что машина влияет на владельца, с жуткой анимацией. Полный разбор всех debug-логов требует прохождения всех сегментов, включая анти-тампер.
Геймплей и механики
Основная механика - 12 узлов в сетке. Каждый узел имеет ACC (аккумулятор) и BAK (резервный регистр). Команды: MOV, ADD, SUB, MUL, DIV, MOD, AND, OR, XOR, NOT, JMP, JEZ, JNZ, JGZ, JLZ, SLT, SWP, SAV, NEG и undocumented вроде HCF. Узлы соединяются в четырех направлениях, данные передаются между ними. Позднее появляются stack nodes для памяти и image console для графики.
Каждый уровень задает входы (IN) и требует точного совпадения выходов (OUT). Можно шагать по коду, ставить breakpoints. После решения сравниваете с лидербордом по nodes, instructions, cycles.
Сложные места и советы
- Начальные уровни с простым перемещением данных: Используйте MOV ACC RIGHT (или другое направление). Избегайте лишних циклов. Для BUSY_LOOP достижения специально замедлите решение до 100k+ циклов с помощью ненужных ADD/SUB.
- Signal Comparator и Multiplexer: Сравнения через SUB и условные прыжки. Для мультиплексера распределяйте логику по нескольким узлам, каскадируйте MOV. Удаляйте ненужные значения в NIL.
- Sequence Sorter и Generator: Здесь нужна сортировка и генерация последовательностей. Используйте несколько узлов для хранения состояний, SWP для обмена. Оптимизация циклов требует параллельной обработки. Один узел может контролировать другие через JMP.
- Wave Collapse Supervisor и Signal Divider: Сложная математика и обработка потоков. Делите внимание: один узел на ввод, другой на расчет. Тестируйте на малых входах. Для divider используйте repeated subtraction.
- Stack nodes: Появляются позже. Управляйте PUSH/POP аккуратно, чтобы избежать переполнения. Они критичны для хранения состояний в длинных последовательностях.
- Image console: Рисуйте пиксели цветами. Планируйте вывод по координатам. Требует точной синхронизации узлов.
- Оптимизация: Минимизируйте nodes (используйте не все 12), instructions (короткие циклы), cycles (параллелизм). Сохраняйте несколько решений. Читайте manual полностью - там все команды и примеры.
Общие проблемы
- Зависания из-за бесконечных циклов без выхода данных - всегда проверяйте условия JMP.
- Неправильная маршрутизация сигналов - рисуйте схему на бумаге.
- Ограничение в 15 инструкций на узел - разбивайте логику.
- Debug logs дают сюжет, но не подсказки по коду - решайте сами.
Игра не для всех. Если нет интереса к низкоуровневому программированию, она покажется сухой. Нет графики, звука почти нет. Полезна для понимания ассемблера и алгоритмов. Я потратил десятки часов на оптимизации. Решайте, нужно ли вам это.