Help:Creating mods

Revision as of 22:05, 13 April 2022 by Arch Leaders (talk | contribs) (Added a proper guide to creating mods with BCML. Updated some of the other notes.)

Welcome, modders! This page contains useful information for anybody who wants to create mods. If you just want to use other people's mods, see Help:Using mods.

What can currently be modded?

  • Textures
  • Models
  • Actor parameters, including enemies, weapons, and armors
  • Adding new actors
  • Overworld and dungeon map files
  • Event flows, and as a direct consequence: cutscenes, NPC interactions, quests, minigames, etc.
  • Animations and various animation parameter files
  • Rigid body collisions
  • Text / dialogue
  • UI elements (HUD, title screen, logos, etc.)
  • Music and audio (cannot add new tracks, only edit/replace existing)
  • Effects and shaders (limited)

Getting set up


About BNPs

Modding has come a long way, and creating them has never been easier with BCML and the BNP (BOTW Nano Patch) format.

BNPs are a crucial part of modding Breath of the Wild, as they allow for small package distribution and accurate merging when used with BCML.

For more information on BNPs, check out this detailed guide by Torphedo.

Creating BNPs

BNPs can be made using the BCML BNP Creator in the Dev Tools tab.

The BNP Creator requires two fields to create a BNP, a name, and a mod folder.


Name

The name can be anything you choose, usually something that tells people what the mod is.
Example: "Invisible Majora's Mask" implies that it makes Majora's mask invisible, which it does.


Mod Folder

The mod folder is the contents of the mod. This folder requires at least one of the following folders (case sensitive):

  • content: Holds general content such as game models, effects, sounds, etc. (WiiU)
  • aoc: Has similar files as content, but this folder overwrites the DLC files instead of the base-game/update ones.
  • 01007EF00011E000/romfs: This is the Switch equivalent of content.
  • 01007EF00011F001/romfs: This is the Switch equivalent of aoc.
  • patches: Is used to load code patches with BCML. More info on code patches is available on Torphs GitHub.


The mod folder can also contain these other files/folders (case sensitive):

  • logs: Contains BCML log files; these should not be edited and are only for BCML to read/write.
  • options: Can be used to add sub-mods as selectable options to your final mod.
  • info.json: Holds the mods meta-data; BCML will create this automatically when you make a BNP.


There is no limit to how many files you can add to the mod folder, but you should only be placing files strictly necessary to your mod in the BNP to keep file sizes down.

To make sure of this, I use a different folder layout than is standard to keep organized.
It adds an extra sub-directory to the mod folder that can store assets only used by the mod creator.

Mod Folder/
├── Assets/
│   ├── textures/
│   │   ├── MyModel_Alb.dds
│   │   ├── MyModel_Spm.dds
│   │   └── MyModel_Nrm.dds
│   └── MyModel.blend
└── Build/
    ├── content/
    │   ├── Actor/
    │   │   ├── Pack/
    │   │   │   └── FldObj_MyModel_A_01.sbactorpack
    │   │   └── ActorInfo.product.sbyml
    │   └── Model/
    │       ├── FldObj_MyModel_A.sbfres
    │       └── FldObj_MyModel_A.Tex1.sbfres
    └── aoc/
        └── 0010/
            └── Map/
                └── MainField/
                    └── A-8/
                        └── A-8_Dynamic.smubin

When creating a mod in this format, point the BNP Creator to the Build folder.


Mod Structure

A general rule when making mods is if it exists in the game dump, it can go in your mod in the relative location.

For example, the WiiU game file UpdateDump/content/Model/Animal_Bear.sbfres would go in ModFolder/content/Model/Animal_Bear.sbfres; when this mod is loaded, Animal_Bear.sbfres will be overwritten by the file in your mod.

UpdateDump and ModFolder are both relative to your PC.


WiiU/Cemu Folder Structure
Mod Folder/
├── content/
│   ├── Model/
│   │   └── Animal_Bear.sbfres
│   └── Effect/
│       └── Weapon_Sword_070.seselist
├── aoc/
│   └── 0010/
│       └── Map/
│           └── MainField/
│               └── A-2/
│                   └── A-2_Dynamic.smubin
└── info.json


Switch/Yuzu Folder Structure
Mod Folder/
├── 01007EF00011E000/
│   └── romfs/
│       ├── Model/
│       │   └── Animal_Bear.sbfres
│       └── Effect/
│           └── Weapon_Sword_070.seselist
├── 01007EF00011F001/
│   └── romfs/
│       └── Map/
│           └── MainField/
│               └── A-2/
│                   └── A-2_Dynamic.smubin
└── info.json


Other/Misc

Everything else in the BNP Creator is pretty straightforward, but just in case you don't understand something, here's a brief on each optional field.

  • Image | A direct HTTP link to an image file or a path relative to the root of your mod folder. For example, image.png will try to load a file named image.png in your Mod Folder.
  • URL | An HTTP link to your mod page.
  • Version | The current version of your mod.
  • Description | An extended description of your mod. (Markdown text is supported)
  • Dependencies | A list of mods required for this mod.
  • Options | A list of options in the mod.


Create It

Once you have filled out all the fields you need for your mod, click the Create BNP button in the bottom right.

You will get prompted to save a BNP file; save it where you like. But be careful not to store it in the Mod Folder beside content, aoc, etc. It will get added to the BNP the next time you build it.


Modding Rules

The RSTB file

Note: Manual RSTB editing is not required when using BCML
The file ResourceSizeTable.product.rsizetable (referred to as the RSTB file) contains a list of size limits for almost every file in the game (calculated from the non-Yaz0-compressed file sizes). If you edit a file to make its filesize bigger, you'll need to edit this file to prevent errors. For details, see Help:Updating the RSTB.

File names and caching

The game assumes that any files with the same filename also have the same contents. If you don't follow this rule when editing files, the game might load the wrong version of the file, leading to errors. The same rule applies to texture names - all unique textures should have unique names, even if they're located in different files.

File extensions for compressed resources

In most cases, file extensions that start with .s are expected to be Yaz0-compressed files. Ensure that any file with such extensions is compressed. Most tools will automatically compress files when needed.

Example: .bactorpack -> .sbactorpack (after compression)

Edit priority

If a file exists in your update dump, edit that copy of it.
If it doesn't exist there, edit the one in your DLC dump.
If it doesn't exist in either the update files or the DLC files, edit the one from the base game dump.