Tvvin Core: прошлое, настоящее и будущее проекта

Вот гаминатор и закончился, казалось бы можно выдохнуть, но увы. Впереди ещё много работы.

Здесь я опишу путь проекта от самого начала, до потенциального конца, рассказав что было на гаминаторе, с чем столкнулся и как решал.

Прошлое

Ноги проекта, его геймплейная идея и визуальный стиль растут из участия в Ludum Dare. Сейчас мне сложно реконструировать события разработки этого проекта в то время. Даже откуда пришла идея — вспоминается с трудом.

1.png

Тема конкурса была «два жанра», что казалось мне бредом. Почти любая тема конкурса мне видится бредом, так что не обращайте внимание. Скорее всего я вдохновился игрой в пары одного из местных пользователей rockit. Он как раз её тогда выкладывал насколько я помню. Полистав тему ЛД здесь, и посты на официальном сайте ЛД — я увидел что там много раз упоминается Space Invaders.

Здравствуйте. Я — классная идея. Можно войти?

Но какие именно пары искать и как это будет связано? Тут следует сказать спасибо nuprahtor, т.к. именно благодаря его творчеству и тусовке на андергамине у меня возникла любовь к старым телевизорам. Да, да, кроме системы освещения и травы я ещё тащусь по телевизорам. Просто в отличие от травы это блюдо я часто оставляю на десерт. И в силу того что мои проекты медленно доезжают до релизов, увидеть игрокам их ещё предстоит. Но внимательный игрок в мои игры заметит, что телевизоры возникают в моих играх регулярно. Именно так и родились эти телевизоры-тараканы. Соответственно, игроком должен был стать пульт от телевизора. Логично же?

2.png

Визуальный стиль я выбрал не пиксель-арт, но и так чтобы не упарываться с детализацией. Вдохновлялся Hyper Light Drifter, видимо, и Monument Valley. По крайней мере там похожая игра с градиентами.

Самими парами я сперва хотел сделать изображения на телевизорах. Изначально всякие иконки интернет-сервисов. Но я быстро понял, что они слишком мелкие. Потом я вспомнил как рубился в денди на джойстиках с друзьями. В то время я так же увлекался историями становления разных консолей, так что знал что видов джойстиков есть много. И решил именно их и сделать. Где-то рядом витала в воздухе идея о том что игра о поиске второго игрока для совместной игры. Но я так и не смог её пришить белыми нитками. Во время участия в лудуме белые нитки идут взаместо эпоксидки. Не нужно ждать пока  сохнет, но в то же время гораздо надёжнее соплей.

Собственно в чём прикол то? Прикол в том, что карточки из «игры в пару» атакуют игрока, который выражен непонятной штукой, которая ползает внизу экрана. Цель в обеих жанрах одна и та же — зачистить игровое поле. Только здесь предлагается очищать игровое поле механикой пар. Уже на прототипах я понял, что геймплей весьма удачный (если он, конечно, не доканал в детстве). С одной стороны это не чисто интеллектуальное скучное дрочилово, а с другой — и не просто тупая стрелялка. С появлением механик обмена позициями и невидимых противников стало прям вообще неплохо.

5.png

Глобальной цели в игре не было. Просто пройти 20 уровней. 4 локации по пять штук. Локации тоже выбирались абы как без какой-либо идеи.

Музыку пришлось искать на бесплатных сайтах, звуки я взял из паков 99sounds. Там довольно неплохая библиотека, которой я пользуюсь по сей день.

Для игры, сделанной за три дня очень даже неплохо получилось. Что и показали оценки на LD, которые, пожалуй, лучшее за последние 5 лет моих участий там.

yfYhUvH

Настоящее

Про проект с тех пор я вспоминал регулярно, но всё время был занят допиливанием то Cold Silence, то Sig.NULL, то участиями во всяких конкурсах.

В этом году я вспомнил про этот проект по той причине что мне нужен был проект как можно более готовый с точки зрения игровой механики. Если для кого-то ещё секрет, в данный момент жизни, не без помощи Кситилона, я зарабатываю на кусок хлеба самиздатом проектов на XBOX. Поэтому и хотелось взять что-то более менее готовое. И эта игра мне виделась именно такой. Как я тогда думал. Поменять управление, наделать противников, уровней и готово!

