Reaction: различия между версиями

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
м (→‎Токен предмета: опечатка)
Строка 86: Строка 86:


==== Токен материала ====
==== Токен материала ====
Material tokens come in several forms — see [[material token|here]] for a full list. For reagents, this will typically be INORGANIC:MATERIAL_ID, whereas products will typically use GET_MATERIAL_FROM_REAGENT:REAGENT_ID:REACTION_PRODUCT_ID.
Токен материала может задаваться несколькими способами - [[material token|здесь]] можно посмотреть на полный список. Для реагентов, как правило, используется INORGANIC:MATERIAL_ID, а для продуктов реакции GET_MATERIAL_FROM_REAGENT:REAGENT_ID:REACTION_PRODUCT_ID.


==== Модификаторы ====
==== Модификаторы ====

Версия от 07:37, 16 августа 2012


Реакции — модульные, редактируемые формулы (рецепты), расходующие конкретные ингредиенты, или реагенты, и использующие их для получения желаемого предмета. Многие реакции жёстко закодированы — строительство кроватей или создание стекла, например, — но некоторые из них свободно редактируются, и очень просто добавить дополнительные реакции.

Announce agreement icon.png Данная статья помечена как не оконченная.
Вы можете прочитать эту статью на английском или помочь проекту её переводом.

Различия реакций между режимами

В Режиме Крепости, реакции всегда задаются для конкретных строений, а так же обязательно должны быть упомянуты в entity-файле описания Цивилизации, для того, чтобы они могли быть использованы данной цивилизацией. Это полезно иметь ввиду, если вы захотите ограничить использование новых предметов и/или материалов (разрешить использовать только древесину, металлы и т.п.) какими-либо цивилизациями -- вы сможете, например, дать возможность вашей новой цивилизации производить звездный металл и тому подобное, что будет доступно только ей.

В Режиме Приключения, реакции свободно доступны к применению для любого героя через комбинацию X - Create. Реагенты для реакции должны находиться в руках или лежать под ногами, но не могут быть использованы, если находятся в рюкзаке или колчане. В версии .10 у реакций в Режиме Приключения существует несколько ошибок, главная из которых заключается в том, что вы не можете использовать жидкие реагенты.

До версии 31.10 результатом реакции мог стать предмет с базовым уровнем качества. Однако, уже в .10 версии у предметов созданных в результате реакций обнаружены модификаторы качества. На определение качества предмета влияет стандартный механизм уровня используемого навыка точно таким же образом, как и для обычных предметов v0.31.21.

Анатомия реакции

Реакции должны находится в файлах с названием вида reaction_x (например reaction_smelter или reaction_other). Вообще говоря, все реакции имеют следующее строение:

  [REACTION:<identifier>]
     [NAME:<name>]
     [BUILDING:<BUILDING NAME>:<BUILDING KEY>]
     [REAGENT:A:150:BAR:NONE:POTASH:NONE]
     [PRODUCT:100:1:BAR:NONE:PEARLASH:NONE][PRODUCT_DIMENSION:150]
     [FUEL] 
     [SKILL:<SKILL TOKEN>]
     [AUTOMATIC]
     [ADVENTURE_MODE_ENABLED]
  • identifier: Внутренний идентификатор реакции.
  • name: Название реакции, которое отображается в Режиме Крепости или Режиме Приключения.
  • building: Внутренний идентификатор постройки и горячая комбинация клавиш для ее выбора (имеет смысл только для Режима Крепости).
  • ...reagents...: Ноль или более реагентов (ингредиентов), которые необходимо собрать, прежде чем реакция станет возможной.
  • ...products...: Ноль или более продуктов, которые возникают в результате реакции.
  • fuel: (не обязательно) Если присутствует, то реакция требует уголь, кокс или мастерскую, работающую на магме.
  • skill: (не обязательно) Навык, который необходим для реакции и тренируется в ее ходе.
  • automatic: (не обязательно) Если присутствует, то реакция стартует автоматически, как только выполнены все требования для ее проведения.
  • adventure mode: (не обязательно) Если присутствует, то реакция становится доступной герою в Режиме Приключения.

