Growing Crystals vol 7. Релиз r1

Здравствуйте, друзья! Сегодня 8й день и первый релиз игры Growing Crystals! За последний день разработки клиента и сервера удалось сделать гораздо больше чем за все остальные вместе! Немного о тех вещах, без которых релиз был бы не возможен:

Управление полностью переведено на клавиатуру! Помимо этого, на клиенте были добавлены дополнительные проверки допустимости ходов, которые позволяют блокировать отправку серверу запроса о попытке пользователя пойти в стену. Вы можете это проверить, попытавшись совершить намеренный ход в стену, вы увидите что счётчик обращений к серверу при этом не увеличится. Реализуется это весьма просто, на клиенте хранится массив допустимых движений пользователя, который обновляется сервером при каждом ходе пользователя. Также этот функционал запрещает обрабатывать нажатие клавиши пока не получен ответ от сервера на ранее отправленный запрос.

Вся критически важная логика находится на сервере, поэтому даже первый релиз достаточно надёжен с точки зрения устойчивости к читерству. В чём, надеюсь мы и убедимся, не увидев на scoreboard игроков которые справились с заданием менее чем за минуту. В реализации сервера пришлось реализовать 2 интересные вещи: механизм циклических событий (например, рост кристаллов) и механизм стека событий (строительство объектов).

Добавилось много графики, что может повлиять на скорость загрузки. При создании объектов костюм персонажа загорается неоном как в первом газонокосильщике. Этот эффект объясняется тем, что объекты производит костюм в результате кристального синтеза.

Хочу отметить, что это маленький релиз, не за горами второй релиз в котором будет исправлен баланс, будет добавлена анимация, реализована плавная синхронизация таймера и другие приятные вещи. Откровенно говоря, для режима одиночной игры очень вялая динамика, но игра может затягивать. Динамика такова, поскольку игра изначально рассчитывается для мультиплеера и нельзя давать людям развиваться до max level за один день.

До открытого репозитария пока рановато, но, если у вас будет интерес, готов опубликовать архив исходников.

Рассчитываю на объективную критику и советы относительно игры.

О игровом балансе

Терминология:
b — blue crystals синие кристаллы
r — red crystals красные кристаллы
y — yellow crystals желтые кристаллы
bl, rl,yl — blue/red/yellow crystals limit, количество синих/красных/желтых кристаллов, которое может быть у игрока в распоряжении. Также это обозначение используется для ёмкости сейфов.

ppw — player posible ways, допустимые движения игрока
bs — blue (crystals) speed скорость генерации синих кристаллов

Значения по умолчанию

  • костюм генерирует 1b in sec
  • костюм генерирует 1r per 100sec
  • ёмкость костюма 50b, 2r, 1y
  • кристаллов в наличии по умолчанию 30b

На перемещение на одну клетку авиасёрф расходует 2b.

Сейфы (safes)
Клавиша (код объекта) Стоимость Эффект
Y (s1) 30b +100bl
U (s2) 100b +300bl
I (s3) 50b,1r +250bl +1rl
Сборщики (collectors)
Клавиша (код объекта) Стоимость Эффект
H (c1) 50b +1b every 10sec
J (c2) 50b +1b every 14sec, время генерации 1r: -1/3
K (c3) 400b +1b every 1sec

В принципе, игра детерминируема, но также существуют быстрые рецепты строительства и в известных играх, например, в StartCraft, все же помнят быстрый алгоритм производства 6 зерглингов? Я пытался добиться того, чтобы оптимальное решение было не очевидным, также на конечный результат зависит от перемещений игрока и его расходов синих кристаллов в виде топлива. Так что, думаю, не будет за первую неделю в Scoreboard’e 10 первых мест с одинаковым результатом.

Справочник команд к серверу

  • act (action)
    • start, используется с параметром player содержащим имя игрока
    • n (north) ppw[0] — сделать ход на север
    • e (east) ppw[1] — сделать ход на восток
    • s (south) ppw[2] — сделать ход на юг
    • w (west) ppw[3] — сделать ход на запад
    • up — обновление информации на клиенте
    • end — закрытие игровой сессии (не реализовано на клиенте)
    • c (construct), используется с параметром const (construction)
      • s1 (safe 1) ppw[4] — построить сейф 1
      • s2 (safe 2) ppw[5] — построить сейф 2
      • s3 (safe 3) ppw[6] — построить сейф 3
      • c1 (collector 1) ppw[7] — построить сборщик 1
      • c2 (collector 2) ppw[8] — построить сборщик 2
      • c3 (collector 3) ppw[9] — построить сборщик 3
  • запрос без команды — статус сервера и сессии

Играть в Growing Crystals r1

Журнал улучшений, после релиза

  • game.class.php:277 non-optimal-solution
  • Подсветка лимитов JS
  • Строительство через события: строительная площадка -> результат

Идеи в goods box

  • Управление на 100% с клавиатуры
  • WebSocket
  • После первого релиза завести аккаунт на habrahabr
  • Создать Git для проекта

Идеи в trash box

  • На всех объектах принадлежащих игроку горит дополнительная голубая лампочка;
  • Если у игрока нету топлива, что его авиасёрф перестаёт работать и садится на землю, а в обычном режиме он слегка покачивается в воздухе и работают 4 реактивных двигателя по краям авиасёрфа;
  • Если на складе что-то есть, то у него мигает индикатор;
  • Апгрейды защитных башень;
  • Взрывающиеся при разрушении склады;
  • Артефакт увеличивающий скорость перемещения игрока;
  • Артефакт увеличивающий радиус действия игрока;
  • Предмет, который можно бросить на несколько экранов, чтобы посмотреть что там происходит;
  • Мины;
  • Кузница опыта, производящая специальное вещество, получаемое из сжигания кристаллов и необходимое для получения звания;
  • Звание — это предмет в инвентаре.
  • Объект карты — ограждение;
  • Объекты, расползающиеся по карте;
  • Декоративные мегаобъекты;
  • Наличие сверхдорогих объектов с особыми свойствами;
  • Список друзей, чтобы на них не действовала защитная башня;
  • Общие склады для друзей;
  • Шаринг в социальных сетях;
  • Переход на WebGL.

Краткий итог: Задача на первый релиз полностью выполнена.

Сводка

Начало: 25 апреля 2014 года.
Команда: 1 человек.
Израсходовано: 56 + 12 = 68 чч.
Средняя производительность: 68/8 = 8,5 чч/день

Описание игрового процесса

40/100

Расчет баланса

30/100

Игровая графика

25/100

Веб-клиент

20/100

Игровой сервер

30/100

ИТОГО

145/500

Играть в 0.05r1: Growing Crystals r1

Продолжение: Growing Crystals vol 8. Улучшаем интерфейс, даём оценку игровому балансу