How to make Anything - Catman-232/Homebrewery GitHub Wiki
This page was up to date as of version 4.0.0
Anything? That's a bit vague!
Homebrewery is designed with a "folder structure as context" mentality, to keep things intuitive (I hope). The HomebreweryFiles
folder inside a content pack may contain a folder for every type of thing that HB can import.
At the moment this list of folder names is:
- ArmorRender
- Cape
- Chestpiece
- Dye
- Eyes
- Hair
- Helm
- Leggings
- Mesh
- Mouth
- SFX
- Shield
- Skin
- TradeItem
- Weapon
Any other folders are ignored.
Additonally, inside of Eyes, Mouth and Skin are these Race folders:
- Byrdle
- Chang
- HB_ALLRACES (For parts being sent to every race's list)
- Imp
- Kubold
- Poon
Any other folders are ignored.
Inside of the Type folders (or Race folders) is where you put folders representing the thing itself. So for example BunhostEars
inside Helm
; or SaucyGoblin_MeatsDSLs
inside Imp
, inside Mouth
. This folder name is generally used as part of the internal naming of the thing, this is important for ArmorRender
, Mesh
and SFX
imports especially as you will need to refer to them by their internal name in the params files of items.
The Bunhost Ears Helm's param file has the line "_helmRender": "Catman-Homebrewery-ArmorRender-BunhostEars",
. This naming convention states the name of the content pack folder, the type of thing it is, and the name of the thing's folder. Indeed, Homebrewery (referred to by its alias Catman-Homebrewery
) contains the ArmorRender
folder, and inside it is a BunhostEars
folder (containing the glb file for the model).
The Can of Whoop Ass Consumable's param file has the line "usesound": "Catman-Homebrewery-SFX-MeteorSmash-UseSound",
. This is the same naming convention as above except that things in the SFX
folder can contain more than one file, so you have to specify which one. For Consumables there's only a single valid one anyway (use), but weapons can have three (draw, swing, hit). This will be detailed on a dedicated SFX page.
Caution
ThingFolder names should ideally not be changed!
In order to prevent disasterous Item Dictionary implosions due to naming collisions, HB automatically appends the content pack folder name and the ThingFolder name to the end of the item's name. Changing this name (And/or an item's name in its param file) will effectively make it a different item!
You won't see this in-game as I have gone to the trouble of hiding it from you. But this item name is how the game stores, saves and syncs items everywhere, so changing the name of the item, or the name of the folder the item is imported from, will potentially cause issues for players.
In the save files they will look like this #HB#Bunhost Ears`Catman-Homebrewery-Helm-BunhostEars#HB#
, the prefix, suffix and backtick are so I can conveniently extract the clean item display name for editing any instances of the game displaying it (e.g. tooltips). So as you can see, both the item's name from the param and the item's ThingFolder name are part of this, in order to ensure names are unique.
When the game tries to load an item from the save, in some cases it does not check if the return was null before trying to use the invalid item. This was troublesome most of all for items in the Vanity Slots, but is also a problem for the Storage UI, the game does not remove those null items and encounters exceptions as a result.
Homebrewery features a patch to empty your Vanity Slots of any invalid items in order to prevent a pretty nasty explosion in the gear display code. I can't really do anything about the Storage boxes though, as it would risk further problems being introduced that could break the whole thing, so be smart and don't put modded items in there!
Inside Homebrewery's own HomebreweryFiles
, which can be found inside BepInEx > config
if mod manager installed, you can find an extra folder called Template
. This folder contains a prefab ThingFolder for each item you can make with HB (e.g. Capes, Chestpieces, Consumables, Dyes, Helms, Leggings, Shields, Trade Items, Weapons). You can copy and paste these to use as the basis of custom items you are making, they all contain a param.txt
with examples of the properties each item type can have, as well as an icon.png
, and a filler texture for every model part for the gear items. The Chestpiece and Leggings templates feature edits of Kiseff's own UV map textures for body and legs.
As of version 3.13.85, Homebrewery will look for a folder inside BepInEx > config
named ContentPacks
. This is a special folder that HB will load content packs from as if they were installed manually into BepInEx > plugins
. Crucially, this allows you to test a content pack using the correct structure for a Thunderstore mod package, which neccesitates a plugins
"override" folder inside the mod's folder as a wrapper for the other folders in the package (e.g. Catman232-Homebrewery > Plugins > HomebreweryFiles
). If you look at any mod that's been installed by the mod manager, you won't see this folder, as it is consumed in the installation process. Without this "override" folder, the mod manager will flatten the contents of any folders in the package, which would be pretty problematic.
Inside ContentPacks
you will find Catman-ExamplePack
an entire prefab mod package, featuring the four metadata files that Thunderstore looks for in a package (manifest.json
, icon.png
, README.md
and CHANGELOG.md
), the Plugins
"override" folder, containing a fully populated HomebreweryFiles
- it has every possible TypeFolder inside. It also contains the Template items from the aforementioned Template folder. You can copy and paste this content pack example to use as a basis for your own, just ensure you edit the name and metadata files accordingly! You do not need to keep any of the folders if they're empty! (Oh and you can delete the file in there that reminds you about this too)
Thunderstore will name your content pack folder using your "team" name and the mod's name inside the manifest.json
file. What your zip file is named when you upload the mod is irelevant! So it can be considered wise to name your content pack's folder what Thunderstore would end up calling it, so it will match it when automatically installed.
If you actually read all that, you have my admiration, it was very difficult to focus on putting all of this into words without being either too vague or overwhelmingly descript.
Now you can move on to the next parts:
- How to configure your content pack mod package
- How to make an item
- How to make a character part
- How to add a sound effect
- How to add a custom model part