.. include:: global.inc.rst ============= Item Clothing ============= :Author: innoxia, bicobus Clothing and anything that is wearable, even inside. You can find working examples of clothing in the :ltgithub:`res/mods/innoxia/items/clothing` folder. General Information ------------------- Any clothing item whose rarity is set to LEGENDARY or above will not show up in the game, as no shopkeepers have been being defined as selling items of that quality. You can spawn it from the debug menu if you wish. The debug menu is accessed by typing ``buggy`` at any point in the game. It is best to enter the debug menu when not in the middle of combat, sex, or movement-locked dialogue, as it will break you out of it. coreAttributes -------------- authorTag ~~~~~~~~~ .. index:: author-tags Author attribution, if you want one. .. seealso:: :ref:`author-tags` .. code:: xml value ~~~~~ .. index:: item-value Please refer to the general information about :ref:`item value`. Example I’ve defined this as 60, which is about the price for a basic pair of socks or something similar. .. code:: xml 60 determiner ~~~~~~~~~~ The determiner which is displayed before this item’s name. While usually “a” or “an”, for things like socks or gloves, you’ll want to use “a pair of”. I use the ``CDATA`` tag for all text values, as it allows html markup to be embedded without causing issues. Example I’ve defined this as “a pair of”, so in-game, this item will be referred to as “a pair of socks”. .. code:: xml name ~~~~ The **singular** name of this clothing. Example I’ve named this “template sock”, as the singular for “template socks” is of course “sock”... .. code:: xml You can leave out the ``appendColourName`` attribute, but if you never want this clothing to be described by its colour, then set it as false. (i.e. If set to false, this clothing would always be called “template socks” instead of, for example, “white template socks”.) namePlural ~~~~~~~~~~ The plural form of the name. The attribute ``pluralByDefault`` determines whether this item is naturally referred to as a plural (use true for things like socks or gloves). Example I’ve named the plural as “template socks”, and defined ``pluralByDefault`` as true, so that this item will be referred to by this plural name in all but extremely exceptional circumstances. .. code:: xml description ~~~~~~~~~~~ This is the description which is shown in tooltips and on the item’s inspection page. Example The description for ordinary, “boring” items of clothing might be a little dry, but as they won’t be read by the player much, it doesn’t really matter. .. code:: xml physicalResistance ~~~~~~~~~~~~~~~~~~ The default physical resistance for this piece of clothing. Usually use 0, but if it’s armour, then values of 1 up to 5 would be fitting (any more than that might be very OP). Physical resistance is a very powerful stat, so please keep within the range of 0-5. For all normal clothing, the value should be 0. This accepts decimal values, so for things like leather jackets (which aren’t really armour, but are still protective), you can use 0.5 or so. Example Left as 0, as it’s nomral, unarmoured clothing. .. code:: xml 0 femininity ~~~~~~~~~~ Use ``FEMININE`` for if this clothing is intended for feminine characters, ``MASCULINE`` for masculine, and ``ANDROGYNOUS`` if it’s able to be worn by anyone without penalties. Example Normal socks could be worn by both males and females without issue, so I set this to ``ANDROGYNOUS``. .. code:: xml ANDROGYNOUS equipSlots ~~~~~~~~~~ The slots that this clothing is able to be fit into. The game only supports up to 4 unique slots, so if you define more than 4, the rest of them won’t show up in-game. These definitions preserve ordering, so use the top one for the most common slot to be fitted into. This is especially important for NPCs, as they will use the top slot for determining which slot this clothing should fit into. Possible slots are found here: :ltgithub:`src/com/lilithsthrone/game/inventory/InventorySlot.java` Example I defined ``SOCK`` as the top slot, as this is the intended slot for socks. As I also want the player to be able to equip socks onto their hands, I defined ``HAND`` as a secondary slot. .. code:: xml SOCK HAND rarity ~~~~~~ The rarity of this item. Anything less than ``EPIC`` may end up being modified in the code. Possible rarities are found here: :ltgithub:`src/com/lilithsthrone/game/inventory/Rarity.java` Example Socks are most definitely ``COMMON``, but I’ve defined these as ``LEGENDARY`` so as to prevent them from naturally spawning in the game. .. code:: xml LEGENDARY clothingSet ~~~~~~~~~~~ The set that this clothing belongs to. .. seealso:: :doc:`/setBonuses` Navigate to :ltgithub:`res/setBonuses` to see existing sets. - Example: Just use the name of the set. .. code:: xml innoxia_template imageName ~~~~~~~~~ The file paths for this clothing’s image. Please refer to the :ref:`documentation about images`. Example I’ve defined this as “sock.svg”, which should be placed in the same folder location alongside this xml file. .. code:: xml socks.svg imageEquippedName ~~~~~~~~~~~~~~~~~ The file paths for this clothing’s image while equipped. The “slot” attribute determines the InventorySlot in which the defined file will be used. Example When equipped to the ``SOCK`` slot, the sock will be displayed using the ``sock.svg`` file. When equipped to the “HAND” slot, it will instead use the ``sock_hand.svg`` file. Again, this file must be placed in the same folder location alongside this xml file. .. code:: xml socks.svg socks_hand.svg stickers ~~~~~~~~ ``Stickers`` are additional svgs which can be overlaid on top of (or beneath the) base svg image. Definitions are all within the ``stickers`` element. category ^^^^^^^^ All stickers defined within this category are **mutually exclusive** with one another, but not with stickers defined in other ``category`` elements. The ``id`` should be unique to each category, and can be defined as whatever you want, but for formatting purposes, it would be preferable for it to just contain basic alpha-numerical values and underscores. The ``priority`` variable determines the position of this category in UI rendering order (in the inventory’s clothing dye screen), with lower values being rendered nearer to the top of the category list. Variables - id (string) - priority (integer) Example .. code:: xml categoryName :::::::::::: This is used in-game as the title for this sticker category in the sticker application menu UI. As such, please try to make this human-readable. Example .. code:: xml .. index:: ! sticker :name: sticker sticker ::::::: A sticker element. Each sticker are exclusive with other stickers present in the same category. Stickers of different cagetories can be combined. The ``id`` element should be unique to stickers within this category element. Define this variable to ``none`` (lit.) to give to the player the ability to leave the selection blank. The ``priority`` variable determines the position of this sticker in UI rendering order (in the inventory’s clothing dye screen), with lower values being rendered nearer to the left of the buttons list. A ``priority`` of ``0`` will set the sticker at the top of the list, regardless of it’s position in your xml file. ``defaultSticker`` defines whether this sticker is applied to this clothing item by default when spawned in. ``zLayer`` defines the rendering z-layer priority. These ``zLayer`` values are compared against one another when rendering, with higher values being drawn on top of stickers with lower values. **The base svg has a zLayer value of 0**, meaning that negative values will be drawn beneath the base svg. Defining ``zLayer`` as 0 is not advised (although it is handled by always being drawn on top of the base layer). ``colourDisabled`` and ``colourSelected`` are optional variables which you can use to define the colour of the text within the button used to select this sticker in the clothing dye UI. You can leave these blank or delete them entirely to use default button colours. The default values, if you were to define them using these variables, would look like: ``colourDisabled="TEXT_GREY" colourSelected="GENERIC_GOOD"`` .. note:: If you do not define an `imageName `_ sub-element, or if you leave it blank, the default selected colour will be ``TEXT_GREY`` instead of ``GENERIC_GOOD``. Available colours can be found here: :ltgithub:`src/com/lilithsthrone/utils/colours/PresetColour.java` You can also define custom colours instead of a PresetColour id, in which case you **must** use a standard RGB hex code as the value. e.g. ``colourDisabled="777777" colourSelected="57DB7E"`` Variables - id (string) - priority (integer) - defaultSticker (boolean) - zlayer (integer) - colourDisabled (constant) - colourSelected (constant) Example .. code:: xml stickerName ''''''''''' This is used in-game as the title for this sticker’s button in the sticker application menu UI. As such, please try to make this human-readable. Example .. code:: xml namePrefix '''''''''' Define a ``namePrefix`` to add a prefix to the base clothing’s name when this sticker is applied. The ``priority`` variable defines the order in which multiple sticker ``namePrefix`` are displayed. A **lower value** means they will be **displayed first**. This can be left undefined. Variables - priority (integer) Example .. code:: xml namePostfix ''''''''''' Exactly the same as `namePrefix`_, but the text is appended after the base clothing name. descriptionmodification ''''''''''''''''''''''' You can set whether this sticker should define a new description for the clothing. If ``fullReplacement`` is true, then the clothing’s description is completely replaced with ``descriptionModification`` while this sticker is applied. If ``fullReplacement`` is false, then it is appended to the base clothing description (so long as another sticker has not applied a ``fullReplacement``). The ``priority`` element defines in what order the description appending is performed, or, if ``fullReplacement`` is true for multiple active stickers, which sticker’s description has priority. Variables - fullReplacement (boolean) - priority (integer) Example .. code:: xml Rental ]]> imageName ''''''''' The path name for this sticker, which should be in the same folder location as this xml file. The ``slot`` variable can be omitted, in which case the default slot for the clothing item is used. If the clothing can be equipped into multiple slots, you don’t **need** to define an ``imageName`` element for every slot, but if you don’t, the game will end up using any of your defined ``imageName`` at random (which is not a problem if you only define one ``imageName`` that’s suitable for any of the clothing’s base ``imageName``). The ``zLayer`` attribute defines the rendering order for this svg image. You do not need to define this attribute, as if it is missing, this svg will use the sticker’s ``zLayer`` attribute which you’ve already defined up above in the root ``sticker`` element. I have included it here just as an example. .. note:: You can add as many ``imageName`` elements as you like. Variables - zLayer (interger) - slot (constant) Example .. code:: xml text_rental.svg itemTagsAdded ''''''''''''' If this sticker should add any ItemTags to the clothing, then you can define them in here. Use ```` elements within the ``itemTagsAdded`` element (e.g. ``SOLD_BY_NYAN``) using ``ItemTag`` names as defined here: :ltgithub:`src/com/lilithsthrone/game/inventory/ItemTag.java` Example .. code:: xml SOLD_BY_NYAN itemTagsRemoved ''''''''''''''' If this sticker should remove any ``ItemTags`` to the clothing, then you can define them in here. Use ```` elements in the same manner as `itemTagsAdded`_. .. warning:: If you define either a single sticker or multiple stickers to have conflicting tag behaviour -- i.e. both adding and removing identical tags --, then behaviour is undefined and you will end up with the ``ItemTag`` applied or removed at random. unavailabilityText '''''''''''''''''' Sticker are available to be used by the player by default, but if you want there to be requirements for using this sticker, then define this element as a ``CDATA`` text element, with any non-whitespace text returned signalling to the game that this sticker is unavailable. The returned text will be displayed to the player in the button’s tooltip, so it should describe why this sticker is unavailable. You can define a ``showDisabledButton`` attribute, which by default is set to true, and which defines whether or not this sticker’s selection button is shown to the player when disabled. Please note that no ``npc`` tag can be used, as this clothing might not belong to anyone. Variables - showDisabledButton (boolean) An example where the player could only use the sticker while being feminine would be: .. code:: xml And for this example, the disabled button is not shown to the player, so there’s no need for an elaborate description, as the player will never see it: .. code:: xml availabilityText '''''''''''''''' The counterpart to `unavailabilityText`_, this text is shown when `unavailabilityText`_ is returning an empty String, and therefore this sticker is available. Use a ``CDATA`` text element. Counterpart examples to the two above: .. code:: xml echantmentLimit ~~~~~~~~~~~~~~~ How many enchantments can be fit into this item. It’s typically best to let the game handle the default number of enchantments, which typically results in 100. Example I have not defined this, as I’ll let the game keep the 100 enchantments default value. Using default value .. code:: xml Using custom value .. code:: xml 100 effects ~~~~~~~ The default effects that this clothing spawns in with. To know what to put in here, it would probably be easiest to enchant clothing in your game, save the game, then copy over that clothing’s ’effects’ in your save file. Example The first defined effect will give +3 to physical damage, while the second will give the wearer the masturbation fetish while worn. .. code:: xml blockedPartsList ~~~~~~~~~~~~~~~~ This section determines how the clothing interacts with other clothing and the wearer’s body. Example I’ve defined this section as being the one to be used when equipped to the “SOCK” slot. .. code:: xml REMOVE_OR_EQUIP FEET FEET This is another section to determines how the clothing interacts with other clothing and the wearer’s body. Example I’ve defined this section as being the one to be used when equipped to the ``HAND`` slot. .. code:: xml REMOVE_OR_EQUIP FINGERS blockedParts ^^^^^^^^^^^^ You can add as many ``blockedParts`` elements as you like, but they should each have a different `displacementType`_, and **there should be at least one, of type** ``REMOVE_OR_EQUIP``. displacementType ^^^^^^^^^^^^^^^^ If this clothing is displaced in the following way (in this case, by being removed), then the `blockedBodyParts`_, `clothingAccessBlocked`_, and `concealedSlots`_ will all be revealed. If multiple `blockedParts`_ block or conceal the same slot, only one `blockedParts`_ needs to be displaced to reveal it. (e.g. If a pair of trousers has ``UNZIPS`` and ``PULLS_DOWN`` displacementTypes, and both of these contain the ``concealedSlots`` ``slot`` ``PENIS``, then the penis will be revealed if either ``UNZIPS`` or ``PULLS_DOWN`` is activated.) A full list of displacementTypes can be found here: :ltgithub:`src/com/lilithsthrone/game/inventory/clothing/DisplacementType.java` clothingAccessRequired ^^^^^^^^^^^^^^^^^^^^^^ The access required to perform this `displacementType`_. ``clothingAccess`` values can be found here: :ltgithub:`src/com/lilithsthrone/game/inventory/clothing/ClothingAccess.java` blockedBodyParts ^^^^^^^^^^^^^^^^ The body parts that are blocked by this `displacementType`_. ``bodyPart`` values can be found here: :ltgithub:`src/com/lilithsthrone/game/character/body/CoverableArea.java` clothingAccessBlocked ^^^^^^^^^^^^^^^^^^^^^ The access that this `displacementType`_ blocks. Again, clothingAccess values can be found here: :ltgithub:`src/com/lilithsthrone/game/inventory/clothing/ClothingAccess.java` This element must contain a list of tag ``clothingAccess`` for values inserted here. Example .. code:: xml MOUTH concealedSlots ^^^^^^^^^^^^^^ The slots that this `displacementType`_ conceals. Possible slots are found here: :ltgithub:`src/com/lilithsthrone/game/inventory/InventorySlot.java` You can also use a preset list by adding an attribute named “values” to this element (an example -- “CS Example” -- is in the `blockedParts`_ section below this one). The preset lists that you can use are found here: :ltgithub:`src/com/lilithsthrone/game/inventory/clothing/PresetConcealmentLists.java` Use the tag ``slot`` for values inserted here. Example .. code:: xml HEAD incompatibleSlots ~~~~~~~~~~~~~~~~~ Inventory slots that are incompatible with this clothing. The game’s swimsuit makes use of this, and, while fitting into the ``CHEST`` slot, also blocks ``GROIN`` and ``STOMACH``. Possible slots are found here: :ltgithub:`src/com/lilithsthrone/game/inventory/InventorySlot.java` Example You need to define an ``incompatibleSlots`` element for each slot that the clothing can be equipped into, so here, I’ve defined an empty one for ``SOCK``, and another empty one for ``HAND``. Example 2 If you want to add slots, then use the element like so (which would block the ``FINGER`` slot when equipped into the ``WRIST`` slot): .. code:: xml FINGER colours ~~~~~~~ Please consult the relevant :ref:`documentation`. Your clothing can be coloured any way you like, but if you’d like the player to be able to dye your clothing, you can specify available colours here. ``primaryColours``, ``secondaryColours``, and ``tertiaryColours`` can all spawn in as a default colour, while their ’Dye’ counterparts are only available if the player chooses to dye the clothing in that colour. The game detects specific colour values, and recolours them to the value chosen by the player. These values are as follows: Colour types can be found in the files present in the following folder: :ltgithub:`src/com/lilithsthrone/utils/colours` .. important:: please use the ``Colour`` values that start with ``CLOTHING_``. .. code:: xml CLOTHING_WHITE CLOTHING_BLACK CLOTHING_GREY CLOTHING_RED CLOTHING_PINK_LIGHT customColours ^^^^^^^^^^^^^ You can define any number of custom colours to replace the shades you’ve coloured your svg with. .. code:: xml CLOTHING_GREY patterns ~~~~~~~~ This section details how to define patterns. If your svg file does not have a ``patternLayer`` defined, you can safely delete this whole section: ``defaultPatterns`` lists the patterns that this clothing can spawn with. - ``patternChance`` is the chance that this clothing will spawn with a pattern. Values are from 0 to 1, and should end with an “f”. i.e. 0.5f is a 50% chance, 0.75f is 75%, 0.1275 is 12.75%, etc. - ``colourNameDerivedFromPattern`` sets whether the pattern’s primary colour should be used for the clothing’s name, instead of the “colour” value. i.e. If set to ``true``, then a green+black tiger-striped item of clothing would be called “green”, even if the base colour was something else. ``pattern`` Pattern values can be found as svg file names in the folder ``res/patterns`` .. code:: xml camo patternPrimaryColours, patternSecondaryColours, and patternTertiaryColours ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Colours work the same as explained in the `colours`_ section. .. code:: xml CLOTHING_GREEN customPatternColours ^^^^^^^^^^^^^^^^^^^^ Custom pattern colours can be defined just like the customColours up above. .. code:: xml itemTags ~~~~~~~~ These tags determine where in the world your clothing can be found, and what special attributes your clothing should have. Possible tags are defined in :ltgithub:`src/com/lilithsthrone/game/inventory/ItemTag.java` ``itemTags`` without a ``slot`` defined will have these tags added to every equippable slot. Should only be used for generic tags like those related to which vendors sell it. ``itemTags`` with a ``slot`` defined will have these tags applied ONLY when the clothing is equipped into that slot. In this example, equipping the socks onto your hands hinders arm movement. This is not entirely logical, and I added this just for demonstration purposes. .. code:: xml NOT_FOR_SALE HINDERS_ARM_MOVEMENT sexAttributesSelf ----------------- See the :ltgithub:`res/clothing/innoxia/buttPlugs/butt_plug.xml` file for a working example of this element. These are the sex attributes applicable to the wearer (i.e. when inserted in the wearer’s orifices or when the wearer is penetrating this clothing type. Mainly used for insertable dildos.) .. code:: xml 15 5 VEINY 0 0 3 3 0 PUFFY penetration ~~~~~~~~~~~ length value in cm grith 0-6 corresponding to ``PenetrationGirth Enum`` values modifiers For adding modifiers, add ``mod`` tags containing ``PenetrationModifier Enum`` values orifice ~~~~~~~ .. versionchanged:: 0.3.7 orifice sex toy support is not fully implemented into the game! depth value in cm capacity value in cm, corresponding to the diameter of the orifice elasticity 0-7 corresponding to ``OrificeElasticity Enum`` values plasticity 0-7 corresponding to ``OrificePlasticity Enum`` values wetness 0-7 corresponding to ``Wetness Enum`` values modifiers list of ``mod`` tags, each containing ``OrificeModifier Enum`` values sexAttributesOther ------------------ These are the sex attributes applicable to someone who is interacting with the wearer (i.e. the penetration/orifice which is available for people other than the wearer. Mainly used for strap-on dildos.) .. seealso:: Consult the file :ltgithub:`res/clothing/norin/strapless_dildo/strapless_dildo.xml` for a working example of the following excerpt. For an explanation of the effects of the different sub elements, please refer to `sexattributesself`_. .. code:: xml 25 3 replacementText --------------- The following sections are for defining the descriptions of displacing or replacing your clothing. The attribute ``type`` defines which ``DisplacementType`` your descriptions are applied to. For standard equipping and unequipping, use ``REMOVE_OR_EQUIP``. .. seealso:: List of type contant: :ltgithub:`src/com/lilithsthrone/game/inventory/clothing/DisplacementType.java`. Example This is the equip text for when socks are equipped to the ``SOCK`` slot: .. code:: xml Example This is the equip text for when socks are equipped to the ``HAND`` slot: .. code:: xml displacementText ---------------- This section is used for removal and displacement. Example This is the unequip text for when socks are removed from the ``SOCK`` slot: .. code:: xml Example This is the unequip text for when socks are removed from the ``HAND`` slot: .. code:: xml