Skip to main content

A mod manager for The Legend of Zelda: Breath of the Wild

Project description

BCML Logo

BCML: BOTW Cross-Platform Mod Loader

A mod merging and managing tool for The Legend of Zelda: Breath of the Wild

BCML Banner

Purpose

Why a mod loader for BOTW? Installing a mod is usually easy enough once you have a homebrewed console or an emulator. Is there a need for a special tool?

Yes. As soon as you start trying to install multiple mods, you will find complications. The BOTW game ROM is fundamentally structured for performance and storage use on a family console, without any support for modification. As such, files like the resource size table or TitleBG.pack will almost inevitably begin to clash once you have more than a mod or two. Symptoms can include mods simply taking no effect, odd bugs, actors that don't load, hanging on the load screen, or complete crashing. BCML exists to resolve this problem. It identifies, isolates, and merges the changes made by each mod into a single modpack that just works.

Prerequisites

  • Windows 10+ (7-8 might work but are not officially supported) or basically any modern Linux distribution
  • A legal, unpacked game dump of The Legend of Zelda: Breath of the Wild for Switch (version 1.6.0) or Wii U (version 1.5.0)
  • The latest x64 Visual C++ redistributable
  • Cemu (optional)

Setup

There are two main ways to install BCML.

PyPI

Install Python 3.7 - 3.10 (64 bit version), making sure to add it to your PATH, and then run pip install bcml.

Note for Linux users: Because of the ways different distros handle Python packaging, it often works better to install BCML in some contained environment. There are a few options for this. The easiest would be to use pipx. You can install pipx through pip, and then run pipx install bcml. In some cases you might need to also run pipx inject bcml pywebview[qt].

Note for Linux white screen bug: Try setting the environmental variable: QTWEBENGINE_DISABLE_SANDBOX=1.

Another option for Linux users is using a virtual environment ("venv"). To do so, you can run something like this:

python -m venv bcml_env
source bcml_env/bin/activate # will activate the venv
pip install bcml

Full Linux Example with CEMU

sudo pacman -S python39 Adjust for you distribution, arch defaults to a newer python

python3.9 -m venv /.local/bcml_env
source ~/.local/bcml_env/bin/activate
python3.9 -m pip install bcml
~/.local/bcml_env/bin/bcml

to launch BCML in the future

source ~/.local/bcml_env/bin/activate; ~/.local/bcml_env/bin/bcml

  • In BCML, check 'without cemu' and set export path to '~/.local/share/cemu/graphicPacks/BreathOfTheWild_BCML'
  • install your mods
  • execute curl https://pastebin.com/raw/igCLK2tz -o ~/.local/share/cemu/graphicPacks/BreathOfTheWild_BCML/rules.txt
  • If your mods still don't load, verify that ~/.local/share/cemu/graphicPacks/BreathOfTheWild_BCML/rules.txt exist and try 'disable links for master mod' in BCML settings

Building from Source

Building from source requires, in addition to the general prerequisites:

  • Python 3.7 - 3.10 64 bit

  • Rust 1.60+ (nightly)

  • Node.js v14+

  • mkdocs and mkdocs-material

    Run pip install mkdocs mkdocs-material in venv if not using bootstrap.sh

Steps to build from source:

  1. Create and activate a Python virtual environment (venv)

    1. Open terminal to repo root folder
    2. python -m venv venv
    3. Activate the venv (usually venv/bin/activate on Linux or venv\Scripts\activate.ps1 on Windows)
  2. Install Python requirements

    1. Open terminal to repo root folder
    2. Run pip install -r requirements.txt
    3. Also install Maturin: pip install maturin
  3. Build Rust extension module

    1. Open terminal to repo root folder
    2. Run maturin develop (or maturin develop --release for performance)
  4. Prepare the webpack bundle

    1. Open terminal to bcml/assets
    2. Run npm install
    3. Run npm run build (or npm run test to watch while editing)
  5. Build the docs

    1. Open terminal to repo root folder
    2. Run mkdocs build
  6. Create an installable wheel with maturin build or run without installing with python -m bcml

Note that on Linux, you can simply run bootstrap.sh to perform these steps automatically unless you would like more control.

Usage and Troubleshooting

For information on how to use BCML, see the Help dialog in-app or read the documentation on the repo. For issues and troubleshooting, please check the official Troubleshooting page.

Contributing

BOTW is an immensely complex game, and there are a number of new mergers that could be written. If you find an aspect of the game that can be complicated by mod conflicts, but BCML doesn't yet handle it, feel free to try writing a merger for it and submitting a PR.

Python and JSX code for BCML is subject to formatting standards. Python should be formatted with Black. JSX should be formatted with Prettier, using the following settings:

{
    "prettier.arrowParens": "avoid",
    "prettier.jsxBracketSameLine": true,
    "prettier.printWidth": 88,
    "prettier.tabWidth": 4,
    "prettier.trailingComma": "none"
}

License

This software is licensed under the terms of the GNU General Public License, version 3 or later. The source is publicly available on GitHub.

This software includes the 7-Zip console application 7z.exe and the library 7z.dll, which are licensed under the GNU Lesser General Public License. The source code for this application is available for free at https://www.7-zip.org/download.html.

This software includes part of a modified copy of the pywebview Python package, copyright 2020 Roman Sirokov under the BSD-3-Clause License. The source code for the original library is available for free at https://github.com/r0x0r/pywebview.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

bcml-3.10.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.8 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

bcml-3.10.8-cp311-none-win_amd64.whl (18.8 MB view details)

