Merge branch 'master' into navdata

This commit is contained in:
garak
2019-07-20 12:30:41 -04:00
committed by GitHub
96 changed files with 4362 additions and 897 deletions
+2 -1
View File
@@ -30,7 +30,8 @@ matrix:
- g++-7 - g++-7
env: _="Build" env: _="Build"
script: script:
- ./build_tools.sh g++-7 - make -j2 tools CXX=g++-7
- make -j2 compare - make -j2 compare
- make -j2 modern
after_success: after_success:
- .travis/calcrom/webhook.sh pokeemerald - .travis/calcrom/webhook.sh pokeemerald
+19 -6
View File
@@ -13,12 +13,6 @@ Then get the compiler from https://github.com/pret/agbcc and run the following c
./install.sh PATH_OF_POKEEMERALD_DIRECTORY ./install.sh PATH_OF_POKEEMERALD_DIRECTORY
``` ```
Then in the pokeemerald directory, build the tools.
```
./build_tools.sh
```
Finally, build the rom. Finally, build the rom.
``` ```
@@ -101,3 +95,22 @@ If you've only changed `.c` or `.s` files, you can turn off the dependency scann
`make NODEP=1` `make NODEP=1`
# Building with devkitARM's C compiler
This project supports the `arm-none-eabi-gcc` compiler which ships with devkitARM r52. To build this target, simply run:
make modern
# Building with your own toolchain
To build Pokemon Emerald with a toolchain other than devkitARM, override the `TOOLCHAIN` environment variable with the path to your toolchain. Example:
make compare TOOLCHAIN=/usr/local/arm-none-eabi
The path you pass to the `TOOLCHAIN` variable must contain the subdirectory `bin`. If you compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present.
# Building with debug info
To build the ELF file with enhanced debug info, use the `DINFO` variable:
make compare DINFO=1
+69 -15
View File
@@ -1,4 +1,12 @@
include $(DEVKITARM)/base_tools TOOLCHAIN := $(DEVKITARM)
ifneq (,$(wildcard $(TOOLCHAIN)/base_tools))
include $(TOOLCHAIN)/base_tools
else
PREFIX := $(TOOLCHAIN)/bin/arm-none-eabi-
OBJCOPY := $(PREFIX)objcopy
CC := $(PREFIX)gcc
AS := $(PREFIX)as
endif
export CPP := $(PREFIX)cpp export CPP := $(PREFIX)cpp
export LD := $(PREFIX)ld export LD := $(PREFIX)ld
@@ -12,12 +20,10 @@ TITLE := POKEMON EMER
GAME_CODE := BPEE GAME_CODE := BPEE
MAKER_CODE := 01 MAKER_CODE := 01
REVISION := 0 REVISION := 0
MODERN ?= 0
SHELL := /bin/bash -o pipefail SHELL := /bin/bash -o pipefail
ROM := pokeemerald.gba
OBJ_DIR := build/emerald
ELF = $(ROM:.gba=.elf) ELF = $(ROM:.gba=.elf)
MAP = $(ROM:.gba=.map) MAP = $(ROM:.gba=.map)
@@ -34,16 +40,32 @@ DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR)
SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR)
MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR)
ASFLAGS := -mcpu=arm7tdmi ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN)
GCC_VER := $(shell $(CC) -dumpversion)
ifeq ($(MODERN),0)
CC1 := tools/agbcc/bin/agbcc$(EXE) CC1 := tools/agbcc/bin/agbcc$(EXE)
override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
ROM := pokeemerald.gba
OBJ_DIR := build/emerald
LIBPATH := -L ../../tools/agbcc/lib
else
CC1 := $(shell $(PREFIX)gcc --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -fno-aggressive-loop-optimizations -Wno-pointer-to-int-cast
ROM := pokeemerald_modern.gba
OBJ_DIR := build/modern
LIBPATH := -L $(TOOLCHAIN)/lib/gcc/arm-none-eabi/$(GCC_VER)/thumb -L $(TOOLCHAIN)/arm-none-eabi/lib/thumb
endif
CPPFLAGS := -I tools/agbcc/include -I tools/agbcc -iquote include -Wno-trigraphs CPPFLAGS := -iquote include -Wno-trigraphs -DMODERN=$(MODERN)
ifeq ($(MODERN),0)
CPPFLAGS += -I tools/agbcc/include -I tools/agbcc
endif
LDFLAGS = -Map ../../$(MAP) LDFLAGS = -Map ../../$(MAP)
LIB := -L ../../tools/agbcc/lib -lgcc -lc LIB := $(LIBPATH) -lgcc -lc
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
GFX := tools/gbagfx/gbagfx$(EXE) GFX := tools/gbagfx/gbagfx$(EXE)
@@ -66,7 +88,7 @@ JSONPROC := tools/jsonproc/jsonproc$(EXE)
# Secondary expansion is required for dependency variables in object rules. # Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION: .SECONDEXPANSION:
.PHONY: rom clean compare tidy .PHONY: rom clean compare tidy tools mostlyclean clean-tools
C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
@@ -90,17 +112,33 @@ SUBDIRS := $(sort $(dir $(OBJS)))
AUTO_GEN_TARGETS := AUTO_GEN_TARGETS :=
TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*))
TOOLBASE = $(TOOLDIRS:tools/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),tools/%(tool)/$(tool)$(EXE))
$(shell mkdir -p $(SUBDIRS)) $(shell mkdir -p $(SUBDIRS))
all: tools rom
tools: $(TOOLS)
$(TOOLS):
@$(foreach tooldir,$(TOOLDIRS),$(MAKE) -C $(tooldir);)
rom: $(ROM) rom: $(ROM)
# For contributors to make sure a change didn't affect the contents of the ROM. # For contributors to make sure a change didn't affect the contents of the ROM.
compare: $(ROM) compare: all
@$(SHA1) rom.sha1 @$(SHA1) rom.sha1
clean: tidy clean: mostlyclean clean-tools
clean-tools:
@$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);)
mostlyclean: tidy
rm -f sound/direct_sound_samples/*.bin rm -f sound/direct_sound_samples/*.bin
rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s rm -f $(MID_SUBDIR)/*.s
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 {} + 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)/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 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
@@ -109,7 +147,10 @@ clean: tidy
tidy: tidy:
rm -f $(ROM) $(ELF) $(MAP) rm -f $(ROM) $(ELF) $(MAP)
rm -r build/* rm -r $(OBJ_DIR)
ifeq ($(MODERN),0)
@$(MAKE) tidy MODERN=1
endif
include graphics_file_rules.mk include graphics_file_rules.mk
include map_data_rules.mk include map_data_rules.mk
@@ -133,6 +174,7 @@ sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(A
sound/%.bin: sound/%.aif ; $(AIF) $< $@ 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
$(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/libc.o: CFLAGS := -O2
@@ -145,6 +187,7 @@ $(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
$(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding
endif
ifeq ($(NODEP),1) ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: c_dep := $(C_BUILDDIR)/%.o: c_dep :=
@@ -192,12 +235,23 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt
$(RAMSCRGEN) ewram_data $< ENGLISH > $@ $(RAMSCRGEN) ewram_data $< ENGLISH > $@
$(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld ifeq ($(MODERN),0)
cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../ld_script.txt > ld_script.ld LD_SCRIPT := ld_script.txt
LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld
else
LD_SCRIPT := ld_script_modern.txt
LD_SCRIPT_DEPS :=
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) $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
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) $(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@ $(OBJCOPY) -O binary $< $@
$(FIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(FIX) $@ -p --silent
modern: ; @$(MAKE) MODERN=1
+1
View File
@@ -0,0 +1 @@
gUnknown_03006370
+6
View File
@@ -0,0 +1,6 @@
gUnknown_03007870
gUnknown_03007880
gUnknown_03007890
gUnknown_03007894
gUnknown_03007898
gUnknown_030078A0
+1
View File
@@ -0,0 +1 @@
gRfuState
+2 -2
View File
@@ -23,9 +23,9 @@ int GetMapBorderIdAt(int x, int y);
int CanCameraMoveInDirection(int direction); int CanCameraMoveInDirection(int direction);
u16 GetBehaviorByMetatileId(u16 metatileId); u16 GetBehaviorByMetatileId(u16 metatileId);
void GetCameraFocusCoords(u16 *x, u16 *y); void GetCameraFocusCoords(u16 *x, u16 *y);
u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y); u8 MapGridGetMetatileLayerTypeAt(int x, int y);
u8 MapGridGetZCoordAt(int x, int y); u8 MapGridGetZCoordAt(int x, int y);
u8 CameraMove(s32 deltaX, s32 deltaY); bool8 CameraMove(int deltaX, int deltaY);
struct MapConnection *sub_8088950(u8 direction, int x, int y); struct MapConnection *sub_8088950(u8 direction, int x, int y);
bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection); bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection);
bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset); bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset);
+7
View File
@@ -6,9 +6,16 @@
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
#define BSS_DATA __attribute__((section(".bss")))
#define IWRAM_DATA __attribute__((section("iwram_data"))) #define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data"))) #define EWRAM_DATA __attribute__((section("ewram_data")))
#if MODERN
#define NOINLINE __attribute__((noinline))
#else
#define NOINLINE
#endif
#define ALIGNED(n) __attribute__((aligned(n))) #define ALIGNED(n) __attribute__((aligned(n)))
#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0) #define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0)
+5
View File
@@ -2,6 +2,7 @@
#define GUARD_GLOBAL_H #define GUARD_GLOBAL_H
#include <string.h> #include <string.h>
#include <limits.h>
#include "config.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines. #include "config.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines.
#include "gba/gba.h" #include "gba/gba.h"
#include "constants/global.h" #include "constants/global.h"
@@ -62,6 +63,10 @@
#define min(a, b) ((a) < (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b))
#if MODERN
#define abs(x) (((x) < 0) ? -(x) : (x))
#endif
// Extracts the upper 16 bits of a 32-bit number // Extracts the upper 16 bits of a 32-bit number
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16) #define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-3
View File
@@ -4005,9 +4005,6 @@ extern const u32 gBerryPalette_Starf[];
extern const u32 gBerryPic_Enigma[]; extern const u32 gBerryPic_Enigma[];
extern const u32 gBerryPalette_Enigma[]; extern const u32 gBerryPalette_Enigma[];
//credits
extern const u32 gCreditsCopyrightEnd_Gfx[];
//pokenav //pokenav
extern const u8 gPokenavConditionMarker_Gfx[]; extern const u8 gPokenavConditionMarker_Gfx[];
extern const u16 gPokenavConditionMarker_Pal[]; extern const u16 gPokenavConditionMarker_Pal[];
+1 -1
View File
@@ -278,7 +278,7 @@ bool32 sub_8011B90(void);
void sub_800FE50(u16 *a0); void sub_800FE50(u16 *a0);
bool32 sub_800E540(u16 id, u8 *name); bool32 sub_800E540(u16 id, u8 *name);
void sub_8011DE0(u32 arg0); void sub_8011DE0(u32 arg0);
u8 sub_801100C(int a0); u8 sub_801100C(s32 a0);
void sub_800EF7C(void); void sub_800EF7C(void);
bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx); bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx); bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
+2
View File
@@ -1,6 +1,8 @@
#ifndef GUARD_PLAYER_PC_H #ifndef GUARD_PLAYER_PC_H
#define GUARD_PLAYER_PC_H #define GUARD_PLAYER_PC_H
#include "menu.h"
// local task defines // local task defines
#define PAGE_INDEX data[0] #define PAGE_INDEX data[0]
#define ITEMS_ABOVE_TOP data[1] #define ITEMS_ABOVE_TOP data[1]
+2 -2
View File
@@ -4,7 +4,7 @@
#include "bg.h" #include "bg.h"
#include "main.h" #include "main.h"
typedef u32 (*LoopedTask)(int state); typedef u32 (*LoopedTask)(s32 state);
// Return values of LoopedTask functions. // Return values of LoopedTask functions.
#define LT_INC_AND_PAUSE 0 #define LT_INC_AND_PAUSE 0
@@ -111,7 +111,7 @@ void sub_81C7850(u32 a0);
u32 sub_81C786C(void); u32 sub_81C786C(void);
void LoadLeftHeaderGfxForIndex(u32 arg0); void LoadLeftHeaderGfxForIndex(u32 arg0);
void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2); void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2);
void sub_81C7AC0(int a0); void sub_81C7AC0(s32 a0);
bool32 sub_81C8010(void); bool32 sub_81C8010(void);
void InitBgTemplates(const struct BgTemplate *templates, int count); void InitBgTemplates(const struct BgTemplate *templates, int count);
bool32 IsPaletteFadeActive(void); bool32 IsPaletteFadeActive(void);
-1
View File
@@ -485,7 +485,6 @@ extern const u8 gText_CryOf[];
extern const u8 gText_SizeComparedTo[]; extern const u8 gText_SizeComparedTo[];
extern const u8 gText_PokedexRegistration[]; extern const u8 gText_PokedexRegistration[];
extern const u8 gText_UnkCtrlF908Clear01[]; extern const u8 gText_UnkCtrlF908Clear01[];
extern const u8 sText_TenDashes2[];
extern const u8 gText_5MarksPokemon[]; extern const u8 gText_5MarksPokemon[];
extern const u8 gText_UnkHeight[]; extern const u8 gText_UnkHeight[];
extern const u8 gText_UnkWeight[]; extern const u8 gText_UnkWeight[];
+5 -1
View File
@@ -166,7 +166,11 @@ struct TextPrinter
void (*callback)(struct TextPrinterTemplate *, u16); // 0x10 void (*callback)(struct TextPrinterTemplate *, u16); // 0x10
union __attribute__((packed)) { union
#if !MODERN
__attribute__((packed))
#endif
{
struct TextPrinterSubStruct sub; struct TextPrinterSubStruct sub;
u8 fields[7]; u8 fields[7];
} subUnion; } subUnion;
+368 -351
View File
@@ -47,293 +47,293 @@ SECTIONS {
.text : .text :
ALIGN(4) ALIGN(4)
{ {
asm/crt0.o(.text); asm/crt0.o(.text*);
src/main.o(.text); src/main.o(.text*);
src/alloc.o(.text); src/alloc.o(.text*);
src/dma3_manager.o(.text); src/dma3_manager.o(.text*);
src/gpu_regs.o(.text); src/gpu_regs.o(.text*);
src/bg.o(.text); src/bg.o(.text*);
src/blit.o(.text); src/blit.o(.text*);
src/window.o(.text); src/window.o(.text*);
src/text.o(.text); src/text.o(.text*);
src/sprite.o(.text); src/sprite.o(.text*);
src/string_util.o(.text); src/string_util.o(.text*);
src/link.o(.text); src/link.o(.text*);
src/link_rfu.o(.text); src/link_rfu.o(.text*);
src/union_room.o(.text); src/union_room.o(.text*);
src/mystery_gift.o(.text); src/mystery_gift.o(.text*);
src/union_room_player_avatar.o(.text); src/union_room_player_avatar.o(.text*);
src/union_room_battle.o(.text); src/union_room_battle.o(.text*);
src/mevent2.o(.text); src/mevent2.o(.text*);
src/mevent_801BAAC.o(.text); src/mevent_801BAAC.o(.text*);
src/mevent_server.o(.text); src/mevent_server.o(.text*);
src/mevent_client.o(.text); src/mevent_client.o(.text*);
src/mevent_server_helpers.o(.text); src/mevent_server_helpers.o(.text*);
src/mevent_news.o(.text); src/mevent_news.o(.text*);
src/union_room_chat.o(.text); src/union_room_chat.o(.text*);
src/berry_crush.o(.text); src/berry_crush.o(.text*);
asm/berry_crush.o(.text); asm/berry_crush.o(.text*);
src/berry_powder.o(.text); src/berry_powder.o(.text*);
src/dodrio_berry_picking.o(.text); src/dodrio_berry_picking.o(.text*);
asm/dodrio_berry_picking.o(.text); asm/dodrio_berry_picking.o(.text*);
src/pokemon_jump.o(.text); src/pokemon_jump.o(.text*);
asm/pokemon_jump.o(.text); asm/pokemon_jump.o(.text*);
src/rtc.o(.text); src/rtc.o(.text*);
src/main_menu.o(.text); src/main_menu.o(.text*);
src/battle_controllers.o(.text); src/battle_controllers.o(.text*);
src/decompress.o(.text); src/decompress.o(.text*);
src/rom_8034C54.o(.text); src/rom_8034C54.o(.text*);
src/battle_bg.o(.text); src/battle_bg.o(.text*);
src/battle_main.o(.text); src/battle_main.o(.text*);
src/battle_util.o(.text); src/battle_util.o(.text*);
src/battle_script_commands.o(.text); src/battle_script_commands.o(.text*);
src/battle_util2.o(.text); src/battle_util2.o(.text*);
src/battle_controller_player.o(.text); src/battle_controller_player.o(.text*);
src/battle_gfx_sfx_util.o(.text); src/battle_gfx_sfx_util.o(.text*);
src/battle_controller_opponent.o(.text); src/battle_controller_opponent.o(.text*);
src/battle_ai_switch_items.o(.text); src/battle_ai_switch_items.o(.text*);
src/battle_controller_link_opponent.o(.text); src/battle_controller_link_opponent.o(.text*);
src/pokemon.o(.text); src/pokemon.o(.text*);
src/trig.o(.text); src/trig.o(.text*);
src/random.o(.text); src/random.o(.text*);
src/util.o(.text); src/util.o(.text*);
src/daycare.o(.text); src/daycare.o(.text*);
src/egg_hatch.o(.text); src/egg_hatch.o(.text*);
src/battle_interface.o(.text); src/battle_interface.o(.text*);
src/smokescreen.o(.text); src/smokescreen.o(.text*);
src/pokeball.o(.text); src/pokeball.o(.text*);
src/load_save.o(.text); src/load_save.o(.text*);
src/trade.o(.text); src/trade.o(.text*);
src/berry_blender.o(.text); src/berry_blender.o(.text*);
src/play_time.o(.text); src/play_time.o(.text*);
src/new_game.o(.text); src/new_game.o(.text*);
src/overworld.o(.text); src/overworld.o(.text*);
src/fieldmap.o(.text); src/fieldmap.o(.text*);
src/metatile_behavior.o(.text); src/metatile_behavior.o(.text*);
src/field_camera.o(.text); src/field_camera.o(.text*);
src/field_door.o(.text); src/field_door.o(.text*);
src/field_player_avatar.o(.text); src/field_player_avatar.o(.text*);
src/event_object_movement.o(.text); src/event_object_movement.o(.text*);
src/field_message_box.o(.text); src/field_message_box.o(.text*);
src/event_obj_lock.o(.text); src/event_obj_lock.o(.text*);
src/text_window.o(.text); src/text_window.o(.text*);
src/script.o(.text); src/script.o(.text*);
src/scrcmd.o(.text); src/scrcmd.o(.text*);
src/field_control_avatar.o(.text); src/field_control_avatar.o(.text*);
src/event_data.o(.text); src/event_data.o(.text*);
src/coord_event_weather.o(.text); src/coord_event_weather.o(.text*);
src/field_tasks.o(.text); src/field_tasks.o(.text*);
src/clock.o(.text); src/clock.o(.text*);
src/reset_rtc_screen.o(.text); src/reset_rtc_screen.o(.text*);
src/start_menu.o(.text); src/start_menu.o(.text*);
src/tileset_anims.o(.text); src/tileset_anims.o(.text*);
src/palette.o(.text); src/palette.o(.text*);
src/sound.o(.text); src/sound.o(.text*);
src/battle_anim.o(.text); src/battle_anim.o(.text*);
src/battle_anim_mons.o(.text); src/battle_anim_mons.o(.text*);
src/task.o(.text); src/task.o(.text*);
src/reshow_battle_screen.o(.text); src/reshow_battle_screen.o(.text*);
src/battle_anim_status_effects.o(.text); src/battle_anim_status_effects.o(.text*);
src/title_screen.o(.text); src/title_screen.o(.text*);
src/field_weather.o(.text); src/field_weather.o(.text*);
src/field_weather_effect.o(.text); src/field_weather_effect.o(.text*);
src/field_screen_effect.o(.text); src/field_screen_effect.o(.text*);
src/battle_setup.o(.text); src/battle_setup.o(.text*);
src/cable_club.o(.text); src/cable_club.o(.text*);
src/trainer_see.o(.text); src/trainer_see.o(.text*);
src/wild_encounter.o(.text); src/wild_encounter.o(.text*);
src/field_effect.o(.text); src/field_effect.o(.text*);
src/scanline_effect.o(.text); src/scanline_effect.o(.text*);
src/option_menu.o(.text); src/option_menu.o(.text*);
src/pokedex.o(.text); src/pokedex.o(.text*);
src/trainer_card.o(.text); src/trainer_card.o(.text*);
src/frontier_pass.o(.text); src/frontier_pass.o(.text*);
src/pokemon_storage_system.o(.text); src/pokemon_storage_system.o(.text*);
src/pokemon_icon.o(.text); src/pokemon_icon.o(.text*);
src/script_movement.o(.text); src/script_movement.o(.text*);
src/fldeff_cut.o(.text); src/fldeff_cut.o(.text*);
src/mail_data.o(.text); src/mail_data.o(.text*);
src/map_name_popup.o(.text); src/map_name_popup.o(.text*);
src/item_menu_icons.o(.text); src/item_menu_icons.o(.text*);
src/battle_anim_mon_movement.o(.text); src/battle_anim_mon_movement.o(.text*);
src/item.o(.text); src/item.o(.text*);
src/contest.o(.text); src/contest.o(.text*);
src/shop.o(.text); src/shop.o(.text*);
src/fldeff_escalator.o(.text); src/fldeff_escalator.o(.text*);
src/berry.o(.text); src/berry.o(.text*);
src/script_menu.o(.text); src/script_menu.o(.text*);
src/naming_screen.o(.text); src/naming_screen.o(.text*);
src/money.o(.text); src/money.o(.text*);
src/contest_effect.o(.text); src/contest_effect.o(.text*);
src/record_mixing.o(.text); src/record_mixing.o(.text*);
src/secret_base.o(.text); src/secret_base.o(.text*);
src/tv.o(.text); src/tv.o(.text*);
src/contest_link_80F57C4.o(.text); src/contest_link_80F57C4.o(.text*);
src/script_pokemon_util_80F87D8.o(.text); src/script_pokemon_util_80F87D8.o(.text*);
src/field_poison.o(.text); src/field_poison.o(.text*);
src/pokemon_size_record.o(.text); src/pokemon_size_record.o(.text*);
src/fldeff_misc.o(.text); src/fldeff_misc.o(.text*);
src/field_special_scene.o(.text); src/field_special_scene.o(.text*);
src/rotating_gate.o(.text); src/rotating_gate.o(.text*);
src/safari_zone.o(.text); src/safari_zone.o(.text*);
src/contest_link_80FC4F4.o(.text); src/contest_link_80FC4F4.o(.text*);
src/item_use.o(.text); src/item_use.o(.text*);
src/battle_anim_effects_1.o(.text); src/battle_anim_effects_1.o(.text*);
src/battle_anim_effects_2.o(.text); src/battle_anim_effects_2.o(.text*);
src/water.o(.text); src/water.o(.text*);
src/fire.o(.text); src/fire.o(.text*);
src/electric.o(.text); src/electric.o(.text*);
src/ice.o(.text); src/ice.o(.text*);
src/fight.o(.text); src/fight.o(.text*);
src/poison.o(.text); src/poison.o(.text*);
src/flying.o(.text); src/flying.o(.text*);
src/psychic.o(.text); src/psychic.o(.text*);
src/bug.o(.text); src/bug.o(.text*);
src/rock.o(.text); src/rock.o(.text*);
src/ghost.o(.text); src/ghost.o(.text*);
src/dragon.o(.text); src/dragon.o(.text*);
src/dark.o(.text); src/dark.o(.text*);
src/ground.o(.text); src/ground.o(.text*);
src/normal.o(.text); src/normal.o(.text*);
src/battle_anim_utility_funcs.o(.text); src/battle_anim_utility_funcs.o(.text*);
src/battle_intro.o(.text); src/battle_intro.o(.text*);
src/bike.o(.text); src/bike.o(.text*);
src/easy_chat.o(.text); src/easy_chat.o(.text*);
src/mon_markings.o(.text); src/mon_markings.o(.text*);
src/mauville_old_man.o(.text); src/mauville_old_man.o(.text*);
src/mail.o(.text); src/mail.o(.text*);
src/menu_helpers.o(.text); src/menu_helpers.o(.text*);
src/dewford_trend.o(.text); src/dewford_trend.o(.text*);
src/heal_location.o(.text); src/heal_location.o(.text*);
src/region_map.o(.text); src/region_map.o(.text*);
src/contest_painting_effects.o(.text); src/contest_painting_effects.o(.text*);
src/decoration.o(.text); src/decoration.o(.text*);
src/slot_machine.o(.text); src/slot_machine.o(.text*);
src/contest_painting.o(.text); src/contest_painting.o(.text*);
src/battle_ai_script_commands.o(.text); src/battle_ai_script_commands.o(.text*);
src/trader.o(.text); src/trader.o(.text*);
src/starter_choose.o(.text); src/starter_choose.o(.text*);
src/wallclock.o(.text); src/wallclock.o(.text*);
src/fldeff_rocksmash.o(.text); src/fldeff_rocksmash.o(.text*);
src/fldeff_dig.o(.text); src/fldeff_dig.o(.text*);
src/pokeblock.o(.text); src/pokeblock.o(.text*);
src/fldeff_flash.o(.text); src/fldeff_flash.o(.text*);
src/post_battle_event_funcs.o(.text); src/post_battle_event_funcs.o(.text*);
src/time_events.o(.text); src/time_events.o(.text*);
src/birch_pc.o(.text); src/birch_pc.o(.text*);
src/hof_pc.o(.text); src/hof_pc.o(.text*);
src/field_specials.o(.text); src/field_specials.o(.text*);
src/battle_records.o(.text); src/battle_records.o(.text*);
src/pokedex_area_screen.o(.text); src/pokedex_area_screen.o(.text*);
src/evolution_scene.o(.text); src/evolution_scene.o(.text*);
src/roulette.o(.text); src/roulette.o(.text*);
src/pokedex_cry_screen.o(.text); src/pokedex_cry_screen.o(.text*);
src/coins.o(.text); src/coins.o(.text*);
src/landmark.o(.text); src/landmark.o(.text*);
src/fldeff_strength.o(.text); src/fldeff_strength.o(.text*);
src/battle_transition.o(.text); src/battle_transition.o(.text*);
src/battle_controller_link_partner.o(.text); src/battle_controller_link_partner.o(.text*);
src/battle_message.o(.text); src/battle_message.o(.text*);
src/cable_car.o(.text); src/cable_car.o(.text*);
src/math_util.o(.text); src/math_util.o(.text*);
src/roulette_util.o(.text); src/roulette_util.o(.text*);
src/rom_81520A8.o(.text); src/rom_81520A8.o(.text*);
src/save.o(.text); src/save.o(.text*);
src/mystery_event_script.o(.text); src/mystery_event_script.o(.text*);
src/field_effect_helpers.o(.text); src/field_effect_helpers.o(.text*);
src/contest_ai.o(.text); src/contest_ai.o(.text*);
src/battle_anim_sound_tasks.o(.text); src/battle_anim_sound_tasks.o(.text*);
src/battle_controller_safari.o(.text); src/battle_controller_safari.o(.text*);
src/fldeff_sweetscent.o(.text); src/fldeff_sweetscent.o(.text*);
src/battle_anim_effects_3.o(.text); src/battle_anim_effects_3.o(.text*);
src/move_relearner.o(.text); src/move_relearner.o(.text*);
src/fldeff_softboiled.o(.text); src/fldeff_softboiled.o(.text*);
src/decoration_inventory.o(.text); src/decoration_inventory.o(.text*);
src/roamer.o(.text); src/roamer.o(.text*);
src/battle_tower.o(.text); src/battle_tower.o(.text*);
src/use_pokeblock.o(.text); src/use_pokeblock.o(.text*);
src/battle_controller_wally.o(.text); src/battle_controller_wally.o(.text*);
src/player_pc.o(.text); src/player_pc.o(.text*);
src/intro.o(.text); src/intro.o(.text*);
src/reset_save_heap.o(.text); src/reset_save_heap.o(.text*);
src/field_region_map.o(.text); src/field_region_map.o(.text*);
src/battle_anim_special.o(.text); src/battle_anim_special.o(.text*);
src/hall_of_fame.o(.text); src/hall_of_fame.o(.text*);
src/credits.o(.text); src/credits.o(.text*);
src/lottery_corner.o(.text); src/lottery_corner.o(.text*);
src/diploma.o(.text); src/diploma.o(.text*);
src/berry_tag_screen.o(.text); src/berry_tag_screen.o(.text*);
src/mystery_event_menu.o(.text); src/mystery_event_menu.o(.text*);
src/save_failed_screen.o(.text); src/save_failed_screen.o(.text*);
src/braille_puzzles.o(.text); src/braille_puzzles.o(.text*);
src/pokeblock_feed.o(.text); src/pokeblock_feed.o(.text*);
src/clear_save_data_screen.o(.text); src/clear_save_data_screen.o(.text*);
src/intro_credits_graphics.o(.text); src/intro_credits_graphics.o(.text*);
src/evolution_graphics.o(.text); src/evolution_graphics.o(.text*);
src/bard_music.o(.text); src/bard_music.o(.text*);
src/fldeff_teleport.o(.text); src/fldeff_teleport.o(.text*);
src/battle_tv.o(.text); src/battle_tv.o(.text*);
src/pokemon_animation.o(.text); src/pokemon_animation.o(.text*);
src/recorded_battle.o(.text); src/recorded_battle.o(.text*);
src/battle_controller_recorded_opponent.o(.text); src/battle_controller_recorded_opponent.o(.text*);
src/battle_controller_recorded_player.o(.text); src/battle_controller_recorded_player.o(.text*);
src/trainer_pokemon_sprites.o(.text); src/trainer_pokemon_sprites.o(.text*);
src/lilycove_lady.o(.text); src/lilycove_lady.o(.text*);
src/battle_dome.o(.text); src/battle_dome.o(.text*);
src/battle_palace.o(.text); src/battle_palace.o(.text*);
src/match_call.o(.text); src/match_call.o(.text*);
src/menu.o(.text); src/menu.o(.text*);
src/battle_factory_screen.o(.text); src/battle_factory_screen.o(.text*);
src/apprentice.o(.text); src/apprentice.o(.text*);
src/frontier_util.o(.text); src/frontier_util.o(.text*);
src/battle_arena.o(.text); src/battle_arena.o(.text*);
src/battle_factory.o(.text); src/battle_factory.o(.text*);
src/battle_pike.o(.text); src/battle_pike.o(.text*);
src/mossdeep_gym.o(.text); src/mossdeep_gym.o(.text*);
src/battle_pyramid.o(.text); src/battle_pyramid.o(.text*);
src/item_menu.o(.text); src/item_menu.o(.text*);
src/list_menu.o(.text); src/list_menu.o(.text*);
src/dynamic_placeholder_text_util.o(.text); src/dynamic_placeholder_text_util.o(.text*);
src/save_location.o(.text); src/save_location.o(.text*);
src/item_icon.o(.text); src/item_icon.o(.text*);
src/party_menu.o(.text); src/party_menu.o(.text*);
src/battle_tent.o(.text); src/battle_tent.o(.text*);
src/unk_text_util_2.o(.text); src/unk_text_util_2.o(.text*);
src/multiboot.o(.text); src/multiboot.o(.text*);
src/unk_81BAD84.o(.text); src/unk_81BAD84.o(.text*);
src/battle_controller_player_partner.o(.text); src/battle_controller_player_partner.o(.text*);
src/mirage_tower.o(.text); src/mirage_tower.o(.text*);
src/berry_fix_program.o(.text); src/berry_fix_program.o(.text*);
src/pokemon_summary_screen.o(.text); src/pokemon_summary_screen.o(.text*);
src/unk_pokedex_area_screen_helper.o(.text); src/unk_pokedex_area_screen_helper.o(.text*);
src/battle_pyramid_bag.o(.text); src/battle_pyramid_bag.o(.text*);
src/pokenav.o(.text); src/pokenav.o(.text*);
src/pokenav_main_menu.o(.text); src/pokenav_main_menu.o(.text*);
src/pokenav_match_call_ui.o(.text); src/pokenav_match_call_ui.o(.text*);
src/pokenav_unk_1.o(.text); src/pokenav_unk_1.o(.text*);
src/pokenav_unk_2.o(.text); src/pokenav_unk_2.o(.text*);
asm/pokenav_unk_2.o(.text); asm/pokenav_unk_2.o(.text*);
src/pokenav_unk_3.o(.text); src/pokenav_unk_3.o(.text*);
src/pokenav_unk_4.o(.text); src/pokenav_unk_4.o(.text*);
src/pokenav_unk_5.o(.text); src/pokenav_unk_5.o(.text*);
asm/pokenav_unk_6.o(.text); asm/pokenav_unk_6.o(.text*);
asm/pokenav_unk_7.o(.text); asm/pokenav_unk_7.o(.text*);
asm/pokenav_unk_8.o(.text); asm/pokenav_unk_8.o(.text*);
asm/pokenav_unk_9.o(.text); asm/pokenav_unk_9.o(.text*);
asm/pokenav_unk_10.o(.text); asm/pokenav_unk_10.o(.text*);
src/pokenav_unk_10.o(.text); src/pokenav_unk_10.o(.text*);
src/pokenav_match_call_data.o(.text); src/pokenav_match_call_data.o(.text*);
src/menu_specialized.o(.text); src/menu_specialized.o(.text*);
src/ereader_helpers.o(.text); src/ereader_helpers.o(.text*);
src/faraway_island.o(.text); src/faraway_island.o(.text*);
src/ereader_screen.o(.text); src/ereader_screen.o(.text*);
src/trainer_hill.o(.text); src/trainer_hill.o(.text*);
src/rayquaza_scene.o(.text); src/rayquaza_scene.o(.text*);
src/walda_phrase.o(.text); src/walda_phrase.o(.text*);
src/contest_link_81D9DE4.o(.text); src/contest_link_81D9DE4.o(.text*);
src/gym_leader_rematch.o(.text); src/gym_leader_rematch.o(.text*);
src/unk_transition.o(.text); src/unk_transition.o(.text*);
src/international_string_util.o(.text); src/international_string_util.o(.text*);
} =0 } =0
script_data : script_data :
@@ -352,70 +352,70 @@ SECTIONS {
lib_text : lib_text :
ALIGN(4) ALIGN(4)
{ {
asm/libgcnmultiboot.o(.text); asm/libgcnmultiboot.o(.text*);
asm/m4a_1.o(.text); asm/m4a_1.o(.text*);
src/m4a.o(.text); src/m4a.o(.text*);
src/agb_flash.o(.text); src/agb_flash.o(.text*);
src/agb_flash_1m.o(.text); src/agb_flash_1m.o(.text*);
src/agb_flash_mx.o(.text); src/agb_flash_mx.o(.text*);
src/siirtc.o(.text); src/siirtc.o(.text*);
src/librfu_stwi.o(.text); src/librfu_stwi.o(.text*);
src/librfu_intr.o(.text); src/librfu_intr.o(.text*);
asm/librfu_intr.o(.text); asm/librfu_intr.o(.text*);
src/librfu_rfu.o(.text); src/librfu_rfu.o(.text*);
asm/librfu.o(.text); asm/librfu.o(.text*);
asm/libagbsyscall.o(.text); asm/libagbsyscall.o(.text*);
*libgcc.a:_call_via_rX.o(.text); *libgcc.a:_call_via_rX.o(.text*);
*libgcc.a:_divdi3.o(.text); *libgcc.a:_divdi3.o(.text*);
*libgcc.a:_divsi3.o(.text); *libgcc.a:_divsi3.o(.text*);
*libgcc.a:_dvmd_tls.o(.text); *libgcc.a:_dvmd_tls.o(.text*);
*libgcc.a:_fixunsdfsi.o(.text); *libgcc.a:_fixunsdfsi.o(.text*);
*libgcc.a:_fixunssfsi.o(.text); *libgcc.a:_fixunssfsi.o(.text*);
*libgcc.a:_modsi3.o(.text); *libgcc.a:_modsi3.o(.text*);
*libgcc.a:_muldi3.o(.text); *libgcc.a:_muldi3.o(.text*);
*libgcc.a:_udivdi3.o(.text); *libgcc.a:_udivdi3.o(.text*);
*libgcc.a:_udivsi3.o(.text); *libgcc.a:_udivsi3.o(.text*);
*libgcc.a:_umodsi3.o(.text); *libgcc.a:_umodsi3.o(.text*);
*libgcc.a:dp-bit.o(.text); *libgcc.a:dp-bit.o(.text*);
*libgcc.a:fp-bit.o(.text); *libgcc.a:fp-bit.o(.text*);
*libgcc.a:_lshrdi3.o(.text); *libgcc.a:_lshrdi3.o(.text*);
*libgcc.a:_negdi2.o(.text); *libgcc.a:_negdi2.o(.text*);
*libc.a:memcpy.o(.text); *libc.a:memcpy.o(.text*);
*libc.a:memset.o(.text); *libc.a:memset.o(.text*);
*libc.a:strcmp.o(.text); *libc.a:strcmp.o(.text*);
*libc.a:strcpy.o(.text); *libc.a:strcpy.o(.text*);
*libc.a:vfprintf.o(.text); *libc.a:vfprintf.o(.text*);
*libc.a:vsprintf.o(.text); *libc.a:vsprintf.o(.text*);
*libc.a:fvwrite.o(.text); *libc.a:fvwrite.o(.text*);
*libc.a:locale.o(.text); *libc.a:locale.o(.text*);
*libc.a:findfp.o(.text); *libc.a:findfp.o(.text*);
*libc.a:fflush.o(.text); *libc.a:fflush.o(.text*);
*libc.a:wsetup.o(.text); *libc.a:wsetup.o(.text*);
*libc.a:mbtowc_r.o(.text); *libc.a:mbtowc_r.o(.text*);
*libc.a:s_isinf.o(.text); *libc.a:s_isinf.o(.text*);
*libc.a:s_isnan.o(.text); *libc.a:s_isnan.o(.text*);
*libc.a:memchr.o(.text); *libc.a:memchr.o(.text*);
*libc.a:strlen.o(.text); *libc.a:strlen.o(.text*);
*libc.a:dtoa.o(.text); *libc.a:dtoa.o(.text*);
*libc.a:memmove.o(.text); *libc.a:memmove.o(.text*);
*libc.a:stdio.o(.text); *libc.a:stdio.o(.text*);
*libc.a:mprec.o(.text); *libc.a:mprec.o(.text*);
*libc.a:mallocr.o(.text); *libc.a:mallocr.o(.text*);
*libc.a:fwalk.o(.text); *libc.a:fwalk.o(.text*);
*libc.a:freer.o(.text); *libc.a:freer.o(.text*);
*libc.a:makebuf.o(.text); *libc.a:makebuf.o(.text*);
*libc.a:readr.o(.text); *libc.a:readr.o(.text*);
*libc.a:writer.o(.text); *libc.a:writer.o(.text*);
*libc.a:lseekr.o(.text); *libc.a:lseekr.o(.text*);
*libc.a:closer.o(.text); *libc.a:closer.o(.text*);
*libc.a:callocr.o(.text); *libc.a:callocr.o(.text*);
*libc.a:sbrkr.o(.text); *libc.a:sbrkr.o(.text*);
*libc.a:mlock.o(.text); *libc.a:mlock.o(.text*);
*libc.a:fstatr.o(.text); *libc.a:fstatr.o(.text*);
*libc.a:libcfunc.o(.text); *libc.a:libcfunc.o(.text*);
*libc.a:syscalls.o(.text); *libc.a:syscalls.o(.text*);
*libc.a:errno.o(.text); *libc.a:errno.o(.text*);
src/libisagbprn.o(.text); src/libisagbprn.o(.text*);
} =0 } =0
.rodata : .rodata :
@@ -429,7 +429,9 @@ SECTIONS {
data/io_reg.o(.rodata); data/io_reg.o(.rodata);
src/string_util.o(.rodata); src/string_util.o(.rodata);
src/link.o(.rodata); src/link.o(.rodata);
src/link.o(.rodata.str1.4);
src/link_rfu.o(.rodata); src/link_rfu.o(.rodata);
src/link_rfu.o(.rodata.str1.4);
src/union_room.o(.rodata); src/union_room.o(.rodata);
src/mystery_gift.o(.rodata); src/mystery_gift.o(.rodata);
src/union_room_player_avatar.o(.rodata); src/union_room_player_avatar.o(.rodata);
@@ -440,6 +442,7 @@ SECTIONS {
src/mevent_client.o(.rodata); src/mevent_client.o(.rodata);
src/mevent_scripts.o(.rodata); src/mevent_scripts.o(.rodata);
src/union_room_chat.o(.rodata); src/union_room_chat.o(.rodata);
src/berry_crush.o(.rodata);
data/berry_crush.o(.rodata); data/berry_crush.o(.rodata);
data/berry_powder.o(.rodata); data/berry_powder.o(.rodata);
src/dodrio_berry_picking.o(.rodata); src/dodrio_berry_picking.o(.rodata);
@@ -448,6 +451,7 @@ SECTIONS {
data/pokemon_jump.o(.rodata); data/pokemon_jump.o(.rodata);
src/rtc.o(.rodata); src/rtc.o(.rodata);
src/main_menu.o(.rodata); src/main_menu.o(.rodata);
src/battle_controllers.o(.rodata);
src/rom_8034C54.o(.rodata); src/rom_8034C54.o(.rodata);
src/data.o(.rodata); src/data.o(.rodata);
src/battle_bg.o(.rodata); src/battle_bg.o(.rodata);
@@ -457,6 +461,7 @@ SECTIONS {
src/battle_controller_player.o(.rodata); src/battle_controller_player.o(.rodata);
data/smokescreen.o(.rodata); data/smokescreen.o(.rodata);
src/battle_controller_opponent.o(.rodata); src/battle_controller_opponent.o(.rodata);
src/battle_ai_switch_items.o(.rodata);
src/battle_controller_link_opponent.o(.rodata); src/battle_controller_link_opponent.o(.rodata);
src/pokemon.o(.rodata); src/pokemon.o(.rodata);
src/trig.o(.rodata); src/trig.o(.rodata);
@@ -479,6 +484,7 @@ SECTIONS {
src/event_object_movement.o(.rodata); src/event_object_movement.o(.rodata);
src/text_window.o(.rodata); src/text_window.o(.rodata);
src/scrcmd.o(.rodata); src/scrcmd.o(.rodata);
src/field_control_avatar.o(.rodata);
src/coord_event_weather.o(.rodata); src/coord_event_weather.o(.rodata);
src/field_tasks.o(.rodata); src/field_tasks.o(.rodata);
src/reset_rtc_screen.o(.rodata); src/reset_rtc_screen.o(.rodata);
@@ -489,6 +495,7 @@ SECTIONS {
src/battle_anim.o(.rodata); src/battle_anim.o(.rodata);
src/battle_anim_mons.o(.rodata); src/battle_anim_mons.o(.rodata);
data/map_events.o(.rodata); data/map_events.o(.rodata);
src/reshow_battle_screen.o(.rodata);
src/battle_anim_status_effects.o(.rodata); src/battle_anim_status_effects.o(.rodata);
src/title_screen.o(.rodata); src/title_screen.o(.rodata);
src/field_weather.o(.rodata); src/field_weather.o(.rodata);
@@ -499,6 +506,7 @@ SECTIONS {
src/trainer_see.o(.rodata); src/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata); src/wild_encounter.o(.rodata);
src/field_effect.o(.rodata); src/field_effect.o(.rodata);
src/scanline_effect.o(.rodata);
src/option_menu.o(.rodata); src/option_menu.o(.rodata);
src/pokedex.o(.rodata); src/pokedex.o(.rodata);
src/trainer_card.o(.rodata); src/trainer_card.o(.rodata);
@@ -521,12 +529,14 @@ SECTIONS {
src/record_mixing.o(.rodata); src/record_mixing.o(.rodata);
src/secret_base.o(.rodata); src/secret_base.o(.rodata);
src/tv.o(.rodata); src/tv.o(.rodata);
src/contest_link_80F57C4.o(.rodata);
data/contest_link_80F57C4.o(.rodata); data/contest_link_80F57C4.o(.rodata);
src/script_pokemon_util_80F87D8.o(.rodata); src/script_pokemon_util_80F87D8.o(.rodata);
src/pokemon_size_record.o(.rodata) src/pokemon_size_record.o(.rodata)
src/fldeff_misc.o(.rodata); src/fldeff_misc.o(.rodata);
src/field_special_scene.o(.rodata); src/field_special_scene.o(.rodata);
src/rotating_gate.o(.rodata); src/rotating_gate.o(.rodata);
src/contest_link_80FC4F4.o(.rodata);
src/item_use.o(.rodata); src/item_use.o(.rodata);
src/battle_anim_effects_1.o(.rodata); src/battle_anim_effects_1.o(.rodata);
src/battle_anim_effects_2.o(.rodata); src/battle_anim_effects_2.o(.rodata);
@@ -555,6 +565,7 @@ SECTIONS {
src/menu_helpers.o(.rodata); src/menu_helpers.o(.rodata);
src/heal_location.o(.rodata); src/heal_location.o(.rodata);
src/region_map.o(.rodata); src/region_map.o(.rodata);
src/contest_painting_effects.o(.rodata);
data/contest_painting_effects.o(.rodata); data/contest_painting_effects.o(.rodata);
src/decoration.o(.rodata); src/decoration.o(.rodata);
src/slot_machine.o(.rodata); src/slot_machine.o(.rodata);
@@ -581,6 +592,7 @@ SECTIONS {
src/save.o(.rodata); src/save.o(.rodata);
src/field_effect_helpers.o(.rodata); src/field_effect_helpers.o(.rodata);
src/contest_ai.o(.rodata); src/contest_ai.o(.rodata);
src/battle_anim_sound_tasks.o(.rodata);
src/battle_controller_safari.o(.rodata); src/battle_controller_safari.o(.rodata);
src/battle_anim_effects_3.o(.rodata); src/battle_anim_effects_3.o(.rodata);
src/move_relearner.o(.rodata); src/move_relearner.o(.rodata);
@@ -623,6 +635,7 @@ SECTIONS {
src/battle_arena.o(.rodata); src/battle_arena.o(.rodata);
src/battle_factory.o(.rodata); src/battle_factory.o(.rodata);
src/battle_pike.o(.rodata); src/battle_pike.o(.rodata);
src/mossdeep_gym.o(.rodata);
data/mossdeep_gym.o(.rodata); data/mossdeep_gym.o(.rodata);
src/battle_pyramid.o(.rodata); src/battle_pyramid.o(.rodata);
src/item_menu.o(.rodata); src/item_menu.o(.rodata);
@@ -632,6 +645,7 @@ SECTIONS {
src/party_menu.o(.rodata); src/party_menu.o(.rodata);
src/battle_tent.o(.rodata); src/battle_tent.o(.rodata);
src/unk_text_util_2.o(.rodata); src/unk_text_util_2.o(.rodata);
src/multiboot.o(.rodata);
src/unk_81BAD84.o(.rodata); src/unk_81BAD84.o(.rodata);
src/battle_controller_player_partner.o(.rodata); src/battle_controller_player_partner.o(.rodata);
src/mirage_tower.o(.rodata); src/mirage_tower.o(.rodata);
@@ -653,8 +667,10 @@ SECTIONS {
src/pokenav_unk_10.o(.rodata); src/pokenav_unk_10.o(.rodata);
src/pokenav_match_call_data.o(.rodata); src/pokenav_match_call_data.o(.rodata);
src/menu_specialized.o(.rodata); src/menu_specialized.o(.rodata);
src/ereader_helpers.o(.rodata);
data/ereader_helpers.o(.rodata); data/ereader_helpers.o(.rodata);
src/faraway_island.o(.rodata); src/faraway_island.o(.rodata);
src/ereader_screen.o(.rodata);
data/ereader_screen.o(.rodata); data/ereader_screen.o(.rodata);
src/trainer_hill.o(.rodata); src/trainer_hill.o(.rodata);
src/rayquaza_scene.o(.rodata); src/rayquaza_scene.o(.rodata);
@@ -1207,6 +1223,7 @@ SECTIONS {
lib_rodata : lib_rodata :
SUBALIGN(4) SUBALIGN(4)
{ {
src/m4a.o(.rodata);
src/agb_flash.o(.rodata); src/agb_flash.o(.rodata);
src/agb_flash_1m.o(.rodata); src/agb_flash_1m.o(.rodata);
src/agb_flash_mx.o(.rodata); src/agb_flash_mx.o(.rodata);
+156
View File
@@ -0,0 +1,156 @@
ENTRY(Start)
gNumMusicPlayers = 4;
gMaxLines = 0;
SECTIONS {
. = 0x2000000;
ewram (NOLOAD) :
ALIGN(4)
{
gHeap = .;
. = 0x1C000;
src/*.o(ewram_data);
. = 0x40000;
}
. = 0x3000000;
iwram (NOLOAD) :
ALIGN(4)
{
/* .bss starts at 0x3000000 */
src/*.o(.bss);
asm/m4a_1.o(.bss);
/* .bss.code starts at 0x3001AA8 */
src/m4a.o(.bss.code);
/* COMMON starts at 0x30022A8 */
src/*.o(COMMON);
*libc.a:sbrkr.o(COMMON);
end = .;
. = 0x8000;
}
. = 0x8000000;
.text :
ALIGN(4)
{
asm/crt0.o(.text);
src/*.o(.text);
asm/*.o(.text);
} =0
script_data :
ALIGN(4)
{
data/*.o(script_data);
} =0
lib_text :
ALIGN(4)
{
asm/libgcnmultiboot.o(.text);
asm/m4a_1.o(.text);
src/m4a.o(.text);
src/agb_flash.o(.text);
src/agb_flash_1m.o(.text);
src/agb_flash_mx.o(.text);
src/siirtc.o(.text);
src/librfu_stwi.o(.text);
src/librfu_intr.o(.text);
asm/librfu_intr.o(.text);
src/librfu_rfu.o(.text);
asm/librfu.o(.text);
asm/libagbsyscall.o(.text);
*libgcc.a:*.o(.text*);
*libc.a:*.o(.text*);
src/libisagbprn.o(.text);
} =0
.rodata :
ALIGN(4)
{
src/*.o(.rodata*);
data/*.o(.rodata*);
} =0
song_data :
ALIGN(4)
{
sound/songs/*.o(.rodata);
} =0
lib_rodata :
SUBALIGN(4)
{
src/m4a.o(.rodata);
src/agb_flash.o(.rodata);
src/agb_flash_1m.o(.rodata);
src/agb_flash_mx.o(.rodata);
src/agb_flash_le.o(.rodata);
src/siirtc.o(.rodata);
data/librfu_rodata.o(.rodata);
*libgcc.a:*.o(.rodata*);
*libc.a:*.o(.rodata*);
*libc.a:*.o(.data*);
src/libisagbprn.o(.rodata);
} =0
other_data :
ALIGN(4)
{
data/unknown_serial_data.o(.rodata);
data/multiboot_berry_glitch_fix.o(.rodata);
data/multiboot_pokemon_colosseum.o(.rodata);
} =0
anim_mon_front_pic_data :
ALIGN(4)
{
src/anim_mon_front_pics.o(.rodata);
} =0
gfx_data :
ALIGN(4)
{
src/graphics.o(.rodata);
} =0
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* Discard everything not specifically mentioned above. */
/DISCARD/ :
{
*(*);
}
}
+1 -1
View File
@@ -5354,7 +5354,7 @@ void sub_8102EB0(struct Sprite* sprite)
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
{ {
a = gBattleAnimArgs[1]; a = gBattleAnimArgs[1];
(u16)gBattleAnimArgs[1] = -a; *(u16 *)&gBattleAnimArgs[1] = -a;
} }
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
+2 -2
View File
@@ -1024,13 +1024,13 @@ static const union AnimCmd gUnknown_0860D020[] =
static const union AnimCmd gUnknown_0860D028[] = static const union AnimCmd gUnknown_0860D028[] =
{ {
ANIMCMD_FRAME(18, 129, .vFlip = TRUE), ANIMCMD_FRAME(18, 1, .vFlip = TRUE),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0860D030[] = static const union AnimCmd gUnknown_0860D030[] =
{ {
ANIMCMD_FRAME(16, 65, .hFlip = TRUE), ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
ANIMCMD_END, ANIMCMD_END,
}; };
+1 -1
View File
@@ -16,7 +16,7 @@
#include "constants/moves.h" #include "constants/moves.h"
// IWRAM bss // IWRAM bss
static IWRAM_DATA bool8 sPerformedRentalSwap; static bool8 sPerformedRentalSwap;
// This file's functions. // This file's functions.
static void InitFactoryChallenge(void); static void InitFactoryChallenge(void);
+3 -3
View File
@@ -227,9 +227,9 @@ static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL;
static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL; static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL;
// IWRAM bss // IWRAM bss
static IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; static struct FactorySelectMonsStruct *sFactorySelectScreen;
static IWRAM_DATA void (*sSwap_CurrentTableFunc)(u8 taskId); static void (*sSwap_CurrentTableFunc)(u8 taskId);
static IWRAM_DATA struct FactorySwapMonsStruct *sFactorySwapScreen; static struct FactorySwapMonsStruct *sFactorySwapScreen;
// IWRAM common // IWRAM common
u8 (*gUnknown_030062E8)(void); u8 (*gUnknown_030062E8)(void);
+3
View File
@@ -72,6 +72,9 @@ extern const u8 *const gBattlescriptsForUsingItem[];
extern const u8 *const gBattlescriptsForSafariActions[]; extern const u8 *const gBattlescriptsForSafariActions[];
// this file's functions // this file's functions
#if !defined(NONMATCHING) && MODERN
#define static
#endif
static void CB2_InitBattleInternal(void); static void CB2_InitBattleInternal(void);
static void CB2_PreInitMultiBattle(void); static void CB2_PreInitMultiBattle(void);
static void CB2_PreInitIngamePlayerPartnerBattle(void); static void CB2_PreInitIngamePlayerPartnerBattle(void);
+5 -5
View File
@@ -53,11 +53,11 @@ struct PikeWildMon
}; };
// IWRAM bss // IWRAM bss
static IWRAM_DATA u8 sRoomType; static u8 sRoomType;
static IWRAM_DATA u8 sStatusMon; static u8 sStatusMon;
static IWRAM_DATA bool8 sUnknown_0300128E; static bool8 sUnknown_0300128E;
static IWRAM_DATA u32 sStatusFlags; static u32 sStatusFlags;
static IWRAM_DATA u8 sNpcId; static u8 sNpcId;
// This file's functions. // This file's functions.
static void SetRoomType(void); static void SetRoomType(void);
+1 -1
View File
@@ -44,7 +44,7 @@ static void sub_81BA040(void);
static void sub_81B9EC0(void); static void sub_81B9EC0(void);
// IWRAM bss // IWRAM bss
static IWRAM_DATA u16 sRandMonSetId; static u16 sRandMonSetId;
// const rom data // const rom data
void static (*const gUnknown_086160B4[])(void) = void static (*const gUnknown_086160B4[])(void) =
+4 -4
View File
@@ -262,10 +262,10 @@ static bool8 sub_814842C(struct Sprite *sprite);
static bool8 sub_8148458(struct Sprite *sprite); static bool8 sub_8148458(struct Sprite *sprite);
// iwram bss vars // iwram bss vars
IWRAM_DATA static s16 sUnusedRectangularSpiralVar; static s16 sUnusedRectangularSpiralVar;
IWRAM_DATA static u8 sTestingTransitionId; static u8 sTestingTransitionId;
IWRAM_DATA static u8 sTestingTransitionState; static u8 sTestingTransitionState;
IWRAM_DATA static struct StructRectangularSpiral sRectangularSpiralTransition[4]; static struct StructRectangularSpiral sRectangularSpiralTransition[4];
// ewram vars // ewram vars
EWRAM_DATA static struct TransitionData *sTransitionStructPtr = NULL; EWRAM_DATA static struct TransitionData *sTransitionStructPtr = NULL;
+4 -4
View File
@@ -194,10 +194,10 @@ EWRAM_DATA static s32 sUnknown_020322BC[5] = {0};
EWRAM_DATA static u32 sUnknown_020322D0 = 0; EWRAM_DATA static u32 sUnknown_020322D0 = 0;
// IWRAM bss // IWRAM bss
IWRAM_DATA static s16 sUnknown_03000DE8[8]; static s16 sUnknown_03000DE8[8];
IWRAM_DATA static s16 sUnknown_03000DF8[6]; static s16 sUnknown_03000DF8[6];
IWRAM_DATA static s16 sUnknown_03000E04; static s16 sUnknown_03000E04;
IWRAM_DATA static s16 sUnknown_03000E06; static s16 sUnknown_03000E06;
// IWRAM common // IWRAM common
u8 gInGameOpponentsNo; u8 gInGameOpponentsNo;
+11 -8
View File
@@ -37,9 +37,9 @@ struct BgConfig2
s32 bg_y; s32 bg_y;
}; };
static IWRAM_DATA struct BgControl sGpuBgConfigs; static struct BgControl sGpuBgConfigs;
static IWRAM_DATA struct BgConfig2 sGpuBgConfigs2[4]; static struct BgConfig2 sGpuBgConfigs2[4];
static IWRAM_DATA u32 sDmaBusyBitfield[4]; static u32 sDmaBusyBitfield[4];
u32 gUnneededFireRedVariable; u32 gUnneededFireRedVariable;
@@ -914,7 +914,6 @@ void CopyBgTilemapBufferToVram(u8 bg)
void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height)
{ {
const void *srcCopy;
u16 destX16; u16 destX16;
u16 destY16; u16 destY16;
u16 mode; u16 mode;
@@ -924,27 +923,31 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi
switch (GetBgType(bg)) switch (GetBgType(bg))
{ {
case 0: case 0:
srcCopy = src; {
const u16 * srcCopy = src;
for (destY16 = destY; destY16 < (destY + height); destY16++) for (destY16 = destY; destY16 < (destY + height); destY16++)
{ {
for (destX16 = destX; destX16 < (destX + width); destX16++) for (destX16 = destX; destX16 < (destX + width); destX16++)
{ {
((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *((u16*)srcCopy)++; ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++;
} }
} }
break; break;
}
case 1: case 1:
srcCopy = src; {
const u8 * srcCopy = src;
mode = GetBgMetricAffineMode(bg, 0x1); mode = GetBgMetricAffineMode(bg, 0x1);
for (destY16 = destY; destY16 < (destY + height); destY16++) for (destY16 = destY; destY16 < (destY + height); destY16++)
{ {
for (destX16 = destX; destX16 < (destX + width); destX16++) for (destX16 = destX; destX16 < (destX + width); destX16++)
{ {
((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *((u8*)srcCopy)++; ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++;
} }
} }
break; break;
} }
}
} }
} }
+1 -1
View File
@@ -245,7 +245,7 @@ static void CableCarMainCallback_Setup(void)
{ {
u16 imebak; u16 imebak;
u8 i = 0; u8 i = 0;
int sizeOut = 0; u32 sizeOut = 0;
switch (gMain.state) switch (gMain.state)
{ {
+1 -3
View File
@@ -269,8 +269,6 @@ extern const u8 gText_Contest_Fear[];
extern const u8 gText_BDot[]; extern const u8 gText_BDot[];
extern const u8 gText_CDot[]; extern const u8 gText_CDot[];
extern const u8 *const gUnknown_08587E10[]; extern const u8 *const gUnknown_08587E10[];
extern const struct SpriteTemplate gSpriteTemplate_8587AD0;
extern const struct SpriteTemplate gSpriteTemplate_8587B18[];
extern void (*const gContestEffectFuncs[])(void); extern void (*const gContestEffectFuncs[])(void);
static const u8 gUnknown_08587A6C[] = static const u8 gUnknown_08587A6C[] =
@@ -1268,7 +1266,7 @@ static void sub_80D8108(u8 taskId)
gTasks[taskId].data[0]++; gTasks[taskId].data[0]++;
break; break;
case 1: case 1:
(s16)gBattle_BG1_Y += 7; *(s16*)&gBattle_BG1_Y += 7;
if ((s16)gBattle_BG1_Y <= 160) if ((s16)gBattle_BG1_Y <= 160)
break; break;
gTasks[taskId].data[0]++; gTasks[taskId].data[0]++;
+5 -5
View File
@@ -28,11 +28,11 @@ struct ContestWinner *gUnknown_030061C0;
u16 *gContestPaintingMonPalette; u16 *gContestPaintingMonPalette;
// IWRAM bss // IWRAM bss
IWRAM_DATA u8 gContestPaintingState; static u8 gContestPaintingState;
IWRAM_DATA u16 gContestPaintingMosaicVal; static u16 gContestPaintingMosaicVal;
IWRAM_DATA u16 gContestPaintingFadeCounter; static u16 gContestPaintingFadeCounter;
IWRAM_DATA bool8 gUnknown_030011F6; static bool8 gUnknown_030011F6;
IWRAM_DATA u8 gContestPaintingWindowId; static u8 gContestPaintingWindowId;
static void ShowContestPainting(void); static void ShowContestPainting(void);
static void HoldContestPainting(void); static void HoldContestPainting(void);
+2 -2
View File
@@ -8,7 +8,7 @@
#define DMA_REQUEST_COPY16 3 #define DMA_REQUEST_COPY16 3
#define DMA_REQUEST_FILL16 4 #define DMA_REQUEST_FILL16 4
IWRAM_DATA struct BSS_DATA struct
{ {
const u8 *src; const u8 *src;
u8 *dest; u8 *dest;
@@ -17,7 +17,7 @@ IWRAM_DATA struct
u32 value; u32 value;
} gDma3Requests[MAX_DMA_REQUESTS]; } gDma3Requests[MAX_DMA_REQUESTS];
static bool8 gDma3ManagerLocked; static volatile bool8 gDma3ManagerLocked;
static u8 gDma3RequestCursor; static u8 gDma3RequestCursor;
void ClearDma3Requests(void) void ClearDma3Requests(void)
+1 -1
View File
@@ -145,7 +145,7 @@ EWRAM_DATA u16 * gUnknown_02022CE4[4] = {NULL};
EWRAM_DATA struct DodrioBerryPickingStruct_2022CF4 * gUnknown_02022CF4 = NULL; EWRAM_DATA struct DodrioBerryPickingStruct_2022CF4 * gUnknown_02022CF4 = NULL;
EWRAM_DATA struct DodrioBerryPickingSubstruct_0160 * gUnknown_02022CF8 = NULL; EWRAM_DATA struct DodrioBerryPickingSubstruct_0160 * gUnknown_02022CF8 = NULL;
IWRAM_DATA bool32 gUnknown_03000DB0; static bool32 gUnknown_03000DB0;
void sub_8024A1C(void); void sub_8024A1C(void);
void sub_8024A30(struct DodrioBerryPickingStruct *); void sub_8024A30(struct DodrioBerryPickingStruct *);
+1 -1
View File
@@ -73,7 +73,7 @@ static void CreateRandomEggShardSprite(void);
static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
// IWRAM bss // IWRAM bss
static IWRAM_DATA struct EggHatchData *sEggHatchData; static struct EggHatchData *sEggHatchData;
// rom data // rom data
static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal"); static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal");
+11 -11
View File
@@ -26,17 +26,17 @@ static void sub_81D414C(void);
static void sub_81D3F1C(u32, u32*, u32*); static void sub_81D3F1C(u32, u32*, u32*);
static void sub_81D3F68(void); static void sub_81D3F68(void);
IWRAM_DATA struct Unknown030012C8 gUnknown_030012C8; static struct Unknown030012C8 gUnknown_030012C8;
IWRAM_DATA u16 gUnknown_030012E0; static u16 gUnknown_030012E0;
IWRAM_DATA u16 gUnknown_030012E2; static u16 gUnknown_030012E2;
IWRAM_DATA u16 gUnknown_030012E4; static u16 gUnknown_030012E4;
IWRAM_DATA u16 gUnknown_030012E6; static u16 gUnknown_030012E6;
IWRAM_DATA u32 gUnknown_030012E8; static u32 gUnknown_030012E8;
IWRAM_DATA u16 gUnknown_030012EC; static u16 gUnknown_030012EC;
IWRAM_DATA u16 gUnknown_030012EE; static u16 gUnknown_030012EE;
IWRAM_DATA u16 gUnknown_030012F0; static u16 gUnknown_030012F0;
IWRAM_DATA u16 gUnknown_030012F2; static u16 gUnknown_030012F2;
IWRAM_DATA u16 gUnknown_030012F4; static u16 gUnknown_030012F4;
extern const u8 gUnknown_08625B6C[][0x148]; extern const u8 gUnknown_08625B6C[][0x148];
+1 -1
View File
@@ -38,7 +38,7 @@ struct Unk03006370
static void sub_81D5084(u8); static void sub_81D5084(u8);
extern struct Unk03006370 gUnknown_03006370; struct Unk03006370 gUnknown_03006370;
extern const u8 gUnknown_089A3470[]; extern const u8 gUnknown_089A3470[];
extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; extern const u8 gMultiBootProgram_BerryGlitchFix_Start[];
+5 -5
View File
@@ -36,11 +36,11 @@ static void DrawMetatile(s32 a, u16 *b, u16 c);
static void CameraPanningCB_PanAhead(void); static void CameraPanningCB_PanAhead(void);
// IWRAM bss vars // IWRAM bss vars
static IWRAM_DATA struct FieldCameraOffset sFieldCameraOffset; static struct FieldCameraOffset sFieldCameraOffset;
static IWRAM_DATA s16 sHorizontalCameraPan; static s16 sHorizontalCameraPan;
static IWRAM_DATA s16 sVerticalCameraPan; static s16 sVerticalCameraPan;
static IWRAM_DATA u8 gUnknown_03000E2C; static u8 gUnknown_03000E2C;
static IWRAM_DATA void (*sFieldCameraPanningCallback)(void); static void (*sFieldCameraPanningCallback)(void);
struct CameraObject gFieldCamera; struct CameraObject gFieldCamera;
u16 gTotalCameraPixelOffsetY; u16 gTotalCameraPixelOffsetY;
+1 -1
View File
@@ -232,7 +232,7 @@ static void Fldeff_MoveDeoxysRock_Step(u8 taskId);
// Static RAM declarations // Static RAM declarations
static IWRAM_DATA u8 sActiveList[32]; static u8 sActiveList[32];
// External declarations // External declarations
extern struct CompressedSpritePalette gMonPaletteTable[]; // GF made a mistake and did not extern it as const. extern struct CompressedSpritePalette gMonPaletteTable[]; // GF made a mistake and did not extern it as const.
+1 -1
View File
@@ -68,7 +68,7 @@ static u8 None_Finish(void);
EWRAM_DATA struct Weather gWeather = {0}; EWRAM_DATA struct Weather gWeather = {0};
EWRAM_DATA static u8 sFieldEffectPaletteGammaTypes[32] = {0}; EWRAM_DATA static u8 sFieldEffectPaletteGammaTypes[32] = {0};
IWRAM_DATA static const u8 *sPaletteGammaTypes; static const u8 *sPaletteGammaTypes;
// The drought weather effect uses a precalculated color lookup table. Presumably this // The drought weather effect uses a precalculated color lookup table. Presumably this
// is because the underlying color shift calculation is slow. // is because the underlying color shift calculation is slow.
+1
View File
@@ -891,6 +891,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION?
break; break;
default: default:
break;
} }
} }
+5 -5
View File
@@ -59,11 +59,11 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *);
static void HandleLongGrassOnHyper(u8, s16, s16); static void HandleLongGrassOnHyper(u8, s16, s16);
// IWRAM variables // IWRAM variables
static IWRAM_DATA u8 sCutSquareSide; static u8 sCutSquareSide;
static IWRAM_DATA u8 sTileCountFromPlayer_X; static u8 sTileCountFromPlayer_X;
static IWRAM_DATA u8 sTileCountFromPlayer_Y; static u8 sTileCountFromPlayer_Y;
static IWRAM_DATA u32 sUnused; static u32 sUnused;
static IWRAM_DATA bool8 sHyperCutTiles[CUT_HYPER_AREA]; static bool8 sHyperCutTiles[CUT_HYPER_AREA];
// EWRAM variables // EWRAM variables
static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL; static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
+2 -1
View File
@@ -1148,7 +1148,8 @@ static void sub_8112B78(struct Sprite *sprite)
if (++coeffB > 16) if (++coeffB > 16)
coeffB = 16; coeffB = 16;
if (--(s16)coeffA < 0) --coeffA;
if ((s16)coeffA < 0)
coeffA = 0; coeffA = 0;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(coeffA, coeffB)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(coeffA, coeffB));
+3
View File
@@ -18,6 +18,9 @@
extern u16 gUnknown_0203CF30[]; extern u16 gUnknown_0203CF30[];
// this file's functions // this file's functions
#if !defined(NONMATCHING) && MODERN
#define static
#endif
static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count);
static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count); static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count);
+2 -2
View File
@@ -127,7 +127,7 @@ void sub_81ABAE0(void);
u8 sub_81AB1F0(u8); u8 sub_81AB1F0(u8);
void sub_81AC23C(u8); void sub_81AC23C(u8);
void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*); void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*);
void PrintItemQuantityPlusGFX(u8 rboxId, int item_index_in_pocket, u8 a); void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a);
void ItemMenu_UseOutOfBattle(u8 taskId); void ItemMenu_UseOutOfBattle(u8 taskId);
void ItemMenu_Toss(u8 taskId); void ItemMenu_Toss(u8 taskId);
void ItemMenu_Register(u8 taskId); void ItemMenu_Register(u8 taskId);
@@ -830,7 +830,7 @@ void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu *unused)
} }
} }
void PrintItemQuantityPlusGFX(u8 rboxId, int item_index_in_pocket, u8 a) void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a)
{ {
u16 itemId; u16 itemId;
u16 itemQuantity; u16 itemQuantity;
+9
View File
@@ -0,0 +1,9 @@
#include "global.h"
#include "librfu.h"
struct RfuUnk1* gUnknown_03007870[4];
struct RfuUnk2* gUnknown_03007880[4];
struct RfuUnk5 *gUnknown_03007890;
u32 *gUnknown_03007894;
struct RfuUnk3* gUnknown_03007898;
u8 gUnknown_030078A0[12];
+1
View File
@@ -1,4 +1,5 @@
#include "global.h" #include "global.h"
#include "main.h" #include "main.h"
#include "librfu.h"
//TODO: decompile asm/librfu_intr.s to here //TODO: decompile asm/librfu_intr.s to here
+2
View File
@@ -1,6 +1,8 @@
#include "global.h" #include "global.h"
#include "librfu.h" #include "librfu.h"
struct RfuStruct *gRfuState;
extern IntrFunc IntrSIO32(void); extern IntrFunc IntrSIO32(void);
extern void STWI_stop_timer(void); extern void STWI_stop_timer(void);
+15 -16
View File
@@ -52,22 +52,21 @@ struct LinkTestBGInfo
// Static RAM declarations // Static RAM declarations
IWRAM_DATA struct BlockTransfer sBlockSend; static struct BlockTransfer sBlockSend;
IWRAM_DATA u32 link_c_unused_03000d1c; static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
IWRAM_DATA struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; static u32 sBlockSendDelayCounter;
IWRAM_DATA u32 sBlockSendDelayCounter; static u32 gUnknown_03000D54;
IWRAM_DATA u32 gUnknown_03000D54; static u8 gUnknown_03000D58;
IWRAM_DATA u8 gUnknown_03000D58; static u32 sPlayerDataExchangeStatus;
IWRAM_DATA u32 sPlayerDataExchangeStatus; static u32 gUnknown_03000D60;
IWRAM_DATA u32 gUnknown_03000D60; static u8 sLinkTestLastBlockSendPos;
IWRAM_DATA u8 sLinkTestLastBlockSendPos; static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
ALIGNED() IWRAM_DATA u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; static u8 sNumVBlanksWithoutSerialIntr;
IWRAM_DATA u8 sNumVBlanksWithoutSerialIntr; static bool8 sSendBufferEmpty;
IWRAM_DATA bool8 sSendBufferEmpty; static u16 sSendNonzeroCheck;
IWRAM_DATA u16 sSendNonzeroCheck; static u16 sRecvNonzeroCheck;
IWRAM_DATA u16 sRecvNonzeroCheck; static u8 sChecksumAvailable;
IWRAM_DATA u8 sChecksumAvailable; static u8 sHandshakePlayerCount;
IWRAM_DATA u8 sHandshakePlayerCount;
u16 gLinkPartnersHeldKeys[6]; u16 gLinkPartnersHeldKeys[6];
u32 gLinkDebugSeed; u32 gLinkDebugSeed;
+6 -5
View File
@@ -24,10 +24,10 @@ extern u16 gHeldKeyCodeToSend;
struct UnkRfuStruct_1 gUnknown_03004140; struct UnkRfuStruct_1 gUnknown_03004140;
struct UnkRfuStruct_2 gUnknown_03005000; struct UnkRfuStruct_2 gUnknown_03005000;
IWRAM_DATA u8 gUnknown_03000D74; BSS_DATA u8 gUnknown_03000D74;
ALIGNED(4) IWRAM_DATA u8 gUnknown_03000D78[8]; ALIGNED(4) BSS_DATA u8 gUnknown_03000D78[8];
IWRAM_DATA u8 gUnknown_03000D80[16]; BSS_DATA u8 gUnknown_03000D80[16];
IWRAM_DATA u16 gUnknown_03000D90[8]; BSS_DATA u16 gUnknown_03000D90[8];
EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0; EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0;
EWRAM_DATA ALIGNED(4) struct UnkLinkRfuStruct_02022B14 gUnknown_02022B14 = {}; EWRAM_DATA ALIGNED(4) struct UnkLinkRfuStruct_02022B14 gUnknown_02022B14 = {};
@@ -2021,6 +2021,8 @@ void sub_800DBF8(u8 *q1, u8 mode)
} }
} }
// File boundary here maybe?
void PkmnStrToASCII(u8 *q1, const u8 *q2) void PkmnStrToASCII(u8 *q1, const u8 *q2)
{ {
s32 i; s32 i;
@@ -5142,4 +5144,3 @@ u32 GetRfuRecvQueueLength(void)
{ {
return gUnknown_03005000.unk_124.unk_8c2; return gUnknown_03005000.unk_124.unk_8c2;
} }
+4 -4
View File
@@ -42,10 +42,10 @@ EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0};
EWRAM_DATA u32 gLastEncryptionKey = 0; EWRAM_DATA u32 gLastEncryptionKey = 0;
// IWRAM common // IWRAM common
IWRAM_DATA bool32 gFlashMemoryPresent; bool32 gFlashMemoryPresent;
IWRAM_DATA struct SaveBlock1 *gSaveBlock1Ptr; struct SaveBlock1 *gSaveBlock1Ptr;
IWRAM_DATA struct SaveBlock2 *gSaveBlock2Ptr; struct SaveBlock2 *gSaveBlock2Ptr;
IWRAM_DATA struct PokemonStorage *gPokemonStoragePtr; struct PokemonStorage *gPokemonStoragePtr;
// code // code
void CheckForFlashMemory(void) void CheckForFlashMemory(void)
+1
View File
@@ -1,3 +1,4 @@
#include <string.h>
#include "gba/m4a_internal.h" #include "gba/m4a_internal.h"
extern const u8 gCgb3Vol[]; extern const u8 gCgb3Vol[];
+20
View File
@@ -85,7 +85,27 @@ void EnableVCountIntrAtLine150(void);
void AgbMain() void AgbMain()
{ {
#if MODERN
// Modern compilers are liberal with the stack on entry to this function,
// so RegisterRamReset may crash if it resets IWRAM.
RegisterRamReset(RESET_ALL & ~RESET_IWRAM);
asm("mov\tr1, #0xC0\n"
"\tlsl\tr1, r1, #0x12\n"
"\tmov r2, #0xFC\n"
"\tlsl r2, r2, #0x7\n"
"\tadd\tr2, r1, r2\n"
"\tmov\tr0, #0\n"
"\tmov\tr3, r0\n"
"\tmov\tr4, r0\n"
"\tmov\tr5, r0\n"
".LCU0:\n"
"\tstmia r1!, {r0, r3, r4, r5}\n"
"\tcmp\tr1, r2\n"
"\tbcc\t.LCU0\n"
);
#else
RegisterRamReset(RESET_ALL); RegisterRamReset(RESET_ALL);
#endif //MODERN
*(vu16 *)BG_PLTT = 0x7FFF; *(vu16 *)BG_PLTT = 0x7FFF;
InitGpuRegManager(); InitGpuRegManager();
REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3; REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3;
+1 -1
View File
@@ -176,7 +176,7 @@
static EWRAM_DATA u8 gUnknown_02022D04 = 0; static EWRAM_DATA u8 gUnknown_02022D04 = 0;
static EWRAM_DATA u16 sCurrItemAndOptionMenuCheck = 0; static EWRAM_DATA u16 sCurrItemAndOptionMenuCheck = 0;
static IWRAM_DATA u8 sBirchSpeechMainTaskId; static u8 sBirchSpeechMainTaskId;
// Static ROM declarations // Static ROM declarations
+1 -1
View File
@@ -33,7 +33,7 @@ static void Task_BardSong(u8 taskId);
static void StorytellerSetup(void); static void StorytellerSetup(void);
static void Storyteller_ResetFlag(void); static void Storyteller_ResetFlag(void);
IWRAM_DATA u8 sSelectedStory; static u8 sSelectedStory;
struct BardSong gBardSong; struct BardSong gBardSong;
+1 -1
View File
@@ -27,7 +27,7 @@ EWRAM_DATA static struct YesNoFuncTable gUnknown_0203A138 = {0};
EWRAM_DATA static u8 gUnknown_0203A140 = 0; EWRAM_DATA static u8 gUnknown_0203A140 = 0;
// IWRAM bss vars // IWRAM bss vars
IWRAM_DATA static TaskFunc gUnknown_0300117C; static TaskFunc gUnknown_0300117C;
// const rom data // const rom data
static const struct OamData sOamData_859F4E8 = static const struct OamData sOamData_859F4E8 =
+1 -1
View File
@@ -258,7 +258,7 @@ EWRAM_DATA static struct Struct203CF10 *sUnknown_0203CF10 = NULL;
EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL; EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL;
EWRAM_DATA struct MirageTowerPulseBlend *sMirageTowerPulseBlend = NULL; EWRAM_DATA struct MirageTowerPulseBlend *sMirageTowerPulseBlend = NULL;
IWRAM_DATA static u16 gUnknown_030012A8[8]; static u16 gUnknown_030012A8[8];
bool8 IsMirageTowerVisible(void) bool8 IsMirageTowerVisible(void)
{ {
+2 -2
View File
@@ -1,7 +1,7 @@
#include "gba/gba.h" #include "gba/gba.h"
#include "multiboot.h" #include "multiboot.h"
IWRAM_DATA static u16 MultiBoot_required_data[MULTIBOOT_NCHILD]; static u16 MultiBoot_required_data[MULTIBOOT_NCHILD];
static int MultiBootSend(struct MultiBootParam *mp, u16 data); static int MultiBootSend(struct MultiBootParam *mp, u16 data);
static int MultiBootHandShake(struct MultiBootParam *mp); static int MultiBootHandShake(struct MultiBootParam *mp);
@@ -435,7 +435,7 @@ static int MultiBootHandShake(struct MultiBootParam *mp)
#undef must_data #undef must_data
} }
static void MultiBootWaitCycles(u32 cycles) static NOINLINE void MultiBootWaitCycles(u32 cycles)
{ {
asm("mov r2, pc"); asm("mov r2, pc");
asm("lsr r2, #24"); asm("lsr r2, #24");
+6 -6
View File
@@ -186,15 +186,15 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr
static u16 GetCenterScreenMetatileBehavior(void); static u16 GetCenterScreenMetatileBehavior(void);
// IWRAM bss vars // IWRAM bss vars
IWRAM_DATA static void *sUnusedOverworldCallback; static void *sUnusedOverworldCallback;
IWRAM_DATA static u8 sPlayerTradingStates[4]; static u8 sPlayerTradingStates[4];
// This callback is called with a player's key code. It then returns an // This callback is called with a player's key code. It then returns an
// adjusted key code, effectively intercepting the input before anything // adjusted key code, effectively intercepting the input before anything
// can process it. // can process it.
IWRAM_DATA static u16 (*sPlayerKeyInterceptCallback)(u32); static u16 (*sPlayerKeyInterceptCallback)(u32);
IWRAM_DATA static bool8 sUnknown_03000E18; static bool8 sUnknown_03000E18;
IWRAM_DATA static u8 sRfuKeepAliveTimer; static u8 sRfuKeepAliveTimer;
IWRAM_DATA static u32 sUnusedVar; static u32 sUnusedVar;
// IWRAM common // IWRAM common
u16 *gBGTilemapBuffers1; u16 *gBGTilemapBuffers1;
+3 -3
View File
@@ -1596,8 +1596,8 @@ static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, M
gUnknown_0203CEC4->task = task; gUnknown_0203CEC4->task = task;
gUnknown_0203CEC4->exitCallback = NULL; gUnknown_0203CEC4->exitCallback = NULL;
gUnknown_0203CEC4->unk8_1 = 0; gUnknown_0203CEC4->unk8_1 = 0;
gUnknown_0203CEC4->unk8_2 = 0xFF; gUnknown_0203CEC4->unk8_2 = 0x7F;
gUnknown_0203CEC4->unk9_0 = 0xFF; gUnknown_0203CEC4->unk9_0 = 0x7F;
if (a == 4) if (a == 4)
gUnknown_0203CEC4->unk8_0 = TRUE; gUnknown_0203CEC4->unk8_0 = TRUE;
@@ -1820,7 +1820,7 @@ static bool8 AllocPartyMenuBg(void)
static bool8 AllocPartyMiscGfx(void) static bool8 AllocPartyMiscGfx(void)
{ {
int sizeout; u32 sizeout;
switch (gUnknown_0203CEC4->data[0]) switch (gUnknown_0203CEC4->data[0])
{ {
+5 -5
View File
@@ -763,11 +763,11 @@ static void sub_813D6B4(void)
static void CreateAreaMarkerSprites(void) static void CreateAreaMarkerSprites(void)
{ {
u8 spriteId; u8 spriteId;
static IWRAM_DATA s16 x; static s16 x;
static IWRAM_DATA s16 y; static s16 y;
static IWRAM_DATA s16 i; static s16 i;
static IWRAM_DATA s16 mapSecId; static s16 mapSecId;
static IWRAM_DATA s16 numSprites; static s16 numSprites;
LoadSpriteSheet(&sAreaMarkerSpriteSheet); LoadSpriteSheet(&sAreaMarkerSpriteSheet);
LoadSpritePalette(&sAreaMarkerSpritePalette); LoadSpritePalette(&sAreaMarkerSpritePalette);
+23 -12
View File
@@ -177,9 +177,9 @@ static void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite);
#define STRUCT_COUNT 4 #define STRUCT_COUNT 4
// IWRAM bss // IWRAM bss
static IWRAM_DATA struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; static struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT];
static IWRAM_DATA u8 sUnknown_03001270; static u8 sUnknown_03001270;
static IWRAM_DATA bool32 sUnknown_03001274; static bool32 sUnknown_03001274;
// const rom data // const rom data
static const u8 sSpeciesToBackAnimSet[] = static const u8 sSpeciesToBackAnimSet[] =
@@ -861,16 +861,27 @@ u8 GetSpeciesBackAnimSet(u16 species)
} }
#define tState data[0] #define tState data[0]
#define tPtrLO data[1] #define tPtrHi data[1]
#define tPtrHI data[2] #define tPtrLo data[2]
#define tAnimId data[3] #define tAnimId data[3]
#define tSaved0 data[4] #define tSaved0 data[4]
#define tSaved2 data[5] #define tSaved2 data[5]
// BUG: In vanilla, tPtrLo is read as an s16, so if bit 15 of the
// address were to be set it would cause the pointer to be read
// as 0xFFFFXXXX instead of the desired 0x02YYXXXX.
// By dumb luck, this is not an issue in vanilla. However,
// changing the link order revealed this bug.
#if MODERN
#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo)))
#else
#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo)))
#endif //MODERN
static void Task_HandleMonAnimation(u8 taskId) static void Task_HandleMonAnimation(u8 taskId)
{ {
u32 i; u32 i;
struct Sprite *sprite = (struct Sprite*)(u32)((gTasks[taskId].tPtrLO << 0x10) | (gTasks[taskId].tPtrHI)); struct Sprite *sprite = ANIM_SPRITE(taskId);
if (gTasks[taskId].tState == 0) if (gTasks[taskId].tState == 0)
{ {
@@ -900,8 +911,8 @@ static void Task_HandleMonAnimation(u8 taskId)
void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId) void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId)
{ {
u8 taskId = CreateTask(Task_HandleMonAnimation, 128); u8 taskId = CreateTask(Task_HandleMonAnimation, 128);
gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10;
gTasks[taskId].tPtrHI = (u32)(sprite); gTasks[taskId].tPtrLo = (u32)(sprite);
gTasks[taskId].tAnimId = frontAnimId; gTasks[taskId].tAnimId = frontAnimId;
} }
@@ -916,8 +927,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet)
u8 nature, taskId, animId, battlerId; u8 nature, taskId, animId, battlerId;
taskId = CreateTask(Task_HandleMonAnimation, 128); taskId = CreateTask(Task_HandleMonAnimation, 128);
gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10;
gTasks[taskId].tPtrHI = (u32)(sprite); gTasks[taskId].tPtrLo = (u32)(sprite);
battlerId = sprite->data[0]; battlerId = sprite->data[0];
nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]); nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]);
@@ -927,8 +938,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet)
} }
#undef tState #undef tState
#undef tPtrLO #undef tPtrHi
#undef tPtrHI #undef tPtrLo
#undef tAnimId #undef tAnimId
#undef tSaved0 #undef tSaved0
#undef tSaved2 #undef tSaved2
+2 -2
View File
@@ -269,8 +269,8 @@ int sub_802E354(int, u16, u16);
void sub_802E3A8(void); void sub_802E3A8(void);
void sub_802D12C(u8 taskId); void sub_802D12C(u8 taskId);
extern struct PokemonJump1 *gUnknown_02022CFC; EWRAM_DATA struct PokemonJump1 *gUnknown_02022CFC = NULL;
extern struct PokemonJump2 *gUnknown_02022D00; EWRAM_DATA struct PokemonJump2 *gUnknown_02022D00 = NULL;
const struct PokemonJumpMons gPkmnJumpSpecies[] = const struct PokemonJumpMons gPkmnJumpSpecies[] =
{ {
+4 -1
View File
@@ -443,7 +443,7 @@ enum
#define TAG_TILE_1 0x1 #define TAG_TILE_1 0x1
// IWRAM bss // IWRAM bss
IWRAM_DATA static u32 gUnknown_03000F78[98]; static u32 gUnknown_03000F78[98];
// EWRAM DATA // EWRAM DATA
EWRAM_DATA static u8 sPreviousBoxOption = 0; EWRAM_DATA static u8 sPreviousBoxOption = 0;
@@ -464,6 +464,9 @@ EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0;
EWRAM_DATA static bool8 sCanOnlyMove = 0; EWRAM_DATA static bool8 sCanOnlyMove = 0;
// This file's functions. // This file's functions.
#if !defined(NONMATCHING) && MODERN
#define static
#endif
static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr); static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr);
static void Cb2_EnterPSS(u8 boxOption); static void Cb2_EnterPSS(u8 boxOption);
static u8 GetCurrentBoxOption(void); static u8 GetCurrentBoxOption(void);
+22 -22
View File
@@ -64,16 +64,16 @@ static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide);
static void HideLeftHeaderSprites(bool32 isOnRightSide); static void HideLeftHeaderSprites(bool32 isOnRightSide);
static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide); static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide);
static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide); static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide);
static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration); static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration);
static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); static void SpriteCB_MoveLeftHeader(struct Sprite *sprite);
static void InitPokenavMainMenuResources(void); static void InitPokenavMainMenuResources(void);
static void InitHoennMapHeaderSprites(void); static void InitHoennMapHeaderSprites(void);
static void sub_81C7B74(void); static void sub_81C7B74(void);
static u32 LoopedTask_ScrollMenuHeaderDown(int a0); static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0);
static u32 LoopedTask_ScrollMenuHeaderUp(int a0); static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0);
static void sub_81C7BF8(u32 a0); static void sub_81C7BF8(u32 a0);
static void SpriteCB_SpinningPokenav(struct Sprite* sprite); static void SpriteCB_SpinningPokenav(struct Sprite* sprite);
static u32 LoopedTask_InitPokenavMenu(int a0); static u32 LoopedTask_InitPokenavMenu(s32 a0);
const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal");
const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz");
@@ -360,7 +360,7 @@ bool32 WaitForPokenavShutdownFade(void)
return TRUE; return TRUE;
} }
static u32 LoopedTask_InitPokenavMenu(int a0) static u32 LoopedTask_InitPokenavMenu(s32 a0)
{ {
struct PokenavMainMenuResources *structPtr; struct PokenavMainMenuResources *structPtr;
@@ -440,7 +440,7 @@ bool32 MainMenuLoopedTaskIsBusy(void)
return IsLoopedTaskActive(structPtr->currentTaskId); return IsLoopedTaskActive(structPtr->currentTaskId);
} }
static u32 LoopedTask_ScrollMenuHeaderDown(int a0) static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0)
{ {
switch (a0) switch (a0)
{ {
@@ -461,7 +461,7 @@ static u32 LoopedTask_ScrollMenuHeaderDown(int a0)
} }
} }
static u32 LoopedTask_ScrollMenuHeaderUp(int a0) static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0)
{ {
if (ChangeBgY(0, 384, 2) <= 0) if (ChangeBgY(0, 384, 2) <= 0)
{ {
@@ -637,7 +637,7 @@ _081C7AAE:\n\
.syntax divided"); .syntax divided");
} }
void sub_81C7AC0(int a0) void sub_81C7AC0(s32 a0)
{ {
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
@@ -708,7 +708,7 @@ static void sub_81C7BF8(u32 windowId)
static void InitPokenavMainMenuResources(void) static void InitPokenavMainMenuResources(void)
{ {
int i; s32 i;
u8 spriteId; u8 spriteId;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
@@ -758,13 +758,13 @@ void ResumeSpinningPokenavSprite(void)
static void InitHoennMapHeaderSprites(void) static void InitHoennMapHeaderSprites(void)
{ {
int i, spriteId; s32 i, spriteId;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet);
AllocSpritePalette(1); AllocSpritePalette(1);
AllocSpritePalette(2); AllocSpritePalette(2);
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{ {
spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1); spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1);
structPtr->leftHeaderSprites[i] = &gSprites[spriteId]; structPtr->leftHeaderSprites[i] = &gSprites[spriteId];
@@ -859,10 +859,10 @@ void sub_81C7FC4(u32 arg0, bool32 arg1)
void sub_81C7FDC(void) void sub_81C7FDC(void)
{ {
int i; s32 i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{ {
structPtr->leftHeaderSprites[i]->invisible = TRUE; structPtr->leftHeaderSprites[i]->invisible = TRUE;
structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE;
@@ -881,7 +881,7 @@ bool32 sub_81C8010(void)
static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide)
{ {
int start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide) if (!isOnRightSide)
@@ -889,7 +889,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide)
else else
start = 256, end = 160; start = 256, end = 160;
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{ {
structPtr->leftHeaderSprites[i]->pos1.y = startY; structPtr->leftHeaderSprites[i]->pos1.y = startY;
MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12);
@@ -898,7 +898,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide)
static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide)
{ {
int start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide) if (!isOnRightSide)
@@ -906,7 +906,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide)
else else
start = 256, end = 192; start = 256, end = 192;
for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++)
{ {
structPtr->submenuLeftHeaderSprites[i]->pos1.y = startY; structPtr->submenuLeftHeaderSprites[i]->pos1.y = startY;
MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12);
@@ -915,7 +915,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide)
static void HideLeftHeaderSprites(bool32 isOnRightSide) static void HideLeftHeaderSprites(bool32 isOnRightSide)
{ {
int start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide) if (!isOnRightSide)
@@ -923,7 +923,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide)
else else
start = 192, end = 256; start = 192, end = 256;
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{ {
MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12);
} }
@@ -931,7 +931,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide)
static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide)
{ {
int start, end, i; s32 start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide) if (!isOnRightSide)
@@ -939,13 +939,13 @@ static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide)
else else
start = 192, end = 256; start = 192, end = 256;
for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++)
{ {
MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12);
} }
} }
static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration) static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration)
{ {
sprite->pos1.x = startX; sprite->pos1.x = startX;
sprite->data[0] = startX * 16; sprite->data[0] = startX * 16;
+2 -2
View File
@@ -36,8 +36,8 @@ extern const u8 gText_RibbonsF700[];
extern const u8 *const gRibbonDescriptionPointers[][2]; extern const u8 *const gRibbonDescriptionPointers[][2];
extern const u8 *const gGiftRibbonDescriptionPointers[][2]; extern const u8 *const gGiftRibbonDescriptionPointers[][2];
extern u32 gUnknown_030012C0; static u32 gUnknown_030012C0;
extern u32 gUnknown_030012C4; static u32 gUnknown_030012C4;
void sub_81D0E84(struct Pokenav10Struct2 *structPtr); void sub_81D0E84(struct Pokenav10Struct2 *structPtr);
void sub_81D0FF0(struct Pokenav10Struct2 *structPtr); void sub_81D0FF0(struct Pokenav10Struct2 *structPtr);
+2 -2
View File
@@ -34,7 +34,7 @@ static u32 sub_81CABFC(struct Pokenav3Struct *);
static u32 sub_81CAC04(struct Pokenav3Struct *); static u32 sub_81CAC04(struct Pokenav3Struct *);
static u32 sub_81CACB8(struct Pokenav3Struct *); static u32 sub_81CACB8(struct Pokenav3Struct *);
static u32 sub_81CACF8(struct Pokenav3Struct *); static u32 sub_81CACF8(struct Pokenav3Struct *);
static u32 sub_81CAD20(int); static u32 sub_81CAD20(s32);
static bool32 sub_81CB1D0(void); static bool32 sub_81CB1D0(void);
#include "data/text/trainers_eye_messages.h" #include "data/text/trainers_eye_messages.h"
@@ -191,7 +191,7 @@ static u32 sub_81CACF8(struct Pokenav3Struct *state)
return 0; return 0;
} }
static u32 sub_81CAD20(int taskState) static u32 sub_81CAD20(s32 taskState)
{ {
int i, j; int i, j;
struct Pokenav3Struct *state = GetSubstructPtr(5); struct Pokenav3Struct *state = GetSubstructPtr(5);
+17 -17
View File
@@ -50,7 +50,7 @@ struct Pokenav4Struct
}; };
static bool32 sub_81CB310(void); static bool32 sub_81CB310(void);
static u32 sub_81CB324(int); static u32 sub_81CB324(s32);
static void sub_81CBBB8(void); static void sub_81CBBB8(void);
static void sub_81CBC1C(void); static void sub_81CBC1C(void);
static void sub_81CC2B4(void); static void sub_81CC2B4(void);
@@ -320,7 +320,7 @@ static bool32 sub_81CB310(void)
return IsLoopedTaskActive(state->unk4); return IsLoopedTaskActive(state->unk4);
} }
static u32 sub_81CB324(int taskState) static u32 sub_81CB324(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -393,7 +393,7 @@ static u32 sub_81CB324(int taskState)
} }
} }
u32 sub_81CB510(int taskState) u32 sub_81CB510(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -430,7 +430,7 @@ u32 sub_81CB510(int taskState)
return 4; return 4;
} }
u32 sub_81CB588(int taskState) u32 sub_81CB588(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -467,7 +467,7 @@ u32 sub_81CB588(int taskState)
return 4; return 4;
} }
u32 sub_81CB600(int taskState) u32 sub_81CB600(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -504,7 +504,7 @@ u32 sub_81CB600(int taskState)
return 4; return 4;
} }
u32 sub_81CB678(int taskState) u32 sub_81CB678(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -541,7 +541,7 @@ u32 sub_81CB678(int taskState)
return 4; return 4;
} }
u32 sub_81CB6F0(int taskState) u32 sub_81CB6F0(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -560,7 +560,7 @@ u32 sub_81CB6F0(int taskState)
return 4; return 4;
} }
u32 sub_81CB734(int taskState) u32 sub_81CB734(s32 taskState)
{ {
struct Pokenav4Struct *state; struct Pokenav4Struct *state;
u16 var0; u16 var0;
@@ -572,7 +572,7 @@ u32 sub_81CB734(int taskState)
return 4; return 4;
} }
u32 sub_81CB75C(int taskState) u32 sub_81CB75C(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -591,7 +591,7 @@ u32 sub_81CB75C(int taskState)
return 4; return 4;
} }
u32 sub_81CB7A0(int taskState) u32 sub_81CB7A0(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -623,7 +623,7 @@ u32 sub_81CB7A0(int taskState)
return 4; return 4;
} }
u32 sub_81CB824(int taskState) u32 sub_81CB824(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -649,7 +649,7 @@ u32 sub_81CB824(int taskState)
return 4; return 4;
} }
u32 sub_81CB888(int taskState) u32 sub_81CB888(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
u32 result = 0; u32 result = 0;
@@ -713,7 +713,7 @@ u32 sub_81CB888(int taskState)
return result; return result;
} }
u32 sub_81CB93C(int taskState) u32 sub_81CB93C(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -742,7 +742,7 @@ u32 sub_81CB93C(int taskState)
return 4; return 4;
} }
u32 sub_81CB9C8(int taskState) u32 sub_81CB9C8(s32 taskState)
{ {
int index; int index;
int var0; int var0;
@@ -781,7 +781,7 @@ u32 sub_81CB9C8(int taskState)
return 4; return 4;
} }
u32 sub_81CBA68(int taskState) u32 sub_81CBA68(s32 taskState)
{ {
struct Pokenav4Struct *state = GetSubstructPtr(6); struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState) switch (taskState)
@@ -807,7 +807,7 @@ u32 sub_81CBA68(int taskState)
return 4; return 4;
} }
u32 sub_81CBAD4(int taskState) u32 sub_81CBAD4(s32 taskState)
{ {
int index; int index;
int var0; int var0;
@@ -846,7 +846,7 @@ u32 sub_81CBAD4(int taskState)
return 4; return 4;
} }
u32 sub_81CBB74(int taskState) u32 sub_81CBB74(s32 taskState)
{ {
switch (taskState) switch (taskState)
{ {
+4 -4
View File
@@ -42,8 +42,8 @@ struct CityMapEntry
static u32 sub_81CC568(struct Pokenav5Struct *); static u32 sub_81CC568(struct Pokenav5Struct *);
static u32 sub_81CC5B4(struct Pokenav5Struct *); static u32 sub_81CC5B4(struct Pokenav5Struct *);
static u32 sub_81CC5DC(struct Pokenav5Struct *); static u32 sub_81CC5DC(struct Pokenav5Struct *);
static u32 sub_81CC6F4(int); static u32 sub_81CC6F4(s32);
static u32 sub_81CCD34(int); static u32 sub_81CCD34(s32);
static bool32 sub_81CC6BC(void); static bool32 sub_81CC6BC(void);
static void sub_81CC9EC(void); static void sub_81CC9EC(void);
static void sub_81CC9C0(void); static void sub_81CC9C0(void);
@@ -295,7 +295,7 @@ static bool8 sub_81CC6D0(void)
return gSaveBlock2Ptr->regionMapZoom == 1; return gSaveBlock2Ptr->regionMapZoom == 1;
} }
static u32 sub_81CC6F4(int taskState) static u32 sub_81CC6F4(s32 taskState)
{ {
int var0; int var0;
struct RegionMap *regionMap; struct RegionMap *regionMap;
@@ -611,7 +611,7 @@ static bool32 sub_81CCD24(void)
return FuncIsActiveLoopedTask(sub_81CCD34); return FuncIsActiveLoopedTask(sub_81CCD34);
} }
static u32 sub_81CCD34(int taskState) static u32 sub_81CCD34(s32 taskState)
{ {
struct Pokenav5Struct_2 *state = GetSubstructPtr(4); struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
if (taskState < (int)ARRAY_COUNT(gPokenavCityMaps)) if (taskState < (int)ARRAY_COUNT(gPokenavCityMaps))
+2
View File
@@ -10,6 +10,8 @@ u32 sub_81CE5E4(int);
u32 sub_81CE6BC(int); u32 sub_81CE6BC(int);
u32 sub_81CE700(int); u32 sub_81CE700(int);
BSS_DATA u8 gUnknown_030012BC;
const u16 gUnknown_086231E8[] = INCBIN_U16("graphics/pokenav/86231E8.gbapal"); const u16 gUnknown_086231E8[] = INCBIN_U16("graphics/pokenav/86231E8.gbapal");
const u16 gUnknown_08623208[] = INCBIN_U16("graphics/pokenav/8623208.gbapal"); const u16 gUnknown_08623208[] = INCBIN_U16("graphics/pokenav/8623208.gbapal");
const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz");
+2 -2
View File
@@ -8,8 +8,8 @@ EWRAM_DATA static u8 sUnknown = 0;
EWRAM_DATA static u32 sRandCount = 0; EWRAM_DATA static u32 sRandCount = 0;
// IWRAM common // IWRAM common
IWRAM_DATA u32 gRngValue; u32 gRngValue;
IWRAM_DATA u32 gRng2Value; u32 gRng2Value;
u16 Random(void) u16 Random(void)
{ {
+15 -15
View File
@@ -82,21 +82,21 @@ union PlayerRecords
// Static RAM declarations // Static RAM declarations
static IWRAM_DATA bool8 gUnknown_03001130; static bool8 gUnknown_03001130;
static IWRAM_DATA struct SecretBase *sSecretBasesSave; static struct SecretBase *sSecretBasesSave;
static IWRAM_DATA TVShow *sTvShowsSave; static TVShow *sTvShowsSave;
static IWRAM_DATA PokeNews *sPokeNewsSave; static PokeNews *sPokeNewsSave;
static IWRAM_DATA OldMan *sOldManSave; static OldMan *sOldManSave;
static IWRAM_DATA struct EasyChatPair *sEasyChatPairsSave; static struct EasyChatPair *sEasyChatPairsSave;
static IWRAM_DATA struct RecordMixingDayCareMail *gUnknown_03001148; static struct RecordMixingDayCareMail *gUnknown_03001148;
static IWRAM_DATA void *sBattleTowerSave; static void *sBattleTowerSave;
static IWRAM_DATA LilycoveLady *sLilycoveLadySave; static LilycoveLady *sLilycoveLadySave;
static IWRAM_DATA void *sApprenticesSave; static void *sApprenticesSave;
static IWRAM_DATA void *sBattleTowerSave_Duplicate; static void *sBattleTowerSave_Duplicate;
static IWRAM_DATA u32 sRecordStructSize; static u32 sRecordStructSize;
static IWRAM_DATA u8 gUnknown_03001160; static u8 gUnknown_03001160;
static IWRAM_DATA u32 filler_03001164; static u32 filler_03001164;
static IWRAM_DATA struct PlayerHallRecords *gUnknown_03001168[3]; static struct PlayerHallRecords *gUnknown_03001168[3];
static EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02039F9C = {0}; static EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02039F9C = {0};
static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL; static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL;
+2 -2
View File
@@ -100,8 +100,8 @@ EWRAM_DATA static u8 sApprenticeId = 0;
EWRAM_DATA static u16 sEasyChatSpeech[6] = {0}; EWRAM_DATA static u16 sEasyChatSpeech[6] = {0};
EWRAM_DATA static u8 sBattleOutcome = 0; EWRAM_DATA static u8 sBattleOutcome = 0;
IWRAM_DATA static u8 sRecordMixFriendLanguage; static u8 sRecordMixFriendLanguage;
IWRAM_DATA static u8 sApprenticeLanguage; static u8 sApprenticeLanguage;
// this file's functions // this file's functions
static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2); static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2);
+1 -1
View File
@@ -142,7 +142,7 @@ static const union AnimCmd sSpriteAnim_85104CC[] =
static const union AnimCmd sSpriteAnim_85104D4[] = static const union AnimCmd sSpriteAnim_85104D4[] =
{ {
ANIMCMD_FRAME(0, 158, .vFlip = TRUE), ANIMCMD_FRAME(0, 30, .vFlip = TRUE),
ANIMCMD_JUMP(0), ANIMCMD_JUMP(0),
}; };
+1 -1
View File
@@ -14,7 +14,7 @@ void sub_81700F8(void)
imeBackup = REG_IME; imeBackup = REG_IME;
REG_IME = 0; REG_IME = 0;
RegisterRamReset(0x00000001); RegisterRamReset(RESET_EWRAM);
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
REG_IME = imeBackup; REG_IME = imeBackup;
gMain.inBattle = FALSE; gMain.inBattle = FALSE;
+3 -3
View File
@@ -43,9 +43,9 @@ static bool32 SharesPalWithAnyActive(u32 id);
static void sub_8035648(void); static void sub_8035648(void);
// iwram // iwram
static IWRAM_DATA s32 gUnknown_03000DD4; static s32 gUnknown_03000DD4;
static IWRAM_DATA s32 gUnknown_03000DD8; static s32 gUnknown_03000DD8;
static IWRAM_DATA s32 gUnknown_03000DDC; static s32 gUnknown_03000DDC;
// ewram // ewram
static EWRAM_DATA struct UnkStruct1 *gUnknown_02022E10 = {0}; static EWRAM_DATA struct UnkStruct1 *gUnknown_02022E10 = {0};
+4 -4
View File
@@ -3994,8 +3994,8 @@ static void sub_8144514(struct Sprite *sprite)
if (gUnknown_0203AB88->var94 > 40.f) if (gUnknown_0203AB88->var94 > 40.f)
return; return;
gUnknown_0203AB88->var98 = -(4.0f / (float)gUnknown_0203AB88->var86); gUnknown_0203AB88->var98 = -(4.0f / (float)(gUnknown_0203AB88->var86));
gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)gUnknown_0203AB88->var86); gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)(gUnknown_0203AB88->var86));
sprite->animNum = 2; sprite->animNum = 2;
sprite->animBeginning = TRUE; sprite->animBeginning = TRUE;
sprite->animEnded = FALSE; sprite->animEnded = FALSE;
@@ -4010,8 +4010,8 @@ static void sub_81445D8(struct Sprite *sprite)
return; return;
m4aSongNumStartOrChange(SE_TAMAKORO_E); m4aSongNumStartOrChange(SE_TAMAKORO_E);
gUnknown_0203AB88->var98 = -(20.0f / (float)gUnknown_0203AB88->var84); gUnknown_0203AB88->var98 = -(20.0f / (float)(gUnknown_0203AB88->var84));
gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)gUnknown_0203AB88->var84); gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)(gUnknown_0203AB88->var84));
sprite->animNum = 1; sprite->animNum = 1;
sprite->animBeginning = TRUE; sprite->animBeginning = TRUE;
sprite->animEnded = FALSE; sprite->animEnded = FALSE;
+2 -1
View File
@@ -408,7 +408,8 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend)
} }
} }
break; break;
case 2: // Flip back and forth case (MODERN ? -2 : 2): // Flip back and forth
// This code is never reached in vanilla
if (pulseBlendPalette->fadeDirection) if (pulseBlendPalette->fadeDirection)
pulseBlendPalette->blendCoeff = 0; pulseBlendPalette->blendCoeff = 0;
else else
+4 -4
View File
@@ -4,10 +4,10 @@
#include "text.h" #include "text.h"
// iwram bss // iwram bss
IWRAM_DATA static u16 sErrorStatus; static u16 sErrorStatus;
IWRAM_DATA static struct SiiRtcInfo sRtc; static struct SiiRtcInfo sRtc;
IWRAM_DATA static u8 sProbeResult; static u8 sProbeResult;
IWRAM_DATA static u16 sSavedIme; static u16 sSavedIme;
// iwram common // iwram common
struct Time gLocalTime; struct Time gLocalTime;
+4 -1
View File
@@ -626,7 +626,10 @@ static u16 CalculateChecksum(void *data, u16 size)
u32 checksum = 0; u32 checksum = 0;
for (i = 0; i < (size / 4); i++) for (i = 0; i < (size / 4); i++)
checksum += *((u32 *)data)++; {
checksum += *((u32 *)data);
data += sizeof(u32);
}
return ((checksum >> 16) + checksum); return ((checksum >> 16) + checksum);
} }
+1 -1
View File
@@ -62,7 +62,7 @@ static EWRAM_DATA u16 sMovingNpcMapBank = 0;
static EWRAM_DATA u16 sMovingNpcMapId = 0; static EWRAM_DATA u16 sMovingNpcMapId = 0;
static EWRAM_DATA u16 sFieldEffectScriptId = 0; static EWRAM_DATA u16 sFieldEffectScriptId = 0;
IWRAM_DATA u8 gUnknown_03000F30; static u8 gUnknown_03000F30;
extern const SpecialFunc gSpecials[]; extern const SpecialFunc gSpecials[];
extern const u8 *gStdScripts[]; extern const u8 *gStdScripts[];
+6 -6
View File
@@ -10,12 +10,12 @@
extern const u8* gUnknown_020375C0; extern const u8* gUnknown_020375C0;
// ewram bss // ewram bss
IWRAM_DATA static u8 sScriptContext1Status; static u8 sScriptContext1Status;
IWRAM_DATA static u32 sUnusedVariable1; static u32 sUnusedVariable1;
IWRAM_DATA static struct ScriptContext sScriptContext1; static struct ScriptContext sScriptContext1;
IWRAM_DATA static u32 sUnusedVariable2; static u32 sUnusedVariable2;
IWRAM_DATA static struct ScriptContext sScriptContext2; static struct ScriptContext sScriptContext2;
IWRAM_DATA static bool8 sScriptContext2Enabled; static bool8 sScriptContext2Enabled;
extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTable[];
extern ScrCmdFunc gScriptCmdTableEnd[]; extern ScrCmdFunc gScriptCmdTableEnd[];
+2 -2
View File
@@ -1017,8 +1017,8 @@ const u8 *const gUnknown_0858BBEC[] =
EWRAM_DATA u8 gUnknown_02039F90 = 0; EWRAM_DATA u8 gUnknown_02039F90 = 0;
IWRAM_DATA u8 gUnknown_03001124[7]; static u8 gUnknown_03001124[7];
IWRAM_DATA u32 filler_0300112c; static u32 filler_0300112c;
static void Task_HandleMultichoiceInput(u8); static void Task_HandleMultichoiceInput(u8);
static void Task_HandleYesNoInput(u8); static void Task_HandleYesNoInput(u8);
+2 -2
View File
@@ -71,7 +71,7 @@ static EWRAM_DATA struct SecretBaseRegistryMenu *sRegistryMenu = NULL;
static void Task_ShowSecretBaseRegistryMenu(u8 taskId); static void Task_ShowSecretBaseRegistryMenu(u8 taskId);
static void BuildRegistryMenuItems(u8 taskId); static void BuildRegistryMenuItems(u8 taskId);
static void RegistryMenu_OnCursorMove(int unused, bool8 flag, struct ListMenu *menu); static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu);
static void FinalizeRegistryMenu(u8 taskId); static void FinalizeRegistryMenu(u8 taskId);
static void AddRegistryMenuScrollArrows(u8 taskId); static void AddRegistryMenuScrollArrows(u8 taskId);
static void HandleRegistryMenuInput(u8 taskId); static void HandleRegistryMenuInput(u8 taskId);
@@ -932,7 +932,7 @@ static void BuildRegistryMenuItems(u8 taskId)
gMultiuseListMenuTemplate.maxShowed = data[3]; gMultiuseListMenuTemplate.maxShowed = data[3];
} }
static void RegistryMenu_OnCursorMove(int unused, bool8 flag, struct ListMenu *menu) static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu)
{ {
if (flag != TRUE) if (flag != TRUE)
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
+4 -4
View File
@@ -87,8 +87,8 @@ static void Task_ReturnToItemListAfterItemPurchase(u8 taskId);
static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId); static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId);
static void Task_HandleShopMenuBuy(u8 taskId); static void Task_HandleShopMenuBuy(u8 taskId);
static void Task_HandleShopMenuSell(u8 taskId); static void Task_HandleShopMenuSell(u8 taskId);
static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list); static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list);
static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y); static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y);
static const struct YesNoFuncTable sShopPurchaseYesNoFuncs = static const struct YesNoFuncTable sShopPurchaseYesNoFuncs =
{ {
@@ -521,7 +521,7 @@ static void BuyMenuSetListEntry(struct ListMenuItem *menuItem, u16 item, u8 *nam
menuItem->id = item; menuItem->id = item;
} }
static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list) static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list)
{ {
const u8 *description; const u8 *description;
if (onInit != TRUE) if (onInit != TRUE)
@@ -550,7 +550,7 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, s
BuyMenuPrint(2, description, 3, 1, 0, 0); BuyMenuPrint(2, description, 3, 1, 0, 0);
} }
static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y) static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y)
{ {
u8 x; u8 x;
+1 -1
View File
@@ -350,7 +350,7 @@ static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL;
static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL; static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL;
// IWRAM bss // IWRAM bss
static IWRAM_DATA struct SpriteFrameImage *gUnknown_03001188[26]; static struct SpriteFrameImage *gUnknown_03001188[26];
// Const rom data. // Const rom data.
extern const struct UnkStruct1 *const gUnknown_083ED048[]; extern const struct UnkStruct1 *const gUnknown_083ED048[];
+5 -5
View File
@@ -19,11 +19,11 @@ EWRAM_DATA struct MusicPlayerInfo* gMPlay_PokemonCry = NULL;
EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0; EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0;
// iwram bss // iwram bss
IWRAM_DATA static u16 sCurrentMapMusic; static u16 sCurrentMapMusic;
IWRAM_DATA static u16 sNextMapMusic; static u16 sNextMapMusic;
IWRAM_DATA static u8 sMapMusicState; static u8 sMapMusicState;
IWRAM_DATA static u8 sMapMusicFadeInSpeed; static u8 sMapMusicFadeInSpeed;
IWRAM_DATA static u16 sFanfareCounter; static u16 sFanfareCounter;
// iwram common // iwram common
bool8 gDisableMusic; bool8 gDisableMusic;
+4 -4
View File
@@ -285,10 +285,10 @@ static const struct OamDimensions sOamDimensions[3][4] =
}; };
// iwram bss // iwram bss
IWRAM_DATA static u16 sSpriteTileRangeTags[MAX_SPRITES]; static u16 sSpriteTileRangeTags[MAX_SPRITES];
IWRAM_DATA static u16 sSpriteTileRanges[MAX_SPRITES * 2]; static u16 sSpriteTileRanges[MAX_SPRITES * 2];
IWRAM_DATA static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT];
IWRAM_DATA static u16 sSpritePaletteTags[16]; static u16 sSpritePaletteTags[16];
// iwram common // iwram common
u32 gOamMatrixAllocBitmap; u32 gOamMatrixAllocBitmap;
+1 -1
View File
@@ -51,7 +51,7 @@ void sub_81346DC(struct Sprite *sprite);
void sub_813473C(struct Sprite *sprite); void sub_813473C(struct Sprite *sprite);
void StarterPokemonSpriteCallback(struct Sprite *sprite); void StarterPokemonSpriteCallback(struct Sprite *sprite);
static IWRAM_DATA u16 sStarterChooseWindowId; static u16 sStarterChooseWindowId;
// .rodata // .rodata
const u16 gBirchBagGrassPal[][16] = const u16 gBirchBagGrassPal[][16] =
+5 -2
View File
@@ -158,6 +158,9 @@ static EWRAM_DATA struct {
/*0xFE*/ u8 unk_FE; /*0xFE*/ u8 unk_FE;
} *gUnknown_020322A0 = {NULL}; } *gUnknown_020322A0 = {NULL};
#if !defined(NONMATCHING) && MODERN
#define static
#endif
static bool32 sub_8077260(void); static bool32 sub_8077260(void);
static void sub_80773D0(void); static void sub_80773D0(void);
static void sub_807811C(void); static void sub_807811C(void);
@@ -2779,7 +2782,7 @@ static void sub_8079398(void)
} }
} }
static void DisplayMessageAndContinueTask(void) static void Wait2SecondsAndCreateYesNoMenu(void)
{ {
gUnknown_0203229C->unk_A8++; gUnknown_0203229C->unk_A8++;
@@ -2918,7 +2921,7 @@ static void sub_80795AC(void)
sub_80781C8(); sub_80781C8();
break; break;
case 14: case 14:
DisplayMessageAndContinueTask(); Wait2SecondsAndCreateYesNoMenu();
break; break;
case 15: case 15:
sub_8079034(); sub_8079034();
+6 -7
View File
@@ -56,9 +56,9 @@ struct {
u16 move; u16 move;
} sTV_SecretBaseVisitMonsTemp[10]; } sTV_SecretBaseVisitMonsTemp[10];
IWRAM_DATA u8 sTVShowMixingNumPlayers; static u8 sTVShowMixingNumPlayers;
IWRAM_DATA u8 sTVShowNewsMixingNumPlayers; static u8 sTVShowNewsMixingNumPlayers;
IWRAM_DATA s8 sTVShowMixingCurSlot; static s8 sTVShowMixingCurSlot;
EWRAM_DATA u16 sPokemonAnglerSpecies = 0; EWRAM_DATA u16 sPokemonAnglerSpecies = 0;
EWRAM_DATA u16 sPokemonAnglerAttemptCounters = 0; EWRAM_DATA u16 sPokemonAnglerAttemptCounters = 0;
@@ -69,10 +69,9 @@ EWRAM_DATA ALIGNED(4) u8 sTVShowState = 0;
EWRAM_DATA u8 sTVSecretBaseSecretsRandomValues[3] = {}; EWRAM_DATA u8 sTVSecretBaseSecretsRandomValues[3] = {};
// Static ROM declarations // Static ROM declarations
#if !defined(NONMATCHING) && MODERN
extern const u8 *const sTVBravoTrainerTextGroup[]; #define static
extern const u8 *const sTVBravoTrainerBattleTowerTextGroup[]; #endif
void ClearPokemonNews(void); void ClearPokemonNews(void);
u8 GetTVChannelByShowType(u8 kind); u8 GetTVChannelByShowType(u8 kind);
u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void); u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void);
+3 -3
View File
@@ -60,9 +60,9 @@ EWRAM_DATA u8 gUnknown_02022C3E = 0;
EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {}; EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {};
// IWRAM vars // IWRAM vars
IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0; static struct UnkStruct_Leader *gUnknown_03000DA0;
IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4; static struct UnkStruct_Group *gUnknown_03000DA4;
IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8; static struct UnkStruct_URoom *gUnknown_03000DA8;
// this file's functions // this file's functions
void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5); void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5);
+1 -1
View File
@@ -40,7 +40,7 @@ struct UnkStruct_2022C6C
s16 a0; s16 a0;
}; };
IWRAM_DATA struct UnkStruct_3000DAC * gUnknown_03000DAC; static struct UnkStruct_3000DAC * gUnknown_03000DAC;
EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL; EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL;
+2 -11
View File
@@ -47,17 +47,8 @@
.include "src/multiboot.o" .include "src/multiboot.o"
.include "src/mirage_tower.o" .include "src/mirage_tower.o"
.include "src/berry_fix_program.o" .include "src/berry_fix_program.o"
.include "src/pokenav_unk_7.o"
@ pokenav .include "src/pokenav_unk_10.o"
gUnknown_030012BC: @ 30012BC
.space 0x4
gUnknown_030012C0: @ 30012C0
.space 0x4
gUnknown_030012C4: @ 30012C4
.space 0x4
.include "src/ereader_helpers.o" .include "src/ereader_helpers.o"
.include "src/faraway_island.o" .include "src/faraway_island.o"
.include "asm/m4a_1.o" .include "asm/m4a_1.o"
+3 -24
View File
@@ -45,29 +45,8 @@
.space 0x44 .space 0x44
gUnknown_03006370: @ 3006370 .include "ereader_screen.o"
.space 0x10
.include "m4a.o" .include "m4a.o"
.include "agb_flash.o" .include "agb_flash.o"
.include "librfu_stwi.o"
gRfuState: @ 3007868 .include "librfu.o"
.space 0x8
gUnknown_03007870: @ 3007870
.space 0x10
gUnknown_03007880: @ 3007880
.space 0x10
gUnknown_03007890: @ 3007890
.space 0x4
gUnknown_03007894: @ 3007894
.space 0x4
gUnknown_03007898: @ 3007898
.space 0x8
gUnknown_030078A0: @ 30078A0
.space 0xC
+1 -8
View File
@@ -18,14 +18,7 @@
.include "src/berry_crush.o" .include "src/berry_crush.o"
.include "src/berry_powder.o" .include "src/berry_powder.o"
.include "src/dodrio_berry_picking.o" .include "src/dodrio_berry_picking.o"
.include "src/pokemon_jump.o"
@ pokemon_jump
gUnknown_02022CFC: @ 2022CFC
.space 0x4
gUnknown_02022D00: @ 2022D00
.space 0x4
.include "src/main_menu.o" .include "src/main_menu.o"
.include "src/battle_controllers.o" .include "src/battle_controllers.o"
.include "src/rom_8034C54.o" .include "src/rom_8034C54.o"
+3147
View File
File diff suppressed because it is too large Load Diff
+250 -222
View File
@@ -1,45 +1,46 @@
/* /*
"$Id: gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $" "$Id: gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $"
DevkitPro GBA ROM fix utility DevkitPro GBA ROM fix utility
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version. version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA. USA.
Please report all bugs and problems through the bug tracker at Please report all bugs and problems through the bug tracker at
"http://sourceforge.net/tracker/?group_id=114505&atid=668551". "http://sourceforge.net/tracker/?group_id=114505&atid=668551".
"$Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/tools/gba/gbatools/gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $" "$Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/tools/gba/gbatools/gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $"
*/ */
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
// gbafix.c // gbafix.c
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
/* /*
Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Diegoisawesome) Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Diegoisawesome)
Validates header of GBA roms. Validates header of GBA roms.
History History
------- -------
v1.06 - added output silencing, (Diegoisawesome) v1.07 - added support for ELF input, (PikalaxALT)
v1.05 - added debug offset argument, (Diegoisawesome) v1.06 - added output silencing, (Diegoisawesome)
v1.04 - converted to plain C, (WinterMute) v1.05 - added debug offset argument, (Diegoisawesome)
v1.03 - header.fixed, header.device_type v1.04 - converted to plain C, (WinterMute)
v1.02 - redefined the options (rgbfix style), checksum=0 v1.03 - header.fixed, header.device_type
v1.01 - fix in parameters v1.02 - redefined the options (rgbfix style), checksum=0
v1.00 - logo, complement v1.01 - fix in parameters
v1.00 - logo, complement
*/ */
#pragma pack(1) #pragma pack(1)
@@ -48,26 +49,27 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdint.h> #include <stdint.h>
#include "elf.h"
#define VER "1.06" #define VER "1.07"
#define ARGV argv[arg] #define ARGV argv[arg]
#define VALUE (ARGV+2) #define VALUE (ARGV+2)
#define NUMBER strtoul(VALUE, NULL, 0) #define NUMBER strtoul(VALUE, NULL, 0)
typedef struct typedef struct
{ {
uint32_t start_code; // B instruction uint32_t start_code; // B instruction
uint8_t logo[0xA0-0x04]; // logo data uint8_t logo[0xA0-0x04]; // logo data
uint8_t title[0xC]; // game title name uint8_t title[0xC]; // game title name
uint32_t game_code; // uint32_t game_code; //
uint16_t maker_code; // uint16_t maker_code; //
uint8_t fixed; // 0x96 uint8_t fixed; // 0x96
uint8_t unit_code; // 0x00 uint8_t unit_code; // 0x00
uint8_t device_type; // 0x00 uint8_t device_type; // 0x00
uint8_t unused[7]; // uint8_t unused[7]; //
uint8_t game_version; // 0x00 uint8_t game_version; // 0x00
uint8_t complement; // 800000A0..800000BC uint8_t complement; // 800000A0..800000BC
uint16_t checksum; // 0x0000 uint16_t checksum; // 0x0000
} Header; } Header;
@@ -77,55 +79,55 @@ unsigned short checksum_without_header = 0;
const Header good_header = const Header good_header =
{ {
// start_code // start_code
0xEA00002E, 0xEA00002E,
// logo // logo
{ 0x24,0xFF,0xAE,0x51,0x69,0x9A,0xA2,0x21,0x3D,0x84,0x82,0x0A,0x84,0xE4,0x09,0xAD, { 0x24,0xFF,0xAE,0x51,0x69,0x9A,0xA2,0x21,0x3D,0x84,0x82,0x0A,0x84,0xE4,0x09,0xAD,
0x11,0x24,0x8B,0x98,0xC0,0x81,0x7F,0x21,0xA3,0x52,0xBE,0x19,0x93,0x09,0xCE,0x20, 0x11,0x24,0x8B,0x98,0xC0,0x81,0x7F,0x21,0xA3,0x52,0xBE,0x19,0x93,0x09,0xCE,0x20,
0x10,0x46,0x4A,0x4A,0xF8,0x27,0x31,0xEC,0x58,0xC7,0xE8,0x33,0x82,0xE3,0xCE,0xBF, 0x10,0x46,0x4A,0x4A,0xF8,0x27,0x31,0xEC,0x58,0xC7,0xE8,0x33,0x82,0xE3,0xCE,0xBF,
0x85,0xF4,0xDF,0x94,0xCE,0x4B,0x09,0xC1,0x94,0x56,0x8A,0xC0,0x13,0x72,0xA7,0xFC, 0x85,0xF4,0xDF,0x94,0xCE,0x4B,0x09,0xC1,0x94,0x56,0x8A,0xC0,0x13,0x72,0xA7,0xFC,
0x9F,0x84,0x4D,0x73,0xA3,0xCA,0x9A,0x61,0x58,0x97,0xA3,0x27,0xFC,0x03,0x98,0x76, 0x9F,0x84,0x4D,0x73,0xA3,0xCA,0x9A,0x61,0x58,0x97,0xA3,0x27,0xFC,0x03,0x98,0x76,
0x23,0x1D,0xC7,0x61,0x03,0x04,0xAE,0x56,0xBF,0x38,0x84,0x00,0x40,0xA7,0x0E,0xFD, 0x23,0x1D,0xC7,0x61,0x03,0x04,0xAE,0x56,0xBF,0x38,0x84,0x00,0x40,0xA7,0x0E,0xFD,
0xFF,0x52,0xFE,0x03,0x6F,0x95,0x30,0xF1,0x97,0xFB,0xC0,0x85,0x60,0xD6,0x80,0x25, 0xFF,0x52,0xFE,0x03,0x6F,0x95,0x30,0xF1,0x97,0xFB,0xC0,0x85,0x60,0xD6,0x80,0x25,
0xA9,0x63,0xBE,0x03,0x01,0x4E,0x38,0xE2,0xF9,0xA2,0x34,0xFF,0xBB,0x3E,0x03,0x44, 0xA9,0x63,0xBE,0x03,0x01,0x4E,0x38,0xE2,0xF9,0xA2,0x34,0xFF,0xBB,0x3E,0x03,0x44,
0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF, 0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF,
0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07 } , 0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07 } ,
// title // title
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
// game code // game code
0x00000000, 0x00000000,
// maker code // maker code
0x3130, 0x3130,
// fixed // fixed
0x96, 0x96,
// unit_code // unit_code
0x00, 0x00,
// device type // device type
0x00, 0x00,
// unused // unused
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, { 0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
// game version // game version
0x00, 0x00,
// complement // complement
0x00, 0x00,
// checksum // checksum
0x0000 0x0000
}; };
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
char HeaderComplement() char HeaderComplement()
/*--------------------------------------------------------------------------------- /*---------------------------------------------------------------------------------
Calculate Header complement check Calculate Header complement check
---------------------------------------------------------------------------------*/ ---------------------------------------------------------------------------------*/
{ {
int n; int n;
char c = 0; char c = 0;
char *p = (char *)&header + 0xA0; char *p = (char *)&header + 0xA0;
for (n=0; n<0xBD-0xA0; n++) for (n=0; n<0xBD-0xA0; n++)
{ {
c += *p++; c += *p++;
} }
return -(0x19+c); return -(0x19+c);
} }
@@ -133,157 +135,183 @@ char HeaderComplement()
int main(int argc, char *argv[]) int main(int argc, char *argv[])
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
{ {
int arg; int arg;
char *argfile = 0; char *argfile = 0;
FILE *infile; FILE *infile;
int silent = 0; int silent = 0;
int schedule_pad = 0;
int size,bit; int size,bit;
// show syntax // show syntax
if (argc <= 1) if (argc <= 1)
{ {
printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n"); printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n");
printf("Syntax: gbafix <rom.gba> [-p] [-t[title]] [-c<game_code>] [-m<maker_code>] [-r<version>] [-d<debug>] [--silent]\n"); printf("Syntax: gbafix <rom.gba> [-p] [-t[title]] [-c<game_code>] [-m<maker_code>] [-r<version>] [-d<debug>] [--silent]\n");
printf("\n"); printf("\n");
printf("parameters:\n"); printf("parameters:\n");
printf(" -p Pad to next exact power of 2. No minimum size!\n"); printf(" -p Pad to next exact power of 2. No minimum size!\n");
printf(" -t[<title>] Patch title. Stripped filename if none given.\n"); printf(" -t[<title>] Patch title. Stripped filename if none given.\n");
printf(" -c<game_code> Patch game code (four characters)\n"); printf(" -c<game_code> Patch game code (four characters)\n");
printf(" -m<maker_code> Patch maker code (two characters)\n"); printf(" -m<maker_code> Patch maker code (two characters)\n");
printf(" -r<version> Patch game version (number)\n"); printf(" -r<version> Patch game version (number)\n");
printf(" -d<debug> Enable debugging handler and set debug entry point (0 or 1)\n"); printf(" -d<debug> Enable debugging handler and set debug entry point (0 or 1)\n");
printf(" --silent Silence non-error output\n"); printf(" --silent Silence non-error output\n");
return -1; return -1;
} }
// get filename // get filename
for (arg=1; arg<argc; arg++) for (arg=1; arg<argc; arg++)
{ {
if (ARGV[0] != '-') { argfile=ARGV; } if (ARGV[0] != '-') { argfile=ARGV; }
if (strncmp("--silent", &ARGV[0], 7) == 0) { silent = 1; } if (strncmp("--silent", &ARGV[0], 7) == 0) { silent = 1; }
} }
// check filename // check filename
if (!argfile) if (!argfile)
{ {
fprintf(stderr, "Filename needed!\n"); fprintf(stderr, "Filename needed!\n");
return -1; return -1;
} }
// read file uint32_t sh_offset = 0;
infile = fopen(argfile, "r+b");
if (!infile) { fprintf(stderr, "Error opening input file!\n"); return -1; }
fseek(infile, 0, SEEK_SET);
fread(&header, sizeof(header), 1, infile);
// fix some data // read file
memcpy(header.logo, good_header.logo, sizeof(header.logo)); infile = fopen(argfile, "r+b");
memcpy(&header.fixed, &good_header.fixed, sizeof(header.fixed)); if (!infile) { fprintf(stderr, "Error opening input file!\n"); return -1; }
memcpy(&header.device_type, &good_header.device_type, sizeof(header.device_type)); fseek(infile, sh_offset, SEEK_SET);
fread(&header, sizeof(header), 1, infile);
// parse command line // elf check
for (arg=1; arg<argc; arg++) Elf32_Shdr secHeader;
{ if (memcmp(&header, ELFMAG, 4) == 0) {
if ((ARGV[0] == '-')) Elf32_Ehdr *elfHeader = (Elf32_Ehdr *)&header;
{ fseek(infile, elfHeader->e_shoff, SEEK_SET);
switch (ARGV[1]) int i;
{ for (i = 0; i < elfHeader->e_shnum; i++) {
case 'p': // pad fread(&secHeader, sizeof(Elf32_Shdr), 1, infile);
{ if (secHeader.sh_type == SHT_PROGBITS && secHeader.sh_addr == elfHeader->e_entry) break;
fseek(infile, 0, SEEK_END); }
size = ftell(infile); if (i == elfHeader->e_shnum) { fprintf(stderr, "Error finding entry point!\n"); return 1; }
for (bit=31; bit>=0; bit--) if (size & (1<<bit)) break; fseek(infile, secHeader.sh_offset, SEEK_SET);
if (size != (1<<bit)) sh_offset = secHeader.sh_offset;
{ fread(&header, sizeof(header), 1, infile);
int todo = (1<<(bit+1)) - size; }
while (todo--) fputc(0xFF, infile);
}
fseek(infile, 0, SEEK_SET);
break;
}
case 't': // title // fix some data
{ memcpy(header.logo, good_header.logo, sizeof(header.logo));
char title[256]; memcpy(&header.fixed, &good_header.fixed, sizeof(header.fixed));
memset(title, 0, sizeof(title)); memcpy(&header.device_type, &good_header.device_type, sizeof(header.device_type));
if (VALUE[0])
{
strncpy(title, VALUE, sizeof(header.title));
}
else
{
// use filename
char s[256], *begin=s, *t; strcpy(s, argfile);
t = strrchr(s, '\\'); if (t) begin = t+1;
t = strrchr(s, '/'); if (t) begin = t+1;
t = strrchr(s, '.'); if (t) *t = 0;
strncpy(title, begin, sizeof(header.title));
if (!silent) printf("%s\n",begin);
}
memcpy(header.title, title, sizeof(header.title)); // copy
break;
}
case 'c': // game code // parse command line
{ for (arg=1; arg<argc; arg++)
//if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } {
//header.game_code = NUMBER; if ((ARGV[0] == '-'))
header.game_code = VALUE[0] | VALUE[1]<<8 | VALUE[2]<<16 | VALUE[3]<<24; {
break; switch (ARGV[1])
} {
case 'p': // pad
{
schedule_pad = 1;
break;
}
case 'm': // maker code case 't': // title
{ {
//if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } char title[256];
//header.maker_code = (unsigned short)NUMBER; memset(title, 0, sizeof(title));
header.maker_code = VALUE[0] | VALUE[1]<<8; if (VALUE[0])
break; {
} strncpy(title, VALUE, sizeof(header.title));
}
else
{
// use filename
char s[256], *begin=s, *t; strcpy(s, argfile);
t = strrchr(s, '\\'); if (t) begin = t+1;
t = strrchr(s, '/'); if (t) begin = t+1;
t = strrchr(s, '.'); if (t) *t = 0;
strncpy(title, begin, sizeof(header.title));
if (!silent) printf("%s\n",begin);
}
memcpy(header.title, title, sizeof(header.title)); // copy
break;
}
case 'v': // ignored, compatability with other gbafix case 'c': // game code
{ {
break; //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; }
} //header.game_code = NUMBER;
header.game_code = VALUE[0] | VALUE[1]<<8 | VALUE[2]<<16 | VALUE[3]<<24;
break;
}
case 'r': // version case 'm': // maker code
{ {
if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; }
header.game_version = (unsigned char)NUMBER; //header.maker_code = (unsigned short)NUMBER;
break; header.maker_code = VALUE[0] | VALUE[1]<<8;
} break;
}
case 'd': // debug case 'v': // ignored, compatability with other gbafix
{ {
if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } break;
header.logo[0x9C-0x04] = 0xA5; // debug enable }
header.device_type = (unsigned char)((NUMBER & 1) << 7); // debug handler entry point
break;
}
case '-': // long arguments
{
if (strncmp("silent", &ARGV[2], 6) == 0) { continue; }
break;
}
default:
{
printf("Invalid option: %s\n", ARGV);
}
}
}
}
// update complement check & total checksum case 'r': // version
header.complement = 0; {
header.checksum = 0; // must be 0 if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; }
header.complement = HeaderComplement(); header.game_version = (unsigned char)NUMBER;
//header.checksum = checksum_without_header + HeaderChecksum(); break;
}
fseek(infile, 0, SEEK_SET); case 'd': // debug
fwrite(&header, sizeof(header), 1, infile); {
fclose(infile); if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; }
header.logo[0x9C-0x04] = 0xA5; // debug enable
header.device_type = (unsigned char)((NUMBER & 1) << 7); // debug handler entry point
break;
}
case '-': // long arguments
{
if (strncmp("silent", &ARGV[2], 6) == 0) { continue; }
break;
}
default:
{
printf("Invalid option: %s\n", ARGV);
}
}
}
}
if (!silent) printf("ROM fixed!\n"); // update complement check & total checksum
header.complement = 0;
header.checksum = 0; // must be 0
header.complement = HeaderComplement();
//header.checksum = checksum_without_header + HeaderChecksum();
return 0; if (schedule_pad) {
if (sh_offset != 0) {
fprintf(stderr, "Warning: Cannot safely pad an ELF\n");
} else {
fseek(infile, 0, SEEK_END);
size = ftell(infile);
for (bit=31; bit>=0; bit--) if (size & (1<<bit)) break;
if (size != (1<<bit))
{
int todo = (1<<(bit+1)) - size;
while (todo--) fputc(0xFF, infile);
}
}
}
fseek(infile, sh_offset, SEEK_SET);
fwrite(&header, sizeof(header), 1, infile);
fclose(infile);
if (!silent) printf("ROM fixed!\n");
return 0;
} }