Но после краткого анализа я выяснил, что там никакой не fullHD. Что управление мышкой. И некоторые уровни скучноваты. Хотя идея меня снова зажгла, спустя три года! Увы, я не такой великий издатель как Кситилон, так что не могу по-бырому абы как адаптировать проект. И даже возможность заработать дважды (на ЛД версии и на полной) меня не соблазняет. Я всегда хочу чтобы работа была сделана хорошо. И этот раз не стал исключением.

Приступил я примерно за 3 дня до начала гаминатора и начал с отрисовки новой графики. Благо здесь она рисуется весьма просто.

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

У меня восемь кошек. Каждый день я их кормлю 3 раза. Что занимает минимум полчаса. Ещё есть собака, которую нужно кормить чётко по расписанию иначе она заблюёт пол, и выводить гулять чётко по расписанию, иначе она нассыт и насрёт. Каждые пару дней я отправляюсь за продуктами что тоже отнимает часа 2 времени. Кошки постоянно болеют по кругу, поэтому мне приходится их возить в ветклинику пару раз в неделю. Дорога только два часа занимает туда-сюда, а ещё можно часа полтора провести в очереди (даже если записывался заранее). Я не опытный водитель пока что. Ездить не страшно, но устаю сильно, так что после поездки я часа 2−3 тупо сплю. Вообще чтоб вы понимали, у меня сейчас период жизни когда я сплю когда получится. Помимо регулярных дел, я уже полгода нахожусь в процессе переезда в дом, который в 80 км от моего текущего места проживания. И мне приходится туда регулярно ездить чтобы дать пенделя ремонтникам. А с ними тоже нужно договариваться. Это хорошо, что я работаю сам на себя и у меня есть время ездить. Но и плохо, потому что каждый такой потраченный день — это минус день работы над проектом. А проекты делать надо, иначе через несколько месяцев нечего будет кушать. С учётом того, что отдача от проекта на консолях только через два месяца с релиза. Что такое нормальный сон я вообще забыл. Днём я работать над проектами не могу — много мешающих факторов, в том числе орущие под ухом коты за два часа до планового времени кормёжки. Так что единственное время работы — это ночь, когда все спят. Когда спят коты. Когда спит жена. Когда спят магазины и банки. Когда спят рабочие. Только я не сплю и пытаюсь что-то делать. Когда я сплю? А вот как-то в перерывах и сплю. Обычно по утрам.

Тут, кстати, Кситилон справедливо заметит, что если бы я издавал все свои проекты в том виде, что они есть, то части проблем не было было. Наверное. Если бы такое издательство не причиняло мне почти физическую боль. Хотя и сейчас приходится идти на компромиссы между совестью и необходимостью.

Я всё это описал, чтобы дать понять, что в таком режиме как-то погрузиться в проект и жить им довольно сложно. Последний раз мне это удавалось когда я был студентом, то есть лет 8−10 назад.

Тем не менее весь месяц я занимался проектом в таком режиме. Моё участие случилось только потому что мой переезд отложился на примерно месяц незадолго до начала гаминатора.

Итак я уже начал переделывать графику, и это был самый простой этап работ. Второе — мне нужно было заменить мышку на геймпад и я вообще не представлял как это сделать. Третье — поменять концепт, т. е. сделать нормального персонажа, заменить образы пар (геймпады) на что-то другое. Поначалу это должны были быть некие ядра (cores), что и легло в название проекта, т.к. игрок должен был находить ядра-близнецы. Персонажем я сперва хотел сделать чувачка в плаще, вспоминая как ни странно Иней Душ. Вообще у того проекта Кситилона была атмосфера фатализма и безысходности, которую я захотел реализовать в своём проекте.

Когда я начал рисовать чувачка в плаще, то понял что это надолго, поэтому путём упрощения набросков пришёл к глазу в плаще и решил назвать его Моноглаз.

qtDkRi2

