В 2012 году мы начали работу над Любопытной экспедицией. В то время HTML5 был другим ландшафтом, но идея быть в авангарде этой технологии была для меня захватывающей. Я начал создавать собственный движок, используя поддержку 2D Canvas в HTML5, понимая, что мы переключимся на правильный движок, как только достигнем границы нашего видения игры. Оказалось, что мы никогда этого не делали, и в конечном итоге мы выпустили настоящую премиум-игру HTML5 в Steam, GOG и HumbleStore. На сегодняшний день было продано более 200 000 единиц, и рейтинг в Steam составляет 89%.

Компания Maschinen-Mensch была основана Йоханнесом Кристманном и мной в 2014 году для работы над нашей первой игрой Curious Expedition, симулятором экспедиции в стиле roguelike, действие которой происходит в конце 19 века. Вместе со знаменитыми историческими личностями игроки отправляются в беспрецедентные экспедиции в неизведанные регионы в поисках славы, науки и сокровищ. Они наденут свои пробковые шлемы и брюки цвета хаки и отправятся в пышный, процедурно сгенерированный мир, полный чудес и тайн.

На этой странице представлен окончательный список всех инструментов и платформ, которые мы использовали при разработке Curious Expedition, а также вердикт о том, буду ли я использовать их снова или нет.

Возвышенный текст

Это был мой любимый текстовый редактор в первые пару лет работы над Curious Expedition. Я был рад уйти от всего сумасшедшего мира IDE, с которым мне приходилось иметь дело во времена моего C++ AAA, и просто работать с минималистичным, но чрезвычайно быстрым и мощным текстовым редактором. В Sublime Text есть безумное количество мощных ярлыков, которые действительно могут помочь вам активизировать вашу игру в программирование.

Вердикт: хотя мне нравится то, что Sublime Text привнес в мир программирования, я думаю, что в настоящее время его вытеснили другие мощные текстовые редакторы общего назначения, такие как Visual Studio Code…

Код Visual Studio

Если исходить из того, что я довольно сильно ненавижу Visual Studio, то довольно скептически относился к Visual Studio Code, пока не прочитал, что к этому причастен Эрих Гамма. Инструмент зарекомендовал себя, когда я захотел реализовать собственное дополнение для Sublime Text. Я сдался после трех дней погони за загадочной документацией и только что попробовал VS Code, где я смог сделать настраиваемую подсветку синтаксиса и глубокую интеграцию игровых сценариев на одном дыхании.

Мое пользовательское расширение позволяло мне наводить курсор мыши на любое событие, определенное в моем собственном декларативном языке сценариев, а небольшое всплывающее окно показывало, сколько раз событие запускалось реальными игроками, которые играли в игру во время раннего доступа. Это стало намного проще благодаря тому факту, что большая часть остальной части моей цепочки инструментов уже была запрограммирована на JavaScript, поэтому интеграция была очень простой. Наряду с тем фактом, что он, очевидно, был очень вдохновлен универсальным подходом Sublime Text, он сочетает в себе сильные стороны Sublime с современной интеграцией TypeScript/node. Неудивительно, что в настоящее время это самый популярный инструмент разработки согласно StackOverflow.

Вердикт: по-прежнему использую Visual Studio Code, даже когда работаю над Unity. По-прежнему лучший текстовый редактор.

Фотошоп

Мой партнер по разработке игр Йоханнес Кристманн, который сделал почти всю графику для Curious Expedition, использовал Photoshop для создания большей части пиксельной графики для Curious Expedition.

Вердикт: золотой стандарт манипулирования пикселями.

Пейнт.нет

Простое бесплатное программное обеспечение для редактирования пикселей. Нигде не так мощно, как Photoshop, но достаточно хорошо для быстрых макетов или исправления некоторых проблем с цветом.

Вердикт: пользуюсь до сих пор.

ТекстурПакер

