Modding:Creating Item Icons: Difference between revisions
No edit summary |
No edit summary |
||
Line 224: | Line 224: | ||
- [https://www.nexusmods.com/baldursgate3/mods/3862 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. | - [https://www.nexusmods.com/baldursgate3/mods/3862 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. | ||
- [https://www.tumblr.com/gaylockpick/tagged/mirza's%20resources Icon resource ripped from game] | |||
== Basic image editing guide to create icons == | == Basic image editing guide to create icons == |
Revision as of 13:15, 26 February 2024
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:
<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.
- 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.
- Icon resource ripped from game
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)