Но всё ещё было не понятно как он будет находить пары. Стрелять из глаза что ли? К тому же мои быстрые эксперименты по замене мышки на геймпад показали что это бред и неиграбельно. Нужно было полное переосмысление этой части игрового процесса, сохранив динамику открытия пар из ЛД версии. Первое приближение — атака в два хода. Сперва запуск, потом остановка. Но это тратит довольно много времени игрока и процесс и так неспешный ещё сильнее замедляется. И тогда, чудесным образом при перерисовках персонажа пришёл концепт с руками, которые его плащ.

LzNJBTX

То есть плащ размыкается и получаются руки на проводах. Которые летят и тыкают в телевизоры и прочую технику. Сперва я планировал сделать атаку руками по очереди, которые бы просто тыкали. Но быстро понял что совместное использование рук будет большим плюсом. Во-первых, так я решаю проблему замедления игрового процесса — игрок может запустить руки одновременно. Во-вторых, проще сделать проверку пар, когда каждая рука «связана» с противником. В-третьих, лучше ощущение самого персонажа, ассоциация с ним. Чем-то это напоминает игровые автоматы в магазинах с краном и плющевыми игрушками. Запустил, прицелился, схватил.

Кран-машина Хватайка (для игрушек): продажа, цена в Одессе. Игровые автоматы  от "Интернет - магазин Technoboom" - 35837974

Всё это звучит просто, а как насчёт реализации? Я хотел чтобы не просто руки летели вперёд, я хотел создать ОЩУЩЕНИЕ управления руками. Поэтому необходима была связь рук и персонажа. Так что мне прям присралось это сделать. Считать аппроксимацию линии по точкам я не хотел. К тому же GameMaker сам это прекрасно умеет делать при помощи путей. Задаёшь точки, настраиваешь тип пути, а потом считываешь координаты вдоль этого пути, благо функции есть.

SFHlIAKyzfUqy6

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

Всё это заняло у меня недели две или полторы. Параллельно я подрисовывал графику как мог. В основном, это были противники. А также их геймдизайн. Тут я тоже пересмотрел концепт из ЛД, т.к. некоторые вещи мне показались нелогичными. Я не хотел ограничиваться только телевизорами.

MpUQo9R
Да, я даже рассматривал «мух», но остановился на ползающих противниках.

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

Телевизоры
Обычный — ничего не умеет
Поцарапанный — стреляет одной пулей
Крякнутый — стреляет очередью из пуль
Резанный — стреляет веером из трёх пуль

Камеры
Обычная — вспышка, которая скрывает открытые ядра в радиусе
Поцарапанная — стреляет коротким лучом
Крякнутая — паяет пару секунд лучом

Мини-ТВ или электронные часы
Обычный — обмен с кем-то в заданном радиусе, т. е. его можно изолировать при желании.
Поцарапанный — выстрел прямо в игрока

Проекторы
Обычный — делает временно неуязвимым впереди стоящего противника
Поцарапанный — детектит игрока по линии и создаёт на его месте взрыв.

CD-плеер
Обычный — запускает диск-бумеранг, который может вылететь за пределы экрана, а потом вернуться в спину игрока
Поцарапанный — запускает два таких диска по диагоналям в две стороны. На самом деле мне не очень нравится пока что.

Возможно список будет дополнен в будущем.

Я не стал тратить много времени на подбор шейдеров. Ограничился базовыми, типа альфа-маски и инверсии, что я мог сделать и сам. А вот глитчи при выстреле всё же сделал по-простому.

WbUHvn8

Нарисовал 5 спрайтов глича и рандомно показываю их в рандомном цвете и размере с рандомным смешиванием. Дёшево, сердито и эффектно. Мне нравится как получилось.

Вот это всё у меня заняло две недели, до создания конкурсного поста. Но я не упомянул главного. Сам концепт. Пытаясь пришить его белыми нитками к теме конкурса я таки перешёл на эпоксидку. Я размышлял про то, какие даты важные, а какие нет. И с чей точки зрения. Оказалось, что каждый день в году, каждая дата что-то да значат. И чтобы придать им ещё большей значимости, должно не стать тех, для кого они что-то значат, т. е. что-то типа пост-апокалипсиса. Концепт развивался все первые три недели разработки. И вылился он в историю про Монотонов.

