From 15362958722fe6d3070d1911a5a9edd7e7b41c58 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 25 Nov 2020 09:20:45 -0500 Subject: [PATCH 01/90] Add support for dkp-less instructions. Todo: actually test building with dkP. --- Makefile | 81 ++++++++++++++++++++++---------------- berry_fix/Makefile | 34 ++++++++-------- berry_fix/payload/Makefile | 34 ++++++++-------- libagbsyscall/Makefile | 37 ++++++++--------- map_data_rules.mk | 4 +- 5 files changed, 99 insertions(+), 91 deletions(-) diff --git a/Makefile b/Makefile index 07143e4ad4..d39b9fb2d4 100644 --- a/Makefile +++ b/Makefile @@ -1,28 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif - -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - +# check if dkP's base_tools makefile exists ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools + include $(TOOLCHAIN)/base_tools +# otherwise, either use the bin files or the +# arm-none-eabi binaries on the system else -export PATH := $(TOOLCHAIN)/bin:$(PATH) -PREFIX := arm-none-eabi- -OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as + ifneq ($(TOOLCHAIN),) + export PATH := $(TOOLCHAIN)/bin:$(PATH) + endif + PREFIX := arm-none-eabi- + OBJCOPY := $(PREFIX)objcopy + # note: the makefile must be set up so MODERNCC is never called + # if MODERN=0 + export MODERNCC := $(PREFIX)gcc + export AS := $(PREFIX)as endif + +ifneq ($(TOOLCHAIN),) export CPP := $(PREFIX)cpp +else +export CPP := $(CC) -E +endif export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) @@ -37,6 +37,16 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +ROM_NAME := pokeemerald.gba +ELF_NAME := $(ROM_NAME:.gba=.elf) +MAP_NAME := $(ROM_NAME:.gba=.map) +OBJ_DIR_NAME := build/emerald + +MODERN_ROM_NAME := pokeemerald_modern.gba +MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) +MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) +MODERN_OBJ_DIR_NAME := build/modern + SHELL := /bin/bash -o pipefail ELF = $(ROM:.gba=.elf) @@ -64,18 +74,18 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -ROM := pokeemerald.gba -OBJ_DIR := build/emerald +ROM := $(ROM_NAME) +OBJ_DIR := $(OBJ_DIR_NAME) LIBPATH := -L ../../tools/agbcc/lib else -CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -ROM := pokeemerald_modern.gba -OBJ_DIR := build/modern -LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" +ROM := $(MODERN_ROM_NAME) +OBJ_DIR := $(MODERN_OBJ_DIR_NAME) +LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -nostdinc -undef ifeq ($(MODERN),0) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc endif @@ -111,7 +121,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -162,7 +172,7 @@ all: rom tools: $(TOOLDIRS) $(TOOLDIRS): - @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) + @$(MAKE) -C $@ rom: $(ROM) ifeq ($(COMPARE),1) @@ -177,7 +187,7 @@ clean: mostlyclean clean-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidy +mostlyclean: tidynonmodern tidymodern rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -192,10 +202,15 @@ mostlyclean: tidy tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r $(OBJ_DIR) -ifeq ($(MODERN),0) - @$(MAKE) tidy MODERN=1 -endif +tidynonmodern: + rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) + rm -rf $(OBJ_DIR_NAME) + +tidymodern: + rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) + rm -rf $(MODERN_OBJ_DIR_NAME) + ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif @@ -296,11 +311,11 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 0ead3804fd..dd52792ec2 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,28 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif - -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - +# check if dkP's base_tools makefile exists ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools + include $(TOOLCHAIN)/base_tools +# otherwise, either use the bin files or the +# arm-none-eabi binaries on the system else -export PATH := $(TOOLCHAIN)/bin:$(PATH) -PREFIX := arm-none-eabi- -OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as + ifneq ($(TOOLCHAIN),) + export PATH := $(TOOLCHAIN)/bin:$(PATH) + endif + PREFIX := arm-none-eabi- + OBJCOPY := $(PREFIX)objcopy + export MODERNCC := $(PREFIX)gcc + export AS := $(PREFIX)as endif + +ifneq ($(TOOLCHAIN),) export CPP := $(PREFIX)cpp +else +export CPP := $(CC) -E +endif export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index a121fda93b..20d3d60c81 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,28 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif - -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - +# check if dkP's base_tools makefile exists ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools + include $(TOOLCHAIN)/base_tools +# otherwise, either use the bin files or the +# arm-none-eabi binaries on the system else -export PATH := $(TOOLCHAIN)/bin:$(PATH) -PREFIX := arm-none-eabi- -OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as + ifneq ($(TOOLCHAIN),) + export PATH := $(TOOLCHAIN)/bin:$(PATH) + endif + PREFIX := arm-none-eabi- + OBJCOPY := $(PREFIX)objcopy + export MODERNCC := $(PREFIX)gcc + export AS := $(PREFIX)as endif + +ifneq ($(TOOLCHAIN),) export CPP := $(PREFIX)cpp +else +export CPP := $(CC) -E +endif export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 911cdb237c..6c0ba681ed 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,30 +1,27 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif - -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - +# check if dkP's base_tools makefile exists ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools + include $(TOOLCHAIN)/base_tools +# otherwise, either use the bin files or the +# arm-none-eabi binaries on the system else -export PATH := $(TOOLCHAIN)/bin:$(PATH) -PREFIX := arm-none-eabi- -OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as + ifneq ($(TOOLCHAIN),) + export PATH := $(TOOLCHAIN)/bin:$(PATH) + endif + PREFIX := arm-none-eabi- + OBJCOPY := $(PREFIX)objcopy + export MODERNCC := $(PREFIX)gcc + export AS := $(PREFIX)as endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +ifneq ($(TOOLCHAIN),) +export CPP := $(PREFIX)cpp +else +export CPP := $(CC) -E +endif +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe else diff --git a/map_data_rules.mk b/map_data_rules.mk index 0203b383d0..626cd47240 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json From 51e8b8b8dbf51f57a7d925137a369864f7debdbb Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 25 Nov 2020 10:37:50 -0500 Subject: [PATCH 02/90] Don't use base_tools if dkP is installed, also just use $(CC) -E for CPP regardless. --- Makefile | 37 +++++++++++++++++-------------------- berry_fix/Makefile | 35 +++++++++++++++++------------------ berry_fix/payload/Makefile | 35 +++++++++++++++++------------------ libagbsyscall/Makefile | 36 ++++++++++++++++++------------------ 4 files changed, 69 insertions(+), 74 deletions(-) diff --git a/Makefile b/Makefile index d39b9fb2d4..72af64f5c2 100644 --- a/Makefile +++ b/Makefile @@ -1,29 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# check if dkP's base_tools makefile exists -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) - include $(TOOLCHAIN)/base_tools -# otherwise, either use the bin files or the -# arm-none-eabi binaries on the system -else - ifneq ($(TOOLCHAIN),) - export PATH := $(TOOLCHAIN)/bin:$(PATH) - endif - PREFIX := arm-none-eabi- - OBJCOPY := $(PREFIX)objcopy - # note: the makefile must be set up so MODERNCC is never called - # if MODERN=0 - export MODERNCC := $(PREFIX)gcc - export AS := $(PREFIX)as -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system ifneq ($(TOOLCHAIN),) -export CPP := $(PREFIX)cpp -else -export CPP := $(CC) -E +export PATH := $(TOOLCHAIN)/bin:$(PATH) endif -export LD := $(PREFIX)ld + +PREFIX := arm-none-eabi- +OBJCOPY := $(PREFIX)objcopy +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/Makefile b/berry_fix/Makefile index dd52792ec2..f7ce405047 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,27 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# check if dkP's base_tools makefile exists -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) - include $(TOOLCHAIN)/base_tools -# otherwise, either use the bin files or the -# arm-none-eabi binaries on the system -else - ifneq ($(TOOLCHAIN),) - export PATH := $(TOOLCHAIN)/bin:$(PATH) - endif - PREFIX := arm-none-eabi- - OBJCOPY := $(PREFIX)objcopy - export MODERNCC := $(PREFIX)gcc - export AS := $(PREFIX)as -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system ifneq ($(TOOLCHAIN),) -export CPP := $(PREFIX)cpp -else -export CPP := $(CC) -E +export PATH := $(TOOLCHAIN)/bin:$(PATH) endif -export LD := $(PREFIX)ld + +PREFIX := arm-none-eabi- +OBJCOPY := $(PREFIX)objcopy +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index 20d3d60c81..7a6a923960 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,27 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# check if dkP's base_tools makefile exists -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) - include $(TOOLCHAIN)/base_tools -# otherwise, either use the bin files or the -# arm-none-eabi binaries on the system -else - ifneq ($(TOOLCHAIN),) - export PATH := $(TOOLCHAIN)/bin:$(PATH) - endif - PREFIX := arm-none-eabi- - OBJCOPY := $(PREFIX)objcopy - export MODERNCC := $(PREFIX)gcc - export AS := $(PREFIX)as -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system ifneq ($(TOOLCHAIN),) -export CPP := $(PREFIX)cpp -else -export CPP := $(CC) -E +export PATH := $(TOOLCHAIN)/bin:$(PATH) endif -export LD := $(PREFIX)ld + +PREFIX := arm-none-eabi- +OBJCOPY := $(PREFIX)objcopy +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 6c0ba681ed..ba349e9ebb 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,27 +1,27 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# check if dkP's base_tools makefile exists -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) - include $(TOOLCHAIN)/base_tools -# otherwise, either use the bin files or the -# arm-none-eabi binaries on the system -else - ifneq ($(TOOLCHAIN),) - export PATH := $(TOOLCHAIN)/bin:$(PATH) - endif - PREFIX := arm-none-eabi- - OBJCOPY := $(PREFIX)objcopy - export MODERNCC := $(PREFIX)gcc - export AS := $(PREFIX)as -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system ifneq ($(TOOLCHAIN),) -export CPP := $(PREFIX)cpp -else -export CPP := $(CC) -E +export PATH := $(TOOLCHAIN)/bin:$(PATH) endif -export LD := $(PREFIX)ld + +PREFIX := arm-none-eabi- +OBJCOPY := $(PREFIX)objcopy +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc + ifeq ($(OS),Windows_NT) EXE := .exe else From 90d8bb1d332036a26da549b456cf0f2a3ace6d54 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 25 Nov 2020 11:28:01 -0500 Subject: [PATCH 03/90] Partially work on the new Install.MD. Todo: - Legacy Windows instructions - macOS, Linux instructions - figure out what to do with the base_tools note for macOS - dkp installation instructions for platforms which do not install dkp. --- INSTALL.md | 171 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 129 insertions(+), 42 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 20d55e134c..8669738be0 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,82 +1,170 @@ -# Prerequisites +# Instructions -| Linux | macOS | Windows 10 -| - | - | - -| none | [Xcode Command Line Tools Package][xcode] | [Windows Terminal][terminal] and [Windows Subsystem for Linux (WSL)][wsl] +These instructions explain how to set up the tools required to build **pokeemerald**, which assembles the source files into a ROM. -[xcode]: https://developer.apple.com/library/archive/technotes/tn2339/_index.html -[terminal]: https://docs.microsoft.com/windows/terminal/get-started -[wsl]: https://docs.microsoft.com/windows/wsl/install-win10 +If you run into trouble, ask for help on IRC or Discord (see [README.md](README.md)). -Independently from the specific OS, make sure that the `gcc`, `g++`, `make`, `git`, and `libpng-dev` packages or their equivalents are installed and accessible to the development tools that are used by the project (this means that, for example, on Windows, the packages have to be installed in the WSL environment). The package names and installation methods may vary with each OS. +## Windows 10 +WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1. These steps can be skipped if WSL1 is already installed. -Install the devkitARM toolchain of devkitPro as per [the instructions on their wiki](https://devkitpro.org/wiki/devkitPro_pacman). On Windows, follow the Linux instructions inside WSL as any steps about the Windows installer do not apply. +### Installing WSL1 +Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Shift+Insert is paste in the terminal). +``` +dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart +``` +Once the process finishes, restart your machine. -**Debian-based distro users:** This applies to Debian, Ubuntu, and similar distros, including in WSL. If necessary, install the `libarchive13`, `pkg-config`, and `gdebi-core` packages to be able to install devkitPro. +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. Advanced users can pick a preferred Linux distribution, but build instructions may differ. -**Windows 10 users:** WSL 2 is available in the 1903 release (build 18362) and later, therefore existing WSL 1 and [prerelease WSL](https://docs.microsoft.com/windows/wsl/install-legacy) users are recommended to update. Right-click the Start button or press `Win`+`X`, choose Run, and run `ms-settings:about` to determine the Windows version. Also check Windows Update to make sure your installation is up-to-date. +Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. 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). -**Windows 7 and 8.1 users:** pret is no longer focusing on support in pokeemerald for [old versions of Windows](https://support.microsoft.com/help/13853) so consider upgrading to a current release of Windows 10 or try a third-party guide like [this one](https://www.pokecommunity.com/showthread.php?t=425246) instead. +### Setting up WSL1 +Open **Ubuntu** (e.g. using Search). 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). Note that there will be no visible response when typing in the password, but the terminal will still read in input. +A few notes before proceeding +- In the terminal, 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. -# Installation +Update WSL/Ubuntu before continuing. Do this by running the following command: +```bash +sudo apt update && sudo apt upgrade +``` +Note that these commands will likely take a long time to finish. -To set up the repository: +Certain packages are required to build pokeemerald. Install these packages by running the following command: +```bash +sudo apt install build-essential binutils-arm-none-eabi git libpng-dev +``` +(If the above command does not work, try the above command but replacing `apt` with `apt-get`). - git clone https://github.com/pret/pokeemerald - git clone https://github.com/pret/agbcc +WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to install pokeemerald within Windows. You'll have to change the **current working directory** every time you open WSL. - cd ./agbcc - ./build.sh - ./install.sh ../pokeemerald +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: +```bash +cd /mnt/c/Users//Desktop/decomps +``` +Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. + +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username, and the drive letter with the letter of the drive of the folder where the package was saved to. Windows path names are case-insensitive so adhereing to capitalization isn't needed) - cd ../pokeemerald +If this works, then proceed to [Installation](#Installation). +Otherwise, continue reading below for [the older Windows instructions](#windows). + +## Windows +TODO: add general Windows instructions + +## macOS +TODO: add macOS instructions + +## Linux +TODO: add Linux instructions + +## Installation +To download the pokeemerald repository: +```bash +git clone https://github.com/pret/pokeemerald +``` +If agbcc isn't built, run the following commands to build and install it into pokeemerald: +``` +git clone https://github.com/pret/agbcc +cd agbcc +./build.sh +./install.sh ../pokeemerald +``` +Otherwise, run the following commands to install agbcc into pokeemerald: +``` +cd agbcc +./install.sh ../pokeemerald +``` +Then, change directory back to the base directory where pokeemerald and agbcc are stored: +``` +cd .. +``` +Now you're ready to [build **pokeemerald**](#build-pokeemerald) +## Build pokeemerald +First, change directory to the pokeemerald folder: +```bash +cd pokeemerald +``` To build **pokeemerald.gba** for the first time and confirm it matches the official ROM image: - - make compare - +```bash +make compare +``` If an OK is returned, then the installation went smoothly. -**Windows users:** Consider adding exceptions for the `pokeemerald` and `agbcc` folders 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. - - -# Start - To build **pokeemerald.gba** with your changes: +```bash +make +``` - make - -**macOS users:** If the base tools are not found in new Terminal sessions after the first successful build, run `echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile` once to prevent the issue from occurring again. Verify that the `devkitarm-rules` package is installed as well; if not, install it by running `sudo dkp-pacman -S devkitarm-rules`. +**Windows users:** Consider adding an exception for the `pokeemerald` 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. +**macOS users (this is probably outdated):** If the base tools are not found in new Terminal sessions after the first successful build, run `echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile` once to prevent the issue from occurring again. Verify that the `devkitarm-rules` package is installed as well; if not, install it by running `sudo dkp-pacman -S devkitarm-rules`. # Building guidance - ## Parallel builds 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. -To speed up building, run: - - make -j$(nproc) +To speed up building, first get the value of `nproc`: +```bash +nproc +``` +Builds can then be sped up by running the following command: +```bash +make -j +``` +Replace `` 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)). - ## Debug info To build **pokeemerald.elf** with enhanced debug info: - - make DINFO=1 - +```bash +make DINFO=1 +``` ## devkitARM's C compiler -This project supports the `arm-none-eabi-gcc` compiler included with devkitARM r52. To build this target, simply run: +This project supports the `arm-none-eabi-gcc` compiler included with devkitARM. If devkitARM has already been installed as part of the platform-specific instructions, simply run: +```bash +make modern +``` +Otherwise, follow the instructions below to install devkitARM. +### Installing devkitARM on WSL1 - make modern +`gdebi-core` must be installed beforehand in order to install devkitPro (which facilitates the installation of devkitARM). Install this with the following command: +```bash +sudo apt install gdebi-core +``` +(If the above command does not work, try the above command but replacing `apt` with `apt-get`). +Once `gdebi-core` is done installing, download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. + +Change directory to where the package was downloaded. For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: +```bash +cd /mnt/c/Users//Downloads +``` +(Replace with your Windows username) + +Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. +```bash +sudo gdebi devkitpro-pacman.amd64.deb +sudo dkp-pacman -Sy +sudo dkp-pacman -S gba-dev +``` +Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + +Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): +```bash +source /etc/profile.d/devkit-env.sh +``` +devkitARM is now installed. ## Other toolchains @@ -90,7 +178,6 @@ The following is an example: To compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present. - # Useful additional tools * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps From 01637deee53232432630e1ff64ff4550c7ca7aec Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 25 Nov 2020 11:30:08 -0500 Subject: [PATCH 04/90] Fix bad clarification. --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 8669738be0..66d49b412d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -47,7 +47,7 @@ cd /mnt/c/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username, and the drive letter with the letter of the drive of the folder where the package was saved to. Windows path names are case-insensitive so adhereing to capitalization isn't needed) +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username, and the drive letter with the letter of the drive where you want to save pokeemerald. Windows path names are case-insensitive so adhereing to capitalization isn't needed) If this works, then proceed to [Installation](#Installation). From 6bf6cf2eb8ca0ee7b66c62ca9ab39d59f2a83877 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 25 Nov 2020 11:32:22 -0500 Subject: [PATCH 05/90] Escape literal text. --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 66d49b412d..e0164c1f31 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -47,7 +47,7 @@ cd /mnt/c/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username, and the drive letter with the letter of the drive where you want to save pokeemerald. Windows path names are case-insensitive so adhereing to capitalization isn't needed) +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username, and the drive letter with the letter of the drive where you want to save pokeemerald. Windows path names are case-insensitive so adhereing to capitalization isn't needed) If this works, then proceed to [Installation](#Installation). @@ -150,7 +150,7 @@ Change directory to where the package was downloaded. For example, if the packag ```bash cd /mnt/c/Users//Downloads ``` -(Replace with your Windows username) +(Replace *\* with your Windows username) Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. ```bash From 59a6d18679365cb3a2e2d7fa7571fa2495652939 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 25 Nov 2020 11:46:12 -0500 Subject: [PATCH 06/90] Minor INSTALL.md cleanup, also don't print the wall of linked objects during make (helps spot warnings more easily) --- INSTALL.md | 4 ++-- Makefile | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index e0164c1f31..779572c69f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -8,7 +8,7 @@ If you run into trouble, ask for help on IRC or Discord (see [README.md](README. WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1. These steps can be skipped if WSL1 is already installed. ### Installing WSL1 -Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Shift+Insert is paste in the terminal). +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). ``` dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart ``` @@ -21,7 +21,7 @@ Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubunt ### Setting up WSL1 Open **Ubuntu** (e.g. using Search). 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). Note that there will be no visible response when typing in the password, but the terminal will still read in input. -A few notes before proceeding +A few notes before proceeding: - In the terminal, 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"). diff --git a/Makefile b/Makefile index 72af64f5c2..aa588445f2 100644 --- a/Makefile +++ b/Makefile @@ -341,7 +341,8 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall - cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) From 976b967732454b3171ac5b5d61b865f1cc3a5777 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Thu, 26 Nov 2020 20:21:16 -0500 Subject: [PATCH 07/90] Add msys2 and Cygwin instructions, also add .exe extension to built tools. Todo: actually extensively test out msys2 and Cygwin, and double check the readme. --- INSTALL.md | 131 ++++++++++++++++++++++++++++++++++++--- Makefile | 6 +- tools/aif2pcm/Makefile | 10 ++- tools/bin2c/Makefile | 10 ++- tools/gbafix/Makefile | 10 ++- tools/gbagfx/Makefile | 12 +++- tools/jsonproc/Makefile | 10 ++- tools/mapjson/Makefile | 10 ++- tools/mid2agb/Makefile | 10 ++- tools/preproc/Makefile | 10 ++- tools/ramscrgen/Makefile | 10 ++- tools/rsfont/Makefile | 10 ++- tools/scaninc/Makefile | 10 ++- 13 files changed, 213 insertions(+), 36 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 779572c69f..f50ea1db76 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -4,8 +4,22 @@ These instructions explain how to set up the tools required to build **pokeemera If you run into trouble, ask for help on IRC or Discord (see [README.md](README.md)). -## Windows 10 -WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1. These steps can be skipped if WSL1 is already installed. +## Windows +Windows has instructions for building with three possible terminals, if users encounter unexpected errors in following instructions for one of the terminals. These instructions are: +- [Windows 10 (WSL1)](#windows-10-wsl1) +- [Windows (msys2)](#windows-(msys2)) +- [Windows (Cygwin)](#windows-(cygwin)) + +The instructions have been ordered by the performance of their respective terminal. Out of the provided terminals, **WSL1** builds pokeemerald the fastest, and is thus **highly recommended**, but is only available on Windows 10. **msys2** is the second fastest, and **Cygwin** is the slowest. For advanced users, **WSL2** is an option and is even faster than **WSL1** if files are stored on the WSL2 file system, but some tools such as [porymap](https://github.com/huderlem/porymap) cannot interact with said files due to problems [outside the control of maintainers](https://bugreports.qt.io/browse/QTBUG-86277). + +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 the 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 **pokeemerald**. The following instructions will explain how to install WSL1 (referred interchangeably as WSL). + +If WSL 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 pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-(WSL1)). ### Installing WSL1 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). @@ -14,7 +28,7 @@ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux ``` Once the process finishes, restart your machine. -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. Advanced users can pick a preferred Linux distribution, but build instructions may differ. +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. Advanced users can pick a preferred Linux distribution, but setup instructions may differ. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. 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). @@ -39,6 +53,7 @@ sudo apt install build-essential binutils-arm-none-eabi git libpng-dev ``` (If the above command does not work, try the above command but replacing `apt` with `apt-get`). +### Choosing where to store pokeemerald (WSL1) WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to install pokeemerald within Windows. You'll have to change the **current working directory** every time you open WSL. For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: @@ -47,14 +62,103 @@ cd /mnt/c/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username, and the drive letter with the letter of the drive where you want to save pokeemerald. Windows path names are case-insensitive so adhereing to capitalization isn't needed) +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) If this works, then proceed to [Installation](#Installation). -Otherwise, continue reading below for [the older Windows instructions](#windows). +Otherwise, continue reading below for [Windows instructions using msys2](#windows-(msys2)). -## Windows -TODO: add general Windows instructions +## Windows (msys2) + +If devkitPro is not installed, or is installed but without the GBA Development component, then go to [Installing devkitPro](#installing-devkitpro). If devkitPro is installed, but msys2 hasn't previously been set up for another decompilation project, then go to [Setting up msys2](#setting-up-msys2). Otherwise, open msys2 and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-(msys2)). + +### Installing devkitPro +Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). + +Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to use devkitPro for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged. + +### Setting up msys2 +Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. + +Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. + +Certain packages are required to build pokeemerald. Install these by running the following command: +```bash +pacman -S make gcc zlib-devel git +``` +(This command will ask for confirmation, just enter the yes action when prompted). + +Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). + +Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\__**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: +```bash +cd Downloads +``` +(While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. Windows path names are case-insensitive so adhereing to capitalization isn’t needed. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there) + +Run the following command to uncompress and install libpng. +```bash +tar xf libpng-1.6.37 +cd libpng-1.6.37 +./configure --prefix=/usr +make check +make install +``` +Then finally, run the following command to change back to the user profile folder. +```bash +cd +``` + +### Choosing where to store pokeemerald (msys2) +At this point, you can choose a folder to store pokeemerald into. If so, you'll have to change the **current working directory** every time you open msys2. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). + +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: +```bash +cd Desktop/decomps +``` +Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. + +If this works, then proceed to [Installation](#Installation). + +Otherwise, continue reading below for [Windows instructions using Cygwin](#windows-(cygwin)). + +## Windows (Cygwin) +If devkitPro is not installed, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. + +If Cygwin is not installed, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). Otherwise, go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-(cygwin)) + +### Installing Cygwin +Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. + +Run the Cygwin setup and leave the default settings. At "Select Packages", set the view to "Full" and choose to install the following: +- `make` +- `git` +- `gcc-core` +- `gcc-g++` +- `libpng-devel` + +To quickly find these, use the search bar and type the name of each package. Ensure that the selected package name is the **exact** same as the one you're trying to download, e.g. `cmake` is **NOT** the same as `make`. + +Double click on the text that says "**Skip**" next to each package to select the most recent version to install. If the text says anything other than "**Skip**", (e.g. Keep or a version number), then the package is or will be installed and you don't need to do anything. + +Once all required packages have been selected, finish the installation. + +### Choosing where to store pokeemerald (Cygwin) +Open **Cygwin**. + +Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. + +Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald there, you'll have to change the **current working directory** every time you open Cygwin. + +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: +```bash +cd c:/Users//Desktop/decomps +``` +Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. + +(Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) + +If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## macOS TODO: add macOS instructions @@ -63,17 +167,24 @@ TODO: add macOS instructions TODO: add Linux instructions ## Installation -To download the pokeemerald repository: +If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: ```bash git clone https://github.com/pret/pokeemerald ``` -If agbcc isn't built, run the following commands to build and install it into pokeemerald: +If agbcc has not been built before, run the following commands to build and install it into pokeemerald: ``` git clone https://github.com/pret/agbcc cd agbcc ./build.sh ./install.sh ../pokeemerald ``` +If agbcc has been built before, 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 pokeemerald: +``` +cd agbcc +git clean -fX +./build.sh +./install.sh ../pokeemerald +``` Otherwise, run the following commands to install agbcc into pokeemerald: ``` cd agbcc @@ -93,7 +204,7 @@ To build **pokeemerald.gba** for the first time and confirm it matches the offic ```bash make compare ``` -If an OK is returned, then the installation went smoothly. +If an OK is returned, then the installation went smoothly. **Note:** if you switched from Cygwin to msys2, you must run `make clean-tools` once before any subsequent `make` commands. To build **pokeemerald.gba** with your changes: ```bash diff --git a/Makefile b/Makefile index aa588445f2..bffa4b5609 100644 --- a/Makefile +++ b/Makefile @@ -235,7 +235,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -244,10 +244,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index 77df291527..dd48a87597 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,12 +6,18 @@ LIBS = -lm SRCS = main.c extended.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: aif2pcm +all: aif2pcm$(EXE) @: -aif2pcm: $(SRCS) +aif2pcm$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 52806e39c6..4dbfab94fe 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,10 +6,16 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -all: bin2c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: bin2c$(EXE) @: -bin2c: $(SRCS) +bin2c$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index 91a60a9e4c..efb016c97e 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,10 +3,16 @@ CC ?= gcc SRCS = gbafix.c -all: gbafix +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: gbafix$(EXE) @: -gbafix: $(SRCS) +gbafix$(EXE): $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index f0638414da..b4244aa8d6 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,15 +6,21 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: gbagfx +all: gbagfx$(EXE) @: -gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index 47198b171e..eec73eb7bf 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,12 +8,18 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: jsonproc +all: jsonproc$(EXE) @: -jsonproc: $(SRCS) $(HEADERS) +jsonproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index c1f703f9fe..100e809c6c 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,12 +6,18 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mapjson +all: mapjson$(EXE) @: -mapjson: $(SRCS) $(HEADERS) +mapjson$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 451d4b39fb..553b7859ed 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,12 +6,18 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mid2agb +all: mid2agb$(EXE) @: -mid2agb: $(SRCS) $(HEADERS) +mid2agb$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 8c48afea2a..1507c973f2 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,12 +8,18 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: preproc +all: preproc$(EXE) @: -preproc: $(SRCS) $(HEADERS) +preproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index 4e901a29c1..a9375c87ab 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,10 +8,16 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -all: ramscrgen +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: ramscrgen$(EXE) @: -ramscrgen: $(SRCS) $(HEADERS) +ramscrgen$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 930a92b36e..0bc88a42b7 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,10 +8,16 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -all: rsfont +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: rsfont$(EXE) @: -rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 52e663d8da..96d92f7062 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,10 +8,16 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -all: scaninc +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: scaninc$(EXE) @: -scaninc: $(SRCS) $(HEADERS) +scaninc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: From 3d0f0384237185d4fdab5efedd82d2ae25c1918d Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sat, 28 Nov 2020 11:30:11 -0500 Subject: [PATCH 08/90] Add install instructions for repositories which don't have dkp-less support. --- INSTALL.md | 2 ++ docs/legacy_WSL1_INSTALL.md | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 docs/legacy_WSL1_INSTALL.md diff --git a/INSTALL.md b/INSTALL.md index f50ea1db76..4ac4690c0f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -47,6 +47,8 @@ sudo apt update && sudo apt upgrade ``` Note that these commands will likely take a long time to finish. +*Note: If the repository you plan to build was created before 2020/XX/YY (e.g. modifications of pokeemerald that haven't updated) then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md). These repositories can be identified by the [older revision](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md) of the INSTALL.md* + Certain packages are required to build pokeemerald. Install these packages by running the following command: ```bash sudo apt install build-essential binutils-arm-none-eabi git libpng-dev diff --git a/docs/legacy_WSL1_INSTALL.md b/docs/legacy_WSL1_INSTALL.md new file mode 100644 index 0000000000..f9ed7b0e21 --- /dev/null +++ b/docs/legacy_WSL1_INSTALL.md @@ -0,0 +1,32 @@ +### Setting up WSL1 (Legacy Portion) +Certain packages are required to build pokeemerald. Install these packages by running the following command: +```bash +sudo apt install build-essential git libpng-dev gdebi-core +``` +(If the above command does not work, try the above command but replacing `apt` with `apt-get`). + +Download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. + +WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. To install the devkitPro package, you'll need to change to the **current working directory** where the package file was saved. + +For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: + +```bash +cd /mnt/c/Users//Downloads +``` + +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username. Windows path names are case-insensitive so adhereing to capitalization isn't needed) + +Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. +```bash +sudo gdebi devkitpro-pacman.amd64.deb +sudo dkp-pacman -Sy +sudo dkp-pacman -S gba-dev +``` +Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + +Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): +```bash +source /etc/profile.d/devkit-env.sh +``` +Proceed to [Choosing where to store pokeemerald (WSL1) of the current INSTALL.md](/INSTALL.md#choosing-where-to-store-pokeemerald-(WSL1)). From b9eb605fbf07b0f27917e83b302074abd2f681d0 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sat, 28 Nov 2020 11:34:03 -0500 Subject: [PATCH 09/90] Fix broken header links. --- INSTALL.md | 14 +++++++------- docs/legacy_WSL1_INSTALL.md | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 4ac4690c0f..14469ff104 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -7,8 +7,8 @@ If you run into trouble, ask for help on IRC or Discord (see [README.md](README. ## Windows Windows has instructions for building with three possible terminals, if users encounter unexpected errors in following instructions for one of the terminals. These instructions are: - [Windows 10 (WSL1)](#windows-10-wsl1) -- [Windows (msys2)](#windows-(msys2)) -- [Windows (Cygwin)](#windows-(cygwin)) +- [Windows (msys2)](#windows-msys2) +- [Windows (Cygwin)](#windows-cygwin) The instructions have been ordered by the performance of their respective terminal. Out of the provided terminals, **WSL1** builds pokeemerald the fastest, and is thus **highly recommended**, but is only available on Windows 10. **msys2** is the second fastest, and **Cygwin** is the slowest. For advanced users, **WSL2** is an option and is even faster than **WSL1** if files are stored on the WSL2 file system, but some tools such as [porymap](https://github.com/huderlem/porymap) cannot interact with said files due to problems [outside the control of maintainers](https://bugreports.qt.io/browse/QTBUG-86277). @@ -19,7 +19,7 @@ All of the Windows instructions assume that the default drive is C:\\. If this d ## Windows 10 (WSL1) WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1 (referred interchangeably as WSL). -If WSL 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 pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-(WSL1)). +If WSL 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 pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1). ### Installing WSL1 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). @@ -68,11 +68,11 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer If this works, then proceed to [Installation](#Installation). -Otherwise, continue reading below for [Windows instructions using msys2](#windows-(msys2)). +Otherwise, continue reading below for [Windows instructions using msys2](#windows-msys2). ## Windows (msys2) -If devkitPro is not installed, or is installed but without the GBA Development component, then go to [Installing devkitPro](#installing-devkitpro). If devkitPro is installed, but msys2 hasn't previously been set up for another decompilation project, then go to [Setting up msys2](#setting-up-msys2). Otherwise, open msys2 and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-(msys2)). +If devkitPro is not installed, or is installed but without the GBA Development component, then go to [Installing devkitPro](#installing-devkitpro). If devkitPro is installed, but msys2 hasn't previously been set up for another decompilation project, then go to [Setting up msys2](#setting-up-msys2). Otherwise, open msys2 and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-msys2). ### Installing devkitPro Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). @@ -122,12 +122,12 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer If this works, then proceed to [Installation](#Installation). -Otherwise, continue reading below for [Windows instructions using Cygwin](#windows-(cygwin)). +Otherwise, continue reading below for [Windows instructions using Cygwin](#windows-cygwin). ## Windows (Cygwin) If devkitPro is not installed, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. -If Cygwin is not installed, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). Otherwise, go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-(cygwin)) +If Cygwin is not installed, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). Otherwise, go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin) ### Installing Cygwin Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. diff --git a/docs/legacy_WSL1_INSTALL.md b/docs/legacy_WSL1_INSTALL.md index f9ed7b0e21..5e2a7e1679 100644 --- a/docs/legacy_WSL1_INSTALL.md +++ b/docs/legacy_WSL1_INSTALL.md @@ -29,4 +29,4 @@ Run the following command to set devkitPro related environment variables (altern ```bash source /etc/profile.d/devkit-env.sh ``` -Proceed to [Choosing where to store pokeemerald (WSL1) of the current INSTALL.md](/INSTALL.md#choosing-where-to-store-pokeemerald-(WSL1)). +Proceed to [Choosing where to store pokeemerald (WSL1) of the current INSTALL.md](/INSTALL.md#choosing-where-to-store-pokeemerald-WSL1). From 47d4ff24483abbd416598055f8a5867ff7723378 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sat, 28 Nov 2020 11:38:02 -0500 Subject: [PATCH 10/90] Add case for downloads folder with space for the legacy WSL1 instructions, also fix WSL1 path in dedicated folder example with spaces. --- INSTALL.md | 2 +- docs/legacy_WSL1_INSTALL.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 14469ff104..f096ad6bc5 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -64,7 +64,7 @@ cd /mnt/c/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) If this works, then proceed to [Installation](#Installation). diff --git a/docs/legacy_WSL1_INSTALL.md b/docs/legacy_WSL1_INSTALL.md index 5e2a7e1679..731b8f4338 100644 --- a/docs/legacy_WSL1_INSTALL.md +++ b/docs/legacy_WSL1_INSTALL.md @@ -15,7 +15,7 @@ For example, if the package file was saved to **C:\Users\\_\_\Downloads** cd /mnt/c/Users//Downloads ``` -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username. Windows path names are case-insensitive so adhereing to capitalization isn't needed) +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Downloads folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. ```bash From 24d94185b9857d68f96665ff4205e8086789838b Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sat, 28 Nov 2020 11:42:45 -0500 Subject: [PATCH 11/90] Fix typo (thanks Spherical Ice). --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index f096ad6bc5..05c914ea2a 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -12,7 +12,7 @@ Windows has instructions for building with three possible terminals, if users en The instructions have been ordered by the performance of their respective terminal. Out of the provided terminals, **WSL1** builds pokeemerald the fastest, and is thus **highly recommended**, but is only available on Windows 10. **msys2** is the second fastest, and **Cygwin** is the slowest. For advanced users, **WSL2** is an option and is even faster than **WSL1** if files are stored on the WSL2 file system, but some tools such as [porymap](https://github.com/huderlem/porymap) cannot interact with said files due to problems [outside the control of maintainers](https://bugreports.qt.io/browse/QTBUG-86277). -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 the drive letter when reading the instructions. +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. From 680187d7d9ca1e5b4088c9a9180df34b62b1bfd0 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 14 Dec 2020 02:16:25 -0500 Subject: [PATCH 12/90] Add more detailed notes on Windows terminal comparisons, fix Cygwin instructions (didn't export devkitpro), add macOS and Linux instructions. macOS and Linux instructions untested. --- INSTALL.md | 94 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 9 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 05c914ea2a..c4e0a6e4c9 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -10,7 +10,7 @@ Windows has instructions for building with three possible terminals, if users en - [Windows (msys2)](#windows-msys2) - [Windows (Cygwin)](#windows-cygwin) -The instructions have been ordered by the performance of their respective terminal. Out of the provided terminals, **WSL1** builds pokeemerald the fastest, and is thus **highly recommended**, but is only available on Windows 10. **msys2** is the second fastest, and **Cygwin** is the slowest. For advanced users, **WSL2** is an option and is even faster than **WSL1** if files are stored on the WSL2 file system, but some tools such as [porymap](https://github.com/huderlem/porymap) cannot interact with said files due to problems [outside the control of maintainers](https://bugreports.qt.io/browse/QTBUG-86277). +The instructions have been ordered by the performance of their respective terminal. Out of the provided terminals, **WSL1** builds pokeemerald the fastest, and is thus **highly recommended**, but is only available on Windows 10. **msys2** is the second fastest, and **Cygwin** is the slowest. Unscientific benchmarks suggest msys2 is 2x slower than WSL1, and Cygwin is **5-6x** slower than WSL1. For advanced users, **WSL2** is an option and is even faster than **WSL1** if files are stored on the WSL2 file system, but some tools such as [porymap](https://github.com/huderlem/porymap) cannot interact with said files due to problems [outside the control of maintainers](https://bugreports.qt.io/browse/QTBUG-86277). 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. @@ -125,14 +125,14 @@ If this works, then proceed to [Installation](#Installation). Otherwise, continue reading below for [Windows instructions using Cygwin](#windows-cygwin). ## Windows (Cygwin) -If devkitPro is not installed, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. +If devkitPro is not installed, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. Remember to not continue following the msys2 instructions by mistake! -If Cygwin is not installed, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). Otherwise, go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin) +If Cygwin is not installed, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). If Cygwin is installed, but is not configured to work with devkitPro, then go to [Configuring devkitPro for Cygwin](#configuring-devkitpro-for-cygwin). Otherwise, open Cygwin and go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin) ### Installing Cygwin Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. -Run the Cygwin setup and leave the default settings. At "Select Packages", set the view to "Full" and choose to install the following: +Run the Cygwin setup and leave the default settings. At "Choose a Download Site", select any mirror within the Available Download Sites. At "Select Packages", set the view to "Full" (top left) and choose to install the following: - `make` - `git` - `gcc-core` @@ -144,12 +144,22 @@ To quickly find these, use the search bar and type the name of each package. Ens Double click on the text that says "**Skip**" next to each package to select the most recent version to install. If the text says anything other than "**Skip**", (e.g. Keep or a version number), then the package is or will be installed and you don't need to do anything. Once all required packages have been selected, finish the installation. - -### Choosing where to store pokeemerald (Cygwin) +### Configuring devkitPro for Cygwin Open **Cygwin**. Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. +Run the following commands to configure devkitPro to work with Cygwin. +```bash +export DEVKITPRO=/cygdrive/c/devkitpro +echo export DEVKITPRO=$DEVKITPRO >> ~/.bashrc +export DEVKITARM=$DEVKITPRO/devkitARM +echo export DEVKITARM=$DEVKITARM >> ~/.bashrc +``` +(Replace the drive letter c with the actual drive letter if it is not c). + +### Choosing where to store pokeemerald (Cygwin) + Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald there, you'll have to change the **current working directory** every time you open Cygwin. For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: @@ -163,10 +173,76 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## macOS -TODO: add macOS instructions +The [Xcode Command Line Tools Package](https://developer.apple.com/library/archive/technotes/tn2339/_index.html) is required. Open your Terminal and run the following command: +```bash +xcode-select --install +``` + +If devkitPro is not installed, then go to [Installing devkitPro (macOS)](#installing-devkitpro-macos). Otherwise, open the Terminal and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) + +### Installing devkitPro (macOS) +Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). + +Run the `open` command to install the devkitPro package. The command arguments depend on where the package was saved to. For example, if the package was saved to `~/Downloads` (the Downloads location for most users), enter this command: +```bash +open ~/Downloads/devkitpro-pacman-installer.pkg +``` +(If the path has spaces, then the path must be wrapped with quotations, e.g. "~/Downloads/My Downloads/devkitpro-pacman-installer.pkg"). + +Now devkitPro must be configured with the tools required for GBA development. Run the following commands: +```bash +sudo dkp-pacman -Sy +sudo dkp-pacman -S gba-dev +sudo dkp-pacman -S devkitarm-rules +``` +At this point, press Enter to confirm the installation. After the tools are installed, devkitPro must now be made accessible from anywhere by the system. To do so, run the following commands: + +``` +export DEVKITPRO=$HOME/devkitpro +echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc +export DEVKITARM=$DEVKITPRO/devkitARM +echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc + +echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile +``` + +### Choosing where to store pokeemerald (macOS) +At this point, you can choose a folder to store pokeemerald into. If so, you'll have to change the **current working directory** every time you open the Terminal. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). + +For example, if you want to store pokeemerald (and agbcc) in **~/Desktop/decomps**, enter this command: +```bash +cd Desktop/decomps +``` +Note that the directory **must exist** in the folder system. If you want to store pokeemerald 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. + +If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## Linux -TODO: add Linux instructions +Open Terminal and enter the following commands, depending on which distro you're using. + +### Debian or Ubuntu +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 pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux). + +### Other distributions +_(Instructions for other distributions would be greatly appreciated!)_ + +If your distro is not listed here, try to find the required software in its repositories: +- `gcc` +- `g++` +- `make` +- `git` +- `libpng-dev` + +Then, install the devkitARM toolchain of [devkitPro](https://devkitpro.org/wiki/Getting_Started) as per the instructions on their wiki. + +### Choosing where to store pokeemerald (Linux) +At this point, you can choose a folder to store pokeemerald (and agbcc) into. If so, you'll have to change the current working directory every time you open the Terminal. + +If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## Installation If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: @@ -295,4 +371,4 @@ To compile the `modern` target with this toolchain, the subdirectories `lib`, `i * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps * [poryscript](https://github.com/huderlem/poryscript) for scripting ([VS Code extension](https://marketplace.visualstudio.com/items?itemName=karathan.poryscript)) -* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps +* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps \ No newline at end of file From 30bd712fd401a9aace68e9f2571cf11ae7eb9731 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 14 Dec 2020 02:20:07 -0500 Subject: [PATCH 13/90] Temporarily change repo links to mine for people testing builds. --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index c4e0a6e4c9..b263cc52f2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -247,11 +247,11 @@ If this works, then proceed to [Installation](#Installation). Otherwise, ask for ## Installation If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: ```bash -git clone https://github.com/pret/pokeemerald +git clone https://github.com/luckytyphlosion/pokeemerald ``` If agbcc has not been built before, run the following commands to build and install it into pokeemerald: ``` -git clone https://github.com/pret/agbcc +git clone https://github.com/luckytyphlosion/agbcc cd agbcc ./build.sh ./install.sh ../pokeemerald From 4ecbb91ccb609a83d82665d476d22228a1f88762 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 12:46:10 -0500 Subject: [PATCH 14/90] Simplify macOS instructions, clarify Linux instructions, general cleanup of macOS and Linux instructions, also some other minor clarifications. --- INSTALL.md | 64 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index b263cc52f2..ecbce35a26 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -19,7 +19,7 @@ All of the Windows instructions assume that the default drive is C:\\. If this d ## Windows 10 (WSL1) WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1 (referred interchangeably as WSL). -If WSL 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 pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1). +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 pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1). ### Installing WSL1 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). @@ -28,7 +28,7 @@ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux ``` Once the process finishes, restart your machine. -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. Advanced users can pick a preferred Linux distribution, but setup instructions may differ. +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 (Note for advanced users: Debian also works here). Advanced users can pick a preferred Linux distribution, but setup instructions may differ. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. 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). @@ -173,7 +173,7 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## macOS -The [Xcode Command Line Tools Package](https://developer.apple.com/library/archive/technotes/tn2339/_index.html) is required. Open your Terminal and run the following command: +If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/library/archive/technotes/tn2339/_index.html), open your Terminal, and run the following command: ```bash xcode-select --install ``` @@ -183,13 +183,9 @@ If devkitPro is not installed, then go to [Installing devkitPro (macOS)](#instal ### Installing devkitPro (macOS) Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). -Run the `open` command to install the devkitPro package. The command arguments depend on where the package was saved to. For example, if the package was saved to `~/Downloads` (the Downloads location for most users), enter this command: -```bash -open ~/Downloads/devkitpro-pacman-installer.pkg -``` -(If the path has spaces, then the path must be wrapped with quotations, e.g. "~/Downloads/My Downloads/devkitpro-pacman-installer.pkg"). +Open the package to install devkitPro pacman. -Now devkitPro must be configured with the tools required for GBA development. Run the following commands: +devkitPro must be configured with the tools required for GBA development. Run the following commands: ```bash sudo dkp-pacman -Sy sudo dkp-pacman -S gba-dev @@ -207,7 +203,7 @@ echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile ``` ### Choosing where to store pokeemerald (macOS) -At this point, you can choose a folder to store pokeemerald into. If so, you'll have to change the **current working directory** every time you open the Terminal. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). +At this point, you can choose a folder to store pokeemerald into. If so, you'll have to change the **current working directory** every time you open the Terminal. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). For example, if you want to store pokeemerald (and agbcc) in **~/Desktop/decomps**, enter this command: ```bash @@ -215,12 +211,14 @@ cd Desktop/decomps ``` Note that the directory **must exist** in the folder system. If you want to store pokeemerald 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. +(If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"`) + If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## Linux Open Terminal and enter the following commands, depending on which distro you're using. -### Debian or Ubuntu +### 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 @@ -228,16 +226,23 @@ sudo apt install build-essential binutils-arm-none-eabi git libpng-dev Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux). ### Other distributions -_(Instructions for other distributions would be greatly appreciated!)_ +_(Specific instructions for other distributions would be greatly appreciated!)_ -If your distro is not listed here, try to find the required software in its repositories: +Try to find the required software in its repositories: - `gcc` - `g++` - `make` - `git` - `libpng-dev` -Then, install the devkitARM toolchain of [devkitPro](https://devkitpro.org/wiki/Getting_Started) as per the instructions on their wiki. +Then, follow the instructions [here](https://devkitpro.org/wiki/devkitPro_pacman) to install devkitPro's pacman installer. As a reminder, the goal is to configure an existing pacman installation to recognize devkitPro's repositories. + +Once devkitPro pacman is configured, run the following commands: +```bash +sudo pacman -Sy +sudo pacman -S gba-dev +``` +Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. ### Choosing where to store pokeemerald (Linux) At this point, you can choose a folder to store pokeemerald (and agbcc) into. If so, you'll have to change the current working directory every time you open the Terminal. @@ -256,7 +261,7 @@ cd agbcc ./build.sh ./install.sh ../pokeemerald ``` -If agbcc has been built before, 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 pokeemerald: +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 pokeemerald: ``` cd agbcc git clean -fX @@ -278,11 +283,11 @@ First, change directory to the pokeemerald folder: ```bash cd pokeemerald ``` -To build **pokeemerald.gba** for the first time and confirm it matches the official ROM image: +To build **pokeemerald.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. **Note:** if you switched from Cygwin to msys2, you must run `make clean-tools` once before any subsequent `make` commands. +If an OK is returned, then the installation went smoothly. **Note:** if you switched terminals on Windows since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands. To build **pokeemerald.gba** with your changes: ```bash @@ -291,8 +296,6 @@ make **Windows users:** Consider adding an exception for the `pokeemerald` 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. -**macOS users (this is probably outdated):** If the base tools are not found in new Terminal sessions after the first successful build, run `echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile` once to prevent the issue from occurring again. Verify that the `devkitarm-rules` package is installed as well; if not, install it by running `sudo dkp-pacman -S devkitarm-rules`. - # Building guidance ## Parallel builds @@ -320,7 +323,7 @@ make DINFO=1 ## devkitARM's C compiler -This project supports the `arm-none-eabi-gcc` compiler included with devkitARM. If devkitARM has already been installed as part of the platform-specific instructions, simply run: +This project supports the `arm-none-eabi-gcc` compiler included with devkitARM. If devkitARM (a.k.a. gba-dev) has already been installed as part of the platform-specific instructions, simply run: ```bash make modern ``` @@ -355,6 +358,27 @@ source /etc/profile.d/devkit-env.sh ``` devkitARM is now installed. +### Installing devkitARM on Debian/Ubuntu-based distributions +If `gdebi-core` is not installed, run the following command: +```bash +sudo apt install gdebi-core +``` +Download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. + +Change directory to where the package was downloaded. Then, run the following commands to install devkitARM: +```bash +sudo gdebi devkitpro-pacman.amd64.deb +sudo dkp-pacman -Sy +sudo dkp-pacman -S gba-dev +``` +Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + +Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): +```bash +source /etc/profile.d/devkit-env.sh +``` +devkitARM is now installed. + ## 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`. From aad94c34334ee44f1298175df38f14dc27ae5fb8 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 13:15:54 -0500 Subject: [PATCH 15/90] Fix asmdiff.sh to work without DKP, also improve the makefile command for recognizing a toolchain. The new command requires the toolchain binary path to exist in the file system before building using a toolchain (to handle the case where gba-dev is uninstalled but $(DEVKITARM) still exists)) --- Makefile | 2 +- asmdiff.sh | 7 ++++++- berry_fix/Makefile | 2 +- berry_fix/payload/Makefile | 2 +- libagbsyscall/Makefile | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index bffa4b5609..de146726bf 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system -ifneq ($(TOOLCHAIN),) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif diff --git a/asmdiff.sh b/asmdiff.sh index 9e8749acff..534281fdf5 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,6 +1,11 @@ #!/bin/bash -OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" +if [[ -d "$DEVKITARM/bin/" ]]; then + OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" +else + OBJDUMP_BIN="arm-none-eabi-objdump" +fi +OBJDUMP="$OBJDUMP_BIN -D -bbinary -marmv4t -Mforce-thumb" OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff --git a/berry_fix/Makefile b/berry_fix/Makefile index f7ce405047..6aab4ed624 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -8,7 +8,7 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system -ifneq ($(TOOLCHAIN),) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index 7a6a923960..ad8787c347 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -8,7 +8,7 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system -ifneq ($(TOOLCHAIN),) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index ba349e9ebb..e1f502b2f8 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -8,7 +8,7 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system -ifneq ($(TOOLCHAIN),) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif From cc5db41f30708c1cc2d33a46879c96a9404764a3 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 13:29:02 -0500 Subject: [PATCH 16/90] Revert multiple source change commits for rebase. --- Makefile | 89 ++++++++++++++++---------------------- asmdiff.sh | 7 +-- berry_fix/Makefile | 35 ++++++++------- berry_fix/payload/Makefile | 35 ++++++++------- libagbsyscall/Makefile | 35 ++++++++------- map_data_rules.mk | 4 +- tools/aif2pcm/Makefile | 10 +---- tools/bin2c/Makefile | 10 +---- tools/gbafix/Makefile | 10 +---- tools/gbagfx/Makefile | 12 ++--- tools/jsonproc/Makefile | 10 +---- tools/mapjson/Makefile | 10 +---- tools/mid2agb/Makefile | 10 +---- tools/preproc/Makefile | 10 +---- tools/ramscrgen/Makefile | 10 +---- tools/rsfont/Makefile | 10 +---- tools/scaninc/Makefile | 10 +---- 17 files changed, 121 insertions(+), 196 deletions(-) diff --git a/Makefile b/Makefile index de146726bf..07143e4ad4 100644 --- a/Makefile +++ b/Makefile @@ -1,26 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system - -ifneq ($(wildcard $(TOOLCHAIN)/bin),) -export PATH := $(TOOLCHAIN)/bin:$(PATH) +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) endif +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else +export PATH := $(TOOLCHAIN)/bin:$(PATH) PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe @@ -34,16 +37,6 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 -ROM_NAME := pokeemerald.gba -ELF_NAME := $(ROM_NAME:.gba=.elf) -MAP_NAME := $(ROM_NAME:.gba=.map) -OBJ_DIR_NAME := build/emerald - -MODERN_ROM_NAME := pokeemerald_modern.gba -MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) -MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) -MODERN_OBJ_DIR_NAME := build/modern - SHELL := /bin/bash -o pipefail ELF = $(ROM:.gba=.elf) @@ -71,18 +64,18 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -ROM := $(ROM_NAME) -OBJ_DIR := $(OBJ_DIR_NAME) +ROM := pokeemerald.gba +OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib else -CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -ROM := $(MODERN_ROM_NAME) -OBJ_DIR := $(MODERN_OBJ_DIR_NAME) -LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" +ROM := pokeemerald_modern.gba +OBJ_DIR := build/modern +LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -nostdinc -undef +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) ifeq ($(MODERN),0) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc endif @@ -118,7 +111,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -169,7 +162,7 @@ all: rom tools: $(TOOLDIRS) $(TOOLDIRS): - @$(MAKE) -C $@ + @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) rom: $(ROM) ifeq ($(COMPARE),1) @@ -184,7 +177,7 @@ clean: mostlyclean clean-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidynonmodern tidymodern +mostlyclean: tidy rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -199,15 +192,10 @@ mostlyclean: tidynonmodern tidymodern tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r $(OBJ_DIR) +ifeq ($(MODERN),0) + @$(MAKE) tidy MODERN=1 +endif -tidynonmodern: - rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) - rm -rf $(OBJ_DIR_NAME) - -tidymodern: - rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) - rm -rf $(MODERN_OBJ_DIR_NAME) - ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif @@ -235,7 +223,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -244,10 +232,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -308,11 +296,11 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -341,8 +329,7 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall - @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " - @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) diff --git a/asmdiff.sh b/asmdiff.sh index 534281fdf5..9e8749acff 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,11 +1,6 @@ #!/bin/bash -if [[ -d "$DEVKITARM/bin/" ]]; then - OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" -else - OBJDUMP_BIN="arm-none-eabi-objdump" -fi -OBJDUMP="$OBJDUMP_BIN -D -bbinary -marmv4t -Mforce-thumb" +OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 6aab4ed624..0ead3804fd 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,26 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system - -ifneq ($(wildcard $(TOOLCHAIN)/bin),) -export PATH := $(TOOLCHAIN)/bin:$(PATH) +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) endif +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else +export PATH := $(TOOLCHAIN)/bin:$(PATH) PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index ad8787c347..a121fda93b 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,26 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system - -ifneq ($(wildcard $(TOOLCHAIN)/bin),) -export PATH := $(TOOLCHAIN)/bin:$(PATH) +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) endif +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else +export PATH := $(TOOLCHAIN)/bin:$(PATH) PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index e1f502b2f8..911cdb237c 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,26 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system - -ifneq ($(wildcard $(TOOLCHAIN)/bin),) -export PATH := $(TOOLCHAIN)/bin:$(PATH) +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) endif +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else +export PATH := $(TOOLCHAIN)/bin:$(PATH) PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/map_data_rules.mk b/map_data_rules.mk index 626cd47240..0203b383d0 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index dd48a87597..77df291527 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,18 +6,12 @@ LIBS = -lm SRCS = main.c extended.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: aif2pcm$(EXE) +all: aif2pcm @: -aif2pcm$(EXE): $(SRCS) +aif2pcm: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 4dbfab94fe..52806e39c6 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,16 +6,10 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: bin2c$(EXE) +all: bin2c @: -bin2c$(EXE): $(SRCS) +bin2c: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index efb016c97e..91a60a9e4c 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,16 +3,10 @@ CC ?= gcc SRCS = gbafix.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: gbafix$(EXE) +all: gbafix @: -gbafix$(EXE): $(SRCS) +gbafix: $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index b4244aa8d6..f0638414da 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,21 +6,15 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: gbagfx$(EXE) +all: gbagfx @: -gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index eec73eb7bf..47198b171e 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,18 +8,12 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: jsonproc$(EXE) +all: jsonproc @: -jsonproc$(EXE): $(SRCS) $(HEADERS) +jsonproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index 100e809c6c..c1f703f9fe 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,18 +6,12 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: mapjson$(EXE) +all: mapjson @: -mapjson$(EXE): $(SRCS) $(HEADERS) +mapjson: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 553b7859ed..451d4b39fb 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,18 +6,12 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: mid2agb$(EXE) +all: mid2agb @: -mid2agb$(EXE): $(SRCS) $(HEADERS) +mid2agb: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 1507c973f2..8c48afea2a 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,18 +8,12 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: preproc$(EXE) +all: preproc @: -preproc$(EXE): $(SRCS) $(HEADERS) +preproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index a9375c87ab..4e901a29c1 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,16 +8,10 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: ramscrgen$(EXE) +all: ramscrgen @: -ramscrgen$(EXE): $(SRCS) $(HEADERS) +ramscrgen: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 0bc88a42b7..930a92b36e 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,16 +8,10 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: rsfont$(EXE) +all: rsfont @: -rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 96d92f7062..52e663d8da 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,16 +8,10 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: scaninc$(EXE) +all: scaninc @: -scaninc$(EXE): $(SRCS) $(HEADERS) +scaninc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: From 936ba7f1bf492a805596716660cd751e35fc74cd Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 15:10:01 -0500 Subject: [PATCH 17/90] Apply all source related changes for the new INSTALL.md in one commit. For people who want to have dkPless builds in their repo. --- Makefile | 89 ++++++++++++++++++++++---------------- asmdiff.sh | 10 ++++- berry_fix/Makefile | 35 +++++++-------- berry_fix/payload/Makefile | 35 +++++++-------- libagbsyscall/Makefile | 35 +++++++-------- map_data_rules.mk | 4 +- tools/aif2pcm/Makefile | 10 ++++- tools/bin2c/Makefile | 10 ++++- tools/gbafix/Makefile | 10 ++++- tools/gbagfx/Makefile | 12 +++-- tools/jsonproc/Makefile | 10 ++++- tools/mapjson/Makefile | 10 ++++- tools/mid2agb/Makefile | 10 ++++- tools/preproc/Makefile | 10 ++++- tools/ramscrgen/Makefile | 10 ++++- tools/rsfont/Makefile | 10 ++++- tools/scaninc/Makefile | 10 ++++- 17 files changed, 199 insertions(+), 121 deletions(-) diff --git a/Makefile b/Makefile index 78a2c2a4fc..2e5a341dde 100644 --- a/Makefile +++ b/Makefile @@ -1,29 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe @@ -37,6 +34,16 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +ROM_NAME := pokeemerald.gba +ELF_NAME := $(ROM_NAME:.gba=.elf) +MAP_NAME := $(ROM_NAME:.gba=.map) +OBJ_DIR_NAME := build/emerald + +MODERN_ROM_NAME := pokeemerald_modern.gba +MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) +MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) +MODERN_OBJ_DIR_NAME := build/modern + SHELL := /bin/bash -o pipefail ELF = $(ROM:.gba=.elf) @@ -64,18 +71,18 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := pokeemerald.gba -OBJ_DIR := build/emerald +ROM := $(ROM_NAME) +OBJ_DIR := $(OBJ_DIR_NAME) LIBPATH := -L ../../tools/agbcc/lib else -CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g -ROM := pokeemerald_modern.gba -OBJ_DIR := build/modern -LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" +ROM := $(MODERN_ROM_NAME) +OBJ_DIR := $(MODERN_OBJ_DIR_NAME) +LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -nostdinc -undef ifeq ($(MODERN),0) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc endif @@ -111,7 +118,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -162,7 +169,7 @@ all: rom tools: $(TOOLDIRS) $(TOOLDIRS): - @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) + @$(MAKE) -C $@ rom: $(ROM) ifeq ($(COMPARE),1) @@ -177,7 +184,7 @@ clean: mostlyclean clean-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidy +mostlyclean: tidynonmodern tidymodern rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -192,10 +199,15 @@ mostlyclean: tidy tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r $(OBJ_DIR) -ifeq ($(MODERN),0) - @$(MAKE) tidy MODERN=1 -endif +tidynonmodern: + rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) + rm -rf $(OBJ_DIR_NAME) + +tidymodern: + rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) + rm -rf $(MODERN_OBJ_DIR_NAME) + ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif @@ -223,7 +235,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -232,10 +244,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -296,11 +308,11 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -329,7 +341,8 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall - cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) diff --git a/asmdiff.sh b/asmdiff.sh index 6ea588131d..f5a7010747 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,11 +1,19 @@ #!/bin/bash -OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" +if [[ -d "$DEVKITARM/bin/" ]]; then + OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" +else + OBJDUMP_BIN="arm-none-eabi-objdump" +fi + +OBJDUMP="$OBJDUMP_BIN -D -bbinary -marmv4t -Mforce-thumb" + if [ $(($1)) -ge $((0x8000000)) ]; then OPTIONS="--adjust-vma=0x8000000 --start-address=$(($1)) --stop-address=$(($1 + $2))" else OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" fi + $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff -u baserom.dump pokeemerald.dump diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 0ead3804fd..6aab4ed624 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,29 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index a121fda93b..ad8787c347 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,29 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 911cdb237c..e1f502b2f8 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,29 +1,26 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/map_data_rules.mk b/map_data_rules.mk index 0203b383d0..626cd47240 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index 77df291527..dd48a87597 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,12 +6,18 @@ LIBS = -lm SRCS = main.c extended.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: aif2pcm +all: aif2pcm$(EXE) @: -aif2pcm: $(SRCS) +aif2pcm$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 52806e39c6..4dbfab94fe 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,10 +6,16 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -all: bin2c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: bin2c$(EXE) @: -bin2c: $(SRCS) +bin2c$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index 91a60a9e4c..efb016c97e 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,10 +3,16 @@ CC ?= gcc SRCS = gbafix.c -all: gbafix +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: gbafix$(EXE) @: -gbafix: $(SRCS) +gbafix$(EXE): $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index f0638414da..b4244aa8d6 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,15 +6,21 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: gbagfx +all: gbagfx$(EXE) @: -gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index 47198b171e..eec73eb7bf 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,12 +8,18 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: jsonproc +all: jsonproc$(EXE) @: -jsonproc: $(SRCS) $(HEADERS) +jsonproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index c1f703f9fe..100e809c6c 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,12 +6,18 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mapjson +all: mapjson$(EXE) @: -mapjson: $(SRCS) $(HEADERS) +mapjson$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 451d4b39fb..553b7859ed 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,12 +6,18 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mid2agb +all: mid2agb$(EXE) @: -mid2agb: $(SRCS) $(HEADERS) +mid2agb$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 8c48afea2a..1507c973f2 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,12 +8,18 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: preproc +all: preproc$(EXE) @: -preproc: $(SRCS) $(HEADERS) +preproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index 4e901a29c1..a9375c87ab 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,10 +8,16 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -all: ramscrgen +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: ramscrgen$(EXE) @: -ramscrgen: $(SRCS) $(HEADERS) +ramscrgen$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 930a92b36e..0bc88a42b7 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,10 +8,16 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -all: rsfont +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: rsfont$(EXE) @: -rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 52e663d8da..96d92f7062 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,10 +8,16 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -all: scaninc +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: scaninc$(EXE) @: -scaninc: $(SRCS) $(HEADERS) +scaninc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: From 8ad973090199d4350683f64069ed1cb676e23679 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 15:37:08 -0500 Subject: [PATCH 18/90] Make a note about the Microsoft Account dialog. --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index ecbce35a26..82d0f228d2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -30,7 +30,7 @@ Once the process finishes, restart your machine. 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 (Note for advanced users: Debian also works here). Advanced users can pick a preferred Linux distribution, but setup instructions may differ. -Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. 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). +Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. 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). If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog. ### Setting up WSL1 Open **Ubuntu** (e.g. using Search). 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). Note that there will be no visible response when typing in the password, but the terminal will still read in input. @@ -395,4 +395,4 @@ To compile the `modern` target with this toolchain, the subdirectories `lib`, `i * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps * [poryscript](https://github.com/huderlem/poryscript) for scripting ([VS Code extension](https://marketplace.visualstudio.com/items?itemName=karathan.poryscript)) -* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps \ No newline at end of file +* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps From 3b1cbc58617fe45efbbbdd967ab1e0fae85d76a4 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 18:56:03 -0500 Subject: [PATCH 19/90] Add a note on core.filemode error. --- INSTALL.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 82d0f228d2..ee18ce2162 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -250,10 +250,22 @@ At this point, you can choose a folder to store pokeemerald (and agbcc) into. If If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## Installation + +**Windows users:** Consider adding an exception for the `pokeemerald`/`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. + If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: ```bash git clone https://github.com/luckytyphlosion/pokeemerald ``` +Note for WSL1: 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 +cd +``` +Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). + If agbcc has not been built before, run the following commands to build and install it into pokeemerald: ``` git clone https://github.com/luckytyphlosion/agbcc @@ -294,8 +306,6 @@ To build **pokeemerald.gba** with your changes: make ``` -**Windows users:** Consider adding an exception for the `pokeemerald` 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. - # Building guidance ## Parallel builds From 2783eed8257bcee46e33552a15e71b33a3d60058 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 19:54:12 -0500 Subject: [PATCH 20/90] Check for $(TOOLCHAIN) before checking for $(TOOLCHAIN)/bin if TOOLCHAIN is blank, wildcard can still detect the `/bin` directory. --- Makefile | 2 ++ berry_fix/Makefile | 2 ++ berry_fix/payload/Makefile | 2 ++ libagbsyscall/Makefile | 2 ++ 4 files changed, 8 insertions(+) diff --git a/Makefile b/Makefile index 2e5a341dde..8a5a2b65f1 100644 --- a/Makefile +++ b/Makefile @@ -8,9 +8,11 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system +ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif +endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 6aab4ed624..8b8d07d427 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -8,9 +8,11 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system +ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif +endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index ad8787c347..bae657c927 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -8,9 +8,11 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system +ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif +endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index e1f502b2f8..76368da86b 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -8,9 +8,11 @@ COMPARE ?= 0 # files, or use arm-none-eabi binaries on the system # if dkP is not installed on tihs system +ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) endif +endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy From d597c5c883ad62b1fc62e9c688c2f8a17a1a853e Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 20:17:27 -0500 Subject: [PATCH 21/90] Fix modern builds. We actually need standard includes for modern. --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 8a5a2b65f1..a341ab5d4d 100644 --- a/Makefile +++ b/Makefile @@ -84,9 +84,9 @@ OBJ_DIR := $(MODERN_OBJ_DIR_NAME) LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -nostdinc -undef -ifeq ($(MODERN),0) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) +ifneq ($(MODERN),1) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef endif LDFLAGS = -Map ../../$(MAP) From 11df2113d9c7ab9e09073a93db2bd467b664f678 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 20:29:58 -0500 Subject: [PATCH 22/90] Use arm-none-eabi-cpp for modern. --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile index a341ab5d4d..891cab4800 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,13 @@ endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy AS := $(PREFIX)as + +ifneq ($(MODERN),1) CPP := $(CC) -E +else +CPP := $(PREFIX)cpp +endif + LD := $(PREFIX)ld # note: the makefile must be set up so MODERNCC is never called From 345aab63cf2550646a6a56c2c8fe8473d5bf996a Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 20:31:10 -0500 Subject: [PATCH 23/90] [Round 2] Revert multiple source change commits for re-commit. --- Makefile | 97 +++++++++++++++----------------------- asmdiff.sh | 10 +--- berry_fix/Makefile | 37 ++++++++------- berry_fix/payload/Makefile | 37 ++++++++------- libagbsyscall/Makefile | 37 ++++++++------- map_data_rules.mk | 4 +- tools/aif2pcm/Makefile | 10 +--- tools/bin2c/Makefile | 10 +--- tools/gbafix/Makefile | 10 +--- tools/gbagfx/Makefile | 12 ++--- tools/jsonproc/Makefile | 10 +--- tools/mapjson/Makefile | 10 +--- tools/mid2agb/Makefile | 10 +--- tools/preproc/Makefile | 10 +--- tools/ramscrgen/Makefile | 10 +--- tools/rsfont/Makefile | 10 +--- tools/scaninc/Makefile | 10 +--- 17 files changed, 121 insertions(+), 213 deletions(-) diff --git a/Makefile b/Makefile index 891cab4800..78a2c2a4fc 100644 --- a/Makefile +++ b/Makefile @@ -1,34 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as - -ifneq ($(MODERN),1) -CPP := $(CC) -E -else -CPP := $(PREFIX)cpp +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as endif - -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe @@ -42,16 +37,6 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 -ROM_NAME := pokeemerald.gba -ELF_NAME := $(ROM_NAME:.gba=.elf) -MAP_NAME := $(ROM_NAME:.gba=.map) -OBJ_DIR_NAME := build/emerald - -MODERN_ROM_NAME := pokeemerald_modern.gba -MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) -MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) -MODERN_OBJ_DIR_NAME := build/modern - SHELL := /bin/bash -o pipefail ELF = $(ROM:.gba=.elf) @@ -79,20 +64,20 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := $(ROM_NAME) -OBJ_DIR := $(OBJ_DIR_NAME) +ROM := pokeemerald.gba +OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib else -CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g -ROM := $(MODERN_ROM_NAME) -OBJ_DIR := $(MODERN_OBJ_DIR_NAME) -LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" +ROM := pokeemerald_modern.gba +OBJ_DIR := build/modern +LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" endif CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -ifneq ($(MODERN),1) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef +ifeq ($(MODERN),0) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc endif LDFLAGS = -Map ../../$(MAP) @@ -126,7 +111,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -177,7 +162,7 @@ all: rom tools: $(TOOLDIRS) $(TOOLDIRS): - @$(MAKE) -C $@ + @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) rom: $(ROM) ifeq ($(COMPARE),1) @@ -192,7 +177,7 @@ clean: mostlyclean clean-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidynonmodern tidymodern +mostlyclean: tidy rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -207,15 +192,10 @@ mostlyclean: tidynonmodern tidymodern tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r $(OBJ_DIR) +ifeq ($(MODERN),0) + @$(MAKE) tidy MODERN=1 +endif -tidynonmodern: - rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) - rm -rf $(OBJ_DIR_NAME) - -tidymodern: - rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) - rm -rf $(MODERN_OBJ_DIR_NAME) - ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif @@ -243,7 +223,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -252,10 +232,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -316,11 +296,11 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -349,8 +329,7 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall - @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " - @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) diff --git a/asmdiff.sh b/asmdiff.sh index f5a7010747..6ea588131d 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,19 +1,11 @@ #!/bin/bash -if [[ -d "$DEVKITARM/bin/" ]]; then - OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" -else - OBJDUMP_BIN="arm-none-eabi-objdump" -fi - -OBJDUMP="$OBJDUMP_BIN -D -bbinary -marmv4t -Mforce-thumb" - +OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" if [ $(($1)) -ge $((0x8000000)) ]; then OPTIONS="--adjust-vma=0x8000000 --start-address=$(($1)) --stop-address=$(($1 + $2))" else OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" fi - $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff -u baserom.dump pokeemerald.dump diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 8b8d07d427..0ead3804fd 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,28 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index bae657c927..a121fda93b 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,28 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 76368da86b..911cdb237c 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,28 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/map_data_rules.mk b/map_data_rules.mk index 626cd47240..0203b383d0 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index dd48a87597..77df291527 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,18 +6,12 @@ LIBS = -lm SRCS = main.c extended.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: aif2pcm$(EXE) +all: aif2pcm @: -aif2pcm$(EXE): $(SRCS) +aif2pcm: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 4dbfab94fe..52806e39c6 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,16 +6,10 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: bin2c$(EXE) +all: bin2c @: -bin2c$(EXE): $(SRCS) +bin2c: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index efb016c97e..91a60a9e4c 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,16 +3,10 @@ CC ?= gcc SRCS = gbafix.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: gbafix$(EXE) +all: gbafix @: -gbafix$(EXE): $(SRCS) +gbafix: $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index b4244aa8d6..f0638414da 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,21 +6,15 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: gbagfx$(EXE) +all: gbagfx @: -gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index eec73eb7bf..47198b171e 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,18 +8,12 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: jsonproc$(EXE) +all: jsonproc @: -jsonproc$(EXE): $(SRCS) $(HEADERS) +jsonproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index 100e809c6c..c1f703f9fe 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,18 +6,12 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: mapjson$(EXE) +all: mapjson @: -mapjson$(EXE): $(SRCS) $(HEADERS) +mapjson: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 553b7859ed..451d4b39fb 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,18 +6,12 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: mid2agb$(EXE) +all: mid2agb @: -mid2agb$(EXE): $(SRCS) $(HEADERS) +mid2agb: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 1507c973f2..8c48afea2a 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,18 +8,12 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: preproc$(EXE) +all: preproc @: -preproc$(EXE): $(SRCS) $(HEADERS) +preproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index a9375c87ab..4e901a29c1 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,16 +8,10 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: ramscrgen$(EXE) +all: ramscrgen @: -ramscrgen$(EXE): $(SRCS) $(HEADERS) +ramscrgen: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 0bc88a42b7..930a92b36e 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,16 +8,10 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: rsfont$(EXE) +all: rsfont @: -rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 96d92f7062..52e663d8da 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,16 +8,10 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: scaninc$(EXE) +all: scaninc @: -scaninc$(EXE): $(SRCS) $(HEADERS) +scaninc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: From 166183d5ed73059922b9679b832b591dd6fa073b Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 20:31:56 -0500 Subject: [PATCH 24/90] [Round 2] Apply all source related changes for the new INSTALL.md in one commit. --- Makefile | 97 +++++++++++++++++++++++--------------- asmdiff.sh | 10 +++- berry_fix/Makefile | 37 +++++++-------- berry_fix/payload/Makefile | 37 +++++++-------- libagbsyscall/Makefile | 37 +++++++-------- map_data_rules.mk | 4 +- tools/aif2pcm/Makefile | 10 +++- tools/bin2c/Makefile | 10 +++- tools/gbafix/Makefile | 10 +++- tools/gbagfx/Makefile | 12 +++-- tools/jsonproc/Makefile | 10 +++- tools/mapjson/Makefile | 10 +++- tools/mid2agb/Makefile | 10 +++- tools/preproc/Makefile | 10 +++- tools/ramscrgen/Makefile | 10 +++- tools/rsfont/Makefile | 10 +++- tools/scaninc/Makefile | 10 +++- 17 files changed, 213 insertions(+), 121 deletions(-) diff --git a/Makefile b/Makefile index 78a2c2a4fc..891cab4800 100644 --- a/Makefile +++ b/Makefile @@ -1,29 +1,34 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as +AS := $(PREFIX)as + +ifneq ($(MODERN),1) +CPP := $(CC) -E +else +CPP := $(PREFIX)cpp endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld + +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe @@ -37,6 +42,16 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +ROM_NAME := pokeemerald.gba +ELF_NAME := $(ROM_NAME:.gba=.elf) +MAP_NAME := $(ROM_NAME:.gba=.map) +OBJ_DIR_NAME := build/emerald + +MODERN_ROM_NAME := pokeemerald_modern.gba +MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) +MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) +MODERN_OBJ_DIR_NAME := build/modern + SHELL := /bin/bash -o pipefail ELF = $(ROM:.gba=.elf) @@ -64,20 +79,20 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := pokeemerald.gba -OBJ_DIR := build/emerald +ROM := $(ROM_NAME) +OBJ_DIR := $(OBJ_DIR_NAME) LIBPATH := -L ../../tools/agbcc/lib else -CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g -ROM := pokeemerald_modern.gba -OBJ_DIR := build/modern -LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" +ROM := $(MODERN_ROM_NAME) +OBJ_DIR := $(MODERN_OBJ_DIR_NAME) +LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" endif CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -ifeq ($(MODERN),0) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc +ifneq ($(MODERN),1) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef endif LDFLAGS = -Map ../../$(MAP) @@ -111,7 +126,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -162,7 +177,7 @@ all: rom tools: $(TOOLDIRS) $(TOOLDIRS): - @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) + @$(MAKE) -C $@ rom: $(ROM) ifeq ($(COMPARE),1) @@ -177,7 +192,7 @@ clean: mostlyclean clean-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidy +mostlyclean: tidynonmodern tidymodern rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -192,10 +207,15 @@ mostlyclean: tidy tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r $(OBJ_DIR) -ifeq ($(MODERN),0) - @$(MAKE) tidy MODERN=1 -endif +tidynonmodern: + rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) + rm -rf $(OBJ_DIR_NAME) + +tidymodern: + rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) + rm -rf $(MODERN_OBJ_DIR_NAME) + ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif @@ -223,7 +243,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -232,10 +252,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -296,11 +316,11 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -329,7 +349,8 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall - cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) diff --git a/asmdiff.sh b/asmdiff.sh index 6ea588131d..f5a7010747 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,11 +1,19 @@ #!/bin/bash -OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" +if [[ -d "$DEVKITARM/bin/" ]]; then + OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" +else + OBJDUMP_BIN="arm-none-eabi-objdump" +fi + +OBJDUMP="$OBJDUMP_BIN -D -bbinary -marmv4t -Mforce-thumb" + if [ $(($1)) -ge $((0x8000000)) ]; then OPTIONS="--adjust-vma=0x8000000 --start-address=$(($1)) --stop-address=$(($1 + $2))" else OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" fi + $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff -u baserom.dump pokeemerald.dump diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 0ead3804fd..8b8d07d427 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,29 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index a121fda93b..bae657c927 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,29 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 911cdb237c..76368da86b 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,29 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/map_data_rules.mk b/map_data_rules.mk index 0203b383d0..626cd47240 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index 77df291527..dd48a87597 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,12 +6,18 @@ LIBS = -lm SRCS = main.c extended.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: aif2pcm +all: aif2pcm$(EXE) @: -aif2pcm: $(SRCS) +aif2pcm$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 52806e39c6..4dbfab94fe 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,10 +6,16 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -all: bin2c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: bin2c$(EXE) @: -bin2c: $(SRCS) +bin2c$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index 91a60a9e4c..efb016c97e 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,10 +3,16 @@ CC ?= gcc SRCS = gbafix.c -all: gbafix +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: gbafix$(EXE) @: -gbafix: $(SRCS) +gbafix$(EXE): $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index f0638414da..b4244aa8d6 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,15 +6,21 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: gbagfx +all: gbagfx$(EXE) @: -gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index 47198b171e..eec73eb7bf 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,12 +8,18 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: jsonproc +all: jsonproc$(EXE) @: -jsonproc: $(SRCS) $(HEADERS) +jsonproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index c1f703f9fe..100e809c6c 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,12 +6,18 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mapjson +all: mapjson$(EXE) @: -mapjson: $(SRCS) $(HEADERS) +mapjson$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 451d4b39fb..553b7859ed 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,12 +6,18 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mid2agb +all: mid2agb$(EXE) @: -mid2agb: $(SRCS) $(HEADERS) +mid2agb$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 8c48afea2a..1507c973f2 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,12 +8,18 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: preproc +all: preproc$(EXE) @: -preproc: $(SRCS) $(HEADERS) +preproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index 4e901a29c1..a9375c87ab 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,10 +8,16 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -all: ramscrgen +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: ramscrgen$(EXE) @: -ramscrgen: $(SRCS) $(HEADERS) +ramscrgen$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 930a92b36e..0bc88a42b7 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,10 +8,16 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -all: rsfont +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: rsfont$(EXE) @: -rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 52e663d8da..96d92f7062 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,10 +8,16 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -all: scaninc +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: scaninc$(EXE) @: -scaninc: $(SRCS) $(HEADERS) +scaninc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: From 32e566def07698121d5b2f56edb6867329326276 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 21:16:55 -0500 Subject: [PATCH 25/90] Don't define CPP until MODERN is defined. --- Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 891cab4800..306b8fb6e8 100644 --- a/Makefile +++ b/Makefile @@ -18,12 +18,6 @@ PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy AS := $(PREFIX)as -ifneq ($(MODERN),1) -CPP := $(CC) -E -else -CPP := $(PREFIX)cpp -endif - LD := $(PREFIX)ld # note: the makefile must be set up so MODERNCC is never called @@ -42,6 +36,12 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +ifneq ($(MODERN),1) +CPP := $(CC) -E +else +CPP := $(PREFIX)cpp +endif + ROM_NAME := pokeemerald.gba ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) From 5a5acfb0ada48c89d1e398dea3fd3ef701213b60 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 21:24:08 -0500 Subject: [PATCH 26/90] [Round 3] Revert multiple source change commits for re-commit. --- Makefile | 99 +++++++++++++++----------------------- asmdiff.sh | 10 +--- berry_fix/Makefile | 37 +++++++------- berry_fix/payload/Makefile | 37 +++++++------- libagbsyscall/Makefile | 37 +++++++------- map_data_rules.mk | 4 +- tools/aif2pcm/Makefile | 10 +--- tools/bin2c/Makefile | 10 +--- tools/gbafix/Makefile | 10 +--- tools/gbagfx/Makefile | 12 ++--- tools/jsonproc/Makefile | 10 +--- tools/mapjson/Makefile | 10 +--- tools/mid2agb/Makefile | 10 +--- tools/preproc/Makefile | 10 +--- tools/ramscrgen/Makefile | 10 +--- tools/rsfont/Makefile | 10 +--- tools/scaninc/Makefile | 10 +--- 17 files changed, 122 insertions(+), 214 deletions(-) diff --git a/Makefile b/Makefile index 306b8fb6e8..78a2c2a4fc 100644 --- a/Makefile +++ b/Makefile @@ -1,28 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as - -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe @@ -36,22 +37,6 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 -ifneq ($(MODERN),1) -CPP := $(CC) -E -else -CPP := $(PREFIX)cpp -endif - -ROM_NAME := pokeemerald.gba -ELF_NAME := $(ROM_NAME:.gba=.elf) -MAP_NAME := $(ROM_NAME:.gba=.map) -OBJ_DIR_NAME := build/emerald - -MODERN_ROM_NAME := pokeemerald_modern.gba -MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) -MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) -MODERN_OBJ_DIR_NAME := build/modern - SHELL := /bin/bash -o pipefail ELF = $(ROM:.gba=.elf) @@ -79,20 +64,20 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := $(ROM_NAME) -OBJ_DIR := $(OBJ_DIR_NAME) +ROM := pokeemerald.gba +OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib else -CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g -ROM := $(MODERN_ROM_NAME) -OBJ_DIR := $(MODERN_OBJ_DIR_NAME) -LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" +ROM := pokeemerald_modern.gba +OBJ_DIR := build/modern +LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" endif CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -ifneq ($(MODERN),1) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef +ifeq ($(MODERN),0) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc endif LDFLAGS = -Map ../../$(MAP) @@ -126,7 +111,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -177,7 +162,7 @@ all: rom tools: $(TOOLDIRS) $(TOOLDIRS): - @$(MAKE) -C $@ + @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) rom: $(ROM) ifeq ($(COMPARE),1) @@ -192,7 +177,7 @@ clean: mostlyclean clean-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidynonmodern tidymodern +mostlyclean: tidy rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -207,15 +192,10 @@ mostlyclean: tidynonmodern tidymodern tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r $(OBJ_DIR) +ifeq ($(MODERN),0) + @$(MAKE) tidy MODERN=1 +endif -tidynonmodern: - rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) - rm -rf $(OBJ_DIR_NAME) - -tidymodern: - rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) - rm -rf $(MODERN_OBJ_DIR_NAME) - ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif @@ -243,7 +223,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -252,10 +232,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -316,11 +296,11 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -349,8 +329,7 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall - @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " - @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) diff --git a/asmdiff.sh b/asmdiff.sh index f5a7010747..6ea588131d 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,19 +1,11 @@ #!/bin/bash -if [[ -d "$DEVKITARM/bin/" ]]; then - OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" -else - OBJDUMP_BIN="arm-none-eabi-objdump" -fi - -OBJDUMP="$OBJDUMP_BIN -D -bbinary -marmv4t -Mforce-thumb" - +OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" if [ $(($1)) -ge $((0x8000000)) ]; then OPTIONS="--adjust-vma=0x8000000 --start-address=$(($1)) --stop-address=$(($1 + $2))" else OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" fi - $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff -u baserom.dump pokeemerald.dump diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 8b8d07d427..0ead3804fd 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,28 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index bae657c927..a121fda93b 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,28 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 76368da86b..911cdb237c 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,28 +1,29 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -# don't use dkP's base_tools anymore -# because the redefinition of $(CC) conflicts -# with when we want to use $(CC) to preprocess files -# thus, manually create the variables for the bin -# files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif -ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif -endif - PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -AS := $(PREFIX)as -CPP := $(CC) -E -LD := $(PREFIX)ld - -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/map_data_rules.mk b/map_data_rules.mk index 626cd47240..0203b383d0 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index dd48a87597..77df291527 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,18 +6,12 @@ LIBS = -lm SRCS = main.c extended.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: aif2pcm$(EXE) +all: aif2pcm @: -aif2pcm$(EXE): $(SRCS) +aif2pcm: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 4dbfab94fe..52806e39c6 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,16 +6,10 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: bin2c$(EXE) +all: bin2c @: -bin2c$(EXE): $(SRCS) +bin2c: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index efb016c97e..91a60a9e4c 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,16 +3,10 @@ CC ?= gcc SRCS = gbafix.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: gbafix$(EXE) +all: gbafix @: -gbafix$(EXE): $(SRCS) +gbafix: $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index b4244aa8d6..f0638414da 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,21 +6,15 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: gbagfx$(EXE) +all: gbagfx @: -gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index eec73eb7bf..47198b171e 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,18 +8,12 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: jsonproc$(EXE) +all: jsonproc @: -jsonproc$(EXE): $(SRCS) $(HEADERS) +jsonproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index 100e809c6c..c1f703f9fe 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,18 +6,12 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: mapjson$(EXE) +all: mapjson @: -mapjson$(EXE): $(SRCS) $(HEADERS) +mapjson: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 553b7859ed..451d4b39fb 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,18 +6,12 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: mid2agb$(EXE) +all: mid2agb @: -mid2agb$(EXE): $(SRCS) $(HEADERS) +mid2agb: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 1507c973f2..8c48afea2a 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,18 +8,12 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - .PHONY: all clean -all: preproc$(EXE) +all: preproc @: -preproc$(EXE): $(SRCS) $(HEADERS) +preproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index a9375c87ab..4e901a29c1 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,16 +8,10 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: ramscrgen$(EXE) +all: ramscrgen @: -ramscrgen$(EXE): $(SRCS) $(HEADERS) +ramscrgen: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 0bc88a42b7..930a92b36e 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,16 +8,10 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: rsfont$(EXE) +all: rsfont @: -rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 96d92f7062..52e663d8da 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,16 +8,10 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -all: scaninc$(EXE) +all: scaninc @: -scaninc$(EXE): $(SRCS) $(HEADERS) +scaninc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: From 3d686116d8acb9f3daa1db9669de6eca11a861d5 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 16 Dec 2020 21:24:44 -0500 Subject: [PATCH 27/90] [Round 3] Apply all source related changes for the new INSTALL.md in one commit. --- Makefile | 99 +++++++++++++++++++++++--------------- asmdiff.sh | 10 +++- berry_fix/Makefile | 37 +++++++------- berry_fix/payload/Makefile | 37 +++++++------- libagbsyscall/Makefile | 37 +++++++------- map_data_rules.mk | 4 +- tools/aif2pcm/Makefile | 10 +++- tools/bin2c/Makefile | 10 +++- tools/gbafix/Makefile | 10 +++- tools/gbagfx/Makefile | 12 +++-- tools/jsonproc/Makefile | 10 +++- tools/mapjson/Makefile | 10 +++- tools/mid2agb/Makefile | 10 +++- tools/preproc/Makefile | 10 +++- tools/ramscrgen/Makefile | 10 +++- tools/rsfont/Makefile | 10 +++- tools/scaninc/Makefile | 10 +++- 17 files changed, 214 insertions(+), 122 deletions(-) diff --git a/Makefile b/Makefile index 78a2c2a4fc..306b8fb6e8 100644 --- a/Makefile +++ b/Makefile @@ -1,29 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as + +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe @@ -37,6 +36,22 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +ifneq ($(MODERN),1) +CPP := $(CC) -E +else +CPP := $(PREFIX)cpp +endif + +ROM_NAME := pokeemerald.gba +ELF_NAME := $(ROM_NAME:.gba=.elf) +MAP_NAME := $(ROM_NAME:.gba=.map) +OBJ_DIR_NAME := build/emerald + +MODERN_ROM_NAME := pokeemerald_modern.gba +MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) +MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) +MODERN_OBJ_DIR_NAME := build/modern + SHELL := /bin/bash -o pipefail ELF = $(ROM:.gba=.elf) @@ -64,20 +79,20 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := pokeemerald.gba -OBJ_DIR := build/emerald +ROM := $(ROM_NAME) +OBJ_DIR := $(OBJ_DIR_NAME) LIBPATH := -L ../../tools/agbcc/lib else -CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g -ROM := pokeemerald_modern.gba -OBJ_DIR := build/modern -LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" +ROM := $(MODERN_ROM_NAME) +OBJ_DIR := $(MODERN_OBJ_DIR_NAME) +LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" endif CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -ifeq ($(MODERN),0) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc +ifneq ($(MODERN),1) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef endif LDFLAGS = -Map ../../$(MAP) @@ -111,7 +126,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern tidymodern tidynonmodern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -162,7 +177,7 @@ all: rom tools: $(TOOLDIRS) $(TOOLDIRS): - @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) + @$(MAKE) -C $@ rom: $(ROM) ifeq ($(COMPARE),1) @@ -177,7 +192,7 @@ clean: mostlyclean clean-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidy +mostlyclean: tidynonmodern tidymodern rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -192,10 +207,15 @@ mostlyclean: tidy tidy: rm -f $(ROM) $(ELF) $(MAP) rm -r $(OBJ_DIR) -ifeq ($(MODERN),0) - @$(MAKE) tidy MODERN=1 -endif +tidynonmodern: + rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) + rm -rf $(OBJ_DIR_NAME) + +tidymodern: + rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) + rm -rf $(MODERN_OBJ_DIR_NAME) + ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif @@ -223,7 +243,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -232,10 +252,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -296,11 +316,11 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -329,7 +349,8 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) berry_fix libagbsyscall - cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) diff --git a/asmdiff.sh b/asmdiff.sh index 6ea588131d..f5a7010747 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,11 +1,19 @@ #!/bin/bash -OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" +if [[ -d "$DEVKITARM/bin/" ]]; then + OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" +else + OBJDUMP_BIN="arm-none-eabi-objdump" +fi + +OBJDUMP="$OBJDUMP_BIN -D -bbinary -marmv4t -Mforce-thumb" + if [ $(($1)) -ge $((0x8000000)) ]; then OPTIONS="--adjust-vma=0x8000000 --start-address=$(($1)) --stop-address=$(($1 + $2))" else OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" fi + $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff -u baserom.dump pokeemerald.dump diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 0ead3804fd..8b8d07d427 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -1,29 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index a121fda93b..bae657c927 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -1,29 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 911cdb237c..76368da86b 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -1,29 +1,28 @@ TOOLCHAIN := $(DEVKITARM) COMPARE ?= 0 -ifeq ($(CC),) -HOSTCC := gcc -else -HOSTCC := $(CC) -endif +# don't use dkP's base_tools anymore +# because the redefinition of $(CC) conflicts +# with when we want to use $(CC) to preprocess files +# thus, manually create the variables for the bin +# files, or use arm-none-eabi binaries on the system +# if dkP is not installed on tihs system -ifeq ($(CXX),) -HOSTCXX := g++ -else -HOSTCXX := $(CXX) -endif - -ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) -include $(TOOLCHAIN)/base_tools -else +ifneq (,$(TOOLCHAIN)) +ifneq ($(wildcard $(TOOLCHAIN)/bin),) export PATH := $(TOOLCHAIN)/bin:$(PATH) +endif +endif + PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy -export CC := $(PREFIX)gcc -export AS := $(PREFIX)as -endif -export CPP := $(PREFIX)cpp -export LD := $(PREFIX)ld +AS := $(PREFIX)as +CPP := $(CC) -E +LD := $(PREFIX)ld + +# note: the makefile must be set up so MODERNCC is never called +# if MODERN=0 +MODERNCC := $(PREFIX)gcc ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/map_data_rules.mk b/map_data_rules.mk index 0203b383d0..626cd47240 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index 77df291527..dd48a87597 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,12 +6,18 @@ LIBS = -lm SRCS = main.c extended.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: aif2pcm +all: aif2pcm$(EXE) @: -aif2pcm: $(SRCS) +aif2pcm$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 52806e39c6..4dbfab94fe 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,10 +6,16 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -all: bin2c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: bin2c$(EXE) @: -bin2c: $(SRCS) +bin2c$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index 91a60a9e4c..efb016c97e 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,10 +3,16 @@ CC ?= gcc SRCS = gbafix.c -all: gbafix +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: gbafix$(EXE) @: -gbafix: $(SRCS) +gbafix$(EXE): $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index f0638414da..b4244aa8d6 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,15 +6,21 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: gbagfx +all: gbagfx$(EXE) @: -gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index 47198b171e..eec73eb7bf 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,12 +8,18 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: jsonproc +all: jsonproc$(EXE) @: -jsonproc: $(SRCS) $(HEADERS) +jsonproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index c1f703f9fe..100e809c6c 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,12 +6,18 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mapjson +all: mapjson$(EXE) @: -mapjson: $(SRCS) $(HEADERS) +mapjson$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 451d4b39fb..553b7859ed 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,12 +6,18 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mid2agb +all: mid2agb$(EXE) @: -mid2agb: $(SRCS) $(HEADERS) +mid2agb$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 8c48afea2a..1507c973f2 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,12 +8,18 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: preproc +all: preproc$(EXE) @: -preproc: $(SRCS) $(HEADERS) +preproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index 4e901a29c1..a9375c87ab 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,10 +8,16 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -all: ramscrgen +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: ramscrgen$(EXE) @: -ramscrgen: $(SRCS) $(HEADERS) +ramscrgen$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 930a92b36e..0bc88a42b7 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,10 +8,16 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -all: rsfont +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: rsfont$(EXE) @: -rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 52e663d8da..96d92f7062 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,10 +8,16 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -all: scaninc +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: scaninc$(EXE) @: -scaninc: $(SRCS) $(HEADERS) +scaninc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: From 946faf682f4ca5fdaebc5cfec34815c1a427ac2d Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Thu, 17 Dec 2020 09:03:14 -0500 Subject: [PATCH 28/90] Extra clarification about remounting the C: drive --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index ee18ce2162..dd5d24defc 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -261,10 +261,10 @@ Note for WSL1: If you get an error stating `fatal: could not set 'core.filemode' ```bash cd sudo umount /mnt/c -sudo mount -t drvfs C: /mnt/c -o metadata +sudo mount -t drvfs C: /mnt/c -o metadata,noatime cd ``` -Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). +Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again. If agbcc has not been built before, run the following commands to build and install it into pokeemerald: ``` From 9da0920969a31bee441ba941263836204ff85f52 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 23 Dec 2020 18:02:30 -0500 Subject: [PATCH 29/90] Improve INSTALL.mds as per recommendations. - Put "conditional" notes in quotes to better communicate which instructions are more required - Number instructions per OS as per Griffin's advice. --- INSTALL.md | 493 ++++++++++++++++++++---------------- docs/legacy_WSL1_INSTALL.md | 55 ++-- 2 files changed, 313 insertions(+), 235 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index dd5d24defc..b3c106e725 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -2,117 +2,145 @@ These instructions explain how to set up the tools required to build **pokeemerald**, which assembles the source files into a ROM. -If you run into trouble, ask for help on IRC or Discord (see [README.md](README.md)). +If you run into trouble, ask for help on Discord or IRC (see [README.md](README.md)). ## Windows Windows has instructions for building with three possible terminals, if users encounter unexpected errors in following instructions for one of the terminals. These instructions are: -- [Windows 10 (WSL1)](#windows-10-wsl1) -- [Windows (msys2)](#windows-msys2) -- [Windows (Cygwin)](#windows-cygwin) +- [Windows 10 (WSL1)](#windows-10-wsl1) (**Fastest, highly recommended**, Windows 10 only) +- [Windows (msys2)](#windows-msys2) (Second fastest) +- [Windows (Cygwin)](#windows-cygwin) (Slowest) -The instructions have been ordered by the performance of their respective terminal. Out of the provided terminals, **WSL1** builds pokeemerald the fastest, and is thus **highly recommended**, but is only available on Windows 10. **msys2** is the second fastest, and **Cygwin** is the slowest. Unscientific benchmarks suggest msys2 is 2x slower than WSL1, and Cygwin is **5-6x** slower than WSL1. For advanced users, **WSL2** is an option and is even faster than **WSL1** if files are stored on the WSL2 file system, but some tools such as [porymap](https://github.com/huderlem/porymap) cannot interact with said files due to problems [outside the control of maintainers](https://bugreports.qt.io/browse/QTBUG-86277). +Unscientific benchmarks suggest **msys2 is 2x slower** than WSL1, and **Cygwin is 5-6x slower** than WSL1. + +> Note for advanced users: **WSL2** is an option and is even faster than **WSL1** 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. 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 **pokeemerald**. The following instructions will explain how to install WSL1 (referred 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 pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1). +WSL1 is the preferred terminal to build **pokeemerald**. 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 pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1). ### Installing WSL1 -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). -``` -dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart -``` -Once the process finishes, restart your machine. +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). -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 (Note for advanced users: Debian also works here). Advanced users can pick a preferred Linux distribution, but setup instructions may differ. + ```powershell + dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart + ``` -Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. 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). If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog. +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. + + > Note for advanced users: Advanced users can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested. + +4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. + + > 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). ### Setting up WSL1 -Open **Ubuntu** (e.g. using Search). 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). Note that there will be no visible response when typing in the password, but the terminal will still read in input. - -A few notes before proceeding: -- In the terminal, Copy and Paste is either done via +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. -Update WSL/Ubuntu before continuing. Do this by running the following command: -```bash -sudo apt update && sudo apt upgrade -``` -Note that these commands will likely take a long time to finish. +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). -*Note: If the repository you plan to build was created before 2020/XX/YY (e.g. modifications of pokeemerald that haven't updated) then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md). These repositories can be identified by the [older revision](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md) of the INSTALL.md* + > Note: When typing in the password, there will be no visible response, but the terminal will still read in input. -Certain packages are required to build pokeemerald. Install these packages by running the following command: -```bash -sudo apt install build-essential binutils-arm-none-eabi git libpng-dev -``` -(If the above command does not work, try the above command but replacing `apt` with `apt-get`). +3. Update WSL/Ubuntu before continuing. Do this by running the following command: + + ```bash + sudo apt update && sudo apt upgrade + ``` + > Note: These commands will likely take a long time to finish. + +> *Note: If the repository you plan to build was created before 2020/XX/YY (e.g. modifications of pokeemerald that haven't updated) then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md). These repositories can be identified by the [older revision](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md) of the INSTALL.md* + +4. Certain packages are required to build pokeemerald. Install these packages by running the following command: + + ```bash + sudo apt install build-essential binutils-arm-none-eabi git libpng-dev + ``` + > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. ### Choosing where to store pokeemerald (WSL1) WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to install pokeemerald within Windows. You'll have to change the **current working directory** every time you open WSL. -For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command, where *\* is your **Windows** username: ```bash cd /mnt/c/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. - -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) -If this works, then proceed to [Installation](#Installation). +> 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//Desktop/decomp folder"`. +> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed -Otherwise, continue reading below for [Windows instructions using msys2](#windows-msys2). +If this works, then proceed to [Installation](#installation). + +Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using msys2](#windows-msys2). ## Windows (msys2) -If devkitPro is not installed, or is installed but without the GBA Development component, then go to [Installing devkitPro](#installing-devkitpro). If devkitPro is installed, but msys2 hasn't previously been set up for another decompilation project, then go to [Setting up msys2](#setting-up-msys2). Otherwise, open msys2 and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-msys2). +- If devkitPro is **not installed**, or is installed but without the GBA Development component, then go to [Installing devkitPro](#installing-devkitpro). +- If devkitPro is installed, but msys2 **hasn't previously been set up for another decompilation project**, then go to [Setting up msys2](#setting-up-msys2). +- Otherwise, **open msys2** and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-msys2). ### Installing devkitPro -Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). - -Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to use devkitPro for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged. +1. Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). +2. Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to use devkitPro for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged. ### Setting up msys2 -Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. -Certain packages are required to build pokeemerald. Install these by running the following command: -```bash -pacman -S make gcc zlib-devel git -``` -(This command will ask for confirmation, just enter the yes action when prompted). +1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. -Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). +2. Certain packages are required to build pokeemerald. Install these by running the following command: -Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\__**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: -```bash -cd Downloads -``` -(While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. Windows path names are case-insensitive so adhereing to capitalization isn’t needed. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there) + ```bash + pacman -S make gcc zlib-devel git + ``` + > Note: This command will ask for confirmation, just enter the yes action when prompted. -Run the following command to uncompress and install libpng. -```bash -tar xf libpng-1.6.37 -cd libpng-1.6.37 -./configure --prefix=/usr -make check -make install -``` -Then finally, run the following command to change back to the user profile folder. -```bash -cd -``` +3. Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). + +4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\_\_**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: + + ```bash + cd Downloads + ``` + + > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. + > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. + > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. + > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there. + +5. Run the following commands to uncompress and install libpng. + + ```bash + tar xf libpng-1.6.37 + cd libpng-1.6.37 + ./configure --prefix=/usr + make check + make install + ``` + +6. Then finally, run the following command to change back to the user profile folder. + + ```bash + cd + ``` ### Choosing where to store pokeemerald (msys2) -At this point, you can choose a folder to store pokeemerald into. If so, you'll have to change the **current working directory** every time you open msys2. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). +At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll have to change the **current working directory** an extra time every time you open msys2. For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: ```bash @@ -120,90 +148,106 @@ cd Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -If this works, then proceed to [Installation](#Installation). +If this works, then proceed to [Installation](#installation). -Otherwise, continue reading below for [Windows instructions using Cygwin](#windows-cygwin). +Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using Cygwin](#windows-cygwin). ## Windows (Cygwin) -If devkitPro is not installed, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. Remember to not continue following the msys2 instructions by mistake! +1. If devkitPro is **not installed**, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. *Remember to not continue following the msys2 instructions by mistake!* -If Cygwin is not installed, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). If Cygwin is installed, but is not configured to work with devkitPro, then go to [Configuring devkitPro for Cygwin](#configuring-devkitpro-for-cygwin). Otherwise, open Cygwin and go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin) +2. + - If Cygwin is **not installed**, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). + - If Cygwin is installed, but **is not configured to work with devkitPro**, then go to [Configuring devkitPro for Cygwin](#configuring-devkitpro-for-cygwin). + - Otherwise, **open Cygwin** and go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin) ### Installing Cygwin -Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. +1. Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. -Run the Cygwin setup and leave the default settings. At "Choose a Download Site", select any mirror within the Available Download Sites. At "Select Packages", set the view to "Full" (top left) and choose to install the following: -- `make` -- `git` -- `gcc-core` -- `gcc-g++` -- `libpng-devel` +2. Run the Cygwin setup. Within the Cygwin setup, leave the default settings until the "Choose A Download Site" screen. -To quickly find these, use the search bar and type the name of each package. Ensure that the selected package name is the **exact** same as the one you're trying to download, e.g. `cmake` is **NOT** the same as `make`. +3. At "Choose a Download Site", select any mirror within the Available Download Sites. -Double click on the text that says "**Skip**" next to each package to select the most recent version to install. If the text says anything other than "**Skip**", (e.g. Keep or a version number), then the package is or will be installed and you don't need to do anything. +4. At "Select Packages", set the view to "Full" (top left) and search for the following packages: + - `make` + - `git` + - `gcc-core` + - `gcc-g++` + - `libpng-devel` + + To quickly find these, use the search bar and type the name of each package. Ensure that the selected package name is the **exact** same as the one you're trying to download, e.g. `cmake` is **NOT** the same as `make`. + +5. For each package, double click on the text that says "**Skip**" next to each package to select the most recent version to install. If the text says anything other than "**Skip**", (e.g. Keep or a version number), then the package is or will be installed and you don't need to do anything. + +6. Once all required packages have been selected, finish the installation. -Once all required packages have been selected, finish the installation. ### Configuring devkitPro for Cygwin -Open **Cygwin**. Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. -Run the following commands to configure devkitPro to work with Cygwin. -```bash -export DEVKITPRO=/cygdrive/c/devkitpro -echo export DEVKITPRO=$DEVKITPRO >> ~/.bashrc -export DEVKITARM=$DEVKITPRO/devkitARM -echo export DEVKITARM=$DEVKITARM >> ~/.bashrc -``` -(Replace the drive letter c with the actual drive letter if it is not c). +1. Open **Cygwin**. + +2. Run the following commands to configure devkitPro to work with Cygwin. + + ```bash + export DEVKITPRO=/cygdrive/c/devkitpro + echo export DEVKITPRO=$DEVKITPRO >> ~/.bashrc + export DEVKITARM=$DEVKITPRO/devkitARM + echo export DEVKITARM=$DEVKITARM >> ~/.bashrc + ``` + + > Note: Replace the drive letter c with the actual drive letter if it is not c. ### Choosing where to store pokeemerald (Cygwin) Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald there, you'll have to change the **current working directory** every time you open Cygwin. -For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command, where *\* is your **Windows** username: ```bash cd c:/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -(Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) +> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. +> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed -If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). +If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). ## macOS -If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/library/archive/technotes/tn2339/_index.html), open your Terminal, and run the following command: -```bash -xcode-select --install -``` +1. If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/library/archive/technotes/tn2339/_index.html), open your Terminal, and run the following command: -If devkitPro is not installed, then go to [Installing devkitPro (macOS)](#installing-devkitpro-macos). Otherwise, open the Terminal and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) + ```bash + xcode-select --install + ``` + +2. - If devkitPro is **not installed**, then go to [Installing devkitPro (macOS)](#installing-devkitpro-macos). + - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) ### Installing devkitPro (macOS) -Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). +1. Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). +2. Open the package to install devkitPro pacman. +3. devkitPro must be configured with the tools required for GBA development. Run the following commands: -Open the package to install devkitPro pacman. + ```bash + sudo dkp-pacman -Sy + sudo dkp-pacman -S gba-dev + sudo dkp-pacman -S devkitarm-rules + ``` -devkitPro must be configured with the tools required for GBA development. Run the following commands: -```bash -sudo dkp-pacman -Sy -sudo dkp-pacman -S gba-dev -sudo dkp-pacman -S devkitarm-rules -``` -At this point, press Enter to confirm the installation. After the tools are installed, devkitPro must now be made accessible from anywhere by the system. To do so, run the following commands: + The command with gba-dev will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. -``` -export DEVKITPRO=$HOME/devkitpro -echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc -export DEVKITARM=$DEVKITPRO/devkitARM -echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc +4. After the tools are installed, devkitPro must now be made accessible from anywhere by the system. To do so, run the following commands: -echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile -``` + ```bash + export DEVKITPRO=$HOME/devkitpro + echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc + export DEVKITARM=$DEVKITPRO/devkitARM + echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc + + echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile + ``` ### Choosing where to store pokeemerald (macOS) -At this point, you can choose a folder to store pokeemerald into. If so, you'll have to change the **current working directory** every time you open the Terminal. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). +At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). Otherwise, you'll have to change the **current working directory** an extra time every time you open the Terminal. For example, if you want to store pokeemerald (and agbcc) in **~/Desktop/decomps**, enter this command: ```bash @@ -211,9 +255,9 @@ cd Desktop/decomps ``` Note that the directory **must exist** in the folder system. If you want to store pokeemerald 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. -(If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"`) +> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` -If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). +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. @@ -228,70 +272,84 @@ Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to ### Other distributions _(Specific instructions for other distributions would be greatly appreciated!)_ -Try to find the required software in its repositories: -- `gcc` -- `g++` -- `make` -- `git` -- `libpng-dev` +1. Try to find the required software in its repositories: + - `gcc` + - `g++` + - `make` + - `git` + - `libpng-dev` -Then, follow the instructions [here](https://devkitpro.org/wiki/devkitPro_pacman) to install devkitPro's pacman installer. As a reminder, the goal is to configure an existing pacman installation to recognize devkitPro's repositories. +2. Follow the instructions [here](https://devkitpro.org/wiki/devkitPro_pacman) to install devkitPro's pacman installer. As a reminder, the goal is to configure an existing pacman installation to recognize devkitPro's repositories. +3. Once devkitPro pacman is configured, run the following commands: -Once devkitPro pacman is configured, run the following commands: -```bash -sudo pacman -Sy -sudo pacman -S gba-dev -``` -Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. + ```bash + sudo pacman -Sy + sudo pacman -S gba-dev + ``` + + The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. ### Choosing where to store pokeemerald (Linux) -At this point, you can choose a folder to store pokeemerald (and agbcc) into. If so, you'll have to change the current working directory every time you open the Terminal. +At this point, you can choose a folder to store pokeemerald (and agbcc) into. If so, you'll have to account for the modified folder path when changing directory to the pokeemerald folder. -If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). +If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). ## Installation -**Windows users:** Consider adding an exception for the `pokeemerald`/`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. +**Windows users:** Consider adding an exception for the `pokeemerald` 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. -If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: -```bash -git clone https://github.com/luckytyphlosion/pokeemerald -``` -Note for WSL1: 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 -``` -Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again. +1. If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: + + ```bash + git clone https://github.com/luckytyphlosion/pokeemerald + ``` + + > Note for WSL1: 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 + >``` + > Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again. + +2. Install agbcc into pokeemerald. The commands to run depend on certain conditions: +- If agbcc has **not been built before** in the folder where you chose to store pokeemerald, run the following commands to build and install it into pokeemerald: + + ```bash + git clone https://github.com/luckytyphlosion/agbcc + cd agbcc + ./build.sh + ./install.sh ../pokeemerald + ``` + +- 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 pokeemerald: + + ```bash + cd agbcc + git clean -fX + ./build.sh + ./install.sh ../pokeemerald + ``` + +- Otherwise, run the following commands to install agbcc into pokeemerald: + + ```bash + cd agbcc + ./install.sh ../pokeemerald + ``` + + > Note: If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before. + +3. Once agbcc is installed, change directory back to the base directory where pokeemerald and agbcc are stored: + + ```bash + cd .. + ``` -If agbcc has not been built before, run the following commands to build and install it into pokeemerald: -``` -git clone https://github.com/luckytyphlosion/agbcc -cd agbcc -./build.sh -./install.sh ../pokeemerald -``` -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 pokeemerald: -``` -cd agbcc -git clean -fX -./build.sh -./install.sh ../pokeemerald -``` -Otherwise, run the following commands to install agbcc into pokeemerald: -``` -cd agbcc -./install.sh ../pokeemerald -``` -Then, change directory back to the base directory where pokeemerald and agbcc are stored: -``` -cd .. -``` Now you're ready to [build **pokeemerald**](#build-pokeemerald) ## Build pokeemerald -First, change directory to the pokeemerald folder: +If you aren't in the pokeemerald directory already, then **change directory** to the pokeemerald folder: ```bash cd pokeemerald ``` @@ -299,7 +357,8 @@ To build **pokeemerald.gba** for the first time and confirm it matches the offic ```bash make compare ``` -If an OK is returned, then the installation went smoothly. **Note:** if you switched terminals on Windows since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands. +If an OK is returned, then the installation went smoothly. +> Note for Windows: 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. To build **pokeemerald.gba** with your changes: ```bash @@ -312,7 +371,7 @@ make 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. -To speed up building, first get the value of `nproc`: +To speed up building, first get the value of `nproc` by running the following command: ```bash nproc ``` @@ -340,65 +399,75 @@ make modern Otherwise, follow the instructions below to install devkitARM. ### Installing devkitARM on WSL1 -`gdebi-core` must be installed beforehand in order to install devkitPro (which facilitates the installation of devkitARM). Install this with the following command: -```bash -sudo apt install gdebi-core -``` -(If the above command does not work, try the above command but replacing `apt` with `apt-get`). +1. `gdebi-core` must be installed beforehand in order to install devkitPro (which facilitates the installation of devkitARM). Install this with the following command: -Once `gdebi-core` is done installing, download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. + ```bash + sudo apt install gdebi-core + ``` + > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. -Change directory to where the package was downloaded. For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: -```bash -cd /mnt/c/Users//Downloads -``` -(Replace *\* with your Windows username) +2. Once `gdebi-core` is done installing, download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. +3. Change directory to where the package was downloaded. For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command, where *\ is your **Windows** username: -Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. -```bash -sudo gdebi devkitpro-pacman.amd64.deb -sudo dkp-pacman -Sy -sudo dkp-pacman -S gba-dev -``` -Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + ```bash + cd /mnt/c/Users//Downloads + ``` + +4. Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. + + ```bash + sudo gdebi devkitpro-pacman.amd64.deb + sudo dkp-pacman -Sy + sudo dkp-pacman -S gba-dev + ``` + The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. + + > Note: `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + +5. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): + + ```bash + source /etc/profile.d/devkit-env.sh + ``` -Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): -```bash -source /etc/profile.d/devkit-env.sh -``` devkitARM is now installed. ### Installing devkitARM on Debian/Ubuntu-based distributions -If `gdebi-core` is not installed, run the following command: -```bash -sudo apt install gdebi-core -``` -Download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. +1. If `gdebi-core` is not installed, run the following command: -Change directory to where the package was downloaded. Then, run the following commands to install devkitARM: -```bash -sudo gdebi devkitpro-pacman.amd64.deb -sudo dkp-pacman -Sy -sudo dkp-pacman -S gba-dev -``` -Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + ```bash + sudo apt install gdebi-core + ``` +2. Download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. +3. Change directory to where the package was downloaded. Then, run the following commands to install devkitARM: + + ```bash + sudo gdebi devkitpro-pacman.amd64.deb + sudo dkp-pacman -Sy + sudo dkp-pacman -S gba-dev + ``` + The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. + + > Note: `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + +4. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): + + ```bash + source /etc/profile.d/devkit-env.sh + ``` -Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): -```bash -source /etc/profile.d/devkit-env.sh -``` devkitARM is now installed. ## 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`. - - make TOOLCHAIN="/path/to/toolchain/here" - +```bash +make TOOLCHAIN="/path/to/toolchain/here" +``` The following is an example: - - make TOOLCHAIN="/usr/local/arm-none-eabi" - +```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 diff --git a/docs/legacy_WSL1_INSTALL.md b/docs/legacy_WSL1_INSTALL.md index 731b8f4338..f848abf676 100644 --- a/docs/legacy_WSL1_INSTALL.md +++ b/docs/legacy_WSL1_INSTALL.md @@ -1,32 +1,41 @@ ### Setting up WSL1 (Legacy Portion) -Certain packages are required to build pokeemerald. Install these packages by running the following command: -```bash -sudo apt install build-essential git libpng-dev gdebi-core -``` -(If the above command does not work, try the above command but replacing `apt` with `apt-get`). -Download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. +1. Certain packages are required to build pokeemerald. Install these packages by running the following command: -WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. To install the devkitPro package, you'll need to change to the **current working directory** where the package file was saved. + ```bash + sudo apt install build-essential git libpng-dev gdebi-core + ``` + > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. -For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: +2. Once the packages have finished installing, download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. -```bash -cd /mnt/c/Users//Downloads -``` +3. WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. To install the devkitPro package, you'll need to change to the **current working directory** where the package file was saved. -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Downloads folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) + For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command, where *\* is your **Windows** username: -Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. -```bash -sudo gdebi devkitpro-pacman.amd64.deb -sudo dkp-pacman -Sy -sudo dkp-pacman -S gba-dev -``` -Note: the last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + ```bash + cd /mnt/c/Users//Downloads + ``` + + > 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//Downloads folder"`. + > Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed + +4. Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. + + ```bash + sudo gdebi devkitpro-pacman.amd64.deb + sudo dkp-pacman -Sy + sudo dkp-pacman -S gba-dev + ``` + + The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. + + > Note: `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. + +5. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): + ```bash + source /etc/profile.d/devkit-env.sh + ``` -Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): -```bash -source /etc/profile.d/devkit-env.sh -``` Proceed to [Choosing where to store pokeemerald (WSL1) of the current INSTALL.md](/INSTALL.md#choosing-where-to-store-pokeemerald-WSL1). From 56cad5c240a2ebb8fab2eec87ec4105f0875fddd Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 23 Dec 2020 18:14:33 -0500 Subject: [PATCH 30/90] Re-add note about Qt since Porymap hasn't upgraded to 6.0. --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index b3c106e725..76ad51a242 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -12,7 +12,7 @@ Windows has instructions for building with three possible terminals, if users en Unscientific benchmarks suggest **msys2 is 2x slower** than WSL1, and **Cygwin is 5-6x slower** than WSL1. -> Note for advanced users: **WSL2** is an option and is even faster than **WSL1** 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. +> Note for advanced users: **WSL2** is an option and is even faster than **WSL1** 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 6.0 such as [porymap](https://github.com/huderlem/porymap) may [have problems with parsing the `\\wsl$` network drive path](https://bugreports.qt.io/browse/QTBUG-86277). 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. From feb6befd09889d2f4518bbd6b6acf45872b95287 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 23 Dec 2020 22:51:35 -0500 Subject: [PATCH 31/90] Improve storage instructions as per Griffin's recommendations. Todo actually properly proofread this. --- INSTALL.md | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 76ad51a242..82c22d94b8 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -12,7 +12,7 @@ Windows has instructions for building with three possible terminals, if users en Unscientific benchmarks suggest **msys2 is 2x slower** than WSL1, and **Cygwin is 5-6x slower** than WSL1. -> Note for advanced users: **WSL2** is an option and is even faster than **WSL1** 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 6.0 such as [porymap](https://github.com/huderlem/porymap) may [have problems with parsing the `\\wsl$` network drive path](https://bugreports.qt.io/browse/QTBUG-86277). +> Note for advanced users: **WSL2** is an option and is even faster than **WSL1** 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 [porymap](https://github.com/huderlem/porymap) may [have problems with parsing the `\\wsl$` network drive path](https://bugreports.qt.io/browse/QTBUG-86277). 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. @@ -71,9 +71,9 @@ Some tips before proceeding: > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. ### Choosing where to store pokeemerald (WSL1) -WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to install pokeemerald within Windows. You'll have to change the **current working directory** every time you open WSL. +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 install pokeemerald within Windows. -For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command, where *\* is your **Windows** username: +For example, say you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**. If pokeemerald and/or agbcc hasn't been installed yet, then enter the following command, where *\* is your **Windows** username: ```bash cd /mnt/c/Users//Desktop/decomps ``` @@ -81,7 +81,11 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer > 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//Desktop/decomp folder"`. -> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed +> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed +> Note 4: If pokeemerald is already installed, then run the following command instead (for the provided example path): +> ```bash +> cd /mnt/c/Users//Desktop/decomps/pokeemerald +> ``` If this works, then proceed to [Installation](#installation). @@ -140,14 +144,21 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. ``` ### Choosing where to store pokeemerald (msys2) -At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll have to change the **current working directory** an extra time every time you open msys2. +At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. + +For example, say you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**. If pokeemerald and/or agbcc hasn't been installed yet, then enter the following command to **change directory** to the desired folder: -For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: ```bash cd Desktop/decomps ``` + Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. +> Note: If pokeemerald is already installed, then run the following command instead (for the provided example path): +> ```bash +> cd Desktop/decomps/pokeemerald +> ``` + If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using Cygwin](#windows-cygwin). @@ -199,7 +210,7 @@ Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. ### Choosing where to store pokeemerald (Cygwin) -Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald there, you'll have to change the **current working directory** every time you open Cygwin. +Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald there, you'll need to account for where pokeemerald is stored when **changing directory** to the pokeemerald folder. For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command, where *\* is your **Windows** username: ```bash @@ -209,6 +220,10 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer > Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. > Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed +> Note 3: If pokeemerald is already installed, then run the following command instead (for the provided example path): +> ```bash +> cd c:/Users//Desktop/decomps/pokeemerald +> ``` If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). @@ -247,15 +262,19 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ``` ### Choosing where to store pokeemerald (macOS) -At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). Otherwise, you'll have to change the **current working directory** an extra time every time you open the Terminal. +At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. -For example, if you want to store pokeemerald (and agbcc) in **~/Desktop/decomps**, enter this command: +For example, say you want to store pokeemerald (and agbcc) in **~/Desktop/decomps**. If pokeemerald and/or agbcc hasn't been installed yet, then enter the following 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 pokeemerald 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. -> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` +> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` +> Note 2: If pokeemerald is already installed, then run the following command instead (for the provided example path: +> ```bash +> cd Desktop/decomps/pokeemerald +> ``` If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). From a0344a4094e97a11415a26758357071c06c591cc Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 30 Dec 2020 18:49:04 -0500 Subject: [PATCH 32/90] Forgot to add some line breaks. --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 82c22d94b8..7dd860e845 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -219,7 +219,7 @@ cd c:/Users//Desktop/decomps Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. > Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. -> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed +> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed > Note 3: If pokeemerald is already installed, then run the following command instead (for the provided example path): > ```bash > cd c:/Users//Desktop/decomps/pokeemerald @@ -270,7 +270,7 @@ cd Desktop/decomps ``` Note that the directory **must exist** in the folder system. If you want to store pokeemerald 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. -> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` +> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` > Note 2: If pokeemerald is already installed, then run the following command instead (for the provided example path: > ```bash > cd Desktop/decomps/pokeemerald From e744d86bf15db8e8ca172b849ac3473ae34194c3 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 30 Dec 2020 20:56:04 -0500 Subject: [PATCH 33/90] Fix msys2 instructions, also add more formatting to installation instructions. --- INSTALL.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 7dd860e845..566d373792 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -130,7 +130,7 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. 5. Run the following commands to uncompress and install libpng. ```bash - tar xf libpng-1.6.37 + tar xf libpng-1.6.37.tar.xz cd libpng-1.6.37 ./configure --prefix=/usr make check @@ -342,7 +342,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ./install.sh ../pokeemerald ``` -- 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 pokeemerald: +- **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 pokeemerald: ```bash cd agbcc @@ -351,7 +351,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ./install.sh ../pokeemerald ``` -- Otherwise, run the following commands to install agbcc into pokeemerald: +- **Otherwise**, run the following commands to install agbcc into pokeemerald: ```bash cd agbcc From 98f8c96c9e21791651d2274f07046496ab826ff2 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 4 Jan 2021 11:35:59 -0500 Subject: [PATCH 34/90] Fix $(AR) define, remove \u warns on macOS. --- Makefile | 21 ++++++++++++++++----- berry_fix/Makefile | 22 +++++++++++++++++++--- berry_fix/payload/Makefile | 20 ++++++++++++++++++-- libagbsyscall/Makefile | 21 +++++++++++++++++++-- 4 files changed, 72 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 306b8fb6e8..3bb5161e31 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ COMPARE ?= 0 # with when we want to use $(CC) to preprocess files # thus, manually create the variables for the bin # files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +# if dkP is not installed on this system ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) @@ -36,10 +36,21 @@ MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +# use arm-none-eabi-cpp for macOS +# as macOS's default compiler is clang +# and clang's preprocessor will warn on \u +# when preprocessing asm files, expecting a unicode literal +# we can't unconditionally use arm-none-eabi-cpp +# as installations which install binutils-arm-none-eabi +# don't come with it ifneq ($(MODERN),1) -CPP := $(CC) -E + ifeq ($(shell uname -s),Darwin) + CPP := $(PREFIX)cpp + else + CPP := $(CC) -E + endif else -CPP := $(PREFIX)cpp + CPP := $(PREFIX)cpp endif ROM_NAME := pokeemerald.gba @@ -362,7 +373,7 @@ modern: ; @$(MAKE) MODERN=1 berry_fix/berry_fix.gba: berry_fix berry_fix: - @$(MAKE) -C berry_fix COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN) + @$(MAKE) -C berry_fix COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) libagbsyscall: - @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) + @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) diff --git a/berry_fix/Makefile b/berry_fix/Makefile index 8b8d07d427..464e5f9e9c 100644 --- a/berry_fix/Makefile +++ b/berry_fix/Makefile @@ -6,7 +6,7 @@ COMPARE ?= 0 # with when we want to use $(CC) to preprocess files # thus, manually create the variables for the bin # files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +# if dkP is not installed on this system ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) @@ -17,7 +17,6 @@ endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy AS := $(PREFIX)as -CPP := $(CC) -E LD := $(PREFIX)ld # note: the makefile must be set up so MODERNCC is never called @@ -30,6 +29,23 @@ else EXE := endif +# use arm-none-eabi-cpp for macOS +# as macOS's default compiler is clang +# and clang's preprocessor will warn on \u +# when preprocessing asm files, expecting a unicode literal +# we can't unconditionally use arm-none-eabi-cpp +# as installations which install binutils-arm-none-eabi +# don't come with it +ifneq ($(MODERN),1) + ifeq ($(shell uname -s),Darwin) + CPP := $(PREFIX)cpp + else + CPP := $(CC) -E + endif +else + CPP := $(PREFIX)cpp +endif + GAME_CODE := AGBJ MAKER_CODE := 01 REVISION := 0 @@ -165,7 +181,7 @@ $(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s) endif payload: - @$(MAKE) -C payload COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN) + @$(MAKE) -C payload COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) payload/payload.gba: payload diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile index bae657c927..2779c43ba8 100644 --- a/berry_fix/payload/Makefile +++ b/berry_fix/payload/Makefile @@ -6,7 +6,7 @@ COMPARE ?= 0 # with when we want to use $(CC) to preprocess files # thus, manually create the variables for the bin # files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +# if dkP is not installed on this system ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) @@ -17,7 +17,6 @@ endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy AS := $(PREFIX)as -CPP := $(CC) -E LD := $(PREFIX)ld # note: the makefile must be set up so MODERNCC is never called @@ -30,6 +29,23 @@ else EXE := endif +# use arm-none-eabi-cpp for macOS +# as macOS's default compiler is clang +# and clang's preprocessor will warn on \u +# when preprocessing asm files, expecting a unicode literal +# we can't unconditionally use arm-none-eabi-cpp +# as installations which install binutils-arm-none-eabi +# don't come with it +ifneq ($(MODERN),1) + ifeq ($(shell uname -s),Darwin) + CPP := $(PREFIX)cpp + else + CPP := $(CC) -E + endif +else + CPP := $(PREFIX)cpp +endif + SHELL := /bin/bash -o pipefail CPPFLAGS := -I ../../tools/agbcc/include -I ../../tools/agbcc -iquote include -nostdinc -undef diff --git a/libagbsyscall/Makefile b/libagbsyscall/Makefile index 76368da86b..78f246af40 100644 --- a/libagbsyscall/Makefile +++ b/libagbsyscall/Makefile @@ -6,7 +6,7 @@ COMPARE ?= 0 # with when we want to use $(CC) to preprocess files # thus, manually create the variables for the bin # files, or use arm-none-eabi binaries on the system -# if dkP is not installed on tihs system +# if dkP is not installed on this system ifneq (,$(TOOLCHAIN)) ifneq ($(wildcard $(TOOLCHAIN)/bin),) @@ -17,8 +17,8 @@ endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy AS := $(PREFIX)as -CPP := $(CC) -E LD := $(PREFIX)ld +AR := $(PREFIX)ar # note: the makefile must be set up so MODERNCC is never called # if MODERN=0 @@ -30,6 +30,23 @@ else EXE := endif +# use arm-none-eabi-cpp for macOS +# as macOS's default compiler is clang +# and clang's preprocessor will warn on \u +# when preprocessing asm files, expecting a unicode literal +# we can't unconditionally use arm-none-eabi-cpp +# as installations which install binutils-arm-none-eabi +# don't come with it +ifneq ($(MODERN),1) + ifeq ($(shell uname -s),Darwin) + CPP := $(PREFIX)cpp + else + CPP := $(CC) -E + endif +else + CPP := $(PREFIX)cpp +endif + ASFLAGS := -mcpu=arm7tdmi ARFLAGS := rc From 11eb805856262585248db63668d781d635d266af Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sun, 31 Jan 2021 16:22:54 -0500 Subject: [PATCH 35/90] Temporary fix for macOS install. Should probably figure out what's exactly setting $DEVKITPRO since it's set by something else upon opening the Terminal. --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 566d373792..a59d4002ca 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -253,7 +253,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for 4. After the tools are installed, devkitPro must now be made accessible from anywhere by the system. To do so, run the following commands: ```bash - export DEVKITPRO=$HOME/devkitpro + export DEVKITPRO=/opt/devkitpro echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc export DEVKITARM=$DEVKITPRO/devkitARM echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc From 4c3c61fa357c36444daade4d16a741418fff95a2 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 8 Feb 2021 11:55:36 -0500 Subject: [PATCH 36/90] Add instructions for installing libpng on macOS --- INSTALL.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index a59d4002ca..fdeffca766 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -234,13 +234,28 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for xcode-select --install ``` -2. - If devkitPro is **not installed**, then go to [Installing devkitPro (macOS)](#installing-devkitpro-macos). - - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) +2. - If libpng is **not installed**, then go to [Installing libpng (macOS)](#installing-libpng-macos). + - If devkitPro is **not installed**, then go to [Installing devkitPro (macOS)](#installing-devkitpro-macos). + - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) + +### Installing libpng (macOS) +> Note for advanced users: 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. + +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. + + Continue to [Installing devkitPro (macOS)](#installing-devkitpro-macos) if **devkitARM is not installed**, otherwise, go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos). ### Installing devkitPro (macOS) 1. Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). 2. Open the package to install devkitPro pacman. -3. devkitPro must be configured with the tools required for GBA development. Run the following commands: +3. devkitPro must be configured with the tools required for GBA development. In the Terminal, run the following commands: ```bash sudo dkp-pacman -Sy From 0f13e061e1d652b2e1d9a1515f10d831f63cc5f5 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 8 Feb 2021 12:35:21 -0500 Subject: [PATCH 37/90] Fix up dkP related naming. --- INSTALL.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index fdeffca766..d91f824340 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -93,13 +93,13 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti ## Windows (msys2) -- If devkitPro is **not installed**, or is installed but without the GBA Development component, then go to [Installing devkitPro](#installing-devkitpro). -- If devkitPro is installed, but msys2 **hasn't previously been set up for another decompilation project**, then go to [Setting up msys2](#setting-up-msys2). +- If devkitARM is **not installed**, then go to [Installing devkitARM](#installing-devkitarm). +- If devkitARM is installed, but msys2 **hasn't previously been set up for another decompilation project**, then go to [Setting up msys2](#setting-up-msys2). - Otherwise, **open msys2** and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-msys2). -### Installing devkitPro +### Installing devkitARM 1. Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). -2. Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to use devkitPro for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged. +2. Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to install other devkitPro components for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged. ### Setting up msys2 @@ -164,11 +164,11 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using Cygwin](#windows-cygwin). ## Windows (Cygwin) -1. If devkitPro is **not installed**, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. *Remember to not continue following the msys2 instructions by mistake!* +1. If devkitARM is **not installed**, then follow the instructions used to [install devkitARM](#installing-devkitarm) for the msys2 setup before continuing. *Remember to not continue following the msys2 instructions by mistake!* 2. - If Cygwin is **not installed**, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). - - If Cygwin is installed, but **is not configured to work with devkitPro**, then go to [Configuring devkitPro for Cygwin](#configuring-devkitpro-for-cygwin). + - If Cygwin is installed, but **is not configured to work with devkitARM**, then go to [Configuring devkitARM for Cygwin](#configuring-devkitarm-for-cygwin). - Otherwise, **open Cygwin** and go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin) ### Installing Cygwin @@ -191,7 +191,7 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti 6. Once all required packages have been selected, finish the installation. -### Configuring devkitPro for Cygwin +### Configuring devkitARM for Cygwin Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. @@ -235,7 +235,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ``` 2. - If libpng is **not installed**, then go to [Installing libpng (macOS)](#installing-libpng-macos). - - If devkitPro is **not installed**, then go to [Installing devkitPro (macOS)](#installing-devkitpro-macos). + - If devkitARM is **not installed**, then go to [Installing devkitARM (macOS)](#installing-devkitarm-macos). - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) ### Installing libpng (macOS) @@ -250,12 +250,12 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ``` libpng is now installed. - Continue to [Installing devkitPro (macOS)](#installing-devkitpro-macos) if **devkitARM is not installed**, otherwise, go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos). + Continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**, otherwise, go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos). -### Installing devkitPro (macOS) +### Installing devkitARM (macOS) 1. Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). 2. Open the package to install devkitPro pacman. -3. devkitPro must be configured with the tools required for GBA development. In the Terminal, run the following commands: +3. In the Terminal, run the following commands to install devkitARM: ```bash sudo dkp-pacman -Sy @@ -265,7 +265,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for The command with gba-dev will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. -4. After the tools are installed, devkitPro must now be made accessible from anywhere by the system. To do so, run the following commands: +4. After the tools are installed, devkitARM must now be made accessible from anywhere by the system. To do so, run the following commands: ```bash export DEVKITPRO=/opt/devkitpro @@ -313,7 +313,7 @@ _(Specific instructions for other distributions would be greatly appreciated!)_ - `git` - `libpng-dev` -2. Follow the instructions [here](https://devkitpro.org/wiki/devkitPro_pacman) to install devkitPro's pacman installer. As a reminder, the goal is to configure an existing pacman installation to recognize devkitPro's repositories. +2. Follow the instructions [here](https://devkitpro.org/wiki/devkitPro_pacman) to install devkitPro pacman. As a reminder, the goal is to configure an existing pacman installation to recognize devkitPro's repositories. 3. Once devkitPro pacman is configured, run the following commands: ```bash @@ -433,21 +433,21 @@ make modern Otherwise, follow the instructions below to install devkitARM. ### Installing devkitARM on WSL1 -1. `gdebi-core` must be installed beforehand in order to install devkitPro (which facilitates the installation of devkitARM). Install this with the following command: +1. `gdebi-core` must be installed beforehand in order to install devkitPro pacman (which facilitates the installation of devkitARM). Install this with the following command: ```bash sudo apt install gdebi-core ``` > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. -2. Once `gdebi-core` is done installing, download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. +2. Once `gdebi-core` is done installing, download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. 3. Change directory to where the package was downloaded. For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command, where *\ is your **Windows** username: ```bash cd /mnt/c/Users//Downloads ``` -4. Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. +4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitPro pacman. ```bash sudo gdebi devkitpro-pacman.amd64.deb @@ -472,7 +472,7 @@ devkitARM is now installed. ```bash sudo apt install gdebi-core ``` -2. Download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. +2. Download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. 3. Change directory to where the package was downloaded. Then, run the following commands to install devkitARM: ```bash From 6a865be4c2f640b482d91ede650b52b4b7d5778f Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 8 Feb 2021 12:38:49 -0500 Subject: [PATCH 38/90] Fix up incorrect term. --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index d91f824340..1ba2e7b425 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -447,7 +447,7 @@ Otherwise, follow the instructions below to install devkitARM. cd /mnt/c/Users//Downloads ``` -4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitPro pacman. +4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitARM. ```bash sudo gdebi devkitpro-pacman.amd64.deb From 1760d6801074ff20568726beeaea4d539aa9f1bd Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 8 Feb 2021 12:39:43 -0500 Subject: [PATCH 39/90] Fix up dkP related naming here as well. --- docs/legacy_WSL1_INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/legacy_WSL1_INSTALL.md b/docs/legacy_WSL1_INSTALL.md index f848abf676..b9840d1c82 100644 --- a/docs/legacy_WSL1_INSTALL.md +++ b/docs/legacy_WSL1_INSTALL.md @@ -7,7 +7,7 @@ ``` > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. -2. Once the packages have finished installing, download the devkitPro software package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. +2. Once the packages have finished installing, download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. 3. WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. To install the devkitPro package, you'll need to change to the **current working directory** where the package file was saved. @@ -21,7 +21,7 @@ > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Downloads folder"`. > Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed -4. Once the directory has been changed to the folder containing the devkitPro package, run the following commands to install devkitPro. +4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitARM. ```bash sudo gdebi devkitpro-pacman.amd64.deb From 52ab1acea16e98accf70acf0fdac493a370550ee Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 10 Feb 2021 17:32:46 -0500 Subject: [PATCH 40/90] Easy changes per Griffin's comments --- INSTALL.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 1ba2e7b425..36d2b9d252 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -5,7 +5,7 @@ These instructions explain how to set up the tools required to build **pokeemera If you run into trouble, ask for help on Discord or IRC (see [README.md](README.md)). ## Windows -Windows has instructions for building with three possible terminals, if users encounter unexpected errors in following instructions for one of the terminals. These instructions are: +Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbled upon unexpected errors. - [Windows 10 (WSL1)](#windows-10-wsl1) (**Fastest, highly recommended**, Windows 10 only) - [Windows (msys2)](#windows-msys2) (Second fastest) - [Windows (Cygwin)](#windows-cygwin) (Slowest) @@ -35,7 +35,7 @@ WSL1 is the preferred terminal to build **pokeemerald**. The following instructi 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. - > Note for advanced users: Advanced users can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested. + > Note for advanced users: You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested. 4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. @@ -61,7 +61,7 @@ Some tips before proceeding: ``` > Note: These commands will likely take a long time to finish. -> *Note: If the repository you plan to build was created before 2020/XX/YY (e.g. modifications of pokeemerald that haven't updated) then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md). These repositories can be identified by the [older revision](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md) of the INSTALL.md* +> 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 pokeemerald. Install these packages by running the following command: @@ -330,7 +330,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ## Installation -**Windows users:** Consider adding an exception for the `pokeemerald` 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. +> Windows users: Consider adding an exception for the `pokeemerald` 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. 1. If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: From ff866d0735985b82daa3788df9cfe140e86bc8dd Mon Sep 17 00:00:00 2001 From: SatoMew Date: Tue, 23 Mar 2021 22:31:01 +0000 Subject: [PATCH 41/90] Remove Travis badge --- README.md | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2c3447abc4..1dbde694b1 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,15 @@ # Pokémon Emerald -[![Build Status][travis-badge]][travis] - -[travis]: https://travis-ci.org/pret/pokeemerald -[travis-badge]: https://travis-ci.org/pret/pokeemerald.svg?branch=master - This is a decompilation of Pokémon Emerald. It builds the following ROM: -* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) `sha1: f3ae088181bf583e55daf962a92bb46f4f1d07b7` +* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) (SHA-1 hash: `f3ae088181bf583e55daf962a92bb46f4f1d07b7`) To set up the repository, see [INSTALL.md](INSTALL.md). +If you need any help, feel free to ask on the #gen-3-help channel of our [Discord](https://discord.gg/d5dubZ3), or on our [IRC server](https://kiwiirc.com/client/irc.freenode.net/?#pret). + ## See also @@ -29,8 +26,3 @@ Other disassembly and/or decompilation projects: * [**Pokémon Pinball: Ruby & Sapphire**](https://github.com/pret/pokepinballrs) * [**Pokémon FireRed and LeafGreen**](https://github.com/pret/pokefirered) * [**Pokémon Mystery Dungeon: Red Rescue Team**](https://github.com/pret/pmd-red) - - -## Contacts - -You can find us on [Discord](https://discord.gg/d5dubZ3) and [IRC](https://kiwiirc.com/client/irc.freenode.net/?#pret). From 0767f4b9ce0ad9dd86e83f5a09674cbc6559df29 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Sat, 17 Apr 2021 19:00:02 +0200 Subject: [PATCH 42/90] Makefile: resolve libgcc and libc in correct order When actually utilizing functions from libc, linking will fail because the functions used from libc have to be defined after libc. This is the case with libgcc, so we swap their order. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d976343994..c76c24a5d1 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ endif LDFLAGS = -Map ../../$(MAP) -LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall +LIB := $(LIBPATH) -lc -lgcc -L../../libagbsyscall -lagbsyscall SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) From 7a480adafe1f1f8f5b764ad21a7f8e113c63cb1f Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Sat, 17 Apr 2021 22:46:15 +0200 Subject: [PATCH 43/90] modern: add missing sections to linkerscript In order to correctly link a program which uses libc functions a few sections are required to satisfy the linker. This currently adds 0x3C bytes to IWRAM. --- ld_script_modern.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ld_script_modern.txt b/ld_script_modern.txt index b69ada8649..6f8d384534 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -27,6 +27,8 @@ SECTIONS { /* .bss starts at 0x3000000 */ src/*.o(.bss); gflib/*.o(.bss); + *libc.a:*.o(.bss); + *libnosys.a:*.o(.bss); /* .bss.code starts at 0x3001AA8 */ src/m4a.o(.bss.code); @@ -34,7 +36,8 @@ SECTIONS { /* COMMON starts at 0x30022A8 */ src/*.o(COMMON); gflib/*.o(COMMON); - *libc.a:sbrkr.o(COMMON); + *libc.a:*.o(COMMON); + *libnosys.a:*.o(COMMON); end = .; . = 0x8000; } @@ -82,6 +85,7 @@ SECTIONS { *libagbsyscall.a:*.o(.text*); *libgcc.a:*.o(.text*); *libc.a:*.o(.text*); + *libnosys.a:*.o(.text*); src/libisagbprn.o(.text); } =0 From 38d0cca903b4cc886bf0ed2a4d5714f20b14caef Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Sat, 17 Apr 2021 22:48:57 +0200 Subject: [PATCH 44/90] modern: link against libnosys Without libnosys undefined references will occur if libc functions are used. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index c76c24a5d1..33cde3a017 100644 --- a/Makefile +++ b/Makefile @@ -72,7 +72,7 @@ CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g ROM := pokeemerald_modern.gba OBJ_DIR := build/modern -LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" +LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" endif CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) @@ -82,7 +82,7 @@ endif LDFLAGS = -Map ../../$(MAP) -LIB := $(LIBPATH) -lc -lgcc -L../../libagbsyscall -lagbsyscall +LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) From 2859fa60cb6fd863f9c2bf5b9219ff2045a7d229 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Sat, 17 Apr 2021 23:19:01 +0200 Subject: [PATCH 45/90] Makefile: use different linker library sets for modern --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 33cde3a017..3cbd7f3f80 100644 --- a/Makefile +++ b/Makefile @@ -67,12 +67,14 @@ override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex- ROM := pokeemerald.gba OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib +LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall else CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g ROM := pokeemerald_modern.gba OBJ_DIR := build/modern LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" +LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall endif CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) @@ -82,8 +84,6 @@ endif LDFLAGS = -Map ../../$(MAP) -LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall - SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) AIF := tools/aif2pcm/aif2pcm$(EXE) From 2608018862beaf2f9b228581d8dadea041b009de Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Apr 2021 16:08:43 -0400 Subject: [PATCH 46/90] Use some missing fieldmap constants in trainer hill --- src/trainer_hill.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 059773a0be..3ce90c4309 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -678,10 +678,10 @@ static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 stride) // stride i u16 elevation; impassable = (sHillData->floors[floorId].display.collisionData[y] >> (15 - x) & 1); - metatile = sHillData->floors[floorId].display.metatileData[stride * y + x] + 0x200; - elevation = 0x3000; + metatile = sHillData->floors[floorId].display.metatileData[stride * y + x] + NUM_METATILES_IN_PRIMARY; + elevation = 3 << METATILE_ELEVATION_SHIFT; - return (((impassable << 10) & METATILE_COLLISION_MASK) | elevation) | (metatile & METATILE_ID_MASK); + return ((impassable << METATILE_COLLISION_SHIFT) & METATILE_COLLISION_MASK) | elevation | (metatile & METATILE_ID_MASK); } void GenerateTrainerHillFloorLayout(u16 *mapArg) @@ -710,6 +710,8 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg) gBackupMapLayout.width = 31; gBackupMapLayout.height = 35; dst = mapArg + 224; + + // First 5 rows of the map (Entrance / Exit) are always the same for (i = 0; i < 5; i++) { for (j = 0; j < 16; j++) @@ -718,10 +720,11 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg) src += 16; } + // Load the 16x16 floor-specific layout for (i = 0; i < 16; i++) { for (j = 0; j < 16; j++) - dst[j] = GetMetatileForFloor(mapId, j, i, 0x10); + dst[j] = GetMetatileForFloor(mapId, j, i, 16); dst += 31; } From 608c829acde07dd780371a3adf9e7d3f546402fb Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sat, 1 May 2021 01:41:27 -0400 Subject: [PATCH 47/90] change usages of float/double to f32/f64 --- src/pokemon_size_record.c | 2 +- src/roulette.c | 34 +++++++++++++++++----------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index 4beb9c83fb..7c88e5bf10 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -97,7 +97,7 @@ static void FormatMonSizeRecord(u8 *string, u32 size) { #ifdef UNITS_IMPERIAL //Convert size from centimeters to inches - size = (double)(size * 10) / (CM_PER_INCH * 10); + size = (f64)(size * 10) / (CM_PER_INCH * 10); #endif string = ConvertIntToDecimalStringN(string, size / 10, STR_CONV_MODE_LEFT_ALIGN, 8); diff --git a/src/roulette.c b/src/roulette.c index cf27fdf9b8..1ea69dc2e9 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -275,7 +275,7 @@ struct RouletteTable struct Taillow taillow; u16 ballSpeed; u16 baseTravelDist; - float var1C; + f32 var1C; }; struct GridSelection @@ -340,13 +340,13 @@ static EWRAM_DATA struct Roulette s16 ballTravelDistFast; u16 ballTravelDistMed; u16 ballTravelDistSlow; - float ballAngle; - float ballAngleSpeed; - float ballAngleAccel; - float ballDistToCenter; - float ballFallSpeed; - float ballFallAccel; - float varA0; + f32 ballAngle; + f32 ballAngleSpeed; + f32 ballAngleAccel; + f32 ballDistToCenter; + f32 ballFallSpeed; + f32 ballFallAccel; + f32 varA0; u8 playTaskId; u8 spinTaskId; u8 filler_1[2]; @@ -3948,7 +3948,7 @@ static s16 UpdateBallRelativeWheelAngle(struct Sprite *sprite) static u8 UpdateSlotBelowBall(struct Sprite *sprite) { - sRoulette->hitSlot = UpdateBallRelativeWheelAngle(sprite) / (float) DEGREES_PER_SLOT; + sRoulette->hitSlot = UpdateBallRelativeWheelAngle(sprite) / (f32)DEGREES_PER_SLOT; return sRoulette->hitSlot; } @@ -4050,7 +4050,7 @@ static void SpriteCB_UnstickBall_ShroomishBallFall(struct Sprite *sprite) static void SpriteCB_UnstickBall_Shroomish(struct Sprite *sprite) { - float slotOffset, ballFallDist, ballFallSpeed; + f32 slotOffset, ballFallDist, ballFallSpeed; UpdateBallPos(sprite); switch (sprite->sBallAngle) @@ -4233,7 +4233,7 @@ static void SpriteCB_RollBall_TryLand(struct Sprite *sprite) } else // fall left { - float temp; + f32 temp; sRoulette->ballAngleSpeed = (temp = sRouletteTables[sRoulette->tableId].var1C) * 2.0f; slotId = (sRoulette->hitSlot + NUM_ROULETTE_SLOTS - 1) % NUM_ROULETTE_SLOTS; sRoulette->stuckHitSlot = sRoulette->hitSlot; @@ -4279,7 +4279,7 @@ static void SpriteCB_RollBall_Slow(struct Sprite *sprite) { // Reached slot to land in sRoulette->ballAngleAccel = 0.0f; - sRoulette->ballAngleSpeed -= (float)(sRouletteTables[sRoulette->tableId].wheelSpeed) + sRoulette->ballAngleSpeed -= (f32)(sRouletteTables[sRoulette->tableId].wheelSpeed) / (sRouletteTables[sRoulette->tableId].wheelDelay + 1); sprite->sState = 4; sprite->callback = SpriteCB_RollBall_TryLand; @@ -4304,8 +4304,8 @@ static void SpriteCB_RollBall_Medium(struct Sprite *sprite) if (sRoulette->ballDistToCenter > 40.0f) return; - sRoulette->ballFallSpeed = -(4.0f / (float)(sRoulette->ballTravelDistSlow)); - sRoulette->ballAngleAccel = -(sRoulette->ballAngleSpeed / (float)(sRoulette->ballTravelDistSlow)); + sRoulette->ballFallSpeed = -(4.0f / (f32)(sRoulette->ballTravelDistSlow)); + sRoulette->ballAngleAccel = -(sRoulette->ballAngleSpeed / (f32)(sRoulette->ballTravelDistSlow)); sprite->animNum = 2; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; @@ -4320,8 +4320,8 @@ static void SpriteCB_RollBall_Fast(struct Sprite *sprite) return; m4aSongNumStartOrChange(SE_ROULETTE_BALL2); - sRoulette->ballFallSpeed = -(20.0f / (float)(sRoulette->ballTravelDistMed)); - sRoulette->ballAngleAccel = ((1.0f - sRoulette->ballAngleSpeed) / (float)(sRoulette->ballTravelDistMed)); + sRoulette->ballFallSpeed = -(20.0f / (f32)(sRoulette->ballTravelDistMed)); + sRoulette->ballAngleAccel = ((1.0f - sRoulette->ballAngleSpeed) / (f32)(sRoulette->ballTravelDistMed)); sprite->animNum = 1; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; @@ -4558,7 +4558,7 @@ static void SpriteCB_ShroomishShakeScreen(struct Sprite *sprite) static void SpriteCB_ShroomishFall(struct Sprite *sprite) { - float timer; + f32 timer; sprite->data[1]++; timer = sprite->data[1]; sprite->pos2.y = timer * 0.039f * timer; From 9ec5a5b468b1a11d53a7cf33823a3bfa213dfdbd Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sat, 1 May 2021 21:03:40 -0400 Subject: [PATCH 48/90] Wrap notes in details blocks. --- INSTALL.md | 187 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 124 insertions(+), 63 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 36d2b9d252..e0a8c325e7 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -2,17 +2,25 @@ These instructions explain how to set up the tools required to build **pokeemerald**, which assembles the source files into a ROM. +These instructions come with notes which can be expanded by clicking the "Note..." text. +In general, you should not need to open these unless if you get an error or if you need additional clarification. + If you run into trouble, ask for help on Discord or IRC (see [README.md](README.md)). ## Windows -Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbled upon unexpected errors. +Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbles upon unexpected errors. - [Windows 10 (WSL1)](#windows-10-wsl1) (**Fastest, highly recommended**, Windows 10 only) - [Windows (msys2)](#windows-msys2) (Second fastest) - [Windows (Cygwin)](#windows-cygwin) (Slowest) Unscientific benchmarks suggest **msys2 is 2x slower** than WSL1, and **Cygwin is 5-6x slower** than WSL1. +
+ Note for advanced users: WSL2... -> Note for advanced users: **WSL2** is an option and is even faster than **WSL1** 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 [porymap](https://github.com/huderlem/porymap) may [have problems with parsing the `\\wsl$` network drive path](https://bugreports.qt.io/browse/QTBUG-86277). +> WSL2 is an option and is even faster than WSL1 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 porymap +> may have problems with parsing the \\wsl$ network drive path. +
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. @@ -34,13 +42,19 @@ WSL1 is the preferred terminal to build **pokeemerald**. The following instructi 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. - - > Note for advanced users: You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested. +
+ Note for advanced users... + + > You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested. +
4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. +
+ Notes... - > 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). + > 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). +
### Setting up WSL1 Some tips before proceeding: @@ -51,15 +65,17 @@ Some tips before proceeding: 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). +
+ Note... - > Note: When typing in the password, there will be no visible response, but the terminal will still read in input. + > When typing in the password, there will be no visible response, but the terminal will still read in input. +
-3. Update WSL/Ubuntu before continuing. Do this by running the following command: +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: These commands will likely take a long time to finish. > 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. @@ -68,25 +84,29 @@ Some tips before proceeding: ```bash sudo apt install build-essential binutils-arm-none-eabi git libpng-dev ``` - > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. +
+ Note... + + > If the above command does not work, try the above command but replacing `apt` with `apt-get`. +
### Choosing where to store pokeemerald (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 install pokeemerald within Windows. +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 pokeemerald within Windows. + +For example, say you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\* is your **Windows** username: -For example, say you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**. If pokeemerald and/or agbcc hasn't been installed yet, then enter the following command, where *\* is your **Windows** username: ```bash cd /mnt/c/Users//Desktop/decomps ``` -Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -> 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//Desktop/decomp folder"`. -> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed -> Note 4: If pokeemerald is already installed, then run the following command instead (for the provided example path): -> ```bash -> cd /mnt/c/Users//Desktop/decomps/pokeemerald -> ``` +
+ Notes... +> 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//Desktop/decomp folder"`. +> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed +
+ If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using msys2](#windows-msys2). @@ -112,20 +132,28 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. ```bash pacman -S make gcc zlib-devel git ``` - > Note: This command will ask for confirmation, just enter the yes action when prompted. +
+ Note... + + > This command will ask for confirmation, just enter the yes action when prompted. +
3. Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). -4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\_\_**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: +4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\⁠_\_**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: ```bash cd Downloads ``` - > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. - > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. - > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. - > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there. +
+ Notes... + + > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. + > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. + > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. + > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there. +
5. Run the following commands to uncompress and install libpng. @@ -146,19 +174,12 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. ### Choosing where to store pokeemerald (msys2) At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. -For example, say you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**. If pokeemerald and/or agbcc hasn't been installed yet, then enter the following command to **change directory** to the desired folder: +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps** (where *\* is your **Windows** username), enter this command: ```bash cd Desktop/decomps ``` -Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. - -> Note: If pokeemerald is already installed, then run the following command instead (for the provided example path): -> ```bash -> cd Desktop/decomps/pokeemerald -> ``` - If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using Cygwin](#windows-cygwin). @@ -206,7 +227,11 @@ Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. echo export DEVKITARM=$DEVKITARM >> ~/.bashrc ``` - > Note: Replace the drive letter c with the actual drive letter if it is not c. +
+ Note... + + > Replace the drive letter c with the actual drive letter if it is not c. +
### Choosing where to store pokeemerald (Cygwin) @@ -218,17 +243,17 @@ cd c:/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. -> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed -> Note 3: If pokeemerald is already installed, then run the following command instead (for the provided example path): -> ```bash -> cd c:/Users//Desktop/decomps/pokeemerald -> ``` +
+ Notes... +> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. +> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed +
+ If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). ## macOS -1. If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/library/archive/technotes/tn2339/_index.html), open your Terminal, and run the following command: +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 @@ -239,7 +264,11 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos) ### Installing libpng (macOS) -> Note for advanced users: 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. +
+ Note for advanced users... + +> 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. +
1. Open the Terminal. 2. If Homebrew is not installed, then install [Homebrew](https://brew.sh/) by following the instructions on the website. @@ -279,17 +308,17 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ### Choosing where to store pokeemerald (macOS) At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. -For example, say you want to store pokeemerald (and agbcc) in **~/Desktop/decomps**. If pokeemerald and/or agbcc hasn't been installed yet, then enter the following command to **change directory** to the desired folder: +For example, if you want to store pokeemerald (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 pokeemerald 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. -> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` -> Note 2: If pokeemerald is already installed, then run the following command instead (for the provided example path: -> ```bash -> cd Desktop/decomps/pokeemerald -> ``` +
+ Note... + +> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` +
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). @@ -302,6 +331,13 @@ Run the following command to install the necessary packages: sudo apt install build-essential binutils-arm-none-eabi git libpng-dev ``` Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux). +
+ Note for legacy repos... + +> 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 you will have to install devkitARM. Install all the above packages except binutils-arm-none-eabi, and follow the instructions to +> [install devkitARM on Debian/Ubuntu-based distributions](#installing-devkitarm-on-debianubuntu-based-distributions). +
### Other distributions _(Specific instructions for other distributions would be greatly appreciated!)_ @@ -330,7 +366,13 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ## Installation -> Windows users: Consider adding an exception for the `pokeemerald` 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. +
+ Note for Windows users... + +> Consider adding an exception for the `pokeemerald` 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. +
1. If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: @@ -338,16 +380,20 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for git clone https://github.com/luckytyphlosion/pokeemerald ``` - > Note for WSL1: 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 - >``` - > Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again. +
+ Note for WSL1... -2. Install agbcc into pokeemerald. The commands to run depend on certain conditions: + > 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 + > ``` + > Where *\* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again. +
+ +2. Install agbcc into pokeemerald. 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 pokeemerald, run the following commands to build and install it into pokeemerald: ```bash @@ -366,14 +412,18 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for ./install.sh ../pokeemerald ``` -- **Otherwise**, run the following commands to install agbcc into pokeemerald: +- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald: ```bash cd agbcc ./install.sh ../pokeemerald ``` - > Note: If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before. +
+ Note... + + > If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before. +
3. Once agbcc is installed, change directory back to the base directory where pokeemerald and agbcc are stored: @@ -392,7 +442,10 @@ To build **pokeemerald.gba** for the first time and confirm it matches the offic make compare ``` If an OK is returned, then the installation went smoothly. -> Note for Windows: 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. +
+Note for Windows... +> 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. +
To build **pokeemerald.gba** with your changes: ```bash @@ -438,7 +491,11 @@ Otherwise, follow the instructions below to install devkitARM. ```bash sudo apt install gdebi-core ``` - > Note: If the above command does not work, try the above command but replacing `apt` with `apt-get`. +
+ Note... + + > If the above command does not work, try the above command but replacing `apt` with `apt-get`. +
2. Once `gdebi-core` is done installing, download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`. 3. Change directory to where the package was downloaded. For example, if the package file was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command, where *\ is your **Windows** username: @@ -456,7 +513,11 @@ Otherwise, follow the instructions below to install devkitARM. ``` The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. +
+ Note... + > Note: `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead. +
5. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): From 6ce27c0ff0f8d6b3addea73ef2c49584c510e60b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 4 May 2021 15:43:24 -0400 Subject: [PATCH 49/90] Restore EReaderTrainerHillSet dummy --- include/ereader_helpers.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h index 937cfaca13..064b61ed7f 100755 --- a/include/ereader_helpers.h +++ b/include/ereader_helpers.h @@ -15,6 +15,7 @@ struct EReaderTrainerHillSet { u8 numTrainers; u8 id; + u16 dummy; // Only read in an assert. u32 checksum; struct EReaderTrainerHillTrainer trainers[6]; u8 unk_ec0[40]; From 783a167b76bef461f47d425ecc11c0b9fda30c77 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Wed, 5 May 2021 00:49:42 +0200 Subject: [PATCH 50/90] ld_script_modern: minor fixes for gcc 11 --- ld_script_modern.txt | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/ld_script_modern.txt b/ld_script_modern.txt index 6f8d384534..59d032bb25 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -27,8 +27,8 @@ SECTIONS { /* .bss starts at 0x3000000 */ src/*.o(.bss); gflib/*.o(.bss); - *libc.a:*.o(.bss); - *libnosys.a:*.o(.bss); + *libc.a:*.o(.bss*); + *libnosys.a:*.o(.bss*); /* .bss.code starts at 0x3001AA8 */ src/m4a.o(.bss.code); @@ -47,19 +47,10 @@ SECTIONS { .text : ALIGN(4) { - src/crt0.o(.text); - src/*.o(.text); - gflib/*.o(.text); - asm/*.o(.text); - } =0 - - .text.unlikely : - ALIGN(4) - { - src/crt0.o(.text.unlikely); - src/*.o(.text.unlikely); - gflib/*.o(.text.unlikely); - asm/*.o(.text.unlikely); + src/crt0.o(.text*); + src/*.o(.text*); + gflib/*.o(.text*); + asm/*.o(.text*); } =0 script_data : From c50a21fba07db80ac44c6f09fd202ba4b2e2c7d3 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 5 May 2021 16:07:21 -0400 Subject: [PATCH 51/90] Tidy just cleans both normal and modern. --- Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 3bb5161e31..20dca6f643 100644 --- a/Makefile +++ b/Makefile @@ -215,9 +215,7 @@ mostlyclean: tidynonmodern tidymodern @$(MAKE) clean -C berry_fix @$(MAKE) clean -C libagbsyscall -tidy: - rm -f $(ROM) $(ELF) $(MAP) - rm -r $(OBJ_DIR) +tidy: tidynonmodern tidymodern tidynonmodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) From a8fab62c89dcdfc662bcb49c8a1b538ebc70d4b9 Mon Sep 17 00:00:00 2001 From: Flametix <44883711+Flametix@users.noreply.github.com> Date: Thu, 6 May 2021 20:49:04 -0400 Subject: [PATCH 52/90] Fix Substitute typo --- data/battle_scripts_1.s | 2 +- include/constants/battle_string_ids.h | 2 +- src/battle_gfx_sfx_util.c | 6 +++--- src/battle_message.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 045db19c59..b15c29cfe0 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1120,7 +1120,7 @@ BattleScript_SubstituteAnim:: healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER BattleScript_SubstituteString:: - printfromtable gSubsituteUsedStringIds + printfromtable gSubstituteUsedStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyHasSubstitute:: diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f225412722..c8d37aac61 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -502,7 +502,7 @@ #define B_MSG_TRANSFORMED 0 #define B_MSG_TRANSFORM_FAILED 1 -// gSubsituteUsedStringIds +// gSubstituteUsedStringIds #define B_MSG_SET_SUBSTITUTE 0 #define B_MSG_SUBSTITUTE_FAILED 1 diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index ba0cab8146..88e69665e0 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -40,7 +40,7 @@ extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; static u8 GetBattlePalaceMoveGroup(u16 move); static u16 GetBattlePalaceTarget(void); static void SpriteCB_TrainerSlideVertical(struct Sprite *sprite); -static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId); +static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId); static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId); static void Task_ClearBitWhenSpecialAnimDone(u8 taskId); static void ClearSpritesBattlerHealthboxAnimData(void); @@ -444,7 +444,7 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 de return TRUE; } if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute - && !ShouldAnimBeDoneRegardlessOfSubsitute(tableId)) + && !ShouldAnimBeDoneRegardlessOfSubstitute(tableId)) { return TRUE; } @@ -480,7 +480,7 @@ static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId) #undef tBattlerId -static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId) +static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId) { switch (animId) { diff --git a/src/battle_message.c b/src/battle_message.c index 2e752dccaf..a308664104 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1067,7 +1067,7 @@ const u16 gTransformUsedStringIds[] = [B_MSG_TRANSFORM_FAILED] = STRINGID_BUTITFAILED }; -const u16 gSubsituteUsedStringIds[] = +const u16 gSubstituteUsedStringIds[] = { [B_MSG_SET_SUBSTITUTE] = STRINGID_PKMNMADESUBSTITUTE, [B_MSG_SUBSTITUTE_FAILED] = STRINGID_TOOWEAKFORSUBSTITUTE From 43854664b51c94e8cb73a535dd176311208486e8 Mon Sep 17 00:00:00 2001 From: ExpoSeed Date: Fri, 7 May 2021 13:50:50 -0500 Subject: [PATCH 53/90] Fix UB in RotatingGate_RotateInDirection --- src/rotating_gate.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rotating_gate.c b/src/rotating_gate.c index 22a0b0bdfa..36c23c2a56 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -670,7 +670,8 @@ static void RotatingGate_RotateInDirection(u8 gateId, u32 rotationDirection) } else { - orientation = ++orientation % GATE_ORIENTATION_MAX; + orientation++; + orientation = orientation % GATE_ORIENTATION_MAX; } RotatingGate_SetGateOrientation(gateId, orientation); } From 65fd3342562106c5a9ffa93f6b46a02c7ebe9ef5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 28 Apr 2021 16:06:27 -0400 Subject: [PATCH 54/90] Name map groups --- data/maps/map_groups.json | 136 ++++++++++++++++----------------- include/constants/map_groups.h | 68 ++++++++--------- tools/mapjson/mapjson.cpp | 2 +- 3 files changed, 103 insertions(+), 103 deletions(-) diff --git a/data/maps/map_groups.json b/data/maps/map_groups.json index 4268abbef5..ebef431b30 100644 --- a/data/maps/map_groups.json +++ b/data/maps/map_groups.json @@ -1,41 +1,41 @@ { "group_order": [ - "gMapGroup0", - "gMapGroup1", - "gMapGroup2", - "gMapGroup3", - "gMapGroup4", - "gMapGroup5", - "gMapGroup6", - "gMapGroup7", - "gMapGroup8", - "gMapGroup9", - "gMapGroup10", - "gMapGroup11", - "gMapGroup12", - "gMapGroup13", - "gMapGroup14", - "gMapGroup15", - "gMapGroup16", - "gMapGroup17", - "gMapGroup18", - "gMapGroup19", - "gMapGroup20", - "gMapGroup21", - "gMapGroup22", - "gMapGroup23", - "gMapGroup24", - "gMapGroup25", - "gMapGroup26", - "gMapGroup27", - "gMapGroup28", - "gMapGroup29", - "gMapGroup30", - "gMapGroup31", - "gMapGroup32", - "gMapGroup33" + "gMapGroup_TownsAndRoutes", + "gMapGroup_IndoorLittleroot", + "gMapGroup_IndoorOldale", + "gMapGroup_IndoorDewford", + "gMapGroup_IndoorLavaridge", + "gMapGroup_IndoorFallarbor", + "gMapGroup_IndoorVerdanturf", + "gMapGroup_IndoorPacifidlog", + "gMapGroup_IndoorPetalburg", + "gMapGroup_IndoorSlateport", + "gMapGroup_IndoorMauville", + "gMapGroup_IndoorRustboro", + "gMapGroup_IndoorFortree", + "gMapGroup_IndoorLilycove", + "gMapGroup_IndoorMossdeep", + "gMapGroup_IndoorSootopolis", + "gMapGroup_IndoorEverGrande", + "gMapGroup_IndoorRoute104", + "gMapGroup_IndoorRoute111", + "gMapGroup_IndoorRoute112", + "gMapGroup_IndoorRoute114", + "gMapGroup_IndoorRoute116", + "gMapGroup_IndoorRoute117", + "gMapGroup_IndoorRoute121", + "gMapGroup_Dungeons", + "gMapGroup_IndoorDynamic", + "gMapGroup_SpecialArea", + "gMapGroup_IndoorRoute104Prototype", + "gMapGroup_IndoorRoute109", + "gMapGroup_IndoorRoute110", + "gMapGroup_IndoorRoute113", + "gMapGroup_IndoorRoute123", + "gMapGroup_IndoorRoute119", + "gMapGroup_IndoorRoute124" ], - "gMapGroup0": [ + "gMapGroup_TownsAndRoutes": [ "PetalburgCity", "SlateportCity", "MauvilleCity", @@ -94,21 +94,21 @@ "Underwater_Route105", "Underwater_Route125" ], - "gMapGroup1": [ + "gMapGroup_IndoorLittleroot": [ "LittlerootTown_BrendansHouse_1F", "LittlerootTown_BrendansHouse_2F", "LittlerootTown_MaysHouse_1F", "LittlerootTown_MaysHouse_2F", "LittlerootTown_ProfessorBirchsLab" ], - "gMapGroup2": [ + "gMapGroup_IndoorOldale": [ "OldaleTown_House1", "OldaleTown_House2", "OldaleTown_PokemonCenter_1F", "OldaleTown_PokemonCenter_2F", "OldaleTown_Mart" ], - "gMapGroup3": [ + "gMapGroup_IndoorDewford": [ "DewfordTown_House1", "DewfordTown_PokemonCenter_1F", "DewfordTown_PokemonCenter_2F", @@ -116,7 +116,7 @@ "DewfordTown_Hall", "DewfordTown_House2" ], - "gMapGroup4": [ + "gMapGroup_IndoorLavaridge": [ "LavaridgeTown_HerbShop", "LavaridgeTown_Gym_1F", "LavaridgeTown_Gym_B1F", @@ -125,7 +125,7 @@ "LavaridgeTown_PokemonCenter_1F", "LavaridgeTown_PokemonCenter_2F" ], - "gMapGroup5": [ + "gMapGroup_IndoorFallarbor": [ "FallarborTown_Mart", "FallarborTown_BattleTentLobby", "FallarborTown_BattleTentCorridor", @@ -135,7 +135,7 @@ "FallarborTown_CozmosHouse", "FallarborTown_MoveRelearnersHouse" ], - "gMapGroup6": [ + "gMapGroup_IndoorVerdanturf": [ "VerdanturfTown_BattleTentLobby", "VerdanturfTown_BattleTentCorridor", "VerdanturfTown_BattleTentBattleRoom", @@ -146,7 +146,7 @@ "VerdanturfTown_FriendshipRatersHouse", "VerdanturfTown_House" ], - "gMapGroup7": [ + "gMapGroup_IndoorPacifidlog": [ "PacifidlogTown_PokemonCenter_1F", "PacifidlogTown_PokemonCenter_2F", "PacifidlogTown_House1", @@ -155,7 +155,7 @@ "PacifidlogTown_House4", "PacifidlogTown_House5" ], - "gMapGroup8": [ + "gMapGroup_IndoorPetalburg": [ "PetalburgCity_WallysHouse", "PetalburgCity_Gym", "PetalburgCity_House1", @@ -164,7 +164,7 @@ "PetalburgCity_PokemonCenter_2F", "PetalburgCity_Mart" ], - "gMapGroup9": [ + "gMapGroup_IndoorSlateport": [ "SlateportCity_SternsShipyard_1F", "SlateportCity_SternsShipyard_2F", "SlateportCity_BattleTentLobby", @@ -180,7 +180,7 @@ "SlateportCity_PokemonCenter_2F", "SlateportCity_Mart" ], - "gMapGroup10": [ + "gMapGroup_IndoorMauville": [ "MauvilleCity_Gym", "MauvilleCity_BikeShop", "MauvilleCity_House1", @@ -190,7 +190,7 @@ "MauvilleCity_PokemonCenter_2F", "MauvilleCity_Mart" ], - "gMapGroup11": [ + "gMapGroup_IndoorRustboro": [ "RustboroCity_DevonCorp_1F", "RustboroCity_DevonCorp_2F", "RustboroCity_DevonCorp_3F", @@ -209,7 +209,7 @@ "RustboroCity_Flat2_3F", "RustboroCity_House3" ], - "gMapGroup12": [ + "gMapGroup_IndoorFortree": [ "FortreeCity_House1", "FortreeCity_Gym", "FortreeCity_PokemonCenter_1F", @@ -221,7 +221,7 @@ "FortreeCity_House5", "FortreeCity_DecorationShop" ], - "gMapGroup13": [ + "gMapGroup_IndoorLilycove": [ "LilycoveCity_CoveLilyMotel_1F", "LilycoveCity_CoveLilyMotel_2F", "LilycoveCity_LilycoveMuseum_1F", @@ -246,7 +246,7 @@ "LilycoveCity_DepartmentStoreRooftop", "LilycoveCity_DepartmentStoreElevator" ], - "gMapGroup14": [ + "gMapGroup_IndoorMossdeep": [ "MossdeepCity_Gym", "MossdeepCity_House1", "MossdeepCity_House2", @@ -261,7 +261,7 @@ "MossdeepCity_GameCorner_1F", "MossdeepCity_GameCorner_B1F" ], - "gMapGroup15": [ + "gMapGroup_IndoorSootopolis": [ "SootopolisCity_Gym_1F", "SootopolisCity_Gym_B1F", "SootopolisCity_PokemonCenter_1F", @@ -278,7 +278,7 @@ "SootopolisCity_MysteryEventsHouse_1F", "SootopolisCity_MysteryEventsHouse_B1F" ], - "gMapGroup16": [ + "gMapGroup_IndoorEverGrande": [ "EverGrandeCity_SidneysRoom", "EverGrandeCity_PhoebesRoom", "EverGrandeCity_GlaciasRoom", @@ -295,33 +295,33 @@ "EverGrandeCity_PokemonCenter_2F", "EverGrandeCity_PokemonLeague_2F" ], - "gMapGroup17": [ + "gMapGroup_IndoorRoute104": [ "Route104_MrBrineysHouse", "Route104_PrettyPetalFlowerShop" ], - "gMapGroup18": [ + "gMapGroup_IndoorRoute111": [ "Route111_WinstrateFamilysHouse", "Route111_OldLadysRestStop" ], - "gMapGroup19": [ + "gMapGroup_IndoorRoute112": [ "Route112_CableCarStation", "MtChimney_CableCarStation" ], - "gMapGroup20": [ + "gMapGroup_IndoorRoute114": [ "Route114_FossilManiacsHouse", "Route114_FossilManiacsTunnel", "Route114_LanettesHouse" ], - "gMapGroup21": [ + "gMapGroup_IndoorRoute116": [ "Route116_TunnelersRestHouse" ], - "gMapGroup22": [ + "gMapGroup_IndoorRoute117": [ "Route117_PokemonDayCare" ], - "gMapGroup23": [ + "gMapGroup_IndoorRoute121": [ "Route121_SafariZoneEntrance" ], - "gMapGroup24": [ + "gMapGroup_Dungeons": [ "MeteorFalls_1F_1R", "MeteorFalls_1F_2R", "MeteorFalls_B1F_1R", @@ -431,7 +431,7 @@ "AlteringCave", "MeteorFalls_StevensCave" ], - "gMapGroup25": [ + "gMapGroup_IndoorDynamic": [ "SecretBase_RedCave1", "SecretBase_BrownCave1", "SecretBase_BlueCave1", @@ -494,7 +494,7 @@ "BattlePyramidSquare16", "UnionRoom" ], - "gMapGroup26": [ + "gMapGroup_SpecialArea": [ "SafariZone_Northwest", "SafariZone_North", "SafariZone_Southwest", @@ -585,14 +585,14 @@ "NavelRock_Bottom", "TrainerHill_Elevator" ], - "gMapGroup27": [ + "gMapGroup_IndoorRoute104Prototype": [ "Route104_Prototype", "Route104_PrototypePrettyPetalFlowerShop" ], - "gMapGroup28": [ + "gMapGroup_IndoorRoute109": [ "Route109_SeashoreHouse" ], - "gMapGroup29": [ + "gMapGroup_IndoorRoute110": [ "Route110_TrickHouseEntrance", "Route110_TrickHouseEnd", "Route110_TrickHouseCorridor", @@ -607,18 +607,18 @@ "Route110_SeasideCyclingRoadNorthEntrance", "Route110_SeasideCyclingRoadSouthEntrance" ], - "gMapGroup30": [ + "gMapGroup_IndoorRoute113": [ "Route113_GlassWorkshop" ], - "gMapGroup31": [ + "gMapGroup_IndoorRoute123": [ "Route123_BerryMastersHouse" ], - "gMapGroup32": [ + "gMapGroup_IndoorRoute119": [ "Route119_WeatherInstitute_1F", "Route119_WeatherInstitute_2F", "Route119_House" ], - "gMapGroup33": [ + "gMapGroup_IndoorRoute124": [ "Route124_DivingTreasureHuntersHouse" ], "connections_include_order": [ diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h index c650600e84..eaf40a525d 100755 --- a/include/constants/map_groups.h +++ b/include/constants/map_groups.h @@ -5,7 +5,7 @@ // DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json // -// Map Group 0 +// gMapGroup_TownsAndRoutes #define MAP_PETALBURG_CITY (0 | (0 << 8)) #define MAP_SLATEPORT_CITY (1 | (0 << 8)) #define MAP_MAUVILLE_CITY (2 | (0 << 8)) @@ -64,21 +64,21 @@ #define MAP_UNDERWATER_ROUTE105 (55 | (0 << 8)) #define MAP_UNDERWATER_ROUTE125 (56 | (0 << 8)) -// Map Group 1 +// gMapGroup_IndoorLittleroot #define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F (0 | (1 << 8)) #define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F (1 | (1 << 8)) #define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F (2 | (1 << 8)) #define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F (3 | (1 << 8)) #define MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB (4 | (1 << 8)) -// Map Group 2 +// gMapGroup_IndoorOldale #define MAP_OLDALE_TOWN_HOUSE1 (0 | (2 << 8)) #define MAP_OLDALE_TOWN_HOUSE2 (1 | (2 << 8)) #define MAP_OLDALE_TOWN_POKEMON_CENTER_1F (2 | (2 << 8)) #define MAP_OLDALE_TOWN_POKEMON_CENTER_2F (3 | (2 << 8)) #define MAP_OLDALE_TOWN_MART (4 | (2 << 8)) -// Map Group 3 +// gMapGroup_IndoorDewford #define MAP_DEWFORD_TOWN_HOUSE1 (0 | (3 << 8)) #define MAP_DEWFORD_TOWN_POKEMON_CENTER_1F (1 | (3 << 8)) #define MAP_DEWFORD_TOWN_POKEMON_CENTER_2F (2 | (3 << 8)) @@ -86,7 +86,7 @@ #define MAP_DEWFORD_TOWN_HALL (4 | (3 << 8)) #define MAP_DEWFORD_TOWN_HOUSE2 (5 | (3 << 8)) -// Map Group 4 +// gMapGroup_IndoorLavaridge #define MAP_LAVARIDGE_TOWN_HERB_SHOP (0 | (4 << 8)) #define MAP_LAVARIDGE_TOWN_GYM_1F (1 | (4 << 8)) #define MAP_LAVARIDGE_TOWN_GYM_B1F (2 | (4 << 8)) @@ -95,7 +95,7 @@ #define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F (5 | (4 << 8)) #define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F (6 | (4 << 8)) -// Map Group 5 +// gMapGroup_IndoorFallarbor #define MAP_FALLARBOR_TOWN_MART (0 | (5 << 8)) #define MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY (1 | (5 << 8)) #define MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR (2 | (5 << 8)) @@ -105,7 +105,7 @@ #define MAP_FALLARBOR_TOWN_COZMOS_HOUSE (6 | (5 << 8)) #define MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE (7 | (5 << 8)) -// Map Group 6 +// gMapGroup_IndoorVerdanturf #define MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY (0 | (6 << 8)) #define MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR (1 | (6 << 8)) #define MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM (2 | (6 << 8)) @@ -116,7 +116,7 @@ #define MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE (7 | (6 << 8)) #define MAP_VERDANTURF_TOWN_HOUSE (8 | (6 << 8)) -// Map Group 7 +// gMapGroup_IndoorPacifidlog #define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F (0 | (7 << 8)) #define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F (1 | (7 << 8)) #define MAP_PACIFIDLOG_TOWN_HOUSE1 (2 | (7 << 8)) @@ -125,7 +125,7 @@ #define MAP_PACIFIDLOG_TOWN_HOUSE4 (5 | (7 << 8)) #define MAP_PACIFIDLOG_TOWN_HOUSE5 (6 | (7 << 8)) -// Map Group 8 +// gMapGroup_IndoorPetalburg #define MAP_PETALBURG_CITY_WALLYS_HOUSE (0 | (8 << 8)) #define MAP_PETALBURG_CITY_GYM (1 | (8 << 8)) #define MAP_PETALBURG_CITY_HOUSE1 (2 | (8 << 8)) @@ -134,7 +134,7 @@ #define MAP_PETALBURG_CITY_POKEMON_CENTER_2F (5 | (8 << 8)) #define MAP_PETALBURG_CITY_MART (6 | (8 << 8)) -// Map Group 9 +// gMapGroup_IndoorSlateport #define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F (0 | (9 << 8)) #define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F (1 | (9 << 8)) #define MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY (2 | (9 << 8)) @@ -150,7 +150,7 @@ #define MAP_SLATEPORT_CITY_POKEMON_CENTER_2F (12 | (9 << 8)) #define MAP_SLATEPORT_CITY_MART (13 | (9 << 8)) -// Map Group 10 +// gMapGroup_IndoorMauville #define MAP_MAUVILLE_CITY_GYM (0 | (10 << 8)) #define MAP_MAUVILLE_CITY_BIKE_SHOP (1 | (10 << 8)) #define MAP_MAUVILLE_CITY_HOUSE1 (2 | (10 << 8)) @@ -160,7 +160,7 @@ #define MAP_MAUVILLE_CITY_POKEMON_CENTER_2F (6 | (10 << 8)) #define MAP_MAUVILLE_CITY_MART (7 | (10 << 8)) -// Map Group 11 +// gMapGroup_IndoorRustboro #define MAP_RUSTBORO_CITY_DEVON_CORP_1F (0 | (11 << 8)) #define MAP_RUSTBORO_CITY_DEVON_CORP_2F (1 | (11 << 8)) #define MAP_RUSTBORO_CITY_DEVON_CORP_3F (2 | (11 << 8)) @@ -179,7 +179,7 @@ #define MAP_RUSTBORO_CITY_FLAT2_3F (15 | (11 << 8)) #define MAP_RUSTBORO_CITY_HOUSE3 (16 | (11 << 8)) -// Map Group 12 +// gMapGroup_IndoorFortree #define MAP_FORTREE_CITY_HOUSE1 (0 | (12 << 8)) #define MAP_FORTREE_CITY_GYM (1 | (12 << 8)) #define MAP_FORTREE_CITY_POKEMON_CENTER_1F (2 | (12 << 8)) @@ -191,7 +191,7 @@ #define MAP_FORTREE_CITY_HOUSE5 (8 | (12 << 8)) #define MAP_FORTREE_CITY_DECORATION_SHOP (9 | (12 << 8)) -// Map Group 13 +// gMapGroup_IndoorLilycove #define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F (0 | (13 << 8)) #define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F (1 | (13 << 8)) #define MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F (2 | (13 << 8)) @@ -216,7 +216,7 @@ #define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP (21 | (13 << 8)) #define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR (22 | (13 << 8)) -// Map Group 14 +// gMapGroup_IndoorMossdeep #define MAP_MOSSDEEP_CITY_GYM (0 | (14 << 8)) #define MAP_MOSSDEEP_CITY_HOUSE1 (1 | (14 << 8)) #define MAP_MOSSDEEP_CITY_HOUSE2 (2 | (14 << 8)) @@ -231,7 +231,7 @@ #define MAP_MOSSDEEP_CITY_GAME_CORNER_1F (11 | (14 << 8)) #define MAP_MOSSDEEP_CITY_GAME_CORNER_B1F (12 | (14 << 8)) -// Map Group 15 +// gMapGroup_IndoorSootopolis #define MAP_SOOTOPOLIS_CITY_GYM_1F (0 | (15 << 8)) #define MAP_SOOTOPOLIS_CITY_GYM_B1F (1 | (15 << 8)) #define MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F (2 | (15 << 8)) @@ -248,7 +248,7 @@ #define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F (13 | (15 << 8)) #define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F (14 | (15 << 8)) -// Map Group 16 +// gMapGroup_IndoorEverGrande #define MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM (0 | (16 << 8)) #define MAP_EVER_GRANDE_CITY_PHOEBES_ROOM (1 | (16 << 8)) #define MAP_EVER_GRANDE_CITY_GLACIAS_ROOM (2 | (16 << 8)) @@ -265,33 +265,33 @@ #define MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F (13 | (16 << 8)) #define MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F (14 | (16 << 8)) -// Map Group 17 +// gMapGroup_IndoorRoute104 #define MAP_ROUTE104_MR_BRINEYS_HOUSE (0 | (17 << 8)) #define MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP (1 | (17 << 8)) -// Map Group 18 +// gMapGroup_IndoorRoute111 #define MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE (0 | (18 << 8)) #define MAP_ROUTE111_OLD_LADYS_REST_STOP (1 | (18 << 8)) -// Map Group 19 +// gMapGroup_IndoorRoute112 #define MAP_ROUTE112_CABLE_CAR_STATION (0 | (19 << 8)) #define MAP_MT_CHIMNEY_CABLE_CAR_STATION (1 | (19 << 8)) -// Map Group 20 +// gMapGroup_IndoorRoute114 #define MAP_ROUTE114_FOSSIL_MANIACS_HOUSE (0 | (20 << 8)) #define MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL (1 | (20 << 8)) #define MAP_ROUTE114_LANETTES_HOUSE (2 | (20 << 8)) -// Map Group 21 +// gMapGroup_IndoorRoute116 #define MAP_ROUTE116_TUNNELERS_REST_HOUSE (0 | (21 << 8)) -// Map Group 22 +// gMapGroup_IndoorRoute117 #define MAP_ROUTE117_POKEMON_DAY_CARE (0 | (22 << 8)) -// Map Group 23 +// gMapGroup_IndoorRoute121 #define MAP_ROUTE121_SAFARI_ZONE_ENTRANCE (0 | (23 << 8)) -// Map Group 24 +// gMapGroup_Dungeons #define MAP_METEOR_FALLS_1F_1R (0 | (24 << 8)) #define MAP_METEOR_FALLS_1F_2R (1 | (24 << 8)) #define MAP_METEOR_FALLS_B1F_1R (2 | (24 << 8)) @@ -401,7 +401,7 @@ #define MAP_ALTERING_CAVE (106 | (24 << 8)) #define MAP_METEOR_FALLS_STEVENS_CAVE (107 | (24 << 8)) -// Map Group 25 +// gMapGroup_IndoorDynamic #define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8)) #define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8)) #define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8)) @@ -464,7 +464,7 @@ #define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8)) #define MAP_UNION_ROOM (60 | (25 << 8)) -// Map Group 26 +// gMapGroup_SpecialArea #define MAP_SAFARI_ZONE_NORTHWEST (0 | (26 << 8)) #define MAP_SAFARI_ZONE_NORTH (1 | (26 << 8)) #define MAP_SAFARI_ZONE_SOUTHWEST (2 | (26 << 8)) @@ -555,14 +555,14 @@ #define MAP_NAVEL_ROCK_BOTTOM (87 | (26 << 8)) #define MAP_TRAINER_HILL_ELEVATOR (88 | (26 << 8)) -// Map Group 27 +// gMapGroup_IndoorRoute104Prototype #define MAP_ROUTE104_PROTOTYPE (0 | (27 << 8)) #define MAP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP (1 | (27 << 8)) -// Map Group 28 +// gMapGroup_IndoorRoute109 #define MAP_ROUTE109_SEASHORE_HOUSE (0 | (28 << 8)) -// Map Group 29 +// gMapGroup_IndoorRoute110 #define MAP_ROUTE110_TRICK_HOUSE_ENTRANCE (0 | (29 << 8)) #define MAP_ROUTE110_TRICK_HOUSE_END (1 | (29 << 8)) #define MAP_ROUTE110_TRICK_HOUSE_CORRIDOR (2 | (29 << 8)) @@ -577,18 +577,18 @@ #define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE (11 | (29 << 8)) #define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE (12 | (29 << 8)) -// Map Group 30 +// gMapGroup_IndoorRoute113 #define MAP_ROUTE113_GLASS_WORKSHOP (0 | (30 << 8)) -// Map Group 31 +// gMapGroup_IndoorRoute123 #define MAP_ROUTE123_BERRY_MASTERS_HOUSE (0 | (31 << 8)) -// Map Group 32 +// gMapGroup_IndoorRoute119 #define MAP_ROUTE119_WEATHER_INSTITUTE_1F (0 | (32 << 8)) #define MAP_ROUTE119_WEATHER_INSTITUTE_2F (1 | (32 << 8)) #define MAP_ROUTE119_HOUSE (2 | (32 << 8)) -// Map Group 33 +// gMapGroup_IndoorRoute124 #define MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE (0 | (33 << 8)) #define MAP_GROUPS_COUNT 34 diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 5e246ff249..d767b469e9 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -395,7 +395,7 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { int group_num = 0; for (auto &group : groups_data["group_order"].array_items()) { - text << "// Map Group " << group_num << "\n"; + text << "// " << group.string_value() << "\n"; vector map_ids; size_t max_length = 0; From 7d3f25dfb0acf3902a41a4312c6ea45f325bf6b1 Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Wed, 12 May 2021 16:54:41 -0400 Subject: [PATCH 55/90] Change IsPokemonCryPlaying to bool32 Better reflects its usage --- berry_fix/payload/include/gba/m4a_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/berry_fix/payload/include/gba/m4a_internal.h b/berry_fix/payload/include/gba/m4a_internal.h index 339a0774ed..1aca675854 100644 --- a/berry_fix/payload/include/gba/m4a_internal.h +++ b/berry_fix/payload/include/gba/m4a_internal.h @@ -419,7 +419,7 @@ void SetPokemonCryPitch(s16 val); void SetPokemonCryLength(u16 val); void SetPokemonCryRelease(u8 val); void SetPokemonCryProgress(u32 val); -int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo); +bool32 IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo); void SetPokemonCryChorus(s8 val); void SetPokemonCryStereo(u32 val); void SetPokemonCryPriority(u8 val); From 3e15a3ef8fe45373acb11d81046f081b6492a0d0 Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Wed, 12 May 2021 16:58:34 -0400 Subject: [PATCH 56/90] Update IsPokemonCryPlaying --- src/m4a.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/m4a.c b/src/m4a.c index 3bb440f656..717cafc78e 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1703,14 +1703,14 @@ void SetPokemonCryProgress(u32 val) gPokemonCrySong.unkCmd0DParam = val; } -int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo) +bool32 IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo) { struct MusicPlayerTrack *track = mplayInfo->tracks; if (track->chan && track->chan->track == track) - return 1; + return TRUE; else - return 0; + return FALSE; } void SetPokemonCryChorus(s8 val) From 2be29cdb77afd5ffcb8ce70fbc9bef0c77db556a Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Wed, 12 May 2021 17:00:42 -0400 Subject: [PATCH 57/90] Update IsPokemonCryPlaying --- include/gba/m4a_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index 2d0e1bb1cd..2ccbb18f5b 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -447,7 +447,7 @@ void SetPokemonCryPitch(s16 val); void SetPokemonCryLength(u16 val); void SetPokemonCryRelease(u8 val); void SetPokemonCryProgress(u32 val); -int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo); +bool32 IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo); void SetPokemonCryChorus(s8 val); void SetPokemonCryStereo(u32 val); void SetPokemonCryPriority(u8 val); From 9a195c0fef7a47e5ab55c7047d80969c9cd6e44e Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Wed, 12 May 2021 15:23:14 -0400 Subject: [PATCH 58/90] Cherry-pick roamer bug fix from pokefirered Adapted https://github.com/pret/pokefirered/blob/master/src/battle_main.c#L3831 to pokeemerald --- src/battle_main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/battle_main.c b/src/battle_main.c index c74de896e6..001e2ec17c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5148,7 +5148,12 @@ static void ReturnFromBattleToOverworld(void) if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) { UpdateRoamerHPStatus(&gEnemyParty[0]); + +#ifndef BUGFIX if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT) +#else + if ((gBattleOutcome == B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT) // Bug: When Roar is used by roamer, gBattleOutcome is B_OUTCOME_PLAYER_TELEPORTED (5). +#endif // & with B_OUTCOME_WON (1) will return TRUE and deactivates the roamer. SetRoamerInactive(); } From dfd87e09f95910c6ce3b0b9d955e179d6d65951f Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 2 May 2021 20:56:30 -0400 Subject: [PATCH 59/90] [LEAK-INFORMED] fix text.c "eff" fakematch --- gflib/text.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 445a7b1be0..eb993c4214 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -1632,8 +1632,7 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) if (isJapanese == TRUE) { - int eff; - glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now + glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; @@ -1761,8 +1760,7 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) if (isJapanese == TRUE) { - int eff; - glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now + glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10)); DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); gCurGlyph.width = 8; From fa23b196a96e58eaa14d996ac88a3e9b1f274a84 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 3 May 2021 18:22:44 -0400 Subject: [PATCH 60/90] [LEAK-INFORMED] fix battle_interface fakematch --- src/battle_interface.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/battle_interface.c b/src/battle_interface.c index 5518fd21bf..b309d62b06 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1099,21 +1099,14 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) u32 windowId, spriteTileNum; u8 *windowTileData; u8 text[16]; - u32 xPos, var1; - void *objVram; + u32 xPos; + u8 *objVram; text[0] = 0xF9; text[1] = 5; - xPos = (u32) ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); - // Alright, that part was unmatchable. It's basically doing: - // xPos = 5 * (3 - (u32)(&text[2])); - xPos--; - xPos--; - xPos -= ((u32)(text)); - var1 = (3 - xPos); - xPos = 4 * var1; - xPos += var1; + objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); + xPos = 5 * (3 - (objVram - (text + 2))); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; From 7740ca13038810421d787a248cf62d307c1ab1ef Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 4 May 2021 01:55:16 -0400 Subject: [PATCH 61/90] replace raw values with char constants --- src/battle_interface.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_interface.c b/src/battle_interface.c index b309d62b06..ff376f6f14 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1101,9 +1101,9 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) u8 text[16]; u32 xPos; u8 *objVram; - - text[0] = 0xF9; - text[1] = 5; + + text[0] = CHAR_EXTRA_SYMBOL; + text[1] = CHAR_LV_2; objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))); From dbc1b9aacf9790c2ee6d5e732cae697b998f98fb Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 9 May 2021 00:09:28 -0400 Subject: [PATCH 62/90] fix goto in bike.c --- src/bike.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/bike.c b/src/bike.c index bbcda989c9..62ce3cd446 100644 --- a/src/bike.c +++ b/src/bike.c @@ -614,27 +614,24 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) return; } collision = GetBikeCollision(direction); - // TODO: Try to get rid of this goto - if (collision == 0 || collision == COLLISION_WHEELIE_HOP) - { - goto derp; - } - else if (collision == COLLISION_LEDGE_JUMP) - { - PlayerLedgeHoppingWheelie(direction); - } - else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE) + if (collision && collision != COLLISION_WHEELIE_HOP) { + if (collision == COLLISION_LEDGE_JUMP) + { + PlayerLedgeHoppingWheelie(direction); + return; + } + if (collision >= COLLISION_STOP_SURFING && collision <= COLLISION_ROTATING_GATE) + { + return; + } if (collision < COLLISION_VERTICAL_RAIL) { AcroBikeTransition_WheelieHoppingStanding(direction); - } - else - { - derp: - PlayerMovingHoppingWheelie(direction); + return; } } + PlayerMovingHoppingWheelie(direction); } static void AcroBikeTransition_SideJump(u8 direction) From f0453871a2bb5a35d446b177eb6f5feaa882df42 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 9 May 2021 00:31:39 -0400 Subject: [PATCH 63/90] fix battle_dome goto --- src/battle_dome.c | 48 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/battle_dome.c b/src/battle_dome.c index a5cf168ef8..a3bf3dadfa 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -5211,40 +5211,38 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun } j = bestId; - goto LABEL; - while (j != 0) + do { - for (j = 0, k = 0; k < MAX_MON_MOVES * FRONTIER_PARTY_SIZE; k++) + for (i = 0; i < roundId - 1; i++) { - if (bestScore < moveScores[k]) - { - j = k; - bestScore = moveScores[k]; - } - else if (bestScore == moveScores[k] && moveIds[j] < moveIds[k]) - { - j = k; - } - } - if (i == roundId - 1) - break; - LABEL: - { - for (i = 0; i < roundId - 1; i++) - { - if (gSaveBlock2Ptr->frontier.domeWinningMoves[sub_81953E8(winnerTournamentId, i)] == moveIds[j]) - break; - } - if (i == roundId - 1) + if (gSaveBlock2Ptr->frontier.domeWinningMoves[sub_81953E8(winnerTournamentId, i)] == moveIds[j]) break; - + } + if (i != roundId - 1) + { moveScores[j] = 0; bestScore = 0; j = 0; for (k = 0; k < MAX_MON_MOVES * FRONTIER_PARTY_SIZE; k++) j += moveScores[k]; + if (j == 0) + break; + j = 0; + for (k = 0; k < MAX_MON_MOVES * FRONTIER_PARTY_SIZE; k++) + { + if (bestScore < moveScores[k]) + { + j = k; + bestScore = moveScores[k]; + } + else if (bestScore == moveScores[k] && moveIds[j] < moveIds[k]) // Yes, these conditions are redundant + { + j = k; + bestScore = moveScores[k]; + } + } } - } + } while (i != roundId - 1); if (moveScores[j] == 0) j = bestId; From 0c7773ad75b765ffed25050acdc528a601eff48f Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 9 May 2021 01:03:39 -0400 Subject: [PATCH 64/90] fix mystery_gift gotos --- src/mystery_gift.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 1e00a5788b..afbe50e4d2 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -558,14 +558,12 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str) { case 0: AddTextPrinterToWindow1(str); - goto inc; + (*textState)++; + break; case 1: DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); if (({JOY_NEW(A_BUTTON | B_BUTTON);})) - { - inc: (*textState)++; - } break; case 2: DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); @@ -574,7 +572,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str) return TRUE; case 0xFF: *textState = 2; - break; + return FALSE; } return FALSE; } @@ -809,8 +807,6 @@ static bool32 ValidateCardOrNews(bool32 cardOrNews) static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) { - s32 v0; - switch (*state) { case 0: @@ -827,20 +823,18 @@ static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) case 1: if (cardOrNews == 0) { - v0 = FadeToWonderCardMenu(); - check: - if (v0 != 0) + if (!FadeToWonderCardMenu()) { - goto done; + return FALSE; } - break; } else { - v0 = FadeToWonderNewsMenu(); - goto check; + if (!FadeToWonderNewsMenu()) + { + return FALSE; + } } - done: *state = 0; return TRUE; } From 3b7f708eb01b90e6adbf34245297a6188014acb9 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 9 May 2021 01:17:52 -0400 Subject: [PATCH 65/90] fix player_pc goto --- src/player_pc.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/player_pc.c b/src/player_pc.c index e5c3c5a184..a040ba5b6e 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -1245,7 +1245,6 @@ static void ItemStorage_DoItemSwap(u8 taskId, bool8 a) { s16 *data; u16 b; - u8 c; data = gTasks[taskId].data; b = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos); @@ -1253,21 +1252,17 @@ static void ItemStorage_DoItemSwap(u8 taskId, bool8 a) DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); if (!a) { - c = gUnknown_0203BCC4->unk666; - if (c != b) + if (gUnknown_0203BCC4->unk666 != b) { - if (c != b - 1) + if (gUnknown_0203BCC4->unk666 != b - 1) { - MoveItemSlotInList(gSaveBlock1Ptr->pcItems, c, b); + MoveItemSlotInList(gSaveBlock1Ptr->pcItems, gUnknown_0203BCC4->unk666, b); ItemStorage_RefreshListMenu(); } } - else - goto LABEL_SKIP_CURSOR_DECREMENT; } if (gUnknown_0203BCC4->unk666 < b) playerPCItemPageInfo.cursorPos--; - LABEL_SKIP_CURSOR_DECREMENT: SetSwapLineSpritesInvisibility(gUnknown_0203BCC4->spriteIds, 7, TRUE); gUnknown_0203BCC4->unk666 = 0xFF; data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos); From 2cc38acb8443c2c3b7da8d1e86482d25315a9880 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 9 May 2021 01:27:28 -0400 Subject: [PATCH 66/90] fix item.c gotos --- src/item.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/item.c b/src/item.c index cc9a09ee05..68907b02c0 100644 --- a/src/item.c +++ b/src/item.c @@ -280,10 +280,6 @@ bool8 AddBagItem(u16 itemId, u16 count) { // successfully added to already existing item's count SetBagItemQuantity(&newItems[i].quantity, ownedCount + count); - - // goto SUCCESS_ADD_ITEM; - // is equivalent but won't match - memcpy(itemPocket->itemSlots, newItems, itemPocket->capacity * sizeof(struct ItemSlot)); Free(newItems); return TRUE; @@ -303,7 +299,7 @@ bool8 AddBagItem(u16 itemId, u16 count) // don't create another instance of the item if it's at max slot capacity and count is equal to 0 if (count == 0) { - goto SUCCESS_ADD_ITEM; + break; } } } @@ -334,7 +330,8 @@ bool8 AddBagItem(u16 itemId, u16 count) { // created a new slot and added quantity SetBagItemQuantity(&newItems[i].quantity, count); - goto SUCCESS_ADD_ITEM; + count = 0; + break; } } } @@ -345,11 +342,9 @@ bool8 AddBagItem(u16 itemId, u16 count) return FALSE; } } - - SUCCESS_ADD_ITEM: - memcpy(itemPocket->itemSlots, newItems, itemPocket->capacity * sizeof(struct ItemSlot)); - Free(newItems); - return TRUE; + memcpy(itemPocket->itemSlots, newItems, itemPocket->capacity * sizeof(struct ItemSlot)); + Free(newItems); + return TRUE; } } From e737f1f924930e8511ac81b2e82f52c54073c1c3 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 9 May 2021 01:38:57 -0400 Subject: [PATCH 67/90] fix main_menu goto --- src/main_menu.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main_menu.c b/src/main_menu.c index 38859b8602..38e7648d01 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1387,11 +1387,9 @@ static void Task_NewGameBirchSpeechSub_WaitForLotad(u8 taskId) switch (tState) { case 0: - if (sprite->callback == SpriteCallbackDummy) - { - sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - goto incrementStateAndTimer; - } + if (sprite->callback != SpriteCallbackDummy) + return; + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; break; case 1: if (gTasks[sBirchSpeechMainTaskId].tTimer >= 96) @@ -1400,14 +1398,11 @@ static void Task_NewGameBirchSpeechSub_WaitForLotad(u8 taskId) if (gTasks[sBirchSpeechMainTaskId].tTimer < 0x4000) gTasks[sBirchSpeechMainTaskId].tTimer++; } - break; - incrementStateAndTimer: - default: - tState++; - if (gTasks[sBirchSpeechMainTaskId].tTimer < 0x4000) - gTasks[sBirchSpeechMainTaskId].tTimer++; - break; + return; } + tState++; + if (gTasks[sBirchSpeechMainTaskId].tTimer < 0x4000) + gTasks[sBirchSpeechMainTaskId].tTimer++; } #undef tState From 3a403dc520cafd2e9222ab4cd2ae850d91a5e4db Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 11 May 2021 04:53:31 -0400 Subject: [PATCH 68/90] [LEAK-INFORMED] fix do {} while (0) in apprentice --- src/apprentice.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/apprentice.c b/src/apprentice.c index f93a3e30bc..00157dc1ac 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -30,7 +30,7 @@ #include "constants/trainers.h" #include "constants/moves.h" -/* Summary of Apprentice, because (as of writing at least) its not very well documented online +/* Summary of Apprentice, because (as of writing at least) it's not very well documented online * * ## Basic info * In the Battle Tower lobby there is an NPC which asks to be taught by the player @@ -1107,17 +1107,24 @@ static void TrySetApprenticeHeldItem(void) if (PLAYER_APPRENTICE.questionsAnswered < NUM_WHICH_MON_QUESTIONS) return; - - for (count = 0, j = 0; j < APPRENTICE_MAX_QUESTIONS && PLAYER_APPRENTICE.questions[j].questionId != QUESTION_ID_WIN_SPEECH; count++, j++) - ; - - // Make sure the item hasnt already been suggested in previous questions - for (i = 0; i < count && i < CURRENT_QUESTION_NUM; i++) + + count = 0; + for (j = 0; j < APPRENTICE_MAX_QUESTIONS; j++) { - do {} while(0); - if (PLAYER_APPRENTICE.questions[i].questionId == QUESTION_ID_WHAT_ITEM - && PLAYER_APPRENTICE.questions[i].suggestedChange - && PLAYER_APPRENTICE.questions[i].data == gSpecialVar_0x8005) + if (PLAYER_APPRENTICE.questions[j].questionId == QUESTION_ID_WIN_SPEECH) + break; + count++; + } + + // Make sure the item hasn't already been suggested in previous questions + for (i = 0; i < count; i++) + { + if (i >= CURRENT_QUESTION_NUM) + break; + if (PLAYER_APPRENTICE.questions[i].questionId != QUESTION_ID_WHAT_ITEM || + PLAYER_APPRENTICE.questions[i].suggestedChange == 0) + continue; + if (PLAYER_APPRENTICE.questions[i].data == gSpecialVar_0x8005) { PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].suggestedChange = FALSE; PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data = gSpecialVar_0x8005; From 7061e662129f453de031c5c1904663509b327720 Mon Sep 17 00:00:00 2001 From: SatoMew Date: Thu, 13 May 2021 19:49:15 +0100 Subject: [PATCH 69/90] Undo secondary changes --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1dbde694b1..7adbb3e2da 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,10 @@ This is a decompilation of Pokémon Emerald. It builds the following ROM: -* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) (SHA-1 hash: `f3ae088181bf583e55daf962a92bb46f4f1d07b7`) +* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) `sha1: f3ae088181bf583e55daf962a92bb46f4f1d07b7` To set up the repository, see [INSTALL.md](INSTALL.md). -If you need any help, feel free to ask on the #gen-3-help channel of our [Discord](https://discord.gg/d5dubZ3), or on our [IRC server](https://kiwiirc.com/client/irc.freenode.net/?#pret). - ## See also @@ -26,3 +24,8 @@ Other disassembly and/or decompilation projects: * [**Pokémon Pinball: Ruby & Sapphire**](https://github.com/pret/pokepinballrs) * [**Pokémon FireRed and LeafGreen**](https://github.com/pret/pokefirered) * [**Pokémon Mystery Dungeon: Red Rescue Team**](https://github.com/pret/pmd-red) + + +## Contacts + +You can find us on [Discord](https://discord.gg/d5dubZ3) and [IRC](https://kiwiirc.com/client/irc.freenode.net/?#pret). From ab8318cc79de60413085b104125490cbae344169 Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Fri, 14 May 2021 13:41:22 -0400 Subject: [PATCH 70/90] Fix UB: Destoyed task is modified. After destruction, task is no longer used, so updating its values is worthless. --- src/battle_transition.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle_transition.c b/src/battle_transition.c index 1b484f7c50..479700e53f 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -4328,7 +4328,10 @@ static bool8 Phase2_FrontierSquaresScroll_Func5(struct Task *task) BlendPalettes(PALETTES_ALL, 0x10, 0); DestroyTask(FindTaskIdByFunc(task->func)); + +#ifndef UBFIX task->tState++; // UB: changing value of a destroyed task +#endif return FALSE; } From 361fa594b30005edaa8aef5f6b02ac8b15149cba Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Sat, 15 May 2021 15:56:17 -0500 Subject: [PATCH 71/90] Various BUGFIXes and UBFIXes --- src/battle_ai_script_commands.c | 7 ++++++- src/battle_anim_sound_tasks.c | 8 ++++++-- src/battle_dome.c | 11 ++++++++++- src/battle_factory_screen.c | 5 +++++ src/battle_pyramid.c | 6 +++++- src/egg_hatch.c | 3 +++ src/item.c | 1 - src/roulette.c | 4 +++- src/siirtc.c | 5 ++++- src/union_room.c | 7 ++++++- 10 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 9fdd4d0c38..81e7c15cc7 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1877,9 +1877,14 @@ static void Cmd_if_has_move_with_effect(void) case AI_TARGET_PARTNER: for (i = 0; i < MAX_MON_MOVES; i++) { - // UB: checks sBattler_AI instead of gBattlerTarget. + // BUG: checks sBattler_AI instead of gBattlerTarget. + #ifndef BUGFIX if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2]) break; + #else + if (gBattleMons[gBattlerTarget].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2]) + break; + #endif } if (i == MAX_MON_MOVES) gAIScriptPtr += 7; diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 8fc93c3aa9..39d6729e8d 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -135,8 +135,10 @@ void SoundTask_PlayCryHighPitch(u8 taskId) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) species = gContestResources->moveAnim->species; + #ifndef UBFIX else - DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task. + DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice. + #endif } else { @@ -179,8 +181,10 @@ void SoundTask_PlayDoubleCry(u8 taskId) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) species = gContestResources->moveAnim->species; + #ifndef UBFIX else - DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task. + DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice. + #endif } else { diff --git a/src/battle_dome.c b/src/battle_dome.c index a3bf3dadfa..59e418a065 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2766,13 +2766,22 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) } if (TYPE_EFFECT_ATK_TYPE(i) == moveType) { - // BUG: TYPE_x2 is not necessary and makes the condition always false if the ability is wonder guard. + // BUG: the value of TYPE_x2 does not exist in gTypeEffectiveness, so if defAbility is ABILITY_WONDER_GUARD, the conditional always fails + #ifndef BUGFIX if (TYPE_EFFECT_DEF_TYPE(i) == defType1) if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + #else + if (TYPE_EFFECT_DEF_TYPE(i) == defType1) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + #endif } i += 3; } diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 680c6e81c0..db810e965b 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -4221,12 +4221,17 @@ static void Task_OpenMonPic(u8 taskId) return; break; default: + #ifndef UBFIX DestroyTask(taskId); + #endif // UB: Should not use the task after it has been deleted. if (gTasks[taskId].tIsSwapScreen == TRUE) Swap_CreateMonSprite(); else Select_CreateMonSprite(); + #ifdef UBFIX + DestroyTask(taskId); + #endif return; } task->tState++; diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index a41a80bbb3..8eb09bb8da 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -1399,8 +1399,12 @@ void GenerateBattlePyramidWildMon(void) for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(&gEnemyParty[0], wildMons[id].moves[i], i); - // BUG: Reading outside the array as lvl was used for mon level instead of frontier lvl mode. + // UB: Reading outside the array as lvl was used for mon level instead of frontier lvl mode. + #ifndef UBFIX if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] >= 140) + #else + if (gSaveBlock2Ptr->frontier.pyramidWinStreas[gSaveBlock2Ptr->frontier.lvlMode] >= 140) + #endif { id = (Random() % 17) + 15; for (i = 0; i < NUM_STATS; i++) diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 7a3019f56c..576e5c0d9f 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -584,6 +584,9 @@ static void Task_EggHatchPlayBGM(u8 taskID) PlayBGM(MUS_EVOLUTION); DestroyTask(taskID); // UB: task is destroyed, yet the value is incremented + #ifdef UBFIX + return; + #endif } gTasks[taskID].data[0]++; } diff --git a/src/item.c b/src/item.c index 68907b02c0..1560342629 100644 --- a/src/item.c +++ b/src/item.c @@ -548,7 +548,6 @@ bool8 AddPCItem(u16 itemId, u16 count) void RemovePCItem(u8 index, u16 count) { - // UB: should use GetPCItemQuantity and SetPCItemQuantity functions gSaveBlock1Ptr->pcItems[index].quantity -= count; if (gSaveBlock1Ptr->pcItems[index].quantity == 0) { diff --git a/src/roulette.c b/src/roulette.c index 1ea69dc2e9..adde161991 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -2896,7 +2896,9 @@ static const union AnimCmd sAnim_CreditDigit[] = ANIMCMD_FRAME(18, 0), // 9 // BUG: Animation not terminated properly // Doesn't matter in practice, the frames are set directly and not looped - //ANIMCMD_END +#ifdef BUGFIX + ANIMCMD_END +#endif }; static const union AnimCmd *const sAnims_CreditDigit[] = diff --git a/src/siirtc.c b/src/siirtc.c index 5c153a8413..01d2e0e723 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -417,6 +417,9 @@ static u8 ReadData() u8 i; u8 temp; u8 value; + #ifdef UBFIX + value = 0; + #endif for (i = 0; i < 8; i++) { @@ -428,7 +431,7 @@ static u8 ReadData() GPIO_PORT_DATA = SCK_HI | CS_HI; temp = ((GPIO_PORT_DATA & SIO_HI) >> 1); - value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var + value = (value >> 1) | (temp << 7); // UB: value is uninitialized on first iteration } return value; diff --git a/src/union_room.c b/src/union_room.c index f41cfd45f3..bd6b303b92 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -319,8 +319,13 @@ static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId) case ACTIVITY_CONTEST_CUTE: case ACTIVITY_CONTEST_SMART: case ACTIVITY_CONTEST_TOUGH: - // UB: argument *dst isn't used, instead it always prints to gStringVar4 + // BUG: argument *dst isn't used, instead it always prints to gStringVar4 + // not an issue in practice since Gamefreak never used any other arguments here besides gStringVar4 + #ifndef BUGFIX StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication); + #else + StringExpandPlaceholders(dst, sText_AwaitingCommunication); + #endif break; } } From a7e3da2301aa7913f2437fe2152efcec6e96faef Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Sat, 15 May 2021 15:59:54 -0500 Subject: [PATCH 72/90] pyramidWinStreas --- src/battle_pyramid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 8eb09bb8da..50efeecb4d 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -1403,7 +1403,7 @@ void GenerateBattlePyramidWildMon(void) #ifndef UBFIX if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] >= 140) #else - if (gSaveBlock2Ptr->frontier.pyramidWinStreas[gSaveBlock2Ptr->frontier.lvlMode] >= 140) + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[gSaveBlock2Ptr->frontier.lvlMode] >= 140) #endif { id = (Random() % 17) + 15; From 76b99e66dcc4fc977e477f68313bb5636ba8ad62 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Sun, 16 May 2021 20:46:58 -0400 Subject: [PATCH 73/90] Added missing Treecko from animation list. --- src/pokemon.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pokemon.c b/src/pokemon.c index b4eb6f01af..28b4022165 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1642,6 +1642,7 @@ static const u8 sMonFrontAnimIdsTable[] = [SPECIES_LUGIA - 1] = ANIM_GROW_IN_STAGES, [SPECIES_HO_OH - 1] = ANIM_GROW_VIBRATE, [SPECIES_CELEBI - 1] = ANIM_RISING_WOBBLE, + [SPECIES_TREECKO - 1] = ANIM_V_SQUISH_AND_BOUNCE, [SPECIES_GROVYLE - 1] = ANIM_V_STRETCH, [SPECIES_SCEPTILE - 1] = ANIM_V_SHAKE, [SPECIES_TORCHIC - 1] = ANIM_H_STRETCH, From c8be6a1fbba64edb8bb807f772135e927aa288a9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 17 May 2021 03:06:02 -0400 Subject: [PATCH 74/90] Remove leftover berry descriptions --- data/text/berry_descriptions.inc | 258 ------------------------------- 1 file changed, 258 deletions(-) delete mode 100644 data/text/berry_descriptions.inc diff --git a/data/text/berry_descriptions.inc b/data/text/berry_descriptions.inc deleted file mode 100644 index e5917ca32b..0000000000 --- a/data/text/berry_descriptions.inc +++ /dev/null @@ -1,258 +0,0 @@ -gBerryDescriptionPart1_Cheri:: @ 8589AE4 - .string "Blooms with delicate pretty flowers.$" - -gBerryDescriptionPart2_Cheri:: @ 8589B09 - .string "The bright red BERRY is very spicy.$" - -gBerryDescriptionPart1_Chesto:: @ 8589B2D - .string "The BERRY's thick skin and fruit are$" - -gBerryDescriptionPart2_Chesto:: @ 8589B52 - .string "very tough. It is dry-tasting all over.$" - -gBerryDescriptionPart1_Pecha:: @ 8589B7A - .string "Very sweet and delicious.$" - -gBerryDescriptionPart2_Pecha:: @ 8589B94 - .string "Also very tender - handle with care.$" - -gBerryDescriptionPart1_Rawst:: @ 8589BB9 - .string "If the leaves grow long and curly,$" - -gBerryDescriptionPart2_Rawst:: @ 8589BDC - .string "the BERRY seems to grow very bitter.$" - -gBerryDescriptionPart1_Aspear:: @ 8589C01 - .string "The hard BERRY is dense with a rich$" - -gBerryDescriptionPart2_Aspear:: @ 8589C25 - .string "juice. It is quite sour.$" - -gBerryDescriptionPart1_Leppa:: @ 8589C3E - .string "Grows slower than CHERI and others.$" - -gBerryDescriptionPart2_Leppa:: @ 8589C62 - .string "The smaller the BERRY, the tastier.$" - -gBerryDescriptionPart1_Oran:: @ 8589C86 - .string "A peculiar BERRY with a mix of flavors.$" - -gBerryDescriptionPart2_Oran:: @ 8589CAE - .string "BERRIES grow in half a day.$" - -gBerryDescriptionPart1_Persim:: @ 8589CCA - .string "Loves sunlight. The BERRY's color$" - -gBerryDescriptionPart2_Persim:: @ 8589CEC - .string "grows vivid when exposed to the sun.$" - -gBerryDescriptionPart1_Lum:: @ 8589D11 - .string "Slow to grow. If raised with loving$" - -gBerryDescriptionPart2_Lum:: @ 8589D35 - .string "care, it may grow two BERRIES.$" - -gBerryDescriptionPart1_Sitrus:: @ 8589D54 - .string "Closely related to ORAN. The large$" - -gBerryDescriptionPart2_Sitrus:: @ 8589D77 - .string "BERRY has a well-rounded flavor.$" - -gBerryDescriptionPart1_Figy:: @ 8589D98 - .string "The BERRY, which looks chewed up,$" - -gBerryDescriptionPart2_Figy:: @ 8589DBA - .string "brims with spicy substances.$" - -gBerryDescriptionPart1_Wiki:: @ 8589DD7 - .string "The BERRY is said to have grown lumpy$" - -gBerryDescriptionPart2_Wiki:: @ 8589DFD - .string "to help POKéMON grip it.$" - -gBerryDescriptionPart1_Mago:: @ 8589E16 - .string "The BERRY turns curvy as it grows.$" - -gBerryDescriptionPart2_Mago:: @ 8589E39 - .string "The curvier, the sweeter and tastier.$" - -gBerryDescriptionPart1_Aguav:: @ 8589E5F - .string "The flower is dainty. It is rare in its$" - -gBerryDescriptionPart2_Aguav:: @ 8589E87 - .string "ability to grow without light.$" - -gBerryDescriptionPart1_Iapapa:: @ 8589EA6 - .string "The BERRY is very big and sour.$" - -gBerryDescriptionPart2_Iapapa:: @ 8589EC6 - .string "It takes at least a day to grow.$" - -gBerryDescriptionPart1_Razz:: @ 8589EE7 - .string "The red BERRY tastes slightly spicy.$" - -gBerryDescriptionPart2_Razz:: @ 8589F0C - .string "It grows quickly in just four hours.$" - -gBerryDescriptionPart1_Bluk:: @ 8589F31 - .string "The BERRY is blue on the outside, but$" - -gBerryDescriptionPart2_Bluk:: @ 8589F57 - .string "it blackens the mouth when eaten.$" - -gBerryDescriptionPart1_Nanab:: @ 8589F79 - .string "This BERRY was the seventh$" - -gBerryDescriptionPart2_Nanab:: @ 8589F94 - .string "discovered in the world. It is sweet.$" - -gBerryDescriptionPart1_Wepear:: @ 8589FBA - .string "The flower is small and white. It has a$" - -gBerryDescriptionPart2_Wepear:: @ 8589FE2 - .string "delicate balance of bitter and sour.$" - -gBerryDescriptionPart1_Pinap:: @ 858A007 - .string "Weak against wind and cold.$" - -gBerryDescriptionPart2_Pinap:: @ 858A023 - .string "The fruit is spicy and the skin, sour.$" - -gBerryDescriptionPart1_Pomeg:: @ 858A04A - .string "However much it is watered,$" - -gBerryDescriptionPart2_Pomeg:: @ 858A066 - .string "it only grows up to six BERRIES.$" - -gBerryDescriptionPart1_Kelpsy:: @ 858A087 - .string "A rare variety shaped like a root.$" - -gBerryDescriptionPart2_Kelpsy:: @ 858A0AA - .string "Grows a very large flower.$" - -gBerryDescriptionPart1_Qualot:: @ 858A0C5 - .string "Loves water. Grows strong even in$" - -gBerryDescriptionPart2_Qualot:: @ 858A0E7 - .string "locations with constant rainfall.$" - -gBerryDescriptionPart1_Hondew:: @ 858A109 - .string "A BERRY that is very valuable and$" - -gBerryDescriptionPart2_Hondew:: @ 858A12B - .string "rarely seen. It is very delicious.$" - -gBerryDescriptionPart1_Grepa:: @ 858A14E - .string "Despite its tenderness and round$" - -gBerryDescriptionPart2_Grepa:: @ 858A16F - .string "shape, the BERRY is unimaginably sour.$" - -gBerryDescriptionPart1_Tamato:: @ 858A196 - .string "The BERRY is lip-bendingly spicy.$" - -gBerryDescriptionPart2_Tamato:: @ 858A1B8 - .string "It takes time to grow.$" - -gBerryDescriptionPart1_Cornn:: @ 858A1CF - .string "A BERRY from an ancient era. May not$" - -gBerryDescriptionPart2_Cornn:: @ 858A1F4 - .string "grow unless planted in quantity.$" - -gBerryDescriptionPart1_Magost:: @ 858A215 - .string "A BERRY that is widely said to have$" - -gBerryDescriptionPart2_Magost:: @ 858A239 - .string "a finely balanced flavor.$" - -gBerryDescriptionPart1_Rabuta:: @ 858A253 - .string "A rare variety that is overgrown with$" - -gBerryDescriptionPart2_Rabuta:: @ 858A279 - .string "hair. It is quite bitter.$" - -gBerryDescriptionPart1_Nomel:: @ 858A293 - .string "Quite sour. Just one bite makes it$" - -gBerryDescriptionPart2_Nomel:: @ 858A2B6 - .string "impossible to taste for three days.$" - -gBerryDescriptionPart1_Spelon:: @ 858A2DA - .string "The vividly red BERRY is very spicy.$" - -gBerryDescriptionPart2_Spelon:: @ 858A2FF - .string "Its warts secrete a spicy substance.$" - -gBerryDescriptionPart1_Pamtre:: @ 858A324 - .string "Drifts on the sea from somewhere.$" - -gBerryDescriptionPart2_Pamtre:: @ 858A346 - .string "It is thought to grow elsewhere.$" - -gBerryDescriptionPart1_Watmel:: @ 858A367 - .string "A huge BERRY, with some over 20$" - -gBerryDescriptionPart2_Watmel:: @ 858A387 - .string "inches discovered. Exceedingly sweet.$" - -gBerryDescriptionPart1_Durin:: @ 858A3AD - .string "Bitter to even look at. It is so$" - -gBerryDescriptionPart2_Durin:: @ 858A3CE - .string "bitter, no one has ever eaten it as is.$" - -gBerryDescriptionPart1_Belue:: @ 858A3F6 - .string "It is glossy and looks delicious, but$" - -gBerryDescriptionPart2_Belue:: @ 858A41C - .string "it is awfully sour. Takes time to grow.$" - -gBerryDescriptionPart1_Liechi:: @ 858A444 - .string "A mysterious BERRY. It is rumored to$" - -gBerryDescriptionPart2_Liechi:: @ 858A469 - .string "contain the power of the sea.$" - -gBerryDescriptionPart1_Ganlon:: @ 858A487 - .string "A mysterious BERRY. It is rumored to$" - -gBerryDescriptionPart2_Ganlon:: @ 858A4AC - .string "contain the power of the land.$" - -gBerryDescriptionPart1_Salac:: @ 858A4CB - .string "A mysterious BERRY. It is rumored to$" - -gBerryDescriptionPart2_Salac:: @ 858A4F0 - .string "contain the power of the sky.$" - -gBerryDescriptionPart1_Petaya:: @ 858A50E - .string "A mysterious BERRY. It is rumored to$" - -gBerryDescriptionPart2_Petaya:: @ 858A533 - .string "contain the power of all living things.$" - -gBerryDescriptionPart1_Apicot:: @ 858A55B - .string "A very mystifying BERRY. No telling$" - -gBerryDescriptionPart2_Apicot:: @ 858A57F - .string "what may happen or how it can be used.$" - -gBerryDescriptionPart1_Lansat:: @ 858A5A6 - .string "Said to be a legendary BERRY.$" - -gBerryDescriptionPart2_Lansat:: @ 858A5C4 - .string "Holding it supposedly brings joy.$" - -gBerryDescriptionPart1_Starf:: @ 858A5E6 - .string "So strong, it was abandoned at the$" - -gBerryDescriptionPart2_Starf:: @ 858A609 - .string "world's edge. Considered a mirage.$" - -gBerryDescriptionPart1_Enigma:: @ 858A62C - .string "A completely enigmatic BERRY.$" - -gBerryDescriptionPart2_Enigma:: @ 858A64A - .string "Appears to have the power of stars.$" - From 6a977bdbfccfa27433abdafede36f434184809bb Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Fri, 21 May 2021 15:08:00 -0500 Subject: [PATCH 75/90] Document second parameter of playbgm --- asm/macros/event.inc | 7 ++++--- data/event_scripts.s | 2 +- data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc | 2 +- data/maps/BattleFrontier_BattlePyramidTop/scripts.inc | 6 +++--- data/maps/BirthIsland_Exterior/scripts.inc | 2 +- data/maps/EverGrandeCity_ChampionsRoom/scripts.inc | 6 +++--- data/maps/EverGrandeCity_DrakesRoom/scripts.inc | 2 +- data/maps/EverGrandeCity_GlaciasRoom/scripts.inc | 2 +- data/maps/EverGrandeCity_PhoebesRoom/scripts.inc | 2 +- data/maps/EverGrandeCity_SidneysRoom/scripts.inc | 2 +- data/maps/LavaridgeTown/scripts.inc | 4 ++-- data/maps/LilycoveCity/scripts.inc | 4 ++-- data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc | 2 +- data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc | 2 +- data/maps/LittlerootTown_MaysHouse_1F/scripts.inc | 2 +- data/maps/LittlerootTown_MaysHouse_2F/scripts.inc | 2 +- data/maps/MagmaHideout_4F/scripts.inc | 2 +- data/maps/MeteorFalls_1F_1R/scripts.inc | 4 ++-- data/maps/MtChimney/scripts.inc | 2 +- data/maps/MtPyre_Summit/scripts.inc | 2 +- data/maps/OldaleTown/scripts.inc | 2 +- data/maps/PetalburgCity/scripts.inc | 2 +- data/maps/PetalburgCity_Gym/scripts.inc | 4 ++-- data/maps/PetalburgWoods/scripts.inc | 4 ++-- data/maps/Route101/scripts.inc | 2 +- data/maps/Route103/scripts.inc | 4 ++-- data/maps/Route104/scripts.inc | 4 ++-- data/maps/Route110/scripts.inc | 4 ++-- data/maps/Route119/scripts.inc | 4 ++-- data/maps/Route121/scripts.inc | 2 +- data/maps/RustboroCity/scripts.inc | 6 +++--- data/maps/RustboroCity_DevonCorp_3F/scripts.inc | 2 +- data/maps/RusturfTunnel/scripts.inc | 2 +- data/maps/SeafloorCavern_Room9/scripts.inc | 2 +- data/maps/SlateportCity/scripts.inc | 2 +- data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc | 2 +- data/scripts/contest_hall.inc | 2 +- data/scripts/players_house.inc | 4 ++-- 38 files changed, 57 insertions(+), 56 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index f3f17c5d8b..915fc71427 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -345,11 +345,12 @@ .byte 0x32 .endm - @ Plays the specified (song_number) song. The byte is apparently supposed to be 0x00. - .macro playbgm song_number:req, unknown:req + @ Plays the specified (song_number) song. If save_song is TRUE, the + @ specified (song_number) will be saved as if savebgm was called with it. + .macro playbgm song_number:req, save_song:req .byte 0x33 .2byte \song_number - .byte \unknown + .byte \save_song .endm @ Saves the specified (song_number) song to be played later. diff --git a/data/event_scripts.s b/data/event_scripts.s index 8039be6876..432f1294d9 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -736,7 +736,7 @@ EventScript_RegionMap:: @ 827208F Common_EventScript_PlayBrineysBoatMusic:: @ 82720A0 setflag FLAG_DONT_TRANSITION_MUSIC - playbgm MUS_SAILING, 0 + playbgm MUS_SAILING, FALSE return Common_EventScript_StopBrineysBoatMusic:: @ 82720A8 diff --git a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc index 4f378c4e57..e63e27e4e2 100644 --- a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc @@ -33,7 +33,7 @@ BattleFrontier_BattlePyramidFloor_EventScript_ShowMapName:: @ 8252A8F end BattleFrontier_BattlePyramidFloor_EventScript_PlayPyramidMusic:: @ 8252A98 - playbgm MUS_B_PYRAMID, 0 + playbgm MUS_B_PYRAMID, FALSE setvar VAR_TEMP_E, 1 end diff --git a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc index 076fae158e..568424083d 100644 --- a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc @@ -53,7 +53,7 @@ BattleFrontier_BattlePyramidTop_OnFrame: @ 825516E .2byte 0 BattleFrontier_BattlePyramidTop_EventScript_PlayPyramidMusic:: @ 8255180 - playbgm MUS_B_PYRAMID_TOP, 0 + playbgm MUS_B_PYRAMID_TOP, FALSE setvar VAR_TEMP_E, 1 end @@ -136,7 +136,7 @@ BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardSilverSpeech:: @ 82552D0 BattleFrontier_BattlePyramidTop_EventScript_BattleBrandonSilver:: @ 82552DA msgbox BattleFrontier_BattlePyramidTop_Text_BringCourageToOurBattle, MSGBOX_DEFAULT call BattleFrontier_BattlePyramidTop_EventScript_DoBrandonBattle - playbgm MUS_B_PYRAMID_TOP, 0 + playbgm MUS_B_PYRAMID_TOP, FALSE compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonSilver goto BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost @@ -176,7 +176,7 @@ BattleFrontier_BattlePyramidTop_EventScript_BrandonHeardGoldSpeech:: @ 8255388 BattleFrontier_BattlePyramidTop_EventScript_BattleBrandonGold:: @ 8255392 msgbox BattleFrontier_BattlePyramidTop_Text_EverythingYouHave, MSGBOX_DEFAULT call BattleFrontier_BattlePyramidTop_EventScript_DoBrandonBattle - playbgm MUS_B_PYRAMID_TOP, 0 + playbgm MUS_B_PYRAMID_TOP, FALSE compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_DefeatedBrandonGold goto BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index c20de37982..5871709ac5 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -72,7 +72,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: @ 8267FC1 setfieldeffectargument 1, 58 setfieldeffectargument 2, 26 dofieldeffect FLDEFF_DESTROY_DEOXYS_ROCK - playbgm MUS_RG_ENCOUNTER_DEOXYS, 0 + playbgm MUS_RG_ENCOUNTER_DEOXYS, FALSE waitfieldeffect FLDEFF_DESTROY_DEOXYS_ROCK addobject LOCALID_DEOXYS applymovement LOCALID_DEOXYS, BirthIsland_Exterior_Movement_DeoxysApproach diff --git a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc index d41c10d0a0..7b75c87525 100644 --- a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc +++ b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc @@ -42,7 +42,7 @@ EverGrandeCity_ChampionsRoom_Movement_PlayerApproachWallace: @ 8228A42 step_end EverGrandeCity_ChampionsRoom_EventScript_Wallace:: @ 8228A45 - playbgm MUS_ENCOUNTER_CHAMPION, 0 + playbgm MUS_ENCOUNTER_CHAMPION, FALSE msgbox EverGrandeCity_ChampionsRoom_Text_IntroSpeech, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_WALLACE, EverGrandeCity_ChampionsRoom_Text_Defeat goto EverGrandeCity_ChampionsRoom_EventScript_Defeated @@ -71,11 +71,11 @@ EverGrandeCity_ChampionsRoom_EventScript_Defeated:: @ 8228A61 end EverGrandeCity_ChampionsRoom_EventScript_PlayMayMusic:: @ 8228ABC - playbgm MUS_ENCOUNTER_MAY, 0 + playbgm MUS_ENCOUNTER_MAY, FALSE return EverGrandeCity_ChampionsRoom_EventScript_PlayBrendanMusic:: @ 8228AC1 - playbgm MUS_ENCOUNTER_BRENDAN, 0 + playbgm MUS_ENCOUNTER_BRENDAN, FALSE return EverGrandeCity_ChampionsRoom_EventScript_MayAdvice:: @ 8228AC6 diff --git a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc index feb65d149a..38762277fa 100644 --- a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc +++ b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc @@ -42,7 +42,7 @@ EverGrandeCity_DrakesRoom_EventScript_Drake:: @ 82286F3 lock faceplayer goto_if_set FLAG_DEFEATED_ELITE_4_DRAKE, EverGrandeCity_DrakesRoom_EventScript_PostBattleSpeech - playbgm MUS_ENCOUNTER_ELITE_FOUR, 0 + playbgm MUS_ENCOUNTER_ELITE_FOUR, FALSE msgbox EverGrandeCity_DrakesRoom_Text_IntroSpeech, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_DRAKE, EverGrandeCity_DrakesRoom_Text_Defeat goto EverGrandeCity_DrakesRoom_EventScript_Defeated diff --git a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc index ff04a752ab..3529b746cb 100644 --- a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc +++ b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc @@ -41,7 +41,7 @@ EverGrandeCity_GlaciasRoom_EventScript_Glacia:: @ 8228469 lock faceplayer goto_if_set FLAG_DEFEATED_ELITE_4_GLACIA, EverGrandeCity_GlaciasRoom_EventScript_PostBattleSpeech - playbgm MUS_ENCOUNTER_ELITE_FOUR, 0 + playbgm MUS_ENCOUNTER_ELITE_FOUR, FALSE msgbox EverGrandeCity_GlaciasRoom_Text_IntroSpeech, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_GLACIA, EverGrandeCity_GlaciasRoom_Text_Defeat goto EverGrandeCity_GlaciasRoom_EventScript_Defeated diff --git a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc index e98bf4eb36..c922ffe7a5 100644 --- a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc +++ b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc @@ -41,7 +41,7 @@ EverGrandeCity_PhoebesRoom_EventScript_Phoebe:: @ 82281CB lock faceplayer goto_if_set FLAG_DEFEATED_ELITE_4_PHOEBE, EverGrandeCity_PhoebesRoom_EventScript_PostBattleSpeech - playbgm MUS_ENCOUNTER_ELITE_FOUR, 0 + playbgm MUS_ENCOUNTER_ELITE_FOUR, FALSE msgbox EverGrandeCity_PhoebesRoom_Text_IntroSpeech, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_PHOEBE, EverGrandeCity_PhoebesRoom_Text_Defeat goto EverGrandeCity_PhoebesRoom_EventScript_Defeated diff --git a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc index 717651b262..4cd8f262e7 100644 --- a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc +++ b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc @@ -47,7 +47,7 @@ EverGrandeCity_SidneysRoom_EventScript_Sidney:: @ 8227F64 lock faceplayer goto_if_set FLAG_DEFEATED_ELITE_4_SIDNEY, EverGrandeCity_SidneysRoom_EventScript_PostBattleSpeech - playbgm MUS_ENCOUNTER_ELITE_FOUR, 0 + playbgm MUS_ENCOUNTER_ELITE_FOUR, FALSE msgbox EverGrandeCity_SidneysRoom_Text_IntroSpeech, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_SIDNEY, EverGrandeCity_SidneysRoom_Text_Defeat goto EverGrandeCity_SidneysRoom_EventScript_Defeated diff --git a/data/maps/LavaridgeTown/scripts.inc b/data/maps/LavaridgeTown/scripts.inc index 1f9fe421d6..59275c526d 100644 --- a/data/maps/LavaridgeTown/scripts.inc +++ b/data/maps/LavaridgeTown/scripts.inc @@ -105,11 +105,11 @@ LavaridgeTown_EventScript_RivalExit:: @ 81EA5FF end LavaridgeTown_EventScript_PlayMayMusic:: @ 81EA630 - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE return LavaridgeTown_EventScript_PlayBrendanMusic:: @ 81EA635 - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE return LavaridgeTown_EventScript_RivalNoticePlayer:: @ 81EA63A diff --git a/data/maps/LilycoveCity/scripts.inc b/data/maps/LilycoveCity/scripts.inc index d549423863..b5748ef606 100644 --- a/data/maps/LilycoveCity/scripts.inc +++ b/data/maps/LilycoveCity/scripts.inc @@ -241,7 +241,7 @@ LilycoveCity_EventScript_Rival:: @ 81E2DDE end LilycoveCity_EventScript_May:: @ 81E2DF8 - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE call_if_set FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_MayAskToBattleAgain call_if_unset FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_MayAskToBattle compare VAR_RESULT, NO @@ -270,7 +270,7 @@ LilycoveCity_EventScript_DeclineMayBattle:: @ 81E2E5A end LilycoveCity_EventScript_Brendan:: @ 81E2E6B - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE call_if_set FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_BrendanAskToBattleAgain call_if_unset FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE, LilycoveCity_EventScript_BrendanAskToBattle compare VAR_RESULT, NO diff --git a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc index ee677fbff8..4b5679ad9e 100644 --- a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc @@ -158,7 +158,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_MeetRival:: @ 81F78E2 waitmovement 0 compare VAR_0x8008, 1 call_if_ne LittlerootTown_BrendansHouse_1F_EventScript_PlayerFaceBrendan - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE compare VAR_0x8008, 0 call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_BrendanApproachPlayer0 compare VAR_0x8008, 1 diff --git a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc index ab6f55af5d..6cfeea7e4f 100644 --- a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc @@ -74,7 +74,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendan:: @ 81F8497 applymovement LOCALID_RIVAL, Common_Movement_Delay48 waitmovement 0 delay 10 - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE compare VAR_FACING, DIR_NORTH call_if_eq LittlerootTown_BrendansHouse_2F_EventScript_MeetBrendanNorth compare VAR_FACING, DIR_SOUTH diff --git a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc index 1e1bb0e119..f1df425b74 100644 --- a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc @@ -192,7 +192,7 @@ LittlerootTown_MaysHouse_1F_EventScript_MeetRival:: @ 81F8A8B waitmovement 0 compare VAR_0x8008, 1 call_if_ne LittlerootTown_MaysHouse_1F_EventScript_PlayerFaceMay - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE compare VAR_0x8008, 0 call_if_eq LittlerootTown_MaysHouse_1F_EventScript_MayApproachPlayer0 compare VAR_0x8008, 1 diff --git a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc index dd22ed670b..a0583841cf 100644 --- a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc @@ -74,7 +74,7 @@ LittlerootTown_MaysHouse_2F_EventScript_MeetMay:: @ 81F934A applymovement LOCALID_RIVAL, Common_Movement_Delay48 waitmovement 0 delay 10 - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE compare VAR_FACING, DIR_NORTH call_if_eq LittlerootTown_MaysHouse_2F_EventScript_MeetMayNorth compare VAR_FACING, DIR_SOUTH diff --git a/data/maps/MagmaHideout_4F/scripts.inc b/data/maps/MagmaHideout_4F/scripts.inc index 50382f44e3..199e3c1bca 100644 --- a/data/maps/MagmaHideout_4F/scripts.inc +++ b/data/maps/MagmaHideout_4F/scripts.inc @@ -11,7 +11,7 @@ MagmaHideout_4F_MapScripts:: @ 823A55F MagmaHideout_4F_EventScript_Maxie:: @ 823A560 lockall - playbgm MUS_ENCOUNTER_MAGMA, 0 + playbgm MUS_ENCOUNTER_MAGMA, FALSE msgbox MagmaHideout_4F_Text_MaxieAwakenGroudon, MSGBOX_DEFAULT closemessage delay 20 diff --git a/data/maps/MeteorFalls_1F_1R/scripts.inc b/data/maps/MeteorFalls_1F_1R/scripts.inc index c942e230ec..8202267b92 100644 --- a/data/maps/MeteorFalls_1F_1R/scripts.inc +++ b/data/maps/MeteorFalls_1F_1R/scripts.inc @@ -21,7 +21,7 @@ MeteorFalls_1F_1R_EventScript_OpenStevensCave:: @ 822BD3A MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: @ 822BD5F lockall - playbgm MUS_ENCOUNTER_MAGMA, 0 + playbgm MUS_ENCOUNTER_MAGMA, FALSE applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceDown waitmovement 0 delay 30 @@ -50,7 +50,7 @@ MeteorFalls_1F_1R_EventScript_MagmaStealsMeteoriteScene:: @ 822BD5F addobject LOCALID_ARCHIE addobject LOCALID_AQUA_GRUNT_1 addobject LOCALID_AQUA_GRUNT_2 - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE applymovement LOCALID_ARCHIE, MeteorFalls_1F_1R_Movement_ArchieArrive applymovement LOCALID_AQUA_GRUNT_1, MeteorFalls_1F_1R_Movement_AquaGrunt1Arrive applymovement LOCALID_AQUA_GRUNT_2, MeteorFalls_1F_1R_Movement_AquaGrunt2Arrive diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc index c633d93135..061590e1ae 100644 --- a/data/maps/MtChimney/scripts.inc +++ b/data/maps/MtChimney/scripts.inc @@ -40,7 +40,7 @@ MtChimney_EventScript_ArchieBusyFighting:: @ 822EE02 MtChimney_EventScript_Maxie:: @ 822EE0B lockall - playbgm MUS_ENCOUNTER_MAGMA, 0 + playbgm MUS_ENCOUNTER_MAGMA, FALSE msgbox MtChimney_Text_MeteoriteWillActivateVolcano, MSGBOX_DEFAULT applymovement LOCALID_MAXIE, Common_Movement_FacePlayer waitmovement 0 diff --git a/data/maps/MtPyre_Summit/scripts.inc b/data/maps/MtPyre_Summit/scripts.inc index c2692ff20d..e899c3471c 100644 --- a/data/maps/MtPyre_Summit/scripts.inc +++ b/data/maps/MtPyre_Summit/scripts.inc @@ -39,7 +39,7 @@ MtPyre_Summit_EventScript_TeamAquaTrigger2:: @ 8232030 end MtPyre_Summit_EventScript_TeamAquaExits:: @ 823203C - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceUp waitmovement 0 applymovement LOCALID_ARCHIE, Common_Movement_WalkInPlaceFastestDown diff --git a/data/maps/OldaleTown/scripts.inc b/data/maps/OldaleTown/scripts.inc index f99c65d2c0..5932153572 100644 --- a/data/maps/OldaleTown/scripts.inc +++ b/data/maps/OldaleTown/scripts.inc @@ -43,7 +43,7 @@ OldaleTown_EventScript_MartEmployee:: @ 81E8EFC goto_if_set FLAG_RECEIVED_POTION_OLDALE, OldaleTown_EventScript_ExplainPotion goto_if_set FLAG_TEMP_1, OldaleTown_EventScript_ExplainPotion setflag FLAG_TEMP_1 - playbgm MUS_FOLLOW_ME, 0 + playbgm MUS_FOLLOW_ME, FALSE msgbox OldaleTown_Text_IWorkAtPokemonMart, MSGBOX_DEFAULT closemessage switch VAR_FACING diff --git a/data/maps/PetalburgCity/scripts.inc b/data/maps/PetalburgCity/scripts.inc index ab77e18e0b..5114ea639e 100644 --- a/data/maps/PetalburgCity/scripts.inc +++ b/data/maps/PetalburgCity/scripts.inc @@ -271,7 +271,7 @@ PetalburgCity_EventScript_ShowGymToPlayer3:: @ 81DC4BE PetalburgCity_EventScript_ShowGymToPlayer:: @ 81DC4CA applymovement LOCALID_GYM_BOY, Common_Movement_FacePlayer waitmovement 0 - playbgm MUS_FOLLOW_ME, 0 + playbgm MUS_FOLLOW_ME, FALSE playse SE_PIN applymovement LOCALID_GYM_BOY, Common_Movement_ExclamationMark waitmovement 0 diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc index 2bdd5320fb..b2f6b1061f 100644 --- a/data/maps/PetalburgCity_Gym/scripts.inc +++ b/data/maps/PetalburgCity_Gym/scripts.inc @@ -203,7 +203,7 @@ PetalburgCity_Gym_EventScript_BeginWallyTutorial:: @ 8204AAC msgbox PetalburgCity_Gym_Text_WouldYouReallyComeWithMe, MSGBOX_DEFAULT closemessage setflag FLAG_DONT_TRANSITION_MUSIC - playbgm MUS_FOLLOW_ME, 0 + playbgm MUS_FOLLOW_ME, FALSE compare VAR_0x8008, 0 call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallySouth compare VAR_0x8008, 1 @@ -487,7 +487,7 @@ PetalburgCity_Gym_EventScript_WallysDadArrives:: @ 8204F13 msgbox PetalburgCity_Gym_Text_LetMeBorrowPlayer, MSGBOX_DEFAULT closemessage setflag FLAG_DONT_TRANSITION_MUSIC - playbgm MUS_FOLLOW_ME, 0 + playbgm MUS_FOLLOW_ME, FALSE compare VAR_0x8008, 1 call_if_eq PetalburgCity_Gym_EventScript_ExitGymWithWallysDadNorth compare VAR_0x8008, 2 diff --git a/data/maps/PetalburgWoods/scripts.inc b/data/maps/PetalburgWoods/scripts.inc index dbdb66b0b8..1f1b2edcb3 100644 --- a/data/maps/PetalburgWoods/scripts.inc +++ b/data/maps/PetalburgWoods/scripts.inc @@ -11,7 +11,7 @@ PetalburgWoods_EventScript_DevonResearcherLeft:: @ 822DFD7 waitmovement 0 msgbox PetalburgWoods_Text_HaveYouSeenShroomish, MSGBOX_DEFAULT closemessage - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE applymovement LOCALID_GRUNT, PetalburgWoods_Movement_AquaEntrance waitmovement 0 msgbox PetalburgWoods_Text_IWasGoingToAmbushYou, MSGBOX_DEFAULT @@ -48,7 +48,7 @@ PetalburgWoods_EventScript_DevonResearcherRight:: @ 822E079 waitmovement 0 msgbox PetalburgWoods_Text_HaveYouSeenShroomish, MSGBOX_DEFAULT closemessage - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE applymovement LOCALID_GRUNT, PetalburgWoods_Movement_AquaEntrance waitmovement 0 msgbox PetalburgWoods_Text_IWasGoingToAmbushYou, MSGBOX_DEFAULT diff --git a/data/maps/Route101/scripts.inc b/data/maps/Route101/scripts.inc index 66ce4abc8f..b932261475 100644 --- a/data/maps/Route101/scripts.inc +++ b/data/maps/Route101/scripts.inc @@ -21,7 +21,7 @@ Route101_EventScript_HideMapNamePopup:: @ 81EBCD5 Route101_EventScript_StartBirchRescue:: @ 81EBCDE lockall - playbgm MUS_HELP, 1 + playbgm MUS_HELP, TRUE msgbox Route101_Text_HelpMe, MSGBOX_DEFAULT closemessage setobjectxy LOCALID_BIRCH, 0, 15 diff --git a/data/maps/Route103/scripts.inc b/data/maps/Route103/scripts.inc index 965b5ff5cd..b096069e7e 100644 --- a/data/maps/Route103/scripts.inc +++ b/data/maps/Route103/scripts.inc @@ -31,7 +31,7 @@ Route103_EventScript_Rival:: @ 81EC3C1 Route103_EventScript_RivalMay:: @ 81EC3DA msgbox Route103_Text_MayRoute103Pokemon, MSGBOX_DEFAULT closemessage - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE applymovement LOCALID_RIVAL, Common_Movement_FacePlayer waitmovement 0 applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark @@ -48,7 +48,7 @@ Route103_EventScript_RivalMay:: @ 81EC3DA Route103_EventScript_RivalBrendan:: @ 81EC434 msgbox Route103_Text_BrendanRoute103Pokemon, MSGBOX_DEFAULT closemessage - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE applymovement LOCALID_RIVAL, Common_Movement_FacePlayer waitmovement 0 applymovement LOCALID_RIVAL, Common_Movement_ExclamationMark diff --git a/data/maps/Route104/scripts.inc b/data/maps/Route104/scripts.inc index d1faca53a7..cb840d9b35 100644 --- a/data/maps/Route104/scripts.inc +++ b/data/maps/Route104/scripts.inc @@ -84,11 +84,11 @@ Route104_EventScript_PlayRivalMusic:: @ 81ECD11 return Route104_EventScript_PlayMayMusic:: @ 81ECD29 - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE return Route104_EventScript_PlayBrendanMusic:: @ 81ECD2E - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE return Route104_EventScript_RivalEncounter:: @ 81ECD33 diff --git a/data/maps/Route110/scripts.inc b/data/maps/Route110/scripts.inc index 50f3d1f48c..f7be3fb9e7 100644 --- a/data/maps/Route110/scripts.inc +++ b/data/maps/Route110/scripts.inc @@ -410,11 +410,11 @@ Route110_EventScript_RivalScene:: @ 81EF76E end Route110_EventScript_PlayMayMusic:: @ 81EF7E1 - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE return Route110_EventScript_PlayBrendanMusic:: @ 81EF7E6 - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE return Route110_EventScript_MayBattle:: @ 81EF7EB diff --git a/data/maps/Route119/scripts.inc b/data/maps/Route119/scripts.inc index 734934d170..37da701a08 100644 --- a/data/maps/Route119/scripts.inc +++ b/data/maps/Route119/scripts.inc @@ -74,11 +74,11 @@ Route119_EventScript_RivalEncounter:: @ 81F4488 end Route119_EventScript_PlayMayMusic:: @ 81F4501 - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE return Route119_EventScript_PlayBrendanMusic:: @ 81F4506 - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE return Route119_EventScript_BattleMay:: @ 81F450B diff --git a/data/maps/Route121/scripts.inc b/data/maps/Route121/scripts.inc index fdc191ea82..6dc93cf6b7 100644 --- a/data/maps/Route121/scripts.inc +++ b/data/maps/Route121/scripts.inc @@ -19,7 +19,7 @@ Route121_EventScript_SafariZoneSign:: @ 81F5E0F Route121_EventScript_AquaGruntsMoveOut:: @ 81F5E18 lockall - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceRight waitmovement 0 msgbox Route121_Text_OkayMoveOutToMtPyre, MSGBOX_DEFAULT diff --git a/data/maps/RustboroCity/scripts.inc b/data/maps/RustboroCity/scripts.inc index 7b1f4a3d81..05bd252479 100644 --- a/data/maps/RustboroCity/scripts.inc +++ b/data/maps/RustboroCity/scripts.inc @@ -294,7 +294,7 @@ RustboroCity_EventScript_StolenGoodsTrigger4:: @ 81E09B6 RustboroCity_EventScript_StolenGoodsScene:: @ 81E09CD msgbox RustboroCity_Text_OutOfTheWay, MSGBOX_DEFAULT closemessage - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE addobject LOCALID_GRUNT addobject LOCALID_DEVON_EMPLOYEE applymovement LOCALID_GRUNT, RustboroCity_Movement_GruntEscape @@ -706,11 +706,11 @@ RustboroCity_EventScript_PlayRivalMusic:: @ 81E0DD1 return RustboroCity_EventScript_PlayMayMusic:: @ 81E0DE9 - playbgm MUS_ENCOUNTER_MAY, 1 + playbgm MUS_ENCOUNTER_MAY, TRUE return RustboroCity_EventScript_PlayBrendanMusic:: @ 81E0DEE - playbgm MUS_ENCOUNTER_BRENDAN, 1 + playbgm MUS_ENCOUNTER_BRENDAN, TRUE return RustboroCity_EventScript_RivalTrigger0:: @ 81E0DF3 diff --git a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc index 34a31c692d..9d4c69cd9c 100644 --- a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc @@ -39,7 +39,7 @@ RustboroCity_DevonCorp_3F_EventScript_MeetPresident:: @ 821246E waitmovement 0 msgbox RustboroCity_DevonCorp_3F_Text_WordWithPresidentComeWithMe, MSGBOX_DEFAULT closemessage - playbgm MUS_FOLLOW_ME, 0 + playbgm MUS_FOLLOW_ME, FALSE applymovement LOCALID_DEVON_EMPLOYEE, RustboroCity_DevonCorp_3F_Movement_LeadPlayerToPresident applymovement OBJ_EVENT_ID_PLAYER, RustboroCity_DevonCorp_3F_Movement_PlayerFollowToPresident waitmovement 0 diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index 17a229ab54..75f5820e0a 100644 --- a/data/maps/RusturfTunnel/scripts.inc +++ b/data/maps/RusturfTunnel/scripts.inc @@ -316,7 +316,7 @@ RusturfTunnel_EventScript_Peeko:: @ 822D0AF RusturfTunnel_EventScript_Grunt:: @ 822D0C2 lock faceplayer - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE msgbox RusturfTunnel_Text_GruntIntro, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_GRUNT_RUSTURF_TUNNEL, RusturfTunnel_Text_GruntDefeat msgbox RusturfTunnel_Text_GruntTakePackage, MSGBOX_DEFAULT diff --git a/data/maps/SeafloorCavern_Room9/scripts.inc b/data/maps/SeafloorCavern_Room9/scripts.inc index 53386f33c0..06ae0d6fe2 100644 --- a/data/maps/SeafloorCavern_Room9/scripts.inc +++ b/data/maps/SeafloorCavern_Room9/scripts.inc @@ -18,7 +18,7 @@ SeafloorCavern_Room9_EventScript_ArchieAwakenKyogre:: @ 8234DC9 waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, SeafloorCavern_Room9_Movement_Delay32 waitmovement 0 - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE msgbox SeafloorCavern_Room9_Text_ArchieHoldItRightThere, MSGBOX_DEFAULT closemessage addobject VAR_0x8004 diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index 983ce97969..ceb2e862ae 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -603,7 +603,7 @@ SlateportCity_EventScript_CaptStern:: @ 81DD1F8 applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFastestUp waitmovement 0 msgbox SlateportCity_Text_OhPlayerWeMadeDiscovery, MSGBOX_DEFAULT - playbgm MUS_ENCOUNTER_AQUA, 0 + playbgm MUS_ENCOUNTER_AQUA, FALSE msgbox SlateportCity_Text_AquaWillAssumeControlOfSubmarine, MSGBOX_DEFAULT applymovement LOCALID_COOK, Common_Movement_WalkInPlaceFastestLeft applymovement LOCALID_FAT_MAN, Common_Movement_WalkInPlaceFastestLeft diff --git a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc index bba75dbd1e..782e702f6b 100644 --- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc @@ -11,7 +11,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern:: @ 820BB00 faceplayer msgbox SlateportCity_OceanicMuseum_2F_Text_ThankYouForTheParts, MSGBOX_DEFAULT closemessage - playbgm MUS_ENCOUNTER_AQUA, 1 + playbgm MUS_ENCOUNTER_AQUA, TRUE addobject LOCALID_GRUNT_1 applymovement LOCALID_GRUNT_1, SlateportCity_OceanicMuseum_2F_Movement_FirstGruntEnter waitmovement 0 diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 51be0027cb..db43dfdd0f 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -916,7 +916,7 @@ ContestHall_EventScript_ContestResults:: @ 827A8A5 setvar VAR_TEMP_9, 1 showcontestresults setvar VAR_TEMP_9, 0 - playbgm MUS_CONTEST_WINNER, 0 + playbgm MUS_CONTEST_WINNER, FALSE return ContestHall_EventScript_ThatsItForJudging:: @ 827A8FB diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 03b8eaf998..4273553327 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -159,7 +159,7 @@ PlayersHouse_1F_EventScript_PetalburgGymReportMale:: @ 829286D call PlayersHouse_1F_EventScript_MomNoticeGymBroadcast applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerApproachTVForGymMale waitmovement 0 - playbgm MUS_ENCOUNTER_INTERVIEWER, 0 + playbgm MUS_ENCOUNTER_INTERVIEWER, FALSE msgbox PlayersHouse_1F_Text_MaybeDadWillBeOn, MSGBOX_DEFAULT closemessage applymovement VAR_0x8005, PlayersHouse_1F_Movement_MomMakeRoomToSeeTVMale @@ -184,7 +184,7 @@ PlayersHouse_1F_EventScript_PetalburgGymReportFemale:: @ 82928DC call PlayersHouse_1F_EventScript_MomNoticeGymBroadcast applymovement OBJ_EVENT_ID_PLAYER, PlayersHouse_1F_Movement_PlayerApproachTVForGymFemale waitmovement 0 - playbgm MUS_ENCOUNTER_INTERVIEWER, 0 + playbgm MUS_ENCOUNTER_INTERVIEWER, FALSE msgbox PlayersHouse_1F_Text_MaybeDadWillBeOn, MSGBOX_DEFAULT closemessage applymovement VAR_0x8005, PlayersHouse_1F_Movement_MomMakeRoomToSeeTVFemale From a454f9c187008e791d05da8c378ac8f553f4ce3e Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Sun, 23 May 2021 10:10:55 -0400 Subject: [PATCH 76/90] UBFIX: sprite.c (#1442) Fix out-of-bounds array access in `SortSprites()`. Co-authored-by: Marcus Huderle --- gflib/sprite.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gflib/sprite.c b/gflib/sprite.c index c66b1e47dc..f97ecc712d 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -452,6 +452,10 @@ void SortSprites(void) // Although this doesn't result in a bug in the ROM, // the behavior is undefined. j--; +#ifdef UBFIX + if (j == 0) + break; +#endif sprite1 = &gSprites[sSpriteOrder[j - 1]]; sprite2 = &gSprites[sSpriteOrder[j]]; @@ -661,8 +665,7 @@ void ResetOamRange(u8 a, u8 b) for (i = a; i < b; i++) { - struct OamData *oamBuffer = gMain.oamBuffer; - oamBuffer[i] = *(struct OamData *)&gDummyOamData; + gMain.oamBuffer[i] = *(struct OamData *)&gDummyOamData; } } From ffbbc88801de3fc56d0bf5f0af1418ca7cfcfa4f Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Sun, 23 May 2021 10:35:03 -0400 Subject: [PATCH 77/90] BUGFIX: battle scripts (#1436) --- src/battle_ai_script_commands.c | 22 ++++++++++++++++------ src/battle_script_commands.c | 22 +++++++++++++++------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 81e7c15cc7..b728750364 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1761,7 +1761,11 @@ static void Cmd_if_cant_faint(void) gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100; - // This macro is missing the damage 0 = 1 assumption. +#ifdef BUGFIX + // Moves always do at least 1 damage. + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; +#endif if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); @@ -2019,18 +2023,24 @@ static void Cmd_if_holds_item(void) { u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]); u16 item; - u8 var1, var2; + u8 itemLo, itemHi; if ((battlerId & BIT_SIDE) == (sBattler_AI & BIT_SIDE)) item = gBattleMons[battlerId].item; else item = BATTLE_HISTORY->itemEffects[battlerId]; - // UB: doesn't properly read an unaligned u16 - var2 = gAIScriptPtr[2]; - var1 = gAIScriptPtr[3]; + itemHi = gAIScriptPtr[2]; + itemLo = gAIScriptPtr[3]; - if ((var1 | var2) == item) +#ifdef BUGFIX + // This bug doesn't affect the vanilla game because this script command + // is only used to check ITEM_PERSIM_BERRY, whose high byte happens to + // be 0. + if (((itemHi << 8) | itemLo) == item) +#else + if ((itemLo | itemHi) == item) +#endif gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0492caeb5c..15e44dd75e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3357,7 +3357,7 @@ static void Cmd_getexp(void) // get exp getter battlerId if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - if (!(gBattlerPartyIndexes[2] != gBattleStruct->expGetterMonId) && !(gAbsentBattlerFlags & gBitTable[2])) + if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && !(gAbsentBattlerFlags & gBitTable[2])) gBattleStruct->expGetterBattlerId = 2; else { @@ -3431,14 +3431,13 @@ static void Cmd_getexp(void) gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP); gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK); gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF); - // Why is this duplicated? + // Speed is duplicated, likely due to a copy-paste error. gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); - gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK); gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF); } - // What is else if? + if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL); @@ -3446,10 +3445,13 @@ static void Cmd_getexp(void) gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP); gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK); gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF); - // Duplicated again, but this time there's no Sp Defense gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); + // Speed is duplicated again, but Special Defense is missing. +#ifdef BUGFIX + gBattleMons[2].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF); +#else gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); - +#endif gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK); } gBattleScripting.getexpState = 5; @@ -6168,7 +6170,13 @@ static void Cmd_recordlastability(void) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); RecordAbilityBattle(gActiveBattler, gLastUsedAbility); - gBattlescriptCurrInstr += 1; // UB: Should be + 2, one byte for command and one byte for battlerId argument. + +#ifdef BUGFIX + // This command occupies two bytes (one for the command id, and one for the battler id parameter). + gBattlescriptCurrInstr += 2; +#else + gBattlescriptCurrInstr += 1; +#endif } void BufferMoveToLearnIntoBattleTextBuff2(void) From ff16812f99f62a495975e7cc3c68ede339171765 Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Sun, 23 May 2021 10:56:37 -0400 Subject: [PATCH 78/90] UBFix: uninitialized variables in m4a engine and siirtc.c (#1432) --- src/m4a.c | 9 +++++++++ src/siirtc.c | 30 ++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/m4a.c b/src/m4a.c index 717cafc78e..105312a40c 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1525,6 +1525,10 @@ void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track { u32 wav; +#ifdef UBFIX + wav = 0; +#endif + READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable READ_XCMD_BYTE(wav, 1) READ_XCMD_BYTE(wav, 2) @@ -1592,6 +1596,10 @@ void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tra { u32 unk; +#ifdef UBFIX + unk = 0; +#endif + READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable READ_XCMD_BYTE(unk, 1) @@ -1611,6 +1619,7 @@ void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tra void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { u32 unk; + #ifdef UBFIX unk = 0; #endif diff --git a/src/siirtc.c b/src/siirtc.c index 01d2e0e723..5f4fc0a23c 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -71,6 +71,7 @@ static bool8 sLocked; static int WriteCommand(u8 value); static int WriteData(u8 value); static u8 ReadData(); + static void EnableGpioPortRead(); static void DisableGpioPortRead(); @@ -98,8 +99,12 @@ u8 SiiRtcProbe(void) errorCode = 0; +#ifdef BUGFIX + if (!(rtc.status & SIIRTCINFO_24HOUR) || (rtc.status & SIIRTCINFO_POWER)) +#else if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) +#endif { // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. @@ -131,7 +136,7 @@ u8 SiiRtcProbe(void) bool8 SiiRtcReset(void) { - u8 result; + bool8 result; struct SiiRtcInfo rtc; if (sLocked == TRUE) @@ -392,7 +397,11 @@ static int WriteCommand(u8 value) GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; } - // control reaches end of non-void function + // Nothing uses the returned value from this function, + // so the undefined behavior is harmless in the vanilla game. +#ifdef UBFIX + return 0; +#endif } static int WriteData(u8 value) @@ -409,7 +418,11 @@ static int WriteData(u8 value) GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; } - // control reaches end of non-void function + // Nothing uses the returned value from this function, + // so the undefined behavior is harmless in the vanilla game. +#ifdef UBFIX + return 0; +#endif } static u8 ReadData() @@ -417,9 +430,10 @@ static u8 ReadData() u8 i; u8 temp; u8 value; - #ifdef UBFIX + +#ifdef UBFIX value = 0; - #endif +#endif for (i = 0; i < 8; i++) { @@ -431,7 +445,7 @@ static u8 ReadData() GPIO_PORT_DATA = SCK_HI | CS_HI; temp = ((GPIO_PORT_DATA & SIO_HI) >> 1); - value = (value >> 1) | (temp << 7); // UB: value is uninitialized on first iteration + value = (value >> 1) | (temp << 7); } return value; @@ -439,10 +453,10 @@ static u8 ReadData() static void EnableGpioPortRead() { - GPIO_PORT_READ_ENABLE = 1; + GPIO_PORT_READ_ENABLE = TRUE; } static void DisableGpioPortRead() { - GPIO_PORT_READ_ENABLE = 0; + GPIO_PORT_READ_ENABLE = FALSE; } From aca96a1510879906237a4b6b2176fe5e342e1386 Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Sun, 23 May 2021 19:48:34 -0400 Subject: [PATCH 79/90] Mark 0xFFF8 as ~7 Since 7 is used as a mask, I wondered if 0xFFF8 was used to undo the mask and it turns out it was. --- gflib/bg.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gflib/bg.c b/gflib/bg.c index 3c215c1034..b6d1b0b924 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -55,7 +55,7 @@ void ResetBgs(void) static void SetBgModeInternal(u8 bgMode) { - sGpuBgConfigs.bgVisibilityAndMode &= 0xFFF8; + sGpuBgConfigs.bgVisibilityAndMode &= ~0x7; sGpuBgConfigs.bgVisibilityAndMode |= bgMode; } @@ -66,13 +66,11 @@ u8 GetBgMode(void) void ResetBgControlStructs(void) { - struct BgConfig* bgConfigs = &sGpuBgConfigs.configs[0]; - struct BgConfig zeroedConfig = sZeroedBgControlStruct; int i; for (i = 0; i < NUM_BACKGROUNDS; i++) { - bgConfigs[i] = zeroedConfig; + sGpuBgConfigs.configs[i] = sZeroedBgControlStruct; } } From 94939e395b58cf3e774a76d49b8518b8c2937432 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 23 May 2021 22:26:34 -0400 Subject: [PATCH 80/90] one last goto --- gflib/bg.c | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/gflib/bg.c b/gflib/bg.c index b6d1b0b924..0c702ae0fb 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -173,36 +173,30 @@ u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode) u16 offset; s8 cursor; - if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible) - { - switch (mode) - { - case 0x1: - offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE; - break; - case 0x2: - offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE; - break; - default: - cursor = -1; - goto end; - } + if (IsInvalidBg(bg) || !sGpuBgConfigs.configs[bg].visible) + return -1; + switch (mode) + { + case 0x1: + offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE; offset = destOffset + offset; - cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0); - if (cursor == -1) - { return -1; - } - } - else - { - return -1; + break; + case 0x2: + offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE; + offset = destOffset + offset; + cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0); + if (cursor == -1) + return -1; + break; + default: + cursor = -1; + break; } -end: return cursor; } From 5ae5cf110d722c751a3fbfec38ec8f4498a85616 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 25 May 2021 04:03:11 -0400 Subject: [PATCH 81/90] [LEAK-INFORMED] fix fakematch in DrawWallpaper --- src/pokemon_storage_system.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index e5720d9148..a7a418a30a 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -5437,19 +5437,20 @@ static bool32 WaitForWallpaperGfxLoad(void) static void DrawWallpaper(const void *tilemap, s8 direction, u8 offset) { - s16 var = (offset * 2) + 3; + s16 var = offset * 256; + s16 var2 = (offset * 2) + 3; s16 x = ((sStorage->bg2_X / 8 + 10) + (direction * 24)) & 0x3F; - CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, offset << 8, var); - - if (direction == 0) - return; - if (direction > 0) - x *= 1, x += 0x14; // x * 1 is needed to match, but can be safely removed as it makes no functional difference - else - x -= 4; + CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, var, var2); + if (direction) + { + if (direction > 0) + x += 0x14; + else + x -= 4; FillBgTilemapBufferRect(2, 0, x, 2, 4, 0x12, 0x11); + } } static void TrimOldWallpaper(void *tilemap) From 5d5327c0b73784c47d18734a291b5463289ca9c5 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 25 May 2021 04:32:47 -0400 Subject: [PATCH 82/90] better match --- src/pokemon_storage_system.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index a7a418a30a..c82caf0b0d 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -5443,14 +5443,14 @@ static void DrawWallpaper(const void *tilemap, s8 direction, u8 offset) CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, var, var2); - if (direction) - { - if (direction > 0) - x += 0x14; - else - x -= 4; + if (direction == 0) + return; + if (direction > 0) + x += 0x14; + else + x -= 4; + FillBgTilemapBufferRect(2, 0, x, 2, 4, 0x12, 0x11); - } } static void TrimOldWallpaper(void *tilemap) From c9c558606899f898c7b14ad4a35f19ce2831d66a Mon Sep 17 00:00:00 2001 From: gAlfonso-bit <83477269+gAlfonso-bit@users.noreply.github.com> Date: Thu, 27 May 2021 08:32:09 -0400 Subject: [PATCH 83/90] =?UTF-8?q?Fixed=20ChangeBgY=5FScreenOff=E2=80=98s?= =?UTF-8?q?=20signature.=20(#1447)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix Functions * Fix ChangeBgY_ScreenOff signature * Remove unneeded changes * Fix argument mismatch Just to get this out of the way * Not needed * Update palette.c --- gflib/bg.c | 10 +++++----- gflib/bg.h | 2 +- src/battle_factory.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gflib/bg.c b/gflib/bg.c index 0c702ae0fb..ec7c2113b1 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -246,17 +246,17 @@ static void SetBgAffineInternal(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispC switch (sGpuBgConfigs.bgVisibilityAndMode & 0x7) { + default: + case 0: + return; case 1: if (bg != 2) return; break; case 2: - if (bg < 2 || bg >= NUM_BACKGROUNDS) + if (bg != 2 && bg != 3) return; break; - case 0: - default: - return; } src.texX = srcCenterX; @@ -689,7 +689,7 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op) return sGpuBgConfigs2[bg].bg_y; } -s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op) +s32 ChangeBgY_ScreenOff(u8 bg, s32 value, u8 op) { u8 mode; u16 temp1; diff --git a/gflib/bg.h b/gflib/bg.h index 3c7eee2927..58fd1282c0 100644 --- a/gflib/bg.h +++ b/gflib/bg.h @@ -59,7 +59,7 @@ u16 GetBgAttribute(u8 bg, u8 attributeId); s32 ChangeBgX(u8 bg, s32 value, u8 op); s32 GetBgX(u8 bg); s32 ChangeBgY(u8 bg, s32 value, u8 op); -s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op); +s32 ChangeBgY_ScreenOff(u8 bg, s32 value, u8 op); s32 GetBgY(u8 bg); void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle); u8 Unused_AdjustBgMosaic(u8 a1, u8 a2); diff --git a/src/battle_factory.c b/src/battle_factory.c index 72772929a9..e0bfdfdd0b 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -38,7 +38,7 @@ static void GenerateInitialRentalMons(void); static void GetOpponentMostCommonMonType(void); static void GetOpponentBattleStyle(void); static void RestorePlayerPartyHeldItems(void); -static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 arg2); +static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 useBetterRange); static u8 GetMoveBattleStyle(u16 move); // Number of moves needed on the team to be considered using a certain battle style From 8b45c8e48ac1ddce3e986fb512937cf2e57f86ec Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Thu, 27 May 2021 16:20:13 -0400 Subject: [PATCH 84/90] Fix github links to pret's. --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index e0a8c325e7..1ad3b4b0c9 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -377,7 +377,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for 1. If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: ```bash - git clone https://github.com/luckytyphlosion/pokeemerald + git clone https://github.com/pret/pokeemerald ```
@@ -397,7 +397,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for - If agbcc has **not been built before** in the folder where you chose to store pokeemerald, run the following commands to build and install it into pokeemerald: ```bash - git clone https://github.com/luckytyphlosion/agbcc + git clone https://github.com/pret/agbcc cd agbcc ./build.sh ./install.sh ../pokeemerald From 42021db743e898b2fe73ffe193446775e88ef121 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 25 May 2021 21:55:24 -0400 Subject: [PATCH 85/90] [LEAK-INFORMED] literal dumbest fakematch ever --- src/pokemon_animation.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 14a17437cc..e63862cd9e 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -2604,9 +2604,9 @@ static void RotateUpSlamDown_0(struct Sprite *sprite) { TryFlipX(sprite); sprite->data[7]--; - sprite->pos2.x = Cos(sprite->data[7], sprite->data[6]) + sprite->data[6]; + sprite->pos2.x = sprite->data[6] + Cos(sprite->data[7], sprite->data[6]); - sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6] += 0)); // dummy += 0 is needed to match + sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6])); HandleSetAffineData(sprite, 256, 256, (sprite->data[7] - 128) << 8); if (sprite->data[7] <= 120) @@ -2634,9 +2634,9 @@ static void RotateUpSlamDown_2(struct Sprite *sprite) { TryFlipX(sprite); sprite->data[7] += 2; - sprite->pos2.x = Cos(sprite->data[7], sprite->data[6]) + sprite->data[6]; + sprite->pos2.x = sprite->data[6] + Cos(sprite->data[7], sprite->data[6]); - sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6] += 0)); // dummy += 0 is needed to match + sprite->pos2.y = -(Sin(sprite->data[7], sprite->data[6])); HandleSetAffineData(sprite, 256, 256, (sprite->data[7] - 128) << 8); if (sprite->data[7] >= 128) From 2705f2e5f44980f368d30845215e28ae5ea5c595 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 25 May 2021 22:13:31 -0400 Subject: [PATCH 86/90] [LEAK-INFORMED] also pretty dumb --- src/pokemon_animation.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index e63862cd9e..500916b0e4 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -4066,16 +4066,15 @@ static void VerticalShakeLowTwice(struct Sprite *sprite) u8 var8 = sprite->data[2]; u8 var9 = sprite->data[6]; u8 var5 = sVerticalShakeData[sprite->data[5]][0]; - u8 var2 = var5; if (var5 != (u8)-1) var5 = sprite->data[7]; - else - var5 = (u8)-1; // needed to match var6 = sVerticalShakeData[sprite->data[5]][1]; var7 = 0; - if (var2 != (u8)-2) + if (sVerticalShakeData[sprite->data[5]][0] != (u8)-2) var7 = (var6 - var9) * var5 / var6; + else + var7 = 0; if (var5 == (u8)-1) { From 2bbaf71998337cba3c912143302f816b4116e851 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 31 May 2021 00:19:26 -0400 Subject: [PATCH 87/90] [LEAK-INFORMED] fix CreateShedinja fakematch info: the header change is required. accesses to the struct need to be treated as non-const, even though the array must be const. thanks to jiang for figuring this out. --- include/pokemon.h | 1 - src/daycare.c | 2 ++ src/evolution_scene.c | 12 ++++-------- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index 82cdefeac8..3565bd9669 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -258,7 +258,6 @@ extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToTrainerClass[]; extern const struct BaseStats gBaseStats[]; extern const u8 *const gItemEffectTable[]; -extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const u16 *const gLevelUpLearnsets[]; extern const u8 gPPUpGetMask[]; diff --git a/src/daycare.c b/src/daycare.c index 34b8649816..14053217d2 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -23,6 +23,8 @@ #include "constants/moves.h" #include "constants/region_map_sections.h" +extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; + // this file's functions static void ClearDaycareMonMail(struct DaycareMail *mail); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 39e917161c..08f816f4fe 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -34,6 +34,8 @@ #include "constants/rgb.h" #include "constants/items.h" +extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; + struct EvoInfo { u8 preEvoSpriteId; @@ -550,8 +552,6 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) { s32 i; struct Pokemon* shedinja = &gPlayerParty[gPlayerPartyCount]; - const struct Evolution *evos; - const struct Evolution *evos2; CopyMon(&gPlayerParty[gPlayerPartyCount], mon, sizeof(struct Pokemon)); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, &gEvolutionTable[preEvoSpecies][1].targetSpecies); @@ -572,12 +572,8 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) CalculateMonStats(&gPlayerParty[gPlayerPartyCount]); CalculatePlayerPartyCount(); - // can't match it otherwise, ehh - evos2 = gEvolutionTable[0]; - evos = evos2 + EVOS_PER_MON * preEvoSpecies; - - GetSetPokedexFlag(SpeciesToNationalPokedexNum(evos[1].targetSpecies), FLAG_SET_SEEN); - GetSetPokedexFlag(SpeciesToNationalPokedexNum(evos[1].targetSpecies), FLAG_SET_CAUGHT); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gEvolutionTable[preEvoSpecies][1].targetSpecies), FLAG_SET_SEEN); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gEvolutionTable[preEvoSpecies][1].targetSpecies), FLAG_SET_CAUGHT); if (GetMonData(shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA && GetMonData(shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE From 9f5bf65fb336cf7a3ba68d32267bf993f0f6a494 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 31 May 2021 19:01:20 -0400 Subject: [PATCH 88/90] [PROBABLY LEAK-INFORMED] fix battle_transition fakematch, make consistent use of SOME_VRAM_STORE --- src/battle_transition.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 479700e53f..461c45e7dd 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1323,6 +1323,12 @@ static bool8 Phase2_BigPokeball_Func1(struct Task *task) return FALSE; } +#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ +{ \ + u32 index = (posY) * 32 + posX; \ + ptr[index] = toStore; \ +} + static bool8 Phase2_BigPokeball_Func2(struct Task *task) { s16 i, j; @@ -1335,7 +1341,7 @@ static bool8 Phase2_BigPokeball_Func2(struct Task *task) { for (j = 0; j < 30; j++, BigPokeballMap++) { - tilemap[i * 32 + j] = *BigPokeballMap | 0xF000; + SOME_VRAM_STORE(tilemap, i, j, *BigPokeballMap | 0xF000); } } sub_8149F98(gScanlineEffectRegBuffers[0], 0, task->tData4, 132, task->tData5, 160); @@ -1675,12 +1681,6 @@ bool8 FldEff_Pokeball(void) return FALSE; } -#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ -{ \ - u32 index = (posY) * 32 + posX; \ - ptr[index] = toStore; \ -} - static void sub_814713C(struct Sprite *sprite) { s16 arr0[ARRAY_COUNT(sUnknown_085C8B96)]; @@ -2142,7 +2142,7 @@ static bool8 Phase2_Mugshot_Func2(struct Task *task) { for (j = 0; j < 32; j++, mugshotsMap++) { - tilemap[i * 32 + j] = *mugshotsMap | 0xF000; + SOME_VRAM_STORE(tilemap, i, j, *mugshotsMap | 0xF000); } } @@ -2960,17 +2960,15 @@ static bool8 Phase2_RectangularSpiral_Func2(struct Task *task) if (sub_8149048(gUnknown_085C8D38[j / 2], &sRectangularSpiralTransition[j])) { - u32 one; done = FALSE; var = sRectangularSpiralTransition[j].field_2; - one = 1; - if ((j & 1) == one) + if ((j % 2) == 1) var = 0x27D - var; var2 = var % 32; - var3 = var / 32 * 32; + var3 = var / 32; - tilemap[var3 + var2] = 0xF002; + SOME_VRAM_STORE(tilemap, var3, var2, 0xF002); } } } From 5c6b8ea8d67fb34b7f80b8856ee2d12caabff68f Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 1 Jun 2021 17:14:45 -0400 Subject: [PATCH 89/90] re-add const to gEvolutionTable in daycare.c --- src/daycare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/daycare.c b/src/daycare.c index 14053217d2..4199bfda67 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -23,7 +23,7 @@ #include "constants/moves.h" #include "constants/region_map_sections.h" -extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; +extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; // this file's functions static void ClearDaycareMonMail(struct DaycareMail *mail); From 2fe7184d10ba183880fe6a6d09926f6286a96ace Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Fri, 4 Jun 2021 22:32:33 -0400 Subject: [PATCH 90/90] Rename sText_WildPkmnAppeared2 to reflect its use sText_WildPkmnAppeared2 is used for Legendary battles, so sText_LegendaryPkmnAppeared would be more informative. --- src/battle_message.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index a308664104..7ef5fe3210 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -383,7 +383,7 @@ static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEB static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p"); static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); +static const u8 sText_LegendaryPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); @@ -2125,7 +2125,7 @@ void BufferStringBattle(u16 stringID) else { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) - stringPtr = sText_WildPkmnAppeared2; + stringPtr = sText_LegendaryPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)