В этой теме буду пилить статью по созданию своего существа с нуля, используя почти неограниченные возможности движка DF.
Буду подробно разбирать материалы, слои, токены и прочую чепуху.
В первую очередь статья создается для желающих поучаствовать в FFT.
Итак, каждое существо в игре имеет части тела. Внутри тела находятся жизненно и не очень важные органы. И органы, и части тела имеют так называемые слои, указывающие на ткань, из которого они состоят, а также его толщину и материал.
К примеру, рука состоит из материала SKIN (кожа), FAT (жир), MUSCLE (мышца), BONE (кость). Также каждый слой имеет свою толщину и материал, от которых зависит то, какую силу нужно приложить, чтоб повредить его. Например, слои ноги гуманоида обычно имеют следующую толщину: кость - 25, мышца - 25, жир - 5, кожа - 1.
Ткани, их слои и толщина - очень важная часть при создании существа, без них существо не может быть загружено игрой и произойдет крэш.
В этом туториале мы создадим свое существо "с чистого листа", из готовых файлов используя лишь материалы, так как создавать их с нуля - мозахизм.
1 Часть.
Создайте в папке raw/objects новый текстовый документ с названием, к примеру, body_mymonster.txt. В этом файле мы создадим все части тела для нашего будущего существа. Конечно, логичнее было бы использовать существующие, но важно понять как это работает.
Итак, мы создали файл. Открываем его и в первой строке пишем его название (без расширения .txt), в нашем случае это body_mymonster. Это очень важно, если название файла и первая строка будут отличаться, то игра не сможет прочитать нашу равку. Пропускаем одну строку и пишем на следующей [OBJECT:BODY]. Эта строка указывает, что объект (наш текстовый документ, равка) содержит в себе части тела, которые потом можно будет использовать для создания существа. Пропускаем еще одну строку.
Во избежание ошибок буду периодически показывать, как должна выглядеть равка. Сейчас это:[
body_mymonster
[OBJECT:BODY]
Вы, заглядывая в описание мертвого существа во время игры в Fortress Modе, наверняка замечали надпись "his upper body is gone." во всех случаях, даже если верхняя половина тела на месте. Тут дело в движке игры, сейчас объясню.
В игре присутствуют так называемые "токены". Токены существуют разные, одни подходят для существ, другие для материалов, третьи для цивилизаций. Каждый токен указывает игре на то, что умеет объект, к которому он привязан (точнее, какими особенностями обладает или типа того). Вот, к примеру, токен [INTELLIGENT] в теле объекта типа существо дает этому существу возможность думать, строить, использовать оружие и т.д., то есть просто делает его умным. Токен [NERVOUS] в параметрах части тела говорит о том, что она имеет нервы, при повреждении которых откажет (откажет не только эта часть тела, но и связанные с ней части, например задет нерв предплечья - отказывает и вся рука от локтя и ниже вместе с ним). Таких токенов множество.
Итак, вернемся к отсутствующей верхней половине тела. Существует токен [UPPERBODY], идентифицирующий ее. Этот токен у существа может иметь только одна часть тела. Соль в том, что ЛЮБОЕ существо, которому отрубают часть тела, содержащую токен [UPPERBODY], сразу умирает. Не зависимо от того, сделано оно из адамантина или это просто кусок мяса. Эта особенность игрового движка жестко закодирована и мы не можем на это повлиять.
Можно сделать существо, у которого тело не будет разделено на верхнюю и нижнюю половины (к примеру - cave blob). Такое существо нельзя разрубить. Чтоб убить его, мы должны обезвредить часть тела, содержащую известный нам токен. Это можно сделать, повредив нерв или мозг. Также существо может умереть от потери крови, но это касается только живых существ.
Исходя из этого всего нетрудно понять, что демон или ФБ, не имеющий ни крови, ни нервов, тело которого состоит только из одной части, непобедим (ибо я не совсем уверен в наличии у них мозга).
Продолжим работу с нашим существом. Сейчас мы создадим тело, состоящее из верхней и нижней половины. Скопируйте в нашу равку, а лучше - запишите, следующий код:
[BODY:MY_2PARTBODY]
[BP:UB:upper body:upper bodies][UPPERBODY][CATEGORY:BODY_UPPER]
[DEFAULT_RELSIZE:1000]
[BP:LB:lower body:lower bodies][LOWERBODY][CON:UB][CATEGORY:BODY_LOWER]
[DEFAULT_RELSIZE:1000]
Первая строка создает объект типа BODY c уникальным идентификатором MY_2PARTBODY. Если идентификатор не будет уникален, произойдет крэш.
Этот объект будет содержать несколько частей тела, КОНКРЕТНО этот - верхнюю и нижнюю части торса.
Рассмотрим вторую строку.
[BP:LB - создание части тела (ВР) и определение для нее идентификатора (LP).
upper body:upper bodies] - название части тела в одиночном и множественном числе.
[UPPERBODY] - токен, о котором мы говорили. Его можно вставить куда угодно, но лучше не путаться. Позволяет носить панцири, кольчуги, рубашки и т. д.
[CATEGORY:BODY_UPPER] - название категории (сюда можно вписать что угодно, потом это можно будет использовать для соединения с другими частями тела, но в отдельных случаях, которые мы рассмотрим позже).
[DEFAULT_RELSIZE:1000] - определяет размер части тела как 1000. Размер влияет на вероятность попадания по ней.
Переходим к нижней части тела:
[BP:LB:lower body:lower bodies] - то же, что и в верхней части: ИД и название.
[CON:UB] - CON - сокращение от английского слова connect, что означает "соединять". После двоеточия находится идентификатор верхней части тела. Таким образом, токен [CON:UB], принадлежащий чему-либо (у нас это - нижняя часть тела) соединяет ее с верхней частью тела.
[LOWERBODY] - обозначает объект как нижнюю часть тела. Позволяет носить платья, штаны и т. д. Если отрубить часть тела с этим токеном - существо умирает.
[CATEGORY:BODY_LOWER] и [DEFAULT_RELSIZE:1000] - то же, что и в предыдущем объекте.
Поздравляю! Мы только что создали и разобрали тело нашего будущего существа. Но такое тело игра не сможет прочесть, потому что мы не обозначили для него материал. Этим мы займемся чуть позже, сейчас создадим руки, ноги, голову, органы и т.д.