RSL - The Sims 2 - Articles - Scripting and Sims2: Coding the Psychology of Little People Скрипты и Sims2: Кодирование психологии маленьких человечков

Это была очень информативная сессия. Она также помогла понять то, что было позже в этот день, так что мой почти мертвый мозг смог лучше переварить лекцию во что-то такое, что я смог выплюнуть потом вам. Эта лекция была о технологии, стоящей за поведением персонажей и объектов в The Sims 2. Я на сессию немного опоздал, так как пытался как можно больше ограбить выставку, поэтому я пропустил представление, но я попал туда как раз к началу самой лекции...

Объект в The Sims - это набор данных, имеющий внутри себя исполняемую часть. Когда этот предмет размещается на участке, исполняемая часть запускает код этого предмета и позволяет выбирать его игрокам и самим симам. Эти объекты полностью автономны, они хранятся вне локальных списков строковых данных (String lists), исполняемых скриптов (executable scripts), общих определяющих мета данных (common definition meta data - причудливое название для глобальных переменных), анимационных списков, направляющей информации (routing information - как сим должен двигаться вокруг объекта, или как должен двигаться сам объект), рекламной информации (advertising information), определений взаимодействия (interaction definitions), и любой другой дополнительной образцовой информации (model information). Мы рассмотрим эти три последние индивидуально. Рекламирование - главная часть того, как работает сим объект. Все объекты сообщают то, какие желания сима они могут удовлетворить при взаимодействии с ними. Например, холодильник рекламирует то, что может обеспечить симу +4 продовольствия и +2 счастья, или кушетка может рекламировать, что обеспечит симу +6 комфорта и +4 счастья. Эти рекламные объявления используются симами, чтобы самостоятельно решить, что они хотят сделать, основываясь на своих текущих хотениях, потребностях и желаниях в игре. Определения взаимодействий сообщают игре, как сим должен обращаться с объектом, или как объекты должны взаимодействовать с другими объектами. Дополнительная образцовая информация - результат иерархической файловой структуры, используемой для объектов - это учитывает функциональные возможности C++ подобного наследования. Можно начать, например, с файла такого объекта, как базовый стул, затем, если вы хотите создать новый тип стула, можно просто создать новый объект с такими же свойствами, но с дополнительной образцовой информацией только для подлокотников.

Большинство игровых объектов - физические (автомобили, туалеты, плиты и т.д.), но также существуют объекты, которые мы не можем видеть, но они работают в фоновом режиме и управляют некоторыми особенностями игры, например, обработка посетителей, которые прибывают на участок, погоды, времени дня и т.д. Одним хорошим примером такого типа объекта был бы менеджер бесед. Когда два или несколько симов разговаривают друг с другом, они фактически говорят не непосредственно с кодом друг друга, который может довольно быстро стать довольно сложным. Вместо этого они все общаются с единственным объектом-менеджером, который потом указывает симам соответствующее поведение.

Объекты могут также быть многоплиточными, это когда несколько игровых объектов представляют из себя один видимый объект. В оригинальных Sims кушетка, на которой могли сидеть трое человек, состояла из трех плиток. В Sims2 немного по-другому. Вместо отдельного объекта, составленного из трех плиток, теперь это отдельный мета-объект, составленный из трех объектов. Так, кушетка, шириной в три "плитки", фактически - три отдельных объекта для сидения, соединенные вместе. Это обеспечивает намного большую гибкость. Вы, возможно, замечали, играя в Sims1, что иногда случались проблемы, когда три сима пытались сесть на одно и то же место на трехместной кушетке, игнорируя два других пустых места. Иногда сим останавливался перед пустым местом и начинал скулить, что ему некуда сесть. Эти проблемы сейчас решаются проще, так как каждое место в кушетке теперь - это отдельный объект. Так вместо того, чтобы говорить о кушетке в целом, если симу нужно идти к ней, игра может сообщить симу маршрут к конкретному месту этой кушетки. Также намного проще сообщить симу маршрут к самому объекту, чем указать произвольное место на объекте.

