Создание города
в Fable: The Lost Chapters
Автор статьи: Torionel
Создание в локации города или деревни — это важный этап моддинга локации, если она должна быть населенным пунктом. Для этого нужны три составляющих:
- Локация, где будет производиться спаун города.
- Скрипт деревни.
- Объекты, предметы и люди, привязанные к этому городу (точнее, к идентификатору UID скрипта деревни).
Факты о спауне города/деревни
- Лучше всего создание города работает после начала новой игры.
- Значимые параметры города задаются в разделе VILLAGE ("ДЕРЕВНЯ") в файле game.bin. В основном названия "деревень" соответствуют названиям .tng-файлов локаций (BowerstoneSlums_v2.tng -> VILLAGE_BOWERSTONE_SLUMS).
- 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;
Еще пара напутствий
- Скрипты города в оригинальной игре незначительно отличаются, поэтому внимательно сравнивайте их.
- Если в модифицированной игре вы делаете город в той локации, где он уже был, возьмите скрипт из оригинала этой же локации, а не из другой.
- Координаты скрипта имеют значение: там, где он находится, появляются люди (стражники и жители). Ставьте, к примеру, на площади или у ворот (в самых проходных местах, где столпотворение не вызывает у игрока вопросов).
Наполнение города
После спауна нужно сделать так, чтобы в городе было интересно. Для этого нужны дома, люди, тайные проходы, жулики и шлюхи.
Самое главное, что нужно сделать, — создать жилые помещения (дома или палатки), а также магазины. Всё это должно быть привязано к скрипту деревни. Привязка осуществляется через указание соответствующего UID деревни.
Если говорить конкретнее, у каждого дома в параметре CTCVillageMember должен быть указан UID деревни, а у каждого физического объекта в доме (двери, картины, мебель и проч.) — UID этого дома в параметре CTCOwnedEntity (получается нечто вроде иерархии UID'ов).
Как правило, отдельные NPC в оригинальных локациях не спаунятся (они привязаны к местам своего обитания или к скрипту самой деревни), но вы можете сделать в своей деревне и бездомных NPC. Для этого нужно так же, как и в случае с домами, указать UID деревни в параметре CTCVillageMember. Количество мужчин, женщин, детей, стражников, рабочих, призраков, внешний вид торговцев, трактирщика, официантки — всё это задается в CVillagePeopleDef.
Не забудьте отметить у всех построек и предметов, где возможно найти сокровища (книжные шкафы, полки), галочки ThingGamePersistent и ThingLevelPersistent, чтобы данные объекты сохранялись в том состоянии, в каком вы их оставили — соответственно, после выхода из игры и после выхода из локации (в оригинале разработчики так и делали).
Интересные факты
- при создании в локации здания школы Южного Бауэрстоуна (если указан id города) спаунятся также школьный учитель господин Подагринс и весь его класс.
- эта тема уже когда-то поднималась в наших Обсуждениях.