ч.17 — Я научил ИИ делать мою MMO: игровая фича теперь рождается из одного описания
Мне понадобился инвентарь. Нормальный, как в любой ролёвке: ячейки под предметы, слоты под надетое — шлем, броня, оружие в каждой руке, — перетаскивание мышкой, надевание кликом. Я описал словами, что хочу. Через несколько часов это работало по-настоящему: предметы лежат в сумке, вещь садится на куклу персонажа, а сервер не даёт впихнуть сапог в слот для шлема. Руками я не написал ни строчки — ни серверного кода предметов, ни интерфейса в клиенте. Я задал правила и проверил результат.
Это не игрушечная демка в духе «нейросеть выдала сниппет». Под капотом — настоящая 2D MMO RPG, которую я делаю не первый год: авторитарный сервер реального времени, тайловые карты, живой мир, клиент на Unity. ИИ её не придумал и не построил — он встал в мой конвейер и ускорил его так, что в одиночку я держу темп целойкоманды. Дальше — как это устроено и где у фокуса честная граница.
Сначала я перенёс сервер на Symfony
Старый сервер был самописный PHP. Он работал, держал бой в реальном времени — но знал о его устройстве только я. Любому новому участнику разработки, хоть человеку, хоть машине, пришлось бы разбираться с нуля.
Я переписал серверную часть на Symfony — фреймворк, который «знают» все, включая нейросеть. Уложился в два месяца вместо полугода. Дело не в моде: на знакомом фреймворке ИИ работает не как стажёр, которому всё разжёвываешь, а как инженер, видевший такой код сотни раз. Меньше объяснений — точнее результат.
Потом я дал ИИ руки — в сервере и в клиенте
Игра живёт на двух берегах: сервер считает правду, клиент на Unity её показывает. Пока ИИ умел трогать только сервер, я оставался узким горлышком на стороне клиента — а без клиента фича не фича.
Поэтому я построил мост в обе стороны. С одной — мой собственный инструмент управления игрой: через него ИИ делает то же, что геймдизайнер руками — рисует и правит карты, расставляет мобов, крутит баланс, читает логи и даже сам заходит в игру обычным клиентом, чтобы пощупать только что сделанное. С другой — плагин для Unity: ИИ правит сцену, пишет C#, запускает игру, делает скриншоты, читает консоль.
Соединив оба берега, я отдал ИИ обе руки. Теперь одна фича доходит до конца насквозь: правило — на сервере, его вид и эффекты — в клиенте, без шва, который раньше я сшивал вручную.
Фича из одного описания
Над мостом я собрал свой слой — набор ИИ-агентов под мой проект. Один отвечает за серверные механики, другой за Unity, третий проверяет работу. Я не пишу промт на каждую мелочь: описываю фичу — слой сам раскидывает её по исполнителям.
Тестирует тоже ИИ, и не «прочитал код — вроде ок». Он поднимает сервер, шлёт команды как настоящий клиент, сверяет ответы, ловит регрессии. Поэтому даже такая махина — авторитарный сервер реального времени плюс клиент на Unity — остаётся управляемой, а не разваливается под собственным весом.
Тот самый инвентарь прошёл этот конвейер целиком:
- сервер держит предметы и надетое там же, где вся правда мира, и сам решает, можно ли надеть вещь в этот слот;
- клиент на Unity рисует окно сумки и куклу персонажа с перетаскиванием;
- автотест гоняет всё насквозь: команды уходят на сервер, ответы сверяются — фича работает, а не «выглядит работающей».
Под капотом — последняя на сегодня модель Claude, Opus от Anthropic. Я отношусь к ней как к инструменту и соавтору: она исполняет, я задаю рамки.
Где ИИ заканчивается и начинаюсь я
Тут обычно прилетает: «да ИИ генерит мусор». Так и есть — если дать ему пустой холст. Мусор там, где нет архитектора, который заранее закрыл целые классы ошибок.
Я не прошу ИИ придумать ни игру, ни её устройство. Что за инвентарь, как работает экипировка, что делает существо в бою — придумываю я. Каркас задаю тоже я. Один пример, который геймеру ближе всего.
Вся правда о мире живёт только на сервере. Клиент ничего не решает — он показывает то, что посчитал сервер. Что бы ИИ ни написал в клиенте, он физически не может породить рассинхрон или чит: клиент не источник истины, а витрина. Тот самый инвентарь это и подтверждает — предметы рисует клиент, но разрешает или запрещает надеть вещь только сервер. Целый класс читов закрыт не проверками, а самим устройством игры. Для MMO это не мелочь: на этом стоит честность мира.
И эта развязка — моё решение, не ИИ. Он отлично пишет механику внутри заданных правил, но сам не выстроит фундамент, на котором игра переживёт тысячи игроков одновременно. Хорошая архитектура работает в обе стороны: это и рельсы, по которым ИИ едет быстро, и потолок, который он сам себе не поставит.
Вот честная граница: ИИ кратно ускоряет путь от моей идеи до работающей фичи на обоих берегах. Но скорость безопасна ровно настолько, насколько прочны рамки, в которые он поставлен. Рамки — и сама игра — по-прежнему на мне.
Что дальше
Инвентарь, существо, поведение в бою — это я уже отдаю просто описанием. Следующая граница — анимации.
Сейчас, чтобы новый монстр ожил, его анимации всё ещё нужно вручную заводить в клиент. Я хочу довести до них ту же систему патчей, которой уже доставляю в клиент карты: загрузил анимацию в админке — она уехала в игру, готовый плагин её подхватил, и всё это без возни с кодом под каждое существо. Это и проверю в следующей части — и честно покажу, справился ли ИИ.
Одно предложение — и механика живёт на сервере и в клиенте. Какую бы вы заказали первой? Напишите в комментариях — из заявок соберу темы следующих частей.
История:
- Введение
- Масштабируемость и асинхронность
- WebSocket
- Redis
- LUA и JavaScript
- Выбор технологий, протокола и ECS
- Игровые локации (тайловые карты)
- Клиентская часть на Unity
- Игровые серверные механики
- Открытый бесшовный мир в 2D игре
- FPS, Ping, интерполяция и экстраполяция
- Очереди и параллельное программирование на CPU
- Event-driven, JSON-RPC и почему не SOA
- Сетевая карта и задержка кадра (Latency frame) по RFC 2544
- Авторитарный сервер на процессах
- MVP готов
- Внедряю ИИ: механики из одного описания (вы здесь)