Создание объекта для команды было, похоже, своего рода мини-производством. Сначала они думают, какую мотивацию должен удовлетворять этот объект, как например "нам нужен объект, который будет удовлетворять мотивацию развлечений", вместе с тем объект должен придерживаться определенной темы, если он будет находиться в пакете расширения. Затем они организуют встречу дизайнеров, чтобы определить правила объекта, типа того, как он будет удовлетворять мотивации, если это групповой объект, как он будет взаимодействовать со всем остальным в игре, и т.д. Затем настает время технического совещания, на котором они определяют возможности объекта и его взаимодействий, что будет необходимо, чтобы фактически создать его (анимации, модели, текстуры и т.д) и нужно ли будет добавлять дополнителную поддержку движка, чтобы использовать объект. Затем - планирование моделей (или скелетные шаблоны, если это основано на существующем объекте), анимаций, текстур, звука и скриптов. В то время как анимации и скрипты обычно делаются в одно и то же время, так как они тесно взаимосвязаны, звук появляется после того, как будут готовы анимации, так как он должен быть синхронным. В Maxis вообще были 1 инженер скриптов, 1 или 2 аниматора, 1 модельер и 1 художник текстур на объект.

Команда использовала один инструмент, в частности Edith, для создания свойств объекта. Инструмент Edith был создан в MFC, но прекрасно работал и внутри игры. Первоначально разрабатывался для Sims1, когда эта игра была еще на Mac (да, Mac), и постоянно пересматривались все пакеты расширения для Sims2. Ранняя версия также использовалась для консольных игр (Breaking Out, Urbz), что позволило Maxis перемещать инженеров скриптов из одного проекта в другой и немедленно начинать производство большого количества содержания. Так как редактор полностью внутри игры, скрипты могут изменяться в режиме реального времени. Отладка также выполняется в режиме реального времени, с контрольными точками, контрольные точки данных, "редактирование и продолжение выполнения" скриптов (разве я уже не говорил это?) и автоматическое сохранение изменений. Другая приятная особенность инструмента - то, что весь текст, введенный через Edith, затем экспортируется нажатием на кнопку, локализуется (нажатием на кнопку - о да, в наших мечтах) и заново импортируется нажатием кнопки через внешний инструмент.

Нам показали в работе этот редактор Edith, продемонстрировав все различные окна и поля данных во всей их безумной сложности. Обозреватель объектовВид на данные объекта, это стул.
Обратите внимание на скрипт взаимодействия "сесть" Дерево скриптов,
большая визуальная помощьТааак много полей...

Скриптовый язык, стоящий за всеми этими взаимодействиями объектов называется Simantics. Это - в режиме реального времени интерпретируемый и исполняемый язык, не компилируемый. Они выбрали его потому, что, если нужно "редактировать и продолжать выполнение", необходимы именно интерпретируемые скрипты. Для окончательной реализации их нужно скомпилировать, и это может создать целую кучу новых проблем, так как теперь нужно тестировать и то, и другое. Парсинг (parsing), как альтернатива, быстрее для разработки, но может иметь накладные расходы во время выполнения. Сохранять в двоичном формате, а не в виде текста, чтобы ограничить хакерство, или попробовать другие пути, и они также имеют возсможность экспорта текста. Установлены размеры примитивов, наряду с ограниченной математической функцией уменьшения, например, никакие координаты игрового мира не используются, только относительные, так например это был бы "маршрут относительно этого объекта", а не "маршрут в конкретные координаты мира X, Y и Z". Скрипты могут вызываться напрямую из кода, который ведет к легкой объектно-ориентированной логике. У каждого объекта есть свой исполняемый модуль (как упомянуто ранее), и он имеет свой собственный стек для передачи данных функциям, как и в любом другом языке, и любые выданные примитивы "ожидают" выполнения своих функциональных возможностей, прежде чем реализовать свое управление объектом (типа направления, анимиования, сна и т.д.). Наконец, внутренняя проверка ошибок предусматривает изящную обработку сбоев, возвращая объект в последнее известное состояние.

Так, что же является сутью использования Edith и Simantics?

Плюсы

* Приложение работает в режиме реального времени
* Not easily reverse engineered
* Все функциональные возможности в одном месте
* Инструмент почти качества реализации
* Много профильных и простых в использовании возможностей
* Реальные ограничения на процессороемкие скриптовые операции
* Быстро и просто добавлять новые типы примитивов
* Автоматическое отслеживание ошибок в реальном времени и восстановление

Минусы

* Для редактирования нужно, чтобы работала сама игра, если какая-нибудь проблема с игрой, работа останавливается
* Требуется много эмпирических знаний. Много полей данных могут потребовать много времени на их изучение, и таким образом долгое время не будет полной производительности
* Примитивы могут усложняться, но нет мастера изменения размеров
* Непередаваемый набор навыков, полученные при работе навыки полезны только для Edith и Simantics
* Нелегко отслеживать 10-кратные объекты (это больше проблема C++, чем Simantics)

Posted 03/11/05 by Drew Sikora, GameDev.net
Translated 07/09/05 by RSL Up - Articles - Sims 2 Archive - Sims 2 News - Links - RSL-site