Читаю про AI в Сталкере.
У меня вопрос только один: кто там дурак — геймдизайнер, который дал программистам задание сделать независимый от игрока мир «и чтобы боты могли сами разгадать тайну Зоны» или руководство проекта, которое не уследило за этим и дали возможность программистам долго и безуспешно придумывать «честный» AI?
Я был очень счастлив, когда я прошёлся за сталкером с одного уровня на другой, смотрел, как он ищет артефакты, находит их, потом возвращается на уровень к торговцу, подходит, торгует, выбирает новое задание и идёт дальше – жаль, что это не вошло в оригинальную игру.
То, что программисты честно взялись за интересную задачу, не задавая вопросов — вполне понятно. Оставленные без присмотра программисты и не такое натворить могут.
А разгадка проста: AI в играх не должен быть правдивым, а всего-навсего должен выглядеть правдоподобным.
Разница, на самом-то деле, огромна.
Вы, например, Fallout 2 помните? Вас не смущает, что на выходе из деревни вы видите чувака, которого придется месить в конце на базе, а после нахождения GECK-а внезапно всю деревню похищают? Или, например, на вас нападают рейнджеры, если вы плохой?
Первое — скриптованная сцена, второе — триггер, расставленный гемдизайнером. Что удивительно — главный злодей не решает сам выйти из базы, пройтись по миру и «случайно» встретиться с вами, рейнджеры не читают газет, из которых узнают, что вы поплохели, и не идут сами охотиться на вас.
Тем не менее, мир целостен, и игрок понимает «я плохой — на меня нападают хорошие», в то время, как это простая проверка «если карма меньше Х», безо всяких нейронных сетей и прочего говна. У игрока не возникает вопросов «а существует ли этот случайный корован после того, как я уйду с карты?». Нет, не существует.
Написать хороший, пусть даже «устойчивый к случайностям» сценарий в разы проще, чем пытаться делать настоящий AI.
Конкретно применительно к Сталкеру я бы сделал все проще: нагенерил несколько типовых сценок, типа «спасение NPC от волков», «спасение тебя NPC-ём», «смерть NPC», а потом бы «скармливал» игроку, до смерти NPC:
Берем несколько («пять», больше игрок просто не запомнит) случайных NPC, сводим их с игроком. Сводим их тупо, безо всяких «а на самом деле NPC в другой зоне, хотя игрок про это не знает». (Вообще, делать что-то, о чем игрок не знает и никогда не увидит — чрезвычайно тупое занятие). Сводим через какие-то промежутки времени («каждые 20 минут»).
NPC умер, желательно в присутствии игрока — замечательно, факт смерти отметили, перестаем подсовывать игроку этого NPC, вводим следующего.
Игрок не только не заметит подвоха, но и будет рад: кругом — знакомые лица.
Когда я в первый раз играл в «Сталкера», я специально искал следы умного AI. Кончилось все тем, что я несколько раз видел NPC с одним и тем же именем в разных зонах. И, собственно, всё.
Подобный эффект достигается, кстати, безо всяких AI, если дать NPC повторяющиеся имена. И я не шучу.
«Честный» интеллект хорош для игры, типа Sims 3 — когда персонажи живут на экране, а игрок за ними наблюдает. Тогда это «в тему». Тем не менее, AI в Sims не сложнее амебы, а игра все равно в топах по продажам.