From 9dd63ae7260ded1e8c75039843256ddb3795efc7 Mon Sep 17 00:00:00 2001 From: Oliver Bell Date: Sat, 13 Sep 2025 18:12:02 +0100 Subject: [PATCH 1/3] ci: add japan to CI --- .github/workflows/build.yml | 49 ++++++++++++++++++++++++++++++++++++- README.md | 4 +-- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d290afeffb..efef24b90d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,7 @@ jobs: build-gba: if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork || github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.fork}} runs-on: ubuntu-22.04 - name: Build GBA + name: Build GBA (USA) steps: - name: Checkout PR if: ${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target'}} @@ -132,6 +132,53 @@ jobs: cwd: "./gh-pages" add: "reports maps" message: ${{ env.REPORTS_COMMIT_MSG }} + + build-gba-variants: + if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork || github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.fork}} + runs-on: ubuntu-22.04 + name: Build GBA (${{ matrix.variant }}) + strategy: + matrix: + variant: ["europe", "japan"] + steps: + - name: Checkout PR + if: ${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target'}} + uses: actions/checkout@master + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Checkout + if: ${{ github.event_name == 'push' }} + uses: actions/checkout@master + + - name: Checkout gh-pages + if: ${{ github.event_name == 'push' }} + uses: actions/checkout@master + with: + path: gh-pages + ref: gh-pages + + - name: Checkout agbcc + uses: actions/checkout@master + with: + path: agbcc + repository: SAT-R/agbcc + + - name: Install tools + run: | + sudo apt update && sudo apt install binutils-arm-none-eabi + # build-essential, git, and libpng-dev are already installed + # gcc-arm-none-eabi is only needed for the modern build + # as an alternative to dkP + + - name: Install agbcc + run: | + ./build.sh + ./install.sh ../ + working-directory: agbcc + + - name: Compare + run: make ${{ matrix.variant }} -j${nproc} ports: strategy: diff --git a/README.md b/README.md index 5a9bcacbe5..2b5355d97e 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ This is a work in progress matching decompilation of Sonic Advance 2 -It so far builds the following ROMs: +It builds the following ROMs: * [**sa2.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=0890) `sha1: 7bcd6a07af7c894746fa28073fe0c0e34408022d` (USA) (En,Ja,Fr,De,Es,It) * [**sa2_europe.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=0900) `sha1: b0f64bdca097f2de8f05ac4c8caea2b80c5faeb1` (Europe) (En,Ja,Fr,De,Es,It) -* :construction: [**sa2_japan.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=0799) `sha1: dffd0188fc78154b42b401398a224ae0713edf23` (Japan) (En,Ja,Fr,De,Es,It) (WIP) +* [**sa2_japan.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=0799) `sha1: dffd0188fc78154b42b401398a224ae0713edf23` (Japan) (En,Ja,Fr,De,Es,It) It can also build: * **sa2.sdl** `make sdl` (Linux/MacOS SDL 64bit port) From bbe99960a59cebc0991b555945e92cd6b8dd62ce Mon Sep 17 00:00:00 2001 From: Oliver Bell Date: Sat, 13 Sep 2025 18:37:46 +0100 Subject: [PATCH 2/3] update readme --- .github/media/titlescreen.png | Bin 0 -> 29244 bytes INSTALL.md | 61 +++++++++++----------------------- README.md | 31 ++++++++--------- 3 files changed, 34 insertions(+), 58 deletions(-) create mode 100644 .github/media/titlescreen.png diff --git a/.github/media/titlescreen.png b/.github/media/titlescreen.png new file mode 100644 index 0000000000000000000000000000000000000000..0702c4825339a2eed0d7cd427fb4a16f5d5eb666 GIT binary patch literal 29244 zcmV*BKyJT@P)x_KPsqixBHY!pM*?5+tky`LXI3 z8@3I*OgHS1Ziw0LfPc*MsXDh$SKohXwOX<*S0R_H>sFnrI``b~J$33--E;4}^G@J{ z=YZ#c=fLa7fpfv!SFhiw{fIpWJO?}nf^T^qcn)|Dcn-Xt9Pse>dfs`B0k8de z8SotN9C%$h;I+Tk_0Icodk(zz9Pse>+KYf^fak#L$^j35uj`%nNosvq52M z=A;->KWKc~$VpqoG##H!Sv+#DG%>pul~WcQnge+<#v5@aSnL+i}S?i zoP7?U_dVVYCd;AHSFhDKHnw;7Yoi_c*jTGvny6Gt)6PNtVjN!sYR$>r2|o z%6fZ!)z5-Q%k`sC^YC{xe)-a8fCEf>4|c+FTwhv!^stui80-VBMmsvN&m{=`Ql-6m zZ%Jp|<;9X&S83Lpo7d}Wn-7I>zEN7dwZ1c1#u|w6adMKi zVB>riZ|wo+msI2fXcX zAU2(7A!cOIm$g6Hg<352sRR4_!B!Bi47!EWdPNziC6a2^legbXl^YYI^!!Nc-r)K4 zHgRi&^cFg-W6aHllUbMSo&DZIY9hzj=234l2{k)0CKrpr#t!fldg&e0odMK&SmrYJQ*xqY*KYPI&(R?uk% zn_H$Z9<$~t>iSFwD44@b%$5eB7AI9+w^Z43ASaPXExK`VFF2i@|3~3?d13Ehe!i^l z1`;yBrOSnGZ$mE@m+Xpl>yyAi0|(nR&Rk)ni;H1qb+3l?4K0jdwxextc3_pxeI+s4 zxX%OHw9A&bZXf;sFNOmi{$32^4j1xe-0^IXEg_?gE#YEmPFj%3FGnHB&xa54LCI@^!i-amJ^Y<2 zyQQ(8t`^)UdHd1MgRM<0@mQmRR&S1kdjz)mUjIrhz_3^BI3IoWy@UbX*iZdDJqTj551_d-&7qr9~@GXeH( ztXufghGK(rZO51hTN zl?n?YCiugz`tRZC{qpd4db~CgU+>dm0KS`d9@IHzsgutKy(2fpCWR#)l}
b7fn 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 literal 0 HcmV?d00001 diff --git a/INSTALL.md b/INSTALL.md index 405c6f2f1c..8315370fc2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,69 +1,37 @@ # Building/Installing SA2 This doc assumes you are somewhat familiar with using a terminal/command line. If not, you may find these instructions confusing and this project might not be for you at this stage. If you still want to continue, googling anything which you don't understand might be a first step and then asking in the discord would be a fallback option. -## Setup environment +## Before building -This project is designed to be built on MacOS or Linux. If you are using Windows then you will need to build the project in a Linux environemnt. There are a few options for that: +This project is designed to be built on MacOS or Linux. -### Easiest option: Dev container +### If you only have a windows computer -This step assumes you have vscode and you can run [Dev Containers](https://code.visualstudio.com/docs/remote/containers) already. If you wanna figure that out, look up a tutorial or something. +Install WSL (Ubuntu). Once installed, open this project in the WSL terminal and follow the linux instructions. There are tutorials online for setting up WSL. You may need to mount this project in your WSL environment. -1. Open this project in VSCode and then select "open dev container" when prompted -2. Wait for it to build. -3. Once running, skip to *Build the GBA rom* (no further install requirements) - -If using the Dev container you will be able to build for the GBA and PC. However, if you build the "Linux/MacOS" target you will not be able to execute that on MacOS when built from the dev container. - -### WSL - -Install and use WSL (Ubuntu). Once using WSL, open this project in the WSL terminal and follow the linux instructions. There are tutorials online for setting up WSL. You may need to mount this project in your WSL environment. - -### MSYS - -Another option is to install -[**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM) and build the project in MSYS but this is not recomended unless you know what you are doing. It doesn't really function properly. - -## Install system requirements - -**NOTE**: You can skip these steps if you are using the devcontainer. +### Install system requirements -### On Linux systems (including WSL) +#### On Linux (including WSL) ``` sudo apt update sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libpng-dev xorg-dev libsdl2-dev gcc-mingw-w64 libarchive-tools ``` -### On MacOS +#### On MacOS ``` brew install libpng sdl2 mingw-w64 arm-none-eabi-gcc ``` -## Install `agbcc` into the repo (skip if not compiling for the GBA) - -Clone the [agbcc](https://github.com/SAT-R/agbcc) repo into another folder - -Inside the `agbcc` folder, run `./build.sh` and then install the compiler in this repo `./install.sh path/to/sa2` - - ## Building Clone/Download the repo -The repo targets multiple platforms. You don't need to build the rom to build the port, so skip that step if you just want to run it on the PC. +The repo targets multiple platforms. You don't need to build the GBA rom to build the port, so skip that step if you only want to run it on PC. Run all commands in the same folder as this project. All outputs go into the same folder. -**NOTE**: You can significantly speed up initial build times by passing the number of processes you wish to use for the build `make ... -j` - -### GBA rom - -1. Run `make` -1. If the rom built successfully you will see this output: `sa2.gba: OK` (if you modify the source code this will no longer output `OK`) -1. `sa2.gba` will be output. - -You can execute the rom in an emulator +**NOTE**: You can significantly speed up initial build times by passing the number of processes you wish to use for the build. For example `make -j4` with 4 being the number of cores ### PC port @@ -86,6 +54,17 @@ Tip: On Linux and MacOS this can be opened with `wine sa2.sdl_win32.exe` 1. `sa2.sdl` will be created 1. Launch the game from the terminal with `./sa2.sdl` +### GBA rom + +1. Clone [agbcc](https://github.com/SAT-R/agbcc) repo into another folder + +1. Inside the `agbcc` folder, run `./build.sh` and then install the compiler in this repo `./install.sh path/to/sa2` +1. Run `make` +1. If the rom built successfully you will see this output: `sa2.gba: OK` (if you modify the source code this will no longer output `OK`) +1. `sa2.gba` will be output. + +You can execute the rom in an emulator + ## Code formatting All C code in this repo is formatted with `clang-format-13`. If using the Dev Container this is installed automatically. diff --git a/README.md b/README.md index 2b5355d97e..5c4c1ec8d8 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,14 @@ -# Sonic Advance 2 -[![CI status][ci-badge]][ci-status-link] [![Decompilation Progress][progress-badge]][progress-link] [![Decompilation Matching Progress][matching-progress-badge]][matching-progress-link] [![Contributors][contributors-badge]][contributors-link] [![Discord][discord-badge]][discord-link] - -[ci-status-link]: https://github.com/SAT-R/sa2/actions/workflows/build.yml -[ci-badge]: https://github.com/SAT-R/sa2/actions/workflows/build.yml/badge.svg - -[progress-link]: https://github.com/SAT-R/sa2 -[progress-badge]: https://img.shields.io/endpoint?url=https://sat-r.github.io/sa2/reports/progress-sa2-shield.json - -[matching-progress-link]: https://github.com/SAT-R/sa2 -[matching-progress-badge]: https://img.shields.io/endpoint?url=https://sat-r.github.io/sa2/reports/progress-sa2-shield-matching.json - -[contributors-link]: https://github.com/SAT-R/sa2/graphs/contributors -[contributors-badge]: https://img.shields.io/github/contributors/SAT-R/sa2 - -[discord-badge]: https://img.shields.io/discord/1052347299457671200 -[discord-link]: https://discord.gg/vZTvVH3gA9 +