uweG51G
Проектирование Монотона. Полукапсула с тентаклями и руками-плащом.

Да, Моноглаз я заменил на Монотонов. Тут я вынужден признаться, что я абсолютный лох в проработке концептов. Часто они у меня дырявые, а я этого очень не хочу, так что стараюсь прорабатывать все мелочи. Даже сейчас у меня нет 100% видения игрового мира. Только разрозненные обрывки, самые ключевые моменты. Но общий смысл, я думаю, будет понятен. Привожу его сюда для возможной дискуссии на тему «проработки мира», со стороны видно больше дырявых мест.

Правительства разных стран были очень заинтересованы в создании идеального человека, который максимально эффективно использовал бы свои человекочасы. Но человек слишком сильно занят другими делами, а уж всякие отгулы, больничные и дети — это попросту неприемлемо. И тут сильным мира сего пришла гениальная идея, её второе дыхание, а может и не второе. От Генри Форда. Каждый должен делать свою функцию. И так родилась концепция монолюдей. Разумеется, добровольно люди, на такое не пойдут, поэтому были созданы специальные существа Монотоны, задача которых — превратить жизнь людей в монотонную рутину. Как правило, Монотоны использовали технику гипнотического подавления. Или напрямую, или через аудио/видео технику. Но зачастую, используя Транслятор Событий, который направлен на массовую Обработку. Задача — заставить человека забыть про всё важное, все важные события и даты в его жизни и наполнить его существование одной единственной задачей. Само по себе это звучит ужасно, да. Но никто не ждал беды совсем с другого конца. Как оказалось, события людей несут очень важную роль для факта Наблюдения. Уж неизвестно кем, Наблюдателем, Богом, или самим Миром. Наблюдать интересно за событиями и пока Наблюдение ведётся эти события происходят. Когда нет событий, Наблюдение исчезает и появляется Провал, в котором всё одновременно существует и не существует. То есть существа в провале вполне могут себя осознавать, но больше ничего, пожалуй. Массовая деятельность Монотонов привела к катастрофе — Провал поглотил как бОльшую часть человечества, так и самих Монотонов. Кроме этого Провал породил интересный эффект. Те события, которые остались на цифровых носителях информации видоизменили своих носителей. События пытаются вырваться и заполнить провал, но не могут, т.к. заключены в оболочку. Но они начинают этой оболочкой управлять на уровне инстинктов как у насекомых. Разумеется, только Монотон, как устройство манипуляции событиями, может извлекать события из таких носителей.

Вот примерно про это история. Наверное, немного личное. Как рутина съедает жизнь, превращая человека в раба базовых функций — работа/семья/дети.

В итоге тему «Важные Даты» я интерпретировал так:

Дата — это событие. Их много и каждый для кого-то событие. Для кого-то это событие важное. Но это лишь первый слой. Игра манипулирует событиями. Игрок извлекает события из носителей, перенося их в транслятор событий. И это второй слой важности этих событий для игрока, но не с точки зрения их содержания, а с точки зрения их наличия, т.к. эти события позволяют игроку прогрессировать по игре, открывая части локации. Нет событий = нет наблюдения = области карты закрыты. Есть события = есть наблюдение = области карты открыты.

Вернёмся к разработке. Вот две недели прошло, а готов только персонаж, противники и извлечение из них ядер. Транслятор Событий появился исключительно как штука для сбора этих ядер/событий в себя.

xPPF9Cg

Изначально чисто визуально показать что пары соединились, а потом и концептуально, что он наполняется и открывает больше области на карте.

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

А я на тот момент сделал только сам уровень. Но, к счастью, как писал в соседнем посте DarkDes, у опытного разработчика уже есть полуготовые решения. И у меня были. Довольно большую часть стандартной программной начинки я дёрнул из проекта со снеговиками (меню,пауза, винскрины, разрешение экрана). Часть этой начинки кочует из проекта в проект, т.к. отчасти — это требование XBOX, а я сейчас все проекты сразу адаптирую туда. Так что система управления, система сурфейсов и сохранения/загрузки приехали оттуда.