Идентификатор реакции

Идентификатор реакции может быть любым, главное, чтобы он не совпадал с другими идентификаторами в raw файлах. Хорошим тоном является использование в идентификаторах ваших реакций однотипные приставки или окончания, образованные от названия вашего мода, чтобы гарантировать что никто более не создаст реакцию с таким же идентификатором и тем самым не сломает игру запустив свой мод совместно с вашим.

Название реакции

Может быть вообще каким угодно и обычно используется, чтобы описать реакцию. Tan a hide, к примеру, название встроенной реакции для производства кож. Название реакции желательно описывать короткой фразой, начинающейся с заглавной буквы, чтобы соответствовать названиям уже встроенных реакций.

Постройка

   [BUILDING:<BUILDING NAME>:<BUILDING KEY>]
  • name: Внутренний идентификатор строений, в меню которого будет доступна реакция.
  • key: Комбинация горячих клавиш для выбора реакции.

Вместо BUILDING NAME подставляется имя строения, в котором будет доступна реакция, а далее указывается горячая комбинация клавиш для добавления этой реакции в очередь заданий строения. Если две и более реакций имеют одинаковую комбинацию клавиш, то одной из них назначается другая клавиша (первая доступная в алфавитном порядке).

Допустимы следующие имена строений: KILN, SMELTER, TANNER, KITCHEN, QUERN, MILLSTONE, STILL, CRAFTSMAN, и все остальные мастерские.

Реагенты

Раздел REAGENT устроен немного сложнее. Это ингредиенты, которые используются в реакции. Их можно задать столько, сколько хотите.

   [REAGENT:<name>:<quantity>:<item token>:<material token>][...modifiers...]
  • name: Название реагента, используемого в реакции.
  • quantity: Количество реагента, необходимое для реакции.
  • item token: Требуемый тип предмета у реагента.
  • material token: Требуемый материал, из которого должен быть изготовлен реагент.
  • ...modifiers...: Ноль или более маркеров, которые уточняют какие реагенты допустимы, когда простого указания типа предмета и материала для данного реагента не достаточно.


Название

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

В большинстве реакций реагенты называются просто как A, B и так далее. Хотя имена вида TOOLSTONE или FLUX тоже будут замечательно работать. В самой реакции есть раздел PRODUCT, который может ссылаться на реагенты по их имени — например, если контейнер B указан как реагент, то продукт может содержать тег PRODUCT_TO_CONTAINER:B, который указывает, что данный продукт надо поместить в контейнер B.

Количество

Количество у разных типов предметов измеряется в разных единицах. Проще говоря, ткани, нити, порошки и глобулы измеряются в единицах, где один пункт представляет собой достаточно мелкую величину, а все остальное измеряется в статических величинах (в штуках и т.п.). Например REAGENT:A:10:THREAD:NONE:NONE:NONE описывает просто крошечную порцию произвольной нити, а REAGENT:A:10:TOY:NONE:NONE:NONE описывает десять штук разных игрушек.

Иногда количество получаемого на выходе из реакции продукта напрямую зависит от количества используемых реагентов; похоже, что количество продукта вычисляется по формуле 150 / количество реагента (с округлением вниз). Т.е. если у вас количество реагента равно 3, то вы получите 50 единиц продукта, а если количество реагента 4, то вы получите 37 единиц продукта (150/4=37.5) [Тут неплохо было бы привести список типов предметов, для которых работает это правило, слитки например и т.п.]

Токен предмета

Токен предмета состоит из двух частей ITEM_TYPE:ITEM_SUBTYPE.

Тип предмета это просто указание разновидности предмета, которая вам необходима; WEAPON, TOY или SKIN_TANNED к примеру. Если нужна более детальная информация по типам, то ее можно посмотреть в полном списке предметов.

В реагентах, кроме этих типов, допустимо так же указывать ANY_RAW_MATERIAL:NONE (разрешается использовать все виды порошков, слитков, камней или глобулТребует проверки) или ANY_CRAFT:NONE (разрешается использовать фигурки, амулеты, скипетры, короны, кольца, серьги или браслеты)