Поскольку я построил собственный движок, я был счастлив использовать модульные инструменты, которые могли простым способом решать определенные задачи рабочей нагрузки движка. Мы использовали TexturePacker для создания листов спрайтов, чтобы браузеру не приходилось загружать сотни отдельных спрайтов (как мы делали вначале), а всего лишь пару больших листов. Это очень помогло сократить время загрузки в веб-версии (потому что оказалось, что загрузка каждого изображения по отдельному соединению очень медленная, а также помогло оставаться ниже максимального количества одновременных подключений, разрешенных для страницы). TexturePacker экспортировал файл JSON вместе с атласом, который легко интегрировался в наш движок.

Вердикт: многие инструменты теперь имеют встроенные возможности упаковки текстур, но если вы ищете что-то, что расширит ваш пользовательский движок, или вас не устраивают какие-либо аспекты вашего встроенного средства создания атласа текстур, TexturePacker по-прежнему отличный и доступный выбор.

Трелло

После дней AAA и работы с Hansoft и Jira я был рад перейти к чему-то более простому и гибкому (я большой сторонник простоты — см. текстовые редакторы). Мы довольно активно использовали Trello в течение первого года производства и действительно наслаждались тем, насколько увлекательным было его использование, но в конечном итоге столкнулись с проблемами масштабирования. Карты часто пропадали между множеством досок, с которыми мы вскоре боролись. Нам было трудно оценить, сколько мы можем вместить в каждое альфа-обновление, а передача карточек другому человеку была сложной и часто приводила к путанице в команде.

Вердикт: отлично подходит для хобби-проектов, но недостаточно мощен для запуска полноценной игры. Вот почему мы начали использовать Codecks.

Кодеки

Codecks — это недостающая часть между чем-то простым, таким как Trello, и чем-то чрезмерно корпоративным и требовательным, как Jira. Первоначально он был начат старым коллегой из Yager. Вот как я впервые услышал об этом в 2015 году, и с тех пор мы используем его на разных этапах нашей компании (сейчас над сиквелом работает от 2 до более 20 человек). Тогда мы еще не знали, что настолько полюбим Codecks, что создадим совместную компанию с первоначальной командой и будем совместно создавать инструмент с 2019 года.

Вердикт: мы ЛЮБИМ кодеки.

"Гугл Хром"

Веб-браузер Google был не только нашей основной тестовой средой, но и моей основной станцией отладки благодаря превосходным инструментам разработки Chrome. Еще в 2013 году Firefox лидировал благодаря firebug, но Chrome в настоящее время, на мой взгляд, доминирует над опытом разработчиков.

Вердикт: Chrome по-прежнему предлагает лучшие инструменты для веб-разработчиков.

Битбакет

Я решил использовать git в том же стиле, что и HTML: это была интересная технология, и она, казалось, решила одну из самых больших проблем, с которыми я столкнулся при работе в AAA с Perforce: создание ветки теперь занимает секунды, а не минуты. или часы. Я выбрал Bitbucket для хостинга, потому что он был бесплатным для пяти пользователей, в то время как GitHub привлекал всю шумиху, но не имел бесплатного уровня для небольших команд, желающих работать над проектами с закрытым исходным кодом.

Самым большим недостатком git является то, что он изначально не подходит для работы с большими файлами и не допускает монопольного извлечения (помечает двоичный файл как используемый и не позволяет никому работать с ним в это время). Обе проблемы не имели особого значения для нашего производства, поскольку мы просто хранили большие исходные файлы и видеофайлы на облачном диске, в то время как внутриигровые активы были, к счастью, очень маленькими из-за работы над ретро-игрой с низким разрешением. Вторая проблема нас тоже не коснулась, так как наша команда была четко разделена по технической/художественной дисциплине. Между тем, Bitbucket теперь также предлагает поддержку LFS, которая позволяет обрабатывать большие файлы непосредственно в git, управляя ссылками на большие файлы, размещенные на облачном сервере, беспрепятственно и без дополнительного взаимодействия с пользователем.

Вердикт: по-прежнему доволен Bitbucket, хотя, как только вы превысите порог в 5 человек, приз значительно возрастет.

Исходное дерево

Sourcetree — отличный бесплатный клиент git, который был приобретен Atlassian и, следовательно, имеет отличную интеграцию с Bitbucket, включая отличную поддержку LFS. Иногда случайные обновления версии приводят к нарушению работы пользователя, но в целом я вполне доволен этим и еще не пробовал лучшего клиента.

