Создание города
в Fable: The Lost Chapters

Автор статьи: Torionel

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

  1. Локация, где будет производиться спаун города.
  2. Скрипт деревни.
  3. Объекты, предметы и люди, привязанные к этому городу (точнее, к идентификатору UID скрипта деревни).

Факты о спауне города/деревни

  1. Лучше всего создание города работает после начала новой игры.
  2. Значимые параметры города задаются в разделе VILLAGE ("ДЕРЕВНЯ") в файле game.bin. В основном названия "деревень" соответствуют названиям .tng-файлов локаций (BowerstoneSlums_v2.tng -> VILLAGE_BOWERSTONE_SLUMS).
  3. VILLAGE-запись города нужна для того, чтобы создавать в локации полноценный город (вы спауните именно этот параметр в качестве некоего невидимого маркера-скрипта). Функция VILLAGE-записи — агрегировать в себе ссылки на значимые CDef'ы, в которых указываются важные параметры города. Многие из них вы можете изменить в прикрепленных к VILLAGE дефах (CVillageDef, CVillagePeopleDef).

Скрипт города

Примерно такой скрипт нужно вставить через редактор кода или текстовый редактор (Блокнот, Notepad++ и др.) в .tng-файл вашей локации. Для примера возьмем скрипт из .tng-файла Южного Бауэрстоуна. Красным шрифтом отмечены части, которые необходимо изменить под себя.

NewThing Village;
Player 4;
UID 18446741874686298956; (Прим. — здесь укажите свой UID.)
DefinitionType "VILLAGE_BOWERSTONE_SLUMS"; (Прим. — здесь укажите свой VILLAGE.)
ScriptName NULL;
ScriptData "NULL";
ThingGamePersistent TRUE;
ThingLevelPersistent TRUE;
Health 0.00000;
ObjectScale 1.00000;
StartCTCPhysicsStandard;
PositionX 68.76733;
PositionY 82.20850;
PositionZ 73.77101;
RHSetForwardX 0.00000;
RHSetForwardY 1.00000;
RHSetForwardZ 0.00000;
RHSetUpX 0.00000;
RHSetUpY 0.00000;
RHSetUpZ 1.00000;
EndCTCPhysicsStandard;
StartCTCVillage;
HasBeenInitiallyPopulated FALSE;
FramePlayerLastSeenByGuard -5322024;
Limbo FALSE;
IsEnemyBecauseOfCrime FALSE;
CurrentIsHeroCriminal FALSE;
EndCTCVillage;
StartCTCEnemy;
FriendsWithEverythingFlag FALSE;
EnableFollowersEnemyProxy TRUE;
FactionName "";
EndCTCEnemy;
StartCTCCreatureOpinionOfHero;
InteractedFlag FALSE;
GreetedFlag FALSE;
LastOpinionReactionFrame 0;
NumberOfTimesHit 0.0;
ToleranceToBeingHitOverride -1.0;
FrameToDecayNumberOfTimesHit 2147483647;
ForcedAttitude 18;
HeroOpinionEnemy FALSE;
EndCTCCreatureOpinionOfHero;
EndThing;

Еще пара напутствий

  1. Скрипты города в оригинальной игре незначительно отличаются, поэтому внимательно сравнивайте их.
  2. Если в модифицированной игре вы делаете город в той локации, где он уже был, возьмите скрипт из оригинала этой же локации, а не из другой.
  3. Координаты скрипта имеют значение: там, где он находится, появляются люди (стражники и жители). Ставьте, к примеру, на площади или у ворот (в самых проходных местах, где столпотворение не вызывает у игрока вопросов).

Наполнение города

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

Самое главное, что нужно сделать, — создать жилые помещения (дома или палатки), а также магазины. Всё это должно быть привязано к скрипту деревни. Привязка осуществляется через указание соответствующего UID деревни.

Если говорить конкретнее, у каждого дома в параметре CTCVillageMember должен быть указан UID деревни, а у каждого физического объекта в доме (двери, картины, мебель и проч.) — UID этого дома в параметре CTCOwnedEntity (получается нечто вроде иерархии UID'ов).

Как правило, отдельные NPC в оригинальных локациях не спаунятся (они привязаны к местам своего обитания или к скрипту самой деревни), но вы можете сделать в своей деревне и бездомных NPC. Для этого нужно так же, как и в случае с домами, указать UID деревни в параметре CTCVillageMember. Количество мужчин, женщин, детей, стражников, рабочих, призраков, внешний вид торговцев, трактирщика, официантки — всё это задается в CVillagePeopleDef.

Не забудьте отметить у всех построек и предметов, где возможно найти сокровища (книжные шкафы, полки), галочки ThingGamePersistent и ThingLevelPersistent, чтобы данные объекты сохранялись в том состоянии, в каком вы их оставили — соответственно, после выхода из игры и после выхода из локации (в оригинале разработчики так и делали).

Интересные факты

  • при создании в локации здания школы Южного Бауэрстоуна (если указан id города) спаунятся также школьный учитель господин Подагринс и весь его класс.
  • эта тема уже когда-то поднималась в наших Обсуждениях.

Больше интересного о Fable — в нашем Telegram-канале