Геймдизайнерская задача. Невидимое стало видимым

Блог mylittlekafka

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

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

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

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

Возникает проблема, если событие может произойти по воле персонажа игрока или в любой промежуток во время игры — что если персонаж игрока стоит прямо на том самом месте, где появляется новый персонаж?

Когда я только начал реализовывать основные взаимодействия, и не думал о последствиях, я столкнулся с тем, что персонаж появляется прямо на месте персонажа игрока, после чего нужно было отодвинуть персонажа игрока в сторону, чтобы выбраться из появившегося NPC (хорошо что персонаж игрока при этом не застревал) и получить возможность взаимодействовать с ним. Не очень-то элегантно!

У меня есть несколько решений этой проблемы, но я хотел бы обсудить эту практическую геймдизайнерскую задачу с другими посетителями Коленки.

Итак, каким образом вы бы решили такую проблему?

42 комментария
DarkDes

Как вариант решения «в лоб»:

Выталкивать персонажа (или это и имелось ввиду под «нужно было отодвинуть персонажа игрока в сторону»? ).

Ещё один вариант опять же «в лоб»:

Каким-либо эффектом показать, что нахождение игрока в этой позиции мешает «призраку» появится. Например, какой-нибудь эффект небольшого вихря в той позиции (сказал бы цветной, но твоя игра похоже предполагает исключительно ч/б).
Можно было бы ещё сделать звук \ голосом  (опять таки призрачным): «Уйдииииии».

Ещё можно какой-либо (звуковой?) эффект за спиной персонажа сделать — думаю игрок автоматически повернётся и уйдёт ( порядок может быть и другим, в зависимости от эффекта). Ну вот допустим рычание чудовища — думаю игрок сначала отойдёт вперёт (подальше от монстра) и только потом повернётся.

mylittlekafka

Выталкивать персонажа (или это и имелось ввиду под «нужно было отодвинуть персонажа игрока в сторону»? ).

Встречал такие варианты, в Dark Souls например персонаж игрока просто отодвигается с того места, где появляется фантом или инвейдер, в Dark Souls 2 персонаж при этом даже стаггерится (как будто его ударили). Однако эти игры от третьего лица, и простое пододвигание персонажа игрока с видом от первого лица будет смотреться не очень.

Каким-либо эффектом показать, что нахождение игрока в этой позиции мешает «призраку» появится.

Это интересная идея. Внезапное изменение чего-либо позволит игроку понять, что что-то не так, после чего он может отойти с этого места и там появится NPC.

DarkDes
А что с вариантом про звуковой эффект? Хотя это частный случай «нежелательного нахождения игрока».
mylittlekafka
Звуковой эффект проигрывается при «перестановке» персонажа игрока на фиксированное место для избежания каких-либо конфликтных ситуаций.
Xitilon

Интересная проблема! Просто запретить триггерить спаун — глупо, двигать игрока без его согласия тоже вроде как нельзя.

В голову приходит, что можно было бы затемнить экран фэйд-аутом, и сделать типа катсцену с видом сверху, а там игрок уже сразу переставлен на другое место, пока экран был затемнён, причём можно поставить его для удобства прямо перед ново-появившимся NPC (ну, на 2-5-10 шагов от него). Но это не на случай, когда появление персонажа должно происходить за кадром, неизвестно для игрока. Хотя… если он стоит именно там, где появляется персонаж, он в любом случае его замечает? Тоже не супер-элегантно, но вроде бы задачу решает.

Хм, вариант ДаркДеса с сигнализацией лучше.

mylittlekafka

В голову приходит, что можно было бы затемнить экран фэйд-аутом, и сделать типа катсцену с видом сверху, а там игрок уже сразу переставлен на другое место, пока экран был затемнён, причём можно поставить его для удобства прямо перед ново-появившимся NPC (ну, на 2-5-10 шагов от него). Но это не на случай, когда появление персонажа должно происходить за кадром, неизвестно для игрока. Хотя… если он стоит именно там, где появляется персонаж, он в любом случае его замечает? Тоже не супер-элегантно, но вроде бы задачу решает.

