-
Notifications
You must be signed in to change notification settings - Fork 3
Crucible Package Reference
Crucible packages use the Yaml Specification. You can use YAMLLint to validate your yaml files.
This page lists all available package options provided by Crucible on a default installation. Additional mods or plugins can add additional features.
The name of your mod. This name can be displayed to the user, so choose something human-friendly.
The version of your mod.
Version numbers are interpreted with the Semver spec. A good version number should be 3 numbers separated by dots. For example: 5.7.3
.
It is important to stick to this method of versioning, so that other mods can properly mark your mod as a dependency.
When updating your mod, choose a number to increment based on your changes.
For changes that are bug fixes only, do NOT add new features, and do NOT break backwards compatibility, increment the last number:
5.7.3
=> 5.7.4
For changes that add new features, but do NOT break backwards compatibility, increment the second number, and zero out the patch:
5.7.3
=> 5.8.0
For changes that make the mod incompatible with previous versions (such as removing ingredients or maps), increment the first number and zero out the rest:
5.7.3
=> 6.0.0
The dependencies section can be used to indicate that your mod requires a BepInEx plugin to function.
The dependencies key takes an array of dependency objects, each specifying a dependency.
dependencies:
- bepInExGUID: "RoboPhredDev.PotionCraft.Crucible.Ingredients"
Currently, taking a dependency on another Crucible Package, and specifying required versions, is not supported. These features will be added in the future.
Supplied by plugin: RoboPhredDev.PotionCraft.Crucible.Ingredients
The ingredients
property takes an array of Ingredient Items
ingredients:
- id: my_ingredient
# ...ingredient properties
An ingredient item defines a custom ingredient to add to the game.
All properties are supplied by the net.RoboPhredDev.PotionCraft.Crucible.Ingredients
plugin unless otherwise noted.
required
Specifies the internal name this ingredient will go by. It can be used by other mods to reference your ingredient.
required
The name of your ingredient. This is the name that is displayed to the user when using your ingredient.
This can take two forms.
By setting it to a text value, you can specify the name in all languages:
name: My Ingredient
Or, you can set it to a map of names in different languages:
name:
en: My Ingredient
es: Mi ingrediente
A description of your ingredient. This is displayed in the tooltip when inspecting the ingredient.
This value can be translated similar to name.
The ingredient id of a base game ingredient to copy from. The ingredient will be cloned from the base game ingredient, meaning any option you do not specify will be copied from this ingredient.
Note: Due to technical reasons, ingredientListIcon
is unable to be copied.
Note that this is an ingredient id, not a name. The internal name of the ingredient must be used, which is often not the same as the name the user sees during normal gameplay.
For base game ingredients, the following ids are available:
BloodRuby
Bloodthorn
Boombloom
CloudCrystal
Coldleaf
DragonPepper
DreamBeet
DruidsRosemary
DryadsSaddle
EarthPyrite
EvergreenFern
FableBismuth
Featherbloom
Firebell
FireCitrine
Flameweed
Fluffbloom
FoggyParasol
FrostSapphire
GoblinMushroom
Goldthorn
Goodberry
GraspingRoot
GraveTruffle
HairyBanana
HealersHeather
Icefruit
KrakenMushroom
Lavaroot
LifeCrystal
Lifeleaf
LustMushroom
MadMushroom
Mageberry
MagmaMorel
Marshroom
MossShroom
Mudshroom
PhantomSkirt
PlagueStibnite
Poopshroom
RainbowCap
ShadowChanterelle
Spellbloom
StinkMushroom
SulphurShelf
Tangleweed
Terraria
TerrorBud
Thornstick
ThunderThistle
Waterbloom
Watercap
Weirdshroom
Whirlweed
Windbloom
WitchMushroom
For Crucible-added ingredients, this the id will be <mod_id>.<ingredient_id>
.
If left unspecified, "Waterbloom" will be used as the default.
The image to display in the inventory for your ingredient. This should be the name of a png file inside your mod folder. For best results, the image should be 120px square with a transparent background. Larger or smaller images will not be scaled.
If unspecified, the inventory image of the ingredient specified by inheritFrom
is used.
The image to be displayed when this ingredient is used in a saved recipe. The image appears on the right hand side of the recipe book when viewing a recipe that uses this ingredient. For best results, this image should be around 70px square with a transparent background, the image should have a sepia filter, and the image content itself should be at most 35px square.
If unspecified, the recipe step image of the ingredient specified by inheritFrom
is used.
The image to be used when this ingredient is being displayed in ingredient lists. Such lists are the potion crafting panel in the cauldron room, the ingredients list in a saved recipe, and when viewing the tooltip of a brewed potion. For best results, this image should be trimmed so that the image is exactly as large as the image content, but with a 10% buffer of empty space above and below the image.
If unspecified, the icon will be a red square.
Note: For technical reasons, the icons of existing ingredients cannot be copied to new ingredients, so the icon of the ingredient specified by inheritFrom
cannot be copied over.
The base price of this ingredient. Merchants will use this to calculate the sell and buy price of the ingredient.
If unspecified, the price of the ingredient specified by inheritFrom
is used.
This property controls the path that the ingredient will apply to the player's potion when used.
This property uses the SVG Path format, and supports the H/h
(horizontal line), V/v
(vertical line), L/l
(line), and C/c
(cubic bezier curve) commands.
Paths can be easily created visually using vector art programs like Inkscape or Adobe Illustrator, or web tools like SvgPathEditor. Keep in mind the limited command set though, as these tools occasionally try to use other unsupported commands.
Note that paths cannot start from anywhere other than the current potion bottle location, and they cannot teleport without leaving a trail. Because of these limitations, the M/m
move commands act as L/l
line commands.
The path command can take two forms:
# Path specified as text
path: "L 1,3"
or
# Path specifies with transforms
path:
scaleX: 2
scaleY: 3
data: "L 1,3"
The second form allows you to apply scale transformations to your path. This can be useful if you are porting a path previously created for the Pantry custom ingredients mod, which used an upside-down coordinate system. Setting scaleY
to -1 will let these paths be used without modification.
This value specifies how much of the path is available by default, and how much must be unlocked by grinding the ingredient with the morter. The value must be larger than 0, and less than 1. A value of 0.1 will make 10% of the path be available pre-ground, a value of 0.5 will make 50% of the path be available, and so on.
Note that you cannot use 1 to make an ingredient that does not ever need to be ground, due to the way PotionCraft interprets ingredient paths. You can instead use a value very close to 1, like 0.999
.
Specifies the color of the ground substance that appears when grinding this ingredient.
This can be a color code in a #rrggbb
hexadecimal format, or a map of r
, g
and b
values between 0 and 1.
This specifies whether the ingredient makes the potion perform a "teleport" effect, as seen on the crystal ingredients in the base game.
Teleportation effect ingredients will follow the path automatically and without coming into contact with any bones along the path.
This property takes an array of objects describing the items that appear when the player drags this ingredient out into the world.
Each stack item has the following properties:
A file path (relative to this mod's folder) of the sprite to render for this stack item.
SVG path data describing the shape of the hitbox for this item when the item collides against the world (shelves, tables, ground)
This property uses the SVG Path format, and supports the M/m
(move) H/h
(horizontal line), V/v
(vertical line), and L/l
(line) commands.
Paths can be easily created visually using vector art programs like Inkscape or Adobe Illustrator, or web tools like SvgPathEditor. Keep in mind the limited command set though, as these tools occasionally try to use other unsupported commands.
Note that collision currently only supports making the figure out of straight lines, so the C/c
bezier curve commands do not function here.
The value of this property can take two forms: A svg path string, or an object containing the path and scale data:
collision: "M 5,5 L2,3 L3,2"
or
collision:
data: "M 5,5 L2,3 L3,2"
scaleX: 0.5
scaleY: 0.5
SVG path data describing the collision of this item against other stack items, particularly when inside the mortar.
In general, this collision shape should be smaller than the sprite, to allow the stack items to compress up when placed into the mortar and ground.
Otherwise, this option has the same behavior characteristics as collision
above.
A vector describing the position of this item when the entire stack of items is being held by the player. When making ingredients that contain multiple items, this is used to position each item relative to the mouse.
It can take the form of a comma seperated string, or an object with x and y values:
positionInStack: 2,3
or
positionInStack:
x: 2
y: 3
The angle this item takes when the entire stack of items is being held by the player.
This takes a number that represents the value in degrees.
This takes an array of more stack items. These items will replace the current item when the ingredient is ground in the morter.
Note that you have the option of specifying one or more items. Specifying one item is useful when setting up progressively ground sprites for a single item. Specifying multiple items can be useful when making items that need to split or break into multiple fragments.
This property is recursive, and each object in the array supports all stackItem properties.
If set to true, the stack items will behave as solid objects when being ground in the mortar. Solid items must be crushed with some force, while non solid items smoothly grind as the pestle comes in contact with them.
If set to a value greater than 0 this ingredient will only appear in trader's inventories once a certain closeness level has been reached with that trader.
If left unspecified, a value of 0 will be used meaning this ingredient can show up at any level of closeness.
Supplied by plugin: RoboPhredDev.PotionCraft.Crucible.NPCs
Specifies one or more npc traders to sell this ingredient.
soldBy:
- npcTemplateName: "HerbalistNpc 1"
minCount: 2
maxCount: 4
chanceToAppear: 0.4
- npcTag:
- SellsOrganic
minCount: 2
maxCount: 4
chanceToAppear: 0.4
The npc to sell the ingredient can be specified in one of two ways: The npc template can be specified directly, or a 'npc tag' can be specified.
NPC Tags are the recommended way to set up ingredient sales, as they allow your ingredient to be sold by npcs added by other mods, or any future npcs the game may add during development. Each tag corresponds to an attribute an npc may have. Crucible comes with several tags automatically applied to the base game npcs, and mods may define their own custom tags.
The tags that Crucible configures by default are:
SellsHerbs
SellsMushrooms
SellsCrystals
SellsAlchemyMachine
SellsOrganic
SellsInorganic
SellsIngredients
IsHerbalist
IsMushroomer
IsDwarfMiner
IsAlchemist
IsTravelingMerchant
IsGroundhogDayNpc
For example, to make your ingredient be sold by the alchemist after the infinite repeating day has been reached, you can specify:
soldBy:
npcTag:
- IsAlchemist
- IsGroundhogDayNpc
Or, if you want your ingredient to be sold by anyone who sells crystals:
soldBy:
npcTag: SellsCrystals
PotionCraft uses a complex template system to generate its npcs. If you know the name of the specific template of the npc trader you want to sell your ingredient, you can specify it with npcTemplateName
.
The minimum number of items this npc will stock.
If the npc decides to stock the item (see chanceToAppear
), then the number of items they will have will be between this and maxCount
.
The maximum number of items this npc will stock.
If the npc decides to stock the item (see chanceToAppear
), then the number of items they will have will be minCount
and this.
The percent chance of this item appearing when the npc trader visits. This is in a decimal form; 0.5 is 50%, 1 is 100%.
If set to a value greater than 0 this ingredient will only appear in the traders' inventories which are specified by this soldBy node once a certain closeness level has been reached with that trader.
If left unspecified, the default closenessRequirement for the ingredient will be used.
Supplied by plugin: RoboPhredDev.PotionCraft.Crucible.NPCs
The customers property takes an array of Customer Items and the traders property takes an array of Trader Items
customers:
- id: my_customer
# ...customer properties
traders:
- id: my_trader
# ...trader properties
An customer item defines a custom customer to add to the game.
All properties are supplied by the net.RoboPhredDev.PotionCraft.Crucible.NPC plugin unless otherwise noted.
required
Specifies the internal name this customer template will go by. It can be used by other mods to reference your customer.
The customer template name of a base game customer to copy from. The customer will be cloned from the base game customer, meaning any option you do not specify will be copied from this customer.
Your customer will be created from a story customer with unique quests.
For base game story customers, the following template names are available:
Brewer
Fisherman
Guard
MonsterHunter
Witch
For Crucible-added customers, the template name will be <mod_id>.<customer_id>
.
If left unspecified, "Brewer" will be used as the default.
1-100
Specifies the maximum closeness level that can be acheived with this customer. Each time a player succesfully complete's a customer's quest the closeness level of the customer will rise. Once the maximum closeness is reached this customer will stop spawning.
Effectivly this value will specify the total number of succesful visits for the customer.
Currently the only NPCs which can spawn indefinitely are traders and faction based customers.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
0-10
Specifies the chance for this customer to appear on any given day. This can be any number greater than 0 but the default for typical plot npcs is 1. This number only comes into play if there are multiple plot/modded customers off cooldown and able to spawn on the same day.
If left unspecified a value of 1 will be used as the default. This will result in a typical spawn rate.
Optional
1-infinite
Specifies the lower bound used when randomizing a customer's cooldown after a visit. If this is set to the same value as maximumDaysOfCooldown the cooldown will be non-random.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
1-infinite
Specifies the upper bound used when randomizing a customer's cooldown after a visit. If this is set to the same value as minimumDaysOfCooldown the cooldown will be non-random.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
1-infinite
Specifies the upper bound used when randomizing a customer's cooldown after a visit. If this is set to the same value as minimumDaysOfCooldown the cooldown will be non-random.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
Bad, Normal or Good
Specifies the default visual mood of the customer.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
Male or Female
Specifies the gender of the customer. This value is currently used to pick between reactions in some cases.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
A collection of properties specifing the haggling theme to use at each haggling dificulty level.
Available themes to choose from are:
Alchemy
Alcohol
Assassination
Emotions
Fishing
Food
Herbs
Magic
Minerals
Monsters
Mushrooms
Music
Reading
Terrains
Wealth
Weapons
Weather
If left unspecified, this value will be inherited from the inheritFrom customer.
Required
Specifies the theme used for the very easy haggle difficulty.
Required
Specifies the theme used for the easy haggle difficulty.
Required
Specifies the theme used for the medium haggle difficulty.
Required
Specifies the theme used for the hardhaggle difficulty.
Required
Specifies the theme used for the very hard haggle difficulty.
A collection of properties controlling the appearance of the customer.
If unspecified, the crucible customer will appear exactly the same as the inherited from customer.
A collection of properties controlling the appearance of the customer's head shape.
If unspecified, the head shape of the customer specified by inheritFrom is used.
The head shape mask sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The head background sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The head contour sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The scratches background sprite. This should be the name of a png file inside your mod folder. This image should contain the "scratches" which will be overlayed on the head background.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the customer's hair.
If unspecified, the hair of the customer specified by inheritFrom is used.
The frontLeft sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The frontRight sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The back sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the customer's face.
If unspecified, the face of the customer specified by inheritFrom is used.
The positiveReaction sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The negativeReaction sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The idle sprite. This should be the name of a png file inside your mod folder.
If unspecified, not sure...
The anger1 sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The anger2 sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The happy1 sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the customer's eyes.
If unspecified, the eyes of the customer specified by inheritFrom is used.
The leftEye sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The rightEye sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the customer's beard.
If unspecified, the beard of the customer specified by inheritFrom is used.
The beard background sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The beard sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The scratches background sprite. This should be the name of a png file inside your mod folder. This image should contain the "scratches" which will be overlayed on the beard background.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the customer's bace.
If unspecified, the bace of the customer specified by inheritFrom is used.
The torso sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The leftArm sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The rightArm sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
This property takes an array of objects describing each unique quest.
required
Ranges from 0 to infinity.
The closeness level required for this quest to appear. Each time a player succesfully complete's a customer's quest the closeness level of the customer will rise. This quest (and corresponding dialogue tree) will only appear once a certain closeness level has been reached.
It is possible to specify a quest/dialogue for every level of closeness or any subset of the total closeness levels. For example if you wanted a customer to have three quests which form a story and then have the customer continue coming in with a repeating quest you could define four quests ranging from closeness level 0-3. You would also need to set a maximumCloseness greater than 3 to allow for more than 3 visits.
required
A collection of properties specifying the non-dialogue details of a quest.
Specifies the internal name this quest will go by. This may be useful for debugging your mod in game.
If unspecified an id will be generated for you.
This property specifies the amount of reputation gained/lost on completion of the quest.
If unspecified the corresponding quest from the customer specified by inheritFrom will be used.
A collection of effect names which can satisfy the quest. This should be the internal name used for this effect. The full list to choose from is here:
Healing
Poison
Fire
Frost
Explosion
WildGrowth
Strength
Dexterity
Swiftness
Lightning
Mana
StoneSkin
Sleep
Light
Charm
Slowness
Rage
MagicalVision
Acid
Libido
Invisibility
Levitation
Necromancy
PoisonProtection
LightningProtection
FireProtection
FrostProtection
Gluing
Slipperiness
Stench
AcidProtection
AntiMagic
Shrinking
Enlargement
Rejuvenation
Inspiration
Fragrance
Fear
Hallucinations
Luck
Curse
For Crucible-added effects, the template name will be <mod_id>.<effect_name>
.
If left unspecified, the effects from the corresponding quest from the customer specified by inheritFrom will be used.
This quest text will be used on subsequent visits if the quest is left uncompleted.
This can take two forms.
By setting it to a text value, you can specify the text in all languages:
subsequentVisitsQuestText: Hey, I still need that potion.
Or, you can set it to a map of text in different languages:
subsequentVisitsQuestText:
en: Hey, I still need that potion.
es: Oye, todavía necesito esa poción.
This is a property specifying whether or not random mandatory requirements will be generated.
Setting this to false will prevent mandatory requirements from being generated for this customer (outside of your manually specified mandatory requirements).
Setting this to true will compeltely override any mandatory requirements you specify for this quest and allow random mandatory requirements to be generated like for any other quest.
If left unspecified, the value will be set to false.
This is a property specifying whether or not random optional requirements will be generated.
Setting this to false will prevent optional requirements from being generated for this customer (outside of your manually specified optional requirements).
Setting this to true will compeltely override any optional requirements you specify for this quest and allow random optional requirements to be generated like for any other quest.
If left unspecified, the value will be set to false.
This property takes an array of objects describing each mandatory potion requirement.
If left unspecified, mandatory requirements may still be generated depending on how generateRandomMandatoryRequirements is set.
For details on how to specify requirements see: Quest Requirements
This property takes an array of objects describing each optional potion requirement.
If left unspecified, optional requirements may still be generated depending on how generateRandomOptionalRequirements is set.
For details on how to specify requirements see: Quest Requirements
Each requirement is specified using seperate fields. Some requirements will only require a single field to be specified and some may require two fields to be specified.
If set to true this property will specify an additional effects requirement.
Example:
optionalRequirements:
- additionalEffect: true
If set to true this property will specify a requirement that the potion contain a level 3 effect which satisfies the quest.
Example:
optionalRequirements:
- onlyStrongPotions: true
If set to true this property will specify a requirement that the potion contain a level 1 effect which satisfies the quest.
Example:
optionalRequirements:
- onlyWeakPotions: true
Value range: 1-3 If specified this property will specify a requirement that a potion have only n types of different ingredients where n is a value between 1 and 3.
Example:
optionalRequirements:
- maximumIngredients: 3
If specified this property will specify a requirement that a potion not contain a specific ingredient. The value of this property should be set to a valid ingredient id. You can find a full list of valid ingredient ids (and how to reference mod ingredient ids) here.
Example:
optionalRequirements:
- ingredientNotAllowed: Waterbloom
If specified this property will specify a requirement that a potion contain at least one of a specific ingredient. The value of this property should be set to a valid ingredient id. You can find a full list of valid ingredient ids (and how to reference mod ingredient ids) here.
Example:
optionalRequirements:
- needAtleastOneIngredient: Waterbloom
If specified this property will specify a requirement that at least half of the potion's ingredients are a specific ingredient. The value of this property should be set to a valid ingredient id. You can find a full list of valid ingredient ids (and how to reference mod ingredient ids) here.
Example:
optionalRequirements:
- mainIngredient: Waterbloom
required
A collection of properties specifying the full dialogue tree for the customer interaction at this closeness level.
Dialogue is specified in a tree format using dialogue nodes and answers. Dialogue nodes specify some sort of dialogue and a list of answers the player can choose from. Answer nodes specify the text of the answer as well as what happens when that answer is chosen. This can be done by specifying another dialogue node with the nextNode property or by marking it as a isConversationEndAnswer. If neither property is set the answer will simply return to the previous dialogue node.
required A property defining the customer's dialogue text for this dialogue node.
This can take two forms.
By setting it to a text value, you can specify the text in all languages:
dialogueText: Hey, I need a potion.
Or, you can set it to a map of text in different languages:
dialogueText:
en: Hey, I need a potion.
es: Oye, necesito una poción.
optional
This is a property specifying whether or not this dialogue node is a quest node. Only one quest node can be specified per dialogue tree.
Setting this to true will treat this dialogue as a quest node. This will mean that only a single answer will be allowed and the scales will be available for a potion to be offered to the customer.
If left unspecified, the first dialogue node will be selected as the quest node. When constructing customers this field is purely optional and only useful if you want to lead the conversation with dialogue instead of starting right off with the quest.
optional
1-4
A collection of properties specifying all possible player responses for this dialogue node.
If left unspecified, a back button will be created for you in cases where a back button is necessary.
Answer nodes specify the text of the answer as well as what happens when that answer is chosen. This can be done by specifying another dialogue node with the nextNode property or by marking it as a isConversationEndAnswer or isBackToBeginningAnswer. If none of these properties are set the answer will simply return to the previous dialogue node.
Only a single answer node may be specified for quest nodes (the first dialogue node by default). On non-quest nodes up to 4 answers can be specified. If none of the 4 answers are back buttons and there is no way back by exploring the dialogue tree the last answer will be removed and a back button will replace it to prevent soft locks.
Note: you do not need to include answer nodes for the default answers for quest nodes. These include:
Give potion Start haggle End dialogue
required
A property defining the response text for this answer node.
This can take two forms.
By setting it to a text value, you can specify the text in all languages:
answerText: Why do you need this potion?
Or, you can set it to a map of text in different languages:
answerText:
en: Why do you need this potion?
es: ¿Por qué necesitas esta poción?
Optional
A collection of properties which specify a dialogue node. For a full description of the available properties see dialogue
If unspecified this answer will be treated as a back button, going back to the previous node unless isConversationEndAnswer or isBackToBeginningAnswer is specified.
Optional
This is a property specifying whether or not this answer node will end the conversation when chosen by the player.
Setting this to true will treat this answer as an end of conversation node.
If left unspecified, the value will be set to false.
Optional
This is a property specifying whether or not this answer node will work as a back button which returns to the first dialogue node.
Setting this to true will treat this answer as a back to beginning node meaning when this answer is selected the player will be returned to initial dialogue node.
If left unspecified, the value will be set to false.
An trader item defines a custom trader to add to the game.
All properties are supplied by the net.RoboPhredDev.PotionCraft.Crucible.NPC plugin unless otherwise noted.
required
Specifies the internal name this trader template will go by. It can be used by other mods to reference your trader.
The trader template name of a base game trader to copy from. The trader will be cloned from the base game trader, meaning any option you do not specify will be copied from this trader.
For base game traders, the following template names are available:
Herbalist
Mushroomer
Dwarf
WMerchant
Alchemist
For Crucible-added traders, the template name will be <mod_id>.<trader_id>
.
If left unspecified, "Herbalist" will be used as the default.
Optional
-100-100
Specifies the lower bound used when determining if a trader can spawn based on karma (reputation).
If left unspecified, this value will be inherited from the inheritFrom trader.
Optional
-100-100
Specifies the upper bound used when determining if a trader can spawn based on karma (reputation).
If left unspecified, this value will be inherited from the inheritFrom trader.
Optional
1-10
Specifies the chapter at which this trader unlocks.
If left unspecified, this value will be inherited from the inheritFrom trader.
Optional
1-infinite
Specifies the lower bound used when randomizing a customer's cooldown after a visit. If this is set to the same value as maximumDaysOfCooldown the cooldown will be non-random.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
1-infinite
Specifies the upper bound used when randomizing a customer's cooldown after a visit. If this is set to the same value as minimumDaysOfCooldown the cooldown will be non-random.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
1-infinite
Specifies the upper bound used when randomizing a customer's cooldown after a visit. If this is set to the same value as minimumDaysOfCooldown the cooldown will be non-random.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
1-100
Specifies the maximum closeness level that can be acheived with this trader. Each time a player succesfully complete's a trader's quest (or buys/sells when there is no quest) the closeness level of the trader will rise. Raising this can be useful if you want to create more quests or have more visits between quests.
If left unspecified, this value will be inherited from the inheritFrom customer.
Optional
0-100
Specifies the time of day the trader will arrive. A value of 0 will cause the trader to appear at the start of the day and a value of 100 will cause the trader to come at the end of the day.
If left unspecified, this value will be inherited from the inheritFrom trader.
Optional
1-infinite
Specifies the amount of gold the trader will have on them when they visit.
If left unspecified, this value will be inherited from the inheritFrom trader. By default this value is 1000.
Optional
Bad, Normal or Good
Specifies the default visual mood of the trader.
If left unspecified, this value will be inherited from the inheritFrom trader.
Optional
Male or Female
Specifies the gender of the trader. This value is currently used to pick between reactions in some cases.
If left unspecified, this value will be inherited from the inheritFrom trader.
optional
A collection of internal crucible tags. Custom ingredients can use these tags to add their ingredients to your custom trader.
These are the current tags which are automatically created for base game traders. If any of these tags are added to your trader then custom ingredients which target one of those tags will also be applied to your trader's inventory.
SellsHerbs
SellsMushrooms
SellsCrystals
SellsAlchemyMachine
SellsOrganic
SellsInorganic
SellsIngredients
IsHerbalist
IsMushroomer
IsDwarfMiner
IsAlchemist
IsTravelingMerchant
If left unspecified, the trader will have no tags.
A collection of objects which specify the items the trader will sell at each level of closeness.
Required
This is the in game name of the item to be sold. This can be the name of any inventory item which includes ingredients, salts, and tradable upgrades (i.e alchemy machine parts and recipe book pages).
You can find a full list of valid ingredient ids (and how to reference mod ingredient ids) here.
This is a full list of the other available inventory item names currently available.
Life Salt
Moon Salt
Philosopher's Salt
Sun Salt
Void Salt
Alchemy Machine Upgrade 1
Alchemy Machine Upgrade 2
Alchemy Machine Upgrade 3
LifeSalt Recipe Upgrade
MoonSalt Recipe Upgrade
PhilosophersSalt Recipe Upgrade
SunSalt Recipe Upgrade
VoidSalt Recipe Upgrade
Oil Upgrade
Wine Upgrade
Recipe Book Slots Upgrade
Required 0-maxCloseness
This property specifies the closeness level required for this item to show up in the trader's inventory. It should range from 0 to the maximum trader closeness specified using the maxCloseness property.
Required 0-1
This property specifies the chance for this item to appear in the trader's inventory. This is a number between 0 and 1 where 0.5 is equivalent to 50%
Required 1-infinity
This property specifies the minimum number of an item which can appear in a trader's inventory. If this value is set to the same value as maxCount there will be no randomness to the count of the item if it spawns in the trader's inventory.
Required 1-infinity
This property specifies the maximum number of an item which can appear in a trader's inventory. If this value is set to the same value as minCount there will be no randomness to the count of the item if it spawns in the trader's inventory.
Optional
A collection of properties specifing the haggling theme to use at each haggling dificulty level.
Available themes to choose from are:
Alchemy
Alcohol
Assassination
Emotions
Fishing
Food
Herbs
Magic
Minerals
Monsters
Mushrooms
Music
Reading
Terrains
Wealth
Weapons
Weather
If left unspecified, this value will be inherited from the inheritFrom customer.
Required
Specifies the theme used for the very easy haggle difficulty.
Required
Specifies the theme used for the easy haggle difficulty.
Required
Specifies the theme used for the medium haggle difficulty.
Required
Specifies the theme used for the hardhaggle difficulty.
Required
Specifies the theme used for the very hard haggle difficulty.
A collection of properties controlling the appearance of the trader.
If unspecified, the crucible trader will appear exactly the same as the inherited from trader.
A collection of properties controlling the appearance of the trader's head shape.
If unspecified, the head shape of the trader specified by inheritFrom is used.
The head shape mask sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The head background sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The head contour sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The scratches background sprite. This should be the name of a png file inside your mod folder. This image should contain the "scratches" which will be overlayed on the head background.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the trader's hair.
If unspecified, the hair of the trader specified by inheritFrom is used.
The frontLeft sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The frontRight sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The back sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the customer's face.
If unspecified, the face of the customer specified by inheritFrom is used.
The positiveReaction sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The negativeReaction sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The idle sprite. This should be the name of a png file inside your mod folder.
If unspecified, not sure...
The anger1 sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The anger2 sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The happy1 sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the trader's eyes.
If unspecified, the eyes of the trader specified by inheritFrom is used.
The leftEye sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The rightEye sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the trader's beard.
If unspecified, the beard of the trader specified by inheritFrom is used.
The beard background sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The beard sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The scratches background sprite. This should be the name of a png file inside your mod folder. This image should contain the "scratches" which will be overlayed on the beard background.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A collection of properties controlling the appearance of the trader's bace.
If unspecified, the bace of the trader specified by inheritFrom is used.
The torso sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The leftArm sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The rightArm sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
This property takes an array of objects describing each unique quest.
required
Ranges from 0 to infinity.
The closeness level required for this quest to appear. Each time a player succesfully complete's a trader's quest or (buy/sell when there is no quest) the closeness level of the trader will rise. This quest (and corresponding dialogue tree) will only appear once a certain closeness level has been reached.
It is possible to specify a quest/dialogue for every level of closeness or any subset of the total closeness levels.
required
A collection of properties specifying the non-dialogue details of a quest.
Specifies the internal name this quest will go by. This may be useful for debugging your mod in game.
If unspecified an id will be generated for you.
This property specifies the amount of reputation gained/lost on completion of the quest.
If unspecified the corresponding quest from the customer specified by inheritFrom will be used.
A collection of effect names which can satisfy the quest. This should be the internal name used for this effect. The full list to choose from is here:
Healing
Poison
Fire
Frost
Explosion
WildGrowth
Strength
Dexterity
Swiftness
Lightning
Mana
StoneSkin
Sleep
Light
Charm
Slowness
Rage
MagicalVision
Acid
Libido
Invisibility
Levitation
Necromancy
PoisonProtection
LightningProtection
FireProtection
FrostProtection
Gluing
Slipperiness
Stench
AcidProtection
AntiMagic
Shrinking
Enlargement
Rejuvenation
Inspiration
Fragrance
Fear
Hallucinations
Luck
Curse
For Crucible-added effects, the template name will be <mod_id>.<effect_name>
.
If left unspecified, the effects from the corresponding quest from the customer specified by inheritFrom will be used.
This quest text will be used on subsequent visits if the quest is left uncompleted.
This can take two forms.
By setting it to a text value, you can specify the text in all languages:
subsequentVisitsQuestText: Hey, I still need that potion.
Or, you can set it to a map of text in different languages:
subsequentVisitsQuestText:
en: Hey, I still need that potion.
es: Oye, todavía necesito esa poción.
This is a property specifying whether or not random mandatory requirements will be generated.
Setting this to false will prevent mandatory requirements from being generated for this trader (outside of your manually specified mandatory requirements).
Setting this to true will compeltely override any mandatory requirements you specify for this quest and allow random mandatory requirements to be generated like for any other quest.
If left unspecified, the value will be set to false.
This is a property specifying whether or not random optional requirements will be generated.
Setting this to false will prevent optional requirements from being generated for this trader (outside of your manually specified optional requirements).
Setting this to true will compeltely override any optional requirements you specify for this quest and allow random optional requirements to be generated like for any other quest.
If left unspecified, the value will be set to false.
This property takes an array of objects describing each mandatory potion requirement.
If left unspecified, mandatory requirements may still be generated depending on how generateRandomMandatoryRequirements is set.
For details on how to specify requirements see: Quest Requirements
This property takes an array of objects describing each optional potion requirement.
If left unspecified, optional requirements may still be generated depending on how generateRandomOptionalRequirements is set.
For details on how to specify requirements see: Quest Requirements
Each requirement is specified using seperate fields. Some requirements will only require a single field to be specified and some may require two fields to be specified.
If set to true this property will specify an additional effects requirement.
Example:
optionalRequirements:
- additionalEffect: true
If set to true this property will specify a requirement that the potion contain a level 3 effect which satisfies the quest.
Example:
optionalRequirements:
- onlyStrongPotions: true
If set to true this property will specify a requirement that the potion contain a level 1 effect which satisfies the quest.
Example:
optionalRequirements:
- onlyWeakPotions: true
Value range: 1-3 If specified this property will specify a requirement that a potion have only n types of different ingredients where n is a value between 1 and 3.
Example:
optionalRequirements:
- maximumIngredients: 3
If specified this property will specify a requirement that a potion not contain a specific ingredient. The value of this property should be set to a valid ingredient id. You can find a full list of valid ingredient ids (and how to reference mod ingredient ids) here.
Example:
optionalRequirements:
- ingredientNotAllowed: Waterbloom
If specified this property will specify a requirement that a potion contain at least one of a specific ingredient. The value of this property should be set to a valid ingredient id. You can find a full list of valid ingredient ids (and how to reference mod ingredient ids) here.
Example:
optionalRequirements:
- needAtleastOneIngredient: Waterbloom
If specified this property will specify a requirement that at least half of the potion's ingredients are a specific ingredient. The value of this property should be set to a valid ingredient id. You can find a full list of valid ingredient ids (and how to reference mod ingredient ids) here.
Example:
optionalRequirements:
- mainIngredient: Waterbloom
required
A collection of properties specifying the full dialogue tree for the trader interaction at this closeness level.
Dialogue is specified in a tree format using dialogue nodes and answers. Dialogue nodes specify some sort of dialogue and a list of answers the player can choose from. Answer nodes specify the text of the answer as well as what happens when that answer is chosen. This can be done by specifying another dialogue node with the nextNode property or by marking it as a isConversationEndAnswer. If neither property is set the answer will simply return to the previous dialogue node.
required A property defining the customer's dialogue text for this dialogue node.
This can take two forms.
By setting it to a text value, you can specify the text in all languages:
dialogueText: Hey, I need a potion.
Or, you can set it to a map of text in different languages:
dialogueText:
en: Hey, I need a potion.
es: Oye, necesito una poción.
optional
This is a property specifying whether or not this dialogue node is a quest node. Only one quest node can be specified per dialogue tree.
Setting this to true will treat this dialogue as a quest node. This will mean that only a single answer will be allowed and the scales will be available for a potion to be offered to the trader.
When constructing traders this field will be ignored for the first dialogue node. Traders must start with a regular dialogue node.
If left unspecified for all dialogue nodes, the second dialogue node will be selected as the quest node.
optional
1-4
A collection of properties specifying all possible player responses for this dialogue node.
If left unspecified, a back button will be created for you in cases where a back button is necessary.
Answer nodes specify the text of the answer as well as what happens when that answer is chosen. This can be done by specifying another dialogue node with the nextNode property or by marking it as a isConversationEndAnswer or isBackToBeginningAnswer. If none of these properties are set the answer will simply return to the previous dialogue node.
Only a single answer node may be specified for a quest dialogue node. On non-quest nodes up to 4 answers can be specified. If none of the 4 answers are back buttons and there is no way back by exploring the dialogue tree the last answer will be removed and a back button will replace it to prevent soft locks.
Note: you do not need to include answer nodes for the default answers for quest nodes. These include:
Give potion Start haggle End dialogue
required
A property defining the response text for this answer node.
This can take two forms.
By setting it to a text value, you can specify the text in all languages:
answerText: Why do you need this potion?
Or, you can set it to a map of text in different languages:
answerText:
en: Why do you need this potion?
es: ¿Por qué necesitas esta poción?
Optional
A collection of properties which specify a dialogue node. For a full description of the available properties see dialogue
If unspecified this answer will be treated as a back button, going back to the previous node unless isConversationEndAnswer or isBackToBeginningAnswer is specified.
Optional
This is a property specifying whether or not this answer node will end the conversation when chosen by the player.
Setting this to true will treat this answer as an end of conversation node.
If left unspecified, the value will be set to false.
Optional
This is a property specifying whether or not this answer node will work as a back button which returns to the first dialogue node.
Setting this to true will treat this answer as a back to beginning node meaning when this answer is selected the player will be returned to initial dialogue node.
If left unspecified, the value will be set to false.
Supplied by plugin: RoboPhredDev.PotionCraft.Crucible.PotionBottles
The potionBottles
property takes an array of Potion Bottle Items.
The potionBottleStickers
property takes an array of Potion Bottle Sticker Items
The potionBottleIcons
property takes an array of Potion Bottle Icon Items
potionBottles:
- id: my_potion_bottle
# ...potion bottle properties
potionBottleStickers:
- id: my_sticker
# ...sticker properties
potionBottleIcons:
- id: my_icon
# ...icon properties
A potion bottle item defines a custom potion bottle to add to the game.
All properties are supplied by the net.RoboPhredDev.PotionCraft.Crucible.PotionBottles
plugin unless otherwise noted.
required
Specifies the internal name this potion bottle will go by. It can be used by other mods to reference your potion bottle.
The potion bottle icon sprite which will be shown in the potion bottle list when customizing a potion. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle foreground sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle scratches sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle shadows sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle cork sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle mask sprite. This should be the name of a png file inside your mod folder. The png should have a black background and a transparent cuttout representing the shape of your potion bottle. This sprite is used to mask labels and icons applied to the potion bottle.
If unspecified, this sprite will be replaced with a blank sprite meaning no icons or labels will be shown for this potion bottle.
The potion bottle main liquid sprite. This should be the name of a png file inside your mod folder. This sprite will make up the default liquid background for your potion bottle when only a single effect (or no effect) has been added.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid2Of2 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the second effect for potions with only two effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid1Of3 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the first effect for potions with three effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid3Of3 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the third effect for potions with three effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid1Of4 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the first effect for potions with four effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid3Of4 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the third effect for potions with four effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid4Of4 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the fourth effect for potions with four effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid1Of5 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the first effect for potions with five effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid2Of5 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the second effect for potions with five effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid4Of5 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the fourth effect for potions with five effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The potion bottle liquid5Of5 sprite. This should be the name of a png file inside your mod folder. This sprite will make up the liquid background of the firth effect for potions with five effects.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
SVG path data describing the shape of the hitbox for this item when the item collides against the world (shelves, tables, ground)
This property uses the SVG Path format, and supports the M/m
(move) H/h
(horizontal line), V/v
(vertical line), and L/l
(line) commands.
Paths can be easily created visually using vector art programs like Inkscape or Adobe Illustrator, or web tools like SvgPathEditor. Keep in mind the limited command set though, as these tools occasionally try to use other unsupported commands.
Note that collision currently only supports making the figure out of straight lines, so the C/c
bezier curve commands do not function here.
The value of this property can take two forms: A svg path string, or an object containing the path and scale data:
bottleCollision: "M 5,5 L2,3 L3,2"
or
bottleCollision:
data: "M 5,5 L2,3 L3,2"
scaleX: 0.5
scaleY: 0.5
A potion bottle sticker item defines a custom potion bottle sticker to add to the game.
All properties are supplied by the net.RoboPhredDev.PotionCraft.Crucible.PotionBottles
plugin unless otherwise noted.
required
Specifies the internal name this sticker will go by. It can be used by other mods to reference your sticker.
The sticker foreground sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The sticker background sprite. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
The sticker icon sprite which will be shown in the sticker list when customizing a potion. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.
A potion bottle icon item defines a custom potion bottle icon to add to the game.
All properties are supplied by the net.RoboPhredDev.PotionCraft.Crucible.PotionBottles
plugin unless otherwise noted.
required
Specifies the internal name this icon will go by. It can be used by other mods to reference your sticker.
The icon sprite which will be shown in the icon list when customizing a potion. This should be the name of a png file inside your mod folder.
If unspecified, this sprite will be replaced with a blank sprite meaning nothing will be shown for this sprite.