Вердикт: все еще пользуюсь.

Электрон / NW.js

Как только вы начнете распространять свою HTML5-игру на платформах распространения для ПК, таких как Steam или GOG, вам понадобится настоящий исполняемый файл, который люди смогут загрузить, чтобы играть в игру в автономном режиме. NW.js и Electron — два отличных варианта для этого. В основном это похоже на загрузку браузера Chrome с фиксированной домашней страницей, которая указывает на вашу игру, но скрывает обычный пользовательский интерфейс браузера. С точки зрения пользователя разница с обычной программой на C++ неразличима. Он также поставляется с собственным бэкэндом узла, который позволяет получить доступ к специальным файловым API и функциям, которые довольно распространены для программного обеспечения для настольных компьютеров, но не являются частью обычной спецификации HTML. Я обнаружил, что обе платформы работают хорошо и их легко настроить и настроить. Мы использовали NW.js для первых двух выпусков, но позже переключились на Electron, потому что он давал лучшую производительность.

Вердикт: Electron — довольно крутая технология, и я также использовал ее для личных побочных проектов, где хотел быстро создать настольное приложение с классной технологией HTML.

Зеленые работы

Green Heart Games оказала разработчикам игр огромную услугу, реализовав библиотеку Javascript для Steam SDK. Это позволяет вам легко интегрировать расширенные функции Steam из вашей HTML-игры. Библиотека не полностью охватывает последние версии Steam SDK, но она поддерживает все основные функции, которые вам понадобятся, чтобы выпустить в Steam, не вызывая смеха со сцены.

Вердикт: спасибо, Green Heart Games! Буду использовать снова (также нет другого варианта, кроме реализации собственной библиотеки JS)

Back4App / Разбор

Мы решили не только выпустить нашу игру через платформы магазинов для ПК, которые занимаются оплатой и управлением пользователями для нас, но и выпустить игру также в веб-версии на нашем собственном веб-сайте. Вы можете играть в полную игру онлайн до этой даты здесь. Это означает, что нам пришлось подключить собственную аутентификацию пользователя и процесс оплаты. Для обработки регистрации пользователей я использовал Parse, серверную систему на основе узлов, которая предоставляет множество базовых функций, таких как регистрация, управление сбросом пароля и облачная база данных для хранения информации. В какой-то момент во время нашей разработки Facebook, к сожалению, купил Parse и решил закрыть его после объявления льготного периода в один год. К счастью, этого времени было достаточно, чтобы другие бэкэнд-провайдеры восполнили пробел и предоставили услуги, совместимые с Parse. В итоге я использовал Back4App, который мы используем с тех пор, и хотя иногда серверная часть может быть немного неуклюжей, в целом она работает отлично.

Вердикт: отлично сработало для нашего проекта, но сейчас я бы, вероятно, использовал что-то с большей долей рынка.

Виджет HumbleStore

Процесс оплаты для нашей собственной системы аутентификации пользователей обрабатывался простым виджетом HumbleStore. Они поддерживают различных платежных систем и взимают только 5% от дохода. Недостатком, конечно же, является то, что они обеспечивают нулевую видимость вашей игры. Запуск виджета не имеет ничего общего с тем, чтобы быть в фактическом HumbleStore или отображаться на их домашней странице. Вам придется самостоятельно привлекать каждого из ваших клиентов на свою домашнюю страницу. Подключение к нашей системе управления пользователями было выполнено путем создания моего собственного простого генератора ключей и загрузки сгенерированных ключей в серверную часть HumbleStore для распространения и в нашу собственную облачную базу данных для проверки.

Вердикт: он отлично сработал для того, что мы хотели получить. Сегодня я предпочел бы использовать виджет itch.io, потому что я думаю, что они являются хорошей силой с точки зрения нашего сообщества разработчиков игр.

Сдвиг слоев

Для размещения нашего сервера нам понадобился сервис, поддерживающий запуск нашего бэкэнда узла. Я использую Layershift, который поддерживает узел и позволяет плавно увеличивать и уменьшать масштаб в зависимости от спроса, имея при этом довольно конкурентоспособную модель ценообразования и отличный пользовательский интерфейс администратора для управления сервером.

