Modding:Objects
This page is about modding. See the modding overview for an abstract on modding. |
Object Definitions
The game's object definitions live in the XML files in the %game directory%\CoQ_Data\StreamingAssets\Base\ObjectBlueprints
directory.
These object definitions may be extended or replaced via an ObjectBlueprints.xml
file placed in your mod's root directory, %appdata%\Caves of Qud\Mods\[your mod name]\ObjectBlueprints.xml
.
If an object attribute Load="Merge"
is supplied, the data will merge with any existing definition, otherwise the object definition will replace the named object entirely.
Example ObjectBlueprints.xml
that merges a new color into Ctesiphus's blueprint:
<objects>
<object Name="Ctesiphus" Load="Merge">
<part Name="Render" ColorString="&B"></part>
</object>
</objects>
Component System
Caves of Qud's codebase uses an entity component system architectural style, which makes it relatively easy for modders to create totally new objects with only a small XML snippet, simply by combining existing components from other game objects. Components are generally referred to as "parts" in Caves of Qud's XML files. For example, you might combine a LiquidVolume part with a MeleeWeapon part to create a weapon that holds liquid.
For a more thorough introduction to the component system used to define objects in Caves of Qud, check out this introductory presentation by CoQ developer Brian Bucklew from IRDC 2015:
Supported XML Tags and Functions
Each <object>
in the ObjectBlueprints.xml file supports the following child XML tags:
XML Tag | Description |
---|---|
<part>
|
Indicates that this object should load the part with the specified name. A parts is any C# class that inherits IPart .You don't need to know how to code to add a part though, there are a lot of useful parts already available in the base game that you can steal from other objects. |
<mutation>
|
If an existing mutation is redefined, the game merges the new attributes you define with existing attributes on the mutation, overwriting them if they already exist. |
<builder>
|
|
<skill>
|
If an existing skill is redefined, the game merges the new attributes you define with existing attributes on the mutation, overwriting them if they already exist. |
<inventoryobject>
|
Adds an object to a creature's inventory. Number can be specified to say how many of the object the creature should have. In addition, a blueprint can be prefixed with @ to sample the inventory objects from a population table, e.g. Blueprint="@DynamicObjectsTable:EnergyCells:Tier{ownertier}" .
|
<stat>
|
|
<property>
|
|
<intproperty>
|
|
<xtag>
|
|
<tag>
|
The code includes a method to remove an existing tag, by redefining it with Value="*delete" . However, this appears to currently be broken because it does not work in combination with Load="Merge" or on inherited tags.
|
<stag>
|
Adds an object to a dynamic semantic table. |
<mixin>
|
Adds a "mixin" to an object. This can be used in place of (or in addition to) inheritance to automatically copy parts and tags to an object from another object. mixin supports the following attributes:
|
The effects of most objects tags can be reverted using a remove*
tag. For instance, <removepart Name="..." />
will remove a part from an object blueprint; <removemutation Name="..." />
can be used to remove a mutation from a creature[1].
Adding the object to encounters
Once you've created your item, check out this page for information on how to introduce it to dynamic encounters: Encounter and Population Modding
Parts
The game implements a wide variety of parts in XRL.World.Parts
that can be applied to objects. These parts can be added to an object by adding a part
tag to their definition in XML, supplying the name of the part and any other relevant attributes. For example:
<object Name="Snapjaw" Load="Merge">
<part Name="Corpse" CorpseChance="90" CorpseBlueprint="Snapjaw Corpse" />
</object>
Parts can also be removed from an object through the use of the removepart
XML tag, e.g. <removepart Name="Corpse" />
.
Below is an (incomplete) list of some of the most common and important parts used by creatures and items in the game.
General parts
Name | Attributes | Description |
---|---|---|
Description | Short | Affects the description of an object when you look at it. |
DeployWith | Blueprint, PreferredDirection, SameCell, SolidOkay, SeepingOkay, Chance, CarryOverOwner | Ensure that the object spawns alongside other objects. This is used, for example, by air wells to ensure that they spawn with catch basins. |
Food | Message, Satiation, Thirst, Healing | Makes an object edible. This part also affects the message that pops up when you eat a given item, as well as its impact on your hitpoints (HP) and thirst. |
Interesting | Key, IfPartOperational, DisplayName, Preposition, Radius, EvenIfInvisible, TranslateToLocation, IconTile, IconRenderString, IconColorString, IconTileColor, IconDetailColor | Whether or not an object is considered "interesting" in the current zone. Objects marked as interesting can be automatically moved to through the "move to point of interest" selector. |
RandomColors | DetailColor, TileColor | Selects a random primary and detail color for an object's tile. The DetailColor and TileColor attributes should be comma-separated lists of colors.
|
RandomTile | Tiles | Changes the tile used by a creature to be a random tile from a comma-separated list given by the Tiles attribute.
|
Render | DisplayName, RenderString, RenderLayer, RenderIfDark, DetailColor, ColorString | Change the color and tile used to render an object, as well as the name of the object as it appears in-game. |
Creature- and corpse-specific parts
Name | Attributes | Description |
---|---|---|
Body | Anatomy | The body type used by a creature. |
Brain | Hostile, Factions | Used to specify a creature's default hostility state, as well as the factions that it belongs to. |
Butcherable | OnSuccessAmount, OnSuccess | Can be applied to a creature's corpse to make it butcherable. |
Consumer | Chance, WeightThresholdPercentage, SuppressCorpseDrops, Message, FloatMessage | Causes a creature to destroy objects and creatures in its path. This is used by salt krakens and star krakens (along with the SlowDangerousMovement and and AIWanderingJuggernaut parts).
|
ConversationScript | ConversationID, Quest, PreQuestConversationID, InQuestConversationID, PostQuestConversationID, ClearLost, Filter | Used to specify a creature's script for conversations, using an ID from Conversations.xml . Conversation scripts can be static, or can be dynamically selected conditional on what quests the player is currently undertaking.
|
Corpse | CorpseBlueprint, CorpseRequiresBodyPart, BurntCorpseBlueprint, BurntCorpseRequiresBodyPart, VaporizedCorpseBlueprint, VaporizedCorpseRequiresBodyPart | Specifies the corpse left by a creature. |
Followers | Table | Generate followers for a creature from a given population table upon spawning. |
GenerateName | SpecialType, NamingContext | Gives the creature a proper name upon spawning. |
GivesRep | repValue | When given to a creature, allows the player to perform the water ritual with that creature. |
MentalShield | Gives a creature a mental shield. | |
SocialRoles | Roles | Add a list of "roles" that appear at the end of a creature's name. For instance, non-named creatures living in Yd Freehold are given the role "denizen of the Yd Freehold". |
Titles | Primary, Ordinary | Add a title that appears after a creature's name. This is used, for example, by Oboroqoru, Ape God and Hamilcrab, cyclopean merchant. |
Item- and furniture-specific parts
Name | Attributes | Description |
---|---|---|
Animated | ChanceOneIn | Makes an item animated with a probability given by the ChanceOneIn attribute.
|
BootSequence | BootTime, VariableBootTime, ReadoutInName, ReadoutInDescription, AlwaysObvious, ObviousIfUnderstood, TextInDescription, VerbOnBootInitialized, VerbOnBootDone, VerbOnBootAborted, SoundOnBootInitialized, SoundOnBootDone, SoundOnBootAborted | Forces an item to undergo a "boot sequence" before its effects are activated. Examples of items that use this part include thermo cask, ganglionic teleprojector, and telemetric visor. |
Chat | Says, ShowInShortDescription | Adds writing to an object, which appears in the object's description when interacting with it. This is often used, for instance, by the signs outside of merchants' tents at the Six Day Stilt. |
Commerce | Value | Controls the trade value of a given object. |
CyberneticsBaseItem | Slots, Cost, BehaviorDescription | Makes an item an implantable cybernetic. |
EnergyCellSocket | SlotType, SlottedType, ChanceSlotted, ChanceFullCell, ChanceDestroyCellOnForcedUnequip | Controls whether or not an item can be slotted with an energy cell, as well as whether or not it spawns with an energy cell by default. |
Examiner | Complexity, Difficulty, Unknown, Alternate, Understanding | Determines the artifact examination difficulty for an item. |
LiquidVolume | InitialLiquid, MaxVolume, StartVolume, ManualSeal, LiquidVisibleWhenSealed | Allows an item to hold liquid. |
MutationOnEquip | Level, ClassName, Constructor, Describe | Grants a creature the mutation specified by the class name and constructor upon equipping the item (or increases the rank of the mutation if it's already present).
(Note: |
TinkerItem | Bits, CanDisassemble, CanBuild, Ingredient, SubstituteBlueprint, RepairCost, RustedRepairCost | Controls whether or not an item can be built and disassembled with tinkering skills, as well as what bits and special ingredients it may require. |
Object materials and physical properties
Name | Attributes | Description |
---|---|---|
Interior | Cell, WX, WY, X, Y, Z, FallDistance, CarriedWeight, Unique | Gives an object an interior zone, which may be entered from outside. |
Metal | Controls whether or not an object is made of metal. | |
Physics | Weight, Conductivity, FlameTemperature, VaporTemperature, FreezeTemperature, BrittleTemperature, Solid, IsReal, Owner, Takeable, Category | Defines a variety of physical properties of objects, including their weight, the temperatures at which they are set on fire and freeze, how much they conduct electricity, and so on. Can also be used to indicate which faction owns an object. |
Springy | Factor | Affects the "springiness" of an object. Objects with higher springiness have a higher kinetic absorption, which reduces knockback taken from explosions. |
Armor- and weapon-specific parts
Name | Attributes | Description |
---|---|---|
Armor | AV, DV, MA, Acid, Elec, Cold, Heat, Strength, Agility, Toughness, Intelligence, Ego, Willpower, ToHit, SpeedPenalty, SpeedBonus, CarryBonus, WornOn | Used to specify different stat bonuses provided by an armor type upon being equipped, as well as the body part on which that armor can be equipped. |
BioAmmoLoader | MaxCapacity, Available, TurnsToGenerate, ReloadEnergy, ProjectileObject, TurnsToGenerateComputePowerFactor, TurnsGenerating | Affects ammo capacity and ammo regeneration speed when applied to a missile weapon. BioAmmoLoader is typically used by natural missile weapons; for instance, slugsnouts use it to regenerate slugs, and svardym scrounges use it for their ranged "spit" attack.
|
CooldownAmmoLoader | ProjectileObject, Cooldown, Readout | Used by missile weapons that have a cooldown after shooting (e.g. spaser rifles). Can also be used to specify the projectile shot by those weapons. |
EnergyAmmoLoader | ProjectileObject, ChargeUse, IsPowerLoadSensitive | Used by missile weapons that consume energy from energy cells. Can be used to specify the projectile shot by those weapons. |
LiquidAmmoLoader | ProjectileObject, Liquid, ShotsPerDram, ShowDamage | Used by missile weapons that consume a liquid when firing, e.g. flamethrowers. |
MagazineAmmoLoader | ProjectileObject, AmmoPart, MaxAmmo | Used to indicate that a missile weapon needs ammo to fire, and to specify the projectile shot by that weapon. |
MeleeWeapon | MaxStrengthBonus, BaseDamage, Skill, Stat, Slot | Defines the amount of damage that can be dealt by a weapon, what body slot it can be equipped on, and what skill tree it falls under (e.g., Long Blade, Cudgel, etc.) |
MissileWeapon | AnimationDelay, ShotsPerAction, AmmoPerAction, ShotsPerAnimation, AimVarianceBonus, WeaponAccuracy, MaxRange, VariableMaxRange, AmmoChar, NoWildfire, bShowShotsPerAction, FiresManually, ProjectilePenetrationStat, SlotType, EnergyCost, RangeIncrement, Modifier, Skill | Allows an item to be equipped as a missile weapon. Controls various aspects of missile weapon behavior, including projectile range and animations used. |
Projectile | BasePenetration, StrengthPenetration, PenetrateCreatures, PenetrateWalls, Quiet, BaseDamage, ColorString, Attributes, PassByVerb, RenderChar | Used by projectiles shot by missile weapons. Defines the damage done by those weapons as well as other attributes of the projectiles that they shoot. |
Miscellaneous
Name | Attributes | Description |
---|---|---|
Harvestable | DestroyOnHarvest, OnSuccess, OnSuccessAmount, RipeColor, RipeTileColor, RipeDetailColor, UnripeColor, UnripeTileColor, UnripeDetailColor, StartRipeChance | Allows an object to be harvested. |
Detailed Topics
References
- ↑
XRL.World.Loaders.ObjectBlueprintLoader.RemovalNode
|