Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
95f351657c |
@ -1,24 +0,0 @@
|
||||
# This CI file is used to test code pushed to "main".
|
||||
|
||||
image: ubuntu:rolling # Using rolling because of that OpenSSL vuln.
|
||||
|
||||
# Use Docker, because it just works.
|
||||
|
||||
before_script:
|
||||
- apt update # Build a package cache with apt, because Ubuntu on Docker doesn't have one by default.
|
||||
- apt install git bash libpng-dev build-essential binutils-arm-none-eabi -y # Install build dependencies.
|
||||
- git config --global http.sslVerify false # disable SSL for git so that cloning the game doesn't fudge everything up.
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- echo "Do your build here"
|
||||
- mkdir work-directory
|
||||
- cd work-directory
|
||||
- git clone --recursive https://gitgud.io/tbld/game.git # clone recursively so that we don't have to get agbcc ourselves
|
||||
- cd game
|
||||
- cd agbcc
|
||||
- bash ./build.sh # Compile agbcc
|
||||
- bash ./install.sh ../ # Install agbcc into tumbledemerald
|
||||
- cd ..
|
||||
- make -j8 # multi-threaded make
|
@ -1,14 +0,0 @@
|
||||
# Bug Report
|
||||
|
||||
## What issue have you found?
|
||||
|
||||
<!--- Please provide a detailed explanation of the bug here. -->
|
||||
|
||||
## What did you expect to happen instead of this bug?
|
||||
|
||||
<!--- What did you expect to happen instead? Please explain in detail. -->
|
||||
|
||||
<!--- Please check the following boxes. -->
|
||||
|
||||
- [ ] I am using the **latest version** of TumbledEmerald.
|
||||
- [ ] I am using mGBA, the official CIA package, or a Game Boy Advance flashcart.
|
@ -1,4 +0,0 @@
|
||||
<!---
|
||||
Please make sure to look at the issue templates and use the one that best describes your problem. If your issue
|
||||
doesn't fit into one of these categories, please type your issue below. If we need more information, we'll ask!
|
||||
-->
|
@ -1,18 +0,0 @@
|
||||
# Feature Request
|
||||
|
||||
## Requested feature: <!--- type what you want added here. -->
|
||||
|
||||
|
||||
|
||||
## Why do you want this feature?
|
||||
|
||||
|
||||
|
||||
|
||||
<!--- Please check the following boxes. -->
|
||||
|
||||
- [ ] I have submitted a merge request to implement this feature. <!--- not required, but if this is the case, please indicate so! -->
|
||||
- If you have submitted a merge request, please reference it here: <!--- use the !NUMBER format. -->
|
||||
- [ ] This feature has not been requested in another issue before.
|
||||
- [ ] I would like to be listed in the credits.
|
||||
|
@ -1,16 +0,0 @@
|
||||
## Save Porting Request
|
||||
|
||||
Version of my save: <!--- replace this text with the game version that your save was created in. -->
|
||||
Version I want to have my save ported to: <!--- replace this text with the game version you want to use your save in. -->
|
||||
|
||||
- [ ] I have attached my save file in `.sav` format to this request.
|
||||
- [ ] I would like to authorize my save file to be used for testing and debugging purposes. (OPTIONAL)
|
||||
|
||||
<!---
|
||||
Please note:
|
||||
|
||||
I might not get to your save right away. If it takes longer than a month to make you a new save, I'll update
|
||||
it to work with the latest version of the game for you.
|
||||
|
||||
This process is NOT a conversion. This is me (an idiot!) rummaging through your save and trying to replicate it on the version you chose. I might miss something. If you notice something I missed, let me know.
|
||||
-->
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
||||
[submodule "agbcc"]
|
||||
path = agbcc
|
||||
url = https://github.com/pret/agbcc
|
@ -3,6 +3,6 @@
|
||||
# and commit this file to your remote git repository to share the goodness with others.
|
||||
|
||||
tasks:
|
||||
- init: git config --global http.sslVerify false && git clone https://gitgud.io/tbld/scripts.git && cd scripts && sudo bash ./main.sh -cc
|
||||
- init: echo "See INSTALL.md for compilation instructions."
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@ DO:
|
||||
- Keep `tumbledemerald` up-to-date with `@pret`'s decomp. (pret/pokeemerald on GitHub.com)
|
||||
- Send pull requests
|
||||
- Send feature requests
|
||||
- Hang out with us.
|
||||
- Hang out with us on **[matrix]**
|
||||
- Follow the [style guide](STYLE.md)
|
||||
|
||||
DON'T:
|
||||
|
@ -1,9 +1,6 @@
|
||||
# Cool people:
|
||||
|
||||
# Compilation Hall of Fame
|
||||
These people have built or compiled TumbledEmerald releases in a pinch, lending their time to the project in a super helpful way!
|
||||
## SanicConnoissuer_91: Built the 22.08a .CIA (and several others). Thanks a bunch, dude!
|
||||
## creepyguy: Compiled 1.0.0, since I couldn't. He's awesome, go check him out on [Scratch](https://scratch.mit.edu/users/creepyguy256/)
|
||||
# creepyguy: Compiled 1.0.0, since I couldn't. He's awesome, go check him out on [Scratch](https://scratch.mit.edu/users/creepyguy256/)
|
||||
|
||||
- @ghoulslash: A lot of the features here are directly from [ghoulslash/pokeemerald](https://github.com/ghoulslash/pokeemerald.git) and its many amazing feature branches.
|
||||
- Tutorial authors: ~~Some~~ Most features were adapted from code in the [tutorials](https://github.com/pret/pokeemerald/wiki/Tutorials/) in [pret](https://github.com/pret/)'s wiki.
|
||||
|
3
FAQ.md
3
FAQ.md
@ -1,3 +0,0 @@
|
||||
## FAQ
|
||||
|
||||
Any important questions that I feel need answering will be added here.
|
@ -13,9 +13,4 @@ titles and update them while still remaining faithful to the original games.
|
||||
* The keyboard prompt automatically switches to lowercase after the first character.
|
||||
* Dynamic trade names have been implemented: rather than pulling trade Pokemon info from a list, it pulls from the Pokemon's data instead.
|
||||
* The "move grammar" table leftover from the Japanese versions has been completely nuked, making the game faster.
|
||||
* Pokémon Center receptionists now heal your Pokémon without prompt, and you turn around once the process is over to avoid accidentally healing again
|
||||
* Default options have been changed to make the game quicker.
|
||||
* The Aurora Ticket, Mystic Ticket, and Old Sea Map have been reimplemented:
|
||||
* For the tickets, beat Wallace and talk to the girl who originally blocks Route 101 back in Littleroot Town.
|
||||
* For the map, beat Wallace and talk to the fisherman who gives you the Old Rod, telling him that fishing is "not so good."
|
||||
* The Fairy type from Generation VI+ has been added.
|
||||
*
|
||||
|
47
INSTALL.md
47
INSTALL.md
@ -5,11 +5,11 @@ These instructions explain how to set up the tools required to build **tumbledem
|
||||
These instructions come with notes which can be expanded by clicking the "<i>Note...</i>" text.
|
||||
In general, you should not need to open these unless if you get an error or if you need additional clarification.
|
||||
|
||||
If you run into trouble, ask for help.
|
||||
If you run into trouble, ask for help on Matrix.
|
||||
|
||||
## Windows
|
||||
Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbles upon unexpected errors.
|
||||
- [Windows 10 and 11 (WSL1)](#windows-10-and-11-wsl1) (**Fastest, highly recommended**, Windows 10 and later only)
|
||||
- [Windows 10 (WSL1)](#windows-10-wsl1) (**Fastest, highly recommended**, Windows 10 and later only)
|
||||
- [Windows (msys2)](#windows-msys2) (Second fastest)
|
||||
- [Windows (Cygwin)](#windows-cygwin) (Slowest)
|
||||
|
||||
@ -24,9 +24,9 @@ Unscientific benchmarks suggest **msys2 is 2x slower** than WSL1, and **Cygwin i
|
||||
|
||||
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 and 11 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 and 11 (WSL1)
|
||||
## Windows 10 (WSL1)
|
||||
WSL1 is the preferred terminal to build **tumbledemerald**. 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).
|
||||
@ -109,7 +109,7 @@ cd /mnt/c/Users/<user>/Desktop/decomps
|
||||
|
||||
If this works, then proceed to [Installation](#installation).
|
||||
|
||||
Otherwise, ask for help, or continue reading below for [Windows instructions using msys2](#windows-msys2).
|
||||
Otherwise, ask for help on Matrix, or continue reading below for [Windows instructions using msys2](#windows-msys2).
|
||||
|
||||
## Windows (msys2)
|
||||
|
||||
@ -149,7 +149,7 @@ cd Desktop/decomps
|
||||
|
||||
If this works, then proceed to [Installation](#installation).
|
||||
|
||||
Otherwise, ask for help, or continue reading below for [Windows instructions using Cygwin](#windows-cygwin).
|
||||
Otherwise, ask for help on Matrix, or continue reading below for [Windows instructions using Cygwin](#windows-cygwin).
|
||||
|
||||
## Windows (Cygwin)
|
||||
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!*
|
||||
@ -217,7 +217,7 @@ Note that the directory **must exist** in Windows. If you want to store tumblede
|
||||
> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed
|
||||
</details>
|
||||
|
||||
If this works, then proceed to [Installation](#installation). Otherwise, ask for help.
|
||||
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Matrix.
|
||||
|
||||
## macOS
|
||||
1. If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/xcode/resources/), open your Terminal, and run the following command:
|
||||
@ -287,7 +287,7 @@ Note that the directory **must exist** in the folder system. If you want to stor
|
||||
> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"`
|
||||
</details>
|
||||
|
||||
If this works, then proceed to [Installation](#installation). Otherwise, ask for help.
|
||||
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Matrix.
|
||||
|
||||
## Linux
|
||||
Open Terminal and enter the following commands, depending on which distro you're using.
|
||||
@ -346,7 +346,7 @@ _(Specific instructions for other distributions would be greatly appreciated!)_
|
||||
### Choosing where to store tumbledemerald (Linux)
|
||||
At this point, you can choose a folder to store tumbledemerald (and agbcc) into. If so, you'll have to account for the modified folder path when changing directory to the tumbledemerald folder.
|
||||
|
||||
If this works, then proceed to [Installation](#installation). Otherwise, ask for help.
|
||||
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Matrix.
|
||||
|
||||
## Installation
|
||||
|
||||
@ -361,7 +361,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
|
||||
1. If tumbledemerald is not already downloaded (some users may prefer to download tumbledemerald via a git client like GitHub Desktop), run:
|
||||
|
||||
```bash
|
||||
git clone https://gitgud.io/tbld/game.git -c http.sslVerify false --recursive
|
||||
git clone https://gitlab.com/tbld/game.git
|
||||
```
|
||||
|
||||
<details>
|
||||
@ -376,42 +376,31 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
|
||||
> ```
|
||||
> Where *\<folder where tumbledemerald is to be stored>* is the path of the folder [where you chose to store tumbledemerald](#Choosing-where-to-store-tumbledemerald-WSL1). Then run the `git clone` command again.
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><i>Why disable SSL when cloning?</i></summary>
|
||||
|
||||
> GitGud's servers don't seem to allow cloning over https for some
|
||||
> reason. The `-c http.sslVerify false` part of the above command
|
||||
> ensures that cloning works properly, but may be a security risk.
|
||||
> Don't be a stupid.
|
||||
</details>
|
||||
|
||||
2. Install agbcc into tumbledemerald. 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 tumbledemerald, run the following commands to build and install it into tumbledemerald:
|
||||
|
||||
```bash
|
||||
cd <path to tumbledemerald>
|
||||
git clone https://github.com/pret/agbcc
|
||||
cd agbcc
|
||||
./build.sh
|
||||
./install.sh ../
|
||||
./install.sh ../tumbledemerald
|
||||
```
|
||||
|
||||
- **Otherwise**, 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 tumbledemerald:
|
||||
- **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 tumbledemerald:
|
||||
|
||||
```bash
|
||||
cd <path to tumbledemerald>
|
||||
cd agbcc
|
||||
git clean -fX
|
||||
./build.sh
|
||||
./install.sh ../
|
||||
./install.sh ../tumbledemerald
|
||||
```
|
||||
|
||||
- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into tumbledemerald:
|
||||
|
||||
```bash
|
||||
cd <path to tumbledemerald>
|
||||
cd agbcc
|
||||
./install.sh ../
|
||||
./install.sh ../tumbledemerald
|
||||
```
|
||||
|
||||
<details>
|
||||
@ -434,7 +423,7 @@ cd tumbledemerald
|
||||
```
|
||||
To build **tumbledemerald.gba** (Note: to speed up builds, see [Parallel builds](#parallel-builds)):
|
||||
```bash
|
||||
make
|
||||
make compare
|
||||
```
|
||||
If you see something like:
|
||||
```bash
|
||||
@ -446,6 +435,10 @@ then the build was successful.
|
||||
> If you switched terminals since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands.
|
||||
</details>
|
||||
|
||||
To build **tumbledemerald.gba** with your changes:
|
||||
```bash
|
||||
make
|
||||
```
|
||||
|
||||
# Building guidance
|
||||
|
||||
|
351
Makefile
351
Makefile
@ -1,34 +1,13 @@
|
||||
TOOLCHAIN := $(DEVKITARM)
|
||||
COMPARE ?= 0
|
||||
|
||||
ifeq (compare,$(MAKECMDGOALS))
|
||||
COMPARE := 1
|
||||
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 this system
|
||||
|
||||
ifneq (,$(TOOLCHAIN))
|
||||
ifneq ($(wildcard $(TOOLCHAIN)/bin),)
|
||||
export PATH := $(TOOLCHAIN)/bin:$(PATH)
|
||||
endif
|
||||
endif
|
||||
|
||||
PREFIX := arm-none-eabi-
|
||||
PREFIX :=
|
||||
OBJCOPY := $(PREFIX)objcopy
|
||||
OBJDUMP := $(PREFIX)objdump
|
||||
CC := $(PREFIX)gcc
|
||||
AS := $(PREFIX)as
|
||||
|
||||
LD := $(PREFIX)ld
|
||||
SDL_DIR := /k/gba/pokeemerald-pc/SDL-1.2.15
|
||||
ASM_PSEUDO_OP_CONV := sed -e 's/\.4byte/\.int/g;s/\.2byte/\.short/g'
|
||||
|
||||
# note: the makefile must be set up so MODERNCC is never called
|
||||
# if MODERN=0
|
||||
MODERNCC := $(PREFIX)gcc
|
||||
PATH_MODERNCC := PATH=$(TOOLCHAIN)/bin:PATH $(MODERNCC)
|
||||
export CPP := $(PREFIX)cpp
|
||||
export LD := $(PREFIX)ld
|
||||
|
||||
ifeq ($(OS),Windows_NT)
|
||||
EXE := .exe
|
||||
@ -36,91 +15,41 @@ else
|
||||
EXE :=
|
||||
endif
|
||||
|
||||
TITLE := POKEMON EMER
|
||||
GAME_CODE := BPEE
|
||||
MAKER_CODE := 01
|
||||
REVISION := 0
|
||||
MODERN ?= 0
|
||||
|
||||
ifeq (modern,$(MAKECMDGOALS))
|
||||
MODERN := 1
|
||||
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
|
||||
|
||||
ROM_NAME := tumbledemerald.gba
|
||||
ELF_NAME := $(ROM_NAME:.gba=.elf)
|
||||
MAP_NAME := $(ROM_NAME:.gba=.map)
|
||||
OBJ_DIR_NAME := build/tumbled
|
||||
|
||||
MODERN_ROM_NAME := tumbledemerald_modern.gba
|
||||
MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf)
|
||||
MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map)
|
||||
MODERN_OBJ_DIR_NAME := build/modern
|
||||
MODERN := 1
|
||||
|
||||
SHELL := /bin/bash -o pipefail
|
||||
|
||||
ELF = $(ROM:.gba=.elf)
|
||||
MAP = $(ROM:.gba=.map)
|
||||
SYM = $(ROM:.gba=.sym)
|
||||
|
||||
C_SUBDIR = src
|
||||
GFLIB_SUBDIR = gflib
|
||||
ASM_SUBDIR = asm
|
||||
DATA_SRC_SUBDIR = src/data
|
||||
DATA_ASM_SUBDIR = data
|
||||
SONG_SUBDIR = sound/songs
|
||||
MID_SUBDIR = sound/songs/midi
|
||||
SAMPLE_SUBDIR = sound/direct_sound_samples
|
||||
CRY_SUBDIR = sound/direct_sound_samples/cries
|
||||
|
||||
C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR)
|
||||
GFLIB_BUILDDIR = $(OBJ_DIR)/$(GFLIB_SUBDIR)
|
||||
ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR)
|
||||
DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR)
|
||||
SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR)
|
||||
MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR)
|
||||
|
||||
ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN)
|
||||
ASFLAGS := --32 --defsym MODERN=$(MODERN) --defsym PORTABLE=1
|
||||
|
||||
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)
|
||||
LIBPATH := -L ../../tools/agbcc/lib
|
||||
LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall
|
||||
else
|
||||
CC1 = $(shell $(PATH_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 := $(MODERN_ROM_NAME)
|
||||
OBJ_DIR := $(MODERN_OBJ_DIR_NAME)
|
||||
LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))"
|
||||
LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall
|
||||
endif
|
||||
GCC_VER := $(shell $(CC) -dumpversion)
|
||||
|
||||
CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN)
|
||||
ifneq ($(MODERN),1)
|
||||
CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef
|
||||
endif
|
||||
CC1 := $(shell $(PREFIX)gcc --print-prog-name=cc1) -quiet
|
||||
override CFLAGS += -Wno-trigraphs -Wimplicit -Wparentheses -Wunused -O0 -g -m32 -std=gnu99 -fno-leading-underscore -fno-dce -Wno-unused-function -DPORTABLE -DNONMATCHING
|
||||
ROM := pokeemerald_modern.gba
|
||||
OBJ_DIR := build/pc
|
||||
|
||||
CPPFLAGS := -iquote include -Wno-trigraphs -D NONMATCHING -D PORTABLE -I$(SDL_DIR)/include -L$(SDL_DIR)/lib
|
||||
|
||||
LDFLAGS = -Map ../../$(MAP)
|
||||
|
||||
LIB := $(LIBPATH) -lgcc -lc
|
||||
|
||||
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
|
||||
GFX := tools/gbagfx/gbagfx$(EXE)
|
||||
AIF := tools/aif2pcm/aif2pcm$(EXE)
|
||||
@ -132,14 +61,6 @@ FIX := tools/gbafix/gbafix$(EXE)
|
||||
MAPJSON := tools/mapjson/mapjson$(EXE)
|
||||
JSONPROC := tools/jsonproc/jsonproc$(EXE)
|
||||
|
||||
PERL := perl
|
||||
|
||||
TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*))
|
||||
TOOLBASE = $(TOOLDIRS:tools/%=%)
|
||||
TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE))
|
||||
|
||||
MAKEFLAGS += --no-print-directory
|
||||
|
||||
# Clear the default suffixes
|
||||
.SUFFIXES:
|
||||
# Don't delete intermediate files
|
||||
@ -150,50 +71,14 @@ 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: rom clean compare tidy tools mostlyclean clean-tools
|
||||
|
||||
infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
|
||||
|
||||
# Build tools when building the rom
|
||||
# Disable dependency scanning for clean/tidy/tools
|
||||
# Use a separate minimal makefile for speed
|
||||
# Since we don't need to reload most of this makefile
|
||||
ifeq (,$(filter-out all rom compare modern berry_fix libagbsyscall syms,$(MAKECMDGOALS)))
|
||||
$(call infoshell, $(MAKE) -f make_tools.mk)
|
||||
else
|
||||
NODEP ?= 1
|
||||
endif
|
||||
|
||||
# check if we need to scan dependencies based on the rule
|
||||
ifeq (,$(MAKECMDGOALS))
|
||||
SCAN_DEPS ?= 1
|
||||
else
|
||||
# clean, tidy, tools, mostlyclean, clean-tools, $(TOOLDIRS), tidymodern, tidynonmodern don't even build the ROM
|
||||
# berry_fix and libagbsyscall do their own thing
|
||||
ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) tidymodern tidynonmodern berry_fix libagbsyscall,$(MAKECMDGOALS)))
|
||||
SCAN_DEPS ?= 0
|
||||
else
|
||||
SCAN_DEPS ?= 1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(SCAN_DEPS),1)
|
||||
C_SRCS_IN := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
|
||||
C_SRCS := $(foreach src,$(C_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src)))
|
||||
C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
|
||||
C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
|
||||
|
||||
GFLIB_SRCS := $(wildcard $(GFLIB_SUBDIR)/*.c)
|
||||
GFLIB_OBJS := $(patsubst $(GFLIB_SUBDIR)/%.c,$(GFLIB_BUILDDIR)/%.o,$(GFLIB_SRCS))
|
||||
|
||||
C_ASM_SRCS += $(wildcard $(C_SUBDIR)/*.s $(C_SUBDIR)/*/*.s $(C_SUBDIR)/*/*/*.s)
|
||||
C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS))
|
||||
|
||||
ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
|
||||
#ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
|
||||
ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS))
|
||||
|
||||
# get all the data/*.s files EXCEPT the ones with specific rules
|
||||
REGULAR_DATA_ASM_SRCS := $(filter-out $(DATA_ASM_SUBDIR)/maps.s $(DATA_ASM_SUBDIR)/map_events.s, $(wildcard $(DATA_ASM_SUBDIR)/*.s))
|
||||
|
||||
DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s)
|
||||
DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS))
|
||||
|
||||
@ -203,61 +88,51 @@ SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS))
|
||||
MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid)
|
||||
MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS))
|
||||
|
||||
OBJS := $(C_OBJS) $(GFLIB_OBJS) $(C_ASM_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS)
|
||||
OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS)
|
||||
OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
|
||||
|
||||
SUBDIRS := $(sort $(dir $(OBJS)))
|
||||
$(shell mkdir -p $(SUBDIRS))
|
||||
endif
|
||||
|
||||
AUTO_GEN_TARGETS :=
|
||||
|
||||
all: rom
|
||||
TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*))
|
||||
TOOLBASE = $(TOOLDIRS:tools/%=%)
|
||||
TOOLS = $(foreach tool,$(TOOLBASE),tools/%(tool)/$(tool)$(EXE))
|
||||
|
||||
tools: $(TOOLDIRS)
|
||||
$(shell mkdir -p $(SUBDIRS))
|
||||
|
||||
syms: $(SYM)
|
||||
all: tools rom
|
||||
|
||||
$(TOOLDIRS):
|
||||
@$(MAKE) -C $@
|
||||
tools: $(TOOLS)
|
||||
|
||||
$(TOOLS):
|
||||
@$(foreach tooldir,$(TOOLDIRS),$(MAKE) -C $(tooldir);)
|
||||
|
||||
rom: $(ROM)
|
||||
ifeq ($(COMPARE),1)
|
||||
@$(SHA1) rom.sha1
|
||||
endif
|
||||
|
||||
# For contributors to make sure a change didn't affect the contents of the ROM.
|
||||
compare: all
|
||||
@$(SHA1) rom.sha1
|
||||
|
||||
clean: mostlyclean clean-tools
|
||||
|
||||
clean-tools:
|
||||
@$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);)
|
||||
|
||||
mostlyclean: tidynonmodern tidymodern
|
||||
rm -f $(SAMPLE_SUBDIR)/*.bin
|
||||
rm -f $(CRY_SUBDIR)/*.bin
|
||||
mostlyclean: tidy
|
||||
rm -f sound/direct_sound_samples/*.bin
|
||||
rm -f $(MID_SUBDIR)/*.s
|
||||
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
|
||||
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
|
||||
rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc
|
||||
rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc
|
||||
find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} +
|
||||
rm -f $(AUTO_GEN_TARGETS)
|
||||
@$(MAKE) clean -C berry_fix
|
||||
@$(MAKE) clean -C libagbsyscall
|
||||
|
||||
tidy: tidynonmodern tidymodern
|
||||
|
||||
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
|
||||
tidy:
|
||||
rm -f $(ROM) $(ELF) $(MAP)
|
||||
rm -r $(OBJ_DIR)
|
||||
ifeq ($(MODERN),0)
|
||||
@$(MAKE) tidy MODERN=1
|
||||
endif
|
||||
|
||||
include graphics_file_rules.mk
|
||||
@ -278,129 +153,44 @@ include songs.mk
|
||||
%.gbapal: %.png ; $(GFX) $< $@
|
||||
%.lz: % ; $(GFX) $< $@
|
||||
%.rl: % ; $(GFX) $< $@
|
||||
$(CRY_SUBDIR)/%.bin: $(CRY_SUBDIR)/%.aif ; $(AIF) $< $@ --compress
|
||||
sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(AIF) $< $@ --compress
|
||||
sound/%.bin: sound/%.aif ; $(AIF) $< $@
|
||||
|
||||
|
||||
ifeq ($(MODERN),0)
|
||||
$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE)
|
||||
$(C_BUILDDIR)/libc.o: CFLAGS := -O2
|
||||
%src/platform/sdl2.o: CFLAGS += -fleading-underscore -O3
|
||||
|
||||
$(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork
|
||||
|
||||
$(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)/record_mixing.o: CFLAGS += -ffreestanding
|
||||
$(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
|
||||
endif
|
||||
|
||||
ifeq ($(DDEBUG), 1)
|
||||
override ASFLAGS += --defsym DEBUG=1
|
||||
override CPPFLAGS += -D DEBUG=1
|
||||
endif
|
||||
|
||||
ifeq ($(DINFO),1)
|
||||
override CFLAGS += -g
|
||||
endif
|
||||
|
||||
# The dep rules have to be explicit or else missing files won't be reported.
|
||||
# As a side effect, they're evaluated immediately instead of when the rule is invoked.
|
||||
# It doesn't look like $(shell) can be deferred so there might not be a better way.
|
||||
|
||||
ifeq ($(SCAN_DEPS),1)
|
||||
ifeq ($(NODEP),1)
|
||||
$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c
|
||||
ifeq (,$(KEEP_TEMPS))
|
||||
@echo "$(CC1) <flags> -o $@ $<"
|
||||
@$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
|
||||
$(C_BUILDDIR)/%.o: c_dep :=
|
||||
else
|
||||
$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c)
|
||||
endif
|
||||
|
||||
$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
|
||||
@$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
|
||||
@$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s
|
||||
@echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s
|
||||
$(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
|
||||
endif
|
||||
else
|
||||
define C_DEP
|
||||
$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2)
|
||||
ifeq (,$$(KEEP_TEMPS))
|
||||
@echo "$$(CC1) <flags> -o $$@ $$<"
|
||||
@$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
|
||||
else
|
||||
@$$(CPP) $$(CPPFLAGS) $$< -o $$(C_BUILDDIR)/$3.i
|
||||
@$$(PREPROC) $$(C_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(C_BUILDDIR)/$3.s
|
||||
@echo -e ".text\n\t.align\t2, 0\n" >> $$(C_BUILDDIR)/$3.s
|
||||
$$(AS) $$(ASFLAGS) -o $$@ $$(C_BUILDDIR)/$3.s
|
||||
endif
|
||||
endef
|
||||
$(foreach src, $(C_SRCS), $(eval $(call C_DEP,$(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(C_SUBDIR)/%.c,%,$(src)))))
|
||||
endif
|
||||
|
||||
ifeq ($(NODEP),1)
|
||||
$(GFLIB_BUILDDIR)/%.o: $(GFLIB_SUBDIR)/%.c $$(c_dep)
|
||||
ifeq (,$(KEEP_TEMPS))
|
||||
@echo "$(CC1) <flags> -o $@ $<"
|
||||
@$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
|
||||
$(ASM_BUILDDIR)/%.o: asm_dep :=
|
||||
else
|
||||
@$(CPP) $(CPPFLAGS) $< -o $(GFLIB_BUILDDIR)/$*.i
|
||||
@$(PREPROC) $(GFLIB_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(GFLIB_BUILDDIR)/$*.s
|
||||
@echo -e ".text\n\t.align\t2, 0\n" >> $(GFLIB_BUILDDIR)/$*.s
|
||||
$(AS) $(ASFLAGS) -o $@ $(GFLIB_BUILDDIR)/$*.s
|
||||
endif
|
||||
else
|
||||
define GFLIB_DEP
|
||||
$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2)
|
||||
ifeq (,$$(KEEP_TEMPS))
|
||||
@echo "$$(CC1) <flags> -o $$@ $$<"
|
||||
@$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
|
||||
else
|
||||
@$$(CPP) $$(CPPFLAGS) $$< -o $$(GFLIB_BUILDDIR)/$3.i
|
||||
@$$(PREPROC) $$(GFLIB_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(GFLIB_BUILDDIR)/$3.s
|
||||
@echo -e ".text\n\t.align\t2, 0\n" >> $$(GFLIB_BUILDDIR)/$3.s
|
||||
$$(AS) $$(ASFLAGS) -o $$@ $$(GFLIB_BUILDDIR)/$3.s
|
||||
endif
|
||||
endef
|
||||
$(foreach src, $(GFLIB_SRCS), $(eval $(call GFLIB_DEP,$(patsubst $(GFLIB_SUBDIR)/%.c,$(GFLIB_BUILDDIR)/%.o, $(src)),$(src),$(patsubst $(GFLIB_SUBDIR)/%.c,%, $(src)))))
|
||||
$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) -I "" $(ASM_SUBDIR)/$*.s)
|
||||
endif
|
||||
|
||||
ifeq ($(NODEP),1)
|
||||
$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s
|
||||
$(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@
|
||||
else
|
||||
define SRC_ASM_DATA_DEP
|
||||
$1: $2 $$(shell $(SCANINC) -I include -I "" $2)
|
||||
$$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@
|
||||
endef
|
||||
$(foreach src, $(C_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o, $(src)),$(src))))
|
||||
endif
|
||||
|
||||
ifeq ($(NODEP),1)
|
||||
$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s
|
||||
$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep)
|
||||
$(AS) $(ASFLAGS) -o $@ $<
|
||||
else
|
||||
define ASM_DEP
|
||||
$1: $2 $$(shell $(SCANINC) -I include -I "" $2)
|
||||
$$(AS) $$(ASFLAGS) -o $$@ $$<
|
||||
endef
|
||||
$(foreach src, $(ASM_SRCS), $(eval $(call ASM_DEP,$(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o, $(src)),$(src))))
|
||||
endif
|
||||
|
||||
ifeq ($(NODEP),1)
|
||||
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s
|
||||
$(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@
|
||||
$(DATA_ASM_BUILDDIR)/%.o: data_dep :=
|
||||
else
|
||||
$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src))))
|
||||
endif
|
||||
$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) -I include -I "" $(DATA_ASM_SUBDIR)/$*.s)
|
||||
endif
|
||||
|
||||
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep)
|
||||
$(PREPROC) $< charmap.txt | $(CPP) -I include | $(ASM_PSEUDO_OP_CONV) | $(AS) $(ASFLAGS) -o $@
|
||||
|
||||
$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s
|
||||
$(AS) $(ASFLAGS) -I sound -o $@ $<
|
||||
$(ASM_PSEUDO_OP_CONV) $< | $(AS) $(ASFLAGS) -I sound -o $@
|
||||
|
||||
$(OBJ_DIR)/sym_bss.ld: sym_bss.txt
|
||||
$(RAMSCRGEN) .bss $< ENGLISH > $@
|
||||
@ -422,28 +212,17 @@ endif
|
||||
$(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 ../../$@ <objects> <lib>"
|
||||
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB)
|
||||
$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
|
||||
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)
|
||||
#$(OBJCOPY) -O binary $< $@
|
||||
#$(FIX) $@ -p --silent
|
||||
|
||||
$(ROM): $(ELF)
|
||||
$(OBJCOPY) -O binary $< $@
|
||||
$(FIX) $@ -p --silent
|
||||
pokeemerald.exe: $(OBJS)
|
||||
$(CC) $(CFLAGS) -Wl,--demangle $^ -L$(SDL_DIR)/lib -lmingw32 -lSDLmain -lSDL.dll -lwinmm -static-libgcc -o $@
|
||||
|
||||
modern: all
|
||||
$(ROM): pokeemerald.exe
|
||||
@:
|
||||
|
||||
berry_fix/berry_fix.gba: berry_fix
|
||||
|
||||
berry_fix:
|
||||
@$(MAKE) -C berry_fix COMPARE=$(COMPARE) TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN)
|
||||
|
||||
libagbsyscall:
|
||||
@$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN)
|
||||
|
||||
###################
|
||||
### Symbol file ###
|
||||
###################
|
||||
|
||||
$(SYM): $(ELF)
|
||||
$(OBJDUMP) -t $< | sort -u | grep -E "^0[2389]" | $(PERL) -p -e 's/^(\w{8}) (\w).{6} \S+\t(\w{8}) (\S+)$$/\1 \2 \3 \4/g' > $@
|
||||
modern: ; @$(MAKE) MODERN=1
|
||||
|
101
README.md
101
README.md
@ -1,82 +1,39 @@
|
||||
# tumbledemerald
|
||||
# tumbledemerald [![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#rebirthteam:matrix.org)
|
||||
|
||||
## Description
|
||||
tumbledemerald is a hack based on the [decompilation](https://github.com/pret/pokeemerald) of Pokémon Emerald by pret. The project's aim is to modify Pokémon Emerald to bring it up to the standards of modern Pokémon titles.
|
||||
This is a decompilation of Pokémon Emerald, with many improvements and edits, similar to Rangi42's [polishedcrystal](https://github.com/Rangi42/polishedcrystal)
|
||||
|
||||
It builds the following ROM:
|
||||
|
||||
**tumbledemerald.gba**
|
||||
|
||||
To set up the repository, see [INSTALL.md](INSTALL.md), or see our `utilities` repo for buildscripts
|
||||
|
||||
|
||||
[<img src="https://img.shields.io/badge/Gitpod-Open%20workspace-orange.svg?logo=GITPOD&style=for-the-badge">](https://gitpod.io/#gitgud.io/tbld/game.git) [<img src="https://img.shields.io/badge/Mastodon-gray.svg?logo=MASTODON&style=for-the-badge">](https://social.linux.pizza/@sataa)
|
||||
Here is the last time Tumbled was updated to `pret:master`
|
||||
|
||||
## Installation
|
||||
Compiling tumbledemerald requires a Linux-based system with the following packages installed:
|
||||
**20 December 2021**
|
||||
|
||||
- make (or GNU make, if you have access to it specifically.)
|
||||
- gcc
|
||||
- g++
|
||||
- git
|
||||
- GNU arm-none-eabi binutils
|
||||
## See also
|
||||
|
||||
(Bonus points for getting it to work with Clang, cmake, and non-GNU binutils, because rms gives me a headache.)
|
||||
Other disassembly and/or decompilation projects:
|
||||
* [**Pokémon Red and Blue**](https://github.com/pret/pokered)
|
||||
* [**Pokémon Gold and Silver (Space World '97 demo)**](https://github.com/pret/pokegold-spaceworld)
|
||||
* [**Pokémon Yellow**](https://github.com/pret/pokeyellow)
|
||||
* [**Pokémon Trading Card Game**](https://github.com/pret/poketcg)
|
||||
* [**Pokémon Pinball**](https://github.com/pret/pokepinball)
|
||||
* [**Pokémon Stadium**](https://github.com/pret/pokestadium)
|
||||
* [**Pokémon Gold and Silver**](https://github.com/pret/pokegold)
|
||||
* [**Pokémon Crystal**](https://github.com/pret/pokecrystal)
|
||||
* [**Pokémon Ruby and Sapphire**](https://github.com/pret/pokeruby)
|
||||
* [**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)
|
||||
* [**Pokémon Diamond and Pearl**](https://github.com/pret/pokediamond)
|
||||
* [**Pokémon HeartGold and SoulSilver**](https://github.com/pret/pokeheartgold)
|
||||
|
||||
Run this command to compile `agbcc`, pret's toolchain:
|
||||
```bash
|
||||
cd <path to tumbledemerald>/agbcc && ./build.sh && ./install.sh ../
|
||||
```
|
||||
Then just run `make` in the root folder of the repository.
|
||||
|
||||
If you're new to Linux-based systems or the build system in general, I recommend using Gitpod. If you opt to go that route, here's what you need to do:
|
||||
## Contacts
|
||||
|
||||
- Click the "Gitpod" button above.
|
||||
- If you haven't signed up for GitHub, GitLab, or Bitbucket before, follow the steps provided on Gitpod's site to set up an account.
|
||||
- You should launch into a tab with a terminal window at the bottom. Wait until you see `agbcc successfully installed!` in the terminal window before continuing.
|
||||
- Type "make" (without the quotes) into the terminal and press "Enter".
|
||||
You can slide into my **[matrix]** PM's: @fierymewtwo:matrix.org. However, there is an official Rebirth "room" (see the **[matrix]** badge above)
|
||||
|
||||
For more detailed compilation instructions, see [this](INSTALL.md) document.
|
||||
|
||||
## Usage
|
||||
tumbledemerald is a Game Boy Advance game. As such, you will need an [emulator](https://mgba.io) to play. The only supported emulator is [mGBA](https://mgba.io) by endrift.
|
||||
|
||||
## Support
|
||||
If you:
|
||||
|
||||
* found a bug or glitch: Create an [issue](https://gitgud.io/tbld/game/-/issues) using the Bug template.
|
||||
* need a save file updated: Create an [issue](https://gitgud.io/tbld/game/-/issues) using the Save Update template.
|
||||
* have an idea for a cool new feature: Create an [issue](https://gitgud.io/tbld/game/-/issues) using the Feature Request template.
|
||||
* want to contact me privately: Send me an [email](mailto:brodmoran@gmail.com) or send me a direct message on [Mastodon](https://social.linux.pizza/@sataa).
|
||||
* want to become a contributor: Send a merge request!
|
||||
|
||||
We also have a forum [here](https://tumbledforums.flarum.cloud/) if you're into that!
|
||||
|
||||
## Roadmap
|
||||
For the project roadmap, please check [here](ROADMAP.md).
|
||||
|
||||
## Contributing
|
||||
Contributions are welcome! Please make a merge request here on GitLab using the provided template.
|
||||
|
||||
We're currently looking for:
|
||||
|
||||
* someone who can work with GBA music (to add a custom song).
|
||||
* documentation contributions. Our documentation could use some updates!
|
||||
* Windows buildscripts.
|
||||
* volunteers to build CIA packages for tumbledemerald.
|
||||
* debug menu developers.
|
||||
* someone with a brain the size of Jupiter to un-GNU tumbledemerald.
|
||||
|
||||
See [Installation](#installation) for directions on how to set up your system to compile.
|
||||
|
||||
`make` will usually stop you if it sees something wrong with your code. If the error is too vague, try running `make` with the `-d` argument (`make -d`). However, the only way to be completely certain is to test.
|
||||
|
||||
## Notes
|
||||
By default, tumbledemerald does not include Wireless Adapter support. See [this script](https://gitgud.io/tbld/scripts/-/blob/main/enable_rfu.sh) to re-enable this (for playing on a Game Boy Advance flashcart, for example.)
|
||||
|
||||
## Authors and acknowledgment
|
||||
Lead developers: Supersonic and Werewolf
|
||||
CIA packages: Supersonic and SanicConnoissuer_91
|
||||
Prebuilt ROMS: Supersonic, creepyguy256, and SanicConnoissuer_91
|
||||
Features: ghoulslash, Supersonic, dunsparce9, AsparagusEduardo, surskitty, DizzyEgggg, Ketsuban (if I forgot you, please let me know!)
|
||||
Special thanks: SanicConnoissuer_91, Werewolf, creepyguy256, pret, Nintendo Co, Ltd., GAME FREAK, inc., Creatures, inc., and you!.
|
||||
|
||||
## License
|
||||
Due to legal reasons, tumbledemerald does not have a license. Ask ax6.
|
||||
|
||||
## Project status
|
||||
tumbledemerald is actively developed, with a new feature about once every week, if I feel like it.
|
||||
> The old GitHub repositories are now unmaintained, and all future development will take place on GitLab.
|
||||
|
@ -1,6 +0,0 @@
|
||||
## Roadmap for tumbledemerald:
|
||||
|
||||
### v3
|
||||
|
||||
* Combine Pokémon Centers and Marts into one map, similar to the current titles.
|
||||
* Remove HM moves and replace them with corresponding Key Items.
|
4
STYLE.md
4
STYLE.md
@ -2,10 +2,10 @@
|
||||
|
||||
These guidelines are to be applied to all code contributed to the `tumbledemerald` project.
|
||||
|
||||
- Decapitalise everything! For example, change "POKéMON" to "Pokémon". This is almost already done thanks to the Python script, but make sure to keep an eye out!
|
||||
- Decapitalise everything! For example, change "POKéMON" to "Pokémon". (not yet though)
|
||||
- Always type "Pokémon" with the "é" Unicode character!
|
||||
- When typing "Pokédex", make sure to type it without a capital "D".
|
||||
- Use good English at all times, except when it doesn't make sense to do so.
|
||||
- Use good English at all times.
|
||||
- Abide by an 85-character "soft limit" per line of code. (This includes comments)
|
||||
- If you decompile assembly (`.s` files) and a commit to `pret:master` later decompiles the same code, please revert your changes and add pret's
|
||||
C or C++ code instead.
|
||||
|
1
agbcc
1
agbcc
@ -1 +0,0 @@
|
||||
Subproject commit d59cfb5ac1ce13d4bc9875ffef1666b118338d33
|
@ -1378,7 +1378,7 @@ BattleFrontier_BattleTowerLobby_Text_ExplainMultiLinkRules:
|
||||
.string "The Link Multi Battle Mode is for two\n"
|
||||
.string "friends to mount a challenge together.\p"
|
||||
.string "You and your friend must be linked with\n"
|
||||
.string "Wireless Adapters or a GBA Game Link\l"
|
||||
.string "Wireless Adapters or a Gba Game Link\l"
|
||||
.string "cable.\p"
|
||||
.string "You must choose two Pokémon at\n"
|
||||
.string "the registration counter.\p"
|
||||
|
@ -118,19 +118,6 @@ DewfordTown_EventScript_FishingExcellent::
|
||||
|
||||
DewfordTown_EventScript_FishingNotSoGood::
|
||||
msgbox DewfordTown_Text_FishingAdvice, MSGBOX_DEFAULT
|
||||
goto_if_set FLAG_SYS_GAME_CLEAR, DewfordTown_EventScript_Intermediate_GiveOldSeaMap
|
||||
release
|
||||
end
|
||||
|
||||
DewfordTown_EventScript_Intermediate_GiveOldSeaMap::
|
||||
goto_if_unset FLAG_RECEIVED_OLD_SEA_MAP, DewfordTown_EventScript_GiveOldSeaMap
|
||||
release
|
||||
end
|
||||
|
||||
DewfordTown_EventScript_GiveOldSeaMap::
|
||||
msgbox DewfordTown_Text_MaybeExploringWouldBeBetter, MSGBOX_DEFAULT
|
||||
giveitem ITEM_OLD_SEA_MAP
|
||||
setflag FLAG_RECEIVED_OLD_SEA_MAP
|
||||
release
|
||||
end
|
||||
|
||||
@ -736,12 +723,6 @@ DewfordTown_Text_ThrowInFishingAdvice:
|
||||
.string "you need to time the pulls on your Rod\l"
|
||||
.string "to haul them in.$"
|
||||
|
||||
DewfordTown_Text_MaybeExploringWouldBeBetter:
|
||||
.string "Hmmm... Well, if you aren't having much\n"
|
||||
.string "luck with fishing...\l"
|
||||
.string "Maybe exploring would be a better\n"
|
||||
.string "fit for a Trainer like you?$"
|
||||
|
||||
DewfordTown_Text_ThatsTooBadThen:
|
||||
.string "Oh, is that so?\n"
|
||||
.string "That's too bad, then.$"
|
||||
|
@ -259,7 +259,6 @@ LittlerootTown_EventScript_Twin::
|
||||
faceplayer
|
||||
goto_if_set FLAG_ADVENTURE_STARTED, LittlerootTown_EventScript_GoodLuck
|
||||
goto_if_set FLAG_RESCUED_BIRCH, LittlerootTown_EventScript_YouSavedBirch
|
||||
goto_if_set FLAG_SYS_GAME_CLEAR, LittlerootTown_EventScript_Intermediate_DustyTickets
|
||||
goto_if_ne VAR_LITTLEROOT_TOWN_STATE, 0, LittlerootTown_EventScript_GoSaveBirch
|
||||
msgbox LittlerootTown_Text_IfYouGoInGrassPokemonWillJumpOut, MSGBOX_DEFAULT
|
||||
release
|
||||
@ -286,20 +285,6 @@ LittlerootTown_EventScript_GoodLuck::
|
||||
release
|
||||
end
|
||||
|
||||
LittlerootTown_EventScript_Intermediate_DustyTickets::
|
||||
goto_if_unset FLAG_AURORA_MYSTIC_RECEIVED, LittlerootTown_EventScript_DustyTickets
|
||||
end
|
||||
|
||||
LittlerootTown_EventScript_DustyTickets::
|
||||
msgbox LittlerootTown_Text_FoundTickets, MSGBOX_DEFAULT
|
||||
giveitem ITEM_MYSTIC_TICKET
|
||||
giveitem ITEM_AURORA_TICKET
|
||||
setflag FLAG_RECEIVED_AURORA_TICKET
|
||||
setflag FLAG_RECEIVED_MYSTIC_TICKET
|
||||
setflag FLAG_AURORA_MYSTIC_RECEIVED @ because I'm bad at hacking.
|
||||
release
|
||||
end
|
||||
|
||||
LittlerootTown_EventScript_NeedPokemonTriggerLeft::
|
||||
lockall
|
||||
applymovement LOCALID_TWIN, LittlerootTown_Movement_TwinApproachPlayerLeft
|
||||
@ -1012,13 +997,6 @@ LittlerootTown_Text_GoodLuckCatchingPokemon:
|
||||
.string "Are you going to catch Pokémon?\n"
|
||||
.string "Good luck!$"
|
||||
|
||||
LittlerootTown_Text_FoundTickets:
|
||||
.string "Um, hi!\p"
|
||||
.string "I found these in an old suitcase. My\n"
|
||||
.string "daddy doesn't want them, so I decided\n"
|
||||
.string "to give these to you!$"
|
||||
|
||||
|
||||
LittlerootTown_Text_TownSign:
|
||||
.string "Littleroot Town\n"
|
||||
.string "“A town that can't be shaded any hue.”$"
|
||||
|
@ -1258,7 +1258,7 @@ EventScript_CloseMossdeepGameCornerBarrier::
|
||||
return
|
||||
|
||||
CableClub_OnResume:
|
||||
@ special InitUnionRoom commented out by default, but can be easily re-enabled, see docs.
|
||||
special InitUnionRoom
|
||||
end
|
||||
|
||||
MossdeepCity_GameCorner_1F_EventScript_InfoMan2::
|
||||
|
@ -17,7 +17,7 @@ EventScript_PkmnCenterNurse_HealPkmn::
|
||||
waitmessage
|
||||
call EventScript_PkmnCenterNurse_TakeAndHealPkmn
|
||||
goto_if_unset FLAG_POKERUS_EXPLAINED, EventScript_PkmnCenterNurse_CheckPokerus
|
||||
goto EventScript_PkmnCenterNurse_ReturnPkmn
|
||||
goto EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom
|
||||
end
|
||||
|
||||
EventScript_PkmnCenterNurse_IllTakeYourPkmn::
|
||||
@ -75,7 +75,7 @@ EventScript_PkmnCenterNurse_PlayerWaitingInUnionRoom::
|
||||
EventScript_PkmnCenterNurse_CheckPokerus::
|
||||
specialvar VAR_RESULT, IsPokerusInParty
|
||||
goto_if_eq VAR_RESULT, TRUE, EventScript_PkmnCenterNurse_ExplainPokerus
|
||||
goto_if_eq VAR_RESULT, FALSE, EventScript_PkmnCenterNurse_ReturnPkmn
|
||||
goto_if_eq VAR_RESULT, FALSE, EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom
|
||||
end
|
||||
|
||||
EventScript_PkmnCenterNurse_ExplainPokerus::
|
||||
|
@ -116,7 +116,7 @@ PlayersHouse_2F_EventScript_SetWallClock::
|
||||
|
||||
PlayersHouse_2F_Movement_MomEntersMale:
|
||||
delay_8
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_in_place_faster_left
|
||||
delay_16
|
||||
delay_8
|
||||
@ -124,18 +124,18 @@ PlayersHouse_2F_Movement_MomEntersMale:
|
||||
step_end
|
||||
|
||||
PlayersHouse_2F_Movement_MomExitsMale:
|
||||
walk_faster_right
|
||||
walk_right
|
||||
walk_up
|
||||
delay_8
|
||||
step_end
|
||||
|
||||
PlayersHouse_2F_Movement_MomEntersFemale:
|
||||
delay_8
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_in_place_faster_right
|
||||
delay_16
|
||||
delay_8
|
||||
walk_faster_right
|
||||
walk_right
|
||||
step_end
|
||||
|
||||
PlayersHouse_2F_Movement_MomExitsFemale:
|
||||
@ -221,11 +221,11 @@ PlayersHouse_1F_EventScript_WatchGymBroadcast::
|
||||
|
||||
PlayersHouse_1F_Movement_MomApproachDadMale:
|
||||
walk_up
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_faster_down
|
||||
walk_right
|
||||
walk_right
|
||||
walk_right
|
||||
walk_right
|
||||
walk_down
|
||||
walk_in_place_faster_right
|
||||
step_end
|
||||
|
||||
@ -235,12 +235,12 @@ PlayersHouse_1F_Movement_MomApproachDadFemale:
|
||||
walk_left
|
||||
walk_left
|
||||
walk_left
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_in_place_faster_left
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_MomApproachPlayerMale:
|
||||
walk_faster_right
|
||||
walk_right
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_MomApproachPlayerFemale:
|
||||
@ -277,8 +277,8 @@ PlayersHouse_1F_Movement_MomApproachPlayerAfterTVMale:
|
||||
|
||||
PlayersHouse_1F_Movement_MomApproachPlayerAfterTVFemale:
|
||||
walk_up
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_right
|
||||
walk_right
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_MomMakeRoomToSeeTVMale:
|
||||
@ -287,19 +287,19 @@ PlayersHouse_1F_Movement_MomMakeRoomToSeeTVMale:
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_MomMakeRoomToSeeTVFemale:
|
||||
walk_faster_right
|
||||
walk_right
|
||||
walk_in_place_faster_left
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_MomReturnToSeatMale:
|
||||
walk_left
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_in_place_faster_right
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_MomReturnToSeatFemale:
|
||||
walk_faster_right
|
||||
walk_faster_down
|
||||
walk_right
|
||||
walk_down
|
||||
walk_in_place_faster_left
|
||||
step_end
|
||||
|
||||
@ -393,27 +393,27 @@ PlayersHouse_1F_EventScript_Vigoroth2::
|
||||
end
|
||||
|
||||
PlayersHouse_1F_Movement_PlayerApproachTVForGymMale:
|
||||
walk_faster_down
|
||||
walk_faster_down
|
||||
walk_faster_left
|
||||
walk_faster_left
|
||||
walk_faster_left
|
||||
walk_down
|
||||
walk_down
|
||||
walk_left
|
||||
walk_left
|
||||
walk_left
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_PlayerMoveToTVMale:
|
||||
walk_faster_left
|
||||
walk_left
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_PlayerApproachTVForGymFemale:
|
||||
walk_faster_down
|
||||
walk_faster_down
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_down
|
||||
walk_down
|
||||
walk_right
|
||||
walk_right
|
||||
walk_right
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_PlayerMoveToTVFemale:
|
||||
walk_faster_right
|
||||
walk_right
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_MovePlayerAwayFromDoor:
|
||||
@ -603,8 +603,8 @@ PlayersHouse_1F_EventScript_MomApproachPlayerAfterTVFemale::
|
||||
return
|
||||
|
||||
PlayersHouse_1F_Movement_DadApproachPlayerMale:
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_right
|
||||
walk_right
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_DadApproachPlayerFemale:
|
||||
@ -621,24 +621,24 @@ PlayersHouse_1F_Movement_DadFaceMomFemale:
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_DadExitsMale:
|
||||
walk_faster_down
|
||||
walk_faster_right
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_right
|
||||
walk_down
|
||||
delay_8
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_DadExitsFemale:
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_left
|
||||
walk_faster_down
|
||||
walk_down
|
||||
delay_8
|
||||
step_end
|
||||
|
||||
PlayersHouse_1F_Movement_PlayerEnterRoomMale:
|
||||
delay_16
|
||||
walk_faster_down
|
||||
walk_faster_down
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_down
|
||||
walk_down
|
||||
walk_in_place_faster_left
|
||||
step_end
|
||||
|
||||
@ -651,9 +651,9 @@ PlayersHouse_1F_Movement_MomAndPlayerWatchDadExit:
|
||||
|
||||
PlayersHouse_1F_Movement_PlayerEnterRoomFemale:
|
||||
delay_16
|
||||
walk_faster_down
|
||||
walk_faster_down
|
||||
walk_faster_down
|
||||
walk_down
|
||||
walk_down
|
||||
walk_down
|
||||
walk_in_place_faster_right
|
||||
step_end
|
||||
|
||||
@ -668,10 +668,10 @@ PlayersHouse_1F_Movement_PlayerApproachTVForLatiMale:
|
||||
|
||||
PlayersHouse_1F_Movement_PlayerApproachTVForLatiFemale:
|
||||
walk_up
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_faster_right
|
||||
walk_right
|
||||
walk_right
|
||||
walk_right
|
||||
walk_right
|
||||
walk_in_place_faster_up
|
||||
step_end
|
||||
|
||||
|
@ -10,15 +10,15 @@ CableClub_Text_WhichService:
|
||||
|
||||
CableClub_Text_TradeUsingLinkCable::
|
||||
.string "Trade Pokémon with another player\n"
|
||||
.string "using a GBA Game Link cable.$"
|
||||
.string "using a Gba Game Link cable.$"
|
||||
|
||||
CableClub_Text_BattleUsingLinkCable::
|
||||
.string "You may battle another Trainer\n"
|
||||
.string "using a GBA Game Link cable.$"
|
||||
.string "using a Gba Game Link cable.$"
|
||||
|
||||
CableClub_Text_RecordCornerUsingLinkCable::
|
||||
.string "You can use the Record Corner with\n"
|
||||
.string "others using a GBA Game Link cable.$"
|
||||
.string "others using a Gba Game Link cable.$"
|
||||
|
||||
@ Unused
|
||||
CableClub_Text_CloseThisMenu:
|
||||
@ -440,7 +440,7 @@ CableClub_Text_ExplainWirelessClubFirstTime:
|
||||
.string "with your friends in this room.\p"
|
||||
.string "If the Wireless Adapter isn't\n"
|
||||
.string "connected, you may still link up\l"
|
||||
.string "using a GBA Game Link cable.\p"
|
||||
.string "using a Gba Game Link cable.\p"
|
||||
.string "If that is the case, you must go\n"
|
||||
.string "to the Direct Corner.\p"
|
||||
.string "I hope you enjoy the Wireless \n"
|
||||
@ -476,7 +476,7 @@ CableClub_Text_ExplainWirelessClub:
|
||||
.string "to your friends.\p"
|
||||
.string "If the Wireless Adapter isn't\n"
|
||||
.string "connected, you may still link up\l"
|
||||
.string "using a GBA Game Link cable.\p"
|
||||
.string "using a Gba Game Link cable.\p"
|
||||
.string "If that is the case, you must go\n"
|
||||
.string "to the Direct Corner.\p"
|
||||
.string "I hope you enjoy the Wireless \n"
|
||||
|
3
decap.py
3
decap.py
@ -1,4 +1,3 @@
|
||||
# Got this from a GitHub gist somewhere. If you made this, please reach out so I can add you to the credits!
|
||||
from glob import iglob
|
||||
import re
|
||||
|
||||
@ -94,4 +93,4 @@ if __name__ == "__main__":
|
||||
perform_decap(path, c_string_pattern, is_glob)
|
||||
|
||||
for path, is_glob in asm_files:
|
||||
perform_decap(path, asm_string_pattern, is_glob)
|
||||
perform_decap(path, asm_string_pattern, is_glob)
|
@ -16,7 +16,7 @@ Fixes are written in the `diff` format. If you've used Git before, this should l
|
||||
- [Scrolling through items in the bag causes the image to flicker](#scrolling-through-items-in-the-bag-causes-the-image-to-flicker)
|
||||
|
||||
|
||||
## Scrolling through items in the bag causes the image to flicker (fixed in tumbledemerald.)
|
||||
## Scrolling through items in the bag causes the image to flicker
|
||||
|
||||
**Fix:** Add the following function to [src/item_menu_icons.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu_icons.c):
|
||||
```diff
|
||||
|
@ -97,7 +97,7 @@
|
||||
#define FLAG_LEGENDARIES_IN_SOOTOPOLIS 0x53
|
||||
|
||||
#define FLAG_REMOVE_WARP_FADE 0x54 // Custom flag used in tumbledemerald.
|
||||
#define FLAG_AURORA_MYSTIC_RECEIVED 0x55 // Custom flag used in tumbledemerald. Basically a workaround.
|
||||
#define FLAG_UNUSED_0x055 0x55 // Unused Flag
|
||||
|
||||
#define FLAG_HIDE_CONTEST_POKE_BALL 0x56 // Always set after new game, object it hides is added directly
|
||||
#define FLAG_MET_RIVAL_MOM 0x57
|
||||
|
BIN
pokeemerald-0.png
Normal file
BIN
pokeemerald-0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
pokeemerald-1.png
Normal file
BIN
pokeemerald-1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
1
rom.sha1
Normal file
1
rom.sha1
Normal file
@ -0,0 +1 @@
|
||||
f3ae088181bf583e55daf962a92bb46f4f1d07b7 pokeemerald.gba
|
@ -322,16 +322,6 @@ static void HandleInputChooseAction(void)
|
||||
BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_CANCEL_PARTNER, 0);
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) //if wild, pressing B moves cursor to run
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]);
|
||||
gActionSelectionCursor[gActiveBattler] = 3;
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (JOY_NEW(START_BUTTON))
|
||||
{
|
||||
|
@ -189,7 +189,7 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] =
|
||||
[MOVE_SWEET_KISS] = _("Sweet Kiss"),
|
||||
[MOVE_BELLY_DRUM] = _("Belly Drum"),
|
||||
[MOVE_SLUDGE_BOMB] = _("Sludge Bomb"),
|
||||
[MOVE_MUD_SLAP] = _("Mud-Slap"),
|
||||
[MOVE_MUD_SLAP] = _("Mud-slap"),
|
||||
[MOVE_OCTAZOOKA] = _("Octazooka"),
|
||||
[MOVE_SPIKES] = _("Spikes"),
|
||||
[MOVE_ZAP_CANNON] = _("Zap Cannon"),
|
||||
|
@ -69,8 +69,6 @@ u8 gLinkVSyncDisabled;
|
||||
u32 IntrMain_Buffer[0x200];
|
||||
s8 gPcmDmaCounter;
|
||||
|
||||
extern void CB2_FlashNotDetectedScreen(void); // for Crust's sake use mGBA, people!
|
||||
|
||||
static EWRAM_DATA u16 gTrainerId = 0;
|
||||
|
||||
//EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
|
||||
@ -116,7 +114,7 @@ void AgbMain()
|
||||
gSoftResetDisabled = FALSE;
|
||||
|
||||
if (gFlashMemoryPresent != TRUE)
|
||||
SetMainCallback2(CB2_FlashNotDetectedScreen);
|
||||
SetMainCallback2(NULL);
|
||||
|
||||
gLinkTransferringData = FALSE;
|
||||
sUnusedVar = 0xFC0;
|
||||
|
@ -401,50 +401,3 @@ static bool8 WipeSectors(u32 sectorBits)
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CB2_FlashNotDetectedScreen(void){
|
||||
static const struct WindowTemplate textWin[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 3,
|
||||
.tilemapTop = 2,
|
||||
.width = 24,
|
||||
.height = 16,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static const char errorMsg[] = _(
|
||||
"{COLOR RED}Hey!\n"
|
||||
"{COLOR DARK_GRAY}Flash memory not detected.\n\n"
|
||||
"Please make sure you\nare playing the game\n"
|
||||
"on the mGBA emu-\nlator"
|
||||
);
|
||||
|
||||
if (!gMain.state){
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0CNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0HOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||
DmaFill16(3, 0, VRAM, VRAM_SIZE);
|
||||
DmaFill32(3, 0, OAM, OAM_SIZE);
|
||||
DmaFill16(3, 0, PLTT, PLTT_SIZE);
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
|
||||
LoadBgTiles(0, gTextWindowFrame1_Gfx, 0x120, 0x214);
|
||||
DeactivateAllTextPrinters();
|
||||
ResetTasks();
|
||||
ResetPaletteFade();
|
||||
LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20);
|
||||
LoadPalette(gStandardMenuPalette, 0xF0, 0x20);
|
||||
InitWindows(textWin);
|
||||
DrawStdFrameWithCustomTileAndPalette(0, TRUE, 0x214, 0xE);
|
||||
SaveFailedScreenTextPrint(errorMsg, 1, 0);
|
||||
TransferPlttBuffer();
|
||||
*(u16*)PLTT = RGB(17, 18, 31);
|
||||
ShowBg(0);
|
||||
gMain.state++;
|
||||
}
|
||||
}
|
||||
|
@ -1180,7 +1180,7 @@ const u8 gText_ThunderWave48BP[] = _("Thunder Wave{CLEAR_TO 0x4E}48Bp");
|
||||
const u8 gText_SwordsDance48BP[] = _("Swords Dance{CLEAR_TO 0x4E}48Bp");
|
||||
const u8 gText_DefenseCurl16BP[] = _("Defense Curl{CLEAR_TO 0x4E}16Bp");
|
||||
const u8 gText_Snore24BP[] = _("Snore{CLEAR_TO 0x4E}24Bp");
|
||||
const u8 gText_MudSlap24BP[] = _("Mud-Slap{CLEAR_TO 0x4E}24Bp");
|
||||
const u8 gText_MudSlap24BP[] = _("Mud-slap{CLEAR_TO 0x4E}24Bp");
|
||||
const u8 gText_Swift24BP[] = _("Swift{CLEAR_TO 0x4E}24Bp");
|
||||
const u8 gText_IcyWind24BP[] = _("Icy Wind{CLEAR_TO 0x4E}24Bp");
|
||||
const u8 gText_Endure48BP[] = _("Endure{CLEAR_TO 0x4E}48Bp");
|
||||
|
Loading…
Reference in New Issue
Block a user