Как мы за три недели собрали прототип игры про Архимеда, который жжёт римский флот зеркалами
В июне Meta проводила конкурс на геймдизайн-документ, а в августе объявили следующий: за три недели собрать играбельный прототип мобильной игры. Портрет, один игрок, всё работает офлайн, никаких обращений в сеть, один архив до 35 мегабайт, index.html в корне. Три жанра на выбор: tower defense, выживание и симуляция.
Я записался ещё на этапе поиска команды. Собрались в дискорде человек 5, и получилось примерно то, чего и стоило ожидать: один хотел делать командос-лайк, другие искали что-то своё, третьи пропали через два дня. В итоге остались мы вдвоём с Серегой. Он отвечал за лор, я за всё остальное.
Идею придумал Серега. Архимед, осада Сиракуз, зеркала, которыми по легенде сожгли римский флот. Хук, который не нужно объяснять: любой человек, увидев солнце сверху, зеркала посередине и корабли внизу, сразу понимает, что делать.
Дальше три недели мы добавляли по одной вещи за раз. Вот как это выглядело.
Неделя первая: сначала был только луч
Самая первая версия не была игрой вообще. Чёрный экран, сверху солнце, от него вниз идёт белый луч. Ниже кристалл, который разбивает его на три цветных. Внизу три зеркала, которые можно двигать пальцем и крутить.
И всё. Ни кораблей, ни счёта, ни цели. Просто светящиеся линии, которые отражаются по углам.
Я специально начал с этого. Если бы отражение луча не заработало нормально, вся затея не имела бы смысла, и лучше узнать об этом на третий день, чем на пятнадцатый. Отражение считается элементарно, угол падения равен углу отражения, но на экране телефона это должно ещё и ощущаться правильно.
Первая версия управления была ужасной. Крутишь зеркало на пару градусов, а дальний конец луча улетает через полэкрана. Прицелиться невозможно.
Решение нашлось не сразу: игрок должен управлять не углом зеркала, а точкой, куда попадает луч.
Δугол = (Δжеста × K) / длина_луча
Длина пересчитывается каждый кадр во время перетаскивания. Чем дальше цель, тем меньше угол на то же движение пальца. Плюс угол не прыгает мгновенно, а догоняет целевое значение, поэтому зеркало ощущается как тяжёлая бронза, а не как ползунок.
Серега попробовал и написал: «вообще охренительно». Это был первый момент, когда стало понятно, что из этого что-то выйдет.
Потом появились корабли
Прямоугольники, которые плывут снизу вверх. Луч их трогает, они исчезают.
Сразу стало скучно. Луч касается, корабль пропадает, никакого ощущения. Добавили накопление тепла: пока луч держится на корпусе, растёт шкала, корабль постепенно краснеет и загорается. Отвёл луч, тепло начинает уходить.
Вот это последнее и оказалось важнее всего. Остывание означает, что водить лучом по всему флоту бессмысленно. Надо выбрать цель и остаться на ней, а всё остальное в это время подходит ближе.
Потом появилась стена внизу, целостность в процентах, поражение при нуле и победа, если продержался. Игра стала игрой.
Алтари, из-за которых всё и получилось
Это идея, которая превратила стрелялку в стратегию.
Внизу, на берегу, стоят три алтаря: бронза, серебро, золото. Они дают ресурсы только пока на них лежит луч. И ни один луч не может одновременно доставать до алтаря и до корабля.
То есть свет один, а работы две. Каждая секунда, потраченная на добычу, это секунда, за которую флот подходит к стене ближе.
Ресурсы тратятся на дополнительные зеркала, на линзы, которые дробят луч на большее число полос, и на способности богов.
Когда мы это добавили, Серега написал, что игра стала полноценной стратегией. И он был прав: до этого игрок делал одно действие, а теперь стал принимать решения.
Корабль, который нельзя пробить в лоб
Была проблема, которую мы ловили неделю. Игрок настраивал одно зеркало и дальше пользовался только им. Остальные два стояли без дела.
Пробовали чинить спавном: слать корабли парами с разных краёв, разводить по полосам. Помогало мало.
Сработало другое: корабль с бронёй на носу. Три изогнутые бронзовые пластины, и луч, падающий почти отвесно, от них просто отскакивает. Достать до корпуса можно только под углом больше двадцати пяти градусов, а такой угол даёт только фланговое зеркало.
Одна механика заставила пользоваться всеми зеркалами сразу. Ни спавн, ни баланс этого не смогли.
Исторически это катафракт, так называли бронированные гребные суда с защищённой палубой. Названия всех типов кораблей у нас настоящие: либурна для разведки, трирема, квадрирема, катафракт и квинкверема как флагман.
Боги
Три способности, каждая копится отдельно.
Керавнос, молния Зевса. Бьёт по всей гавани разом, лёгкие суда сгорают гарантированно, тяжёлые получают половину здоровья и замирают на три секунды.
Эносихтон, это гомеровский эпитет Посейдона, «колебатель земли». Открывает воронку, которую игрок сам ставит тапом по воде. Урона не наносит, но стягивает флот из строя в кучу, по которой потом удобно бить сведёнными лучами.
Гиперион, вспышка Гелиоса. Флот замирает, броня прогорает, и копится вера, на которой работают два других бога.
Названия взяли настоящие, из мифологии, а не выдуманные. На кнопке греческое имя, под ним мелким имя бога, чтобы игрок, не знающий про эпитеты, всё равно понимал, кого зовёт.
И только потом картинки
Всё описанное выше рисовалось прямоугольниками. Корабли были бежевыми квадратами, море плоской заливкой, зеркала полосками.
Ассеты пошли в последнюю очередь, и это правильный порядок: пока меняются размеры и поведение, любая нарисованная картинка устаревает на следующий день.
Море получило градиент и бегущие волны. Появилась крепость с зубцами, которая разрушается по мере падения целостности. Корабли обрели корпуса, паруса и вёсла, которые гребут, а не просто торчат по бокам.
Дальше пошли детали, за которые отвечал Серега, и мне они нравятся больше всего. На щитах зеркал выгравирована Аретуза с дельфинами, настоящий символ Сиракуз, который чеканили на монетах в пятом веке до нашей эры. На римских парусах SPQR.
Ещё одно правило, которое мы вывели по ходу: фон должен быть тёмным. Как только море становится светлее определённого порога, лучи перестают читаться. Пришлось прописать это как жёсткое ограничение и проверять числами, а не на глаз.
Звук, которого не существует
По условиям конкурса всё должно лежать внутри архива, а архив не больше 35 мегабайт. Поэтому звуковых файлов в игре нет вообще.
Весь звук синтезируется в момент воспроизведения. Гул луча меняет высоту от того, сколько полос сведено на цель. Горящее дерево это ровное шипение плюс случайные щелчки, которые учащаются по мере разгорания. Тонущий корабль это тон, падающий с четырёхсот герц до восьмидесяти за четыре десятых секунды.
Картинки тоже рисуются кодом при запуске, а не лежат файлами. В итоге вся игра, кроме двух коротких роликов, весит меньше мегабайта.
Резонанс, который мы не объясняли
Если поставить два зеркала почти параллельно, луч начинает скакать между ними и набирает множитель урона. Мы это заложили, но нигде не подсказывали.
Тестер нашёл сам и описал своими словами: «получается туннель, и там можно несколько отражений для увеличенного дамага».
Вот ради таких моментов и делаются системы, которые дают больше, чем в них вложено.
«Тетрис с геометрией»
Дали ссылку друзьям без объяснений. Первый посмотрел на экран и написал: тетрис с геометрией.
Ни кораблей, ни осады, ни Архимеда он не увидел. Разноцветные линии и падающие блоки.
Мы к тому моменту три недели смотрели на эту игру и знали, что там происходит. Человек со стороны видел абстрактную головоломку.
Пришлось всерьёз заняться силуэтами: корпуса вместо квадратов, вёсла, паруса, море с волнами. Сама игра не поменялась ни на строчку, а первое впечатление поменялось полностью.
Второй тестер, уже после переделки, играл минуту и написал: «становится напряжённо». И сам догадался, что зеркала крутятся.
Название
Игра последовательно называлась «Лучи Сиракуз», Solar Siege, а репозиторий вообще носил имя от предыдущей концепции.
За неделю до сдачи сели за название всерьёз и прогнали кандидатов через поиск и базы товарных знаков. Красивое греческое слово Kaustra отпало сразу: это название заклинания в Final Fantasy XI, то есть занято в той же индустрии. Katoptron, по-гречески «зеркало», чистое, но англоязычный игрок услышит и не сможет записать.
Остановились на Burning Glass. Это исторический термин для зажигательного стекла, то есть буквально то, чем Архимед по легенде жёг флот. В играх свободно.
Что сейчас
Прототип сдан 8 сентября. Играбельная версия лежит на itch.io, три минуты за партию, управление одним пальцем.
Параллельно переносим игру на Godot.
Если вам зашла идея и концепция с зеркалами Архимеда — буду невероятно благодарен за любую поддержку! Сейчас проект участвует в конкурсе, и любая ваша активность имеет решающее значение:
- Поиграть в прототип на itch.io:🎮 Сыграть на itch.io — зацените механику лично и оставьте свой фидбек в комментариях.
- Поставить лайк проекту на Devpost:🏆 https://devpost.com/software/burning-glass-siege-of-syracuse?_gl=1*t4mltr*_gcl_au*MTQzNzcyMzM3NC4xNzg1NjM0ODA3*_ga*NzY2NDc1MDM3LjE3ODU2MzQ4MDc.*_ga_0YHJK3Y10M*czE3ODk2NTU0OTgkbzE3JGcxJHQxNzg5NjU1NTIxJGozNyRsMCRoMA.. поддержите заявку сердечком на странице хакатона, это очень сильно помогает в общем зачёте.
- Посмотреть и оценить ролик на YouTube:▶ Геймплей на YouTube — лайк, просмотр и пара добрых слов в комментариях под видео продвинут ролик в алгоритмах.
Буду рад ответить на вопросы, критику и предложения в комментариях под постом!