Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Modding:Creating Item Icons

From bg3.wiki
Revision as of 13:13, 26 February 2024 by CommanderStrawberry (talk | contribs)

Dimensions

An item Icon has 3 dds parts, all perfect squares.

Tooltip Icon

This is 380x380px icon in the best quality it will be seen, when you hover over the item in the inventory.

It has a fade gradient from the bottom.

Controller Icon

This is a 144x144px icon. It will be seen by people who play the game with a game controller.

It is the same as the above, but it has no fade gradient.

Icon Atlas

This is a 64x64px square tile that will be seen in the inventory and hotbar.

It is part of an atlas. The atlas requires code to register in the game(see below).

Folder Structure of Icons

MySweetMod>Public>Game>Assets>ControllerUIicons>items_png 144px icons for your items

MySweetMod>Public>Game>Assets>ControllerUIicons>skills_png 144px icons for your spells and ability icons

MySweetMod>Public>Game>Assets>Tooltips>Icons 380px spell icons

MySweetMod>Public>Game>Assets>Tooltips>ItemIcons 380px item icons


MySweetMod\Public\MySweetMod\Assets\Textures\Icons 'MySweetMod_Icons.dds' Icon atlas dds goes here.

MySweetMod\Public\MySweetMod\Content\UI\[PAK]_UI Your _merged.lsx goes here. This tells the game where the atlas is. (and has its own UUID)

MySweetMod\Public\MySweetMod\GUI Icons_Items.lsx goes here. This tells the game what size the atlas is, where the image is on the atlas and what name the icon has to link it all up. This file is NOT converted to lsf!

Sample Code

If your mod uses only one icon and has a 64x64 atlas, you can use this:

<?xml version="1.0" encoding="utf-8"?>
<save>
   <version major="4" minor="0" revision="9" build="328" /> 
   <region id="TextureAtlasInfo"> 
       <node id="root">
           <children>
<node id="TextureAtlasIconSize">
                   <attribute id="Height" type="int64" value="64"/>
                   <attribute id="Width" type="int64" value="64"/>
               </node>
               <node id="TextureAtlasPath">
                   <attribute id="Path" type="LSString" value="Assets/Textures/Icons/MySweetMod_Icons.dds"/>
                   <attribute id="UUID" type="FixedString" value="GENERATE NEW UUID HERE"/>
               </node>
             <node id="TextureAtlasTextureSize">
                   <attribute id="Height" type="int64" value="64"/>
                   <attribute id="Width" type="int64" value="64"/>
               </node>
<node id="IconUV">
<attribute id="MapKey" type="FixedString" value="MySweetMod_Item_Icon"/> 1
<attribute id="U1" type="float" value="0.0"/> Left side of icon
<attribute id="U2" type="float" value="1.0"/> Right side of icon
<attribute id="V1" type="float" value="0.0"/> Top side of icon
<attribute id="V2" type="float" value="1.0"/> Bottom side of icon
</node> 
           </children>
       </node>
   </region>
</save>

If you are making a mod that has a 256 size atlas room for 16 icons, you can use this:

