Воскресил свою браузерную космостратегию 2010 года: бэкап БД был потерян, не решался браться пока не появился Cursor
В 2010 году я решил вступить в партию GameDev: на рынке космических стратегий было тухло. Знаменитый СтарКвейк на стратегию никак не тянул, в сети главенствовал Огейм и его бесчисленные клоны. А три ископаемых и простенькое развитие колоний давили на меня отсутствием реалистичности. Походил по гитхабам и, не найдя вменяемого движка, решил писать с нуля.
Так появился «Полдень XXI века» - браузерная космическая стратегия. Расскажу, как она жила, умерла и как я её недавно воскресил.
Как это было в 2010-м
Стек - классика того времени: фронт на Flash, бэк на PHP + MySQL. Писал в одно лицо, с помощью художника и дизайнера (им бесконечное спасибо!). Проект сначала жил на моём ноутбуке, потом на скромном VPS, а под конец переехал на нормальный дедик в Германию с кучей ядер, памяти и диска.
Именно на этом проекте я впервые познал HighLoad. На собесах долго пугал всех цифрами: 5000 RPS и 30 000 SQL запросов в секунду. На PHP и MySQL, без всяких C++ и NoSQL - и всё работало! Как? Нууу… через одно место, разумеется:
- Мастер MySQL жил целиком в памяти, а его раб-близнец писал на диск и заодно был бэкапом;
- php-fpm держали в памяти и динамически скейлили от 100 процессов, в пике их было около 500;
- и на том же серваке спокойно жили другие проекты.
В расцвете онлайн был 100–150 игроков. Потом, как обычно, донат начал снижаться, и когда проект перестал оплачивать сервер, я подождал пару лет и понял: «лошадь умерла, можно с неё слезать».
В 2019 году выложил код на гитхаб в открытый доступ. Одна проблема: бэкап базы не уцелел. Точнее, уцелела версия 2012 года, в которой много чего не хватало. В итоге проект запустить было нельзя. Чтобы сервак хотябы стартовал нужна была структура БД.
Как Cursor восстановил базу из кода
Где-то месяц назад мне пришла мысль: у меня есть курсорыч, а почему бы не отдать реанимацию БД ему? Пусть пройдётся по коду, вернёт всё как было, он хорошо справляется с монотонной тупой нагрузкой.
Сработало. Мы прошерстили все исходники и по SQL-запросам полностью восстановили структуру всех таблиц. Самое смешное - большую часть потерянных объектов удалось вернуть благодаря антипаттерну: в коде было захардкожено много ID уникальных кораблей и чертежей с описанием их функциональности. Редкий случай, когда антипаттерн пригодился : )
Написали простенький docker-compose - и всё запустилось.
А дальше понеслось
- разобрали исходники Flash и перепилили фронт, вместо него теперь svelte;
- перерисовали все корабли и постройки, обработали напильником «мультики», стараясь не сломать геймплей;
- урезали экономику: 60 ископаемых и 50 химических элементов были суперреалистичны, но оказались оверкилом;
- поправили баланс кораблей и колоний.
В какой-то момент понял, что игра реально воскресла, и ради интереса проверил старый домен. Его забрали сквоттеры, как только я закрыл проект, но сейчас он снова был свободен. Забрал : ) Заодно теперь я знаю чем плохо перкупать старые домены - гугл наотрез отказывается давать рекламу. Уж не знаю чем торговали в пробел когда я не владел доменом, но гуглу это очень непонравилось.
На полный рефакторинг и реинкарнацию ушло чуть больше двух недель. И на старый домен, как по волшебству, потянулись старые игроки. Когда прикрутил платёжку, репозиторий на гитхабе закрыл.
Перевод за три дня вместо пары месяцев
Раньше я боялся браться за локализацию: понимал, что убью на неё пару месяцев, а конкурировать с англоязычными монстрами глупо. Когда один игрок предложил бесплатно перевести все тексты на немецкий, я даже отказался.
Сейчас на механизм универсального перевода ушло неполных три дня. Игра теперь на трёх языках: русском, английском и немецком.
Да, не без огрехов, само собой перевод делал не носитель и кое где там встречаются казусы, но он есть и работает, поправить тексты это дело техники.
Что в игре сейчас
- Корабли по-прежнему собираются из деталей, а детали - из элементов или других деталей. Та самая реалистичность, которой мне когда-то не хватало в клонах Огейма.
- Планету реально можно застроить - не просто "поставьте электростанцию", а их может быть и 5 и 10 и прямо на клеточках : ) В общем планета настоящая.
- Для новичков доработали обучение, чтобы не бросать человека одного посреди галактики с 50 элементами.
- Две валюты: кредиты и конфедераты. Честно про донат: часть макетов, чертежей и навыков продаётся только за конфедераты. Но по больше части донат дает скорость, я решил что монетизировать лень самый надежный способ заработка. Можно строить неделю, а можно купить сразу.
Куда дальше
Перевод затевался не только ради английского и немецкого. У меня есть очень старая задумка.
Кому-то нравится космос: звёзды, планеты, корабли, орбитальные станции, горящие под бомбардировкой планеты. Другой мечтает о битвах с полчищами орков, лучниках и коннице в латах. Третий - морской волк, адмирал с сотнями кораблей, подлодок и авианосцев.
А теперь представьте, что вы играете в космическую стратегию, кто-то воюет с орками и эльфами, а кто-то отправляет подлодки исследовать глубины океана - и всё это один мир. Просто разные его «переводы». Вот к этому я и хочу прийти.
Будет ли это прибыльно? На самом деле не так уж важно. Идея склеить несколько миров воедино затягивает меня намного больше.
Если интересны подробности про восстановление базы или тот самый хайлоад на PHP - спрашивайте в комментариях. Критику тоже жду: игра живая, баланс правится.
Страница игры: https://21noon.com





