Подтип предмета позволяет уточнить, какой именно предмет вас интересует. Например ITEM_WEAPON_SPEAR или ITEM_TOY_PUZZLEBOX. Некоторые предметы, например колчаны, рюкзаки или куски камня и металла требуют задания только типа предмета. В этом случае в подтипе предмета надо писать NONE. Сами подтипы описаны в raw-файлах и их точные названия можно уточнить, глядя на содержимое этих файлов.

Для обратной совместимости в типе/подтипе предмета реагента разрешается указывать "METAL_ORE:metal_id", что разом задает и тип и материал реагента — такая запись эквивалентна более современной записи BOULDER:NONE:NONE:NONE с модификатором [METAL_ORE:metal_id] (более подробно об этом смотри ниже).

Токен материала

Токен материала может задаваться несколькими способами - здесь можно посмотреть на полный список. Для реагентов, как правило, используется INORGANIC:MATERIAL_ID, а для продуктов реакции GET_MATERIAL_FROM_REAGENT:REAGENT_ID:REACTION_PRODUCT_ID.

Модификаторы

Reagents may also have extra tokens added on afterwards, placed just after the REAGENT tag.

A list of them follows:

Token Meaning
[REACTION_CLASS:X] Detailed below the reaction anatomy section.
[HAS_MATERIAL_REACTION_PRODUCT:X] Detailed below the reaction anatomy section.
[CONTAINS:X] Reagent is a container that holds the specified reagent.
[UNROTTEN] Reagent must not be rotten, mainly for organic materials.
[CONTAINS_LYE] If the reagent is a container, it must contain LYE. No longer used — instead, use one reagent for the LYE itself and another reagent with [CONTAINS:lye_reagent].
[POTASHABLE] Alias for [CONTAINS_LYE].
[NOT_WEB] States that the reagent must have been collected (to distinguish silk thread from webs).
[WEB_ONLY] States that the reagent must be undisturbed (to distinguish silk thread from webs).
[EMPTY] If the reagent is a container, it must be empty.
[NOT_CONTAIN_BARREL_ITEM] If the reagent is a Barrel, it must not contain an item that has to reside in a barrel. Barrel items appear to be lye and milk. Alcohol appears to be covered as part of [EMPTY]. A reaction which places an item in a barrel should probably have both tags.
[BAG] Reagent has to be a bag — that is, made of cloth or leather. Intended to be used with an item type of BOX:NONE, to prevent chests, coffers, and other containers from being used instead.
[GLASS_MATERIAL] Reagent material must have the [IS_GLASS] token. All 3 types of glass have this token hardcoded.
[BUILDMAT] Reagent must be a building material (Stone, Wood, Blocks, Bars?).
[FIRE_BUILD_SAFE] Reagent material's IGNITE_POINT must be set to "NONE".
[MAGMA_BUILD_SAFE] Reagent must be magma-safe. Currently broken — behaves exactly the same as [FIRE_BUILD_SAFE].
[CAN_USE_ARTIFACT] Reagent can be an Artifact. Using [PRESERVE_REAGENT] with this is strongly advised.
[WORTHLESS_STONE_ONLY] Reagent material must be non-economic.
[ANY_PLANT_MATERIAL] Reagent material must be subordinate to a PLANT object.
[ANY_SILK_MATERIAL] Reagent material must have the [SILK] token.
[ANY_YARN_MATERIAL] Reagent material must have the [YARN] token.
[ANY_SOAP_MATERIAL] Reagent material must have the [SOAP] token.
[ANY_LEATHER_MATERIAL] Reagent material must have the [LEATHER] token.
[ANY_BONE_MATERIAL] Reagent material must have the [BONE] token.
[ANY_STRAND_TISSUE] Reagent is made of a tissue having [TISSUE_SHAPE:STRANDS], intended for matching hair and wool. Must be used with [USE_BODY_COMPONENT].
[ANY_SHELL_MATERIAL] Reagent material must have the [SHELL] token.
[ANY_TOOTH_MATERIAL] Reagent material must have the [TOOTH] token.
[ANY_HORN_MATERIAL] Reagent material must have the [HORN] token.
[ANY_PEARL_MATERIAL] Reagent material must have the [PEARL] token.
[USE_BODY_COMPONENT] Reagent must be a body part.
[NO_EDGE_ALLOWED] Reagent must not be sharpened (used for knapping).
[NOT_ENGRAVED] ? (May be used for memorial slabs?)
[NOT_IMPROVED] Reagent has not been decorated.
[DOES_NOT_ABSORB] Reagent material must have [ABSORPTION:0]
[FOOD_STORAGE_CONTAINER] Reagent is either a BARREL or a TOOL with the FOOD_STORAGE use.
[HARD_ITEM_MATERIAL] Material has the [ITEMS_HARD] token.Требует проверки
[NOT_PRESSED] Reagent must not be in the SOLID_PRESSED state.
[METAL_ORE:X] Reagent material must be an ore of the specified metal.
[MIN_DIMENSION:X] ?
[HAS_TOOL_USE:X] Reagent must be a tool with the specific TOOL_USE value. The reagent's item type must be TOOL:NONE for this to make any sense.
[PRESERVE_REAGENT] Reagent is not destroyed, which is the normal effect, at the completion of the reaction. Typically used for containers.
[DOES_NOT_DETERMINE_PRODUCT_AMOUNT] This will make the reagent mass not modify the product amount (useful for metal bars -> other objects)

