Моддинг катсцен |
Автор статьи: Torionel. Список команд и примеры переведены с Fabletlcmod.com/wiki |
Катсцена (англ. "cutscene", дословно - "вырезанная сцена" или "нарезанная сцена") - это скриптовой ролик, который демонстрируется игроку при наступлении определённых условий. От простого видеоролика (которые также могут использоваться в игре) катсцена отличается содержимым, которое не полностью статично, так как часть его (переменная часть катсцены) может меняться (подставляться) игрой в зависимости от сюжетных путей, которыми следует игрок; видеоролик же полностью статичен, снят (отрендерен) заранее и лишён сценарной составляющей. При этом по уровню графики катсцены в некоторых играх могут быть на уровне HD-видео, даже если сама игра не обладает подобными характеристиками.
Факты о катсценах в FTLC
- Катсцены можно пропускать, нажав Esc.
- В Fable: TLC графика катсцен соответствует графике самой игры.
- Структурно катсцены являются составляющей файла script.bin и находятся в разделе CCutsceneDef.
- Катсцены активно задействуются в получаемых игроком заданиях (иногда и вне их).
- Катсцены взаимодействуют с содержимым локации (маркерами, персонажами, объектами), поэтому их редактирование тесно переплетается с моддингом локаций.
- Катсцены состоят из последовательности команд, написанных на чрезвычайно простом "языке программирования".
Создание катсцен
Мы можем создавать собственные катсцены через Fable Explorer. Для этого нужно экспортировать любую имеющуюся катсцену в отдельный файл (образец), затем кликнуть правой кнопкой мыши по script.bin и выбрать пункт "Create New Entry". В появившемся окне следует импортировать файл, задать название катсцены (это в Symbol Name; как правило, формат типа CS_NAME) и задать тип (Definition Type) CCutsceneDef (это один из немногих видов дефов, которые не находятся в game.bin).
Редактирование катсцен
Как правило, для редактирования катсцен Fable-моддеры используют CBox. Чтобы отредактировать катсцену, нужно открыть в CBox файл script.bin, раскрыть раздел CCutsceneDef, выбрать нужную катсцену и открыть её. Далее будет доступно 3 режима (Mode 1, Mode 2, Mode 3) текстового редактирования, каждый из режимов отличается содержимым.
Также катсцены можно редактировать с помощью FE: разница в том, что здесь для редактирования катсцены нужно открыть в ней раздел Macro, SkipCond или SetupCond (они соответствуют тем самым режимам редактирования CBox).
На самом деле режимы редактирования соответствуют т.н. секциям катсцен. Катсцены деляются на секцию main (основная) и skip (то, что происходит, если во время катсцены нажать Esc; важно, что при этом содержимое локации должно стать таким же, как будто катсцену и не пропускали!). Назначение третьего режима (секции) неизвестно.
Язык катсцен
Катсцены в Fable TLC имеют ряд характерных команд, зная и комбинируя которые, можно отредактировать некоторые квесты до неузнаваемости.
Синтаксис команд
- Команды делятся на функции и классы (грубо говоря, класс - это некий объект, а функция описывает, что происходит с объектом или что он сам делает в катсцене, хотя деление довольно условное). И то, и другое ещё имеет типы и виды.
- Каждая команда начинается с новой строки.
- Почти каждая команда имеет один или несколько параметров и соответствующие ему (им) значения (имя, число, или значение TRUE/FALSE). Значения бывают текстовыми (строчными, или string), булевыми (boolean, т.е. TRUE/FALSE), целочисленными (integer) и дробными (с плавающей точкой, известны как float). Можно также задавать имя собственное ("variable", т.е. "переменная"), к примеру, название объекта из game.bin и т.д. Всё как и всегда в программировании.
- Во всех катсценах переменная HERO класса Creature означает нашего персонажа.
- Регистр значений TRUE/FALSE не важен.
- Именные команды допускают группировку, т.е. перечисление нескольких имён собственных (например, названий маркеров) через запятую без пробелов после запятых.
- Именные команды допускают символ подчёркивания "_".
- Некоторые команды допускают двойную, тройную и т.д. группировку типа ИМЯ.НАЗВАНИЕКОМАНДЫ ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2...
Список функций
Функции сгруппированы ниже по типам и видам. В видах сначала указано название функции, затем порядок указания значения, а затем пример (если есть). Функции (т.е. виды) разделяются для вашего удобства чертой.
Функции с примечанием "Синхронная" выполняются после завершения катсцены. Параметры {внутри фигурных скобок} опциональны.
Функции типа "Camera"
DoCameraPreloading
Назначение неизвестно.
___
UseCamera
Location:variable{,unknown:integer?{,unknown:unknown{,unknown:unknown{,unknown:unknown}}}}
Пример: UseCamera SNAP
___
NoLoadUseCamera
Location:variable
Назначение неизвестно.
___
NoDialogCam
Unknown:boolean
Включает или выключает изменения камеры вместе с диалоговыми функциями персонажей.
___
CameraShake
Duration:float,Unknown:float
Тряска камеры. Продолжительность задаётся в секундах.
Примечание: синхронная.
___
WaitForCamera
Предположение: заставляет камеру двигаться к завершению катсцены.
___
WaitForMessageCamera
Unknown:variable
Назначение неизвестно.
Функции типа "Thing"
Функции этого типа описывают действия различных объектов (домов, сундуков, существ и т.д.).
SetGravityOnThing
Thing:variable,Unknown:boolean
___
PauseThing
Thing:variable,Pause:boolean
Ставит на паузу и убирает с паузы объекты, к примеру, анимацию, движение и т.д.
___
DrawThing
Thing:variable
___
TeleportThing
Unknown:unknown,Location:variable
___
PlayObjectAnim
Object:variable,Unknown:unknown{,Unknown:boolean}
Проигрывает связанную с объектом анимацию.
___
SetThingConscious
Thing:variable,Conscious:boolean
Делает объект "сознательным" ("conscious") или "несознательным" ("unconscious").
Пример: SetThingConscious FIGHTER,TRUE
___
FadeThingIn
Thing:variable
Постепенное появление объекта. Работает через жопу.
___
FadeThingOut
Thing:variable,Duration:float
Постепенное исчезание объекта.
Пример: FadeThingOut HERO,2
Функции типа "Crowd"
CrowdCreateMixed
ModelMale:enum,ModelFemale:enum,Marker:variable,Group:variable
Создаёт рядом с находящимся в TNG-файле локации маркером смешанную толпу, состоящую из некоторого количества мужских и женских персонажей (не забудьте указать название маркера в ScriptName).
Пример: CrowdCreateMixed CREATURE_KN_VILLAGER_MALE, CREATURE_KN_VILLAGER_FEMALE, MK_EXAMPLE, CROWD
___
CrowdAcquire
Group:variable
___
CrowdLookTo
Group:variable,Thing:variable
Заставляет толпу посмотреть в направлении объекта (Thing).
___
CrowdTeleport
Group:variable,Unknown:variable
Назначение неизвестно.
___
CrowdClearActions
Group:variable
Назначение неизвестно.
___
CrowdAnimate
Group:variable,Animation:enum,Unknown:float,Unknown:float,Unknown:float,Unknown:boolean,Unknown:boolean,Unknown:number
Анимирует толпу.
Пример: CrowdAnimate CROWD,SCRIPT_CHEER_3,0.5,0.05,0.05,TRUE,TRUE,2
___
CrowdCombatAnimate
Назначение неизвестно
Пример: CrowdCombatAnimate CROWDBANDITS, CS_WALK_BACKWARDS_01, 0.0,0.0,0.0,FALSE,TRUE,FALSE
___
CrowdRipplePosition
Group:variable,Unknown:unknown
Назначение неизвестно.
___
CrowdKill
Group:variable{,Unknown:float{,Unknown:boolean{Unknown:boolean}}}
Убивает толпу (всех персонажей, которые в неё входят), при этом остаётся добыча.
Пример: CrowdKill HHUndead,1.5,TRUE,TRUE
Функции типа "Hero"
Функции, сделанные специально для управления вашим персонажем.
GiveHero
Item:variable{,Unknown:unknown{,Unknown:unknown{,Unknown:boolean}}}
Даёт Герою вещь, название которой берётся из раздела OBJECT в game.bin.
Пример: GiveHero OBJECT_HERO_HAT_JOB_MASK,1,-1,TRUE
___
RemoveHeroClothes
Раздевает Героя (кроме труселей, конечно же).
___
GiveHeroHealth
Unknown:unknown
Задаёт здоровье Героя.
Пример: GiveHeroHealth MAX
___
GiveHeroMorality
Amount:number
Даёт Герою очки добра или зла (отрицательные числа - это зло, и наоборот).
___
HeroTattoo
Object:enum
Татуирует Героя определённой татуировкой.
Пример: HeroTattoo OBJECT_TATTOO_CARD_CHEST_01
___
HeroHair
Object:enum
Задаёт волосы и бороду Героя.
Примеры: HeroHair OBJECT_HERO_HAIR_YOUNG_01, HeroHair OBJECT_HERO_BEARD_TRAMP_01
___
PutInHeroHands
Object:enum
Даёт что-нибудь в руки Герою. Значение NULL задаёт пустые руки. Можно всё, кроме оружия (см. ниже).
Пример: PutInHeroHands NULL
Cм. также сходную команду Creature.HoldInHand (ниже).
___
SetHeroWeapon
Weapon:variable
Задаёт оружие Героя, при этом оно будет висеть за спиной, Герой не будет брать его в руки.
___
RemoveHeroWeapons
Unknown:boolean
Назначение неизвестно.
___
TakeObjectFromHero
Object:variable
Взять объект из инвентаря Героя.
Пример: TakeObjectFromHero OBJECT_TROPHY_JOB_MASK_01
___
HeroWear
Object:enum
Надеть на Героя головной убор. Чтобы снять головной убор, задайте OBJECT_HERO_NO_HAT.
Пример: HeroWear OBJECT_HERO_HAT_JOB_MASK
___
GiveGold
Amount:integer
Даёт Герою золото.
___
Функции типа "Miscellaneous" ("Прочее")
Здесь собраны все оставшиеся функции.
___
AnimationPause
Pause:boolean
Назначение неизвестно.
___
AnimationPhysics
On:boolean
Назначение неизвестно.
___
AskQuestion
Text:string
Задаёт вопрос с вариантами ответа "да/нет" (неизвестно, из каких именно ответов мы выбираем).
Пример: AskQuestion TEXT_QST_B04_GM_QUESTION_LEAVING_TO_GRAVEYARD
Примечание: синхронная.
___
AToSkip
Disabled:boolean
Если TRUE, запрещает возможность пропустить катсцену. Не забудьте отменить этот параметр в конце катсцены.
___
Create
Object:enum,Location:variable,Var:variable{,Unknown:boolean{,Unknown:variable}}
Создаёт новый объект для использования в катсцене. Название объекта берётся из раздела OBJECT в game.bin, локация означает стартовый маркер локации берётся из TNG-файла, а параметр Var задаёт имя объекта, который будет в катсцене. Фактически это ещё один способ спауна объектов (первый изучался в главе про моддинг локаций).
Для удаления объекта используйте функцию Remove (см. ниже).
___
Remove
Object:variable
Удаляет объект (существо, дом, стул и т.д.).
___
PlayMysic
Music:enum{,Unknown:boolean}
Начинается проигрывать музыку (задавайте в Music номер аудиофайла). Использование MUSIC_SET_NULL прекращает воспроизведение.
Cм. также сходные команды: MuteSounds, EnableSounds.
___
FadeIn
{Duration:float{,Unknown:float}}
Включает постепенное появление изображения, продолжительность задаётся в секундах.
___
FadeOut
{Duration:float{,Unknown:float}}
Включает постепенное исчезание изображения, продолжительность задаётся в секундах.
___
StayFadedOut
Назначение неизвестно.
___
GamePause
Duration:float
Ставит игру на паузу на выбранное время (задаётся в секундах). Учтите, что эта функция не останавливает действия внутри катсцены (ходьбу, переговоры и проч.).
___
ScriptFrame
Unknown:boolean
Назначение неизвестно.
___
DoScriptFrame
Count:integer
(Прим. глав. ред.: требуется перевод этой ахинеи.) Do script frames aka. proceed a number frames. Count specifies the frame count.
___
MuteSounds
Unknown:boolean
Назначение неизвестно.
___
EnableSounds
Unknown:boolean
Вы предположите, что эта команда включает или выключает звуки? А вот и нет)
___
PlaySound
Target:enum,Sound:variable,Unknown:unknown
Предположение: Target определяет расположение звука на мировой карте. Может принимать значение NULL.
Пример: PlaySound HERO,$SOUND,CRITERIA
___
PutUpYourSwords
{Unknown:boolean}
Заставляет персонажей убрать оружие (как минимум - самого Героя).
___
RemoveExtras
{Remove:boolean{,Location:variable{,Unknown:variable{,Unknown:unknown}}}}
В качества "Extras" здесь персонажи. Команда перемещает их. Remove удаляет их или заставлять вернуться, Location - место, куда движок должен их поместить (вот одни из возмозных значений: LIMBO, RETURN).
___
WaitActiceDialog
Ждёт завершения текущего диалога.
Примечание: синхронная.
___
SetChestOpen
Chest:variable,Open:boolean
Открывает или закрывает сундуки. В Chest указывается название сундука в ScriptName.
___
SetDoorOpen
Door:variable,Open:boolean
Открывает или закрывает двери, ворота и т.д. В Door указывается название сундука в ScriptName.
Пример: SetDoorOpen DragonGate
___
StartTimeCode
Назначение неизвестно.
___
KeepEntityMap
{Unknown:boolean}
Назначение неизвестно.
___
Get
Unknown:variable,Unknown:variable
Задать переменную для глобального объекта.
Пример: Get Dragon,DRAGON
___
RegisterActor
Object:variable
Предположение: регистрирует в катсцене глобальный объект.
___
EnableBlackScreenSubtitles
Предположение: показывает текст, даже на чёрном экране.
___
CreateEffect
Effect:enum,Target:variable,Var:variable{,Unknown:float{,Unknown:boolean}}
Присваивает объекту эффект. Effect - название эффекта, Target - объект/вещи, существо, которому требуется эффект, Var - переменная, использующаяся для эффекта из скрипта.
Пример: CreateEffect DG_SOUL_SWIRL,HERO
Cм. также сходную команду: RemoveEffect
___
DummyEffect
Unknown:enum,Object:variable,Unknown:unknown,Var:variable,Unknown:boolean
Object - объект, которому требуется эффект. Var - переменная, отсылающая к эффекту из скрипта.
Пример: DummyEffect JACK_OF_BLADES_MASK_FINAL,HERO,WEAPON_FOCUS_01,MASKGLOW,TRUE
___
RemoveEffect
Effect:variable
Удаляет эффект. Effect - перменная, использованная ранее в функции CreateEffect.
___
- 1
- 2