256x256 image template for icons. Each square is 64 px across.
<save>
   <version major="4" minor="0" revision="9" build="328" />
   <region id="TextureAtlasInfo"> 
       <node id="root">
           <children>
               <node id="TextureAtlasIconSize">
                   <attribute id="Height" type="int64" value="64"/>
                   <attribute id="Width" type="int64" value="64"/>
               </node>
               <node id="TextureAtlasPath">
                   <attribute id="Path" type="LSString" value="Assets/Textures/Icons/MySweetMod_Icons.dds"/>
                   <attribute id="UUID" type="FixedString" value="GENERATE UUID HERE"/>
               </node>
               <node id="TextureAtlasTextureSize">
                   <attribute id="Height" type="int64" value="256"/>
                   <attribute id="Width" type="int64" value="256"/>
               </node>
           </children>
       </node>
   </region>
   <region id="IconUVList">
       <node id="root">
           <children>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_1_Icon"/> 1
                   <attribute id="U1" type="float" value="0.0"/> Left
                   <attribute id="U2" type="float" value="0.25"/> Right
                   <attribute id="V1" type="float" value="0.0"/> Top
                   <attribute id="V2" type="float" value="0.25"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_2_Icon"/> 2
                   <attribute id="U1" type="float" value="0.25"/> Left
                   <attribute id="U2" type="float" value="0.5"/> Right
                   <attribute id="V1" type="float" value="0.0"/> Top
                   <attribute id="V2" type="float" value="0.25"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_3_Icon"/> 3
                   <attribute id="U1" type="float" value="0.5"/> Left
                   <attribute id="U2" type="float" value="0.75"/> Right
                   <attribute id="V1" type="float" value="0.0"/> Top
                   <attribute id="V2" type="float" value="0.25"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_4_Icon"/> 4
                   <attribute id="U1" type="float" value="0.75"/> Left
                   <attribute id="U2" type="float" value="1.0"/> Right
                   <attribute id="V1" type="float" value="0.0"/> Top
                   <attribute id="V2" type="float" value="0.25"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_5_Icon"/> 1
                   <attribute id="U1" type="float" value="0.0"/> Left
                   <attribute id="U2" type="float" value="0.25"/> Right
                   <attribute id="V1" type="float" value="0.25"/> Top
                   <attribute id="V2" type="float" value="0.5"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_6_Icon"/> 2
                   <attribute id="U1" type="float" value="0.25"/> Left
                   <attribute id="U2" type="float" value="0.5"/> Right
                   <attribute id="V1" type="float" value="0.25"/> Top
                   <attribute id="V2" type="float" value="0.5"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_7_Icon"/> 3
                   <attribute id="U1" type="float" value="0.5"/> Left
                   <attribute id="U2" type="float" value="0.75"/> Right
                   <attribute id="V1" type="float" value="0.25"/> Top
                   <attribute id="V2" type="float" value="0.5"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_8_Icon"/> 4
                   <attribute id="U1" type="float" value="0.75"/> Left
                   <attribute id="U2" type="float" value="1.0"/> Right
                   <attribute id="V1" type="float" value="0.25"/> Top
                   <attribute id="V2" type="float" value="0.5"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_9_Icon"/> 1
                   <attribute id="U1" type="float" value="0.0"/> Left
                   <attribute id="U2" type="float" value="0.25"/> Right
                   <attribute id="V1" type="float" value="0.5"/> Top
                   <attribute id="V2" type="float" value="0.75"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_10_Icon"/> 2
                   <attribute id="U1" type="float" value="0.25"/> Left
                   <attribute id="U2" type="float" value="0.5"/> Right
                   <attribute id="V1" type="float" value="0.5"/> Top
                   <attribute id="V2" type="float" value="0.75"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_11_Icon"/> 3
                   <attribute id="U1" type="float" value="0.5"/> Left
                   <attribute id="U2" type="float" value="0.75"/> Right
                   <attribute id="V1" type="float" value="0.5"/> Top
                   <attribute id="V2" type="float" value="0.75"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_12_Icon"/> 4
                   <attribute id="U1" type="float" value="0.75"/> Left
                   <attribute id="U2" type="float" value="1.0"/> Right
                   <attribute id="V1" type="float" value="0.5"/> Top
                   <attribute id="V2" type="float" value="0.75"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_13_Icon"/> 1
                   <attribute id="U1" type="float" value="0.0"/> Left
                   <attribute id="U2" type="float" value="0.25"/> Right
                   <attribute id="V1" type="float" value="0.75"/> Top
                   <attribute id="V2" type="float" value="1.0"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_14_Icon"/> 2
                   <attribute id="U1" type="float" value="0.25"/> Left
                   <attribute id="U2" type="float" value="0.5"/> Right
                   <attribute id="V1" type="float" value="0.75"/> Top
                   <attribute id="V2" type="float" value="1.0"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_15_Icon"/> 3
                   <attribute id="U1" type="float" value="0.5"/> Left
                   <attribute id="U2" type="float" value="0.75"/> Right
                   <attribute id="V1" type="float" value="0.75"/> Top
                   <attribute id="V2" type="float" value="1.0"/> Bottom
               </node>
               <node id="IconUV">
                   <attribute id="MapKey" type="FixedString" value="MySweetMod_16_Icon"/> 4
                   <attribute id="U1" type="float" value="0.75"/> Left
                   <attribute id="U2" type="float" value="1.0"/> Right
                   <attribute id="V1" type="float" value="0.75"/> Top
                   <attribute id="V2" type="float" value="1.0"/> Bottom
               </node>
           </children>
       </node>
   </region>
</save>


Tools to Create Icons

- The Modder's Multitool has an atlas converter.

- Invisible Head and Body

- Custom Backgrounds

- Chroma Key Droppable Object

- Visible Shields - if you have made a shield, this will make it visible in the respec screen.

- Sample Equipment Mod has a template for icons that still works.

- Mod Builder will generate LSX code and folder structure for you. It is recommended you use this over the sample equipment one, as its atlas is more compact, and few mods add 54+ icons.

Basic image editing guide to create icons

  • Install the Custom Backgrounds background mod
  • Put the clothes or the weapon on your character, and enter the respec screen via Withers.
  • Alternately, you can edit the equipment.txt of a class to have your outfit as its starting equipment, and start a new game to look at the character in the CC
  • Screenshot
  • Paste your screenshot into your image editing program.
  • Select and Remove background
  • Create border around object (edit > stroke) > (still selected) Gaussian blur. You can also experiment with colour layers.
  • Add the fade gradient. You should have 2 different .PNG versions of the icon, one with the fade out and one without.
  • Size correctly, and save as .DDS

Compression

Save your icons in .DDS DTX5, No Mipmaps. (Mipmaps are only needed for things that move closer and further to the camera, they will only make your icons blurry)

Notably you will need to name your atlas .dds NOT .DDS. (or to match whatever you have written in your .lsx code)