Uploaded CPython 3.11 Windows x86-64

bcml-3.10.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.8 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

bcml-3.10.8-cp310-none-win_amd64.whl (18.8 MB view details)

Uploaded CPython 3.10 Windows x86-64

bcml-3.10.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

bcml-3.10.8-cp39-none-win_amd64.whl (18.8 MB view details)

Uploaded CPython 3.9 Windows x86-64

bcml-3.10.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.8 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

bcml-3.10.8-cp38-none-win_amd64.whl (18.8 MB view details)

Uploaded CPython 3.8 Windows x86-64

bcml-3.10.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.8 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

bcml-3.10.8-cp37-none-win_amd64.whl (18.8 MB view details)

Uploaded CPython 3.7 Windows x86-64

bcml-3.10.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.8 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

File details

Details for the file bcml-3.10.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.10.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 89f7bbe8e41266b2cb2ada2f5915d242e3c04b21fa879f78ad94c504710412ec
MD5 21701f06384a03e493ea4116f0762a41
BLAKE2b-256 063a05f8d3c5f2be335fac1b45f60702fb02c0e22bfa452c7b1d0ce5ff2efa74

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp311-none-win_amd64.whl.

File metadata

  • Download URL: bcml-3.10.8-cp311-none-win_amd64.whl
  • Upload date:
  • Size: 18.8 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.14.12

File hashes

Hashes for bcml-3.10.8-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 852602f205c150df2b4ea83eda6b3679af5fcc6af71eb23ed30677082ba0beed
MD5 d5f7db3bbd8ebb5859346dd80286cca2
BLAKE2b-256 80c25f5ff0c2080bd8d92413e2cca039d1f4b4af6e7525dac3c3aa3a43d6a6d5

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.10.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fef942f32f484f101c1de98dac83d9b50e9269b365bc68fc2de4fba76282bfc3
MD5 d8cabcb80decc46fa5f2ab3715bbe918
BLAKE2b-256 269ec4b48efd8959272a775c794e35a84f966db0234352779b47a12ebb129b00

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp310-none-win_amd64.whl.

File metadata

  • Download URL: bcml-3.10.8-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 18.8 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.14.12

File hashes

Hashes for bcml-3.10.8-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 402b983a2355428c961b8121b3ceba3d8ea005574dfd740351ddf581a638ad13
MD5 e5f4a5d2cb36004723cc34726ced4110
BLAKE2b-256 d27e25f8588249b7ea581da7aba2410b72677817eff45abbaca8175326395cd6

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.10.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1bdc84f727cbd5b1faa495ab30318882889de5ab1363bb84c017c492c4a7daf3
MD5 1beb68da0333616282fb43e76bc83d8c
BLAKE2b-256 0eaaebdc1c3bba9d9de989803cf5391f3d4f1b40bd992b924db7a394efea4b62

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp39-none-win_amd64.whl.

File metadata

  • Download URL: bcml-3.10.8-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 18.8 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.14.12

File hashes

Hashes for bcml-3.10.8-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 a200cca31ddf5155dfa8deee5628f9a9dc36b3ebde01ad4982efea3d8fbf099f
MD5 84daa805e972247c6a5ee97cc05de24e
BLAKE2b-256 f846ec4c2f8a0ff1b0932b59851adfdea520f6a10eefdf8f35a264a5e6797718

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.10.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1ac5f61fa2a7070c5600dbcd661f8edee5726eb22895287fd92d1a25c219fb96
MD5 84eccb72f1c6d56d7198cb93113fe03d
BLAKE2b-256 7b38e046784deb60343bb078a0be52d2ea2fee943b86a674ebc655b8d90fe28f

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp38-none-win_amd64.whl.

File metadata

  • Download URL: bcml-3.10.8-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 18.8 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.14.12

File hashes

Hashes for bcml-3.10.8-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 7a18e4c4d49bd5afe67cc1e52fbe5cc840faa6da6d3ec2ccaf8f066cf844214c
MD5 71fab67c1e5d95f0efe15ccc63ab156b
BLAKE2b-256 66f972a8c1244f86a2a48d8d767f09f49f4e10264e3086971ac898b9f2b19906

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.10.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bed905a1327b3985f3b8dc810ca16d15623a12f106680b9055f8a1ce45d91f44
MD5 9d562057944da8c30264ac42c6fd369b
BLAKE2b-256 bd1ca5a7d867ffe230cfdfdaa96be747d1218cfa621db0a8553354c8f0a1458f

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp37-none-win_amd64.whl.

File metadata

  • Download URL: bcml-3.10.8-cp37-none-win_amd64.whl
  • Upload date:
  • Size: 18.8 MB
  • Tags: CPython 3.7, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.14.12

File hashes

Hashes for bcml-3.10.8-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 05d6e9a1bacf73a8d77ecc8afd074254b911d9e0e590503e25b3c26f7a3a3066
MD5 a3e3dbf709706d6b645dd96f5edf71fb
BLAKE2b-256 4a63b0aa11f41a396445d5be3986b68999572a93112aa8f68682caf12a80a48d

See more details on using hashes here.

File details

Details for the file bcml-3.10.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.10.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bed849250ebab0edfe0482f0530f46f1f7a05235202582beacde648c1753dd04
MD5 9dbe2ef1908ccce97ac8d39eb59535b9
BLAKE2b-256 239ba2efb6f2b577888dded9b32359ea0ab3d0600ee2e43145ec5629e5dd5f74

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page