Generally speaking, if you set a field in a reagent to NONE, the reaction won't discriminate when it comes to that particular field. For example, if you require a BOULDER reagent but leave the material as NONE:NONE, it will grab any available BOULDER-type item regardless of material.

Продукты

Products are the end product of the reaction. A reaction can have as many products as it likes.

Products are almost identical to reagents, except that they do not need to be named, can't have fields undefined, and don't use the quantity field to determine the product size. Instead, the token PRODUCT_DIMENSION:X is tacked on after the PRODUCT token, determining the size of the product.

Products can be produced directly to a container using the [PRODUCT_TO_CONTAINER:<IDENTIFIER>] token, where the IDENTIFIER is the name of a reagent. This requires the reagent to have the PRESERVE_REAGENT token.

Restating this in the above style, we have:

  [PRODUCT:<probability>:<quantity>:<item token>:<material token>][...modifiers...][PRODUCT_DIMENSION:X][PRODUCT_TO_CONTAINER:<IDENTIFIER>]

Вероятность

The percentage chance the product will be produced when the reaction is completed.

Количество

Determines how many of the product will be produced.

Токен предмета

The item token and subtype of the item you produce.

For products, this can also be set to CRAFTS:NONE to produce up to three random craft items. This value cannot be used in any other context.

Токен материала

A material token describing what the product will be made of.

Модификаторы продукта

Zero or more tokens which further clarify the acceptable types when the item type and material types are insufficient to distinguish them.

Token Meaning
[FORCE_EDGE] Product is given a sharp edge. Used for knapping.
[PRODUCT_PASTE] Product is created in the SOLID_PASTE state.
[PRODUCT_PRESSED] Product is created in the SOLID_PRESSED state.
[PRODUCT_DIMENSION:<size>] Specifies the size of the product. A size of 150 is typical for BAR, POWDER_MISC, LIQUID_MISC, and DRINK. A size of 15000 is typical for THREAD, and a size of 10000 is typical for CLOTH.
[PRODUCT_TO_CONTAINER:<id>] Places the product in a container; <id> must be the name of a reagent with the PRESERVE_REAGENT token and a container item type.

Улучшения

Improvements are applied to existing reagents. A reaction can have as many improvements as it likes.

Restating this in the above style, we have:

  [IMPROVEMENT:<probability>:<reagent name>:<improvement type>:<material token>]

Вероятность

The percentage chance the improvement will be applied to the reagent when the reaction is completed.

Название реагента

The name of the reagent that will be improved. In order to be meaningful, this reagent must have [PRESERVE_REAGENT].

Тип улучшения

The following improvement types can be used:

