Система типов и Чужие

Alien: Isolation. Станция Севестополь. Мы долго блуждаем по мрачным коридорам, изучаем терминалы и бортовые журналы, и через несколько часов игры наконец встречаем первого Чужого. Точнее, первый намёк на него.

Вообще, в целом идея довольно оригинальна: мы не столько «сражаемся» с опасными ситуациями, сколько пытаемся их избежать. На этом выстроен очень хороший геймплей, когда через некоторое время расслабляешься, перестаешь прислушиваться к далёким звукам и присматриваться к намекам на стенах — и тут к тебе наконец подбирается на невероятной скорости невидимый монстр, а ты совсем немного не дошёл до точки сохранения.

Но при этом игра определенно имеет ряд явных ограничений в интерактивности — в возможности взаимодействия с окружающим миром, который сам по себе невероятно красив! Например, 99% терминалов — статические модели. На полках навалены кучи вещей, однако мы не можем их взять и как-то применить в игре. Даже если дверь стеклянная, мы не можем её ничем пробить! А препятствия наподобие столов или перил в половину роста героя становятся непреодолимыми.

Итак, 99% контента в игре — это безжизненная статика. Соответственно, и оставшийся 1% не даёт нам на самом деле никакой особой свободы действий, так как не способен взаимодействовать с этой статикой. Несмотря на довольно большой просторный мир станции, в ходе игры мы просто перебираем узенький лабиринт возможностей, продвигаясь по пути, жёстко заданному сценаристами.

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

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

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

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

Главная проблема тут, конечно, в том, что запрограммировать вручную все мыслимые и немыслимые комбинации предметов невозможно. Трудоёмкость растёт экспоненциально. Более того, влияния могут быть косвенные (разгоревшийся огонь влияет на обшивку, которая влияет на проложенные в ней линии электроснабжения, которые влияют на …).
По этим причинам, очевидно, даже в самых дорогих играх решают ограничиться крайне малым диапазоном возможностей взаимодействия объектов. И даже игры-песочницы на самом деле крайне ограничены в интерактивности — они в основном лишь имитируют большую свободу, позволяя, например, взаимодействие только с одним типом объектов (кубики).

Далее мы рассмотрим, как же можно реалистично решить эту проблему с помощью правильной системы типов.

Поделиться статьей ...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Share on VKPrint this page

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *