Игра на Хакатон: IceHeart

Пиксельный рогалик. А что ещё тут могло быть?

Всем привет. Еле-еле успел в сроки, загрузил работу за минуту до конца сбора работ. Даже не знаю, везение это или нет.

Расскажу о своём опыте. Работать начал в 9 утра по Москве, закончил ровно в полночь, все 39 часов был в рабочем режиме (кроме 3-х часов сна, приёмов пищи и других домашних дел). За это время успел полностью написать игру, хотя некоторые идеи остались нереализованными. Работал один, без команды.

Что при слове "реиграбельность" обычно у людей первое всплывает в голове? Рогалик. Ну вот я и решил его написать. Конечно, это не выглядело как "окей, пишем рогалик". Несколько часов размышлял над сеттингом, геймплеем, сюжетом и пытался всё это согласовать в голове, чтобы это выглядело органично и в это было интересно играть.

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

Начало каждого уровня
Начало каждого уровня

Что же "под катом"? Сначала генерируется квадрат 20*20, один выход снизу и два сверху. Потом с помощью алгоритма А* мы пытаемся найти путь из нижнего выхода в каждый из верхних. После этого мы по порядку удаляем случайные тайлы в квадрате, создавая тем самым лабиринт. Перед каждым удалением тайла мы снова проходим А*, чтобы понять, не станет ли лабиринт без этого тайла непроходимым.

Затем мы находим "острова" - участки лабиринта, никаким образом не связанные с основной дорогой. На них мы расставляем растительность.

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

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

​После нахождения нижней платформы уровень восстанавливается из холодных руин, отчего игра меняется
​После нахождения нижней платформы уровень восстанавливается из холодных руин, отчего игра меняется

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

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

IceHeart - имя главного героя. Его тело сотворено из камня, а сердце изо льда. Но не потому что он такой непобедимый терминатор. Просто в мире ничего больше не осталось, кроме камня и льда.

Короче, такая помесь Bastion и Dance of the NecroDancer. И много чего ещё по мелочам.

Ещё очень хотелось добавить РПГ-составляющую. Но тоже не успел.

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

Честно, не знаю, что ещё добавить. Да и спать хочется.

Если вдруг эту статью читает кто-то из жюри - забыл добавить вам справку по управлению:

WASD - управление. Q - рестарт. R - ход назад. Пробел - поставить шипы.

Стала жизнь на день короче. Счастья нет, спокойной ночи.

Ниже можно найти билд и игровое видео.

66
3 комментария

За описание генерации уровня отдельное спасибо. Мне такие подробности очень помогают. Я до этого даже не знал об алгоритме A*. И в целом игра смотрится очень интересно. В чем она сделана? И не поделитесь билдом или кодом? Я сейчас это у всех прошу)

1

Ссылка на билд теперь есть в статье
Всё делал на Unity.

1

Блин идея то классная, мне кажется зря ты написал что рогалик, сначала думал "о очередная рога", а потом вникнув понял что это крутая логическая игра)