Мое текущее решение — это сочетание затенения экрана (ну, не затенения, а будет просто сплошной шум на секунду) и телепортирование персонажа игрока сразу напротив появившегося NPC (при этом каждый NPC имеет свою точку, куда будет отправляться персонаж игрока, так как может произойти много чего неожиданного при рандомных телепортациях)

nodoxi
Перключаться на кат-сцену и в ней грубо двигать игрока, если он находится где-то где не должен.
Praron

Если НПС должен появиться просто в какой-то комнате, а не именно в определённом месте, можно спаунить его за спиной игрока, довольно внезапно будет. Тогда вопрос, что делать, если игрок стоит у стены спиной к стене. Хотя я, кажется, о решении немного другой проблемы думаю.

mylittlekafka
Это уже больше похоже на другую задачу — например, если персонаж игрока должен войти в комнату, после чего сзади спавнится NPC. Что можно сделать, чтобы удостовериться, что игрок войдет именно спиной к появляющимся NPC,  или что делать, если он войдет спиной к стене, лицом к месту появления NPC?
Praron

Не понял, о чём ты.

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

mylittlekafka
А, не, места NPC фиксированные, и спавнить их в рандомных точках за спиной игрока не выйдет. Тем более что таких NPC может быть много в одной локации, и такой беспорядочный спавн может привести к неправильным последствиям.
Raseri
Можно сделать так, чтобы нпц вышел оттуда, куда игрок не имеет доступа.
Вылез из окна.
Спустился с крыши по верёвке.
С волшебным сиянием вышел из стены/зеркала.
Спустился по мерцающей лестницы с неба или вылез из туманного провала в земле.
Если на уровне несколько этажей, нпц может просто выйти из двери на верхнем, а затем спрыгнуть вниз.

Можно сделать так, чтобы нпц уже был там, просто игрок бы не понимал, что это нпц, а не декорации.
Например, оживающая статуя.
Или доспехи на постаменте.
Или оживающая картина, которая так и не станет движущимся 3D-объектом, но будет взаимодействавать с игроком и радовать того движущейся картинкой на полотне.

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

Если хочется, чтобы игрок взвизгнул, как маленькая сучка, можно показать вылезшую сбоку руку (которая как бы проводится перед носом игрока и ложится ему на плечо), а затем показать сбоку экрана выглядывающее лицо нпц. Ну, как будто он стоял за спиной игрока и вышел сбоку.
DarkDes

Например, оживающая статуя.

Вот кстати да. Можно не только статую, а просто некий объект. Вот бочка и бац! из\вместо бочки уже нпц!

Однако по скриншоту похоже предполагается появление нпц на неком открытом пространстве.

mylittlekafka
Можно сделать так, чтобы нпц вышел оттуда, куда игрок не имеет доступа. Вылез из окна. Спустился с крыши по верёвке. С волшебным сиянием вышел из стены/зеркала. Спустился по мерцающей лестницы с неба или вылез из туманного провала в земле. Если на уровне несколько этажей, нпц может просто выйти из двери на верхнем, а затем спрыгнуть вниз. Можно сделать так, чтобы нпц уже был там, просто игрок бы не понимал, что это нпц, а не декорации. Например, оживающая статуя. Или доспехи на постаменте. Или оживающая картина, которая так и не станет движущимся 3D-объектом, но будет взаимодействавать с игроком и радовать того движущейся картинкой на полотне. Или нцп может спокойно сидеть в чёрном плаще в чёрном углу, а затем зажечь сигаретку, привлекая к себе внимание игрока.

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

«Спустился с крыши по верёвке»
«С волшебным сиянием вышел из стены/зеркала»
«Спустился по мерцающей лестницы с неба или вылез из туманного провала в земле»

Также не застрахованы от того, что NPC появится прямо на месте персонажа игрока.

ms-dos

Я как понимаю силами кода эту проблему не решить (чтобы то что появляется, появлялось не в том-же месте где игрок)

