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.9 (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

Building from Source

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

  • Python 3.7 - 3.9 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

If you're not sure about the file name format, learn more about wheel file names.

bcml-3.9.13_post1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (19.3 MB view details)

Uploaded PyPymanylinux: glibc 2.12+ x86-64

bcml-3.9.13_post1-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (19.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.12+ x86-64

bcml-3.9.13_post1-cp310-none-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.10Windows x86-64

bcml-3.9.13_post1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (19.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64

bcml-3.9.13_post1-cp39-none-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.9Windows x86-64

bcml-3.9.13_post1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (19.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

bcml-3.9.13_post1-cp38-none-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.8Windows x86-64

bcml-3.9.13_post1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (19.3 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

bcml-3.9.13_post1-cp37-none-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.7Windows x86-64

bcml-3.9.13_post1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (19.3 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

File details

Details for the file bcml-3.9.13_post1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a76b89b244233aafac4fee20210f41a815599e0bec4362caf578508999f01822
MD5 ea741e268975d8570554c4ce83d6eaa9
BLAKE2b-256 34456dc21ae71863a9329d077261b23db85b4530d312b1ed120dcdf1e34fb59e

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0a3ebe7212874bef569cde974aada7101fdbf380fc210f6f1b97029bccf28f4f
MD5 3ec5879834cd99ed35728ded6aeb6c4c
BLAKE2b-256 a54dbc5bf807c16e5c535fd79b5fb2a5572a59c36eb629feee4b95f552107f2a

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 fd5430b0a00d11179457ce421be0de045bfd20b41976aeb6a375aa25f2aed795
MD5 23e602e2dbef65918faf529d05fb72a2
BLAKE2b-256 db3e91d086a07d60de1c13e7b83225a49bb5bcd0e05ba2bd304dbca4561c5db8

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 873fe515d804f03ed35bcb3a1992ce7d74659a36adfa619d5a1cdcdd316b1bb0
MD5 e4c56cece6a7226109863d54ce7bb7c0
BLAKE2b-256 c5ae976c4f851fcedd21e3b79edb8ee8e87bbe45a6267e94dd66749a01e1a476

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 05b9bcf21219762625dce3cacf78cc1108eaca23dda0c20996799a3a15d22892
MD5 9e58f9513bd7d735f0f27c9749793567
BLAKE2b-256 11659eab748d973f4c7f160f3a5a709028b8d74f22c1d4e7ffbea220f373ee9c

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 d5cae17c2349dd6dd64abf5154e7b6200a4cc50f0f8f75a333e3b341cb673aa2
MD5 d4d9f0a8097fd41ed2d6eece30d0ed0f
BLAKE2b-256 e01a08e537ca1d53ec14aadfff07c95b3b43584f306af8cf8221a97258dd0052

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp38-none-win_amd64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 04d01b51bea4457184a79cb5089b6d6b1187a7499e056cdc339b9b4399d4e8b2
MD5 bb4aa1d8d52872d2e54bf66908c12069
BLAKE2b-256 86dbf5010d93b47eab55f984e733faa49ca8b51149c207b4a8aa0429a5e85247

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 53b0612609428fb5067cc434d141782845002085f2795971e714889b9913ec94
MD5 8387fc7d70570651e069c68529a77044
BLAKE2b-256 a1d6f067989024808e96e64e41cd7decd18a8533929a6e4135b189b70c4a8e31

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp37-none-win_amd64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 020bb8db083e4aca1c043bb68351d6facf7933a9f648a2a6b8df1e40624f5f6f
MD5 901b584088c08298073d3dfe27b41c71
BLAKE2b-256 707e613fccde84cebc91a8d57fe7ccc03b648c123f5369cefe8bb86b253645b7

See more details on using hashes here.

File details

Details for the file bcml-3.9.13_post1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for bcml-3.9.13_post1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 986b23360e5e74671b868c678da9031acbbcc54ea5191db121786ba090ab874b
MD5 c26bad92c0f757c8f320a5b95320bba3
BLAKE2b-256 ef9444ac3e5dc7d5dc5a5fd2ff1d58444e141ac1262d94ce35e40edcd714426c

See more details on using hashes here.

Supported by

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