Merge pull request #187 from PikalaxALT/leafgreen

Match Pokemon FireRed 1.1 US
This commit is contained in:
PikalaxALT
2019-12-19 12:34:20 -05:00
committed by GitHub
35 changed files with 299 additions and 125 deletions
+2 -1
View File
@@ -1,5 +1,5 @@
language: generic
dist: trusty
dist: bionic
sudo: false
addons:
apt:
@@ -27,5 +27,6 @@ matrix:
script:
- make tools CXX=g++-7
- make -j2 compare
- make -j2 compare_firered_rev1
after_success:
- .travis/calcrom/webhook.sh pokefirered
+15 -34
View File
@@ -5,36 +5,7 @@ CPP := $(CC) -E
LD := tools/binutils/bin/arm-none-eabi-ld
OBJCOPY := tools/binutils/bin/arm-none-eabi-objcopy
GAME_VERSION := FIRERED
REVISION := 0
GAME_LANGUAGE := ENGLISH
# So long as baserom.gba is required, we error out if the
# user tries to build any ROM other than FireRed.
ifneq ($(GAME_VERSION),FIRERED)
$(error We can only build English Pokemon FireRed v1.0 currently)
else ifneq ($(REVISION),0)
$(error We can only build English Pokemon FireRed v1.0 currently)
else ifneq ($(GAME_LANGUAGE),ENGLISH)
$(error We can only build English Pokemon FireRed v1.0 currently)
endif
ifeq ($(GAME_VERSION),FIRERED)
TITLE := POKEMON FIRE
GAME_CODE := BPR
BUILD_NAME := firered
else
TITLE := POKEMON LEAF
GAME_CODE := BPL
BUILD_NAME := leafgreen
endif
ifeq ($(GAME_LANGUAGE),ENGLISH)
GAME_CODE := $(GAME_CODE)E
endif
ifneq ($(REVISION),0)
BUILD_NAME := $(BUILD_NAME)_rev$(REVISION)
endif
MAKER_CODE := 01
include config.mk
SHELL := /bin/bash -o pipefail
@@ -57,12 +28,12 @@ DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR)
SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR)
MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR)
ASFLAGS := -mcpu=arm7tdmi --defsym $(GAME_VERSION)=1 --defsym REVISION=$(REVISION) --defsym $(GAME_LANGUAGE)=1
ASFLAGS := -mcpu=arm7tdmi --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym $(GAME_LANGUAGE)=1
CC1 := tools/agbcc/bin/agbcc
override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
CPPFLAGS := -I tools/agbcc -I tools/agbcc/include -iquote include -nostdinc -undef -D$(GAME_VERSION) -DREVISION=$(REVISION) -D$(GAME_LANGUAGE)
CPPFLAGS := -I tools/agbcc -I tools/agbcc/include -iquote include -nostdinc -undef -D$(GAME_VERSION) -DREVISION=$(GAME_REVISION) -D$(GAME_LANGUAGE)
LDFLAGS = -Map ../../$(MAP)
@@ -133,7 +104,7 @@ all: tools rom
rom: $(ROM)
ifeq ($(COMPARE),1)
@$(SHA1) rom.sha1
@$(SHA1) $(BUILD_NAME).sha1
endif
tools: $(TOOLDIRS)
@@ -252,8 +223,18 @@ $(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_comm
$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
cd $(OBJ_DIR) && ../../$(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(LIB)
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent
$(ROM): $(ELF)
$(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@
# "friendly" target names for convenience sake
firered: ; @$(MAKE) GAME_VERSION=FIRERED
firered_rev1: ; @$(MAKE) GAME_VERSION=FIRERED GAME_REVISION=1
leafgreen: ; @$(MAKE) GAME_VERSION=LEAFGREEN
leafgreen_rev1: ; @$(MAKE) GAME_VERSION=LEAFGREEN GAME_REVISION=1
compare_firered: ; @$(MAKE) GAME_VERSION=FIRERED COMPARE=1
compare_firered_rev1: ; @$(MAKE) GAME_VERSION=FIRERED GAME_REVISION=1 COMPARE=1
compare_leafgreen: ; @$(MAKE) GAME_VERSION=LEAFGREEN COMPARE=1
compare_leafgreen_rev1: ; @$(MAKE) GAME_VERSION=LEAFGREEN GAME_REVISION=1 COMPARE=1
+26 -17
View File
@@ -46,20 +46,29 @@ GPIOPortReadEnable: @ 80000C8
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.ifdef FIRERED
.4byte 4
.4byte 2
.ascii "pokemon red version"
.space 13
.4byte 0x82350AC @ gMonFrontPicTable
.4byte 0x823654C @ gMonBackPicTable
.4byte 0x823730C @ gMonPaletteTable
.4byte 0x82380CC @ gMonShinyPaletteTable
.4byte 0x83D37A0 @ gMonIconTable
.4byte 0x83D3E80 @ gMonIconPaletteIndices
.4byte 0x83D4038 @ gMonIconPaletteTable
.4byte 0x8245EE0 @ gSpeciesNames
.4byte 0x8247094 @ gMoveNames
.4byte 0x84556F8 @ gDecorations
.else
.ifdef LEAFGREEN
.4byte 5
.4byte 2
.ascii "pokemon green version"
.space 11
.endif
.endif
.4byte gMonFrontPicTable
.4byte gMonBackPicTable
.4byte gMonPaletteTable
.4byte gMonShinyPaletteTable
.4byte gMonIconTable
.4byte gMonIconPaletteIndices
.4byte gMonIconPaletteTable
.4byte gSpeciesNames
.4byte gMoveNames
.4byte gDecorations
.4byte 0xEE0 @ offsetof(struct SaveBlock1, flags)
.4byte 0x1000 @ offsetof(struct SaveBlock1, vars)
.4byte 0x18 @ offsetof(struct SaveBlock2, pokedex)
@@ -88,13 +97,13 @@ GPIOPortReadEnable: @ 80000C8
.4byte 0x30BB
.4byte 0x30A7
.4byte 0
.4byte 0x8254784 @ gBaseStats
.4byte 0x824FC40 @ gAbilityNames
.4byte 0x824FB08 @ gAbilityDescriptionPointers
.4byte 0x83DB028 @ gItems
.4byte 0x8250C04 @ gBattleMoves
.4byte 0x826056C @ gBallSpriteSheets
.4byte 0x82605CC @ gBallSpritePalettes
.4byte gBaseStats
.4byte gAbilityNames
.4byte gAbilityDescriptionPointers
.4byte gItems
.4byte gBattleMoves
.4byte gBallSpriteSheets
.4byte gBallSpritePalettes
.4byte 0xA8
.4byte 0x82C
.4byte 0x83B
+4 -4
View File
@@ -2363,7 +2363,7 @@ _081E0668:
lsrs r5, r0, 16
cmp r5, 0x3
bls _081E0668
ldr r1, _081E06E0 @ =0x081E1B25
ldr r1, _081E06E0 @ =sub_81E1B24
movs r5, 0x2
negs r5, r5
ands r5, r1
@@ -2371,7 +2371,7 @@ _081E0668:
ldr r0, [r2]
adds r4, r0, 0
adds r4, 0x8
ldr r0, _081E06E4 @ =0x081E1B55
ldr r0, _081E06E4 @ =rfu_REQ_changeMasterSlave
subs r0, r1
lsls r0, 15
lsrs r3, r0, 16
@@ -2408,8 +2408,8 @@ _081E06D0: .4byte gUnknown_3007464
_081E06D4: .4byte gUnknown_3007468
_081E06D8: .4byte gUnknown_3007450
_081E06DC: .4byte gUnknown_3007440
_081E06E0: .4byte 0x081E1B25
_081E06E4: .4byte 0x081E1B55
_081E06E0: .4byte sub_81E1B24
_081E06E4: .4byte rfu_REQ_changeMasterSlave
_081E06E8: .4byte 0x0000ffff
thumb_func_end sub_81E05B0
+9
View File
@@ -158,3 +158,12 @@
.byte \bg, \top, \left, \height, \width, \palno
.2byte \baseBlock
.endm
.macro abspath relative
.if REVISION == 0
.ascii "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/"
.else
.ascii "C:/WORK/POKeFRLG/Src/pm_lgfr_ose/source/"
.endif
.asciz "\relative"
.endm
+8
View File
@@ -337,7 +337,11 @@ sub_8105800: @ 8105800
cmp r0, 0
beq _08105864
ldrb r0, [r5]
.if REVISION == 0
cmp r0, 0
.else
cmp r0, 0xFF
.endif
beq _08105878
_08105840:
mov r1, sp
@@ -351,7 +355,11 @@ _08105840:
lsrs r4, r0, 24
adds r0, r5, r4
ldrb r0, [r0]
.if REVISION == 0
cmp r0, 0
.else
cmp r0, 0xFF
.endif
beq _08105878
cmp r4, 0xA
bls _08105840
+23 -3
View File
@@ -1,7 +1,27 @@
#!/bin/bash
if [ "$1" == "firered" ] || [ "$1" == "leafgreen" ] || [ "$1" == "firered_rev1" ] || [ "$1" == "leafgreen_rev1" ]; then
buildname="$1"
shift
else
buildname=firered
fi
if [ "$buildname" == "firered" ]; then
baserom=baserom
elif [ "$buildname" == "leafgreen" ]; then
baserom=baserom_lg
elif [ "$buildname" == "firered_rev1" ]; then
baserom=baserom_fr_rev1
elif [ "$buildname" == "leafgreen_rev1" ]; then
baserom=baserom_lg_rev1
else
echo unknown buildname $buildname
exit 1
fi
OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb"
OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))"
$OBJDUMP $OPTIONS baserom.gba > baserom.dump
$OBJDUMP $OPTIONS pokefirered.gba > pokefirered.dump
diff -u baserom.dump pokefirered.dump
$OBJDUMP $OPTIONS ${baserom}.gba > ${baserom}.dump || exit 1
$OBJDUMP $OPTIONS poke${buildname}.gba > poke${buildname}.dump
diff -u ${baserom}.dump poke${buildname}.dump
+51
View File
@@ -0,0 +1,51 @@
# Default variables
GAME_VERSION ?= FIRERED
GAME_REVISION ?= 0
GAME_LANGUAGE ?= ENGLISH
MODERN ?= 0
COMPARE ?= 0
# For gbafix
MAKER_CODE := 01
# Version
ifeq ($(GAME_VERSION),FIRERED)
TITLE := POKEMON FIRE
GAME_CODE := BPR
BUILD_NAME := firered
else
ifeq ($(GAME_VERSION),LEAFGREEN)
TITLE := POKEMON LEAF
GAME_CODE := BPG
BUILD_NAME := leafgreen
else
$(error unknown version $(GAME_VERSION))
endif
endif
# Revision
ifeq ($(GAME_REVISION),0)
BUILD_NAME := $(BUILD_NAME)
else
ifeq ($(GAME_REVISION),1)
BUILD_NAME := $(BUILD_NAME)_rev1
else
$(error unknown revision $(GAME_REVISION))
endif
endif
# Language
ifeq ($(GAME_LANGUAGE),ENGLISH)
BUILD_NAME := $(BUILD_NAME)
GAME_CODE := $(GAME_CODE)E
else
$(error unknown language $(GAME_LANGUAGE))
endif
# Modern GCC
ifeq ($(MODERN), 0)
BUILD_NAME := $(BUILD_NAME)
else
BUILD_NAME := $(BUILD_NAME)_modern
endif
+3 -1
View File
@@ -1,3 +1,5 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
@@ -88,7 +90,7 @@ gUnknown_83A7208:: @ 83A7208
.align 2
gUnknown_83A720C:: @ 83A720C
.asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/evobjmv.c"
abspath "evobjmv.c"
.align 2
gUnknown_83A7240:: @ 83A7240
+5 -5
View File
@@ -12361,9 +12361,8 @@ gUnknown_81C1300:: @ 81C1300
.string "It looks like it's having fun.$"
EventScript_1C1338:: @ 81C1338
waitse
setdivewarp MAP_UNKNOWN_MAP_00_00, 72, 7187, 8
nop
map_script_2 VAR_0x4030, 0, EventScript_1C1348
.2byte 0
copyvar VAR_0x4030, 1
end
@@ -14474,8 +14473,9 @@ Text_1C55A4:: @ 81C55A4
.string " \n"
.string "  $"
Text_1C55C5:: @ 81C55C5
.string " $"
.align 2
Text_1C55C8:: @ 81C55C8
.string "$"
gText_WouldYouLikeToSaveTheGame:: @ 81C55C9
.string "Would you like to save the game?$"
+7 -4
View File
@@ -45,6 +45,9 @@ gUnknown_83CBB10:: @ 83CBB10 gbapal gUnknown_83CBA90
gUnknown_83CBB30:: @ 83CBB30 4bpp
.incbin "graphics/field_effects/unk_83CBB30.bin"
gUnknown_83CBDB0::
.incbin "graphics/field_effects/unk_83CBDB0.4bpp"
.align 2
gUnknown_83CBE30:: @ 83CBE30 dataptr
.4byte FieldEffectCmd_loadtiles
@@ -398,10 +401,10 @@ gUnknown_83CC244:: @ 83CC244 dataptr
.4byte sub_8087CB4
gUnknown_83CC250:: @ 83CC250 sprite_frames
obj_frame_tiles 0x083cbdb0, 0x0020
obj_frame_tiles 0x083cbdd0, 0x0020
obj_frame_tiles 0x083cbdf0, 0x0020
obj_frame_tiles 0x083cbe10, 0x0020
obj_frame_tiles gUnknown_83CBDB0 + 0x00, 0x0020
obj_frame_tiles gUnknown_83CBDB0 + 0x20, 0x0020
obj_frame_tiles gUnknown_83CBDB0 + 0x40, 0x0020
obj_frame_tiles gUnknown_83CBDB0 + 0x60, 0x0020
gUnknown_83CC270:: @ 83CC270 animcmd
obj_image_anim_frame 0x0000, 0
+4 -4
View File
@@ -221,10 +221,10 @@ gUnknown_843F9A0::
obj_image_anim_end
gUnknown_843F9A8::
.4byte 0x843f988
.4byte 0x843f990
.4byte 0x843f998
.4byte 0x843f9a0
.4byte gUnknown_843F988
.4byte gUnknown_843F990
.4byte gUnknown_843F998
.4byte gUnknown_843F9A0
gUnknown_843F9B8:: @ 843F9B8 sprite_template
spr_template 1, 1, gUnknown_843F980, gUnknown_843F9A8, NULL, gDummySpriteAffineAnimTable, sub_8101B20
+1 -1
View File
@@ -95,7 +95,7 @@ gUnknown_843ED88:: @ 843ED88
.align 2
gUnknown_843ED94:: @ 843ED94
.asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/rfu.c"
abspath "rfu.c"
.align 2
gUnknown_843EDC4:: @ 843EDC4
+1 -1
View File
@@ -315,7 +315,7 @@ gUnknown_8457120:: @ 8457120
.align 2
gUnknown_8457138:: @ 8457138
.asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/rfu_union_tool.c"
abspath "rfu_union_tool.c"
.align 2
gUnknown_8457174:: @ 8457174
+5
View File
@@ -980,8 +980,13 @@ gUnknown_81B752C:: @ 81B752C
.string " the POKéDEX list.\n"
.string "{CIRCLE_2} A caught POKéMON will provide a\n"
.string " large amount of data.\n"
.if REVISION < 1
.string "{CIRCLE_3} Select “AREA” to display the TOWN\n"
.string " MAP with the POKéMON's habitat(s).$"
.else
.string "{CIRCLE_3} Select “NEXT DATA” to display the\n"
.string " TOWN MAP with its habitat(s).$"
.endif
gUnknown_81B7611:: @ 81B7611
.string "{CIRCLE_1} Go up to the PC at home, then press\n"
View File
+1
View File
@@ -0,0 +1 @@
dd5945db9b930750cb39d00c84da8571feebf417 pokefirered_rev1.gba
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

+9 -3
View File
@@ -11,9 +11,15 @@
// #define NDEBUG
// Fire Red likely forgot to define NDEBUG/NOAGBPRN before release, leading
// to the inclusion of asserts in the retail ROM. Don't try to re-enable this yet
// since not all baseroms and pointers have been dumped yet and will result in
// a broken ROM.
// to the inclusion of asserts in the retail ROM.
#if REVISION == 0
#define CODE_ROOT "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/"
#else
#define CODE_ROOT "C:/WORK/POKeFRLG/Src/pm_lgfr_ose/source/"
#endif
#define ABSPATH(x) (CODE_ROOT x)
#ifdef ENGLISH
#define UNITS_IMPERIAL
+1
View File
@@ -0,0 +1 @@
574fa542ffebb14be69902d1d36f1ec0a4afd71e pokeleafgreen.gba
+1
View File
@@ -0,0 +1 @@
7862c67bdecbe21d1d69ce082ce34327e1c6ed5e pokeleafgreen_rev1.gba
+2 -2
View File
@@ -41,8 +41,8 @@ bool32 ValidateTrainerTowerData(struct EReaderTrainerHillSet * ttdata)
static bool32 CEReaderTool_SaveTrainerTower_r(struct EReaderTrainerHillSet * ttdata, u8 * buffer)
{
AGB_ASSERT_EX(ttdata->dummy == 0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c", 198);
AGB_ASSERT_EX(ttdata->id == 0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c", 199)
AGB_ASSERT_EX(ttdata->dummy == 0, ABSPATH("cereader_tool.c"), 198);
AGB_ASSERT_EX(ttdata->id == 0, ABSPATH("cereader_tool.c"), 199)
memset(buffer, 0, 0x1000);
memcpy(buffer, ttdata, SEC30_SIZE);
+14 -2
View File
@@ -1063,9 +1063,14 @@ const u8 gMewPokedexText[] = _(
const u8 gMewPokedexTextUnused[] = _("");
const u8 gChikoritaPokedexText[] = _(
#if REVISION == 0
"Its pleasantly aromatic leaves have the\n"
#else
"Its pleasantly aromatic leaf has the\n"
#endif
"ability to check the humidity and\n"
"temperature.");
"temperature."
);
const u8 gChikoritaPokedexTextUnused[] = _("");
@@ -1735,9 +1740,16 @@ const u8 gPupitarPokedexText[] = _(
const u8 gPupitarPokedexTextUnused[] = _("");
const u8 gTyranitarPokedexText[] = _(
#if REVISION == 0
"Its body can't be harmed by any sort of\n"
"attack, so it is very eager to make\n"
"challenges against enemies.");
"challenges against enemies."
#else
"It has an impudent nature. Having great\n"
"strength, it can even change surrounding\n"
"landforms."
#endif
);
const u8 gTyranitarPokedexTextUnused[] = _("");
+4
View File
@@ -1503,7 +1503,11 @@ static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycare
u8 lvlText[12];
u8 intText[8];
#if REVISION == 0
strcpy((char *)lvlText, (const char *)gText_Lv);
#else
StringCopy(lvlText, gText_Lv);
#endif
level = GetLevelAfterDaycareSteps(&daycare->mons[daycareSlotId].mon, daycare->mons[daycareSlotId].steps);
ConvertIntToDecimalStringN(intText, level, STR_CONV_MODE_LEFT_ALIGN, 3);
StringAppend(lvlText, intText);
+1 -1
View File
@@ -1915,7 +1915,7 @@ u16 Special_BattleCardAction(void)
case 4:
return sub_81445C0(2);
default:
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scr_tool.c", 3873);
AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873);
return 0;
}
}
+1 -1
View File
@@ -83,7 +83,7 @@ void sub_8058A00(struct MapHeader * mapHeader)
VMap.map = gBackupMapLayout;
VMap.Xsize = mapLayout->width + 15;
VMap.Ysize = mapLayout->height + 14;
AGB_ASSERT_EX(VMap.Xsize * VMap.Ysize <= VIRTUAL_MAP_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/fieldmap.c", 158);
AGB_ASSERT_EX(VMap.Xsize * VMap.Ysize <= VIRTUAL_MAP_SIZE, ABSPATH("fieldmap.c"), 158);
map_copy_with_padding(mapLayout->map, mapLayout->width, mapLayout->height);
mapheader_copy_mapdata_of_adjacent_maps(mapHeader);
}
+17
View File
@@ -131,6 +131,11 @@ static void sub_80EE9D4(struct Sprite * sprite);
static void sub_80EEA94(struct IntroSequenceData * ptr);
static void sub_80EEB08(struct Sprite * sprite);
static void sub_80EEBE4(void);
#if REVISION >= 1
static void sub_rev1_80EDFAC(void);
#else
#define sub_rev1_80EDFAC()
#endif
extern const u32 gMultiBootProgram_PokemonColosseum_Start[];
@@ -828,6 +833,7 @@ static void sub_80ECD60(struct IntroSequenceData * this)
if (!IsDma3ManagerBusyWithBgCopy())
{
DestroySprite(this->field_0014);
sub_rev1_80EDFAC();
this->field_0012 = 0;
this->field_0004++;
}
@@ -1592,6 +1598,17 @@ static struct Sprite * sub_80EDF68(void)
return &gSprites[spriteId];
}
#if REVISION >= 1
static void sub_rev1_80EDFAC(void)
{
int i;
for (i = 0; i < 2; i++)
{
gSprites[CreateSprite(&gUnknown_840BCFC, 0x68 + 32 * i, 0x6c, 5)].oam.tileNum += i * 4;
}
}
#endif
static void sub_80EDF94(struct IntroSequenceData * this)
{
u8 taskId;
+7 -1
View File
@@ -57,14 +57,20 @@ static void IntrDummy(void);
#if defined(FIRERED)
#define GAME_VERSION VERSION_FIRE_RED
#elif defined(LEAF_GREEN)
#elif defined(LEAFGREEN)
#define GAME_VERSION VERSION_LEAF_GREEN
#else
#error unknown version
#endif
const u8 gGameVersion = GAME_VERSION;
const u8 gGameLanguage = GAME_LANGUAGE;
#if REVISION == 0
const char BuildDateTime[] = "2004 04 26 11:20";
#else
const char BuildDateTime[] = "2004 07 20 09:30";
#endif
const IntrFunc gIntrTableTemplate[] =
{
+6 -6
View File
@@ -93,7 +93,7 @@ void *AllocInternal(void *heapStart, u32 size)
if (pos->next == head)
{
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/gflib/malloc.c", 174);
AGB_ASSERT_EX(0, ABSPATH("gflib/malloc.c"), 174);
return NULL;
}
@@ -103,20 +103,20 @@ void *AllocInternal(void *heapStart, u32 size)
void FreeInternal(void *heapStart, void *p)
{
AGB_ASSERT_EX(p != NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/gflib/malloc.c", 195);
AGB_ASSERT_EX(p != NULL, ABSPATH("gflib/malloc.c"), 195);
if (p) {
struct MemBlock *head = (struct MemBlock *)heapStart;
struct MemBlock *pos = (struct MemBlock *)((u8 *)p - sizeof(struct MemBlock));
AGB_ASSERT_EX(pos->magic_number == MALLOC_SYSTEM_ID, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/gflib/malloc.c", 204);
AGB_ASSERT_EX(pos->flag == TRUE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/gflib/malloc.c", 205);
AGB_ASSERT_EX(pos->magic_number == MALLOC_SYSTEM_ID, ABSPATH("gflib/malloc.c"), 204);
AGB_ASSERT_EX(pos->flag == TRUE, ABSPATH("gflib/malloc.c"), 205);
pos->flag = FALSE;
// If the freed block isn't the last one, merge with the next block
// if it's not in use.
if (pos->next != head) {
if (!pos->next->flag) {
AGB_ASSERT_EX(pos->next->magic_number == MALLOC_SYSTEM_ID, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/gflib/malloc.c", 211);
AGB_ASSERT_EX(pos->next->magic_number == MALLOC_SYSTEM_ID, ABSPATH("gflib/malloc.c"), 211);
pos->size += sizeof(struct MemBlock) + pos->next->size;
pos->next->magic_number = 0;
pos->next = pos->next->next;
@@ -129,7 +129,7 @@ void FreeInternal(void *heapStart, void *p)
// if it's not in use.
if (pos != head) {
if (!pos->prev->flag) {
AGB_ASSERT_EX(pos->prev->magic_number == MALLOC_SYSTEM_ID, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/gflib/malloc.c", 228);
AGB_ASSERT_EX(pos->prev->magic_number == MALLOC_SYSTEM_ID, ABSPATH("gflib/malloc.c"), 228);
pos->prev->next = pos->next;
+1 -1
View File
@@ -142,7 +142,7 @@ static u32 GetMENewsJisanState(struct MENewsJisanStruct *a0)
return 4;
return 5;
default:
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c", 383);
AGB_ASSERT_EX(0, ABSPATH("menews_jisan.c"), 383);
return 0;
}
}
+4 -4
View File
@@ -852,7 +852,7 @@ u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command)
case 4:
return a0->unk_44;
default:
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 825);
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 825);
return 0;
}
}
@@ -881,7 +881,7 @@ void sub_814451C(u32 command)
}
if (dest == NULL)
{
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 868);
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 868);
}
else if (++(*dest) > 999)
{
@@ -939,7 +939,7 @@ u16 sub_81445C0(u32 command)
break;
}
}
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 913);
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 913);
return 0;
}
@@ -977,7 +977,7 @@ void sub_8144714(u32 a0, u32 a1)
sub_8144824(1, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
break;
default:
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 988);
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988);
}
}
}
+27 -27
View File
@@ -68,7 +68,7 @@ static void mevent_srv_free_resources(struct mevent_srv_common * svr)
static void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void * src, u32 size)
{
AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257);
AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, ABSPATH("mevent_server.c"), 257);
mevent_srv_sub_init_send(&svr->manager, ident, src, size);
}
@@ -129,7 +129,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
switch (cmd->instr)
{
case 0:
AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 354);
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 354);
svr->mainseqno = 1;
svr->param = cmd->flag;
break;
@@ -137,23 +137,23 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
svr->mainseqno = 3;
break;
case 2:
AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 364);
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 364);
mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer);
svr->mainseqno = 2;
break;
case 3:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 370);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 370);
svr->cmdidx = 0;
svr->cmdBuffer = cmd->parameter;
break;
case 5:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 376);
AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 377);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 376);
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 377);
memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventClientHeaderStruct));
break;
case 6:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 382);
AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 383);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 382);
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 383);
svr->param = ValidateMEventClientHeader(svr->mevent_unk1442cc);
break;
case 4:
@@ -164,42 +164,42 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
}
break;
case 7:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 396);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 396);
ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->card);
svr->param = sub_8144418(ptr, svr->mevent_unk1442cc, ptr);
break;
case 8:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 402);
AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 403);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 402);
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 403);
svr->param = *(u32 *)svr->recvBuffer;
break;
case 9:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 408);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408);
ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord);
svr->param = sub_8144434(ptr, svr->mevent_unk1442cc, ptr);
break;
case 10:
AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 415);
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415);
svr->param = sub_81444B0(svr->mevent_unk1442cc, cmd->flag);
break;
case 11:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 420);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 420);
svr->param = sub_8144474(svr->mevent_unk1442cc, cmd->parameter);
break;
case 12:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 426);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 426);
svr->param = mevent_compare_pointers(cmd->parameter, *(void **)svr->recvBuffer);
break;
case 14:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 432);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432);
mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->news), sizeof(struct MEWonderNewsData));
break;
case 13:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 438);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438);
mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->card), sizeof(struct MEWonderCardData));
break;
case 16:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 444);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444);
mevent_srv_common_init_send(svr, 0x18, mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord), 4);
break;
case 15:
@@ -215,7 +215,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
mevent_srv_common_init_send(svr, 0x10, cmd->parameter, cmd->flag);
break;
case 19:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 466);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 466);
mevent_srv_common_init_send(svr, 0x1a, cmd->parameter, 188);
break;
case 20:
@@ -225,15 +225,15 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
mevent_srv_common_init_send(svr, 0x1c, cmd->parameter, cmd->flag);
break;
case 22:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 481);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 481);
memcpy(svr->card, cmd->parameter, 332);
break;
case 23:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 486);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 486);
memcpy(svr->news, cmd->parameter, 444);
break;
case 21:
AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 491);
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 491);
svr->sendWord = *(u32 *)cmd->parameter;
break;
case 24:
@@ -245,16 +245,16 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
svr->sendBuffer2Size = cmd->flag;
break;
case 26:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 506);
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506);
memcpy(svr->card, GetSavedWonderCard(), 332);
sub_814410C(svr->card);
break;
case 27:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 512);
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512);
memcpy(svr->news, GetSavedWonderNews(), 444);
break;
case 28:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 517);
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 517);
svr->sendBuffer1 = sub_8069E48();
break;
case 29:
@@ -276,8 +276,8 @@ static u32 (*const func_tbl[])(struct mevent_srv_common *) = {
static u32 mevent_srv_exec_common(struct mevent_srv_common * svr)
{
u32 response;
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 546);
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 546);
response = func_tbl[svr->mainseqno](svr);
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 548);
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 548);
return response;
}
+2 -2
View File
@@ -105,7 +105,7 @@ bool8 ScrCmd_special(struct ScriptContext *ctx)
if (specialPtr < gSpecialsEnd)
(*specialPtr)();
else
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scrcmd.c", 241);
AGB_ASSERT_EX(0, ABSPATH("scrcmd.c"), 241);
return FALSE;
}
@@ -116,7 +116,7 @@ bool8 ScrCmd_specialvar(struct ScriptContext *ctx)
if (specialPtr < gSpecialsEnd)
*varPtr = (*specialPtr)();
else
AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scrcmd.c", 263);
AGB_ASSERT_EX(0, ABSPATH("scrcmd.c"), 263);
return FALSE;
}
+37
View File
@@ -60,6 +60,7 @@ static void UpdateScanlineEffectRegBuffer(s16 a0);
static void ScheduleStopScanlineEffect(void);
static void LoadMainTitleScreenPalsAndResetBgs(void);
static void CB2_FadeOutTransitionToSaveClearScreen(void);
static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite);
static void CB2_FadeOutTransitionToBerryFix(void);
static void LoadSpriteGfxAndPals(void);
static void Task_FlameOrLeafSpawner(u8 taskId);
@@ -238,6 +239,12 @@ static const u8 gUnknown_83BFBD4[] = {
0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90
};
#if defined(LEAFGREEN)
static const u16 gUnknown_LG_83BFA10[] = {
50, 80, 110, 60, 90, 70, 100, 50
};
#endif
void CB2_InitTitleScreen(void)
{
switch (gMain.state)
@@ -876,6 +883,7 @@ static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite)
#endif
}
#if defined(FIRERED)
static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId)
{
u8 spriteId;
@@ -901,6 +909,35 @@ static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool
}
return FALSE;
}
#elif defined(LEAFGREEN)
void _CreateFlameOrLeafSprite(s32 y0, s32 x1, s32 y1)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, 0xF0, y0, 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[0] = 0xF00;
gSprites[spriteId].data[1] = x1;
gSprites[spriteId].data[2] = y0 << 4;
gSprites[spriteId].data[3] = y1;
gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf;
}
}
void SpriteCallback_LG_8079800(struct Sprite * sprite)
{
sprite->pos1.x -= 7;
if (sprite->pos1.x < -16)
{
sprite->pos1.x = 0x100;
sprite->data[7]++;
if (sprite->data[7] >= NELEMS(gUnknown_LG_83BFA10))
sprite->data[7] = 0;
sprite->pos1.y = gUnknown_LG_83BFA10[sprite->data[7]];
}
}
#define CreateFlameOrLeafSprite ((bool32 (*)())_CreateFlameOrLeafSprite)
#endif //FRLG
static void Task_FlameOrLeafSpawner(u8 taskId)
{