Форум Dwarf Fortress

Модификации => Моддинг => Тема начата: MebelMan от 30 Ноября 2011, 17:52:01

Название: Туториал по созданию собственных существ
Отправлено: MebelMan от 30 Ноября 2011, 17:52:01
В этой теме буду пилить статью по созданию своего существа с нуля, используя почти неограниченные возможности движка 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] - то же, что и в предыдущем объекте.

Поздравляю! Мы только что создали и разобрали тело нашего будущего существа. Но такое тело игра не сможет прочесть, потому что мы не обозначили для него материал. Этим мы займемся чуть позже, сейчас создадим руки, ноги, голову, органы и т.д.
Название: Re: Туториал по созданию собственных существ
Отправлено: Dvorovic от 30 Ноября 2011, 17:56:22
А чего не в вики?
Название: Re: Туториал по созданию собственных существ
Отправлено: MebelMan от 30 Ноября 2011, 18:57:55
В вики позже, когда тут будет полностью готово.
К тому же, тут можно отвечать на вопросы.
Название: Re: Туториал по созданию собственных существ
Отправлено: MebelMan от 30 Ноября 2011, 20:36:13
Теперь скопируйте в равку следующий код:

[BP:MRUA:right upper arm:STP][CONTYPE:UPPERBODY][LIMB][RIGHT][CATEGORY:ARM_UPPER]
[DEFAULT_RELSIZE:200]
[BP:MRLA:right lower arm:STP][CON:MRUA][LIMB][RIGHT][CATEGORY:ARM_LOWER]
[DEFAULT_RELSIZE:200]
[BP:MRH:right hand:STP][CON:MRLA][GRASP][RIGHT][CATEGORY:HAND]
[DEFAULT_RELSIZE:80]

C первой строкой все понятно.
Вторая:

[BP:MRUA:right upper arm:STP] - создаем часть тела с идентификатором MRUA (My Right Upper Arm), названием right upper arm и с названием в множественном числе типа единственное число + s, так как правая рука у существа одна (STP, по-видимому, значит same a s the plural).

[CONTYPE:UPPERBODY] - CON - connect, TYPE - токен (тип токена). Я не знаю как это называется, назову просто "часть". Эта часть соединяет часть тела СО ВСЕМИ другими частями тела, в которых присутствует токен [UPPERBODY]. Но аппербоди у нас один, так что разницы между CON и CONTYPE в данном случае никакой. Для тех, кто еще не понял - CON используется для соединения с КОНКРЕТНОЙ частью тела, то есть после двоеточия указываем идентификатор.

[LIMB] - этот токен позволяет использовать эту часть тела в время борьбы (wrestling), как то: захватывать части тела, ломать их, бросать на землю и т. д.

Токен RIGHT указывает, с какой стороны по отношению к существу находится часть тела. Если враг будет атаковать с противоположной (левой) стороны, то у него будет меньше шансов попасть.
[GRASP] - позволяет хватать этой частью тела что-либо, использовать оружие, переносить шмотки и т. д.

body_mymonster

[OBJECT:BODY]

[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]

[BP:MRUA:right upper arm:STP][CONTYPE:UPPERBODY][LIMB][RIGHT][CATEGORY:ARM_UPPER]
[DEFAULT_RELSIZE:200]
[BP:MRLA:right lower arm:STP][CON:MRUA][LIMB][RIGHT][CATEGORY:ARM_LOWER]
[DEFAULT_RELSIZE:200]
[BP:MRH:right hand:STP][CON:MRLA][GRASP][RIGHT][CATEGORY:HAND]
[DEFAULT_RELSIZE:80]

Итак, у нашего урода сейчас есть нематериальное тело без органов и с правой рукой. Вместо левой руки вставим ему голову.


Добавьте следующую часть кода:
[BP:NK:neck:STP][CON:UB][CATEGORY:NECK][LEFT]
[DEFAULT_RELSIZE:300]
[BP:HD:head:STP][CON:NK][HEAD][LEFT][CATEGORY:HEAD]
[DEFAULT_RELSIZE:400]

Часть NK - это шея, торчащая из того места, где должна быть левая рука. К шее прикреплена голова (идентификатор HD), имеющая токен [HEAD]. Этот токен позволяет носить на части тела головные уборы. Если эта часть будет отрублена (вне зависимости, есть там мозг или нет), существо умрёт.
Название: Re: Туториал по созданию собственных существ
Отправлено: Вегаст от 24 Мая 2012, 18:17:26
MebelMen

Ты будешь продолжать?

Н...  Нет?...
 :(
Название: Re: Туториал по созданию собственных существ
Отправлено: PresDan от 04 Июня 2012, 19:32:10
мебель, тебя не разобрали, нет?
Название: Re: Туториал по созданию собственных существ
Отправлено: MebelMan от 27 Июля 2012, 02:18:15
я жив, цк блт  >:(
Название: Re: Туториал по созданию собственных существ
Отправлено: dub от 30 Июля 2012, 17:24:33
этот топик перенести бы в ветку "моддинг", а то устал по форуму ее искать =)
Название: Re: Туториал по созданию собственных существ
Отправлено: Likot от 31 Июля 2012, 18:21:01
Да, тутор весьма занятный, хочется продолжения.
Название: Re: Туториал по созданию собственных существ
Отправлено: BullyFrol от 01 Сентября 2013, 19:03:09
И все? продолжения не будет? Жаль. Нам нужно больше монстров! Всяких разных и ужасных!