summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml3
-rw-r--r--Makefile49
-rw-r--r--asm/crt0.s43
-rw-r--r--asm/librfu.s8
-rw-r--r--asm/macros.inc9
-rw-r--r--asm/pokedex_screen.s8
-rwxr-xr-xasmdiff.sh26
-rw-r--r--config.mk51
-rw-r--r--data/event_object_80688E4.s4
-rw-r--r--data/event_scripts.s10
-rw-r--r--data/field_effect.s11
-rw-r--r--data/link_rfu.s8
-rw-r--r--data/link_rfu_2.s2
-rw-r--r--data/link_rfu_3.s2
-rw-r--r--data/text/help_system.inc5
-rw-r--r--firered.sha1 (renamed from rom.sha1)0
-rw-r--r--firered_rev1.sha11
-rw-r--r--graphics/field_effects/unk_83CBB30.binbin768 -> 640 bytes
-rw-r--r--graphics/field_effects/unk_83CBDB0.pngbin0 -> 217 bytes
-rw-r--r--include/config.h12
-rw-r--r--leafgreen.sha11
-rw-r--r--leafgreen_rev1.sha11
-rw-r--r--src/cereader_tool.c4
-rw-r--r--src/data/pokemon/pokedex_text.h16
-rw-r--r--src/daycare.c4
-rw-r--r--src/field_specials.c2
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/intro.c17
-rw-r--r--src/main.c8
-rw-r--r--src/malloc.c12
-rw-r--r--src/menews_jisan.c2
-rw-r--r--src/mevent.c8
-rw-r--r--src/mevent_server.c54
-rw-r--r--src/scrcmd.c4
-rw-r--r--src/title_screen.c37
35 files changed, 299 insertions, 125 deletions
diff --git a/.travis.yml b/.travis.yml
index 519ba1aca..e0608744a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -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
diff --git a/Makefile b/Makefile
index f818c84ab..ff251c99b 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/asm/crt0.s b/asm/crt0.s
index f2e28c9e1..609845337 100644
--- a/asm/crt0.s
+++ b/asm/crt0.s
@@ -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
diff --git a/asm/librfu.s b/asm/librfu.s
index bdf816bd8..a291fcad3 100644
--- a/asm/librfu.s
+++ b/asm/librfu.s
@@ -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
diff --git a/asm/macros.inc b/asm/macros.inc
index 3cc26c6f7..ffbe3db29 100644
--- a/asm/macros.inc
+++ b/asm/macros.inc
@@ -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
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s
index 4bd153c77..94107279e 100644
--- a/asm/pokedex_screen.s
+++ b/asm/pokedex_screen.s
@@ -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
diff --git a/asmdiff.sh b/asmdiff.sh
index d4627c007..9e2bef55b 100755
--- a/asmdiff.sh
+++ b/asmdiff.sh
@@ -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
diff --git a/config.mk b/config.mk
new file mode 100644
index 000000000..bf8f2ce3f
--- /dev/null
+++ b/config.mk
@@ -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
diff --git a/data/event_object_80688E4.s b/data/event_object_80688E4.s
index 884bf379f..8d1917825 100644
--- a/data/event_object_80688E4.s
+++ b/data/event_object_80688E4.s
@@ -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
diff --git a/data/event_scripts.s b/data/event_scripts.s
index c2daa0031..21fdffe43 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -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?$"
diff --git a/data/field_effect.s b/data/field_effect.s
index c6affccd2..7e797c560 100644
--- a/data/field_effect.s
+++ b/data/field_effect.s
@@ -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
diff --git a/data/link_rfu.s b/data/link_rfu.s
index 8e9abd3f0..79be01714 100644
--- a/data/link_rfu.s
+++ b/data/link_rfu.s
@@ -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
diff --git a/data/link_rfu_2.s b/data/link_rfu_2.s
index 5285ac578..4f88177aa 100644
--- a/data/link_rfu_2.s
+++ b/data/link_rfu_2.s
@@ -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
diff --git a/data/link_rfu_3.s b/data/link_rfu_3.s
index 2effddd97..6cd65b04d 100644
--- a/data/link_rfu_3.s
+++ b/data/link_rfu_3.s
@@ -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
diff --git a/data/text/help_system.inc b/data/text/help_system.inc
index 7a74de349..ccc57332b 100644
--- a/data/text/help_system.inc
+++ b/data/text/help_system.inc
@@ -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"
diff --git a/rom.sha1 b/firered.sha1
index a4d3b2fe2..a4d3b2fe2 100644
--- a/rom.sha1
+++ b/firered.sha1
diff --git a/firered_rev1.sha1 b/firered_rev1.sha1
new file mode 100644
index 000000000..2cb2ef855
--- /dev/null
+++ b/firered_rev1.sha1
@@ -0,0 +1 @@
+dd5945db9b930750cb39d00c84da8571feebf417 pokefirered_rev1.gba
diff --git a/graphics/field_effects/unk_83CBB30.bin b/graphics/field_effects/unk_83CBB30.bin
index 9543a056e..f7c2f2142 100644
--- a/graphics/field_effects/unk_83CBB30.bin
+++ b/graphics/field_effects/unk_83CBB30.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83CBDB0.png b/graphics/field_effects/unk_83CBDB0.png
new file mode 100644
index 000000000..5a84d2e06
--- /dev/null
+++ b/graphics/field_effects/unk_83CBDB0.png
Binary files differ
diff --git a/include/config.h b/include/config.h
index 491eadf13..67dc38a2b 100644
--- a/include/config.h
+++ b/include/config.h
@@ -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
diff --git a/leafgreen.sha1 b/leafgreen.sha1
new file mode 100644
index 000000000..3cb75847e
--- /dev/null
+++ b/leafgreen.sha1
@@ -0,0 +1 @@
+574fa542ffebb14be69902d1d36f1ec0a4afd71e pokeleafgreen.gba
diff --git a/leafgreen_rev1.sha1 b/leafgreen_rev1.sha1
new file mode 100644
index 000000000..94c865e70
--- /dev/null
+++ b/leafgreen_rev1.sha1
@@ -0,0 +1 @@
+7862c67bdecbe21d1d69ce082ce34327e1c6ed5e pokeleafgreen_rev1.gba
diff --git a/src/cereader_tool.c b/src/cereader_tool.c
index 654a70b48..2c5d05018 100644
--- a/src/cereader_tool.c
+++ b/src/cereader_tool.c
@@ -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);
diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h
index 3285c8d11..be073876f 100644
--- a/src/data/pokemon/pokedex_text.h
+++ b/src/data/pokemon/pokedex_text.h
@@ -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[] = _("");
diff --git a/src/daycare.c b/src/daycare.c
index 8862dfda9..b3e76faba 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -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);
diff --git a/src/field_specials.c b/src/field_specials.c
index de3bc7d57..7abc3f5c9 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -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;
}
}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 5582b6977..adb26f230 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -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);
}
diff --git a/src/intro.c b/src/intro.c
index 33a03a389..cee1c8fec 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -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;
diff --git a/src/main.c b/src/main.c
index 9294c80ce..6d50e5fd3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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[] =
{
diff --git a/src/malloc.c b/src/malloc.c
index 4768721ba..590d45c05 100644
--- a/src/malloc.c
+++ b/src/malloc.c
@@ -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;
diff --git a/src/menews_jisan.c b/src/menews_jisan.c
index f38de9cfd..d8971f6a2 100644
--- a/src/menews_jisan.c
+++ b/src/menews_jisan.c
@@ -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;
}
}
diff --git a/src/mevent.c b/src/mevent.c
index 5ed001d09..3eff0c086 100644
--- a/src/mevent.c
+++ b/src/mevent.c
@@ -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);
}
}
}
diff --git a/src/mevent_server.c b/src/mevent_server.c
index 252a8885f..bebd69fe3 100644
--- a/src/mevent_server.c
+++ b/src/mevent_server.c
@@ -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;
}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 6a5d61227..a88655e17 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -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;
}
diff --git a/src/title_screen.c b/src/title_screen.c
index 2d6b6cf15..5955ea3a3 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -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)
{