Вердикт: никогда не было проблем с этим. Воспользуюсь снова.

Краудин

Curious Expedition содержит более 80 000 слов и все же была переведена более чем на десять языков благодаря нашей энтузиастической базе игроков. Crowdin — это мощная система управления переводами, которая позволяет вам загружать свою текстовую базу и управлять переводчиками вашего сообщества. Вы могли бы обойтись без выделенной системы, просто поручив сообществу заниматься переводом полностью самостоятельно, но предоставление общего пространства для этого отлично подходит для обнаружения и прозрачности для всех участников.

Вердикт: большое спасибо нашему переводческому сообществу, оно того стоит.

КофеСкрипт

CoffeeScript — это язык программирования, который объединяет идеи из Python и Ruby в синтаксис JavaScript и избавляется от фигурных скобок и вместо этого использует пробелы. Он допускает гораздо более плотный и в то же время читаемый стиль письма, но без проблем компилируется в обычный JavaScript.

Вердикт: CoffeeScript сослужил нам очень хорошую службу, но теперь я бы просто использовал обычный JavaScript или что-то современное, например TypeScript, поскольку синтаксис JavaScript развился до такой степени, что различия не стоят того, чтобы иметь дело с дополнительным шагом в конвейер больше.

"Гул!" / FFmpeg

Гул! — это небольшая звуковая JS-библиотека, которая помогает справиться с некоторыми сложностями поддержки звука в различных типах браузеров. Чтобы охватить всех основных производителей, я преобразовал все необработанные wav-файлы с помощью скрипта Python и FFmepg в форматы .ogg и .mp3, а затем использовал Buzz! для воспроизведения.

Вердикт: Buzz! легкий, но также довольно ограниченный, и мне пришлось сильно расширить его во время производства. Если бы я начал все сначала, я бы, вероятно, просто начал с обычных звуковых возможностей HTML.

СахарJS

Sugar добавляет массу очень удобных функций расширения для коллекций и других базовых типов данных. Я довольно широко использовал его в кодовой базе, особенно в сочетании с синтаксисом толстой стрелки CoffeeScript, чтобы работать в функциональном стиле программирования так часто, как только мог.

Вердикт: понравилось работать с ним.

твин.js

Эта библиотека JS содержит набор удобных функций анимации. Вы используете анимацию для плавной анимации свойства от одного значения к другому. Эта библиотека содержит почти все мыслимые функции интерполяции, независимо от того, ищете ли вы что-то игровое или механическое.

Вердикт: работа выполнена. Не на что жаловаться.

hjson

Все сущности внутри Curious Expedition определены в стиле декларативного сценария. Первые пару месяцев я просто загружал обычные JS-файлы со словарями, выложенными в соответствии с нашей собственной моделью сущностей. В конце концов я переключился на JSON для упрощения перезагрузки во время выполнения, но жесткие правила синтаксиса вызвали недостаточное количество трений. Я переключился на hjson, потому что он более мягкий. Кстати, вы можете найти все наши файлы скриптов игрового контента на github. В конце концов, даже hjson оказался не таким гибким, как мне хотелось бы, и я реализовал более расслабленный синтаксический анализатор, основанный на парсере hjson.

Вердикт: по-прежнему будет использоваться HJSON вместо JSON, если только компьютеры не будут читать ваши файлы конфигурации.

Питон / Рубин

Python и Ruby — отличные языки сценариев для создания быстрых файлов сценариев. Я использовал их время от времени для предварительной/после обработки файлов сборки, например. за упаковку игры для Steam-релизов.

Вердикт: воспользуюсь снова.

Любопытная экспедиция 2

Спасибо за чтение страницы. Если у вас есть дополнительные вопросы или замечания, свяжитесь со мной в Твиттере или по электронной почте riad-at-codecks.io. Сейчас мы работаем над продолжением Curious Expedition. Подробнее об этом можно узнать здесь: Любопытная экспедиция 2.

Первоначально опубликовано на https://www.codecks.io.