Token Meaning
COVERED Item is encrusted/studded/decorated with <material>.
GLAZED Item is glazed with <material>.
RINGS_HANGING Item is adorned with hanging rings of <material>.
BANDS Item is encircled with bands of <material>.
SPIKES Item menaces with spikes of <material>.

All other item improvement tokens (ART_IMAGE, ITEMSPECIFIC, THREAD, CLOTH, and SEWN_IMAGE) are ignored.

Токен материала

A material token describing what the decoration will be made of.

Другие токены

fuel

The FUEL token means that the reaction requires coke or charcoal to be performed. If the reaction is performed at a Kiln or a Smelter, it can also be performed at a Magma Kiln or Magma Smelter without requiring fuel.

skill

The SKILL token determines what skill the reaction requires and what skill it trains. Multiple skills can be listed but only one will be used.

automatic

The AUTOMATIC token means that the reaction will be queued automatically if the reaction reagents are all present.

adventure mode enabled

The ADVENTURE_MODE_ENABLED token means that this version of the reaction is not used by dwarves at home in a fortress, but rather the wanderers of Adventure Mode. When using this token, it will be allowed for adventurers of any race, without editing Entity files.

Материал продуктов реакции и классы реакций

You can get a certain measure of control over very specific materials using reaction classes and material reaction products — the tokens look like this:

  [REACTION_CLASS:FAT]
  [HAS_MATERIAL_REACTION_PRODUCT:RENDER_MAT]

Reaction classes represent different classes of material — basically, the material of the reagent must have a REACTION_CLASS the same as the one in the reaction.

Material reaction products are similar, but are generally used more for things like different kinds of creature materials than universal materials like stone. This token is how skin can be tanned into leather, which are two separate materials — the skin material has leather as a MATERIAL_REACTION_PRODUCT.

In short, they require the material to have a token such as

  [MATERIAL_REACTION_PRODUCT:X:Y]

...where X is the name of the reaction product that will be referred to in the reaction (RENDER_MAT, in the reaction class example, or TAN_MAT for leather) and Y is a material token indicating the material of the desired product (such as LOCAL_CREATURE_MAT:LEATHER]).

Реакции и генерация мира

There are several things to keep in mind when you're adding reactions to a game that already exists.

  • Most entity changes require a regen, but adding PERMITTED_REACTION tokens for reactions that existed at the time of world generation to the entity file in the save directory do not.
  • Adding reactions to the raws in a save directory requires you to regen the world.
  • You can alter an existing reaction in any way you like without regenning the world, so long as you don't alter the reaction identifier.

Полный список токенов

For the sake of convenience and readability this is a complete compilation of the previously listed reaction tokens in alphabetical order

Token Arguments Description
ADVENTURE_MODE_ENABLED this version of the reaction is not used by dwarves at home in a fortress, but rather the wanderers of Adventure Mode. When using this token, it will be allowed for adventurers of any race, without editing Entity files
ANY_BONE_MATERIAL Reagent material must have the [BONE] token.
ANY_HORN_MATERIAL Reagent material must have the [HORN] token.
ANY_LEATHER_MATERIAL Reagent material must have the [LEATHER] token.
ANY_PEARL_MATERIAL Reagent material must have the [PEARL] token.
ANY_PLANT_MATERIAL Reagent material must be subordinate to a PLANT object.
ANY_SHELL_MATERIAL Reagent material must have the [SHELL] token.
ANY_SILK_MATERIAL Reagent material must have the [SILK] token.
ANY_SOAP_MATERIAL Reagent material must have the [SOAP] token.
ANY_STRAND_TISSUE Reagent is made of a tissue having [TISSUE_SHAPE:STRANDS], intended for matching hair and wool. Must be used with [USE_BODY_COMPONENT].
ANY_TOOTH_MATERIAL Reagent material must have the [TOOTH] token.
ANY_YARN_MATERIAL Reagent material must have the [YARN] token.
AUTOMATIC the reaction will be queued automatically if the reaction reagents are all present.
BAG Reagent has to be a bag. Intended to be used with an item type of BOX, to prevent chests, coffers, and other containers from being used instead.
BUILDING
  • Building name
  • in-building reaction hotkey