Проблема в том, что оно появляеться только в том месте где сам игрок стоит и надо придумать как это обойти, не програмным способом. (?)

ms-dos

Красивые руки на скрине.

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

Praron

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

В общем, если решать задачу наиболее логично и элегантно, то нужно знать больше информации о происхождении НПС и физике мира.

mylittlekafka

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

Да, как пример указал игры, которые делают так — Dark Souls и Dark Souls 2. Опять-таки, с видом от первого лица такой способ не очень работает (вернее сделать так, чтобы он работал и хорошо смотрелся довольно сложно).

andreymust19
В чем проблема? Просто ставь персонажа там, где не стоит игрок. Делай несколько точек спавна и проверяй — в какой из них нет препятствий. Или передвигай одну точку спавна, пока из нее не пропадет препятствие.
mylittlekafka
Расположение некоторых NPC очень важно для сцены и его нельзя менять.
Kozinaka
Может просто подождать, пока игрок отойдёт?
DarkDes
Слишком просто )
mylittlekafka
Да, это простое и мощное решение, однако если NPC должны взаимодействовать друг с другом, придется буферизировать появление целых конгломератов NPC если персонаж стоит на одной из точек спавна.
Kozinaka
Да, особенно, если это боссы или их помошники. Игрок может блокировать таким образом врагов.
Xitilon
Комментарий, заставляющий себя хлопнуть по лбу, честное слово. Действительно, зачем что-то выдумывать! Только один нюанс может быть — игрок может развернуться и тупо пойти куда-то совсем в другое место и не увидеть NPC, который там уже появился. Поэтому нужно это сопроводить звуком, например.
DarkDes

Ещё такой вариант (может и было подобное):

Когда нужен спавн призрака, а игрок стоит на его точке, то сначала поворачиваем игрока (чтобы призрак и игрок были лицом друг к другу), а затем отодвигаем его немного (при этом сделать якобы это пользователь сделал отход т.е. звуки шага или что там у тебя).

Этакая мини- \ урезанная- кат-сцена. Правда такое решение может испортить «эффект присутствия», если такой предполагается.

mylittlekafka
Это промежуточный вариант мгновенной телепортации персонажа игрока в безопасную точку с эффектами на экране чтобы замаскировать появление и телепортацию. Делается сложнее, чем простая телепортация, но имеет право на жизнь.
shevtsov200
Можно ещё сделать, как будто бы персонаж испугался и отпрыгнул, какого-то звука, например.
anim

Сделать 2-3 позиции появления, и проверять где нет персонажа игрока.
Персонаж игрока не может быть в нескольких местах одновременно (если не предусмотренно конечно).

Вообще таких «появлений» стоит избегать. как то обходить и находить интересные и разумные решения. И тема слишком абстрактная...

mylittlekafka

И тема слишком абстрактная...

Чем абстрактнее, тем больше способов решения можно придумать. Да и условия более-менее жестко поставлены.

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

Raseri
>>Сделать 2-3 позиции появления, и проверять где нет персонажа игрока.

THIS.
Xitilon
Не всегда уместно. А что, если на земле стоит конкретный портал, или, не знаю, трон? И NPC должен появиться только там.
anim
1 — не дать игроку тода заходить (типа барьера)
2 — при появлении отбросить игрока от портала
3 — как вариант — портал больше игрока, и тогда кто то должен появиться рядом.
Каждый случай уникальный, вообще не вижу проблемы, везде решается по разному в зависимости от ситуации.
Если это какой то портал, через который постоянно кто то приходит и уходит, то вариант 3.
Если это вадный портал, и оттуда что то важное появиться, то не дать игроку даже отвернуться от него, что бы не пропустил...
в общем фигня какая то…
Xitilon

Ну Нупр как раз и привёл решение №2, заметив, что оно не элегантно.

Не дать игроку заходить на портал — ладно, но на пустое место — странная затея.

shevtsov200
Решение №1 игроки очень не любят.
anim
всё зависит от ситуации.
anim

