Бывший инженер OpenAI портировал Quake в Roblox за четыре ночи и $3000 на ИИ-токены

Опубликовано:

Идея пришла в пятницу, а в среду проект уже лежал в открытом доступе. Томас Димсон (Thomas Dimson), в прошлом технический сотрудник OpenAI и один из ранних инженеров Instagram, перенёс движок Quake образца 1996 года на Luau — скриптовый язык платформы Roblox. Работу выполнял не он сам построчно, а языковая модель Claude Fable 5 от Anthropic: по словам автора, ушло четыре бессонные ночи и около $3000 на токены.

Результат называется RobloQuake. Играбельная версия опубликована в Roblox под именем Frag Party, исходники лежат на GitHub под лицензией GPLv2 — иначе и быть не могло, поскольку сама id Software в своё время открыла код Quake под той же лицензией.

OpenAI портировал Quake в Roblox скриншот игры 1

Что именно перенесли

Ключевой момент, отличающий проект от десятков любительских «римейков Quake на движке X»: перенесён не внешний вид, а сам код. Причём оба исторических движка сразу.

  • NetQuake — оригинальная ветка, отвечающая за одиночную кампанию и кооператив.
  • QuakeWorld — более поздний сетевой движок, заточенный под соревновательные матчи с предсказанием движения на клиенте.

Обе ветки собраны из одной кодовой базы и выбираются настройкой конкретного места (place) в Roblox. Поверх работает полноценная поддержка модов: сторонние моды на QuakeC подключаются как gamedir-каталоги, ровно так же, как это делал ключ -game в DOS-версии. В репозитории есть готовые конфигурации под Threewave CTF, Rocket Arena и Team Fortress — правда, файлы самих модов пользователю нужно раздобыть отдельно.

Отдельно стоит отметить дисциплину, с которой сделан перенос. В документации проекта лежат четыре манифеста покрытия — по серверу и клиенту для каждого движка. Каждая функция исходного C-кода помечена одним из трёх статусов: проверена тестом, заменена платформенным механизмом с объяснением причины, либо признана неактуальной (мёртвый код или наследие DOS). Заявлено 825 верифицированных функций и ни одной незакрытой строки.

Проверяли не «на глаз». Эталонное поведение получали компиляцией настоящего кода WinQuake: трассировка коллизий совпадает с оригиналом побитово, цепочка расчёта движения игрока расходится не более чем на 0,0002 юнита за 300 тактов симуляции.

OpenAI портировал Quake в Roblox скриншот игры 2

Что пришлось выкинуть и чем заменить

Две подсистемы Quake в Roblox нежизнеспособны в принципе, и обе заменены платформенными аналогами:

  • Программный растеризатор уступил место геометрии на EditableMesh с повершинным освещением из лайтмапов.
  • Сеть на UDP/WinSock заменена на RemoteEvents, внутри которых ходит оригинальный протокол Quake.

Сам симуляционный слой при этом не тронут — сетевой протокол остался прежним, просто едет по другим рельсам.

Уступки платформе

Roblox — площадка с детской аудиторией и своими правилами, и это видно по списку надстроек. Все они, по замыслу автора, живут в «продуктовом» слое и отключаются, не задевая движок:

  • Аватары Roblox вместо классической модели player.mdl. Даже лицо в статус-баре HUD заменено головой вашего аватара — с той же индикацией урона, что и в оригинальных битмапах. Отключается атрибутом.
  • Мягкий режим (включён по умолчанию): белая кровь, белые гибы, исчезающие трупы. Это чисто визуальный фильтр — симуляция и логика не меняются. Модификатор +original возвращает подачу 1996 года.
  • Нативные меню взамен оригинальных DrawPic-экранов, с адаптацией под тач и экранными кнопками на мобильных.
  • Матч-директор: ротация карт, голосование в перерыве, callvote посреди раунда и админ-меню для смены правил на лету.
  • Статистика и таблицы лидеров в DataStores — глобальные, недельные и по друзьям.

Отдельная тонкость — контент. Публиковать в Roblox оригинальные ассеты id Software нельзя, они проприетарные и в репозиторий не входят. Поэтому опубликованная версия работает на ассетах открытого проекта LibreQuake. Если вы разворачиваете порт у себя, движок примет и shareware-версию, и полную розничную Quake.

Финал истории: успех технический, провал продуктовый

Самое интересное произошло уже после того, как новость разошлась по профильным изданиям. В конце августа Димсон подвёл итог сам, и итог оказался отрезвляющим: Frag Party провалилась. Шутер 1996 года, пусть и перенесённый с побитовой точностью, аудиторию Roblox не заинтересовал. Следом Димсон с коллегой потратили две недели на игру про рыбу, собирающую мусор, — проверяя уже другой тезис: действительно ли для разработки в Roblox по-прежнему нужны навыки программирования.

Так что у истории две морали. Технически ИИ-ассистент действительно способен за выходные вытащить тридцатилетний C-код на незнакомую платформу с верификацией по каждой функции — за деньги, сопоставимые со стоимостью одного рабочего дня инженера в Кремниевой долине. Продуктово это не значит ровно ничего: аудитории безразлично, насколько точно воспроизведена трассировка хитбоксов, если сама игра ей не нужна.

Контекст

Оригинальная Quake вышла летом 1996 года и недавно отметила тридцатилетие. У самой франшизы дела идут не блестяще: после реструктуризации Xbox из id Software уволили порядка 73% сотрудников. На этом фоне энтузиаст, за четыре ночи запустивший Quake внутри детской онлайн-песочницы, выглядит как минимум символично.

Алихан Сулейманов
Алихан Сулейманов

Создатель информационного портала Vkabinet.kz, посвящённого личным кабинетам и онлайн-сервисам Казахстана. Уже более 5 лет создаёт инструкции и справочные материалы для пользователей государственных, коммерческих и других интернет-платформ.

Обновлено:

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Оставить комментарий