Тихая круговая оборона

Как-то на гамине совсем тихо. Разбавлю тишину рассказом о своей игре на последний Ludum Dare.

SARD.png

Stuck in the loop… В очередной раз убеждаюсь, что любая тема, даже та, за которую проголосовал лично ты, в день джема становится невыносимой, неприемлемой и вообще всячески оскорбляющей творческие способности. Усмирив негодование, набравшись наглости, беру инструментом для разработки Love2D. Самое то для хардкорных условий компо. Я абсолютно не знаю, что с ним и как, зато я знаком с языком программирования lua. Это ведь должно помочь, не так ли?

Я расчехляю документацию по фреймворку, параллельно или с небольшим рассинхроном в моей голове проносятся нездоровые образы. Цикл, зацикленность, мономания. Поток сознания рисует пригоршню зубов. Эдгар По, «Береника». Полюбившаяся то ли с замшелых книжек, то ли с Inscape’овского The Dark Eye история требует обновления. Не без удовольствия перечитываю, в голове появляется образ геймплея: курсором жмакаем на зубы, выполненные в стиле старинных гравюр, те выпадают, а по мере освобождения челюсти от зубов всё сильнее прорисовывается силуэт других зубов вдалеке и когда последний из зубов исчезает, тот силуэт издалека увеличивается до размера изначальной челюсти. Повторять до бесконечности. Сцена вторая — гадания. Снова гравюра, теперь ромашка. Вместо лепестков — зубы. Любит — не любит. Можно придумать что-то ещё, но для начала хватит.

Нужно искать гравюры с зубами. Ищу работы по стоматологии 18−19 века. Какой-то француз, Пьер Фошар. Мало подходящих картинок, нет челюсти анфас, но ромашку собрать можно. Понимаю, что день уже вышел далеко за экватор, а я всё ещё не писал код. Редактора уровней нет, но ромашку и зубы можно представить умозрительно, возиться со сторонними редакторами для таких простых вещей смысла нет.

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

Bad derivative

пример плохих деривативных работ с сайта лудума

Совершаю прогулку, во время прогулки решаю отказаться от «Береники» в пользу того, что я смогу сделать за полтора оставшихся дня. Своя графика — хорошо, попробую что-то сделать в MagickaVoxel. Музыка не проблема. Забегая наперёд, скажу, что ни графики за пределами минимализма из титульной картинки, ни уж тем более звуков и музыки не было. Думаю о том, что гуляю я по разным маршрутам, но в целом все они приводят домой. Но я знаю людей, которые не любят менять маршруты прогулок. Повторяющиеся маршруты прогулок — stuck in the loop. Это стало отправной точкой следующего прототипа.

Времени в обрез, отказываюсь от Love2D. Беру пока ещё не обкатанный, непривычный для меня Game Maker Studio 2.3. Решил использовать DS_Grid, обычно обходился двухмерными массивами. Сделал базу для игры в виде игрового поля и намёток по его движению, но образ геймплея в голове смутный, неполный. Утро вечера мудренее.

Low quality but valid Mario variation

пример хороших деривативных работ с сайта лудума

Остался день, нужно добавлять геймплей. Исписал пару листов по поводу параметров игры. Страсть, привычка, деньги, мораль, здоровье — их взаимозависимость. Привычные места, вроде магазина или работы, повышают привычку. Чем выше привычка, тем меньше хочется идти в непривычные места. Звучит неплохой игровой гипотезой. Новые места открывает страсть, которая зарабатывается в локациях вроде каких-нибудь развлекательных заведений. Работа даёт деньги, но отнимает здоровье и страсть. Неплохо. Чтобы двигаться по локациям, нужно замкнуть круг. День за днём, мы замыкаем круг за кругом. Но замыкать круг на сетке 4 на 4 как-то скучно, к тому же я решил обосновать использование параметра страсти, закрыв крайние локации, которые страстью и открываются, но при этом дать манёвр для путешествий игроку, да и в сетке с четным количеством элементов дом оказывается не в центре сетки. К счастью, код был достаточно гибок и одним лёгким движением сетка стала 5 на 5. Но было 16 локаций, а стало 25. Нужно придумать им названия и как они будут влиять на параметры. До конца компо всего-ничего, а вставить для каждой локации параметры, чтоб они имели хоть какой-то смысл, не так-то просто. Открыл MagickaVoxel для локаций, попробовал что-то сделать, но через полчаса закрыл. Я ни черта не успеваю. Придётся участвовать в джеме.

Хотелось бросить это дело. На бумаге звучало не так уж плохо, но геймплей был куцым. Третий день пошёл на добавление случайных событий, устранение багов и придумывания интерфейса для этих событий. Вообще горжусь интерфейсом — он не рисуется в реальном времени, просто каждое его изменение обновляет surface. Как я не додумался до такого в своих более старых играх с тяжёлым интерфейсом? Понятно, что для прототипа за три дня никто не требует производительности, но выигранные две-три сотни фпс, которые игрок всё равно бы не заметил, греют мою оптимизаторскую душу. Вообще в третий день было сделано гораздо больше, чем тут описано, но для меня закончилось время историй, я не рефлексировал свои действия, я просто писал и писал код. Игра должна выйти, какая бы она ни вышла. Я отказался от параметра привычки, оставив только деньги, здоровье, мораль и страсть. От морали зависит количество мест, которые можно посетить по простой формуле места для посещения = мораль / 10. Я сделал так, что открытые локации могут со временем случайно закрываться. Я придумал крутое название для прототипа — «Тихая круговая оборона». Жаль только, что идея не просто закрывать локации, а вообще их метафорически уничтожать с карты, оставив, например, только дом и работу, пришла мне уже на следующий день и в игру я её не добавлял.