2 — смотря как реализовывать, это можно и фишкой сделать. На месте Игрока телепортируется НПС, ясен пень Игрока отбросит как от взрывной волны, только мощьность меньше и урона не приносит, типа магнитного поля.
И всё же, всё зависит от конкретной ситуации. Если кто-то должен появиться в зоне видимости игрока, то:
— он тупо пришёл (анимацией)
— вышел из двери
— спустился по трубе
— вылез из люка (Черепашка ниндзя)
— открылся занавес, там НПС
— вылетел из кувшина (он Джин)
— материализовался из воздуха (газообразный НПС)
— вышел из стены (призрак)
и тд и тп до бесконечности...
Если Игрок в пустыне (т.е. нет декора, за которым «спрятан» НПС), то доллжно быть что то продуманно сюжетом и сеттингом, иначе что за хрень? персы будут просто так появляться… никак не объяснять можно только если у тебя что то паранормальное, мистическое и тд. 
Пара вариантов в пустыне:
— НПС спустился на парашуте
— вылез из под земли из бункера
— приехала такси и НПС вышел
— песчянная буря, из которой вышел НПС
и тд… зависит от самой игры как обычно...
Допустим, игрок стоит на месте, где просто обязан появиться НПС. Варианты снова в пустыне:
— Игрок стоит на люке, кто то там тарабанит, Игрок понимает что они не могут открыть люк, пока он на нем стоит — игрок отходит, вылезает НПС
— люк резко открывается, немного отбрасывая Игрока
— приезжает такси, дерзко сбивает обделённого умом Игрока, из такси выходит НПС, и объясняет, что тут не нужно было стоять
— НПС спускается на парашюте, ногами даёт звиздюлей Игроку, который не отошёл — игрок отлетает...

В общем, либо это вообще не проблема, либо я чего то не понимаю.

Xitilon
Проблема в том, что для каждого случая это нужно придумать. Задача Нупра более общая, поэтому решение требует общее.
ms-dos
Нупр, вставишь в пост потом лучшие решения и выводы? ) 
mylittlekafka

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

Многие решения, рассказанные здесь были похоже на мое — при этом это была комбинация из нескольких подобных решений.

Были и усложняющие, но приукрашивающие игру решения, были и простые и очень эффективные, но скучноватые (опять же, все зависит конкретно от игры).

В моем случае появление подобных NPC могло происходит из-за различных событий, чаще всего — в зависимости от времени суток на компьютере игрока (ночные/дневные NPC). Однако при этом есть особые NPC, чтобы увидеть которых нужно держать в левой руке специальный предмет. Допустим это будет вот такой гомункул, как на картинке (один из):

 

Если гомункул активирован в руке, такие NPC становятся видимыми. Ограничивать их местоположение для игрока я не хочу — игрок должен чувствовать, что подобный NPC может появиться в любой момент и в любом месте, но при этом он не должен угадать, где это именно произойдет по определенным признакам.

Если внимательный игрок заметит, когда именно появляется NPC, он может захотеть узнать, что произойдет, если на месте NPC при появлении будет стоять персонаж игрока. Двигать NPC я не хочу, местоположение некоторых очень важно и использование нескольких точек появления недопустимо. Просто не спавнить NPC скучно — хочется наградить пытливого игрока чем-нибудь.

Мое текущее решение — мгновенный спавн персонажа игрока в определенную точку рядом с NPC, при этом чтобы персонаж игрока смотрел прямо на появившегося NPC. Также при спавне накладываются визуальные и звукове эффекты — белый шум (визуальный и звуковой). Есть также идеи о накладывании временных специальных статусов персонажа, в зависимости от NPC с которым персонаж игрока «столкнулся». Но это уже зависит от того, как я проработаю характеристики персонажа в игре. Возможно такое столкновение может вызвать Головокружение, которые может длиться целый день (реального времени), если персонаж не примет специальное лекарство.

Xitilon
Про головокружение - классная идея.
Логин

Итак, каким образом вы бы решили такую проблему?

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

Тему не читал.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.