Help:Adding items: Difference between revisions

Changed flag generation to use botw_flag_util
imported>Ginger
(Changed flag generation to use botw_flag_util)
Line 1: Line 1:
Mods that deal with items will often edit items that already exist in the game. However, this can lead to conflicts between mods, so it is generally advised to make a new item, instead. This tutorial will cover all of the steps needed to add new items, as well as multiple methods for completing each step.
Mods that deal with items will often edit items that already exist in the game. However, this can lead to conflicts between mods, so it is generally advised to make a new item, instead. This tutorial will cover all of the steps needed to add new items, as well as multiple methods for completing each step.


==Required tools==
== Required tools ==
Adding new items requires several tools, most of which are described and are available [[Help:Setting up tools|here]].
Adding new items requires several tools, most of which are described and are available [[Help:Setting up tools|here]].


*[https://www.python.org/downloads/release/python-374/ Python 3.7] is necessary for just about every tool (Python 3.8 exists, but is not currently compatible with [[Help:Tools/aamp|aamp]] or [[Help:Tools/BCML|BCML]])
* [https://www.python.org/downloads/release/python-374/ Python 3.7] is necessary for just about every tool (Python 3.8 exists, but is not currently compatible with [[Help:Tools/aamp|aamp]] or [[Help:Tools/BCML|BCML]])
*A text editor like [https://notepad-plus-plus.org/downloads/ Notepad++]
* A text editor like [https://notepad-plus-plus.org/downloads/ Notepad++]
*Wild Bits {{Install py package help|package=wildbits}}
* Wild Bits {{Install py package help|package=wildbits}}
*Breath of the Wild Cemu Mod Loader (or <code>bcml</code>) {{Install py package help|package=bcml}}
* Breath of the Wild Cemu Mod Loader (or <code>bcml</code>) {{Install py package help|package=bcml}}
*[https://github.com/KillzXGaming/Switch-Toolbox/releases Switch Toolbox]
* [https://github.com/KillzXGaming/Switch-Toolbox/releases Switch Toolbox]
*Hyrule Builder {{Install py package help|package=hyrule_builder}}
* Hyrule Builder {{Install py package help|package=hyrule_builder}}
* BOTW Flag Utilities {{Install py package help|package=botw_flag_util}}


==Tutorial==
== Tutorial ==


===Before we begin===
=== Before we begin ===
'''Do not skip this section, it is very important.'''
'''Do not skip this section, it is very important.'''


This tutorial will use several terms that you may not be familiar with, or will have specific definitions you may not have used before:
This tutorial will use several terms that you may not be familiar with, or will have specific definitions you may not have used before:


*File name (or FileName) - the name of a file. For example, for the file <code>Armor_001.sbfres</code>, the FileName is <code>Armor_001</code>
* File name (or FileName) - the name of a file. For example, for the file <code>Armor_001.sbfres</code>, the FileName is <code>Armor_001</code>
*File extension (or FileExtension) - the type/extension of a file. For example, for the file <code>Armor_001.sbfres</code>, the FileExtension is <code>sbfres</code>
* File extension (or FileExtension) - the type/extension of a file. For example, for the file <code>Armor_001.sbfres</code>, the FileExtension is <code>sbfres</code>
*Actor name (or ActorName) - the code name of the item, and the FileName of the actor pack. For example, the Hylian Tunic is <code>Armor_001_Upper</code>.
* Actor name (or ActorName) - the code name of the item, and the FileName of the actor pack. For example, the Hylian Tunic is <code>Armor_001_Upper</code>.
*<code>bfres</code> name (or BfresName) - the code name of the resource files containing the model and texture data for the actor, and the FileName of the <code>bfres</code> for an actor. For example, the Hylian Tunic is part of the Hylian Set and all Hylian Set resources are contained inside <code>Armor_001</code>. In general, an armor's BfresName is the first two parts of its ActorName (e.g. <code>Armor_001</code> out of <code>Armor_001_Upper</code>). This tutorial uses <code>sbfres</code> and <code>bfres</code> mostly interchangeably, but you can think of an <code>sbfres</code> as a ZIP archive that contains a <code>bfres</code>.
* <code>bfres</code> name (or BfresName) - the code name of the resource files containing the model and texture data for the actor, and the FileName of the <code>bfres</code> for an actor. For example, the Hylian Tunic is part of the Hylian Set and all Hylian Set resources are contained inside <code>Armor_001</code>. In general, an armor's BfresName is the first two parts of its ActorName (e.g. <code>Armor_001</code> out of <code>Armor_001_Upper</code>). This tutorial uses <code>sbfres</code> and <code>bfres</code> mostly interchangeably, but you can think of an <code>sbfres</code> as a ZIP archive that contains a <code>bfres</code>.
*Model name (or ModelName) - the code name of the model inside the resource files to be used. In almost all cases, this is the same as the ActorName. The only exceptions to this are for head armor models that have a mantle variant, like <code>Armor_001</code>. Their ActorName will end in <code>_Head</code>, and their ModelName will end in <code>_Head_A</code>.
* Model name (or ModelName) - the code name of the model inside the resource files to be used. In almost all cases, this is the same as the ActorName. The only exceptions to this are for head armor models that have a mantle variant, like <code>Armor_001</code>. Their ActorName will end in <code>_Head</code>, and their ModelName will end in <code>_Head_A</code>.
*Old - if something is referred to as "old," that means any files you are using as the base files for your new item. For example, if you are creating a new shield that performs similarly to <code>Weapon_Shield_001</code> (is a shield, is wooden, etc.) and you were copying its files to your mod, then <code>Weapon_Shield_001</code> would be the "old" actor name.
* Old - if something is referred to as "old," that means any files you are using as the base files for your new item. For example, if you are creating a new shield that performs similarly to <code>Weapon_Shield_001</code> (is a shield, is wooden, etc.) and you were copying its files to your mod, then <code>Weapon_Shield_001</code> would be the "old" actor name.
*New - anything that refers to the new item you are making. If something is not referred to as "old" or "new," then it is new. For example, if you are making <code>Armor_9001_Head</code> then that will be referred to as either the NewActorName and the ActorName.
* New - anything that refers to the new item you are making. If something is not referred to as "old" or "new," then it is new. For example, if you are making <code>Armor_9001_Head</code> then that will be referred to as either the NewActorName and the ActorName.


Vanilla weapons have the same name as their actor, model, and <code>bfres</code> names. For example, the actor <code>Weapon_Sword_001</code> has the model name <code>Weapon_Sword_001</code> and its resource files are in <code>Weapon_Sword_001.sbfres</code>.
Vanilla weapons have the same name as their actor, model, and <code>bfres</code> names. For example, the actor <code>Weapon_Sword_001</code> has the model name <code>Weapon_Sword_001</code> and its resource files are in <code>Weapon_Sword_001.sbfres</code>.
Line 32: Line 33:
If you are ever told to open a Powershell window and run a command, you can do that by holding shift, right-clicking somewhere inside the folder and clicking on "Open Powershell window here." Anytime you do this, it will be to run a Python script. All BotW modding Python scripts do not print '''anything''' to the Powershell window if they run successfully. If, at any time, one of the commands prints something to the Powershell window, stop right there and see if you can figure out what the problem is, or ask in the Discord.
If you are ever told to open a Powershell window and run a command, you can do that by holding shift, right-clicking somewhere inside the folder and clicking on "Open Powershell window here." Anytime you do this, it will be to run a Python script. All BotW modding Python scripts do not print '''anything''' to the Powershell window if they run successfully. If, at any time, one of the commands prints something to the Powershell window, stop right there and see if you can figure out what the problem is, or ask in the Discord.


===Setting up your folder structure===
=== Setting up your folder structure ===
The folder structure is important, as BotW will only load files if they're in a certain location. To begin with, you will want to create a folder structure that looks like this:
The folder structure is important, as BotW will only load files if they're in a certain location. To begin with, you will want to create a folder structure that looks like this:


*BreathOfTheWild_[MyAwesomeModName]
* BreathOfTheWild_[MyAwesomeModName]
**content
** content
***Actor
*** Actor
****Pack
**** Pack
***Model
*** Model
***Pack
*** Pack
***UI
*** UI
****StockItem
**** StockItem


Note that these names are case-sensitive.
Note that these names are case-sensitive.


===Creating the actor===
=== Creating the actor ===
First, figure out what item (that already exists in game) behaves closest to your new item. Find the <code>sbactorpack</code> file for that item, and copy it to <code>content\Actor\Pack</code>. You will find the original file in your dumped UPDATE files (not the base game files), in the same location. (<code>content\Actor\Pack</code>) Make sure you copy it, and don't move the original.
First, figure out what item (that already exists in game) behaves closest to your new item. Find the <code>sbactorpack</code> file for that item, and copy it to <code>content\Actor\Pack</code>. You will find the original file in your dumped UPDATE files (not the base game files), in the same location. (<code>content\Actor\Pack</code>) Make sure you copy it, and don't move the original.


Line 57: Line 58:
Once you have your mod files assembled navigate to the folder that contains your BreathOfTheWild_[MyAwesomeModName] folder, open a Powershell window, and run the command <code>hyrule_builder unbuild BreathOfTheWild_[MyAwesomeModName]</code>. It will take a bit of time to convert the files, and then create a new folder called BreathOfTheWild_[MyAwesomeModName]_unbuilt, which contains the files you will be editing.
Once you have your mod files assembled navigate to the folder that contains your BreathOfTheWild_[MyAwesomeModName] folder, open a Powershell window, and run the command <code>hyrule_builder unbuild BreathOfTheWild_[MyAwesomeModName]</code>. It will take a bit of time to convert the files, and then create a new folder called BreathOfTheWild_[MyAwesomeModName]_unbuilt, which contains the files you will be editing.


===Editing the actor pack files===
=== Editing the actor pack files ===
The actor pack files will be located in the various folders inside <code>content\Actor</code>. There will be certain parts of the files that you need to change. All instances of the old actor, model, and BFRES names will need to be changed to the new actor, model, and BFRES names. The following is a list of many of the changes that need to be made, but note that some of these may not apply to your item, and there are some changes that may not appear in this list. Be thorough when you look through the files for things that may need to be changed.
The actor pack files will be located in the various folders inside <code>content\Actor</code>. There will be certain parts of the files that you need to change. All instances of the old actor, model, and BFRES names will need to be changed to the new actor, model, and BFRES names. The following is a list of many of the changes that need to be made, but note that some of these may not apply to your item, and there are some changes that may not appear in this list. Be thorough when you look through the files for things that may need to be changed.
[[File:Addingitems_aampfilenames.png|alt=Actor pack file name changes|thumb|The underlined items need to be changed for this actor pack (in addition to the actor pack name and the contents of each file)]]
[[File:Addingitems_aampfilenames.png|alt=Actor pack file name changes|thumb|The underlined items need to be changed for this actor pack (in addition to the actor pack name and the contents of each file)]]


*File/Folder names:
* File/Folder names:
**changing the name of the <code>[ActorName].bmodellist</code> file inside <code>content\Actor\ModelList</code>
** changing the name of the <code>[ActorName].bmodellist</code> file inside <code>content\Actor\ModelList</code>
**changing the name of the <code>[ModelName].bphysics</code> file inside <code>content\Actor\Physics</code>
** changing the name of the <code>[ModelName].bphysics</code> file inside <code>content\Actor\Physics</code>
**changing the name of the <code>[ActorName].bxml</code> file inside <code>content\Actor\ActorLink</code>
** changing the name of the <code>[ActorName].bxml</code> file inside <code>content\Actor\ActorLink</code>
**changing the name of the <code>[ActorName].bgparamlist</code> file inside <code>content\Actor\GeneralParamList</code>
** changing the name of the <code>[ActorName].bgparamlist</code> file inside <code>content\Actor\GeneralParamList</code>
**changing the name of the <code>[BfresName]</code> folder inside <code>content\Physics\SupportBone</code>
** changing the name of the <code>[BfresName]</code> folder inside <code>content\Physics\SupportBone</code>
**changing the name of the <code>[ModelName].bphyssb</code> file inside <code>content\Physics\SupportBone\[BfresName]</code>
** changing the name of the <code>[ModelName].bphyssb</code> file inside <code>content\Physics\SupportBone\[BfresName]</code>
**changing the name of the <code>[BfresName]</code> folder inside <code>content\Physics\Cloth</code>
** changing the name of the <code>[BfresName]</code> folder inside <code>content\Physics\Cloth</code>
**changing the name of the <code>[ModelName].hkcl</code> file inside <code>content\Physics\Cloth\[BfresName]</code>
** changing the name of the <code>[ModelName].hkcl</code> file inside <code>content\Physics\Cloth\[BfresName]</code>
*Inside <code>bmodellist</code>:
* Inside <code>bmodellist</code>:
**changing the line that says <code>Folder: !str64 [BfresName]</code> to the new <code>bfres</code> name
** changing the line that says <code>Folder: !str64 [BfresName]</code> to the new <code>bfres</code> name
**changing the line that says <code>UnitName: !str64 [modelName]</code> to the new model name
** changing the line that says <code>UnitName: !str64 [modelName]</code> to the new model name
*Inside <code>bphysics</code>:
* Inside <code>bphysics</code>:
**changing the line that says <code>support_bone_setup_file_path: !str256 [BfresName]/[ModelName].bphyssb</code> to the new <code>bfres</code> and model names
** changing the line that says <code>support_bone_setup_file_path: !str256 [BfresName]/[ModelName].bphyssb</code> to the new <code>bfres</code> and model names
**changing the line that says <code>cloth_setup_file_path: !str256 [BfresName]/[ModelName].hkcl</code> to the new <code>bfres</code> and model names
** changing the line that says <code>cloth_setup_file_path: !str256 [BfresName]/[ModelName].hkcl</code> to the new <code>bfres</code> and model names
**'''Do not change anything with "Havok" in the name as those point to data inside the hkcl file which we cannot change.''' Physics should work fine without changing data ''inside'' the <code>hkcl</code> file, as long as you do change the ''name'' of the <code>hkcl</code> file.
** '''Do not change anything with "Havok" in the name as those point to data inside the hkcl file which we cannot change.''' Physics should work fine without changing data ''inside'' the <code>hkcl</code> file, as long as you do change the ''name'' of the <code>hkcl</code> file.
*Inside <code>bxml</code>:
* Inside <code>bxml</code>:
**changing the line that says <code>ActorCaptureUser: [ActorName]</code> to the new actor name
** changing the line that says <code>ActorCaptureUser: [ActorName]</code> to the new actor name
**changing the line that says <code>GParamUser: [ActorName]</code> to the new actor name
** changing the line that says <code>GParamUser: [ActorName]</code> to the new actor name
**changing the line that says <code>ModelUser: [ActorName]</code> to the new actor name
** changing the line that says <code>ModelUser: [ActorName]</code> to the new actor name
**changing the line that says <code>PhysicsUser: [ModelName]</code> to the new model name[[File:Addingitems_bgparamlist.jpg|thumb|Example of two parameters commonly changed, inside the bgparamlist file.]]
** changing the line that says <code>PhysicsUser: [ModelName]</code> to the new model name[[File:Addingitems_bgparamlist.jpg|thumb|Example of two parameters commonly changed, inside the bgparamlist file.]]
*Inside <code>bgparamlist</code>:
* Inside <code>bgparamlist</code>:
**If your item is an armor that is upgradeable, changing the line that says <code>NextRankName: !str64 [ActorName]</code> to the actor name for the actor that this one upgrades into. (In game terms, "upgradeable" means via the Great Fairies. If your armor is not upgradable, put <code>!str64</code> noting the extra space after the 4)
** If your item is an armor that is upgradeable, changing the line that says <code>NextRankName: !str64 [ActorName]</code> to the actor name for the actor that this one upgrades into. (In game terms, "upgradeable" means via the Great Fairies. If your armor is not upgradable, put <code>!str64</code> noting the extra space after the 4)
**The <code>bgparamlist</code> file also contains most of the information about the stats of items. For example, a weapon/shield's durability, a weapon's damage, a shield's block rate, an armor's defense, an armor's set (and therefore set bonus) are all stored here. You may want to change some of these things. A comprehensive list of the things inside the <code>bgparamlist</code> file is available [[Bgparamlist|here]]. Commonly changed parameters include: <code>Life</code> (the durability of the item, in the <code>General</code> category), <code>Power</code> (a weapons' damage, in the <code>Attack</code> category), <code>DefenceAddLevel</code> (an armor's defense rating, in the <code>Armor</code> category).
** The <code>bgparamlist</code> file also contains most of the information about the stats of items. For example, a weapon/shield's durability, a weapon's damage, a shield's block rate, an armor's defense, an armor's set (and therefore set bonus) are all stored here. You may want to change some of these things. A comprehensive list of the things inside the <code>bgparamlist</code> file is available [[Bgparamlist|here]]. Commonly changed parameters include: <code>Life</code> (the durability of the item, in the <code>General</code> category), <code>Power</code> (a weapons' damage, in the <code>Attack</code> category), <code>DefenceAddLevel</code> (an armor's defense rating, in the <code>Armor</code> category).


Once you've made your changes, '''make sure to save'''.
Once you've made your changes, '''make sure to save'''.


===Adding the actor info===
=== Adding the actor info ===
The previous step saw you creating the actual actor. This step is for creating the actor metadata that the game uses so that it knows your new actor exists. It also stores most data that appears in menus like the pause menu, crafting menu, or store menus.
The previous step saw you creating the actual actor. This step is for creating the actor metadata that the game uses so that it knows your new actor exists. It also stores most data that appears in menus like the pause menu, crafting menu, or store menus.


Inside <code>content\Actor\ActorInfo</code>, you will find a file for each actor in the game. Find the one for the old actor that you are using as your base, and copy it, changing the name of the new file to <code>[NewActorName].info.yml</code>, then open the file in a text editor. Change the following lines:
Inside <code>content\Actor\ActorInfo</code>, you will find a file for each actor in the game. Find the one for the old actor that you are using as your base, and copy it, changing the name of the new file to <code>[NewActorName].info.yml</code>, then open the file in a text editor. Change the following lines:


*<code>bfres: [BfresName]</code> to your new <code>bfres</code> name
* <code>bfres: [BfresName]</code> to your new <code>bfres</code> name
*<code>itemUseIconActorName: [ActorName]</code> to your new actor name
* <code>itemUseIconActorName: [ActorName]</code> to your new actor name
*<code>mainModel: [ModelName]</code> to your new model name
* <code>mainModel: [ModelName]</code> to your new model name
*Any additional information you changed in the actor pack that might be shown in any menu. For example, armor value of armor, defensive value of shields, damage of weapons, buying/selling price of items from/to a shop, crafting ingredients if the item is craftable, etc.
* Any additional information you changed in the actor pack that might be shown in any menu. For example, armor value of armor, defensive value of shields, damage of weapons, buying/selling price of items from/to a shop, crafting ingredients if the item is craftable, etc.


Once all the info is changed, '''make sure to save'''.
Once all the info is changed, '''make sure to save'''.


===Creating the resource files===
=== Creating the resource files ===
This section will cover the files that actually tell the game what the 3D model of the item looks like, in game. You'll need to copy the resources for the original item that you're modifying to your mod's <code>content\Model</code> folder. You will find the original resource files in your dumped UPDATE files (not the base game files), in the same location. (<code>content\Model</code>) The files will be called <code>[OldBfresName].sbfres</code> and <code>[OldBfresName].Tex.sbfres</code>. '''If you are modding for WiiU or Cemu, there are actually three files you will need: <code>[OldBfresName].sbfres</code>, <code>[OldBfresName].Tex1.sbfres</code>, and <code>[OldBfresName].Tex2.sbfres</code>. If <code>[OldBfresName].Tex1.sbfres</code> is not present in your UPDATE files, you will need to find it in your BASE GAME dumped files. This is the case for most, if not all, vanilla (non-DLC) items.'''
This section will cover the files that actually tell the game what the 3D model of the item looks like, in game. You'll need to copy the resources for the original item that you're modifying to your mod's <code>content\Model</code> folder. You will find the original resource files in your dumped UPDATE files (not the base game files), in the same location. (<code>content\Model</code>) The files will be called <code>[OldBfresName].sbfres</code> and <code>[OldBfresName].Tex.sbfres</code>. '''If you are modding for WiiU or Cemu, there are actually three files you will need: <code>[OldBfresName].sbfres</code>, <code>[OldBfresName].Tex1.sbfres</code>, and <code>[OldBfresName].Tex2.sbfres</code>. If <code>[OldBfresName].Tex1.sbfres</code> is not present in your UPDATE files, you will need to find it in your BASE GAME dumped files. This is the case for most, if not all, vanilla (non-DLC) items.'''


Line 128: Line 129:
When you are done, select any file or folder from the model <code>sbfres</code>, in the list on the left, and save it. Switch Toolbox will ask if you want to Yaz0 compress the file, click Yes. Then click on any file or folder from the texture <code>sbfres</code>, in the list on the left, and save it. Switch Toolbox will again ask if you want to Yaz0 compress the file, click Yes. If you are editing a WiiU texture <code>sbfres</code>, it will then ask you to save the Tex2 sbfres, so save it and Yaz0 compress it, as well. And that's it, you are done with the files that tell the game what the new item looks like.
When you are done, select any file or folder from the model <code>sbfres</code>, in the list on the left, and save it. Switch Toolbox will ask if you want to Yaz0 compress the file, click Yes. Then click on any file or folder from the texture <code>sbfres</code>, in the list on the left, and save it. Switch Toolbox will again ask if you want to Yaz0 compress the file, click Yes. If you are editing a WiiU texture <code>sbfres</code>, it will then ask you to save the Tex2 sbfres, so save it and Yaz0 compress it, as well. And that's it, you are done with the files that tell the game what the new item looks like.


===Creating an inventory icon===
=== Creating an inventory icon ===
This section covers the inventory icons, the square images you see in the inventory grid in the pause menu. These files are kept in <code>content\UI\StockItem</code> for inventory items. Copy the old <code>sbitemco</code> file for the item you are using as your foundation, to the same location in your mod files (<code>content\UI\StockItem</code>). An <code>sbitemco</code> file is pretty much the same thing as an <code>sbfres</code> for textures, so you will edit it the same way, using Switch Toolbox. Make sure to change the name of the file to <code>[NewActorName].sbitemco</code>, the name of the file it contains in Toolbox to <code>[NewActorName].bitemco</code>, and the texture it contains to <code>[NewActorName]</code>
This section covers the inventory icons, the square images you see in the inventory grid in the pause menu. These files are kept in <code>content\UI\StockItem</code> for inventory items. Copy the old <code>sbitemco</code> file for the item you are using as your foundation, to the same location in your mod files (<code>content\UI\StockItem</code>). An <code>sbitemco</code> file is pretty much the same thing as an <code>sbfres</code> for textures, so you will edit it the same way, using Switch Toolbox. Make sure to change the name of the file to <code>[NewActorName].sbitemco</code>, the name of the file it contains in Toolbox to <code>[NewActorName].bitemco</code>, and the texture it contains to <code>[NewActorName]</code>


===Creating an inventory name and description===
=== Creating an inventory name and description ===
For the in-game text concerning your item, you will need to navigate to <code>content\Pack\Bootup_[XXxx].pack\Message\Msg_[XXxx].product.ssarc</code>. There are many <code>msbt</code> files here, and all of them have text data for the game. For your actor, you'll look in the <code>ActorType</code> folder. Find the file that fits your item type, and open it in your text editor of choice.
For the in-game text concerning your item, you will need to navigate to <code>content\Pack\Bootup_[XXxx].pack\Message\Msg_[XXxx].product.ssarc</code>. There are many <code>msbt</code> files here, and all of them have text data for the game. For your actor, you'll look in the <code>ActorType</code> folder. Find the file that fits your item type, and open it in your text editor of choice.


Line 140: Line 141:
When you're done, '''make sure to save'''.
When you're done, '''make sure to save'''.


===Creating the save game data flags===
=== Creating the save game data flags ===
'''You should ignore this section if you are making an armor or something that never goes into Link's inventory.'''
'''You should ignore this section if you are making something that never goes into Link's inventory.'''


This section covers the save game flags, which the game uses to remember whether or not you've picked up an item before. If you are adding a common item, like a material or consumable, this will make it so that the little popup that happens the first time you pick up an item, doesn't happen every single time you pick your new item up.
This section covers the save game flags, which the game uses to remember certain things about your item. If you are adding a common item, like a material or consumable, this will make it so that the little popup that happens the first time you pick up an item, doesn't happen every single time you pick your new item up. It also remembers other things, like the whether or not a picture has been taken of your item, whether or not you decided to save that picture, how big the picture is, how long it's been in your inventory, and how long you've had it equipped.


Navigate to <code>content\Pack\Bootup.pack\GameData\gamedata.ssarc</code> and find the flag for your base game item. It might be contained in any of the <code>bool_data_#.bgdata.yml</code> files. The name you are looking for is <code>IsGet_[OldActorName]</code>.
Navigate to the folder that contains your BreathOfTheWild_[MyAwesomeModName] folder you made, open a Powershell window, and run the command <code>botw_flag_util generate BreathOfTheWild_[MyAwesomeModName] -a [-b]</code>. '''If you are modding for WiiU or Cemu, add the -b. If modding for Switch, don't add it. If you run it the wrong way by accident, just run it again the right way. It will let you know that nothing changed, and then write the file for the other console.'''
[[File:Addingitems_crc32hashpython.png|thumb|After running the python command, copy the underlined result to use as your HashValue]]
Copy the entire section for the flag into the space right after that flag. Change <code>IsGet_[OldActorName]</code> to <code>IsGet_[NewActorName]</code>. Then, open a new Powershell window anywhere. Use the command <code>python</code> to enter a python command line. Run the command <code>import ctypes; import binascii; ctypes.c_int32(binascii.crc32(b''''IsGet_[NewActorName]'''<nowiki/>')).value</code> to obtain a positive or negative number. (Bolding has been added to distinguish the name of the flag. You need to use the actual name of the flag you're adding.)
[[File:Addingitems_booldata0.jpg|thumb|Once you've copied the boolean data section, change the DataName and HashValue to match your new item.]]
In your text editor, paste the result from your calculator into the <code>HashValue</code> after <code>IsGet_[NewActorName]</code>, and save the file.


 
=== Finishing up and installing the mod ===
===Finishing up and installing the mod===
Now that all the files have been edited, you will need to pack them all back up. Go back to the folder that contains BreathOfTheWild_[MyAwesomeModName]_unbuilt, open a Powershell window, and run the command <code>hyrule_builder build [--be] BreathOfTheWild_[MyAwesomeModName]_unbuilt</code>. '''If you are modding for WiiU or Cemu, add the --be. If you don't, the error you get will seem very confusing. This is because it's looking for the Switch paths and not finding them.''' After a little bit of conversion, a new folder will be created, called BreathOfTheWild_[MyAwesomeModName]_unbuilt_build. That folder contains your completed mod. Delete the old BreathOfTheWild_[MyAwesomeModName] and rename the completed mod folder to BreathOfTheWild_[MyAwesomeModName].
Now that all the files have been edited, you will need to pack them all back up. Go back to the folder that contains BreathOfTheWild_[MyAwesomeModName]_unbuilt, open a Powershell window, and run the command <code>hyrule_builder build [--be] BreathOfTheWild_[MyAwesomeModName]_unbuilt</code>. '''If you are modding for WiiU or Cemu, add the --be. If you don't, the error you get will seem very confusing. This is because it's looking for the Switch paths and not finding them.''' After a little bit of conversion, a new folder will be created, called BreathOfTheWild_[MyAwesomeModName]_unbuilt_build. That folder contains your completed mod. Delete the old BreathOfTheWild_[MyAwesomeModName] and rename the completed mod folder to BreathOfTheWild_[MyAwesomeModName].


And now you are done! To use the mod, open <code>bcml</code> via Powershell (just run the command <code>bcml</code>) and select Install... Then select Add Folder, select the <code>BreathOfTheWild_[MyAwesomeModName]</code> folder, and click OK. Wait for it to install, and you're ready to play the game with your new item!
And now you are done! To use the mod, open <code>bcml</code> via Powershell (just run the command <code>bcml</code>) and select Install... Then select Add Folder, select the <code>BreathOfTheWild_[MyAwesomeModName]</code> folder, and click OK. Wait for it to install, and you're ready to play the game with your new item!


==Troubleshooting==
== Troubleshooting ==


===My actor isn't appearing in the game!===
=== My actor isn't appearing in the game! ===
Make sure the actor's info entry (part 5 of the tutorial) is correct. Formatting is important here. It's also important to make sure your actor's name is valid. If it isn't, the game won't know what to do with it, so it won't create it. For example, weapons need to be named <code>Weapon_[WeaponProfile]_[AnythingElseYouWant]</code>, while armors need to be named <code>Armor_[ThreeDigitNumber]_[AnythingElseYouWant]_[Head/Upper/Lower]</code> (Except <code>Armor_001_Head</code> or <code>Armor_001_G_Head</code> both work, but <code>Armor_001__Head</code> doesn't because it has two underscores between 001 and Head)
Make sure the actor's info entry (part 5 of the tutorial) is correct. Formatting is important here. It's also important to make sure your actor's name is valid. If it isn't, the game won't know what to do with it, so it won't create it. For example, weapons need to be named <code>Weapon_[WeaponProfile]_[AnythingElseYouWant]</code>, while armors need to be named <code>Armor_[ThreeDigitNumber]_[AnythingElseYouWant]_[Head/Upper/Lower]</code> (Except <code>Armor_001_Head</code> or <code>Armor_001_G_Head</code> both work, but <code>Armor_001__Head</code> doesn't because it has two underscores between 001 and Head)


===My weapon/armor actor is appearing in my inventory, but it doesn't equip and disappears if I try to drop it from my inventory!===
=== My weapon/armor actor is appearing in my inventory, but it doesn't equip and disappears if I try to drop it from my inventory! ===
This one's difficult: Something, somewhere, in the actor or in one of the resource files, is broken. It could be just about anything except for the text and flags. Whenever the game encounters something it doesn't expect, it silently fails and doesn't create the actor, but doesn't tell you why. There isn't really any better way to pinpoint what could be causing the issue.
This one's difficult: Something, somewhere, in the actor or in one of the resource files, is broken. It could be just about anything except for the text and flags. Whenever the game encounters something it doesn't expect, it silently fails and doesn't create the actor, but doesn't tell you why. There isn't really any better way to pinpoint what could be causing the issue.


===My game is crashing when loading the item!===
=== My game is crashing when loading the item! ===
Another difficult one, but typically this is because the way you placed the item in the world (which is not covered by this tutorial) was wrong, or, if it's crashing when equipping it (if an item) or when loading it into the world (if it's a field object), it's because the model is broken. Check the model replacement tutorial for info on the "vertex buffers" and what to do about them.
Another difficult one, but typically this is because the way you placed the item in the world (which is not covered by this tutorial) was wrong, or, if it's crashing when equipping it (if an item) or when loading it into the world (if it's a field object), it's because the model is broken. Check the model replacement tutorial for info on the "vertex buffers" and what to do about them.


===My game is crashing after shaders compile!===
=== My game is crashing after shaders compile! ===
Depending on how many mods you have installed, the number of game data flags your game has can cause it to crash. The game loads all flags into a special section of memory when booting up, and if too many flags are loaded, the game doesn't have enough memory to hold them all, and crashes. The Wii U version is limited to about 650 more flags than the vanilla game has. We don't know the limit of the Switch version, but we do know that it is much higher, due to the much larger amount of memory the Switch has.
Depending on how many mods you have installed, the number of game data flags your game has can cause it to crash. The game loads all flags into a special section of memory when booting up, and if too many flags are loaded, the game doesn't have enough memory to hold them all, and crashes. The Wii U version is limited to about 650 more flags than the vanilla game has. We don't know the limit of the Switch version, but we do know that it is much higher, due to the much larger amount of memory the Switch has.
[[Category:Guides]]
[[Category:Guides]]
autopatrol, editnews
151

edits