mirror of
https://github.com/pret/pmd-red.git
synced 2024-11-23 05:00:12 +00:00
Makefile and Install.md Revamp (#41)
* Makefile: move over to gcc for preproc and ditch cpp * INSTALL: rewrite INSTALL * README: add CI badge * Makefile: make tools build before anything else
This commit is contained in:
parent
f55ac4c552
commit
386299d1f4
305
INSTALL.md
305
INSTALL.md
@ -1,25 +1,304 @@
|
|||||||
First, you must put a Pokémon Mystery Dungeon Red Rescue Team 1.0 (US) ROM in the root directory of the repository and name it `baserom.gba`. It should have a SHA1 checksum of `9f4cfc5b5f4859d17169a485462e977c7aac2b89`. Then, follow the OS-specific instructions below.
|
|
||||||
|
|
||||||
# Linux
|
# Instructions
|
||||||
|
|
||||||
Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM).
|
These instructions explain how to set up the tools required to build **pmd-red**, which assembles the source files into a ROM.
|
||||||
|
|
||||||
Make sure that there is an environment variable called DEVKITARM with the path of the directory before the "bin" directory containing "arm-none-eabi-as", "arm-none-eabi-cpp", "arm-none-eabi-ld" and "arm-none-eabi-objcopy".
|
These instructions come with notes which can be expanded by clicking the "<i>Note...</i>" text.
|
||||||
|
In general, you should not need to open these unless if you get an error or if you need additional clarification.
|
||||||
|
|
||||||
Then get the compiler from https://github.com/pret/agbcc and run the following commands.
|
If you run into trouble, ask for help on Discord or IRC (see [README.md](README.md)).
|
||||||
|
|
||||||
build.sh
|
## Prerequisites
|
||||||
install.sh PATH_OF_PMD-RED_DIRECTORY
|
|
||||||
${DEVKITARM}/bin/arm-none-eabi/ranlib PATH_OF_PMD-RED_DIRECTORY/tools/agbcc/lib/libgcc.a lib/libc.a
|
|
||||||
|
|
||||||
Finally, in the pmd-red directory, build the rom.
|
First, you must put a Pokémon Mystery Dungeon Red Rescue Team 1.0 (US) ROM in the root directory of the repository and name it `baserom.gba`. It should have a SHA1 checksum of `9f4cfc5b5f4859d17169a485462e977c7aac2b89`. Then, follow the OS-specific instructions below:
|
||||||
|
|
||||||
|
- [Windows](#windows)
|
||||||
|
- [macOS](#macos)
|
||||||
|
- [Linux](#linux)
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
- [Windows 10 (WSL1)](#windows-10-wsl1) (**Fastest, highly recommended**, Windows 10 only)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Note for advanced users: <b>WSL2</b>...</i></summary>
|
||||||
|
|
||||||
|
> <b>WSL2</b> is an option and is even faster than <b>WSL1</b> if files are stored on the WSL2 file system, but some tools may have trouble interacting
|
||||||
|
> with the WSL2 file system over the network drive. For example, tools which use Qt versions before 5.15.2 such as <a href="https://github.com/huderlem/porymap">porymap</a>
|
||||||
|
> may <a href="https://bugreports.qt.io/browse/QTBUG-86277">have problems with parsing the <code>\\wsl$</code> network drive path</a>.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
All of the Windows instructions assume that the default drive is C:\\. If this differs to your actual drive letter, then replace C with the correct drive letter when reading the instructions.
|
||||||
|
|
||||||
|
**A note of caution**: As Windows 7 is officially unsupported by Microsoft and Windows 8 has very little usage, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10 instructions.
|
||||||
|
|
||||||
|
## Windows 10 (WSL1)
|
||||||
|
WSL1 is the preferred terminal to build **pmd-red**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL).
|
||||||
|
- If WSL (Debian or Ubuntu) is **not installed**, then go to [Installing WSL1](#installing-wsl1).
|
||||||
|
- Otherwise, if WSL is installed, but it **hasn't previously been set up for another decompilation project**, then go to [Setting up WSL1](#setting-up-wsl1).
|
||||||
|
- Otherwise, **open WSL** and go to [Choosing where to store pmd-red (WSL1)](#choosing-where-to-store-pmd-red-wsl1).
|
||||||
|
|
||||||
|
### Installing WSL1
|
||||||
|
1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Right Click or Shift+Insert is paste in the Powershell).
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Once the process finishes, restart your machine.
|
||||||
|
|
||||||
|
3. The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice.
|
||||||
|
<details>
|
||||||
|
<summary><i>Note for advanced users...</i></summary>
|
||||||
|
|
||||||
|
> You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution.
|
||||||
|
<details>
|
||||||
|
<summary><i>Notes...</i></summary>
|
||||||
|
|
||||||
|
> Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog.
|
||||||
|
> Note 2: If the link does not work, then open the Microsoft Store manually, and search for the Ubuntu app (choose the one with no version number).
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### Setting up WSL1
|
||||||
|
Some tips before proceeding:
|
||||||
|
- In WSL, Copy and Paste is either done via
|
||||||
|
- **right-click** (selection + right click to Copy, right click with no selection to Paste)
|
||||||
|
- **Ctrl+Shift+C/Ctrl+Shift+V** (enabled by right-clicking the title bar, going to Properties, then checking the checkbox next to "Use Ctrl+Shift+C/V as Copy/Paste").
|
||||||
|
- Some of the commands that you'll run will ask for your WSL password and/or confirmation to perform the stated action. This is to be expected, just enter your WSL password and/or the yes action when necessary.
|
||||||
|
|
||||||
|
1. Open **Ubuntu** (e.g. using Search).
|
||||||
|
2. WSL/Ubuntu will set up its own installation when it runs for the first time. Once WSL/Ubuntu finishes installing, it will ask for a username and password (to be input in).
|
||||||
|
<details>
|
||||||
|
<summary><i>Note...</i></summary>
|
||||||
|
|
||||||
|
> When typing in the password, there will be no visible response, but the terminal will still read in input.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
3. Update WSL/Ubuntu before continuing. Do this by running the following command. These commands will likely take a long time to finish:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt update && sudo apt upgrade
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md) from here.
|
||||||
|
|
||||||
|
4. Certain packages are required to build pmd-red. Install these packages by running the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install build-essential binutils-arm-none-eabi git libpng-dev
|
||||||
|
```
|
||||||
|
<details>
|
||||||
|
<summary><i>Note...</i></summary>
|
||||||
|
|
||||||
|
> If the above command does not work, try the above command but replacing `apt` with `apt-get`.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### Choosing where to store pmd-red (WSL1)
|
||||||
|
WSL has its own file system that's not natively accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to store pmd-red within Windows.
|
||||||
|
|
||||||
|
For example, say you want to store pmd-red (and agbcc) in **C:\Users\\_\<user>_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\<user>* is your **Windows** username:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /mnt/c/Users/<user>/Desktop/decomps
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Notes...</i></summary>
|
||||||
|
|
||||||
|
> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL.
|
||||||
|
> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users/<user>/Desktop/decomp folder"`.
|
||||||
|
> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed
|
||||||
|
</details>
|
||||||
|
|
||||||
|
If this works, then proceed to [Installation](#installation).
|
||||||
|
|
||||||
|
## macOS
|
||||||
|
1. If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/xcode/resources/), open your Terminal, and run the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
xcode-select --install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. - If libpng is **not installed**, then go to [Installing libpng (macOS)](#installing-libpng-macos).
|
||||||
|
- Otherwise, **open the Terminal** and go to [Choosing where to store pmd-red (macOS)](#choosing-where-to-store-pmd-red-macos)
|
||||||
|
|
||||||
|
### Installing libpng (macOS)
|
||||||
|
<details>
|
||||||
|
<summary><i>Note for advanced users...</i></summary>
|
||||||
|
|
||||||
|
> This guide installs libpng via Homebrew as it is the easiest method, however advanced users can install libpng through other means if they so desire.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
1. Open the Terminal.
|
||||||
|
2. If Homebrew is not installed, then install [Homebrew](https://brew.sh/) by following the instructions on the website.
|
||||||
|
3. Run the following command to install libpng.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew install libpng
|
||||||
|
```
|
||||||
|
libpng is now installed.
|
||||||
|
|
||||||
|
### Choosing where to store pmd-red (macOS)
|
||||||
|
At this point, you can choose a folder to store pmd-red into. If you're okay with storing pmd-red in the user folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pmd-red is stored when changing directory to the pmd-red folder.
|
||||||
|
|
||||||
|
For example, if you want to store pmd-red (and agbcc) in **~/Desktop/decomps**, enter this command to **change directory** to the desired folder:
|
||||||
|
```bash
|
||||||
|
cd Desktop/decomps
|
||||||
|
```
|
||||||
|
Note that the directory **must exist** in the folder system. If you want to store pmd-red in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Finder) before executing the `cd` command.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Note..</i>.</summary>
|
||||||
|
|
||||||
|
> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"`
|
||||||
|
</details>
|
||||||
|
|
||||||
|
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)).
|
||||||
|
|
||||||
|
## Linux
|
||||||
|
Open Terminal and enter the following commands, depending on which distro you're using.
|
||||||
|
|
||||||
|
### Debian/Ubuntu-based distributions
|
||||||
|
Run the following command to install the necessary packages:
|
||||||
|
```bash
|
||||||
|
sudo apt install build-essential binutils-arm-none-eabi git libpng-dev
|
||||||
|
```
|
||||||
|
Then proceed to [Choosing where to store pmd-red (Linux)](#choosing-where-to-store-pmd-red-(linux)).
|
||||||
|
|
||||||
|
### Other distributions
|
||||||
|
_(Specific instructions for other distributions would be greatly appreciated!)_
|
||||||
|
|
||||||
|
1. Try to find the required software in its repositories:
|
||||||
|
- `gcc`
|
||||||
|
- `g++`
|
||||||
|
- `make`
|
||||||
|
- `git`
|
||||||
|
- `libpng-dev`
|
||||||
|
|
||||||
|
### Choosing where to store pmd-red (Linux)
|
||||||
|
At this point, you can choose a folder to store pmd-red (and agbcc) into. If so, you'll have to account for the modified folder path when changing directory to the pmd-red folder.
|
||||||
|
|
||||||
|
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Note for Windows users...</i></summary>
|
||||||
|
|
||||||
|
> Consider adding an exception for the `pmd-red` and/or `decomps` folder in Windows Security using
|
||||||
|
> [these instructions](https://support.microsoft.com/help/4028485). This prevents Microsoft Defender from
|
||||||
|
> scanning them which might improve performance while building.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
1. If pmd-red is not already downloaded (some users may prefer to download pmd-red via a git client like GitHub Desktop), run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/pret/pmd-red
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Note for WSL1...</i></summary>
|
||||||
|
|
||||||
|
> If you get an error stating `fatal: could not set 'core.filemode' to 'false'`, then run the following commands:
|
||||||
|
> ```bash
|
||||||
|
> cd
|
||||||
|
> sudo umount /mnt/c
|
||||||
|
> sudo mount -t drvfs C: /mnt/c -o metadata,noatime
|
||||||
|
> cd <folder where pmd-red is to be stored>
|
||||||
|
> ```
|
||||||
|
> Where *\<folder where pmd-red is to be stored>* is the path of the folder [where you chose to store pmd-red](#Choosing-where-to-store-pmd-red-WSL1). Then run the `git clone` command again.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
2. Install agbcc into pmd-red. The commands to run depend on certain conditions. **You should only follow one of the listed instructions**:
|
||||||
|
- If agbcc has **not been built before** in the folder where you chose to store pmd-red, run the following commands to build and install it into pmd-red:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/pret/agbcc
|
||||||
|
cd agbcc
|
||||||
|
./build.sh
|
||||||
|
./install.sh ../pmd-red
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Otherwise**, if agbcc has been built before (e.g. if the git clone above fails), but was **last built on a different terminal** than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pmd-red:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd agbcc
|
||||||
|
git clean -fX
|
||||||
|
./build.sh
|
||||||
|
./install.sh ../pmd-red
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pmd-red:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd agbcc
|
||||||
|
./install.sh ../pmd-red
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Note...</i></summary>
|
||||||
|
|
||||||
|
> If building agbcc or pmd-red results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
3. Once agbcc is installed, change directory back to the base directory where pmd-red and agbcc are stored:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you're ready to [build **pmd-red**](#build-pmd-red)
|
||||||
|
## Build pmd-red
|
||||||
|
If you aren't in the pmd-red directory already, then **change directory** to the pmd-red folder:
|
||||||
|
```bash
|
||||||
|
cd pmd-red
|
||||||
|
```
|
||||||
|
To build **pmd-red.gba** for the first time and confirm it matches the official ROM image (Note: to speed up builds, see [Parallel builds](#parallel-builds)):
|
||||||
|
```bash
|
||||||
|
make compare
|
||||||
|
```
|
||||||
|
If an OK is returned, then the installation went smoothly.
|
||||||
|
<details>
|
||||||
|
<summary>Note for Windows...</summary>
|
||||||
|
> If you switched terminals since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
To build **pmd-red.gba** with your changes:
|
||||||
|
```bash
|
||||||
make
|
make
|
||||||
|
```
|
||||||
|
|
||||||
# Windows
|
# Building guidance
|
||||||
|
|
||||||
Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM).
|
## Parallel builds
|
||||||
|
|
||||||
Then get the compiled tools from https://github.com/pret/pokeruby-tools. Copy the `tools/` folder over the `tools/` folder in your pmd-red directory.
|
See [the GNU docs](https://www.gnu.org/software/make/manual/html_node/Parallel.html) and [this Stack Exchange thread](https://unix.stackexchange.com/questions/208568) for more information.
|
||||||
|
|
||||||
You can then build pmd-red using `make` in the MSYS environment provided with devkitARM.
|
To speed up building, first get the value of `nproc` by running the following command:
|
||||||
|
```bash
|
||||||
|
nproc
|
||||||
|
```
|
||||||
|
Builds can then be sped up by running the following command:
|
||||||
|
```bash
|
||||||
|
make -j<output of nproc>
|
||||||
|
```
|
||||||
|
Replace `<output of nproc>` with the number that the `nproc` command returned.
|
||||||
|
|
||||||
|
`nproc` is not available on macOS. The alternative is `sysctl -n hw.ncpu` ([relevant Stack Overflow thread](https://stackoverflow.com/questions/1715580)).
|
||||||
|
|
||||||
|
## Other toolchains
|
||||||
|
|
||||||
|
To build using a toolchain other than devkitARM, override the `TOOLCHAIN` environment variable with the path to your toolchain, which must contain the subdirectory `bin`.
|
||||||
|
```bash
|
||||||
|
make TOOLCHAIN="/path/to/toolchain/here"
|
||||||
|
```
|
||||||
|
The following is an example:
|
||||||
|
```bash
|
||||||
|
make TOOLCHAIN="/usr/local/arm-none-eabi"
|
||||||
|
```
|
||||||
|
To compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present.
|
||||||
|
|
||||||
|
# Useful additional tools
|
||||||
|
* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps
|
||||||
|
37
Makefile
37
Makefile
@ -21,7 +21,7 @@ OBJCOPY := $(PREFIX)objcopy
|
|||||||
export CC := $(PREFIX)gcc
|
export CC := $(PREFIX)gcc
|
||||||
export AS := $(PREFIX)as
|
export AS := $(PREFIX)as
|
||||||
endif
|
endif
|
||||||
export CPP := $(PREFIX)cpp
|
export CPP := $(CC) -E
|
||||||
export LD := $(PREFIX)ld
|
export LD := $(PREFIX)ld
|
||||||
|
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
@ -114,12 +114,6 @@ $(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc
|
|||||||
|
|
||||||
#### Main Rules ####
|
#### Main Rules ####
|
||||||
|
|
||||||
# Disable dependency scanning when NODEP is used for quick building
|
|
||||||
ifeq ($(NODEP),1)
|
|
||||||
$(C_BUILDDIR)/%.o: C_DEP :=
|
|
||||||
else
|
|
||||||
$(C_BUILDDIR)/%.o: C_DEP = $(shell [[ -f $(C_SUBDIR)/$*.c ]] && $(SCANINC) -I include -I tools/agbcc/include -I gflib $(C_SUBDIR)/$*.c)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ALL_BUILDS := red
|
ALL_BUILDS := red
|
||||||
|
|
||||||
@ -137,9 +131,29 @@ MAKEFLAGS += --no-print-directory
|
|||||||
# Delete files that weren't built properly
|
# Delete files that weren't built properly
|
||||||
.DELETE_ON_ERROR:
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
|
infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
|
||||||
|
|
||||||
|
# Build tools when building the rom
|
||||||
|
# Disable dependency scanning for clean/tidy/tools
|
||||||
|
# Use a separate minimal makefile for speed
|
||||||
|
# Since we don't need to reload most of this makefile
|
||||||
|
ifeq (,$(filter-out all rom compare libagbsyscall syms,$(MAKECMDGOALS)))
|
||||||
|
$(call infoshell, $(MAKE) -f make_tools.mk)
|
||||||
|
else
|
||||||
|
NODEP ?= 1
|
||||||
|
endif
|
||||||
|
|
||||||
.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
|
.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
|
||||||
|
|
||||||
|
|
||||||
|
# Disable dependency scanning when NODEP is used for quick building
|
||||||
|
ifeq ($(NODEP),1)
|
||||||
|
$(C_BUILDDIR)/%.o: C_DEP :=
|
||||||
|
else
|
||||||
|
$(C_BUILDDIR)/%.o: C_DEP = $(shell [[ -f $(C_SUBDIR)/$*.c ]] && $(SCANINC) -I include -I tools/agbcc/include -I gflib $(C_SUBDIR)/$*.c)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Create build subdirectories
|
# Create build subdirectories
|
||||||
|
|
||||||
$(shell mkdir -p $(SUBDIRS))
|
$(shell mkdir -p $(SUBDIRS))
|
||||||
@ -175,7 +189,7 @@ $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c $$(C_DEP)
|
|||||||
$(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
|
$(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
|
||||||
|
|
||||||
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(ASM_DEP) dungeon_pokemon dungeon_floor
|
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(ASM_DEP) dungeon_pokemon dungeon_floor
|
||||||
$(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@
|
$(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@
|
||||||
|
|
||||||
$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(ASM_DEP)
|
$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(ASM_DEP)
|
||||||
$(AS) $(ASFLAGS) $< -o $@
|
$(AS) $(ASFLAGS) $< -o $@
|
||||||
@ -183,10 +197,11 @@ $(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(ASM_DEP)
|
|||||||
libagbsyscall:
|
libagbsyscall:
|
||||||
@$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN)
|
@$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN)
|
||||||
|
|
||||||
$(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_ewram2.ld $(BUILD_DIR)/sym_iwram.ld
|
$(BUILD_DIR)/sym_%.txt: sym_%.txt
|
||||||
|
cp $< $(BUILD_DIR)
|
||||||
|
|
||||||
|
$(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_ewram.txt $(BUILD_DIR)/sym_ewram2.txt $(BUILD_DIR)/sym_iwram.txt
|
||||||
cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld
|
cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld
|
||||||
$(BUILD_DIR)/sym_%.ld: sym_%.txt
|
|
||||||
$(CPP) -P $(CPPFLAGS) $< | sed -e "s#tools/#../../tools/#g" > $@
|
|
||||||
|
|
||||||
$(ELF): $(LD_SCRIPT) $(ALL_OBJECTS) $(LIBC) libagbsyscall tools
|
$(ELF): $(LD_SCRIPT) $(ALL_OBJECTS) $(LIBC) libagbsyscall tools
|
||||||
cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ $(LIB)
|
cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ $(LIB)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
# Pokémon Mystery Dungeon: Red Rescue Team
|
# Pokémon Mystery Dungeon: Red Rescue Team
|
||||||
|
|
||||||
|
[![build](https://github.com/pret/pmd-red/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/pret/pmd-red/actions/workflows/build.yml)
|
||||||
|
|
||||||
This is a disassembly of Pokémon Mystery Dungeon: Red Rescue Team.
|
This is a disassembly of Pokémon Mystery Dungeon: Red Rescue Team.
|
||||||
|
|
||||||
It builds the following rom:
|
It builds the following rom:
|
||||||
@ -16,9 +18,10 @@ To set up the repository, see [INSTALL.md](INSTALL.md).
|
|||||||
* Disassembly of [**Pokémon Crystal**][pokecrystal]
|
* Disassembly of [**Pokémon Crystal**][pokecrystal]
|
||||||
* Disassembly of [**Pokémon Pinball**][pokepinball]
|
* Disassembly of [**Pokémon Pinball**][pokepinball]
|
||||||
* Disassembly of [**Pokémon TCG**][poketcg]
|
* Disassembly of [**Pokémon TCG**][poketcg]
|
||||||
* Disassembly of [**Pokémon Fire Red**][pokefirered]
|
* Disassembly of [**Pokémon Fire Red**/**Leaf Green**][pokefirered]
|
||||||
* Disassembly of [**Pokémon Ruby/Sapphire**][pokeruby]
|
* Disassembly of [**Pokémon Ruby/Sapphire**][pokeruby]
|
||||||
* Disassembly of [**Pokémon Emerald**][pokeemerald]
|
* Disassembly of [**Pokémon Emerald**][pokeemerald]
|
||||||
|
* Disassembly of [**Pokémon Diamond/Pearl**][pokediamond]
|
||||||
* Discord: [**pret**][Discord]
|
* Discord: [**pret**][Discord]
|
||||||
* irc: **irc.freenode.net** [**#pret**][irc]
|
* irc: **irc.freenode.net** [**#pret**][irc]
|
||||||
|
|
||||||
@ -31,5 +34,6 @@ To set up the repository, see [INSTALL.md](INSTALL.md).
|
|||||||
[pokefirered]: https://github.com/pret/pokefirered
|
[pokefirered]: https://github.com/pret/pokefirered
|
||||||
[pokeruby]: https://github.com/pret/pokeruby
|
[pokeruby]: https://github.com/pret/pokeruby
|
||||||
[pokeemerald]: https://github.com/pret/pokeemerald
|
[pokeemerald]: https://github.com/pret/pokeemerald
|
||||||
|
[pokediamond]: https://github.com/pret/pokediamond
|
||||||
[Discord]: https://discord.gg/d5dubZ3
|
[Discord]: https://discord.gg/d5dubZ3
|
||||||
[irc]: https://kiwiirc.com/client/irc.freenode.net/?#pret
|
[irc]: https://kiwiirc.com/client/irc.freenode.net/?#pret
|
||||||
|
@ -2272,7 +2272,7 @@ _0802005C: .4byte gUnknown_203B27C
|
|||||||
_08020060: .4byte gGulpinDialogue
|
_08020060: .4byte gGulpinDialogue
|
||||||
_08020064:
|
_08020064:
|
||||||
movs r0, 0x3
|
movs r0, 0x3
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
b _08020562
|
b _08020562
|
||||||
_0802006C:
|
_0802006C:
|
||||||
ldr r2, [r5]
|
ldr r2, [r5]
|
||||||
@ -6233,12 +6233,12 @@ _08021FE2:
|
|||||||
bl sub_8021354
|
bl sub_8021354
|
||||||
_08021FE8:
|
_08021FE8:
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
b _080222B6
|
b _080222B6
|
||||||
_08021FF0:
|
_08021FF0:
|
||||||
bl sub_8021494
|
bl sub_8021494
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
bl sub_8022380
|
bl sub_8022380
|
||||||
ldr r0, _08022020
|
ldr r0, _08022020
|
||||||
ldr r2, [r0]
|
ldr r2, [r0]
|
||||||
@ -6976,7 +6976,7 @@ _080225B0:
|
|||||||
b _080225C2
|
b _080225C2
|
||||||
_080225BC:
|
_080225BC:
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
_080225C2:
|
_080225C2:
|
||||||
pop {r4}
|
pop {r4}
|
||||||
pop {r0}
|
pop {r0}
|
||||||
|
@ -5,51 +5,6 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start sub_8018280
|
|
||||||
sub_8018280:
|
|
||||||
push {r4,lr}
|
|
||||||
sub sp, 0x4
|
|
||||||
ldr r4, _080182DC
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0xD4
|
|
||||||
ldr r0, [r0]
|
|
||||||
bl sub_8008C54
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0xD4
|
|
||||||
ldr r0, [r0]
|
|
||||||
bl sub_80073B8
|
|
||||||
ldr r2, _080182E0
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0xD4
|
|
||||||
ldr r3, [r0]
|
|
||||||
movs r0, 0
|
|
||||||
str r0, [sp]
|
|
||||||
movs r0, 0x4
|
|
||||||
movs r1, 0
|
|
||||||
bl xxx_call_draw_string
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0xC0
|
|
||||||
bl sub_8013C68
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0xD4
|
|
||||||
ldr r0, [r0]
|
|
||||||
bl sub_80073E0
|
|
||||||
bl sub_801CCD8
|
|
||||||
movs r0, 0
|
|
||||||
bl sub_801AD34
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0x70
|
|
||||||
movs r1, 0
|
|
||||||
bl sub_8012EA4
|
|
||||||
add sp, 0x4
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_080182DC: .4byte gUnknown_203B20C
|
|
||||||
_080182E0: .4byte gUnknown_80DB830
|
|
||||||
thumb_func_end sub_8018280
|
|
||||||
|
|
||||||
thumb_func_start sub_80182E4
|
thumb_func_start sub_80182E4
|
||||||
sub_80182E4:
|
sub_80182E4:
|
||||||
push {r4-r7,lr}
|
push {r4-r7,lr}
|
||||||
|
@ -426,7 +426,7 @@ _0801922A:
|
|||||||
movs r0, 0
|
movs r0, 0
|
||||||
bl sub_801AD34
|
bl sub_801AD34
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
bl sub_80195C0
|
bl sub_80195C0
|
||||||
ldr r0, _08019250
|
ldr r0, _08019250
|
||||||
ldr r2, [r0]
|
ldr r2, [r0]
|
||||||
@ -579,12 +579,12 @@ _08019372:
|
|||||||
bl sub_801A8D0
|
bl sub_801A8D0
|
||||||
_08019378:
|
_08019378:
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
b _080194E8
|
b _080194E8
|
||||||
_08019380:
|
_08019380:
|
||||||
bl sub_801A9E0
|
bl sub_801A9E0
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
bl sub_8019660
|
bl sub_8019660
|
||||||
ldr r0, _080193B0
|
ldr r0, _080193B0
|
||||||
ldr r2, [r0]
|
ldr r2, [r0]
|
||||||
@ -1520,7 +1520,7 @@ _08019AF4:
|
|||||||
movs r0, 0
|
movs r0, 0
|
||||||
bl sub_801AD34
|
bl sub_801AD34
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
bl sub_8016C40
|
bl DrawTeamMoneyBox
|
||||||
_08019B00:
|
_08019B00:
|
||||||
pop {r4,r5}
|
pop {r4,r5}
|
||||||
pop {r0}
|
pop {r0}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define GUARD_TRADE_ITEMS_MENU_H
|
#define GUARD_TRADE_ITEMS_MENU_H
|
||||||
|
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
|
#include "item.h"
|
||||||
|
|
||||||
struct TradeSubStruct
|
struct TradeSubStruct
|
||||||
{
|
{
|
||||||
@ -41,12 +42,11 @@ struct TradeItemsMenu
|
|||||||
|
|
||||||
struct TradeSubStruct unk24C;
|
struct TradeSubStruct unk24C;
|
||||||
|
|
||||||
struct TradeSubStruct unk254;
|
/* 0x254 */ struct TradeSubStruct sentItem;
|
||||||
|
|
||||||
u8 unk25C;
|
/* 0x25C */ struct ItemStruct_203B460 itemToSend;
|
||||||
u8 chosenNum;
|
|
||||||
u8 chosenItem;
|
u8 fill25F[0x3A0 - 0x260];
|
||||||
u8 fill25F[0x3A0 - 0x25F];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,13 +10,13 @@ SECTIONS {
|
|||||||
ALIGN(4)
|
ALIGN(4)
|
||||||
{
|
{
|
||||||
ewram_start = .;
|
ewram_start = .;
|
||||||
INCLUDE "sym_ewram.ld"
|
INCLUDE "sym_ewram.txt"
|
||||||
src/agb_flash.o(.bss);
|
src/agb_flash.o(.bss);
|
||||||
*libgcc.a:fp-bit.o(.bss);
|
*libgcc.a:fp-bit.o(.bss);
|
||||||
*libgcc.a:dp-bit.o(.bss);
|
*libgcc.a:dp-bit.o(.bss);
|
||||||
*libc.a:syscalls.o(.bss);
|
*libc.a:syscalls.o(.bss);
|
||||||
. = ALIGN(16);
|
. = ALIGN(16);
|
||||||
INCLUDE "sym_ewram2.ld"
|
INCLUDE "sym_ewram2.txt"
|
||||||
*libc.a:impure.o(.data);
|
*libc.a:impure.o(.data);
|
||||||
*libc.a:locale.o(.data);
|
*libc.a:locale.o(.data);
|
||||||
*libc.a:mallocr.o(.data);
|
*libc.a:mallocr.o(.data);
|
||||||
@ -30,7 +30,7 @@ SECTIONS {
|
|||||||
ALIGN(4)
|
ALIGN(4)
|
||||||
{
|
{
|
||||||
iwram_start = .;
|
iwram_start = .;
|
||||||
INCLUDE "sym_iwram.ld"
|
INCLUDE "sym_iwram.txt"
|
||||||
. = 0x8000;
|
. = 0x8000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
make_tools.mk
Normal file
11
make_tools.mk
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
MAKEFLAGS += --no-print-directory
|
||||||
|
|
||||||
|
TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*))
|
||||||
|
|
||||||
|
.PHONY: all $(TOOLDIRS)
|
||||||
|
|
||||||
|
all: $(TOOLDIRS)
|
||||||
|
|
||||||
|
$(TOOLDIRS):
|
||||||
|
@$(MAKE) -C $@
|
@ -140,7 +140,7 @@ void CreateFelicityMoneySavingsHeader(u32 param_1)
|
|||||||
sub_80073E0(param_1);
|
sub_80073E0(param_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_8016C40(u32 param_1)
|
void DrawTeamMoneyBox(u32 param_1)
|
||||||
{
|
{
|
||||||
sub_8008C54(param_1);
|
sub_8008C54(param_1);
|
||||||
sub_80073B8(param_1);
|
sub_80073B8(param_1);
|
||||||
|
@ -57,7 +57,7 @@ u32 DisplayGulpinDialogueSprite(s32 param_1,s16 param_2,struct unkStruct_Gulpin
|
|||||||
|
|
||||||
param2_32 = param_2; // dumb cast needed to get lsr/asr combo
|
param2_32 = param_2; // dumb cast needed to get lsr/asr combo
|
||||||
|
|
||||||
gUnknown_203B26C = MemoryAlloc(0x18c,8);
|
gUnknown_203B26C = MemoryAlloc(sizeof(struct unkStruct_203B26C),8);
|
||||||
gUnknown_203B26C->unk0 = param_1;
|
gUnknown_203B26C->unk0 = param_1;
|
||||||
gUnknown_203B26C->unkC = param2_32;
|
gUnknown_203B26C->unkC = param2_32;
|
||||||
gUnknown_203B26C->unk10 = param_3;
|
gUnknown_203B26C->unk10 = param_3;
|
||||||
|
@ -40,7 +40,7 @@ u32 DisplayKangaskhanDialogueSprite(s32 param_1)
|
|||||||
|
|
||||||
ResetUnusedInputStruct();
|
ResetUnusedInputStruct();
|
||||||
sub_800641C(0,1,1);
|
sub_800641C(0,1,1);
|
||||||
gUnknown_203B208 = MemoryAlloc(0x14c,8);
|
gUnknown_203B208 = MemoryAlloc(sizeof(struct unkStruct_203B208),8);
|
||||||
gUnknown_203B208->unk18 = 0;
|
gUnknown_203B208->unk18 = 0;
|
||||||
gUnknown_203B208->unk1C = 0;
|
gUnknown_203B208->unk1C = 0;
|
||||||
gUnknown_203B208->unk20 = 0;
|
gUnknown_203B208->unk20 = 0;
|
||||||
|
@ -21,8 +21,7 @@ struct unkStruct_203B20C
|
|||||||
u32 unk1C;
|
u32 unk1C;
|
||||||
u32 unk20;
|
u32 unk20;
|
||||||
u8 fill24[0x60 - 0x24];
|
u8 fill24[0x60 - 0x24];
|
||||||
u32 unk60;
|
u16 unk60[8];
|
||||||
u8 fill64[0x70 - 0x64];
|
|
||||||
u32 unk70;
|
u32 unk70;
|
||||||
u8 fill74[0xC0 - 0x74];
|
u8 fill74[0xC0 - 0x74];
|
||||||
u32 unkC0;
|
u32 unkC0;
|
||||||
@ -77,6 +76,13 @@ extern u32 sub_801A8AC(void);
|
|||||||
extern void sub_801A928(void);
|
extern void sub_801A928(void);
|
||||||
extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *);
|
extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *);
|
||||||
extern void sub_80182E4(void);
|
extern void sub_80182E4(void);
|
||||||
|
extern void sub_8008C54(u32);
|
||||||
|
extern void sub_80073B8(u32);
|
||||||
|
extern void sub_8013C68(u32 *);
|
||||||
|
extern void sub_80073E0(u32);
|
||||||
|
extern void sub_8012EA4(u32 *, u32);
|
||||||
|
extern void xxx_call_draw_string(u32 x, u32 y, u8 *, u32, u32);
|
||||||
|
|
||||||
|
|
||||||
extern void sub_801A9E0();
|
extern void sub_801A9E0();
|
||||||
extern void sub_801841C();
|
extern void sub_801841C();
|
||||||
@ -87,7 +93,7 @@ extern void sub_8013AA0(u32 *);
|
|||||||
extern void sub_801B3C0(struct ItemStruct_203B460 *);
|
extern void sub_801B3C0(struct ItemStruct_203B460 *);
|
||||||
extern void sub_801A5D8(u32, u32, u32, u32);
|
extern void sub_801A5D8(u32, u32, u32, u32);
|
||||||
extern void sub_801C8C4(u32, u32, u32, u32);
|
extern void sub_801C8C4(u32, u32, u32, u32);
|
||||||
extern void sub_8012D60(u32 *, u32 *, u32, u32 *, u32, u32);
|
extern void sub_8012D60(u32 *, u32 *, u32, u16 *, u32, u32);
|
||||||
extern void sub_801CB5C(u32);
|
extern void sub_801CB5C(u32);
|
||||||
extern void sub_801A8D0(u32);
|
extern void sub_801A8D0(u32);
|
||||||
|
|
||||||
@ -96,6 +102,7 @@ extern struct UnkTextStruct2 gUnknown_80DB7E8;
|
|||||||
extern struct UnkTextStruct2 gUnknown_80DB7D0;
|
extern struct UnkTextStruct2 gUnknown_80DB7D0;
|
||||||
extern struct UnkTextStruct2 gUnknown_80DB800;
|
extern struct UnkTextStruct2 gUnknown_80DB800;
|
||||||
extern struct UnkTextStruct2 gUnknown_80DB818;
|
extern struct UnkTextStruct2 gUnknown_80DB818;
|
||||||
|
extern u8 gUnknown_80DB830[];
|
||||||
|
|
||||||
void sub_8017AF8(void)
|
void sub_8017AF8(void)
|
||||||
{
|
{
|
||||||
@ -410,7 +417,7 @@ void sub_8018100(void)
|
|||||||
switch(gUnknown_203B20C->state)
|
switch(gUnknown_203B20C->state)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk14, 2);
|
sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk14, 2);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
sub_801A5D8(3, 3, 0, 0xA);
|
sub_801A5D8(3, 3, 0, 0xA);
|
||||||
@ -421,7 +428,7 @@ void sub_8018100(void)
|
|||||||
case 6:
|
case 6:
|
||||||
sub_801A9E0();
|
sub_801A9E0();
|
||||||
sub_801841C();
|
sub_801841C();
|
||||||
sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk18, 2);
|
sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk18, 2);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
sub_801B3C0(&gUnknown_203B20C->unk8);
|
sub_801B3C0(&gUnknown_203B20C->unk8);
|
||||||
@ -453,7 +460,7 @@ void sub_8018100(void)
|
|||||||
sub_801CCD8();
|
sub_801CCD8();
|
||||||
sub_801AD34(0);
|
sub_801AD34(0);
|
||||||
sub_80184D4();
|
sub_80184D4();
|
||||||
sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk1C, 2);
|
sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk1C, 2);
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
sub_801B3C0(&gUnknown_203B20C->unk8);
|
sub_801B3C0(&gUnknown_203B20C->unk8);
|
||||||
@ -463,3 +470,15 @@ void sub_8018100(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sub_8018280(void)
|
||||||
|
{
|
||||||
|
sub_8008C54(gUnknown_203B20C->unkD4);
|
||||||
|
sub_80073B8(gUnknown_203B20C->unkD4);
|
||||||
|
xxx_call_draw_string(4, 0, gUnknown_80DB830, gUnknown_203B20C->unkD4, 0); // Number?
|
||||||
|
sub_8013C68(&gUnknown_203B20C->unkC0);
|
||||||
|
sub_80073E0(gUnknown_203B20C->unkD4);
|
||||||
|
sub_801CCD8();
|
||||||
|
sub_801AD34(0);
|
||||||
|
sub_8012EA4(&gUnknown_203B20C->unk70,0);
|
||||||
|
}
|
||||||
|
@ -35,7 +35,7 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1)
|
|||||||
char *monName;
|
char *monName;
|
||||||
struct OpenedFile *faceFile;
|
struct OpenedFile *faceFile;
|
||||||
|
|
||||||
gUnknown_203B210 = MemoryAlloc(0x148,8);
|
gUnknown_203B210 = MemoryAlloc(sizeof(struct unkStruct_203B210),8);
|
||||||
gUnknown_203B210->unk28 = 0;
|
gUnknown_203B210->unk28 = 0;
|
||||||
gUnknown_203B210->unk2C = 0;
|
gUnknown_203B210->unk2C = 0;
|
||||||
gUnknown_203B210->unk30 = 0;
|
gUnknown_203B210->unk30 = 0;
|
||||||
|
@ -26,7 +26,7 @@ extern void sub_801A2A8(u32);
|
|||||||
extern s32 sub_801A8AC(void);
|
extern s32 sub_801A8AC(void);
|
||||||
extern u32 sub_801A6E8(u32);
|
extern u32 sub_801A6E8(u32);
|
||||||
extern void sub_801A928(void);
|
extern void sub_801A928(void);
|
||||||
extern void sub_8016C40(u32);
|
extern void DrawTeamMoneyBox(u32);
|
||||||
|
|
||||||
void sub_8019B08(void)
|
void sub_8019B08(void)
|
||||||
{
|
{
|
||||||
@ -53,7 +53,7 @@ void sub_8019B08(void)
|
|||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
default:
|
default:
|
||||||
sub_8016C40(1);
|
DrawTeamMoneyBox(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,14 +168,10 @@ void sub_8019D68(void)
|
|||||||
u32 sub_8019D8C(void)
|
u32 sub_8019D8C(void)
|
||||||
{
|
{
|
||||||
if(gUnknown_203B210->unk4)
|
if(gUnknown_203B210->unk4)
|
||||||
{
|
|
||||||
return sub_8091814();
|
return sub_8091814();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return sub_8091A48();
|
return sub_8091A48();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void sub_8019DAC(void)
|
void sub_8019DAC(void)
|
||||||
{
|
{
|
||||||
@ -195,7 +191,7 @@ void sub_8019DAC(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_8019E04(int param_1)
|
void sub_8019E04(s32 param_1)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (gUnknown_203B210->unk4) {
|
if (gUnknown_203B210->unk4) {
|
||||||
|
@ -33,7 +33,7 @@ struct unkStruct_203B330
|
|||||||
u8 fillE[2];
|
u8 fillE[2];
|
||||||
u32 unk10;
|
u32 unk10;
|
||||||
struct UnkTextStruct2 *unk14;
|
struct UnkTextStruct2 *unk14;
|
||||||
struct UnkTextStruct2 unk18[3];
|
struct UnkTextStruct2 unk18[4];
|
||||||
};
|
};
|
||||||
extern struct unkStruct_203B330 *gUnknown_203B330;
|
extern struct unkStruct_203B330 *gUnknown_203B330;
|
||||||
|
|
||||||
@ -536,7 +536,7 @@ void ReturnToGetHelpMenu(void)
|
|||||||
u32 sub_80319A4(u8 param_1,u8 param_2,int param_3)
|
u32 sub_80319A4(u8 param_1,u8 param_2,int param_3)
|
||||||
{
|
{
|
||||||
|
|
||||||
gUnknown_203B330 = MemoryAlloc(0x78,8);
|
gUnknown_203B330 = MemoryAlloc(sizeof(struct unkStruct_203B330),8);
|
||||||
gUnknown_203B330->unkC = param_1;
|
gUnknown_203B330->unkC = param_1;
|
||||||
gUnknown_203B330->unkD = param_2;
|
gUnknown_203B330->unkD = param_2;
|
||||||
sub_801317C(&gUnknown_203B330->unk0);
|
sub_801317C(&gUnknown_203B330->unk0);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "trade_items_menu.h"
|
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
|
#include "trade_items_menu.h"
|
||||||
#include "gUnknown_203B460.h"
|
#include "gUnknown_203B460.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "save.h"
|
#include "save.h"
|
||||||
@ -44,7 +44,7 @@ extern s32 sub_80144A4(s32 *);
|
|||||||
extern u32 sub_801CA08(u32);
|
extern u32 sub_801CA08(u32);
|
||||||
extern void sub_801CBB8();
|
extern void sub_801CBB8();
|
||||||
extern u8 sub_801CB24();
|
extern u8 sub_801CB24();
|
||||||
extern void sub_801B3C0(u8 *);
|
extern void sub_801B3C0(struct ItemStruct_203B460 *);
|
||||||
extern u8 sub_8012FD8(u32 *);
|
extern u8 sub_8012FD8(u32 *);
|
||||||
extern void sub_8013114(u32 *, s32 *);
|
extern void sub_8013114(u32 *, s32 *);
|
||||||
extern void sub_8035CC0(struct UnkTextStruct2 *, u32);
|
extern void sub_8035CC0(struct UnkTextStruct2 *, u32);
|
||||||
@ -54,8 +54,6 @@ extern void sub_801B450();
|
|||||||
extern void sub_801CB5C(u32);
|
extern void sub_801CB5C(u32);
|
||||||
extern void sub_8035CF4(u32 *, u32, u32);
|
extern void sub_8035CF4(u32 *, u32, u32);
|
||||||
extern u32 sub_8013BBC(u32 *);
|
extern u32 sub_8013BBC(u32 *);
|
||||||
void sub_8036F30();
|
|
||||||
extern void TradeItem_AddItem();
|
|
||||||
extern void sub_80141B4(u32 *, u32, u32, u32);
|
extern void sub_80141B4(u32 *, u32, u32, u32);
|
||||||
|
|
||||||
extern void sub_8008C54(u32);
|
extern void sub_8008C54(u32);
|
||||||
@ -68,9 +66,8 @@ extern u32 sub_801D008();
|
|||||||
extern void sub_8090DC4(u32 *, u8, u32);
|
extern void sub_8090DC4(u32 *, u8, u32);
|
||||||
extern void sub_801C8C4(u32, u32, s32 *, u32);
|
extern void sub_801C8C4(u32, u32, s32 *, u32);
|
||||||
|
|
||||||
|
void sub_8036F30();
|
||||||
|
void TradeItem_AddItem();
|
||||||
|
|
||||||
void SetTradeItemMenu(u32);
|
void SetTradeItemMenu(u32);
|
||||||
void PrintTradeItemsLinkError(u32);
|
void PrintTradeItemsLinkError(u32);
|
||||||
void TradeItem_MainMenu();
|
void TradeItem_MainMenu();
|
||||||
@ -230,9 +227,9 @@ void sub_8036590(void)
|
|||||||
|
|
||||||
void sub_80365AC(void)
|
void sub_80365AC(void)
|
||||||
{
|
{
|
||||||
gTradeItemsMenu->chosenItem = 0;
|
gTradeItemsMenu->itemToSend.itemIndex = 0;
|
||||||
gTradeItemsMenu->chosenNum = 1;
|
gTradeItemsMenu->itemToSend.numItems = 1;
|
||||||
gTradeItemsMenu->unk25C = 0;
|
gTradeItemsMenu->itemToSend.unk0 = 0;
|
||||||
switch(sub_801CA08(1)){
|
switch(sub_801CA08(1)){
|
||||||
case 2:
|
case 2:
|
||||||
// Cancel
|
// Cancel
|
||||||
@ -241,18 +238,18 @@ void sub_80365AC(void)
|
|||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// Pop up menu with Confirm, Info, Cancel
|
// Pop up menu with Confirm, Info, Cancel
|
||||||
gTradeItemsMenu->chosenItem = sub_801CB24();
|
gTradeItemsMenu->itemToSend.itemIndex = sub_801CB24();
|
||||||
gTradeItemsMenu->chosenNum = 1;
|
gTradeItemsMenu->itemToSend.numItems = 1;
|
||||||
SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU);
|
SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
gTradeItemsMenu->unk4 = 2;
|
gTradeItemsMenu->unk4 = 2;
|
||||||
gTradeItemsMenu->chosenItem = sub_801CB24();
|
gTradeItemsMenu->itemToSend.itemIndex = sub_801CB24();
|
||||||
gTradeItemsMenu->chosenNum = 1;
|
gTradeItemsMenu->itemToSend.numItems = 1;
|
||||||
sub_8006518(gTradeItemsMenu->unk1E4);
|
sub_8006518(gTradeItemsMenu->unk1E4);
|
||||||
ResetUnusedInputStruct();
|
ResetUnusedInputStruct();
|
||||||
sub_800641C(0,1,1);
|
sub_800641C(0,1,1);
|
||||||
sub_801B3C0(&gTradeItemsMenu->unk25C);
|
sub_801B3C0(&gTradeItemsMenu->itemToSend);
|
||||||
SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO);
|
SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -276,7 +273,7 @@ void sub_8036674(void)
|
|||||||
sub_8006518(gTradeItemsMenu->unk1E4);
|
sub_8006518(gTradeItemsMenu->unk1E4);
|
||||||
ResetUnusedInputStruct();
|
ResetUnusedInputStruct();
|
||||||
sub_800641C(0,1,1);
|
sub_800641C(0,1,1);
|
||||||
sub_801B3C0(&gTradeItemsMenu->unk25C);
|
sub_801B3C0(&gTradeItemsMenu->itemToSend);
|
||||||
SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO);
|
SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
@ -332,9 +329,9 @@ void sub_8036788(void)
|
|||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// Confirm # of item
|
// Confirm # of item
|
||||||
gTradeItemsMenu->chosenNum = gTradeItemsMenu->numItemsToSend;
|
gTradeItemsMenu->itemToSend.numItems = gTradeItemsMenu->numItemsToSend;
|
||||||
gTradeItemsMenu->unk254.itemIndex = gTradeItemsMenu->chosenItem;
|
gTradeItemsMenu->sentItem.itemIndex = gTradeItemsMenu->itemToSend.itemIndex;
|
||||||
gTradeItemsMenu->unk254.numItems = gTradeItemsMenu->numItemsToSend;
|
gTradeItemsMenu->sentItem.numItems = gTradeItemsMenu->numItemsToSend;
|
||||||
sub_801CBB8();
|
sub_801CBB8();
|
||||||
SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_CONFIRM);
|
SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_CONFIRM);
|
||||||
break;
|
break;
|
||||||
@ -354,9 +351,9 @@ void TradeItem_SendItemConfirm(void)
|
|||||||
case 5:
|
case 5:
|
||||||
sub_801CBB8();
|
sub_801CBB8();
|
||||||
// Used temp var to get correct statements
|
// Used temp var to get correct statements
|
||||||
load = gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem];
|
load = gUnknown_203B460->unk50[gTradeItemsMenu->itemToSend.itemIndex];
|
||||||
load -= gTradeItemsMenu->numItemsToSend;
|
load -= gTradeItemsMenu->numItemsToSend;
|
||||||
gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem] = load;
|
gUnknown_203B460->unk50[gTradeItemsMenu->itemToSend.itemIndex] = load;
|
||||||
SetTradeItemMenu(TRADE_ITEMS_PREPARE_TRADE_SAVING);
|
SetTradeItemMenu(TRADE_ITEMS_PREPARE_TRADE_SAVING);
|
||||||
PrepareSavePakWrite(SPECIES_NONE);
|
PrepareSavePakWrite(SPECIES_NONE);
|
||||||
break;
|
break;
|
||||||
@ -396,7 +393,7 @@ void sub_80368D4(void)
|
|||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
case 0:
|
case 0:
|
||||||
if ((gTradeItemsMenu->unk254.itemIndex != 0) && (gTradeItemsMenu->unk254.numItems != 0))
|
if ((gTradeItemsMenu->sentItem.itemIndex != 0) && (gTradeItemsMenu->sentItem.numItems != 0))
|
||||||
{
|
{
|
||||||
TradeItem_AddItem();
|
TradeItem_AddItem();
|
||||||
SetTradeItemMenu(0x11);
|
SetTradeItemMenu(0x11);
|
||||||
@ -434,8 +431,8 @@ void sub_8036950(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->unk254.itemIndex != 0))
|
if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->sentItem.itemIndex != 0))
|
||||||
&& (gTradeItemsMenu->unk254.numItems != 0)) {
|
&& (gTradeItemsMenu->sentItem.numItems != 0)) {
|
||||||
// Link Failure
|
// Link Failure
|
||||||
TradeItem_AddItem(); // Add back the item
|
TradeItem_AddItem(); // Add back the item
|
||||||
SetTradeItemMenu(0xb);
|
SetTradeItemMenu(0xb);
|
||||||
@ -453,9 +450,9 @@ void TradeItem_AddItem(void)
|
|||||||
{
|
{
|
||||||
// Use temp var to get correct statements
|
// Use temp var to get correct statements
|
||||||
u16 load;
|
u16 load;
|
||||||
load = gUnknown_203B460->unk50[gTradeItemsMenu->unk254.itemIndex];
|
load = gUnknown_203B460->unk50[gTradeItemsMenu->sentItem.itemIndex];
|
||||||
load += gTradeItemsMenu->unk254.numItems;
|
load += gTradeItemsMenu->sentItem.numItems;
|
||||||
gUnknown_203B460->unk50[gTradeItemsMenu->unk254.itemIndex] = load;
|
gUnknown_203B460->unk50[gTradeItemsMenu->sentItem.itemIndex] = load;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_80369FC(void)
|
void sub_80369FC(void)
|
||||||
@ -597,7 +594,7 @@ void sub_8036B28(void)
|
|||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
gUnknown_202DE30 = gTradeItemsMenu->numItemsToSend;
|
gUnknown_202DE30 = gTradeItemsMenu->numItemsToSend;
|
||||||
sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->chosenItem,0);
|
sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->itemToSend.itemIndex,0);
|
||||||
sub_8014248(&gUnknown_80E61E4,0,5, &gUnknown_80E6154,0,4,0,0,0x101);
|
sub_8014248(&gUnknown_80E61E4,0,5, &gUnknown_80E6154,0,4,0,0,0x101);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
@ -634,7 +631,7 @@ void sub_8036B28(void)
|
|||||||
// Fallthrough needed on each case
|
// Fallthrough needed on each case
|
||||||
case TRADE_ITEMS_SEND_ITEM_MODE:
|
case TRADE_ITEMS_SEND_ITEM_MODE:
|
||||||
temp = &gTradeItemsMenu->unk244;
|
temp = &gTradeItemsMenu->unk244;
|
||||||
temp2 = &gTradeItemsMenu->unk254;
|
temp2 = &gTradeItemsMenu->sentItem;
|
||||||
load_2 = temp2->numItems;
|
load_2 = temp2->numItems;
|
||||||
temp->itemIndex = temp2->itemIndex;
|
temp->itemIndex = temp2->itemIndex;
|
||||||
temp->numItems = load_2;
|
temp->numItems = load_2;
|
||||||
@ -665,7 +662,7 @@ void sub_8036B28(void)
|
|||||||
break;
|
break;
|
||||||
case 0xd:
|
case 0xd:
|
||||||
gUnknown_202DE30 = gTradeItemsMenu->numItemsToSend;
|
gUnknown_202DE30 = gTradeItemsMenu->numItemsToSend;
|
||||||
sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->chosenItem,0);
|
sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->itemToSend.itemIndex,0);
|
||||||
sub_80141B4(&gUnknown_80E6358,0,0,0x101);
|
sub_80141B4(&gUnknown_80E6358,0,0,0x101);
|
||||||
break;
|
break;
|
||||||
case 0xB:
|
case 0xB:
|
||||||
@ -1085,7 +1082,7 @@ void sub_8036F30(void)
|
|||||||
void sub_8036F74(void)
|
void sub_8036F74(void)
|
||||||
{
|
{
|
||||||
sub_8006518(gTradeItemsMenu->unk184);
|
sub_8006518(gTradeItemsMenu->unk184);
|
||||||
sub_8036ECC(2, gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem]);
|
sub_8036ECC(2, gUnknown_203B460->unk50[gTradeItemsMenu->itemToSend.itemIndex]);
|
||||||
sub_801CCD8();
|
sub_801CCD8();
|
||||||
sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0);
|
sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0);
|
||||||
sub_8036F30();
|
sub_8036F30();
|
||||||
|
Loading…
Reference in New Issue
Block a user