Сегодня позвольте побурчать на тему скриптинга Fallout 2. Тема для большинства игроков непонятная, поэтому стоит поговорить о ней отдельно.
Начнем с того, что скрипты - это кусок программного кода, который описывает поведение тех или иных игровых объектов или событий. Дверные замки, ловушки, товар у торговцев, структура диалога, даже освещение на локациях - всё это описывается скриптами. В ресурсах Fallout 2 зашито 1448 скриптов. Кажется, что это много, и это действительно так. Однако сам скриптинг в этой игре просто ужасен! Выражается это в трех основных проблемах.
Первое - это бессистемный скриптинг
Это означает, что часты случаи, когда схожие события не согласованы между собой или с игровой механикой, нарушают заложенные в игре принципы. Проще объяснить на примерах.
В Брокен-Хиллс для починки воздухоочистной станции следовало найти квестовый предмет и использовать его на оборудовании через специальную опцию меню. Однако в аналогичной ситуации с починкой голосового модуля в Убежище 13 использовать предмет не получится - придётся руками взаимодействовать с терминалом и затем в режиме диалога выбирать нужную реплику. То есть два аналогичных случая в плане игровой механики работают совершенно по-разному. При этом обе ситуации скорее характерны для жанра квеста, так как игнорируют ролевую систему, но это уже отдельный разговор.
В той же ситуации с голосовым модулем происходит другая системная ошибка - вместо того, чтобы в Нью-Рино выкупать квестовый предмет через окно бартера (как это делали с Танди в Fallout) игрок делает это через строчку в диалоге с фиксированной ценой. В итоге и навык оказывается не у дел, и нарушена система геймплея, и ситуация в целом нелогична. Нелогична потому, что торговец готов продать модуль только за монеты, а боевую броню может и бартером. Так что же на уме у этого барыги, а?
Другой пример - если обычно электронные двери взламываются навыком независимо от наличия электронных отмычек, то дверь в токсичных пещерах Кламата, увы, требует именно отмычку. Это нарушает принцип соответствия - одни двери взламываются так-то, а другие иначе, хотя они вполне аналогичны друг другу.
Похожая ситуация с компьютерами - каждый раз всё по-своему: компьютеры Сьерры требовали подбора паролей из списка, компьютер в реакторе Гекко требовал решения головоломки, медицинский компьютер в Городе Убежища и суперкомпьютер в Наварро взламывались навыком через строчку в диалоговом режиме (а не через опцию использования навыка), но в основном компьютеры просто юзались руками. И ведь во всех этих случаях остается не у дел специальная опция меню, которая позволяет непосредственно использовать навык науки. А это уже не согласуется с другими схожими ситуациями - взломом замков или обезвреживании ловушек, где юзать нужно именно навык.
Второе - это несогласованный скриптинг
Это означает, что при сохранении единого алгоритма не совпадают отдельные опции или параметры. Обычно по недосмотру разработчиков, а иногда специально из желания сделать как-то "необычно".
Так предмет "инструменты" даёт разный бонус к навыку в разных ситуациях (0, 10, 20, даже 40). Причем в одних случаях его можно заменить суперремнабором, а в других нельзя. Резиновые сапоги помогут избежать токсичной жижи на Марипозе и в пещерах Кламата, но не позволят в Арройо. Перк "Легкая походка" в одних ловушках учтен, а в других про него забыли. И так далее.
Третье - это избыточный скриптинг
Многие скрипты можно было написать оптимальнее и сократить их количество без потери содержательности. Примеры.
Для каждой ловушки в храме Арройо используется свой собственный скрипт (итого 16 скриптов). Но используют они один и тот же кусок кода с одним лишь отличием - это проверяемый номер гекса, на котором размещена ловушка. Очевидно, разработчики решили задачу первым же способом, который пришел им на ум. Аналогично для каждого силового поля на военной базе Сьерра используется по два собственных скрипта (один для поля и он же для тригера, а другой для эмитера). Итого это 28 скриптов! Отличие между ними также ничтожно. Можно ли было свести эти 28 скриптов в 2 универсальных? Вполне. И я так делал для своего проекта (хотя тоже не оптимально).
Пример другого типа - это контейнеры и двери, которые хозяева запрещают трогать, обрывая действия Избранного при первой попытке и атакуя при повторной. С такой ситуацией игроки сталкивались главным образом в Нью-Рино и Городе Убежища. Для реализации этой опции писались скрипты, у которых программный код отличался лишь одним параметром - индексацией "хозяев" (под которыми понимается локализованная группа нпс). Например, люди Бишопа относятся к одной группе хозяев, а люди Сальваторе - к другой. Но проблема в том, что такой подход себя не оправдал. Ведь в игре какая-либо группа "хозяев" попросту не может оказаться в зоне с чужими контейнерами. Люди Бишопа, например, не заходят в помещения Сальваторе. Тем ни менее такой подход заставил создать несколько десятков (!) скриптов вместо одного-единственного, а также ввести чертову кучу местных переменных.
Аналогично было создано множество скриптов для дверных замков, хотя отличие между ними было лишь требуемом уровне взлома. Есть разные способы, как упростить эту задачу: создать единый скрипт и устанавливать сложность на проверку текущей карты (как сделано в Fallout Nevada), ввести отдельный меняемый параметр в префаб дверей (так как у разработчиков был доступ к движку), создать 5 аналогичных скриптов для 5 уровней навыка Взлома (0, 25, 50, 75, 100 или как-то иначе).
Если я недостаточно понятно что-то объяснил, задавайте вопросы, постараюсь ответить более детально.