| Branch | Status |
| --- | --- |
| `master` | [![Build](https://github.com/jeffman/Mother2GbaTranslation/actions/workflows/build_master.yml/badge.svg)](https://github.com/jeffman/Mother2GbaTranslation/actions/workflows/build_master.yml) |
| `master` | [![Test](https://github.com/jeffman/Mother2GbaTranslation/actions/workflows/test_master.yml/badge.svg)](https://github.com/jeffman/Mother2GbaTranslation/actions/workflows/test_master.yml) |

# MOTHER 2 Translation for the GBA
This is a work-in-progress translation patch for MOTHER 2 on the GBA.

## Discord
Our Discord server is pretty active: https://discord.gg/ADXS5Ub

## Hasn't it been done?
There are at least two other projects that translate the MOTHER 2 side of the game:
- Mato's menu text translation: [here](http://mother12.earthboundcentral.com/)
- TheZunar123's full translation (in progress): [here](http://earthboundcentral.com/forum/viewtopic.php?f=3&t=526) and [here](http://forum.starmen.net/forum/Games/Mother2/Mother-2-Fan-Translation/page/1/)

## Why start another project?
Neither of the above projects use a true variable-width-font (VWF) to render text. A VWF would look much better and would make the game more enjoyable.

Adding a VWF is hard, however. Mato explains [here](http://earthboundcentral.com/2011/04/a-look-at-the-mother-2-side/) why it's generally a very difficult task to fully translate the game, let alone to insert a VWF.

A long time ago (before the release of the [MOTHER 3 Fan Translation](http://mother3.fobby.net)), I started working on a proof-of-concept VWF for MOTHER 2 on the GBA. It worked, but it quickly became apparent that the amount of hacking required would be huge; window-rendering functions contain a ton of repeated code and some of it is downright non-sensical.

A few years after that, I tried it again from scratch with the intent of having a more organized codebase. It went much better, but I was soon limited by not having any translated dialogue, rather than not having a VWF; I couldn't test much of my VWF code without any English text inserted into the ROM.

## Now what?
This project aims to both complete the VWF codebase and to provide a tool for translating the game's dialogue. My new intent is to bring the hack to a state where I can just sit down and translate text efficiently in my spare time with a graphical tool. Not only that, but having such a tool means that other people can contribute!

## Screenshots
![](./screenshots/itshappening2.png) ![](./screenshots/itshappening4.png) ![](./screenshots/itshappening5.png) ![](./screenshots/m2-status2.png) ![](./screenshots/m2-battle-slugs.png) ![](./screenshots/m2-fileselect.png)

# Building

## Building with Docker
Docker allows easily building without having to install the dependencies.

1. Put a MOTHER 1+2 ROM in `bin/m12fresh.gba`
2. While in the root of the project, run: `docker run --rm -it -v ${PWD}:/home/m2gba/src lorenzooone/m2gba_translation:builder`

The output will be inside the newly created `out` folder.

## Manually Building

### Dependencies
- [.NET Core 2.1 or later](https://dotnet.microsoft.com/download)
- [PowerShell Core 6.0 or later](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-6)
- [GNU Arm Embedded Toolchain](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads)
- [armips](https://github.com/Kingcom/armips)
- Unmodified MOTHER 1+2 ROM (SHA-1 `F27336B9...`)
- Unmodified, unheadered EarthBound ROM (SHA-1 `D67A8EF3...`)
- (Optional) For building the GUI script tool: [.NET Core 3.0 or later](https://dotnet.microsoft.com/download/dotnet-core/3.0)

1. One-time setup
    1. Install .NET Core 2.1, PowerShell Core, and GNU Arm Embedded Toolchain. Make sure the Arm toolchain's `bin` folder is in your `PATH`.
    2. Create a `bin` folder in the root of the repo.
    3. Copy MOTHER 1+2 ROM to `bin/m12fresh.gba`.
    4. Copy EarthBound ROM to `bin/eb.smc`.
    5. Run `build-tools.ps1`.
        - Windows: `.\build-tools.ps1` in a PowerShell prompt
        - Linux and MacOS: `pwsh build-tools.ps1`
    6. Copy/build `armips` to `bin`.
        - Windows: grab the latest release [here](https://github.com/Kingcom/armips/releases) and copy the executable to `bin/armips.exe`.
        - Linux: follow the [README](https://github.com/Kingcom/armips/blob/master/Readme.md) to build `armips` and copy the executable to `bin/armips`.
        - MacOS: grab the latest release [here](https://github.com/Emory-M/armips/releases) and copy the executable to `bin/armips`.
2. Building the ROM
    1. Run `build.ps1`.
    2. The default compiled ROM is copied to `bin/m12.gba`.
3. (Optional) Build the GUI script tool:
    1. `dotnet build tools/ScriptTool` (don't set the output directory)
    2. `dotnet build tools/ScriptToolGui -o bin/ScriptToolGui`
    3. Run with `dotnet bin/ScriptToolGui/ScriptToolGui.dll` (or just run the EXE file directly).

# Testing

## Testing with Docker
Docker allows easily testing without having to install the dependencies.

1. Put a MOTHER 1+2 ROM in `bin/m12fresh.gba`
2. While in the root of the project, run: `docker run --rm -it -v ${PWD}:/home/m2gba/src lorenzooone/m2gba_translation:tester`

## Manually Testing

### Dependencies
- [mGBA 0.9.3 or later, or nightly built after Nov 29, 2021](https://mgba.io/downloads.html)
- [Building dependencies](#Building)

1. One-time setup
    1. Install .NET Core 2.1, PowerShell Core, and GNU Arm Embedded Toolchain. Make sure the Arm toolchain's `bin` folder is in your `PATH`.
    2. Create a `bin` folder in the root of the repo.
    3. Copy MOTHER 1+2 ROM to `bin/m12fresh.gba`.
    4. Copy EarthBound ROM to `bin/eb.smc`.
    5. Run `build-tools.ps1`.
        - Windows: `.\build-tools.ps1` in a PowerShell prompt
        - Linux and MacOS: `pwsh build-tools.ps1`
    6. Copy/build `armips` to `bin`.
        - Windows: grab the latest release [here](https://github.com/Kingcom/armips/releases) and copy the executable to `bin/armips.exe`.
        - Linux: follow the [README](https://github.com/Kingcom/armips/blob/master/Readme.md) to build `armips` and copy the executable to `bin/armips`.
        - MacOS: grab the latest release [here](https://github.com/Emory-M/armips/releases) and copy the executable to `bin/armips`.
    7. Copy/build `mgba-sdl` to `bin`.
        - You can also use mgba-QT (which is normally named mgba), but you will need to change the name of the executed program in `test.ps1`.
2. Running the tests
    1. Run `test.ps1`.
    2. The default compiled ROM is copied to `bin/m12test.gba`.
    3. The tests' log will be in `bin/test.log`.
    4. The output will also be visible in the console.
