diff options
-rw-r--r-- | .github/workflows/build.yml | 66 | ||||
-rw-r--r-- | Makefile | 17 | ||||
-rw-r--r-- | data/maps/PewterCity_Gym/text.inc | 3 | ||||
-rw-r--r-- | src/battle_bg.c | 10 | ||||
-rw-r--r-- | src/battle_main.c | 2 | ||||
-rw-r--r-- | src/malloc.c | 4 | ||||
-rw-r--r-- | src/party_menu.c | 2 | ||||
-rw-r--r-- | src/wild_encounter.c | 4 |
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 }} @@ -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; } |