The Creator One
7 subscribers
73 photos
1 video
8 files
7 links
Video Games Developer Blog
Download Telegram
Также в домике есть полноценная кровать, в которой можно за один раз выспаться до 100%. Если протагонист не поленится построить рядом колодец, получится отличный базовый лагерь.
И вот наконец портал. Не магический, а чисто техногенный. Построен специально для туристов, застрявших всвязи с отменой авиарейсов. Кстати, нашлось логичное место для отбойного молотка.
При внешнем осмотре без научного навыка видно, что не хватает деталей. Научный навык подсказывает, что нужны трехступенчатые плазменныйе модуляторы.
Чтобы найти рецепт изготовления и получить доступ к главному рубильнику, надо попасть в служебное помещение. Дверь бронированная, замок не стандартный. Скажу по секрету, ключ лежит у грифона в гнезде.
Грифон имбовый даже для прокачанного перса, но есть две хитрости. Сложно, но можно убежать и вернуться к гнезду раньше, чем он. А можно подождать до ночи, когда грифон ляжет спать. Выпить эликсир Фридриха Ницше и долбануть спящего зверя отбойным молотком в голову. Будут засчитаны хедшот и стелс атака одновременно.
В служебном помещении будет доступен чертеж, при достаточном научном навыке вполне понятный. Овладев знаниями, надо идти на свалку и искать компоненты. Найти легко: где гуляют зомби-боссы, там оно все и лежит. Имеется ввиду, что теперь у персонажа есть FP_Gun и патроны.
Вот и все. Делаем два плазменных модулятора, вставляем их на место и включаем рубильнк. Портал переносит в город, о котором я уже писал. Поздравляем, вы прошли игру!
А теперь перестаньте читать посты, и попробуйте поиграть. Будьте так любезны, скачайте вот такой архив: https://drive.google.com/file/d/1v_5vXX6sHo4ATicBujDfwTkSOitp7pv2/view?usp=sharing
Если знать игру, но не спидранить, хватит на несколько часов геймплея. А что касается багов и глюков, так давайте фидбэк, чтоб я знал, куда в первую очередь пилить. Не ленитесь, пишите комменты, иначе я тоже буду лениться и ничего не буду делать.
Решено добавить интерактивности. Когда герой впервые получает болезнь или отравление, игра выдает ему квест, и добавляет в заметки бодрящую информацию.
Появилась разница между болезнью и отравлением: болезнь отбирает единицу жизни каждый час, а отравление - каждые 15 минут. Если знать, что где лежит, что где растет - успеть вылечиться легко.
За одно выявилось множество программных ошибок.
Также игра предупреждает заранее о необходимости устраивать ночлег.
Попутно доработано поведение командира военной базы, к сожалению, он до сих пор туповат и забывчив, но теперь он умеет вслед за персонажем залезать на вертолетную площадку и бегать по лестницам наблюдательных башен.
Текстовое сообщение, которое получает игрок в ответ на правый клик, зависит от успеха применения науки. Если изучено упешно - появляется некая дополнительная информация, которая в большинстве случаев не является особым открытием, но зато понятно, что наука сработала.
Чтоб было еще понятнее, слева от текста иконка. Если не сработало - знак вопроса, а если успех - включенная лампочка.
Надеюсь, что это заставит игрока задуматься над своим поведением. Ибо в некоторых ситуациях успех в изучении обязателен по сюжету.
Когда-то хватит специальной одежды, когда-то придется глотать эликсир, но когда-то будет надо, чтоб был еще и собственный навык.
Также можно увеличить навык науки, если давить правую кнопку вприсядку - в режиме Crouch. А иногда что-то можно узнать только из режима Crouch. Вот к примеру рекламный щит старьевщика:
еперь допиливаем искусственный интеллект.
Оказалось, в самом разгаре боя враги могут запросто обо всем забыть, и резко перейти в режим патрулирования, повернувшись к игроку спиной.
Как выяснилось, параметр TargetActor в BlackBoard может обнулиться, не взирая на то, что персонаж находится совсем рядом. Дичь полная, но доказанный факт. Как ни крути, если персонаж близко, за параметром TargetActor надо следить, и если слетел - обновлять. Причем делать это по событию, а не вешать на Event Tick.
Решение получилось такое: в момент, когда враг впервые обнаружил персонажа, засекаем время, а если началась задача NewPlace, проверяем сумму условий: расстояние до персонажа и время. Если близко, и обнаружение было совсем недавно - обновляем TargetActor. При этом срабатывает декоратор, перебрасывающий врага обратно в режим атаки.
Теперь командир, преследуя персонажа, забирается на вертолетную площадку достаточно лихо, а если персонаж спрыгивает вниз, командиру хватает ума развернуться и слезть обратно.
Блюпринты в экран не лезут, но главные кусочки показать могу.
В искусственном интеллекте есть еще один косяк, который отнял у меня неделю, причем победа получилась не очень убедительной.
В процессе тривиального патрулирования территории, пресловутая нода GetRandomReachablePointInRadius может выдать точку прямо за спиной, от чего непись МГНОВЕННО поворачивается на 180 градусов.
Да собственно, если угол превышает хотя бы 20 градусов, проблема уже заметна.
Даже прямоходящий зомбарь, практически круглый в проекции сверху, дергается слишком резко. Для длинной крысы, у которой есть хвост, такой поворот выглядит вовсе дико.
Если запрещать крутой поворот программно, непись навсегда застрянет в углу, поскольку зона по факту прямоугольная.
Короче, чтоб траектория патрулирования была красивой и интересной, мешать рандому нельзя. Значит, неписи должны уметь поворачиваться плавно на большой угол. Причем это должно происходить в отдельной ветке дерева поведения, чтобы задача MoveTo оставалась за пределами цикла.
В итоге пришло в голову пользоваться задачей RotateToFaceBBentry, а эту самую BBentry двигать в направлении поворота.
Кстати о повороте: надо иметь фунуцию, которая скажет, правеее или левее от курса новая точка, и как далеко надо поворачивать. По научному, найти угол между Forward Vector и линией, на которой лежат Actor Location и Random Reachable Point.
Некоторые люди, кроме меня, уже пытались задавать такие вопросы знатокам, но ответы получались не вполне вразумительные.
В принципе, есть стандартная нода VectorCosineAngle2D, однако, непосредственно ей комфортно пользоваться можно только если угол не больше 90 градусов. Дальше приходится шаманить. В итоге возникло нечто, возвращающее ноль, если точка прямо по курсу, и 1,9999, если 180 чуть правее, и -1,9999, если 180 чуть левее.
На ее основе была создана задача для Behavior Tree, которая определяет, куда и насколько следует повернуть непись. В паре с задачей RotateToFaceBBentry она работет в отдельной последовательности, закрытой декоратором Conditional Loop. Когда новая точка оказывается прямо по курсу, декоратор сбрасывается, и непись оказывается во власти задачи MoveTo.