Worms Zone logo

Краткая история создания «клона» slither.io

Главное верить 🙂

Worms Zone – игра про червяков или slither.io на стероидах

Изначально я даже не думал, делать игру. Просто мне захотелось попробовать реализовать плавное движение червя, у которого сочленения движутся не по строго заданной игроком траектории, а ведут себя более естественно. Да, это немного сложнее и требует больше вычислений, зато выглядит такое движение приятнее и интереснее. Первые тесты я сделал на Java-подобном языке в Processing. Через час был готов первый набросок – проект на GitHub.

Понаблюдав за результатом проделанной работы в виде червей поедающих «яблоки» я и решил заняться разработкой полноценной игры.

Вначале в лоб переписал алгоритм движения червя на C++, после чего начал дорабатывать алгоритм.
Самое важное – пройти тест на «закручивание» – когда игрок закручивает червя в кольцо минимально возможного размера. Большинство подобных игр фейлятся на этом тесте, т.к. хвост червя перестает двигаться, а движется только голова и пару сочленений за ней. Выглядит ужасно.

Реализовав алгоритм, проходящий тест на «закручивание», я столкнулся с новой проблемой – у длинного червя много «невидимых» сочленений на экране, перекрытых другими сочленениями. Пришло время доработать алгоритм – хвост не только ползет за головой, но и количество видимых и участвующих в расчетах сочленений уменьшается. А когда червяк ползет прямо, то количество сочленений снова увеличивается до актуального значения.

Осталось сделать мелочи – червяк на ускорении должен терять свою массу и, соответственно, его длина и толщина должны уменьшаться. А при нормальном движении и поедании всяких вкусняшек, червяк должен расти и в длину, и в ширину. Эти мелочи оказались не столь просты в реализации, хотя поначалу выглядят простыми – всегда есть нюанс. А тут их было много 🙂

Развитие игры и геймплея

На игровую арену добавлялись черви-боты и постепенно улучшался их AI. Первые версии AI были мягко говоря отвратительны, сейчас боты стали смышленее, а иногда и наглее.

Проводил эксперименты с интерфейсом. Увы, дизайнер и художник из меня никакой. Так что получилось то, что получилось.

Постепенно добавлялась поддержка различных платформ – iOS, Apple TV, Android, Android TV, Web, Linux, Facebook Instant Games, ОК, ВК и прочие платформы. Поскольку разработка велась под macOS, то это и была первая платформа, на которой работала игра.

Реализовал различные способы управления – мышка, пульт ДУ, геймпад, клавиатура.

Развивался геймплей – появлялись новые поверапы: временный удлинитель червя; радар для отображения чужих червей на карте; x5 множитель, позволяющий быстро вырастить червя и заработать очки.

Над балансом геймплея приходится работать до сих пор. Никак не найду оптимальные параметры для: размера арены и максимального количества червей на ней; скорость роста и скорость потери веса червя; стоимость скинов и кастомизации червячка.

Постепенно игра обрастала различными возможностями. Добавлялись различные текстурированные скины. Для упрощения создания текстурированных скинов был написан простейший плагин для Photoshop. Простейший он потому, что выполнял мало работы и часть действий все равно приходилось выполнять врукопашную.

Немного технических деталей

Все спрайты (интерфейс, элементы скина, эффекты, поверапы) хранятся как отдельные файлы, а на этапе сборки ресурсурсов создаются атласы и описания для них. Делается это все из консоли. Да, я люблю консоль. Упаковщик атласов, конечно, свой.

Написал простенький шейдер, реализующий “круговой индикатор” для отображения оставшегося времени действия поверапа. Этот шейдер я сделал на базе моего старого шейдера, доступного на Shader Toy. Ничего особенного, можно было обойтись и без него.

Игра поддерживает несколько языков – Английский, Русский, Французский, Испанский, Вьетнамский. Добавить новый язык не проблема – нужно лишь заказать у кого-либо перевод. В игре используется TTF-шрифт Noto. Это свободный для использования шрифт от Google, содержащий глифы для множества языков, а атлас с нужными символами создается в рантайме.

Ссылки на игру