summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml66
-rw-r--r--Makefile17
-rw-r--r--data/maps/PewterCity_Gym/text.inc3
-rw-r--r--src/battle_bg.c10
-rw-r--r--src/battle_main.c2
-rw-r--r--src/malloc.c4
-rw-r--r--src/party_menu.c2
-rw-r--r--src/wild_encounter.c4
8 files changed, 86 insertions, 22 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f8ad97065..091ae69b5 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -7,11 +7,29 @@ on:
jobs:
build:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-latest
+ env:
+ GAME_VERSION: FIRERED
+ GAME_LANGUAGE: ENGLISH
+ GAME_REVISION: 0
+ MODERN: 0
+ COMPARE: 1
steps:
- name: Checkout
uses: actions/checkout@master
+ - name: Checkout agbcc
+ uses: actions/checkout@master
+ with:
+ path: 'agbcc'
+ repository: 'pret/agbcc'
+
+ - name: Checkout symbols
+ uses: actions/checkout@master
+ with:
+ path: 'symbols'
+ ref: 'symbols'
+
- name: Install binutils
run: sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
# build-essential, git, and libpng-dev are already installed
@@ -20,23 +38,39 @@ jobs:
- name: Install agbcc
run: |
- git clone https://github.com/pret/agbcc.git
- cd agbcc
./build.sh
./install.sh ../
+ working-directory: ./agbcc
- name: Compare FireRed
run: |
- make -j${nproc} compare_firered
- make -j${nproc} compare_firered_rev1
+ make -j${nproc} all syms
+
+ - name: Compare FireRed rev1
+ env:
+ GAME_REVISION: 1
+ run: |
+ make -j${nproc} all syms
- name: Compare LeafGreen
+ env:
+ GAME_VERSION: LEAFGREEN
+ run: |
+ make -j${nproc} all syms
+
+ - name: Compare LeafGreen rev1
+ env:
+ GAME_VERSION: LEAFGREEN
+ GAME_REVISION: 1
run: |
- make -j${nproc} compare_leafgreen
- make -j${nproc} compare_leafgreen_rev1
+ make -j${nproc} all syms
- - name: Modern
- run: make -j${nproc} modern
+ - name: Build Modern
+ env:
+ MODERN: 1
+ COMPARE: 0
+ run: |
+ make -j${nproc} all
- name: Webhook
if: ${{ github.event_name == 'push' }}
@@ -45,3 +79,17 @@ jobs:
CALCROM_DISCORD_WEBHOOK_AVATAR_URL: https://i.imgur.com/38BQHdd.png
CALCROM_DISCORD_WEBHOOK_URL: ${{ secrets.CALCROM_DISCORD_WEBHOOK_URL }}
run: sh .github/calcrom/webhook.sh pokefirered
+
+ - name: Move symfiles
+ if: ${{ github.event_name == 'push' }}
+ run: |
+ cp *.sym symbols/
+
+ - name: Update symfiles
+ if: ${{ github.event_name == 'push' }}
+ uses: EndBug/add-and-commit@v7
+ with:
+ branch: symbols
+ cwd: "./symbols"
+ add: "*.sym"
+ message: ${{ github.event.commits[0].message }}
diff --git a/Makefile b/Makefile
index 7e40a375d..9aaccc2fc 100644
--- a/Makefile
+++ b/Makefile
@@ -24,6 +24,7 @@ export AS := $(PREFIX)as
endif
export CPP := $(PREFIX)cpp
export LD := $(PREFIX)ld
+OBJDUMP := $(PREFIX)objdump
ifeq ($(OS),Windows_NT)
EXE := .exe
@@ -57,6 +58,7 @@ OBJ_DIR := build/$(BUILD_NAME)
ELF = $(ROM:.gba=.elf)
MAP = $(ROM:.gba=.map)
+SYM = $(ROM:.gba=.sym)
C_SUBDIR = src
DATA_C_SUBDIR = src/data
@@ -96,6 +98,8 @@ FIX := tools/gbafix/gbafix
MAPJSON := tools/mapjson/mapjson
JSONPROC := tools/jsonproc/jsonproc
+PERL := perl
+
# Clear the default suffixes
.SUFFIXES:
# Don't delete intermediate files
@@ -112,7 +116,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst
# Build tools when building the rom
# Disable dependency scanning for clean/tidy/tools
-ifeq (,$(filter-out all compare,$(MAKECMDGOALS)))
+ifeq (,$(filter-out all compare syms modern,$(MAKECMDGOALS)))
$(call infoshell, $(MAKE) tools)
else
NODEP := 1
@@ -149,7 +153,7 @@ TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE))
ALL_BUILDS := firered firered_rev1 leafgreen leafgreen_rev1
ALL_BUILDS += $(ALL_BUILDS:%=%_modern)
-.PHONY: all rom tools clean-tools mostlyclean clean compare tidy berry_fix $(TOOLDIRS) $(ALL_BUILDS) $(ALL_BUILDS:%=compare_%) modern
+.PHONY: all rom tools clean-tools mostlyclean clean compare tidy berry_fix syms $(TOOLDIRS) $(ALL_BUILDS) $(ALL_BUILDS:%=compare_%) modern
MAKEFLAGS += --no-print-directory
@@ -157,6 +161,8 @@ AUTO_GEN_TARGETS :=
all: tools rom
+syms: $(SYM)
+
rom: $(ROM)
ifeq ($(COMPARE),1)
@$(SHA1) $(BUILD_NAME).sha1
@@ -344,3 +350,10 @@ leafgreen_modern: ; @$(MAKE) GAME_VERSION=LEAFGREEN MODERN=1
leafgreen_rev1_modern: ; @$(MAKE) GAME_VERSION=LEAFGREEN GAME_REVISION=1 MODERN=1
modern: ; @$(MAKE) MODERN=1
+
+###################
+### Symbol file ###
+###################
+
+$(SYM): $(ELF)
+ $(OBJDUMP) -t $< | sort -u | grep -E "^0[2389]" | $(PERL) -p -e 's/^(\w{8}) (\w).{6} \S+\t(\w{8}) (\S+)$$/\1 \2 \3 \4/g' > $@
diff --git a/data/maps/PewterCity_Gym/text.inc b/data/maps/PewterCity_Gym/text.inc
index b6a1d87ee..4ba144beb 100644
--- a/data/maps/PewterCity_Gym/text.inc
+++ b/data/maps/PewterCity_Gym/text.inc
@@ -14,6 +14,9 @@ PewterCity_Gym_Text_BrockIntro:: @ 8190CD4
.string "Fine, then!\n"
.string "Show me your best!{PLAY_BGM}{MUS_ENCOUNTER_GYM_LEADER}$"
+@ NOTE: This defeat text actually causes a buffer overflow. It's too long for the gDisplayedStringBattle
+@ buffer that it's put into, and it stomps all over the gBattleTextBuffs after, as well as the otherwise
+@ unused array after that, gUnknown_2022AE8. Perhaps that's the reason why said array exists.
PewterCity_Gym_Text_BrockDefeat:: @ 8190E4F
.string "I took you for granted, and so\n"
.string "I lost.\p"
diff --git a/src/battle_bg.c b/src/battle_bg.c
index c30f10643..f5b8d7921 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -612,13 +612,13 @@ static u8 GetBattleTerrainByMapScene(u8 mapBattleScene)
if (mapBattleScene == sMapBattleSceneMapping[i].mapScene)
return sMapBattleSceneMapping[i].battleTerrain;
}
- return 9;
+ return BATTLE_TERRAIN_PLAIN;
}
static void LoadBattleTerrainGfx(u16 terrain)
{
if (terrain >= NELEMS(sBattleTerrainTable))
- terrain = 9;
+ terrain = BATTLE_TERRAIN_PLAIN;
// Copy to bg3
LZDecompressVram(sBattleTerrainTable[terrain].tileset, (void *)BG_CHAR_ADDR(2));
LZDecompressVram(sBattleTerrainTable[terrain].tilemap, (void *)BG_SCREEN_ADDR(26));
@@ -628,7 +628,7 @@ static void LoadBattleTerrainGfx(u16 terrain)
static void LoadBattleTerrainEntryGfx(u16 terrain)
{
if (terrain >= NELEMS(sBattleTerrainTable))
- terrain = 9;
+ terrain = BATTLE_TERRAIN_PLAIN;
// Copy to bg1
LZDecompressVram(sBattleTerrainTable[terrain].entryTileset, (void *)BG_CHAR_ADDR(1));
LZDecompressVram(sBattleTerrainTable[terrain].entryTilemap, (void *)BG_SCREEN_ADDR(28));
@@ -636,8 +636,8 @@ static void LoadBattleTerrainEntryGfx(u16 terrain)
UNUSED void GetBattleTerrainGfxPtrs(u8 terrain, const u32 **tilesPtr, const u32 **mapPtr, const u32 **palPtr)
{
- if (terrain > 9)
- terrain = 9;
+ if (terrain > BATTLE_TERRAIN_PLAIN)
+ terrain = BATTLE_TERRAIN_PLAIN;
*tilesPtr = sBattleTerrainTable[terrain].tileset;
*mapPtr = sBattleTerrainTable[terrain].tilemap;
*palPtr = sBattleTerrainTable[terrain].palette;
diff --git a/src/battle_main.c b/src/battle_main.c
index 021a0ca81..53757d13c 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -125,7 +125,7 @@ EWRAM_DATA u8 gDisplayedStringBattle[300] = {0};
EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0};
EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0};
EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
-static EWRAM_DATA u32 gUnknown_2022AE8[25] = {0};
+static EWRAM_DATA u32 gUnknown_2022AE8[25] = {0}; // Note: This shouldn't be removed without adjusting the size of gDisplayedStringBattle.
EWRAM_DATA u32 gBattleTypeFlags = 0;
EWRAM_DATA u8 gBattleTerrain = 0;
EWRAM_DATA u32 gUnknown_2022B54 = 0;
diff --git a/src/malloc.c b/src/malloc.c
index 590d45c05..260c41d0d 100644
--- a/src/malloc.c
+++ b/src/malloc.c
@@ -192,12 +192,12 @@ void InitHeap(void *heapStart, u32 heapSize)
void *Alloc(u32 size)
{
- AllocInternal(sHeapStart, size);
+ return AllocInternal(sHeapStart, size);
}
void *AllocZeroed(u32 size)
{
- AllocZeroedInternal(sHeapStart, size);
+ return AllocZeroedInternal(sHeapStart, size);
}
void Free(void *pointer)
diff --git a/src/party_menu.c b/src/party_menu.c
index e08c427c8..aa7ffc702 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -839,7 +839,7 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot)
if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR)
{
gSpecialVar_Result = FALSE;
- if (gSpecialVar_0x8005 > 14)
+ if (gSpecialVar_0x8005 >= TUTOR_MOVE_COUNT)
return FALSE;
DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005);
}
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 5c3e59fde..90501e583 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -87,7 +87,7 @@ static u8 ChooseWildMonIndex_Land(void)
return 8;
else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_8 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_9)
return 9;
- else if (rand == ENCOUNTER_CHANCE_LAND_MONS_SLOT_9)
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_9 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_10)
return 10;
else
return 11;
@@ -147,7 +147,7 @@ static u8 ChooseWildMonIndex_Fishing(u8 rod)
wildMonIndex = 7;
if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_7 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_8)
wildMonIndex = 8;
- if (rand == ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_8)
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_8 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_9)
wildMonIndex = 9;
break;
}