2.4. Items Weapons

Author:

innoxia, bicobus

2.4.1. coreAttributes

2.4.1.1. authorTag

How attribution to the mod author (you) should be displayed in the item’s tooltip. If left blank or not included, a default attribution based on folder name will be used.

This tag is optionnal.

<authorTag><![CDATA[A discreet inscription at the base of the dagger's blade informs you that it was made by 'Innoxia'.]]></authorTag>

2.4.1.2. value

How much this weapon is worth.

<value>3000</value>

2.4.1.3. melee

Use “true” if this is a melee weapon, and “false” if it’s ranged. (Without quotation marks.)

<melee>true</melee>

2.4.1.4. twoHanded

Use “true” if this weapon is two-handed, and thus cannot be simultaneously wielded with an offhand weapon, and “false” if it’s one-handed. (Without quotation marks.)

<twoHanded>false</twoHanded>

2.4.1.5. determiner

What’s appended before the weapon’s name in an instance of “Innoxia was holding X Demon’s Dagger”, where X is the determiner. This will usually be either “a” or “an”, but for other weapons may be different.

An example might be: “Innoxia was holding X scissors”, where X (the determiner) would now need to be “a pair of”.

<determiner><![CDATA[a]]></determiner>

2.4.1.6. name

The name of this weapon.

appendDamageName

defaults to true and can be left out. If you ever want this weapon to not be described by its damage type, then set it as false. That is this dagger would always be called “Demon’s Dagger” instead of, for example, “Forceful Demon’s Dagger”.

<name appendDamageName="true"><![CDATA[Demon's Dagger]]></name>

2.4.1.7. namePlural

The plural name of this weapon.

pluralByDefault

If set to true, then the game will always use the plural name when referring to this weapon.

<namePlural pluralByDefault="false"><![CDATA[Demon's Daggers]]></namePlural>

2.4.1.8. description

The description/lore of this weapon.

<description><![CDATA[A demon's dagger, with a blade made out of enchanted ethereal energy. Daggers such as this one are carried by the elite demon Enforcers, and, while intended primarily to be a symbol of power and status, they are nonetheless completely functional.]]></description>

2.4.1.9. attackDescriptor

How the weapon is used. This should be a single verb, and is used as the title of attacking actions in combat.

<attackDescriptor>stab</attackDescriptor>

2.4.1.10. attackTooltipDescription

The description that’s displayed when hovering over the attack action in combat. Follow the same guidelines as equipText (a couple of entries further down this page).

As this tooltip is only ever seen from the player’s perspective, you can always write in the first-person narrative. (Still use npc2 for the target, though.)

<attackTooltipDescription><![CDATA[Strike out with your Demon's Dagger at [npc2.name].]]></attackTooltipDescription>

2.4.1.11. rarity

The rarity of this weapon.

Values can be found here: src/com/lilithsthrone/game/inventory/Rarity.java

<rarity>EPIC</rarity>

2.4.1.12. weaponSet

Which set this weapon is a part of.

Values can be found here: /res/setBonuses/

See also

Item Sets

<weaponSet/>

2.4.1.13. 1.13 equipText

The description that’s used when equipping this weapon. The description should be generic, able to be used by both the player and NPCs. Just make sure to use the tag [npc.verb()] whenever using a verb, which will then, for example, parse like this:

  • [npc.verb(run)] if npc is player = “run”

  • [npc.verb(run)] if npc is not the player = “runs”

Always use the first-person singular verb.

The target npc OR npc1 should be used for the character using the weapon. e.g. If the player is the one attacking (and is called Innoxia), then [npc.Name] will return “Innoxia”.

The target npc2 should be used for the character being attacked. e.g. If Brax is the one being attacked, then [npc2.Name] will return “Brax”.

<equipText><![CDATA[[npc.Name] [npc.verb(unsheathe)] the dagger, readying it for use in combat.]]></equipText>

2.4.1.14. 1.14 unequipText

The description that’s used when equipping this weapon. Follow the same guidelines as equipText.

<unequipText><![CDATA[[npc.Name] [npc.verb(sheathe)] the dagger, before putting it away.]]></unequipText>

2.4.1.15. 1.15 imageName

The file name of this weapon’s image when in the character’s inventory. The only supported file type is .svg. I use the free program “Inkscape” to make .svg images for the game.

<imageName>dagger_sheathed.svg</imageName>

2.4.1.16. 1.16 imageEquippedname

The file name of this weapon’s image when equipped. Can be (and usually is) the same as the imageName (which in this example would be dagger_sheathed.svg).

<imageEquippedName>dagger.svg</imageEquippedName>

2.4.1.17. 1.17 physicalResistance

How much natural physical resistance this weapon provides when equipped. Should only really be above 0 for shields or other such protective weapons.

<physicalResistance>0</physicalResistance>

2.4.1.18. 1.18 damage

The base damage that this weapon deals.

<damage>20</damage>

If you want to define additional AoE damages, add aoe elements.

A working example of AoE damages can be found in res/weapons/innoxia/lightningGlobe/lightning_globe.xml.

<aoe chance="50">10</aoe> 50% chance of hitting an additional enemy (who has not been hit yet) for 10 damage
<aoe chance="25">5</aoe> 25% chance of hitting an additional enemy (who has not been hit yet) for 5 damage

2.4.1.19. 1.19 arcaneCost

How many arcane essences are required, and drained, by firing this weapon. Ranged weapons should usually use the value 1, while melee weapons should usually be 0.

<arcaneCost>0</arcaneCost>

2.4.1.20. 1.20 damageVariance

The variance in base damage when this weapon is actually used to attack.

Values can be found here: https://github.com/Innoxia/liliths-throne-public/blob/master/src/com/lilithsthrone/game/combat/DamageVariance.java

<damageVariance>MEDIUM</damageVariance>

2.4.1.21. 1.21 availableDamageTypes

The available damage types that this weapon can spawn in with.

Values can be found here (MISC should not be used): src/com/lilithsthrone/game/combat/DamageType.java

<availableDamageTypes>
    <damageType>PHYSICAL</damageType>
    <damageType>ICE</damageType>
    <damageType>FIRE</damageType>
    <damageType>POISON</damageType>
</availableDamageTypes>

2.4.1.22. 1.22 spells

The spells that are unlocked when equipping this weapon. IF you want to add any, use the format:

<spells changeOnReforge="true"> <!-- ref:cor -->
    <spell damageType="FIRE">FIREBALL</spell> <!-- ref:dmt -->
    <spell damageType="ICE">ICE_SHARD</spell>
    <spell damageType="LUST">ARCANE_AROUSAL</spell>
    <spell damageType="PHYSICAL">SLAM</spell>
    <spell damageType="POISON">POISON_VAPOURS</spell>
</spells>

The changeOnReforge variable determines whether this weapon should regenerate spells whenever the player changes the damage type. (i.e. If they reforge a FIRE dagger to an ICE dagger, if changeOnReforge is true, then the granted spell FIREBALL will automatically switch to ICE_SHARD).

The damageType variable corresponds to the damageType which causes the spell to be unlocked when this weapon is spawned in. You can have multiple entries of the same damageType, like so:

<spell damageType="FIRE">FIREBALL</spell>
<spell damageType="FIRE">FLASH</spell>
<spell damageType="FIRE">ICE_SHARD</spell>
<spell damageType="FIRE">STEAL</spell>

Note that the damageType does not have to correspond to the spell’s school (so FIRE can unlock ICE_SHARD, etc.).

Values for spells can be found here: https://github.com/Innoxia/liliths-throne-public/blob/master/src/com/lilithsthrone/game/combat/Spell.java

For an empty spell list, use an empty element:

<spells/>

2.4.1.23. 1.23 combatMoves

The combat moves that are unlocked when equipping this weapon. The combatMoves element is similar to the spells element.

<combatMoves changeOnReforge="true">
    <move damageType="PHYSICAL">ASSAULT_RIFLE_MAG_DUMP</move>
</combatMoves>

The changeOnReforge variable determines whether this weapon should regenerate combat moves whenever the player changes the damage type. Using the example above, if they reforge a PHYSICAL dagger to an ICE dagger and changeOnReforge is true, then the granted combat move ASSAULT_RIFLE_MAG_DUMP will be lost.

The damageType variable corresponds to the damageType which causes the move to be unlocked when this weapon is spawned in. You can have multiple entries of the same damageType, like so:

<move damageType="FIRE">EXAMPLE_MOVE_1</move>
<move damageType="FIRE">EXAMPLE_MOVE_2</move>
<move damageType="FIRE">EXAMPLE_MOVE_3</move>
<move damageType="FIRE">EXAMPLE_MOVE_4</move>

Values for combat moves can be found here: https://github.com/Innoxia/liliths-throne-public/blob/master/src/com/lilithsthrone/game/combat/CMWeaponSpecials.java

Note: combat moves are not yet moddable. There will be a way to add modded combat moves soon!

For an item with no combat move, simply write an empty element:

<combatMoves/>

2.4.1.24. 1.24 enchantmentLimit

How many effects this weapon can be enchanted with. Weapons standard is 5, for balance purpose.

<enchantmentLimit>5</enchantmentLimit>

2.4.1.25. 1.25 effects

The effects that this weapon spawns in with. Remember that the player can remove, change or add effects. 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.

There are two special values for secondaryModifier, which are:

RESISTANCE_WEAPON

applies the related resistance of this weapon’s damage type.

DAMAGE_WEAPON

applies the related damage type.

For example, if this dagger spawned in as type POISON, and I’d replaced both instances of CRITICAL_CHANCE with DAMAGE_WEAPON, then this dagger would spawn with two +5 Poison Damage effects.

<effects>
    <effect itemEffectType="CLOTHING" limit="0" potency="MAJOR_BOOST" primaryModifier="CLOTHING_ATTRIBUTE" secondaryModifier="CRITICAL_CHANCE" timer="0"/>
    <effect itemEffectType="CLOTHING" limit="0" potency="MAJOR_BOOST" primaryModifier="CLOTHING_ATTRIBUTE" secondaryModifier="CRITICAL_CHANCE" timer="0"/>
</effects>

2.4.1.26. 1.26 extraEffects

You can use this section to describe any extra features of this weapon. These effects are shown in the tooltip when the player hovers over the weapon icon, so try and keep them short (as they should fit on one line). It should probably only be used to describe what happens in the 1.27 onHitEffect element. No characters are passed in as parsing arguments, so you should not use any character-specific parsing elements (such as [npc.name]). For this weapon, no extra effects need to be described, but if you need to use this section, use the following format:

<extraEffects>
    <effect><![CDATA[Stab time!]]></effect>
</extraEffects>

Empty extra effect:

<extraEffects/>

2.4.1.27. 1.27 onHitEffect

This is applied every time this weapon hits a target. It does not apply when the weapon critically hits. The returned text is appended to the hit description. npc corresponds to the attacker, and npc2 to the target, for use in effects/parsing. For this weapon, no hit effects need to be added, but if you need to use this section, use the following format:

<onHitEffect><![CDATA[
[##npc2.setHealth(0)]
[npc2.Name] is instantly defeated!
]]></onHitEffect>

An empty effect

<onHitEffect/>

2.4.1.28. 1.28 onCriticalHitEffect

This is applied every time this weapon critically hits a target. It does not apply when the weapon does a non-critical hit.

The returned text is appended to the hit description. npc corresponds to the attacker, and npc2 to the target, for use in effects/parsing. Use the same format as on-hit-effect.

<onCriticalHitEffect/>

2.4.1.29. 1.29 colours

Please consult the relevant documentation about colours.

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 and secondaryColours 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:

  • Red is used as base colour for changing the DAMAGE TYPE’s colour of the graphic in-game, and the game will only recognise and change the following colours:

    • #ff2a2a

    • #ff5555

    • #ff8080

    • #ffaaaa

    • #ffd5d5

  • Orange is used as base colour for changing the PRIMARY colour of the graphic in-game, and the game will only recognise and change the following colours:

    • #ff7f2a

    • #ff9955

    • #ffb380

    • #ffccaa

    • #ffe6d5

  • Yellow is used as base colour for changing the SECONDARY colour of the graphic in-game, and the game will only recognise and change the following colours:

    • #ffd42a

    • #ffdd55

    • #ffe680

    • #ffeeaa

    • #fff6d5

  • Green is used as base colour for changing the TERTIARY colour of the graphic in-game, and the game will only recognise and change the following colours:

    • #abc837

    • #bcd35f

    • #cdde87

    • #dde9af

    • #eef4d7

As you can see above, weapons differ from clothing in that their Red colour is recoloured based on the weapon’s damage type! The primaryColours, secondaryColours, and tertiaryColours defined below are for recolouring the Orange, Yellow, and Green values, respectively.

Any gradients that you use should be called: innoGrad1, innoGrad2, etc.

You can see a visual representation of these colours (as used in clothing) here: https://www.lilithsthrone.com/wiki/doku.php?id=modding_wiki:modding:creating_clothes

Colour lists to be used can be found here: https://github.com/Innoxia/liliths-throne-public/blob/master/src/com/lilithsthrone/utils/ColourListPresets.java

<primaryColours recolouringAllowed="true" values="JUST_STEEL"/> <!-- You can leave the attribute 'recolouringAllowed' out of colour definitions. If you want the player to be unable to change this colour, then set it as false. This is only used in very niche situations (such as for the filly choker).-->

<primaryColoursDye values="ALL_METAL"/>
<secondaryColours values="JUST_BLACK"/>
<secondaryColoursDye values="ALL"/>

2.4.1.30. 1.30 customColours

You can define any number of custom colours to replace the shades you’ve coloured your svg with. If you have used the primary/secondary/tertiary elements up above, then do not use their associated colour hexes. (i.e. If you’ve defined a primaryColours element, do not use #ff7f2a, #ff9955, #ffb380, #ffccaa, or #ffe6d5 in the customColour attributes.)

You should NEVER use the primary recolouring shades, as they are always reserved for the damage type’s colour: #ff2a2a, #ff5555, #ff8080, #ffaaaa, or #ffd5d5

<customColours>
    <!-- The 'copyColourIndex' attribute defines which colour index should be copied into this colour slot on weapon generation. This particular colour, having an index of 0, will always be coloured the same as the primary colour when generated. Indexes go from 0->X, where X is the number of defined colours. i.e. If you only define primary and secondary, the first custom colour (i.e. this one) will have an index of 2. -->
    <customColour copyColourIndex="0" c0="#6C5D53" c1="#917C6F" c2="#AC9D93" c3="#C8BEB7" c4="#E3DEDB">
            <defaultColours>
                    <colour>CLOTHING_STEEL</colour>
            </defaultColours>
            <extraColours values="ALL_METAL"/>
    </customColour>
     <!-- This particular copyColourIndex, having an index of 1, will always be coloured the same as the secondary colour when generated -->
    <customColour copyColourIndex="1" recolouringAllowed="true" c0="#6C5353" c1="#916F6F" c2="#AC9393" c3="#C8B7B7" c4="#E3DBDB"> <!-- These are the colours which you've used in your svg and would like replaced with the colours you define below. c0 is the darkest shade. Shades can go up to any number, but setting just 5 shades should work best. -->
            <defaultColours>
                    <colour>CLOTHING_BLACK</colour> <!-- The colours which this clothing should spawn in with. -->
            </defaultColours>
            <extraColours values="ALL"/> <!-- The colours which this weapon can be dyed to. -->
    </customColour>
</customColours>

2.4.1.31. 1.31 itemTags

Special item tags that apply to this weapon. Values can be found here: https://github.com/Innoxia/liliths-throne-public/blob/master/src/com/lilithsthrone/game/inventory/ItemTag.java

<itemTags>
    <tag>SOLD_BY_VICKY</tag>
    <tag>WEAPON_BLADE</tag>
</itemTags>

2.4.2. 2 hitDescription

Descriptions that are used when hitting an enemy. One of the hitText values will be randomly selected each time the attacker hits their target. Follow the same guidelines as equipText.

You can add hit descriptions which will only be shown on a critical hit by using the criticalHitText element. This is optional, and you don’t need to define any critical hit descriptions. If none are define and a critical hit occurs, a regular hitText will be used instead.

<hitDescriptions>
    <hitText><![CDATA[
    Thrusting out with [npc.her] Demon's Dagger, [npc.name] [npc.verb(manage)] to stab [npc2.name] in the chest; the ethereal arcane blade passing through [npc2.her] torso to drain [npc2.her] energy!
    ]]></hitText>
    <hitText><![CDATA[
    Striking out at [npc2.name] with [npc.her] Demon's Dagger, [npc.name] [npc.verb(manage)] to slash through [npc2.her] [npc2.arm] with the ethereal blade and drain [npc2.her] energy!
    ]]></hitText>
    <hitText><![CDATA[
    With a quick step forwards, [npc.name] [npc.verb(lunge)] out at [npc2.name] with [npc.her] Demon's Dagger, sinking the ethereal blade into [npc2.her] shoulder and causing [npc2.herHim] to lose some energy!
    ]]></hitText>
    <criticalHitText><![CDATA[
    Expertly sidestepping around [npc2.namePos] attempt to block [npc.her] attack, [npc.name] [npc.verb(deal)] a devastating strike with [npc.her] Demon's Dagger!
    ]]></criticalHitText>
</hitDescriptions>

2.4.3. 3 missDescription

Descriptions that are used when missing an enemy. One of the missText values will be randomly selected each time the attacker misses their target. Follow the same guidelines as equipText.

<missDescriptions>
    <missText><![CDATA[
    Thrusting out with [npc.her] Demon's Dagger, [npc.name] [npc.verb(attempt)] to stab [npc2.name] in the chest, but [npc.verb(end)] up missing [npc2.herHim]!
    ]]></missText>
    <missText><![CDATA[
    Striking out at [npc2.name] with [npc.her] Demon's Dagger, [npc.name] [npc.verb(let)] out a frustrated cry as [npc.she] [npc.verb(miss)] [npc.her] target!
    ]]></missText>
    <missText><![CDATA[
    With a quick step forwards, [npc.name] [npc.verb(lunge)] out at [npc2.name] with [npc.her] Demon's Dagger, but [npc.she] [npc.verb(miss)] [npc.her] target!
    ]]></missText>
</missDescriptions>