Sets the building that the reaction will be performed in, and the button used to queue the reaction once that building's menu is accessed in-game
BUILDMAT Reagent is able to be used to build structures (Stone, Wood, Blocks, Bars?).
CAN_USE_ARTIFACT Reagent can be an Artifact. Using [PRESERVE_REAGENT] with this is strongly advised.
CONTAINS required content Reagent is a container that holds the specified reagent.
CONTAINS_LYE If the reagent is a container, it must contain LYE. No longer used — instead, use one reagent for the LYE itself and another reagent with [CONTAINS:lye_reagent].
DOES_NOT_ABSORB Reagent material must have [ABSORPTION:0]
DOES_NOT_DETERMINE_PRODUCT_AMOUNT Setting this dis-allows the quantity of a reagent (probably first in the list) to determine the output quantity. Used where the input is a stack, e.g. liquids in a barrel.
EMPTY If the reagent is a container, it must be empty.
FIRE_BUILD_SAFE Reagent must be considered fire safe — ie. not wood, and not coal.
FORCE_EDGE Product is given a sharp edge. Used for knapping.
FUEL Requires that the reaction either use up a unit of coal or charcoal or else be performed at a magma workshop
GLASS_MATERIAL Reagent material has [IS_GLASS].
HAS_MATERIAL_REACTION_PRODUCT required reaction product
HAS_TOOL_USE Tool-use token Reagent must be a tool with the specific TOOL_USE value. The reagent's item type must be TOOL:NONE for this to make any sense.
IMPROVEMENT
  • Probability
  • Reagent Name
  • Improvement type
  • Material Token
Improvement types include BANDS, COVERED, GLAZED, RINGS_HANGING, and SPIKES
MAGMA_BUILD_SAFE Currently broken — behaves exactly the same as FIRE_BUILD_SAFE.
METAL_ORE
  • Inorganic material
Reagent material must be an ore of the specified metal
MIN_DIMENSION ?
NAME name defines the name used by the reaction in-game
NO_EDGE_ALLOWED Reagent must not be sharpened (used for knapping).
NOT_CONTAIN_BARREL_ITEM If the reagent is a Barrel, it must not contain an item that has to reside in a barrel. Barrel items appear to be lye and milk. Alcohol appears to be covered as part of [EMPTY]. A reaction which places an item in a barrel should probably have both tags.
NOT_ENGRAVED Reagent must not be engraved?
NOT_IMPROVED Reagent has not been decorated.
NOT_PRESSED Reagent must not be in the SOLID_PRESSED state.
NOT_WEB Reagent must be "collected" — used with THREAD:NONE to exclude webs.
POTASHABLE Alias for CONTAINS_LYE.
PRESERVE_REAGENT Reagent is not destroyed, which is the normal effect, at the completion of the reaction. Typically used for containers.
PRODUCT
  • Probability
  • Quantity
  • Item Token
  • Material Token
Defines one of the products to be outputted by the reaction
PRODUCT_DIMENSION size Specifies the size of the product. A size of 150 is typical for BAR, POWDER_MISC, LIQUID_MISC, and DRINK. A size of 15000 is typical for THREAD, and a size of 10000 is typical for CLOTH.
PRODUCT_PASTE Product is created in the SOLID_PASTE state.
PRODUCT_PRESSED Product is created in the SOLID_PRESSED state.
PRODUCT_TO_CONTAINER Reagent ID Places the product in a container; <id> must be the name of a reagent with the PRESERVE_REAGENT token and a container item type.
REACTION Identifier defines a new reaction
REACTION_CLASS
REAGENT
  • name/id
  • quantity
  • item token (and subtoken)
  • material token (and subtoken)
Requires a given reagent as an input for a reaction
SKILL Skill Token Skill used by the reaction
UNROTTEN Reagent must not be rotten, mainly for organic materials.
USE_BODY_COMPONENT Reagent material must come off a creature's body.
WEB_ONLY Reagent must be "undisturbed" — used with THREAD:NONE to gather webs.
WORTHLESS_STONE_ONLY Reagent is not made of an economic stone.