Довольно большая часть внутренней мишуры была сделана в третью неделю. Самое крупное — это концепция выбора уровня.

Ra05ZKZ
Самый первый набросок первого острова с радиовышкой.

Изначально я планировал сделать просто маршрут по летающим островам, но потом вдохновился Demon’s Crest и решил сделать карту более интерактивной (в будущем ещё больше). И игрок сам открывает карту, а не тупо следует по протоптанной заранее дорожке.

rnqxUwI
Синие уровни — пройденные, жёлтые — нет. Маршрут мог быть и другим.

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

Qz5OWpW
Большой и маленькие острова для карты
KplaQbn
Средние острова уже для второй зоны

В рамках конкурса я заготовил только две локации, а растительную почти не делал. Там всего один островок с тремя уровнями.

На четвёртую, продлённую неделю, оставались музыка+звук, набор уровней, сюжет, босс. Увы, последняя неделя у меня была адская. Я был вынужден гонять машину по автосервисам по полдня. А уже к концу недели, за одну ночь я сделал музыку, за вторую — звуки, за третью — контент с уровнями. И в последний день я уже пилил катсцены. Босса сделать не успевал, хотя что это такое и как он работает у меня давно уже прописано в диздоке. Я решил более важным подать часть игрового мира. Я хотел сделать это через персонажа, которого в итоге зовут Альбертом. Я переписывал первый диалог три раза. И в первые разы он был в 4 раза длиннее. В идеале диалоги должны быть короткими, но их должно быть больше. Но т.к. Альберт умирает уже в третьем уровне, на другую форму подачи сюжета времени уже не осталось.

NxaUqJ3
Альберта я делал в последние 8 часов, так что я его нарисовал за 10 минут как придётся

Тут я преследую конкретную цель. Альберт — очень важный для игры персонаж. Первый, с кем, игрок знакомится. По задумке, он должен располагать игрока к себе за всё короткое время жизни. При этом успеть рассказать что-то про мир игры. При этом успеть у игрока сформировать неявную цель по активации Трансляторов Событий. Но после смерти он остаётся не менее важным персонажем, потому что лор будет раскрывать как самого Альберта, так и то что он был не до конца честен с нами. И что его смерть была спланирована. Им самим? И если да, то для чего?

Будущее

И тут плавно перейдём к будущему проекта. Альберт должен быть одним из очень немногих выживших  и приспособившихся людей. В идеале игрок не должен вообще встречать людей. Но кого тогда или что? Как раскрывать лор? Я пока не придумал, и это сложная задача.

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

Зон планируется пять: Скалистая Пустыня, Флорическая, Кристальная, Техническая, Чешучатая. В зонах будут специальные объекты. Например, в флорической будут цветы. Которые при задевании рукой будут лопаться и выделять пыльцу, которая попав на ядро/событие будет рандомить картинку. В кристальной зоне планируются кристаллы, которые будут блокировать движение игрока если он пытается пройти через них с вытянутой рукой. В технической будут пушки, которые стреляют постоянно, возможно отключаемые.

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

Способности разные. Точно будет фантомная рука, которая будет на несколько секунд прикрепляться на последнего облапанного противника. Точно будет заряженный выстрел, который будет в радиусе приоткрывать содержимое ядер. Точно будет переносной транслятор на карте. Точно будет временная неуязвимость, как способ выживания на лоуХП на эндгейме. Возможно, часть способностей будет требовать спецресурс, восполняемый на специальных объектах на уровнях.

Может быть придётся заменить пару противников (типа двойного диска), и добавить новых.

И пока не знаю что делать в качестве ядер. Мне не нравятся иконки и тексты, которые пошли в конкурсную версию. Сперва хотел что-то абстрактное сделать, но быстро понял, лучше в механике пар работают привычные образы. Была идея фоток старых чёрно-белых навставлять, но тоже не знаю. Проблема, но пока не самая главная.

Так же будет очень много правок по UI части. По части подсказок управления как минимум.


Работа над проектом будет вестись и дальше. Финальный релиз, ориентировочно, в январе-феврале.