Sonic Advance 2

+

+ Sonic Advance 2 title screen +

+

+ CI status + Decompilation Progress + Decompilation Matching Progress + Contributors + Discord +

> :warning: **This project is not completed and still under active development** @@ -58,6 +52,9 @@ Please see follow [these instructions](./INSTALL.md) Join us on [discord](https://discord.gg/vZTvVH3gA9) to get started in helping out +## Screenshots + + ## Notes - The [Kirby & The Amazing Mirror](https://github.com/jiangzhengwenjz/katam/) decompilation uses a very similar codebase, as it was written by the same dev team (Dimps) From bb11b44ee405866230aeec1bc8a9d24ecf70de0c Mon Sep 17 00:00:00 2001 From: Oliver Bell Date: Sat, 13 Sep 2025 18:40:29 +0100 Subject: [PATCH 3/3] fix ci --- .github/workflows/build.yml | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index efef24b90d..78ad419b96 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,11 +58,8 @@ jobs: - name: Install tools run: | - sudo apt update && sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi xorg-dev + sudo apt update && sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi python3 -m pip install gitpython - # build-essential, git, and libpng-dev are already installed - # gcc-arm-none-eabi is only needed for the modern build - # as an alternative to dkP - name: Install agbcc run: | @@ -114,16 +111,6 @@ jobs: python3 ../scripts/progress.py shield-json -f mb_chao_garden.map > ../gh-pages/reports/progress-mb_chao_garden-shield.json python3 ../scripts/progress.py shield-json -m -f mb_chao_garden.map > ../gh-pages/reports/progress-mb_chao_garden-shield-matching.json - #- name: Japan - #run: | - #make clean - #make japan -j${nproc} - - - name: Europe - run: | - make clean - make europe -j${nproc} - - name: Update reports if: ${{ github.event_name == 'push' }} uses: EndBug/add-and-commit@v7 @@ -166,10 +153,7 @@ jobs: - name: Install tools run: | - sudo apt update && sudo apt install binutils-arm-none-eabi - # build-essential, git, and libpng-dev are already installed - # gcc-arm-none-eabi is only needed for the modern build - # as an alternative to dkP + sudo apt update && sudo apt install binutils-arm-none-eabi gcc-arm-none-eabi - name: Install agbcc run: |