Protos, дневник #4: игра оказалась не про паркур
Три дневника подряд я показывал паркур. Пора признаться: паркур в Protos - это фундамент, а не сама игра. На этой неделе я наконец начал строить то, ради чего всё затевалось - ядро. И оно про связь игрока с пространством, а не про то, как он по нему прыгает.
p.s. видос был тяжёлым, пришлось сжимать на каком то рандом сайте)
Механику целиком раскрывать пока не буду (козырь есть козырь), но показать, что уже работает, могу - и выглядит это, честно, залипательно.
Пространство поделено на зоны, и у каждой свой цвет
Карта - это набор независимых зон. У каждой свой цвет, который я задаю в редакторе. И дальше начинается самое приятное: этот цвет расходится по всему, что внутри зоны.
- Лампы в зоне красятся в её цвет.
- Вся сцена мягко тонируется под цвет текущей зоны, и при переходе из синей зоны в красную экран плавно переливается, а не щёлкает.
- След за персонажем светится в цвет зоны, где он сейчас.
Один источник правды - цвет зоны, и от него питается вся палитра вокруг. Заходишь в другую зону, и мир буквально меняет настроение.
Ты трогаешь пространство, а не лампу
Первая способность, которую я собрал: погасить свет. Но не конкретную лампу, на которую смотришь, а свет в направлении взгляда, в пределах твоей зоны - даже за стеной.
Технически это конусный запрос без проверки видимости: система находит все лампы в твоей зоне, попадающие в конус взгляда, и гасит их. Стена не помеха, потому что ты воздействуешь на само пространство своего пузыря, а не на объект, который видишь. Погасшая лампа сама возвращается через несколько секунд, и пачка ламп загорается вразнобой, а не разом.
А ещё пространство реагирует на твоё присутствие само: когда ты набираешь достаточно связи, лампы вокруг тебя начинают мерцать. Не по кнопке - просто потому что ты рядом.
Дэш
Вторая способность - рывок. С зарядами (два, восстанавливаются по времени), с минимальным интервалом чтобы дабл-тап не сжёг оба разом, и с вертикалью: смотришь вверх и дэшишь - уходишь по дуге вверх, но взлететь нельзя, горизонталь всегда есть.
Ловил забавный баг: дэш во время подката уносил персонажа вбок. Оказалось, физика слайда сама правит вектор ускорения, и дэш брал направление из него. Починил тем, что в слайде рывок берёт направление из скорости, а не из ускорения.
За дэшем тянется неоновый след, светящийся в цвет зоны. Пока это простая лента, но в планах - не хвост, а обводка силуэта с яркими точками на суставах, что-то вроде mocap-созвездия, летящего за телом. Это уже следующая большая тема.
Рубрика «компилируется и врёт»
Я всё ещё набиваю весь код руками, нейронка пока что не нужна, и коллекция багов, которые компилятор пропускает молча, пополняется:
- пустое тело функции без return - возвращает мусор, и ты полдня гадаешь, почему условие ведёт себя странно;
- запятая вместо точки в дробном числе (русская раскладка мстит);
- имя массива при объявлении и при использовании разошлось на одну букву;
- забытый вызов метода в тике - код есть, а не работает, потому что его никто не зовёт.
Ни одна из них не роняет сборку. Все возвращают правдоподобную чушь. Это самый дорогой класс ошибок, и лечится он только чтением и прогоном.
Что дальше
Ядро только началось: зоны, цвет, две способности, реакция пространства. Впереди - созвездие суставов вместо простого следа, ещё способности, и та часть механики, которую я пока держу при себе.
Паркур тем временем дошёл до первого билда, который я раздал друзьям пощупать. Так что если хочется не смотреть, а потрогать - скоро будет.
Спасибо, что читаете. Ругать и хвалить - в комментарии, за конкретику отдельное спасибо.